create-principles-disciple 1.93.0 → 1.95.0

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 (526) hide show
  1. package/console/dist/server/config/WorkspaceConfigStore.js +2 -1
  2. package/console/dist/server/config/pd-config-store.d.ts +40 -1
  3. package/console/dist/server/config/pd-config-store.js +170 -1
  4. package/console/dist/server/index.js +28 -10
  5. package/console/dist/server/models/ApprovalsConsoleModel.js +4 -12
  6. package/console/dist/server/models/EvidenceChainConsoleModel.d.ts +0 -2
  7. package/console/dist/server/models/EvidenceChainConsoleModel.js +36 -2
  8. package/console/dist/server/models/HealthCheckModel.js +5 -3
  9. package/console/dist/server/models/IntentDecisionModel.d.ts +66 -0
  10. package/console/dist/server/models/IntentDecisionModel.js +207 -0
  11. package/console/dist/server/models/IntentPageModel.d.ts +18 -0
  12. package/console/dist/server/models/IntentPageModel.js +90 -0
  13. package/console/dist/server/models/PrinciplesConsoleModel.d.ts +2 -0
  14. package/console/dist/server/models/PrinciplesConsoleModel.js +37 -1
  15. package/console/dist/server/models/WorkspaceService.d.ts +0 -28
  16. package/console/dist/server/models/WorkspaceService.js +0 -115
  17. package/console/dist/server/routes/config.js +55 -1
  18. package/console/dist/server/routes/feedback-reports.js +1 -1
  19. package/console/dist/server/routes/intent-decisions.d.ts +33 -0
  20. package/console/dist/server/routes/intent-decisions.js +499 -0
  21. package/console/dist/server/routes/intent.d.ts +3 -0
  22. package/console/dist/server/routes/intent.js +35 -0
  23. package/console/dist/server/routes/principles.js +67 -1
  24. package/console/dist/server/routes/update.d.ts +0 -1
  25. package/console/dist/server/routes/update.js +14 -11
  26. package/console/dist/ui/App.js +2 -7
  27. package/console/dist/ui/api.d.ts +44 -18
  28. package/console/dist/ui/api.js +44 -5
  29. package/console/dist/ui/components/layout/app-sidebar.js +2 -1
  30. package/console/dist/ui/components/ui/badge.d.ts +1 -1
  31. package/console/dist/ui/components/ui/button.d.ts +1 -1
  32. package/console/dist/ui/components/ui/shiny-text.d.ts +28 -0
  33. package/console/dist/ui/components/ui/shiny-text.js +46 -0
  34. package/console/dist/ui/i18n/en.json +167 -3
  35. package/console/dist/ui/i18n/zh-CN.json +167 -3
  36. package/console/dist/ui/pages/activation/ActivationPage.js +2 -1
  37. package/console/dist/ui/pages/control-center/ControlCenterPage.js +28 -2
  38. package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.d.ts +28 -0
  39. package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.js +38 -0
  40. package/console/dist/ui/pages/debt/DebtPage.js +219 -2
  41. package/console/dist/ui/pages/focus/FocusPage.js +2 -1
  42. package/console/dist/ui/pages/intent/IntentPage.d.ts +1 -0
  43. package/console/dist/ui/pages/intent/IntentPage.js +147 -0
  44. package/console/dist/ui/pages/pain/PainPage.js +234 -4
  45. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +75 -0
  46. package/console/dist/ui/pages/pain/pain-card-helpers.js +78 -0
  47. package/console/dist/ui/pages/principles/PrinciplesPage.js +2 -1
  48. package/console/dist/ui/utils/validators.d.ts +163 -0
  49. package/console/dist/ui/utils/validators.js +433 -0
  50. package/console/dist/web/assets/app.css +138 -0
  51. package/console/dist/web/assets/app.js +3124 -1288
  52. package/console/package.json +3 -0
  53. package/core/dist/index.d.ts +2 -2
  54. package/core/dist/index.d.ts.map +1 -1
  55. package/core/dist/index.js +1 -1
  56. package/core/dist/index.js.map +1 -1
  57. package/core/dist/principle-tree-ledger.d.ts +55 -4
  58. package/core/dist/principle-tree-ledger.d.ts.map +1 -1
  59. package/core/dist/principle-tree-ledger.js +472 -13
  60. package/core/dist/principle-tree-ledger.js.map +1 -1
  61. package/core/dist/prompt-builder/__tests__/model-config.test.d.ts +2 -0
  62. package/core/dist/prompt-builder/__tests__/model-config.test.d.ts.map +1 -0
  63. package/core/dist/prompt-builder/__tests__/model-config.test.js +158 -0
  64. package/core/dist/prompt-builder/__tests__/model-config.test.js.map +1 -0
  65. package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js +58 -0
  66. package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js.map +1 -1
  67. package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts +2 -0
  68. package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts.map +1 -0
  69. package/core/dist/prompt-builder/__tests__/xml-escape.test.js +42 -0
  70. package/core/dist/prompt-builder/__tests__/xml-escape.test.js.map +1 -0
  71. package/core/dist/prompt-builder/empathy-keyword-matching.d.ts.map +1 -1
  72. package/core/dist/prompt-builder/empathy-keyword-matching.js +9 -6
  73. package/core/dist/prompt-builder/empathy-keyword-matching.js.map +1 -1
  74. package/core/dist/prompt-builder/index.d.ts +3 -0
  75. package/core/dist/prompt-builder/index.d.ts.map +1 -1
  76. package/core/dist/prompt-builder/index.js +2 -0
  77. package/core/dist/prompt-builder/index.js.map +1 -1
  78. package/core/dist/prompt-builder/model-config.d.ts +42 -0
  79. package/core/dist/prompt-builder/model-config.d.ts.map +1 -0
  80. package/core/dist/prompt-builder/model-config.js +84 -0
  81. package/core/dist/prompt-builder/model-config.js.map +1 -0
  82. package/core/dist/prompt-builder/size-guard.d.ts +1 -0
  83. package/core/dist/prompt-builder/size-guard.d.ts.map +1 -1
  84. package/core/dist/prompt-builder/size-guard.js +21 -0
  85. package/core/dist/prompt-builder/size-guard.js.map +1 -1
  86. package/core/dist/prompt-builder/types.d.ts +2 -0
  87. package/core/dist/prompt-builder/types.d.ts.map +1 -1
  88. package/core/dist/prompt-builder/xml-escape.d.ts +12 -0
  89. package/core/dist/prompt-builder/xml-escape.d.ts.map +1 -0
  90. package/core/dist/prompt-builder/xml-escape.js +19 -0
  91. package/core/dist/prompt-builder/xml-escape.js.map +1 -0
  92. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +205 -48
  93. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  94. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts +2 -0
  95. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts.map +1 -0
  96. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js +284 -0
  97. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js.map +1 -0
  98. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts +2 -0
  99. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts.map +1 -0
  100. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js +500 -0
  101. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js.map +1 -0
  102. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +7 -5
  103. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
  104. package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js +11 -0
  105. package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js.map +1 -1
  106. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +15 -2
  107. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
  108. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts +2 -0
  109. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts.map +1 -0
  110. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js +290 -0
  111. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js.map +1 -0
  112. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts +2 -0
  113. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts.map +1 -0
  114. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js +158 -0
  115. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js.map +1 -0
  116. package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js +15 -1
  117. package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js.map +1 -1
  118. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts +2 -0
  119. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts.map +1 -0
  120. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js +62 -0
  121. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js.map +1 -0
  122. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +12 -2
  123. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
  124. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts +2 -0
  125. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts.map +1 -0
  126. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js +56 -0
  127. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js.map +1 -0
  128. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +8 -0
  129. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
  130. package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js +20 -0
  131. package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js.map +1 -1
  132. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
  133. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +6 -0
  134. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
  135. package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
  136. package/core/dist/runtime-v2/activation/sqlite-approval-store.js +86 -32
  137. package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
  138. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +65 -1
  139. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js.map +1 -1
  140. package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts.map +1 -1
  141. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js +33 -11
  142. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js.map +1 -1
  143. package/core/dist/runtime-v2/bridge-result-shaper.d.ts +53 -0
  144. package/core/dist/runtime-v2/bridge-result-shaper.d.ts.map +1 -0
  145. package/core/dist/runtime-v2/bridge-result-shaper.js +117 -0
  146. package/core/dist/runtime-v2/bridge-result-shaper.js.map +1 -0
  147. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts +13 -0
  148. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts.map +1 -0
  149. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js +111 -0
  150. package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js.map +1 -0
  151. package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts +103 -0
  152. package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts.map +1 -0
  153. package/core/dist/runtime-v2/detection/detection-funnel-policy.js +135 -0
  154. package/core/dist/runtime-v2/detection/detection-funnel-policy.js.map +1 -0
  155. package/core/dist/runtime-v2/detection/index.d.ts +10 -0
  156. package/core/dist/runtime-v2/detection/index.d.ts.map +1 -0
  157. package/core/dist/runtime-v2/detection/index.js +9 -0
  158. package/core/dist/runtime-v2/detection/index.js.map +1 -0
  159. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +134 -15
  160. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
  161. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts +18 -0
  162. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts.map +1 -0
  163. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js +251 -0
  164. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js.map +1 -0
  165. package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +73 -0
  166. package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -1
  167. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +98 -0
  168. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
  169. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js +131 -0
  170. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
  171. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +8 -0
  172. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -1
  173. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +66 -3
  174. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -1
  175. package/core/dist/runtime-v2/diagnostician-output.d.ts +23 -0
  176. package/core/dist/runtime-v2/diagnostician-output.d.ts.map +1 -1
  177. package/core/dist/runtime-v2/diagnostician-output.js +16 -0
  178. package/core/dist/runtime-v2/diagnostician-output.js.map +1 -1
  179. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +32 -0
  180. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
  181. package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
  182. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts +12 -0
  183. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts.map +1 -0
  184. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js +181 -0
  185. package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js.map +1 -0
  186. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +104 -1
  187. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -1
  188. package/core/dist/runtime-v2/evidence-triage/index.d.ts +3 -0
  189. package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -1
  190. package/core/dist/runtime-v2/evidence-triage/index.js +3 -0
  191. package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -1
  192. package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts +128 -0
  193. package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts.map +1 -0
  194. package/core/dist/runtime-v2/evidence-triage/observation-resolver.js +203 -0
  195. package/core/dist/runtime-v2/evidence-triage/observation-resolver.js.map +1 -0
  196. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +1 -1
  197. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
  198. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +4 -0
  199. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -1
  200. package/core/dist/runtime-v2/evidence-triage/triage-policy.js +66 -9
  201. package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -1
  202. package/core/dist/runtime-v2/evidence-triage/types.d.ts +14 -0
  203. package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -1
  204. package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -1
  205. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +56 -4
  206. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  207. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts +2 -0
  208. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts.map +1 -0
  209. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js +30 -0
  210. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js.map +1 -0
  211. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  212. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +11 -2
  213. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  214. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.d.ts.map +1 -1
  215. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js +0 -9
  216. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js.map +1 -1
  217. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts +15 -0
  218. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts.map +1 -0
  219. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js +450 -0
  220. package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js.map +1 -0
  221. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts +13 -0
  222. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts.map +1 -0
  223. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js +243 -0
  224. package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js.map +1 -0
  225. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts +12 -0
  226. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts.map +1 -0
  227. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js +172 -0
  228. package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js.map +1 -0
  229. package/core/dist/runtime-v2/index.d.ts +15 -6
  230. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  231. package/core/dist/runtime-v2/index.js +15 -4
  232. package/core/dist/runtime-v2/index.js.map +1 -1
  233. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts +2 -0
  234. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts.map +1 -0
  235. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js +185 -0
  236. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js.map +1 -0
  237. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts +2 -0
  238. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts.map +1 -0
  239. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js +91 -0
  240. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js.map +1 -0
  241. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts +2 -0
  242. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts.map +1 -0
  243. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js +168 -0
  244. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js.map +1 -0
  245. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts +2 -0
  246. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts.map +1 -0
  247. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js +121 -0
  248. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js.map +1 -0
  249. package/core/dist/runtime-v2/intent/index.d.ts +6 -0
  250. package/core/dist/runtime-v2/intent/index.d.ts.map +1 -0
  251. package/core/dist/runtime-v2/intent/index.js +6 -0
  252. package/core/dist/runtime-v2/intent/index.js.map +1 -0
  253. package/core/dist/runtime-v2/intent/intent-decision-record.d.ts +125 -0
  254. package/core/dist/runtime-v2/intent/intent-decision-record.d.ts.map +1 -0
  255. package/core/dist/runtime-v2/intent/intent-decision-record.js +21 -0
  256. package/core/dist/runtime-v2/intent/intent-decision-record.js.map +1 -0
  257. package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts +95 -0
  258. package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts.map +1 -0
  259. package/core/dist/runtime-v2/intent/intent-doc-reader-port.js +43 -0
  260. package/core/dist/runtime-v2/intent/intent-doc-reader-port.js.map +1 -0
  261. package/core/dist/runtime-v2/intent/intent-doc.d.ts +19 -0
  262. package/core/dist/runtime-v2/intent/intent-doc.d.ts.map +1 -0
  263. package/core/dist/runtime-v2/intent/intent-doc.js +70 -0
  264. package/core/dist/runtime-v2/intent/intent-doc.js.map +1 -0
  265. package/core/dist/runtime-v2/intent/intent-friction-block.d.ts +63 -0
  266. package/core/dist/runtime-v2/intent/intent-friction-block.d.ts.map +1 -0
  267. package/core/dist/runtime-v2/intent/intent-friction-block.js +129 -0
  268. package/core/dist/runtime-v2/intent/intent-friction-block.js.map +1 -0
  269. package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts +42 -0
  270. package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts.map +1 -0
  271. package/core/dist/runtime-v2/intent/intent-patch-proposal.js +81 -0
  272. package/core/dist/runtime-v2/intent/intent-patch-proposal.js.map +1 -0
  273. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts +54 -0
  274. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts.map +1 -0
  275. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js +219 -0
  276. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js.map +1 -0
  277. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts +2 -0
  278. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts.map +1 -0
  279. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js +306 -0
  280. package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js.map +1 -0
  281. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts +2 -0
  282. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts.map +1 -0
  283. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js +360 -0
  284. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js.map +1 -0
  285. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts +2 -0
  286. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts.map +1 -0
  287. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js +333 -0
  288. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js.map +1 -0
  289. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts +2 -0
  290. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts.map +1 -0
  291. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js +113 -0
  292. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js.map +1 -0
  293. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +13 -0
  294. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -1
  295. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js +42 -0
  296. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -1
  297. package/core/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -1
  298. package/core/dist/runtime-v2/internalization/diag-router-runner.js +27 -0
  299. package/core/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -1
  300. package/core/dist/runtime-v2/internalization/index.d.ts +0 -16
  301. package/core/dist/runtime-v2/internalization/index.d.ts.map +1 -1
  302. package/core/dist/runtime-v2/internalization/index.js +0 -8
  303. package/core/dist/runtime-v2/internalization/index.js.map +1 -1
  304. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts +15 -0
  305. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts.map +1 -0
  306. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js +179 -0
  307. package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js.map +1 -0
  308. package/core/dist/runtime-v2/pain-gate/index.d.ts +10 -0
  309. package/core/dist/runtime-v2/pain-gate/index.d.ts.map +1 -0
  310. package/core/dist/runtime-v2/pain-gate/index.js +9 -0
  311. package/core/dist/runtime-v2/pain-gate/index.js.map +1 -0
  312. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts +121 -0
  313. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts.map +1 -0
  314. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js +157 -0
  315. package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js.map +1 -0
  316. package/core/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
  317. package/core/dist/runtime-v2/pain-signal-bridge.js +14 -88
  318. package/core/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
  319. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  320. package/core/dist/runtime-v2/pain-signal-observability.js +272 -61
  321. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  322. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +12 -0
  323. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  324. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +1 -1
  325. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  326. package/core/dist/runtime-v2/pain-to-principle-service.d.ts +6 -0
  327. package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  328. package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
  329. package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  330. package/core/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -1
  331. package/core/dist/runtime-v2/proven-channel-baseline.js +1 -1
  332. package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
  333. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts +2 -0
  334. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts.map +1 -0
  335. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js +55 -0
  336. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js.map +1 -0
  337. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.d.ts.map +1 -1
  338. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js +6 -0
  339. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js.map +1 -1
  340. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts +2 -0
  341. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts.map +1 -0
  342. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js +272 -0
  343. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js.map +1 -0
  344. package/core/dist/runtime-v2/store/intent/index.d.ts +6 -0
  345. package/core/dist/runtime-v2/store/intent/index.d.ts.map +1 -0
  346. package/core/dist/runtime-v2/store/intent/index.js +5 -0
  347. package/core/dist/runtime-v2/store/intent/index.js.map +1 -0
  348. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts +51 -0
  349. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts.map +1 -0
  350. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js +306 -0
  351. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js.map +1 -0
  352. package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js +14 -3
  353. package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js.map +1 -1
  354. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts +2 -0
  355. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts.map +1 -0
  356. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js +72 -0
  357. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js.map +1 -0
  358. package/core/dist/runtime-v2/store/sqlite-connection.d.ts +27 -0
  359. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  360. package/core/dist/runtime-v2/store/sqlite-connection.js +124 -12
  361. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  362. package/core/dist/runtime-v2/types/event-payload.d.ts +1 -20
  363. package/core/dist/runtime-v2/types/event-payload.d.ts.map +1 -1
  364. package/core/dist/runtime-v2/types/event-payload.js +0 -12
  365. package/core/dist/runtime-v2/types/event-payload.js.map +1 -1
  366. package/core/dist/runtime-v2/types/event-types.d.ts +5 -61
  367. package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  368. package/core/dist/runtime-v2/types/event-types.js +2 -36
  369. package/core/dist/runtime-v2/types/event-types.js.map +1 -1
  370. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts +63 -0
  371. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
  372. package/core/dist/runtime-v2/types/evidence-chain-contract.js +234 -9
  373. package/core/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
  374. package/core/dist/runtime-v2/types/index.d.ts +5 -5
  375. package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
  376. package/core/dist/runtime-v2/types/index.js +7 -3
  377. package/core/dist/runtime-v2/types/index.js.map +1 -1
  378. package/core/dist/runtime-v2/types/ledger-store.d.ts +30 -30
  379. package/core/dist/runtime-v2/types/ledger-store.d.ts.map +1 -1
  380. package/core/dist/runtime-v2/types/ledger-store.js +10 -5
  381. package/core/dist/runtime-v2/types/ledger-store.js.map +1 -1
  382. package/core/dist/runtime-v2/types/pain-signal.d.ts +2 -2
  383. package/core/dist/runtime-v2/types/pain-signal.js +2 -2
  384. package/core/dist/workflow-funnel-loader.d.ts +2 -2
  385. package/core/dist/workflow-funnel-loader.d.ts.map +1 -1
  386. package/dist/installer.d.ts.map +1 -1
  387. package/dist/installer.js +16 -0
  388. package/dist/installer.js.map +1 -1
  389. package/dist/mvp-config.d.ts +0 -10
  390. package/dist/mvp-config.d.ts.map +1 -1
  391. package/dist/mvp-config.js +0 -65
  392. package/dist/mvp-config.js.map +1 -1
  393. package/package.json +1 -1
  394. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts +9 -0
  395. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts.map +1 -0
  396. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js +166 -0
  397. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js.map +1 -0
  398. package/pd-cli/dist/commands/intent.d.ts +59 -0
  399. package/pd-cli/dist/commands/intent.d.ts.map +1 -0
  400. package/pd-cli/dist/commands/intent.js +350 -0
  401. package/pd-cli/dist/commands/intent.js.map +1 -0
  402. package/pd-cli/dist/commands/mvp-smoke.js +1 -1
  403. package/pd-cli/dist/commands/mvp-smoke.js.map +1 -1
  404. package/pd-cli/dist/commands/rulecode.js +1 -1
  405. package/pd-cli/dist/commands/rulecode.js.map +1 -1
  406. package/pd-cli/dist/commands/runtime-canary.d.ts.map +1 -1
  407. package/pd-cli/dist/commands/runtime-canary.js +10 -11
  408. package/pd-cli/dist/commands/runtime-canary.js.map +1 -1
  409. package/pd-cli/dist/commands/runtime-init.d.ts +43 -0
  410. package/pd-cli/dist/commands/runtime-init.d.ts.map +1 -0
  411. package/pd-cli/dist/commands/runtime-init.js +264 -0
  412. package/pd-cli/dist/commands/runtime-init.js.map +1 -0
  413. package/pd-cli/dist/commands/runtime-internalization-queue.d.ts.map +1 -1
  414. package/pd-cli/dist/commands/runtime-internalization-queue.js +13 -16
  415. package/pd-cli/dist/commands/runtime-internalization-queue.js.map +1 -1
  416. package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
  417. package/pd-cli/dist/commands/runtime-internalization-run-once.js +3 -0
  418. package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
  419. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.d.ts.map +1 -1
  420. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js +61 -7
  421. package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js.map +1 -1
  422. package/pd-cli/dist/commands/runtime.js +1 -1
  423. package/pd-cli/dist/commands/runtime.js.map +1 -1
  424. package/pd-cli/dist/index.js +92 -34
  425. package/pd-cli/dist/index.js.map +1 -1
  426. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts +2 -0
  427. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts.map +1 -0
  428. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js +314 -0
  429. package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js.map +1 -0
  430. package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js +20 -12
  431. package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js.map +1 -1
  432. package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
  433. package/pd-cli/dist/services/demo-story-a-runner.js +6 -0
  434. package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
  435. package/pd-cli/dist/services/rulehost-readiness.d.ts +62 -0
  436. package/pd-cli/dist/services/rulehost-readiness.d.ts.map +1 -0
  437. package/pd-cli/dist/services/rulehost-readiness.js +214 -0
  438. package/pd-cli/dist/services/rulehost-readiness.js.map +1 -0
  439. package/pd-cli/dist/services/runtime-adapter-resolver.d.ts +1 -1
  440. package/pd-cli/dist/services/runtime-adapter-resolver.js +3 -3
  441. package/pd-cli/dist/services/runtime-adapter-resolver.js.map +1 -1
  442. package/pd-cli/package.json +1 -0
  443. package/plugin/dist/commands/evolution-status.js +0 -2
  444. package/plugin/dist/commands/pain.js +2 -0
  445. package/plugin/dist/core/control-ui-db.d.ts +11 -0
  446. package/plugin/dist/core/control-ui-db.js +40 -16
  447. package/plugin/dist/core/detection-funnel.d.ts +25 -11
  448. package/plugin/dist/core/detection-funnel.js +32 -80
  449. package/plugin/dist/core/event-log.d.ts +1 -3
  450. package/plugin/dist/core/event-log.js +5 -21
  451. package/plugin/dist/core/evolution-reducer.d.ts +0 -8
  452. package/plugin/dist/core/evolution-reducer.js +9 -19
  453. package/plugin/dist/core/intent-doc-reader-adapter.d.ts +28 -0
  454. package/plugin/dist/core/intent-doc-reader-adapter.js +56 -0
  455. package/plugin/dist/core/intent-doc-reader.d.ts +80 -0
  456. package/plugin/dist/core/intent-doc-reader.js +189 -0
  457. package/plugin/dist/core/pain-diagnostic-gate.d.ts +37 -28
  458. package/plugin/dist/core/pain-diagnostic-gate.js +53 -89
  459. package/plugin/dist/core/pain.d.ts +0 -63
  460. package/plugin/dist/core/pain.js +0 -167
  461. package/plugin/dist/core/paths.d.ts +0 -1
  462. package/plugin/dist/core/paths.js +2 -1
  463. package/plugin/dist/core/principle-tree-ledger.d.ts +27 -79
  464. package/plugin/dist/core/principle-tree-ledger.js +39 -524
  465. package/plugin/dist/core/reflection/reflection-context.d.ts +2 -2
  466. package/plugin/dist/core/schema/migrations/001-init-trajectory.js +3 -6
  467. package/plugin/dist/core/schema/schema-definitions.js +4 -9
  468. package/plugin/dist/core/trajectory.d.ts +16 -16
  469. package/plugin/dist/core/trajectory.js +338 -311
  470. package/plugin/dist/core/workspace-context.d.ts +2 -3
  471. package/plugin/dist/hooks/after-tool-call-helpers.d.ts +4 -1
  472. package/plugin/dist/hooks/after-tool-call-helpers.js +13 -17
  473. package/plugin/dist/hooks/gate-block-helper.js +57 -17
  474. package/plugin/dist/hooks/lifecycle.js +3 -6
  475. package/plugin/dist/hooks/llm.js +66 -26
  476. package/plugin/dist/hooks/pain.d.ts +3 -1
  477. package/plugin/dist/hooks/pain.js +124 -49
  478. package/plugin/dist/hooks/prompt-helpers.d.ts +105 -0
  479. package/plugin/dist/hooks/prompt-helpers.js +288 -0
  480. package/plugin/dist/hooks/prompt-types.d.ts +74 -0
  481. package/plugin/dist/hooks/prompt-types.js +12 -0
  482. package/plugin/dist/hooks/prompt.d.ts +7 -38
  483. package/plugin/dist/hooks/prompt.js +433 -338
  484. package/plugin/dist/hooks/raw-observation-adapter.d.ts +9 -50
  485. package/plugin/dist/hooks/raw-observation-adapter.js +9 -164
  486. package/plugin/dist/hooks/raw-observation-types.d.ts +6 -57
  487. package/plugin/dist/hooks/raw-observation-types.js +5 -9
  488. package/plugin/dist/hooks/triage-adapter.js +6 -26
  489. package/plugin/dist/hooks/trigger-cooldown-tracker.d.ts +12 -0
  490. package/plugin/dist/hooks/trigger-cooldown-tracker.js +25 -0
  491. package/plugin/dist/index.d.ts +3 -1
  492. package/plugin/dist/index.js +9 -5
  493. package/plugin/dist/service/evolution-worker.js +6 -64
  494. package/plugin/dist/service/runtime-summary-service.d.ts +0 -2
  495. package/plugin/dist/service/runtime-summary-service.js +1 -5
  496. package/plugin/dist/service/subagent-workflow/workflow-store.d.ts +14 -0
  497. package/plugin/dist/service/subagent-workflow/workflow-store.js +91 -2
  498. package/plugin/dist/types/event-types.d.ts +1 -1
  499. package/plugin/package.json +6 -3
  500. package/plugin/scripts/acceptance-test.mjs +3 -3
  501. package/plugin/scripts/sync-plugin.mjs +33 -22
  502. package/plugin/templates/langs/en/skills/pd-cli-operator/SKILL.md +20 -11
  503. package/plugin/templates/langs/en/skills/pd-runtime-v2/SKILL.md +10 -0
  504. package/plugin/templates/langs/zh/skills/pd-cli-operator/SKILL.md +20 -11
  505. package/plugin/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +10 -0
  506. package/console/dist/server/config/feature-flags.d.ts +0 -25
  507. package/console/dist/server/config/feature-flags.js +0 -101
  508. package/pd-cli/dist/commands/central-sync.d.ts +0 -10
  509. package/pd-cli/dist/commands/central-sync.d.ts.map +0 -1
  510. package/pd-cli/dist/commands/central-sync.js +0 -32
  511. package/pd-cli/dist/commands/central-sync.js.map +0 -1
  512. package/pd-cli/dist/services/feature-flag-loader.d.ts +0 -6
  513. package/pd-cli/dist/services/feature-flag-loader.d.ts.map +0 -1
  514. package/pd-cli/dist/services/feature-flag-loader.js +0 -53
  515. package/pd-cli/dist/services/feature-flag-loader.js.map +0 -1
  516. package/plugin/dist/core/observability.d.ts +0 -40
  517. package/plugin/dist/core/observability.js +0 -164
  518. package/plugin/dist/core/principle-tree-ledger-adapter.d.ts +0 -32
  519. package/plugin/dist/core/principle-tree-ledger-adapter.js +0 -125
  520. package/plugin/dist/hooks/subagent.d.ts +0 -9
  521. package/plugin/dist/hooks/subagent.js +0 -122
  522. package/plugin/dist/service/central-database.d.ts +0 -138
  523. package/plugin/dist/service/central-database.js +0 -731
  524. package/plugin/dist/service/central-sync-service.d.ts +0 -8
  525. package/plugin/dist/service/central-sync-service.js +0 -71
  526. package/plugin/scripts/validate-live-path.ts +0 -480
@@ -1,8 +0,0 @@
1
- /**
2
- * CentralSyncService - Periodically sync workspace data to central database.
3
- *
4
- * Ensures thinking_model_events and other workspace data are aggregated
5
- * into the central database for cross-workspace queries and WebUI display.
6
- */
7
- import type { OpenClawPluginService } from '../openclaw-sdk.js';
8
- export declare const CentralSyncService: OpenClawPluginService;
@@ -1,71 +0,0 @@
1
- /**
2
- * CentralSyncService - Periodically sync workspace data to central database.
3
- *
4
- * Ensures thinking_model_events and other workspace data are aggregated
5
- * into the central database for cross-workspace queries and WebUI display.
6
- */
7
- import { CentralDatabase } from './central-database.js';
8
- import { WORKFLOW_TTL_MS } from '../config/defaults/runtime.js';
9
- let syncInterval = null;
10
- let logger = undefined;
11
- let centralDb = null;
12
- async function runSyncCycle() {
13
- if (!centralDb) {
14
- logger?.warn?.('[PD:CentralSync] CentralDatabase not initialized, skipping sync');
15
- return;
16
- }
17
- try {
18
- const results = centralDb.syncAll();
19
- const totalSynced = Array.from(results.values()).reduce((sum, count) => sum + count, 0);
20
- const workspacesSynced = Array.from(results.entries())
21
- .filter(([, count]) => count > 0)
22
- .map(([name, count]) => `${name}:${count}`)
23
- .join(', ');
24
- if (totalSynced > 0) {
25
- logger?.info?.(`[PD:CentralSync] Synced ${totalSynced} records from workspaces: ${workspacesSynced}`);
26
- }
27
- else {
28
- logger?.debug?.(`[PD:CentralSync] No new records to sync`);
29
- }
30
- }
31
- catch (err) {
32
- logger?.error?.(`[PD:CentralSync] Sync failed: ${String(err)}`);
33
- }
34
- }
35
- export const CentralSyncService = {
36
- id: 'principles-central-sync',
37
- async start(ctx) {
38
- const { logger: ctxLogger, config } = ctx;
39
- logger = ctxLogger;
40
- const { intervals } = config;
41
- const intervalMs = intervals?.central_sync_ms ?? WORKFLOW_TTL_MS;
42
- // Initialize CentralDatabase
43
- centralDb = new CentralDatabase();
44
- // Initial sync on start
45
- logger?.info?.(`[PD:CentralSync] Starting with interval ${intervalMs}ms`);
46
- await runSyncCycle();
47
- // Schedule periodic sync
48
- syncInterval = setInterval(runSyncCycle, intervalMs);
49
- // Don't keep the process alive just for this timer
50
- syncInterval.unref();
51
- logger?.info?.(`[PD:CentralSync] Service started, syncing every ${intervalMs / 1000}s`);
52
- },
53
- async stop(ctx) {
54
- if (syncInterval) {
55
- clearInterval(syncInterval);
56
- syncInterval = null;
57
- }
58
- // Final sync on stop
59
- if (centralDb) {
60
- try {
61
- centralDb.syncAll();
62
- ctx.logger?.info?.(`[PD:CentralSync] Final sync completed`);
63
- }
64
- catch (err) {
65
- ctx.logger?.error?.(`[PD:CentralSync] Final sync failed: ${String(err)}`);
66
- }
67
- }
68
- centralDb = null;
69
- ctx.logger?.info?.(`[PD:CentralSync] Service stopped`);
70
- },
71
- };
@@ -1,480 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Validate Live Path Script (Phase 18) — with Data Flow Monitoring
4
- *
5
- * Validates the end-to-end nocturnal workflow path with bootstrapped principles.
6
- *
7
- * Purpose:
8
- * - Reads bootstrapped rules from principle_training_state.json
9
- * - Creates synthetic snapshot with recentPain to pass hasUsableNocturnalSnapshot() guard
10
- * - Enqueues sleep_reflection task with proper file locking
11
- * - Polls subagent_workflows.db directly for nocturnal workflows
12
- * - Correlates workflow to queue item via taskId
13
- * - Verifies state='completed' and explicit resolution (not 'expired')
14
- * - Monitors data flow: queue state → workflow state → artifact persistence
15
- * - Outputs summary and exits 0 on success, non-zero on failure
16
- *
17
- * Usage:
18
- * tsx scripts/validate-live-path.ts [--verbose]
19
- *
20
- * Environment:
21
- * WORKSPACE_DIR - Optional workspace directory (defaults to process.cwd())
22
- */
23
-
24
- import * as Database from 'better-sqlite3';
25
- import * as fs from 'fs';
26
- import * as path from 'path';
27
-
28
- // ─── Constants ───────────────────────────────────────────────────────────
29
- const POLL_INTERVAL_MS = 5_000;
30
- const POLL_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
31
- const LOCK_SUFFIX = '.lock';
32
- const LOCK_MAX_RETRIES = 50;
33
- const LOCK_RETRY_DELAY_MS = 50;
34
- const LOCK_STALE_MS = 30_000;
35
- const WORKSPACE_DIR = process.env.WORKSPACE_DIR || process.cwd();
36
- const STATE_DIR = path.join(WORKSPACE_DIR, '.state');
37
- const QUEUE_PATH = path.join(STATE_DIR, 'EVOLUTION_QUEUE');
38
- const LEDGER_PATH = path.join(STATE_DIR, 'principle_training_state.json');
39
- const DB_PATH = path.join(STATE_DIR, 'subagent_workflows.db');
40
- const PAIN_FLAG_PATH = path.join(STATE_DIR, '.pain_flag');
41
- const SAMPLES_DIR = path.join(STATE_DIR, 'nocturnal', 'samples');
42
-
43
- // ─── Helpers ─────────────────────────────────────────────────────────────
44
- function timestamp(): string {
45
- return new Date().toISOString();
46
- }
47
-
48
- function logStep(step: string, detail: string): void {
49
- console.log(`[${timestamp()}] ▸ ${step}: ${detail}`);
50
- }
51
-
52
- function logData(label: string, data: unknown): void {
53
- const display = typeof data === 'string' ? data : JSON.stringify(data).slice(0, 300);
54
- console.log(`[${timestamp()}] 📦 ${label}: ${display}`);
55
- }
56
-
57
- function safeReadJson(filePath: string): unknown {
58
- try {
59
- if (!fs.existsSync(filePath)) return null;
60
- return JSON.parse(fs.readFileSync(filePath, 'utf8'));
61
- } catch { return null; }
62
- }
63
-
64
- // ─── Types ───────────────────────────────────────────────────────────────
65
- interface LedgerRule {
66
- id: string;
67
- principleId: string;
68
- action: string;
69
- type: string;
70
- }
71
-
72
- interface HybridLedgerStore {
73
- tree: {
74
- rules: Record<string, LedgerRule>;
75
- };
76
- }
77
-
78
- interface WorkflowRow {
79
- workflow_id: string;
80
- workflow_type: string;
81
- state: string;
82
- metadata_json: string;
83
- created_at: number;
84
- }
85
-
86
- interface QueueItem {
87
- id: string;
88
- taskKind: string;
89
- status: string;
90
- resolution?: string;
91
- resultRef?: string;
92
- }
93
-
94
- interface LockContext {
95
- lockPath: string;
96
- pid: number;
97
- release: () => void;
98
- }
99
-
100
- // ─── File Lock Functions (simplified from file-lock.ts) ──────────────────
101
- async function acquireLockAsync(filePath: string, options: {
102
- lockSuffix?: string;
103
- maxRetries?: number;
104
- baseRetryDelayMs?: number;
105
- lockStaleMs?: number;
106
- } = {}): Promise<LockContext> {
107
- const lockSuffix = options.lockSuffix ?? LOCK_SUFFIX;
108
- const maxRetries = options.maxRetries ?? LOCK_MAX_RETRIES;
109
- const baseRetryDelayMs = options.baseRetryDelayMs ?? LOCK_RETRY_DELAY_MS;
110
- const lockStaleMs = options.lockStaleMs ?? LOCK_STALE_MS;
111
- const { pid } = process;
112
- const lockPath = filePath + lockSuffix;
113
-
114
- for (let attempt = 0; attempt < maxRetries; attempt++) {
115
- try {
116
- // Check if lock file exists and is stale
117
- if (fs.existsSync(lockPath)) {
118
- const lockContent = fs.readFileSync(lockPath, 'utf8');
119
- const lockPid = parseInt(lockContent, 10);
120
- const lockStats = fs.statSync(lockPath);
121
- const lockAge = Date.now() - lockStats.mtimeMs;
122
-
123
- // Clean up stale lock
124
- if (lockAge > lockStaleMs) {
125
- fs.unlinkSync(lockPath);
126
- } else if (lockPid !== pid) {
127
- // Lock held by another process
128
- await new Promise(resolve => setTimeout(resolve, baseRetryDelayMs));
129
- continue;
130
- }
131
- }
132
-
133
- // Acquire lock
134
- fs.writeFileSync(lockPath, pid.toString(), { flag: 'wx' });
135
- return {
136
- lockPath,
137
- pid,
138
- release: () => {
139
- try {
140
- if (fs.existsSync(lockPath)) {
141
- fs.unlinkSync(lockPath);
142
- }
143
- } catch {
144
- // Ignore errors during release
145
- }
146
- },
147
- };
148
- } catch (error: unknown) {
149
- const err = error as { code?: string };
150
- if (err.code === 'EEXIST') {
151
- if (attempt < maxRetries - 1) {
152
- await new Promise(resolve => setTimeout(resolve, baseRetryDelayMs));
153
- continue;
154
- }
155
- }
156
- const lockError = new Error(`Failed to acquire lock for ${filePath}: ${String(error)}`);
157
- lockError.cause = error;
158
- throw lockError;
159
- }
160
- }
161
-
162
- throw new Error(`Failed to acquire lock for ${filePath} after ${maxRetries} attempts`);
163
- }
164
-
165
- function releaseLock(ctx: LockContext): void {
166
- ctx.release();
167
- }
168
-
169
- // ─── Step 1: Check bootstrapped rules ─────────────────────────────────────
170
- function loadBootstrappedRules(): LedgerRule[] {
171
- if (!fs.existsSync(LEDGER_PATH)) {
172
- throw new Error('FAIL: principle_training_state.json not found. Run Phase 17 bootstrap first: npm run bootstrap-rules');
173
- }
174
-
175
- const ledger: HybridLedgerStore = JSON.parse(fs.readFileSync(LEDGER_PATH, 'utf8'));
176
- const bootstrappedRules = Object.values(ledger.tree.rules).filter(r =>
177
- r.id.endsWith('_stub_bootstrap')
178
- );
179
-
180
- return bootstrappedRules;
181
- }
182
-
183
- // ─── Step 2: Build synthetic snapshot ──────────────────────────────────────
184
- function buildSyntheticSnapshot(taskId: string) {
185
- return {
186
- sessionId: `validation-${taskId}`,
187
- startedAt: new Date().toISOString(),
188
- updatedAt: new Date().toISOString(),
189
- assistantTurns: [],
190
- userTurns: [],
191
- toolCalls: [],
192
- painEvents: [],
193
- gateBlocks: [],
194
- stats: {
195
- totalAssistantTurns: 0,
196
- totalToolCalls: 0,
197
- failureCount: 0,
198
- totalPainEvents: 1,
199
- totalGateBlocks: 0,
200
- },
201
- recentPain: [{
202
- source: 'live-validation',
203
- score: 50,
204
- severity: 'moderate',
205
- reason: 'Synthetic snapshot for live path validation',
206
- createdAt: new Date().toISOString(),
207
- }],
208
- _dataSource: 'pain_context_fallback',
209
- };
210
- }
211
-
212
- // ─── Step 3: Enqueue sleep_reflection task with proper file locking ──────────
213
- // Uses acquireLockAsync to prevent TOCTOU race conditions (T-18-01 mitigation)
214
- async function enqueueSleepReflectionTask(taskId: string): Promise<void> {
215
- let lockCtx: LockContext | null = null;
216
- try {
217
- // Acquire lock before reading queue file (T-18-01 mitigation)
218
- lockCtx = await acquireLockAsync(QUEUE_PATH, {
219
- lockSuffix: LOCK_SUFFIX,
220
- maxRetries: LOCK_MAX_RETRIES,
221
- baseRetryDelayMs: LOCK_RETRY_DELAY_MS,
222
- lockStaleMs: LOCK_STALE_MS,
223
- });
224
-
225
- let queue: QueueItem[] = [];
226
- if (fs.existsSync(QUEUE_PATH)) {
227
- const queueContent = fs.readFileSync(QUEUE_PATH, 'utf8');
228
- queue = JSON.parse(queueContent);
229
- }
230
-
231
- queue.push({
232
- id: taskId,
233
- taskKind: 'sleep_reflection',
234
- status: 'pending',
235
- });
236
-
237
- fs.writeFileSync(QUEUE_PATH, JSON.stringify(queue, null, 2), 'utf8');
238
- } finally {
239
- if (lockCtx) {
240
- releaseLock(lockCtx);
241
- }
242
- }
243
- }
244
-
245
- // ─── Step 4: Poll workflow store (raw SQLite, no WorkflowStore import) ─────
246
- // Uses better-sqlite3 directly to avoid WorkflowStore async initialization issues in standalone script
247
- function listNocturnalWorkflows(): WorkflowRow[] {
248
- if (!fs.existsSync(DB_PATH)) {
249
- return [];
250
- }
251
-
252
- const db = new Database(DB_PATH, { readonly: true });
253
- const rows = db.prepare(`
254
- SELECT workflow_id, workflow_type, state, metadata_json, created_at
255
- FROM subagent_workflows
256
- WHERE workflow_type = 'nocturnal'
257
- ORDER BY created_at DESC
258
- `).all() as WorkflowRow[];
259
- db.close();
260
- return rows;
261
- }
262
-
263
- // ─── Step 5: Correlate and verify ─────────────────────────────────────────
264
- function verifyWorkflowCompletion(taskId: string): {
265
- workflowId: string;
266
- state: string;
267
- resolution: string;
268
- } | null {
269
- const workflows = listNocturnalWorkflows();
270
-
271
- for (const wf of workflows) {
272
- const meta = JSON.parse(wf.metadata_json);
273
- if (meta.taskId !== taskId) continue;
274
- if (wf.state !== 'completed') continue;
275
-
276
- // Read resolution from queue (resolution is on queue item, not on WorkflowRow)
277
- let queue: QueueItem[] = [];
278
- try {
279
- if (fs.existsSync(QUEUE_PATH)) {
280
- const queueContent = fs.readFileSync(QUEUE_PATH, 'utf8');
281
- queue = JSON.parse(queueContent);
282
- }
283
- } catch {
284
- // Queue file missing or corrupted — resolution unknown
285
- }
286
-
287
- const queueItem = queue.find(q => q.id === taskId);
288
- const resolution = queueItem?.resolution;
289
-
290
- return {
291
- workflowId: wf.workflow_id,
292
- state: wf.state,
293
- resolution: resolution || 'MISSING',
294
- };
295
- }
296
-
297
- return null;
298
- }
299
-
300
- // ─── Main ─────────────────────────────────────────────────────────────────
301
- async function main() {
302
- const verbose = process.argv.includes('--verbose');
303
-
304
- console.log('╔══════════════════════════════════════════════════════════╗');
305
- console.log('║ Nocturnal Live Path Validation + Data Flow Monitor ║');
306
- console.log('╚══════════════════════════════════════════════════════════╝');
307
- logStep('WORKSPACE', WORKSPACE_DIR);
308
-
309
- // 0. Baseline: snapshot current state
310
- logStep('BASELINE', 'Capturing current state before validation');
311
- const queueBefore = safeReadJson(QUEUE_PATH) as QueueItem[] | null;
312
- logData('EVOLUTION_QUEUE (before)', queueBefore?.length ?? 0);
313
- if (fs.existsSync(PAIN_FLAG_PATH)) {
314
- logData('.pain_flag', 'EXISTS — ' + fs.readFileSync(PAIN_FLAG_PATH, 'utf8').slice(0, 100));
315
- } else {
316
- logData('.pain_flag', 'not present');
317
- }
318
- if (fs.existsSync(SAMPLES_DIR)) {
319
- const samplesBefore = fs.readdirSync(SAMPLES_DIR).length;
320
- logData('nocturnal/samples/', `${samplesBefore} files`);
321
- } else {
322
- logData('nocturnal/samples/', 'directory not present');
323
- }
324
- if (fs.existsSync(DB_PATH)) {
325
- const wfCount = listNocturnalWorkflows().length;
326
- logData('subagent_workflows.db', `${wfCount} nocturnal workflows`);
327
- } else {
328
- logData('subagent_workflows.db', 'not present');
329
- }
330
-
331
- // 1. Check bootstrapped rules
332
- // eslint-disable-next-line @typescript-eslint/init-declarations
333
- let rules: LedgerRule[];
334
- try {
335
- rules = loadBootstrappedRules();
336
- logStep('STEP 1', `Found ${rules.length} bootstrapped rule(s)`);
337
- } catch {
338
- console.error('FAIL: principle_training_state.json not found. Run Phase 17 bootstrap first: npm run bootstrap-rules');
339
- process.exit(1);
340
- }
341
-
342
- if (rules.length === 0) {
343
- console.error('FAIL: No _stub_bootstrap rules found. Run Phase 17 bootstrap first: npm run bootstrap-rules');
344
- process.exit(1);
345
- }
346
-
347
- if (verbose) {
348
- for (const rule of rules) {
349
- console.log(` - ${rule.id} (principleId=${rule.principleId}, action=${rule.action})`);
350
- }
351
- }
352
-
353
- // 2. Generate task ID
354
- const taskId = `validation-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
355
-
356
- // 3. Build synthetic snapshot for validation
357
- const snapshot = buildSyntheticSnapshot(taskId);
358
- logStep('STEP 2', `Synthetic snapshot: sessionId=${snapshot.sessionId}`);
359
- logData('snapshot.recentPain', JSON.stringify(snapshot.recentPain));
360
-
361
- // 4. Enqueue task (with lock acquisition)
362
- try {
363
- await enqueueSleepReflectionTask(taskId);
364
- logStep('STEP 3', `Enqueued sleep_reflection task: ${taskId}`);
365
-
366
- // Post-enqueue: verify queue state
367
- const queueAfter = safeReadJson(QUEUE_PATH) as QueueItem[] | null;
368
- const taskItem = queueAfter?.find(q => q.id === taskId);
369
- logData('EVOLUTION_QUEUE (after)', `${queueAfter?.length ?? 0} tasks`);
370
- logData(`task[${taskId}]`, taskItem ? JSON.stringify(taskItem) : 'NOT FOUND');
371
- } catch (error: unknown) {
372
- console.error('FAIL: Failed to enqueue sleep_reflection task:', String(error));
373
- process.exit(1);
374
- }
375
-
376
- // 5. Poll for completion — with data flow monitoring
377
- const deadline = Date.now() + POLL_TIMEOUT_MS;
378
- let pollCount = 0;
379
- let lastQueueStatus = 'unknown';
380
- let lastWorkflowState = 'none';
381
- logStep('STEP 4', `Polling for workflow completion (timeout: ${POLL_TIMEOUT_MS / 1000 / 60}min, interval: ${POLL_INTERVAL_MS / 1000}s)`);
382
-
383
- while (Date.now() < deadline) {
384
- pollCount++;
385
- await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS));
386
-
387
- // Capture queue state
388
- const queueNow = safeReadJson(QUEUE_PATH) as QueueItem[] | null;
389
- const taskNow = queueNow?.find(q => q.id === taskId);
390
- const currentQueueStatus = taskNow?.status ?? 'not_in_queue';
391
-
392
- // Capture workflow DB state
393
- const workflows = listNocturnalWorkflows();
394
- const matchingWf = workflows.find(w => {
395
- try {
396
- const meta = JSON.parse(w.metadata_json);
397
- return meta.taskId === taskId;
398
- } catch { return false; }
399
- });
400
- const currentWorkflowState = matchingWf?.state ?? 'not_in_db';
401
-
402
- // Log state changes
403
- if (currentQueueStatus !== lastQueueStatus || currentWorkflowState !== lastWorkflowState) {
404
- logStep(`POLL #${pollCount}`, `queue=${currentQueueStatus}, workflow=${currentWorkflowState}`);
405
- if (taskNow) logData('queue item', JSON.stringify({ status: taskNow.status, resolution: taskNow.resolution }));
406
- if (matchingWf) logData('workflow', JSON.stringify({ state: matchingWf.state, type: matchingWf.workflow_type }));
407
- lastQueueStatus = currentQueueStatus;
408
- lastWorkflowState = currentWorkflowState;
409
- } else if (verbose) {
410
- process.stdout.write('.');
411
- }
412
-
413
- // Check for completion
414
- const result = verifyWorkflowCompletion(taskId);
415
- if (result) {
416
- console.log(''); // newline if dots were printed
417
- logStep('STEP 5', `Workflow completed!`);
418
- logData('RESULT', `workflowId=${result.workflowId} state=${result.state} resolution=${result.resolution}`);
419
-
420
- // Check artifact persistence
421
- if (fs.existsSync(SAMPLES_DIR)) {
422
- const newSamples = fs.readdirSync(SAMPLES_DIR).filter(f => {
423
- const stat = fs.statSync(path.join(SAMPLES_DIR, f));
424
- return stat.isFile() && f.endsWith('.json') && (Date.now() - stat.mtimeMs) < 60000; // created in last minute
425
- });
426
- if (newSamples.length > 0) {
427
- logData('new artifacts', newSamples.join(', '));
428
- const firstArtifact = safeReadJson(path.join(SAMPLES_DIR, newSamples[0]));
429
- if (firstArtifact) logData('artifact content (first)', JSON.stringify(firstArtifact).slice(0, 300));
430
- } else {
431
- logData('new artifacts', 'none created in last 60s');
432
- }
433
- }
434
-
435
- // Check pain_flag cleanup
436
- if (fs.existsSync(PAIN_FLAG_PATH)) {
437
- const flagContent = fs.readFileSync(PAIN_FLAG_PATH, 'utf8');
438
- if (flagContent.includes('[object Object]')) {
439
- logStep('⚠️ WARNING', 'pain_flag is corrupted ([object Object])');
440
- } else {
441
- logData('.pain_flag (after)', `still exists, ${flagContent.length} bytes`);
442
- }
443
- } else {
444
- logData('.pain_flag (after)', 'cleaned up (file removed)');
445
- }
446
-
447
- if (result.resolution === 'MISSING' || result.resolution === 'expired') {
448
- console.error('FAIL: resolution not explicit');
449
- process.exit(1);
450
- }
451
-
452
- console.log('PASS: Live path validation successful');
453
- process.exit(0);
454
- }
455
- }
456
-
457
- // Timeout — dump final state for debugging
458
- console.log('');
459
- logStep('TIMEOUT', `Poll timeout after ${pollCount} polls (${POLL_TIMEOUT_MS / 1000 / 60}min)`);
460
- logData('FINAL queue status', lastQueueStatus);
461
- logData('FINAL workflow state', lastWorkflowState);
462
-
463
- // Dump full queue for debugging
464
- const finalQueue = safeReadJson(QUEUE_PATH);
465
- if (finalQueue) logData('FINAL queue dump', JSON.stringify(finalQueue).slice(0, 500));
466
-
467
- // Dump full workflow DB for debugging
468
- const finalWorkflows = listNocturnalWorkflows();
469
- if (finalWorkflows.length > 0) {
470
- logData('FINAL workflows', finalWorkflows.map(w => `${w.workflow_id}: state=${w.state}`).join(', '));
471
- }
472
-
473
- console.error('FAIL: No completed nocturnal workflow found for taskId');
474
- process.exit(1);
475
- }
476
-
477
- main().catch(err => {
478
- console.error('FAIL:', err);
479
- process.exit(1);
480
- });