principles-disciple 1.71.0 → 1.73.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 (309) hide show
  1. package/openclaw.plugin.json +10 -5
  2. package/package.json +17 -19
  3. package/scripts/acceptance-test.mjs +16 -73
  4. package/scripts/sync-plugin.mjs +382 -77
  5. package/src/commands/archive-impl.ts +2 -1
  6. package/src/commands/capabilities.ts +2 -2
  7. package/src/commands/context.ts +2 -2
  8. package/src/commands/disable-impl.ts +2 -1
  9. package/src/commands/evolution-status.ts +16 -16
  10. package/src/commands/export.ts +12 -67
  11. package/src/commands/pain.ts +91 -1
  12. package/src/commands/principle-rollback.ts +2 -1
  13. package/src/commands/promote-impl.ts +7 -43
  14. package/src/commands/rollback-impl.ts +2 -1
  15. package/src/commands/rollback.ts +2 -1
  16. package/src/commands/samples.ts +2 -1
  17. package/src/commands/thinking-os.ts +2 -1
  18. package/src/config/errors.ts +18 -2
  19. package/src/constants/diagnostician.ts +2 -2
  20. package/src/constants/tools.ts +2 -1
  21. package/src/core/__tests__/focus-history.test.ts +210 -0
  22. package/src/core/config.ts +1 -1
  23. package/src/core/confirm-first-gate.ts +255 -0
  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 +38 -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/pain-diagnostic-gate.ts +154 -0
  37. package/src/core/pain-signal.ts +21 -138
  38. package/src/core/pain.ts +15 -88
  39. package/src/core/pd-task-reconciler.ts +26 -115
  40. package/src/core/pd-task-service.ts +9 -9
  41. package/src/core/pd-task-types.ts +23 -127
  42. package/src/core/principle-compiler/__tests__/compiler-replay-gate.test.ts +174 -0
  43. package/src/core/principle-compiler/code-validator.ts +15 -42
  44. package/src/core/principle-compiler/compiler.ts +100 -15
  45. package/src/core/principle-compiler/index.ts +5 -2
  46. package/src/core/principle-compiler/template-generator.ts +4 -104
  47. package/src/core/principle-injection.ts +10 -202
  48. package/src/core/principle-internalization/filesystem-lifecycle-datasource.ts +42 -0
  49. package/src/core/principle-internalization/lifecycle-read-model.ts +39 -242
  50. package/src/core/principle-internalization/principle-lifecycle-service.ts +12 -10
  51. package/src/core/principle-tree-ledger-adapter.ts +145 -0
  52. package/src/core/principle-tree-ledger.ts +8 -6
  53. package/src/core/reflection/reflection-context.ts +14 -109
  54. package/src/core/replay-engine.ts +8 -500
  55. package/src/core/rule-host-helpers.ts +5 -35
  56. package/src/core/rule-host-types.ts +10 -82
  57. package/src/core/rule-host.ts +6 -63
  58. package/src/core/runtime-v2-prompt-activation-reader.ts +231 -0
  59. package/src/core/session-tracker.ts +87 -101
  60. package/src/core/shadow-observation-registry.ts +19 -48
  61. package/src/core/trajectory.ts +3 -1
  62. package/src/core/workflow-funnel-loader.ts +62 -68
  63. package/src/core/workspace-context.ts +46 -0
  64. package/src/core/workspace-dir-service.ts +1 -1
  65. package/src/core/workspace-dir-validation.ts +18 -9
  66. package/src/hooks/AGENTS.md +1 -1
  67. package/src/hooks/gate-block-helper.ts +46 -44
  68. package/src/hooks/gate.ts +207 -7
  69. package/src/hooks/lifecycle.ts +30 -32
  70. package/src/hooks/llm.ts +60 -32
  71. package/src/hooks/pain.ts +297 -103
  72. package/src/hooks/prompt.ts +469 -339
  73. package/src/hooks/subagent.ts +2 -29
  74. package/src/i18n/commands.ts +2 -10
  75. package/src/index.ts +95 -85
  76. package/src/openclaw-sdk.ts +311 -0
  77. package/src/service/central-database.ts +8 -4
  78. package/src/service/evolution-queue-migration.ts +2 -1
  79. package/src/service/evolution-worker.ts +163 -1786
  80. package/src/service/internalization-trigger-adapter.ts +302 -0
  81. package/src/service/keyword-optimization-service.ts +4 -4
  82. package/src/service/monitoring-query-service.ts +1 -215
  83. package/src/service/queue-io.ts +60 -331
  84. package/src/service/runtime-summary-service.ts +115 -18
  85. package/src/service/subagent-workflow/index.ts +0 -41
  86. package/src/service/subagent-workflow/types.ts +9 -120
  87. package/src/service/subagent-workflow/workflow-store.ts +2 -119
  88. package/src/service/workflow-watchdog.ts +0 -43
  89. package/src/types/event-payload.ts +16 -74
  90. package/src/types/event-types.ts +39 -547
  91. package/src/types/hygiene-types.ts +7 -30
  92. package/src/types/principle-tree-schema.ts +20 -222
  93. package/src/types/queue.ts +15 -70
  94. package/src/types/runtime-summary.ts +5 -49
  95. package/src/utils/io.ts +10 -0
  96. package/src/utils/retry.ts +1 -1
  97. package/src/utils/shadow-fingerprint.ts +2 -2
  98. package/src/utils/workspace-resolver.ts +50 -0
  99. package/templates/langs/en/core/AGENTS.md +2 -2
  100. package/templates/langs/en/core/BOOT.md +1 -1
  101. package/templates/langs/en/core/HEARTBEAT.md +2 -2
  102. package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
  103. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
  104. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
  105. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
  106. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
  107. package/templates/langs/en/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
  108. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
  109. package/templates/langs/en/skills/evolve-task/SKILL.md +1 -1
  110. package/templates/langs/en/skills/pd-cli-operator/SKILL.md +67 -0
  111. package/templates/langs/en/skills/pd-diagnostician/SKILL.md +1 -1
  112. package/templates/langs/en/skills/pd-mentor/SKILL.md +1 -1
  113. package/templates/langs/en/skills/pd-pain-signal/SKILL.md +17 -39
  114. package/templates/langs/en/skills/pd-runtime-v2/SKILL.md +61 -0
  115. package/templates/langs/zh/core/AGENTS.md +2 -2
  116. package/templates/langs/zh/core/BOOT.md +1 -1
  117. package/templates/langs/zh/core/HEARTBEAT.md +2 -2
  118. package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +1 -72
  119. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +6 -6
  120. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +6 -6
  121. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/nocturnal-trinity-quality-enhancement.json +8 -8
  122. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +2 -12
  123. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +2 -12
  124. package/templates/langs/zh/skills/ai-sprint-orchestration/runtime/.gitignore +2 -2
  125. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +51 -15
  126. package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +21 -5
  127. package/templates/langs/zh/skills/evolve-task/SKILL.md +2 -2
  128. package/templates/langs/zh/skills/pd-cli-operator/SKILL.md +67 -0
  129. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +1 -1
  130. package/templates/langs/zh/skills/pd-mentor/SKILL.md +1 -1
  131. package/templates/langs/zh/skills/pd-pain-signal/SKILL.md +17 -38
  132. package/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +61 -0
  133. package/tests/build-artifacts.test.ts +1 -3
  134. package/tests/commands/evolution-status.test.ts +0 -118
  135. package/tests/core/bootstrap-rules.test.ts +1 -1
  136. package/tests/core/config.test.ts +1 -1
  137. package/tests/core/event-log.test.ts +35 -0
  138. package/tests/core/evolution-engine.test.ts +610 -0
  139. package/tests/core/file-store.test.ts +102 -0
  140. package/tests/core/focus-history.test.ts +203 -11
  141. package/tests/core/merge-gate-audit.test.ts +2 -169
  142. package/tests/core/model-deployment-registry.test.ts +7 -1
  143. package/tests/core/model-training-registry.test.ts +19 -0
  144. package/tests/core/observability.test.ts +0 -1
  145. package/tests/core/pain-diagnostic-gate.test.ts +498 -0
  146. package/tests/core/pain.test.ts +0 -1
  147. package/tests/core/principle-internalization/deprecated-readiness.test.ts +2 -2
  148. package/tests/core/principle-internalization/lifecycle-metrics.test.ts +2 -2
  149. package/tests/core/principle-internalization/{internalization-routing-policy.test.ts → lifecycle-routing-policy.test.ts} +6 -6
  150. package/tests/core/principle-internalization/lineage-source-retired.test.ts +56 -0
  151. package/tests/core/principle-internalization/principle-lifecycle-service.test.ts +1 -23
  152. package/tests/core/principle-tree-ledger-adapter.test.ts +253 -0
  153. package/tests/core/reflection-context.test.ts +0 -14
  154. package/tests/core/replay-engine.test.ts +127 -215
  155. package/tests/core/rule-host-helpers.test.ts +2 -2
  156. package/tests/core/rule-implementation-runtime.test.ts +0 -27
  157. package/tests/core/workflow-funnel-loader.test.ts +162 -0
  158. package/tests/core/workspace-dir-validation.test.ts +8 -1
  159. package/tests/core-anti-growth.test.ts +192 -0
  160. package/tests/hook-workspace-nextaction-contract.test.ts +42 -0
  161. package/tests/hooks/confirm-first-gate.test.ts +333 -0
  162. package/tests/hooks/gate-auto-correct-shadow.test.ts +310 -0
  163. package/tests/hooks/gate-auto-correct.test.ts +665 -0
  164. package/tests/hooks/gate-rule-host-pipeline.test.ts +2 -1
  165. package/tests/hooks/pain.test.ts +269 -12
  166. package/tests/hooks/prompt-characterization.test.ts +500 -0
  167. package/tests/hooks/prompt-size-guard.test.ts +329 -0
  168. package/tests/hooks/runtime-v2-prompt-activation.test.ts +869 -0
  169. package/tests/index.test.ts +94 -1
  170. package/tests/integration/auto-entry-gate.test.ts +248 -0
  171. package/tests/integration/internalization-trigger-guard.test.ts +69 -0
  172. package/tests/integration/m8-legacy-paths.test.ts +63 -0
  173. package/tests/integration/runtime-v2-pain-guard.test.ts +125 -0
  174. package/tests/plugin-config-resolution-cutover.test.ts +359 -0
  175. package/tests/runtime-v2-discovery-guard.test.ts +154 -0
  176. package/tests/service/central-database.test.ts +457 -0
  177. package/tests/service/evolution-worker.correction-observer.test.ts +173 -0
  178. package/tests/service/evolution-worker.timeout.test.ts +11 -129
  179. package/tests/service/internalization-trigger-adapter.test.ts +251 -0
  180. package/tests/service/monitoring-query-service.test.ts +1 -47
  181. package/tests/service/queue-io.test.ts +1 -62
  182. package/tests/service/runtime-summary-service.test.ts +184 -3
  183. package/tests/service/workflow-watchdog.test.ts +0 -91
  184. package/tests/utils/file-lock.test.ts +5 -3
  185. package/tests/utils/session-key.test.ts +52 -0
  186. package/tests/utils/subagent-probe.test.ts +48 -1
  187. package/vitest.config.ts +4 -11
  188. package/.planning/codebase/ARCHITECTURE.md +0 -157
  189. package/.planning/codebase/CONCERNS.md +0 -145
  190. package/.planning/codebase/CONVENTIONS.md +0 -148
  191. package/.planning/codebase/INTEGRATIONS.md +0 -81
  192. package/.planning/codebase/STACK.md +0 -87
  193. package/.planning/codebase/STRUCTURE.md +0 -193
  194. package/.planning/codebase/TESTING.md +0 -243
  195. package/.planning/phases/01-basic-visualization/01-GAP-CLOSURE-VERIFICATION.md +0 -113
  196. package/docs/COMMAND_REFERENCE.md +0 -76
  197. package/docs/COMMAND_REFERENCE_EN.md +0 -79
  198. package/scripts/build-web.mjs +0 -46
  199. package/scripts/diagnose-nocturnal.mjs +0 -537
  200. package/scripts/seed-nocturnal-scenarios.mjs +0 -384
  201. package/src/commands/nocturnal-review.ts +0 -322
  202. package/src/commands/nocturnal-rollout.ts +0 -790
  203. package/src/commands/nocturnal-train.ts +0 -986
  204. package/src/commands/pd-reflect.ts +0 -88
  205. package/src/core/adaptive-thresholds.ts +0 -478
  206. package/src/core/diagnostician-task-store.ts +0 -192
  207. package/src/core/nocturnal-arbiter.ts +0 -715
  208. package/src/core/nocturnal-artifact-lineage.ts +0 -116
  209. package/src/core/nocturnal-artificer.ts +0 -257
  210. package/src/core/nocturnal-candidate-scoring.ts +0 -530
  211. package/src/core/nocturnal-compliance.ts +0 -1146
  212. package/src/core/nocturnal-dataset.ts +0 -763
  213. package/src/core/nocturnal-executability.ts +0 -428
  214. package/src/core/nocturnal-export.ts +0 -499
  215. package/src/core/nocturnal-paths.ts +0 -240
  216. package/src/core/nocturnal-reasoning-deriver.ts +0 -343
  217. package/src/core/nocturnal-rule-implementation-validator.ts +0 -246
  218. package/src/core/nocturnal-snapshot-contract.ts +0 -99
  219. package/src/core/nocturnal-trajectory-extractor.ts +0 -512
  220. package/src/core/nocturnal-trinity-types.ts +0 -218
  221. package/src/core/nocturnal-trinity.ts +0 -2680
  222. package/src/core/principle-internalization/deprecated-readiness.ts +0 -93
  223. package/src/core/principle-internalization/internalization-routing-policy.ts +0 -208
  224. package/src/core/principle-internalization/lifecycle-metrics.ts +0 -152
  225. package/src/http/principles-console-route.ts +0 -709
  226. package/src/service/central-health-service.ts +0 -49
  227. package/src/service/central-overview-service.ts +0 -138
  228. package/src/service/control-ui-query-service.ts +0 -900
  229. package/src/service/cooldown-strategy.ts +0 -97
  230. package/src/service/evolution-pain-context.ts +0 -79
  231. package/src/service/evolution-query-service.ts +0 -407
  232. package/src/service/health-query-service.ts +0 -1038
  233. package/src/service/nocturnal-config.ts +0 -214
  234. package/src/service/nocturnal-runtime.ts +0 -734
  235. package/src/service/nocturnal-service.ts +0 -1605
  236. package/src/service/nocturnal-target-selector.ts +0 -545
  237. package/src/service/sleep-cycle.ts +0 -157
  238. package/src/service/startup-reconciler.ts +0 -112
  239. package/src/service/subagent-workflow/correction-observer-types.ts +0 -82
  240. package/src/service/subagent-workflow/correction-observer-workflow-manager.ts +0 -250
  241. package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +0 -1
  242. package/src/service/subagent-workflow/dynamic-timeout.ts +0 -30
  243. package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +0 -268
  244. package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +0 -795
  245. package/src/service/subagent-workflow/runtime-direct-driver.ts +0 -268
  246. package/src/service/subagent-workflow/workflow-manager-base.ts +0 -580
  247. package/src/tools/write-pain-flag.ts +0 -215
  248. package/tests/commands/nocturnal-review.test.ts +0 -448
  249. package/tests/commands/nocturnal-train.test.ts +0 -97
  250. package/tests/commands/pd-reflect.test.ts +0 -49
  251. package/tests/core/adaptive-thresholds.test.ts +0 -261
  252. package/tests/core/nocturnal-arbiter.test.ts +0 -559
  253. package/tests/core/nocturnal-artifact-lineage.test.ts +0 -53
  254. package/tests/core/nocturnal-artificer.test.ts +0 -241
  255. package/tests/core/nocturnal-candidate-scoring.test.ts +0 -532
  256. package/tests/core/nocturnal-compliance-p-principles.test.ts +0 -133
  257. package/tests/core/nocturnal-compliance.test.ts +0 -646
  258. package/tests/core/nocturnal-dataset.test.ts +0 -892
  259. package/tests/core/nocturnal-e2e.test.ts +0 -234
  260. package/tests/core/nocturnal-executability.test.ts +0 -357
  261. package/tests/core/nocturnal-export.test.ts +0 -517
  262. package/tests/core/nocturnal-reasoning-deriver.test.ts +0 -372
  263. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +0 -428
  264. package/tests/core/nocturnal-rule-implementation-validator.test.ts +0 -127
  265. package/tests/core/nocturnal-snapshot-contract.test.ts +0 -121
  266. package/tests/core/nocturnal-trajectory-extractor.test.ts +0 -634
  267. package/tests/core/nocturnal-trinity.test.ts +0 -2053
  268. package/tests/core/pain-auto-repair.test.ts +0 -96
  269. package/tests/core/pain-integration.test.ts +0 -510
  270. package/tests/fixtures/nocturnal-reviewed-subset.json +0 -183
  271. package/tests/http/principles-console-route.test.ts +0 -162
  272. package/tests/integration/chaos-resilience.test.ts +0 -348
  273. package/tests/integration/empathy-workflow-integration.test.ts +0 -626
  274. package/tests/integration/pain-diagnostician-loop.e2e.test.ts +0 -380
  275. package/tests/service/control-ui-query-service.test.ts +0 -121
  276. package/tests/service/cooldown-strategy.test.ts +0 -164
  277. package/tests/service/data-endpoints-regression.test.ts +0 -834
  278. package/tests/service/empathy-observer-workflow-manager.test.ts +0 -175
  279. package/tests/service/evolution-worker.nocturnal.test.ts +0 -601
  280. package/tests/service/nocturnal-runtime-hardening.test.ts +0 -118
  281. package/tests/service/nocturnal-runtime.test.ts +0 -473
  282. package/tests/service/nocturnal-service-code-candidate.test.ts +0 -330
  283. package/tests/service/nocturnal-target-selector.test.ts +0 -615
  284. package/tests/service/startup-reconciler.test.ts +0 -148
  285. package/tests/tools/write-pain-flag.test.ts +0 -358
  286. package/ui/src/App.tsx +0 -45
  287. package/ui/src/api.ts +0 -220
  288. package/ui/src/charts.tsx +0 -955
  289. package/ui/src/components/ErrorState.tsx +0 -6
  290. package/ui/src/components/Loading.tsx +0 -13
  291. package/ui/src/components/ProtectedRoute.tsx +0 -12
  292. package/ui/src/components/Shell.tsx +0 -91
  293. package/ui/src/components/WorkspaceConfig.tsx +0 -178
  294. package/ui/src/components/index.ts +0 -5
  295. package/ui/src/context/auth.tsx +0 -80
  296. package/ui/src/context/theme.tsx +0 -66
  297. package/ui/src/hooks/useAutoRefresh.ts +0 -39
  298. package/ui/src/i18n/ui.ts +0 -473
  299. package/ui/src/main.tsx +0 -16
  300. package/ui/src/pages/EvolutionPage.tsx +0 -333
  301. package/ui/src/pages/FeedbackPage.tsx +0 -138
  302. package/ui/src/pages/GateMonitorPage.tsx +0 -136
  303. package/ui/src/pages/LoginPage.tsx +0 -89
  304. package/ui/src/pages/OverviewPage.tsx +0 -599
  305. package/ui/src/pages/SamplesPage.tsx +0 -174
  306. package/ui/src/pages/ThinkingModelsPage.tsx +0 -702
  307. package/ui/src/styles.css +0 -2020
  308. package/ui/src/types.ts +0 -384
  309. package/ui/src/utils/format.ts +0 -15
@@ -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
  },
@@ -1,2 +1,2 @@
1
- *
2
- !.gitignore
1
+ *
2
+ !.gitignore
@@ -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) {
@@ -10,7 +10,7 @@ You must execute the following steps in order (no skipping). ARGUMENTS: $ARGUMEN
10
10
  - Read the last entry in memory/CHECKPOINT.md
11
11
  - Read the last 3 entries in memory/ISSUE_LOG.md
12
12
  - Read recent decisions in memory/DECISIONS.md
13
- - If .state/.pain_flag exists, handle breakpoint recovery first
13
+ - Runtime V2 pain diagnosis uses task input/context, not `.state/.pain_flag`
14
14
 
15
15
  ## Step 1: Read Runtime Parameters & Self-Check
16
16
  - Read .principles/PROFILE.json, understand risk_paths, gate, tests.commands.
@@ -0,0 +1,67 @@
1
+ ---
2
+ name: pd-cli-operator
3
+ description: Use this skill when operating the Principles Disciple `pd` CLI: probing runtime health, manually recording pain, inspecting tasks/runs/candidates/artifacts, intaking candidates, viewing flow policy, or cleaning legacy state. It routes CLI commands safely and forbids direct `.state/.pain_flag` writes.
4
+ disable-model-invocation: false
5
+ ---
6
+
7
+ # PD CLI Operator
8
+
9
+ Use the `pd` CLI as the supported operator surface. Do not modify PD state files by hand unless a command explicitly says to do so.
10
+
11
+ ## Runtime V2 Pain Diagnosis
12
+
13
+ Manual pain diagnosis:
14
+ ```bash
15
+ pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
16
+ ```
17
+
18
+ Success requires:
19
+ - `status` is `succeeded`
20
+ - `candidateIds` is non-empty
21
+ - `ledgerEntryIds` is non-empty
22
+
23
+ Forbidden:
24
+ - Do not write `.state/.pain_flag`.
25
+ - Do not use `write_file`, shell redirection, `Set-Content`, `Out-File`, or `node -e` to create pain flags.
26
+
27
+ ## Health And Policy
28
+
29
+ Runtime probe:
30
+ ```bash
31
+ pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
32
+ ```
33
+
34
+ Flow policy:
35
+ ```bash
36
+ pd runtime flow show --workspace "<workspace>" --json
37
+ ```
38
+
39
+ ## Inspect Runtime V2 Objects
40
+
41
+ Tasks and runs:
42
+ ```bash
43
+ pd task show --task-id "<taskId>" --json
44
+ pd run show --run-id "<runId>" --json
45
+ ```
46
+
47
+ Candidates and 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
+ Manual intake:
55
+ ```bash
56
+ pd candidate intake --candidate-id "<candidateId>" --workspace "<workspace>" --json
57
+ ```
58
+
59
+ ## Legacy Admin
60
+
61
+ Only when explicitly cleaning old state:
62
+ ```bash
63
+ pd legacy cleanup --workspace "<workspace>" --dry-run
64
+ pd legacy cleanup --workspace "<workspace>" --apply
65
+ ```
66
+
67
+ Never use legacy cleanup as a diagnosis trigger.
@@ -89,7 +89,7 @@ You are a professional root cause analysis expert. You MUST strictly follow the
89
89
  **Goal**: Collect sufficient factual evidence, avoid analysis based on assumptions.
90
90
 
91
91
  **Execution Steps**:
92
- 1. Read `.state/.pain_flag` to get full context of Pain signal
92
+ 1. Use the Runtime V2 task input/context as the Pain signal source. Do not read `.state/.pain_flag` as the primary diagnosis input.
93
93
  2. Read last 100 lines of `.state/logs/events.jsonl`
94
94
  3. Use `read_file` or `search_file_content` to search codebase for relevant keywords
95
95
  4. Record all evidence sources (file path:line number)
@@ -211,7 +211,7 @@ A: GFI (Global Friction Index) measures the system's "pain level", range 0-100.
211
211
  A: EP is earned through successful task completion and problem resolution. Failures may deduct EP but have protection mechanisms. Reaching EP thresholds automatically upgrades your tier, unlocking more permissions (larger code modification limits).
212
212
 
213
213
  **Q: What is Pain Signal?**
214
- A: Pain Signal is a problem signal detected by the system, stored in `.state/.pain_flag`. When triggered, the system starts the evolution loop.
214
+ A: Pain Signal is a problem signal detected by the system. Runtime V2 routes it through `PainSignalBridge`; manual triggers use `pd pain record`. `.state/.pain_flag` is legacy compatibility only.
215
215
 
216
216
  **Q: How to view installed tool capabilities?**
217
217
  A: Check `.state/SYSTEM_CAPABILITIES.json` or run `/pd-bootstrap` to rescan.
@@ -1,52 +1,30 @@
1
1
  ---
2
2
  name: pd-pain-signal
3
- description: Manually inject a pain signal into the evolution system. Trigger conditions: (1) User reports agent stuck/looping/unresponsive (2) User says "record this issue", "force reflection", "trigger pain", "create pain signal", "人工注入 pain", "创建一个痛苦信号" (3) Tool failure with no follow-up action (4) User provides human intervention feedback. Mandatory enforcement: any manual pain flag creation scenario MUST use this skill, no bypassing allowed.
3
+ description: Manually trigger a Principles Disciple Runtime V2 pain diagnosis. Use this when the user reports the agent is stuck, looping, unresponsive, or asks to record/trigger a pain signal. Mandatory path: use `pd pain record`; never write `.state/.pain_flag` and never use legacy write_pain_flag tooling.
4
4
  disable-model-invocation: false
5
5
  ---
6
6
 
7
- # Pain Signal (Force Pain Signal)
7
+ # Pain Signal (Runtime V2)
8
8
 
9
- You are now the "Manual Intervention Pain" component.
9
+ Manual pain diagnosis must enter Runtime V2 through the CLI:
10
10
 
11
- **Task**:
12
- 1. Record the user's feedback `$ARGUMENTS` as a **high-priority** pain signal.
13
- 2. Inform the user that the signal has been injected, and suggest waiting for the next Hook trigger (e.g., Stop or PreCompact) or manually running `/reflection-log`.
14
-
15
- **Mandatory Enforcement**:
16
-
17
- When you need to create, write, or manually create a pain flag, you **MUST** use this skill via the `write_pain_flag` tool. Any bypassing of this skill to directly operate on files violates the mandatory constraint of this skill.
11
+ ```bash
12
+ pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
13
+ ```
18
14
 
19
- **Absolutely forbidden**:
20
- - ❌ Writing to `.state/.pain_flag` directly (any method)
21
- - ❌ Using bash heredoc (`cat <<EOF > .pain_flag`)
22
- - ❌ Using `echo "..." > .pain_flag`
23
- - ❌ Using `Set-Content` / `Out-File` or other PowerShell file-writing cmdlets
24
- - ❌ Using `node -e` to call `writePainFlag` or `buildPainFlag`
25
- - ❌ Any method that `toString()` a JavaScript object to the file
26
- - ❌ Using `exec` tool to invoke shell commands to write the pain_flag file
15
+ ## Forbidden
27
16
 
28
- **Why use the tool?**
29
- The `write_pain_flag` tool encapsulates correct KV-format serialization, ensuring `.pain_flag` is never corrupted. Historically, direct file writes caused `[object Object]` corruption and field loss (painScore score mapping failure). Using the tool is the only safe path.
17
+ - Do not write `.state/.pain_flag` directly.
18
+ - Do not use `write_file`, shell redirection, `Set-Content`, `Out-File`, `node -e`, or any other file-writing method to create `.state/.pain_flag`.
19
+ - Do not use `write_pain_flag`. That was a legacy path.
30
20
 
31
- **Parameters**:
32
- - `reason` (required): The reason for the pain signal — describe what went wrong
33
- - `score` (optional): Pain score 0-100, default 80 (manual intervention)
34
- - `source` (optional): Source, default `human_intervention`
35
- - `is_risky` (optional): Whether this is a high-risk action, default false
21
+ ## Verify
36
22
 
37
- **Example**:
38
- ```
39
- write_pain_flag({
40
- reason: "Agent edited a file without reading it first, breaking existing logic",
41
- score: 85,
42
- source: "human_intervention",
43
- is_risky: false
44
- })
23
+ Use:
24
+ ```bash
25
+ pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
26
+ pd candidate list --workspace "<workspace>" --json
27
+ pd runtime flow show --workspace "<workspace>" --json
45
28
  ```
46
29
 
47
- **Workflow**:
48
- 1. Recognize trigger condition → read this skill
49
- 2. Call `write_pain_flag` tool with `reason` and other parameters
50
- 3. Confirm tool executed successfully (returns ✅)
51
- 4. Inform user the pain signal has been injected; evolution system will process it on next heartbeat
52
- 5. Do NOT perform any direct file write operations after this
30
+ Success requires non-empty `candidateIds` and `ledgerEntryIds`.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: pd-runtime-v2
3
+ description: Use this skill when manually triggering, verifying, or debugging Principles Disciple Runtime V2 pain diagnosis. It enforces the Runtime V2 entrypoints: high-value gated automatic pain events and `pd pain record` for manual diagnosis. It forbids writing `.state/.pain_flag` directly.
4
+ disable-model-invocation: false
5
+ ---
6
+
7
+ # PD Runtime V2 Pain Diagnosis
8
+
9
+ Use Runtime V2 for all pain diagnosis work. Do not use legacy pain flag files as an entrypoint.
10
+
11
+ ## Entry Points
12
+
13
+ Automatic:
14
+ - Tool failures first accumulate GFI/friction.
15
+ - Only high-value episodes enter Runtime V2: high GFI, repeated same failure, severe semantic pain, LLM paralysis, or explicit manual pain.
16
+ - Approved `pain_detected` events enter `PainSignalBridge`.
17
+ - The bridge runs `DiagnosticianRunner`, commits candidates, and intakes them into the ledger.
18
+
19
+ Manual:
20
+ ```bash
21
+ pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
22
+ ```
23
+
24
+ Forbidden:
25
+ - Do not write `.state/.pain_flag`.
26
+ - Do not use `write_file`, shell redirection, `Set-Content`, `Out-File`, `node -e`, or any other file-writing method to create `.state/.pain_flag`.
27
+ - Do not use a `write_pain_flag` tool. Runtime V2 does not use that tool.
28
+
29
+ ## Status Commands
30
+
31
+ Runtime health:
32
+ ```bash
33
+ pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
34
+ ```
35
+
36
+ Flow policy:
37
+ ```bash
38
+ pd runtime flow show --workspace "<workspace>" --json
39
+ ```
40
+
41
+ Candidates:
42
+ ```bash
43
+ pd candidate list --workspace "<workspace>" --json
44
+ pd candidate show --candidate-id "<candidateId>" --workspace "<workspace>" --json
45
+ ```
46
+
47
+ ## Success Criteria
48
+
49
+ A diagnosis is successful only when:
50
+ - `status` is `succeeded`
51
+ - `candidateIds` is non-empty
52
+ - `ledgerEntryIds` is non-empty
53
+
54
+ Task creation alone is not success. A run without candidates or ledger entries is failed/retried/incomplete.
55
+
56
+ ## If Manual Diagnosis Is Needed
57
+
58
+ 1. Use `pd pain record`.
59
+ 2. Inspect JSON output.
60
+ 3. If `candidateIds` or `ledgerEntryIds` is empty, treat it as not completed.
61
+ 4. Use `pd candidate list/show` and `pd runtime flow show` for follow-up.
@@ -18,7 +18,7 @@
18
18
 
19
19
  - **项目最高战略**: `./memory/STRATEGY.md`
20
20
  - **项目物理计划**: `./PLAN.md`
21
- - **痛觉反射信号**: `./.state/.pain_flag`
21
+ - **痛觉反射信号**: Runtime V2 `PainSignalBridge`(手动触发使用 `pd pain record`;`.state/.pain_flag` 仅为 legacy compatibility)
22
22
  - **系统能力快照**: `./.state/SYSTEM_CAPABILITIES.json`
23
23
 
24
24
  ---
@@ -63,7 +63,7 @@
63
63
 
64
64
  ### 心跳时应该检查(轮流执行):
65
65
 
66
- - **痛觉与进化**: 检查 `.pain_flag`、`EVOLUTION_QUEUE.json`
66
+ - **痛觉与进化**: 检查 Runtime V2 诊断(`pd pain record`、candidate、ledger)和 `EVOLUTION_QUEUE.json`;`.pain_flag` 仅为 legacy compatibility
67
67
  - **战略对齐**: 对比 `CURRENT_FOCUS.md`,确保未偏离重点
68
68
  - **环境健康**: 检查工具链状态、项目根目录整洁度
69
69
 
@@ -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。*
@@ -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
  },