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.
- package/README.md +172 -95
- package/dist/backends/interface.d.ts +3 -9
- package/dist/backends/interface.d.ts.map +1 -1
- package/dist/backends/interface.js +1 -5
- package/dist/backends/interface.js.map +1 -1
- package/dist/canonical-state.d.ts +53 -0
- package/dist/canonical-state.d.ts.map +1 -0
- package/dist/canonical-state.js +161 -0
- package/dist/canonical-state.js.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +227 -0
- package/dist/cli.js.map +1 -0
- package/dist/enforcement-gate.d.ts.map +1 -1
- package/dist/enforcement-gate.js +28 -10
- package/dist/enforcement-gate.js.map +1 -1
- package/dist/engine.d.ts +7 -4
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +78 -138
- package/dist/engine.js.map +1 -1
- package/dist/evidence-provider.d.ts +113 -0
- package/dist/evidence-provider.d.ts.map +1 -0
- package/dist/evidence-provider.js +419 -0
- package/dist/evidence-provider.js.map +1 -0
- package/dist/index.d.ts +18 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -9
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +15 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +49 -0
- package/dist/init.js.map +1 -0
- package/dist/interop.d.ts +30 -0
- package/dist/interop.d.ts.map +1 -0
- package/dist/interop.js +29 -0
- package/dist/interop.js.map +1 -0
- package/dist/loop-compiler.d.ts +14 -64
- package/dist/loop-compiler.d.ts.map +1 -1
- package/dist/loop-compiler.js +303 -2206
- package/dist/loop-compiler.js.map +1 -1
- package/dist/loop-store.d.ts +82 -0
- package/dist/loop-store.d.ts.map +1 -0
- package/dist/loop-store.js +332 -0
- package/dist/loop-store.js.map +1 -0
- package/dist/mcp/server.d.ts +9 -6
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +109 -73
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/session.d.ts +75 -19
- package/dist/mcp/session.d.ts.map +1 -1
- package/dist/mcp/session.js +707 -361
- package/dist/mcp/session.js.map +1 -1
- package/dist/mcp/tools.d.ts +18 -268
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +225 -12
- package/dist/mcp/tools.js.map +1 -1
- package/dist/observability.d.ts +36 -16
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js +82 -23
- package/dist/observability.js.map +1 -1
- package/dist/policy-metrics.d.ts +46 -0
- package/dist/policy-metrics.d.ts.map +1 -0
- package/dist/policy-metrics.js +146 -0
- package/dist/policy-metrics.js.map +1 -0
- package/dist/policy.d.ts +53 -140
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +119 -184
- package/dist/policy.js.map +1 -1
- package/dist/prompt-assembler.d.ts +30 -0
- package/dist/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt-assembler.js +257 -0
- package/dist/prompt-assembler.js.map +1 -0
- package/dist/prompt-policy.d.ts +29 -0
- package/dist/prompt-policy.d.ts.map +1 -0
- package/dist/prompt-policy.js +51 -0
- package/dist/prompt-policy.js.map +1 -0
- package/dist/protocol.d.ts +88 -93
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +23 -39
- package/dist/protocol.js.map +1 -1
- package/dist/replay.d.ts.map +1 -1
- package/dist/replay.js +1 -27
- package/dist/replay.js.map +1 -1
- package/dist/round-coordinator.d.ts +90 -0
- package/dist/round-coordinator.d.ts.map +1 -0
- package/dist/round-coordinator.js +186 -0
- package/dist/round-coordinator.js.map +1 -0
- package/dist/round-driver.d.ts +53 -0
- package/dist/round-driver.d.ts.map +1 -0
- package/dist/round-driver.js +101 -0
- package/dist/round-driver.js.map +1 -0
- package/dist/round-transaction.d.ts +70 -0
- package/dist/round-transaction.d.ts.map +1 -0
- package/dist/round-transaction.js +290 -0
- package/dist/round-transaction.js.map +1 -0
- package/dist/runtime.d.ts +33 -19
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +355 -336
- package/dist/runtime.js.map +1 -1
- package/dist/storage.d.ts +38 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +201 -0
- package/dist/storage.js.map +1 -0
- package/dist/verification-gate.d.ts +33 -7
- package/dist/verification-gate.d.ts.map +1 -1
- package/dist/verification-gate.js +195 -7
- package/dist/verification-gate.js.map +1 -1
- package/loop_policy.json +22 -48
- package/package.json +13 -10
- package/skills/perception/SKILL.md +80 -267
- package/dist/backends/fs.d.ts +0 -36
- package/dist/backends/fs.d.ts.map +0 -1
- package/dist/backends/fs.js +0 -362
- package/dist/backends/fs.js.map +0 -1
- package/dist/builder.d.ts +0 -19
- package/dist/builder.d.ts.map +0 -1
- package/dist/builder.js +0 -215
- package/dist/builder.js.map +0 -1
- package/dist/mcp-server.d.ts +0 -12
- package/dist/mcp-server.d.ts.map +0 -1
- package/dist/mcp-server.js +0 -14
- package/dist/mcp-server.js.map +0 -1
- package/dist/memory-bridge.d.ts +0 -47
- package/dist/memory-bridge.d.ts.map +0 -1
- package/dist/memory-bridge.js +0 -290
- package/dist/memory-bridge.js.map +0 -1
- package/dist/tests/_helpers.d.ts +0 -25
- package/dist/tests/_helpers.d.ts.map +0 -1
- package/dist/tests/_helpers.js +0 -47
- package/dist/tests/_helpers.js.map +0 -1
- package/dist/tests/builder.test.d.ts +0 -2
- package/dist/tests/builder.test.d.ts.map +0 -1
- package/dist/tests/builder.test.js +0 -112
- package/dist/tests/builder.test.js.map +0 -1
- package/dist/tests/enforcement-gate.test.d.ts +0 -2
- package/dist/tests/enforcement-gate.test.d.ts.map +0 -1
- package/dist/tests/enforcement-gate.test.js +0 -328
- package/dist/tests/enforcement-gate.test.js.map +0 -1
- package/dist/tests/engine.test.d.ts +0 -2
- package/dist/tests/engine.test.d.ts.map +0 -1
- package/dist/tests/engine.test.js +0 -375
- package/dist/tests/engine.test.js.map +0 -1
- package/dist/tests/generate-schema.test.d.ts +0 -8
- package/dist/tests/generate-schema.test.d.ts.map +0 -1
- package/dist/tests/generate-schema.test.js +0 -199
- package/dist/tests/generate-schema.test.js.map +0 -1
- package/dist/tests/loop-compiler.test.d.ts +0 -2
- package/dist/tests/loop-compiler.test.d.ts.map +0 -1
- package/dist/tests/loop-compiler.test.js +0 -1059
- package/dist/tests/loop-compiler.test.js.map +0 -1
- package/dist/tests/mcp.test.d.ts +0 -7
- package/dist/tests/mcp.test.d.ts.map +0 -1
- package/dist/tests/mcp.test.js +0 -505
- package/dist/tests/mcp.test.js.map +0 -1
- package/dist/tests/memory-bridge.test.d.ts +0 -8
- package/dist/tests/memory-bridge.test.d.ts.map +0 -1
- package/dist/tests/memory-bridge.test.js +0 -383
- package/dist/tests/memory-bridge.test.js.map +0 -1
- package/dist/tests/policy.test.d.ts +0 -2
- package/dist/tests/policy.test.d.ts.map +0 -1
- package/dist/tests/policy.test.js +0 -49
- package/dist/tests/policy.test.js.map +0 -1
- package/dist/tests/protocol.test.d.ts +0 -2
- package/dist/tests/protocol.test.d.ts.map +0 -1
- package/dist/tests/protocol.test.js +0 -73
- package/dist/tests/protocol.test.js.map +0 -1
- package/dist/tests/replay.test.d.ts +0 -2
- package/dist/tests/replay.test.d.ts.map +0 -1
- package/dist/tests/replay.test.js +0 -222
- package/dist/tests/replay.test.js.map +0 -1
- package/dist/tests/runtime.test.d.ts +0 -7
- package/dist/tests/runtime.test.d.ts.map +0 -1
- package/dist/tests/runtime.test.js +0 -337
- package/dist/tests/runtime.test.js.map +0 -1
- package/dist/tests/verification-gate.test.d.ts +0 -2
- package/dist/tests/verification-gate.test.d.ts.map +0 -1
- package/dist/tests/verification-gate.test.js +0 -407
- package/dist/tests/verification-gate.test.js.map +0 -1
- package/skills/prompt-techniques/SKILL.md +0 -52
- package/skills/prompt-techniques/references/chain-of-thought.md +0 -207
- package/skills/prompt-techniques/references/few-shot.md +0 -174
- package/skills/prompt-techniques/references/least-to-most.md +0 -182
- package/skills/prompt-techniques/references/step-back.md +0 -160
- package/skills/prompt-techniques/references/tree-of-thought.md +0 -191
- package/skills/prompt-techniques/references/zero-shot.md +0 -97
package/dist/backends/fs.js
DELETED
|
@@ -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
|
package/dist/backends/fs.js.map
DELETED
|
@@ -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
|
package/dist/builder.d.ts.map
DELETED
|
@@ -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
|
package/dist/builder.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp-server.d.ts
DELETED
|
@@ -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
|
package/dist/mcp-server.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":";AACA;;;;;;;;GAQG"}
|