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
|
@@ -2,14 +2,17 @@
|
|
|
2
2
|
* pd intent — Owner-authored INTENT.md management (PRI-466).
|
|
3
3
|
*
|
|
4
4
|
* Subcommands:
|
|
5
|
-
* - init : create .principles/INTENT.md from the canonical template
|
|
6
|
-
* - show : display a read-only summary of INTENT.md (sections, hash, warnings)
|
|
5
|
+
* - init : create .principles/INTENT.{lang}.md from the canonical template
|
|
6
|
+
* - show : display a read-only summary of INTENT.{lang}.md (sections, hash, warnings)
|
|
7
7
|
*
|
|
8
8
|
* `init` is not gated by the intent_engineering flag — the Owner can
|
|
9
9
|
* initialise the intent doc at any time. `show` IS gated: flag-off returns
|
|
10
10
|
* a structured `flag_disabled` result without touching the filesystem,
|
|
11
11
|
* matching the Console backend contract.
|
|
12
12
|
*
|
|
13
|
+
* Bilingual: --lang zh-CN|en (default zh-CN) selects the intent doc language.
|
|
14
|
+
* File naming: INTENT.zh-CN.md / INTENT.en.md via getIntentFilename(lang).
|
|
15
|
+
*
|
|
13
16
|
* JSON mode is strict: --json outputs exactly one parseable JSON object on
|
|
14
17
|
* stdout (CLI Operator Gate rule 1). Failure paths include structured
|
|
15
18
|
* reason + nextAction (rule 6).
|
|
@@ -23,16 +26,33 @@
|
|
|
23
26
|
*/
|
|
24
27
|
import * as fs from 'node:fs';
|
|
25
28
|
import * as path from 'node:path';
|
|
26
|
-
import { INTENT_MAX_BYTES,
|
|
29
|
+
import { INTENT_MAX_BYTES, getIntentFilename, createIntentTemplate, parseIntentDocSections, computeIntentContentHash, validateIntentDocSections, isFeatureEnabled, } from '@principles/core/runtime-v2';
|
|
27
30
|
import { resolveWorkspaceDir } from '../resolve-workspace.js';
|
|
28
31
|
import { loadPdConfig, computeFlagsFromLoadResult } from '../services/pd-config-loader.js';
|
|
29
32
|
import { emitResult } from '../services/cli-output.js';
|
|
30
33
|
// ── Constants ────────────────────────────────────────────────────────────────
|
|
31
34
|
const INTENT_DIR = '.principles';
|
|
32
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Parse and validate the --lang option.
|
|
37
|
+
*
|
|
38
|
+
* Returns:
|
|
39
|
+
* - 'zh-CN' | 'en' when value is undefined (default zh-CN) or a valid lang.
|
|
40
|
+
* - null when value is a non-empty string that is neither 'zh-CN' nor 'en'.
|
|
41
|
+
*
|
|
42
|
+
* rc-9: invalid values MUST NOT silently fall back to zh-CN — that would
|
|
43
|
+
* let a typo like `--lang zh` quietly write to INTENT.zh-CN.md. Callers
|
|
44
|
+
* emit a structured `invalid_lang` error when null is returned.
|
|
45
|
+
*/
|
|
46
|
+
export function parseLang(value) {
|
|
47
|
+
if (value === undefined)
|
|
48
|
+
return 'zh-CN';
|
|
49
|
+
if (value === 'zh-CN' || value === 'en')
|
|
50
|
+
return value;
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
33
53
|
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
34
|
-
function getIntentFilePath(workspaceDir) {
|
|
35
|
-
return path.join(workspaceDir, INTENT_DIR,
|
|
54
|
+
function getIntentFilePath(workspaceDir, lang) {
|
|
55
|
+
return path.join(workspaceDir, INTENT_DIR, getIntentFilename(lang));
|
|
36
56
|
}
|
|
37
57
|
function sectionsToRecord(sections) {
|
|
38
58
|
const record = {};
|
|
@@ -53,9 +73,9 @@ function sectionsToRecord(sections) {
|
|
|
53
73
|
}
|
|
54
74
|
return record;
|
|
55
75
|
}
|
|
56
|
-
function formatIntentShowText(o) {
|
|
76
|
+
function formatIntentShowText(o, filename) {
|
|
57
77
|
const lines = [];
|
|
58
|
-
lines.push(
|
|
78
|
+
lines.push(`${filename} — ${o.path}`);
|
|
59
79
|
lines.push(`Content hash: ${o.contentHash}`);
|
|
60
80
|
lines.push(`Last edited: ${o.lastEditedAt}`);
|
|
61
81
|
lines.push('');
|
|
@@ -98,6 +118,23 @@ function formatIntentShowText(o) {
|
|
|
98
118
|
return lines.join('\n');
|
|
99
119
|
}
|
|
100
120
|
export async function handleIntentInit(opts) {
|
|
121
|
+
const lang = parseLang(opts.lang);
|
|
122
|
+
// rc-9: invalid --lang must not silently fall back. Emit structured error.
|
|
123
|
+
if (lang === null) {
|
|
124
|
+
const output = {
|
|
125
|
+
status: 'skipped',
|
|
126
|
+
path: '',
|
|
127
|
+
overwritten: false,
|
|
128
|
+
reason: 'invalid_lang',
|
|
129
|
+
nextAction: `--lang must be 'zh-CN' or 'en'. Received: ${opts.lang ?? ''}`,
|
|
130
|
+
};
|
|
131
|
+
emitResult(output, {
|
|
132
|
+
json: opts.json ?? false,
|
|
133
|
+
formatText: (o) => `Error: ${o.reason}\n→ ${o.nextAction}`,
|
|
134
|
+
});
|
|
135
|
+
process.exitCode = 1;
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
101
138
|
// CLI Gate rule 4: --dry-run and --confirm must be mutually exclusive.
|
|
102
139
|
if (opts.dryRun && opts.confirm) {
|
|
103
140
|
const output = {
|
|
@@ -121,7 +158,7 @@ export async function handleIntentInit(opts) {
|
|
|
121
158
|
let dir;
|
|
122
159
|
try {
|
|
123
160
|
workspaceDir = resolveWorkspaceDir(opts.workspace);
|
|
124
|
-
filePath = getIntentFilePath(workspaceDir);
|
|
161
|
+
filePath = getIntentFilePath(workspaceDir, lang);
|
|
125
162
|
dir = path.dirname(filePath);
|
|
126
163
|
}
|
|
127
164
|
catch (err) {
|
|
@@ -140,6 +177,7 @@ export async function handleIntentInit(opts) {
|
|
|
140
177
|
process.exitCode = 1;
|
|
141
178
|
return;
|
|
142
179
|
}
|
|
180
|
+
const filename = getIntentFilename(lang);
|
|
143
181
|
// CLI Gate rule 4: state-mutating command defaults to dry-run unless --confirm.
|
|
144
182
|
const isDryRun = opts.dryRun === true || opts.confirm !== true;
|
|
145
183
|
try {
|
|
@@ -149,11 +187,11 @@ export async function handleIntentInit(opts) {
|
|
|
149
187
|
path: filePath,
|
|
150
188
|
overwritten: false,
|
|
151
189
|
reason: 'file_exists',
|
|
152
|
-
nextAction: `Use --force to overwrite: pd intent init --force --confirm --workspace "${workspaceDir}"`,
|
|
190
|
+
nextAction: `Use --force to overwrite: pd intent init --force --confirm --lang ${lang} --workspace "${workspaceDir}"`,
|
|
153
191
|
};
|
|
154
192
|
emitResult(output, {
|
|
155
193
|
json: opts.json ?? false,
|
|
156
|
-
formatText: (o) =>
|
|
194
|
+
formatText: (o) => `${filename} already exists at ${o.path}\n→ ${o.nextAction}`,
|
|
157
195
|
});
|
|
158
196
|
process.exitCode = 1;
|
|
159
197
|
return;
|
|
@@ -164,16 +202,16 @@ export async function handleIntentInit(opts) {
|
|
|
164
202
|
path: filePath,
|
|
165
203
|
overwritten: opts.force === true,
|
|
166
204
|
reason: 'dry_run',
|
|
167
|
-
nextAction: `Confirm write: pd intent init --confirm${opts.force ? ' --force' : ''} --workspace "${workspaceDir}"`,
|
|
205
|
+
nextAction: `Confirm write: pd intent init --confirm --lang ${lang}${opts.force ? ' --force' : ''} --workspace "${workspaceDir}"`,
|
|
168
206
|
};
|
|
169
207
|
emitResult(output, {
|
|
170
208
|
json: opts.json ?? false,
|
|
171
|
-
formatText: (o) => `[dry-run] Would create
|
|
209
|
+
formatText: (o) => `[dry-run] Would create ${filename} at ${o.path}${o.overwritten ? ' (overwritten)' : ''}\n→ ${o.nextAction}`,
|
|
172
210
|
});
|
|
173
211
|
return;
|
|
174
212
|
}
|
|
175
213
|
fs.mkdirSync(dir, { recursive: true });
|
|
176
|
-
fs.writeFileSync(filePath,
|
|
214
|
+
fs.writeFileSync(filePath, createIntentTemplate(lang), 'utf8');
|
|
177
215
|
const output = {
|
|
178
216
|
status: 'ok',
|
|
179
217
|
path: filePath,
|
|
@@ -181,7 +219,7 @@ export async function handleIntentInit(opts) {
|
|
|
181
219
|
};
|
|
182
220
|
emitResult(output, {
|
|
183
221
|
json: opts.json ?? false,
|
|
184
|
-
formatText: (o) => `Created
|
|
222
|
+
formatText: (o) => `Created ${filename} at ${o.path}${o.overwritten ? ' (overwritten)' : ''}\nNext: edit the file to declare your project intent, then run "pd intent show --lang ${lang}".`,
|
|
185
223
|
});
|
|
186
224
|
}
|
|
187
225
|
catch (err) {
|
|
@@ -202,6 +240,24 @@ export async function handleIntentInit(opts) {
|
|
|
202
240
|
}
|
|
203
241
|
}
|
|
204
242
|
export async function handleIntentShow(opts) {
|
|
243
|
+
const lang = parseLang(opts.lang);
|
|
244
|
+
// rc-9: invalid --lang must not silently fall back. Emit structured error.
|
|
245
|
+
if (lang === null) {
|
|
246
|
+
const output = {
|
|
247
|
+
status: 'skipped',
|
|
248
|
+
flagEnabled: false,
|
|
249
|
+
found: false,
|
|
250
|
+
warnings: [],
|
|
251
|
+
reason: 'invalid_lang',
|
|
252
|
+
nextAction: `--lang must be 'zh-CN' or 'en'. Received: ${opts.lang ?? ''}`,
|
|
253
|
+
};
|
|
254
|
+
emitResult(output, {
|
|
255
|
+
json: opts.json ?? false,
|
|
256
|
+
formatText: (o) => `Error: ${o.reason}\n→ ${o.nextAction}`,
|
|
257
|
+
});
|
|
258
|
+
process.exitCode = 1;
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
205
261
|
// CLI Gate rule 6: workspace resolution inside try/catch for structured errors.
|
|
206
262
|
let workspaceDir;
|
|
207
263
|
try {
|
|
@@ -228,6 +284,7 @@ export async function handleIntentShow(opts) {
|
|
|
228
284
|
const configResult = loadPdConfig(workspaceDir);
|
|
229
285
|
const flagsResult = computeFlagsFromLoadResult(configResult);
|
|
230
286
|
const flagEnabled = isFeatureEnabled(flagsResult, 'intent_engineering');
|
|
287
|
+
const filename = getIntentFilename(lang);
|
|
231
288
|
if (!flagEnabled) {
|
|
232
289
|
const output = {
|
|
233
290
|
status: 'flag_disabled',
|
|
@@ -235,7 +292,7 @@ export async function handleIntentShow(opts) {
|
|
|
235
292
|
found: false,
|
|
236
293
|
warnings: [],
|
|
237
294
|
reason: 'flag_disabled',
|
|
238
|
-
nextAction:
|
|
295
|
+
nextAction: `Enable the intent_engineering feature flag in .pd/config.yaml to read ${filename}.`,
|
|
239
296
|
};
|
|
240
297
|
emitResult(output, {
|
|
241
298
|
json: opts.json ?? false,
|
|
@@ -243,7 +300,7 @@ export async function handleIntentShow(opts) {
|
|
|
243
300
|
});
|
|
244
301
|
return;
|
|
245
302
|
}
|
|
246
|
-
const filePath = getIntentFilePath(workspaceDir);
|
|
303
|
+
const filePath = getIntentFilePath(workspaceDir, lang);
|
|
247
304
|
try {
|
|
248
305
|
if (!fs.existsSync(filePath)) {
|
|
249
306
|
const output = {
|
|
@@ -252,11 +309,11 @@ export async function handleIntentShow(opts) {
|
|
|
252
309
|
found: false,
|
|
253
310
|
warnings: [],
|
|
254
311
|
reason: 'not_found',
|
|
255
|
-
nextAction: `Create
|
|
312
|
+
nextAction: `Create ${filename}: pd intent init --confirm --lang ${lang} --workspace "${workspaceDir}"`,
|
|
256
313
|
};
|
|
257
314
|
emitResult(output, {
|
|
258
315
|
json: opts.json ?? false,
|
|
259
|
-
formatText: (o) =>
|
|
316
|
+
formatText: (o) => `${filename} not found.\n→ ${o.nextAction}`,
|
|
260
317
|
});
|
|
261
318
|
return;
|
|
262
319
|
}
|
|
@@ -268,11 +325,11 @@ export async function handleIntentShow(opts) {
|
|
|
268
325
|
found: true,
|
|
269
326
|
warnings: [],
|
|
270
327
|
reason: 'oversized',
|
|
271
|
-
nextAction:
|
|
328
|
+
nextAction: `${filename} exceeds ${INTENT_MAX_BYTES} bytes (${stat.size} bytes). Reduce content.`,
|
|
272
329
|
};
|
|
273
330
|
emitResult(output, {
|
|
274
331
|
json: opts.json ?? false,
|
|
275
|
-
formatText: (o) =>
|
|
332
|
+
formatText: (o) => `${filename} is too large.\n→ ${o.nextAction}`,
|
|
276
333
|
});
|
|
277
334
|
return;
|
|
278
335
|
}
|
|
@@ -292,7 +349,7 @@ export async function handleIntentShow(opts) {
|
|
|
292
349
|
};
|
|
293
350
|
emitResult(output, {
|
|
294
351
|
json: opts.json ?? false,
|
|
295
|
-
formatText: (o) => formatIntentShowText(o),
|
|
352
|
+
formatText: (o) => formatIntentShowText(o, filename),
|
|
296
353
|
});
|
|
297
354
|
}
|
|
298
355
|
catch (err) {
|
|
@@ -307,7 +364,7 @@ export async function handleIntentShow(opts) {
|
|
|
307
364
|
};
|
|
308
365
|
emitResult(output, {
|
|
309
366
|
json: opts.json ?? false,
|
|
310
|
-
formatText: (o) => `Error reading
|
|
367
|
+
formatText: (o) => `Error reading ${filename}: ${o.reason}\n→ ${o.nextAction}`,
|
|
311
368
|
});
|
|
312
369
|
process.exitCode = 1;
|
|
313
370
|
}
|
|
@@ -319,11 +376,12 @@ export function registerIntentCommand(parentCmd) {
|
|
|
319
376
|
.description('Owner-authored INTENT.md management (init, show)');
|
|
320
377
|
intentCmd
|
|
321
378
|
.command('init')
|
|
322
|
-
.description('Create .principles/INTENT.md from the canonical template')
|
|
379
|
+
.description('Create .principles/INTENT.{lang}.md from the canonical template')
|
|
323
380
|
.option('-w, --workspace <path>', 'Workspace directory')
|
|
324
|
-
.option('--force', 'Overwrite existing INTENT
|
|
381
|
+
.option('--force', 'Overwrite existing INTENT file')
|
|
325
382
|
.option('--dry-run', 'Show what would happen without writing (default)')
|
|
326
|
-
.option('--confirm', 'Actually write the file (required to create INTENT
|
|
383
|
+
.option('--confirm', 'Actually write the file (required to create INTENT file)')
|
|
384
|
+
.option('--lang <lang>', 'Language: zh-CN or en (default: zh-CN)')
|
|
327
385
|
.option('--json', 'Output raw JSON')
|
|
328
386
|
.action(async (opts) => {
|
|
329
387
|
await handleIntentInit({
|
|
@@ -332,17 +390,20 @@ export function registerIntentCommand(parentCmd) {
|
|
|
332
390
|
json: opts.json === true,
|
|
333
391
|
dryRun: opts.dryRun === true,
|
|
334
392
|
confirm: opts.confirm === true,
|
|
393
|
+
lang: opts.lang,
|
|
335
394
|
});
|
|
336
395
|
});
|
|
337
396
|
intentCmd
|
|
338
397
|
.command('show')
|
|
339
|
-
.description('Display a read-only summary of INTENT.md (sections, hash, warnings)')
|
|
398
|
+
.description('Display a read-only summary of INTENT.{lang}.md (sections, hash, warnings)')
|
|
340
399
|
.option('-w, --workspace <path>', 'Workspace directory')
|
|
400
|
+
.option('--lang <lang>', 'Language: zh-CN or en (default: zh-CN)')
|
|
341
401
|
.option('--json', 'Output raw JSON')
|
|
342
402
|
.action(async (opts) => {
|
|
343
403
|
await handleIntentShow({
|
|
344
404
|
workspace: opts.workspace,
|
|
345
405
|
json: opts.json === true,
|
|
406
|
+
lang: opts.lang,
|
|
346
407
|
});
|
|
347
408
|
});
|
|
348
409
|
return intentCmd;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/commands/intent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"intent.js","sourceRoot":"","sources":["../../src/commands/intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ import { resolvePluginCommandWorkspaceDir } from '../utils/workspace-resolver.js
|
|
|
5
5
|
import { computeHash } from '../utils/hashing.js';
|
|
6
6
|
import { PainToPrincipleService, PrincipleTreeLedgerAdapter } from '@principles/core/runtime-v2';
|
|
7
7
|
import { loadPdConfigForPlugin } from '../core/pd-config-loader.js';
|
|
8
|
-
import { createIntentDocReader } from '../core/intent-doc-reader-adapter.js';
|
|
8
|
+
import { createIntentDocReader, resolveIntentLang } from '../core/intent-doc-reader-adapter.js';
|
|
9
9
|
/**
|
|
10
10
|
* Creates a visual progress bar (e.g., [██████░░░░])
|
|
11
11
|
*/
|
|
@@ -275,7 +275,7 @@ export async function handlePainReportCommand(ctx) {
|
|
|
275
275
|
autoIntakeEnabled: true,
|
|
276
276
|
effectiveConfig: configResult.effective,
|
|
277
277
|
getEnvVar: (name) => process.env[name],
|
|
278
|
-
intentDocReader: createIntentDocReader(wctx.workspaceDir),
|
|
278
|
+
intentDocReader: createIntentDocReader(wctx.workspaceDir, resolveIntentLang(wctx.workspaceDir)),
|
|
279
279
|
});
|
|
280
280
|
const result = await service.recordPain({
|
|
281
281
|
painId: painData.painId,
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { BehaviorExamplePack } from '@principles/core/runtime-v2';
|
|
2
|
+
export interface BehaviorExamplePackAssemblerOptions {
|
|
3
|
+
/** Workspace directory — used to obtain the shared TrajectoryDatabase. */
|
|
4
|
+
readonly workspaceDir: string;
|
|
5
|
+
/**
|
|
6
|
+
* State directory (unused for direct DB access but required by the
|
|
7
|
+
* WorkspaceContext facade pattern; future-proofing for redaction config).
|
|
8
|
+
*/
|
|
9
|
+
readonly stateDir: string;
|
|
10
|
+
}
|
|
11
|
+
export interface BehaviorExamplePackAssemblerInput {
|
|
12
|
+
/** Canonical pain ID (e.g. pain_<ts>_<hash>) — entry point into pain lineage. */
|
|
13
|
+
readonly sourcePainId: string;
|
|
14
|
+
/** Owner's natural-language desired outcome — must be non-empty. */
|
|
15
|
+
readonly ownerDesiredOutcome: string;
|
|
16
|
+
/**
|
|
17
|
+
* Project directory, used to detect absolute paths that should be redacted
|
|
18
|
+
* to relative/basename form in the assembled pack.
|
|
19
|
+
*/
|
|
20
|
+
readonly projectDir: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Plugin I/O assembler: pain lineage + trajectory → validated BehaviorExamplePack.
|
|
24
|
+
*
|
|
25
|
+
* Lifecycle: cheap to construct; obtains TrajectoryDatabase via the registry.
|
|
26
|
+
* Dispose is the registry's responsibility (singleton per workspace).
|
|
27
|
+
*/
|
|
28
|
+
export declare class BehaviorExamplePackAssembler {
|
|
29
|
+
private readonly db;
|
|
30
|
+
constructor(opts: BehaviorExamplePackAssemblerOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Assemble a BehaviorExamplePack from the pain lineage anchored at
|
|
33
|
+
* `input.sourcePainId`.
|
|
34
|
+
*
|
|
35
|
+
* Fail-loud contract (spec §7.2, ERR-069):
|
|
36
|
+
* - pain event not found → throws
|
|
37
|
+
* - empty trajectory → throws
|
|
38
|
+
* - no failing tool call to anchor sourceNegativeCase → throws
|
|
39
|
+
* - no successful tool call for positiveCounterexamples → throws
|
|
40
|
+
* - assembled pack fails validateBehaviorExamplePack → throws
|
|
41
|
+
*/
|
|
42
|
+
assemble(input: BehaviorExamplePackAssemblerInput): BehaviorExamplePack;
|
|
43
|
+
}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-484 — Phase 5 Task 28 — BehaviorExamplePackAssembler (plugin I/O)
|
|
3
|
+
*
|
|
4
|
+
* Reads pain lineage + trajectory rows from TrajectoryDatabase and assembles
|
|
5
|
+
* a validated BehaviorExamplePack for the Artificer. Fail loud on any gap
|
|
6
|
+
* (missing pain, empty trajectory, invalid pack) — no silent fallback.
|
|
7
|
+
*
|
|
8
|
+
* Err-prevention:
|
|
9
|
+
* - ERR-001: every DB row field validated as `unknown` (no `as` bypass on
|
|
10
|
+
* parsed params_json or row casts).
|
|
11
|
+
* - ERR-069: Artificer shared schema — invalid pack must fail loud.
|
|
12
|
+
* - ERR-026: reuses production TrajectoryDatabase (no hand-written DDL).
|
|
13
|
+
* - rc-2: structural type guards, no `as T` on parsed input.
|
|
14
|
+
* - rc-5: Object.hasOwn over `in`.
|
|
15
|
+
* - rc-9: every failure path throws a structured Error with a clear reason.
|
|
16
|
+
*
|
|
17
|
+
* Spec: docs/superpowers/specs/2026-06-27-rulecode-context-vision-design.md §7.2
|
|
18
|
+
*
|
|
19
|
+
* Boundary: this module is I/O. Pure logic (type + validator) lives in
|
|
20
|
+
* `@principles/core/runtime-v2` → `behavior-example-pack.ts`.
|
|
21
|
+
*/
|
|
22
|
+
import { validateBehaviorExamplePack, } from '@principles/core/runtime-v2';
|
|
23
|
+
import { TrajectoryRegistry } from './trajectory.js';
|
|
24
|
+
// ── internal constants ─────────────────────────────────────────────────────
|
|
25
|
+
const MAX_POSITIVES = 3;
|
|
26
|
+
const MAX_EVIDENCE_REFS = 5;
|
|
27
|
+
const HISTORY_LIMIT = 100;
|
|
28
|
+
const PROTO_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
|
|
29
|
+
// ── type guards (rc-2: no `as` bypass) ─────────────────────────────────────
|
|
30
|
+
function isPlainObject(value) {
|
|
31
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
32
|
+
}
|
|
33
|
+
function hasNoProtoKeys(value) {
|
|
34
|
+
for (const key of Object.keys(value)) {
|
|
35
|
+
if (PROTO_KEYS.has(key))
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
// ── BehaviorExamplePackAssembler ───────────────────────────────────────────
|
|
41
|
+
/**
|
|
42
|
+
* Plugin I/O assembler: pain lineage + trajectory → validated BehaviorExamplePack.
|
|
43
|
+
*
|
|
44
|
+
* Lifecycle: cheap to construct; obtains TrajectoryDatabase via the registry.
|
|
45
|
+
* Dispose is the registry's responsibility (singleton per workspace).
|
|
46
|
+
*/
|
|
47
|
+
export class BehaviorExamplePackAssembler {
|
|
48
|
+
db;
|
|
49
|
+
constructor(opts) {
|
|
50
|
+
// TrajectoryRegistry.get returns the workspace-wide singleton; do NOT
|
|
51
|
+
// dispose it here. The caller (typically a workspace lifecycle hook)
|
|
52
|
+
// owns dispose.
|
|
53
|
+
this.db = TrajectoryRegistry.get(opts.workspaceDir);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Assemble a BehaviorExamplePack from the pain lineage anchored at
|
|
57
|
+
* `input.sourcePainId`.
|
|
58
|
+
*
|
|
59
|
+
* Fail-loud contract (spec §7.2, ERR-069):
|
|
60
|
+
* - pain event not found → throws
|
|
61
|
+
* - empty trajectory → throws
|
|
62
|
+
* - no failing tool call to anchor sourceNegativeCase → throws
|
|
63
|
+
* - no successful tool call for positiveCounterexamples → throws
|
|
64
|
+
* - assembled pack fails validateBehaviorExamplePack → throws
|
|
65
|
+
*/
|
|
66
|
+
assemble(input) {
|
|
67
|
+
// ── 1. Look up the anchoring pain event ──
|
|
68
|
+
const pain = this.db.getPainEventByCanonicalId(input.sourcePainId);
|
|
69
|
+
if (!pain) {
|
|
70
|
+
throw new Error(`[BehaviorExamplePackAssembler] pain event not found for canonical_pain_id="${input.sourcePainId}" (ERR-069 fail loud)`);
|
|
71
|
+
}
|
|
72
|
+
// ── 2. Pull the recent trajectory for the pain's session ──
|
|
73
|
+
// getRuleHostContextRows returns rows WITH params_json (which
|
|
74
|
+
// listToolCallsForSession does not), so we use it here.
|
|
75
|
+
const ctxResult = this.db.getRuleHostContextRows(pain.sessionId, HISTORY_LIMIT);
|
|
76
|
+
const rows = ctxResult.rows;
|
|
77
|
+
if (rows.length === 0) {
|
|
78
|
+
throw new Error(`[BehaviorExamplePackAssembler] empty trajectory (no tool calls) for sessionId="${pain.sessionId}" (pain=${input.sourcePainId}, ERR-069 fail loud)`);
|
|
79
|
+
}
|
|
80
|
+
// ── 3. Partition into failures (negative candidates) and successes (positives) ──
|
|
81
|
+
const failures = [];
|
|
82
|
+
const successes = [];
|
|
83
|
+
for (const row of rows) {
|
|
84
|
+
if (row.outcome === 'failure') {
|
|
85
|
+
failures.push(row);
|
|
86
|
+
}
|
|
87
|
+
else if (row.outcome === 'success') {
|
|
88
|
+
successes.push(row);
|
|
89
|
+
}
|
|
90
|
+
// 'blocked' rows are not used as either positive or negative cases.
|
|
91
|
+
}
|
|
92
|
+
if (failures.length === 0) {
|
|
93
|
+
throw new Error(`[BehaviorExamplePackAssembler] no failing tool call in sessionId="${pain.sessionId}" — cannot build sourceNegativeCase (pain=${input.sourcePainId}, ERR-069 fail loud)`);
|
|
94
|
+
}
|
|
95
|
+
if (successes.length === 0) {
|
|
96
|
+
throw new Error(`[BehaviorExamplePackAssembler] no successful tool call in sessionId="${pain.sessionId}" — cannot build positiveCounterexamples (pain=${input.sourcePainId}, ERR-069 fail loud)`);
|
|
97
|
+
}
|
|
98
|
+
// ── 4. Build sourceNegativeCase from the most recent failure ──
|
|
99
|
+
const sourceFailure = failures[failures.length - 1];
|
|
100
|
+
if (!sourceFailure) {
|
|
101
|
+
// Defensive: should be unreachable due to the failures.length === 0 check
|
|
102
|
+
// above, but noUncheckedIndexedAccess requires the guard.
|
|
103
|
+
throw new Error(`[BehaviorExamplePackAssembler] internal error: sourceFailure undefined (pain=${input.sourcePainId})`);
|
|
104
|
+
}
|
|
105
|
+
const sourceNegativeCase = buildCaseFromRow(sourceFailure, 'negative', 'block', input.projectDir);
|
|
106
|
+
// ── 5. Build positiveCounterexamples from successes (≤3, most recent first) ──
|
|
107
|
+
const positiveRows = successes.slice(-MAX_POSITIVES); // most recent ≤3
|
|
108
|
+
const positiveCounterexamples = [];
|
|
109
|
+
for (const row of positiveRows) {
|
|
110
|
+
positiveCounterexamples.push(buildCaseFromRow(row, 'positive', 'allow', input.projectDir));
|
|
111
|
+
}
|
|
112
|
+
// ── 6. Build evidenceRefs from pain events + gate blocks (≤5) ──
|
|
113
|
+
const evidenceRefs = [];
|
|
114
|
+
const sessionPainEvents = this.db.listPainEventsForSession(pain.sessionId);
|
|
115
|
+
for (const p of sessionPainEvents) {
|
|
116
|
+
if (evidenceRefs.length >= MAX_EVIDENCE_REFS)
|
|
117
|
+
break;
|
|
118
|
+
evidenceRefs.push(`pain:${p.id}`);
|
|
119
|
+
}
|
|
120
|
+
const gateBlocks = this.db.listGateBlocksForSession(pain.sessionId);
|
|
121
|
+
for (const g of gateBlocks) {
|
|
122
|
+
if (evidenceRefs.length >= MAX_EVIDENCE_REFS)
|
|
123
|
+
break;
|
|
124
|
+
evidenceRefs.push(`gate:${g.id}`);
|
|
125
|
+
}
|
|
126
|
+
if (evidenceRefs.length === 0) {
|
|
127
|
+
// The anchor pain event itself always provides at least one evidenceRef.
|
|
128
|
+
evidenceRefs.push(`pain:${pain.id}`);
|
|
129
|
+
}
|
|
130
|
+
// ── 7. Apply redaction (spec §7.2: "经过脱敏") ──
|
|
131
|
+
const redactionResult = redactParams(sourceNegativeCase.params, input.projectDir);
|
|
132
|
+
const redactedNegativeCase = {
|
|
133
|
+
...sourceNegativeCase,
|
|
134
|
+
params: redactionResult.redacted,
|
|
135
|
+
};
|
|
136
|
+
const redactedPositives = positiveCounterexamples.map((c) => {
|
|
137
|
+
const r = redactParams(c.params, input.projectDir);
|
|
138
|
+
return { ...c, params: r.redacted };
|
|
139
|
+
});
|
|
140
|
+
const redactionNotes = [...redactionResult.notes];
|
|
141
|
+
// ── 8. Assemble the pack ──
|
|
142
|
+
const pack = {
|
|
143
|
+
sourceNegativeCase: redactedNegativeCase,
|
|
144
|
+
ownerDesiredOutcome: input.ownerDesiredOutcome,
|
|
145
|
+
positiveCounterexamples: redactedPositives,
|
|
146
|
+
evidenceRefs,
|
|
147
|
+
redactionNotes,
|
|
148
|
+
};
|
|
149
|
+
// ── 9. Validate — fail loud (ERR-069) ──
|
|
150
|
+
const validation = validateBehaviorExamplePack(pack);
|
|
151
|
+
if (!validation.valid) {
|
|
152
|
+
throw new Error(`[BehaviorExamplePackAssembler] assembled pack failed validateBehaviorExamplePack: ${validation.errors.join('; ')} (ERR-069 fail loud)`);
|
|
153
|
+
}
|
|
154
|
+
return pack;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
// ── internal: case builder ─────────────────────────────────────────────────
|
|
158
|
+
/**
|
|
159
|
+
* Build a GoldenTraceCaseInput from a trajectory tool_call row.
|
|
160
|
+
*
|
|
161
|
+
* ERR-001: parses params_json as unknown and structurally validates (must be
|
|
162
|
+
* a plain object without proto-pollution keys). Throws on malformed input
|
|
163
|
+
* (rc-9: no silent fallback).
|
|
164
|
+
*/
|
|
165
|
+
function buildCaseFromRow(row, kind, expectedDecision, _projectDir) {
|
|
166
|
+
if (typeof row.toolName !== 'string' || row.toolName.length === 0) {
|
|
167
|
+
throw new Error(`[BehaviorExamplePackAssembler] row id=${row.id}: toolName must be a non-empty string (rc-9 fail loud)`);
|
|
168
|
+
}
|
|
169
|
+
if (typeof row.paramsJson !== 'string') {
|
|
170
|
+
throw new Error(`[BehaviorExamplePackAssembler] row id=${row.id}: paramsJson must be a string (rc-9 fail loud)`);
|
|
171
|
+
}
|
|
172
|
+
let parsedParams;
|
|
173
|
+
try {
|
|
174
|
+
parsedParams = JSON.parse(row.paramsJson);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
throw new Error(`[BehaviorExamplePackAssembler] row id=${row.id}: paramsJson is not valid JSON (rc-9 fail loud)`);
|
|
178
|
+
}
|
|
179
|
+
if (!isPlainObject(parsedParams)) {
|
|
180
|
+
throw new Error(`[BehaviorExamplePackAssembler] row id=${row.id}: paramsJson must parse to a non-array object (rc-9 fail loud)`);
|
|
181
|
+
}
|
|
182
|
+
if (!hasNoProtoKeys(parsedParams)) {
|
|
183
|
+
throw new Error(`[BehaviorExamplePackAssembler] row id=${row.id}: paramsJson must not carry prototype-pollution keys (ERR-076, rc-9 fail loud)`);
|
|
184
|
+
}
|
|
185
|
+
return {
|
|
186
|
+
caseId: `case-${kind}-${row.id}`,
|
|
187
|
+
kind,
|
|
188
|
+
toolName: row.toolName,
|
|
189
|
+
params: parsedParams,
|
|
190
|
+
expectedDecision,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Redact sensitive fields from tool call params before they enter the pack.
|
|
195
|
+
*
|
|
196
|
+
* First-version policy:
|
|
197
|
+
* - Absolute paths outside the project tree → replaced with `<redacted:absolute-path>`
|
|
198
|
+
* - String values that look like secrets (long base64 / AKIA-style keys / etc.)
|
|
199
|
+
* → replaced with `<redacted:secret>`
|
|
200
|
+
*
|
|
201
|
+
* Records each redaction in `notes` so the Artificer and the owner can see
|
|
202
|
+
* what was stripped (spec §7.2: redactionNotes is part of the pack contract).
|
|
203
|
+
*/
|
|
204
|
+
function redactParams(params, projectDir) {
|
|
205
|
+
const notes = [];
|
|
206
|
+
const redacted = {};
|
|
207
|
+
for (const key of Object.keys(params)) {
|
|
208
|
+
if (PROTO_KEYS.has(key))
|
|
209
|
+
continue; // defense in depth (ERR-076)
|
|
210
|
+
const value = params[key];
|
|
211
|
+
if (typeof value !== 'string') {
|
|
212
|
+
redacted[key] = value;
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
// Path-like values
|
|
216
|
+
if (looksLikeAbsolutePath(value) && !value.startsWith(projectDir)) {
|
|
217
|
+
redacted[key] = '<redacted:absolute-path>';
|
|
218
|
+
notes.push(`redacted absolute path in field "${key}" (outside project tree)`);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
// Secret-like values (AWS keys, long base64 tokens, etc.)
|
|
222
|
+
if (looksLikeSecret(value)) {
|
|
223
|
+
redacted[key] = '<redacted:secret>';
|
|
224
|
+
notes.push(`redacted possible secret in field "${key}"`);
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
redacted[key] = value;
|
|
228
|
+
}
|
|
229
|
+
return { redacted, notes };
|
|
230
|
+
}
|
|
231
|
+
function looksLikeAbsolutePath(value) {
|
|
232
|
+
// POSIX absolute path or Windows drive path
|
|
233
|
+
return value.startsWith('/') || /^[A-Za-z]:[\\/]/.test(value);
|
|
234
|
+
}
|
|
235
|
+
const SECRET_PATTERNS = [
|
|
236
|
+
/AKIA[0-9A-Z]{16}/, // AWS access key ID
|
|
237
|
+
/[A-Za-z0-9+/]{40,}/, // long base64-ish token (≥40 chars, no spaces)
|
|
238
|
+
];
|
|
239
|
+
function looksLikeSecret(value) {
|
|
240
|
+
if (value.length < 20)
|
|
241
|
+
return false; // too short to be a real secret
|
|
242
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
243
|
+
if (pattern.test(value))
|
|
244
|
+
return true;
|
|
245
|
+
}
|
|
246
|
+
return false;
|
|
247
|
+
}
|