create-principles-disciple 1.82.0 → 1.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-validation-edge-cases.test.js +92 -0
- package/core/dist/runtime-v2/config/__tests__/pd-config-validation-edge-cases.test.js.map +1 -1
- 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/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,112 @@
|
|
|
1
|
+
import { SqliteConnection, SqliteActivationStateStore, SqlitePIArtifactStore, } from '@principles/core/runtime-v2';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
function isMissingTableError(err) {
|
|
5
|
+
if (!(err instanceof Error))
|
|
6
|
+
return false;
|
|
7
|
+
return err.message.includes('no such table');
|
|
8
|
+
}
|
|
9
|
+
export class ActivationsConsoleModel {
|
|
10
|
+
readConnection = null;
|
|
11
|
+
writeConnection = null;
|
|
12
|
+
workspaceDir;
|
|
13
|
+
constructor(workspaceDir) {
|
|
14
|
+
this.workspaceDir = workspaceDir;
|
|
15
|
+
}
|
|
16
|
+
getReadConnection() {
|
|
17
|
+
if (!this.readConnection) {
|
|
18
|
+
this.readConnection = new SqliteConnection({ workspaceDir: this.workspaceDir, readonly: true });
|
|
19
|
+
}
|
|
20
|
+
return this.readConnection;
|
|
21
|
+
}
|
|
22
|
+
getWriteConnection() {
|
|
23
|
+
if (!this.writeConnection) {
|
|
24
|
+
this.writeConnection = new SqliteConnection({ workspaceDir: this.workspaceDir, readonly: false });
|
|
25
|
+
}
|
|
26
|
+
return this.writeConnection;
|
|
27
|
+
}
|
|
28
|
+
async getActivations() {
|
|
29
|
+
const stateDbPath = path.join(this.workspaceDir, '.pd', 'state.db');
|
|
30
|
+
if (!fs.existsSync(stateDbPath)) {
|
|
31
|
+
return { activations: [], generatedAt: new Date().toISOString(), note: 'state.db not found — workspace may not be initialized' };
|
|
32
|
+
}
|
|
33
|
+
const conn = this.getReadConnection();
|
|
34
|
+
const activationStore = new SqliteActivationStateStore(conn);
|
|
35
|
+
const artifactStore = new SqlitePIArtifactStore(conn);
|
|
36
|
+
let allActivations;
|
|
37
|
+
try {
|
|
38
|
+
allActivations = await activationStore.listAllActivations();
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
if (isMissingTableError(err)) {
|
|
42
|
+
return { activations: [], generatedAt: new Date().toISOString(), note: 'activation table not found — workspace may not be initialized' };
|
|
43
|
+
}
|
|
44
|
+
throw err;
|
|
45
|
+
}
|
|
46
|
+
// Build artifactId → sourcePrincipleId map from PIArtifactSnapshot
|
|
47
|
+
const artifactPrincipleMap = new Map();
|
|
48
|
+
for (const activation of allActivations) {
|
|
49
|
+
if (!artifactPrincipleMap.has(activation.artifactId)) {
|
|
50
|
+
try {
|
|
51
|
+
const artifact = await artifactStore.getArtifactById(activation.artifactId);
|
|
52
|
+
artifactPrincipleMap.set(activation.artifactId, artifact?.sourcePrincipleId ?? null);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
if (isMissingTableError(err)) {
|
|
56
|
+
artifactPrincipleMap.set(activation.artifactId, null);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
throw err;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const facts = allActivations.map((record) => ({
|
|
65
|
+
id: record.activationId,
|
|
66
|
+
artifactId: record.artifactId,
|
|
67
|
+
principleId: artifactPrincipleMap.get(record.artifactId) ?? 'unlinked',
|
|
68
|
+
channel: record.channel,
|
|
69
|
+
action: record.action,
|
|
70
|
+
targetRef: record.targetRef,
|
|
71
|
+
activatedAt: record.activatedAt,
|
|
72
|
+
status: record.deactivatedAt === null ? 'active' : 'inactive',
|
|
73
|
+
}));
|
|
74
|
+
return {
|
|
75
|
+
activations: facts,
|
|
76
|
+
generatedAt: new Date().toISOString(),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
async deactivateActivation(activationId) {
|
|
80
|
+
const stateDbPath = path.join(this.workspaceDir, '.pd', 'state.db');
|
|
81
|
+
if (!fs.existsSync(stateDbPath)) {
|
|
82
|
+
return { ok: false, reason: 'state.db not found — workspace may not be initialized', nextAction: 'Ensure the workspace has been initialized with PD before disabling activations.' };
|
|
83
|
+
}
|
|
84
|
+
const conn = this.getWriteConnection();
|
|
85
|
+
const activationStore = new SqliteActivationStateStore(conn);
|
|
86
|
+
try {
|
|
87
|
+
const deactivated = await activationStore.deactivateActivation(activationId, new Date().toISOString());
|
|
88
|
+
if (!deactivated) {
|
|
89
|
+
return { ok: false, reason: `Activation '${activationId}' not found or already inactive`, nextAction: 'Refresh the activation list and verify the activation ID is correct.' };
|
|
90
|
+
}
|
|
91
|
+
return { ok: true };
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
95
|
+
return { ok: false, reason: `Failed to deactivate activation: ${message}`, nextAction: 'Check server logs for details. The activation state has not been changed.' };
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
dispose() {
|
|
99
|
+
for (const conn of [this.readConnection, this.writeConnection]) {
|
|
100
|
+
if (conn) {
|
|
101
|
+
try {
|
|
102
|
+
conn.close();
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
console.warn('ActivationsConsoleModel.dispose: failed to close connection:', err instanceof Error ? err.message : String(err));
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
this.readConnection = null;
|
|
110
|
+
this.writeConnection = null;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
@@ -21,6 +21,11 @@ export type ApproveWithActivationResult = {
|
|
|
21
21
|
ok: false;
|
|
22
22
|
error: 'unsupported_channel';
|
|
23
23
|
channel: string;
|
|
24
|
+
} | {
|
|
25
|
+
ok: false;
|
|
26
|
+
error: 'activation_failed';
|
|
27
|
+
reason: string;
|
|
28
|
+
approvalRolledBack: boolean;
|
|
24
29
|
};
|
|
25
30
|
export declare class ApprovalsConsoleModel {
|
|
26
31
|
private readConnection;
|
|
@@ -8,6 +8,9 @@ function isMissingTableError(err) {
|
|
|
8
8
|
return false;
|
|
9
9
|
return err.message.includes('no such table');
|
|
10
10
|
}
|
|
11
|
+
function isActivationSuccess(activation) {
|
|
12
|
+
return activation.decision === 'activated' || activation.decision === 'already_activated';
|
|
13
|
+
}
|
|
11
14
|
function stateDbExists(workspaceDir) {
|
|
12
15
|
return fs.existsSync(path.join(workspaceDir, '.pd', 'state.db'));
|
|
13
16
|
}
|
|
@@ -104,6 +107,17 @@ export class ApprovalsConsoleModel {
|
|
|
104
107
|
return { ok: false, error: 'not_found' };
|
|
105
108
|
}
|
|
106
109
|
const activation = await this.dispatchActivationAfterApproval(existing, decidedBy);
|
|
110
|
+
// If activation failed, roll back approval to pending so the user can retry.
|
|
111
|
+
if (activation && !isActivationSuccess(activation)) {
|
|
112
|
+
const detail = 'reason' in activation ? activation.reason : activation.decision;
|
|
113
|
+
let approvalRolledBack = false;
|
|
114
|
+
try {
|
|
115
|
+
const rollbackResult = await this.getWriteQueue().resetToPending(approvalId);
|
|
116
|
+
approvalRolledBack = rollbackResult.ok;
|
|
117
|
+
}
|
|
118
|
+
catch { /* best-effort rollback */ }
|
|
119
|
+
return { ok: false, error: 'activation_failed', reason: detail, approvalRolledBack };
|
|
120
|
+
}
|
|
107
121
|
return { ok: true, record: approvalResult.record, activation };
|
|
108
122
|
}
|
|
109
123
|
async dispatchActivationAfterApproval(existing, decidedBy) {
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export interface ApprovalGroup {
|
|
2
|
+
principleId: string;
|
|
3
|
+
principleTitle: string;
|
|
4
|
+
status: 'pending' | 'approved' | 'rejected';
|
|
5
|
+
records: {
|
|
6
|
+
id: string;
|
|
7
|
+
artifactId: string;
|
|
8
|
+
channel: string;
|
|
9
|
+
createdAt: string;
|
|
10
|
+
}[];
|
|
11
|
+
}
|
|
12
|
+
export interface ApprovalsGroupedResponse {
|
|
13
|
+
groups: ApprovalGroup[];
|
|
14
|
+
generatedAt: string;
|
|
15
|
+
/** Present when data is degraded/missing rather than genuinely empty */
|
|
16
|
+
note?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare class ApprovalsGroupedConsoleModel {
|
|
19
|
+
private readConnection;
|
|
20
|
+
private readonly workspaceDir;
|
|
21
|
+
constructor(workspaceDir: string);
|
|
22
|
+
private getReadConnection;
|
|
23
|
+
getApprovalsGrouped(): Promise<ApprovalsGroupedResponse>;
|
|
24
|
+
dispose(): void;
|
|
25
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { SqliteConnection, SqliteApprovalQueueStore, SqlitePIArtifactStore, ApprovalQueue, loadLedger, } from '@principles/core/runtime-v2';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
function isMissingTableError(err) {
|
|
5
|
+
if (!(err instanceof Error))
|
|
6
|
+
return false;
|
|
7
|
+
return err.message.includes('no such table');
|
|
8
|
+
}
|
|
9
|
+
export class ApprovalsGroupedConsoleModel {
|
|
10
|
+
readConnection = null;
|
|
11
|
+
workspaceDir;
|
|
12
|
+
constructor(workspaceDir) {
|
|
13
|
+
this.workspaceDir = workspaceDir;
|
|
14
|
+
}
|
|
15
|
+
getReadConnection() {
|
|
16
|
+
if (!this.readConnection) {
|
|
17
|
+
this.readConnection = new SqliteConnection({ workspaceDir: this.workspaceDir, readonly: true });
|
|
18
|
+
}
|
|
19
|
+
return this.readConnection;
|
|
20
|
+
}
|
|
21
|
+
async getApprovalsGrouped() {
|
|
22
|
+
const stateDbPath = path.join(this.workspaceDir, '.pd', 'state.db');
|
|
23
|
+
if (!fs.existsSync(stateDbPath)) {
|
|
24
|
+
return { groups: [], generatedAt: new Date().toISOString(), note: 'state.db not found — workspace may not be initialized' };
|
|
25
|
+
}
|
|
26
|
+
const conn = this.getReadConnection();
|
|
27
|
+
const store = new SqliteApprovalQueueStore(conn);
|
|
28
|
+
const queue = new ApprovalQueue(store);
|
|
29
|
+
const artifactStore = new SqlitePIArtifactStore(conn);
|
|
30
|
+
let allApprovals;
|
|
31
|
+
try {
|
|
32
|
+
allApprovals = await queue.listAll();
|
|
33
|
+
}
|
|
34
|
+
catch (err) {
|
|
35
|
+
if (isMissingTableError(err)) {
|
|
36
|
+
return { groups: [], generatedAt: new Date().toISOString(), note: 'approval table not found — workspace may not be initialized' };
|
|
37
|
+
}
|
|
38
|
+
throw err;
|
|
39
|
+
}
|
|
40
|
+
// Build artifactId → sourcePrincipleId map
|
|
41
|
+
const artifactPrincipleMap = new Map();
|
|
42
|
+
for (const approval of allApprovals) {
|
|
43
|
+
if (!artifactPrincipleMap.has(approval.artifactId)) {
|
|
44
|
+
try {
|
|
45
|
+
const artifact = await artifactStore.getArtifactById(approval.artifactId);
|
|
46
|
+
artifactPrincipleMap.set(approval.artifactId, artifact?.sourcePrincipleId ?? null);
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
if (isMissingTableError(err)) {
|
|
50
|
+
artifactPrincipleMap.set(approval.artifactId, null);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Load ledger for principle titles
|
|
59
|
+
const stateDir = path.join(this.workspaceDir, '.state');
|
|
60
|
+
let principleTitles = new Map();
|
|
61
|
+
try {
|
|
62
|
+
const ledger = loadLedger(stateDir);
|
|
63
|
+
for (const [id, principle] of Object.entries(ledger.tree.principles)) {
|
|
64
|
+
principleTitles.set(id, principle.text);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Ledger not available — will fall back to principleId
|
|
69
|
+
}
|
|
70
|
+
// Group by principleId (null → "unlinked")
|
|
71
|
+
const groupMap = new Map();
|
|
72
|
+
for (const approval of allApprovals) {
|
|
73
|
+
const principleId = artifactPrincipleMap.get(approval.artifactId) ?? 'unlinked';
|
|
74
|
+
if (!groupMap.has(principleId)) {
|
|
75
|
+
groupMap.set(principleId, []);
|
|
76
|
+
}
|
|
77
|
+
const records = groupMap.get(principleId);
|
|
78
|
+
if (!records)
|
|
79
|
+
continue;
|
|
80
|
+
records.push({
|
|
81
|
+
id: approval.approvalId,
|
|
82
|
+
artifactId: approval.artifactId,
|
|
83
|
+
channel: approval.channel,
|
|
84
|
+
createdAt: approval.requestedAt,
|
|
85
|
+
status: approval.status,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const groups = [];
|
|
89
|
+
for (const [principleId, records] of groupMap) {
|
|
90
|
+
// Determine overall group status
|
|
91
|
+
const statuses = records.map((r) => r.status);
|
|
92
|
+
let status;
|
|
93
|
+
if (statuses.every((s) => s === 'approved')) {
|
|
94
|
+
status = 'approved';
|
|
95
|
+
}
|
|
96
|
+
else if (statuses.every((s) => s === 'rejected')) {
|
|
97
|
+
status = 'rejected';
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
status = 'pending';
|
|
101
|
+
}
|
|
102
|
+
const principleTitle = principleTitles.get(principleId) ?? principleId;
|
|
103
|
+
groups.push({
|
|
104
|
+
principleId,
|
|
105
|
+
principleTitle,
|
|
106
|
+
status,
|
|
107
|
+
records,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
groups,
|
|
112
|
+
generatedAt: new Date().toISOString(),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
dispose() {
|
|
116
|
+
if (this.readConnection) {
|
|
117
|
+
try {
|
|
118
|
+
this.readConnection.close();
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
console.warn('ApprovalsGroupedConsoleModel.dispose: failed to close connection:', err instanceof Error ? err.message : String(err));
|
|
122
|
+
}
|
|
123
|
+
this.readConnection = null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { LifecycleDatasource } from '@principles/core/runtime-v2';
|
|
2
|
+
import type { LedgerTreeStore, ReplayReport, ArtifactLineageRecord } from '@principles/core/runtime-v2';
|
|
3
|
+
export declare class LineageSourceRetiredError extends Error {
|
|
4
|
+
constructor();
|
|
5
|
+
}
|
|
6
|
+
export declare class ConsoleLifecycleDatasource implements LifecycleDatasource {
|
|
7
|
+
private readonly workspaceDir;
|
|
8
|
+
private readonly stateDir;
|
|
9
|
+
constructor(workspaceDir: string, stateDir: string);
|
|
10
|
+
loadLedger(): LedgerTreeStore;
|
|
11
|
+
listReplayReports(implementationId: string): ReplayReport[];
|
|
12
|
+
listLineageRecords(_kind: 'behavioral-sample' | 'rule-implementation-candidate'): ArtifactLineageRecord[];
|
|
13
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { loadLedger } from '@principles/core/runtime-v2';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
export class LineageSourceRetiredError extends Error {
|
|
5
|
+
constructor() {
|
|
6
|
+
super('Artifact lineage source retired in PRI-230. ' +
|
|
7
|
+
'The nocturnal-artifact-lineage module has been deleted; ' +
|
|
8
|
+
'this datasource cannot provide lineage records. ' +
|
|
9
|
+
'Callers must handle this error explicitly rather than interpreting an empty result as "no lineage".');
|
|
10
|
+
this.name = 'LineageSourceRetiredError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function isRecord(value) {
|
|
14
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
function validateReplayReport(raw) {
|
|
17
|
+
if (!isRecord(raw))
|
|
18
|
+
return null;
|
|
19
|
+
if (typeof raw.implementationId !== 'string')
|
|
20
|
+
return null;
|
|
21
|
+
if (typeof raw.overallDecision !== 'string')
|
|
22
|
+
return null;
|
|
23
|
+
if (typeof raw.generatedAt !== 'string')
|
|
24
|
+
return null;
|
|
25
|
+
// After basic structural checks, cast through unknown for ReplayReport
|
|
26
|
+
// This is acceptable: the file comes from PD's own replay-reports directory,
|
|
27
|
+
// and we've validated the key discriminator fields above.
|
|
28
|
+
return raw;
|
|
29
|
+
}
|
|
30
|
+
export class ConsoleLifecycleDatasource {
|
|
31
|
+
workspaceDir;
|
|
32
|
+
stateDir;
|
|
33
|
+
constructor(workspaceDir, stateDir) {
|
|
34
|
+
this.workspaceDir = workspaceDir;
|
|
35
|
+
this.stateDir = stateDir;
|
|
36
|
+
}
|
|
37
|
+
loadLedger() {
|
|
38
|
+
const { tree } = loadLedger(this.stateDir);
|
|
39
|
+
// Runtime shape check: tree must be a non-null object with 'principles' record
|
|
40
|
+
if (typeof tree !== 'object' || tree === null || !isRecord(tree.principles)) {
|
|
41
|
+
throw new Error(`ConsoleLifecycleDatasource.loadLedger: ledger tree is malformed. ` +
|
|
42
|
+
`Expected object with 'principles' record, got ${tree === null ? 'null' : typeof tree}. ` +
|
|
43
|
+
`stateDir=${this.stateDir}`);
|
|
44
|
+
}
|
|
45
|
+
return tree;
|
|
46
|
+
}
|
|
47
|
+
listReplayReports(implementationId) {
|
|
48
|
+
const reportDir = path.join(this.stateDir, 'principles', 'implementations', implementationId, 'replays');
|
|
49
|
+
if (!fs.existsSync(reportDir))
|
|
50
|
+
return [];
|
|
51
|
+
try {
|
|
52
|
+
const files = fs.readdirSync(reportDir).filter((file) => file.endsWith('.json'));
|
|
53
|
+
return files
|
|
54
|
+
.sort()
|
|
55
|
+
.reverse()
|
|
56
|
+
.map((file) => {
|
|
57
|
+
const content = fs.readFileSync(path.join(reportDir, file), 'utf-8');
|
|
58
|
+
const parsed = JSON.parse(content);
|
|
59
|
+
return validateReplayReport(parsed);
|
|
60
|
+
})
|
|
61
|
+
.filter((report) => report !== null);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
console.warn(`ConsoleLifecycleDatasource.listReplayReports: failed to read replay reports ` +
|
|
65
|
+
`for implementationId=${implementationId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
66
|
+
return [];
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// eslint-disable-next-line @typescript-eslint/class-methods-use-this
|
|
70
|
+
listLineageRecords(_kind) {
|
|
71
|
+
throw new LineageSourceRetiredError();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EvidenceChainConsoleModel — read model for the Behavior Evidence page.
|
|
3
|
+
*
|
|
4
|
+
* Reads real pain/evidence/diagnosis chain data from:
|
|
5
|
+
* - pain_events table in trajectory.db
|
|
6
|
+
* - tasks table in state.db (diagnostician tasks)
|
|
7
|
+
* - principle_candidates table in state.db
|
|
8
|
+
* - principle ledger JSON
|
|
9
|
+
*
|
|
10
|
+
* Returns structured EvidenceChainRecord items that the frontend can
|
|
11
|
+
* render as single-record cards with proper state grouping.
|
|
12
|
+
*
|
|
13
|
+
* Privacy boundary (G.2 / F.3 / F.5):
|
|
14
|
+
* - No raw prompt, chat, trajectory, token, full absolute path, or stack trace
|
|
15
|
+
* - All summaries go through sanitizeString from evidence-sanitizer
|
|
16
|
+
* - Degraded paths include structured reason + nextAction (ERR-002)
|
|
17
|
+
*
|
|
18
|
+
* ERR checklist:
|
|
19
|
+
* - ERR-001/005: All DB rows treated as unknown, runtime validation with typeof guards
|
|
20
|
+
* - ERR-002: Degraded paths include reason + nextAction, never silent fallback
|
|
21
|
+
* - ERR-009/010: Required fields fail loud
|
|
22
|
+
* - ERR-014/016/017: Evidence previews bounded via sanitizeString
|
|
23
|
+
* - ERR-013: Use Object.hasOwn() for untrusted object keys
|
|
24
|
+
*/
|
|
25
|
+
export type EvidenceChainState = 'evidence_only' | 'pain_recorded' | 'diagnosis_queued' | 'diagnosis_running' | 'diagnosis_succeeded' | 'diagnosis_failed' | 'diagnosis_retry_wait' | 'candidate_generated' | 'internalization_started';
|
|
26
|
+
export interface EvidenceChainRecord {
|
|
27
|
+
id: string;
|
|
28
|
+
sourceKind: string;
|
|
29
|
+
observedAt: string;
|
|
30
|
+
state: EvidenceChainState;
|
|
31
|
+
summary: string;
|
|
32
|
+
admissionDecision?: string;
|
|
33
|
+
linkedPainId?: string;
|
|
34
|
+
linkedTaskId?: string;
|
|
35
|
+
linkedTaskStatus?: string;
|
|
36
|
+
linkedCandidateId?: string;
|
|
37
|
+
linkedPrincipleId?: string;
|
|
38
|
+
failureReason?: string;
|
|
39
|
+
degradedReason?: string;
|
|
40
|
+
nextAction?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface EvidenceChainResponse {
|
|
43
|
+
records: EvidenceChainRecord[];
|
|
44
|
+
generatedAt: string;
|
|
45
|
+
/** Present when data sources are degraded rather than genuinely empty */
|
|
46
|
+
degradedReason?: string;
|
|
47
|
+
nextAction?: string;
|
|
48
|
+
/** Present when evidence-only sources exist but no pain signals */
|
|
49
|
+
note?: string;
|
|
50
|
+
}
|
|
51
|
+
export declare class EvidenceChainConsoleModel {
|
|
52
|
+
private readConnection;
|
|
53
|
+
private readonly workspaceDir;
|
|
54
|
+
constructor(workspaceDir: string);
|
|
55
|
+
private getReadConnection;
|
|
56
|
+
getEvidenceChain(): Promise<EvidenceChainResponse>;
|
|
57
|
+
dispose(): void;
|
|
58
|
+
}
|