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
|
@@ -357,6 +357,15 @@ export function validateAgentBindingUpdate(v) {
|
|
|
357
357
|
return null;
|
|
358
358
|
return { agent: v.agent, runtimeProfile: v.runtimeProfile, enabled: v.enabled };
|
|
359
359
|
}
|
|
360
|
+
export function validateFeatureFlagUpdate(v) {
|
|
361
|
+
if (!isObject(v))
|
|
362
|
+
return null;
|
|
363
|
+
if (!Object.hasOwn(v, 'feature') || !isString(v.feature))
|
|
364
|
+
return null;
|
|
365
|
+
if (!Object.hasOwn(v, 'enabled') || !isBoolean(v.enabled))
|
|
366
|
+
return null;
|
|
367
|
+
return { feature: v.feature, enabled: v.enabled };
|
|
368
|
+
}
|
|
360
369
|
export function validateReadinessCheck(v) {
|
|
361
370
|
if (!isObject(v))
|
|
362
371
|
return null;
|
|
@@ -934,6 +943,320 @@ const VALID_EVIDENCE_CHAIN_STATES = new Set([
|
|
|
934
943
|
'malformed',
|
|
935
944
|
'degraded',
|
|
936
945
|
]);
|
|
946
|
+
// ── Intent Tension (PRI-469, SPEC §16) ───────────────────────────────────────
|
|
947
|
+
//
|
|
948
|
+
// Frontend mirror of the core IntentTension type. `confidence` is forbidden
|
|
949
|
+
// (SPEC §16.3) — validateIntentTension rejects any object carrying it.
|
|
950
|
+
// This validator is the Console's trust boundary: untrusted JSON from the API
|
|
951
|
+
// is narrowed here before any UI code touches it (ERR-001).
|
|
952
|
+
const VALID_INTENT_TENSION_SOURCES = ['none', 'action_drift', 'intent_suspect', 'healthy_tension'];
|
|
953
|
+
const VALID_EVIDENCE_STRENGTHS = ['weak', 'moderate', 'strong'];
|
|
954
|
+
const VALID_INTENT_RELATED_FIELDS = [
|
|
955
|
+
'why',
|
|
956
|
+
'desired_outcome',
|
|
957
|
+
'non_negotiables',
|
|
958
|
+
'stop_escalation',
|
|
959
|
+
'current_strategic_focus',
|
|
960
|
+
];
|
|
961
|
+
const VALID_SUGGESTED_OWNER_ACTIONS = [
|
|
962
|
+
'confirm_drift',
|
|
963
|
+
'revise_intent',
|
|
964
|
+
'observe',
|
|
965
|
+
'dismiss',
|
|
966
|
+
'promote_to_principle',
|
|
967
|
+
'promote_to_rulehost',
|
|
968
|
+
];
|
|
969
|
+
/**
|
|
970
|
+
* Validate an untrusted `intentTension` object from the EvidenceChain API
|
|
971
|
+
* response. Returns `null` when malformed; the caller (validateEvidenceChainRecord)
|
|
972
|
+
* treats a `null` intentTension as "not present" so the record is still usable.
|
|
973
|
+
*
|
|
974
|
+
* SPEC §16.3: `confidence` is forbidden — explicitly rejected here.
|
|
975
|
+
* SPEC §16.4: evidence is capped at 3 items; we accept up to 3 and reject
|
|
976
|
+
* arrays with non-string elements (ERR-005/007).
|
|
977
|
+
*/
|
|
978
|
+
export function validateIntentTension(v) {
|
|
979
|
+
if (!isObject(v))
|
|
980
|
+
return null;
|
|
981
|
+
// SPEC §16.3: confidence is forbidden on intentTension.
|
|
982
|
+
if (Object.hasOwn(v, 'confidence'))
|
|
983
|
+
return null;
|
|
984
|
+
// Required fields (ERR-009: fail loud when missing or wrong type)
|
|
985
|
+
if (!Object.hasOwn(v, 'source') || !isString(v.source))
|
|
986
|
+
return null;
|
|
987
|
+
if (!VALID_INTENT_TENSION_SOURCES.includes(v.source))
|
|
988
|
+
return null;
|
|
989
|
+
if (!Object.hasOwn(v, 'evidenceStrength') || !isString(v.evidenceStrength))
|
|
990
|
+
return null;
|
|
991
|
+
if (!VALID_EVIDENCE_STRENGTHS.includes(v.evidenceStrength))
|
|
992
|
+
return null;
|
|
993
|
+
if (!Object.hasOwn(v, 'relatedIntentFields') || !Array.isArray(v.relatedIntentFields))
|
|
994
|
+
return null;
|
|
995
|
+
const relatedIntentFields = [];
|
|
996
|
+
for (const f of v.relatedIntentFields) {
|
|
997
|
+
if (typeof f !== 'string')
|
|
998
|
+
return null;
|
|
999
|
+
if (!VALID_INTENT_RELATED_FIELDS.includes(f))
|
|
1000
|
+
return null;
|
|
1001
|
+
relatedIntentFields.push(f);
|
|
1002
|
+
}
|
|
1003
|
+
if (!Object.hasOwn(v, 'evidence') || !Array.isArray(v.evidence))
|
|
1004
|
+
return null;
|
|
1005
|
+
const evidence = [];
|
|
1006
|
+
for (const e of v.evidence) {
|
|
1007
|
+
if (typeof e !== 'string')
|
|
1008
|
+
return null;
|
|
1009
|
+
evidence.push(e);
|
|
1010
|
+
}
|
|
1011
|
+
// SPEC §16.4: cap at 3. Server-side already truncates, but the frontend
|
|
1012
|
+
// must not trust that — enforce the cap here too (defense in depth).
|
|
1013
|
+
const truncatedEvidence = evidence.slice(0, 3);
|
|
1014
|
+
if (!Object.hasOwn(v, 'explanation') || !isString(v.explanation))
|
|
1015
|
+
return null;
|
|
1016
|
+
if (v.explanation.length === 0)
|
|
1017
|
+
return null;
|
|
1018
|
+
if (!Object.hasOwn(v, 'suggestedOwnerAction') || !isString(v.suggestedOwnerAction))
|
|
1019
|
+
return null;
|
|
1020
|
+
if (!VALID_SUGGESTED_OWNER_ACTIONS.includes(v.suggestedOwnerAction))
|
|
1021
|
+
return null;
|
|
1022
|
+
const result = {
|
|
1023
|
+
source: v.source,
|
|
1024
|
+
evidenceStrength: v.evidenceStrength,
|
|
1025
|
+
relatedIntentFields,
|
|
1026
|
+
evidence: truncatedEvidence,
|
|
1027
|
+
explanation: v.explanation,
|
|
1028
|
+
suggestedOwnerAction: v.suggestedOwnerAction,
|
|
1029
|
+
};
|
|
1030
|
+
// Optional: intentDocHash
|
|
1031
|
+
if (Object.hasOwn(v, 'intentDocHash')) {
|
|
1032
|
+
if (!isString(v.intentDocHash))
|
|
1033
|
+
return null;
|
|
1034
|
+
result.intentDocHash = v.intentDocHash;
|
|
1035
|
+
}
|
|
1036
|
+
return result;
|
|
1037
|
+
}
|
|
1038
|
+
/**
|
|
1039
|
+
* Validate an untrusted IntentDecisionRecord object from the API.
|
|
1040
|
+
* Returns null when malformed (Rule 3: fail loud on missing/wrong-type fields).
|
|
1041
|
+
*
|
|
1042
|
+
* Enum fields (source, evidenceStrength, ownerAction) are validated against
|
|
1043
|
+
* the same sets used by validateIntentTension. relatedIntentFields elements
|
|
1044
|
+
* are validated against VALID_INTENT_RELATED_FIELDS.
|
|
1045
|
+
*/
|
|
1046
|
+
export function validateIntentDecisionRecord(v) {
|
|
1047
|
+
if (!isObject(v))
|
|
1048
|
+
return null;
|
|
1049
|
+
// Required fields (ERR-009: fail loud when missing or wrong type)
|
|
1050
|
+
if (!Object.hasOwn(v, 'id') || !isString(v.id))
|
|
1051
|
+
return null;
|
|
1052
|
+
if (!Object.hasOwn(v, 'source') || !isString(v.source))
|
|
1053
|
+
return null;
|
|
1054
|
+
if (!VALID_INTENT_TENSION_SOURCES.includes(v.source))
|
|
1055
|
+
return null;
|
|
1056
|
+
if (!Object.hasOwn(v, 'evidenceStrength') || !isString(v.evidenceStrength))
|
|
1057
|
+
return null;
|
|
1058
|
+
if (!VALID_EVIDENCE_STRENGTHS.includes(v.evidenceStrength))
|
|
1059
|
+
return null;
|
|
1060
|
+
if (!Object.hasOwn(v, 'relatedIntentFields') || !Array.isArray(v.relatedIntentFields))
|
|
1061
|
+
return null;
|
|
1062
|
+
const relatedIntentFields = [];
|
|
1063
|
+
for (const f of v.relatedIntentFields) {
|
|
1064
|
+
if (typeof f !== 'string')
|
|
1065
|
+
return null;
|
|
1066
|
+
if (!VALID_INTENT_RELATED_FIELDS.includes(f))
|
|
1067
|
+
return null;
|
|
1068
|
+
relatedIntentFields.push(f);
|
|
1069
|
+
}
|
|
1070
|
+
if (!Object.hasOwn(v, 'ownerAction') || !isString(v.ownerAction))
|
|
1071
|
+
return null;
|
|
1072
|
+
if (!VALID_SUGGESTED_OWNER_ACTIONS.includes(v.ownerAction))
|
|
1073
|
+
return null;
|
|
1074
|
+
if (!Object.hasOwn(v, 'evidenceRefs') || !Array.isArray(v.evidenceRefs))
|
|
1075
|
+
return null;
|
|
1076
|
+
const evidenceRefs = [];
|
|
1077
|
+
for (const e of v.evidenceRefs) {
|
|
1078
|
+
if (typeof e !== 'string')
|
|
1079
|
+
return null;
|
|
1080
|
+
evidenceRefs.push(e);
|
|
1081
|
+
}
|
|
1082
|
+
if (!Object.hasOwn(v, 'createdAt') || !isString(v.createdAt))
|
|
1083
|
+
return null;
|
|
1084
|
+
const result = {
|
|
1085
|
+
id: v.id,
|
|
1086
|
+
source: v.source,
|
|
1087
|
+
evidenceStrength: v.evidenceStrength,
|
|
1088
|
+
relatedIntentFields,
|
|
1089
|
+
ownerAction: v.ownerAction,
|
|
1090
|
+
evidenceRefs,
|
|
1091
|
+
createdAt: v.createdAt,
|
|
1092
|
+
};
|
|
1093
|
+
// Optional fields — fail loud when present but wrong type (ERR-009)
|
|
1094
|
+
if (Object.hasOwn(v, 'painId')) {
|
|
1095
|
+
if (!isString(v.painId))
|
|
1096
|
+
return null;
|
|
1097
|
+
result.painId = v.painId;
|
|
1098
|
+
}
|
|
1099
|
+
if (Object.hasOwn(v, 'taskId')) {
|
|
1100
|
+
if (!isString(v.taskId))
|
|
1101
|
+
return null;
|
|
1102
|
+
result.taskId = v.taskId;
|
|
1103
|
+
}
|
|
1104
|
+
if (Object.hasOwn(v, 'runId')) {
|
|
1105
|
+
if (!isString(v.runId))
|
|
1106
|
+
return null;
|
|
1107
|
+
result.runId = v.runId;
|
|
1108
|
+
}
|
|
1109
|
+
if (Object.hasOwn(v, 'intentDocHash')) {
|
|
1110
|
+
if (!isString(v.intentDocHash))
|
|
1111
|
+
return null;
|
|
1112
|
+
result.intentDocHash = v.intentDocHash;
|
|
1113
|
+
}
|
|
1114
|
+
if (Object.hasOwn(v, 'resultingCandidateId')) {
|
|
1115
|
+
if (!isString(v.resultingCandidateId))
|
|
1116
|
+
return null;
|
|
1117
|
+
result.resultingCandidateId = v.resultingCandidateId;
|
|
1118
|
+
}
|
|
1119
|
+
if (Object.hasOwn(v, 'resultingRuleCandidateId')) {
|
|
1120
|
+
if (!isString(v.resultingRuleCandidateId))
|
|
1121
|
+
return null;
|
|
1122
|
+
result.resultingRuleCandidateId = v.resultingRuleCandidateId;
|
|
1123
|
+
}
|
|
1124
|
+
if (Object.hasOwn(v, 'patchProposalId')) {
|
|
1125
|
+
if (!isString(v.patchProposalId))
|
|
1126
|
+
return null;
|
|
1127
|
+
result.patchProposalId = v.patchProposalId;
|
|
1128
|
+
}
|
|
1129
|
+
return result;
|
|
1130
|
+
}
|
|
1131
|
+
/**
|
|
1132
|
+
* Validate a list of IntentDecisionRecord objects. Returns null if any
|
|
1133
|
+
* element is malformed (ERR-005/007: validate array element types).
|
|
1134
|
+
*/
|
|
1135
|
+
export function validateIntentDecisionList(v) {
|
|
1136
|
+
return validateArray(v, validateIntentDecisionRecord);
|
|
1137
|
+
}
|
|
1138
|
+
/**
|
|
1139
|
+
* Validate the POST /api/v1/intent-decisions response envelope.
|
|
1140
|
+
* Shape: { record: IntentDecisionRecord, created: boolean }
|
|
1141
|
+
*/
|
|
1142
|
+
export function validateIntentDecisionResult(v) {
|
|
1143
|
+
if (!isObject(v))
|
|
1144
|
+
return null;
|
|
1145
|
+
if (!Object.hasOwn(v, 'record'))
|
|
1146
|
+
return null;
|
|
1147
|
+
const record = validateIntentDecisionRecord(v.record);
|
|
1148
|
+
if (record === null)
|
|
1149
|
+
return null;
|
|
1150
|
+
if (!Object.hasOwn(v, 'created') || !isBoolean(v.created))
|
|
1151
|
+
return null;
|
|
1152
|
+
return { record, created: v.created };
|
|
1153
|
+
}
|
|
1154
|
+
/**
|
|
1155
|
+
* Validate the GET /api/v1/intent-decisions/summary response.
|
|
1156
|
+
* All 6 count keys must be present with non-negative finite numbers.
|
|
1157
|
+
* lastDecisionAt: null is valid, string is valid, anything else returns null.
|
|
1158
|
+
*/
|
|
1159
|
+
export function validateIntentDecisionSummary(v) {
|
|
1160
|
+
if (!isObject(v))
|
|
1161
|
+
return null;
|
|
1162
|
+
if (!Object.hasOwn(v, 'counts') || !isObject(v.counts))
|
|
1163
|
+
return null;
|
|
1164
|
+
const { counts } = v;
|
|
1165
|
+
// Explicit per-key checks so isNumber type guards narrow each property.
|
|
1166
|
+
if (!Object.hasOwn(counts, 'confirm_drift') || !isNumber(counts.confirm_drift) || counts.confirm_drift < 0)
|
|
1167
|
+
return null;
|
|
1168
|
+
if (!Object.hasOwn(counts, 'revise_intent') || !isNumber(counts.revise_intent) || counts.revise_intent < 0)
|
|
1169
|
+
return null;
|
|
1170
|
+
if (!Object.hasOwn(counts, 'observe') || !isNumber(counts.observe) || counts.observe < 0)
|
|
1171
|
+
return null;
|
|
1172
|
+
if (!Object.hasOwn(counts, 'dismiss') || !isNumber(counts.dismiss) || counts.dismiss < 0)
|
|
1173
|
+
return null;
|
|
1174
|
+
if (!Object.hasOwn(counts, 'promote_to_principle') || !isNumber(counts.promote_to_principle) || counts.promote_to_principle < 0)
|
|
1175
|
+
return null;
|
|
1176
|
+
if (!Object.hasOwn(counts, 'promote_to_rulehost') || !isNumber(counts.promote_to_rulehost) || counts.promote_to_rulehost < 0)
|
|
1177
|
+
return null;
|
|
1178
|
+
// lastDecisionAt: null or string
|
|
1179
|
+
if (!Object.hasOwn(v, 'lastDecisionAt'))
|
|
1180
|
+
return null;
|
|
1181
|
+
const { lastDecisionAt } = v;
|
|
1182
|
+
if (lastDecisionAt !== null && !isString(lastDecisionAt))
|
|
1183
|
+
return null;
|
|
1184
|
+
return {
|
|
1185
|
+
counts: {
|
|
1186
|
+
confirm_drift: counts.confirm_drift,
|
|
1187
|
+
revise_intent: counts.revise_intent,
|
|
1188
|
+
observe: counts.observe,
|
|
1189
|
+
dismiss: counts.dismiss,
|
|
1190
|
+
promote_to_principle: counts.promote_to_principle,
|
|
1191
|
+
promote_to_rulehost: counts.promote_to_rulehost,
|
|
1192
|
+
},
|
|
1193
|
+
lastDecisionAt,
|
|
1194
|
+
};
|
|
1195
|
+
}
|
|
1196
|
+
const FOLLOW_UP_RESPONSE_TYPES = new Set([
|
|
1197
|
+
'link_candidate',
|
|
1198
|
+
'guide_rulehost',
|
|
1199
|
+
'generate_patch_proposal',
|
|
1200
|
+
]);
|
|
1201
|
+
/**
|
|
1202
|
+
* Validate the POST /api/v1/intent-decisions/:id/follow-up response.
|
|
1203
|
+
*
|
|
1204
|
+
* The response is a discriminated union on the `type` field. Each branch has
|
|
1205
|
+
* its own required fields (Rule 3: fail loud on missing required fields).
|
|
1206
|
+
*
|
|
1207
|
+
* Common required fields: `type`, `decisionId`.
|
|
1208
|
+
* - link_candidate: + `record` (IntentDecisionRecordData), `linkedCandidateId`
|
|
1209
|
+
* - guide_rulehost: + `cliCommand`, `note`
|
|
1210
|
+
* - generate_patch_proposal: + `record`, `patchProposal: { id, markdown }`
|
|
1211
|
+
*/
|
|
1212
|
+
export function validateFollowUpResponse(v) {
|
|
1213
|
+
if (!isObject(v))
|
|
1214
|
+
return null;
|
|
1215
|
+
if (!Object.hasOwn(v, 'type') || !isString(v.type))
|
|
1216
|
+
return null;
|
|
1217
|
+
if (!FOLLOW_UP_RESPONSE_TYPES.has(v.type))
|
|
1218
|
+
return null;
|
|
1219
|
+
if (!Object.hasOwn(v, 'decisionId') || !isString(v.decisionId))
|
|
1220
|
+
return null;
|
|
1221
|
+
const typedType = v.type;
|
|
1222
|
+
const { decisionId } = v;
|
|
1223
|
+
if (typedType === 'link_candidate') {
|
|
1224
|
+
if (!Object.hasOwn(v, 'record'))
|
|
1225
|
+
return null;
|
|
1226
|
+
const record = validateIntentDecisionRecord(v.record);
|
|
1227
|
+
if (record === null)
|
|
1228
|
+
return null;
|
|
1229
|
+
if (!Object.hasOwn(v, 'linkedCandidateId') || !isString(v.linkedCandidateId))
|
|
1230
|
+
return null;
|
|
1231
|
+
return { type: 'link_candidate', decisionId, record, linkedCandidateId: v.linkedCandidateId };
|
|
1232
|
+
}
|
|
1233
|
+
if (typedType === 'guide_rulehost') {
|
|
1234
|
+
if (!Object.hasOwn(v, 'cliCommand') || !isString(v.cliCommand))
|
|
1235
|
+
return null;
|
|
1236
|
+
if (!Object.hasOwn(v, 'note') || !isString(v.note))
|
|
1237
|
+
return null;
|
|
1238
|
+
return { type: 'guide_rulehost', decisionId, cliCommand: v.cliCommand, note: v.note };
|
|
1239
|
+
}
|
|
1240
|
+
// generate_patch_proposal
|
|
1241
|
+
if (!Object.hasOwn(v, 'record'))
|
|
1242
|
+
return null;
|
|
1243
|
+
const record = validateIntentDecisionRecord(v.record);
|
|
1244
|
+
if (record === null)
|
|
1245
|
+
return null;
|
|
1246
|
+
if (!Object.hasOwn(v, 'patchProposal') || !isObject(v.patchProposal))
|
|
1247
|
+
return null;
|
|
1248
|
+
const pp = v.patchProposal;
|
|
1249
|
+
if (!Object.hasOwn(pp, 'id') || !isString(pp.id))
|
|
1250
|
+
return null;
|
|
1251
|
+
if (!Object.hasOwn(pp, 'markdown') || !isString(pp.markdown))
|
|
1252
|
+
return null;
|
|
1253
|
+
return {
|
|
1254
|
+
type: 'generate_patch_proposal',
|
|
1255
|
+
decisionId,
|
|
1256
|
+
record,
|
|
1257
|
+
patchProposal: { id: pp.id, markdown: pp.markdown },
|
|
1258
|
+
};
|
|
1259
|
+
}
|
|
937
1260
|
function validateEvidenceChainRecord(v) {
|
|
938
1261
|
if (!isObject(v))
|
|
939
1262
|
return null;
|
|
@@ -1040,6 +1363,20 @@ function validateEvidenceChainRecord(v) {
|
|
|
1040
1363
|
return null;
|
|
1041
1364
|
result.dreamerTaskStatus = v.dreamerTaskStatus;
|
|
1042
1365
|
}
|
|
1366
|
+
// PRI-469: intentTension (optional). When present but malformed, we DROP
|
|
1367
|
+
// the intentTension field but keep the rest of the record (the Owner still
|
|
1368
|
+
// sees the pain evidence). This matches the core's graceful-degradation
|
|
1369
|
+
// behavior where a malformed intentTension is omitted rather than failing
|
|
1370
|
+
// the entire record. The degradedReason on the record (if any) explains
|
|
1371
|
+
// what happened.
|
|
1372
|
+
if (Object.hasOwn(v, 'intentTension')) {
|
|
1373
|
+
const tension = validateIntentTension(v.intentTension);
|
|
1374
|
+
if (tension !== null) {
|
|
1375
|
+
result.intentTension = tension;
|
|
1376
|
+
}
|
|
1377
|
+
// If tension === null, we intentionally do NOT return null here — the
|
|
1378
|
+
// record is still valid, just without intentTension.
|
|
1379
|
+
}
|
|
1043
1380
|
return result;
|
|
1044
1381
|
}
|
|
1045
1382
|
export function validateEvidenceChain(v) {
|
|
@@ -1193,3 +1530,99 @@ export function validateTrajectoryData(v) {
|
|
|
1193
1530
|
}
|
|
1194
1531
|
return result;
|
|
1195
1532
|
}
|
|
1533
|
+
// ── Intent Page (PRI-466) ────────────────────────────────────────────────────
|
|
1534
|
+
const VALID_INTENT_REASONS = ['flag_disabled', 'not_found', 'read_error', 'parse_error', 'oversized'];
|
|
1535
|
+
const VALID_INTENT_WARNING_CODES = ['missing_section', 'empty_section', 'too_vague', 'oversized', 'parse_failed'];
|
|
1536
|
+
const VALID_INTENT_SECTION_KEYS = ['why', 'desiredOutcome', 'nonNegotiables', 'stopEscalation', 'currentStrategicFocus'];
|
|
1537
|
+
export function validateIntentWarning(v) {
|
|
1538
|
+
if (!isObject(v))
|
|
1539
|
+
return null;
|
|
1540
|
+
if (!Object.hasOwn(v, 'code') || !isString(v.code))
|
|
1541
|
+
return null;
|
|
1542
|
+
if (!VALID_INTENT_WARNING_CODES.includes(v.code))
|
|
1543
|
+
return null;
|
|
1544
|
+
if (!Object.hasOwn(v, 'message') || !isString(v.message))
|
|
1545
|
+
return null;
|
|
1546
|
+
const result = { code: v.code, message: v.message };
|
|
1547
|
+
// Runtime Contract Rule #3: fail loud on wrong-type optional fields,
|
|
1548
|
+
// consistent with validateIntentSummary's optional-field handling.
|
|
1549
|
+
if (Object.hasOwn(v, 'section')) {
|
|
1550
|
+
if (!isString(v.section))
|
|
1551
|
+
return null;
|
|
1552
|
+
result.section = v.section;
|
|
1553
|
+
}
|
|
1554
|
+
return result;
|
|
1555
|
+
}
|
|
1556
|
+
export function validateIntentSections(v) {
|
|
1557
|
+
if (!isObject(v))
|
|
1558
|
+
return null;
|
|
1559
|
+
const result = {};
|
|
1560
|
+
for (const key of VALID_INTENT_SECTION_KEYS) {
|
|
1561
|
+
if (Object.hasOwn(v, key)) {
|
|
1562
|
+
const val = v[key];
|
|
1563
|
+
if (val !== null && !isString(val))
|
|
1564
|
+
return null;
|
|
1565
|
+
if (isString(val)) {
|
|
1566
|
+
result[key] = val;
|
|
1567
|
+
}
|
|
1568
|
+
}
|
|
1569
|
+
}
|
|
1570
|
+
return result;
|
|
1571
|
+
}
|
|
1572
|
+
export function validateIntentSummary(v) {
|
|
1573
|
+
if (!isObject(v))
|
|
1574
|
+
return null;
|
|
1575
|
+
// Required fields
|
|
1576
|
+
if (!Object.hasOwn(v, 'ok') || !isBoolean(v.ok))
|
|
1577
|
+
return null;
|
|
1578
|
+
if (!Object.hasOwn(v, 'found') || !isBoolean(v.found))
|
|
1579
|
+
return null;
|
|
1580
|
+
if (!Object.hasOwn(v, 'flagEnabled') || !isBoolean(v.flagEnabled))
|
|
1581
|
+
return null;
|
|
1582
|
+
if (!Object.hasOwn(v, 'warnings') || !Array.isArray(v.warnings))
|
|
1583
|
+
return null;
|
|
1584
|
+
const warnings = validateArray(v.warnings, validateIntentWarning);
|
|
1585
|
+
if (warnings === null)
|
|
1586
|
+
return null;
|
|
1587
|
+
const result = {
|
|
1588
|
+
ok: v.ok,
|
|
1589
|
+
found: v.found,
|
|
1590
|
+
flagEnabled: v.flagEnabled,
|
|
1591
|
+
warnings,
|
|
1592
|
+
};
|
|
1593
|
+
// Optional fields — validate type if present, fail loud on wrong type
|
|
1594
|
+
if (Object.hasOwn(v, 'reason')) {
|
|
1595
|
+
if (!isString(v.reason))
|
|
1596
|
+
return null;
|
|
1597
|
+
if (!VALID_INTENT_REASONS.includes(v.reason))
|
|
1598
|
+
return null;
|
|
1599
|
+
result.reason = v.reason;
|
|
1600
|
+
}
|
|
1601
|
+
if (Object.hasOwn(v, 'nextAction')) {
|
|
1602
|
+
if (!isString(v.nextAction))
|
|
1603
|
+
return null;
|
|
1604
|
+
result.nextAction = v.nextAction;
|
|
1605
|
+
}
|
|
1606
|
+
if (Object.hasOwn(v, 'path')) {
|
|
1607
|
+
if (!isString(v.path))
|
|
1608
|
+
return null;
|
|
1609
|
+
result.path = v.path;
|
|
1610
|
+
}
|
|
1611
|
+
if (Object.hasOwn(v, 'contentHash')) {
|
|
1612
|
+
if (!isString(v.contentHash))
|
|
1613
|
+
return null;
|
|
1614
|
+
result.contentHash = v.contentHash;
|
|
1615
|
+
}
|
|
1616
|
+
if (Object.hasOwn(v, 'lastEditedAt')) {
|
|
1617
|
+
if (!isString(v.lastEditedAt))
|
|
1618
|
+
return null;
|
|
1619
|
+
result.lastEditedAt = v.lastEditedAt;
|
|
1620
|
+
}
|
|
1621
|
+
if (Object.hasOwn(v, 'sections')) {
|
|
1622
|
+
const sections = validateIntentSections(v.sections);
|
|
1623
|
+
if (sections === null)
|
|
1624
|
+
return null;
|
|
1625
|
+
result.sections = sections;
|
|
1626
|
+
}
|
|
1627
|
+
return result;
|
|
1628
|
+
}
|