📊 agentprof 可视化指南 · 目录 Wiki 7 / 14
Wiki

架构全景

agentprof 是一个 5 crate 的 Rust workspacecore / adapters / storage / tui / cli,外加构建辅助 xtask)。 agentprof-core 是依赖图的叶子(零 workspace 依赖),agentprof-cli 是唯一组装层(依赖所有其他 crate)。 项目级关键决策由 25 份 ADR 锁定,连同 L1/L2/L3 三级文档体系一起,构成「读了 30 分钟就能动手贡献」的知识地基。

crate 数
5
+xtask 辅助
ADR 数
25
决策记录
workspace 测试
1337
0 failures
代码层
L1 / L2 / L3
文档三级体系
🛫 生活类比 — 把 agentprof 想成一座机场
  • agentprof-core = 飞机引擎 — 核心算法、数据模型、tokenizer、export 格式。没它什么都飞不起来。
  • agentprof-adapters = 地勤 — 接 Claude / Codex / Copilot 三个不同登机口;每加一家 AI agent CLI 就多一条地勤线。
  • agentprof-storage = 行李系统 — SQLite 持久化 + OTLP receiver(M2.2 + M2.4),把会话数据稳妥放下、随时取回。
  • agentprof-tui = 塔台 — 5 个交互视图(Sessions / TurnDetail / ToolRank / HookRank / Models),实时看流量。
  • agentprof-cli = 航站楼 — 用户唯一入口,所有子命令在这里挂载。

5 个 crate 的角色与依赖

记一句话:core 在最底下,cli 在最上面,中间没有循环

crate角色依赖的 workspace crate
agentprof-core叶子库:data model + analyzer + tokenizer + export(必须保持叶子)
agentprof-adaptersAdapter trait + CopilotAdapter(M3.1 / M3.2 待添 Claude / Codex)仅依赖 core
agentprof-storageSQLite 持久化 + OTLP receiver(M2.2 + M2.4)依赖 core
agentprof-tui5 视图:Sessions / TurnDetail / ToolRank / HookRank / Models依赖 core
agentprof-cli唯一组装层:所有子命令 + main依赖所有其他 crate

👇 三张卡片分别讲:① 依赖图与无环规则 · ② L1/L2/L3 三级文档体系 · ③ 25 份 ADR 索引。每张都给「为什么 / agentprof 怎么做 / 其他选择」。

1 5-crate 依赖图 + 无环规则 点击展开
🗺️ 依赖图
5-crate 依赖图(cli 顶层 → adapters / storage / tui → core 叶子;T19 落实际 SVG)

图:5 crate 依赖关系。cli 在顶层,依赖所有其他 crate;tui / adapters / storage 在中间层,只依赖 corecore 是叶子。实际 SVG 在 T19 渲染落盘。

agentprof-cli  ──▶  agentprof-tui
       │                │
       ├──────────────▶ agentprof-adapters ──▶ agentprof-core
       │                                          ▲
       └──▶ agentprof-storage ───────────────────┘
🤔 为什么这样切
三条硬规则:core 必须是叶子 — 它绝不能 use agentprof_adapters::... 或任何 workspace crate,这样核心数据模型可以独立单元测试、独立发版、独立 reuse;cli 是唯一组装层 — 所有子命令逻辑只能放 agentprof-cli,不允许 lib crate 依赖它,保持 lib / bin 边界;③ 依赖图无环 — lib crate 之间不能有 cycle。
✅ agentprof 怎么做
CI 用 cargo metadata + grep 校验无环。workspace [lints] 段统一开 clippy::missing_docs_in_private_itemsclippy::unwrap_used = "deny" 等,配合 docs/architecture.md §3「Crate 边界」与 .github/copilot-instructions.md §3 的硬规则。
🔀 其他选择
mono-crate(所有代码塞一个 lib)— 上手最简单,但难做单元测试和分层;10+ 微 crate — 边界更清晰但编译期、维护成本大幅上升。5 crate workspace 是 Rust 生态在中型 CLI 工具上的标准做法(参考 cargo / rust-analyzer 自己的拆分)。
2 L1 / L2 / L3 三级文档体系 点击展开
📚 三个等级
  • L1(项目级)docs/architecture.md(权威架构)/ docs/plan.md(路线图)— 改动跨 crate 或动到分层时必须同 PR 更新。
  • L2(crate 级):每个 crate 一份 crates/<name>/README.md,描述该 crate 的对外接口、模块表、feature flags、典型用法。
  • L3(API 级):rustdoc /// + 强制 # Examples + # Errors + # Panics 段;公开 API 必带 doc(missing_docs 已升 error)。
🤔 为什么必要
文档不能落后于代码。AI agent 最常见的反模式是「改了 pub fn 签名但不更 rustdoc / CHANGELOG / L2 README」— 半年后回头看,谁都不知道当时为什么改。三级体系给每种「文档颗粒度」一个固定的家。
✅ agentprof 怎么做
.github/instructions/update-docs-on-code-change.instructions.md 是 Copilot 常驻规则,applyTo **/*.{md,rs,...},每次编辑自动加载;CI 跑 docs-sync job 校验 CHANGELOG 是否同步;clippy missing_docs 升 error 让没写 rustdoc 的 PR 直接红。L1 / L2 / L3 的「触发表」写在 .github/copilot-instructions.md §4.2
🔀 其他选择
纯 rustdoc(无 markdown)— API 链接好但跨 crate 叙事跳跃;纯 markdown wiki(GitHub Wiki / Notion)— 叙事好但缺 API 自动链接、容易和代码漂移;三级体系是「叙事 + API + 项目级决策」三种需求各得其所。
3 25 份 ADR 决策记录索引(最近 6 份) 点击展开
📜 什么是 ADR
Architectural Decision Record — 每个「选 A 不选 B」的决策都写一份 markdown,存在 docs/internals/adr-NNNN-<topic>.md。截至 v0.3.x 共 25 份(编号 0001–0025),其中 ADR-0025 是本指南本身的架构决策。
📋 最近 6 份
ID标题状态日期链接
ADR-0019Hybrid storage mode(SQLite + jsonl 兜底)Accepted2026-05adr-0019
ADR-0021OTLP receiver architectureAccepted2026-05adr-0021
ADR-0022OTLP capacity caps + LRU evictionAccepted2026-05adr-0022
ADR-0023Cache metrics(honest + naive hit rate)Accepted2026-06adr-0023
ADR-0024Web dashboard architecture(serveAccepted2026-06adr-0024
ADR-0025Visual guide(本指南)Accepted2026-06

完整 25 份索引见 docs/internals/

🤔 为什么必要
决策不写下来,半年后没人记得「为什么 storage 选 hybrid 不选纯 SQLite」「为什么 cache hit rate 同时算 honest 和 naive」。ADR 给每个非显然的选择一份「上下文 + 候选方案 + 决策 + 后果」的固定模板。
✅ agentprof 怎么做
.github/skills/create-architectural-decision-record/(vendored 自 github/awesome-copilot)是项目专属 skill;触发门槛写在 copilot-instructions.md §5.5 — 「设计含 ≥2 个值得文档化方案 / 新 crate / 新公开 API / 否决既有 ADR」就 MUST 写。编号单调递增,旧 ADR 被推翻就加 Status: Superseded by adr-MMMM
🔀 其他选择
commit message — 太散,半年后翻不回来;GitHub Wiki — 容易和代码漂移、PR review 不到;ADR markdown 入 git — 跟代码同源、PR review 可看、grep 可找,是当前业界共识(参考 Michael Nygard 原始提案)。

9 阶段 pipeline 一览

对外开发流程也用同一套约束 — 见 .github/copilot-instructions.md §5。九个 stage 每个挂一个主 skill:

Stage阶段主 skill
0Boot(会话开头)using-superpowers
1Discovery / Designbrainstorming
2Decision Recordscreate-architectural-decision-record
3Planningwriting-plans
4Implementationtest-driven-development
5CI / Infra(横切)create-github-action-workflow-specification
6Debugging loop(横切)systematic-debugging
7Completion verificationverification-before-completion
8Releasegithub-release

★ = project skill(.github/skills/,跟随 clone);其余 = obra/superpowers 全局 plugin。Stage 5 / 6 是横切层,可在主线任意点切入;完成后回原 stage。

下一步

本课给出了 5 crate 是什么、依赖怎么排、文档怎么分层、决策怎么记。接下来的 Wiki 课会逐 crate 深入 — 下一课「agentprof-core 深度解读」拆解 data model、analyzer、tokenizer 的内部结构。

📂 相关源码: agentprof-cli/main.rs  Cli

📂 相关源码: agentprof-core/lib.rs  agentprof_core