create-principles-disciple 1.94.0 → 1.96.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 (530) 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 +196 -0
  4. package/console/dist/server/index.js +19 -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 +52 -0
  11. package/console/dist/server/models/IntentPageModel.js +292 -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 +7 -0
  20. package/console/dist/server/routes/intent.js +223 -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/types.d.ts +1 -0
  25. package/console/dist/ui/App.js +2 -60
  26. package/console/dist/ui/api.d.ts +58 -18
  27. package/console/dist/ui/api.js +78 -6
  28. package/console/dist/ui/components/layout/app-sidebar.js +13 -12
  29. package/console/dist/ui/components/ui/badge.d.ts +1 -1
  30. package/console/dist/ui/components/ui/button.d.ts +1 -1
  31. package/console/dist/ui/components/ui/shiny-text.d.ts +28 -0
  32. package/console/dist/ui/components/ui/shiny-text.js +46 -0
  33. package/console/dist/ui/i18n/en.json +306 -3
  34. package/console/dist/ui/i18n/zh-CN.json +306 -3
  35. package/console/dist/ui/pages/activation/ActivationPage.js +2 -1
  36. package/console/dist/ui/pages/control-center/AgentCard.d.ts +31 -0
  37. package/console/dist/ui/pages/control-center/AgentCard.js +156 -0
  38. package/console/dist/ui/pages/control-center/AgentGroup.d.ts +26 -0
  39. package/console/dist/ui/pages/control-center/AgentGroup.js +38 -0
  40. package/console/dist/ui/pages/control-center/ControlCenterPage.js +103 -41
  41. package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.d.ts +28 -0
  42. package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.js +38 -0
  43. package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +17 -0
  44. package/console/dist/ui/pages/control-center/WorkflowDiagram.js +55 -0
  45. package/console/dist/ui/pages/debt/DebtPage.js +219 -2
  46. package/console/dist/ui/pages/focus/FocusPage.js +2 -1
  47. package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +67 -0
  48. package/console/dist/ui/pages/intent/IntentOnboarding.js +289 -0
  49. package/console/dist/ui/pages/intent/IntentPage.d.ts +1 -0
  50. package/console/dist/ui/pages/intent/IntentPage.js +258 -0
  51. package/console/dist/ui/pages/pain/PainPage.js +234 -4
  52. package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +75 -0
  53. package/console/dist/ui/pages/pain/pain-card-helpers.js +78 -0
  54. package/console/dist/ui/pages/principles/PrinciplesPage.js +2 -1
  55. package/console/dist/ui/utils/agent-metadata.d.ts +58 -0
  56. package/console/dist/ui/utils/agent-metadata.js +275 -0
  57. package/console/dist/ui/utils/control-center-helpers.d.ts +19 -0
  58. package/console/dist/ui/utils/control-center-helpers.js +37 -0
  59. package/console/dist/ui/utils/validators.d.ts +200 -0
  60. package/console/dist/ui/utils/validators.js +563 -0
  61. package/console/dist/web/assets/app.css +498 -3
  62. package/console/dist/web/assets/app.js +5063 -1418
  63. package/console/package.json +3 -0
  64. package/core/dist/principle-tree-ledger.d.ts +55 -4
  65. package/core/dist/principle-tree-ledger.d.ts.map +1 -1
  66. package/core/dist/principle-tree-ledger.js +472 -13
  67. package/core/dist/principle-tree-ledger.js.map +1 -1
  68. package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js +58 -0
  69. package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js.map +1 -1
  70. package/core/dist/prompt-builder/empathy-keyword-matching.d.ts.map +1 -1
  71. package/core/dist/prompt-builder/empathy-keyword-matching.js +9 -6
  72. package/core/dist/prompt-builder/empathy-keyword-matching.js.map +1 -1
  73. package/core/dist/prompt-builder/size-guard.d.ts +1 -0
  74. package/core/dist/prompt-builder/size-guard.d.ts.map +1 -1
  75. package/core/dist/prompt-builder/size-guard.js +21 -0
  76. package/core/dist/prompt-builder/size-guard.js.map +1 -1
  77. package/core/dist/prompt-builder/types.d.ts +2 -0
  78. package/core/dist/prompt-builder/types.d.ts.map +1 -1
  79. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +143 -65
  80. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  81. package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +85 -7
  82. package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -1
  83. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts +2 -0
  84. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts.map +1 -0
  85. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js +284 -0
  86. package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js.map +1 -0
  87. package/core/dist/runtime-v2/__tests__/golden-trace-replay-validator.test.js +70 -0
  88. package/core/dist/runtime-v2/__tests__/golden-trace-replay-validator.test.js.map +1 -1
  89. package/core/dist/runtime-v2/__tests__/golden-trace.test.js +136 -1
  90. package/core/dist/runtime-v2/__tests__/golden-trace.test.js.map +1 -1
  91. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js +105 -0
  92. package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js.map +1 -1
  93. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +7 -5
  94. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
  95. package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js +11 -0
  96. package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js.map +1 -1
  97. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +15 -2
  98. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
  99. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts +2 -0
  100. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts.map +1 -0
  101. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js +290 -0
  102. package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js.map +1 -0
  103. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts +2 -0
  104. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts.map +1 -0
  105. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js +158 -0
  106. package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js.map +1 -0
  107. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.d.ts +2 -0
  108. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.d.ts.map +1 -0
  109. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.js +211 -0
  110. package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.js.map +1 -0
  111. package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js +15 -1
  112. package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js.map +1 -1
  113. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts +2 -0
  114. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts.map +1 -0
  115. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js +62 -0
  116. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js.map +1 -0
  117. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +12 -2
  118. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
  119. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts +2 -0
  120. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts.map +1 -0
  121. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js +56 -0
  122. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js.map +1 -0
  123. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +8 -0
  124. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
  125. package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js +20 -0
  126. package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js.map +1 -1
  127. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
  128. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +6 -0
  129. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
  130. package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
  131. package/core/dist/runtime-v2/activation/sqlite-approval-store.js +86 -32
  132. package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
  133. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +158 -1
  134. package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js.map +1 -1
  135. package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts +11 -0
  136. package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts.map +1 -1
  137. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js +55 -11
  138. package/core/dist/runtime-v2/activation/writers/rule-host-writer.js.map +1 -1
  139. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +134 -15
  140. package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
  141. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts +18 -0
  142. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts.map +1 -0
  143. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js +251 -0
  144. package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js.map +1 -0
  145. package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +73 -0
  146. package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -1
  147. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +98 -0
  148. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
  149. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js +131 -0
  150. package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
  151. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +8 -0
  152. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -1
  153. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +66 -3
  154. package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -1
  155. package/core/dist/runtime-v2/diagnostician-output.d.ts +23 -0
  156. package/core/dist/runtime-v2/diagnostician-output.d.ts.map +1 -1
  157. package/core/dist/runtime-v2/diagnostician-output.js +16 -0
  158. package/core/dist/runtime-v2/diagnostician-output.js.map +1 -1
  159. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +32 -0
  160. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
  161. package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
  162. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +1 -1
  163. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
  164. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +23 -0
  165. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  166. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts +2 -0
  167. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts.map +1 -0
  168. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js +30 -0
  169. package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js.map +1 -0
  170. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.d.ts +2 -0
  171. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.d.ts.map +1 -0
  172. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.js +74 -0
  173. package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.js.map +1 -0
  174. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.d.ts +2 -0
  175. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.d.ts.map +1 -0
  176. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.js +246 -0
  177. package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.js.map +1 -0
  178. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  179. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +9 -0
  180. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  181. package/core/dist/runtime-v2/feature-flags/index.d.ts +2 -0
  182. package/core/dist/runtime-v2/feature-flags/index.d.ts.map +1 -1
  183. package/core/dist/runtime-v2/feature-flags/index.js +2 -0
  184. package/core/dist/runtime-v2/feature-flags/index.js.map +1 -1
  185. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.d.ts.map +1 -1
  186. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js +0 -9
  187. package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js.map +1 -1
  188. package/{plugin/dist/core/surface-guard.d.ts → core/dist/runtime-v2/feature-flags/surface-guard-policy.d.ts} +15 -5
  189. package/core/dist/runtime-v2/feature-flags/surface-guard-policy.d.ts.map +1 -0
  190. package/{plugin/dist/core/surface-guard.js → core/dist/runtime-v2/feature-flags/surface-guard-policy.js} +14 -2
  191. package/core/dist/runtime-v2/feature-flags/surface-guard-policy.js.map +1 -0
  192. package/core/dist/runtime-v2/golden-trace-replay-validator.js +1 -1
  193. package/core/dist/runtime-v2/golden-trace-replay-validator.js.map +1 -1
  194. package/core/dist/runtime-v2/golden-trace.d.ts +19 -3
  195. package/core/dist/runtime-v2/golden-trace.d.ts.map +1 -1
  196. package/core/dist/runtime-v2/golden-trace.js +2 -0
  197. package/core/dist/runtime-v2/golden-trace.js.map +1 -1
  198. package/core/dist/runtime-v2/index.d.ts +21 -4
  199. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  200. package/core/dist/runtime-v2/index.js +21 -3
  201. package/core/dist/runtime-v2/index.js.map +1 -1
  202. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts +2 -0
  203. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts.map +1 -0
  204. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js +185 -0
  205. package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js.map +1 -0
  206. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.d.ts +2 -0
  207. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.d.ts.map +1 -0
  208. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.js +88 -0
  209. package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.js.map +1 -0
  210. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts +2 -0
  211. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts.map +1 -0
  212. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js +181 -0
  213. package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js.map +1 -0
  214. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts +2 -0
  215. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts.map +1 -0
  216. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js +168 -0
  217. package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js.map +1 -0
  218. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts +2 -0
  219. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts.map +1 -0
  220. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js +121 -0
  221. package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js.map +1 -0
  222. package/core/dist/runtime-v2/intent/index.d.ts +8 -0
  223. package/core/dist/runtime-v2/intent/index.d.ts.map +1 -0
  224. package/core/dist/runtime-v2/intent/index.js +8 -0
  225. package/core/dist/runtime-v2/intent/index.js.map +1 -0
  226. package/core/dist/runtime-v2/intent/intent-browser.d.ts +23 -0
  227. package/core/dist/runtime-v2/intent/intent-browser.d.ts.map +1 -0
  228. package/core/dist/runtime-v2/intent/intent-browser.js +21 -0
  229. package/core/dist/runtime-v2/intent/intent-browser.js.map +1 -0
  230. package/core/dist/runtime-v2/intent/intent-decision-record.d.ts +125 -0
  231. package/core/dist/runtime-v2/intent/intent-decision-record.d.ts.map +1 -0
  232. package/core/dist/runtime-v2/intent/intent-decision-record.js +21 -0
  233. package/core/dist/runtime-v2/intent/intent-decision-record.js.map +1 -0
  234. package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts +95 -0
  235. package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts.map +1 -0
  236. package/core/dist/runtime-v2/intent/intent-doc-reader-port.js +43 -0
  237. package/core/dist/runtime-v2/intent/intent-doc-reader-port.js.map +1 -0
  238. package/core/dist/runtime-v2/intent/intent-doc-version.d.ts +28 -0
  239. package/core/dist/runtime-v2/intent/intent-doc-version.d.ts.map +1 -0
  240. package/core/dist/runtime-v2/intent/intent-doc-version.js +21 -0
  241. package/core/dist/runtime-v2/intent/intent-doc-version.js.map +1 -0
  242. package/core/dist/runtime-v2/intent/intent-doc.d.ts +35 -0
  243. package/core/dist/runtime-v2/intent/intent-doc.d.ts.map +1 -0
  244. package/core/dist/runtime-v2/intent/intent-doc.js +158 -0
  245. package/core/dist/runtime-v2/intent/intent-doc.js.map +1 -0
  246. package/core/dist/runtime-v2/intent/intent-friction-block.d.ts +63 -0
  247. package/core/dist/runtime-v2/intent/intent-friction-block.d.ts.map +1 -0
  248. package/core/dist/runtime-v2/intent/intent-friction-block.js +129 -0
  249. package/core/dist/runtime-v2/intent/intent-friction-block.js.map +1 -0
  250. package/core/dist/runtime-v2/intent/intent-hash.d.ts +2 -0
  251. package/core/dist/runtime-v2/intent/intent-hash.d.ts.map +1 -0
  252. package/core/dist/runtime-v2/intent/intent-hash.js +10 -0
  253. package/core/dist/runtime-v2/intent/intent-hash.js.map +1 -0
  254. package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts +42 -0
  255. package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts.map +1 -0
  256. package/core/dist/runtime-v2/intent/intent-patch-proposal.js +81 -0
  257. package/core/dist/runtime-v2/intent/intent-patch-proposal.js.map +1 -0
  258. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts +54 -0
  259. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts.map +1 -0
  260. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js +219 -0
  261. package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js.map +1 -0
  262. package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +41 -1
  263. package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
  264. package/core/dist/runtime-v2/internalization/__tests__/artificer-rule-output.test.js +130 -2
  265. package/core/dist/runtime-v2/internalization/__tests__/artificer-rule-output.test.js.map +1 -1
  266. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.d.ts +2 -0
  267. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.d.ts.map +1 -0
  268. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.js +228 -0
  269. package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.js.map +1 -0
  270. package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +41 -11
  271. package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
  272. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts +2 -0
  273. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts.map +1 -0
  274. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js +360 -0
  275. package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js.map +1 -0
  276. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts +2 -0
  277. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts.map +1 -0
  278. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js +333 -0
  279. package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js.map +1 -0
  280. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts +2 -0
  281. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts.map +1 -0
  282. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js +113 -0
  283. package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js.map +1 -0
  284. package/core/dist/runtime-v2/internalization/__tests__/refiner-sandbox-wrapper.test.js +135 -0
  285. package/core/dist/runtime-v2/internalization/__tests__/refiner-sandbox-wrapper.test.js.map +1 -1
  286. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.d.ts +2 -0
  287. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.d.ts.map +1 -0
  288. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.js +449 -0
  289. package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.js.map +1 -0
  290. package/core/dist/runtime-v2/internalization/adversarial-case.d.ts.map +1 -1
  291. package/core/dist/runtime-v2/internalization/adversarial-case.js +24 -0
  292. package/core/dist/runtime-v2/internalization/adversarial-case.js.map +1 -1
  293. package/core/dist/runtime-v2/internalization/artificer-output.d.ts +10 -0
  294. package/core/dist/runtime-v2/internalization/artificer-output.d.ts.map +1 -1
  295. package/core/dist/runtime-v2/internalization/artificer-output.js +45 -0
  296. package/core/dist/runtime-v2/internalization/artificer-output.js.map +1 -1
  297. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +2 -2
  298. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
  299. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js +7 -2
  300. package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
  301. package/core/dist/runtime-v2/internalization/behavior-example-pack.d.ts +66 -0
  302. package/core/dist/runtime-v2/internalization/behavior-example-pack.d.ts.map +1 -0
  303. package/core/dist/runtime-v2/internalization/behavior-example-pack.js +183 -0
  304. package/core/dist/runtime-v2/internalization/behavior-example-pack.js.map +1 -0
  305. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +13 -0
  306. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -1
  307. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js +42 -0
  308. package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -1
  309. package/core/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -1
  310. package/core/dist/runtime-v2/internalization/diag-router-runner.js +27 -0
  311. package/core/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -1
  312. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +8 -0
  313. package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
  314. package/core/dist/runtime-v2/internalization/evaluator-output.js +10 -0
  315. package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
  316. package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts +17 -0
  317. package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
  318. package/core/dist/runtime-v2/internalization/evaluator-runner.js +118 -24
  319. package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
  320. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts.map +1 -1
  321. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js +1 -1
  322. package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js.map +1 -1
  323. package/core/dist/runtime-v2/internalization/rule-context-v2.d.ts +61 -0
  324. package/core/dist/runtime-v2/internalization/rule-context-v2.d.ts.map +1 -0
  325. package/core/dist/runtime-v2/internalization/rule-context-v2.js +301 -0
  326. package/core/dist/runtime-v2/internalization/rule-context-v2.js.map +1 -0
  327. package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts +9 -0
  328. package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts.map +1 -1
  329. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.d.ts +55 -0
  330. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.d.ts.map +1 -0
  331. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.js +131 -0
  332. package/core/dist/runtime-v2/internalization/v2-adversarial-cases.js.map +1 -0
  333. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  334. package/core/dist/runtime-v2/pain-signal-observability.js +280 -56
  335. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  336. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +12 -0
  337. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  338. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +1 -1
  339. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  340. package/core/dist/runtime-v2/pain-to-principle-service.d.ts +6 -0
  341. package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  342. package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
  343. package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  344. package/core/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -1
  345. package/core/dist/runtime-v2/proven-channel-baseline.js +1 -1
  346. package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
  347. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.d.ts +2 -0
  348. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.d.ts.map +1 -0
  349. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.js +95 -0
  350. package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.js.map +1 -0
  351. package/core/dist/runtime-v2/risk/index.d.ts +7 -0
  352. package/core/dist/runtime-v2/risk/index.d.ts.map +1 -0
  353. package/core/dist/runtime-v2/risk/index.js +6 -0
  354. package/core/dist/runtime-v2/risk/index.js.map +1 -0
  355. package/core/dist/runtime-v2/risk/risk-calculator-policy.d.ts +18 -0
  356. package/core/dist/runtime-v2/risk/risk-calculator-policy.d.ts.map +1 -0
  357. package/core/dist/runtime-v2/risk/risk-calculator-policy.js +47 -0
  358. package/core/dist/runtime-v2/risk/risk-calculator-policy.js.map +1 -0
  359. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts +2 -0
  360. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts.map +1 -0
  361. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js +55 -0
  362. package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js.map +1 -0
  363. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.d.ts.map +1 -1
  364. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js +6 -0
  365. package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js.map +1 -1
  366. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts +2 -0
  367. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts.map +1 -0
  368. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js +272 -0
  369. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js.map +1 -0
  370. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.d.ts +2 -0
  371. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.d.ts.map +1 -0
  372. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.js +83 -0
  373. package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.js.map +1 -0
  374. package/core/dist/runtime-v2/store/intent/index.d.ts +7 -0
  375. package/core/dist/runtime-v2/store/intent/index.d.ts.map +1 -0
  376. package/core/dist/runtime-v2/store/intent/index.js +6 -0
  377. package/core/dist/runtime-v2/store/intent/index.js.map +1 -0
  378. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts +51 -0
  379. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts.map +1 -0
  380. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js +306 -0
  381. package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js.map +1 -0
  382. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.d.ts +28 -0
  383. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.d.ts.map +1 -0
  384. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.js +88 -0
  385. package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.js.map +1 -0
  386. package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js +14 -3
  387. package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js.map +1 -1
  388. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts +2 -0
  389. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts.map +1 -0
  390. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js +72 -0
  391. package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js.map +1 -0
  392. package/core/dist/runtime-v2/store/sqlite-connection.d.ts +27 -0
  393. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  394. package/core/dist/runtime-v2/store/sqlite-connection.js +138 -12
  395. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  396. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts +2 -0
  397. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts.map +1 -0
  398. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js +149 -0
  399. package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js.map +1 -0
  400. package/core/dist/runtime-v2/thinking-models/index.d.ts +3 -0
  401. package/core/dist/runtime-v2/thinking-models/index.d.ts.map +1 -0
  402. package/core/dist/runtime-v2/thinking-models/index.js +3 -0
  403. package/core/dist/runtime-v2/thinking-models/index.js.map +1 -0
  404. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts +73 -0
  405. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts.map +1 -0
  406. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.js +227 -0
  407. package/core/dist/runtime-v2/thinking-models/thinking-models-policy.js.map +1 -0
  408. package/core/dist/runtime-v2/tools/__tests__/artificer-l2-tool-contract.test.js +40 -1
  409. package/core/dist/runtime-v2/tools/__tests__/artificer-l2-tool-contract.test.js.map +1 -1
  410. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.d.ts.map +1 -1
  411. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js +28 -1
  412. package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js.map +1 -1
  413. package/core/dist/runtime-v2/tools/artificer-output-typebox.d.ts +3 -0
  414. package/core/dist/runtime-v2/tools/artificer-output-typebox.d.ts.map +1 -1
  415. package/core/dist/runtime-v2/tools/artificer-output-typebox.js +3 -0
  416. package/core/dist/runtime-v2/tools/artificer-output-typebox.js.map +1 -1
  417. package/core/dist/runtime-v2/types/event-payload.d.ts +1 -20
  418. package/core/dist/runtime-v2/types/event-payload.d.ts.map +1 -1
  419. package/core/dist/runtime-v2/types/event-payload.js +0 -12
  420. package/core/dist/runtime-v2/types/event-payload.js.map +1 -1
  421. package/core/dist/runtime-v2/types/event-types.d.ts +5 -34
  422. package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
  423. package/core/dist/runtime-v2/types/event-types.js +0 -19
  424. package/core/dist/runtime-v2/types/event-types.js.map +1 -1
  425. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts +63 -0
  426. package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
  427. package/core/dist/runtime-v2/types/evidence-chain-contract.js +234 -9
  428. package/core/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
  429. package/core/dist/runtime-v2/types/index.d.ts +5 -5
  430. package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
  431. package/core/dist/runtime-v2/types/index.js +5 -3
  432. package/core/dist/runtime-v2/types/index.js.map +1 -1
  433. package/core/dist/runtime-v2/types/ledger-store.d.ts +30 -30
  434. package/core/dist/runtime-v2/types/ledger-store.d.ts.map +1 -1
  435. package/core/dist/runtime-v2/types/ledger-store.js +10 -5
  436. package/core/dist/runtime-v2/types/ledger-store.js.map +1 -1
  437. package/core/dist/workflow-funnel-loader.d.ts +2 -2
  438. package/core/dist/workflow-funnel-loader.d.ts.map +1 -1
  439. package/core/package.json +4 -0
  440. package/dist/installer.d.ts.map +1 -1
  441. package/dist/installer.js +16 -0
  442. package/dist/installer.js.map +1 -1
  443. package/package.json +1 -1
  444. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts +9 -0
  445. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts.map +1 -0
  446. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js +237 -0
  447. package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js.map +1 -0
  448. package/pd-cli/dist/commands/intent.d.ts +76 -0
  449. package/pd-cli/dist/commands/intent.d.ts.map +1 -0
  450. package/pd-cli/dist/commands/intent.js +411 -0
  451. package/pd-cli/dist/commands/intent.js.map +1 -0
  452. package/pd-cli/dist/commands/runtime-init.d.ts +43 -0
  453. package/pd-cli/dist/commands/runtime-init.d.ts.map +1 -0
  454. package/pd-cli/dist/commands/runtime-init.js +264 -0
  455. package/pd-cli/dist/commands/runtime-init.js.map +1 -0
  456. package/pd-cli/dist/index.js +25 -0
  457. package/pd-cli/dist/index.js.map +1 -1
  458. package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
  459. package/pd-cli/dist/services/demo-story-a-runner.js +6 -0
  460. package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
  461. package/pd-cli/package.json +1 -0
  462. package/plugin/dist/commands/pain.js +2 -0
  463. package/plugin/dist/core/behavior-example-pack-assembler.d.ts +43 -0
  464. package/plugin/dist/core/behavior-example-pack-assembler.js +247 -0
  465. package/plugin/dist/core/control-ui-db.d.ts +11 -0
  466. package/plugin/dist/core/control-ui-db.js +40 -16
  467. package/plugin/dist/core/event-log.js +0 -5
  468. package/plugin/dist/core/intent-doc-reader-adapter.d.ts +36 -0
  469. package/plugin/dist/core/intent-doc-reader-adapter.js +76 -0
  470. package/plugin/dist/core/intent-doc-reader.d.ts +89 -0
  471. package/plugin/dist/core/intent-doc-reader.js +210 -0
  472. package/plugin/dist/core/principle-tree-ledger.d.ts +27 -79
  473. package/plugin/dist/core/principle-tree-ledger.js +39 -524
  474. package/plugin/dist/core/reflection/reflection-context.d.ts +2 -2
  475. package/plugin/dist/core/rule-context-assembler.d.ts +45 -0
  476. package/plugin/dist/core/rule-context-assembler.js +148 -0
  477. package/plugin/dist/core/thinking-models.d.ts +12 -57
  478. package/plugin/dist/core/thinking-models.js +18 -224
  479. package/plugin/dist/core/trajectory-types.d.ts +18 -0
  480. package/plugin/dist/core/trajectory.d.ts +50 -2
  481. package/plugin/dist/core/trajectory.js +435 -254
  482. package/plugin/dist/core/workspace-context.d.ts +2 -3
  483. package/plugin/dist/hooks/gate.js +59 -2
  484. package/plugin/dist/hooks/pain.js +5 -0
  485. package/plugin/dist/hooks/prompt-helpers.d.ts +19 -1
  486. package/plugin/dist/hooks/prompt-helpers.js +39 -2
  487. package/plugin/dist/hooks/prompt-types.d.ts +8 -0
  488. package/plugin/dist/hooks/prompt.js +81 -21
  489. package/plugin/dist/index.d.ts +3 -1
  490. package/plugin/dist/index.js +10 -6
  491. package/plugin/dist/service/runtime-summary-service.js +1 -1
  492. package/plugin/dist/service/subagent-workflow/workflow-store.d.ts +14 -0
  493. package/plugin/dist/service/subagent-workflow/workflow-store.js +91 -2
  494. package/plugin/dist/types/event-types.d.ts +1 -1
  495. package/plugin/package.json +6 -3
  496. package/plugin/scripts/acceptance-test.mjs +3 -3
  497. package/plugin/dist/core/evolution-migration.d.ts +0 -5
  498. package/plugin/dist/core/evolution-migration.js +0 -65
  499. package/plugin/dist/core/principle-tree-ledger-adapter.d.ts +0 -32
  500. package/plugin/dist/core/principle-tree-ledger-adapter.js +0 -125
  501. package/plugin/dist/core/risk-calculator.d.ts +0 -22
  502. package/plugin/dist/core/risk-calculator.js +0 -88
  503. package/plugin/dist/core/rule-host-helpers.d.ts +0 -8
  504. package/plugin/dist/core/rule-host-helpers.js +0 -7
  505. package/plugin/dist/core/rule-host-types.d.ts +0 -7
  506. package/plugin/dist/core/rule-host-types.js +0 -7
  507. package/plugin/dist/core/schema/db-types.d.ts +0 -11
  508. package/plugin/dist/core/schema/db-types.js +0 -5
  509. package/plugin/dist/core/schema/index.d.ts +0 -17
  510. package/plugin/dist/core/schema/index.js +0 -15
  511. package/plugin/dist/core/schema/migration-runner.d.ts +0 -53
  512. package/plugin/dist/core/schema/migration-runner.js +0 -170
  513. package/plugin/dist/core/schema/migrations/001-init-trajectory.d.ts +0 -6
  514. package/plugin/dist/core/schema/migrations/001-init-trajectory.js +0 -190
  515. package/plugin/dist/core/schema/migrations/002-init-central.d.ts +0 -5
  516. package/plugin/dist/core/schema/migrations/002-init-central.js +0 -108
  517. package/plugin/dist/core/schema/migrations/003-init-workflow.d.ts +0 -5
  518. package/plugin/dist/core/schema/migrations/003-init-workflow.js +0 -50
  519. package/plugin/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +0 -8
  520. package/plugin/dist/core/schema/migrations/004-add-thinking-and-gfi.js +0 -66
  521. package/plugin/dist/core/schema/migrations/index.d.ts +0 -16
  522. package/plugin/dist/core/schema/migrations/index.js +0 -27
  523. package/plugin/dist/core/schema/schema-definitions.d.ts +0 -46
  524. package/plugin/dist/core/schema/schema-definitions.js +0 -599
  525. package/plugin/dist/service/central-database.d.ts +0 -138
  526. package/plugin/dist/service/central-database.js +0 -731
  527. package/plugin/dist/service/central-sync-service.d.ts +0 -8
  528. package/plugin/dist/service/central-sync-service.js +0 -71
  529. package/plugin/scripts/db-migrate.mjs +0 -170
  530. package/plugin/scripts/validate-live-path.ts +0 -462
@@ -0,0 +1,67 @@
1
+ /**
2
+ * PRI-477 + spec 2026-06-27: Intent Engineering onboarding components.
3
+ *
4
+ * Three components:
5
+ * 1. OnboardingModal — 5-step wizard (intro → Why → Desired Outcome →
6
+ * Non-negotiables → Stop/Escalation → Current Strategic Focus → finish)
7
+ * 2. IntentEditor — section editor with 5 independent textareas (one per
8
+ * section), replacing the single monolithic textarea
9
+ * 3. CreateIntentButton — creates INTENT.md template, optionally shows wizard
10
+ *
11
+ * SPEC §22.1.1 update: Intent Page supports inline editing. This breaks the
12
+ * original "read-only governance view" constraint, but preserves the
13
+ * Owner-owned boundary: all edits are triggered by Owner clicking buttons,
14
+ * never by Agent auto-modification (SPEC §3.9 preserved).
15
+ *
16
+ * Architecture note: parseIntentDocSections / assembleIntentDoc are imported
17
+ * from @principles/core/runtime-v2. These are pure functions (no I/O, no
18
+ * node:crypto) and safe for the browser bundle. The crypto-dependent
19
+ * computeIntentContentHash lives in intent-hash.ts to keep intent-doc.ts
20
+ * browser-bundleable.
21
+ */
22
+ import { type IntentDocSections } from "@principles/core/runtime-v2/intent-browser";
23
+ interface OnboardingModalProps {
24
+ /** Called when user completes all 5 steps with the assembled sections */
25
+ onComplete: (sections: IntentDocSections) => void;
26
+ /** Called when user clicks "Skip" — creates empty template without wizard */
27
+ onSkip: () => void;
28
+ /** Called when user closes the modal without completing */
29
+ onClose: () => void;
30
+ }
31
+ export declare function OnboardingModal({ onComplete, onSkip, onClose }: OnboardingModalProps): import("react/jsx-runtime").JSX.Element;
32
+ interface IntentEditorProps {
33
+ /** Initial content to populate the editor (current INTENT.md content) */
34
+ initialContent: string;
35
+ /** Called after successful save — parent should refresh the summary */
36
+ onSaved: () => void;
37
+ /** Called when user cancels editing — parent should hide the editor */
38
+ onCancel: () => void;
39
+ /** Language for bilingual INTENT.md */
40
+ lang: 'zh-CN' | 'en';
41
+ }
42
+ export declare function IntentEditor({ initialContent, onSaved, onCancel, lang }: IntentEditorProps): import("react/jsx-runtime").JSX.Element;
43
+ interface CreateIntentButtonProps {
44
+ /**
45
+ * Called after INTENT.md is successfully created (or already existed).
46
+ * Receives `openEditor` so the parent (IntentPage) can split the two
47
+ * concerns of the create flow:
48
+ * - always: refresh the summary so NotFoundBanner updates to sections
49
+ * - optionally: open the inline editor immediately afterwards
50
+ *
51
+ * PR-1083 review (CodeRabbit A5): previously this was `() => void` and only
52
+ * invoked when openEditor was true — so the Skip path left NotFoundBanner
53
+ * showing stale "file not found" state after a successful create.
54
+ */
55
+ onCreated: (openEditor: boolean) => void;
56
+ /** If true, show onboarding wizard before creating. If false, create directly. */
57
+ showOnboarding?: boolean;
58
+ /** Language for bilingual INTENT.md */
59
+ lang: 'zh-CN' | 'en';
60
+ }
61
+ export declare function CreateIntentButton({ onCreated, showOnboarding, lang }: CreateIntentButtonProps): import("react/jsx-runtime").JSX.Element;
62
+ interface EditButtonProps {
63
+ onClick: () => void;
64
+ loading?: boolean;
65
+ }
66
+ export declare function EditButton({ onClick, loading }: EditButtonProps): import("react/jsx-runtime").JSX.Element;
67
+ export {};
@@ -0,0 +1,289 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * PRI-477 + spec 2026-06-27: Intent Engineering onboarding components.
4
+ *
5
+ * Three components:
6
+ * 1. OnboardingModal — 5-step wizard (intro → Why → Desired Outcome →
7
+ * Non-negotiables → Stop/Escalation → Current Strategic Focus → finish)
8
+ * 2. IntentEditor — section editor with 5 independent textareas (one per
9
+ * section), replacing the single monolithic textarea
10
+ * 3. CreateIntentButton — creates INTENT.md template, optionally shows wizard
11
+ *
12
+ * SPEC §22.1.1 update: Intent Page supports inline editing. This breaks the
13
+ * original "read-only governance view" constraint, but preserves the
14
+ * Owner-owned boundary: all edits are triggered by Owner clicking buttons,
15
+ * never by Agent auto-modification (SPEC §3.9 preserved).
16
+ *
17
+ * Architecture note: parseIntentDocSections / assembleIntentDoc are imported
18
+ * from @principles/core/runtime-v2. These are pure functions (no I/O, no
19
+ * node:crypto) and safe for the browser bundle. The crypto-dependent
20
+ * computeIntentContentHash lives in intent-hash.ts to keep intent-doc.ts
21
+ * browser-bundleable.
22
+ */
23
+ import { useState, useEffect, useRef, useMemo } from "react";
24
+ import { useTranslation } from "react-i18next";
25
+ import { toast } from "sonner";
26
+ import { createIntentTemplate, saveIntentContent } from "../../api.js";
27
+ import { parseIntentDocSections, assembleIntentDoc, } from "@principles/core/runtime-v2/intent-browser";
28
+ // ── Section step helpers ─────────────────────────────────────────────────────
29
+ const SECTION_STEPS = [1, 2, 3, 4, 5];
30
+ const STEP_TO_KEY = {
31
+ 1: "why",
32
+ 2: "desiredOutcome",
33
+ 3: "nonNegotiables",
34
+ 4: "stopEscalation",
35
+ 5: "currentStrategicFocus",
36
+ };
37
+ // ── localStorage key for onboarding dismissal ─────────────────────────────────
38
+ const ONBOARDING_DISMISSED_KEY = "pd_intent_onboarding_dismissed";
39
+ function isOnboardingDismissed() {
40
+ try {
41
+ return localStorage.getItem(ONBOARDING_DISMISSED_KEY) === "true";
42
+ }
43
+ catch {
44
+ return false;
45
+ }
46
+ }
47
+ function setOnboardingDismissed() {
48
+ try {
49
+ localStorage.setItem(ONBOARDING_DISMISSED_KEY, "true");
50
+ }
51
+ catch {
52
+ // ignore localStorage errors
53
+ }
54
+ }
55
+ export function OnboardingModal({ onComplete, onSkip, onClose }) {
56
+ const { t } = useTranslation();
57
+ const [step, setStep] = useState("intro");
58
+ const [sections, setSections] = useState({});
59
+ const [showDiscardConfirm, setShowDiscardConfirm] = useState(false);
60
+ const textareaRef = useRef(null);
61
+ // Focus textarea when entering a section step
62
+ useEffect(() => {
63
+ if (typeof step === "number") {
64
+ textareaRef.current?.focus();
65
+ }
66
+ }, [step]);
67
+ const hasContent = useMemo(() => Object.values(sections).some((v) => typeof v === "string" && v.trim().length > 0), [sections]);
68
+ function handleRequestClose() {
69
+ if (hasContent) {
70
+ setShowDiscardConfirm(true);
71
+ }
72
+ else {
73
+ onClose();
74
+ }
75
+ }
76
+ function handleNext() {
77
+ if (step === "intro") {
78
+ setStep(1);
79
+ return;
80
+ }
81
+ if (typeof step === "number" && step < 5) {
82
+ setStep((step + 1));
83
+ return;
84
+ }
85
+ if (step === 5) {
86
+ setStep("finish");
87
+ }
88
+ }
89
+ function handlePrev() {
90
+ if (typeof step === "number" && step > 1) {
91
+ setStep((step - 1));
92
+ return;
93
+ }
94
+ if (step === 1) {
95
+ setStep("intro");
96
+ }
97
+ }
98
+ function handleSectionChange(value) {
99
+ if (typeof step !== "number")
100
+ return;
101
+ const key = STEP_TO_KEY[step];
102
+ setSections((prev) => ({ ...prev, [key]: value }));
103
+ }
104
+ const currentSectionValue = typeof step === "number" ? (sections[STEP_TO_KEY[step]] ?? "") : "";
105
+ const isCurrentSectionEmpty = typeof step === "number" && currentSectionValue.trim().length === 0;
106
+ return (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-ink/40 backdrop-blur-sm animate-[pdFadeIn_200ms_ease-out]", role: "dialog", "aria-modal": "true", "aria-labelledby": "onboarding-title", onClick: handleRequestClose, children: _jsxs("div", { className: "bg-surface border border-line rounded-[8px] p-6 max-w-[620px] w-full mx-4 max-h-[85vh] overflow-y-auto", onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { className: "flex items-start justify-between mb-4", children: [_jsxs("div", { children: [_jsx("h2", { id: "onboarding-title", className: "text-[20px] font-semibold tracking-tight text-ink mb-1", children: t("pages.intent.onboarding.title") }), step === "intro" && (_jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed", children: t("pages.intent.onboarding.subtitle") })), typeof step === "number" && (_jsx("p", { className: "text-ink-3 text-[12px] font-mono", children: t("pages.intent.wizard.progressLabel", { current: step }) }))] }), _jsx("button", { type: "button", onClick: handleRequestClose, className: "shrink-0 ml-3 text-ink-3 hover:text-ink transition-colors", "aria-label": t("pages.intent.onboarding.close"), children: _jsx("svg", { width: "18", height: "18", viewBox: "0 0 18 18", fill: "none", "aria-hidden": "true", children: _jsx("path", { d: "M4 4L14 14M14 4L4 14", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }) }) })] }), step === "intro" && (_jsxs("div", { className: "mb-5", children: [_jsxs("div", { className: "mb-5", children: [_jsx("h3", { className: "text-[14px] font-semibold text-ink mb-1.5", children: t("pages.intent.onboarding.whatIsIt.title") }), _jsx("p", { className: "text-ink-2 text-[13px] leading-relaxed", children: t("pages.intent.onboarding.whatIsIt.description") })] }), _jsxs("div", { className: "mb-5", children: [_jsx("h3", { className: "text-[14px] font-semibold text-ink mb-1.5", children: t("pages.intent.onboarding.whyYouFill.title") }), _jsx("p", { className: "text-ink-2 text-[13px] leading-relaxed", children: t("pages.intent.onboarding.whyYouFill.description") })] }), _jsxs("div", { className: "mb-5", children: [_jsx("h3", { className: "text-[14px] font-semibold text-ink mb-1.5", children: t("pages.intent.onboarding.sectionGuide.title") }), _jsx("p", { className: "text-ink-3 text-[12px] leading-relaxed mb-2", children: t("pages.intent.onboarding.sectionGuide.description") }), _jsx("ul", { className: "space-y-1.5", children: SECTION_STEPS.map((s) => {
107
+ const key = STEP_TO_KEY[s];
108
+ return (_jsxs("li", { className: "text-ink-2 text-[13px] leading-relaxed", children: [_jsx("span", { className: "font-mono text-gov", children: "\u2022" }), " ", t(`pages.intent.wizard.stepLabels.${key}`)] }, s));
109
+ }) })] })] })), typeof step === "number" && (_jsxs("div", { className: "mb-5", children: [_jsx("h3", { className: "text-[15px] font-semibold text-ink mb-1.5", children: t(`pages.intent.wizard.stepLabels.${STEP_TO_KEY[step]}`) }), _jsx("p", { className: "text-ink-3 text-[12px] leading-relaxed mb-3", children: t(`pages.intent.wizard.guidance.${STEP_TO_KEY[step]}`) }), _jsx("textarea", { ref: textareaRef, value: currentSectionValue, onChange: (e) => handleSectionChange(e.target.value), placeholder: t(`pages.intent.wizard.guidance.${STEP_TO_KEY[step]}`), className: "w-full h-[180px] bg-surface border border-line rounded-[4px] p-3 text-[13px] text-ink leading-relaxed resize-y focus:outline-none focus:border-gov focus:ring-1 focus:ring-gov/30", spellCheck: false, "aria-label": t(`pages.intent.wizard.stepLabels.${STEP_TO_KEY[step]}`) }), isCurrentSectionEmpty && (_jsx("p", { className: "text-amber text-[12px] mt-1.5", role: "alert", children: t("pages.intent.wizard.emptyWarning") }))] })), step === "finish" && (_jsxs("div", { className: "mb-5", children: [_jsx("h3", { className: "text-[15px] font-semibold text-ink mb-3", children: t("pages.intent.wizard.finish") }), _jsx("div", { className: "space-y-3", children: SECTION_STEPS.map((s) => {
110
+ const key = STEP_TO_KEY[s];
111
+ const value = sections[key] ?? "";
112
+ return (_jsxs("div", { className: "border-l-2 border-gov/40 pl-3", children: [_jsx("p", { className: "font-mono text-[11px] uppercase tracking-[0.08em] text-ink-3 mb-0.5", children: t(`pages.intent.wizard.stepLabels.${key}`) }), _jsx("p", { className: "text-ink-2 text-[13px] leading-relaxed whitespace-pre-wrap", children: value || t("pages.intent.wizard.emptyWarning") })] }, s));
113
+ }) })] })), _jsxs("div", { className: "flex items-center justify-between gap-2 pt-3 border-t border-line", children: [_jsxs("div", { children: [step === "intro" && (_jsx("button", { type: "button", onClick: onSkip, className: "border border-line bg-surface text-ink-2 rounded-[4px] px-4 py-2 text-[13px] hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.intent.onboarding.skipOption") })), typeof step === "number" && (_jsx("button", { type: "button", onClick: handlePrev, className: "border border-line bg-surface text-ink-2 rounded-[4px] px-4 py-2 text-[13px] hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.intent.wizard.prev") }))] }), _jsxs("div", { children: [step === "intro" && (_jsx("button", { type: "button", onClick: handleNext, className: "bg-gov text-paper rounded-[4px] px-4 py-2 text-[13px] font-medium hover:bg-gov-dark transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.intent.onboarding.startFilling") })), typeof step === "number" && step < 5 && (_jsx("button", { type: "button", onClick: handleNext, disabled: isCurrentSectionEmpty, className: "bg-gov text-paper rounded-[4px] px-4 py-2 text-[13px] font-medium hover:bg-gov-dark transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed", children: t("pages.intent.wizard.next") })), step === 5 && (_jsx("button", { type: "button", onClick: handleNext, disabled: isCurrentSectionEmpty, className: "bg-gov text-paper rounded-[4px] px-4 py-2 text-[13px] font-medium hover:bg-gov-dark transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed", children: t("pages.intent.wizard.review") })), step === "finish" && (_jsx("button", { type: "button", onClick: () => onComplete(sections), className: "bg-gov text-paper rounded-[4px] px-4 py-2 text-[13px] font-medium hover:bg-gov-dark transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.intent.wizard.complete") }))] })] }), showDiscardConfirm && (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-ink/40 backdrop-blur-sm", role: "alertdialog", "aria-modal": "true", "aria-labelledby": "discard-title", onClick: () => setShowDiscardConfirm(false), children: _jsxs("div", { className: "bg-surface border border-line rounded-[8px] p-5 max-w-[400px] w-full mx-4", onClick: (e) => e.stopPropagation(), children: [_jsx("p", { id: "discard-title", className: "text-ink text-[14px] font-semibold mb-2", children: t("pages.intent.wizard.discardConfirmTitle") }), _jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed mb-4", children: t("pages.intent.wizard.discardConfirmBody") }), _jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx("button", { type: "button", onClick: () => setShowDiscardConfirm(false), className: "border border-line bg-surface text-ink-2 rounded-[4px] px-3 py-1.5 text-[12px] hover:border-line-2 transition-colors", children: t("pages.intent.wizard.discardConfirmCancel") }), _jsx("button", { type: "button", onClick: () => {
114
+ setShowDiscardConfirm(false);
115
+ onClose();
116
+ }, className: "bg-red-600 text-white rounded-[4px] px-3 py-1.5 text-[12px] hover:bg-red-700 transition-colors", children: t("pages.intent.wizard.discardConfirmConfirm") })] })] }) }))] }) }));
117
+ }
118
+ export function IntentEditor({ initialContent, onSaved, onCancel, lang }) {
119
+ const { t } = useTranslation();
120
+ // Parse initial content into 5 sections on mount. parseIntentDocSections
121
+ // returns undefined for missing sections; we normalize to empty string for
122
+ // textarea value binding (controlled input requires a string value).
123
+ const [sections, setSections] = useState(() => {
124
+ const parsed = parseIntentDocSections(initialContent);
125
+ return {
126
+ why: parsed.why ?? "",
127
+ desiredOutcome: parsed.desiredOutcome ?? "",
128
+ nonNegotiables: parsed.nonNegotiables ?? "",
129
+ stopEscalation: parsed.stopEscalation ?? "",
130
+ currentStrategicFocus: parsed.currentStrategicFocus ?? "",
131
+ };
132
+ });
133
+ const [saving, setSaving] = useState(false);
134
+ const [showDiscardConfirm, setShowDiscardConfirm] = useState(false);
135
+ const firstTextareaRef = useRef(null);
136
+ // Focus the first textarea on mount
137
+ useEffect(() => {
138
+ firstTextareaRef.current?.focus();
139
+ }, []);
140
+ // Detect changes by comparing current sections to initial parsed sections.
141
+ // We re-parse initialContent on each render (cheap, pure function) rather
142
+ // than storing a second state variable — avoids stale closure issues.
143
+ const initialSections = useMemo(() => parseIntentDocSections(initialContent), [initialContent]);
144
+ const hasChanges = useMemo(() => {
145
+ for (const step of SECTION_STEPS) {
146
+ const key = STEP_TO_KEY[step];
147
+ const current = sections[key] ?? "";
148
+ const initial = initialSections[key] ?? "";
149
+ if (current !== initial)
150
+ return true;
151
+ }
152
+ return false;
153
+ }, [sections, initialSections]);
154
+ function handleSectionChange(key, value) {
155
+ setSections((prev) => ({ ...prev, [key]: value }));
156
+ }
157
+ async function handleSave() {
158
+ if (!hasChanges || saving)
159
+ return;
160
+ // Client-side validation: require at least one non-empty section.
161
+ // Empty individual sections are allowed (user may clear a section
162
+ // intentionally); the server emits warnings, not errors, for empty
163
+ // sections.
164
+ const allEmpty = SECTION_STEPS.every((s) => {
165
+ const key = STEP_TO_KEY[s];
166
+ return (sections[key] ?? "").trim().length === 0;
167
+ });
168
+ if (allEmpty) {
169
+ toast.error(t("pages.intent.editor.emptyContent"));
170
+ return;
171
+ }
172
+ const assembled = assembleIntentDoc(sections);
173
+ setSaving(true);
174
+ const result = await saveIntentContent(assembled, lang);
175
+ setSaving(false);
176
+ if (!result.success) {
177
+ // Branch on structured reason field, NOT substring matching (PR-1083 N4).
178
+ if (result.reason === "oversized") {
179
+ toast.error(t("pages.intent.editor.oversized"));
180
+ }
181
+ else {
182
+ toast.error(t("pages.intent.editor.saveFailed"));
183
+ }
184
+ return;
185
+ }
186
+ toast.success(t("pages.intent.editor.saveSuccess"));
187
+ onSaved();
188
+ }
189
+ function handleCancel() {
190
+ if (hasChanges) {
191
+ setShowDiscardConfirm(true);
192
+ }
193
+ else {
194
+ onCancel();
195
+ }
196
+ }
197
+ return (_jsxs("div", { className: "bg-panel border border-line rounded-[6px] p-5", children: [_jsx("div", { className: "flex items-center justify-between mb-4", children: _jsxs("div", { children: [_jsx("h3", { id: "section-editor", className: "text-[15px] font-semibold text-ink mb-0.5", children: t("pages.intent.editor.title") }), _jsx("p", { className: "text-ink-3 text-[12px] leading-relaxed", children: t("pages.intent.editor.description") })] }) }), _jsx("div", { className: "space-y-4", children: SECTION_STEPS.map((step, idx) => {
198
+ const key = STEP_TO_KEY[step];
199
+ const value = sections[key] ?? "";
200
+ return (_jsxs("div", { children: [_jsx("label", { htmlFor: `intent-section-${key}`, className: "block font-mono text-[11px] uppercase tracking-[0.08em] text-ink-3 mb-1", children: t(`pages.intent.wizard.stepLabels.${key}`) }), _jsx("p", { className: "text-ink-3 text-[12px] leading-relaxed mb-1.5", children: t(`pages.intent.wizard.guidance.${key}`) }), _jsx("textarea", { ref: idx === 0 ? firstTextareaRef : undefined, id: `intent-section-${key}`, value: value, onChange: (e) => handleSectionChange(key, e.target.value), className: "w-full h-[120px] bg-surface border border-line rounded-[4px] p-3 text-[13px] text-ink leading-relaxed resize-y focus:outline-none focus:border-gov focus:ring-1 focus:ring-gov/30", spellCheck: false, "aria-label": t(`pages.intent.wizard.stepLabels.${key}`) })] }, step));
201
+ }) }), _jsxs("div", { className: "flex items-center justify-end gap-2 mt-4", children: [_jsx("button", { type: "button", onClick: handleCancel, disabled: saving, className: "border border-line bg-surface text-ink-2 rounded-[4px] px-4 py-2 text-[13px] hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed", children: t("pages.intent.editor.cancel") }), _jsx("button", { type: "button", onClick: handleSave, disabled: !hasChanges || saving, className: "bg-gov text-paper rounded-[4px] px-4 py-2 text-[13px] font-medium hover:bg-gov-dark transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed", children: saving ? t("pages.intent.editor.saving") : t("pages.intent.editor.save") })] }), showDiscardConfirm && (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-ink/40 backdrop-blur-sm", role: "alertdialog", "aria-modal": "true", "aria-labelledby": "discard-title", onClick: () => setShowDiscardConfirm(false), children: _jsxs("div", { className: "bg-surface border border-line rounded-[8px] p-5 max-w-[400px] w-full mx-4", onClick: (e) => e.stopPropagation(), children: [_jsx("p", { id: "discard-title", className: "text-ink text-[14px] mb-4", children: t("pages.intent.editor.confirmDiscard") }), _jsxs("div", { className: "flex items-center justify-end gap-2", children: [_jsx("button", { type: "button", onClick: () => setShowDiscardConfirm(false), className: "border border-line bg-surface text-ink-2 rounded-[4px] px-3 py-1.5 text-[12px] hover:border-line-2 transition-colors", children: t("pages.intent.editor.no") }), _jsx("button", { type: "button", onClick: () => {
202
+ setShowDiscardConfirm(false);
203
+ onCancel();
204
+ }, className: "bg-red-600 text-white rounded-[4px] px-3 py-1.5 text-[12px] hover:bg-red-700 transition-colors", children: t("pages.intent.editor.yes") })] })] }) }))] }));
205
+ }
206
+ export function CreateIntentButton({ onCreated, showOnboarding = false, lang }) {
207
+ const { t } = useTranslation();
208
+ const [busy, setBusy] = useState(false);
209
+ const [showOnboardingModal, setShowOnboardingModal] = useState(showOnboarding && !isOnboardingDismissed());
210
+ // Create template + save assembled content from wizard.
211
+ // Called when user completes all 5 wizard steps.
212
+ async function createFromWizard(sections) {
213
+ setBusy(true);
214
+ // Step 1: create template (idempotent — ensures file exists)
215
+ const createResult = await createIntentTemplate(false, lang);
216
+ if (!createResult.success) {
217
+ setBusy(false);
218
+ toast.error(t("pages.intent.notFound.createFailed"));
219
+ return;
220
+ }
221
+ // Step 2: save the assembled content (overwrites template defaults)
222
+ const assembled = assembleIntentDoc(sections);
223
+ const saveResult = await saveIntentContent(assembled, lang);
224
+ setBusy(false);
225
+ if (!saveResult.success) {
226
+ // Template was created but wizard content failed to save.
227
+ // The file exists (template), so refresh summary; show error so the
228
+ // user knows to edit manually. This is NOT a silent fallback (rc-9).
229
+ if (saveResult.reason === "oversized") {
230
+ toast.error(t("pages.intent.editor.oversized"));
231
+ }
232
+ else {
233
+ toast.error(t("pages.intent.editor.saveFailed"));
234
+ }
235
+ onCreated(true); // open editor so user can retry / inspect
236
+ return;
237
+ }
238
+ toast.success(t("pages.intent.notFound.createSuccess"));
239
+ onCreated(false); // wizard already filled content — no need to open editor
240
+ }
241
+ // Create empty template. Returns true on success so the caller can decide
242
+ // whether to open the editor (legacy path) or just refresh (skip path).
243
+ // Does NOT call onCreated itself — avoids double-callback bug.
244
+ async function createEmptyTemplate() {
245
+ setBusy(true);
246
+ const result = await createIntentTemplate(false, lang);
247
+ setBusy(false);
248
+ if (!result.success) {
249
+ toast.error(t("pages.intent.notFound.createFailed"));
250
+ return false;
251
+ }
252
+ toast.success(t("pages.intent.notFound.createSuccess"));
253
+ return true;
254
+ }
255
+ function handleComplete(sections) {
256
+ setShowOnboardingModal(false);
257
+ setOnboardingDismissed();
258
+ void createFromWizard(sections);
259
+ }
260
+ function handleSkip() {
261
+ setShowOnboardingModal(false);
262
+ setOnboardingDismissed();
263
+ void createEmptyTemplate().then((ok) => {
264
+ if (ok)
265
+ onCreated(false);
266
+ });
267
+ }
268
+ function handleClose() {
269
+ setShowOnboardingModal(false);
270
+ }
271
+ function handleClick() {
272
+ if (showOnboarding && !isOnboardingDismissed()) {
273
+ setShowOnboardingModal(true);
274
+ }
275
+ else {
276
+ // Legacy direct-create path (onboarding already dismissed or not enabled):
277
+ // create template then open editor so user can fill content manually.
278
+ void createEmptyTemplate().then((ok) => {
279
+ if (ok)
280
+ onCreated(true);
281
+ });
282
+ }
283
+ }
284
+ return (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", onClick: handleClick, disabled: busy, className: "bg-gov text-paper rounded-[4px] px-4 py-2 text-[13px] font-medium hover:bg-gov-dark transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed", children: busy ? t("pages.intent.notFound.creating") : t("pages.intent.notFound.createButton") }), showOnboardingModal && (_jsx(OnboardingModal, { onComplete: handleComplete, onSkip: handleSkip, onClose: handleClose }))] }));
285
+ }
286
+ export function EditButton({ onClick, loading = false }) {
287
+ const { t } = useTranslation();
288
+ return (_jsx("button", { type: "button", onClick: onClick, disabled: loading, "aria-busy": loading, className: "border border-line bg-surface text-ink-2 rounded-[4px] px-3 py-1.5 text-[12px] hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:border-line", children: loading ? t("common.loading") : t("pages.intent.editor.edit") }));
289
+ }
@@ -0,0 +1 @@
1
+ export declare function IntentPage(): import("react/jsx-runtime").JSX.Element;