magicpath-ai 1.3.0-beta.13 → 1.3.0-beta.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -14,6 +14,8 @@ import { registerSetupSkillsCommand } from './commands/setup-skills.js';
14
14
  import { registerViewCommand } from './commands/view.js';
15
15
  import { registerInfoCommand } from './commands/info.js';
16
16
  import { registerSearchCommand } from './commands/search.js';
17
+ import { registerListInstalledCommand } from './commands/list-installed.js';
18
+ import { registerDiffCommand } from './commands/diff.js';
17
19
  const pkg = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8'));
18
20
  program
19
21
  .name('magicpath')
@@ -38,5 +40,7 @@ registerSetupSkillsCommand(program);
38
40
  registerViewCommand(program);
39
41
  registerInfoCommand(program);
40
42
  registerSearchCommand(program);
43
+ registerListInstalledCommand(program);
44
+ registerDiffCommand(program);
41
45
  program.parse();
42
46
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,kEAAkE;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAClE,CAAC;AAEF,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;KACtD,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,mCAAmC;AACnC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,kEAAkE;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAClE,CAAC;AAEF,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC;KACtD,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,eAAe,EAAE,CAAC;IAC3C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC3B,WAAW,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,mCAAmC;AACnC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,0BAA0B,CAAC,OAAO,CAAC,CAAC;AACpC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,4BAA4B,CAAC,OAAO,CAAC,CAAC;AACtC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAE7B,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -31,14 +31,14 @@ export function registerAddCommand(program) {
31
31
  program
32
32
  .command('add')
33
33
  .description('Add a MagicPath component to your project')
34
- .argument('<generatedName>', 'The generated name of the component (e.g., wispy-river-5234)')
34
+ .argument('<generatedNames...>', 'One or more generated names of components (e.g., wispy-river-5234 bold-moon-2031)')
35
35
  .option('-y, --yes', 'Skip confirmation prompts', false)
36
36
  .option('--overwrite', 'Overwrite existing files', false)
37
37
  .option('-p, --path <path>', `Custom path for components (default: ${DEFAULT_COMPONENTS_PATH})`)
38
38
  .option('-d, --debug', 'Enable debug logging', false)
39
39
  .option('--dry-run', 'Show what would happen without writing files', false)
40
40
  .option('--inspect', 'Show component source code without installing (implies --dry-run)', false)
41
- .action(async (generatedName, options) => {
41
+ .action(async (generatedNames, options) => {
42
42
  try {
43
43
  let addOptions;
44
44
  try {
@@ -58,7 +58,12 @@ export function registerAddCommand(program) {
58
58
  const json = isJsonMode();
59
59
  if (json)
60
60
  addOptions.yes = true;
61
- logger.debug({ generatedName, options: addOptions });
61
+ const isBatch = generatedNames.length > 1;
62
+ // For batch mode, force --yes to avoid repetitive prompts
63
+ if (isBatch) {
64
+ addOptions.yes = true;
65
+ }
66
+ logger.debug({ generatedNames, options: addOptions });
62
67
  const cwd = process.cwd();
63
68
  // Check if we're in a valid project directory
64
69
  const packageJsonPath = path.join(cwd, 'package.json');
@@ -68,271 +73,381 @@ export function registerAddCommand(program) {
68
73
  suggestion: 'Run this command from the root of your project where package.json is located.',
69
74
  });
70
75
  }
71
- // Step 1: Fetch component from registry
72
- const fetchSpinner = json
73
- ? null
74
- : brandSpinner(`Fetching component "${generatedName}"...`).start();
75
- let componentData;
76
- try {
77
- componentData = await fetchComponent(generatedName);
78
- fetchSpinner?.succeed(`Found component: ${componentData.name}`);
76
+ // Batch results collector
77
+ const batchResults = [];
78
+ if (isBatch && !json) {
79
+ console.log(`\n Adding ${generatedNames.length} components...\n`);
79
80
  }
80
- catch (err) {
81
- if (err instanceof AuthRequiredError) {
82
- fetchSpinner?.fail('Not logged in');
83
- if (json) {
84
- throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.', {
85
- code: 'NOT_AUTHENTICATED',
86
- suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
87
- });
81
+ for (const generatedName of generatedNames) {
82
+ try {
83
+ // Step 1: Fetch component from registry
84
+ const fetchSpinner = json
85
+ ? null
86
+ : brandSpinner(`Fetching component "${generatedName}"...`).start();
87
+ let componentData;
88
+ try {
89
+ componentData = await fetchComponent(generatedName);
90
+ fetchSpinner?.succeed(`Found component: ${componentData.name}`);
91
+ }
92
+ catch (err) {
93
+ if (err instanceof AuthRequiredError) {
94
+ fetchSpinner?.fail('Not logged in');
95
+ if (json || isBatch) {
96
+ throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.', {
97
+ code: 'NOT_AUTHENTICATED',
98
+ suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
99
+ });
100
+ }
101
+ const { shouldLogin } = await prompts({
102
+ type: 'confirm',
103
+ name: 'shouldLogin',
104
+ message: 'You need to be logged in to install components. Log in now?',
105
+ initial: true,
106
+ });
107
+ if (!shouldLogin) {
108
+ console.log('Installation cancelled.');
109
+ return;
110
+ }
111
+ const loggedIn = await runLoginFlow();
112
+ if (!loggedIn) {
113
+ console.log('Installation cancelled.');
114
+ return;
115
+ }
116
+ // Retry fetch after login
117
+ const retrySpinner = brandSpinner(`Fetching component "${generatedName}"...`).start();
118
+ try {
119
+ componentData = await fetchComponent(generatedName);
120
+ retrySpinner.succeed(`Found component: ${componentData.name}`);
121
+ }
122
+ catch (retryErr) {
123
+ retrySpinner.fail('Failed to fetch component');
124
+ if (retryErr instanceof MagicPathError) {
125
+ throw retryErr;
126
+ }
127
+ throw new MagicPathError('Something went wrong!');
128
+ }
129
+ }
130
+ else {
131
+ fetchSpinner?.fail('Failed to fetch component');
132
+ if (isBatch) {
133
+ const errMsg = err instanceof MagicPathError ? err.message : 'Something went wrong!';
134
+ batchResults.push({
135
+ component: generatedName,
136
+ generatedName,
137
+ filesWritten: [],
138
+ dependenciesInstalled: [],
139
+ dryRun: addOptions.dryRun,
140
+ error: errMsg,
141
+ });
142
+ if (!json)
143
+ console.log(` ⚠️ Skipping "${generatedName}": ${errMsg}`);
144
+ continue;
145
+ }
146
+ if (err instanceof MagicPathError) {
147
+ throw err;
148
+ }
149
+ throw new MagicPathError('Something went wrong!');
150
+ }
88
151
  }
89
- const { shouldLogin } = await prompts({
90
- type: 'confirm',
91
- name: 'shouldLogin',
92
- message: 'You need to be logged in to install components. Log in now?',
93
- initial: true,
152
+ // Resolve paths - include component-specific subfolder
153
+ const basePath = resolveComponentsPath(addOptions.path, cwd);
154
+ const componentFolderName = sanitizeComponentFolderName(componentData.name);
155
+ const componentsPath = path.join(basePath, componentFolderName);
156
+ const utilsPath = resolveUtilsPath(cwd);
157
+ logger.debug({
158
+ basePath,
159
+ componentFolderName,
160
+ componentsPath,
161
+ utilsPath,
94
162
  });
95
- if (!shouldLogin) {
96
- console.log('Installation cancelled.');
97
- return;
163
+ // Step 2: Check for existing files
164
+ const existingFiles = checkExistingFiles(componentData.files, componentsPath);
165
+ if (existingFiles.length > 0 && !addOptions.overwrite) {
166
+ if (!json) {
167
+ console.log('\nThe following files already exist:');
168
+ existingFiles.forEach((file) => console.log(` - ${file}`));
169
+ }
170
+ if (!addOptions.yes) {
171
+ const { shouldOverwrite } = await prompts({
172
+ type: 'confirm',
173
+ name: 'shouldOverwrite',
174
+ message: 'Do you want to overwrite these files?',
175
+ initial: false,
176
+ });
177
+ if (!shouldOverwrite) {
178
+ console.log('Installation cancelled.');
179
+ return;
180
+ }
181
+ }
182
+ else {
183
+ if (isBatch) {
184
+ if (!json)
185
+ console.log(` ⚠️ Skipping "${componentData.name}": files already exist. Use --overwrite.`);
186
+ batchResults.push({
187
+ component: componentData.name,
188
+ generatedName: componentData.generatedName,
189
+ filesWritten: [],
190
+ dependenciesInstalled: [],
191
+ dryRun: addOptions.dryRun,
192
+ error: 'Files already exist. Use --overwrite to replace.',
193
+ });
194
+ continue;
195
+ }
196
+ if (json) {
197
+ throw new MagicPathError(`Files already exist: ${existingFiles.join(', ')}. Use --overwrite to replace.`, {
198
+ code: 'FILES_EXIST',
199
+ suggestion: 'Pass `--overwrite` to replace existing files.',
200
+ });
201
+ }
202
+ console.log('Use --overwrite to replace existing files.');
203
+ return;
204
+ }
98
205
  }
99
- const loggedIn = await runLoginFlow();
100
- if (!loggedIn) {
101
- console.log('Installation cancelled.');
102
- return;
206
+ // Step 3: Confirm installation (unless --yes flag)
207
+ if (!addOptions.yes && existingFiles.length === 0) {
208
+ console.log(`\nThis will install:`);
209
+ console.log(` Component: ${componentData.name}`);
210
+ console.log(` Files: ${componentData.files.length} file(s) to ${path.relative(cwd, componentsPath) || '.'}`);
211
+ console.log(` Dependencies: ${componentData.dependencies.length} package(s)`);
212
+ const { shouldProceed } = await prompts({
213
+ type: 'confirm',
214
+ name: 'shouldProceed',
215
+ message: 'Proceed with installation?',
216
+ initial: true,
217
+ });
218
+ if (!shouldProceed) {
219
+ console.log('Installation cancelled.');
220
+ return;
221
+ }
103
222
  }
104
- // Retry fetch after login
105
- const retrySpinner = brandSpinner(`Fetching component "${generatedName}"...`).start();
106
- try {
107
- componentData = await fetchComponent(generatedName);
108
- retrySpinner.succeed(`Found component: ${componentData.name}`);
223
+ // Build result data for JSON output
224
+ const filesWritten = componentData.files.map((f) => path.relative(cwd, path.join(componentsPath, f.path)));
225
+ // Extract import info
226
+ const mainFile = componentData.files[0];
227
+ let importStatement;
228
+ let usageStr;
229
+ if (mainFile) {
230
+ const fileName = mainFile.name.replace(/\.tsx?$/, '');
231
+ const importPath = addOptions.path
232
+ ? `@/${addOptions.path}/${componentFolderName}/${fileName}`
233
+ : `@/components/magicpath/${componentFolderName}/${fileName}`;
234
+ const exportInfo = extractComponentExports(mainFile.content);
235
+ if (exportInfo) {
236
+ importStatement = generateImportStatement(exportInfo, importPath);
237
+ usageStr = generateUsageExample(exportInfo);
238
+ }
239
+ else {
240
+ importStatement = `import { ${fileName} } from '${importPath}';`;
241
+ }
109
242
  }
110
- catch (retryErr) {
111
- retrySpinner.fail('Failed to fetch component');
112
- if (retryErr instanceof MagicPathError) {
113
- throw retryErr;
243
+ // Dry run: return what would happen without writing
244
+ if (addOptions.dryRun) {
245
+ const fileContents = addOptions.inspect || json
246
+ ? componentData.files.map((f) => ({
247
+ path: f.path,
248
+ name: f.name,
249
+ content: f.content,
250
+ }))
251
+ : undefined;
252
+ if (!isBatch && json) {
253
+ jsonResult({
254
+ component: componentData.name,
255
+ generatedName: componentData.generatedName,
256
+ filesWritten,
257
+ files: fileContents,
258
+ dependenciesInstalled: componentData.dependencies,
259
+ importStatement,
260
+ usage: usageStr,
261
+ dryRun: true,
262
+ });
114
263
  }
115
- throw new MagicPathError('Something went wrong!');
264
+ batchResults.push({
265
+ component: componentData.name,
266
+ generatedName: componentData.generatedName,
267
+ filesWritten,
268
+ dependenciesInstalled: componentData.dependencies,
269
+ importStatement,
270
+ usage: usageStr,
271
+ dryRun: true,
272
+ });
273
+ if (!json) {
274
+ console.log('\n[Dry run] Would install:');
275
+ console.log(` Component: ${componentData.name}`);
276
+ console.log(` Files: ${filesWritten.join(', ')}`);
277
+ console.log(` Dependencies: ${componentData.dependencies.join(', ') || 'none'}`);
278
+ if (importStatement)
279
+ console.log(` Import: ${importStatement}`);
280
+ // --inspect: show file contents
281
+ if (addOptions.inspect) {
282
+ for (const f of componentData.files) {
283
+ console.log(`\n${'─'.repeat(60)}`);
284
+ console.log(` ${f.path}`);
285
+ console.log(`${'─'.repeat(60)}`);
286
+ console.log(f.content);
287
+ }
288
+ }
289
+ }
290
+ continue;
116
291
  }
117
- }
118
- else {
119
- fetchSpinner?.fail('Failed to fetch component');
120
- if (err instanceof MagicPathError) {
121
- throw err;
292
+ // Step 4: Write component files
293
+ const writeSpinner = json
294
+ ? null
295
+ : brandSpinner('Writing component files...').start();
296
+ try {
297
+ writeComponentFiles(componentData.files, componentsPath, true);
298
+ writeSpinner?.succeed(`Wrote ${componentData.files.length} file(s) to ${path.relative(cwd, componentsPath) || '.'}`);
122
299
  }
123
- throw new MagicPathError('Something went wrong!');
124
- }
125
- }
126
- // Resolve paths - include component-specific subfolder
127
- const basePath = resolveComponentsPath(addOptions.path, cwd);
128
- const componentFolderName = sanitizeComponentFolderName(componentData.name);
129
- const componentsPath = path.join(basePath, componentFolderName);
130
- const utilsPath = resolveUtilsPath(cwd);
131
- logger.debug({
132
- basePath,
133
- componentFolderName,
134
- componentsPath,
135
- utilsPath,
136
- });
137
- // Step 2: Check for existing files
138
- const existingFiles = checkExistingFiles(componentData.files, componentsPath);
139
- if (existingFiles.length > 0 && !addOptions.overwrite) {
140
- if (!json) {
141
- console.log('\nThe following files already exist:');
142
- existingFiles.forEach((file) => console.log(` - ${file}`));
143
- }
144
- if (!addOptions.yes) {
145
- const { shouldOverwrite } = await prompts({
146
- type: 'confirm',
147
- name: 'shouldOverwrite',
148
- message: 'Do you want to overwrite these files?',
149
- initial: false,
150
- });
151
- if (!shouldOverwrite) {
152
- console.log('Installation cancelled.');
153
- return;
300
+ catch (err) {
301
+ writeSpinner?.fail('Failed to write component files');
302
+ if (isBatch) {
303
+ batchResults.push({
304
+ component: componentData.name,
305
+ generatedName: componentData.generatedName,
306
+ filesWritten: [],
307
+ dependenciesInstalled: [],
308
+ dryRun: false,
309
+ error: 'Failed to write component files.',
310
+ });
311
+ continue;
312
+ }
313
+ throw new MagicPathError('Failed to write component files. Please check permissions and try again.');
154
314
  }
155
- }
156
- else {
157
- if (json) {
158
- throw new MagicPathError(`Files already exist: ${existingFiles.join(', ')}. Use --overwrite to replace.`, {
159
- code: 'FILES_EXIST',
160
- suggestion: 'Pass `--overwrite` to replace existing files.',
161
- });
315
+ // Step 5: Install utils if needed
316
+ const utilsExists = checkUtilsExists(utilsPath);
317
+ if (!utilsExists && componentData.utils.content) {
318
+ const utilsSpinner = json
319
+ ? null
320
+ : brandSpinner('Installing utilities...').start();
321
+ try {
322
+ writeUtilsFile(componentData.utils.content, utilsPath);
323
+ utilsSpinner?.succeed(`Wrote utils.ts to ${path.relative(cwd, utilsPath) || '.'}`);
324
+ }
325
+ catch (err) {
326
+ utilsSpinner?.fail('Failed to write utils file');
327
+ logger.debug({ err });
328
+ if (!json) {
329
+ console.log(' Warning: Could not write utils.ts. You may need to create it manually.');
330
+ }
331
+ }
162
332
  }
163
- console.log('Use --overwrite to replace existing files.');
164
- return;
165
- }
166
- }
167
- // Step 3: Confirm installation (unless --yes flag)
168
- if (!addOptions.yes && existingFiles.length === 0) {
169
- console.log(`\nThis will install:`);
170
- console.log(` Component: ${componentData.name}`);
171
- console.log(` Files: ${componentData.files.length} file(s) to ${path.relative(cwd, componentsPath) || '.'}`);
172
- console.log(` Dependencies: ${componentData.dependencies.length} package(s)`);
173
- const { shouldProceed } = await prompts({
174
- type: 'confirm',
175
- name: 'shouldProceed',
176
- message: 'Proceed with installation?',
177
- initial: true,
178
- });
179
- if (!shouldProceed) {
180
- console.log('Installation cancelled.');
181
- return;
182
- }
183
- }
184
- // Build result data for JSON output
185
- const filesWritten = componentData.files.map((f) => path.relative(cwd, path.join(componentsPath, f.path)));
186
- // Extract import info
187
- const mainFile = componentData.files[0];
188
- let importStatement;
189
- let usageStr;
190
- if (mainFile) {
191
- const fileName = mainFile.name.replace(/\.tsx?$/, '');
192
- const importPath = addOptions.path
193
- ? `@/${addOptions.path}/${componentFolderName}/${fileName}`
194
- : `@/components/magicpath/${componentFolderName}/${fileName}`;
195
- const exportInfo = extractComponentExports(mainFile.content);
196
- if (exportInfo) {
197
- importStatement = generateImportStatement(exportInfo, importPath);
198
- usageStr = generateUsageExample(exportInfo);
199
- }
200
- else {
201
- importStatement = `import { ${fileName} } from '${importPath}';`;
202
- }
203
- }
204
- // Dry run: return what would happen without writing
205
- if (addOptions.dryRun) {
206
- const fileContents = addOptions.inspect || json
207
- ? componentData.files.map((f) => ({
208
- path: f.path,
209
- name: f.name,
210
- content: f.content,
211
- }))
212
- : undefined;
213
- if (json) {
214
- jsonResult({
333
+ // Step 6: Install dependencies
334
+ const installedDeps = [];
335
+ if (componentData.dependencies.length > 0) {
336
+ try {
337
+ const { installed, skipped } = installPackages(componentData.dependencies, cwd);
338
+ installedDeps.push(...installed);
339
+ if (skipped.length > 0) {
340
+ logger.debug({
341
+ message: 'Skipped already installed packages',
342
+ skipped,
343
+ });
344
+ }
345
+ }
346
+ catch (err) {
347
+ if (err instanceof MagicPathError) {
348
+ if (!json)
349
+ console.log(`\n⚠️ ${err.message}`);
350
+ }
351
+ }
352
+ }
353
+ batchResults.push({
215
354
  component: componentData.name,
216
355
  generatedName: componentData.generatedName,
217
356
  filesWritten,
218
- files: fileContents,
219
- dependenciesInstalled: componentData.dependencies,
357
+ dependenciesInstalled: installedDeps,
220
358
  importStatement,
221
359
  usage: usageStr,
222
- dryRun: true,
360
+ dryRun: false,
223
361
  });
224
- }
225
- console.log('\n[Dry run] Would install:');
226
- console.log(` Component: ${componentData.name}`);
227
- console.log(` Files: ${filesWritten.join(', ')}`);
228
- console.log(` Dependencies: ${componentData.dependencies.join(', ') || 'none'}`);
229
- if (importStatement)
230
- console.log(` Import: ${importStatement}`);
231
- // --inspect: show file contents
232
- if (addOptions.inspect) {
233
- for (const f of componentData.files) {
234
- console.log(`\n${'─'.repeat(60)}`);
235
- console.log(` ${f.path}`);
236
- console.log(`${'─'.repeat(60)}`);
237
- console.log(f.content);
362
+ // Single-component JSON output (non-batch)
363
+ if (!isBatch && json) {
364
+ jsonResult({
365
+ component: componentData.name,
366
+ generatedName: componentData.generatedName,
367
+ filesWritten,
368
+ dependenciesInstalled: installedDeps,
369
+ importStatement,
370
+ usage: usageStr,
371
+ dryRun: false,
372
+ });
238
373
  }
239
- }
240
- return;
241
- }
242
- // Step 4: Write component files
243
- const writeSpinner = json
244
- ? null
245
- : brandSpinner('Writing component files...').start();
246
- try {
247
- writeComponentFiles(componentData.files, componentsPath, true);
248
- writeSpinner?.succeed(`Wrote ${componentData.files.length} file(s) to ${path.relative(cwd, componentsPath) || '.'}`);
249
- }
250
- catch (err) {
251
- writeSpinner?.fail('Failed to write component files');
252
- throw new MagicPathError('Failed to write component files. Please check permissions and try again.');
253
- }
254
- // Step 5: Install utils if needed
255
- const utilsExists = checkUtilsExists(utilsPath);
256
- if (!utilsExists && componentData.utils.content) {
257
- const utilsSpinner = json
258
- ? null
259
- : brandSpinner('Installing utilities...').start();
260
- try {
261
- writeUtilsFile(componentData.utils.content, utilsPath);
262
- utilsSpinner?.succeed(`Wrote utils.ts to ${path.relative(cwd, utilsPath) || '.'}`);
263
- }
264
- catch (err) {
265
- utilsSpinner?.fail('Failed to write utils file');
266
- logger.debug({ err });
374
+ // Step 7: Show success message and write usage file
267
375
  if (!json) {
268
- console.log(' Warning: Could not write utils.ts. You may need to create it manually.');
376
+ console.log(`\n✅ Successfully added "${componentData.name}" to your project!`);
377
+ if (!isBatch) {
378
+ console.log(`\nUsage:`);
379
+ }
269
380
  }
270
- }
271
- }
272
- // Step 6: Install dependencies
273
- const installedDeps = [];
274
- if (componentData.dependencies.length > 0) {
275
- try {
276
- const { installed, skipped } = installPackages(componentData.dependencies, cwd);
277
- installedDeps.push(...installed);
278
- if (skipped.length > 0) {
279
- logger.debug({
280
- message: 'Skipped already installed packages',
281
- skipped,
282
- });
381
+ if (mainFile) {
382
+ const fileName = mainFile.name.replace(/\.tsx?$/, '');
383
+ const importPath = addOptions.path
384
+ ? `@/${addOptions.path}/${componentFolderName}/${fileName}`
385
+ : `@/components/magicpath/${componentFolderName}/${fileName}`;
386
+ const exportInfo = extractComponentExports(mainFile.content);
387
+ if (!isBatch && !json) {
388
+ if (exportInfo) {
389
+ console.log(` ${generateImportStatement(exportInfo, importPath)}`);
390
+ console.log('');
391
+ console.log(` ${generateUsageExample(exportInfo)}`);
392
+ if (exportInfo.requiredProps.length > 0) {
393
+ console.log('');
394
+ console.log(` Required props: ${exportInfo.requiredProps.join(', ')}`);
395
+ }
396
+ }
397
+ else {
398
+ console.log(` import { ${fileName} } from '${importPath}';`);
399
+ }
400
+ }
401
+ try {
402
+ writeUsageFile(componentsPath, {
403
+ componentName: componentData.name,
404
+ importPath,
405
+ exportInfo,
406
+ fileName,
407
+ });
408
+ if (!isBatch && !json) {
409
+ console.log(`\n📄 Usage documentation written to ${path.relative(cwd, path.join(componentsPath, 'usage.md'))}`);
410
+ }
411
+ }
412
+ catch (err) {
413
+ logger.debug({ err });
414
+ }
283
415
  }
284
416
  }
285
417
  catch (err) {
286
- if (err instanceof MagicPathError) {
418
+ // In batch mode, record error and continue
419
+ if (isBatch) {
420
+ const errMsg = err instanceof Error ? err.message : String(err);
421
+ batchResults.push({
422
+ component: generatedName,
423
+ generatedName,
424
+ filesWritten: [],
425
+ dependenciesInstalled: [],
426
+ dryRun: addOptions.dryRun,
427
+ error: errMsg,
428
+ });
287
429
  if (!json)
288
- console.log(`\n⚠️ ${err.message}`);
430
+ console.log(` ⚠️ Failed "${generatedName}": ${errMsg}`);
431
+ continue;
289
432
  }
433
+ throw err;
290
434
  }
291
435
  }
292
- // JSON output
293
- if (json) {
294
- jsonResult({
295
- component: componentData.name,
296
- generatedName: componentData.generatedName,
297
- filesWritten,
298
- dependenciesInstalled: installedDeps,
299
- importStatement,
300
- usage: usageStr,
301
- dryRun: false,
302
- });
303
- }
304
- // Step 7: Show success message and write usage file
305
- console.log(`\n✅ Successfully added "${componentData.name}" to your project!`);
306
- console.log(`\nUsage:`);
307
- if (mainFile) {
308
- const fileName = mainFile.name.replace(/\.tsx?$/, '');
309
- const importPath = addOptions.path
310
- ? `@/${addOptions.path}/${componentFolderName}/${fileName}`
311
- : `@/components/magicpath/${componentFolderName}/${fileName}`;
312
- const exportInfo = extractComponentExports(mainFile.content);
313
- if (exportInfo) {
314
- console.log(` ${generateImportStatement(exportInfo, importPath)}`);
315
- console.log('');
316
- console.log(` ${generateUsageExample(exportInfo)}`);
317
- if (exportInfo.requiredProps.length > 0) {
318
- console.log('');
319
- console.log(` Required props: ${exportInfo.requiredProps.join(', ')}`);
320
- }
321
- }
322
- else {
323
- console.log(` import { ${fileName} } from '${importPath}';`);
324
- }
325
- try {
326
- writeUsageFile(componentsPath, {
327
- componentName: componentData.name,
328
- importPath,
329
- exportInfo,
330
- fileName,
436
+ // Batch summary
437
+ if (isBatch) {
438
+ if (json) {
439
+ jsonResult({
440
+ results: batchResults,
441
+ total: batchResults.length,
442
+ succeeded: batchResults.filter((r) => !r.error).length,
443
+ failed: batchResults.filter((r) => r.error).length,
331
444
  });
332
- console.log(`\n📄 Usage documentation written to ${path.relative(cwd, path.join(componentsPath, 'usage.md'))}`);
333
445
  }
334
- catch (err) {
335
- logger.debug({ err });
446
+ const succeeded = batchResults.filter((r) => !r.error);
447
+ const failed = batchResults.filter((r) => r.error);
448
+ console.log(`\n ${succeeded.length} of ${batchResults.length} component(s) added successfully.`);
449
+ if (failed.length > 0) {
450
+ console.log(` ${failed.length} failed: ${failed.map((f) => f.generatedName).join(', ')}`);
336
451
  }
337
452
  }
338
453
  }
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerDiffCommand(program: Command): void;
@@ -0,0 +1,154 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { enableDebugLogger, logger } from '../util/logger.js';
4
+ import { MagicPathError } from '../util/error.js';
5
+ import { AuthRequiredError } from '../util/authError.js';
6
+ import { brandSpinner } from '../util/ui.js';
7
+ import { isJsonMode, jsonResult, jsonError } from '../util/output.js';
8
+ import { fetchComponent, resolveComponentsPath, sanitizeComponentFolderName, DEFAULT_COMPONENTS_PATH, } from '../util/component.js';
9
+ import { generateDiff, colorDiff } from '../util/integrate.js';
10
+ export function registerDiffCommand(program) {
11
+ program
12
+ .command('diff')
13
+ .description('Show differences between installed and latest version of a component')
14
+ .argument('<generatedName>', 'The generated name of the component (e.g., wispy-river-5234)')
15
+ .option('-p, --path <path>', `Custom components path (default: ${DEFAULT_COMPONENTS_PATH})`)
16
+ .option('-d, --debug', 'Enable debug logging', false)
17
+ .action(async (generatedName, options) => {
18
+ const json = isJsonMode();
19
+ try {
20
+ if (options.debug)
21
+ enableDebugLogger();
22
+ const cwd = process.cwd();
23
+ // Step 1: Fetch latest component from registry
24
+ const fetchSpinner = json
25
+ ? null
26
+ : brandSpinner(`Fetching latest "${generatedName}" from registry...`).start();
27
+ let componentData;
28
+ try {
29
+ componentData = await fetchComponent(generatedName);
30
+ fetchSpinner?.succeed(`Fetched latest: ${componentData.name}`);
31
+ }
32
+ catch (err) {
33
+ fetchSpinner?.fail('Failed to fetch component');
34
+ if (err instanceof AuthRequiredError) {
35
+ throw new MagicPathError('Not authenticated. Run `magicpath-ai login` first.', {
36
+ code: 'NOT_AUTHENTICATED',
37
+ suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
38
+ });
39
+ }
40
+ if (err instanceof MagicPathError)
41
+ throw err;
42
+ throw new MagicPathError('Failed to fetch component.');
43
+ }
44
+ // Step 2: Find the installed component
45
+ const basePath = resolveComponentsPath(options.path, cwd);
46
+ const componentFolderName = sanitizeComponentFolderName(componentData.name);
47
+ const installedPath = path.join(basePath, componentFolderName);
48
+ if (!fs.existsSync(installedPath)) {
49
+ throw new MagicPathError(`Component "${componentData.name}" is not installed at ${path.relative(cwd, installedPath)}.`, {
50
+ code: 'NOT_INSTALLED',
51
+ suggestion: `Run \`magicpath-ai add ${generatedName}\` to install it first.`,
52
+ });
53
+ }
54
+ logger.debug({ installedPath, componentFolderName });
55
+ // Step 3: Compare each file
56
+ const fileDiffs = [];
57
+ let hasChanges = false;
58
+ // Check files in latest version
59
+ for (const remoteFile of componentData.files) {
60
+ const localFilePath = path.join(installedPath, remoteFile.path);
61
+ if (!fs.existsSync(localFilePath)) {
62
+ fileDiffs.push({
63
+ path: remoteFile.path,
64
+ status: 'added',
65
+ diff: generateDiff(remoteFile.path, '', remoteFile.content),
66
+ });
67
+ hasChanges = true;
68
+ }
69
+ else {
70
+ const localContent = fs.readFileSync(localFilePath, 'utf8');
71
+ if (localContent !== remoteFile.content) {
72
+ fileDiffs.push({
73
+ path: remoteFile.path,
74
+ status: 'modified',
75
+ diff: generateDiff(remoteFile.path, localContent, remoteFile.content),
76
+ });
77
+ hasChanges = true;
78
+ }
79
+ else {
80
+ fileDiffs.push({
81
+ path: remoteFile.path,
82
+ status: 'unchanged',
83
+ });
84
+ }
85
+ }
86
+ }
87
+ // Check for locally removed files (exist locally but not in latest)
88
+ const localFiles = fs
89
+ .readdirSync(installedPath)
90
+ .filter((f) => f !== 'usage.md' &&
91
+ !fs.statSync(path.join(installedPath, f)).isDirectory());
92
+ const remoteFilePaths = new Set(componentData.files.map((f) => f.path));
93
+ for (const localFile of localFiles) {
94
+ if (!remoteFilePaths.has(localFile)) {
95
+ const localContent = fs.readFileSync(path.join(installedPath, localFile), 'utf8');
96
+ fileDiffs.push({
97
+ path: localFile,
98
+ status: 'removed',
99
+ diff: generateDiff(localFile, localContent, ''),
100
+ });
101
+ hasChanges = true;
102
+ }
103
+ }
104
+ // JSON output
105
+ if (json) {
106
+ jsonResult({
107
+ component: componentData.name,
108
+ generatedName: componentData.generatedName,
109
+ installedPath: path.relative(cwd, installedPath),
110
+ hasChanges,
111
+ files: fileDiffs,
112
+ });
113
+ }
114
+ // Human-readable output
115
+ if (!hasChanges) {
116
+ console.log(`\n ✔ "${componentData.name}" is up to date. No differences found.`);
117
+ return;
118
+ }
119
+ console.log(`\n Differences for "${componentData.name}" (${path.relative(cwd, installedPath)}):\n`);
120
+ for (const fd of fileDiffs) {
121
+ if (fd.status === 'unchanged')
122
+ continue;
123
+ const statusLabel = fd.status === 'added'
124
+ ? '\x1b[32m+ new\x1b[0m'
125
+ : fd.status === 'removed'
126
+ ? '\x1b[31m- removed\x1b[0m'
127
+ : '\x1b[33m~ modified\x1b[0m';
128
+ console.log(` ${statusLabel} ${fd.path}`);
129
+ }
130
+ // Show diffs for modified files
131
+ const modifiedDiffs = fileDiffs.filter((fd) => fd.status === 'modified' && fd.diff);
132
+ if (modifiedDiffs.length > 0) {
133
+ console.log('');
134
+ for (const fd of modifiedDiffs) {
135
+ console.log(` ${'─'.repeat(60)}`);
136
+ console.log(` ${fd.path}`);
137
+ console.log(` ${'─'.repeat(60)}`);
138
+ console.log(colorDiff(fd.diff));
139
+ }
140
+ }
141
+ console.log(`\n Run \`magicpath-ai add ${generatedName} -y --overwrite\` to update.`);
142
+ }
143
+ catch (err) {
144
+ if (json)
145
+ jsonError(err);
146
+ if (err instanceof MagicPathError) {
147
+ console.error(`\n${err.message}`);
148
+ process.exit(1);
149
+ }
150
+ throw err;
151
+ }
152
+ });
153
+ }
154
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerListInstalledCommand(program: Command): void;
@@ -0,0 +1,112 @@
1
+ import path from 'path';
2
+ import fs from 'fs-extra';
3
+ import { MagicPathError } from '../util/error.js';
4
+ import { isJsonMode, jsonResult, jsonError } from '../util/output.js';
5
+ import { resolveComponentsPath, extractComponentExports, DEFAULT_COMPONENTS_PATH, } from '../util/component.js';
6
+ /**
7
+ * Scan the magicpath components directory and return metadata
8
+ * about each installed component.
9
+ */
10
+ function scanInstalledComponents(componentsPath, cwd) {
11
+ if (!fs.existsSync(componentsPath)) {
12
+ return [];
13
+ }
14
+ const entries = fs.readdirSync(componentsPath, { withFileTypes: true });
15
+ const components = [];
16
+ for (const entry of entries) {
17
+ if (!entry.isDirectory())
18
+ continue;
19
+ const componentDir = path.join(componentsPath, entry.name);
20
+ const files = fs
21
+ .readdirSync(componentDir)
22
+ .filter((f) => !fs.statSync(path.join(componentDir, f)).isDirectory());
23
+ // Find the main TSX/TS file (first non-usage, non-test file)
24
+ const mainFile = files.find((f) => (f.endsWith('.tsx') || f.endsWith('.ts')) &&
25
+ f !== 'usage.md' &&
26
+ !f.includes('.test.') &&
27
+ !f.includes('.spec.'));
28
+ let exportName = null;
29
+ let importStatement = null;
30
+ if (mainFile) {
31
+ try {
32
+ const content = fs.readFileSync(path.join(componentDir, mainFile), 'utf8');
33
+ const exportInfo = extractComponentExports(content);
34
+ if (exportInfo) {
35
+ exportName = exportInfo.name;
36
+ const fileName = mainFile.replace(/\.tsx?$/, '');
37
+ const importPath = `@/components/magicpath/${entry.name}/${fileName}`;
38
+ if (exportInfo.isDefault) {
39
+ importStatement = `import ${exportInfo.name} from '${importPath}';`;
40
+ }
41
+ else {
42
+ importStatement = `import { ${exportInfo.name} } from '${importPath}';`;
43
+ }
44
+ }
45
+ }
46
+ catch {
47
+ // Ignore read errors
48
+ }
49
+ }
50
+ components.push({
51
+ name: exportName || entry.name,
52
+ folder: entry.name,
53
+ path: path.relative(cwd, componentDir),
54
+ files: files.filter((f) => f !== 'usage.md'),
55
+ exportName,
56
+ importStatement,
57
+ });
58
+ }
59
+ return components;
60
+ }
61
+ export function registerListInstalledCommand(program) {
62
+ program
63
+ .command('list-installed')
64
+ .description('List MagicPath components installed in the current project')
65
+ .option('-p, --path <path>', `Custom components path (default: ${DEFAULT_COMPONENTS_PATH})`)
66
+ .action(async (options) => {
67
+ const json = isJsonMode();
68
+ try {
69
+ const cwd = process.cwd();
70
+ const componentsPath = resolveComponentsPath(options.path, cwd);
71
+ if (!fs.existsSync(componentsPath)) {
72
+ if (json) {
73
+ jsonResult({ components: [], total: 0 });
74
+ }
75
+ console.log(`\n No MagicPath components found at ${path.relative(cwd, componentsPath) || componentsPath}`);
76
+ return;
77
+ }
78
+ const components = scanInstalledComponents(componentsPath, cwd);
79
+ if (json) {
80
+ jsonResult({
81
+ components,
82
+ total: components.length,
83
+ componentsPath: path.relative(cwd, componentsPath),
84
+ });
85
+ }
86
+ if (components.length === 0) {
87
+ console.log('\n No MagicPath components installed.');
88
+ return;
89
+ }
90
+ // Table output
91
+ console.log(`\n ${components.length} component(s) installed in ${path.relative(cwd, componentsPath)}:\n`);
92
+ const nameWidth = Math.max(9, ...components.map((c) => c.name.length));
93
+ const folderWidth = Math.max(6, ...components.map((c) => c.folder.length));
94
+ const filesWidth = 5;
95
+ console.log(` ${'Component'.padEnd(nameWidth)} ${'Folder'.padEnd(folderWidth)} ${'Files'.padEnd(filesWidth)}`);
96
+ console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(folderWidth)} ${'─'.repeat(filesWidth)}`);
97
+ for (const c of components) {
98
+ console.log(` ${c.name.padEnd(nameWidth)} ${c.folder.padEnd(folderWidth)} ${String(c.files.length).padEnd(filesWidth)}`);
99
+ }
100
+ }
101
+ catch (err) {
102
+ if (json)
103
+ jsonError(err);
104
+ if (err instanceof MagicPathError) {
105
+ console.error(`\n${err.message}`);
106
+ process.exit(1);
107
+ }
108
+ throw err;
109
+ }
110
+ });
111
+ }
112
+ //# sourceMappingURL=list-installed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-installed.js","sourceRoot":"","sources":["../../src/commands/list-installed.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "magicpath-ai",
3
- "version": "1.3.0-beta.13",
3
+ "version": "1.3.0-beta.14",
4
4
  "description": "Node CLI for MagicPath",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1,2 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerInitCommand(program: Command): void;
@@ -1,113 +0,0 @@
1
- import path from 'path';
2
- import fs from 'fs-extra';
3
- import { fileURLToPath } from 'url';
4
- import { isJsonMode, jsonResult } from '../util/output.js';
5
- import { GREEN_CHECK } from '../util/ui.js';
6
- // ── Resolve skills directory (single source of truth) ────────────────
7
- function getSkillsDir() {
8
- const thisFile = fileURLToPath(import.meta.url);
9
- // src/commands/init.ts -> package root is ../../
10
- return path.resolve(path.dirname(thisFile), '..', '..', 'skills');
11
- }
12
- function readSkillFile(filename) {
13
- const filePath = path.join(getSkillsDir(), filename);
14
- return fs.readFileSync(filePath, 'utf8');
15
- }
16
- // ── Editor-specific metadata (not part of skill content) ─────────────
17
- const DESCRIPTION = 'MagicPath is an external platform where the user builds and stores UI components. Use this when the user mentions "magicpath", wants to find/browse/search their MagicPath components, add a MagicPath component, preview a MagicPath component, or integrate one into their project. MagicPath components are NOT in the local git repo — they live on the MagicPath platform and must be fetched via the CLI.';
18
- // ── Editor-specific content builders ─────────────────────────────────
19
- function buildClaudeSkill() {
20
- const guide = readSkillFile('guide.md');
21
- return `---
22
- name: magicpath
23
- description: ${DESCRIPTION} Also triggers for magicpath-ai CLI usage.
24
- user-invocable: true
25
- allowed-tools: Bash(magicpath-ai *)
26
- ---
27
-
28
- ${guide}
29
-
30
- ## Current Project Context
31
-
32
- \`\`\`json
33
- !\`magicpath-ai info --json 2>/dev/null || echo '{"error": "magicpath-ai not found. Run: npx magicpath-ai info --json"}'\`
34
- \`\`\`
35
-
36
- The JSON above contains auth status, projects, and CLI version. If auth.authenticated is false, the user needs to log in before any other operations.
37
-
38
- ## Detailed References
39
-
40
- - [cli.md](./cli.md) — Full CLI command reference with all flags
41
- `;
42
- }
43
- function buildCursorRule() {
44
- const guide = readSkillFile('guide.md');
45
- const cliReference = readSkillFile('cli-reference.md');
46
- // Use single quotes to avoid escaping double quotes in YAML
47
- const yamlDesc = DESCRIPTION.replace(/'/g, "''");
48
- return `---
49
- description: '${yamlDesc}'
50
- alwaysApply: false
51
- ---
52
-
53
- ${guide}
54
-
55
- ## CLI Reference
56
-
57
- ${cliReference}
58
- `;
59
- }
60
- function buildCopilotInstructions() {
61
- const guide = readSkillFile('guide.md');
62
- const cliReference = readSkillFile('cli-reference.md');
63
- return `---
64
- applyTo: "**"
65
- ---
66
-
67
- ${guide}
68
-
69
- ## CLI Reference
70
-
71
- ${cliReference}
72
- `;
73
- }
74
- function getFileTargets() {
75
- const cliReference = readSkillFile('cli-reference.md');
76
- return [
77
- // Claude Code
78
- { path: '.claude/skills/magicpath/SKILL.md', content: buildClaudeSkill() },
79
- { path: '.claude/skills/magicpath/cli.md', content: cliReference + '\n' },
80
- // Cursor
81
- { path: '.cursor/rules/magicpath.mdc', content: buildCursorRule() },
82
- // GitHub Copilot
83
- {
84
- path: '.github/instructions/magicpath.instructions.md',
85
- content: buildCopilotInstructions(),
86
- },
87
- ];
88
- }
89
- // ── Command ───────────────────────────────────────────────────────────
90
- export function registerInitCommand(program) {
91
- program
92
- .command('init')
93
- .description('Set up MagicPath for AI agents (Claude Code, Cursor, GitHub Copilot)')
94
- .action(async () => {
95
- const cwd = process.cwd();
96
- const json = isJsonMode();
97
- const created = [];
98
- // Write all editor rule files
99
- for (const target of getFileTargets()) {
100
- const absPath = path.join(cwd, target.path);
101
- fs.ensureDirSync(path.dirname(absPath));
102
- fs.writeFileSync(absPath, target.content, 'utf8');
103
- created.push(target.path);
104
- if (!json)
105
- console.log(`${GREEN_CHECK} Created ${target.path}`);
106
- }
107
- if (json) {
108
- jsonResult({ created }); // exits process
109
- }
110
- console.log('\nMagicPath is ready for AI agents (Claude Code, Cursor, GitHub Copilot).');
111
- });
112
- }
113
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}