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
|
@@ -1,527 +1,42 @@
|
|
|
1
|
-
import * as fs from 'fs';
|
|
2
|
-
import * as path from 'path';
|
|
3
|
-
import { withLock, withLockAsync } from '../utils/file-lock.js';
|
|
4
|
-
import { atomicWriteFileSync } from '../utils/io.js';
|
|
5
|
-
const PRINCIPLE_TRAINING_FILE = 'principle_training_state.json';
|
|
6
|
-
export const TREE_NAMESPACE = '_tree';
|
|
7
|
-
const VALID_EVALUABILITIES = ['deterministic', 'weak_heuristic', 'manual_only'];
|
|
8
|
-
const VALID_INTERNALIZATION_STATUSES = [
|
|
9
|
-
'prompt_only',
|
|
10
|
-
'needs_training',
|
|
11
|
-
'in_training',
|
|
12
|
-
'deployed_pending_eval',
|
|
13
|
-
'internalized',
|
|
14
|
-
'regressed',
|
|
15
|
-
];
|
|
16
|
-
function isRecord(value) {
|
|
17
|
-
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
18
|
-
}
|
|
19
|
-
function clampFloat(value, min, max, fallback) {
|
|
20
|
-
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
21
|
-
return fallback;
|
|
22
|
-
}
|
|
23
|
-
return Math.max(min, Math.min(max, value));
|
|
24
|
-
}
|
|
25
|
-
function clampInt(value, min, max, fallback) {
|
|
26
|
-
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
27
|
-
return fallback;
|
|
28
|
-
}
|
|
29
|
-
return Math.max(min, Math.min(max, Math.round(value)));
|
|
30
|
-
}
|
|
31
|
-
function stringArray(value) {
|
|
32
|
-
return Array.isArray(value) ? value.filter((entry) => typeof entry === 'string') : [];
|
|
33
|
-
}
|
|
34
|
-
function uniqueStrings(values) {
|
|
35
|
-
return Array.from(new Set(values));
|
|
36
|
-
}
|
|
37
|
-
function createEmptyTree() {
|
|
38
|
-
return {
|
|
39
|
-
principles: {},
|
|
40
|
-
rules: {},
|
|
41
|
-
implementations: {},
|
|
42
|
-
metrics: {},
|
|
43
|
-
lastUpdated: new Date(0).toISOString(),
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
function parseLegacyTrainingStore(raw) {
|
|
47
|
-
if (!isRecord(raw)) {
|
|
48
|
-
return {};
|
|
49
|
-
}
|
|
50
|
-
const result = {};
|
|
51
|
-
for (const [principleId, candidate] of Object.entries(raw)) {
|
|
52
|
-
if (principleId === TREE_NAMESPACE || !isRecord(candidate)) {
|
|
53
|
-
continue;
|
|
54
|
-
}
|
|
55
|
-
if (candidate.principleId !== principleId) {
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
const evaluability = VALID_EVALUABILITIES.includes(candidate.evaluability)
|
|
59
|
-
? candidate.evaluability
|
|
60
|
-
: 'manual_only';
|
|
61
|
-
const internalizationStatus = VALID_INTERNALIZATION_STATUSES.includes(candidate.internalizationStatus)
|
|
62
|
-
? candidate.internalizationStatus
|
|
63
|
-
: 'prompt_only';
|
|
64
|
-
const rawLastEvalScore = candidate.lastEvalScore;
|
|
65
|
-
result[principleId] = {
|
|
66
|
-
principleId,
|
|
67
|
-
evaluability,
|
|
68
|
-
applicableOpportunityCount: clampInt(candidate.applicableOpportunityCount, 0, Number.POSITIVE_INFINITY, 0),
|
|
69
|
-
observedViolationCount: clampInt(candidate.observedViolationCount, 0, Number.POSITIVE_INFINITY, 0),
|
|
70
|
-
complianceRate: clampFloat(candidate.complianceRate, 0, 1, 0),
|
|
71
|
-
violationTrend: clampFloat(candidate.violationTrend, -1, 1, 0),
|
|
72
|
-
generatedSampleCount: clampInt(candidate.generatedSampleCount, 0, Number.POSITIVE_INFINITY, 0),
|
|
73
|
-
approvedSampleCount: clampInt(candidate.approvedSampleCount, 0, Number.POSITIVE_INFINITY, 0),
|
|
74
|
-
includedTrainRunIds: stringArray(candidate.includedTrainRunIds),
|
|
75
|
-
deployedCheckpointIds: stringArray(candidate.deployedCheckpointIds),
|
|
76
|
-
lastEvalScore: typeof rawLastEvalScore === 'number' && Number.isFinite(rawLastEvalScore)
|
|
77
|
-
? clampFloat(rawLastEvalScore, 0, 1, 0)
|
|
78
|
-
: undefined,
|
|
79
|
-
internalizationStatus,
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
return result;
|
|
83
|
-
}
|
|
84
|
-
function parsePrinciples(raw) {
|
|
85
|
-
if (!isRecord(raw)) {
|
|
86
|
-
return {};
|
|
87
|
-
}
|
|
88
|
-
const principles = {};
|
|
89
|
-
for (const [id, value] of Object.entries(raw)) {
|
|
90
|
-
if (!isRecord(value)) {
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
const suggestedRules = stringArray(value.suggestedRules);
|
|
94
|
-
principles[id] = {
|
|
95
|
-
...value,
|
|
96
|
-
id,
|
|
97
|
-
ruleIds: stringArray(value.ruleIds),
|
|
98
|
-
conflictsWithPrincipleIds: stringArray(value.conflictsWithPrincipleIds),
|
|
99
|
-
derivedFromPainIds: stringArray(value.derivedFromPainIds),
|
|
100
|
-
...(Object.prototype.hasOwnProperty.call(value, 'suggestedRules') ? { suggestedRules } : {}),
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
return principles;
|
|
104
|
-
}
|
|
105
|
-
function parseRules(raw) {
|
|
106
|
-
if (!isRecord(raw)) {
|
|
107
|
-
return {};
|
|
108
|
-
}
|
|
109
|
-
const rules = {};
|
|
110
|
-
for (const [id, value] of Object.entries(raw)) {
|
|
111
|
-
if (!isRecord(value)) {
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
rules[id] = {
|
|
115
|
-
...value,
|
|
116
|
-
id,
|
|
117
|
-
principleId: typeof value.principleId === 'string' ? value.principleId : '',
|
|
118
|
-
implementationIds: stringArray(value.implementationIds),
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
return rules;
|
|
122
|
-
}
|
|
123
|
-
function parseImplementations(raw) {
|
|
124
|
-
if (!isRecord(raw)) {
|
|
125
|
-
return {};
|
|
126
|
-
}
|
|
127
|
-
const implementations = {};
|
|
128
|
-
for (const [id, value] of Object.entries(raw)) {
|
|
129
|
-
if (!isRecord(value) || typeof value.ruleId !== 'string') {
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
implementations[id] = {
|
|
133
|
-
...value,
|
|
134
|
-
id,
|
|
135
|
-
ruleId: value.ruleId,
|
|
136
|
-
};
|
|
137
|
-
}
|
|
138
|
-
return implementations;
|
|
139
|
-
}
|
|
140
|
-
function parseMetrics(raw) {
|
|
141
|
-
if (!isRecord(raw)) {
|
|
142
|
-
return {};
|
|
143
|
-
}
|
|
144
|
-
const metrics = {};
|
|
145
|
-
for (const [id, value] of Object.entries(raw)) {
|
|
146
|
-
if (!isRecord(value)) {
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
metrics[id] = {
|
|
150
|
-
...value,
|
|
151
|
-
principleId: typeof value.principleId === 'string' ? value.principleId : id,
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
return metrics;
|
|
155
|
-
}
|
|
156
|
-
function parseTree(raw) {
|
|
157
|
-
if (!isRecord(raw)) {
|
|
158
|
-
return createEmptyTree();
|
|
159
|
-
}
|
|
160
|
-
return {
|
|
161
|
-
principles: parsePrinciples(raw.principles),
|
|
162
|
-
rules: parseRules(raw.rules),
|
|
163
|
-
implementations: parseImplementations(raw.implementations),
|
|
164
|
-
metrics: parseMetrics(raw.metrics),
|
|
165
|
-
lastUpdated: typeof raw.lastUpdated === 'string' ? raw.lastUpdated : new Date(0).toISOString(),
|
|
166
|
-
};
|
|
167
|
-
}
|
|
168
|
-
function serializeLedger(store) {
|
|
169
|
-
return JSON.stringify({
|
|
170
|
-
...store.trainingStore,
|
|
171
|
-
[TREE_NAMESPACE]: {
|
|
172
|
-
...store.tree,
|
|
173
|
-
lastUpdated: new Date().toISOString(),
|
|
174
|
-
},
|
|
175
|
-
}, null, 2);
|
|
176
|
-
}
|
|
177
|
-
function ensureParentDir(filePath) {
|
|
178
|
-
const dir = path.dirname(filePath);
|
|
179
|
-
if (!fs.existsSync(dir)) {
|
|
180
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
function readLedgerFromFile(filePath) {
|
|
184
|
-
if (!fs.existsSync(filePath)) {
|
|
185
|
-
return {
|
|
186
|
-
trainingStore: {},
|
|
187
|
-
tree: createEmptyTree(),
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
try {
|
|
191
|
-
const content = fs.readFileSync(filePath, 'utf-8');
|
|
192
|
-
if (!content || content.trim() === '') {
|
|
193
|
-
return { trainingStore: {}, tree: createEmptyTree() };
|
|
194
|
-
}
|
|
195
|
-
const parsed = JSON.parse(content);
|
|
196
|
-
const raw = isRecord(parsed) ? parsed : {};
|
|
197
|
-
// #219: Handle both formats:
|
|
198
|
-
// - New format: { trainingStore: {...}, tree: {...} }
|
|
199
|
-
// - Legacy format: { P_xxx: {...}, _tree: {...} }
|
|
200
|
-
const trainingStoreRaw = raw.trainingStore ?? raw;
|
|
201
|
-
const treeRaw = raw[TREE_NAMESPACE] ?? raw.tree;
|
|
202
|
-
return {
|
|
203
|
-
trainingStore: parseLegacyTrainingStore(trainingStoreRaw),
|
|
204
|
-
tree: parseTree(treeRaw),
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
catch (err) {
|
|
208
|
-
console.error(`[principle-tree-ledger] Failed to load ledger from ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
209
|
-
return { trainingStore: {}, tree: createEmptyTree() };
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
function writeLedgerUnlocked(filePath, store) {
|
|
213
|
-
ensureParentDir(filePath);
|
|
214
|
-
atomicWriteFileSync(filePath, serializeLedger(store));
|
|
215
|
-
}
|
|
216
|
-
function mutateLedger(stateDir, mutate) {
|
|
217
|
-
const filePath = getLedgerFilePath(stateDir);
|
|
218
|
-
return withLock(filePath, () => {
|
|
219
|
-
const store = readLedgerFromFile(filePath);
|
|
220
|
-
const result = mutate(store);
|
|
221
|
-
writeLedgerUnlocked(filePath, store);
|
|
222
|
-
return result;
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
async function mutateLedgerAsync(stateDir, mutate) {
|
|
226
|
-
const filePath = getLedgerFilePath(stateDir);
|
|
227
|
-
return withLockAsync(filePath, async () => {
|
|
228
|
-
const store = readLedgerFromFile(filePath);
|
|
229
|
-
const result = await mutate(store);
|
|
230
|
-
writeLedgerUnlocked(filePath, store);
|
|
231
|
-
return result;
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
export function getLedgerFilePath(stateDir) {
|
|
235
|
-
return path.join(stateDir, PRINCIPLE_TRAINING_FILE);
|
|
236
|
-
}
|
|
237
|
-
export function loadLedger(stateDir) {
|
|
238
|
-
return readLedgerFromFile(getLedgerFilePath(stateDir));
|
|
239
|
-
}
|
|
240
|
-
export function saveLedger(stateDir, store) {
|
|
241
|
-
mutateLedger(stateDir, (current) => {
|
|
242
|
-
current.trainingStore = store.trainingStore;
|
|
243
|
-
current.tree = store.tree;
|
|
244
|
-
});
|
|
245
|
-
}
|
|
246
|
-
export async function saveLedgerAsync(stateDir, store) {
|
|
247
|
-
await mutateLedgerAsync(stateDir, async (current) => {
|
|
248
|
-
current.trainingStore = store.trainingStore;
|
|
249
|
-
current.tree = store.tree;
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
export function updateTrainingStore(stateDir, mutate) {
|
|
253
|
-
mutateLedger(stateDir, (store) => {
|
|
254
|
-
mutate(store.trainingStore);
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
1
|
/**
|
|
258
|
-
*
|
|
259
|
-
* This is the companion to updatePrinciple() — use this when creating a NEW
|
|
260
|
-
* principle so the compiler can find it in tree.principles.
|
|
2
|
+
* Principle Tree Ledger — plugin adapter (re-export) over @principles/core.
|
|
261
3
|
*
|
|
262
|
-
*
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
}
|
|
286
|
-
export function createImplementation(stateDir, implementation) {
|
|
287
|
-
return mutateLedger(stateDir, (store) => {
|
|
288
|
-
const rule = store.tree.rules[implementation.ruleId];
|
|
289
|
-
if (!rule) {
|
|
290
|
-
throw new Error(`Cannot create implementation "${implementation.id}" for missing rule "${implementation.ruleId}".`);
|
|
291
|
-
}
|
|
292
|
-
store.tree.implementations[implementation.id] = implementation;
|
|
293
|
-
rule.implementationIds = uniqueStrings([...rule.implementationIds, implementation.id]);
|
|
294
|
-
return implementation;
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
export function updatePrinciple(stateDir, principleId, updates) {
|
|
298
|
-
return mutateLedger(stateDir, (store) => {
|
|
299
|
-
const existingPrinciple = store.tree.principles[principleId];
|
|
300
|
-
if (!existingPrinciple) {
|
|
301
|
-
throw new Error(`Cannot update missing principle "${principleId}".`);
|
|
302
|
-
}
|
|
303
|
-
const nextPrinciple = {
|
|
304
|
-
...existingPrinciple,
|
|
305
|
-
...updates,
|
|
306
|
-
id: principleId,
|
|
307
|
-
ruleIds: updates.ruleIds ? uniqueStrings(updates.ruleIds) : existingPrinciple.ruleIds,
|
|
308
|
-
conflictsWithPrincipleIds: updates.conflictsWithPrincipleIds
|
|
309
|
-
? uniqueStrings(updates.conflictsWithPrincipleIds)
|
|
310
|
-
: existingPrinciple.conflictsWithPrincipleIds,
|
|
311
|
-
derivedFromPainIds: updates.derivedFromPainIds
|
|
312
|
-
? uniqueStrings(updates.derivedFromPainIds)
|
|
313
|
-
: existingPrinciple.derivedFromPainIds,
|
|
314
|
-
...(Object.prototype.hasOwnProperty.call(updates, 'suggestedRules')
|
|
315
|
-
? { suggestedRules: uniqueStrings(updates.suggestedRules ?? []) }
|
|
316
|
-
: Object.prototype.hasOwnProperty.call(existingPrinciple, 'suggestedRules')
|
|
317
|
-
? { suggestedRules: existingPrinciple.suggestedRules }
|
|
318
|
-
: {}),
|
|
319
|
-
};
|
|
320
|
-
store.tree.principles[principleId] = nextPrinciple;
|
|
321
|
-
return nextPrinciple;
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
export function updateRule(stateDir, ruleId, updates) {
|
|
325
|
-
return mutateLedger(stateDir, (store) => {
|
|
326
|
-
const existingRule = store.tree.rules[ruleId];
|
|
327
|
-
if (!existingRule) {
|
|
328
|
-
throw new Error(`Cannot update missing rule "${ruleId}".`);
|
|
329
|
-
}
|
|
330
|
-
const nextPrincipleId = updates.principleId ?? existingRule.principleId;
|
|
331
|
-
const nextPrinciple = store.tree.principles[nextPrincipleId];
|
|
332
|
-
if (!nextPrinciple) {
|
|
333
|
-
throw new Error(`Cannot move rule "${ruleId}" to missing principle "${nextPrincipleId}".`);
|
|
334
|
-
}
|
|
335
|
-
const nextRule = {
|
|
336
|
-
...existingRule,
|
|
337
|
-
...updates,
|
|
338
|
-
id: ruleId,
|
|
339
|
-
principleId: nextPrincipleId,
|
|
340
|
-
implementationIds: updates.implementationIds
|
|
341
|
-
? uniqueStrings(updates.implementationIds)
|
|
342
|
-
: existingRule.implementationIds,
|
|
343
|
-
};
|
|
344
|
-
if (existingRule.principleId !== nextPrincipleId) {
|
|
345
|
-
const previousPrinciple = store.tree.principles[existingRule.principleId];
|
|
346
|
-
if (previousPrinciple) {
|
|
347
|
-
previousPrinciple.ruleIds = previousPrinciple.ruleIds.filter((candidateId) => candidateId !== ruleId);
|
|
348
|
-
}
|
|
349
|
-
nextPrinciple.ruleIds = uniqueStrings([...nextPrinciple.ruleIds, ruleId]);
|
|
350
|
-
}
|
|
351
|
-
store.tree.rules[ruleId] = nextRule;
|
|
352
|
-
return nextRule;
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
export function deleteRule(stateDir, ruleId) {
|
|
356
|
-
return mutateLedger(stateDir, (store) => {
|
|
357
|
-
const existingRule = store.tree.rules[ruleId];
|
|
358
|
-
if (!existingRule) {
|
|
359
|
-
return undefined;
|
|
360
|
-
}
|
|
361
|
-
const parentPrinciple = store.tree.principles[existingRule.principleId];
|
|
362
|
-
if (parentPrinciple) {
|
|
363
|
-
parentPrinciple.ruleIds = parentPrinciple.ruleIds.filter((candidateId) => candidateId !== ruleId);
|
|
364
|
-
}
|
|
365
|
-
const implementationIds = uniqueStrings([
|
|
366
|
-
...existingRule.implementationIds,
|
|
367
|
-
...Object.values(store.tree.implementations)
|
|
368
|
-
.filter((implementation) => implementation.ruleId === ruleId)
|
|
369
|
-
.map((implementation) => implementation.id),
|
|
370
|
-
]);
|
|
371
|
-
for (const implementationId of implementationIds) {
|
|
372
|
-
delete store.tree.implementations[implementationId];
|
|
373
|
-
}
|
|
374
|
-
delete store.tree.rules[ruleId];
|
|
375
|
-
return existingRule;
|
|
376
|
-
});
|
|
377
|
-
}
|
|
378
|
-
export function updateImplementation(stateDir, implementationId, updates) {
|
|
379
|
-
return mutateLedger(stateDir, (store) => {
|
|
380
|
-
const existingImplementation = store.tree.implementations[implementationId];
|
|
381
|
-
if (!existingImplementation) {
|
|
382
|
-
throw new Error(`Cannot update missing implementation "${implementationId}".`);
|
|
383
|
-
}
|
|
384
|
-
const nextRuleId = updates.ruleId ?? existingImplementation.ruleId;
|
|
385
|
-
const nextRule = store.tree.rules[nextRuleId];
|
|
386
|
-
if (!nextRule) {
|
|
387
|
-
throw new Error(`Cannot move implementation "${implementationId}" to missing rule "${nextRuleId}".`);
|
|
388
|
-
}
|
|
389
|
-
const nextImplementation = {
|
|
390
|
-
...existingImplementation,
|
|
391
|
-
...updates,
|
|
392
|
-
id: implementationId,
|
|
393
|
-
ruleId: nextRuleId,
|
|
394
|
-
};
|
|
395
|
-
if (existingImplementation.ruleId !== nextRuleId) {
|
|
396
|
-
const previousRule = store.tree.rules[existingImplementation.ruleId];
|
|
397
|
-
if (previousRule) {
|
|
398
|
-
previousRule.implementationIds = previousRule.implementationIds.filter((candidateId) => candidateId !== implementationId);
|
|
399
|
-
}
|
|
400
|
-
nextRule.implementationIds = uniqueStrings([...nextRule.implementationIds, implementationId]);
|
|
401
|
-
}
|
|
402
|
-
store.tree.implementations[implementationId] = nextImplementation;
|
|
403
|
-
return nextImplementation;
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
export function deleteImplementation(stateDir, implementationId) {
|
|
407
|
-
return mutateLedger(stateDir, (store) => {
|
|
408
|
-
const existingImplementation = store.tree.implementations[implementationId];
|
|
409
|
-
if (!existingImplementation) {
|
|
410
|
-
return undefined;
|
|
411
|
-
}
|
|
412
|
-
const parentRule = store.tree.rules[existingImplementation.ruleId];
|
|
413
|
-
if (parentRule) {
|
|
414
|
-
parentRule.implementationIds = parentRule.implementationIds.filter((candidateId) => candidateId !== implementationId);
|
|
415
|
-
}
|
|
416
|
-
delete store.tree.implementations[implementationId];
|
|
417
|
-
return existingImplementation;
|
|
418
|
-
});
|
|
419
|
-
}
|
|
420
|
-
export function listImplementationsForRule(stateDir, ruleId) {
|
|
421
|
-
const ledger = loadLedger(stateDir);
|
|
422
|
-
const rule = ledger.tree.rules[ruleId];
|
|
423
|
-
if (!rule) {
|
|
424
|
-
return [];
|
|
425
|
-
}
|
|
426
|
-
return rule.implementationIds
|
|
427
|
-
.map((implementationId) => ledger.tree.implementations[implementationId])
|
|
428
|
-
.filter((implementation) => implementation !== undefined);
|
|
429
|
-
}
|
|
430
|
-
export function getPrincipleSubtree(stateDir, principleId) {
|
|
431
|
-
const ledger = loadLedger(stateDir);
|
|
432
|
-
const principle = ledger.tree.principles[principleId];
|
|
433
|
-
if (!principle) {
|
|
434
|
-
return undefined;
|
|
435
|
-
}
|
|
436
|
-
return {
|
|
437
|
-
principle,
|
|
438
|
-
rules: principle.ruleIds
|
|
439
|
-
.map((ruleId) => ledger.tree.rules[ruleId])
|
|
440
|
-
.filter((rule) => rule !== undefined)
|
|
441
|
-
.map((rule) => ({
|
|
442
|
-
rule,
|
|
443
|
-
implementations: rule.implementationIds
|
|
444
|
-
.map((implementationId) => ledger.tree.implementations[implementationId])
|
|
445
|
-
.filter((implementation) => implementation !== undefined),
|
|
446
|
-
})),
|
|
447
|
-
};
|
|
448
|
-
}
|
|
449
|
-
export function updatePrincipleValueMetrics(stateDir, principleId, metrics) {
|
|
450
|
-
return mutateLedger(stateDir, (store) => {
|
|
451
|
-
const nextMetrics = {
|
|
452
|
-
...metrics,
|
|
453
|
-
principleId,
|
|
454
|
-
};
|
|
455
|
-
store.tree.metrics[principleId] = nextMetrics;
|
|
456
|
-
return nextMetrics;
|
|
457
|
-
});
|
|
458
|
-
}
|
|
459
|
-
// ---------------------------------------------------------------------------
|
|
460
|
-
// Implementation Lifecycle State Transitions
|
|
461
|
-
// ---------------------------------------------------------------------------
|
|
462
|
-
/**
|
|
463
|
-
* Valid lifecycle state transitions (per Phase 13 context D-15):
|
|
464
|
-
* candidate -> active (promote)
|
|
465
|
-
* active -> disabled (disable)
|
|
466
|
-
* disabled -> active (re-enable via promote)
|
|
467
|
-
* disabled -> archived (permanent disable)
|
|
468
|
-
* active -> archived (direct archive)
|
|
469
|
-
* candidate -> archived (rejected candidate cleanup)
|
|
470
|
-
*/
|
|
471
|
-
const VALID_LIFECYCLE_TRANSITIONS = {
|
|
472
|
-
candidate: ['active', 'archived'],
|
|
473
|
-
active: ['disabled', 'archived'],
|
|
474
|
-
disabled: ['active', 'archived'],
|
|
475
|
-
archived: [],
|
|
476
|
-
};
|
|
477
|
-
/**
|
|
478
|
-
* Validate a lifecycle state transition.
|
|
479
|
-
* Returns true if the transition is valid, false otherwise.
|
|
480
|
-
*/
|
|
481
|
-
export function isValidLifecycleTransition(from, to) {
|
|
482
|
-
return VALID_LIFECYCLE_TRANSITIONS[from]?.includes(to) ?? false;
|
|
483
|
-
}
|
|
484
|
-
/**
|
|
485
|
-
* Get allowed transitions for a given lifecycle state.
|
|
486
|
-
*/
|
|
487
|
-
export function getAllowedTransitions(from) {
|
|
488
|
-
return VALID_LIFECYCLE_TRANSITIONS[from] ?? [];
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Transition an implementation's lifecycle state with validation.
|
|
492
|
-
* Throws on invalid transitions */
|
|
493
|
-
export function transitionImplementationState(stateDir, implementationId, newState) {
|
|
494
|
-
return mutateLedger(stateDir, (store) => {
|
|
495
|
-
const impl = store.tree.implementations[implementationId];
|
|
496
|
-
if (!impl) {
|
|
497
|
-
throw new Error(`Implementation not found: ${implementationId}`);
|
|
498
|
-
}
|
|
499
|
-
const currentState = impl.lifecycleState ?? 'candidate';
|
|
500
|
-
if (!isValidLifecycleTransition(currentState, newState)) {
|
|
501
|
-
const allowed = getAllowedTransitions(currentState);
|
|
502
|
-
throw new Error(`Invalid lifecycle transition: ${currentState} -> ${newState}. ` +
|
|
503
|
-
`Allowed: ${allowed.length > 0 ? allowed.join(', ') : 'none (terminal state)'}`);
|
|
504
|
-
}
|
|
505
|
-
const updated = {
|
|
506
|
-
...impl,
|
|
507
|
-
lifecycleState: newState,
|
|
508
|
-
updatedAt: new Date().toISOString(),
|
|
509
|
-
};
|
|
510
|
-
store.tree.implementations[implementationId] = updated;
|
|
511
|
-
return updated;
|
|
512
|
-
});
|
|
513
|
-
}
|
|
514
|
-
/**
|
|
515
|
-
* Get implementations in a specific lifecycle state for a given rule.
|
|
516
|
-
*/
|
|
517
|
-
export function listRuleImplementationsByState(stateDir, ruleId, state) {
|
|
518
|
-
const implementations = listImplementationsForRule(stateDir, ruleId);
|
|
519
|
-
return implementations.filter((impl) => impl.lifecycleState === state);
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Find active implementation for a rule (helper for rule host lookup).
|
|
4
|
+
* PRI-459: This file WAS a full duplicate implementation of
|
|
5
|
+
* principle_training_state.json parsing / serialization / mutation (~600
|
|
6
|
+
* lines of inlined parsers, serializers, mutators, and a parallel codec).
|
|
7
|
+
* That dual ownership caused two real failure classes:
|
|
8
|
+
*
|
|
9
|
+
* 1. Lost updates — core wrote the file UNLOCKED, the plugin wrote it WITH
|
|
10
|
+
* a lock, and neither knew the other's lock. Concurrent writers (e.g.
|
|
11
|
+
* evolution-worker async + a pd-cli command) could silently drop edits.
|
|
12
|
+
* 2. Silent field loss — the two codecs parsed the same bytes at different
|
|
13
|
+
* strictness; a field one side persisted could be dropped on the next
|
|
14
|
+
* load by the other.
|
|
15
|
+
*
|
|
16
|
+
* Both are now fixed by converging on a SINGLE source of truth in core:
|
|
17
|
+
* - parse/serialize: @principles/core/runtime-v2/principle-tree/ledger-codec
|
|
18
|
+
* - mutation (with cross-process file lock): @principles/core/principle-tree-ledger
|
|
19
|
+
*
|
|
20
|
+
* This file is now a thin re-export so existing relative imports
|
|
21
|
+
* (`from './principle-tree-ledger.js'`) keep resolving. Consumers get the
|
|
22
|
+
* exact same API surface, now backed by the locked core implementation.
|
|
23
|
+
*
|
|
24
|
+
* Do NOT reintroduce parsing / serialization / mutation logic here. The
|
|
25
|
+
* architecture-regression guard "PRI-459: single principle_training_state
|
|
26
|
+
* ledger implementation" enforces this.
|
|
523
27
|
*/
|
|
524
|
-
export
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
28
|
+
export {
|
|
29
|
+
// Constants
|
|
30
|
+
TREE_NAMESPACE,
|
|
31
|
+
// Lock
|
|
32
|
+
LockAcquisitionError,
|
|
33
|
+
// I/O + mutators
|
|
34
|
+
loadLedger, saveLedger, saveLedgerAsync, updateTrainingStore, addPrincipleToLedger, createRule, createImplementation, updatePrinciple, updateRule, deleteRule, updateImplementation, deleteImplementation, listImplementationsForRule, getPrincipleSubtree, updatePrincipleValueMetrics,
|
|
35
|
+
// Lifecycle
|
|
36
|
+
isValidLifecycleTransition, getAllowedTransitions, transitionImplementationState, listRuleImplementationsByState, findActiveImplementation, } from '@principles/core/principle-tree-ledger';
|
|
37
|
+
// Back-compat alias: the historical plugin module exported `getLedgerFilePath`
|
|
38
|
+
// (core names it `getLedgerFilePathPublic` for the same path). Keep the old
|
|
39
|
+
// name resolvable for any consumer still on it; both compute
|
|
40
|
+
// path.join(stateDir, 'principle_training_state.json').
|
|
41
|
+
import { getLedgerFilePathPublic } from '@principles/core/principle-tree-ledger';
|
|
42
|
+
export const getLedgerFilePath = getLedgerFilePathPublic;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { type LedgerPrinciple } from '../principle-tree-ledger.js';
|
|
1
2
|
import type { TrajectoryDatabase } from '../trajectory.js';
|
|
2
|
-
import type { Principle } from '../../types/principle-tree-schema.js';
|
|
3
3
|
export interface ReflectionContext {
|
|
4
|
-
principle:
|
|
4
|
+
principle: LedgerPrinciple;
|
|
5
5
|
painEvents: Array<{
|
|
6
6
|
source: string;
|
|
7
7
|
score: number;
|
|
@@ -72,12 +72,9 @@ export const migration = {
|
|
|
72
72
|
)`);
|
|
73
73
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_pain_events_session_id ON pain_events(session_id)`);
|
|
74
74
|
db.exec(`CREATE INDEX IF NOT EXISTS idx_pain_events_created_at ON pain_events(created_at)`);
|
|
75
|
-
// FTS5
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
pain_event_id UNINDEXED,
|
|
79
|
-
tokenize='porter unicode61'
|
|
80
|
-
)`);
|
|
75
|
+
// pain_events_fts FTS5 virtual table removed (PRI-451 Wave 1): the only
|
|
76
|
+
// reader (searchPainEvents) was dead code. Existing DBs keep the orphan
|
|
77
|
+
// table harmlessly (CREATE was IF NOT EXISTS); new DBs simply don't create it.
|
|
81
78
|
db.exec(`CREATE TABLE IF NOT EXISTS gate_blocks (
|
|
82
79
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
83
80
|
session_id TEXT,
|
|
@@ -370,15 +370,10 @@ export const SCHEMAS = {
|
|
|
370
370
|
FROM thinking_model_events GROUP BY date(created_at), model_id ORDER BY day ASC`,
|
|
371
371
|
},
|
|
372
372
|
},
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
pain_event_id UNINDEXED,
|
|
378
|
-
tokenize='porter unicode61'
|
|
379
|
-
)`,
|
|
380
|
-
},
|
|
381
|
-
},
|
|
373
|
+
// pain_events_fts FTS5 catalog entry removed (PRI-451 Wave 1): the only
|
|
374
|
+
// reader (searchPainEvents) was dead code. fts is now empty, matching the
|
|
375
|
+
// other DbType catalogs. Existing DBs keep the orphan table harmlessly.
|
|
376
|
+
fts: {},
|
|
382
377
|
},
|
|
383
378
|
// ========================================================================
|
|
384
379
|
// central.db — Aggregated multi-workspace data
|
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
import type { CorrectionSampleReviewStatus, CorrectionExportMode, TrajectoryDataStats, TrajectoryAssistantTurnInput, TrajectoryUserTurnInput, TrajectoryToolCallInput, TrajectoryPainEventInput, TrajectoryGateBlockInput, TrajectoryTrustChangeInput, TrajectoryPrincipleEventInput, TrajectoryTaskOutcomeInput, TrajectorySessionInput, EvolutionTaskInput, EvolutionEventInput, EvolutionTaskRecord, EvolutionEventRecord, EvolutionTaskFilters, AssistantTurnRecord, CorrectionSampleRecord, TrajectoryExportResult, TrajectoryDatabaseOptions } from './trajectory-types.js';
|
|
2
2
|
export type { CorrectionSampleReviewStatus, CorrectionExportMode, TrajectoryDataStats, TrajectoryAssistantTurnInput, TrajectoryUserTurnInput, TrajectoryToolCallInput, TrajectoryPainEventInput, TrajectoryGateBlockInput, DailyMetricRow, TrajectoryTrustChangeInput, TrajectoryPrincipleEventInput, TrajectoryTaskOutcomeInput, TrajectorySessionInput, TaskKind, TaskPriority, EvolutionTaskInput, EvolutionEventInput, EvolutionTaskRecord, EvolutionEventRecord, EvolutionTaskFilters, AssistantTurnRecord, CorrectionSampleRecord, TrajectoryExportResult, TrajectoryDatabaseOptions, } from './trajectory-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Initialize trajectory.db schema at the given workspace directory.
|
|
5
|
+
*
|
|
6
|
+
* Opens trajectory.db in write mode, applies the full schema (tables + indexes + views +
|
|
7
|
+
* migrations), then closes the DB. Does NOT run importLegacyArtifacts() or
|
|
8
|
+
* pruneUnreferencedBlobs() — those are runtime side-effects of TrajectoryDatabase
|
|
9
|
+
* construction and are not needed for pure initialization.
|
|
10
|
+
*
|
|
11
|
+
* Idempotent: safe to call on an existing DB; all CREATE statements use IF NOT EXISTS.
|
|
12
|
+
*
|
|
13
|
+
* @returns list of created/verified table names and any warnings
|
|
14
|
+
*/
|
|
15
|
+
export declare function initTrajectorySchema(workspaceDir: string): {
|
|
16
|
+
tables: string[];
|
|
17
|
+
warnings: string[];
|
|
18
|
+
};
|
|
3
19
|
export declare class TrajectoryDatabase {
|
|
4
20
|
private readonly workspaceDir;
|
|
5
21
|
private readonly stateDir;
|
|
@@ -16,22 +32,6 @@ export declare class TrajectoryDatabase {
|
|
|
16
32
|
recordUserTurn(input: TrajectoryUserTurnInput): number;
|
|
17
33
|
recordToolCall(input: TrajectoryToolCallInput): number;
|
|
18
34
|
recordPainEvent(input: TrajectoryPainEventInput): number;
|
|
19
|
-
/**
|
|
20
|
-
* Search pain_events using FTS5 full-text search (MEM-04).
|
|
21
|
-
* Returns pain events matching the query, ordered by relevance.
|
|
22
|
-
*/
|
|
23
|
-
searchPainEvents(query: string, limit?: number): {
|
|
24
|
-
id: number;
|
|
25
|
-
sessionId: string;
|
|
26
|
-
source: string;
|
|
27
|
-
score: number;
|
|
28
|
-
reason: string | null;
|
|
29
|
-
severity: string | null;
|
|
30
|
-
origin: string | null;
|
|
31
|
-
confidence: number | null;
|
|
32
|
-
text: string | null;
|
|
33
|
-
createdAt: string;
|
|
34
|
-
}[];
|
|
35
35
|
recordGateBlock(input: TrajectoryGateBlockInput): void;
|
|
36
36
|
recordTrustChange(input: TrajectoryTrustChangeInput): void;
|
|
37
37
|
recordPrincipleEvent(input: TrajectoryPrincipleEventInput): void;
|