magicpath-ai 1.3.0-beta.3 → 1.3.0-beta.4

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 (56) hide show
  1. package/README.md +63 -8
  2. package/dist/cli.js +28 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/add.d.ts +49 -0
  5. package/dist/commands/add.js +129 -25
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/auth.js +33 -2
  8. package/dist/commands/auth.js.map +1 -1
  9. package/dist/commands/clone.js +112 -86
  10. package/dist/commands/clone.js.map +1 -1
  11. package/dist/commands/info.d.ts +2 -0
  12. package/dist/commands/info.js +124 -0
  13. package/dist/commands/info.js.map +1 -0
  14. package/dist/commands/init.d.ts +2 -0
  15. package/dist/commands/init.js +280 -0
  16. package/dist/commands/init.js.map +1 -0
  17. package/dist/commands/integrate.js +282 -81
  18. package/dist/commands/integrate.js.map +1 -1
  19. package/dist/commands/list.d.ts +2 -0
  20. package/dist/commands/list.js +138 -0
  21. package/dist/commands/list.js.map +1 -0
  22. package/dist/commands/schema.d.ts +2 -0
  23. package/dist/commands/schema.js +213 -0
  24. package/dist/commands/schema.js.map +1 -0
  25. package/dist/commands/search.d.ts +2 -0
  26. package/dist/commands/search.js +120 -0
  27. package/dist/commands/search.js.map +1 -0
  28. package/dist/commands/skills.d.ts +2 -0
  29. package/dist/commands/skills.js +55 -0
  30. package/dist/commands/skills.js.map +1 -0
  31. package/dist/commands/view.d.ts +2 -0
  32. package/dist/commands/view.js +27 -0
  33. package/dist/commands/view.js.map +1 -0
  34. package/dist/commands/whoami.d.ts +2 -0
  35. package/dist/commands/whoami.js +58 -0
  36. package/dist/commands/whoami.js.map +1 -0
  37. package/dist/util/api.d.ts +3 -0
  38. package/dist/util/api.js +9 -0
  39. package/dist/util/api.js.map +1 -1
  40. package/dist/util/auth.js +5 -0
  41. package/dist/util/auth.js.map +1 -1
  42. package/dist/util/component.d.ts +8 -8
  43. package/dist/util/diff.d.ts +4 -0
  44. package/dist/util/diff.js +11 -3
  45. package/dist/util/diff.js.map +1 -1
  46. package/dist/util/integrate.d.ts +13 -2
  47. package/dist/util/integrate.js +67 -10
  48. package/dist/util/integrate.js.map +1 -1
  49. package/dist/util/output.d.ts +14 -0
  50. package/dist/util/output.js +27 -0
  51. package/dist/util/output.js.map +1 -0
  52. package/package.json +3 -2
  53. package/skills/magicpath-add-component/SKILL.md +49 -0
  54. package/skills/magicpath-integrate/SKILL.md +50 -0
  55. package/skills/magicpath-list/SKILL.md +38 -0
  56. package/skills/magicpath-shared/SKILL.md +34 -0
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MagicPath CLI
2
2
 
3
- ( Instantly bring your MagicPath AI projects to your local development environment. Edit, remix, and create in your own vibe.
3
+ Instantly bring your MagicPath AI projects to your local development environment. Edit, remix, and create in your own vibe.
4
4
 
5
5
  ## Quick Start
6
6
 
@@ -43,7 +43,8 @@ npx magicpath-ai@latest clone -k <access-key> [options]
43
43
  ```
44
44
 
45
45
  **Options:**
46
- - `-k, --key <accessKey>` (required): = One-time magic access key to unlock and download your project
46
+ - `-k, --key <accessKey>` (required): One-time magic access key to unlock and download your project
47
+ - `-i, --ide <ide>`: Pre-select IDE to open project in (cursor, antigravity, vscode, webstorm)
47
48
  - `-d, --debug`: Get verbose debug logs in the CLI
48
49
 
49
50
  **Example:**
@@ -52,10 +53,64 @@ npx magicpath-ai@latest clone -k mp_1234567890abcdef
52
53
  ```
53
54
 
54
55
  The CLI will:
55
- 1. =� Download your project using the access key
56
- 2. =� Prompt you to name your project (default: `magicpath-project`)
57
- 3. =� Unpack the project to a local directory
58
- 4. <� Your project is ready to go!
56
+ 1. Download your project using the access key
57
+ 2. Prompt you to name your project (default: `magicpath-project`)
58
+ 3. Unpack the project to a local directory
59
+ 4. Your project is ready to go!
60
+
61
+ ### Add Command
62
+
63
+ Add a MagicPath component to your project:
64
+
65
+ ```bash
66
+ npx magicpath-ai@latest add <generatedName> [options]
67
+ ```
68
+
69
+ - `<generatedName>` (required): The generated name of the component (e.g., `wispy-river-5234`)
70
+
71
+ **Options:**
72
+ - `-y, --yes`: Skip confirmation prompts
73
+ - `-o, --overwrite`: Overwrite existing files
74
+ - `-p, --path <path>`: Custom path for components (default: `components/magicpath`)
75
+ - `-d, --debug`: Enable debug logging
76
+
77
+ The CLI will fetch the component from the MagicPath registry, write the component files to your project, install any required dependencies, and display usage instructions.
78
+
79
+ ### Integrate Command
80
+
81
+ Integrate a MagicPath component into your project using AI:
82
+
83
+ ```bash
84
+ npx magicpath-ai@latest integrate <generatedName> [options]
85
+ ```
86
+
87
+ - `<generatedName>` (required): The generated name of the component
88
+
89
+ **Options:**
90
+ - `-d, --debug`: Enable debug logging
91
+ - `--no-review`: Apply changes immediately without review
92
+
93
+ The integrate command offers two modes:
94
+ - **Integrate into a specific file** — Embed the component into an existing file in your project.
95
+ - **Retheme entire project** (experimental) — Restyle your entire project to match the component's theme.
96
+
97
+ ### Login Command
98
+
99
+ Log in to your MagicPath account:
100
+
101
+ ```bash
102
+ npx magicpath-ai@latest login
103
+ ```
104
+
105
+ Opens your browser for authentication. Required for the `add` and `integrate` commands.
106
+
107
+ ### Logout Command
108
+
109
+ Log out of your MagicPath account:
110
+
111
+ ```bash
112
+ npx magicpath-ai@latest logout
113
+ ```
59
114
 
60
115
  ## What You Get
61
116
 
@@ -100,8 +155,8 @@ When you clone a MagicPath project, you'll get a complete local copy with:
100
155
 
101
156
  ## License
102
157
 
103
- MIT Jack Beoris
158
+ MIT - Jack Beoris
104
159
 
105
160
  ---
106
161
 
107
- Made with ( by the MagicPath team
162
+ Made with love by the MagicPath team
package/dist/cli.js CHANGED
@@ -1,13 +1,40 @@
1
1
  #!/usr/bin/env node
2
2
  import { program } from 'commander';
3
+ import { setJsonMode } from './util/output.js';
3
4
  import { registerCloneCommand } from './commands/clone.js';
4
5
  import { registerAddCommand } from './commands/add.js';
5
6
  import { registerIntegrateCommand } from './commands/integrate.js';
6
7
  import { registerAuthCommands } from './commands/auth.js';
7
- program.name('magicpath').description('CLI for MagicPath AI').version('1.2.0');
8
+ import { registerWhoamiCommand } from './commands/whoami.js';
9
+ import { registerListCommands } from './commands/list.js';
10
+ import { registerSchemaCommand } from './commands/schema.js';
11
+ import { registerSkillsCommand } from './commands/skills.js';
12
+ import { registerInitCommand } from './commands/init.js';
13
+ import { registerViewCommand } from './commands/view.js';
14
+ import { registerInfoCommand } from './commands/info.js';
15
+ import { registerSearchCommand } from './commands/search.js';
16
+ program
17
+ .name('magicpath')
18
+ .description('CLI for MagicPath AI')
19
+ .version('1.3.0')
20
+ .option('-o, --output <format>', 'Output format: json')
21
+ .hook('preAction', (thisCommand) => {
22
+ const opts = thisCommand.optsWithGlobals();
23
+ if (opts.output === 'json') {
24
+ setJsonMode(true);
25
+ }
26
+ });
8
27
  registerCloneCommand(program);
9
28
  registerAddCommand(program);
10
29
  registerIntegrateCommand(program);
11
30
  registerAuthCommands(program);
31
+ registerWhoamiCommand(program);
32
+ registerListCommands(program);
33
+ registerSchemaCommand(program);
34
+ registerSkillsCommand(program);
35
+ registerInitCommand(program);
36
+ registerViewCommand(program);
37
+ registerInfoCommand(program);
38
+ registerSearchCommand(program);
12
39
  program.parse();
13
40
  //# 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,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAE/E,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,wBAAwB,CAAC,OAAO,CAAC,CAAC;AAClC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAE9B,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,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,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,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,OAAO,CAAC,OAAO,CAAC;KAChB,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,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,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,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,2 +1,51 @@
1
1
  import type { Command } from 'commander';
2
+ import { z } from 'zod';
3
+ export declare const addOptionsSchema: z.ZodObject<{
4
+ yes: z.ZodDefault<z.ZodBoolean>;
5
+ overwrite: z.ZodDefault<z.ZodBoolean>;
6
+ path: z.ZodOptional<z.ZodString>;
7
+ debug: z.ZodDefault<z.ZodBoolean>;
8
+ dryRun: z.ZodDefault<z.ZodBoolean>;
9
+ inspect: z.ZodDefault<z.ZodBoolean>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ debug: boolean;
12
+ yes: boolean;
13
+ overwrite: boolean;
14
+ dryRun: boolean;
15
+ inspect: boolean;
16
+ path?: string | undefined;
17
+ }, {
18
+ debug?: boolean | undefined;
19
+ path?: string | undefined;
20
+ yes?: boolean | undefined;
21
+ overwrite?: boolean | undefined;
22
+ dryRun?: boolean | undefined;
23
+ inspect?: boolean | undefined;
24
+ }>;
25
+ export type AddOptions = z.infer<typeof addOptionsSchema>;
26
+ export declare const addOutputSchema: z.ZodObject<{
27
+ component: z.ZodString;
28
+ generatedName: z.ZodString;
29
+ filesWritten: z.ZodArray<z.ZodString, "many">;
30
+ dependenciesInstalled: z.ZodArray<z.ZodString, "many">;
31
+ importStatement: z.ZodOptional<z.ZodString>;
32
+ usage: z.ZodOptional<z.ZodString>;
33
+ dryRun: z.ZodBoolean;
34
+ }, "strip", z.ZodTypeAny, {
35
+ generatedName: string;
36
+ component: string;
37
+ dryRun: boolean;
38
+ filesWritten: string[];
39
+ dependenciesInstalled: string[];
40
+ importStatement?: string | undefined;
41
+ usage?: string | undefined;
42
+ }, {
43
+ generatedName: string;
44
+ component: string;
45
+ dryRun: boolean;
46
+ filesWritten: string[];
47
+ dependenciesInstalled: string[];
48
+ importStatement?: string | undefined;
49
+ usage?: string | undefined;
50
+ }>;
2
51
  export declare function registerAddCommand(program: Command): void;
@@ -6,14 +6,26 @@ import { enableDebugLogger, logger } from '../util/logger.js';
6
6
  import { MagicPathError } from '../util/error.js';
7
7
  import { AuthRequiredError } from '../util/authError.js';
8
8
  import { brandSpinner } from '../util/ui.js';
9
+ import { isJsonMode, jsonResult, jsonError } from '../util/output.js';
9
10
  import { fetchComponent, checkExistingFiles, writeComponentFiles, checkUtilsExists, writeUtilsFile, resolveComponentsPath, resolveUtilsPath, sanitizeComponentFolderName, extractComponentExports, generateImportStatement, generateUsageExample, writeUsageFile, DEFAULT_COMPONENTS_PATH, } from '../util/component.js';
10
11
  import { installPackages } from '../util/dependencies.js';
11
12
  import { runLoginFlow } from './auth.js';
12
- const addOptionsSchema = z.object({
13
+ export const addOptionsSchema = z.object({
13
14
  yes: z.boolean().default(false),
14
15
  overwrite: z.boolean().default(false),
15
16
  path: z.string().optional(),
16
17
  debug: z.boolean().default(false),
18
+ dryRun: z.boolean().default(false),
19
+ inspect: z.boolean().default(false),
20
+ });
21
+ export const addOutputSchema = z.object({
22
+ component: z.string(),
23
+ generatedName: z.string(),
24
+ filesWritten: z.array(z.string()),
25
+ dependenciesInstalled: z.array(z.string()),
26
+ importStatement: z.string().optional(),
27
+ usage: z.string().optional(),
28
+ dryRun: z.boolean(),
17
29
  });
18
30
  export function registerAddCommand(program) {
19
31
  program
@@ -24,6 +36,8 @@ export function registerAddCommand(program) {
24
36
  .option('-o, --overwrite', 'Overwrite existing files', false)
25
37
  .option('-p, --path <path>', `Custom path for components (default: ${DEFAULT_COMPONENTS_PATH})`)
26
38
  .option('-d, --debug', 'Enable debug logging', false)
39
+ .option('--dry-run', 'Show what would happen without writing files', false)
40
+ .option('--inspect', 'Show component source code without installing (implies --dry-run)', false)
27
41
  .action(async (generatedName, options) => {
28
42
  try {
29
43
  let addOptions;
@@ -35,6 +49,15 @@ export function registerAddCommand(program) {
35
49
  }
36
50
  if (addOptions.debug)
37
51
  enableDebugLogger();
52
+ // --inspect implies --dry-run and --yes (no prompts, no writing)
53
+ if (addOptions.inspect) {
54
+ addOptions.dryRun = true;
55
+ addOptions.yes = true;
56
+ }
57
+ // In JSON mode, imply --yes (skip prompts)
58
+ const json = isJsonMode();
59
+ if (json)
60
+ addOptions.yes = true;
38
61
  logger.debug({ generatedName, options: addOptions });
39
62
  const cwd = process.cwd();
40
63
  // Check if we're in a valid project directory
@@ -43,15 +66,20 @@ export function registerAddCommand(program) {
43
66
  throw new MagicPathError('No package.json found. Please run this command from the root of your React project.');
44
67
  }
45
68
  // Step 1: Fetch component from registry
46
- const fetchSpinner = brandSpinner(`Fetching component "${generatedName}"...`).start();
69
+ const fetchSpinner = json
70
+ ? null
71
+ : brandSpinner(`Fetching component "${generatedName}"...`).start();
47
72
  let componentData;
48
73
  try {
49
74
  componentData = await fetchComponent(generatedName);
50
- fetchSpinner.succeed(`Found component: ${componentData.name}`);
75
+ fetchSpinner?.succeed(`Found component: ${componentData.name}`);
51
76
  }
52
77
  catch (err) {
53
78
  if (err instanceof AuthRequiredError) {
54
- fetchSpinner.fail('Not logged in');
79
+ fetchSpinner?.fail('Not logged in');
80
+ if (json) {
81
+ throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.');
82
+ }
55
83
  const { shouldLogin } = await prompts({
56
84
  type: 'confirm',
57
85
  name: 'shouldLogin',
@@ -82,7 +110,7 @@ export function registerAddCommand(program) {
82
110
  }
83
111
  }
84
112
  else {
85
- fetchSpinner.fail('Failed to fetch component');
113
+ fetchSpinner?.fail('Failed to fetch component');
86
114
  if (err instanceof MagicPathError) {
87
115
  throw err;
88
116
  }
@@ -103,8 +131,10 @@ export function registerAddCommand(program) {
103
131
  // Step 2: Check for existing files
104
132
  const existingFiles = checkExistingFiles(componentData.files, componentsPath);
105
133
  if (existingFiles.length > 0 && !addOptions.overwrite) {
106
- console.log('\nThe following files already exist:');
107
- existingFiles.forEach((file) => console.log(` - ${file}`));
134
+ if (!json) {
135
+ console.log('\nThe following files already exist:');
136
+ existingFiles.forEach((file) => console.log(` - ${file}`));
137
+ }
108
138
  if (!addOptions.yes) {
109
139
  const { shouldOverwrite } = await prompts({
110
140
  type: 'confirm',
@@ -118,6 +148,9 @@ export function registerAddCommand(program) {
118
148
  }
119
149
  }
120
150
  else {
151
+ if (json) {
152
+ throw new MagicPathError(`Files already exist: ${existingFiles.join(', ')}. Use --overwrite to replace.`);
153
+ }
121
154
  console.log('Use --overwrite to replace existing files.');
122
155
  return;
123
156
  }
@@ -139,35 +172,100 @@ export function registerAddCommand(program) {
139
172
  return;
140
173
  }
141
174
  }
175
+ // Build result data for JSON output
176
+ const filesWritten = componentData.files.map((f) => path.relative(cwd, path.join(componentsPath, f.path)));
177
+ // Extract import info
178
+ const mainFile = componentData.files[0];
179
+ let importStatement;
180
+ let usageStr;
181
+ if (mainFile) {
182
+ const fileName = mainFile.name.replace(/\.tsx?$/, '');
183
+ const importPath = addOptions.path
184
+ ? `@/${addOptions.path}/${componentFolderName}/${fileName}`
185
+ : `@/components/magicpath/${componentFolderName}/${fileName}`;
186
+ const exportInfo = extractComponentExports(mainFile.content);
187
+ if (exportInfo) {
188
+ importStatement = generateImportStatement(exportInfo, importPath);
189
+ usageStr = generateUsageExample(exportInfo);
190
+ }
191
+ else {
192
+ importStatement = `import { ${fileName} } from '${importPath}';`;
193
+ }
194
+ }
195
+ // Dry run: return what would happen without writing
196
+ if (addOptions.dryRun) {
197
+ const fileContents = addOptions.inspect || json
198
+ ? componentData.files.map((f) => ({
199
+ path: f.path,
200
+ name: f.name,
201
+ content: f.content,
202
+ }))
203
+ : undefined;
204
+ if (json) {
205
+ jsonResult({
206
+ component: componentData.name,
207
+ generatedName: componentData.generatedName,
208
+ filesWritten,
209
+ files: fileContents,
210
+ dependenciesInstalled: componentData.dependencies,
211
+ importStatement,
212
+ usage: usageStr,
213
+ dryRun: true,
214
+ });
215
+ }
216
+ console.log('\n[Dry run] Would install:');
217
+ console.log(` Component: ${componentData.name}`);
218
+ console.log(` Files: ${filesWritten.join(', ')}`);
219
+ console.log(` Dependencies: ${componentData.dependencies.join(', ') || 'none'}`);
220
+ if (importStatement)
221
+ console.log(` Import: ${importStatement}`);
222
+ // --inspect: show file contents
223
+ if (addOptions.inspect) {
224
+ for (const f of componentData.files) {
225
+ console.log(`\n${'─'.repeat(60)}`);
226
+ console.log(` ${f.path}`);
227
+ console.log(`${'─'.repeat(60)}`);
228
+ console.log(f.content);
229
+ }
230
+ }
231
+ return;
232
+ }
142
233
  // Step 4: Write component files
143
- const writeSpinner = brandSpinner('Writing component files...').start();
234
+ const writeSpinner = json
235
+ ? null
236
+ : brandSpinner('Writing component files...').start();
144
237
  try {
145
238
  writeComponentFiles(componentData.files, componentsPath, true);
146
- writeSpinner.succeed(`Wrote ${componentData.files.length} file(s) to ${path.relative(cwd, componentsPath) || '.'}`);
239
+ writeSpinner?.succeed(`Wrote ${componentData.files.length} file(s) to ${path.relative(cwd, componentsPath) || '.'}`);
147
240
  }
148
241
  catch (err) {
149
- writeSpinner.fail('Failed to write component files');
242
+ writeSpinner?.fail('Failed to write component files');
150
243
  throw new MagicPathError('Failed to write component files. Please check permissions and try again.');
151
244
  }
152
245
  // Step 5: Install utils if needed
153
246
  const utilsExists = checkUtilsExists(utilsPath);
154
247
  if (!utilsExists && componentData.utils.content) {
155
- const utilsSpinner = brandSpinner('Installing utilities...').start();
248
+ const utilsSpinner = json
249
+ ? null
250
+ : brandSpinner('Installing utilities...').start();
156
251
  try {
157
252
  writeUtilsFile(componentData.utils.content, utilsPath);
158
- utilsSpinner.succeed(`Wrote utils.ts to ${path.relative(cwd, utilsPath) || '.'}`);
253
+ utilsSpinner?.succeed(`Wrote utils.ts to ${path.relative(cwd, utilsPath) || '.'}`);
159
254
  }
160
255
  catch (err) {
161
- utilsSpinner.fail('Failed to write utils file');
256
+ utilsSpinner?.fail('Failed to write utils file');
162
257
  logger.debug({ err });
163
- // Non-fatal - continue with installation
164
- console.log(' Warning: Could not write utils.ts. You may need to create it manually.');
258
+ if (!json) {
259
+ console.log(' Warning: Could not write utils.ts. You may need to create it manually.');
260
+ }
165
261
  }
166
262
  }
167
263
  // Step 6: Install dependencies
264
+ const installedDeps = [];
168
265
  if (componentData.dependencies.length > 0) {
169
266
  try {
170
267
  const { installed, skipped } = installPackages(componentData.dependencies, cwd);
268
+ installedDeps.push(...installed);
171
269
  if (skipped.length > 0) {
172
270
  logger.debug({
173
271
  message: 'Skipped already installed packages',
@@ -177,39 +275,44 @@ export function registerAddCommand(program) {
177
275
  }
178
276
  catch (err) {
179
277
  if (err instanceof MagicPathError) {
180
- // Non-fatal - show warning but don't fail
181
- console.log(`\n⚠️ ${err.message}`);
278
+ if (!json)
279
+ console.log(`\n⚠️ ${err.message}`);
182
280
  }
183
281
  }
184
282
  }
283
+ // JSON output
284
+ if (json) {
285
+ jsonResult({
286
+ component: componentData.name,
287
+ generatedName: componentData.generatedName,
288
+ filesWritten,
289
+ dependenciesInstalled: installedDeps,
290
+ importStatement,
291
+ usage: usageStr,
292
+ dryRun: false,
293
+ });
294
+ }
185
295
  // Step 7: Show success message and write usage file
186
296
  console.log(`\n✅ Successfully added "${componentData.name}" to your project!`);
187
297
  console.log(`\nUsage:`);
188
- // Show import and usage example
189
- const mainFile = componentData.files[0];
190
298
  if (mainFile) {
191
299
  const fileName = mainFile.name.replace(/\.tsx?$/, '');
192
300
  const importPath = addOptions.path
193
301
  ? `@/${addOptions.path}/${componentFolderName}/${fileName}`
194
302
  : `@/components/magicpath/${componentFolderName}/${fileName}`;
195
- // Try to extract actual export info from the component source
196
303
  const exportInfo = extractComponentExports(mainFile.content);
197
304
  if (exportInfo) {
198
- // Show accurate import statement based on actual exports
199
305
  console.log(` ${generateImportStatement(exportInfo, importPath)}`);
200
306
  console.log('');
201
307
  console.log(` ${generateUsageExample(exportInfo)}`);
202
- // Show required props hint if there are any
203
308
  if (exportInfo.requiredProps.length > 0) {
204
309
  console.log('');
205
310
  console.log(` Required props: ${exportInfo.requiredProps.join(', ')}`);
206
311
  }
207
312
  }
208
313
  else {
209
- // Fallback to simple named export assumption
210
314
  console.log(` import { ${fileName} } from '${importPath}';`);
211
315
  }
212
- // Write usage.md file to the component folder
213
316
  try {
214
317
  writeUsageFile(componentsPath, {
215
318
  componentName: componentData.name,
@@ -221,11 +324,12 @@ export function registerAddCommand(program) {
221
324
  }
222
325
  catch (err) {
223
326
  logger.debug({ err });
224
- // Non-fatal - just skip writing the usage file
225
327
  }
226
328
  }
227
329
  }
228
330
  catch (err) {
331
+ if (isJsonMode())
332
+ jsonError(err);
229
333
  if (err instanceof MagicPathError) {
230
334
  console.error(`\n${err.message}`);
231
335
  process.exit(1);
@@ -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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"}
@@ -4,7 +4,8 @@ import axios from 'axios';
4
4
  import { exec } from 'child_process';
5
5
  import { MagicPathError } from '../util/error.js';
6
6
  import { makeWebUrl, makeAuthUrl } from '../util/api.js';
7
- import { saveTokens, clearTokens } from '../util/auth.js';
7
+ import { saveTokens, clearTokens, loadTokens } from '../util/auth.js';
8
+ import { isJsonMode, jsonResult, jsonError } from '../util/output.js';
8
9
  /**
9
10
  * Run the interactive login flow: open browser, prompt for code, exchange for tokens.
10
11
  * Returns true if login succeeded, false if cancelled.
@@ -50,14 +51,41 @@ export function registerAuthCommands(program) {
50
51
  program
51
52
  .command('login')
52
53
  .description('Log in to your MagicPath account')
53
- .action(async () => {
54
+ .option('--code <code>', 'Exchange an authorization code non-interactively')
55
+ .action(async (options) => {
54
56
  try {
57
+ if (options.code) {
58
+ // Non-interactive: exchange auth code directly
59
+ const response = await axios.post(makeAuthUrl('extension/tokens'), {
60
+ token: options.code,
61
+ });
62
+ const { access_token, refresh_token } = response.data;
63
+ saveTokens(access_token, refresh_token);
64
+ if (isJsonMode()) {
65
+ jsonResult({ authenticated: true, method: 'code' });
66
+ }
67
+ console.log('Logged in successfully!');
68
+ return;
69
+ }
70
+ if (isJsonMode()) {
71
+ // In JSON mode, check if already authenticated via env var or stored tokens
72
+ if (process.env.MAGICPATH_TOKEN) {
73
+ jsonResult({ authenticated: true, method: 'environment' });
74
+ }
75
+ const tokens = loadTokens();
76
+ if (tokens) {
77
+ jsonResult({ authenticated: true, method: 'stored' });
78
+ }
79
+ jsonError(new Error('Not authenticated. Set MAGICPATH_TOKEN environment variable or run login interactively.'));
80
+ }
55
81
  const loggedIn = await runLoginFlow();
56
82
  if (!loggedIn) {
57
83
  console.log('Login cancelled.');
58
84
  }
59
85
  }
60
86
  catch (err) {
87
+ if (isJsonMode())
88
+ jsonError(err);
61
89
  if (err instanceof MagicPathError) {
62
90
  console.error(`\n${err.message}`);
63
91
  process.exit(1);
@@ -70,6 +98,9 @@ export function registerAuthCommands(program) {
70
98
  .description('Log out of your MagicPath account')
71
99
  .action(() => {
72
100
  clearTokens();
101
+ if (isJsonMode()) {
102
+ jsonResult({ loggedOut: true });
103
+ }
73
104
  console.log('Logged out successfully.');
74
105
  });
75
106
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}