magicpath-ai 1.0.5 → 1.1.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.
package/dist/cli.js CHANGED
@@ -4,8 +4,13 @@ import { program } from 'commander';
4
4
  import { z } from 'zod';
5
5
  import ora from 'ora';
6
6
  import { enableDebugLogger, logger } from './util/logger.js';
7
- import { downloadProject, releaseProject, unpackProject, } from './util/index.js';
8
7
  import { GenericError, MagicPathError } from './util/error.js';
8
+ import { downloadProject, releaseProject, unpackProject, } from './util/project.js';
9
+ import { installDependencies } from './util/dependencies.js';
10
+ import { openInIDE, openInFileManager } from './util/ide.js';
11
+ import path from 'path';
12
+ import os from 'os';
13
+ import fs from 'fs-extra';
9
14
  program.name('magicpath').description('CLI for MagicPath AI').version('1.0.0');
10
15
  const cloneOptionsSchema = z.object({
11
16
  key: z.string(),
@@ -28,8 +33,93 @@ program
28
33
  enableDebugLogger();
29
34
  logger.debug({ options });
30
35
  logger.debug({ options: cloneOptions });
36
+ // Step 1: Ask the user where to drop their fresh code
37
+ const homeDir = os.homedir();
38
+ const commonDirs = [
39
+ { name: 'Documents', path: path.join(homeDir, 'Documents') },
40
+ { name: 'Desktop', path: path.join(homeDir, 'Desktop') },
41
+ { name: 'Downloads', path: path.join(homeDir, 'Downloads') },
42
+ ];
43
+ // Filter to only include directories that actually exist
44
+ const existingDirs = await Promise.all(commonDirs.map(async (dir) => {
45
+ try {
46
+ const exists = await fs.pathExists(dir.path);
47
+ return exists ? dir : null;
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ }));
53
+ const validDirs = existingDirs.filter((dir) => dir !== null);
54
+ // Build choices array starting with current directory and home directory
55
+ const choices = [
56
+ {
57
+ title: `Right here (current folder: ${process.cwd()})`,
58
+ value: process.cwd(),
59
+ },
60
+ { title: `Home directory (${homeDir})`, value: homeDir },
61
+ ];
62
+ // Add existing standard directories
63
+ validDirs.forEach((dir) => {
64
+ choices.push({ title: dir.name, value: dir.path });
65
+ });
66
+ // Add option for custom directory
67
+ choices.push({ title: 'Other (specify custom path)', value: 'custom' });
68
+ const { targetDir } = await prompts({
69
+ type: 'select',
70
+ name: 'targetDir',
71
+ message: 'Where should we put your code?',
72
+ choices,
73
+ initial: 0,
74
+ });
75
+ let finalTargetDir = targetDir;
76
+ // Handle custom directory selection
77
+ if (targetDir === 'custom') {
78
+ const { customPath } = await prompts({
79
+ type: 'text',
80
+ name: 'customPath',
81
+ message: 'Enter the full path where you want to create your project:',
82
+ initial: homeDir,
83
+ validate: (value) => {
84
+ if (!value)
85
+ return 'Please enter a path';
86
+ try {
87
+ // Try to resolve the path to check if it's valid
88
+ const resolvedPath = path.resolve(value);
89
+ return true;
90
+ }
91
+ catch {
92
+ return 'Please enter a valid path';
93
+ }
94
+ },
95
+ });
96
+ if (!customPath) {
97
+ throw new MagicPathError('Project creation cancelled');
98
+ }
99
+ finalTargetDir = path.resolve(customPath);
100
+ // Ensure the custom directory exists, create if it doesn't
101
+ try {
102
+ await fs.ensureDir(finalTargetDir);
103
+ }
104
+ catch (err) {
105
+ throw new MagicPathError(`Failed to create or access directory: ${finalTargetDir}`);
106
+ }
107
+ }
108
+ if (!finalTargetDir) {
109
+ throw new MagicPathError('Download cancelled');
110
+ }
111
+ // Step 2: Ask for project name
112
+ const { projectName } = await prompts({
113
+ type: 'text',
114
+ name: 'projectName',
115
+ message: 'What would you like to name your project?',
116
+ initial: 'magicpath-project',
117
+ });
118
+ if (!projectName) {
119
+ throw new MagicPathError('Project creation cancelled');
120
+ }
31
121
  let filename;
32
- // Step 1: Download project
122
+ // Step 3: Download project
33
123
  const downloadSpinner = ora('📥 Downloading project...').start();
34
124
  try {
35
125
  filename = await downloadProject(cloneOptions.key);
@@ -45,22 +135,12 @@ program
45
135
  throw GenericError;
46
136
  }
47
137
  }
48
- // Step 2: Ask for project name
49
- const response = await prompts({
50
- type: 'text',
51
- name: 'projectName',
52
- message: 'What would you like to name your project?',
53
- initial: 'magicpath-project',
54
- });
55
- if (!response.projectName) {
56
- releaseProject(filename);
57
- throw new MagicPathError('Project creation cancelled');
58
- }
59
138
  // Step 3: Unpack project
60
139
  const unpackSpinner = ora('📦 Unpacking project...').start();
140
+ let projectDir;
61
141
  try {
62
- unpackProject(filename, response.projectName);
63
- unpackSpinner.succeed(`Project unpacked to ${response.projectName}`);
142
+ projectDir = unpackProject(filename, projectName, finalTargetDir);
143
+ unpackSpinner.succeed(`Project unpacked to ${projectName}`);
64
144
  }
65
145
  catch (err) {
66
146
  unpackSpinner.fail('Failed to unpack project');
@@ -72,7 +152,54 @@ program
72
152
  throw GenericError;
73
153
  }
74
154
  }
75
- console.log('\n🎉 Done! Your project is ready to go.');
155
+ // Step 5: Install dependencies
156
+ try {
157
+ installDependencies(projectDir);
158
+ }
159
+ catch (err) {
160
+ if (err instanceof MagicPathError) {
161
+ throw err;
162
+ }
163
+ else {
164
+ throw GenericError;
165
+ }
166
+ }
167
+ // Step 6: Ask which IDE to open the project in
168
+ const ideResponse = await prompts({
169
+ type: 'select',
170
+ name: 'ide',
171
+ message: 'Which IDE would you like to open the project in?',
172
+ choices: [
173
+ { title: 'Cursor', value: 'cursor' },
174
+ { title: 'VS Code', value: 'vscode' },
175
+ { title: 'WebStorm', value: 'webstorm' },
176
+ { title: 'Open in file manager', value: 'filemanager' },
177
+ { title: 'None (just finish)', value: 'none' },
178
+ ],
179
+ initial: 0,
180
+ });
181
+ // Step 7: Open in IDE or file manager if selected
182
+ if (ideResponse.ide && ideResponse.ide !== 'none') {
183
+ try {
184
+ if (ideResponse.ide === 'filemanager') {
185
+ openInFileManager(projectDir);
186
+ }
187
+ else {
188
+ openInIDE(projectDir, ideResponse.ide);
189
+ }
190
+ }
191
+ catch (err) {
192
+ logger.debug({ err });
193
+ // Don't throw error if opening fails, just continue
194
+ if (err instanceof MagicPathError) {
195
+ console.log(err.message);
196
+ }
197
+ else {
198
+ console.log('⚠️ Opening failed, but your project is ready!');
199
+ }
200
+ }
201
+ }
202
+ console.log(`\n🎉 Done! Your project is ready to go at: ${projectDir}`);
76
203
  });
77
204
  program.parse();
78
205
  //# 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":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare enum APIVersion {
2
+ V1 = "v1"
3
+ }
4
+ export declare function makeUrl(verison: APIVersion, endpoint: string): string;
@@ -0,0 +1,9 @@
1
+ const MAGICPATH_BASE_URL = 'https://api.magicpath.ai';
2
+ export var APIVersion;
3
+ (function (APIVersion) {
4
+ APIVersion["V1"] = "v1";
5
+ })(APIVersion || (APIVersion = {}));
6
+ export function makeUrl(verison, endpoint) {
7
+ return `${MAGICPATH_BASE_URL}/${verison}/${endpoint}`;
8
+ }
9
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/util/api.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAEtD,MAAM,CAAN,IAAY,UAEX;AAFD,WAAY,UAAU;IACpB,uBAAS,CAAA;AACX,CAAC,EAFW,UAAU,KAAV,UAAU,QAErB;AAED,MAAM,UAAU,OAAO,CAAC,OAAmB,EAAE,QAAgB;IAC3D,OAAO,GAAG,kBAAkB,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;AACxD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function installDependencies(projectDir: string): void;
@@ -0,0 +1,28 @@
1
+ import { execSync } from 'child_process';
2
+ import ora from 'ora';
3
+ import { MagicPathError } from './error.js';
4
+ export function installDependencies(projectDir) {
5
+ let hasYarn = false;
6
+ try {
7
+ execSync('yarn --version', { stdio: 'ignore' });
8
+ hasYarn = true;
9
+ }
10
+ catch {
11
+ hasYarn = false;
12
+ }
13
+ const packageManager = hasYarn ? 'yarn' : 'npm';
14
+ const installSpinner = ora(`📦 Installing dependencies using ${packageManager}...`).start();
15
+ try {
16
+ const command = hasYarn ? 'yarn install' : 'npm install';
17
+ execSync(command, {
18
+ cwd: projectDir,
19
+ stdio: 'ignore', // Changed to ignore to avoid conflicts with spinner
20
+ });
21
+ installSpinner.succeed('Dependencies installed successfully!');
22
+ }
23
+ catch (err) {
24
+ installSpinner.fail('Failed to install dependencies');
25
+ throw new MagicPathError('Failed to install dependencies. Please check your internet connection and try again.');
26
+ }
27
+ }
28
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/util/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAChD,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,KAAK,CAAC;IAClB,CAAC;IAED,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,MAAM,cAAc,GAAG,GAAG,CACxB,oCAAoC,cAAc,KAAK,CACxD,CAAC,KAAK,EAAE,CAAC;IAEV,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;QAEzD,QAAQ,CAAC,OAAO,EAAE;YAChB,GAAG,EAAE,UAAU;YACf,KAAK,EAAE,QAAQ,EAAE,oDAAoD;SACtE,CAAC,CAAC;QAEH,cAAc,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,cAAc,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACtD,MAAM,IAAI,cAAc,CACtB,sFAAsF,CACvF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type WebIDE = 'vscode' | 'cursor' | 'webstorm';
2
+ export declare function openInIDE(projectDir: string, ide: WebIDE): void;
3
+ export declare function openInFileManager(projectDir: string): void;
@@ -0,0 +1,73 @@
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
+ vscode: 'VS Code',
7
+ cursor: 'Cursor',
8
+ webstorm: 'WebStorm',
9
+ };
10
+ const ideCommands = {
11
+ vscode: ['code'],
12
+ cursor: ['cursor', 'code'],
13
+ webstorm: ['webstorm', 'web'],
14
+ };
15
+ const openSpinner = ora(`🚀 Opening project in ${ideNames[ide]}...`).start();
16
+ let didOpen = false;
17
+ try {
18
+ for (const command of ideCommands[ide]) {
19
+ if (didOpen)
20
+ break;
21
+ try {
22
+ execSync(`${command} .`, {
23
+ cwd: projectDir,
24
+ stdio: 'ignore',
25
+ });
26
+ didOpen = true;
27
+ }
28
+ catch {
29
+ didOpen = false;
30
+ }
31
+ }
32
+ if (!didOpen)
33
+ throw new Error('Failed to open with command.');
34
+ openSpinner.succeed(`Project opened in ${ideNames[ide]}!`);
35
+ }
36
+ catch (err) {
37
+ openSpinner.fail(`Failed to open ${ideNames[ide]}`);
38
+ throw new MagicPathError(`Failed to open project in ${ideNames[ide]}. Make sure ${ideNames[ide]} is installed and available in your PATH.`);
39
+ }
40
+ }
41
+ export function openInFileManager(projectDir) {
42
+ const platform = process.platform;
43
+ let command;
44
+ switch (platform) {
45
+ case 'darwin': // macOS
46
+ command = 'open';
47
+ break;
48
+ case 'win32': // Windows
49
+ command = 'explorer';
50
+ break;
51
+ default: // Linux and others
52
+ command = 'xdg-open';
53
+ break;
54
+ }
55
+ const fileManagerNames = {
56
+ darwin: 'Finder',
57
+ win32: 'File Explorer',
58
+ linux: 'File Manager',
59
+ };
60
+ const fileManagerName = fileManagerNames[platform] || 'File Manager';
61
+ const openSpinner = ora(`📁 Opening project in ${fileManagerName}...`).start();
62
+ try {
63
+ execSync(`${command} "${projectDir}"`, {
64
+ stdio: 'ignore',
65
+ });
66
+ openSpinner.succeed(`Project opened in ${fileManagerName}!`);
67
+ }
68
+ catch (err) {
69
+ openSpinner.fail(`Failed to open ${fileManagerName}`);
70
+ throw new MagicPathError(`Failed to open project in ${fileManagerName}. The file manager may not be available.`);
71
+ }
72
+ }
73
+ //# sourceMappingURL=ide.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ide.js","sourceRoot":"","sources":["../../src/util/ide.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
- export declare enum APIVersion {
2
- V1 = "v1"
3
- }
4
- export declare function makeUrl(verison: APIVersion, endpoint: string): string;
5
1
  export declare function downloadProject(key: string): Promise<string>;
6
2
  export declare function releaseProject(filename: string): void;
7
- export declare function unpackProject(filename: string, name: string): string;
3
+ export declare function unpackProject(filename: string, name: string, targetDir: string): string;
@@ -5,14 +5,7 @@ import fs from 'fs-extra';
5
5
  import AdmZip from 'adm-zip';
6
6
  import { v4 as uuidv4 } from 'uuid';
7
7
  import { MagicPathError } from './error.js';
8
- const MAGICPATH_BASE_URL = 'https://api.magicpath.ai';
9
- export var APIVersion;
10
- (function (APIVersion) {
11
- APIVersion["V1"] = "v1";
12
- })(APIVersion || (APIVersion = {}));
13
- export function makeUrl(verison, endpoint) {
14
- return `${MAGICPATH_BASE_URL}/${verison}/${endpoint}`;
15
- }
8
+ import { APIVersion, makeUrl } from './api.js';
16
9
  export async function downloadProject(key) {
17
10
  const url = makeUrl(APIVersion.V1, 'components/repository');
18
11
  const filename = `${uuidv4()}.zip`;
@@ -50,13 +43,13 @@ export function releaseProject(filename) {
50
43
  // do nothing
51
44
  }
52
45
  }
53
- export function unpackProject(filename, name) {
46
+ export function unpackProject(filename, name, targetDir) {
54
47
  try {
55
- let projectDir = path.join(process.cwd(), name);
48
+ let projectDir = path.join(targetDir, name);
56
49
  let counter = 1;
57
50
  while (fs.existsSync(projectDir)) {
58
51
  counter++;
59
- projectDir = path.join(process.cwd(), `${name}-${counter}`);
52
+ projectDir = path.join(targetDir, `${name}-${counter}`);
60
53
  }
61
54
  fs.mkdirSync(projectDir, { recursive: true });
62
55
  const zip = new AdmZip(filename);
@@ -68,4 +61,4 @@ export function unpackProject(filename, name) {
68
61
  throw new MagicPathError('Failed to extract project. Please try again.');
69
62
  }
70
63
  }
71
- //# sourceMappingURL=index.js.map
64
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/util/project.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.0.5",
3
+ "version": "1.1.1",
4
4
  "description": "Node CLI for MagicPath",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":"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"}