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,4 +0,0 @@
1
- export declare function computePainScore(rc: number, isSpiral: boolean, missingTestCommand: boolean, softScore: number, projectDir?: string): number;
2
- export declare function painSeverityLabel(painScore: number, isSpiral?: boolean, projectDir?: string): string;
3
- export declare function writePainFlag(projectDir: string, painData: Record<string, string>): void;
4
- export declare function readPainFlagData(projectDir: string): Record<string, string>;
package/dist/core/pain.js DELETED
@@ -1,70 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { serializeKvLines, parseKvLines } from '../utils/io.js';
4
- import { resolvePdPath } from './paths.js';
5
- import { ConfigService } from './config-service.js';
6
- export function computePainScore(rc, isSpiral, missingTestCommand, softScore, projectDir) {
7
- let score = Math.max(0, softScore || 0);
8
- const stateDir = projectDir ? resolvePdPath(projectDir, 'STATE_DIR') : undefined;
9
- const config = stateDir ? ConfigService.get(stateDir) : null;
10
- const scoreSettings = config ? config.get('scores') : {
11
- exit_code_penalty: 70,
12
- spiral_penalty: 40,
13
- missing_test_command_penalty: 30
14
- };
15
- if (rc !== 0) {
16
- score += scoreSettings.exit_code_penalty;
17
- }
18
- if (isSpiral) {
19
- score += scoreSettings.spiral_penalty;
20
- }
21
- if (missingTestCommand) {
22
- score += scoreSettings.missing_test_command_penalty;
23
- }
24
- return Math.min(100, score);
25
- }
26
- export function painSeverityLabel(painScore, isSpiral = false, projectDir) {
27
- if (isSpiral) {
28
- return "critical";
29
- }
30
- const stateDir = projectDir ? resolvePdPath(projectDir, 'STATE_DIR') : undefined;
31
- const config = stateDir ? ConfigService.get(stateDir) : null;
32
- const thresholds = config ? config.get('severity_thresholds') : {
33
- high: 70,
34
- medium: 40,
35
- low: 20
36
- };
37
- if (painScore >= thresholds.high) {
38
- return "high";
39
- }
40
- else if (painScore >= thresholds.medium) {
41
- return "medium";
42
- }
43
- else if (painScore >= thresholds.low) {
44
- return "low";
45
- }
46
- else {
47
- return "info";
48
- }
49
- }
50
- export function writePainFlag(projectDir, painData) {
51
- const painFlagPath = resolvePdPath(projectDir, 'PAIN_FLAG');
52
- const dir = path.dirname(painFlagPath);
53
- if (!fs.existsSync(dir)) {
54
- fs.mkdirSync(dir, { recursive: true });
55
- }
56
- fs.writeFileSync(painFlagPath, serializeKvLines(painData), "utf-8");
57
- }
58
- export function readPainFlagData(projectDir) {
59
- const painFlagPath = resolvePdPath(projectDir, 'PAIN_FLAG');
60
- try {
61
- if (!fs.existsSync(painFlagPath)) {
62
- return {};
63
- }
64
- const content = fs.readFileSync(painFlagPath, "utf-8");
65
- return parseKvLines(content);
66
- }
67
- catch (e) {
68
- return {};
69
- }
70
- }
@@ -1,46 +0,0 @@
1
- export interface PathResolverOptions {
2
- workspaceDir?: string;
3
- normalizeWorkspace?: boolean;
4
- logger?: {
5
- debug?: (msg: string) => void;
6
- info?: (msg: string) => void;
7
- warn?: (msg: string) => void;
8
- error?: (msg: string) => void;
9
- };
10
- }
11
- export declare const PD_ENV_VARS: {
12
- readonly WORKSPACE_DIR: "PD_WORKSPACE_DIR";
13
- readonly STATE_DIR: "PD_STATE_DIR";
14
- readonly DEBUG: "DEBUG";
15
- };
16
- export declare const PD_ENV_DESCRIPTIONS: Record<keyof typeof PD_ENV_VARS, {
17
- desc: string;
18
- example: string;
19
- }>;
20
- export declare function printEnvVarHelp(): void;
21
- export interface PDConfig {
22
- workspace?: string;
23
- state?: string;
24
- debug?: boolean;
25
- }
26
- export declare class PathResolver {
27
- private static extensionRoot;
28
- private workspaceDir;
29
- private stateDir;
30
- private readonly logger?;
31
- private readonly normalizeWorkspace;
32
- private initialized;
33
- static setExtensionRoot(extensionRootPath: string): void;
34
- static getExtensionRoot(): string | null;
35
- constructor(options?: PathResolverOptions);
36
- private log;
37
- private detectWorkspaceDir;
38
- private normalizePath;
39
- normalizeWorkspacePath(inputPath: string): string;
40
- getWorkspaceDir(): string;
41
- getStateDir(): string;
42
- resolve(key: string): string;
43
- ensureStateDir(): void;
44
- static createFromHookContext(ctx: any): PathResolver;
45
- }
46
- export declare function createDefaultConfig(targetPath?: string): string;
@@ -1,65 +0,0 @@
1
- /**
2
- * Principles Disciple Directory Constants
3
- * Establishing a logical separation between Identity, State, and Memory.
4
- */
5
- export declare const PD_DIRS: {
6
- IDENTITY: string;
7
- MODELS: string;
8
- STATE: string;
9
- MEMORY: string;
10
- OKR: string;
11
- LOGS: string;
12
- SESSIONS: string;
13
- PAIN_SAMPLES: string;
14
- LOCKS: string;
15
- NOCTURNAL_SAMPLES: string;
16
- NOCTURNAL_MEMORY: string;
17
- NOCTURNAL_EXPORTS: string;
18
- };
19
- /**
20
- * Standard File Path Mappings
21
- */
22
- export declare const PD_FILES: {
23
- PROFILE: string;
24
- PRINCIPLES: string;
25
- THINKING_OS: string;
26
- KERNEL: string;
27
- DECISION_POLICY: string;
28
- MODELS_DIR: string;
29
- STATE_DIR: string;
30
- EVOLUTION_QUEUE: string;
31
- EVOLUTION_DIRECTIVE: string;
32
- WORKBOARD: string;
33
- AGENT_SCORECARD: string;
34
- PAIN_FLAG: string;
35
- SYSTEM_CAPABILITIES: string;
36
- PAIN_SETTINGS: string;
37
- PAIN_CANDIDATES: string;
38
- THINKING_OS_USAGE: string;
39
- TRAJECTORY_DB: string;
40
- TRAJECTORY_BLOBS_DIR: string;
41
- EXPORTS_DIR: string;
42
- SESSION_DIR: string;
43
- DICTIONARY: string;
44
- PRINCIPLE_BLACKLIST: string;
45
- NOCTURNAL_SAMPLES_DIR: string;
46
- NOCTURNAL_MEMORY_DIR: string;
47
- NOCTURNAL_EXPORTS_DIR: string;
48
- PLAN: string;
49
- MEMORY_MD: string;
50
- HEARTBEAT: string;
51
- SYSTEM_LOG: string;
52
- REFLECTION_LOG: string;
53
- USER_CONTEXT: string;
54
- OKR_DIR: string;
55
- CURRENT_FOCUS: string;
56
- WEEK_STATE: string;
57
- THINKING_OS_CANDIDATES: string;
58
- SEMANTIC_PAIN: string;
59
- EVOLUTION_STREAM: string;
60
- EVOLUTION_LOCK: string;
61
- };
62
- /**
63
- * Resolves a PD file path within a given workspace.
64
- */
65
- export declare function resolvePdPath(workspaceDir: string, fileKey: keyof typeof PD_FILES): string;
@@ -1,121 +0,0 @@
1
- /**
2
- * Principle Training State Store
3
- * ================================================================
4
- *
5
- * Independent persistence layer for principle internalization tracking.
6
- * Clearly separates the four truth states defined in the architecture:
7
- * 1. sample_generated — reflection pair produced and passed arbiter
8
- * 2. sample_included_in_train_run — training run consumed the sample
9
- * 3. checkpoint_deployed — adapter/checkpoint is routable in OpenClaw
10
- * 4. behavior_internalized — deployed worker improves on holdout eval
11
- *
12
- * DESIGN CONSTRAINTS (Phase 1):
13
- * - No runtime target selection (Task 1.2 scope)
14
- * - No training logic (Phase 2+ scope)
15
- * - No evolution-reducer modifications
16
- *
17
- * FILE: {stateDir}/principle_training_state.json
18
- */
19
- import type { PrincipleEvaluatorLevel } from './evolution-types.js';
20
- /** File name for principle training state persistence */
21
- export declare const PRINCIPLE_TRAINING_FILE = "principle_training_state.json";
22
- /**
23
- * Internalization status — tracks progress through the four truth states:
24
- * sample_generated → sample_included_in_train_run → checkpoint_deployed → behavior_internalized
25
- */
26
- export type InternalizationStatus = 'prompt_only' | 'needs_training' | 'in_training' | 'deployed_pending_eval' | 'internalized' | 'regressed';
27
- /**
28
- * Per-principle training state record.
29
- * Tracks the full lineage from sample generation through deployment.
30
- */
31
- export interface PrincipleTrainingState {
32
- /** Principle identifier (e.g., "T-01", "P_write_before_delete") */
33
- principleId: string;
34
- /** Evaluability classification — controls whether automatic targeting is allowed */
35
- evaluability: PrincipleEvaluatorLevel;
36
- /** Number of applicable decision-point opportunities observed */
37
- applicableOpportunityCount: number;
38
- /** Number of violations of this principle observed */
39
- observedViolationCount: number;
40
- /** Observed compliance rate (0.0 – 1.0) */
41
- complianceRate: number;
42
- /** Trend direction for violations (+1 = improving, 0 = stable, -1 = worsening) */
43
- violationTrend: number;
44
- /** Number of reflection samples generated for this principle */
45
- generatedSampleCount: number;
46
- /** Number of generated samples approved by arbiter */
47
- approvedSampleCount: number;
48
- /** Training run IDs that included samples from this principle */
49
- includedTrainRunIds: string[];
50
- /** Deployed checkpoint IDs for this principle */
51
- deployedCheckpointIds: string[];
52
- /** Last holdout evaluation score (0.0 – 1.0), if available */
53
- lastEvalScore?: number;
54
- /** Current internalization status */
55
- internalizationStatus: InternalizationStatus;
56
- }
57
- /**
58
- * The full principle training store — a map of principleId -> state.
59
- * Stored as a single JSON object in principle_training_state.json.
60
- */
61
- export type PrincipleTrainingStore = Record<string, PrincipleTrainingState>;
62
- /**
63
- * Creates a default principle training state for a newly tracked principle.
64
- * Safe defaults: evaluability='manual_only' (requires explicit upgrade to auto-training),
65
- * internalizationStatus='prompt_only' (starts as prompt-only, not eligible for
66
- * automatic training until upgraded).
67
- */
68
- export declare function createDefaultPrincipleState(principleId: string): PrincipleTrainingState;
69
- /**
70
- * Loads the full principle training store from disk.
71
- * Returns an empty store if the file does not exist or is corrupted.
72
- */
73
- export declare function loadStore(stateDir: string): PrincipleTrainingStore;
74
- /**
75
- * Synchronously saves the full principle training store to disk.
76
- * Uses file locking to prevent concurrent write corruption.
77
- */
78
- export declare function saveStore(stateDir: string, store: PrincipleTrainingStore): void;
79
- /**
80
- * Asynchronously loads the full principle training store from disk.
81
- * Returns an empty store if the file does not exist or is corrupted.
82
- */
83
- export declare function loadStoreAsync(stateDir: string): Promise<PrincipleTrainingStore>;
84
- /**
85
- * Asynchronously saves the full principle training store to disk.
86
- * Uses file locking to prevent concurrent write corruption.
87
- */
88
- export declare function saveStoreAsync(stateDir: string, store: PrincipleTrainingStore): Promise<void>;
89
- /**
90
- * Gets the training state for a single principle.
91
- * Returns a default state if the principle is not yet tracked.
92
- */
93
- export declare function getPrincipleState(stateDir: string, principleId: string): PrincipleTrainingState;
94
- /**
95
- * Updates or inserts the training state for a single principle.
96
- * Persists the full store after the update.
97
- *
98
- * Uses file locking around the entire read-modify-write sequence to prevent
99
- * concurrent updates from causing lost writes.
100
- */
101
- export declare function setPrincipleState(stateDir: string, state: PrincipleTrainingState): void;
102
- /**
103
- * Removes a principle from the training store.
104
- * Does nothing if the principle is not tracked.
105
- *
106
- * Uses file locking around the entire read-modify-write sequence.
107
- */
108
- export declare function removePrincipleState(stateDir: string, principleId: string): void;
109
- /**
110
- * Returns all principles currently tracked in the store.
111
- */
112
- export declare function listPrincipleIds(stateDir: string): string[];
113
- /**
114
- * Returns all principles matching a given internalization status.
115
- */
116
- export declare function listPrinciplesByStatus(stateDir: string, status: InternalizationStatus): PrincipleTrainingState[];
117
- /**
118
- * Returns all principles with 'deterministic' or 'weak_heuristic' evaluability
119
- * that are eligible for automatic nocturnal targeting.
120
- */
121
- export declare function listEvaluablePrinciples(stateDir: string): PrincipleTrainingState[];
@@ -1,321 +0,0 @@
1
- /**
2
- * Principle Training State Store
3
- * ================================================================
4
- *
5
- * Independent persistence layer for principle internalization tracking.
6
- * Clearly separates the four truth states defined in the architecture:
7
- * 1. sample_generated — reflection pair produced and passed arbiter
8
- * 2. sample_included_in_train_run — training run consumed the sample
9
- * 3. checkpoint_deployed — adapter/checkpoint is routable in OpenClaw
10
- * 4. behavior_internalized — deployed worker improves on holdout eval
11
- *
12
- * DESIGN CONSTRAINTS (Phase 1):
13
- * - No runtime target selection (Task 1.2 scope)
14
- * - No training logic (Phase 2+ scope)
15
- * - No evolution-reducer modifications
16
- *
17
- * FILE: {stateDir}/principle_training_state.json
18
- */
19
- import * as fs from 'fs';
20
- import * as path from 'path';
21
- import { withLock, withLockAsync } from '../utils/file-lock.js';
22
- // ---------------------------------------------------------------------------
23
- // Constants
24
- // ---------------------------------------------------------------------------
25
- /** File name for principle training state persistence */
26
- export const PRINCIPLE_TRAINING_FILE = 'principle_training_state.json';
27
- // ---------------------------------------------------------------------------
28
- // Valid Status Values (for validation)
29
- // ---------------------------------------------------------------------------
30
- const VALID_EVALUABILITIES = ['deterministic', 'weak_heuristic', 'manual_only'];
31
- const VALID_INTERNALIZATION_STATUSES = [
32
- 'prompt_only',
33
- 'needs_training',
34
- 'in_training',
35
- 'deployed_pending_eval',
36
- 'internalized',
37
- 'regressed',
38
- ];
39
- // ---------------------------------------------------------------------------
40
- // Schema Version
41
- // ---------------------------------------------------------------------------
42
- // Factory
43
- // ---------------------------------------------------------------------------
44
- /**
45
- * Creates a default principle training state for a newly tracked principle.
46
- * Safe defaults: evaluability='manual_only' (requires explicit upgrade to auto-training),
47
- * internalizationStatus='prompt_only' (starts as prompt-only, not eligible for
48
- * automatic training until upgraded).
49
- */
50
- export function createDefaultPrincipleState(principleId) {
51
- return {
52
- principleId,
53
- evaluability: 'manual_only', // Safe default: requires explicit upgrade
54
- applicableOpportunityCount: 0,
55
- observedViolationCount: 0,
56
- complianceRate: 0,
57
- violationTrend: 0,
58
- generatedSampleCount: 0,
59
- approvedSampleCount: 0,
60
- includedTrainRunIds: [],
61
- deployedCheckpointIds: [],
62
- internalizationStatus: 'prompt_only', // Safe default: starts as prompt-only
63
- };
64
- }
65
- // ---------------------------------------------------------------------------
66
- // File Operations
67
- // ---------------------------------------------------------------------------
68
- function getFilePath(stateDir) {
69
- return path.join(stateDir, PRINCIPLE_TRAINING_FILE);
70
- }
71
- /**
72
- * Applies migration-safe defaults to a raw parsed store.
73
- * Handles:
74
- * - Missing top-level entries (principles added since last load)
75
- * - Missing fields on existing entries (schema evolution)
76
- * - Invalid enum values (falls back to safe defaults)
77
- * - NaN / out-of-range numeric values (clamped or defaulted)
78
- */
79
- function applyMigrationDefaults(raw) {
80
- if (!raw || typeof raw !== 'object') {
81
- return {};
82
- }
83
- const store = raw;
84
- const result = {};
85
- for (const [principleId, state] of Object.entries(store)) {
86
- if (!state || typeof state !== 'object') {
87
- // Corrupted entry — skip
88
- continue;
89
- }
90
- const s = state;
91
- // evaluability — validate enum
92
- const rawEval = s.evaluability;
93
- const evaluability = VALID_EVALUABILITIES.includes(rawEval)
94
- ? rawEval
95
- : 'manual_only';
96
- // internalizationStatus — validate enum
97
- const rawStatus = s.internalizationStatus;
98
- const internalizationStatus = VALID_INTERNALIZATION_STATUSES.includes(rawStatus)
99
- ? rawStatus
100
- : 'prompt_only';
101
- // Numeric fields — clamp to valid ranges
102
- const applicableOpportunityCount = clampInt(s.applicableOpportunityCount, 0, Infinity, 0);
103
- const observedViolationCount = clampInt(s.observedViolationCount, 0, Infinity, 0);
104
- const complianceRate = clampFloat(s.complianceRate, 0, 1, 0);
105
- const violationTrend = clampFloat(s.violationTrend, -1, 1, 0);
106
- const generatedSampleCount = clampInt(s.generatedSampleCount, 0, Infinity, 0);
107
- const approvedSampleCount = clampInt(s.approvedSampleCount, 0, Infinity, 0);
108
- // Optional float — only set if in range [0, 1]
109
- const rawLastEval = s.lastEvalScore;
110
- let lastEvalScore;
111
- if (rawLastEval != null && typeof rawLastEval === 'number') {
112
- const clamped = Math.max(0, Math.min(1, rawLastEval));
113
- if (Number.isFinite(clamped)) {
114
- lastEvalScore = clamped;
115
- }
116
- }
117
- // Arrays — ensure always arrays
118
- const includedTrainRunIds = Array.isArray(s.includedTrainRunIds)
119
- ? s.includedTrainRunIds.filter((id) => typeof id === 'string')
120
- : [];
121
- const deployedCheckpointIds = Array.isArray(s.deployedCheckpointIds)
122
- ? s.deployedCheckpointIds.filter((id) => typeof id === 'string')
123
- : [];
124
- // Skip entries where the stored principleId doesn't match the map key.
125
- // This indicates a corrupted or tampered entry.
126
- const storedPrincipleId = s.principleId;
127
- if (typeof storedPrincipleId !== 'string' || storedPrincipleId !== principleId) {
128
- continue;
129
- }
130
- result[principleId] = {
131
- principleId,
132
- evaluability,
133
- applicableOpportunityCount,
134
- observedViolationCount,
135
- complianceRate,
136
- violationTrend,
137
- generatedSampleCount,
138
- approvedSampleCount,
139
- includedTrainRunIds,
140
- deployedCheckpointIds,
141
- lastEvalScore,
142
- internalizationStatus,
143
- };
144
- }
145
- return result;
146
- }
147
- /** Clamp an unknown value to a float range, returning default if invalid */
148
- function clampFloat(value, min, max, fallback) {
149
- if (typeof value !== 'number' || !Number.isFinite(value))
150
- return fallback;
151
- return Math.max(min, Math.min(max, value));
152
- }
153
- /** Clamp an unknown value to an integer range, returning default if invalid */
154
- function clampInt(value, min, max, fallback) {
155
- if (typeof value !== 'number' || !Number.isFinite(value))
156
- return fallback;
157
- const rounded = Math.round(value);
158
- return Math.max(min, Math.min(max, rounded));
159
- }
160
- // ---------------------------------------------------------------------------
161
- // Synchronous Read/Write
162
- // ---------------------------------------------------------------------------
163
- /**
164
- * Loads the full principle training store from disk.
165
- * Returns an empty store if the file does not exist or is corrupted.
166
- */
167
- export function loadStore(stateDir) {
168
- const filePath = getFilePath(stateDir);
169
- if (!fs.existsSync(filePath)) {
170
- return {};
171
- }
172
- try {
173
- const raw = fs.readFileSync(filePath, 'utf-8');
174
- const parsed = JSON.parse(raw);
175
- return applyMigrationDefaults(parsed);
176
- }
177
- catch (err) {
178
- // Corrupted file — fail-safe, return empty store
179
- console.warn(`[principle-training-state] Failed to load store from "${filePath}": ${err instanceof Error ? err.message : String(err)}. Returning empty store.`);
180
- return {};
181
- }
182
- }
183
- /**
184
- * Synchronously saves the full principle training store to disk.
185
- * Uses file locking to prevent concurrent write corruption.
186
- */
187
- export function saveStore(stateDir, store) {
188
- const filePath = getFilePath(stateDir);
189
- const dir = path.dirname(filePath);
190
- if (!fs.existsSync(dir)) {
191
- fs.mkdirSync(dir, { recursive: true });
192
- }
193
- withLock(filePath, () => {
194
- fs.writeFileSync(filePath, JSON.stringify(store, null, 2), 'utf-8');
195
- });
196
- }
197
- // ---------------------------------------------------------------------------
198
- // Async Read/Write (for use in async contexts)
199
- // ---------------------------------------------------------------------------
200
- /**
201
- * Asynchronously loads the full principle training store from disk.
202
- * Returns an empty store if the file does not exist or is corrupted.
203
- */
204
- export async function loadStoreAsync(stateDir) {
205
- const filePath = getFilePath(stateDir);
206
- if (!fs.existsSync(filePath)) {
207
- return {};
208
- }
209
- try {
210
- const raw = await fs.promises.readFile(filePath, 'utf-8');
211
- const parsed = JSON.parse(raw);
212
- return applyMigrationDefaults(parsed);
213
- }
214
- catch (err) {
215
- console.warn(`[principle-training-state] Failed to load store asynchronously from "${filePath}": ${err instanceof Error ? err.message : String(err)}. Returning empty store.`);
216
- return {};
217
- }
218
- }
219
- /**
220
- * Asynchronously saves the full principle training store to disk.
221
- * Uses file locking to prevent concurrent write corruption.
222
- */
223
- export async function saveStoreAsync(stateDir, store) {
224
- const filePath = getFilePath(stateDir);
225
- const dir = path.dirname(filePath);
226
- if (!fs.existsSync(dir)) {
227
- await fs.promises.mkdir(dir, { recursive: true });
228
- }
229
- await withLockAsync(filePath, async () => {
230
- await fs.promises.writeFile(filePath, JSON.stringify(store, null, 2), 'utf-8');
231
- });
232
- }
233
- // ---------------------------------------------------------------------------
234
- // Single-Principle Accessors
235
- // ---------------------------------------------------------------------------
236
- /**
237
- * Gets the training state for a single principle.
238
- * Returns a default state if the principle is not yet tracked.
239
- */
240
- export function getPrincipleState(stateDir, principleId) {
241
- const store = loadStore(stateDir);
242
- return store[principleId] ?? createDefaultPrincipleState(principleId);
243
- }
244
- /**
245
- * Updates or inserts the training state for a single principle.
246
- * Persists the full store after the update.
247
- *
248
- * Uses file locking around the entire read-modify-write sequence to prevent
249
- * concurrent updates from causing lost writes.
250
- */
251
- export function setPrincipleState(stateDir, state) {
252
- const filePath = getFilePath(stateDir);
253
- withLock(filePath, () => {
254
- // Read current store while holding the lock
255
- const store = loadStoreUnlocked(filePath);
256
- store[state.principleId] = state;
257
- // Write directly — no nested lock needed (we hold the outer lock)
258
- const dir = path.dirname(filePath);
259
- if (!fs.existsSync(dir)) {
260
- fs.mkdirSync(dir, { recursive: true });
261
- }
262
- fs.writeFileSync(filePath, JSON.stringify(store, null, 2), 'utf-8');
263
- });
264
- }
265
- /**
266
- * Internal: loads store from a specific file path without acquiring a lock.
267
- * Caller must hold the lock. Use only inside locked sections.
268
- */
269
- function loadStoreUnlocked(filePath) {
270
- if (!fs.existsSync(filePath)) {
271
- return {};
272
- }
273
- try {
274
- const raw = fs.readFileSync(filePath, 'utf-8');
275
- return applyMigrationDefaults(JSON.parse(raw));
276
- }
277
- catch {
278
- return {};
279
- }
280
- }
281
- /**
282
- * Removes a principle from the training store.
283
- * Does nothing if the principle is not tracked.
284
- *
285
- * Uses file locking around the entire read-modify-write sequence.
286
- */
287
- export function removePrincipleState(stateDir, principleId) {
288
- const filePath = getFilePath(stateDir);
289
- withLock(filePath, () => {
290
- const store = loadStoreUnlocked(filePath);
291
- if (Object.prototype.hasOwnProperty.call(store, principleId)) {
292
- delete store[principleId];
293
- const dir = path.dirname(filePath);
294
- if (!fs.existsSync(dir)) {
295
- fs.mkdirSync(dir, { recursive: true });
296
- }
297
- fs.writeFileSync(filePath, JSON.stringify(store, null, 2), 'utf-8');
298
- }
299
- });
300
- }
301
- /**
302
- * Returns all principles currently tracked in the store.
303
- */
304
- export function listPrincipleIds(stateDir) {
305
- return Object.keys(loadStore(stateDir));
306
- }
307
- /**
308
- * Returns all principles matching a given internalization status.
309
- */
310
- export function listPrinciplesByStatus(stateDir, status) {
311
- const store = loadStore(stateDir);
312
- return Object.values(store).filter((s) => s.internalizationStatus === status);
313
- }
314
- /**
315
- * Returns all principles with 'deterministic' or 'weak_heuristic' evaluability
316
- * that are eligible for automatic nocturnal targeting.
317
- */
318
- export function listEvaluablePrinciples(stateDir) {
319
- const store = loadStore(stateDir);
320
- return Object.values(store).filter((s) => s.evaluability !== 'manual_only' && s.internalizationStatus !== 'prompt_only');
321
- }
@@ -1,62 +0,0 @@
1
- export declare const PROFILE_AUDIT_LEVELS: Set<string>;
2
- export declare const PROFILE_EVOLUTION_MODES: Set<string>;
3
- export declare const PROFILE_TEST_LEVELS: Set<string>;
4
- export declare const PROFILE_DEFAULTS: {
5
- audit_level: string;
6
- risk_paths: string[];
7
- evolution_mode: string;
8
- gate: {
9
- require_plan_for_risk_paths: boolean;
10
- require_audit_before_write: boolean;
11
- require_reviewer_after_write: boolean;
12
- };
13
- tests: {
14
- on_change: string;
15
- on_risk_change: string;
16
- commands: Record<string, string>;
17
- };
18
- pain: {
19
- soft_capture_threshold: number;
20
- adaptive: {
21
- enabled: boolean;
22
- spiral_boost: number;
23
- min_threshold: number;
24
- max_threshold: number;
25
- backlog_trigger: number;
26
- hard_failure_trigger: number;
27
- low_recent_success_boost: number;
28
- high_recent_pain_boost: number;
29
- };
30
- };
31
- lifecycle: {
32
- enabled: boolean;
33
- heartbeat_stale_hours: number;
34
- };
35
- progressive_gate: {
36
- enabled: boolean;
37
- plan_approvals: {
38
- enabled: boolean;
39
- max_lines_override: number;
40
- allowed_patterns: string[];
41
- allowed_operations: string[];
42
- };
43
- };
44
- edit_verification: {
45
- enabled: boolean;
46
- max_file_size_bytes: number;
47
- fuzzy_match_enabled: boolean;
48
- fuzzy_match_threshold: number;
49
- skip_large_file_action: "warn" | "block";
50
- };
51
- thinking_checkpoint: {
52
- enabled: boolean;
53
- window_ms: number;
54
- high_risk_tools: string[];
55
- };
56
- custom_guards: Array<{
57
- pattern: string;
58
- message: string;
59
- severity: string;
60
- }>;
61
- };
62
- export declare function normalizeProfile(rawProfile: any): any;