本文档描述 当前代码实现 中 kb.md 的实际语义与约束(截至 2026-04-19)。
运行时实现说明(2026-04-19):CLI 命令分发已解耦为
commands.rs+commands/cmd_*.rs,kb.md相关落盘逻辑位于commands/runtime/core/kbmd_ops.rs。
kb.md 在当前版本中承担三类职责:
- 声明知识条目(文件/目录/通配符)。
- 声明分类与分类默认权限(供
add/check的分类校验与继承)。 - 与
kb update协同:update会在发现./.kb/raw/新文件时,自动回填到# raw分类。
当前状态源分工:
- 声明源:
kb.md+./.kb/raw/目录。 - 登记源:
./.kb/regs.json(list/check/update的主登记快照)。 - 索引源:
./.kb/index*.json(检索索引快照)。
kb.md 支持可选 Front Matter 与 Markdown 主体:
---
kb: my-project
agent: default
default_perm: r
---
# 分类:权限
[alias](path):权限
支持字段:
kb(可选)agent(可选)default_perm(可选,默认r)
实现约束:
- Front Matter 必须以
---开始并以---结束。 default_perm必须是合法权限串(r/w/x/c/d/-组合规则同命令层)。
支持 # / ## / ### 等层级标题。
- 标题可写权限后缀:
# docs:rw - 若无权限后缀,则继承上级标题权限;若无上级,则继承
default_perm(默认r)。 add --category与check --category的合法分类来自解析后的标题集合。
示例:
---
default_perm: r
---
# docs:rw
## api
### internal:r[alias](path):perm # commentalias可为空:[](path)- 若
alias为空,系统使用规范化path作为登记标识 :perm可省略,省略时继承当前分类权限
仍兼容旧格式:
- alias | path兼容格式不携带显式权限,按当前分类权限继承。
当前实现支持以下声明方式:
- 文件:
[a](docs/a.md) - 目录递归:
[src](src/)、[all](src/**) - 目录单层:
[api](docs/api/*) - 通配:
*、**、?、[a-z]、{md,txt}
解析结果会被归一化为项目内相对路径(如
./docs/a.md)。
list:读取regs.json列表(不是直接扫描kb.md)。check:比较“声明集(kb.md+ raw)”与regs.json。update:应用差异到regs.json(新增写入、删除/不存在移除)。
兼容性:若 regs.json 不存在,当前实现会尝试从历史 refs.json 迁移读取。
kb init 会创建 # raw 分类。
kb update 发现 ./.kb/raw/ 新文件后,会按规范追加到 kb.md 的 # raw 分类,格式为:
[](./.kb/raw/<file>)并具备去重保障(不会重复追加同一条目)。
kb.md无法读取或语法非法:E3003- 分类不存在:
E2007 - 受保护路径(
kb.md与./.kb/非 raw 内部文件)不可加入索引:E2009
- 命令手册:
docs/cli/command-manual.md - 命令示例:
docs/cli/command-examples.md - 状态差异:
docs/cli/state-diff-contract.md - 忽略规则:
docs/cli/kbignore-spec.md - 错误目录:
docs/cli/error-catalog.md
- 真值关系:声明来自
kb.md + ./.kb/raw/;./.kb/regs.json是同步后的登记快照。 kb add、kb rm、kb chmod优先更新声明源(kb.md),不直接写regs.json。kb check对比声明集与regs.json,并可识别权限元数据变化(metadata_changed)。- 当
kb check报告to_remove时,kb update会清理索引快照中的对应陈旧记录。 - 即使某些路径已不在
./.kb/regs.json中,但仍残留在基线index.json,上述清理仍会执行。 kb chmod <target> <perms>仅修改kb.md内权限声明(引用或分类),不直接写regs.json。kb rm <target>从kb.md删除匹配声明(按 alias/id/path);真正同步到regs.json仅发生在kb update。kb update会把声明差异同步到./.kb/regs.json,更新后端索引产物,并在check确认not_found时删除kb.md中缺失引用行,同时按路径去重重复 raw 引用。