create-principles-disciple 1.81.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 (502) 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-redaction-deep.test.d.ts +13 -0
  195. package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.d.ts.map +1 -0
  196. package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js +447 -0
  197. package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js.map +1 -0
  198. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts +12 -0
  199. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts.map +1 -0
  200. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +525 -0
  201. package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -0
  202. package/core/dist/runtime-v2/config/index.d.ts +3 -1
  203. package/core/dist/runtime-v2/config/index.d.ts.map +1 -1
  204. package/core/dist/runtime-v2/config/index.js +1 -0
  205. package/core/dist/runtime-v2/config/index.js.map +1 -1
  206. package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts +93 -0
  207. package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts.map +1 -0
  208. package/core/dist/runtime-v2/config/pd-config-agent-binding.js +184 -0
  209. package/core/dist/runtime-v2/config/pd-config-agent-binding.js.map +1 -0
  210. package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
  211. package/core/dist/runtime-v2/config/pd-config-defaults.js +2 -0
  212. package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
  213. package/core/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -1
  214. package/core/dist/runtime-v2/config/pd-config-effective.js +3 -0
  215. package/core/dist/runtime-v2/config/pd-config-effective.js.map +1 -1
  216. package/core/dist/runtime-v2/config/pd-config-types.d.ts +8 -0
  217. package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
  218. package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -1
  219. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts +13 -0
  220. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts.map +1 -0
  221. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js +97 -0
  222. package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js.map +1 -0
  223. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +3 -2
  224. package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
  225. package/core/dist/runtime-v2/diagnostician-prompt-builder.js +6 -4
  226. package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
  227. package/core/dist/runtime-v2/evidence-sanitizer.d.ts +57 -0
  228. package/core/dist/runtime-v2/evidence-sanitizer.d.ts.map +1 -0
  229. package/core/dist/runtime-v2/evidence-sanitizer.js +213 -0
  230. package/core/dist/runtime-v2/evidence-sanitizer.js.map +1 -0
  231. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts +7 -0
  232. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts.map +1 -0
  233. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js +170 -0
  234. package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js.map +1 -0
  235. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts +18 -0
  236. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts.map +1 -0
  237. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js +277 -0
  238. package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js.map +1 -0
  239. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts +13 -0
  240. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts.map +1 -0
  241. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +264 -0
  242. package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -0
  243. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts +16 -0
  244. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts.map +1 -0
  245. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js +316 -0
  246. package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js.map +1 -0
  247. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts +126 -0
  248. package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts.map +1 -0
  249. package/core/dist/runtime-v2/evidence-triage/admission-events.js +159 -0
  250. package/core/dist/runtime-v2/evidence-triage/admission-events.js.map +1 -0
  251. package/core/dist/runtime-v2/evidence-triage/index.d.ts +16 -0
  252. package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -0
  253. package/core/dist/runtime-v2/evidence-triage/index.js +13 -0
  254. package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -0
  255. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +48 -0
  256. package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts.map +1 -0
  257. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +131 -0
  258. package/core/dist/runtime-v2/evidence-triage/source-descriptors.js.map +1 -0
  259. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +32 -0
  260. package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -0
  261. package/core/dist/runtime-v2/evidence-triage/triage-policy.js +95 -0
  262. package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -0
  263. package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts +116 -0
  264. package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts.map +1 -0
  265. package/core/dist/runtime-v2/evidence-triage/trigger-controller.js +218 -0
  266. package/core/dist/runtime-v2/evidence-triage/trigger-controller.js.map +1 -0
  267. package/core/dist/runtime-v2/evidence-triage/types.d.ts +65 -0
  268. package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -0
  269. package/core/dist/runtime-v2/evidence-triage/types.js +38 -0
  270. package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -0
  271. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +10 -0
  272. package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
  273. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
  274. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -0
  275. package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
  276. package/core/dist/runtime-v2/index.d.ts +8 -1
  277. package/core/dist/runtime-v2/index.d.ts.map +1 -1
  278. package/core/dist/runtime-v2/index.js +7 -1
  279. package/core/dist/runtime-v2/index.js.map +1 -1
  280. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts +12 -0
  281. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts.map +1 -0
  282. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js +83 -0
  283. package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js.map +1 -0
  284. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +10 -0
  285. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
  286. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +13 -1
  287. package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
  288. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +3 -0
  289. package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
  290. package/core/dist/runtime-v2/internalization/scribe-runner.js +2 -0
  291. package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
  292. package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js +1 -1
  293. package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js.map +1 -1
  294. package/core/dist/runtime-v2/language-directive.d.ts +80 -0
  295. package/core/dist/runtime-v2/language-directive.d.ts.map +1 -0
  296. package/core/dist/runtime-v2/language-directive.js +108 -0
  297. package/core/dist/runtime-v2/language-directive.js.map +1 -0
  298. package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
  299. package/core/dist/runtime-v2/pain-signal-observability.js +24 -11
  300. package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
  301. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +16 -0
  302. package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
  303. package/core/dist/runtime-v2/pain-signal-runtime-factory.js +97 -6
  304. package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
  305. package/core/dist/runtime-v2/pain-to-principle-service.d.ts +7 -0
  306. package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
  307. package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
  308. package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
  309. package/core/dist/runtime-v2/proven-channel-baseline.d.ts.map +1 -1
  310. package/core/dist/runtime-v2/proven-channel-baseline.js +14 -0
  311. package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
  312. package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js +40 -0
  313. package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js.map +1 -1
  314. package/core/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
  315. package/core/dist/runtime-v2/runner/base-peer-runner.js +1 -0
  316. package/core/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
  317. package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts +10 -0
  318. package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts.map +1 -1
  319. package/core/dist/runtime-v2/runner/diagnostician-runner-options.js +1 -0
  320. package/core/dist/runtime-v2/runner/diagnostician-runner-options.js.map +1 -1
  321. package/core/dist/runtime-v2/runner/diagnostician-runner.d.ts.map +1 -1
  322. package/core/dist/runtime-v2/runner/diagnostician-runner.js +28 -4
  323. package/core/dist/runtime-v2/runner/diagnostician-runner.js.map +1 -1
  324. package/core/dist/runtime-v2/runner/peer-runner-types.d.ts +9 -0
  325. package/core/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
  326. package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
  327. package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js +34 -1
  328. package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js.map +1 -1
  329. package/core/dist/runtime-v2/store/runtime-state-manager.js +1 -0
  330. package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
  331. package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
  332. package/core/dist/runtime-v2/store/sqlite-connection.js +9 -1
  333. package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
  334. package/core/dist/runtime-v2/store/task/sqlite-task-store.js +1 -1
  335. package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
  336. package/core/dist/runtime-v2/task-status.d.ts +4 -4
  337. package/core/dist/runtime-v2/task-status.d.ts.map +1 -1
  338. package/core/dist/runtime-v2/task-status.js +2 -2
  339. package/core/dist/runtime-v2/task-status.js.map +1 -1
  340. package/core/package.json +1 -1
  341. package/dist/installer.js +1 -1
  342. package/dist/installer.js.map +1 -1
  343. package/package.json +2 -2
  344. package/pd-cli/dist/commands/console.d.ts +2 -0
  345. package/pd-cli/dist/commands/console.d.ts.map +1 -1
  346. package/pd-cli/dist/commands/console.js +6 -1
  347. package/pd-cli/dist/commands/console.js.map +1 -1
  348. package/pd-cli/dist/commands/diagnose.d.ts.map +1 -1
  349. package/pd-cli/dist/commands/diagnose.js +18 -1
  350. package/pd-cli/dist/commands/diagnose.js.map +1 -1
  351. package/pd-cli/dist/commands/pain-evidence.d.ts +41 -0
  352. package/pd-cli/dist/commands/pain-evidence.d.ts.map +1 -0
  353. package/pd-cli/dist/commands/pain-evidence.js +177 -0
  354. package/pd-cli/dist/commands/pain-evidence.js.map +1 -0
  355. package/pd-cli/dist/commands/pain-record.d.ts.map +1 -1
  356. package/pd-cli/dist/commands/pain-record.js +24 -9
  357. package/pd-cli/dist/commands/pain-record.js.map +1 -1
  358. package/pd-cli/dist/commands/pain-retry.d.ts +19 -0
  359. package/pd-cli/dist/commands/pain-retry.d.ts.map +1 -0
  360. package/pd-cli/dist/commands/pain-retry.js +485 -0
  361. package/pd-cli/dist/commands/pain-retry.js.map +1 -0
  362. package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
  363. package/pd-cli/dist/commands/runtime-internalization-run-once.js +59 -9
  364. package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
  365. package/pd-cli/dist/commands/runtime-uat.d.ts +1 -0
  366. package/pd-cli/dist/commands/runtime-uat.d.ts.map +1 -1
  367. package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts +2 -0
  368. package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts.map +1 -0
  369. package/pd-cli/dist/commands/runtime-uat.guard.test.js +155 -0
  370. package/pd-cli/dist/commands/runtime-uat.guard.test.js.map +1 -0
  371. package/pd-cli/dist/commands/runtime-uat.js +29 -3
  372. package/pd-cli/dist/commands/runtime-uat.js.map +1 -1
  373. package/pd-cli/dist/config-reader.d.ts +25 -0
  374. package/pd-cli/dist/config-reader.d.ts.map +1 -0
  375. package/pd-cli/dist/config-reader.js +109 -0
  376. package/pd-cli/dist/config-reader.js.map +1 -0
  377. package/pd-cli/dist/index.js +40 -5
  378. package/pd-cli/dist/index.js.map +1 -1
  379. package/pd-cli/dist/services/console-launcher.d.ts.map +1 -1
  380. package/pd-cli/dist/services/console-launcher.js +29 -15
  381. package/pd-cli/dist/services/console-launcher.js.map +1 -1
  382. package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
  383. package/pd-cli/dist/services/demo-story-a-runner.js +1 -0
  384. package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
  385. package/pd-cli/dist/utils/production-workspace-guard.d.ts +77 -0
  386. package/pd-cli/dist/utils/production-workspace-guard.d.ts.map +1 -0
  387. package/pd-cli/dist/utils/production-workspace-guard.js +170 -0
  388. package/pd-cli/dist/utils/production-workspace-guard.js.map +1 -0
  389. package/pd-cli/dist/utils/production-workspace-guard.test.d.ts +2 -0
  390. package/pd-cli/dist/utils/production-workspace-guard.test.d.ts.map +1 -0
  391. package/pd-cli/dist/utils/production-workspace-guard.test.js +95 -0
  392. package/pd-cli/dist/utils/production-workspace-guard.test.js.map +1 -0
  393. package/pd-cli/package.json +1 -1
  394. package/plugin/dist/commands/pain.js +27 -2
  395. package/plugin/dist/core/pain-diagnostic-gate.d.ts +6 -0
  396. package/plugin/dist/core/pain-diagnostic-gate.js +9 -0
  397. package/plugin/dist/hooks/after-tool-call-helpers.d.ts +90 -0
  398. package/plugin/dist/hooks/after-tool-call-helpers.js +486 -0
  399. package/plugin/dist/hooks/after-tool-call-types.d.ts +92 -0
  400. package/plugin/dist/hooks/after-tool-call-types.js +13 -0
  401. package/plugin/dist/hooks/gate-block-helper.js +73 -29
  402. package/plugin/dist/hooks/llm.js +49 -29
  403. package/plugin/dist/hooks/message-sanitize.d.ts +21 -0
  404. package/plugin/dist/hooks/message-sanitize.js +30 -0
  405. package/plugin/dist/hooks/pain.d.ts +26 -3
  406. package/plugin/dist/hooks/pain.js +165 -425
  407. package/plugin/dist/hooks/prompt.js +3 -2
  408. package/plugin/dist/hooks/trajectory-evidence.d.ts +11 -0
  409. package/plugin/dist/hooks/trajectory-evidence.js +65 -0
  410. package/plugin/dist/hooks/triage-adapter.d.ts +82 -0
  411. package/plugin/dist/hooks/triage-adapter.js +121 -0
  412. package/console/dist/server/models/EventLogReadModel.d.ts +0 -33
  413. package/console/dist/server/models/EventLogReadModel.js +0 -218
  414. package/console/dist/server/models/EvolutionConsoleModel.d.ts +0 -79
  415. package/console/dist/server/models/EvolutionConsoleModel.js +0 -179
  416. package/console/dist/server/models/FeedbackConsoleModel.d.ts +0 -38
  417. package/console/dist/server/models/FeedbackConsoleModel.js +0 -129
  418. package/console/dist/server/models/GateConsoleModel.d.ts +0 -50
  419. package/console/dist/server/models/GateConsoleModel.js +0 -151
  420. package/console/dist/server/models/OverviewConsoleModel.d.ts +0 -22
  421. package/console/dist/server/models/OverviewConsoleModel.js +0 -202
  422. package/console/dist/server/models/PipelineStatsModel.d.ts +0 -35
  423. package/console/dist/server/models/PipelineStatsModel.js +0 -129
  424. package/console/dist/server/models/SampleConsoleModel.d.ts +0 -21
  425. package/console/dist/server/models/SampleConsoleModel.js +0 -188
  426. package/console/dist/server/models/ThinkingModelsConsoleModel.d.ts +0 -22
  427. package/console/dist/server/models/ThinkingModelsConsoleModel.js +0 -75
  428. package/console/dist/server/routes/agents.d.ts +0 -3
  429. package/console/dist/server/routes/agents.js +0 -442
  430. package/console/dist/server/routes/central.d.ts +0 -5
  431. package/console/dist/server/routes/central.js +0 -31
  432. package/console/dist/server/routes/events.d.ts +0 -10
  433. package/console/dist/server/routes/events.js +0 -99
  434. package/console/dist/server/routes/evolution.js +0 -73
  435. package/console/dist/server/routes/feedback.d.ts +0 -3
  436. package/console/dist/server/routes/feedback.js +0 -65
  437. package/console/dist/server/routes/gates.d.ts +0 -3
  438. package/console/dist/server/routes/gates.js +0 -52
  439. package/console/dist/server/routes/overview.d.ts +0 -3
  440. package/console/dist/server/routes/overview.js +0 -49
  441. package/console/dist/server/routes/pipeline.d.ts +0 -3
  442. package/console/dist/server/routes/pipeline.js +0 -33
  443. package/console/dist/server/routes/samples.d.ts +0 -3
  444. package/console/dist/server/routes/samples.js +0 -101
  445. package/console/dist/server/routes/thinking-models.d.ts +0 -3
  446. package/console/dist/server/routes/thinking-models.js +0 -54
  447. package/console/dist/ui/components/app-sidebar.d.ts +0 -7
  448. package/console/dist/ui/components/app-sidebar.js +0 -75
  449. package/console/dist/ui/components/compare-view.d.ts +0 -7
  450. package/console/dist/ui/components/compare-view.js +0 -32
  451. package/console/dist/ui/components/data-freshness-indicator.d.ts +0 -10
  452. package/console/dist/ui/components/data-freshness-indicator.js +0 -63
  453. package/console/dist/ui/components/health-diagnostic-card.d.ts +0 -15
  454. package/console/dist/ui/components/health-diagnostic-card.js +0 -42
  455. package/console/dist/ui/components/page-header.d.ts +0 -10
  456. package/console/dist/ui/components/page-header.js +0 -37
  457. package/console/dist/ui/hooks/useAutoRefresh.d.ts +0 -13
  458. package/console/dist/ui/hooks/useAutoRefresh.js +0 -64
  459. package/console/dist/ui/hooks/useBookmarks.d.ts +0 -6
  460. package/console/dist/ui/hooks/useBookmarks.js +0 -43
  461. package/console/dist/ui/hooks/useDebounce.d.ts +0 -2
  462. package/console/dist/ui/hooks/useDebounce.js +0 -32
  463. package/console/dist/ui/hooks/useKeyboardNavigation.d.ts +0 -14
  464. package/console/dist/ui/hooks/useKeyboardNavigation.js +0 -75
  465. package/console/dist/ui/pages/AgentsPage.d.ts +0 -1
  466. package/console/dist/ui/pages/AgentsPage.js +0 -167
  467. package/console/dist/ui/pages/ApprovalsPage.d.ts +0 -1
  468. package/console/dist/ui/pages/ApprovalsPage.js +0 -123
  469. package/console/dist/ui/pages/CentralPage.d.ts +0 -1
  470. package/console/dist/ui/pages/CentralPage.js +0 -57
  471. package/console/dist/ui/pages/DataFlowPage.d.ts +0 -1
  472. package/console/dist/ui/pages/DataFlowPage.js +0 -158
  473. package/console/dist/ui/pages/EventLogPage.d.ts +0 -1
  474. package/console/dist/ui/pages/EventLogPage.js +0 -176
  475. package/console/dist/ui/pages/EvolutionPage.d.ts +0 -1
  476. package/console/dist/ui/pages/EvolutionPage.js +0 -118
  477. package/console/dist/ui/pages/FeedbackPage.d.ts +0 -1
  478. package/console/dist/ui/pages/FeedbackPage.js +0 -46
  479. package/console/dist/ui/pages/GatesPage.d.ts +0 -1
  480. package/console/dist/ui/pages/GatesPage.js +0 -31
  481. package/console/dist/ui/pages/LoginPage.d.ts +0 -5
  482. package/console/dist/ui/pages/LoginPage.js +0 -39
  483. package/console/dist/ui/pages/OverviewPage.d.ts +0 -1
  484. package/console/dist/ui/pages/OverviewPage.js +0 -50
  485. package/console/dist/ui/pages/PainPage.js +0 -50
  486. package/console/dist/ui/pages/PrincipleDetailPage.js +0 -145
  487. package/console/dist/ui/pages/PrinciplesPage.js +0 -322
  488. package/console/dist/ui/pages/ReportProblemPage.js +0 -186
  489. package/console/dist/ui/pages/SamplesPage.d.ts +0 -1
  490. package/console/dist/ui/pages/SamplesPage.js +0 -105
  491. package/console/dist/ui/pages/SettingsPage.d.ts +0 -1
  492. package/console/dist/ui/pages/SettingsPage.js +0 -86
  493. package/console/dist/ui/pages/TasksPage.d.ts +0 -1
  494. package/console/dist/ui/pages/TasksPage.js +0 -373
  495. package/console/dist/ui/pages/ThinkingModelsPage.d.ts +0 -1
  496. package/console/dist/ui/pages/ThinkingModelsPage.js +0 -32
  497. package/console/dist/ui/pages/UpdatePage.d.ts +0 -1
  498. package/console/dist/ui/pages/UpdatePage.js +0 -142
  499. /package/console/dist/ui/pages/{PainPage.d.ts → pain/PainPage.d.ts} +0 -0
  500. /package/console/dist/ui/pages/{PrincipleDetailPage.d.ts → principles/PrincipleDetailPage.d.ts} +0 -0
  501. /package/console/dist/ui/pages/{PrinciplesPage.d.ts → principles/PrinciplesPage.d.ts} +0 -0
  502. /package/console/dist/ui/pages/{ReportProblemPage.d.ts → report-problem/ReportProblemPage.d.ts} +0 -0
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Trigger Controller Tests — PEAT-B2
3
+ *
4
+ * Production-path tests for the trigger controller.
5
+ * Every test exercises the full path from input to TriggerDecision,
6
+ * not just helper functions.
7
+ *
8
+ * ERR checklist:
9
+ * - ERR-002: Every path carries reason + nextAction
10
+ * - ERR-009: Malformed input fails loud
11
+ * - ERR-025: Production-path tests, not just helpers
12
+ * - ERR-031/034: Decisions come from canonical descriptors
13
+ * - ERR-048: Write-read disconnect prevented
14
+ */
15
+ import { describe, it, expect } from 'vitest';
16
+ import { evaluateTriggerController, shouldCreateTask, isAdmittedOutcome, isSkippedOutcome, } from '../trigger-controller.js';
17
+ import { evaluateTriage } from '../triage-policy.js';
18
+ // ── Helpers ─────────────────────────────────────────────────────────────────
19
+ function makeInput(overrides) {
20
+ return {
21
+ isOwnerManual: false,
22
+ isCooldownActive: false,
23
+ isValid: true,
24
+ score: 50,
25
+ ...overrides,
26
+ };
27
+ }
28
+ function triageForKind(sourceKind, score = 50) {
29
+ return evaluateTriage({ sourceKind, score });
30
+ }
31
+ // ── Manual Pain → diagnosis_created ─────────────────────────────────────────
32
+ describe('manual owner pain', () => {
33
+ it('creates diagnostic task for owner manual pain regardless of source kind', () => {
34
+ const triage = triageForKind('owner_reported', 100);
35
+ const input = makeInput({ triageResult: triage, isOwnerManual: true, score: 100 });
36
+ const decision = evaluateTriggerController(input);
37
+ expect(decision.outcome).toBe('manual_owner_admitted');
38
+ expect(decision.shouldCreateDiagnosticTask).toBe(true);
39
+ expect(decision.reason).toBeTruthy();
40
+ expect(decision.nextAction).toBe('create_diagnostic_task');
41
+ });
42
+ it('bypasses cooldown for owner manual pain', () => {
43
+ const triage = triageForKind('owner_reported', 100);
44
+ const input = makeInput({ triageResult: triage, isOwnerManual: true, score: 100, isCooldownActive: true });
45
+ const decision = evaluateTriggerController(input);
46
+ expect(decision.outcome).toBe('manual_owner_admitted');
47
+ expect(decision.shouldCreateDiagnosticTask).toBe(true);
48
+ });
49
+ it('bypasses triage for owner manual pain even if triage would reject', () => {
50
+ // owner_reported always admits, but test with a different triage result to show bypass
51
+ const triage = {
52
+ decision: 'evidence_only',
53
+ sourceKind: 'tool_failure',
54
+ reason: 'Tool failure is infrastructure noise.',
55
+ nextAction: 'store_as_evidence',
56
+ };
57
+ const input = makeInput({ triageResult: triage, isOwnerManual: true, score: 100 });
58
+ const decision = evaluateTriggerController(input);
59
+ // Manual pain still creates task even when triage said evidence_only
60
+ expect(decision.outcome).toBe('manual_owner_admitted');
61
+ expect(decision.shouldCreateDiagnosticTask).toBe(true);
62
+ });
63
+ });
64
+ // ── Tool Failure → evidence_only ────────────────────────────────────────────
65
+ describe('tool failure', () => {
66
+ it('records as evidence-only by default', () => {
67
+ const triage = triageForKind('tool_failure', 40);
68
+ const input = makeInput({ triageResult: triage, score: 40 });
69
+ const decision = evaluateTriggerController(input);
70
+ expect(decision.outcome).toBe('evidence_only');
71
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
72
+ expect(decision.reason).toContain('infrastructure');
73
+ expect(decision.nextAction).toBeTruthy();
74
+ });
75
+ it('does not create diagnostic task even at high score', () => {
76
+ const triage = triageForKind('tool_failure', 90);
77
+ const input = makeInput({ triageResult: triage, score: 90 });
78
+ const decision = evaluateTriggerController(input);
79
+ expect(decision.outcome).toBe('evidence_only');
80
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
81
+ });
82
+ });
83
+ // ── Provider/Rate Limit → health_only ───────────────────────────────────────
84
+ describe('provider/rate-limit failure', () => {
85
+ it('records as health-only for provider failure', () => {
86
+ const triage = triageForKind('provider_failure', 30);
87
+ const input = makeInput({ triageResult: triage, score: 30 });
88
+ const decision = evaluateTriggerController(input);
89
+ expect(decision.outcome).toBe('health_only');
90
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
91
+ expect(decision.reason).toContain('Infrastructure');
92
+ });
93
+ it('records as health-only for rate limit', () => {
94
+ const triage = triageForKind('rate_limit', 20);
95
+ const input = makeInput({ triageResult: triage, score: 20 });
96
+ const decision = evaluateTriggerController(input);
97
+ expect(decision.outcome).toBe('health_only');
98
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
99
+ });
100
+ });
101
+ // ── RuleHost Block → evidence_only (default) / diagnosis_created (upgraded) ─
102
+ describe('rulehost block', () => {
103
+ it('records as evidence-only by default', () => {
104
+ const triage = triageForKind('rulehost_block', 50);
105
+ const input = makeInput({ triageResult: triage, score: 50 });
106
+ const decision = evaluateTriggerController(input);
107
+ expect(decision.outcome).toBe('evidence_only');
108
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
109
+ });
110
+ it('creates diagnosis when triage upgrades to admit (high-confidence unsafe)', () => {
111
+ // The triage adapter calls evaluateTriage with isUnsafeHighConfidence=true
112
+ // which upgrades rulehost_block from evidence_only to admit
113
+ const triage = {
114
+ decision: 'admit',
115
+ sourceKind: 'rulehost_block',
116
+ reason: 'RuleHost blocked a high-confidence unsafe action (score=80). Upgrading to direct diagnosis.',
117
+ nextAction: 'none',
118
+ };
119
+ const input = makeInput({ triageResult: triage, score: 80 });
120
+ const decision = evaluateTriggerController(input);
121
+ expect(decision.outcome).toBe('diagnosis_created');
122
+ expect(decision.shouldCreateDiagnosticTask).toBe(true);
123
+ });
124
+ });
125
+ // ── Empathy Inferred → owner_confirm_required ──────────────────────────────
126
+ describe('empathy inferred', () => {
127
+ it('requires owner confirmation', () => {
128
+ const triage = triageForKind('empathy_inferred', 60);
129
+ const input = makeInput({ triageResult: triage, score: 60 });
130
+ const decision = evaluateTriggerController(input);
131
+ expect(decision.outcome).toBe('owner_confirm_required');
132
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
133
+ expect(decision.reason).toContain('Empathy-inferred');
134
+ });
135
+ });
136
+ // ── Cooldown → cooldown_skipped ─────────────────────────────────────────────
137
+ describe('cooldown', () => {
138
+ it('skips diagnosis when cooldown is active', () => {
139
+ // Use a source that would normally admit (e.g., upgraded rulehost_block)
140
+ const triage = {
141
+ decision: 'admit',
142
+ sourceKind: 'rulehost_block',
143
+ reason: 'Upgraded to admit.',
144
+ nextAction: 'none',
145
+ };
146
+ const input = makeInput({ triageResult: triage, score: 80, isCooldownActive: true });
147
+ const decision = evaluateTriggerController(input);
148
+ expect(decision.outcome).toBe('cooldown_skipped');
149
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
150
+ expect(decision.reason).toContain('cooldown');
151
+ expect(decision.nextAction).toContain('cooldown');
152
+ });
153
+ it('allows diagnosis when cooldown bypass is allowed', () => {
154
+ const triage = {
155
+ decision: 'admit',
156
+ sourceKind: 'owner_reported',
157
+ reason: 'Owner reported.',
158
+ nextAction: 'none',
159
+ };
160
+ const input = makeInput({
161
+ triageResult: triage,
162
+ score: 100,
163
+ isCooldownActive: true,
164
+ cooldownBypassAllowed: true,
165
+ });
166
+ const decision = evaluateTriggerController(input);
167
+ expect(decision.outcome).toBe('diagnosis_created');
168
+ expect(decision.shouldCreateDiagnosticTask).toBe(true);
169
+ });
170
+ });
171
+ // ── Malformed Input → refused ──────────────────────────────────────────────
172
+ describe('malformed input', () => {
173
+ it('refuses invalid input with reason and nextAction', () => {
174
+ const triage = triageForKind('tool_failure', 40);
175
+ const input = makeInput({
176
+ triageResult: triage,
177
+ isValid: false,
178
+ validationError: 'sourceKind is missing',
179
+ score: 40,
180
+ });
181
+ const decision = evaluateTriggerController(input);
182
+ expect(decision.outcome).toBe('refused');
183
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
184
+ expect(decision.reason).toContain('sourceKind is missing');
185
+ expect(decision.nextAction).toBeTruthy();
186
+ });
187
+ it('refuses with generic message when no validation error provided', () => {
188
+ const triage = triageForKind('tool_failure', 40);
189
+ const input = makeInput({
190
+ triageResult: triage,
191
+ isValid: false,
192
+ score: 40,
193
+ });
194
+ const decision = evaluateTriggerController(input);
195
+ expect(decision.outcome).toBe('refused');
196
+ expect(decision.reason).toContain('malformed');
197
+ });
198
+ });
199
+ // ── Dispatch Error → evidence_only ──────────────────────────────────────────
200
+ describe('dispatch error', () => {
201
+ it('records as evidence-only', () => {
202
+ const triage = triageForKind('dispatch_error', 30);
203
+ const input = makeInput({ triageResult: triage, score: 30 });
204
+ const decision = evaluateTriggerController(input);
205
+ expect(decision.outcome).toBe('evidence_only');
206
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
207
+ });
208
+ });
209
+ // ── Subagent Error → evidence_only ──────────────────────────────────────────
210
+ describe('subagent error', () => {
211
+ it('records as evidence-only', () => {
212
+ const triage = triageForKind('subagent_error', 40);
213
+ const input = makeInput({ triageResult: triage, score: 40 });
214
+ const decision = evaluateTriggerController(input);
215
+ expect(decision.outcome).toBe('evidence_only');
216
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
217
+ });
218
+ });
219
+ // ── Unknown Source → evidence_only ──────────────────────────────────────────
220
+ describe('unknown source', () => {
221
+ it('records as evidence-only (conservative default)', () => {
222
+ const triage = triageForKind('unknown', 50);
223
+ const input = makeInput({ triageResult: triage, score: 50 });
224
+ const decision = evaluateTriggerController(input);
225
+ expect(decision.outcome).toBe('evidence_only');
226
+ expect(decision.shouldCreateDiagnosticTask).toBe(false);
227
+ });
228
+ });
229
+ // ── Helper Functions ────────────────────────────────────────────────────────
230
+ describe('helper functions', () => {
231
+ it('shouldCreateTask returns correct boolean', () => {
232
+ const admittedDecision = {
233
+ outcome: 'diagnosis_created',
234
+ reason: 'test',
235
+ nextAction: 'test',
236
+ sourceKind: 'owner_reported',
237
+ triageDecision: 'admit',
238
+ shouldCreateDiagnosticTask: true,
239
+ decidedAt: new Date().toISOString(),
240
+ };
241
+ expect(shouldCreateTask(admittedDecision)).toBe(true);
242
+ const evidenceDecision = {
243
+ outcome: 'evidence_only',
244
+ reason: 'test',
245
+ nextAction: 'test',
246
+ sourceKind: 'tool_failure',
247
+ triageDecision: 'evidence_only',
248
+ shouldCreateDiagnosticTask: false,
249
+ decidedAt: new Date().toISOString(),
250
+ };
251
+ expect(shouldCreateTask(evidenceDecision)).toBe(false);
252
+ });
253
+ it('isAdmittedOutcome identifies admitted outcomes', () => {
254
+ expect(isAdmittedOutcome('diagnosis_created')).toBe(true);
255
+ expect(isAdmittedOutcome('manual_owner_admitted')).toBe(true);
256
+ expect(isAdmittedOutcome('evidence_only')).toBe(false);
257
+ expect(isAdmittedOutcome('cooldown_skipped')).toBe(false);
258
+ expect(isAdmittedOutcome('refused')).toBe(false);
259
+ expect(isAdmittedOutcome('health_only')).toBe(false);
260
+ });
261
+ it('isSkippedOutcome identifies skipped outcomes', () => {
262
+ expect(isSkippedOutcome('diagnosis_skipped')).toBe(true);
263
+ expect(isSkippedOutcome('cooldown_skipped')).toBe(true);
264
+ expect(isSkippedOutcome('diagnosis_created')).toBe(false);
265
+ expect(isSkippedOutcome('evidence_only')).toBe(false);
266
+ });
267
+ });
268
+ // ── Structured Fields ───────────────────────────────────────────────────────
269
+ describe('structured fields', () => {
270
+ it('every decision has decidedAt timestamp', () => {
271
+ const triage = triageForKind('tool_failure', 40);
272
+ const input = makeInput({ triageResult: triage, score: 40 });
273
+ const decision = evaluateTriggerController(input);
274
+ expect(decision.decidedAt).toBeTruthy();
275
+ expect(new Date(decision.decidedAt).getTime()).not.toBeNaN();
276
+ });
277
+ it('every decision carries the source kind from triage', () => {
278
+ const triage = triageForKind('tool_failure', 40);
279
+ const input = makeInput({ triageResult: triage, score: 40 });
280
+ const decision = evaluateTriggerController(input);
281
+ expect(decision.sourceKind).toBe('tool_failure');
282
+ });
283
+ it('every decision carries the triage decision', () => {
284
+ const triage = triageForKind('tool_failure', 40);
285
+ const input = makeInput({ triageResult: triage, score: 40 });
286
+ const decision = evaluateTriggerController(input);
287
+ expect(decision.triageDecision).toBe('evidence_only');
288
+ });
289
+ it('every decision has a non-empty reason', () => {
290
+ for (const kind of ['owner_reported', 'tool_failure', 'provider_failure', 'rate_limit', 'rulehost_block', 'empathy_inferred', 'dispatch_error', 'subagent_error', 'unknown']) {
291
+ const triage = triageForKind(kind, 50);
292
+ const input = makeInput({ triageResult: triage, score: 50 });
293
+ const decision = evaluateTriggerController(input);
294
+ expect(decision.reason.length).toBeGreaterThan(0);
295
+ expect(decision.nextAction.length).toBeGreaterThan(0);
296
+ }
297
+ });
298
+ });
299
+ // ── Privacy Boundary ────────────────────────────────────────────────────────
300
+ describe('privacy boundary', () => {
301
+ it('no raw sensitive data in trigger decisions', () => {
302
+ const triage = triageForKind('tool_failure', 40);
303
+ const input = makeInput({
304
+ triageResult: triage,
305
+ score: 40,
306
+ sessionId: 'session_with_sensitive_data_sk-1234567890abcdef1234567890abcdef',
307
+ });
308
+ const decision = evaluateTriggerController(input);
309
+ const serialized = JSON.stringify(decision);
310
+ // Should not contain raw API keys
311
+ expect(serialized).not.toMatch(/sk-[a-zA-Z0-9]{20,}/);
312
+ // Should not contain absolute paths
313
+ expect(serialized).not.toMatch(/[A-Z]:\\/);
314
+ });
315
+ });
316
+ //# sourceMappingURL=trigger-controller.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trigger-controller.test.js","sourceRoot":"","sources":["../../../../src/runtime-v2/evidence-triage/__tests__/trigger-controller.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Admission Events — PEAT-B2
3
+ *
4
+ * Structured event types for the pain evidence admission pipeline.
5
+ * These events make admission decisions observable without exposing raw data.
6
+ *
7
+ * Privacy boundary: events MUST NOT contain raw prompt, raw chat, raw trajectory,
8
+ * full local paths, file contents, env vars, tokens, or API keys.
9
+ *
10
+ * ERR checklist:
11
+ * - ERR-002: Every event has reason + nextAction.
12
+ * - ERR-009: Malformed input events include validation error details.
13
+ */
14
+ import type { TriggerOutcome, TriggerDecision } from './trigger-controller.js';
15
+ import type { SourceKind, TriageDecision } from './types.js';
16
+ /**
17
+ * Base fields shared by all admission events.
18
+ */
19
+ interface AdmissionEventBase {
20
+ /** Unique event ID */
21
+ readonly eventId: string;
22
+ /** ISO timestamp */
23
+ readonly timestamp: string;
24
+ /** Source kind that was evaluated */
25
+ readonly sourceKind: SourceKind;
26
+ /** Workspace reference (directory name only, no full path) */
27
+ readonly workspaceRef: string;
28
+ /** Session ID (may be truncated for privacy) */
29
+ readonly sessionId?: string;
30
+ }
31
+ /**
32
+ * Emitted when the admission controller makes a decision.
33
+ * This is the primary observability event for the admission pipeline.
34
+ */
35
+ export interface AdmissionDecisionEvent extends AdmissionEventBase {
36
+ readonly eventType: 'admission_decision';
37
+ readonly triageDecision: TriageDecision;
38
+ readonly triggerOutcome: TriggerOutcome;
39
+ readonly reason: string;
40
+ readonly nextAction: string;
41
+ readonly shouldCreateDiagnosticTask: boolean;
42
+ }
43
+ /**
44
+ * Emitted when a diagnostic task is created as a result of admission.
45
+ */
46
+ export interface DiagnosisTaskCreatedEvent extends AdmissionEventBase {
47
+ readonly eventType: 'diagnosis_task_created';
48
+ readonly painId: string;
49
+ readonly taskId: string;
50
+ readonly triggerOutcome: TriggerOutcome;
51
+ }
52
+ /**
53
+ * Emitted when evidence is recorded without triggering diagnosis.
54
+ */
55
+ export interface EvidenceOnlyRecordedEvent extends AdmissionEventBase {
56
+ readonly eventType: 'evidence_only_recorded';
57
+ readonly triageDecision: TriageDecision;
58
+ readonly reason: string;
59
+ readonly nextAction: string;
60
+ }
61
+ /**
62
+ * Emitted when a signal is skipped or refused.
63
+ */
64
+ export interface SkippedRefusedEvent extends AdmissionEventBase {
65
+ readonly eventType: 'skipped_refused';
66
+ readonly triggerOutcome: TriggerOutcome;
67
+ readonly reason: string;
68
+ readonly nextAction: string;
69
+ }
70
+ /**
71
+ * Union of all admission event types.
72
+ */
73
+ export type AdmissionEvent = AdmissionDecisionEvent | DiagnosisTaskCreatedEvent | EvidenceOnlyRecordedEvent | SkippedRefusedEvent;
74
+ /**
75
+ * Create an AdmissionDecisionEvent from a TriggerDecision.
76
+ *
77
+ * This is the canonical way to produce an admission event.
78
+ * The event contains no raw sensitive data — only structured metadata.
79
+ */
80
+ export declare function createAdmissionDecisionEvent(decision: TriggerDecision, options: {
81
+ workspaceRef: string;
82
+ sessionId?: string;
83
+ }): AdmissionDecisionEvent;
84
+ /**
85
+ * Create a DiagnosisTaskCreatedEvent.
86
+ */
87
+ export declare function createDiagnosisTaskCreatedEvent(opts: {
88
+ painId: string;
89
+ taskId: string;
90
+ decision: TriggerDecision;
91
+ workspaceRef: string;
92
+ sessionId?: string;
93
+ }): DiagnosisTaskCreatedEvent;
94
+ /**
95
+ * Create an EvidenceOnlyRecordedEvent.
96
+ */
97
+ export declare function createEvidenceOnlyRecordedEvent(decision: TriggerDecision, options: {
98
+ workspaceRef: string;
99
+ sessionId?: string;
100
+ }): EvidenceOnlyRecordedEvent;
101
+ /**
102
+ * Create a SkippedRefusedEvent.
103
+ */
104
+ export declare function createSkippedRefusedEvent(decision: TriggerDecision, options: {
105
+ workspaceRef: string;
106
+ sessionId?: string;
107
+ }): SkippedRefusedEvent;
108
+ /**
109
+ * Serialize an admission event to a JSONL-safe string.
110
+ *
111
+ * Privacy boundary: only structured fields are included.
112
+ * No raw prompt/chat/trajectory/file content/token/path secrets.
113
+ */
114
+ export declare function serializeAdmissionEvent(event: AdmissionEvent): string;
115
+ /**
116
+ * Validate that an admission event does not contain raw sensitive data.
117
+ *
118
+ * Returns true if the event passes privacy checks.
119
+ * This is a defense-in-depth check for tests and auditing.
120
+ */
121
+ export declare function validateEventPrivacy(event: AdmissionEvent): {
122
+ valid: boolean;
123
+ violations: string[];
124
+ };
125
+ export {};
126
+ //# sourceMappingURL=admission-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission-events.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/evidence-triage/admission-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Admission Events — PEAT-B2
3
+ *
4
+ * Structured event types for the pain evidence admission pipeline.
5
+ * These events make admission decisions observable without exposing raw data.
6
+ *
7
+ * Privacy boundary: events MUST NOT contain raw prompt, raw chat, raw trajectory,
8
+ * full local paths, file contents, env vars, tokens, or API keys.
9
+ *
10
+ * ERR checklist:
11
+ * - ERR-002: Every event has reason + nextAction.
12
+ * - ERR-009: Malformed input events include validation error details.
13
+ */
14
+ // ── Event Factory Functions ─────────────────────────────────────────────────
15
+ let eventCounter = 0;
16
+ function nextEventId() {
17
+ return `adm_${Date.now()}_${++eventCounter}`;
18
+ }
19
+ /**
20
+ * Create an AdmissionDecisionEvent from a TriggerDecision.
21
+ *
22
+ * This is the canonical way to produce an admission event.
23
+ * The event contains no raw sensitive data — only structured metadata.
24
+ */
25
+ export function createAdmissionDecisionEvent(decision, options) {
26
+ return {
27
+ eventType: 'admission_decision',
28
+ eventId: nextEventId(),
29
+ timestamp: decision.decidedAt,
30
+ sourceKind: decision.sourceKind,
31
+ workspaceRef: options.workspaceRef,
32
+ sessionId: options.sessionId,
33
+ triageDecision: decision.triageDecision,
34
+ triggerOutcome: decision.outcome,
35
+ reason: decision.reason,
36
+ nextAction: decision.nextAction,
37
+ shouldCreateDiagnosticTask: decision.shouldCreateDiagnosticTask,
38
+ };
39
+ }
40
+ /**
41
+ * Create a DiagnosisTaskCreatedEvent.
42
+ */
43
+ export function createDiagnosisTaskCreatedEvent(opts) {
44
+ return {
45
+ eventType: 'diagnosis_task_created',
46
+ eventId: nextEventId(),
47
+ timestamp: new Date().toISOString(),
48
+ sourceKind: opts.decision.sourceKind,
49
+ workspaceRef: opts.workspaceRef,
50
+ sessionId: opts.sessionId,
51
+ painId: opts.painId,
52
+ taskId: opts.taskId,
53
+ triggerOutcome: opts.decision.outcome,
54
+ };
55
+ }
56
+ /**
57
+ * Create an EvidenceOnlyRecordedEvent.
58
+ */
59
+ export function createEvidenceOnlyRecordedEvent(decision, options) {
60
+ return {
61
+ eventType: 'evidence_only_recorded',
62
+ eventId: nextEventId(),
63
+ timestamp: decision.decidedAt,
64
+ sourceKind: decision.sourceKind,
65
+ workspaceRef: options.workspaceRef,
66
+ sessionId: options.sessionId,
67
+ triageDecision: decision.triageDecision,
68
+ reason: decision.reason,
69
+ nextAction: decision.nextAction,
70
+ };
71
+ }
72
+ /**
73
+ * Create a SkippedRefusedEvent.
74
+ */
75
+ export function createSkippedRefusedEvent(decision, options) {
76
+ return {
77
+ eventType: 'skipped_refused',
78
+ eventId: nextEventId(),
79
+ timestamp: decision.decidedAt,
80
+ sourceKind: decision.sourceKind,
81
+ workspaceRef: options.workspaceRef,
82
+ sessionId: options.sessionId,
83
+ triggerOutcome: decision.outcome,
84
+ reason: decision.reason,
85
+ nextAction: decision.nextAction,
86
+ };
87
+ }
88
+ // ── Event Serialization ─────────────────────────────────────────────────────
89
+ /**
90
+ * Serialize an admission event to a JSONL-safe string.
91
+ *
92
+ * Privacy boundary: only structured fields are included.
93
+ * No raw prompt/chat/trajectory/file content/token/path secrets.
94
+ */
95
+ export function serializeAdmissionEvent(event) {
96
+ // Explicit field selection prevents accidental raw data leakage
97
+ const safe = {
98
+ eventType: event.eventType,
99
+ eventId: event.eventId,
100
+ timestamp: event.timestamp,
101
+ sourceKind: event.sourceKind,
102
+ workspaceRef: event.workspaceRef,
103
+ sessionId: event.sessionId,
104
+ };
105
+ if (event.eventType === 'admission_decision') {
106
+ safe.triageDecision = event.triageDecision;
107
+ safe.triggerOutcome = event.triggerOutcome;
108
+ safe.reason = event.reason;
109
+ safe.nextAction = event.nextAction;
110
+ safe.shouldCreateDiagnosticTask = event.shouldCreateDiagnosticTask;
111
+ }
112
+ else if (event.eventType === 'diagnosis_task_created') {
113
+ safe.painId = event.painId;
114
+ safe.taskId = event.taskId;
115
+ safe.triggerOutcome = event.triggerOutcome;
116
+ }
117
+ else if (event.eventType === 'evidence_only_recorded') {
118
+ safe.triageDecision = event.triageDecision;
119
+ safe.reason = event.reason;
120
+ safe.nextAction = event.nextAction;
121
+ }
122
+ else if (event.eventType === 'skipped_refused') {
123
+ safe.triggerOutcome = event.triggerOutcome;
124
+ safe.reason = event.reason;
125
+ safe.nextAction = event.nextAction;
126
+ }
127
+ return JSON.stringify(safe);
128
+ }
129
+ // ── Validation ──────────────────────────────────────────────────────────────
130
+ /**
131
+ * Validate that an admission event does not contain raw sensitive data.
132
+ *
133
+ * Returns true if the event passes privacy checks.
134
+ * This is a defense-in-depth check for tests and auditing.
135
+ */
136
+ export function validateEventPrivacy(event) {
137
+ const violations = [];
138
+ const serialized = JSON.stringify(event);
139
+ // Check for common sensitive patterns
140
+ if (/sk-[a-zA-Z0-9]{20,}/.test(serialized)) {
141
+ violations.push('potential_api_key_detected');
142
+ }
143
+ // Check for absolute paths in JSON-serialized form.
144
+ // JSON.stringify('C:\\Users\\admin') produces "C:\\\\Users\\\\admin" in the JSON string.
145
+ // At runtime, serialized.includes('Users\\') checks for Users followed by one backslash.
146
+ const hasWindowsPath = serialized.includes('Users\\') ||
147
+ /[A-Z]:\\[Uu]sers/.test(serialized);
148
+ if (hasWindowsPath) {
149
+ violations.push('absolute_windows_path_detected');
150
+ }
151
+ if (/\/home\/[a-z]/.test(serialized)) {
152
+ violations.push('absolute_unix_path_detected');
153
+ }
154
+ if (/"prompt"\s*:\s*"/.test(serialized) && serialized.length > 2000) {
155
+ violations.push('potential_raw_prompt_in_event');
156
+ }
157
+ return { valid: violations.length === 0, violations };
158
+ }
159
+ //# sourceMappingURL=admission-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admission-events.js","sourceRoot":"","sources":["../../../src/runtime-v2/evidence-triage/admission-events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Evidence Triage — PEAT-B1 → B2
3
+ *
4
+ * Public API for pre-diagnosis evidence triage and trigger control.
5
+ * Pure types and policy — no I/O, no plugin imports.
6
+ */
7
+ export type { SourceKind, TriageDecision, TriageResult, TriageInput, } from './types.js';
8
+ export { isSourceKind } from './types.js';
9
+ export type { SourceDescriptor } from './source-descriptors.js';
10
+ export { SOURCE_DESCRIPTORS, getSourceDescriptor } from './source-descriptors.js';
11
+ export { evaluateTriage } from './triage-policy.js';
12
+ export type { TriggerOutcome, TriggerDecision, TriggerControllerInput, } from './trigger-controller.js';
13
+ export { evaluateTriggerController, shouldCreateTask, isAdmittedOutcome, isSkippedOutcome, } from './trigger-controller.js';
14
+ export type { AdmissionDecisionEvent, DiagnosisTaskCreatedEvent, EvidenceOnlyRecordedEvent, SkippedRefusedEvent, AdmissionEvent, } from './admission-events.js';
15
+ export { createAdmissionDecisionEvent, createDiagnosisTaskCreatedEvent, createEvidenceOnlyRecordedEvent, createSkippedRefusedEvent, serializeAdmissionEvent, validateEventPrivacy, } from './admission-events.js';
16
+ //# sourceMappingURL=index.d.ts.map