nex-level-code 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 (48) hide show
  1. package/dist/commands/doctor.d.ts +3 -0
  2. package/dist/commands/doctor.d.ts.map +1 -0
  3. package/dist/commands/doctor.js +164 -0
  4. package/dist/commands/doctor.js.map +1 -0
  5. package/dist/commands/install.d.ts +3 -0
  6. package/dist/commands/install.d.ts.map +1 -0
  7. package/dist/commands/install.js +31 -0
  8. package/dist/commands/install.js.map +1 -0
  9. package/dist/commands/mcp.d.ts +3 -0
  10. package/dist/commands/mcp.d.ts.map +1 -0
  11. package/dist/commands/mcp.js +56 -0
  12. package/dist/commands/mcp.js.map +1 -0
  13. package/dist/commands/status.d.ts +3 -0
  14. package/dist/commands/status.d.ts.map +1 -0
  15. package/dist/commands/status.js +142 -0
  16. package/dist/commands/status.js.map +1 -0
  17. package/dist/commands/uninstall.d.ts +3 -0
  18. package/dist/commands/uninstall.d.ts.map +1 -0
  19. package/dist/commands/uninstall.js +114 -0
  20. package/dist/commands/uninstall.js.map +1 -0
  21. package/dist/commands/update.d.ts +3 -0
  22. package/dist/commands/update.d.ts.map +1 -0
  23. package/dist/commands/update.js +26 -0
  24. package/dist/commands/update.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +23 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/mcp/server.d.ts +12 -0
  30. package/dist/mcp/server.d.ts.map +1 -0
  31. package/dist/mcp/server.js +270 -0
  32. package/dist/mcp/server.js.map +1 -0
  33. package/dist/registry/tools.d.ts +64 -0
  34. package/dist/registry/tools.d.ts.map +1 -0
  35. package/dist/registry/tools.js +212 -0
  36. package/dist/registry/tools.js.map +1 -0
  37. package/dist/services/install.d.ts +36 -0
  38. package/dist/services/install.d.ts.map +1 -0
  39. package/dist/services/install.js +371 -0
  40. package/dist/services/install.js.map +1 -0
  41. package/package.json +57 -0
  42. package/templates/hooks/dev-logger.js +252 -0
  43. package/templates/hooks/memory-check.js +64 -0
  44. package/templates/hooks/session-start.js +115 -0
  45. package/templates/rules/claude.md +27 -0
  46. package/templates/rules/cursor.md +27 -0
  47. package/templates/starters/MEMORY.md +23 -0
  48. package/templates/starters/session-handoff.md +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/services/install.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,cAAc,EAAqC,MAAM,mBAAmB,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,cAAc,CAAC;IACrB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAgBD,qBAAa,cAAc;IAEnB,GAAG,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;YAwDjD,WAAW;YAiCX,kBAAkB;YAuClB,aAAa;YA6Eb,cAAc;YAoCd,YAAY;YA2DZ,kBAAkB;YAgDlB,YAAY;IAwC1B,OAAO,CAAC,YAAY;CAoBrB"}
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ /**
3
+ * NLC Install Service — The core of Nex Level Code.
4
+ *
5
+ * Detects the AI tool, copies hook scripts, registers hooks,
6
+ * sets permissions, creates starter files, and adds MCP config.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
20
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
21
+ }) : function(o, v) {
22
+ o["default"] = v;
23
+ });
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.InstallService = void 0;
46
+ const fs = __importStar(require("fs-extra"));
47
+ const path = __importStar(require("path"));
48
+ const os = __importStar(require("os"));
49
+ const chalk_1 = __importDefault(require("chalk"));
50
+ const tools_1 = require("../registry/tools");
51
+ /**
52
+ * Get the templates directory (shipped inside the npm package).
53
+ */
54
+ function getTemplatesDir() {
55
+ return path.join(__dirname, '..', '..', 'templates');
56
+ }
57
+ /**
58
+ * Get the node executable path (full path for Windows compatibility).
59
+ */
60
+ function getNodePath() {
61
+ return process.execPath;
62
+ }
63
+ class InstallService {
64
+ async run(options = {}) {
65
+ const tool = await this.resolveTool(options.tool);
66
+ const templatesDir = getTemplatesDir();
67
+ const nodePath = getNodePath();
68
+ const result = {
69
+ tool,
70
+ scriptsInstalled: [],
71
+ hooksRegistered: [],
72
+ rulesFile: null,
73
+ starterFiles: [],
74
+ mcpConfigured: false,
75
+ permissionsSet: false,
76
+ warnings: [],
77
+ };
78
+ console.log(chalk_1.default.bold.green('\n Nex Level Code (NLC) — Installing...\n'));
79
+ console.log(chalk_1.default.dim(` Tool: ${tool.displayName}`));
80
+ console.log(chalk_1.default.dim(` Templates: ${templatesDir}\n`));
81
+ // Step 1: Install hook scripts
82
+ if (!options.skipHooks && tool.hooks.supported) {
83
+ await this.installHookScripts(tool, templatesDir, result, options);
84
+ }
85
+ else if (!tool.hooks.supported) {
86
+ result.warnings.push(`${tool.displayName} doesn't support lifecycle hooks yet. Hook scripts skipped.`);
87
+ }
88
+ // Step 2: Register hooks in settings
89
+ if (!options.skipHooks && tool.hooks.supported) {
90
+ await this.registerHooks(tool, nodePath, result, options);
91
+ }
92
+ // Step 3: Set permissions
93
+ if (tool.permissions.supported) {
94
+ await this.setPermissions(tool, result, options);
95
+ }
96
+ // Step 4: Install behavioral rules
97
+ if (!options.skipRules) {
98
+ await this.installRules(tool, templatesDir, result, options);
99
+ }
100
+ // Step 5: Create starter files
101
+ await this.createStarterFiles(tool, templatesDir, result, options);
102
+ // Step 6: Configure MCP
103
+ await this.configureMcp(tool, result, options);
104
+ // Summary
105
+ this.printSummary(result);
106
+ return result;
107
+ }
108
+ // ─── Tool Resolution ────────────────────────────────────────
109
+ async resolveTool(toolId) {
110
+ if (toolId) {
111
+ const tool = (0, tools_1.getToolById)(toolId);
112
+ if (!tool)
113
+ throw new Error(`Unknown tool: ${toolId}. Valid options: claude, cursor, github, windsurf, codex`);
114
+ return tool;
115
+ }
116
+ const detected = (0, tools_1.detectInstalledTools)();
117
+ if (detected.length === 0) {
118
+ throw new Error('No AI coding tools detected. Install Claude Code, Cursor, or another supported tool first.\n' +
119
+ 'Or specify one explicitly: nlc install --tool claude');
120
+ }
121
+ if (detected.length === 1) {
122
+ console.log(chalk_1.default.dim(` Auto-detected: ${detected[0].displayName}\n`));
123
+ return detected[0];
124
+ }
125
+ // Multiple tools found — prefer Claude Code if available
126
+ const claude = detected.find(t => t.id === 'claude');
127
+ if (claude) {
128
+ console.log(chalk_1.default.dim(` Multiple tools detected. Using: ${claude.displayName}\n`));
129
+ return claude;
130
+ }
131
+ return detected[0];
132
+ }
133
+ // ─── Step 1: Hook Scripts ───────────────────────────────────
134
+ async installHookScripts(tool, templatesDir, result, options) {
135
+ console.log(chalk_1.default.cyan(' [1/6] Installing hook scripts...'));
136
+ const scriptsDir = tool.paths.scriptsDir;
137
+ await fs.ensureDir(scriptsDir);
138
+ const hooks = ['session-start.js', 'memory-check.js', 'dev-logger.js'];
139
+ for (const hookFile of hooks) {
140
+ const src = path.join(templatesDir, 'hooks', hookFile);
141
+ const dest = path.join(scriptsDir, `nlc-${hookFile}`);
142
+ if (!await fs.pathExists(src)) {
143
+ result.warnings.push(`Template not found: ${hookFile}`);
144
+ continue;
145
+ }
146
+ if (await fs.pathExists(dest) && !options.force) {
147
+ result.warnings.push(`${hookFile} already exists. Use --force to overwrite.`);
148
+ continue;
149
+ }
150
+ // Read template and replace placeholders
151
+ let content = await fs.readFile(src, 'utf-8');
152
+ content = content.replace(/\{\{TOOL_ID\}\}/g, tool.id);
153
+ await fs.writeFile(dest, content);
154
+ result.scriptsInstalled.push(dest);
155
+ console.log(chalk_1.default.dim(` ✓ ${path.basename(dest)}`));
156
+ }
157
+ }
158
+ // ─── Step 2: Register Hooks ─────────────────────────────────
159
+ async registerHooks(tool, nodePath, result, options) {
160
+ console.log(chalk_1.default.cyan(' [2/6] Registering hooks...'));
161
+ const settingsFile = tool.paths.settingsFile;
162
+ let settings = {};
163
+ if (await fs.pathExists(settingsFile)) {
164
+ try {
165
+ settings = await fs.readJSON(settingsFile);
166
+ }
167
+ catch {
168
+ result.warnings.push(`Could not parse ${settingsFile}. Creating new.`);
169
+ }
170
+ }
171
+ if (!settings.hooks)
172
+ settings.hooks = {};
173
+ const scriptsDir = tool.paths.scriptsDir;
174
+ const q = (s) => `"${s}"`;
175
+ // Hook mapping: event → script file
176
+ const hookMap = {
177
+ SessionStart: [
178
+ { script: 'nlc-session-start.js', timeout: 5 },
179
+ ],
180
+ UserPromptSubmit: [
181
+ { script: 'nlc-memory-check.js', timeout: 5 },
182
+ ],
183
+ Stop: [
184
+ { script: 'nlc-dev-logger.js', timeout: 30 },
185
+ ],
186
+ };
187
+ for (const [event, scripts] of Object.entries(hookMap)) {
188
+ if (!tool.hooks.events.includes(event))
189
+ continue;
190
+ if (!settings.hooks[event])
191
+ settings.hooks[event] = [];
192
+ for (const { script, timeout } of scripts) {
193
+ const scriptPath = path.join(scriptsDir, script);
194
+ const command = `${q(nodePath)} ${q(scriptPath)}`;
195
+ // Check if this hook is already registered
196
+ const alreadyRegistered = settings.hooks[event].some((hookGroup) => hookGroup.hooks?.some((h) => h.command?.includes(script)));
197
+ if (alreadyRegistered && !options.force) {
198
+ result.warnings.push(`Hook ${event}→${script} already registered.`);
199
+ continue;
200
+ }
201
+ if (alreadyRegistered && options.force) {
202
+ // Remove existing NLC hooks for this event
203
+ settings.hooks[event] = settings.hooks[event].filter((hookGroup) => !hookGroup.hooks?.some((h) => h.command?.includes('nlc-')));
204
+ }
205
+ settings.hooks[event].push({
206
+ hooks: [{ type: 'command', command, timeout }],
207
+ });
208
+ result.hooksRegistered.push(`${event} → ${script}`);
209
+ console.log(chalk_1.default.dim(` ✓ ${event} → ${script}`));
210
+ }
211
+ }
212
+ await fs.ensureDir(path.dirname(settingsFile));
213
+ await fs.writeJSON(settingsFile, settings, { spaces: 2 });
214
+ }
215
+ // ─── Step 3: Permissions ────────────────────────────────────
216
+ async setPermissions(tool, result, options) {
217
+ console.log(chalk_1.default.cyan(' [3/6] Setting permissions...'));
218
+ const settingsFile = tool.paths.settingsFile;
219
+ let settings = {};
220
+ if (await fs.pathExists(settingsFile)) {
221
+ try {
222
+ settings = await fs.readJSON(settingsFile);
223
+ }
224
+ catch { }
225
+ }
226
+ if (!settings.permissions)
227
+ settings.permissions = {};
228
+ if (!settings.permissions.allow)
229
+ settings.permissions.allow = [];
230
+ if (!settings.permissions.deny)
231
+ settings.permissions.deny = [];
232
+ // Add any missing permissions
233
+ let added = 0;
234
+ for (const perm of tool.permissions.allowList) {
235
+ if (!settings.permissions.allow.includes(perm)) {
236
+ settings.permissions.allow.push(perm);
237
+ added++;
238
+ }
239
+ }
240
+ await fs.writeJSON(settingsFile, settings, { spaces: 2 });
241
+ result.permissionsSet = true;
242
+ console.log(chalk_1.default.dim(` ✓ ${added} permissions added (${settings.permissions.allow.length} total)`));
243
+ }
244
+ // ─── Step 4: Behavioral Rules ───────────────────────────────
245
+ async installRules(tool, templatesDir, result, options) {
246
+ console.log(chalk_1.default.cyan(' [4/6] Installing behavioral rules...'));
247
+ const rulesFile = tool.paths.rulesFile;
248
+ if (!rulesFile) {
249
+ result.warnings.push(`${tool.displayName} doesn't have a known rules file location.`);
250
+ return;
251
+ }
252
+ const templateFile = path.join(templatesDir, 'rules', `${tool.id}.md`);
253
+ if (!await fs.pathExists(templateFile)) {
254
+ // Fall back to generic rules
255
+ const genericTemplate = path.join(templatesDir, 'rules', 'claude.md');
256
+ if (!await fs.pathExists(genericTemplate)) {
257
+ result.warnings.push('No rules template found.');
258
+ return;
259
+ }
260
+ }
261
+ // If rules file already exists, append NLC rules rather than overwriting
262
+ const rulesPath = path.resolve(rulesFile);
263
+ const templateContent = await fs.readFile(await fs.pathExists(templateFile) ? templateFile : path.join(templatesDir, 'rules', 'claude.md'), 'utf-8');
264
+ if (await fs.pathExists(rulesPath)) {
265
+ const existing = await fs.readFile(rulesPath, 'utf-8');
266
+ if (existing.includes('Nex Level Code')) {
267
+ if (!options.force) {
268
+ result.warnings.push(`${rulesFile} already contains NLC rules. Use --force to overwrite.`);
269
+ return;
270
+ }
271
+ }
272
+ // Append NLC section if not present
273
+ if (!existing.includes('Nex Level Code')) {
274
+ const separator = '\n\n---\n\n';
275
+ await fs.writeFile(rulesPath, existing + separator + templateContent);
276
+ result.rulesFile = rulesPath;
277
+ console.log(chalk_1.default.dim(` ✓ Appended NLC rules to ${rulesFile}`));
278
+ return;
279
+ }
280
+ }
281
+ await fs.writeFile(rulesPath, templateContent);
282
+ result.rulesFile = rulesPath;
283
+ console.log(chalk_1.default.dim(` ✓ Created ${rulesFile}`));
284
+ }
285
+ // ─── Step 5: Starter Files ──────────────────────────────────
286
+ async createStarterFiles(tool, templatesDir, result, options) {
287
+ console.log(chalk_1.default.cyan(' [5/6] Creating starter files...'));
288
+ // Determine where to put starter files
289
+ // For Claude Code, they go in the auto-memory directory
290
+ const home = os.homedir();
291
+ let starterDir;
292
+ if (tool.id === 'claude') {
293
+ // Use Claude's project-based memory directory
294
+ const cwd = process.cwd();
295
+ const key = cwd
296
+ .replace(/\\/g, '-').replace(/\//g, '-')
297
+ .replace(/:/g, '-').replace(/_/g, '-')
298
+ .replace(/^([a-z])/, (m) => m.toUpperCase());
299
+ const lowerKey = key.replace(/^([A-Z])/, (m) => m.toLowerCase());
300
+ starterDir = path.join(home, '.claude', 'projects', lowerKey, 'memory');
301
+ }
302
+ else {
303
+ starterDir = path.join(home, '.nlc', 'projects', 'default');
304
+ }
305
+ await fs.ensureDir(starterDir);
306
+ const starters = ['session-handoff.md', 'MEMORY.md'];
307
+ for (const file of starters) {
308
+ const src = path.join(templatesDir, 'starters', file);
309
+ const dest = path.join(starterDir, file);
310
+ if (!await fs.pathExists(src))
311
+ continue;
312
+ if (await fs.pathExists(dest) && !options.force) {
313
+ result.warnings.push(`${file} already exists at ${starterDir}. Skipped.`);
314
+ continue;
315
+ }
316
+ await fs.copy(src, dest);
317
+ result.starterFiles.push(dest);
318
+ console.log(chalk_1.default.dim(` ✓ ${file} → ${starterDir}`));
319
+ }
320
+ }
321
+ // ─── Step 6: MCP Config ─────────────────────────────────────
322
+ async configureMcp(tool, result, options) {
323
+ console.log(chalk_1.default.cyan(' [6/6] Configuring MCP server...'));
324
+ const mcpConfigFile = path.resolve(tool.paths.mcpConfigFile);
325
+ let config = {};
326
+ if (await fs.pathExists(mcpConfigFile)) {
327
+ try {
328
+ config = await fs.readJSON(mcpConfigFile);
329
+ }
330
+ catch {
331
+ result.warnings.push(`Could not parse ${mcpConfigFile}. Creating new.`);
332
+ }
333
+ }
334
+ if (!config.mcpServers)
335
+ config.mcpServers = {};
336
+ if (config.mcpServers['nex-level-code'] && !options.force) {
337
+ result.warnings.push('NLC MCP already configured.');
338
+ result.mcpConfigured = true;
339
+ console.log(chalk_1.default.dim(' ✓ Already configured'));
340
+ return;
341
+ }
342
+ config.mcpServers['nex-level-code'] = {
343
+ command: getNodePath(),
344
+ args: [path.join(__dirname, '..', '..', 'dist', 'mcp-server.js')],
345
+ };
346
+ await fs.ensureDir(path.dirname(mcpConfigFile));
347
+ await fs.writeJSON(mcpConfigFile, config, { spaces: 2 });
348
+ result.mcpConfigured = true;
349
+ console.log(chalk_1.default.dim(' ✓ NLC MCP server registered'));
350
+ }
351
+ // ─── Summary ────────────────────────────────────────────────
352
+ printSummary(result) {
353
+ console.log(chalk_1.default.bold.green('\n ✓ Nex Level Code installed!\n'));
354
+ console.log(chalk_1.default.white(` Tool: ${result.tool.displayName}`));
355
+ console.log(chalk_1.default.white(` Scripts: ${result.scriptsInstalled.length} installed`));
356
+ console.log(chalk_1.default.white(` Hooks: ${result.hooksRegistered.length} registered`));
357
+ console.log(chalk_1.default.white(` Rules: ${result.rulesFile ? 'installed' : 'skipped'}`));
358
+ console.log(chalk_1.default.white(` Starters: ${result.starterFiles.length} created`));
359
+ console.log(chalk_1.default.white(` MCP: ${result.mcpConfigured ? 'configured' : 'skipped'}`));
360
+ console.log(chalk_1.default.white(` Permissions: ${result.permissionsSet ? 'set' : 'skipped'}`));
361
+ if (result.warnings.length > 0) {
362
+ console.log(chalk_1.default.yellow('\n Warnings:'));
363
+ for (const w of result.warnings) {
364
+ console.log(chalk_1.default.yellow(` ⚠ ${w}`));
365
+ }
366
+ }
367
+ console.log(chalk_1.default.dim('\n Your agent is ready. Start a new session to activate.\n'));
368
+ }
369
+ }
370
+ exports.InstallService = InstallService;
371
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/services/install.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "nex-level-code",
3
+ "version": "0.1.0",
4
+ "description": "Nex Level Code (NLC) — 1-click setup for AI coding agent infrastructure. Memory, logging, workflow, and behavioral rules for Claude Code, Cursor, Codex, and more.",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "nlc": "dist/index.js",
8
+ "nex-level-code": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist/**/*",
12
+ "templates/**/*",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "engines": {
17
+ "node": ">=20.0.0"
18
+ },
19
+ "scripts": {
20
+ "build": "tsc",
21
+ "dev": "tsx src/index.ts",
22
+ "start": "node dist/index.js",
23
+ "prepare": "tsc",
24
+ "prepublishOnly": "npm run build",
25
+ "release": "npm version patch && npm publish --access public"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public",
29
+ "registry": "https://registry.npmjs.org/"
30
+ },
31
+ "keywords": [
32
+ "claude-code",
33
+ "cursor",
34
+ "codex",
35
+ "ai-coding",
36
+ "memory",
37
+ "workflow",
38
+ "hooks",
39
+ "developer-tools",
40
+ "nlc"
41
+ ],
42
+ "author": "FTay Consulting",
43
+ "license": "MIT",
44
+ "dependencies": {
45
+ "@modelcontextprotocol/sdk": "^1.25.2",
46
+ "commander": "^14.0.1",
47
+ "chalk": "^4.1.2",
48
+ "fs-extra": "^11.3.2",
49
+ "zod": "^4.3.5"
50
+ },
51
+ "devDependencies": {
52
+ "@types/fs-extra": "^11.0.4",
53
+ "@types/node": "^24.5.2",
54
+ "typescript": "^5.9.2",
55
+ "tsx": "^4.20.6"
56
+ }
57
+ }