principles-disciple 1.72.0 → 1.74.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 (319) hide show
  1. package/INSTALL.md +1 -3
  2. package/openclaw.plugin.json +10 -5
  3. package/package.json +17 -19
  4. package/scripts/acceptance-test.mjs +16 -73
  5. package/scripts/sync-plugin.mjs +382 -77
  6. package/src/commands/archive-impl.ts +2 -1
  7. package/src/commands/capabilities.ts +2 -2
  8. package/src/commands/context.ts +2 -2
  9. package/src/commands/disable-impl.ts +2 -1
  10. package/src/commands/evolution-status.ts +16 -16
  11. package/src/commands/export.ts +12 -67
  12. package/src/commands/pain.ts +91 -1
  13. package/src/commands/principle-rollback.ts +2 -1
  14. package/src/commands/promote-impl.ts +7 -43
  15. package/src/commands/rollback-impl.ts +2 -1
  16. package/src/commands/rollback.ts +2 -1
  17. package/src/commands/samples.ts +2 -1
  18. package/src/commands/thinking-os.ts +2 -1
  19. package/src/config/errors.ts +18 -2
  20. package/src/constants/diagnostician.ts +2 -2
  21. package/src/constants/tools.ts +2 -1
  22. package/src/core/__tests__/focus-history.test.ts +210 -0
  23. package/src/core/config.ts +1 -1
  24. package/src/core/correction-cue-learner.ts +2 -136
  25. package/src/core/correction-types.ts +16 -88
  26. package/src/core/dictionary.ts +19 -20
  27. package/src/core/empathy-keyword-matcher.ts +17 -289
  28. package/src/core/empathy-types.ts +18 -229
  29. package/src/core/event-log.ts +29 -132
  30. package/src/core/evolution-reducer.ts +21 -2
  31. package/src/core/evolution-types.ts +76 -464
  32. package/src/core/file-store.ts +80 -0
  33. package/src/core/focus-history.ts +228 -955
  34. package/src/core/local-worker-routing.ts +34 -314
  35. package/src/core/merge-gate-audit.ts +0 -195
  36. package/src/core/migration.ts +0 -1
  37. package/src/core/pain-diagnostic-gate.ts +154 -0
  38. package/src/core/pain-signal.ts +21 -138
  39. package/src/core/pain.ts +15 -88
  40. package/src/core/path-resolver.ts +0 -1
  41. package/src/core/paths.ts +0 -1
  42. package/src/core/pd-task-reconciler.ts +26 -115
  43. package/src/core/pd-task-service.ts +9 -9
  44. package/src/core/pd-task-types.ts +23 -127
  45. package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +174 -0
  46. package/src/core/principle-compiler/code-validator.ts +15 -42
  47. package/src/core/principle-compiler/compiler.ts +100 -15
  48. package/src/core/principle-compiler/index.ts +5 -2
  49. package/src/core/principle-compiler/template-generator.ts +4 -104
  50. package/src/core/principle-injection.ts +10 -202
  51. package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +42 -0
  52. package/src/core/principle-internalization/lifecycle-read-model.ts +39 -242
  53. package/src/core/principle-internalization/principle-lifecycle-service.ts +12 -10
  54. package/src/core/principle-tree-ledger-adapter.ts +145 -0
  55. package/src/core/principle-tree-ledger.ts +8 -6
  56. package/src/core/reflection/reflection-context.ts +14 -109
  57. package/src/core/replay-engine.ts +8 -500
  58. package/src/core/rule-host-helpers.ts +5 -35
  59. package/src/core/rule-host-types.ts +10 -82
  60. package/src/core/rule-host.ts +6 -63
  61. package/src/core/runtime-v2-prompt-activation-reader.ts +231 -0
  62. package/src/core/session-tracker.ts +87 -101
  63. package/src/core/shadow-observation-registry.ts +19 -48
  64. package/src/core/trajectory.ts +3 -1
  65. package/src/core/workflow-funnel-loader.ts +62 -68
  66. package/src/core/workspace-context.ts +46 -0
  67. package/src/core/workspace-dir-service.ts +1 -1
  68. package/src/core/workspace-dir-validation.ts +18 -9
  69. package/src/hooks/AGENTS.md +1 -1
  70. package/src/hooks/gate-block-helper.ts +71 -64
  71. package/src/hooks/gate.ts +183 -31
  72. package/src/hooks/lifecycle.ts +30 -32
  73. package/src/hooks/llm.ts +60 -32
  74. package/src/hooks/pain.ts +297 -103
  75. package/src/hooks/prompt.ts +400 -440
  76. package/src/hooks/subagent.ts +2 -29
  77. package/src/i18n/commands.ts +2 -10
  78. package/src/index.ts +95 -85
  79. package/src/openclaw-sdk.ts +311 -0
  80. package/src/service/central-database.ts +8 -4
  81. package/src/service/evolution-queue-migration.ts +2 -1
  82. package/src/service/evolution-worker.ts +163 -1786
  83. package/src/service/internalization-trigger-adapter.ts +302 -0
  84. package/src/service/keyword-optimization-service.ts +4 -4
  85. package/src/service/monitoring-query-service.ts +1 -215
  86. package/src/service/queue-io.ts +60 -331
  87. package/src/service/runtime-summary-service.ts +59 -16
  88. package/src/service/subagent-workflow/index.ts +0 -41
  89. package/src/service/subagent-workflow/types.ts +9 -120
  90. package/src/service/subagent-workflow/workflow-store.ts +2 -119
  91. package/src/service/workflow-watchdog.ts +0 -43
  92. package/src/types/event-payload.ts +16 -74
  93. package/src/types/event-types.ts +38 -547
  94. package/src/types/hygiene-types.ts +7 -30
  95. package/src/types/principle-tree-schema.ts +20 -222
  96. package/src/types/queue.ts +15 -70
  97. package/src/types/runtime-summary.ts +5 -49
  98. package/src/utils/io.ts +8 -20
  99. package/src/utils/retry.ts +1 -1
  100. package/src/utils/shadow-fingerprint.ts +2 -2
  101. package/src/utils/workspace-resolver.ts +50 -0
  102. package/templates/langs/en/core/AGENTS.md +7 -7
  103. package/templates/langs/en/core/BOOT.md +1 -1
  104. package/templates/langs/en/core/HEARTBEAT.md +2 -2
  105. package/templates/langs/en/principles/THINKING_OS.md +3 -2
  106. package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
  107. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
  108. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
  109. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
  110. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
  111. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
  112. package/templates/langs/en/skills/evolve-task/SKILL.md +3 -3
  113. package/templates/langs/en/skills/pd-cli-operator/SKILL.md +67 -0
  114. package/templates/langs/en/skills/pd-diagnostician/SKILL.md +1 -1
  115. package/templates/langs/en/skills/pd-mentor/SKILL.md +2 -3
  116. package/templates/langs/en/skills/pd-pain-signal/SKILL.md +17 -39
  117. package/templates/langs/en/skills/pd-runtime-v2/SKILL.md +61 -0
  118. package/templates/langs/zh/core/AGENTS.md +7 -7
  119. package/templates/langs/zh/core/BOOT.md +1 -1
  120. package/templates/langs/zh/core/HEARTBEAT.md +2 -2
  121. package/templates/langs/zh/principles/THINKING_OS.md +3 -2
  122. package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
  123. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
  124. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
  125. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/nocturnal-trinity-quality-enhancement.json +8 -8
  126. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
  127. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
  128. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
  129. package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +21 -5
  130. package/templates/langs/zh/skills/evolve-task/SKILL.md +4 -4
  131. package/templates/langs/zh/skills/pd-cli-operator/SKILL.md +67 -0
  132. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +1 -1
  133. package/templates/langs/zh/skills/pd-mentor/SKILL.md +2 -3
  134. package/templates/langs/zh/skills/pd-pain-signal/SKILL.md +17 -38
  135. package/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +61 -0
  136. package/tests/build-artifacts.test.ts +1 -3
  137. package/tests/commands/evolution-status.test.ts +0 -118
  138. package/tests/core/bootstrap-rules.test.ts +1 -1
  139. package/tests/core/config.test.ts +1 -1
  140. package/tests/core/event-log.test.ts +35 -0
  141. package/tests/core/evolution-engine.test.ts +610 -0
  142. package/tests/core/file-store.test.ts +102 -0
  143. package/tests/core/focus-history.test.ts +203 -11
  144. package/tests/core/merge-gate-audit.test.ts +2 -169
  145. package/tests/core/migration.test.ts +7 -7
  146. package/tests/core/model-deployment-registry.test.ts +7 -1
  147. package/tests/core/model-training-registry.test.ts +19 -0
  148. package/tests/core/observability.test.ts +0 -1
  149. package/tests/core/pain-diagnostic-gate.test.ts +498 -0
  150. package/tests/core/pain.test.ts +0 -1
  151. package/tests/core/path-resolver.test.ts +1 -1
  152. package/tests/core/paths-refactor.test.ts +0 -22
  153. package/tests/core/principle-internalization/deprecated-readiness.test.ts +2 -2
  154. package/tests/core/principle-internalization/lifecycle-metrics.test.ts +2 -2
  155. package/tests/core/principle-internalization/{internalization-routing-policy.test.ts → lifecycle-routing-policy.test.ts} +6 -6
  156. package/tests/core/principle-internalization/lineage-source-retired.test.ts +56 -0
  157. package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +1 -23
  158. package/tests/core/principle-tree-ledger-adapter.test.ts +253 -0
  159. package/tests/core/reflection-context.test.ts +0 -14
  160. package/tests/core/replay-engine.test.ts +127 -215
  161. package/tests/core/rule-host-helpers.test.ts +2 -2
  162. package/tests/core/rule-implementation-runtime.test.ts +0 -27
  163. package/tests/core/workflow-funnel-loader.test.ts +162 -0
  164. package/tests/core/workspace-context.test.ts +2 -2
  165. package/tests/core/workspace-dir-validation.test.ts +8 -1
  166. package/tests/core-anti-growth.test.ts +191 -0
  167. package/tests/hook-workspace-nextaction-contract.test.ts +42 -0
  168. package/tests/hooks/confirm-first-removal.test.ts +188 -0
  169. package/tests/hooks/gate-auto-correct-shadow.test.ts +310 -0
  170. package/tests/hooks/gate-auto-correct.test.ts +665 -0
  171. package/tests/hooks/gate-no-path-write-tool.test.ts +172 -0
  172. package/tests/hooks/gate-rule-host-pipeline.test.ts +2 -1
  173. package/tests/hooks/pain.test.ts +269 -12
  174. package/tests/hooks/prompt-characterization.test.ts +500 -0
  175. package/tests/hooks/prompt-size-guard.test.ts +32 -17
  176. package/tests/hooks/runtime-v2-prompt-activation.test.ts +869 -0
  177. package/tests/index.test.ts +94 -1
  178. package/tests/integration/auto-entry-gate.test.ts +248 -0
  179. package/tests/integration/internalization-trigger-guard.test.ts +69 -0
  180. package/tests/integration/m8-legacy-paths.test.ts +63 -0
  181. package/tests/integration/runtime-v2-pain-guard.test.ts +125 -0
  182. package/tests/plugin-config-resolution-cutover.test.ts +359 -0
  183. package/tests/runtime-v2-discovery-guard.test.ts +154 -0
  184. package/tests/service/central-database.test.ts +457 -0
  185. package/tests/service/evolution-worker.correction-observer.test.ts +173 -0
  186. package/tests/service/evolution-worker.timeout.test.ts +11 -129
  187. package/tests/service/internalization-trigger-adapter.test.ts +251 -0
  188. package/tests/service/monitoring-query-service.test.ts +1 -47
  189. package/tests/service/queue-io.test.ts +1 -62
  190. package/tests/service/runtime-summary-service.test.ts +3 -1
  191. package/tests/service/workflow-watchdog.test.ts +0 -91
  192. package/tests/utils/file-lock.test.ts +5 -3
  193. package/tests/utils/session-key.test.ts +52 -0
  194. package/tests/utils/subagent-probe.test.ts +48 -1
  195. package/vitest.config.ts +4 -11
  196. package/.planning/codebase/ARCHITECTURE.md +0 -157
  197. package/.planning/codebase/CONCERNS.md +0 -145
  198. package/.planning/codebase/CONVENTIONS.md +0 -148
  199. package/.planning/codebase/INTEGRATIONS.md +0 -81
  200. package/.planning/codebase/STACK.md +0 -87
  201. package/.planning/codebase/STRUCTURE.md +0 -193
  202. package/.planning/codebase/TESTING.md +0 -243
  203. package/.planning/phases/01-basic-visualization/01-GAP-CLOSURE-VERIFICATION.md +0 -113
  204. package/docs/COMMAND_REFERENCE.md +0 -76
  205. package/docs/COMMAND_REFERENCE_EN.md +0 -79
  206. package/scripts/build-web.mjs +0 -46
  207. package/scripts/diagnose-nocturnal.mjs +0 -537
  208. package/scripts/seed-nocturnal-scenarios.mjs +0 -384
  209. package/src/commands/nocturnal-review.ts +0 -322
  210. package/src/commands/nocturnal-rollout.ts +0 -790
  211. package/src/commands/nocturnal-train.ts +0 -986
  212. package/src/commands/pd-reflect.ts +0 -88
  213. package/src/core/adaptive-thresholds.ts +0 -478
  214. package/src/core/diagnostician-task-store.ts +0 -192
  215. package/src/core/nocturnal-arbiter.ts +0 -715
  216. package/src/core/nocturnal-artifact-lineage.ts +0 -116
  217. package/src/core/nocturnal-artificer.ts +0 -257
  218. package/src/core/nocturnal-candidate-scoring.ts +0 -530
  219. package/src/core/nocturnal-compliance.ts +0 -1146
  220. package/src/core/nocturnal-dataset.ts +0 -763
  221. package/src/core/nocturnal-executability.ts +0 -428
  222. package/src/core/nocturnal-export.ts +0 -499
  223. package/src/core/nocturnal-paths.ts +0 -240
  224. package/src/core/nocturnal-reasoning-deriver.ts +0 -343
  225. package/src/core/nocturnal-rule-implementation-validator.ts +0 -246
  226. package/src/core/nocturnal-snapshot-contract.ts +0 -99
  227. package/src/core/nocturnal-trajectory-extractor.ts +0 -512
  228. package/src/core/nocturnal-trinity-types.ts +0 -218
  229. package/src/core/nocturnal-trinity.ts +0 -2680
  230. package/src/core/principle-internalization/deprecated-readiness.ts +0 -93
  231. package/src/core/principle-internalization/internalization-routing-policy.ts +0 -208
  232. package/src/core/principle-internalization/lifecycle-metrics.ts +0 -152
  233. package/src/http/principles-console-route.ts +0 -709
  234. package/src/service/central-health-service.ts +0 -49
  235. package/src/service/central-overview-service.ts +0 -138
  236. package/src/service/control-ui-query-service.ts +0 -900
  237. package/src/service/cooldown-strategy.ts +0 -97
  238. package/src/service/evolution-pain-context.ts +0 -79
  239. package/src/service/evolution-query-service.ts +0 -407
  240. package/src/service/health-query-service.ts +0 -1038
  241. package/src/service/nocturnal-config.ts +0 -214
  242. package/src/service/nocturnal-runtime.ts +0 -734
  243. package/src/service/nocturnal-service.ts +0 -1605
  244. package/src/service/nocturnal-target-selector.ts +0 -545
  245. package/src/service/sleep-cycle.ts +0 -157
  246. package/src/service/startup-reconciler.ts +0 -112
  247. package/src/service/subagent-workflow/correction-observer-types.ts +0 -82
  248. package/src/service/subagent-workflow/correction-observer-workflow-manager.ts +0 -250
  249. package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +0 -1
  250. package/src/service/subagent-workflow/dynamic-timeout.ts +0 -30
  251. package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +0 -268
  252. package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +0 -795
  253. package/src/service/subagent-workflow/runtime-direct-driver.ts +0 -268
  254. package/src/service/subagent-workflow/workflow-manager-base.ts +0 -580
  255. package/src/tools/write-pain-flag.ts +0 -215
  256. package/templates/langs/en/skills/plan-script/SKILL.md +0 -32
  257. package/templates/langs/zh/skills/plan-script/SKILL.md +0 -32
  258. package/tests/commands/nocturnal-review.test.ts +0 -448
  259. package/tests/commands/nocturnal-train.test.ts +0 -97
  260. package/tests/commands/pd-reflect.test.ts +0 -49
  261. package/tests/core/adaptive-thresholds.test.ts +0 -261
  262. package/tests/core/nocturnal-arbiter.test.ts +0 -559
  263. package/tests/core/nocturnal-artifact-lineage.test.ts +0 -53
  264. package/tests/core/nocturnal-artificer.test.ts +0 -241
  265. package/tests/core/nocturnal-candidate-scoring.test.ts +0 -532
  266. package/tests/core/nocturnal-compliance-p-principles.test.ts +0 -133
  267. package/tests/core/nocturnal-compliance.test.ts +0 -646
  268. package/tests/core/nocturnal-dataset.test.ts +0 -892
  269. package/tests/core/nocturnal-e2e.test.ts +0 -234
  270. package/tests/core/nocturnal-executability.test.ts +0 -357
  271. package/tests/core/nocturnal-export.test.ts +0 -517
  272. package/tests/core/nocturnal-reasoning-deriver.test.ts +0 -372
  273. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +0 -428
  274. package/tests/core/nocturnal-rule-implementation-validator.test.ts +0 -127
  275. package/tests/core/nocturnal-snapshot-contract.test.ts +0 -121
  276. package/tests/core/nocturnal-trajectory-extractor.test.ts +0 -634
  277. package/tests/core/nocturnal-trinity.test.ts +0 -2053
  278. package/tests/core/pain-auto-repair.test.ts +0 -96
  279. package/tests/core/pain-integration.test.ts +0 -510
  280. package/tests/fixtures/nocturnal-reviewed-subset.json +0 -183
  281. package/tests/http/principles-console-route.test.ts +0 -162
  282. package/tests/integration/chaos-resilience.test.ts +0 -348
  283. package/tests/integration/empathy-workflow-integration.test.ts +0 -626
  284. package/tests/integration/pain-diagnostician-loop.e2e.test.ts +0 -380
  285. package/tests/service/control-ui-query-service.test.ts +0 -121
  286. package/tests/service/cooldown-strategy.test.ts +0 -164
  287. package/tests/service/data-endpoints-regression.test.ts +0 -834
  288. package/tests/service/empathy-observer-workflow-manager.test.ts +0 -175
  289. package/tests/service/evolution-worker.nocturnal.test.ts +0 -601
  290. package/tests/service/nocturnal-runtime-hardening.test.ts +0 -118
  291. package/tests/service/nocturnal-runtime.test.ts +0 -473
  292. package/tests/service/nocturnal-service-code-candidate.test.ts +0 -330
  293. package/tests/service/nocturnal-target-selector.test.ts +0 -615
  294. package/tests/service/startup-reconciler.test.ts +0 -148
  295. package/tests/tools/write-pain-flag.test.ts +0 -358
  296. package/ui/src/App.tsx +0 -45
  297. package/ui/src/api.ts +0 -220
  298. package/ui/src/charts.tsx +0 -955
  299. package/ui/src/components/ErrorState.tsx +0 -6
  300. package/ui/src/components/Loading.tsx +0 -13
  301. package/ui/src/components/ProtectedRoute.tsx +0 -12
  302. package/ui/src/components/Shell.tsx +0 -91
  303. package/ui/src/components/WorkspaceConfig.tsx +0 -178
  304. package/ui/src/components/index.ts +0 -5
  305. package/ui/src/context/auth.tsx +0 -80
  306. package/ui/src/context/theme.tsx +0 -66
  307. package/ui/src/hooks/useAutoRefresh.ts +0 -39
  308. package/ui/src/i18n/ui.ts +0 -473
  309. package/ui/src/main.tsx +0 -16
  310. package/ui/src/pages/EvolutionPage.tsx +0 -333
  311. package/ui/src/pages/FeedbackPage.tsx +0 -138
  312. package/ui/src/pages/GateMonitorPage.tsx +0 -136
  313. package/ui/src/pages/LoginPage.tsx +0 -89
  314. package/ui/src/pages/OverviewPage.tsx +0 -599
  315. package/ui/src/pages/SamplesPage.tsx +0 -174
  316. package/ui/src/pages/ThinkingModelsPage.tsx +0 -702
  317. package/ui/src/styles.css +0 -2020
  318. package/ui/src/types.ts +0 -384
  319. package/ui/src/utils/format.ts +0 -15
@@ -16,7 +16,7 @@
16
16
  2. **确认工作空间**: 检查当前工作目录是否正确
17
17
  3. **读取身份文件**: `SOUL.md`, `USER.md`, `IDENTITY.md`
18
18
  4. **检查记忆状态**: 读取今日和昨日的 `memory/YYYY-MM-DD.md`
19
- 5. **检查痛觉信号**: 查看 `.state/.pain_flag` 是否存在
19
+ 5. **检查 Runtime V2 痛苦诊断**: 使用 `pd candidate list` / ledger state;`.state/.pain_flag` 仅为 legacy compatibility
20
20
 
21
21
  ---
22
22
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## 🩹 痛觉与进化检查
10
10
 
11
- - [ ] **`.state/.pain_flag`** 是否存在未处理的痛觉信号?
11
+ - [ ] **Runtime V2 pain** — 如果最近有 `pd pain record` 或工具失败,检查 `pd candidate list` / ledger。`.state/.pain_flag` 仅为 legacy compatibility。
12
12
  - [ ] **`.state/evolution_queue.json`** — 是否有待处理的进化任务?
13
13
  - [ ] **`memory/logs/SYSTEM.log`** — 最近是否有未解决的高优先级问题?
14
14
 
@@ -95,4 +95,4 @@
95
95
 
96
96
  ---
97
97
 
98
- *无问题且无需行动,回复 `HEARTBEAT_OK` 节省 Token。*
98
+ *无问题且无需行动,回复 `HEARTBEAT_OK` 节省 Token。*
@@ -39,8 +39,9 @@
39
39
  <!-- 执行与物理限制 (Execution & Physical Constraints) -->
40
40
  <directive id="T-05" name="PHYSICAL_DEFENSE_AND_ORCHESTRATION">
41
41
  <trigger>当被要求执行大型重构、多文件修改(>2 个文件)或架构变更时。</trigger>
42
- <must>限制爆炸半径。你必须起草一个 `PLAN.md`(状态:READY)。在修改任何代码后,必须运行金丝雀测试(例如 `npm test`、linters)以验证完整性。</must>
43
- <forbidden>在没有计划的情况下直接执行大规模非结构化变更,或跳过修改后的验证环节。</forbidden>
42
+ <should>对复杂变更,先描述计划并获得 owner 确认后再执行。</should>
43
+ <must>限制爆炸半径。在修改任何代码后,必须运行金丝雀测试(例如 `npm test`、linters)以验证完整性。</must>
44
+ <forbidden>直接执行大规模非结构化变更,或跳过修改后的验证环节。</forbidden>
44
45
  </directive>
45
46
 
46
47
  <directive id="T-06" name="OCCAMS_RAZOR_MVC">
@@ -4,77 +4,6 @@
4
4
  "lastUpdated": "2026-04-04",
5
5
 
6
6
  "agents": {
7
- "iflow": {
8
- "command": "iflow --experimental-acp",
9
- "description": "iFlow CLI with ACP support (智谱 Code Plan / MiniMax Code Plan 付费套餐更稳定,但以下模型全部免费)",
10
- "version": "0.5.18",
11
- "models": {
12
- "glm-4.7": {
13
- "description": "GLM-4.7 — official recommended model, fast",
14
- "pricing": "free",
15
- "recommendedTimeoutSeconds": 1200,
16
- "features": ["recommended", "fast"],
17
- "notes": "官方推荐模型,速度快"
18
- },
19
- "glm-5": {
20
- "description": "GLM-5 — 744B parameters, long-context",
21
- "pricing": "free",
22
- "recommendedTimeoutSeconds": 1800,
23
- "features": ["slow", "needs-extra-time"],
24
- "notes": "744B 参数,运行明显较慢。Review 任务超时必须 ≥ 1800s"
25
- },
26
- "qwen3-coder-plus": {
27
- "description": "Qwen3-Coder-Plus — efficient coding model",
28
- "pricing": "free",
29
- "recommendedTimeoutSeconds": 1200,
30
- "features": ["fast", "coding-optimized"],
31
- "notes": "通义编码模型"
32
- },
33
- "deepseek-v3.2": {
34
- "description": "DeepSeek V3.2",
35
- "pricing": "free",
36
- "recommendedTimeoutSeconds": 1200,
37
- "features": ["fast"],
38
- "notes": ""
39
- },
40
- "minimax-m2.5": {
41
- "description": "MiniMax M2.5",
42
- "pricing": "free",
43
- "recommendedTimeoutSeconds": 1200,
44
- "features": ["fast"],
45
- "notes": ""
46
- },
47
- "kimi-k2-thinking": {
48
- "description": "Kimi K2 Thinking",
49
- "pricing": "free",
50
- "recommendedTimeoutSeconds": 1800,
51
- "features": ["reasoning"],
52
- "notes": "推理型模型"
53
- },
54
- "kimi-k2.5": {
55
- "description": "Kimi K2.5",
56
- "pricing": "free",
57
- "recommendedTimeoutSeconds": 1200,
58
- "features": ["fast"],
59
- "notes": ""
60
- },
61
- "kimi-k2-0905": {
62
- "description": "Kimi K2 0905",
63
- "pricing": "free",
64
- "recommendedTimeoutSeconds": 1200,
65
- "features": ["fast"],
66
- "notes": ""
67
- },
68
- "iflow-rome-30ba3b": {
69
- "description": "iFlow ROME 30BA3B",
70
- "pricing": "free",
71
- "recommendedTimeoutSeconds": 1200,
72
- "features": ["preview"],
73
- "notes": "预览版本"
74
- }
75
- }
76
- },
77
-
78
7
  "opencode": {
79
8
  "command": "npx -y opencode-ai acp",
80
9
  "description": "OpenCode ACP adapter",
@@ -209,6 +138,6 @@
209
138
  "codex": "codex-acp 在当前环境无法使用,不登记。",
210
139
  "kilocode": "kilocode ACP 是 server 模式(监听端口),不是 headless prompt-response,不兼容 acpx,不登记。",
211
140
  "qodercli": "qodercli 没有 --acp 标志,不登记。",
212
- "model_discovery": "opencode 可通过 'opencode models' 自动列出模型。其他 agent(iflow, gemini, qwen)没有 CLI 列表命令,需手动维护。"
141
+ "model_discovery": "opencode 可通过 'opencode models' 自动列出模型。其他 agent(gemini, qwen)没有 CLI 列表命令,需手动维护。"
213
142
  }
214
143
  }
@@ -33,19 +33,19 @@
33
33
  "stageTimeoutMinutes": 15,
34
34
  "stages": ["investigate", "implement-pass-1", "verify"],
35
35
  "producer": {
36
- "agent": "iflow",
37
- "model": "glm-4.7",
36
+ "agent": "opencode",
37
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
38
38
  "timeoutSeconds": 180
39
39
  },
40
40
  "reviewerA": {
41
- "agent": "iflow",
42
- "model": "glm-4.7",
41
+ "agent": "opencode",
42
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
43
43
  "timeoutSeconds": 120,
44
44
  "focus": "Validate root cause, behavioral change, and code correctness."
45
45
  },
46
46
  "reviewerB": {
47
- "agent": "iflow",
48
- "model": "glm-4.7",
47
+ "agent": "opencode",
48
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
49
49
  "timeoutSeconds": 120,
50
50
  "focus": "Validate scope control, verification quality, and regression risk."
51
51
  },
@@ -33,19 +33,19 @@
33
33
  "stageTimeoutMinutes": 20,
34
34
  "stages": ["investigate", "implement-pass-1", "verify"],
35
35
  "producer": {
36
- "agent": "iflow",
37
- "model": "glm-4.7",
36
+ "agent": "opencode",
37
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
38
38
  "timeoutSeconds": 240
39
39
  },
40
40
  "reviewerA": {
41
- "agent": "iflow",
42
- "model": "glm-4.7",
41
+ "agent": "opencode",
42
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
43
43
  "timeoutSeconds": 120,
44
44
  "focus": "Validate feature behavior, acceptance criteria coverage, and architecture fit."
45
45
  },
46
46
  "reviewerB": {
47
- "agent": "iflow",
48
- "model": "glm-4.7",
47
+ "agent": "opencode",
48
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
49
49
  "timeoutSeconds": 120,
50
50
  "focus": "Validate implementation scope, verification evidence, and regression risk."
51
51
  },
@@ -32,27 +32,27 @@
32
32
  ]
33
33
  },
34
34
  "producer": {
35
- "agent": "iflow",
36
- "model": "glm-5",
35
+ "agent": "opencode",
36
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
37
37
  "timeoutSeconds": 1800
38
38
  },
39
39
  "reviewerA": {
40
- "agent": "iflow",
41
- "model": "glm-4.7",
40
+ "agent": "opencode",
41
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
42
42
  "timeoutSeconds": 1200,
43
43
  "role": "code-quality",
44
44
  "focus": "Verify prompt changes are minimal, backward-compatible, and don't break existing arbiter validation"
45
45
  },
46
46
  "reviewerB": {
47
- "agent": "iflow",
48
- "model": "glm-4.7",
47
+ "agent": "opencode",
48
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
49
49
  "timeoutSeconds": 1200,
50
50
  "role": "functional-correctness",
51
51
  "focus": "Verify tests pass and the new prompt constraints produce structurally valid Trinity output"
52
52
  },
53
53
  "escalationReviewer": {
54
- "agent": "iflow",
55
- "model": "glm-5",
54
+ "agent": "opencode",
55
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
56
56
  "timeoutSeconds": 1800
57
57
  },
58
58
  "stageGoals": {
@@ -10,19 +10,14 @@
10
10
  "stageTimeoutMinutes": 5,
11
11
  "stages": ["verify"],
12
12
  "producer": {
13
- "agent": "iflow",
14
- "model": "glm-4.7",
13
+ "agent": "opencode",
14
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
15
15
  "timeoutSeconds": 90
16
16
  },
17
17
  "reviewerA": {
18
18
  "agent": "opencode",
19
19
  "model": "minimax-cn-coding-plan/MiniMax-M2.7",
20
20
  "timeoutSeconds": 45,
21
- "fallback": {
22
- "agent": "iflow",
23
- "model": "glm-4.7",
24
- "timeoutSeconds": 75
25
- },
26
21
  "role": "artifact_checker",
27
22
  "focus": "Verify decision.md and scorecard.json contain expected fields"
28
23
  },
@@ -30,11 +25,6 @@
30
25
  "agent": "opencode",
31
26
  "model": "minimax-cn-coding-plan/MiniMax-M2.7",
32
27
  "timeoutSeconds": 45,
33
- "fallback": {
34
- "agent": "iflow",
35
- "model": "glm-4.7",
36
- "timeoutSeconds": 75
37
- },
38
28
  "role": "recommendation_checker",
39
29
  "focus": "Verify nextRunRecommendation is computed and reasonable"
40
30
  },
@@ -10,19 +10,14 @@
10
10
  "stageTimeoutMinutes": 4,
11
11
  "stages": ["validate"],
12
12
  "producer": {
13
- "agent": "iflow",
14
- "model": "glm-4.7",
13
+ "agent": "opencode",
14
+ "model": "minimax-cn-coding-plan/MiniMax-M2.7",
15
15
  "timeoutSeconds": 90
16
16
  },
17
17
  "reviewerA": {
18
18
  "agent": "opencode",
19
19
  "model": "minimax-cn-coding-plan/MiniMax-M2.7",
20
20
  "timeoutSeconds": 45,
21
- "fallback": {
22
- "agent": "iflow",
23
- "model": "glm-4.7",
24
- "timeoutSeconds": 75
25
- },
26
21
  "role": "schema_checker",
27
22
  "focus": "Verify report has all required sections, VERDICT format, DIMENSIONS format"
28
23
  },
@@ -30,11 +25,6 @@
30
25
  "agent": "opencode",
31
26
  "model": "minimax-cn-coding-plan/MiniMax-M2.7",
32
27
  "timeoutSeconds": 45,
33
- "fallback": {
34
- "agent": "iflow",
35
- "model": "glm-4.7",
36
- "timeoutSeconds": 75
37
- },
38
28
  "role": "quality_checker",
39
29
  "focus": "Verify outputQuality is computed correctly, qualityReasons are meaningful"
40
30
  },
@@ -29,6 +29,11 @@ const acpxBin = (() => {
29
29
  const r = spawnSync(cmd, ['acpx'], { encoding: 'utf8' });
30
30
  if (r.status === 0) {
31
31
  const lines = r.stdout.trim().split(/\r?\n/);
32
+ // On Windows, prefer .cmd file over the Unix shell script (no extension)
33
+ if (process.platform === 'win32') {
34
+ const cmdFile = lines.find(l => l.trim().toLowerCase().endsWith('.cmd'));
35
+ if (cmdFile) return cmdFile.trim();
36
+ }
32
37
  const symlink = lines[0].trim();
33
38
  try {
34
39
  return fs.realpathSync(symlink);
@@ -86,7 +91,7 @@ function configureRuntimeRoots(rootPath) {
86
91
 
87
92
  function checkAcpxAvailable() {
88
93
  return process.platform === 'win32'
89
- ? spawnSync('powershell.exe', ['-NoProfile', '-Command', 'acpx --version'], {
94
+ ? spawnSync(process.env.COMSPEC || 'cmd.exe', ['/d', '/s', '/c', `"${acpxBin}" --version`], {
90
95
  encoding: 'utf8',
91
96
  shell: false,
92
97
  timeout: 10_000,
@@ -129,6 +134,24 @@ function runSelfCheck() {
129
134
  const acpxCheck = checkAcpxAvailable();
130
135
  record('acpx_available', acpxCheck.status === 0, (acpxCheck.stdout || acpxCheck.stderr || '').trim() || `status=${acpxCheck.status}`);
131
136
 
137
+ // Check which agents are available by running a quick version check
138
+ try {
139
+ const registry = readJson(path.join(referencesRoot, 'agent-registry.json'));
140
+ const agentNames = Object.keys(registry.agents || {});
141
+ for (const agentName of agentNames) {
142
+ try {
143
+ const agentCheck = process.platform === 'win32'
144
+ ? spawnSync(process.env.COMSPEC || 'cmd.exe', ['/d', '/s', '/c', `"${acpxBin}" --format quiet --timeout 30 ${agentName} exec "echo available"`], { encoding: 'utf8', shell: false, timeout: 45_000 })
145
+ : spawnSync(nodeBin, [acpxBin, '--format', 'quiet', '--timeout', '30', agentName, 'exec', 'echo available'], { encoding: 'utf8', shell: false, timeout: 45_000 });
146
+ record(`agent:${agentName}`, agentCheck.status === 0, agentCheck.status === 0 ? 'available' : `status=${agentCheck.status}`);
147
+ } catch (agentErr) {
148
+ record(`agent:${agentName}`, false, agentErr.message);
149
+ }
150
+ }
151
+ } catch (registryErr) {
152
+ record('agent_registry_read', false, registryErr.message);
153
+ }
154
+
132
155
  const probePath = path.join(runtimeRoot, '.self-check-write-probe.tmp');
133
156
  try {
134
157
  fs.writeFileSync(probePath, 'ok', 'utf8');
@@ -273,7 +296,7 @@ function updateSummary(runDir, lines) {
273
296
  function inferFailureClassification({ summary = '', blockers = [], reviewerTimeouts = null, reviewerViolations = null }) {
274
297
  const combined = [summary, ...(blockers ?? [])].join(' ').toLowerCase();
275
298
 
276
- if (/acpx|path|enoent|eacces|eprem|permission|writable|runtime root|command not found|not available/.test(combined)) {
299
+ if (/acpx|path|enoent|eacces|eprem|permission|writable|runtime root|command not found|not available|failed to spawn|spawn.*enoent|exit status|status 1|status 130|taskkill|comspec/.test(combined)) {
277
300
  return {
278
301
  failureClassification: 'environment issue',
279
302
  failureSource: 'runtime environment',
@@ -289,7 +312,7 @@ function inferFailureClassification({ summary = '', blockers = [], reviewerTimeo
289
312
  };
290
313
  }
291
314
 
292
- if ((reviewerTimeouts?.length ?? 0) > 0 || (reviewerViolations?.length ?? 0) > 0 || /missing reports|schema violation|report invalidated|timed out|agent .*failed|verdict|dimensions/.test(combined)) {
315
+ if ((reviewerTimeouts?.length ?? 0) > 0 || (reviewerViolations?.length ?? 0) > 0 || /missing reports|schema violation|report invalidated|timed out|verdict|dimensions/.test(combined)) {
293
316
  return {
294
317
  failureClassification: 'agent behavior issue',
295
318
  failureSource: 'role execution or report quality',
@@ -297,6 +320,14 @@ function inferFailureClassification({ summary = '', blockers = [], reviewerTimeo
297
320
  };
298
321
  }
299
322
 
323
+ if (/agent .*failed/.test(combined)) {
324
+ return {
325
+ failureClassification: 'environment issue',
326
+ failureSource: 'agent runtime',
327
+ recommendedNextAction: 'Check agent availability and environment setup before retrying.',
328
+ };
329
+ }
330
+
300
331
  return {
301
332
  failureClassification: 'workflow bug',
302
333
  failureSource: 'orchestrator runtime',
@@ -439,12 +470,12 @@ function runAgent({ cwd, agent, model, prompt, timeoutSeconds = 1800, failLogPat
439
470
  let result;
440
471
  try {
441
472
  if (process.platform === 'win32') {
473
+ const comspec = process.env.COMSPEC || 'cmd.exe';
442
474
  result = spawnSync(
443
- 'powershell.exe',
475
+ comspec,
444
476
  [
445
- '-NoProfile',
446
- '-Command',
447
- `acpx --cwd $env:AI_SPRINT_CWD --approve-all --model $env:AI_SPRINT_MODEL --timeout $env:AI_SPRINT_TIMEOUT ${agent} exec -f $env:AI_SPRINT_PROMPT`,
477
+ '/d', '/s', '/c',
478
+ `"${acpxBin}" --cwd "%AI_SPRINT_CWD%" --approve-all --model "%AI_SPRINT_MODEL%" --timeout "%AI_SPRINT_TIMEOUT%" ${agent} exec -f "%AI_SPRINT_PROMPT%"`,
448
479
  ],
449
480
  {
450
481
  cwd,
@@ -574,9 +605,10 @@ function runAgentAsync({ cwd, agent, model, prompt, timeoutSeconds = 1800, promp
574
605
 
575
606
  try {
576
607
  if (process.platform === 'win32') {
577
- proc = spawn('powershell.exe', [
578
- '-NoProfile', '-Command',
579
- `acpx --cwd $env:AI_SPRINT_CWD --approve-all --model $env:AI_SPRINT_MODEL --timeout $env:AI_SPRINT_TIMEOUT ${agent} exec -f $env:AI_SPRINT_PROMPT`,
608
+ const comspec = process.env.COMSPEC || 'cmd.exe';
609
+ proc = spawn(comspec, [
610
+ '/d', '/s', '/c',
611
+ `"${acpxBin}" --cwd "%AI_SPRINT_CWD%" --approve-all --model "%AI_SPRINT_MODEL%" --timeout "%AI_SPRINT_TIMEOUT%" ${agent} exec -f "%AI_SPRINT_PROMPT%"`,
580
612
  ], {
581
613
  cwd,
582
614
  encoding: 'utf8',
@@ -833,9 +865,10 @@ function runAgentWithProgressCheck({
833
865
  // Spawn the agent process
834
866
  try {
835
867
  if (process.platform === 'win32') {
836
- proc = spawn('powershell.exe', [
837
- '-NoProfile', '-Command',
838
- `acpx --cwd $env:AI_SPRINT_CWD --approve-all --model $env:AI_SPRINT_MODEL --timeout $env:AI_SPRINT_TIMEOUT ${agent} exec -f $env:AI_SPRINT_PROMPT`,
868
+ const comspec = process.env.COMSPEC || 'cmd.exe';
869
+ proc = spawn(comspec, [
870
+ '/d', '/s', '/c',
871
+ `"${acpxBin}" --cwd "%AI_SPRINT_CWD%" --approve-all --model "%AI_SPRINT_MODEL%" --timeout "%AI_SPRINT_TIMEOUT%" ${agent} exec -f "%AI_SPRINT_PROMPT%"`,
839
872
  ], {
840
873
  cwd,
841
874
  encoding: 'utf8',
@@ -1176,8 +1209,8 @@ export function getIsolationDir(runId, stageName, role) {
1176
1209
  }
1177
1210
 
1178
1211
  /**
1179
- * Find report in iflow isolation directory.
1180
- * iflow writes to runtime/tmp/sprint-agent/{runId}/{stage}-{role}/{report}.md
1212
+ * Find report in agent isolation directory.
1213
+ * Agent writes to runtime/tmp/sprint-agent/{runId}/{stage}-{role}/{report}.md
1181
1214
  *
1182
1215
  * IMPORTANT: Uses runId directly for isolation lookup, not fragile timestamp extraction.
1183
1216
  * This ensures different runs have unique isolation directories and prevents cross-contamination.
@@ -2608,6 +2641,9 @@ async function executeStage(runDir, state, spec) {
2608
2641
  worktreePath: worktreeInfo?.worktreePath,
2609
2642
  worklogPath: producerWorklogPath,
2610
2643
  });
2644
+ if (result.status !== 0) {
2645
+ throw new Error(`Agent exited with status ${result.status}: ${result.stderr || 'no stderr'}`);
2646
+ }
2611
2647
  producerOutput = result.stdout;
2612
2648
  extensionsUsed = result.extensionsUsed ?? 0;
2613
2649
  if (extensionsUsed > 0) {
@@ -468,7 +468,7 @@ test('dynamic timeout: extension window scales with timeoutSeconds instead of fi
468
468
  });
469
469
 
470
470
  // ---------------------------------------------------------------------------
471
- // Isolation Report: iflow writes to tmp/sprint-agent/{runId}/{stage}-{role}/
471
+ // Isolation Report: agent writes to tmp/sprint-agent/{runId}/{stage}-{role}/
472
472
  // Phase 2: Uses runId directly, not fragile timestamp extraction
473
473
  // ---------------------------------------------------------------------------
474
474
 
@@ -902,10 +902,10 @@ test('behavior: missing reviewer report persists reviewerFailures details', () =
902
902
  reviewerFailures: [
903
903
  {
904
904
  role: 'reviewer_b',
905
- summary: 'primary=opencode/test-model: Agent opencode failed with status 1 | fallback=iflow/glm-4.7: timed out',
905
+ summary: 'primary=opencode/test-model: Agent opencode failed with status 1 | fallback=opencode/minimax-cn-coding-plan/MiniMax-M2.7: timed out',
906
906
  attempts: [
907
907
  { label: 'primary', agent: 'opencode', model: 'test-model', error: 'Agent opencode failed with status 1', timedOut: false },
908
- { label: 'fallback', agent: 'iflow', model: 'glm-4.7', error: 'Agent iflow timed out', timedOut: true },
908
+ { label: 'fallback', agent: 'opencode', model: 'minimax-cn-coding-plan/MiniMax-M2.7', error: 'Agent opencode timed out', timedOut: true },
909
909
  ],
910
910
  },
911
911
  ],
@@ -919,7 +919,7 @@ test('behavior: missing reviewer report persists reviewerFailures details', () =
919
919
  assert.ok(decision.includes('primary=opencode/test-model'), 'decision should include reviewer failure summary');
920
920
  assert.ok(Array.isArray(scorecard.reviewerFailures), 'scorecard should persist reviewerFailures');
921
921
  assert.equal(scorecard.reviewerFailures[0].role, 'reviewer_b');
922
- assert.ok(scorecard.reviewerFailures[0].summary.includes('fallback=iflow/glm-4.7'));
922
+ assert.ok(scorecard.reviewerFailures[0].summary.includes('fallback=opencode/minimax-cn-coding-plan/MiniMax-M2.7'));
923
923
  } finally {
924
924
  cleanupTempDir(tmp);
925
925
  }
@@ -1397,7 +1397,7 @@ test('acceptance checklist: file exists and has correct content', () => {
1397
1397
 
1398
1398
  test('preflight check validates acpx not agent names', () => {
1399
1399
  // The preflight code in run.mjs should check that acpx is available,
1400
- // NOT that agent names like "iflow" or "claude" exist as shell binaries.
1400
+ // NOT that agent names like "opencode" or "claude" exist as shell binaries.
1401
1401
  const runPath = path.resolve(__dirname, '..', 'scripts', 'run.mjs');
1402
1402
  const content = fs.readFileSync(runPath, 'utf8');
1403
1403
  // Should NOT use "which" with agent names
@@ -1417,3 +1417,19 @@ test('cleanupAcpxOrphans does not fallback to spec directory', () => {
1417
1417
  assert.ok(content.includes('spec.workspace') || content.includes('spec?.workspace'),
1418
1418
  'cleanupAcpxOrphans should reference spec.workspace');
1419
1419
  });
1420
+
1421
+ test('Windows cmd.exe invocations use /s /c with quoted env vars for space-safe paths', () => {
1422
+ const runPath = path.resolve(__dirname, '..', 'scripts', 'run.mjs');
1423
+ const content = fs.readFileSync(runPath, 'utf8');
1424
+ const winCmdPatterns = content.match(/\/d',\s*'\/[^']*',\s*'[^']*%AI_SPRINT/g) || [];
1425
+ for (const pat of winCmdPatterns) {
1426
+ assert.ok(pat.includes('/s'), `Windows cmd.exe pattern must include /s flag: ${pat}`);
1427
+ }
1428
+ assert.ok(!content.includes("'/d', '/c',"), 'must not use /d /c without /s flag');
1429
+ const envVarRefs = content.match(/%AI_SPRINT_\w+%/g) || [];
1430
+ for (const ref of envVarRefs) {
1431
+ const idx = content.indexOf(ref);
1432
+ const before = content.slice(Math.max(0, idx - 2), idx);
1433
+ assert.ok(before.endsWith('"'), `env var ${ref} must be preceded by a double-quote for space-safe expansion`);
1434
+ }
1435
+ });
@@ -10,7 +10,7 @@ disable-model-invocation: true
10
10
  - 读取 memory/CHECKPOINT.md 的最后一条
11
11
  - 读取 memory/ISSUE_LOG.md 的最近 3 条
12
12
  - 读取 memory/DECISIONS.md 的最近决策
13
- - 如果存在 .state/.pain_flag,先处理断点恢复
13
+ - Runtime V2 痛苦诊断使用 task input/context,不使用 `.state/.pain_flag`
14
14
 
15
15
  ## Step 1: 读取运行参数与能力自检
16
16
  - 读取 .principles/PROFILE.json,理解 risk_paths、gate、tests.commands。
@@ -51,7 +51,7 @@ disable-model-invocation: true
51
51
 
52
52
  ## Step 6: 委派 Planner(电影剧本计划)
53
53
  - Planner 输出 Plan(步骤/命令/指标/回滚)。
54
- - 将计划写入 PLAN.md(STATUS 行必须存在)。
54
+ - 将计划写入计划文档供 owner 审阅。
55
55
  - **任务同步 (Task Sync)**:
56
56
  - 如果 `CLAUDE_CODE_TASK_LIST_ID` 已设置,你必须将上述 Plan 的核心步骤直接转化为 Native Tasks(通过自然语言指令"Add task..."或相关工具)。
57
57
  - 如果未设置且为交互模式,提示用户:"建议运行 `export CLAUDE_CODE_TASK_LIST_ID=task-$(date +%s)` 以启用持久化任务追踪。"
@@ -59,7 +59,7 @@ disable-model-invocation: true
59
59
  - **绩效评估**: 任务完成后,写入 `.state/.verdict.json`。格式遵循 `@.principles/schemas/agent_verdict_schema.json`。
60
60
 
61
61
  ## Step 7: 委派 Implementer(执行)
62
- - Implementer 只能按 PLAN 执行。任何偏离必须先更新 PLAN。
62
+ - Implementer 按照 Step 6 的计划执行。任何偏离必须先更新计划并获得确认。
63
63
  - **绩效评估**: 任务完成后,根据验证结果写入 `.state/.verdict.json`。格式遵循 `@.principles/schemas/agent_verdict_schema.json`。
64
64
 
65
65
  ## Step 8: 委派 Reviewer(审查)
@@ -80,4 +80,4 @@ disable-model-invocation: true
80
80
  ## Step 10: 最终汇报 (Final Briefing)
81
81
  - **动作**: 委派 ``pd_spawn_agent(reporter)`` 进行结项陈述。
82
82
  - **要求**: 将 Implementer 和 Reviewer 的最终产出作为输入传给它。让它根据 `USER_CONTEXT.md` 决定汇报的深度和风格。
83
- - **目标**: 确保老板(用户)在不产生认知负荷的前提下,清楚了解任务成果与潜在风险。
83
+ - **目标**: 确保老板(用户)在不产生认知负荷的前提下,清楚了解任务成果与潜在风险。
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: pd-cli-operator
3
+ description: 操作 Principles Disciple `pd` CLI 时使用:运行时健康检查、手动记录痛苦、查看 task/run/candidate/artifact、intake candidate、查看 flow policy、清理 legacy state。本技能提供安全 CLI 路由,并禁止直接写 `.state/.pain_flag`。
4
+ disable-model-invocation: false
5
+ ---
6
+
7
+ # PD CLI Operator
8
+
9
+ 把 `pd` CLI 当作唯一受支持的操作界面。不要手工修改 PD state 文件,除非某个 CLI 命令明确要求这样做。
10
+
11
+ ## Runtime V2 痛苦诊断
12
+
13
+ 手动痛苦诊断:
14
+ ```bash
15
+ pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
16
+ ```
17
+
18
+ 成功标准:
19
+ - `status` 是 `succeeded`
20
+ - `candidateIds` 非空
21
+ - `ledgerEntryIds` 非空
22
+
23
+ 禁止:
24
+ - 不要写 `.state/.pain_flag`。
25
+ - 不要用 `write_file`、shell 重定向、`Set-Content`、`Out-File` 或 `node -e` 创建 pain flag。
26
+
27
+ ## 健康检查和策略
28
+
29
+ 运行时探针:
30
+ ```bash
31
+ pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
32
+ ```
33
+
34
+ 业务流策略:
35
+ ```bash
36
+ pd runtime flow show --workspace "<workspace>" --json
37
+ ```
38
+
39
+ ## 查看 Runtime V2 对象
40
+
41
+ Tasks 和 runs:
42
+ ```bash
43
+ pd task show --task-id "<taskId>" --json
44
+ pd run show --run-id "<runId>" --json
45
+ ```
46
+
47
+ Candidates 和 artifacts:
48
+ ```bash
49
+ pd candidate list --workspace "<workspace>" --json
50
+ pd candidate show --candidate-id "<candidateId>" --workspace "<workspace>" --json
51
+ pd artifact show --artifact-id "<artifactId>" --workspace "<workspace>" --json
52
+ ```
53
+
54
+ 手动 intake:
55
+ ```bash
56
+ pd candidate intake --candidate-id "<candidateId>" --workspace "<workspace>" --json
57
+ ```
58
+
59
+ ## Legacy 管理
60
+
61
+ 只有在明确清理旧状态时使用:
62
+ ```bash
63
+ pd legacy cleanup --workspace "<workspace>" --dry-run
64
+ pd legacy cleanup --workspace "<workspace>" --apply
65
+ ```
66
+
67
+ 不要把 legacy cleanup 当作诊断触发入口。
@@ -89,7 +89,7 @@ disable-model-invocation: true
89
89
  **目标**: 收集足够的事实证据,避免基于假设进行分析。
90
90
 
91
91
  **执行步骤**:
92
- 1. 读取 `.state/.pain_flag` 获取 Pain 信号的完整上下文
92
+ 1. 使用 Runtime V2 task input/context 作为 Pain 信号来源。不要把 `.state/.pain_flag` 当作主要诊断输入。
93
93
  2. 读取 `.state/logs/events.jsonl` 最近 100 行日志
94
94
  3. 使用 `read_file` 或 `search_file_content` 搜索代码库中相关关键词
95
95
  4. 记录所有证据来源(文件路径:行号)
@@ -185,7 +185,7 @@ disable-model-invocation: true
185
185
 
186
186
  | 场景 | 组合流程 |
187
187
  |------|----------|
188
- | 大型重构 | `/pd-evolve` → `plan-script` → `deductive-audit` → 执行 |
188
+ | 大型重构 | `/pd-evolve` → `deductive-audit` → 执行 |
189
189
  | 系统优化 | `/pd-status` → `evolve-system` → `root-cause` |
190
190
  | 项目复盘 | `/pd-daily` → `/pd-okr` → `reflection-log` |
191
191
 
@@ -196,7 +196,6 @@ disable-model-invocation: true
196
196
  - `triage` - 问题分诊
197
197
  - `root-cause` - 根因分析
198
198
  - `deductive-audit` - 演绎审计
199
- - `plan-script` - 计划编排
200
199
  - `reflection` - 元认知反思
201
200
  - `reflection-log` - 反思落盘
202
201
 
@@ -211,7 +210,7 @@ A: GFI (Global Friction Index) 衡量系统的"痛苦程度",分值范围 0-10
211
210
  A: EP (Evolution Points) 通过成功完成任务和问题修复累积。失败会扣除EP但有保护机制。达到阈值后自动升级EP等级,解锁更多权限(更大的代码修改限额)。
212
211
 
213
212
  **Q: Pain Signal 是什么?**
214
- A: Pain Signal 是系统检测到的问题信号,存储在 `.state/.pain_flag` 中。触发后系统会启动进化循环。
213
+ A: Pain Signal 是系统检测到的问题信号。Runtime V2 通过 `PainSignalBridge` 处理;手动触发使用 `pd pain record`。`.state/.pain_flag` 仅为 legacy compatibility。
215
214
 
216
215
  **Q: 如何查看已安装的工具能力?**
217
216
  A: 查看 `.state/SYSTEM_CAPABILITIES.json` 或运行 `/pd-bootstrap` 重新扫描。