loopforge 2.11.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/README.md +4 -4
  2. package/dist/audit.d.ts +50 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/audit.js +158 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/canonical-state.d.ts +21 -9
  7. package/dist/canonical-state.d.ts.map +1 -1
  8. package/dist/canonical-state.js +34 -16
  9. package/dist/canonical-state.js.map +1 -1
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +16 -6
  12. package/dist/cli.js.map +1 -1
  13. package/dist/cognitive-governance.d.ts +40 -0
  14. package/dist/cognitive-governance.d.ts.map +1 -0
  15. package/dist/cognitive-governance.js +126 -0
  16. package/dist/cognitive-governance.js.map +1 -0
  17. package/dist/enforcement-gate.d.ts +8 -3
  18. package/dist/enforcement-gate.d.ts.map +1 -1
  19. package/dist/enforcement-gate.js +419 -92
  20. package/dist/enforcement-gate.js.map +1 -1
  21. package/dist/engine.d.ts +47 -7
  22. package/dist/engine.d.ts.map +1 -1
  23. package/dist/engine.js +303 -60
  24. package/dist/engine.js.map +1 -1
  25. package/dist/evidence-claims.d.ts +50 -0
  26. package/dist/evidence-claims.d.ts.map +1 -0
  27. package/dist/evidence-claims.js +134 -0
  28. package/dist/evidence-claims.js.map +1 -0
  29. package/dist/generate-schema.js +6 -1
  30. package/dist/generate-schema.js.map +1 -1
  31. package/dist/index.d.ts +3 -3
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/loop-compiler.d.ts +41 -3
  36. package/dist/loop-compiler.d.ts.map +1 -1
  37. package/dist/loop-compiler.js +310 -38
  38. package/dist/loop-compiler.js.map +1 -1
  39. package/dist/loop-projection.d.ts +26 -0
  40. package/dist/loop-projection.d.ts.map +1 -0
  41. package/dist/loop-projection.js +142 -0
  42. package/dist/loop-projection.js.map +1 -0
  43. package/dist/loop-store.d.ts +91 -41
  44. package/dist/loop-store.d.ts.map +1 -1
  45. package/dist/loop-store.js +243 -173
  46. package/dist/loop-store.js.map +1 -1
  47. package/dist/mcp/round-lifecycle.d.ts +216 -0
  48. package/dist/mcp/round-lifecycle.d.ts.map +1 -0
  49. package/dist/mcp/round-lifecycle.js +926 -0
  50. package/dist/mcp/round-lifecycle.js.map +1 -0
  51. package/dist/mcp/server.d.ts +3 -2
  52. package/dist/mcp/server.d.ts.map +1 -1
  53. package/dist/mcp/server.js +65 -9
  54. package/dist/mcp/server.js.map +1 -1
  55. package/dist/mcp/session.d.ts +47 -139
  56. package/dist/mcp/session.d.ts.map +1 -1
  57. package/dist/mcp/session.js +284 -784
  58. package/dist/mcp/session.js.map +1 -1
  59. package/dist/mcp/tools.d.ts +23 -1
  60. package/dist/mcp/tools.d.ts.map +1 -1
  61. package/dist/mcp/tools.js +270 -79
  62. package/dist/mcp/tools.js.map +1 -1
  63. package/dist/policy-metrics.d.ts +11 -0
  64. package/dist/policy-metrics.d.ts.map +1 -1
  65. package/dist/policy-metrics.js +118 -21
  66. package/dist/policy-metrics.js.map +1 -1
  67. package/dist/policy.d.ts +26 -1
  68. package/dist/policy.d.ts.map +1 -1
  69. package/dist/policy.js +13 -2
  70. package/dist/policy.js.map +1 -1
  71. package/dist/prompt-assembler.d.ts +34 -1
  72. package/dist/prompt-assembler.d.ts.map +1 -1
  73. package/dist/prompt-assembler.js +320 -42
  74. package/dist/prompt-assembler.js.map +1 -1
  75. package/dist/protocol.d.ts +169 -1
  76. package/dist/protocol.d.ts.map +1 -1
  77. package/dist/protocol.js +39 -0
  78. package/dist/protocol.js.map +1 -1
  79. package/dist/replay.d.ts +5 -5
  80. package/dist/replay.d.ts.map +1 -1
  81. package/dist/replay.js +9 -8
  82. package/dist/replay.js.map +1 -1
  83. package/dist/round-coordinator.d.ts +6 -3
  84. package/dist/round-coordinator.d.ts.map +1 -1
  85. package/dist/round-coordinator.js +38 -19
  86. package/dist/round-coordinator.js.map +1 -1
  87. package/dist/round-driver.d.ts +9 -4
  88. package/dist/round-driver.d.ts.map +1 -1
  89. package/dist/round-driver.js +15 -7
  90. package/dist/round-driver.js.map +1 -1
  91. package/dist/round-transaction.d.ts +7 -3
  92. package/dist/round-transaction.d.ts.map +1 -1
  93. package/dist/round-transaction.js +93 -88
  94. package/dist/round-transaction.js.map +1 -1
  95. package/dist/self-eval.d.ts +31 -1
  96. package/dist/self-eval.d.ts.map +1 -1
  97. package/dist/self-eval.js +115 -12
  98. package/dist/self-eval.js.map +1 -1
  99. package/dist/storage.d.ts +3 -4
  100. package/dist/storage.d.ts.map +1 -1
  101. package/dist/storage.js +5 -4
  102. package/dist/storage.js.map +1 -1
  103. package/dist/token-utils.d.ts +20 -7
  104. package/dist/token-utils.d.ts.map +1 -1
  105. package/dist/token-utils.js +68 -9
  106. package/dist/token-utils.js.map +1 -1
  107. package/dist/verification-gate.d.ts +54 -2
  108. package/dist/verification-gate.d.ts.map +1 -1
  109. package/dist/verification-gate.js +433 -25
  110. package/dist/verification-gate.js.map +1 -1
  111. package/loop_policy.json +35 -8
  112. package/package.json +3 -2
  113. package/skills/perception/SKILL.md +24 -6
  114. package/dist/backends/interface.d.ts +0 -39
  115. package/dist/backends/interface.d.ts.map +0 -1
  116. package/dist/backends/interface.js +0 -6
  117. package/dist/backends/interface.js.map +0 -1
@@ -0,0 +1,216 @@
1
+ /** LoopForge MCP — Round lifecycle.
2
+ *
3
+ * The round state machine split out of SessionManager: crash recovery,
4
+ * transaction execution, disposition result building, and the advance
5
+ * pipeline. SessionManager owns "who may touch a session" (registry, queue,
6
+ * leases); this class owns "what happens to a session" (state machine,
7
+ * recovery, result building).
8
+ *
9
+ * Every method was moved verbatim from SessionManager. Only reference paths
10
+ * changed (this.sessions.* → registry.*, this.ownerId / this.leaseMs →
11
+ * constructor deps, this.contextProvider → getContext()).
12
+ */
13
+ import { LoopForgeEngine } from "../engine.js";
14
+ import type { LoopForgeRequest, LoopForgeResponse, SelfEvaluation, VerificationFlag, ExternalContextProvider, LoopTerminalSink } from "../protocol.js";
15
+ import type { ProviderSnapshot } from "../evidence-provider.js";
16
+ import type { RoundTransactionSnapshot } from "../round-transaction.js";
17
+ import type { LoopStore, VaultEntry } from "../loop-store.js";
18
+ import type { SessionStateStore } from "../storage.js";
19
+ export interface McpSession {
20
+ sessionId: string;
21
+ loopId: string;
22
+ task: string;
23
+ engine: LoopForgeEngine;
24
+ currentRound: number;
25
+ maxRounds: number;
26
+ successTrajectory: boolean[];
27
+ status: "running" | "stopped" | "stalled" | "paused";
28
+ createdAt: number;
29
+ /** Previous round's validated SelfEvaluation — used by verification gate. */
30
+ lastSelfEval?: SelfEvaluation;
31
+ consecutiveRejections: number;
32
+ /** Which enforcement check triggered the last rejection.
33
+ * Only same-check rejections accumulate toward the max. */
34
+ lastRejectionCheck: string;
35
+ /** v2.12: Consecutive rounds where the agent used drift_clarification
36
+ * to waive R7 rejection. Reset to 0 when a round has no intent_drift.
37
+ * Terminates the loop when exceeding policy.drift_clarification_max_streak. */
38
+ driftClarificationStreak: number;
39
+ /** v2.13: Files changed in skipped rounds during the last backtrack.
40
+ * The next round's verification gate checks that the agent did not
41
+ * continue working on stale files without restoring the workspace.
42
+ * Cleared after the first successful post-backtrack round. */
43
+ backtrackSkippedFiles: string[];
44
+ /** v2.12: Git HEAD of the last backtrack restore point. The verification
45
+ * gate checks the workspace returns to this commit before accepting.
46
+ * Cleared after the first successful post-backtrack round. */
47
+ backtrackTargetGitHead?: string;
48
+ /** Evidence baseline captured immediately before the agent receives a prompt. */
49
+ evidenceBaseline?: ProviderSnapshot[];
50
+ /** Schema-versioned transaction for the prompt currently held by the agent. */
51
+ roundSnapshot?: RoundTransactionSnapshot;
52
+ /** Persisted prompt prevents resume from compiling the same round twice. */
53
+ currentPrompt?: string | null;
54
+ currentLevel?: string;
55
+ /** Structured warnings from the most recent compile — preferred over regex parsing. */
56
+ currentWarnings?: string[];
57
+ /** v3.0.1: The full compile response of the current round, cached so the
58
+ * typed projection (getProjection) derives from it instead of recompiling
59
+ * the whole vault. Freshness is checked via loop_id + round; rebuilt by
60
+ * every compile path. Not persisted — cold sessions fall back to compiling. */
61
+ lastCompileResponse?: LoopForgeResponse | null;
62
+ }
63
+ export interface McpSessionSummary {
64
+ sessionId: string;
65
+ loopId: string;
66
+ round: number;
67
+ status: "running" | "stopped" | "stalled" | "paused";
68
+ }
69
+ export interface StartInput {
70
+ task: string;
71
+ loopId?: string;
72
+ maxRounds?: number;
73
+ domain?: string;
74
+ planSource?: string;
75
+ constraints?: string[];
76
+ }
77
+ export interface AdvanceResult {
78
+ sessionId: string;
79
+ round: number;
80
+ /** Stable logical identity; unchanged when enforcement retries the round. */
81
+ roundId?: string;
82
+ prompt: string | null;
83
+ stopReason?: string;
84
+ /** v2.0.1: Human-readable context for why the loop stopped.
85
+ * Provides facts the agent can use to decide its next action,
86
+ * without LoopForge prescribing a specific behavior. */
87
+ stopDetail?: string;
88
+ level?: string;
89
+ roundSuccess?: boolean;
90
+ warnings?: string[];
91
+ /** v1.13: Enforcement action for this round. accept/reject/terminate.
92
+ * When "reject", the prompt contains a rejection notice and the agent
93
+ * must redo the same round. Round counter does NOT increment. */
94
+ enforcementAction?: "accept" | "reject" | "terminate" | "backtrack";
95
+ /** v1.13: When enforcementAction is "reject" or "terminate", the reason
96
+ * why the round was rejected or the loop was terminated. */
97
+ enforcementReason?: string;
98
+ }
99
+ /** Narrow view of the session registry the lifecycle may touch. The owning
100
+ * SessionManager implements this over its private Map, so the lifecycle
101
+ * never holds or mutates registry state directly. */
102
+ export interface SessionRegistry {
103
+ get(sessionId: string): McpSession | undefined;
104
+ values(): Iterable<McpSession>;
105
+ upsert(session: McpSession): void;
106
+ }
107
+ export interface RoundLifecycleDeps {
108
+ store: LoopStore;
109
+ sessionStore: SessionStateStore | undefined;
110
+ registry: SessionRegistry;
111
+ terminalSinks: Set<LoopTerminalSink>;
112
+ /** Stable process-local owner token used for cross-process session leases. */
113
+ ownerId: string;
114
+ /** Session lease duration; stamped into saved session entries. */
115
+ leaseMs: number;
116
+ /** Live accessor for the mutable contextProvider field on SessionManager. */
117
+ getContext: () => ExternalContextProvider | undefined;
118
+ }
119
+ export declare function buildLoopRequest(session: McpSession, lastEval?: SelfEvaluation, verificationFlags?: VerificationFlag[]): LoopForgeRequest;
120
+ export declare class RoundLifecycle {
121
+ private readonly store;
122
+ private readonly sessionStore;
123
+ private readonly registry;
124
+ private readonly terminalSinks;
125
+ private readonly ownerId;
126
+ private readonly leaseMs;
127
+ private readonly getContext;
128
+ constructor(deps: RoundLifecycleDeps);
129
+ /** Persist session state to vault for cross-process recovery.
130
+ * The filtered vault and replacement entry are written once under the
131
+ * backend lock, so recovery never observes the old two-write gap. */
132
+ save(session: McpSession): void;
133
+ /** Reconstruct a McpSession from a vault session_state entry.
134
+ * Returns null if the entry is not "running" status.
135
+ * Shared by resume() and autoResumeAll(). */
136
+ reconstructSession(entry: VaultEntry, allowPaused?: boolean): McpSession | null;
137
+ /** Apply a prepared round to the session, persist, and build the result.
138
+ * Shared by reconcileCommittedRound, resume, and unpause — the three
139
+ * compile-then-persist tails were previously copy-pasted. */
140
+ private persistPrepared;
141
+ private restoredPromptResult;
142
+ /** Reconcile the crash window where feedback committed but session_state
143
+ * still points at the old prompt. Returns null when no commit is pending. */
144
+ private reconcileCommittedRound;
145
+ /** Resume tail: the session has been reconstructed and registered. Reconcile
146
+ * a committed-but-undelivered round, restore the held prompt, or compile
147
+ * the next prompt from current round state (legacy path). */
148
+ resume(session: McpSession): AdvanceResult;
149
+ /** Unpause tail: the session has been reconstructed and registered with
150
+ * status "running". Refresh async evidence, reconcile a committed round,
151
+ * restore the held prompt, or compile the next prompt. */
152
+ unpause(session: McpSession): Promise<AdvanceResult>;
153
+ /** Record a gate_opened entry when an accepted round reports a high-risk
154
+ * blocker (USER_RISK hit). Idempotent per gate. The gate is a record
155
+ * layer — it never blocks the round decision flow. */
156
+ private recordGateFromBlocked;
157
+ /** Undecided user gate descriptions for a loop (recorded but unresolved). */
158
+ listOpenGateDescriptions(loopId: string): string[];
159
+ /** Extract a SelfEvaluation from agent output.
160
+ * Structured param preferred → regex extraction → heuristic fallback.
161
+ * Returns null only when both regex and heuristic returned null. */
162
+ private extractEvaluation;
163
+ /** Execute the round transaction and apply per-rule rejection tracking.
164
+ * MUTATES: session.roundSnapshot, session.consecutiveRejections,
165
+ * session.lastRejectionCheck, session.lastSelfEval,
166
+ * session.successTrajectory, session.driftClarificationStreak */
167
+ private executeRoundTransaction;
168
+ /** v2.12: Update the clarification streak based on the round result.
169
+ * - Substantive clarification (anchors present): keep streak — genuine pivot.
170
+ * - No intent_drift this round: reset streak to 0.
171
+ * - Weak clarification rejected by R7: streak was already consumed by
172
+ * enforceIntentDrift to decide reject vs terminate; staleness is handled
173
+ * on the enforcement side. We sync the persisted counter for crash recovery.
174
+ * v3.2.1: when a HIGHER-PRIORITY rule (R1–R6/R8/R9/R-EVID) rejected the
175
+ * round, R7 never participated — clarificationAccepted is undefined (it
176
+ * is only set on the continue path). Touching the streak there would
177
+ * pollute it with rejections unrelated to drift and terminate the loop
178
+ * one weak clarification early.
179
+ * MUTATES: session.driftClarificationStreak */
180
+ private updateClarificationStreak;
181
+ /** Build a rejection result: compile a retry prompt, persist, return.
182
+ * MUTATES: session.roundSnapshot, session.currentPrompt, session.currentLevel */
183
+ private buildRejectionResult;
184
+ /** v2.10: Build a backtrack result — roll back to last clean round.
185
+ * Resets the round counter to the restore target + 1, merges preserved
186
+ * discoveries, compiles from the restored state, and injects the
187
+ * backtrack prompt at the top.
188
+ * MUTATES: session.currentRound, session.roundSnapshot,
189
+ * session.currentPrompt, session.currentLevel,
190
+ * session.consecutiveRejections, session.lastSelfEval */
191
+ private buildBacktrackResult;
192
+ /** Build a termination result: persist stopped status, notify sinks.
193
+ * MUTATES: session.status, session.currentPrompt */
194
+ private buildTerminationResult;
195
+ /** Build a stop result: persist stopped/stalled status, notify sinks.
196
+ * MUTATES: session.status, session.currentPrompt */
197
+ private buildStopResult;
198
+ /** Compile the next round's prompt and advance the session.
199
+ * Includes the commit fence (pause/delete race guard) and context provider.
200
+ * MUTATES: session.currentRound, session.currentPrompt, session.currentLevel,
201
+ * session.evidenceBaseline, session.roundSnapshot */
202
+ private advanceToNextRound;
203
+ private advanceUnlocked;
204
+ /** Core cycle entry used by SessionManager.advance after the queue + lease
205
+ * dance: validate → extract → execute transaction → route disposition
206
+ * → advance to next round (continue) or return terminal result.
207
+ * @param roundId v3.0.1: the roundId of the round this submission reports
208
+ * on (from the last start/next/resume response). Anchors the submission;
209
+ * a stale or duplicate submission returns the held prompt instead of
210
+ * being processed. Optional — when absent the anchor check is skipped. */
211
+ advance(sessionId: string, output: string, preExtractedEval?: SelfEvaluation, roundId?: string): Promise<AdvanceResult>;
212
+ /** Write back loop knowledge to long-term memory.
213
+ * Uses shared base builder from policy.ts. Called when a loop terminates. */
214
+ notifyTerminal(session: McpSession, stopReason: string): Promise<void>;
215
+ }
216
+ //# sourceMappingURL=round-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"round-lifecycle.d.ts","sourceRoot":"","sources":["../../src/mcp/round-lifecycle.ts"],"names":[],"mappings":"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"}