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
@@ -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
  },
@@ -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) {
@@ -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.
@@ -51,7 +51,7 @@ Output:
51
51
 
52
52
  ## Step 6: Delegate Planner (Movie Script Plan)
53
53
  - Planner outputs Plan (steps/commands/metrics/rollback).
54
- - Write plan to PLAN.md (STATUS line must exist).
54
+ - Write plan to a planning document for owner review.
55
55
  - **Task Sync**:
56
56
  - If `CLAUDE_CODE_TASK_LIST_ID` is set, you must convert the Plan's core steps to Native Tasks (via natural language command "Add task..." or related tools).
57
57
  - If not set and in interactive mode, prompt user: "Recommend running `export CLAUDE_CODE_TASK_LIST_ID=task-$(date +%s)` to enable persistent task tracking."
@@ -59,7 +59,7 @@ Output:
59
59
  - **Performance Evaluation**: After task completion, write to `.state/.verdict.json`. Format follows `@.principles/schemas/agent_verdict_schema.json`.
60
60
 
61
61
  ## Step 7: Delegate Implementer (Execution)
62
- - Implementer can only execute according to PLAN. Any deviation must first update PLAN.
62
+ - Implementer executes according to the plan from Step 6. Any deviation must first be approved by updating the plan.
63
63
  - **Performance Evaluation**: After task completion, write to `.state/.verdict.json` based on verification results. Format follows `@.principles/schemas/agent_verdict_schema.json`.
64
64
 
65
65
  ## Step 8: Delegate Reviewer (Review)
@@ -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)
@@ -185,7 +185,7 @@ For complex scenarios, combine multiple skills:
185
185
 
186
186
  | Scenario | Combined Flow |
187
187
  |----------|---------------|
188
- | Major refactor | `/pd-evolve` → `plan-script` → `deductive-audit` → execute |
188
+ | Major refactor | `/pd-evolve` → `deductive-audit` → execute |
189
189
  | System optimization | `/pd-status` → `evolve-system` → `root-cause` |
190
190
  | Project review | `/pd-daily` → `/pd-okr` → `reflection-log` |
191
191
 
@@ -196,7 +196,6 @@ These skills are usually called automatically by the system, but advanced users
196
196
  - `triage` - Issue triage
197
197
  - `root-cause` - Root cause analysis
198
198
  - `deductive-audit` - Deductive audit
199
- - `plan-script` - Plan orchestration
200
199
  - `reflection` - Metacognitive reflection
201
200
  - `reflection-log` - Reflection logging
202
201
 
@@ -211,7 +210,7 @@ A: GFI (Global Friction Index) measures the system's "pain level", range 0-100.
211
210
  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
211
 
213
212
  **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.
213
+ 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
214
 
216
215
  **Q: How to view installed tool capabilities?**
217
216
  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.
@@ -17,8 +17,7 @@
17
17
  基于**项目战场**中的相对路径进行决策:
18
18
 
19
19
  - **项目最高战略**: `./memory/STRATEGY.md`
20
- - **项目物理计划**: `./PLAN.md`
21
- - **痛觉反射信号**: `./.state/.pain_flag`
20
+ - **痛觉反射信号**: Runtime V2 `PainSignalBridge`(手动触发使用 `pd pain record`;`.state/.pain_flag` 仅为 legacy compatibility)
22
21
  - **系统能力快照**: `./.state/SYSTEM_CAPABILITIES.json`
23
22
 
24
23
  ---
@@ -63,7 +62,7 @@
63
62
 
64
63
  ### 心跳时应该检查(轮流执行):
65
64
 
66
- - **痛觉与进化**: 检查 `.pain_flag`、`EVOLUTION_QUEUE.json`
65
+ - **痛觉与进化**: 检查 Runtime V2 诊断(`pd pain record`、candidate、ledger)和 `EVOLUTION_QUEUE.json`;`.pain_flag` 仅为 legacy compatibility
67
66
  - **战略对齐**: 对比 `CURRENT_FOCUS.md`,确保未偏离重点
68
67
  - **环境健康**: 检查工具链状态、项目根目录整洁度
69
68
 
@@ -158,12 +157,13 @@
158
157
  你默认处于架构师模式。
159
158
 
160
159
  - **L1 (直接执行)**:单文件微调、文档维护 → 直接操作
161
- - **L2 (委派协议)**:重大变更 → **必须**更新 `./PLAN.md` 并使用 `pd_spawn_agent` 工具委派任务
160
+ - **L2 (委派协议)**:重大变更 → 建议先描述计划并获得 owner 确认后再执行
162
161
 
163
- ### 状态机门禁 (State Machine Gating)
162
+ ### 计划引导 (Planning Guidance)
164
163
 
165
- - **唯一事实源**:`./PLAN.md`
166
- - **物理拦截**:插件已激活。若 `PLAN.md` `READY` 且尝试修改风险路径,调用将被阻断
164
+ - 对复杂任务,建议先起草计划文档并获得 owner 批准后再做大幅修改
165
+ - 这是行为建议,不是内置门禁 PD 默认不强制"先计划后执行"
166
+ - 若 owner 批准的 RuleHost 规则强制了计划行为,该规则会自动生效
167
167
  - **防止污染**:禁止将执行层细节写回战略文档
168
168
 
169
169
  ---