@chenmk/superflow 0.4.0 → 0.5.0

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 (241) hide show
  1. package/INSTALL.en.md +54 -12
  2. package/INSTALL.md +59 -33
  3. package/README.md +178 -54
  4. package/README.zh-CN.md +156 -51
  5. package/assets/brand/managed-review-loop.png +0 -0
  6. package/assets/manifest.json +10 -5
  7. package/assets/scripts/superflow-coding-ready.mjs +135 -0
  8. package/assets/scripts/superflow-dependency-update-hook.sh +81 -8
  9. package/assets/scripts/superflow-document-audit.mjs +240 -0
  10. package/assets/scripts/superflow-environment-preflight.mjs +398 -0
  11. package/assets/scripts/superflow-hook-guard.sh +40 -1
  12. package/assets/scripts/superflow-managed-command-guard.py +309 -0
  13. package/assets/scripts/superflow-managed-executor-preflight.mjs +421 -0
  14. package/assets/scripts/superflow-managed-owner-verification.sh +117 -0
  15. package/assets/scripts/superflow-managed-work-check.mjs +287 -26
  16. package/assets/scripts/superflow-managed-work-guard.sh +6 -92
  17. package/assets/skills/superflow-clarify/SKILL.md +14 -0
  18. package/assets/skills/superflow-design/SKILL.md +38 -13
  19. package/assets/skills/superflow-docs/SKILL.md +93 -2
  20. package/assets/skills/superflow-pipeline/SKILL.md +167 -10
  21. package/assets/skills/superflow-pipeline/references/batch-prompt-template.md +17 -9
  22. package/assets/skills/superflow-pipeline/references/document-readiness.md +157 -0
  23. package/assets/skills/superflow-pipeline/references/document-templates.md +9 -5
  24. package/assets/skills/superflow-pipeline/references/feature-gated-workflow.md +14 -0
  25. package/assets/skills/superflow-pipeline/references/implementation-prompt-template.md +20 -11
  26. package/assets/skills/superflow-pipeline/references/managed-work.md +123 -15
  27. package/assets/skills/superflow-pipeline/references/orchestration.md +2 -2
  28. package/assets/skills/superflow-pipeline/references/p0-baseline-template.md +3 -2
  29. package/assets/skills/superflow-pipeline/references/quality-gate.md +7 -5
  30. package/assets/skills/superflow-pipeline/references/reviewer-checklist.md +7 -0
  31. package/assets/skills/superflow-pipeline/scripts/superflow-guard.sh +205 -9
  32. package/assets/skills/superflow-pipeline/scripts/superflow-handoff.sh +7 -4
  33. package/assets/skills/superflow-requirement-review/SKILL.md +178 -0
  34. package/assets/skills/superflow-requirement-review/agents/openai.yaml +4 -0
  35. package/assets/skills-en/superflow-clarify/SKILL.md +17 -0
  36. package/assets/skills-en/superflow-design/SKILL.md +31 -12
  37. package/assets/skills-en/superflow-docs/SKILL.md +99 -0
  38. package/assets/skills-en/superflow-pipeline/SKILL.md +163 -9
  39. package/assets/skills-en/superflow-pipeline/references/batch-prompt-template.md +4 -0
  40. package/assets/skills-en/superflow-pipeline/references/document-readiness.md +125 -0
  41. package/assets/skills-en/superflow-pipeline/references/document-templates.md +10 -0
  42. package/assets/skills-en/superflow-pipeline/references/feature-gated-workflow.md +7 -0
  43. package/assets/skills-en/superflow-pipeline/references/implementation-prompt-template.md +7 -0
  44. package/assets/skills-en/superflow-pipeline/references/managed-work.md +160 -10
  45. package/assets/skills-en/superflow-pipeline/references/quality-gate.md +12 -0
  46. package/assets/skills-en/superflow-pipeline/references/reviewer-checklist.md +7 -0
  47. package/assets/skills-en/superflow-pipeline/scripts/superflow-guard.sh +205 -9
  48. package/assets/skills-en/superflow-pipeline/scripts/superflow-handoff.sh +7 -4
  49. package/assets/skills-en/superflow-requirement-review/SKILL.md +99 -0
  50. package/assets/skills-en/superflow-requirement-review/agents/openai.yaml +4 -0
  51. package/dist/app/cli.js +64 -9
  52. package/dist/app/cli.js.map +1 -1
  53. package/dist/app/commands/change-guard.js +19 -2
  54. package/dist/app/commands/change-guard.js.map +1 -1
  55. package/dist/app/commands/check.js +107 -45
  56. package/dist/app/commands/check.js.map +1 -1
  57. package/dist/app/commands/docs.js +7 -3
  58. package/dist/app/commands/docs.js.map +1 -1
  59. package/dist/app/commands/doctor.js +174 -198
  60. package/dist/app/commands/doctor.js.map +1 -1
  61. package/dist/app/commands/eval.js +64 -0
  62. package/dist/app/commands/eval.js.map +1 -0
  63. package/dist/app/commands/implement.js +7 -3
  64. package/dist/app/commands/implement.js.map +1 -1
  65. package/dist/app/commands/init.js +12 -24
  66. package/dist/app/commands/init.js.map +1 -1
  67. package/dist/app/commands/mcp.js +167 -0
  68. package/dist/app/commands/mcp.js.map +1 -0
  69. package/dist/app/commands/pipeline.js +652 -18
  70. package/dist/app/commands/pipeline.js.map +1 -1
  71. package/dist/app/commands/requirement-review.js +6 -0
  72. package/dist/app/commands/requirement-review.js.map +1 -0
  73. package/dist/app/commands/status.js +66 -3
  74. package/dist/app/commands/status.js.map +1 -1
  75. package/dist/app/commands/uninstall.js +3 -3
  76. package/dist/app/commands/uninstall.js.map +1 -1
  77. package/dist/app/commands/update.js +83 -9
  78. package/dist/app/commands/update.js.map +1 -1
  79. package/dist/domains/agent.js +3 -11
  80. package/dist/domains/agent.js.map +1 -1
  81. package/dist/domains/config/cli-help.js +54 -12
  82. package/dist/domains/config/cli-help.js.map +1 -1
  83. package/dist/domains/config/i18n.js +6 -8
  84. package/dist/domains/config/i18n.js.map +1 -1
  85. package/dist/domains/config/manifest.js +0 -3
  86. package/dist/domains/config/manifest.js.map +1 -1
  87. package/dist/domains/deps.js +68 -7
  88. package/dist/domains/deps.js.map +1 -1
  89. package/dist/domains/managed-work/completion-policy.js +174 -0
  90. package/dist/domains/managed-work/completion-policy.js.map +1 -0
  91. package/dist/domains/managed-work/context-manifest.js +208 -0
  92. package/dist/domains/managed-work/context-manifest.js.map +1 -0
  93. package/dist/domains/managed-work/contract.js +135 -4
  94. package/dist/domains/managed-work/contract.js.map +1 -1
  95. package/dist/domains/managed-work/control-signals.js +34 -0
  96. package/dist/domains/managed-work/control-signals.js.map +1 -0
  97. package/dist/domains/managed-work/control.js +628 -0
  98. package/dist/domains/managed-work/control.js.map +1 -0
  99. package/dist/domains/managed-work/evaluation.js +497 -0
  100. package/dist/domains/managed-work/evaluation.js.map +1 -0
  101. package/dist/domains/managed-work/evidence-path.js +14 -0
  102. package/dist/domains/managed-work/evidence-path.js.map +1 -0
  103. package/dist/domains/managed-work/execution-contract.js +167 -0
  104. package/dist/domains/managed-work/execution-contract.js.map +1 -0
  105. package/dist/domains/managed-work/executor-policy.js +65 -0
  106. package/dist/domains/managed-work/executor-policy.js.map +1 -0
  107. package/dist/domains/managed-work/failure.js +65 -0
  108. package/dist/domains/managed-work/failure.js.map +1 -0
  109. package/dist/domains/managed-work/host-review.js +77 -0
  110. package/dist/domains/managed-work/host-review.js.map +1 -0
  111. package/dist/domains/managed-work/human-messages.js +31 -0
  112. package/dist/domains/managed-work/human-messages.js.map +1 -0
  113. package/dist/domains/managed-work/input.js +29 -3
  114. package/dist/domains/managed-work/input.js.map +1 -1
  115. package/dist/domains/managed-work/journal.js +77 -3
  116. package/dist/domains/managed-work/journal.js.map +1 -1
  117. package/dist/domains/managed-work/lock.js +67 -1
  118. package/dist/domains/managed-work/lock.js.map +1 -1
  119. package/dist/domains/managed-work/notifications.js +0 -15
  120. package/dist/domains/managed-work/notifications.js.map +1 -1
  121. package/dist/domains/managed-work/pair-admission.js +108 -0
  122. package/dist/domains/managed-work/pair-admission.js.map +1 -0
  123. package/dist/domains/managed-work/prompts.js +257 -22
  124. package/dist/domains/managed-work/prompts.js.map +1 -1
  125. package/dist/domains/managed-work/redaction.js +90 -0
  126. package/dist/domains/managed-work/redaction.js.map +1 -0
  127. package/dist/domains/managed-work/review-convergence.js +41 -0
  128. package/dist/domains/managed-work/review-convergence.js.map +1 -0
  129. package/dist/domains/managed-work/review-facts.js +181 -0
  130. package/dist/domains/managed-work/review-facts.js.map +1 -0
  131. package/dist/domains/managed-work/rule-selection.js +84 -0
  132. package/dist/domains/managed-work/rule-selection.js.map +1 -0
  133. package/dist/domains/managed-work/runner.js +1967 -175
  134. package/dist/domains/managed-work/runner.js.map +1 -1
  135. package/dist/domains/managed-work/schemas.js +72 -2
  136. package/dist/domains/managed-work/schemas.js.map +1 -1
  137. package/dist/domains/managed-work/service.js +82 -13
  138. package/dist/domains/managed-work/service.js.map +1 -1
  139. package/dist/domains/managed-work/state.js +195 -5
  140. package/dist/domains/managed-work/state.js.map +1 -1
  141. package/dist/domains/managed-work/storage.js +66 -24
  142. package/dist/domains/managed-work/storage.js.map +1 -1
  143. package/dist/domains/managed-work/types.js +12 -9
  144. package/dist/domains/managed-work/types.js.map +1 -1
  145. package/dist/domains/managed-work/verification-categories.js +39 -0
  146. package/dist/domains/managed-work/verification-categories.js.map +1 -0
  147. package/dist/domains/managed-work/verification-policy.js +116 -0
  148. package/dist/domains/managed-work/verification-policy.js.map +1 -0
  149. package/dist/domains/managed-work/wait.js +21 -3
  150. package/dist/domains/managed-work/wait.js.map +1 -1
  151. package/dist/domains/managed-work/workspace-binding.js +133 -0
  152. package/dist/domains/managed-work/workspace-binding.js.map +1 -0
  153. package/dist/domains/sdd-readiness.js +44 -0
  154. package/dist/domains/sdd-readiness.js.map +1 -0
  155. package/dist/domains/skill/deploy.js +0 -6
  156. package/dist/domains/skill/deploy.js.map +1 -1
  157. package/dist/domains/skill/scripts.js +0 -8
  158. package/dist/domains/skill/scripts.js.map +1 -1
  159. package/dist/domains/state.js +1 -2
  160. package/dist/domains/state.js.map +1 -1
  161. package/dist/mcp/runtime-identity.js +21 -0
  162. package/dist/mcp/runtime-identity.js.map +1 -0
  163. package/dist/mcp/server.js +369 -0
  164. package/dist/mcp/server.js.map +1 -0
  165. package/dist/platform/agent-process.js +499 -38
  166. package/dist/platform/agent-process.js.map +1 -1
  167. package/dist/platform/executable.js +28 -0
  168. package/dist/platform/executable.js.map +1 -0
  169. package/dist/platform/paths.js +1 -17
  170. package/dist/platform/paths.js.map +1 -1
  171. package/dist/platform/process-tree.js +44 -0
  172. package/dist/platform/process-tree.js.map +1 -0
  173. package/dist/platform/process.js +1 -1
  174. package/dist/platform/process.js.map +1 -1
  175. package/package.json +16 -7
  176. package/scripts/check-design-principles.mjs +107 -0
  177. package/scripts/check-managed-work-design.mjs +507 -0
  178. package/scripts/clean-dist.js +9 -0
  179. package/scripts/ensure-bin-modes.js +11 -0
  180. package/dist/cli/index.js +0 -193
  181. package/dist/cli/index.js.map +0 -1
  182. package/dist/commands/archive.js +0 -6
  183. package/dist/commands/archive.js.map +0 -1
  184. package/dist/commands/clarify.js +0 -6
  185. package/dist/commands/clarify.js.map +0 -1
  186. package/dist/commands/design.js +0 -28
  187. package/dist/commands/design.js.map +0 -1
  188. package/dist/commands/docs.js +0 -6
  189. package/dist/commands/docs.js.map +0 -1
  190. package/dist/commands/doctor.js +0 -494
  191. package/dist/commands/doctor.js.map +0 -1
  192. package/dist/commands/implement.js +0 -6
  193. package/dist/commands/implement.js.map +0 -1
  194. package/dist/commands/init.js +0 -520
  195. package/dist/commands/init.js.map +0 -1
  196. package/dist/commands/pipeline.js +0 -6
  197. package/dist/commands/pipeline.js.map +0 -1
  198. package/dist/commands/scan.js +0 -63
  199. package/dist/commands/scan.js.map +0 -1
  200. package/dist/commands/status.js +0 -173
  201. package/dist/commands/status.js.map +0 -1
  202. package/dist/commands/uninstall.js +0 -214
  203. package/dist/commands/uninstall.js.map +0 -1
  204. package/dist/commands/update.js +0 -193
  205. package/dist/commands/update.js.map +0 -1
  206. package/dist/commands/verify.js +0 -6
  207. package/dist/commands/verify.js.map +0 -1
  208. package/dist/core/assets.js +0 -27
  209. package/dist/core/assets.js.map +0 -1
  210. package/dist/core/cli-help.js +0 -98
  211. package/dist/core/cli-help.js.map +0 -1
  212. package/dist/core/context.js +0 -123
  213. package/dist/core/context.js.map +0 -1
  214. package/dist/core/dependencies.js +0 -146
  215. package/dist/core/dependencies.js.map +0 -1
  216. package/dist/core/detect.js +0 -64
  217. package/dist/core/detect.js.map +0 -1
  218. package/dist/core/i18n.js +0 -105
  219. package/dist/core/i18n.js.map +0 -1
  220. package/dist/core/integrity.js +0 -46
  221. package/dist/core/integrity.js.map +0 -1
  222. package/dist/core/manifest.js +0 -21
  223. package/dist/core/manifest.js.map +0 -1
  224. package/dist/core/prompts.js +0 -20
  225. package/dist/core/prompts.js.map +0 -1
  226. package/dist/core/registry.js +0 -134
  227. package/dist/core/registry.js.map +0 -1
  228. package/dist/core/rules.js +0 -17
  229. package/dist/core/rules.js.map +0 -1
  230. package/dist/core/scripts.js +0 -48
  231. package/dist/core/scripts.js.map +0 -1
  232. package/dist/core/skill-check.js +0 -32
  233. package/dist/core/skill-check.js.map +0 -1
  234. package/dist/core/skills.js +0 -62
  235. package/dist/core/skills.js.map +0 -1
  236. package/dist/core/state.js +0 -54
  237. package/dist/core/state.js.map +0 -1
  238. package/dist/utils/path.js +0 -11
  239. package/dist/utils/path.js.map +0 -1
  240. package/dist/utils/shell.js +0 -29
  241. package/dist/utils/shell.js.map +0 -1
package/README.zh-CN.md CHANGED
@@ -27,7 +27,7 @@
27
27
 
28
28
  # SuperBridge Flow
29
29
 
30
- 通用 SDD 开发工作流 CLI,支持 Claude Code、Codex 和 OpenCode。
30
+ 通用 SDD 开发工作流 CLI,支持 Claude Code 和 Codex。
31
31
 
32
32
  SuperBridge Flow 不是简单“装两个工具”,而是把 OpenSpec/SDD 和
33
33
  Superpowers 编排成一个有状态的研发流程:前者负责需求、合同和验收口径,
@@ -38,13 +38,13 @@ CLI 会把 SuperBridge Flow 技能、配套 hook/command 脚本整合为单一 n
38
38
 
39
39
  - Claude Code:`~/.claude/skills/`、`~/.claude/scripts/`,并注册 `~/.claude/settings.json` hook
40
40
  - Codex:`~/.codex/skills/`、`~/.codex/hooks/`
41
- - OpenCode:`.opencode/skills/`、`.opencode/commands/`、`.opencode/scripts/`
42
- 或全局 `~/.config/opencode/`
43
41
 
44
42
  ## 亮点
45
43
 
46
- - **双 Agent 托管到真实交付。** 当前 Agent 负责监督,另一个 Agent 通过无交互 CLI
47
- 持续开发、启动和验证;评审整改复用原会话,最多 5 轮评审、7 次执行、12 次总调用。
44
+ - **双 Agent 托管到真实交付。** 当前 Host Agent 直接监督,另一个 Agent 在一次不限制工具
45
+ 轮数的 CLI 会话中持续开发、启动和验证,完成后主动返回结构化结果;只有评审整改、进程异常
46
+ 或人工恢复才创建后续会话。工作区与落盘 finding 负责交接,默认最多 5 轮评审、7 次执行、
47
+ 12 次总调用。
48
48
  状态和证据全部落盘,终端或网络中断后可恢复,最终停在等待 Git 批准。
49
49
  - **9 类翻车场景,沉淀成门禁。** 我们见过的 AI 翻车——需求一次吞、字段漏查消费者、SQL 漂移、mock-only 报告、跨服务只看到"能调"……9 种典型形态都被固化成 guard,AI 想跳过都不行。
50
50
  - **跨服务代码必须先答架构 6 问。** 涉及跨仓、跨服务、SDK、MQ、设备、回调、网关的改动,技术详设里必须先回答:owner 是谁、调用方向、新入口是否允许、禁止路径、证据锚点——答不全不让进入实现。
@@ -53,47 +53,78 @@ CLI 会把 SuperBridge Flow 技能、配套 hook/command 脚本整合为单一 n
53
53
  - **5 个阶段 × 5+ 门禁脚本硬阻断。** `superflow-guard.sh` + `superflow-hook-guard.sh` + `superflow-contract-hooks.sh` + `superflow-sql-sync-hook.py` + `superflow-test-report-lint.py` + `superflow-verify-integration.sh`。没有 handoff hash 不进实现,没有真实入口证据不写"通过"。
54
54
  - **用 handoff + state + sha256 治上下文漂移。** 长会话压缩、切 agent、并行 worktree——`.sdd/handoff/sdd-context.{md,json}` + sha256 + `.sdd/state.yaml` 让 Worker / Tester / Reviewer 始终基于同一份上下文,hash 对不上的旧 prompt 自动被 guard 拒绝。
55
55
  - **用户只说一句话,流水线跑 9 步。** 不用写复杂 prompt:`> 用 SuperFlow 处理这个需求` 触发 clarify → docs → design → implement → verify → archive。阶段推进、guard、hash、hook 全是流程强制,不靠用户自觉。
56
- - **`superflow check` 一键诊断文档缺口。** 对照 13 项必备 SDD 文件逐项核验,缺失即 exit 1。再也不会进了 implement 才发现 proposal 没写——check 在 docs 阶段就拦住你。
56
+ - **`superflow check` 分级诊断交付就绪度。** `files` 检查必备文件,`docs` 增加逐 Prompt 链接、多轮评审和复杂流程图检查,`coding-ready` 再执行环境预检及 docs/design/implement 全门禁,并生成绑定当前 handoff hash 的可编码凭证。
57
57
  - **`superflow config` 按需调整审查强度。** `--review-mode off|standard|thorough` 控制代码审查深度;`--auto-transition` 控制阶段自动流转。不同改动匹配不同强度,省 token 不省质量。
58
58
  - **启动自动检查新版本。** 每次执行 superflow 命令,后台静默对比 npm registry。发现新版本时 stderr 输出升级提示,不阻塞、不拖慢。
59
59
 
60
+ ## 托管交付:有上限的评审—整改闭环
61
+
62
+ ![有上限的评审闭环:任务或合同进入,评审把问题送回实现,只有通过才进入交付。](./assets/brand/managed-review-loop.png)
63
+
64
+ 你可以给 Superflow 一条简单开发任务,也可以给它一份冻结的 Superflow / SDD
65
+ 合同。对端 Agent 负责实现和验证;当前正在与你对话的 Host 负责审查工作区、门禁和证据。
66
+
67
+ ```text
68
+ 简单任务或冻结合同
69
+ ↓
70
+ 对端 Agent 实现并验证
71
+ ↓
72
+ 当前 Host 审查源码、门禁与证据
73
+ ├─ 未通过 → finding + 历史证据 → 对端 Agent 整改 ↺
74
+ └─ 通过 → 进入交付就绪状态 → 等待你决定 Git / 发布
75
+ ```
76
+
77
+ 这是一个刻意有上限的工程闭环,不是无人看管的 Agent 群:
78
+
79
+ - Host 只负责语义评审;对端只负责改源码和做验证,职责不混淆。
80
+ - 评审未通过时,系统会带着精确 finding 和已经有效的证据回到对端;它在当前工作区整改,不会拿一份空 Prompt 从头猜。
81
+ - 默认最多 5 轮 Host 评审、7 次对端调用、12 次总调用;账本让中断后的恢复可审计。
82
+ - 通过只表示满足冻结的交付合同,不表示“绝对无风险”;系统也绝不会自动提交、推送、部署或写生产。
83
+
84
+ 完整角色边界、状态流转与恢复规则见[托管交付闭环说明](./docs/managed-delivery-loop.md)。
85
+
60
86
  ## 工作流
61
87
 
62
88
  ```text
63
89
  docs -> design -> implement -> verify -> archive
64
90
  ```
65
91
 
66
- | 阶段 | 主责 | 产物 |
67
- |------|------|------|
68
- | `docs` | OpenSpec/SDD | 需求、接口、数据库、测试和验收合同 |
69
- | `design` | Superpowers | 源码级技术详设、影响面分析和 TDD 计划 |
92
+ | 阶段 | 主责 | 产物 |
93
+ | ----------- | ------------------------------ | -------------------------------------- |
94
+ | `docs` | OpenSpec/SDD | 需求、接口、数据库、测试和验收合同 |
95
+ | `design` | Superpowers | 源码级技术详设、影响面分析和 TDD 计划 |
70
96
  | `implement` | Superpowers + SuperBridge Flow | 分批任务 prompt、review 门禁和执行状态 |
71
- | `verify` | SuperBridge Flow hooks | 有证据的测试报告、真实入口和联调校验 |
72
- | `archive` | OpenSpec/SDD | 归档后的 spec 状态和生命周期闭环 |
97
+ | `verify` | SuperBridge Flow hooks | 有证据的测试报告、真实入口和联调校验 |
98
+ | `archive` | OpenSpec/SDD | 归档后的 spec 状态和生命周期闭环 |
73
99
 
74
100
  ## 安装
75
101
 
76
102
  ```bash
77
103
  npm install -g @chenmk/superflow
104
+ # 或本地源码:
105
+ # git clone https://github.com/.../superflow-cli && cd superflow-cli && bash install.sh
78
106
  ```
79
107
 
80
108
  完整安装、初始化和日常使用教程见 [INSTALL.md](./INSTALL.md)。
81
109
 
110
+ 从源码执行 `bash install.sh` 时,会检测本机已有的 Codex、Claude,并一次完成
111
+ CLI、Skills/Hooks 与对应托管 MCP 注册;安装后重启检测到的 Agent 即可。
112
+
113
+ > **💡 装完即全局生效,无需逐项目 init**:`npm install -g @chenmk/superflow`(或 `bash install.sh`)会自动把 superflow hooks 注册到 `~/.claude/settings.json`(全局),**本机上所有项目仓库**都获得 superflow 守门。钩子内部靠 `.sdd-enforced` 标记懒激活(没跑 `superflow clarify` 之前所有钩子静默放行,零干扰)。
114
+ >
115
+ > 只有需要项目级产物(OpenSpec change 目录 / `.sdd/` 任务文件 / 团队约定)时,才在项目根目录跑 `superflow init`。**绝大多数项目不需要这一步**——hooks 已经在全局生效了。
116
+
82
117
  ## 快速开始
83
118
 
119
+ > ⚠️ `superflow init` **通常不需要再跑**——参见上文「装完即全局生效」。下面这些命令只在你想加项目级产物或显式重置时使用。
120
+
84
121
  ```bash
85
- # 交互式选择 Claude Code / Codex / OpenCode(可多选)
122
+ # 交互式选择 Claude Code / Codex(可多选)
86
123
  superflow init
87
124
 
88
- # 非交互模式,默认同时安装 Claude Code + Codex
125
+ # 非交互模式,默认同时安装 Claude Code + Codex(默认 --scope global)
89
126
  superflow init --yes
90
127
 
91
- # 显式安装 OpenCode
92
- superflow init --agent opencode
93
-
94
- # 同时安装 Claude Code + Codex + OpenCode
95
- superflow init --agent all
96
-
97
128
  # 跳过 hook 注册(手工管理)
98
129
  superflow init --no-hooks
99
130
 
@@ -122,10 +153,78 @@ superflow init
122
153
 
123
154
  ```bash
124
155
  superflow pipeline "<prompt 路径、change 目录或任务>" --managed \
125
- --project "<项目根目录>"
156
+ --project "<项目根目录>" --supervisor current --executor peer
126
157
  ```
127
158
 
128
159
  语言会冻结进任务合同;执行 Prompt、评审、账本、报告、通知和恢复轮次保持一致。
160
+ 执行 Agent 每轮使用全新短会话;当前 Host Agent 直接评审,不再由后台启动第二个同名
161
+ CLI。首轮自动使用冻结任务 Prompt,后续每轮生成压缩交接包,因此旧会话或新会话均能从
162
+ 当前工作区、剩余任务和完整评审意见继续。任务提示 `external_supervisor_review_required`
163
+ 后,提交结构化评审并恢复:
164
+
165
+ ```bash
166
+ superflow pipeline --resume-task <任务编号> --submit-host-review <review.json>
167
+ ```
168
+
169
+ ### 在主 Agent 中直接交互(MCP,推荐)
170
+
171
+ 安装 Superflow 后,将本地 stdio MCP 注册到 Codex、Claude:
172
+
173
+ ```bash
174
+ superflow mcp install --agent both
175
+ ```
176
+
177
+ 重启主 Agent 会话后,用户继续直接与当前 Codex/Claude 对话。主 Agent 通过 MCP
178
+ 创建和监督任务,Superflow 后台只启动对端研发 Agent:
179
+
180
+ - `superflow_managed_start`:冻结任务并启动研发执行;固定为 `external_host`。
181
+ - `superflow_managed_status` / `superflow_managed_list`:读取状态、调用账本和证据。
182
+ - `superflow_managed_wait`:默认用 240 秒兼容传输窗口,支持长调用的 Host 可显式提高到
183
+ 12 小时;窗口超时只按 `latestSequence` 紧凑续接。活动请求用标准 MCP progress
184
+ notification 展示健康进度,连续两个无有效里程碑才返回语义监督。
185
+ - `superflow_managed_message`:把用户补充、环境授权和澄清写入当前运行边界或下一轮交接。
186
+ - `superflow_managed_authorize_executor`:冻结任务级仓库范围和源码处理授权,不绕过宿主 DLP。
187
+ - `superflow_managed_pause` / `superflow_managed_resume`:中断当前研发 Agent、持久化暂停并恢复。
188
+ - `superflow_managed_submit_review`:当前主 Agent 一次性提交全量结构化评审。
189
+ - `superflow_managed_record_validation`:记录环境/发布证据并重算三段交付状态。
190
+
191
+ MCP 模式禁止启动嵌套 Supervisor CLI。当前主 Agent 的对话、监督和评审不计入
192
+ Superflow 后台 Agent 调用;只有研发 Agent 的真实调用计入执行预算。任务通过后按实际
193
+ 进度进入 `environment_validation_blocked`、`local_delivery_ready` 或 `release_ready`,
194
+ MCP 不自动 commit、push、部署或写生产环境。
195
+
196
+ 托管默认使用三层止损:同类机械交付错误只自动整改一次、累计最多两次自动整改后转当前
197
+ Host;累计 200 万 Token 单位后停止下一次调用;单轮出现 3 次及以上权限拒绝时直接交由
198
+ Host 判断。不同模型供应商的美元计价不可比,因此默认不使用美元预算熔断,也不向 Claude
199
+ 传 `--max-budget-usd`。changedFiles、基础 taskEvidence 和验证类别由 Runner 根据工作区与
200
+ 真实命令补全,不再消耗完整研发轮次修 JSON 格式。
201
+
202
+ Claude Executor 默认不传 `--max-turns` 或 `--max-budget-usd`,不会因为固定工具步数或不准确
203
+ 的美元估值拆断正常研发。默认连续 60 分钟完全无输出或单次执行达到 2 小时才终止进程;
204
+ 连续供应商错误、Token/调用预算、安全边界和用户暂停仍会止损。启动前会把可安全发现的
205
+ Java、Maven、Node 和 npm 可执行路径写入执行策略,减少研发 Agent 重复寻找环境。
206
+ 为避免 1M 上下文在数百工具轮次中持续放大输入 Token,Claude Executor 默认按 200K 有效
207
+ 窗口、70% 阈值提前自动压缩;用户显式 Claude 环境配置优先,压缩后会重读冻结 Prompt 和
208
+ handoff。
209
+
210
+ 检查或移除配置:
211
+
212
+ ```bash
213
+ superflow mcp status --agent both
214
+ superflow mcp remove --agent both
215
+ ```
216
+
217
+ MCP 是主 Agent 与本地托管状态机的通信通道,不会把 Superflow 变成第三个模型。
218
+ 已有任务 Prompt 使用完整合同;直接输入普通工程需求时自动生成标准执行合同;一句简单
219
+ 需求也会先生成最小实现与验证任务,不会以空任务清单直接启动研发 Agent。
220
+ 宿主仍可能对外部研发 Agent 的模型供应商执行数据披露策略;本机完全访问权限与供应商
221
+ 信任是两类独立门禁。
222
+
223
+ 设计与实战证据:
224
+
225
+ - [跨 Agent 托管实现方案](docs/cross-agent-development-implementation-plan.md)
226
+ - [托管功能设计原则](docs/managed-work-design-principles.md)
227
+ - [托管 Agent 通信协议](docs/managed-agent-protocol.md)
129
228
 
130
229
  ## SDD 分工
131
230
 
@@ -138,31 +237,31 @@ superflow pipeline "<prompt 路径、change 目录或任务>" --managed \
138
237
 
139
238
  ## 命令
140
239
 
141
- | 命令 | 说明 |
142
- |------|------|
143
- | `superflow init` | 一站式安装;交互终端中可多选 Claude Code / Codex / OpenCode |
144
- | `superflow init --yes` | 非交互安装,默认 `--agent both` |
145
- | `superflow init --agent opencode` | 安装 OpenCode skills、commands、scripts 和 rules |
146
- | `superflow init --agent all` | 同时安装 Claude Code + Codex + OpenCode |
147
- | `superflow init --dry-run` | 只打印计划不执行 |
148
- | `superflow init --resume` | 从失败步骤继续 |
149
- | `superflow init --no-hooks` | 只装技能 + 脚本,跳过 Codex/Claude hook 注册 |
150
- | `superflow init --no-openspec-init` | 跳过当前项目 OpenSpec 原生初始化 |
151
- | `superflow doctor` | 诊断 CLI / 第三方 / 脚本 / skills |
152
- | `superflow doctor --agent codex` | 只诊断 Codex 侧 |
153
- | `superflow --language en --help` | 查看英文 CLI help |
154
- | `superflow scan --language en` | 重新生成英文项目上下文模板 |
155
- | `superflow clarify [feature]` | 校验 SuperBridge Flow clarify 阶段技能部署 |
156
- | `superflow docs [change]` | 校验 SuperBridge Flow docs 阶段技能部署 |
157
- | `superflow design [change]` | 校验 SuperBridge Flow design 阶段技能部署 |
158
- | `superflow implement [task]` | 校验 SuperBridge Flow implement 阶段技能部署 |
159
- | `superflow pipeline` | 校验 SuperBridge Flow pipeline 阶段技能部署 |
160
- | `superflow pipeline "<任务>" --managed --project <目录>` | 双 Agent 托管开发并等待交付终态 |
161
- | `superflow check <change>` | 对照 13 项必备文件清单检查文档完整性 |
162
- | `superflow config <change> --review-mode <mode>` | 设置代码审查强度(off/standard/thorough) |
163
- | `superflow config <change> --auto-transition <bool>` | 控制阶段自动流转(true/false) |
164
- | `superflow status` | 展示所有 active change 的阶段、任务、文档缺口 |
165
- | `superflow update --with-package` | 更新 superflow 自身和 openspec/superpowers 依赖 |
240
+ | 命令 | 说明 |
241
+ | ------------------------------------------------------------ | ----------------------------------------------------------- |
242
+ | `superflow init` | 一站式安装;交互终端中可多选 Claude Code / Codex |
243
+ | `superflow init --yes` | 非交互安装,默认 `--agent both` |
244
+ | `superflow init --dry-run` | 只打印计划不执行 |
245
+ | `superflow init --resume` | 从失败步骤继续 |
246
+ | `superflow init --no-hooks` | 只装技能 + 脚本,跳过 Codex/Claude hook 注册 |
247
+ | `superflow init --no-openspec-init` | 跳过当前项目 OpenSpec 原生初始化 |
248
+ | `superflow doctor` | 诊断 CLI / MCP / 第三方 / 脚本 / skills |
249
+ | `superflow doctor --agent codex` | 只诊断 Codex 侧 |
250
+ | `superflow doctor --agent both --language en` | 英文诊断 Codex、Claude 与 MCP 路径 |
251
+ | `superflow --language en --help` | 查看英文 CLI help |
252
+ | `superflow scan --language en` | 重新生成英文项目上下文模板 |
253
+ | `superflow clarify [feature]` | 校验 SuperBridge Flow clarify 阶段技能部署 |
254
+ | `superflow docs [change]` | 执行 docs 门禁并校验阶段技能 |
255
+ | `superflow design [change]` | 校验 SuperBridge Flow design 阶段技能部署 |
256
+ | `superflow implement [change]` | 生成当前 Coding Ready 凭证后进入实现阶段 |
257
+ | `superflow pipeline` | 校验 SuperBridge Flow pipeline 阶段技能部署 |
258
+ | `superflow pipeline "<任务>" --managed --project <目录>` | 执行 Agent 短会话开发,当前 Host Agent 直接评审 |
259
+ | `superflow check <change> --level files\|docs\|coding-ready` | 分级检查文件、文档交付或可直接编码就绪度 |
260
+ | `superflow config <change> --review-mode <mode>` | 设置代码审查强度(off/standard/thorough) |
261
+ | `superflow config <change> --auto-transition <bool>` | 控制阶段自动流转(true/false) |
262
+ | `superflow status` | 展示所有 active change 的阶段、任务、文档缺口 |
263
+ | `superflow eval <taskPath> [--json]` | 离线统计托管质量、调用、Token、缓存与耗时 |
264
+ | `superflow update --with-package` | 更新 superflow 自身和 openspec/superpowers 依赖 |
166
265
 
167
266
  ## 系统支持
168
267
 
@@ -170,15 +269,17 @@ superflow pipeline "<prompt 路径、change 目录或任务>" --managed \
170
269
  - Linux(Ubuntu 20.04+ / 其它主流发行版)
171
270
  - Windows 10+(CLI 本体支持;hook 脚本需要 Git Bash 或兼容 shell)
172
271
 
272
+ 托管运行时会在 Windows 解析 Agent 的 `.exe/.cmd/.bat` shim,并在暂停或超时时终止完整
273
+ Agent 进程树;macOS/Linux 继续使用独立进程组。三端均不通过通用 shell 拼接启动命令。
274
+
173
275
  ## 依赖
174
276
 
175
277
  - Node.js 20+
176
- - Claude Code、Codex 或 OpenCode(按 `--agent` 选择)
278
+ - Claude Code、Codex(按 `--agent` 选择)
177
279
  - 第三方(`superflow init` 自动装):
178
280
  - openspec CLI(硬依赖,npm 全局)并在当前项目执行 `openspec init --tools ...`
179
281
  - superpowers(Claude Code / Codex 为硬依赖;Codex 自动安装官方
180
- `superpowers@openai-api-curated`,确保包含验证、代码评审和分支收尾三个强制技能;
181
- OpenCode 侧通过已部署 skills/commands 使用流程)
282
+ `superpowers@openai-api-curated`,确保包含验证、代码评审和分支收尾三个强制技能)
182
283
  - understand-anything(尽力安装,失败只警告)
183
284
  - api-doc-changelog(辅助 skill,复制到目标 agent skills 目录)
184
285
 
@@ -188,7 +289,7 @@ superflow pipeline "<prompt 路径、change 目录或任务>" --managed \
188
289
 
189
290
  - `@chenmk/superflow`
190
291
  - `@fission-ai/openspec`
191
- - Claude Code / Codex 的 Superpowers 插件;OpenCode 侧的 SuperBridge Flow assets
292
+ - Claude Code / Codex 的 Superpowers 插件
192
293
 
193
294
  推荐策略是“自动检查,手动更新”:默认只提示,不自动安装;执行
194
295
  `superflow update --with-package` 才会统一更新。
@@ -201,13 +302,17 @@ export SUPERFLOW_AUTO_UPDATE=check
201
302
  # 关闭自动检查
202
303
  export SUPERFLOW_AUTO_UPDATE=0
203
304
 
204
- # 个人机器可选:检查到新版本后自动安装
305
+ # 个人机器可选:检查到新版本后完整更新包、Skills、Hooks、规则、脚本和托管 MCP
205
306
  export SUPERFLOW_AUTO_UPDATE=apply
206
307
 
207
308
  # 调整最小检查间隔,默认 21600 秒(6 小时)
208
309
  export SUPERFLOW_UPDATE_MIN_INTERVAL_SECONDS=21600
209
310
  ```
210
311
 
312
+ `apply` 会在包升级后重新进入新版本 CLI,统一刷新所有已检测到的 Agent 资产和 MCP 注册。
313
+ 任一步失败都会保留日志和下次会话重试资格,不会把半升级状态标记为成功。升级完成后需要
314
+ 重启 Agent,旧会话不会热加载新的 MCP 运行时。
315
+
211
316
  ## Star History
212
317
 
213
318
  下图由 Star History 根据 GitHub 公开 star 数据动态生成。仓库保持 private
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "0.1.2",
3
- "agents": ["claude", "codex", "opencode"],
3
+ "agents": ["claude", "codex"],
4
4
  "skills": [
5
5
  "openspec-apply-change",
6
6
  "openspec-archive-change",
@@ -13,6 +13,7 @@
13
13
  "superflow-hotfix",
14
14
  "superflow-implement",
15
15
  "superflow-pipeline",
16
+ "superflow-requirement-review",
16
17
  "superflow-table-impact-analysis",
17
18
  "superflow-tweak",
18
19
  "superflow-verify"
@@ -30,14 +31,19 @@
30
31
  "superflow-archive-command-hook.sh",
31
32
  "superflow-test-report-lint.py",
32
33
  "superflow-managed-work-check.mjs",
34
+ "superflow-document-audit.mjs",
35
+ "superflow-environment-preflight.mjs",
36
+ "superflow-coding-ready.mjs",
37
+ "superflow-managed-executor-preflight.mjs",
38
+ "superflow-managed-owner-verification.sh",
39
+ "superflow-managed-command-guard.py",
33
40
  "superflow-managed-work-guard.sh",
34
41
  "install-sql-pre-commit.sh",
35
42
  "sync-settings-json.py"
36
43
  ],
37
44
  "agentScripts": {
38
45
  "claude": ["claude-auto-backup-hook.sh"],
39
- "codex": ["codex-auto-backup-hook.sh"],
40
- "opencode": []
46
+ "codex": ["codex-auto-backup-hook.sh"]
41
47
  },
42
48
  "hooks": [
43
49
  "superflow-enforce-hook.sh",
@@ -52,7 +58,6 @@
52
58
  ],
53
59
  "agentHooks": {
54
60
  "claude": ["claude-auto-backup-hook.sh"],
55
- "codex": ["codex-auto-backup-hook.sh"],
56
- "opencode": []
61
+ "codex": ["codex-auto-backup-hook.sh"]
57
62
  }
58
63
  }
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { spawnSync } from "node:child_process";
4
+ import fs from "node:fs";
5
+ import os from "node:os";
6
+ import path from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+
9
+ const args = process.argv.slice(2);
10
+ const changeArg = args.find((arg) => !arg.startsWith("--"));
11
+ const jsonOutput = args.includes("--json");
12
+
13
+ if (!changeArg) {
14
+ fail(["用法: superflow-coding-ready.mjs <change-dir> [--json]"]);
15
+ }
16
+
17
+ const changeDir = fs.realpathSync(path.resolve(changeArg));
18
+ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
19
+ const pipelineScripts = resolvePipelineScripts(scriptDir);
20
+ const checks = [
21
+ ["YAML 状态", "bash", [path.join(pipelineScripts, "superflow-yaml-validate.sh"), changeDir]],
22
+ ["docs 门禁", "bash", [path.join(pipelineScripts, "superflow-guard.sh"), changeDir, "docs"]],
23
+ ["design 门禁", "bash", [path.join(pipelineScripts, "superflow-guard.sh"), changeDir, "design"]],
24
+ ["implement 门禁", "bash", [path.join(pipelineScripts, "superflow-guard.sh"), changeDir, "implement"]],
25
+ ["文档交付审计", process.execPath, [path.join(scriptDir, "superflow-document-audit.mjs"), changeDir, "--json"]],
26
+ ["环境预检", process.execPath, [path.join(scriptDir, "superflow-environment-preflight.mjs"), changeDir, "--json"]],
27
+ ];
28
+ const issues = [];
29
+ const evidence = [];
30
+
31
+ for (const [label, command, commandArgs] of checks) {
32
+ const result = spawnSync(command, commandArgs, {
33
+ cwd: projectRoot(changeDir),
34
+ encoding: "utf-8",
35
+ env: { ...process.env, SUPERFLOW_CODING_READY: "1" },
36
+ });
37
+ evidence.push({ label, exitCode: result.status ?? 1 });
38
+ if (result.status !== 0) {
39
+ issues.push(`${label}失败:${tail(result.stderr || result.stdout)}`);
40
+ }
41
+ }
42
+
43
+ const openspec = spawnSync("openspec", ["validate", path.basename(changeDir), "--strict"], {
44
+ cwd: projectRoot(changeDir),
45
+ encoding: "utf-8",
46
+ });
47
+ evidence.push({ label: "OpenSpec strict", exitCode: openspec.status ?? 1 });
48
+ if (openspec.status !== 0) {
49
+ issues.push(`OpenSpec strict 失败:${tail(openspec.stderr || openspec.stdout)}`);
50
+ }
51
+
52
+ const handoffHash = readHandoffHash(changeDir, issues);
53
+ const reviewRounds = readReviewRounds(changeDir);
54
+ const receipt = {
55
+ schemaVersion: "superflow.coding-ready.v1",
56
+ codingReady: issues.length === 0,
57
+ documentReadiness: issues.length === 0 ? "READY" : "BLOCKED",
58
+ environmentReadiness: issues.length === 0 ? "READY" : "BLOCKED",
59
+ reviewRounds,
60
+ handoffHash,
61
+ checkedAt: new Date().toISOString(),
62
+ evidence,
63
+ ownerDecisions: 0,
64
+ issues,
65
+ };
66
+
67
+ if (issues.length > 0) fail(issues, receipt);
68
+
69
+ const receiptDir = path.join(changeDir, ".sdd", "readiness");
70
+ fs.mkdirSync(receiptDir, { recursive: true });
71
+ const target = path.join(receiptDir, "coding-ready.json");
72
+ const temporary = path.join(receiptDir, `.coding-ready-${process.pid}-${Date.now()}.tmp`);
73
+ fs.writeFileSync(temporary, `${JSON.stringify(receipt, null, 2)}\n`, { mode: 0o600 });
74
+ fs.renameSync(temporary, target);
75
+
76
+ if (jsonOutput) {
77
+ process.stdout.write(`${JSON.stringify(receipt, null, 2)}\n`);
78
+ } else {
79
+ process.stdout.write(`Coding Ready 通过,凭证已写入 ${target}\n`);
80
+ }
81
+
82
+ function resolvePipelineScripts(currentScriptDir) {
83
+ const candidates = [
84
+ path.resolve(currentScriptDir, "..", "skills", "superflow-pipeline", "scripts"),
85
+ path.join(os.homedir(), ".codex", "skills", "superflow-pipeline", "scripts"),
86
+ path.join(os.homedir(), ".claude", "skills", "superflow-pipeline", "scripts"),
87
+ ];
88
+ const found = candidates.find((candidate) =>
89
+ fs.existsSync(path.join(candidate, "superflow-guard.sh")),
90
+ );
91
+ if (!found) {
92
+ fail(["找不到 superflow-pipeline 门禁脚本,请先执行 superflow update"]);
93
+ }
94
+ return found;
95
+ }
96
+
97
+ function projectRoot(root) {
98
+ return path.resolve(root, "..", "..", "..");
99
+ }
100
+
101
+ function readHandoffHash(root, targetIssues) {
102
+ const file = path.join(root, ".sdd", "handoff", "sdd-context.sha256");
103
+ const content = fs.existsSync(file) ? fs.readFileSync(file, "utf-8") : "";
104
+ const match = content.match(/[a-f0-9]{64}/i);
105
+ if (!match) {
106
+ targetIssues.push("缺少合法的当前 handoff hash");
107
+ return "";
108
+ }
109
+ return match[0].toLowerCase();
110
+ }
111
+
112
+ function readReviewRounds(root) {
113
+ const file = path.join(root, ".sdd", "reviews", "document-review.json");
114
+ try {
115
+ const review = JSON.parse(fs.readFileSync(file, "utf-8"));
116
+ return Array.isArray(review.rounds) ? review.rounds.length : 0;
117
+ } catch {
118
+ return 0;
119
+ }
120
+ }
121
+
122
+ function tail(value) {
123
+ return String(value).trim().split("\n").slice(-4).join(" | ").slice(0, 800);
124
+ }
125
+
126
+ function fail(targetIssues, receipt = { codingReady: false, issues: targetIssues }) {
127
+ if (jsonOutput) {
128
+ process.stderr.write(`${JSON.stringify(receipt, null, 2)}\n`);
129
+ } else {
130
+ process.stderr.write(
131
+ `Coding Ready 未通过:\n${targetIssues.map((item) => `- ${item}`).join("\n")}\n`,
132
+ );
133
+ }
134
+ process.exit(1);
135
+ }
@@ -24,6 +24,22 @@ fi
24
24
  STATE_DIR="${XDG_STATE_HOME:-$HOME/.local/state}/superflow"
25
25
  mkdir -p "$STATE_DIR" 2>/dev/null || exit 0
26
26
 
27
+ LANGUAGE="${SUPERFLOW_LANG:-}"
28
+ if [ -z "$LANGUAGE" ] && [ -f "$HOME/.sdd-state.json" ]; then
29
+ LANGUAGE=$(python3 -c '
30
+ import json, os
31
+ try:
32
+ with open(os.path.expanduser("~/.sdd-state.json"), encoding="utf-8") as f:
33
+ print((json.load(f).get("language") or "").strip())
34
+ except Exception:
35
+ pass
36
+ ' 2>/dev/null)
37
+ fi
38
+ case "${LANGUAGE%%_*}" in
39
+ en|en-*) LANGUAGE="en" ;;
40
+ *) LANGUAGE="zh" ;;
41
+ esac
42
+
27
43
  SESSION_KEY=$(printf '%s' "$INPUT" | python3 -c '
28
44
  import hashlib, json, os, sys
29
45
  raw = sys.stdin.read()
@@ -111,15 +127,49 @@ if version:
111
127
  update_npm_if_needed() {
112
128
  local package_name="$1"
113
129
  local current latest
114
- command -v npm >/dev/null 2>&1 || return 0
130
+ command -v npm >/dev/null 2>&1 || return 1
115
131
  latest="$(latest_npm_version "$package_name")"
116
- [ -n "$latest" ] || return 0
132
+ if [ -z "$latest" ]; then
133
+ if [ "$LANGUAGE" = "en" ]; then
134
+ printf '\n[%s] Cannot confirm the latest version of %s\n' \
135
+ "$(date '+%Y-%m-%d %H:%M:%S')" "$package_name" \
136
+ >> "$LOG_FILE" 2>/dev/null || true
137
+ else
138
+ printf '\n[%s] 无法确认 %s 的最新版本\n' \
139
+ "$(date '+%Y-%m-%d %H:%M:%S')" "$package_name" \
140
+ >> "$LOG_FILE" 2>/dev/null || true
141
+ fi
142
+ return 1
143
+ fi
117
144
  current="$(installed_npm_version "$package_name")"
118
145
  if [ "$current" != "$latest" ]; then
119
- run_logged npm install -g "$package_name@latest" || true
146
+ run_logged npm install -g "$package_name@latest"
120
147
  fi
121
148
  }
122
149
 
150
+ detected_agents() {
151
+ local agents=""
152
+ command -v codex >/dev/null 2>&1 && agents="codex"
153
+ if command -v claude >/dev/null 2>&1; then
154
+ agents="${agents:+$agents,}claude"
155
+ fi
156
+ printf '%s' "$agents"
157
+ }
158
+
159
+ refresh_superflow_installation() {
160
+ local agents="$1"
161
+ [ -n "$agents" ] || return 1
162
+ if command -v superflow >/dev/null 2>&1; then
163
+ run_logged superflow update --agent "$agents" --scope global
164
+ return $?
165
+ fi
166
+ local npm_root cli
167
+ npm_root="$(npm root -g 2>/dev/null)" || return 1
168
+ cli="$npm_root/@chenmk/superflow/dist/app/cli.js"
169
+ [ -f "$cli" ] || return 1
170
+ run_logged node "$cli" update --agent "$agents" --scope global
171
+ }
172
+
123
173
  check_npm_package() {
124
174
  local package_name="$1"
125
175
  local current latest
@@ -135,15 +185,34 @@ check_npm_package() {
135
185
  }
136
186
 
137
187
  if [ "$MODE" = "apply" ]; then
138
- update_npm_if_needed "@chenmk/superflow"
139
- update_npm_if_needed "@fission-ai/openspec"
188
+ APPLY_FAILED=0
189
+ update_npm_if_needed "@chenmk/superflow" || APPLY_FAILED=1
190
+ update_npm_if_needed "@fission-ai/openspec" || APPLY_FAILED=1
140
191
 
141
192
  if command -v claude >/dev/null 2>&1; then
142
- run_logged claude plugin install superpowers@superpowers-marketplace || true
193
+ run_logged claude plugin install superpowers@superpowers-marketplace || APPLY_FAILED=1
143
194
  fi
144
195
 
145
196
  if command -v codex >/dev/null 2>&1; then
146
- run_logged codex plugin add superpowers@openai-api-curated || true
197
+ run_logged codex plugin add superpowers@openai-api-curated || APPLY_FAILED=1
198
+ fi
199
+
200
+ AGENT_VALUE="$(detected_agents)"
201
+ refresh_superflow_installation "$AGENT_VALUE" || APPLY_FAILED=1
202
+
203
+ if [ "$APPLY_FAILED" -ne 0 ]; then
204
+ rm -f "$STAMP" "$GLOBAL_STAMP" 2>/dev/null || true
205
+ if [ "$LANGUAGE" = "en" ]; then
206
+ printf '[Superflow] Automatic update was incomplete and remains retryable; details: %s\n' "$LOG_FILE" >&2
207
+ else
208
+ printf '[Superflow] 自动升级未完整完成,已保留重试资格;详情:%s\n' "$LOG_FILE" >&2
209
+ fi
210
+ else
211
+ if [ "$LANGUAGE" = "en" ]; then
212
+ printf '[Superflow] Automatic update refreshed CLI, dependencies, Skills, Hooks, rules, and managed MCP; restart the Agent to load the new runtime.\n' >&2
213
+ else
214
+ printf '[Superflow] 自动升级已完整更新 CLI、依赖、Skills、Hooks、规则和托管 MCP;请重启 Agent 加载新运行时。\n' >&2
215
+ fi
147
216
  fi
148
217
  else
149
218
  STATUS_FILE="$STATE_DIR/dependency-update-status.txt"
@@ -154,7 +223,11 @@ else
154
223
  printf 'superpowers=run superflow update --with-package to refresh selected agent plugins\n'
155
224
  } > "$STATUS_FILE" 2>/dev/null || true
156
225
  if grep -Eq '^@' "$STATUS_FILE" 2>/dev/null; then
157
- printf '[Superflow] 有核心依赖更新,执行 superflow update --with-package 统一更新;详情:%s\n' "$STATUS_FILE" >&2
226
+ if [ "$LANGUAGE" = "en" ]; then
227
+ printf '[Superflow] Core dependency updates are available. Run superflow update --with-package; details: %s\n' "$STATUS_FILE" >&2
228
+ else
229
+ printf '[Superflow] 有核心依赖更新,执行 superflow update --with-package 统一更新;详情:%s\n' "$STATUS_FILE" >&2
230
+ fi
158
231
  fi
159
232
  fi
160
233