create-principles-disciple 1.146.4 → 1.146.6
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/_release/product-identity.json +1 -1
- package/package.json +3 -3
- package/release-manager/package.json +3 -3
- package/console/dist/ui/App.d.ts +0 -1
- package/console/dist/ui/App.js +0 -172
- package/console/dist/ui/api.d.ts +0 -611
- package/console/dist/ui/api.js +0 -1094
- package/console/dist/ui/components/auth/login-form.d.ts +0 -4
- package/console/dist/ui/components/auth/login-form.js +0 -142
- package/console/dist/ui/components/auth/splash-screen.d.ts +0 -9
- package/console/dist/ui/components/auth/splash-screen.js +0 -22
- package/console/dist/ui/components/error-boundary.d.ts +0 -15
- package/console/dist/ui/components/error-boundary.js +0 -30
- package/console/dist/ui/components/focus/daily-thought-card.d.ts +0 -1
- package/console/dist/ui/components/focus/daily-thought-card.js +0 -41
- package/console/dist/ui/components/language-switcher.d.ts +0 -2
- package/console/dist/ui/components/language-switcher.js +0 -17
- package/console/dist/ui/components/layout/app-sidebar.d.ts +0 -27
- package/console/dist/ui/components/layout/app-sidebar.js +0 -128
- package/console/dist/ui/components/layout/page-loading.d.ts +0 -13
- package/console/dist/ui/components/layout/page-loading.js +0 -14
- package/console/dist/ui/components/layout/page-shell.d.ts +0 -12
- package/console/dist/ui/components/layout/page-shell.js +0 -11
- package/console/dist/ui/components/layout/section-title.d.ts +0 -10
- package/console/dist/ui/components/layout/section-title.js +0 -9
- package/console/dist/ui/components/notifications/NotificationProvider.d.ts +0 -14
- package/console/dist/ui/components/notifications/NotificationProvider.js +0 -136
- package/console/dist/ui/components/notifications/favicon-badge.d.ts +0 -3
- package/console/dist/ui/components/notifications/favicon-badge.js +0 -68
- package/console/dist/ui/components/notifications/notification-reducer.d.ts +0 -9
- package/console/dist/ui/components/notifications/notification-reducer.js +0 -9
- package/console/dist/ui/components/notifications/sound-storage.d.ts +0 -3
- package/console/dist/ui/components/notifications/sound-storage.js +0 -37
- package/console/dist/ui/components/notifications/useNotifications.d.ts +0 -1
- package/console/dist/ui/components/notifications/useNotifications.js +0 -9
- package/console/dist/ui/components/onboarding/CircuitDiagram.d.ts +0 -8
- package/console/dist/ui/components/onboarding/CircuitDiagram.js +0 -18
- package/console/dist/ui/components/onboarding/DemoResultView.d.ts +0 -22
- package/console/dist/ui/components/onboarding/DemoResultView.js +0 -33
- package/console/dist/ui/components/onboarding/SlashCommandsCard.d.ts +0 -16
- package/console/dist/ui/components/onboarding/SlashCommandsCard.js +0 -20
- package/console/dist/ui/components/onboarding/slashCommands.d.ts +0 -20
- package/console/dist/ui/components/onboarding/slashCommands.js +0 -22
- package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.d.ts +0 -6
- package/console/dist/ui/components/receipts/ReceiptCoverageDisclosure.js +0 -66
- package/console/dist/ui/components/theme-provider.d.ts +0 -14
- package/console/dist/ui/components/theme-provider.js +0 -40
- package/console/dist/ui/components/theme-toggle.d.ts +0 -2
- package/console/dist/ui/components/theme-toggle.js +0 -11
- package/console/dist/ui/components/ui/alert-dialog.d.ts +0 -20
- package/console/dist/ui/components/ui/alert-dialog.js +0 -26
- package/console/dist/ui/components/ui/badge.d.ts +0 -9
- package/console/dist/ui/components/ui/badge.js +0 -22
- package/console/dist/ui/components/ui/button.d.ts +0 -11
- package/console/dist/ui/components/ui/button.js +0 -34
- package/console/dist/ui/components/ui/card.d.ts +0 -8
- package/console/dist/ui/components/ui/card.js +0 -16
- package/console/dist/ui/components/ui/charts.d.ts +0 -51
- package/console/dist/ui/components/ui/charts.js +0 -72
- package/console/dist/ui/components/ui/dialog.d.ts +0 -19
- package/console/dist/ui/components/ui/dialog.js +0 -22
- package/console/dist/ui/components/ui/input.d.ts +0 -3
- package/console/dist/ui/components/ui/input.js +0 -8
- package/console/dist/ui/components/ui/markdown.d.ts +0 -24
- package/console/dist/ui/components/ui/markdown.js +0 -119
- package/console/dist/ui/components/ui/progress-bar.d.ts +0 -20
- package/console/dist/ui/components/ui/progress-bar.js +0 -38
- package/console/dist/ui/components/ui/select.d.ts +0 -13
- package/console/dist/ui/components/ui/select.js +0 -26
- package/console/dist/ui/components/ui/separator.d.ts +0 -3
- package/console/dist/ui/components/ui/separator.js +0 -6
- package/console/dist/ui/components/ui/sheet.d.ts +0 -25
- package/console/dist/ui/components/ui/sheet.js +0 -37
- package/console/dist/ui/components/ui/shiny-text.d.ts +0 -28
- package/console/dist/ui/components/ui/shiny-text.js +0 -46
- package/console/dist/ui/components/ui/skeleton.d.ts +0 -3
- package/console/dist/ui/components/ui/skeleton.js +0 -6
- package/console/dist/ui/components/ui/sonner.d.ts +0 -3
- package/console/dist/ui/components/ui/sonner.js +0 -13
- package/console/dist/ui/components/ui/tooltip.d.ts +0 -7
- package/console/dist/ui/components/ui/tooltip.js +0 -10
- package/console/dist/ui/data/daily-thoughts.d.ts +0 -15
- package/console/dist/ui/data/daily-thoughts.js +0 -164
- package/console/dist/ui/hooks/useNotificationSound.d.ts +0 -12
- package/console/dist/ui/hooks/useNotificationSound.js +0 -74
- package/console/dist/ui/i18n/en.json +0 -2399
- package/console/dist/ui/i18n/index.d.ts +0 -2
- package/console/dist/ui/i18n/index.js +0 -32
- package/console/dist/ui/i18n/zh-CN.json +0 -2399
- package/console/dist/ui/main.d.ts +0 -1
- package/console/dist/ui/main.js +0 -9
- package/console/dist/ui/pages/ReportProblemValidators.d.ts +0 -144
- package/console/dist/ui/pages/ReportProblemValidators.js +0 -418
- package/console/dist/ui/pages/activation/ActivationPage.d.ts +0 -1
- package/console/dist/ui/pages/activation/ActivationPage.js +0 -512
- package/console/dist/ui/pages/activation/ActivationValidators.d.ts +0 -20
- package/console/dist/ui/pages/activation/ActivationValidators.js +0 -160
- package/console/dist/ui/pages/control-center/AgentCard.d.ts +0 -31
- package/console/dist/ui/pages/control-center/AgentCard.js +0 -212
- package/console/dist/ui/pages/control-center/AgentGroup.d.ts +0 -26
- package/console/dist/ui/pages/control-center/AgentGroup.js +0 -38
- package/console/dist/ui/pages/control-center/ControlCenterPage.d.ts +0 -1
- package/console/dist/ui/pages/control-center/ControlCenterPage.js +0 -509
- package/console/dist/ui/pages/control-center/DesignGatePanel.d.ts +0 -1
- package/console/dist/ui/pages/control-center/DesignGatePanel.js +0 -137
- package/console/dist/ui/pages/control-center/RuntimeProfileManager.d.ts +0 -31
- package/console/dist/ui/pages/control-center/RuntimeProfileManager.js +0 -199
- package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +0 -17
- package/console/dist/ui/pages/control-center/WorkflowDiagram.js +0 -55
- package/console/dist/ui/pages/debt/DebtPage.d.ts +0 -2
- package/console/dist/ui/pages/debt/DebtPage.js +0 -222
- package/console/dist/ui/pages/design-system/DesignSystemPage.d.ts +0 -2
- package/console/dist/ui/pages/design-system/DesignSystemPage.js +0 -30
- package/console/dist/ui/pages/examiner/ExaminerPage.d.ts +0 -15
- package/console/dist/ui/pages/examiner/ExaminerPage.js +0 -158
- package/console/dist/ui/pages/failed-tasks/FailedTasksPage.d.ts +0 -1
- package/console/dist/ui/pages/failed-tasks/FailedTasksPage.js +0 -421
- package/console/dist/ui/pages/focus/ApprovalSubjectReading.d.ts +0 -24
- package/console/dist/ui/pages/focus/ApprovalSubjectReading.js +0 -133
- package/console/dist/ui/pages/focus/FocusPage.d.ts +0 -123
- package/console/dist/ui/pages/focus/FocusPage.js +0 -567
- package/console/dist/ui/pages/focus/OwnerDecisionCard.d.ts +0 -9
- package/console/dist/ui/pages/focus/OwnerDecisionCard.js +0 -111
- package/console/dist/ui/pages/focus/OwnerWorkbench.d.ts +0 -19
- package/console/dist/ui/pages/focus/OwnerWorkbench.js +0 -75
- package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.d.ts +0 -34
- package/console/dist/ui/pages/focus/RuleCandidateBindingPanel.js +0 -298
- package/console/dist/ui/pages/focus/focus-validation.d.ts +0 -40
- package/console/dist/ui/pages/focus/focus-validation.js +0 -211
- package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +0 -67
- package/console/dist/ui/pages/intent/IntentOnboarding.js +0 -289
- package/console/dist/ui/pages/intent/IntentPage.d.ts +0 -1
- package/console/dist/ui/pages/intent/IntentPage.js +0 -252
- package/console/dist/ui/pages/pain/PainEvidenceValidators.d.ts +0 -59
- package/console/dist/ui/pages/pain/PainEvidenceValidators.js +0 -125
- package/console/dist/ui/pages/pain/PainPage.d.ts +0 -1
- package/console/dist/ui/pages/pain/PainPage.js +0 -420
- package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +0 -175
- package/console/dist/ui/pages/pain/pain-card-helpers.js +0 -181
- package/console/dist/ui/pages/principles/CorePrinciplesPage.d.ts +0 -10
- package/console/dist/ui/pages/principles/CorePrinciplesPage.js +0 -59
- package/console/dist/ui/pages/principles/PrincipleDetailPage.d.ts +0 -60
- package/console/dist/ui/pages/principles/PrincipleDetailPage.js +0 -602
- package/console/dist/ui/pages/principles/PrinciplesPage.d.ts +0 -1
- package/console/dist/ui/pages/principles/PrinciplesPage.js +0 -327
- package/console/dist/ui/pages/principles/PrinciplesViewNav.d.ts +0 -8
- package/console/dist/ui/pages/principles/PrinciplesViewNav.js +0 -15
- package/console/dist/ui/pages/report-problem/ReportProblemPage.d.ts +0 -1
- package/console/dist/ui/pages/report-problem/ReportProblemPage.js +0 -467
- package/console/dist/ui/pages/settings/SettingsPage.d.ts +0 -4
- package/console/dist/ui/pages/settings/SettingsPage.js +0 -457
- package/console/dist/ui/pages/settings/UpdatePage.d.ts +0 -1
- package/console/dist/ui/pages/settings/UpdatePage.js +0 -215
- package/console/dist/ui/pages/welcome/WelcomePage.d.ts +0 -5
- package/console/dist/ui/pages/welcome/WelcomePage.js +0 -187
- package/console/dist/ui/utils/agent-metadata.d.ts +0 -71
- package/console/dist/ui/utils/agent-metadata.js +0 -284
- package/console/dist/ui/utils/approval-review.d.ts +0 -30
- package/console/dist/ui/utils/approval-review.js +0 -50
- package/console/dist/ui/utils/approval-warning-localization.d.ts +0 -34
- package/console/dist/ui/utils/approval-warning-localization.js +0 -148
- package/console/dist/ui/utils/attention-presentation.d.ts +0 -35
- package/console/dist/ui/utils/attention-presentation.js +0 -46
- package/console/dist/ui/utils/blocker-localization.d.ts +0 -23
- package/console/dist/ui/utils/blocker-localization.js +0 -36
- package/console/dist/ui/utils/control-center-helpers.d.ts +0 -79
- package/console/dist/ui/utils/control-center-helpers.js +0 -189
- package/console/dist/ui/utils/enum-labels.d.ts +0 -50
- package/console/dist/ui/utils/enum-labels.js +0 -171
- package/console/dist/ui/utils/format-date.d.ts +0 -11
- package/console/dist/ui/utils/format-date.js +0 -17
- package/console/dist/ui/utils/onboarding-state.d.ts +0 -25
- package/console/dist/ui/utils/onboarding-state.js +0 -77
- package/console/dist/ui/utils/reading-layout.d.ts +0 -20
- package/console/dist/ui/utils/reading-layout.js +0 -46
- package/console/dist/ui/utils/rule-binding-validators.d.ts +0 -13
- package/console/dist/ui/utils/rule-binding-validators.js +0 -188
- package/console/dist/ui/utils/runtime-mode.d.ts +0 -11
- package/console/dist/ui/utils/runtime-mode.js +0 -11
- package/console/dist/ui/utils/token-storage.d.ts +0 -22
- package/console/dist/ui/utils/token-storage.js +0 -47
- package/console/dist/ui/utils/validators.d.ts +0 -1178
- package/console/dist/ui/utils/validators.js +0 -3297
- package/release-manager/dist/bootstrap-entry.d.ts +0 -2
- package/release-manager/dist/bootstrap-entry.d.ts.map +0 -1
- package/release-manager/dist/bootstrap-entry.js.map +0 -1
- package/release-manager/dist/i18n.d.ts +0 -6
- package/release-manager/dist/i18n.d.ts.map +0 -1
- package/release-manager/dist/i18n.js.map +0 -1
- package/release-manager/dist/index.d.ts +0 -7
- package/release-manager/dist/index.d.ts.map +0 -1
- package/release-manager/dist/index.js +0 -656
- package/release-manager/dist/index.js.map +0 -1
- package/release-manager/dist/installer.d.ts +0 -629
- package/release-manager/dist/installer.d.ts.map +0 -1
- package/release-manager/dist/installer.js.map +0 -1
- package/release-manager/dist/installers/codex-host-installer.d.ts +0 -39
- package/release-manager/dist/installers/codex-host-installer.d.ts.map +0 -1
- package/release-manager/dist/installers/codex-host-installer.js.map +0 -1
- package/release-manager/dist/installers/index.d.ts +0 -51
- package/release-manager/dist/installers/index.d.ts.map +0 -1
- package/release-manager/dist/installers/index.js.map +0 -1
- package/release-manager/dist/installers/openclaw-host-installer.d.ts +0 -14
- package/release-manager/dist/installers/openclaw-host-installer.d.ts.map +0 -1
- package/release-manager/dist/installers/openclaw-host-installer.js.map +0 -1
- package/release-manager/dist/installers/workbuddy-host-installer.d.ts +0 -335
- package/release-manager/dist/installers/workbuddy-host-installer.d.ts.map +0 -1
- package/release-manager/dist/installers/workbuddy-host-installer.js.map +0 -1
- package/release-manager/dist/mvp-config.d.ts +0 -233
- package/release-manager/dist/mvp-config.d.ts.map +0 -1
- package/release-manager/dist/mvp-config.js.map +0 -1
- package/release-manager/dist/prompts.d.ts +0 -43
- package/release-manager/dist/prompts.d.ts.map +0 -1
- package/release-manager/dist/prompts.js +0 -268
- package/release-manager/dist/prompts.js.map +0 -1
- package/release-manager/dist/skill-language.d.ts +0 -32
- package/release-manager/dist/skill-language.d.ts.map +0 -1
- package/release-manager/dist/skill-language.js.map +0 -1
- package/release-manager/dist/uninstaller.d.ts +0 -68
- package/release-manager/dist/uninstaller.d.ts.map +0 -1
- package/release-manager/dist/uninstaller.js +0 -746
- package/release-manager/dist/uninstaller.js.map +0 -1
- package/release-manager/dist/update/apply-payload.d.ts +0 -143
- package/release-manager/dist/update/apply-payload.d.ts.map +0 -1
- package/release-manager/dist/update/apply-payload.js.map +0 -1
- package/release-manager/dist/update/atomic-file.d.ts +0 -35
- package/release-manager/dist/update/atomic-file.d.ts.map +0 -1
- package/release-manager/dist/update/atomic-file.js.map +0 -1
- package/release-manager/dist/update/bootstrap-executor.d.ts +0 -21
- package/release-manager/dist/update/bootstrap-executor.d.ts.map +0 -1
- package/release-manager/dist/update/bootstrap-executor.js.map +0 -1
- package/release-manager/dist/update/bootstrap-protocol.d.ts +0 -56
- package/release-manager/dist/update/bootstrap-protocol.d.ts.map +0 -1
- package/release-manager/dist/update/bootstrap-protocol.js.map +0 -1
- package/release-manager/dist/update/channel-metadata.d.ts +0 -28
- package/release-manager/dist/update/channel-metadata.d.ts.map +0 -1
- package/release-manager/dist/update/channel-metadata.js.map +0 -1
- package/release-manager/dist/update/channel-promotion.d.ts +0 -39
- package/release-manager/dist/update/channel-promotion.d.ts.map +0 -1
- package/release-manager/dist/update/channel-promotion.js +0 -55
- package/release-manager/dist/update/channel-promotion.js.map +0 -1
- package/release-manager/dist/update/console-surface.d.ts +0 -19
- package/release-manager/dist/update/console-surface.d.ts.map +0 -1
- package/release-manager/dist/update/console-surface.js.map +0 -1
- package/release-manager/dist/update/data-compatibility.d.ts +0 -35
- package/release-manager/dist/update/data-compatibility.d.ts.map +0 -1
- package/release-manager/dist/update/data-compatibility.js +0 -45
- package/release-manager/dist/update/data-compatibility.js.map +0 -1
- package/release-manager/dist/update/install-layout.d.ts +0 -105
- package/release-manager/dist/update/install-layout.d.ts.map +0 -1
- package/release-manager/dist/update/install-layout.js.map +0 -1
- package/release-manager/dist/update/product-identity.d.ts +0 -70
- package/release-manager/dist/update/product-identity.d.ts.map +0 -1
- package/release-manager/dist/update/product-identity.js.map +0 -1
- package/release-manager/dist/update/release-asset-manifest.d.ts +0 -31
- package/release-manager/dist/update/release-asset-manifest.d.ts.map +0 -1
- package/release-manager/dist/update/release-asset-manifest.js.map +0 -1
- package/release-manager/dist/update/release-identity.d.ts +0 -33
- package/release-manager/dist/update/release-identity.d.ts.map +0 -1
- package/release-manager/dist/update/release-identity.js.map +0 -1
- package/release-manager/dist/update/release-manager-authority.d.ts +0 -39
- package/release-manager/dist/update/release-manager-authority.d.ts.map +0 -1
- package/release-manager/dist/update/release-manager-authority.js.map +0 -1
- package/release-manager/dist/update/release-manager.d.ts +0 -156
- package/release-manager/dist/update/release-manager.d.ts.map +0 -1
- package/release-manager/dist/update/release-manager.js.map +0 -1
- package/release-manager/dist/update/release-metadata-publisher.d.ts +0 -199
- package/release-manager/dist/update/release-metadata-publisher.d.ts.map +0 -1
- package/release-manager/dist/update/release-metadata-publisher.js +0 -478
- package/release-manager/dist/update/release-metadata-publisher.js.map +0 -1
- package/release-manager/dist/update/release-metadata-source.d.ts +0 -85
- package/release-manager/dist/update/release-metadata-source.d.ts.map +0 -1
- package/release-manager/dist/update/release-metadata-source.js.map +0 -1
- package/release-manager/dist/update/release-metadata.d.ts +0 -60
- package/release-manager/dist/update/release-metadata.d.ts.map +0 -1
- package/release-manager/dist/update/release-metadata.js.map +0 -1
- package/release-manager/dist/update/release-policy.d.ts +0 -51
- package/release-manager/dist/update/release-policy.d.ts.map +0 -1
- package/release-manager/dist/update/release-policy.js.map +0 -1
- package/release-manager/dist/update/rollback-policy.d.ts +0 -56
- package/release-manager/dist/update/rollback-policy.d.ts.map +0 -1
- package/release-manager/dist/update/rollback-policy.js +0 -61
- package/release-manager/dist/update/rollback-policy.js.map +0 -1
- package/release-manager/dist/update/transaction-journal.d.ts +0 -212
- package/release-manager/dist/update/transaction-journal.d.ts.map +0 -1
- package/release-manager/dist/update/transaction-journal.js.map +0 -1
- package/release-manager/dist/update/trust-metadata.d.ts +0 -55
- package/release-manager/dist/update/trust-metadata.d.ts.map +0 -1
- package/release-manager/dist/update/trust-metadata.js.map +0 -1
- package/release-manager/dist/update/trust-root-provisioning.d.ts +0 -99
- package/release-manager/dist/update/trust-root-provisioning.d.ts.map +0 -1
- package/release-manager/dist/update/trust-root-provisioning.js.map +0 -1
- package/release-manager/dist/update/update-history.d.ts +0 -46
- package/release-manager/dist/update/update-history.d.ts.map +0 -1
- package/release-manager/dist/update/update-history.js +0 -123
- package/release-manager/dist/update/update-history.js.map +0 -1
- package/release-manager/dist/utils/config-file-io.d.ts +0 -34
- package/release-manager/dist/utils/config-file-io.d.ts.map +0 -1
- package/release-manager/dist/utils/config-file-io.js.map +0 -1
- package/release-manager/dist/utils/env.d.ts +0 -94
- package/release-manager/dist/utils/env.d.ts.map +0 -1
- package/release-manager/dist/utils/env.js.map +0 -1
- package/release-manager/dist/utils/logger.d.ts +0 -15
- package/release-manager/dist/utils/logger.d.ts.map +0 -1
- package/release-manager/dist/utils/logger.js.map +0 -1
- package/release-manager/dist/utils/workspace-divergence.d.ts +0 -36
- package/release-manager/dist/utils/workspace-divergence.d.ts.map +0 -1
- package/release-manager/dist/utils/workspace-divergence.js.map +0 -1
|
@@ -1,509 +0,0 @@
|
|
|
1
|
-
import { Fragment as _Fragment, 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 { toast } from "sonner";
|
|
5
|
-
import { PageShell } from "../../components/layout/page-shell.js";
|
|
6
|
-
import { PageLoading } from "../../components/layout/page-loading.js";
|
|
7
|
-
import { SectionTitle } from "../../components/layout/section-title.js";
|
|
8
|
-
import { fetchConfigSummary, fetchConfigCatalog, updateAgentBinding, updateDefaultRuntime, } from "../../api.js";
|
|
9
|
-
import { computeOverallReadiness, groupAgentsByReadiness, groupAgentsByDependency, isKnownAgentName, redactDiagnosticsForCopy, } from "../../utils/control-center-helpers.js";
|
|
10
|
-
import { enumLabel } from "../../utils/enum-labels.js";
|
|
11
|
-
import { WorkflowDiagram } from "./WorkflowDiagram.js";
|
|
12
|
-
import { AgentGroup } from "./AgentGroup.js";
|
|
13
|
-
import { RuntimeProfileManager } from "./RuntimeProfileManager.js";
|
|
14
|
-
import { DesignGatePanel } from "./DesignGatePanel.js";
|
|
15
|
-
import { AGENT_GROUPS, AGENT_METADATA, } from "../../utils/agent-metadata.js";
|
|
16
|
-
// ── Runtime validators (H section / ERR-001/005/009/013) ─────────────────────
|
|
17
|
-
function validateSource(raw) {
|
|
18
|
-
if (typeof raw !== "string")
|
|
19
|
-
return null;
|
|
20
|
-
switch (raw) {
|
|
21
|
-
case "defaults": return "defaults";
|
|
22
|
-
case "user_config": return "user_config";
|
|
23
|
-
default: return null;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
/** Type guard: is this a non-null object with own properties (not inherited)? */
|
|
27
|
-
function isRecord(value) {
|
|
28
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
29
|
-
}
|
|
30
|
-
// Overall readiness → the plain-language sentence shown under the internal-agents heading.
|
|
31
|
-
const CONFIG_READINESS_KEY = {
|
|
32
|
-
ready: "pages.controlCenter.configReady",
|
|
33
|
-
needs_setup: "pages.controlCenter.configNeedsSetup",
|
|
34
|
-
not_ready: "pages.controlCenter.configNotReady",
|
|
35
|
-
unknown: "pages.controlCenter.configUnknown",
|
|
36
|
-
disabled: "pages.controlCenter.configDisabled",
|
|
37
|
-
};
|
|
38
|
-
function validateReadinessStatus(raw) {
|
|
39
|
-
if (typeof raw !== "string")
|
|
40
|
-
return null;
|
|
41
|
-
switch (raw) {
|
|
42
|
-
case "ready": return "ready";
|
|
43
|
-
case "not_ready": return "not_ready";
|
|
44
|
-
case "needs_setup": return "needs_setup";
|
|
45
|
-
case "disabled": return "disabled";
|
|
46
|
-
case "unknown": return "unknown";
|
|
47
|
-
default: return null;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
function validateRedactedFeatureSummary(raw) {
|
|
51
|
-
if (!isRecord(raw))
|
|
52
|
-
return null;
|
|
53
|
-
if (!Object.hasOwn(raw, "id") ||
|
|
54
|
-
!Object.hasOwn(raw, "category") ||
|
|
55
|
-
!Object.hasOwn(raw, "enabled")) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
const id = raw.id;
|
|
59
|
-
const category = raw.category;
|
|
60
|
-
const enabled = raw.enabled;
|
|
61
|
-
if (typeof id !== "string" ||
|
|
62
|
-
id.length === 0 ||
|
|
63
|
-
typeof category !== "string" ||
|
|
64
|
-
typeof enabled !== "boolean") {
|
|
65
|
-
return null;
|
|
66
|
-
}
|
|
67
|
-
return { id, category, enabled };
|
|
68
|
-
}
|
|
69
|
-
function validateRedactedRuntimeProfileSummary(raw) {
|
|
70
|
-
if (!isRecord(raw))
|
|
71
|
-
return null;
|
|
72
|
-
if (!Object.hasOwn(raw, "id") ||
|
|
73
|
-
!Object.hasOwn(raw, "type") ||
|
|
74
|
-
!Object.hasOwn(raw, "label") ||
|
|
75
|
-
!Object.hasOwn(raw, "readiness")) {
|
|
76
|
-
return null;
|
|
77
|
-
}
|
|
78
|
-
const id = raw.id;
|
|
79
|
-
const type = raw.type;
|
|
80
|
-
const label = raw.label;
|
|
81
|
-
const readiness = validateReadinessStatus(raw.readiness);
|
|
82
|
-
if (typeof id !== "string" ||
|
|
83
|
-
id.length === 0 ||
|
|
84
|
-
typeof type !== "string" ||
|
|
85
|
-
typeof label !== "string" ||
|
|
86
|
-
readiness === null) {
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
const apiKeyEnv = Object.hasOwn(raw, "apiKeyEnv") && typeof raw.apiKeyEnv === "string"
|
|
90
|
-
? raw.apiKeyEnv
|
|
91
|
-
: undefined;
|
|
92
|
-
// provider/model are optional (set by backend redactPdConfig for both
|
|
93
|
-
// pi-ai and openclaw profiles). Aligns with
|
|
94
|
-
// the canonical validator in validators.ts (EP-01: validate fields that
|
|
95
|
-
// actually exist in the target type).
|
|
96
|
-
const provider = Object.hasOwn(raw, "provider") && typeof raw.provider === "string"
|
|
97
|
-
? raw.provider
|
|
98
|
-
: undefined;
|
|
99
|
-
const model = Object.hasOwn(raw, "model") && typeof raw.model === "string"
|
|
100
|
-
? raw.model
|
|
101
|
-
: undefined;
|
|
102
|
-
return { id, type, label, apiKeyEnv, provider, model, readiness };
|
|
103
|
-
}
|
|
104
|
-
function validateRedactedAgentSummary(raw) {
|
|
105
|
-
if (!isRecord(raw))
|
|
106
|
-
return null;
|
|
107
|
-
if (!Object.hasOwn(raw, "name") ||
|
|
108
|
-
!Object.hasOwn(raw, "enabled") ||
|
|
109
|
-
!Object.hasOwn(raw, "runtimeProfileId") ||
|
|
110
|
-
!Object.hasOwn(raw, "runtimeProfileLabel") ||
|
|
111
|
-
!Object.hasOwn(raw, "readiness")) {
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
const name = raw.name;
|
|
115
|
-
const enabled = raw.enabled;
|
|
116
|
-
const runtimeProfileId = raw.runtimeProfileId;
|
|
117
|
-
const runtimeProfileLabel = raw.runtimeProfileLabel;
|
|
118
|
-
const readiness = validateReadinessStatus(raw.readiness);
|
|
119
|
-
if (typeof name !== "string" ||
|
|
120
|
-
name.length === 0 ||
|
|
121
|
-
typeof enabled !== "boolean" ||
|
|
122
|
-
typeof runtimeProfileId !== "string" ||
|
|
123
|
-
typeof runtimeProfileLabel !== "string" ||
|
|
124
|
-
readiness === null) {
|
|
125
|
-
return null;
|
|
126
|
-
}
|
|
127
|
-
return { name, enabled, runtimeProfileId, runtimeProfileLabel, readiness };
|
|
128
|
-
}
|
|
129
|
-
function validateConfigError(raw) {
|
|
130
|
-
if (!isRecord(raw))
|
|
131
|
-
return null;
|
|
132
|
-
if (!Object.hasOwn(raw, "path") ||
|
|
133
|
-
!Object.hasOwn(raw, "reason") ||
|
|
134
|
-
!Object.hasOwn(raw, "nextAction")) {
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
const path = raw.path;
|
|
138
|
-
const reason = raw.reason;
|
|
139
|
-
const nextAction = raw.nextAction;
|
|
140
|
-
if (typeof path !== "string" ||
|
|
141
|
-
typeof reason !== "string" ||
|
|
142
|
-
typeof nextAction !== "string") {
|
|
143
|
-
return null;
|
|
144
|
-
}
|
|
145
|
-
return { path, reason, nextAction };
|
|
146
|
-
}
|
|
147
|
-
function validateConfigSummaryData(raw) {
|
|
148
|
-
if (!isRecord(raw))
|
|
149
|
-
return null;
|
|
150
|
-
// Required fields check (ERR-009: fail loud on missing required fields)
|
|
151
|
-
if (!Object.hasOwn(raw, "version") ||
|
|
152
|
-
!Object.hasOwn(raw, "source") ||
|
|
153
|
-
!Object.hasOwn(raw, "features") ||
|
|
154
|
-
!Object.hasOwn(raw, "runtimeProfiles") ||
|
|
155
|
-
!Object.hasOwn(raw, "defaultRuntime") ||
|
|
156
|
-
!Object.hasOwn(raw, "agents") ||
|
|
157
|
-
!Object.hasOwn(raw, "ui") ||
|
|
158
|
-
!Object.hasOwn(raw, "warnings")) {
|
|
159
|
-
return null;
|
|
160
|
-
}
|
|
161
|
-
const version = raw.version;
|
|
162
|
-
const source = raw.source;
|
|
163
|
-
const features = raw.features;
|
|
164
|
-
const runtimeProfiles = raw.runtimeProfiles;
|
|
165
|
-
const defaultRuntime = raw.defaultRuntime;
|
|
166
|
-
const agents = raw.agents;
|
|
167
|
-
const ui = raw.ui;
|
|
168
|
-
const warnings = raw.warnings;
|
|
169
|
-
if (typeof version !== "number" ||
|
|
170
|
-
typeof source !== "string" ||
|
|
171
|
-
validateSource(source) === null ||
|
|
172
|
-
!Array.isArray(features) ||
|
|
173
|
-
!Array.isArray(runtimeProfiles) ||
|
|
174
|
-
typeof defaultRuntime !== "string" ||
|
|
175
|
-
!Array.isArray(agents) ||
|
|
176
|
-
!isRecord(ui) ||
|
|
177
|
-
!Array.isArray(warnings)) {
|
|
178
|
-
return null;
|
|
179
|
-
}
|
|
180
|
-
// Validate ui.diagnostics (ERR-009)
|
|
181
|
-
if (!Object.hasOwn(ui, "diagnostics") ||
|
|
182
|
-
!isRecord(ui.diagnostics)) {
|
|
183
|
-
return null;
|
|
184
|
-
}
|
|
185
|
-
const uiDiag = ui.diagnostics;
|
|
186
|
-
if (!Object.hasOwn(uiDiag, "mode") || typeof uiDiag.mode !== "string") {
|
|
187
|
-
return null;
|
|
188
|
-
}
|
|
189
|
-
const uiDiagMode = uiDiag.mode;
|
|
190
|
-
// Validate features array elements (ERR-005/ERR-007)
|
|
191
|
-
const validatedFeatures = [];
|
|
192
|
-
for (const f of features) {
|
|
193
|
-
const validated = validateRedactedFeatureSummary(f);
|
|
194
|
-
if (validated === null)
|
|
195
|
-
return null;
|
|
196
|
-
validatedFeatures.push(validated);
|
|
197
|
-
}
|
|
198
|
-
// Validate runtime profiles array elements
|
|
199
|
-
const validatedProfiles = [];
|
|
200
|
-
for (const p of runtimeProfiles) {
|
|
201
|
-
const validated = validateRedactedRuntimeProfileSummary(p);
|
|
202
|
-
if (validated === null)
|
|
203
|
-
return null;
|
|
204
|
-
validatedProfiles.push(validated);
|
|
205
|
-
}
|
|
206
|
-
// Validate agents array elements
|
|
207
|
-
const validatedAgents = [];
|
|
208
|
-
for (const a of agents) {
|
|
209
|
-
const validated = validateRedactedAgentSummary(a);
|
|
210
|
-
if (validated === null)
|
|
211
|
-
return null;
|
|
212
|
-
validatedAgents.push(validated);
|
|
213
|
-
}
|
|
214
|
-
// Validate warnings array elements (ERR-005)
|
|
215
|
-
const validatedWarnings = [];
|
|
216
|
-
for (const w of warnings) {
|
|
217
|
-
if (typeof w !== "string")
|
|
218
|
-
return null;
|
|
219
|
-
validatedWarnings.push(w);
|
|
220
|
-
}
|
|
221
|
-
// Validate optional errors array
|
|
222
|
-
let validatedErrors;
|
|
223
|
-
if (Object.hasOwn(raw, "errors") && raw.errors !== undefined) {
|
|
224
|
-
if (!Array.isArray(raw.errors))
|
|
225
|
-
return null;
|
|
226
|
-
validatedErrors = [];
|
|
227
|
-
for (const e of raw.errors) {
|
|
228
|
-
const validated = validateConfigError(e);
|
|
229
|
-
if (validated === null)
|
|
230
|
-
return null;
|
|
231
|
-
validatedErrors.push(validated);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
const validatedSource = validateSource(source);
|
|
235
|
-
if (validatedSource === null)
|
|
236
|
-
return null;
|
|
237
|
-
return {
|
|
238
|
-
version,
|
|
239
|
-
source: validatedSource,
|
|
240
|
-
features: validatedFeatures,
|
|
241
|
-
runtimeProfiles: validatedProfiles,
|
|
242
|
-
defaultRuntime,
|
|
243
|
-
agents: validatedAgents,
|
|
244
|
-
ui: {
|
|
245
|
-
diagnostics: {
|
|
246
|
-
mode: uiDiagMode,
|
|
247
|
-
},
|
|
248
|
-
},
|
|
249
|
-
warnings: validatedWarnings,
|
|
250
|
-
errors: validatedErrors,
|
|
251
|
-
};
|
|
252
|
-
}
|
|
253
|
-
function validateConfigCatalogData(raw) {
|
|
254
|
-
if (!isRecord(raw))
|
|
255
|
-
return null;
|
|
256
|
-
if (!Object.hasOwn(raw, "profiles"))
|
|
257
|
-
return null;
|
|
258
|
-
const profiles = raw.profiles;
|
|
259
|
-
if (!Array.isArray(profiles))
|
|
260
|
-
return null;
|
|
261
|
-
const validatedProfiles = [];
|
|
262
|
-
for (const p of profiles) {
|
|
263
|
-
const validated = validateRedactedRuntimeProfileSummary(p);
|
|
264
|
-
if (validated === null)
|
|
265
|
-
return null;
|
|
266
|
-
validatedProfiles.push(validated);
|
|
267
|
-
}
|
|
268
|
-
// Validate optional errors array
|
|
269
|
-
let validatedErrors;
|
|
270
|
-
if (Object.hasOwn(raw, "errors") && raw.errors !== undefined) {
|
|
271
|
-
if (!Array.isArray(raw.errors))
|
|
272
|
-
return null;
|
|
273
|
-
validatedErrors = [];
|
|
274
|
-
for (const e of raw.errors) {
|
|
275
|
-
const validated = validateConfigError(e);
|
|
276
|
-
if (validated === null)
|
|
277
|
-
return null;
|
|
278
|
-
validatedErrors.push(validated);
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
return { profiles: validatedProfiles, errors: validatedErrors };
|
|
282
|
-
}
|
|
283
|
-
// ── Readiness tag styling ────────────────────────────────────────────────────
|
|
284
|
-
function readinessTagClasses(readiness) {
|
|
285
|
-
const base = "inline-flex items-center border border-line rounded-[2px] px-[7px] py-1 font-mono text-[11px] text-ink-3 bg-surface/80 uppercase";
|
|
286
|
-
switch (readiness) {
|
|
287
|
-
case "ready":
|
|
288
|
-
return base;
|
|
289
|
-
case "needs_setup":
|
|
290
|
-
return base.replace("border-line", "border-amber/35").replace("text-ink-3", "text-amber");
|
|
291
|
-
case "not_ready":
|
|
292
|
-
// SPEC-PD-UIUX-001 R5: bare `red` utilities have no matching theme token
|
|
293
|
-
// (silently unstyled) — use the registered danger token.
|
|
294
|
-
return base.replace("border-line", "border-danger/35").replace("text-ink-3", "text-danger");
|
|
295
|
-
default:
|
|
296
|
-
return base;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
// ── Sub-components ───────────────────────────────────────────────────────────
|
|
300
|
-
/**
|
|
301
|
-
* CompactStatusBar — 紧凑状态条(替代 OverallStatusCard)
|
|
302
|
-
*
|
|
303
|
-
* 取自原型 control-center.html 第 153-168 行。一行展示:
|
|
304
|
-
* 已启用 N/M · 未就绪 N 项 · 核心管道 状态 · [需配置] pill
|
|
305
|
-
*
|
|
306
|
-
* 核心管道状态 = core_trio + code_chain 中已启用代理的就绪情况:
|
|
307
|
-
* - paralyzed: core_trio 任一 disabled 或有 not_ready
|
|
308
|
-
* - degraded: 有 needs_setup
|
|
309
|
-
* - ok: 全 ready
|
|
310
|
-
*
|
|
311
|
-
* rc-2: 用 Object.hasOwn 守卫 agent.name 查 AGENT_METADATA(无 as 绕过)
|
|
312
|
-
*/
|
|
313
|
-
function CompactStatusBar({ readiness, agents, }) {
|
|
314
|
-
const { t } = useTranslation();
|
|
315
|
-
const enabledCount = agents.filter((a) => a.enabled).length;
|
|
316
|
-
const totalCount = agents.length;
|
|
317
|
-
const notReadyCount = agents.filter((a) => a.enabled && a.readiness !== "ready").length;
|
|
318
|
-
// 核心管道状态:core_trio + code_chain 中已启用代理
|
|
319
|
-
// rc-2: 用 isKnownAgentName 类型守卫缩窄,不用 as 绕过
|
|
320
|
-
const coreAgents = agents.filter((a) => {
|
|
321
|
-
if (!isKnownAgentName(a.name))
|
|
322
|
-
return false;
|
|
323
|
-
const meta = AGENT_METADATA[a.name];
|
|
324
|
-
return meta.group === "core_trio" || meta.group === "code_chain";
|
|
325
|
-
});
|
|
326
|
-
const enabledCoreAgents = coreAgents.filter((a) => a.enabled);
|
|
327
|
-
const coreTrioAgents = coreAgents.filter((a) => {
|
|
328
|
-
if (!isKnownAgentName(a.name))
|
|
329
|
-
return false;
|
|
330
|
-
const meta = AGENT_METADATA[a.name];
|
|
331
|
-
return meta.group === "core_trio";
|
|
332
|
-
});
|
|
333
|
-
const codeChainAgents = coreAgents.filter((a) => {
|
|
334
|
-
if (!isKnownAgentName(a.name))
|
|
335
|
-
return false;
|
|
336
|
-
const meta = AGENT_METADATA[a.name];
|
|
337
|
-
return meta.group === "code_chain";
|
|
338
|
-
});
|
|
339
|
-
const coreTrioAnyDisabled = coreTrioAgents.some((a) => !a.enabled);
|
|
340
|
-
const codeChainAnyDisabled = codeChainAgents.some((a) => !a.enabled);
|
|
341
|
-
const coreAnyNotReady = enabledCoreAgents.some((a) => a.readiness === "not_ready");
|
|
342
|
-
const coreAnyNeedsSetup = enabledCoreAgents.some((a) => a.readiness === "needs_setup");
|
|
343
|
-
// 状态优先级(per AGENT_METADATA.impactZh):
|
|
344
|
-
// - paralyzed: core_trio 任一 disabled 或 enabled 但 not_ready
|
|
345
|
-
// (core_trio 是入口,关掉任何一个整个管道瘫痪)
|
|
346
|
-
// - degraded: code_chain 任一 disabled(降级运行,非瘫痪)
|
|
347
|
-
// 或 enabled 但 needs_setup
|
|
348
|
-
// - ok: 全 ready
|
|
349
|
-
//
|
|
350
|
-
// needsConfig 标记仅用于 readiness 异常(not_ready / needs_setup),
|
|
351
|
-
// 不用于主动 disabled — 主动 disable 是 owner 的有意决策,不是配置缺失。
|
|
352
|
-
let corePipelineKey;
|
|
353
|
-
const needsConfig = coreAnyNotReady || coreAnyNeedsSetup;
|
|
354
|
-
if (coreTrioAnyDisabled || coreAnyNotReady) {
|
|
355
|
-
corePipelineKey = "pages.controlCenter.status.corePipelineParalyzed";
|
|
356
|
-
}
|
|
357
|
-
else if (codeChainAnyDisabled || coreAnyNeedsSetup) {
|
|
358
|
-
corePipelineKey = "pages.controlCenter.status.corePipelineDegraded";
|
|
359
|
-
}
|
|
360
|
-
else {
|
|
361
|
-
corePipelineKey = "pages.controlCenter.status.corePipelineOk";
|
|
362
|
-
}
|
|
363
|
-
return (_jsxs("div", { className: "mt-5 px-[16px] py-[11px] bg-surface border border-line-2 rounded-[4px] flex items-center gap-[16px] text-[12.5px] text-ink-3 flex-wrap", children: [_jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.enabled") }), _jsxs("span", { className: "text-ink font-semibold", children: [_jsx("span", { className: "font-mono", children: enabledCount }), " /", " ", _jsx("span", { className: "font-mono", children: totalCount })] })] }), _jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.notReady") }), _jsx("span", { className: "text-ink font-semibold", children: _jsx("span", { className: "font-mono", children: notReadyCount }) })] }), _jsxs("div", { className: "flex items-center gap-[6px]", children: [_jsx("span", { className: "text-ink-4 font-mono text-[11px] uppercase tracking-[0.04em]", children: t("pages.controlCenter.status.corePipeline") }), _jsx("span", { className: "text-ink font-semibold", children: t(corePipelineKey) })] }), needsConfig && (_jsx("span", { className: "ml-auto px-[9px] py-[3px] rounded-[2px] text-[10.5px] font-mono tracking-[0.02em] font-medium border border-amber text-amber bg-amber/10", children: t("pages.controlCenter.status.needsConfig") }))] }));
|
|
364
|
-
}
|
|
365
|
-
function DefaultRuntimeSelector({ currentDefault, profiles, onDefaultChange, saving, }) {
|
|
366
|
-
const { t } = useTranslation();
|
|
367
|
-
return (_jsxs("div", { className: "bg-panel border border-line rounded-[6px] px-[18px] py-[14px]", children: [_jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed mb-3", children: t("pages.controlCenter.defaultRuntimeDescription") }), _jsx("select", { value: currentDefault, onChange: (e) => {
|
|
368
|
-
onDefaultChange(e.target.value);
|
|
369
|
-
}, disabled: saving, className: "bg-surface border border-line rounded-[3px] px-3 py-[6px] text-[12.5px] text-ink focus:outline-none focus:border-gov disabled:opacity-50 min-w-[200px]", "aria-label": t("pages.controlCenter.defaultRuntime"), children: profiles.map((p) => (_jsxs("option", { value: p.id, children: [p.label, " \u2014 ", enumLabel('readiness', p.readiness, t)] }, p.id))) }), saving && (_jsx("span", { className: "ml-3 text-ink-3 text-[12px]", children: t("pages.controlCenter.saving") }))] }));
|
|
370
|
-
}
|
|
371
|
-
function AdvancedDiagnostics({ config, }) {
|
|
372
|
-
const { t } = useTranslation();
|
|
373
|
-
const [copied, setCopied] = useState(false);
|
|
374
|
-
const diagnostics = {
|
|
375
|
-
version: config.version,
|
|
376
|
-
source: config.source,
|
|
377
|
-
features: config.features,
|
|
378
|
-
runtimeProfiles: config.runtimeProfiles,
|
|
379
|
-
defaultRuntime: config.defaultRuntime,
|
|
380
|
-
agents: config.agents,
|
|
381
|
-
ui: config.ui,
|
|
382
|
-
warnings: config.warnings,
|
|
383
|
-
errors: config.errors,
|
|
384
|
-
};
|
|
385
|
-
const handleCopy = useCallback(() => {
|
|
386
|
-
const text = redactDiagnosticsForCopy(diagnostics);
|
|
387
|
-
navigator.clipboard.writeText(text).then(() => {
|
|
388
|
-
setCopied(true);
|
|
389
|
-
toast.success(t("pages.controlCenter.copyDiagnostics"));
|
|
390
|
-
setTimeout(() => setCopied(false), 2000);
|
|
391
|
-
}, () => {
|
|
392
|
-
toast.error(t("pages.controlCenter.saveFailed"));
|
|
393
|
-
});
|
|
394
|
-
}, [diagnostics, t]);
|
|
395
|
-
const grouped = groupAgentsByReadiness(diagnostics);
|
|
396
|
-
return (_jsxs("details", { className: "group", children: [_jsx("summary", { className: "text-ink-3 text-[13px] cursor-pointer hover:text-ink-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: t("pages.controlCenter.advancedDiagnostics") }), _jsxs("div", { className: "mt-4 space-y-5", children: [_jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.features") }), _jsx("div", { className: "bg-surface/60 border border-line rounded-[6px] px-3 py-2", children: config.features.length === 0 ? (_jsx("span", { className: "text-ink-4 text-[13px]", children: "\u2014" })) : (_jsx("div", { className: "space-y-1", children: config.features.map((f) => (_jsxs("div", { className: "flex items-center gap-2 text-[13px]", children: [_jsx("span", { className: "text-ink-2", children: enumLabel('featureId', f.id, t) }), _jsx("span", { className: "text-ink-4", children: "\u00B7" }), _jsx("span", { className: "text-ink-3", children: enumLabel('featureCategory', f.category, t) }), _jsx("span", { className: "text-ink-4", children: "\u00B7" }), _jsx("span", { className: f.enabled ? "text-ink-2" : "text-ink-4 line-through", children: f.enabled
|
|
397
|
-
? t("pages.controlCenter.on")
|
|
398
|
-
: t("pages.controlCenter.off") })] }, f.id))) })) })] }), _jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.runtimeProfiles") }), _jsx("div", { className: "bg-surface/60 border border-line rounded-[6px] px-3 py-2", children: config.runtimeProfiles.length === 0 ? (_jsx("span", { className: "text-ink-4 text-[13px]", children: "\u2014" })) : (_jsx("div", { className: "space-y-1", children: config.runtimeProfiles.map((p) => (_jsxs("div", { className: "flex items-center gap-2 text-[13px]", children: [_jsx("span", { className: "text-ink-2", children: p.label }), _jsx("span", { className: "text-ink-4", children: "\u00B7" }), _jsx("span", { className: "text-ink-3", children: p.type }), _jsx("span", { className: readinessTagClasses(p.readiness), children: enumLabel('readiness', p.readiness, t) })] }, p.id))) })) })] }), config.warnings.length > 0 && (_jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.warnings") }), _jsx("div", { className: "bg-surface/60 border border-amber/20 border-l-2 border-l-amber rounded-[6px] px-3 py-2", children: _jsx("ul", { className: "space-y-1", children: config.warnings.map((w, i) => (_jsx("li", { className: "text-ink-2 text-[13px]", children: w }, i))) }) })] })), config.errors && config.errors.length > 0 && (_jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.configErrors") }), _jsx("div", { className: "bg-surface/60 border border-danger/20 border-l-2 border-l-danger rounded-[6px] px-3 py-2", children: _jsx("ul", { className: "space-y-2", children: config.errors.map((e, i) => (_jsxs("li", { className: "text-[13px]", children: [_jsx("span", { className: "text-ink font-medium", children: e.path }), _jsx("span", { className: "text-ink-4", children: " \u2014 " }), _jsx("span", { className: "text-ink-2", children: e.reason }), _jsxs("div", { className: "text-ink-3 text-[12px] mt-0.5", children: ["\u2192 ", e.nextAction] })] }, i))) }) })] })), _jsxs("div", { children: [_jsx("h3", { className: "font-mono text-[11px] uppercase tracking-[0.1em] text-ink-3 mb-2", children: t("pages.controlCenter.readinessLabel") }), _jsx("div", { className: "bg-surface/60 border border-line rounded-[6px] px-3 py-2 space-y-2", children: Object.keys(grouped).map((status) => {
|
|
399
|
-
const validatedStatus = validateReadinessStatus(status);
|
|
400
|
-
if (validatedStatus === null)
|
|
401
|
-
return null;
|
|
402
|
-
const agentsInGroup = grouped[validatedStatus];
|
|
403
|
-
if (agentsInGroup.length === 0)
|
|
404
|
-
return null;
|
|
405
|
-
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: readinessTagClasses(validatedStatus), children: enumLabel('readiness', validatedStatus, t) }), _jsx("span", { className: "text-ink-3 text-[13px]", children: agentsInGroup.map((a) => a.name).join(", ") })] }, validatedStatus));
|
|
406
|
-
}) })] }), _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("button", { type: "button", onClick: handleCopy, className: "border border-line bg-surface text-ink rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:border-line-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: copied ? "✓" : t("pages.controlCenter.copyDiagnostics") }), _jsx("span", { className: "text-ink-4 text-[12px]", children: t("pages.controlCenter.redactedNote") })] })] })] }));
|
|
407
|
-
}
|
|
408
|
-
export function ControlCenterPage() {
|
|
409
|
-
const { t, i18n } = useTranslation();
|
|
410
|
-
const [configData, setConfigData] = useState(null);
|
|
411
|
-
const [catalogData, setCatalogData] = useState(null);
|
|
412
|
-
const [loadingState, setLoadingState] = useState("loading");
|
|
413
|
-
const [errorMessage, setErrorMessage] = useState(null);
|
|
414
|
-
const [savingAgent, setSavingAgent] = useState(null);
|
|
415
|
-
const [savingDefault, setSavingDefault] = useState(false);
|
|
416
|
-
const loadData = useCallback(async () => {
|
|
417
|
-
setLoadingState("loading");
|
|
418
|
-
setErrorMessage(null);
|
|
419
|
-
const [summaryResult, catalogResult] = await Promise.all([
|
|
420
|
-
fetchConfigSummary(),
|
|
421
|
-
fetchConfigCatalog(),
|
|
422
|
-
]);
|
|
423
|
-
// Validate summary data (H section / ERR-001/005/009)
|
|
424
|
-
if (!summaryResult.success) {
|
|
425
|
-
setLoadingState("error");
|
|
426
|
-
setErrorMessage(summaryResult.error);
|
|
427
|
-
return;
|
|
428
|
-
}
|
|
429
|
-
const validatedSummary = validateConfigSummaryData(summaryResult.data);
|
|
430
|
-
if (validatedSummary === null) {
|
|
431
|
-
setLoadingState("error");
|
|
432
|
-
setErrorMessage("Config summary data has unexpected shape");
|
|
433
|
-
return;
|
|
434
|
-
}
|
|
435
|
-
setConfigData(validatedSummary);
|
|
436
|
-
// Validate catalog data (ERR-002: degradation with reason)
|
|
437
|
-
if (!catalogResult.success) {
|
|
438
|
-
// Non-fatal: catalog is only needed for profile dropdowns
|
|
439
|
-
setCatalogData(null);
|
|
440
|
-
}
|
|
441
|
-
else {
|
|
442
|
-
const validatedCatalog = validateConfigCatalogData(catalogResult.data);
|
|
443
|
-
setCatalogData(validatedCatalog);
|
|
444
|
-
}
|
|
445
|
-
setLoadingState("loaded");
|
|
446
|
-
}, []);
|
|
447
|
-
useEffect(() => {
|
|
448
|
-
loadData();
|
|
449
|
-
}, [loadData]);
|
|
450
|
-
const handleBindingChange = useCallback(async (agentName, runtimeProfile, enabled) => {
|
|
451
|
-
setSavingAgent(agentName);
|
|
452
|
-
const result = await updateAgentBinding(agentName, runtimeProfile, enabled);
|
|
453
|
-
setSavingAgent(null);
|
|
454
|
-
if (!result.success) {
|
|
455
|
-
toast.error(t("pages.controlCenter.saveFailed"));
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
// Refresh config data after successful update
|
|
459
|
-
await loadData();
|
|
460
|
-
}, [loadData, t]);
|
|
461
|
-
const handleDefaultRuntimeChange = useCallback(async (profileId) => {
|
|
462
|
-
setSavingDefault(true);
|
|
463
|
-
const result = await updateDefaultRuntime(profileId);
|
|
464
|
-
setSavingDefault(false);
|
|
465
|
-
if (!result.success) {
|
|
466
|
-
toast.error(t("pages.controlCenter.saveFailed"));
|
|
467
|
-
return;
|
|
468
|
-
}
|
|
469
|
-
// Refresh config data after successful update
|
|
470
|
-
await loadData();
|
|
471
|
-
}, [loadData, t]);
|
|
472
|
-
// ── Loading state ────────────────────────────────────────────────────────
|
|
473
|
-
if (loadingState === "loading") {
|
|
474
|
-
return (_jsx(PageShell, { children: _jsx(PageLoading, { cardCount: 3, label: t("common.loading") }) }));
|
|
475
|
-
}
|
|
476
|
-
// ── Error state (ERR-002: degradation with reason) ───────────────────────
|
|
477
|
-
if (loadingState === "error") {
|
|
478
|
-
return (_jsxs(PageShell, { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsxs("div", { className: "mt-6 p-4 bg-panel border border-line rounded-[6px] text-ink-2 text-sm", children: [_jsx("p", { children: t("pages.controlCenter.loadError") }), errorMessage && (_jsx("p", { className: "mt-2 text-ink-4 text-[13px] font-mono", children: errorMessage }))] })] }));
|
|
479
|
-
}
|
|
480
|
-
// ── Loaded state ─────────────────────────────────────────────────────────
|
|
481
|
-
if (configData === null) {
|
|
482
|
-
return (_jsxs(PageShell, { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsx("div", { className: "mt-6 p-4 bg-panel border border-line rounded-[6px] text-ink-2 text-sm", children: _jsx("p", { children: t("pages.controlCenter.loadError") }) })] }));
|
|
483
|
-
}
|
|
484
|
-
const diagnostics = {
|
|
485
|
-
version: configData.version,
|
|
486
|
-
source: configData.source,
|
|
487
|
-
features: configData.features,
|
|
488
|
-
runtimeProfiles: configData.runtimeProfiles,
|
|
489
|
-
defaultRuntime: configData.defaultRuntime,
|
|
490
|
-
agents: configData.agents,
|
|
491
|
-
ui: configData.ui,
|
|
492
|
-
warnings: configData.warnings,
|
|
493
|
-
errors: configData.errors,
|
|
494
|
-
};
|
|
495
|
-
const overallReadiness = computeOverallReadiness(diagnostics);
|
|
496
|
-
const availableProfiles = catalogData?.profiles ?? configData.runtimeProfiles;
|
|
497
|
-
return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out]", children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.controlCenter.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.controlCenter.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.controlCenter.subtitle") }), _jsx(WorkflowDiagram, {}), _jsx(CompactStatusBar, { readiness: overallReadiness, agents: configData.agents }), _jsx(DesignGatePanel, {}), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-agents", children: [_jsx(SectionTitle, { id: "section-agents", children: t("pages.controlCenter.internalAgents") }), _jsx("p", { className: "text-ink-3 text-[13px] leading-relaxed mb-3", children: t("pages.controlCenter.internalAgentsDescription") }), _jsx("p", { className: overallReadiness === "ready"
|
|
498
|
-
? "text-ink-4 text-[13px] leading-relaxed mb-3"
|
|
499
|
-
: "text-amber text-[13px] leading-relaxed mb-3", children: t(CONFIG_READINESS_KEY[overallReadiness]) }), (() => {
|
|
500
|
-
const { groups, unknown } = groupAgentsByDependency(configData.agents);
|
|
501
|
-
const locale = i18n.language.startsWith("en")
|
|
502
|
-
? "en"
|
|
503
|
-
: "zh-CN";
|
|
504
|
-
return (_jsxs(_Fragment, { children: [AGENT_GROUPS.map((groupMeta) => (_jsx(AgentGroup, { groupMeta: groupMeta, agents: (groups[groupMeta.id] ?? []).filter((a) => a.name !== AGENT_METADATA.signalCollector.name), profiles: availableProfiles, onBindingChange: handleBindingChange, saving: savingAgent, locale: locale }, groupMeta.id))), unknown.length > 0 && (_jsx("div", { className: "mt-3 px-3 py-2 border border-amber/30 border-l-2 border-l-amber rounded-[4px] bg-amber/10 text-[12.5px] text-ink-3", children: t("pages.controlCenter.unknownAgentsWarning", {
|
|
505
|
-
count: unknown.length,
|
|
506
|
-
names: unknown.map((a) => a.name).join(", "),
|
|
507
|
-
}) }))] }));
|
|
508
|
-
})()] }), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-default-runtime", children: [_jsx(SectionTitle, { id: "section-default-runtime", children: t("pages.controlCenter.defaultRuntime") }), _jsx(DefaultRuntimeSelector, { currentDefault: configData.defaultRuntime, profiles: availableProfiles, onDefaultChange: handleDefaultRuntimeChange, saving: savingDefault })] }), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-runtime-profiles", children: [_jsx(SectionTitle, { id: "section-runtime-profiles", children: t("pages.controlCenter.profiles.sectionTitle") }), _jsx(RuntimeProfileManager, { profiles: availableProfiles, defaultRuntimeId: configData.defaultRuntime, onMutated: loadData })] }), _jsx("section", { className: "mt-8", "aria-labelledby": "section-diagnostics", children: _jsx(AdvancedDiagnostics, { config: configData }) }), _jsx("p", { className: "mt-10 pt-[18px] border-t border-line-2 text-ink-4 text-[12px] leading-[1.6] max-w-[60ch] font-mono", children: t("pages.controlCenter.footerNote") })] }) }));
|
|
509
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function DesignGatePanel(): import("react").JSX.Element;
|