loopforge 1.15.1 → 2.0.0

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 (185) hide show
  1. package/README.md +172 -95
  2. package/dist/backends/interface.d.ts +3 -9
  3. package/dist/backends/interface.d.ts.map +1 -1
  4. package/dist/backends/interface.js +1 -5
  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 +7 -4
  18. package/dist/engine.d.ts.map +1 -1
  19. package/dist/engine.js +78 -138
  20. package/dist/engine.js.map +1 -1
  21. package/dist/evidence-provider.d.ts +113 -0
  22. package/dist/evidence-provider.d.ts.map +1 -0
  23. package/dist/evidence-provider.js +419 -0
  24. package/dist/evidence-provider.js.map +1 -0
  25. package/dist/index.d.ts +18 -10
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +15 -9
  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 +30 -0
  34. package/dist/interop.d.ts.map +1 -0
  35. package/dist/interop.js +29 -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 +303 -2206
  40. package/dist/loop-compiler.js.map +1 -1
  41. package/dist/loop-store.d.ts +82 -0
  42. package/dist/loop-store.d.ts.map +1 -0
  43. package/dist/loop-store.js +332 -0
  44. package/dist/loop-store.js.map +1 -0
  45. package/dist/mcp/server.d.ts +9 -6
  46. package/dist/mcp/server.d.ts.map +1 -1
  47. package/dist/mcp/server.js +109 -73
  48. package/dist/mcp/server.js.map +1 -1
  49. package/dist/mcp/session.d.ts +75 -19
  50. package/dist/mcp/session.d.ts.map +1 -1
  51. package/dist/mcp/session.js +707 -361
  52. package/dist/mcp/session.js.map +1 -1
  53. package/dist/mcp/tools.d.ts +18 -268
  54. package/dist/mcp/tools.d.ts.map +1 -1
  55. package/dist/mcp/tools.js +225 -12
  56. package/dist/mcp/tools.js.map +1 -1
  57. package/dist/observability.d.ts +36 -16
  58. package/dist/observability.d.ts.map +1 -1
  59. package/dist/observability.js +82 -23
  60. package/dist/observability.js.map +1 -1
  61. package/dist/policy-metrics.d.ts +46 -0
  62. package/dist/policy-metrics.d.ts.map +1 -0
  63. package/dist/policy-metrics.js +146 -0
  64. package/dist/policy-metrics.js.map +1 -0
  65. package/dist/policy.d.ts +53 -140
  66. package/dist/policy.d.ts.map +1 -1
  67. package/dist/policy.js +119 -184
  68. package/dist/policy.js.map +1 -1
  69. package/dist/prompt-assembler.d.ts +30 -0
  70. package/dist/prompt-assembler.d.ts.map +1 -0
  71. package/dist/prompt-assembler.js +257 -0
  72. package/dist/prompt-assembler.js.map +1 -0
  73. package/dist/prompt-policy.d.ts +29 -0
  74. package/dist/prompt-policy.d.ts.map +1 -0
  75. package/dist/prompt-policy.js +51 -0
  76. package/dist/prompt-policy.js.map +1 -0
  77. package/dist/protocol.d.ts +88 -93
  78. package/dist/protocol.d.ts.map +1 -1
  79. package/dist/protocol.js +23 -39
  80. package/dist/protocol.js.map +1 -1
  81. package/dist/replay.d.ts.map +1 -1
  82. package/dist/replay.js +1 -27
  83. package/dist/replay.js.map +1 -1
  84. package/dist/round-coordinator.d.ts +90 -0
  85. package/dist/round-coordinator.d.ts.map +1 -0
  86. package/dist/round-coordinator.js +186 -0
  87. package/dist/round-coordinator.js.map +1 -0
  88. package/dist/round-driver.d.ts +53 -0
  89. package/dist/round-driver.d.ts.map +1 -0
  90. package/dist/round-driver.js +101 -0
  91. package/dist/round-driver.js.map +1 -0
  92. package/dist/round-transaction.d.ts +70 -0
  93. package/dist/round-transaction.d.ts.map +1 -0
  94. package/dist/round-transaction.js +290 -0
  95. package/dist/round-transaction.js.map +1 -0
  96. package/dist/runtime.d.ts +33 -19
  97. package/dist/runtime.d.ts.map +1 -1
  98. package/dist/runtime.js +355 -336
  99. package/dist/runtime.js.map +1 -1
  100. package/dist/storage.d.ts +38 -0
  101. package/dist/storage.d.ts.map +1 -0
  102. package/dist/storage.js +201 -0
  103. package/dist/storage.js.map +1 -0
  104. package/dist/verification-gate.d.ts +33 -7
  105. package/dist/verification-gate.d.ts.map +1 -1
  106. package/dist/verification-gate.js +195 -7
  107. package/dist/verification-gate.js.map +1 -1
  108. package/loop_policy.json +22 -48
  109. package/package.json +13 -10
  110. package/skills/perception/SKILL.md +80 -267
  111. package/dist/backends/fs.d.ts +0 -36
  112. package/dist/backends/fs.d.ts.map +0 -1
  113. package/dist/backends/fs.js +0 -362
  114. package/dist/backends/fs.js.map +0 -1
  115. package/dist/builder.d.ts +0 -19
  116. package/dist/builder.d.ts.map +0 -1
  117. package/dist/builder.js +0 -215
  118. package/dist/builder.js.map +0 -1
  119. package/dist/mcp-server.d.ts +0 -12
  120. package/dist/mcp-server.d.ts.map +0 -1
  121. package/dist/mcp-server.js +0 -14
  122. package/dist/mcp-server.js.map +0 -1
  123. package/dist/memory-bridge.d.ts +0 -47
  124. package/dist/memory-bridge.d.ts.map +0 -1
  125. package/dist/memory-bridge.js +0 -290
  126. package/dist/memory-bridge.js.map +0 -1
  127. package/dist/tests/_helpers.d.ts +0 -25
  128. package/dist/tests/_helpers.d.ts.map +0 -1
  129. package/dist/tests/_helpers.js +0 -47
  130. package/dist/tests/_helpers.js.map +0 -1
  131. package/dist/tests/builder.test.d.ts +0 -2
  132. package/dist/tests/builder.test.d.ts.map +0 -1
  133. package/dist/tests/builder.test.js +0 -112
  134. package/dist/tests/builder.test.js.map +0 -1
  135. package/dist/tests/enforcement-gate.test.d.ts +0 -2
  136. package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
  137. package/dist/tests/enforcement-gate.test.js +0 -328
  138. package/dist/tests/enforcement-gate.test.js.map +0 -1
  139. package/dist/tests/engine.test.d.ts +0 -2
  140. package/dist/tests/engine.test.d.ts.map +0 -1
  141. package/dist/tests/engine.test.js +0 -375
  142. package/dist/tests/engine.test.js.map +0 -1
  143. package/dist/tests/generate-schema.test.d.ts +0 -8
  144. package/dist/tests/generate-schema.test.d.ts.map +0 -1
  145. package/dist/tests/generate-schema.test.js +0 -199
  146. package/dist/tests/generate-schema.test.js.map +0 -1
  147. package/dist/tests/loop-compiler.test.d.ts +0 -2
  148. package/dist/tests/loop-compiler.test.d.ts.map +0 -1
  149. package/dist/tests/loop-compiler.test.js +0 -1059
  150. package/dist/tests/loop-compiler.test.js.map +0 -1
  151. package/dist/tests/mcp.test.d.ts +0 -7
  152. package/dist/tests/mcp.test.d.ts.map +0 -1
  153. package/dist/tests/mcp.test.js +0 -505
  154. package/dist/tests/mcp.test.js.map +0 -1
  155. package/dist/tests/memory-bridge.test.d.ts +0 -8
  156. package/dist/tests/memory-bridge.test.d.ts.map +0 -1
  157. package/dist/tests/memory-bridge.test.js +0 -383
  158. package/dist/tests/memory-bridge.test.js.map +0 -1
  159. package/dist/tests/policy.test.d.ts +0 -2
  160. package/dist/tests/policy.test.d.ts.map +0 -1
  161. package/dist/tests/policy.test.js +0 -49
  162. package/dist/tests/policy.test.js.map +0 -1
  163. package/dist/tests/protocol.test.d.ts +0 -2
  164. package/dist/tests/protocol.test.d.ts.map +0 -1
  165. package/dist/tests/protocol.test.js +0 -73
  166. package/dist/tests/protocol.test.js.map +0 -1
  167. package/dist/tests/replay.test.d.ts +0 -2
  168. package/dist/tests/replay.test.d.ts.map +0 -1
  169. package/dist/tests/replay.test.js +0 -222
  170. package/dist/tests/replay.test.js.map +0 -1
  171. package/dist/tests/runtime.test.d.ts +0 -7
  172. package/dist/tests/runtime.test.d.ts.map +0 -1
  173. package/dist/tests/runtime.test.js +0 -337
  174. package/dist/tests/runtime.test.js.map +0 -1
  175. package/dist/tests/verification-gate.test.d.ts +0 -2
  176. package/dist/tests/verification-gate.test.d.ts.map +0 -1
  177. package/dist/tests/verification-gate.test.js +0 -407
  178. package/dist/tests/verification-gate.test.js.map +0 -1
  179. package/skills/prompt-techniques/SKILL.md +0 -52
  180. package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
  181. package/skills/prompt-techniques/references/few-shot.md +0 -174
  182. package/skills/prompt-techniques/references/least-to-most.md +0 -182
  183. package/skills/prompt-techniques/references/step-back.md +0 -160
  184. package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
  185. package/skills/prompt-techniques/references/zero-shot.md +0 -97
@@ -0,0 +1,419 @@
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 — wraps existing
10
+ * captureGitFileState() logic.
11
+ */
12
+ import { createHash } from "node:crypto";
13
+ import { readFileSync, realpathSync, statSync } from "node:fs";
14
+ import { spawn } from "node:child_process";
15
+ import { isAbsolute, relative, resolve, sep } from "node:path";
16
+ import { captureGitFileState } from "./verification-gate.js";
17
+ import { getPolicy } from "./policy.js";
18
+ import { logEvent, startSpan } from "./observability.js";
19
+ import { policyMetrics } from "./policy-metrics.js";
20
+ const providerFactories = new Map();
21
+ /** Register a provider factory used by policy-driven collectors. */
22
+ export function registerEvidenceProvider(name, factory) {
23
+ if (!name.trim())
24
+ throw new Error("Evidence provider name must not be empty");
25
+ providerFactories.set(name, factory);
26
+ }
27
+ export function unregisterEvidenceProvider(name) {
28
+ if (name === "git")
29
+ return false;
30
+ return providerFactories.delete(name);
31
+ }
32
+ // ── EvidenceCollector ──────────────────────────────────────────────────────
33
+ /** Collects evidence from all configured providers.
34
+ *
35
+ * Usage:
36
+ * const collector = new EvidenceCollector([new GitEvidenceProvider()]);
37
+ * const snapshots = collector.collect();
38
+ * // snapshots = [{ provider: "git", files: [...], data: {...} }]
39
+ */
40
+ export class EvidenceCollector {
41
+ providers;
42
+ constructor(providers) {
43
+ this.providers = providers;
44
+ }
45
+ /** Build the collector described by loop_policy.json. Unknown provider
46
+ * names are ignored so newer configs remain backward compatible. */
47
+ static fromProviderNames(providerNames) {
48
+ const providers = [];
49
+ for (const name of providerNames) {
50
+ const factory = providerFactories.get(name);
51
+ if (factory)
52
+ providers.push(factory());
53
+ }
54
+ return new EvidenceCollector(providers);
55
+ }
56
+ /** Build built-ins and explicitly configured command providers. */
57
+ static fromPolicy() {
58
+ const policy = getPolicy().evidence;
59
+ const providerNames = Array.isArray(policy.providers)
60
+ ? policy.providers.filter((name) => typeof name === "string")
61
+ : [];
62
+ const providers = EvidenceCollector.fromProviderNames(providerNames).providers;
63
+ const commands = Array.isArray(policy.commands) ? policy.commands : [];
64
+ for (const command of commands) {
65
+ if (command?.enabled)
66
+ providers.push(new CommandEvidenceProvider(command));
67
+ }
68
+ return new EvidenceCollector(providers);
69
+ }
70
+ /** Run all providers and return non-null snapshots.
71
+ * Providers that return null (e.g. git not available) are silently
72
+ * skipped — the caller handles missing evidence. */
73
+ collect(options = {}) {
74
+ const results = [];
75
+ for (const p of this.providers) {
76
+ const startedAt = Date.now();
77
+ const controller = new AbortController();
78
+ try {
79
+ const snapshot = p.capture({
80
+ signal: controller.signal,
81
+ timeoutMs: options.timeoutMs ?? getPolicy().evidence.timeout_ms,
82
+ loopId: options.loopId,
83
+ phase: options.phase ?? "after",
84
+ });
85
+ if (snapshot && typeof snapshot.then === "function") {
86
+ // Async providers are not awaitable in the synchronous collect()
87
+ // path. Log and skip — callers who need async providers must use
88
+ // collectAsync() instead. Session recovery via reconstructSession()
89
+ // uses collect() as a fallback; the unpause() path replaces it
90
+ // with async evidence after reconstruction.
91
+ void snapshot.catch(() => undefined);
92
+ policyMetrics.recordEvidence(p.name, "failure", Date.now() - startedAt, options.loopId);
93
+ logEvent("evidence_async_provider_in_sync_collect", { provider: p.name });
94
+ continue;
95
+ }
96
+ const syncSnapshot = snapshot;
97
+ policyMetrics.recordEvidence(p.name, syncSnapshot ? "available" : "unavailable", Date.now() - startedAt, options.loopId);
98
+ if (syncSnapshot)
99
+ results.push(syncSnapshot);
100
+ }
101
+ catch (error) {
102
+ policyMetrics.recordEvidence(p.name, "failure", Date.now() - startedAt, options.loopId);
103
+ logEvent("evidence_provider_error", { provider: p.name, error: String(error) });
104
+ }
105
+ }
106
+ return results;
107
+ }
108
+ /** Capture all providers concurrently with per-provider timeout isolation. */
109
+ async collectAsync(options = {}) {
110
+ const timeoutMs = options.timeoutMs ?? getPolicy().evidence.timeout_ms;
111
+ const captures = this.providers.map(async (provider) => {
112
+ const span = startSpan("evidence.capture", {
113
+ provider: provider.name,
114
+ loopId: options.loopId,
115
+ timeoutMs,
116
+ });
117
+ const startedAt = Date.now();
118
+ const controller = new AbortController();
119
+ let timer;
120
+ let timedOut = false;
121
+ try {
122
+ const capture = Promise.resolve(provider.capture({
123
+ signal: controller.signal,
124
+ timeoutMs,
125
+ loopId: options.loopId,
126
+ phase: options.phase ?? "after",
127
+ }));
128
+ const snapshot = timeoutMs > 0
129
+ ? await Promise.race([
130
+ capture,
131
+ new Promise((resolve) => {
132
+ timer = setTimeout(() => {
133
+ timedOut = true;
134
+ controller.abort(new Error(`Evidence provider timed out after ${timeoutMs}ms`));
135
+ resolve(null);
136
+ }, timeoutMs);
137
+ }),
138
+ ])
139
+ : await capture;
140
+ const outcome = timedOut
141
+ ? "timeout"
142
+ : snapshot ? "available" : "unavailable";
143
+ policyMetrics.recordEvidence(provider.name, outcome, Date.now() - startedAt, options.loopId);
144
+ span.end(timedOut ? "cancelled" : "ok", { outcome });
145
+ if (timedOut) {
146
+ logEvent("evidence_provider_timeout", { provider: provider.name, timeoutMs });
147
+ }
148
+ return timedOut ? null : snapshot;
149
+ }
150
+ catch (error) {
151
+ policyMetrics.recordEvidence(provider.name, "failure", Date.now() - startedAt, options.loopId);
152
+ span.end("error", { error: String(error) });
153
+ logEvent("evidence_provider_error", { provider: provider.name, error: String(error) });
154
+ return null;
155
+ }
156
+ finally {
157
+ if (timer)
158
+ clearTimeout(timer);
159
+ }
160
+ });
161
+ return (await Promise.all(captures)).filter((snapshot) => snapshot !== null);
162
+ }
163
+ }
164
+ function commandCwd(configured) {
165
+ const workspace = realpathSync(process.cwd());
166
+ const lexical = resolve(workspace, configured ?? ".");
167
+ const lexicalRelative = relative(workspace, lexical);
168
+ if (lexicalRelative === ".." || lexicalRelative.startsWith(`..${sep}`) ||
169
+ isAbsolute(lexicalRelative)) {
170
+ throw new Error("command cwd must stay within the workspace");
171
+ }
172
+ const actual = realpathSync(lexical);
173
+ const actualRelative = relative(workspace, actual);
174
+ if (actualRelative === ".." || actualRelative.startsWith(`..${sep}`) ||
175
+ isAbsolute(actualRelative) || !statSync(actual).isDirectory()) {
176
+ throw new Error("command cwd resolves outside the workspace");
177
+ }
178
+ return actual;
179
+ }
180
+ /** Explicit, shell-free verification command. Disabled unless configured. */
181
+ export class CommandEvidenceProvider {
182
+ name;
183
+ config;
184
+ constructor(config) {
185
+ const name = typeof config.name === "string" && config.name.trim()
186
+ ? config.name.trim()
187
+ : "invalid-config";
188
+ const executable = typeof config.executable === "string"
189
+ ? config.executable.trim()
190
+ : "";
191
+ const args = Array.isArray(config.args)
192
+ ? config.args.filter((arg) => typeof arg === "string")
193
+ : [];
194
+ const successExitCodes = Array.isArray(config.success_exit_codes)
195
+ ? config.success_exit_codes.filter((code) => Number.isInteger(code))
196
+ : [0];
197
+ this.config = {
198
+ ...config,
199
+ name,
200
+ executable,
201
+ args,
202
+ phase: config.phase === "both" ? "both" : "after",
203
+ required: config.required === true,
204
+ timeout_ms: Number.isFinite(config.timeout_ms) ? config.timeout_ms : 120_000,
205
+ max_output_chars: Number.isFinite(config.max_output_chars)
206
+ ? config.max_output_chars
207
+ : 20_000,
208
+ success_exit_codes: successExitCodes,
209
+ };
210
+ this.name = `command:${name}`;
211
+ }
212
+ capture(context) {
213
+ const phase = context?.phase ?? "after";
214
+ if (phase === "before" && this.config.phase === "after") {
215
+ return Promise.resolve(null);
216
+ }
217
+ const startedAt = Date.now();
218
+ const cap = Math.max(0, Math.min(20_000, this.config.max_output_chars));
219
+ const timeoutMs = Math.max(1, Math.min(this.config.timeout_ms, context?.timeoutMs || this.config.timeout_ms));
220
+ let cwd;
221
+ if (!this.config.executable) {
222
+ return Promise.resolve(this.snapshot(phase, "missing", null, null, "", "Command executable is empty", false, 0));
223
+ }
224
+ try {
225
+ cwd = commandCwd(this.config.cwd);
226
+ }
227
+ catch (error) {
228
+ return Promise.resolve(this.snapshot(phase, "invalid_cwd", null, null, "", String(error), false, Date.now() - startedAt));
229
+ }
230
+ return new Promise((resolveCapture) => {
231
+ let stdout = "";
232
+ let stderr = "";
233
+ let truncated = false;
234
+ let retained = 0;
235
+ let settled = false;
236
+ const append = (current, chunk) => {
237
+ const text = String(chunk);
238
+ if (retained >= cap) {
239
+ if (text.length > 0)
240
+ truncated = true;
241
+ return current;
242
+ }
243
+ const remaining = cap - retained;
244
+ if (text.length > remaining)
245
+ truncated = true;
246
+ const accepted = text.slice(0, remaining);
247
+ retained += accepted.length;
248
+ return current + accepted;
249
+ };
250
+ const child = spawn(this.config.executable, this.config.args, {
251
+ cwd,
252
+ shell: false,
253
+ windowsHide: true,
254
+ stdio: ["ignore", "pipe", "pipe"],
255
+ });
256
+ let timer;
257
+ const finish = (status, exitCode, signal) => {
258
+ if (settled)
259
+ return;
260
+ settled = true;
261
+ if (timer)
262
+ clearTimeout(timer);
263
+ context?.signal.removeEventListener("abort", abort);
264
+ resolveCapture(this.snapshot(phase, status, exitCode, signal, stdout, stderr, truncated, Date.now() - startedAt));
265
+ };
266
+ const abort = () => {
267
+ child.kill();
268
+ finish("aborted", null, null);
269
+ };
270
+ child.stdout.on("data", (chunk) => { stdout = append(stdout, chunk); });
271
+ child.stderr.on("data", (chunk) => { stderr = append(stderr, chunk); });
272
+ child.once("error", (error) => {
273
+ stderr = append(stderr, error.message);
274
+ finish(error.code === "ENOENT" ? "missing" : "failed", null, null);
275
+ });
276
+ child.once("close", (code, signal) => {
277
+ const passed = code !== null && this.config.success_exit_codes.includes(code);
278
+ finish(passed ? "passed" : "failed", code, signal);
279
+ });
280
+ timer = setTimeout(() => {
281
+ child.kill();
282
+ finish("timeout", null, null);
283
+ }, timeoutMs);
284
+ timer.unref?.();
285
+ if (context?.signal.aborted)
286
+ abort();
287
+ else
288
+ context?.signal.addEventListener("abort", abort, { once: true });
289
+ });
290
+ }
291
+ snapshot(phase, status, exitCode, signal, stdout, stderr, truncated, durationMs) {
292
+ return {
293
+ provider: this.name,
294
+ timestamp: Date.now(),
295
+ files: [],
296
+ data: {
297
+ kind: "command",
298
+ commandName: this.config.name,
299
+ required: this.config.required,
300
+ phase,
301
+ status,
302
+ exitCode,
303
+ signal,
304
+ durationMs,
305
+ stdout,
306
+ stderr,
307
+ truncated,
308
+ },
309
+ };
310
+ }
311
+ }
312
+ // ── Built-in: GitEvidenceProvider ──────────────────────────────────────────
313
+ /** Captures git file state (tracked, staged, untracked) via existing
314
+ * captureGitFileState() logic. */
315
+ export class GitEvidenceProvider {
316
+ name = "git";
317
+ capture() {
318
+ const state = captureGitFileState();
319
+ if (!state)
320
+ return null;
321
+ const files = [...new Set([
322
+ ...state.tracked,
323
+ ...state.staged,
324
+ ...state.untracked,
325
+ ])].sort();
326
+ const fingerprints = {};
327
+ for (const file of files) {
328
+ try {
329
+ const stat = statSync(file);
330
+ const hash = createHash("sha256").update(readFileSync(file)).digest("hex");
331
+ fingerprints[file] = `${stat.mode}:${hash}`;
332
+ }
333
+ catch {
334
+ // Deleted files are evidence too. A stable sentinel lets the diff
335
+ // distinguish deleted/restored transitions across a round.
336
+ fingerprints[file] = "missing";
337
+ }
338
+ }
339
+ return {
340
+ provider: "git",
341
+ timestamp: Date.now(),
342
+ files,
343
+ data: {
344
+ tracked: state.tracked,
345
+ staged: state.staged,
346
+ untracked: state.untracked,
347
+ fingerprints,
348
+ },
349
+ };
350
+ }
351
+ }
352
+ registerEvidenceProvider("git", () => new GitEvidenceProvider());
353
+ // ── Utility ────────────────────────────────────────────────────────────────
354
+ /** Extract merged file list from evidence snapshots for backward compat
355
+ * with runtimeFilesChanged (string[] | null).
356
+ *
357
+ * Looks for the "git" provider first; falls back to merging all
358
+ * providers' files arrays (deduplicated). */
359
+ export function extractFilesFromSnapshots(snapshots) {
360
+ if (snapshots.length === 0)
361
+ return null;
362
+ // Prefer the git provider for backward compat
363
+ const gitSnapshot = snapshots.find((s) => s.provider === "git");
364
+ if (gitSnapshot)
365
+ return [...gitSnapshot.files].sort();
366
+ // Fallback: merge all providers
367
+ const allFiles = new Set();
368
+ for (const s of snapshots) {
369
+ for (const f of s.files)
370
+ allFiles.add(f);
371
+ }
372
+ return [...allFiles].sort();
373
+ }
374
+ /** Compute a diff between two evidence collections (before → after).
375
+ * Returns files that appeared in the after-snapshot but not the before.
376
+ * Used by runtime.ts to compute runtimeFilesChanged. */
377
+ function snapshotFingerprints(snapshot) {
378
+ const value = snapshot.data.fingerprints;
379
+ if (!value || typeof value !== "object" || Array.isArray(value))
380
+ return null;
381
+ const fingerprints = {};
382
+ for (const [file, fingerprint] of Object.entries(value)) {
383
+ if (typeof fingerprint === "string")
384
+ fingerprints[file] = fingerprint;
385
+ }
386
+ return fingerprints;
387
+ }
388
+ function diffProviderSnapshot(before, after) {
389
+ const beforeSet = new Set(before.files);
390
+ const afterSet = new Set(after.files);
391
+ const beforeFingerprints = snapshotFingerprints(before);
392
+ const afterFingerprints = snapshotFingerprints(after);
393
+ const candidates = new Set([...before.files, ...after.files]);
394
+ return [...candidates].filter((file) => {
395
+ if (beforeSet.has(file) !== afterSet.has(file))
396
+ return true;
397
+ if (!beforeFingerprints || !afterFingerprints)
398
+ return false;
399
+ return beforeFingerprints[file] !== afterFingerprints[file];
400
+ }).sort();
401
+ }
402
+ /** Return provider snapshots narrowed to evidence produced during this round.
403
+ * The full provider payload remains available in data, while files contains
404
+ * only added/removed/content-changed paths. */
405
+ export function diffSnapshotCollections(before, after) {
406
+ return after.map((snapshot) => {
407
+ const baseline = before.find((item) => item.provider === snapshot.provider);
408
+ if (!baseline)
409
+ return snapshot;
410
+ return {
411
+ ...snapshot,
412
+ files: diffProviderSnapshot(baseline, snapshot),
413
+ };
414
+ });
415
+ }
416
+ export function diffSnapshots(before, after) {
417
+ return extractFilesFromSnapshots(diffSnapshotCollections(before, after));
418
+ }
419
+ //# sourceMappingURL=evidence-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence-provider.js","sourceRoot":"","sources":["../src/evidence-provider.ts"],"names":[],"mappings":"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"}
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,14 +21,13 @@
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, RuntimePolicy, PromptPolicy, StateFilePolicy, EvidencePolicy, CommandEvidencePolicy, McpPolicy, } from "./policy.js";
28
+ export { FileLoopStore, 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";
@@ -38,5 +37,14 @@ export type { RoundContext, AgentExecutor, StopReason, RoundStartInfo, RoundComp
38
37
  export { McpServer } from "./mcp/server.js";
39
38
  export { SessionManager } from "./mcp/session.js";
40
39
  export type { McpSession, McpSessionSummary } from "./mcp/session.js";
41
- export { computeProjectHash, findGitRoot, detectClaudeMem, createMemoryProvider, createMemoryWriter, autoConfigureMemory, tryAutoConfigure, } from "./memory-bridge.js";
40
+ export { EvidenceCollector, GitEvidenceProvider, CommandEvidenceProvider, registerEvidenceProvider, unregisterEvidenceProvider, extractFilesFromSnapshots, diffSnapshots, diffSnapshotCollections, } from "./evidence-provider.js";
41
+ export type { ProviderSnapshot, EvidenceProvider, EvidenceCaptureContext, EvidenceCaptureResult, EvidenceCollectOptions, EvidenceProviderFactory, CommandEvidenceData, } from "./evidence-provider.js";
42
+ export { logEvent, startSpan, setTraceSink, getTraceSink, } from "./observability.js";
43
+ export type { LogEventData, TraceStatus, TraceRecord, TraceSink, TraceContext, TraceSpan, } from "./observability.js";
44
+ export { PolicyMetricsCollector, policyMetrics, getPolicyMetrics, resetPolicyMetrics, } from "./policy-metrics.js";
45
+ export type { PolicyMetricsSnapshot } from "./policy-metrics.js";
46
+ export { COGNITIVE_CHECKPOINT_SCHEMA_VERSION, createCognitiveCheckpoint, } from "./interop.js";
47
+ export type { CognitiveStateCheckpoint, CognitiveCheckpointSink, } from "./interop.js";
48
+ export { ROUND_TRANSACTION_SCHEMA_VERSION, RoundTransactionCoordinator, makeRoundId, prepareRoundTransaction, parseRoundTransactionSnapshot, } from "./round-transaction.js";
49
+ export type { RoundTransactionPhase, RoundTransactionSnapshot, RoundTransactionInput, RoundTransactionOutcome, } from "./round-transaction.js";
42
50
  //# 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EACL,IAAI,EACJ,WAAW,EACX,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,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,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,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,cAAc,EACd,qBAAqB,EACrB,SAAS,GACV,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,aAAa,EACb,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,SAAS,EACT,mBAAmB,EACnB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,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;AAEtE,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,aAAa,EACb,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,YAAY,EACZ,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EACL,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,gCAAgC,EAChC,2BAA2B,EAC3B,WAAW,EACX,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,wBAAwB,CAAC"}
package/dist/index.js 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
  *
@@ -22,14 +22,13 @@
22
22
  * server.start();
23
23
  */
24
24
  // Protocol types
25
- 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 { 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";
26
26
  // Policy
27
- export { getPolicy, loadPolicy, resetPolicy, DEFAULT_POLICY, resolveAllowedPhases, resolveInjectionPhase, buildAccumulatedMemoryContext, buildBaseMemoryWriteback, } from "./policy.js";
28
- export { FSBackend } from "./backends/fs.js";
29
- // Builder
30
- export { routeTechniqueAdaptive, TECHNIQUE_REFERENCE, SKILLS_DIR, } from "./builder.js";
27
+ export { getPolicy, loadPolicy, resetPolicy, DEFAULT_POLICY, writeStateFile, } from "./policy.js";
28
+ // Durable store
29
+ export { FileLoopStore, LOOP_STORE_SCHEMA_VERSION, } from "./loop-store.js";
31
30
  // Loop Compiler
32
- export { compileLoop, decideLevel, compileL2, alignTask, checkLoopHealth, computeAdvisories, computeGoalTextHash, deriveGoalId, getPreviousRound, buildSelfEvalBlock, buildRollingSummary, formatRollingSummaryForPrompt, filterConstraintsForSubTask, formatDelegationPrompt, buildDelegationSummary, } from "./loop-compiler.js";
31
+ export { compileLoop, decideLevel, alignTask, checkLoopHealth, computeGoalTextHash, deriveGoalId, getPreviousRound, buildSelfEvalBlock, buildRollingSummary, } from "./loop-compiler.js";
33
32
  // Replay
34
33
  export { ReplayBackend } from "./replay.js";
35
34
  // Engine
@@ -40,6 +39,13 @@ export { RuntimeStatus } from "./protocol.js";
40
39
  // MCP (v1.3)
41
40
  export { McpServer } from "./mcp/server.js";
42
41
  export { SessionManager } from "./mcp/session.js";
43
- // Memory Bridge (v1.8)
44
- export { computeProjectHash, findGitRoot, detectClaudeMem, createMemoryProvider, createMemoryWriter, autoConfigureMemory, tryAutoConfigure, } from "./memory-bridge.js";
42
+ // EvidenceProvider (v1.18)
43
+ export { EvidenceCollector, GitEvidenceProvider, CommandEvidenceProvider, registerEvidenceProvider, unregisterEvidenceProvider, extractFilesFromSnapshots, diffSnapshots, diffSnapshotCollections, } from "./evidence-provider.js";
44
+ // Structured tracing and policy effectiveness metrics (v1.20)
45
+ export { logEvent, startSpan, setTraceSink, getTraceSink, } from "./observability.js";
46
+ export { PolicyMetricsCollector, policyMetrics, getPolicyMetrics, resetPolicyMetrics, } from "./policy-metrics.js";
47
+ // Neutral ecosystem checkpoint bridge (v1.20)
48
+ export { COGNITIVE_CHECKPOINT_SCHEMA_VERSION, createCognitiveCheckpoint, } from "./interop.js";
49
+ // Unified round transaction (v1.19)
50
+ export { ROUND_TRANSACTION_SCHEMA_VERSION, RoundTransactionCoordinator, makeRoundId, prepareRoundTransaction, parseRoundTransactionSnapshot, } from "./round-transaction.js";
45
51
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,iBAAiB;AACjB,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;AAqBvB,SAAS;AACT,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,6BAA6B,EAC7B,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAgBrB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,UAAU;AACV,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB,gBAAgB;AAChB,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;AAE5B,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,SAAS;AACT,OAAO,EACL,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAIrB,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAc9C,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,uBAAuB;AACvB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,iBAAiB;AACjB,OAAO,EACL,IAAI,EACJ,WAAW,EACX,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,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,eAAe,CAAC;AA0BvB,SAAS;AACT,OAAO,EACL,SAAS,EACT,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,GACf,MAAM,aAAa,CAAC;AAgBrB,gBAAgB;AAChB,OAAO,EACL,aAAa,EACb,yBAAyB,GAC1B,MAAM,iBAAiB,CAAC;AAQzB,gBAAgB;AAChB,OAAO,EACL,WAAW,EACX,WAAW,EACX,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC;AAE5B,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,SAAS;AACT,OAAO,EACL,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAIrB,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAc9C,aAAa;AACb,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,2BAA2B;AAC3B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,yBAAyB,EACzB,aAAa,EACb,uBAAuB,GACxB,MAAM,wBAAwB,CAAC;AAWhC,8DAA8D;AAC9D,OAAO,EACL,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAS5B,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,8CAA8C;AAC9C,OAAO,EACL,mCAAmC,EACnC,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AAMtB,oCAAoC;AACpC,OAAO,EACL,gCAAgC,EAChC,2BAA2B,EAC3B,WAAW,EACX,uBAAuB,EACvB,6BAA6B,GAC9B,MAAM,wBAAwB,CAAC"}
package/dist/init.d.ts ADDED
@@ -0,0 +1,15 @@
1
+ /** Client-specific skill onboarding. */
2
+ export type InitClient = "claude" | "codex" | "generic";
3
+ export interface InitOptions {
4
+ client: InitClient;
5
+ force?: boolean;
6
+ target?: string;
7
+ }
8
+ export interface InitResult {
9
+ client: InitClient;
10
+ skillPath: string;
11
+ installed: boolean;
12
+ registration: string | Record<string, unknown>;
13
+ }
14
+ export declare function initializeClient(options: InitOptions): InitResult;
15
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAOxC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAExD,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,UAAU,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AA8BD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAgBjE"}
package/dist/init.js ADDED
@@ -0,0 +1,49 @@
1
+ /** Client-specific skill onboarding. */
2
+ import { copyFileSync, existsSync, mkdirSync } from "node:fs";
3
+ import { homedir } from "node:os";
4
+ import { dirname, join, resolve } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ const packageRoot = join(dirname(fileURLToPath(import.meta.url)), "..");
7
+ const skillSource = join(packageRoot, "skills", "perception", "SKILL.md");
8
+ function destination(options) {
9
+ if (options.target)
10
+ return resolve(options.target, "perception", "SKILL.md");
11
+ if (options.client === "claude") {
12
+ return join(homedir(), ".claude", "skills", "perception", "SKILL.md");
13
+ }
14
+ if (options.client === "codex") {
15
+ return join(homedir(), ".codex", "skills", "perception", "SKILL.md");
16
+ }
17
+ return resolve(".loopforge", "skills", "perception", "SKILL.md");
18
+ }
19
+ function registration(client) {
20
+ if (client === "claude") {
21
+ return "claude mcp add loopforge -- npx loopforge mcp";
22
+ }
23
+ if (client === "codex") {
24
+ return "codex mcp add loopforge -- npx loopforge mcp";
25
+ }
26
+ return {
27
+ mcpServers: {
28
+ loopforge: { command: "npx", args: ["loopforge", "mcp"] },
29
+ },
30
+ };
31
+ }
32
+ export function initializeClient(options) {
33
+ if (!existsSync(skillSource)) {
34
+ throw new Error(`Packaged Perception skill not found: ${skillSource}`);
35
+ }
36
+ const skillPath = destination(options);
37
+ const installed = options.force === true || !existsSync(skillPath);
38
+ if (installed) {
39
+ mkdirSync(dirname(skillPath), { recursive: true });
40
+ copyFileSync(skillSource, skillPath);
41
+ }
42
+ return {
43
+ client: options.client,
44
+ skillPath,
45
+ installed,
46
+ registration: registration(options.client),
47
+ };
48
+ }
49
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAiBzC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACxE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AAE1E,SAAS,WAAW,CAAC,OAAoB;IACvC,IAAI,OAAO,CAAC,MAAM;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC7E,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,YAAY,CAAC,MAAkB;IACtC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,+CAA+C,CAAC;IACzD,CAAC;IACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;QACvB,OAAO,8CAA8C,CAAC;IACxD,CAAC;IACD,OAAO;QACL,UAAU,EAAE;YACV,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;SAC1D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACnD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,wCAAwC,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACnE,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,YAAY,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACvC,CAAC;IACD,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS;QACT,SAAS;QACT,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC;KAC3C,CAAC;AACJ,CAAC"}