@aiyou-dev/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/bin/aiyoucli-mcp.js +7 -0
  2. package/bin/aiyoucli.js +29 -0
  3. package/dist/commands/index.d.ts +9 -0
  4. package/dist/commands/index.d.ts.map +1 -0
  5. package/dist/commands/index.js +968 -0
  6. package/dist/commands/index.js.map +1 -0
  7. package/dist/config.d.ts +6 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +99 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/index.d.ts +18 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +149 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/init/agentsmd-generator.d.ts +13 -0
  16. package/dist/init/agentsmd-generator.d.ts.map +1 -0
  17. package/dist/init/agentsmd-generator.js +138 -0
  18. package/dist/init/agentsmd-generator.js.map +1 -0
  19. package/dist/init/interactive.d.ts +6 -0
  20. package/dist/init/interactive.d.ts.map +1 -0
  21. package/dist/init/interactive.js +288 -0
  22. package/dist/init/interactive.js.map +1 -0
  23. package/dist/init/settings-generator.d.ts +17 -0
  24. package/dist/init/settings-generator.d.ts.map +1 -0
  25. package/dist/init/settings-generator.js +132 -0
  26. package/dist/init/settings-generator.js.map +1 -0
  27. package/dist/mcp/client.d.ts +27 -0
  28. package/dist/mcp/client.d.ts.map +1 -0
  29. package/dist/mcp/client.js +93 -0
  30. package/dist/mcp/client.js.map +1 -0
  31. package/dist/mcp/server.d.ts +8 -0
  32. package/dist/mcp/server.d.ts.map +1 -0
  33. package/dist/mcp/server.js +74 -0
  34. package/dist/mcp/server.js.map +1 -0
  35. package/dist/mcp/tools/agent-tools.d.ts +6 -0
  36. package/dist/mcp/tools/agent-tools.d.ts.map +1 -0
  37. package/dist/mcp/tools/agent-tools.js +196 -0
  38. package/dist/mcp/tools/agent-tools.js.map +1 -0
  39. package/dist/mcp/tools/analyze-tools.d.ts +6 -0
  40. package/dist/mcp/tools/analyze-tools.d.ts.map +1 -0
  41. package/dist/mcp/tools/analyze-tools.js +49 -0
  42. package/dist/mcp/tools/analyze-tools.js.map +1 -0
  43. package/dist/mcp/tools/config-tools.d.ts +6 -0
  44. package/dist/mcp/tools/config-tools.d.ts.map +1 -0
  45. package/dist/mcp/tools/config-tools.js +69 -0
  46. package/dist/mcp/tools/config-tools.js.map +1 -0
  47. package/dist/mcp/tools/coordination-tools.d.ts +6 -0
  48. package/dist/mcp/tools/coordination-tools.d.ts.map +1 -0
  49. package/dist/mcp/tools/coordination-tools.js +44 -0
  50. package/dist/mcp/tools/coordination-tools.js.map +1 -0
  51. package/dist/mcp/tools/distiller-tools.d.ts +7 -0
  52. package/dist/mcp/tools/distiller-tools.d.ts.map +1 -0
  53. package/dist/mcp/tools/distiller-tools.js +50 -0
  54. package/dist/mcp/tools/distiller-tools.js.map +1 -0
  55. package/dist/mcp/tools/gcc-tools.d.ts +6 -0
  56. package/dist/mcp/tools/gcc-tools.d.ts.map +1 -0
  57. package/dist/mcp/tools/gcc-tools.js +37 -0
  58. package/dist/mcp/tools/gcc-tools.js.map +1 -0
  59. package/dist/mcp/tools/hooks-tools.d.ts +7 -0
  60. package/dist/mcp/tools/hooks-tools.d.ts.map +1 -0
  61. package/dist/mcp/tools/hooks-tools.js +125 -0
  62. package/dist/mcp/tools/hooks-tools.js.map +1 -0
  63. package/dist/mcp/tools/index.d.ts +5 -0
  64. package/dist/mcp/tools/index.d.ts.map +1 -0
  65. package/dist/mcp/tools/index.js +43 -0
  66. package/dist/mcp/tools/index.js.map +1 -0
  67. package/dist/mcp/tools/memory-tools.d.ts +7 -0
  68. package/dist/mcp/tools/memory-tools.d.ts.map +1 -0
  69. package/dist/mcp/tools/memory-tools.js +153 -0
  70. package/dist/mcp/tools/memory-tools.js.map +1 -0
  71. package/dist/mcp/tools/metrics-tools.d.ts +6 -0
  72. package/dist/mcp/tools/metrics-tools.d.ts.map +1 -0
  73. package/dist/mcp/tools/metrics-tools.js +126 -0
  74. package/dist/mcp/tools/metrics-tools.js.map +1 -0
  75. package/dist/mcp/tools/neural-tools.d.ts +11 -0
  76. package/dist/mcp/tools/neural-tools.d.ts.map +1 -0
  77. package/dist/mcp/tools/neural-tools.js +68 -0
  78. package/dist/mcp/tools/neural-tools.js.map +1 -0
  79. package/dist/mcp/tools/performance-tools.d.ts +6 -0
  80. package/dist/mcp/tools/performance-tools.d.ts.map +1 -0
  81. package/dist/mcp/tools/performance-tools.js +54 -0
  82. package/dist/mcp/tools/performance-tools.js.map +1 -0
  83. package/dist/mcp/tools/security-tools.d.ts +6 -0
  84. package/dist/mcp/tools/security-tools.d.ts.map +1 -0
  85. package/dist/mcp/tools/security-tools.js +51 -0
  86. package/dist/mcp/tools/security-tools.js.map +1 -0
  87. package/dist/mcp/tools/session-tools.d.ts +6 -0
  88. package/dist/mcp/tools/session-tools.d.ts.map +1 -0
  89. package/dist/mcp/tools/session-tools.js +85 -0
  90. package/dist/mcp/tools/session-tools.js.map +1 -0
  91. package/dist/mcp/tools/skills-tools.d.ts +9 -0
  92. package/dist/mcp/tools/skills-tools.d.ts.map +1 -0
  93. package/dist/mcp/tools/skills-tools.js +167 -0
  94. package/dist/mcp/tools/skills-tools.js.map +1 -0
  95. package/dist/mcp/tools/statusline-tools.d.ts +6 -0
  96. package/dist/mcp/tools/statusline-tools.d.ts.map +1 -0
  97. package/dist/mcp/tools/statusline-tools.js +26 -0
  98. package/dist/mcp/tools/statusline-tools.js.map +1 -0
  99. package/dist/mcp/tools/swarm-tools.d.ts +6 -0
  100. package/dist/mcp/tools/swarm-tools.d.ts.map +1 -0
  101. package/dist/mcp/tools/swarm-tools.js +75 -0
  102. package/dist/mcp/tools/swarm-tools.js.map +1 -0
  103. package/dist/mcp/tools/system-tools.d.ts +6 -0
  104. package/dist/mcp/tools/system-tools.d.ts.map +1 -0
  105. package/dist/mcp/tools/system-tools.js +68 -0
  106. package/dist/mcp/tools/system-tools.js.map +1 -0
  107. package/dist/mcp/tools/task-tools.d.ts +6 -0
  108. package/dist/mcp/tools/task-tools.d.ts.map +1 -0
  109. package/dist/mcp/tools/task-tools.js +102 -0
  110. package/dist/mcp/tools/task-tools.js.map +1 -0
  111. package/dist/mcp/types.d.ts +19 -0
  112. package/dist/mcp/types.d.ts.map +1 -0
  113. package/dist/mcp/types.js +5 -0
  114. package/dist/mcp/types.js.map +1 -0
  115. package/dist/metrics/benchmark.d.ts +95 -0
  116. package/dist/metrics/benchmark.d.ts.map +1 -0
  117. package/dist/metrics/benchmark.js +195 -0
  118. package/dist/metrics/benchmark.js.map +1 -0
  119. package/dist/metrics/builtin-benchmarks.d.ts +9 -0
  120. package/dist/metrics/builtin-benchmarks.d.ts.map +1 -0
  121. package/dist/metrics/builtin-benchmarks.js +171 -0
  122. package/dist/metrics/builtin-benchmarks.js.map +1 -0
  123. package/dist/metrics/collector.d.ts +89 -0
  124. package/dist/metrics/collector.d.ts.map +1 -0
  125. package/dist/metrics/collector.js +181 -0
  126. package/dist/metrics/collector.js.map +1 -0
  127. package/dist/napi/index.d.ts +159 -0
  128. package/dist/napi/index.d.ts.map +1 -0
  129. package/dist/napi/index.js +111 -0
  130. package/dist/napi/index.js.map +1 -0
  131. package/dist/output.d.ts +44 -0
  132. package/dist/output.d.ts.map +1 -0
  133. package/dist/output.js +138 -0
  134. package/dist/output.js.map +1 -0
  135. package/dist/parser.d.ts +12 -0
  136. package/dist/parser.d.ts.map +1 -0
  137. package/dist/parser.js +135 -0
  138. package/dist/parser.js.map +1 -0
  139. package/dist/production/circuit-breaker.d.ts +31 -0
  140. package/dist/production/circuit-breaker.d.ts.map +1 -0
  141. package/dist/production/circuit-breaker.js +87 -0
  142. package/dist/production/circuit-breaker.js.map +1 -0
  143. package/dist/production/error-handler.d.ts +13 -0
  144. package/dist/production/error-handler.d.ts.map +1 -0
  145. package/dist/production/error-handler.js +52 -0
  146. package/dist/production/error-handler.js.map +1 -0
  147. package/dist/production/index.d.ts +9 -0
  148. package/dist/production/index.d.ts.map +1 -0
  149. package/dist/production/index.js +5 -0
  150. package/dist/production/index.js.map +1 -0
  151. package/dist/production/rate-limiter.d.ts +22 -0
  152. package/dist/production/rate-limiter.d.ts.map +1 -0
  153. package/dist/production/rate-limiter.js +44 -0
  154. package/dist/production/rate-limiter.js.map +1 -0
  155. package/dist/production/retry.d.ts +9 -0
  156. package/dist/production/retry.d.ts.map +1 -0
  157. package/dist/production/retry.js +32 -0
  158. package/dist/production/retry.js.map +1 -0
  159. package/dist/services/worker-daemon.d.ts +44 -0
  160. package/dist/services/worker-daemon.d.ts.map +1 -0
  161. package/dist/services/worker-daemon.js +99 -0
  162. package/dist/services/worker-daemon.js.map +1 -0
  163. package/dist/services/worker-queue.d.ts +38 -0
  164. package/dist/services/worker-queue.d.ts.map +1 -0
  165. package/dist/services/worker-queue.js +86 -0
  166. package/dist/services/worker-queue.js.map +1 -0
  167. package/dist/statusline/generator.d.ts +12 -0
  168. package/dist/statusline/generator.d.ts.map +1 -0
  169. package/dist/statusline/generator.js +361 -0
  170. package/dist/statusline/generator.js.map +1 -0
  171. package/dist/suggest.d.ts +5 -0
  172. package/dist/suggest.d.ts.map +1 -0
  173. package/dist/suggest.js +40 -0
  174. package/dist/suggest.js.map +1 -0
  175. package/dist/types.d.ts +112 -0
  176. package/dist/types.d.ts.map +1 -0
  177. package/dist/types.js +23 -0
  178. package/dist/types.js.map +1 -0
  179. package/package.json +64 -0
@@ -0,0 +1,288 @@
1
+ /**
2
+ * Interactive init — detects technologies, prompts for skills, installs + distills.
3
+ * Zero runtime deps: uses Node readline for UI.
4
+ */
5
+ import { createInterface } from "node:readline";
6
+ import { spawn } from "node:child_process";
7
+ import { join, dirname } from "node:path";
8
+ import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, lstatSync, rmSync } from "node:fs";
9
+ import { detectTechnologies, distillMarkdown } from "../napi/index.js";
10
+ import { output, color } from "../output.js";
11
+ // ── Simple UI helpers (zero deps) ────────────────────────────────
12
+ function ask(question) {
13
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
14
+ return new Promise((resolve) => {
15
+ rl.question(question, (answer) => {
16
+ rl.close();
17
+ resolve(answer.trim());
18
+ });
19
+ });
20
+ }
21
+ async function confirm(question, defaultYes = true) {
22
+ const hint = defaultYes ? "[Y/n]" : "[y/N]";
23
+ const answer = await ask(`${question} ${hint} `);
24
+ if (answer === "")
25
+ return defaultYes;
26
+ return answer.toLowerCase().startsWith("y");
27
+ }
28
+ async function selectMultiple(title, items) {
29
+ console.log(`\n${color.bold(title)}\n`);
30
+ for (let i = 0; i < items.length; i++) {
31
+ const check = items[i].checked ? color.green("✔") : " ";
32
+ console.log(` ${check} ${i + 1}. ${items[i].label}`);
33
+ }
34
+ console.log(`\n ${color.dim("Enter numbers to toggle (e.g. 1,3,5), 'a' for all, Enter to confirm:")}`);
35
+ const answer = await ask(" > ");
36
+ if (answer.toLowerCase() === "a") {
37
+ return items.map((i) => i.value);
38
+ }
39
+ if (answer === "") {
40
+ return items.filter((i) => i.checked).map((i) => i.value);
41
+ }
42
+ const indices = answer.split(",").map((s) => parseInt(s.trim(), 10) - 1);
43
+ for (const idx of indices) {
44
+ if (idx >= 0 && idx < items.length) {
45
+ items[idx].checked = !items[idx].checked;
46
+ }
47
+ }
48
+ return items.filter((i) => i.checked).map((i) => i.value);
49
+ }
50
+ // ── Skill installation ───────────────────────────────────────────
51
+ function parseSkillPath(skill) {
52
+ const parts = skill.split("/");
53
+ return {
54
+ repo: parts.slice(0, 2).join("/"),
55
+ skillName: parts.slice(2).join("/"),
56
+ };
57
+ }
58
+ async function installSkill(skillPath) {
59
+ const { repo, skillName } = parseSkillPath(skillPath);
60
+ const args = ["-y", "skills", "add", repo];
61
+ if (skillName)
62
+ args.push("--skill", skillName, "-y");
63
+ return new Promise((resolve) => {
64
+ const child = spawn("npx", args, { stdio: ["pipe", "pipe", "pipe"] });
65
+ child.on("close", (code) => resolve(code === 0));
66
+ child.on("error", () => resolve(false));
67
+ });
68
+ }
69
+ // ── TOON distillation of installed skills ────────────────────────
70
+ function distillInstalledSkills(projectRoot) {
71
+ // Skills live in .agents/skills/ with symlinks in .claude/skills/
72
+ const agentsSkillsDir = join(projectRoot, ".agents", "skills");
73
+ const claudeSkillsDir = join(projectRoot, ".claude", "skills");
74
+ const searchDir = existsSync(agentsSkillsDir) ? agentsSkillsDir : claudeSkillsDir;
75
+ if (!existsSync(searchDir))
76
+ return [];
77
+ const distilled = [];
78
+ const toonDir = join(projectRoot, ".aiyoucli", "skills");
79
+ mkdirSync(toonDir, { recursive: true });
80
+ try {
81
+ const entries = readDirRecursive(searchDir);
82
+ for (const entry of entries) {
83
+ if (!entry.endsWith("SKILL.md"))
84
+ continue;
85
+ try {
86
+ const content = readFileSync(entry, "utf-8");
87
+ const toon = distillMarkdown(content);
88
+ const name = dirname(entry).split("/").pop() ?? "unknown";
89
+ const toonPath = join(toonDir, `${name}.dsi.toon`);
90
+ writeFileSync(toonPath, toon);
91
+ distilled.push(toonPath);
92
+ }
93
+ catch (e) {
94
+ // Log individual skill errors but continue
95
+ const name = dirname(entry).split("/").pop() ?? "unknown";
96
+ console.error(` Warning: Failed to distill ${name}: ${e instanceof Error ? e.message : e}`);
97
+ }
98
+ }
99
+ }
100
+ catch (e) {
101
+ console.error(` Warning: Failed to scan skills: ${e instanceof Error ? e.message : e}`);
102
+ }
103
+ return distilled;
104
+ }
105
+ function readDirRecursive(dir) {
106
+ const results = [];
107
+ for (const entry of readdirSync(dir)) {
108
+ const full = join(dir, entry);
109
+ if (lstatSync(full).isDirectory()) {
110
+ results.push(...readDirRecursive(full));
111
+ }
112
+ else {
113
+ results.push(full);
114
+ }
115
+ }
116
+ return results;
117
+ }
118
+ // ── Cleanup original MD skills ───────────────────────────────────
119
+ function cleanupOriginalSkills(projectRoot) {
120
+ // Remove .claude/skills/ (symlinks to MD)
121
+ const claudeSkills = join(projectRoot, ".claude", "skills");
122
+ if (existsSync(claudeSkills)) {
123
+ rmSync(claudeSkills, { recursive: true, force: true });
124
+ }
125
+ // Remove .agents/skills/ (original MD files)
126
+ const agentsSkills = join(projectRoot, ".agents", "skills");
127
+ if (existsSync(agentsSkills)) {
128
+ rmSync(agentsSkills, { recursive: true, force: true });
129
+ }
130
+ // Remove .agents/ if empty
131
+ const agentsDir = join(projectRoot, ".agents");
132
+ if (existsSync(agentsDir)) {
133
+ try {
134
+ const entries = readdirSync(agentsDir).filter((e) => !e.startsWith("."));
135
+ if (entries.length === 0)
136
+ rmSync(agentsDir, { recursive: true, force: true });
137
+ }
138
+ catch { }
139
+ }
140
+ }
141
+ function generateRules(detected, distilledPaths, projectRoot) {
142
+ const rulesDir = join(projectRoot, ".claude", "rules");
143
+ mkdirSync(rulesDir, { recursive: true });
144
+ const ruleMap = {
145
+ frontend: {
146
+ name: "frontend",
147
+ paths: ["src/components/**", "src/pages/**", "*.tsx", "*.jsx", "*.vue", "*.svelte", "*.astro"],
148
+ toonFiles: [],
149
+ },
150
+ backend: {
151
+ name: "backend",
152
+ paths: ["src/api/**", "src/server/**", "*.controller.ts", "*.service.ts", "routes/**"],
153
+ toonFiles: [],
154
+ },
155
+ mobile: {
156
+ name: "mobile",
157
+ paths: ["app/**", "src/screens/**", "*.swift", "*.kt", "*.dart"],
158
+ toonFiles: [],
159
+ },
160
+ styling: {
161
+ name: "styling",
162
+ paths: ["*.css", "*.scss", "*.sass", "tailwind.config.*"],
163
+ toonFiles: [],
164
+ },
165
+ testing: {
166
+ name: "testing",
167
+ paths: ["__tests__/**", "*.test.*", "*.spec.*", "tests/**", "e2e/**"],
168
+ toonFiles: [],
169
+ },
170
+ database: {
171
+ name: "database",
172
+ paths: ["prisma/**", "*.sql", "migrations/**", "drizzle/**"],
173
+ toonFiles: [],
174
+ },
175
+ devops: {
176
+ name: "devops",
177
+ paths: ["Dockerfile", "docker-compose.*", ".github/**", "*.tf", "wrangler.*"],
178
+ toonFiles: [],
179
+ },
180
+ };
181
+ // Map skills to categories by matching tech → skill relationship
182
+ const techToSkills = {};
183
+ for (const tech of detected) {
184
+ for (const skill of tech.skills) {
185
+ const skillName = skill.split("/").pop() ?? "";
186
+ const toonMatch = distilledPaths.find((p) => p.includes(skillName));
187
+ if (toonMatch) {
188
+ (techToSkills[tech.category] ??= []).push(toonMatch);
189
+ }
190
+ }
191
+ }
192
+ // Write rules that have matching categories
193
+ const activeCategories = new Set(detected.map((t) => t.category));
194
+ for (const [category, rule] of Object.entries(ruleMap)) {
195
+ if (!activeCategories.has(category))
196
+ continue;
197
+ const toonPaths = [...new Set(techToSkills[category] ?? [])];
198
+ const relativePaths = toonPaths.map((p) => p.replace(projectRoot + "/", ""));
199
+ let content = `---\npaths:\n`;
200
+ for (const p of rule.paths) {
201
+ content += ` - "${p}"\n`;
202
+ }
203
+ content += `---\n\n`;
204
+ // Import TOON skills relevant to this category
205
+ if (relativePaths.length > 0) {
206
+ for (const tp of relativePaths) {
207
+ content += `@${tp}\n`;
208
+ }
209
+ }
210
+ content += `\nDetected: ${detected.filter((t) => t.category === category).map((t) => t.name).join(", ")}\n`;
211
+ content += `Use .aiyoucli/skills/*.dsi.toon for detailed guidance.\n`;
212
+ writeFileSync(join(rulesDir, `${rule.name}.md`), content);
213
+ }
214
+ }
215
+ // ── Main interactive flow ────────────────────────────────────────
216
+ export async function interactiveInit(projectRoot) {
217
+ const paths = [];
218
+ console.log(`\n${color.bold(color.cyan("■ aiyoucli init"))}\n`);
219
+ // 1. Detect technologies
220
+ const spinner = output.spinner("Scanning project...");
221
+ spinner.start();
222
+ const result = detectTechnologies(projectRoot);
223
+ spinner.stop();
224
+ if (result.total_technologies === 0) {
225
+ console.log(color.dim(" No technologies detected. Generating base config only.\n"));
226
+ return paths;
227
+ }
228
+ // 2. Show detected technologies
229
+ console.log(` ${color.green("Detected")} ${result.total_technologies} technologies:\n`);
230
+ const byCategory = {};
231
+ for (const tech of result.detected) {
232
+ (byCategory[tech.category] ??= []).push(tech.name);
233
+ }
234
+ for (const [cat, techs] of Object.entries(byCategory)) {
235
+ console.log(` ${color.dim(cat + ":")} ${techs.join(", ")}`);
236
+ }
237
+ // 3. Ask about skills
238
+ if (result.total_skills > 0) {
239
+ console.log(`\n ${color.yellow(String(result.total_skills))} community skills available\n`);
240
+ const wantSkills = await confirm(" Install recommended skills?");
241
+ if (wantSkills) {
242
+ // Build selection list
243
+ const items = result.skills.map((s) => {
244
+ const name = s.split("/").pop() ?? s;
245
+ const repo = s.split("/").slice(0, 2).join("/");
246
+ return {
247
+ label: `${name} ${color.dim(`(${repo})`)}`,
248
+ value: s,
249
+ checked: true,
250
+ };
251
+ });
252
+ const selected = await selectMultiple("Select skills to install:", items);
253
+ if (selected.length > 0) {
254
+ console.log("");
255
+ for (const skill of selected) {
256
+ const name = skill.split("/").pop() ?? skill;
257
+ process.stdout.write(` ${color.dim("installing")} ${name}...`);
258
+ const ok = await installSkill(skill);
259
+ if (ok) {
260
+ console.log(` ${color.green("✔")}`);
261
+ }
262
+ else {
263
+ console.log(` ${color.red("✘")}`);
264
+ }
265
+ }
266
+ // 4. Distill installed skills to TOON
267
+ console.log("");
268
+ const distilledSpinner = output.spinner("Distilling skills to TOON...");
269
+ distilledSpinner.start();
270
+ const distilled = distillInstalledSkills(projectRoot);
271
+ distilledSpinner.stop();
272
+ if (distilled.length > 0) {
273
+ console.log(` ${color.green("Distilled")} ${distilled.length} skills to TOON (${color.dim("optimized for AI")})`);
274
+ paths.push(...distilled);
275
+ }
276
+ // 5. Remove original MD skills (TOON replaces them)
277
+ cleanupOriginalSkills(projectRoot);
278
+ console.log(` ${color.green("Cleaned")} original .md skills (TOON replaces them)`);
279
+ // 6. Generate path-based rules pointing to TOON
280
+ generateRules(result.detected, distilled, projectRoot);
281
+ console.log(` ${color.green("Generated")} .claude/rules/ → .aiyoucli/skills/*.dsi.toon`);
282
+ }
283
+ }
284
+ }
285
+ console.log("");
286
+ return paths;
287
+ }
288
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/init/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Generates tool-specific configuration files:
3
+ * - .mcp.json (MCP server config for Claude Code)
4
+ * - .claude/settings.json (statusLine hook for Claude Code)
5
+ * - CLAUDE.md (pointer to AGENTS.md)
6
+ * - GEMINI.md (pointer to AGENTS.md + Gemini-specific config)
7
+ * - .aiyoucli/helpers/statusline.cjs (standalone statusline script)
8
+ */
9
+ /**
10
+ * Generate tool-specific configuration files.
11
+ * Supports: Claude Code, Gemini CLI.
12
+ * Will not overwrite existing files.
13
+ *
14
+ * @returns Array of absolute paths to generated files.
15
+ */
16
+ export declare function generateSettings(projectRoot: string): Promise<string[]>;
17
+ //# sourceMappingURL=settings-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-generator.d.ts","sourceRoot":"","sources":["../../src/init/settings-generator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA6FH;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqD7E"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Generates tool-specific configuration files:
3
+ * - .mcp.json (MCP server config for Claude Code)
4
+ * - .claude/settings.json (statusLine hook for Claude Code)
5
+ * - CLAUDE.md (pointer to AGENTS.md)
6
+ * - GEMINI.md (pointer to AGENTS.md + Gemini-specific config)
7
+ * - .aiyoucli/helpers/statusline.cjs (standalone statusline script)
8
+ */
9
+ import { writeFileSync, existsSync, readFileSync, mkdirSync } from "node:fs";
10
+ import { join, basename, dirname } from "node:path";
11
+ import { execSync } from "node:child_process";
12
+ import { generateStatuslineScript } from "../statusline/generator.js";
13
+ import { distillMarkdown } from "../napi/index.js";
14
+ function detectProjectName(projectRoot) {
15
+ const pkgPath = join(projectRoot, "package.json");
16
+ if (existsSync(pkgPath)) {
17
+ try {
18
+ const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
19
+ if (pkg.name)
20
+ return pkg.name;
21
+ }
22
+ catch { }
23
+ }
24
+ return basename(projectRoot);
25
+ }
26
+ function detectGitAuthor() {
27
+ try {
28
+ const name = execSync("git config user.name", { encoding: "utf-8" }).trim();
29
+ const email = execSync("git config user.email", { encoding: "utf-8" }).trim();
30
+ return { name: name || "Author", email: email || "author@example.com" };
31
+ }
32
+ catch {
33
+ return { name: "Author", email: "author@example.com" };
34
+ }
35
+ }
36
+ function writeIfNotExists(filePath, content) {
37
+ if (existsSync(filePath)) {
38
+ return { path: filePath, created: false };
39
+ }
40
+ mkdirSync(dirname(filePath), { recursive: true });
41
+ writeFileSync(filePath, content, "utf-8");
42
+ return { path: filePath, created: true };
43
+ }
44
+ // ── .mcp.json (MCP server for Claude Code) ─────────────────────
45
+ function buildMcpJson() {
46
+ return {
47
+ mcpServers: {
48
+ aiyoucli: {
49
+ command: "aiyoucli-mcp",
50
+ args: [],
51
+ env: {},
52
+ },
53
+ },
54
+ };
55
+ }
56
+ // ── .claude/settings.json (statusLine hook) ────────────────────
57
+ function buildClaudeSettings() {
58
+ return {
59
+ statusLine: {
60
+ type: "command",
61
+ command: "aiyoucli statusline --compact",
62
+ },
63
+ };
64
+ }
65
+ // ── CLAUDE.md ──────────────────────────────────────────────────
66
+ function buildClaudeMd(name, author) {
67
+ return `@.aiyoucli/agents.dsi.toon
68
+
69
+ Commits: ${author.name} <${author.email}>
70
+ MCP: aiyoucli-mcp (configured in .mcp.json)
71
+ Build: npm install && npm run build
72
+ Test: npm test
73
+ `;
74
+ }
75
+ // ── GEMINI.md ──────────────────────────────────────────────────
76
+ function buildGeminiMd(name, author) {
77
+ return `See .aiyoucli/agents.dsi.toon for project instructions (dense format).
78
+
79
+ Commits: ${author.name} <${author.email}>
80
+ MCP: aiyoucli-mcp
81
+ Status: aiyoucli statusline
82
+ `;
83
+ }
84
+ // ── Main ────────────────────────────────────────────────────────
85
+ /**
86
+ * Generate tool-specific configuration files.
87
+ * Supports: Claude Code, Gemini CLI.
88
+ * Will not overwrite existing files.
89
+ *
90
+ * @returns Array of absolute paths to generated files.
91
+ */
92
+ export async function generateSettings(projectRoot) {
93
+ const name = detectProjectName(projectRoot);
94
+ const author = detectGitAuthor();
95
+ const paths = [];
96
+ // 1. .mcp.json (MCP server for Claude Code)
97
+ const r0 = writeIfNotExists(join(projectRoot, ".mcp.json"), JSON.stringify(buildMcpJson(), null, 2) + "\n");
98
+ if (r0.created)
99
+ paths.push(r0.path);
100
+ // 2. .claude/settings.json (statusLine hook)
101
+ const r1 = writeIfNotExists(join(projectRoot, ".claude", "settings.json"), JSON.stringify(buildClaudeSettings(), null, 2) + "\n");
102
+ if (r1.created)
103
+ paths.push(r1.path);
104
+ // 3. CLAUDE.md
105
+ const r2 = writeIfNotExists(join(projectRoot, "CLAUDE.md"), buildClaudeMd(name, author));
106
+ if (r2.created)
107
+ paths.push(r2.path);
108
+ // 4. GEMINI.md
109
+ const r3 = writeIfNotExists(join(projectRoot, "GEMINI.md"), buildGeminiMd(name, author));
110
+ if (r3.created)
111
+ paths.push(r3.path);
112
+ // 5. Statusline script
113
+ const statuslinePath = generateStatuslineScript(projectRoot);
114
+ paths.push(statuslinePath);
115
+ // 6. DSI TOON — distill AGENTS.md if it exists
116
+ const agentsMdPath = join(projectRoot, "AGENTS.md");
117
+ if (existsSync(agentsMdPath)) {
118
+ try {
119
+ const md = readFileSync(agentsMdPath, "utf-8");
120
+ const toon = distillMarkdown(md);
121
+ const toonPath = join(projectRoot, ".aiyoucli", "agents.dsi.toon");
122
+ mkdirSync(dirname(toonPath), { recursive: true });
123
+ writeFileSync(toonPath, toon, "utf-8");
124
+ paths.push(toonPath);
125
+ }
126
+ catch {
127
+ // Non-critical — NAPI might not be available in all environments
128
+ }
129
+ }
130
+ return paths;
131
+ }
132
+ //# sourceMappingURL=settings-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-generator.js","sourceRoot":"","sources":["../../src/init/settings-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * MCP tool registry — collects tools from modules and dispatches calls.
3
+ * Includes production hardening: circuit breaker + retry.
4
+ */
5
+ import type { MCPTool, MCPToolResult } from "../types.js";
6
+ declare class ToolRegistry {
7
+ private tools;
8
+ register(tool: MCPTool): void;
9
+ registerAll(tools: MCPTool[]): void;
10
+ get(name: string): MCPTool | undefined;
11
+ list(): MCPTool[];
12
+ listForMCP(): Array<{
13
+ name: string;
14
+ description: string;
15
+ inputSchema: MCPTool["inputSchema"];
16
+ }>;
17
+ private validateInput;
18
+ call(name: string, input: Record<string, unknown>): Promise<MCPToolResult>;
19
+ getCircuitBreakerStats(): import("../production/circuit-breaker.js").CircuitBreakerStats;
20
+ }
21
+ export declare const registry: ToolRegistry;
22
+ /**
23
+ * Convenience function to call a tool by name.
24
+ */
25
+ export declare function callTool(name: string, input: Record<string, unknown>): Promise<MCPToolResult>;
26
+ export {};
27
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAY1D,cAAM,YAAY;IAChB,OAAO,CAAC,KAAK,CAA8B;IAE3C,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI7B,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI;IAInC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItC,IAAI,IAAI,OAAO,EAAE;IAIjB,UAAU,IAAI,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;KACrC,CAAC;IAQF,OAAO,CAAC,aAAa;IAiBf,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,aAAa,CAAC;IAkCzB,sBAAsB;CAGvB;AAED,eAAO,MAAM,QAAQ,cAAqB,CAAC;AAE3C;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,aAAa,CAAC,CAExB"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * MCP tool registry — collects tools from modules and dispatches calls.
3
+ * Includes production hardening: circuit breaker + retry.
4
+ */
5
+ import { CircuitBreaker } from "../production/circuit-breaker.js";
6
+ import { withRetry } from "../production/retry.js";
7
+ import { handleError } from "../production/error-handler.js";
8
+ import { metrics } from "../metrics/collector.js";
9
+ const breaker = new CircuitBreaker({
10
+ failureThreshold: 10,
11
+ resetTimeout: 15_000,
12
+ halfOpenMax: 2,
13
+ });
14
+ class ToolRegistry {
15
+ tools = new Map();
16
+ register(tool) {
17
+ this.tools.set(tool.name, tool);
18
+ }
19
+ registerAll(tools) {
20
+ for (const t of tools)
21
+ this.register(t);
22
+ }
23
+ get(name) {
24
+ return this.tools.get(name);
25
+ }
26
+ list() {
27
+ return Array.from(this.tools.values());
28
+ }
29
+ listForMCP() {
30
+ return this.list().map((t) => ({
31
+ name: t.name,
32
+ description: t.description,
33
+ inputSchema: t.inputSchema,
34
+ }));
35
+ }
36
+ validateInput(tool, input) {
37
+ const schema = tool.inputSchema;
38
+ if (schema.required) {
39
+ for (const key of schema.required) {
40
+ if (!(key in input) || input[key] === undefined) {
41
+ return `Missing required parameter: ${key}`;
42
+ }
43
+ }
44
+ }
45
+ for (const key of Object.keys(input)) {
46
+ if (!(key in schema.properties)) {
47
+ return `Unknown parameter: ${key}`;
48
+ }
49
+ }
50
+ return null;
51
+ }
52
+ async call(name, input) {
53
+ const tool = this.tools.get(name);
54
+ if (!tool) {
55
+ return {
56
+ content: [{ type: "text", text: `Unknown tool: ${name}` }],
57
+ isError: true,
58
+ };
59
+ }
60
+ const validationError = this.validateInput(tool, input);
61
+ if (validationError) {
62
+ return {
63
+ content: [{ type: "text", text: `Validation error: ${validationError}` }],
64
+ isError: true,
65
+ };
66
+ }
67
+ const endToolCall = metrics.startToolCall(name);
68
+ try {
69
+ const result = await breaker.execute(() => withRetry(() => tool.handler(input), { maxRetries: 1, baseDelay: 500 }));
70
+ endToolCall(true);
71
+ return result;
72
+ }
73
+ catch (err) {
74
+ const { message, code } = handleError(err);
75
+ endToolCall(false, code);
76
+ return {
77
+ content: [{ type: "text", text: `[${code}] ${message}` }],
78
+ isError: true,
79
+ };
80
+ }
81
+ }
82
+ getCircuitBreakerStats() {
83
+ return breaker.getStats();
84
+ }
85
+ }
86
+ export const registry = new ToolRegistry();
87
+ /**
88
+ * Convenience function to call a tool by name.
89
+ */
90
+ export async function callTool(name, input) {
91
+ return registry.call(name, input);
92
+ }
93
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * MCP stdio server — JSON-RPC 2.0 over stdin/stdout.
3
+ *
4
+ * This is the primary API surface that Claude Code and other MCP clients
5
+ * use to communicate with aiyoucli.
6
+ */
7
+ export declare function startMCPServer(): void;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,wBAAgB,cAAc,IAAI,IAAI,CAsBrC"}