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
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/** LoopForge runtime services — stateless compiler, round-event and metrics boundary.
|
|
2
|
+
*
|
|
3
|
+
* The public execution path owns session and transaction state; this service
|
|
4
|
+
* provides the pure compile and round-event operations used by that path.
|
|
5
|
+
* invokeLoopCompile is the primary operation. RuntimeMetrics tracks
|
|
6
|
+
* silent-failure counters for observability.
|
|
7
|
+
*/
|
|
8
|
+
import { randomUUID } from "node:crypto";
|
|
9
|
+
import { getPolicy } from "./policy.js";
|
|
10
|
+
import { FileLoopStore } from "./loop-store.js";
|
|
11
|
+
import { AgentStatus, Mode, makeLoopCompileRequest, makeLoopObjective, makeSessionState, makeTaskId, } from "./protocol.js";
|
|
12
|
+
import { compileLoop } from "./loop-compiler.js";
|
|
13
|
+
import { logEvent } from "./observability.js";
|
|
14
|
+
import { policyMetrics } from "./policy-metrics.js";
|
|
15
|
+
import { parseLoopExtras } from "./loop-extras-parser.js";
|
|
16
|
+
import { CanonicalEventWriter } from "./canonical-event-writer.js";
|
|
17
|
+
import { parseRoundReport, } from "./round-report.js";
|
|
18
|
+
function makeRuntimeMetrics() {
|
|
19
|
+
return {
|
|
20
|
+
vaultWriteErrors: 0,
|
|
21
|
+
sessionStart: Date.now(),
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
25
|
+
// RuntimeServices
|
|
26
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
27
|
+
export class RuntimeServices {
|
|
28
|
+
state = null;
|
|
29
|
+
backend = null;
|
|
30
|
+
metrics = null;
|
|
31
|
+
eventWriter = null;
|
|
32
|
+
lastTask = null;
|
|
33
|
+
constructor(store) {
|
|
34
|
+
if (store)
|
|
35
|
+
this.backend = store;
|
|
36
|
+
}
|
|
37
|
+
resolveBackend() {
|
|
38
|
+
if (this.backend === null) {
|
|
39
|
+
this.backend = new FileLoopStore(getPolicy().backend.root_dir);
|
|
40
|
+
}
|
|
41
|
+
return this.backend;
|
|
42
|
+
}
|
|
43
|
+
/** Public accessor for the vault backend — used by runtime/verification gate. */
|
|
44
|
+
getBackend() {
|
|
45
|
+
return this.resolveBackend();
|
|
46
|
+
}
|
|
47
|
+
writer() {
|
|
48
|
+
return this.eventWriter ??= new CanonicalEventWriter(this.resolveBackend());
|
|
49
|
+
}
|
|
50
|
+
/** Expose runtime health counters for observability (MCP status, logging). */
|
|
51
|
+
getMetrics() {
|
|
52
|
+
if (this.metrics === null) {
|
|
53
|
+
this.metrics = makeRuntimeMetrics();
|
|
54
|
+
}
|
|
55
|
+
return this.metrics;
|
|
56
|
+
}
|
|
57
|
+
ensureInit(request) {
|
|
58
|
+
if (this.state === null) {
|
|
59
|
+
this.state = makeSessionState(request.task_id || makeTaskId(request.task));
|
|
60
|
+
}
|
|
61
|
+
if (this.metrics === null) {
|
|
62
|
+
this.metrics = makeRuntimeMetrics();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
66
|
+
// Canonical round-event persistence
|
|
67
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
68
|
+
persistRoundEvent(signal) {
|
|
69
|
+
if (this.metrics === null) {
|
|
70
|
+
this.metrics = makeRuntimeMetrics();
|
|
71
|
+
}
|
|
72
|
+
// Round events are committed synchronously by the canonical writer.
|
|
73
|
+
const entry = this.buildRoundEventEntry(signal);
|
|
74
|
+
if (!entry) {
|
|
75
|
+
throw new Error("Cannot persist a round event without a valid canonical RoundReport");
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
this.writer().append(entry);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (this.metrics)
|
|
82
|
+
this.metrics.vaultWriteErrors++;
|
|
83
|
+
logEvent("vault_write_error", { error: "round_event_persist" });
|
|
84
|
+
logEvent("persist_failure", { operation: "round_event" });
|
|
85
|
+
policyMetrics.recordVaultWriteError("round_event_persist");
|
|
86
|
+
throw new Error(`Round event persistence failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
buildRoundEventEntry(signal) {
|
|
90
|
+
try {
|
|
91
|
+
const canonicalReport = parseRoundReport(signal.round_report);
|
|
92
|
+
if (!canonicalReport)
|
|
93
|
+
return null;
|
|
94
|
+
return {
|
|
95
|
+
id: randomUUID(),
|
|
96
|
+
task_id: signal.task_id ?? "round-event",
|
|
97
|
+
format: "loopforge.event",
|
|
98
|
+
is_active: true,
|
|
99
|
+
timestamp: new Date().toISOString().replace(/\.\d+Z$/, ""),
|
|
100
|
+
user_intent: `round event ${String(signal.round ?? "")}`.trim(),
|
|
101
|
+
task_type: "round_event",
|
|
102
|
+
success: signal.success === true,
|
|
103
|
+
loop_id: signal.loop_id,
|
|
104
|
+
loop_lineage: signal.loop_lineage ?? {},
|
|
105
|
+
round_report: canonicalReport,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
if (this.metrics)
|
|
110
|
+
this.metrics.vaultWriteErrors++;
|
|
111
|
+
logEvent("vault_write_error", { error: "round_event_build" });
|
|
112
|
+
logEvent("persist_failure", { operation: "round_event_build" });
|
|
113
|
+
throw new Error(`Round event construction failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
117
|
+
// Lineage persistence
|
|
118
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
119
|
+
persistLoopLineage(response, request) {
|
|
120
|
+
if (this.metrics === null)
|
|
121
|
+
this.metrics = makeRuntimeMetrics();
|
|
122
|
+
const loopObjDict = response.loop_objective
|
|
123
|
+
? response.loop_objective
|
|
124
|
+
: null;
|
|
125
|
+
const structuredLineage = {
|
|
126
|
+
loop_id: response.loop_id,
|
|
127
|
+
round: response.round,
|
|
128
|
+
goal_id: response.goal_id,
|
|
129
|
+
goal_text_hash: response.goal_text_hash,
|
|
130
|
+
recompile_level: response.recompile_level,
|
|
131
|
+
constraints_active: response.constraints_active,
|
|
132
|
+
task: request.task,
|
|
133
|
+
};
|
|
134
|
+
const entry = {
|
|
135
|
+
id: randomUUID(),
|
|
136
|
+
task_id: `loop:${response.loop_id}:r${response.round}`,
|
|
137
|
+
format: "loopforge.event",
|
|
138
|
+
is_active: true,
|
|
139
|
+
timestamp: new Date().toISOString().replace(/\.\d+Z$/, ""),
|
|
140
|
+
user_intent: `loop_compile round ${response.round} — ${response.goal_id}`,
|
|
141
|
+
task_type: "loop_lineage",
|
|
142
|
+
loop_id: response.loop_id,
|
|
143
|
+
loop_lineage: structuredLineage,
|
|
144
|
+
loop_objective: loopObjDict,
|
|
145
|
+
task: request.task,
|
|
146
|
+
tags: [response.loop_id, response.recompile_level, response.goal_id],
|
|
147
|
+
};
|
|
148
|
+
// 1. JSON vault write (primary)
|
|
149
|
+
let vaultOk = false;
|
|
150
|
+
try {
|
|
151
|
+
this.writer().append(entry);
|
|
152
|
+
vaultOk = true;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (this.metrics)
|
|
156
|
+
this.metrics.vaultWriteErrors++;
|
|
157
|
+
logEvent("vault_write_error", { error: "persist_lineage_json" });
|
|
158
|
+
logEvent("persist_failure", { operation: "lineage" });
|
|
159
|
+
policyMetrics.recordVaultWriteError("lineage_persist");
|
|
160
|
+
throw new Error(`Loop lineage persistence failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
161
|
+
}
|
|
162
|
+
return vaultOk;
|
|
163
|
+
}
|
|
164
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
165
|
+
// Delegation journal (v1.9 — AgentTool mode)
|
|
166
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
167
|
+
/** Record sub-agent delegations for this round into the vault.
|
|
168
|
+
* Written as a lightweight journal entry so the main agent's rolling
|
|
169
|
+
* summary can reference delegation history in subsequent rounds. */
|
|
170
|
+
recordDelegation(loopId, round, entries) {
|
|
171
|
+
if (!entries.length)
|
|
172
|
+
return;
|
|
173
|
+
const taskId = `loop:${loopId}:r${round}:delegations`;
|
|
174
|
+
const existing = this.resolveBackend().queryLoopEvents(loopId)
|
|
175
|
+
.some((candidate) => candidate.task_id === taskId);
|
|
176
|
+
if (existing)
|
|
177
|
+
return;
|
|
178
|
+
const entry = {
|
|
179
|
+
id: randomUUID(),
|
|
180
|
+
task_id: taskId,
|
|
181
|
+
format: "loopforge.event",
|
|
182
|
+
is_active: true,
|
|
183
|
+
timestamp: new Date().toISOString().replace(/\.\d+Z$/, ""),
|
|
184
|
+
user_intent: `Delegation journal — round ${round}`,
|
|
185
|
+
task_type: "delegation_journal",
|
|
186
|
+
loop_id: loopId,
|
|
187
|
+
loop_lineage: {
|
|
188
|
+
round,
|
|
189
|
+
delegations: entries.map((e) => ({
|
|
190
|
+
index: e.index,
|
|
191
|
+
agentId: e.agentId,
|
|
192
|
+
subAgentType: e.subAgentType,
|
|
193
|
+
subTask: e.subTask,
|
|
194
|
+
resultSummary: e.resultSummary,
|
|
195
|
+
success: e.success,
|
|
196
|
+
discoveredConstraints: e.discoveredConstraints,
|
|
197
|
+
})),
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
try {
|
|
201
|
+
this.writer().append(entry);
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
if (this.metrics)
|
|
205
|
+
this.metrics.vaultWriteErrors++;
|
|
206
|
+
logEvent("vault_write_error", { error: "record_delegation" });
|
|
207
|
+
logEvent("persist_failure", { operation: "delegation" });
|
|
208
|
+
policyMetrics.recordVaultWriteError("delegation_persist");
|
|
209
|
+
throw new Error(`Failed to persist delegation journal for ${loopId} round ${round}`, { cause: error instanceof Error ? error : undefined });
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
213
|
+
// Hydrate loop context from vault
|
|
214
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
215
|
+
hydrateLoopContext(loopId) {
|
|
216
|
+
const prefix = `loop:${loopId}:r`;
|
|
217
|
+
// Hydration builds an ephemeral event projection. Clone entries
|
|
218
|
+
// before merging round events so a read can never mutate the Vault backend.
|
|
219
|
+
const loopEntries = this.resolveBackend().queryLoopEvents(loopId);
|
|
220
|
+
const results = [
|
|
221
|
+
...loopEntries.filter((entry) => String(entry.task_id ?? "").startsWith(prefix)),
|
|
222
|
+
// Gate decisions are loop facts too; include them so the compiler can
|
|
223
|
+
// rebuild the active gate after a user decision across restarts.
|
|
224
|
+
...loopEntries.filter((entry) => String(entry.task_id ?? "").startsWith(`loop:${loopId}:gate`)),
|
|
225
|
+
].map((entry) => ({
|
|
226
|
+
...entry,
|
|
227
|
+
loop_lineage: entry.loop_lineage ? { ...entry.loop_lineage } : undefined,
|
|
228
|
+
}));
|
|
229
|
+
// Merge round-event success flags into lineage entries
|
|
230
|
+
const roundEvents = loopEntries.filter((entry) => String(entry.task_id ?? "").startsWith(prefix) &&
|
|
231
|
+
String(entry.task_id ?? "").endsWith(":event"));
|
|
232
|
+
const eventSuccess = new Map();
|
|
233
|
+
const eventByRound = new Map();
|
|
234
|
+
for (const event of roundEvents) {
|
|
235
|
+
const tid = String(event.task_id ?? "");
|
|
236
|
+
// task_id is `loop:<loopId>:r<round>:event`. loopId may itself contain
|
|
237
|
+
// ":r" (validateLoopId permits colons), so a naive split(":r") would
|
|
238
|
+
// misparse. Greedy (.+) backtracks to the LAST `:r<digits>` segment,
|
|
239
|
+
// which is always the real round number.
|
|
240
|
+
const match = tid.match(/^loop:(.+):r(\d+)(?::.+)?$/);
|
|
241
|
+
if (match) {
|
|
242
|
+
const eventRound = parseInt(match[2], 10);
|
|
243
|
+
if (!Number.isNaN(eventRound) && event.success !== undefined) {
|
|
244
|
+
eventSuccess.set(eventRound, event.success);
|
|
245
|
+
eventByRound.set(eventRound, event);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
for (const entry of results) {
|
|
250
|
+
const lineage = (entry.loop_lineage ?? {});
|
|
251
|
+
const rnd = lineage.round;
|
|
252
|
+
if (rnd && eventSuccess.has(rnd)) {
|
|
253
|
+
lineage.success = eventSuccess.get(rnd);
|
|
254
|
+
entry.success = eventSuccess.get(rnd);
|
|
255
|
+
const event = eventByRound.get(rnd);
|
|
256
|
+
if (event?.round_report) {
|
|
257
|
+
const report = parseRoundReport(event.round_report);
|
|
258
|
+
if (report)
|
|
259
|
+
entry.round_report = report;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
const finalResults = results;
|
|
264
|
+
for (const entry of finalResults) {
|
|
265
|
+
const lineage = (entry.loop_lineage ?? {});
|
|
266
|
+
if (!entry.output_summary) {
|
|
267
|
+
entry.output_summary = lineage.output_summary ?? "";
|
|
268
|
+
}
|
|
269
|
+
if (!entry.constraint_violations) {
|
|
270
|
+
entry.constraint_violations =
|
|
271
|
+
lineage.constraint_violations ?? [];
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
if (!finalResults.length)
|
|
275
|
+
return null;
|
|
276
|
+
return { results: finalResults, global_entries: [] };
|
|
277
|
+
}
|
|
278
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
279
|
+
// Canonical round-event commit
|
|
280
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
281
|
+
/** Record a round report and persist the canonical event.
|
|
282
|
+
* Compiler views remain ephemeral and are never written as facts.
|
|
283
|
+
* P0–P2: Also persists discovered_constraints, objective_refinement,
|
|
284
|
+
* and emerged_subtasks for the compiler to consume next round.
|
|
285
|
+
* Call this BEFORE invokeLoopCompile for the next round so that
|
|
286
|
+
* hydrateLoopContext picks up the latest success flags. */
|
|
287
|
+
commitRoundReport(loopId, round, task, roundTransaction, roundReport) {
|
|
288
|
+
if (!roundReport)
|
|
289
|
+
throw new Error("commitRoundReport requires a canonical RoundReport");
|
|
290
|
+
this.ensureInit({ task, mode: Mode.LOOP_COMPILE, skill_name: null, task_id: null });
|
|
291
|
+
const taskId = `loop:${loopId}:r${round}:event`;
|
|
292
|
+
const transactionId = typeof roundTransaction?.round_id === "string"
|
|
293
|
+
? roundTransaction.round_id
|
|
294
|
+
: null;
|
|
295
|
+
const transactionPersisted = () => {
|
|
296
|
+
if (!transactionId)
|
|
297
|
+
return false;
|
|
298
|
+
return this.resolveBackend().queryLoopEvents(loopId)
|
|
299
|
+
.filter((entry) => entry.task_id === taskId)
|
|
300
|
+
.some((entry) => {
|
|
301
|
+
if (entry.task_id !== taskId)
|
|
302
|
+
return false;
|
|
303
|
+
const lineage = entry.loop_lineage;
|
|
304
|
+
const transaction = lineage?.round_transaction;
|
|
305
|
+
return transaction !== null &&
|
|
306
|
+
typeof transaction === "object" &&
|
|
307
|
+
!Array.isArray(transaction) &&
|
|
308
|
+
transaction.round_id === transactionId;
|
|
309
|
+
});
|
|
310
|
+
};
|
|
311
|
+
const alreadyCommitted = transactionPersisted();
|
|
312
|
+
const signal = {
|
|
313
|
+
task_id: taskId,
|
|
314
|
+
task_type: "round_event",
|
|
315
|
+
success: roundReport.outcome === "success",
|
|
316
|
+
loop_id: loopId,
|
|
317
|
+
round,
|
|
318
|
+
format: "loopforge.event",
|
|
319
|
+
round_report: roundReport,
|
|
320
|
+
loop_lineage: roundTransaction
|
|
321
|
+
? {
|
|
322
|
+
round,
|
|
323
|
+
round_id: roundTransaction.round_id,
|
|
324
|
+
round_transaction: roundTransaction,
|
|
325
|
+
}
|
|
326
|
+
: {},
|
|
327
|
+
};
|
|
328
|
+
if (!alreadyCommitted) {
|
|
329
|
+
this.persistRoundEvent(signal);
|
|
330
|
+
if (transactionId && !transactionPersisted()) {
|
|
331
|
+
throw new Error(`Round event commit failed: ${transactionId}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
if (alreadyCommitted)
|
|
335
|
+
return roundReport.outcome === "success";
|
|
336
|
+
logEvent("round_complete", {
|
|
337
|
+
loopId,
|
|
338
|
+
round,
|
|
339
|
+
success: roundReport.outcome === "success",
|
|
340
|
+
});
|
|
341
|
+
return roundReport.outcome === "success";
|
|
342
|
+
}
|
|
343
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
344
|
+
// Loop Compile (public, primary)
|
|
345
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
346
|
+
invokeLoopCompile(request, hydrateResults, options = {}) {
|
|
347
|
+
this.ensureInit(request);
|
|
348
|
+
this.lastTask = request.task;
|
|
349
|
+
// Parse extras via typed extraction pipeline (loop-extras-parser.ts).
|
|
350
|
+
// Errors are collected but never thrown — the compiler always gets
|
|
351
|
+
// best-effort defaults so a malformed request doesn't crash the engine.
|
|
352
|
+
const extras = request;
|
|
353
|
+
const { parsed, ctx } = parseLoopExtras(extras, request.task_id ?? "");
|
|
354
|
+
if (ctx.errors.length > 0) {
|
|
355
|
+
logEvent("extras_parse_errors", {
|
|
356
|
+
errors: ctx.errors.map((e) => `${e.field}: ${e.message}`),
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
const lcr = makeLoopCompileRequest({
|
|
360
|
+
loop_id: parsed.loop_id,
|
|
361
|
+
round: parsed.round,
|
|
362
|
+
goal_id: parsed.goal_id,
|
|
363
|
+
task: request.task,
|
|
364
|
+
domain: parsed.domain,
|
|
365
|
+
next_task_proposal: parsed.next_task_proposal,
|
|
366
|
+
plan_source: parsed.plan_source,
|
|
367
|
+
constraints_from_plan: parsed.constraints_from_plan,
|
|
368
|
+
new_since_last_round: parsed.new_since_last_round,
|
|
369
|
+
force_level: parsed.force_level,
|
|
370
|
+
health_check_interval: parsed.health_check_interval,
|
|
371
|
+
external_context: parsed.external_context,
|
|
372
|
+
max_rounds: parsed.max_rounds,
|
|
373
|
+
verification_flags: parsed.verification_flags,
|
|
374
|
+
attempt: parsed.attempt,
|
|
375
|
+
consecutive_rejections: parsed.consecutive_rejections,
|
|
376
|
+
rejection_notice: parsed.rejection_notice,
|
|
377
|
+
loop_objective: parsed.loop_objective,
|
|
378
|
+
});
|
|
379
|
+
// Convert only the canonical compiler projection.
|
|
380
|
+
if (parsed.last_round_view) {
|
|
381
|
+
const rr = parsed.last_round_view;
|
|
382
|
+
if (rr.evidence && typeof rr.evidence === "object" &&
|
|
383
|
+
typeof rr.summary === "string") {
|
|
384
|
+
lcr.last_round_view = rr;
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
return {
|
|
388
|
+
status: AgentStatus.ERROR,
|
|
389
|
+
response: {
|
|
390
|
+
status: AgentStatus.ERROR,
|
|
391
|
+
prompt: null,
|
|
392
|
+
error: "last_round_view must be a CompilerRoundProjection",
|
|
393
|
+
},
|
|
394
|
+
};
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// Convert loop_objective if present (object already validated by parser).
|
|
398
|
+
// Preserve the caller-supplied version and refinement_history so
|
|
399
|
+
// objective versioning (P1) survives the request round-trip.
|
|
400
|
+
if (parsed.loop_objective) {
|
|
401
|
+
const obj = parsed.loop_objective;
|
|
402
|
+
lcr.loop_objective = makeLoopObjective({
|
|
403
|
+
objective: obj.objective ?? "",
|
|
404
|
+
success_criteria: obj.success_criteria ?? [],
|
|
405
|
+
hard_constraints: obj.hard_constraints ?? [],
|
|
406
|
+
created_at_round: obj.created_at_round ?? 1,
|
|
407
|
+
loop_id: obj.loop_id ?? "",
|
|
408
|
+
...(typeof obj.version === "number" ? { version: obj.version } : {}),
|
|
409
|
+
...(Array.isArray(obj.refinement_history)
|
|
410
|
+
? {
|
|
411
|
+
refinement_history: obj.refinement_history.filter((item) => typeof item === "string"),
|
|
412
|
+
}
|
|
413
|
+
: {}),
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
// Hydrate vault context for cross-round memory
|
|
417
|
+
let context = hydrateResults ?? null;
|
|
418
|
+
if (context === null && lcr.loop_id && lcr.round > 1) {
|
|
419
|
+
context = this.hydrateLoopContext(lcr.loop_id);
|
|
420
|
+
}
|
|
421
|
+
// Delegate to pure-function compiler
|
|
422
|
+
let response;
|
|
423
|
+
try {
|
|
424
|
+
response = compileLoop(lcr, context);
|
|
425
|
+
}
|
|
426
|
+
catch (exc) {
|
|
427
|
+
return {
|
|
428
|
+
status: AgentStatus.ERROR,
|
|
429
|
+
response: {
|
|
430
|
+
status: AgentStatus.ERROR,
|
|
431
|
+
prompt: null,
|
|
432
|
+
error: `loop_compile failed: ${exc}`,
|
|
433
|
+
},
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
// Persist lineage to vault
|
|
437
|
+
if (options.persistLineage !== false) {
|
|
438
|
+
this.persistLoopLineage(response, lcr);
|
|
439
|
+
}
|
|
440
|
+
return {
|
|
441
|
+
status: AgentStatus.OK,
|
|
442
|
+
response: {
|
|
443
|
+
status: AgentStatus.OK,
|
|
444
|
+
prompt: response.prompt,
|
|
445
|
+
error: null,
|
|
446
|
+
state_file_content: response.state_file_content,
|
|
447
|
+
prompt_artifact: response.prompt_artifact,
|
|
448
|
+
canonical_state: response.canonical_state,
|
|
449
|
+
warnings: response.warnings,
|
|
450
|
+
},
|
|
451
|
+
};
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
455
|
+
// Factory
|
|
456
|
+
// ═══════════════════════════════════════════════════════════════════════════
|
|
457
|
+
export function createRuntimeServices(store) {
|
|
458
|
+
return new RuntimeServices(store);
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=runtime-services.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-services.js","sourceRoot":"","sources":["../src/runtime-services.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/** Persistence adapters for session state and committed round lookup. */
|
|
2
|
-
import type {
|
|
2
|
+
import type { VaultEntry } from "./vault-types.js";
|
|
3
3
|
import type { LoopStore } from "./loop-store.js";
|
|
4
|
+
export { VaultRoundCommitStore } from "./round-commit-store.js";
|
|
5
|
+
export type { RoundCommitStore } from "./round-commit-store.js";
|
|
4
6
|
export interface SessionStateStore {
|
|
5
7
|
load(loopId: string): VaultEntry | undefined;
|
|
6
8
|
list(): VaultEntry[];
|
|
@@ -17,9 +19,6 @@ export declare class SessionLeaseConflictError extends Error {
|
|
|
17
19
|
readonly loopId: string;
|
|
18
20
|
constructor(loopId: string);
|
|
19
21
|
}
|
|
20
|
-
export interface RoundCommitStore {
|
|
21
|
-
find(loopId: string, round: number): VaultEntry[];
|
|
22
|
-
}
|
|
23
22
|
export declare class VaultSessionStateStore implements SessionStateStore {
|
|
24
23
|
private readonly store;
|
|
25
24
|
constructor(store: LoopStore);
|
|
@@ -31,9 +30,4 @@ export declare class VaultSessionStateStore implements SessionStateStore {
|
|
|
31
30
|
releaseLease(loopId: string, ownerId: string): boolean;
|
|
32
31
|
private lineage;
|
|
33
32
|
}
|
|
34
|
-
export declare class VaultRoundCommitStore implements RoundCommitStore {
|
|
35
|
-
private readonly backend;
|
|
36
|
-
constructor(backend: VaultBackend);
|
|
37
|
-
find(loopId: string, round: number): VaultEntry[];
|
|
38
|
-
}
|
|
39
33
|
//# sourceMappingURL=storage.d.ts.map
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAuB,MAAM,iBAAiB,CAAC;AAEtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAyBhE,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC7C,IAAI,IAAI,UAAU,EAAE,CAAC;IACrB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC5D,YAAY,CAAC,CACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,UAAU,GAAG,SAAS,CAAC;IAC1B,UAAU,CAAC,CACT,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;IACX,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;CACzD;AAED,MAAM,WAAW,kBAAkB;IACjC,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM;CAIpC;AAED,qBAAa,sBAAuB,YAAW,iBAAiB;IAClD,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,SAAS;IAE7C,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAK5C,IAAI,IAAI,UAAU,EAAE;IASpB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,kBAAuB,GAAG,IAAI;IA2B/D,YAAY,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,SAAa,GACf,UAAU,GAAG,SAAS;IA6CzB,UAAU,CACR,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,SAAa,GACf,OAAO;IA4BV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IA6BtD,OAAO,CAAC,OAAO;CAOhB"}
|
package/dist/storage.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Persistence adapters for session state and committed round lookup. */
|
|
2
|
-
import {
|
|
2
|
+
import { LOOP_STORE_FORMAT } from "./vault-format.js";
|
|
3
|
+
export { VaultRoundCommitStore } from "./round-commit-store.js";
|
|
3
4
|
function isLeaseOwnerAlive(ownerId, leaseExpiresAt) {
|
|
4
5
|
const match = ownerId.match(/^(\d+):/);
|
|
5
6
|
if (!match)
|
|
@@ -68,7 +69,7 @@ export class VaultSessionStateStore {
|
|
|
68
69
|
}
|
|
69
70
|
}
|
|
70
71
|
const doc = {
|
|
71
|
-
|
|
72
|
+
format: LOOP_STORE_FORMAT,
|
|
72
73
|
loopId,
|
|
73
74
|
updatedAt: new Date().toISOString(),
|
|
74
75
|
entry,
|
|
@@ -110,7 +111,7 @@ export class VaultSessionStateStore {
|
|
|
110
111
|
},
|
|
111
112
|
};
|
|
112
113
|
const doc = {
|
|
113
|
-
|
|
114
|
+
format: LOOP_STORE_FORMAT,
|
|
114
115
|
loopId,
|
|
115
116
|
updatedAt: new Date(now).toISOString(),
|
|
116
117
|
entry: updated,
|
|
@@ -139,7 +140,7 @@ export class VaultSessionStateStore {
|
|
|
139
140
|
},
|
|
140
141
|
};
|
|
141
142
|
const doc = {
|
|
142
|
-
|
|
143
|
+
format: LOOP_STORE_FORMAT,
|
|
143
144
|
loopId,
|
|
144
145
|
updatedAt: new Date(now).toISOString(),
|
|
145
146
|
entry: updated,
|
|
@@ -169,7 +170,7 @@ export class VaultSessionStateStore {
|
|
|
169
170
|
},
|
|
170
171
|
};
|
|
171
172
|
const doc = {
|
|
172
|
-
|
|
173
|
+
format: LOOP_STORE_FORMAT,
|
|
173
174
|
loopId,
|
|
174
175
|
updatedAt: new Date().toISOString(),
|
|
175
176
|
entry: updated,
|
|
@@ -188,16 +189,4 @@ export class VaultSessionStateStore {
|
|
|
188
189
|
: {};
|
|
189
190
|
}
|
|
190
191
|
}
|
|
191
|
-
export class VaultRoundCommitStore {
|
|
192
|
-
backend;
|
|
193
|
-
constructor(backend) {
|
|
194
|
-
this.backend = backend;
|
|
195
|
-
}
|
|
196
|
-
find(loopId, round) {
|
|
197
|
-
return this.backend.queryEntries({
|
|
198
|
-
prefix: `loop:${loopId}:r${round}:feedback`,
|
|
199
|
-
feedbackOnly: true,
|
|
200
|
-
});
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
192
|
//# sourceMappingURL=storage.js.map
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAIzE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/token-utils.d.ts
CHANGED
|
@@ -3,12 +3,15 @@
|
|
|
3
3
|
* Single source of truth for tokenization and similarity functions used
|
|
4
4
|
* by the compiler, verification gate, and canonical state renderer.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* Latin alphanumerics tokenize as whole words; consecutive CJK characters
|
|
7
|
+
* tokenize as overlapping 2-grams (a lone CJK character is its own token)
|
|
8
|
+
* so CJK similarity takes intermediate values instead of collapsing to
|
|
9
|
+
* 0/1. The ranges cover Unified Ideographs, Compatibility Ideographs and
|
|
10
|
+
* Extensions B–F (surrogate-pair code points the legacy regex missed).
|
|
9
11
|
*/
|
|
10
|
-
/** Tokenize text into a set of lowercase words and CJK
|
|
11
|
-
*
|
|
12
|
+
/** Tokenize text into a set of lowercase ASCII words and CJK bigrams.
|
|
13
|
+
* Scripts are tokenized independently, so mixed text yields per-script
|
|
14
|
+
* tokens (e.g. "修复bug重入" → {修复, bug, 重入}). */
|
|
12
15
|
export declare function tokenize(text: string): Set<string>;
|
|
13
16
|
/** Jaccard similarity in [0, 1]. Returns 1 when either set is empty
|
|
14
17
|
* (empty descriptions never match anything, so they don't false-positive). */
|
|
@@ -18,8 +21,6 @@ export declare function unique(values: Array<string | null | undefined>): string
|
|
|
18
21
|
/** Narrow `unknown` to a non-array object. Used across storage, MCP, and
|
|
19
22
|
* transaction modules to validate JSON-deserialized data before field access. */
|
|
20
23
|
export declare function isRecord(value: unknown): value is Record<string, unknown>;
|
|
21
|
-
/** Extract the round number from
|
|
22
|
-
* `loop_lineage.round` (with `lineage.round` fallback). Returns 0 if
|
|
23
|
-
* the entry has no recognizable round field. */
|
|
24
|
+
/** Extract the round number from the canonical `loop_lineage.round` field. */
|
|
24
25
|
export declare function entryRound(entry: Record<string, unknown>): number;
|
|
25
26
|
//# sourceMappingURL=token-utils.d.ts.map
|