SuperAPI AI 工具集

adr-index

编程与开发

查看项目

更新于 10-15 15:45

技能介绍

用途

ADR Index 用于构建或重建 ADR(架构决策记录)索引与依赖图。它把仓库中的 ADR 文件持久化到 adr-patterns 命名空间,并把 ADR 之间的关系(supersedes / amends / related / depends-on)写入 adr-edges 命名空间。

主要能力

  • 扫描 */docs/adr/ 或 */docs/adrs/ 下的所有 ADR。
  • 同时支持 Ruflo monorepo 中存在的两种 ADR 格式:
    • v3 风格:# ADR-097: Title 标题 + Status: Proposed 行
    • 插件风格:YAML frontmatter(id: ADR-NNNN, status: Proposed)
  • 实现位于 scripts/import.mjs,只需一次 Bash 调用,而不是数十次逐 ADR 的 MCP 工具调用;行为等效但明显更快,且能识别双格式。
  • 对 issue 编号具备防误判能力。

使用方式

运行导入器:

node plugins/ruflo-adr/scripts/import.mjs

可选环境变量:

  • IMPORT_FORMAT=json — 输出 JSON 而非 markdown
  • IMPORT_DRY_RUN=1 — 仅解析并汇总,跳过持久化
  • ADR_ROOT=/path — 扫描其他根目录(默认:cwd)

随后检查汇总信息:ADR 总数、已存储数量、按状态分布、边数量、悬空引用、状态不匹配。

可选但推荐:通过同系列的 adr-verify 技能验证图完整性,它运行 scripts/verify.mjs,遇到环时以退出码 1 结束。

语义搜索:针对已填充的命名空间使用 mcp__plugin_ruflo-core_ruflo__memory_search:

memory_search --query "federation budget" --namespace adr-patterns

存储结构

adr-patterns 命名空间,键为 <ADR-id>::<basename>,值为文本:

<title> — <first paragraph of Context>

file: <relative path>
status: <Proposed|Accepted|Superseded|...>
date: <ISO date>
tags: <comma-separated>

adr-edges 命名空间,确定性键为 <relation>:<FROM>-><TO>,值为:

{ "from": "ADR-097", "to": "ADR-086", "relation": "related", "capturedAt": "<ISO>" }

ADR 记录与关系边均以显式 upsert 语义存储。重新运行 adr-index 会就地刷新已变更的元数据,不会为未变更的语义边创建重复副本。

防误判保护

ADR 正文中的 #1697 / commit abc123 / PR 1234 等引用会在正则提取前被剥离,避免被误读为 ADR-1697 等。详见 scripts/import.mjs 中的 extractAdrRefs()。

适用场景

  • 从其他项目导入 ADR 之后
  • AgentDB 图与磁盘上的 ADR 文件不同步时
  • 在既有代码库上引导 ADR 跟踪

限制

adr-index 只会新增/更新(upsert)。如果某个 ADR 文件被删除(或某个关系行从仍存在的文件中被移除),它写入的行会永久保留——adr-verify 也无法发现,因为孤儿记录既没有悬空引用,也不构成环。要协调删除,请使用同系列的 adr-reindex 技能(issue #2666)。

交叉引用

  • adr-create — 生成本技能所消费的 ADR 文件
  • adr-review — 基于 adr-patterns 运行合规检查
  • adr-verify(同系列技能)— 运行 scripts/verify.mjs 进行图完整性门禁
  • adr-reindex(同系列技能)— 针对已删除 ADR 文件的 drop-and-rebuild 协调(本技能只能新增,不能删除)