loopforge 2.11.0 → 3.0.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/README.md +145 -128
- package/dist/canonical-event-writer.d.ts +20 -0
- package/dist/canonical-event-writer.d.ts.map +1 -0
- package/dist/canonical-event-writer.js +131 -0
- package/dist/canonical-event-writer.js.map +1 -0
- package/dist/canonical-state.d.ts +20 -16
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +170 -61
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +11 -10
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-governance.d.ts +48 -0
- package/dist/cognitive-governance.d.ts.map +1 -0
- package/dist/cognitive-governance.js +226 -0
- package/dist/cognitive-governance.js.map +1 -0
- package/dist/compiler-subgoals.d.ts +7 -0
- package/dist/compiler-subgoals.d.ts.map +1 -0
- package/dist/compiler-subgoals.js +93 -0
- package/dist/compiler-subgoals.js.map +1 -0
- package/dist/derive-id.d.ts +12 -0
- package/dist/derive-id.d.ts.map +1 -0
- package/dist/derive-id.js +31 -0
- package/dist/derive-id.js.map +1 -0
- package/dist/evidence-provider.d.ts +23 -21
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +34 -74
- package/dist/evidence-provider.js.map +1 -1
- package/dist/generate-schema.js +90 -2
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +22 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -16
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +1 -1
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +250 -337
- 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-store.d.ts +20 -58
- package/dist/loop-store.d.ts.map +1 -1
- package/dist/loop-store.js +232 -309
- package/dist/loop-store.js.map +1 -1
- package/dist/mcp/server.d.ts +3 -3
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +83 -13
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session-projection.d.ts +5 -0
- package/dist/mcp/session-projection.d.ts.map +1 -0
- package/dist/mcp/session-projection.js +18 -0
- package/dist/mcp/session-projection.js.map +1 -0
- package/dist/mcp/session-queue.d.ts +3 -0
- package/dist/mcp/session-queue.d.ts.map +1 -0
- package/dist/mcp/session-queue.js +18 -0
- package/dist/mcp/session-queue.js.map +1 -0
- package/dist/mcp/session-types.d.ts +72 -0
- package/dist/mcp/session-types.d.ts.map +1 -0
- package/dist/mcp/session-types.js +2 -0
- package/dist/mcp/session-types.js.map +1 -0
- package/dist/mcp/session.d.ts +49 -93
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +544 -245
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +26 -1
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +399 -274
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.d.ts +17 -1
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +164 -1
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +34 -18
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +113 -18
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +5 -3
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +126 -77
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +8 -1
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +26 -8
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +232 -192
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +15 -100
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts +11 -3
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +51 -14
- package/dist/replay.js.map +1 -1
- package/dist/round-commit-store.d.ts +12 -0
- package/dist/round-commit-store.d.ts.map +1 -0
- package/dist/round-commit-store.js +13 -0
- package/dist/round-commit-store.js.map +1 -0
- package/dist/round-coordinator.d.ts +25 -18
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +83 -71
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +14 -10
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +9 -13
- package/dist/round-driver.js.map +1 -1
- package/dist/round-gate.d.ts +31 -0
- package/dist/round-gate.d.ts.map +1 -0
- package/dist/round-gate.js +259 -0
- package/dist/round-gate.js.map +1 -0
- package/dist/round-recovery.d.ts +17 -0
- package/dist/round-recovery.d.ts.map +1 -0
- package/dist/round-recovery.js +117 -0
- package/dist/round-recovery.js.map +1 -0
- package/dist/round-report.d.ts +16 -0
- package/dist/round-report.d.ts.map +1 -0
- package/dist/round-report.js +401 -0
- package/dist/round-report.js.map +1 -0
- package/dist/round-transaction.d.ts +19 -12
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +102 -88
- package/dist/round-transaction.js.map +1 -1
- package/dist/runtime-services.d.ts +59 -0
- package/dist/runtime-services.d.ts.map +1 -0
- package/dist/runtime-services.js +460 -0
- package/dist/runtime-services.js.map +1 -0
- package/dist/storage.d.ts +3 -9
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +6 -17
- package/dist/storage.js.map +1 -1
- package/dist/token-utils.d.ts +9 -8
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +50 -10
- package/dist/token-utils.js.map +1 -1
- package/dist/vault-format.d.ts +4 -0
- package/dist/vault-format.d.ts.map +1 -0
- package/dist/vault-format.js +4 -0
- package/dist/vault-format.js.map +1 -0
- package/dist/vault-types.d.ts +24 -0
- package/dist/vault-types.d.ts.map +1 -0
- package/dist/vault-types.js +2 -0
- package/dist/vault-types.js.map +1 -0
- package/loop_policy.json +10 -12
- package/loopforge-policy.json +340 -0
- package/package.json +12 -6
- package/skills/perception/SKILL.md +199 -164
- package/dist/backends/interface.d.ts +0 -39
- package/dist/backends/interface.d.ts.map +0 -1
- package/dist/backends/interface.js +0 -6
- package/dist/backends/interface.js.map +0 -1
- package/dist/enforcement-gate.d.ts +0 -71
- package/dist/enforcement-gate.d.ts.map +0 -1
- package/dist/enforcement-gate.js +0 -744
- package/dist/enforcement-gate.js.map +0 -1
- package/dist/engine.d.ts +0 -59
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -596
- package/dist/engine.js.map +0 -1
- package/dist/self-eval.d.ts +0 -23
- package/dist/self-eval.d.ts.map +0 -1
- package/dist/self-eval.js +0 -181
- package/dist/self-eval.js.map +0 -1
- package/dist/verification-gate.d.ts +0 -56
- package/dist/verification-gate.d.ts.map +0 -1
- package/dist/verification-gate.js +0 -563
- package/dist/verification-gate.js.map +0 -1
package/dist/protocol.js
CHANGED
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
export var Mode;
|
|
10
10
|
(function (Mode) {
|
|
11
11
|
Mode["LOOP_COMPILE"] = "loop_compile";
|
|
12
|
-
Mode["FEEDBACK"] = "feedback";
|
|
13
12
|
})(Mode || (Mode = {}));
|
|
14
13
|
export var AgentStatus;
|
|
15
14
|
(function (AgentStatus) {
|
|
@@ -17,25 +16,6 @@ export var AgentStatus;
|
|
|
17
16
|
AgentStatus["ERROR"] = "error";
|
|
18
17
|
AgentStatus["STALLED"] = "stalled";
|
|
19
18
|
})(AgentStatus || (AgentStatus = {}));
|
|
20
|
-
export function makeExecutionFeedback(overrides = {}) {
|
|
21
|
-
return {
|
|
22
|
-
output: "",
|
|
23
|
-
success: false,
|
|
24
|
-
constraint_violations: [],
|
|
25
|
-
manual_fixes_needed: "",
|
|
26
|
-
...overrides,
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
export function makeExecutionEvidence(overrides = {}) {
|
|
30
|
-
return {
|
|
31
|
-
files_changed: [],
|
|
32
|
-
test_results: null,
|
|
33
|
-
success_criteria_met: [],
|
|
34
|
-
success_criteria_remaining: [],
|
|
35
|
-
progress_estimate: 0.0,
|
|
36
|
-
...overrides,
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
19
|
export function makeMilestoneSummary(overrides = {}) {
|
|
40
20
|
return {
|
|
41
21
|
label: "",
|
|
@@ -49,34 +29,6 @@ export function makeMilestoneSummary(overrides = {}) {
|
|
|
49
29
|
...overrides,
|
|
50
30
|
};
|
|
51
31
|
}
|
|
52
|
-
export function makeSelfEvaluation(overrides = {}) {
|
|
53
|
-
return {
|
|
54
|
-
success: false,
|
|
55
|
-
output_summary: "",
|
|
56
|
-
constraint_violations: [],
|
|
57
|
-
should_continue: true,
|
|
58
|
-
discovered_constraints: [],
|
|
59
|
-
objective_refinement: "",
|
|
60
|
-
emerged_subtasks: [],
|
|
61
|
-
execution_evidence: undefined,
|
|
62
|
-
retracted_constraints: [],
|
|
63
|
-
revised_success_criteria: [],
|
|
64
|
-
wrong_assumptions: [],
|
|
65
|
-
worker_results: [],
|
|
66
|
-
compression_checkpoint: false,
|
|
67
|
-
checkpoint_label: "",
|
|
68
|
-
next_action: undefined,
|
|
69
|
-
completed_subtasks: [],
|
|
70
|
-
blocked_subtasks: [],
|
|
71
|
-
canceled_subtasks: [],
|
|
72
|
-
stop_reason: undefined,
|
|
73
|
-
drift_clarification: undefined,
|
|
74
|
-
prompt_requests: undefined,
|
|
75
|
-
...overrides,
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
/** Regex to extract a self-evaluation JSON block from agent output. */
|
|
79
|
-
export const SELF_EVAL_REGEX = /---loopforge-eval\s*([\s\S]*?)\s*---end-loopforge-eval/;
|
|
80
32
|
export function makeLoopObjective(overrides = {}) {
|
|
81
33
|
return {
|
|
82
34
|
objective: "",
|
|
@@ -143,32 +95,6 @@ export function makeTaskAlignment(overrides = {}) {
|
|
|
143
95
|
...overrides,
|
|
144
96
|
};
|
|
145
97
|
}
|
|
146
|
-
export function makeLoopRoundResult(overrides = {}) {
|
|
147
|
-
return {
|
|
148
|
-
round: 0,
|
|
149
|
-
success: false,
|
|
150
|
-
output_summary: "",
|
|
151
|
-
constraint_violations: [],
|
|
152
|
-
manual_fixes_needed: "",
|
|
153
|
-
discovered_constraints: [],
|
|
154
|
-
objective_refinement: "",
|
|
155
|
-
emerged_subtasks: [],
|
|
156
|
-
execution_evidence: undefined,
|
|
157
|
-
retracted_constraints: [],
|
|
158
|
-
revised_success_criteria: [],
|
|
159
|
-
wrong_assumptions: [],
|
|
160
|
-
worker_results: [],
|
|
161
|
-
compression_checkpoint: false,
|
|
162
|
-
checkpoint_label: "",
|
|
163
|
-
next_action: undefined,
|
|
164
|
-
completed_subtasks: [],
|
|
165
|
-
blocked_subtasks: [],
|
|
166
|
-
canceled_subtasks: [],
|
|
167
|
-
drift_clarification: undefined,
|
|
168
|
-
prompt_requests: undefined,
|
|
169
|
-
...overrides,
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
98
|
export function makeLoopCompileRequest(overrides = {}) {
|
|
173
99
|
return {
|
|
174
100
|
mode: Mode.LOOP_COMPILE,
|
|
@@ -182,7 +108,7 @@ export function makeLoopCompileRequest(overrides = {}) {
|
|
|
182
108
|
plan_source: null,
|
|
183
109
|
constraints_from_plan: [],
|
|
184
110
|
new_since_last_round: "",
|
|
185
|
-
|
|
111
|
+
last_round_view: null,
|
|
186
112
|
force_level: "auto",
|
|
187
113
|
health_check_interval: 1,
|
|
188
114
|
external_context: "",
|
|
@@ -215,12 +141,24 @@ export function makeLoopCompileResponse(overrides = {}) {
|
|
|
215
141
|
constraint_metadata: [],
|
|
216
142
|
agent_trust_score: undefined,
|
|
217
143
|
agent_trust_trend: [],
|
|
218
|
-
|
|
144
|
+
projection: makeLoopCompileProjection(),
|
|
219
145
|
plan_source: null,
|
|
220
146
|
warnings: [],
|
|
221
147
|
error: "",
|
|
222
148
|
state_file_content: undefined,
|
|
223
149
|
prompt_artifact: undefined,
|
|
150
|
+
canonical_state: undefined,
|
|
151
|
+
...overrides,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
export function makeLoopCompileProjection(overrides = {}) {
|
|
155
|
+
return {
|
|
156
|
+
suggestedNextAction: "",
|
|
157
|
+
verifiedFacts: [],
|
|
158
|
+
verifiedEvidenceRefs: [],
|
|
159
|
+
regressionObligations: [],
|
|
160
|
+
discoveredFacts: [],
|
|
161
|
+
activeBlockers: [],
|
|
224
162
|
...overrides,
|
|
225
163
|
};
|
|
226
164
|
}
|
|
@@ -230,10 +168,6 @@ export function makeEvidenceSnapshot(overrides = {}) {
|
|
|
230
168
|
export function makeSessionState(taskId) {
|
|
231
169
|
return {
|
|
232
170
|
task_id: taskId,
|
|
233
|
-
call_count: 0,
|
|
234
|
-
success_trend: [],
|
|
235
|
-
current_version: "v1",
|
|
236
|
-
feedback_buffer: [],
|
|
237
171
|
};
|
|
238
172
|
}
|
|
239
173
|
export function makeEnforcementResult(overrides = {}) {
|
|
@@ -243,6 +177,7 @@ export function makeEnforcementResult(overrides = {}) {
|
|
|
243
177
|
fix_instructions: "",
|
|
244
178
|
check: "",
|
|
245
179
|
clarification_accepted: false,
|
|
180
|
+
escalation_issued: false,
|
|
246
181
|
...overrides,
|
|
247
182
|
};
|
|
248
183
|
}
|
|
@@ -262,26 +197,6 @@ export function makeVerificationResult(overrides = {}) {
|
|
|
262
197
|
...overrides,
|
|
263
198
|
};
|
|
264
199
|
}
|
|
265
|
-
// ── Serialisation helpers ───────────────────────────────────────────────────
|
|
266
|
-
function toDict(obj) {
|
|
267
|
-
const result = {};
|
|
268
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
269
|
-
if (value === null || value === undefined)
|
|
270
|
-
continue;
|
|
271
|
-
if (typeof value === "object" && !Array.isArray(value)) {
|
|
272
|
-
result[key] = toDict(value);
|
|
273
|
-
}
|
|
274
|
-
else if (Array.isArray(value)) {
|
|
275
|
-
result[key] = value.map((v) => typeof v === "object" && v !== null && !Array.isArray(v)
|
|
276
|
-
? toDict(v)
|
|
277
|
-
: v);
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
result[key] = value;
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
return result;
|
|
284
|
-
}
|
|
285
200
|
// ── Factory helpers ─────────────────────────────────────────────────────────
|
|
286
201
|
export function makeTaskId(taskDescription) {
|
|
287
202
|
let slug = taskDescription.toLowerCase().trim().slice(0, 60);
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,8EAA8E;AAE9E,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/dist/replay.d.ts
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
/** ReplayBackend — time-travel queries over vault lineage.
|
|
2
2
|
*
|
|
3
|
-
* Depends on
|
|
3
|
+
* Depends on LoopStore — no direct filesystem access.
|
|
4
4
|
* Enables audit, comparison, and timeline analysis of loop rounds.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { VaultEntry } from "./vault-types.js";
|
|
7
|
+
import type { LoopStore } from "./loop-store.js";
|
|
7
8
|
export declare class ReplayBackend {
|
|
8
9
|
private readonly backend;
|
|
9
|
-
constructor(backend:
|
|
10
|
+
constructor(backend: LoopStore);
|
|
10
11
|
getRound(loopId: string, roundNum: number): VaultEntry | null;
|
|
11
12
|
replay(loopId: string, opts?: {
|
|
12
13
|
start?: number;
|
|
13
14
|
end?: number;
|
|
14
15
|
}): VaultEntry[];
|
|
16
|
+
/** Return the complete canonical event stream for a loop.
|
|
17
|
+
*
|
|
18
|
+
* Unlike the legacy round summary below, this view preserves every event
|
|
19
|
+
* (round events, gates, retries and lineage) and its event_sequence so callers
|
|
20
|
+
* can paginate and replay the durable source of truth deterministically.
|
|
21
|
+
*/
|
|
22
|
+
eventTimeline(loopId: string): Record<string, unknown>[];
|
|
15
23
|
timeline(loopId: string): Record<string, unknown>[];
|
|
16
24
|
private maxRound;
|
|
17
25
|
}
|
package/dist/replay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAMjD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;gBAExB,OAAO,EAAE,SAAS;IAM9B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAgC7D,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,UAAU,EAAE;IAkBf;;;;;OAKG;IACH,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IA+BxD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAqBnD,OAAO,CAAC,QAAQ;CAcjB"}
|
package/dist/replay.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/** ReplayBackend — time-travel queries over vault lineage.
|
|
2
2
|
*
|
|
3
|
-
* Depends on
|
|
3
|
+
* Depends on LoopStore — no direct filesystem access.
|
|
4
4
|
* Enables audit, comparison, and timeline analysis of loop rounds.
|
|
5
5
|
*/
|
|
6
6
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -14,22 +14,20 @@ export class ReplayBackend {
|
|
|
14
14
|
// ── Single-round lookup ────────────────────────────────────────────────
|
|
15
15
|
getRound(loopId, roundNum) {
|
|
16
16
|
const prefix = `loop:${loopId}:r${roundNum}`;
|
|
17
|
-
const entries = this.backend.
|
|
18
|
-
|
|
17
|
+
const entries = this.backend.queryLoopEvents(loopId)
|
|
18
|
+
.filter((entry) => String(entry.task_id ?? "").startsWith(prefix));
|
|
19
|
+
const lineageEntries = entries.filter((e) => !String(e.task_id ?? "").endsWith(":event"));
|
|
19
20
|
if (!lineageEntries.length)
|
|
20
21
|
return null;
|
|
21
22
|
const entry = { ...lineageEntries[0] };
|
|
22
|
-
// Merge
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const fbSuccess = fbEntries[0].success;
|
|
29
|
-
if (fbSuccess !== undefined) {
|
|
30
|
-
entry.success = fbSuccess;
|
|
23
|
+
// Merge round-event success flag
|
|
24
|
+
const roundEvents = entries.filter((entry) => String(entry.task_id ?? "").endsWith(":event"));
|
|
25
|
+
if (roundEvents.length) {
|
|
26
|
+
const eventSuccess = roundEvents[0].success;
|
|
27
|
+
if (eventSuccess !== undefined) {
|
|
28
|
+
entry.success = eventSuccess;
|
|
31
29
|
const lineage = (entry.loop_lineage ?? {});
|
|
32
|
-
lineage.success =
|
|
30
|
+
lineage.success = eventSuccess;
|
|
33
31
|
entry.loop_lineage = lineage;
|
|
34
32
|
}
|
|
35
33
|
}
|
|
@@ -53,6 +51,44 @@ export class ReplayBackend {
|
|
|
53
51
|
return results;
|
|
54
52
|
}
|
|
55
53
|
// ── Timeline ──────────────────────────────────────────────────────────
|
|
54
|
+
/** Return the complete canonical event stream for a loop.
|
|
55
|
+
*
|
|
56
|
+
* Unlike the legacy round summary below, this view preserves every event
|
|
57
|
+
* (round events, gates, retries and lineage) and its event_sequence so callers
|
|
58
|
+
* can paginate and replay the durable source of truth deterministically.
|
|
59
|
+
*/
|
|
60
|
+
eventTimeline(loopId) {
|
|
61
|
+
const entries = this.backend.queryLoopEvents(loopId);
|
|
62
|
+
const seen = new Set();
|
|
63
|
+
return entries
|
|
64
|
+
.filter((entry) => {
|
|
65
|
+
const key = `${entry.task_id ?? entry.id ?? ""}:${entry.event_sequence ?? ""}`;
|
|
66
|
+
if (seen.has(key))
|
|
67
|
+
return false;
|
|
68
|
+
seen.add(key);
|
|
69
|
+
const taskId = String(entry.task_id ?? "");
|
|
70
|
+
return entry.loop_id === loopId ||
|
|
71
|
+
(entry.loop_id === undefined &&
|
|
72
|
+
(taskId === `loop:${loopId}` || taskId.startsWith(`loop:${loopId}:`)));
|
|
73
|
+
})
|
|
74
|
+
.sort((left, right) => {
|
|
75
|
+
const leftSequence = left.event_sequence;
|
|
76
|
+
const rightSequence = right.event_sequence;
|
|
77
|
+
if (typeof leftSequence === "number" && typeof rightSequence === "number" && leftSequence !== rightSequence) {
|
|
78
|
+
return leftSequence - rightSequence;
|
|
79
|
+
}
|
|
80
|
+
const leftRound = typeof left.loop_lineage?.round === "number" ? left.loop_lineage.round : 0;
|
|
81
|
+
const rightRound = typeof right.loop_lineage?.round === "number" ? right.loop_lineage.round : 0;
|
|
82
|
+
if (leftRound !== rightRound)
|
|
83
|
+
return leftRound - rightRound;
|
|
84
|
+
return String(left.task_id ?? left.id ?? "").localeCompare(String(right.task_id ?? right.id ?? ""));
|
|
85
|
+
})
|
|
86
|
+
.map((entry) => ({
|
|
87
|
+
...entry,
|
|
88
|
+
round: typeof entry.loop_lineage?.round === "number" ? entry.loop_lineage.round : 0,
|
|
89
|
+
eventType: entry.task_type ?? "event",
|
|
90
|
+
}));
|
|
91
|
+
}
|
|
56
92
|
timeline(loopId) {
|
|
57
93
|
const entries = this.replay(loopId);
|
|
58
94
|
const timeline = [];
|
|
@@ -72,7 +108,8 @@ export class ReplayBackend {
|
|
|
72
108
|
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
73
109
|
maxRound(loopId) {
|
|
74
110
|
const prefix = `loop:${loopId}:r`;
|
|
75
|
-
const entries = this.backend.
|
|
111
|
+
const entries = this.backend.queryLoopEvents(loopId)
|
|
112
|
+
.filter((entry) => String(entry.task_id ?? "").startsWith(prefix));
|
|
76
113
|
let maxR = 0;
|
|
77
114
|
for (const e of entries) {
|
|
78
115
|
const lineage = (e.loop_lineage ?? {});
|
package/dist/replay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { VaultEntry } from "./vault-types.js";
|
|
2
|
+
import type { LoopStore } from "./loop-store.js";
|
|
3
|
+
export interface RoundCommitStore {
|
|
4
|
+
find(loopId: string, round: number): VaultEntry[];
|
|
5
|
+
}
|
|
6
|
+
/** Backend-specific lookup kept outside storage/session orchestration. */
|
|
7
|
+
export declare class VaultRoundCommitStore implements RoundCommitStore {
|
|
8
|
+
private readonly backend;
|
|
9
|
+
constructor(backend: LoopStore);
|
|
10
|
+
find(loopId: string, round: number): VaultEntry[];
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=round-commit-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-commit-store.d.ts","sourceRoot":"","sources":["../src/round-commit-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;CACnD;AAED,0EAA0E;AAC1E,qBAAa,qBAAsB,YAAW,gBAAgB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,SAAS;IAE/C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;CAKlD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Backend-specific lookup kept outside storage/session orchestration. */
|
|
2
|
+
export class VaultRoundCommitStore {
|
|
3
|
+
backend;
|
|
4
|
+
constructor(backend) {
|
|
5
|
+
this.backend = backend;
|
|
6
|
+
}
|
|
7
|
+
find(loopId, round) {
|
|
8
|
+
const prefix = `loop:${loopId}:r${round}:event`;
|
|
9
|
+
return this.backend.queryLoopEvents(loopId)
|
|
10
|
+
.filter((entry) => entry.task_id === prefix);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=round-commit-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-commit-store.js","sourceRoot":"","sources":["../src/round-commit-store.ts"],"names":[],"mappings":"AAOA,0EAA0E;AAC1E,MAAM,OAAO,qBAAqB;IACH;IAA7B,YAA6B,OAAkB;QAAlB,YAAO,GAAP,OAAO,CAAW;IAAG,CAAC;IAEnD,IAAI,CAAC,MAAc,EAAE,KAAa;QAChC,MAAM,MAAM,GAAG,QAAQ,MAAM,KAAK,KAAK,QAAQ,CAAC;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC;aACxC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,CAAC;IACjD,CAAC;CACF"}
|
|
@@ -5,10 +5,8 @@
|
|
|
5
5
|
*
|
|
6
6
|
* verify → enforce → stop decision
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* paths (e.g. git verification only wired into one side) was a known
|
|
11
|
-
* risk. The RoundCoordinator is the single source of truth.
|
|
8
|
+
* The RoundCoordinator is the single source of truth for this pipeline;
|
|
9
|
+
* transport adapters only prepare input and route the resulting decision.
|
|
12
10
|
*
|
|
13
11
|
* State transitions:
|
|
14
12
|
* RoundStarted → EvidenceCaptured → EvaluationSubmitted
|
|
@@ -17,21 +15,19 @@
|
|
|
17
15
|
* Persistence is owned by round-transaction.ts so reject paths remain
|
|
18
16
|
* side-effect free and accepted decisions can be replayed idempotently.
|
|
19
17
|
*/
|
|
20
|
-
import type {
|
|
18
|
+
import type { LoopStore } from "./loop-store.js";
|
|
21
19
|
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
22
|
-
import type {
|
|
20
|
+
import type { CompilerRoundProjection, RoundReport, StopReason, VerificationFlag } from "./protocol.js";
|
|
23
21
|
/** Input to a single round processing step. */
|
|
24
22
|
export interface RoundProcessInput {
|
|
25
23
|
loopId: string;
|
|
26
24
|
task: string;
|
|
27
25
|
currentRound: number;
|
|
28
26
|
maxRounds: number;
|
|
29
|
-
/** The
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
|
|
33
|
-
/** The previous round's validated SelfEvaluation (null for round 1). */
|
|
34
|
-
lastSelfEval?: SelfEvaluation;
|
|
27
|
+
/** The normalized Agent report for this round. */
|
|
28
|
+
roundReport: RoundReport;
|
|
29
|
+
/** Previous accepted compiler projection (null for round 1). */
|
|
30
|
+
previousProjection?: CompilerRoundProjection;
|
|
35
31
|
/** How many consecutive rounds have been rejected by enforcement. */
|
|
36
32
|
consecutiveRejections: number;
|
|
37
33
|
/** v1.18: Evidence snapshots from configured providers. */
|
|
@@ -41,6 +37,15 @@ export interface RoundProcessInput {
|
|
|
41
37
|
/** v2.13: Files from skipped backtrack rounds. Passed to verification
|
|
42
38
|
* gate for post-backtrack workspace restore check. */
|
|
43
39
|
backtrackSkippedFiles?: string[];
|
|
40
|
+
/** v2.13: Git HEAD of the active backtrack restore point. Passed to the
|
|
41
|
+
* verification gate; the post-backtrack round must match it. */
|
|
42
|
+
backtrackTargetGitHead?: string;
|
|
43
|
+
/** Runtime-derived action from the prompt being completed. */
|
|
44
|
+
expectedAction?: string;
|
|
45
|
+
/** Terminal enforcement checks that already consumed their guided retry. */
|
|
46
|
+
escalatedRejectionChecks?: string[];
|
|
47
|
+
/** Criteria still open when the report was compiled. */
|
|
48
|
+
remainingCriteria?: string[];
|
|
44
49
|
}
|
|
45
50
|
/** Result of processing a round through the coordinator. */
|
|
46
51
|
export interface RoundProcessResult {
|
|
@@ -64,7 +69,7 @@ export interface RoundProcessResult {
|
|
|
64
69
|
enforcementAction?: "accept" | "reject" | "terminate" | "backtrack";
|
|
65
70
|
/** Enforcement reason (set when rejected or terminated). */
|
|
66
71
|
enforcementReason?: string;
|
|
67
|
-
/** Whether this round was successful
|
|
72
|
+
/** Whether this round was successful according to the canonical report. */
|
|
68
73
|
roundSuccess: boolean;
|
|
69
74
|
/** Whether the verification gate returned "contradicted". */
|
|
70
75
|
gateContradicted: boolean;
|
|
@@ -73,15 +78,17 @@ export interface RoundProcessResult {
|
|
|
73
78
|
/** Which enforcement check fired (set when action is "reject" or "terminate").
|
|
74
79
|
* Used by callers to track per-rule rejection counters. */
|
|
75
80
|
rejectionCheck?: string;
|
|
76
|
-
/** The
|
|
81
|
+
/** The compiler view to store as lastRoundView for the next round
|
|
77
82
|
* (undefined when action is "reject" — caller should NOT update). */
|
|
78
|
-
|
|
83
|
+
newRoundProjection?: CompilerRoundProjection;
|
|
79
84
|
/** Whether the caller should push roundSuccess onto the success trajectory.
|
|
80
85
|
* false when gateContradicted or when action is "reject". */
|
|
81
86
|
shouldPushSuccessTrajectory: boolean;
|
|
82
87
|
/** v2.12: True when this round's intent_drift was waived via substantive
|
|
83
88
|
* drift_clarification. The caller uses this to track clarification streaks. */
|
|
84
89
|
clarificationAccepted?: boolean;
|
|
90
|
+
/** True when a terminal enforcement rule was converted into one final reject. */
|
|
91
|
+
escalationIssued?: boolean;
|
|
85
92
|
/** v2.13: Git HEAD commit hash of the backtrack target round.
|
|
86
93
|
* Set when action is "backtrack". The verification gate uses this
|
|
87
94
|
* to check that the agent restored the workspace before working. */
|
|
@@ -93,8 +100,8 @@ export interface RoundProcessResult {
|
|
|
93
100
|
}
|
|
94
101
|
export declare class RoundCoordinator {
|
|
95
102
|
private backend;
|
|
96
|
-
constructor(backend?:
|
|
97
|
-
/** Process a single round's
|
|
103
|
+
constructor(backend?: LoopStore);
|
|
104
|
+
/** Process a single round's round report through the decision pipeline:
|
|
98
105
|
* verify → enforce → stop decision.
|
|
99
106
|
*
|
|
100
107
|
* This is the single entry point called by SessionManager.
|
|
@@ -102,7 +109,7 @@ export declare class RoundCoordinator {
|
|
|
102
109
|
* - Compiling the next prompt (if action is "continue")
|
|
103
110
|
* - Managing heartbeat / signal handlers (runtime only)
|
|
104
111
|
* - Memory injection (both paths, before calling processRound)
|
|
105
|
-
* - Transactional
|
|
112
|
+
* - Transactional round-event commit (accepted rounds only)
|
|
106
113
|
* - State file I/O (both paths, after compiling)
|
|
107
114
|
*
|
|
108
115
|
* @param driftClarificationStreak v2.12: Current clarification streak
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-coordinator.d.ts","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"round-coordinator.d.ts","sourceRoot":"","sources":["../src/round-coordinator.ts"],"names":[],"mappings":"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"}
|