loopforge 3.9.4 → 4.0.7
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 +236 -112
- package/dist/audit.d.ts +73 -15
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +131 -61
- package/dist/audit.js.map +1 -1
- package/dist/canonical-state.d.ts +114 -40
- package/dist/canonical-state.d.ts.map +1 -1
- package/dist/canonical-state.js +276 -182
- package/dist/canonical-state.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +41 -12
- package/dist/cli.js.map +1 -1
- package/dist/cognitive-governance.d.ts +0 -2
- package/dist/cognitive-governance.d.ts.map +1 -1
- package/dist/cognitive-governance.js +0 -4
- package/dist/cognitive-governance.js.map +1 -1
- package/dist/committed-round.d.ts +97 -156
- package/dist/committed-round.d.ts.map +1 -1
- package/dist/committed-round.js +223 -419
- package/dist/committed-round.js.map +1 -1
- package/dist/constraint-lifecycle.d.ts +73 -0
- package/dist/constraint-lifecycle.d.ts.map +1 -0
- package/dist/constraint-lifecycle.js +174 -0
- package/dist/constraint-lifecycle.js.map +1 -0
- package/dist/context-boundary.d.ts +83 -0
- package/dist/context-boundary.d.ts.map +1 -0
- package/dist/context-boundary.js +101 -0
- package/dist/context-boundary.js.map +1 -0
- package/dist/contract-items.d.ts +12 -8
- package/dist/contract-items.d.ts.map +1 -1
- package/dist/contract-items.js +31 -26
- package/dist/contract-items.js.map +1 -1
- package/dist/contract-requirement.d.ts +47 -0
- package/dist/contract-requirement.d.ts.map +1 -0
- package/dist/contract-requirement.js +51 -0
- package/dist/contract-requirement.js.map +1 -0
- package/dist/criterion-status.d.ts +35 -0
- package/dist/criterion-status.d.ts.map +1 -0
- package/dist/criterion-status.js +89 -0
- package/dist/criterion-status.js.map +1 -0
- package/dist/enforcement-gate.d.ts +26 -38
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +196 -319
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +9 -103
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +27 -897
- package/dist/engine.js.map +1 -1
- package/dist/errors.d.ts +41 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +69 -0
- package/dist/errors.js.map +1 -0
- package/dist/evidence-claims.d.ts +33 -31
- package/dist/evidence-claims.d.ts.map +1 -1
- package/dist/evidence-claims.js +58 -72
- package/dist/evidence-claims.js.map +1 -1
- package/dist/evidence-posture-view.d.ts +19 -0
- package/dist/evidence-posture-view.d.ts.map +1 -0
- package/dist/evidence-posture-view.js +116 -0
- package/dist/evidence-posture-view.js.map +1 -0
- package/dist/evidence-posture.d.ts +73 -0
- package/dist/evidence-posture.d.ts.map +1 -0
- package/dist/evidence-posture.js +281 -0
- package/dist/evidence-posture.js.map +1 -0
- package/dist/evidence-provider.d.ts +55 -37
- package/dist/evidence-provider.d.ts.map +1 -1
- package/dist/evidence-provider.js +182 -332
- package/dist/evidence-provider.js.map +1 -1
- package/dist/explain.d.ts +166 -27
- package/dist/explain.d.ts.map +1 -1
- package/dist/explain.js +372 -58
- package/dist/explain.js.map +1 -1
- package/dist/field-accounting.d.ts.map +1 -1
- package/dist/field-accounting.js +3 -22
- package/dist/field-accounting.js.map +1 -1
- package/dist/generate-schema.js +13 -8
- package/dist/generate-schema.js.map +1 -1
- package/dist/git-boundary.d.ts +128 -0
- package/dist/git-boundary.d.ts.map +1 -0
- package/dist/git-boundary.js +625 -0
- package/dist/git-boundary.js.map +1 -0
- package/dist/git-facts.d.ts +22 -0
- package/dist/git-facts.d.ts.map +1 -0
- package/dist/git-facts.js +29 -0
- package/dist/git-facts.js.map +1 -0
- package/dist/git-motion.d.ts +37 -0
- package/dist/git-motion.d.ts.map +1 -0
- package/dist/git-motion.js +59 -0
- package/dist/git-motion.js.map +1 -0
- package/dist/history.d.ts +44 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +77 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +19 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -4
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +16 -0
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +80 -14
- package/dist/init.js.map +1 -1
- package/dist/loop-compiler.d.ts +39 -23
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +368 -565
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-store.d.ts +6 -5
- package/dist/loop-store.d.ts.map +1 -1
- package/dist/loop-store.js +153 -35
- package/dist/loop-store.js.map +1 -1
- package/dist/mcp/round-lifecycle.d.ts +255 -81
- package/dist/mcp/round-lifecycle.d.ts.map +1 -1
- package/dist/mcp/round-lifecycle.js +1552 -539
- package/dist/mcp/round-lifecycle.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +42 -18
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +81 -39
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +956 -282
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/submission-boundary.d.ts +23 -31
- package/dist/mcp/submission-boundary.d.ts.map +1 -1
- package/dist/mcp/submission-boundary.js +242 -92
- package/dist/mcp/submission-boundary.js.map +1 -1
- package/dist/mcp/submission-handle.d.ts +66 -0
- package/dist/mcp/submission-handle.d.ts.map +1 -0
- package/dist/mcp/submission-handle.js +173 -0
- package/dist/mcp/submission-handle.js.map +1 -0
- package/dist/mcp/tools.d.ts +17 -7
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +707 -244
- package/dist/mcp/tools.js.map +1 -1
- package/dist/open-question.d.ts +7 -0
- package/dist/open-question.d.ts.map +1 -0
- package/dist/open-question.js +14 -0
- package/dist/open-question.js.map +1 -0
- package/dist/policy-metrics.d.ts +31 -21
- package/dist/policy-metrics.d.ts.map +1 -1
- package/dist/policy-metrics.js +117 -64
- package/dist/policy-metrics.js.map +1 -1
- package/dist/policy.d.ts +11 -39
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +12 -12
- package/dist/policy.js.map +1 -1
- package/dist/progress.d.ts +45 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +136 -0
- package/dist/progress.js.map +1 -0
- package/dist/prompt-assembler.d.ts +20 -6
- package/dist/prompt-assembler.d.ts.map +1 -1
- package/dist/prompt-assembler.js +475 -479
- package/dist/prompt-assembler.js.map +1 -1
- package/dist/prompt-coverage.d.ts +0 -6
- package/dist/prompt-coverage.d.ts.map +1 -1
- package/dist/prompt-coverage.js +4 -8
- package/dist/prompt-coverage.js.map +1 -1
- package/dist/prompt-freshness.d.ts +6 -17
- package/dist/prompt-freshness.d.ts.map +1 -1
- package/dist/prompt-freshness.js +27 -22
- package/dist/prompt-freshness.js.map +1 -1
- package/dist/prompt-policy.d.ts +14 -7
- package/dist/prompt-policy.d.ts.map +1 -1
- package/dist/prompt-policy.js +21 -5
- package/dist/prompt-policy.js.map +1 -1
- package/dist/protocol.d.ts +843 -424
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +73 -102
- package/dist/protocol.js.map +1 -1
- package/dist/recovery-guidance.d.ts +13 -0
- package/dist/recovery-guidance.d.ts.map +1 -0
- package/dist/recovery-guidance.js +15 -0
- package/dist/recovery-guidance.js.map +1 -0
- package/dist/recovery.d.ts +68 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +234 -0
- package/dist/recovery.js.map +1 -0
- package/dist/replay.d.ts +42 -8
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +311 -84
- package/dist/replay.js.map +1 -1
- package/dist/result-facts.d.ts +45 -0
- package/dist/result-facts.d.ts.map +1 -0
- package/dist/result-facts.js +86 -0
- package/dist/result-facts.js.map +1 -0
- package/dist/round-contract.d.ts +38 -8
- package/dist/round-contract.d.ts.map +1 -1
- package/dist/round-contract.js +71 -31
- package/dist/round-contract.js.map +1 -1
- package/dist/round-coordinator.d.ts +41 -89
- package/dist/round-coordinator.d.ts.map +1 -1
- package/dist/round-coordinator.js +250 -267
- package/dist/round-coordinator.js.map +1 -1
- package/dist/round-driver.d.ts +56 -16
- package/dist/round-driver.d.ts.map +1 -1
- package/dist/round-driver.js +225 -39
- package/dist/round-driver.js.map +1 -1
- package/dist/round-facts.d.ts +33 -52
- package/dist/round-facts.d.ts.map +1 -1
- package/dist/round-facts.js +51 -160
- package/dist/round-facts.js.map +1 -1
- package/dist/round-guidance.d.ts +56 -0
- package/dist/round-guidance.d.ts.map +1 -0
- package/dist/round-guidance.js +161 -0
- package/dist/round-guidance.js.map +1 -0
- package/dist/round-outcome.d.ts +21 -0
- package/dist/round-outcome.d.ts.map +1 -0
- package/dist/round-outcome.js +31 -0
- package/dist/round-outcome.js.map +1 -0
- package/dist/round-transaction.d.ts +168 -21
- package/dist/round-transaction.d.ts.map +1 -1
- package/dist/round-transaction.js +837 -38
- package/dist/round-transaction.js.map +1 -1
- package/dist/self-eval.d.ts +37 -61
- package/dist/self-eval.d.ts.map +1 -1
- package/dist/self-eval.js +413 -392
- package/dist/self-eval.js.map +1 -1
- package/dist/storage.d.ts +16 -0
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +54 -4
- package/dist/storage.js.map +1 -1
- package/dist/subgoal-state.d.ts +2 -3
- package/dist/subgoal-state.d.ts.map +1 -1
- package/dist/subgoal-state.js +2 -3
- package/dist/subgoal-state.js.map +1 -1
- package/dist/submission-guidance.d.ts +29 -21
- package/dist/submission-guidance.d.ts.map +1 -1
- package/dist/submission-guidance.js +308 -260
- package/dist/submission-guidance.js.map +1 -1
- package/dist/submission-receipt.d.ts +16 -8
- package/dist/submission-receipt.d.ts.map +1 -1
- package/dist/submission-receipt.js +145 -51
- package/dist/submission-receipt.js.map +1 -1
- package/dist/token-utils.d.ts +28 -7
- package/dist/token-utils.d.ts.map +1 -1
- package/dist/token-utils.js +27 -11
- package/dist/token-utils.js.map +1 -1
- package/dist/transaction-identity.d.ts +9 -0
- package/dist/transaction-identity.d.ts.map +1 -0
- package/dist/transaction-identity.js +69 -0
- package/dist/transaction-identity.js.map +1 -0
- package/dist/verification-actions.d.ts.map +1 -1
- package/dist/verification-actions.js +10 -11
- package/dist/verification-actions.js.map +1 -1
- package/dist/verification-gate.d.ts +23 -47
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +202 -423
- package/dist/verification-gate.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/working-memory.d.ts +187 -0
- package/dist/working-memory.d.ts.map +1 -0
- package/dist/working-memory.js +767 -0
- package/dist/working-memory.js.map +1 -0
- package/dist/workspace-checkpoint.d.ts +88 -0
- package/dist/workspace-checkpoint.d.ts.map +1 -0
- package/dist/workspace-checkpoint.js +326 -0
- package/dist/workspace-checkpoint.js.map +1 -0
- package/dist/workspace-restore.d.ts +68 -0
- package/dist/workspace-restore.d.ts.map +1 -0
- package/dist/workspace-restore.js +604 -0
- package/dist/workspace-restore.js.map +1 -0
- package/dist/workspace.d.ts +0 -9
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +0 -17
- package/dist/workspace.js.map +1 -1
- package/loop_policy.json +4 -18
- package/package.json +68 -68
- package/skills/forge/SKILL.md +212 -0
- package/skills/forge/references/evidence-and-contracts.md +204 -0
- package/skills/forge/references/recovery-and-views.md +188 -0
- package/dist/cognitive-facts.d.ts +0 -30
- package/dist/cognitive-facts.d.ts.map +0 -1
- package/dist/cognitive-facts.js +0 -113
- package/dist/cognitive-facts.js.map +0 -1
- package/dist/loop-extras-parser.d.ts +0 -81
- package/dist/loop-extras-parser.d.ts.map +0 -1
- package/dist/loop-extras-parser.js +0 -213
- package/dist/loop-extras-parser.js.map +0 -1
- package/dist/loop-projection.d.ts +0 -6
- package/dist/loop-projection.d.ts.map +0 -1
- package/dist/loop-projection.js +0 -28
- package/dist/loop-projection.js.map +0 -1
- package/skills/perception/SKILL.md +0 -389
package/dist/replay.js
CHANGED
|
@@ -1,10 +1,115 @@
|
|
|
1
|
-
/** ReplayBackend — time-travel queries over
|
|
1
|
+
/** ReplayBackend — time-travel queries over committed rounds.
|
|
2
2
|
*
|
|
3
3
|
* Depends on LoopStore interface — no direct filesystem access.
|
|
4
|
-
*
|
|
4
|
+
* Every query loads the same committed history once and reads the branch's
|
|
5
|
+
* `CommittedRoundView`s; there is no second decode pass and no synthesized
|
|
6
|
+
* lineage-shaped entry.
|
|
5
7
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
+
import { loadCommittedHistory } from "./history.js";
|
|
9
|
+
import { deriveRoundProgress } from "./progress.js";
|
|
10
|
+
import { deriveOpenQuestionId } from "./open-question.js";
|
|
11
|
+
import { gitRoundFacts } from "./git-facts.js";
|
|
12
|
+
import { deriveFindingId } from "./token-utils.js";
|
|
13
|
+
export const REPLAY_DEFAULT_ROUNDS = 10;
|
|
14
|
+
export const REPLAY_MAX_WINDOW_ROUNDS = 50;
|
|
15
|
+
const REPORT_DISPLAY_CHARS = 4000;
|
|
16
|
+
const ASSUMPTION_DISPLAY_CHARS = 500;
|
|
17
|
+
const QUESTION_DISPLAY_CHARS = 300;
|
|
18
|
+
const BLOCKER_DISPLAY_CHARS = 500;
|
|
19
|
+
const REDIRECT_REASON_DISPLAY_CHARS = 500;
|
|
20
|
+
const WORKER_DISPLAY_CHARS = 500;
|
|
21
|
+
const RETROACTIVE_DISPLAY_CHARS = 500;
|
|
22
|
+
const SUBTASK_LABEL_DISPLAY_CHARS = 200;
|
|
23
|
+
/** Invalid explicit replay window. The MCP boundary maps this to
|
|
24
|
+
* `invalid_argument`. */
|
|
25
|
+
export class ReplayWindowError extends Error {
|
|
26
|
+
code = "invalid_argument";
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super(message);
|
|
29
|
+
this.name = "ReplayWindowError";
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function displayed(value, maxChars) {
|
|
33
|
+
const text = value ?? "";
|
|
34
|
+
if (text.length <= maxChars)
|
|
35
|
+
return { text, truncated: false };
|
|
36
|
+
return { text: text.slice(0, maxChars), truncated: true };
|
|
37
|
+
}
|
|
38
|
+
function displayedList(values, maxChars) {
|
|
39
|
+
let truncated = false;
|
|
40
|
+
const out = (values ?? []).map((value) => {
|
|
41
|
+
const clipped = displayed(value, maxChars);
|
|
42
|
+
truncated ||= clipped.truncated;
|
|
43
|
+
return clipped.text;
|
|
44
|
+
});
|
|
45
|
+
return { values: out, truncated };
|
|
46
|
+
}
|
|
47
|
+
/** Resolve an explicit/default window over the committed evaluation rounds.
|
|
48
|
+
*
|
|
49
|
+
* - no start/end: the last 10 committed rounds;
|
|
50
|
+
* - both: the inclusive range, at most 50 rounds wide;
|
|
51
|
+
* - start only: start..latest, at most 50 rounds wide;
|
|
52
|
+
* - end only: the 50-round window ending at `end`.
|
|
53
|
+
*/
|
|
54
|
+
function resolveWindow(rounds, legacyRounds, opts) {
|
|
55
|
+
const positions = [...new Set([
|
|
56
|
+
...rounds.map((view) => view.round),
|
|
57
|
+
...legacyRounds.map((round) => round.round),
|
|
58
|
+
])].sort((a, b) => a - b);
|
|
59
|
+
const totalRounds = positions.length;
|
|
60
|
+
const latest = positions.length > 0 ? positions[positions.length - 1] : 0;
|
|
61
|
+
const validatePositive = (value, name) => {
|
|
62
|
+
if (value === undefined)
|
|
63
|
+
return;
|
|
64
|
+
if (!Number.isInteger(value) || value < 1) {
|
|
65
|
+
throw new ReplayWindowError(`${name} must be a positive integer`);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
validatePositive(opts?.start, "start");
|
|
69
|
+
validatePositive(opts?.end, "end");
|
|
70
|
+
if (opts?.start !== undefined && opts?.end !== undefined &&
|
|
71
|
+
opts.start > opts.end) {
|
|
72
|
+
throw new ReplayWindowError("start must be <= end");
|
|
73
|
+
}
|
|
74
|
+
if (opts?.start !== undefined && opts?.end !== undefined &&
|
|
75
|
+
opts.end - opts.start + 1 > REPLAY_MAX_WINDOW_ROUNDS) {
|
|
76
|
+
throw new ReplayWindowError(`an explicit replay window may span at most ${REPLAY_MAX_WINDOW_ROUNDS} rounds`);
|
|
77
|
+
}
|
|
78
|
+
let from;
|
|
79
|
+
let to;
|
|
80
|
+
if (opts?.start === undefined && opts?.end === undefined) {
|
|
81
|
+
// Count-based default over the round POSITIONS that exist, including
|
|
82
|
+
// legacy envelopes: an unsupported schema must stay visible rather than
|
|
83
|
+
// fall outside a window derived only from parseable rounds.
|
|
84
|
+
const windowPositions = positions.slice(-REPLAY_DEFAULT_ROUNDS);
|
|
85
|
+
from = windowPositions[0] ?? 0;
|
|
86
|
+
to = windowPositions.at(-1) ?? 0;
|
|
87
|
+
}
|
|
88
|
+
else if (opts?.start !== undefined && opts?.end !== undefined) {
|
|
89
|
+
from = opts.start;
|
|
90
|
+
to = opts.end;
|
|
91
|
+
}
|
|
92
|
+
else if (opts?.start !== undefined) {
|
|
93
|
+
from = opts.start;
|
|
94
|
+
to = latest;
|
|
95
|
+
if (latest >= from && to - from + 1 > REPLAY_MAX_WINDOW_ROUNDS) {
|
|
96
|
+
throw new ReplayWindowError(`an explicit replay window may span at most ${REPLAY_MAX_WINDOW_ROUNDS} rounds`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
to = opts.end;
|
|
101
|
+
from = Math.max(1, to - REPLAY_MAX_WINDOW_ROUNDS + 1);
|
|
102
|
+
}
|
|
103
|
+
const inWindowPositions = positions.filter((position) => position >= from && position <= to);
|
|
104
|
+
const window = {
|
|
105
|
+
start: inWindowPositions[0] ?? 0,
|
|
106
|
+
end: inWindowPositions.at(-1) ?? 0,
|
|
107
|
+
totalRounds,
|
|
108
|
+
hasBefore: positions.some((position) => position < from),
|
|
109
|
+
hasAfter: positions.some((position) => position > to),
|
|
110
|
+
};
|
|
111
|
+
return { from, to, window };
|
|
112
|
+
}
|
|
8
113
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
9
114
|
// ReplayBackend
|
|
10
115
|
// ═══════════════════════════════════════════════════════════════════════════
|
|
@@ -15,90 +120,216 @@ export class ReplayBackend {
|
|
|
15
120
|
}
|
|
16
121
|
// ── Single-round lookup ────────────────────────────────────────────────
|
|
17
122
|
getRound(loopId, roundNum) {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
const lineageEntries = entries.filter((e) => !String(e.task_id ?? "").endsWith(":feedback"));
|
|
21
|
-
const fbEntries = queryLoopEntries(this.store, loopId, {
|
|
22
|
-
prefix,
|
|
23
|
-
feedbackOnly: true,
|
|
24
|
-
});
|
|
25
|
-
const committed = fbEntries.map(decodeCommittedRound)
|
|
26
|
-
.find((view) => view?.round === roundNum && view.action !== "backtrack");
|
|
27
|
-
if (!committed)
|
|
28
|
-
return null;
|
|
29
|
-
const base = lineageEntries[0] ?? committed.sourceEntry;
|
|
30
|
-
const entry = { ...base };
|
|
31
|
-
entry.success = committed.success;
|
|
32
|
-
entry.output_summary = committed.evaluation?.output_summary ?? entry.output_summary;
|
|
33
|
-
entry.round_contract = committed.contractProposal ?? undefined;
|
|
34
|
-
entry.loop_lineage = {
|
|
35
|
-
...(entry.loop_lineage ?? {}),
|
|
36
|
-
success: committed.success,
|
|
37
|
-
committed_action: committed.action,
|
|
38
|
-
};
|
|
39
|
-
return entry;
|
|
123
|
+
const history = loadCommittedHistory(this.store, loopId);
|
|
124
|
+
return history.rounds.find((view) => view.kind === "evaluation" && view.round === roundNum) ?? null;
|
|
40
125
|
}
|
|
41
126
|
// ── Multi-round replay ─────────────────────────────────────────────────
|
|
42
127
|
replay(loopId, opts) {
|
|
43
128
|
const start = opts?.start ?? 1;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
end = this.maxRound(loopId);
|
|
47
|
-
if (end === 0)
|
|
48
|
-
return [];
|
|
49
|
-
}
|
|
50
|
-
const results = [];
|
|
51
|
-
for (let rnd = start; rnd <= end; rnd++) {
|
|
52
|
-
const entry = this.getRound(loopId, rnd);
|
|
53
|
-
if (entry)
|
|
54
|
-
results.push(entry);
|
|
55
|
-
}
|
|
56
|
-
return results;
|
|
129
|
+
const end = opts?.end ?? Number.POSITIVE_INFINITY;
|
|
130
|
+
return loadCommittedHistory(this.store, loopId).rounds.filter((view) => view.kind === "evaluation" && view.round >= start && view.round <= end);
|
|
57
131
|
}
|
|
58
132
|
// ── Timeline ──────────────────────────────────────────────────────────
|
|
59
|
-
timeline
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
});
|
|
65
|
-
const views = new Map(readOnlyRounds(feedback).map((view) => [view.round, view]));
|
|
133
|
+
/** v4.0.2: the paged timeline. The returned `window` tells the Agent
|
|
134
|
+
* whether more committed rounds exist before/after this page. */
|
|
135
|
+
page(loopId, opts) {
|
|
136
|
+
const history = loadCommittedHistory(this.store, loopId);
|
|
137
|
+
const rounds = history.rounds.filter((view) => view.kind === "evaluation");
|
|
138
|
+
const { from, to, window } = resolveWindow(rounds, history.legacyRounds, opts);
|
|
66
139
|
const timeline = [];
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
const
|
|
140
|
+
for (const view of rounds) {
|
|
141
|
+
if (view.round < from || view.round > to)
|
|
142
|
+
continue;
|
|
143
|
+
// v4.0.3: ONE Git fact set per row, from the union selector.
|
|
144
|
+
const git = gitRoundFacts(view.observationDelta);
|
|
145
|
+
// v3.9.9: replay is a display surface, so it selects every fact. The
|
|
146
|
+
// per-fact list below makes the coverage of each fact visible.
|
|
147
|
+
const progress = deriveRoundProgress(view.observationDelta);
|
|
148
|
+
const progressFacts = view.observationDelta
|
|
149
|
+
.filter((delta) => delta.progress !== null)
|
|
150
|
+
.map((delta) => ({
|
|
151
|
+
kind: delta.progress.kind,
|
|
152
|
+
providerId: delta.providerId,
|
|
153
|
+
coverage: delta.progress.coverage,
|
|
154
|
+
state: delta.progress.state,
|
|
155
|
+
complete: delta.progress.complete,
|
|
156
|
+
}));
|
|
157
|
+
const report = displayed(view.evaluation?.output_summary, REPORT_DISPLAY_CHARS);
|
|
158
|
+
const wrongAssumptions = displayedList(view.evaluation?.wrong_assumptions, ASSUMPTION_DISPLAY_CHARS);
|
|
159
|
+
const retractedConstraints = displayedList(view.retractedConstraints, ASSUMPTION_DISPLAY_CHARS);
|
|
160
|
+
const openQuestions = displayedList(view.openQuestions, QUESTION_DISPLAY_CHARS);
|
|
161
|
+
const blocker = displayed(view.evaluation?.blocker, BLOCKER_DISPLAY_CHARS);
|
|
162
|
+
const redirectReason = displayed(view.contractRedirect?.reason, REDIRECT_REASON_DISPLAY_CHARS);
|
|
163
|
+
const objectiveRefinement = displayed(view.objectiveRefinement, REPORT_DISPLAY_CHARS);
|
|
164
|
+
const noChangeReason = displayed(view.evaluation?.no_change_reason, BLOCKER_DISPLAY_CHARS);
|
|
165
|
+
const subtaskLabel = displayed(view.evaluation?.subtask_boundary_label, SUBTASK_LABEL_DISPLAY_CHARS);
|
|
166
|
+
const constraintViolations = displayedList(view.constraintViolations, ASSUMPTION_DISPLAY_CHARS);
|
|
167
|
+
const discoveredConstraints = displayedList(view.discoveredConstraints, ASSUMPTION_DISPLAY_CHARS);
|
|
168
|
+
const emergedSubtasks = displayedList(view.emergedSubtasks, ASSUMPTION_DISPLAY_CHARS);
|
|
169
|
+
const workerResults = (view.evaluation?.worker_results ?? []).map((worker) => ({
|
|
170
|
+
agent_id: worker.agentId.slice(0, SUBTASK_LABEL_DISPLAY_CHARS),
|
|
171
|
+
sub_task: displayed(worker.subTask, WORKER_DISPLAY_CHARS).text,
|
|
172
|
+
result_summary: displayed(worker.resultSummary, WORKER_DISPLAY_CHARS).text,
|
|
173
|
+
outcome: worker.outcome,
|
|
174
|
+
}));
|
|
175
|
+
const retroactiveClaims = (view.evaluation?.retroactiveClaims ?? [])
|
|
176
|
+
.map((claim) => ({
|
|
177
|
+
round: claim.round,
|
|
178
|
+
claim: displayed(claim.claim, RETROACTIVE_DISPLAY_CHARS).text,
|
|
179
|
+
}));
|
|
180
|
+
const subgoalUpdates = (view.subgoalUpdates ?? []).map((update) => ({
|
|
181
|
+
id: update.id,
|
|
182
|
+
status: update.status,
|
|
183
|
+
...(update.note !== undefined
|
|
184
|
+
? { status_note: update.note.slice(0, 300) }
|
|
185
|
+
: {}),
|
|
186
|
+
}));
|
|
187
|
+
const commandStatuses = view.observationDelta
|
|
188
|
+
.filter((delta) => delta.kind === "command")
|
|
189
|
+
.map((delta) => ({
|
|
190
|
+
command_id: delta.after?.kind === "command"
|
|
191
|
+
? delta.after.data.commandId
|
|
192
|
+
: delta.providerId,
|
|
193
|
+
status: delta.after?.status ?? null,
|
|
194
|
+
}));
|
|
195
|
+
const checkpoints = [
|
|
196
|
+
...(view.beforeCheckpoint ? [view.beforeCheckpoint] : []),
|
|
197
|
+
...view.checkpoints,
|
|
198
|
+
].map((ref) => ({
|
|
199
|
+
checkpoint_id: ref.checkpointId,
|
|
200
|
+
role: ref.role,
|
|
201
|
+
round: ref.round,
|
|
202
|
+
content_hash: ref.contentHash,
|
|
203
|
+
}));
|
|
76
204
|
timeline.push({
|
|
77
|
-
round,
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
205
|
+
round: view.round,
|
|
206
|
+
attempt: view.attempt,
|
|
207
|
+
// v4.0.4: LoopForge's terminal reason, from the ONE committed
|
|
208
|
+
// `result.stopReason`. It is not the Agent's stop reason.
|
|
209
|
+
loop_stop_reason: view.result?.stopReason ?? null,
|
|
210
|
+
recompile_level: view.promptArtifact?.level ?? "l2",
|
|
211
|
+
// v4.0.2: the context boundary is a committed artifact fact.
|
|
212
|
+
context_mode: view.promptArtifact?.contextMode ?? null,
|
|
213
|
+
context_reason: view.promptArtifact?.contextReason ?? null,
|
|
214
|
+
// v4.0.5: the host invocation instruction this round's prompt carried,
|
|
215
|
+
// projected from the artifact (never a second store).
|
|
216
|
+
current_user_instruction: view.promptArtifact?.currentUserInstruction ?? null,
|
|
217
|
+
// v4.0.3/v4.0.4: Agent claims are named as claims. The Agent's stop
|
|
218
|
+
// reason is a report; machine facts (including machineBackedSuccess)
|
|
219
|
+
// live only inside the persisted posture, so no duplicate top-level
|
|
220
|
+
// machine boolean is rendered here.
|
|
221
|
+
agent_success_claim: view.agentSuccessClaim,
|
|
222
|
+
agent_outcome: view.agentOutcome,
|
|
223
|
+
objective_refinement: objectiveRefinement.text || null,
|
|
224
|
+
evidence_posture: view.evidencePosture,
|
|
225
|
+
// v4.0.1: task and goal identity are compile facts stamped at commit.
|
|
226
|
+
task: view.compiled?.task ?? "",
|
|
227
|
+
goal_id: view.compiled?.goalId ?? "",
|
|
228
|
+
// v4.0.2/v4.0.3: the committed Agent report, bounded for display.
|
|
229
|
+
// `success` is not duplicated here: the row already names the claim.
|
|
230
|
+
report: view.evaluation
|
|
231
|
+
? {
|
|
232
|
+
output_summary: report.text,
|
|
233
|
+
no_change_reason: noChangeReason.text || null,
|
|
234
|
+
blocker: view.evaluation.blocker ? blocker.text : null,
|
|
235
|
+
subtask_boundary_label: subtaskLabel.text || null,
|
|
236
|
+
worker_results: workerResults,
|
|
237
|
+
retroactive_claims: retroactiveClaims,
|
|
238
|
+
gate_ids: [...(view.evaluation.gate_ids ?? [])],
|
|
239
|
+
subgoal_updates: subgoalUpdates,
|
|
240
|
+
constraint_violations: constraintViolations.values,
|
|
241
|
+
discovered_constraints: discoveredConstraints.values,
|
|
242
|
+
emerged_subtasks: emergedSubtasks.values,
|
|
243
|
+
truncated: report.truncated ||
|
|
244
|
+
noChangeReason.truncated ||
|
|
245
|
+
blocker.truncated ||
|
|
246
|
+
subtaskLabel.truncated ||
|
|
247
|
+
constraintViolations.truncated ||
|
|
248
|
+
discoveredConstraints.truncated ||
|
|
249
|
+
emergedSubtasks.truncated,
|
|
250
|
+
}
|
|
251
|
+
: null,
|
|
252
|
+
wrong_assumptions: wrongAssumptions.values,
|
|
253
|
+
retracted_constraints: retractedConstraints.values,
|
|
254
|
+
open_questions: openQuestions.values,
|
|
255
|
+
open_question_ids: (view.openQuestions ?? []).map(deriveOpenQuestionId),
|
|
256
|
+
resolved_open_question_ids: view.resolvedOpenQuestionIds ?? [],
|
|
257
|
+
blocker: view.evaluation?.blocker ? blocker.text : null,
|
|
258
|
+
// v3.9.1/v4.0.3: the shared round delta and Git boundary facts, from
|
|
259
|
+
// the union selector (never the first Git delta).
|
|
260
|
+
files_changed: git.changedFiles,
|
|
261
|
+
git_change_state: git.state,
|
|
262
|
+
head_before: git.headBefore,
|
|
263
|
+
head_after: git.headAfter,
|
|
264
|
+
git_status: git.status,
|
|
265
|
+
// v4.0.3: finding ids are the stable repair handles.
|
|
266
|
+
verification_flag_ids: view.verificationFlags.map(deriveFindingId),
|
|
267
|
+
verification_checks: view.verificationFlags.map((flag) => ({
|
|
268
|
+
check: flag.check,
|
|
269
|
+
severity: flag.severity,
|
|
270
|
+
ref: flag.ref ?? null,
|
|
271
|
+
})),
|
|
272
|
+
command_statuses: commandStatuses,
|
|
273
|
+
checkpoints,
|
|
274
|
+
restore_verified: view.restore !== null,
|
|
275
|
+
restore: view.restore
|
|
276
|
+
? {
|
|
277
|
+
directive_transaction_id: view.restore.directiveTransactionId,
|
|
278
|
+
redo_round: view.restore.redoRound,
|
|
279
|
+
verified_at: view.restore.verifiedAt,
|
|
280
|
+
}
|
|
281
|
+
: null,
|
|
282
|
+
// v3.9.7: the shared per-round progress verdict. Window verdicts are
|
|
283
|
+
// not committed facts; this is the only progress value a round owns.
|
|
284
|
+
machine_progress: progress?.state ?? null,
|
|
285
|
+
progress_providers: progress?.providers ?? [],
|
|
286
|
+
progress_coverages: progress?.coverages ?? [],
|
|
287
|
+
progress_facts: progressFacts,
|
|
90
288
|
// v3.5: the round's declared contract (proposal for the next round),
|
|
91
289
|
// when it committed one — lets replay show the contract arc.
|
|
92
|
-
...(
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
:
|
|
290
|
+
...(view.contractProposal ? { proposal: view.contractProposal } : {}),
|
|
291
|
+
// v3.9.9/v4.0.2: the committed redirect, report-only.
|
|
292
|
+
contract_redirect: view.contractRedirect
|
|
293
|
+
? {
|
|
294
|
+
contract_id: view.contractRedirect.contract_id,
|
|
295
|
+
...(view.contractRedirect.reason !== undefined
|
|
296
|
+
? { reason: redirectReason.text }
|
|
297
|
+
: {}),
|
|
298
|
+
}
|
|
299
|
+
: null,
|
|
300
|
+
// Display-only truncation facts for the bounded report lists.
|
|
301
|
+
report_truncated: report.truncated ||
|
|
302
|
+
wrongAssumptions.truncated ||
|
|
303
|
+
retractedConstraints.truncated ||
|
|
304
|
+
openQuestions.truncated ||
|
|
305
|
+
blocker.truncated ||
|
|
306
|
+
redirectReason.truncated ||
|
|
307
|
+
objectiveRefinement.truncated ||
|
|
308
|
+
noChangeReason.truncated ||
|
|
309
|
+
subtaskLabel.truncated ||
|
|
310
|
+
constraintViolations.truncated ||
|
|
311
|
+
discoveredConstraints.truncated ||
|
|
312
|
+
emergedSubtasks.truncated,
|
|
313
|
+
truncation: {
|
|
314
|
+
output_summary: report.truncated,
|
|
315
|
+
wrong_assumptions: wrongAssumptions.truncated,
|
|
316
|
+
retracted_constraints: retractedConstraints.truncated,
|
|
317
|
+
open_questions: openQuestions.truncated,
|
|
318
|
+
blocker: blocker.truncated,
|
|
319
|
+
redirect_reason: redirectReason.truncated,
|
|
320
|
+
no_change_reason: noChangeReason.truncated,
|
|
321
|
+
subtask_boundary_label: subtaskLabel.truncated,
|
|
322
|
+
constraint_violations: constraintViolations.truncated,
|
|
323
|
+
discovered_constraints: discoveredConstraints.truncated,
|
|
324
|
+
emerged_subtasks: emergedSubtasks.truncated,
|
|
325
|
+
},
|
|
97
326
|
});
|
|
98
327
|
}
|
|
99
328
|
// Unsupported envelope versions are NOT history. Keep them visible in the
|
|
100
329
|
// timeline instead of letting the loop look shorter than it was.
|
|
101
|
-
for (const legacy of
|
|
330
|
+
for (const legacy of history.legacyRounds) {
|
|
331
|
+
if (legacy.round < from || legacy.round > to)
|
|
332
|
+
continue;
|
|
102
333
|
timeline.push({
|
|
103
334
|
round: legacy.round,
|
|
104
335
|
legacy: true,
|
|
@@ -107,19 +338,15 @@ export class ReplayBackend {
|
|
|
107
338
|
});
|
|
108
339
|
}
|
|
109
340
|
timeline.sort((a, b) => a.round - b.round);
|
|
110
|
-
return timeline;
|
|
341
|
+
return { timeline, window };
|
|
342
|
+
}
|
|
343
|
+
/** Backwards-compatible array view. Defaults to the same bounded page. */
|
|
344
|
+
timeline(loopId, opts) {
|
|
345
|
+
return this.page(loopId, opts).timeline;
|
|
111
346
|
}
|
|
112
347
|
/** v3.9.1: explicit legacy-envelope report for the tool envelope. */
|
|
113
348
|
legacyRounds(loopId) {
|
|
114
|
-
|
|
115
|
-
return legacyTransactionRounds(queryLoopEntries(this.store, loopId, { prefix, feedbackOnly: true }));
|
|
116
|
-
}
|
|
117
|
-
// ── Helpers ─────────────────────────────────────────────────────────────
|
|
118
|
-
maxRound(loopId) {
|
|
119
|
-
const prefix = `loop:${loopId}:r`;
|
|
120
|
-
const feedback = queryLoopEntries(this.store, loopId, { prefix, feedbackOnly: true });
|
|
121
|
-
const rounds = readOnlyRounds(feedback);
|
|
122
|
-
return rounds.length > 0 ? rounds[rounds.length - 1].round : 0;
|
|
349
|
+
return loadCommittedHistory(this.store, loopId).legacyRounds;
|
|
123
350
|
}
|
|
124
351
|
}
|
|
125
352
|
//# sourceMappingURL=replay.js.map
|
package/dist/replay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AACrC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AAC1C,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AACtC,MAAM,2BAA2B,GAAG,GAAG,CAAC;AAGxC;0BAC0B;AAC1B,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACjC,IAAI,GAAG,kBAAkB,CAAC;IACnC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AA0BD,SAAS,SAAS,CAAC,KAAyB,EAAE,QAAgB;IAI5D,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;IACzB,IAAI,IAAI,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC/D,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED,SAAS,aAAa,CACpB,MAAyC,EACzC,QAAgB;IAEhB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC3C,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC;QAChC,OAAO,OAAO,CAAC,IAAI,CAAC;IACtB,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,SAAS,aAAa,CACpB,MAAyC,EACzC,YAAwC,EACxC,IAAqC;IAErC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;YAC5B,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACnC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;SAC5C,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;IACrC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAE,IAAY,EAAQ,EAAE;QACzE,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,iBAAiB,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;QACpE,CAAC;IACH,CAAC,CAAC;IACF,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACvC,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACnC,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,EAAE,GAAG,KAAK,SAAS;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,IAAI,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,EAAE,GAAG,KAAK,SAAS;QACpD,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,wBAAwB,EAAE,CAAC;QACzD,MAAM,IAAI,iBAAiB,CACzB,8CAA8C,wBAAwB,SAAS,CAChF,CAAC;IACJ,CAAC;IAED,IAAI,IAAY,CAAC;IACjB,IAAI,EAAU,CAAC;IACf,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;QACzD,qEAAqE;QACrE,wEAAwE;QACxE,4DAA4D;QAC5D,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,qBAAqB,CAAC,CAAC;QAChE,IAAI,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/B,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;SAAM,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS,IAAI,IAAI,EAAE,GAAG,KAAK,SAAS,EAAE,CAAC;QAChE,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAClB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC;IAChB,CAAC;SAAM,IAAI,IAAI,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;QACrC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC;QAClB,EAAE,GAAG,MAAM,CAAC;QACZ,IAAI,MAAM,IAAI,IAAI,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,wBAAwB,EAAE,CAAC;YAC/D,MAAM,IAAI,iBAAiB,CACzB,8CAA8C,wBAAwB,SAAS,CAChF,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,EAAE,GAAG,IAAK,CAAC,GAAI,CAAC;QAChB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,wBAAwB,GAAG,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CACxC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,GAAG,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClC,WAAW;QACX,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;QACxD,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;KACtD,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC;AAED,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,OAAO,aAAa;IACP,KAAK,CAAY;IAElC,YAAY,KAAgB;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,0EAA0E;IAE1E,QAAQ,CAAC,MAAc,EAAE,QAAgB;QACvC,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAClC,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CACtD,IAAI,IAAI,CAAC;IACZ,CAAC;IAED,0EAA0E;IAE1E,MAAM,CACJ,MAAc,EACd,IAAuC;QAEvC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC;QAClD,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACrE,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,GAAG,CACvE,CAAC;IACJ,CAAC;IAED,yEAAyE;IAEzE;sEACkE;IAClE,IAAI,CAAC,MAAc,EAAE,IAA0B;QAC7C,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAC3E,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAA8B,EAAE,CAAC;QAC/C,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,CAAC,KAAK,GAAG,EAAE;gBAAE,SAAS;YACnD,6DAA6D;YAC7D,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjD,qEAAqE;YACrE,+DAA+D;YAC/D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB;iBACxC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC;iBAC1C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACf,IAAI,EAAE,KAAK,CAAC,QAAS,CAAC,IAAI;gBAC1B,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAS,CAAC,QAAQ;gBAClC,KAAK,EAAE,KAAK,CAAC,QAAS,CAAC,KAAK;gBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAS,CAAC,QAAQ;aACnC,CAAC,CAAC,CAAC;YACN,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,EAAE,oBAAoB,CAAC,CAAC;YAChF,MAAM,gBAAgB,GAAG,aAAa,CACpC,IAAI,CAAC,UAAU,EAAE,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;YAChE,MAAM,oBAAoB,GAAG,aAAa,CACxC,IAAI,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;YACvD,MAAM,aAAa,GAAG,aAAa,CACjC,IAAI,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC;YAC3E,MAAM,cAAc,GAAG,SAAS,CAC9B,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,6BAA6B,CAAC,CAAC;YAChE,MAAM,mBAAmB,GAAG,SAAS,CACnC,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC;YAClD,MAAM,cAAc,GAAG,SAAS,CAC9B,IAAI,CAAC,UAAU,EAAE,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;YAC5D,MAAM,YAAY,GAAG,SAAS,CAC5B,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,2BAA2B,CAAC,CAAC;YACxE,MAAM,oBAAoB,GAAG,aAAa,CACxC,IAAI,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC;YACvD,MAAM,qBAAqB,GAAG,aAAa,CACzC,IAAI,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;YACxD,MAAM,eAAe,GAAG,aAAa,CACnC,IAAI,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;YAClD,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7E,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,2BAA2B,CAAC;gBAC9D,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC,IAAI;gBAC9D,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC,IAAI;gBAC1E,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC,CAAC;YACJ,MAAM,iBAAiB,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,iBAAiB,IAAI,EAAE,CAAC;iBACjE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACf,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC,IAAI;aAC9D,CAAC,CAAC,CAAC;YACN,MAAM,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAClE,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;oBAC3B,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;oBAC5C,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC,CAAC;YACJ,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB;iBAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC;iBAC3C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBACf,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,SAAS;oBACzC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS;oBAC5B,CAAC,CAAC,KAAK,CAAC,UAAU;gBACpB,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI;aACpC,CAAC,CAAC,CAAC;YACN,MAAM,WAAW,GAAG;gBAClB,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,IAAI,CAAC,WAAW;aACpB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACd,aAAa,EAAE,GAAG,CAAC,YAAY;gBAC/B,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,YAAY,EAAE,GAAG,CAAC,WAAW;aAC9B,CAAC,CAAC,CAAC;YACJ,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,8DAA8D;gBAC9D,0DAA0D;gBAC1D,gBAAgB,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,IAAI,IAAI;gBACjD,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,IAAI,IAAI;gBACnD,6DAA6D;gBAC7D,YAAY,EAAE,IAAI,CAAC,cAAc,EAAE,WAAW,IAAI,IAAI;gBACtD,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,IAAI,IAAI;gBAC1D,uEAAuE;gBACvE,sDAAsD;gBACtD,wBAAwB,EACtB,IAAI,CAAC,cAAc,EAAE,sBAAsB,IAAI,IAAI;gBACrD,oEAAoE;gBACpE,qEAAqE;gBACrE,oEAAoE;gBACpE,oCAAoC;gBACpC,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;gBAC3C,aAAa,EAAE,IAAI,CAAC,YAAY;gBAChC,oBAAoB,EAAE,mBAAmB,CAAC,IAAI,IAAI,IAAI;gBACtD,gBAAgB,EAAE,IAAI,CAAC,eAAe;gBACtC,sEAAsE;gBACtE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE;gBAC/B,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;gBACpC,kEAAkE;gBAClE,qEAAqE;gBACrE,MAAM,EAAE,IAAI,CAAC,UAAU;oBACrB,CAAC,CAAC;wBACE,cAAc,EAAE,MAAM,CAAC,IAAI;wBAC3B,gBAAgB,EAAE,cAAc,CAAC,IAAI,IAAI,IAAI;wBAC7C,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;wBACtD,sBAAsB,EAAE,YAAY,CAAC,IAAI,IAAI,IAAI;wBACjD,cAAc,EAAE,aAAa;wBAC7B,kBAAkB,EAAE,iBAAiB;wBACrC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;wBAC/C,eAAe,EAAE,cAAc;wBAC/B,qBAAqB,EAAE,oBAAoB,CAAC,MAAM;wBAClD,sBAAsB,EAAE,qBAAqB,CAAC,MAAM;wBACpD,gBAAgB,EAAE,eAAe,CAAC,MAAM;wBACxC,SAAS,EAAE,MAAM,CAAC,SAAS;4BACzB,cAAc,CAAC,SAAS;4BACxB,OAAO,CAAC,SAAS;4BACjB,YAAY,CAAC,SAAS;4BACtB,oBAAoB,CAAC,SAAS;4BAC9B,qBAAqB,CAAC,SAAS;4BAC/B,eAAe,CAAC,SAAS;qBAC5B;oBACH,CAAC,CAAC,IAAI;gBACR,iBAAiB,EAAE,gBAAgB,CAAC,MAAM;gBAC1C,qBAAqB,EAAE,oBAAoB,CAAC,MAAM;gBAClD,cAAc,EAAE,aAAa,CAAC,MAAM;gBACpC,iBAAiB,EAAE,CAAC,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,oBAAoB,CAAC;gBACvE,0BAA0B,EAAE,IAAI,CAAC,uBAAuB,IAAI,EAAE;gBAC9D,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;gBACvD,qEAAqE;gBACrE,kDAAkD;gBAClD,aAAa,EAAE,GAAG,CAAC,YAAY;gBAC/B,gBAAgB,EAAE,GAAG,CAAC,KAAK;gBAC3B,WAAW,EAAE,GAAG,CAAC,UAAU;gBAC3B,UAAU,EAAE,GAAG,CAAC,SAAS;gBACzB,UAAU,EAAE,GAAG,CAAC,MAAM;gBACtB,qDAAqD;gBACrD,qBAAqB,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,eAAe,CAAC;gBAClE,mBAAmB,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBACzD,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;iBACtB,CAAC,CAAC;gBACH,gBAAgB,EAAE,eAAe;gBACjC,WAAW;gBACX,gBAAgB,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI;gBACvC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACnB,CAAC,CAAC;wBACE,wBAAwB,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB;wBAC7D,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;wBAClC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;qBACrC;oBACH,CAAC,CAAC,IAAI;gBACR,qEAAqE;gBACrE,qEAAqE;gBACrE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,IAAI,IAAI;gBACzC,kBAAkB,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE;gBAC7C,kBAAkB,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE;gBAC7C,cAAc,EAAE,aAAa;gBAC7B,qEAAqE;gBACrE,6DAA6D;gBAC7D,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACrE,sDAAsD;gBACtD,iBAAiB,EAAE,IAAI,CAAC,gBAAgB;oBACtC,CAAC,CAAC;wBACE,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW;wBAC9C,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,KAAK,SAAS;4BAC5C,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,EAAE;4BACjC,CAAC,CAAC,EAAE,CAAC;qBACR;oBACH,CAAC,CAAC,IAAI;gBACR,8DAA8D;gBAC9D,gBAAgB,EAAE,MAAM,CAAC,SAAS;oBAChC,gBAAgB,CAAC,SAAS;oBAC1B,oBAAoB,CAAC,SAAS;oBAC9B,aAAa,CAAC,SAAS;oBACvB,OAAO,CAAC,SAAS;oBACjB,cAAc,CAAC,SAAS;oBACxB,mBAAmB,CAAC,SAAS;oBAC7B,cAAc,CAAC,SAAS;oBACxB,YAAY,CAAC,SAAS;oBACtB,oBAAoB,CAAC,SAAS;oBAC9B,qBAAqB,CAAC,SAAS;oBAC/B,eAAe,CAAC,SAAS;gBAC3B,UAAU,EAAE;oBACV,cAAc,EAAE,MAAM,CAAC,SAAS;oBAChC,iBAAiB,EAAE,gBAAgB,CAAC,SAAS;oBAC7C,qBAAqB,EAAE,oBAAoB,CAAC,SAAS;oBACrD,cAAc,EAAE,aAAa,CAAC,SAAS;oBACvC,OAAO,EAAE,OAAO,CAAC,SAAS;oBAC1B,eAAe,EAAE,cAAc,CAAC,SAAS;oBACzC,gBAAgB,EAAE,cAAc,CAAC,SAAS;oBAC1C,sBAAsB,EAAE,YAAY,CAAC,SAAS;oBAC9C,qBAAqB,EAAE,oBAAoB,CAAC,SAAS;oBACrD,sBAAsB,EAAE,qBAAqB,CAAC,SAAS;oBACvD,gBAAgB,EAAE,eAAe,CAAC,SAAS;iBAC5C;aACF,CAAC,CAAC;QACL,CAAC;QACD,0EAA0E;QAC1E,iEAAiE;QACjE,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YAC1C,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,IAAI,MAAM,CAAC,KAAK,GAAG,EAAE;gBAAE,SAAS;YACvD,QAAQ,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,cAAc,EAAE,MAAM,CAAC,aAAa;aACrC,CAAC,CAAC;QACL,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAE,CAAC,CAAC,KAAgB,GAAI,CAAC,CAAC,KAAgB,CAAC,CAAC;QACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,0EAA0E;IAC1E,QAAQ,CAAC,MAAc,EAAE,IAA0B;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC;IAC1C,CAAC;IAED,qEAAqE;IACrE,YAAY,CAAC,MAAc;QACzB,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,YAAY,CAAC;IAC/D,CAAC;CACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/** v4.0.4 / v4.0.6: the ONE presentation of a round's result facts.
|
|
2
|
+
*
|
|
3
|
+
* Three kinds of facts stay separate and always appear in this order:
|
|
4
|
+
* 1. Agent report — what the Agent claimed (never machine evidence).
|
|
5
|
+
* 2. LoopForge decision — the disposition and the loop terminal reason.
|
|
6
|
+
* 3. Machine evidence — the persisted EvidencePosture, rendered by the
|
|
7
|
+
* single `formatEvidencePostureLines` renderer.
|
|
8
|
+
*
|
|
9
|
+
* This module derives nothing. It formats facts that were already committed
|
|
10
|
+
* or are already computed by the runtime; it never re-derives `completed`,
|
|
11
|
+
* `machineBackedSuccess` or a "conflict"/"verdict" boolean.
|
|
12
|
+
*
|
|
13
|
+
* v4.0.6: `outcome` is always declared (there is no `success`-derived
|
|
14
|
+
* branch), so the `outcomeDeclared` projection and the Agent stop-reason
|
|
15
|
+
* field are gone; the Agent's blocker text replaces that report detail.
|
|
16
|
+
* The success claim remains a derived read projection.
|
|
17
|
+
*/
|
|
18
|
+
import type { EvidencePosture, RoundOutcome, StopReason } from "./protocol.js";
|
|
19
|
+
export interface ResultFacts {
|
|
20
|
+
/** null = a rollback directive or no evaluation: there is no Agent report. */
|
|
21
|
+
agent: {
|
|
22
|
+
successClaim: boolean | null;
|
|
23
|
+
/** The Agent-declared outcome (`outcome` is required on an evaluation). */
|
|
24
|
+
outcome: RoundOutcome | null;
|
|
25
|
+
shouldContinue: boolean | null;
|
|
26
|
+
/** The Agent's blocker text; required by the boundary when blocked, null
|
|
27
|
+
* when the round declared none. */
|
|
28
|
+
blocker: string | null;
|
|
29
|
+
} | null;
|
|
30
|
+
loopforge: {
|
|
31
|
+
action: "continue" | "stop" | "reject" | "terminate" | "backtrack" | "recovery";
|
|
32
|
+
loopStopReason: StopReason | null;
|
|
33
|
+
enforcementReason: string | null;
|
|
34
|
+
};
|
|
35
|
+
machine: {
|
|
36
|
+
posture: EvidencePosture | null;
|
|
37
|
+
/** false = a transient rejected/terminated attempt, not committed history. */
|
|
38
|
+
committed: boolean;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Render the three fact blocks. The caller owns any heading above them.
|
|
42
|
+
* `density` selects the shared posture renderer's compact form for terminal
|
|
43
|
+
* responses; it never changes the facts. */
|
|
44
|
+
export declare function renderResultFacts(facts: ResultFacts, density: "explain" | "terminal"): string[];
|
|
45
|
+
//# sourceMappingURL=result-facts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-facts.d.ts","sourceRoot":"","sources":["../src/result-facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACX,MAAM,eAAe,CAAC;AAGvB,MAAM,WAAW,WAAW;IAC1B,8EAA8E;IAC9E,KAAK,EAAE;QACL,YAAY,EAAE,OAAO,GAAG,IAAI,CAAC;QAC7B,2EAA2E;QAC3E,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;QAC7B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;QAC/B;4CACoC;QACpC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,IAAI,CAAC;IACT,SAAS,EAAE;QACT,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC;QAChF,cAAc,EAAE,UAAU,GAAG,IAAI,CAAC;QAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;QAChC,8EAA8E;QAC9E,SAAS,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAiCD;;6CAE6C;AAC7C,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,SAAS,GAAG,UAAU,GAC9B,MAAM,EAAE,CA6CV"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** v4.0.4 / v4.0.6: the ONE presentation of a round's result facts.
|
|
2
|
+
*
|
|
3
|
+
* Three kinds of facts stay separate and always appear in this order:
|
|
4
|
+
* 1. Agent report — what the Agent claimed (never machine evidence).
|
|
5
|
+
* 2. LoopForge decision — the disposition and the loop terminal reason.
|
|
6
|
+
* 3. Machine evidence — the persisted EvidencePosture, rendered by the
|
|
7
|
+
* single `formatEvidencePostureLines` renderer.
|
|
8
|
+
*
|
|
9
|
+
* This module derives nothing. It formats facts that were already committed
|
|
10
|
+
* or are already computed by the runtime; it never re-derives `completed`,
|
|
11
|
+
* `machineBackedSuccess` or a "conflict"/"verdict" boolean.
|
|
12
|
+
*
|
|
13
|
+
* v4.0.6: `outcome` is always declared (there is no `success`-derived
|
|
14
|
+
* branch), so the `outcomeDeclared` projection and the Agent stop-reason
|
|
15
|
+
* field are gone; the Agent's blocker text replaces that report detail.
|
|
16
|
+
* The success claim remains a derived read projection.
|
|
17
|
+
*/
|
|
18
|
+
import { formatEvidencePostureLines } from "./evidence-posture-view.js";
|
|
19
|
+
/** Neutral fact statements. They describe the committed trigger; they never
|
|
20
|
+
* restate "task success". */
|
|
21
|
+
const LOOP_STOP_REASON_FACTS = {
|
|
22
|
+
completed: "Agent declared should_continue=false and the active contract was closed or absent.",
|
|
23
|
+
failed: "Agent declared should_continue=false and the effective outcome was not success.",
|
|
24
|
+
blocked: "Agent declared a blocked stop.",
|
|
25
|
+
incomplete: "Agent stopped, but machine verification did not close the active contract " +
|
|
26
|
+
"(or observations were insufficient).",
|
|
27
|
+
max_rounds: "The configured maximum number of rounds was reached.",
|
|
28
|
+
enforcement_terminated: "The enforcement gate terminated the loop.",
|
|
29
|
+
stalled: "The next prompt could not be compiled; call loopforge_resume to retry.",
|
|
30
|
+
cancelled: "The loop was cancelled manually.",
|
|
31
|
+
paused: "Paused is a session status, not a committed loop terminal reason.",
|
|
32
|
+
};
|
|
33
|
+
function booleanText(value) {
|
|
34
|
+
return value === null ? "not available" : String(value);
|
|
35
|
+
}
|
|
36
|
+
/** Render the Agent's blocker as one fact line. A committed blocker is
|
|
37
|
+
* already normalized to ≤500 chars; collapse newlines so the block keeps
|
|
38
|
+
* its one-fact-per-line shape. */
|
|
39
|
+
function blockerText(blocker) {
|
|
40
|
+
const text = blocker?.replace(/\s+/g, " ").trim() ?? "";
|
|
41
|
+
return text.length > 0 ? text : "none";
|
|
42
|
+
}
|
|
43
|
+
/** Render the three fact blocks. The caller owns any heading above them.
|
|
44
|
+
* `density` selects the shared posture renderer's compact form for terminal
|
|
45
|
+
* responses; it never changes the facts. */
|
|
46
|
+
export function renderResultFacts(facts, density) {
|
|
47
|
+
const lines = ["Agent report"];
|
|
48
|
+
if (!facts.agent) {
|
|
49
|
+
const rollback = facts.loopforge.action === "backtrack" ||
|
|
50
|
+
facts.loopforge.action === "recovery";
|
|
51
|
+
lines.push(` none (${rollback ? "rollback directive" : "no evaluation"})`);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
lines.push(` success_claim: ${booleanText(facts.agent.successClaim)}`);
|
|
55
|
+
lines.push(` outcome: ${facts.agent.outcome ?? "not available"}`);
|
|
56
|
+
lines.push(` should_continue: ${booleanText(facts.agent.shouldContinue)}`);
|
|
57
|
+
lines.push(` blocker: ${blockerText(facts.agent.blocker)}`);
|
|
58
|
+
}
|
|
59
|
+
lines.push("", "LoopForge decision");
|
|
60
|
+
lines.push(` action: ${facts.loopforge.action}`);
|
|
61
|
+
if (facts.loopforge.loopStopReason === null) {
|
|
62
|
+
lines.push(" loop_stop_reason: none");
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
lines.push(` loop_stop_reason: ${facts.loopforge.loopStopReason}`);
|
|
66
|
+
lines.push(` ${LOOP_STOP_REASON_FACTS[facts.loopforge.loopStopReason]}`);
|
|
67
|
+
}
|
|
68
|
+
lines.push(` enforcement_reason: ${facts.loopforge.enforcementReason ?? "none"}`);
|
|
69
|
+
lines.push("", facts.machine.committed
|
|
70
|
+
? "Machine evidence"
|
|
71
|
+
: "Machine evidence (transient; not committed)");
|
|
72
|
+
if (!facts.machine.posture) {
|
|
73
|
+
// Never render a null posture as `machine_backed_success: false`: absence
|
|
74
|
+
// of a committed posture is not a machine denial.
|
|
75
|
+
lines.push(" not available in this projection");
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
// The ONE posture renderer supplies the content; this formatter only
|
|
79
|
+
// aligns it under the block heading.
|
|
80
|
+
lines.push(...formatEvidencePostureLines(facts.machine.posture, {
|
|
81
|
+
compact: density === "terminal",
|
|
82
|
+
}).map((line) => ` ${line}`));
|
|
83
|
+
}
|
|
84
|
+
return lines;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=result-facts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-facts.js","sourceRoot":"","sources":["../src/result-facts.ts"],"names":[],"mappings":"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"}
|