magicpath-ai 1.4.1 → 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 (88) hide show
  1. package/dist/cli.js +137 -52
  2. package/package.json +6 -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 -132
  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 -134
  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 -292
  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/selection.d.ts +0 -2
  39. package/dist/commands/selection.js +0 -157
  40. package/dist/commands/selection.js.map +0 -1
  41. package/dist/commands/setup-skills.d.ts +0 -2
  42. package/dist/commands/setup-skills.js +0 -13
  43. package/dist/commands/setup-skills.js.map +0 -1
  44. package/dist/commands/view.d.ts +0 -2
  45. package/dist/commands/view.js +0 -27
  46. package/dist/commands/view.js.map +0 -1
  47. package/dist/commands/whoami.d.ts +0 -2
  48. package/dist/commands/whoami.js +0 -66
  49. package/dist/commands/whoami.js.map +0 -1
  50. package/dist/util/api.d.ts +0 -17
  51. package/dist/util/api.js +0 -49
  52. package/dist/util/api.js.map +0 -1
  53. package/dist/util/auth.d.ts +0 -26
  54. package/dist/util/auth.js +0 -113
  55. package/dist/util/auth.js.map +0 -1
  56. package/dist/util/authError.d.ts +0 -4
  57. package/dist/util/authError.js +0 -7
  58. package/dist/util/authError.js.map +0 -1
  59. package/dist/util/banner.d.ts +0 -1
  60. package/dist/util/banner.js +0 -79
  61. package/dist/util/banner.js.map +0 -1
  62. package/dist/util/component.d.ts +0 -186
  63. package/dist/util/component.js +0 -349
  64. package/dist/util/component.js.map +0 -1
  65. package/dist/util/dependencies.d.ts +0 -12
  66. package/dist/util/dependencies.js +0 -93
  67. package/dist/util/dependencies.js.map +0 -1
  68. package/dist/util/error.d.ts +0 -9
  69. package/dist/util/error.js +0 -10
  70. package/dist/util/error.js.map +0 -1
  71. package/dist/util/ide.d.ts +0 -3
  72. package/dist/util/ide.js +0 -145
  73. package/dist/util/ide.js.map +0 -1
  74. package/dist/util/liveblocks.d.ts +0 -24
  75. package/dist/util/liveblocks.js +0 -112
  76. package/dist/util/liveblocks.js.map +0 -1
  77. package/dist/util/logger.d.ts +0 -7
  78. package/dist/util/logger.js +0 -21
  79. package/dist/util/logger.js.map +0 -1
  80. package/dist/util/output.d.ts +0 -15
  81. package/dist/util/output.js +0 -36
  82. package/dist/util/output.js.map +0 -1
  83. package/dist/util/project.d.ts +0 -3
  84. package/dist/util/project.js +0 -64
  85. package/dist/util/project.js.map +0 -1
  86. package/dist/util/ui.d.ts +0 -11
  87. package/dist/util/ui.js +0 -30
  88. package/dist/util/ui.js.map +0 -1
@@ -1,349 +0,0 @@
1
- import axios from 'axios';
2
- import fs from 'fs-extra';
3
- import path from 'path';
4
- import { z } from 'zod';
5
- import { makeRegistryUrl } from './api.js';
6
- import { MagicPathError } from './error.js';
7
- import { AuthRequiredError } from './authError.js';
8
- import { logger } from './logger.js';
9
- import { getAuthHeaders } from './auth.js';
10
- // Schema for the registry API response
11
- const componentFileSchema = z.object({
12
- name: z.string(),
13
- path: z.string(),
14
- content: z.string(),
15
- });
16
- const registryResponseSchema = z.object({
17
- data: z.object({
18
- name: z.string(),
19
- generatedName: z.string(),
20
- files: z.array(componentFileSchema),
21
- utils: z.object({
22
- content: z.string(),
23
- }),
24
- dependencies: z.array(z.string()),
25
- }),
26
- });
27
- /**
28
- * Extract export information from a component's source code
29
- * Parses the TSX/TS content to find exported components and their props
30
- */
31
- export function extractComponentExports(content) {
32
- // Try to find default export patterns
33
- // Pattern: export default function ComponentName
34
- const defaultFuncMatch = content.match(/export\s+default\s+function\s+([A-Z][a-zA-Z0-9]*)/);
35
- // Pattern: export default ComponentName (at end or with semicolon)
36
- const defaultVarMatch = content.match(/export\s+default\s+([A-Z][a-zA-Z0-9]*)\s*[;\n]/);
37
- // Try to find named export patterns
38
- // Pattern: export function ComponentName
39
- const namedFuncMatch = content.match(/export\s+function\s+([A-Z][a-zA-Z0-9]*)/);
40
- // Pattern: export const ComponentName
41
- const namedConstMatch = content.match(/export\s+const\s+([A-Z][a-zA-Z0-9]*)\s*[=:]/);
42
- let componentName = null;
43
- let isDefault = false;
44
- if (defaultFuncMatch) {
45
- componentName = defaultFuncMatch[1];
46
- isDefault = true;
47
- }
48
- else if (defaultVarMatch) {
49
- componentName = defaultVarMatch[1];
50
- isDefault = true;
51
- }
52
- else if (namedFuncMatch) {
53
- componentName = namedFuncMatch[1];
54
- }
55
- else if (namedConstMatch) {
56
- componentName = namedConstMatch[1];
57
- }
58
- if (!componentName) {
59
- return null;
60
- }
61
- // Try to find props interface/type
62
- // Pattern: interface ComponentNameProps { ... } or type ComponentNameProps = { ... }
63
- const propsTypeName = `${componentName}Props`;
64
- const propsInterfaceRegex = new RegExp(`(?:interface|type)\\s+${propsTypeName}\\s*(?:=\\s*)?\\{([^}]*)\\}`, 's');
65
- const propsMatch = content.match(propsInterfaceRegex);
66
- const requiredProps = [];
67
- const optionalProps = [];
68
- if (propsMatch) {
69
- const propsBody = propsMatch[1];
70
- // Parse individual props - look for patterns like:
71
- // propName: type (required)
72
- // propName?: type (optional)
73
- const propLines = propsBody.split(/[;\n]/).filter((line) => line.trim());
74
- for (const line of propLines) {
75
- // Skip comments and empty lines
76
- const trimmed = line.trim();
77
- if (!trimmed || trimmed.startsWith('//') || trimmed.startsWith('/*')) {
78
- continue;
79
- }
80
- // Match prop patterns: name?: type or name: type
81
- const propMatch = trimmed.match(/^(\w+)(\?)?:/);
82
- if (propMatch) {
83
- const propName = propMatch[1];
84
- const isOptional = !!propMatch[2];
85
- // Skip children prop as it's typically implicit
86
- if (propName === 'children')
87
- continue;
88
- if (isOptional) {
89
- optionalProps.push(propName);
90
- }
91
- else {
92
- requiredProps.push(propName);
93
- }
94
- }
95
- }
96
- }
97
- return {
98
- name: componentName,
99
- isDefault,
100
- propsType: propsMatch ? propsTypeName : undefined,
101
- requiredProps,
102
- optionalProps,
103
- };
104
- }
105
- /**
106
- * Generate an import statement for a component
107
- */
108
- export function generateImportStatement(exportInfo, importPath) {
109
- if (exportInfo.isDefault) {
110
- return `import ${exportInfo.name} from '${importPath}';`;
111
- }
112
- return `import { ${exportInfo.name} } from '${importPath}';`;
113
- }
114
- /**
115
- * Generate a usage example for a component
116
- */
117
- export function generateUsageExample(exportInfo) {
118
- const { name, requiredProps, optionalProps } = exportInfo;
119
- if (requiredProps.length === 0 && optionalProps.length === 0) {
120
- return `<${name} />`;
121
- }
122
- // Build props string with placeholders for required props
123
- const propsStr = requiredProps
124
- .map((prop) => `${prop}={/* TODO */}`)
125
- .join(' ');
126
- if (propsStr) {
127
- return `<${name} ${propsStr} />`;
128
- }
129
- // If only optional props, show a simple example
130
- return `<${name} />`;
131
- }
132
- /**
133
- * Generate a usage.md file content for a component
134
- */
135
- export function generateUsageMarkdown(options) {
136
- const { componentName, importPath, exportInfo, fileName } = options;
137
- const lines = [`# ${componentName}`, '', '## Import', '', '```tsx'];
138
- if (exportInfo) {
139
- lines.push(generateImportStatement(exportInfo, importPath));
140
- lines.push('```');
141
- lines.push('');
142
- lines.push('## Usage');
143
- lines.push('');
144
- lines.push('```tsx');
145
- lines.push(generateUsageExample(exportInfo));
146
- lines.push('```');
147
- if (exportInfo.requiredProps.length > 0) {
148
- lines.push('');
149
- lines.push('## Required Props');
150
- lines.push('');
151
- for (const prop of exportInfo.requiredProps) {
152
- lines.push(`- \`${prop}\``);
153
- }
154
- }
155
- if (exportInfo.optionalProps.length > 0) {
156
- lines.push('');
157
- lines.push('## Optional Props');
158
- lines.push('');
159
- for (const prop of exportInfo.optionalProps) {
160
- lines.push(`- \`${prop}\``);
161
- }
162
- }
163
- }
164
- else {
165
- // Fallback
166
- lines.push(`import { ${fileName} } from '${importPath}';`);
167
- lines.push('```');
168
- }
169
- lines.push('');
170
- return lines.join('\n');
171
- }
172
- /**
173
- * Write the usage.md file to the component directory
174
- */
175
- export function writeUsageFile(targetDir, options) {
176
- const content = generateUsageMarkdown(options);
177
- const usagePath = path.join(targetDir, 'usage.md');
178
- fs.writeFileSync(usagePath, content, 'utf8');
179
- logger.debug({ message: 'Wrote usage file', usagePath });
180
- }
181
- /**
182
- * Fetch component data from the MagicPath registry
183
- */
184
- export async function fetchComponent(generatedName) {
185
- const url = makeRegistryUrl(generatedName);
186
- logger.debug({ message: 'Fetching component from registry', url });
187
- let headers;
188
- try {
189
- headers = getAuthHeaders();
190
- }
191
- catch {
192
- throw new AuthRequiredError();
193
- }
194
- try {
195
- const response = await axios.get(url, { headers });
196
- const parsed = registryResponseSchema.parse(response.data);
197
- return parsed.data;
198
- }
199
- catch (error) {
200
- if (axios.isAxiosError(error)) {
201
- if (error.response?.status === 401) {
202
- throw new AuthRequiredError();
203
- }
204
- if (error.response?.status === 403) {
205
- throw new MagicPathError('A Pro subscription is required to install components. Visit https://www.magicpath.ai/documentation/help/plans to see the plans available.', {
206
- code: 'FORBIDDEN',
207
- suggestion: 'Upgrade to a Pro subscription at https://www.magicpath.ai/documentation/help/plans',
208
- });
209
- }
210
- if (error.response?.status === 404) {
211
- throw new MagicPathError(`Component "${generatedName}" not found. Please check the name and try again.`, {
212
- code: 'NOT_FOUND',
213
- suggestion: 'Run `magicpath-ai search <query>` to find available components.',
214
- });
215
- }
216
- throw new MagicPathError(`Failed to fetch component: ${error.message}`);
217
- }
218
- throw new MagicPathError('Failed to fetch component. Please check your internet connection and try again.');
219
- }
220
- }
221
- /**
222
- * Check which files already exist in the target directory
223
- */
224
- export function checkExistingFiles(files, targetDir) {
225
- const existing = [];
226
- for (const file of files) {
227
- const filePath = path.join(targetDir, file.path);
228
- if (fs.existsSync(filePath)) {
229
- existing.push(file.path);
230
- }
231
- }
232
- return existing;
233
- }
234
- /**
235
- * Adjust relative import paths in component content to account for extra directory depth.
236
- * When placing components in a subfolder, relative imports need an extra "../" prefix.
237
- *
238
- * @param content - The file content with imports to adjust
239
- * @param extraDepth - Number of extra directory levels to account for (default: 1)
240
- */
241
- export function adjustRelativeImports(content, extraDepth = 1) {
242
- const prefix = '../'.repeat(extraDepth);
243
- let result = content;
244
- // 1. Handle static imports/exports with relative paths starting with ../
245
- // Covers: import { x } from '../path', import type { x } from '../path',
246
- // export { x } from '../path', import x from "../path"
247
- result = result.replace(/((?:import|export)(?:\s+type)?\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)(?:\s*,\s*(?:\{[^}]*\}|\*\s+as\s+\w+|\w+))*\s+from\s+)?['"])(\.\.\/)([^'"]+['"])/g, (match, before, dotDot, after) => {
248
- return `${before}${prefix}${dotDot}${after}`;
249
- });
250
- // 2. Handle dynamic imports: import('../path') or import("../path")
251
- result = result.replace(/(import\s*\(\s*['"])(\.\.\/)([^'"]+['"]\s*\))/g, (match, before, dotDot, after) => {
252
- return `${before}${prefix}${dotDot}${after}`;
253
- });
254
- // 3. Handle require statements: require('../path') or require("../path")
255
- result = result.replace(/(require\s*\(\s*['"])(\.\.\/)([^'"]+['"]\s*\))/g, (match, before, dotDot, after) => {
256
- return `${before}${prefix}${dotDot}${after}`;
257
- });
258
- return result;
259
- }
260
- /**
261
- * Write component files to the target directory
262
- *
263
- * @param files - Array of component files to write
264
- * @param targetDir - Target directory to write files to
265
- * @param adjustImports - Whether to adjust relative imports for subfolder placement (default: false)
266
- */
267
- export function writeComponentFiles(files, targetDir, adjustImports = false) {
268
- // Ensure target directory exists
269
- fs.ensureDirSync(targetDir);
270
- for (const file of files) {
271
- const filePath = path.join(targetDir, file.path);
272
- const fileDir = path.dirname(filePath);
273
- // Ensure subdirectory exists
274
- fs.ensureDirSync(fileDir);
275
- // Adjust imports if needed, then write the file
276
- const content = adjustImports
277
- ? adjustRelativeImports(file.content)
278
- : file.content;
279
- fs.writeFileSync(filePath, content, 'utf8');
280
- logger.debug({ message: 'Wrote file', filePath });
281
- }
282
- }
283
- /**
284
- * Check if utils.ts already exists and has the cn function
285
- */
286
- export function checkUtilsExists(utilsDir) {
287
- const utilsPath = path.join(utilsDir, 'utils.ts');
288
- if (!fs.existsSync(utilsPath)) {
289
- return false;
290
- }
291
- // Check if it contains the cn function
292
- try {
293
- const content = fs.readFileSync(utilsPath, 'utf8');
294
- return content.includes('export function cn');
295
- }
296
- catch {
297
- return false;
298
- }
299
- }
300
- /**
301
- * Write the utils.ts file
302
- */
303
- export function writeUtilsFile(utilsContent, utilsDir) {
304
- fs.ensureDirSync(utilsDir);
305
- const utilsPath = path.join(utilsDir, 'utils.ts');
306
- fs.writeFileSync(utilsPath, utilsContent, 'utf8');
307
- logger.debug({ message: 'Wrote utils file', utilsPath });
308
- }
309
- // Default paths
310
- export const DEFAULT_COMPONENTS_PATH = 'src/components/magicpath';
311
- export const DEFAULT_UTILS_PATH = 'src/lib';
312
- /**
313
- * Sanitize a component name for use as a folder name
314
- * - Converts to lowercase kebab-case
315
- * - Removes special characters
316
- * - Replaces spaces with hyphens
317
- * - Falls back to 'component' if the result would be empty
318
- */
319
- export function sanitizeComponentFolderName(name) {
320
- const sanitized = name
321
- .trim()
322
- // Convert camelCase/PascalCase to kebab-case
323
- .replace(/([a-z])([A-Z])/g, '$1-$2')
324
- .toLowerCase()
325
- // Replace spaces and underscores with hyphens
326
- .replace(/[\s_]+/g, '-')
327
- // Remove any characters that aren't alphanumeric or hyphens
328
- .replace(/[^a-z0-9-]/g, '')
329
- // Replace multiple consecutive hyphens with a single one
330
- .replace(/-+/g, '-')
331
- // Remove leading/trailing hyphens
332
- .replace(/^-+|-+$/g, '');
333
- // Fallback to 'component' if sanitization resulted in empty string
334
- return sanitized || 'component';
335
- }
336
- /**
337
- * Resolve the components path (with optional override)
338
- */
339
- export function resolveComponentsPath(overridePath, cwd = process.cwd()) {
340
- const relativePath = overridePath || DEFAULT_COMPONENTS_PATH;
341
- return path.join(cwd, relativePath);
342
- }
343
- /**
344
- * Resolve the utils path
345
- */
346
- export function resolveUtilsPath(cwd = process.cwd()) {
347
- return path.join(cwd, DEFAULT_UTILS_PATH);
348
- }
349
- //# sourceMappingURL=component.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../src/util/component.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export declare function installDependencies(projectDir: string): void;
2
- /**
3
- * Get currently installed dependencies from package.json
4
- */
5
- export declare function getInstalledDependencies(projectDir: string): Set<string>;
6
- /**
7
- * Install specific packages that are missing
8
- */
9
- export declare function installPackages(packages: string[], projectDir: string): {
10
- installed: string[];
11
- skipped: string[];
12
- };
@@ -1,93 +0,0 @@
1
- import { execSync } from 'child_process';
2
- import ora from 'ora';
3
- import fs from 'fs-extra';
4
- import path from 'path';
5
- import { MagicPathError } from './error.js';
6
- import { logger } from './logger.js';
7
- /**
8
- * Detect which package manager is available (prefers yarn)
9
- */
10
- function detectPackageManager() {
11
- try {
12
- execSync('yarn --version', { stdio: 'ignore' });
13
- return 'yarn';
14
- }
15
- catch {
16
- return 'npm';
17
- }
18
- }
19
- export function installDependencies(projectDir) {
20
- const packageManager = detectPackageManager();
21
- const installSpinner = ora(`📦 Installing dependencies using ${packageManager}...`).start();
22
- try {
23
- const command = packageManager === 'yarn' ? 'yarn install' : 'npm install';
24
- execSync(command, {
25
- cwd: projectDir,
26
- stdio: 'ignore', // Changed to ignore to avoid conflicts with spinner
27
- });
28
- installSpinner.succeed('Dependencies installed successfully!');
29
- }
30
- catch (err) {
31
- installSpinner.fail('Failed to install dependencies');
32
- throw new MagicPathError('Failed to install dependencies. Please check your internet connection and try again.');
33
- }
34
- }
35
- /**
36
- * Get currently installed dependencies from package.json
37
- */
38
- export function getInstalledDependencies(projectDir) {
39
- const packageJsonPath = path.join(projectDir, 'package.json');
40
- if (!fs.existsSync(packageJsonPath)) {
41
- return new Set();
42
- }
43
- try {
44
- const packageJson = fs.readJsonSync(packageJsonPath);
45
- const deps = new Set();
46
- if (packageJson.dependencies) {
47
- Object.keys(packageJson.dependencies).forEach((dep) => deps.add(dep));
48
- }
49
- if (packageJson.devDependencies) {
50
- Object.keys(packageJson.devDependencies).forEach((dep) => deps.add(dep));
51
- }
52
- return deps;
53
- }
54
- catch {
55
- return new Set();
56
- }
57
- }
58
- /**
59
- * Install specific packages that are missing
60
- */
61
- export function installPackages(packages, projectDir) {
62
- if (packages.length === 0) {
63
- return { installed: [], skipped: [] };
64
- }
65
- // Check which packages are already installed
66
- const installed = getInstalledDependencies(projectDir);
67
- const toInstall = packages.filter((pkg) => !installed.has(pkg));
68
- const skipped = packages.filter((pkg) => installed.has(pkg));
69
- if (toInstall.length === 0) {
70
- logger.debug('All dependencies already installed');
71
- return { installed: [], skipped };
72
- }
73
- const packageManager = detectPackageManager();
74
- const installSpinner = ora(`📦 Installing ${toInstall.length} package${toInstall.length > 1 ? 's' : ''} using ${packageManager}...`).start();
75
- try {
76
- const packagesStr = toInstall.join(' ');
77
- const command = packageManager === 'yarn'
78
- ? `yarn add ${packagesStr}`
79
- : `npm install ${packagesStr}`;
80
- logger.debug({ command });
81
- execSync(command, {
82
- cwd: projectDir,
83
- stdio: 'ignore',
84
- });
85
- installSpinner.succeed(`Installed ${toInstall.length} package${toInstall.length > 1 ? 's' : ''}`);
86
- return { installed: toInstall, skipped };
87
- }
88
- catch (err) {
89
- installSpinner.fail('Failed to install packages');
90
- throw new MagicPathError(`Failed to install packages: ${toInstall.join(', ')}. Please install them manually.`);
91
- }
92
- }
93
- //# sourceMappingURL=dependencies.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/util/dependencies.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export interface MagicPathErrorOptions {
2
- code?: string;
3
- suggestion?: string;
4
- }
5
- export declare class MagicPathError extends Error {
6
- code?: string;
7
- suggestion?: string;
8
- constructor(message: string, options?: MagicPathErrorOptions);
9
- }
@@ -1,10 +0,0 @@
1
- export class MagicPathError extends Error {
2
- code;
3
- suggestion;
4
- constructor(message, options) {
5
- super(message);
6
- this.code = options?.code;
7
- this.suggestion = options?.suggestion;
8
- }
9
- }
10
- //# sourceMappingURL=error.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/util/error.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,IAAI,CAAU;IACd,UAAU,CAAU;IAEpB,YAAY,OAAe,EAAE,OAA+B;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,IAAI,CAAC;QAC1B,IAAI,CAAC,UAAU,GAAG,OAAO,EAAE,UAAU,CAAC;IACxC,CAAC;CACF"}
@@ -1,3 +0,0 @@
1
- export type WebIDE = 'cursor' | 'antigravity' | 'vscode' | 'webstorm';
2
- export declare function openInIDE(projectDir: string, ide: WebIDE): void;
3
- export declare function openInFileManager(projectDir: string): void;
package/dist/util/ide.js DELETED
@@ -1,145 +0,0 @@
1
- import { execSync } from 'child_process';
2
- import ora from 'ora';
3
- import { MagicPathError } from './error.js';
4
- export function openInIDE(projectDir, ide) {
5
- const ideNames = {
6
- cursor: 'Cursor',
7
- antigravity: 'Antigravity',
8
- vscode: 'VS Code',
9
- webstorm: 'WebStorm',
10
- };
11
- const ideCommands = {
12
- cursor: ['cursor', 'code'],
13
- antigravity: ['agy', 'antigravity'],
14
- vscode: ['code'],
15
- webstorm: ['webstorm', 'web'],
16
- };
17
- const openSpinner = ora(`🚀 Opening project in ${ideNames[ide]}...`).start();
18
- let didOpen = false;
19
- try {
20
- for (const command of ideCommands[ide]) {
21
- if (didOpen)
22
- break;
23
- try {
24
- execSync(`${command} .`, {
25
- cwd: projectDir,
26
- stdio: 'ignore',
27
- });
28
- didOpen = true;
29
- }
30
- catch {
31
- didOpen = false;
32
- }
33
- }
34
- if (!didOpen)
35
- throw new Error('Failed to open with command.');
36
- openSpinner.succeed(`Project opened in ${ideNames[ide]}!`);
37
- }
38
- catch (err) {
39
- openSpinner.fail(`Failed to open ${ideNames[ide]}`);
40
- // Provide specific installation instructions for each IDE
41
- const installationInstructions = {
42
- cursor: `❌ Cursor command not found!
43
-
44
- 🔧 To fix this, you need to install the Cursor command line tools:
45
-
46
- 📋 Instructions:
47
- 1. Open Cursor
48
- 2. Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows/Linux)
49
- 3. Type "Shell Command: Install 'cursor' command in PATH"
50
- 4. Select it and press Enter
51
- 5. Restart your terminal
52
-
53
- 💡 Alternative: If the above doesn't work, try:
54
- - macOS: Add this to your ~/.zshrc or ~/.bash_profile:
55
- export PATH="/Applications/Cursor.app/Contents/Resources/app/bin:$PATH"
56
- - Or create a symlink: ln -s "/Applications/Cursor.app/Contents/Resources/app/bin/cursor" /usr/local/bin/cursor
57
-
58
- 🎯 Note: Cursor also responds to the 'code' command, so installing VS Code CLI tools may also work!`,
59
- antigravity: `❌ Google Antigravity command not found!
60
-
61
- 🔧 To fix this, you need to install the Google Antigravity command line tools:
62
-
63
- 📋 Instructions:
64
- 1. Open Google Antigravity
65
- 2. Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows/Linux)
66
- 3. Type "Shell Command: Install 'agy' command in PATH"
67
- 4. Select it and press Enter
68
- 5. Restart your terminal
69
-
70
- 💡 Alternative: If the above doesn't work, try:
71
- - macOS: Add this to your ~/.zshrc or ~/.bash_profile:
72
- export PATH="/Applications/Antigravity.app/Contents/Resources/app/bin:$PATH"
73
- - Or create a symlink: ln -s "/Applications/Antigravity.app/Contents/Resources/app/bin/antigravity" /usr/local/bin/antigravity
74
-
75
- 🎯 Note: Google Antigravity responds to both 'agy' and 'antigravity' commands!`,
76
- vscode: `❌ VS Code command not found!
77
-
78
- 🔧 To fix this, you need to install the VS Code command line tools:
79
-
80
- 📋 Instructions:
81
- 1. Open VS Code
82
- 2. Press Cmd+Shift+P (Mac) or Ctrl+Shift+P (Windows/Linux)
83
- 3. Type "Shell Command: Install 'code' command in PATH"
84
- 4. Select it and press Enter
85
- 5. Restart your terminal
86
-
87
- 💡 Alternative: Add VS Code to your PATH manually
88
- - macOS: Add this to your ~/.zshrc or ~/.bash_profile:
89
- export PATH="/Applications/Visual Studio Code.app/Contents/Resources/app/bin:$PATH"
90
-
91
- 📖 More help: https://code.visualstudio.com/docs/setup/mac#_launching-from-the-command-line`,
92
- webstorm: `❌ WebStorm command not found!
93
-
94
- 🔧 To fix this, you need to enable WebStorm command line tools:
95
-
96
- 📋 Instructions:
97
- 1. Open WebStorm
98
- 2. Go to Tools → Create Command-line Launcher...
99
- 3. Choose the installation path (default is usually fine)
100
- 4. Click OK
101
- 5. Restart your terminal
102
-
103
- 💡 Alternative methods:
104
- - macOS: Add this to your ~/.zshrc or ~/.bash_profile:
105
- export PATH="/Applications/WebStorm.app/Contents/MacOS:$PATH"
106
- - Or create an alias: alias webstorm="open -na 'WebStorm.app'"
107
-
108
- 📖 More help: https://www.jetbrains.com/help/webstorm/working-with-the-ide-features-from-command-line.html`,
109
- };
110
- throw new MagicPathError(installationInstructions[ide]);
111
- }
112
- }
113
- export function openInFileManager(projectDir) {
114
- const platform = process.platform;
115
- let command;
116
- switch (platform) {
117
- case 'darwin': // macOS
118
- command = 'open';
119
- break;
120
- case 'win32': // Windows
121
- command = 'explorer';
122
- break;
123
- default: // Linux and others
124
- command = 'xdg-open';
125
- break;
126
- }
127
- const fileManagerNames = {
128
- darwin: 'Finder',
129
- win32: 'File Explorer',
130
- linux: 'File Manager',
131
- };
132
- const fileManagerName = fileManagerNames[platform] || 'File Manager';
133
- const openSpinner = ora(`📁 Opening project in ${fileManagerName}...`).start();
134
- try {
135
- execSync(`${command} "${projectDir}"`, {
136
- stdio: 'ignore',
137
- });
138
- openSpinner.succeed(`Project opened in ${fileManagerName}!`);
139
- }
140
- catch (err) {
141
- openSpinner.fail(`Failed to open ${fileManagerName}`);
142
- throw new MagicPathError(`Failed to open project in ${fileManagerName}. The file manager may not be available.`);
143
- }
144
- }
145
- //# sourceMappingURL=ide.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ide.js","sourceRoot":"","sources":["../../src/util/ide.ts"],"names":[],"mappings":"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"}