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,23 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Blocker localization for the Owner decision view (PRI-875).
|
|
3
|
-
*
|
|
4
|
-
* Dependency-free so UI tests can exercise the real behavior directly.
|
|
5
|
-
*/
|
|
6
|
-
export type TranslateFn = (key: string, opts?: Record<string, unknown>) => string;
|
|
7
|
-
export declare function localizeBlocker(code: string, ownerText: string, t: TranslateFn): string;
|
|
8
|
-
export declare function isValidAggregatedCount(count: unknown): count is number;
|
|
9
|
-
/**
|
|
10
|
-
* Localize a blocker reason for rendering.
|
|
11
|
-
*
|
|
12
|
-
* The aggregated historical-processing notice's locale template carries an
|
|
13
|
-
* `{{n}}` placeholder (PRI-875), so it is only safe to interpolate with a
|
|
14
|
-
* validated integer count. A missing count (older core, version skew) or a
|
|
15
|
-
* malformed one renders the core-provided ownerText, which is always a
|
|
16
|
-
* complete sentence — never a raw placeholder. Other codes have no
|
|
17
|
-
* placeholders and take the normal template path.
|
|
18
|
-
*/
|
|
19
|
-
export declare function localizeAggregatedBlocker(reason: {
|
|
20
|
-
code: string;
|
|
21
|
-
ownerText: string;
|
|
22
|
-
count?: unknown;
|
|
23
|
-
}, t: TranslateFn): string;
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Blocker localization for the Owner decision view (PRI-875).
|
|
3
|
-
*
|
|
4
|
-
* Dependency-free so UI tests can exercise the real behavior directly.
|
|
5
|
-
*/
|
|
6
|
-
function resolveBlockerTemplate(code, t, values) {
|
|
7
|
-
const safeKey = code.replace(/[^a-zA-Z0-9_.]/g, '_');
|
|
8
|
-
return t(`principles.detail.ownerDecision.blocker.${safeKey}`, { defaultValue: '', ...values });
|
|
9
|
-
}
|
|
10
|
-
export function localizeBlocker(code, ownerText, t) {
|
|
11
|
-
const localized = resolveBlockerTemplate(code, t);
|
|
12
|
-
return localized === '' ? ownerText : localized;
|
|
13
|
-
}
|
|
14
|
-
export function isValidAggregatedCount(count) {
|
|
15
|
-
return typeof count === 'number' && Number.isInteger(count) && count >= 1;
|
|
16
|
-
}
|
|
17
|
-
const AGGREGATED_NOTICE_CODE = 'historical_processing_issue';
|
|
18
|
-
/**
|
|
19
|
-
* Localize a blocker reason for rendering.
|
|
20
|
-
*
|
|
21
|
-
* The aggregated historical-processing notice's locale template carries an
|
|
22
|
-
* `{{n}}` placeholder (PRI-875), so it is only safe to interpolate with a
|
|
23
|
-
* validated integer count. A missing count (older core, version skew) or a
|
|
24
|
-
* malformed one renders the core-provided ownerText, which is always a
|
|
25
|
-
* complete sentence — never a raw placeholder. Other codes have no
|
|
26
|
-
* placeholders and take the normal template path.
|
|
27
|
-
*/
|
|
28
|
-
export function localizeAggregatedBlocker(reason, t) {
|
|
29
|
-
if (reason.code !== AGGREGATED_NOTICE_CODE) {
|
|
30
|
-
return localizeBlocker(reason.code, reason.ownerText, t);
|
|
31
|
-
}
|
|
32
|
-
if (!isValidAggregatedCount(reason.count))
|
|
33
|
-
return reason.ownerText;
|
|
34
|
-
const localized = resolveBlockerTemplate(reason.code, t, { n: reason.count });
|
|
35
|
-
return localized === '' ? reason.ownerText : localized;
|
|
36
|
-
}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Control Center Helpers — PRI-303
|
|
3
|
-
*
|
|
4
|
-
* Pure logic for the Control Center UI:
|
|
5
|
-
* - Readiness badge/label mapping
|
|
6
|
-
* - Overall readiness computation
|
|
7
|
-
* - Agent grouping by readiness
|
|
8
|
-
* - Redacted diagnostics for clipboard copy
|
|
9
|
-
*
|
|
10
|
-
* ERR entries:
|
|
11
|
-
* - ERR-001/ERR-005: No `as` bypasses on untrusted data
|
|
12
|
-
* - ERR-014/ERR-016/ERR-017: Safe serialization for diagnostics copy
|
|
13
|
-
* - ERR-045: ANY-segment redaction for sensitive keys
|
|
14
|
-
*/
|
|
15
|
-
import type { ReadinessStatus } from '../api.js';
|
|
16
|
-
import { AGENT_METADATA, type AgentGroup } from './agent-metadata.js';
|
|
17
|
-
export interface RedactedRuntimeProfileSummary {
|
|
18
|
-
id: string;
|
|
19
|
-
type: string;
|
|
20
|
-
label: string;
|
|
21
|
-
apiKeyEnv?: string;
|
|
22
|
-
provider?: string;
|
|
23
|
-
model?: string;
|
|
24
|
-
readiness: ReadinessStatus;
|
|
25
|
-
}
|
|
26
|
-
export interface RedactedAgentSummary {
|
|
27
|
-
name: string;
|
|
28
|
-
enabled: boolean;
|
|
29
|
-
runtimeProfileId: string;
|
|
30
|
-
runtimeProfileLabel: string;
|
|
31
|
-
readiness: ReadinessStatus;
|
|
32
|
-
}
|
|
33
|
-
export interface RedactedFeatureSummary {
|
|
34
|
-
id: string;
|
|
35
|
-
category: string;
|
|
36
|
-
enabled: boolean;
|
|
37
|
-
}
|
|
38
|
-
export interface ControlCenterDiagnostics {
|
|
39
|
-
version: number;
|
|
40
|
-
source: 'defaults' | 'user_config';
|
|
41
|
-
features: RedactedFeatureSummary[];
|
|
42
|
-
runtimeProfiles: RedactedRuntimeProfileSummary[];
|
|
43
|
-
defaultRuntime: string;
|
|
44
|
-
agents: RedactedAgentSummary[];
|
|
45
|
-
ui: {
|
|
46
|
-
diagnostics: {
|
|
47
|
-
mode: string;
|
|
48
|
-
};
|
|
49
|
-
};
|
|
50
|
-
warnings: string[];
|
|
51
|
-
errors?: {
|
|
52
|
-
path: string;
|
|
53
|
-
reason: string;
|
|
54
|
-
nextAction: string;
|
|
55
|
-
}[];
|
|
56
|
-
}
|
|
57
|
-
export declare function getReadinessBadgeVariant(readiness: ReadinessStatus): 'default' | 'secondary' | 'destructive' | 'outline';
|
|
58
|
-
export declare function getReadinessLabel(readiness: ReadinessStatus): string;
|
|
59
|
-
export declare function computeOverallReadiness(diag: ControlCenterDiagnostics): ReadinessStatus;
|
|
60
|
-
export declare function groupAgentsByReadiness(diag: ControlCenterDiagnostics): Record<ReadinessStatus, RedactedAgentSummary[]>;
|
|
61
|
-
export type AgentDependencyGroups = Record<AgentGroup, RedactedAgentSummary[]>;
|
|
62
|
-
/**
|
|
63
|
-
* Type guard: is `name` a known internal agent with metadata?
|
|
64
|
-
* Replaces `as keyof typeof AGENT_METADATA` (rc-2: no `as` bypass).
|
|
65
|
-
*/
|
|
66
|
-
export declare function isKnownAgentName(name: string): name is keyof typeof AGENT_METADATA;
|
|
67
|
-
/**
|
|
68
|
-
* Group agents by dependency cluster (core_trio / code_chain / quality_polish / sidechain).
|
|
69
|
-
* Agents not found in AGENT_METADATA go to the `unknown` bucket for fail-loud
|
|
70
|
-
* handling by the caller (rc-5: Object.hasOwn lookup; rc-9: no silent fallback).
|
|
71
|
-
*
|
|
72
|
-
* Group insertion order matches GROUP_ORDER (core_trio → code_chain → quality_polish → sidechain),
|
|
73
|
-
* so Object.keys(groups) returns the render order.
|
|
74
|
-
*/
|
|
75
|
-
export declare function groupAgentsByDependency(agents: RedactedAgentSummary[]): {
|
|
76
|
-
groups: AgentDependencyGroups;
|
|
77
|
-
unknown: RedactedAgentSummary[];
|
|
78
|
-
};
|
|
79
|
-
export declare function redactDiagnosticsForCopy(diag: ControlCenterDiagnostics): string;
|
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Control Center Helpers — PRI-303
|
|
3
|
-
*
|
|
4
|
-
* Pure logic for the Control Center UI:
|
|
5
|
-
* - Readiness badge/label mapping
|
|
6
|
-
* - Overall readiness computation
|
|
7
|
-
* - Agent grouping by readiness
|
|
8
|
-
* - Redacted diagnostics for clipboard copy
|
|
9
|
-
*
|
|
10
|
-
* ERR entries:
|
|
11
|
-
* - ERR-001/ERR-005: No `as` bypasses on untrusted data
|
|
12
|
-
* - ERR-014/ERR-016/ERR-017: Safe serialization for diagnostics copy
|
|
13
|
-
* - ERR-045: ANY-segment redaction for sensitive keys
|
|
14
|
-
*/
|
|
15
|
-
import { AGENT_METADATA } from './agent-metadata.js';
|
|
16
|
-
// ── Readiness Badge Variant ──────────────────────────────────────────────────
|
|
17
|
-
export function getReadinessBadgeVariant(readiness) {
|
|
18
|
-
switch (readiness) {
|
|
19
|
-
case 'ready': return 'default';
|
|
20
|
-
case 'needs_setup': return 'secondary';
|
|
21
|
-
case 'disabled': return 'outline';
|
|
22
|
-
case 'not_ready': return 'destructive';
|
|
23
|
-
case 'unknown': return 'secondary';
|
|
24
|
-
default: return 'secondary';
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// ── Readiness Label ──────────────────────────────────────────────────────────
|
|
28
|
-
export function getReadinessLabel(readiness) {
|
|
29
|
-
switch (readiness) {
|
|
30
|
-
case 'ready': return 'Ready';
|
|
31
|
-
case 'needs_setup': return 'Needs Setup';
|
|
32
|
-
case 'disabled': return 'Disabled';
|
|
33
|
-
case 'not_ready': return 'Not Ready';
|
|
34
|
-
case 'unknown': return 'Unknown';
|
|
35
|
-
default: return 'Unknown';
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// ── Overall Readiness ────────────────────────────────────────────────────────
|
|
39
|
-
export function computeOverallReadiness(diag) {
|
|
40
|
-
const enabledAgents = diag.agents.filter(a => a.enabled);
|
|
41
|
-
if (enabledAgents.length === 0) {
|
|
42
|
-
return diag.agents.length === 0 ? 'unknown' : 'disabled';
|
|
43
|
-
}
|
|
44
|
-
const readinessOrder = ['not_ready', 'needs_setup', 'unknown', 'disabled', 'ready'];
|
|
45
|
-
for (const status of readinessOrder) {
|
|
46
|
-
if (status === 'disabled')
|
|
47
|
-
continue; // disabled agents are filtered out above
|
|
48
|
-
if (enabledAgents.some(a => a.readiness === status)) {
|
|
49
|
-
return status;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return 'ready';
|
|
53
|
-
}
|
|
54
|
-
// ── Group Agents by Readiness ────────────────────────────────────────────────
|
|
55
|
-
export function groupAgentsByReadiness(diag) {
|
|
56
|
-
const groups = {
|
|
57
|
-
ready: [],
|
|
58
|
-
needs_setup: [],
|
|
59
|
-
disabled: [],
|
|
60
|
-
not_ready: [],
|
|
61
|
-
unknown: [],
|
|
62
|
-
};
|
|
63
|
-
for (const agent of diag.agents) {
|
|
64
|
-
const status = agent.readiness;
|
|
65
|
-
if (Object.hasOwn(groups, status)) {
|
|
66
|
-
groups[status].push(agent);
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
groups.unknown.push(agent);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return groups;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Type guard: is `name` a known internal agent with metadata?
|
|
76
|
-
* Replaces `as keyof typeof AGENT_METADATA` (rc-2: no `as` bypass).
|
|
77
|
-
*/
|
|
78
|
-
export function isKnownAgentName(name) {
|
|
79
|
-
return Object.hasOwn(AGENT_METADATA, name);
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Group agents by dependency cluster (core_trio / code_chain / quality_polish / sidechain).
|
|
83
|
-
* Agents not found in AGENT_METADATA go to the `unknown` bucket for fail-loud
|
|
84
|
-
* handling by the caller (rc-5: Object.hasOwn lookup; rc-9: no silent fallback).
|
|
85
|
-
*
|
|
86
|
-
* Group insertion order matches GROUP_ORDER (core_trio → code_chain → quality_polish → sidechain),
|
|
87
|
-
* so Object.keys(groups) returns the render order.
|
|
88
|
-
*/
|
|
89
|
-
export function groupAgentsByDependency(agents) {
|
|
90
|
-
const groups = {
|
|
91
|
-
core_trio: [],
|
|
92
|
-
code_chain: [],
|
|
93
|
-
quality_polish: [],
|
|
94
|
-
sidechain: [],
|
|
95
|
-
};
|
|
96
|
-
const unknown = [];
|
|
97
|
-
for (const agent of agents) {
|
|
98
|
-
// rc-5: Object.hasOwn for untrusted keys (agent.name comes from server response)
|
|
99
|
-
if (isKnownAgentName(agent.name)) {
|
|
100
|
-
const meta = AGENT_METADATA[agent.name];
|
|
101
|
-
groups[meta.group].push(agent);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
// rc-9: unknown agents go to a separate bucket; caller decides how to surface
|
|
105
|
-
unknown.push(agent);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return { groups, unknown };
|
|
109
|
-
}
|
|
110
|
-
// ── Redacted Diagnostics for Copy ────────────────────────────────────────────
|
|
111
|
-
/** Maximum items per section in diagnostics output (ERR-014/ERR-016/ERR-017) */
|
|
112
|
-
const MAX_ITEMS_PER_SECTION = 50;
|
|
113
|
-
function takeBounded(arr) {
|
|
114
|
-
if (arr.length <= MAX_ITEMS_PER_SECTION)
|
|
115
|
-
return { items: arr, truncated: 0 };
|
|
116
|
-
return {
|
|
117
|
-
items: arr.slice(0, MAX_ITEMS_PER_SECTION),
|
|
118
|
-
truncated: arr.length - MAX_ITEMS_PER_SECTION,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
export function redactDiagnosticsForCopy(diag) {
|
|
122
|
-
const overall = computeOverallReadiness(diag);
|
|
123
|
-
const lines = [];
|
|
124
|
-
lines.push('=== PD Control Center Diagnostics ===');
|
|
125
|
-
lines.push(`Overall Status: ${getReadinessLabel(overall)}`);
|
|
126
|
-
lines.push(`Config Source: ${diag.source}`);
|
|
127
|
-
lines.push(`Config Version: ${diag.version}`);
|
|
128
|
-
lines.push('');
|
|
129
|
-
// Features
|
|
130
|
-
lines.push('--- Features ---');
|
|
131
|
-
const features = takeBounded(diag.features);
|
|
132
|
-
for (const f of features.items) {
|
|
133
|
-
lines.push(` ${f.id}: ${f.category} / ${f.enabled ? 'enabled' : 'disabled'}`);
|
|
134
|
-
}
|
|
135
|
-
if (features.truncated > 0)
|
|
136
|
-
lines.push(` ... +${features.truncated} more`);
|
|
137
|
-
lines.push('');
|
|
138
|
-
// Runtime Profiles (redacted)
|
|
139
|
-
lines.push('--- Runtime Profiles ---');
|
|
140
|
-
const profiles = takeBounded(diag.runtimeProfiles);
|
|
141
|
-
for (const p of profiles.items) {
|
|
142
|
-
const parts = [` ${p.id}: ${p.label} [${getReadinessLabel(p.readiness)}]`];
|
|
143
|
-
// apiKeyEnv is a secret-like key — redact it (ERR-045)
|
|
144
|
-
if (p.apiKeyEnv) {
|
|
145
|
-
parts.push(` apiKeyEnv: [REDACTED]`);
|
|
146
|
-
}
|
|
147
|
-
lines.push(parts.join('\n'));
|
|
148
|
-
}
|
|
149
|
-
if (profiles.truncated > 0)
|
|
150
|
-
lines.push(` ... +${profiles.truncated} more`);
|
|
151
|
-
lines.push('');
|
|
152
|
-
// Default Runtime
|
|
153
|
-
lines.push(`Default Runtime: ${diag.defaultRuntime}`);
|
|
154
|
-
lines.push('');
|
|
155
|
-
// Agents
|
|
156
|
-
lines.push('--- Agents ---');
|
|
157
|
-
const agents = takeBounded(diag.agents);
|
|
158
|
-
for (const a of agents.items) {
|
|
159
|
-
const status = a.enabled ? getReadinessLabel(a.readiness) : 'Disabled';
|
|
160
|
-
lines.push(` ${a.name}: ${status} (profile: ${a.runtimeProfileLabel})`);
|
|
161
|
-
}
|
|
162
|
-
if (agents.truncated > 0)
|
|
163
|
-
lines.push(` ... +${agents.truncated} more`);
|
|
164
|
-
lines.push('');
|
|
165
|
-
// Warnings
|
|
166
|
-
if (diag.warnings.length > 0) {
|
|
167
|
-
lines.push('--- Warnings ---');
|
|
168
|
-
const warnings = takeBounded(diag.warnings);
|
|
169
|
-
for (const w of warnings.items) {
|
|
170
|
-
lines.push(` - ${w}`);
|
|
171
|
-
}
|
|
172
|
-
if (warnings.truncated > 0)
|
|
173
|
-
lines.push(` ... +${warnings.truncated} more`);
|
|
174
|
-
lines.push('');
|
|
175
|
-
}
|
|
176
|
-
// Errors
|
|
177
|
-
if (diag.errors && diag.errors.length > 0) {
|
|
178
|
-
lines.push('--- Errors ---');
|
|
179
|
-
const errors = takeBounded(diag.errors);
|
|
180
|
-
for (const e of errors.items) {
|
|
181
|
-
lines.push(` ${e.path}: ${e.reason} → ${e.nextAction}`);
|
|
182
|
-
}
|
|
183
|
-
if (errors.truncated > 0)
|
|
184
|
-
lines.push(` ... +${errors.truncated} more`);
|
|
185
|
-
lines.push('');
|
|
186
|
-
}
|
|
187
|
-
lines.push('=== End Diagnostics ===');
|
|
188
|
-
return lines.join('\n');
|
|
189
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enum Labels — Global enum-to-human-label mapping with i18n fallback.
|
|
3
|
-
*
|
|
4
|
-
* Wave 1 of console UX rebuild: eliminates raw enum values (e.g.
|
|
5
|
-
* "internalization-succeeded", "code_tool_hook", "gone") from the
|
|
6
|
-
* Owner-facing UI by providing a centralized label resolver with
|
|
7
|
-
* three-tier fallback: i18n → local map → raw value.
|
|
8
|
-
*
|
|
9
|
-
* Root cause being fixed: PainPage's `tFallback(t, 'pages.pain.state_${record.state}', ...)`
|
|
10
|
-
* generated keys with hyphens (e.g. `state_evidence-only`) that never matched the
|
|
11
|
-
* i18n keys with underscores (e.g. `state_evidence_only`), so the fallback to the
|
|
12
|
-
* raw enum value was always taken — exposing machine words like
|
|
13
|
-
* "internalization-succeeded" to the Owner.
|
|
14
|
-
*
|
|
15
|
-
* Design constraints:
|
|
16
|
-
* - Pure logic, no I/O (ERR-001/ERR-005: no `as` bypasses on untrusted data)
|
|
17
|
-
* - Category-keyed to avoid cross-enum collisions
|
|
18
|
-
* - i18n key convention: `common.enums.<category>.<snake_value>`
|
|
19
|
-
* - Local map keyed by the RAW value (with hyphens) for exact lookup
|
|
20
|
-
*/
|
|
21
|
-
type TFunc = (key: string) => string;
|
|
22
|
-
export type EnumCategory = 'evidenceState' | 'sourceKind' | 'channel' | 'readiness' | 'featureCategory' | 'featureId' | 'confidence' | 'feedbackType' | 'admission' | 'evaluability';
|
|
23
|
-
/**
|
|
24
|
-
* Resolve an enum value to a human-readable label.
|
|
25
|
-
*
|
|
26
|
-
* Resolution order:
|
|
27
|
-
* 1. i18n key `common.enums.<category>.<snake_value>` (if the t function
|
|
28
|
-
* returns something other than the key itself)
|
|
29
|
-
* 2. Local fallback map `LOCAL_LABELS[category][rawValue]`
|
|
30
|
-
* 3. Raw value (last resort — guarantees a non-empty string)
|
|
31
|
-
*
|
|
32
|
-
* @param category - The enum category (e.g. 'evidenceState', 'channel')
|
|
33
|
-
* @param value - The raw enum value (e.g. 'internalization-succeeded')
|
|
34
|
-
* @param t - i18n translation function (from useTranslation). Optional;
|
|
35
|
-
* if omitted, skips straight to the local map.
|
|
36
|
-
* @returns Human-readable label
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* // In a React component:
|
|
40
|
-
* const { t } = useTranslation();
|
|
41
|
-
* const stateLabel = enumLabel('evidenceState', record.state, t);
|
|
42
|
-
* // → "内化完成" (for 'internalization-succeeded')
|
|
43
|
-
*/
|
|
44
|
-
export declare function enumLabel(category: EnumCategory, value: string, t?: TFunc): string;
|
|
45
|
-
/**
|
|
46
|
-
* Check whether a local label exists for the given category + value.
|
|
47
|
-
* Useful for conditional rendering (e.g. only show a badge if we can label it).
|
|
48
|
-
*/
|
|
49
|
-
export declare function hasEnumLabel(category: EnumCategory, value: string): boolean;
|
|
50
|
-
export {};
|
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Enum Labels — Global enum-to-human-label mapping with i18n fallback.
|
|
3
|
-
*
|
|
4
|
-
* Wave 1 of console UX rebuild: eliminates raw enum values (e.g.
|
|
5
|
-
* "internalization-succeeded", "code_tool_hook", "gone") from the
|
|
6
|
-
* Owner-facing UI by providing a centralized label resolver with
|
|
7
|
-
* three-tier fallback: i18n → local map → raw value.
|
|
8
|
-
*
|
|
9
|
-
* Root cause being fixed: PainPage's `tFallback(t, 'pages.pain.state_${record.state}', ...)`
|
|
10
|
-
* generated keys with hyphens (e.g. `state_evidence-only`) that never matched the
|
|
11
|
-
* i18n keys with underscores (e.g. `state_evidence_only`), so the fallback to the
|
|
12
|
-
* raw enum value was always taken — exposing machine words like
|
|
13
|
-
* "internalization-succeeded" to the Owner.
|
|
14
|
-
*
|
|
15
|
-
* Design constraints:
|
|
16
|
-
* - Pure logic, no I/O (ERR-001/ERR-005: no `as` bypasses on untrusted data)
|
|
17
|
-
* - Category-keyed to avoid cross-enum collisions
|
|
18
|
-
* - i18n key convention: `common.enums.<category>.<snake_value>`
|
|
19
|
-
* - Local map keyed by the RAW value (with hyphens) for exact lookup
|
|
20
|
-
*/
|
|
21
|
-
// ── Local fallback maps ──────────────────────────────────────────────────────
|
|
22
|
-
// Used when the i18n key `common.enums.<category>.<snake_value>` is missing.
|
|
23
|
-
// Keys are the RAW enum values (with hyphens) for O(1) exact lookup.
|
|
24
|
-
const LOCAL_LABELS = {
|
|
25
|
-
evidenceState: {
|
|
26
|
-
'evidence-only': '仅观察',
|
|
27
|
-
'recorded-only': '已记录信号',
|
|
28
|
-
'diagnosis-queued': '诊断排队中',
|
|
29
|
-
'diagnosis-running': '诊断运行中',
|
|
30
|
-
'diagnosis-succeeded': '诊断完成',
|
|
31
|
-
'diagnosis-failed': '诊断失败',
|
|
32
|
-
'diagnosis-retry-wait': '等待重试',
|
|
33
|
-
'candidate-generated': '已生成候选',
|
|
34
|
-
'internalization-missing': '内化缺失',
|
|
35
|
-
'internalization-pending': '内化待处理',
|
|
36
|
-
'internalization-running': '内化运行中',
|
|
37
|
-
'internalization-succeeded': '内化完成',
|
|
38
|
-
'internalization-failed': '内化失败',
|
|
39
|
-
'owner-reviewable': '待审查',
|
|
40
|
-
'malformed': '数据异常',
|
|
41
|
-
'degraded': '降级',
|
|
42
|
-
},
|
|
43
|
-
sourceKind: {
|
|
44
|
-
'manual': '手动触发',
|
|
45
|
-
'tool_call': '工具调用',
|
|
46
|
-
'rulehost': '规则守卫',
|
|
47
|
-
'empathy_inferred': '共情推断',
|
|
48
|
-
'review': '审查发现',
|
|
49
|
-
'unknown': '未知来源',
|
|
50
|
-
},
|
|
51
|
-
channel: {
|
|
52
|
-
'prompt': '提示词 / 可撤销',
|
|
53
|
-
'defer_archive': '延迟归档',
|
|
54
|
-
'code_tool_hook': 'Code Tool Hook',
|
|
55
|
-
'skill': '技能激活(已停用)',
|
|
56
|
-
},
|
|
57
|
-
readiness: {
|
|
58
|
-
'ready': '就绪',
|
|
59
|
-
'needs_setup': '待配置',
|
|
60
|
-
'disabled': '已停用',
|
|
61
|
-
'not_ready': '未就绪',
|
|
62
|
-
'unknown': '未知',
|
|
63
|
-
},
|
|
64
|
-
featureCategory: {
|
|
65
|
-
'core': '核心启用',
|
|
66
|
-
'quiet': '默认关闭',
|
|
67
|
-
'gone': '已归档(不再激活)',
|
|
68
|
-
'legacy_retire': '待退役',
|
|
69
|
-
},
|
|
70
|
-
featureId: {
|
|
71
|
-
'prompt': '提示词注入',
|
|
72
|
-
'code_tool_hook': '代码工具钩子',
|
|
73
|
-
'defer_archive': '延迟归档',
|
|
74
|
-
'correction_observer': '纠正观察器',
|
|
75
|
-
'internalization_auto_consumer': '内化自动消费器',
|
|
76
|
-
'feedback_channel': '反馈通道',
|
|
77
|
-
'gfi': '全局摩擦指数',
|
|
78
|
-
'evolution_worker': '进化工作器',
|
|
79
|
-
'diagnostician_async_cli': '诊断器异步 CLI',
|
|
80
|
-
'diagnostician_core_grounding': '诊断器核心锚定',
|
|
81
|
-
'internalization_core_grounding': '内化核心锚定',
|
|
82
|
-
'diagnostician_split_pipeline': '诊断器分流管线',
|
|
83
|
-
'l2_dreamer': 'L2 Dreamer 循环',
|
|
84
|
-
},
|
|
85
|
-
confidence: {
|
|
86
|
-
'high': '高',
|
|
87
|
-
'medium': '中',
|
|
88
|
-
'low': '低',
|
|
89
|
-
},
|
|
90
|
-
feedbackType: {
|
|
91
|
-
'bug': '缺陷',
|
|
92
|
-
'confusing': '体验困惑',
|
|
93
|
-
'privacy_concern': '隐私问题',
|
|
94
|
-
'feature_request': '功能请求',
|
|
95
|
-
'other': '其他',
|
|
96
|
-
},
|
|
97
|
-
admission: {
|
|
98
|
-
'store_signal': '已录入信号',
|
|
99
|
-
'evidence_only': '仅作证据',
|
|
100
|
-
'owner_confirmation_required': '待确认',
|
|
101
|
-
},
|
|
102
|
-
// Owner Decision Experience v1 (T10): evaluability is NOT confidence — it
|
|
103
|
-
// describes how the principle's adherence can be evaluated, and must never
|
|
104
|
-
// be displayed as a confidence score.
|
|
105
|
-
evaluability: {
|
|
106
|
-
'deterministic': '可确定性检查',
|
|
107
|
-
'weak_heuristic': '弱启发式',
|
|
108
|
-
'manual_only': '仅人工',
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
112
|
-
/**
|
|
113
|
-
* Convert a raw enum value to snake_case for i18n key lookup.
|
|
114
|
-
* e.g. "evidence-only" → "evidence_only"
|
|
115
|
-
* "code_tool_hook" → "code_tool_hook" (already snake)
|
|
116
|
-
* "internalization-succeeded" → "internalization_succeeded"
|
|
117
|
-
*/
|
|
118
|
-
function toSnakeCase(value) {
|
|
119
|
-
return value.replace(/-/g, '_').toLowerCase();
|
|
120
|
-
}
|
|
121
|
-
// ── Public API ───────────────────────────────────────────────────────────────
|
|
122
|
-
/**
|
|
123
|
-
* Resolve an enum value to a human-readable label.
|
|
124
|
-
*
|
|
125
|
-
* Resolution order:
|
|
126
|
-
* 1. i18n key `common.enums.<category>.<snake_value>` (if the t function
|
|
127
|
-
* returns something other than the key itself)
|
|
128
|
-
* 2. Local fallback map `LOCAL_LABELS[category][rawValue]`
|
|
129
|
-
* 3. Raw value (last resort — guarantees a non-empty string)
|
|
130
|
-
*
|
|
131
|
-
* @param category - The enum category (e.g. 'evidenceState', 'channel')
|
|
132
|
-
* @param value - The raw enum value (e.g. 'internalization-succeeded')
|
|
133
|
-
* @param t - i18n translation function (from useTranslation). Optional;
|
|
134
|
-
* if omitted, skips straight to the local map.
|
|
135
|
-
* @returns Human-readable label
|
|
136
|
-
*
|
|
137
|
-
* @example
|
|
138
|
-
* // In a React component:
|
|
139
|
-
* const { t } = useTranslation();
|
|
140
|
-
* const stateLabel = enumLabel('evidenceState', record.state, t);
|
|
141
|
-
* // → "内化完成" (for 'internalization-succeeded')
|
|
142
|
-
*/
|
|
143
|
-
export function enumLabel(category, value, t) {
|
|
144
|
-
// 1. Try i18n first
|
|
145
|
-
if (t) {
|
|
146
|
-
const snakeValue = toSnakeCase(value);
|
|
147
|
-
const i18nKey = `common.enums.${category}.${snakeValue}`;
|
|
148
|
-
const result = t(i18nKey);
|
|
149
|
-
if (result !== i18nKey) {
|
|
150
|
-
return result;
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
// 2. Fall back to local map
|
|
154
|
-
const localMap = LOCAL_LABELS[category];
|
|
155
|
-
if (localMap && Object.hasOwn(localMap, value)) {
|
|
156
|
-
const label = localMap[value];
|
|
157
|
-
if (label !== undefined) {
|
|
158
|
-
return label;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
// 3. Last resort: raw value
|
|
162
|
-
return value;
|
|
163
|
-
}
|
|
164
|
-
/**
|
|
165
|
-
* Check whether a local label exists for the given category + value.
|
|
166
|
-
* Useful for conditional rendering (e.g. only show a badge if we can label it).
|
|
167
|
-
*/
|
|
168
|
-
export function hasEnumLabel(category, value) {
|
|
169
|
-
const localMap = LOCAL_LABELS[category];
|
|
170
|
-
return !!localMap && Object.hasOwn(localMap, value);
|
|
171
|
-
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format an ISO timestamp following the UI language, not the browser/OS locale.
|
|
3
|
-
*
|
|
4
|
-
* PD is bilingual (zh-CN / en): a user running an English OS while viewing the
|
|
5
|
-
* zh-CN UI must still see zh-CN dates (and vice versa), so the locale always
|
|
6
|
-
* comes from i18n.language instead of the ambient environment.
|
|
7
|
-
*
|
|
8
|
-
* Invalid or missing input returns the raw string unchanged — Intl would
|
|
9
|
-
* render "Invalid Date" for NaN dates, which must never reach the screen.
|
|
10
|
-
*/
|
|
11
|
-
export declare function formatDate(iso: string, language?: string, options?: Intl.DateTimeFormatOptions): string;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format an ISO timestamp following the UI language, not the browser/OS locale.
|
|
3
|
-
*
|
|
4
|
-
* PD is bilingual (zh-CN / en): a user running an English OS while viewing the
|
|
5
|
-
* zh-CN UI must still see zh-CN dates (and vice versa), so the locale always
|
|
6
|
-
* comes from i18n.language instead of the ambient environment.
|
|
7
|
-
*
|
|
8
|
-
* Invalid or missing input returns the raw string unchanged — Intl would
|
|
9
|
-
* render "Invalid Date" for NaN dates, which must never reach the screen.
|
|
10
|
-
*/
|
|
11
|
-
export function formatDate(iso, language, options) {
|
|
12
|
-
const date = new Date(iso);
|
|
13
|
-
if (Number.isNaN(date.getTime()))
|
|
14
|
-
return iso;
|
|
15
|
-
const locale = language && language !== "unknown" ? language : undefined;
|
|
16
|
-
return new Intl.DateTimeFormat(locale, options).format(date);
|
|
17
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Onboarding state persistence with workspaceId dimension.
|
|
3
|
-
* Prevents cross-workspace state leakage (spec §6.3 改动 1).
|
|
4
|
-
* localStorage is the single source of truth (no cross-device sync — YAGNI).
|
|
5
|
-
*/
|
|
6
|
-
export interface OnboardingState {
|
|
7
|
-
completed: boolean;
|
|
8
|
-
step: number;
|
|
9
|
-
status: 'pending' | 'demo' | 'skipped' | 'evidence_found';
|
|
10
|
-
completedAt?: string;
|
|
11
|
-
}
|
|
12
|
-
export declare const ONBOARDING_STORAGE_KEY_PREFIX = "pd_onboarding";
|
|
13
|
-
/**
|
|
14
|
-
* Get onboarding state for a specific workspace.
|
|
15
|
-
* Treats localStorage data as unknown (rc-1) — validates shape before use.
|
|
16
|
-
*/
|
|
17
|
-
export declare function getOnboardingState(workspaceId: string): OnboardingState;
|
|
18
|
-
/**
|
|
19
|
-
* Set onboarding state for a specific workspace.
|
|
20
|
-
*/
|
|
21
|
-
export declare function setOnboardingState(workspaceId: string, state: OnboardingState): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Reset onboarding state for a specific workspace (Settings page "reset" button).
|
|
24
|
-
*/
|
|
25
|
-
export declare function resetOnboardingState(workspaceId: string): boolean;
|