create-principles-disciple 1.94.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 (339) hide show
  1. package/console/dist/server/config/WorkspaceConfigStore.js +2 -1
  2. package/console/dist/server/config/pd-config-store.d.ts +33 -0
  3. package/console/dist/server/config/pd-config-store.js +159 -0
  4. package/console/dist/server/index.js +18 -4
  5. package/console/dist/server/models/EvidenceChainConsoleModel.d.ts +0 -2
  6. package/console/dist/server/models/EvidenceChainConsoleModel.js +36 -2
  7. package/console/dist/server/models/HealthCheckModel.js +5 -3
  8. package/console/dist/server/models/IntentDecisionModel.d.ts +66 -0
  9. package/console/dist/server/models/IntentDecisionModel.js +207 -0
  10. package/console/dist/server/models/IntentPageModel.d.ts +18 -0
  11. package/console/dist/server/models/IntentPageModel.js +90 -0
  12. package/console/dist/server/models/PrinciplesConsoleModel.d.ts +2 -0
  13. package/console/dist/server/models/PrinciplesConsoleModel.js +37 -1
  14. package/console/dist/server/models/WorkspaceService.d.ts +0 -28
  15. package/console/dist/server/models/WorkspaceService.js +0 -115
  16. package/console/dist/server/routes/config.js +55 -1
  17. package/console/dist/server/routes/intent-decisions.d.ts +33 -0
  18. package/console/dist/server/routes/intent-decisions.js +499 -0
  19. package/console/dist/server/routes/intent.d.ts +3 -0
  20. package/console/dist/server/routes/intent.js +35 -0
  21. package/console/dist/server/routes/principles.js +67 -1
  22. package/console/dist/server/routes/update.d.ts +0 -1
  23. package/console/dist/server/routes/update.js +14 -11
  24. package/console/dist/ui/App.js +2 -7
  25. package/console/dist/ui/api.d.ts +44 -18
  26. package/console/dist/ui/api.js +44 -5
  27. package/console/dist/ui/components/layout/app-sidebar.js +2 -1
  28. package/console/dist/ui/components/ui/badge.d.ts +1 -1
  29. package/console/dist/ui/components/ui/button.d.ts +1 -1
  30. package/console/dist/ui/components/ui/shiny-text.d.ts +28 -0
  31. package/console/dist/ui/components/ui/shiny-text.js +46 -0
  32. package/console/dist/ui/i18n/en.json +167 -3
  33. package/console/dist/ui/i18n/zh-CN.json +167 -3
  34. package/console/dist/ui/pages/activation/ActivationPage.js +2 -1
  35. package/console/dist/ui/pages/control-center/ControlCenterPage.js +28 -2
  36. package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.d.ts +28 -0
  37. package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.js +38 -0
  38. package/console/dist/ui/pages/debt/DebtPage.js +219 -2
  39. package/console/dist/ui/pages/focus/FocusPage.js +2 -1
  40. package/console/dist/ui/pages/intent/IntentPage.d.ts +1 -0
  41. package/console/dist/ui/pages/intent/IntentPage.js +147 -0
  42. package/console/dist/ui/pages/pain/PainPage.js +234 -4
  43. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +75 -0
  44. package/console/dist/ui/pages/pain/pain-card-helpers.js +78 -0
  45. package/console/dist/ui/pages/principles/PrinciplesPage.js +2 -1
  46. package/console/dist/ui/utils/validators.d.ts +163 -0
  47. package/console/dist/ui/utils/validators.js +433 -0
  48. package/console/dist/web/assets/app.css +138 -0
  49. package/console/dist/web/assets/app.js +3124 -1288
  50. package/console/package.json +3 -0
  51. package/core/dist/principle-tree-ledger.d.ts +55 -4
  52. package/core/dist/principle-tree-ledger.d.ts.map +1 -1
  53. package/core/dist/principle-tree-ledger.js +472 -13
  54. package/core/dist/principle-tree-ledger.js.map +1 -1
  55. package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js +58 -0
  56. package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js.map +1 -1
  57. package/core/dist/prompt-builder/empathy-keyword-matching.d.ts.map +1 -1
  58. package/core/dist/prompt-builder/empathy-keyword-matching.js +9 -6
  59. package/core/dist/prompt-builder/empathy-keyword-matching.js.map +1 -1
  60. package/core/dist/prompt-builder/size-guard.d.ts +1 -0
  61. package/core/dist/prompt-builder/size-guard.d.ts.map +1 -1
  62. package/core/dist/prompt-builder/size-guard.js +21 -0
  63. package/core/dist/prompt-builder/size-guard.js.map +1 -1
  64. package/core/dist/prompt-builder/types.d.ts +2 -0
  65. package/core/dist/prompt-builder/types.d.ts.map +1 -1
  66. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +118 -32
  67. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  68. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts +2 -0
  69. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts.map +1 -0
  70. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js +284 -0
  71. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js.map +1 -0
  72. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js +105 -0
  73. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js.map +1 -1
  74. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +7 -5
  75. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
  76. package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js +11 -0
  77. package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js.map +1 -1
  78. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +15 -2
  79. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
  80. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts +2 -0
  81. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts.map +1 -0
  82. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js +290 -0
  83. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js.map +1 -0
  84. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts +2 -0
  85. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts.map +1 -0
  86. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js +158 -0
  87. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js.map +1 -0
  88. package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js +15 -1
  89. package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js.map +1 -1
  90. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts +2 -0
  91. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts.map +1 -0
  92. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js +62 -0
  93. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js.map +1 -0
  94. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +12 -2
  95. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
  96. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts +2 -0
  97. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts.map +1 -0
  98. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js +56 -0
  99. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js.map +1 -0
  100. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +8 -0
  101. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
  102. package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js +20 -0
  103. package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js.map +1 -1
  104. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
  105. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +6 -0
  106. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
  107. package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
  108. package/core/dist/runtime-v2/activation/sqlite-approval-store.js +86 -32
  109. package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
  110. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +65 -1
  111. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js.map +1 -1
  112. package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts.map +1 -1
  113. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js +33 -11
  114. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js.map +1 -1
  115. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +134 -15
  116. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
  117. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts +18 -0
  118. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts.map +1 -0
  119. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js +251 -0
  120. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js.map +1 -0
  121. package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +73 -0
  122. package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -1
  123. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +98 -0
  124. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
  125. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js +131 -0
  126. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
  127. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +8 -0
  128. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -1
  129. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +66 -3
  130. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -1
  131. package/core/dist/runtime-v2/diagnostician-output.d.ts +23 -0
  132. package/core/dist/runtime-v2/diagnostician-output.d.ts.map +1 -1
  133. package/core/dist/runtime-v2/diagnostician-output.js +16 -0
  134. package/core/dist/runtime-v2/diagnostician-output.js.map +1 -1
  135. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +32 -0
  136. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
  137. package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
  138. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +1 -1
  139. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
  140. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +23 -0
  141. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  142. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts +2 -0
  143. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts.map +1 -0
  144. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js +30 -0
  145. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js.map +1 -0
  146. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  147. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +2 -0
  148. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  149. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.d.ts.map +1 -1
  150. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js +0 -9
  151. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js.map +1 -1
  152. package/core/dist/runtime-v2/index.d.ts +9 -4
  153. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  154. package/core/dist/runtime-v2/index.js +12 -3
  155. package/core/dist/runtime-v2/index.js.map +1 -1
  156. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts +2 -0
  157. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts.map +1 -0
  158. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js +185 -0
  159. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js.map +1 -0
  160. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts +2 -0
  161. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts.map +1 -0
  162. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js +91 -0
  163. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js.map +1 -0
  164. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts +2 -0
  165. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts.map +1 -0
  166. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js +168 -0
  167. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js.map +1 -0
  168. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts +2 -0
  169. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts.map +1 -0
  170. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js +121 -0
  171. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js.map +1 -0
  172. package/core/dist/runtime-v2/intent/index.d.ts +6 -0
  173. package/core/dist/runtime-v2/intent/index.d.ts.map +1 -0
  174. package/core/dist/runtime-v2/intent/index.js +6 -0
  175. package/core/dist/runtime-v2/intent/index.js.map +1 -0
  176. package/core/dist/runtime-v2/intent/intent-decision-record.d.ts +125 -0
  177. package/core/dist/runtime-v2/intent/intent-decision-record.d.ts.map +1 -0
  178. package/core/dist/runtime-v2/intent/intent-decision-record.js +21 -0
  179. package/core/dist/runtime-v2/intent/intent-decision-record.js.map +1 -0
  180. package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts +95 -0
  181. package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts.map +1 -0
  182. package/core/dist/runtime-v2/intent/intent-doc-reader-port.js +43 -0
  183. package/core/dist/runtime-v2/intent/intent-doc-reader-port.js.map +1 -0
  184. package/core/dist/runtime-v2/intent/intent-doc.d.ts +19 -0
  185. package/core/dist/runtime-v2/intent/intent-doc.d.ts.map +1 -0
  186. package/core/dist/runtime-v2/intent/intent-doc.js +70 -0
  187. package/core/dist/runtime-v2/intent/intent-doc.js.map +1 -0
  188. package/core/dist/runtime-v2/intent/intent-friction-block.d.ts +63 -0
  189. package/core/dist/runtime-v2/intent/intent-friction-block.d.ts.map +1 -0
  190. package/core/dist/runtime-v2/intent/intent-friction-block.js +129 -0
  191. package/core/dist/runtime-v2/intent/intent-friction-block.js.map +1 -0
  192. package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts +42 -0
  193. package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts.map +1 -0
  194. package/core/dist/runtime-v2/intent/intent-patch-proposal.js +81 -0
  195. package/core/dist/runtime-v2/intent/intent-patch-proposal.js.map +1 -0
  196. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts +54 -0
  197. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts.map +1 -0
  198. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js +219 -0
  199. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js.map +1 -0
  200. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts +2 -0
  201. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts.map +1 -0
  202. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js +360 -0
  203. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js.map +1 -0
  204. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts +2 -0
  205. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts.map +1 -0
  206. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js +333 -0
  207. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js.map +1 -0
  208. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts +2 -0
  209. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts.map +1 -0
  210. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js +113 -0
  211. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js.map +1 -0
  212. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +13 -0
  213. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -1
  214. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js +42 -0
  215. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -1
  216. package/core/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -1
  217. package/core/dist/runtime-v2/internalization/diag-router-runner.js +27 -0
  218. package/core/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -1
  219. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  220. package/core/dist/runtime-v2/pain-signal-observability.js +257 -56
  221. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  222. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +12 -0
  223. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  224. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +1 -1
  225. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  226. package/core/dist/runtime-v2/pain-to-principle-service.d.ts +6 -0
  227. package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  228. package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
  229. package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  230. package/core/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -1
  231. package/core/dist/runtime-v2/proven-channel-baseline.js +1 -1
  232. package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
  233. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts +2 -0
  234. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts.map +1 -0
  235. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js +55 -0
  236. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js.map +1 -0
  237. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.d.ts.map +1 -1
  238. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js +6 -0
  239. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js.map +1 -1
  240. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts +2 -0
  241. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts.map +1 -0
  242. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js +272 -0
  243. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js.map +1 -0
  244. package/core/dist/runtime-v2/store/intent/index.d.ts +6 -0
  245. package/core/dist/runtime-v2/store/intent/index.d.ts.map +1 -0
  246. package/core/dist/runtime-v2/store/intent/index.js +5 -0
  247. package/core/dist/runtime-v2/store/intent/index.js.map +1 -0
  248. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts +51 -0
  249. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts.map +1 -0
  250. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js +306 -0
  251. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js.map +1 -0
  252. package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js +14 -3
  253. package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js.map +1 -1
  254. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts +2 -0
  255. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts.map +1 -0
  256. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js +72 -0
  257. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js.map +1 -0
  258. package/core/dist/runtime-v2/store/sqlite-connection.d.ts +27 -0
  259. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  260. package/core/dist/runtime-v2/store/sqlite-connection.js +124 -12
  261. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  262. package/core/dist/runtime-v2/types/event-payload.d.ts +1 -20
  263. package/core/dist/runtime-v2/types/event-payload.d.ts.map +1 -1
  264. package/core/dist/runtime-v2/types/event-payload.js +0 -12
  265. package/core/dist/runtime-v2/types/event-payload.js.map +1 -1
  266. package/core/dist/runtime-v2/types/event-types.d.ts +5 -34
  267. package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  268. package/core/dist/runtime-v2/types/event-types.js +0 -19
  269. package/core/dist/runtime-v2/types/event-types.js.map +1 -1
  270. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts +63 -0
  271. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
  272. package/core/dist/runtime-v2/types/evidence-chain-contract.js +234 -9
  273. package/core/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
  274. package/core/dist/runtime-v2/types/index.d.ts +5 -5
  275. package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
  276. package/core/dist/runtime-v2/types/index.js +5 -3
  277. package/core/dist/runtime-v2/types/index.js.map +1 -1
  278. package/core/dist/runtime-v2/types/ledger-store.d.ts +30 -30
  279. package/core/dist/runtime-v2/types/ledger-store.d.ts.map +1 -1
  280. package/core/dist/runtime-v2/types/ledger-store.js +10 -5
  281. package/core/dist/runtime-v2/types/ledger-store.js.map +1 -1
  282. package/core/dist/workflow-funnel-loader.d.ts +2 -2
  283. package/core/dist/workflow-funnel-loader.d.ts.map +1 -1
  284. package/dist/installer.d.ts.map +1 -1
  285. package/dist/installer.js +16 -0
  286. package/dist/installer.js.map +1 -1
  287. package/package.json +1 -1
  288. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts +9 -0
  289. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts.map +1 -0
  290. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js +166 -0
  291. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js.map +1 -0
  292. package/pd-cli/dist/commands/intent.d.ts +59 -0
  293. package/pd-cli/dist/commands/intent.d.ts.map +1 -0
  294. package/pd-cli/dist/commands/intent.js +350 -0
  295. package/pd-cli/dist/commands/intent.js.map +1 -0
  296. package/pd-cli/dist/commands/runtime-init.d.ts +43 -0
  297. package/pd-cli/dist/commands/runtime-init.d.ts.map +1 -0
  298. package/pd-cli/dist/commands/runtime-init.js +264 -0
  299. package/pd-cli/dist/commands/runtime-init.js.map +1 -0
  300. package/pd-cli/dist/index.js +25 -0
  301. package/pd-cli/dist/index.js.map +1 -1
  302. package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
  303. package/pd-cli/dist/services/demo-story-a-runner.js +6 -0
  304. package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
  305. package/pd-cli/package.json +1 -0
  306. package/plugin/dist/commands/pain.js +2 -0
  307. package/plugin/dist/core/control-ui-db.d.ts +11 -0
  308. package/plugin/dist/core/control-ui-db.js +40 -16
  309. package/plugin/dist/core/event-log.js +0 -5
  310. package/plugin/dist/core/intent-doc-reader-adapter.d.ts +28 -0
  311. package/plugin/dist/core/intent-doc-reader-adapter.js +56 -0
  312. package/plugin/dist/core/intent-doc-reader.d.ts +80 -0
  313. package/plugin/dist/core/intent-doc-reader.js +189 -0
  314. package/plugin/dist/core/principle-tree-ledger.d.ts +27 -79
  315. package/plugin/dist/core/principle-tree-ledger.js +39 -524
  316. package/plugin/dist/core/reflection/reflection-context.d.ts +2 -2
  317. package/plugin/dist/core/trajectory.d.ts +16 -0
  318. package/plugin/dist/core/trajectory.js +332 -254
  319. package/plugin/dist/core/workspace-context.d.ts +2 -3
  320. package/plugin/dist/hooks/pain.js +5 -0
  321. package/plugin/dist/hooks/prompt-helpers.d.ts +19 -1
  322. package/plugin/dist/hooks/prompt-helpers.js +39 -2
  323. package/plugin/dist/hooks/prompt-types.d.ts +8 -0
  324. package/plugin/dist/hooks/prompt.js +80 -21
  325. package/plugin/dist/index.d.ts +3 -1
  326. package/plugin/dist/index.js +9 -5
  327. package/plugin/dist/service/runtime-summary-service.js +1 -1
  328. package/plugin/dist/service/subagent-workflow/workflow-store.d.ts +14 -0
  329. package/plugin/dist/service/subagent-workflow/workflow-store.js +91 -2
  330. package/plugin/dist/types/event-types.d.ts +1 -1
  331. package/plugin/package.json +6 -3
  332. package/plugin/scripts/acceptance-test.mjs +3 -3
  333. package/plugin/dist/core/principle-tree-ledger-adapter.d.ts +0 -32
  334. package/plugin/dist/core/principle-tree-ledger-adapter.js +0 -125
  335. package/plugin/dist/service/central-database.d.ts +0 -138
  336. package/plugin/dist/service/central-database.js +0 -731
  337. package/plugin/dist/service/central-sync-service.d.ts +0 -8
  338. package/plugin/dist/service/central-sync-service.js +0 -71
  339. package/plugin/scripts/validate-live-path.ts +0 -462
@@ -0,0 +1,18 @@
1
+ import { type IntentDocWarning } from '@principles/core/runtime-v2';
2
+ export interface IntentPageResult {
3
+ ok: boolean;
4
+ found: boolean;
5
+ flagEnabled: boolean;
6
+ warnings: IntentDocWarning[];
7
+ path?: string;
8
+ contentHash?: string;
9
+ lastEditedAt?: string;
10
+ sections?: Record<string, string>;
11
+ reason?: string;
12
+ nextAction?: string;
13
+ }
14
+ export declare class IntentPageModel {
15
+ private readonly workspaceDir;
16
+ constructor(workspaceDir: string);
17
+ getSummary(flagEnabled: boolean): Promise<IntentPageResult>;
18
+ }
@@ -0,0 +1,90 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { INTENT_MAX_BYTES, parseIntentDocSections, computeIntentContentHash, validateIntentDocSections, } from '@principles/core/runtime-v2';
4
+ const INTENT_FILENAME = 'INTENT.md';
5
+ const INTENT_DIR = '.principles';
6
+ export class IntentPageModel {
7
+ workspaceDir;
8
+ constructor(workspaceDir) {
9
+ this.workspaceDir = workspaceDir;
10
+ }
11
+ async getSummary(flagEnabled) {
12
+ if (!flagEnabled) {
13
+ return {
14
+ ok: false,
15
+ found: false,
16
+ flagEnabled: false,
17
+ warnings: [],
18
+ reason: 'flag_disabled',
19
+ nextAction: 'Enable the intent_engineering feature flag in .pd/config.yaml to read INTENT.md.',
20
+ };
21
+ }
22
+ const filePath = path.join(this.workspaceDir, INTENT_DIR, INTENT_FILENAME);
23
+ try {
24
+ if (!fs.existsSync(filePath)) {
25
+ return {
26
+ ok: false,
27
+ found: false,
28
+ flagEnabled: true,
29
+ warnings: [],
30
+ reason: 'not_found',
31
+ nextAction: 'Create .principles/INTENT.md using "pd intent init".',
32
+ };
33
+ }
34
+ const stat = fs.statSync(filePath);
35
+ if (stat.size > INTENT_MAX_BYTES) {
36
+ return {
37
+ ok: false,
38
+ found: true,
39
+ flagEnabled: true,
40
+ warnings: [],
41
+ reason: 'oversized',
42
+ nextAction: `INTENT.md exceeds ${INTENT_MAX_BYTES} bytes (${stat.size} bytes). Reduce content.`,
43
+ };
44
+ }
45
+ const raw = fs.readFileSync(filePath, 'utf8');
46
+ const sections = parseIntentDocSections(raw);
47
+ const warnings = validateIntentDocSections(sections);
48
+ const contentHash = computeIntentContentHash(raw);
49
+ const sectionRecord = {};
50
+ if (sections.why !== undefined) {
51
+ sectionRecord.why = sections.why;
52
+ }
53
+ if (sections.desiredOutcome !== undefined) {
54
+ sectionRecord.desiredOutcome = sections.desiredOutcome;
55
+ }
56
+ if (sections.nonNegotiables !== undefined) {
57
+ sectionRecord.nonNegotiables = sections.nonNegotiables;
58
+ }
59
+ if (sections.stopEscalation !== undefined) {
60
+ sectionRecord.stopEscalation = sections.stopEscalation;
61
+ }
62
+ if (sections.currentStrategicFocus !== undefined) {
63
+ sectionRecord.currentStrategicFocus = sections.currentStrategicFocus;
64
+ }
65
+ return {
66
+ ok: true,
67
+ found: true,
68
+ flagEnabled: true,
69
+ warnings,
70
+ path: filePath,
71
+ contentHash,
72
+ lastEditedAt: stat.mtime.toISOString(),
73
+ sections: sectionRecord,
74
+ };
75
+ }
76
+ catch (err) {
77
+ // Runtime Contract Rule #9: log underlying error for observability
78
+ // while preserving the never-throws contract.
79
+ console.error('[IntentPageModel] failed to read INTENT.md:', err);
80
+ return {
81
+ ok: false,
82
+ found: false,
83
+ flagEnabled: true,
84
+ warnings: [],
85
+ reason: 'read_error',
86
+ nextAction: 'Check filesystem permissions for .principles/INTENT.md.',
87
+ };
88
+ }
89
+ }
90
+ }
@@ -77,4 +77,6 @@ export declare class PrinciplesConsoleModel {
77
77
  private loadLedger;
78
78
  listPrinciples(filter?: PrincipleFilter, decidedPrincipleIds?: Set<string>): Promise<PrinciplesListOutput>;
79
79
  getPrincipleDetail(principleId: string): Promise<PrincipleDetailOutput | null>;
80
+ archivePrinciple(principleId: string): Promise<boolean>;
81
+ unarchivePrinciple(principleId: string): Promise<boolean>;
80
82
  }
@@ -1,6 +1,7 @@
1
1
  import * as path from 'path';
2
2
  import * as fs from 'fs';
3
3
  import { classifyPrinciples, filterOwnerActionable } from './PrincipleClassifier.js';
4
+ import { updatePrinciple } from '@principles/core/principle-tree-ledger';
4
5
  const VALID_STATUSES = ['candidate', 'active', 'archived', 'deprecated', 'probation'];
5
6
  const VALID_PRIORITIES = ['P0', 'P1', 'P2'];
6
7
  const VALID_SCOPES = ['general', 'domain'];
@@ -92,7 +93,8 @@ function readLedgerFromFile(filePath) {
92
93
  tree: parseTree(treeRaw),
93
94
  };
94
95
  }
95
- catch {
96
+ catch (e) {
97
+ console.warn('PrinciplesConsoleModel: failed to parse principle_training_state.json, returning empty tree:', e);
96
98
  return { trainingStore: {}, tree: createEmptyTree() };
97
99
  }
98
100
  }
@@ -244,4 +246,38 @@ export class PrinciplesConsoleModel {
244
246
  };
245
247
  return { principle };
246
248
  }
249
+ async archivePrinciple(principleId) {
250
+ try {
251
+ const stateDir = path.join(this.workspaceDir, '.state');
252
+ updatePrinciple(stateDir, principleId, {
253
+ status: 'archived',
254
+ updatedAt: new Date().toISOString(),
255
+ });
256
+ // Clear cache to force reload
257
+ this.cachedLedger = null;
258
+ this.cacheTimestamp = 0;
259
+ return true;
260
+ }
261
+ catch (e) {
262
+ console.error(`Failed to archive principle ${principleId}:`, e);
263
+ return false;
264
+ }
265
+ }
266
+ async unarchivePrinciple(principleId) {
267
+ try {
268
+ const stateDir = path.join(this.workspaceDir, '.state');
269
+ updatePrinciple(stateDir, principleId, {
270
+ status: 'active',
271
+ updatedAt: new Date().toISOString(),
272
+ });
273
+ // Clear cache to force reload
274
+ this.cachedLedger = null;
275
+ this.cacheTimestamp = 0;
276
+ return true;
277
+ }
278
+ catch (e) {
279
+ console.error(`Failed to unarchive principle ${principleId}:`, e);
280
+ return false;
281
+ }
282
+ }
247
283
  }
@@ -1,35 +1,7 @@
1
1
  import type { WorkspaceConfigStore } from '../config/WorkspaceConfigStore.js';
2
2
  import type { SyncResult } from '../types/index.js';
3
- export interface CentralOverviewOutput {
4
- generatedAt: string;
5
- workspaceCount: number;
6
- workspaces: {
7
- name: string;
8
- path: string;
9
- status: 'healthy' | 'degraded' | 'error';
10
- gfi: number;
11
- principleCount: number;
12
- }[];
13
- }
14
- export interface CentralHealthOutput {
15
- generatedAt: string;
16
- overallStatus: 'healthy' | 'degraded' | 'error';
17
- workspaces: {
18
- name: string;
19
- status: 'healthy' | 'degraded' | 'error';
20
- gfi: number;
21
- activePrinciples: number;
22
- pendingTasks: number;
23
- }[];
24
- }
25
3
  export declare class WorkspaceService {
26
4
  private readonly configStore;
27
- private readonly models;
28
5
  constructor(configStore: WorkspaceConfigStore);
29
- getCentralOverview(): Promise<CentralOverviewOutput>;
30
- getCentralHealth(): Promise<CentralHealthOutput>;
31
6
  syncWorkspace(name: string): Promise<SyncResult>;
32
- dispose(): void;
33
- private disposeWorkspace;
34
- private getModels;
35
7
  }
@@ -1,97 +1,13 @@
1
- import { OperatorHealthReadModel, PainChainReadModel, PruningReadModel, RuntimeStateManager, } from '@principles/core/runtime-v2';
2
- const noop = () => { };
3
1
  export class WorkspaceService {
4
2
  configStore;
5
- models = new Map();
6
3
  constructor(configStore) {
7
4
  this.configStore = configStore;
8
5
  }
9
- async getCentralOverview() {
10
- const workspaces = this.configStore.getWorkspaces().filter(w => w.config?.enabled !== false);
11
- const results = [];
12
- for (const ws of workspaces) {
13
- try {
14
- const models = this.getModels(ws);
15
- const [snapshot, pruningSummary] = await Promise.all([
16
- models.operatorHealth.getSnapshot(),
17
- Promise.resolve(models.pruning.getHealthSummary()),
18
- ]);
19
- const { byStatus } = pruningSummary;
20
- results.push({
21
- name: ws.name,
22
- path: ws.path,
23
- status: snapshot.overallStatus === 'healthy' ? 'healthy' : snapshot.overallStatus === 'degraded' ? 'degraded' : 'error',
24
- gfi: snapshot.gfi.active?.currentGfi ?? 0,
25
- principleCount: (byStatus.active ?? 0) + (byStatus.candidate ?? 0),
26
- });
27
- }
28
- catch {
29
- results.push({
30
- name: ws.name,
31
- path: ws.path,
32
- status: 'error',
33
- gfi: -1,
34
- principleCount: 0,
35
- });
36
- }
37
- }
38
- return {
39
- generatedAt: new Date().toISOString(),
40
- workspaceCount: workspaces.length,
41
- workspaces: results,
42
- };
43
- }
44
- async getCentralHealth() {
45
- const workspaces = this.configStore.getWorkspaces().filter(w => w.config?.enabled !== false);
46
- const results = [];
47
- let overallStatus = 'healthy';
48
- for (const ws of workspaces) {
49
- try {
50
- const models = this.getModels(ws);
51
- const [snapshot, pruningSummary, pendingTasks] = await Promise.all([
52
- models.operatorHealth.getSnapshot(),
53
- Promise.resolve(models.pruning.getHealthSummary()),
54
- models.runtime.listTasks({ status: 'pending', limit: 100 }),
55
- ]);
56
- const { byStatus } = pruningSummary;
57
- const wsStatus = snapshot.overallStatus === 'healthy' ? 'healthy' : snapshot.overallStatus === 'degraded' ? 'degraded' : 'error';
58
- if (wsStatus === 'error') {
59
- overallStatus = 'error';
60
- }
61
- else if (wsStatus !== 'healthy' && overallStatus === 'healthy') {
62
- overallStatus = 'degraded';
63
- }
64
- results.push({
65
- name: ws.name,
66
- status: wsStatus,
67
- gfi: snapshot.gfi.active?.currentGfi ?? 0,
68
- activePrinciples: (byStatus.active ?? 0) + (byStatus.candidate ?? 0),
69
- pendingTasks: pendingTasks.length,
70
- });
71
- }
72
- catch {
73
- overallStatus = 'error';
74
- results.push({
75
- name: ws.name,
76
- status: 'error',
77
- gfi: -1,
78
- activePrinciples: 0,
79
- pendingTasks: 0,
80
- });
81
- }
82
- }
83
- return {
84
- generatedAt: new Date().toISOString(),
85
- overallStatus,
86
- workspaces: results,
87
- };
88
- }
89
6
  async syncWorkspace(name) {
90
7
  const entry = this.configStore.getWorkspace(name);
91
8
  if (!entry) {
92
9
  throw new Error(`Workspace "${name}" not found`);
93
10
  }
94
- this.disposeWorkspace(name);
95
11
  this.configStore.updateSyncTime(name);
96
12
  return {
97
13
  success: true,
@@ -99,35 +15,4 @@ export class WorkspaceService {
99
15
  items: {},
100
16
  };
101
17
  }
102
- dispose() {
103
- for (const name of this.models.keys()) {
104
- this.disposeWorkspace(name);
105
- }
106
- this.models.clear();
107
- }
108
- disposeWorkspace(name) {
109
- const existing = this.models.get(name);
110
- if (existing) {
111
- existing.operatorHealth.close().catch(noop);
112
- existing.painChain.close().catch(noop);
113
- existing.runtime.close().catch(noop);
114
- this.models.delete(name);
115
- }
116
- }
117
- getModels(entry) {
118
- let existing = this.models.get(entry.name);
119
- if (!existing) {
120
- const runtime = new RuntimeStateManager({ workspaceDir: entry.path });
121
- const painChain = new PainChainReadModel({ workspaceDir: entry.path, stateManager: runtime });
122
- const pruning = new PruningReadModel({ workspaceDir: entry.path });
123
- const operatorHealth = new OperatorHealthReadModel({
124
- workspaceDir: entry.path,
125
- painChainReadModel: painChain,
126
- pruningReadModel: pruning,
127
- });
128
- existing = { operatorHealth, painChain, pruning, runtime };
129
- this.models.set(entry.name, existing);
130
- }
131
- return existing;
132
- }
133
18
  }
@@ -21,7 +21,7 @@
21
21
  * - ERR-045: ANY-segment redaction for sensitive keys
22
22
  */
23
23
  import { sendSuccess, sendError, sendNotFound, sendMethodNotAllowed, sendBadRequest } from '../utils/response.js';
24
- import { getConfigSummary, getConfigCatalog, updateAgentBinding, updateDefaultRuntime, checkReadiness, getPrinciplesOutputLanguage, updatePrinciplesOutputLanguage, } from '../config/pd-config-store.js';
24
+ import { getConfigSummary, getConfigCatalog, updateAgentBinding, updateDefaultRuntime, checkReadiness, getPrinciplesOutputLanguage, updatePrinciplesOutputLanguage, updateFeatureFlag, } from '../config/pd-config-store.js';
25
25
  // ── Constants ────────────────────────────────────────────────────────────────
26
26
  const MAX_BODY_SIZE = 1024 * 64; // 64 KB — generous for config binding updates
27
27
  // ── Request Body Reader ──────────────────────────────────────────────────────
@@ -49,6 +49,10 @@ function safeParseBody(text) {
49
49
  return null;
50
50
  }
51
51
  }
52
+ /** Type guard: is `value` a plain Record<string, unknown>? (ERR-001) */
53
+ function isObject(value) {
54
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
55
+ }
52
56
  // ── Route Handler ────────────────────────────────────────────────────────────
53
57
  export async function handleConfigRoute(req, res, ctx) {
54
58
  const { workspaceDir, subPath } = ctx;
@@ -170,6 +174,56 @@ export async function handleConfigRoute(req, res, ctx) {
170
174
  });
171
175
  return;
172
176
  }
177
+ // PATCH /features/:featureName — spec 2026-06-27 §13.4
178
+ // Toggles a registered feature flag's `enabled` field in .pd/config.yaml.
179
+ const featureFlagMatch = /^\/features\/([^/]+)$/.exec(subPath);
180
+ if (featureFlagMatch) {
181
+ if (method !== 'PATCH') {
182
+ sendMethodNotAllowed(res);
183
+ return;
184
+ }
185
+ let featureName;
186
+ try {
187
+ featureName = decodeURIComponent(featureFlagMatch[1] ?? '');
188
+ }
189
+ catch {
190
+ sendBadRequest(res, 'Invalid feature name encoding');
191
+ return;
192
+ }
193
+ let bodyText;
194
+ try {
195
+ bodyText = await readBody(req);
196
+ }
197
+ catch {
198
+ sendBadRequest(res, 'Request body exceeds maximum allowed size');
199
+ return;
200
+ }
201
+ const body = safeParseBody(bodyText);
202
+ if (body === null) {
203
+ sendBadRequest(res, 'Invalid JSON body');
204
+ return;
205
+ }
206
+ // Validate body shape: { enabled: boolean } (ERR-001: no `as` bypass)
207
+ if (!isObject(body)) {
208
+ sendBadRequest(res, 'Body must be a JSON object with an enabled field');
209
+ return;
210
+ }
211
+ if (!Object.hasOwn(body, 'enabled')) {
212
+ sendBadRequest(res, 'Missing required field: enabled');
213
+ return;
214
+ }
215
+ if (typeof body.enabled !== 'boolean') {
216
+ sendBadRequest(res, 'enabled must be a boolean');
217
+ return;
218
+ }
219
+ const result = updateFeatureFlag(workspaceDir, featureName, body.enabled);
220
+ if (!result.ok) {
221
+ sendError(res, result.statusCode, result.error, result.message);
222
+ return;
223
+ }
224
+ sendSuccess(res, { feature: result.feature, enabled: result.enabled });
225
+ return;
226
+ }
173
227
  // GET/PATCH /principles/output-language — PRI-332 P1-1
174
228
  if (subPath === '/principles/output-language') {
175
229
  if (method === 'GET') {
@@ -0,0 +1,33 @@
1
+ /**
2
+ * IntentDecisions route — HTTP surface for IntentDecisionRecord (PRI-470, SPEC §21.7).
3
+ *
4
+ * Endpoints (all gated by the `intent_engineering` feature flag):
5
+ * - POST /api/v1/intent-decisions → create (201) or idempotent replay (200)
6
+ * - GET /api/v1/intent-decisions?painId=… → list by painId
7
+ * - GET /api/v1/intent-decisions?taskId=… → list by taskId
8
+ * - GET /api/v1/intent-decisions/summary → tallied summary (MUST precede /:id)
9
+ * - GET /api/v1/intent-decisions/:id → single record
10
+ * - POST /api/v1/intent-decisions/:id/follow-up → dispatch governed follow-up (PRI-471)
11
+ *
12
+ * PRI-471 follow-up types (SPEC §22.1.4):
13
+ * - link_candidate — record which existing principle candidate the Owner
14
+ * chose to link. Does NOT create a candidate.
15
+ * - guide_rulehost — returns the CLI guidance for promoting to RuleHost.
16
+ * Does NOT create a rule or approval directly.
17
+ * - generate_patch_proposal — generates a read-only Intent Patch Proposal and
18
+ * records its id on the decision. Does NOT modify
19
+ * `.principles/INTENT.md`.
20
+ *
21
+ * Runtime Contract rules applied:
22
+ * - Rule 1: parsed JSON body treated as `unknown` (ERR-001)
23
+ * - Rule 2: enum fields validated via core type guards, never `as` (ERR-001/ERR-005)
24
+ * - Rule 3: required fields fail loud → 400 with reason (ERR-009/ERR-010)
25
+ * - Rule 5: `Object.hasOwn()` for untrusted object keys (ERR-013)
26
+ * - Rule 9: every degraded path carries reason + nextAction (ERR-002)
27
+ */
28
+ import type { IncomingMessage, ServerResponse } from 'node:http';
29
+ export declare function handleIntentDecisionsRoute(req: IncomingMessage, res: ServerResponse, workspaceDir: string, subPath: string): Promise<void>;
30
+ /**
31
+ * Dispose hook for graceful shutdown — clears the per-workspace model cache.
32
+ */
33
+ export declare function disposeIntentDecisionModels(): void;