create-principles-disciple 1.82.0 → 1.83.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 (494) hide show
  1. package/console/dist/server/config/pd-config-store.d.ts +135 -0
  2. package/console/dist/server/config/pd-config-store.js +660 -0
  3. package/console/dist/server/index.js +40 -389
  4. package/console/dist/server/models/ActivationsConsoleModel.d.ts +33 -0
  5. package/console/dist/server/models/ActivationsConsoleModel.js +112 -0
  6. package/console/dist/server/models/ApprovalsConsoleModel.d.ts +5 -0
  7. package/console/dist/server/models/ApprovalsConsoleModel.js +14 -0
  8. package/console/dist/server/models/ApprovalsGroupedConsoleModel.d.ts +25 -0
  9. package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +126 -0
  10. package/console/dist/server/models/ConsoleLifecycleDatasource.d.ts +13 -0
  11. package/console/dist/server/models/ConsoleLifecycleDatasource.js +73 -0
  12. package/console/dist/server/models/EvidenceChainConsoleModel.d.ts +58 -0
  13. package/console/dist/server/models/EvidenceChainConsoleModel.js +493 -0
  14. package/console/dist/server/models/GovernanceConsoleModel.d.ts +74 -0
  15. package/console/dist/server/models/GovernanceConsoleModel.js +246 -0
  16. package/console/dist/server/models/HealthCheckModel.d.ts +0 -4
  17. package/console/dist/server/models/HealthCheckModel.js +49 -80
  18. package/console/dist/server/models/LifecycleConsoleModel.d.ts +19 -0
  19. package/console/dist/server/models/LifecycleConsoleModel.js +55 -0
  20. package/console/dist/server/models/PrincipleClassifier.d.ts +41 -0
  21. package/console/dist/server/models/PrincipleClassifier.js +100 -0
  22. package/console/dist/server/models/PrinciplesConsoleModel.d.ts +12 -1
  23. package/console/dist/server/models/PrinciplesConsoleModel.js +53 -6
  24. package/console/dist/server/models/WorkspaceService.d.ts +2 -1
  25. package/console/dist/server/models/WorkspaceService.js +51 -23
  26. package/console/dist/server/routes/activations.d.ts +3 -0
  27. package/console/dist/server/routes/activations.js +111 -0
  28. package/console/dist/server/routes/approvals-grouped.d.ts +3 -0
  29. package/console/dist/server/routes/approvals-grouped.js +32 -0
  30. package/console/dist/server/routes/approvals.js +28 -4
  31. package/console/dist/server/routes/config.d.ts +27 -0
  32. package/console/dist/server/routes/config.js +213 -0
  33. package/console/dist/server/routes/evidence-chain.d.ts +9 -0
  34. package/console/dist/server/routes/evidence-chain.js +32 -0
  35. package/console/dist/server/routes/governance.d.ts +3 -0
  36. package/console/dist/server/routes/governance.js +32 -0
  37. package/console/dist/server/routes/{evolution.d.ts → lifecycle.d.ts} +2 -2
  38. package/console/dist/server/routes/lifecycle.js +48 -0
  39. package/console/dist/server/routes/principles.js +74 -1
  40. package/console/dist/server/routes/workspaces.js +8 -1
  41. package/console/dist/server/utils/response.d.ts +1 -1
  42. package/console/dist/server/utils/response.js +6 -2
  43. package/console/dist/types.d.ts +1 -0
  44. package/console/dist/ui/App.js +116 -40
  45. package/console/dist/ui/api.d.ts +88 -501
  46. package/console/dist/ui/api.js +139 -162
  47. package/console/dist/ui/components/approval-card.js +1 -1
  48. package/console/dist/ui/components/approval-detail-dialog.js +1 -1
  49. package/console/dist/ui/components/auth/login-form.d.ts +3 -0
  50. package/console/dist/ui/components/auth/login-form.js +36 -0
  51. package/console/dist/ui/components/auth/splash-screen.d.ts +8 -0
  52. package/console/dist/ui/components/auth/splash-screen.js +22 -0
  53. package/console/dist/ui/components/layout/app-sidebar.d.ts +1 -0
  54. package/console/dist/ui/components/layout/app-sidebar.js +56 -0
  55. package/console/dist/ui/components/layout/page-shell.d.ts +11 -0
  56. package/console/dist/ui/components/layout/page-shell.js +10 -0
  57. package/console/dist/ui/components/layout/section-title.d.ts +10 -0
  58. package/console/dist/ui/components/layout/section-title.js +9 -0
  59. package/console/dist/ui/components/theme-provider.d.ts +1 -1
  60. package/console/dist/ui/components/theme-provider.js +13 -8
  61. package/console/dist/ui/components/theme-toggle.js +2 -21
  62. package/console/dist/ui/components/ui/badge.d.ts +1 -1
  63. package/console/dist/ui/components/ui/badge.js +7 -5
  64. package/console/dist/ui/components/ui/button.d.ts +2 -2
  65. package/console/dist/ui/components/ui/button.js +12 -11
  66. package/console/dist/ui/components/ui/card.js +6 -6
  67. package/console/dist/ui/components/ui/sheet.d.ts +1 -1
  68. package/console/dist/ui/i18n/en.json +401 -343
  69. package/console/dist/ui/i18n/index.js +2 -2
  70. package/console/dist/ui/i18n/zh-CN.json +406 -348
  71. package/console/dist/ui/main.d.ts +1 -1
  72. package/console/dist/ui/main.js +1 -0
  73. package/console/dist/ui/pages/activation/ActivationPage.d.ts +1 -0
  74. package/console/dist/ui/pages/activation/ActivationPage.js +150 -0
  75. package/console/dist/ui/pages/activation/ActivationValidators.d.ts +20 -0
  76. package/console/dist/ui/pages/activation/ActivationValidators.js +156 -0
  77. package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +1 -0
  78. package/console/dist/ui/pages/control-center/ControlCenterPage.js +447 -0
  79. package/console/dist/ui/pages/debt/DebtPage.d.ts +1 -0
  80. package/console/dist/ui/pages/debt/DebtPage.js +5 -0
  81. package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +1 -0
  82. package/console/dist/ui/pages/design-system/DesignSystemPage.js +30 -0
  83. package/console/dist/ui/pages/focus/FocusPage.d.ts +1 -0
  84. package/console/dist/ui/pages/focus/FocusPage.js +265 -0
  85. package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +59 -0
  86. package/console/dist/ui/pages/pain/PainEvidenceValidators.js +125 -0
  87. package/console/dist/ui/pages/pain/PainPage.js +136 -0
  88. package/console/dist/ui/pages/principles/PrincipleDetailPage.js +264 -0
  89. package/console/dist/ui/pages/principles/PrinciplesPage.js +244 -0
  90. package/console/dist/ui/pages/report-problem/ReportProblemPage.js +245 -0
  91. package/console/dist/ui/pages/settings/SettingsPage.d.ts +4 -0
  92. package/console/dist/ui/pages/settings/SettingsPage.js +202 -0
  93. package/console/dist/ui/pages/settings/UpdatePage.d.ts +5 -0
  94. package/console/dist/ui/pages/settings/UpdatePage.js +168 -0
  95. package/console/dist/ui/utils/control-center-helpers.d.ts +58 -0
  96. package/console/dist/ui/utils/control-center-helpers.js +152 -0
  97. package/console/dist/ui/utils/validators.d.ts +350 -0
  98. package/console/dist/ui/utils/validators.js +995 -0
  99. package/console/dist/web/assets/app.css +672 -902
  100. package/console/dist/web/assets/app.js +6404 -15347
  101. package/console/dist/web/assets/jetbrains-mono-cyrillic-400-normal-C5JECUCT.woff2 +0 -0
  102. package/console/dist/web/assets/jetbrains-mono-cyrillic-400-normal-FGCZYWMY.woff +0 -0
  103. package/console/dist/web/assets/jetbrains-mono-cyrillic-ext-400-normal-C7IFWGF6.woff2 +0 -0
  104. package/console/dist/web/assets/jetbrains-mono-cyrillic-ext-400-normal-PWXUA557.woff +0 -0
  105. package/console/dist/web/assets/jetbrains-mono-greek-400-normal-JJNQZMPZ.woff +0 -0
  106. package/console/dist/web/assets/jetbrains-mono-greek-400-normal-O7JTTR3P.woff2 +0 -0
  107. package/console/dist/web/assets/jetbrains-mono-latin-400-normal-3OOWLGQ2.woff2 +0 -0
  108. package/console/dist/web/assets/jetbrains-mono-latin-400-normal-WDD34GPP.woff +0 -0
  109. package/console/dist/web/assets/jetbrains-mono-latin-ext-400-normal-55RNMRQS.woff +0 -0
  110. package/console/dist/web/assets/jetbrains-mono-latin-ext-400-normal-JVR3IR4Z.woff2 +0 -0
  111. package/console/dist/web/assets/jetbrains-mono-vietnamese-400-normal-7ULXAK72.woff +0 -0
  112. package/console/dist/web/assets/jetbrains-mono-vietnamese-400-normal-KU7YLUPA.woff2 +0 -0
  113. package/console/package.json +2 -1
  114. package/core/dist/runtime-v2/__tests__/admission-gate.test.js +49 -0
  115. package/core/dist/runtime-v2/__tests__/admission-gate.test.js.map +1 -1
  116. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +16 -1
  117. package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
  118. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts +21 -0
  119. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts.map +1 -0
  120. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.js +354 -0
  121. package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.js.map +1 -0
  122. package/core/dist/runtime-v2/__tests__/language-directive.test.d.ts +12 -0
  123. package/core/dist/runtime-v2/__tests__/language-directive.test.d.ts.map +1 -0
  124. package/core/dist/runtime-v2/__tests__/language-directive.test.js +162 -0
  125. package/core/dist/runtime-v2/__tests__/language-directive.test.js.map +1 -0
  126. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +23 -1
  127. package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
  128. package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js +48 -3
  129. package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js.map +1 -1
  130. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +13 -1
  131. package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
  132. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts +12 -0
  133. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts.map +1 -0
  134. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js +194 -0
  135. package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js.map +1 -0
  136. package/core/dist/runtime-v2/__tests__/runtime-config-boundary.test.js +5 -3
  137. package/core/dist/runtime-v2/__tests__/runtime-config-boundary.test.js.map +1 -1
  138. package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +1 -0
  139. package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
  140. package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js +54 -0
  141. package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
  142. package/core/dist/runtime-v2/activation/__tests__/memory-activation-state-store.test.js +15 -2
  143. package/core/dist/runtime-v2/activation/__tests__/memory-activation-state-store.test.js.map +1 -1
  144. package/core/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js +10 -0
  145. package/core/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js.map +1 -1
  146. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +17 -2
  147. package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
  148. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +36 -0
  149. package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
  150. package/core/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
  151. package/core/dist/runtime-v2/activation/activation-dispatcher.js +1 -1
  152. package/core/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
  153. package/core/dist/runtime-v2/activation/activation-types.d.ts +10 -0
  154. package/core/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
  155. package/core/dist/runtime-v2/activation/activation-types.js.map +1 -1
  156. package/core/dist/runtime-v2/activation/approval-queue.d.ts +6 -0
  157. package/core/dist/runtime-v2/activation/approval-queue.d.ts.map +1 -1
  158. package/core/dist/runtime-v2/activation/approval-queue.js +3 -0
  159. package/core/dist/runtime-v2/activation/approval-queue.js.map +1 -1
  160. package/core/dist/runtime-v2/activation/memory-activation-state-store.d.ts +2 -0
  161. package/core/dist/runtime-v2/activation/memory-activation-state-store.d.ts.map +1 -1
  162. package/core/dist/runtime-v2/activation/memory-activation-state-store.js +17 -1
  163. package/core/dist/runtime-v2/activation/memory-activation-state-store.js.map +1 -1
  164. package/core/dist/runtime-v2/activation/memory-approval-store.d.ts +6 -0
  165. package/core/dist/runtime-v2/activation/memory-approval-store.d.ts.map +1 -1
  166. package/core/dist/runtime-v2/activation/memory-approval-store.js +16 -0
  167. package/core/dist/runtime-v2/activation/memory-approval-store.js.map +1 -1
  168. package/core/dist/runtime-v2/activation/prompt-activation-reader-contract.js +1 -1
  169. package/core/dist/runtime-v2/activation/prompt-activation-reader-contract.js.map +1 -1
  170. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts +2 -0
  171. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
  172. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +34 -6
  173. package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
  174. package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts +6 -0
  175. package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
  176. package/core/dist/runtime-v2/activation/sqlite-approval-store.js +10 -0
  177. package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
  178. package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js +51 -1
  179. package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js.map +1 -1
  180. package/core/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter.test.js +145 -0
  181. package/core/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter.test.js.map +1 -1
  182. package/core/dist/runtime-v2/adapter/json-extractor.d.ts +13 -0
  183. package/core/dist/runtime-v2/adapter/json-extractor.d.ts.map +1 -1
  184. package/core/dist/runtime-v2/adapter/json-extractor.js +103 -0
  185. package/core/dist/runtime-v2/adapter/json-extractor.js.map +1 -1
  186. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts +4 -2
  187. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts.map +1 -1
  188. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js +57 -5
  189. package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js.map +1 -1
  190. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts +18 -0
  191. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts.map +1 -0
  192. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js +633 -0
  193. package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js.map +1 -0
  194. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +92 -0
  195. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -1
  196. package/core/dist/runtime-v2/config/index.d.ts +3 -1
  197. package/core/dist/runtime-v2/config/index.d.ts.map +1 -1
  198. package/core/dist/runtime-v2/config/index.js +1 -0
  199. package/core/dist/runtime-v2/config/index.js.map +1 -1
  200. package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts +93 -0
  201. package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts.map +1 -0
  202. package/core/dist/runtime-v2/config/pd-config-agent-binding.js +184 -0
  203. package/core/dist/runtime-v2/config/pd-config-agent-binding.js.map +1 -0
  204. package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
  205. package/core/dist/runtime-v2/config/pd-config-defaults.js +2 -0
  206. package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
  207. package/core/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -1
  208. package/core/dist/runtime-v2/config/pd-config-effective.js +3 -0
  209. package/core/dist/runtime-v2/config/pd-config-effective.js.map +1 -1
  210. package/core/dist/runtime-v2/config/pd-config-types.d.ts +8 -0
  211. package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
  212. package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -1
  213. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts +13 -0
  214. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts.map +1 -0
  215. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js +97 -0
  216. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js.map +1 -0
  217. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +3 -2
  218. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
  219. package/core/dist/runtime-v2/diagnostician-prompt-builder.js +6 -4
  220. package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
  221. package/core/dist/runtime-v2/evidence-sanitizer.d.ts +57 -0
  222. package/core/dist/runtime-v2/evidence-sanitizer.d.ts.map +1 -0
  223. package/core/dist/runtime-v2/evidence-sanitizer.js +213 -0
  224. package/core/dist/runtime-v2/evidence-sanitizer.js.map +1 -0
  225. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts +7 -0
  226. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts.map +1 -0
  227. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js +170 -0
  228. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js.map +1 -0
  229. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts +18 -0
  230. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts.map +1 -0
  231. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js +277 -0
  232. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js.map +1 -0
  233. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts +13 -0
  234. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts.map +1 -0
  235. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +264 -0
  236. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -0
  237. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts +16 -0
  238. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts.map +1 -0
  239. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js +316 -0
  240. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js.map +1 -0
  241. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts +126 -0
  242. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts.map +1 -0
  243. package/core/dist/runtime-v2/evidence-triage/admission-events.js +159 -0
  244. package/core/dist/runtime-v2/evidence-triage/admission-events.js.map +1 -0
  245. package/core/dist/runtime-v2/evidence-triage/index.d.ts +16 -0
  246. package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -0
  247. package/core/dist/runtime-v2/evidence-triage/index.js +13 -0
  248. package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -0
  249. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +48 -0
  250. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts.map +1 -0
  251. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +131 -0
  252. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js.map +1 -0
  253. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +32 -0
  254. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -0
  255. package/core/dist/runtime-v2/evidence-triage/triage-policy.js +95 -0
  256. package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -0
  257. package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts +116 -0
  258. package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts.map +1 -0
  259. package/core/dist/runtime-v2/evidence-triage/trigger-controller.js +218 -0
  260. package/core/dist/runtime-v2/evidence-triage/trigger-controller.js.map +1 -0
  261. package/core/dist/runtime-v2/evidence-triage/types.d.ts +65 -0
  262. package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -0
  263. package/core/dist/runtime-v2/evidence-triage/types.js +38 -0
  264. package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -0
  265. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +10 -0
  266. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  267. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  268. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -0
  269. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  270. package/core/dist/runtime-v2/index.d.ts +8 -1
  271. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  272. package/core/dist/runtime-v2/index.js +7 -1
  273. package/core/dist/runtime-v2/index.js.map +1 -1
  274. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts +12 -0
  275. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts.map +1 -0
  276. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js +83 -0
  277. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js.map +1 -0
  278. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +10 -0
  279. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
  280. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +13 -1
  281. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
  282. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +3 -0
  283. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
  284. package/core/dist/runtime-v2/internalization/scribe-runner.js +2 -0
  285. package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
  286. package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js +1 -1
  287. package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js.map +1 -1
  288. package/core/dist/runtime-v2/language-directive.d.ts +80 -0
  289. package/core/dist/runtime-v2/language-directive.d.ts.map +1 -0
  290. package/core/dist/runtime-v2/language-directive.js +108 -0
  291. package/core/dist/runtime-v2/language-directive.js.map +1 -0
  292. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  293. package/core/dist/runtime-v2/pain-signal-observability.js +24 -11
  294. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  295. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +16 -0
  296. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  297. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +97 -6
  298. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  299. package/core/dist/runtime-v2/pain-to-principle-service.d.ts +7 -0
  300. package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  301. package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
  302. package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  303. package/core/dist/runtime-v2/proven-channel-baseline.d.ts.map +1 -1
  304. package/core/dist/runtime-v2/proven-channel-baseline.js +14 -0
  305. package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
  306. package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js +40 -0
  307. package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js.map +1 -1
  308. package/core/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
  309. package/core/dist/runtime-v2/runner/base-peer-runner.js +1 -0
  310. package/core/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
  311. package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts +10 -0
  312. package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts.map +1 -1
  313. package/core/dist/runtime-v2/runner/diagnostician-runner-options.js +1 -0
  314. package/core/dist/runtime-v2/runner/diagnostician-runner-options.js.map +1 -1
  315. package/core/dist/runtime-v2/runner/diagnostician-runner.d.ts.map +1 -1
  316. package/core/dist/runtime-v2/runner/diagnostician-runner.js +28 -4
  317. package/core/dist/runtime-v2/runner/diagnostician-runner.js.map +1 -1
  318. package/core/dist/runtime-v2/runner/peer-runner-types.d.ts +9 -0
  319. package/core/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
  320. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
  321. package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js +34 -1
  322. package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js.map +1 -1
  323. package/core/dist/runtime-v2/store/runtime-state-manager.js +1 -0
  324. package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
  325. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  326. package/core/dist/runtime-v2/store/sqlite-connection.js +9 -1
  327. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  328. package/core/dist/runtime-v2/store/task/sqlite-task-store.js +1 -1
  329. package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  330. package/core/dist/runtime-v2/task-status.d.ts +4 -4
  331. package/core/dist/runtime-v2/task-status.d.ts.map +1 -1
  332. package/core/dist/runtime-v2/task-status.js +2 -2
  333. package/core/dist/runtime-v2/task-status.js.map +1 -1
  334. package/core/package.json +1 -1
  335. package/package.json +2 -2
  336. package/pd-cli/dist/commands/console.d.ts +2 -0
  337. package/pd-cli/dist/commands/console.d.ts.map +1 -1
  338. package/pd-cli/dist/commands/console.js +6 -1
  339. package/pd-cli/dist/commands/console.js.map +1 -1
  340. package/pd-cli/dist/commands/diagnose.d.ts.map +1 -1
  341. package/pd-cli/dist/commands/diagnose.js +18 -1
  342. package/pd-cli/dist/commands/diagnose.js.map +1 -1
  343. package/pd-cli/dist/commands/pain-evidence.d.ts +41 -0
  344. package/pd-cli/dist/commands/pain-evidence.d.ts.map +1 -0
  345. package/pd-cli/dist/commands/pain-evidence.js +177 -0
  346. package/pd-cli/dist/commands/pain-evidence.js.map +1 -0
  347. package/pd-cli/dist/commands/pain-record.d.ts.map +1 -1
  348. package/pd-cli/dist/commands/pain-record.js +24 -9
  349. package/pd-cli/dist/commands/pain-record.js.map +1 -1
  350. package/pd-cli/dist/commands/pain-retry.d.ts +19 -0
  351. package/pd-cli/dist/commands/pain-retry.d.ts.map +1 -0
  352. package/pd-cli/dist/commands/pain-retry.js +485 -0
  353. package/pd-cli/dist/commands/pain-retry.js.map +1 -0
  354. package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
  355. package/pd-cli/dist/commands/runtime-internalization-run-once.js +59 -9
  356. package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
  357. package/pd-cli/dist/commands/runtime-uat.d.ts +1 -0
  358. package/pd-cli/dist/commands/runtime-uat.d.ts.map +1 -1
  359. package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts +2 -0
  360. package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts.map +1 -0
  361. package/pd-cli/dist/commands/runtime-uat.guard.test.js +155 -0
  362. package/pd-cli/dist/commands/runtime-uat.guard.test.js.map +1 -0
  363. package/pd-cli/dist/commands/runtime-uat.js +29 -3
  364. package/pd-cli/dist/commands/runtime-uat.js.map +1 -1
  365. package/pd-cli/dist/config-reader.d.ts +25 -0
  366. package/pd-cli/dist/config-reader.d.ts.map +1 -0
  367. package/pd-cli/dist/config-reader.js +109 -0
  368. package/pd-cli/dist/config-reader.js.map +1 -0
  369. package/pd-cli/dist/index.js +40 -5
  370. package/pd-cli/dist/index.js.map +1 -1
  371. package/pd-cli/dist/services/console-launcher.d.ts.map +1 -1
  372. package/pd-cli/dist/services/console-launcher.js +29 -15
  373. package/pd-cli/dist/services/console-launcher.js.map +1 -1
  374. package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
  375. package/pd-cli/dist/services/demo-story-a-runner.js +1 -0
  376. package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
  377. package/pd-cli/dist/utils/production-workspace-guard.d.ts +77 -0
  378. package/pd-cli/dist/utils/production-workspace-guard.d.ts.map +1 -0
  379. package/pd-cli/dist/utils/production-workspace-guard.js +170 -0
  380. package/pd-cli/dist/utils/production-workspace-guard.js.map +1 -0
  381. package/pd-cli/dist/utils/production-workspace-guard.test.d.ts +2 -0
  382. package/pd-cli/dist/utils/production-workspace-guard.test.d.ts.map +1 -0
  383. package/pd-cli/dist/utils/production-workspace-guard.test.js +95 -0
  384. package/pd-cli/dist/utils/production-workspace-guard.test.js.map +1 -0
  385. package/pd-cli/package.json +1 -1
  386. package/plugin/dist/commands/pain.js +27 -2
  387. package/plugin/dist/core/pain-diagnostic-gate.d.ts +6 -0
  388. package/plugin/dist/core/pain-diagnostic-gate.js +9 -0
  389. package/plugin/dist/hooks/after-tool-call-helpers.d.ts +90 -0
  390. package/plugin/dist/hooks/after-tool-call-helpers.js +486 -0
  391. package/plugin/dist/hooks/after-tool-call-types.d.ts +92 -0
  392. package/plugin/dist/hooks/after-tool-call-types.js +13 -0
  393. package/plugin/dist/hooks/gate-block-helper.js +73 -29
  394. package/plugin/dist/hooks/llm.js +49 -29
  395. package/plugin/dist/hooks/message-sanitize.d.ts +21 -0
  396. package/plugin/dist/hooks/message-sanitize.js +30 -0
  397. package/plugin/dist/hooks/pain.d.ts +26 -3
  398. package/plugin/dist/hooks/pain.js +165 -425
  399. package/plugin/dist/hooks/prompt.js +3 -2
  400. package/plugin/dist/hooks/trajectory-evidence.d.ts +11 -0
  401. package/plugin/dist/hooks/trajectory-evidence.js +65 -0
  402. package/plugin/dist/hooks/triage-adapter.d.ts +82 -0
  403. package/plugin/dist/hooks/triage-adapter.js +121 -0
  404. package/console/dist/server/models/EventLogReadModel.d.ts +0 -33
  405. package/console/dist/server/models/EventLogReadModel.js +0 -218
  406. package/console/dist/server/models/EvolutionConsoleModel.d.ts +0 -79
  407. package/console/dist/server/models/EvolutionConsoleModel.js +0 -179
  408. package/console/dist/server/models/FeedbackConsoleModel.d.ts +0 -38
  409. package/console/dist/server/models/FeedbackConsoleModel.js +0 -129
  410. package/console/dist/server/models/GateConsoleModel.d.ts +0 -50
  411. package/console/dist/server/models/GateConsoleModel.js +0 -151
  412. package/console/dist/server/models/OverviewConsoleModel.d.ts +0 -22
  413. package/console/dist/server/models/OverviewConsoleModel.js +0 -202
  414. package/console/dist/server/models/PipelineStatsModel.d.ts +0 -35
  415. package/console/dist/server/models/PipelineStatsModel.js +0 -129
  416. package/console/dist/server/models/SampleConsoleModel.d.ts +0 -21
  417. package/console/dist/server/models/SampleConsoleModel.js +0 -188
  418. package/console/dist/server/models/ThinkingModelsConsoleModel.d.ts +0 -22
  419. package/console/dist/server/models/ThinkingModelsConsoleModel.js +0 -75
  420. package/console/dist/server/routes/agents.d.ts +0 -3
  421. package/console/dist/server/routes/agents.js +0 -442
  422. package/console/dist/server/routes/central.d.ts +0 -5
  423. package/console/dist/server/routes/central.js +0 -31
  424. package/console/dist/server/routes/events.d.ts +0 -10
  425. package/console/dist/server/routes/events.js +0 -99
  426. package/console/dist/server/routes/evolution.js +0 -73
  427. package/console/dist/server/routes/feedback.d.ts +0 -3
  428. package/console/dist/server/routes/feedback.js +0 -65
  429. package/console/dist/server/routes/gates.d.ts +0 -3
  430. package/console/dist/server/routes/gates.js +0 -52
  431. package/console/dist/server/routes/overview.d.ts +0 -3
  432. package/console/dist/server/routes/overview.js +0 -49
  433. package/console/dist/server/routes/pipeline.d.ts +0 -3
  434. package/console/dist/server/routes/pipeline.js +0 -33
  435. package/console/dist/server/routes/samples.d.ts +0 -3
  436. package/console/dist/server/routes/samples.js +0 -101
  437. package/console/dist/server/routes/thinking-models.d.ts +0 -3
  438. package/console/dist/server/routes/thinking-models.js +0 -54
  439. package/console/dist/ui/components/app-sidebar.d.ts +0 -7
  440. package/console/dist/ui/components/app-sidebar.js +0 -75
  441. package/console/dist/ui/components/compare-view.d.ts +0 -7
  442. package/console/dist/ui/components/compare-view.js +0 -32
  443. package/console/dist/ui/components/data-freshness-indicator.d.ts +0 -10
  444. package/console/dist/ui/components/data-freshness-indicator.js +0 -63
  445. package/console/dist/ui/components/health-diagnostic-card.d.ts +0 -15
  446. package/console/dist/ui/components/health-diagnostic-card.js +0 -42
  447. package/console/dist/ui/components/page-header.d.ts +0 -10
  448. package/console/dist/ui/components/page-header.js +0 -37
  449. package/console/dist/ui/hooks/useAutoRefresh.d.ts +0 -13
  450. package/console/dist/ui/hooks/useAutoRefresh.js +0 -64
  451. package/console/dist/ui/hooks/useBookmarks.d.ts +0 -6
  452. package/console/dist/ui/hooks/useBookmarks.js +0 -43
  453. package/console/dist/ui/hooks/useDebounce.d.ts +0 -2
  454. package/console/dist/ui/hooks/useDebounce.js +0 -32
  455. package/console/dist/ui/hooks/useKeyboardNavigation.d.ts +0 -14
  456. package/console/dist/ui/hooks/useKeyboardNavigation.js +0 -75
  457. package/console/dist/ui/pages/AgentsPage.d.ts +0 -1
  458. package/console/dist/ui/pages/AgentsPage.js +0 -167
  459. package/console/dist/ui/pages/ApprovalsPage.d.ts +0 -1
  460. package/console/dist/ui/pages/ApprovalsPage.js +0 -123
  461. package/console/dist/ui/pages/CentralPage.d.ts +0 -1
  462. package/console/dist/ui/pages/CentralPage.js +0 -57
  463. package/console/dist/ui/pages/DataFlowPage.d.ts +0 -1
  464. package/console/dist/ui/pages/DataFlowPage.js +0 -158
  465. package/console/dist/ui/pages/EventLogPage.d.ts +0 -1
  466. package/console/dist/ui/pages/EventLogPage.js +0 -176
  467. package/console/dist/ui/pages/EvolutionPage.d.ts +0 -1
  468. package/console/dist/ui/pages/EvolutionPage.js +0 -118
  469. package/console/dist/ui/pages/FeedbackPage.d.ts +0 -1
  470. package/console/dist/ui/pages/FeedbackPage.js +0 -46
  471. package/console/dist/ui/pages/GatesPage.d.ts +0 -1
  472. package/console/dist/ui/pages/GatesPage.js +0 -31
  473. package/console/dist/ui/pages/LoginPage.d.ts +0 -5
  474. package/console/dist/ui/pages/LoginPage.js +0 -39
  475. package/console/dist/ui/pages/OverviewPage.d.ts +0 -1
  476. package/console/dist/ui/pages/OverviewPage.js +0 -50
  477. package/console/dist/ui/pages/PainPage.js +0 -50
  478. package/console/dist/ui/pages/PrincipleDetailPage.js +0 -145
  479. package/console/dist/ui/pages/PrinciplesPage.js +0 -322
  480. package/console/dist/ui/pages/ReportProblemPage.js +0 -186
  481. package/console/dist/ui/pages/SamplesPage.d.ts +0 -1
  482. package/console/dist/ui/pages/SamplesPage.js +0 -105
  483. package/console/dist/ui/pages/SettingsPage.d.ts +0 -1
  484. package/console/dist/ui/pages/SettingsPage.js +0 -86
  485. package/console/dist/ui/pages/TasksPage.d.ts +0 -1
  486. package/console/dist/ui/pages/TasksPage.js +0 -373
  487. package/console/dist/ui/pages/ThinkingModelsPage.d.ts +0 -1
  488. package/console/dist/ui/pages/ThinkingModelsPage.js +0 -32
  489. package/console/dist/ui/pages/UpdatePage.d.ts +0 -1
  490. package/console/dist/ui/pages/UpdatePage.js +0 -142
  491. /package/console/dist/ui/pages/{PainPage.d.ts → pain/PainPage.d.ts} +0 -0
  492. /package/console/dist/ui/pages/{PrincipleDetailPage.d.ts → principles/PrincipleDetailPage.d.ts} +0 -0
  493. /package/console/dist/ui/pages/{PrinciplesPage.d.ts → principles/PrinciplesPage.d.ts} +0 -0
  494. /package/console/dist/ui/pages/{ReportProblemPage.d.ts → report-problem/ReportProblemPage.d.ts} +0 -0
@@ -2,31 +2,26 @@ import * as http from 'http';
2
2
  import * as fs from 'fs';
3
3
  import * as path from 'path';
4
4
  import { fileURLToPath } from 'url';
5
- import { RuntimeStateManager, CandidateIntakeService, PrincipleTreeLedgerAdapter, PainChainReadModel, PruningReadModel, OperatorHealthReadModel, listPruningReviews, appendPruningReview, } from '@principles/core/runtime-v2';
5
+ import { RuntimeStateManager, CandidateIntakeService, PrincipleTreeLedgerAdapter, PainChainReadModel, PruningReadModel, OperatorHealthReadModel, } from '@principles/core/runtime-v2';
6
6
  import { AuthConfig } from './config/AuthConfig.js';
7
7
  import { WorkspaceConfigStore } from './config/WorkspaceConfigStore.js';
8
8
  import { WorkspaceService } from './models/WorkspaceService.js';
9
- import { handleOverviewRoute, disposeOverviewModels } from './routes/overview.js';
10
- import { handleGatesRoute, disposeGateModels } from './routes/gates.js';
11
- import { handleFeedbackRoute, disposeFeedbackModels } from './routes/feedback.js';
12
9
  import { handleFeedbackReportsRoute, disposeFeedbackReportModels } from './routes/feedback-reports.js';
13
10
  import { loadWorkspaceFeatureFlags, buildFeedbackChannelFlags, } from './config/feature-flags.js';
14
- import { handleSamplesRoute, disposeSampleModels } from './routes/samples.js';
15
11
  import { handleApprovalsRoute, disposeApprovalsModels } from './routes/approvals.js';
16
- import { handleEvolutionRoute, disposeEvolutionModels } from './routes/evolution.js';
17
- import { handleThinkingModelsRoute, disposeThinkingModels } from './routes/thinking-models.js';
18
12
  import { handleHealthRoute, disposeHealthModels } from './routes/health.js';
19
- import { handlePipelineRoute, disposePipelineModels } from './routes/pipeline.js';
20
- import { handleEventsRoute, disposeEventsModels } from './routes/events.js';
21
13
  import { handlePrinciplesRoute, disposePrinciplesModels } from './routes/principles.js';
14
+ import { handleLifecycleRoute, disposeLifecycleModels } from './routes/lifecycle.js';
15
+ import { handleActivationsRoute, disposeActivationsModels } from './routes/activations.js';
16
+ import { handleApprovalsGroupedRoute, disposeApprovalsGroupedModels } from './routes/approvals-grouped.js';
17
+ import { handleGovernanceRoute, disposeGovernanceModels } from './routes/governance.js';
18
+ import { handleEvidenceChainRoute, disposeEvidenceChainModels } from './routes/evidence-chain.js';
22
19
  import { createWorkspacesRoutes } from './routes/workspaces.js';
23
- import { createCentralRoutes } from './routes/central.js';
24
- import { handleAgentsRoute, disposeAgentModels } from './routes/agents.js';
25
20
  import { handleUpdateRoute } from './routes/update.js';
26
21
  import { handleUpdateHistoryRoute } from './routes/update-history.js';
27
22
  import { handleStateRoute } from './routes/state.js';
28
- import { sendJson, sendSuccess, sendError, sendNotFound, sendUnauthorized } from './utils/response.js';
29
- import { parseDiagnosticianOutput, parseDiagnosticInput, parseSeverityFromDiagnostic, parseReasonSummaryFromDiagnostic, parseRecommendationKind } from './utils/diagnostic-parser.js';
23
+ import { handleConfigRoute } from './routes/config.js';
24
+ import { sendJson, sendNotFound, sendUnauthorized } from './utils/response.js';
30
25
  const __filename = fileURLToPath(import.meta.url);
31
26
  const __dirname = path.dirname(__filename);
32
27
  // WEB_ROOT calculation: server is at PKG_ROOT/dist/server/index.js
@@ -223,19 +218,15 @@ async function initServices(workspaceDir, authConfig) {
223
218
  };
224
219
  }
225
220
  async function closeServices(services) {
226
- disposeOverviewModels();
227
- disposeGateModels();
228
- disposeFeedbackModels();
229
221
  disposeFeedbackReportModels();
230
- disposeSampleModels();
231
222
  disposeApprovalsModels();
232
- disposeEvolutionModels();
233
- disposeThinkingModels();
223
+ disposeApprovalsGroupedModels();
234
224
  disposeHealthModels();
235
- disposePipelineModels();
236
- disposeEventsModels();
237
225
  disposePrinciplesModels();
238
- disposeAgentModels();
226
+ disposeLifecycleModels();
227
+ disposeActivationsModels();
228
+ disposeGovernanceModels();
229
+ disposeEvidenceChainModels();
239
230
  services.workspaceService.dispose();
240
231
  try {
241
232
  await services.healthReadModel.close();
@@ -259,7 +250,6 @@ async function closeServices(services) {
259
250
  // ── Route handler ───────────────────────────────────────────────────────────
260
251
  function handleRequest(services) {
261
252
  const { handleWorkspacesRoute } = createWorkspacesRoutes(services.configStore, services.workspaceService);
262
- const { handleCentralRoute } = createCentralRoutes(services.workspaceService);
263
253
  return (req, res) => {
264
254
  const urlPath = req.url?.split('?')[0] ?? '/';
265
255
  // GET /
@@ -289,35 +279,16 @@ function handleRequest(services) {
289
279
  sendUnauthorized(res);
290
280
  return;
291
281
  }
292
- // ── New API routes ──────────────────────────────────────────────────
293
- // GET /api/overview, /api/overview/health
294
- if (urlPath === '/api/overview' || urlPath.startsWith('/api/overview/')) {
295
- const subPath = urlPath.slice('/api/overview'.length);
296
- asyncHandler(() => handleOverviewRoute(req, res, services.workspaceDir, subPath))(req, res);
297
- return;
298
- }
299
- // GET /api/gate/stats, /api/gate/blocks
300
- if (urlPath === '/api/gate' || urlPath.startsWith('/api/gate/')) {
301
- const subPath = urlPath.slice('/api/gate'.length);
302
- asyncHandler(() => handleGatesRoute(req, res, services.workspaceDir, subPath))(req, res);
303
- return;
304
- }
305
- // GET/POST /api/feedback/reports, /api/feedback/reports/:id — local MVP seed feedback drafts (PRI-285)
282
+ // ── API routes ──────────────────────────────────────────────────
283
+ // GET/POST /api/feedback/reports, /api/feedback/reports/:id
306
284
  if (urlPath === '/api/feedback/reports' || urlPath.startsWith('/api/feedback/reports/')) {
307
285
  const subPath = urlPath.slice('/api/feedback/reports'.length);
308
286
  asyncHandler(() => handleFeedbackReportsRoute(req, res, { workspaceDir: services.workspaceDir, subPath, featureFlags: services.feedbackFlags }))(req, res);
309
287
  return;
310
288
  }
311
- // GET /api/feedback/gfi, /api/feedback/empathy-events, /api/feedback/gate-blocks
312
- if (urlPath === '/api/feedback' || urlPath.startsWith('/api/feedback/')) {
313
- const subPath = urlPath.slice('/api/feedback'.length);
314
- asyncHandler(() => handleFeedbackRoute(req, res, services.workspaceDir, subPath))(req, res);
315
- return;
316
- }
317
- // GET /api/samples, /api/samples/:id, /api/samples/:id/review
318
- if (urlPath === '/api/samples' || urlPath.startsWith('/api/samples/')) {
319
- const subPath = urlPath.slice('/api/samples'.length);
320
- asyncHandler(() => handleSamplesRoute(req, res, services.workspaceDir, subPath))(req, res);
289
+ // GET /api/v1/approvals/grouped (MUST be before approvals catch-all)
290
+ if (urlPath === '/api/v1/approvals/grouped') {
291
+ asyncHandler(() => handleApprovalsGroupedRoute(req, res, services.workspaceDir))(req, res);
321
292
  return;
322
293
  }
323
294
  // GET /api/v1/approvals, /api/v1/approvals/:id, POST /api/v1/approvals/:id/approve, /api/v1/approvals/:id/reject
@@ -326,42 +297,18 @@ function handleRequest(services) {
326
297
  asyncHandler(() => handleApprovalsRoute(req, res, services.workspaceDir, subPath))(req, res);
327
298
  return;
328
299
  }
329
- // GET /api/evolution/stats, /api/evolution/tasks, /api/evolution/principles, /api/evolution/queue
330
- if (urlPath === '/api/evolution' || urlPath.startsWith('/api/evolution/')) {
331
- const subPath = urlPath.slice('/api/evolution'.length);
332
- asyncHandler(() => handleEvolutionRoute(req, res, services.workspaceDir, subPath))(req, res);
333
- return;
334
- }
335
300
  // GET /api/principles, /api/principles/:id
336
301
  if (urlPath === '/api/principles' || urlPath.startsWith('/api/principles/')) {
337
302
  const subPath = urlPath.slice('/api/principles'.length);
338
303
  asyncHandler(() => handlePrinciplesRoute({ req, res, workspaceDir: services.workspaceDir, subPath }))(req, res);
339
304
  return;
340
305
  }
341
- // GET /api/thinking-models, /api/thinking-models/:id
342
- if (urlPath === '/api/thinking-models' || urlPath.startsWith('/api/thinking-models/')) {
343
- const subPath = urlPath.slice('/api/thinking-models'.length);
344
- asyncHandler(() => handleThinkingModelsRoute(req, res, services.workspaceDir, subPath))(req, res);
345
- return;
346
- }
347
306
  // Workspace management routes
348
307
  if (urlPath === '/api/workspaces' || urlPath.startsWith('/api/workspaces/')) {
349
308
  const subPath = urlPath.slice('/api/workspaces'.length);
350
309
  asyncHandler(() => handleWorkspacesRoute(req, res, subPath))(req, res);
351
310
  return;
352
311
  }
353
- // Central overview routes
354
- if (urlPath === '/api/central' || urlPath.startsWith('/api/central/')) {
355
- const subPath = urlPath.slice('/api/central'.length);
356
- asyncHandler(() => handleCentralRoute(req, res, subPath))(req, res);
357
- return;
358
- }
359
- // Agent status routes
360
- if (urlPath === '/api/agents' || urlPath.startsWith('/api/agents/')) {
361
- const subPath = urlPath.slice('/api/agents'.length);
362
- asyncHandler(() => handleAgentsRoute(req, res, services.workspaceDir, subPath))(req, res);
363
- return;
364
- }
365
312
  // GET /api/update/history (MUST be before update catch-all)
366
313
  if (urlPath === '/api/update/history') {
367
314
  asyncHandler(() => handleUpdateHistoryRoute(req, res, services.workspaceDir, ''))(req, res);
@@ -379,334 +326,38 @@ function handleRequest(services) {
379
326
  asyncHandler(() => handleStateRoute(req, res, services.workspaceDir, subPath))(req, res);
380
327
  return;
381
328
  }
382
- // ── Legacy API routes (preserved for backward compatibility) ──────
383
- // GET /api/health
384
- if (urlPath === '/api/health') {
385
- asyncHandler(() => handleHealthRoute(req, res, services.workspaceDir))(req, res);
386
- return;
387
- }
388
- // GET /api/pipeline
389
- if (urlPath === '/api/pipeline') {
390
- asyncHandler(() => handlePipelineRoute(req, res, services.workspaceDir))(req, res);
391
- return;
392
- }
393
- // GET /api/events
394
- if (urlPath === '/api/events' || urlPath.startsWith('/api/events/')) {
395
- const subPath = urlPath.slice('/api/events'.length);
396
- asyncHandler(() => handleEventsRoute({ req, res, workspaceDir: services.workspaceDir, subPath }))(req, res);
329
+ // Config API routes: /api/v1/config/summary, /api/v1/config/catalog,
330
+ // /api/v1/config/agents/:name/binding, /api/v1/config/readiness/:name
331
+ if (urlPath === '/api/v1/config' || urlPath.startsWith('/api/v1/config/')) {
332
+ const subPath = urlPath.slice('/api/v1/config'.length);
333
+ asyncHandler(() => handleConfigRoute(req, res, { workspaceDir: services.workspaceDir, subPath }))(req, res);
397
334
  return;
398
335
  }
399
- // GET /api/status
400
- if (urlPath === '/api/status') {
401
- if (req.method !== 'GET') {
402
- sendJson(res, 405, { success: false, error: 'Method not allowed' });
403
- return;
404
- }
405
- asyncHandler(async (_req, response) => {
406
- const snapshot = await services.healthReadModel.getSnapshot();
407
- const pruningSummary = services.pruningReadModel.getHealthSummary();
408
- const { byStatus } = pruningSummary;
409
- const principleActive = (byStatus.active ?? 0) + (byStatus.candidate ?? 0);
410
- const principlePending = (byStatus.probation ?? 0) + (byStatus.deprecated ?? 0);
411
- const status = snapshot.overallStatus === 'healthy' ? 'healthy'
412
- : snapshot.overallStatus === 'degraded' ? 'attention'
413
- : 'problem';
414
- const result = {
415
- status,
416
- principleTotal: pruningSummary.totalPrinciples,
417
- principleActive,
418
- principlePending,
419
- weeklyChange: 0,
420
- };
421
- sendSuccess(response, result);
422
- })(req, res);
336
+ // CR8: GET /api/v1/lifecycle/principles/:principleId
337
+ if (urlPath.startsWith('/api/v1/lifecycle')) {
338
+ const subPath = urlPath.slice('/api/v1/lifecycle'.length);
339
+ asyncHandler(() => handleLifecycleRoute(req, res, services.workspaceDir, subPath))(req, res);
423
340
  return;
424
341
  }
425
- // GET /api/tasks
426
- if (urlPath === '/api/tasks') {
427
- if (req.method !== 'GET') {
428
- sendJson(res, 405, { success: false, error: 'Method not allowed' });
429
- return;
430
- }
431
- asyncHandler(async (_req, response) => {
432
- const pruningSignals = services.pruningReadModel.getPrincipleSignals();
433
- const diagnosticianTasks = await services.stateManager.listTasks({ taskKind: 'diagnostician', limit: 50 });
434
- const needsConfirmation = [];
435
- const candidateBatches = await Promise.all(diagnosticianTasks.map((t) => services.stateManager.getCandidatesByTaskId(t.taskId)));
436
- for (let ci = 0; ci < candidateBatches.length; ci++) {
437
- const candidates = candidateBatches[ci];
438
- const parentTask = diagnosticianTasks[ci];
439
- for (const c of candidates) {
440
- if (c.status !== 'pending')
441
- continue;
442
- const severity = parseSeverityFromDiagnostic(parentTask.diagnosticJson);
443
- const recommendationKind = parseRecommendationKind(c.sourceRecommendationJson);
444
- needsConfirmation.push({
445
- id: c.candidateId,
446
- title: c.title,
447
- sourceSummary: c.description,
448
- priority: 'needs_confirmation',
449
- kind: 'approval',
450
- createdAt: c.createdAt,
451
- confidence: c.confidence ?? undefined,
452
- severity,
453
- recommendationKind,
454
- });
455
- }
456
- }
457
- const suggestedAttention = pruningSignals
458
- .filter((s) => s.riskLevel === 'watch' || s.riskLevel === 'review')
459
- .map((s) => ({
460
- id: s.principleId,
461
- title: `Principle "${s.principleId}" needs attention`,
462
- sourceSummary: s.reasons.join('; '),
463
- priority: 'suggested_attention',
464
- kind: 'cleanup',
465
- createdAt: s.createdAt,
466
- lastTriggeredAt: s.updatedAt,
467
- triggerCount: s.derivedPainCount,
468
- }));
469
- const recentTasks = await services.stateManager.listTasks({ status: 'succeeded', limit: 5 });
470
- const recentActivity = recentTasks.map((t) => {
471
- const reasonSummary = parseReasonSummaryFromDiagnostic(t.diagnosticJson);
472
- const severity = parseSeverityFromDiagnostic(t.diagnosticJson);
473
- const { attemptCount } = t;
474
- const { maxAttempts } = t;
475
- const kindLabels = {
476
- diagnostician: '诊断分析',
477
- principle_candidate_intake: '原则候选录入',
478
- dreamer: '深度反思',
479
- keyword_optimization: '关键词优化',
480
- };
481
- return {
482
- id: t.taskId,
483
- title: reasonSummary || kindLabels[t.taskKind] || t.taskKind,
484
- sourceSummary: reasonSummary ? `来源: ${t.taskKind}` : '',
485
- priority: 'recent_activity',
486
- kind: 'completed',
487
- createdAt: t.createdAt,
488
- status: t.status,
489
- severity,
490
- attemptCount,
491
- maxAttempts,
492
- };
493
- });
494
- sendSuccess(response, { needsConfirmation, suggestedAttention, recentActivity });
495
- })(req, res);
342
+ // CR8: GET /api/v1/activations
343
+ if (urlPath === '/api/v1/activations' || urlPath.startsWith('/api/v1/activations/')) {
344
+ const subPath = urlPath.slice('/api/v1/activations'.length);
345
+ asyncHandler(() => handleActivationsRoute(req, res, services.workspaceDir, subPath))(req, res);
496
346
  return;
497
347
  }
498
- // GET /api/tasks/:id/evidence
499
- if (urlPath.startsWith('/api/tasks/') && urlPath.endsWith('/evidence')) {
500
- if (req.method !== 'GET') {
501
- sendJson(res, 405, { success: false, error: 'Method not allowed' });
502
- return;
503
- }
504
- const parts = urlPath.split('/');
505
- const [, , , id] = parts;
506
- if (!id) {
507
- sendError(res, 400, 'missing_id', 'Missing task ID');
508
- return;
509
- }
510
- asyncHandler(async (_req, response) => {
511
- const candidate = await services.stateManager.getCandidate(id);
512
- if (candidate) {
513
- const trace = await services.painChainReadModel.traceByPainId(candidate.taskId.replace('diagnosis_', ''));
514
- const evidence = [];
515
- if (trace.runId) {
516
- evidence.push({ timestamp: trace.checkedAt, operation: 'run', problem: trace.missingLinks.join('; ') || 'run completed' });
517
- }
518
- for (const cid of trace.candidateIds) {
519
- evidence.push({ timestamp: trace.checkedAt, operation: 'candidate_generated', problem: `candidate: ${cid}` });
520
- }
521
- for (const lid of trace.ledgerEntryIds) {
522
- evidence.push({ timestamp: trace.checkedAt, operation: 'ledger_written', problem: `principle: ${lid}` });
523
- }
524
- let diagnosis = undefined;
525
- let inputInfo = undefined;
526
- const artifact = await services.stateManager.getArtifact(candidate.artifactId);
527
- if (artifact && artifact.artifactKind === 'diagnostician_output') {
528
- diagnosis = parseDiagnosticianOutput(artifact.contentJson);
529
- }
530
- const parentTask = await services.stateManager.getTask(candidate.taskId);
531
- if (parentTask?.diagnosticJson) {
532
- inputInfo = parseDiagnosticInput(parentTask.diagnosticJson);
533
- }
534
- const result = {
535
- taskId: id,
536
- summary: candidate.title,
537
- why: candidate.description,
538
- whatHappensIf: `If declined, this candidate will expire. Status: ${candidate.status}.`,
539
- evidence,
540
- diagnosis,
541
- input: inputInfo,
542
- };
543
- sendSuccess(response, result);
544
- return;
545
- }
546
- const signals = services.pruningReadModel.getPrincipleSignals();
547
- const signal = signals.find((s) => s.principleId === id);
548
- if (signal) {
549
- const result = {
550
- taskId: id,
551
- summary: `Principle lifecycle signal for "${signal.principleId}"`,
552
- why: signal.reasons.join('; '),
553
- whatHappensIf: `Risk level: ${signal.riskLevel}. Age: ${signal.ageDays} days.`,
554
- evidence: signal.reasons.map((reason) => ({ timestamp: signal.updatedAt, operation: 'pruning_signal', problem: reason })),
555
- };
556
- sendSuccess(response, result);
557
- return;
558
- }
559
- const task = await services.stateManager.getTask(id);
560
- if (task) {
561
- let diagnosis = undefined;
562
- let inputInfo = undefined;
563
- if (task.diagnosticJson) {
564
- inputInfo = parseDiagnosticInput(task.diagnosticJson);
565
- }
566
- const taskCandidates = await services.stateManager.getCandidatesByTaskId(id);
567
- if (taskCandidates.length > 0) {
568
- const [firstCandidate] = taskCandidates;
569
- const artifact = await services.stateManager.getArtifact(firstCandidate.artifactId);
570
- if (artifact && artifact.artifactKind === 'diagnostician_output') {
571
- diagnosis = parseDiagnosticianOutput(artifact.contentJson);
572
- }
573
- }
574
- const result = {
575
- taskId: id,
576
- summary: inputInfo?.reasonSummary ?? `${task.taskKind} (${task.status})`,
577
- why: diagnosis?.rootCause ?? '',
578
- whatHappensIf: `Status: ${task.status}. Attempt: ${task.attemptCount}/${task.maxAttempts}.`,
579
- evidence: [],
580
- diagnosis,
581
- input: inputInfo,
582
- };
583
- sendSuccess(response, result);
584
- return;
585
- }
586
- sendNotFound(response, 'Task or principle not found');
587
- })(req, res);
348
+ // CR8: GET /api/v1/governance/queue
349
+ if (urlPath === '/api/v1/governance/queue') {
350
+ asyncHandler(() => handleGovernanceRoute(req, res, services.workspaceDir))(req, res);
588
351
  return;
589
352
  }
590
- // GET /api/activity
591
- if (urlPath === '/api/activity') {
592
- if (req.method !== 'GET') {
593
- sendJson(res, 405, { success: false, error: 'Method not allowed' });
594
- return;
595
- }
596
- asyncHandler(async (_req, response) => {
597
- const [recentTasks, pruningReviews] = await Promise.all([
598
- services.stateManager.listTasks({ limit: 20 }),
599
- Promise.resolve(listPruningReviews(services.workspaceDir)),
600
- ]);
601
- const events = [];
602
- for (const t of recentTasks) {
603
- const eventType = t.status === 'failed' ? 'error' : t.status === 'succeeded' ? 'learned' : 'approved';
604
- events.push({ id: t.taskId, type: eventType, description: `${t.taskKind} (${t.status})`, timestamp: t.updatedAt });
605
- }
606
- for (const r of pruningReviews) {
607
- const eventType = r.decision === 'keep' ? 'approved' : r.decision === 'archive-candidate' ? 'error' : 'learned';
608
- events.push({ id: r.reviewId, type: eventType, description: `Pruning review: ${r.decision} for ${r.principleId}`, timestamp: r.reviewedAt });
609
- }
610
- events.sort((a, b) => b.timestamp.localeCompare(a.timestamp));
611
- sendSuccess(response, events);
612
- })(req, res);
353
+ // PRI-331: GET /api/v1/evidence-chain
354
+ if (urlPath === '/api/v1/evidence-chain') {
355
+ asyncHandler(() => handleEvidenceChainRoute(req, res, services.workspaceDir))(req, res);
613
356
  return;
614
357
  }
615
- // POST /api/tasks/:id/approve
616
- if (urlPath.startsWith('/api/tasks/') && urlPath.endsWith('/approve')) {
617
- if (req.method !== 'POST') {
618
- sendJson(res, 405, { success: false, error: 'Method not allowed' });
619
- return;
620
- }
621
- const parts = urlPath.split('/');
622
- const [, , , id] = parts;
623
- if (!id) {
624
- sendError(res, 400, 'missing_id', 'Missing task ID');
625
- return;
626
- }
627
- asyncHandler(async (_req, response) => {
628
- const candidate = await services.stateManager.getCandidate(id);
629
- if (!candidate) {
630
- sendNotFound(response, 'Candidate not found');
631
- return;
632
- }
633
- const transitioned = await services.stateManager.transitionCandidateStatus(id, 'pending', 'consumed');
634
- if (!transitioned) {
635
- const current = await services.stateManager.getCandidate(id);
636
- sendError(res, 409, 'conflict', `Candidate is not pending (status: ${current?.status ?? 'unknown'})`);
637
- return;
638
- }
639
- try {
640
- const entry = await services.candidateIntakeService.intake(id);
641
- sendSuccess(response, { principleId: entry.id });
642
- }
643
- catch (intakeErr) {
644
- await services.stateManager.updateCandidateStatus(id, { status: 'pending' });
645
- throw intakeErr;
646
- }
647
- })(req, res);
648
- return;
649
- }
650
- // POST /api/tasks/:id/reject
651
- if (urlPath.startsWith('/api/tasks/') && urlPath.endsWith('/reject')) {
652
- if (req.method !== 'POST') {
653
- sendJson(res, 405, { success: false, error: 'Method not allowed' });
654
- return;
655
- }
656
- const parts = urlPath.split('/');
657
- const [, , , id] = parts;
658
- if (!id) {
659
- sendError(res, 400, 'missing_id', 'Missing task ID');
660
- return;
661
- }
662
- asyncHandler(async (_req, response) => {
663
- const candidate = await services.stateManager.getCandidate(id);
664
- if (!candidate) {
665
- sendNotFound(response, 'Candidate not found');
666
- return;
667
- }
668
- const transitioned = await services.stateManager.transitionCandidateStatus(id, 'pending', 'expired');
669
- if (!transitioned) {
670
- const current = await services.stateManager.getCandidate(id);
671
- sendError(res, 409, 'conflict', `Candidate is not pending (status: ${current?.status ?? 'unknown'})`);
672
- return;
673
- }
674
- sendSuccess(response, { success: true });
675
- })(req, res);
676
- return;
677
- }
678
- // POST /api/tasks/:id/cleanup
679
- if (urlPath.startsWith('/api/tasks/') && urlPath.endsWith('/cleanup')) {
680
- if (req.method !== 'POST') {
681
- sendJson(res, 405, { success: false, error: 'Method not allowed' });
682
- return;
683
- }
684
- const parts = urlPath.split('/');
685
- const [, , , id] = parts;
686
- if (!id) {
687
- sendError(res, 400, 'missing_id', 'Missing principle ID');
688
- return;
689
- }
690
- asyncHandler(async (_req, response) => {
691
- const signals = services.pruningReadModel.getPrincipleSignals();
692
- const signal = signals.find((s) => s.principleId === id);
693
- if (!signal) {
694
- sendNotFound(response, 'Principle not found in review signals');
695
- return;
696
- }
697
- appendPruningReview(services.workspaceDir, {
698
- principleId: id,
699
- decision: 'archive-candidate',
700
- note: 'Archived via PD Console',
701
- reviewer: 'operator',
702
- });
703
- const archived = await services.stateManager.archivePrinciple(id);
704
- if (!archived) {
705
- sendNotFound(response, 'Principle not found in ledger');
706
- return;
707
- }
708
- sendSuccess(response, { success: true });
709
- })(req, res);
358
+ // GET /api/health
359
+ if (urlPath === '/api/health') {
360
+ asyncHandler(() => handleHealthRoute(req, res, services.workspaceDir))(req, res);
710
361
  return;
711
362
  }
712
363
  // 404 fallback for API routes
@@ -0,0 +1,33 @@
1
+ export interface ActivationRecord {
2
+ id: string;
3
+ artifactId: string;
4
+ principleId: string;
5
+ channel: string;
6
+ action: string;
7
+ targetRef: string;
8
+ activatedAt: string | null;
9
+ status: 'active' | 'inactive';
10
+ }
11
+ export interface ActivationsResponse {
12
+ activations: ActivationRecord[];
13
+ generatedAt: string;
14
+ /** Present when data is degraded/missing rather than genuinely empty */
15
+ note?: string;
16
+ }
17
+ export declare class ActivationsConsoleModel {
18
+ private readConnection;
19
+ private writeConnection;
20
+ private readonly workspaceDir;
21
+ constructor(workspaceDir: string);
22
+ private getReadConnection;
23
+ private getWriteConnection;
24
+ getActivations(): Promise<ActivationsResponse>;
25
+ deactivateActivation(activationId: string): Promise<{
26
+ ok: true;
27
+ } | {
28
+ ok: false;
29
+ reason: string;
30
+ nextAction: string;
31
+ }>;
32
+ dispose(): void;
33
+ }