Repository navigation
Releases: levodoubt/project-node-memory
Release list
v1.4.4
1.4.4
修正引用语义与写路径上暴露的几处缺陷,均为 1.4.1 之后实测发现。
引用
[[node="…"]]只渲染成指向该节点的链接,不再把目标正文复制进来。之前一次引用会把整节内容打印两遍,正是本插件要消灭的重复。[[tscl="…"]]仍是值嵌入;同一个 id 全库只能定义一次。- 整支渲染(
kb_read不带 mode、面板的「整支」视图)中,若某定义与其引用都落在这一支里,定义块不再重复打印该值——值只出现一次,单看定义所在节点时仍可见。 - TID 形如
doc:03的文件节点现在可直接作为引用目标(此前只有带节号的位置型 TID 能解析)。代码块里的[[…]]一律当示例,不解析。
工具
kb_read target=<tscl id>返回定义体、定义处(文件#行)与被引用的位置清单。kb_backlinks接受<tscl id>,与kb_read同口径;定义所在节点自身不计入引用数。kb_write mode=node修复两处死锁:正文与标签写在同一行时合法;多行节点能正确定位到</node>并只替换正文,标签原样保留。
工作区与注册表
- 会话工作区改为从
exec.agent.id查会话头的cwd,不再猜exec.workspace(DSH 不提供该字段)。回执里写明判定来源。 - 允许范围 = 已登记工作区 ∪ 配置里的库 ∪ 注册表;项目的
kb_registry.json与全局注册表合并去重,同名不再静默覆盖。 kb_list显示绝对路径与来源,同名库直接报错。
升级提示
无数据迁移。旧写法 [[TID]] 继续可用(diagnostics 会提示改成 [[node="TID"]]),2.0 移除。
v1.4.1
1.4.1 — 改名不再把库改裂
这一版修的是 kb_rename:它会回「已重命名」,但库在磁盘与索引之间已经断开——新名字读不到、旧名字还能读出正文、kb_diag 却说一切正常。顺带修了三处小毛病。
改名之后索引会立刻跟上(最严重)
旧的缓存签名只统计 md 的数量、总字节、最大 mtime。改名既不改内容也不改 mtime,所以下一次调用依然命中旧索引:按新 TID 找不到、按旧 TID 反而能读出正文,kb_diag 也拿着改名前的节点表报 status: ok。
两个修法一起上:
- 缓存签名里加上相对路径集合的哈希(
sha1(排序后的路径)前 12 位)。改名、移动、增删文件都会立刻改签名,不看 mtime 的脸色。这比「改名后手动清缓存」可靠:用户mv、git checkout、编辑器重命名一样能被发现。 kb_rename成功后主动让该库的缓存失效,不必等下一次签名比对。
引用重写覆盖带引号的写法
rewriteRefsInText 以前只认 [[TID]] 与 [[TID:…]],而 README 教的写法是 [[node="TID"]]。于是它把这库的引用全判成「没有需要改写的」,改完就静默断链。
现在四种写法一次覆盖:[[TID]]、[[TID:…]]、[[node="TID"]]、[[tscl="TID"]];围栏内仍不重写。
kb_rename 接受相对路径
target 可以直接给 lessons/004-x.md(文档一直这么写,代码以前只认 TID)。解析顺序:精确 TID → 三级路径解析 → 库根 + 相对路径。
三处小毛病
kb_read target="."现在等于库根(README 写的是「空字符串或.」,代码以前只认空串)。- 读 tscl 定义时,「被引用 N 处」不再把定义所在节点算成引用者;引用行的行号也不再拼成
README.md#L45#L4这种两段。 kb_diag跟着上面两条一起正常:改名之后不再报已经不存在的悬空引用。
验证
- 离线自检 304 → 313 项(新增 9 条:带引号写法重写、前缀相同不动、相对路径改名、改名后下一次调用看到新 TID、
target="."、定义所在节点不算引用者、行号只拼一次)。 - 活体实跑(临时库,8 项全过):
tid="."200、相对路径改名、[[node="…"]]被重写、新 TID 立即可读、旧 TID 404、改名后 diag 无悬空、定义节点不自计。
已知不属于本插件的两件
- DSH 自带的
grep/ripgrep 默认跳过隐藏目录,.nodekb会被漏掉:全库检索请用kb_search,或把path指到具体文件。 - Windows 控制台(CP936)里显示中文路径会乱码:文件名建议 ASCII,中文写进
# 标题。
v1.4.0
1.4.0 — 工作区判定修好了
这一版几乎全部在修同一件事:插件此前对「会话工作区」的判断是错的,于是一串看似无关的症状(相对路径写进别的项目、绝对路径被拒、建完读不到、错误信息互相矛盾)都从这一个根上长出来。
会话工作区改为从会话头取
DSH 交给工具的 exec 里没有 workspace/cwd 字段,只有 exec.agent.id(会话 id)。旧代码按 exec.workspace → exec.cwd → … 猜,这三级永远为空,于是每次调用都落到插件配置或进程 cwd。
现在按下面的顺序判定,并且每次回执都写明用的是哪个工作区、来自哪一层:
- 会话头
cwd:exec.agent.id→ctx.get('sessions').get(id).header.cwd exec里显式的目录(面板请求的ws)config.workspace- 环境变量
DSH_NODEKB_WORKSPACE - 仅面板:最近一次工具调用用过的目录;最后是进程 cwd
允许范围改为「已登记工作区」的并集
旧规则是「必须落在解析出来的那一个根里」,多项目并行时必然误拒。现在允许范围 = 本会话工作区 ∪ 所有已登记工作区 ∪ 已注册库,绝对路径不再被无理由拒绝。
新工具 kb_register
把已存在的库登记进项目自己的 <项目>/kb_registry.json(建议随仓库提交)。不写全局注册表、不改插件配置——权限问题可以在工具集内部自己解决,不必去改一个模型看不见的文件。
kb_init 的护栏
目标落在另一个已登记工作区里时直接拒绝,并打印双方路径与本会话工作区的来源。相对路径不会再因为判错工作区而默默写进别人的项目。
kb_list 更可诊断
回执开头写明本会话工作区与来源(session.header.cwd / config.workspace / …),每个库给出绝对路径、来源与存在性;同名库会标「⚠ 同名库,按名字调用有歧义,请用路径」。
其他
kb_init回执提示:文件名建议 ASCII,中文标题写进# 一级标题(Windows 控制台显示中文路径会乱码)。- 系统提示词与随包 Skill 增加一句:库找不到先
kb_list,已有库用kb_register登记。 - 离线自检 292 → 304 项,新增 12 条覆盖会话头取工作区、来源回显、跨工作区守卫、
kb_register写表与拒绝无库目录。
v1.3.3
project-node-memory 1.3.3
npm: https://www.npmjs.com/package/project-node-memory/v/1.3.3
从这一版起,版本变更只记在这里(Release 页),README 只描述当前版本。
本版变化
- README 改为只描述当前版本,并移除两处历史内容:「从 1.0 升到 1.1」整节(搬到下面)与英文版的
「Renamed fromdsh-nodekbat 0.2.0」。 - 工具数对齐为 9(README 标题此前误写「10 个工具」);示例里的
fact写法从<node>改为<tscl>,
与当前语义一致。 - 工具描述与系统提示词改为平实的契约式表述(1.3.1):去掉「比 read 好」「比 grep 省往返」这类劝告,
只保留参数语义、使用时机与失败后的出路。工具描述总长 3,391 → 3,117 字符,提示词段落 820 → 604 字符。 kb_read的target参数说明补回「(回定义体、定义处、被谁引用)」(1.3.2)。
从 1.0 升级
数据格式没变——md 还是 md,TID 还是那些 TID,插件卸了照样能读。变化只有两条:
[[x]]现在只出链接,不再把被引用节点的正文复制进来(要复制原文请显式写<tscl>)。
好处是引用不再撑大渲染结果,位置型小节## 3.1也能点了。kb_init不再建facts/。已有的facts/不会被动,kb_read/kb_search照常;只是新库默认只有
doc/ lessons/ todo/ index/,事实改写成<tscl>定义放进它所属的doc/里。
老库要不要迁?不迁也能用,只是 kb_diag 会给每条裸引用一条 warning。要迁就按 kb_diag 的清单逐条改成
[[node="…"]] / [[tscl="…"]](只改写法,不动 TID 与文件)。
历史速览
| 版本 | 主要变化 |
|---|---|
| 1.3.0 | kb_read target=<定义 id>;句内单行定义;diag 新增表格行定义告警;面板「原文/源码」里的宏可点 |
| 1.2.0 | 定位参数合并为一个 kb(名字或路径),去掉 lib;工具描述瘦身 4,705 → 3,355 字符 |
| 1.1.0 | 双语法 [[node="…"]] / [[tscl="…"]];tscl 宏层与定义表;diag 覆盖 tscl 的九条检查;kb_init 不再建 facts/ |
| 1.0.0 | 首个公开版本:kb_* 工具 + 侧栏知识节点面板 + 内嵌 git 快照 |