Repository navigation
0.1.8
0.1.8
这一版把 GitNexus 索引交给 agent,并让索引记得自己描述的是哪个提交。
三个图工具
gitnexus_impact—— 改这个符号会波及谁(按深度分组,附受影响的流程与模块)gitnexus_context—— 一个符号的定义、调用者、被调用者与它参与的流程gitnexus_query—— 用自然语言问图「这块功能在哪」
risk / epistemic / boundaries / causes 永不截断,列表才有上限且计数永远是真实值;risk: UNKNOWN 会明说「这不等于安全」;上游给了 riskNote 就整句引用。回答不了就直说:查不到符号时提示「先刷新索引」,而不是印成「零调用者」。gitnexus_query 的定义行会打印 uid <id>,可以原样交给 gitnexus_context。
索引锚定
刷新成功后把当前提交写回 manifest 的 lastCommit 与本次 analyze 用的那份 registry —— 字节级替换、只填空绝不覆盖、脏工作区不写(否则门禁会误报「已是最新」)。面板在锚定期间显示「正在记录提交基线…」。于是 gitnexus_delta 终于能给出「无需刷新」,而不是永远「无法确认」。
子进程走宿主的执行 seam
新增一条 runner:宿主提供 ctx.subprocess 时用 argv 直接 spawn(不经 shell),有沙箱策略就必须 ctx.sandbox.confine,否则降级而不静默不隔离;没有 seam 时才回退 ctx.shell。取消与超时两条路径都成立。三个图工具、图投影、FTS 搜索与全部 git 读取都走这条链,没有 shell 执行器的部署也能读图。
修复
- 「面板显示 git 不可用」其实没修好 —— 0.1.7 改用文件描述符捕获,但宿主自己的 spawner 也会拒绝。现在先试宿主 spawner、够不到再回退文件描述符,临时文件放进工作区(
<repo>/.gitnexus/plugin-home/tmp),全都失败时结论带上原因(git rev-parse HEAD → EPERM/… → exit 128)。 - 面板「缺少组件」那一行是乱码 —— 自 0.1.7 起就编进了
lib/client.js,现在修好,并加了一套 GBK 反向的编解码护栏。 gitnexus_delta不再把 GitNexus 自己写的AGENTS.md/CLAUDE.md/.claude当成待索引的改动。- 上游错误信封不再被吞;空回答不再印成
(未知符号)+上游 0 · 下游 0。 - 刷新与锚定的竞态:第二次刷新开始时,前一次的锚定不会覆盖新状态。
- manifest 有多处空白
lastCommit时拒绝写入,而不是猜。 gitnexus_context三路参数全空时明确提示需要name/uid/file_path。
发布卫生
.npmrc 与 package-lock.json 锁定 registry.npmjs.org(0.1.7 的 lockfile 31 处全指镜像),并有 4 项测试盯着。
验证
npm run check 0、npm test 1026 passed / 0 failed(引擎 708、插件 80、客户端 238)、npm ci --dry-run 通过、npm pack --dry-run 199 文件 / 388 KB(解包 1.44 MB)。真机实测:impact('guardHandler') 297 ms;三个工具 458–728 ms;六路并发全部成功。
已知限制
detect_changes 仍未暴露(它在受限宿主里会静默失败);cypher / explain / trace 等留待以后;仓库里的 AGENTS.md 用上游裸名,README 给了对照表;锚定只发生在插件自己发起的那次刷新之后。