Skip to content

0.1.8

Choose a tag to compare

@Moowningstar Moowningstar released this 25 Oct 12:24
· 27 commits to main since this release

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 给了对照表;锚定只发生在插件自己发起的那次刷新之后。