问题
当前 main 的功能测试是绿色的,但仍有几处“现在能工作、后续容易静默漂移”的工程合同缺口。
已确认项
1. 跨扩展直接 import 内部实现
当前仍存在:
git-read 直接 import file-search/src/output.ts 与 process.ts;
workflows 直接 import subagents/src/agent-types.ts。
这些不是公开 shared seam。任一 extension 内部重构都可能破坏另一个 extension,打包边界也变得不清楚。
2. 测试命令只发现一层目录
package.json 当前使用:
node --test --experimental-strip-types extensions/*/*.test.ts
放在 extensions/<name>/src/*.test.ts 的测试不会自动执行,也不会报错。仓库已经有较多 src 子目录,这属于“看起来有测试、CI 实际没跑”的风险。
3. peerDependencies 与公开最低版本不一致
README 宣称 Pi 0.84.1+,开发依赖固定在 ^0.84.1,但发布包对三项 Pi peer 以及 typebox 全部声明 *。npm 无法表达或检查真实兼容下界。
不能机械改成 ^0.84.1,因为 0.x caret 可能错误排除后续 Pi 版本;应先确定兼容范围语义。
4. Worktree 回收失败被静默吞掉
Subagent spawn 失败后会尝试回收刚创建的 worktree,但 reclaimWorktree(...).catch(() => {}) 丢失回收失败证据。此时磁盘可能残留 worktree,用户只看到原始 spawn 错误。
5. 生产代码仍有一个 as any[]
extensions/sessions/index.ts 的 session preview 投影仍使用 context.messages as any[]。不阻塞发布,但它是当前生产代码里残留的明确类型逃逸。
建议
- 将复用实现提升到
extensions/shared/,或定义小的公开模块接口;
- 改为递归、确定性的测试发现,并加一个“嵌套 fixture 确实被发现”的守卫;
- 记录并测试真实 peer 最低版本,选择
>=0.84.1 或经过验证的上界,不机械使用 0.x caret;
- worktree 清理失败至少进入 tool error details / warning / recovery receipt;
- 消除最后一个生产
as any。
验收标准
不包含
问题
当前 main 的功能测试是绿色的,但仍有几处“现在能工作、后续容易静默漂移”的工程合同缺口。
已确认项
1. 跨扩展直接 import 内部实现
当前仍存在:
git-read直接 importfile-search/src/output.ts与process.ts;workflows直接 importsubagents/src/agent-types.ts。这些不是公开 shared seam。任一 extension 内部重构都可能破坏另一个 extension,打包边界也变得不清楚。
2. 测试命令只发现一层目录
package.json当前使用:node --test --experimental-strip-types extensions/*/*.test.ts放在
extensions/<name>/src/*.test.ts的测试不会自动执行,也不会报错。仓库已经有较多 src 子目录,这属于“看起来有测试、CI 实际没跑”的风险。3. peerDependencies 与公开最低版本不一致
README 宣称 Pi
0.84.1+,开发依赖固定在^0.84.1,但发布包对三项 Pi peer 以及 typebox 全部声明*。npm 无法表达或检查真实兼容下界。不能机械改成
^0.84.1,因为 0.x caret 可能错误排除后续 Pi 版本;应先确定兼容范围语义。4. Worktree 回收失败被静默吞掉
Subagent spawn 失败后会尝试回收刚创建的 worktree,但
reclaimWorktree(...).catch(() => {})丢失回收失败证据。此时磁盘可能残留 worktree,用户只看到原始 spawn 错误。5. 生产代码仍有一个
as any[]extensions/sessions/index.ts的 session preview 投影仍使用context.messages as any[]。不阻塞发布,但它是当前生产代码里残留的明确类型逃逸。建议
extensions/shared/,或定义小的公开模块接口;>=0.84.1或经过验证的上界,不机械使用 0.x caret;as any。验收标准
src/内部文件;extensions/**/*.test.ts都会进入本地与 CI;as any。不包含