create-principles-disciple 1.93.0 → 1.95.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/console/dist/server/config/WorkspaceConfigStore.js +2 -1
- package/console/dist/server/config/pd-config-store.d.ts +40 -1
- package/console/dist/server/config/pd-config-store.js +170 -1
- package/console/dist/server/index.js +28 -10
- package/console/dist/server/models/ApprovalsConsoleModel.js +4 -12
- package/console/dist/server/models/EvidenceChainConsoleModel.d.ts +0 -2
- package/console/dist/server/models/EvidenceChainConsoleModel.js +36 -2
- package/console/dist/server/models/HealthCheckModel.js +5 -3
- package/console/dist/server/models/IntentDecisionModel.d.ts +66 -0
- package/console/dist/server/models/IntentDecisionModel.js +207 -0
- package/console/dist/server/models/IntentPageModel.d.ts +18 -0
- package/console/dist/server/models/IntentPageModel.js +90 -0
- package/console/dist/server/models/PrinciplesConsoleModel.d.ts +2 -0
- package/console/dist/server/models/PrinciplesConsoleModel.js +37 -1
- package/console/dist/server/models/WorkspaceService.d.ts +0 -28
- package/console/dist/server/models/WorkspaceService.js +0 -115
- package/console/dist/server/routes/config.js +55 -1
- package/console/dist/server/routes/feedback-reports.js +1 -1
- package/console/dist/server/routes/intent-decisions.d.ts +33 -0
- package/console/dist/server/routes/intent-decisions.js +499 -0
- package/console/dist/server/routes/intent.d.ts +3 -0
- package/console/dist/server/routes/intent.js +35 -0
- package/console/dist/server/routes/principles.js +67 -1
- package/console/dist/server/routes/update.d.ts +0 -1
- package/console/dist/server/routes/update.js +14 -11
- package/console/dist/ui/App.js +2 -7
- package/console/dist/ui/api.d.ts +44 -18
- package/console/dist/ui/api.js +44 -5
- package/console/dist/ui/components/layout/app-sidebar.js +2 -1
- package/console/dist/ui/components/ui/badge.d.ts +1 -1
- package/console/dist/ui/components/ui/button.d.ts +1 -1
- package/console/dist/ui/components/ui/shiny-text.d.ts +28 -0
- package/console/dist/ui/components/ui/shiny-text.js +46 -0
- package/console/dist/ui/i18n/en.json +167 -3
- package/console/dist/ui/i18n/zh-CN.json +167 -3
- package/console/dist/ui/pages/activation/ActivationPage.js +2 -1
- package/console/dist/ui/pages/control-center/ControlCenterPage.js +28 -2
- package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.d.ts +28 -0
- package/console/dist/ui/pages/control-center/EmpathyObserverCostHint.js +38 -0
- package/console/dist/ui/pages/debt/DebtPage.js +219 -2
- package/console/dist/ui/pages/focus/FocusPage.js +2 -1
- package/console/dist/ui/pages/intent/IntentPage.d.ts +1 -0
- package/console/dist/ui/pages/intent/IntentPage.js +147 -0
- package/console/dist/ui/pages/pain/PainPage.js +234 -4
- package/console/dist/ui/pages/pain/pain-card-helpers.d.ts +75 -0
- package/console/dist/ui/pages/pain/pain-card-helpers.js +78 -0
- package/console/dist/ui/pages/principles/PrinciplesPage.js +2 -1
- package/console/dist/ui/utils/validators.d.ts +163 -0
- package/console/dist/ui/utils/validators.js +433 -0
- package/console/dist/web/assets/app.css +138 -0
- package/console/dist/web/assets/app.js +3124 -1288
- package/console/package.json +3 -0
- package/core/dist/index.d.ts +2 -2
- package/core/dist/index.d.ts.map +1 -1
- package/core/dist/index.js +1 -1
- package/core/dist/index.js.map +1 -1
- package/core/dist/principle-tree-ledger.d.ts +55 -4
- package/core/dist/principle-tree-ledger.d.ts.map +1 -1
- package/core/dist/principle-tree-ledger.js +472 -13
- package/core/dist/principle-tree-ledger.js.map +1 -1
- package/core/dist/prompt-builder/__tests__/model-config.test.d.ts +2 -0
- package/core/dist/prompt-builder/__tests__/model-config.test.d.ts.map +1 -0
- package/core/dist/prompt-builder/__tests__/model-config.test.js +158 -0
- package/core/dist/prompt-builder/__tests__/model-config.test.js.map +1 -0
- package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js +58 -0
- package/core/dist/prompt-builder/__tests__/prompt-builder-core.test.js.map +1 -1
- package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts +2 -0
- package/core/dist/prompt-builder/__tests__/xml-escape.test.d.ts.map +1 -0
- package/core/dist/prompt-builder/__tests__/xml-escape.test.js +42 -0
- package/core/dist/prompt-builder/__tests__/xml-escape.test.js.map +1 -0
- package/core/dist/prompt-builder/empathy-keyword-matching.d.ts.map +1 -1
- package/core/dist/prompt-builder/empathy-keyword-matching.js +9 -6
- package/core/dist/prompt-builder/empathy-keyword-matching.js.map +1 -1
- package/core/dist/prompt-builder/index.d.ts +3 -0
- package/core/dist/prompt-builder/index.d.ts.map +1 -1
- package/core/dist/prompt-builder/index.js +2 -0
- package/core/dist/prompt-builder/index.js.map +1 -1
- package/core/dist/prompt-builder/model-config.d.ts +42 -0
- package/core/dist/prompt-builder/model-config.d.ts.map +1 -0
- package/core/dist/prompt-builder/model-config.js +84 -0
- package/core/dist/prompt-builder/model-config.js.map +1 -0
- package/core/dist/prompt-builder/size-guard.d.ts +1 -0
- package/core/dist/prompt-builder/size-guard.d.ts.map +1 -1
- package/core/dist/prompt-builder/size-guard.js +21 -0
- package/core/dist/prompt-builder/size-guard.js.map +1 -1
- package/core/dist/prompt-builder/types.d.ts +2 -0
- package/core/dist/prompt-builder/types.d.ts.map +1 -1
- package/core/dist/prompt-builder/xml-escape.d.ts +12 -0
- package/core/dist/prompt-builder/xml-escape.d.ts.map +1 -0
- package/core/dist/prompt-builder/xml-escape.js +19 -0
- package/core/dist/prompt-builder/xml-escape.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +205 -48
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js +284 -0
- package/core/dist/runtime-v2/__tests__/evidence-chain-intent-tension.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js +500 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js +7 -5
- package/core/dist/runtime-v2/__tests__/pain-signal-observability.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js +11 -0
- package/core/dist/runtime-v2/__tests__/pi-artifact-store.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +15 -2
- package/core/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js +290 -0
- package/core/dist/runtime-v2/__tests__/schema-float-precision.test.js.map +1 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js +158 -0
- package/core/dist/runtime-v2/__tests__/schema-orphan-detection.test.js.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js +15 -1
- package/core/dist/runtime-v2/activation/__tests__/approval-store-extended.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts +2 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js +62 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store-fk.test.js.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +12 -2
- package/core/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts +2 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js +56 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store-fk.test.js.map +1 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js +8 -0
- package/core/dist/runtime-v2/activation/__tests__/sqlite-approval-store.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js +20 -0
- package/core/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js +6 -0
- package/core/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/sqlite-approval-store.js +86 -32
- package/core/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
- package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +65 -1
- package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js.map +1 -1
- package/core/dist/runtime-v2/activation/writers/rule-host-writer.d.ts.map +1 -1
- package/core/dist/runtime-v2/activation/writers/rule-host-writer.js +33 -11
- package/core/dist/runtime-v2/activation/writers/rule-host-writer.js.map +1 -1
- package/core/dist/runtime-v2/bridge-result-shaper.d.ts +53 -0
- package/core/dist/runtime-v2/bridge-result-shaper.d.ts.map +1 -0
- package/core/dist/runtime-v2/bridge-result-shaper.js +117 -0
- package/core/dist/runtime-v2/bridge-result-shaper.js.map +1 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts +13 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js +111 -0
- package/core/dist/runtime-v2/detection/__tests__/detection-funnel-policy.test.js.map +1 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts +103 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.d.ts.map +1 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.js +135 -0
- package/core/dist/runtime-v2/detection/detection-funnel-policy.js.map +1 -0
- package/core/dist/runtime-v2/detection/index.d.ts +10 -0
- package/core/dist/runtime-v2/detection/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/detection/index.js +9 -0
- package/core/dist/runtime-v2/detection/index.js.map +1 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js +134 -15
- package/core/dist/runtime-v2/diagnostician/__tests__/diag-rootcause-output.test.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts +18 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js +251 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/intent-tension-schema.test.js.map +1 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js +73 -0
- package/core/dist/runtime-v2/diagnostician/__tests__/rootcause-prompt-builder.test.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts +98 -0
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js +131 -0
- package/core/dist/runtime-v2/diagnostician/diag-rootcause-output.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts +8 -0
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js +66 -3
- package/core/dist/runtime-v2/diagnostician/rootcause-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician-output.d.ts +23 -0
- package/core/dist/runtime-v2/diagnostician-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician-output.js +16 -0
- package/core/dist/runtime-v2/diagnostician-output.js.map +1 -1
- package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts +32 -0
- package/core/dist/runtime-v2/diagnostician-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/diagnostician-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts +12 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js +181 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/observation-resolver.test.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js +104 -1
- package/core/dist/runtime-v2/evidence-triage/__tests__/triage-policy.test.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/index.d.ts +3 -0
- package/core/dist/runtime-v2/evidence-triage/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/index.js +3 -0
- package/core/dist/runtime-v2/evidence-triage/index.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts +128 -0
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.d.ts.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js +203 -0
- package/core/dist/runtime-v2/evidence-triage/observation-resolver.js.map +1 -0
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.d.ts +1 -1
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
- package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts +4 -0
- package/core/dist/runtime-v2/evidence-triage/triage-policy.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/triage-policy.js +66 -9
- package/core/dist/runtime-v2/evidence-triage/triage-policy.js.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/types.d.ts +14 -0
- package/core/dist/runtime-v2/evidence-triage/types.d.ts.map +1 -1
- package/core/dist/runtime-v2/evidence-triage/types.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +56 -4
- package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts +2 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js +30 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/intent-engineering-flag.test.js.map +1 -0
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js +11 -2
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js +0 -9
- package/core/dist/runtime-v2/feature-flags/plugin-surface-registry.js.map +1 -1
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts +15 -0
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js +450 -0
- package/core/dist/runtime-v2/feedback/__tests__/redact-sensitive.test.js.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts +13 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js +243 -0
- package/core/dist/runtime-v2/feedback/__tests__/render-github-url.test.js.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts +12 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js +172 -0
- package/core/dist/runtime-v2/feedback/__tests__/safe-stringify.test.js.map +1 -0
- package/core/dist/runtime-v2/index.d.ts +15 -6
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +15 -4
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js +185 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-decision-record.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js +91 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js +168 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-friction-block.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js +121 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-patch-proposal.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/index.d.ts +6 -0
- package/core/dist/runtime-v2/intent/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/index.js +6 -0
- package/core/dist/runtime-v2/intent/index.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.d.ts +125 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.js +21 -0
- package/core/dist/runtime-v2/intent/intent-decision-record.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts +95 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.js +43 -0
- package/core/dist/runtime-v2/intent/intent-doc-reader-port.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc.d.ts +19 -0
- package/core/dist/runtime-v2/intent/intent-doc.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc.js +70 -0
- package/core/dist/runtime-v2/intent/intent-doc.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.d.ts +63 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.js +129 -0
- package/core/dist/runtime-v2/intent/intent-friction-block.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts +42 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.js +81 -0
- package/core/dist/runtime-v2/intent/intent-patch-proposal.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts +54 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js +219 -0
- package/core/dist/runtime-v2/internalization/__tests__/__fixtures__/intent-tension-cases.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js +306 -0
- package/core/dist/runtime-v2/internalization/__tests__/c2-live-runner-chain.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js +360 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-rootcause-intent-tension.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js +333 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-router-intent-tension.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js +113 -0
- package/core/dist/runtime-v2/internalization/__tests__/intent-tension-cases.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts +13 -0
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js +42 -0
- package/core/dist/runtime-v2/internalization/diag-rootcause-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/diag-router-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/diag-router-runner.js +27 -0
- package/core/dist/runtime-v2/internalization/diag-router-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/index.d.ts +0 -16
- package/core/dist/runtime-v2/internalization/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/index.js +0 -8
- package/core/dist/runtime-v2/internalization/index.js.map +1 -1
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts +15 -0
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js +179 -0
- package/core/dist/runtime-v2/pain-gate/__tests__/pain-diagnostic-gate-policy.test.js.map +1 -0
- package/core/dist/runtime-v2/pain-gate/index.d.ts +10 -0
- package/core/dist/runtime-v2/pain-gate/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/pain-gate/index.js +9 -0
- package/core/dist/runtime-v2/pain-gate/index.js.map +1 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts +121 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.d.ts.map +1 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js +157 -0
- package/core/dist/runtime-v2/pain-gate/pain-diagnostic-gate-policy.js.map +1 -0
- package/core/dist/runtime-v2/pain-signal-bridge.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-bridge.js +14 -88
- package/core/dist/runtime-v2/pain-signal-bridge.js.map +1 -1
- package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-observability.js +272 -61
- package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts +12 -0
- package/core/dist/runtime-v2/pain-signal-runtime-factory.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js +1 -1
- package/core/dist/runtime-v2/pain-signal-runtime-factory.js.map +1 -1
- package/core/dist/runtime-v2/pain-to-principle-service.d.ts +6 -0
- package/core/dist/runtime-v2/pain-to-principle-service.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-to-principle-service.js +2 -0
- package/core/dist/runtime-v2/pain-to-principle-service.js.map +1 -1
- package/core/dist/runtime-v2/principle-tree/ledger-codec.js.map +1 -1
- package/core/dist/runtime-v2/proven-channel-baseline.js +1 -1
- package/core/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts +2 -0
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js +55 -0
- package/core/dist/runtime-v2/store/artifact/__tests__/sqlite-pi-artifact-store-fk.test.js.map +1 -0
- package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js +6 -0
- package/core/dist/runtime-v2/store/artifact/sqlite-pi-artifact-store.js.map +1 -1
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts +2 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js +272 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-decision-store.test.js.map +1 -0
- package/core/dist/runtime-v2/store/intent/index.d.ts +6 -0
- package/core/dist/runtime-v2/store/intent/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/index.js +5 -0
- package/core/dist/runtime-v2/store/intent/index.js.map +1 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts +51 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js +306 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-decision-store.js.map +1 -0
- package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js +14 -3
- package/core/dist/runtime-v2/store/sqlite-connection-pragma.test.js.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts +2 -0
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js +72 -0
- package/core/dist/runtime-v2/store/sqlite-connection-schema-version.test.js.map +1 -0
- package/core/dist/runtime-v2/store/sqlite-connection.d.ts +27 -0
- package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection.js +124 -12
- package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/core/dist/runtime-v2/types/event-payload.d.ts +1 -20
- package/core/dist/runtime-v2/types/event-payload.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/event-payload.js +0 -12
- package/core/dist/runtime-v2/types/event-payload.js.map +1 -1
- package/core/dist/runtime-v2/types/event-types.d.ts +5 -61
- package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/event-types.js +2 -36
- package/core/dist/runtime-v2/types/event-types.js.map +1 -1
- package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts +63 -0
- package/core/dist/runtime-v2/types/evidence-chain-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/evidence-chain-contract.js +234 -9
- package/core/dist/runtime-v2/types/evidence-chain-contract.js.map +1 -1
- package/core/dist/runtime-v2/types/index.d.ts +5 -5
- package/core/dist/runtime-v2/types/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/index.js +7 -3
- package/core/dist/runtime-v2/types/index.js.map +1 -1
- package/core/dist/runtime-v2/types/ledger-store.d.ts +30 -30
- package/core/dist/runtime-v2/types/ledger-store.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/ledger-store.js +10 -5
- package/core/dist/runtime-v2/types/ledger-store.js.map +1 -1
- package/core/dist/runtime-v2/types/pain-signal.d.ts +2 -2
- package/core/dist/runtime-v2/types/pain-signal.js +2 -2
- package/core/dist/workflow-funnel-loader.d.ts +2 -2
- package/core/dist/workflow-funnel-loader.d.ts.map +1 -1
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +16 -0
- package/dist/installer.js.map +1 -1
- package/dist/mvp-config.d.ts +0 -10
- package/dist/mvp-config.d.ts.map +1 -1
- package/dist/mvp-config.js +0 -65
- package/dist/mvp-config.js.map +1 -1
- package/package.json +1 -1
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts +9 -0
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.d.ts.map +1 -0
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js +166 -0
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js.map +1 -0
- package/pd-cli/dist/commands/intent.d.ts +59 -0
- package/pd-cli/dist/commands/intent.d.ts.map +1 -0
- package/pd-cli/dist/commands/intent.js +350 -0
- package/pd-cli/dist/commands/intent.js.map +1 -0
- package/pd-cli/dist/commands/mvp-smoke.js +1 -1
- package/pd-cli/dist/commands/mvp-smoke.js.map +1 -1
- package/pd-cli/dist/commands/rulecode.js +1 -1
- package/pd-cli/dist/commands/rulecode.js.map +1 -1
- package/pd-cli/dist/commands/runtime-canary.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-canary.js +10 -11
- package/pd-cli/dist/commands/runtime-canary.js.map +1 -1
- package/pd-cli/dist/commands/runtime-init.d.ts +43 -0
- package/pd-cli/dist/commands/runtime-init.d.ts.map +1 -0
- package/pd-cli/dist/commands/runtime-init.js +264 -0
- package/pd-cli/dist/commands/runtime-init.js.map +1 -0
- package/pd-cli/dist/commands/runtime-internalization-queue.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-queue.js +13 -16
- package/pd-cli/dist/commands/runtime-internalization-queue.js.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-once.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-once.js +3 -0
- package/pd-cli/dist/commands/runtime-internalization-run-once.js.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-rulehost.d.ts.map +1 -1
- package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js +61 -7
- package/pd-cli/dist/commands/runtime-internalization-run-rulehost.js.map +1 -1
- package/pd-cli/dist/commands/runtime.js +1 -1
- package/pd-cli/dist/commands/runtime.js.map +1 -1
- package/pd-cli/dist/index.js +92 -34
- package/pd-cli/dist/index.js.map +1 -1
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts +2 -0
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.d.ts.map +1 -0
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js +314 -0
- package/pd-cli/dist/services/__tests__/rulehost-readiness.test.js.map +1 -0
- package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js +20 -12
- package/pd-cli/dist/services/__tests__/runtime-adapter-resolver.test.js.map +1 -1
- package/pd-cli/dist/services/demo-story-a-runner.d.ts.map +1 -1
- package/pd-cli/dist/services/demo-story-a-runner.js +6 -0
- package/pd-cli/dist/services/demo-story-a-runner.js.map +1 -1
- package/pd-cli/dist/services/rulehost-readiness.d.ts +62 -0
- package/pd-cli/dist/services/rulehost-readiness.d.ts.map +1 -0
- package/pd-cli/dist/services/rulehost-readiness.js +214 -0
- package/pd-cli/dist/services/rulehost-readiness.js.map +1 -0
- package/pd-cli/dist/services/runtime-adapter-resolver.d.ts +1 -1
- package/pd-cli/dist/services/runtime-adapter-resolver.js +3 -3
- package/pd-cli/dist/services/runtime-adapter-resolver.js.map +1 -1
- package/pd-cli/package.json +1 -0
- package/plugin/dist/commands/evolution-status.js +0 -2
- package/plugin/dist/commands/pain.js +2 -0
- package/plugin/dist/core/control-ui-db.d.ts +11 -0
- package/plugin/dist/core/control-ui-db.js +40 -16
- package/plugin/dist/core/detection-funnel.d.ts +25 -11
- package/plugin/dist/core/detection-funnel.js +32 -80
- package/plugin/dist/core/event-log.d.ts +1 -3
- package/plugin/dist/core/event-log.js +5 -21
- package/plugin/dist/core/evolution-reducer.d.ts +0 -8
- package/plugin/dist/core/evolution-reducer.js +9 -19
- package/plugin/dist/core/intent-doc-reader-adapter.d.ts +28 -0
- package/plugin/dist/core/intent-doc-reader-adapter.js +56 -0
- package/plugin/dist/core/intent-doc-reader.d.ts +80 -0
- package/plugin/dist/core/intent-doc-reader.js +189 -0
- package/plugin/dist/core/pain-diagnostic-gate.d.ts +37 -28
- package/plugin/dist/core/pain-diagnostic-gate.js +53 -89
- package/plugin/dist/core/pain.d.ts +0 -63
- package/plugin/dist/core/pain.js +0 -167
- package/plugin/dist/core/paths.d.ts +0 -1
- package/plugin/dist/core/paths.js +2 -1
- package/plugin/dist/core/principle-tree-ledger.d.ts +27 -79
- package/plugin/dist/core/principle-tree-ledger.js +39 -524
- package/plugin/dist/core/reflection/reflection-context.d.ts +2 -2
- package/plugin/dist/core/schema/migrations/001-init-trajectory.js +3 -6
- package/plugin/dist/core/schema/schema-definitions.js +4 -9
- package/plugin/dist/core/trajectory.d.ts +16 -16
- package/plugin/dist/core/trajectory.js +338 -311
- package/plugin/dist/core/workspace-context.d.ts +2 -3
- package/plugin/dist/hooks/after-tool-call-helpers.d.ts +4 -1
- package/plugin/dist/hooks/after-tool-call-helpers.js +13 -17
- package/plugin/dist/hooks/gate-block-helper.js +57 -17
- package/plugin/dist/hooks/lifecycle.js +3 -6
- package/plugin/dist/hooks/llm.js +66 -26
- package/plugin/dist/hooks/pain.d.ts +3 -1
- package/plugin/dist/hooks/pain.js +124 -49
- package/plugin/dist/hooks/prompt-helpers.d.ts +105 -0
- package/plugin/dist/hooks/prompt-helpers.js +288 -0
- package/plugin/dist/hooks/prompt-types.d.ts +74 -0
- package/plugin/dist/hooks/prompt-types.js +12 -0
- package/plugin/dist/hooks/prompt.d.ts +7 -38
- package/plugin/dist/hooks/prompt.js +433 -338
- package/plugin/dist/hooks/raw-observation-adapter.d.ts +9 -50
- package/plugin/dist/hooks/raw-observation-adapter.js +9 -164
- package/plugin/dist/hooks/raw-observation-types.d.ts +6 -57
- package/plugin/dist/hooks/raw-observation-types.js +5 -9
- package/plugin/dist/hooks/triage-adapter.js +6 -26
- package/plugin/dist/hooks/trigger-cooldown-tracker.d.ts +12 -0
- package/plugin/dist/hooks/trigger-cooldown-tracker.js +25 -0
- package/plugin/dist/index.d.ts +3 -1
- package/plugin/dist/index.js +9 -5
- package/plugin/dist/service/evolution-worker.js +6 -64
- package/plugin/dist/service/runtime-summary-service.d.ts +0 -2
- package/plugin/dist/service/runtime-summary-service.js +1 -5
- package/plugin/dist/service/subagent-workflow/workflow-store.d.ts +14 -0
- package/plugin/dist/service/subagent-workflow/workflow-store.js +91 -2
- package/plugin/dist/types/event-types.d.ts +1 -1
- package/plugin/package.json +6 -3
- package/plugin/scripts/acceptance-test.mjs +3 -3
- package/plugin/scripts/sync-plugin.mjs +33 -22
- package/plugin/templates/langs/en/skills/pd-cli-operator/SKILL.md +20 -11
- package/plugin/templates/langs/en/skills/pd-runtime-v2/SKILL.md +10 -0
- package/plugin/templates/langs/zh/skills/pd-cli-operator/SKILL.md +20 -11
- package/plugin/templates/langs/zh/skills/pd-runtime-v2/SKILL.md +10 -0
- package/console/dist/server/config/feature-flags.d.ts +0 -25
- package/console/dist/server/config/feature-flags.js +0 -101
- package/pd-cli/dist/commands/central-sync.d.ts +0 -10
- package/pd-cli/dist/commands/central-sync.d.ts.map +0 -1
- package/pd-cli/dist/commands/central-sync.js +0 -32
- package/pd-cli/dist/commands/central-sync.js.map +0 -1
- package/pd-cli/dist/services/feature-flag-loader.d.ts +0 -6
- package/pd-cli/dist/services/feature-flag-loader.d.ts.map +0 -1
- package/pd-cli/dist/services/feature-flag-loader.js +0 -53
- package/pd-cli/dist/services/feature-flag-loader.js.map +0 -1
- package/plugin/dist/core/observability.d.ts +0 -40
- package/plugin/dist/core/observability.js +0 -164
- package/plugin/dist/core/principle-tree-ledger-adapter.d.ts +0 -32
- package/plugin/dist/core/principle-tree-ledger-adapter.js +0 -125
- package/plugin/dist/hooks/subagent.d.ts +0 -9
- package/plugin/dist/hooks/subagent.js +0 -122
- package/plugin/dist/service/central-database.d.ts +0 -138
- package/plugin/dist/service/central-database.js +0 -731
- package/plugin/dist/service/central-sync-service.d.ts +0 -8
- package/plugin/dist/service/central-sync-service.js +0 -71
- package/plugin/scripts/validate-live-path.ts +0 -480
|
@@ -226,7 +226,65 @@
|
|
|
226
226
|
"noHumanSummary": "PD 尚未为此条证据生成行为摘要",
|
|
227
227
|
"inReviewQueueCount": "已有 {{count}} 条进入审查队列",
|
|
228
228
|
"goToGovernance": "去治理首页处理",
|
|
229
|
-
"expandTechDetails": "展开技术细节"
|
|
229
|
+
"expandTechDetails": "展开技术细节",
|
|
230
|
+
"intentTensionTitle": "意图张力",
|
|
231
|
+
"intentTensionSourceLabel": "来源",
|
|
232
|
+
"intentTensionSourceNone": "无意图张力",
|
|
233
|
+
"intentTensionSourceActionDrift": "行动偏离",
|
|
234
|
+
"intentTensionSourceIntentSuspect": "意图存疑",
|
|
235
|
+
"intentTensionSourceHealthyTension": "良性张力",
|
|
236
|
+
"intentTensionEvidenceStrengthLabel": "证据强度",
|
|
237
|
+
"intentTensionEvidenceStrengthWeak": "弱",
|
|
238
|
+
"intentTensionEvidenceStrengthModerate": "中",
|
|
239
|
+
"intentTensionEvidenceStrengthStrong": "强",
|
|
240
|
+
"intentTensionRelatedIntentFieldsLabel": "关联 INTENT 字段",
|
|
241
|
+
"intentTensionEvidenceLabel": "证据",
|
|
242
|
+
"intentTensionExplanationLabel": "说明",
|
|
243
|
+
"intentTensionSuggestedActionLabel": "建议拥有者操作",
|
|
244
|
+
"intentTensionSuggestedActionConfirmDrift": "确认偏离",
|
|
245
|
+
"intentTensionSuggestedActionReviseIntent": "修订意图",
|
|
246
|
+
"intentTensionSuggestedActionObserve": "继续观察",
|
|
247
|
+
"intentTensionSuggestedActionDismiss": "忽略",
|
|
248
|
+
"intentTensionSuggestedActionPromoteToPrinciple": "提升为原则",
|
|
249
|
+
"intentTensionSuggestedActionPromoteToRulehost": "提升为 RuleHost",
|
|
250
|
+
"intentTensionIntentDocHashLabel": "INTENT 文档哈希",
|
|
251
|
+
"intentTensionNoTension": "未检测到意图张力",
|
|
252
|
+
"intentTensionArtifactDegraded": "此记录的诊断器产物无法完整解析,意图张力可能不可用。",
|
|
253
|
+
"ownerDecisionPanelTitle": "拥有者决策",
|
|
254
|
+
"ownerDecisionPanelSubtitle": "记录您对此意图张力的决策。后续操作仅在决策持久化后才会显示。",
|
|
255
|
+
"ownerDecisionNoteLabel": "备注(可选)",
|
|
256
|
+
"ownerDecisionNotePlaceholder": "为此决策添加上下文",
|
|
257
|
+
"ownerDecisionSubmitConfirmDrift": "确认漂移",
|
|
258
|
+
"ownerDecisionSubmitReviseIntent": "修订意图",
|
|
259
|
+
"ownerDecisionSubmitObserve": "观察",
|
|
260
|
+
"ownerDecisionSubmitDismiss": "驳回",
|
|
261
|
+
"ownerDecisionSubmitPromoteToPrinciple": "沉淀为原则",
|
|
262
|
+
"ownerDecisionSubmitPromoteToRulehost": "转为 RuleHost",
|
|
263
|
+
"ownerDecisionSubmitting": "正在记录决策…",
|
|
264
|
+
"ownerDecisionRecorded": "决策已记录",
|
|
265
|
+
"ownerDecisionFailed": "记录决策失败",
|
|
266
|
+
"ownerDecisionExisting": "此张力已存在决策",
|
|
267
|
+
"ownerDecisionFollowUpPlaceholder": "决策记录后,后续操作将显示在此处。",
|
|
268
|
+
"ownerDecisionLoadingExisting": "正在加载已有决策…",
|
|
269
|
+
"ownerDecisionLoadFailed": "加载已有决策失败",
|
|
270
|
+
"followUpActionsTitle": "后续动作",
|
|
271
|
+
"followUpDispatching": "正在派发…",
|
|
272
|
+
"followUpDispatchFailed": "派发后续动作失败",
|
|
273
|
+
"followUpLinkCandidateDescription": "将已有的原则候选链接到此决策。PD 不会创建新的候选——从证据链中选择或粘贴候选 ID。",
|
|
274
|
+
"followUpLinkCandidateButton": "链接候选",
|
|
275
|
+
"followUpCandidateIdPlaceholder": "粘贴候选 ID",
|
|
276
|
+
"followUpCandidateIdAriaLabel": "要链接的原则候选 ID",
|
|
277
|
+
"followUpPrefilledFromEvidenceChain": "已从证据链的链接候选预填。",
|
|
278
|
+
"followUpLinkedSuccess": "已链接候选",
|
|
279
|
+
"followUpGuideRulehostDescription": "获取将此决策转为 RuleHost 候选的 CLI 命令。PD 将创建一个审批,可在治理队列中审核。",
|
|
280
|
+
"followUpGuideRulehostButton": "查看 RuleHost 指引",
|
|
281
|
+
"followUpCliCommandLabel": "CLI 命令",
|
|
282
|
+
"followUpPatchProposalDescription": "生成只读的意图补丁建议。该建议汇总张力并提示 INTENT.md 可能需要修订的位置。PD 不会自动应用补丁。",
|
|
283
|
+
"followUpViewPatchProposalButton": "查看意图补丁建议",
|
|
284
|
+
"followUpPatchProposalLabel": "意图补丁建议",
|
|
285
|
+
"followUpPatchProposalReadOnlyBadge": "仅展示",
|
|
286
|
+
"followUpPatchProposalWarning": "仅展示——不可自动应用。拥有者若接受此建议,需手动编辑 .principles/INTENT.md。",
|
|
287
|
+
"followUpPromoteToPrincipleDescription": "链接已有的原则候选以沉淀此决策。PD 不会创建新的候选——从证据链中选择或粘贴候选 ID。"
|
|
230
288
|
},
|
|
231
289
|
"principles": {
|
|
232
290
|
"title": "原则",
|
|
@@ -589,7 +647,12 @@
|
|
|
589
647
|
"agentEnabled": "已启用",
|
|
590
648
|
"agentDisabled": "已停用",
|
|
591
649
|
"profileLabel": "配置",
|
|
592
|
-
"readinessLabel": "就绪状态"
|
|
650
|
+
"readinessLabel": "就绪状态",
|
|
651
|
+
"empathyCostHint": {
|
|
652
|
+
"body": "共情观察器已启用 — 每次关键词未命中时会调用 LLM 做深度分析(当前模型:{{provider}}/{{model}})。",
|
|
653
|
+
"muted": "如需节省成本,在 workflows.yaml 的 pd-empathy-observer.policy.model 换更便宜模型。",
|
|
654
|
+
"ack": "知道了"
|
|
655
|
+
}
|
|
593
656
|
},
|
|
594
657
|
"login": {
|
|
595
658
|
"title": "登录",
|
|
@@ -640,6 +703,106 @@
|
|
|
640
703
|
"filesUpdated": "更新了 {{count}} 个文件",
|
|
641
704
|
"networkErrorHint": "请检查网络连接后重试。",
|
|
642
705
|
"retry": "重试"
|
|
706
|
+
},
|
|
707
|
+
"intent": {
|
|
708
|
+
"eyebrow": "拥有者意图",
|
|
709
|
+
"title": "拥有者意图文档",
|
|
710
|
+
"subtitle": "单页锚点,记录拥有者的目标、不可违背的边界、以及何时应当停止并升级。仅当 intent_engineering 标志开启时,PD 才会读取此文档。",
|
|
711
|
+
"flagStatus": {
|
|
712
|
+
"enabled": "标志已开启",
|
|
713
|
+
"disabled": "标志已关闭",
|
|
714
|
+
"ariaLabel": "intent_engineering 功能标志状态",
|
|
715
|
+
"enable": "启用意图工程",
|
|
716
|
+
"enabling": "启用中…",
|
|
717
|
+
"enableFailed": "启用失败,请稍后重试或手动修改 .pd/config.yaml"
|
|
718
|
+
},
|
|
719
|
+
"editEntry": {
|
|
720
|
+
"heading": "编辑 INTENT.md",
|
|
721
|
+
"title": "拥有者自有文档",
|
|
722
|
+
"description": "PD 不会修改此文件。请在自己的编辑器中编辑,以声明或修订你的意图。",
|
|
723
|
+
"copy": "复制路径",
|
|
724
|
+
"copyAriaLabel": "复制 INTENT.md 文件路径到剪贴板"
|
|
725
|
+
},
|
|
726
|
+
"flagDisabled": {
|
|
727
|
+
"title": "意图工程已关闭",
|
|
728
|
+
"description": "intent_engineering 功能标志未开启。PD 当前不会读取 INTENT.md,不会将意图上下文注入提示词,也不会在诊断中呈现意图张力。这是 MVP-Quiet 的默认状态。"
|
|
729
|
+
},
|
|
730
|
+
"notFound": {
|
|
731
|
+
"title": "未找到 INTENT.md",
|
|
732
|
+
"description": "PD 在 .principles/ 目录中未找到 INTENT.md 文件。缺少此锚点时,基于意图的诊断无法运行。",
|
|
733
|
+
"nextAction": "运行:pd intent init --confirm --workspace <path>"
|
|
734
|
+
},
|
|
735
|
+
"oversized": {
|
|
736
|
+
"title": "INTENT.md 超过 32KB",
|
|
737
|
+
"description": "文件超过 32KB 上限。PD 拒绝读取超大文件,以保证意图解析的确定性与有界性。",
|
|
738
|
+
"nextAction": "请将 INTENT.md 精简至 32KB 以下,将长篇策略移至独立文档。"
|
|
739
|
+
},
|
|
740
|
+
"sections": {
|
|
741
|
+
"why": "为什么",
|
|
742
|
+
"desiredOutcome": "期望结果",
|
|
743
|
+
"nonNegotiables": "不可妥协项",
|
|
744
|
+
"stopEscalation": "停止 / 升级",
|
|
745
|
+
"currentStrategicFocus": "当前战略焦点"
|
|
746
|
+
},
|
|
747
|
+
"warnings": {
|
|
748
|
+
"title": "健康告警",
|
|
749
|
+
"empty": "无告警。INTENT.md 格式良好。",
|
|
750
|
+
"missing_section": "缺失章节",
|
|
751
|
+
"empty_section": "章节为空",
|
|
752
|
+
"too_vague": "章节过于简略(少于 10 个字符)",
|
|
753
|
+
"oversized": "文档超过 32KB 上限",
|
|
754
|
+
"parse_failed": "章节解析失败"
|
|
755
|
+
},
|
|
756
|
+
"meta": {
|
|
757
|
+
"title": "文档元信息",
|
|
758
|
+
"lastEditedAt": "上次编辑",
|
|
759
|
+
"contentHash": "内容哈希",
|
|
760
|
+
"path": "路径",
|
|
761
|
+
"templateTitle": "INTENT.md 模板",
|
|
762
|
+
"templateDescription": "将其复制到 .principles/INTENT.md,替换占位符为你的意图。"
|
|
763
|
+
},
|
|
764
|
+
"loadError": "加载意图文档失败",
|
|
765
|
+
"validationError": "数据格式校验失败,请刷新后重试",
|
|
766
|
+
"decisions": {
|
|
767
|
+
"sectionTitle": "拥有者决策",
|
|
768
|
+
"sectionSubtitle": "基于 IntentDecisionRecord 的轻量审计摘要,非仪表盘。",
|
|
769
|
+
"countConfirmDrift": "确认漂移",
|
|
770
|
+
"countReviseIntent": "修订意图",
|
|
771
|
+
"countObserve": "观察",
|
|
772
|
+
"countDismiss": "驳回",
|
|
773
|
+
"countPromoteToPrinciple": "沉淀为原则",
|
|
774
|
+
"countPromoteToRulehost": "转为 RuleHost",
|
|
775
|
+
"lastDecisionAtLabel": "最近决策",
|
|
776
|
+
"noDecisions": "暂无决策记录",
|
|
777
|
+
"loadError": "加载决策摘要失败"
|
|
778
|
+
}
|
|
779
|
+
},
|
|
780
|
+
"debt": {
|
|
781
|
+
"eyebrow": "原则债务",
|
|
782
|
+
"title": "原则债务管理",
|
|
783
|
+
"subtitle": "审查那些未激活、长期停滞或可能成为技术/行为负债的原则。",
|
|
784
|
+
"emptyTitle": "暂无原则债务",
|
|
785
|
+
"emptyDescription": "太棒了!你的所有活跃原则均运行正常,没有发现长期未激活或被晾在审批队列里的情况。",
|
|
786
|
+
"reasonNeverActivated": "该原则已被批准,但从未真正部署到任何运行通道(如提示词、RuleHost)。",
|
|
787
|
+
"reasonStagnant": "该原则的审批请求已在队列中滞留超过 7 天,可能已被遗忘。",
|
|
788
|
+
"suggestedAction": "建议操作",
|
|
789
|
+
"actionArchive": "归档",
|
|
790
|
+
"actionDeactivate": "停用通道",
|
|
791
|
+
"actionKeep": "保留观察",
|
|
792
|
+
"confirmArchive": "归档该原则会将其移出当前活跃原则库,确认归档吗?",
|
|
793
|
+
"confirmDeactivate": "停用该通道将使该原则不再在运行时对智能体进行拦截,确认停用吗?",
|
|
794
|
+
"deactivateSuccess": "通道停用成功。",
|
|
795
|
+
"deactivateFailed": "停用通道失败。",
|
|
796
|
+
"archiveSuccess": "原则归档成功。",
|
|
797
|
+
"archiveFailed": "原则归档失败。",
|
|
798
|
+
"undoAction": "撤销",
|
|
799
|
+
"undoSuccess": "操作已撤销。",
|
|
800
|
+
"undoFailed": "撤销操作失败。",
|
|
801
|
+
"loadError": "无法加载原则债务数据,请尝试刷新页面。",
|
|
802
|
+
"daysSinceAgo": "{{count}} 天前",
|
|
803
|
+
"demoteTooltip": "降权端点开发中",
|
|
804
|
+
"principleAriaLabel": "原则债务 {{id}}",
|
|
805
|
+
"listAriaLabel": "原则债务列表"
|
|
643
806
|
}
|
|
644
807
|
},
|
|
645
808
|
"components": {
|
|
@@ -699,7 +862,8 @@
|
|
|
699
862
|
"settings": "设置",
|
|
700
863
|
"update": "更新",
|
|
701
864
|
"pendingApprovalsAria": "{{count}} 条待审批原则",
|
|
702
|
-
"degradedSignalsAria": "{{count}} 个系统降级信号"
|
|
865
|
+
"degradedSignalsAria": "{{count}} 个系统降级信号",
|
|
866
|
+
"intent": "拥有者意图"
|
|
703
867
|
},
|
|
704
868
|
"approvalCard": {
|
|
705
869
|
"confidence": {
|
|
@@ -6,6 +6,7 @@ import { toast } from "sonner";
|
|
|
6
6
|
import { PageShell } from "../../components/layout/page-shell.js";
|
|
7
7
|
import { PageLoading } from "../../components/layout/page-loading.js";
|
|
8
8
|
import { SectionTitle } from "../../components/layout/section-title.js";
|
|
9
|
+
import { ShinyText } from "../../components/ui/shiny-text.js";
|
|
9
10
|
import { fetchAllActivations, disableActivation, fetchLifecycleMetrics, } from "../../api.js";
|
|
10
11
|
import { validateActivationsData, validateLifecycleMetricsData, isReversibleChannel, } from "./ActivationValidators.js";
|
|
11
12
|
import { enumLabel } from "../../utils/enum-labels.js";
|
|
@@ -137,7 +138,7 @@ export function ActivationPage() {
|
|
|
137
138
|
const activeActivations = activations.filter((a) => a.status === "active");
|
|
138
139
|
const inactiveActivations = activations.filter((a) => a.status === "inactive");
|
|
139
140
|
const neverActivatedCount = activations.filter((a) => a.activatedAt === null).length;
|
|
140
|
-
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.activation.eyebrow") }), _jsx("h1",
|
|
141
|
+
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.activation.eyebrow") }), _jsx(ShinyText, { as: "h1", className: "text-[29px] font-semibold tracking-tight text-ink mb-2", duration: 4.5, brightness: 0.5, disabled: activeActivations.length === 0, children: t("pages.activation.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.activation.subtitle") }), _jsxs("div", { className: "text-sm leading-relaxed text-ink-2 mb-7 px-[18px] py-[14px] bg-panel border border-line rounded-[6px]", role: "status", "aria-live": "polite", children: [_jsx("span", { className: "font-mono font-semibold text-ink tabular-nums", children: activeActivations.length }), " ", _jsx("span", { className: "text-ink-3", children: t("pages.activation.summaryActive") }), " ", "/", " ", _jsx("span", { className: "font-mono font-semibold text-ink tabular-nums", children: inactiveActivations.length }), " ", _jsx("span", { className: "text-ink-3", children: t("pages.activation.summaryInactive") }), neverActivatedCount > 0 && (_jsxs(_Fragment, { children: [" ", "/", " ", _jsx("span", { className: "font-mono font-semibold text-amber tabular-nums", children: neverActivatedCount }), " ", _jsx("span", { className: "text-amber", children: t("pages.activation.summaryNeverActivated") })] }))] }), _jsx(CapabilityBoundaryDeclaration, {}), degradedNote && (_jsx("div", { className: "mt-4 text-ink-4 text-[13px] bg-surface/60 border-l-2 border-amber px-3 py-2", children: degradedNote })), _jsxs("section", { className: "mt-8", "aria-labelledby": "section-active", children: [_jsx(SectionTitle, { id: "section-active", children: t("pages.activation.sectionActive") }), activeActivations.length > 0 ? (_jsx("div", { className: "space-y-[14px]", children: activeActivations.map((record) => (_jsx(ActivationFactCard, { record: record, lifecycleData: lifecycleCache[record.principleId], onDisable: handleDisable, disabling: disablingIds.has(record.id) }, record.id))) })) : (_jsx("div", { className: "text-ink-3 text-[13px] leading-relaxed py-3", children: t("pages.activation.emptyActive") }))] }), inactiveActivations.length > 0 && (_jsxs("section", { className: "mt-8", "aria-labelledby": "section-inactive", children: [_jsx(SectionTitle, { id: "section-inactive", children: t("pages.activation.sectionInactive") }), _jsx("div", { className: "space-y-[14px]", children: inactiveActivations.map((record) => (_jsx(ActivationFactCard, { record: record, lifecycleData: lifecycleCache[record.principleId], onDisable: handleDisable, disabling: disablingIds.has(record.id) }, record.id))) })] })), neverActivatedCount > 0 && (_jsxs("section", { className: "mt-8", "aria-labelledby": "section-never-activated", children: [_jsx(SectionTitle, { id: "section-never-activated", children: t("pages.activation.sectionNeverActivated") }), _jsx("div", { className: "space-y-[10px]", children: activations
|
|
141
142
|
.filter((a) => a.activatedAt === null)
|
|
142
143
|
.map((record) => (_jsxs("article", { className: "relative pl-[22px] py-[14px] pr-[18px] bg-panel border border-amber/20 border-l-[3px] border-l-amber rounded-[6px]", children: [_jsxs("div", { className: "text-ink-2 text-sm leading-relaxed", children: [_jsx("span", { className: "font-medium text-ink", children: t("pages.activation.neverActivatedCard") }), " ", "\u2014 ", record.action, " \u00B7 ", getChannelLabel(record.channel, t), _jsx("span", { className: "ml-2 font-mono text-[11px] text-ink-4", children: record.principleId })] }), _jsxs(Link, { to: "/debt", className: "inline-flex items-center mt-2 text-gov text-[13px] hover:underline focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", children: [t("pages.activation.viewDebt"), " \u2192"] })] }, record.id))) })] })), _jsx("footer", { className: "mt-12 pt-6 border-t border-line text-ink-3 text-[13px]", children: t("pages.activation.footer") })] }) }));
|
|
143
144
|
}
|
|
@@ -8,6 +8,7 @@ import { SectionTitle } from "../../components/layout/section-title.js";
|
|
|
8
8
|
import { fetchConfigSummary, fetchConfigCatalog, updateAgentBinding, updateDefaultRuntime, } from "../../api.js";
|
|
9
9
|
import { computeOverallReadiness, groupAgentsByReadiness, redactDiagnosticsForCopy, } from "../../utils/control-center-helpers.js";
|
|
10
10
|
import { enumLabel } from "../../utils/enum-labels.js";
|
|
11
|
+
import { EmpathyObserverCostHint } from "./EmpathyObserverCostHint.js";
|
|
11
12
|
// ── Runtime validators (H section / ERR-001/005/009/013) ─────────────────────
|
|
12
13
|
function validateSource(raw) {
|
|
13
14
|
if (typeof raw !== "string")
|
|
@@ -76,7 +77,18 @@ function validateRedactedRuntimeProfileSummary(raw) {
|
|
|
76
77
|
const apiKeyEnv = Object.hasOwn(raw, "apiKeyEnv") && typeof raw.apiKeyEnv === "string"
|
|
77
78
|
? raw.apiKeyEnv
|
|
78
79
|
: undefined;
|
|
79
|
-
|
|
80
|
+
// provider/model are optional (set by backend redactPdConfig for both
|
|
81
|
+
// pi-ai and openclaw profiles). Extract so EmpathyObserverCostHint can
|
|
82
|
+
// show the active model without parsing the label string. Aligns with
|
|
83
|
+
// the canonical validator in validators.ts (EP-01: validate fields that
|
|
84
|
+
// actually exist in the target type).
|
|
85
|
+
const provider = Object.hasOwn(raw, "provider") && typeof raw.provider === "string"
|
|
86
|
+
? raw.provider
|
|
87
|
+
: undefined;
|
|
88
|
+
const model = Object.hasOwn(raw, "model") && typeof raw.model === "string"
|
|
89
|
+
? raw.model
|
|
90
|
+
: undefined;
|
|
91
|
+
return { id, type, label, apiKeyEnv, provider, model, readiness };
|
|
80
92
|
}
|
|
81
93
|
function validateRedactedAgentSummary(raw) {
|
|
82
94
|
if (!isRecord(raw))
|
|
@@ -445,5 +457,19 @@ export function ControlCenterPage() {
|
|
|
445
457
|
};
|
|
446
458
|
const overallReadiness = computeOverallReadiness(diagnostics);
|
|
447
459
|
const availableProfiles = catalogData?.profiles ?? configData.runtimeProfiles;
|
|
448
|
-
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("section", { "aria-labelledby": "section-readiness", children: _jsx(OverallStatusCard, { readiness: overallReadiness, agents: configData.agents }) }),
|
|
460
|
+
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("section", { "aria-labelledby": "section-readiness", children: _jsx(OverallStatusCard, { readiness: overallReadiness, agents: configData.agents }) }), (() => {
|
|
461
|
+
const empathyAgent = configData.agents.find((a) => a.name === "empathyObserver" && a.enabled);
|
|
462
|
+
if (!empathyAgent)
|
|
463
|
+
return null;
|
|
464
|
+
let acked = false;
|
|
465
|
+
try {
|
|
466
|
+
acked = localStorage.getItem("pd.empathyObserver.costAck") === "true";
|
|
467
|
+
}
|
|
468
|
+
catch {
|
|
469
|
+
// localStorage unavailable (privacy mode) → not acked → render
|
|
470
|
+
}
|
|
471
|
+
if (acked)
|
|
472
|
+
return null;
|
|
473
|
+
return (_jsx(EmpathyObserverCostHint, { agent: empathyAgent, profiles: availableProfiles }));
|
|
474
|
+
})(), _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("div", { className: "bg-panel border border-line rounded-[6px] px-[18px] py-[6px]", children: configData.agents.length === 0 ? (_jsx("div", { className: "py-3 text-ink-3 text-[13px]", children: "\u2014" })) : (configData.agents.map((agent) => (_jsx(AgentRow, { agent: agent, profiles: availableProfiles, onBindingChange: handleBindingChange, saving: savingAgent }, agent.name)))) })] }), _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 })] }), _jsx("section", { className: "mt-8", "aria-labelledby": "section-diagnostics", children: _jsx(AdvancedDiagnostics, { config: configData }) })] }) }));
|
|
449
475
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { RedactedAgentSummary, RedactedRuntimeProfileSummary } from "../../api.js";
|
|
2
|
+
/**
|
|
3
|
+
* EmpathyObserverCostHint — spec 2026-06-27 §4
|
|
4
|
+
*
|
|
5
|
+
* A克制、可关闭的提示条,告知 Owner:启用 empathyObserver 后会有持续的
|
|
6
|
+
* LLM 调用与 token 成本,以及当前使用的 provider/model。
|
|
7
|
+
*
|
|
8
|
+
* 双层 gate(spec §4.1):
|
|
9
|
+
* - Gate 1(父组件 ControlCenterPage):仅当 empathyObserver 已启用且
|
|
10
|
+
* localStorage 未 ack 时才挂载本组件。
|
|
11
|
+
* - Gate 2(本组件):维护 visible 内部状态,承载"知道了"dismiss 行为。
|
|
12
|
+
*
|
|
13
|
+
* 该组件不修改后端任何代码、不修改 prompt.ts、不修改 resolveEmpathyObserver。
|
|
14
|
+
* 纯前端 localStorage 控制,清掉就重新出现,fail-open(隐私模式仍可见)。
|
|
15
|
+
*
|
|
16
|
+
* ERR entries (spec §8):
|
|
17
|
+
* - ERR-001/ERR-005: 消费 ControlCenterPage 已经过 type guard 的数据,无 untrusted 原始数据
|
|
18
|
+
* - ERR-009/ERR-010: provider/model 取不到时用 '—' 显式降级
|
|
19
|
+
* - ERR-013: localStorage 读取与写入用 try/catch 包裹
|
|
20
|
+
*/
|
|
21
|
+
interface EmpathyObserverCostHintProps {
|
|
22
|
+
/** empathyObserver agent row (already validated by parent) */
|
|
23
|
+
agent: RedactedAgentSummary;
|
|
24
|
+
/** runtime profiles — used to resolve provider/model */
|
|
25
|
+
profiles: RedactedRuntimeProfileSummary[];
|
|
26
|
+
}
|
|
27
|
+
export declare function EmpathyObserverCostHint({ agent, profiles, }: EmpathyObserverCostHintProps): import("react/jsx-runtime").JSX.Element | null;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { enumLabel } from "../../utils/enum-labels.js";
|
|
5
|
+
const COST_ACK_KEY = "pd.empathyObserver.costAck";
|
|
6
|
+
export function EmpathyObserverCostHint({ agent, profiles, }) {
|
|
7
|
+
const { t } = useTranslation();
|
|
8
|
+
// Gate 2: dismiss 后不再渲染。localStorage ack 时初始即隐藏。
|
|
9
|
+
const [visible, setVisible] = useState(() => {
|
|
10
|
+
try {
|
|
11
|
+
return localStorage.getItem(COST_ACK_KEY) !== "true";
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// 隐私模式 / localStorage 不可用 → fail-open:默认可见
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
if (!visible)
|
|
19
|
+
return null;
|
|
20
|
+
// Resolve provider/model from the agent's runtime profile.
|
|
21
|
+
// agent.runtimeProfileId is always present (validated by parent).
|
|
22
|
+
const profile = profiles.find((p) => p.id === agent.runtimeProfileId);
|
|
23
|
+
const provider = profile?.provider ?? "—";
|
|
24
|
+
const model = profile?.model ?? "—";
|
|
25
|
+
const handleAck = () => {
|
|
26
|
+
try {
|
|
27
|
+
localStorage.setItem(COST_ACK_KEY, "true");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// 隐私模式等:写入失败不影响 dismiss 体验,下次仍会出现(fail-open)
|
|
31
|
+
}
|
|
32
|
+
setVisible(false);
|
|
33
|
+
};
|
|
34
|
+
return (_jsxs("div", { className: "bg-surface/60 border border-amber/20 border-l-2 border-l-amber rounded-[6px] px-3 py-2 mt-4", children: [_jsx("p", { className: "text-ink-2 text-[14px] leading-relaxed", children: t("pages.controlCenter.empathyCostHint.body", {
|
|
35
|
+
provider,
|
|
36
|
+
model,
|
|
37
|
+
}) }), _jsx("p", { className: "text-ink-3 text-[12px] mt-1 leading-relaxed", children: t("pages.controlCenter.empathyCostHint.muted") }), _jsx("div", { className: "mt-2 flex justify-end", children: _jsx("button", { type: "button", onClick: handleAck, className: "border border-gov bg-gov text-paper rounded-[3px] px-[14px] py-[6px] text-[12.5px] font-medium hover:bg-gov-2 transition-colors focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", "aria-label": t("pages.controlCenter.empathyCostHint.ack"), children: t("pages.controlCenter.empathyCostHint.ack") }) }), _jsx("span", { className: "sr-only", children: enumLabel("featureId", "empathy_observer", t) })] }));
|
|
38
|
+
}
|
|
@@ -1,5 +1,222 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect, useCallback } from "react";
|
|
3
|
+
import { useTranslation } from "react-i18next";
|
|
4
|
+
import { toast } from "sonner";
|
|
2
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 { ShinyText } from "../../components/ui/shiny-text.js";
|
|
9
|
+
import { Button } from "../../components/ui/button.js";
|
|
10
|
+
import { AlertTriangle, Archive, Trash2 } from "lucide-react";
|
|
11
|
+
import { fetchPrinciples, fetchAllActivations, fetchGovernanceQueue, archivePrinciple, unarchivePrinciple, disableActivation, } from "../../api.js";
|
|
12
|
+
import { validatePrinciplesList, validateActivations, validateGovernanceQueue, } from "../../utils/validators.js";
|
|
13
|
+
// ── Debt Card Component (Handles its own J.1 confirmation state) ──────────────
|
|
14
|
+
function DebtCard({ item, onArchive, onDeactivate, isProcessing, }) {
|
|
15
|
+
const { t } = useTranslation();
|
|
16
|
+
const [confirmAction, setConfirmAction] = useState(null);
|
|
17
|
+
const [selectedActivationId, setSelectedActivationId] = useState(null);
|
|
18
|
+
const handleArchiveClick = () => {
|
|
19
|
+
setConfirmAction("archive");
|
|
20
|
+
};
|
|
21
|
+
const handleDeactivateClick = (activationId) => {
|
|
22
|
+
setSelectedActivationId(activationId);
|
|
23
|
+
setConfirmAction("deactivate");
|
|
24
|
+
};
|
|
25
|
+
const handleCancel = () => {
|
|
26
|
+
setConfirmAction(null);
|
|
27
|
+
setSelectedActivationId(null);
|
|
28
|
+
};
|
|
29
|
+
const handleConfirm = async () => {
|
|
30
|
+
if (confirmAction === "archive") {
|
|
31
|
+
await onArchive(item.id);
|
|
32
|
+
}
|
|
33
|
+
else if (confirmAction === "deactivate" && selectedActivationId) {
|
|
34
|
+
await onDeactivate(selectedActivationId, item.id);
|
|
35
|
+
}
|
|
36
|
+
setConfirmAction(null);
|
|
37
|
+
setSelectedActivationId(null);
|
|
38
|
+
};
|
|
39
|
+
// Render natural language reason based on debt type
|
|
40
|
+
const renderReason = () => {
|
|
41
|
+
if (item.type === "never_activated") {
|
|
42
|
+
return (_jsx("span", { className: "text-ink-2", children: t("pages.debt.reasonNeverActivated") }));
|
|
43
|
+
}
|
|
44
|
+
if (item.type === "stagnant") {
|
|
45
|
+
return (_jsxs("span", { className: "text-ink-2", children: [t("pages.debt.reasonStagnant"), item.daysSince !== undefined && (_jsxs("span", { className: "text-amber font-semibold ml-1", children: ["(", t("pages.debt.daysSinceAgo", { count: item.daysSince }), ")"] }))] }));
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
|
49
|
+
const isStagnant = item.type === "stagnant";
|
|
50
|
+
return (_jsx("article", { className: "p-5 bg-panel border border-line rounded-[6px] hover:border-line-2 transition-colors relative", "aria-label": t("pages.debt.principleAriaLabel", { id: item.id }), children: _jsxs("div", { className: "flex flex-col md:flex-row md:items-start gap-4", children: [_jsxs("div", { className: "flex-1 space-y-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "font-mono text-[11px] uppercase px-2 py-0.5 bg-line rounded text-ink-3", children: item.id }), _jsx("span", { className: `font-mono text-[11px] uppercase px-2 py-0.5 rounded ${isStagnant
|
|
51
|
+
? "bg-amber/10 text-amber"
|
|
52
|
+
: "bg-danger/10 text-danger"}`, children: isStagnant ? t("pages.focus.summaryStagnation") : t("pages.sidebar.debt") })] }), _jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-ink text-[15px] font-medium leading-relaxed", children: item.text }), item.triggerPattern && (_jsxs("p", { className: "text-ink-3 text-[13px] font-mono leading-relaxed", children: [t("principles.detail.triggerLabel", { defaultValue: "Trigger:" }), " ", item.triggerPattern] }))] }), _jsxs("div", { className: "flex items-start gap-2 pt-1", children: [_jsx(AlertTriangle, { className: "w-4 h-4 text-amber shrink-0 mt-0.5", "aria-hidden": "true" }), _jsxs("div", { className: "text-[13px] leading-relaxed", children: [_jsxs("span", { className: "font-semibold text-ink-3", children: [t("pages.debt.suggestedAction"), ": "] }), renderReason()] })] })] }), _jsx("div", { className: "flex flex-col gap-2 shrink-0 md:w-48", children: !confirmAction ? (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: handleArchiveClick, disabled: isProcessing, className: "w-full inline-flex items-center justify-center gap-1.5 border border-line bg-surface text-ink hover:border-line-2 transition-colors rounded-[3px] px-[14px] py-[6px] text-[12.5px] focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", "data-testid": `archive-btn-${item.id}`, children: [_jsx(Archive, { className: "w-4 h-4 text-ink-3", "aria-hidden": "true" }), t("pages.debt.actionArchive")] }), item.activeActivationRecords && item.activeActivationRecords.length > 0 ? (item.activeActivationRecords.map((ar) => (_jsxs("button", { onClick: () => handleDeactivateClick(ar.id), disabled: isProcessing, className: "w-full inline-flex items-center justify-center gap-1.5 border border-danger/20 bg-surface text-danger hover:bg-danger/5 transition-colors rounded-[3px] px-[14px] py-[6px] text-[12.5px] focus-visible:outline-2 focus-visible:outline-gov focus-visible:outline-offset-2", "data-testid": `deactivate-btn-${ar.id}`, children: [_jsx(Trash2, { className: "w-4 h-4 text-danger/80", "aria-hidden": "true" }), t("pages.debt.actionDeactivate"), " (", ar.channel, ")"] }, ar.id)))) : (_jsx("button", { disabled: true, className: "w-full inline-flex items-center justify-center gap-1.5 border border-line bg-surface/50 text-ink-4 cursor-not-allowed rounded-[3px] px-[14px] py-[6px] text-[12.5px]", title: t("pages.debt.demoteTooltip"), children: t("pages.debt.actionKeep") }))] })) : (_jsxs("div", { className: "flex flex-col gap-2 p-3 bg-surface border border-amber/20 rounded-[4px] w-full", role: "alert", "data-testid": `confirm-bar-${item.id}`, children: [_jsx("p", { className: "text-ink-2 text-[12px] leading-relaxed", children: confirmAction === "archive"
|
|
53
|
+
? t("pages.debt.confirmArchive")
|
|
54
|
+
: t("pages.debt.confirmDeactivate") }), _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: "default", size: "sm", onClick: handleConfirm, disabled: isProcessing, className: "flex-1 text-[12px] py-1", "data-testid": `confirm-btn-${item.id}`, children: t("common.confirm") }), _jsx(Button, { variant: "outline", size: "sm", onClick: handleCancel, className: "flex-1 text-[12px] py-1", children: t("common.cancel") })] })] })) })] }) }));
|
|
55
|
+
}
|
|
56
|
+
// ── Main Page Component ──────────────────────────────────────────────────────
|
|
3
57
|
export function DebtPage() {
|
|
4
|
-
|
|
58
|
+
const { t } = useTranslation();
|
|
59
|
+
const [loadingState, setLoadingState] = useState("loading");
|
|
60
|
+
const [errorMessage, setErrorMessage] = useState(null);
|
|
61
|
+
const [debtItems, setDebtItems] = useState([]);
|
|
62
|
+
const [isProcessing, setIsProcessing] = useState(false);
|
|
63
|
+
const loadData = useCallback(async () => {
|
|
64
|
+
setLoadingState("loading");
|
|
65
|
+
setErrorMessage(null);
|
|
66
|
+
try {
|
|
67
|
+
const [principlesRes, activationsRes, govQueueRes] = await Promise.all([
|
|
68
|
+
fetchPrinciples("all"),
|
|
69
|
+
fetchAllActivations(),
|
|
70
|
+
fetchGovernanceQueue(),
|
|
71
|
+
]);
|
|
72
|
+
// Handle raw response validation (EP-01 / EP-03)
|
|
73
|
+
if (!principlesRes.success) {
|
|
74
|
+
setLoadingState("error");
|
|
75
|
+
setErrorMessage(principlesRes.error || "Failed to fetch principles");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (!activationsRes.success) {
|
|
79
|
+
setLoadingState("error");
|
|
80
|
+
setErrorMessage(activationsRes.error || "Failed to fetch activations");
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (!govQueueRes.success) {
|
|
84
|
+
setLoadingState("error");
|
|
85
|
+
setErrorMessage(govQueueRes.error || "Failed to fetch governance queue");
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const validatedPrinciples = validatePrinciplesList(principlesRes.data);
|
|
89
|
+
const validatedActivations = validateActivations(activationsRes.data);
|
|
90
|
+
const validatedGovQueue = validateGovernanceQueue(govQueueRes.data);
|
|
91
|
+
if (!validatedPrinciples || !validatedActivations || !validatedGovQueue) {
|
|
92
|
+
setLoadingState("error");
|
|
93
|
+
setErrorMessage("Data validation failed: unexpected response shape");
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
// Filter and build the debt list (no-complexity heuristics)
|
|
97
|
+
const allPrinciples = validatedPrinciples.principles;
|
|
98
|
+
const allActivations = validatedActivations.activations;
|
|
99
|
+
const stagnationSignals = validatedGovQueue.stagnationSignals;
|
|
100
|
+
const items = [];
|
|
101
|
+
// 1. Identify "Never Activated" Principles
|
|
102
|
+
// An active principle with status === 'active' is never activated if it has no active activations.
|
|
103
|
+
const activePrinciples = allPrinciples.filter((p) => p.status === "active");
|
|
104
|
+
for (const p of activePrinciples) {
|
|
105
|
+
const principleActivations = allActivations.filter((a) => a.principleId === p.id);
|
|
106
|
+
const hasActiveActivation = principleActivations.some((a) => a.status === "active");
|
|
107
|
+
if (!hasActiveActivation) {
|
|
108
|
+
// It qualifies as never-activated debt
|
|
109
|
+
items.push({
|
|
110
|
+
id: p.id,
|
|
111
|
+
text: p.text,
|
|
112
|
+
triggerPattern: p.triggerPattern,
|
|
113
|
+
type: "never_activated",
|
|
114
|
+
status: p.status,
|
|
115
|
+
activeActivationRecords: principleActivations.filter((a) => a.status === "active"),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// 2. Identify "Stagnant" Principle Approvals (stagnant for > 7 days)
|
|
120
|
+
for (const signal of stagnationSignals) {
|
|
121
|
+
// Skip if we already added it (should not overlap, but to be safe)
|
|
122
|
+
if (items.some((item) => item.id === signal.principleId)) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
const p = allPrinciples.find((p) => p.id === signal.principleId);
|
|
126
|
+
if (p) {
|
|
127
|
+
items.push({
|
|
128
|
+
id: p.id,
|
|
129
|
+
text: p.text,
|
|
130
|
+
triggerPattern: p.triggerPattern,
|
|
131
|
+
type: "stagnant",
|
|
132
|
+
daysSince: signal.daysSince,
|
|
133
|
+
status: p.status,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
setDebtItems(items);
|
|
138
|
+
setLoadingState("loaded");
|
|
139
|
+
}
|
|
140
|
+
catch (e) {
|
|
141
|
+
setLoadingState("error");
|
|
142
|
+
setErrorMessage(e instanceof Error ? e.message : String(e));
|
|
143
|
+
}
|
|
144
|
+
}, []);
|
|
145
|
+
useEffect(() => {
|
|
146
|
+
loadData();
|
|
147
|
+
}, [loadData]);
|
|
148
|
+
// Archive Action: calls POST /api/principles/:id/archive and triggers J.2 Undo toast
|
|
149
|
+
const handleArchive = async (principleId) => {
|
|
150
|
+
setIsProcessing(true);
|
|
151
|
+
const result = await archivePrinciple(principleId);
|
|
152
|
+
if (result.success) {
|
|
153
|
+
// Remove it from the local view immediately
|
|
154
|
+
setDebtItems((prev) => prev.filter((item) => item.id !== principleId));
|
|
155
|
+
// J.2 Undo Toast: 5 seconds countdown action link
|
|
156
|
+
toast.success(t("pages.debt.archiveSuccess"), {
|
|
157
|
+
description: t("pages.activation.disableSuccessDescription", { id: principleId, defaultValue: `Principle ${principleId} archived` }),
|
|
158
|
+
action: {
|
|
159
|
+
label: t("pages.debt.undoAction"),
|
|
160
|
+
onClick: async () => {
|
|
161
|
+
const undoResult = await unarchivePrinciple(principleId);
|
|
162
|
+
if (undoResult.success) {
|
|
163
|
+
toast.success(t("pages.debt.undoSuccess"));
|
|
164
|
+
loadData(); // Reload to restore the principle in list
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
toast.error(t("pages.debt.undoFailed"));
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
duration: 5000,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
toast.error(t("pages.debt.archiveFailed"), {
|
|
176
|
+
description: result.error,
|
|
177
|
+
duration: 8000,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
setIsProcessing(false);
|
|
181
|
+
};
|
|
182
|
+
// Deactivate Action: calls POST /api/v1/activations/:id/disable
|
|
183
|
+
const handleDeactivate = async (activationId, principleId) => {
|
|
184
|
+
setIsProcessing(true);
|
|
185
|
+
const result = await disableActivation(activationId);
|
|
186
|
+
if (result.success) {
|
|
187
|
+
// Update local state by filtering out this deactivated record
|
|
188
|
+
setDebtItems((prev) => prev
|
|
189
|
+
.map((item) => {
|
|
190
|
+
if (item.id !== principleId)
|
|
191
|
+
return item;
|
|
192
|
+
const updatedActivations = item.activeActivationRecords?.filter((ar) => ar.id !== activationId);
|
|
193
|
+
return {
|
|
194
|
+
...item,
|
|
195
|
+
activeActivationRecords: updatedActivations,
|
|
196
|
+
};
|
|
197
|
+
}));
|
|
198
|
+
toast.success(t("pages.debt.deactivateSuccess"), {
|
|
199
|
+
description: t("pages.activation.disableSuccessDescription", { id: principleId }),
|
|
200
|
+
duration: 5000,
|
|
201
|
+
});
|
|
202
|
+
loadData(); // reload fresh state
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
toast.error(t("pages.debt.deactivateFailed"), {
|
|
206
|
+
description: result.error,
|
|
207
|
+
duration: 8000,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
setIsProcessing(false);
|
|
211
|
+
};
|
|
212
|
+
// ── Loading state ──────────────────────────────────────────────────────────
|
|
213
|
+
if (loadingState === "loading") {
|
|
214
|
+
return (_jsx(PageShell, { children: _jsx(PageLoading, { cardCount: 3, label: t("common.loading") }) }));
|
|
215
|
+
}
|
|
216
|
+
// ── Error state (ERR-002: degradation with explanation) ────────────────────
|
|
217
|
+
if (loadingState === "error") {
|
|
218
|
+
return (_jsxs(PageShell, { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.debt.eyebrow") }), _jsx("h1", { className: "text-[29px] font-semibold tracking-tight text-ink mb-2", children: t("pages.debt.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.debt.loadError") }), errorMessage && (_jsx("p", { className: "mt-2 text-ink-4 text-[13px] font-mono", children: errorMessage }))] })] }));
|
|
219
|
+
}
|
|
220
|
+
// ── Loaded state ───────────────────────────────────────────────────────────
|
|
221
|
+
return (_jsx(PageShell, { children: _jsxs("div", { className: "animate-[pdFadeIn_400ms_ease-out] space-y-6", children: [_jsxs("div", { children: [_jsx("div", { className: "font-mono text-[12px] tracking-[0.14em] text-ink-3 uppercase mb-3", children: t("pages.debt.eyebrow") }), _jsx(ShinyText, { as: "h1", className: "text-[29px] font-semibold tracking-tight text-ink mb-2", duration: 4.5, brightness: 0.5, disabled: debtItems.length === 0, children: t("pages.debt.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed", children: t("pages.debt.subtitle") })] }), _jsx("section", { "aria-label": t("pages.debt.listAriaLabel"), className: "space-y-[14px]", children: debtItems.length > 0 ? (_jsxs(_Fragment, { children: [_jsxs(SectionTitle, { id: "section-debt-list", children: [t("pages.sidebar.debt"), " (", debtItems.length, ")"] }), _jsx("div", { className: "space-y-[14px]", children: debtItems.map((item) => (_jsx(DebtCard, { item: item, onArchive: handleArchive, onDeactivate: handleDeactivate, isProcessing: isProcessing }, `${item.id}-${item.type}`))) })] })) : (_jsxs("div", { className: "p-8 text-center bg-panel border border-line border-dashed rounded-[6px] space-y-3", role: "status", children: [_jsx("p", { className: "text-ink-2 font-medium text-[16px]", children: t("pages.debt.emptyTitle") }), _jsx("p", { className: "text-ink-3 text-[13px] max-w-[500px] mx-auto leading-relaxed", children: t("pages.debt.emptyDescription") })] })) })] }) }));
|
|
5
222
|
}
|
|
@@ -7,6 +7,7 @@ import { PageShell } from "../../components/layout/page-shell.js";
|
|
|
7
7
|
import { PageLoading } from "../../components/layout/page-loading.js";
|
|
8
8
|
import { SectionTitle } from "../../components/layout/section-title.js";
|
|
9
9
|
import { DailyThoughtCard } from "../../components/focus/daily-thought-card.js";
|
|
10
|
+
import { ShinyText } from "../../components/ui/shiny-text.js";
|
|
10
11
|
import { fetchGovernanceQueue, fetchApprovalsGrouped, approveApproval, rejectApproval, editApproval, } from "../../api.js";
|
|
11
12
|
export function summarizeDecisionResults(results) {
|
|
12
13
|
const failures = results.filter((result) => !result.success);
|
|
@@ -414,7 +415,7 @@ export function FocusPage() {
|
|
|
414
415
|
// Map codes to i18n text
|
|
415
416
|
const stateReason = getStateReasonText(stateReasonCode, t, pendingCount);
|
|
416
417
|
const nextAction = getNextActionText(nextActionCode, t);
|
|
417
|
-
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.focus.eyebrow") }), _jsx("h1",
|
|
418
|
+
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.focus.eyebrow") }), _jsx(ShinyText, { as: "h1", className: "text-[29px] font-semibold tracking-tight text-ink mb-2", duration: 4.5, brightness: 0.5, disabled: pendingCount === 0, children: t("pages.focus.title") }), _jsx("p", { className: "text-ink-3 text-[14px] max-w-[760px] leading-relaxed mb-7", children: t("pages.focus.subtitle") }), _jsxs("div", { className: "mb-7 px-[18px] py-[14px] bg-panel border border-line rounded-[6px]", children: [_jsx("div", { className: "flex items-center gap-2 mb-1", children: _jsx("span", { className: `inline-flex items-center rounded-[2px] px-[7px] py-1 font-mono text-[11px] uppercase ${governanceState === "owner_review_ready"
|
|
418
419
|
? "bg-gov/10 text-gov border border-gov/20"
|
|
419
420
|
: governanceState === "degraded"
|
|
420
421
|
? "bg-amber/10 text-amber border border-amber/20"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function IntentPage(): import("react/jsx-runtime").JSX.Element;
|