create-principles-disciple 1.95.0 → 1.97.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/pd-config-store.js +49 -12
- package/console/dist/server/index.js +4 -3
- package/console/dist/server/models/IntentPageModel.d.ts +36 -2
- package/console/dist/server/models/IntentPageModel.js +213 -11
- package/console/dist/server/routes/intent.d.ts +5 -1
- package/console/dist/server/routes/intent.js +200 -12
- package/console/dist/types.d.ts +1 -0
- package/console/dist/ui/App.js +0 -53
- package/console/dist/ui/api.d.ts +18 -4
- package/console/dist/ui/api.js +38 -5
- package/console/dist/ui/components/layout/app-sidebar.js +12 -12
- package/console/dist/ui/components/ui/badge.d.ts +1 -1
- package/console/dist/ui/i18n/en.json +142 -3
- package/console/dist/ui/i18n/zh-CN.json +142 -3
- package/console/dist/ui/pages/control-center/AgentCard.d.ts +31 -0
- package/console/dist/ui/pages/control-center/AgentCard.js +156 -0
- package/console/dist/ui/pages/control-center/AgentGroup.d.ts +26 -0
- package/console/dist/ui/pages/control-center/AgentGroup.js +38 -0
- package/console/dist/ui/pages/control-center/ControlCenterPage.js +77 -41
- package/console/dist/ui/pages/control-center/WorkflowDiagram.d.ts +17 -0
- package/console/dist/ui/pages/control-center/WorkflowDiagram.js +55 -0
- package/console/dist/ui/pages/intent/IntentOnboarding.d.ts +67 -0
- package/console/dist/ui/pages/intent/IntentOnboarding.js +289 -0
- package/console/dist/ui/pages/intent/IntentPage.js +117 -6
- package/console/dist/ui/utils/agent-metadata.d.ts +58 -0
- package/console/dist/ui/utils/agent-metadata.js +275 -0
- package/console/dist/ui/utils/control-center-helpers.d.ts +19 -0
- package/console/dist/ui/utils/control-center-helpers.js +37 -0
- package/console/dist/ui/utils/validators.d.ts +37 -0
- package/console/dist/ui/utils/validators.js +130 -0
- package/console/dist/web/assets/app.css +360 -3
- package/console/dist/web/assets/app.js +2952 -1143
- package/console/package.json +1 -1
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js +27 -35
- package/core/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +85 -7
- package/core/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/golden-trace-replay-validator.test.js +70 -0
- package/core/dist/runtime-v2/__tests__/golden-trace-replay-validator.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/golden-trace.test.js +136 -1
- package/core/dist/runtime-v2/__tests__/golden-trace.test.js.map +1 -1
- package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.d.ts +2 -0
- package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.js +211 -0
- package/core/dist/runtime-v2/__tests__/v2-adversarial-cases.test.js.map +1 -0
- package/core/dist/runtime-v2/activation/writers/__tests__/rule-host-writer.test.js +93 -0
- 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 +11 -0
- 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 +22 -0
- package/core/dist/runtime-v2/activation/writers/rule-host-writer.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.d.ts +2 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.js +74 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/rulecode-context-v2-flag.test.js.map +1 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.d.ts +2 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.test.js +246 -0
- package/core/dist/runtime-v2/feature-flags/__tests__/surface-guard-policy.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 +7 -0
- package/core/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/core/dist/runtime-v2/feature-flags/index.d.ts +2 -0
- package/core/dist/runtime-v2/feature-flags/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/feature-flags/index.js +2 -0
- package/core/dist/runtime-v2/feature-flags/index.js.map +1 -1
- package/{plugin/dist/core/surface-guard.d.ts → core/dist/runtime-v2/feature-flags/surface-guard-policy.d.ts} +15 -5
- package/core/dist/runtime-v2/feature-flags/surface-guard-policy.d.ts.map +1 -0
- package/{plugin/dist/core/surface-guard.js → core/dist/runtime-v2/feature-flags/surface-guard-policy.js} +14 -2
- package/core/dist/runtime-v2/feature-flags/surface-guard-policy.js.map +1 -0
- package/core/dist/runtime-v2/golden-trace-replay-validator.js +1 -1
- package/core/dist/runtime-v2/golden-trace-replay-validator.js.map +1 -1
- package/core/dist/runtime-v2/golden-trace.d.ts +19 -3
- package/core/dist/runtime-v2/golden-trace.d.ts.map +1 -1
- package/core/dist/runtime-v2/golden-trace.js +2 -0
- package/core/dist/runtime-v2/golden-trace.js.map +1 -1
- package/core/dist/runtime-v2/index.d.ts +15 -3
- package/core/dist/runtime-v2/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/index.js +11 -2
- package/core/dist/runtime-v2/index.js.map +1 -1
- package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.d.ts +2 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.js +88 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc-version.test.js.map +1 -0
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js +91 -1
- package/core/dist/runtime-v2/intent/__tests__/intent-doc.test.js.map +1 -1
- package/core/dist/runtime-v2/intent/index.d.ts +2 -0
- package/core/dist/runtime-v2/intent/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/intent/index.js +2 -0
- package/core/dist/runtime-v2/intent/index.js.map +1 -1
- package/core/dist/runtime-v2/intent/intent-browser.d.ts +23 -0
- package/core/dist/runtime-v2/intent/intent-browser.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-browser.js +21 -0
- package/core/dist/runtime-v2/intent/intent-browser.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc-version.d.ts +28 -0
- package/core/dist/runtime-v2/intent/intent-doc-version.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc-version.js +21 -0
- package/core/dist/runtime-v2/intent/intent-doc-version.js.map +1 -0
- package/core/dist/runtime-v2/intent/intent-doc.d.ts +17 -1
- package/core/dist/runtime-v2/intent/intent-doc.d.ts.map +1 -1
- package/core/dist/runtime-v2/intent/intent-doc.js +95 -7
- package/core/dist/runtime-v2/intent/intent-doc.js.map +1 -1
- package/core/dist/runtime-v2/intent/intent-hash.d.ts +2 -0
- package/core/dist/runtime-v2/intent/intent-hash.d.ts.map +1 -0
- package/core/dist/runtime-v2/intent/intent-hash.js +10 -0
- package/core/dist/runtime-v2/intent/intent-hash.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js +41 -1
- package/core/dist/runtime-v2/internalization/__tests__/artificer-prompt-builder.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/artificer-rule-output.test.js +130 -2
- package/core/dist/runtime-v2/internalization/__tests__/artificer-rule-output.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.js +228 -0
- package/core/dist/runtime-v2/internalization/__tests__/behavior-example-pack.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js +41 -11
- package/core/dist/runtime-v2/internalization/__tests__/diag-chain-e2e.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/refiner-sandbox-wrapper.test.js +135 -0
- package/core/dist/runtime-v2/internalization/__tests__/refiner-sandbox-wrapper.test.js.map +1 -1
- package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.d.ts +2 -0
- package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.js +449 -0
- package/core/dist/runtime-v2/internalization/__tests__/rule-context-v2.test.js.map +1 -0
- package/core/dist/runtime-v2/internalization/adversarial-case.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/adversarial-case.js +24 -0
- package/core/dist/runtime-v2/internalization/adversarial-case.js.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-output.d.ts +10 -0
- package/core/dist/runtime-v2/internalization/artificer-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-output.js +45 -0
- package/core/dist/runtime-v2/internalization/artificer-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts +2 -2
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js +7 -2
- package/core/dist/runtime-v2/internalization/artificer-prompt-builder.js.map +1 -1
- package/core/dist/runtime-v2/internalization/behavior-example-pack.d.ts +66 -0
- package/core/dist/runtime-v2/internalization/behavior-example-pack.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/behavior-example-pack.js +183 -0
- package/core/dist/runtime-v2/internalization/behavior-example-pack.js.map +1 -0
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts +8 -0
- package/core/dist/runtime-v2/internalization/evaluator-output.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-output.js +10 -0
- package/core/dist/runtime-v2/internalization/evaluator-output.js.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts +17 -0
- package/core/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/evaluator-runner.js +118 -24
- package/core/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js +1 -1
- package/core/dist/runtime-v2/internalization/refiner-sandbox-wrapper.js.map +1 -1
- package/core/dist/runtime-v2/internalization/rule-context-v2.d.ts +61 -0
- package/core/dist/runtime-v2/internalization/rule-context-v2.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/rule-context-v2.js +301 -0
- package/core/dist/runtime-v2/internalization/rule-context-v2.js.map +1 -0
- package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts +9 -0
- package/core/dist/runtime-v2/internalization/rule-host-contracts.d.ts.map +1 -1
- package/core/dist/runtime-v2/internalization/v2-adversarial-cases.d.ts +55 -0
- package/core/dist/runtime-v2/internalization/v2-adversarial-cases.d.ts.map +1 -0
- package/core/dist/runtime-v2/internalization/v2-adversarial-cases.js +131 -0
- package/core/dist/runtime-v2/internalization/v2-adversarial-cases.js.map +1 -0
- package/core/dist/runtime-v2/pain-signal-observability.d.ts.map +1 -1
- package/core/dist/runtime-v2/pain-signal-observability.js +24 -1
- package/core/dist/runtime-v2/pain-signal-observability.js.map +1 -1
- package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.d.ts +2 -0
- package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.js +95 -0
- package/core/dist/runtime-v2/risk/__tests__/risk-calculator-policy.test.js.map +1 -0
- package/core/dist/runtime-v2/risk/index.d.ts +7 -0
- package/core/dist/runtime-v2/risk/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/risk/index.js +6 -0
- package/core/dist/runtime-v2/risk/index.js.map +1 -0
- package/core/dist/runtime-v2/risk/risk-calculator-policy.d.ts +18 -0
- package/core/dist/runtime-v2/risk/risk-calculator-policy.d.ts.map +1 -0
- package/core/dist/runtime-v2/risk/risk-calculator-policy.js +47 -0
- package/core/dist/runtime-v2/risk/risk-calculator-policy.js.map +1 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.d.ts +2 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.js +83 -0
- package/core/dist/runtime-v2/store/intent/__tests__/sqlite-intent-doc-version-store.test.js.map +1 -0
- package/core/dist/runtime-v2/store/intent/index.d.ts +2 -1
- package/core/dist/runtime-v2/store/intent/index.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/intent/index.js +2 -1
- package/core/dist/runtime-v2/store/intent/index.js.map +1 -1
- package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.d.ts +28 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.d.ts.map +1 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.js +88 -0
- package/core/dist/runtime-v2/store/intent/sqlite-intent-doc-version-store.js.map +1 -0
- package/core/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/core/dist/runtime-v2/store/sqlite-connection.js +14 -0
- package/core/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts +2 -0
- package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.d.ts.map +1 -0
- package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js +149 -0
- package/core/dist/runtime-v2/thinking-models/__tests__/thinking-models-policy.test.js.map +1 -0
- package/core/dist/runtime-v2/thinking-models/index.d.ts +3 -0
- package/core/dist/runtime-v2/thinking-models/index.d.ts.map +1 -0
- package/core/dist/runtime-v2/thinking-models/index.js +3 -0
- package/core/dist/runtime-v2/thinking-models/index.js.map +1 -0
- package/core/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts +73 -0
- package/core/dist/runtime-v2/thinking-models/thinking-models-policy.d.ts.map +1 -0
- package/core/dist/runtime-v2/thinking-models/thinking-models-policy.js +227 -0
- package/core/dist/runtime-v2/thinking-models/thinking-models-policy.js.map +1 -0
- package/core/dist/runtime-v2/tools/__tests__/artificer-l2-tool-contract.test.js +40 -1
- package/core/dist/runtime-v2/tools/__tests__/artificer-l2-tool-contract.test.js.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.d.ts.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js +28 -1
- package/core/dist/runtime-v2/tools/artificer-l2-tool-contract.js.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-output-typebox.d.ts +3 -0
- package/core/dist/runtime-v2/tools/artificer-output-typebox.d.ts.map +1 -1
- package/core/dist/runtime-v2/tools/artificer-output-typebox.js +3 -0
- package/core/dist/runtime-v2/tools/artificer-output-typebox.js.map +1 -1
- package/core/package.json +4 -0
- package/package.json +1 -1
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js +74 -3
- package/pd-cli/dist/commands/__tests__/intent-flag-wiring.test.js.map +1 -1
- package/pd-cli/dist/commands/intent.d.ts +21 -4
- package/pd-cli/dist/commands/intent.d.ts.map +1 -1
- package/pd-cli/dist/commands/intent.js +88 -27
- package/pd-cli/dist/commands/intent.js.map +1 -1
- package/plugin/dist/commands/pain.js +2 -2
- package/plugin/dist/core/behavior-example-pack-assembler.d.ts +43 -0
- package/plugin/dist/core/behavior-example-pack-assembler.js +247 -0
- package/plugin/dist/core/intent-doc-reader-adapter.d.ts +13 -5
- package/plugin/dist/core/intent-doc-reader-adapter.js +25 -5
- package/plugin/dist/core/intent-doc-reader.d.ts +13 -4
- package/plugin/dist/core/intent-doc-reader.js +45 -24
- package/plugin/dist/core/rule-context-assembler.d.ts +45 -0
- package/plugin/dist/core/rule-context-assembler.js +148 -0
- package/plugin/dist/core/thinking-models.d.ts +12 -57
- package/plugin/dist/core/thinking-models.js +18 -224
- package/plugin/dist/core/trajectory-types.d.ts +18 -0
- package/plugin/dist/core/trajectory.d.ts +34 -2
- package/plugin/dist/core/trajectory.js +103 -0
- package/plugin/dist/hooks/gate.js +59 -2
- package/plugin/dist/hooks/pain.js +2 -2
- package/plugin/dist/hooks/prompt.js +2 -1
- package/plugin/dist/index.js +1 -1
- package/plugin/package.json +1 -1
- package/plugin/dist/core/evolution-migration.d.ts +0 -5
- package/plugin/dist/core/evolution-migration.js +0 -65
- package/plugin/dist/core/risk-calculator.d.ts +0 -22
- package/plugin/dist/core/risk-calculator.js +0 -88
- package/plugin/dist/core/rule-host-helpers.d.ts +0 -8
- package/plugin/dist/core/rule-host-helpers.js +0 -7
- package/plugin/dist/core/rule-host-types.d.ts +0 -7
- package/plugin/dist/core/rule-host-types.js +0 -7
- package/plugin/dist/core/schema/db-types.d.ts +0 -11
- package/plugin/dist/core/schema/db-types.js +0 -5
- package/plugin/dist/core/schema/index.d.ts +0 -17
- package/plugin/dist/core/schema/index.js +0 -15
- package/plugin/dist/core/schema/migration-runner.d.ts +0 -53
- package/plugin/dist/core/schema/migration-runner.js +0 -170
- package/plugin/dist/core/schema/migrations/001-init-trajectory.d.ts +0 -6
- package/plugin/dist/core/schema/migrations/001-init-trajectory.js +0 -190
- package/plugin/dist/core/schema/migrations/002-init-central.d.ts +0 -5
- package/plugin/dist/core/schema/migrations/002-init-central.js +0 -108
- package/plugin/dist/core/schema/migrations/003-init-workflow.d.ts +0 -5
- package/plugin/dist/core/schema/migrations/003-init-workflow.js +0 -50
- package/plugin/dist/core/schema/migrations/004-add-thinking-and-gfi.d.ts +0 -8
- package/plugin/dist/core/schema/migrations/004-add-thinking-and-gfi.js +0 -66
- package/plugin/dist/core/schema/migrations/index.d.ts +0 -16
- package/plugin/dist/core/schema/migrations/index.js +0 -27
- package/plugin/dist/core/schema/schema-definitions.d.ts +0 -46
- package/plugin/dist/core/schema/schema-definitions.js +0 -599
- package/plugin/scripts/db-migrate.mjs +0 -170
|
@@ -1,163 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Thinking Models —
|
|
2
|
+
* Thinking Models — Plugin I/O Adapter (Stage 3 slim)
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Pure logic (BUILTIN_PATTERNS, BUILTIN_PATTERN_MAP, getFallbackName,
|
|
5
|
+
* getFallbackDescription, deriveThinkingScenarios, types) lives in
|
|
6
|
+
* @principles/core/runtime-v2/thinking-models.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
8
|
+
* This file owns only the I/O boundary: reading THINKING_OS.md from a
|
|
9
|
+
* workspace dir and merging it with the builtin patterns. It re-exports
|
|
10
|
+
* the pure functions and types so existing relative imports
|
|
11
|
+
* (../core/thinking-models.js) continue to resolve.
|
|
12
12
|
*/
|
|
13
13
|
import { loadThinkingOsFromWorkspace, generateDetectionPatterns } from './thinking-os-parser.js';
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
patterns: [
|
|
19
|
-
// Thinking process language (AI reasoning output)
|
|
20
|
-
/let me (first )?(understand|map|outline|survey|review the (structure|architecture|dependencies))/i,
|
|
21
|
-
/before (changing|editing|touching) anything/i,
|
|
22
|
-
/让我先(梳理|理解|看看|盘点).*(结构|架构|依赖|全貌)/i,
|
|
23
|
-
/在执行任何.*/i,
|
|
24
|
-
// Decision directive language (nocturnal artifact betterDecision)
|
|
25
|
-
/review (the |)(docs|architecture|structure|requirements|constraints|dependencies|authorization)/i,
|
|
26
|
-
/read (the |)(docs|architecture|requirements|constraints|logs?|error|stack)/i,
|
|
27
|
-
/check (the |)(docs|architecture|source|authorization|requirements|error)/i,
|
|
28
|
-
/understand (the |)(structure|architecture|requirements|constraints|full (context|picture))/i,
|
|
29
|
-
/first (to|and|,) (verify|check|review|read|understand|confirm|diagnose)/i,
|
|
30
|
-
/(verify|check|review|read|confirm) .+ first/i,
|
|
31
|
-
],
|
|
32
|
-
baselineScenarios: ['exploration', 'discovery'],
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
id: 'T-02',
|
|
36
|
-
patterns: [
|
|
37
|
-
// Thinking process language
|
|
38
|
-
/(type|test|contract|schema|interface) (constraint|requirement|check|validation)/i,
|
|
39
|
-
/(必须|需要).*(遵守|符合|满足).*(类型|测试|契约|接口|规范)/i,
|
|
40
|
-
// Decision directive language
|
|
41
|
-
/(trust|follow|respect|adhere to|meet) (the |)(constraint|requirement|contract|interface|specification|schema|type)/i,
|
|
42
|
-
/(check|verify|validate|ensure) (the |)(constraint|requirement|contract|interface|specification|type|schema)/i,
|
|
43
|
-
],
|
|
44
|
-
baselineScenarios: ['constraint-check', 'contract-verification'],
|
|
45
|
-
},
|
|
46
|
-
{
|
|
47
|
-
id: 'T-03',
|
|
48
|
-
patterns: [
|
|
49
|
-
// Thinking process language
|
|
50
|
-
/based on (the |this )?(evidence|logs?|output|error|stack trace|test result)/i,
|
|
51
|
-
/let me (check|verify|confirm|read|look at) (the |)(actual|source|code|file|log)/i,
|
|
52
|
-
/根据(日志|证据|输出|报错|堆栈|测试结果)/i,
|
|
53
|
-
// Decision directive language (evidence-based decision)
|
|
54
|
-
/(verify|check|confirm) (the |)(error|error code|error message|actual|evidence|logs?|output|stack)/i,
|
|
55
|
-
/(error|failure) (logs?|output|stack trace|message|code) (before|then)/i,
|
|
56
|
-
/(look at|read) (the |)(error|logs?|output|stack|actual|evidence|file|code)/i,
|
|
57
|
-
],
|
|
58
|
-
baselineScenarios: ['evidence-gathering', 'verification'],
|
|
59
|
-
},
|
|
60
|
-
{
|
|
61
|
-
id: 'T-04',
|
|
62
|
-
patterns: [
|
|
63
|
-
// Thinking process language
|
|
64
|
-
/this (is|would be) (irreversible|destructive|permanent|not easily undone)/i,
|
|
65
|
-
/(reversible|can be undone|safely roll back)/i,
|
|
66
|
-
/(不可逆|破坏性|无法回滚|可以回滚|安全撤销)/i,
|
|
67
|
-
// Decision directive language
|
|
68
|
-
/(irreversible|destructive|permanent|high impact) (action|change|operation)/i,
|
|
69
|
-
/(must be|need to be|should be) (reviewed|confirmed|verified|checked) (first|before)/i,
|
|
70
|
-
/(get|obtain|ask for) (confirmation|authorization|approval|permission) (first|before)/i,
|
|
71
|
-
],
|
|
72
|
-
baselineScenarios: ['risk-management', 'reversibility'],
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
id: 'T-05',
|
|
76
|
-
patterns: [
|
|
77
|
-
// Thinking process language
|
|
78
|
-
/we (must|should) (not|never|avoid|prevent|ensure we don't)/i,
|
|
79
|
-
/(critical|important) (not to|that we don't|to avoid)/i,
|
|
80
|
-
/(绝不能|必须避免|不可|禁止|确保不会)/i,
|
|
81
|
-
// Decision directive language
|
|
82
|
-
/(must|should|need to) (not |never |avoid )?(check|verify|review|read|confirm|ask)/i,
|
|
83
|
-
/(safety|safe) (check|gate|checklist|guard)/i,
|
|
84
|
-
],
|
|
85
|
-
baselineScenarios: ['guardrails', 'safety-rails'],
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
id: 'T-06',
|
|
89
|
-
patterns: [
|
|
90
|
-
// Thinking process language
|
|
91
|
-
/(simpl(er|est|ify)|minimal|straightforward|lean) (approach|solution|fix|implementation)/i,
|
|
92
|
-
/(simple is better|keep it simple|no need to over)/i,
|
|
93
|
-
/(最简|更简单|精简|没必要过度设计)/i,
|
|
94
|
-
// Decision directive language
|
|
95
|
-
/(minimal|smallest|narrowest) (change|modification|impact|approach)/i,
|
|
96
|
-
/(only|just) (change|modify|touch|edit|affect) (the |what)/i,
|
|
97
|
-
],
|
|
98
|
-
baselineScenarios: ['simplification', 'pragmatism'],
|
|
99
|
-
},
|
|
100
|
-
{
|
|
101
|
-
id: 'T-07',
|
|
102
|
-
patterns: [
|
|
103
|
-
// Thinking process language
|
|
104
|
-
/(minimal|smallest|narrowest|least) (change|diff|modification|impact)/i,
|
|
105
|
-
/only (change|modify|touch|edit) (the |what)/i,
|
|
106
|
-
/(最小改动|最小变更|只改|只动必要部分)/i,
|
|
107
|
-
// Decision directive language
|
|
108
|
-
/(limit|narrow) (the |)(change|impact|scope|blast radius)/i,
|
|
109
|
-
],
|
|
110
|
-
baselineScenarios: ['minimal-diff', 'blast-radius-control'],
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
id: 'T-08',
|
|
114
|
-
patterns: [
|
|
115
|
-
// Thinking process language
|
|
116
|
-
/this (error|failure|issue) (tells us|indicates|signals|suggests|means)/i,
|
|
117
|
-
/let me (stop|pause|step back|reconsider|rethink)/i,
|
|
118
|
-
/这个(错误|失败|问题).*(说明|意味着|提示)/i,
|
|
119
|
-
/让我(停下|暂停|退一步|重新考虑|重新审视)/i,
|
|
120
|
-
// Decision directive language
|
|
121
|
-
/(diagnose|analyze|investigate) (the |)(root |)(cause|reason|error|failure) (first|before)/i,
|
|
122
|
-
/(understand|diagnose|analyze) (the |)(error|failure|issue|problem) (first|before)/i,
|
|
123
|
-
],
|
|
124
|
-
baselineScenarios: ['reflection', 'pain-response'],
|
|
125
|
-
},
|
|
126
|
-
{
|
|
127
|
-
id: 'T-09',
|
|
128
|
-
patterns: [
|
|
129
|
-
// Thinking process language
|
|
130
|
-
/(break|split|decompose|divide) (this |the task |it )?(into|down)/i,
|
|
131
|
-
/(step 1|first,? (we|i|let's)|phase 1)/i,
|
|
132
|
-
/(拆分|分解|分步|分阶段|第一步)/i,
|
|
133
|
-
// Decision directive language
|
|
134
|
-
/(break|split|decompose|divide) (the |)(task|problem|action) (into|into steps)/i,
|
|
135
|
-
],
|
|
136
|
-
baselineScenarios: ['decomposition', 'phased-execution'],
|
|
137
|
-
},
|
|
138
|
-
{
|
|
139
|
-
id: 'T-10',
|
|
140
|
-
patterns: [
|
|
141
|
-
// Thinking process language
|
|
142
|
-
/let me (write|save|record|note down|document)/i,
|
|
143
|
-
/memory.*scratchpad|write.*plan\.md|write.*memory|memory.*persist/i,
|
|
144
|
-
/(让我.*写入|写入.*memory|记录.*scratchpad)/i,
|
|
145
|
-
// Decision directive language
|
|
146
|
-
/(write|save|record|note) (the |)(conclusion|decision|plan|next step) (to|in) (file|plan\.md|scratchpad)/i,
|
|
147
|
-
],
|
|
148
|
-
baselineScenarios: ['memory-persistence', 'state-externalization'],
|
|
149
|
-
},
|
|
150
|
-
];
|
|
151
|
-
const BUILTIN_PATTERN_MAP = new Map(BUILTIN_PATTERNS.map((p) => [p.id, p]));
|
|
152
|
-
// Fallback name/description lookup — delegates to Core Principle Registry
|
|
153
|
-
function getFallbackName(id) {
|
|
154
|
-
const entry = CORE_PRINCIPLES.find(p => p.id === id);
|
|
155
|
-
return entry?.name ?? id;
|
|
156
|
-
}
|
|
157
|
-
function getFallbackDescription(id) {
|
|
158
|
-
const entry = CORE_PRINCIPLES.find(p => p.id === id);
|
|
159
|
-
return entry?.statement ?? '';
|
|
160
|
-
}
|
|
14
|
+
import { BUILTIN_PATTERN_MAP, getFallbackName, getFallbackDescription, } from '@principles/core/runtime-v2';
|
|
15
|
+
// Re-export pure logic + types so existing imports from this module keep working.
|
|
16
|
+
export { BUILTIN_PATTERN_MAP, getFallbackName, getFallbackDescription, } from '@principles/core/runtime-v2';
|
|
17
|
+
export { deriveThinkingScenarios } from '@principles/core/runtime-v2';
|
|
161
18
|
// ---------------------------------------------------------------------------
|
|
162
19
|
// Runtime model definitions — merged from THINKING_OS.md + builtin patterns
|
|
163
20
|
// ---------------------------------------------------------------------------
|
|
@@ -200,27 +57,19 @@ export function listThinkingModels(workspaceDir) {
|
|
|
200
57
|
}
|
|
201
58
|
}
|
|
202
59
|
// Fallback: built-in definitions
|
|
203
|
-
for (const
|
|
60
|
+
for (const [id, builtin] of BUILTIN_PATTERN_MAP) {
|
|
204
61
|
models.push({
|
|
205
|
-
id
|
|
206
|
-
name: getFallbackName(
|
|
207
|
-
description: getFallbackDescription(
|
|
208
|
-
patterns:
|
|
209
|
-
baselineScenarios:
|
|
62
|
+
id,
|
|
63
|
+
name: getFallbackName(id),
|
|
64
|
+
description: getFallbackDescription(id),
|
|
65
|
+
patterns: builtin.patterns,
|
|
66
|
+
baselineScenarios: builtin.baselineScenarios,
|
|
210
67
|
});
|
|
211
68
|
}
|
|
212
69
|
_cachedDefinitions = models;
|
|
213
70
|
_cachedWorkspace = cacheKey;
|
|
214
71
|
return models.slice();
|
|
215
72
|
}
|
|
216
|
-
/**
|
|
217
|
-
* Clear the cached model definitions.
|
|
218
|
-
* Call this when THINKING_OS.md changes.
|
|
219
|
-
*/
|
|
220
|
-
export function clearThinkingModelCache() {
|
|
221
|
-
_cachedDefinitions = null;
|
|
222
|
-
_cachedWorkspace = null;
|
|
223
|
-
}
|
|
224
73
|
export function getThinkingModel(modelId, workspaceDir) {
|
|
225
74
|
const models = listThinkingModels(workspaceDir);
|
|
226
75
|
return models.find(m => m.id === modelId);
|
|
@@ -243,58 +92,3 @@ export function detectThinkingModelMatches(text, workspaceDir) {
|
|
|
243
92
|
}
|
|
244
93
|
return matches;
|
|
245
94
|
}
|
|
246
|
-
/**
|
|
247
|
-
* Get all model definitions for display purposes (no patterns).
|
|
248
|
-
*/
|
|
249
|
-
export function getThinkingModelDefinitions(workspaceDir) {
|
|
250
|
-
return listThinkingModels(workspaceDir).map(m => ({
|
|
251
|
-
modelId: m.id,
|
|
252
|
-
name: m.id + ': ' + m.name,
|
|
253
|
-
description: m.description,
|
|
254
|
-
antiPattern: m.antiPattern,
|
|
255
|
-
}));
|
|
256
|
-
}
|
|
257
|
-
export function deriveThinkingScenarios(modelId, context) {
|
|
258
|
-
const scenarios = new Set(getThinkingModel(modelId)?.baselineScenarios ?? []);
|
|
259
|
-
if ((context.recentToolCalls ?? []).some((call) => call.outcome === 'failure')) {
|
|
260
|
-
scenarios.add('after-tool-failure');
|
|
261
|
-
}
|
|
262
|
-
// after-recovery: success that follows a failure (not just any success)
|
|
263
|
-
const calls = context.recentToolCalls ?? [];
|
|
264
|
-
const hasFailure = calls.some((call) => call.outcome === 'failure');
|
|
265
|
-
const hasSuccess = calls.some((call) => call.outcome === 'success');
|
|
266
|
-
if (hasFailure && hasSuccess) {
|
|
267
|
-
scenarios.add('after-recovery');
|
|
268
|
-
}
|
|
269
|
-
if ((context.recentToolCalls ?? []).some((call) => call.outcome === 'blocked')) {
|
|
270
|
-
scenarios.add('blocked-execution');
|
|
271
|
-
}
|
|
272
|
-
if ((context.recentToolCalls ?? []).some((call) => Boolean(call.errorType))) {
|
|
273
|
-
scenarios.add('incident-response');
|
|
274
|
-
}
|
|
275
|
-
if ((context.recentPainEvents ?? []).length > 0) {
|
|
276
|
-
scenarios.add('user-friction');
|
|
277
|
-
}
|
|
278
|
-
if ((context.recentGateBlocks ?? []).length > 0) {
|
|
279
|
-
scenarios.add('gate-block');
|
|
280
|
-
}
|
|
281
|
-
if ((context.recentUserCorrections ?? []).length > 0) {
|
|
282
|
-
scenarios.add('user-correction');
|
|
283
|
-
}
|
|
284
|
-
if ((context.recentPrincipleEvents ?? []).length > 0) {
|
|
285
|
-
scenarios.add('principle-feedback');
|
|
286
|
-
}
|
|
287
|
-
if (modelId === 'T-03') {
|
|
288
|
-
scenarios.add('root-cause-analysis');
|
|
289
|
-
}
|
|
290
|
-
if (modelId === 'T-04' || modelId === 'T-05') {
|
|
291
|
-
scenarios.add('risk-review');
|
|
292
|
-
}
|
|
293
|
-
if (modelId === 'T-08') {
|
|
294
|
-
scenarios.add('reflection-loop');
|
|
295
|
-
}
|
|
296
|
-
if (modelId === 'T-09') {
|
|
297
|
-
scenarios.add('task-planning');
|
|
298
|
-
}
|
|
299
|
-
return Array.from(scenarios);
|
|
300
|
-
}
|
|
@@ -222,4 +222,22 @@ export interface TrajectoryDatabaseOptions {
|
|
|
222
222
|
busyTimeoutMs?: number;
|
|
223
223
|
orphanBlobGraceDays?: number;
|
|
224
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Raw row from tool_calls for RuleContext v2 history assembly.
|
|
227
|
+
* Fields are raw strings from SQLite — the assembler validates them as unknown.
|
|
228
|
+
*/
|
|
229
|
+
export interface RuleHostContextRow {
|
|
230
|
+
readonly id: number;
|
|
231
|
+
readonly toolName: string;
|
|
232
|
+
readonly outcome: string;
|
|
233
|
+
readonly paramsJson: string;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Result of getRuleHostContextRows: FIFO-ordered rows + truncated flag.
|
|
237
|
+
* truncated=true when more than `limit` rows existed (limit+1 read trick).
|
|
238
|
+
*/
|
|
239
|
+
export interface RuleHostContextResult {
|
|
240
|
+
readonly rows: readonly RuleHostContextRow[];
|
|
241
|
+
readonly truncated: boolean;
|
|
242
|
+
}
|
|
225
243
|
export type { DailyMetricRow };
|
|
@@ -1,5 +1,5 @@
|
|
|
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
|
-
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';
|
|
1
|
+
import type { CorrectionSampleReviewStatus, CorrectionExportMode, TrajectoryDataStats, TrajectoryAssistantTurnInput, TrajectoryUserTurnInput, TrajectoryToolCallInput, TrajectoryPainEventInput, TrajectoryGateBlockInput, TrajectoryTrustChangeInput, TrajectoryPrincipleEventInput, TrajectoryTaskOutcomeInput, TrajectorySessionInput, EvolutionTaskInput, EvolutionEventInput, EvolutionTaskRecord, EvolutionEventRecord, EvolutionTaskFilters, AssistantTurnRecord, CorrectionSampleRecord, TrajectoryExportResult, TrajectoryDatabaseOptions, RuleHostContextResult } from './trajectory-types.js';
|
|
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, RuleHostContextRow, RuleHostContextResult, } from './trajectory-types.js';
|
|
3
3
|
/**
|
|
4
4
|
* Initialize trajectory.db schema at the given workspace directory.
|
|
5
5
|
*
|
|
@@ -121,6 +121,15 @@ export declare class TrajectoryDatabase {
|
|
|
121
121
|
resultPreview: string | null;
|
|
122
122
|
createdAt: string;
|
|
123
123
|
}[];
|
|
124
|
+
/**
|
|
125
|
+
* PRI-482 Phase 3: Query tool_calls for RuleContext v2 history assembly.
|
|
126
|
+
*
|
|
127
|
+
* Reads limit+1 rows (DESC by id) to compute truncated, then reverses to FIFO.
|
|
128
|
+
* Returns raw rows — the assembler (rule-context-assembler.ts) validates them.
|
|
129
|
+
*
|
|
130
|
+
* Spec: §5.1, §5.2. ERR-026: reuses production schema (no hand-written DDL).
|
|
131
|
+
*/
|
|
132
|
+
getRuleHostContextRows(sessionId: string, limit?: number): RuleHostContextResult;
|
|
124
133
|
/**
|
|
125
134
|
* List pain events for a session.
|
|
126
135
|
*
|
|
@@ -137,6 +146,29 @@ export declare class TrajectoryDatabase {
|
|
|
137
146
|
confidence: number | null;
|
|
138
147
|
createdAt: string;
|
|
139
148
|
}[];
|
|
149
|
+
/**
|
|
150
|
+
* PRI-484 Phase 5 — Look up a single pain event by canonical_pain_id.
|
|
151
|
+
*
|
|
152
|
+
* Used by BehaviorExamplePackAssembler to anchor a pain lineage without
|
|
153
|
+
* already knowing the session_id. Returns null when not found.
|
|
154
|
+
*
|
|
155
|
+
* ERR-001 (rc-1, rc-2): row fields validated as unknown — no `as` bypass.
|
|
156
|
+
* Uses a type-guard predicate to narrow the DB row structurally.
|
|
157
|
+
*/
|
|
158
|
+
getPainEventByCanonicalId(canonicalPainId: string): {
|
|
159
|
+
id: number;
|
|
160
|
+
sessionId: string;
|
|
161
|
+
source: string;
|
|
162
|
+
score: number;
|
|
163
|
+
reason: string | null;
|
|
164
|
+
severity: string | null;
|
|
165
|
+
origin: string | null;
|
|
166
|
+
confidence: number | null;
|
|
167
|
+
text: string | null;
|
|
168
|
+
canonicalPainId: string;
|
|
169
|
+
runtimeTaskId: string | null;
|
|
170
|
+
createdAt: string;
|
|
171
|
+
} | null;
|
|
140
172
|
/**
|
|
141
173
|
* List user turns for a session.
|
|
142
174
|
* Returns sanitized/reduced fields for nocturnal use — NO raw text.
|
|
@@ -26,6 +26,34 @@ const SCHEMA_VERSION = 1;
|
|
|
26
26
|
function hasNameField(row) {
|
|
27
27
|
return Object.hasOwn(row, 'name');
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Pure structural narrowing from `unknown` to `Record<string, unknown>` with
|
|
31
|
+
* no `as` cast (ERR-001 / rc-2). The returned type allows indexed access in
|
|
32
|
+
* subsequent code without further casts.
|
|
33
|
+
*/
|
|
34
|
+
function isStringRecord(value) {
|
|
35
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
36
|
+
}
|
|
37
|
+
function isPainEventRow(value) {
|
|
38
|
+
if (!isStringRecord(value))
|
|
39
|
+
return false;
|
|
40
|
+
if (typeof value.id !== 'number')
|
|
41
|
+
return false;
|
|
42
|
+
if (typeof value.session_id !== 'string')
|
|
43
|
+
return false;
|
|
44
|
+
// The remaining fields are accessed via String()/Number() which tolerate any
|
|
45
|
+
// primitive; presence check only (rc-5: Object.hasOwn over `in`).
|
|
46
|
+
return (Object.hasOwn(value, 'source')
|
|
47
|
+
&& Object.hasOwn(value, 'score')
|
|
48
|
+
&& Object.hasOwn(value, 'reason')
|
|
49
|
+
&& Object.hasOwn(value, 'severity')
|
|
50
|
+
&& Object.hasOwn(value, 'origin')
|
|
51
|
+
&& Object.hasOwn(value, 'confidence')
|
|
52
|
+
&& Object.hasOwn(value, 'text')
|
|
53
|
+
&& Object.hasOwn(value, 'canonical_pain_id')
|
|
54
|
+
&& Object.hasOwn(value, 'runtime_task_id')
|
|
55
|
+
&& Object.hasOwn(value, 'created_at'));
|
|
56
|
+
}
|
|
29
57
|
/**
|
|
30
58
|
* Apply the full trajectory.db schema (tables + indexes + views + migrations) to an open
|
|
31
59
|
* Database handle. Used by TrajectoryDatabase.initSchema() and exported via
|
|
@@ -69,6 +97,8 @@ function applyTrajectorySchema(db) {
|
|
|
69
97
|
empathy_signal_json TEXT NOT NULL,
|
|
70
98
|
blob_ref TEXT,
|
|
71
99
|
raw_excerpt TEXT,
|
|
100
|
+
stop_reason TEXT,
|
|
101
|
+
thinking_blocks_count INTEGER,
|
|
72
102
|
created_at TEXT NOT NULL
|
|
73
103
|
);
|
|
74
104
|
CREATE TABLE IF NOT EXISTS user_turns (
|
|
@@ -95,6 +125,7 @@ function applyTrajectorySchema(db) {
|
|
|
95
125
|
gfi_before REAL,
|
|
96
126
|
gfi_after REAL,
|
|
97
127
|
params_json TEXT NOT NULL,
|
|
128
|
+
result_preview TEXT,
|
|
98
129
|
created_at TEXT NOT NULL
|
|
99
130
|
);
|
|
100
131
|
CREATE TABLE IF NOT EXISTS pain_events (
|
|
@@ -107,6 +138,8 @@ function applyTrajectorySchema(db) {
|
|
|
107
138
|
origin TEXT,
|
|
108
139
|
confidence REAL,
|
|
109
140
|
text TEXT,
|
|
141
|
+
canonical_pain_id TEXT,
|
|
142
|
+
runtime_task_id TEXT,
|
|
110
143
|
created_at TEXT NOT NULL
|
|
111
144
|
);
|
|
112
145
|
CREATE TABLE IF NOT EXISTS gate_blocks (
|
|
@@ -185,6 +218,12 @@ function applyTrajectorySchema(db) {
|
|
|
185
218
|
started_at TEXT,
|
|
186
219
|
completed_at TEXT,
|
|
187
220
|
resolution TEXT,
|
|
221
|
+
task_kind TEXT,
|
|
222
|
+
priority TEXT,
|
|
223
|
+
retry_count INTEGER,
|
|
224
|
+
max_retries INTEGER,
|
|
225
|
+
last_error TEXT,
|
|
226
|
+
result_ref TEXT,
|
|
188
227
|
created_at TEXT NOT NULL,
|
|
189
228
|
updated_at TEXT NOT NULL
|
|
190
229
|
);
|
|
@@ -892,6 +931,36 @@ export class TrajectoryDatabase {
|
|
|
892
931
|
};
|
|
893
932
|
});
|
|
894
933
|
}
|
|
934
|
+
/**
|
|
935
|
+
* PRI-482 Phase 3: Query tool_calls for RuleContext v2 history assembly.
|
|
936
|
+
*
|
|
937
|
+
* Reads limit+1 rows (DESC by id) to compute truncated, then reverses to FIFO.
|
|
938
|
+
* Returns raw rows — the assembler (rule-context-assembler.ts) validates them.
|
|
939
|
+
*
|
|
940
|
+
* Spec: §5.1, §5.2. ERR-026: reuses production schema (no hand-written DDL).
|
|
941
|
+
*/
|
|
942
|
+
getRuleHostContextRows(sessionId, limit = 20) {
|
|
943
|
+
const cappedLimit = Math.max(1, Math.floor(limit));
|
|
944
|
+
const rows = this.db.prepare(`
|
|
945
|
+
SELECT id, tool_name, outcome, params_json
|
|
946
|
+
FROM tool_calls
|
|
947
|
+
WHERE session_id = ?
|
|
948
|
+
ORDER BY id DESC
|
|
949
|
+
LIMIT ?
|
|
950
|
+
`).all(sessionId, cappedLimit + 1);
|
|
951
|
+
const truncated = rows.length > cappedLimit;
|
|
952
|
+
const output = truncated ? rows.slice(0, cappedLimit) : rows;
|
|
953
|
+
output.reverse(); // DESC → FIFO (oldest first)
|
|
954
|
+
return {
|
|
955
|
+
rows: output.map((row) => ({
|
|
956
|
+
id: Number(row.id),
|
|
957
|
+
toolName: String(row.tool_name),
|
|
958
|
+
outcome: String(row.outcome),
|
|
959
|
+
paramsJson: String(row.params_json),
|
|
960
|
+
})),
|
|
961
|
+
truncated,
|
|
962
|
+
};
|
|
963
|
+
}
|
|
895
964
|
/**
|
|
896
965
|
* List pain events for a session.
|
|
897
966
|
*
|
|
@@ -916,6 +985,40 @@ export class TrajectoryDatabase {
|
|
|
916
985
|
createdAt: String(row.created_at),
|
|
917
986
|
}));
|
|
918
987
|
}
|
|
988
|
+
/**
|
|
989
|
+
* PRI-484 Phase 5 — Look up a single pain event by canonical_pain_id.
|
|
990
|
+
*
|
|
991
|
+
* Used by BehaviorExamplePackAssembler to anchor a pain lineage without
|
|
992
|
+
* already knowing the session_id. Returns null when not found.
|
|
993
|
+
*
|
|
994
|
+
* ERR-001 (rc-1, rc-2): row fields validated as unknown — no `as` bypass.
|
|
995
|
+
* Uses a type-guard predicate to narrow the DB row structurally.
|
|
996
|
+
*/
|
|
997
|
+
getPainEventByCanonicalId(canonicalPainId) {
|
|
998
|
+
const rawRow = this.db.prepare(`
|
|
999
|
+
SELECT id, session_id, source, score, reason, severity, origin, confidence,
|
|
1000
|
+
text, canonical_pain_id, runtime_task_id, created_at
|
|
1001
|
+
FROM pain_events
|
|
1002
|
+
WHERE canonical_pain_id = ?
|
|
1003
|
+
LIMIT 1
|
|
1004
|
+
`).get(canonicalPainId);
|
|
1005
|
+
if (!isPainEventRow(rawRow))
|
|
1006
|
+
return null;
|
|
1007
|
+
return {
|
|
1008
|
+
id: rawRow.id,
|
|
1009
|
+
sessionId: rawRow.session_id,
|
|
1010
|
+
source: String(rawRow.source),
|
|
1011
|
+
score: Number(rawRow.score),
|
|
1012
|
+
reason: rawRow.reason ? String(rawRow.reason) : null,
|
|
1013
|
+
severity: rawRow.severity ? String(rawRow.severity) : null,
|
|
1014
|
+
origin: rawRow.origin ? String(rawRow.origin) : null,
|
|
1015
|
+
confidence: rawRow.confidence != null ? Number(rawRow.confidence) : null,
|
|
1016
|
+
text: rawRow.text ? String(rawRow.text) : null,
|
|
1017
|
+
canonicalPainId: String(rawRow.canonical_pain_id),
|
|
1018
|
+
runtimeTaskId: rawRow.runtime_task_id ? String(rawRow.runtime_task_id) : null,
|
|
1019
|
+
createdAt: String(rawRow.created_at),
|
|
1020
|
+
};
|
|
1021
|
+
}
|
|
919
1022
|
/**
|
|
920
1023
|
* List user turns for a session.
|
|
921
1024
|
* Returns sanitized/reduced fields for nocturnal use — NO raw text.
|
|
@@ -12,12 +12,14 @@ import { normalizePath } from '../utils/io.js';
|
|
|
12
12
|
import { WorkspaceContext } from '../core/workspace-context.js';
|
|
13
13
|
import { recordGateBlockAndReturn } from './gate-block-helper.js';
|
|
14
14
|
import { RuleHost } from '../core/rule-host.js';
|
|
15
|
-
import { validateCorrectionProposal, validateProposedPathBounds } from '@principles/core/runtime-v2';
|
|
15
|
+
import { validateCorrectionProposal, validateProposedPathBounds, computeFeatureFlagsFromConfig, UNAVAILABLE_RULE_CONTEXT } from '@principles/core/runtime-v2';
|
|
16
16
|
import { AGENT_TOOLS, BASH_TOOLS_SET, WRITE_TOOLS } from '../constants/tools.js';
|
|
17
17
|
import { getSession, hasRecentThinking } from '../core/session-tracker.js';
|
|
18
18
|
import { getEvolutionEngine } from '../core/evolution-engine.js';
|
|
19
19
|
import { EventLogService } from '../core/event-log.js';
|
|
20
|
-
import { estimateLineChanges } from '
|
|
20
|
+
import { estimateLineChanges } from '@principles/core/runtime-v2';
|
|
21
|
+
import { loadPdConfigForPlugin } from '../core/pd-config-loader.js';
|
|
22
|
+
import { buildProductionRuleContext } from '../core/rule-context-assembler.js';
|
|
21
23
|
export function handleBeforeToolCall(event, ctx) {
|
|
22
24
|
const logger = ctx.logger || console;
|
|
23
25
|
// 1. Identify tool type
|
|
@@ -53,6 +55,10 @@ export function handleBeforeToolCall(event, ctx) {
|
|
|
53
55
|
// 3. Rule Host Evaluation — sole gate
|
|
54
56
|
try {
|
|
55
57
|
const ruleHost = new RuleHost(wctx.stateDir, logger, { workspaceDir: ctx.workspaceDir });
|
|
58
|
+
// PRI-483 Phase 4: assemble RuleContextV2 when `rulecode_context_v2` flag is ON.
|
|
59
|
+
// flag OFF → undefined (v1 zero-change, no trajectory access).
|
|
60
|
+
// flag ON → RuleContextV2 (available or unavailable). Never throws (ERR-024).
|
|
61
|
+
const ruleContext = _buildRuleContextIfEnabled(wctx, relPath, ctx.sessionId, logger);
|
|
56
62
|
const hostInput = {
|
|
57
63
|
action: {
|
|
58
64
|
toolName: event.toolName,
|
|
@@ -80,6 +86,7 @@ export function handleBeforeToolCall(event, ctx) {
|
|
|
80
86
|
estimatedLineChanges: estimateLineChanges({ toolName: event.toolName, params: event.params ?? {} }),
|
|
81
87
|
bashRisk: _getBashRisk(event),
|
|
82
88
|
},
|
|
89
|
+
context: ruleContext,
|
|
83
90
|
};
|
|
84
91
|
const hostResult = ruleHost.evaluate(hostInput);
|
|
85
92
|
// Always emit rulehost_evaluated
|
|
@@ -379,3 +386,53 @@ function _getBashRisk(event) {
|
|
|
379
386
|
return 'unknown';
|
|
380
387
|
}
|
|
381
388
|
}
|
|
389
|
+
/**
|
|
390
|
+
* PRI-483 Phase 4 — Build RuleContextV2 for RuleHost.evaluate when the
|
|
391
|
+
* `rulecode_context_v2` feature flag is ON. Returns `undefined` when the flag
|
|
392
|
+
* is OFF (v1 zero-change — does NOT touch trajectory) or when config loading
|
|
393
|
+
* fails (conservative fail-soft: can't determine flag state → v1-style).
|
|
394
|
+
*
|
|
395
|
+
* ERR-024 prevention: context assembly failures never skip RuleHost.evaluate.
|
|
396
|
+
* - loadPdConfigForPlugin throws → return undefined (v1-style)
|
|
397
|
+
* - buildProductionRuleContext throws → return UNAVAILABLE_RULE_CONTEXT
|
|
398
|
+
* (structured unavailable so v2 rules see "context unavailable" and allow)
|
|
399
|
+
*
|
|
400
|
+
* Spec: docs/superpowers/specs/2026-06-27-rulecode-context-vision-design.md §5.3
|
|
401
|
+
*/
|
|
402
|
+
function _buildRuleContextIfEnabled(wctx, targetPath, sessionId, logger) {
|
|
403
|
+
// Step 1: load PD config (flag-gated). If this throws, we can't safely
|
|
404
|
+
// determine whether v2 context is required — fall back to v1 (undefined).
|
|
405
|
+
let configResult;
|
|
406
|
+
try {
|
|
407
|
+
configResult = loadPdConfigForPlugin(wctx.workspaceDir);
|
|
408
|
+
}
|
|
409
|
+
catch (err) {
|
|
410
|
+
logger?.warn?.(`[PD_GATE] RuleContext v2: config load failed, skipping context assembly: ${String(err)}`);
|
|
411
|
+
return undefined;
|
|
412
|
+
}
|
|
413
|
+
// Step 2: compute effective flags and check rulecode_context_v2.
|
|
414
|
+
// Explicit ok:false guard (rc-9-no-silent-fallback): when config is malformed,
|
|
415
|
+
// do NOT silently fall through to flag computation on defaults — log and
|
|
416
|
+
// return v1-style undefined so config issues surface to the operator.
|
|
417
|
+
if (!configResult.ok) {
|
|
418
|
+
const reasons = configResult.errors.map(e => e.reason).join('; ');
|
|
419
|
+
logger?.warn?.(`[PD_GATE] RuleContext v2: config load returned malformed result, skipping context assembly: ${reasons}`);
|
|
420
|
+
return undefined;
|
|
421
|
+
}
|
|
422
|
+
const flagsResult = computeFeatureFlagsFromConfig(configResult.effective);
|
|
423
|
+
const v2Flag = flagsResult.flags.rulecode_context_v2;
|
|
424
|
+
if (!v2Flag?.enabled) {
|
|
425
|
+
// Flag OFF → v1 zero-change. Do NOT access trajectory (spec §10.1).
|
|
426
|
+
return undefined;
|
|
427
|
+
}
|
|
428
|
+
// Step 3: flag ON → assemble context via production data source.
|
|
429
|
+
// buildProductionRuleContext is fail-soft internally (returns unavailable),
|
|
430
|
+
// but wrap in try/catch as defense-in-depth (ERR-024).
|
|
431
|
+
try {
|
|
432
|
+
return buildProductionRuleContext(sessionId, targetPath, wctx.trajectory, wctx.workspaceDir);
|
|
433
|
+
}
|
|
434
|
+
catch (err) {
|
|
435
|
+
logger?.warn?.(`[PD_GATE] RuleContext v2: buildProductionRuleContext threw unexpectedly, using unavailable context: ${String(err)}`);
|
|
436
|
+
return UNAVAILABLE_RULE_CONTEXT;
|
|
437
|
+
}
|
|
438
|
+
}
|
|
@@ -25,7 +25,7 @@ import { resolveWorkspaceDirForRuntimeV2 } from '../utils/workspace-resolver.js'
|
|
|
25
25
|
import { PainToPrincipleService, PrincipleTreeLedgerAdapter } from '@principles/core/runtime-v2';
|
|
26
26
|
import { evaluatePainDiagnosticGate } from '../core/pain-diagnostic-gate.js';
|
|
27
27
|
import { loadPdConfigForPlugin, loadFeatureFlagFromConfig } from '../core/pd-config-loader.js';
|
|
28
|
-
import { createIntentDocReader } from '../core/intent-doc-reader-adapter.js';
|
|
28
|
+
import { createIntentDocReader, resolveIntentLang } from '../core/intent-doc-reader-adapter.js';
|
|
29
29
|
import { evaluateTriggerController } from '@principles/core/runtime-v2';
|
|
30
30
|
import { isSharedCooldownActive, markSharedEpisodeAsDiagnosed } from './trigger-cooldown-tracker.js';
|
|
31
31
|
import { buildManualPainObservation, resolveSourceKind } from './raw-observation-adapter.js';
|
|
@@ -48,7 +48,7 @@ function createPainToPrincipleService(wctx) {
|
|
|
48
48
|
// PRI-468: wire INTENT.md reader so Stage A can produce intentTension
|
|
49
49
|
// when intent_engineering flag is on. Adapter performs no I/O beyond
|
|
50
50
|
// delegating to safeReadIntentDoc (which owns the flag-first check).
|
|
51
|
-
intentDocReader: createIntentDocReader(wctx.workspaceDir),
|
|
51
|
+
intentDocReader: createIntentDocReader(wctx.workspaceDir, resolveIntentLang(wctx.workspaceDir)),
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
// buildTrajectoryEvidence is in ./trajectory-evidence.ts (re-exported above)
|
|
@@ -21,6 +21,7 @@ import { buildEmpathyObservation, resolveSourceKind } from './raw-observation-ad
|
|
|
21
21
|
import { evaluateEvidenceTriage } from './triage-adapter.js';
|
|
22
22
|
import { loadFeatureFlagFromConfig } from '../core/pd-config-loader.js';
|
|
23
23
|
import { safeReadIntentDoc, resetIntentDocCacheForTest } from '../core/intent-doc-reader.js';
|
|
24
|
+
import { resolveIntentLang } from '../core/intent-doc-reader-adapter.js';
|
|
24
25
|
import { buildIntentFrictionBlock } from '@principles/core/runtime-v2';
|
|
25
26
|
import { CorrectionCueLearner } from '../core/correction-cue-learner.js';
|
|
26
27
|
import { detectCorrectionCue as coreDetectCorrectionCue, escapeXml, extractMessageContent, isMinimalTrigger, } from '@principles/core/prompt-builder';
|
|
@@ -909,7 +910,7 @@ export async function handleBeforePromptBuild(event, ctx) {
|
|
|
909
910
|
try {
|
|
910
911
|
const intentFlag = loadFeatureFlagFromConfig(workspaceDir, 'intent_engineering', logger);
|
|
911
912
|
if (intentFlag.enabled) {
|
|
912
|
-
const intentResult = safeReadIntentDoc(workspaceDir, { logger });
|
|
913
|
+
const intentResult = safeReadIntentDoc(workspaceDir, resolveIntentLang(workspaceDir), { logger });
|
|
913
914
|
if (intentResult.ok && intentResult.doc) {
|
|
914
915
|
const block = buildIntentFrictionBlock({ rawIntentMd: intentResult.doc.raw });
|
|
915
916
|
if (block.length > 0) {
|
package/plugin/dist/index.js
CHANGED
|
@@ -38,7 +38,7 @@ import { SystemLogger } from './core/system-logger.js';
|
|
|
38
38
|
import { PathResolver } from './core/path-resolver.js';
|
|
39
39
|
import { resolveCommandWorkspaceDir, resolveToolHookWorkspaceDirSafe, resolveHookWorkspaceDir } from './utils/workspace-resolver.js';
|
|
40
40
|
import { validateWorkspaceDir } from './core/workspace-dir-validation.js';
|
|
41
|
-
import { checkSurfaceGuard, guardHook, guardService } from '
|
|
41
|
+
import { checkSurfaceGuard, guardHook, guardService } from '@principles/core/runtime-v2';
|
|
42
42
|
// Track started workspaces — one-time init + evolution worker per workspace
|
|
43
43
|
const startedWorkspaces = new Set();
|
|
44
44
|
// ── Conversation Access Health Check (PRI-343) ────────────────────────────
|
package/plugin/package.json
CHANGED