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
@@ -1,51 +1,30 @@
1
1
  ---
2
2
  name: pd-pain-signal
3
- description: 手动注入痛苦信号到进化系统。触发条件:(1) 用户报告 agent 卡住/循环/无响应 (2) 用户说"记录这个问题"、"强制反思"、"触发痛觉"、"创建一个痛苦信号"、"创建 pain signal"、"人工注入 pain" (3) 工具失败后 agent 没有后续动作 (4) 用户提供人工干预反馈。强制执行:任何手动创建 pain flag 的场景都必须使用本技能,不允许绕过。
3
+ description: 手动触发 Principles Disciple Runtime V2 痛苦诊断。用户报告 agent 卡住、循环、无响应,或要求记录/触发痛苦信号时使用。强制路径:使用 `pd pain record`;禁止写 `.state/.pain_flag`,禁止使用 legacy write_pain_flag 工具。
4
4
  disable-model-invocation: false
5
5
  ---
6
6
 
7
- # Pain Signal (强制喊痛)
7
+ # Pain Signal(Runtime V2)
8
8
 
9
- 你现在是"人工干预痛觉"组件。
9
+ 手动痛苦诊断必须通过 CLI 进入 Runtime V2:
10
10
 
11
- **任务**:
12
- 1. 将用户的反馈 `$ARGUMENTS` 作为一条**高优先级**的痛苦信号记录下来。
13
- 2. 告知用户信号已注入,并建议其等待下一个 Hook 触发(如 Stop 或 PreCompact)或手动运行 `/reflection-log`。
14
-
15
- **强制执行约束**:
16
-
17
- 当你需要创建、写入、手动创建 pain flag 时,**必须**使用本技能,通过 `write_pain_flag` 工具完成。任何绕过本技能直接操作文件的行为都违反了本技能的强制约束。
11
+ ```bash
12
+ pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
13
+ ```
18
14
 
19
- **绝对禁止**:
20
- - ❌ 直接写 `.state/.pain_flag` 文件(任何方式都不行)
21
- - ❌ 使用 bash heredoc(`cat <<EOF > .pain_flag`)
22
- - ❌ 使用 `echo "..." > .pain_flag`
23
- - ❌ 使用 `Set-Content` / `Out-File` 等 PowerShell 文件写入 cmdlets
24
- - ❌ 使用 `node -e` 调用 `writePainFlag` 或 `buildPainFlag`
25
- - ❌ 任何将 JavaScript 对象 `toString()` 写入文件的方式
26
- - ❌ 通过 `exec` 工具调用 shell 命令写入 pain_flag 文件
15
+ ## 禁止
27
16
 
28
- **原因**:`write_pain_flag` 工具封装了正确的 KV 格式序列化逻辑,确保 `.pain_flag` 文件不会被写坏。历史上多次因为直接写文件导致 `[object Object]` 损坏和字段丢失(painScore → score 映射失败)。使用工具是唯一安全路径。
17
+ - 不要直接写 `.state/.pain_flag`。
18
+ - 不要用 `write_file`、shell 重定向、`Set-Content`、`Out-File`、`node -e` 或任何文件写入方式创建 `.state/.pain_flag`。
19
+ - 不要使用 `write_pain_flag`。这是 legacy 路径。
29
20
 
30
- **参数说明**:
31
- - `reason` (必填): 痛苦的原因,描述具体发生了什么
32
- - `score` (可选): 痛苦分数 0-100,默认 80(人工干预)
33
- - `source` (可选): 来源,默认 `human_intervention`
34
- - `is_risky` (可选): 是否高风险,默认 false
21
+ ## 验证
35
22
 
36
- **示例**:
37
- ```
38
- write_pain_flag({
39
- reason: "Agent 没有读取文件就直接编辑,导致现有逻辑被破坏",
40
- score: 85,
41
- source: "human_intervention",
42
- is_risky: false
43
- })
23
+ 使用:
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
44
28
  ```
45
29
 
46
- **工作流**:
47
- 1. 识别到触发条件后,读取本技能描述
48
- 2. 调用 `write_pain_flag` 工具,传入 `reason` 等参数
49
- 3. 确认工具执行成功(返回 ✅)
50
- 4. 告知用户痛苦信号已注入,evolution 系统会在下次 heartbeat 时处理
51
- 5. 不得再执行任何直接文件写入操作
30
+ 成功标准是 `candidateIds` 和 `ledgerEntryIds` 都非空。
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: pd-runtime-v2
3
+ description: 当需要手动触发、验证或调试 Principles Disciple Runtime V2 痛苦诊断时使用。本技能强制使用 Runtime V2 入口:自动入口是高价值门控痛苦事件,手动入口是 `pd pain record`。禁止直接写 `.state/.pain_flag`。
4
+ disable-model-invocation: false
5
+ ---
6
+
7
+ # PD Runtime V2 痛苦诊断
8
+
9
+ 所有痛苦诊断都走 Runtime V2。不要把 legacy pain flag 文件当作诊断入口。
10
+
11
+ ## 入口
12
+
13
+ 自动入口:
14
+ - 工具失败先累计 GFI/摩擦。
15
+ - 只有高价值 episode 才进入 Runtime V2:高 GFI、重复同类失败、严重语义痛苦、LLM paralysis,或明确手动 pain。
16
+ - 通过门控的 `pain_detected` 进入 `PainSignalBridge`。
17
+ - Bridge 调用 `DiagnosticianRunner`,提交 candidate,并 intake 到 ledger。
18
+
19
+ 手动入口:
20
+ ```bash
21
+ pd pain record --reason "<reason>" --score <0-100> --workspace "<workspace>" --json
22
+ ```
23
+
24
+ 禁止入口:
25
+ - 不要写 `.state/.pain_flag`。
26
+ - 不要用 `write_file`、shell 重定向、`Set-Content`、`Out-File`、`node -e` 或任何文件写入方式创建 `.state/.pain_flag`。
27
+ - 不要使用 `write_pain_flag` 工具。Runtime V2 不使用这个工具。
28
+
29
+ ## 状态查看命令
30
+
31
+ 运行时健康检查:
32
+ ```bash
33
+ pd runtime probe --runtime pi-ai --workspace "<workspace>" --json
34
+ ```
35
+
36
+ 业务流策略:
37
+ ```bash
38
+ pd runtime flow show --workspace "<workspace>" --json
39
+ ```
40
+
41
+ 候选原则:
42
+ ```bash
43
+ pd candidate list --workspace "<workspace>" --json
44
+ pd candidate show --candidate-id "<candidateId>" --workspace "<workspace>" --json
45
+ ```
46
+
47
+ ## 成功标准
48
+
49
+ 一次诊断只有在同时满足以下条件时才算成功:
50
+ - `status` 是 `succeeded`
51
+ - `candidateIds` 非空
52
+ - `ledgerEntryIds` 非空
53
+
54
+ 只创建 task 不算成功。没有 candidate 或 ledger entry 的 run 是失败、重试或未完成。
55
+
56
+ ## 需要手动诊断时
57
+
58
+ 1. 使用 `pd pain record`。
59
+ 2. 检查 JSON 输出。
60
+ 3. 如果 `candidateIds` 或 `ledgerEntryIds` 为空,视为未完成。
61
+ 4. 用 `pd candidate list/show` 和 `pd runtime flow show` 继续排查。
@@ -17,7 +17,7 @@ const __dirname = dirname(__filename);
17
17
  const packageRoot = join(__dirname, '..');
18
18
 
19
19
  describe('Build Artifacts', () => {
20
- const isProductionBuild = existsSync(join(packageRoot, 'dist'));
20
+ const isProductionBuild = existsSync(join(packageRoot, 'dist', 'bundle.js'));
21
21
 
22
22
  describe('Required paths', () => {
23
23
  const requiredPaths = [
@@ -36,8 +36,6 @@ describe('Build Artifacts', () => {
36
36
  });
37
37
 
38
38
  // NOTE: agents/ directory was removed in favor of embedded prompts.
39
- // All role prompts are now inlined in nocturnal-trinity.ts at build time.
40
- // See: nocturnal-trinity.ts NOCTURNAL_DREAMER_PROMPT, etc.
41
39
 
42
40
  describe('Templates', () => {
43
41
  it('should have templates directory with subdirectories', () => {
@@ -4,10 +4,7 @@ import * as path from 'path';
4
4
  import { afterEach, describe, expect, it } from 'vitest';
5
5
  import { handleEvolutionStatusCommand } from '../../src/commands/evolution-status.js';
6
6
  import { handlePrincipleRollbackCommand } from '../../src/commands/principle-rollback.js';
7
- import { appendCandidateArtifactLineageRecord } from '../../src/core/nocturnal-artifact-lineage.js';
8
- import { getImplementationAssetRoot } from '../../src/core/code-implementation-storage.js';
9
7
  import { EvolutionReducerImpl } from '../../src/core/evolution-reducer.js';
10
- import { saveLedger } from '../../src/core/principle-tree-ledger.js';
11
8
  import { WorkflowFunnelLoader } from '../../src/core/workflow-funnel-loader.js';
12
9
  import { RuntimeSummaryService } from '../../src/service/runtime-summary-service.js';
13
10
 
@@ -226,121 +223,6 @@ describe('evolution commands', () => {
226
223
  expect(result.text).toContain('timeout_only');
227
224
  });
228
225
 
229
- it('includes internalization route recommendations when principle lifecycle evidence exists', () => {
230
- const workspace = makeTempDir();
231
- const stateDir = path.join(workspace, '.state');
232
-
233
- saveLedger(stateDir, {
234
- trainingStore: {
235
- 'P-001': {
236
- principleId: 'P-001',
237
- evaluability: 'weak_heuristic',
238
- applicableOpportunityCount: 5,
239
- observedViolationCount: 2,
240
- complianceRate: 0.6,
241
- violationTrend: -0.2,
242
- generatedSampleCount: 0,
243
- approvedSampleCount: 0,
244
- includedTrainRunIds: [],
245
- deployedCheckpointIds: [],
246
- internalizationStatus: 'internalized',
247
- },
248
- },
249
- tree: {
250
- principles: {
251
- 'P-001': {
252
- id: 'P-001',
253
- version: 1,
254
- text: 'Prefer cheap safe internalization',
255
- triggerPattern: 'write',
256
- action: 'prefer the cheapest viable fix',
257
- status: 'active',
258
- priority: 'P1',
259
- scope: 'general',
260
- evaluability: 'weak_heuristic',
261
- valueScore: 0,
262
- adherenceRate: 0,
263
- painPreventedCount: 0,
264
- derivedFromPainIds: [],
265
- ruleIds: ['R-001'],
266
- conflictsWithPrincipleIds: [],
267
- createdAt: '2026-04-08T00:00:00.000Z',
268
- updatedAt: '2026-04-08T00:00:00.000Z',
269
- },
270
- },
271
- rules: {
272
- 'R-001': {
273
- id: 'R-001',
274
- version: 1,
275
- name: 'Coach cautious writes',
276
- description: 'Encourage safer writes before escalating to hard boundaries.',
277
- type: 'skill',
278
- triggerCondition: 'tool=write',
279
- enforcement: 'warn',
280
- action: 'warn before risky write',
281
- principleId: 'P-001',
282
- status: 'implemented',
283
- coverageRate: 0,
284
- falsePositiveRate: 0,
285
- implementationIds: ['IMPL-001'],
286
- createdAt: '2026-04-08T00:00:00.000Z',
287
- updatedAt: '2026-04-08T00:00:00.000Z',
288
- },
289
- },
290
- implementations: {
291
- 'IMPL-001': {
292
- id: 'IMPL-001',
293
- ruleId: 'R-001',
294
- type: 'code',
295
- path: 'implementations/IMPL-001/entry.js',
296
- version: 'v1',
297
- coversCondition: 'risky write',
298
- coveragePercentage: 60,
299
- lifecycleState: 'candidate',
300
- createdAt: '2026-04-08T00:00:00.000Z',
301
- updatedAt: '2026-04-08T00:00:00.000Z',
302
- },
303
- },
304
- metrics: {},
305
- lastUpdated: '2026-04-08T00:00:00.000Z',
306
- },
307
- });
308
-
309
- const replayDir = path.join(getImplementationAssetRoot(stateDir, 'IMPL-001'), 'replays');
310
- fs.mkdirSync(replayDir, { recursive: true });
311
- writeJson(path.join(replayDir, '2026-04-08T00-00-00-000Z.json'), {
312
- implementationId: 'IMPL-001',
313
- generatedAt: '2026-04-08T00:00:00.000Z',
314
- overallDecision: 'needs-review',
315
- blockers: [],
316
- sampleFingerprints: ['sample-1', 'sample-2', 'sample-3'],
317
- replayResults: {
318
- painNegative: { total: 2, passed: 2, failed: 0, details: [] },
319
- successPositive: { total: 2, passed: 1, failed: 1, details: [] },
320
- principleAnchor: { total: 1, passed: 1, failed: 0, details: [] },
321
- },
322
- });
323
-
324
- appendCandidateArtifactLineageRecord(workspace, {
325
- artifactId: 'artifact-1',
326
- principleId: 'P-001',
327
- ruleId: 'R-001',
328
- sessionId: 'session-1',
329
- sourceSnapshotRef: 'snapshot-1',
330
- sourcePainIds: ['pain-1'],
331
- sourceGateBlockIds: ['gate-1'],
332
- storagePath: getImplementationAssetRoot(stateDir, 'IMPL-001'),
333
- implementationId: 'IMPL-001',
334
- createdAt: '2026-04-08T00:00:00.000Z',
335
- });
336
-
337
- const result = handleEvolutionStatusCommand({
338
- config: { workspaceDir: workspace, language: 'en' },
339
- } as any);
340
-
341
- expect(result.text).toContain('internalization routes: P-001:skill@');
342
- });
343
-
344
226
  it('renders workflowFunnel blocks when YAML-driven funnels are present', () => {
345
227
  const workspace = makeTempDir();
346
228
  const stateDir = path.join(workspace, '.state');
@@ -238,7 +238,7 @@ describe('bootstrap-rules', () => {
238
238
 
239
239
  // Regression test for Issue #356
240
240
  it('T-01..T-10 as deterministic — no crash on fresh workspace', () => {
241
- const trainingStates = [
241
+ const trainingStates: LegacyPrincipleTrainingState[] = [
242
242
  { principleId: 'T-01', evaluability: 'deterministic', applicableOpportunityCount: 0, observedViolationCount: 0, complianceRate: 1, violationTrend: 0, generatedSampleCount: 0, approvedSampleCount: 0, includedTrainRunIds: [], deployedCheckpointIds: [], internalizationStatus: 'needs_training' },
243
243
  { principleId: 'T-02', evaluability: 'deterministic', applicableOpportunityCount: 0, observedViolationCount: 0, complianceRate: 1, violationTrend: 0, generatedSampleCount: 0, approvedSampleCount: 0, includedTrainRunIds: [], deployedCheckpointIds: [], internalizationStatus: 'needs_training' },
244
244
  ];
@@ -46,7 +46,7 @@ describe('PainConfig', () => {
46
46
 
47
47
  // Check some defaults
48
48
  expect(config.get('thresholds.pain_trigger')).toBe(40);
49
- expect(config.get('scores.paralysis')).toBe(30);
49
+ expect(config.get('scores.paralysis')).toBe(45); // PRI-274: must be >= pain_trigger (40)
50
50
  });
51
51
 
52
52
  it('should return nested values using dot notation', () => {
@@ -279,5 +279,40 @@ describe('EventLog', () => {
279
279
  // Other sub-counters should not be set
280
280
  expect(stats.evolution.reportsMissingJson).toBe(0);
281
281
  });
282
+
283
+ it('should count rulehost_auto_correct_applied events', () => {
284
+ const today = new Date().toISOString().slice(0, 10);
285
+
286
+ eventLog.recordRuleHostAutoCorrectProposed({
287
+ toolName: 'write',
288
+ filePath: '/test/file.ts',
289
+ ruleId: 'r1',
290
+ confidence: 0.9,
291
+ reason: 'fix typo',
292
+ applicationMode: 'live',
293
+ correctedFields: ['content'],
294
+ validationValid: true,
295
+ });
296
+ eventLog.recordRuleHostAutoCorrectApplied({
297
+ toolName: 'write',
298
+ filePath: '/test/file.ts',
299
+ ruleId: 'r1',
300
+ confidence: 0.9,
301
+ reason: 'fix typo',
302
+ correctedFields: [{ field: 'content', original: 'broken', applied: 'fixed' }],
303
+ });
304
+
305
+ const stats = eventLog.getDailyStats(today);
306
+ expect(stats.evolution.rulehostAutoCorrectProposed).toBe(1);
307
+ expect(stats.evolution.rulehostAutoCorrectApplied).toBe(1);
308
+ });
309
+
310
+ it('should have rulehostAutoCorrectApplied field in evolution stats', () => {
311
+ const today = new Date().toISOString().slice(0, 10);
312
+ const stats = eventLog.getDailyStats(today);
313
+
314
+ expect(stats.evolution).toBeDefined();
315
+ expect(stats.evolution.rulehostAutoCorrectApplied).toBe(0);
316
+ });
282
317
  });
283
318
  });