loopforge 3.0.0 → 3.2.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/README.md +128 -145
- package/dist/audit.d.ts +50 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +158 -0
- package/dist/audit.js.map +1 -0
- package/dist/canonical-state.d.ts +28 -20
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +82 -173
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -16
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-governance.d.ts +25 -33
- package/dist/cognitive-governance.d.ts.map +1 -1
- package/dist/cognitive-governance.js +38 -138
- package/dist/cognitive-governance.js.map +1 -1
- package/dist/enforcement-gate.d.ts +76 -0
- package/dist/enforcement-gate.d.ts.map +1 -0
- package/dist/enforcement-gate.js +1071 -0
- package/dist/enforcement-gate.js.map +1 -0
- package/dist/engine.d.ts +99 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +839 -0
- package/dist/engine.js.map +1 -0
- package/dist/evidence-claims.d.ts +50 -0
- package/dist/evidence-claims.d.ts.map +1 -0
- package/dist/evidence-claims.js +134 -0
- package/dist/evidence-claims.js.map +1 -0
- package/dist/evidence-provider.d.ts +21 -23
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +74 -34
- package/dist/evidence-provider.js.map +1 -1
- package/dist/generate-schema.js +1 -84
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +19 -22
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -15
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +41 -3
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +632 -273
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +2 -2
- package/dist/loop-extras-parser.d.ts.map +1 -1
- package/dist/loop-extras-parser.js +2 -2
- package/dist/loop-extras-parser.js.map +1 -1
- package/dist/loop-projection.d.ts +26 -0
- package/dist/loop-projection.d.ts.map +1 -0
- package/dist/loop-projection.js +142 -0
- package/dist/loop-projection.js.map +1 -0
- package/dist/loop-store.d.ts +112 -24
- package/dist/loop-store.d.ts.map +1 -1
- package/dist/loop-store.js +365 -218
- package/dist/loop-store.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +216 -0
- package/dist/mcp/round-lifecycle.d.ts.map +1 -0
- package/dist/mcp/round-lifecycle.js +926 -0
- package/dist/mcp/round-lifecycle.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +28 -42
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +53 -101
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +306 -1105
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +13 -16
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +479 -413
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.d.ts +12 -17
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +95 -161
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +44 -35
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +31 -115
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +37 -6
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +389 -160
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +1 -8
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +8 -26
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +357 -229
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +139 -15
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts +5 -13
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +19 -55
- package/dist/replay.js.map +1 -1
- package/dist/round-coordinator.d.ts +20 -24
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +99 -92
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +14 -13
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +26 -14
- package/dist/round-driver.js.map +1 -1
- package/dist/round-transaction.d.ts +15 -18
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +38 -47
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +53 -0
- package/dist/self-eval.d.ts.map +1 -0
- package/dist/self-eval.js +284 -0
- package/dist/self-eval.js.map +1 -0
- package/dist/storage.d.ts +9 -4
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +18 -6
- package/dist/storage.js.map +1 -1
- package/dist/token-utils.d.ts +15 -3
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +24 -5
- package/dist/token-utils.js.map +1 -1
- package/dist/verification-gate.d.ts +108 -0
- package/dist/verification-gate.d.ts.map +1 -0
- package/dist/verification-gate.js +971 -0
- package/dist/verification-gate.js.map +1 -0
- package/loop_policy.json +44 -15
- package/package.json +5 -10
- package/skills/perception/SKILL.md +182 -199
- package/dist/canonical-event-writer.d.ts +0 -20
- package/dist/canonical-event-writer.d.ts.map +0 -1
- package/dist/canonical-event-writer.js +0 -131
- package/dist/canonical-event-writer.js.map +0 -1
- package/dist/compiler-subgoals.d.ts +0 -7
- package/dist/compiler-subgoals.d.ts.map +0 -1
- package/dist/compiler-subgoals.js +0 -93
- package/dist/compiler-subgoals.js.map +0 -1
- package/dist/derive-id.d.ts +0 -12
- package/dist/derive-id.d.ts.map +0 -1
- package/dist/derive-id.js +0 -31
- package/dist/derive-id.js.map +0 -1
- package/dist/mcp/session-projection.d.ts +0 -5
- package/dist/mcp/session-projection.d.ts.map +0 -1
- package/dist/mcp/session-projection.js +0 -18
- package/dist/mcp/session-projection.js.map +0 -1
- package/dist/mcp/session-queue.d.ts +0 -3
- package/dist/mcp/session-queue.d.ts.map +0 -1
- package/dist/mcp/session-queue.js +0 -18
- package/dist/mcp/session-queue.js.map +0 -1
- package/dist/mcp/session-types.d.ts +0 -72
- package/dist/mcp/session-types.d.ts.map +0 -1
- package/dist/mcp/session-types.js +0 -2
- package/dist/mcp/session-types.js.map +0 -1
- package/dist/round-commit-store.d.ts +0 -12
- package/dist/round-commit-store.d.ts.map +0 -1
- package/dist/round-commit-store.js +0 -13
- package/dist/round-commit-store.js.map +0 -1
- package/dist/round-gate.d.ts +0 -31
- package/dist/round-gate.d.ts.map +0 -1
- package/dist/round-gate.js +0 -259
- package/dist/round-gate.js.map +0 -1
- package/dist/round-recovery.d.ts +0 -17
- package/dist/round-recovery.d.ts.map +0 -1
- package/dist/round-recovery.js +0 -117
- package/dist/round-recovery.js.map +0 -1
- package/dist/round-report.d.ts +0 -16
- package/dist/round-report.d.ts.map +0 -1
- package/dist/round-report.js +0 -401
- package/dist/round-report.js.map +0 -1
- package/dist/runtime-services.d.ts +0 -59
- package/dist/runtime-services.d.ts.map +0 -1
- package/dist/runtime-services.js +0 -460
- package/dist/runtime-services.js.map +0 -1
- package/dist/vault-format.d.ts +0 -4
- package/dist/vault-format.d.ts.map +0 -1
- package/dist/vault-format.js +0 -4
- package/dist/vault-format.js.map +0 -1
- package/dist/vault-types.d.ts +0 -24
- package/dist/vault-types.d.ts.map +0 -1
- package/dist/vault-types.js +0 -2
- package/dist/vault-types.js.map +0 -1
- package/loopforge-policy.json +0 -340
package/dist/policy.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** Externalized LoopForge runtime policy. */
|
|
2
2
|
export interface ConstraintsPolicy {
|
|
3
|
-
retire_window
|
|
3
|
+
retire_window: number;
|
|
4
4
|
}
|
|
5
5
|
export interface SummaryPolicy {
|
|
6
6
|
window: number;
|
|
@@ -12,14 +12,18 @@ export interface SummaryPolicy {
|
|
|
12
12
|
/** v2.1: Maximum number of milestone summaries to accumulate.
|
|
13
13
|
* Oldest milestones are evicted when the cap is exceeded. */
|
|
14
14
|
max_milestones: number;
|
|
15
|
+
/** v3.0.1: L1 milestone sampling — when milestones exceed max_milestones,
|
|
16
|
+
* keep this many of the OLDEST milestones as history anchors. The same
|
|
17
|
+
* count of the NEWEST is always kept; the middle is sampled evenly. */
|
|
18
|
+
milestone_head_count: number;
|
|
19
|
+
/** v3.0.1: L1 milestone sampling — this many of the NEWEST milestones are
|
|
20
|
+
* always kept when the cap is exceeded. */
|
|
21
|
+
milestone_tail_count: number;
|
|
15
22
|
/** v2.1: Enable the loop_synthesis paragraph in L2 prompts and state files. */
|
|
16
23
|
enable_loop_synthesis: boolean;
|
|
17
24
|
}
|
|
18
25
|
export interface EnginePolicy {
|
|
19
|
-
|
|
20
|
-
/** Consecutive accepted-but-failed rounds that stop the loop via the
|
|
21
|
-
* circuit breaker. The breaker only counts committed rounds; rejected
|
|
22
|
-
* rounds are handled by max_rejections. Set to 0 to disable. Default: 3. */
|
|
26
|
+
feedback_flush_interval: number;
|
|
23
27
|
max_circuit_breaker: number;
|
|
24
28
|
max_rounds: number;
|
|
25
29
|
/** v2.7: When true, enforcement rules that would terminate (R4 2nd strike,
|
|
@@ -48,20 +52,17 @@ export interface EnginePolicy {
|
|
|
48
52
|
* disable the streak limit (pre-v2.12 behavior — any ≥ 20 char
|
|
49
53
|
* clarification always waives). Default: 3. */
|
|
50
54
|
drift_clarification_max_streak: number;
|
|
51
|
-
/** v2.
|
|
52
|
-
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
|
|
55
|
+
/** v2.13: When true, LoopForge automatically executes git stash + reset
|
|
56
|
+
* on backtrack to restore the workspace to the clean round's commit.
|
|
57
|
+
* DANGEROUS: mutates the working tree directly. Default: false.
|
|
58
|
+
* When false (default), the backtrack prompt instructs the agent to
|
|
59
|
+
* restore manually, and the verification gate enforces the check. */
|
|
60
|
+
backtrack_auto_restore: boolean;
|
|
56
61
|
}
|
|
57
62
|
/** Levels control state density only; reasoning strategy belongs to the Agent. */
|
|
58
63
|
export interface PromptPolicy {
|
|
59
64
|
injection_mode: "adaptive" | "full" | "pointer";
|
|
60
65
|
full_refresh_interval: number;
|
|
61
|
-
adaptive_refresh: boolean;
|
|
62
|
-
max_l1_streak: number;
|
|
63
|
-
stale_round_threshold: number;
|
|
64
|
-
min_meaningful_sections: number;
|
|
65
66
|
l0_max_chars: number;
|
|
66
67
|
l1_max_chars: number;
|
|
67
68
|
l2_max_chars: number;
|
|
@@ -82,6 +83,10 @@ export interface PromptPolicy {
|
|
|
82
83
|
* rendered. Default: true. Set to false to restore pre-v2.8 L2
|
|
83
84
|
* behavior. */
|
|
84
85
|
l2_pointer_enabled: boolean;
|
|
86
|
+
/** v3.2: Collapse unchanged L1 content (vs the previous round's persisted
|
|
87
|
+
* presentation) into one-line state-file pointers. Default: true.
|
|
88
|
+
* Set to false to restore pre-v3.2 full L1 rendering. */
|
|
89
|
+
l1_collapse_enabled: boolean;
|
|
85
90
|
/** v2.9: Max emphasize items when level is L2. Default: 5. */
|
|
86
91
|
max_emphasize_l2: number;
|
|
87
92
|
/** v2.9: Max emphasize items when level is L1. Default: 3. */
|
|
@@ -90,6 +95,9 @@ export interface PromptPolicy {
|
|
|
90
95
|
max_expand_l1: number;
|
|
91
96
|
/** v2.9: Max confusion points rendered. Default: 3. */
|
|
92
97
|
max_confusion_points: number;
|
|
98
|
+
/** v2.14: Jaccard threshold for pointing a confusion point at its
|
|
99
|
+
* best-matching state section. Default: 0.15 (15%). */
|
|
100
|
+
confusion_section_threshold: number;
|
|
93
101
|
base_prompt_version: string;
|
|
94
102
|
}
|
|
95
103
|
export interface BackendPolicy {
|
|
@@ -100,13 +108,14 @@ export interface EvolutionPolicy {
|
|
|
100
108
|
max_discovered_constraints_per_round: number;
|
|
101
109
|
max_active_constraints: number;
|
|
102
110
|
max_objective_versions: number;
|
|
103
|
-
progress_stall_threshold
|
|
104
|
-
progress_stall_rounds
|
|
105
|
-
progress_mismatch_threshold
|
|
106
|
-
/**
|
|
107
|
-
|
|
111
|
+
progress_stall_threshold: number;
|
|
112
|
+
progress_stall_rounds: number;
|
|
113
|
+
progress_mismatch_threshold: number;
|
|
114
|
+
/** v2.14: Jaccard threshold for task continuity in checkLoopHealth —
|
|
115
|
+
* below this, the loop is considered drifting. Default: 0.2. */
|
|
116
|
+
task_continuity_threshold: number;
|
|
108
117
|
/** v2.1: Jaccard token similarity threshold for intent-action drift
|
|
109
|
-
* detection. When the previous round's
|
|
118
|
+
* detection. When the previous round's next_action and the current
|
|
110
119
|
* round's output_summary have similarity below this threshold, a
|
|
111
120
|
* verification flag is raised. Default: 0.15 (15%). */
|
|
112
121
|
intent_drift_threshold: number;
|
|
@@ -123,18 +132,18 @@ export interface EvolutionPolicy {
|
|
|
123
132
|
* (completed/blocked/canceled) to existing sub-goals. Default: 0.5. */
|
|
124
133
|
subgoal_match_threshold: number;
|
|
125
134
|
/** v2.5: Jaccard threshold for auto-promoting a pending sub-goal to
|
|
126
|
-
*
|
|
127
|
-
subgoal_auto_in_progress_threshold
|
|
135
|
+
* in_progress when next_action aligns. Default: 0.4. */
|
|
136
|
+
subgoal_auto_in_progress_threshold: number;
|
|
128
137
|
/** v2.5: Jaccard threshold for matching constraints during discovery
|
|
129
138
|
* and violation tracking. Default: 0.5. */
|
|
130
139
|
constraint_match_threshold: number;
|
|
131
|
-
/** v2.5: Jaccard threshold for checkSubGoalDrift —
|
|
140
|
+
/** v2.5: Jaccard threshold for checkSubGoalDrift — next_action must
|
|
132
141
|
* exceed this to be considered "aligned" with a pending sub-goal.
|
|
133
142
|
* Default: 0.3. */
|
|
134
143
|
subgoal_drift_alignment_threshold: number;
|
|
135
144
|
/** v2.2: Number of rounds a sub-goal can stay pending before
|
|
136
145
|
* being flagged as stale in prompts. Default: 10. */
|
|
137
|
-
subgoal_stale_rounds
|
|
146
|
+
subgoal_stale_rounds: number;
|
|
138
147
|
/** v2.2: Maximum sub-goals to render in prompt. Default: 10. */
|
|
139
148
|
max_subgoals_in_prompt: number;
|
|
140
149
|
/** v2.2: Maximum completed sub-goals to render in prompt. Default: 5. */
|
|
@@ -151,15 +160,14 @@ export interface EvolutionPolicy {
|
|
|
151
160
|
constraint_id_enabled: boolean;
|
|
152
161
|
}
|
|
153
162
|
export interface CheckpointPolicy {
|
|
154
|
-
max_carried_constraints: number;
|
|
155
163
|
outcome_max_chars: number;
|
|
156
164
|
}
|
|
157
165
|
/** Human-readable derived state view. JSON LoopStore documents remain truth. */
|
|
158
166
|
export interface StateFilePolicy {
|
|
159
167
|
enabled: boolean;
|
|
160
168
|
directory: string;
|
|
161
|
-
max_checkpoints
|
|
162
|
-
max_summary_rounds
|
|
169
|
+
max_checkpoints: number;
|
|
170
|
+
max_summary_rounds: number;
|
|
163
171
|
}
|
|
164
172
|
export interface EvidencePolicy {
|
|
165
173
|
providers: string[];
|
|
@@ -182,6 +190,11 @@ export interface McpPolicy {
|
|
|
182
190
|
session_lease_ms: number;
|
|
183
191
|
session_lease_renew_interval_ms: number;
|
|
184
192
|
}
|
|
193
|
+
/** v2.12: User/Agent gate governance. The gate is a record layer — it never
|
|
194
|
+
* blocks the verify→enforce→stop decision flow. */
|
|
195
|
+
export interface GatePolicy {
|
|
196
|
+
enabled: boolean;
|
|
197
|
+
}
|
|
185
198
|
export interface LoopPolicy {
|
|
186
199
|
version: string;
|
|
187
200
|
constraints: ConstraintsPolicy;
|
|
@@ -194,16 +207,9 @@ export interface LoopPolicy {
|
|
|
194
207
|
state_file: StateFilePolicy;
|
|
195
208
|
evidence: EvidencePolicy;
|
|
196
209
|
mcp: McpPolicy;
|
|
197
|
-
|
|
198
|
-
export interface PolicyDiagnostic {
|
|
199
|
-
severity: "warning" | "error";
|
|
200
|
-
kind: "unknown" | "deprecated" | "removed" | "type" | "parse";
|
|
201
|
-
path: string;
|
|
202
|
-
message: string;
|
|
210
|
+
gate: GatePolicy;
|
|
203
211
|
}
|
|
204
212
|
export declare const DEFAULT_POLICY: LoopPolicy;
|
|
205
|
-
export declare function diagnosePolicyDocument(value: unknown): PolicyDiagnostic[];
|
|
206
|
-
export declare function getPolicyDiagnostics(): PolicyDiagnostic[];
|
|
207
213
|
/** Write a full default `loop_policy.json` to the target directory.
|
|
208
214
|
*
|
|
209
215
|
* The written file contains every configurable key and its default value
|
|
@@ -219,6 +225,9 @@ export declare function writeDefaultPolicy(targetDir: string, force?: boolean):
|
|
|
219
225
|
export declare function loadPolicy(path?: string): LoopPolicy;
|
|
220
226
|
export declare function getPolicy(path?: string): LoopPolicy;
|
|
221
227
|
export declare function resetPolicy(): void;
|
|
228
|
+
/** v3.2: Test-only injection — mirrors resetPolicy so tests can exercise a
|
|
229
|
+
* specific policy configuration (e.g. l1_collapse_enabled=false). */
|
|
230
|
+
export declare function setPolicyForTest(next: LoopPolicy): void;
|
|
222
231
|
export declare function validateLoopId(loopId: string): void;
|
|
223
232
|
export declare function resolveStateDirectory(workspaceRoot: string, configuredDirectory: string): string;
|
|
224
233
|
export declare function writeStateFile(loopId: string, content: string | undefined): void;
|
package/dist/policy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAe7C,MAAM,WAAW,iBAAiB;IAChC,aAAa,
|
|
1
|
+
{"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
package/dist/policy.js
CHANGED
|
@@ -2,32 +2,14 @@
|
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import { existsSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, writeFileSync, } from "node:fs";
|
|
4
4
|
import { isAbsolute, relative, resolve, sep } from "node:path";
|
|
5
|
-
const REMOVED_POLICY_KEYS = new Set([
|
|
6
|
-
"engine.backtrack_auto_restore",
|
|
7
|
-
]);
|
|
8
|
-
const DEPRECATED_POLICY_KEYS = new Set([
|
|
9
|
-
"constraints.retire_window",
|
|
10
|
-
"engine.round_event_flush_interval",
|
|
11
|
-
"evolution.progress_stall_threshold",
|
|
12
|
-
"evolution.progress_stall_rounds",
|
|
13
|
-
"evolution.progress_mismatch_threshold",
|
|
14
|
-
"evolution.subgoal_auto_in_progress_threshold",
|
|
15
|
-
"evolution.subgoal_stale_rounds",
|
|
16
|
-
"state_file.max_checkpoints",
|
|
17
|
-
"state_file.max_summary_rounds",
|
|
18
|
-
]);
|
|
19
5
|
export const DEFAULT_POLICY = {
|
|
20
|
-
version: "
|
|
21
|
-
constraints: {},
|
|
22
|
-
summary: { window: 5, health_check_interval: 1, milestone_interval: 20, max_milestones: 10, enable_loop_synthesis: true },
|
|
23
|
-
engine: { max_circuit_breaker: 3, max_rounds:
|
|
6
|
+
version: "2",
|
|
7
|
+
constraints: { retire_window: 3 },
|
|
8
|
+
summary: { window: 5, health_check_interval: 1, milestone_interval: 20, max_milestones: 10, milestone_head_count: 3, milestone_tail_count: 3, enable_loop_synthesis: true },
|
|
9
|
+
engine: { feedback_flush_interval: 5, max_circuit_breaker: 3, max_rounds: 20, enforcement_escalation_enabled: true, backtrack_enabled: true, backtrack_max_depth: 3, backtrack_preserve_discoveries: true, drift_clarification_max_streak: 3, backtrack_auto_restore: false },
|
|
24
10
|
prompt: {
|
|
25
11
|
injection_mode: "adaptive",
|
|
26
12
|
full_refresh_interval: 0,
|
|
27
|
-
adaptive_refresh: true,
|
|
28
|
-
max_l1_streak: 6,
|
|
29
|
-
stale_round_threshold: 3,
|
|
30
|
-
min_meaningful_sections: 4,
|
|
31
13
|
l0_max_chars: 3000,
|
|
32
14
|
l1_max_chars: 7000,
|
|
33
15
|
l2_max_chars: 18000,
|
|
@@ -37,120 +19,53 @@ export const DEFAULT_POLICY = {
|
|
|
37
19
|
l2_adaptive_max_chars: 40000,
|
|
38
20
|
l2_adaptive_subgoal_factor: 100,
|
|
39
21
|
l2_pointer_enabled: true,
|
|
22
|
+
l1_collapse_enabled: true,
|
|
40
23
|
max_emphasize_l2: 5,
|
|
41
24
|
max_emphasize_l1: 3,
|
|
42
25
|
max_expand_l1: 1,
|
|
43
26
|
max_confusion_points: 3,
|
|
44
|
-
|
|
27
|
+
confusion_section_threshold: 0.15,
|
|
28
|
+
base_prompt_version: "2.0.0",
|
|
45
29
|
},
|
|
46
30
|
backend: { root_dir: ".loopforge" },
|
|
47
31
|
evolution: {
|
|
48
32
|
max_discovered_constraints_per_round: 5,
|
|
49
33
|
max_active_constraints: 15,
|
|
50
34
|
max_objective_versions: 10,
|
|
51
|
-
|
|
35
|
+
progress_stall_threshold: 0.05,
|
|
36
|
+
progress_stall_rounds: 2,
|
|
37
|
+
progress_mismatch_threshold: 0.3,
|
|
38
|
+
task_continuity_threshold: 0.2,
|
|
52
39
|
intent_drift_threshold: 0.15,
|
|
53
40
|
criteria_dedup_threshold: 0.45,
|
|
54
41
|
subgoal_dedup_threshold: 0.6,
|
|
55
42
|
subgoal_match_threshold: 0.5,
|
|
43
|
+
subgoal_auto_in_progress_threshold: 0.4,
|
|
56
44
|
subgoal_auto_complete_threshold: 0.4,
|
|
57
45
|
constraint_match_threshold: 0.5,
|
|
58
46
|
subgoal_drift_alignment_threshold: 0.3,
|
|
47
|
+
subgoal_stale_rounds: 10,
|
|
59
48
|
max_subgoals_in_prompt: 10,
|
|
60
49
|
max_done_subgoals_in_prompt: 5,
|
|
61
50
|
constraint_inactive_rounds: 15,
|
|
62
51
|
constraint_id_enabled: true,
|
|
63
52
|
},
|
|
64
|
-
checkpoint: {
|
|
53
|
+
checkpoint: { outcome_max_chars: 200 },
|
|
65
54
|
state_file: {
|
|
66
55
|
enabled: true,
|
|
67
56
|
directory: ".loopforge/state",
|
|
57
|
+
max_checkpoints: 5,
|
|
58
|
+
max_summary_rounds: 5,
|
|
68
59
|
},
|
|
69
60
|
evidence: { providers: ["git"], timeout_ms: 120_000, commands: [] },
|
|
70
61
|
mcp: {
|
|
71
62
|
session_lease_ms: 30_000,
|
|
72
63
|
session_lease_renew_interval_ms: 10_000,
|
|
73
64
|
},
|
|
65
|
+
gate: {
|
|
66
|
+
enabled: true,
|
|
67
|
+
},
|
|
74
68
|
};
|
|
75
|
-
let lastPolicyDiagnostics = [];
|
|
76
|
-
function policyKind(value) {
|
|
77
|
-
if (Array.isArray(value))
|
|
78
|
-
return "array";
|
|
79
|
-
if (value === null)
|
|
80
|
-
return "null";
|
|
81
|
-
return typeof value;
|
|
82
|
-
}
|
|
83
|
-
function collectPolicyDiagnostics(value, defaults, path, diagnostics) {
|
|
84
|
-
if (value === null || value === undefined)
|
|
85
|
-
return;
|
|
86
|
-
if (typeof defaults !== "object" || defaults === null || Array.isArray(defaults)) {
|
|
87
|
-
if (policyKind(value) !== policyKind(defaults)) {
|
|
88
|
-
diagnostics.push({
|
|
89
|
-
severity: "error",
|
|
90
|
-
kind: "type",
|
|
91
|
-
path,
|
|
92
|
-
message: `Expected ${policyKind(defaults)}, received ${policyKind(value)}.`,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (typeof value !== "object" || Array.isArray(value)) {
|
|
98
|
-
diagnostics.push({
|
|
99
|
-
severity: "error",
|
|
100
|
-
kind: "type",
|
|
101
|
-
path,
|
|
102
|
-
message: `Expected object, received ${policyKind(value)}.`,
|
|
103
|
-
});
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
const defaultRecord = defaults;
|
|
107
|
-
const valueRecord = value;
|
|
108
|
-
for (const key of Object.keys(valueRecord)) {
|
|
109
|
-
const childPath = path ? `${path}.${key}` : key;
|
|
110
|
-
if (REMOVED_POLICY_KEYS.has(childPath)) {
|
|
111
|
-
diagnostics.push({
|
|
112
|
-
severity: "error",
|
|
113
|
-
kind: "removed",
|
|
114
|
-
path: childPath,
|
|
115
|
-
message: "This policy key is removed and has never performed automatic workspace changes.",
|
|
116
|
-
});
|
|
117
|
-
continue;
|
|
118
|
-
}
|
|
119
|
-
if (DEPRECATED_POLICY_KEYS.has(childPath)) {
|
|
120
|
-
diagnostics.push({
|
|
121
|
-
severity: "warning",
|
|
122
|
-
kind: "deprecated",
|
|
123
|
-
path: childPath,
|
|
124
|
-
message: "This policy key is deprecated and has no effect in the stable runtime.",
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
if (!(key in defaultRecord)) {
|
|
128
|
-
const kind = REMOVED_POLICY_KEYS.has(childPath)
|
|
129
|
-
? "removed"
|
|
130
|
-
: DEPRECATED_POLICY_KEYS.has(childPath) ? "deprecated" : "unknown";
|
|
131
|
-
diagnostics.push({
|
|
132
|
-
severity: kind === "removed" ? "error" : "warning",
|
|
133
|
-
kind,
|
|
134
|
-
path: childPath,
|
|
135
|
-
message: kind === "removed"
|
|
136
|
-
? "This policy key is removed and has never performed automatic workspace changes."
|
|
137
|
-
: kind === "deprecated"
|
|
138
|
-
? "This policy key is deprecated and has no effect in the stable runtime."
|
|
139
|
-
: "Unknown policy key; it will be ignored.",
|
|
140
|
-
});
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
collectPolicyDiagnostics(valueRecord[key], defaultRecord[key], childPath, diagnostics);
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
export function diagnosePolicyDocument(value) {
|
|
147
|
-
const diagnostics = [];
|
|
148
|
-
collectPolicyDiagnostics(value, DEFAULT_POLICY, "", diagnostics);
|
|
149
|
-
return diagnostics;
|
|
150
|
-
}
|
|
151
|
-
export function getPolicyDiagnostics() {
|
|
152
|
-
return lastPolicyDiagnostics.map((diagnostic) => ({ ...diagnostic }));
|
|
153
|
-
}
|
|
154
69
|
/** Write a full default `loop_policy.json` to the target directory.
|
|
155
70
|
*
|
|
156
71
|
* The written file contains every configurable key and its default value
|
|
@@ -177,32 +92,28 @@ function deepMerge(defaults, overrides) {
|
|
|
177
92
|
typeof incoming === "object" && !Array.isArray(incoming)) {
|
|
178
93
|
result[key] = deepMerge(current, incoming);
|
|
179
94
|
}
|
|
180
|
-
else if (key in result
|
|
95
|
+
else if (key in result) {
|
|
181
96
|
result[key] = incoming;
|
|
182
97
|
}
|
|
98
|
+
else {
|
|
99
|
+
// Warn on unknown keys — a typo like "max_round" instead of
|
|
100
|
+
// "max_rounds" would otherwise be silently ignored.
|
|
101
|
+
console.warn(`loopforge: ignoring unknown policy key "${key}". Check loop_policy.json for typos.`);
|
|
102
|
+
}
|
|
183
103
|
}
|
|
184
104
|
return result;
|
|
185
105
|
}
|
|
186
106
|
export function loadPolicy(path) {
|
|
187
|
-
lastPolicyDiagnostics = [];
|
|
188
107
|
const candidates = [path, "loop_policy.json"].filter(Boolean);
|
|
189
108
|
for (const candidate of candidates) {
|
|
190
109
|
try {
|
|
191
110
|
const raw = JSON.parse(readFileSync(resolve(candidate), "utf8"));
|
|
192
111
|
if (raw && typeof raw === "object" && !Array.isArray(raw)) {
|
|
193
|
-
lastPolicyDiagnostics = diagnosePolicyDocument(raw);
|
|
194
112
|
return deepMerge(DEFAULT_POLICY, raw);
|
|
195
113
|
}
|
|
196
114
|
}
|
|
197
115
|
catch {
|
|
198
|
-
|
|
199
|
-
lastPolicyDiagnostics = [{
|
|
200
|
-
severity: "error",
|
|
201
|
-
kind: "parse",
|
|
202
|
-
path: candidate,
|
|
203
|
-
message: "Policy file is not valid JSON; defaults are active.",
|
|
204
|
-
}];
|
|
205
|
-
}
|
|
116
|
+
// Try the next candidate.
|
|
206
117
|
}
|
|
207
118
|
}
|
|
208
119
|
return structuredClone(DEFAULT_POLICY);
|
|
@@ -219,6 +130,11 @@ export function getPolicy(path) {
|
|
|
219
130
|
export function resetPolicy() {
|
|
220
131
|
policy = null;
|
|
221
132
|
}
|
|
133
|
+
/** v3.2: Test-only injection — mirrors resetPolicy so tests can exercise a
|
|
134
|
+
* specific policy configuration (e.g. l1_collapse_enabled=false). */
|
|
135
|
+
export function setPolicyForTest(next) {
|
|
136
|
+
policy = next;
|
|
137
|
+
}
|
|
222
138
|
const LOOP_ID_RE = /^[a-zA-Z0-9][-a-zA-Z0-9_:.]{0,127}$/;
|
|
223
139
|
export function validateLoopId(loopId) {
|
|
224
140
|
if (typeof loopId !== "string" || !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;AACzC,OAAO,EACL,UAAU,EACV,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,MAAM,EACN,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* external Agent. Mandatory task, hard-constraint, and verification sections
|
|
5
5
|
* are never truncated; budgets are soft and overflow is recorded.
|
|
6
6
|
*/
|
|
7
|
-
import type { CanonicalLoopState } from "./canonical-state.js";
|
|
7
|
+
import type { CanonicalLoopState, PresentedStateSnapshot } from "./canonical-state.js";
|
|
8
8
|
import type { PromptArtifact, PromptRequests } from "./protocol.js";
|
|
9
|
+
import type { ConstraintMeta, MilestoneSummary, SubGoal } from "./protocol.js";
|
|
9
10
|
import type { PromptLevel, PromptLevelReason } from "./prompt-policy.js";
|
|
10
|
-
export declare const
|
|
11
|
-
export declare const BASE_PROMPT_VERSION = "
|
|
11
|
+
export declare const PROMPT_ARTIFACT_SCHEMA_VERSION: 1;
|
|
12
|
+
export declare const BASE_PROMPT_VERSION = "2.0.0";
|
|
12
13
|
export type InjectionMode = "adaptive" | "full" | "pointer";
|
|
13
14
|
export interface PromptBudgets {
|
|
14
15
|
l0: number;
|
|
@@ -23,12 +24,42 @@ export interface PromptAssemblyInput {
|
|
|
23
24
|
mode?: InjectionMode;
|
|
24
25
|
budgets?: Partial<PromptBudgets>;
|
|
25
26
|
attempt?: number;
|
|
26
|
-
|
|
27
|
+
selfEvaluationBlock: string;
|
|
27
28
|
fullStateMarkdown?: string;
|
|
28
|
-
/** Previous Agent suggestion. Display-only; never part of canonical state. */
|
|
29
|
-
agentIntent?: string;
|
|
30
29
|
/** v2.9: Model's information needs for this prompt. L0: ignored. */
|
|
31
30
|
promptRequests?: PromptRequests;
|
|
31
|
+
/** v3.2: Previous round's L1 presentation (persisted diff baseline).
|
|
32
|
+
* When present, L1 collapses unchanged content against it. */
|
|
33
|
+
presentedBaseline?: PresentedStateSnapshot | null;
|
|
32
34
|
}
|
|
35
|
+
/** v3.2: The actionable instruction for a verification check. Exported for
|
|
36
|
+
* the coverage test (which imports the CHECK_* constants). */
|
|
37
|
+
export declare function verificationActionFor(check: string): string;
|
|
38
|
+
/** v3.2: Collapse only when at least this many items are unchanged — a tiny
|
|
39
|
+
* unchanged set renders in full (nothing worth saving). */
|
|
40
|
+
export declare const COLLAPSE_MIN_UNCHANGED = 3;
|
|
41
|
+
/** v3.2: Recent-rounds items kept in full when older ones collapse. */
|
|
42
|
+
export declare const KEEP_RECENT_ROUNDS = 3;
|
|
43
|
+
export interface ConstraintDiff {
|
|
44
|
+
/** Constraint texts to render in full (new or violated this round). */
|
|
45
|
+
changed: string[];
|
|
46
|
+
/** Same-ID items unchanged since the baseline. */
|
|
47
|
+
unchangedCount: number;
|
|
48
|
+
/** Baseline items absent now, excluding emphasized items (they were moved
|
|
49
|
+
* to Critical Context, not demoted). */
|
|
50
|
+
removedCount: number;
|
|
51
|
+
}
|
|
52
|
+
export declare function diffConstraints(baseline: PresentedStateSnapshot | null, activeTexts: string[], metadata: ConstraintMeta[], round: number, emphasized: Set<string>): ConstraintDiff;
|
|
53
|
+
export interface SubGoalDiff {
|
|
54
|
+
/** Sub-goals to render in full (new or status transition). */
|
|
55
|
+
changed: SubGoal[];
|
|
56
|
+
unchangedCount: number;
|
|
57
|
+
/** Baseline sub-goals no longer in the active set (done/canceled/blocked). */
|
|
58
|
+
removedCount: number;
|
|
59
|
+
}
|
|
60
|
+
export declare function diffSubGoals(baseline: PresentedStateSnapshot | null, activeSubs: SubGoal[]): SubGoalDiff;
|
|
61
|
+
/** v3.2: True when a milestone boundary was crossed since the baseline —
|
|
62
|
+
* the Recent Rounds section then renders in full (a phase ended). */
|
|
63
|
+
export declare function milestoneBoundaryChanged(baseline: PresentedStateSnapshot | null, milestones: MilestoneSummary[]): boolean;
|
|
33
64
|
export declare function assemblePromptArtifact(input: PromptAssemblyInput): PromptArtifact;
|
|
34
65
|
//# 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;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../src/prompt-assembler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAEvF,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAI5B,eAAO,MAAM,8BAA8B,EAAG,CAAU,CAAC;AACzD,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE5D,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,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,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;IAChC;mEAC+D;IAC/D,iBAAiB,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;CACnD;AAqFD;+DAC+D;AAC/D,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3D;AAmCD;4DAC4D;AAC5D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AASpC,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,cAAc,EAAE,MAAM,CAAC;IACvB;6CACyC;IACzC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GACtB,cAAc,CAyBhB;AAED,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,UAAU,EAAE,OAAO,EAAE,GACpB,WAAW,CAgBb;AAED;sEACsE;AACtE,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,sBAAsB,GAAG,IAAI,EACvC,UAAU,EAAE,gBAAgB,EAAE,GAC7B,OAAO,CAQT;AAkuBD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,mBAAmB,GAAG,cAAc,CAuNjF"}
|