loopforge 1.15.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/README.md +172 -95
  2. package/dist/backends/interface.d.ts +5 -10
  3. package/dist/backends/interface.d.ts.map +1 -1
  4. package/dist/backends/interface.js +3 -4
  5. package/dist/backends/interface.js.map +1 -1
  6. package/dist/canonical-state.d.ts +53 -0
  7. package/dist/canonical-state.d.ts.map +1 -0
  8. package/dist/canonical-state.js +161 -0
  9. package/dist/canonical-state.js.map +1 -0
  10. package/dist/cli.d.ts +4 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +227 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/enforcement-gate.d.ts.map +1 -1
  15. package/dist/enforcement-gate.js +28 -10
  16. package/dist/enforcement-gate.js.map +1 -1
  17. package/dist/engine.d.ts +9 -28
  18. package/dist/engine.d.ts.map +1 -1
  19. package/dist/engine.js +135 -361
  20. package/dist/engine.js.map +1 -1
  21. package/dist/evidence-provider.d.ts +146 -0
  22. package/dist/evidence-provider.d.ts.map +1 -0
  23. package/dist/evidence-provider.js +512 -0
  24. package/dist/evidence-provider.js.map +1 -0
  25. package/dist/index.d.ts +19 -13
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +15 -12
  28. package/dist/index.js.map +1 -1
  29. package/dist/init.d.ts +15 -0
  30. package/dist/init.d.ts.map +1 -0
  31. package/dist/init.js +49 -0
  32. package/dist/init.js.map +1 -0
  33. package/dist/interop.d.ts +35 -0
  34. package/dist/interop.d.ts.map +1 -0
  35. package/dist/interop.js +34 -0
  36. package/dist/interop.js.map +1 -0
  37. package/dist/loop-compiler.d.ts +14 -64
  38. package/dist/loop-compiler.d.ts.map +1 -1
  39. package/dist/loop-compiler.js +305 -2206
  40. package/dist/loop-compiler.js.map +1 -1
  41. package/dist/loop-extras-parser.d.ts +82 -0
  42. package/dist/loop-extras-parser.d.ts.map +1 -0
  43. package/dist/loop-extras-parser.js +217 -0
  44. package/dist/loop-extras-parser.js.map +1 -0
  45. package/dist/loop-store.d.ts +104 -0
  46. package/dist/loop-store.d.ts.map +1 -0
  47. package/dist/loop-store.js +421 -0
  48. package/dist/loop-store.js.map +1 -0
  49. package/dist/mcp/server.d.ts +9 -6
  50. package/dist/mcp/server.d.ts.map +1 -1
  51. package/dist/mcp/server.js +109 -73
  52. package/dist/mcp/server.js.map +1 -1
  53. package/dist/mcp/session.d.ts +102 -21
  54. package/dist/mcp/session.d.ts.map +1 -1
  55. package/dist/mcp/session.js +795 -400
  56. package/dist/mcp/session.js.map +1 -1
  57. package/dist/mcp/tools.d.ts +18 -268
  58. package/dist/mcp/tools.d.ts.map +1 -1
  59. package/dist/mcp/tools.js +226 -12
  60. package/dist/mcp/tools.js.map +1 -1
  61. package/dist/observability.d.ts +36 -16
  62. package/dist/observability.d.ts.map +1 -1
  63. package/dist/observability.js +82 -23
  64. package/dist/observability.js.map +1 -1
  65. package/dist/policy-metrics.d.ts +46 -0
  66. package/dist/policy-metrics.d.ts.map +1 -0
  67. package/dist/policy-metrics.js +146 -0
  68. package/dist/policy-metrics.js.map +1 -0
  69. package/dist/policy.d.ts +52 -147
  70. package/dist/policy.d.ts.map +1 -1
  71. package/dist/policy.js +118 -191
  72. package/dist/policy.js.map +1 -1
  73. package/dist/prompt-assembler.d.ts +30 -0
  74. package/dist/prompt-assembler.d.ts.map +1 -0
  75. package/dist/prompt-assembler.js +278 -0
  76. package/dist/prompt-assembler.js.map +1 -0
  77. package/dist/prompt-policy.d.ts +29 -0
  78. package/dist/prompt-policy.d.ts.map +1 -0
  79. package/dist/prompt-policy.js +51 -0
  80. package/dist/prompt-policy.js.map +1 -0
  81. package/dist/protocol.d.ts +75 -152
  82. package/dist/protocol.d.ts.map +1 -1
  83. package/dist/protocol.js +11 -53
  84. package/dist/protocol.js.map +1 -1
  85. package/dist/replay.d.ts.map +1 -1
  86. package/dist/replay.js +1 -27
  87. package/dist/replay.js.map +1 -1
  88. package/dist/round-coordinator.d.ts +90 -0
  89. package/dist/round-coordinator.d.ts.map +1 -0
  90. package/dist/round-coordinator.js +186 -0
  91. package/dist/round-coordinator.js.map +1 -0
  92. package/dist/round-driver.d.ts +53 -0
  93. package/dist/round-driver.d.ts.map +1 -0
  94. package/dist/round-driver.js +101 -0
  95. package/dist/round-driver.js.map +1 -0
  96. package/dist/round-transaction.d.ts +70 -0
  97. package/dist/round-transaction.d.ts.map +1 -0
  98. package/dist/round-transaction.js +290 -0
  99. package/dist/round-transaction.js.map +1 -0
  100. package/dist/self-eval.d.ts +26 -0
  101. package/dist/self-eval.d.ts.map +1 -0
  102. package/dist/self-eval.js +154 -0
  103. package/dist/self-eval.js.map +1 -0
  104. package/dist/storage.d.ts +39 -0
  105. package/dist/storage.d.ts.map +1 -0
  106. package/dist/storage.js +193 -0
  107. package/dist/storage.js.map +1 -0
  108. package/dist/verification-gate.d.ts +31 -7
  109. package/dist/verification-gate.d.ts.map +1 -1
  110. package/dist/verification-gate.js +250 -7
  111. package/dist/verification-gate.js.map +1 -1
  112. package/loop_policy.json +19 -53
  113. package/package.json +13 -10
  114. package/skills/perception/SKILL.md +80 -267
  115. package/dist/backends/fs.d.ts +0 -36
  116. package/dist/backends/fs.d.ts.map +0 -1
  117. package/dist/backends/fs.js +0 -362
  118. package/dist/backends/fs.js.map +0 -1
  119. package/dist/builder.d.ts +0 -19
  120. package/dist/builder.d.ts.map +0 -1
  121. package/dist/builder.js +0 -215
  122. package/dist/builder.js.map +0 -1
  123. package/dist/mcp-server.d.ts +0 -12
  124. package/dist/mcp-server.d.ts.map +0 -1
  125. package/dist/mcp-server.js +0 -14
  126. package/dist/mcp-server.js.map +0 -1
  127. package/dist/memory-bridge.d.ts +0 -47
  128. package/dist/memory-bridge.d.ts.map +0 -1
  129. package/dist/memory-bridge.js +0 -290
  130. package/dist/memory-bridge.js.map +0 -1
  131. package/dist/runtime.d.ts +0 -80
  132. package/dist/runtime.d.ts.map +0 -1
  133. package/dist/runtime.js +0 -699
  134. package/dist/runtime.js.map +0 -1
  135. package/dist/tests/_helpers.d.ts +0 -25
  136. package/dist/tests/_helpers.d.ts.map +0 -1
  137. package/dist/tests/_helpers.js +0 -47
  138. package/dist/tests/_helpers.js.map +0 -1
  139. package/dist/tests/builder.test.d.ts +0 -2
  140. package/dist/tests/builder.test.d.ts.map +0 -1
  141. package/dist/tests/builder.test.js +0 -112
  142. package/dist/tests/builder.test.js.map +0 -1
  143. package/dist/tests/enforcement-gate.test.d.ts +0 -2
  144. package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
  145. package/dist/tests/enforcement-gate.test.js +0 -328
  146. package/dist/tests/enforcement-gate.test.js.map +0 -1
  147. package/dist/tests/engine.test.d.ts +0 -2
  148. package/dist/tests/engine.test.d.ts.map +0 -1
  149. package/dist/tests/engine.test.js +0 -375
  150. package/dist/tests/engine.test.js.map +0 -1
  151. package/dist/tests/generate-schema.test.d.ts +0 -8
  152. package/dist/tests/generate-schema.test.d.ts.map +0 -1
  153. package/dist/tests/generate-schema.test.js +0 -199
  154. package/dist/tests/generate-schema.test.js.map +0 -1
  155. package/dist/tests/loop-compiler.test.d.ts +0 -2
  156. package/dist/tests/loop-compiler.test.d.ts.map +0 -1
  157. package/dist/tests/loop-compiler.test.js +0 -1059
  158. package/dist/tests/loop-compiler.test.js.map +0 -1
  159. package/dist/tests/mcp.test.d.ts +0 -7
  160. package/dist/tests/mcp.test.d.ts.map +0 -1
  161. package/dist/tests/mcp.test.js +0 -505
  162. package/dist/tests/mcp.test.js.map +0 -1
  163. package/dist/tests/memory-bridge.test.d.ts +0 -8
  164. package/dist/tests/memory-bridge.test.d.ts.map +0 -1
  165. package/dist/tests/memory-bridge.test.js +0 -383
  166. package/dist/tests/memory-bridge.test.js.map +0 -1
  167. package/dist/tests/policy.test.d.ts +0 -2
  168. package/dist/tests/policy.test.d.ts.map +0 -1
  169. package/dist/tests/policy.test.js +0 -49
  170. package/dist/tests/policy.test.js.map +0 -1
  171. package/dist/tests/protocol.test.d.ts +0 -2
  172. package/dist/tests/protocol.test.d.ts.map +0 -1
  173. package/dist/tests/protocol.test.js +0 -73
  174. package/dist/tests/protocol.test.js.map +0 -1
  175. package/dist/tests/replay.test.d.ts +0 -2
  176. package/dist/tests/replay.test.d.ts.map +0 -1
  177. package/dist/tests/replay.test.js +0 -222
  178. package/dist/tests/replay.test.js.map +0 -1
  179. package/dist/tests/runtime.test.d.ts +0 -7
  180. package/dist/tests/runtime.test.d.ts.map +0 -1
  181. package/dist/tests/runtime.test.js +0 -337
  182. package/dist/tests/runtime.test.js.map +0 -1
  183. package/dist/tests/verification-gate.test.d.ts +0 -2
  184. package/dist/tests/verification-gate.test.d.ts.map +0 -1
  185. package/dist/tests/verification-gate.test.js +0 -407
  186. package/dist/tests/verification-gate.test.js.map +0 -1
  187. package/skills/prompt-techniques/SKILL.md +0 -52
  188. package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
  189. package/skills/prompt-techniques/references/few-shot.md +0 -174
  190. package/skills/prompt-techniques/references/least-to-most.md +0 -182
  191. package/skills/prompt-techniques/references/step-back.md +0 -160
  192. package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
  193. package/skills/prompt-techniques/references/zero-shot.md +0 -97
@@ -1,362 +0,0 @@
1
- /** FSBackend — filesystem implementation of VaultBackend.
2
- *
3
- * Wraps Node.js fs for JSON vault read/write and Markdown lineage I/O.
4
- * All file I/O is contained in this single module — engine.ts never
5
- * touches the filesystem directly.
6
- */
7
- import { readFileSync, writeFileSync, mkdirSync, readdirSync, existsSync, rmSync, } from "node:fs";
8
- import { resolve, dirname } from "node:path";
9
- import { homedir } from "node:os";
10
- // ═══════════════════════════════════════════════════════════════════════════
11
- // YAML frontmatter helpers (lightweight, no dependency)
12
- // ═══════════════════════════════════════════════════════════════════════════
13
- const FRONTMATTER_DELIM = "---";
14
- function escapeYamlString(value) {
15
- if (/[":{}[\],&\*\#\?\-<>=!%@`]/.test(value) || value.includes("\n")) {
16
- return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
17
- }
18
- return value;
19
- }
20
- function buildYamlFrontmatter(metadata) {
21
- const lines = [FRONTMATTER_DELIM];
22
- for (const [key, value] of Object.entries(metadata)) {
23
- if (value === null || value === undefined)
24
- continue;
25
- if (Array.isArray(value)) {
26
- if (value.length === 0) {
27
- lines.push(`${key}: []`);
28
- }
29
- else {
30
- lines.push(`${key}:`);
31
- for (const item of value) {
32
- lines.push(` - ${escapeYamlString(String(item))}`);
33
- }
34
- }
35
- }
36
- else if (typeof value === "object") {
37
- lines.push(`${key}:`);
38
- for (const [subKey, subValue] of Object.entries(value)) {
39
- if (subValue !== null && subValue !== undefined) {
40
- if (Array.isArray(subValue)) {
41
- lines.push(` ${subKey}:`);
42
- for (const item of subValue) {
43
- lines.push(` - ${escapeYamlString(String(item))}`);
44
- }
45
- }
46
- else {
47
- lines.push(` ${subKey}: ${escapeYamlString(String(subValue))}`);
48
- }
49
- }
50
- }
51
- }
52
- else if (typeof value === "boolean") {
53
- lines.push(`${key}: ${value}`);
54
- }
55
- else if (typeof value === "number") {
56
- lines.push(`${key}: ${value}`);
57
- }
58
- else {
59
- lines.push(`${key}: ${escapeYamlString(String(value))}`);
60
- }
61
- }
62
- lines.push(FRONTMATTER_DELIM);
63
- return lines.join("\n") + "\n";
64
- }
65
- function parseYamlFrontmatter(text) {
66
- const metadata = {};
67
- let body = text;
68
- if (!text.startsWith(FRONTMATTER_DELIM)) {
69
- return { metadata, body };
70
- }
71
- const endIdx = text.indexOf(FRONTMATTER_DELIM, 3);
72
- if (endIdx === -1) {
73
- return { metadata, body };
74
- }
75
- const fmBlock = text.slice(3, endIdx).trim();
76
- body = text.slice(endIdx + 3).trim();
77
- // Simple YAML key: value parser (covers our subset)
78
- let currentKey = "";
79
- for (const line of fmBlock.split("\n")) {
80
- const trimmed = line.trim();
81
- if (!trimmed)
82
- continue;
83
- // List item
84
- if (trimmed.startsWith("- ")) {
85
- const item = trimmed.slice(2).trim().replace(/^"(.*)"$/, "$1");
86
- if (currentKey && metadata[currentKey]) {
87
- metadata[currentKey].push(item);
88
- }
89
- else if (currentKey) {
90
- metadata[currentKey] = [item];
91
- }
92
- continue;
93
- }
94
- // Nested key (indented)
95
- if (line.startsWith(" ") && !line.startsWith(" ")) {
96
- const nestedMatch = trimmed.match(/^([a-z_]+):\s*(.*)/i);
97
- if (nestedMatch && currentKey) {
98
- const nKey = nestedMatch[1];
99
- const nVal = nestedMatch[2].trim().replace(/^"(.*)"$/, "$1");
100
- if (!metadata[currentKey]) {
101
- metadata[currentKey] = {};
102
- }
103
- metadata[currentKey][nKey] =
104
- coerceYamlScalar(nVal);
105
- }
106
- continue;
107
- }
108
- // Top-level key: value
109
- const match = trimmed.match(/^([a-z_]+):\s*(.*)/i);
110
- if (match) {
111
- currentKey = match[1];
112
- const val = match[2].trim();
113
- if (val) {
114
- metadata[currentKey] = coerceYamlScalar(val.replace(/^"(.*)"$/, "$1"));
115
- }
116
- else {
117
- metadata[currentKey] = "";
118
- }
119
- }
120
- }
121
- return { metadata, body };
122
- }
123
- function coerceYamlScalar(value) {
124
- if (value === "true" || value === "True")
125
- return true;
126
- if (value === "false" || value === "False")
127
- return false;
128
- const num = Number(value);
129
- if (!Number.isNaN(num) && value.trim() !== "")
130
- return num;
131
- return value;
132
- }
133
- // ═══════════════════════════════════════════════════════════════════════════
134
- // Path helpers
135
- // ═══════════════════════════════════════════════════════════════════════════
136
- function lineageDirName(loopId) {
137
- return `loop-${loopId.replace(/:/g, "-")}`;
138
- }
139
- function resolveVaultPath(rawPath) {
140
- if (rawPath.startsWith("~")) {
141
- return resolve(homedir(), rawPath.slice(2));
142
- }
143
- return resolve(rawPath);
144
- }
145
- // ═══════════════════════════════════════════════════════════════════════════
146
- // Markdown lineage I/O (module-level functions)
147
- // ═══════════════════════════════════════════════════════════════════════════
148
- export function readLineageMd(loopId, roundNum, vaultPath) {
149
- const baseDir = vaultPath
150
- ? dirname(resolveVaultPath(vaultPath))
151
- : resolve(".promptcraft");
152
- const mdPath = resolve(baseDir, "prompts", lineageDirName(loopId), `r${roundNum}.md`);
153
- try {
154
- const raw = readFileSync(mdPath, "utf-8");
155
- const { metadata, body } = parseYamlFrontmatter(raw);
156
- return { full_prompt: body, metadata };
157
- }
158
- catch {
159
- return null;
160
- }
161
- }
162
- export function writeLineageMd(loopId, roundNum, content, metadata, vaultPath) {
163
- const baseDir = vaultPath
164
- ? dirname(resolveVaultPath(vaultPath))
165
- : resolve(".promptcraft");
166
- const dir = resolve(baseDir, "prompts", lineageDirName(loopId));
167
- const mdPath = resolve(dir, `r${roundNum}.md`);
168
- try {
169
- mkdirSync(dir, { recursive: true });
170
- const fm = buildYamlFrontmatter(metadata);
171
- writeFileSync(mdPath, fm + "\n" + content, "utf-8");
172
- return mdPath;
173
- }
174
- catch {
175
- return null;
176
- }
177
- }
178
- export function scanLineageMd(loopId, vaultPath) {
179
- const baseDir = vaultPath
180
- ? dirname(resolveVaultPath(vaultPath))
181
- : resolve(".promptcraft");
182
- const dir = resolve(baseDir, "prompts", lineageDirName(loopId));
183
- const entries = [];
184
- try {
185
- if (!existsSync(dir))
186
- return entries;
187
- const files = readdirSync(dir).filter((f) => f.startsWith("r") && f.endsWith(".md"));
188
- for (const file of files) {
189
- const roundMatch = file.match(/^r(\d+)\.md$/);
190
- if (!roundMatch)
191
- continue;
192
- const roundNum = parseInt(roundMatch[1], 10);
193
- const fullPath = resolve(dir, file);
194
- const raw = readFileSync(fullPath, "utf-8");
195
- const { metadata, body } = parseYamlFrontmatter(raw);
196
- entries.push({
197
- task_id: `loop:${loopId}:r${roundNum}`,
198
- full_prompt: body,
199
- technique_used: metadata.technique_used,
200
- success: metadata.success ?? true,
201
- loop_lineage: {
202
- loop_id: loopId,
203
- round: roundNum,
204
- goal_id: metadata.goal_id,
205
- goal_text_hash: metadata.goal_text_hash,
206
- recompile_level: metadata.recompile_level,
207
- constraints_active: metadata.constraints_active,
208
- task: metadata.task,
209
- technique_used: metadata.technique_used,
210
- success: metadata.success,
211
- output_summary: metadata.output_summary,
212
- constraint_violations: metadata.constraint_violations,
213
- },
214
- loop_id: loopId,
215
- task: metadata.task,
216
- output_summary: metadata.output_summary,
217
- constraint_violations: metadata
218
- .constraint_violations,
219
- });
220
- }
221
- }
222
- catch {
223
- // Directory doesn't exist or can't be read
224
- }
225
- return entries;
226
- }
227
- // ═══════════════════════════════════════════════════════════════════════════
228
- // FSBackend
229
- // ═══════════════════════════════════════════════════════════════════════════
230
- export class FSBackend {
231
- vaultPath;
232
- // v2: federation — global vault for cross-project constraints (not yet implemented)
233
- globalVaultPath;
234
- /** Re-entrant lock depth — >0 means this process holds the lock. */
235
- lockDepth = 0;
236
- constructor(vaultPath = ".promptcraft/prompt_vault.json", globalVaultPath = "~/.promptcraft/global_vault.json") {
237
- this.vaultPath = vaultPath;
238
- this.globalVaultPath = globalVaultPath;
239
- }
240
- /** File-system mutex via mkdir (atomic on POSIX and Windows).
241
- * Re-entrant: nested calls from the same process bypass the lock. */
242
- withLock(fn) {
243
- if (this.lockDepth > 0) {
244
- this.lockDepth++;
245
- try {
246
- return fn();
247
- }
248
- finally {
249
- this.lockDepth--;
250
- }
251
- }
252
- const lockPath = resolveVaultPath(this.vaultPath).replace(/\.json$/, ".lock");
253
- // Cross-process mutex via mkdir (atomic on POSIX and Windows).
254
- // Lock is held only for the duration of vault I/O (microseconds),
255
- // so contention is rare and brief. Spin-wait with short pauses
256
- // because Node.js has no synchronous sleep primitive.
257
- const lockTimeout = Date.now() + 500;
258
- for (;;) {
259
- try {
260
- mkdirSync(lockPath);
261
- break;
262
- }
263
- catch {
264
- if (Date.now() >= lockTimeout) {
265
- throw new Error("Vault lock timeout (500ms)");
266
- }
267
- }
268
- // Brief yield — 2ms per iteration, ~250 retries max
269
- const spinEnd = Date.now() + 2;
270
- while (Date.now() < spinEnd) { /* spin */ }
271
- }
272
- this.lockDepth = 1;
273
- try {
274
- return fn();
275
- }
276
- finally {
277
- this.lockDepth = 0;
278
- try {
279
- rmSync(lockPath, { recursive: true });
280
- }
281
- catch {
282
- /* orphaned lock — next process cleans up via timeout */
283
- }
284
- }
285
- }
286
- // ── JSON vault ────────────────────────────────────────────────────────
287
- readVault() {
288
- const resolved = resolveVaultPath(this.vaultPath);
289
- try {
290
- const raw = readFileSync(resolved, "utf-8");
291
- return JSON.parse(raw);
292
- }
293
- catch {
294
- return { entries: [] };
295
- }
296
- }
297
- writeVault(data) {
298
- this.withLock(() => {
299
- const resolved = resolveVaultPath(this.vaultPath);
300
- mkdirSync(dirname(resolved), { recursive: true });
301
- writeFileSync(resolved, JSON.stringify(data, null, 2), "utf-8");
302
- });
303
- }
304
- // ── Entry queries ─────────────────────────────────────────────────────
305
- queryEntries(opts) {
306
- const vault = this.readVault();
307
- const entries = vault.entries || [];
308
- return entries.filter((entry) => {
309
- const taskId = String(entry.task_id ?? "");
310
- // Feedback-only filter
311
- if (opts?.feedbackOnly && !taskId.endsWith(":feedback")) {
312
- return false;
313
- }
314
- // Exclude feedback entries when not feedbackOnly
315
- if (!opts?.feedbackOnly && taskId.endsWith(":feedback")) {
316
- return false;
317
- }
318
- // Prefix filter
319
- if (opts?.prefix && !taskId.startsWith(opts.prefix)) {
320
- return false;
321
- }
322
- // Pattern filter (simple substring match)
323
- if (opts?.taskIdPattern &&
324
- !taskId.includes(opts.taskIdPattern)) {
325
- return false;
326
- }
327
- return true;
328
- });
329
- }
330
- appendEntry(entry) {
331
- this.withLock(() => {
332
- const vault = this.readVault();
333
- const entries = vault.entries || [];
334
- entries.push(entry);
335
- vault.entries = entries;
336
- this.writeVault(vault);
337
- });
338
- }
339
- appendEntries(entries) {
340
- return this.withLock(() => {
341
- if (entries.length === 0)
342
- return 0;
343
- const vault = this.readVault();
344
- const existing = vault.entries || [];
345
- vault.entries = [...existing, ...entries];
346
- this.writeVault(vault);
347
- return entries.length;
348
- });
349
- }
350
- // ── Markdown lineage ──────────────────────────────────────────────────
351
- writeLineageMd(loopId, roundNum, content, metadata) {
352
- return writeLineageMd(loopId, roundNum, content, metadata, this.vaultPath);
353
- }
354
- readLineageMd(loopId, roundNum) {
355
- const result = readLineageMd(loopId, roundNum, this.vaultPath);
356
- return result?.full_prompt ?? null;
357
- }
358
- scanLineageMd(loopId) {
359
- return scanLineageMd(loopId, this.vaultPath);
360
- }
361
- }
362
- //# sourceMappingURL=fs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/backends/fs.ts"],"names":[],"mappings":"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"}
package/dist/builder.d.ts DELETED
@@ -1,19 +0,0 @@
1
- /** LoopForge Agent — Technique router.
2
- *
3
- * Pure-function technique selection via keyword heuristic with tier gating.
4
- * Tier 1 (zero-shot / few-shot / CoT): always available.
5
- * Tier 2 (step-back / least-to-most / ToT): checkpoint boundaries or
6
- * after consecutive failures only.
7
- */
8
- import { type Analysis } from "./protocol.js";
9
- /** Absolute path to the skills/ directory shipped with this package.
10
- * Derived from this module's location in dist/ → ../skills/. */
11
- export declare const SKILLS_DIR: string;
12
- export declare const TECHNIQUE_REFERENCE: Record<string, string>;
13
- export declare function routeTechnique(task: string): Analysis;
14
- export declare function routeTechniqueAdaptive(task: string,
15
- /** @deprecated v1.15 — escalation removed; no longer read. Kept for API compat. */
16
- _vaultContext?: Record<string, unknown> | null,
17
- /** @deprecated v1.15 — escalation removed; no longer read. Kept for API compat. */
18
- _loopId?: string, isCheckpoint?: boolean): Analysis;
19
- //# sourceMappingURL=builder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,eAAe,CAAC;AAWvB;iEACiE;AACjE,eAAO,MAAM,UAAU,QAItB,CAAC;AA+BF,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQtD,CAAC;AAgCF,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAmCrD;AA8ED,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,MAAM;AACZ,mFAAmF;AACnF,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAW;AACpD,mFAAmF;AACnF,OAAO,SAAK,EACZ,YAAY,UAAQ,GACnB,QAAQ,CAyCV"}
package/dist/builder.js DELETED
@@ -1,215 +0,0 @@
1
- /** LoopForge Agent — Technique router.
2
- *
3
- * Pure-function technique selection via keyword heuristic with tier gating.
4
- * Tier 1 (zero-shot / few-shot / CoT): always available.
5
- * Tier 2 (step-back / least-to-most / ToT): checkpoint boundaries or
6
- * after consecutive failures only.
7
- */
8
- import { makeAnalysis, Technique, } from "./protocol.js";
9
- import { fileURLToPath } from "node:url";
10
- import { dirname, join } from "node:path";
11
- // ═══════════════════════════════════════════════════════════════════════════
12
- // Skills directory — resolved at module load time from the package install
13
- // location. Absolute paths ensure the Agent can find skill files regardless
14
- // of cwd (critical for npm-installed loopforge where skills are under
15
- // node_modules/loopforge/skills/, not at the project root).
16
- // ═══════════════════════════════════════════════════════════════════════════
17
- /** Absolute path to the skills/ directory shipped with this package.
18
- * Derived from this module's location in dist/ → ../skills/. */
19
- export const SKILLS_DIR = join(dirname(fileURLToPath(import.meta.url)), "..", "skills");
20
- // ═══════════════════════════════════════════════════════════════════════════
21
- // Routing table
22
- // ═══════════════════════════════════════════════════════════════════════════
23
- const ROUTING_TABLE = {
24
- continuous_low: Technique.ZERO_SHOT,
25
- independent_low: Technique.ZERO_SHOT,
26
- continuous_medium: Technique.FEW_SHOT,
27
- independent_medium: Technique.ZERO_SHOT_COT,
28
- continuous_high: Technique.FEW_SHOT_COT,
29
- independent_high: Technique.TREE_OF_THOUGHT,
30
- };
31
- const RATIONALE = {
32
- [Technique.ZERO_SHOT]: "Low load — direct instruction suffices.",
33
- [Technique.FEW_SHOT]: "Fixed I/O pattern expected — examples anchor output format.",
34
- [Technique.ZERO_SHOT_COT]: "Multi-step reasoning needed, no examples provided.",
35
- [Technique.FEW_SHOT_COT]: "Complex reasoning with provided examples — relay pattern.",
36
- [Technique.STEP_BACK]: "Vague or legacy — abstract to principles first.",
37
- [Technique.LEAST_TO_MOST]: "Decomposable into ordered subproblems.",
38
- [Technique.TREE_OF_THOUGHT]: "High risk, multi-path — explore + evaluate + prune.",
39
- };
40
- export const TECHNIQUE_REFERENCE = {
41
- "zero-shot": join(SKILLS_DIR, "prompt-techniques", "references", "zero-shot.md"),
42
- "few-shot": join(SKILLS_DIR, "prompt-techniques", "references", "few-shot.md"),
43
- "zero-shot-cot": join(SKILLS_DIR, "prompt-techniques", "references", "chain-of-thought.md"),
44
- "few-shot-cot": join(SKILLS_DIR, "prompt-techniques", "references", "chain-of-thought.md"),
45
- "step-back": join(SKILLS_DIR, "prompt-techniques", "references", "step-back.md"),
46
- "least-to-most": join(SKILLS_DIR, "prompt-techniques", "references", "least-to-most.md"),
47
- "tree-of-thought": join(SKILLS_DIR, "prompt-techniques", "references", "tree-of-thought.md"),
48
- };
49
- // Keyword sets for heuristic classification
50
- const HIGH_LOAD_WORDS = new Set([
51
- "security", "audit", "crypto", "encrypt", "concurrent",
52
- "thread", "transaction", "rollback", "compile", "protocol",
53
- "安全", "审计", "加密", "并发", "签名", "校验", "默克尔",
54
- "assembly", "重放攻击", "共识", "虚拟机", "字节码",
55
- ]);
56
- const LOW_LOAD_WORDS = new Set([
57
- "rename", "format", "comment", "config", "readme", "simple", "basic",
58
- ]);
59
- const CONTINUOUS_WORDS = new Set([
60
- "fix", "modify", "update", "change", "refactor", "extend",
61
- "add", "improve", "debug",
62
- ]);
63
- // v1.1: Keywords that trigger specialist techniques (override routing table)
64
- const STEP_BACK_WORDS = new Set([
65
- "重构", "排查", "legacy", "原则", "抽象", "根本原因", "root cause",
66
- "报错", "逻辑混乱", "含糊", "vague", "审计方法", "底层",
67
- ]);
68
- const LEAST_TO_MOST_WORDS = new Set([
69
- "逐步", "搭建", "实现系统", "build system", "pipeline", "编译器",
70
- "逐步求解", "有序", "从简单到复杂", "数据采集", "完整模块",
71
- "多步骤", "部署流程", "子问题",
72
- ]);
73
- // ═══════════════════════════════════════════════════════════════════════════
74
- // Keyword heuristic router
75
- // ═══════════════════════════════════════════════════════════════════════════
76
- export function routeTechnique(task) {
77
- const taskLower = task.toLowerCase();
78
- // Independence — check if any continuous word appears in task
79
- const continuous = [...CONTINUOUS_WORDS].some((w) => taskLower.includes(w));
80
- const independence = continuous ? "continuous" : "independent";
81
- // Cognitive load — check keyword presence
82
- let load;
83
- if ([...HIGH_LOAD_WORDS].some((w) => taskLower.includes(w))) {
84
- load = "high";
85
- }
86
- else if ([...LOW_LOAD_WORDS].some((w) => taskLower.includes(w))) {
87
- load = "low";
88
- }
89
- else {
90
- load = task.split(/\s+/).length > 8 ? "medium" : "low";
91
- }
92
- let technique = ROUTING_TABLE[`${independence}_${load}`] ?? Technique.ZERO_SHOT;
93
- // v1.1: Keyword overrides for specialist techniques
94
- if ([...STEP_BACK_WORDS].some((w) => taskLower.includes(w))) {
95
- technique = Technique.STEP_BACK;
96
- load = "high";
97
- }
98
- else if ([...LEAST_TO_MOST_WORDS].some((w) => taskLower.includes(w))) {
99
- technique = Technique.LEAST_TO_MOST;
100
- load = "high";
101
- }
102
- return makeAnalysis({
103
- technique: technique,
104
- rationale: RATIONALE[technique] ?? "Default route.",
105
- independence,
106
- cognitive_load: load,
107
- reference_file: TECHNIQUE_REFERENCE[technique] ?? "",
108
- });
109
- }
110
- // ═══════════════════════════════════════════════════════════════════════════
111
- // Tier definitions
112
- // ═══════════════════════════════════════════════════════════════════════════
113
- const TIER_1_TECHNIQUES = new Set([
114
- Technique.ZERO_SHOT,
115
- Technique.FEW_SHOT,
116
- Technique.ZERO_SHOT_COT,
117
- Technique.FEW_SHOT_COT,
118
- ]);
119
- const TIER_2_TECHNIQUES = new Set([
120
- Technique.STEP_BACK,
121
- Technique.LEAST_TO_MOST,
122
- Technique.TREE_OF_THOUGHT,
123
- ]);
124
- function isTier2Technique(t) {
125
- return TIER_2_TECHNIQUES.has(t);
126
- }
127
- // Downgrade map: Tier 2 → nearest Tier 1 equivalent
128
- const DOWNGRADE_TIER2_TO_TIER1 = {
129
- [Technique.STEP_BACK]: Technique.FEW_SHOT_COT,
130
- [Technique.LEAST_TO_MOST]: Technique.ZERO_SHOT_COT,
131
- [Technique.TREE_OF_THOUGHT]: Technique.FEW_SHOT_COT,
132
- };
133
- function downgradeToTier1(technique) {
134
- return DOWNGRADE_TIER2_TO_TIER1[technique] ?? Technique.FEW_SHOT;
135
- }
136
- // ═══════════════════════════════════════════════════════════════════════════
137
- // Keyword routing restricted to a subset of techniques
138
- // ═══════════════════════════════════════════════════════════════════════════
139
- function keywordRouteRestricted(task, allowedTechniques) {
140
- // Run full keyword routing first
141
- const full = routeTechnique(task);
142
- const technique = full.technique;
143
- // If the keyword result is already in the allowed set, use it
144
- if (allowedTechniques.includes(technique))
145
- return full;
146
- // If it's Tier 2 downgraded to Tier 1, map to the nearest Tier 1
147
- if (isTier2Technique(technique)) {
148
- const downgraded = downgradeToTier1(technique);
149
- if (allowedTechniques.includes(downgraded)) {
150
- return makeAnalysis({
151
- technique: downgraded,
152
- rationale: `${full.rationale} [DOWNGRADED: ${technique} → ${downgraded} — Tier 2 not available this round]`,
153
- independence: full.independence,
154
- cognitive_load: full.cognitive_load,
155
- reference_file: TECHNIQUE_REFERENCE[downgraded] ?? full.reference_file,
156
- });
157
- }
158
- }
159
- // Fallback: pick the first technique in the allowed set
160
- const fallback = allowedTechniques[0];
161
- return makeAnalysis({
162
- technique: fallback,
163
- rationale: `${RATIONALE[fallback] ?? "Tier-restricted route."} [RESTRICTED: keyword ${technique} not in allowed set [${allowedTechniques.join(", ")}]]`,
164
- independence: full.independence,
165
- cognitive_load: full.cognitive_load,
166
- reference_file: TECHNIQUE_REFERENCE[fallback] ?? "",
167
- });
168
- }
169
- // ═══════════════════════════════════════════════════════════════════════════
170
- // Tier-gated technique router (v4.0)
171
- // ═══════════════════════════════════════════════════════════════════════════
172
- export function routeTechniqueAdaptive(task,
173
- /** @deprecated v1.15 — escalation removed; no longer read. Kept for API compat. */
174
- _vaultContext = null,
175
- /** @deprecated v1.15 — escalation removed; no longer read. Kept for API compat. */
176
- _loopId = "", isCheckpoint = false) {
177
- // Step 1: Full keyword routing over all 7 techniques
178
- const keyword = routeTechnique(task);
179
- const technique = keyword.technique;
180
- // Step 2: Determine which tier is allowed this round.
181
- // v1.15: Escalation (3 failures → Tier 2) removed. The Agent freely
182
- // chooses techniques at L2; at L1, keyword routing stays in Tier 1.
183
- let allowedTechniques;
184
- let tierLabel;
185
- if (isCheckpoint) {
186
- allowedTechniques = [
187
- Technique.ZERO_SHOT, Technique.FEW_SHOT,
188
- Technique.ZERO_SHOT_COT, Technique.FEW_SHOT_COT,
189
- Technique.STEP_BACK, Technique.LEAST_TO_MOST, Technique.TREE_OF_THOUGHT,
190
- ];
191
- tierLabel = "checkpoint";
192
- }
193
- else {
194
- allowedTechniques = [
195
- Technique.ZERO_SHOT, Technique.FEW_SHOT,
196
- Technique.ZERO_SHOT_COT, Technique.FEW_SHOT_COT,
197
- ];
198
- tierLabel = "default";
199
- }
200
- // Step 3: Apply gate — if keyword result is in allowed set, use it
201
- if (allowedTechniques.includes(technique)) {
202
- if (tierLabel === "default")
203
- return keyword;
204
- return makeAnalysis({
205
- technique,
206
- rationale: `${keyword.rationale} [CHECKPOINT: full technique access]`,
207
- independence: keyword.independence,
208
- cognitive_load: keyword.cognitive_load,
209
- reference_file: keyword.reference_file,
210
- });
211
- }
212
- // Step 4: Keyword result outside allowed set — downgrade or restrict
213
- return keywordRouteRestricted(task, allowedTechniques);
214
- }
215
- //# sourceMappingURL=builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env node
2
- /** LoopForge MCP server — entry point.
3
- *
4
- * Usage:
5
- * npx loopforge-mcp
6
- * node dist/mcp-server.js
7
- *
8
- * Registers with Claude Code via:
9
- * claude mcp add loopforge -- npx loopforge-mcp
10
- */
11
- export {};
12
- //# sourceMappingURL=mcp-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}