Skip to content

深度分析 #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
update

ExternalSource 枚举

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 element
rust
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 -u
rust
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 elements
rust
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_template

4.2 技能指令

从 CLI 参数列表推测的技能管理命令:

/skill          — 浏览已加载技能
/skill list     — 列出所有可用技能
/skill install  — 安装新技能

技能文件的检测路径:

ATOMCODE.md
AGENTS.md
CLAUDE.md
claude.md
.atomcode.user.md

5. 会话管理 (session.rs)

5.1 Session 结构体 (8 字段)

bash
strings atomcode.bin.bak | grep "struct Session with"

输出:

struct Session with 8 elements
rust
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 -u

9. 新增覆盖统计

组件源文件结构体覆盖状态
市场marketplace.rsMarketplaceEntry (4), MarketplacesFile (2), MarketplaceManifest (2), PluginEntry (3), ExternalSource (5变体)✅ 完整
安装器installer.rsInstalledPluginEntry (5), InstalledPluginsFile (2)✅ 完整
引导bootstrap.rs✅ 流程覆盖
Setup 状态state.rsSetupState (5)✅ 完整
Setup 锁lock.rs✅ 流程覆盖
Setup 扫描scan.rs✅ 流程覆盖
Setup 种子seeds.rs✅ 流程覆盖
Skillsskill.rs✅ 流程覆盖
会话session.rsSession (8)✅ 完整
版本检查version_check.rs✅ 流程覆盖
自更新self_update.rsPendingUpgrade (6)✅ 完整
新增覆盖11 文件9 结构体此前 ~0% → 100%

📅 最后更新: 2026-06-29🔍 来源: strings atomcode.bin.bak 二进制挖掘

基于 VitePress 构建 · AtomCode v4.25.3 逆向工程分析文档