principles-disciple 1.8.1 → 1.8.3

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 (508) 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 +4 -4
  10. package/package.json +11 -13
  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} +175 -62
  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} +160 -80
  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} +235 -79
  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/{dist/service/subagent-workflow/empathy-observer-workflow-manager.js → src/service/subagent-workflow/empathy-observer-workflow-manager.ts} +240 -117
  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/{dist/service/subagent-workflow/types.d.ts → src/service/subagent-workflow/types.ts} +137 -18
  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/en/skills/ai-sprint-orchestration/EXAMPLES.md +63 -0
  138. package/templates/langs/en/skills/ai-sprint-orchestration/REFERENCE.md +136 -0
  139. package/templates/langs/en/skills/ai-sprint-orchestration/SKILL.md +67 -0
  140. package/templates/langs/en/skills/ai-sprint-orchestration/references/agent-registry.json +214 -0
  141. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +107 -0
  142. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +107 -0
  143. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +105 -0
  144. package/templates/langs/en/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +108 -0
  145. package/templates/langs/en/skills/ai-sprint-orchestration/references/workflow-v1-acceptance-checklist.md +58 -0
  146. package/templates/langs/en/skills/ai-sprint-orchestration/references/workflow-v1.4-work-unit-handoff.md +190 -0
  147. package/templates/langs/en/skills/ai-sprint-orchestration/runtime/.gitignore +2 -0
  148. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/archive.mjs +310 -0
  149. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/contract-enforcement.mjs +683 -0
  150. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/decision.mjs +604 -0
  151. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/state-store.mjs +32 -0
  152. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/lib/task-specs.mjs +707 -0
  153. package/templates/langs/en/skills/ai-sprint-orchestration/scripts/run.mjs +3419 -0
  154. package/templates/langs/zh/skills/ai-sprint-orchestration/EXAMPLES.md +63 -0
  155. package/templates/langs/zh/skills/ai-sprint-orchestration/REFERENCE.md +136 -0
  156. package/templates/langs/zh/skills/ai-sprint-orchestration/SKILL.md +67 -0
  157. package/templates/langs/zh/skills/ai-sprint-orchestration/references/agent-registry.json +214 -0
  158. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/bugfix-complex-template.json +107 -0
  159. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/feature-complex-template.json +107 -0
  160. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal-verify.json +105 -0
  161. package/templates/langs/zh/skills/ai-sprint-orchestration/references/specs/workflow-validation-minimal.json +108 -0
  162. package/templates/langs/zh/skills/ai-sprint-orchestration/references/workflow-v1-acceptance-checklist.md +58 -0
  163. package/templates/langs/zh/skills/ai-sprint-orchestration/references/workflow-v1.4-work-unit-handoff.md +190 -0
  164. package/templates/langs/zh/skills/ai-sprint-orchestration/runtime/.gitignore +2 -0
  165. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/archive.mjs +310 -0
  166. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/contract-enforcement.mjs +683 -0
  167. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/decision.mjs +604 -0
  168. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/state-store.mjs +32 -0
  169. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/lib/task-specs.mjs +707 -0
  170. package/templates/langs/zh/skills/ai-sprint-orchestration/scripts/run.mjs +3419 -0
  171. package/templates/langs/zh/skills/ai-sprint-orchestration/test/archive.test.mjs +230 -0
  172. package/templates/langs/zh/skills/ai-sprint-orchestration/test/contract-enforcement.test.mjs +672 -0
  173. package/templates/langs/zh/skills/ai-sprint-orchestration/test/decision.test.mjs +1321 -0
  174. package/templates/langs/zh/skills/ai-sprint-orchestration/test/run.test.mjs +1419 -0
  175. package/templates/langs/zh/skills/pd-diagnostician/SKILL.md +70 -1
  176. package/templates/pain_settings.json +2 -1
  177. package/tests/README.md +120 -0
  178. package/tests/build-artifacts.test.ts +111 -0
  179. package/tests/commands/evolution-status.test.ts +222 -0
  180. package/tests/commands/evolver.test.ts +22 -0
  181. package/tests/commands/export.test.ts +78 -0
  182. package/tests/commands/nocturnal-review.test.ts +448 -0
  183. package/tests/commands/nocturnal-train.test.ts +97 -0
  184. package/tests/commands/pain.test.ts +108 -0
  185. package/tests/commands/samples.test.ts +65 -0
  186. package/tests/commands/strategy.test.ts +34 -0
  187. package/tests/commands/thinking-os.test.ts +88 -0
  188. package/tests/core/adaptive-thresholds.test.ts +261 -0
  189. package/tests/core/config-service.test.ts +89 -0
  190. package/tests/core/config.test.ts +90 -0
  191. package/tests/core/control-ui-db.test.ts +75 -0
  192. package/tests/core/core-template-guidance.test.ts +21 -0
  193. package/tests/core/detection-funnel.test.ts +63 -0
  194. package/tests/core/detection-service.test.ts +50 -0
  195. package/tests/core/dictionary-service.test.ts +116 -0
  196. package/tests/core/dictionary.test.ts +168 -0
  197. package/tests/core/empathy-keyword-matcher.test.ts +209 -0
  198. package/tests/core/event-log.test.ts +181 -0
  199. package/tests/core/evolution-e2e.test.ts +58 -0
  200. package/tests/core/evolution-engine-gate-integration.test.ts +543 -0
  201. package/tests/core/evolution-engine.test.ts +562 -0
  202. package/tests/core/evolution-logger.test.ts +148 -0
  203. package/tests/core/evolution-migration.test.ts +50 -0
  204. package/tests/core/evolution-paths.test.ts +21 -0
  205. package/tests/core/evolution-reducer.detector-metadata.test.ts +602 -0
  206. package/tests/core/evolution-reducer.test.ts +180 -0
  207. package/tests/core/evolution-types-loop.test.ts +48 -0
  208. package/tests/core/evolution-user-stories.e2e.test.ts +249 -0
  209. package/tests/core/external-training-contract.test.ts +463 -0
  210. package/tests/core/focus-history.test.ts +682 -0
  211. package/tests/core/init-flatten.test.ts +69 -0
  212. package/tests/core/init-refactor.test.ts +87 -0
  213. package/tests/core/init-v1.3.test.ts +46 -0
  214. package/tests/core/init.test.ts +190 -0
  215. package/tests/core/local-worker-routing.test.ts +757 -0
  216. package/tests/core/migration.test.ts +84 -0
  217. package/tests/core/model-deployment-registry.test.ts +845 -0
  218. package/tests/core/model-training-registry.test.ts +889 -0
  219. package/tests/core/nocturnal-arbiter.test.ts +494 -0
  220. package/tests/core/nocturnal-candidate-scoring.test.ts +400 -0
  221. package/tests/core/nocturnal-compliance.test.ts +646 -0
  222. package/tests/core/nocturnal-dataset.test.ts +892 -0
  223. package/tests/core/nocturnal-executability.test.ts +357 -0
  224. package/tests/core/nocturnal-export.test.ts +462 -0
  225. package/tests/core/nocturnal-reviewed-subset-comparison.test.ts +428 -0
  226. package/tests/core/nocturnal-trajectory-extractor.test.ts +634 -0
  227. package/tests/core/nocturnal-trinity.test.ts +953 -0
  228. package/tests/core/pain.test.ts +33 -0
  229. package/tests/core/path-resolver.test.ts +57 -0
  230. package/tests/core/paths-refactor.test.ts +42 -0
  231. package/tests/core/phase7-rollout-integration.test.ts +477 -0
  232. package/tests/core/principle-training-state.test.ts +712 -0
  233. package/tests/core/profile.test.ts +56 -0
  234. package/tests/core/promotion-gate.test.ts +556 -0
  235. package/tests/core/risk-calculator.test.ts +168 -0
  236. package/tests/core/session-tracker.test.ts +191 -0
  237. package/tests/core/training-program.test.ts +472 -0
  238. package/tests/core/trajectory.test.ts +265 -0
  239. package/tests/core/workspace-context-factory.test.ts +18 -0
  240. package/tests/core/workspace-context.test.ts +134 -0
  241. package/tests/fixtures/nocturnal-reviewed-subset.json +183 -0
  242. package/tests/fixtures/production-compatibility.test.ts +147 -0
  243. package/tests/fixtures/production-mock-generator.ts +282 -0
  244. package/tests/hooks/bash-risk-integration.test.ts +137 -0
  245. package/tests/hooks/bash-risk.test.ts +81 -0
  246. package/tests/hooks/edit-verification.test.ts +678 -0
  247. package/tests/hooks/gate-edit-verification-p1.test.ts +632 -0
  248. package/tests/hooks/gate-edit-verification.test.ts +435 -0
  249. package/tests/hooks/gate-pipeline-integration.test.ts +404 -0
  250. package/tests/hooks/gate.test.ts +271 -0
  251. package/tests/hooks/gfi-gate-unit.test.ts +422 -0
  252. package/tests/hooks/gfi-gate.test.ts +669 -0
  253. package/tests/hooks/lifecycle.test.ts +248 -0
  254. package/tests/hooks/llm.test.ts +308 -0
  255. package/tests/hooks/message-sanitize.test.ts +36 -0
  256. package/tests/hooks/pain.test.ts +141 -0
  257. package/tests/hooks/progressive-trust-gate.test.ts +277 -0
  258. package/tests/hooks/prompt.test.ts +1411 -0
  259. package/tests/hooks/subagent.test.ts +467 -0
  260. package/tests/hooks/thinking-gate.test.ts +313 -0
  261. package/tests/http/principles-console-route.test.ts +140 -0
  262. package/tests/hygiene-tracker.test.ts +77 -0
  263. package/tests/index.integration.test.ts +179 -0
  264. package/tests/index.shadow-routing.integration.test.ts +140 -0
  265. package/tests/index.test.ts +9 -0
  266. package/tests/integration/empathy-workflow-integration.test.ts +627 -0
  267. package/tests/service/control-ui-query-service.test.ts +121 -0
  268. package/tests/service/empathy-observer-workflow-manager.test.ts +176 -0
  269. package/tests/service/evolution-worker.test.ts +585 -0
  270. package/tests/service/nocturnal-runtime.test.ts +470 -0
  271. package/tests/service/nocturnal-service.test.ts +577 -0
  272. package/tests/service/nocturnal-target-selector.test.ts +615 -0
  273. package/tests/service/nocturnal-workflow-manager.test.ts +439 -0
  274. package/tests/service/phase3-input-filter.test.ts +289 -0
  275. package/tests/service/runtime-summary-service.test.ts +919 -0
  276. package/tests/task-compliance.test.ts +166 -0
  277. package/tests/test-utils.ts +48 -0
  278. package/tests/tools/critique-prompt.test.ts +260 -0
  279. package/tests/tools/deep-reflect.test.ts +232 -0
  280. package/tests/tools/model-index.test.ts +246 -0
  281. package/tests/ui/app.test.tsx +114 -0
  282. package/tests/utils/file-lock.test.ts +407 -0
  283. package/tests/utils/hashing.test.ts +32 -0
  284. package/tests/utils/io.test.ts +39 -0
  285. package/tests/utils/nlp.test.ts +53 -0
  286. package/tests/utils/plugin-logger.test.ts +156 -0
  287. package/tsconfig.json +16 -0
  288. package/tsconfig.tsbuildinfo +1 -0
  289. package/ui/src/App.tsx +45 -0
  290. package/ui/src/api.ts +216 -0
  291. package/ui/src/charts.tsx +586 -0
  292. package/ui/src/components/ErrorState.tsx +6 -0
  293. package/ui/src/components/Loading.tsx +13 -0
  294. package/ui/src/components/ProtectedRoute.tsx +12 -0
  295. package/ui/src/components/Shell.tsx +91 -0
  296. package/ui/src/components/WorkspaceConfig.tsx +146 -0
  297. package/ui/src/components/index.ts +5 -0
  298. package/ui/src/context/auth.tsx +80 -0
  299. package/ui/src/context/theme.tsx +66 -0
  300. package/ui/src/hooks/useAutoRefresh.ts +39 -0
  301. package/ui/src/i18n/ui.ts +363 -0
  302. package/ui/src/main.tsx +16 -0
  303. package/ui/src/pages/EvolutionPage.tsx +352 -0
  304. package/ui/src/pages/FeedbackPage.tsx +140 -0
  305. package/ui/src/pages/GateMonitorPage.tsx +136 -0
  306. package/ui/src/pages/LoginPage.tsx +88 -0
  307. package/ui/src/pages/OverviewPage.tsx +238 -0
  308. package/ui/src/pages/SamplesPage.tsx +174 -0
  309. package/ui/src/pages/ThinkingModelsPage.tsx +127 -0
  310. package/ui/src/styles.css +1661 -0
  311. package/ui/src/types.ts +368 -0
  312. package/ui/src/utils/format.ts +15 -0
  313. package/vitest.config.ts +23 -0
  314. package/dist/commands/capabilities.d.ts +0 -3
  315. package/dist/commands/capabilities.js +0 -73
  316. package/dist/commands/context.d.ts +0 -5
  317. package/dist/commands/evolution-status.d.ts +0 -4
  318. package/dist/commands/evolution-status.js +0 -117
  319. package/dist/commands/evolver.d.ts +0 -9
  320. package/dist/commands/evolver.js +0 -26
  321. package/dist/commands/export.d.ts +0 -2
  322. package/dist/commands/export.js +0 -98
  323. package/dist/commands/focus.d.ts +0 -14
  324. package/dist/commands/focus.js +0 -457
  325. package/dist/commands/nocturnal-review.d.ts +0 -24
  326. package/dist/commands/nocturnal-review.js +0 -265
  327. package/dist/commands/nocturnal-rollout.d.ts +0 -27
  328. package/dist/commands/nocturnal-rollout.js +0 -671
  329. package/dist/commands/nocturnal-train.d.ts +0 -25
  330. package/dist/commands/nocturnal-train.js +0 -919
  331. package/dist/commands/pain.d.ts +0 -5
  332. package/dist/commands/principle-rollback.d.ts +0 -4
  333. package/dist/commands/principle-rollback.js +0 -22
  334. package/dist/commands/rollback.d.ts +0 -19
  335. package/dist/commands/samples.d.ts +0 -2
  336. package/dist/commands/samples.js +0 -55
  337. package/dist/commands/strategy.d.ts +0 -3
  338. package/dist/commands/strategy.js +0 -29
  339. package/dist/commands/thinking-os.d.ts +0 -2
  340. package/dist/config/defaults/runtime.d.ts +0 -40
  341. package/dist/config/errors.d.ts +0 -84
  342. package/dist/config/errors.js +0 -94
  343. package/dist/config/index.js +0 -7
  344. package/dist/constants/diagnostician.d.ts +0 -12
  345. package/dist/constants/diagnostician.js +0 -56
  346. package/dist/constants/tools.d.ts +0 -17
  347. package/dist/constants/tools.js +0 -54
  348. package/dist/core/adaptive-thresholds.d.ts +0 -186
  349. package/dist/core/adaptive-thresholds.js +0 -300
  350. package/dist/core/config-service.d.ts +0 -15
  351. package/dist/core/config.d.ts +0 -129
  352. package/dist/core/control-ui-db.d.ts +0 -95
  353. package/dist/core/control-ui-db.js +0 -292
  354. package/dist/core/detection-funnel.d.ts +0 -33
  355. package/dist/core/detection-service.d.ts +0 -15
  356. package/dist/core/dictionary-service.d.ts +0 -15
  357. package/dist/core/dictionary.d.ts +0 -38
  358. package/dist/core/event-log.d.ts +0 -82
  359. package/dist/core/event-log.js +0 -463
  360. package/dist/core/evolution-engine.d.ts +0 -118
  361. package/dist/core/evolution-engine.js +0 -464
  362. package/dist/core/evolution-logger.d.ts +0 -137
  363. package/dist/core/evolution-logger.js +0 -256
  364. package/dist/core/evolution-migration.d.ts +0 -5
  365. package/dist/core/evolution-migration.js +0 -65
  366. package/dist/core/evolution-reducer.d.ts +0 -98
  367. package/dist/core/evolution-reducer.js +0 -465
  368. package/dist/core/evolution-types.d.ts +0 -287
  369. package/dist/core/evolution-types.js +0 -78
  370. package/dist/core/external-training-contract.d.ts +0 -276
  371. package/dist/core/external-training-contract.js +0 -269
  372. package/dist/core/focus-history.d.ts +0 -210
  373. package/dist/core/focus-history.js +0 -1185
  374. package/dist/core/hygiene/tracker.d.ts +0 -22
  375. package/dist/core/hygiene/tracker.js +0 -106
  376. package/dist/core/init.d.ts +0 -12
  377. package/dist/core/local-worker-routing.d.ts +0 -175
  378. package/dist/core/local-worker-routing.js +0 -525
  379. package/dist/core/migration.d.ts +0 -6
  380. package/dist/core/model-deployment-registry.d.ts +0 -218
  381. package/dist/core/model-deployment-registry.js +0 -503
  382. package/dist/core/model-training-registry.d.ts +0 -295
  383. package/dist/core/model-training-registry.js +0 -475
  384. package/dist/core/nocturnal-arbiter.d.ts +0 -159
  385. package/dist/core/nocturnal-arbiter.js +0 -534
  386. package/dist/core/nocturnal-candidate-scoring.d.ts +0 -137
  387. package/dist/core/nocturnal-candidate-scoring.js +0 -266
  388. package/dist/core/nocturnal-compliance.d.ts +0 -175
  389. package/dist/core/nocturnal-compliance.js +0 -824
  390. package/dist/core/nocturnal-dataset.d.ts +0 -224
  391. package/dist/core/nocturnal-dataset.js +0 -443
  392. package/dist/core/nocturnal-executability.d.ts +0 -85
  393. package/dist/core/nocturnal-executability.js +0 -331
  394. package/dist/core/nocturnal-export.d.ts +0 -124
  395. package/dist/core/nocturnal-export.js +0 -275
  396. package/dist/core/nocturnal-paths.d.ts +0 -124
  397. package/dist/core/nocturnal-trajectory-extractor.d.ts +0 -242
  398. package/dist/core/nocturnal-trajectory-extractor.js +0 -307
  399. package/dist/core/nocturnal-trinity.d.ts +0 -311
  400. package/dist/core/nocturnal-trinity.js +0 -880
  401. package/dist/core/pain.d.ts +0 -4
  402. package/dist/core/pain.js +0 -70
  403. package/dist/core/path-resolver.d.ts +0 -46
  404. package/dist/core/paths.d.ts +0 -65
  405. package/dist/core/principle-training-state.d.ts +0 -121
  406. package/dist/core/principle-training-state.js +0 -321
  407. package/dist/core/profile.d.ts +0 -62
  408. package/dist/core/profile.js +0 -210
  409. package/dist/core/promotion-gate.d.ts +0 -238
  410. package/dist/core/promotion-gate.js +0 -529
  411. package/dist/core/risk-calculator.d.ts +0 -22
  412. package/dist/core/session-tracker.d.ts +0 -101
  413. package/dist/core/shadow-observation-registry.d.ts +0 -217
  414. package/dist/core/shadow-observation-registry.js +0 -308
  415. package/dist/core/system-logger.d.ts +0 -8
  416. package/dist/core/thinking-models.d.ts +0 -38
  417. package/dist/core/thinking-models.js +0 -170
  418. package/dist/core/training-program.d.ts +0 -233
  419. package/dist/core/training-program.js +0 -433
  420. package/dist/core/trajectory.d.ts +0 -411
  421. package/dist/core/trajectory.js +0 -1307
  422. package/dist/core/workspace-context.d.ts +0 -71
  423. package/dist/hooks/bash-risk.d.ts +0 -57
  424. package/dist/hooks/bash-risk.js +0 -137
  425. package/dist/hooks/edit-verification.d.ts +0 -62
  426. package/dist/hooks/edit-verification.js +0 -256
  427. package/dist/hooks/gate-block-helper.d.ts +0 -44
  428. package/dist/hooks/gate-block-helper.js +0 -119
  429. package/dist/hooks/gate.d.ts +0 -24
  430. package/dist/hooks/gate.js +0 -173
  431. package/dist/hooks/gfi-gate.d.ts +0 -40
  432. package/dist/hooks/gfi-gate.js +0 -113
  433. package/dist/hooks/lifecycle.d.ts +0 -5
  434. package/dist/hooks/lifecycle.js +0 -284
  435. package/dist/hooks/llm.d.ts +0 -13
  436. package/dist/hooks/message-sanitize.d.ts +0 -3
  437. package/dist/hooks/message-sanitize.js +0 -37
  438. package/dist/hooks/pain.d.ts +0 -5
  439. package/dist/hooks/pain.js +0 -301
  440. package/dist/hooks/progressive-trust-gate.d.ts +0 -52
  441. package/dist/hooks/progressive-trust-gate.js +0 -134
  442. package/dist/hooks/prompt.d.ts +0 -49
  443. package/dist/hooks/prompt.js +0 -905
  444. package/dist/hooks/subagent.d.ts +0 -10
  445. package/dist/hooks/subagent.js +0 -387
  446. package/dist/hooks/thinking-checkpoint.d.ts +0 -37
  447. package/dist/hooks/thinking-checkpoint.js +0 -51
  448. package/dist/hooks/trajectory-collector.d.ts +0 -32
  449. package/dist/hooks/trajectory-collector.js +0 -256
  450. package/dist/http/principles-console-route.d.ts +0 -9
  451. package/dist/http/principles-console-route.js +0 -681
  452. package/dist/i18n/commands.d.ts +0 -26
  453. package/dist/i18n/commands.js +0 -116
  454. package/dist/index.d.ts +0 -7
  455. package/dist/index.js +0 -581
  456. package/dist/service/central-database.d.ts +0 -104
  457. package/dist/service/central-database.js +0 -649
  458. package/dist/service/control-ui-query-service.d.ts +0 -221
  459. package/dist/service/control-ui-query-service.js +0 -543
  460. package/dist/service/empathy-observer-manager.d.ts +0 -88
  461. package/dist/service/empathy-observer-manager.js +0 -414
  462. package/dist/service/evolution-query-service.d.ts +0 -155
  463. package/dist/service/evolution-query-service.js +0 -258
  464. package/dist/service/evolution-worker.d.ts +0 -101
  465. package/dist/service/evolution-worker.js +0 -975
  466. package/dist/service/health-query-service.d.ts +0 -170
  467. package/dist/service/health-query-service.js +0 -662
  468. package/dist/service/nocturnal-runtime.d.ts +0 -183
  469. package/dist/service/nocturnal-service.d.ts +0 -163
  470. package/dist/service/nocturnal-service.js +0 -787
  471. package/dist/service/nocturnal-target-selector.d.ts +0 -145
  472. package/dist/service/nocturnal-target-selector.js +0 -315
  473. package/dist/service/phase3-input-filter.d.ts +0 -73
  474. package/dist/service/phase3-input-filter.js +0 -172
  475. package/dist/service/runtime-summary-service.d.ts +0 -122
  476. package/dist/service/runtime-summary-service.js +0 -485
  477. package/dist/service/subagent-workflow/empathy-observer-workflow-manager.d.ts +0 -48
  478. package/dist/service/subagent-workflow/index.d.ts +0 -4
  479. package/dist/service/subagent-workflow/index.js +0 -3
  480. package/dist/service/subagent-workflow/runtime-direct-driver.d.ts +0 -77
  481. package/dist/service/subagent-workflow/runtime-direct-driver.js +0 -75
  482. package/dist/service/subagent-workflow/types.js +0 -11
  483. package/dist/service/subagent-workflow/workflow-store.d.ts +0 -26
  484. package/dist/service/subagent-workflow/workflow-store.js +0 -165
  485. package/dist/service/trajectory-service.d.ts +0 -2
  486. package/dist/service/trajectory-service.js +0 -15
  487. package/dist/tools/critique-prompt.d.ts +0 -14
  488. package/dist/tools/deep-reflect.d.ts +0 -39
  489. package/dist/tools/deep-reflect.js +0 -350
  490. package/dist/tools/model-index.d.ts +0 -9
  491. package/dist/types/event-types.d.ts +0 -306
  492. package/dist/types/event-types.js +0 -106
  493. package/dist/types/hygiene-types.d.ts +0 -20
  494. package/dist/types/hygiene-types.js +0 -12
  495. package/dist/types/runtime-summary.d.ts +0 -47
  496. package/dist/types/runtime-summary.js +0 -1
  497. package/dist/types.d.ts +0 -50
  498. package/dist/types.js +0 -22
  499. package/dist/utils/file-lock.d.ts +0 -71
  500. package/dist/utils/file-lock.js +0 -309
  501. package/dist/utils/glob-match.d.ts +0 -28
  502. package/dist/utils/hashing.d.ts +0 -9
  503. package/dist/utils/io.d.ts +0 -6
  504. package/dist/utils/io.js +0 -106
  505. package/dist/utils/nlp.d.ts +0 -9
  506. package/dist/utils/plugin-logger.d.ts +0 -39
  507. package/dist/utils/subagent-probe.d.ts +0 -34
  508. 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;