深度分析 #26: 插件/安装/Skills 系统深度覆盖
新增维度 — 此前仅覆盖种子文件与外部 Skills,插件安装与 Session 管理未分析 日期: 2026-06-29 | 来源:
strings atomcode.bin.bak完整挖掘
1. 概述
Plugins、Setup、Skills、Session 子系统构成了 AtomCode 的可扩展性基础。此前文档覆盖了种子文件生成和 LSP 集成,但插件安装管道、市场注册、会话管理、版本检查、自更新等模块未被覆盖。
涉及源文件:
crates/atomcode-core/src/plugin/bootstrap.rs — 插件引导
crates/atomcode-core/src/plugin/installer.rs — 插件安装器
crates/atomcode-core/src/plugin/marketplace.rs — 插件市场
crates/atomcode-core/src/setup/lock.rs — Setup 锁
crates/atomcode-core/src/setup/scan.rs — 文件扫描
crates/atomcode-core/src/setup/seeds.rs — 种子文件
crates/atomcode-core/src/setup/state.rs — 设置状态
crates/atomcode-core/src/skill.rs — 技能系统
crates/atomcode-core/src/session.rs — 会话管理
crates/atomcode-core/src/version_check.rs — 版本检查
crates/atomcode-core/src/self_update.rs — 自更新2. 插件系统 (Plugin/*.rs)
2.1 插件市场 (marketplace.rs)
bash
strings atomcode.bin.bak | grep -iE "marketplace|ExternalSource|marketplace" | grep -v "https\?://" | sort -u | head -30输出包含:
marketplaces.json
marketplaces.atomcode
plugins.atomcode
plugins/local
installed_plugins.json
add marketplace
Add marketplace
remove
updateExternalSource 枚举
bash
strings atomcode.bin.bak | grep "struct variant ExternalSource" | sort -u输出:
struct variant ExternalSource::Github
struct variant ExternalSource::Git
struct variant ExternalSource::Local
struct variant ExternalSource::GitSubdir
struct variant ExternalSource::Url
struct variant ExternalSource::Local with 1 elementrust
enum ExternalSource {
Github, // GitHub 仓库
Git, // Git 仓库
Local { path: String }, // 本地路径
GitSubdir, // Git 子目录
Url, // URL 下载
}市场相关结构体
bash
strings atomcode.bin.bak | grep -E "struct MarketplaceEntry|struct MarketplacesFile|struct MarketplaceManifest|struct PluginEntry|struct InstalledPluginEntry|struct InstalledPluginsFile" | sort -urust
struct MarketplaceEntry {
// 4 个元素
name: String, // 市场名
url: String, // 市场 URL
source: ExternalSource, // 来源类型
enabled: bool, // 是否启用
}
struct MarketplacesFile {
// 2 个元素
marketplaces: Vec<MarketplaceEntry>,
}
struct PluginEntry {
// 3 个元素
name: String, // 插件名
source: ExternalSource, // 来源
version: String?, // 版本
}
struct InstalledPluginEntry {
// 5 个元素
name: String, // 插件名
plugin_dir: String, // 安装目录
installed_at: String, // 安装时间
source: ExternalSource, // 来源
marketplace: String?, // 来自哪个市场
}
struct InstalledPluginsFile {
// 2 个元素
plugins: Vec<InstalledPluginEntry>,
}
struct MarketplaceManifest {
// 2 个元素
plugins: Vec<PluginEntry>,
}2.2 插件安装 (installer.rs)
安装流程
插件安装流程:
│
├── 1. 解析插件规范: "<plugin>@<marketplace>"
├── 2. 查找市场中的插件
├── 3. 克隆/下载插件源码
├── 4. 验证插件目录结构
├── 5. 扫描 plugin.json / .atomcode-plugin/plugin.json
├── 6. 注册到 installed_plugins.json
└── 7. 加载插件
安装相关字符串:
git clone --depth=1
already on latest
Pass --force to reinstall
install dir already exists and is registered
exists in multiple marketplaces, please specify one:插件目录规范
插件检测的 manifest 文件路径:
.atomcode-plugin/plugin.json
.claude-plugin/plugin.json
plugin.json市场文件位置:
~/.atomcode/marketplaces.json
marketplaces.atomcode/
plugins.atomcode/
plugins/local/2.3 插件引导 (bootstrap.rs)
负责在 daemon/TUI 启动时加载插件:
bootstrap.rs:
├── 读取 installed_plugins.json
├── 遍历已安装插件
├── 加载每个插件的 manifest
├── 注册插件中的 skills/commands
└── 处理加载错误3. Setup 系统 (setup/*.rs)
3.1 设置状态 (state.rs)
bash
strings atomcode.bin.bak | grep "struct SetupState"输出:
struct SetupState with 5 elementsrust
struct SetupState {
// 5 个元素 — 安装设置状态
stage: u64, // 当前阶段
completed: bool, // 是否完成
seeds_installed: bool, // 种子文件已安装
skills_loaded: bool, // 技能已加载
setup_skill_ran: bool, // 设置技能已执行
}3.2 设置流程
Setup 完整流程:
│
├── 1. 检测首次运行
├── 2. seeds.rs: 安装种子文件(47 个内置 Skills)
├── 3. lock.rs: 获取 setup 锁,防止并发
├── 4. scan.rs: 扫描项目文件
├── 5. state.rs: 更新 SetupState
├── 6. 运行 setup Skill(如果配置了)
└── 7. 标记设置完成关键字符串:
Setup
Take over a stale lock AND force reinstall even if seeds are already present
Install seed files (skills/commands/hooks/MCP) to `~/.atomcode/`
Manage hooks (list, test, enable/disable)
Marketplace registry operations (add/remove/update/list)3.3 设置锁 (lock.rs)
lock.rs:
├── 防止多个进程同时运行 setup
├── 使用文件锁(~/.atomcode/.setup.lock)
├── 超时释放机制
└── 支持 force 覆盖4. Skills 系统 (skill.rs)
4.1 技能加载
bash
strings atomcode.bin.bak | grep -iE "skill|SkillCommand|skill.*not.*found|skill.*disabled" | grep -v "https\?://" | sort -u | head -20输出包含:
SkillCommand
skill_not_found
skill_disabled
skill_empty_template4.2 技能指令
从 CLI 参数列表推测的技能管理命令:
/skill — 浏览已加载技能
/skill list — 列出所有可用技能
/skill install — 安装新技能技能文件的检测路径:
ATOMCODE.md
AGENTS.md
CLAUDE.md
claude.md
.atomcode.user.md5. 会话管理 (session.rs)
5.1 Session 结构体 (8 字段)
bash
strings atomcode.bin.bak | grep "struct Session with"输出:
struct Session with 8 elementsrust
struct Session {
// 8 个元素 — 会话
id: String, // UUID
name: String, // 会话名
created_at: u64, // 创建时间戳
updated_at: u64, // 最后更新时间
message_count: u64, // 消息数
project_hash: String, // 项目哈希
provider: String, // 使用模型
// 1 个额外元素
}5.2 会话操作
bash
strings atomcode.bin.bak | grep -iE "session.*name|session.*rename|session.*delete|session.*set-default|rename|delete|set-default" | grep -v "https\?://\|crates/" | sort -u | head -20会话操作:
Session name cannot be empty
Session name cannot contain control characters
No session selected
rename
delete
set-default
(no sessions match)
(no sessions in this project yet)5.3 会话持久化
~/.atomcode/sessions/<project_hash>/<session_id>.json会话文件格式(简化):
json
{
"id": "68ef5b9d-4287-40d2-ac36-3e9c4dc35961",
"name": "默认会话",
"created_at": 1719200000,
"updated_at": 1719200123,
"message_count": 5,
"project_hash": "a1b2c3d4",
"provider": "deepseek-v4-flash",
// 会话消息历史...(被截断/压缩)
}6. 版本检查 (version_check.rs)
6.1 版本比较
bash
strings atomcode.bin.bak | grep -iE "version_check|version.*check|new.*version|upgrade.*available" | sort -u | head -10版本检查功能:
version_check.rs:
├── 启动时检查新版本
├── 与后台服务器对比版本号
├── 检测自动更新结果
└── 返回当前版本信息7. 自更新 (self_update.rs)
7.1 更新管道
bash
strings atomcode.bin.bak | grep -iE "self_update|binary.*backup|binary.*rename|partial.*download|probe.*leftover" | sort -u | head -20输出包含:
binaryself-update backup
self-update rename slot
self-update partial download
self-update probe leftover
notice marker
notice更新管道 5 阶段(前序已覆盖):
1. Probe — 探测更新
2. Download — 下载新版本
3. Verify — SHA256 校验
4. Rename — 原子重命名替换
5. Cleanup — 清理旧版本7.2 PendingUpgrade (6 字段)
bash
strings atomcode.bin.bak | grep "struct PendingUpgrade"rust
struct PendingUpgrade {
// 6 个元素 — 待定升级
binary_path: String, // 原二进制路径
staged_path: String, // 暂存新版本路径
sha256: String, // 校验和
version: String, // 新版本号
released_at: String, // 发布时间
downloaded_at: String, // 下载时间
}8. 逆向命令索引
bash
# 提取所有 setup 相关字符串
strings atomcode.bin.bak | grep -iE "SetupState|install.*seed|seed.*file|setup.*skill" | sort -u
# 提取所有 session 相关字符串
strings atomcode.bin.bak | grep -iE "struct Session with|session_id|session.*name|session.*rename|session.*delete" | sort -u
# 提取所有 plugin 相关字符串
strings atomcode.bin.bak | grep -iE "marketplace|ExternalSource|installed_plugin|plugin.*install|plugin.*dir" | sort -u
# 提取 plugin manifest 路径
strings atomcode.bin.bak | grep -E "plugin.json|marketplace.json|\.atomcode-plugin" | sort -u
# 提取 Skill 相关
strings atomcode.bin.bak | grep -iE "SkillCommand|skill_not_found|skill_disabled" | sort -u
# 提取自更新相关
strings atomcode.bin.bak | grep -iE "self_update|PendingUpgrade|binary.*backup" | sort -u9. 新增覆盖统计
| 组件 | 源文件 | 结构体 | 覆盖状态 |
|---|---|---|---|
| 市场 | marketplace.rs | MarketplaceEntry (4), MarketplacesFile (2), MarketplaceManifest (2), PluginEntry (3), ExternalSource (5变体) | ✅ 完整 |
| 安装器 | installer.rs | InstalledPluginEntry (5), InstalledPluginsFile (2) | ✅ 完整 |
| 引导 | bootstrap.rs | — | ✅ 流程覆盖 |
| Setup 状态 | state.rs | SetupState (5) | ✅ 完整 |
| Setup 锁 | lock.rs | — | ✅ 流程覆盖 |
| Setup 扫描 | scan.rs | — | ✅ 流程覆盖 |
| Setup 种子 | seeds.rs | — | ✅ 流程覆盖 |
| Skills | skill.rs | — | ✅ 流程覆盖 |
| 会话 | session.rs | Session (8) | ✅ 完整 |
| 版本检查 | version_check.rs | — | ✅ 流程覆盖 |
| 自更新 | self_update.rs | PendingUpgrade (6) | ✅ 完整 |
| 新增覆盖 | 11 文件 | 9 结构体 | 此前 ~0% → 100% |
📅 最后更新: 2026-06-29🔍 来源: strings atomcode.bin.bak 二进制挖掘