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.
- package/console/dist/server/config/pd-config-store.d.ts +135 -0
- package/console/dist/server/config/pd-config-store.js +660 -0
- package/console/dist/server/index.js +40 -389
- package/console/dist/server/models/ActivationsConsoleModel.d.ts +33 -0
- package/console/dist/server/models/ActivationsConsoleModel.js +112 -0
- package/console/dist/server/models/ApprovalsConsoleModel.d.ts +5 -0
- package/console/dist/server/models/ApprovalsConsoleModel.js +14 -0
- package/console/dist/server/models/ApprovalsGroupedConsoleModel.d.ts +25 -0
- package/console/dist/server/models/ApprovalsGroupedConsoleModel.js +126 -0
- package/console/dist/server/models/ConsoleLifecycleDatasource.d.ts +13 -0
- package/console/dist/server/models/ConsoleLifecycleDatasource.js +73 -0
- package/console/dist/server/models/EvidenceChainConsoleModel.d.ts +58 -0
- package/console/dist/server/models/EvidenceChainConsoleModel.js +493 -0
- package/console/dist/server/models/GovernanceConsoleModel.d.ts +74 -0
- package/console/dist/server/models/GovernanceConsoleModel.js +246 -0
- package/console/dist/server/models/HealthCheckModel.d.ts +0 -4
- package/console/dist/server/models/HealthCheckModel.js +49 -80
- package/console/dist/server/models/LifecycleConsoleModel.d.ts +19 -0
- package/console/dist/server/models/LifecycleConsoleModel.js +55 -0
- package/console/dist/server/models/PrincipleClassifier.d.ts +41 -0
- package/console/dist/server/models/PrincipleClassifier.js +100 -0
- package/console/dist/server/models/PrinciplesConsoleModel.d.ts +12 -1
- package/console/dist/server/models/PrinciplesConsoleModel.js +53 -6
- package/console/dist/server/models/WorkspaceService.d.ts +2 -1
- package/console/dist/server/models/WorkspaceService.js +51 -23
- package/console/dist/server/routes/activations.d.ts +3 -0
- package/console/dist/server/routes/activations.js +111 -0
- package/console/dist/server/routes/approvals-grouped.d.ts +3 -0
- package/console/dist/server/routes/approvals-grouped.js +32 -0
- package/console/dist/server/routes/approvals.js +28 -4
- package/console/dist/server/routes/config.d.ts +27 -0
- package/console/dist/server/routes/config.js +213 -0
- package/console/dist/server/routes/evidence-chain.d.ts +9 -0
- package/console/dist/server/routes/evidence-chain.js +32 -0
- package/console/dist/server/routes/governance.d.ts +3 -0
- package/console/dist/server/routes/governance.js +32 -0
- package/console/dist/server/routes/{evolution.d.ts → lifecycle.d.ts} +2 -2
- package/console/dist/server/routes/lifecycle.js +48 -0
- package/console/dist/server/routes/principles.js +74 -1
- package/console/dist/server/routes/workspaces.js +8 -1
- package/console/dist/server/utils/response.d.ts +1 -1
- package/console/dist/server/utils/response.js +6 -2
- package/console/dist/types.d.ts +1 -0
- package/console/dist/ui/App.js +116 -40
- package/console/dist/ui/api.d.ts +88 -501
- package/console/dist/ui/api.js +139 -162
- package/console/dist/ui/components/approval-card.js +1 -1
- package/console/dist/ui/components/approval-detail-dialog.js +1 -1
- package/console/dist/ui/components/auth/login-form.d.ts +3 -0
- package/console/dist/ui/components/auth/login-form.js +36 -0
- package/console/dist/ui/components/auth/splash-screen.d.ts +8 -0
- package/console/dist/ui/components/auth/splash-screen.js +22 -0
- package/console/dist/ui/components/layout/app-sidebar.d.ts +1 -0
- package/console/dist/ui/components/layout/app-sidebar.js +56 -0
- package/console/dist/ui/components/layout/page-shell.d.ts +11 -0
- package/console/dist/ui/components/layout/page-shell.js +10 -0
- package/console/dist/ui/components/layout/section-title.d.ts +10 -0
- package/console/dist/ui/components/layout/section-title.js +9 -0
- package/console/dist/ui/components/theme-provider.d.ts +1 -1
- package/console/dist/ui/components/theme-provider.js +13 -8
- package/console/dist/ui/components/theme-toggle.js +2 -21
- package/console/dist/ui/components/ui/badge.d.ts +1 -1
- package/console/dist/ui/components/ui/badge.js +7 -5
- package/console/dist/ui/components/ui/button.d.ts +2 -2
- package/console/dist/ui/components/ui/button.js +12 -11
- package/console/dist/ui/components/ui/card.js +6 -6
- package/console/dist/ui/components/ui/sheet.d.ts +1 -1
- package/console/dist/ui/i18n/en.json +401 -343
- package/console/dist/ui/i18n/index.js +2 -2
- package/console/dist/ui/i18n/zh-CN.json +406 -348
- package/console/dist/ui/main.d.ts +1 -1
- package/console/dist/ui/main.js +1 -0
- package/console/dist/ui/pages/activation/ActivationPage.d.ts +1 -0
- package/console/dist/ui/pages/activation/ActivationPage.js +150 -0
- package/console/dist/ui/pages/activation/ActivationValidators.d.ts +20 -0
- package/console/dist/ui/pages/activation/ActivationValidators.js +156 -0
- package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +1 -0
- package/console/dist/ui/pages/control-center/ControlCenterPage.js +447 -0
- package/console/dist/ui/pages/debt/DebtPage.d.ts +1 -0
- package/console/dist/ui/pages/debt/DebtPage.js +5 -0
- package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +1 -0
- package/console/dist/ui/pages/design-system/DesignSystemPage.js +30 -0
- package/console/dist/ui/pages/focus/FocusPage.d.ts +1 -0
- package/console/dist/ui/pages/focus/FocusPage.js +265 -0
- package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +59 -0
- package/console/dist/ui/pages/pain/PainEvidenceValidators.js +125 -0
- package/console/dist/ui/pages/pain/PainPage.js +136 -0
- package/console/dist/ui/pages/principles/PrincipleDetailPage.js +264 -0
- package/console/dist/ui/pages/principles/PrinciplesPage.js +244 -0
- package/console/dist/ui/pages/report-problem/ReportProblemPage.js +245 -0
- package/console/dist/ui/pages/settings/SettingsPage.d.ts +4 -0
- package/console/dist/ui/pages/settings/SettingsPage.js +202 -0
- package/console/dist/ui/pages/settings/UpdatePage.d.ts +5 -0
- package/console/dist/ui/pages/settings/UpdatePage.js +168 -0
- package/console/dist/ui/utils/control-center-helpers.d.ts +58 -0
- package/console/dist/ui/utils/control-center-helpers.js +152 -0
- package/console/dist/ui/utils/validators.d.ts +350 -0
- package/console/dist/ui/utils/validators.js +995 -0
- package/console/dist/web/assets/app.css +672 -902
- package/console/dist/web/assets/app.js +6404 -15347
- package/console/dist/web/assets/jetbrains-mono-cyrillic-400-normal-C5JECUCT.woff2 +0 -0
- package/console/dist/web/assets/jetbrains-mono-cyrillic-400-normal-FGCZYWMY.woff +0 -0
- package/console/dist/web/assets/jetbrains-mono-cyrillic-ext-400-normal-C7IFWGF6.woff2 +0 -0
- package/console/dist/web/assets/jetbrains-mono-cyrillic-ext-400-normal-PWXUA557.woff +0 -0
- package/console/dist/web/assets/jetbrains-mono-greek-400-normal-JJNQZMPZ.woff +0 -0
- package/console/dist/web/assets/jetbrains-mono-greek-400-normal-O7JTTR3P.woff2 +0 -0
- package/console/dist/web/assets/jetbrains-mono-latin-400-normal-3OOWLGQ2.woff2 +0 -0
- package/console/dist/web/assets/jetbrains-mono-latin-400-normal-WDD34GPP.woff +0 -0
- package/console/dist/web/assets/jetbrains-mono-latin-ext-400-normal-55RNMRQS.woff +0 -0
- package/console/dist/web/assets/jetbrains-mono-latin-ext-400-normal-JVR3IR4Z.woff2 +0 -0
- package/console/dist/web/assets/jetbrains-mono-vietnamese-400-normal-7ULXAK72.woff +0 -0
- package/console/dist/web/assets/jetbrains-mono-vietnamese-400-normal-KU7YLUPA.woff2 +0 -0
- package/console/package.json +2 -1
- package/core/dist/runtime-v2/__tests__/admission-gate.test.js +49 -0
- package/core/dist/runtime-v2/__tests__/admission-gate.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +16 -1
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts +21 -0
- package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.js +354 -0
- package/core/dist/runtime-v2/__tests__/evidence-sanitizer.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/language-directive.test.d.ts +12 -0
- package/core/dist/runtime-v2/__tests__/language-directive.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/language-directive.test.js +162 -0
- package/core/dist/runtime-v2/__tests__/language-directive.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +23 -1
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js +48 -3
- package/core/dist/runtime-v2/__tests__/pain-to-principle-service.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +13 -1
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts +12 -0
- package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js +194 -0
- package/core/dist/runtime-v2/__tests__/resolve-runtime-config-from-pd-config.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/runtime-config-boundary.test.js +5 -3
- package/core/dist/runtime-v2/__tests__/runtime-config-boundary.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +1 -0
- package/core/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js +54 -0
- package/core/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/memory-activation-state-store.test.js +15 -2
- package/core/dist/runtime-v2/activation/__tests__/memory-activation-state-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js +10 -0
- package/core/dist/runtime-v2/activation/__tests__/prompt-activation-reader-contract.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +17 -2
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +36 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/activation-dispatcher.js +1 -1
- package/core/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
- package/core/dist/runtime-v2/activation/activation-types.d.ts +10 -0
- package/core/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/activation-types.js.map +1 -1
- package/core/dist/runtime-v2/activation/approval-queue.d.ts +6 -0
- package/core/dist/runtime-v2/activation/approval-queue.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/approval-queue.js +3 -0
- package/core/dist/runtime-v2/activation/approval-queue.js.map +1 -1
- package/core/dist/runtime-v2/activation/memory-activation-state-store.d.ts +2 -0
- package/core/dist/runtime-v2/activation/memory-activation-state-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/memory-activation-state-store.js +17 -1
- package/core/dist/runtime-v2/activation/memory-activation-state-store.js.map +1 -1
- package/core/dist/runtime-v2/activation/memory-approval-store.d.ts +6 -0
- package/core/dist/runtime-v2/activation/memory-approval-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/memory-approval-store.js +16 -0
- package/core/dist/runtime-v2/activation/memory-approval-store.js.map +1 -1
- package/core/dist/runtime-v2/activation/prompt-activation-reader-contract.js +1 -1
- package/core/dist/runtime-v2/activation/prompt-activation-reader-contract.js.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts +2 -0
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +34 -6
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts +6 -0
- package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-approval-store.js +10 -0
- package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
- package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js +51 -1
- package/core/dist/runtime-v2/adapter/__tests__/json-extractor.test.js.map +1 -1
- package/core/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter.test.js +145 -0
- package/core/dist/runtime-v2/adapter/__tests__/openclaw-cli-runtime-adapter.test.js.map +1 -1
- package/core/dist/runtime-v2/adapter/json-extractor.d.ts +13 -0
- package/core/dist/runtime-v2/adapter/json-extractor.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/json-extractor.js +103 -0
- package/core/dist/runtime-v2/adapter/json-extractor.js.map +1 -1
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts +4 -2
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.d.ts.map +1 -1
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js +57 -5
- package/core/dist/runtime-v2/adapter/openclaw-cli-runtime-adapter.js.map +1 -1
- package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts +18 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js +633 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-agent-binding.test.js.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.d.ts +13 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js +447 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-redaction-deep.test.js.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts +12 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js +525 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -0
- package/core/dist/runtime-v2/config/index.d.ts +3 -1
- package/core/dist/runtime-v2/config/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/index.js +1 -0
- package/core/dist/runtime-v2/config/index.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts +93 -0
- package/core/dist/runtime-v2/config/pd-config-agent-binding.d.ts.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-agent-binding.js +184 -0
- package/core/dist/runtime-v2/config/pd-config-agent-binding.js.map +1 -0
- package/core/dist/runtime-v2/config/pd-config-defaults.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-defaults.js +2 -0
- package/core/dist/runtime-v2/config/pd-config-defaults.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-effective.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-effective.js +3 -0
- package/core/dist/runtime-v2/config/pd-config-effective.js.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-types.d.ts +8 -0
- package/core/dist/runtime-v2/config/pd-config-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/config/pd-config-types.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts +13 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js +97 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/diagnostician-prompt-language.test.js.map +1 -0
- package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +3 -2
- package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician-prompt-builder.js +6 -4
- package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/evidence-sanitizer.d.ts +57 -0
- package/core/dist/runtime-v2/evidence-sanitizer.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-sanitizer.js +213 -0
- package/core/dist/runtime-v2/evidence-sanitizer.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts +7 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js +170 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/admission-events.test.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts +18 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js +277 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/source-descriptors.test.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts +13 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +264 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts +16 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js +316 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/trigger-controller.test.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts +126 -0
- package/core/dist/runtime-v2/evidence-triage/admission-events.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/admission-events.js +159 -0
- package/core/dist/runtime-v2/evidence-triage/admission-events.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/index.d.ts +16 -0
- package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/index.js +13 -0
- package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +48 -0
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +131 -0
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +32 -0
- package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/triage-policy.js +95 -0
- package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts +116 -0
- package/core/dist/runtime-v2/evidence-triage/trigger-controller.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/trigger-controller.js +218 -0
- package/core/dist/runtime-v2/evidence-triage/trigger-controller.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/types.d.ts +65 -0
- package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/types.js +38 -0
- package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +10 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +1 -0
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +8 -1
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +7 -1
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts +12 -0
- package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js +83 -0
- package/core/dist/runtime-v2/internalization/__tests__/scribe-prompt-language.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts +10 -0
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js +13 -1
- package/core/dist/runtime-v2/internalization/scribe-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts +3 -0
- package/core/dist/runtime-v2/internalization/scribe-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/scribe-runner.js +2 -0
- package/core/dist/runtime-v2/internalization/scribe-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js +1 -1
- package/core/dist/runtime-v2/internalization-chain-integrity-read-model.js.map +1 -1
- package/core/dist/runtime-v2/language-directive.d.ts +80 -0
- package/core/dist/runtime-v2/language-directive.d.ts.map +1 -0
- package/core/dist/runtime-v2/language-directive.js +108 -0
- package/core/dist/runtime-v2/language-directive.js.map +1 -0
- package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-observability.js +24 -11
- package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +16 -0
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js +97 -6
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/core/dist/runtime-v2/pain-to-principle-service.d.ts +7 -0
- package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
- package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
- package/core/dist/runtime-v2/proven-channel-baseline.d.ts.map +1 -1
- package/core/dist/runtime-v2/proven-channel-baseline.js +14 -0
- package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
- package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js +40 -0
- package/core/dist/runtime-v2/runner/__tests__/diagnostician-runner.test.js.map +1 -1
- package/core/dist/runtime-v2/runner/base-peer-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/runner/base-peer-runner.js +1 -0
- package/core/dist/runtime-v2/runner/base-peer-runner.js.map +1 -1
- package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts +10 -0
- package/core/dist/runtime-v2/runner/diagnostician-runner-options.d.ts.map +1 -1
- package/core/dist/runtime-v2/runner/diagnostician-runner-options.js +1 -0
- package/core/dist/runtime-v2/runner/diagnostician-runner-options.js.map +1 -1
- package/core/dist/runtime-v2/runner/diagnostician-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/runner/diagnostician-runner.js +28 -4
- package/core/dist/runtime-v2/runner/diagnostician-runner.js.map +1 -1
- package/core/dist/runtime-v2/runner/peer-runner-types.d.ts +9 -0
- package/core/dist/runtime-v2/runner/peer-runner-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/runtime-state-manager.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js +34 -1
- package/core/dist/runtime-v2/store/runtime-state-manager.integration.test.js.map +1 -1
- package/core/dist/runtime-v2/store/runtime-state-manager.js +1 -0
- package/core/dist/runtime-v2/store/runtime-state-manager.js.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection.js +9 -1
- package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/core/dist/runtime-v2/store/task/sqlite-task-store.js +1 -1
- package/core/dist/runtime-v2/store/task/sqlite-task-store.js.map +1 -1
- package/core/dist/runtime-v2/task-status.d.ts +4 -4
- package/core/dist/runtime-v2/task-status.d.ts.map +1 -1
- package/core/dist/runtime-v2/task-status.js +2 -2
- package/core/dist/runtime-v2/task-status.js.map +1 -1
- package/core/package.json +1 -1
- package/dist/installer.js +1 -1
- package/dist/installer.js.map +1 -1
- package/package.json +2 -2
- package/pd-cli/dist/commands/console.d.ts +2 -0
- package/pd-cli/dist/commands/console.d.ts.map +1 -1
- package/pd-cli/dist/commands/console.js +6 -1
- package/pd-cli/dist/commands/console.js.map +1 -1
- package/pd-cli/dist/commands/diagnose.d.ts.map +1 -1
- package/pd-cli/dist/commands/diagnose.js +18 -1
- package/pd-cli/dist/commands/diagnose.js.map +1 -1
- package/pd-cli/dist/commands/pain-evidence.d.ts +41 -0
- package/pd-cli/dist/commands/pain-evidence.d.ts.map +1 -0
- package/pd-cli/dist/commands/pain-evidence.js +177 -0
- package/pd-cli/dist/commands/pain-evidence.js.map +1 -0
- package/pd-cli/dist/commands/pain-record.d.ts.map +1 -1
- package/pd-cli/dist/commands/pain-record.js +24 -9
- package/pd-cli/dist/commands/pain-record.js.map +1 -1
- package/pd-cli/dist/commands/pain-retry.d.ts +19 -0
- package/pd-cli/dist/commands/pain-retry.d.ts.map +1 -0
- package/pd-cli/dist/commands/pain-retry.js +485 -0
- package/pd-cli/dist/commands/pain-retry.js.map +1 -0
- package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-once.js +59 -9
- package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
- package/pd-cli/dist/commands/runtime-uat.d.ts +1 -0
- package/pd-cli/dist/commands/runtime-uat.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts +2 -0
- package/pd-cli/dist/commands/runtime-uat.guard.test.d.ts.map +1 -0
- package/pd-cli/dist/commands/runtime-uat.guard.test.js +155 -0
- package/pd-cli/dist/commands/runtime-uat.guard.test.js.map +1 -0
- package/pd-cli/dist/commands/runtime-uat.js +29 -3
- package/pd-cli/dist/commands/runtime-uat.js.map +1 -1
- package/pd-cli/dist/config-reader.d.ts +25 -0
- package/pd-cli/dist/config-reader.d.ts.map +1 -0
- package/pd-cli/dist/config-reader.js +109 -0
- package/pd-cli/dist/config-reader.js.map +1 -0
- package/pd-cli/dist/index.js +40 -5
- package/pd-cli/dist/index.js.map +1 -1
- package/pd-cli/dist/services/console-launcher.d.ts.map +1 -1
- package/pd-cli/dist/services/console-launcher.js +29 -15
- package/pd-cli/dist/services/console-launcher.js.map +1 -1
- package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
- package/pd-cli/dist/services/demo-story-a-runner.js +1 -0
- package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
- package/pd-cli/dist/utils/production-workspace-guard.d.ts +77 -0
- package/pd-cli/dist/utils/production-workspace-guard.d.ts.map +1 -0
- package/pd-cli/dist/utils/production-workspace-guard.js +170 -0
- package/pd-cli/dist/utils/production-workspace-guard.js.map +1 -0
- package/pd-cli/dist/utils/production-workspace-guard.test.d.ts +2 -0
- package/pd-cli/dist/utils/production-workspace-guard.test.d.ts.map +1 -0
- package/pd-cli/dist/utils/production-workspace-guard.test.js +95 -0
- package/pd-cli/dist/utils/production-workspace-guard.test.js.map +1 -0
- package/pd-cli/package.json +1 -1
- package/plugin/dist/commands/pain.js +27 -2
- package/plugin/dist/core/pain-diagnostic-gate.d.ts +6 -0
- package/plugin/dist/core/pain-diagnostic-gate.js +9 -0
- package/plugin/dist/hooks/after-tool-call-helpers.d.ts +90 -0
- package/plugin/dist/hooks/after-tool-call-helpers.js +486 -0
- package/plugin/dist/hooks/after-tool-call-types.d.ts +92 -0
- package/plugin/dist/hooks/after-tool-call-types.js +13 -0
- package/plugin/dist/hooks/gate-block-helper.js +73 -29
- package/plugin/dist/hooks/llm.js +49 -29
- package/plugin/dist/hooks/message-sanitize.d.ts +21 -0
- package/plugin/dist/hooks/message-sanitize.js +30 -0
- package/plugin/dist/hooks/pain.d.ts +26 -3
- package/plugin/dist/hooks/pain.js +165 -425
- package/plugin/dist/hooks/prompt.js +3 -2
- package/plugin/dist/hooks/trajectory-evidence.d.ts +11 -0
- package/plugin/dist/hooks/trajectory-evidence.js +65 -0
- package/plugin/dist/hooks/triage-adapter.d.ts +82 -0
- package/plugin/dist/hooks/triage-adapter.js +121 -0
- package/console/dist/server/models/EventLogReadModel.d.ts +0 -33
- package/console/dist/server/models/EventLogReadModel.js +0 -218
- package/console/dist/server/models/EvolutionConsoleModel.d.ts +0 -79
- package/console/dist/server/models/EvolutionConsoleModel.js +0 -179
- package/console/dist/server/models/FeedbackConsoleModel.d.ts +0 -38
- package/console/dist/server/models/FeedbackConsoleModel.js +0 -129
- package/console/dist/server/models/GateConsoleModel.d.ts +0 -50
- package/console/dist/server/models/GateConsoleModel.js +0 -151
- package/console/dist/server/models/OverviewConsoleModel.d.ts +0 -22
- package/console/dist/server/models/OverviewConsoleModel.js +0 -202
- package/console/dist/server/models/PipelineStatsModel.d.ts +0 -35
- package/console/dist/server/models/PipelineStatsModel.js +0 -129
- package/console/dist/server/models/SampleConsoleModel.d.ts +0 -21
- package/console/dist/server/models/SampleConsoleModel.js +0 -188
- package/console/dist/server/models/ThinkingModelsConsoleModel.d.ts +0 -22
- package/console/dist/server/models/ThinkingModelsConsoleModel.js +0 -75
- package/console/dist/server/routes/agents.d.ts +0 -3
- package/console/dist/server/routes/agents.js +0 -442
- package/console/dist/server/routes/central.d.ts +0 -5
- package/console/dist/server/routes/central.js +0 -31
- package/console/dist/server/routes/events.d.ts +0 -10
- package/console/dist/server/routes/events.js +0 -99
- package/console/dist/server/routes/evolution.js +0 -73
- package/console/dist/server/routes/feedback.d.ts +0 -3
- package/console/dist/server/routes/feedback.js +0 -65
- package/console/dist/server/routes/gates.d.ts +0 -3
- package/console/dist/server/routes/gates.js +0 -52
- package/console/dist/server/routes/overview.d.ts +0 -3
- package/console/dist/server/routes/overview.js +0 -49
- package/console/dist/server/routes/pipeline.d.ts +0 -3
- package/console/dist/server/routes/pipeline.js +0 -33
- package/console/dist/server/routes/samples.d.ts +0 -3
- package/console/dist/server/routes/samples.js +0 -101
- package/console/dist/server/routes/thinking-models.d.ts +0 -3
- package/console/dist/server/routes/thinking-models.js +0 -54
- package/console/dist/ui/components/app-sidebar.d.ts +0 -7
- package/console/dist/ui/components/app-sidebar.js +0 -75
- package/console/dist/ui/components/compare-view.d.ts +0 -7
- package/console/dist/ui/components/compare-view.js +0 -32
- package/console/dist/ui/components/data-freshness-indicator.d.ts +0 -10
- package/console/dist/ui/components/data-freshness-indicator.js +0 -63
- package/console/dist/ui/components/health-diagnostic-card.d.ts +0 -15
- package/console/dist/ui/components/health-diagnostic-card.js +0 -42
- package/console/dist/ui/components/page-header.d.ts +0 -10
- package/console/dist/ui/components/page-header.js +0 -37
- package/console/dist/ui/hooks/useAutoRefresh.d.ts +0 -13
- package/console/dist/ui/hooks/useAutoRefresh.js +0 -64
- package/console/dist/ui/hooks/useBookmarks.d.ts +0 -6
- package/console/dist/ui/hooks/useBookmarks.js +0 -43
- package/console/dist/ui/hooks/useDebounce.d.ts +0 -2
- package/console/dist/ui/hooks/useDebounce.js +0 -32
- package/console/dist/ui/hooks/useKeyboardNavigation.d.ts +0 -14
- package/console/dist/ui/hooks/useKeyboardNavigation.js +0 -75
- package/console/dist/ui/pages/AgentsPage.d.ts +0 -1
- package/console/dist/ui/pages/AgentsPage.js +0 -167
- package/console/dist/ui/pages/ApprovalsPage.d.ts +0 -1
- package/console/dist/ui/pages/ApprovalsPage.js +0 -123
- package/console/dist/ui/pages/CentralPage.d.ts +0 -1
- package/console/dist/ui/pages/CentralPage.js +0 -57
- package/console/dist/ui/pages/DataFlowPage.d.ts +0 -1
- package/console/dist/ui/pages/DataFlowPage.js +0 -158
- package/console/dist/ui/pages/EventLogPage.d.ts +0 -1
- package/console/dist/ui/pages/EventLogPage.js +0 -176
- package/console/dist/ui/pages/EvolutionPage.d.ts +0 -1
- package/console/dist/ui/pages/EvolutionPage.js +0 -118
- package/console/dist/ui/pages/FeedbackPage.d.ts +0 -1
- package/console/dist/ui/pages/FeedbackPage.js +0 -46
- package/console/dist/ui/pages/GatesPage.d.ts +0 -1
- package/console/dist/ui/pages/GatesPage.js +0 -31
- package/console/dist/ui/pages/LoginPage.d.ts +0 -5
- package/console/dist/ui/pages/LoginPage.js +0 -39
- package/console/dist/ui/pages/OverviewPage.d.ts +0 -1
- package/console/dist/ui/pages/OverviewPage.js +0 -50
- package/console/dist/ui/pages/PainPage.js +0 -50
- package/console/dist/ui/pages/PrincipleDetailPage.js +0 -145
- package/console/dist/ui/pages/PrinciplesPage.js +0 -322
- package/console/dist/ui/pages/ReportProblemPage.js +0 -186
- package/console/dist/ui/pages/SamplesPage.d.ts +0 -1
- package/console/dist/ui/pages/SamplesPage.js +0 -105
- package/console/dist/ui/pages/SettingsPage.d.ts +0 -1
- package/console/dist/ui/pages/SettingsPage.js +0 -86
- package/console/dist/ui/pages/TasksPage.d.ts +0 -1
- package/console/dist/ui/pages/TasksPage.js +0 -373
- package/console/dist/ui/pages/ThinkingModelsPage.d.ts +0 -1
- package/console/dist/ui/pages/ThinkingModelsPage.js +0 -32
- package/console/dist/ui/pages/UpdatePage.d.ts +0 -1
- package/console/dist/ui/pages/UpdatePage.js +0 -142
- /package/console/dist/ui/pages/{PainPage.d.ts → pain/PainPage.d.ts} +0 -0
- /package/console/dist/ui/pages/{PrincipleDetailPage.d.ts → principles/PrincipleDetailPage.d.ts} +0 -0
- /package/console/dist/ui/pages/{PrinciplesPage.d.ts → principles/PrinciplesPage.d.ts} +0 -0
- /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
|