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
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useState, useEffect, useCallback } from "react";
3
3
  import { useTranslation } from "react-i18next";
4
4
  import { toast } from "sonner";
@@ -6,8 +6,12 @@ import { PageShell } from "../../components/layout/page-shell.js";
6
6
  import { PageLoading } from "../../components/layout/page-loading.js";
7
7
  import { SectionTitle } from "../../components/layout/section-title.js";
8
8
  import { fetchConfigSummary, fetchConfigCatalog, updateAgentBinding, updateDefaultRuntime, } from "../../api.js";
9
- import { computeOverallReadiness, groupAgentsByReadiness, redactDiagnosticsForCopy, } from "../../utils/control-center-helpers.js";
9
+ import { computeOverallReadiness, groupAgentsByReadiness, groupAgentsByDependency, isKnownAgentName, redactDiagnosticsForCopy, } from "../../utils/control-center-helpers.js";
10
10
  import { enumLabel } from "../../utils/enum-labels.js";
11
+ import { EmpathyObserverCostHint } from "./EmpathyObserverCostHint.js";
12
+ import { WorkflowDiagram } from "./WorkflowDiagram.js";
13
+ import { AgentGroup } from "./AgentGroup.js";
14
+ import { AGENT_GROUPS, AGENT_METADATA, } from "../../utils/agent-metadata.js";
11
15
  // ── Runtime validators (H section / ERR-001/005/009/013) ─────────────────────
12
16
  function validateSource(raw) {
13
17
  if (typeof raw !== "string")
@@ -76,7 +80,18 @@ function validateRedactedRuntimeProfileSummary(raw) {
76
80
  const apiKeyEnv = Object.hasOwn(raw, "apiKeyEnv") && typeof raw.apiKeyEnv === "string"
77
81
  ? raw.apiKeyEnv
78
82
  : undefined;
79
- return { id, type, label, apiKeyEnv, readiness };
83
+ // provider/model are optional (set by backend redactPdConfig for both
84
+ // pi-ai and openclaw profiles). Extract so EmpathyObserverCostHint can
85
+ // show the active model without parsing the label string. Aligns with
86
+ // the canonical validator in validators.ts (EP-01: validate fields that
87
+ // actually exist in the target type).
88
+ const provider = Object.hasOwn(raw, "provider") && typeof raw.provider === "string"
89
+ ? raw.provider
90
+ : undefined;
91
+ const model = Object.hasOwn(raw, "model") && typeof raw.model === "string"
92
+ ? raw.model
93
+ : undefined;
94
+ return { id, type, label, apiKeyEnv, provider, model, readiness };
80
95
  }
81
96
  function validateRedactedAgentSummary(raw) {
82
97
  if (!isRecord(raw))
@@ -272,46 +287,70 @@ function readinessTagClasses(readiness) {
272
287
  }
273
288
  }
274
289
  // ── Sub-components ───────────────────────────────────────────────────────────
275
- function OverallStatusCard({ readiness, agents, }) {
290
+ /**
291
+ * CompactStatusBar — 紧凑状态条(替代 OverallStatusCard)
292
+ *
293
+ * 取自原型 control-center.html 第 153-168 行。一行展示:
294
+ * 已启用 N/M · 未就绪 N 项 · 核心管道 状态 · [需配置] pill
295
+ *
296
+ * 核心管道状态 = core_trio + code_chain 中已启用代理的就绪情况:
297
+ * - paralyzed: core_trio 任一 disabled 或有 not_ready
298
+ * - degraded: 有 needs_setup
299
+ * - ok: 全 ready
300
+ *
301
+ * rc-2: 用 Object.hasOwn 守卫 agent.name 查 AGENT_METADATA(无 as 绕过)
302
+ */
303
+ function CompactStatusBar({ readiness, agents, }) {
276
304
  const { t } = useTranslation();
277
305
  const enabledCount = agents.filter((a) => a.enabled).length;
278
306
  const totalCount = agents.length;
279
- let messageKey;
280
- switch (readiness) {
281
- case "ready":
282
- messageKey = "pages.controlCenter.configReady";
283
- break;
284
- case "needs_setup":
285
- messageKey = "pages.controlCenter.configNeedsSetup";
286
- break;
287
- case "not_ready":
288
- messageKey = "pages.controlCenter.configNotReady";
289
- break;
290
- case "disabled":
291
- messageKey = "pages.controlCenter.configDisabled";
292
- break;
293
- default:
294
- messageKey = "pages.controlCenter.configUnknown";
295
- break;
307
+ const notReadyCount = agents.filter((a) => a.enabled && a.readiness !== "ready").length;
308
+ // 核心管道状态:core_trio + code_chain 中已启用代理
309
+ // rc-2: 用 isKnownAgentName 类型守卫缩窄,不用 as 绕过
310
+ const coreAgents = agents.filter((a) => {
311
+ if (!isKnownAgentName(a.name))
312
+ return false;
313
+ const meta = AGENT_METADATA[a.name];
314
+ return meta.group === "core_trio" || meta.group === "code_chain";
315
+ });
316
+ const enabledCoreAgents = coreAgents.filter((a) => a.enabled);
317
+ const coreTrioAgents = coreAgents.filter((a) => {
318
+ if (!isKnownAgentName(a.name))
319
+ return false;
320
+ const meta = AGENT_METADATA[a.name];
321
+ return meta.group === "core_trio";
322
+ });
323
+ const codeChainAgents = coreAgents.filter((a) => {
324
+ if (!isKnownAgentName(a.name))
325
+ return false;
326
+ const meta = AGENT_METADATA[a.name];
327
+ return meta.group === "code_chain";
328
+ });
329
+ const coreTrioAnyDisabled = coreTrioAgents.some((a) => !a.enabled);
330
+ const codeChainAnyDisabled = codeChainAgents.some((a) => !a.enabled);
331
+ const coreAnyNotReady = enabledCoreAgents.some((a) => a.readiness === "not_ready");
332
+ const coreAnyNeedsSetup = enabledCoreAgents.some((a) => a.readiness === "needs_setup");
333
+ // 状态优先级(per AGENT_METADATA.impactZh):
334
+ // - paralyzed: core_trio 任一 disabled 或 enabled 但 not_ready
335
+ // (core_trio 是入口,关掉任何一个整个管道瘫痪)
336
+ // - degraded: code_chain 任一 disabled(降级运行,非瘫痪)
337
+ // 或 enabled 但 needs_setup
338
+ // - ok: 全 ready
339
+ //
340
+ // needsConfig 标记仅用于 readiness 异常(not_ready / needs_setup),
341
+ // 不用于主动 disabled — 主动 disable 是 owner 的有意决策,不是配置缺失。
342
+ let corePipelineKey;
343
+ const needsConfig = coreAnyNotReady || coreAnyNeedsSetup;
344
+ if (coreTrioAnyDisabled || coreAnyNotReady) {
345
+ corePipelineKey = "pages.controlCenter.status.corePipelineParalyzed";
296
346
  }
297
- return (_jsxs("div", { className: "bg-panel border border-line rounded-[6px] px-[18px] py-[14px]", children: [_jsxs("div", { className: "flex items-center gap-3 mb-2", children: [_jsx("span", { className: readinessTagClasses(readiness), children: enumLabel('readiness', readiness, t) }), _jsxs("span", { className: "text-ink-3 text-[13px]", children: [enabledCount, "/", totalCount, " ", t("pages.controlCenter.agentEnabled").toLowerCase()] })] }), _jsx("p", { className: "text-ink-2 text-[14px] leading-relaxed", children: t(messageKey) })] }));
298
- }
299
- function AgentRow({ agent, profiles, onBindingChange, saving, }) {
300
- const { t } = useTranslation();
301
- const isSaving = saving === agent.name;
302
- return (_jsxs("div", { className: "flex items-center gap-4 py-[10px] border-b border-line last:border-b-0", children: [_jsx("div", { className: "min-w-[140px]", children: _jsx("span", { className: "text-ink text-[13px] font-medium", children: agent.name }) }), _jsx("div", { className: "min-w-[100px]", children: _jsx("span", { className: readinessTagClasses(agent.readiness), children: enumLabel('readiness', agent.readiness, t) }) }), _jsx("div", { className: "flex-1", children: _jsx("select", { value: agent.runtimeProfileId, onChange: (e) => {
303
- onBindingChange(agent.name, e.target.value, agent.enabled);
304
- }, disabled: isSaving, className: "bg-surface border border-line rounded-[3px] px-2 py-1 text-[12.5px] text-ink focus:outline-none focus:border-gov disabled:opacity-50", "aria-label": t("pages.controlCenter.profileLabel"), children: profiles.map((p) => (_jsx("option", { value: p.id, children: p.label }, p.id))) }) }), _jsx("button", { type: "button", onClick: () => {
305
- onBindingChange(agent.name, agent.runtimeProfileId, !agent.enabled);
306
- }, disabled: isSaving, className: agent.enabled
307
- ? "border border-gov bg-gov text-paper rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:bg-gov-2 transition-colors disabled:opacity-50"
308
- : "border border-line bg-surface text-ink rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:border-line-2 transition-colors disabled:opacity-50", "aria-label": agent.enabled
309
- ? t("pages.controlCenter.agentDisabled")
310
- : t("pages.controlCenter.agentEnabled"), children: isSaving
311
- ? t("pages.controlCenter.saving")
312
- : agent.enabled
313
- ? t("pages.controlCenter.on")
314
- : t("pages.controlCenter.off") })] }));
347
+ else if (codeChainAnyDisabled || coreAnyNeedsSetup) {
348
+ corePipelineKey = "pages.controlCenter.status.corePipelineDegraded";
349
+ }
350
+ else {
351
+ corePipelineKey = "pages.controlCenter.status.corePipelineOk";
352
+ }
353
+ return (_jsxs("div", { className: "mt-5 px-[16px] py-[11px] bg-surface border border-line-2 rounded-[4px] flex items-center gap-[16px] text-[12.5px] text-ink-3 flex-wrap", children: [_jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.enabled") }), _jsxs("span", { className: "text-ink font-semibold", children: [_jsx("span", { className: "font-mono", children: enabledCount }), " /", " ", _jsx("span", { className: "font-mono", children: totalCount })] })] }), _jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.notReady") }), _jsx("span", { className: "text-ink font-semibold", children: _jsx("span", { className: "font-mono", children: notReadyCount }) })] }), _jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.corePipeline") }), _jsx("span", { className: "text-ink font-semibold", children: t(corePipelineKey) })] }), needsConfig && (_jsx("span", { className: "ml-auto px-[9px] py-[3px] rounded-[2px] text-[10.5px] font-mono tracking-[0.02em] font-medium border border-amber text-amber bg-amber/10", children: t("pages.controlCenter.status.needsConfig") }))] }));
315
354
  }
316
355
  function DefaultRuntimeSelector({ currentDefault, profiles, onDefaultChange, saving, }) {
317
356
  const { t } = useTranslation();
@@ -357,7 +396,7 @@ function AdvancedDiagnostics({ config, }) {
357
396
  }) })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("button", { type: "button", onClick: handleCopy, className: "border border-line bg-surface text-ink rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: copied ? "✓" : t("pages.controlCenter.copyDiagnostics") }), _jsx("span", { className: "text-ink-4 text-[12px]", children: t("pages.controlCenter.redactedNote") })] })] })] }));
358
397
  }
359
398
  export function ControlCenterPage() {
360
- const { t } = useTranslation();
399
+ const { t, i18n } = useTranslation();
361
400
  const [configData, setConfigData] = useState(null);
362
401
  const [catalogData, setCatalogData] = useState(null);
363
402
  const [loadingState, setLoadingState] = useState("loading");
@@ -445,5 +484,28 @@ export function ControlCenterPage() {
445
484
  };
446
485
  const overallReadiness = computeOverallReadiness(diagnostics);
447
486
  const availableProfiles = catalogData?.profiles ?? configData.runtimeProfiles;
448
- return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out]", children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.controlCenter.subtitle") }), _jsx("section", { "aria-labelledby": "section-readiness", children: _jsx(OverallStatusCard, { readiness: overallReadiness, agents: configData.agents }) }), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-agents", children: [_jsx(SectionTitle, { id: "section-agents", children: t("pages.controlCenter.internalAgents") }), _jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed mb-3", children: t("pages.controlCenter.internalAgentsDescription") }), _jsx("div", { className: "bg-panel border border-line rounded-[6px] px-[18px] py-[6px]", children: configData.agents.length === 0 ? (_jsx("div", { className: "py-3 text-ink-3 text-[13px]", children: "\u2014" })) : (configData.agents.map((agent) => (_jsx(AgentRow, { agent: agent, profiles: availableProfiles, onBindingChange: handleBindingChange, saving: savingAgent }, agent.name)))) })] }), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-default-runtime", children: [_jsx(SectionTitle, { id: "section-default-runtime", children: t("pages.controlCenter.defaultRuntime") }), _jsx(DefaultRuntimeSelector, { currentDefault: configData.defaultRuntime, profiles: availableProfiles, onDefaultChange: handleDefaultRuntimeChange, saving: savingDefault })] }), _jsx("section", { className: "mt-8", "aria-labelledby": "section-diagnostics", children: _jsx(AdvancedDiagnostics, { config: configData }) })] }) }));
487
+ return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out]", children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.controlCenter.subtitle") }), _jsx(WorkflowDiagram, {}), _jsx(CompactStatusBar, { readiness: overallReadiness, agents: configData.agents }), (() => {
488
+ const empathyAgent = configData.agents.find((a) => a.name === "empathyObserver" && a.enabled);
489
+ if (!empathyAgent)
490
+ return null;
491
+ let acked = false;
492
+ try {
493
+ acked = localStorage.getItem("pd.empathyObserver.costAck") === "true";
494
+ }
495
+ catch {
496
+ // localStorage unavailable (privacy mode) → not acked → render
497
+ }
498
+ if (acked)
499
+ return null;
500
+ return (_jsx(EmpathyObserverCostHint, { agent: empathyAgent, profiles: availableProfiles }));
501
+ })(), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-agents", children: [_jsx(SectionTitle, { id: "section-agents", children: t("pages.controlCenter.internalAgents") }), _jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed mb-3", children: t("pages.controlCenter.internalAgentsDescription") }), (() => {
502
+ const { groups, unknown } = groupAgentsByDependency(configData.agents);
503
+ const locale = i18n.language.startsWith("en")
504
+ ? "en"
505
+ : "zh-CN";
506
+ return (_jsxs(_Fragment, { children: [AGENT_GROUPS.map((groupMeta) => (_jsx(AgentGroup, { groupMeta: groupMeta, agents: groups[groupMeta.id], profiles: availableProfiles, onBindingChange: handleBindingChange, saving: savingAgent, locale: locale }, groupMeta.id))), unknown.length > 0 && (_jsx("div", { className: "mt-3 px-3 py-2 border border-amber/30 border-l-2 border-l-amber rounded-[4px] bg-amber/10 text-[12.5px] text-ink-3", children: t("pages.controlCenter.unknownAgentsWarning", {
507
+ count: unknown.length,
508
+ names: unknown.map((a) => a.name).join(", "),
509
+ }) }))] }));
510
+ })()] }), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-default-runtime", children: [_jsx(SectionTitle, { id: "section-default-runtime", children: t("pages.controlCenter.defaultRuntime") }), _jsx(DefaultRuntimeSelector, { currentDefault: configData.defaultRuntime, profiles: availableProfiles, onDefaultChange: handleDefaultRuntimeChange, saving: savingDefault })] }), _jsx("section", { className: "mt-8", "aria-labelledby": "section-diagnostics", children: _jsx(AdvancedDiagnostics, { config: configData }) }), _jsx("p", { className: "mt-10 pt-[18px] border-t border-line-2 text-ink-4 text-[12px] leading-[1.6] max-w-[60ch] font-mono", children: t("pages.controlCenter.footerNote") })] }) }));
449
511
  }
@@ -0,0 +1,28 @@
1
+ import type { RedactedAgentSummary, RedactedRuntimeProfileSummary } from "../../api.js";
2
+ /**
3
+ * EmpathyObserverCostHint — spec 2026-06-27 §4
4
+ *
5
+ * A克制、可关闭的提示条,告知 Owner:启用 empathyObserver 后会有持续的
6
+ * LLM 调用与 token 成本,以及当前使用的 provider/model。
7
+ *
8
+ * 双层 gate(spec §4.1):
9
+ * - Gate 1(父组件 ControlCenterPage):仅当 empathyObserver 已启用且
10
+ * localStorage 未 ack 时才挂载本组件。
11
+ * - Gate 2(本组件):维护 visible 内部状态,承载"知道了"dismiss 行为。
12
+ *
13
+ * 该组件不修改后端任何代码、不修改 prompt.ts、不修改 resolveEmpathyObserver。
14
+ * 纯前端 localStorage 控制,清掉就重新出现,fail-open(隐私模式仍可见)。
15
+ *
16
+ * ERR entries (spec §8):
17
+ * - ERR-001/ERR-005: 消费 ControlCenterPage 已经过 type guard 的数据,无 untrusted 原始数据
18
+ * - ERR-009/ERR-010: provider/model 取不到时用 '—' 显式降级
19
+ * - ERR-013: localStorage 读取与写入用 try/catch 包裹
20
+ */
21
+ interface EmpathyObserverCostHintProps {
22
+ /** empathyObserver agent row (already validated by parent) */
23
+ agent: RedactedAgentSummary;
24
+ /** runtime profiles — used to resolve provider/model */
25
+ profiles: RedactedRuntimeProfileSummary[];
26
+ }
27
+ export declare function EmpathyObserverCostHint({ agent, profiles, }: EmpathyObserverCostHintProps): import("react/jsx-runtime").JSX.Element | null;
28
+ export {};
@@ -0,0 +1,38 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ import { useTranslation } from "react-i18next";
4
+ import { enumLabel } from "../../utils/enum-labels.js";
5
+ const COST_ACK_KEY = "pd.empathyObserver.costAck";
6
+ export function EmpathyObserverCostHint({ agent, profiles, }) {
7
+ const { t } = useTranslation();
8
+ // Gate 2: dismiss 后不再渲染。localStorage ack 时初始即隐藏。
9
+ const [visible, setVisible] = useState(() => {
10
+ try {
11
+ return localStorage.getItem(COST_ACK_KEY) !== "true";
12
+ }
13
+ catch {
14
+ // 隐私模式 / localStorage 不可用 → fail-open:默认可见
15
+ return true;
16
+ }
17
+ });
18
+ if (!visible)
19
+ return null;
20
+ // Resolve provider/model from the agent's runtime profile.
21
+ // agent.runtimeProfileId is always present (validated by parent).
22
+ const profile = profiles.find((p) => p.id === agent.runtimeProfileId);
23
+ const provider = profile?.provider ?? "—";
24
+ const model = profile?.model ?? "—";
25
+ const handleAck = () => {
26
+ try {
27
+ localStorage.setItem(COST_ACK_KEY, "true");
28
+ }
29
+ catch {
30
+ // 隐私模式等:写入失败不影响 dismiss 体验,下次仍会出现(fail-open)
31
+ }
32
+ setVisible(false);
33
+ };
34
+ return (_jsxs("div", { className: "bg-surface/60 border border-amber/20 border-l-2 border-l-amber rounded-[6px] px-3 py-2 mt-4", children: [_jsx("p", { className: "text-ink-2 text-[14px] leading-relaxed", children: t("pages.controlCenter.empathyCostHint.body", {
35
+ provider,
36
+ model,
37
+ }) }), _jsx("p", { className: "text-ink-3 text-[12px] mt-1 leading-relaxed", children: t("pages.controlCenter.empathyCostHint.muted") }), _jsx("div", { className: "mt-2 flex justify-end", children: _jsx("button", { type: "button", onClick: handleAck, className: "border border-gov bg-gov text-paper rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:bg-gov-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", "aria-label": t("pages.controlCenter.empathyCostHint.ack"), children: t("pages.controlCenter.empathyCostHint.ack") }) }), _jsx("span", { className: "sr-only", children: enumLabel("featureId", "empathy_observer", t) })] }));
38
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * WorkflowDiagram — PD 行为回路 4 阶段图
3
+ *
4
+ * 纯展示组件,所有文本来自 i18n。Phase 03(Owner 审批)用虚线边框 +
5
+ * gov 色调高亮,强调"人在治理中心"(品牌 Principle 3)。
6
+ *
7
+ * 视觉规格取自 design-prototype/control-center.html 第 115-151 行。
8
+ *
9
+ * rc 合规:
10
+ * - rc-1: 纯展示组件,消费 i18n 字符串(已受控),无 untrusted 数据
11
+ * - rc-8: 无 JSON 序列化路径
12
+ *
13
+ * 品牌约束(PRI-CR1 B.4.4):
14
+ * - 禁止 translateY / scale hover 效果(仅 rotate 允许用于箭头朝向)
15
+ * - 无硬编码十六进制色值,全用 token
16
+ */
17
+ export declare function WorkflowDiagram(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,55 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useTranslation } from "react-i18next";
3
+ import { ChevronRight, RefreshCw } from "lucide-react";
4
+ /**
5
+ * WorkflowDiagram — PD 行为回路 4 阶段图
6
+ *
7
+ * 纯展示组件,所有文本来自 i18n。Phase 03(Owner 审批)用虚线边框 +
8
+ * gov 色调高亮,强调"人在治理中心"(品牌 Principle 3)。
9
+ *
10
+ * 视觉规格取自 design-prototype/control-center.html 第 115-151 行。
11
+ *
12
+ * rc 合规:
13
+ * - rc-1: 纯展示组件,消费 i18n 字符串(已受控),无 untrusted 数据
14
+ * - rc-8: 无 JSON 序列化路径
15
+ *
16
+ * 品牌约束(PRI-CR1 B.4.4):
17
+ * - 禁止 translateY / scale hover 效果(仅 rotate 允许用于箭头朝向)
18
+ * - 无硬编码十六进制色值,全用 token
19
+ */
20
+ export function WorkflowDiagram() {
21
+ const { t } = useTranslation();
22
+ const phases = [
23
+ {
24
+ num: "01",
25
+ nameKey: "pages.controlCenter.workflow.phase01",
26
+ descKey: "pages.controlCenter.workflow.phase01Desc",
27
+ isHuman: false,
28
+ },
29
+ {
30
+ num: "02",
31
+ nameKey: "pages.controlCenter.workflow.phase02",
32
+ descKey: "pages.controlCenter.workflow.phase02Desc",
33
+ isHuman: false,
34
+ },
35
+ {
36
+ num: "03",
37
+ nameKey: "pages.controlCenter.workflow.phase03",
38
+ descKey: "pages.controlCenter.workflow.phase03Desc",
39
+ isHuman: true,
40
+ },
41
+ {
42
+ num: "04",
43
+ nameKey: "pages.controlCenter.workflow.phase04",
44
+ descKey: "pages.controlCenter.workflow.phase04Desc",
45
+ isHuman: false,
46
+ },
47
+ ];
48
+ return (_jsxs("div", { className: "mt-8 bg-surface border border-line-2 rounded-[8px] px-[22px] py-[18px]", children: [_jsxs("div", { className: "flex items-center gap-2 mb-4", children: [_jsx("span", { className: "text-[11px] font-mono uppercase tracking-[0.1em] text-ink-4 font-medium", children: t("pages.controlCenter.workflow.title") }), _jsx("span", { className: "text-[11px] font-mono uppercase tracking-[0.1em] text-ink-4", children: t("pages.controlCenter.workflow.subtitle") }), _jsx("span", { className: "flex-1 h-px bg-line-2", "aria-hidden": "true" })] }), _jsx("div", { className: "grid grid-cols-[1fr_24px_1fr_24px_1fr_24px_1fr] items-stretch", children: phases.map((phase, idx) => (_jsxs("div", { className: "contents", children: [_jsxs("div", { className: phase.isHuman
49
+ ? "px-[10px] py-[12px] text-center flex flex-col gap-[5px] justify-center border border-dashed border-gov bg-gov/10 rounded-[4px]"
50
+ : "px-[10px] py-[12px] text-center flex flex-col gap-[5px] justify-center bg-paper-2 border border-line-2 rounded-[4px]", children: [_jsx("div", { className: "text-[10px] font-mono text-ink-4 tracking-[0.06em]", children: phase.num }), _jsx("div", { className: phase.isHuman
51
+ ? "text-[14px] font-semibold text-gov tracking-[-0.005em]"
52
+ : "text-[14px] font-semibold text-ink tracking-[-0.005em]", children: t(phase.nameKey) }), _jsx("div", { className: phase.isHuman
53
+ ? "text-[11.5px] text-gov-2 italic leading-[1.45] whitespace-pre-line"
54
+ : "text-[11.5px] text-ink-3 leading-[1.45] whitespace-pre-line", children: t(phase.descKey) })] }), idx < phases.length - 1 && (_jsx("div", { className: "flex items-center justify-center text-ink-4 font-mono", children: _jsx(ChevronRight, { className: "w-[18px] h-[18px]", "aria-hidden": "true" }) }))] }, phase.num))) }), _jsxs("div", { className: "mt-[14px] pt-[12px] border-t border-line-2 flex items-center gap-[10px] text-[11.5px] text-ink-4 font-mono leading-[1.5]", children: [_jsx(RefreshCw, { className: "w-[14px] h-[14px] text-gov shrink-0", "aria-hidden": "true" }), _jsx("span", { children: t("pages.controlCenter.workflow.loopHint") })] })] }));
55
+ }
@@ -1,5 +1,222 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useState, useEffect, useCallback } from "react";
3
+ import { useTranslation } from "react-i18next";
4
+ import { toast } from "sonner";
2
5
  import { PageShell } from "../../components/layout/page-shell.js";
6
+ import { PageLoading } from "../../components/layout/page-loading.js";
7
+ import { SectionTitle } from "../../components/layout/section-title.js";
8
+ import { ShinyText } from "../../components/ui/shiny-text.js";
9
+ import { Button } from "../../components/ui/button.js";
10
+ import { AlertTriangle, Archive, Trash2 } from "lucide-react";
11
+ import { fetchPrinciples, fetchAllActivations, fetchGovernanceQueue, archivePrinciple, unarchivePrinciple, disableActivation, } from "../../api.js";
12
+ import { validatePrinciplesList, validateActivations, validateGovernanceQueue, } from "../../utils/validators.js";
13
+ // ── Debt Card Component (Handles its own J.1 confirmation state) ──────────────
14
+ function DebtCard({ item, onArchive, onDeactivate, isProcessing, }) {
15
+ const { t } = useTranslation();
16
+ const [confirmAction, setConfirmAction] = useState(null);
17
+ const [selectedActivationId, setSelectedActivationId] = useState(null);
18
+ const handleArchiveClick = () => {
19
+ setConfirmAction("archive");
20
+ };
21
+ const handleDeactivateClick = (activationId) => {
22
+ setSelectedActivationId(activationId);
23
+ setConfirmAction("deactivate");
24
+ };
25
+ const handleCancel = () => {
26
+ setConfirmAction(null);
27
+ setSelectedActivationId(null);
28
+ };
29
+ const handleConfirm = async () => {
30
+ if (confirmAction === "archive") {
31
+ await onArchive(item.id);
32
+ }
33
+ else if (confirmAction === "deactivate" && selectedActivationId) {
34
+ await onDeactivate(selectedActivationId, item.id);
35
+ }
36
+ setConfirmAction(null);
37
+ setSelectedActivationId(null);
38
+ };
39
+ // Render natural language reason based on debt type
40
+ const renderReason = () => {
41
+ if (item.type === "never_activated") {
42
+ return (_jsx("span", { className: "text-ink-2", children: t("pages.debt.reasonNeverActivated") }));
43
+ }
44
+ if (item.type === "stagnant") {
45
+ return (_jsxs("span", { className: "text-ink-2", children: [t("pages.debt.reasonStagnant"), item.daysSince !== undefined && (_jsxs("span", { className: "text-amber font-semibold ml-1", children: ["(", t("pages.debt.daysSinceAgo", { count: item.daysSince }), ")"] }))] }));
46
+ }
47
+ return null;
48
+ };
49
+ const isStagnant = item.type === "stagnant";
50
+ return (_jsx("article", { className: "p-5 bg-panel border border-line rounded-[6px] hover:border-line-2 transition-colors relative", "aria-label": t("pages.debt.principleAriaLabel", { id: item.id }), children: _jsxs("div", { className: "flex flex-col md:flex-row md:items-start gap-4", children: [_jsxs("div", { className: "flex-1 space-y-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-mono text-[11px] uppercase px-2 py-0.5 bg-line rounded text-ink-3", children: item.id }), _jsx("span", { className: `font-mono text-[11px] uppercase px-2 py-0.5 rounded ${isStagnant
51
+ ? "bg-amber/10 text-amber"
52
+ : "bg-danger/10 text-danger"}`, children: isStagnant ? t("pages.focus.summaryStagnation") : t("pages.sidebar.debt") })] }), _jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-ink text-[15px] font-medium leading-relaxed", children: item.text }), item.triggerPattern && (_jsxs("p", { className: "text-ink-3 text-[13px] font-mono leading-relaxed", children: [t("principles.detail.triggerLabel", { defaultValue: "Trigger:" }), " ", item.triggerPattern] }))] }), _jsxs("div", { className: "flex items-start gap-2 pt-1", children: [_jsx(AlertTriangle, { className: "w-4 h-4 text-amber shrink-0 mt-0.5", "aria-hidden": "true" }), _jsxs("div", { className: "text-[13px] leading-relaxed", children: [_jsxs("span", { className: "font-semibold text-ink-3", children: [t("pages.debt.suggestedAction"), ": "] }), renderReason()] })] })] }), _jsx("div", { className: "flex flex-col gap-2 shrink-0 md:w-48", children: !confirmAction ? (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: handleArchiveClick, disabled: isProcessing, className: "w-full inline-flex items-center justify-center gap-1.5 border border-line bg-surface text-ink hover:border-line-2 transition-colors rounded-[3px] px-[14px] py-[6px] text-[12.5px] focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", "data-testid": `archive-btn-${item.id}`, children: [_jsx(Archive, { className: "w-4 h-4 text-ink-3", "aria-hidden": "true" }), t("pages.debt.actionArchive")] }), item.activeActivationRecords && item.activeActivationRecords.length > 0 ? (item.activeActivationRecords.map((ar) => (_jsxs("button", { onClick: () => handleDeactivateClick(ar.id), disabled: isProcessing, className: "w-full inline-flex items-center justify-center gap-1.5 border border-danger/20 bg-surface text-danger hover:bg-danger/5 transition-colors rounded-[3px] px-[14px] py-[6px] text-[12.5px] focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", "data-testid": `deactivate-btn-${ar.id}`, children: [_jsx(Trash2, { className: "w-4 h-4 text-danger/80", "aria-hidden": "true" }), t("pages.debt.actionDeactivate"), " (", ar.channel, ")"] }, ar.id)))) : (_jsx("button", { disabled: true, className: "w-full inline-flex items-center justify-center gap-1.5 border border-line bg-surface/50 text-ink-4 cursor-not-allowed rounded-[3px] px-[14px] py-[6px] text-[12.5px]", title: t("pages.debt.demoteTooltip"), children: t("pages.debt.actionKeep") }))] })) : (_jsxs("div", { className: "flex flex-col gap-2 p-3 bg-surface border border-amber/20 rounded-[4px] w-full", role: "alert", "data-testid": `confirm-bar-${item.id}`, children: [_jsx("p", { className: "text-ink-2 text-[12px] leading-relaxed", children: confirmAction === "archive"
53
+ ? t("pages.debt.confirmArchive")
54
+ : t("pages.debt.confirmDeactivate") }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: "default", size: "sm", onClick: handleConfirm, disabled: isProcessing, className: "flex-1 text-[12px] py-1", "data-testid": `confirm-btn-${item.id}`, children: t("common.confirm") }), _jsx(Button, { variant: "outline", size: "sm", onClick: handleCancel, className: "flex-1 text-[12px] py-1", children: t("common.cancel") })] })] })) })] }) }));
55
+ }
56
+ // ── Main Page Component ──────────────────────────────────────────────────────
3
57
  export function DebtPage() {
4
- return (_jsxs(PageShell, { children: [_jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: "\u539F\u5219\u503A\u52A1" }), _jsx("p", { className: "text-ink-3 text-sm", children: "\u9875\u9762\u5EFA\u8BBE\u4E2D \u2014 CR3" })] }));
58
+ const { t } = useTranslation();
59
+ const [loadingState, setLoadingState] = useState("loading");
60
+ const [errorMessage, setErrorMessage] = useState(null);
61
+ const [debtItems, setDebtItems] = useState([]);
62
+ const [isProcessing, setIsProcessing] = useState(false);
63
+ const loadData = useCallback(async () => {
64
+ setLoadingState("loading");
65
+ setErrorMessage(null);
66
+ try {
67
+ const [principlesRes, activationsRes, govQueueRes] = await Promise.all([
68
+ fetchPrinciples("all"),
69
+ fetchAllActivations(),
70
+ fetchGovernanceQueue(),
71
+ ]);
72
+ // Handle raw response validation (EP-01 / EP-03)
73
+ if (!principlesRes.success) {
74
+ setLoadingState("error");
75
+ setErrorMessage(principlesRes.error || "Failed to fetch principles");
76
+ return;
77
+ }
78
+ if (!activationsRes.success) {
79
+ setLoadingState("error");
80
+ setErrorMessage(activationsRes.error || "Failed to fetch activations");
81
+ return;
82
+ }
83
+ if (!govQueueRes.success) {
84
+ setLoadingState("error");
85
+ setErrorMessage(govQueueRes.error || "Failed to fetch governance queue");
86
+ return;
87
+ }
88
+ const validatedPrinciples = validatePrinciplesList(principlesRes.data);
89
+ const validatedActivations = validateActivations(activationsRes.data);
90
+ const validatedGovQueue = validateGovernanceQueue(govQueueRes.data);
91
+ if (!validatedPrinciples || !validatedActivations || !validatedGovQueue) {
92
+ setLoadingState("error");
93
+ setErrorMessage("Data validation failed: unexpected response shape");
94
+ return;
95
+ }
96
+ // Filter and build the debt list (no-complexity heuristics)
97
+ const allPrinciples = validatedPrinciples.principles;
98
+ const allActivations = validatedActivations.activations;
99
+ const stagnationSignals = validatedGovQueue.stagnationSignals;
100
+ const items = [];
101
+ // 1. Identify "Never Activated" Principles
102
+ // An active principle with status === 'active' is never activated if it has no active activations.
103
+ const activePrinciples = allPrinciples.filter((p) => p.status === "active");
104
+ for (const p of activePrinciples) {
105
+ const principleActivations = allActivations.filter((a) => a.principleId === p.id);
106
+ const hasActiveActivation = principleActivations.some((a) => a.status === "active");
107
+ if (!hasActiveActivation) {
108
+ // It qualifies as never-activated debt
109
+ items.push({
110
+ id: p.id,
111
+ text: p.text,
112
+ triggerPattern: p.triggerPattern,
113
+ type: "never_activated",
114
+ status: p.status,
115
+ activeActivationRecords: principleActivations.filter((a) => a.status === "active"),
116
+ });
117
+ }
118
+ }
119
+ // 2. Identify "Stagnant" Principle Approvals (stagnant for > 7 days)
120
+ for (const signal of stagnationSignals) {
121
+ // Skip if we already added it (should not overlap, but to be safe)
122
+ if (items.some((item) => item.id === signal.principleId)) {
123
+ continue;
124
+ }
125
+ const p = allPrinciples.find((p) => p.id === signal.principleId);
126
+ if (p) {
127
+ items.push({
128
+ id: p.id,
129
+ text: p.text,
130
+ triggerPattern: p.triggerPattern,
131
+ type: "stagnant",
132
+ daysSince: signal.daysSince,
133
+ status: p.status,
134
+ });
135
+ }
136
+ }
137
+ setDebtItems(items);
138
+ setLoadingState("loaded");
139
+ }
140
+ catch (e) {
141
+ setLoadingState("error");
142
+ setErrorMessage(e instanceof Error ? e.message : String(e));
143
+ }
144
+ }, []);
145
+ useEffect(() => {
146
+ loadData();
147
+ }, [loadData]);
148
+ // Archive Action: calls POST /api/principles/:id/archive and triggers J.2 Undo toast
149
+ const handleArchive = async (principleId) => {
150
+ setIsProcessing(true);
151
+ const result = await archivePrinciple(principleId);
152
+ if (result.success) {
153
+ // Remove it from the local view immediately
154
+ setDebtItems((prev) => prev.filter((item) => item.id !== principleId));
155
+ // J.2 Undo Toast: 5 seconds countdown action link
156
+ toast.success(t("pages.debt.archiveSuccess"), {
157
+ description: t("pages.activation.disableSuccessDescription", { id: principleId, defaultValue: `Principle ${principleId} archived` }),
158
+ action: {
159
+ label: t("pages.debt.undoAction"),
160
+ onClick: async () => {
161
+ const undoResult = await unarchivePrinciple(principleId);
162
+ if (undoResult.success) {
163
+ toast.success(t("pages.debt.undoSuccess"));
164
+ loadData(); // Reload to restore the principle in list
165
+ }
166
+ else {
167
+ toast.error(t("pages.debt.undoFailed"));
168
+ }
169
+ },
170
+ },
171
+ duration: 5000,
172
+ });
173
+ }
174
+ else {
175
+ toast.error(t("pages.debt.archiveFailed"), {
176
+ description: result.error,
177
+ duration: 8000,
178
+ });
179
+ }
180
+ setIsProcessing(false);
181
+ };
182
+ // Deactivate Action: calls POST /api/v1/activations/:id/disable
183
+ const handleDeactivate = async (activationId, principleId) => {
184
+ setIsProcessing(true);
185
+ const result = await disableActivation(activationId);
186
+ if (result.success) {
187
+ // Update local state by filtering out this deactivated record
188
+ setDebtItems((prev) => prev
189
+ .map((item) => {
190
+ if (item.id !== principleId)
191
+ return item;
192
+ const updatedActivations = item.activeActivationRecords?.filter((ar) => ar.id !== activationId);
193
+ return {
194
+ ...item,
195
+ activeActivationRecords: updatedActivations,
196
+ };
197
+ }));
198
+ toast.success(t("pages.debt.deactivateSuccess"), {
199
+ description: t("pages.activation.disableSuccessDescription", { id: principleId }),
200
+ duration: 5000,
201
+ });
202
+ loadData(); // reload fresh state
203
+ }
204
+ else {
205
+ toast.error(t("pages.debt.deactivateFailed"), {
206
+ description: result.error,
207
+ duration: 8000,
208
+ });
209
+ }
210
+ setIsProcessing(false);
211
+ };
212
+ // ── Loading state ──────────────────────────────────────────────────────────
213
+ if (loadingState === "loading") {
214
+ return (_jsx(PageShell, { children: _jsx(PageLoading, { cardCount: 3, label: t("common.loading") }) }));
215
+ }
216
+ // ── Error state (ERR-002: degradation with explanation) ────────────────────
217
+ if (loadingState === "error") {
218
+ return (_jsxs(PageShell, { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.debt.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.debt.title") }), _jsxs("div", { className: "mt-6 p-4 bg-panel border border-line rounded-[6px] text-ink-2 text-sm", children: [_jsx("p", { children: t("pages.debt.loadError") }), errorMessage && (_jsx("p", { className: "mt-2 text-ink-4 text-[13px] font-mono", children: errorMessage }))] })] }));
219
+ }
220
+ // ── Loaded state ───────────────────────────────────────────────────────────
221
+ return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out] space-y-6", children: [_jsxs("div", { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.debt.eyebrow") }), _jsx(ShinyText, { as: "h1", className: "text-[29px] font-semibold tracking-tight text-ink mb-2", duration: 4.5, brightness: 0.5, disabled: debtItems.length === 0, children: t("pages.debt.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed", children: t("pages.debt.subtitle") })] }), _jsx("section", { "aria-label": t("pages.debt.listAriaLabel"), className: "space-y-[14px]", children: debtItems.length > 0 ? (_jsxs(_Fragment, { children: [_jsxs(SectionTitle, { id: "section-debt-list", children: [t("pages.sidebar.debt"), " (", debtItems.length, ")"] }), _jsx("div", { className: "space-y-[14px]", children: debtItems.map((item) => (_jsx(DebtCard, { item: item, onArchive: handleArchive, onDeactivate: handleDeactivate, isProcessing: isProcessing }, `${item.id}-${item.type}`))) })] })) : (_jsxs("div", { className: "p-8 text-center bg-panel border border-line border-dashed rounded-[6px] space-y-3", role: "status", children: [_jsx("p", { className: "text-ink-2 font-medium text-[16px]", children: t("pages.debt.emptyTitle") }), _jsx("p", { className: "text-ink-3 text-[13px] max-w-[500px] mx-auto leading-relaxed", children: t("pages.debt.emptyDescription") })] })) })] }) }));
5
222
  }
@@ -7,6 +7,7 @@ import { PageShell } from "../../components/layout/page-shell.js";
7
7
  import { PageLoading } from "../../components/layout/page-loading.js";
8
8
  import { SectionTitle } from "../../components/layout/section-title.js";
9
9
  import { DailyThoughtCard } from "../../components/focus/daily-thought-card.js";
10
+ import { ShinyText } from "../../components/ui/shiny-text.js";
10
11
  import { fetchGovernanceQueue, fetchApprovalsGrouped, approveApproval, rejectApproval, editApproval, } from "../../api.js";
11
12
  export function summarizeDecisionResults(results) {
12
13
  const failures = results.filter((result) => !result.success);
@@ -414,7 +415,7 @@ export function FocusPage() {
414
415
  // Map codes to i18n text
415
416
  const stateReason = getStateReasonText(stateReasonCode, t, pendingCount);
416
417
  const nextAction = getNextActionText(nextActionCode, t);
417
- return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out]", children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.focus.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.focus.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.focus.subtitle") }), _jsxs("div", { className: "mb-7 px-[18px] py-[14px] bg-panel border border-line rounded-[6px]", children: [_jsx("div", { className: "flex items-center gap-2 mb-1", children: _jsx("span", { className: `inline-flex items-center rounded-[2px] px-[7px] py-1 font-mono text-[11px] uppercase ${governanceState === "owner_review_ready"
418
+ return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out]", children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.focus.eyebrow") }), _jsx(ShinyText, { as: "h1", className: "text-[29px] font-semibold tracking-tight text-ink mb-2", duration: 4.5, brightness: 0.5, disabled: pendingCount === 0, children: t("pages.focus.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.focus.subtitle") }), _jsxs("div", { className: "mb-7 px-[18px] py-[14px] bg-panel border border-line rounded-[6px]", children: [_jsx("div", { className: "flex items-center gap-2 mb-1", children: _jsx("span", { className: `inline-flex items-center rounded-[2px] px-[7px] py-1 font-mono text-[11px] uppercase ${governanceState === "owner_review_ready"
418
419
  ? "bg-gov/10 text-gov border border-gov/20"
419
420
  : governanceState === "degraded"
420
421
  ? "bg-amber/10 text-amber border border-amber/20"