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,215 +0,0 @@
1
- import type { OpenClawPluginApi } from '../openclaw-sdk.js';
2
- import { Type } from '@sinclair/typebox';
3
- import { buildPainFlag } from '../core/pain.js';
4
- import { resolveWorkspaceDirFromApi } from '../core/path-resolver.js';
5
- import { TrajectoryRegistry } from '../core/trajectory.js';
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- import { atomicWriteFileSync } from '../utils/io.js';
9
-
10
- // Pain flag contract required fields
11
- const PAIN_FLAG_REQUIRED_FIELDS = ['source', 'score', 'time', 'reason'] as const;
12
-
13
- /**
14
- * Atomic file write: write to temp file then rename.
15
- * Prevents corruption if process crashes mid-write.
16
- */
17
- function writePainFlagAtomic(filePath: string, content: string): void {
18
- const dir = path.dirname(filePath);
19
- if (!fs.existsSync(dir)) {
20
- fs.mkdirSync(dir, { recursive: true });
21
- }
22
- atomicWriteFileSync(filePath, content);
23
- }
24
-
25
- /**
26
- * Creates the `write_pain_flag` tool.
27
- *
28
- * This tool allows the agent to record a pain signal when it recognizes
29
- * that it made a mistake, violated a principle, or needs to flag an issue
30
- * for later reflection.
31
- *
32
- * The tool wraps `buildPainFlag` + atomic `writePainFlag` to ensure:
33
- * - Correct KV format serialization (never [object Object] corruption)
34
- * - Atomic writes (temp file + rename, crash-safe)
35
- * - Full contract compliance (source, score, time, reason)
36
- *
37
- * The agent should NEVER write to .pain_flag directly.
38
- */
39
- export function createWritePainFlagTool(api: OpenClawPluginApi) {
40
- return {
41
- name: 'write_pain_flag',
42
- description:
43
- 'Record a pain signal to flag mistakes, principle violations, or issues for later reflection. ' +
44
- 'Use this tool INSTEAD of writing .pain_flag directly. ' +
45
- 'Pain signals are processed by the evolution system on the next heartbeat cycle.',
46
- parameters: Type.Object({
47
- reason: Type.String({
48
- description:
49
- 'Describe specifically what went wrong. ' +
50
- 'Include the error, the violated principle, or the issue. ' +
51
- 'Be concrete: "I edited config.ts without reading it first, breaking the export" ' +
52
- 'is better than "I made a mistake".',
53
- }),
54
- score: Type.Optional(Type.Number({
55
- description:
56
- 'Pain severity score (0-100). Default: 80. ' +
57
- 'Guidelines: 30-50 (minor issue), 50-70 (moderate error), ' +
58
- '70-100 (severe principle violation or data loss risk).',
59
- minimum: 0,
60
- maximum: 100,
61
- })),
62
- source: Type.Optional(Type.String({
63
- description:
64
- 'Source of the pain signal. ' +
65
- 'Values: manual (user flagged), tool_failure (tool error), ' +
66
- 'user_empathy (user frustration), principle_violation (principle broken), ' +
67
- 'human_intervention (user manually intervened). ' +
68
- 'Default: manual.',
69
- })),
70
- session_id: Type.Optional(Type.String({
71
- description:
72
- 'Session ID where the pain occurred. ' +
73
- 'If not provided, the system will use the current session.',
74
- })),
75
- is_risky: Type.Optional(Type.Boolean({
76
- description:
77
- 'Whether this involves a high-risk operation (e.g., writing to sensitive files). ' +
78
- 'Default: false.',
79
- })),
80
- }),
81
-
82
- async execute(
83
- _toolCallId: string,
84
- rawParams: Record<string, unknown>
85
- ): Promise<{ content: { type: string; text: string }[] }> {
86
- const reason = typeof rawParams.reason === 'string' ? rawParams.reason.trim() : '';
87
- const score = typeof rawParams.score === 'number' ? Math.max(0, Math.min(100, Math.round(rawParams.score))) : 80;
88
- const source = typeof rawParams.source === 'string' && rawParams.source.trim() ? rawParams.source.trim() : 'manual';
89
- const sessionId = typeof rawParams.session_id === 'string' ? rawParams.session_id.trim() : '';
90
- const isRisky = rawParams.is_risky === true;
91
-
92
- // ── Validate required fields ──
93
- if (!reason) {
94
- api.logger?.warn?.('[PD:write_pain_flag] Missing required field: reason');
95
- return {
96
- content: [{
97
- type: 'text',
98
- text: '❌ Error: The `reason` parameter is required.\n' +
99
- 'Describe specifically what went wrong. Example:\n' +
100
- '"I edited config.ts without reading it first, breaking the export"',
101
- }],
102
- };
103
- }
104
-
105
- // ── Resolve workspace ──
106
- const workspaceDir = resolveWorkspaceDirFromApi(api);
107
- if (!workspaceDir) {
108
- api.logger?.error?.('[PD:write_pain_flag] Cannot resolve workspace directory');
109
- return {
110
- content: [{
111
- type: 'text',
112
- text: '❌ Error: Cannot determine the workspace directory. ' +
113
- 'Please ensure you are in an active workspace.',
114
- }],
115
- };
116
- }
117
-
118
- try {
119
- // ── Record pain event to trajectory DB first (before flag file) ──
120
- // This ensures we have a real AUTOINCREMENT ID that flows through
121
- // the entire pain→principle→compile chain (painEventId propagation).
122
- let painEventId: number | undefined;
123
- try {
124
- const trajectory = TrajectoryRegistry.get(workspaceDir);
125
- painEventId = trajectory.recordPainEvent({
126
- sessionId: sessionId || 'unknown',
127
- source,
128
- score,
129
- reason,
130
- severity: null,
131
- origin: 'manual',
132
- confidence: null,
133
- text: undefined,
134
- });
135
- } catch (trajErr) {
136
- // If trajectory write fails, log but continue — the pain flag
137
- // itself is still valid and should be processed. The pain event
138
- // ID simply won't be available for the compiler's exact matching.
139
- api.logger?.warn?.(`[PD:write_pain_flag] Failed to record pain event to trajectory: ${String(trajErr)}`);
140
- }
141
-
142
- // ── Build pain flag data (KV format) ──
143
- const painData = buildPainFlag({
144
- source,
145
- score: String(score),
146
- reason,
147
- session_id: sessionId,
148
- is_risky: isRisky,
149
- pain_event_id: painEventId !== undefined ? String(painEventId) : undefined,
150
- });
151
-
152
- // ── Validate contract compliance ──
153
- const missingFields: string[] = [];
154
- for (const field of PAIN_FLAG_REQUIRED_FIELDS) {
155
- if (!painData[field] || painData[field].trim() === '') {
156
- missingFields.push(field);
157
- }
158
- }
159
- if (missingFields.length > 0) {
160
- api.logger?.error?.(`[PD:write_pain_flag] Pain flag missing required fields: ${missingFields.join(', ')}`);
161
- return {
162
- content: [{
163
- type: 'text',
164
- text: `❌ Error: Pain flag is missing required fields: ${missingFields.join(', ')}. ` +
165
- 'This is an internal error — please report it.',
166
- }],
167
- };
168
- }
169
-
170
- // ── Atomic write (temp file + rename) ──
171
- const painFlagPath = path.join(workspaceDir, '.state', '.pain_flag');
172
- const { serializeKvLines } = await import('../utils/io.js');
173
- const content = serializeKvLines(painData);
174
- writePainFlagAtomic(painFlagPath, content);
175
-
176
- // ── Log success ──
177
- api.logger?.info?.(
178
- `[PD:write_pain_flag] Pain signal recorded: source=${source}, score=${score}, ` +
179
- `reason="${reason.slice(0, 80)}"${reason.length > 80 ? '...' : ''}"`
180
- );
181
-
182
- // ── Agent feedback ──
183
- return {
184
- content: [{
185
- type: 'text',
186
- text: `✅ Pain signal recorded successfully.\n\n` +
187
- `- **Reason**: ${reason}\n` +
188
- `- **Score**: ${score}/100\n` +
189
- `- **Source**: ${source}\n` +
190
- `- **Risk**: ${isRisky ? 'Yes' : 'No'}\n` +
191
- `- **Session**: ${sessionId || '(current)'}\n\n` +
192
- `The evolution system will process this signal on the next heartbeat cycle ` +
193
- `(typically within 60 seconds).`,
194
- }],
195
- };
196
- } catch (err) {
197
- // ── Log failure with stack trace ──
198
- const errorMsg = err instanceof Error ? err.message : String(err);
199
- const stack = err instanceof Error ? err.stack?.split('\n').slice(0, 3).join(' → ') : '';
200
- api.logger?.error?.(
201
- `[PD:write_pain_flag] Failed to write pain flag: ${errorMsg}` +
202
- (stack ? `\n Stack: ${stack}` : '')
203
- );
204
-
205
- return {
206
- content: [{
207
- type: 'text',
208
- text: `❌ Failed to record pain signal: ${errorMsg}\n\n` +
209
- 'The error has been logged. Please try again or report this issue.',
210
- }],
211
- };
212
- }
213
- },
214
- };
215
- }
@@ -1,32 +0,0 @@
1
- ---
2
- name: plan-script
3
- description: Create a step-by-step movie-script style execution plan. Includes target files, verification metrics, and rollback strategy.
4
- disable-model-invocation: true
5
- ---
6
-
7
- # Plan Script
8
-
9
- **Goal**: Produce a "foolproof" executable plan to ensure controlled execution.
10
-
11
- Please generate plan in the following structure:
12
-
13
- ## 1. Target Files (Authorization List)
14
- - List file paths **uniquely authorized** for modification in this plan.
15
- - Format: `- path/to/file`
16
-
17
- ## 2. Steps (Execution Steps)
18
- 1. Operations specific to filenames and tool calls.
19
- 2. Each step includes expected intermediate state.
20
-
21
- ## 3. Metrics (Verification Metrics)
22
- - How to quantitatively prove this plan succeeded? (e.g., tests pass, command returns 0, specific string appears in logs).
23
-
24
- ## 4. Active Mental Models
25
- - Select exactly **2** meta-cognitive models from `.principles/THINKING_OS.md` that are most relevant to the current task.
26
- - Format: `- [T-0X] Model Name: Why is it needed for this specific task?`
27
-
28
- ## 5. Rollback (Rollback Strategy)
29
- - If step 2 fails, how to one-click restore to safe state?
30
-
31
- ---
32
- **Action**: Update above content to `PLAN.md` and set `STATUS: READY`.
@@ -1,32 +0,0 @@
1
- ---
2
- name: plan-script
3
- description: Create a step-by-step movie-script style execution plan. Includes target files, verification metrics, and rollback strategy.
4
- disable-model-invocation: true
5
- ---
6
-
7
- # Plan Script (计划编排)
8
-
9
- **目标**: 产生一份“傻瓜式”可执行计划,确保执行过程受控。
10
-
11
- 请按以下结构生成计划:
12
-
13
- ## 1. Target Files (授权清单)
14
- - 列出本次计划**唯一授权**修改的文件路径。
15
- - 格式:`- path/to/file`
16
-
17
- ## 2. Steps (执行步骤)
18
- 1. 具体到文件名和工具调用的操作。
19
- 2. 每个步骤包含预期的中间状态。
20
-
21
- ## 3. Metrics (验证指标)
22
- - 如何量化证明本计划成功了?(如:测试通过、命令返回 0、日志出现特定字符串)。
23
-
24
- ## 4. Active Mental Models (激活的思维模型)
25
- - 从 `.principles/THINKING_OS.md` 中挑选 **2 个** 最适合当前任务的元认知模型。
26
- - 格式:`- [T-0X] 模型名称:为什么在这个任务中需要它?`
27
-
28
- ## 5. Rollback (回滚方案)
29
- - 如果步骤 2 失败,如何一键恢复到安全状态?
30
-
31
- ---
32
- **动作**: 请将以上内容更新至 `PLAN.md`,并设置 `STATUS: READY`。