@oleksandr.rudnychenko/sync_loop 0.2.4 → 0.3.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 (50) hide show
  1. package/README.md +25 -4
  2. package/bin/cli.js +3 -128
  3. package/bin/cli.ts +171 -0
  4. package/dist/bin/cli.d.ts +15 -0
  5. package/dist/bin/cli.js +137 -0
  6. package/dist/bin/cli.js.map +1 -0
  7. package/dist/src/init.d.ts +24 -0
  8. package/dist/src/init.js +404 -0
  9. package/dist/src/init.js.map +1 -0
  10. package/dist/src/server.d.ts +13 -0
  11. package/dist/src/server.js +265 -0
  12. package/dist/src/server.js.map +1 -0
  13. package/dist/src/template/.agent-loop/README.md +75 -0
  14. package/dist/src/template/.agent-loop/feedback.md +395 -0
  15. package/dist/src/template/.agent-loop/glossary.md +113 -0
  16. package/dist/src/template/.agent-loop/patterns/api-standards.md +132 -0
  17. package/dist/src/template/.agent-loop/patterns/code-patterns.md +300 -0
  18. package/dist/src/template/.agent-loop/patterns/refactoring-workflow.md +114 -0
  19. package/dist/src/template/.agent-loop/patterns/testing-guide.md +258 -0
  20. package/dist/src/template/.agent-loop/patterns.md +256 -0
  21. package/dist/src/template/.agent-loop/reasoning-kernel.md +521 -0
  22. package/dist/src/template/.agent-loop/validate-env.md +332 -0
  23. package/dist/src/template/.agent-loop/validate-n.md +321 -0
  24. package/dist/src/template/AGENTS.md +157 -0
  25. package/dist/src/template/README.md +144 -0
  26. package/dist/src/template/bootstrap-prompt.md +37 -0
  27. package/dist/src/template/protocol-summary.md +54 -0
  28. package/dist/src/template/wiring/api-standards.md +15 -0
  29. package/dist/src/template/wiring/code-patterns.md +15 -0
  30. package/dist/src/template/wiring/feedback.md +18 -0
  31. package/dist/src/template/wiring/glossary.md +11 -0
  32. package/dist/src/template/wiring/patterns.md +18 -0
  33. package/dist/src/template/wiring/reasoning-kernel.md +18 -0
  34. package/dist/src/template/wiring/refactoring-workflow.md +15 -0
  35. package/dist/src/template/wiring/testing-guide.md +15 -0
  36. package/dist/src/template/wiring/validate-env.md +17 -0
  37. package/dist/src/template/wiring/validate-n.md +17 -0
  38. package/package.json +48 -34
  39. package/src/template/wiring/api-standards.md +15 -0
  40. package/src/template/wiring/code-patterns.md +15 -0
  41. package/src/template/wiring/feedback.md +18 -0
  42. package/src/template/wiring/glossary.md +11 -0
  43. package/src/template/wiring/patterns.md +18 -0
  44. package/src/template/wiring/reasoning-kernel.md +18 -0
  45. package/src/template/wiring/refactoring-workflow.md +15 -0
  46. package/src/template/wiring/testing-guide.md +15 -0
  47. package/src/template/wiring/validate-env.md +17 -0
  48. package/src/template/wiring/validate-n.md +17 -0
  49. package/src/init.js +0 -569
  50. package/src/server.js +0 -289
@@ -0,0 +1,404 @@
1
+ import { readFileSync, writeFileSync, mkdirSync, cpSync, existsSync, readdirSync, } from "node:fs";
2
+ import { join, dirname, resolve, posix } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const TEMPLATE_DIR = join(__dirname, "template");
6
+ // ---------------------------------------------------------------------------
7
+ // Helpers
8
+ // ---------------------------------------------------------------------------
9
+ function readTemplate(relativePath) {
10
+ return readFileSync(join(TEMPLATE_DIR, relativePath), "utf-8");
11
+ }
12
+ function toPosixPath(value) {
13
+ return value.replace(/\\/g, "/");
14
+ }
15
+ function readJsonSafe(path) {
16
+ try {
17
+ return JSON.parse(readFileSync(path, "utf-8"));
18
+ }
19
+ catch {
20
+ return null;
21
+ }
22
+ }
23
+ function detectPackageManager(dirPath) {
24
+ if (existsSync(join(dirPath, "pnpm-lock.yaml")))
25
+ return "pnpm";
26
+ if (existsSync(join(dirPath, "yarn.lock")))
27
+ return "yarn";
28
+ if (existsSync(join(dirPath, "package-lock.json")))
29
+ return "npm";
30
+ if (existsSync(join(dirPath, "uv.lock")))
31
+ return "uv";
32
+ return "npm";
33
+ }
34
+ function runCommandPrefix(packageManager) {
35
+ if (packageManager === "npm")
36
+ return "npm run";
37
+ if (packageManager === "pnpm")
38
+ return "pnpm";
39
+ if (packageManager === "yarn")
40
+ return "yarn";
41
+ return `${packageManager} run`;
42
+ }
43
+ function detectNodeFrameworks(pkg) {
44
+ const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
45
+ const frameworks = [];
46
+ const known = [
47
+ ["next", "Next.js"],
48
+ ["react", "React"],
49
+ ["vite", "Vite"],
50
+ ["vue", "Vue"],
51
+ ["svelte", "Svelte"],
52
+ ["tailwindcss", "TailwindCSS"],
53
+ ["express", "Express"],
54
+ ["fastify", "Fastify"],
55
+ ["@nestjs/core", "NestJS"],
56
+ ["@modelcontextprotocol/sdk", "MCP SDK"],
57
+ ["@tanstack/react-query", "TanStack Query"],
58
+ ["zustand", "Zustand"],
59
+ ];
60
+ for (const [dep, name] of known) {
61
+ if (deps[dep])
62
+ frameworks.push(name);
63
+ }
64
+ return frameworks;
65
+ }
66
+ function detectNodeStack(projectPath, relativePath = "") {
67
+ const stackRoot = join(projectPath, relativePath);
68
+ const pkgPath = join(stackRoot, "package.json");
69
+ if (!existsSync(pkgPath))
70
+ return null;
71
+ const pkg = readJsonSafe(pkgPath) ?? {};
72
+ const scripts = pkg.scripts ?? {};
73
+ const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}) };
74
+ const packageManager = detectPackageManager(stackRoot);
75
+ const runPrefix = runCommandPrefix(packageManager);
76
+ const frameworks = detectNodeFrameworks(pkg);
77
+ const usesTypeScript = Boolean(deps.typescript || existsSync(join(stackRoot, "tsconfig.json")));
78
+ const languages = usesTypeScript ? ["TypeScript", "JavaScript"] : ["JavaScript"];
79
+ const stackName = relativePath ? posix.basename(toPosixPath(relativePath)) : "app";
80
+ return {
81
+ name: stackName,
82
+ languages,
83
+ frameworks: frameworks.length > 0 ? frameworks : ["Node.js"],
84
+ testRunner: scripts.test ? `${runPrefix} test` : undefined,
85
+ typeChecker: scripts.typecheck ? `${runPrefix} typecheck` : (usesTypeScript ? "tsc --noEmit" : undefined),
86
+ linter: scripts.lint ? `${runPrefix} lint` : undefined,
87
+ packageManager,
88
+ path: relativePath || undefined,
89
+ };
90
+ }
91
+ function detectPythonStack(projectPath, relativePath = "") {
92
+ const stackRoot = join(projectPath, relativePath);
93
+ const pyprojectPath = join(stackRoot, "pyproject.toml");
94
+ const requirementsPath = join(stackRoot, "requirements.txt");
95
+ if (!existsSync(pyprojectPath) && !existsSync(requirementsPath))
96
+ return null;
97
+ const pyproject = existsSync(pyprojectPath) ? readFileSync(pyprojectPath, "utf-8").toLowerCase() : "";
98
+ const reqs = existsSync(requirementsPath) ? readFileSync(requirementsPath, "utf-8").toLowerCase() : "";
99
+ const merged = `${pyproject}\n${reqs}`;
100
+ const frameworks = [];
101
+ if (merged.includes("fastapi"))
102
+ frameworks.push("FastAPI");
103
+ if (merged.includes("django"))
104
+ frameworks.push("Django");
105
+ if (merged.includes("flask"))
106
+ frameworks.push("Flask");
107
+ if (merged.includes("langgraph"))
108
+ frameworks.push("LangGraph");
109
+ if (merged.includes("pydantic"))
110
+ frameworks.push("Pydantic");
111
+ const stackName = relativePath ? posix.basename(toPosixPath(relativePath)) : "app";
112
+ const hasPyright = merged.includes("pyright");
113
+ const hasMypy = merged.includes("mypy");
114
+ const hasRuff = merged.includes("ruff");
115
+ const hasPytest = merged.includes("pytest");
116
+ return {
117
+ name: stackName,
118
+ languages: ["Python"],
119
+ frameworks: frameworks.length > 0 ? frameworks : ["Python"],
120
+ testRunner: hasPytest ? "pytest" : undefined,
121
+ typeChecker: hasPyright ? "pyright" : (hasMypy ? "mypy" : undefined),
122
+ linter: hasRuff ? "ruff check ." : undefined,
123
+ path: relativePath || undefined,
124
+ };
125
+ }
126
+ export function detectStacks(projectPath) {
127
+ const root = resolve(projectPath);
128
+ const candidates = [""];
129
+ for (const entry of readdirSync(root, { withFileTypes: true })) {
130
+ if (!entry.isDirectory())
131
+ continue;
132
+ if (entry.name.startsWith("."))
133
+ continue;
134
+ if (entry.name === "node_modules")
135
+ continue;
136
+ candidates.push(entry.name);
137
+ }
138
+ const stacks = [];
139
+ for (const rel of candidates) {
140
+ const nodeStack = detectNodeStack(root, rel);
141
+ if (nodeStack)
142
+ stacks.push(nodeStack);
143
+ const pythonStack = detectPythonStack(root, rel);
144
+ if (pythonStack)
145
+ stacks.push(pythonStack);
146
+ }
147
+ const deduped = [];
148
+ const seen = new Set();
149
+ for (const stack of stacks) {
150
+ const key = `${stack.name}:${stack.path ?? ""}:${stack.languages.join(",")}`;
151
+ if (seen.has(key))
152
+ continue;
153
+ seen.add(key);
154
+ deduped.push(stack);
155
+ }
156
+ if (deduped.length === 0) {
157
+ return [{
158
+ name: "app",
159
+ languages: ["Unknown"],
160
+ frameworks: ["Unknown"],
161
+ }];
162
+ }
163
+ return deduped;
164
+ }
165
+ function writeOutput(projectPath, relativePath, content, options = {}) {
166
+ const { dryRun = false, overwrite = true } = options;
167
+ const fullPath = join(projectPath, relativePath);
168
+ const alreadyExists = existsSync(fullPath);
169
+ if (alreadyExists && !overwrite) {
170
+ return { path: relativePath, status: "skipped" };
171
+ }
172
+ if (!dryRun) {
173
+ mkdirSync(dirname(fullPath), { recursive: true });
174
+ writeFileSync(fullPath, content, "utf-8");
175
+ }
176
+ if (dryRun) {
177
+ return { path: relativePath, status: alreadyExists ? "would-overwrite" : "would-create" };
178
+ }
179
+ return { path: relativePath, status: alreadyExists ? "overwritten" : "created" };
180
+ }
181
+ function formatWriteResult(result) {
182
+ if (result.status === "skipped")
183
+ return `${result.path} (skipped: exists)`;
184
+ if (result.status.startsWith("would-"))
185
+ return `${result.path} (dry-run)`;
186
+ return result.path;
187
+ }
188
+ function yamlFrontmatter(fields) {
189
+ const lines = ["---"];
190
+ for (const [key, value] of Object.entries(fields)) {
191
+ if (Array.isArray(value)) {
192
+ lines.push(`${key}:`);
193
+ for (const item of value) {
194
+ lines.push(` - "${item}"`);
195
+ }
196
+ }
197
+ else if (typeof value === "boolean") {
198
+ lines.push(`${key}: ${value}`);
199
+ }
200
+ else {
201
+ lines.push(`${key}: "${value}"`);
202
+ }
203
+ }
204
+ lines.push("---");
205
+ return lines.join("\n");
206
+ }
207
+ // ---------------------------------------------------------------------------
208
+ // Source file list (maps to src/template/.agent-loop/)
209
+ // ---------------------------------------------------------------------------
210
+ const SOURCE_FILES = [
211
+ { id: "reasoning-kernel", path: ".agent-loop/reasoning-kernel.md" },
212
+ { id: "feedback", path: ".agent-loop/feedback.md" },
213
+ { id: "validate-env", path: ".agent-loop/validate-env.md" },
214
+ { id: "validate-n", path: ".agent-loop/validate-n.md" },
215
+ { id: "patterns", path: ".agent-loop/patterns.md" },
216
+ { id: "glossary", path: ".agent-loop/glossary.md" },
217
+ { id: "code-patterns", path: ".agent-loop/patterns/code-patterns.md" },
218
+ { id: "testing-guide", path: ".agent-loop/patterns/testing-guide.md" },
219
+ { id: "refactoring-workflow", path: ".agent-loop/patterns/refactoring-workflow.md" },
220
+ { id: "api-standards", path: ".agent-loop/patterns/api-standards.md" },
221
+ ];
222
+ const WRAPPER_FILES = [
223
+ { id: "reasoning-kernel", path: "wiring/reasoning-kernel.md" },
224
+ { id: "feedback", path: "wiring/feedback.md" },
225
+ { id: "validate-env", path: "wiring/validate-env.md" },
226
+ { id: "validate-n", path: "wiring/validate-n.md" },
227
+ { id: "patterns", path: "wiring/patterns.md" },
228
+ { id: "glossary", path: "wiring/glossary.md" },
229
+ { id: "code-patterns", path: "wiring/code-patterns.md" },
230
+ { id: "testing-guide", path: "wiring/testing-guide.md" },
231
+ { id: "refactoring-workflow", path: "wiring/refactoring-workflow.md" },
232
+ { id: "api-standards", path: "wiring/api-standards.md" },
233
+ ];
234
+ // ---------------------------------------------------------------------------
235
+ // Platform configs
236
+ // ---------------------------------------------------------------------------
237
+ const COPILOT = {
238
+ "reasoning-kernel": { target: ".github/instructions/reasoning-kernel.instructions.md", fm: { name: "SyncLoop: Reasoning Kernel", description: "7-stage agent reasoning loop with context clearage", applyTo: "**/*" } },
239
+ "feedback": { target: ".github/instructions/feedback.instructions.md", fm: { name: "SyncLoop: Feedback Loop", description: "Failure diagnosis, patch protocol, branch pruning", applyTo: "**/*" } },
240
+ "validate-env": { target: ".github/instructions/validate-env.instructions.md", fm: { name: "SyncLoop: Validate Environment", description: "NFR gates: types, tests, layers, complexity", applyTo: "**/*" } },
241
+ "validate-n": { target: ".github/instructions/validate-n.instructions.md", fm: { name: "SyncLoop: Validate Neighbors", description: "Shape, boundary, bridge checks", applyTo: "**/*" } },
242
+ "patterns": { target: ".github/instructions/patterns.instructions.md", fm: { name: "SyncLoop: Pattern Registry", description: "Pattern routing and learned patterns", applyTo: "**/*" } },
243
+ "glossary": { target: ".github/instructions/glossary.instructions.md", fm: { name: "SyncLoop: Glossary", description: "Canonical terminology", applyTo: "**/*" } },
244
+ "code-patterns": { target: ".github/instructions/code-patterns.instructions.md", fm: { name: "SyncLoop: Code Patterns", description: "P1-P11 implementation patterns", applyTo: "{src,app,lib}/**/*.{ts,py,js,jsx,tsx}" } },
245
+ "testing-guide": { target: ".github/instructions/testing-guide.instructions.md", fm: { name: "SyncLoop: Testing Guide", description: "Test patterns and strategies", applyTo: "{tests,test,__tests__}/**/*" } },
246
+ "refactoring-workflow": { target: ".github/instructions/refactoring-workflow.instructions.md", fm: { name: "SyncLoop: Refactoring Workflow", description: "4-phase refactoring checklist", applyTo: "**/*" } },
247
+ "api-standards": { target: ".github/instructions/api-standards.instructions.md", fm: { name: "SyncLoop: API Standards", description: "Boundary contracts and API conventions", applyTo: "{routes,routers,controllers,api}/**/*" } },
248
+ };
249
+ const CURSOR = {
250
+ "reasoning-kernel": { target: ".cursor/rules/01-reasoning-kernel.md", fm: { description: "7-stage agent reasoning loop with context clearage and transitions", alwaysApply: true } },
251
+ "feedback": { target: ".cursor/rules/02-feedback.md", fm: { description: "Failure diagnosis, patch protocol, micro-loop, branch pruning", alwaysApply: true } },
252
+ "validate-env": { target: ".cursor/rules/03-validate-env.md", fm: { description: "Stage 1 NFR gates: types, tests, layers, complexity, debug hygiene", alwaysApply: true } },
253
+ "validate-n": { target: ".cursor/rules/04-validate-n.md", fm: { description: "Stage 2 checks: shapes, boundaries, bridges", alwaysApply: true } },
254
+ "patterns": { target: ".cursor/rules/05-patterns.md", fm: { description: "Pattern routing index and learned patterns", alwaysApply: true } },
255
+ "glossary": { target: ".cursor/rules/06-glossary.md", fm: { description: "Canonical domain terminology and naming rules", alwaysApply: true } },
256
+ "code-patterns": { target: ".cursor/rules/07-code-patterns.md", fm: { description: "P1-P11 implementation patterns for layered code", globs: "{src,app,lib}/**/*.{ts,py,js,jsx,tsx}" } },
257
+ "testing-guide": { target: ".cursor/rules/08-testing-guide.md", fm: { description: "Test patterns, fixtures, mocks, strategies", globs: "{tests,test,__tests__}/**/*" } },
258
+ "refactoring-workflow": { target: ".cursor/rules/09-refactoring-workflow.md", fm: { description: "4-phase refactoring checklist for safe restructuring", alwaysApply: false } },
259
+ "api-standards": { target: ".cursor/rules/10-api-standards.md", fm: { description: "Boundary contracts, typed models, error envelopes", globs: "{routes,routers,controllers,api}/**/*" } },
260
+ };
261
+ const CLAUDE = {
262
+ "reasoning-kernel": { target: ".claude/rules/reasoning-kernel.md", fm: { paths: ["**/*"] } },
263
+ "feedback": { target: ".claude/rules/feedback.md", fm: { paths: ["**/*"] } },
264
+ "validate-env": { target: ".claude/rules/validate-env.md", fm: { paths: ["**/*"] } },
265
+ "validate-n": { target: ".claude/rules/validate-n.md", fm: { paths: ["**/*"] } },
266
+ "patterns": { target: ".claude/rules/patterns.md", fm: { paths: ["**/*"] } },
267
+ "glossary": { target: ".claude/rules/glossary.md", fm: { paths: ["**/*"] } },
268
+ "code-patterns": { target: ".claude/rules/code-patterns.md", fm: { paths: ["src/**", "app/**", "lib/**"] } },
269
+ "testing-guide": { target: ".claude/rules/testing-guide.md", fm: { paths: ["tests/**", "test/**", "__tests__/**"] } },
270
+ "refactoring-workflow": { target: ".claude/rules/refactoring-workflow.md", fm: { paths: ["**/*"] } },
271
+ "api-standards": { target: ".claude/rules/api-standards.md", fm: { paths: ["**/routes/**", "**/api/**", "**/controllers/**"] } },
272
+ };
273
+ const PLATFORM_CONFIGS = {
274
+ copilot: COPILOT,
275
+ cursor: CURSOR,
276
+ claude: CLAUDE,
277
+ };
278
+ // ---------------------------------------------------------------------------
279
+ // Environment placeholder replacement
280
+ // ---------------------------------------------------------------------------
281
+ function applyStacks(content, stacks) {
282
+ if (!stacks || stacks.length === 0)
283
+ return content;
284
+ const testRunners = stacks.map((stack) => stack.testRunner).filter(Boolean);
285
+ const typeCheckers = stacks.map((stack) => stack.typeChecker).filter(Boolean);
286
+ const linters = stacks.map((stack) => stack.linter).filter(Boolean);
287
+ const packageManagers = [...new Set(stacks.map((stack) => stack.packageManager).filter(Boolean))];
288
+ const stackRows = stacks
289
+ .map((stack) => `| ${stack.name}${stack.path ? ` (\`${stack.path}\`)` : ""} | ${stack.languages.join(", ")} | ${stack.frameworks.join(", ")} |`)
290
+ .join("\n");
291
+ const stackTable = `| Stack | Languages | Frameworks |\n|-------|-----------|------------|\n${stackRows}`;
292
+ const replacements = {
293
+ "{typecheck command}": typeCheckers.join(" && ") || "{typecheck command}",
294
+ "{lint command}": linters.join(" && ") || "{lint command}",
295
+ "{test command}": testRunners.join(" && ") || "{test command}",
296
+ "{targeted test command}": testRunners[0] ? `${testRunners[0]} {path}` : "{targeted test command}",
297
+ "{install command}": packageManagers.map((pm) => `${pm} install`).join(" && ") || "{install command}",
298
+ };
299
+ let result = content;
300
+ const legacyTableRegex = /\| Layer \| Stack \|\r?\n\|[-|]+\|\r?\n\| Backend \|[^\r\n]*\|\r?\n\| Frontend \|[^\r\n]*\|\r?\n\| Infra \|[^\r\n]*\|/;
301
+ const generatedTableRegex = /\| Stack \| Languages \| Frameworks \|\r?\n\|[-|]+\|(?:\r?\n\|[^\r\n]*\|)+/;
302
+ result = result.replace(legacyTableRegex, stackTable);
303
+ result = result.replace(generatedTableRegex, stackTable);
304
+ for (const [placeholder, value] of Object.entries(replacements)) {
305
+ result = result.replaceAll(placeholder, value);
306
+ }
307
+ return result;
308
+ }
309
+ // ---------------------------------------------------------------------------
310
+ // Platform file generation
311
+ // ---------------------------------------------------------------------------
312
+ function generatePlatformFiles(projectPath, platform, stacks, options) {
313
+ const config = PLATFORM_CONFIGS[platform];
314
+ const results = [];
315
+ const wrapperById = new Map(WRAPPER_FILES.map((item) => [item.id, item.path]));
316
+ for (const source of SOURCE_FILES) {
317
+ const entry = config[source.id];
318
+ if (!entry)
319
+ continue;
320
+ const wrapperPath = wrapperById.get(source.id);
321
+ if (!wrapperPath)
322
+ continue;
323
+ const content = applyStacks(readTemplate(wrapperPath), stacks);
324
+ const frontmatter = yamlFrontmatter(entry.fm);
325
+ const writeResult = writeOutput(projectPath, entry.target, `${frontmatter}\n\n${content}`, options);
326
+ results.push(` ${formatWriteResult(writeResult)}`);
327
+ }
328
+ const summary = readTemplate("protocol-summary.md");
329
+ if (platform === "copilot") {
330
+ const writeResult = writeOutput(projectPath, ".github/copilot-instructions.md", summary, options);
331
+ results.push(` ${formatWriteResult(writeResult)}`);
332
+ }
333
+ else if (platform === "cursor") {
334
+ const frontmatter = yamlFrontmatter({ description: "SyncLoop protocol summary and guardrails", alwaysApply: true });
335
+ const writeResult = writeOutput(projectPath, ".cursor/rules/00-protocol.md", `${frontmatter}\n\n${summary}`, options);
336
+ results.push(` ${formatWriteResult(writeResult)}`);
337
+ }
338
+ else if (platform === "claude") {
339
+ const writeResult = writeOutput(projectPath, "CLAUDE.md", summary, options);
340
+ results.push(` ${formatWriteResult(writeResult)}`);
341
+ }
342
+ return results;
343
+ }
344
+ // ---------------------------------------------------------------------------
345
+ // Public API
346
+ // ---------------------------------------------------------------------------
347
+ export function init(projectPath, target = "all", stacks = [], options = {}) {
348
+ const root = resolve(projectPath);
349
+ const effectiveStacks = stacks.length > 0 ? stacks : detectStacks(root);
350
+ const mergedOptions = {
351
+ dryRun: Boolean(options.dryRun),
352
+ overwrite: options.overwrite ?? true,
353
+ };
354
+ const validTargets = ["copilot", "cursor", "claude", "all"];
355
+ if (!validTargets.includes(target)) {
356
+ throw new Error(`Unknown target "${target}". Use one of: ${validTargets.join(", ")}`);
357
+ }
358
+ const results = [];
359
+ const src = join(TEMPLATE_DIR, ".agent-loop");
360
+ const dest = join(root, ".agent-loop");
361
+ if (!mergedOptions.dryRun) {
362
+ cpSync(src, dest, {
363
+ recursive: true,
364
+ force: mergedOptions.overwrite,
365
+ errorOnExist: false,
366
+ });
367
+ if (effectiveStacks.length > 0) {
368
+ for (const source of SOURCE_FILES) {
369
+ const destFile = join(root, source.path);
370
+ if (!mergedOptions.overwrite && existsSync(destFile))
371
+ continue;
372
+ try {
373
+ const current = readFileSync(destFile, "utf-8");
374
+ const updated = applyStacks(current, effectiveStacks);
375
+ if (updated !== current)
376
+ writeFileSync(destFile, updated, "utf-8");
377
+ }
378
+ catch {
379
+ // Ignore files that are missing after copy.
380
+ }
381
+ }
382
+ }
383
+ }
384
+ results.push(`.agent-loop/ (canonical source${mergedOptions.dryRun ? ", dry-run" : ""})`);
385
+ const agentsContent = applyStacks(readTemplate("AGENTS.md"), effectiveStacks);
386
+ const agentsResult = writeOutput(root, "AGENTS.md", agentsContent, mergedOptions);
387
+ results.push(`AGENTS.md (cross-platform entrypoint: ${formatWriteResult(agentsResult)})`);
388
+ const targets = target === "all"
389
+ ? ["copilot", "cursor", "claude"]
390
+ : [target];
391
+ for (const currentTarget of targets) {
392
+ results.push(`\n[${currentTarget}]`);
393
+ results.push(...generatePlatformFiles(root, currentTarget, effectiveStacks, mergedOptions));
394
+ }
395
+ return {
396
+ projectPath: root,
397
+ target,
398
+ dryRun: mergedOptions.dryRun,
399
+ overwrite: mergedOptions.overwrite,
400
+ stacks: effectiveStacks,
401
+ results,
402
+ };
403
+ }
404
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,MAAM,EACN,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AA2CjD,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,YAAY,CAAC,YAAoB;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAgB,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,OAAe;IAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC/D,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC;IAC1D,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjE,IAAI,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,cAAsB;IAC9C,IAAI,cAAc,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC/C,IAAI,cAAc,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAC7C,IAAI,cAAc,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IAC7C,OAAO,GAAG,cAAc,MAAM,CAAC;AACjC,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAgB;IAC5C,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7E,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,KAAK,GAA4B;QACrC,CAAC,MAAM,EAAE,SAAS,CAAC;QACnB,CAAC,OAAO,EAAE,OAAO,CAAC;QAClB,CAAC,MAAM,EAAE,MAAM,CAAC;QAChB,CAAC,KAAK,EAAE,KAAK,CAAC;QACd,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACpB,CAAC,aAAa,EAAE,aAAa,CAAC;QAC9B,CAAC,SAAS,EAAE,SAAS,CAAC;QACtB,CAAC,SAAS,EAAE,SAAS,CAAC;QACtB,CAAC,cAAc,EAAE,QAAQ,CAAC;QAC1B,CAAC,2BAA2B,EAAE,SAAS,CAAC;QACxC,CAAC,uBAAuB,EAAE,gBAAgB,CAAC;QAC3C,CAAC,SAAS,EAAE,SAAS,CAAC;KACvB,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,GAAG,CAAC;YAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,eAAe,CAAC,WAAmB,EAAE,YAAY,GAAG,EAAE;IAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,EAAE,CAAC;IAC7E,MAAM,cAAc,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAChG,MAAM,SAAS,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAEjF,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAEnF,OAAO;QACL,IAAI,EAAE,SAAS;QACf,SAAS;QACT,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,CAAC,SAAS;QAC1D,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,YAAY,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;QACzG,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,OAAO,CAAC,CAAC,CAAC,SAAS;QACtD,cAAc;QACd,IAAI,EAAE,YAAY,IAAI,SAAS;KAChC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,WAAmB,EAAE,YAAY,GAAG,EAAE;IAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACxD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;IAC7D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC;QAAE,OAAO,IAAI,CAAC;IAE7E,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtG,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACvG,MAAM,MAAM,GAAG,GAAG,SAAS,KAAK,IAAI,EAAE,CAAC;IAEvC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACnF,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,SAAS;QACf,SAAS,EAAE,CAAC,QAAQ,CAAC;QACrB,UAAU,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC3D,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC5C,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;QAC5C,IAAI,EAAE,YAAY,IAAI,SAAS;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC;IAExB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACzC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;YAAE,SAAS;QAC5C,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,MAAM,MAAM,GAAsB,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC7C,IAAI,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,WAAW,GAAG,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACjD,IAAI,WAAW;YAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC;gBACN,IAAI,EAAE,KAAK;gBACX,SAAS,EAAE,CAAC,SAAS,CAAC;gBACtB,UAAU,EAAE,CAAC,SAAS,CAAC;aACxB,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW,CAClB,WAAmB,EACnB,YAAoB,EACpB,OAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,aAAa,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACnD,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IAC5F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACnF,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAyB;IAClD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,GAAG,MAAM,CAAC,IAAI,oBAAoB,CAAC;IAC3E,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,GAAG,MAAM,CAAC,IAAI,YAAY,CAAC;IAC1E,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,SAAS,eAAe,CAAC,MAAmD;IAC1E,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,KAAK,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,uDAAuD;AACvD,8EAA8E;AAE9E,MAAM,YAAY,GAAiB;IACjC,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,iCAAiC,EAAE;IACnE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACnD,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,6BAA6B,EAAE;IAC3D,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,2BAA2B,EAAE;IACvD,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACnD,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACnD,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,uCAAuC,EAAE;IACtE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,uCAAuC,EAAE;IACtE,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,8CAA8C,EAAE;IACpF,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,uCAAuC,EAAE;CACvE,CAAC;AAEF,MAAM,aAAa,GAAiB;IAClC,EAAE,EAAE,EAAE,kBAAkB,EAAE,IAAI,EAAE,4BAA4B,EAAE;IAC9D,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;IAC9C,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,wBAAwB,EAAE;IACtD,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,sBAAsB,EAAE;IAClD,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;IAC9C,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,oBAAoB,EAAE;IAC9C,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACxD,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE;IACxD,EAAE,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,gCAAgC,EAAE;IACtE,EAAE,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,yBAAyB,EAAE;CACzD,CAAC;AAEF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,OAAO,GAAmB;IAC9B,kBAAkB,EAAE,EAAE,MAAM,EAAE,uDAAuD,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,oDAAoD,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACvN,UAAU,EAAE,EAAE,MAAM,EAAE,+CAA+C,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,mDAAmD,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACnM,cAAc,EAAE,EAAE,MAAM,EAAE,mDAAmD,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,WAAW,EAAE,6CAA6C,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAC5M,YAAY,EAAE,EAAE,MAAM,EAAE,iDAAiD,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,WAAW,EAAE,gCAAgC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACzL,UAAU,EAAE,EAAE,MAAM,EAAE,+CAA+C,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,sCAAsC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IACzL,UAAU,EAAE,EAAE,MAAM,EAAE,+CAA+C,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAClK,eAAe,EAAE,EAAE,MAAM,EAAE,oDAAoD,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,gCAAgC,EAAE,OAAO,EAAE,uCAAuC,EAAE,EAAE;IAC3N,eAAe,EAAE,EAAE,MAAM,EAAE,oDAAoD,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,8BAA8B,EAAE,OAAO,EAAE,6BAA6B,EAAE,EAAE;IAC/M,sBAAsB,EAAE,EAAE,MAAM,EAAE,2DAA2D,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,gCAAgC,EAAE,WAAW,EAAE,+BAA+B,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9M,eAAe,EAAE,EAAE,MAAM,EAAE,oDAAoD,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,yBAAyB,EAAE,WAAW,EAAE,wCAAwC,EAAE,OAAO,EAAE,uCAAuC,EAAE,EAAE;CACpO,CAAC;AAEF,MAAM,MAAM,GAAmB;IAC7B,kBAAkB,EAAE,EAAE,MAAM,EAAE,sCAAsC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,oEAAoE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IACpL,UAAU,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,+DAA+D,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAC/J,cAAc,EAAE,EAAE,MAAM,EAAE,kCAAkC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,oEAAoE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAC5K,YAAY,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,6CAA6C,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IACjJ,UAAU,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAC5I,UAAU,EAAE,EAAE,MAAM,EAAE,8BAA8B,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,+CAA+C,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;IAC/I,eAAe,EAAE,EAAE,MAAM,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,iDAAiD,EAAE,KAAK,EAAE,uCAAuC,EAAE,EAAE;IACxL,eAAe,EAAE,EAAE,MAAM,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE,KAAK,EAAE,6BAA6B,EAAE,EAAE;IACzK,sBAAsB,EAAE,EAAE,MAAM,EAAE,0CAA0C,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,sDAAsD,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE;IAC/K,eAAe,EAAE,EAAE,MAAM,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,mDAAmD,EAAE,KAAK,EAAE,uCAAuC,EAAE,EAAE;CAC3L,CAAC;AAEF,MAAM,MAAM,GAAmB;IAC7B,kBAAkB,EAAE,EAAE,MAAM,EAAE,mCAAmC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IAC5F,UAAU,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IAC5E,cAAc,EAAE,EAAE,MAAM,EAAE,+BAA+B,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IACpF,YAAY,EAAE,EAAE,MAAM,EAAE,6BAA6B,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IAChF,UAAU,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IAC5E,UAAU,EAAE,EAAE,MAAM,EAAE,2BAA2B,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IAC5E,eAAe,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,EAAE;IAC5G,eAAe,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE;IACrH,sBAAsB,EAAE,EAAE,MAAM,EAAE,uCAAuC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE;IACpG,eAAe,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,mBAAmB,CAAC,EAAE,EAAE;CACjI,CAAC;AAEF,MAAM,gBAAgB,GAAuD;IAC3E,OAAO,EAAE,OAAO;IAChB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;CACf,CAAC;AAEF,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,SAAS,WAAW,CAAC,OAAe,EAAE,MAAyB;IAC7D,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAEnD,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IACxF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAC1F,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC;IAChF,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,OAAO,CAAa,CAAC,CAAC,CAAC;IAE9G,MAAM,SAAS,GAAG,MAAM;SACrB,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;SAC/I,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,UAAU,GAAG,2EAA2E,SAAS,EAAE,CAAC;IAE1G,MAAM,YAAY,GAA2B;QAC3C,qBAAqB,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,qBAAqB;QACzE,gBAAgB,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,gBAAgB;QAC1D,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,gBAAgB;QAC9D,yBAAyB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB;QAClG,mBAAmB,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,mBAAmB;KACtG,CAAC;IAEF,IAAI,MAAM,GAAG,OAAO,CAAC;IAErB,MAAM,gBAAgB,GAAG,uHAAuH,CAAC;IACjJ,MAAM,mBAAmB,GAAG,4EAA4E,CAAC;IACzG,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACtD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;IAEzD,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAChE,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,2BAA2B;AAC3B,8EAA8E;AAE9E,SAAS,qBAAqB,CAC5B,WAAmB,EACnB,QAAoC,EACpC,MAAyB,EACzB,OAAoB;IAEpB,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE/E,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC/C,IAAI,CAAC,WAAW;YAAE,SAAS;QAE3B,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,WAAW,OAAO,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACpG,OAAO,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;IAEpD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,iCAAiC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,eAAe,CAAC,EAAE,WAAW,EAAE,0CAA0C,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACpH,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,8BAA8B,EAAE,GAAG,WAAW,OAAO,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;QACtH,OAAO,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,KAAK,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,UAAU,IAAI,CAClB,WAAmB,EACnB,SAAqB,KAAK,EAC1B,SAA4B,EAAE,EAC9B,UAAuB,EAAE;IASzB,MAAM,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxE,MAAM,aAAa,GAAG;QACpB,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;KACrC,CAAC;IAEF,MAAM,YAAY,GAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC1E,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,kBAAkB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAEvC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE;YAChB,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,aAAa,CAAC,SAAS;YAC9B,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;QAEH,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,CAAC,aAAa,CAAC,SAAS,IAAI,UAAU,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBAC/D,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAChD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;oBACtD,IAAI,OAAO,KAAK,OAAO;wBAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBACrE,CAAC;gBAAC,MAAM,CAAC;oBACP,4CAA4C;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,iCAAiC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE1F,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,eAAe,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;IAClF,OAAO,CAAC,IAAI,CAAC,yCAAyC,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAE1F,MAAM,OAAO,GAAiC,MAAM,KAAK,KAAK;QAC5D,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACjC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAEb,KAAK,MAAM,aAAa,IAAI,OAAO,EAAE,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;QACrC,OAAO,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,MAAM;QACN,MAAM,EAAE,aAAa,CAAC,MAAM;QAC5B,SAAS,EAAE,aAAa,CAAC,SAAS;QAClC,MAAM,EAAE,eAAe;QACvB,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { type StackDefinition } from "./init.js";
3
+ export declare function pathDir(value: string): string;
4
+ export declare function splitHash(link: string): {
5
+ pathPart: string;
6
+ hash: string;
7
+ };
8
+ export declare function isExternalLink(link: string): boolean;
9
+ export declare function rewriteMarkdownLinks(content: string, transform: (path: string) => string): string;
10
+ export declare function rewriteResourceLinks(content: string, sourcePath: string): string;
11
+ export declare function formatStacks(stacks: StackDefinition[]): string;
12
+ export declare function createServer(): McpServer;
13
+ export declare function startServer(): Promise<McpServer>;