@principles/core 1.154.0 → 1.156.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/dist/runtime-v2/__tests__/architecture-regression.test.js +10 -0
- package/dist/runtime-v2/__tests__/architecture-regression.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/build-l2-principle-reader.test.d.ts +2 -0
- package/dist/runtime-v2/__tests__/build-l2-principle-reader.test.d.ts.map +1 -0
- package/dist/runtime-v2/__tests__/build-l2-principle-reader.test.js +200 -0
- package/dist/runtime-v2/__tests__/build-l2-principle-reader.test.js.map +1 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js +16 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice-v2.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js +2 -0
- package/dist/runtime-v2/__tests__/evaluator-runner-vslice.test.js.map +1 -1
- package/dist/runtime-v2/__tests__/proven-channel-baseline.test.js +13 -0
- package/dist/runtime-v2/__tests__/proven-channel-baseline.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js +1 -0
- package/dist/runtime-v2/activation/__tests__/activation-dispatcher.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.d.ts +21 -0
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.js +363 -0
- package/dist/runtime-v2/activation/__tests__/approval-completion-service.test.js.map +1 -0
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.js +13 -0
- package/dist/runtime-v2/activation/__tests__/approval-queue.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.d.ts +20 -0
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.js +145 -0
- package/dist/runtime-v2/activation/__tests__/edit-then-approve.test.js.map +1 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.d.ts +15 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js +249 -0
- package/dist/runtime-v2/activation/__tests__/production-gate-deps.test.js.map +1 -0
- package/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js +22 -2
- package/dist/runtime-v2/activation/__tests__/sqlite-activation-state-store.test.js.map +1 -1
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.d.ts +35 -0
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.d.ts.map +1 -0
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js +511 -0
- package/dist/runtime-v2/activation/__tests__/story-a-acceptance.test.js.map +1 -0
- package/dist/runtime-v2/activation/activation-dispatcher.d.ts.map +1 -1
- package/dist/runtime-v2/activation/activation-dispatcher.js +79 -0
- package/dist/runtime-v2/activation/activation-dispatcher.js.map +1 -1
- package/dist/runtime-v2/activation/activation-types.d.ts +48 -3
- package/dist/runtime-v2/activation/activation-types.d.ts.map +1 -1
- package/dist/runtime-v2/activation/activation-types.js +6 -0
- package/dist/runtime-v2/activation/activation-types.js.map +1 -1
- package/dist/runtime-v2/activation/approval-completion-service.d.ts +50 -0
- package/dist/runtime-v2/activation/approval-completion-service.d.ts.map +1 -0
- package/dist/runtime-v2/activation/approval-completion-service.js +160 -0
- package/dist/runtime-v2/activation/approval-completion-service.js.map +1 -0
- package/dist/runtime-v2/activation/approval-queue.d.ts +7 -1
- package/dist/runtime-v2/activation/approval-queue.d.ts.map +1 -1
- package/dist/runtime-v2/activation/approval-queue.js +14 -0
- package/dist/runtime-v2/activation/approval-queue.js.map +1 -1
- package/dist/runtime-v2/activation/index.d.ts +5 -2
- package/dist/runtime-v2/activation/index.d.ts.map +1 -1
- package/dist/runtime-v2/activation/index.js +8 -1
- package/dist/runtime-v2/activation/index.js.map +1 -1
- package/dist/runtime-v2/activation/memory-activation-state-store.d.ts +2 -2
- package/dist/runtime-v2/activation/memory-activation-state-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/memory-activation-state-store.js +4 -4
- package/dist/runtime-v2/activation/memory-activation-state-store.js.map +1 -1
- package/dist/runtime-v2/activation/memory-approval-store.d.ts +2 -1
- package/dist/runtime-v2/activation/memory-approval-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/memory-approval-store.js +18 -0
- package/dist/runtime-v2/activation/memory-approval-store.js.map +1 -1
- package/dist/runtime-v2/activation/production-gate-deps.d.ts +32 -0
- package/dist/runtime-v2/activation/production-gate-deps.d.ts.map +1 -0
- package/dist/runtime-v2/activation/production-gate-deps.js +179 -0
- package/dist/runtime-v2/activation/production-gate-deps.js.map +1 -0
- package/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts +2 -2
- package/dist/runtime-v2/activation/sqlite-activation-state-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/sqlite-activation-state-store.js +10 -14
- package/dist/runtime-v2/activation/sqlite-activation-state-store.js.map +1 -1
- package/dist/runtime-v2/activation/sqlite-approval-store.d.ts +2 -1
- package/dist/runtime-v2/activation/sqlite-approval-store.d.ts.map +1 -1
- package/dist/runtime-v2/activation/sqlite-approval-store.js +24 -0
- package/dist/runtime-v2/activation/sqlite-approval-store.js.map +1 -1
- package/dist/runtime-v2/build-l2-principle-reader.d.ts +49 -0
- package/dist/runtime-v2/build-l2-principle-reader.d.ts.map +1 -0
- package/dist/runtime-v2/build-l2-principle-reader.js +70 -0
- package/dist/runtime-v2/build-l2-principle-reader.js.map +1 -0
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js +2 -0
- package/dist/runtime-v2/feature-flags/__tests__/feature-flag-contract.test.js.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.d.ts.map +1 -1
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js +6 -0
- package/dist/runtime-v2/feature-flags/feature-flag-contract.js.map +1 -1
- package/dist/runtime-v2/index.d.ts +5 -3
- package/dist/runtime-v2/index.d.ts.map +1 -1
- package/dist/runtime-v2/index.js +6 -1
- package/dist/runtime-v2/index.js.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts +27 -0
- package/dist/runtime-v2/internalization/evaluator-runner.d.ts.map +1 -1
- package/dist/runtime-v2/internalization/evaluator-runner.js +129 -2
- package/dist/runtime-v2/internalization/evaluator-runner.js.map +1 -1
- package/dist/runtime-v2/proven-channel-baseline.d.ts.map +1 -1
- package/dist/runtime-v2/proven-channel-baseline.js +13 -0
- package/dist/runtime-v2/proven-channel-baseline.js.map +1 -1
- package/dist/runtime-v2/store/sqlite-connection.d.ts.map +1 -1
- package/dist/runtime-v2/store/sqlite-connection.js +12 -0
- package/dist/runtime-v2/store/sqlite-connection.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-approval-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/memory-approval-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,wBAAyB,YAAW,kBAAkB;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAEvD,OAAO,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsB1E,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI3D,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAU/D,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAe/D,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAUvC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiB9F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiB9F,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAAA;KAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-approval-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/memory-approval-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EAEd,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,wBAAyB,YAAW,kBAAkB;IACjE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAEvD,OAAO,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAsB1E,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAI3D,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAU/D,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAe/D,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAUvC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiB9F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiB9F,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAAA;KAAE,CAAC;IAe9G,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAiBtE"}
|
|
@@ -114,5 +114,23 @@ export class MemoryApprovalQueueStore {
|
|
|
114
114
|
this.records.set(approvalId, reset);
|
|
115
115
|
return { ok: true };
|
|
116
116
|
}
|
|
117
|
+
async edit(input) {
|
|
118
|
+
const existing = this.records.get(input.approvalId);
|
|
119
|
+
if (!existing)
|
|
120
|
+
return { ok: false, error: 'not_found' };
|
|
121
|
+
if (existing.status !== 'pending') {
|
|
122
|
+
return { ok: false, error: 'already_decided', status: existing.status };
|
|
123
|
+
}
|
|
124
|
+
const updated = {
|
|
125
|
+
...existing,
|
|
126
|
+
artifactId: input.newArtifactId,
|
|
127
|
+
editedAt: input.now,
|
|
128
|
+
editedBy: input.editedBy,
|
|
129
|
+
editReason: input.editReason,
|
|
130
|
+
previousArtifactId: existing.artifactId,
|
|
131
|
+
};
|
|
132
|
+
this.records.set(input.approvalId, updated);
|
|
133
|
+
return { ok: true, record: updated };
|
|
134
|
+
}
|
|
117
135
|
}
|
|
118
136
|
//# sourceMappingURL=memory-approval-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-approval-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/memory-approval-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-approval-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/memory-approval-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production Gate Deps Factory — Story A (PRI-408)
|
|
3
|
+
*
|
|
4
|
+
* PURPOSE: Provide a production-grade RefinerRuleHostGateDeps factory that
|
|
5
|
+
* compiles rule implementation code using node:vm and evaluates it against
|
|
6
|
+
* golden traces via evaluateInRefinerSandbox. This is the canonical
|
|
7
|
+
* production compilation path — not a demo duplicate.
|
|
8
|
+
*
|
|
9
|
+
* ARCHITECTURE: This lives in principles-core because:
|
|
10
|
+
* 1. node:vm is a pure computation primitive (no fs/network/db I/O)
|
|
11
|
+
* 2. principles-core already uses node:crypto (randomUUID, createHash)
|
|
12
|
+
* 3. Both pd-cli (compileDemoRule) and openclaw-plugin
|
|
13
|
+
* (loadRuleImplementationModule) duplicate this logic — placing it
|
|
14
|
+
* here eliminates duplication and makes it available to all packages
|
|
15
|
+
* that depend on @principles/core (including pd-console).
|
|
16
|
+
*
|
|
17
|
+
* ERR checklist:
|
|
18
|
+
* - ERR-001: Rule code is string-validated before compilation
|
|
19
|
+
* - ERR-002: Compilation failures produce structured error results
|
|
20
|
+
* - ERR-005: Module exports validated with typeof checks, not `as`
|
|
21
|
+
*/
|
|
22
|
+
import type { RefinerRuleHostGateDeps } from '../internalization/refiner-rulehost-gate.js';
|
|
23
|
+
/**
|
|
24
|
+
* Create a production-grade RefinerRuleHostGateDeps that compiles rule code
|
|
25
|
+
* using node:vm and evaluates it against golden traces.
|
|
26
|
+
*
|
|
27
|
+
* This factory is the canonical production gateDeps provider. It replaces
|
|
28
|
+
* the demo-only createSandboxGateDeps() in pd-cli and makes the gateDeps
|
|
29
|
+
* available to all packages that depend on @principles/core.
|
|
30
|
+
*/
|
|
31
|
+
export declare function createProductionGateDeps(): RefinerRuleHostGateDeps;
|
|
32
|
+
//# sourceMappingURL=production-gate-deps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production-gate-deps.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/production-gate-deps.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAOH,OAAO,KAAK,EACV,uBAAuB,EACxB,MAAM,6CAA6C,CAAC;AAmIrD;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,IAAI,uBAAuB,CAgDlE"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Production Gate Deps Factory — Story A (PRI-408)
|
|
3
|
+
*
|
|
4
|
+
* PURPOSE: Provide a production-grade RefinerRuleHostGateDeps factory that
|
|
5
|
+
* compiles rule implementation code using node:vm and evaluates it against
|
|
6
|
+
* golden traces via evaluateInRefinerSandbox. This is the canonical
|
|
7
|
+
* production compilation path — not a demo duplicate.
|
|
8
|
+
*
|
|
9
|
+
* ARCHITECTURE: This lives in principles-core because:
|
|
10
|
+
* 1. node:vm is a pure computation primitive (no fs/network/db I/O)
|
|
11
|
+
* 2. principles-core already uses node:crypto (randomUUID, createHash)
|
|
12
|
+
* 3. Both pd-cli (compileDemoRule) and openclaw-plugin
|
|
13
|
+
* (loadRuleImplementationModule) duplicate this logic — placing it
|
|
14
|
+
* here eliminates duplication and makes it available to all packages
|
|
15
|
+
* that depend on @principles/core (including pd-console).
|
|
16
|
+
*
|
|
17
|
+
* ERR checklist:
|
|
18
|
+
* - ERR-001: Rule code is string-validated before compilation
|
|
19
|
+
* - ERR-002: Compilation failures produce structured error results
|
|
20
|
+
* - ERR-005: Module exports validated with typeof checks, not `as`
|
|
21
|
+
*/
|
|
22
|
+
import * as vm from 'node:vm';
|
|
23
|
+
import { evaluateInRefinerSandbox } from '../internalization/refiner-sandbox-wrapper.js';
|
|
24
|
+
import { checkForbiddenPatterns } from '../internalization/rule-code-validator.js';
|
|
25
|
+
import { validateCorrectionProposal } from '../internalization/correction-proposal.js';
|
|
26
|
+
import { safeStringifyPreview } from '../feedback/safe-stringify.js';
|
|
27
|
+
/**
|
|
28
|
+
* Valid decision enum values for RuleHostResult.
|
|
29
|
+
* Used to validate untrusted vm sandbox output (P2 #6 fix).
|
|
30
|
+
*/
|
|
31
|
+
const VALID_DECISIONS = new Set(['allow', 'block', 'requireApproval', 'auto_correct']);
|
|
32
|
+
/**
|
|
33
|
+
* Type guard: validate that a value from the untrusted vm sandbox has the
|
|
34
|
+
* full RuleHostResult shape. Treats all sandbox output as unknown.
|
|
35
|
+
*
|
|
36
|
+
* P2 #6 fix: previously the code only checked `decision` was a string, then
|
|
37
|
+
* used `as RuleHostResult` to accept the entire object. This bypassed
|
|
38
|
+
* validation of the decision enum value and other required fields.
|
|
39
|
+
*/
|
|
40
|
+
function isValidRuleHostResult(value) {
|
|
41
|
+
if (typeof value !== 'object' || value === null)
|
|
42
|
+
return false;
|
|
43
|
+
// decision: required, must be one of the 4 valid enum values
|
|
44
|
+
const decision = Reflect.get(value, 'decision');
|
|
45
|
+
if (typeof decision !== 'string' || !VALID_DECISIONS.has(decision)) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
// matched: required, must be a boolean
|
|
49
|
+
const matched = Reflect.get(value, 'matched');
|
|
50
|
+
if (typeof matched !== 'boolean')
|
|
51
|
+
return false;
|
|
52
|
+
// reason: required, must be a string
|
|
53
|
+
const reason = Reflect.get(value, 'reason');
|
|
54
|
+
if (typeof reason !== 'string')
|
|
55
|
+
return false;
|
|
56
|
+
// When decision is 'auto_correct', correctionProposal must be present
|
|
57
|
+
// AND pass full structural validation (P2 #6 fix: previously only checked
|
|
58
|
+
// presence + typeof object, allowing malformed proposals with missing
|
|
59
|
+
// required fields like proposedParams, correctedFields, applicationMode,
|
|
60
|
+
// confidence, ruleId, notifyAgent to flow into the activation path).
|
|
61
|
+
if (decision === 'auto_correct') {
|
|
62
|
+
const correctionProposal = Reflect.get(value, 'correctionProposal');
|
|
63
|
+
if (correctionProposal === undefined || correctionProposal === null) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
const proposalValidation = validateCorrectionProposal(correctionProposal);
|
|
67
|
+
if (!proposalValidation.valid) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Normalize rule source code: strip ES module export keywords so the code
|
|
75
|
+
* can be evaluated in a vm context (which doesn't support ESM exports).
|
|
76
|
+
*/
|
|
77
|
+
function normalizeSource(sourceCode) {
|
|
78
|
+
const withoutExports = sourceCode
|
|
79
|
+
.replace(/export\s+const\s+meta\s*=/, 'const meta =')
|
|
80
|
+
.replace(/export\s+function\s+evaluate\s*\(/, 'function evaluate(');
|
|
81
|
+
return `${withoutExports}
|
|
82
|
+
globalThis.__pdRuleModule = {
|
|
83
|
+
meta: typeof meta === 'undefined' ? undefined : meta,
|
|
84
|
+
evaluate: typeof evaluate === 'undefined' ? undefined : evaluate,
|
|
85
|
+
};`;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Type guard: validate that a value from the untrusted vm sandbox has the
|
|
89
|
+
* expected CompiledModuleExports shape. Treats all sandbox output as unknown.
|
|
90
|
+
*/
|
|
91
|
+
function isCompiledModuleExports(value) {
|
|
92
|
+
return typeof value === 'object' && value !== null;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Compile rule implementation code in a node:vm sandbox and return a typed
|
|
96
|
+
* evaluate function. Mirrors the compilation logic used by the production
|
|
97
|
+
* openclaw-plugin RuleHost (rule-implementation-runtime.ts).
|
|
98
|
+
*
|
|
99
|
+
* @throws if the code fails to compile or does not define a function evaluate
|
|
100
|
+
*/
|
|
101
|
+
function compileRuleCode(code, sourceLabel) {
|
|
102
|
+
if (typeof code !== 'string' || code.trim().length === 0) {
|
|
103
|
+
throw new Error(`[${sourceLabel}] rule code is empty or not a string`);
|
|
104
|
+
}
|
|
105
|
+
const context = vm.createContext(Object.create(null));
|
|
106
|
+
const script = new vm.Script(normalizeSource(code), { filename: sourceLabel });
|
|
107
|
+
script.runInContext(context, { timeout: 1000, displayErrors: true });
|
|
108
|
+
// Treat sandbox output as untrusted — use Reflect.get + type guard, not `as`.
|
|
109
|
+
const moduleExportsUnknown = Reflect.get(context, '__pdRuleModule');
|
|
110
|
+
Reflect.deleteProperty(context, '__pdRuleModule');
|
|
111
|
+
if (!isCompiledModuleExports(moduleExportsUnknown)) {
|
|
112
|
+
throw new Error(`[${sourceLabel}] compiled module export shape is invalid`);
|
|
113
|
+
}
|
|
114
|
+
const evaluateFn = moduleExportsUnknown.evaluate;
|
|
115
|
+
if (typeof evaluateFn !== 'function') {
|
|
116
|
+
throw new Error(`[${sourceLabel}] compiled module has no evaluate function`);
|
|
117
|
+
}
|
|
118
|
+
return (input, helpers) => {
|
|
119
|
+
const result = Reflect.apply(evaluateFn, undefined, [input, helpers]);
|
|
120
|
+
// P2 #6 fix: validate the full RuleHostResult shape, not just `decision` is a string.
|
|
121
|
+
// Previously used `as RuleHostResult` which bypassed enum + required field validation.
|
|
122
|
+
if (!isValidRuleHostResult(result)) {
|
|
123
|
+
throw new Error(`[${sourceLabel}]: evaluate returned invalid RuleHostResult (got ${typeof result === 'object' && result !== null ? safeStringifyPreview(result) : String(result)})`);
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Create a production-grade RefinerRuleHostGateDeps that compiles rule code
|
|
130
|
+
* using node:vm and evaluates it against golden traces.
|
|
131
|
+
*
|
|
132
|
+
* This factory is the canonical production gateDeps provider. It replaces
|
|
133
|
+
* the demo-only createSandboxGateDeps() in pd-cli and makes the gateDeps
|
|
134
|
+
* available to all packages that depend on @principles/core.
|
|
135
|
+
*/
|
|
136
|
+
export function createProductionGateDeps() {
|
|
137
|
+
return {
|
|
138
|
+
evaluateInSandbox: (code, goldenTrace, opts) => {
|
|
139
|
+
const startTime = Date.now();
|
|
140
|
+
// P2 #6 fix: check forbidden patterns BEFORE compilation/execution.
|
|
141
|
+
// Previously, compileRuleCode() executed the code via script.runInContext()
|
|
142
|
+
// and only then did evaluateInRefinerSandbox() check forbidden patterns —
|
|
143
|
+
// meaning malicious code (e.g. require('child_process')) would execute
|
|
144
|
+
// before being rejected. The check must happen on the source string
|
|
145
|
+
// before any vm execution.
|
|
146
|
+
const forbiddenViolations = checkForbiddenPatterns(code);
|
|
147
|
+
if (forbiddenViolations.length > 0) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
failedCases: [],
|
|
151
|
+
executionTimeMs: Date.now() - startTime,
|
|
152
|
+
forbiddenPatternViolations: forbiddenViolations,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
let evaluateCode;
|
|
156
|
+
try {
|
|
157
|
+
evaluateCode = compileRuleCode(code, 'production-gate-deps');
|
|
158
|
+
}
|
|
159
|
+
catch (err) {
|
|
160
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
161
|
+
return {
|
|
162
|
+
success: false,
|
|
163
|
+
failedCases: [{
|
|
164
|
+
caseId: '__compile__',
|
|
165
|
+
errorType: 'syntax_error',
|
|
166
|
+
message,
|
|
167
|
+
}],
|
|
168
|
+
executionTimeMs: Date.now() - startTime,
|
|
169
|
+
forbiddenPatternViolations: [],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
return evaluateInRefinerSandbox(code, goldenTrace, {
|
|
173
|
+
evaluateCode,
|
|
174
|
+
...opts,
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=production-gate-deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"production-gate-deps.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/production-gate-deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,8 @@ export declare class SqliteActivationStateStore implements ActivationStateReadMo
|
|
|
5
5
|
constructor(connection: SqliteConnection);
|
|
6
6
|
getActivationStatus(idempotencyKey: string): Promise<ActivationStatusRecord | null>;
|
|
7
7
|
recordActivation(record: ActivationStatusRecord): Promise<void>;
|
|
8
|
-
listPromptActivations(): Promise<ActivationStatusRecord[]>;
|
|
9
|
-
listCodeToolHookActivations(): Promise<ActivationStatusRecord[]>;
|
|
8
|
+
listPromptActivations(includeDeactivated?: boolean): Promise<ActivationStatusRecord[]>;
|
|
9
|
+
listCodeToolHookActivations(includeDeactivated?: boolean): Promise<ActivationStatusRecord[]>;
|
|
10
10
|
listAllActivations(): Promise<ActivationStatusRecord[]>;
|
|
11
11
|
deactivateActivation(activationId: string, deactivatedAt: string): Promise<boolean>;
|
|
12
12
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-activation-state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAoDtE,qBAAa,0BAA2B,YAAW,wBAAwB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,gBAAgB;IAEnD,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAWnF,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/D,qBAAqB,
|
|
1
|
+
{"version":3,"file":"sqlite-activation-state-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAoDtE,qBAAa,0BAA2B,YAAW,wBAAwB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,gBAAgB;IAEnD,mBAAmB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;IAWnF,gBAAgB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/D,qBAAqB,CAAC,kBAAkB,UAAQ,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAiBpF,2BAA2B,CAAC,kBAAkB,UAAQ,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAiB1F,kBAAkB,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAkBvD,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAS1F"}
|
|
@@ -67,14 +67,12 @@ export class SqliteActivationStateStore {
|
|
|
67
67
|
(?, ?, ?, ?, ?, ?, ?, ?)
|
|
68
68
|
`).run(record.activationId, record.idempotencyKey, record.artifactId, record.channel, record.action, record.targetRef, record.activatedAt, record.deactivatedAt);
|
|
69
69
|
}
|
|
70
|
-
async listPromptActivations() {
|
|
70
|
+
async listPromptActivations(includeDeactivated = false) {
|
|
71
71
|
const db = this.connection.getDb();
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
ORDER BY activated_at ASC
|
|
77
|
-
`).all();
|
|
72
|
+
const sql = includeDeactivated
|
|
73
|
+
? `SELECT activation_id, idempotency_key, artifact_id, channel, action, target_ref, activated_at, deactivated_at FROM activations WHERE channel = 'prompt' ORDER BY activated_at ASC`
|
|
74
|
+
: `SELECT activation_id, idempotency_key, artifact_id, channel, action, target_ref, activated_at, deactivated_at FROM activations WHERE channel = 'prompt' AND deactivated_at IS NULL ORDER BY activated_at ASC`;
|
|
75
|
+
const rows = db.prepare(sql).all();
|
|
78
76
|
if (!Array.isArray(rows))
|
|
79
77
|
return [];
|
|
80
78
|
const result = [];
|
|
@@ -85,14 +83,12 @@ export class SqliteActivationStateStore {
|
|
|
85
83
|
}
|
|
86
84
|
return result;
|
|
87
85
|
}
|
|
88
|
-
async listCodeToolHookActivations() {
|
|
86
|
+
async listCodeToolHookActivations(includeDeactivated = false) {
|
|
89
87
|
const db = this.connection.getDb();
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
ORDER BY activated_at ASC
|
|
95
|
-
`).all();
|
|
88
|
+
const sql = includeDeactivated
|
|
89
|
+
? `SELECT activation_id, idempotency_key, artifact_id, channel, action, target_ref, activated_at, deactivated_at FROM activations WHERE channel = 'code_tool_hook' ORDER BY activated_at ASC`
|
|
90
|
+
: `SELECT activation_id, idempotency_key, artifact_id, channel, action, target_ref, activated_at, deactivated_at FROM activations WHERE channel = 'code_tool_hook' AND deactivated_at IS NULL ORDER BY activated_at ASC`;
|
|
91
|
+
const rows = db.prepare(sql).all();
|
|
96
92
|
if (!Array.isArray(rows))
|
|
97
93
|
return [];
|
|
98
94
|
const result = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-activation-state-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sqlite-activation-state-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-activation-state-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ApprovalDecisionResult, ApprovalEnqueueInput, ApprovalFilter, ApprovalListFilter, ApprovalQueueStore, ApprovalRecord, ApprovalStats } from './activation-types.js';
|
|
1
|
+
import type { ApprovalDecisionResult, ApprovalEditInput, ApprovalEnqueueInput, ApprovalFilter, ApprovalListFilter, ApprovalQueueStore, ApprovalRecord, ApprovalStats } from './activation-types.js';
|
|
2
2
|
import type { SqliteConnection } from '../store/sqlite-connection.js';
|
|
3
3
|
export declare class SqliteApprovalQueueStore implements ApprovalQueueStore {
|
|
4
4
|
private readonly connection;
|
|
@@ -16,5 +16,6 @@ export declare class SqliteApprovalQueueStore implements ApprovalQueueStore {
|
|
|
16
16
|
ok: false;
|
|
17
17
|
error: 'not_found' | 'not_approved';
|
|
18
18
|
}>;
|
|
19
|
+
edit(input: ApprovalEditInput): Promise<ApprovalDecisionResult>;
|
|
19
20
|
}
|
|
20
21
|
//# sourceMappingURL=sqlite-approval-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-approval-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-approval-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EAId,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite-approval-store.d.ts","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-approval-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,cAAc,EACd,aAAa,EAId,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAsDtE,qBAAa,wBAAyB,YAAW,kBAAkB;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,gBAAgB;IAEnD,OAAO,CAAC,KAAK,EAAE,oBAAoB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA2B1E,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAM3D,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAU/D,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoB/D,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC;IAUvC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgB9F,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgB9F,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,EAAE,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,WAAW,GAAG,cAAc,CAAA;KAAE,CAAC;IAS9G,IAAI,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAoBtE"}
|
|
@@ -16,6 +16,10 @@ function rowToRecord(row) {
|
|
|
16
16
|
confidenceExplanation: row.confidence_explanation ?? undefined,
|
|
17
17
|
effectDescription: row.effect_description ?? undefined,
|
|
18
18
|
rejectionEffect: row.rejection_effect ?? undefined,
|
|
19
|
+
editedAt: row.edited_at ?? undefined,
|
|
20
|
+
editedBy: row.edited_by ?? undefined,
|
|
21
|
+
editReason: row.edit_reason ?? undefined,
|
|
22
|
+
previousArtifactId: row.previous_artifact_id ?? undefined,
|
|
19
23
|
};
|
|
20
24
|
}
|
|
21
25
|
function makeApprovalId(artifactId, channel) {
|
|
@@ -144,5 +148,25 @@ export class SqliteApprovalQueueStore {
|
|
|
144
148
|
db.prepare("UPDATE approvals SET status = 'pending', decided_at = NULL, decided_by = NULL, decision_note = NULL WHERE approval_id = ? AND status = 'approved'").run(approvalId);
|
|
145
149
|
return { ok: true };
|
|
146
150
|
}
|
|
151
|
+
async edit(input) {
|
|
152
|
+
const db = this.connection.getDb();
|
|
153
|
+
const existing = db.prepare('SELECT status FROM approvals WHERE approval_id = ?').get(input.approvalId);
|
|
154
|
+
if (!existing)
|
|
155
|
+
return { ok: false, error: 'not_found' };
|
|
156
|
+
if (existing.status !== 'pending') {
|
|
157
|
+
return { ok: false, error: 'already_decided', status: existing.status };
|
|
158
|
+
}
|
|
159
|
+
// Atomic UPDATE: derive previous_artifact_id from the current DB value
|
|
160
|
+
// to prevent lineage drift during concurrent edits (ERR-004/ERR-008).
|
|
161
|
+
const updateResult = db.prepare("UPDATE approvals SET previous_artifact_id = artifact_id, artifact_id = ?, edited_at = ?, edited_by = ?, edit_reason = ? WHERE approval_id = ? AND status = 'pending'").run(input.newArtifactId, input.now, input.editedBy, input.editReason, input.approvalId);
|
|
162
|
+
if (updateResult.changes === 0) {
|
|
163
|
+
const fresh = db.prepare('SELECT status FROM approvals WHERE approval_id = ?').get(input.approvalId);
|
|
164
|
+
if (!fresh)
|
|
165
|
+
return { ok: false, error: 'not_found' };
|
|
166
|
+
return { ok: false, error: 'already_decided', status: fresh.status };
|
|
167
|
+
}
|
|
168
|
+
const row = db.prepare('SELECT * FROM approvals WHERE approval_id = ?').get(input.approvalId);
|
|
169
|
+
return { ok: true, record: rowToRecord(row) };
|
|
170
|
+
}
|
|
147
171
|
}
|
|
148
172
|
//# sourceMappingURL=sqlite-approval-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-approval-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-approval-store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite-approval-store.js","sourceRoot":"","sources":["../../../src/runtime-v2/activation/sqlite-approval-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-431: Shared L2 principle reader extracted from duplicated `makeDreamerPrincipleReader`.
|
|
3
|
+
*
|
|
4
|
+
* Previously duplicated verbatim in:
|
|
5
|
+
* - packages/pd-cli/src/commands/runtime-internalization-run-once.ts (L226-243)
|
|
6
|
+
* - packages/openclaw-plugin/src/service/internalization-auto-consumer-service.ts (L179-193)
|
|
7
|
+
*
|
|
8
|
+
* This module is pure logic: the ledger data is injected via parameter, not loaded
|
|
9
|
+
* from disk. Callers in pd-cli/openclaw-plugin handle file I/O and pass the
|
|
10
|
+
* already-loaded ledger to `buildL2PrincipleReaderFromLedger()`.
|
|
11
|
+
*
|
|
12
|
+
* `buildL2PrincipleReader()` remains as a convenience wrapper that accepts
|
|
13
|
+
* `stateDir` and calls `loadLedger()` internally — it is re-exported from
|
|
14
|
+
* pd-cli/openclaw-plugin but NOT from the core index barrel, keeping core
|
|
15
|
+
* I/O-free in its public API.
|
|
16
|
+
*/
|
|
17
|
+
import type { PdL2PrincipleReader } from './tools/agent-tool-contract.js';
|
|
18
|
+
export interface BuildL2PrincipleReaderOptions {
|
|
19
|
+
/** Custom logger for degradation warnings. Defaults to console.warn. */
|
|
20
|
+
logger?: {
|
|
21
|
+
warn: (message: string) => void;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build a read-only principle reader from an already-loaded ledger object.
|
|
26
|
+
* This is the pure-logic entry point — no file I/O.
|
|
27
|
+
*
|
|
28
|
+
* Returns active internalized principles (id + statement).
|
|
29
|
+
* Degrades to empty on malformed ledger (Runtime Contract R9).
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildL2PrincipleReaderFromLedger(ledger: {
|
|
32
|
+
tree: {
|
|
33
|
+
principles?: Record<string, {
|
|
34
|
+
status?: string;
|
|
35
|
+
id?: string;
|
|
36
|
+
text?: string;
|
|
37
|
+
}>;
|
|
38
|
+
};
|
|
39
|
+
}, opts?: BuildL2PrincipleReaderOptions): PdL2PrincipleReader;
|
|
40
|
+
/**
|
|
41
|
+
* Build a read-only principle reader from the workspace ledger.
|
|
42
|
+
* Convenience wrapper that loads the ledger from disk.
|
|
43
|
+
*
|
|
44
|
+
* NOTE: This function performs file I/O via `loadLedger()`. It is intended
|
|
45
|
+
* for use by pd-cli and openclaw-plugin callers. It is NOT re-exported from
|
|
46
|
+
* the core barrel (index.ts) to keep core's public API I/O-free.
|
|
47
|
+
*/
|
|
48
|
+
export declare function buildL2PrincipleReader(stateDir: string, opts?: BuildL2PrincipleReaderOptions): PdL2PrincipleReader;
|
|
49
|
+
//# sourceMappingURL=build-l2-principle-reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-l2-principle-reader.d.ts","sourceRoot":"","sources":["../../src/runtime-v2/build-l2-principle-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E,MAAM,WAAW,6BAA6B;IAC5C,wEAAwE;IACxE,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;CAC9C;AAED;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE;IAAE,IAAI,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,EAAE,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAA;CAAE,EAClG,IAAI,CAAC,EAAE,6BAA6B,GACnC,mBAAmB,CAuBrB;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,6BAA6B,GACnC,mBAAmB,CAUrB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PRI-431: Shared L2 principle reader extracted from duplicated `makeDreamerPrincipleReader`.
|
|
3
|
+
*
|
|
4
|
+
* Previously duplicated verbatim in:
|
|
5
|
+
* - packages/pd-cli/src/commands/runtime-internalization-run-once.ts (L226-243)
|
|
6
|
+
* - packages/openclaw-plugin/src/service/internalization-auto-consumer-service.ts (L179-193)
|
|
7
|
+
*
|
|
8
|
+
* This module is pure logic: the ledger data is injected via parameter, not loaded
|
|
9
|
+
* from disk. Callers in pd-cli/openclaw-plugin handle file I/O and pass the
|
|
10
|
+
* already-loaded ledger to `buildL2PrincipleReaderFromLedger()`.
|
|
11
|
+
*
|
|
12
|
+
* `buildL2PrincipleReader()` remains as a convenience wrapper that accepts
|
|
13
|
+
* `stateDir` and calls `loadLedger()` internally — it is re-exported from
|
|
14
|
+
* pd-cli/openclaw-plugin but NOT from the core index barrel, keeping core
|
|
15
|
+
* I/O-free in its public API.
|
|
16
|
+
*/
|
|
17
|
+
import { loadLedger } from '../principle-tree-ledger.js';
|
|
18
|
+
/**
|
|
19
|
+
* Build a read-only principle reader from an already-loaded ledger object.
|
|
20
|
+
* This is the pure-logic entry point — no file I/O.
|
|
21
|
+
*
|
|
22
|
+
* Returns active internalized principles (id + statement).
|
|
23
|
+
* Degrades to empty on malformed ledger (Runtime Contract R9).
|
|
24
|
+
*/
|
|
25
|
+
export function buildL2PrincipleReaderFromLedger(ledger, opts) {
|
|
26
|
+
const warn = opts?.logger?.warn ?? ((msg) => console.warn(msg));
|
|
27
|
+
return {
|
|
28
|
+
listActivePrinciples: async () => {
|
|
29
|
+
try {
|
|
30
|
+
const principles = ledger.tree.principles ?? {};
|
|
31
|
+
const active = Object.values(principles).filter((p) => {
|
|
32
|
+
if (p.status !== 'active')
|
|
33
|
+
return false;
|
|
34
|
+
if (typeof p.id !== 'string' || typeof p.text !== 'string' || p.text.length === 0) {
|
|
35
|
+
warn(`[l2_dreamer] skipping active principle with missing id or empty text: ${JSON.stringify(p).slice(0, 120)}`);
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
});
|
|
40
|
+
return active.map((p) => ({ id: p.id, statement: p.text }));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
44
|
+
warn(`[l2_dreamer] listActivePrinciples degraded — no internalized principles loaded: ${reason}`);
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Build a read-only principle reader from the workspace ledger.
|
|
52
|
+
* Convenience wrapper that loads the ledger from disk.
|
|
53
|
+
*
|
|
54
|
+
* NOTE: This function performs file I/O via `loadLedger()`. It is intended
|
|
55
|
+
* for use by pd-cli and openclaw-plugin callers. It is NOT re-exported from
|
|
56
|
+
* the core barrel (index.ts) to keep core's public API I/O-free.
|
|
57
|
+
*/
|
|
58
|
+
export function buildL2PrincipleReader(stateDir, opts) {
|
|
59
|
+
try {
|
|
60
|
+
const ledger = loadLedger(stateDir);
|
|
61
|
+
return buildL2PrincipleReaderFromLedger(ledger, opts);
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
const warn = opts?.logger?.warn ?? ((msg) => console.warn(msg));
|
|
65
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
66
|
+
warn(`[l2_dreamer] listActivePrinciples degraded — no internalized principles loaded: ${reason}`);
|
|
67
|
+
return { listActivePrinciples: async () => [] };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=build-l2-principle-reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-l2-principle-reader.js","sourceRoot":"","sources":["../../src/runtime-v2/build-l2-principle-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAQzD;;;;;;GAMG;AACH,MAAM,UAAU,gCAAgC,CAC9C,MAAkG,EAClG,IAAoC;IAEpC,MAAM,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAExE,OAAO;QACL,oBAAoB,EAAE,KAAK,IAAI,EAAE;YAC/B,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;gBAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAqD,EAAE;oBACvG,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ;wBAAE,OAAO,KAAK,CAAC;oBACxC,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAClF,IAAI,CAAC,yEAAyE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;wBACjH,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,OAAO,IAAI,CAAC;gBACd,CAAC,CAAC,CAAC;gBACH,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACtE,IAAI,CAAC,mFAAmF,MAAM,EAAE,CAAC,CAAC;gBAClG,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAgB,EAChB,IAAoC;IAEpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,gCAAgC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACtE,IAAI,CAAC,mFAAmF,MAAM,EAAE,CAAC,CAAC;QAClG,OAAO,EAAE,oBAAoB,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IAClD,CAAC;AACH,CAAC"}
|
|
@@ -194,6 +194,8 @@ describe('computeEffectiveFlags', () => {
|
|
|
194
194
|
continue;
|
|
195
195
|
if (flag.id === 'internalization_auto_consumer')
|
|
196
196
|
continue;
|
|
197
|
+
if (flag.id === 'story_a_approval_completion')
|
|
198
|
+
continue;
|
|
197
199
|
expect(flag.enabled, `quiet flag ${flag.id} should default off`).toBe(false);
|
|
198
200
|
}
|
|
199
201
|
});
|