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,275 +0,0 @@
1
- /**
2
- * Nocturnal ORPO Export — Approved Dataset to Decision-Point JSONL
3
- * =================================================================
4
- *
5
- * PURPOSE: Export approved nocturnal samples as ORPO-formatted decision-point
6
- * training JSONL, strictly separated from legacy correction export.
7
- *
8
- * ARCHITECTURE:
9
- * - Export output: .state/exports/orpo/{exportId}.jsonl
10
- * - Export manifest: .state/exports/orpo/{exportId}-manifest.json
11
- * - Legacy corrections: untouched, separate path
12
- *
13
- * ORPO FORMAT (each line):
14
- * {
15
- * sampleFingerprint: string,
16
- * artifactId: string,
17
- * sessionId: string,
18
- * principleId: string,
19
- * targetModelFamily: string,
20
- * prompt: string, // badDecision (the wrong choice)
21
- * chosen: string, // betterDecision (the right choice)
22
- * rejected: string, // badDecision (for ORPO)
23
- * rationale: string,
24
- * datasetMetadata: {
25
- * sampleFingerprint: string,
26
- * artifactPath: string,
27
- * createdAt: string,
28
- * exportedAt: string,
29
- * exportId: string,
30
- * datasetFingerprint: string
31
- * }
32
- * }
33
- *
34
- * EXPORT GATING (fail-closed):
35
- * - reviewStatus === 'approved_for_training'
36
- * - targetModelFamily matches requested target (or any if not specified)
37
- * - Lineage fields complete (sampleFingerprint, artifactId, sessionId, principleId)
38
- * - Source artifact file exists and is approved
39
- *
40
- * DESIGN CONSTRAINTS:
41
- * - No trainer invocation
42
- * - No automatic training
43
- * - No checkpoint deploy
44
- * - Export is read-only from dataset perspective
45
- */
46
- import * as fs from 'fs';
47
- import * as path from 'path';
48
- import * as crypto from 'crypto';
49
- import { listDatasetRecords, readDatasetArtifact, } from './nocturnal-dataset.js';
50
- import { NocturnalPathResolver } from './nocturnal-paths.js';
51
- // ---------------------------------------------------------------------------
52
- // Dataset Fingerprint (for reproducibility)
53
- // ---------------------------------------------------------------------------
54
- /**
55
- * Compute a deterministic dataset fingerprint from a sorted list of sample fingerprints.
56
- * This allows reproducible exports — same dataset always produces same fingerprint.
57
- */
58
- function computeDatasetFingerprint(sampleFingerprints) {
59
- const sorted = [...sampleFingerprints].sort();
60
- const combined = sorted.join('|');
61
- return crypto.createHash('sha256').update(combined, 'utf8').digest('hex');
62
- }
63
- // ---------------------------------------------------------------------------
64
- // Individual Sample Serialization
65
- // ---------------------------------------------------------------------------
66
- /**
67
- * Serialize a single dataset record + artifact to ORPO JSONL line.
68
- * Caller guarantees record.targetModelFamily is non-null.
69
- */
70
- function serializeORPOSample(record, artifact, exportId, datasetFingerprint) {
71
- const now = new Date().toISOString();
72
- return {
73
- sampleFingerprint: record.sampleFingerprint,
74
- artifactId: record.artifactId,
75
- sessionId: record.sessionId,
76
- principleId: record.principleId,
77
- targetModelFamily: record.targetModelFamily, // validated non-null by caller
78
- // For ORPO: prompt = badDecision, chosen = betterDecision, rejected = badDecision
79
- // This teaches the model to prefer betterDecision over badDecision
80
- prompt: artifact.badDecision,
81
- chosen: artifact.betterDecision,
82
- rejected: artifact.badDecision,
83
- rationale: artifact.rationale,
84
- datasetMetadata: {
85
- sampleFingerprint: record.sampleFingerprint,
86
- artifactPath: record.artifactPath,
87
- createdAt: record.createdAt,
88
- exportedAt: now,
89
- exportId,
90
- datasetFingerprint,
91
- },
92
- };
93
- }
94
- // ---------------------------------------------------------------------------
95
- // Core Export Function
96
- // ---------------------------------------------------------------------------
97
- /**
98
- * Export approved nocturnal samples as ORPO decision-point JSONL.
99
- *
100
- * @param workspaceDir - Workspace directory
101
- * @param targetModelFamily - Specific model family to export, or undefined for all
102
- * @param options - Additional export options
103
- * @returns ExportResult
104
- */
105
- export function exportORPOSamples(workspaceDir, targetModelFamily, _options = {}) {
106
- const exportId = crypto.randomUUID();
107
- const now = new Date().toISOString();
108
- // Step 1: Collect eligible records
109
- // Use listDatasetRecords directly to have full control over the family filter
110
- // (listExportReadyRecords uses ?? which maps null→undefined, losing the null distinction)
111
- const allApprovedRecords = listDatasetRecords(workspaceDir, {
112
- reviewStatus: 'approved_for_training',
113
- });
114
- let eligibleRecords;
115
- if (targetModelFamily !== undefined && targetModelFamily !== null) {
116
- // Specific family: check if ANY records (regardless of status) have this family
117
- const allRecords = listDatasetRecords(workspaceDir);
118
- const hasAnyWithFamily = allRecords.some((r) => r.targetModelFamily === targetModelFamily);
119
- if (!hasAnyWithFamily) {
120
- // Family doesn't exist in any record
121
- return {
122
- success: false,
123
- error: 'No samples found for the requested target model family',
124
- emptyReason: 'family_mismatch',
125
- };
126
- }
127
- // Family exists but none are approved
128
- eligibleRecords = allApprovedRecords.filter((r) => r.targetModelFamily === targetModelFamily);
129
- }
130
- else {
131
- // All families
132
- eligibleRecords = allApprovedRecords;
133
- }
134
- // Step 2: Validate we have records
135
- if (eligibleRecords.length === 0) {
136
- return {
137
- success: false,
138
- error: 'No approved samples found for export',
139
- emptyReason: 'no_approved_samples',
140
- };
141
- }
142
- // Step 3: Verify lineage completeness and read artifacts
143
- const orpoSamples = [];
144
- const failedFingerprints = [];
145
- for (const record of eligibleRecords) {
146
- // Enforce targetModelFamily binding — samples without a family cannot enter training
147
- if (record.targetModelFamily === null) {
148
- failedFingerprints.push(record.sampleFingerprint);
149
- continue;
150
- }
151
- // Verify lineage completeness
152
- if (!record.sampleFingerprint || !record.artifactId || !record.sessionId || !record.principleId) {
153
- failedFingerprints.push(record.sampleFingerprint);
154
- continue;
155
- }
156
- // Read artifact (throws on error — distinguishes read failure from missing artifact)
157
- let artifact;
158
- try {
159
- artifact = readDatasetArtifact(workspaceDir, record.sampleFingerprint);
160
- }
161
- catch {
162
- failedFingerprints.push(record.sampleFingerprint);
163
- continue;
164
- }
165
- // Serialize
166
- orpoSamples.push(serializeORPOSample(record, artifact, exportId, ''));
167
- }
168
- // Step 4: Fail if all samples failed validation
169
- if (orpoSamples.length === 0) {
170
- return {
171
- success: false,
172
- error: `All ${eligibleRecords.length} eligible samples failed validation (missing artifacts or lineage)`,
173
- emptyReason: 'all_samples_missing_artifacts',
174
- };
175
- }
176
- // Step 5: Compute dataset fingerprint for manifest
177
- const datasetFingerprint = computeDatasetFingerprint(orpoSamples.map((s) => s.sampleFingerprint));
178
- // Step 6: Fill in dataset fingerprint in all samples
179
- for (const sample of orpoSamples) {
180
- sample.datasetMetadata.datasetFingerprint = datasetFingerprint;
181
- }
182
- // Step 7: Write JSONL file
183
- const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
184
- const jsonlPath = path.join(exportsDir, `${exportId}.jsonl`);
185
- const lines = orpoSamples.map((s) => JSON.stringify(s)).join('\n') + '\n';
186
- fs.writeFileSync(jsonlPath, lines, 'utf-8');
187
- // Step 8: Write manifest
188
- const manifest = {
189
- exportId,
190
- createdAt: now,
191
- sampleCount: orpoSamples.length,
192
- targetModelFamily: targetModelFamily ?? 'all',
193
- datasetFingerprint,
194
- exportPath: jsonlPath,
195
- manifestPath: path.join(exportsDir, `${exportId}-manifest.json`),
196
- samples: orpoSamples.map((s) => ({
197
- sampleFingerprint: s.sampleFingerprint,
198
- artifactId: s.artifactId,
199
- sessionId: s.sessionId,
200
- principleId: s.principleId,
201
- })),
202
- };
203
- fs.writeFileSync(manifest.manifestPath, JSON.stringify(manifest, null, 2), 'utf-8');
204
- return {
205
- success: true,
206
- manifest,
207
- };
208
- }
209
- /**
210
- * Verify an existing export by re-computing its dataset fingerprint.
211
- * Returns true if the export is intact and reproducible.
212
- */
213
- export function verifyExportIntegrity(workspaceDir, exportId) {
214
- const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
215
- const manifestPath = path.join(exportsDir, `${exportId}-manifest.json`);
216
- if (!fs.existsSync(manifestPath)) {
217
- return null;
218
- }
219
- try {
220
- const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
221
- const computedFingerprint = computeDatasetFingerprint(manifest.samples.map((s) => s.sampleFingerprint));
222
- return {
223
- valid: computedFingerprint === manifest.datasetFingerprint,
224
- computedFingerprint,
225
- manifestFingerprint: manifest.datasetFingerprint,
226
- };
227
- }
228
- catch {
229
- return null;
230
- }
231
- }
232
- /**
233
- * List all exports in the exports directory.
234
- */
235
- export function listExports(workspaceDir) {
236
- const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
237
- if (!fs.existsSync(exportsDir)) {
238
- return [];
239
- }
240
- try {
241
- const files = fs.readdirSync(exportsDir);
242
- const manifests = [];
243
- for (const file of files) {
244
- if (!file.endsWith('-manifest.json'))
245
- continue;
246
- try {
247
- const manifest = JSON.parse(fs.readFileSync(path.join(exportsDir, file), 'utf-8'));
248
- manifests.push(manifest);
249
- }
250
- catch {
251
- // Skip malformed manifest
252
- }
253
- }
254
- return manifests.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
255
- }
256
- catch {
257
- return [];
258
- }
259
- }
260
- /**
261
- * Read an export manifest by ID.
262
- */
263
- export function getExportManifest(workspaceDir, exportId) {
264
- const exportsDir = NocturnalPathResolver.exportsDir(workspaceDir);
265
- const manifestPath = path.join(exportsDir, `${exportId}-manifest.json`);
266
- if (!fs.existsSync(manifestPath)) {
267
- return null;
268
- }
269
- try {
270
- return JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
271
- }
272
- catch {
273
- return null;
274
- }
275
- }
@@ -1,124 +0,0 @@
1
- /**
2
- * Nocturnal Paths — Canonical Path Registry for Sleep-Mode Reflection Artifacts
3
- * =============================================================================
4
- *
5
- * PURPOSE: Establishes a single source of truth for all nocturnal artifact paths.
6
- * Prevents path fragmentation and ensures consistent resolution across modules.
7
- *
8
- * ARCHITECTURE:
9
- * Operator-facing (read by agent, injected into prompts):
10
- * memory/reflection-log.md ← human-readable lessons, NOT training data
11
- *
12
- * Nocturnal artifacts (structured, NOT injected into prompts):
13
- * .state/nocturnal/samples/ ← decision-point JSON artifacts (Phase 2+)
14
- * .state/nocturnal/memory/ ← short-term reflection memory (Phase 2+)
15
- * .state/exports/orpo/ ← approved training pairs, immutable (Phase 3+)
16
- *
17
- * DESIGN CONSTRAINTS:
18
- * - Nocturnal samples are NEVER written to memory/reflection-log.md
19
- * - Prompt injection reads ONLY from memory/reflection-log.md
20
- * - Each nocturnal artifact category has its own subdirectory
21
- * - All paths go through this registry — no ad-hoc path construction
22
- *
23
- * USAGE:
24
- * import { NocturnalPathResolver, NOCTURNAL_DIRS, NOCTURNAL_FILES } from './nocturnal-paths.js';
25
- * const sampleDir = NocturnalPathResolver.samplesDir(workspaceDir);
26
- */
27
- export declare const NOCTURNAL_DIRS: {
28
- /** Root directory for all nocturnal reflection artifacts */
29
- readonly ROOT: ".state/nocturnal";
30
- /**
31
- * Structured decision-point samples from nocturnal reflection.
32
- * Each file is a JSON artifact containing:
33
- * - session snapshot reference
34
- * - target principle
35
- * - decision-point contrastive pair
36
- * - arbiter approval status
37
- */
38
- readonly SAMPLES: ".state/nocturnal/samples";
39
- /**
40
- * Short-term operator-facing reflection memory.
41
- * Written by nocturnal service, NOT injected into prompts directly.
42
- * Consumed by operator on next session start.
43
- */
44
- readonly MEMORY: ".state/nocturnal/memory";
45
- /**
46
- * Nocturnal runtime bookkeeping (cooldowns, quotas).
47
- * NOTE: nocturnal-runtime.json is written to stateDir directly
48
- * (not under NOCTURNAL_DIRS.ROOT) for simpler migration.
49
- */
50
- /**
51
- * Approved training pairs ready for export.
52
- * Immutable once written — never modified in place.
53
- * Consumed by external trainer (not the plugin).
54
- */
55
- readonly EXPORTS: ".state/exports/orpo";
56
- };
57
- export declare const NOCTURNAL_FILES: {
58
- /**
59
- * Arbiter review queue for pending samples.
60
- * Not written by nocturnal service directly — created during arbiter review.
61
- * Format: JSON array of sample refs pending approval.
62
- */
63
- readonly REVIEW_QUEUE: ".state/nocturnal/review-queue.json";
64
- /**
65
- * Lineage metadata for all samples.
66
- * Written alongside each sample file for traceability.
67
- */
68
- readonly LINEAGE_INDEX: ".state/nocturnal/samples/lineage-index.json";
69
- };
70
- /**
71
- * Resolves a nocturnal directory path within a workspace.
72
- */
73
- export declare function resolveNocturnalDir(workspaceDir: string, dirKey: keyof typeof NOCTURNAL_DIRS): string;
74
- /**
75
- * Resolves a nocturnal file path within a workspace.
76
- */
77
- export declare function resolveNocturnalFile(workspaceDir: string, fileKey: keyof typeof NOCTURNAL_FILES): string;
78
- export declare const NocturnalPathResolver: {
79
- /**
80
- * Returns the samples directory path.
81
- * Creates the directory if it does not exist.
82
- */
83
- readonly samplesDir: (workspaceDir: string) => string;
84
- /**
85
- * Returns the memory directory path.
86
- * Creates the directory if it does not exist.
87
- */
88
- readonly memoryDir: (workspaceDir: string) => string;
89
- /**
90
- * Returns the exports directory path.
91
- * Creates the directory if it does not exist.
92
- */
93
- readonly exportsDir: (workspaceDir: string) => string;
94
- /**
95
- * Returns the path for a named sample file.
96
- * File is NOT created — caller decides when to write.
97
- */
98
- readonly samplePath: (workspaceDir: string, sampleId: string) => string;
99
- /**
100
- * Returns the path for nocturnal reflection memory.
101
- * This is the operator-facing summary written after each nocturnal run.
102
- */
103
- readonly reflectionMemoryPath: (workspaceDir: string) => string;
104
- /**
105
- * Lists all sample files in the samples directory.
106
- * Returns absolute paths sorted by modification time (newest first).
107
- */
108
- readonly listSamples: (workspaceDir: string) => string[];
109
- /**
110
- * Lists all approved sample files ready for export.
111
- * Filters to samples with status === 'approved'.
112
- */
113
- readonly listApprovedSamples: (workspaceDir: string) => string[];
114
- };
115
- /**
116
- * Complete path map for reference.
117
- * These mirror the keys in NOCTURNAL_DIRS and NOCTURNAL_FILES.
118
- */
119
- export declare const NOCTURNAL_PATH_DESCRIPTIONS: Record<string, string>;
120
- /**
121
- * IMPORTANT: memory/reflection-log.md is NOT a nocturnal artifact.
122
- * It is the pre-existing operator-facing reflection log, defined in paths.ts.
123
- * It is kept separate from nocturnal outputs by design.
124
- */
@@ -1,242 +0,0 @@
1
- /**
2
- * Nocturnal Trajectory Extractor — Structured Session Snapshot API
3
- * ==============================================================
4
- *
5
- * PURPOSE: Provide minimal necessary structured trajectory extraction
6
- * for the nocturnal reflection pipeline. NOT a general-purpose data mirror.
7
- *
8
- * DESIGN PRINCIPLES:
9
- * - Uses sanitized text ONLY — never raw_text or blob payloads
10
- * - Two distinct query paths:
11
- * 1. Analytics query (listRecentNocturnalCandidateSessions) — for target selection
12
- * 2. Runtime query (getNocturnalSessionSnapshot) — for sample generation
13
- * - All snapshots are self-contained and principle-relevant metadata-rich
14
- *
15
- * WHAT THIS MODULE DOES:
16
- * - List recent sessions with metadata relevant to nocturnal target selection
17
- * - Extract structured session snapshots for a selected violating session
18
- *
19
- * WHAT THIS MODULE DOES NOT DO:
20
- * - NO snapshot database cloning
21
- * - NO full trajectory export
22
- * - NO raw text exposure
23
- * - NO target selection logic
24
- * - NO sample generation
25
- *
26
- * ARTIFACT OUTPUTS go to:
27
- * .state/nocturnal/samples/ ← structured JSON artifacts
28
- *
29
- * FILE: {stateDir}/nocturnal/snapshots/ (cached snapshots if needed, optional)
30
- */
31
- import { TrajectoryDatabase } from './trajectory.js';
32
- /**
33
- * Minimal sanitized assistant turn for nocturnal snapshot.
34
- * Contains ONLY sanitizedText — raw_text is never exposed.
35
- */
36
- export interface NocturnalAssistantTurn {
37
- turnIndex: number;
38
- sanitizedText: string;
39
- model: string;
40
- createdAt: string;
41
- }
42
- /**
43
- * Minimal sanitized user turn for nocturnal snapshot.
44
- * Contains only derived cues — NO raw user text.
45
- */
46
- export interface NocturnalUserTurn {
47
- turnIndex: number;
48
- correctionDetected: boolean;
49
- correctionCue: string | null;
50
- createdAt: string;
51
- }
52
- /**
53
- * Tool call event for nocturnal snapshot.
54
- */
55
- export interface NocturnalToolCall {
56
- toolName: string;
57
- outcome: 'success' | 'failure' | 'blocked';
58
- filePath: string | null;
59
- durationMs: number | null;
60
- exitCode: number | null;
61
- errorType: string | null;
62
- errorMessage: string | null;
63
- createdAt: string;
64
- }
65
- /**
66
- * Pain signal for nocturnal snapshot.
67
- */
68
- export interface NocturnalPainEvent {
69
- source: string;
70
- score: number;
71
- severity: string | null;
72
- reason: string | null;
73
- createdAt: string;
74
- }
75
- /**
76
- * Gate block event for nocturnal snapshot.
77
- */
78
- export interface NocturnalGateBlock {
79
- toolName: string;
80
- filePath: string | null;
81
- reason: string;
82
- planStatus: string | null;
83
- createdAt: string;
84
- }
85
- /**
86
- * A structured nocturnal session snapshot.
87
- * Contains all information needed for a reflector to generate decision-point samples.
88
- *
89
- * GUARANTEES:
90
- * - NO raw_text exposed
91
- * - NO blob references resolved
92
- * - All text is sanitized or derived-cue only
93
- * - Self-contained (principle-relevant metadata included)
94
- */
95
- export interface NocturnalSessionSnapshot {
96
- sessionId: string;
97
- startedAt: string;
98
- updatedAt: string;
99
- assistantTurns: NocturnalAssistantTurn[];
100
- userTurns: NocturnalUserTurn[];
101
- toolCalls: NocturnalToolCall[];
102
- painEvents: NocturnalPainEvent[];
103
- gateBlocks: NocturnalGateBlock[];
104
- /**
105
- * Summary statistics for quick triage.
106
- */
107
- stats: {
108
- totalAssistantTurns: number;
109
- totalToolCalls: number;
110
- totalPainEvents: number;
111
- totalGateBlocks: number;
112
- failureCount: number;
113
- };
114
- }
115
- /**
116
- * Summary entry for session listing (used by nocturnal target selector).
117
- * Lightweight — only identification and basic metadata, no turns.
118
- */
119
- export interface NocturnalSessionSummary {
120
- sessionId: string;
121
- startedAt: string;
122
- updatedAt: string;
123
- /** Number of assistant turns (for relevance scoring) */
124
- assistantTurnCount: number;
125
- /** Number of tool calls (for violation signal density) */
126
- toolCallCount: number;
127
- /** Number of pain events (for pain signal density) */
128
- painEventCount: number;
129
- /** Number of gate blocks (for constraint violation evidence) */
130
- gateBlockCount: number;
131
- /** Number of failed tool calls (for violation signal) */
132
- failureCount: number;
133
- }
134
- /**
135
- * Options for listing recent nocturnal candidate sessions.
136
- */
137
- export interface ListNocturnalSessionsOptions {
138
- /** Maximum number of sessions to return (default: 20) */
139
- limit?: number;
140
- /** Only return sessions updated after this date */
141
- dateFrom?: string;
142
- /** Only return sessions updated before this date */
143
- dateTo?: string;
144
- /** Minimum tool call count threshold (default: 1) */
145
- minToolCalls?: number;
146
- }
147
- /**
148
- * Nocturnal Trajectory Extractor.
149
- *
150
- * Provides sanitized, structured access to session data for the nocturnal
151
- * reflection pipeline. All queries return sanitized text only.
152
- *
153
- * This class is a thin, focused wrapper around TrajectoryDatabase.
154
- * It does NOT cache snapshots or maintain its own state.
155
- */
156
- export declare class NocturnalTrajectoryExtractor {
157
- private readonly trajectory;
158
- constructor(trajectory: TrajectoryDatabase);
159
- /**
160
- * List recent sessions suitable for nocturnal target selection.
161
- *
162
- * ANALYTICS QUERY — used by nocturnal target selector to find candidate sessions.
163
- *
164
- * @param options - Query options
165
- * @returns Lightweight session summaries ordered by most recently updated
166
- */
167
- listRecentNocturnalCandidateSessions(options?: ListNocturnalSessionsOptions): NocturnalSessionSummary[];
168
- /**
169
- * Get a full structured snapshot for a specific session.
170
- *
171
- * RUNTIME QUERY — used by nocturnal service after target selection.
172
- *
173
- * SECURITY GUARANTEES:
174
- * - Only sanitizedText from assistant turns (never raw_text)
175
- * - Only correction cues from user turns (never raw user text)
176
- * - Tool calls with outcome and error info (no raw parameters)
177
- * - Pain events with score and reason (no raw event data)
178
- * - Gate blocks with tool/reason info (no file content)
179
- *
180
- * @param sessionId - Session ID to snapshot
181
- * @returns Full structured snapshot, or null if session not found
182
- */
183
- getNocturnalSessionSnapshot(sessionId: string): NocturnalSessionSnapshot | null;
184
- }
185
- /**
186
- * Creates a NocturnalTrajectoryExtractor from a workspace directory.
187
- *
188
- * USAGE:
189
- * const extractor = createNocturnalTrajectoryExtractor(workspaceDir);
190
- * const sessions = extractor.listRecentNocturnalCandidateSessions({ limit: 10 });
191
- * const snapshot = extractor.getNocturnalSessionSnapshot(sessionId);
192
- */
193
- export declare function createNocturnalTrajectoryExtractor(workspaceDir: string, _stateDir?: string): NocturnalTrajectoryExtractor;
194
- /**
195
- * List recent sessions for nocturnal target selection.
196
- * Convenience wrapper around NocturnalTrajectoryExtractor.
197
- */
198
- export declare function listNocturnalCandidateSessions(trajectory: TrajectoryDatabase, options?: ListNocturnalSessionsOptions): NocturnalSessionSummary[];
199
- /**
200
- * Get a session snapshot for nocturnal reflection.
201
- * Convenience wrapper around NocturnalTrajectoryExtractor.
202
- */
203
- export declare function getNocturnalSessionSnapshot(trajectory: TrajectoryDatabase, sessionId: string): NocturnalSessionSnapshot | null;
204
- /**
205
- * Compute thinking model activation for a text.
206
- * Returns 0-1 ratio of matched thinking models to total available models.
207
- *
208
- * @param text - Text to analyze
209
- * @returns Activation ratio (0-1)
210
- */
211
- export declare function computeThinkingModelActivation(text: string): number;
212
- /**
213
- * Compute planning ratio from a session snapshot.
214
- * Planning ratio = write operations preceded immediately by a read tool / total write operations.
215
- * A higher ratio indicates more careful planning behavior (reading before writing).
216
- *
217
- * Only the immediately preceding tool is checked — each write needs its own
218
- * preceding read to count as planned. This prevents a single read from satisfying
219
- * multiple writes in sequence.
220
- *
221
- * @param snapshot - Session snapshot to analyze
222
- * @returns Planning ratio (0-1), or 0 if no write operations
223
- */
224
- export declare function computePlanningRatio(snapshot: NocturnalSessionSnapshot): number;
225
- /**
226
- * Compute thinking model delta between original and improved decisions.
227
- * Positive delta means the improved decision uses more thinking models.
228
- *
229
- * @param originalText - Original (bad) decision text
230
- * @param improvedText - Improved (better) decision text
231
- * @returns Delta in thinking model activation (-1 to 1)
232
- */
233
- export declare function computeThinkingModelDelta(originalText: string, improvedText: string): number;
234
- /**
235
- * Compute planning ratio gain between original and improved snapshots.
236
- * Positive gain means the improved behavior has better planning (more reads before writes).
237
- *
238
- * @param originalSnapshot - Original session snapshot
239
- * @param improvedSnapshot - Improved session snapshot
240
- * @returns Planning ratio gain (-1 to 1)
241
- */
242
- export declare function computePlanningRatioGain(originalSnapshot: NocturnalSessionSnapshot, improvedSnapshot: NocturnalSessionSnapshot): number;