loopforge 3.7.0 → 3.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +171 -157
- package/dist/audit.d.ts +53 -1
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +106 -22
- package/dist/audit.js.map +1 -1
- package/dist/canonical-state.d.ts +75 -69
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +276 -168
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +111 -12
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-facts.d.ts +13 -0
- package/dist/cognitive-facts.d.ts.map +1 -1
- package/dist/cognitive-facts.js +30 -16
- package/dist/cognitive-facts.js.map +1 -1
- package/dist/cognitive-governance.d.ts +30 -6
- package/dist/cognitive-governance.d.ts.map +1 -1
- package/dist/cognitive-governance.js +74 -18
- package/dist/cognitive-governance.js.map +1 -1
- package/dist/committed-round.d.ts +109 -24
- package/dist/committed-round.d.ts.map +1 -1
- package/dist/committed-round.js +235 -52
- package/dist/committed-round.js.map +1 -1
- package/dist/contract-items.d.ts +55 -0
- package/dist/contract-items.d.ts.map +1 -0
- package/dist/contract-items.js +180 -0
- package/dist/contract-items.js.map +1 -0
- package/dist/enforcement-gate.d.ts +43 -20
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +269 -378
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +11 -6
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +102 -67
- package/dist/engine.js.map +1 -1
- package/dist/evidence-claims.d.ts +4 -4
- package/dist/evidence-claims.d.ts.map +1 -1
- package/dist/evidence-claims.js +16 -14
- package/dist/evidence-claims.js.map +1 -1
- package/dist/evidence-provider.d.ts +91 -90
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +349 -160
- package/dist/evidence-provider.js.map +1 -1
- package/dist/explain.d.ts +76 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +127 -0
- package/dist/explain.js.map +1 -0
- package/dist/generate-schema.js +250 -53
- package/dist/generate-schema.js.map +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -6
- package/dist/index.js.map +1 -1
- package/dist/loop-compiler.d.ts +41 -40
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +275 -515
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-extras-parser.d.ts +0 -1
- package/dist/loop-extras-parser.d.ts.map +1 -1
- package/dist/loop-extras-parser.js +0 -4
- package/dist/loop-extras-parser.js.map +1 -1
- package/dist/loop-projection.d.ts.map +1 -1
- package/dist/loop-projection.js +3 -1
- package/dist/loop-projection.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +40 -21
- package/dist/mcp/round-lifecycle.d.ts.map +1 -1
- package/dist/mcp/round-lifecycle.js +173 -120
- package/dist/mcp/round-lifecycle.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +63 -10
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +53 -7
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +240 -139
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/submission-boundary.d.ts +89 -0
- package/dist/mcp/submission-boundary.d.ts.map +1 -0
- package/dist/mcp/submission-boundary.js +203 -0
- package/dist/mcp/submission-boundary.js.map +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +377 -125
- package/dist/mcp/tools.js.map +1 -1
- package/dist/policy-metrics.js +2 -2
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +65 -95
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +151 -39
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +7 -33
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +313 -473
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-policy.d.ts +1 -4
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +6 -7
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +411 -168
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +23 -69
- package/dist/protocol.js.map +1 -1
- package/dist/replay.js +2 -2
- package/dist/replay.js.map +1 -1
- package/dist/round-contract.d.ts +69 -57
- package/dist/round-contract.d.ts.map +1 -1
- package/dist/round-contract.js +104 -64
- package/dist/round-contract.js.map +1 -1
- package/dist/round-coordinator.d.ts +55 -16
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +179 -57
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +7 -5
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +2 -1
- package/dist/round-driver.js.map +1 -1
- package/dist/round-facts.d.ts +96 -0
- package/dist/round-facts.d.ts.map +1 -0
- package/dist/round-facts.js +216 -0
- package/dist/round-facts.js.map +1 -0
- package/dist/round-transaction.d.ts +23 -9
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +99 -22
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +127 -11
- package/dist/self-eval.d.ts.map +1 -1
- package/dist/self-eval.js +517 -36
- package/dist/self-eval.js.map +1 -1
- package/dist/subgoal-state.d.ts +77 -0
- package/dist/subgoal-state.d.ts.map +1 -0
- package/dist/subgoal-state.js +198 -0
- package/dist/subgoal-state.js.map +1 -0
- package/dist/token-utils.d.ts +52 -19
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +83 -72
- package/dist/token-utils.js.map +1 -1
- package/dist/verification-gate.d.ts +27 -46
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +308 -557
- package/dist/verification-gate.js.map +1 -1
- package/dist/version.d.ts +5 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/dist/workspace.d.ts +9 -0
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +17 -0
- package/dist/workspace.js.map +1 -1
- package/loop_policy.json +17 -25
- package/package.json +7 -7
- package/skills/perception/SKILL.md +266 -64
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* audit and handoff purposes.
|
|
8
8
|
*
|
|
9
9
|
* Rules (honesty first — machine evidence is the only upgrade path):
|
|
10
|
-
* - every `
|
|
10
|
+
* - every met `criterion_claims` entry is a claim, `claimed` by default;
|
|
11
11
|
* - upgraded to `verified` only when a machine-verifiable test pass is
|
|
12
12
|
* observed (test results with 0 failures AND a passed after-phase
|
|
13
13
|
* command snapshot);
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* the machine contradicted the claim.
|
|
16
16
|
*/
|
|
17
17
|
import type { VaultEntry } from "./loop-store.js";
|
|
18
|
-
import type {
|
|
18
|
+
import type { MachineObservation } from "./protocol.js";
|
|
19
19
|
import type { SelfEvaluation, VerificationFlag } from "./protocol.js";
|
|
20
20
|
export interface DerivedClaim {
|
|
21
21
|
/** Success criterion text as reported by the agent. */
|
|
@@ -35,11 +35,11 @@ export interface ClaimView {
|
|
|
35
35
|
}
|
|
36
36
|
/** Derive the runtime claim view for a round. No file-level or text-level
|
|
37
37
|
* guessing: git observations only serve the evidence_integrity warn. */
|
|
38
|
-
export declare function deriveClaimView(selfEval: SelfEvaluation, evidenceSnapshots:
|
|
38
|
+
export declare function deriveClaimView(selfEval: SelfEvaluation, evidenceSnapshots: MachineObservation[]): ClaimView;
|
|
39
39
|
/** Re-derive a claim view including the contradiction downgrade driven by
|
|
40
40
|
* verification flags. Used by audit and listVerifiedClaims on persisted
|
|
41
41
|
* snapshots; the live round path uses deriveClaimView only. */
|
|
42
|
-
export declare function rederiveClaimViewWithFlags(selfEval: SelfEvaluation, evidenceSnapshots:
|
|
42
|
+
export declare function rederiveClaimViewWithFlags(selfEval: SelfEvaluation, evidenceSnapshots: MachineObservation[], flags: VerificationFlag[]): ClaimView;
|
|
43
43
|
/** Files actually changed in a committed round (git provider, after evidence
|
|
44
44
|
* preferred). Returns null when the round has no observable git snapshot. */
|
|
45
45
|
export declare function resolveRoundFiles(vaultEntries: VaultEntry[], loopId: string, round: number): string[] | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-claims.d.ts","sourceRoot":"","sources":["../src/evidence-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"evidence-claims.d.ts","sourceRoot":"","sources":["../src/evidence-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGxD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtE,MAAM,WAAW,YAAY;IAC3B,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,cAAc,CAAC;IAChD,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,cAAc,CAAC;IAC1D,2DAA2D;IAC3D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wEAAwE;IACxE,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AA2BD;yEACyE;AACzE,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,cAAc,EACxB,iBAAiB,EAAE,kBAAkB,EAAE,GACtC,SAAS,CAoBX;AAED;;gEAEgE;AAChE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,cAAc,EACxB,iBAAiB,EAAE,kBAAkB,EAAE,EACvC,KAAK,EAAE,gBAAgB,EAAE,GACxB,SAAS,CAcX;AAED;8EAC8E;AAC9E,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,UAAU,EAAE,EAC1B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,GAAG,IAAI,CAUjB;AAED;;iEAEiE;AACjE,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,UAAU,EAAE,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,EAAE,CAeV"}
|
package/dist/evidence-claims.js
CHANGED
|
@@ -7,15 +7,16 @@
|
|
|
7
7
|
* audit and handoff purposes.
|
|
8
8
|
*
|
|
9
9
|
* Rules (honesty first — machine evidence is the only upgrade path):
|
|
10
|
-
* - every `
|
|
10
|
+
* - every met `criterion_claims` entry is a claim, `claimed` by default;
|
|
11
11
|
* - upgraded to `verified` only when a machine-verifiable test pass is
|
|
12
12
|
* observed (test results with 0 failures AND a passed after-phase
|
|
13
13
|
* command snapshot);
|
|
14
14
|
* - downgraded to `contradicted` when error-level verification flags say
|
|
15
15
|
* the machine contradicted the claim.
|
|
16
16
|
*/
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
17
|
+
import { machineEvidenceForRound, readOnlyRounds } from "./committed-round.js";
|
|
18
|
+
import { isPassedAfterObservation } from "./evidence-provider.js";
|
|
19
|
+
import { claimedMetCriteria } from "./self-eval.js";
|
|
19
20
|
/** Contradicting error flags that invalidate agent claims. */
|
|
20
21
|
// NOTE: keep these as literals — importing the CHECK_* constants here would
|
|
21
22
|
// create a verification-gate ⇄ evidence-claims import cycle.
|
|
@@ -25,22 +26,23 @@ const CONTRADICTING_CHECKS = new Set([
|
|
|
25
26
|
"success_with_remaining_criteria",
|
|
26
27
|
]);
|
|
27
28
|
function hasPassingTestEvidence(selfEval) {
|
|
28
|
-
const results = selfEval.
|
|
29
|
+
const results = selfEval.execution_report?.tests_reported;
|
|
29
30
|
return results !== null &&
|
|
30
31
|
results !== undefined &&
|
|
31
32
|
results.failed === 0 &&
|
|
32
33
|
results.passed > 0;
|
|
33
34
|
}
|
|
34
|
-
function hasPassedAfterCommand(
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
function hasPassedAfterCommand(observations) {
|
|
36
|
+
// v3.8: ONE predicate — the gate's entrypoint-tamper exclusion and this
|
|
37
|
+
// module's check were two divergent definitions of "machine-backed".
|
|
38
|
+
const git = observations.find((item) => item.providerId === "git") ?? null;
|
|
39
|
+
const changed = git ? new Set(git.files) : null;
|
|
40
|
+
return observations.some((item) => isPassedAfterObservation(item, changed));
|
|
39
41
|
}
|
|
40
42
|
/** Derive the runtime claim view for a round. No file-level or text-level
|
|
41
43
|
* guessing: git observations only serve the evidence_integrity warn. */
|
|
42
44
|
export function deriveClaimView(selfEval, evidenceSnapshots) {
|
|
43
|
-
const met = selfEval.
|
|
45
|
+
const met = claimedMetCriteria(selfEval.execution_report);
|
|
44
46
|
const machineVerified = hasPassingTestEvidence(selfEval) &&
|
|
45
47
|
hasPassedAfterCommand(evidenceSnapshots);
|
|
46
48
|
const claims = met.map((targetId) => ({
|
|
@@ -53,7 +55,7 @@ export function deriveClaimView(selfEval, evidenceSnapshots) {
|
|
|
53
55
|
verifiedCount: claims.filter((claim) => claim.status === "verified").length,
|
|
54
56
|
contradictedCount: 0,
|
|
55
57
|
// v3.3: machine evidence requires a passed after-phase command observed
|
|
56
|
-
// by the runtime itself — the agent's self-reported
|
|
58
|
+
// by the runtime itself — the agent's self-reported tests_reported are a
|
|
57
59
|
// claim, not evidence. Without a passed command, R8 and the
|
|
58
60
|
// criteria-claims check can no longer be satisfied by fabrication.
|
|
59
61
|
hasMachineEvidence: hasPassingTestEvidence(selfEval) &&
|
|
@@ -80,12 +82,12 @@ export function rederiveClaimViewWithFlags(selfEval, evidenceSnapshots, flags) {
|
|
|
80
82
|
/** Files actually changed in a committed round (git provider, after evidence
|
|
81
83
|
* preferred). Returns null when the round has no observable git snapshot. */
|
|
82
84
|
export function resolveRoundFiles(vaultEntries, loopId, round) {
|
|
83
|
-
const committed =
|
|
85
|
+
const committed = readOnlyRounds(vaultEntries)
|
|
84
86
|
.find((view) => view.loopId === loopId && view.round === round);
|
|
85
87
|
if (!committed)
|
|
86
88
|
return null;
|
|
87
89
|
const evidence = machineEvidenceForRound(committed);
|
|
88
|
-
const git = evidence.find((item) =>
|
|
90
|
+
const git = evidence.find((item) => item.providerId === "git" && Array.isArray(item.files));
|
|
89
91
|
if (!git)
|
|
90
92
|
return null;
|
|
91
93
|
return git.files.filter((file) => typeof file === "string");
|
|
@@ -95,7 +97,7 @@ export function resolveRoundFiles(vaultEntries, loopId, round) {
|
|
|
95
97
|
* know the objective; this returns the raw verified targets. */
|
|
96
98
|
export function listVerifiedClaims(vaultEntries, loopId) {
|
|
97
99
|
const verified = new Set();
|
|
98
|
-
for (const round of
|
|
100
|
+
for (const round of readOnlyRounds(vaultEntries)) {
|
|
99
101
|
if (round.loopId !== loopId || !round.evaluation)
|
|
100
102
|
continue;
|
|
101
103
|
const evidence = machineEvidenceForRound(round);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-claims.js","sourceRoot":"","sources":["../src/evidence-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"evidence-claims.js","sourceRoot":"","sources":["../src/evidence-claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE/E,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAoBpD,8DAA8D;AAC9D,4EAA4E;AAC5E,6DAA6D;AAC7D,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,yBAAyB;IACzB,2BAA2B;IAC3B,iCAAiC;CAClC,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAAC,QAAwB;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,EAAE,cAAc,CAAC;IAC1D,OAAO,OAAO,KAAK,IAAI;QACrB,OAAO,KAAK,SAAS;QACrB,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAkC;IAC/D,wEAAwE;IACxE,qEAAqE;IACrE,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC;IAC3E,MAAM,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,eAAe,CAC7B,QAAwB,EACxB,iBAAuC;IAEvC,MAAM,GAAG,GAAG,kBAAkB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,sBAAsB,CAAC,QAAQ,CAAC;QACtD,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAmB,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACpD,QAAQ;QACR,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QAChD,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;KAC9C,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,MAAM;QACN,aAAa,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;QAC3E,iBAAiB,EAAE,CAAC;QACpB,wEAAwE;QACxE,yEAAyE;QACzE,4DAA4D;QAC5D,mEAAmE;QACnE,kBAAkB,EAAE,sBAAsB,CAAC,QAAQ,CAAC;YAClD,qBAAqB,CAAC,iBAAiB,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED;;gEAEgE;AAChE,MAAM,UAAU,0BAA0B,CACxC,QAAwB,EACxB,iBAAuC,EACvC,KAAyB;IAEzB,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,IAAI,CAAC,QAAQ,KAAK,OAAO,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACrE,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxC,GAAG,KAAK;YACR,MAAM,EAAE,cAAuB;YAC/B,MAAM,EAAE,cAAuB;SAChC,CAAC,CAAC,CAAC;QACJ,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC9C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;8EAC8E;AAC9E,MAAM,UAAU,iBAAiB,CAC/B,YAA0B,EAC1B,MAAc,EACd,KAAa;IAEb,MAAM,SAAS,GAAG,cAAc,CAAC,YAAY,CAAC;SAC3C,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAClE,IAAI,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IAC5B,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CACjC,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CACnB,CAAC;IACtC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAQ,GAAG,CAAC,KAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC7F,CAAC;AAED;;iEAEiE;AACjE,MAAM,UAAU,kBAAkB,CAChC,YAA0B,EAC1B,MAAc;IAEd,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU;YAAE,SAAS;QAC3D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,0BAA0B,CACrC,KAAK,CAAC,UAAU,EAChB,QAAQ,EACR,KAAK,CAAC,iBAAiB,CACxB,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;gBAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -1,25 +1,16 @@
|
|
|
1
|
-
/** EvidenceProvider — Pluggable
|
|
1
|
+
/** EvidenceProvider — Pluggable machine-observation capture (v1.18 / v3.8).
|
|
2
2
|
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* v3.8: providers produce `MachineObservation`s, not ad-hoc snapshots. A
|
|
4
|
+
* configured provider ALWAYS yields an observation: unavailability, timeouts,
|
|
5
|
+
* errors and aborts are recorded as observations with the matching status and
|
|
6
|
+
* are never silently filtered out of the round's factual record. Only
|
|
7
|
+
* observations can create a `verified` fact — agent self-reports never can.
|
|
6
8
|
*
|
|
7
|
-
* Built-in
|
|
8
|
-
*
|
|
9
|
+
* Built-in: GitEvidenceProvider — git file state capture with parallel async
|
|
10
|
+
* execution (v2.0.1), plus explicitly configured shell-free command providers.
|
|
9
11
|
*/
|
|
10
|
-
import type {
|
|
11
|
-
|
|
12
|
-
export interface ProviderSnapshot {
|
|
13
|
-
/** Provider name (e.g. "git", "jest", "eslint"). */
|
|
14
|
-
provider: string;
|
|
15
|
-
/** Unix-ms timestamp of capture. */
|
|
16
|
-
timestamp: number;
|
|
17
|
-
/** File paths relevant to this evidence (for backward compat with
|
|
18
|
-
* runtimeFilesChanged). */
|
|
19
|
-
files: string[];
|
|
20
|
-
/** Provider-specific structured data. */
|
|
21
|
-
data: Record<string, unknown>;
|
|
22
|
-
}
|
|
12
|
+
import type { CommandObservation, ConfiguredCapability, EvidenceCapability, GitObservation, MachineObservation, ObservedCapability } from "./protocol.js";
|
|
13
|
+
import type { CommandEvidencePolicy, LoopPolicy } from "./policy.js";
|
|
23
14
|
/** Interface for evidence capture providers.
|
|
24
15
|
*
|
|
25
16
|
* Implementations may be synchronous or asynchronous. Async implementations
|
|
@@ -30,13 +21,19 @@ export interface EvidenceCaptureContext {
|
|
|
30
21
|
timeoutMs: number;
|
|
31
22
|
loopId?: string;
|
|
32
23
|
phase: "before" | "after";
|
|
24
|
+
/** Workspace root override (tests capture against temp repos). */
|
|
25
|
+
cwd?: string;
|
|
33
26
|
}
|
|
34
|
-
export type EvidenceCaptureResult =
|
|
27
|
+
export type EvidenceCaptureResult = MachineObservation | null | Promise<MachineObservation | null>;
|
|
35
28
|
export interface EvidenceProvider {
|
|
36
29
|
/** Unique provider name. Used in policy to enable/disable. */
|
|
37
30
|
readonly name: string;
|
|
38
|
-
/**
|
|
39
|
-
*
|
|
31
|
+
/** Observation kind this provider produces (used for the synthetic
|
|
32
|
+
* unavailable/timeout/error observations too). */
|
|
33
|
+
readonly kind: MachineObservation["kind"];
|
|
34
|
+
/** Capture an observation. Returns null when the provider is structurally
|
|
35
|
+
* unavailable (e.g. not a git repository); the collector converts that
|
|
36
|
+
* into an explicit `unavailable` observation rather than dropping it. */
|
|
40
37
|
capture(context?: EvidenceCaptureContext): EvidenceCaptureResult;
|
|
41
38
|
}
|
|
42
39
|
export interface EvidenceCollectOptions {
|
|
@@ -48,52 +45,74 @@ export type EvidenceProviderFactory = () => EvidenceProvider;
|
|
|
48
45
|
/** Register a provider factory used by policy-driven collectors. */
|
|
49
46
|
export declare function registerEvidenceProvider(name: string, factory: EvidenceProviderFactory): void;
|
|
50
47
|
export declare function unregisterEvidenceProvider(name: string): boolean;
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
48
|
+
/** v3.8: Whether a provider factory is registered for this name. Readiness
|
|
49
|
+
* of the RUNTIME (PATH resolution, executables) is a `doctor` concern and is
|
|
50
|
+
* deliberately not part of the hashed capability. */
|
|
51
|
+
export declare function isProviderRegistered(name: string): boolean;
|
|
52
|
+
/** v3.8: The ONE machine-backed predicate. A command observation proves a
|
|
53
|
+
* claim only when it is an after-phase command that PASSED and whose
|
|
54
|
+
* entrypoint was not modified in the same round. Before-phase observations
|
|
55
|
+
* are the baseline and never evidence. When no git delta is available the
|
|
56
|
+
* entrypoint arm fails open (matching the historical behaviour).
|
|
53
57
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
*/
|
|
58
|
+
* v3.8 replaced two divergent implementations (the gate excluded tampered
|
|
59
|
+
* commands, evidence-claims did not) with this single function. */
|
|
60
|
+
export declare function isPassedAfterObservation(observation: MachineObservation, gitChangedFiles: ReadonlySet<string> | null): boolean;
|
|
61
|
+
/** v3.8: The changed-file set of a round's git observation, or null when no
|
|
62
|
+
* git observation exists (entrypoint checks then fail open). */
|
|
63
|
+
export declare function gitChangedFiles(observations: ReadonlyArray<MachineObservation>): Set<string> | null;
|
|
64
|
+
/** v3.8: Live capability derived from observations. Rendered only — never
|
|
65
|
+
* hashed, never persisted independently (it is a pure function of the
|
|
66
|
+
* observations it is given). */
|
|
67
|
+
export declare function deriveObservedCapability(observations: ReadonlyArray<MachineObservation>, configured: ConfiguredCapability): ObservedCapability;
|
|
68
|
+
/** v3.8: Human-readable capability warnings for start/resume/status. A loop
|
|
69
|
+
* with no machine verification can still run — its success claims are simply
|
|
70
|
+
* recorded as `insufficient` instead of `verified`. */
|
|
71
|
+
export declare function capabilityWarnings(configured: ConfiguredCapability, observed?: ObservedCapability): string[];
|
|
72
|
+
/** v3.8: The ONE capability derivation. Everything that speaks about
|
|
73
|
+
* capability — `RoundDriver.prepare()`, MCP start/resume/next/status, the
|
|
74
|
+
* capability warnings — reads this, so the surfaces cannot drift into
|
|
75
|
+
* different stories about what the runtime can observe.
|
|
76
|
+
*
|
|
77
|
+
* `available` is provider-REGISTRY state (code, not policy): it is rendered
|
|
78
|
+
* and reported by `doctor`, never hashed. The hashed half stays
|
|
79
|
+
* `deriveConfiguredCapability(policy)` inside the canonical state. */
|
|
80
|
+
export declare function deriveEvidenceCapability(policy: LoopPolicy, observations?: ReadonlyArray<MachineObservation>): EvidenceCapability;
|
|
81
|
+
/** Collects observations from all configured providers (always async).
|
|
82
|
+
*
|
|
83
|
+
* v3.8: every configured provider produces exactly one observation per
|
|
84
|
+
* collection. A provider that returns null, throws, times out, or is aborted
|
|
85
|
+
* yields an observation with `unavailable` / `error` / `timeout` / `aborted`
|
|
86
|
+
* — the round's factual record keeps the gap instead of hiding it. */
|
|
59
87
|
export declare class EvidenceCollector {
|
|
60
88
|
private providers;
|
|
61
89
|
constructor(providers: EvidenceProvider[]);
|
|
62
|
-
/** Build the collector described by loop_policy.json.
|
|
63
|
-
*
|
|
90
|
+
/** Build the collector described by loop_policy.json. Every configured name
|
|
91
|
+
* yields exactly one provider, in configuration order: a name with no
|
|
92
|
+
* registered factory gets `unregisteredProvider`, which records
|
|
93
|
+
* `unavailable` rather than letting a configured provider vanish without a
|
|
94
|
+
* trace. */
|
|
64
95
|
static fromProviderNames(providerNames: string[]): EvidenceCollector;
|
|
65
96
|
/** Build built-ins and explicitly configured command providers. */
|
|
66
97
|
static fromPolicy(): EvidenceCollector;
|
|
67
98
|
/** Capture all providers concurrently with per-provider timeout isolation. */
|
|
68
|
-
collectAsync(options?: EvidenceCollectOptions): Promise<
|
|
69
|
-
}
|
|
70
|
-
export interface CommandEvidenceData extends Record<string, unknown> {
|
|
71
|
-
kind: "command";
|
|
72
|
-
commandName: string;
|
|
73
|
-
required: boolean;
|
|
74
|
-
phase: "before" | "after";
|
|
75
|
-
status: "passed" | "failed" | "timeout" | "missing" | "invalid_cwd" | "aborted";
|
|
76
|
-
exitCode: number | null;
|
|
77
|
-
signal: string | null;
|
|
78
|
-
durationMs: number;
|
|
79
|
-
stdout: string;
|
|
80
|
-
stderr: string;
|
|
81
|
-
truncated: boolean;
|
|
82
|
-
/** v3.3: Workspace files this command depends on (resolved at capture
|
|
83
|
-
* time from executable + args, plus package.json). The verification gate
|
|
84
|
-
* cross-checks these against the round's git diff to detect verification
|
|
85
|
-
* domain tampering — a command whose entrypoint changed this round is not
|
|
86
|
-
* trustworthy. Forward-slash paths (git convention). Empty = unresolvable
|
|
87
|
-
* (external command like `bash -c`) — the gate fails open. */
|
|
88
|
-
entrypointFiles: string[];
|
|
99
|
+
collectAsync(options?: EvidenceCollectOptions): Promise<MachineObservation[]>;
|
|
89
100
|
}
|
|
101
|
+
/** The workspace files a command's execution depends on, resolved
|
|
102
|
+
* statically: the script it names on its own command line, plus package.json
|
|
103
|
+
* when a package manager is what runs it. Exported for the pure-function
|
|
104
|
+
* test — spawning a real package manager is not portable (a bare `npm`
|
|
105
|
+
* cannot be spawned without a shell, and the runtime uses `shell: false`). */
|
|
106
|
+
export declare function resolveEntrypointFiles(executable: string, args: string[], cwd: string): string[];
|
|
90
107
|
/** Explicit, shell-free verification command. Disabled unless configured. */
|
|
91
108
|
export declare class CommandEvidenceProvider implements EvidenceProvider {
|
|
92
109
|
readonly name: string;
|
|
110
|
+
readonly kind: "command";
|
|
93
111
|
private readonly config;
|
|
112
|
+
private readonly configHash;
|
|
94
113
|
constructor(config: CommandEvidencePolicy);
|
|
95
|
-
capture(context?: EvidenceCaptureContext): Promise<
|
|
96
|
-
private
|
|
114
|
+
capture(context?: EvidenceCaptureContext): Promise<CommandObservation | null>;
|
|
115
|
+
private observation;
|
|
97
116
|
}
|
|
98
117
|
/** v1.17: Result of capturing git file state across all three categories. */
|
|
99
118
|
export interface GitFileState {
|
|
@@ -119,44 +138,26 @@ export interface GitFileState {
|
|
|
119
138
|
* Performance: wall-clock time is max(single-command), not sum(3).
|
|
120
139
|
* On a normal repo (~200ms/command): ~200ms vs ~600ms sequential.
|
|
121
140
|
* On Windows with antivirus (~4s/command): ~4s vs ~12s sequential. */
|
|
122
|
-
export declare function captureGitFileStateAsync(signal?: AbortSignal, timeoutMs?: number
|
|
123
|
-
/**
|
|
124
|
-
*
|
|
141
|
+
export declare function captureGitFileStateAsync(signal?: AbortSignal, timeoutMs?: number,
|
|
142
|
+
/** Workspace root; injectable so tests can capture against a temp repo.
|
|
143
|
+
* Defaults to the process cwd, matching the evidence providers. */
|
|
144
|
+
cwd?: string): Promise<GitFileState | null>;
|
|
125
145
|
export declare class GitEvidenceProvider implements EvidenceProvider {
|
|
126
146
|
readonly name = "git";
|
|
127
|
-
|
|
147
|
+
readonly kind: "git";
|
|
148
|
+
capture(context?: EvidenceCaptureContext): Promise<GitObservation | null>;
|
|
128
149
|
}
|
|
129
|
-
/** Extract merged file list from
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* Looks for the "git" provider first; falls back to merging all
|
|
133
|
-
* providers' files arrays (deduplicated). */
|
|
134
|
-
export declare function extractFilesFromSnapshots(snapshots: ProviderSnapshot[]): string[] | null;
|
|
135
|
-
/** Return provider snapshots narrowed to evidence produced during this round.
|
|
136
|
-
* The full provider payload remains available in data, while files contains
|
|
137
|
-
* only added/removed/content-changed paths. */
|
|
138
|
-
export declare function diffSnapshotCollections(before: ProviderSnapshot[], after: ProviderSnapshot[]): ProviderSnapshot[];
|
|
139
|
-
export declare function diffSnapshots(before: ProviderSnapshot[], after: ProviderSnapshot[]): string[] | null;
|
|
140
|
-
/** v3.3.1: Implement the v2.13 policy switch `engine.backtrack_auto_restore` —
|
|
141
|
-
* automatically restore the workspace after a backtrack:
|
|
142
|
-
* 1. `git stash push -u` — every uncommitted change (tracked + untracked)
|
|
143
|
-
* is preserved in a stash, never destroyed (an untracked file the agent
|
|
144
|
-
* created in the failed rounds is not silently deleted).
|
|
145
|
-
* 2. `git reset --hard <restoreHead>` — when the failed rounds created
|
|
146
|
-
* commits, discard them back to the clean round's commit (the v2.12
|
|
147
|
-
* restore-point HEAD).
|
|
150
|
+
/** Extract merged file list from observations for backward compat with
|
|
151
|
+
* runtimeFilesChanged (string[] | null).
|
|
148
152
|
*
|
|
149
|
-
*
|
|
150
|
-
*
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
*
|
|
154
|
-
*
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
ok: boolean;
|
|
160
|
-
detail: string;
|
|
161
|
-
}>;
|
|
153
|
+
* Looks for the "git" provider first; falls back to merging all providers'
|
|
154
|
+
* files arrays (deduplicated). */
|
|
155
|
+
export declare function extractFilesFromSnapshots(observations: MachineObservation[]): string[] | null;
|
|
156
|
+
/** v3.8: The round delta of two observation collections (before → after):
|
|
157
|
+
* files that appeared, disappeared, or changed content. The full payload of
|
|
158
|
+
* each after-observation is preserved; only `files` is narrowed. This is the
|
|
159
|
+
* single derivation the transaction persists and every reader consumes. */
|
|
160
|
+
export declare function diffSnapshotCollections(before: MachineObservation[], after: MachineObservation[]): MachineObservation[];
|
|
161
|
+
/** Compute a diff between two observation collections (before → after). */
|
|
162
|
+
export declare function diffSnapshots(before: MachineObservation[], after: MachineObservation[]): string[] | null;
|
|
162
163
|
//# sourceMappingURL=evidence-provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evidence-provider.d.ts","sourceRoot":"","sources":["../src/evidence-provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"evidence-provider.d.ts","sourceRoot":"","sources":["../src/evidence-provider.ts"],"names":[],"mappings":"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"}
|