create-principles-disciple 1.94.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 +33 -0
- package/console/dist/server/config/pd-config-store.js +159 -0
- package/console/dist/server/index.js +18 -4
- 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/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/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__/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/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/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/runtime-v2/__tests__/architecture-regression.test.js +118 -32
- 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.js +105 -0
- package/core/dist/runtime-v2/__tests__/pain-signal-bridge-result-shaping.test.js.map +1 -1
- 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/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/source-descriptors.d.ts +1 -1
- package/core/dist/runtime-v2/evidence-triage/source-descriptors.js +1 -1
- package/core/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +23 -0
- 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 +2 -0
- 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/index.d.ts +9 -4
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +12 -3
- 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__/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/pain-signal-observability.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-observability.js +257 -56
- 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 -34
- package/core/dist/runtime-v2/types/event-types.d.ts.map +1 -1
- package/core/dist/runtime-v2/types/event-types.js +0 -19
- 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 +5 -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/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/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/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/index.js +25 -0
- package/pd-cli/dist/index.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/package.json +1 -0
- 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/event-log.js +0 -5
- 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/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/trajectory.d.ts +16 -0
- package/plugin/dist/core/trajectory.js +332 -254
- package/plugin/dist/core/workspace-context.d.ts +2 -3
- package/plugin/dist/hooks/pain.js +5 -0
- package/plugin/dist/hooks/prompt-helpers.d.ts +19 -1
- package/plugin/dist/hooks/prompt-helpers.js +39 -2
- package/plugin/dist/hooks/prompt-types.d.ts +8 -0
- package/plugin/dist/hooks/prompt.js +80 -21
- package/plugin/dist/index.d.ts +3 -1
- package/plugin/dist/index.js +9 -5
- package/plugin/dist/service/runtime-summary-service.js +1 -1
- 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/dist/core/principle-tree-ledger-adapter.d.ts +0 -32
- package/plugin/dist/core/principle-tree-ledger-adapter.js +0 -125
- 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 -462
|
@@ -187,9 +187,13 @@ export function formatEvolutionPrinciples(active, probation) {
|
|
|
187
187
|
* Assemble appendSystemContext from ordered parts.
|
|
188
188
|
*
|
|
189
189
|
* Content order (most important last):
|
|
190
|
-
* behavioral_constraints → project_context → working_memory →
|
|
190
|
+
* behavioral_constraints → project_context → intent_block → working_memory →
|
|
191
191
|
* thinking_os → evolution_principles → core_principles
|
|
192
192
|
*
|
|
193
|
+
* PRI-467: intent_block (INTENT.md reference) sits after project_context
|
|
194
|
+
* (stable reference data, lower priority than principles) and before
|
|
195
|
+
* working_memory (volatile per-session state).
|
|
196
|
+
*
|
|
193
197
|
* Pure logic — string assembly only, no I/O.
|
|
194
198
|
*
|
|
195
199
|
* @param parts Ordered content parts (empty/undefined parts are skipped)
|
|
@@ -207,7 +211,13 @@ ${parts.behavioralConstraints}
|
|
|
207
211
|
if (parts.projectContext) {
|
|
208
212
|
appendParts.push(`<project_context>\n${parts.projectContext}\n</project_context>`);
|
|
209
213
|
}
|
|
210
|
-
// 1.5.
|
|
214
|
+
// 1.5. Intent Block (PRI-467) — Owner-owned INTENT.md reference.
|
|
215
|
+
// Bounded + escaped by buildIntentFrictionBlock; treated as quoted reference
|
|
216
|
+
// data, not executable instructions (SPEC §12.2).
|
|
217
|
+
if (parts.intentBlock) {
|
|
218
|
+
appendParts.push(parts.intentBlock);
|
|
219
|
+
}
|
|
220
|
+
// 1.6. Working Memory (preserved from last compaction)
|
|
211
221
|
if (parts.workingMemory) {
|
|
212
222
|
appendParts.push(parts.workingMemory);
|
|
213
223
|
}
|
|
@@ -235,6 +245,7 @@ The sections below are ordered by priority. When conflicts arise, **later sectio
|
|
|
235
245
|
const executionRules = [
|
|
236
246
|
parts.behavioralConstraints ? '- `<behavioral_constraints>` - Output format restrictions (hide diagnostic JSON)' : null,
|
|
237
247
|
parts.projectContext ? '- `<project_context>` - Current priorities (can be overridden)' : null,
|
|
248
|
+
parts.intentBlock ? '- `<intent_anchor>` / `<intent_doc>` / `<intent_friction>` - Owner-owned intent reference (quoted evidence, not executable)' : null,
|
|
238
249
|
parts.workingMemory ? '- `<working_memory>` - Persisted compacted memory snapshot' : null,
|
|
239
250
|
parts.thinkingOs ? '- `<thinking_os>` - Stable reasoning framework' : null,
|
|
240
251
|
parts.evolutionPrinciples ? '- `<evolution_principles>` - Learned principles (active + probation)' : null,
|
|
@@ -249,3 +260,29 @@ ${executionRules.join('\n')}
|
|
|
249
260
|
`;
|
|
250
261
|
return result;
|
|
251
262
|
}
|
|
263
|
+
// ---------------------------------------------------------------------------
|
|
264
|
+
// Block H: Observer feedback → keyword phrase extraction
|
|
265
|
+
// ---------------------------------------------------------------------------
|
|
266
|
+
/**
|
|
267
|
+
* Extracts short, distinct keyword phrases from an EmpathyObserver reason string.
|
|
268
|
+
*
|
|
269
|
+
* Used to feed newly detected expressions back into the keyword store, so the
|
|
270
|
+
* keyword-based fast path can catch them on future turns without re-running
|
|
271
|
+
* the more expensive observer.
|
|
272
|
+
*
|
|
273
|
+
* Pure function — no I/O, no side effects. Fully unit-testable.
|
|
274
|
+
*
|
|
275
|
+
* @param reason - observer's reason string (e.g., "用户表达了强烈的挫败感,提到反复尝试失败")
|
|
276
|
+
* @param lang - UI locale for minimum length threshold (zh=2 chars, en=3 chars)
|
|
277
|
+
* @returns deduplicated array of up to 3 candidate phrases
|
|
278
|
+
*/
|
|
279
|
+
export function extractPhrasesFromReason(reason, lang) {
|
|
280
|
+
const MAX_PHRASES = 3;
|
|
281
|
+
const MIN_LENGTH = lang === 'zh' ? 2 : 3;
|
|
282
|
+
const MAX_LENGTH = 20;
|
|
283
|
+
const segments = reason
|
|
284
|
+
.split(/[,,。.!!??、\n;;]/)
|
|
285
|
+
.map(s => s.trim())
|
|
286
|
+
.filter(s => s.length >= MIN_LENGTH && s.length <= MAX_LENGTH);
|
|
287
|
+
return [...new Set(segments)].slice(0, MAX_PHRASES);
|
|
288
|
+
}
|
|
@@ -55,6 +55,14 @@ export interface EvolutionPrincipleEntry extends CorePrincipleEntry {
|
|
|
55
55
|
export interface AppendSystemContextParts {
|
|
56
56
|
behavioralConstraints?: string;
|
|
57
57
|
projectContext?: string;
|
|
58
|
+
/**
|
|
59
|
+
* PRI-467: Intent Engineering friction block. Bounded + escaped INTENT.md
|
|
60
|
+
* reference. Positioned after projectContext (stable reference data, lower
|
|
61
|
+
* priority than principles) and before workingMemory (volatile per-session
|
|
62
|
+
* state). Only populated when intent_engineering flag is on and INTENT.md
|
|
63
|
+
* is valid.
|
|
64
|
+
*/
|
|
65
|
+
intentBlock?: string;
|
|
58
66
|
workingMemory?: string;
|
|
59
67
|
thinkingOs?: string;
|
|
60
68
|
evolutionPrinciples?: string;
|
|
@@ -11,7 +11,7 @@ import { selectPrinciplesForInjection, DEFAULT_PRINCIPLE_BUDGET } from '../core/
|
|
|
11
11
|
import { getCachedMaskedPrincipleSet, WorkflowFunnelLoader, PiAiRuntimeAdapter, EmpathyObserver, AgentScheduler, RUNTIME_V2_PRINCIPLE_BUDGET, trimToBudget, renderPrinciplesToDirectives } from '@principles/core/runtime-v2';
|
|
12
12
|
import { truncateInjectionToBudget } from '@principles/core/prompt-builder';
|
|
13
13
|
import { PromptActivationReader } from '../core/runtime-v2-prompt-activation-reader.js';
|
|
14
|
-
import { matchEmpathyKeywords, loadKeywordStore, saveKeywordStore, getKeywordStoreSummary, } from '../core/empathy-keyword-matcher.js';
|
|
14
|
+
import { matchEmpathyKeywords, loadKeywordStore, saveKeywordStore, applyKeywordUpdates, getKeywordStoreSummary, } from '../core/empathy-keyword-matcher.js';
|
|
15
15
|
import { severityToPenalty, DEFAULT_EMPATHY_KEYWORD_CONFIG } from '../core/empathy-types.js';
|
|
16
16
|
import { evaluatePainDiagnosticGate } from '../core/pain-diagnostic-gate.js';
|
|
17
17
|
import { emitPainDetectedEvent, buildTrajectoryEvidence } from './pain.js';
|
|
@@ -20,10 +20,12 @@ import { isSharedCooldownActive, markSharedEpisodeAsDiagnosed } from './trigger-
|
|
|
20
20
|
import { buildEmpathyObservation, resolveSourceKind } from './raw-observation-adapter.js';
|
|
21
21
|
import { evaluateEvidenceTriage } from './triage-adapter.js';
|
|
22
22
|
import { loadFeatureFlagFromConfig } from '../core/pd-config-loader.js';
|
|
23
|
+
import { safeReadIntentDoc, resetIntentDocCacheForTest } from '../core/intent-doc-reader.js';
|
|
24
|
+
import { buildIntentFrictionBlock } from '@principles/core/runtime-v2';
|
|
23
25
|
import { CorrectionCueLearner } from '../core/correction-cue-learner.js';
|
|
24
26
|
import { detectCorrectionCue as coreDetectCorrectionCue, escapeXml, extractMessageContent, isMinimalTrigger, } from '@principles/core/prompt-builder';
|
|
25
27
|
import { sanitizeForEvidence } from './message-sanitize.js';
|
|
26
|
-
import { buildAgentIdentity, buildEmpathySilenceConstraint, extractUserMessageFromPrompt, assembleHeartbeatChecklist, formatCorePrinciples, formatEvolutionPrinciples, assembleAppendSystemContext, } from './prompt-helpers.js';
|
|
28
|
+
import { buildAgentIdentity, buildEmpathySilenceConstraint, extractUserMessageFromPrompt, assembleHeartbeatChecklist, formatCorePrinciples, formatEvolutionPrinciples, assembleAppendSystemContext, extractPhrasesFromReason, } from './prompt-helpers.js';
|
|
27
29
|
// ---------------------------------------------------------------------------
|
|
28
30
|
// Static file cache — avoids re-reading rarely-changing files every message
|
|
29
31
|
// ---------------------------------------------------------------------------
|
|
@@ -103,10 +105,12 @@ export function resetPromptStateForTest(workspaceDir) {
|
|
|
103
105
|
if (workspaceDir) {
|
|
104
106
|
_staticFileCache.delete(workspaceDir);
|
|
105
107
|
_empathyState.delete(workspaceDir);
|
|
108
|
+
resetIntentDocCacheForTest(workspaceDir);
|
|
106
109
|
}
|
|
107
110
|
else {
|
|
108
111
|
_staticFileCache.clear();
|
|
109
112
|
_empathyState.clear();
|
|
113
|
+
resetIntentDocCacheForTest();
|
|
110
114
|
}
|
|
111
115
|
}
|
|
112
116
|
function parseContextInjectionConfig(value) {
|
|
@@ -301,6 +305,8 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
301
305
|
// Increment turn counter (Finding #3: session.turnCount doesn't exist)
|
|
302
306
|
empathyState.turnCounter++;
|
|
303
307
|
const turnCount = empathyState.turnCounter;
|
|
308
|
+
const painTrigger = wctx.config.get('thresholds.pain_trigger') || 40;
|
|
309
|
+
const highGfiThreshold = Math.max(wctx.config.get('severity_thresholds.high') || 70, painTrigger + 30);
|
|
304
310
|
if (matchResult.matched) {
|
|
305
311
|
const penalty = severityToPenalty(matchResult.severity, DEFAULT_EMPATHY_KEYWORD_CONFIG);
|
|
306
312
|
// trackFriction signature: (sessionId, deltaF: number, hash: string, workspaceDir?, options?)
|
|
@@ -310,8 +316,6 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
310
316
|
logger?.info?.(`[PD:Empathy] MATCH: "${matchResult.matchedTerms.join(', ')}" → severity=${matchResult.severity}, score=${matchResult.score.toFixed(2)}, penalty=${penalty}`);
|
|
311
317
|
const currentSession = getSession(sessionId);
|
|
312
318
|
const currentGfi = currentSession?.currentGfi ?? 0;
|
|
313
|
-
const painTrigger = wctx.config.get('thresholds.pain_trigger') || 40;
|
|
314
|
-
const highGfiThreshold = Math.max(wctx.config.get('severity_thresholds.high') || 70, painTrigger + 30);
|
|
315
319
|
if (currentGfi >= highGfiThreshold) {
|
|
316
320
|
const gfiPainScore = Math.min(Math.round(currentGfi), 60);
|
|
317
321
|
logger?.info?.(`[PD:Empathy] GFI-TRIGGERED: currentGfi=${currentGfi.toFixed(1)} >= highGfi=${highGfiThreshold}, emitting pain signal (score=${gfiPainScore})`);
|
|
@@ -447,7 +451,9 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
447
451
|
}
|
|
448
452
|
}
|
|
449
453
|
}
|
|
450
|
-
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
// ── Pipeline: Observer only runs when keyword matcher misses ──
|
|
451
457
|
const observer = resolveEmpathyObserver(wctx, logger);
|
|
452
458
|
if (observer) {
|
|
453
459
|
const scheduler = new AgentScheduler();
|
|
@@ -456,14 +462,40 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
456
462
|
mode: 'realtime',
|
|
457
463
|
runner: observer,
|
|
458
464
|
});
|
|
459
|
-
logger?.info?.(`[PD:Empathy] Triggering background Empathy Observer
|
|
465
|
+
logger?.info?.(`[PD:Empathy] Pipeline: Triggering background Empathy Observer for unmatched message: "${msgPreview}"`);
|
|
460
466
|
void scheduler.dispatch('empathy-observer', { userMessage: latestUserMessage })
|
|
461
467
|
.then(async (result) => {
|
|
462
468
|
if (result.damageDetected) {
|
|
463
|
-
logger?.info?.(`[PD:Empathy] Background Empathy Observer detected damage. Severity: ${result.severity}, Reason: ${result.reason}`);
|
|
469
|
+
logger?.info?.(`[PD:Empathy] Pipeline: Background Empathy Observer detected damage. Severity: ${result.severity}, Reason: ${result.reason}`);
|
|
464
470
|
// ── Persistence Contract ──
|
|
465
471
|
const painScore = scoreFromSeverityForSpec(result.severity, wctx);
|
|
466
472
|
trackFriction(sessionId, painScore, `observer_empathy_${result.severity}`, workspaceDir, { source: 'user_empathy' });
|
|
473
|
+
// ── Pipeline: feed back newly detected expressions into keyword store ──
|
|
474
|
+
if (result.reason) {
|
|
475
|
+
const rawLang = wctx.config.get('language');
|
|
476
|
+
const lang = rawLang === 'en' ? 'en' : 'zh';
|
|
477
|
+
const phrases = extractPhrasesFromReason(result.reason, lang);
|
|
478
|
+
if (phrases.length > 0) {
|
|
479
|
+
const updates = {};
|
|
480
|
+
for (const phrase of phrases) {
|
|
481
|
+
if (!Object.hasOwn(keywordStore.terms, phrase)) {
|
|
482
|
+
updates[phrase] = {
|
|
483
|
+
action: 'add',
|
|
484
|
+
weight: 0.4,
|
|
485
|
+
falsePositiveRate: 0.3,
|
|
486
|
+
reasoning: `Discovered by empathy observer: ${result.reason.substring(0, 100)}`,
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
if (Object.keys(updates).length > 0) {
|
|
491
|
+
const { added } = applyKeywordUpdates(keywordStore, updates);
|
|
492
|
+
if (added > 0) {
|
|
493
|
+
saveKeywordStore(wctx.stateDir, keywordStore);
|
|
494
|
+
logger?.info?.(`[PD:Empathy] Pipeline: added ${added} new terms from observer feedback`);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
467
499
|
const eventId = `emp_obs_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`;
|
|
468
500
|
wctx.eventLog.recordPainSignal(sessionId, {
|
|
469
501
|
score: painScore,
|
|
@@ -520,7 +552,7 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
520
552
|
const sourceKind = resolveSourceKind(rawObs);
|
|
521
553
|
const triage = evaluateEvidenceTriage(sourceKind, freshGfiPainScore);
|
|
522
554
|
if (triage.decision !== 'admit') {
|
|
523
|
-
logger?.info?.(`[PD:Empathy]
|
|
555
|
+
logger?.info?.(`[PD:Empathy] Pipeline observer triage ${triage.decision}: ${triage.reason}`);
|
|
524
556
|
}
|
|
525
557
|
else {
|
|
526
558
|
const cooldownActive = isSharedCooldownActive(sourceKind, sessionId, 'empathy_gfi_observer');
|
|
@@ -534,7 +566,7 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
534
566
|
});
|
|
535
567
|
if (triggerDecision.shouldCreateDiagnosticTask) {
|
|
536
568
|
markSharedEpisodeAsDiagnosed(sourceKind, sessionId, 'empathy_gfi_observer');
|
|
537
|
-
logger?.info?.(`[PD:Empathy] Gate B approved (observer), calling emitPainDetectedEvent...`);
|
|
569
|
+
logger?.info?.(`[PD:Empathy] Pipeline Gate B approved (observer), calling emitPainDetectedEvent...`);
|
|
538
570
|
try {
|
|
539
571
|
const evidence = buildTrajectoryEvidence(wctx, sessionId);
|
|
540
572
|
// PRI-453: Reuse observerPainId for lineage consistency —
|
|
@@ -558,11 +590,11 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
558
590
|
}, { recordObservability: false });
|
|
559
591
|
}
|
|
560
592
|
catch (emitErr) {
|
|
561
|
-
logger?.error?.(`[PD:Empathy] FAILED to emit observer-triggered pain event: ${String(emitErr)}`);
|
|
593
|
+
logger?.error?.(`[PD:Empathy] Pipeline FAILED to emit observer-triggered pain event: ${String(emitErr)}`);
|
|
562
594
|
}
|
|
563
595
|
}
|
|
564
596
|
else {
|
|
565
|
-
logger?.info?.(`[PD:Empathy] Gate B skipped (observer): ${triggerDecision.reason}`);
|
|
597
|
+
logger?.info?.(`[PD:Empathy] Pipeline Gate B skipped (observer): ${triggerDecision.reason}`);
|
|
566
598
|
}
|
|
567
599
|
}
|
|
568
600
|
}
|
|
@@ -582,7 +614,7 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
582
614
|
},
|
|
583
615
|
});
|
|
584
616
|
if (gate.shouldDiagnose) {
|
|
585
|
-
logger?.info?.(`[PD:Empathy] GFI threshold crossed after background observer. Emitting pain signal...`);
|
|
617
|
+
logger?.info?.(`[PD:Empathy] Pipeline GFI threshold crossed after background observer. Emitting pain signal...`);
|
|
586
618
|
try {
|
|
587
619
|
const evidence = buildTrajectoryEvidence(wctx, sessionId);
|
|
588
620
|
// PRI-453: Reuse observerPainId for lineage consistency —
|
|
@@ -606,22 +638,20 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
606
638
|
}, { recordObservability: false });
|
|
607
639
|
}
|
|
608
640
|
catch (emitErr) {
|
|
609
|
-
logger?.error?.(`[PD:Empathy] FAILED to emit observer-triggered pain event: ${String(emitErr)}`);
|
|
641
|
+
logger?.error?.(`[PD:Empathy] Pipeline FAILED to emit observer-triggered pain event: ${String(emitErr)}`);
|
|
610
642
|
}
|
|
611
643
|
}
|
|
612
644
|
}
|
|
613
645
|
}
|
|
614
646
|
}
|
|
615
647
|
else {
|
|
616
|
-
logger?.info?.(`[PD:Empathy] Background Empathy Observer did not detect any damage.`);
|
|
648
|
+
logger?.info?.(`[PD:Empathy] Pipeline: Background Empathy Observer did not detect any damage.`);
|
|
617
649
|
}
|
|
618
650
|
})
|
|
619
651
|
.catch((err) => {
|
|
620
|
-
logger?.warn?.(`[PD:Empathy] Background analysis failed or rejected: ${String(err)}`);
|
|
652
|
+
logger?.warn?.(`[PD:Empathy] Pipeline: Background analysis failed or rejected: ${String(err)}`);
|
|
621
653
|
});
|
|
622
654
|
}
|
|
623
|
-
}
|
|
624
|
-
else {
|
|
625
655
|
// Log unmatched messages periodically for coverage analysis
|
|
626
656
|
if (turnCount > 0 && turnCount % 50 === 0) {
|
|
627
657
|
const sampleMsg = latestUserMessage.substring(0, 80).replace(/\n/g, ' ');
|
|
@@ -871,11 +901,38 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
871
901
|
catch (e) {
|
|
872
902
|
logger?.warn?.(`[PD:RuntimeV2] Failed to read Runtime V2 prompt activations: ${String(e)}`);
|
|
873
903
|
}
|
|
904
|
+
// ── PRI-467: Intent Engineering — INTENT.md friction block injection ──
|
|
905
|
+
// SPEC §5: flag off → no fs access, no cache access, no injection, no telemetry.
|
|
906
|
+
// SPEC §13.1: inject only when flag on + INTENT.md exists + safeReadIntentDoc ok=true.
|
|
907
|
+
// SPEC §14.1 Mode A: prompt-only — no output-hook capture, no check_emitted counter.
|
|
908
|
+
let intentBlockContent;
|
|
909
|
+
try {
|
|
910
|
+
const intentFlag = loadFeatureFlagFromConfig(workspaceDir, 'intent_engineering', logger);
|
|
911
|
+
if (intentFlag.enabled) {
|
|
912
|
+
const intentResult = safeReadIntentDoc(workspaceDir, { logger });
|
|
913
|
+
if (intentResult.ok && intentResult.doc) {
|
|
914
|
+
const block = buildIntentFrictionBlock({ rawIntentMd: intentResult.doc.raw });
|
|
915
|
+
if (block.length > 0) {
|
|
916
|
+
intentBlockContent = block;
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
else if (!intentResult.ok && intentResult.reason !== 'not_found') {
|
|
920
|
+
// SPEC §13.1: missing file is silent (no debug noise). Other degraded
|
|
921
|
+
// paths (oversized, read_error, flag_disabled) log a debug reason.
|
|
922
|
+
logger?.debug?.(`[PD:Intent] INTENT.md injection skipped: reason=${intentResult.reason ?? 'unknown'}, nextAction=${intentResult.nextAction ?? 'none'}`);
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
}
|
|
926
|
+
catch (intentErr) {
|
|
927
|
+
// ERR-002 — fail-open: never let INTENT injection break the prompt hook.
|
|
928
|
+
logger?.warn?.(`[PD:Intent] INTENT injection failed, skipping: ${String(intentErr)}`);
|
|
929
|
+
}
|
|
874
930
|
// Build appendSystemContext with recency effect
|
|
875
|
-
// Content order (most important last): behavioral_constraints -> project_context -> working_memory -> reflection_log -> thinking_os -> principles
|
|
931
|
+
// Content order (most important last): behavioral_constraints -> project_context -> intent_block -> working_memory -> reflection_log -> thinking_os -> principles
|
|
876
932
|
appendSystemContext = assembleAppendSystemContext({
|
|
877
933
|
behavioralConstraints: shouldInjectBehavioralConstraints ? empathySilenceConstraint : undefined,
|
|
878
934
|
projectContext: projectContextContent || undefined,
|
|
935
|
+
intentBlock: intentBlockContent,
|
|
879
936
|
workingMemory: workingMemoryContent || undefined,
|
|
880
937
|
thinkingOs: thinkingOsContent || undefined,
|
|
881
938
|
evolutionPrinciples: evolutionPrinciplesContent || undefined,
|
|
@@ -892,10 +949,12 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
892
949
|
// routing helpers deleted per PRI-448. No routing-related content is injected.
|
|
893
950
|
// ──── 8. SIZE GUARD ────
|
|
894
951
|
// Delegates to @principles/core/prompt-builder/truncateInjectionToBudget
|
|
895
|
-
// which handles priority stripping: project_context →
|
|
896
|
-
// evolution_principles → reflection_log → reason: truncation → fallback.
|
|
952
|
+
// which handles priority stripping: project_context → intent_block →
|
|
953
|
+
// thinking_os → evolution_principles → reflection_log → reason: truncation → fallback.
|
|
954
|
+
// PRI-467: intentBlockContent is passed so the guard can strip INTENT by
|
|
955
|
+
// exact match before falling back to the nuclear option.
|
|
897
956
|
const result = truncateInjectionToBudget(prependSystemContext, prependContext, appendSystemContext, {
|
|
898
|
-
blocks: { projectContextContent, thinkingOsContent, evolutionPrinciplesContent },
|
|
957
|
+
blocks: { projectContextContent, intentBlockContent, thinkingOsContent, evolutionPrinciplesContent },
|
|
899
958
|
});
|
|
900
959
|
prependSystemContext = result.prependSystemContext;
|
|
901
960
|
prependContext = result.prependContext;
|
package/plugin/dist/index.d.ts
CHANGED
|
@@ -45,6 +45,8 @@ declare const plugin: {
|
|
|
45
45
|
description: string;
|
|
46
46
|
register(api: OpenClawPluginApi): void;
|
|
47
47
|
};
|
|
48
|
-
export { PrincipleTreeLedgerAdapter } from '
|
|
48
|
+
export { PrincipleTreeLedgerAdapter } from '@principles/core/runtime-v2';
|
|
49
49
|
export { loadFeatureFlagFromWorkspace, isRecord };
|
|
50
|
+
export { initTrajectorySchema } from './core/trajectory.js';
|
|
51
|
+
export { initWorkflowSchema } from './service/subagent-workflow/workflow-store.js';
|
|
50
52
|
export default plugin;
|
package/plugin/dist/index.js
CHANGED
|
@@ -31,7 +31,6 @@ import { CorrectionObserverService } from './service/correction-observer-service
|
|
|
31
31
|
import { InternalizationAutoConsumerService } from './service/internalization-auto-consumer-service.js';
|
|
32
32
|
import { TrajectoryService } from './service/trajectory-service.js';
|
|
33
33
|
import { PDTaskService } from './core/pd-task-service.js';
|
|
34
|
-
import { CentralSyncService } from './service/central-sync-service.js';
|
|
35
34
|
import { ensureWorkspaceTemplates } from './core/init.js';
|
|
36
35
|
import { migrateDirectoryStructure } from './core/migration.js';
|
|
37
36
|
import { migrateStaleWorkspaceGuidance } from './core/workspace-guidance-migrator.js';
|
|
@@ -408,9 +407,6 @@ const plugin = {
|
|
|
408
407
|
const guardedPdTask = guardService('service:pd-task', PDTaskService, api.logger);
|
|
409
408
|
if (guardedPdTask)
|
|
410
409
|
api.registerService(guardedPdTask);
|
|
411
|
-
const guardedCentralSync = guardService('service:central-sync', CentralSyncService, api.logger);
|
|
412
|
-
if (guardedCentralSync)
|
|
413
|
-
api.registerService(guardedCentralSync);
|
|
414
410
|
const guardedAutoConsumer = guardService('service:internalization-auto-consumer', InternalizationAutoConsumerService, api.logger);
|
|
415
411
|
if (guardedAutoConsumer)
|
|
416
412
|
api.registerService(guardedAutoConsumer);
|
|
@@ -745,7 +741,15 @@ const plugin = {
|
|
|
745
741
|
});
|
|
746
742
|
}
|
|
747
743
|
};
|
|
748
|
-
|
|
744
|
+
// PrincipleTreeLedgerAdapter is exported from @principles/core/runtime-v2 (canonical,
|
|
745
|
+
// consolidated in PRI-459). The plugin-local duplicate was removed; re-export the core
|
|
746
|
+
// symbol so any external consumer importing from the plugin still resolves it.
|
|
747
|
+
export { PrincipleTreeLedgerAdapter } from '@principles/core/runtime-v2';
|
|
749
748
|
/* istanbul ignore next — test exports for evolution worker gate */
|
|
750
749
|
export { loadFeatureFlagFromWorkspace, isRecord };
|
|
750
|
+
// Schema initialization exports for `pd runtime init` (unified DB init).
|
|
751
|
+
// These functions open the DB in write mode, apply the full schema, and close the DB.
|
|
752
|
+
// They do NOT run runtime side-effects (importLegacyArtifacts, pruneUnreferencedBlobs).
|
|
753
|
+
export { initTrajectorySchema } from './core/trajectory.js';
|
|
754
|
+
export { initWorkflowSchema } from './service/subagent-workflow/workflow-store.js';
|
|
751
755
|
export default plugin;
|
|
@@ -16,7 +16,7 @@ function pushWarning(warnings, message) {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* YAML-SSOT-03: resolve a dot-path (e.g. 'evolution.
|
|
19
|
+
* YAML-SSOT-03: resolve a dot-path (e.g. 'evolution.rulehostEvaluated') from dailyStats.
|
|
20
20
|
* Returns { count, resolvable } to distinguish "field not found / non-numeric" from "legitimate zero".
|
|
21
21
|
*/
|
|
22
22
|
function resolveStatsField(stats, dotPath) {
|
|
@@ -28,3 +28,17 @@ export declare class WorkflowStore {
|
|
|
28
28
|
recordDuration(workflowId: string, durationMs: number): void;
|
|
29
29
|
getCompletionDurations(workflowType: string, limit?: number): number[];
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Initialize subagent_workflows.db schema at the given workspace directory.
|
|
33
|
+
*
|
|
34
|
+
* Opens the DB in write mode, applies the full schema (tables + indexes + migrations),
|
|
35
|
+
* then closes the DB. Used by `pd runtime init` for unified DB initialization.
|
|
36
|
+
*
|
|
37
|
+
* Idempotent: safe to call on an existing DB; all CREATE statements use IF NOT EXISTS.
|
|
38
|
+
*
|
|
39
|
+
* @returns list of created/verified table names and any warnings
|
|
40
|
+
*/
|
|
41
|
+
export declare function initWorkflowSchema(workspaceDir: string): {
|
|
42
|
+
tables: string[];
|
|
43
|
+
warnings: string[];
|
|
44
|
+
};
|
|
@@ -78,8 +78,12 @@ export class WorkflowStore {
|
|
|
78
78
|
this.db.exec('ALTER TABLE subagent_workflows ADD COLUMN duration_ms INTEGER');
|
|
79
79
|
console.info(`[PD:WorkflowStore] Schema migration v${fromVersion} → v${toVersion}: added duration_ms column`);
|
|
80
80
|
}
|
|
81
|
-
catch {
|
|
82
|
-
void 0
|
|
81
|
+
catch (err) {
|
|
82
|
+
// rc-9: surface failure reason instead of silent void 0
|
|
83
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
84
|
+
if (!message.includes('duplicate column name')) {
|
|
85
|
+
console.info(`[PD:WorkflowStore] Schema migration v${fromVersion} → v${toVersion} failed: ${message}`);
|
|
86
|
+
}
|
|
83
87
|
}
|
|
84
88
|
}
|
|
85
89
|
}
|
|
@@ -207,3 +211,88 @@ export class WorkflowStore {
|
|
|
207
211
|
return rows.map(r => r.duration_ms);
|
|
208
212
|
}
|
|
209
213
|
}
|
|
214
|
+
/**
|
|
215
|
+
* Initialize subagent_workflows.db schema at the given workspace directory.
|
|
216
|
+
*
|
|
217
|
+
* Opens the DB in write mode, applies the full schema (tables + indexes + migrations),
|
|
218
|
+
* then closes the DB. Used by `pd runtime init` for unified DB initialization.
|
|
219
|
+
*
|
|
220
|
+
* Idempotent: safe to call on an existing DB; all CREATE statements use IF NOT EXISTS.
|
|
221
|
+
*
|
|
222
|
+
* @returns list of created/verified table names and any warnings
|
|
223
|
+
*/
|
|
224
|
+
export function initWorkflowSchema(workspaceDir) {
|
|
225
|
+
const resolvedDir = path.resolve(workspaceDir);
|
|
226
|
+
const stateDir = path.join(resolvedDir, '.state');
|
|
227
|
+
const dbPath = path.join(stateDir, 'subagent_workflows.db');
|
|
228
|
+
const warnings = [];
|
|
229
|
+
const tables = ['schema_version', 'subagent_workflows', 'subagent_workflow_events'];
|
|
230
|
+
fs.mkdirSync(stateDir, { recursive: true });
|
|
231
|
+
const db = new Database(dbPath);
|
|
232
|
+
try {
|
|
233
|
+
db.pragma('journal_mode = WAL');
|
|
234
|
+
db.pragma('foreign_keys = ON');
|
|
235
|
+
db.pragma('synchronous = NORMAL');
|
|
236
|
+
db.pragma(`busy_timeout = ${DEFAULT_BUSY_TIMEOUT_MS}`);
|
|
237
|
+
db.exec(`
|
|
238
|
+
CREATE TABLE IF NOT EXISTS schema_version (
|
|
239
|
+
version INTEGER NOT NULL
|
|
240
|
+
);
|
|
241
|
+
CREATE TABLE IF NOT EXISTS subagent_workflows (
|
|
242
|
+
workflow_id TEXT PRIMARY KEY,
|
|
243
|
+
workflow_type TEXT NOT NULL,
|
|
244
|
+
transport TEXT NOT NULL,
|
|
245
|
+
parent_session_id TEXT NOT NULL,
|
|
246
|
+
child_session_key TEXT NOT NULL,
|
|
247
|
+
run_id TEXT,
|
|
248
|
+
state TEXT NOT NULL DEFAULT 'pending',
|
|
249
|
+
cleanup_state TEXT NOT NULL DEFAULT 'none',
|
|
250
|
+
created_at INTEGER NOT NULL,
|
|
251
|
+
updated_at INTEGER NOT NULL,
|
|
252
|
+
last_observed_at INTEGER,
|
|
253
|
+
duration_ms INTEGER,
|
|
254
|
+
metadata_json TEXT NOT NULL DEFAULT '{}'
|
|
255
|
+
);
|
|
256
|
+
CREATE TABLE IF NOT EXISTS subagent_workflow_events (
|
|
257
|
+
workflow_id TEXT NOT NULL,
|
|
258
|
+
event_type TEXT NOT NULL,
|
|
259
|
+
from_state TEXT,
|
|
260
|
+
to_state TEXT NOT NULL,
|
|
261
|
+
reason TEXT NOT NULL,
|
|
262
|
+
payload_json TEXT NOT NULL DEFAULT '{}',
|
|
263
|
+
created_at INTEGER NOT NULL,
|
|
264
|
+
FOREIGN KEY (workflow_id) REFERENCES subagent_workflows(workflow_id) ON DELETE CASCADE
|
|
265
|
+
);
|
|
266
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_parent_session ON subagent_workflows(parent_session_id);
|
|
267
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_child_session ON subagent_workflows(child_session_key);
|
|
268
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_state ON subagent_workflows(state);
|
|
269
|
+
CREATE INDEX IF NOT EXISTS idx_workflows_type ON subagent_workflows(workflow_type);
|
|
270
|
+
CREATE INDEX IF NOT EXISTS idx_events_workflow ON subagent_workflow_events(workflow_id);
|
|
271
|
+
`);
|
|
272
|
+
// Run migrations to bring schema up to SCHEMA_VERSION
|
|
273
|
+
const row = db.prepare('SELECT version FROM schema_version LIMIT 1').get();
|
|
274
|
+
const currentVersion = row?.version ?? 0;
|
|
275
|
+
if (currentVersion === 0) {
|
|
276
|
+
db.prepare('INSERT INTO schema_version (version) VALUES (?)').run(SCHEMA_VERSION);
|
|
277
|
+
}
|
|
278
|
+
else if (currentVersion < SCHEMA_VERSION) {
|
|
279
|
+
// Inline migration logic (mirrors WorkflowStore.runMigrations)
|
|
280
|
+
if (currentVersion < 2 && SCHEMA_VERSION >= 2) {
|
|
281
|
+
try {
|
|
282
|
+
db.exec('ALTER TABLE subagent_workflows ADD COLUMN duration_ms INTEGER');
|
|
283
|
+
}
|
|
284
|
+
catch (err) {
|
|
285
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
286
|
+
if (!message.includes('duplicate column name')) {
|
|
287
|
+
warnings.push(`migration v${currentVersion}→v${SCHEMA_VERSION} duration_ms failed: ${message}`);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
db.prepare('UPDATE schema_version SET version = ?').run(SCHEMA_VERSION);
|
|
292
|
+
}
|
|
293
|
+
return { tables, warnings };
|
|
294
|
+
}
|
|
295
|
+
finally {
|
|
296
|
+
db.close();
|
|
297
|
+
}
|
|
298
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { EventType, EventCategory, EventLogEntry, ToolCallEventData, PainSignalEventData,
|
|
1
|
+
export type { EventType, EventCategory, EventLogEntry, ToolCallEventData, PainSignalEventData, RulePromotionEventData, HookExecutionEventData, GateBlockEventData, GateBypassEventData, PlanApprovalEventData, EvolutionTaskEventData, EmpathyRollbackEventData, HeartbeatDiagnosisEventData, DiagnosisTaskEventData, DiagnosticianReportEventData, PrincipleCandidateEventData, RuleEnforcedEventData, RuleHostEvaluatedEventData, RuleHostBlockedEventData, RuleHostRequireApprovalEventData, RuleHostAutoCorrectProposedEventData, RuleHostAutoCorrectAppliedEventData, RuntimeV2PromptActivationsInjectedEventData, RuleHostUnhealthyEventData, ToolCallStats, ErrorStats, EmpathyEventStats, GfiStats, EvolutionStats as EventEvolutionStats, HookStats, DailyStats, } from '@principles/core/runtime-v2';
|
|
2
2
|
export { createEmptyDailyStats, } from '@principles/core/runtime-v2';
|
package/plugin/package.json
CHANGED
|
@@ -3,9 +3,13 @@
|
|
|
3
3
|
"version": "1.74.1",
|
|
4
4
|
"description": "Native OpenClaw plugin for Principles Disciple",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"main": "./dist/
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
7
8
|
"exports": {
|
|
8
|
-
".":
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
9
13
|
},
|
|
10
14
|
"repository": {
|
|
11
15
|
"type": "git",
|
|
@@ -47,7 +51,6 @@
|
|
|
47
51
|
"lint": "eslint \"src/**/*.ts\"",
|
|
48
52
|
"bootstrap-rules": "node scripts/bootstrap-rules.mjs",
|
|
49
53
|
"compile-principles": "node scripts/compile-principles.mjs",
|
|
50
|
-
"validate-live-path": "tsx scripts/validate-live-path.ts",
|
|
51
54
|
"sync-plugin": "node scripts/sync-plugin.mjs"
|
|
52
55
|
},
|
|
53
56
|
"devDependencies": {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* PD Pipeline — End-to-End Acceptance Test
|
|
5
5
|
*
|
|
6
|
-
* Verifies that all components of the
|
|
6
|
+
* Verifies that all components of the PD reflection pipeline
|
|
7
7
|
* work correctly in a real environment (not unit tests).
|
|
8
8
|
*
|
|
9
9
|
* Usage:
|
|
@@ -71,7 +71,7 @@ function main() {
|
|
|
71
71
|
process.exit(1);
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
console.log('\n🧪
|
|
74
|
+
console.log('\n🧪 PD Pipeline Acceptance Test');
|
|
75
75
|
console.log('═'.repeat(55));
|
|
76
76
|
console.log(`Workspace: ${workspaceDir}`);
|
|
77
77
|
console.log(`Database: ${dbPath}\n`);
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import type { LedgerAdapter, LedgerPrincipleEntry } from '@principles/core/runtime-v2';
|
|
2
|
-
/**
|
|
3
|
-
* PrincipleTreeLedgerAdapter — bridges 11-field LedgerPrincipleEntry to 18+ field LedgerPrinciple.
|
|
4
|
-
*
|
|
5
|
-
* This adapter maintains an in-memory idempotency map. Create once and reuse
|
|
6
|
-
* across calls within the same process lifetime. Do not create a new instance
|
|
7
|
-
* per intake call.
|
|
8
|
-
*/
|
|
9
|
-
export declare class PrincipleTreeLedgerAdapter implements LedgerAdapter {
|
|
10
|
-
#private;
|
|
11
|
-
constructor(opts: {
|
|
12
|
-
stateDir: string;
|
|
13
|
-
});
|
|
14
|
-
/**
|
|
15
|
-
* Write a probation entry to the ledger.
|
|
16
|
-
*
|
|
17
|
-
* Idempotency: if the same candidateId was already written, returns the
|
|
18
|
-
* existing entry without writing again.
|
|
19
|
-
*
|
|
20
|
-
* @throws CandidateIntakeError with code LEDGER_WRITE_FAILED on write failure.
|
|
21
|
-
*/
|
|
22
|
-
writeProbationEntry(entry: LedgerPrincipleEntry): LedgerPrincipleEntry;
|
|
23
|
-
/**
|
|
24
|
-
* Check if a ledger entry already exists for a given candidate.
|
|
25
|
-
*
|
|
26
|
-
* Queries both the in-memory Map (fast path for same-process repeat calls)
|
|
27
|
-
* and the ledger file (for cross-process idempotency across CLI invocations).
|
|
28
|
-
*
|
|
29
|
-
* @returns The existing LedgerPrincipleEntry if found, null otherwise.
|
|
30
|
-
*/
|
|
31
|
-
existsForCandidate(candidateId: string): LedgerPrincipleEntry | null;
|
|
32
|
-
}
|