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
@@ -0,0 +1,512 @@
1
+ /** EvidenceProvider — Pluggable evidence capture interface (v1.18).
2
+ *
3
+ * Before this module, evidence capture was hardcoded to git via
4
+ * captureGitModifiedFiles() in two places (runtime.ts, session.ts).
5
+ * This module defines an abstract EvidenceProvider interface so
6
+ * additional evidence sources (test runners, linters, bundle analysis)
7
+ * can be added without touching the verification pipeline.
8
+ *
9
+ * Built-in provider: GitEvidenceProvider — git file state capture with
10
+ * parallel async execution (v2.0.1) and a synchronous fallback.
11
+ */
12
+ import { createHash } from "node:crypto";
13
+ import { readFileSync, realpathSync, statSync } from "node:fs";
14
+ import { spawn, execFile, execFileSync, } from "node:child_process";
15
+ import { isAbsolute, relative, resolve, sep } from "node:path";
16
+ import { getPolicy } from "./policy.js";
17
+ import { logEvent, startSpan } from "./observability.js";
18
+ import { policyMetrics } from "./policy-metrics.js";
19
+ const providerFactories = new Map();
20
+ /** Register a provider factory used by policy-driven collectors. */
21
+ export function registerEvidenceProvider(name, factory) {
22
+ if (!name.trim())
23
+ throw new Error("Evidence provider name must not be empty");
24
+ providerFactories.set(name, factory);
25
+ }
26
+ export function unregisterEvidenceProvider(name) {
27
+ if (name === "git")
28
+ return false;
29
+ return providerFactories.delete(name);
30
+ }
31
+ // ── EvidenceCollector ──────────────────────────────────────────────────────
32
+ /** Collects evidence from all configured providers.
33
+ *
34
+ * Usage:
35
+ * const collector = new EvidenceCollector([new GitEvidenceProvider()]);
36
+ * const snapshots = collector.collect();
37
+ * // snapshots = [{ provider: "git", files: [...], data: {...} }]
38
+ */
39
+ export class EvidenceCollector {
40
+ providers;
41
+ constructor(providers) {
42
+ this.providers = providers;
43
+ }
44
+ /** Build the collector described by loop_policy.json. Unknown provider
45
+ * names are ignored so newer configs remain backward compatible. */
46
+ static fromProviderNames(providerNames) {
47
+ const providers = [];
48
+ for (const name of providerNames) {
49
+ const factory = providerFactories.get(name);
50
+ if (factory)
51
+ providers.push(factory());
52
+ }
53
+ return new EvidenceCollector(providers);
54
+ }
55
+ /** Build built-ins and explicitly configured command providers. */
56
+ static fromPolicy() {
57
+ const policy = getPolicy().evidence;
58
+ const providerNames = Array.isArray(policy.providers)
59
+ ? policy.providers.filter((name) => typeof name === "string")
60
+ : [];
61
+ const providers = EvidenceCollector.fromProviderNames(providerNames).providers;
62
+ const commands = Array.isArray(policy.commands) ? policy.commands : [];
63
+ for (const command of commands) {
64
+ if (command?.enabled)
65
+ providers.push(new CommandEvidenceProvider(command));
66
+ }
67
+ return new EvidenceCollector(providers);
68
+ }
69
+ /** Run all providers and return non-null snapshots.
70
+ * Providers that return null (e.g. git not available) are silently
71
+ * skipped — the caller handles missing evidence. */
72
+ collect(options = {}) {
73
+ const results = [];
74
+ for (const p of this.providers) {
75
+ const startedAt = Date.now();
76
+ const controller = new AbortController();
77
+ try {
78
+ const snapshot = p.capture({
79
+ signal: controller.signal,
80
+ timeoutMs: options.timeoutMs ?? getPolicy().evidence.timeout_ms,
81
+ loopId: options.loopId,
82
+ phase: options.phase ?? "after",
83
+ });
84
+ if (snapshot && typeof snapshot.then === "function") {
85
+ // Async providers are not awaitable in the synchronous collect()
86
+ // path. Log and skip — callers who need async providers must use
87
+ // collectAsync() instead. Session recovery via reconstructSession()
88
+ // uses collect() as a fallback; the unpause() path replaces it
89
+ // with async evidence after reconstruction.
90
+ void snapshot.catch(() => undefined);
91
+ policyMetrics.recordEvidence(p.name, "failure", Date.now() - startedAt, options.loopId);
92
+ logEvent("evidence_async_provider_in_sync_collect", { provider: p.name });
93
+ continue;
94
+ }
95
+ const syncSnapshot = snapshot;
96
+ policyMetrics.recordEvidence(p.name, syncSnapshot ? "available" : "unavailable", Date.now() - startedAt, options.loopId);
97
+ if (syncSnapshot)
98
+ results.push(syncSnapshot);
99
+ }
100
+ catch (error) {
101
+ policyMetrics.recordEvidence(p.name, "failure", Date.now() - startedAt, options.loopId);
102
+ logEvent("evidence_provider_error", { provider: p.name, error: String(error) });
103
+ }
104
+ }
105
+ return results;
106
+ }
107
+ /** Capture all providers concurrently with per-provider timeout isolation. */
108
+ async collectAsync(options = {}) {
109
+ const timeoutMs = options.timeoutMs ?? getPolicy().evidence.timeout_ms;
110
+ const captures = this.providers.map(async (provider) => {
111
+ const span = startSpan("evidence.capture", {
112
+ provider: provider.name,
113
+ loopId: options.loopId,
114
+ timeoutMs,
115
+ });
116
+ const startedAt = Date.now();
117
+ const controller = new AbortController();
118
+ let timer;
119
+ let timedOut = false;
120
+ try {
121
+ const capture = Promise.resolve(provider.capture({
122
+ signal: controller.signal,
123
+ timeoutMs,
124
+ loopId: options.loopId,
125
+ phase: options.phase ?? "after",
126
+ }));
127
+ const snapshot = timeoutMs > 0
128
+ ? await Promise.race([
129
+ capture,
130
+ new Promise((resolve) => {
131
+ timer = setTimeout(() => {
132
+ timedOut = true;
133
+ controller.abort(new Error(`Evidence provider timed out after ${timeoutMs}ms`));
134
+ resolve(null);
135
+ }, timeoutMs);
136
+ }),
137
+ ])
138
+ : await capture;
139
+ const outcome = timedOut
140
+ ? "timeout"
141
+ : snapshot ? "available" : "unavailable";
142
+ policyMetrics.recordEvidence(provider.name, outcome, Date.now() - startedAt, options.loopId);
143
+ span.end(timedOut ? "cancelled" : "ok", { outcome });
144
+ if (timedOut) {
145
+ logEvent("evidence_provider_timeout", { provider: provider.name, timeoutMs });
146
+ }
147
+ return timedOut ? null : snapshot;
148
+ }
149
+ catch (error) {
150
+ policyMetrics.recordEvidence(provider.name, "failure", Date.now() - startedAt, options.loopId);
151
+ span.end("error", { error: String(error) });
152
+ logEvent("evidence_provider_error", { provider: provider.name, error: String(error) });
153
+ return null;
154
+ }
155
+ finally {
156
+ if (timer)
157
+ clearTimeout(timer);
158
+ }
159
+ });
160
+ return (await Promise.all(captures)).filter((snapshot) => snapshot !== null);
161
+ }
162
+ }
163
+ function commandCwd(configured) {
164
+ const workspace = realpathSync(process.cwd());
165
+ const lexical = resolve(workspace, configured ?? ".");
166
+ const lexicalRelative = relative(workspace, lexical);
167
+ if (lexicalRelative === ".." || lexicalRelative.startsWith(`..${sep}`) ||
168
+ isAbsolute(lexicalRelative)) {
169
+ throw new Error("command cwd must stay within the workspace");
170
+ }
171
+ const actual = realpathSync(lexical);
172
+ const actualRelative = relative(workspace, actual);
173
+ if (actualRelative === ".." || actualRelative.startsWith(`..${sep}`) ||
174
+ isAbsolute(actualRelative) || !statSync(actual).isDirectory()) {
175
+ throw new Error("command cwd resolves outside the workspace");
176
+ }
177
+ return actual;
178
+ }
179
+ /** Explicit, shell-free verification command. Disabled unless configured. */
180
+ export class CommandEvidenceProvider {
181
+ name;
182
+ config;
183
+ constructor(config) {
184
+ const name = typeof config.name === "string" && config.name.trim()
185
+ ? config.name.trim()
186
+ : "invalid-config";
187
+ const executable = typeof config.executable === "string"
188
+ ? config.executable.trim()
189
+ : "";
190
+ const args = Array.isArray(config.args)
191
+ ? config.args.filter((arg) => typeof arg === "string")
192
+ : [];
193
+ const successExitCodes = Array.isArray(config.success_exit_codes)
194
+ ? config.success_exit_codes.filter((code) => Number.isInteger(code))
195
+ : [0];
196
+ this.config = {
197
+ ...config,
198
+ name,
199
+ executable,
200
+ args,
201
+ phase: config.phase === "both" ? "both" : "after",
202
+ required: config.required === true,
203
+ timeout_ms: Number.isFinite(config.timeout_ms) ? config.timeout_ms : 120_000,
204
+ max_output_chars: Number.isFinite(config.max_output_chars)
205
+ ? config.max_output_chars
206
+ : 20_000,
207
+ success_exit_codes: successExitCodes,
208
+ };
209
+ this.name = `command:${name}`;
210
+ }
211
+ capture(context) {
212
+ const phase = context?.phase ?? "after";
213
+ if (phase === "before" && this.config.phase === "after") {
214
+ return Promise.resolve(null);
215
+ }
216
+ const startedAt = Date.now();
217
+ const cap = Math.max(0, Math.min(20_000, this.config.max_output_chars));
218
+ const timeoutMs = Math.max(1, Math.min(this.config.timeout_ms, context?.timeoutMs || this.config.timeout_ms));
219
+ let cwd;
220
+ if (!this.config.executable) {
221
+ return Promise.resolve(this.snapshot(phase, "missing", null, null, "", "Command executable is empty", false, 0));
222
+ }
223
+ try {
224
+ cwd = commandCwd(this.config.cwd);
225
+ }
226
+ catch (error) {
227
+ return Promise.resolve(this.snapshot(phase, "invalid_cwd", null, null, "", String(error), false, Date.now() - startedAt));
228
+ }
229
+ return new Promise((resolveCapture) => {
230
+ let stdout = "";
231
+ let stderr = "";
232
+ let truncated = false;
233
+ let retained = 0;
234
+ let settled = false;
235
+ const append = (current, chunk) => {
236
+ const text = String(chunk);
237
+ if (retained >= cap) {
238
+ if (text.length > 0)
239
+ truncated = true;
240
+ return current;
241
+ }
242
+ const remaining = cap - retained;
243
+ if (text.length > remaining)
244
+ truncated = true;
245
+ const accepted = text.slice(0, remaining);
246
+ retained += accepted.length;
247
+ return current + accepted;
248
+ };
249
+ const child = spawn(this.config.executable, this.config.args, {
250
+ cwd,
251
+ shell: false,
252
+ windowsHide: true,
253
+ stdio: ["ignore", "pipe", "pipe"],
254
+ });
255
+ let timer;
256
+ const finish = (status, exitCode, signal) => {
257
+ if (settled)
258
+ return;
259
+ settled = true;
260
+ if (timer)
261
+ clearTimeout(timer);
262
+ context?.signal.removeEventListener("abort", abort);
263
+ resolveCapture(this.snapshot(phase, status, exitCode, signal, stdout, stderr, truncated, Date.now() - startedAt));
264
+ };
265
+ const abort = () => {
266
+ child.kill();
267
+ finish("aborted", null, null);
268
+ };
269
+ child.stdout.on("data", (chunk) => { stdout = append(stdout, chunk); });
270
+ child.stderr.on("data", (chunk) => { stderr = append(stderr, chunk); });
271
+ child.once("error", (error) => {
272
+ stderr = append(stderr, error.message);
273
+ finish(error.code === "ENOENT" ? "missing" : "failed", null, null);
274
+ });
275
+ child.once("close", (code, signal) => {
276
+ const passed = code !== null && this.config.success_exit_codes.includes(code);
277
+ finish(passed ? "passed" : "failed", code, signal);
278
+ });
279
+ timer = setTimeout(() => {
280
+ child.kill();
281
+ finish("timeout", null, null);
282
+ }, timeoutMs);
283
+ timer.unref?.();
284
+ if (context?.signal.aborted)
285
+ abort();
286
+ else
287
+ context?.signal.addEventListener("abort", abort, { once: true });
288
+ });
289
+ }
290
+ snapshot(phase, status, exitCode, signal, stdout, stderr, truncated, durationMs) {
291
+ return {
292
+ provider: this.name,
293
+ timestamp: Date.now(),
294
+ files: [],
295
+ data: {
296
+ kind: "command",
297
+ commandName: this.config.name,
298
+ required: this.config.required,
299
+ phase,
300
+ status,
301
+ exitCode,
302
+ signal,
303
+ durationMs,
304
+ stdout,
305
+ stderr,
306
+ truncated,
307
+ },
308
+ };
309
+ }
310
+ }
311
+ /** v2.0.1: Capture git file state using parallel async execFile.
312
+ *
313
+ * Runs three git commands concurrently via Promise.all. Uses a single
314
+ * timeout (shared across all commands) and an optional AbortSignal for
315
+ * early cancellation. Shell-free (execFile, not exec).
316
+ *
317
+ * On any command failure, returns null — the caller should treat git
318
+ * evidence as unavailable and degrade gracefully.
319
+ *
320
+ * Performance: wall-clock time is max(single-command), not sum(3).
321
+ * On a normal repo (~200ms/command): ~200ms vs ~600ms sequential.
322
+ * On Windows with antivirus (~4s/command): ~4s vs ~12s sequential. */
323
+ export async function captureGitFileStateAsync(signal, timeoutMs) {
324
+ const timeout = timeoutMs ?? 15000;
325
+ const runGit = (args) => {
326
+ return new Promise((resolve, reject) => {
327
+ const child = execFile("git", [...args], {
328
+ encoding: "utf-8",
329
+ timeout,
330
+ signal,
331
+ windowsHide: true,
332
+ });
333
+ let stdout = "";
334
+ child.stdout?.on("data", (chunk) => {
335
+ stdout += chunk;
336
+ });
337
+ child.on("close", (code) => {
338
+ code === 0
339
+ ? resolve(stdout)
340
+ : reject(new Error(`git ${args[0]} exited ${code}`));
341
+ });
342
+ child.on("error", reject);
343
+ });
344
+ };
345
+ try {
346
+ const [tracked, staged, untracked] = await Promise.all([
347
+ runGit(["diff", "--name-only"]),
348
+ runGit(["diff", "--cached", "--name-only"]),
349
+ runGit(["ls-files", "--others", "--exclude-standard"]),
350
+ ]);
351
+ return {
352
+ tracked: tracked.trim().split("\n").filter((f) => f.length > 0).sort(),
353
+ staged: staged.trim().split("\n").filter((f) => f.length > 0).sort(),
354
+ untracked: untracked.trim().split("\n").filter((f) => f.length > 0).sort(),
355
+ };
356
+ }
357
+ catch {
358
+ return null;
359
+ }
360
+ }
361
+ /** v1.17 (sync): Capture git file state using sequential execFileSync.
362
+ *
363
+ * @deprecated Use captureGitFileStateAsync() for the primary path.
364
+ * This sync fallback exists for legacy callers that cannot be made async
365
+ * (e.g. reconstructSession during startup). Uses execFileSync — shell-free,
366
+ * unlike the old execSync-based implementation. */
367
+ export function captureGitFileState() {
368
+ try {
369
+ const tracked = execFileSync("git", ["diff", "--name-only"], {
370
+ encoding: "utf-8",
371
+ timeout: 5000,
372
+ }).trim();
373
+ const staged = execFileSync("git", ["diff", "--cached", "--name-only"], {
374
+ encoding: "utf-8",
375
+ timeout: 5000,
376
+ }).trim();
377
+ const untracked = execFileSync("git", ["ls-files", "--others", "--exclude-standard"], {
378
+ encoding: "utf-8",
379
+ timeout: 5000,
380
+ }).trim();
381
+ return {
382
+ tracked: tracked.split("\n").filter((f) => f.length > 0).sort(),
383
+ staged: staged.split("\n").filter((f) => f.length > 0).sort(),
384
+ untracked: untracked.split("\n").filter((f) => f.length > 0).sort(),
385
+ };
386
+ }
387
+ catch {
388
+ return null;
389
+ }
390
+ }
391
+ /** v1.16: Capture modified files as a flat sorted array.
392
+ * @deprecated v1.17 — Use captureGitFileState() for full coverage. */
393
+ export function captureGitModifiedFiles() {
394
+ const state = captureGitFileState();
395
+ if (!state)
396
+ return null;
397
+ return [...new Set([...state.tracked, ...state.staged, ...state.untracked])].sort();
398
+ }
399
+ // ── Built-in: GitEvidenceProvider ──────────────────────────────────────────
400
+ /** Captures git file state (tracked, staged, untracked) via the async
401
+ * captureGitFileStateAsync() when a context is provided, falling back
402
+ * to the synchronous captureGitFileState() for legacy callers. */
403
+ export class GitEvidenceProvider {
404
+ name = "git";
405
+ capture(context) {
406
+ const capture = context
407
+ ? captureGitFileStateAsync(context.signal, context.timeoutMs)
408
+ : captureGitFileState();
409
+ const statePromise = capture instanceof Promise ? capture : Promise.resolve(capture);
410
+ return statePromise.then((state) => {
411
+ if (!state)
412
+ return null;
413
+ const files = [...new Set([
414
+ ...state.tracked,
415
+ ...state.staged,
416
+ ...state.untracked,
417
+ ])].sort();
418
+ const fingerprints = {};
419
+ for (const file of files) {
420
+ try {
421
+ const stat = statSync(file);
422
+ const hash = createHash("sha256").update(readFileSync(file)).digest("hex");
423
+ fingerprints[file] = `${stat.mode}:${hash}`;
424
+ }
425
+ catch {
426
+ // Deleted files are evidence too. A stable sentinel lets the diff
427
+ // distinguish deleted/restored transitions across a round.
428
+ fingerprints[file] = "missing";
429
+ }
430
+ }
431
+ return {
432
+ provider: "git",
433
+ timestamp: Date.now(),
434
+ files,
435
+ data: {
436
+ tracked: state.tracked,
437
+ staged: state.staged,
438
+ untracked: state.untracked,
439
+ fingerprints,
440
+ },
441
+ };
442
+ }); // end of .then()
443
+ }
444
+ }
445
+ registerEvidenceProvider("git", () => new GitEvidenceProvider());
446
+ // ── Utility ────────────────────────────────────────────────────────────────
447
+ /** Extract merged file list from evidence snapshots for backward compat
448
+ * with runtimeFilesChanged (string[] | null).
449
+ *
450
+ * Looks for the "git" provider first; falls back to merging all
451
+ * providers' files arrays (deduplicated). */
452
+ export function extractFilesFromSnapshots(snapshots) {
453
+ if (snapshots.length === 0)
454
+ return null;
455
+ // Prefer the git provider for backward compat
456
+ const gitSnapshot = snapshots.find((s) => s.provider === "git");
457
+ if (gitSnapshot)
458
+ return [...gitSnapshot.files].sort();
459
+ // Fallback: merge all providers
460
+ const allFiles = new Set();
461
+ for (const s of snapshots) {
462
+ for (const f of s.files)
463
+ allFiles.add(f);
464
+ }
465
+ return [...allFiles].sort();
466
+ }
467
+ /** Compute a diff between two evidence collections (before → after).
468
+ * Returns files that appeared in the after-snapshot but not the before.
469
+ * Used by runtime.ts to compute runtimeFilesChanged. */
470
+ function snapshotFingerprints(snapshot) {
471
+ const value = snapshot.data.fingerprints;
472
+ if (!value || typeof value !== "object" || Array.isArray(value))
473
+ return null;
474
+ const fingerprints = {};
475
+ for (const [file, fingerprint] of Object.entries(value)) {
476
+ if (typeof fingerprint === "string")
477
+ fingerprints[file] = fingerprint;
478
+ }
479
+ return fingerprints;
480
+ }
481
+ function diffProviderSnapshot(before, after) {
482
+ const beforeSet = new Set(before.files);
483
+ const afterSet = new Set(after.files);
484
+ const beforeFingerprints = snapshotFingerprints(before);
485
+ const afterFingerprints = snapshotFingerprints(after);
486
+ const candidates = new Set([...before.files, ...after.files]);
487
+ return [...candidates].filter((file) => {
488
+ if (beforeSet.has(file) !== afterSet.has(file))
489
+ return true;
490
+ if (!beforeFingerprints || !afterFingerprints)
491
+ return false;
492
+ return beforeFingerprints[file] !== afterFingerprints[file];
493
+ }).sort();
494
+ }
495
+ /** Return provider snapshots narrowed to evidence produced during this round.
496
+ * The full provider payload remains available in data, while files contains
497
+ * only added/removed/content-changed paths. */
498
+ export function diffSnapshotCollections(before, after) {
499
+ return after.map((snapshot) => {
500
+ const baseline = before.find((item) => item.provider === snapshot.provider);
501
+ if (!baseline)
502
+ return snapshot;
503
+ return {
504
+ ...snapshot,
505
+ files: diffProviderSnapshot(baseline, snapshot),
506
+ };
507
+ });
508
+ }
509
+ export function diffSnapshots(before, after) {
510
+ return extractFilesFromSnapshots(diffSnapshotCollections(before, after));
511
+ }
512
+ //# sourceMappingURL=evidence-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-provider.js","sourceRoot":"","sources":["../src/evidence-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EACL,KAAK,EACL,QAAQ,EACR,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkDpD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAmC,CAAC;AAErE,oEAAoE;AACpE,MAAM,UAAU,wBAAwB,CACtC,IAAY,EACZ,OAAgC;IAEhC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9E,iBAAiB,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACjC,OAAO,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,OAAO,iBAAiB;IACR;IAApB,YAAoB,SAA6B;QAA7B,cAAS,GAAT,SAAS,CAAoB;IAAG,CAAC;IAErD;yEACqE;IACrE,MAAM,CAAC,iBAAiB,CAAC,aAAuB;QAC9C,MAAM,SAAS,GAAuB,EAAE,CAAC;QACzC,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,OAAO;gBAAE,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,mEAAmE;IACnE,MAAM,CAAC,UAAU;QACf,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC,QAAQ,CAAC;QACpC,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YACnD,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC;YAC7E,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,SAAS,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC;QAC/E,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAO,EAAE,OAAO;gBAAE,SAAS,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;yDAEqD;IACrD,OAAO,CAAC,UAAkC,EAAE;QAC1C,MAAM,OAAO,GAAuB,EAAE,CAAC;QACvC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC;oBACzB,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC,QAAQ,CAAC,UAAU;oBAC/D,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;iBAChC,CAAC,CAAC;gBACH,IAAI,QAAQ,IAAI,OAAQ,QAA6B,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC1E,iEAAiE;oBACjE,iEAAiE;oBACjE,oEAAoE;oBACpE,+DAA+D;oBAC/D,4CAA4C;oBAC5C,KAAM,QAA6C,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;oBAC3E,aAAa,CAAC,cAAc,CAC1B,CAAC,CAAC,IAAI,EACN,SAAS,EACT,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EACtB,OAAO,CAAC,MAAM,CACf,CAAC;oBACF,QAAQ,CAAC,yCAAyC,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;oBAC1E,SAAS;gBACX,CAAC;gBACD,MAAM,YAAY,GAAG,QAAmC,CAAC;gBACzD,aAAa,CAAC,cAAc,CAC1B,CAAC,CAAC,IAAI,EACN,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,EAC1C,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EACtB,OAAO,CAAC,MAAM,CACf,CAAC;gBACF,IAAI,YAAY;oBAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,cAAc,CAC1B,CAAC,CAAC,IAAI,EACN,SAAS,EACT,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EACtB,OAAO,CAAC,MAAM,CACf,CAAC;gBACF,QAAQ,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,YAAY,CAAC,UAAkC,EAAE;QACrD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,SAAS,CAAC,kBAAkB,EAAE;gBACzC,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,SAAS;aACV,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;YACzC,IAAI,KAAgD,CAAC;YACrD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAC/C,MAAM,EAAE,UAAU,CAAC,MAAM;oBACzB,SAAS;oBACT,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;iBAChC,CAAC,CAAC,CAAC;gBACJ,MAAM,QAAQ,GAAG,SAAS,GAAG,CAAC;oBAC5B,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC;wBACjB,OAAO;wBACP,IAAI,OAAO,CAA0B,CAAC,OAAO,EAAE,EAAE;4BAC/C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gCACtB,QAAQ,GAAG,IAAI,CAAC;gCAChB,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,qCAAqC,SAAS,IAAI,CAAC,CAAC,CAAC;gCAChF,OAAO,CAAC,IAAI,CAAC,CAAC;4BAChB,CAAC,EAAE,SAAS,CAAC,CAAC;wBAChB,CAAC,CAAC;qBACH,CAAC;oBACJ,CAAC,CAAC,MAAM,OAAO,CAAC;gBAClB,MAAM,OAAO,GAAG,QAAQ;oBACtB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;gBAC3C,aAAa,CAAC,cAAc,CAC1B,QAAQ,CAAC,IAAI,EACb,OAAO,EACP,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EACtB,OAAO,CAAC,MAAM,CACf,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrD,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,2BAA2B,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAChF,CAAC;gBACD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAa,CAAC,cAAc,CAC1B,QAAQ,CAAC,IAAI,EACb,SAAS,EACT,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,EACtB,OAAO,CAAC,MAAM,CACf,CAAC;gBACF,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBAC5C,QAAQ,CAAC,yBAAyB,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACvF,OAAO,IAAI,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CACzC,CAAC,QAAQ,EAAgC,EAAE,CAAC,QAAQ,KAAK,IAAI,CAC9D,CAAC;IACJ,CAAC;CACF;AAgBD,SAAS,UAAU,CAAC,UAA8B;IAChD,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,UAAU,IAAI,GAAG,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,IACE,eAAe,KAAK,IAAI,IAAI,eAAe,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QAClE,UAAU,CAAC,eAAe,CAAC,EAC3B,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACnD,IACE,cAAc,KAAK,IAAI,IAAI,cAAc,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QAChE,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAC7D,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6EAA6E;AAC7E,MAAM,OAAO,uBAAuB;IACzB,IAAI,CAAS;IACL,MAAM,CAAwB;IAE/C,YAAY,MAA6B;QACvC,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YAChE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE;YACpB,CAAC,CAAC,gBAAgB,CAAC;QACrB,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;YACtD,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE;YAC1B,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;YACrC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC;YACrE,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC/D,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACpE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACR,IAAI,CAAC,MAAM,GAAG;YACZ,GAAG,MAAM;YACT,IAAI;YACJ,UAAU;YACV,IAAI;YACJ,KAAK,EAAE,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YACjD,QAAQ,EAAE,MAAM,CAAC,QAAQ,KAAK,IAAI;YAClC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO;YAC5E,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBACxD,CAAC,CAAC,MAAM,CAAC,gBAAgB;gBACzB,CAAC,CAAC,MAAM;YACV,kBAAkB,EAAE,gBAAgB;SACrC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,WAAW,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,OAAO,CAAC,OAAgC;QACtC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC;QACxC,IAAI,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACxD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAC/E,CAAC;QACF,IAAI,GAAW,CAAC;QAChB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAClC,KAAK,EACL,SAAS,EACT,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,6BAA6B,EAC7B,KAAK,EACL,CAAC,CACF,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC;YACH,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAClC,KAAK,EACL,aAAa,EACb,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,MAAM,CAAC,KAAK,CAAC,EACb,KAAK,EACL,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE;YACpC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,MAAM,GAAG,CAAC,OAAe,EAAE,KAAc,EAAU,EAAE;gBACzD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3B,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;oBACpB,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;wBAAE,SAAS,GAAG,IAAI,CAAC;oBACtC,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,MAAM,SAAS,GAAG,GAAG,GAAG,QAAQ,CAAC;gBACjC,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS;oBAAE,SAAS,GAAG,IAAI,CAAC;gBAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;gBAC1C,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC;gBAC5B,OAAO,OAAO,GAAG,QAAQ,CAAC;YAC5B,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;gBAC5D,GAAG;gBACH,KAAK,EAAE,KAAK;gBACZ,WAAW,EAAE,IAAI;gBACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,KAAgD,CAAC;YACrD,MAAM,MAAM,GAAG,CACb,MAAqC,EACrC,QAAuB,EACvB,MAAqB,EACf,EAAE;gBACR,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,IAAI,KAAK;oBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;gBAC/B,OAAO,EAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACpD,cAAc,CAAC,IAAI,CAAC,QAAQ,CAC1B,KAAK,EACL,MAAM,EACN,QAAQ,EACR,MAAM,EACN,MAAM,EACN,MAAM,EACN,SAAS,EACT,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CACvB,CAAC,CAAC;YACL,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,GAAS,EAAE;gBACvB,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC,CAAC;YACF,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;gBACnD,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACnC,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9E,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YACH,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBACtB,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC,EAAE,SAAS,CAAC,CAAC;YACd,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;YAChB,IAAI,OAAO,EAAE,MAAM,CAAC,OAAO;gBAAE,KAAK,EAAE,CAAC;;gBAChC,OAAO,EAAE,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ,CACd,KAAyB,EACzB,MAAqC,EACrC,QAAuB,EACvB,MAAqB,EACrB,MAAc,EACd,MAAc,EACd,SAAkB,EAClB,UAAkB;QAElB,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,IAAI;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE;gBACJ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;gBAC7B,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,KAAK;gBACL,MAAM;gBACN,QAAQ;gBACR,MAAM;gBACN,UAAU;gBACV,MAAM;gBACN,MAAM;gBACN,SAAS;aACoB;SAChC,CAAC;IACJ,CAAC;CACF;AAcD;;;;;;;;;;;sEAWsE;AACtE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAoB,EACpB,SAAkB;IAElB,MAAM,OAAO,GAAG,SAAS,IAAI,KAAK,CAAC;IAEnC,MAAM,MAAM,GAAG,CAAC,IAAuB,EAAmB,EAAE;QAC1D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE;gBACvC,QAAQ,EAAE,OAAgB;gBAC1B,OAAO;gBACP,MAAM;gBACN,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;YACH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,IAAI,KAAK,CAAC;oBACR,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;oBACjB,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACrD,MAAM,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC/B,MAAM,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,CAAC;SACvD,CAAC,CAAC;QACH,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YACtE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YACpE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;SAC3E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;mDAKmD;AACnD,MAAM,UAAU,mBAAmB;IACjC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;YAC3D,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE;YACtE,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,CAAC,EAAE;YACpF,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YACvE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YACrE,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;SAC5E,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;uEACuE;AACvE,MAAM,UAAU,uBAAuB;IACrC,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACtF,CAAC;AAED,8EAA8E;AAE9E;;mEAEmE;AACnE,MAAM,OAAO,mBAAmB;IACrB,IAAI,GAAG,KAAK,CAAC;IAEtB,OAAO,CAAC,OAAgC;QACtC,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,wBAAwB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC;YAC7D,CAAC,CAAC,mBAAmB,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,OAAO,YAAY,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAErF,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,KAA0B,EAA2B,EAAE;YAC/E,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC;oBAC1B,GAAG,KAAK,CAAC,OAAO;oBAChB,GAAG,KAAK,CAAC,MAAM;oBACf,GAAG,KAAK,CAAC,SAAS;iBACnB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,MAAM,YAAY,GAA2B,EAAE,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;oBAC5B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC3E,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;gBAC9C,CAAC;gBAAC,MAAM,CAAC;oBACP,mEAAmE;oBACnE,2DAA2D;oBAC3D,YAAY,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;gBACjC,CAAC;YACH,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,KAAK;gBACL,IAAI,EAAE;oBACJ,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,YAAY;iBACb;aACF,CAAC;QACF,CAAC,CAAC,CAAC,CAAE,iBAAiB;IACxB,CAAC;CACF;AAED,wBAAwB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC;AAEjE,8EAA8E;AAE9E;;;;8CAI8C;AAC9C,MAAM,UAAU,yBAAyB,CACvC,SAA6B;IAE7B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxC,8CAA8C;IAC9C,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC;IAChE,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACtD,gCAAgC;IAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;yDAEyD;AACzD,SAAS,oBAAoB,CAC3B,QAA0B;IAE1B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;IACzC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7E,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;IACxE,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,oBAAoB,CAC3B,MAAwB,EACxB,KAAuB;IAEvB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5D,IAAI,CAAC,kBAAkB,IAAI,CAAC,iBAAiB;YAAE,OAAO,KAAK,CAAC;QAC5D,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;gDAEgD;AAChD,MAAM,UAAU,uBAAuB,CACrC,MAA0B,EAC1B,KAAyB;IAEzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC/B,OAAO;YACL,GAAG,QAAQ;YACX,KAAK,EAAE,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC;SAChD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAA0B,EAC1B,KAAyB;IAEzB,OAAO,yBAAyB,CAAC,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC3E,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- /** LoopForge — Loop-Time Intelligence Layer for AI coding agents.
1
+ /** LoopForge — Cognitive State Runtime for AI coding agents.
2
2
  *
3
3
  * TypeScript reference implementation v1.3.
4
4
  *
@@ -21,22 +21,28 @@
21
21
  * const server = new McpServer();
22
22
  * server.start();
23
23
  */
24
- export { Mode, AgentStatus, Technique, makeAnalysis, makeVaultConfig, makeExecutionFeedback, makeSelfEvaluation, makeLoopObjective, makeLoopHealth, makeRollingSummary, makeTaskAlignment, makeLoopRoundResult, makeLoopCompileRequest, makeLoopCompileResponse, makeSessionState, makeTaskId, toDict, SELF_EVAL_REGEX, STOP_REASON_OUTCOME_MAP, } from "./protocol.js";
25
- export type { Analysis, VaultConfig, ExecutionFeedback, SelfEvaluation, LoopForgeRequest, LoopObjective, LoopHealth, RollingSummary, TaskAlignment, LoopRoundResult, LoopCompileRequest, LoopCompileResponse, LoopForgeResponse, SessionState, AgentLoopResult, WorkerResult, } from "./protocol.js";
26
- export { getPolicy, loadPolicy, resetPolicy, DEFAULT_POLICY, resolveAllowedPhases, resolveInjectionPhase, buildAccumulatedMemoryContext, buildBaseMemoryWriteback, } from "./policy.js";
27
- export type { LoopPolicy, ConstraintsPolicy, SummaryPolicy, TechniquePolicy, EnginePolicy, BackendPolicy, MemoryInjectionPolicy, MemoryInjectionTier, MemoryWritebackPolicy, } from "./policy.js";
28
- export type { VaultBackend, VaultEntry } from "./backends/interface.js";
29
- export { FSBackend } from "./backends/fs.js";
30
- export { routeTechniqueAdaptive, TECHNIQUE_REFERENCE, SKILLS_DIR, } from "./builder.js";
31
- export { compileLoop, decideLevel, compileL2, alignTask, checkLoopHealth, computeAdvisories, computeGoalTextHash, deriveGoalId, getPreviousRound, buildSelfEvalBlock, buildRollingSummary, formatRollingSummaryForPrompt, filterConstraintsForSubTask, formatDelegationPrompt, buildDelegationSummary, } from "./loop-compiler.js";
24
+ export { Mode, AgentStatus, makeExecutionFeedback, makeSelfEvaluation, makeLoopObjective, makeLoopHealth, makeRollingSummary, makeTaskAlignment, makeLoopRoundResult, makeLoopCompileRequest, makeLoopCompileResponse, makeSessionState, makeTaskId, toDict, SELF_EVAL_REGEX, makeEvidenceSnapshot, makeVerificationFlag, makeVerificationResult, makeEnforcementResult, makeCheckpointSummary, } from "./protocol.js";
25
+ export type { ExecutionFeedback, SelfEvaluation, LoopForgeRequest, LoopObjective, LoopHealth, RollingSummary, TaskAlignment, LoopRoundResult, LoopCompileRequest, LoopCompileResponse, LoopForgeResponse, SessionState, AgentLoopResult, WorkerResult, EvidenceSnapshot, VerificationFlag, VerificationResult, EnforcementResult, CriterionRevision, CheckpointSummary, PromptArtifact, } from "./protocol.js";
26
+ export { getPolicy, loadPolicy, resetPolicy, DEFAULT_POLICY, writeStateFile, } from "./policy.js";
27
+ export type { LoopPolicy, ConstraintsPolicy, SummaryPolicy, EnginePolicy, BackendPolicy, PromptPolicy, StateFilePolicy, EvidencePolicy, CommandEvidencePolicy, McpPolicy, } from "./policy.js";
28
+ export { FileLoopStore, LoopStoreBackend, VaultBackendLoopStore, LOOP_STORE_SCHEMA_VERSION, } from "./loop-store.js";
29
+ export type { LoopStore, LoopSessionDocument, LoopRoundDocument, LoopStoreMigrationResult, } from "./loop-store.js";
30
+ export { compileLoop, decideLevel, alignTask, checkLoopHealth, computeGoalTextHash, deriveGoalId, getPreviousRound, buildSelfEvalBlock, buildRollingSummary, } from "./loop-compiler.js";
32
31
  export { ReplayBackend } from "./replay.js";
33
32
  export { LoopForgeEngine, createEngine, extractSelfEvaluation, heuristicSelfEvaluation, buildSelfEvaluation, parseExecutionEvidence, parseCriterionRevisions, parseWorkerResults, } from "./engine.js";
34
33
  export type { EngineMetrics, DelegationEntry } from "./engine.js";
35
- export { LoopRuntime, run } from "./runtime.js";
36
- export { RuntimeStatus } from "./protocol.js";
37
- export type { RoundContext, AgentExecutor, StopReason, RoundStartInfo, RoundCompleteInfo, HeartbeatInfo, TimeoutInfo, HealthWarning, RuntimeConfig, RunResult, } from "./protocol.js";
34
+ export type { StopReason } from "./protocol.js";
38
35
  export { McpServer } from "./mcp/server.js";
39
36
  export { SessionManager } from "./mcp/session.js";
40
37
  export type { McpSession, McpSessionSummary } from "./mcp/session.js";
41
- export { computeProjectHash, findGitRoot, detectClaudeMem, createMemoryProvider, createMemoryWriter, autoConfigureMemory, tryAutoConfigure, } from "./memory-bridge.js";
38
+ export { EvidenceCollector, GitEvidenceProvider, CommandEvidenceProvider, registerEvidenceProvider, unregisterEvidenceProvider, extractFilesFromSnapshots, diffSnapshots, diffSnapshotCollections, } from "./evidence-provider.js";
39
+ export type { ProviderSnapshot, EvidenceProvider, EvidenceCaptureContext, EvidenceCaptureResult, EvidenceCollectOptions, EvidenceProviderFactory, CommandEvidenceData, } from "./evidence-provider.js";
40
+ export { logEvent, startSpan, setTraceSink, getTraceSink, } from "./observability.js";
41
+ export type { LogEventData, TraceStatus, TraceRecord, TraceSink, TraceContext, TraceSpan, } from "./observability.js";
42
+ export { PolicyMetricsCollector, policyMetrics, getPolicyMetrics, resetPolicyMetrics, } from "./policy-metrics.js";
43
+ export type { PolicyMetricsSnapshot } from "./policy-metrics.js";
44
+ export { COGNITIVE_CHECKPOINT_SCHEMA_VERSION, createCognitiveCheckpoint, } from "./interop.js";
45
+ export type { CognitiveStateCheckpoint, CognitiveCheckpointSink, } from "./interop.js";
46
+ export { ROUND_TRANSACTION_SCHEMA_VERSION, RoundTransactionCoordinator, makeRoundId, prepareRoundTransaction, parseRoundTransactionSnapshot, } from "./round-transaction.js";
47
+ export type { RoundTransactionPhase, RoundTransactionSnapshot, RoundTransactionInput, RoundTransactionOutcome, } from "./round-transaction.js";
42
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EACL,IAAI,EACJ,WAAW,EACX,SAAS,EACT,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,eAAe,EACf,uBAAuB,GACxB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,cAAc,EACd,aAAa,EACb,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AAGrB,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,UAAU,GACX,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,SAAS,EACT,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,6BAA6B,EAC7B,2BAA2B,EAC3B,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,EACL,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAErB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGlE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,YAAY,EACV,YAAY,EACZ,aAAa,EACb,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,SAAS,GACV,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGtE,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}