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
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect, useCallback } from "react";
|
|
3
|
-
import { useTranslation } from "react-i18next";
|
|
4
|
-
import { fetchApprovals, fetchApprovalDetail, approveApproval, rejectApproval } from "../api.js";
|
|
5
|
-
import { PageHeader } from "../components/page-header.js";
|
|
6
|
-
import { Card, CardContent } from "../components/ui/card.js";
|
|
7
|
-
import { Button } from "../components/ui/button.js";
|
|
8
|
-
import { Badge } from "../components/ui/badge.js";
|
|
9
|
-
import { Skeleton } from "../components/ui/skeleton.js";
|
|
10
|
-
import { ShieldCheck, AlertTriangle } from "lucide-react";
|
|
11
|
-
import { ApprovalCard } from "../components/approval-card.js";
|
|
12
|
-
import { ApprovalDetailDialog } from "../components/approval-detail-dialog.js";
|
|
13
|
-
import { RejectionReasonDialog } from "../components/rejection-reason-dialog.js";
|
|
14
|
-
export function ApprovalsPage() {
|
|
15
|
-
const { t } = useTranslation();
|
|
16
|
-
const [approvals, setApprovals] = useState([]);
|
|
17
|
-
const [approvalStats, setApprovalStats] = useState({ pending: 0, approved: 0, rejected: 0, cancelled: 0 });
|
|
18
|
-
const [loading, setLoading] = useState(true);
|
|
19
|
-
const [error, setError] = useState(null);
|
|
20
|
-
const [lastUpdated, setLastUpdated] = useState(null);
|
|
21
|
-
const [detailApproval, setDetailApproval] = useState(null);
|
|
22
|
-
const [detailOpen, setDetailOpen] = useState(false);
|
|
23
|
-
const [rejectTarget, setRejectTarget] = useState(null);
|
|
24
|
-
const [rejectOpen, setRejectOpen] = useState(false);
|
|
25
|
-
const [actionLoading, setActionLoading] = useState(null);
|
|
26
|
-
const loadApprovals = useCallback(async () => {
|
|
27
|
-
try {
|
|
28
|
-
const result = await fetchApprovals();
|
|
29
|
-
if (!result.success) {
|
|
30
|
-
setError(result.error ?? t("pages:approvals.loadFailed"));
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
setApprovals(result.data.items);
|
|
34
|
-
setApprovalStats(result.data.stats);
|
|
35
|
-
setLastUpdated(new Date());
|
|
36
|
-
setError(null);
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
setError(t("pages:approvals.loadFailed"));
|
|
40
|
-
}
|
|
41
|
-
finally {
|
|
42
|
-
setLoading(false);
|
|
43
|
-
}
|
|
44
|
-
}, [t]);
|
|
45
|
-
useEffect(() => {
|
|
46
|
-
loadApprovals();
|
|
47
|
-
const id = setInterval(loadApprovals, 15_000);
|
|
48
|
-
return () => clearInterval(id);
|
|
49
|
-
}, [loadApprovals]);
|
|
50
|
-
async function handleApprovalDetail(approvalId) {
|
|
51
|
-
setActionLoading(approvalId);
|
|
52
|
-
try {
|
|
53
|
-
const result = await fetchApprovalDetail(approvalId);
|
|
54
|
-
if (!result.success) {
|
|
55
|
-
setError(result.error);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
setDetailApproval(result.data);
|
|
59
|
-
setDetailOpen(true);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
setError(t("pages:approvals.detailFailed"));
|
|
63
|
-
}
|
|
64
|
-
finally {
|
|
65
|
-
setActionLoading(null);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
async function handleApprovalApprove(approvalId) {
|
|
69
|
-
setActionLoading(approvalId);
|
|
70
|
-
setDetailOpen(false);
|
|
71
|
-
try {
|
|
72
|
-
const result = await approveApproval(approvalId);
|
|
73
|
-
if (!result.success) {
|
|
74
|
-
setError(result.error);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
await loadApprovals();
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
setError(t("pages:approvals.approveFailed"));
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
setActionLoading(null);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
function handleApprovalRejectClick(approval) {
|
|
87
|
-
setRejectTarget(approval);
|
|
88
|
-
setRejectOpen(true);
|
|
89
|
-
}
|
|
90
|
-
async function handleApprovalRejectSubmit(reason) {
|
|
91
|
-
if (!rejectTarget)
|
|
92
|
-
return;
|
|
93
|
-
setActionLoading(rejectTarget.approvalId);
|
|
94
|
-
setRejectOpen(false);
|
|
95
|
-
setDetailOpen(false);
|
|
96
|
-
try {
|
|
97
|
-
const result = await rejectApproval(rejectTarget.approvalId, reason);
|
|
98
|
-
if (!result.success) {
|
|
99
|
-
setError(result.error);
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
await loadApprovals();
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
setError(t("pages:approvals.rejectFailed"));
|
|
106
|
-
}
|
|
107
|
-
finally {
|
|
108
|
-
setRejectTarget(null);
|
|
109
|
-
setActionLoading(null);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
if (loading) {
|
|
113
|
-
return (_jsxs("div", { children: [_jsx(PageHeader, { title: t("pages:approvals.title"), description: t("pages:approvals.description") }), _jsx("div", { className: "space-y-3", children: Array.from({ length: 3 }).map((_, i) => (_jsx(Card, { children: _jsx(CardContent, { className: "p-4", children: _jsx(Skeleton, { className: "h-16 w-full" }) }) }, i))) })] }));
|
|
114
|
-
}
|
|
115
|
-
if (error && approvals.length === 0) {
|
|
116
|
-
return (_jsxs("div", { children: [_jsx(PageHeader, { title: t("pages:approvals.title"), description: t("pages:approvals.description") }), _jsx(Card, { children: _jsxs(CardContent, { className: "p-6 text-center", children: [_jsx("p", { className: "text-destructive text-sm", children: error }), _jsx(Button, { variant: "outline", className: "mt-4", onClick: loadApprovals, children: t("common:refresh") })] }) })] }));
|
|
117
|
-
}
|
|
118
|
-
return (_jsxs("div", { children: [_jsx(PageHeader, { title: t("pages:approvals.title"), description: t("pages:approvals.description"), onRefresh: loadApprovals, lastUpdated: lastUpdated ?? undefined }), error && approvals.length > 0 && (_jsx(Card, { className: "mb-4 border-amber-500/50 bg-amber-500/5", children: _jsxs(CardContent, { className: "p-3 flex items-center gap-3", children: [_jsx(AlertTriangle, { className: "h-4 w-4 text-amber-500 flex-shrink-0" }), _jsx("span", { className: "text-sm text-amber-600 flex-1", children: error }), _jsx(Button, { variant: "outline", size: "sm", onClick: loadApprovals, children: t("common:refresh") })] }) })), _jsxs("div", { className: "flex items-center gap-3 mb-4", children: [_jsxs(Badge, { variant: "outline", children: [t("components:approvalCard.stats.pending"), ": ", approvalStats.pending] }), _jsxs(Badge, { variant: "outline", children: [t("components:approvalCard.stats.approved"), ": ", approvalStats.approved] }), _jsxs(Badge, { variant: "outline", children: [t("components:approvalCard.stats.rejected"), ": ", approvalStats.rejected] })] }), approvals.length === 0 ? (_jsx(Card, { children: _jsxs(CardContent, { className: "py-12 text-center", children: [_jsx(ShieldCheck, { className: "h-10 w-10 text-muted-foreground mx-auto mb-3" }), _jsx("p", { className: "text-sm text-muted-foreground", children: t("components:approvalCard.empty") }), _jsx("p", { className: "text-xs text-muted-foreground mt-1", children: t("pages:approvals.emptyHint") })] }) })) : (approvals.map((a) => (_jsx(ApprovalCard, { approval: a, loading: actionLoading === a.approvalId, onViewDetail: () => handleApprovalDetail(a.approvalId), onApprove: () => handleApprovalApprove(a.approvalId), onReject: () => handleApprovalRejectClick(a) }, a.approvalId)))), _jsx(ApprovalDetailDialog, { approval: detailApproval, open: detailOpen, onOpenChange: setDetailOpen, onApprove: () => { if (detailApproval)
|
|
119
|
-
handleApprovalApprove(detailApproval.approvalId); }, onReject: () => { if (detailApproval) {
|
|
120
|
-
setDetailOpen(false);
|
|
121
|
-
handleApprovalRejectClick(detailApproval);
|
|
122
|
-
} }, loading: actionLoading !== null }), _jsx(RejectionReasonDialog, { open: rejectOpen, onOpenChange: setRejectOpen, onSubmit: handleApprovalRejectSubmit, loading: actionLoading !== null })] }));
|
|
123
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function CentralPage(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useTranslation } from "react-i18next";
|
|
3
|
-
import { useAutoRefresh } from "../hooks/useAutoRefresh.js";
|
|
4
|
-
import { fetchCentralOverview, fetchCentralHealth } from "../api.js";
|
|
5
|
-
import { PageHeader } from "../components/page-header.js";
|
|
6
|
-
import { Card, CardContent, CardHeader, CardTitle } from "../components/ui/card.js";
|
|
7
|
-
import { Badge } from "../components/ui/badge.js";
|
|
8
|
-
import { Skeleton } from "../components/ui/skeleton.js";
|
|
9
|
-
const STATUS_VARIANT = {
|
|
10
|
-
healthy: "default",
|
|
11
|
-
degraded: "secondary",
|
|
12
|
-
error: "destructive",
|
|
13
|
-
};
|
|
14
|
-
function OverallStatusBadge({ status }) {
|
|
15
|
-
return (_jsxs("div", { className: "inline-flex items-center gap-2 px-4 py-2 rounded-full border border-border", children: [_jsx("div", { className: `w-2.5 h-2.5 rounded-full ${status === "healthy"
|
|
16
|
-
? "bg-primary animate-pulse"
|
|
17
|
-
: status === "degraded"
|
|
18
|
-
? "bg-amber-500"
|
|
19
|
-
: "bg-destructive"}` }), _jsx(Badge, { variant: STATUS_VARIANT[status] ?? "secondary", className: "capitalize", children: status })] }));
|
|
20
|
-
}
|
|
21
|
-
function WorkspaceCard({ ws, t }) {
|
|
22
|
-
return (_jsx(Card, { className: `border-l-4 ${ws.status === "healthy"
|
|
23
|
-
? "border-l-primary"
|
|
24
|
-
: ws.status === "degraded"
|
|
25
|
-
? "border-l-amber-500"
|
|
26
|
-
: "border-l-destructive"}`, children: _jsx(CardContent, { className: "p-4", children: _jsxs("div", { className: "flex justify-between items-center", children: [_jsxs("div", { children: [_jsx("p", { className: "font-semibold", children: ws.name }), _jsx("p", { className: "text-xs text-muted-foreground mt-0.5", children: ws.path })] }), _jsxs("div", { className: "flex gap-6 items-center", children: [_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-xl font-bold", children: ws.gfi >= 0 ? ws.gfi : "N/A" }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.gfiLabel") })] }), _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-xl font-bold", children: ws.principleCount }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.principlesLabel") })] }), _jsx(OverallStatusBadge, { status: ws.status })] })] }) }) }));
|
|
27
|
-
}
|
|
28
|
-
function HealthDetailCard({ ws, t }) {
|
|
29
|
-
return (_jsx(Card, { className: `border-l-4 ${ws.status === "healthy"
|
|
30
|
-
? "border-l-primary"
|
|
31
|
-
: ws.status === "degraded"
|
|
32
|
-
? "border-l-amber-500"
|
|
33
|
-
: "border-l-destructive"}`, children: _jsxs(CardContent, { className: "p-4", children: [_jsxs("div", { className: "flex justify-between items-center mb-3", children: [_jsx("span", { className: "font-semibold", children: ws.name }), _jsx(OverallStatusBadge, { status: ws.status })] }), _jsxs("div", { className: "grid grid-cols-3 gap-3", children: [_jsxs("div", { className: "text-center p-2 rounded-md bg-muted/50", children: [_jsx("div", { className: "text-lg font-bold", children: ws.gfi >= 0 ? ws.gfi : "N/A" }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.gfiLabel") })] }), _jsxs("div", { className: "text-center p-2 rounded-md bg-muted/50", children: [_jsx("div", { className: "text-lg font-bold", children: ws.activePrinciples }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.activeLabel") })] }), _jsxs("div", { className: "text-center p-2 rounded-md bg-muted/50", children: [_jsx("div", { className: "text-lg font-bold", children: ws.pendingTasks }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.pendingLabel") })] })] })] }) }));
|
|
34
|
-
}
|
|
35
|
-
export function CentralPage() {
|
|
36
|
-
const { t } = useTranslation();
|
|
37
|
-
const overview = useAutoRefresh(fetchCentralOverview, 30000);
|
|
38
|
-
const health = useAutoRefresh(fetchCentralHealth, 30000);
|
|
39
|
-
const overviewData = overview.data;
|
|
40
|
-
const healthData = health.data;
|
|
41
|
-
const isLoading = overview.loading && !overviewData;
|
|
42
|
-
const hasError = overview.error && !overviewData;
|
|
43
|
-
if (isLoading) {
|
|
44
|
-
return (_jsxs("div", { children: [_jsx(Skeleton, { className: "h-8 w-48 mb-6" }), _jsx(Card, { className: "mb-6", children: _jsx(CardContent, { className: "p-6", children: _jsx(Skeleton, { className: "h-20 w-full" }) }) }), Array.from({ length: 3 }).map((_, i) => (_jsx(Card, { className: "mb-3", children: _jsx(CardContent, { className: "p-4", children: _jsx(Skeleton, { className: "h-12 w-full" }) }) }, i)))] }));
|
|
45
|
-
}
|
|
46
|
-
if (hasError) {
|
|
47
|
-
return (_jsx(Card, { children: _jsx(CardContent, { className: "p-6", children: _jsx("p", { className: "text-destructive", children: overview.error }) }) }));
|
|
48
|
-
}
|
|
49
|
-
if (!overviewData) {
|
|
50
|
-
return (_jsx(Card, { children: _jsx(CardContent, { className: "p-6 text-center text-muted-foreground", children: t("pages:central.noWorkspaceData") }) }));
|
|
51
|
-
}
|
|
52
|
-
const overallStatus = healthData?.overallStatus ?? "error";
|
|
53
|
-
const healthyCount = overviewData.workspaces.filter((w) => w.status === "healthy").length;
|
|
54
|
-
const degradedCount = overviewData.workspaces.filter((w) => w.status === "degraded").length;
|
|
55
|
-
const errorCount = overviewData.workspaces.filter((w) => w.status === "error").length;
|
|
56
|
-
return (_jsxs("div", { children: [_jsx(PageHeader, { title: t("pages:central.title"), description: t("pages:central.description"), onRefresh: () => { overview.refresh(); health.refresh(); }, lastUpdated: overview.lastUpdated ? new Date(overview.lastUpdated) : undefined }), _jsx(Card, { className: "mb-6", children: _jsx(CardContent, { className: "p-6", children: _jsxs("div", { className: "flex justify-between items-center", children: [_jsxs("div", { children: [_jsx("p", { className: "text-sm text-muted-foreground mb-2", children: t("pages:central.overallStatus") }), _jsx(OverallStatusBadge, { status: overallStatus })] }), _jsxs("div", { className: "flex gap-6", children: [_jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-3xl font-bold text-primary", children: healthyCount }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.healthy") })] }), _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-3xl font-bold text-amber-500", children: degradedCount }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.degraded") })] }), _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-3xl font-bold text-destructive", children: errorCount }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.error") })] }), _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-3xl font-bold", children: overviewData.workspaceCount }), _jsx("div", { className: "text-xs text-muted-foreground", children: t("pages:central.total") })] })] })] }) }) }), _jsxs(Card, { className: "mb-6", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t("pages:central.workspaces") }) }), _jsx(CardContent, { children: overviewData.workspaces.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground text-center py-8", children: t("pages:central.noWorkspaces") })) : (_jsx("div", { className: "space-y-3", children: overviewData.workspaces.map((ws) => (_jsx(WorkspaceCard, { ws: ws, t: t }, ws.name))) })) })] }), healthData && healthData.workspaces.length > 0 && (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: t("pages:central.healthDetails") }) }), _jsx(CardContent, { children: _jsx("div", { className: "space-y-3", children: healthData.workspaces.map((ws) => (_jsx(HealthDetailCard, { ws: ws, t: t }, ws.name))) }) })] }))] }));
|
|
57
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function DataFlowPage(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from 'react';
|
|
3
|
-
import { useNavigate } from 'react-router-dom';
|
|
4
|
-
import { PageHeader } from '../components/page-header.js';
|
|
5
|
-
import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card.js';
|
|
6
|
-
import { Badge } from '../components/ui/badge.js';
|
|
7
|
-
import { formatTime } from '../utils/format.js';
|
|
8
|
-
import { Button } from '../components/ui/button.js';
|
|
9
|
-
import { Skeleton } from '../components/ui/skeleton.js';
|
|
10
|
-
import { AlertTriangle, ArrowRight, CheckCircle, Clock, XCircle, Zap, ListTodo, Sparkles, Shield, ChevronRight, TrendingUp, Activity, } from 'lucide-react';
|
|
11
|
-
import { fetchPipelineStats } from '../api.js';
|
|
12
|
-
const STAGE_META = {
|
|
13
|
-
pain_signal: {
|
|
14
|
-
icon: Zap,
|
|
15
|
-
href: '/event-log?type=pain_signal',
|
|
16
|
-
gradient: 'from-amber-500 to-orange-500',
|
|
17
|
-
bgGlow: 'bg-amber-500/10',
|
|
18
|
-
label: 'Pain Signal',
|
|
19
|
-
},
|
|
20
|
-
task_created: {
|
|
21
|
-
icon: ListTodo,
|
|
22
|
-
href: '/tasks',
|
|
23
|
-
gradient: 'from-blue-500 to-indigo-500',
|
|
24
|
-
bgGlow: 'bg-blue-500/10',
|
|
25
|
-
label: 'Task Created',
|
|
26
|
-
},
|
|
27
|
-
candidate_generated: {
|
|
28
|
-
icon: Sparkles,
|
|
29
|
-
href: '/evolution',
|
|
30
|
-
gradient: 'from-purple-500 to-fuchsia-500',
|
|
31
|
-
bgGlow: 'bg-purple-500/10',
|
|
32
|
-
label: 'Candidate Generated',
|
|
33
|
-
},
|
|
34
|
-
principle_added: {
|
|
35
|
-
icon: Shield,
|
|
36
|
-
href: '/principles',
|
|
37
|
-
gradient: 'from-emerald-500 to-teal-500',
|
|
38
|
-
bgGlow: 'bg-emerald-500/10',
|
|
39
|
-
label: 'Principle Added',
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
const STATUS_CONFIG = {
|
|
43
|
-
normal: {
|
|
44
|
-
icon: CheckCircle,
|
|
45
|
-
label: '正常',
|
|
46
|
-
badge: 'default',
|
|
47
|
-
ring: 'ring-green-500/30',
|
|
48
|
-
pulse: '',
|
|
49
|
-
},
|
|
50
|
-
slow: {
|
|
51
|
-
icon: Clock,
|
|
52
|
-
label: '缓慢',
|
|
53
|
-
badge: 'secondary',
|
|
54
|
-
ring: 'ring-yellow-500/30',
|
|
55
|
-
pulse: 'animate-pulse',
|
|
56
|
-
},
|
|
57
|
-
stuck: {
|
|
58
|
-
icon: XCircle,
|
|
59
|
-
label: '卡住',
|
|
60
|
-
badge: 'destructive',
|
|
61
|
-
ring: 'ring-red-500/30',
|
|
62
|
-
pulse: '',
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
function StageCard({ stage, index }) {
|
|
66
|
-
const navigate = useNavigate();
|
|
67
|
-
const meta = STAGE_META[stage.id] ?? {
|
|
68
|
-
icon: Activity,
|
|
69
|
-
href: '#',
|
|
70
|
-
gradient: 'from-gray-500 to-gray-600',
|
|
71
|
-
bgGlow: 'bg-gray-500/10',
|
|
72
|
-
label: stage.name,
|
|
73
|
-
};
|
|
74
|
-
const statusCfg = STATUS_CONFIG[stage.status] ?? STATUS_CONFIG.stuck;
|
|
75
|
-
const StatusIcon = statusCfg.icon;
|
|
76
|
-
const StageIcon = meta.icon;
|
|
77
|
-
const formatDuration = (ms) => {
|
|
78
|
-
if (ms === null)
|
|
79
|
-
return '-';
|
|
80
|
-
if (ms < 60000)
|
|
81
|
-
return `${Math.round(ms / 1000)}s`;
|
|
82
|
-
if (ms < 3600000)
|
|
83
|
-
return `${Math.round(ms / 60000)}m`;
|
|
84
|
-
return `${Math.round(ms / 3600000)}h`;
|
|
85
|
-
};
|
|
86
|
-
const formatTimeAgo = (timestamp) => {
|
|
87
|
-
if (!timestamp)
|
|
88
|
-
return '从未';
|
|
89
|
-
const now = new Date();
|
|
90
|
-
const time = new Date(timestamp);
|
|
91
|
-
const diffMs = now.getTime() - time.getTime();
|
|
92
|
-
const diffMin = Math.floor(diffMs / 60000);
|
|
93
|
-
if (diffMin < 1)
|
|
94
|
-
return '刚刚';
|
|
95
|
-
if (diffMin < 60)
|
|
96
|
-
return `${diffMin} 分钟前`;
|
|
97
|
-
const diffHour = Math.floor(diffMin / 60);
|
|
98
|
-
if (diffHour < 24)
|
|
99
|
-
return `${diffHour} 小时前`;
|
|
100
|
-
return `${Math.floor(diffHour / 24)} 天前`;
|
|
101
|
-
};
|
|
102
|
-
return (_jsxs("div", { className: "relative", children: [_jsxs(Card, { className: `group cursor-pointer transition-all duration-300 hover:shadow-lg hover:scale-[1.01] ring-2 ${statusCfg.ring} overflow-hidden`, onClick: () => navigate(meta.href), children: [_jsx("div", { className: `absolute inset-0 ${meta.bgGlow} opacity-40 group-hover:opacity-60 transition-opacity` }), _jsxs("div", { className: "relative", children: [_jsx(CardHeader, { className: "pb-2", children: _jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: `w-10 h-10 rounded-xl bg-gradient-to-br ${meta.gradient} flex items-center justify-center text-white shadow-md`, children: _jsx(StageIcon, { className: "w-5 h-5" }) }), _jsxs("div", { children: [_jsx(CardTitle, { className: "text-base group-hover:text-primary transition-colors", children: meta.label }), _jsxs("div", { className: "flex items-center gap-1.5 mt-0.5", children: [_jsx(StatusIcon, { className: `w-3.5 h-3.5 ${statusCfg.badge === 'destructive' ? 'text-red-500' : statusCfg.badge === 'secondary' ? 'text-yellow-500' : 'text-green-500'}` }), _jsx(Badge, { variant: statusCfg.badge, className: "text-[10px] px-1.5 py-0", children: statusCfg.label })] })] })] }), _jsx(ChevronRight, { className: "w-4 h-4 text-muted-foreground group-hover:text-primary transition-colors" })] }) }), _jsxs(CardContent, { className: "space-y-3 pt-0", children: [_jsxs("div", { className: "grid grid-cols-3 gap-3", children: [_jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-[10px] uppercase tracking-wider text-muted-foreground", children: "\u4ECA\u65E5\u5904\u7406" }), _jsx("p", { className: "text-2xl font-bold mt-0.5", children: stage.count })] }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-[10px] uppercase tracking-wider text-muted-foreground", children: "\u5E73\u5747\u95F4\u9694" }), _jsx("p", { className: "text-2xl font-bold mt-0.5", children: formatDuration(stage.avgDuration) })] }), _jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-[10px] uppercase tracking-wider text-muted-foreground", children: "\u4E0A\u6B21\u5904\u7406" }), _jsx("p", { className: "text-sm font-semibold mt-1", children: formatTimeAgo(stage.lastProcessed) })] })] }), stage.gapMinutes !== null && stage.gapMinutes > 5 && (_jsxs("div", { className: "flex items-center gap-1.5 text-xs text-muted-foreground bg-muted/50 rounded-md px-2 py-1", children: [_jsx(Clock, { className: "w-3 h-3" }), "\u8DDD\u4E0A\u6B21\u5904\u7406: ", Math.floor(stage.gapMinutes), " \u5206\u949F"] }))] })] })] }), index < 3 && (_jsx("div", { className: "flex items-center justify-center py-2", children: _jsxs("div", { className: "flex items-center gap-1", children: [_jsx("div", { className: "w-1 h-1 rounded-full bg-muted-foreground/40" }), _jsx("div", { className: "w-1 h-1 rounded-full bg-muted-foreground/60" }), _jsx(ArrowRight, { className: "w-4 h-4 text-muted-foreground/80" }), _jsx("div", { className: "w-1 h-1 rounded-full bg-muted-foreground/60" }), _jsx("div", { className: "w-1 h-1 rounded-full bg-muted-foreground/40" })] }) }))] }));
|
|
103
|
-
}
|
|
104
|
-
function BottleneckAlert({ bottleneck }) {
|
|
105
|
-
return (_jsxs("div", { className: `flex items-center gap-3 p-3 rounded-lg ${bottleneck.severity === 'critical' ? 'bg-red-50 dark:bg-red-950/20 border border-red-200 dark:border-red-800' :
|
|
106
|
-
'bg-yellow-50 dark:bg-yellow-950/20 border border-yellow-200 dark:border-yellow-800'}`, children: [_jsx(AlertTriangle, { className: `w-5 h-5 ${bottleneck.severity === 'critical' ? 'text-red-500' : 'text-yellow-500'}` }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-sm font-medium", children: bottleneck.description }), _jsxs("p", { className: "text-xs text-muted-foreground", children: [bottleneck.fromStage, " \u2192 ", bottleneck.toStage] })] }), _jsxs(Badge, { variant: bottleneck.severity === 'critical' ? 'destructive' : 'secondary', children: [bottleneck.gapMinutes.toFixed(1), " \u5206\u949F\u5EF6\u8FDF"] })] }));
|
|
107
|
-
}
|
|
108
|
-
function LoadingSkeleton() {
|
|
109
|
-
return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center justify-between mb-6", children: [_jsx(Skeleton, { className: "h-8 w-40" }), _jsx(Skeleton, { className: "h-8 w-24" })] }), _jsx("div", { className: "grid grid-cols-3 gap-4 mb-6", children: [1, 2, 3].map(i => _jsx(Skeleton, { className: "h-24" }, i)) }), _jsx("div", { className: "space-y-2", children: [1, 2, 3, 4].map(i => (_jsx("div", { className: "relative", children: _jsx(Skeleton, { className: "h-44 w-full" }) }, i))) })] }));
|
|
110
|
-
}
|
|
111
|
-
function SummaryStatCard({ icon: Icon, label, value, colorClass }) {
|
|
112
|
-
return (_jsx(Card, { className: "transition-all duration-200 hover:shadow-md", children: _jsx(CardContent, { className: "p-5", children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: `p-2.5 rounded-xl ${colorClass}`, children: _jsx(Icon, { className: "w-5 h-5" }) }), _jsxs("div", { children: [_jsx("p", { className: "text-xs text-muted-foreground uppercase tracking-wider", children: label }), _jsx("p", { className: "text-2xl font-bold", children: value })] })] }) }) }));
|
|
113
|
-
}
|
|
114
|
-
export function DataFlowPage() {
|
|
115
|
-
const [data, setData] = useState(null);
|
|
116
|
-
const [loading, setLoading] = useState(true);
|
|
117
|
-
const [error, setError] = useState(null);
|
|
118
|
-
const fetchData = async () => {
|
|
119
|
-
setLoading(true);
|
|
120
|
-
setError(null);
|
|
121
|
-
try {
|
|
122
|
-
const result = await fetchPipelineStats();
|
|
123
|
-
if (!result.success) {
|
|
124
|
-
setError(result.error || 'Failed to fetch pipeline stats');
|
|
125
|
-
}
|
|
126
|
-
else if (result.data) {
|
|
127
|
-
setData(result.data);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
setError(err instanceof Error ? err.message : 'Unknown error');
|
|
132
|
-
}
|
|
133
|
-
finally {
|
|
134
|
-
setLoading(false);
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
useEffect(() => {
|
|
138
|
-
fetchData();
|
|
139
|
-
const interval = setInterval(fetchData, 15000);
|
|
140
|
-
return () => clearInterval(interval);
|
|
141
|
-
}, []);
|
|
142
|
-
if (loading && !data) {
|
|
143
|
-
return (_jsxs("div", { children: [_jsx(PageHeader, { title: "\u6570\u636E\u6D41", description: "Pain Chain \u7BA1\u9053\u72B6\u6001\u76D1\u63A7" }), _jsx(LoadingSkeleton, {})] }));
|
|
144
|
-
}
|
|
145
|
-
if (error && !data) {
|
|
146
|
-
return (_jsxs("div", { children: [_jsx(PageHeader, { title: "\u6570\u636E\u6D41", description: "Pain Chain \u7BA1\u9053\u72B6\u6001\u76D1\u63A7", onRefresh: fetchData }), _jsx(Card, { children: _jsxs(CardContent, { className: "p-6", children: [_jsxs("p", { className: "text-destructive", children: ["\u52A0\u8F7D\u5931\u8D25: ", error] }), _jsx(Button, { onClick: fetchData, className: "mt-4", children: "\u91CD\u8BD5" })] }) })] }));
|
|
147
|
-
}
|
|
148
|
-
if (!data) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
const normalCount = data.stages.filter(s => s.status === 'normal').length;
|
|
152
|
-
const hasCriticalBottleneck = data.bottlenecks.some(b => b.severity === 'critical');
|
|
153
|
-
return (_jsxs("div", { className: "space-y-6", children: [_jsx(PageHeader, { title: "\u6570\u636E\u6D41", description: "Pain Chain \u7BA1\u9053\u72B6\u6001\u76D1\u63A7", onRefresh: fetchData }), _jsxs("div", { className: "grid grid-cols-1 md:grid-cols-3 gap-4", children: [_jsx(SummaryStatCard, { icon: TrendingUp, label: "\u4ECA\u65E5\u5904\u7406", value: data.totalProcessed, colorClass: "bg-primary/10 text-primary" }), _jsx(SummaryStatCard, { icon: CheckCircle, label: "\u6B63\u5E38\u8FD0\u884C", value: normalCount, colorClass: "bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400" }), _jsx(SummaryStatCard, { icon: AlertTriangle, label: "\u74F6\u9888\u68C0\u6D4B", value: data.bottlenecks.length, colorClass: hasCriticalBottleneck
|
|
154
|
-
? 'bg-red-100 dark:bg-red-900/30 text-red-600 dark:text-red-400'
|
|
155
|
-
: data.bottlenecks.length > 0
|
|
156
|
-
? 'bg-yellow-100 dark:bg-yellow-900/30 text-yellow-600 dark:text-yellow-400'
|
|
157
|
-
: 'bg-green-100 dark:bg-green-900/30 text-green-600 dark:text-green-400' })] }), data.bottlenecks.length > 0 && (_jsxs(Card, { children: [_jsx(CardHeader, { className: "pb-2", children: _jsxs(CardTitle, { className: "text-base flex items-center gap-2", children: [_jsx(AlertTriangle, { className: "w-4 h-4 text-yellow-500" }), "\u68C0\u6D4B\u5230\u7684\u74F6\u9888"] }) }), _jsx(CardContent, { className: "space-y-2", children: data.bottlenecks.map((bottleneck, index) => (_jsx(BottleneckAlert, { bottleneck: bottleneck }, index))) })] })), _jsx("div", { className: "space-y-1", children: data.stages.map((stage, index) => (_jsx(StageCard, { stage: stage, index: index }, stage.id))) }), _jsx(Card, { className: "bg-muted/50", children: _jsx(CardContent, { className: "p-4", children: _jsxs("div", { className: "flex items-center justify-between text-sm text-muted-foreground", children: [_jsx("span", { children: "\u6570\u636E\u5237\u65B0\u95F4\u9694: 15 \u79D2" }), _jsxs("span", { children: ["\u6700\u540E\u66F4\u65B0: ", formatTime(data.generatedAt)] })] }) }) })] }));
|
|
158
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function EventLogPage(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect } from 'react';
|
|
3
|
-
import { useSearchParams } from 'react-router-dom';
|
|
4
|
-
import { useTranslation } from 'react-i18next';
|
|
5
|
-
import { PageHeader } from '../components/page-header.js';
|
|
6
|
-
import { Card, CardContent, CardHeader, CardTitle } from '../components/ui/card.js';
|
|
7
|
-
import { Button } from '../components/ui/button.js';
|
|
8
|
-
import { Badge } from '../components/ui/badge.js';
|
|
9
|
-
import { Input } from '../components/ui/input.js';
|
|
10
|
-
import { ChevronLeft, ChevronRight, Filter, RefreshCw, Link, Clock, AlertTriangle, Search, } from 'lucide-react';
|
|
11
|
-
import { fetchEvents, fetchEventsGrouped, fetchRelatedEvents } from '../api.js';
|
|
12
|
-
import { formatDate } from '../utils/format.js';
|
|
13
|
-
const EVENT_COLORS = {
|
|
14
|
-
pain_signal: 'destructive',
|
|
15
|
-
gate_block: 'destructive',
|
|
16
|
-
empathy_rollback: 'secondary',
|
|
17
|
-
};
|
|
18
|
-
const COMMON_EVENT_TYPES = [
|
|
19
|
-
'all',
|
|
20
|
-
'pain_signal',
|
|
21
|
-
'gate_block',
|
|
22
|
-
'diagnosis_task',
|
|
23
|
-
'evolution_task',
|
|
24
|
-
'principle_candidate',
|
|
25
|
-
'rule_promotion',
|
|
26
|
-
'empathy_rollback',
|
|
27
|
-
];
|
|
28
|
-
export function EventLogPage() {
|
|
29
|
-
const [searchParams, setSearchParams] = useSearchParams();
|
|
30
|
-
const { t } = useTranslation();
|
|
31
|
-
const [events, setEvents] = useState([]);
|
|
32
|
-
const [loading, setLoading] = useState(false);
|
|
33
|
-
const [error, setError] = useState(null);
|
|
34
|
-
const [page, setPage] = useState(() => {
|
|
35
|
-
const p = searchParams.get("page");
|
|
36
|
-
return p ? Math.max(1, parseInt(p, 10) || 1) : 1;
|
|
37
|
-
});
|
|
38
|
-
const [totalPages, setTotalPages] = useState(0);
|
|
39
|
-
const [total, setTotal] = useState(0);
|
|
40
|
-
const [pageSize] = useState(50);
|
|
41
|
-
const [selectedTypes, setSelectedTypes] = useState(() => {
|
|
42
|
-
const typesParam = searchParams.get("types");
|
|
43
|
-
if (typesParam) {
|
|
44
|
-
return typesParam.split(",").filter((t) => COMMON_EVENT_TYPES.includes(t));
|
|
45
|
-
}
|
|
46
|
-
const typeParam = searchParams.get("type");
|
|
47
|
-
return typeParam && COMMON_EVENT_TYPES.includes(typeParam) ? [typeParam] : [];
|
|
48
|
-
});
|
|
49
|
-
const [searchQuery, setSearchQuery] = useState(() => searchParams.get("search") ?? "");
|
|
50
|
-
const [startDate, setStartDate] = useState(() => searchParams.get("start") ?? "");
|
|
51
|
-
const [endDate, setEndDate] = useState(() => searchParams.get("end") ?? "");
|
|
52
|
-
const [typeCounts, setTypeCounts] = useState(null);
|
|
53
|
-
const [selectedEventId, setSelectedEventId] = useState(null);
|
|
54
|
-
const [relatedEvents, setRelatedEvents] = useState(null);
|
|
55
|
-
const [loadingRelated, setLoadingRelated] = useState(false);
|
|
56
|
-
const [showFilters, setShowFilters] = useState(false);
|
|
57
|
-
const loadEvents = async (newPage = 1) => {
|
|
58
|
-
setLoading(true);
|
|
59
|
-
setError(null);
|
|
60
|
-
try {
|
|
61
|
-
const result = await fetchEvents({
|
|
62
|
-
types: selectedTypes.length > 0 ? selectedTypes : undefined,
|
|
63
|
-
startDate: startDate || undefined,
|
|
64
|
-
endDate: endDate || undefined,
|
|
65
|
-
searchQuery: searchQuery || undefined,
|
|
66
|
-
page: newPage,
|
|
67
|
-
pageSize,
|
|
68
|
-
});
|
|
69
|
-
if (!result.success) {
|
|
70
|
-
setError(result.error || 'Failed to load events');
|
|
71
|
-
}
|
|
72
|
-
else if (result.data) {
|
|
73
|
-
setEvents(result.data.events);
|
|
74
|
-
setTotal(result.data.total);
|
|
75
|
-
setTotalPages(result.data.totalPages);
|
|
76
|
-
setPage(newPage);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
setError(err instanceof Error ? err.message : 'Unknown error');
|
|
81
|
-
}
|
|
82
|
-
finally {
|
|
83
|
-
setLoading(false);
|
|
84
|
-
}
|
|
85
|
-
};
|
|
86
|
-
const loadTypeCounts = async () => {
|
|
87
|
-
try {
|
|
88
|
-
const result = await fetchEventsGrouped();
|
|
89
|
-
if (result.success && result.data) {
|
|
90
|
-
setTypeCounts(result.data);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
// ignore
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
const loadRelatedEvents = async (eventId) => {
|
|
98
|
-
setLoadingRelated(true);
|
|
99
|
-
try {
|
|
100
|
-
const result = await fetchRelatedEvents(eventId, 10);
|
|
101
|
-
if (result.success && result.data) {
|
|
102
|
-
setRelatedEvents(result.data.events);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// ignore
|
|
107
|
-
}
|
|
108
|
-
finally {
|
|
109
|
-
setLoadingRelated(false);
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
useEffect(() => {
|
|
113
|
-
loadEvents();
|
|
114
|
-
loadTypeCounts();
|
|
115
|
-
}, []);
|
|
116
|
-
useEffect(() => {
|
|
117
|
-
setPage(1);
|
|
118
|
-
loadEvents(1);
|
|
119
|
-
}, [selectedTypes, searchQuery, startDate, endDate]);
|
|
120
|
-
useEffect(() => {
|
|
121
|
-
const params = new URLSearchParams();
|
|
122
|
-
if (selectedTypes.length > 0)
|
|
123
|
-
params.set("types", selectedTypes.join(","));
|
|
124
|
-
if (searchQuery)
|
|
125
|
-
params.set("search", searchQuery);
|
|
126
|
-
if (startDate)
|
|
127
|
-
params.set("start", startDate);
|
|
128
|
-
if (endDate)
|
|
129
|
-
params.set("end", endDate);
|
|
130
|
-
if (page > 1)
|
|
131
|
-
params.set("page", String(page));
|
|
132
|
-
setSearchParams(params, { replace: true });
|
|
133
|
-
}, [selectedTypes, searchQuery, startDate, endDate, page, setSearchParams]);
|
|
134
|
-
const handleTypeToggle = (type) => {
|
|
135
|
-
if (type === 'all') {
|
|
136
|
-
setSelectedTypes([]);
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
if (selectedTypes.includes(type)) {
|
|
140
|
-
setSelectedTypes(selectedTypes.filter(t => t !== type));
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
setSelectedTypes([...selectedTypes, type]);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
const handleEventClick = (event) => {
|
|
148
|
-
if (selectedEventId === event.id) {
|
|
149
|
-
setSelectedEventId(null);
|
|
150
|
-
setRelatedEvents(null);
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
setSelectedEventId(event.id);
|
|
154
|
-
loadRelatedEvents(event.id);
|
|
155
|
-
}
|
|
156
|
-
};
|
|
157
|
-
return (_jsxs("div", { className: "flex flex-col gap-6", children: [_jsx(PageHeader, { title: t("pages:eventLog.title"), description: t("pages:eventLog.description"), onRefresh: () => loadEvents(page) }), _jsxs(Card, { children: [_jsx(CardHeader, { className: "pb-3", children: _jsxs("div", { className: "flex justify-between items-center", children: [_jsx(CardTitle, { className: "text-base", children: t("pages:eventLog.filter") }), _jsxs(Button, { variant: "ghost", size: "sm", onClick: () => setShowFilters(!showFilters), children: [_jsx(Filter, { className: "w-4 h-4 mr-2" }), showFilters ? t("pages:eventLog.collapse") : t("pages:eventLog.expand")] })] }) }), showFilters && (_jsxs(CardContent, { className: "flex flex-col gap-4", children: [_jsxs("div", { className: "flex flex-col gap-2", children: [_jsx("p", { className: "text-sm text-muted-foreground", children: t("pages:eventLog.eventType") }), _jsx("div", { className: "flex flex-wrap gap-2", children: COMMON_EVENT_TYPES.map(type => (_jsxs(Badge, { variant: type === 'all'
|
|
158
|
-
? selectedTypes.length === 0
|
|
159
|
-
? 'default'
|
|
160
|
-
: 'outline'
|
|
161
|
-
: selectedTypes.includes(type)
|
|
162
|
-
? EVENT_COLORS[type] || 'default'
|
|
163
|
-
: 'outline', className: "cursor-pointer", role: "button", tabIndex: 0, onClick: () => handleTypeToggle(type), onKeyDown: (e) => { if (e.key === "Enter" || e.key === " ") {
|
|
164
|
-
e.preventDefault();
|
|
165
|
-
handleTypeToggle(type);
|
|
166
|
-
} }, children: [type, typeCounts && typeCounts[type] !== undefined && (_jsxs("span", { className: "ml-1", children: ["(", typeCounts[type], ")"] }))] }, type))) })] }), _jsxs("div", { className: "flex gap-4 flex-wrap", children: [_jsxs("div", { className: "flex-1 min-w-[200px]", children: [_jsx("label", { htmlFor: "start-date", className: "text-sm text-muted-foreground mb-1 block", children: t("pages:eventLog.startDate") }), _jsx(Input, { id: "start-date", type: "date", value: startDate, onChange: (e) => setStartDate(e.target.value), className: "h-9" })] }), _jsxs("div", { className: "flex-1 min-w-[200px]", children: [_jsx("label", { htmlFor: "end-date", className: "text-sm text-muted-foreground mb-1 block", children: t("pages:eventLog.endDate") }), _jsx(Input, { id: "end-date", type: "date", value: endDate, onChange: (e) => setEndDate(e.target.value), className: "h-9" })] }), _jsxs("div", { className: "flex-1 min-w-[200px]", children: [_jsx("label", { htmlFor: "event-search", className: "text-sm text-muted-foreground mb-1 block", children: t("common:search") }), _jsxs("div", { className: "flex gap-2", children: [_jsxs("div", { className: "relative flex-1", children: [_jsx(Search, { className: "absolute left-2 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground" }), _jsx(Input, { id: "event-search", type: "text", placeholder: t("pages:eventLog.searchPlaceholder"), value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), className: "h-9 pl-8" })] }), _jsx(Button, { onClick: () => setSearchQuery(''), variant: "ghost", children: t("pages:eventLog.clear") })] })] })] }), _jsxs("div", { className: "flex justify-end", children: [_jsx(Button, { onClick: () => {
|
|
167
|
-
setSelectedTypes([]);
|
|
168
|
-
setSearchQuery('');
|
|
169
|
-
setStartDate('');
|
|
170
|
-
setEndDate('');
|
|
171
|
-
setSearchParams({}, { replace: true });
|
|
172
|
-
}, variant: "ghost", children: t("pages:eventLog.reset") }), _jsxs(Button, { onClick: () => loadEvents(page), className: "ml-2", children: [_jsx(RefreshCw, { className: "w-4 h-4 mr-2" }), t("pages:eventLog.apply")] })] })] }))] }), error && (_jsx(Card, { className: "border-destructive/20 bg-destructive/10", children: _jsx(CardContent, { className: "p-4", children: _jsxs("div", { className: "flex items-center gap-2 text-destructive", children: [_jsx(AlertTriangle, { className: "w-4 h-4" }), _jsx("p", { children: error })] }) }) })), _jsxs("div", { className: "grid grid-cols-1 lg:grid-cols-3 gap-6", children: [_jsxs("div", { className: "lg:col-span-2 space-y-4", children: [_jsxs("div", { className: "flex justify-between items-center", children: [_jsxs("div", { className: "text-sm text-muted-foreground", children: ["\u663E\u793A ", (page - 1) * pageSize + 1, "-", Math.min(page * pageSize, total), " / ", total] }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: "ghost", size: "sm", disabled: page <= 1 || loading, onClick: () => loadEvents(page - 1), children: _jsx(ChevronLeft, { className: "w-4 h-4" }) }), _jsxs("span", { className: "py-2 px-3 text-sm", children: [page, " / ", totalPages || 1] }), _jsx(Button, { variant: "ghost", size: "sm", disabled: page >= totalPages || loading, onClick: () => loadEvents(page + 1), children: _jsx(ChevronRight, { className: "w-4 h-4" }) })] })] }), _jsx(Card, { children: _jsx(CardContent, { className: "p-0", children: _jsx("div", { className: "h-[600px] overflow-y-auto", children: loading && !events.length ? (_jsx("div", { className: "p-8 text-center", children: _jsx("div", { className: "animate-pulse text-muted-foreground", children: t("pages:eventLog.loading") }) })) : events.length === 0 ? (_jsx("div", { className: "p-8 text-center text-muted-foreground", children: t("pages:eventLog.noMatchingEvents") })) : (_jsx("div", { className: "divide-y", children: events.map((event) => (_jsxs("div", { className: `p-4 hover:bg-muted/50 cursor-pointer transition-colors ${selectedEventId === event.id ? 'bg-muted' : ''}`, role: "button", tabIndex: 0, onClick: () => handleEventClick(event), onKeyDown: (e) => { if (e.key === "Enter" || e.key === " ") {
|
|
173
|
-
e.preventDefault();
|
|
174
|
-
handleEventClick(event);
|
|
175
|
-
} }, children: [_jsxs("div", { className: "flex items-start justify-between mb-2", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Badge, { variant: EVENT_COLORS[event.type] || 'default', children: event.type }), _jsxs("span", { className: "text-xs text-muted-foreground flex items-center gap-1", children: [_jsx(Clock, { className: "w-3 h-3" }), formatDate(event.ts)] })] }), event.category && (_jsx(Badge, { variant: "outline", children: event.category }))] }), event.data && (_jsx("pre", { className: "text-xs bg-muted p-2 rounded overflow-x-auto", children: JSON.stringify(event.data, null, 2) }))] }, event.id))) })) }) }) })] }), _jsxs("div", { className: "lg:col-span-1", children: [selectedEventId && relatedEvents && (_jsxs(Card, { children: [_jsx(CardHeader, { className: "pb-2", children: _jsxs(CardTitle, { className: "text-base flex items-center gap-2", children: [_jsx(Link, { className: "w-4 h-4" }), t("pages:eventLog.relatedEvents")] }) }), _jsx(CardContent, { className: "space-y-3", children: loadingRelated ? (_jsx("div", { className: "text-sm text-muted-foreground animate-pulse", children: t("pages:eventLog.loading") })) : relatedEvents.length === 0 ? (_jsx("div", { className: "text-sm text-muted-foreground", children: t("pages:eventLog.noRelatedEvents") })) : (_jsx("div", { className: "space-y-2", children: relatedEvents.map((event) => (_jsxs("div", { className: `p-2 rounded text-sm ${event.id === selectedEventId ? 'bg-primary/10' : 'bg-muted'}`, children: [_jsxs("div", { className: "flex items-center gap-2 mb-1", children: [_jsx(Badge, { variant: EVENT_COLORS[event.type] || 'outline', className: "text-xs", children: event.type }), event.id === selectedEventId && (_jsx(Badge, { variant: "default", className: "text-xs", children: t("pages:eventLog.current") }))] }), _jsx("p", { className: "text-xs text-muted-foreground", children: formatDate(event.ts) })] }, event.id))) })) })] })), typeCounts && (_jsxs(Card, { className: "mt-4", children: [_jsx(CardHeader, { className: "pb-2", children: _jsx(CardTitle, { className: "text-base", children: t("pages:eventLog.eventStats") }) }), _jsx(CardContent, { className: "space-y-2", children: Object.entries(typeCounts).sort((a, b) => b[1] - a[1]).map(([type, count]) => (_jsxs("div", { className: "flex items-center justify-between text-sm", children: [_jsx("span", { className: "flex items-center gap-2", children: _jsx(Badge, { variant: EVENT_COLORS[type] || 'outline', className: "text-xs", children: type }) }), _jsx("span", { className: "font-mono", children: count })] }, type))) })] }))] })] })] }));
|
|
176
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function EvolutionPage(): import("react/jsx-runtime").JSX.Element;
|