@fantasticit/sumi 0.8.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +18 -18
  2. package/dist/adapters.d.ts +1 -0
  3. package/dist/adapters.js +83 -5
  4. package/dist/adapters.js.map +1 -1
  5. package/dist/fix.js +10 -3
  6. package/dist/fix.js.map +1 -1
  7. package/dist/trace.d.ts +16 -0
  8. package/dist/trace.js +30 -0
  9. package/dist/trace.js.map +1 -0
  10. package/dist/visualize-page.d.ts +1 -1
  11. package/dist/visualize-page.js +2 -2
  12. package/dist/visualize.js +52 -8
  13. package/dist/visualize.js.map +1 -1
  14. package/node_modules/@sumi/create/dist/bin.d.ts +2 -0
  15. package/node_modules/@sumi/create/dist/bin.js +52 -0
  16. package/node_modules/@sumi/create/dist/bin.js.map +1 -0
  17. package/node_modules/@sumi/create/package.json +1 -1
  18. package/node_modules/@sumi/create/template/control/flows/check.flow.yaml +28 -0
  19. package/node_modules/@sumi/create/template/control/rubrics/behavior.yaml +17 -0
  20. package/node_modules/@sumi/create/template/control/rubrics/clean-code.yaml +9 -0
  21. package/node_modules/@sumi/create/template/control/rubrics/device-acceptance.yaml +10 -0
  22. package/node_modules/@sumi/create/template/control/rubrics/domain.yaml +9 -0
  23. package/node_modules/@sumi/create/template/control/rubrics/omission.yaml +13 -0
  24. package/node_modules/@sumi/kernel/dist/brief.d.ts +2 -0
  25. package/node_modules/@sumi/kernel/dist/brief.js.map +1 -1
  26. package/node_modules/@sumi/kernel/dist/engine.js +29 -13
  27. package/node_modules/@sumi/kernel/dist/engine.js.map +1 -1
  28. package/node_modules/@sumi/kernel/dist/registry.d.ts +6 -0
  29. package/node_modules/@sumi/kernel/dist/registry.js +7 -1
  30. package/node_modules/@sumi/kernel/dist/registry.js.map +1 -1
  31. package/node_modules/@sumi/kernel/dist/scope.d.ts +4 -2
  32. package/node_modules/@sumi/kernel/dist/scope.js +12 -39
  33. package/node_modules/@sumi/kernel/dist/scope.js.map +1 -1
  34. package/node_modules/@sumi/kernel/dist/step-cache.d.ts +19 -0
  35. package/node_modules/@sumi/kernel/dist/step-cache.js +185 -0
  36. package/node_modules/@sumi/kernel/dist/step-cache.js.map +1 -0
  37. package/node_modules/@sumi/kernel/package.json +2 -2
  38. package/node_modules/@sumi/plugin-sdk/README.md +3 -1
  39. package/node_modules/@sumi/plugin-sdk/dist/git.d.ts +16 -1
  40. package/node_modules/@sumi/plugin-sdk/dist/git.js +45 -5
  41. package/node_modules/@sumi/plugin-sdk/dist/git.js.map +1 -1
  42. package/node_modules/@sumi/plugin-sdk/dist/index.d.ts +1 -0
  43. package/node_modules/@sumi/plugin-sdk/dist/index.js +1 -0
  44. package/node_modules/@sumi/plugin-sdk/dist/index.js.map +1 -1
  45. package/node_modules/@sumi/plugin-sdk/dist/protocol.d.ts +7 -0
  46. package/node_modules/@sumi/plugin-sdk/dist/protocol.js.map +1 -1
  47. package/node_modules/@sumi/plugin-sdk/dist/snapshot.d.ts +2 -0
  48. package/node_modules/@sumi/plugin-sdk/dist/snapshot.js +60 -0
  49. package/node_modules/@sumi/plugin-sdk/dist/snapshot.js.map +1 -0
  50. package/node_modules/@sumi/plugin-sdk/dist/trace.d.ts +1 -1
  51. package/node_modules/@sumi/plugin-sdk/dist/trace.js +15 -5
  52. package/node_modules/@sumi/plugin-sdk/dist/trace.js.map +1 -1
  53. package/node_modules/@sumi/plugin-sdk/dist/validate.js +11 -1
  54. package/node_modules/@sumi/plugin-sdk/dist/validate.js.map +1 -1
  55. package/node_modules/@sumi/plugin-sdk/package.json +1 -1
  56. package/node_modules/@sumi/plugins-core/README.md +14 -10
  57. package/node_modules/@sumi/plugins-core/dist/fix/lint.js +3 -3
  58. package/node_modules/@sumi/plugins-core/dist/fix/lint.js.map +1 -1
  59. package/node_modules/@sumi/plugins-core/dist/lib.d.ts +6 -2
  60. package/node_modules/@sumi/plugins-core/dist/lib.js +12 -7
  61. package/node_modules/@sumi/plugins-core/dist/lib.js.map +1 -1
  62. package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js +198 -29
  63. package/node_modules/@sumi/plugins-core/dist/plugins/test-affected.js.map +1 -1
  64. package/node_modules/@sumi/plugins-core/dist/test-batches.d.ts +16 -0
  65. package/node_modules/@sumi/plugins-core/dist/test-batches.js +83 -0
  66. package/node_modules/@sumi/plugins-core/dist/test-batches.js.map +1 -0
  67. package/node_modules/@sumi/plugins-core/dist/test-checkpoints.d.ts +27 -0
  68. package/node_modules/@sumi/plugins-core/dist/test-checkpoints.js +121 -0
  69. package/node_modules/@sumi/plugins-core/dist/test-checkpoints.js.map +1 -0
  70. package/node_modules/@sumi/plugins-core/dist/tool-batches.d.ts +11 -0
  71. package/node_modules/@sumi/plugins-core/dist/tool-batches.js +41 -0
  72. package/node_modules/@sumi/plugins-core/dist/tool-batches.js.map +1 -0
  73. package/node_modules/@sumi/plugins-core/dist/vitest-runner.js +20 -4
  74. package/node_modules/@sumi/plugins-core/dist/vitest-runner.js.map +1 -1
  75. package/node_modules/@sumi/plugins-core/package.json +2 -2
  76. package/node_modules/@sumi/plugins-core/sumi-plugins.yaml +4 -0
  77. package/node_modules/@sumi/plugins-governance/README.md +9 -6
  78. package/node_modules/@sumi/plugins-governance/dist/checkout.d.ts +1 -2
  79. package/node_modules/@sumi/plugins-governance/dist/checkout.js +6 -6
  80. package/node_modules/@sumi/plugins-governance/dist/checkout.js.map +1 -1
  81. package/node_modules/@sumi/plugins-governance/dist/commands/gate.js +61 -5
  82. package/node_modules/@sumi/plugins-governance/dist/commands/gate.js.map +1 -1
  83. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js +20 -11
  84. package/node_modules/@sumi/plugins-governance/dist/commands/pr-report.js.map +1 -1
  85. package/node_modules/@sumi/plugins-governance/dist/gate-cache.js +42 -5
  86. package/node_modules/@sumi/plugins-governance/dist/gate-cache.js.map +1 -1
  87. package/node_modules/@sumi/plugins-governance/dist/hooks.d.ts +2 -0
  88. package/node_modules/@sumi/plugins-governance/dist/hooks.js +4 -0
  89. package/node_modules/@sumi/plugins-governance/dist/hooks.js.map +1 -0
  90. package/node_modules/@sumi/plugins-governance/dist/plugins/protected-paths.js +7 -4
  91. package/node_modules/@sumi/plugins-governance/dist/plugins/protected-paths.js.map +1 -1
  92. package/node_modules/@sumi/plugins-governance/dist/pr-base.d.ts +9 -0
  93. package/node_modules/@sumi/plugins-governance/dist/pr-base.js +28 -0
  94. package/node_modules/@sumi/plugins-governance/dist/pr-base.js.map +1 -1
  95. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.d.ts +16 -4
  96. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js +47 -9
  97. package/node_modules/@sumi/plugins-governance/dist/pr-report-publish.js.map +1 -1
  98. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js +3 -1
  99. package/node_modules/@sumi/plugins-governance/dist/pr-report-sections.js.map +1 -1
  100. package/node_modules/@sumi/plugins-governance/dist/protected.js +7 -9
  101. package/node_modules/@sumi/plugins-governance/dist/protected.js.map +1 -1
  102. package/node_modules/@sumi/plugins-governance/dist/semantic.js +2 -17
  103. package/node_modules/@sumi/plugins-governance/dist/semantic.js.map +1 -1
  104. package/node_modules/@sumi/plugins-governance/instructions/push.md +6 -4
  105. package/node_modules/@sumi/plugins-governance/package.json +2 -2
  106. package/node_modules/@sumi/plugins-openspec/package.json +4 -4
  107. package/node_modules/@sumi/plugins-precedent/dist/model.js +2 -15
  108. package/node_modules/@sumi/plugins-precedent/dist/model.js.map +1 -1
  109. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js +28 -3
  110. package/node_modules/@sumi/plugins-precedent/dist/plugins/harvest.js.map +1 -1
  111. package/node_modules/@sumi/plugins-precedent/package.json +3 -3
  112. package/node_modules/@sumi/plugins-review/README.md +18 -11
  113. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js +4 -1
  114. package/node_modules/@sumi/plugins-review/dist/commands/host-model-hook.js.map +1 -1
  115. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js +25 -10
  116. package/node_modules/@sumi/plugins-review/dist/commands/model-recheck.js.map +1 -1
  117. package/node_modules/@sumi/plugins-review/dist/commands/submit.js +8 -1
  118. package/node_modules/@sumi/plugins-review/dist/commands/submit.js.map +1 -1
  119. package/node_modules/@sumi/plugins-review/dist/dispute.d.ts +9 -0
  120. package/node_modules/@sumi/plugins-review/dist/dispute.js +91 -0
  121. package/node_modules/@sumi/plugins-review/dist/dispute.js.map +1 -0
  122. package/node_modules/@sumi/plugins-review/dist/index.d.ts +1 -0
  123. package/node_modules/@sumi/plugins-review/dist/index.js +1 -0
  124. package/node_modules/@sumi/plugins-review/dist/index.js.map +1 -1
  125. package/node_modules/@sumi/plugins-review/dist/model-execution.d.ts +2 -1
  126. package/node_modules/@sumi/plugins-review/dist/model-execution.js +49 -18
  127. package/node_modules/@sumi/plugins-review/dist/model-execution.js.map +1 -1
  128. package/node_modules/@sumi/plugins-review/dist/model-independence.d.ts +2 -1
  129. package/node_modules/@sumi/plugins-review/dist/model-independence.js +13 -4
  130. package/node_modules/@sumi/plugins-review/dist/model-independence.js.map +1 -1
  131. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js +77 -20
  132. package/node_modules/@sumi/plugins-review/dist/plugins/independent-recheck.js.map +1 -1
  133. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js +131 -22
  134. package/node_modules/@sumi/plugins-review/dist/plugins/rubric.js.map +1 -1
  135. package/node_modules/@sumi/plugins-review/dist/plugins/validation.d.ts +1 -0
  136. package/node_modules/@sumi/plugins-review/dist/plugins/validation.js +35 -0
  137. package/node_modules/@sumi/plugins-review/dist/plugins/validation.js.map +1 -0
  138. package/node_modules/@sumi/plugins-review/dist/recheck.d.ts +10 -5
  139. package/node_modules/@sumi/plugins-review/dist/recheck.js +51 -10
  140. package/node_modules/@sumi/plugins-review/dist/recheck.js.map +1 -1
  141. package/node_modules/@sumi/plugins-review/dist/review-evidence.d.ts +3 -0
  142. package/node_modules/@sumi/plugins-review/dist/review-evidence.js +58 -0
  143. package/node_modules/@sumi/plugins-review/dist/review-evidence.js.map +1 -0
  144. package/node_modules/@sumi/plugins-review/dist/review.d.ts +74 -1
  145. package/node_modules/@sumi/plugins-review/dist/review.js +320 -9
  146. package/node_modules/@sumi/plugins-review/dist/review.js.map +1 -1
  147. package/node_modules/@sumi/plugins-review/dist/submission.js +45 -4
  148. package/node_modules/@sumi/plugins-review/dist/submission.js.map +1 -1
  149. package/node_modules/@sumi/plugins-review/dist/upgrade-command.d.ts +1 -0
  150. package/node_modules/@sumi/plugins-review/dist/upgrade-command.js +14 -0
  151. package/node_modules/@sumi/plugins-review/dist/upgrade-command.js.map +1 -0
  152. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.d.ts +13 -0
  153. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.js +531 -0
  154. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-plan.js.map +1 -0
  155. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.d.ts +33 -0
  156. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.js +187 -0
  157. package/node_modules/@sumi/plugins-review/dist/upgrade-flow-render.js.map +1 -0
  158. package/node_modules/@sumi/plugins-review/dist/upgrade.d.ts +26 -0
  159. package/node_modules/@sumi/plugins-review/dist/upgrade.js +68 -0
  160. package/node_modules/@sumi/plugins-review/dist/upgrade.js.map +1 -0
  161. package/node_modules/@sumi/plugins-review/dist/validation-receipt.d.ts +8 -0
  162. package/node_modules/@sumi/plugins-review/dist/validation-receipt.js +210 -0
  163. package/node_modules/@sumi/plugins-review/dist/validation-receipt.js.map +1 -0
  164. package/node_modules/@sumi/plugins-review/package.json +5 -4
  165. package/node_modules/@sumi/plugins-review/sumi-plugins.yaml +8 -1
  166. package/package.json +10 -10
package/README.md CHANGED
@@ -6,23 +6,23 @@
6
6
 
7
7
  项目根由当前目录向上查找含 `control/config.yaml`(或旧的 `sumi.config.yaml`)的目录确定。受管项目统一以 `node ./control/bin/sumi.cjs` 作为命令前缀;下表为省略此前缀后的子命令。首次接入使用 `npm exec --offline --package <tgz> -- sumi init`。大多数内置命令支持 `--json` 输出结构化结果。
8
8
 
9
- | 命令 | 说明 |
10
- | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
11
- | `sumi --version` | 输出 CLI 版本 |
12
- | `sumi run <flow>` | 运行流程:`--tier <档位>`、`--all`、`--base <ref>`、`--label k=v`(可重复);`--commit <oid> [--base <oid>]` 为固定提交模式,供插件在独立检出中验收指定提交。输出简报,退出码即结论 |
13
- | `sumi instructions <主题> [--json]` | 输出某个主题的操作指令 |
14
- | `sumi fix <step-id>` | 以当前工作树最近一次包含该步骤的运行范围执行插件声明的 `fix`;运行后内容又变化时拒绝 |
15
- | `sumi update [--check]` | 重新生成 AI 工具适配与 hook;`--check` 只报告漂移,有漂移时退出码 1 |
16
- | `sumi hint` | 会话结束提示:最近一次 `check` 运行未通过时输出 `systemMessage`,从不阻止结束 |
17
- | `sumi doctor` | 诊断:配置、版本、配置位置、各流程能否加载、适配漂移、工具能力缺口;外来接线只报告 |
18
- | `init [目录]` | `--tools claude,codex,cursor`(别名 `--agents`)。空目录或不存在的目录:生成模板项目并 `git init`;已有仓库:写入骨架、去掉 `needs` 不满足的步骤、生成适配与 hook、全量运行 `check`、执行插件的 `afterInit` |
19
- | `sumi add plugin <name>` | 在 `control/plugins/<name>/` 生成 `plugin.yaml`、`index.mjs`、`index.test.mjs`(id 为 `local/<name>`),并把 `control/plugins` 加进配置的 `plugins` |
20
- | `sumi context <路径...>` | 写代码前查约束:`check` 流程中命中这些路径的检查、插件约束查询命令给出的条目、引用这些执行者的规则原文(control 区与 `AGENTS.md` 中的 Markdown) |
21
- | `sumi task "<意图>"` / `sumi task --select <id,...>` | 先取得有界任务目录,由宿主代理选择相关 ID,再按 ID 取得完整原文;选定条目不受目录长度预算截断。Sumi 不做关键词分类。 |
22
- | `sumi task --eval <golden.jsonl>` | 对冻结样本中宿主代理独立给出的 `selected` 与 `expected` ID 集合离线计算命中率、精确率和召回率,不调用模型自评。两者均为空的样本算命中;精确率或召回率分母为零时记 0。 |
23
- | `sumi visualize [--port N]` | 启动仅监听 127.0.0.1 的 HTML 时间线,查看提示词、宿主 Read 工具返回的项目文件、Sumi 命令、文档读取与 hook 注入;Shell、MCP 和自动加载的读取不在当前观测范围内。事件保存在被忽略的 `.sumi/visualize/`,按 Ctrl+C 结束记录。 |
24
- | `sumi vendor <sumi-cli-版本.tgz>` | 校验离线安装包的完整构建身份,放进 `control/vendor/`(删除旧版本,必要时为 `.gitignore` 追加例外),在配置中写入 `install`、精确 `sumi` 版本与 `sumiBuild`,然后运行 `sumi update` |
25
- | `sumi vendor --dependency [包名]` | 使用已作为 devDependency 安装的 CLI(缺省 `@fantasticit/sumi`):校验 `node_modules` 中的构建身份,清单改为记录包名、版本与身份,删除 `control/vendor/` 下的离线安装包,然后运行 `sumi update` |
9
+ | 命令 | 说明 |
10
+ | ---------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
11
+ | `sumi --version` | 输出 CLI 版本 |
12
+ | `sumi run <flow>` | 运行流程:`--tier <档位>`、`--all`、`--base <ref>`、`--label k=v`(可重复);`--commit <oid> [--base <oid>]` 为固定提交模式,供插件在独立检出中验收指定提交。输出简报,退出码即结论 |
13
+ | `sumi instructions <主题> [--json]` | 输出某个主题的操作指令 |
14
+ | `sumi fix <step-id>` | 以当前工作树最近一次包含该步骤的运行范围执行插件声明的 `fix`;运行后内容又变化时拒绝 |
15
+ | `sumi update [--check]` | 重新生成 AI 工具适配与 hook;`--check` 只报告漂移,有漂移时退出码 1 |
16
+ | `sumi hint` | 会话结束提示:最近一次 `check` 运行未通过时输出 `systemMessage`,从不阻止结束 |
17
+ | `sumi doctor` | 诊断:配置、版本、配置位置、各流程能否加载、适配漂移、工具能力缺口;外来接线只报告 |
18
+ | `init [目录]` | `--tools claude,codex,cursor`(别名 `--agents`)。空目录或不存在的目录:生成模板项目并 `git init`;已有仓库:写入骨架、去掉 `needs` 不满足的步骤、生成适配与 hook、全量运行 `check`、执行插件的 `afterInit` |
19
+ | `sumi add plugin <name>` | 在 `control/plugins/<name>/` 生成 `plugin.yaml`、`index.mjs`、`index.test.mjs`(id 为 `local/<name>`),并把 `control/plugins` 加进配置的 `plugins` |
20
+ | `sumi context <路径...>` | 写代码前查约束:`check` 流程中命中这些路径的检查、插件约束查询命令给出的条目、引用这些执行者的规则原文(control 区与 `AGENTS.md` 中的 Markdown) |
21
+ | `sumi task "<意图>"` / `sumi task --select <id,...>` | 先取得有界任务目录,由宿主代理选择相关 ID,再按 ID 取得完整原文;选定条目不受目录长度预算截断。Sumi 不做关键词分类。 |
22
+ | `sumi task --eval <golden.jsonl>` | 对冻结样本中宿主代理独立给出的 `selected` 与 `expected` ID 集合离线计算命中率、精确率和召回率,不调用模型自评。两者均为空的样本算命中;精确率或召回率分母为零时记 0。 |
23
+ | `sumi visualize [--port N]` | 启动仅监听 127.0.0.1 的 HTML 时间线,查看提示词、宿主 Read 工具返回的项目文件、Sumi 命令、文档读取与 hook 注入;Shell、MCP 和自动加载的读取不在当前观测范围内。事件持续保存在被忽略的 `.sumi/visualize/events.jsonl`,即使页面未启动;按 Ctrl+C 只关闭页面服务。 |
24
+ | `sumi vendor <sumi-cli-版本.tgz>` | 校验离线安装包的完整构建身份,放进 `control/vendor/`(删除旧版本,必要时为 `.gitignore` 追加例外),在配置中写入 `install`、精确 `sumi` 版本与 `sumiBuild`,然后运行 `sumi update` |
25
+ | `sumi vendor --dependency [包名]` | 使用已作为 devDependency 安装的 CLI(缺省 `@fantasticit/sumi`):校验 `node_modules` 中的构建身份,清单改为记录包名、版本与身份,删除 `control/vendor/` 下的离线安装包,然后运行 `sumi update` |
26
26
 
27
27
  未匹配内置命令时,CLI 按项目注册表分发插件命令:以仓库根为工作目录执行其 `argv` 加剩余参数,环境中带 `SUMI_ROOT` 与 `SUMI_BIN`,原样返回退出码。插件命令不能与内置命令重名,只在已接入的项目中可用。不带参数或命令未知时列出可用命令,退出码 3;内核错误输出 `内核错误:…`,退出码 3。
28
28
 
@@ -48,7 +48,7 @@
48
48
  | ------ | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
49
49
  | Claude | `.claude/settings.json` | `PreToolUse`(`Bash\|Edit\|Write\|MultiEdit\|NotebookEdit`)→ 插件的 `beforeTool`;`PostToolUse`(编辑类工具)→ `afterEdit`;`UserPromptSubmit` → 任务目录;`Stop` → `sumi hint` 与插件的停止检查 |
50
50
  | Codex | `.codex/hooks.json` | `PreToolUse`(`^(Bash\|apply_patch\|Edit\|Write)$`)、`PostToolUse`(`^(apply_patch\|Edit\|Write)$`)、`UserPromptSubmit` → 任务目录、`Stop` → 插件的停止检查;无会话结束提示 |
51
- | Cursor | `.cursor/hooks.json` | `stop` → 插件的停止检查;不支持前置拦截、编辑后及提示词 hook,`doctor` 报告能力缺口,需主动运行 `sumi task`,依赖 git hook 兜底 |
51
+ | Cursor | `.cursor/hooks.json` | `preToolUse`(Shell)→ 显式声明兼容 Cursor 的来源观察命令;`stop` → 插件的停止检查。通用编辑拦截、编辑后及提示词送达仍需主动命令或 git hook 兜底 |
52
52
 
53
53
  AI 工具以会话当前目录执行 hook,会话可能位于项目子目录,因此命令不依赖当前目录定位 launcher:
54
54
 
@@ -54,6 +54,7 @@ interface DeclaredHooks {
54
54
  command: string;
55
55
  tools: 'all' | 'edit';
56
56
  failure: 'closed' | 'open';
57
+ cursor: boolean;
57
58
  }[];
58
59
  afterEdit: string[];
59
60
  onPrompt: string[];
package/dist/adapters.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import { execFileSync } from 'node:child_process';
2
2
  import { createHash } from 'node:crypto';
3
- import { chmodSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
4
- import { dirname, join, resolve } from 'node:path';
3
+ import { chmodSync, existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, rmSync, statSync, writeFileSync } from 'node:fs';
4
+ import { dirname, isAbsolute, join, resolve, sep, win32 } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
6
  import { KernelError, loadConfig, loadFlow, loadRegistry } from '@sumi/kernel';
7
- import { gitHookScript, HOOK_BLOCK_END, HOOK_BLOCK_START, hookBlock, PROJECT_SUMI, } from '@sumi/plugin-sdk';
7
+ import { gitHookScript, HOOK_BLOCK_END, HOOK_BLOCK_START, hookBlock, PROJECT_SUMI, spawnCommandSync, } from '@sumi/plugin-sdk';
8
8
  import { projectInstruction, topicContext, topics } from './instructions.js';
9
9
  import { fileSha256, PROJECT_LAUNCHER, RUNTIME_MANIFEST, runtimeManifestText } from './runtime-manifest.js';
10
10
  export const MARK = 'generated-by: sumi update';
@@ -160,7 +160,12 @@ export function declaredHooks(registry, config) {
160
160
  }, config);
161
161
  const enabled = !condition || (condition.equals !== undefined ? value === condition.equals : value !== condition.notEquals);
162
162
  if (enabled)
163
- beforeTool.push({ command: hook.command, tools: hook.tools ?? 'all', failure: hook.failure ?? 'closed' });
163
+ beforeTool.push({
164
+ command: hook.command,
165
+ tools: hook.tools ?? 'all',
166
+ failure: hook.failure ?? 'closed',
167
+ cursor: hook.cursor === true,
168
+ });
164
169
  }
165
170
  const prompt = decl.hooks?.agent?.onPrompt;
166
171
  if (prompt) {
@@ -220,7 +225,13 @@ export function withBlock(existing, block) {
220
225
  const failClosed = (fields) => Object.fromEntries(Object.entries(fields).map(([key, command]) => [key, `${command} || exit 2`]));
221
226
  function agentHookGroups(agent, h, hooks) {
222
227
  if (h.format === 'cursor') {
223
- return hooks.stop.length ? { stop: [{ ...h.invoke(`hook agent-stop ${agent}`), type: 'command', loop_limit: 1 }] } : {};
228
+ const modelHooks = hooks.beforeTool.filter((hook) => hook.cursor);
229
+ return {
230
+ ...(modelHooks.length
231
+ ? { preToolUse: modelHooks.map((hook) => ({ ...h.invoke(`${hook.command} --cursor`), type: 'command', matcher: 'Shell' })) }
232
+ : {}),
233
+ ...(hooks.stop.length ? { stop: [{ ...h.invoke(`hook agent-stop ${agent}`), type: 'command', loop_limit: 1 }] } : {}),
234
+ };
224
235
  }
225
236
  const entry = (matcher, commands, before = false) => ({
226
237
  matcher,
@@ -453,6 +464,64 @@ const readRaw = (path) => (existsSync(path) ? readFileSync(path, 'utf8') : null)
453
464
  const HUSKY_EOL = '.husky/** text=auto eol=lf';
454
465
  const missingHuskyEol = (root, exp) => exp.manager === 'husky' && !(read(join(root, '.gitattributes')) ?? '').split('\n').includes(HUSKY_EOL);
455
466
  const withHuskyEol = (text) => `${text ?? ''}${text && !text.endsWith('\n') ? '\n' : ''}# sumi:husky hook 必须以 LF 检出\n${HUSKY_EOL}\n`;
467
+ function pluginUpgradePlan(root) {
468
+ const config = loadConfig(root);
469
+ const registry = loadRegistry(root, config);
470
+ try {
471
+ return registry.upgrades.flatMap(({ argv, dir, source }) => {
472
+ const command = argv.map((part) => (part.startsWith('./') || part.startsWith('../') ? resolve(dir, part) : part));
473
+ const child = spawnCommandSync(command[0], command.slice(1), {
474
+ cwd: root,
475
+ input: JSON.stringify({ root, config, plugins: [...registry.plugins].map(([id, plugin]) => [id, plugin.decl]) }),
476
+ encoding: 'utf8',
477
+ maxBuffer: 16 * 1024 * 1024,
478
+ windowsHide: true,
479
+ });
480
+ if (child.error || child.status !== 0)
481
+ throw new Error(`升级提供者 ${source} 失败:${child.stderr?.trim() || child.error?.message || `退出码 ${child.status}`}`);
482
+ const plan = JSON.parse(child.stdout);
483
+ if (!Array.isArray(plan) ||
484
+ !plan.every((item) => item &&
485
+ typeof item === 'object' &&
486
+ typeof item.path === 'string' &&
487
+ item.path.length > 0 &&
488
+ !isAbsolute(item.path) &&
489
+ !win32.isAbsolute(item.path) &&
490
+ !/^[A-Za-z]:/.test(item.path) &&
491
+ !item.path.includes('\\') &&
492
+ !item.path.includes('\0') &&
493
+ !item.path.split('/').includes('..') &&
494
+ safeUpgradeTarget(root, item.path) &&
495
+ typeof item.content === 'string'))
496
+ throw new Error(`升级提供者 ${source} 返回了无效文件计划`);
497
+ return plan;
498
+ });
499
+ }
500
+ catch (error) {
501
+ throw new KernelError(error.message);
502
+ }
503
+ }
504
+ function safeUpgradeTarget(root, path) {
505
+ const base = resolve(root);
506
+ const target = resolve(base, path);
507
+ if (!target.startsWith(`${base}${sep}`))
508
+ return false;
509
+ let cursor = base;
510
+ for (const part of path.split('/')) {
511
+ if (!part || part === '.')
512
+ continue;
513
+ cursor = join(cursor, part);
514
+ try {
515
+ if (lstatSync(cursor).isSymbolicLink())
516
+ return false;
517
+ }
518
+ catch (error) {
519
+ if (error.code !== 'ENOENT')
520
+ return false;
521
+ }
522
+ }
523
+ return true;
524
+ }
456
525
  export function checkDrift(root) {
457
526
  const exp = expected(root);
458
527
  const drift = [];
@@ -487,6 +556,13 @@ export function checkDrift(root) {
487
556
  }
488
557
  if (missingHuskyEol(root, exp))
489
558
  drift.push({ path: '.gitattributes', problem: `缺少 ${HUSKY_EOL}` });
559
+ try {
560
+ for (const item of pluginUpgradePlan(root))
561
+ drift.push({ path: item.path, problem: '插件升级资产未同步,运行 sumi update' });
562
+ }
563
+ catch (error) {
564
+ drift.push({ path: 'control', problem: `插件升级资产诊断失败:${error.message}` });
565
+ }
490
566
  return drift;
491
567
  }
492
568
  /** 只读计算 update 的完整文件计划;不写文件,也不理解具体插件命令。 */
@@ -537,6 +613,8 @@ export function updatePlan(root) {
537
613
  const target = join(root, '.gitattributes');
538
614
  plan.push({ action: 'write', path: '.gitattributes', target, content: withHuskyEol(readRaw(target)) });
539
615
  }
616
+ for (const item of pluginUpgradePlan(root))
617
+ plan.push({ action: 'write', path: item.path, target: join(root, item.path), content: item.content });
540
618
  return plan;
541
619
  }
542
620
  export function applyUpdatePlan(plan) {
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../src/adapters.ts"],"names":[],"mappings":"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"}
package/dist/fix.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { cleanEnv, spawnCommandSync, splitFileArguments } from '@sumi/plugin-sdk';
2
- import { contentDigest, KernelError, loadConfig, loadRegistry, readRecords, resolveArgv } from '@sumi/kernel';
2
+ import { contentDigest, KernelError, listFiles, loadConfig, loadRegistry, readRecords, resolveArgv, stepFiles } from '@sumi/kernel';
3
3
  import { registerCommand, requireRoot } from './cli.js';
4
4
  /**
5
5
  * sumi fix <step-id>:以当前工作树最近一次包含该步骤的运行中的范围,执行插件声明的修复命令。
@@ -22,13 +22,20 @@ registerCommand('fix', '执行步骤的修复命令:sumi fix <step-id>', { fla
22
22
  return 1;
23
23
  }
24
24
  const step = record.steps.find((s) => s.id === stepId);
25
- const plugin = loadRegistry(dir, loadConfig(dir)).plugins.get(step.use);
25
+ const config = loadConfig(dir);
26
+ const plugin = loadRegistry(dir, config).plugins.get(step.use);
26
27
  if (!plugin?.decl.fix) {
27
28
  io.err(`插件 ${step.use} 没有声明修复命令,不支持自动修复`);
28
29
  return 1;
29
30
  }
30
31
  const [cmd, ...rest] = resolveArgv(plugin.decl.fix, plugin.dir);
31
- const files = step.checked === 'all' ? [] : step.checked;
32
+ // 全量运行只记录 'all':按运行时同样的规则还原检查过的文件。不能留空交给修复命令自行遍历,
33
+ // 否则会改到 exclude 排除的生成物(如 control/bin 下的 launcher)。
34
+ const files = step.checked === 'all' ? stepFiles(listFiles(dir), config.exclude, plugin.decl.triggers) : step.checked;
35
+ if (files.length === 0) {
36
+ io.out(`步骤 ${stepId} 没有可修复的文件`);
37
+ return 0;
38
+ }
32
39
  // 文件按命令行安全预算分批启动修复命令(Windows 的命令行长度有限),任一批失败即失败。
33
40
  let batches;
34
41
  try {
package/dist/fix.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fix.js","sourceRoot":"","sources":["../src/fix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fix.js","sourceRoot":"","sources":["../src/fix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface TraceEvent {
2
+ kind: 'command' | 'document' | 'injection';
3
+ command?: string;
4
+ args?: string[];
5
+ exitCode?: number;
6
+ output?: string;
7
+ source?: string;
8
+ content?: string;
9
+ session?: string;
10
+ channel?: string;
11
+ }
12
+ export declare const activeFile: (root: string) => string;
13
+ export declare const eventsFile: (root: string) => string;
14
+ export declare function traceActive(root: string): boolean;
15
+ /** 只在用户主动启动的本地服务存活时记录;日志位于项目忽略目录。 */
16
+ export declare function recordTrace(root: string, event: TraceEvent): void;
package/dist/trace.js ADDED
@@ -0,0 +1,30 @@
1
+ import { appendFileSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ const folder = (root) => join(root, '.sumi/visualize');
4
+ export const activeFile = (root) => join(folder(root), 'active.json');
5
+ export const eventsFile = (root) => join(folder(root), 'events.jsonl');
6
+ export function traceActive(root) {
7
+ try {
8
+ const state = JSON.parse(readFileSync(activeFile(root), 'utf8'));
9
+ if (!Number.isInteger(state.pid) || state.pid <= 0)
10
+ return false;
11
+ process.kill(state.pid, 0);
12
+ return true;
13
+ }
14
+ catch {
15
+ return false;
16
+ }
17
+ }
18
+ /** 只在用户主动启动的本地服务存活时记录;日志位于项目忽略目录。 */
19
+ export function recordTrace(root, event) {
20
+ if (!traceActive(root))
21
+ return;
22
+ try {
23
+ const capped = Object.fromEntries(Object.entries(event).map(([key, value]) => typeof value === 'string' && value.length > 131072 ? [key, `${value.slice(0, 131072)}\n[已截断]`] : [key, value]));
24
+ appendFileSync(eventsFile(root), `${JSON.stringify({ at: new Date().toISOString(), ...capped })}\n`, { mode: 0o600 });
25
+ }
26
+ catch {
27
+ // 可视化不得影响命令和 hook 的主功能。
28
+ }
29
+ }
30
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;AAC9E,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;AAE/E,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAsB,CAAC;QACtF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,IAAK,KAAK,CAAC,GAAc,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAa,EAAE,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,KAAiB;IACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAAE,OAAO;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAC/B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CACzC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAC9G,CACF,CAAC;QACF,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxH,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;IAC1B,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- export declare const PAGE = "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Sumi \u00B7 \u4F1A\u8BDD\u8BC1\u636E</title>\n<style>\n:root{font-family:Inter,\"PingFang SC\",\"Microsoft YaHei\",system-ui,sans-serif;color-scheme:light;background:#f4f6f5;color:#172923;--ink:#172923;--muted:#64756d;--line:#dbe3de;--accent:#145c47;--surface:#fff;--soft:#eaf2ec}\n*{box-sizing:border-box}body{margin:0}button{font:inherit}::selection{background:#b9dcc7;color:#102b20}\n.shell{max-width:1440px;margin:auto;padding:32px clamp(20px,4vw,64px) 80px}\n.top{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;padding-bottom:28px;border-bottom:1px solid var(--line)}\n.brand{display:flex;align-items:center;gap:12px;color:var(--accent);font-size:14px;font-weight:750;letter-spacing:.03em}.mark{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--accent);color:white;font-size:18px;font-weight:800}\nh1{font-size:clamp(30px,3.5vw,48px);letter-spacing:-.035em;line-height:1.12;margin:25px 0 10px}h2{font-size:19px;letter-spacing:-.02em;margin:0}p{margin:0;line-height:1.6}.intro{color:var(--muted);max-width:68ch;font-size:14px}\n.toolbar{display:flex;gap:12px;align-items:center;white-space:nowrap}.live{color:var(--accent);font-size:12px;font-weight:700;display:flex;gap:8px;align-items:center}.live:before{content:\"\";width:7px;height:7px;border-radius:50%;background:#279c6c;box-shadow:0 0 0 3px #d8eee2}\nbutton{background:white;border:1px solid #b8c9be;color:var(--ink);border-radius:9px;padding:9px 15px;cursor:pointer;font-weight:650}button:hover{background:var(--soft)}button:focus-visible,summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}\n.status{display:flex;flex-wrap:wrap;gap:9px 22px;align-items:center;padding:18px 0 24px;font-size:12px;color:var(--muted)}.status strong{color:var(--ink)}.status .warn{color:#9b552d}.status .ok{color:var(--accent)}\n.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;min-width:0;overflow:hidden}.panel-head{padding:22px 24px 18px;border-bottom:1px solid #edf1ee;display:flex;align-items:start;justify-content:space-between;gap:16px}.panel-head p{color:var(--muted);font-size:12px;margin-top:5px}.count{background:var(--soft);color:var(--accent);font-size:12px;font-weight:750;min-width:28px;text-align:center;padding:5px 8px;border-radius:7px;font-variant-numeric:tabular-nums}\n.filters{display:flex;gap:7px;flex-wrap:wrap;padding:17px 24px;border-bottom:1px solid #edf1ee}.filters button{padding:6px 11px;border:0;background:transparent;color:var(--muted);font-size:12px;font-weight:650}.filters button[aria-pressed=\"true\"]{background:var(--accent);color:white}.filters button:hover:not([aria-pressed=\"true\"]){background:var(--soft);color:var(--ink)}\n.timeline{list-style:none;margin:0;padding:8px 28px 28px}.event{display:grid;grid-template-columns:112px 24px minmax(0,1fr);min-height:90px}.event-time{padding-top:21px;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.rail{position:relative}.rail:before{content:\"\";position:absolute;top:0;bottom:0;left:11px;width:1px;background:#d7e4db}.rail:after{content:\"\";position:absolute;top:22px;left:6px;width:11px;height:11px;border:2px solid white;border-radius:50%;background:#89ae9a;box-shadow:0 0 0 1px #89ae9a}.event.injection .rail:after{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.event.agent-read .rail:after{background:#3c78a0;box-shadow:0 0 0 1px #3c78a0}.event.prompt .rail:after{background:#d2a357;box-shadow:0 0 0 1px #d2a357}.event-body{min-width:0;padding:17px 0 24px 22px;border-bottom:1px solid #edf1ee}.event:last-child .event-body{border-bottom:0}.event-title{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;font-size:15px;font-weight:750;overflow-wrap:anywhere}.type{color:var(--accent);background:var(--soft);padding:4px 7px;border-radius:5px;font-size:11px;font-weight:750}.event.agent-read .type{color:#265d80;background:#eaf2f8}.event.prompt .type{color:#8b5924;background:#f8eee0}.event-summary{font-size:12px;color:var(--muted);margin-top:6px;overflow-wrap:anywhere}.excerpt{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.6;margin-top:12px;max-width:75ch}.event details{margin-top:10px}.event summary{cursor:pointer;display:inline-block;color:var(--accent);font-size:12px;font-weight:700}.event summary:hover{text-decoration:underline;text-underline-offset:3px}.event summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}.event pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:380px;overflow:auto;background:#f4f7f5;border-radius:8px;padding:16px;margin:12px 0 0;font:12px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;color:#24382f}.empty{padding:28px;color:var(--muted);font-size:13px;line-height:1.65}.empty strong{display:block;color:var(--ink);margin-bottom:4px}\n.read-boundary{padding:18px 24px 20px;background:#e9efeb;border-top:1px solid var(--line);font-size:12px;line-height:1.6;color:#43574c}.read-boundary strong{display:block;color:var(--ink);margin-bottom:3px}\n.foot{margin-top:24px;color:var(--muted);font-size:12px;line-height:1.65;max-width:85ch}*{scrollbar-color:#b4c7ba transparent;scrollbar-width:thin}\n@media(max-width:850px){.top{gap:16px}.shell{padding-top:22px}}\n@media(max-width:560px){.top{display:block}.toolbar{margin-top:20px;justify-content:space-between}.panel-head{padding-left:18px;padding-right:18px}.filters{padding-left:14px;padding-right:14px}.timeline{padding-left:14px;padding-right:18px}.event{grid-template-columns:70px 20px minmax(0,1fr)}.event-body{padding-left:12px}.event-time{font-size:10px}.status{gap:8px 15px}}\n</style>\n</head><body><div class=\"shell\">\n<header class=\"top\"><div><div class=\"brand\"><span class=\"mark\" aria-hidden=\"true\">S</span><span>SUMI / \u89C2\u5BDF\u53F0</span></div><h1>\u4F1A\u8BDD\u8BC1\u636E</h1><p class=\"intro\">\u6CBF\u4E00\u6B21\u5F00\u53D1\u4F1A\u8BDD\u67E5\u770B\u8F93\u5165\u3001Sumi \u9001\u51FA\u7684\u4E0A\u4E0B\u6587\u4E0E\u53EF\u9A8C\u8BC1\u7684\u8BFB\u53D6\u8BB0\u5F55\u3002</p></div><div class=\"toolbar\"><span class=\"live\">\u672C\u5730\u91C7\u96C6\u4E2D</span><button id=\"refresh\" type=\"button\">\u5237\u65B0\u6570\u636E</button></div></header>\n<div id=\"status\" class=\"status\" role=\"status\"></div>\n<main class=\"panel timeline-panel\" aria-labelledby=\"timeline-title\">\n<div class=\"panel-head\"><div><h2 id=\"timeline-title\">\u4E8B\u4EF6\u65F6\u95F4\u7EBF</h2><p>\u4ECE\u4E0A\u5230\u4E0B\u6309\u53D1\u751F\u65F6\u95F4\u6392\u5217\uFF1B\u5148\u770B\u6765\u6E90\u548C\u6587\u6863\u540D\uFF0C\u5C55\u5F00\u67E5\u770B\u5168\u6587</p></div><span id=\"timeline-count\" class=\"count\">0</span></div>\n<div class=\"filters\" role=\"group\" aria-label=\"\u7B5B\u9009\u4E8B\u4EF6\"><button type=\"button\" data-filter=\"all\" aria-pressed=\"true\">\u5168\u90E8</button><button type=\"button\" data-filter=\"prompt\" aria-pressed=\"false\">\u7528\u6237\u63D0\u793A\u8BCD</button><button type=\"button\" data-filter=\"injection\" aria-pressed=\"false\">Sumi \u6CE8\u5165</button><button type=\"button\" data-filter=\"agent-read\" aria-pressed=\"false\">Agent \u8BFB\u53D6</button><button type=\"button\" data-filter=\"document\" aria-pressed=\"false\">Sumi \u8BFB\u53D6</button><button type=\"button\" data-filter=\"command\" aria-pressed=\"false\">\u547D\u4EE4</button></div>\n<ol id=\"timeline\" class=\"timeline\"></ol>\n<div class=\"read-boundary\"><strong>\u8BFB\u53D6\u8BC1\u636E\u8303\u56F4</strong>\u201CAgent \u8BFB\u53D6\u201D\u6765\u81EA\u5BBF\u4E3B Read \u5DE5\u5177\u6210\u529F\u8FD4\u56DE\u7684\u9879\u76EE\u6587\u4EF6\u5185\u5BB9\uFF1B\u201CSumi \u8BFB\u53D6\u201D\u4EC5\u8868\u793A Sumi \u6253\u5F00\u4E86\u6587\u6863\uFF0C\u201CSumi \u6CE8\u5165\u201D\u4EC5\u8868\u793A\u6587\u672C\u5DF2\u8F93\u51FA\u7ED9 AI \u5BBF\u4E3B\u3002Shell\u3001MCP \u548C\u5BBF\u4E3B\u81EA\u52A8\u52A0\u8F7D\u7B49\u5176\u4ED6\u8BFB\u53D6\u8DEF\u5F84\u4ECD\u4E0D\u5728\u6B64\u9879\u89C2\u6D4B\u8303\u56F4\u5185\uFF1B\u4EFB\u4F55\u4E8B\u4EF6\u90FD\u4E0D\u80FD\u8BC1\u660E AI \u7406\u89E3\u6216\u9075\u5FAA\u4E86\u5185\u5BB9\u3002</div>\n</main><p class=\"foot\">\u4EC5\u91C7\u96C6\u670D\u52A1\u542F\u52A8\u540E\u7684\u4E8B\u4EF6\uFF0C\u5185\u5BB9\u4FDD\u5B58\u5728\u672C\u9879\u76EE .sumi/ \u4E2D\uFF0C\u91CD\u542F\u4F1A\u6E05\u7A7A\u3002\u8BB0\u5F55\u53EF\u80FD\u5305\u542B\u63D0\u793A\u8BCD\u548C\u5F00\u53D1\u4E0A\u4E0B\u6587\u3002</p></div>\n<script>\nconst byId=(id)=>document.getElementById(id);\nlet lastSnapshot='';\nlet allEvents=[];\nlet activeFilter='all';\nfunction make(tag,className,value){const node=document.createElement(tag);if(className)node.className=className;if(value!==undefined)node.textContent=String(value);return node}\nfunction timeOf(value){if(!value)return '\u65F6\u95F4\u672A\u77E5';const date=new Date(value);return Number.isNaN(date.getTime())?String(value):date.toLocaleTimeString('zh-CN',{hour12:false})}\nfunction eventLabel(event){return {prompt:'\u7528\u6237\u63D0\u793A\u8BCD',injection:'Sumi \u6CE8\u5165','agent-read':'Agent \u8BFB\u53D6',document:'Sumi \u8BFB\u53D6',command:'Sumi \u547D\u4EE4',diagnostic:'\u91C7\u96C6\u8BCA\u65AD'}[event.kind]||'\u5176\u4ED6\u4E8B\u4EF6'}\nfunction eventTitle(event){if(event.kind==='document'||event.kind==='agent-read')return event.source||'\u6765\u6E90\u672A\u77E5\u7684\u6587\u6863';if(event.kind==='command')return event.command||'\u672A\u77E5\u547D\u4EE4';if(event.kind==='injection')return event.channel==='before-edit'?'\u7F16\u8F91\u524D\u4E0A\u4E0B\u6587':'\u63D0\u793A\u8BCD\u4E0A\u4E0B\u6587';if(event.kind==='prompt')return event.source?event.source+' \u7684\u7528\u6237\u8F93\u5165':'\u7528\u6237\u8F93\u5165';return '\u91C7\u96C6\u72B6\u6001'}\nfunction eventSummary(event){const parts=[];if(event.session)parts.push('\u4F1A\u8BDD '+event.session);if(event.kind==='agent-read')parts.push((event.channel||'\u5BBF\u4E3B')+' Read \u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u6587\u4EF6\u5185\u5BB9');if(event.kind==='document')parts.push('Sumi \u6253\u5F00\u4E86\u6B64\u6587\u6863\uFF1B\u4E0D\u7B49\u4E8E AI \u5DF2\u8BFB');if(event.kind==='injection')parts.push('\u5DF2\u8F93\u51FA\u7ED9 AI \u5BBF\u4E3B\uFF1B\u4E0D\u7B49\u4E8E AI \u5DF2\u8BFB');if(event.kind==='command'){if(Array.isArray(event.args)&&event.args.length)parts.push('\u53C2\u6570\uFF1A'+event.args.join(' '));if(event.exitCode!==undefined)parts.push('\u9000\u51FA\u7801 '+event.exitCode)}return parts.join(' \u00B7 ')}\nfunction eventText(event){if(event.kind==='command')return event.output?'\u8F93\u51FA\uFF1A'+event.output:'\u65E0\u8F93\u51FA';return String(event.content??'')}\nfunction renderTimeline(){const target=byId('timeline');const shown=activeFilter==='all'?allEvents:allEvents.filter(e=>e.kind===activeFilter);target.replaceChildren();byId('timeline-count').textContent=String(shown.length);if(!shown.length){const empty=make('li','empty');empty.append(make('strong','',activeFilter==='all'?'\u6682\u65E0\u4E8B\u4EF6':'\u6B64\u7C7B\u4E8B\u4EF6\u5C1A\u65E0\u8BB0\u5F55'),document.createTextNode(activeFilter==='injection'?'\u5F53\u524D\u6CA1\u6709 hook \u4E0A\u4E0B\u6587\u8F93\u51FA\u8BC1\u636E\u3002':'\u670D\u52A1\u8FD0\u884C\u671F\u95F4\u7684\u65B0\u4E8B\u4EF6\u4F1A\u51FA\u73B0\u5728\u8FD9\u91CC\u3002'));target.append(empty);return}for(const event of shown){const row=make('li','event '+String(event.kind||'other'));const time=make('time','event-time',timeOf(event.at));if(event.at)time.dateTime=event.at;const rail=make('span','rail');rail.setAttribute('aria-hidden','true');const body=make('div','event-body');const title=make('div','event-title');title.append(make('span','type',eventLabel(event)),make('span','',eventTitle(event)));body.append(title);const summary=eventSummary(event);if(summary)body.append(make('p','event-summary',summary));const full=eventText(event);if(event.kind==='prompt'&&full){body.append(make('p','excerpt',full.length>180?full.slice(0,180)+'\u2026':full))}if(full&&(event.kind!=='prompt'||full.length>180)){const details=make('details','');const label=event.kind==='document'||event.kind==='agent-read'?'\u67E5\u770B\u8BFB\u53D6\u5185\u5BB9':event.kind==='injection'?'\u67E5\u770B\u6CE8\u5165\u5168\u6587':event.kind==='command'?'\u67E5\u770B\u547D\u4EE4\u8F93\u51FA':'\u67E5\u770B\u63D0\u793A\u8BCD\u5168\u6587';details.append(make('summary','',label),make('pre','',full));body.append(details)}row.append(time,rail,body);target.append(row)}}\nasync function refresh(){try{const [eventsResponse,statusResponse]=await Promise.all([fetch('/api/events',{cache:'no-store'}),fetch('/api/status',{cache:'no-store'})]);if(!eventsResponse.ok||!statusResponse.ok)throw new Error('\u8BFB\u53D6\u5931\u8D25');const [events,status]=await Promise.all([eventsResponse.json(),statusResponse.json()]);const snapshot=JSON.stringify([events,status]);if(snapshot===lastSnapshot)return;lastSnapshot=snapshot;allEvents=events;renderTimeline();const prompts=events.filter(e=>e.kind==='prompt').length,injections=events.filter(e=>e.kind==='injection').length,reads=events.filter(e=>e.kind==='document').length,agentReads=events.filter(e=>e.kind==='agent-read').length;const statusBox=byId('status');statusBox.replaceChildren();for(const [value,kind] of [['\u91C7\u96C6\u5668 '+status.observer+' \u00B7 \u9879\u76EE\u5165\u53E3 '+(status.project||'\u672A\u77E5'),status.sameRuntime?'ok':'warn'],['\u4EE3\u7406 '+(status.agents.join('\u3001')||'\u672A\u914D\u7F6E'),''],['\u63D0\u793A\u8BCD '+prompts+' \u00B7 \u6CE8\u5165 '+injections+' \u00B7 Agent \u8BFB\u53D6 '+agentReads+' \u00B7 Sumi \u8BFB\u53D6 '+reads,'']]){statusBox.append(make('span',kind,value))}if(!status.sameRuntime)statusBox.append(make('strong','warn','\u91C7\u96C6\u5668\u4E0E\u9879\u76EE\u6B63\u5F0F\u5165\u53E3\u4E0D\u662F\u540C\u4E00\u6784\u5EFA\uFF0C\u6B63\u5F0F Sumi \u547D\u4EE4\u53EF\u80FD\u4E0D\u4F1A\u88AB\u8BB0\u5F55\u3002'))}catch{lastSnapshot='';byId('status').textContent='\u65E0\u6CD5\u8BFB\u53D6\u672C\u5730\u4E8B\u4EF6\uFF1B\u8BF7\u786E\u8BA4\u53EF\u89C6\u5316\u670D\u52A1\u4ECD\u5728\u8FD0\u884C\u3002'}}\nfor(const button of document.querySelectorAll('[data-filter]'))button.addEventListener('click',()=>{activeFilter=button.dataset.filter;for(const option of document.querySelectorAll('[data-filter]'))option.setAttribute('aria-pressed',String(option===button));renderTimeline()});\nbyId('refresh').addEventListener('click',refresh);refresh();setInterval(refresh,2000);\n</script></body></html>";
1
+ export declare const PAGE = "<!doctype html>\n<html lang=\"zh-CN\">\n<head>\n<meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<title>Sumi \u00B7 \u4F1A\u8BDD\u8BC1\u636E</title>\n<style>\n:root{font-family:Inter,\"PingFang SC\",\"Microsoft YaHei\",system-ui,sans-serif;color-scheme:light;background:#f4f6f5;color:#172923;--ink:#172923;--muted:#64756d;--line:#dbe3de;--accent:#145c47;--surface:#fff;--soft:#eaf2ec}\n*{box-sizing:border-box}body{margin:0}button{font:inherit}::selection{background:#b9dcc7;color:#102b20}\n.shell{max-width:1440px;margin:auto;padding:32px clamp(20px,4vw,64px) 80px}\n.top{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;padding-bottom:28px;border-bottom:1px solid var(--line)}\n.brand{display:flex;align-items:center;gap:12px;color:var(--accent);font-size:14px;font-weight:750;letter-spacing:.03em}.mark{display:grid;place-items:center;width:30px;height:30px;border-radius:9px;background:var(--accent);color:white;font-size:18px;font-weight:800}\nh1{font-size:clamp(30px,3.5vw,48px);letter-spacing:-.035em;line-height:1.12;margin:25px 0 10px}h2{font-size:19px;letter-spacing:-.02em;margin:0}p{margin:0;line-height:1.6}.intro{color:var(--muted);max-width:68ch;font-size:14px}\n.toolbar{display:flex;gap:12px;align-items:center;white-space:nowrap}.live{color:var(--accent);font-size:12px;font-weight:700;display:flex;gap:8px;align-items:center}.live:before{content:\"\";width:7px;height:7px;border-radius:50%;background:#279c6c;box-shadow:0 0 0 3px #d8eee2}\nbutton{background:white;border:1px solid #b8c9be;color:var(--ink);border-radius:9px;padding:9px 15px;cursor:pointer;font-weight:650}button:hover{background:var(--soft)}button:focus-visible,summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}\n.status{display:flex;flex-wrap:wrap;gap:9px 22px;align-items:center;padding:18px 0 24px;font-size:12px;color:var(--muted)}.status strong{color:var(--ink)}.status .warn{color:#9b552d}.status .ok{color:var(--accent)}\n.panel{background:var(--surface);border:1px solid var(--line);border-radius:14px;min-width:0;overflow:hidden}.panel-head{padding:22px 24px 18px;border-bottom:1px solid #edf1ee;display:flex;align-items:start;justify-content:space-between;gap:16px}.panel-head p{color:var(--muted);font-size:12px;margin-top:5px}.count{background:var(--soft);color:var(--accent);font-size:12px;font-weight:750;min-width:28px;text-align:center;padding:5px 8px;border-radius:7px;font-variant-numeric:tabular-nums}\n.filters{display:flex;gap:7px;flex-wrap:wrap;padding:17px 24px;border-bottom:1px solid #edf1ee}.filters button{padding:6px 11px;border:0;background:transparent;color:var(--muted);font-size:12px;font-weight:650}.filters button[aria-pressed=\"true\"]{background:var(--accent);color:white}.filters button:hover:not([aria-pressed=\"true\"]){background:var(--soft);color:var(--ink)}\n.timeline{list-style:none;margin:0;padding:8px 28px 28px}.event{display:grid;grid-template-columns:112px 24px minmax(0,1fr);min-height:90px}.event-time{padding-top:21px;color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.rail{position:relative}.rail:before{content:\"\";position:absolute;top:0;bottom:0;left:11px;width:1px;background:#d7e4db}.rail:after{content:\"\";position:absolute;top:22px;left:6px;width:11px;height:11px;border:2px solid white;border-radius:50%;background:#89ae9a;box-shadow:0 0 0 1px #89ae9a}.event.injection .rail:after{background:var(--accent);box-shadow:0 0 0 1px var(--accent)}.event.agent-read .rail:after{background:#3c78a0;box-shadow:0 0 0 1px #3c78a0}.event.prompt .rail:after{background:#d2a357;box-shadow:0 0 0 1px #d2a357}.event-body{min-width:0;padding:17px 0 24px 22px;border-bottom:1px solid #edf1ee}.event:last-child .event-body{border-bottom:0}.event-title{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;font-size:15px;font-weight:750;overflow-wrap:anywhere}.type{color:var(--accent);background:var(--soft);padding:4px 7px;border-radius:5px;font-size:11px;font-weight:750}.event.agent-read .type{color:#265d80;background:#eaf2f8}.event.prompt .type{color:#8b5924;background:#f8eee0}.event-summary{font-size:12px;color:var(--muted);margin-top:6px;overflow-wrap:anywhere}.excerpt{white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.6;margin-top:12px;max-width:75ch}.event details{margin-top:10px}.event summary{cursor:pointer;display:inline-block;color:var(--accent);font-size:12px;font-weight:700}.event summary:hover{text-decoration:underline;text-underline-offset:3px}.event summary:focus-visible{outline:3px solid #75b596;outline-offset:3px}.event pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:380px;overflow:auto;background:#f4f7f5;border-radius:8px;padding:16px;margin:12px 0 0;font:12px/1.65 ui-monospace,SFMono-Regular,Menlo,monospace;color:#24382f}.empty{padding:28px;color:var(--muted);font-size:13px;line-height:1.65}.empty strong{display:block;color:var(--ink);margin-bottom:4px}\n.read-boundary{padding:18px 24px 20px;background:#e9efeb;border-top:1px solid var(--line);font-size:12px;line-height:1.6;color:#43574c}.read-boundary strong{display:block;color:var(--ink);margin-bottom:3px}\n.foot{margin-top:24px;color:var(--muted);font-size:12px;line-height:1.65;max-width:85ch}*{scrollbar-color:#b4c7ba transparent;scrollbar-width:thin}\n@media(max-width:850px){.top{gap:16px}.shell{padding-top:22px}}\n@media(max-width:560px){.top{display:block}.toolbar{margin-top:20px;justify-content:space-between}.panel-head{padding-left:18px;padding-right:18px}.filters{padding-left:14px;padding-right:14px}.timeline{padding-left:14px;padding-right:18px}.event{grid-template-columns:70px 20px minmax(0,1fr)}.event-body{padding-left:12px}.event-time{font-size:10px}.status{gap:8px 15px}}\n</style>\n</head><body><div class=\"shell\">\n<header class=\"top\"><div><div class=\"brand\"><span class=\"mark\" aria-hidden=\"true\">S</span><span>SUMI / \u89C2\u5BDF\u53F0</span></div><h1>\u4F1A\u8BDD\u8BC1\u636E</h1><p class=\"intro\">\u6CBF\u4E00\u6B21\u5F00\u53D1\u4F1A\u8BDD\u67E5\u770B\u8F93\u5165\u3001Sumi \u9001\u51FA\u7684\u4E0A\u4E0B\u6587\u4E0E\u53EF\u9A8C\u8BC1\u7684\u8BFB\u53D6\u8BB0\u5F55\u3002</p></div><div class=\"toolbar\"><span class=\"live\">\u672C\u5730\u91C7\u96C6\u4E2D</span><button id=\"refresh\" type=\"button\">\u5237\u65B0\u6570\u636E</button></div></header>\n<div id=\"status\" class=\"status\" role=\"status\"></div>\n<main class=\"panel timeline-panel\" aria-labelledby=\"timeline-title\">\n<div class=\"panel-head\"><div><h2 id=\"timeline-title\">\u4E8B\u4EF6\u65F6\u95F4\u7EBF</h2><p>\u4ECE\u4E0A\u5230\u4E0B\u6309\u53D1\u751F\u65F6\u95F4\u6392\u5217\uFF1B\u5148\u770B\u6765\u6E90\u548C\u6587\u6863\u540D\uFF0C\u5C55\u5F00\u67E5\u770B\u5168\u6587</p></div><span id=\"timeline-count\" class=\"count\">0</span></div>\n<div class=\"filters\" role=\"group\" aria-label=\"\u7B5B\u9009\u4E8B\u4EF6\"><button type=\"button\" data-filter=\"all\" aria-pressed=\"true\">\u5168\u90E8</button><button type=\"button\" data-filter=\"prompt\" aria-pressed=\"false\">\u7528\u6237\u63D0\u793A\u8BCD</button><button type=\"button\" data-filter=\"injection\" aria-pressed=\"false\">Sumi \u6CE8\u5165</button><button type=\"button\" data-filter=\"agent-read\" aria-pressed=\"false\">Agent \u8BFB\u53D6</button><button type=\"button\" data-filter=\"document\" aria-pressed=\"false\">Sumi \u8BFB\u53D6</button><button type=\"button\" data-filter=\"command\" aria-pressed=\"false\">\u547D\u4EE4</button></div>\n<ol id=\"timeline\" class=\"timeline\"></ol>\n<div class=\"read-boundary\"><strong>\u8BFB\u53D6\u8BC1\u636E\u8303\u56F4</strong>\u201CAgent \u8BFB\u53D6\u201D\u6765\u81EA\u5BBF\u4E3B Read \u5DE5\u5177\u6210\u529F\u8FD4\u56DE\u7684\u9879\u76EE\u6587\u4EF6\u5185\u5BB9\uFF1B\u201CSumi \u8BFB\u53D6\u201D\u4EC5\u8868\u793A Sumi \u6253\u5F00\u4E86\u6587\u6863\uFF0C\u201CSumi \u6CE8\u5165\u201D\u4EC5\u8868\u793A\u6587\u672C\u5DF2\u8F93\u51FA\u7ED9 AI \u5BBF\u4E3B\u3002Shell\u3001MCP \u548C\u5BBF\u4E3B\u81EA\u52A8\u52A0\u8F7D\u7B49\u5176\u4ED6\u8BFB\u53D6\u8DEF\u5F84\u4ECD\u4E0D\u5728\u6B64\u9879\u89C2\u6D4B\u8303\u56F4\u5185\uFF1B\u4EFB\u4F55\u4E8B\u4EF6\u90FD\u4E0D\u80FD\u8BC1\u660E AI \u7406\u89E3\u6216\u9075\u5FAA\u4E86\u5185\u5BB9\u3002</div>\n</main><p class=\"foot\">Sumi \u547D\u4EE4\u4E0E\u5DF2\u63A5\u7EBF hook \u7684\u4E8B\u4EF6\u4F1A\u6301\u7EED\u4FDD\u5B58\u5728\u672C\u9879\u76EE .sumi/visualize/events.jsonl\uFF0C\u5373\u4F7F\u9875\u9762\u672A\u542F\u52A8\u6216\u670D\u52A1\u5DF2\u5173\u95ED\u3002\u9875\u9762\u5C55\u793A\u6700\u8FD1 500 \u6761\u4E8B\u4EF6\uFF0C\u65E5\u5FD7\u4E0D\u4F1A\u56E0\u91CD\u542F\u6E05\u7A7A\uFF1B\u53EF\u624B\u52A8\u5220\u9664\u8BE5\u6587\u4EF6\u6E05\u7406\u5386\u53F2\u3002\u8BB0\u5F55\u53EF\u80FD\u5305\u542B\u63D0\u793A\u8BCD\u548C\u5F00\u53D1\u4E0A\u4E0B\u6587\u3002</p></div>\n<script>\nconst byId=(id)=>document.getElementById(id);\nlet lastSnapshot='';\nlet allEvents=[];\nlet activeFilter='all';\nfunction make(tag,className,value){const node=document.createElement(tag);if(className)node.className=className;if(value!==undefined)node.textContent=String(value);return node}\nfunction timeOf(value){if(!value)return '\u65F6\u95F4\u672A\u77E5';const date=new Date(value);return Number.isNaN(date.getTime())?String(value):date.toLocaleTimeString('zh-CN',{hour12:false})}\nfunction eventLabel(event){return {prompt:'\u7528\u6237\u63D0\u793A\u8BCD',injection:'Sumi \u6CE8\u5165','agent-read':'Agent \u8BFB\u53D6',document:'Sumi \u8BFB\u53D6',command:'Sumi \u547D\u4EE4',diagnostic:'\u91C7\u96C6\u8BCA\u65AD'}[event.kind]||'\u5176\u4ED6\u4E8B\u4EF6'}\nfunction eventTitle(event){if(event.kind==='document'||event.kind==='agent-read')return event.source||'\u6765\u6E90\u672A\u77E5\u7684\u6587\u6863';if(event.kind==='command')return event.command||'\u672A\u77E5\u547D\u4EE4';if(event.kind==='injection')return event.channel==='before-edit'?'\u7F16\u8F91\u524D\u4E0A\u4E0B\u6587':'\u63D0\u793A\u8BCD\u4E0A\u4E0B\u6587';if(event.kind==='prompt')return event.source?event.source+' \u7684\u7528\u6237\u8F93\u5165':'\u7528\u6237\u8F93\u5165';return '\u91C7\u96C6\u72B6\u6001'}\nfunction eventSummary(event){const parts=[];if(event.session)parts.push('\u4F1A\u8BDD '+event.session);if(event.kind==='agent-read')parts.push((event.channel||'\u5BBF\u4E3B')+' Read \u5DE5\u5177\u8FD4\u56DE\u7684\u9879\u76EE\u6587\u4EF6\u5185\u5BB9');if(event.kind==='document')parts.push('Sumi \u6253\u5F00\u4E86\u6B64\u6587\u6863\uFF1B\u4E0D\u7B49\u4E8E AI \u5DF2\u8BFB');if(event.kind==='injection')parts.push('\u5DF2\u8F93\u51FA\u7ED9 AI \u5BBF\u4E3B\uFF1B\u4E0D\u7B49\u4E8E AI \u5DF2\u8BFB');if(event.kind==='command'){if(Array.isArray(event.args)&&event.args.length)parts.push('\u53C2\u6570\uFF1A'+event.args.join(' '));if(event.exitCode!==undefined)parts.push('\u9000\u51FA\u7801 '+event.exitCode)}return parts.join(' \u00B7 ')}\nfunction eventText(event){if(event.kind==='command')return event.output?'\u8F93\u51FA\uFF1A'+event.output:'\u65E0\u8F93\u51FA';return String(event.content??'')}\nfunction renderTimeline(){const target=byId('timeline');const shown=activeFilter==='all'?allEvents:allEvents.filter(e=>e.kind===activeFilter);target.replaceChildren();byId('timeline-count').textContent=String(shown.length);if(!shown.length){const empty=make('li','empty');empty.append(make('strong','',activeFilter==='all'?'\u6682\u65E0\u4E8B\u4EF6':'\u6B64\u7C7B\u4E8B\u4EF6\u5C1A\u65E0\u8BB0\u5F55'),document.createTextNode(activeFilter==='injection'?'\u5F53\u524D\u6CA1\u6709 hook \u4E0A\u4E0B\u6587\u8F93\u51FA\u8BC1\u636E\u3002':'\u65B0\u4E8B\u4EF6\u4F1A\u6301\u7EED\u5199\u5165\u672C\u5730\u65E5\u5FD7\uFF0C\u5E76\u51FA\u73B0\u5728\u8FD9\u91CC\u3002'));target.append(empty);return}for(const event of shown){const row=make('li','event '+String(event.kind||'other'));const time=make('time','event-time',timeOf(event.at));if(event.at)time.dateTime=event.at;const rail=make('span','rail');rail.setAttribute('aria-hidden','true');const body=make('div','event-body');const title=make('div','event-title');title.append(make('span','type',eventLabel(event)),make('span','',eventTitle(event)));body.append(title);const summary=eventSummary(event);if(summary)body.append(make('p','event-summary',summary));const full=eventText(event);if(event.kind==='prompt'&&full){body.append(make('p','excerpt',full.length>180?full.slice(0,180)+'\u2026':full))}if(full&&(event.kind!=='prompt'||full.length>180)){const details=make('details','');const label=event.kind==='document'||event.kind==='agent-read'?'\u67E5\u770B\u8BFB\u53D6\u5185\u5BB9':event.kind==='injection'?'\u67E5\u770B\u6CE8\u5165\u5168\u6587':event.kind==='command'?'\u67E5\u770B\u547D\u4EE4\u8F93\u51FA':'\u67E5\u770B\u63D0\u793A\u8BCD\u5168\u6587';details.append(make('summary','',label),make('pre','',full));body.append(details)}row.append(time,rail,body);target.append(row)}}\nasync function refresh(){try{const [eventsResponse,statusResponse]=await Promise.all([fetch('/api/events',{cache:'no-store'}),fetch('/api/status',{cache:'no-store'})]);if(!eventsResponse.ok||!statusResponse.ok)throw new Error('\u8BFB\u53D6\u5931\u8D25');const [events,status]=await Promise.all([eventsResponse.json(),statusResponse.json()]);const snapshot=JSON.stringify([events,status]);if(snapshot===lastSnapshot)return;lastSnapshot=snapshot;allEvents=events;renderTimeline();const prompts=events.filter(e=>e.kind==='prompt').length,injections=events.filter(e=>e.kind==='injection').length,reads=events.filter(e=>e.kind==='document').length,agentReads=events.filter(e=>e.kind==='agent-read').length;const statusBox=byId('status');statusBox.replaceChildren();for(const [value,kind] of [['\u91C7\u96C6\u5668 '+status.observer+' \u00B7 \u9879\u76EE\u5165\u53E3 '+(status.project||'\u672A\u77E5'),status.sameRuntime?'ok':'warn'],['\u4EE3\u7406 '+(status.agents.join('\u3001')||'\u672A\u914D\u7F6E'),''],['\u63D0\u793A\u8BCD '+prompts+' \u00B7 \u6CE8\u5165 '+injections+' \u00B7 Agent \u8BFB\u53D6 '+agentReads+' \u00B7 Sumi \u8BFB\u53D6 '+reads,'']]){statusBox.append(make('span',kind,value))}if(!status.sameRuntime)statusBox.append(make('strong','warn','\u91C7\u96C6\u5668\u4E0E\u9879\u76EE\u6B63\u5F0F\u5165\u53E3\u4E0D\u662F\u540C\u4E00\u6784\u5EFA\uFF0C\u6B63\u5F0F Sumi \u547D\u4EE4\u53EF\u80FD\u4E0D\u4F1A\u88AB\u8BB0\u5F55\u3002'))}catch{lastSnapshot='';byId('status').textContent='\u65E0\u6CD5\u8BFB\u53D6\u672C\u5730\u4E8B\u4EF6\uFF1B\u8BF7\u786E\u8BA4\u53EF\u89C6\u5316\u670D\u52A1\u4ECD\u5728\u8FD0\u884C\u3002'}}\nfor(const button of document.querySelectorAll('[data-filter]'))button.addEventListener('click',()=>{activeFilter=button.dataset.filter;for(const option of document.querySelectorAll('[data-filter]'))option.setAttribute('aria-pressed',String(option===button));renderTimeline()});\nbyId('refresh').addEventListener('click',refresh);refresh();setInterval(refresh,2000);\n</script></body></html>";
@@ -29,7 +29,7 @@ button{background:white;border:1px solid #b8c9be;color:var(--ink);border-radius:
29
29
  <div class="filters" role="group" aria-label="筛选事件"><button type="button" data-filter="all" aria-pressed="true">全部</button><button type="button" data-filter="prompt" aria-pressed="false">用户提示词</button><button type="button" data-filter="injection" aria-pressed="false">Sumi 注入</button><button type="button" data-filter="agent-read" aria-pressed="false">Agent 读取</button><button type="button" data-filter="document" aria-pressed="false">Sumi 读取</button><button type="button" data-filter="command" aria-pressed="false">命令</button></div>
30
30
  <ol id="timeline" class="timeline"></ol>
31
31
  <div class="read-boundary"><strong>读取证据范围</strong>“Agent 读取”来自宿主 Read 工具成功返回的项目文件内容;“Sumi 读取”仅表示 Sumi 打开了文档,“Sumi 注入”仅表示文本已输出给 AI 宿主。Shell、MCP 和宿主自动加载等其他读取路径仍不在此项观测范围内;任何事件都不能证明 AI 理解或遵循了内容。</div>
32
- </main><p class="foot">仅采集服务启动后的事件,内容保存在本项目 .sumi/ 中,重启会清空。记录可能包含提示词和开发上下文。</p></div>
32
+ </main><p class="foot">Sumi 命令与已接线 hook 的事件会持续保存在本项目 .sumi/visualize/events.jsonl,即使页面未启动或服务已关闭。页面展示最近 500 条事件,日志不会因重启清空;可手动删除该文件清理历史。记录可能包含提示词和开发上下文。</p></div>
33
33
  <script>
34
34
  const byId=(id)=>document.getElementById(id);
35
35
  let lastSnapshot='';
@@ -41,7 +41,7 @@ function eventLabel(event){return {prompt:'用户提示词',injection:'Sumi 注
41
41
  function eventTitle(event){if(event.kind==='document'||event.kind==='agent-read')return event.source||'来源未知的文档';if(event.kind==='command')return event.command||'未知命令';if(event.kind==='injection')return event.channel==='before-edit'?'编辑前上下文':'提示词上下文';if(event.kind==='prompt')return event.source?event.source+' 的用户输入':'用户输入';return '采集状态'}
42
42
  function eventSummary(event){const parts=[];if(event.session)parts.push('会话 '+event.session);if(event.kind==='agent-read')parts.push((event.channel||'宿主')+' Read 工具返回的项目文件内容');if(event.kind==='document')parts.push('Sumi 打开了此文档;不等于 AI 已读');if(event.kind==='injection')parts.push('已输出给 AI 宿主;不等于 AI 已读');if(event.kind==='command'){if(Array.isArray(event.args)&&event.args.length)parts.push('参数:'+event.args.join(' '));if(event.exitCode!==undefined)parts.push('退出码 '+event.exitCode)}return parts.join(' · ')}
43
43
  function eventText(event){if(event.kind==='command')return event.output?'输出:'+event.output:'无输出';return String(event.content??'')}
44
- function renderTimeline(){const target=byId('timeline');const shown=activeFilter==='all'?allEvents:allEvents.filter(e=>e.kind===activeFilter);target.replaceChildren();byId('timeline-count').textContent=String(shown.length);if(!shown.length){const empty=make('li','empty');empty.append(make('strong','',activeFilter==='all'?'暂无事件':'此类事件尚无记录'),document.createTextNode(activeFilter==='injection'?'当前没有 hook 上下文输出证据。':'服务运行期间的新事件会出现在这里。'));target.append(empty);return}for(const event of shown){const row=make('li','event '+String(event.kind||'other'));const time=make('time','event-time',timeOf(event.at));if(event.at)time.dateTime=event.at;const rail=make('span','rail');rail.setAttribute('aria-hidden','true');const body=make('div','event-body');const title=make('div','event-title');title.append(make('span','type',eventLabel(event)),make('span','',eventTitle(event)));body.append(title);const summary=eventSummary(event);if(summary)body.append(make('p','event-summary',summary));const full=eventText(event);if(event.kind==='prompt'&&full){body.append(make('p','excerpt',full.length>180?full.slice(0,180)+'…':full))}if(full&&(event.kind!=='prompt'||full.length>180)){const details=make('details','');const label=event.kind==='document'||event.kind==='agent-read'?'查看读取内容':event.kind==='injection'?'查看注入全文':event.kind==='command'?'查看命令输出':'查看提示词全文';details.append(make('summary','',label),make('pre','',full));body.append(details)}row.append(time,rail,body);target.append(row)}}
44
+ function renderTimeline(){const target=byId('timeline');const shown=activeFilter==='all'?allEvents:allEvents.filter(e=>e.kind===activeFilter);target.replaceChildren();byId('timeline-count').textContent=String(shown.length);if(!shown.length){const empty=make('li','empty');empty.append(make('strong','',activeFilter==='all'?'暂无事件':'此类事件尚无记录'),document.createTextNode(activeFilter==='injection'?'当前没有 hook 上下文输出证据。':'新事件会持续写入本地日志,并出现在这里。'));target.append(empty);return}for(const event of shown){const row=make('li','event '+String(event.kind||'other'));const time=make('time','event-time',timeOf(event.at));if(event.at)time.dateTime=event.at;const rail=make('span','rail');rail.setAttribute('aria-hidden','true');const body=make('div','event-body');const title=make('div','event-title');title.append(make('span','type',eventLabel(event)),make('span','',eventTitle(event)));body.append(title);const summary=eventSummary(event);if(summary)body.append(make('p','event-summary',summary));const full=eventText(event);if(event.kind==='prompt'&&full){body.append(make('p','excerpt',full.length>180?full.slice(0,180)+'…':full))}if(full&&(event.kind!=='prompt'||full.length>180)){const details=make('details','');const label=event.kind==='document'||event.kind==='agent-read'?'查看读取内容':event.kind==='injection'?'查看注入全文':event.kind==='command'?'查看命令输出':'查看提示词全文';details.append(make('summary','',label),make('pre','',full));body.append(details)}row.append(time,rail,body);target.append(row)}}
45
45
  async function refresh(){try{const [eventsResponse,statusResponse]=await Promise.all([fetch('/api/events',{cache:'no-store'}),fetch('/api/status',{cache:'no-store'})]);if(!eventsResponse.ok||!statusResponse.ok)throw new Error('读取失败');const [events,status]=await Promise.all([eventsResponse.json(),statusResponse.json()]);const snapshot=JSON.stringify([events,status]);if(snapshot===lastSnapshot)return;lastSnapshot=snapshot;allEvents=events;renderTimeline();const prompts=events.filter(e=>e.kind==='prompt').length,injections=events.filter(e=>e.kind==='injection').length,reads=events.filter(e=>e.kind==='document').length,agentReads=events.filter(e=>e.kind==='agent-read').length;const statusBox=byId('status');statusBox.replaceChildren();for(const [value,kind] of [['采集器 '+status.observer+' · 项目入口 '+(status.project||'未知'),status.sameRuntime?'ok':'warn'],['代理 '+(status.agents.join('、')||'未配置'),''],['提示词 '+prompts+' · 注入 '+injections+' · Agent 读取 '+agentReads+' · Sumi 读取 '+reads,'']]){statusBox.append(make('span',kind,value))}if(!status.sameRuntime)statusBox.append(make('strong','warn','采集器与项目正式入口不是同一构建,正式 Sumi 命令可能不会被记录。'))}catch{lastSnapshot='';byId('status').textContent='无法读取本地事件;请确认可视化服务仍在运行。'}}
46
46
  for(const button of document.querySelectorAll('[data-filter]'))button.addEventListener('click',()=>{activeFilter=button.dataset.filter;for(const option of document.querySelectorAll('[data-filter]'))option.setAttribute('aria-pressed',String(option===button));renderTimeline()});
47
47
  byId('refresh').addEventListener('click',refresh);refresh();setInterval(refresh,2000);