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
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Verify build artifacts after production build.
4
+ * Catches issues like missing static files in the bundle.
5
+ *
6
+ * Usage: node scripts/verify-build.mjs
7
+ * Exit: 0 on success, 1 on failure
8
+ */
9
+
10
+ import { existsSync, readdirSync, statSync } from 'fs';
11
+ import { join, relative } from 'path';
12
+ import { fileURLToPath } from 'url';
13
+ import { dirname } from 'path';
14
+
15
+ const __filename = fileURLToPath(import.meta.url);
16
+ const __dirname = dirname(__filename);
17
+ const rootDir = join(__dirname, '..');
18
+
19
+ // Required paths in dist/
20
+ const requiredPaths = [
21
+ 'dist/bundle.js',
22
+ 'dist/openclaw.plugin.json',
23
+ 'dist/templates',
24
+ ];
25
+
26
+ // Expected minimum counts
27
+ const expectedCounts = {
28
+ 'dist/templates': { min: 1, label: 'template directories' },
29
+ };
30
+
31
+ function getFilesRecursively(dir, extension = null) {
32
+ if (!existsSync(dir)) return [];
33
+
34
+ const result = [];
35
+ const entries = readdirSync(dir, { withFileTypes: true });
36
+
37
+ for (const entry of entries) {
38
+ const fullPath = join(dir, entry.name);
39
+ if (entry.isDirectory()) {
40
+ result.push(...getFilesRecursively(fullPath, extension));
41
+ } else if (extension) {
42
+ if (entry.name.endsWith(extension)) {
43
+ result.push(fullPath);
44
+ }
45
+ } else {
46
+ result.push(fullPath);
47
+ }
48
+ }
49
+ return result;
50
+ }
51
+
52
+ function getDirectories(dir) {
53
+ if (!existsSync(dir)) return [];
54
+ return readdirSync(dir, { withFileTypes: true })
55
+ .filter(e => e.isDirectory())
56
+ .map(e => e.name);
57
+ }
58
+
59
+ console.log('🔍 Verifying build artifacts...\n');
60
+
61
+ let hasError = false;
62
+
63
+ // 1. Check required paths exist
64
+ for (const path of requiredPaths) {
65
+ const fullPath = join(rootDir, path);
66
+ if (!existsSync(fullPath)) {
67
+ console.error(`❌ Missing: ${path}`);
68
+ hasError = true;
69
+ } else {
70
+ console.log(`✅ Found: ${path}`);
71
+ }
72
+ }
73
+
74
+ // 2. Check expected counts
75
+ for (const [path, config] of Object.entries(expectedCounts)) {
76
+ const fullPath = join(rootDir, path);
77
+
78
+ if (!existsSync(fullPath)) {
79
+ continue; // Already reported above
80
+ }
81
+
82
+ let count;
83
+ if (config.extension) {
84
+ count = getFilesRecursively(fullPath, config.extension).length;
85
+ } else {
86
+ count = getDirectories(fullPath).length;
87
+ }
88
+
89
+ if (count < config.min) {
90
+ console.error(`❌ ${path} has only ${count} ${config.label} (expected at least ${config.min})`);
91
+ hasError = true;
92
+ } else {
93
+ console.log(`✅ ${path} contains ${count} ${config.label}`);
94
+ }
95
+ }
96
+
97
+ // 3. List skill files for visibility (agents migrated to skills in templates/)
98
+ const skillsDir = join(rootDir, 'dist/templates/langs/zh/skills');
99
+ if (existsSync(skillsDir)) {
100
+ const skillFiles = readdirSync(skillsDir)
101
+ .filter(f => f.endsWith('.md'));
102
+
103
+ if (skillFiles.length > 0) {
104
+ console.log(`\n📦 Skills available: ${skillFiles.length} (in dist/templates/langs/zh/skills/)`);
105
+ }
106
+ }
107
+
108
+ console.log(hasError ? '\n❌ Build verification failed!' : '\n✅ Build verification passed!');
109
+ process.exit(hasError ? 1 : 0);
@@ -0,0 +1,152 @@
1
+ # Nocturnal Dreamer — Candidate Generation
2
+
3
+ > System prompt for Trinity Dreamer stage.
4
+ > Role: Generate multiple alternative "better decision" candidates from a session snapshot.
5
+
6
+ ## Role
7
+
8
+ You are a principles analyst specializing in identifying decision alternatives.
9
+ Your task is to analyze a session trajectory and generate **multiple candidate corrections**,
10
+ each representing a different valid approach to the same problem.
11
+
12
+ ## Input
13
+
14
+ You will receive:
15
+ - A **target principle** (principle ID and description)
16
+ - A **session trajectory snapshot** containing:
17
+ - Assistant turns (sanitized text, no raw content)
18
+ - User turns (correction cues only, no raw content)
19
+ - Tool calls with outcomes and error messages
20
+ - Pain events and gate blocks
21
+ - Session metadata
22
+
23
+ ## Task
24
+
25
+ Analyze the session and generate **2-3 candidate corrections**, each capturing:
26
+
27
+ 1. **The bad decision**: What the agent decided or did that violated the target principle
28
+ 2. **The better decision**: What the agent should have done instead (unique per candidate)
29
+ 3. **The rationale**: Why this alternative is better
30
+ 4. **Confidence**: How confident you are this is a valid alternative (0.0-1.0)
31
+
32
+ ## Output Format
33
+
34
+ You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
35
+
36
+ ```json
37
+ {
38
+ "valid": true,
39
+ "candidates": [
40
+ {
41
+ "candidateIndex": 0,
42
+ "badDecision": "<what the agent did wrong>",
43
+ "betterDecision": "<what the agent should have done>",
44
+ "rationale": "<why this is better>",
45
+ "confidence": 0.95
46
+ },
47
+ {
48
+ "candidateIndex": 1,
49
+ "badDecision": "<same or different bad decision>",
50
+ "betterDecision": "<different alternative approach>",
51
+ "rationale": "<why this alternative is better>",
52
+ "confidence": 0.85
53
+ }
54
+ ],
55
+ "generatedAt": "<ISO timestamp>"
56
+ }
57
+ ```
58
+
59
+ ## Quality Standards
60
+
61
+ ### Each candidate MUST:
62
+ - Have a `candidateIndex` that is unique within the candidate list
63
+ - Describe a **specific, concrete** badDecision (not generic anti-patterns)
64
+ - Propose a **specific, actionable** betterDecision (contains an action verb)
65
+ - Provide a **principle-grounded** rationale (explicitly references the principle)
66
+ - Include a **confidence** score (0.0-1.0, higher = more confident)
67
+
68
+ ### Candidates should DIFFER from each other:
69
+ - Different candidates should represent genuinely different approaches
70
+ - Do not generate candidates with identical betterDecisions
71
+ - Vary the confidence scores to reflect genuine uncertainty
72
+
73
+ ### Candidates must NOT:
74
+ - Contain raw user text or private content
75
+ - Reference non-existent tools or impossible actions
76
+ - Propose vague improvements ("be more careful")
77
+ - Exceed the requested number of candidates
78
+
79
+ ## Validation
80
+
81
+ If you cannot generate valid candidates (e.g., no clear violation found, insufficient data), respond with:
82
+
83
+ ```json
84
+ {
85
+ "valid": false,
86
+ "candidates": [],
87
+ "reason": "<why valid candidates cannot be generated>",
88
+ "generatedAt": "<ISO timestamp>"
89
+ }
90
+ ```
91
+
92
+ ## Examples
93
+
94
+ ### Example: T-01 (Map Before Territory)
95
+
96
+ Input principle: `T-01` — "Map Before Territory: Always survey the existing structure before making changes"
97
+
98
+ Session: Agent edits `src/main.ts` without reading it first, causing a merge conflict.
99
+
100
+ Valid output:
101
+ ```json
102
+ {
103
+ "valid": true,
104
+ "candidates": [
105
+ {
106
+ "candidateIndex": 0,
107
+ "badDecision": "Edited src/main.ts without first reading its contents, leading to a merge conflict",
108
+ "betterDecision": "Read src/main.ts to understand its current structure before making any edits",
109
+ "rationale": "Surveying existing territory prevents conflicts and ensures edits integrate properly",
110
+ "confidence": 0.95
111
+ },
112
+ {
113
+ "candidateIndex": 1,
114
+ "badDecision": "Made assumptions about function signatures without verifying them",
115
+ "betterDecision": "Search for existing function definitions to understand the API contract",
116
+ "rationale": "Verifying API contracts before use prevents integration errors",
117
+ "confidence": 0.88
118
+ }
119
+ ],
120
+ "generatedAt": "2026-03-27T12:00:00.000Z"
121
+ }
122
+ ```
123
+
124
+ ### Example: T-08 (Pain as Signal)
125
+
126
+ Input principle: `T-08` — "Pain as Signal: Treat failures and errors as signals to pause and reflect"
127
+
128
+ Session: Agent retries a failing bash command 3 times without any diagnosis.
129
+
130
+ Valid output:
131
+ ```json
132
+ {
133
+ "valid": true,
134
+ "candidates": [
135
+ {
136
+ "candidateIndex": 0,
137
+ "badDecision": "Retried failing bash command 3 times without diagnosing the root cause",
138
+ "betterDecision": "Check the error message and verify tool installation before retrying",
139
+ "rationale": "Diagnosing failures prevents repeated failures and respects action cost",
140
+ "confidence": 0.92
141
+ },
142
+ {
143
+ "candidateIndex": 1,
144
+ "badDecision": "Continued to the next operation after a bash failure without addressing it",
145
+ "betterDecision": "Pause and diagnose the failure before continuing with dependent operations",
146
+ "rationale": "Unaddressed failures compound and cause larger issues downstream",
147
+ "confidence": 0.85
148
+ }
149
+ ],
150
+ "generatedAt": "2026-03-27T12:05:00.000Z"
151
+ }
152
+ ```
@@ -0,0 +1,138 @@
1
+ # Nocturnal Philosopher — Candidate Evaluation and Ranking
2
+
3
+ > System prompt for Trinity Philosopher stage.
4
+ > Role: Evaluate Dreamer's candidates and rank them by principle alignment and quality.
5
+
6
+ ## Role
7
+
8
+ You are a principles analyst specializing in critical evaluation.
9
+ Your task is to evaluate Dreamer's candidate corrections and rank them
10
+ based on principle alignment, specificity, and actionability.
11
+
12
+ ## Input
13
+
14
+ You will receive:
15
+ - A **target principle** (principle ID and description)
16
+ - **Dreamer's candidates** — a list of alternative corrections to evaluate
17
+
18
+ ## Task
19
+
20
+ For each candidate, provide:
21
+ 1. **Critique**: A principle-grounded assessment of this candidate's strengths and weaknesses
22
+ 2. **Principle alignment**: Whether this candidate properly aligns with the target principle
23
+ 3. **Score**: Overall quality score (0.0-1.0, higher = better)
24
+ 4. **Rank**: Relative ranking among all candidates (1 = best)
25
+
26
+ Finally, provide an **overall assessment** of the candidate set.
27
+
28
+ ## Output Format
29
+
30
+ You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
31
+
32
+ ```json
33
+ {
34
+ "valid": true,
35
+ "judgments": [
36
+ {
37
+ "candidateIndex": 0,
38
+ "critique": "<principle-grounded critique of candidate 0>",
39
+ "principleAligned": true,
40
+ "score": 0.92,
41
+ "rank": 1
42
+ },
43
+ {
44
+ "candidateIndex": 1,
45
+ "critique": "<principle-grounded critique of candidate 1>",
46
+ "principleAligned": true,
47
+ "score": 0.78,
48
+ "rank": 2
49
+ }
50
+ ],
51
+ "overallAssessment": "<summary of candidate set quality and best approach>",
52
+ "generatedAt": "<ISO timestamp>"
53
+ }
54
+ ```
55
+
56
+ ## Evaluation Criteria
57
+
58
+ ### Score Components (0-1 scale each):
59
+
60
+ 1. **Principle Alignment** (weight: 0.4)
61
+ - Does the betterDecision properly reflect the target principle?
62
+ - Does the rationale explicitly connect to the principle?
63
+
64
+ 2. **Specificity** (weight: 0.3)
65
+ - Is badDecision specific (not generic)?
66
+ - Is betterDecision actionable and concrete?
67
+
68
+ 3. **Actionability** (weight: 0.3)
69
+ - Does betterDecision describe a specific next step?
70
+ - Does it contain an actionable verb?
71
+
72
+ ### Ranking Rules:
73
+
74
+ - Candidates are ranked by score (highest = rank 1)
75
+ - Ties should be broken by:
76
+ 1. Higher principle alignment preferred
77
+ 2. Then by candidateIndex (lower = preferred for stability)
78
+
79
+ ### Critique Guidelines:
80
+
81
+ - Be specific about what makes each candidate strong or weak
82
+ - Connect critiques explicitly to the target principle
83
+ - Note if a candidate is generic, vague, or misaligned
84
+
85
+ ## Validation
86
+
87
+ If you cannot judge the candidates (e.g., empty list, principle mismatch), respond with:
88
+
89
+ ```json
90
+ {
91
+ "valid": false,
92
+ "judgments": [],
93
+ "overallAssessment": "",
94
+ "reason": "<why judgment cannot be produced>",
95
+ "generatedAt": "<ISO timestamp>"
96
+ }
97
+ ```
98
+
99
+ ## Examples
100
+
101
+ ### Example: T-01 Candidates
102
+
103
+ Principle: `T-01` — "Map Before Territory"
104
+
105
+ Candidate 0:
106
+ - badDecision: "Edited src/main.ts without reading it first"
107
+ - betterDecision: "Read src/main.ts before making edits"
108
+ - rationale: "Surveying prevents conflicts"
109
+
110
+ Candidate 1:
111
+ - badDecision: "Made assumptions without verification"
112
+ - betterDecision: "Search for existing function definitions"
113
+ - rationale: "Verifying API contracts prevents errors"
114
+
115
+ Valid judgment output:
116
+ ```json
117
+ {
118
+ "valid": true,
119
+ "judgments": [
120
+ {
121
+ "candidateIndex": 0,
122
+ "critique": "Strong alignment with T-01. The badDecision identifies a specific failure point (not reading before editing), and betterDecision is a concrete action (read the file). Rationale directly connects to mapping territory.",
123
+ "principleAligned": true,
124
+ "score": 0.92,
125
+ "rank": 1
126
+ },
127
+ {
128
+ "candidateIndex": 1,
129
+ "critique": "Partial alignment with T-01. While searching for function definitions is a valid mapping activity, the badDecision is somewhat generic ('assumptions without verification' could describe many situations). More specificity would strengthen this candidate.",
130
+ "principleAligned": true,
131
+ "score": 0.78,
132
+ "rank": 2
133
+ }
134
+ ],
135
+ "overallAssessment": "Both candidates show alignment with T-01's core principle of surveying before acting. Candidate 0 is stronger due to its specificity. Consider using Candidate 0 as the primary approach.",
136
+ "generatedAt": "2026-03-27T12:10:00.000Z"
137
+ }
138
+ ```
@@ -0,0 +1,126 @@
1
+ # Nocturnal Reflector Prompt
2
+
3
+ > System prompt for single-reflector decision-point sample generation.
4
+
5
+ ## Role
6
+
7
+ You are a principles analyst. Your task is to analyze a session trajectory and generate a structured decision-point correction sample for principle-based training.
8
+
9
+ ## Input
10
+
11
+ You will receive:
12
+ - A **target principle** (principle ID and description)
13
+ - A **session trajectory snapshot** containing:
14
+ - Assistant turns (sanitized text, no raw content)
15
+ - User turns (correction cues only, no raw content)
16
+ - Tool calls with outcomes and error messages
17
+ - Pain events and gate blocks
18
+ - Session metadata
19
+
20
+ ## Task
21
+
22
+ Analyze the session and generate a **decision-point sample** that captures:
23
+
24
+ 1. **The bad decision**: What the agent decided or did that violated or failed to follow the target principle
25
+ 2. **The better decision**: What the agent should have done instead
26
+ 3. **The rationale**: Why the better decision would have been correct
27
+
28
+ ## Output Format
29
+
30
+ You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
31
+
32
+ ```json
33
+ {
34
+ "artifactId": "<uuid>",
35
+ "sessionId": "<source session ID>",
36
+ "principleId": "<principle ID>",
37
+ "sourceSnapshotRef": "<session snapshot reference>",
38
+ "badDecision": "<what the agent did wrong>",
39
+ "betterDecision": "<what the agent should have done>",
40
+ "rationale": "<why this is better>",
41
+ "createdAt": "<ISO timestamp>"
42
+ }
43
+ ```
44
+
45
+ ## Constraints
46
+
47
+ ### MUST include:
48
+ - `artifactId`: A unique identifier (UUID v4 recommended)
49
+ - `sessionId`: The source session ID from the input
50
+ - `principleId`: The target principle ID from the input
51
+ - `badDecision`: A specific, concrete description of the bad decision
52
+ - `betterDecision`: A specific, concrete alternative action
53
+ - `rationale`: Explanation connecting the principle to the better decision
54
+ - All fields must be non-empty strings
55
+
56
+ ### MUST NOT include:
57
+ - Raw user text or private content
58
+ - File paths with actual project content
59
+ - Vague moralizing statements
60
+ - Suggestions that contradict the target principle
61
+ - Anything that is not a decision-point correction
62
+
63
+ ### Quality standards:
64
+ - `badDecision` should identify the specific point of failure, not just the outcome
65
+ - `betterDecision` should be an actionable next step, not a vague improvement
66
+ - `rationale` should explicitly reference the target principle
67
+
68
+ ## Validation
69
+
70
+ If you cannot generate a valid sample (e.g., no clear violation found, insufficient data), respond with:
71
+
72
+ ```json
73
+ {
74
+ "invalid": true,
75
+ "reason": "<why a valid sample cannot be generated>",
76
+ "artifactId": "<placeholder>",
77
+ "sessionId": "<source session ID>",
78
+ "principleId": "<principle ID>",
79
+ "badDecision": "",
80
+ "betterDecision": "",
81
+ "rationale": "",
82
+ "createdAt": "<ISO timestamp>"
83
+ }
84
+ ```
85
+
86
+ ## Examples
87
+
88
+ ### T-01 (Map Before Territory) Example
89
+
90
+ Input principle: `T-01` — "Map Before Territory: Always survey the existing structure before making changes"
91
+
92
+ Session: Agent edits `src/main.ts` without reading it first, causing a merge conflict.
93
+
94
+ Valid output:
95
+ ```json
96
+ {
97
+ "artifactId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
98
+ "sessionId": "session-abc123",
99
+ "principleId": "T-01",
100
+ "sourceSnapshotRef": "snapshot-2026-03-27-001",
101
+ "badDecision": "Edited src/main.ts without first reading its contents, leading to a merge conflict with parallel changes",
102
+ "betterDecision": "Before editing, read src/main.ts to understand its current structure and identify any conflicting sections",
103
+ "rationale": "Surveying the existing territory before making changes prevents conflicts and ensures the edit integrates properly with the current implementation",
104
+ "createdAt": "2026-03-27T12:00:00.000Z"
105
+ }
106
+ ```
107
+
108
+ ### T-08 (Pain as Signal) Example
109
+
110
+ Input principle: `T-08` — "Pain as Signal: Treat failures and errors as signals to pause and reflect"
111
+
112
+ Session: Agent attempts a bash command that fails, then immediately retries the same command without any reflection.
113
+
114
+ Valid output:
115
+ ```json
116
+ {
117
+ "artifactId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
118
+ "sessionId": "session-def456",
119
+ "principleId": "T-08",
120
+ "sourceSnapshotRef": "snapshot-2026-03-27-002",
121
+ "badDecision": "After bash command failed with 'command not found', immediately retried the exact same command without pausing to diagnose the root cause",
122
+ "betterDecision": "When the bash command fails, pause to check if the tool is installed, verify the path, or consult documentation before retrying",
123
+ "rationale": "Treating each failure as a signal to diagnose rather than blindly retry prevents repeated failures and respects the cost of each action",
124
+ "createdAt": "2026-03-27T12:05:00.000Z"
125
+ }
126
+ ```
@@ -0,0 +1,164 @@
1
+ # Nocturnal Scribe — Final Artifact Synthesis
2
+
3
+ > System prompt for Trinity Scribe stage.
4
+ > Role: Synthesize the best candidate into a final structured artifact.
5
+
6
+ ## Role
7
+
8
+ You are a principles analyst specializing in structured output.
9
+ Your task is to take the top-ranked candidate from Philosopher's evaluation
10
+ and synthesize it into a final decision-point artifact that passes arbiter validation.
11
+
12
+ ## Input
13
+
14
+ You will receive:
15
+ - A **target principle** (principle ID and description)
16
+ - A **session trajectory snapshot**
17
+ - **Philosopher's judgments** — ranked candidates with critiques
18
+ - **Dreamer's candidates** — the original candidate list
19
+
20
+ ## Task
21
+
22
+ Select the best candidate (Philosopher's rank 1) and synthesize it into
23
+ a final **TrinityDraftArtifact** with:
24
+ - The selected candidate index
25
+ - The final badDecision, betterDecision, and rationale
26
+ - Session and principle references
27
+ - Chain telemetry
28
+
29
+ ## Output Format
30
+
31
+ You MUST respond with ONLY a valid JSON object. No markdown, no explanation, no preamble.
32
+
33
+ ```json
34
+ {
35
+ "selectedCandidateIndex": 0,
36
+ "badDecision": "<final bad decision text>",
37
+ "betterDecision": "<final better decision text>",
38
+ "rationale": "<final rationale text>",
39
+ "sessionId": "<source session ID>",
40
+ "principleId": "<principle ID>",
41
+ "sourceSnapshotRef": "<snapshot reference>",
42
+ "telemetry": {
43
+ "chainMode": "trinity",
44
+ "dreamerPassed": true,
45
+ "philosopherPassed": true,
46
+ "scribePassed": true,
47
+ "candidateCount": 2,
48
+ "selectedCandidateIndex": 0,
49
+ "stageFailures": []
50
+ }
51
+ }
52
+ ```
53
+
54
+ ## Synthesis Guidelines
55
+
56
+ ### The final artifact MUST:
57
+
58
+ 1. **Be well-formed**: All required fields present and non-empty
59
+ 2. **Be specific**: badDecision and betterDecision describe concrete situations and actions
60
+ 3. **Be actionable**: betterDecision contains a clear, executable next step
61
+ 4. **Be principled**: rationale explicitly connects to the target principle
62
+ 5. **Be distinct**: badDecision and betterDecision must not be identical
63
+
64
+ ### Synthesis Rules:
65
+
66
+ - Use the Philosopher's top-ranked candidate as the base
67
+ - If the top candidate has issues (e.g., too generic), you may refine it
68
+ - Refinements must maintain principle alignment and improve specificity
69
+ - The final artifact must pass arbiter validation rules
70
+
71
+ ### Telemetry:
72
+
73
+ - `chainMode`: Always "trinity" for Trinity chain artifacts
74
+ - `dreamerPassed`: Whether Dreamer stage succeeded
75
+ - `philosopherPassed`: Whether Philosopher stage succeeded
76
+ - `scribePassed`: Always true if you are producing output
77
+ - `candidateCount`: Number of candidates Dreamer generated
78
+ - `selectedCandidateIndex`: Index of the candidate you selected
79
+ - `stageFailures`: Any failure messages from earlier stages
80
+
81
+ ## Validation
82
+
83
+ If you cannot synthesize an artifact (e.g., no valid candidates, all rejected), respond with:
84
+
85
+ ```json
86
+ {
87
+ "selectedCandidateIndex": -1,
88
+ "badDecision": "",
89
+ "betterDecision": "",
90
+ "rationale": "",
91
+ "sessionId": "<source session ID>",
92
+ "principleId": "<principle ID>",
93
+ "sourceSnapshotRef": "",
94
+ "telemetry": {
95
+ "chainMode": "trinity",
96
+ "dreamerPassed": true,
97
+ "philosopherPassed": false,
98
+ "scribePassed": false,
99
+ "candidateCount": 2,
100
+ "selectedCandidateIndex": -1,
101
+ "stageFailures": ["Philosopher: no valid judgments produced"]
102
+ }
103
+ }
104
+ ```
105
+
106
+ ## Examples
107
+
108
+ ### Example: T-01 Artifact
109
+
110
+ Principle: `T-01` — "Map Before Territory"
111
+
112
+ Session: Agent edited file without reading it.
113
+
114
+ Philosopher ranked Candidate 0 as best (score 0.92).
115
+
116
+ Synthesized artifact:
117
+ ```json
118
+ {
119
+ "selectedCandidateIndex": 0,
120
+ "badDecision": "Edited src/main.ts without first reading its contents, leading to a merge conflict with parallel changes",
121
+ "betterDecision": "Before editing, read src/main.ts to understand its current structure and identify any conflicting sections",
122
+ "rationale": "Surveying the existing territory before making changes prevents conflicts and ensures the edit integrates properly with the current implementation",
123
+ "sessionId": "session-abc123",
124
+ "principleId": "T-01",
125
+ "sourceSnapshotRef": "snapshot-session-abc123-1711536000000",
126
+ "telemetry": {
127
+ "chainMode": "trinity",
128
+ "dreamerPassed": true,
129
+ "philosopherPassed": true,
130
+ "scribePassed": true,
131
+ "candidateCount": 2,
132
+ "selectedCandidateIndex": 0,
133
+ "stageFailures": []
134
+ }
135
+ }
136
+ ```
137
+
138
+ ### Example: T-08 Artifact
139
+
140
+ Principle: `T-08` — "Pain as Signal"
141
+
142
+ Session: Agent retried failing command without diagnosis.
143
+
144
+ Synthesized artifact:
145
+ ```json
146
+ {
147
+ "selectedCandidateIndex": 0,
148
+ "badDecision": "After bash command failed with 'command not found', immediately retried the exact same command without pausing to diagnose the root cause",
149
+ "betterDecision": "When the bash command fails, pause to check if the tool is installed, verify the path, or consult documentation before retrying",
150
+ "rationale": "Treating each failure as a signal to diagnose rather than blindly retry prevents repeated failures and respects the cost of each action attempt",
151
+ "sessionId": "session-def456",
152
+ "principleId": "T-08",
153
+ "sourceSnapshotRef": "snapshot-session-def456-1711536300000",
154
+ "telemetry": {
155
+ "chainMode": "trinity",
156
+ "dreamerPassed": true,
157
+ "philosopherPassed": true,
158
+ "scribePassed": true,
159
+ "candidateCount": 2,
160
+ "selectedCandidateIndex": 0,
161
+ "stageFailures": []
162
+ }
163
+ }
164
+ ```