loopforge 1.15.1 → 2.0.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 +172 -95
- package/dist/backends/interface.d.ts +5 -10
- package/dist/backends/interface.d.ts.map +1 -1
- package/dist/backends/interface.js +3 -4
- package/dist/backends/interface.js.map +1 -1
- package/dist/canonical-state.d.ts +53 -0
- package/dist/canonical-state.d.ts.map +1 -0
- package/dist/canonical-state.js +161 -0
- package/dist/canonical-state.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +227 -0
- package/dist/cli.js.map +1 -0
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +28 -10
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +9 -28
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +135 -361
- package/dist/engine.js.map +1 -1
- package/dist/evidence-provider.d.ts +146 -0
- package/dist/evidence-provider.d.ts.map +1 -0
- package/dist/evidence-provider.js +512 -0
- package/dist/evidence-provider.js.map +1 -0
- package/dist/index.d.ts +19 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -12
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +15 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +49 -0
- package/dist/init.js.map +1 -0
- package/dist/interop.d.ts +35 -0
- package/dist/interop.d.ts.map +1 -0
- package/dist/interop.js +34 -0
- package/dist/interop.js.map +1 -0
- package/dist/loop-compiler.d.ts +14 -64
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +305 -2206
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +82 -0
- package/dist/loop-extras-parser.d.ts.map +1 -0
- package/dist/loop-extras-parser.js +217 -0
- package/dist/loop-extras-parser.js.map +1 -0
- package/dist/loop-store.d.ts +104 -0
- package/dist/loop-store.d.ts.map +1 -0
- package/dist/loop-store.js +421 -0
- package/dist/loop-store.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -6
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +109 -73
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +102 -21
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +795 -400
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +18 -268
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +226 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/observability.d.ts +36 -16
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +82 -23
- package/dist/observability.js.map +1 -1
- package/dist/policy-metrics.d.ts +46 -0
- package/dist/policy-metrics.d.ts.map +1 -0
- package/dist/policy-metrics.js +146 -0
- package/dist/policy-metrics.js.map +1 -0
- package/dist/policy.d.ts +52 -147
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +118 -191
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +30 -0
- package/dist/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt-assembler.js +278 -0
- package/dist/prompt-assembler.js.map +1 -0
- package/dist/prompt-policy.d.ts +29 -0
- package/dist/prompt-policy.d.ts.map +1 -0
- package/dist/prompt-policy.js +51 -0
- package/dist/prompt-policy.js.map +1 -0
- package/dist/protocol.d.ts +75 -152
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +11 -53
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +1 -27
- package/dist/replay.js.map +1 -1
- package/dist/round-coordinator.d.ts +90 -0
- package/dist/round-coordinator.d.ts.map +1 -0
- package/dist/round-coordinator.js +186 -0
- package/dist/round-coordinator.js.map +1 -0
- package/dist/round-driver.d.ts +53 -0
- package/dist/round-driver.d.ts.map +1 -0
- package/dist/round-driver.js +101 -0
- package/dist/round-driver.js.map +1 -0
- package/dist/round-transaction.d.ts +70 -0
- package/dist/round-transaction.d.ts.map +1 -0
- package/dist/round-transaction.js +290 -0
- package/dist/round-transaction.js.map +1 -0
- package/dist/self-eval.d.ts +26 -0
- package/dist/self-eval.d.ts.map +1 -0
- package/dist/self-eval.js +154 -0
- package/dist/self-eval.js.map +1 -0
- package/dist/storage.d.ts +39 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +193 -0
- package/dist/storage.js.map +1 -0
- package/dist/verification-gate.d.ts +31 -7
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +250 -7
- package/dist/verification-gate.js.map +1 -1
- package/loop_policy.json +19 -53
- package/package.json +13 -10
- package/skills/perception/SKILL.md +80 -267
- package/dist/backends/fs.d.ts +0 -36
- package/dist/backends/fs.d.ts.map +0 -1
- package/dist/backends/fs.js +0 -362
- package/dist/backends/fs.js.map +0 -1
- package/dist/builder.d.ts +0 -19
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js +0 -215
- package/dist/builder.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -12
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -14
- package/dist/mcp-server.js.map +0 -1
- package/dist/memory-bridge.d.ts +0 -47
- package/dist/memory-bridge.d.ts.map +0 -1
- package/dist/memory-bridge.js +0 -290
- package/dist/memory-bridge.js.map +0 -1
- package/dist/runtime.d.ts +0 -80
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -699
- package/dist/runtime.js.map +0 -1
- package/dist/tests/_helpers.d.ts +0 -25
- package/dist/tests/_helpers.d.ts.map +0 -1
- package/dist/tests/_helpers.js +0 -47
- package/dist/tests/_helpers.js.map +0 -1
- package/dist/tests/builder.test.d.ts +0 -2
- package/dist/tests/builder.test.d.ts.map +0 -1
- package/dist/tests/builder.test.js +0 -112
- package/dist/tests/builder.test.js.map +0 -1
- package/dist/tests/enforcement-gate.test.d.ts +0 -2
- package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
- package/dist/tests/enforcement-gate.test.js +0 -328
- package/dist/tests/enforcement-gate.test.js.map +0 -1
- package/dist/tests/engine.test.d.ts +0 -2
- package/dist/tests/engine.test.d.ts.map +0 -1
- package/dist/tests/engine.test.js +0 -375
- package/dist/tests/engine.test.js.map +0 -1
- package/dist/tests/generate-schema.test.d.ts +0 -8
- package/dist/tests/generate-schema.test.d.ts.map +0 -1
- package/dist/tests/generate-schema.test.js +0 -199
- package/dist/tests/generate-schema.test.js.map +0 -1
- package/dist/tests/loop-compiler.test.d.ts +0 -2
- package/dist/tests/loop-compiler.test.d.ts.map +0 -1
- package/dist/tests/loop-compiler.test.js +0 -1059
- package/dist/tests/loop-compiler.test.js.map +0 -1
- package/dist/tests/mcp.test.d.ts +0 -7
- package/dist/tests/mcp.test.d.ts.map +0 -1
- package/dist/tests/mcp.test.js +0 -505
- package/dist/tests/mcp.test.js.map +0 -1
- package/dist/tests/memory-bridge.test.d.ts +0 -8
- package/dist/tests/memory-bridge.test.d.ts.map +0 -1
- package/dist/tests/memory-bridge.test.js +0 -383
- package/dist/tests/memory-bridge.test.js.map +0 -1
- package/dist/tests/policy.test.d.ts +0 -2
- package/dist/tests/policy.test.d.ts.map +0 -1
- package/dist/tests/policy.test.js +0 -49
- package/dist/tests/policy.test.js.map +0 -1
- package/dist/tests/protocol.test.d.ts +0 -2
- package/dist/tests/protocol.test.d.ts.map +0 -1
- package/dist/tests/protocol.test.js +0 -73
- package/dist/tests/protocol.test.js.map +0 -1
- package/dist/tests/replay.test.d.ts +0 -2
- package/dist/tests/replay.test.d.ts.map +0 -1
- package/dist/tests/replay.test.js +0 -222
- package/dist/tests/replay.test.js.map +0 -1
- package/dist/tests/runtime.test.d.ts +0 -7
- package/dist/tests/runtime.test.d.ts.map +0 -1
- package/dist/tests/runtime.test.js +0 -337
- package/dist/tests/runtime.test.js.map +0 -1
- package/dist/tests/verification-gate.test.d.ts +0 -2
- package/dist/tests/verification-gate.test.d.ts.map +0 -1
- package/dist/tests/verification-gate.test.js +0 -407
- package/dist/tests/verification-gate.test.js.map +0 -1
- package/skills/prompt-techniques/SKILL.md +0 -52
- package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
- package/skills/prompt-techniques/references/few-shot.md +0 -174
- package/skills/prompt-techniques/references/least-to-most.md +0 -182
- package/skills/prompt-techniques/references/step-back.md +0 -160
- package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
- package/skills/prompt-techniques/references/zero-shot.md +0 -97
package/dist/storage.js
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/** Persistence adapters for session state and committed round lookup. */
|
|
2
|
+
import { LOOP_STORE_SCHEMA_VERSION } from "./loop-store.js";
|
|
3
|
+
function isLeaseOwnerAlive(ownerId) {
|
|
4
|
+
const match = ownerId.match(/^(\d+):/);
|
|
5
|
+
if (!match)
|
|
6
|
+
return true;
|
|
7
|
+
const pid = Number(match[1]);
|
|
8
|
+
if (!Number.isInteger(pid) || pid <= 0)
|
|
9
|
+
return true;
|
|
10
|
+
try {
|
|
11
|
+
process.kill(pid, 0);
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return error.code === "EPERM";
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class SessionLeaseConflictError extends Error {
|
|
19
|
+
loopId;
|
|
20
|
+
constructor(loopId) {
|
|
21
|
+
super(`Session lease is owned by another process: ${loopId}`);
|
|
22
|
+
this.loopId = loopId;
|
|
23
|
+
this.name = "SessionLeaseConflictError";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class VaultSessionStateStore {
|
|
27
|
+
store;
|
|
28
|
+
constructor(store) {
|
|
29
|
+
this.store = store;
|
|
30
|
+
}
|
|
31
|
+
load(loopId) {
|
|
32
|
+
const session = this.store.readSession(loopId);
|
|
33
|
+
return session?.entry;
|
|
34
|
+
}
|
|
35
|
+
list() {
|
|
36
|
+
const result = [];
|
|
37
|
+
for (const loopId of this.store.listLoopIds()) {
|
|
38
|
+
const session = this.store.readSession(loopId);
|
|
39
|
+
if (session)
|
|
40
|
+
result.push(session.entry);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
save(entry, options = {}) {
|
|
45
|
+
const loopId = entry.loop_id;
|
|
46
|
+
if (typeof loopId !== "string" || !loopId) {
|
|
47
|
+
throw new Error("Session state entry requires loop_id");
|
|
48
|
+
}
|
|
49
|
+
const write = () => {
|
|
50
|
+
const existing = this.store.readSession(loopId);
|
|
51
|
+
if (existing && options.expectedLeaseOwner) {
|
|
52
|
+
const lineage = this.lineage(existing.entry);
|
|
53
|
+
const owner = typeof lineage.lease_owner === "string"
|
|
54
|
+
? lineage.lease_owner
|
|
55
|
+
: "";
|
|
56
|
+
if (owner && owner !== options.expectedLeaseOwner) {
|
|
57
|
+
throw new SessionLeaseConflictError(loopId);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const doc = {
|
|
61
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
62
|
+
loopId,
|
|
63
|
+
updatedAt: new Date().toISOString(),
|
|
64
|
+
entry,
|
|
65
|
+
};
|
|
66
|
+
this.store.writeSession(loopId, doc);
|
|
67
|
+
};
|
|
68
|
+
this.store.withLock(write);
|
|
69
|
+
}
|
|
70
|
+
acquireLease(loopId, ownerId, leaseMs, now = Date.now()) {
|
|
71
|
+
let claimed;
|
|
72
|
+
const write = () => {
|
|
73
|
+
const session = this.store.readSession(loopId);
|
|
74
|
+
if (!session)
|
|
75
|
+
return;
|
|
76
|
+
const entry = session.entry;
|
|
77
|
+
const lineage = this.lineage(entry);
|
|
78
|
+
const owner = typeof lineage.lease_owner === "string"
|
|
79
|
+
? lineage.lease_owner
|
|
80
|
+
: "";
|
|
81
|
+
const expiresAt = typeof lineage.lease_expires_at === "number"
|
|
82
|
+
? lineage.lease_expires_at
|
|
83
|
+
: 0;
|
|
84
|
+
if (owner &&
|
|
85
|
+
owner !== ownerId &&
|
|
86
|
+
expiresAt > now &&
|
|
87
|
+
isLeaseOwnerAlive(owner))
|
|
88
|
+
return;
|
|
89
|
+
const previousEpoch = typeof lineage.lease_epoch === "number"
|
|
90
|
+
? lineage.lease_epoch
|
|
91
|
+
: 0;
|
|
92
|
+
const updated = {
|
|
93
|
+
...entry,
|
|
94
|
+
timestamp: new Date(now).toISOString(),
|
|
95
|
+
loop_lineage: {
|
|
96
|
+
...lineage,
|
|
97
|
+
lease_owner: ownerId,
|
|
98
|
+
lease_expires_at: now + Math.max(1, leaseMs),
|
|
99
|
+
lease_epoch: owner === ownerId ? previousEpoch : previousEpoch + 1,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
const doc = {
|
|
103
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
104
|
+
loopId,
|
|
105
|
+
updatedAt: new Date(now).toISOString(),
|
|
106
|
+
entry: updated,
|
|
107
|
+
};
|
|
108
|
+
this.store.writeSession(loopId, doc);
|
|
109
|
+
claimed = updated;
|
|
110
|
+
};
|
|
111
|
+
this.store.withLock(write);
|
|
112
|
+
return claimed;
|
|
113
|
+
}
|
|
114
|
+
renewLease(loopId, ownerId, leaseMs, now = Date.now()) {
|
|
115
|
+
let renewed = false;
|
|
116
|
+
const write = () => {
|
|
117
|
+
const session = this.store.readSession(loopId);
|
|
118
|
+
if (!session)
|
|
119
|
+
return;
|
|
120
|
+
const entry = session.entry;
|
|
121
|
+
const lineage = this.lineage(entry);
|
|
122
|
+
if (lineage.lease_owner !== ownerId)
|
|
123
|
+
return;
|
|
124
|
+
const updated = {
|
|
125
|
+
...entry,
|
|
126
|
+
loop_lineage: {
|
|
127
|
+
...lineage,
|
|
128
|
+
lease_expires_at: now + Math.max(1, leaseMs),
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
const doc = {
|
|
132
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
133
|
+
loopId,
|
|
134
|
+
updatedAt: new Date(now).toISOString(),
|
|
135
|
+
entry: updated,
|
|
136
|
+
};
|
|
137
|
+
this.store.writeSession(loopId, doc);
|
|
138
|
+
renewed = true;
|
|
139
|
+
};
|
|
140
|
+
this.store.withLock(write);
|
|
141
|
+
return renewed;
|
|
142
|
+
}
|
|
143
|
+
releaseLease(loopId, ownerId) {
|
|
144
|
+
let released = false;
|
|
145
|
+
const write = () => {
|
|
146
|
+
const session = this.store.readSession(loopId);
|
|
147
|
+
if (!session)
|
|
148
|
+
return;
|
|
149
|
+
const entry = session.entry;
|
|
150
|
+
const lineage = this.lineage(entry);
|
|
151
|
+
if (lineage.lease_owner !== ownerId)
|
|
152
|
+
return;
|
|
153
|
+
const updated = {
|
|
154
|
+
...entry,
|
|
155
|
+
loop_lineage: {
|
|
156
|
+
...lineage,
|
|
157
|
+
lease_owner: "",
|
|
158
|
+
lease_expires_at: 0,
|
|
159
|
+
},
|
|
160
|
+
};
|
|
161
|
+
const doc = {
|
|
162
|
+
schemaVersion: LOOP_STORE_SCHEMA_VERSION,
|
|
163
|
+
loopId,
|
|
164
|
+
updatedAt: new Date().toISOString(),
|
|
165
|
+
entry: updated,
|
|
166
|
+
};
|
|
167
|
+
this.store.writeSession(loopId, doc);
|
|
168
|
+
released = true;
|
|
169
|
+
};
|
|
170
|
+
this.store.withLock(write);
|
|
171
|
+
return released;
|
|
172
|
+
}
|
|
173
|
+
lineage(entry) {
|
|
174
|
+
return entry.loop_lineage &&
|
|
175
|
+
typeof entry.loop_lineage === "object" &&
|
|
176
|
+
!Array.isArray(entry.loop_lineage)
|
|
177
|
+
? entry.loop_lineage
|
|
178
|
+
: {};
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
export class VaultRoundCommitStore {
|
|
182
|
+
backend;
|
|
183
|
+
constructor(backend) {
|
|
184
|
+
this.backend = backend;
|
|
185
|
+
}
|
|
186
|
+
find(loopId, round) {
|
|
187
|
+
return this.backend.queryEntries({
|
|
188
|
+
prefix: `loop:${loopId}:r${round}:feedback`,
|
|
189
|
+
feedbackOnly: true,
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,20 +13,44 @@
|
|
|
13
13
|
* must respond in the next round.
|
|
14
14
|
*/
|
|
15
15
|
import type { VaultEntry } from "./backends/interface.js";
|
|
16
|
+
import type { ProviderSnapshot } from "./evidence-provider.js";
|
|
16
17
|
import type { SelfEvaluation, VerificationResult } from "./protocol.js";
|
|
18
|
+
export { type GitFileState, captureGitFileState, captureGitModifiedFiles, } from "./evidence-provider.js";
|
|
17
19
|
/** Extract the round number from a vault entry's loop_lineage.
|
|
18
20
|
* Returns 0 if the entry has no lineage or no round field.
|
|
19
21
|
* In practice, persistLoopLineage always writes round ≥ 1, so 0
|
|
20
22
|
* unambiguously means "not a valid round entry" in this context.
|
|
21
23
|
* Exported for reuse by enforcement-gate.ts. */
|
|
22
24
|
export declare function entryRound(entry: VaultEntry): number;
|
|
25
|
+
interface ParsedTestCounts {
|
|
26
|
+
passed: number;
|
|
27
|
+
failed: number;
|
|
28
|
+
skipped: number;
|
|
29
|
+
total: number;
|
|
30
|
+
}
|
|
31
|
+
/** Best-effort parse of test counts from common test-runner output formats.
|
|
32
|
+
*
|
|
33
|
+
* Scans the last 2000 characters of stdout (where summary lines typically
|
|
34
|
+
* appear) and tries patterns in descending specificity order. Returns null
|
|
35
|
+
* when the output format is unrecognized, stdout is empty, or a confident
|
|
36
|
+
* parse cannot be made.
|
|
37
|
+
*
|
|
38
|
+
* Recognized formats: Jest verbose/compact, Mocha, pytest/unittest, Go test,
|
|
39
|
+
* and PHPUnit OK summaries. */
|
|
40
|
+
export declare function parseTestOutput(stdout: string): ParsedTestCounts | null;
|
|
23
41
|
/** Verify a SelfEvaluation against the loop's cross-round lineage.
|
|
24
42
|
*
|
|
25
|
-
* @param selfEval
|
|
26
|
-
* @param currentRound
|
|
27
|
-
* @param vaultEntries
|
|
28
|
-
* @param prevSelfEval
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
|
|
43
|
+
* @param selfEval The agent's self-evaluation for the current round.
|
|
44
|
+
* @param currentRound The current round number (1-based).
|
|
45
|
+
* @param vaultEntries Vault entries for this loop (non-feedback only).
|
|
46
|
+
* @param prevSelfEval The agent's self-evaluation from the previous round
|
|
47
|
+
* (null for round 1).
|
|
48
|
+
* @param runtimeFilesChanged v1.16: Files detected as changed by git diff between
|
|
49
|
+
* before/after execute. null if git is unavailable.
|
|
50
|
+
* Used by checkFilesIntegrity to cross-validate
|
|
51
|
+
* agent-reported files_changed against reality.
|
|
52
|
+
* @param evidenceSnapshots v1.18: Evidence snapshots from configured providers.
|
|
53
|
+
* Used by checkEvidenceIntegrity for multi-provider
|
|
54
|
+
* cross-validation. Defaults to empty array. */
|
|
55
|
+
export declare function verifySelfEvaluation(selfEval: SelfEvaluation, currentRound: number, vaultEntries: VaultEntry[], prevSelfEval?: SelfEvaluation | null, runtimeFilesChanged?: string[] | null, evidenceSnapshots?: ProviderSnapshot[]): VerificationResult;
|
|
32
56
|
//# sourceMappingURL=verification-gate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-gate.d.ts","sourceRoot":"","sources":["../src/verification-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAoB,kBAAkB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"verification-gate.d.ts","sourceRoot":"","sources":["../src/verification-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAoB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAM1F,OAAO,EACL,KAAK,YAAY,EACjB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAMhC;;;;iDAIiD;AACjD,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAGpD;AAqUD,UAAU,gBAAgB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;gCAQgC;AAChC,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA4DvE;AA6DD;;;;;;;;;;;;;4EAa4E;AAC5E,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,UAAU,EAAE,EAC1B,YAAY,GAAE,cAAc,GAAG,IAAW,EAC1C,mBAAmB,GAAE,MAAM,EAAE,GAAG,IAAW,EAC3C,iBAAiB,GAAE,gBAAgB,EAAO,GACzC,kBAAkB,CA8CpB"}
|
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
* must respond in the next round.
|
|
14
14
|
*/
|
|
15
15
|
import { makeVerificationFlag, makeVerificationResult } from "./protocol.js";
|
|
16
|
+
// Git capture functions moved to evidence-provider.ts (v2.0.1).
|
|
17
|
+
// Re-export for backward compatibility — new code should import from
|
|
18
|
+
// evidence-provider.ts directly.
|
|
19
|
+
export { captureGitFileState, captureGitModifiedFiles, } from "./evidence-provider.js";
|
|
16
20
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
17
21
|
// Helpers
|
|
18
22
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -181,18 +185,250 @@ function checkRetractFreshConstraint(selfEval, prevSelfEval, currentRound) {
|
|
|
181
185
|
}
|
|
182
186
|
return null;
|
|
183
187
|
}
|
|
188
|
+
/** v1.16: Check 7 — Agent-reported files_changed doesn't match git reality.
|
|
189
|
+
* Only fires when execution_evidence is present (structured self-eval path)
|
|
190
|
+
* AND runtimeFilesChanged is non-null (git is available). */
|
|
191
|
+
function checkFilesIntegrity(selfEval, runtimeFilesChanged) {
|
|
192
|
+
if (!runtimeFilesChanged)
|
|
193
|
+
return null; // git unavailable, skip
|
|
194
|
+
if (!selfEval.execution_evidence)
|
|
195
|
+
return null; // heuristic fallback, skip
|
|
196
|
+
const reported = [...selfEval.execution_evidence.files_changed].sort();
|
|
197
|
+
const actual = [...runtimeFilesChanged].sort();
|
|
198
|
+
// Both empty → agent honestly reports no changes
|
|
199
|
+
if (reported.length === 0 && actual.length === 0)
|
|
200
|
+
return null;
|
|
201
|
+
// Agent says no files, but git shows changes
|
|
202
|
+
if (reported.length === 0 && actual.length > 0) {
|
|
203
|
+
return makeVerificationFlag({
|
|
204
|
+
severity: "warn",
|
|
205
|
+
field: "files_changed",
|
|
206
|
+
check: "files_integrity",
|
|
207
|
+
detail: `Agent reported no files changed but git shows: ${actual.join(", ")}`,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
// Compare reported vs actual
|
|
211
|
+
const ghostFiles = reported.filter(f => !actual.includes(f));
|
|
212
|
+
const missedFiles = actual.filter(f => !reported.includes(f));
|
|
213
|
+
if (ghostFiles.length > 0 || missedFiles.length > 0) {
|
|
214
|
+
const parts = [];
|
|
215
|
+
if (ghostFiles.length > 0)
|
|
216
|
+
parts.push(`unconfirmed: [${ghostFiles.join(", ")}]`);
|
|
217
|
+
if (missedFiles.length > 0)
|
|
218
|
+
parts.push(`unreported: [${missedFiles.join(", ")}]`);
|
|
219
|
+
return makeVerificationFlag({
|
|
220
|
+
severity: "warn",
|
|
221
|
+
field: "files_changed",
|
|
222
|
+
check: "files_integrity",
|
|
223
|
+
detail: `Agent files_changed doesn't match git: ${parts.join("; ")}`,
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
/** v1.18: Cross-validate agent-reported files_changed against git evidence.
|
|
229
|
+
*
|
|
230
|
+
* Compares agent's execution_evidence.files_changed against the git
|
|
231
|
+
* snapshot's merged file list (same logic as checkFilesIntegrity but
|
|
232
|
+
* driven by ProviderSnapshot instead of raw string array).
|
|
233
|
+
*
|
|
234
|
+
* Non-git evidence providers are cross-validated separately by
|
|
235
|
+
* checkCommandEvidenceIntegrity. */
|
|
236
|
+
function checkEvidenceIntegrity(selfEval, evidenceSnapshots) {
|
|
237
|
+
if (!selfEval.execution_evidence)
|
|
238
|
+
return null;
|
|
239
|
+
if (evidenceSnapshots.length === 0)
|
|
240
|
+
return null;
|
|
241
|
+
const gitSnap = evidenceSnapshots.find((s) => s.provider === "git");
|
|
242
|
+
if (!gitSnap)
|
|
243
|
+
return null;
|
|
244
|
+
const reported = [...selfEval.execution_evidence.files_changed].sort();
|
|
245
|
+
const actual = [...gitSnap.files].sort();
|
|
246
|
+
if (reported.length === 0 && actual.length === 0)
|
|
247
|
+
return null;
|
|
248
|
+
if (reported.length === 0 && actual.length > 0) {
|
|
249
|
+
return makeVerificationFlag({
|
|
250
|
+
severity: "warn",
|
|
251
|
+
field: "files_changed",
|
|
252
|
+
check: "evidence_integrity",
|
|
253
|
+
detail: `Agent reported no files changed but evidence shows: ${actual.join(", ")}`,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
const ghostFiles = reported.filter((f) => !actual.includes(f));
|
|
257
|
+
const missedFiles = actual.filter((f) => !reported.includes(f));
|
|
258
|
+
if (ghostFiles.length > 0 || missedFiles.length > 0) {
|
|
259
|
+
const parts = [];
|
|
260
|
+
if (ghostFiles.length > 0)
|
|
261
|
+
parts.push(`unconfirmed: [${ghostFiles.join(", ")}]`);
|
|
262
|
+
if (missedFiles.length > 0)
|
|
263
|
+
parts.push(`unreported: [${missedFiles.join(", ")}]`);
|
|
264
|
+
return makeVerificationFlag({
|
|
265
|
+
severity: "warn",
|
|
266
|
+
field: "files_changed",
|
|
267
|
+
check: "evidence_integrity",
|
|
268
|
+
detail: `Agent files_changed doesn't match evidence: ${parts.join("; ")}`,
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
/** A required, explicitly configured verification command is authoritative
|
|
274
|
+
* when the Agent claims success. Optional commands remain observational. */
|
|
275
|
+
function checkRequiredCommandEvidence(selfEval, evidenceSnapshots) {
|
|
276
|
+
if (!selfEval.success)
|
|
277
|
+
return null;
|
|
278
|
+
for (const snapshot of evidenceSnapshots) {
|
|
279
|
+
if (snapshot.data.kind !== "command")
|
|
280
|
+
continue;
|
|
281
|
+
if (snapshot.data.phase !== "after" || snapshot.data.required !== true)
|
|
282
|
+
continue;
|
|
283
|
+
const status = snapshot.data.status;
|
|
284
|
+
if (status === "passed")
|
|
285
|
+
continue;
|
|
286
|
+
const name = typeof snapshot.data.commandName === "string"
|
|
287
|
+
? snapshot.data.commandName
|
|
288
|
+
: snapshot.provider;
|
|
289
|
+
const exitCode = typeof snapshot.data.exitCode === "number"
|
|
290
|
+
? ` (exit ${snapshot.data.exitCode})`
|
|
291
|
+
: "";
|
|
292
|
+
return makeVerificationFlag({
|
|
293
|
+
severity: "error",
|
|
294
|
+
field: "execution_evidence",
|
|
295
|
+
check: "required_command_failed",
|
|
296
|
+
detail: `Agent claims success but required command "${name}" ${String(status)}${exitCode}`,
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
/** Best-effort parse of test counts from common test-runner output formats.
|
|
302
|
+
*
|
|
303
|
+
* Scans the last 2000 characters of stdout (where summary lines typically
|
|
304
|
+
* appear) and tries patterns in descending specificity order. Returns null
|
|
305
|
+
* when the output format is unrecognized, stdout is empty, or a confident
|
|
306
|
+
* parse cannot be made.
|
|
307
|
+
*
|
|
308
|
+
* Recognized formats: Jest verbose/compact, Mocha, pytest/unittest, Go test,
|
|
309
|
+
* and PHPUnit OK summaries. */
|
|
310
|
+
export function parseTestOutput(stdout) {
|
|
311
|
+
if (!stdout)
|
|
312
|
+
return null;
|
|
313
|
+
const tail = stdout.length > 2000 ? stdout.slice(-2000) : stdout;
|
|
314
|
+
let match;
|
|
315
|
+
// 1. Jest verbose: "Tests: 1 failed, 8 passed, 9 total"
|
|
316
|
+
match = tail.match(/Tests:\s*(\d+)\s+failed,\s*(\d+)\s+passed,\s*(\d+)\s+total/i);
|
|
317
|
+
if (match) {
|
|
318
|
+
return { failed: Number(match[1]), passed: Number(match[2]), total: Number(match[3]), skipped: 0 };
|
|
319
|
+
}
|
|
320
|
+
// 2. Jest compact: "Tests: 8 passed, 9 total"
|
|
321
|
+
match = tail.match(/Tests:\s*(\d+)\s+passed,\s*(\d+)\s+total/i);
|
|
322
|
+
if (match) {
|
|
323
|
+
const passed = Number(match[1]);
|
|
324
|
+
const total = Number(match[2]);
|
|
325
|
+
return { passed, failed: total - passed, total, skipped: 0 };
|
|
326
|
+
}
|
|
327
|
+
// 3. Mocha: "8 passing" + optional "2 failing"
|
|
328
|
+
const mochaPass = tail.match(/(\d+)\s+passing/i);
|
|
329
|
+
if (mochaPass) {
|
|
330
|
+
const mochaFail = tail.match(/(\d+)\s+failing/i);
|
|
331
|
+
const passed = Number(mochaPass[1]);
|
|
332
|
+
const failed = mochaFail ? Number(mochaFail[1]) : 0;
|
|
333
|
+
return { passed, failed, total: passed + failed, skipped: 0 };
|
|
334
|
+
}
|
|
335
|
+
// 4. Go test: count "--- PASS:" and "--- FAIL:" lines
|
|
336
|
+
const goPassCount = (tail.match(/---\s+PASS:/g) || []).length;
|
|
337
|
+
const goFailCount = (tail.match(/---\s+FAIL:/g) || []).length;
|
|
338
|
+
if (goPassCount > 0 || goFailCount > 0) {
|
|
339
|
+
return { passed: goPassCount, failed: goFailCount, total: goPassCount + goFailCount, skipped: 0 };
|
|
340
|
+
}
|
|
341
|
+
// 5. pytest / unittest: "8 passed, 1 failed" or "8 passed"
|
|
342
|
+
match = tail.match(/(\d+)\s+passed[,;\s]+(\d+)\s+failed/i);
|
|
343
|
+
if (match) {
|
|
344
|
+
return { passed: Number(match[1]), failed: Number(match[2]), total: Number(match[1]) + Number(match[2]), skipped: 0 };
|
|
345
|
+
}
|
|
346
|
+
// pytest compact: "8 passed" (with a reasonable context hint)
|
|
347
|
+
match = tail.match(/(?:=\s+test session|\b(?:passed|failed)\b)/i);
|
|
348
|
+
if (match) {
|
|
349
|
+
const pCount = tail.match(/(\d+)\s+passed/i);
|
|
350
|
+
const fCount = tail.match(/(\d+)\s+failed/i);
|
|
351
|
+
if (pCount || fCount) {
|
|
352
|
+
const passed = pCount ? Number(pCount[1]) : 0;
|
|
353
|
+
const failed = fCount ? Number(fCount[1]) : 0;
|
|
354
|
+
return { passed, failed, total: passed + failed, skipped: 0 };
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
// 6. PHPUnit: "OK (8 tests, 16 assertions)"
|
|
358
|
+
match = tail.match(/OK\s*\((\d+)\s+tests?/i);
|
|
359
|
+
if (match) {
|
|
360
|
+
const total = Number(match[1]);
|
|
361
|
+
return { passed: total, failed: 0, total, skipped: 0 };
|
|
362
|
+
}
|
|
363
|
+
return null;
|
|
364
|
+
}
|
|
365
|
+
/** Cross-validate agent-reported test_results against command evidence output.
|
|
366
|
+
*
|
|
367
|
+
* For each command provider whose status is "passed" and output is not
|
|
368
|
+
* truncated, attempts to parse test counts from stdout. Mismatched counts
|
|
369
|
+
* produce a warn-level flag; failures hidden by the agent (reported 0 failed
|
|
370
|
+
* when the command shows >0) produce an error-level flag.
|
|
371
|
+
*
|
|
372
|
+
* Non-command evidence providers are skipped (no structural cross-check is
|
|
373
|
+
* defined for them yet). */
|
|
374
|
+
function checkCommandEvidenceIntegrity(selfEval, evidenceSnapshots) {
|
|
375
|
+
const reported = selfEval.execution_evidence?.test_results;
|
|
376
|
+
if (!reported)
|
|
377
|
+
return null;
|
|
378
|
+
for (const snapshot of evidenceSnapshots) {
|
|
379
|
+
if (snapshot.data.kind !== "command")
|
|
380
|
+
continue;
|
|
381
|
+
if (snapshot.data.status !== "passed")
|
|
382
|
+
continue;
|
|
383
|
+
if (snapshot.data.truncated === true)
|
|
384
|
+
continue;
|
|
385
|
+
const stdout = typeof snapshot.data.stdout === "string" ? snapshot.data.stdout : "";
|
|
386
|
+
const parsed = parseTestOutput(stdout);
|
|
387
|
+
if (!parsed)
|
|
388
|
+
continue;
|
|
389
|
+
const mismatches = [];
|
|
390
|
+
if (parsed.passed !== reported.passed) {
|
|
391
|
+
mismatches.push(`passed: reported ${reported.passed}, command shows ${parsed.passed}`);
|
|
392
|
+
}
|
|
393
|
+
if (parsed.failed !== reported.failed) {
|
|
394
|
+
mismatches.push(`failed: reported ${reported.failed}, command shows ${parsed.failed}`);
|
|
395
|
+
}
|
|
396
|
+
if (mismatches.length === 0) {
|
|
397
|
+
// Counts match exactly — evidence supports the agent's claim.
|
|
398
|
+
continue;
|
|
399
|
+
}
|
|
400
|
+
const name = typeof snapshot.data.commandName === "string"
|
|
401
|
+
? snapshot.data.commandName
|
|
402
|
+
: snapshot.provider;
|
|
403
|
+
// Agent hides failures → error. Other mismatch → warn.
|
|
404
|
+
const severity = parsed.failed > 0 && reported.failed === 0 ? "error" : "warn";
|
|
405
|
+
return makeVerificationFlag({
|
|
406
|
+
severity,
|
|
407
|
+
field: "test_results",
|
|
408
|
+
check: "command_evidence_mismatch",
|
|
409
|
+
detail: `Agent test_results don't match "${name}" output: ${mismatches.join("; ")}`,
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
return null;
|
|
413
|
+
}
|
|
184
414
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
185
415
|
// Main entry point
|
|
186
416
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
187
417
|
/** Verify a SelfEvaluation against the loop's cross-round lineage.
|
|
188
418
|
*
|
|
189
|
-
* @param selfEval
|
|
190
|
-
* @param currentRound
|
|
191
|
-
* @param vaultEntries
|
|
192
|
-
* @param prevSelfEval
|
|
193
|
-
*
|
|
194
|
-
|
|
195
|
-
|
|
419
|
+
* @param selfEval The agent's self-evaluation for the current round.
|
|
420
|
+
* @param currentRound The current round number (1-based).
|
|
421
|
+
* @param vaultEntries Vault entries for this loop (non-feedback only).
|
|
422
|
+
* @param prevSelfEval The agent's self-evaluation from the previous round
|
|
423
|
+
* (null for round 1).
|
|
424
|
+
* @param runtimeFilesChanged v1.16: Files detected as changed by git diff between
|
|
425
|
+
* before/after execute. null if git is unavailable.
|
|
426
|
+
* Used by checkFilesIntegrity to cross-validate
|
|
427
|
+
* agent-reported files_changed against reality.
|
|
428
|
+
* @param evidenceSnapshots v1.18: Evidence snapshots from configured providers.
|
|
429
|
+
* Used by checkEvidenceIntegrity for multi-provider
|
|
430
|
+
* cross-validation. Defaults to empty array. */
|
|
431
|
+
export function verifySelfEvaluation(selfEval, currentRound, vaultEntries, prevSelfEval = null, runtimeFilesChanged = null, evidenceSnapshots = []) {
|
|
196
432
|
const flags = [];
|
|
197
433
|
// Collect violations from all previous vault entries for duplicate-discovery
|
|
198
434
|
// and other checks that need deeper history.
|
|
@@ -209,6 +445,13 @@ export function verifySelfEvaluation(selfEval, currentRound, vaultEntries, prevS
|
|
|
209
445
|
() => checkDuplicateConstraintDiscovery(selfEval, prevSelfEval, olderViolations),
|
|
210
446
|
() => checkRecurringViolation(selfEval, prevSelfEval, vaultEntries, currentRound),
|
|
211
447
|
() => checkRetractFreshConstraint(selfEval, prevSelfEval, currentRound),
|
|
448
|
+
// v1.16: Cross-validate agent-reported files_changed against git reality
|
|
449
|
+
() => checkFilesIntegrity(selfEval, runtimeFilesChanged),
|
|
450
|
+
// v1.18: Cross-validate against evidence snapshots from all providers
|
|
451
|
+
() => checkEvidenceIntegrity(selfEval, evidenceSnapshots),
|
|
452
|
+
() => checkRequiredCommandEvidence(selfEval, evidenceSnapshots),
|
|
453
|
+
// v2.0: Cross-validate agent-reported test_results against command output
|
|
454
|
+
() => checkCommandEvidenceIntegrity(selfEval, evidenceSnapshots),
|
|
212
455
|
];
|
|
213
456
|
for (const run of checks) {
|
|
214
457
|
const flag = run();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-gate.js","sourceRoot":"","sources":["../src/verification-gate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verification-gate.js","sourceRoot":"","sources":["../src/verification-gate.ts"],"names":[],"mappings":"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"}
|