magicpath-ai 1.4.0 → 1.5.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/dist/cli.js +137 -50
  2. package/package.json +9 -7
  3. package/dist/cli.d.ts +0 -2
  4. package/dist/cli.js.map +0 -1
  5. package/dist/commands/add.d.ts +0 -48
  6. package/dist/commands/add.js +0 -451
  7. package/dist/commands/add.js.map +0 -1
  8. package/dist/commands/auth.d.ts +0 -7
  9. package/dist/commands/auth.js +0 -189
  10. package/dist/commands/auth.js.map +0 -1
  11. package/dist/commands/clone.d.ts +0 -2
  12. package/dist/commands/clone.js +0 -241
  13. package/dist/commands/clone.js.map +0 -1
  14. package/dist/commands/get-theme.d.ts +0 -2
  15. package/dist/commands/get-theme.js +0 -134
  16. package/dist/commands/get-theme.js.map +0 -1
  17. package/dist/commands/info.d.ts +0 -2
  18. package/dist/commands/info.js +0 -128
  19. package/dist/commands/info.js.map +0 -1
  20. package/dist/commands/inspect.d.ts +0 -53
  21. package/dist/commands/inspect.js +0 -122
  22. package/dist/commands/inspect.js.map +0 -1
  23. package/dist/commands/list-installed.d.ts +0 -2
  24. package/dist/commands/list-installed.js +0 -112
  25. package/dist/commands/list-installed.js.map +0 -1
  26. package/dist/commands/list-themes.d.ts +0 -2
  27. package/dist/commands/list-themes.js +0 -94
  28. package/dist/commands/list-themes.js.map +0 -1
  29. package/dist/commands/list.d.ts +0 -2
  30. package/dist/commands/list.js +0 -216
  31. package/dist/commands/list.js.map +0 -1
  32. package/dist/commands/schema.d.ts +0 -2
  33. package/dist/commands/schema.js +0 -282
  34. package/dist/commands/schema.js.map +0 -1
  35. package/dist/commands/search.d.ts +0 -2
  36. package/dist/commands/search.js +0 -124
  37. package/dist/commands/search.js.map +0 -1
  38. package/dist/commands/setup-skills.d.ts +0 -2
  39. package/dist/commands/setup-skills.js +0 -13
  40. package/dist/commands/setup-skills.js.map +0 -1
  41. package/dist/commands/view.d.ts +0 -2
  42. package/dist/commands/view.js +0 -27
  43. package/dist/commands/view.js.map +0 -1
  44. package/dist/commands/whoami.d.ts +0 -2
  45. package/dist/commands/whoami.js +0 -66
  46. package/dist/commands/whoami.js.map +0 -1
  47. package/dist/util/api.d.ts +0 -14
  48. package/dist/util/api.js +0 -40
  49. package/dist/util/api.js.map +0 -1
  50. package/dist/util/auth.d.ts +0 -25
  51. package/dist/util/auth.js +0 -106
  52. package/dist/util/auth.js.map +0 -1
  53. package/dist/util/authError.d.ts +0 -4
  54. package/dist/util/authError.js +0 -7
  55. package/dist/util/authError.js.map +0 -1
  56. package/dist/util/banner.d.ts +0 -1
  57. package/dist/util/banner.js +0 -79
  58. package/dist/util/banner.js.map +0 -1
  59. package/dist/util/component.d.ts +0 -186
  60. package/dist/util/component.js +0 -349
  61. package/dist/util/component.js.map +0 -1
  62. package/dist/util/dependencies.d.ts +0 -12
  63. package/dist/util/dependencies.js +0 -93
  64. package/dist/util/dependencies.js.map +0 -1
  65. package/dist/util/error.d.ts +0 -9
  66. package/dist/util/error.js +0 -10
  67. package/dist/util/error.js.map +0 -1
  68. package/dist/util/ide.d.ts +0 -3
  69. package/dist/util/ide.js +0 -145
  70. package/dist/util/ide.js.map +0 -1
  71. package/dist/util/logger.d.ts +0 -7
  72. package/dist/util/logger.js +0 -21
  73. package/dist/util/logger.js.map +0 -1
  74. package/dist/util/output.d.ts +0 -15
  75. package/dist/util/output.js +0 -36
  76. package/dist/util/output.js.map +0 -1
  77. package/dist/util/project.d.ts +0 -3
  78. package/dist/util/project.js +0 -64
  79. package/dist/util/project.js.map +0 -1
  80. package/dist/util/ui.d.ts +0 -11
  81. package/dist/util/ui.js +0 -30
  82. package/dist/util/ui.js.map +0 -1
@@ -1,216 +0,0 @@
1
- import axios from 'axios';
2
- import { brandSpinner } from '../util/ui.js';
3
- import { MagicPathError } from '../util/error.js';
4
- import { getAuthHeaders } from '../util/auth.js';
5
- import { getUserProjectsUrl, getProjectComponentsUrl } from '../util/api.js';
6
- import { isJsonMode, jsonResult, jsonError } from '../util/output.js';
7
- export function registerListCommands(program) {
8
- program
9
- .command('list-projects')
10
- .description('List all projects for the current user')
11
- .option('--limit <n>', 'Maximum number of results')
12
- .option('--offset <n>', 'Number of results to skip', '0')
13
- .action(async (opts) => {
14
- const json = isJsonMode();
15
- const limit = opts.limit ? parseInt(opts.limit, 10) : undefined;
16
- const offset = parseInt(opts.offset, 10) || 0;
17
- try {
18
- let headers;
19
- try {
20
- headers = getAuthHeaders();
21
- }
22
- catch {
23
- throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.', {
24
- code: 'NOT_AUTHENTICATED',
25
- suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
26
- });
27
- }
28
- const spinner = json
29
- ? null
30
- : brandSpinner('Fetching projects...').start();
31
- try {
32
- const response = await axios.get(`${getUserProjectsUrl()}?slim=true`, { headers });
33
- const allProjects = response.data.data?.projects ??
34
- response.data.projects ??
35
- response.data;
36
- const total = Array.isArray(allProjects) ? allProjects.length : 0;
37
- // Client-side pagination (backend returns all projects)
38
- let projects = Array.isArray(allProjects) ? allProjects : [];
39
- if (offset > 0)
40
- projects = projects.slice(offset);
41
- if (limit !== undefined)
42
- projects = projects.slice(0, limit);
43
- spinner?.succeed(`Found ${total} project(s)`);
44
- if (json) {
45
- jsonResult({
46
- projects,
47
- pagination: {
48
- total,
49
- limit: limit ?? total,
50
- offset,
51
- hasMore: offset + projects.length < total,
52
- },
53
- });
54
- }
55
- if (projects.length === 0) {
56
- console.log('\n No projects found.');
57
- return;
58
- }
59
- // Table output
60
- console.log('');
61
- const nameWidth = Math.max(4, ...projects.map((p) => (p.name || '').length));
62
- const ownerWidth = Math.max(5, ...projects.map((p) => (p.owner?.email || '').length));
63
- const typeWidth = 7; // "library" is longest
64
- const compWidth = 10;
65
- const updatedWidth = 10;
66
- console.log(` ${'Name'.padEnd(nameWidth)} ${'Type'.padEnd(typeWidth)} ${'Components'.padEnd(compWidth)} ${'Owner'.padEnd(ownerWidth)} Updated`);
67
- console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(typeWidth)} ${'─'.repeat(compWidth)} ${'─'.repeat(ownerWidth)} ${'─'.repeat(updatedWidth)}`);
68
- for (const p of projects) {
69
- const name = (p.name || '').padEnd(nameWidth);
70
- const type = (p.isLibrary ? 'library' : 'project').padEnd(typeWidth);
71
- const count = String(p.componentCount ?? p._count?.components ?? '?').padEnd(compWidth);
72
- const owner = (p.owner?.email || '').padEnd(ownerWidth);
73
- const updated = p.updatedAt
74
- ? new Date(p.updatedAt).toISOString().slice(0, 10)
75
- : '';
76
- console.log(` ${name} ${type} ${count} ${owner} ${updated}`);
77
- }
78
- if (limit !== undefined && offset + projects.length < total) {
79
- console.log(`\n Showing ${projects.length} of ${total}. Use --offset ${offset + projects.length} to see more.`);
80
- }
81
- }
82
- catch (err) {
83
- spinner?.fail('Failed to fetch projects');
84
- if (axios.isAxiosError(err)) {
85
- if (err.response?.status === 401) {
86
- throw new MagicPathError('Token is invalid or expired. Run `magicpath-ai login`.', {
87
- code: 'TOKEN_EXPIRED',
88
- suggestion: 'Run `magicpath-ai login` to re-authenticate.',
89
- });
90
- }
91
- throw new MagicPathError(`API error: ${err.response?.status}`);
92
- }
93
- throw err;
94
- }
95
- }
96
- catch (err) {
97
- if (json)
98
- jsonError(err);
99
- if (err instanceof MagicPathError) {
100
- console.error(`\n${err.message}`);
101
- process.exit(1);
102
- }
103
- throw err;
104
- }
105
- });
106
- program
107
- .command('list-components')
108
- .description('List components in a project')
109
- .argument('<projectId>', 'The project ID')
110
- .option('--limit <n>', 'Maximum number of results', '100')
111
- .option('--after <id>', 'Cursor: fetch components after this ID (for pagination)')
112
- .option('--sort-by <field>', 'Sort by field (name, createdAt)', 'name')
113
- .option('--order <dir>', 'Sort direction (asc, desc)', 'asc')
114
- .action(async (projectId, opts) => {
115
- const json = isJsonMode();
116
- const limit = parseInt(opts.limit, 10) || 100;
117
- try {
118
- let headers;
119
- try {
120
- headers = getAuthHeaders();
121
- }
122
- catch {
123
- throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.', {
124
- code: 'NOT_AUTHENTICATED',
125
- suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
126
- });
127
- }
128
- const spinner = json
129
- ? null
130
- : brandSpinner('Fetching components...').start();
131
- try {
132
- const params = new URLSearchParams({
133
- limit: String(limit),
134
- revisionStatus: 'COMPLETED',
135
- sortBy: opts.sortBy,
136
- order: opts.order,
137
- slim: 'true',
138
- });
139
- if (opts.after)
140
- params.set('after', opts.after);
141
- const url = `${getProjectComponentsUrl(projectId)}?${params}`;
142
- const response = await axios.get(url, { headers });
143
- const components = response.data.data?.components ??
144
- response.data.components ??
145
- response.data;
146
- const pagination = response.data.data?.pagination ?? response.data.pagination;
147
- const count = Array.isArray(components) ? components.length : 0;
148
- spinner?.succeed(`Found ${count} component(s)`);
149
- if (json) {
150
- jsonResult({
151
- components,
152
- pagination: pagination ?? {
153
- limit,
154
- hasNext: false,
155
- lastId: null,
156
- },
157
- });
158
- }
159
- if (!Array.isArray(components) || components.length === 0) {
160
- console.log('\n No components found.');
161
- return;
162
- }
163
- // Table output
164
- console.log('');
165
- const nameWidth = Math.max(4, ...components.map((c) => (c.name || '').length));
166
- const genWidth = Math.max(14, ...components.map((c) => (c.generatedName || '').length));
167
- console.log(` ${'Name'.padEnd(nameWidth)} ${'Generated Name'.padEnd(genWidth)} ${'Rev'.padEnd(4)} ${'Views'.padEnd(6)} ${'Likes'.padEnd(6)} ${'Remixes'.padEnd(7)} ${'Updated'.padEnd(10)} ID`);
168
- console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(genWidth)} ${'─'.repeat(4)} ${'─'.repeat(6)} ${'─'.repeat(6)} ${'─'.repeat(7)} ${'─'.repeat(10)} ${'─'.repeat(20)}`);
169
- for (const c of components) {
170
- const name = (c.name || '').padEnd(nameWidth);
171
- const gen = (c.generatedName || '').padEnd(genWidth);
172
- const rev = String(c.revisionCount ?? '?').padEnd(4);
173
- const views = String(c.viewCount ?? 0).padEnd(6);
174
- const likes = String(c.likeCount ?? 0).padEnd(6);
175
- const remixes = String(c.remixCount ?? 0).padEnd(7);
176
- const updated = c.updatedAt
177
- ? new Date(c.updatedAt).toISOString().slice(0, 10)
178
- : '';
179
- console.log(` ${name} ${gen} ${rev} ${views} ${likes} ${remixes} ${updated.padEnd(10)} ${c.id || ''}`);
180
- }
181
- if (pagination?.hasNext) {
182
- console.log(`\n More results available. Use --after ${pagination.lastId} to see the next page.`);
183
- }
184
- }
185
- catch (err) {
186
- spinner?.fail('Failed to fetch components');
187
- if (axios.isAxiosError(err)) {
188
- if (err.response?.status === 401) {
189
- throw new MagicPathError('Token is invalid or expired. Run `magicpath-ai login`.', {
190
- code: 'TOKEN_EXPIRED',
191
- suggestion: 'Run `magicpath-ai login` to re-authenticate.',
192
- });
193
- }
194
- if (err.response?.status === 404) {
195
- throw new MagicPathError(`Project "${projectId}" not found.`, {
196
- code: 'NOT_FOUND',
197
- suggestion: 'Run `magicpath-ai list-projects` to see available projects.',
198
- });
199
- }
200
- throw new MagicPathError(`API error: ${err.response?.status}`);
201
- }
202
- throw err;
203
- }
204
- }
205
- catch (err) {
206
- if (json)
207
- jsonError(err);
208
- if (err instanceof MagicPathError) {
209
- console.error(`\n${err.message}`);
210
- process.exit(1);
211
- }
212
- throw err;
213
- }
214
- });
215
- }
216
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerSchemaCommand(program: Command): void;
@@ -1,282 +0,0 @@
1
- import { z } from 'zod';
2
- import { inspectInputSchema, inspectOutputSchema } from './inspect.js';
3
- // ── Command schemas ──
4
- const addInputSchema = z.object({
5
- generatedName: z
6
- .string()
7
- .describe('The generated name of the component (e.g., wispy-river-5234)'),
8
- yes: z.boolean().default(false).describe('Skip confirmation prompts'),
9
- overwrite: z.boolean().default(false).describe('Overwrite existing files'),
10
- path: z
11
- .string()
12
- .optional()
13
- .describe('Custom path for components (default: src/components/magicpath)'),
14
- dryRun: z
15
- .boolean()
16
- .default(false)
17
- .describe('Show what would happen without writing files'),
18
- });
19
- const addOutputSchema = z.object({
20
- component: z.string().describe('Component display name'),
21
- generatedName: z.string().describe('Component generated name'),
22
- filesWritten: z.array(z.string()).describe('Paths of files written'),
23
- dependenciesInstalled: z.array(z.string()).describe('Packages installed'),
24
- importStatement: z
25
- .string()
26
- .optional()
27
- .describe('Import statement for the component'),
28
- usage: z.string().optional().describe('JSX usage example'),
29
- dryRun: z.boolean().describe('Whether this was a dry run'),
30
- });
31
- const cloneInputSchema = z.object({
32
- key: z.string().describe('One-time access key'),
33
- dir: z.string().describe('Target directory'),
34
- name: z.string().describe('Project name'),
35
- });
36
- const cloneOutputSchema = z.object({
37
- projectDir: z.string().describe('Path to the created project'),
38
- });
39
- const whoamiOutputSchema = z.object({
40
- id: z.string().optional(),
41
- displayName: z.string().optional(),
42
- email: z.string().optional(),
43
- });
44
- const listProjectsOutputSchema = z.object({
45
- projects: z.array(z.object({
46
- id: z.string(),
47
- name: z.string(),
48
- isLibrary: z.boolean(),
49
- isSharingEnabled: z.boolean(),
50
- allowPublicListing: z.boolean(),
51
- createdAt: z.string(),
52
- updatedAt: z.string(),
53
- componentCount: z.number(),
54
- owner: z
55
- .object({
56
- displayName: z.string(),
57
- email: z.string(),
58
- })
59
- .nullable(),
60
- isActive: z.boolean(),
61
- isDefaultLibrary: z.boolean(),
62
- })),
63
- pagination: z.object({
64
- total: z.number(),
65
- limit: z.number(),
66
- offset: z.number(),
67
- hasMore: z.boolean(),
68
- }),
69
- });
70
- const listComponentsInputSchema = z.object({
71
- projectId: z.string().describe('The project ID'),
72
- });
73
- const listComponentsOutputSchema = z.object({
74
- components: z.array(z.object({
75
- id: z.string(),
76
- name: z.string(),
77
- generatedName: z.string(),
78
- createdAt: z.string(),
79
- updatedAt: z.string(),
80
- parentId: z.string().nullable(),
81
- revisionCount: z.number(),
82
- viewCount: z.number(),
83
- likeCount: z.number(),
84
- remixCount: z.number(),
85
- previewImageUrl: z.string().nullable(),
86
- })),
87
- pagination: z.object({
88
- limit: z.number(),
89
- hasNext: z.boolean(),
90
- lastId: z.string().nullable(),
91
- }),
92
- });
93
- const viewInputSchema = z.object({
94
- generatedName: z.string().describe('The generated name of the component'),
95
- });
96
- const viewOutputSchema = z.object({
97
- url: z.string().describe('Preview URL to open in a browser'),
98
- generatedName: z.string(),
99
- });
100
- const listThemesOutputSchema = z.object({
101
- themes: z.array(z.object({
102
- id: z.string(),
103
- name: z.string(),
104
- isPublic: z.boolean(),
105
- createdAt: z.string(),
106
- updatedAt: z.string(),
107
- })),
108
- });
109
- const getThemeInputSchema = z.object({
110
- themeIdOrName: z
111
- .string()
112
- .describe('Theme ID (numeric) or name (case-insensitive match)'),
113
- });
114
- const getThemeOutputSchema = z.object({
115
- id: z.string(),
116
- name: z.string(),
117
- theme: z.object({
118
- light: z.record(z.string(), z.string()),
119
- dark: z.record(z.string(), z.string()),
120
- }),
121
- defaultTheme: z.string(),
122
- prompt: z
123
- .string()
124
- .optional()
125
- .describe('Styling instructions for AI agents'),
126
- fonts: z
127
- .record(z.string(), z.object({
128
- source: z.string(),
129
- weights: z
130
- .record(z.string(), z.object({
131
- fontId: z.string(),
132
- url: z.string(),
133
- format: z.string(),
134
- }))
135
- .optional(),
136
- }))
137
- .optional(),
138
- version: z.number(),
139
- });
140
- const schemas = {
141
- view: {
142
- description: 'Get the preview URL for a MagicPath component',
143
- input: viewInputSchema,
144
- output: viewOutputSchema,
145
- },
146
- add: {
147
- description: 'Add a MagicPath component to your project',
148
- input: addInputSchema,
149
- output: addOutputSchema,
150
- },
151
- inspect: {
152
- description: "Inspect a MagicPath component's source code without installing",
153
- input: inspectInputSchema,
154
- output: inspectOutputSchema,
155
- },
156
- clone: {
157
- description: 'Clone/download a MagicPath project',
158
- input: cloneInputSchema,
159
- output: cloneOutputSchema,
160
- },
161
- whoami: {
162
- description: 'Show the currently authenticated user',
163
- output: whoamiOutputSchema,
164
- },
165
- 'list-projects': {
166
- description: 'List all projects for the current user',
167
- output: listProjectsOutputSchema,
168
- },
169
- 'list-components': {
170
- description: 'List components in a project',
171
- input: listComponentsInputSchema,
172
- output: listComponentsOutputSchema,
173
- },
174
- 'list-themes': {
175
- description: 'List all themes (design systems) for the current user',
176
- output: listThemesOutputSchema,
177
- },
178
- 'get-theme': {
179
- description: 'Get a theme definition with CSS variables, fonts, and styling prompt',
180
- input: getThemeInputSchema,
181
- output: getThemeOutputSchema,
182
- },
183
- };
184
- function zodToJsonSchema(schema) {
185
- // Lightweight Zod → JSON Schema conversion
186
- return zodTypeToJson(schema);
187
- }
188
- function zodTypeToJson(schema) {
189
- const def = schema._def;
190
- if (!def)
191
- return {};
192
- const typeName = def.typeName;
193
- const result = {};
194
- if (def.description)
195
- result.description = def.description;
196
- switch (typeName) {
197
- case 'ZodString':
198
- result.type = 'string';
199
- break;
200
- case 'ZodNumber':
201
- result.type = 'number';
202
- break;
203
- case 'ZodBoolean':
204
- result.type = 'boolean';
205
- break;
206
- case 'ZodOptional':
207
- return zodTypeToJson(def.innerType);
208
- case 'ZodDefault':
209
- return { ...zodTypeToJson(def.innerType), default: def.defaultValue() };
210
- case 'ZodArray':
211
- result.type = 'array';
212
- result.items = zodTypeToJson(def.type);
213
- break;
214
- case 'ZodObject': {
215
- result.type = 'object';
216
- result.properties = {};
217
- const required = [];
218
- const shape = def.shape();
219
- for (const [key, value] of Object.entries(shape)) {
220
- result.properties[key] = zodTypeToJson(value);
221
- const innerDef = value._def;
222
- if (innerDef?.typeName !== 'ZodOptional' &&
223
- innerDef?.typeName !== 'ZodDefault') {
224
- required.push(key);
225
- }
226
- }
227
- if (required.length > 0)
228
- result.required = required;
229
- break;
230
- }
231
- default:
232
- result.type = 'string';
233
- }
234
- return result;
235
- }
236
- export function registerSchemaCommand(program) {
237
- program
238
- .command('schema')
239
- .description("Show JSON Schema for a command's input/output")
240
- .argument('[command]', 'Command name (e.g., add, view)')
241
- .option('--all', 'Show schemas for all commands')
242
- .action((commandName, options) => {
243
- if (options?.all) {
244
- const allSchemas = {};
245
- for (const [name, schemaEntry] of Object.entries(schemas)) {
246
- allSchemas[name] = {
247
- description: schemaEntry.description,
248
- input: schemaEntry.input
249
- ? zodToJsonSchema(schemaEntry.input)
250
- : undefined,
251
- output: schemaEntry.output
252
- ? zodToJsonSchema(schemaEntry.output)
253
- : undefined,
254
- };
255
- }
256
- console.log(JSON.stringify(allSchemas, null, 2));
257
- return;
258
- }
259
- if (!commandName) {
260
- console.log('Available commands:', Object.keys(schemas).join(', '));
261
- console.log('\nUsage: magicpath-ai schema <command>');
262
- console.log(' magicpath-ai schema --all');
263
- return;
264
- }
265
- const schema = schemas[commandName];
266
- if (!schema) {
267
- console.error(`Unknown command: ${commandName}`);
268
- console.error('Available:', Object.keys(schemas).join(', '));
269
- process.exit(1);
270
- }
271
- const result = {
272
- command: commandName,
273
- description: schema.description,
274
- };
275
- if (schema.input)
276
- result.input = zodToJsonSchema(schema.input);
277
- if (schema.output)
278
- result.output = zodToJsonSchema(schema.output);
279
- console.log(JSON.stringify(result, null, 2));
280
- });
281
- }
282
- //# sourceMappingURL=schema.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/commands/schema.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerSearchCommand(program: Command): void;
@@ -1,124 +0,0 @@
1
- import axios from 'axios';
2
- import { brandSpinner } from '../util/ui.js';
3
- import { MagicPathError } from '../util/error.js';
4
- import { getAuthHeaders } from '../util/auth.js';
5
- import { getUserProjectsUrl, getProjectComponentsUrl } from '../util/api.js';
6
- import { isJsonMode, jsonResult, jsonError } from '../util/output.js';
7
- export function registerSearchCommand(program) {
8
- program
9
- .command('search')
10
- .description('Search component names across all projects')
11
- .argument('<query>', 'Search query (case-insensitive substring match)')
12
- .option('--limit <n>', 'Maximum number of results', '20')
13
- .action(async (query, opts) => {
14
- const json = isJsonMode();
15
- const limit = parseInt(opts.limit, 10) || 20;
16
- try {
17
- let headers;
18
- try {
19
- headers = getAuthHeaders();
20
- }
21
- catch {
22
- throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.', {
23
- code: 'NOT_AUTHENTICATED',
24
- suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
25
- });
26
- }
27
- const spinner = json
28
- ? null
29
- : brandSpinner('Searching components...').start();
30
- try {
31
- // Fetch all projects
32
- const projResponse = await axios.get(getUserProjectsUrl(), {
33
- headers,
34
- });
35
- const projects = projResponse.data.data?.projects ??
36
- projResponse.data.projects ??
37
- projResponse.data;
38
- if (!Array.isArray(projects) || projects.length === 0) {
39
- spinner?.succeed('No projects found');
40
- if (json)
41
- jsonResult([]);
42
- console.log('\n No projects found.');
43
- return;
44
- }
45
- // Fetch components from all projects in parallel
46
- const componentResults = await Promise.all(projects.map(async (project) => {
47
- try {
48
- const url = `${getProjectComponentsUrl(project.id)}?limit=100&revisionStatus=COMPLETED&slim=true`;
49
- const response = await axios.get(url, { headers });
50
- const components = response.data.data?.components ??
51
- response.data.components ??
52
- response.data;
53
- return {
54
- project,
55
- components: Array.isArray(components) ? components : [],
56
- };
57
- }
58
- catch {
59
- return { project, components: [] };
60
- }
61
- }));
62
- // Filter by query
63
- const lowerQuery = query.toLowerCase();
64
- const matches = [];
65
- for (const { project, components } of componentResults) {
66
- for (const c of components) {
67
- if (matches.length >= limit)
68
- break;
69
- if ((c.name || '').toLowerCase().includes(lowerQuery)) {
70
- matches.push({
71
- name: c.name,
72
- generatedName: c.generatedName,
73
- id: c.id,
74
- projectName: project.name,
75
- projectId: project.id,
76
- previewImageUrl: c.previewImageUrl ?? null,
77
- });
78
- }
79
- }
80
- if (matches.length >= limit)
81
- break;
82
- }
83
- spinner?.succeed(`Found ${matches.length} match(es) for "${query}"`);
84
- if (json) {
85
- jsonResult(matches);
86
- }
87
- if (matches.length === 0) {
88
- console.log(`\n No components matching "${query}".`);
89
- return;
90
- }
91
- // Table output
92
- console.log('');
93
- const nameWidth = Math.max(4, ...matches.map((m) => m.name.length));
94
- const genWidth = Math.max(13, ...matches.map((m) => m.generatedName.length));
95
- const projWidth = Math.max(7, ...matches.map((m) => m.projectName.length));
96
- console.log(` ${'Name'.padEnd(nameWidth)} ${'Generated Name'.padEnd(genWidth)} ${'Project'.padEnd(projWidth)}`);
97
- console.log(` ${'─'.repeat(nameWidth)} ${'─'.repeat(genWidth)} ${'─'.repeat(projWidth)}`);
98
- for (const m of matches) {
99
- console.log(` ${m.name.padEnd(nameWidth)} ${m.generatedName.padEnd(genWidth)} ${m.projectName.padEnd(projWidth)}`);
100
- }
101
- }
102
- catch (err) {
103
- spinner?.fail('Search failed');
104
- if (axios.isAxiosError(err)) {
105
- if (err.response?.status === 401) {
106
- throw new MagicPathError('Token is invalid or expired. Run `magicpath-ai login`.');
107
- }
108
- throw new MagicPathError(`API error: ${err.response?.status}`);
109
- }
110
- throw err;
111
- }
112
- }
113
- catch (err) {
114
- if (json)
115
- jsonError(err);
116
- if (err instanceof MagicPathError) {
117
- console.error(`\n${err.message}`);
118
- process.exit(1);
119
- }
120
- throw err;
121
- }
122
- });
123
- }
124
- //# sourceMappingURL=search.js.map