project-node-memory:用 Markdown 目录当 Agent 知识库

前言

在 DSH 里跑 Agent,默认找资料多半靠 read、grep、glob。常见情况是 grep 命中多个文件,再逐个 read,最后才发现真正要用的只是一段。知识若散落在 docs/*.md 里,行号会变、引用难维护,也没有统一的结构自检。

下面介绍维护者 levodoubt 的 DSH 插件 project-node-memory(社区分类:记忆)。它把项目下的 .nodekb/ 当作知识库:没有索引数据库、没有向量、没有后台进程,删掉插件后仍是一堆普通 Markdown 文件。

这是什么

一句话:Markdown-as-database——为 Agent 提供 10 个 kb_* 工具,为人类提供侧栏「项目节点知识库」三列面板;支持稳定 TID 寻址、转写(transclusion)、结构自检。

典型目录形态:

项目/
└── .nodekb/
    ├── index/entry.md
    ├── doc/03-build.md
    ├── lessons/001.md
    └── diag_ignore.json   # 可选:豁免样板块

核心能力

相对裸用 read/grep 的四件事

能力 工具 作用
先看结构再读正文 kb_read mode=toc 用约 200 token 的目录视图替代整篇 read
稳定 TID(如 doc:03-build:3.1) kb_read target=… 不依赖行号,改文件不打断引用
引用就地展开 kb_read mode=subtree 一次拿到装配好的上下文
结构自检 kb_diag 悬空引用、引用位置型段落、循环、孤儿等

mode=subtree 超过 maxlen(默认 50000 字符)会直接报错,并提示改用 toc / node,不会悄悄截断。

10 个 kb_* 工具

工具 用途
kb_list 列出库与默认库;不确定 kb 参数时先调
kb_read target + mode(subtree / node / toc / raw)+ maxlen
kb_search 中文友好检索,返回稳定 TID、类型、源行、片段
kb_diag 结构自检;有 error 时直接失败
kb_backlinks 谁引用了该节点;改 TID 或删节点前建议先跑
kb_init 幂等创建 .nodekb 骨架与落位约定
kb_write append / replace / create / node;写前校验、写后自检
kb_rename 文件改名并改写全库引用
kb_vcs_status 库内嵌 git 的快照与未提交改动(无 git 时仅说明)

让人类 Agent 优先走 kb_* 的四层

  1. 系统提示词段落(默认开,prompt.enabled=false 可关):规则约五行,引导沉淀知识用 .nodekb/ 与 kb_*,而非用 write 手搭 docs/*.md。可用 GET /nodekb/api/prompt 自证是否注册。
  2. kb_init:一次调用铺出 doc/、lessons/、todo/、index/entry.md 等,避免 Agent 自造目录。
  3. kb_write:校验 TID、<node> 独占一行、路径边界;写后跑 diag。普通 write 无同等约束。
  4. 随包技能 project-node-memory-guide(skill.enabled=false 可关):详写法规程在 skills/project-node-memory-guide/SKILL.md;插件通过 ctx.skills.register() 注册到内存,不依赖 npm 包内 skills/ 被 DSH 自动发现。GET /nodekb/api/skill 可自证。

面板(只读浏览)

侧栏「项目节点知识库」打开后为三列:左为节点树与图设置,中为节点图(树形布局、类型着色),右为 Markdown 渲染内容与节点属性;[[TID]] 可点。数据来自宿主 /nodekb/api/*。右栏正文单次最多渲染 10000 字符。写库仍须改 md(write / edit 或 kb_write)。

安装与配置

安装

npm 发布后:

dsh plugin add project-node-memory

从源码打包(开发用):

npm pack
dsh plugin add ./project-node-memory-<版本>.tgz

说明:应 add 打包后的 .tgz,不要直接 add 源码目录(link 依赖在目录移动或删除后可能导致 DSH 无法启动)。Host 侧改动需重启 DSH;面板改动重新安装可热载。

配置(可选)

写在 cordis.patch.yml 对应插件行的 config: 下:

键 默认 作用
workspace 会话工作区 / 进程 cwd 库发现与路径白名单边界
libraries 无 名字: 目录,登记工作区外库(目录下需有 .nodekb/)
registries 工作区 .nodekb/registry.json + 用户全局注册表 额外 kb_registry.json
exclude 见 README 库发现忽略目录名,支持 * 与 !pattern
prompt.enabled true 是否注册系统提示词段落
skill.enabled true 是否注册随包 Skill

exclude 示例:

config:
  exclude: ['tmp_*', '!tmp_keep', 'scratch']

工作区解析优先级(摘要):exec 上下文(面板目录 / 会话工作区)→ config.workspace → 环境变量 DSH_NODEKB_WORKSPACE → 最近一次工具用过的目录 → 进程 cwd。调试可看 GET /nodekb/api/where。

典型用法

1、初始化库

Agent 或你在会话中调用 kb_init,在工作区生成标准 .nodekb/ 结构(已存在则不覆盖)。

2、按 TID 读与展开

不确定库名时先 kb_list;读某节点用 kb_read,例如 target 设为 doc:03-build:3.1,需要装配上下文时用默认 mode=subtree。

3、写法与语法(节选)

位置型标题与显式节点:

## 3.1 编译契约            → tid = doc:03-build:3.1
<node name="fact:abi" type="fact" parent="doc:03-build">
正文
</node>

结构引用与值嵌入:

[[node="doc:03-build:3.1"]]
[[tscl="fact:abi"]]

改库用 kb_write;大改前用 kb_backlinks 与 kb_diag。库定位参数 kb 可传注册名或路径;不传时按工作区 .nodekb、唯一发现库或唯一注册表项解析。工作区内还会按约定位置自动发现(如 <ws>/.dsh/skills/<技能>/.nodekb/),详见 README「库怎么定位」。

适用场景与注意

适合:希望项目知识以 Markdown 落地、Agent 需要稳定引用与结构自检、多人用 git 管理 .nodekb/ 的团队。

注意:

  • 插件以当前 DSH 进程权限运行;安装前请自行查看源码与 MIT 许可证。
  • 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文仅介绍该插件能力,不编造案例或用户数据。
  • GitHub 上该仓库星标为 0(以目录页线索为准);功能与命令以 README 与 package.json 为准。

结尾

project-node-memory 把「试探式 grep + 多读文件」收敛成目录视图、TID 寻址、转写与 kb_diag,知识留在 .nodekb/ 的 md 里。若要安装或读完整语法与注册表格式,请打开 插件目录页 与 GitHub README。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜