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
package/console/dist/ui/api.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { validateErrorResponse, validateHeaders, validateFeedbackReport, validateFeedbackDraftsList, validateFeedbackDraftEnvelope, validateDeleteEnvelope, validateWorkspaceEntry, validateWorkspaceList, validateRemovedEnvelope, validateSyncResult, validateConfigReadiness, validateConfigSummary, validateConfigCatalog, validateAgentBindingUpdate, validateReadinessCheck, validateDefaultRuntimeUpdate, validateOutputLanguage, validateGovernanceQueue, validateActivations, validateDisableActivation, validateLifecycleMetrics, validateUpdateStatus, validateUpdateHistory, validateApprovalListResult, validateApprovalRecordDirect, validatePrinciplesList, validateApprovalsGrouped, validateEvidenceChain, } from "./utils/validators.js";
|
|
2
|
+
// ── Auth ──────────────────────────────────────────────────────────────────────
|
|
1
3
|
function getToken() {
|
|
2
4
|
return sessionStorage.getItem("pd_token");
|
|
3
5
|
}
|
|
@@ -7,7 +9,7 @@ function setToken(token) {
|
|
|
7
9
|
function clearToken() {
|
|
8
10
|
sessionStorage.removeItem("pd_token");
|
|
9
11
|
}
|
|
10
|
-
async function request(path, options) {
|
|
12
|
+
async function request(path, options, validate) {
|
|
11
13
|
const token = getToken();
|
|
12
14
|
const headers = {
|
|
13
15
|
"Content-Type": "application/json",
|
|
@@ -20,30 +22,59 @@ async function request(path, options) {
|
|
|
20
22
|
...options,
|
|
21
23
|
headers: {
|
|
22
24
|
...headers,
|
|
23
|
-
...options?.headers,
|
|
25
|
+
...(validateHeaders(options?.headers) ?? {}),
|
|
24
26
|
},
|
|
25
27
|
});
|
|
26
28
|
if (!response.ok) {
|
|
29
|
+
if (response.status === 401) {
|
|
30
|
+
const hadToken = getToken() !== null;
|
|
31
|
+
clearToken();
|
|
32
|
+
// eslint-disable-next-line no-undef
|
|
33
|
+
if (hadToken && !window.location.hash.startsWith("#/login")) {
|
|
34
|
+
// eslint-disable-next-line no-undef
|
|
35
|
+
window.location.hash = "#/login?session_expired=true";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
27
38
|
let errorMessage = `HTTP ${response.status}`;
|
|
39
|
+
let nextAction;
|
|
28
40
|
try {
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
const raw = await response.json();
|
|
42
|
+
const parsed = validateErrorResponse(raw);
|
|
43
|
+
if (parsed) {
|
|
44
|
+
if (parsed.message) {
|
|
45
|
+
errorMessage = parsed.message;
|
|
46
|
+
}
|
|
47
|
+
else if (parsed.error) {
|
|
48
|
+
errorMessage = parsed.error;
|
|
49
|
+
}
|
|
50
|
+
if (parsed.nextAction) {
|
|
51
|
+
({ nextAction } = parsed);
|
|
52
|
+
}
|
|
35
53
|
}
|
|
36
54
|
}
|
|
37
55
|
catch {
|
|
38
56
|
// ignore parse errors
|
|
39
57
|
}
|
|
40
|
-
return { success: false, error: errorMessage };
|
|
58
|
+
return { success: false, error: errorMessage, nextAction };
|
|
41
59
|
}
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
60
|
+
const raw = await response.json();
|
|
61
|
+
const apiData = (raw && typeof raw === "object" && "success" in raw && "data" in raw)
|
|
62
|
+
? raw.data
|
|
63
|
+
: raw;
|
|
64
|
+
if (validate) {
|
|
65
|
+
const validated = validate(apiData);
|
|
66
|
+
if (validated !== null) {
|
|
67
|
+
return { success: true, data: validated };
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
success: false,
|
|
71
|
+
error: "Response validation failed: unexpected data shape from server",
|
|
72
|
+
nextAction: "Try refreshing the page. If the problem persists, report it.",
|
|
73
|
+
};
|
|
45
74
|
}
|
|
46
|
-
|
|
75
|
+
// No validator provided — returns ApiResponse<unknown>.
|
|
76
|
+
// The caller must not assume a specific data shape.
|
|
77
|
+
return { success: true, data: apiData };
|
|
47
78
|
}
|
|
48
79
|
catch (err) {
|
|
49
80
|
return {
|
|
@@ -56,162 +87,38 @@ async function checkAuth() {
|
|
|
56
87
|
const result = await request("/api/health");
|
|
57
88
|
return result.success;
|
|
58
89
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
async function fetchTaskEvidence(id) {
|
|
63
|
-
return request(`/api/tasks/${id}/evidence`);
|
|
64
|
-
}
|
|
65
|
-
async function approveTask(id) {
|
|
66
|
-
return request(`/api/tasks/${id}/approve`, { method: "POST" });
|
|
67
|
-
}
|
|
68
|
-
async function rejectTask(id) {
|
|
69
|
-
return request(`/api/tasks/${id}/reject`, { method: "POST" });
|
|
70
|
-
}
|
|
71
|
-
async function cleanupTask(id) {
|
|
72
|
-
return request(`/api/tasks/${id}/cleanup`, { method: "POST" });
|
|
73
|
-
}
|
|
74
|
-
async function fetchStatus() {
|
|
75
|
-
return request("/api/status");
|
|
76
|
-
}
|
|
77
|
-
async function fetchActivity() {
|
|
78
|
-
return request("/api/activity");
|
|
79
|
-
}
|
|
80
|
-
async function fetchOverview() {
|
|
81
|
-
return request("/api/overview");
|
|
82
|
-
}
|
|
83
|
-
async function fetchOverviewHealth() {
|
|
84
|
-
return request("/api/overview/health");
|
|
85
|
-
}
|
|
86
|
-
async function fetchGateStats() {
|
|
87
|
-
return request("/api/gate/stats");
|
|
88
|
-
}
|
|
89
|
-
async function fetchGateBlocks(limit) {
|
|
90
|
-
const query = limit ? `?limit=${limit}` : '';
|
|
91
|
-
return request(`/api/gate/blocks${query}`);
|
|
92
|
-
}
|
|
93
|
-
async function fetchFeedbackGfi() {
|
|
94
|
-
return request("/api/feedback/gfi");
|
|
95
|
-
}
|
|
96
|
-
async function fetchEmpathyEvents(limit) {
|
|
97
|
-
const query = limit ? `?limit=${limit}` : '';
|
|
98
|
-
return request(`/api/feedback/empathy-events${query}`);
|
|
99
|
-
}
|
|
100
|
-
async function fetchFeedbackGateBlocks(limit) {
|
|
101
|
-
const query = limit ? `?limit=${limit}` : '';
|
|
102
|
-
return request(`/api/feedback/gate-blocks${query}`);
|
|
90
|
+
// ── Config Readiness (renamed from fetchSystemHealth) ─────────────────────────
|
|
91
|
+
async function fetchConfigReadiness() {
|
|
92
|
+
return request("/api/health", undefined, validateConfigReadiness);
|
|
103
93
|
}
|
|
94
|
+
// ── Workspaces ────────────────────────────────────────────────────────────────
|
|
104
95
|
async function fetchWorkspaces() {
|
|
105
|
-
return request("/api/workspaces");
|
|
96
|
+
return request("/api/workspaces", undefined, validateWorkspaceList);
|
|
106
97
|
}
|
|
107
98
|
async function addWorkspace(name, path) {
|
|
108
99
|
return request("/api/workspaces", {
|
|
109
100
|
method: "POST",
|
|
110
101
|
body: JSON.stringify({ name, path }),
|
|
111
|
-
});
|
|
102
|
+
}, validateWorkspaceEntry);
|
|
112
103
|
}
|
|
113
104
|
async function removeWorkspace(name) {
|
|
114
|
-
return request(`/api/workspaces/${encodeURIComponent(name)}`, { method: "DELETE" });
|
|
105
|
+
return request(`/api/workspaces/${encodeURIComponent(name)}`, { method: "DELETE" }, validateRemovedEnvelope);
|
|
115
106
|
}
|
|
116
107
|
async function syncWorkspace(name) {
|
|
117
|
-
return request(`/api/workspaces/${encodeURIComponent(name)}/sync`, { method: "POST" });
|
|
118
|
-
}
|
|
119
|
-
async function fetchCentralOverview() {
|
|
120
|
-
return request("/api/central/overview");
|
|
121
|
-
}
|
|
122
|
-
async function fetchCentralHealth() {
|
|
123
|
-
return request("/api/central/health");
|
|
124
|
-
}
|
|
125
|
-
async function fetchSamples(status, page) {
|
|
126
|
-
const params = new URLSearchParams();
|
|
127
|
-
if (status && status !== 'all')
|
|
128
|
-
params.set('status', status);
|
|
129
|
-
if (page)
|
|
130
|
-
params.set('page', String(page));
|
|
131
|
-
const query = params.toString() ? `?${params.toString()}` : '';
|
|
132
|
-
return request(`/api/samples${query}`);
|
|
133
|
-
}
|
|
134
|
-
async function fetchSampleDetail(sampleId) {
|
|
135
|
-
return request(`/api/samples/${encodeURIComponent(sampleId)}`);
|
|
136
|
-
}
|
|
137
|
-
async function reviewSample(sampleId, decision) {
|
|
138
|
-
return request(`/api/samples/${encodeURIComponent(sampleId)}/review`, {
|
|
139
|
-
method: 'POST',
|
|
140
|
-
body: JSON.stringify({ decision }),
|
|
141
|
-
});
|
|
108
|
+
return request(`/api/workspaces/${encodeURIComponent(name)}/sync`, { method: "POST" }, validateSyncResult);
|
|
142
109
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
const params = new URLSearchParams();
|
|
148
|
-
if (status && status !== 'all')
|
|
149
|
-
params.set('status', status);
|
|
150
|
-
if (page)
|
|
151
|
-
params.set('page', String(page));
|
|
152
|
-
const query = params.toString() ? `?${params.toString()}` : '';
|
|
153
|
-
return request(`/api/evolution/tasks${query}`);
|
|
154
|
-
}
|
|
155
|
-
async function fetchEvolutionPrinciples() {
|
|
156
|
-
return request("/api/evolution/principles");
|
|
157
|
-
}
|
|
158
|
-
async function fetchPrinciples() {
|
|
159
|
-
return request("/api/principles");
|
|
110
|
+
// ── Principles ────────────────────────────────────────────────────────────────
|
|
111
|
+
async function fetchPrinciples(filter) {
|
|
112
|
+
const query = filter && filter !== 'all' ? `?filter=${filter}` : '';
|
|
113
|
+
return request(`/api/principles${query}`, undefined, validatePrinciplesList);
|
|
160
114
|
}
|
|
115
|
+
// Principle detail is deeply nested; for now we accept unvalidated until a
|
|
116
|
+
// dedicated validator is added (the page already handles missing fields gracefully).
|
|
117
|
+
// This endpoint is marked legacy/deferred for full validation.
|
|
161
118
|
async function fetchPrincipleDetail(principleId) {
|
|
162
119
|
return request(`/api/principles/${encodeURIComponent(principleId)}`);
|
|
163
120
|
}
|
|
164
|
-
|
|
165
|
-
return request("/api/evolution/queue");
|
|
166
|
-
}
|
|
167
|
-
async function fetchThinkingModels() {
|
|
168
|
-
return request("/api/thinking-models");
|
|
169
|
-
}
|
|
170
|
-
async function fetchSystemHealth() {
|
|
171
|
-
return request("/api/health");
|
|
172
|
-
}
|
|
173
|
-
async function fetchPipelineStats() {
|
|
174
|
-
return request("/api/pipeline");
|
|
175
|
-
}
|
|
176
|
-
async function fetchEvents(options) {
|
|
177
|
-
const params = new URLSearchParams();
|
|
178
|
-
if (options.types)
|
|
179
|
-
options.types.forEach(type => params.append('type', type));
|
|
180
|
-
if (options.startDate)
|
|
181
|
-
params.set('startDate', options.startDate);
|
|
182
|
-
if (options.endDate)
|
|
183
|
-
params.set('endDate', options.endDate);
|
|
184
|
-
if (options.searchQuery)
|
|
185
|
-
params.set('q', options.searchQuery);
|
|
186
|
-
if (options.page)
|
|
187
|
-
params.set('page', options.page.toString());
|
|
188
|
-
if (options.pageSize)
|
|
189
|
-
params.set('pageSize', options.pageSize.toString());
|
|
190
|
-
const queryStr = params.toString() ? `?${params.toString()}` : '';
|
|
191
|
-
return request(`/api/events${queryStr}`);
|
|
192
|
-
}
|
|
193
|
-
async function fetchEventsGrouped(options) {
|
|
194
|
-
const params = new URLSearchParams();
|
|
195
|
-
if (options?.startDate)
|
|
196
|
-
params.set('startDate', options.startDate);
|
|
197
|
-
if (options?.endDate)
|
|
198
|
-
params.set('endDate', options.endDate);
|
|
199
|
-
const queryStr = params.toString() ? `?${params.toString()}` : '';
|
|
200
|
-
return request(`/api/events/grouped${queryStr}`);
|
|
201
|
-
}
|
|
202
|
-
async function fetchRelatedEvents(eventId, maxDistance) {
|
|
203
|
-
const params = new URLSearchParams();
|
|
204
|
-
if (maxDistance)
|
|
205
|
-
params.set('maxDistance', maxDistance.toString());
|
|
206
|
-
const queryStr = params.toString() ? `?${params.toString()}` : '';
|
|
207
|
-
return request(`/api/events/${encodeURIComponent(eventId)}/related${queryStr}`);
|
|
208
|
-
}
|
|
209
|
-
async function fetchAgents() {
|
|
210
|
-
return request("/api/agents");
|
|
211
|
-
}
|
|
212
|
-
async function fetchAgentDetail(id) {
|
|
213
|
-
return request(`/api/agents/${encodeURIComponent(id)}`);
|
|
214
|
-
}
|
|
121
|
+
// ── Approvals ─────────────────────────────────────────────────────────────────
|
|
215
122
|
async function fetchApprovals(params) {
|
|
216
123
|
const searchParams = new URLSearchParams();
|
|
217
124
|
if (params?.status)
|
|
@@ -223,38 +130,108 @@ async function fetchApprovals(params) {
|
|
|
223
130
|
if (params?.pageSize)
|
|
224
131
|
searchParams.set('pageSize', String(params.pageSize));
|
|
225
132
|
const qs = searchParams.toString() ? '?' + searchParams.toString() : '';
|
|
226
|
-
return request('/api/v1/approvals' + qs);
|
|
133
|
+
return request('/api/v1/approvals' + qs, undefined, validateApprovalListResult);
|
|
227
134
|
}
|
|
228
135
|
async function fetchApprovalDetail(approvalId) {
|
|
229
|
-
return request('/api/v1/approvals/' + encodeURIComponent(approvalId));
|
|
136
|
+
return request('/api/v1/approvals/' + encodeURIComponent(approvalId), undefined, validateApprovalRecordDirect);
|
|
230
137
|
}
|
|
231
138
|
async function approveApproval(approvalId, note) {
|
|
232
139
|
return request('/api/v1/approvals/' + encodeURIComponent(approvalId) + '/approve', {
|
|
233
140
|
method: 'POST',
|
|
234
141
|
body: JSON.stringify({ note }),
|
|
235
|
-
});
|
|
142
|
+
}, validateApprovalRecordDirect);
|
|
236
143
|
}
|
|
237
144
|
async function rejectApproval(approvalId, reason) {
|
|
238
145
|
return request('/api/v1/approvals/' + encodeURIComponent(approvalId) + '/reject', {
|
|
239
146
|
method: 'POST',
|
|
240
147
|
body: JSON.stringify({ reason }),
|
|
241
|
-
});
|
|
148
|
+
}, validateApprovalRecordDirect);
|
|
242
149
|
}
|
|
150
|
+
// ── MVP seed feedback report drafts (PRI-285) ────────────────────────────────
|
|
243
151
|
async function createFeedbackReport(input, diagnostics) {
|
|
244
152
|
return request('/api/feedback/reports', {
|
|
245
153
|
method: 'POST',
|
|
246
154
|
body: JSON.stringify({ input, diagnostics }),
|
|
247
|
-
});
|
|
155
|
+
}, validateFeedbackReport);
|
|
248
156
|
}
|
|
249
157
|
async function listFeedbackReports() {
|
|
250
|
-
|
|
158
|
+
// The API returns { drafts: [...] } — validate the drafts array inside
|
|
159
|
+
return request('/api/feedback/reports', undefined, (v) => {
|
|
160
|
+
const drafts = validateFeedbackDraftsList(v);
|
|
161
|
+
if (drafts === null)
|
|
162
|
+
return null;
|
|
163
|
+
return { drafts };
|
|
164
|
+
});
|
|
251
165
|
}
|
|
252
166
|
async function getFeedbackReport(id) {
|
|
253
|
-
return request('/api/feedback/reports/' + encodeURIComponent(id));
|
|
167
|
+
return request('/api/feedback/reports/' + encodeURIComponent(id), undefined, validateFeedbackDraftEnvelope);
|
|
254
168
|
}
|
|
255
169
|
async function deleteFeedbackReport(id) {
|
|
256
170
|
return request('/api/feedback/reports/' + encodeURIComponent(id), {
|
|
257
171
|
method: 'DELETE',
|
|
258
|
-
});
|
|
172
|
+
}, validateDeleteEnvelope);
|
|
173
|
+
}
|
|
174
|
+
// ── Config / Control Center API (PRI-303, PRI-309) ───────────────────────────
|
|
175
|
+
async function fetchConfigSummary() {
|
|
176
|
+
return request('/api/v1/config/summary', undefined, validateConfigSummary);
|
|
177
|
+
}
|
|
178
|
+
async function fetchConfigCatalog() {
|
|
179
|
+
return request('/api/v1/config/catalog', undefined, validateConfigCatalog);
|
|
180
|
+
}
|
|
181
|
+
async function updateAgentBinding(agentName, runtimeProfile, enabled) {
|
|
182
|
+
return request(`/api/v1/config/agents/${encodeURIComponent(agentName)}/binding`, {
|
|
183
|
+
method: 'PATCH',
|
|
184
|
+
body: JSON.stringify({ runtimeProfile, enabled }),
|
|
185
|
+
}, validateAgentBindingUpdate);
|
|
186
|
+
}
|
|
187
|
+
async function checkAgentReadiness(agentName) {
|
|
188
|
+
return request(`/api/v1/config/readiness/${encodeURIComponent(agentName)}`, undefined, validateReadinessCheck);
|
|
189
|
+
}
|
|
190
|
+
async function updateDefaultRuntime(defaultRuntime) {
|
|
191
|
+
return request('/api/v1/config/default-runtime', {
|
|
192
|
+
method: 'PATCH',
|
|
193
|
+
body: JSON.stringify({ defaultRuntime }),
|
|
194
|
+
}, validateDefaultRuntimeUpdate);
|
|
195
|
+
}
|
|
196
|
+
// ── Principles Output Language (PRI-332 P1-1) ────────────────────────────────
|
|
197
|
+
async function fetchOutputLanguage() {
|
|
198
|
+
return request('/api/v1/config/principles/output-language', undefined, validateOutputLanguage);
|
|
199
|
+
}
|
|
200
|
+
async function updateOutputLanguage(outputLanguage) {
|
|
201
|
+
return request('/api/v1/config/principles/output-language', {
|
|
202
|
+
method: 'PATCH',
|
|
203
|
+
body: JSON.stringify({ outputLanguage }),
|
|
204
|
+
}, validateOutputLanguage);
|
|
205
|
+
}
|
|
206
|
+
// ── CR8: Backend Data Contract (G.1) ─────────────────────────────────────────
|
|
207
|
+
async function fetchGovernanceQueue() {
|
|
208
|
+
return request('/api/v1/governance/queue', undefined, validateGovernanceQueue);
|
|
209
|
+
}
|
|
210
|
+
async function fetchApprovalsGrouped() {
|
|
211
|
+
return request('/api/v1/approvals/grouped', undefined, validateApprovalsGrouped);
|
|
212
|
+
}
|
|
213
|
+
async function fetchAllActivations() {
|
|
214
|
+
return request('/api/v1/activations', undefined, validateActivations);
|
|
215
|
+
}
|
|
216
|
+
async function disableActivation(activationId) {
|
|
217
|
+
return request(`/api/v1/activations/${encodeURIComponent(activationId)}/disable`, {
|
|
218
|
+
method: 'POST',
|
|
219
|
+
body: JSON.stringify({ confirmed: true }),
|
|
220
|
+
}, validateDisableActivation);
|
|
221
|
+
}
|
|
222
|
+
async function fetchLifecycleMetrics(principleId) {
|
|
223
|
+
return request(`/api/v1/lifecycle/principles/${encodeURIComponent(principleId)}`, undefined, validateLifecycleMetrics);
|
|
224
|
+
}
|
|
225
|
+
// ── Updates (CR9) ─────────────────────────────────────────────────────────────
|
|
226
|
+
async function fetchUpdateStatus() {
|
|
227
|
+
return request('/api/update', undefined, validateUpdateStatus);
|
|
228
|
+
}
|
|
229
|
+
async function fetchUpdateHistory() {
|
|
230
|
+
return request('/api/update/history', undefined, validateUpdateHistory);
|
|
231
|
+
}
|
|
232
|
+
// ── Evidence Chain (PRI-331) ──────────────────────────────────────────────────
|
|
233
|
+
async function fetchEvidenceChain() {
|
|
234
|
+
return request('/api/v1/evidence-chain', undefined, validateEvidenceChain);
|
|
259
235
|
}
|
|
260
|
-
|
|
236
|
+
// ── Exports ───────────────────────────────────────────────────────────────────
|
|
237
|
+
export { getToken, setToken, clearToken, checkAuth, request, fetchApprovals, fetchApprovalDetail, approveApproval, rejectApproval, fetchPrinciples, fetchPrincipleDetail, createFeedbackReport, listFeedbackReports, getFeedbackReport, deleteFeedbackReport, fetchConfigSummary, fetchConfigCatalog, updateAgentBinding, checkAgentReadiness, updateDefaultRuntime, fetchOutputLanguage, updateOutputLanguage, fetchWorkspaces, addWorkspace, removeWorkspace, syncWorkspace, fetchConfigReadiness, fetchGovernanceQueue, fetchApprovalsGrouped, fetchAllActivations, disableActivation, fetchLifecycleMetrics, fetchUpdateStatus, fetchUpdateHistory, fetchEvidenceChain, };
|
|
@@ -35,5 +35,5 @@ function getChannelLabel(channel, t) {
|
|
|
35
35
|
export function ApprovalCard({ approval, onApprove, onReject, onViewDetail, loading, }) {
|
|
36
36
|
const { t } = useTranslation();
|
|
37
37
|
const isPending = approval.status === "pending";
|
|
38
|
-
return (_jsx(Card, { className: "mb-3 transition-all duration-200 hover:shadow-sm", children: _jsxs(CardContent, { className: "p-4", children: [_jsx("div", { className: "flex items-start justify-between gap-3", children: _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 mb-1.5 flex-wrap", children: [_jsx(Badge, { variant: "outline", className: "text-xs", children: getChannelLabel(approval.channel, t) }), _jsx(Badge, { className: "text-xs border " + (CONFIDENCE_COLORS[approval.confidenceLabel] ?? CONFIDENCE_COLORS.medium), children: t("components:approvalCard.confidence." + approval.confidenceLabel) }), approval.riskLevel && (_jsx(Badge, { variant: "secondary", className: "text-xs " + (RISK_COLORS[approval.riskLevel] ?? ""), children: t("components:approvalCard.riskLevel." + approval.riskLevel, approval.riskLevel) })), _jsx("span", { className: "text-xs text-muted-foreground", children: timeAgo(new Date(approval.requestedAt), t) })] }), _jsx("p", { className: "font-medium text-sm line-clamp-2", children: approval.summary ?? approval.approvalId })] }) }), isPending && (_jsxs("div", { className: "flex items-center gap-2 mt-3 pt-3 border-t", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: onViewDetail, className: "flex items-center gap-1", disabled: loading, children: [_jsx(Eye, { className: "h-3 w-3" }), t("components:approvalCard.viewDetail")] }), _jsx("div", { className: "flex-1" }), _jsxs(Button, { variant: "destructive", size: "sm", onClick: onReject, className: "flex items-center gap-1", disabled: loading, children: [_jsx(X, { className: "h-3 w-3" }), t("components:approvalCard.reject")] }), _jsxs(Button, { variant: "default", size: "sm", onClick: onApprove, className: "flex items-center gap-1", disabled: loading, children: [_jsx(Check, { className: "h-3 w-3" }), t("components:approvalCard.approve")] })] })), !isPending && (_jsxs("div", { className: "flex items-center gap-2 mt-3 pt-3 border-t", children: [_jsx(Badge, { variant: approval.status === "approved" ? "default" : "secondary", children: t("components:approvalCard.status." + approval.status) }), approval.decidedBy && (_jsx("span", { className: "text-xs text-muted-foreground", children: t("components:approvalCard.decidedBy", { by: approval.decidedBy }) })), _jsx("div", { className: "flex-1" }), _jsx(Button, { variant: "ghost", size: "sm", onClick: onViewDetail, disabled: loading, "aria-label": t("components:approvalCard.viewDetail"), children: _jsx(Eye, { className: "h-3 w-3" }) })] }))] }) }));
|
|
38
|
+
return (_jsx(Card, { className: "mb-3 transition-all duration-200 hover:shadow-sm", children: _jsxs(CardContent, { className: "p-4", children: [_jsx("div", { className: "flex items-start justify-between gap-3", children: _jsxs("div", { className: "flex-1 min-w-0", children: [_jsxs("div", { className: "flex items-center gap-2 mb-1.5 flex-wrap", children: [_jsx(Badge, { variant: "outline", className: "text-xs", children: getChannelLabel(approval.channel, t) }), _jsx(Badge, { className: "text-xs border " + (CONFIDENCE_COLORS[approval.confidenceLabel ?? 'medium'] ?? CONFIDENCE_COLORS.medium), children: t("components:approvalCard.confidence." + (approval.confidenceLabel ?? 'medium')) }), approval.riskLevel && (_jsx(Badge, { variant: "secondary", className: "text-xs " + (RISK_COLORS[approval.riskLevel] ?? ""), children: t("components:approvalCard.riskLevel." + approval.riskLevel, approval.riskLevel) })), _jsx("span", { className: "text-xs text-muted-foreground", children: timeAgo(new Date(approval.requestedAt), t) })] }), _jsx("p", { className: "font-medium text-sm line-clamp-2", children: approval.summary ?? approval.approvalId })] }) }), isPending && (_jsxs("div", { className: "flex items-center gap-2 mt-3 pt-3 border-t", children: [_jsxs(Button, { variant: "outline", size: "sm", onClick: onViewDetail, className: "flex items-center gap-1", disabled: loading, children: [_jsx(Eye, { className: "h-3 w-3" }), t("components:approvalCard.viewDetail")] }), _jsx("div", { className: "flex-1" }), _jsxs(Button, { variant: "destructive", size: "sm", onClick: onReject, className: "flex items-center gap-1", disabled: loading, children: [_jsx(X, { className: "h-3 w-3" }), t("components:approvalCard.reject")] }), _jsxs(Button, { variant: "default", size: "sm", onClick: onApprove, className: "flex items-center gap-1", disabled: loading, children: [_jsx(Check, { className: "h-3 w-3" }), t("components:approvalCard.approve")] })] })), !isPending && (_jsxs("div", { className: "flex items-center gap-2 mt-3 pt-3 border-t", children: [_jsx(Badge, { variant: approval.status === "approved" ? "default" : "secondary", children: t("components:approvalCard.status." + approval.status) }), approval.decidedBy && (_jsx("span", { className: "text-xs text-muted-foreground", children: t("components:approvalCard.decidedBy", { by: approval.decidedBy }) })), _jsx("div", { className: "flex-1" }), _jsx(Button, { variant: "ghost", size: "sm", onClick: onViewDetail, disabled: loading, "aria-label": t("components:approvalCard.viewDetail"), children: _jsx(Eye, { className: "h-3 w-3" }) })] }))] }) }));
|
|
39
39
|
}
|
|
@@ -16,5 +16,5 @@ export function ApprovalDetailDialog({ approval, open, onOpenChange, onApprove,
|
|
|
16
16
|
return null;
|
|
17
17
|
const isPending = approval.status === "pending";
|
|
18
18
|
const canAct = isPending && approval.isMvpProven !== false;
|
|
19
|
-
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-w-lg max-h-[80vh] overflow-y-auto", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { className: "text-base", children: approval.summary ?? approval.approvalId }), _jsx(DialogDescription, { children: _jsxs("div", { className: "flex items-center gap-2 mt-1", children: [_jsx(Badge, { variant: "outline", className: "text-xs", children: t("components:approvalCard.channel." + approval.channel, approval.channel) }), _jsx(Badge, { className: "text-xs border " + (CONFIDENCE_COLORS[approval.confidenceLabel] ?? CONFIDENCE_COLORS.medium), children: t("components:approvalCard.confidence." + approval.confidenceLabel) }), approval.riskLevel && (_jsx(Badge, { variant: "secondary", className: "text-xs", children: t("components:approvalCard.riskLevel." + approval.riskLevel, approval.riskLevel) }))] }) })] }), _jsxs("div", { className: "space-y-4", children: [approval.triggerReason && (_jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:approvalDetail.whyRecommended") }), _jsx("p", { className: "text-sm", children: approval.triggerReason })] })), approval.confidenceExplanation && (_jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:approvalDetail.confidenceExplanation") }), _jsx("p", { className: "text-sm", children: approval.confidenceExplanation })] })), approval.effectDescription && (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:approvalDetail.whatHappens") }), _jsx("p", { className: "text-sm", children: approval.effectDescription })] })] })), approval.rejectionEffect && (_jsxs("div", { className: "bg-red-50 dark:bg-red-950/20 rounded-md p-3", children: [_jsx("p", { className: "text-xs font-medium text-red-600 dark:text-red-400 mb-1", children: t("components:approvalDetail.ifReject") }), _jsx("p", { className: "text-sm text-red-700 dark:text-red-300", children: approval.rejectionEffect })] }))] }), isPending && approval.isMvpProven === false && (_jsxs("div", { className: "text-xs text-muted-foreground italic pt-2", children: [t("components:approvalCard.channel." + approval.channel, approval.channel), " \u2014 ", t("components:approvalCard.channel.retired", "retired")] })), canAct && (_jsxs(DialogFooter, { children: [_jsxs(Button, { variant: "destructive", size: "sm", onClick: onReject, disabled: loading, className: "flex items-center gap-1", children: [_jsx(X, { className: "h-3 w-3" }), t("components:approvalCard.reject")] }), _jsxs(Button, { size: "sm", onClick: onApprove, disabled: loading, className: "flex items-center gap-1", children: [_jsx(Check, { className: "h-3 w-3" }), t("components:approvalCard.approve")] })] }))] }) }));
|
|
19
|
+
return (_jsx(Dialog, { open: open, onOpenChange: onOpenChange, children: _jsxs(DialogContent, { className: "max-w-lg max-h-[80vh] overflow-y-auto", children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { className: "text-base", children: approval.summary ?? approval.approvalId }), _jsx(DialogDescription, { children: _jsxs("div", { className: "flex items-center gap-2 mt-1", children: [_jsx(Badge, { variant: "outline", className: "text-xs", children: t("components:approvalCard.channel." + approval.channel, approval.channel) }), _jsx(Badge, { className: "text-xs border " + (CONFIDENCE_COLORS[approval.confidenceLabel ?? 'medium'] ?? CONFIDENCE_COLORS.medium), children: t("components:approvalCard.confidence." + (approval.confidenceLabel ?? 'medium')) }), approval.riskLevel && (_jsx(Badge, { variant: "secondary", className: "text-xs", children: t("components:approvalCard.riskLevel." + approval.riskLevel, approval.riskLevel) }))] }) })] }), _jsxs("div", { className: "space-y-4", children: [approval.triggerReason && (_jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:approvalDetail.whyRecommended") }), _jsx("p", { className: "text-sm", children: approval.triggerReason })] })), approval.confidenceExplanation && (_jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:approvalDetail.confidenceExplanation") }), _jsx("p", { className: "text-sm", children: approval.confidenceExplanation })] })), approval.effectDescription && (_jsxs(_Fragment, { children: [_jsx(Separator, {}), _jsxs("div", { children: [_jsx("p", { className: "text-xs font-medium text-muted-foreground mb-1", children: t("components:approvalDetail.whatHappens") }), _jsx("p", { className: "text-sm", children: approval.effectDescription })] })] })), approval.rejectionEffect && (_jsxs("div", { className: "bg-red-50 dark:bg-red-950/20 rounded-md p-3", children: [_jsx("p", { className: "text-xs font-medium text-red-600 dark:text-red-400 mb-1", children: t("components:approvalDetail.ifReject") }), _jsx("p", { className: "text-sm text-red-700 dark:text-red-300", children: approval.rejectionEffect })] }))] }), isPending && approval.isMvpProven === false && (_jsxs("div", { className: "text-xs text-muted-foreground italic pt-2", children: [t("components:approvalCard.channel." + approval.channel, approval.channel), " \u2014 ", t("components:approvalCard.channel.retired", "retired")] })), canAct && (_jsxs(DialogFooter, { children: [_jsxs(Button, { variant: "destructive", size: "sm", onClick: onReject, disabled: loading, className: "flex items-center gap-1", children: [_jsx(X, { className: "h-3 w-3" }), t("components:approvalCard.reject")] }), _jsxs(Button, { size: "sm", onClick: onApprove, disabled: loading, className: "flex items-center gap-1", children: [_jsx(Check, { className: "h-3 w-3" }), t("components:approvalCard.approve")] })] }))] }) }));
|
|
20
20
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { ThemeToggle } from "../theme-toggle.js";
|
|
5
|
+
import { setToken, checkAuth } from "../../api.js";
|
|
6
|
+
export function LoginForm({ onAuthSuccess }) {
|
|
7
|
+
const [token, setTokenInput] = React.useState("");
|
|
8
|
+
const [error, setError] = React.useState(null);
|
|
9
|
+
const [loading, setLoading] = React.useState(false);
|
|
10
|
+
const { t } = useTranslation();
|
|
11
|
+
React.useEffect(() => {
|
|
12
|
+
if (window.location.hash.includes("session_expired=true")) {
|
|
13
|
+
setError("会话已过期或令牌失效,请重新输入。");
|
|
14
|
+
}
|
|
15
|
+
}, []);
|
|
16
|
+
const handleSubmit = async (e) => {
|
|
17
|
+
e.preventDefault();
|
|
18
|
+
if (!token.trim())
|
|
19
|
+
return;
|
|
20
|
+
setLoading(true);
|
|
21
|
+
setError(null);
|
|
22
|
+
setToken(token.trim());
|
|
23
|
+
const valid = await checkAuth();
|
|
24
|
+
if (valid) {
|
|
25
|
+
onAuthSuccess();
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
setError("令牌无效或服务未就绪,请检查后重试。");
|
|
29
|
+
setLoading(false);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
return (_jsxs("div", { className: "min-h-screen flex items-center justify-center bg-paper relative", style: {
|
|
33
|
+
backgroundImage: `linear-gradient(color-mix(in srgb, var(--color-gov) 3.5%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--color-gov) 3.5%, transparent) 1px, transparent 1px)`,
|
|
34
|
+
backgroundSize: "32px 32px",
|
|
35
|
+
}, children: [_jsx("div", { className: "absolute top-4 right-4", children: _jsx(ThemeToggle, {}) }), _jsxs("div", { className: "w-full max-w-[400px] mx-4 p-8 bg-surface rounded-[var(--radius-md)] border border-line shadow-card", children: [_jsxs("div", { className: "flex flex-col items-center mb-6", children: [_jsxs("svg", { viewBox: "0 0 28 28", className: "w-12 h-12 text-gov mb-3", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [_jsx("path", { d: "M6 4V24M22 4V24M2 14H26", strokeLinecap: "square" }), _jsx("circle", { cx: "14", cy: "14", r: "2.5", fill: "currentColor", stroke: "none" })] }), _jsx("div", { className: "font-mono text-[14px] tracking-[0.16em] font-bold text-ink", children: "PD" }), _jsx("div", { className: "font-mono text-[11px] tracking-[0.14em] text-ink-3 mt-1", children: "GOVERNANCE WORKSPACE" }), _jsx("div", { className: "text-[13px] text-ink-3 mt-3", children: "\u62E5\u6709\u8005\u6CBB\u7406\u5DE5\u4F5C\u53F0" })] }), _jsx("div", { className: "border-t border-line my-5" }), _jsxs("form", { onSubmit: handleSubmit, children: [_jsx("label", { htmlFor: "bearer-token", className: "font-mono text-[11px] tracking-[0.08em] text-ink-3 uppercase mb-2 block", children: "Bearer Token" }), _jsx("input", { id: "bearer-token", type: "password", value: token, onChange: (e) => setTokenInput(e.target.value), className: "w-full px-3 py-2 bg-panel border border-line rounded-[var(--radius-sm)] font-mono text-[13px] text-ink focus:border-gov focus:outline-2 focus:outline-offset-2 focus:outline-gov transition-colors", placeholder: "\u8F93\u5165\u4EE4\u724C\u2026", autoFocus: true }), error && _jsx("p", { className: "mt-2 text-[13px] text-amber", children: error }), _jsx("button", { type: "submit", disabled: loading || !token.trim(), className: "mt-4 w-full py-2 px-4 bg-gov text-paper rounded-[var(--radius-sm)] text-[12.5px] font-medium hover:bg-gov-2 disabled:opacity-50 transition-colors focus:outline-2 focus:outline-offset-2 focus:outline-gov", children: loading ? "验证中…" : "进入工作台" })] })] })] }));
|
|
36
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Splash screen — 1-2s loading transition (C.0).
|
|
3
|
+
* Shows threshold mark + "PD" + "GOVERNANCE WORKSPACE" + progress bar.
|
|
4
|
+
* Auto-redirects after animation completes.
|
|
5
|
+
*/
|
|
6
|
+
export declare function SplashScreen({ onComplete }: {
|
|
7
|
+
onComplete: () => void;
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
/**
|
|
4
|
+
* Splash screen — 1-2s loading transition (C.0).
|
|
5
|
+
* Shows threshold mark + "PD" + "GOVERNANCE WORKSPACE" + progress bar.
|
|
6
|
+
* Auto-redirects after animation completes.
|
|
7
|
+
*/
|
|
8
|
+
export function SplashScreen({ onComplete }) {
|
|
9
|
+
React.useEffect(() => {
|
|
10
|
+
const prefersReducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
11
|
+
const timeout = prefersReducedMotion ? 100 : 2200;
|
|
12
|
+
const timer = setTimeout(onComplete, timeout);
|
|
13
|
+
return () => clearTimeout(timer);
|
|
14
|
+
}, [onComplete]);
|
|
15
|
+
return (_jsxs("div", { className: "min-h-screen flex flex-col items-center justify-center bg-paper", style: {
|
|
16
|
+
backgroundImage: `linear-gradient(color-mix(in srgb, var(--color-gov) 3.5%, transparent) 1px, transparent 1px), linear-gradient(90deg, color-mix(in srgb, var(--color-gov) 3.5%, transparent) 1px, transparent 1px)`,
|
|
17
|
+
backgroundSize: "32px 32px",
|
|
18
|
+
}, children: [_jsxs("svg", { viewBox: "0 0 28 28", className: "w-16 h-16 text-gov animate-[fadeIn_200ms_ease-out]", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [_jsx("path", { d: "M6 4V24M22 4V24M2 14H26", strokeLinecap: "square" }), _jsx("circle", { cx: "14", cy: "14", r: "2.5", fill: "currentColor", stroke: "none" })] }), _jsx("div", { className: "mt-6 font-mono text-[14px] tracking-[0.16em] font-bold text-ink animate-[fadeIn_500ms_ease-out_200ms_both]", children: "PD" }), _jsx("div", { className: "mt-2 font-mono text-[11px] tracking-[0.14em] text-ink-3 animate-[fadeIn_500ms_ease-out_400ms_both]", children: "GOVERNANCE WORKSPACE" }), _jsx("div", { className: "mt-8 w-48 h-1 bg-line rounded-full overflow-hidden animate-[fadeIn_500ms_ease-out_600ms_both]", children: _jsx("div", { className: "h-full bg-gov rounded-full animate-[progressFill_600ms_ease-out_1.2s_both]" }) }), _jsx("style", { children: `
|
|
19
|
+
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
|
|
20
|
+
@keyframes progressFill { from { width: 0; } to { width: 100%; } }
|
|
21
|
+
` })] }));
|
|
22
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function AppSidebar(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Link, useLocation, useNavigate } from "react-router-dom";
|
|
3
|
+
import { Sun, Moon, Focus, AlertTriangle, BookOpen, Zap, Archive, Settings, MessageSquare, RefreshCw, LogOut, Languages, } from "lucide-react";
|
|
4
|
+
import { useTheme } from "../theme-provider.js";
|
|
5
|
+
import { useTranslation } from "react-i18next";
|
|
6
|
+
import { clearToken } from "../../api.js";
|
|
7
|
+
import { cn } from "../../../lib/utils.js";
|
|
8
|
+
function ThresholdMark({ className }) {
|
|
9
|
+
return (_jsxs("svg", { viewBox: "0 0 28 28", className: className, fill: "none", stroke: "currentColor", strokeWidth: "1.5", "aria-hidden": "true", children: [_jsx("path", { d: "M6 4V24M22 4V24M2 14H26", strokeLinecap: "square" }), _jsx("circle", { cx: "14", cy: "14", r: "2.5", fill: "currentColor", stroke: "none" })] }));
|
|
10
|
+
}
|
|
11
|
+
const mainNavItems = [
|
|
12
|
+
{ id: "focus", labelKey: "components.sidebar.focus", href: "/focus", icon: Focus, shortcut: "Alt+3" },
|
|
13
|
+
{ id: "pain", labelKey: "components.sidebar.pain", href: "/pain", icon: AlertTriangle, shortcut: "Alt+4" },
|
|
14
|
+
{ id: "principles", labelKey: "components.sidebar.principles", href: "/principles", icon: BookOpen, shortcut: "Alt+5" },
|
|
15
|
+
{ id: "activation", labelKey: "components.sidebar.activation", href: "/activation", icon: Zap, shortcut: "Alt+6" },
|
|
16
|
+
{ id: "debt", labelKey: "components.sidebar.debt", href: "/debt", icon: Archive, shortcut: "Alt+7" },
|
|
17
|
+
];
|
|
18
|
+
const toolNavItems = [
|
|
19
|
+
{ id: "control-center", labelKey: "components.sidebar.controlCenter", href: "/control-center", icon: Settings, shortcut: "Alt+8" },
|
|
20
|
+
{ id: "report-problem", labelKey: "components.sidebar.reportProblem", href: "/report-problem", icon: MessageSquare, shortcut: "Alt+9" },
|
|
21
|
+
{ id: "settings", labelKey: "components.sidebar.settings", href: "/settings", icon: Settings, shortcut: "Alt+0" },
|
|
22
|
+
{ id: "update", labelKey: "components.sidebar.update", href: "/update", icon: RefreshCw, shortcut: "" },
|
|
23
|
+
];
|
|
24
|
+
export function AppSidebar() {
|
|
25
|
+
const location = useLocation();
|
|
26
|
+
const navigate = useNavigate();
|
|
27
|
+
const { theme, setTheme } = useTheme();
|
|
28
|
+
const { t, i18n } = useTranslation();
|
|
29
|
+
const isActive = (href) => {
|
|
30
|
+
if (href === "/")
|
|
31
|
+
return location.pathname === "/";
|
|
32
|
+
return location.pathname === href || location.pathname.startsWith(href + "/");
|
|
33
|
+
};
|
|
34
|
+
const handleSignOut = () => {
|
|
35
|
+
clearToken();
|
|
36
|
+
navigate("/login");
|
|
37
|
+
};
|
|
38
|
+
const toggleLanguage = () => {
|
|
39
|
+
const nextLang = i18n.language === "zh-CN" ? "en" : "zh-CN";
|
|
40
|
+
i18n.changeLanguage(nextLang);
|
|
41
|
+
localStorage.setItem("pd-language", nextLang);
|
|
42
|
+
};
|
|
43
|
+
return (_jsxs("aside", { className: "w-[256px] h-screen fixed left-0 top-0 flex flex-col bg-surface border-r border-line flex-shrink-0 z-20", children: [_jsx("div", { className: "px-5 pt-5 pb-4", children: _jsxs("div", { className: "flex items-center gap-2.5", children: [_jsx(ThresholdMark, { className: "w-6 h-6 text-gov" }), _jsxs("div", { children: [_jsx("div", { className: "font-mono text-[14px] tracking-[0.16em] font-bold text-ink", children: "PD" }), _jsx("div", { className: "font-mono text-[10px] tracking-[0.14em] text-ink-3", children: "GOVERNANCE WORKSPACE" })] })] }) }), _jsxs("nav", { className: "flex-1 py-2 overflow-y-auto", children: [_jsx("div", { className: "px-2", children: mainNavItems.map((item) => {
|
|
44
|
+
const Icon = item.icon;
|
|
45
|
+
const active = isActive(item.href);
|
|
46
|
+
return (_jsxs(Link, { to: item.href, "data-testid": `nav-${item.id}`, className: cn("flex items-center gap-3 px-3 py-2 rounded-[var(--radius-sm)] text-[13px] transition-colors", active
|
|
47
|
+
? "border-l-2 border-l-gov bg-paper-2 text-ink"
|
|
48
|
+
: "text-ink-3 hover:text-ink hover:bg-paper-2"), children: [_jsx(Icon, { className: "h-4 w-4 flex-shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: t(item.labelKey) }), item.shortcut && (_jsx("span", { className: "text-ink-4 font-mono text-[11px]", children: item.shortcut }))] }, item.id));
|
|
49
|
+
}) }), _jsxs("div", { className: "mt-4 pt-3 border-t border-line mx-4", children: [_jsx("div", { className: "px-1 pb-1 text-[10px] font-mono tracking-[0.1em] uppercase text-ink-4", children: "Tools" }), _jsx("div", { className: "px-0", children: toolNavItems.map((item) => {
|
|
50
|
+
const Icon = item.icon;
|
|
51
|
+
const active = isActive(item.href);
|
|
52
|
+
return (_jsxs(Link, { to: item.href, "data-testid": `nav-${item.id}`, className: cn("flex items-center gap-3 px-3 py-1.5 rounded-[var(--radius-sm)] text-[12px] transition-colors", active
|
|
53
|
+
? "border-l-2 border-l-gov bg-paper-2 text-ink"
|
|
54
|
+
: "text-ink-4 hover:text-ink-3 hover:bg-paper-2"), children: [_jsx(Icon, { className: "h-3.5 w-3.5 flex-shrink-0", "aria-hidden": "true" }), _jsx("span", { className: "flex-1", children: t(item.labelKey) }), item.shortcut && (_jsx("span", { className: "text-ink-4 font-mono text-[11px]", children: item.shortcut }))] }, item.id));
|
|
55
|
+
}) })] })] }), _jsxs("div", { className: "px-3 py-3 border-t border-line space-y-1", children: [_jsxs("button", { type: "button", onClick: () => setTheme(theme === "dark" ? "light" : "dark"), className: "flex items-center gap-3 px-3 py-1.5 rounded-[var(--radius-sm)] text-[12px] text-ink-4 hover:text-ink-3 hover:bg-paper-2 transition-colors w-full", title: theme === "dark" ? "切换亮色模式" : "切换暗色模式", children: [theme === "dark" ? (_jsx(Sun, { className: "h-3.5 w-3.5 flex-shrink-0", "aria-hidden": "true" })) : (_jsx(Moon, { className: "h-3.5 w-3.5 flex-shrink-0", "aria-hidden": "true" })), _jsx("span", { children: theme === "dark" ? "亮色模式" : "暗色模式" })] }), _jsxs("button", { type: "button", onClick: toggleLanguage, className: "flex items-center gap-3 px-3 py-1.5 rounded-[var(--radius-sm)] text-[12px] text-ink-4 hover:text-ink-3 hover:bg-paper-2 transition-colors w-full", title: "\u5207\u6362\u8BED\u8A00", children: [_jsx(Languages, { className: "h-3.5 w-3.5 flex-shrink-0", "aria-hidden": "true" }), _jsx("span", { children: i18n.language === "zh-CN" ? "English" : "中文" })] }), _jsxs("button", { type: "button", onClick: handleSignOut, className: "flex items-center gap-3 px-3 py-1.5 rounded-[var(--radius-sm)] text-[12px] text-ink-4 hover:text-ink-3 hover:bg-paper-2 transition-colors w-full", children: [_jsx(LogOut, { className: "h-3.5 w-3.5 flex-shrink-0", "aria-hidden": "true" }), _jsx("span", { children: "\u9000\u51FA" })] })] })] }));
|
|
56
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
interface PageShellProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* 712px centered container — the "slow thinking" physical layout.
|
|
7
|
+
* Blueprint grid background is on body (globals.css), this adds
|
|
8
|
+
* the centered content column with generous whitespace.
|
|
9
|
+
*/
|
|
10
|
+
export declare function PageShell({ children, className, ...props }: PageShellProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* 712px centered container — the "slow thinking" physical layout.
|
|
5
|
+
* Blueprint grid background is on body (globals.css), this adds
|
|
6
|
+
* the centered content column with generous whitespace.
|
|
7
|
+
*/
|
|
8
|
+
export function PageShell({ children, className, ...props }) {
|
|
9
|
+
return (_jsx("div", { className: cn("mx-auto max-w-[712px] px-6 py-8", className), ...props, children: children }));
|
|
10
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
interface SectionTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* 11px uppercase monospace section title with bottom border (B.4.6).
|
|
7
|
+
* Used for governance page section headings.
|
|
8
|
+
*/
|
|
9
|
+
export declare function SectionTitle({ children, className, ...props }: SectionTitleProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../../lib/utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* 11px uppercase monospace section title with bottom border (B.4.6).
|
|
5
|
+
* Used for governance page section headings.
|
|
6
|
+
*/
|
|
7
|
+
export function SectionTitle({ children, className, ...props }) {
|
|
8
|
+
return (_jsx("h2", { className: cn("font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3", "border-b border-line pb-2 mb-4", className), ...props, children: children }));
|
|
9
|
+
}
|