principles-disciple 1.8.0 → 1.8.2

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 (460) hide show
  1. package/ADVANCED_CONFIG_ZH.md +97 -0
  2. package/AGENT_INSTALL.md +173 -0
  3. package/AGENT_INSTALL_EN.md +173 -0
  4. package/INSTALL.md +256 -0
  5. package/SKILL.md +63 -0
  6. package/docs/COMMAND_REFERENCE.md +76 -0
  7. package/docs/COMMAND_REFERENCE_EN.md +79 -0
  8. package/esbuild.config.js +75 -0
  9. package/openclaw.plugin.json +6 -1
  10. package/package.json +13 -15
  11. package/scripts/build-web.mjs +46 -0
  12. package/scripts/install-dependencies.cjs +47 -0
  13. package/scripts/sync-plugin.mjs +802 -0
  14. package/scripts/verify-build.mjs +109 -0
  15. package/src/agents/nocturnal-dreamer.md +152 -0
  16. package/src/agents/nocturnal-philosopher.md +138 -0
  17. package/src/agents/nocturnal-reflector.md +126 -0
  18. package/src/agents/nocturnal-scribe.md +164 -0
  19. package/src/commands/capabilities.ts +85 -0
  20. package/{dist/commands/context.js → src/commands/context.ts} +78 -38
  21. package/src/commands/evolution-status.ts +146 -0
  22. package/src/commands/export.ts +111 -0
  23. package/src/commands/focus.ts +533 -0
  24. package/src/commands/nocturnal-review.ts +311 -0
  25. package/src/commands/nocturnal-rollout.ts +763 -0
  26. package/src/commands/nocturnal-train.ts +1002 -0
  27. package/{dist/commands/pain.js → src/commands/pain.ts} +68 -49
  28. package/src/commands/principle-rollback.ts +27 -0
  29. package/{dist/commands/rollback.js → src/commands/rollback.ts} +44 -12
  30. package/src/commands/samples.ts +60 -0
  31. package/src/commands/strategy.ts +38 -0
  32. package/{dist/commands/thinking-os.js → src/commands/thinking-os.ts} +59 -36
  33. package/src/commands/workflow-debug.ts +128 -0
  34. package/{dist/config/defaults/runtime.js → src/config/defaults/runtime.ts} +12 -5
  35. package/src/config/errors.ts +163 -0
  36. package/{dist/config/index.d.ts → src/config/index.ts} +2 -1
  37. package/src/constants/diagnostician.ts +66 -0
  38. package/src/constants/tools.ts +62 -0
  39. package/src/core/adaptive-thresholds.ts +476 -0
  40. package/{dist/core/config-service.js → src/core/config-service.ts} +7 -4
  41. package/{dist/core/config.js → src/core/config.ts} +158 -46
  42. package/src/core/control-ui-db.ts +435 -0
  43. package/{dist/core/detection-funnel.js → src/core/detection-funnel.ts} +36 -21
  44. package/{dist/core/detection-service.js → src/core/detection-service.ts} +7 -4
  45. package/{dist/core/dictionary-service.js → src/core/dictionary-service.ts} +7 -4
  46. package/{dist/core/dictionary.js → src/core/dictionary.ts} +57 -34
  47. package/src/core/empathy-keyword-matcher.ts +327 -0
  48. package/src/core/empathy-types.ts +218 -0
  49. package/src/core/event-log.ts +544 -0
  50. package/src/core/evolution-engine.ts +612 -0
  51. package/src/core/evolution-logger.ts +353 -0
  52. package/src/core/evolution-migration.ts +77 -0
  53. package/src/core/evolution-reducer.ts +731 -0
  54. package/src/core/evolution-types.ts +456 -0
  55. package/src/core/external-training-contract.ts +527 -0
  56. package/src/core/focus-history.ts +1458 -0
  57. package/src/core/hygiene/tracker.ts +117 -0
  58. package/{dist/core/init.js → src/core/init.ts} +39 -26
  59. package/src/core/local-worker-routing.ts +617 -0
  60. package/{dist/core/migration.js → src/core/migration.ts} +18 -11
  61. package/src/core/model-deployment-registry.ts +722 -0
  62. package/src/core/model-training-registry.ts +813 -0
  63. package/src/core/nocturnal-arbiter.ts +706 -0
  64. package/src/core/nocturnal-candidate-scoring.ts +392 -0
  65. package/src/core/nocturnal-compliance.ts +1075 -0
  66. package/src/core/nocturnal-dataset.ts +668 -0
  67. package/src/core/nocturnal-executability.ts +428 -0
  68. package/src/core/nocturnal-export.ts +390 -0
  69. package/{dist/core/nocturnal-paths.js → src/core/nocturnal-paths.ts} +49 -23
  70. package/src/core/nocturnal-trajectory-extractor.ts +484 -0
  71. package/src/core/nocturnal-trinity.ts +1384 -0
  72. package/src/core/pain.ts +122 -0
  73. package/{dist/core/path-resolver.js → src/core/path-resolver.ts} +157 -36
  74. package/{dist/core/paths.js → src/core/paths.ts} +13 -4
  75. package/src/core/principle-training-state.ts +450 -0
  76. package/src/core/profile.ts +226 -0
  77. package/src/core/promotion-gate.ts +822 -0
  78. package/{dist/core/risk-calculator.js → src/core/risk-calculator.ts} +42 -16
  79. package/{dist/core/session-tracker.js → src/core/session-tracker.ts} +185 -63
  80. package/src/core/shadow-observation-registry.ts +534 -0
  81. package/{dist/core/system-logger.js → src/core/system-logger.ts} +9 -5
  82. package/src/core/thinking-models.ts +217 -0
  83. package/src/core/training-program.ts +630 -0
  84. package/src/core/trajectory-types.ts +243 -0
  85. package/src/core/trajectory.ts +1673 -0
  86. package/{dist/core/workspace-context.js → src/core/workspace-context.ts} +57 -32
  87. package/src/hooks/bash-risk.ts +171 -0
  88. package/src/hooks/edit-verification.ts +295 -0
  89. package/src/hooks/gate-block-helper.ts +160 -0
  90. package/src/hooks/gate.ts +210 -0
  91. package/src/hooks/gfi-gate.ts +177 -0
  92. package/src/hooks/lifecycle.ts +326 -0
  93. package/{dist/hooks/llm.js → src/hooks/llm.ts} +166 -139
  94. package/src/hooks/message-sanitize.ts +45 -0
  95. package/src/hooks/pain.ts +384 -0
  96. package/src/hooks/progressive-trust-gate.ts +174 -0
  97. package/src/hooks/prompt.ts +920 -0
  98. package/src/hooks/subagent.ts +207 -0
  99. package/src/hooks/thinking-checkpoint.ts +73 -0
  100. package/src/hooks/trajectory-collector.ts +290 -0
  101. package/src/http/principles-console-route.ts +716 -0
  102. package/src/i18n/commands.ts +117 -0
  103. package/src/index.ts +694 -0
  104. package/src/service/central-database.ts +831 -0
  105. package/src/service/control-ui-query-service.ts +888 -0
  106. package/src/service/evolution-query-service.ts +405 -0
  107. package/src/service/evolution-worker.ts +1646 -0
  108. package/src/service/health-query-service.ts +836 -0
  109. package/{dist/service/nocturnal-runtime.js → src/service/nocturnal-runtime.ts} +263 -36
  110. package/src/service/nocturnal-service.ts +1015 -0
  111. package/src/service/nocturnal-target-selector.ts +532 -0
  112. package/src/service/phase3-input-filter.ts +237 -0
  113. package/src/service/runtime-summary-service.ts +757 -0
  114. package/src/service/subagent-workflow/deep-reflect-workflow-manager.ts +513 -0
  115. package/src/service/subagent-workflow/empathy-observer-workflow-manager.ts +603 -0
  116. package/src/service/subagent-workflow/index.ts +51 -0
  117. package/src/service/subagent-workflow/nocturnal-workflow-manager.ts +856 -0
  118. package/src/service/subagent-workflow/runtime-direct-driver.ts +166 -0
  119. package/src/service/subagent-workflow/types.ts +378 -0
  120. package/src/service/subagent-workflow/workflow-store.ts +328 -0
  121. package/src/service/trajectory-service.ts +15 -0
  122. package/{dist/tools/critique-prompt.js → src/tools/critique-prompt.ts} +25 -8
  123. package/src/tools/deep-reflect.ts +349 -0
  124. package/{dist/tools/model-index.js → src/tools/model-index.ts} +33 -17
  125. package/src/types/event-types.ts +453 -0
  126. package/src/types/hygiene-types.ts +31 -0
  127. package/src/types/principle-tree-schema.ts +244 -0
  128. package/src/types/runtime-summary.ts +49 -0
  129. package/src/types.ts +74 -0
  130. package/src/utils/file-lock.ts +391 -0
  131. package/{dist/utils/glob-match.js → src/utils/glob-match.ts} +21 -20
  132. package/{dist/utils/hashing.js → src/utils/hashing.ts} +6 -4
  133. package/src/utils/io.ts +110 -0
  134. package/{dist/utils/nlp.js → src/utils/nlp.ts} +19 -12
  135. package/{dist/utils/plugin-logger.js → src/utils/plugin-logger.ts} +33 -8
  136. package/src/utils/subagent-probe.ts +94 -0
  137. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
  138. package/templates/pain_settings.json +2 -1
  139. package/tests/README.md +120 -0
  140. package/tests/build-artifacts.test.ts +111 -0
  141. package/tests/commands/evolution-status.test.ts +222 -0
  142. package/tests/commands/evolver.test.ts +22 -0
  143. package/tests/commands/export.test.ts +78 -0
  144. package/tests/commands/nocturnal-review.test.ts +448 -0
  145. package/tests/commands/nocturnal-train.test.ts +97 -0
  146. package/tests/commands/pain.test.ts +108 -0
  147. package/tests/commands/samples.test.ts +65 -0
  148. package/tests/commands/strategy.test.ts +34 -0
  149. package/tests/commands/thinking-os.test.ts +88 -0
  150. package/tests/core/adaptive-thresholds.test.ts +261 -0
  151. package/tests/core/config-service.test.ts +89 -0
  152. package/tests/core/config.test.ts +90 -0
  153. package/tests/core/control-ui-db.test.ts +75 -0
  154. package/tests/core/core-template-guidance.test.ts +21 -0
  155. package/tests/core/detection-funnel.test.ts +63 -0
  156. package/tests/core/detection-service.test.ts +50 -0
  157. package/tests/core/dictionary-service.test.ts +116 -0
  158. package/tests/core/dictionary.test.ts +168 -0
  159. package/tests/core/empathy-keyword-matcher.test.ts +209 -0
  160. package/tests/core/event-log.test.ts +181 -0
  161. package/tests/core/evolution-e2e.test.ts +58 -0
  162. package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
  163. package/tests/core/evolution-engine.test.ts +562 -0
  164. package/tests/core/evolution-logger.test.ts +148 -0
  165. package/tests/core/evolution-migration.test.ts +50 -0
  166. package/tests/core/evolution-paths.test.ts +21 -0
  167. package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
  168. package/tests/core/evolution-reducer.test.ts +180 -0
  169. package/tests/core/evolution-types-loop.test.ts +48 -0
  170. package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
  171. package/tests/core/external-training-contract.test.ts +463 -0
  172. package/tests/core/focus-history.test.ts +682 -0
  173. package/tests/core/init-flatten.test.ts +69 -0
  174. package/tests/core/init-refactor.test.ts +87 -0
  175. package/tests/core/init-v1.3.test.ts +46 -0
  176. package/tests/core/init.test.ts +190 -0
  177. package/tests/core/local-worker-routing.test.ts +757 -0
  178. package/tests/core/migration.test.ts +84 -0
  179. package/tests/core/model-deployment-registry.test.ts +845 -0
  180. package/tests/core/model-training-registry.test.ts +889 -0
  181. package/tests/core/nocturnal-arbiter.test.ts +494 -0
  182. package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
  183. package/tests/core/nocturnal-compliance.test.ts +646 -0
  184. package/tests/core/nocturnal-dataset.test.ts +892 -0
  185. package/tests/core/nocturnal-executability.test.ts +357 -0
  186. package/tests/core/nocturnal-export.test.ts +462 -0
  187. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
  188. package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
  189. package/tests/core/nocturnal-trinity.test.ts +953 -0
  190. package/tests/core/pain.test.ts +33 -0
  191. package/tests/core/path-resolver.test.ts +57 -0
  192. package/tests/core/paths-refactor.test.ts +42 -0
  193. package/tests/core/phase7-rollout-integration.test.ts +477 -0
  194. package/tests/core/principle-training-state.test.ts +712 -0
  195. package/tests/core/profile.test.ts +56 -0
  196. package/tests/core/promotion-gate.test.ts +556 -0
  197. package/tests/core/risk-calculator.test.ts +168 -0
  198. package/tests/core/session-tracker.test.ts +191 -0
  199. package/tests/core/training-program.test.ts +472 -0
  200. package/tests/core/trajectory.test.ts +265 -0
  201. package/tests/core/workspace-context-factory.test.ts +18 -0
  202. package/tests/core/workspace-context.test.ts +134 -0
  203. package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
  204. package/tests/fixtures/production-compatibility.test.ts +147 -0
  205. package/tests/fixtures/production-mock-generator.ts +282 -0
  206. package/tests/hooks/bash-risk-integration.test.ts +137 -0
  207. package/tests/hooks/bash-risk.test.ts +81 -0
  208. package/tests/hooks/edit-verification.test.ts +678 -0
  209. package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
  210. package/tests/hooks/gate-edit-verification.test.ts +435 -0
  211. package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
  212. package/tests/hooks/gate.test.ts +271 -0
  213. package/tests/hooks/gfi-gate-unit.test.ts +422 -0
  214. package/tests/hooks/gfi-gate.test.ts +669 -0
  215. package/tests/hooks/lifecycle.test.ts +248 -0
  216. package/tests/hooks/llm.test.ts +308 -0
  217. package/tests/hooks/message-sanitize.test.ts +36 -0
  218. package/tests/hooks/pain.test.ts +141 -0
  219. package/tests/hooks/progressive-trust-gate.test.ts +277 -0
  220. package/tests/hooks/prompt.test.ts +1411 -0
  221. package/tests/hooks/subagent.test.ts +467 -0
  222. package/tests/hooks/thinking-gate.test.ts +313 -0
  223. package/tests/http/principles-console-route.test.ts +140 -0
  224. package/tests/hygiene-tracker.test.ts +77 -0
  225. package/tests/index.integration.test.ts +179 -0
  226. package/tests/index.shadow-routing.integration.test.ts +140 -0
  227. package/tests/index.test.ts +9 -0
  228. package/tests/integration/empathy-workflow-integration.test.ts +627 -0
  229. package/tests/service/control-ui-query-service.test.ts +121 -0
  230. package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
  231. package/tests/service/evolution-worker.test.ts +585 -0
  232. package/tests/service/nocturnal-runtime.test.ts +470 -0
  233. package/tests/service/nocturnal-service.test.ts +577 -0
  234. package/tests/service/nocturnal-target-selector.test.ts +615 -0
  235. package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
  236. package/tests/service/phase3-input-filter.test.ts +289 -0
  237. package/tests/service/runtime-summary-service.test.ts +919 -0
  238. package/tests/task-compliance.test.ts +166 -0
  239. package/tests/test-utils.ts +48 -0
  240. package/tests/tools/critique-prompt.test.ts +260 -0
  241. package/tests/tools/deep-reflect.test.ts +232 -0
  242. package/tests/tools/model-index.test.ts +246 -0
  243. package/tests/ui/app.test.tsx +114 -0
  244. package/tests/utils/file-lock.test.ts +407 -0
  245. package/tests/utils/hashing.test.ts +32 -0
  246. package/tests/utils/io.test.ts +39 -0
  247. package/tests/utils/nlp.test.ts +53 -0
  248. package/tests/utils/plugin-logger.test.ts +156 -0
  249. package/tsconfig.json +16 -0
  250. package/tsconfig.tsbuildinfo +1 -0
  251. package/ui/src/App.tsx +45 -0
  252. package/ui/src/api.ts +216 -0
  253. package/ui/src/charts.tsx +586 -0
  254. package/ui/src/components/ErrorState.tsx +6 -0
  255. package/ui/src/components/Loading.tsx +13 -0
  256. package/ui/src/components/ProtectedRoute.tsx +12 -0
  257. package/ui/src/components/Shell.tsx +91 -0
  258. package/ui/src/components/WorkspaceConfig.tsx +146 -0
  259. package/ui/src/components/index.ts +5 -0
  260. package/ui/src/context/auth.tsx +80 -0
  261. package/ui/src/context/theme.tsx +66 -0
  262. package/ui/src/hooks/useAutoRefresh.ts +39 -0
  263. package/ui/src/i18n/ui.ts +363 -0
  264. package/ui/src/main.tsx +16 -0
  265. package/ui/src/pages/EvolutionPage.tsx +352 -0
  266. package/ui/src/pages/FeedbackPage.tsx +140 -0
  267. package/ui/src/pages/GateMonitorPage.tsx +136 -0
  268. package/ui/src/pages/LoginPage.tsx +88 -0
  269. package/ui/src/pages/OverviewPage.tsx +238 -0
  270. package/ui/src/pages/SamplesPage.tsx +174 -0
  271. package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
  272. package/ui/src/styles.css +1661 -0
  273. package/ui/src/types.ts +368 -0
  274. package/ui/src/utils/format.ts +15 -0
  275. package/vitest.config.ts +23 -0
  276. package/dist/commands/capabilities.d.ts +0 -3
  277. package/dist/commands/capabilities.js +0 -73
  278. package/dist/commands/context.d.ts +0 -5
  279. package/dist/commands/evolution-status.d.ts +0 -4
  280. package/dist/commands/evolution-status.js +0 -117
  281. package/dist/commands/evolver.d.ts +0 -9
  282. package/dist/commands/evolver.js +0 -26
  283. package/dist/commands/export.d.ts +0 -2
  284. package/dist/commands/export.js +0 -98
  285. package/dist/commands/focus.d.ts +0 -14
  286. package/dist/commands/focus.js +0 -457
  287. package/dist/commands/nocturnal-review.d.ts +0 -24
  288. package/dist/commands/nocturnal-review.js +0 -265
  289. package/dist/commands/nocturnal-rollout.d.ts +0 -27
  290. package/dist/commands/nocturnal-rollout.js +0 -671
  291. package/dist/commands/nocturnal-train.d.ts +0 -25
  292. package/dist/commands/nocturnal-train.js +0 -919
  293. package/dist/commands/pain.d.ts +0 -5
  294. package/dist/commands/principle-rollback.d.ts +0 -4
  295. package/dist/commands/principle-rollback.js +0 -22
  296. package/dist/commands/rollback.d.ts +0 -19
  297. package/dist/commands/samples.d.ts +0 -2
  298. package/dist/commands/samples.js +0 -55
  299. package/dist/commands/strategy.d.ts +0 -3
  300. package/dist/commands/strategy.js +0 -29
  301. package/dist/commands/thinking-os.d.ts +0 -2
  302. package/dist/config/defaults/runtime.d.ts +0 -40
  303. package/dist/config/errors.d.ts +0 -84
  304. package/dist/config/errors.js +0 -94
  305. package/dist/config/index.js +0 -7
  306. package/dist/constants/diagnostician.d.ts +0 -12
  307. package/dist/constants/diagnostician.js +0 -56
  308. package/dist/constants/tools.d.ts +0 -17
  309. package/dist/constants/tools.js +0 -54
  310. package/dist/core/adaptive-thresholds.d.ts +0 -186
  311. package/dist/core/adaptive-thresholds.js +0 -300
  312. package/dist/core/config-service.d.ts +0 -15
  313. package/dist/core/config.d.ts +0 -127
  314. package/dist/core/control-ui-db.d.ts +0 -95
  315. package/dist/core/control-ui-db.js +0 -292
  316. package/dist/core/detection-funnel.d.ts +0 -33
  317. package/dist/core/detection-service.d.ts +0 -15
  318. package/dist/core/dictionary-service.d.ts +0 -15
  319. package/dist/core/dictionary.d.ts +0 -38
  320. package/dist/core/event-log.d.ts +0 -82
  321. package/dist/core/event-log.js +0 -463
  322. package/dist/core/evolution-engine.d.ts +0 -118
  323. package/dist/core/evolution-engine.js +0 -464
  324. package/dist/core/evolution-logger.d.ts +0 -137
  325. package/dist/core/evolution-logger.js +0 -256
  326. package/dist/core/evolution-migration.d.ts +0 -5
  327. package/dist/core/evolution-migration.js +0 -65
  328. package/dist/core/evolution-reducer.d.ts +0 -98
  329. package/dist/core/evolution-reducer.js +0 -465
  330. package/dist/core/evolution-types.d.ts +0 -287
  331. package/dist/core/evolution-types.js +0 -78
  332. package/dist/core/external-training-contract.d.ts +0 -276
  333. package/dist/core/external-training-contract.js +0 -269
  334. package/dist/core/focus-history.d.ts +0 -210
  335. package/dist/core/focus-history.js +0 -1185
  336. package/dist/core/hygiene/tracker.d.ts +0 -22
  337. package/dist/core/hygiene/tracker.js +0 -106
  338. package/dist/core/init.d.ts +0 -12
  339. package/dist/core/local-worker-routing.d.ts +0 -175
  340. package/dist/core/local-worker-routing.js +0 -525
  341. package/dist/core/migration.d.ts +0 -6
  342. package/dist/core/model-deployment-registry.d.ts +0 -218
  343. package/dist/core/model-deployment-registry.js +0 -503
  344. package/dist/core/model-training-registry.d.ts +0 -295
  345. package/dist/core/model-training-registry.js +0 -475
  346. package/dist/core/nocturnal-arbiter.d.ts +0 -159
  347. package/dist/core/nocturnal-arbiter.js +0 -534
  348. package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
  349. package/dist/core/nocturnal-candidate-scoring.js +0 -266
  350. package/dist/core/nocturnal-compliance.d.ts +0 -175
  351. package/dist/core/nocturnal-compliance.js +0 -824
  352. package/dist/core/nocturnal-dataset.d.ts +0 -224
  353. package/dist/core/nocturnal-dataset.js +0 -443
  354. package/dist/core/nocturnal-executability.d.ts +0 -85
  355. package/dist/core/nocturnal-executability.js +0 -331
  356. package/dist/core/nocturnal-export.d.ts +0 -124
  357. package/dist/core/nocturnal-export.js +0 -275
  358. package/dist/core/nocturnal-paths.d.ts +0 -124
  359. package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
  360. package/dist/core/nocturnal-trajectory-extractor.js +0 -307
  361. package/dist/core/nocturnal-trinity.d.ts +0 -311
  362. package/dist/core/nocturnal-trinity.js +0 -880
  363. package/dist/core/pain.d.ts +0 -4
  364. package/dist/core/pain.js +0 -70
  365. package/dist/core/path-resolver.d.ts +0 -46
  366. package/dist/core/paths.d.ts +0 -65
  367. package/dist/core/principle-training-state.d.ts +0 -121
  368. package/dist/core/principle-training-state.js +0 -321
  369. package/dist/core/profile.d.ts +0 -62
  370. package/dist/core/profile.js +0 -210
  371. package/dist/core/promotion-gate.d.ts +0 -238
  372. package/dist/core/promotion-gate.js +0 -529
  373. package/dist/core/risk-calculator.d.ts +0 -22
  374. package/dist/core/session-tracker.d.ts +0 -99
  375. package/dist/core/shadow-observation-registry.d.ts +0 -217
  376. package/dist/core/shadow-observation-registry.js +0 -308
  377. package/dist/core/system-logger.d.ts +0 -8
  378. package/dist/core/thinking-models.d.ts +0 -38
  379. package/dist/core/thinking-models.js +0 -170
  380. package/dist/core/training-program.d.ts +0 -233
  381. package/dist/core/training-program.js +0 -433
  382. package/dist/core/trajectory.d.ts +0 -411
  383. package/dist/core/trajectory.js +0 -1307
  384. package/dist/core/workspace-context.d.ts +0 -71
  385. package/dist/hooks/bash-risk.d.ts +0 -57
  386. package/dist/hooks/bash-risk.js +0 -137
  387. package/dist/hooks/edit-verification.d.ts +0 -62
  388. package/dist/hooks/edit-verification.js +0 -256
  389. package/dist/hooks/gate-block-helper.d.ts +0 -44
  390. package/dist/hooks/gate-block-helper.js +0 -119
  391. package/dist/hooks/gate.d.ts +0 -24
  392. package/dist/hooks/gate.js +0 -173
  393. package/dist/hooks/gfi-gate.d.ts +0 -40
  394. package/dist/hooks/gfi-gate.js +0 -113
  395. package/dist/hooks/lifecycle.d.ts +0 -5
  396. package/dist/hooks/lifecycle.js +0 -284
  397. package/dist/hooks/llm.d.ts +0 -12
  398. package/dist/hooks/message-sanitize.d.ts +0 -3
  399. package/dist/hooks/message-sanitize.js +0 -37
  400. package/dist/hooks/pain.d.ts +0 -5
  401. package/dist/hooks/pain.js +0 -301
  402. package/dist/hooks/progressive-trust-gate.d.ts +0 -51
  403. package/dist/hooks/progressive-trust-gate.js +0 -89
  404. package/dist/hooks/prompt.d.ts +0 -47
  405. package/dist/hooks/prompt.js +0 -884
  406. package/dist/hooks/subagent.d.ts +0 -10
  407. package/dist/hooks/subagent.js +0 -387
  408. package/dist/hooks/thinking-checkpoint.d.ts +0 -37
  409. package/dist/hooks/thinking-checkpoint.js +0 -51
  410. package/dist/hooks/trajectory-collector.d.ts +0 -32
  411. package/dist/hooks/trajectory-collector.js +0 -256
  412. package/dist/http/principles-console-route.d.ts +0 -9
  413. package/dist/http/principles-console-route.js +0 -567
  414. package/dist/i18n/commands.d.ts +0 -26
  415. package/dist/i18n/commands.js +0 -116
  416. package/dist/index.d.ts +0 -7
  417. package/dist/index.js +0 -581
  418. package/dist/service/central-database.d.ts +0 -104
  419. package/dist/service/central-database.js +0 -649
  420. package/dist/service/control-ui-query-service.d.ts +0 -221
  421. package/dist/service/control-ui-query-service.js +0 -543
  422. package/dist/service/empathy-observer-manager.d.ts +0 -52
  423. package/dist/service/empathy-observer-manager.js +0 -229
  424. package/dist/service/evolution-query-service.d.ts +0 -155
  425. package/dist/service/evolution-query-service.js +0 -258
  426. package/dist/service/evolution-worker.d.ts +0 -101
  427. package/dist/service/evolution-worker.js +0 -974
  428. package/dist/service/nocturnal-runtime.d.ts +0 -183
  429. package/dist/service/nocturnal-service.d.ts +0 -163
  430. package/dist/service/nocturnal-service.js +0 -787
  431. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  432. package/dist/service/nocturnal-target-selector.js +0 -315
  433. package/dist/service/phase3-input-filter.d.ts +0 -73
  434. package/dist/service/phase3-input-filter.js +0 -172
  435. package/dist/service/runtime-summary-service.d.ts +0 -122
  436. package/dist/service/runtime-summary-service.js +0 -485
  437. package/dist/service/trajectory-service.d.ts +0 -2
  438. package/dist/service/trajectory-service.js +0 -15
  439. package/dist/tools/critique-prompt.d.ts +0 -14
  440. package/dist/tools/deep-reflect.d.ts +0 -39
  441. package/dist/tools/deep-reflect.js +0 -350
  442. package/dist/tools/model-index.d.ts +0 -9
  443. package/dist/types/event-types.d.ts +0 -306
  444. package/dist/types/event-types.js +0 -106
  445. package/dist/types/hygiene-types.d.ts +0 -20
  446. package/dist/types/hygiene-types.js +0 -12
  447. package/dist/types/runtime-summary.d.ts +0 -47
  448. package/dist/types/runtime-summary.js +0 -1
  449. package/dist/types.d.ts +0 -50
  450. package/dist/types.js +0 -22
  451. package/dist/utils/file-lock.d.ts +0 -71
  452. package/dist/utils/file-lock.js +0 -309
  453. package/dist/utils/glob-match.d.ts +0 -28
  454. package/dist/utils/hashing.d.ts +0 -9
  455. package/dist/utils/io.d.ts +0 -6
  456. package/dist/utils/io.js +0 -106
  457. package/dist/utils/nlp.d.ts +0 -9
  458. package/dist/utils/plugin-logger.d.ts +0 -39
  459. package/dist/utils/subagent-probe.d.ts +0 -34
  460. package/dist/utils/subagent-probe.js +0 -81
@@ -1,10 +0,0 @@
1
- import type { PluginHookSubagentEndedEvent, PluginHookSubagentContext } from '../openclaw-sdk.js';
2
- import { type EmpathyObserverApi } from '../service/empathy-observer-manager.js';
3
- type SubagentEndedHookContext = PluginHookSubagentContext & {
4
- api?: EmpathyObserverApi;
5
- workspaceDir?: string;
6
- sessionId?: string;
7
- agentId?: string;
8
- };
9
- export declare function handleSubagentEnded(event: PluginHookSubagentEndedEvent, ctx: SubagentEndedHookContext): Promise<void>;
10
- export {};
@@ -1,387 +0,0 @@
1
- import * as fs from 'fs';
2
- import { writePainFlag } from '../core/pain.js';
3
- import { WorkspaceContext } from '../core/workspace-context.js';
4
- import { empathyObserverManager } from '../service/empathy-observer-manager.js';
5
- import { acquireQueueLock } from '../service/evolution-worker.js';
6
- import { recordEvolutionSuccess } from '../core/evolution-engine.js';
7
- const COMPLETION_RETRY_DELAY_MS = 250;
8
- const COMPLETION_MAX_RETRIES = 3;
9
- const COMPLETION_RETRY_TTL_MS = 60 * 60 * 1000; // 1 hour TTL for retry entries
10
- const TASK_OUTCOME_RETRY_DELAY_MS = 250;
11
- const TASK_OUTCOME_MAX_RETRIES = 3;
12
- const DIAGNOSTICIAN_SESSION_PREFIX = 'agent:diagnostician:';
13
- const completionRetryCounts = new Map();
14
- // Cleanup expired retry entries periodically
15
- function cleanupExpiredRetryEntries() {
16
- const now = Date.now();
17
- for (const [key, value] of completionRetryCounts.entries()) {
18
- if (now > value.expires) {
19
- completionRetryCounts.delete(key);
20
- }
21
- }
22
- }
23
- function emitSubagentPainEvent(wctx, payload, logger) {
24
- try {
25
- wctx.evolutionReducer.emitSync({
26
- ts: new Date().toISOString(),
27
- type: 'pain_detected',
28
- data: {
29
- painId: `pain_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`,
30
- painType: 'subagent_error',
31
- source: payload.source,
32
- reason: payload.reason,
33
- score: payload.score,
34
- sessionId: payload.sessionId,
35
- agentId: payload.agentId,
36
- },
37
- });
38
- }
39
- catch (e) {
40
- logger.warn(`[PD:Subagent] failed to emit evolution event: ${String(e)}`);
41
- }
42
- }
43
- function isDiagnosticianSession(targetSessionKey) {
44
- return typeof targetSessionKey === 'string' && targetSessionKey.startsWith(DIAGNOSTICIAN_SESSION_PREFIX);
45
- }
46
- function extractAgentIdFromSessionKey(sessionKey) {
47
- // sessionKey format: "agent:{agentId}:{type}:{uuid}" or "agent:{agentId}:{uuid}"
48
- if (!sessionKey)
49
- return undefined;
50
- const match = sessionKey.match(/^agent:([^:]+):/);
51
- return match ? match[1] : undefined;
52
- }
53
- function cleanupPainFlagForTask(wctx, completedTaskId, queue, logger) {
54
- const painFlagPath = wctx.resolve('PAIN_FLAG');
55
- try {
56
- const painData = fs.readFileSync(painFlagPath, 'utf8');
57
- const taskIdMatch = painData.match(/^task_id:\s*(.+)$/m);
58
- const painTaskId = taskIdMatch?.[1]?.trim();
59
- const hasQueuedStatus = painData.includes('status: queued');
60
- const hasRemainingActiveTasks = queue.some((task) => task?.status === 'pending' || task?.status === 'in_progress');
61
- if (!hasQueuedStatus)
62
- return;
63
- if (painTaskId) {
64
- if (painTaskId === completedTaskId) {
65
- fs.unlinkSync(painFlagPath);
66
- }
67
- return;
68
- }
69
- // Legacy fallback: only clear an untagged queued pain flag when there are
70
- // no active queue entries left. This avoids unrelated diagnostician runs
71
- // from deleting a queued flag that belongs to another task.
72
- if (!hasRemainingActiveTasks) {
73
- fs.unlinkSync(painFlagPath);
74
- }
75
- }
76
- catch (e) {
77
- if (e.code === 'ENOENT')
78
- return; // File doesn't exist, nothing to clean up
79
- logger.error(`[PD:Subagent] Failed to cleanup pain flag: ${String(e)}`);
80
- }
81
- }
82
- function getCompletionRetryKey(workspaceDir, targetSessionKey) {
83
- return `${workspaceDir}::${targetSessionKey}`;
84
- }
85
- function scheduleCompletionRetry(event, ctx, attempt) {
86
- const workspaceDir = ctx.workspaceDir;
87
- const targetSessionKey = event.targetSessionKey;
88
- if (!workspaceDir || !targetSessionKey || attempt >= COMPLETION_MAX_RETRIES) {
89
- return;
90
- }
91
- cleanupExpiredRetryEntries();
92
- const retryKey = getCompletionRetryKey(workspaceDir, targetSessionKey);
93
- completionRetryCounts.set(retryKey, {
94
- count: attempt + 1,
95
- expires: Date.now() + COMPLETION_RETRY_TTL_MS
96
- });
97
- setTimeout(() => {
98
- void handleSubagentEnded(event, ctx).finally(() => {
99
- const entry = completionRetryCounts.get(retryKey);
100
- if (!entry || entry.count <= attempt + 1) {
101
- completionRetryCounts.delete(retryKey);
102
- }
103
- });
104
- }, COMPLETION_RETRY_DELAY_MS);
105
- }
106
- function scheduleTaskOutcomeRetry(wctx, payload, attempt, logger) {
107
- if (attempt > TASK_OUTCOME_MAX_RETRIES) {
108
- logger.error(`[PD:Subagent] Failed to persist task outcome after ${TASK_OUTCOME_MAX_RETRIES} retries: ${payload.taskId}`);
109
- return;
110
- }
111
- setTimeout(() => {
112
- try {
113
- wctx.trajectory?.recordTaskOutcome?.(payload);
114
- }
115
- catch (error) {
116
- logger.warn(`[PD:Subagent] Retrying task outcome persistence for ${payload.taskId}: ${String(error)}`);
117
- scheduleTaskOutcomeRetry(wctx, payload, attempt + 1, logger);
118
- }
119
- }, TASK_OUTCOME_RETRY_DELAY_MS);
120
- }
121
- export async function handleSubagentEnded(event, ctx) {
122
- const { outcome, targetSessionKey } = event;
123
- const workspaceDir = ctx.workspaceDir;
124
- if (!workspaceDir)
125
- return;
126
- const wctx = WorkspaceContext.fromHookContext(ctx);
127
- const logger = ctx.api?.logger ?? console;
128
- if (targetSessionKey?.startsWith('empathy_obs:')) {
129
- await empathyObserverManager.reap(ctx.api, targetSessionKey, workspaceDir);
130
- return;
131
- }
132
- const config = wctx.config;
133
- // ── Outcome-based EP and Pain Signal handling ──
134
- // OpenClaw v2026.3.23 fixes: timeout may be false positive (fast-finishing workers)
135
- // Only penalize actual errors, not timeout/killed/reset
136
- if (outcome === 'error') {
137
- // Only actual errors trigger penalty
138
- const scoreSettings = config.get('scores');
139
- const score = scoreSettings.subagent_error_penalty;
140
- const reason = `Subagent session ${targetSessionKey} ended with error`;
141
- writePainFlag(workspaceDir, {
142
- source: `subagent_error`,
143
- score: String(score),
144
- time: new Date().toISOString(),
145
- reason,
146
- is_risky: 'true',
147
- session_id: ctx.sessionId || '',
148
- agent_id: ctx.agentId || extractAgentIdFromSessionKey(targetSessionKey) || '',
149
- });
150
- emitSubagentPainEvent(wctx, {
151
- source: `subagent_error`,
152
- reason,
153
- score,
154
- sessionId: ctx.sessionId,
155
- agentId: ctx.agentId || extractAgentIdFromSessionKey(targetSessionKey),
156
- }, logger);
157
- }
158
- if (outcome === 'timeout') {
159
- // OpenClaw v2026.3.23 fix: timeout may be false positive
160
- // Fast-finishing workers are no longer incorrectly reported as timed out
161
- // Do not penalize - the task may have actually succeeded
162
- logger.warn(`[PD:Subagent] Session ${targetSessionKey} timed out - not penalizing (OpenClaw fix applied)`);
163
- }
164
- if (outcome === 'killed' || outcome === 'reset') {
165
- // User-initiated termination or system reset - not an agent failure
166
- logger.info(`[PD:Subagent] Session ${targetSessionKey} ended with ${outcome} - no penalty (user/system action)`);
167
- }
168
- if (outcome === 'ok' || outcome === 'deleted') {
169
- recordEvolutionSuccess(workspaceDir, 'subagent', {
170
- sessionId: ctx.sessionId,
171
- reason: 'subagent_success',
172
- });
173
- }
174
- if ((outcome !== 'ok' && outcome !== 'deleted') || !isDiagnosticianSession(targetSessionKey)) {
175
- return;
176
- }
177
- const queuePath = wctx.resolve('EVOLUTION_QUEUE');
178
- if (!fs.existsSync(queuePath))
179
- return;
180
- const retryKey = getCompletionRetryKey(workspaceDir, targetSessionKey);
181
- const retryEntry = completionRetryCounts.get(retryKey);
182
- const attempt = retryEntry?.count || 0;
183
- let releaseLock = null;
184
- try {
185
- releaseLock = await acquireQueueLock(queuePath, logger);
186
- const queue = JSON.parse(fs.readFileSync(queuePath, 'utf8'));
187
- let completedTaskId = null;
188
- // Improved matching logic: support both direct session key match and HEARTBEAT placeholder match
189
- // This fixes task_outcomes being empty for HEARTBEAT-triggered diagnostician runs
190
- const matchedTask = queue.find((task) => {
191
- // V2: Skip non-pain_diagnosis tasks - they don't use HEARTBEAT completion flow
192
- // pain_diagnosis: routed through subagent completion matcher (this block)
193
- // sleep_reflection: handled by nocturnal service (separate flow, no HEARTBEAT)
194
- // model_eval: handled separately (no HEARTBEAT completion)
195
- if (task?.taskKind !== 'pain_diagnosis' && task?.taskKind !== undefined)
196
- return false;
197
- const taskSessionKey = task?.assigned_session_key;
198
- // 1. Exact match: direct session key assignment
199
- if (typeof taskSessionKey === 'string' && taskSessionKey === targetSessionKey) {
200
- return true;
201
- }
202
- // 2. HEARTBEAT placeholder match: for diagnostician sessions
203
- // Tasks started via HEARTBEAT have placeholder like "heartbeat:diagnostician:{taskId}"
204
- if (isDiagnosticianSession(targetSessionKey)) {
205
- // Match tasks with HEARTBEAT placeholder
206
- if (typeof taskSessionKey === 'string' && taskSessionKey.startsWith('heartbeat:diagnostician')) {
207
- return true;
208
- }
209
- // Backward compatibility: match tasks with no assigned_session_key (legacy behavior)
210
- // Only match tasks started within 2 hours to avoid stale task matching
211
- if (taskSessionKey === undefined || taskSessionKey === null) {
212
- const taskStartedAt = task?.started_at ? new Date(task.started_at).getTime() : 0;
213
- const taskAge = taskStartedAt > 0 ? Date.now() - taskStartedAt : Infinity;
214
- const LEGACY_FALLBACK_MAX_AGE_MS = 2 * 60 * 60 * 1000; // 2 hours
215
- if (taskAge < LEGACY_FALLBACK_MAX_AGE_MS) {
216
- return true;
217
- }
218
- }
219
- }
220
- return false;
221
- });
222
- if (matchedTask) {
223
- // Enhanced observability: log match type for debugging
224
- const matchType = matchedTask.assigned_session_key === targetSessionKey
225
- ? 'exact'
226
- : matchedTask.assigned_session_key?.startsWith('heartbeat:diagnostician')
227
- ? 'heartbeat_placeholder'
228
- : 'legacy_fallback';
229
- logger.info(`[PD:Subagent] Matched session ${targetSessionKey} to task ${matchedTask.id} (match_type: ${matchType})`);
230
- matchedTask.status = 'completed';
231
- matchedTask.completed_at = new Date().toISOString();
232
- delete matchedTask.assigned_session_key;
233
- completedTaskId = matchedTask.id;
234
- }
235
- else {
236
- logger.warn(`[PD:Subagent] No in-progress evolution task matched subagent session ${targetSessionKey}`);
237
- }
238
- let taskOutcomePayload = null;
239
- if (completedTaskId) {
240
- fs.writeFileSync(queuePath, JSON.stringify(queue, null, 2), 'utf8');
241
- cleanupPainFlagForTask(wctx, completedTaskId, queue, logger);
242
- taskOutcomePayload = {
243
- sessionId: targetSessionKey,
244
- taskId: completedTaskId,
245
- outcome,
246
- summary: `Diagnostician session ${targetSessionKey} completed evolution task ${completedTaskId}.`,
247
- };
248
- }
249
- if (taskOutcomePayload) {
250
- try {
251
- wctx.trajectory?.recordTaskOutcome?.(taskOutcomePayload);
252
- }
253
- catch (error) {
254
- logger.warn(`[PD:Subagent] Failed to persist task outcome for ${taskOutcomePayload.taskId}: ${String(error)}`);
255
- scheduleTaskOutcomeRetry(wctx, taskOutcomePayload, 1, logger);
256
- }
257
- }
258
- // Read diagnostician output and create principle with generalized pattern
259
- if (completedTaskId && ctx.api?.runtime?.subagent) {
260
- try {
261
- const messages = await ctx.api?.runtime?.subagent?.getSessionMessages?.({
262
- sessionKey: targetSessionKey,
263
- limit: 50
264
- });
265
- const assistantText = extractAssistantText(messages);
266
- const report = parseDiagnosticianReport(assistantText);
267
- if (report?.principle) {
268
- // Principles default to 'manual_only' evaluability unless detector metadata
269
- // is explicitly provided. Only deterministic / weak_heuristic evaluability
270
- // can enter automatic nocturnal targeting.
271
- const evaluability = report.principle.evaluability;
272
- // Only pass detector metadata if ALL required fields are present and valid.
273
- // Incomplete metadata → 'manual_only' — the principle stays prompt-only.
274
- // Defense in depth: also validate in reducer, but subagent should not pass
275
- // malformed data in the first place.
276
- const rawMeta = report.principle.detector_metadata;
277
- // Require confidence (valid enum) + ALL THREE signal arrays non-empty.
278
- // toolSequenceHints is optional (may be empty or absent).
279
- const VALID_CONFIDENCE = ['high', 'medium', 'low'];
280
- const hasValidConfidence = typeof rawMeta?.confidence === 'string' &&
281
- VALID_CONFIDENCE.includes(rawMeta.confidence);
282
- const signalArrays = [
283
- rawMeta?.applicabilityTags,
284
- rawMeta?.positiveSignals,
285
- rawMeta?.negativeSignals,
286
- ];
287
- const allSignalsNonEmpty = signalArrays.every((arr) => Array.isArray(arr) && arr.length > 0 && arr.every((s) => typeof s === 'string' && s.length > 0));
288
- const hasCompleteMetadata = hasValidConfidence && allSignalsNonEmpty;
289
- const detectorMetadata = hasCompleteMetadata && rawMeta.confidence
290
- ? {
291
- applicabilityTags: rawMeta.applicabilityTags ?? [],
292
- positiveSignals: rawMeta.positiveSignals ?? [],
293
- negativeSignals: rawMeta.negativeSignals ?? [],
294
- toolSequenceHints: rawMeta.toolSequenceHints ?? [],
295
- confidence: rawMeta.confidence,
296
- }
297
- : undefined;
298
- const principleId = wctx.evolutionReducer.createPrincipleFromDiagnosis({
299
- painId: matchedTask?.id || completedTaskId,
300
- painType: 'tool_failure', // Default, could be extracted from task
301
- triggerPattern: report.principle.trigger_pattern,
302
- action: report.principle.action,
303
- source: matchedTask?.source || 'diagnostician',
304
- evaluability,
305
- detectorMetadata,
306
- });
307
- if (principleId) {
308
- logger.warn(`[PD:Subagent] Created principle ${principleId} from diagnostician analysis for task ${completedTaskId}`);
309
- }
310
- }
311
- }
312
- catch (e) {
313
- logger.warn(`[PD:Subagent] Failed to read diagnostician output: ${String(e)}`);
314
- }
315
- }
316
- }
317
- catch (e) {
318
- logger.error(`[PD:Subagent] Failed to update evolution queue: ${String(e)}`);
319
- scheduleCompletionRetry(event, ctx, attempt);
320
- }
321
- finally {
322
- releaseLock?.();
323
- }
324
- }
325
- /**
326
- * Extract text content from assistant messages
327
- */
328
- function extractAssistantText(messages) {
329
- if (!messages || !Array.isArray(messages))
330
- return '';
331
- const texts = [];
332
- for (const msg of messages) {
333
- if (msg?.role !== 'assistant')
334
- continue;
335
- const content = msg?.content;
336
- if (Array.isArray(content)) {
337
- for (const block of content) {
338
- if (block?.type === 'text' && typeof block.text === 'string') {
339
- texts.push(block.text);
340
- }
341
- }
342
- }
343
- else if (typeof content === 'string') {
344
- texts.push(content);
345
- }
346
- }
347
- return texts.join('\n');
348
- }
349
- /**
350
- * Parse diagnostician JSON report from text
351
- */
352
- function parseDiagnosticianReport(text) {
353
- // Try to find JSON in markdown code block
354
- const jsonMatch = text.match(/```json\n([\s\S]*?)\n```/);
355
- if (jsonMatch) {
356
- try {
357
- const parsed = JSON.parse(jsonMatch[1]);
358
- // Support both direct principle and nested phases.principle_extraction structure
359
- if (parsed?.principle) {
360
- return { principle: parsed.principle };
361
- }
362
- if (parsed?.phases?.principle_extraction?.principle) {
363
- return { principle: parsed.phases.principle_extraction.principle };
364
- }
365
- }
366
- catch {
367
- // Fall through to return null
368
- }
369
- }
370
- // Try to find raw JSON object
371
- const objectMatch = text.match(/\{[\s\S]*"principle"[\s\S]*\}/);
372
- if (objectMatch) {
373
- try {
374
- const parsed = JSON.parse(objectMatch[0]);
375
- if (parsed?.principle) {
376
- return { principle: parsed.principle };
377
- }
378
- if (parsed?.phases?.principle_extraction?.principle) {
379
- return { principle: parsed.phases.principle_extraction.principle };
380
- }
381
- }
382
- catch {
383
- // Fall through to return null
384
- }
385
- }
386
- return null;
387
- }
@@ -1,37 +0,0 @@
1
- /**
2
- * Thinking Checkpoint Module
3
- *
4
- * Enforces P-10 deep reflection requirement for high-risk tool operations.
5
- *
6
- * **Responsibilities:**
7
- * - Check if high-risk tools have recent deep thinking (T-01 through T-10)
8
- * - Block high-risk operations without preceding deep reflection
9
- * - Configurable time window for thinking validity (default 5 minutes)
10
- * - Provide clear guidance on required action (deep_reflect tool usage)
11
- *
12
- * **Configuration:**
13
- * - Thinking checkpoint settings from profile.thinking_checkpoint
14
- * - Window duration for thinking validity
15
- * - High-risk tool list
16
- */
17
- import type { PluginHookBeforeToolCallEvent, PluginHookBeforeToolCallResult } from '../openclaw-sdk.js';
18
- export interface ThinkingCheckpointConfig {
19
- enabled?: boolean;
20
- window_ms?: number;
21
- high_risk_tools?: string[];
22
- }
23
- /**
24
- * Checks if a tool call requires a recent deep thinking checkpoint.
25
- *
26
- * This enforces P-10 (Thinking OS Checkpoint) - high-risk operations must
27
- * be preceded by deep reflection within the configured time window.
28
- *
29
- * @param event - The before_tool_call event
30
- * @param config - Thinking checkpoint configuration from profile
31
- * @param sessionId - Current session ID
32
- * @param logger - Optional logger for info messages
33
- * @returns Block result if thinking required, undefined otherwise
34
- */
35
- export declare function checkThinkingCheckpoint(event: PluginHookBeforeToolCallEvent, config: ThinkingCheckpointConfig, sessionId: string | undefined, logger?: {
36
- info?: (message: string) => void;
37
- }): PluginHookBeforeToolCallResult | undefined;
@@ -1,51 +0,0 @@
1
- /**
2
- * Thinking Checkpoint Module
3
- *
4
- * Enforces P-10 deep reflection requirement for high-risk tool operations.
5
- *
6
- * **Responsibilities:**
7
- * - Check if high-risk tools have recent deep thinking (T-01 through T-10)
8
- * - Block high-risk operations without preceding deep reflection
9
- * - Configurable time window for thinking validity (default 5 minutes)
10
- * - Provide clear guidance on required action (deep_reflect tool usage)
11
- *
12
- * **Configuration:**
13
- * - Thinking checkpoint settings from profile.thinking_checkpoint
14
- * - Window duration for thinking validity
15
- * - High-risk tool list
16
- */
17
- import { hasRecentThinking } from '../core/session-tracker.js';
18
- import { THINKING_CHECKPOINT_WINDOW_MS, THINKING_CHECKPOINT_DEFAULT_HIGH_RISK_TOOLS } from '../config/index.js';
19
- /**
20
- * Checks if a tool call requires a recent deep thinking checkpoint.
21
- *
22
- * This enforces P-10 (Thinking OS Checkpoint) - high-risk operations must
23
- * be preceded by deep reflection within the configured time window.
24
- *
25
- * @param event - The before_tool_call event
26
- * @param config - Thinking checkpoint configuration from profile
27
- * @param sessionId - Current session ID
28
- * @param logger - Optional logger for info messages
29
- * @returns Block result if thinking required, undefined otherwise
30
- */
31
- export function checkThinkingCheckpoint(event, config, sessionId, logger) {
32
- const enabled = config.enabled ?? false;
33
- const windowMs = config.window_ms ?? THINKING_CHECKPOINT_WINDOW_MS;
34
- const highRiskTools = config.high_risk_tools ?? [...THINKING_CHECKPOINT_DEFAULT_HIGH_RISK_TOOLS];
35
- if (!enabled || !sessionId) {
36
- return undefined;
37
- }
38
- const isHighRisk = highRiskTools.includes(event.toolName);
39
- if (!isHighRisk) {
40
- return undefined;
41
- }
42
- const hasThinking = hasRecentThinking(sessionId, windowMs);
43
- if (!hasThinking) {
44
- logger?.info?.(`[PD:THINKING_GATE] High-risk tool "${event.toolName}" called without recent deep thinking`);
45
- return {
46
- block: true,
47
- blockReason: `[Thinking OS Checkpoint] 高风险操作 "${event.toolName}" 需要先进行深度思考。\n\n请先使用 deep_reflect 工具分析当前情况,然后再尝试此操作。\n\n这是强制性检查点,目的是确保决策质量。\n\n提示:调用 deep_reflect 后,${Math.round(windowMs / 60000)}分钟内的操作将自动放行。\n\n可在PROFILE.json中设置 thinking_checkpoint.enabled: false 来禁用此检查。`,
48
- };
49
- }
50
- return undefined;
51
- }
@@ -1,32 +0,0 @@
1
- /**
2
- * Trajectory Collector - 行为进化引擎 Phase 0 数据收集
3
- *
4
- * 收集工具调用和 LLM 输出到 memory/trajectories/ 目录
5
- * 用于分析工具使用模式、识别原则应用案例、评估行为质量
6
- */
7
- import type { PluginHookAfterToolCallEvent, PluginHookToolContext, PluginHookLlmOutputEvent, PluginHookAgentContext, PluginHookBeforeMessageWriteEvent } from '../openclaw-sdk.js';
8
- /**
9
- * 工具调用完成后的处理
10
- * 记录:工具名、参数、结果、错误、执行时间
11
- */
12
- export declare function handleAfterToolCall(event: PluginHookAfterToolCallEvent, ctx: PluginHookToolContext & {
13
- workspaceDir?: string;
14
- }): void;
15
- /**
16
- * LLM 输出处理
17
- * 记录:provider、model、输出长度、token 使用量
18
- */
19
- export declare function handleLlmOutput(event: PluginHookLlmOutputEvent, ctx: PluginHookAgentContext & {
20
- workspaceDir?: string;
21
- }): void;
22
- /**
23
- * 消息写入前的处理
24
- * 记录:用户/助手消息内容
25
- */
26
- export declare function handleBeforeMessageWrite(event: PluginHookBeforeMessageWriteEvent, ctx: PluginHookAgentContext & {
27
- workspaceDir?: string;
28
- }): void;
29
- /**
30
- * 轨迹汇总统计(供 cron 任务调用)
31
- */
32
- export declare function computeTrajectoryStats(workspaceDir: string): object;