loopforge 1.15.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +172 -95
  2. package/dist/backends/interface.d.ts +5 -10
  3. package/dist/backends/interface.d.ts.map +1 -1
  4. package/dist/backends/interface.js +3 -4
  5. package/dist/backends/interface.js.map +1 -1
  6. package/dist/canonical-state.d.ts +53 -0
  7. package/dist/canonical-state.d.ts.map +1 -0
  8. package/dist/canonical-state.js +161 -0
  9. package/dist/canonical-state.js.map +1 -0
  10. package/dist/cli.d.ts +4 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +227 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/enforcement-gate.d.ts.map +1 -1
  15. package/dist/enforcement-gate.js +28 -10
  16. package/dist/enforcement-gate.js.map +1 -1
  17. package/dist/engine.d.ts +9 -28
  18. package/dist/engine.d.ts.map +1 -1
  19. package/dist/engine.js +135 -361
  20. package/dist/engine.js.map +1 -1
  21. package/dist/evidence-provider.d.ts +146 -0
  22. package/dist/evidence-provider.d.ts.map +1 -0
  23. package/dist/evidence-provider.js +512 -0
  24. package/dist/evidence-provider.js.map +1 -0
  25. package/dist/index.d.ts +19 -13
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +15 -12
  28. package/dist/index.js.map +1 -1
  29. package/dist/init.d.ts +15 -0
  30. package/dist/init.d.ts.map +1 -0
  31. package/dist/init.js +49 -0
  32. package/dist/init.js.map +1 -0
  33. package/dist/interop.d.ts +35 -0
  34. package/dist/interop.d.ts.map +1 -0
  35. package/dist/interop.js +34 -0
  36. package/dist/interop.js.map +1 -0
  37. package/dist/loop-compiler.d.ts +14 -64
  38. package/dist/loop-compiler.d.ts.map +1 -1
  39. package/dist/loop-compiler.js +305 -2206
  40. package/dist/loop-compiler.js.map +1 -1
  41. package/dist/loop-extras-parser.d.ts +82 -0
  42. package/dist/loop-extras-parser.d.ts.map +1 -0
  43. package/dist/loop-extras-parser.js +217 -0
  44. package/dist/loop-extras-parser.js.map +1 -0
  45. package/dist/loop-store.d.ts +104 -0
  46. package/dist/loop-store.d.ts.map +1 -0
  47. package/dist/loop-store.js +421 -0
  48. package/dist/loop-store.js.map +1 -0
  49. package/dist/mcp/server.d.ts +9 -6
  50. package/dist/mcp/server.d.ts.map +1 -1
  51. package/dist/mcp/server.js +109 -73
  52. package/dist/mcp/server.js.map +1 -1
  53. package/dist/mcp/session.d.ts +102 -21
  54. package/dist/mcp/session.d.ts.map +1 -1
  55. package/dist/mcp/session.js +795 -400
  56. package/dist/mcp/session.js.map +1 -1
  57. package/dist/mcp/tools.d.ts +18 -268
  58. package/dist/mcp/tools.d.ts.map +1 -1
  59. package/dist/mcp/tools.js +226 -12
  60. package/dist/mcp/tools.js.map +1 -1
  61. package/dist/observability.d.ts +36 -16
  62. package/dist/observability.d.ts.map +1 -1
  63. package/dist/observability.js +82 -23
  64. package/dist/observability.js.map +1 -1
  65. package/dist/policy-metrics.d.ts +46 -0
  66. package/dist/policy-metrics.d.ts.map +1 -0
  67. package/dist/policy-metrics.js +146 -0
  68. package/dist/policy-metrics.js.map +1 -0
  69. package/dist/policy.d.ts +52 -147
  70. package/dist/policy.d.ts.map +1 -1
  71. package/dist/policy.js +118 -191
  72. package/dist/policy.js.map +1 -1
  73. package/dist/prompt-assembler.d.ts +30 -0
  74. package/dist/prompt-assembler.d.ts.map +1 -0
  75. package/dist/prompt-assembler.js +278 -0
  76. package/dist/prompt-assembler.js.map +1 -0
  77. package/dist/prompt-policy.d.ts +29 -0
  78. package/dist/prompt-policy.d.ts.map +1 -0
  79. package/dist/prompt-policy.js +51 -0
  80. package/dist/prompt-policy.js.map +1 -0
  81. package/dist/protocol.d.ts +75 -152
  82. package/dist/protocol.d.ts.map +1 -1
  83. package/dist/protocol.js +11 -53
  84. package/dist/protocol.js.map +1 -1
  85. package/dist/replay.d.ts.map +1 -1
  86. package/dist/replay.js +1 -27
  87. package/dist/replay.js.map +1 -1
  88. package/dist/round-coordinator.d.ts +90 -0
  89. package/dist/round-coordinator.d.ts.map +1 -0
  90. package/dist/round-coordinator.js +186 -0
  91. package/dist/round-coordinator.js.map +1 -0
  92. package/dist/round-driver.d.ts +53 -0
  93. package/dist/round-driver.d.ts.map +1 -0
  94. package/dist/round-driver.js +101 -0
  95. package/dist/round-driver.js.map +1 -0
  96. package/dist/round-transaction.d.ts +70 -0
  97. package/dist/round-transaction.d.ts.map +1 -0
  98. package/dist/round-transaction.js +290 -0
  99. package/dist/round-transaction.js.map +1 -0
  100. package/dist/self-eval.d.ts +26 -0
  101. package/dist/self-eval.d.ts.map +1 -0
  102. package/dist/self-eval.js +154 -0
  103. package/dist/self-eval.js.map +1 -0
  104. package/dist/storage.d.ts +39 -0
  105. package/dist/storage.d.ts.map +1 -0
  106. package/dist/storage.js +193 -0
  107. package/dist/storage.js.map +1 -0
  108. package/dist/verification-gate.d.ts +31 -7
  109. package/dist/verification-gate.d.ts.map +1 -1
  110. package/dist/verification-gate.js +250 -7
  111. package/dist/verification-gate.js.map +1 -1
  112. package/loop_policy.json +19 -53
  113. package/package.json +13 -10
  114. package/skills/perception/SKILL.md +80 -267
  115. package/dist/backends/fs.d.ts +0 -36
  116. package/dist/backends/fs.d.ts.map +0 -1
  117. package/dist/backends/fs.js +0 -362
  118. package/dist/backends/fs.js.map +0 -1
  119. package/dist/builder.d.ts +0 -19
  120. package/dist/builder.d.ts.map +0 -1
  121. package/dist/builder.js +0 -215
  122. package/dist/builder.js.map +0 -1
  123. package/dist/mcp-server.d.ts +0 -12
  124. package/dist/mcp-server.d.ts.map +0 -1
  125. package/dist/mcp-server.js +0 -14
  126. package/dist/mcp-server.js.map +0 -1
  127. package/dist/memory-bridge.d.ts +0 -47
  128. package/dist/memory-bridge.d.ts.map +0 -1
  129. package/dist/memory-bridge.js +0 -290
  130. package/dist/memory-bridge.js.map +0 -1
  131. package/dist/runtime.d.ts +0 -80
  132. package/dist/runtime.d.ts.map +0 -1
  133. package/dist/runtime.js +0 -699
  134. package/dist/runtime.js.map +0 -1
  135. package/dist/tests/_helpers.d.ts +0 -25
  136. package/dist/tests/_helpers.d.ts.map +0 -1
  137. package/dist/tests/_helpers.js +0 -47
  138. package/dist/tests/_helpers.js.map +0 -1
  139. package/dist/tests/builder.test.d.ts +0 -2
  140. package/dist/tests/builder.test.d.ts.map +0 -1
  141. package/dist/tests/builder.test.js +0 -112
  142. package/dist/tests/builder.test.js.map +0 -1
  143. package/dist/tests/enforcement-gate.test.d.ts +0 -2
  144. package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
  145. package/dist/tests/enforcement-gate.test.js +0 -328
  146. package/dist/tests/enforcement-gate.test.js.map +0 -1
  147. package/dist/tests/engine.test.d.ts +0 -2
  148. package/dist/tests/engine.test.d.ts.map +0 -1
  149. package/dist/tests/engine.test.js +0 -375
  150. package/dist/tests/engine.test.js.map +0 -1
  151. package/dist/tests/generate-schema.test.d.ts +0 -8
  152. package/dist/tests/generate-schema.test.d.ts.map +0 -1
  153. package/dist/tests/generate-schema.test.js +0 -199
  154. package/dist/tests/generate-schema.test.js.map +0 -1
  155. package/dist/tests/loop-compiler.test.d.ts +0 -2
  156. package/dist/tests/loop-compiler.test.d.ts.map +0 -1
  157. package/dist/tests/loop-compiler.test.js +0 -1059
  158. package/dist/tests/loop-compiler.test.js.map +0 -1
  159. package/dist/tests/mcp.test.d.ts +0 -7
  160. package/dist/tests/mcp.test.d.ts.map +0 -1
  161. package/dist/tests/mcp.test.js +0 -505
  162. package/dist/tests/mcp.test.js.map +0 -1
  163. package/dist/tests/memory-bridge.test.d.ts +0 -8
  164. package/dist/tests/memory-bridge.test.d.ts.map +0 -1
  165. package/dist/tests/memory-bridge.test.js +0 -383
  166. package/dist/tests/memory-bridge.test.js.map +0 -1
  167. package/dist/tests/policy.test.d.ts +0 -2
  168. package/dist/tests/policy.test.d.ts.map +0 -1
  169. package/dist/tests/policy.test.js +0 -49
  170. package/dist/tests/policy.test.js.map +0 -1
  171. package/dist/tests/protocol.test.d.ts +0 -2
  172. package/dist/tests/protocol.test.d.ts.map +0 -1
  173. package/dist/tests/protocol.test.js +0 -73
  174. package/dist/tests/protocol.test.js.map +0 -1
  175. package/dist/tests/replay.test.d.ts +0 -2
  176. package/dist/tests/replay.test.d.ts.map +0 -1
  177. package/dist/tests/replay.test.js +0 -222
  178. package/dist/tests/replay.test.js.map +0 -1
  179. package/dist/tests/runtime.test.d.ts +0 -7
  180. package/dist/tests/runtime.test.d.ts.map +0 -1
  181. package/dist/tests/runtime.test.js +0 -337
  182. package/dist/tests/runtime.test.js.map +0 -1
  183. package/dist/tests/verification-gate.test.d.ts +0 -2
  184. package/dist/tests/verification-gate.test.d.ts.map +0 -1
  185. package/dist/tests/verification-gate.test.js +0 -407
  186. package/dist/tests/verification-gate.test.js.map +0 -1
  187. package/skills/prompt-techniques/SKILL.md +0 -52
  188. package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
  189. package/skills/prompt-techniques/references/few-shot.md +0 -174
  190. package/skills/prompt-techniques/references/least-to-most.md +0 -182
  191. package/skills/prompt-techniques/references/step-back.md +0 -160
  192. package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
  193. package/skills/prompt-techniques/references/zero-shot.md +0 -97
@@ -1,95 +1,131 @@
1
- /** LoopForge MCP — JSON-RPC transport over stdio.
1
+ /** Minimal MCP JSON-RPC server for LoopForge tools.
2
2
  *
3
- * Implements the MCP protocol: initialize → tools/list → tools/call.
4
- * Uses node:readline for stdin, writes JSON-RPC responses to stdout.
5
- * All logging goes to stderr to keep stdout clean.
3
+ * LoopForge intentionally does not implement MCP Tasks: the external Agent
4
+ * owns long-running execution while LoopForge persists round state.
6
5
  */
7
6
  import { createInterface } from "node:readline";
8
7
  import { SessionManager } from "./session.js";
9
- import { TOOL_SCHEMAS, TOOL_HANDLERS } from "./tools.js";
10
- import { autoConfigureMemory } from "../memory-bridge.js";
11
- const SERVER_INFO = {
12
- name: "loopforge-mcp",
13
- version: "1.3.0",
14
- };
8
+ import { TOOL_HANDLERS, TOOL_SCHEMAS, ToolInputValidationError, validateToolInput, } from "./tools.js";
9
+ const SERVER_INFO = { name: "loopforge-mcp", version: "2.0.1" };
10
+ class JsonRpcError extends Error {
11
+ code;
12
+ constructor(code, message) {
13
+ super(message);
14
+ this.code = code;
15
+ this.name = "JsonRpcError";
16
+ }
17
+ }
18
+ function isRecord(value) {
19
+ return value !== null && typeof value === "object" && !Array.isArray(value);
20
+ }
21
+ function isJsonRpcRequest(value) {
22
+ if (!isRecord(value))
23
+ return false;
24
+ if (value.jsonrpc !== "2.0" || typeof value.method !== "string")
25
+ return false;
26
+ if ("id" in value && value.id !== undefined &&
27
+ typeof value.id !== "string" && typeof value.id !== "number")
28
+ return false;
29
+ return !("params" in value && value.params !== undefined && !isRecord(value.params));
30
+ }
15
31
  function errorResponse(id, code, message) {
16
- return JSON.stringify({
17
- jsonrpc: "2.0",
18
- id: id ?? null,
19
- error: { code, message },
20
- });
32
+ return JSON.stringify({ jsonrpc: "2.0", id: id ?? null, error: { code, message } });
21
33
  }
22
34
  function okResponse(id, result) {
23
- if (id === undefined)
24
- return ""; // notification — no response
25
- return JSON.stringify({ jsonrpc: "2.0", id, result });
35
+ return id === undefined ? "" : JSON.stringify({ jsonrpc: "2.0", id, result });
26
36
  }
27
- // ═══════════════════════════════════════════════════════════════════════════
28
- // Server
29
- // ═══════════════════════════════════════════════════════════════════════════
30
37
  export class McpServer {
31
38
  mgr;
32
- constructor(backend) {
33
- this.mgr = new SessionManager(backend);
34
- autoConfigureMemory(this.mgr);
39
+ requestQueue = Promise.resolve();
40
+ constructor(storeOrBackend) {
41
+ this.mgr = new SessionManager(storeOrBackend);
35
42
  }
36
43
  start() {
44
+ const resumed = this.mgr.autoResumeAll();
45
+ if (resumed > 0) {
46
+ process.stderr.write(`[loopforge-mcp] auto-resumed ${resumed} session(s)\n`);
47
+ }
37
48
  const rl = createInterface({ input: process.stdin });
38
- rl.on("line", async (line) => {
39
- let req;
40
- try {
41
- req = JSON.parse(line);
42
- }
43
- catch {
44
- process.stderr.write(`[loopforge-mcp] bad JSON: ${line.slice(0, 80)}\n`);
45
- process.stdout.write(errorResponse(undefined, -32700, "Parse error") + "\n");
46
- return;
47
- }
48
- // Notifications (no id) — ignore
49
- if (req.id === undefined) {
50
- process.stderr.write(`[loopforge-mcp] notification: ${req.method}\n`);
51
- return;
52
- }
53
- try {
54
- const result = await this.dispatch(req);
55
- if (result !== null) {
56
- process.stdout.write(okResponse(req.id, result) + "\n");
57
- }
58
- }
59
- catch (err) {
60
- const msg = err instanceof Error ? err.message : String(err);
61
- process.stderr.write(`[loopforge-mcp] dispatch error: ${msg}\n`);
62
- process.stdout.write(errorResponse(req.id, -32603, msg) + "\n");
63
- }
49
+ rl.on("line", (line) => {
50
+ this.requestQueue = this.requestQueue
51
+ .then(() => this.handleLine(line))
52
+ .catch((error) => {
53
+ process.stderr.write(`[loopforge-mcp] request error: ${String(error)}\n`);
54
+ });
64
55
  });
56
+ rl.once("close", () => this.mgr.close());
65
57
  process.stderr.write(`[loopforge-mcp] v${SERVER_INFO.version} started\n`);
66
58
  }
59
+ async handleLine(line) {
60
+ let parsed;
61
+ try {
62
+ parsed = JSON.parse(line);
63
+ }
64
+ catch {
65
+ process.stdout.write(errorResponse(undefined, -32700, "Parse error") + "\n");
66
+ return;
67
+ }
68
+ if (!isJsonRpcRequest(parsed)) {
69
+ process.stdout.write(errorResponse(undefined, -32600, "Invalid Request") + "\n");
70
+ return;
71
+ }
72
+ if (parsed.id === undefined)
73
+ return;
74
+ try {
75
+ const result = await this.dispatch(parsed);
76
+ process.stdout.write(okResponse(parsed.id, result) + "\n");
77
+ }
78
+ catch (error) {
79
+ const message = error instanceof Error ? error.message : String(error);
80
+ const code = error instanceof JsonRpcError ? error.code : -32603;
81
+ process.stdout.write(errorResponse(parsed.id, code, message) + "\n");
82
+ }
83
+ }
67
84
  async dispatch(req) {
68
- switch (req.method) {
69
- case "initialize":
70
- return {
71
- protocolVersion: "2024-11-05",
72
- capabilities: { tools: {} },
73
- serverInfo: SERVER_INFO,
74
- };
75
- case "tools/list":
76
- return { tools: TOOL_SCHEMAS };
77
- case "tools/call": {
78
- const params = req.params ?? {};
79
- const name = String(params.name ?? "");
80
- const args = params.arguments ?? {};
81
- const handler = TOOL_HANDLERS[name];
82
- if (!handler) {
83
- throw new Error(`Unknown tool: ${name}`);
84
- }
85
- const output = await handler(this.mgr, args);
86
- return {
87
- content: [{ type: "text", text: JSON.stringify(output) }],
88
- };
85
+ if (req.method === "initialize") {
86
+ const requested = req.params?.protocolVersion;
87
+ return {
88
+ protocolVersion: requested === "2024-11-05" ? requested : "2025-11-25",
89
+ capabilities: { tools: {} },
90
+ serverInfo: SERVER_INFO,
91
+ };
92
+ }
93
+ if (req.method === "tools/list")
94
+ return { tools: TOOL_SCHEMAS };
95
+ if (req.method !== "tools/call") {
96
+ throw new JsonRpcError(-32601, `Unknown method: ${req.method}`);
97
+ }
98
+ const params = req.params ?? {};
99
+ if (typeof params.name !== "string" || !params.name) {
100
+ throw new JsonRpcError(-32602, "tools/call requires a tool name");
101
+ }
102
+ if (params.arguments !== undefined && !isRecord(params.arguments)) {
103
+ throw new JsonRpcError(-32602, "tools/call arguments must be an object");
104
+ }
105
+ if ("task" in params) {
106
+ throw new JsonRpcError(-32602, "LoopForge tools do not support MCP Tasks; let the Agent drive the loop");
107
+ }
108
+ return this.executeTool(params.name, params.arguments ?? {});
109
+ }
110
+ async executeTool(name, args) {
111
+ const handler = TOOL_HANDLERS[name];
112
+ if (!handler)
113
+ throw new JsonRpcError(-32602, `Unknown tool: ${name}`);
114
+ try {
115
+ validateToolInput(name, args);
116
+ }
117
+ catch (error) {
118
+ if (error instanceof ToolInputValidationError) {
119
+ throw new JsonRpcError(-32602, error.message);
89
120
  }
90
- default:
91
- throw new Error(`Unknown method: ${req.method}`);
121
+ throw error;
92
122
  }
123
+ const output = await handler(this.mgr, args);
124
+ return {
125
+ content: [{ type: "text", text: JSON.stringify(output) }],
126
+ structuredContent: output,
127
+ isError: typeof output.error === "string",
128
+ };
93
129
  }
94
130
  }
95
131
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,YAAY,EACZ,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,GAAG,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAehE,MAAM,YAAa,SAAQ,KAAK;IACT;IAArB,YAAqB,IAAY,EAAE,OAAe;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QADI,SAAI,GAAJ,IAAI,CAAQ;QAE/B,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9E,IACE,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS;QACvC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ;QAC5D,OAAO,KAAK,CAAC;IACf,OAAO,CAAC,CAAC,QAAQ,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,SAAS,aAAa,CACpB,EAA+B,EAC/B,IAAY,EACZ,OAAe;IAEf,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;AACtF,CAAC;AAED,SAAS,UAAU,CACjB,EAA+B,EAC/B,MAA+B;IAE/B,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,OAAO,SAAS;IACH,GAAG,CAAiB;IAC7B,YAAY,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAExD,YAAY,cAAyC;QACnD,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED,KAAK;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACzC,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,OAAO,eAAe,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACrD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY;iBAClC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBACjC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5E,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,WAAW,CAAC,OAAO,YAAY,CAAC,CAAC;IAC5E,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAY;QACnC,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;YAC7E,OAAO;QACT,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;YACjF,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS;YAAE,OAAO;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,IAAI,GAAG,KAAK,YAAY,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,GAAmB;QACxC,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC;YAC9C,OAAO;gBACL,eAAe,EAAE,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;gBACtE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;gBAC3B,UAAU,EAAE,WAAW;aACxB,CAAC;QACJ,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAChE,IAAI,GAAG,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,mBAAmB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QAChC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,iCAAiC,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAClE,MAAM,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;YACrB,MAAM,IAAI,YAAY,CACpB,CAAC,KAAK,EACN,wEAAwE,CACzE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CACrB,MAAM,CAAC,IAAI,EACV,MAAM,CAAC,SAAiD,IAAI,EAAE,CAC1B,CAAC;IAC1C,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,IAAY,EACZ,IAA6B;QAE7B,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,iBAAiB,IAAI,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC;YACH,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,wBAAwB,EAAE,CAAC;gBAC9C,MAAM,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,iBAAiB,EAAE,MAAM;YACzB,OAAO,EAAE,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;SAC1C,CAAC;IACJ,CAAC;CACF"}
@@ -6,7 +6,12 @@
6
6
  */
7
7
  import { LoopForgeEngine } from "../engine.js";
8
8
  import type { VaultBackend } from "../backends/interface.js";
9
- import type { SelfEvaluation, LoopMemoryWriteback, MemoryProviderContext } from "../protocol.js";
9
+ import type { LoopStore } from "../loop-store.js";
10
+ import type { SelfEvaluation, ExternalContextProvider, LoopTerminalSink } from "../protocol.js";
11
+ import type { ProviderSnapshot } from "../evidence-provider.js";
12
+ import type { RoundTransactionSnapshot } from "../round-transaction.js";
13
+ import type { SessionStateStore } from "../storage.js";
14
+ import type { CognitiveCheckpointSink } from "../interop.js";
10
15
  export interface McpSession {
11
16
  sessionId: string;
12
17
  loopId: string;
@@ -15,22 +20,27 @@ export interface McpSession {
15
20
  currentRound: number;
16
21
  maxRounds: number;
17
22
  successTrajectory: boolean[];
18
- status: "running" | "stopped" | "stalled";
23
+ status: "running" | "stopped" | "stalled" | "paused";
19
24
  createdAt: number;
20
25
  /** Previous round's validated SelfEvaluation — used by verification gate. */
21
26
  lastSelfEval?: SelfEvaluation;
22
- injectionCount: number;
23
- lastInjectionRound: number;
24
- injectedContexts: string[];
25
- phase2Triggered: boolean;
26
- phase3Triggered: boolean;
27
27
  consecutiveRejections: number;
28
+ /** Which enforcement check triggered the last rejection.
29
+ * Only same-check rejections accumulate toward the max. */
30
+ lastRejectionCheck: string;
31
+ /** Evidence baseline captured immediately before the agent receives a prompt. */
32
+ evidenceBaseline?: ProviderSnapshot[];
33
+ /** Schema-versioned transaction for the prompt currently held by the agent. */
34
+ roundSnapshot?: RoundTransactionSnapshot;
35
+ /** Persisted prompt prevents resume from compiling the same round twice. */
36
+ currentPrompt?: string | null;
37
+ currentLevel?: string;
28
38
  }
29
39
  export interface McpSessionSummary {
30
40
  sessionId: string;
31
41
  loopId: string;
32
42
  round: number;
33
- status: "running" | "stopped" | "stalled";
43
+ status: "running" | "stopped" | "stalled" | "paused";
34
44
  }
35
45
  export interface StartInput {
36
46
  task: string;
@@ -43,12 +53,15 @@ export interface StartInput {
43
53
  export interface AdvanceResult {
44
54
  sessionId: string;
45
55
  round: number;
56
+ /** Stable logical identity; unchanged when enforcement retries the round. */
57
+ roundId?: string;
46
58
  prompt: string | null;
47
59
  stopReason?: string;
48
- technique?: string;
60
+ /** v2.0.1: Human-readable context for why the loop stopped.
61
+ * Provides facts the agent can use to decide its next action,
62
+ * without LoopForge prescribing a specific behavior. */
63
+ stopDetail?: string;
49
64
  level?: string;
50
- /** @deprecated Use roundSuccess instead. Derived: roundSuccess ? 5 : 1 */
51
- quality?: number;
52
65
  roundSuccess?: boolean;
53
66
  warnings?: string[];
54
67
  /** v1.13: Enforcement action for this round. accept/reject/terminate.
@@ -61,25 +74,69 @@ export interface AdvanceResult {
61
74
  }
62
75
  export declare class SessionManager {
63
76
  private sessions;
77
+ /** Serializes state transitions for each session. */
78
+ private sessionQueues;
64
79
  private backend;
65
- /** Optional provider for long-term memory context retrieval. */
66
- memoryProvider?: (ctx: MemoryProviderContext) => Promise<string>;
67
- /** Optional writer for persisting loop knowledge back to long-term memory. */
68
- memoryWriter?: (payload: LoopMemoryWriteback) => Promise<void>;
69
- constructor(backend?: VaultBackend);
80
+ private sessionStore;
81
+ private readonly ownerId;
82
+ private readonly leaseMs;
83
+ private readonly leaseRenewIntervalMs;
84
+ private leaseTimer;
85
+ private readonly checkpointSinks;
86
+ /** Explicit context provider; never auto-discovered. */
87
+ contextProvider?: ExternalContextProvider;
88
+ private readonly terminalSinks;
89
+ constructor(storeOrBackend?: LoopStore | VaultBackend, sessionStore?: SessionStateStore);
90
+ /** Stable process-local owner token used for cross-process session leases. */
91
+ getOwnerId(): string;
92
+ /** Subscribe an external checkpointer; sink failures are isolated. */
93
+ addCheckpointSink(sink: CognitiveCheckpointSink): () => void;
94
+ addTerminalSink(sink: LoopTerminalSink): () => void;
95
+ /** Release owned sessions and stop lease maintenance. */
96
+ close(): void;
97
+ private findSessionEntry;
98
+ private claimSessionEntry;
99
+ private renewSessionLease;
100
+ private renewOwnedLeases;
101
+ private leaseConflictResult;
102
+ private withSessionQueue;
70
103
  create(input: StartInput): Promise<AdvanceResult>;
71
104
  get(sessionId: string): McpSession | undefined;
105
+ getLeaseStatus(loopId: string): Record<string, unknown> | null;
72
106
  delete(sessionId: string): boolean;
107
+ /** v1.18: Pause a running session. The session state is persisted to
108
+ * vault so it survives process restarts. Returns the session status.
109
+ * Paused sessions cannot be advanced — they must be resumed first. */
110
+ pause(sessionId: string): {
111
+ sessionId: string;
112
+ round: number;
113
+ status: string;
114
+ };
115
+ private restoredPromptResult;
116
+ /** Reconcile the crash window where feedback committed but session_state
117
+ * still points at the old prompt. Returns null when no commit is pending. */
118
+ private reconcileCommittedRound;
119
+ /** v1.18: Resume a paused session. Reconstructs from vault state and
120
+ * compiles the next prompt. Returns null if no paused session exists
121
+ * for this loopId. */
122
+ unpause(loopId: string): Promise<AdvanceResult | null>;
73
123
  /** Persist session state to vault for cross-process recovery.
74
- * Uses upsert: removes any previous session_state entry for this loop,
75
- * then appends a new one with current state.
76
- * Entire read→filter→write→append is wrapped in a file lock to prevent
77
- * lost updates from concurrent processes. */
124
+ * The filtered vault and replacement entry are written once under the
125
+ * backend lock, so recovery never observes the old two-write gap. */
78
126
  save(session: McpSession): void;
127
+ /** Reconstruct a McpSession from a vault session_state entry.
128
+ * Returns null if the entry is not "running" status.
129
+ * Shared by resume() and autoResumeAll(). */
130
+ private reconstructSession;
79
131
  /** Resume a loop from vault state.
80
132
  * Reconstructs the session and compiles the prompt for the next round.
81
133
  * Returns null if no session_state entry exists for this loopId. */
82
134
  resume(loopId: string): AdvanceResult | null;
135
+ /** Auto-resume all "running" sessions from vault on server startup.
136
+ * Scans vault for session_state entries, reconstructs each as an in-memory
137
+ * McpSession (without compiling — the next loopforge_next will do that).
138
+ * Returns the number of sessions resumed. */
139
+ autoResumeAll(): number;
83
140
  list(): McpSessionSummary[];
84
141
  /** Get loop health for a loop (in-memory or vault).
85
142
  * Computes goal alignment, constraint integrity, drift, strategy stability. */
@@ -89,9 +146,33 @@ export declare class SessionManager {
89
146
  * When provided (MCP path with evaluation parameter), skips regex extraction.
90
147
  * When undefined (runtime/CLI path), falls back to regex extraction from output. */
91
148
  advance(sessionId: string, output: string, preExtractedEval?: SelfEvaluation): Promise<AdvanceResult>;
149
+ /** Extract a SelfEvaluation from agent output.
150
+ * Structured param preferred → regex extraction → heuristic fallback.
151
+ * Returns null only when both regex and heuristic returned null. */
152
+ private extractEvaluation;
153
+ /** Execute the round transaction and apply per-rule rejection tracking.
154
+ * MUTATES: session.roundSnapshot, session.consecutiveRejections,
155
+ * session.lastRejectionCheck, session.lastSelfEval,
156
+ * session.successTrajectory */
157
+ private executeRoundTransaction;
158
+ /** Build a rejection result: compile a retry prompt, persist, return.
159
+ * MUTATES: session.roundSnapshot, session.currentPrompt, session.currentLevel */
160
+ private buildRejectionResult;
161
+ /** Build a termination result: persist stopped status, notify sinks.
162
+ * MUTATES: session.status, session.currentPrompt */
163
+ private buildTerminationResult;
164
+ /** Build a stop result: persist stopped/stalled status, notify sinks.
165
+ * MUTATES: session.status, session.currentPrompt */
166
+ private buildStopResult;
167
+ /** Compile the next round's prompt and advance the session.
168
+ * Includes the commit fence (pause/delete race guard) and context provider.
169
+ * MUTATES: session.currentRound, session.currentPrompt, session.currentLevel,
170
+ * session.evidenceBaseline, session.roundSnapshot */
171
+ private advanceToNextRound;
172
+ private advanceUnlocked;
92
173
  /** Write back loop knowledge to long-term memory.
93
174
  * Uses shared base builder from policy.ts. Called when a loop terminates. */
94
- private doWriteback;
175
+ private notifyTerminal;
95
176
  /** Replay timeline for a session — creates ReplayBackend from the stored backend. */
96
177
  replayTimeline(sessionId: string): Record<string, unknown>[] | null;
97
178
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/mcp/session.ts"],"names":[],"mappings":"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"}