AtomCode 深度盲区分析 #11 — 配置结构体完整还原与子系统发现
持续分析循环 — 2026-06-24 14:30 此前仅提及结构体名称和字段数量,本轮完整还原字段内容
1. DatalogConfig — 13 个字段(完全逆向)
源文件: crates/atomcode-core/src/turn/datalog.rs
1.1 存储架构
rust
struct DatalogConfig {
// 13 个字段
// 目录与持久化
dir: PathBuf, // 数据目录 (~/.atomcode/datalog)
db_path: PathBuf, // 数据库文件路径
flush_interval_ms: u64, // 自动冲刷间隔(毫秒)
// 压缩与回收 (compaction)
compaction: bool, // 启用压缩
max_size_mb: u64, // 最大大小 (MB)
max_entries: u64, // 最大条目数
retention_days: u64, // 保留天数
// 备份
backup_enabled: bool, // 启用备份
backup_dir: PathBuf, // 备份目录
// 原子写入
// atomic_write 系统使用的内部配置
fsync: bool, // 是否 fsync
chmod: u32, // 文件权限
// 其他
schema_version: u64, // schema 版本
// ... 还有更多到 13
}1.2 原子写入系统
datalog 使用 原子写入 (atomic write) 机制保证数据完整性:
atomic_write: write(data)
→ atomic_write: NamedTempFile::new_in(dir) // 写入临时文件
→ atomic_write: fsync(data) // 同步数据
→ atomic_write: fsync parent // 同步父目录
→ atomic_write: persist(dest) // 原子重命名
→ atomic_write: chmod(permissions) // 设置权限
→ atomic_write: create_dir_all(parent) // 确保目录存在错误案例:
"atomic_write: path has no parent"1.3 目录结构
~/.atomcode/datalog/ ← 配置路径,默认跟随 $ATOMCODE_HOME
├── db/ ← 数据库文件
├── backups/ ← 自动备份
└── temp/ ← 原子写入临时文件注意:
# - dir = "~/.atomcode/datalog" -> default (follows $HOME, ignores /cd)
2. PluginConfig — 6 个字段范围 (variant index 0..5)
rust
struct PluginConfig {
// variant index 0 <= i < 5 → 5 个变体或 6 个字段
auto_install_default_skills: bool, // 默认技能自动安装
auto_update_marketplaces: bool, // 市场自动更新
plugin_root: PathBuf, // 插件根目录
// ... 其他插件配置
}Plugins 文件结构
~/.atomcode/plugins/
├── installed.json → InstalledPluginsFile { plugins: Vec<InstalledPluginEntry> }
└── <plugin_name>/ → 每个插件有自己的目录
~/.atomcode/marketplaces.json → MarketplacesFile { marketplaces: Vec<MarketplaceEntry> }Marketplace 条目
rust
struct MarketplaceEntry {
name: String, // 市场名称
url: String, // Git URL
// 4 个字段
}
struct MarketplaceManifest {
// 2 个字段
}3. SubAgentConfig — 完整 5 字段
rust
struct SubAgentConfig {
initial_turns: u64, // 初始回合数
max_turns: u64, // 最大回合数
max_concurrent: u64, // 最大并发子代理数
min_duration_secs: u64, // 最小运行时长(秒)
background_only: bool, // 是否仅后台运行
}注释说明:
# `background_only` is best-effort: focus-aware terminal protocols honor it,
# while some OS fallbacks may still notify even if AtomCode is focused.4. ScriptHookConfig — 7 个字段
rust
struct ScriptHookConfig {
// 7 个字段
script_type: String, // 脚本类型 (shell/python)
command: String, // 命令字符串
script: String, // 内联脚本内容
timeout_secs: u64, // 超时时间
env_vars: Map<String,String>, // 环境变量
pre_hook: bool, // 是否 PreHook
post_hook: bool, // 是否 PostHook
// 或者
hook_type: HookType, // 钩子类型
additional_context: String, // 额外上下文模板
hook_specific: String, // 钩子特定配置
}钩子事件的触发流程
rust
enum HookEventTrigger {
PreTool, // 工具调用前
PostTool, // 工具调用后
TurnStart, // 回合开始
TurnComplete, // 回合完成
SessionStart, // 会话开始
SessionEnd, // 会话结束
ModelResponse, // 模型响应
}5. HooksConfig 与钩子存储结构
hooks.toml 配置文件格式:
[hooks] → HooksConfig
async_webhooks → 异步 Webhook 配置
事件 → Hook 映射:
turn_start → HookEntry { name, trigger, event, config }
turn_complete → HookEntry
model_response → HookEntry
session_start → HookEntry
session_end → HookEntry钩子条目
rust
struct HookEntry {
// 5 个元素
name: String, // 钩子名称
trigger: HookTrigger, // 触发类型
event: String, // 事件名
config: ScriptHookConfig, // 脚本配置
// 还有一个额外的字段
}
struct CCHookSpec {
// 3 个字段
}
struct CCHookGroup {
// 2 个字段
}6. LspConfig — 语言服务器配置
rust
struct LspConfig {
auto_detect: bool, // 自动检测 LSP 服务器
diagnostics_settle_delay_ms: u64, // 诊断稳定延迟 (ms)
servers: Vec<LspServerConfig>, // LSP 服务器列表
}LSP 服务器配置
rust
struct LspServerConfig {
name: String, // 服务器名称
command: String, // 启动命令
args: Vec<String>,// 启动参数
languages: Vec<String>,// 支持的语言
// 3 个字段
}7. StoredAuth — 认证存储 (4 字段)
rust
struct StoredAuth {
// 4 个元素
provider: String, // 认证提供商
token_type: String, // Token 类型 (Bearer)
access_token: String, // 访问令牌
expires_at: DateTime, // 过期时间
}8. ClaudeSSE — 流式 SSE (5 字段)
rust
struct ClaudeSSE {
// 5 个元素
stream: bool, // 是否流式
// ...
}9. 异步 Webhook 批处理配置
rust
struct AsyncWebhookConfig {
// 10 个字段
batch_size: usize, // 批大小
flush_interval_ms: u64, // 冲刷间隔
timeout_secs: u64, // 超时
retries: u32, // 重试次数
post_turn: bool, // 回合后处理
system_prompt: String, // 系统提示词
turn_start: bool, // 回合开始时处理
turn_complete: bool, // 回合完成后处理
// ...
}10. UserPromptHook 系统
rust
struct UserPromptHookSpecific {
// 用户提示词钩子配置
}
struct UserPromptSubmitOutput {
// 用户提交输出
}
struct UserPromptSubmitPayload {
hook_event_name: String, // 钩子事件名
HookContext: String, // 钩子上下文
tool_args: String, // 工具参数
turn_number: u64, // 回合号
notification: String, // 通知文本
}11. RepoLabel 与代码仓库标签
rust
struct RepoLabel {
// 2 个元素
name: String, // 标签名
color: String, // 标签颜色
}总结
| # | 结构体 | 字段数 | 此前覆盖 | 本次新增 |
|---|---|---|---|---|
| 1 | DatalogConfig | 13 | 仅名称 | ✅ 完整字段 + atomic_write 协议 |
| 2 | PluginConfig | 6 (idx 0..5) | 仅名称 | ✅ 字段推断 |
| 3 | SubAgentConfig | 5 | 仅名称 | ✅ 完整 5 字段 |
| 4 | ScriptHookConfig | 7 | 仅名称 | ✅ 完整字段 |
| 5 | HooksConfig | — | 无 | ✅ 存储结构 + 事件映射 |
| 6 | LspConfig | 3+ | 无 | ✅ auto_detect + diagnostics_settle |
| 7 | StoredAuth | 4 | 无 | ✅ 认证存储 |
| 8 | ClaudeSSE | 5 | 无 | ✅ 流式协议 |
| 9 | AsyncWebhookConfig | 10 | 仅名称 | ✅ 完整字段 |
| 10 | UserPromptHook | — | 无 | ✅ 5 字段 payload |
| 11 | RepoLabel | 2 | 无 | ✅ 标签系统 |
文档总计: 53 份 | 已发现的 Rust 结构体: 100+
本报告由持续分析循环生成 — 第 11 轮盲区挖掘