agentprof 是一个 5 crate 的 Rust workspace(core / adapters / storage / tui / cli,外加构建辅助 xtask)。
agentprof-core 是依赖图的叶子(零 workspace 依赖),agentprof-cli 是唯一组装层(依赖所有其他 crate)。
项目级关键决策由 25 份 ADR 锁定,连同 L1/L2/L3 三级文档体系一起,构成「读了 30 分钟就能动手贡献」的知识地基。
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-adapters | Adapter trait + CopilotAdapter(M3.1 / M3.2 待添 Claude / Codex) | 仅依赖 core |
agentprof-storage | SQLite 持久化 + OTLP receiver(M2.2 + M2.4) | 依赖 core |
agentprof-tui | 5 视图:Sessions / TurnDetail / ToolRank / HookRank / Models | 依赖 core |
agentprof-cli | 唯一组装层:所有子命令 + main | 依赖所有其他 crate |
👇 三张卡片分别讲:① 依赖图与无环规则 · ② L1/L2/L3 三级文档体系 · ③ 25 份 ADR 索引。每张都给「为什么 / agentprof 怎么做 / 其他选择」。
1 5-crate 依赖图 + 无环规则 点击展开
图:5 crate 依赖关系。cli 在顶层,依赖所有其他 crate;tui / adapters / storage 在中间层,只依赖 core;core 是叶子。实际 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。cargo metadata + grep 校验无环。workspace [lints] 段统一开 clippy::missing_docs_in_private_items、clippy::unwrap_used = "deny" 等,配合 docs/architecture.md §3「Crate 边界」与 .github/copilot-instructions.md §3 的硬规则。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)。
pub fn 签名但不更 rustdoc / CHANGELOG / L2 README」— 半年后回头看,谁都不知道当时为什么改。三级体系给每种「文档颗粒度」一个固定的家。.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。3 25 份 ADR 决策记录索引(最近 6 份) 点击展开
docs/internals/adr-NNNN-<topic>.md。截至 v0.3.x 共 25 份(编号 0001–0025),其中 ADR-0025 是本指南本身的架构决策。| ID | 标题 | 状态 | 日期 | 链接 |
|---|---|---|---|---|
| ADR-0019 | Hybrid storage mode(SQLite + jsonl 兜底) | Accepted | 2026-05 | adr-0019 |
| ADR-0021 | OTLP receiver architecture | Accepted | 2026-05 | adr-0021 |
| ADR-0022 | OTLP capacity caps + LRU eviction | Accepted | 2026-05 | adr-0022 |
| ADR-0023 | Cache metrics(honest + naive hit rate) | Accepted | 2026-06 | adr-0023 |
| ADR-0024 | Web dashboard architecture(serve) | Accepted | 2026-06 | adr-0024 |
| ADR-0025 | Visual guide(本指南) | Accepted | 2026-06 | — |
完整 25 份索引见 docs/internals/。
.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。9 阶段 pipeline 一览
对外开发流程也用同一套约束 — 见 .github/copilot-instructions.md §5。九个 stage 每个挂一个主 skill:
| Stage | 阶段 | 主 skill |
|---|---|---|
| 0 | Boot(会话开头) | using-superpowers |
| 1 | Discovery / Design | brainstorming |
| 2 | Decision Records | create-architectural-decision-record ★ |
| 3 | Planning | writing-plans |
| 4 | Implementation | test-driven-development |
| 5 | CI / Infra(横切) | create-github-action-workflow-specification ★ |
| 6 | Debugging loop(横切) | systematic-debugging |
| 7 | Completion verification | verification-before-completion |
| 8 | Release | github-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