loopforge 3.7.0 → 3.8.1
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/LICENSE +21 -21
- package/README.md +171 -157
- package/dist/audit.d.ts +53 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +106 -22
- package/dist/audit.js.map +1 -1
- package/dist/canonical-state.d.ts +75 -69
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +276 -168
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +111 -12
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-facts.d.ts +13 -0
- package/dist/cognitive-facts.d.ts.map +1 -1
- package/dist/cognitive-facts.js +30 -16
- package/dist/cognitive-facts.js.map +1 -1
- package/dist/cognitive-governance.d.ts +30 -6
- package/dist/cognitive-governance.d.ts.map +1 -1
- package/dist/cognitive-governance.js +74 -18
- package/dist/cognitive-governance.js.map +1 -1
- package/dist/committed-round.d.ts +109 -24
- package/dist/committed-round.d.ts.map +1 -1
- package/dist/committed-round.js +235 -52
- package/dist/committed-round.js.map +1 -1
- package/dist/contract-items.d.ts +55 -0
- package/dist/contract-items.d.ts.map +1 -0
- package/dist/contract-items.js +180 -0
- package/dist/contract-items.js.map +1 -0
- package/dist/enforcement-gate.d.ts +43 -20
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +269 -378
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +11 -6
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +102 -67
- package/dist/engine.js.map +1 -1
- package/dist/evidence-claims.d.ts +4 -4
- package/dist/evidence-claims.d.ts.map +1 -1
- package/dist/evidence-claims.js +16 -14
- package/dist/evidence-claims.js.map +1 -1
- package/dist/evidence-provider.d.ts +91 -90
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +349 -160
- package/dist/evidence-provider.js.map +1 -1
- package/dist/explain.d.ts +76 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +127 -0
- package/dist/explain.js.map +1 -0
- package/dist/generate-schema.js +250 -53
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +41 -40
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +275 -515
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +0 -1
- package/dist/loop-extras-parser.d.ts.map +1 -1
- package/dist/loop-extras-parser.js +0 -4
- package/dist/loop-extras-parser.js.map +1 -1
- package/dist/loop-projection.d.ts.map +1 -1
- package/dist/loop-projection.js +3 -1
- package/dist/loop-projection.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +40 -21
- package/dist/mcp/round-lifecycle.d.ts.map +1 -1
- package/dist/mcp/round-lifecycle.js +173 -120
- package/dist/mcp/round-lifecycle.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +63 -10
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +53 -7
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +240 -139
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/submission-boundary.d.ts +89 -0
- package/dist/mcp/submission-boundary.d.ts.map +1 -0
- package/dist/mcp/submission-boundary.js +203 -0
- package/dist/mcp/submission-boundary.js.map +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +377 -125
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.js +2 -2
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +65 -95
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +151 -39
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +7 -33
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +313 -473
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +1 -4
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +6 -7
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +411 -168
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +23 -69
- package/dist/protocol.js.map +1 -1
- package/dist/replay.js +2 -2
- package/dist/replay.js.map +1 -1
- package/dist/round-contract.d.ts +69 -57
- package/dist/round-contract.d.ts.map +1 -1
- package/dist/round-contract.js +104 -64
- package/dist/round-contract.js.map +1 -1
- package/dist/round-coordinator.d.ts +55 -16
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +179 -57
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +7 -5
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +2 -1
- package/dist/round-driver.js.map +1 -1
- package/dist/round-facts.d.ts +96 -0
- package/dist/round-facts.d.ts.map +1 -0
- package/dist/round-facts.js +216 -0
- package/dist/round-facts.js.map +1 -0
- package/dist/round-transaction.d.ts +23 -9
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +99 -22
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +127 -11
- package/dist/self-eval.d.ts.map +1 -1
- package/dist/self-eval.js +517 -36
- package/dist/self-eval.js.map +1 -1
- package/dist/subgoal-state.d.ts +77 -0
- package/dist/subgoal-state.d.ts.map +1 -0
- package/dist/subgoal-state.js +198 -0
- package/dist/subgoal-state.js.map +1 -0
- package/dist/token-utils.d.ts +52 -19
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +83 -72
- package/dist/token-utils.js.map +1 -1
- package/dist/verification-gate.d.ts +27 -46
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +308 -557
- package/dist/verification-gate.js.map +1 -1
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace.d.ts +9 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +17 -0
- package/dist/workspace.js.map +1 -1
- package/loop_policy.json +17 -25
- package/package.json +7 -7
- package/skills/perception/SKILL.md +266 -64
package/dist/policy.js
CHANGED
|
@@ -1,30 +1,24 @@
|
|
|
1
1
|
/** Externalized LoopForge runtime policy. */
|
|
2
|
-
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
3
3
|
import { existsSync, lstatSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { containInWorkspace } from "./workspace.js";
|
|
6
|
+
/** v3.8.1: the policy schema version. A policy file that does not declare
|
|
7
|
+
* exactly this version is REJECTED — see loadPolicy. */
|
|
8
|
+
export const POLICY_SCHEMA_VERSION = "4";
|
|
6
9
|
export const DEFAULT_POLICY = {
|
|
7
|
-
version:
|
|
10
|
+
version: POLICY_SCHEMA_VERSION,
|
|
8
11
|
constraints: { retire_window: 3 },
|
|
9
|
-
summary: { window: 5,
|
|
10
|
-
engine: { stall_lookback_rounds: 3, max_rounds:
|
|
12
|
+
summary: { window: 5, milestone_interval: 20 },
|
|
13
|
+
engine: { stall_lookback_rounds: 3, max_rounds: 200, enforcement_escalation_enabled: true, backtrack_enabled: true, backtrack_max_depth: 3, backtrack_preserve_discoveries: true, unverified_claim_streak_limit: 3 },
|
|
11
14
|
prompt: {
|
|
12
|
-
full_refresh_interval: 0,
|
|
13
15
|
l0_max_chars: 3000,
|
|
14
16
|
l1_max_chars: 7000,
|
|
15
17
|
l2_max_chars: 18000,
|
|
16
|
-
l2_adaptive_enabled: true,
|
|
17
|
-
l2_adaptive_round_factor: 200,
|
|
18
|
-
l2_adaptive_milestone_factor: 1000,
|
|
19
|
-
l2_adaptive_max_chars: 40000,
|
|
20
|
-
l2_adaptive_subgoal_factor: 100,
|
|
21
18
|
l2_pointer_enabled: true,
|
|
22
|
-
l1_collapse_enabled: true,
|
|
23
|
-
contract_nudge_on_l2: true,
|
|
24
19
|
max_emphasize_l2: 5,
|
|
25
20
|
max_emphasize_l1: 3,
|
|
26
21
|
max_confusion_points: 3,
|
|
27
|
-
confusion_section_threshold: 0.15,
|
|
28
22
|
},
|
|
29
23
|
backend: { root_dir: ".loopforge" },
|
|
30
24
|
evolution: {
|
|
@@ -32,28 +26,20 @@ export const DEFAULT_POLICY = {
|
|
|
32
26
|
max_active_constraints: 15,
|
|
33
27
|
max_objective_versions: 10,
|
|
34
28
|
progress_stall_threshold: 0.05,
|
|
35
|
-
|
|
36
|
-
task_continuity_threshold: 0.2,
|
|
37
|
-
intent_drift_threshold: 0.15,
|
|
38
|
-
criteria_dedup_threshold: 0.45,
|
|
39
|
-
subgoal_dedup_threshold: 0.6,
|
|
40
|
-
subgoal_match_threshold: 0.5,
|
|
41
|
-
constraint_match_threshold: 0.5,
|
|
42
|
-
subgoal_drift_alignment_threshold: 0.3,
|
|
43
|
-
constraint_id_enabled: true,
|
|
29
|
+
max_active_subgoals: 12,
|
|
44
30
|
},
|
|
45
31
|
checkpoint: { outcome_max_chars: 200 },
|
|
46
32
|
state_file: {
|
|
47
33
|
enabled: true,
|
|
48
34
|
directory: ".loopforge/state",
|
|
49
35
|
},
|
|
50
|
-
evidence: { providers: ["git"], timeout_ms: 120_000, commands: []
|
|
36
|
+
evidence: { providers: ["git"], timeout_ms: 120_000, commands: [] },
|
|
51
37
|
mcp: {
|
|
52
38
|
session_lease_ms: 30_000,
|
|
53
39
|
session_lease_renew_interval_ms: 10_000,
|
|
54
40
|
},
|
|
55
41
|
gate: {
|
|
56
|
-
enabled:
|
|
42
|
+
enabled: false,
|
|
57
43
|
},
|
|
58
44
|
};
|
|
59
45
|
/** Write a full default `loop_policy.json` to the target directory.
|
|
@@ -72,39 +58,99 @@ export function writeDefaultPolicy(targetDir, force = false) {
|
|
|
72
58
|
writeFileSync(target, JSON.stringify(DEFAULT_POLICY, null, 2) + "\n", "utf8");
|
|
73
59
|
return { path: target, created: true };
|
|
74
60
|
}
|
|
61
|
+
/** Element keys of the policy's array-of-object fields. An incoming array
|
|
62
|
+
* REPLACES the default wholesale (the default list is empty), so element keys
|
|
63
|
+
* are not otherwise checked: a typo inside a command ("enable" for "enabled")
|
|
64
|
+
* was accepted, and the command then never registered — the loop ran on a
|
|
65
|
+
* configuration the operator never chose, which is exactly the outcome the
|
|
66
|
+
* version boundary of v3.8.1 exists to prevent. */
|
|
67
|
+
const ARRAY_ELEMENT_KEYS = {
|
|
68
|
+
commands: new Set([
|
|
69
|
+
"name", "enabled", "executable", "args", "cwd", "phase", "required",
|
|
70
|
+
"timeout_ms", "max_output_chars", "success_exit_codes",
|
|
71
|
+
]),
|
|
72
|
+
};
|
|
73
|
+
/** Merge a declared policy file over the defaults.
|
|
74
|
+
*
|
|
75
|
+
* v3.8.1: an unknown key is an ERROR, not a warning. A typo used to be
|
|
76
|
+
* announced and then ignored, so the loop ran on a value the operator never
|
|
77
|
+
* set — the one outcome a configuration defect must never produce. */
|
|
75
78
|
function deepMerge(defaults, overrides) {
|
|
76
79
|
const result = { ...defaults };
|
|
77
80
|
for (const key of Object.keys(overrides)) {
|
|
78
81
|
const current = result[key];
|
|
79
82
|
const incoming = overrides[key];
|
|
80
|
-
|
|
83
|
+
// `Object.hasOwn`, not `in`: the `in` operator also reports keys inherited
|
|
84
|
+
// from Object.prototype, so "constructor" / "__proto__" / "toString" were
|
|
85
|
+
// treated as known keys and merged (or, for "__proto__", replaced this
|
|
86
|
+
// object's prototype) instead of being rejected.
|
|
87
|
+
const known = Object.hasOwn(result, key);
|
|
88
|
+
if (known && current !== null && incoming !== null &&
|
|
81
89
|
typeof current === "object" && !Array.isArray(current) &&
|
|
82
90
|
typeof incoming === "object" && !Array.isArray(incoming)) {
|
|
83
91
|
result[key] = deepMerge(current, incoming);
|
|
84
92
|
}
|
|
85
|
-
else if (
|
|
93
|
+
else if (known) {
|
|
94
|
+
const elementKeys = Array.isArray(incoming) ? ARRAY_ELEMENT_KEYS[key] : undefined;
|
|
95
|
+
if (elementKeys) {
|
|
96
|
+
for (const item of incoming) {
|
|
97
|
+
if (typeof item !== "object" || item === null || Array.isArray(item)) {
|
|
98
|
+
throw new Error(`policy "${key}" entries must be objects — one entry is ` +
|
|
99
|
+
`${Array.isArray(item) ? "an array" : typeof item}.`);
|
|
100
|
+
}
|
|
101
|
+
for (const itemKey of Object.keys(item)) {
|
|
102
|
+
if (!elementKeys.has(itemKey)) {
|
|
103
|
+
throw new Error(`unknown policy key "${key}[].${itemKey}" — remove it, or fix ` +
|
|
104
|
+
"the typo. This release carries no compatibility layer: a " +
|
|
105
|
+
"config written for an older schema is not a valid config for " +
|
|
106
|
+
"this one.");
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
86
111
|
result[key] = incoming;
|
|
87
112
|
}
|
|
88
113
|
else {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
114
|
+
throw new Error(`unknown policy key "${key}" — remove it, or fix the typo. ` +
|
|
115
|
+
"This release carries no compatibility layer: a config written for an " +
|
|
116
|
+
"older schema is not a valid config for this one.");
|
|
92
117
|
}
|
|
93
118
|
}
|
|
94
119
|
return result;
|
|
95
120
|
}
|
|
121
|
+
/** Load the runtime policy, or fall back to the defaults when no file
|
|
122
|
+
* declares one.
|
|
123
|
+
*
|
|
124
|
+
* v3.8.1: the `version` field is load-bearing. Previously it was a
|
|
125
|
+
* declarative string that NOTHING read, so a policy written for an older
|
|
126
|
+
* schema was silently merged over the current defaults — options that no
|
|
127
|
+
* longer exist evaporated and options that changed meaning were applied
|
|
128
|
+
* under their old name. Now a file either declares the current schema
|
|
129
|
+
* version or the load fails, and the failure surfaces as `policy_invalid`
|
|
130
|
+
* rather than the loop running on a configuration nobody chose.
|
|
131
|
+
*
|
|
132
|
+
* A MISSING or unparseable file still falls through to the defaults (running
|
|
133
|
+
* with no policy file is normal). A file that exists and parses is a
|
|
134
|
+
* declaration, so its defects propagate instead of being swallowed. */
|
|
96
135
|
export function loadPolicy(path) {
|
|
97
136
|
const candidates = [path, "loop_policy.json"].filter(Boolean);
|
|
98
137
|
for (const candidate of candidates) {
|
|
138
|
+
let raw;
|
|
99
139
|
try {
|
|
100
|
-
|
|
101
|
-
if (raw && typeof raw === "object" && !Array.isArray(raw)) {
|
|
102
|
-
return deepMerge(DEFAULT_POLICY, raw);
|
|
103
|
-
}
|
|
140
|
+
raw = JSON.parse(readFileSync(resolve(candidate), "utf8"));
|
|
104
141
|
}
|
|
105
142
|
catch {
|
|
106
|
-
//
|
|
143
|
+
continue; // absent or unreadable — try the next candidate
|
|
107
144
|
}
|
|
145
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
146
|
+
continue;
|
|
147
|
+
const version = raw.version;
|
|
148
|
+
if (version !== POLICY_SCHEMA_VERSION) {
|
|
149
|
+
throw new Error(`policy version ${JSON.stringify(version)} does not match the current ` +
|
|
150
|
+
`schema version "${POLICY_SCHEMA_VERSION}". Update the file; there is ` +
|
|
151
|
+
"no migration path.");
|
|
152
|
+
}
|
|
153
|
+
return deepMerge(DEFAULT_POLICY, raw);
|
|
108
154
|
}
|
|
109
155
|
return structuredClone(DEFAULT_POLICY);
|
|
110
156
|
}
|
|
@@ -121,16 +167,82 @@ export function resetPolicy() {
|
|
|
121
167
|
policy = null;
|
|
122
168
|
}
|
|
123
169
|
/** v3.2: Test-only injection — mirrors resetPolicy so tests can exercise a
|
|
124
|
-
* specific policy configuration (e.g.
|
|
170
|
+
* specific policy configuration (e.g. state_file.enabled=false). */
|
|
125
171
|
export function setPolicyForTest(next) {
|
|
126
172
|
policy = next;
|
|
127
173
|
}
|
|
128
|
-
/** v3.
|
|
129
|
-
*
|
|
130
|
-
*
|
|
174
|
+
/** v3.8: Deterministic hash of a command's verification configuration. Used
|
|
175
|
+
* to prove that a contract's bound command did not change under the agent
|
|
176
|
+
* between declaration and closure. `args` order is preserved (semantically
|
|
177
|
+
* meaningful); `success_exit_codes` is sorted (an equivalent set must hash
|
|
178
|
+
* equal). Pure — no I/O, no probing. */
|
|
179
|
+
export function commandConfigHash(config) {
|
|
180
|
+
const normalized = {
|
|
181
|
+
name: config.name,
|
|
182
|
+
executable: config.executable,
|
|
183
|
+
args: [...config.args],
|
|
184
|
+
cwd: config.cwd ?? ".",
|
|
185
|
+
phase: config.phase,
|
|
186
|
+
required: config.required === true,
|
|
187
|
+
timeout_ms: config.timeout_ms,
|
|
188
|
+
max_output_chars: config.max_output_chars,
|
|
189
|
+
success_exit_codes: [...config.success_exit_codes].sort((a, b) => a - b),
|
|
190
|
+
};
|
|
191
|
+
return createHash("sha256").update(stableStringifyPolicy(normalized)).digest("hex");
|
|
192
|
+
}
|
|
193
|
+
/** Stable JSON: object keys sorted recursively, so a key-order change never
|
|
194
|
+
* changes the hash. Arrays keep their order. */
|
|
195
|
+
function stableStringifyPolicy(value) {
|
|
196
|
+
if (value === null || typeof value !== "object")
|
|
197
|
+
return JSON.stringify(value) ?? "null";
|
|
198
|
+
if (Array.isArray(value)) {
|
|
199
|
+
return `[${value.map((item) => stableStringifyPolicy(item)).join(",")}]`;
|
|
200
|
+
}
|
|
201
|
+
const entries = Object.entries(value)
|
|
202
|
+
.filter(([, item]) => item !== undefined)
|
|
203
|
+
.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));
|
|
204
|
+
return `{${entries.map(([key, item]) => `${JSON.stringify(key)}:${stableStringifyPolicy(item)}`).join(",")}}`;
|
|
205
|
+
}
|
|
206
|
+
/** v3.8: Static verification capability — a pure function of policy, so it is
|
|
207
|
+
* byte-identical across retries of the same round and reproducible by
|
|
208
|
+
* replay/audit from committed facts. It contains NO probing, no filesystem
|
|
209
|
+
* access, and no provider-registry state; readiness of the runtime
|
|
210
|
+
* environment is a `doctor` concern, not a hashed fact. */
|
|
211
|
+
export function deriveConfiguredCapability(policy) {
|
|
212
|
+
const providers = (Array.isArray(policy.evidence?.providers) ? policy.evidence.providers : [])
|
|
213
|
+
.filter((name) => typeof name === "string" && name.trim().length > 0)
|
|
214
|
+
.map((providerId) => ({ providerId }));
|
|
215
|
+
const commands = (Array.isArray(policy.evidence?.commands) ? policy.evidence.commands : [])
|
|
216
|
+
.map((command) => ({
|
|
217
|
+
commandId: command.name,
|
|
218
|
+
enabled: command.enabled === true,
|
|
219
|
+
phase: command.phase === "both" ? "both" : "after",
|
|
220
|
+
required: command.required === true,
|
|
221
|
+
configHash: commandConfigHash(command),
|
|
222
|
+
}));
|
|
223
|
+
return {
|
|
224
|
+
schemaVersion: 1,
|
|
225
|
+
providers,
|
|
226
|
+
commands,
|
|
227
|
+
observationConfigured: providers.length > 0,
|
|
228
|
+
// Every configured command runs in the after phase ("after" or "both"),
|
|
229
|
+
// so an enabled command is exactly what makes contract verification
|
|
230
|
+
// possible.
|
|
231
|
+
contractVerificationAvailable: commands.some((command) => command.enabled),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/** v3.3/v3.8: Whether a command name may back a Round Contract item. A
|
|
235
|
+
* contract item is verified by an AFTER-phase observation, so the predicate
|
|
236
|
+
* requires configured AND enabled AND after-capable — `verify_with` may only
|
|
237
|
+
* reference a command the runtime can actually observe at closure time.
|
|
238
|
+
*
|
|
239
|
+
* `CommandEvidencePolicy.phase` is `"after" | "both"` today, so the phase arm
|
|
240
|
+
* is currently self-satisfying; it is stated explicitly because it is the
|
|
241
|
+
* boundary the contract declaration is judged against, not an accident of
|
|
242
|
+
* the current phase enum. */
|
|
131
243
|
export function isConfiguredCommand(name) {
|
|
132
244
|
const commands = getPolicy().evidence?.commands ?? [];
|
|
133
|
-
return commands.some((c) => c.enabled && c.name === name);
|
|
245
|
+
return commands.some((c) => c.enabled && c.name === name && (c.phase === "after" || c.phase === "both"));
|
|
134
246
|
}
|
|
135
247
|
const LOOP_ID_RE = /^[a-zA-Z0-9][-a-zA-Z0-9_:.]{0,127}$/;
|
|
136
248
|
export function validateLoopId(loopId) {
|
package/dist/policy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,16 @@
|
|
|
2
2
|
*
|
|
3
3
|
* L0/L1/L2 control state density only. Reasoning strategy belongs to the
|
|
4
4
|
* external Agent. Mandatory task, hard-constraint, and verification sections
|
|
5
|
-
* are never truncated
|
|
5
|
+
* are never truncated and always render. Budgets are soft CEILINGS applied
|
|
6
|
+
* to optional sections: optional sections are appended in priority order
|
|
7
|
+
* while the rendered length stays under the level's budget, and the rest are
|
|
8
|
+
* dropped from the prompt (the dropped content stays derivable from the
|
|
9
|
+
* vault). Prompt length can exceed the ceiling when the mandatory sections
|
|
10
|
+
* alone are over it — truncation of mandatory content never happens.
|
|
6
11
|
*/
|
|
7
|
-
import type { CanonicalLoopState
|
|
12
|
+
import type { CanonicalLoopState } from "./canonical-state.js";
|
|
8
13
|
import type { PromptArtifact, PromptRequests } from "./protocol.js";
|
|
9
|
-
import type { ConstraintMeta, MilestoneSummary, SubGoal } from "./protocol.js";
|
|
10
14
|
import type { PromptLevel, PromptLevelReason } from "./prompt-policy.js";
|
|
11
|
-
export declare const PROMPT_ARTIFACT_SCHEMA_VERSION: 1;
|
|
12
15
|
export interface PromptBudgets {
|
|
13
16
|
l0: number;
|
|
14
17
|
l1: number;
|
|
@@ -25,38 +28,9 @@ export interface PromptAssemblyInput {
|
|
|
25
28
|
fullStateMarkdown?: string;
|
|
26
29
|
/** v2.9: Model's information needs for this prompt. L0: ignored. */
|
|
27
30
|
promptRequests?: PromptRequests;
|
|
28
|
-
/** v3.2: Previous round's L1 presentation (persisted diff baseline).
|
|
29
|
-
* When present, L1 collapses unchanged content against it. */
|
|
30
|
-
presentedBaseline?: PresentedStateSnapshot | null;
|
|
31
31
|
}
|
|
32
32
|
/** v3.2: The actionable instruction for a verification check. Exported for
|
|
33
33
|
* the coverage test (which imports the CHECK_* constants). */
|
|
34
34
|
export declare function verificationActionFor(check: string): string;
|
|
35
|
-
/** v3.2: Collapse only when at least this many items are unchanged — a tiny
|
|
36
|
-
* unchanged set renders in full (nothing worth saving). */
|
|
37
|
-
export declare const COLLAPSE_MIN_UNCHANGED = 3;
|
|
38
|
-
/** v3.2: Recent-rounds items kept in full when older ones collapse. */
|
|
39
|
-
export declare const KEEP_RECENT_ROUNDS = 3;
|
|
40
|
-
export interface ConstraintDiff {
|
|
41
|
-
/** Constraint texts to render in full (new or violated this round). */
|
|
42
|
-
changed: string[];
|
|
43
|
-
/** Same-ID items unchanged since the baseline. */
|
|
44
|
-
unchangedCount: number;
|
|
45
|
-
/** Baseline items absent now, excluding emphasized items (they were moved
|
|
46
|
-
* to Critical Context, not demoted). */
|
|
47
|
-
removedCount: number;
|
|
48
|
-
}
|
|
49
|
-
export declare function diffConstraints(baseline: PresentedStateSnapshot | null, activeTexts: string[], metadata: ConstraintMeta[], round: number, emphasized: Set<string>): ConstraintDiff;
|
|
50
|
-
export interface SubGoalDiff {
|
|
51
|
-
/** Sub-goals to render in full (new or status transition). */
|
|
52
|
-
changed: SubGoal[];
|
|
53
|
-
unchangedCount: number;
|
|
54
|
-
/** Baseline sub-goals no longer in the active set (done/canceled/blocked). */
|
|
55
|
-
removedCount: number;
|
|
56
|
-
}
|
|
57
|
-
export declare function diffSubGoals(baseline: PresentedStateSnapshot | null, activeSubs: SubGoal[]): SubGoalDiff;
|
|
58
|
-
/** v3.2: True when a milestone boundary was crossed since the baseline —
|
|
59
|
-
* the Recent Rounds section then renders in full (a phase ended). */
|
|
60
|
-
export declare function milestoneBoundaryChanged(baseline: PresentedStateSnapshot | null, milestones: MilestoneSummary[]): boolean;
|
|
61
35
|
export declare function assemblePromptArtifact(input: PromptAssemblyInput): PromptArtifact;
|
|
62
36
|
//# sourceMappingURL=prompt-assembler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAO/D,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOpE,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAK5B,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,eAAO,MAAM,sBAAsB,EAAE,aAIpC,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAmHD;+DAC+D;AAC/D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AA6mBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAiLjF"}
|