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
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/** v4.0.4 / v4.0.7: the ONE runtime source of round-boundary and
|
|
2
|
+
* context-continuity guidance.
|
|
3
|
+
*
|
|
4
|
+
* The compiled prompt footer, the MCP server instructions, the tools/list
|
|
5
|
+
* `contextMode` description, the state file and the Explain view read these
|
|
6
|
+
* constants. The Forge skill keeps only the definitions and a pointer; it
|
|
7
|
+
* must not grow a second copy of the executable sizing rules.
|
|
8
|
+
*
|
|
9
|
+
* `HOST_INVOCATION_CONTRACT` is server-density prose only: the per-round
|
|
10
|
+
* prompt footer carries the Agent action surface, not the host runtime
|
|
11
|
+
* contract. `CONTEXT_MODE_DESCRIPTION` is the ONE tools/list description.
|
|
12
|
+
*
|
|
13
|
+
* This module is pure: no I/O, no policy, no time, no randomness.
|
|
14
|
+
*/
|
|
15
|
+
export const ROUND_BOUNDARY_PRINCIPLE = "One round is a work slice with before/after evidence, not file/token/commit " +
|
|
16
|
+
"count.";
|
|
17
|
+
export const ROUND_BOUNDARY_SIZING = "Keep coupled work together; split when unsafe to verify.";
|
|
18
|
+
export const ROUND_BOUNDARY_SUBMISSION = "Agent chooses continuation via should_continue. A Round Contract scopes " +
|
|
19
|
+
"bounded NEXT-round work and acceptance, not this round's end. Acceptance " +
|
|
20
|
+
"commits; rejection retries the round (+1); maxRounds stops.";
|
|
21
|
+
export const ROUND_BOUNDARY_NON_BOUNDARIES = "Time, invocation/session/stage changes, redelivery, checkpoints, restores, " +
|
|
22
|
+
"status, resume and unpause do not end rounds.";
|
|
23
|
+
/** v4.0.5: the ONE routing sentence for a lost in-context retry invocation.
|
|
24
|
+
* The prompt footer and the short retry guidance read it. LoopForge — not
|
|
25
|
+
* the Agent — recompiles the same round/attempt in clean context. */
|
|
26
|
+
export const ROUND_BOUNDARY_INVOCATION_LOST = "If the invocation that received the previous prompt is gone, call " +
|
|
27
|
+
"loopforge_resume(loopId, invocationLost: true); LoopForge recompiles the " +
|
|
28
|
+
"same logical round and attempt in clean context. Never carry this " +
|
|
29
|
+
"in-context retry prompt into a new invocation.";
|
|
30
|
+
/** v4.0.7: the ONE host invocation contract. It separates the cleared model
|
|
31
|
+
* conversation from the warm host runtime and states what LoopForge does not
|
|
32
|
+
* manage. It is rendered at server density only; the per-round prompt footer
|
|
33
|
+
* does not repeat it. */
|
|
34
|
+
export const HOST_INVOCATION_CONTRACT = "Clean context starts a new model conversation, not a new host or tool " +
|
|
35
|
+
"runtime: do not carry the previous model transcript, tool outputs or " +
|
|
36
|
+
"uncommitted reasoning into it. Keep the same loopId, logical session and " +
|
|
37
|
+
"modified workspace; a host process that stays alive may keep the MCP " +
|
|
38
|
+
"connection and tool processes warm and the installed skill files " +
|
|
39
|
+
"available, while the host holds the submissionHandle for tool calls. " +
|
|
40
|
+
"A warm runtime is not model memory: the new conversation knows only what " +
|
|
41
|
+
"this prompt and the host's stable environment provide. LoopForge does not " +
|
|
42
|
+
"manage provider prompt/KV caches or implicit model habits and neither " +
|
|
43
|
+
"clears nor relies on them. Only committed facts and the bounded " +
|
|
44
|
+
"projections LoopForge returns for this invocation are guaranteed; " +
|
|
45
|
+
"anything else that must survive belongs to explicit host configuration, " +
|
|
46
|
+
"not a LoopForge fact.";
|
|
47
|
+
/** v4.0.7: the ONE tools/list description of PromptContextMode. tools.ts
|
|
48
|
+
* imports it so the wire description and the runtime prose cannot drift. */
|
|
49
|
+
export const CONTEXT_MODE_DESCRIPTION = "The derived context boundary of the returned prompt, projected from its " +
|
|
50
|
+
"PromptArtifact. fresh_invocation starts a new model conversation, not a " +
|
|
51
|
+
"host runtime: the previous model transcript, tool outputs and uncommitted " +
|
|
52
|
+
"reasoning are not carried; the invocation keeps the same loopId, logical " +
|
|
53
|
+
"session and workspace; a live host may keep its MCP connection, tool " +
|
|
54
|
+
"processes and installed skill files warm. It covers first_round, " +
|
|
55
|
+
"next_round, recovery_redo, rejection_escalation and invocation_recovery, " +
|
|
56
|
+
"and may describe the SAME logical round. same_round_retry " +
|
|
57
|
+
"(enforcement_retry) continues the original invocation below the repeated " +
|
|
58
|
+
"same-check rejection threshold. Prompt density does not determine it. " +
|
|
59
|
+
"LoopForge does not manage provider prompt/KV caches or implicit model " +
|
|
60
|
+
"habits. Read contextReason for the specific case.";
|
|
61
|
+
/** The host execution contract. It names the four context strategies instead
|
|
62
|
+
* of asking the host to reinterpret an enum value:
|
|
63
|
+
* clean context, in-context repair, clean-context repair, recovery redo. */
|
|
64
|
+
export const CONTEXT_CONTINUITY_RULES = "A fresh invocation is not a new loop: reuse the same loopId and workspace. " +
|
|
65
|
+
"It may carry the same logical round (an enforcement retry) or the next " +
|
|
66
|
+
"round after the last commit; it is the context boundary, not the round " +
|
|
67
|
+
"boundary. Clean context is not a workspace reset: the current modified " +
|
|
68
|
+
"workspace continues; it exists to keep the round focused and avoid an " +
|
|
69
|
+
"overloaded or misleading transcript. " +
|
|
70
|
+
HOST_INVOCATION_CONTRACT + " " +
|
|
71
|
+
"Prompt density does not choose the context boundary. Below the repeated " +
|
|
72
|
+
"same-check rejection threshold, continue the original invocation and " +
|
|
73
|
+
"inject the rejection notice, findings and failure reason. If that " +
|
|
74
|
+
"invocation is gone, call loopforge_resume(loopId, invocationLost: true): " +
|
|
75
|
+
"LoopForge recompiles the SAME round and attempt as a cold-context " +
|
|
76
|
+
"invocation_recovery prompt; never reuse the in-context retry prompt in a " +
|
|
77
|
+
"new model conversation. At the rejection escalation threshold, start a " +
|
|
78
|
+
"clean model conversation with the retry notice, findings, rejected-attempt " +
|
|
79
|
+
"posture and committed memory. That posture describes the rejected attempt, " +
|
|
80
|
+
"not the current workspace; inspect the current workspace before acting. " +
|
|
81
|
+
"A retry inside a recovered redo keeps its Recovery Brief. A held prompt, " +
|
|
82
|
+
"checkpoint, restore, status, resume or unpause never advances or resets " +
|
|
83
|
+
"the round. If the loopId or prompt is lost, use loopforge_status view=all " +
|
|
84
|
+
"and loopforge_resume; do not call loopforge_start for an existing " +
|
|
85
|
+
"objective. A stopped loop is terminal; resume does not reopen it.";
|
|
86
|
+
/** Render the runtime guidance.
|
|
87
|
+
*
|
|
88
|
+
* - `prompt` renders the boundary principle, sizing, submission and
|
|
89
|
+
* non-boundary rules. A `same_round_retry` already explained its single
|
|
90
|
+
* logical round in the retry section, so only submission and non-boundary
|
|
91
|
+
* rules are repeated. The fresh body is kept under ~480 characters so the
|
|
92
|
+
* L0 footer does not force a policy-budget change.
|
|
93
|
+
* - `server` renders the same rules plus the host context-continuity
|
|
94
|
+
* contract. */
|
|
95
|
+
export function renderRoundGuidance(density, contextMode) {
|
|
96
|
+
if (density === "prompt") {
|
|
97
|
+
if (contextMode === "same_round_retry") {
|
|
98
|
+
return [
|
|
99
|
+
ROUND_BOUNDARY_SUBMISSION,
|
|
100
|
+
ROUND_BOUNDARY_NON_BOUNDARIES,
|
|
101
|
+
ROUND_BOUNDARY_INVOCATION_LOST,
|
|
102
|
+
].join("\n");
|
|
103
|
+
}
|
|
104
|
+
return [
|
|
105
|
+
ROUND_BOUNDARY_PRINCIPLE,
|
|
106
|
+
ROUND_BOUNDARY_SIZING,
|
|
107
|
+
ROUND_BOUNDARY_SUBMISSION,
|
|
108
|
+
ROUND_BOUNDARY_NON_BOUNDARIES,
|
|
109
|
+
].join("\n");
|
|
110
|
+
}
|
|
111
|
+
return [
|
|
112
|
+
ROUND_BOUNDARY_PRINCIPLE,
|
|
113
|
+
ROUND_BOUNDARY_SIZING,
|
|
114
|
+
ROUND_BOUNDARY_SUBMISSION,
|
|
115
|
+
ROUND_BOUNDARY_NON_BOUNDARIES,
|
|
116
|
+
CONTEXT_CONTINUITY_RULES,
|
|
117
|
+
].join("\n");
|
|
118
|
+
}
|
|
119
|
+
/** Human-readable strategy label for one context boundary. JSON/artifacts keep
|
|
120
|
+
* the enum values; every human surface uses this ONE mapping.
|
|
121
|
+
*
|
|
122
|
+
* `recoveryBoundary` means a committed rollback directive governs this
|
|
123
|
+
* compile. A repeated rejection can escalate a retried redo; the label must
|
|
124
|
+
* keep the recovery-lesson fact instead of dropping it. */
|
|
125
|
+
export function formatContextBoundaryLabel(mode, reason, options = {}) {
|
|
126
|
+
if (mode === "same_round_retry") {
|
|
127
|
+
return "in-context repair (same_round_retry; enforcement_retry; continue " +
|
|
128
|
+
"original invocation if alive; lessons injected)";
|
|
129
|
+
}
|
|
130
|
+
if (reason === "rejection_escalation") {
|
|
131
|
+
return options.recoveryBoundary
|
|
132
|
+
? "clean context repair + recovery retry (fresh_invocation; " +
|
|
133
|
+
"rejection_escalation; recovery lessons carried)"
|
|
134
|
+
: "clean context repair (fresh_invocation; rejection_escalation; same " +
|
|
135
|
+
"logical round; rejected posture is attempt-time only)";
|
|
136
|
+
}
|
|
137
|
+
if (reason === "invocation_recovery") {
|
|
138
|
+
return options.recoveryBoundary
|
|
139
|
+
? "clean context repair + invocation recovery + recovery retry " +
|
|
140
|
+
"(fresh_invocation; invocation_recovery; same logical round; " +
|
|
141
|
+
"retry and recovery lessons carried)"
|
|
142
|
+
: "clean context repair + invocation recovery (fresh_invocation; " +
|
|
143
|
+
"invocation_recovery; same logical round; retry lessons carried)";
|
|
144
|
+
}
|
|
145
|
+
if (reason === "enforcement_retry") {
|
|
146
|
+
return options.recoveryBoundary
|
|
147
|
+
? "clean context repair + recovery retry (fresh_invocation; " +
|
|
148
|
+
"enforcement_retry; recovery lessons carried)"
|
|
149
|
+
: "clean context repair (fresh_invocation; enforcement_retry; same " +
|
|
150
|
+
"logical round; lessons carried)";
|
|
151
|
+
}
|
|
152
|
+
if (reason === "recovery_redo") {
|
|
153
|
+
return "clean context after restore (fresh_invocation; recovery_redo; " +
|
|
154
|
+
"lessons carried)";
|
|
155
|
+
}
|
|
156
|
+
if (reason === "first_round") {
|
|
157
|
+
return "clean context — first round (fresh_invocation)";
|
|
158
|
+
}
|
|
159
|
+
return "clean context — next round (fresh_invocation; workspace continues)";
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=round-guidance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-guidance.js","sourceRoot":"","sources":["../src/round-guidance.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** v3.9.7 / v4.0.6: the ONE round-outcome predicates.
|
|
2
|
+
*
|
|
3
|
+
* Kept in a neutral module so contract closure, the contract walker, the
|
|
4
|
+
* verification gate, the coordinator and the gate record all share the same
|
|
5
|
+
* blocked definition without an import cycle through self-eval.
|
|
6
|
+
*
|
|
7
|
+
* v4.0.6: `outcome` is the SOLE round conclusion — `success` and
|
|
8
|
+
* `agent_stop_reason` are gone, so these predicates read one field.
|
|
9
|
+
*/
|
|
10
|
+
import type { RoundOutcome, SelfEvaluation } from "./protocol.js";
|
|
11
|
+
/** v2.12 / v4.0.6: the round outcome. `outcome` is required on every
|
|
12
|
+
* evaluation; the defensive fallback only protects malformed library input
|
|
13
|
+
* and never invents success. */
|
|
14
|
+
export declare function effectiveOutcome(selfEval: SelfEvaluation): RoundOutcome;
|
|
15
|
+
/** v2.12 / v4.0.6: Whether the outcome is a success claim. */
|
|
16
|
+
export declare function effectiveSuccess(selfEval: SelfEvaluation): boolean;
|
|
17
|
+
/** v3.8.3 / v4.0.6: the ONE definition of "this round declares itself
|
|
18
|
+
* blocked" — a declared `outcome: "blocked"`. `needs_human_input` is now
|
|
19
|
+
* expressed by the blocker text, not a separate field. */
|
|
20
|
+
export declare function declaresBlocked(selfEval: SelfEvaluation): boolean;
|
|
21
|
+
//# sourceMappingURL=round-outcome.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-outcome.d.ts","sourceRoot":"","sources":["../src/round-outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAElE;;iCAEiC;AACjC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,YAAY,CAOvE;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAElE;AAED;;2DAE2D;AAC3D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAEjE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** v3.9.7 / v4.0.6: the ONE round-outcome predicates.
|
|
2
|
+
*
|
|
3
|
+
* Kept in a neutral module so contract closure, the contract walker, the
|
|
4
|
+
* verification gate, the coordinator and the gate record all share the same
|
|
5
|
+
* blocked definition without an import cycle through self-eval.
|
|
6
|
+
*
|
|
7
|
+
* v4.0.6: `outcome` is the SOLE round conclusion — `success` and
|
|
8
|
+
* `agent_stop_reason` are gone, so these predicates read one field.
|
|
9
|
+
*/
|
|
10
|
+
/** v2.12 / v4.0.6: the round outcome. `outcome` is required on every
|
|
11
|
+
* evaluation; the defensive fallback only protects malformed library input
|
|
12
|
+
* and never invents success. */
|
|
13
|
+
export function effectiveOutcome(selfEval) {
|
|
14
|
+
const outcome = selfEval.outcome;
|
|
15
|
+
if (outcome === "success" || outcome === "partial" ||
|
|
16
|
+
outcome === "failed" || outcome === "blocked") {
|
|
17
|
+
return outcome;
|
|
18
|
+
}
|
|
19
|
+
return "failed";
|
|
20
|
+
}
|
|
21
|
+
/** v2.12 / v4.0.6: Whether the outcome is a success claim. */
|
|
22
|
+
export function effectiveSuccess(selfEval) {
|
|
23
|
+
return effectiveOutcome(selfEval) === "success";
|
|
24
|
+
}
|
|
25
|
+
/** v3.8.3 / v4.0.6: the ONE definition of "this round declares itself
|
|
26
|
+
* blocked" — a declared `outcome: "blocked"`. `needs_human_input` is now
|
|
27
|
+
* expressed by the blocker text, not a separate field. */
|
|
28
|
+
export function declaresBlocked(selfEval) {
|
|
29
|
+
return selfEval.outcome === "blocked";
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=round-outcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"round-outcome.js","sourceRoot":"","sources":["../src/round-outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;iCAEiC;AACjC,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;IACjC,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;QAC9C,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;AAClD,CAAC;AAED;;2DAE2D;AAC3D,MAAM,UAAU,eAAe,CAAC,QAAwB;IACtD,OAAO,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC;AACxC,CAAC"}
|
|
@@ -6,17 +6,88 @@
|
|
|
6
6
|
* a process crash is idempotent.
|
|
7
7
|
*/
|
|
8
8
|
import type { LoopStore } from "./loop-store.js";
|
|
9
|
-
import { LoopForgeEngine } from "./engine.js";
|
|
10
9
|
import type { ObservationDelta } from "./evidence-provider.js";
|
|
11
|
-
import type { ContractBinding, MachineObservation, PromptArtifact, SelfEvaluation, SubmissionDiagnostic } from "./protocol.js";
|
|
10
|
+
import type { CheckpointRef, CompiledRoundFacts, ContractBinding, EvidencePosture, MachineObservation, OperatorAcceptance, PromptArtifact, RecoveryDirective, RecoveryTarget, SelfEvaluation, SubmissionDiagnostic, VerificationFlag, WorkspaceCheckpointManifest } from "./protocol.js";
|
|
12
11
|
import { type RoundProcessResult } from "./round-coordinator.js";
|
|
13
12
|
import type { RoundCommitStore } from "./storage.js";
|
|
14
|
-
/** v3.9.
|
|
15
|
-
*
|
|
16
|
-
|
|
13
|
+
/** v3.9.7: schema 5 adds the transaction before-image, explicit mid-round
|
|
14
|
+
* checkpoints and the redo restore marker. v4.0.3: schema 7 requires the
|
|
15
|
+
* persisted `EvidencePosture` on every result and adds the transient
|
|
16
|
+
* `RetryContext`. v4.0.4: schema 8 embeds the schema-10 PromptArtifact
|
|
17
|
+
* (`fresh_invocation`) and the renamed `SelfEvaluation.agent_stop_reason`.
|
|
18
|
+
* v4.0.6: schema 9 is a BREAKING shape break — the committed evaluation
|
|
19
|
+
* carries a required `outcome`, one `execution_report.claims` channel
|
|
20
|
+
* (`cr-`/`rci-`) and `round_contract.supersedes`; `success`,
|
|
21
|
+
* `agent_stop_reason`, `contract_transition`, `tests_reported`,
|
|
22
|
+
* `criterion_claims` and `contract_item_claims` are gone. Every earlier
|
|
23
|
+
* version is reported as legacy by `legacyTransactionRounds`; there is no
|
|
24
|
+
* compatibility migration. */
|
|
25
|
+
export declare const ROUND_TRANSACTION_SCHEMA_VERSION: 9;
|
|
26
|
+
/** Maximum distinct mid-round checkpoints one transaction may reference. */
|
|
27
|
+
export declare const MAX_MID_CHECKPOINTS_PER_TRANSACTION = 32;
|
|
28
|
+
/** The root branch identity for every loop. */
|
|
29
|
+
export declare function rootBranchId(loopId: string): string;
|
|
30
|
+
/** v3.9.6: deterministic transaction identity. The logical round identity is
|
|
31
|
+
* still `roundId`; this id prevents a deep redo from replaying an abandoned
|
|
32
|
+
* commit at the same numeric round. */
|
|
33
|
+
export declare function deriveTransactionId(input: {
|
|
34
|
+
kind: "evaluation" | "rollback";
|
|
35
|
+
branchId: string;
|
|
36
|
+
roundId: string;
|
|
37
|
+
attempt: number;
|
|
38
|
+
promptHash?: string;
|
|
39
|
+
recovery?: {
|
|
40
|
+
target: RecoveryTarget;
|
|
41
|
+
reason: string;
|
|
42
|
+
/** v4.0.3: directive facts that distinguish two rollbacks of the same
|
|
43
|
+
* target/reason (stable, sorted, never arbitrary object order). */
|
|
44
|
+
abandonedRounds?: number[];
|
|
45
|
+
failedRounds?: number[];
|
|
46
|
+
observedSkippedFiles?: string[];
|
|
47
|
+
reportedSkippedFiles?: string[];
|
|
48
|
+
triggerFindings?: string[];
|
|
49
|
+
};
|
|
50
|
+
}): string;
|
|
17
51
|
export type RoundTransactionPhase = "prepared" | "prompted" | "evaluated" | "rejected" | "committed" | "terminated";
|
|
52
|
+
/** v4.0.3: the transient facts a held retry needs, attached to the REJECTED
|
|
53
|
+
* snapshot before the retry prompt is compiled.
|
|
54
|
+
*
|
|
55
|
+
* It is in-flight transaction state, never committed history: a rejected
|
|
56
|
+
* attempt writes no Vault entry, and the retry commit clears this context
|
|
57
|
+
* together with the evaluation/result of the rejected attempt. Keeping it on
|
|
58
|
+
* the held snapshot (rather than only in the process that produced the
|
|
59
|
+
* rejection) is what lets `loopforge_resume`/a stalled retry still know the
|
|
60
|
+
* attempt number, rejection notice, findings and transient posture.
|
|
61
|
+
*
|
|
62
|
+
* `attempt` is the attempt the NEXT compile/submission uses — it equals
|
|
63
|
+
* `rejectedAttempt + 1`. */
|
|
64
|
+
export interface RetryContext {
|
|
65
|
+
/** The next attempt; equals `rejectedAttempt + 1`. */
|
|
66
|
+
attempt: number;
|
|
67
|
+
rejectedAttempt: number;
|
|
68
|
+
/** The enforcement gate's protected rejection notice. */
|
|
69
|
+
rejectionNotice: string;
|
|
70
|
+
/** Findings from the rejected attempt — authority for the retry, never for
|
|
71
|
+
* committed history. */
|
|
72
|
+
verificationFlags: VerificationFlag[];
|
|
73
|
+
/** The rejected attempt's transient evidence posture. It is rendered only
|
|
74
|
+
* as "not committed" and never enters the Vault, Working Memory or a gate. */
|
|
75
|
+
evidencePosture: EvidencePosture;
|
|
76
|
+
rejectedAt: number;
|
|
77
|
+
}
|
|
18
78
|
export interface RoundTransactionSnapshot {
|
|
19
79
|
schemaVersion: typeof ROUND_TRANSACTION_SCHEMA_VERSION;
|
|
80
|
+
/** v3.9.6: the transaction's branch. The root branch is
|
|
81
|
+
* `loop:<loopId>:branch:root`; a rollback directive's transactionId names
|
|
82
|
+
* the child branch used by its redo and all later transactions. */
|
|
83
|
+
branchId: string;
|
|
84
|
+
/** v3.9.6: stable identity of this transaction. `roundId` remains the
|
|
85
|
+
* logical round; `transactionId` distinguishes a redo from an abandoned
|
|
86
|
+
* commit at the same numeric round. */
|
|
87
|
+
transactionId: string;
|
|
88
|
+
/** v3.9.6: evaluations are normal work rounds; rollbacks are directives
|
|
89
|
+
* that abandon a round without claiming work. */
|
|
90
|
+
kind: "evaluation" | "rollback";
|
|
20
91
|
roundId: string;
|
|
21
92
|
loopId: string;
|
|
22
93
|
round: number;
|
|
@@ -25,13 +96,47 @@ export interface RoundTransactionSnapshot {
|
|
|
25
96
|
beforeEvidence: MachineObservation[];
|
|
26
97
|
afterEvidence?: MachineObservation[];
|
|
27
98
|
evaluation?: SelfEvaluation;
|
|
99
|
+
/** v4.0.1: the immutable operator surface, carried byte-identically on every
|
|
100
|
+
* evaluation transaction and rollback directive. A same-round redo may
|
|
101
|
+
* replace the numeric round slot, so the fact must travel with each durable
|
|
102
|
+
* document rather than existing only on the root. */
|
|
103
|
+
operatorAcceptance?: OperatorAcceptance;
|
|
104
|
+
/** v4.0.1: the compile facts that produced this evaluation. Absent on a
|
|
105
|
+
* rollback directive. */
|
|
106
|
+
compiled?: CompiledRoundFacts;
|
|
107
|
+
/** v3.9.6: committed rollback directive facts (rollback kind only). */
|
|
108
|
+
recovery?: RecoveryDirective;
|
|
28
109
|
result?: RoundProcessResult;
|
|
110
|
+
/** v4.0.3: transient retry facts. Present only on a rejected attempt or its
|
|
111
|
+
* held retry prompt; never on a committed transaction, a directive or a
|
|
112
|
+
* terminated attempt. It is cleared before the retry commit. */
|
|
113
|
+
retryContext?: RetryContext;
|
|
29
114
|
/** v3.9.1: every lossy normalization decision for this submission. Saved
|
|
30
115
|
* with the transaction; strict boundary failures never reach here. */
|
|
31
116
|
normalizationDiagnostics?: SubmissionDiagnostic[];
|
|
32
117
|
/** v3.9.1: the known evaluation paths present in the raw submission. The
|
|
33
118
|
* receipt uses this manifest; unknown paths live in diagnostics only. */
|
|
34
119
|
submittedFields?: string[];
|
|
120
|
+
/** v3.9.7: the automatic transaction before-image. Required when the
|
|
121
|
+
* before-phase Git boundary was observed and materialized. */
|
|
122
|
+
beforeCheckpoint?: CheckpointRef;
|
|
123
|
+
/** v3.9.7: explicit machine fact when the automatic before-image failed.
|
|
124
|
+
* The round may continue; it is simply not a recovery target. */
|
|
125
|
+
beforeCheckpointError?: {
|
|
126
|
+
code: string;
|
|
127
|
+
detail: string;
|
|
128
|
+
at: number;
|
|
129
|
+
};
|
|
130
|
+
/** v3.9.7: Agent-created mid-round savepoints, creation order, capped. */
|
|
131
|
+
checkpoints?: CheckpointRef[];
|
|
132
|
+
/** v3.9.7: only on the redo transaction. Proves this round's before state
|
|
133
|
+
* was produced by a verified restore of the named directive. The target
|
|
134
|
+
* checkpoint id/hash live only in the directive. */
|
|
135
|
+
restore?: {
|
|
136
|
+
directiveTransactionId: string;
|
|
137
|
+
redoRound: number;
|
|
138
|
+
verifiedAt: number;
|
|
139
|
+
};
|
|
35
140
|
/** v3.8: the contract binding resolved at commit time (see ContractBinding).
|
|
36
141
|
* Absent when the committing round declared no contract. */
|
|
37
142
|
contractBinding?: ContractBinding;
|
|
@@ -44,28 +149,24 @@ export interface RoundTransactionInput {
|
|
|
44
149
|
snapshot: RoundTransactionSnapshot;
|
|
45
150
|
task: string;
|
|
46
151
|
maxRounds: number;
|
|
152
|
+
/** v4.0.1: the pre-commit history loaded by the advance path. Absent for
|
|
153
|
+
* direct callers, which let the round coordinator load it. */
|
|
154
|
+
history?: import("./history.js").CommittedHistory;
|
|
47
155
|
selfEval: SelfEvaluation;
|
|
48
|
-
lastSelfEval?: SelfEvaluation;
|
|
49
156
|
consecutiveRejections: number;
|
|
50
157
|
/** L4 (v3.7.x): previous round's rejection check (own-streak basis). */
|
|
51
158
|
lastRejectionCheck?: string;
|
|
52
|
-
successTrajectory: boolean[];
|
|
53
|
-
/** v2.13: Files from skipped backtrack rounds for restore check. */
|
|
54
|
-
backtrackSkippedFiles?: string[];
|
|
55
|
-
/** M3 (v3.7.x): skipped-file git fingerprints at their failed rounds. */
|
|
56
|
-
backtrackSkippedFingerprints?: Record<string, string>;
|
|
57
|
-
/** v2.12: Git HEAD of the backtrack restore point. The verification gate
|
|
58
|
-
* checks the workspace returns to this commit before accepting work. */
|
|
59
|
-
backtrackTargetGitHead?: string;
|
|
60
|
-
/** v3.9: files already dirty at the backtrack restore point (restore
|
|
61
|
-
* baseline — see RoundProcessResult.backtrackTargetDirty). */
|
|
62
|
-
backtrackTargetDirty?: string[];
|
|
63
159
|
/** v3.8.3: trusted round-start entrypoint fingerprints (see RoundProcessInput). */
|
|
64
160
|
entrypointTrust?: Record<string, string>;
|
|
65
161
|
/** v3.9.1: normalization metadata carried into the evaluated snapshot. */
|
|
66
162
|
normalizationDiagnostics?: SubmissionDiagnostic[];
|
|
67
163
|
submittedFields?: string[];
|
|
68
164
|
actualEvidence: MachineObservation[];
|
|
165
|
+
/** The in-flight transaction's before-image, for machine backtrack target
|
|
166
|
+
* mapping. Never a cognitive input. */
|
|
167
|
+
beforeCheckpoint?: CheckpointRef;
|
|
168
|
+
/** Reads a checkpoint manifest from the store (machine backtrack only). */
|
|
169
|
+
resolveCheckpointManifest?: (ref: CheckpointRef) => WorkspaceCheckpointManifest | null;
|
|
69
170
|
}
|
|
70
171
|
export interface RoundTransactionOutcome {
|
|
71
172
|
snapshot: RoundTransactionSnapshot;
|
|
@@ -73,6 +174,15 @@ export interface RoundTransactionOutcome {
|
|
|
73
174
|
/** true when a prior committed decision was replayed from the vault. */
|
|
74
175
|
replayed: boolean;
|
|
75
176
|
}
|
|
177
|
+
/** v3.9.6: a first-class rollback directive. `snapshot` is the held
|
|
178
|
+
* evaluation snapshot of the abandoned round; `recovery.transaction_id` is
|
|
179
|
+
* both the directive transaction and the child branch identity. */
|
|
180
|
+
export interface RecoveryTransactionInput {
|
|
181
|
+
snapshot: RoundTransactionSnapshot;
|
|
182
|
+
loopId: string;
|
|
183
|
+
recovery: RecoveryDirective;
|
|
184
|
+
actualEvidence: MachineObservation[];
|
|
185
|
+
}
|
|
76
186
|
/** v3.8/v3.9.1: The round's observation delta (before → after). Each entry
|
|
77
187
|
* carries raw before/after references; Git's `changedFiles` is the only
|
|
78
188
|
* file-change fact and is null when the pair cannot be compared. DERIVED,
|
|
@@ -85,20 +195,57 @@ export declare function deriveRoundObservationDelta(before: MachineObservation[]
|
|
|
85
195
|
* legacy documents explicitly instead of letting them vanish from history. */
|
|
86
196
|
export declare function transactionSchemaVersionOf(value: unknown): number | null;
|
|
87
197
|
export declare function makeRoundId(loopId: string, round: number): string;
|
|
88
|
-
export declare function prepareRoundTransaction(loopId: string, round: number, beforeEvidence: MachineObservation[], promptArtifact?: PromptArtifact
|
|
198
|
+
export declare function prepareRoundTransaction(loopId: string, round: number, beforeEvidence: MachineObservation[], promptArtifact?: PromptArtifact, opts?: {
|
|
199
|
+
branchId?: string;
|
|
200
|
+
operatorAcceptance?: OperatorAcceptance;
|
|
201
|
+
compiled?: CompiledRoundFacts;
|
|
202
|
+
kind?: "evaluation";
|
|
203
|
+
beforeCheckpoint?: CheckpointRef;
|
|
204
|
+
beforeCheckpointError?: {
|
|
205
|
+
code: string;
|
|
206
|
+
detail: string;
|
|
207
|
+
at: number;
|
|
208
|
+
};
|
|
209
|
+
}): RoundTransactionSnapshot;
|
|
89
210
|
/** Attach the next prompt attempt to a rejected logical round without changing
|
|
90
211
|
* its identity or evidence baseline. Evaluation fields belong to the previous
|
|
91
212
|
* attempt and are cleared before the Agent receives the retry prompt. */
|
|
92
|
-
export declare function prepareRejectedAttempt(rejected: RoundTransactionSnapshot, promptArtifact: PromptArtifact): RoundTransactionSnapshot;
|
|
213
|
+
export declare function prepareRejectedAttempt(rejected: RoundTransactionSnapshot, promptArtifact: PromptArtifact, compiled?: CompiledRoundFacts, operatorAcceptance?: OperatorAcceptance): RoundTransactionSnapshot;
|
|
214
|
+
/** v4.0.5: re-bind a held RETRY prompt to a newly compiled artifact for the
|
|
215
|
+
* SAME logical round and attempt. This is not a new attempt: attempt, round,
|
|
216
|
+
* before evidence, retry facts, restore marker and branch stay byte-identical;
|
|
217
|
+
* only the prompt-derived identity (artifact, prompt hash, transaction id and
|
|
218
|
+
* the owning ids on checkpoints) changes.
|
|
219
|
+
*
|
|
220
|
+
* Context preservation is enforced here, not by convention:
|
|
221
|
+
* - the artifact identity must equal the held identity;
|
|
222
|
+
* - an invocation-recovery recompile must be
|
|
223
|
+
* `fresh_invocation / invocation_recovery`;
|
|
224
|
+
* - every other recompile must keep the held mode and reason exactly.
|
|
225
|
+
*
|
|
226
|
+
* Evaluation/result fields of the rejected attempt are cleared before the
|
|
227
|
+
* Agent receives the new prompt, exactly like `prepareRejectedAttempt`. */
|
|
228
|
+
export declare function rebindHeldPrompt(held: RoundTransactionSnapshot, artifact: PromptArtifact, compiled?: CompiledRoundFacts, operatorAcceptance?: OperatorAcceptance): RoundTransactionSnapshot;
|
|
229
|
+
/** v4.0.3: schema 7 structural validation of the persisted evidence posture.
|
|
230
|
+
* A committed round without a well-formed posture is a HARD break — it is not
|
|
231
|
+
* committed history and is reported as legacy, never silently re-derived. */
|
|
232
|
+
export declare function isEvidencePosture(value: unknown): value is EvidencePosture;
|
|
233
|
+
/** v4.0.3: structural validation of the transient retry context. It is only
|
|
234
|
+
* legal on a rejected attempt or its held retry prompt. */
|
|
235
|
+
export declare function isRetryContext(value: unknown): value is RetryContext;
|
|
93
236
|
export declare function isProcessResult(value: unknown): value is RoundProcessResult;
|
|
94
237
|
/** Parse a persisted snapshot without trusting arbitrary vault data. */
|
|
95
238
|
export declare function parseRoundTransactionSnapshot(value: unknown): RoundTransactionSnapshot | null;
|
|
96
239
|
export declare class RoundTransactionCoordinator {
|
|
97
|
-
private readonly engine;
|
|
98
240
|
private readonly store;
|
|
99
241
|
private readonly commitStore;
|
|
100
|
-
constructor(
|
|
242
|
+
constructor(store: LoopStore, commitStore?: RoundCommitStore);
|
|
101
243
|
process(input: RoundTransactionInput): RoundTransactionOutcome;
|
|
244
|
+
/** v3.9.6: commit an Agent-initiated rollback directive. This path does not
|
|
245
|
+
* run verification or enforcement: abandoning work is an action, not a
|
|
246
|
+
* success claim. The directive is a typed event, not a `:feedback` round. */
|
|
247
|
+
commitRecovery(input: RecoveryTransactionInput): RoundTransactionOutcome;
|
|
248
|
+
private readRecoveryCommitted;
|
|
102
249
|
/** Recover an already committed decision without evaluating or writing. */
|
|
103
250
|
recover(snapshot: RoundTransactionSnapshot): RoundTransactionOutcome | null;
|
|
104
251
|
private readCommitted;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"round-transaction.d.ts","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"round-transaction.d.ts","sourceRoot":"","sources":["../src/round-transaction.ts"],"names":[],"mappings":"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"}
|