magicpath-ai 1.3.0-beta.8 → 1.3.0

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 (54) hide show
  1. package/README.md +24 -26
  2. package/dist/cli.js +15 -8
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/add.d.ts +0 -3
  5. package/dist/commands/add.js +347 -246
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/auth.js +14 -2
  8. package/dist/commands/auth.js.map +1 -1
  9. package/dist/commands/info.js +9 -5
  10. package/dist/commands/info.js.map +1 -1
  11. package/dist/commands/inspect.d.ts +53 -0
  12. package/dist/commands/inspect.js +122 -0
  13. package/dist/commands/inspect.js.map +1 -0
  14. package/dist/commands/list-installed.d.ts +2 -0
  15. package/dist/commands/list-installed.js +112 -0
  16. package/dist/commands/list-installed.js.map +1 -0
  17. package/dist/commands/list.js +6 -2
  18. package/dist/commands/list.js.map +1 -1
  19. package/dist/commands/schema.js +11 -24
  20. package/dist/commands/schema.js.map +1 -1
  21. package/dist/commands/search.js +2 -1
  22. package/dist/commands/search.js.map +1 -1
  23. package/dist/commands/setup-skills.d.ts +2 -0
  24. package/dist/commands/setup-skills.js +13 -0
  25. package/dist/commands/setup-skills.js.map +1 -0
  26. package/dist/commands/whoami.js +5 -13
  27. package/dist/commands/whoami.js.map +1 -1
  28. package/dist/util/auth.d.ts +19 -6
  29. package/dist/util/auth.js +70 -10
  30. package/dist/util/auth.js.map +1 -1
  31. package/dist/util/banner.d.ts +1 -0
  32. package/dist/util/banner.js +79 -0
  33. package/dist/util/banner.js.map +1 -0
  34. package/package.json +3 -5
  35. package/dist/commands/init.d.ts +0 -2
  36. package/dist/commands/init.js +0 -113
  37. package/dist/commands/init.js.map +0 -1
  38. package/dist/commands/integrate.d.ts +0 -2
  39. package/dist/commands/integrate.js +0 -202
  40. package/dist/commands/integrate.js.map +0 -1
  41. package/dist/commands/retheme.d.ts +0 -2
  42. package/dist/commands/retheme.js +0 -327
  43. package/dist/commands/retheme.js.map +0 -1
  44. package/dist/commands/skills.d.ts +0 -2
  45. package/dist/commands/skills.js +0 -55
  46. package/dist/commands/skills.js.map +0 -1
  47. package/dist/util/diff.d.ts +0 -13
  48. package/dist/util/diff.js +0 -63
  49. package/dist/util/diff.js.map +0 -1
  50. package/dist/util/integrate.d.ts +0 -84
  51. package/dist/util/integrate.js +0 -762
  52. package/dist/util/integrate.js.map +0 -1
  53. package/skills/cli-reference.md +0 -146
  54. package/skills/guide.md +0 -63
@@ -1,202 +0,0 @@
1
- import prompts from 'prompts';
2
- import path from 'path';
3
- import fs from 'fs-extra';
4
- import { enableDebugLogger } from '../util/logger.js';
5
- import { MagicPathError } from '../util/error.js';
6
- import { isJsonMode, jsonResult, jsonError } from '../util/output.js';
7
- import { brandSpinner } from '../util/ui.js';
8
- import { reviewAndApplyChanges, applyChanges } from '../util/diff.js';
9
- import { detectFramework, findCandidates, readTargetWithContext, requestIntegration, detectProjectLanguage, detectLanguageFromExtension, getLanguageDisplayName, } from '../util/integrate.js';
10
- import { runLoginFlow } from './auth.js';
11
- export function registerIntegrateCommand(program) {
12
- program
13
- .command('integrate')
14
- .description('Integrate a MagicPath component into your project using AI')
15
- .argument('<generatedName>', 'The generated name of the component (e.g., wispy-river-5234)')
16
- .option('-d, --debug', 'Enable debug logging', false)
17
- .option('--no-review', 'Apply each file immediately without review or confirmation')
18
- .option('-t, --target <file>', 'Target file to integrate into (skips interactive prompts)')
19
- .option('--dry-run', 'Show what would happen without writing files', false)
20
- .action(async (generatedName, options) => {
21
- try {
22
- if (options.debug)
23
- enableDebugLogger();
24
- const json = isJsonMode();
25
- const cwd = process.cwd();
26
- // In JSON mode, require --target
27
- if (json && !options.target) {
28
- throw new MagicPathError('In JSON mode, --target <file> is required for integrate.', {
29
- code: 'MISSING_TARGET',
30
- suggestion: 'Pass `--target <file>` to specify the file to integrate into.',
31
- });
32
- }
33
- // Step 1: Detect project language and framework
34
- const hasPackageJson = fs.existsSync(path.join(cwd, 'package.json'));
35
- const framework = hasPackageJson
36
- ? detectFramework(cwd)
37
- : 'unknown';
38
- const language = hasPackageJson
39
- ? 'js'
40
- : detectProjectLanguage(cwd);
41
- // Step 2: Verify auth
42
- const { getAuthHeaders } = await import('../util/auth.js');
43
- try {
44
- getAuthHeaders();
45
- }
46
- catch {
47
- if (json) {
48
- throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.', {
49
- code: 'NOT_AUTHENTICATED',
50
- suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
51
- });
52
- }
53
- console.log('You need to be logged in to use AI integration.');
54
- const { shouldLogin } = await prompts({
55
- type: 'confirm',
56
- name: 'shouldLogin',
57
- message: 'Log in now?',
58
- initial: true,
59
- });
60
- if (!shouldLogin) {
61
- console.log('Integration cancelled.');
62
- return;
63
- }
64
- const loggedIn = await runLoginFlow();
65
- if (!loggedIn) {
66
- console.log('Integration cancelled.');
67
- return;
68
- }
69
- }
70
- // If --target is provided, skip interactive prompts and go straight to integrate
71
- if (options.target) {
72
- await runIntegrateFlow(generatedName, cwd, language, framework, options.target, json ? true : options.review === false, options.dryRun);
73
- return;
74
- }
75
- // ── Integrate flow ──
76
- await runIntegrateFlow(generatedName, cwd, language, framework);
77
- }
78
- catch (err) {
79
- if (isJsonMode())
80
- jsonError(err);
81
- if (err instanceof MagicPathError) {
82
- console.error(`\n${err.message}`);
83
- process.exit(1);
84
- }
85
- throw err;
86
- }
87
- });
88
- }
89
- async function runIntegrateFlow(generatedName, cwd, language, framework, providedTarget, noReview, dryRun) {
90
- const json = isJsonMode();
91
- let targetPath;
92
- if (providedTarget) {
93
- // Non-interactive: use provided target directly
94
- targetPath = providedTarget;
95
- }
96
- else {
97
- // Interactive: let user pick from candidates
98
- const candidates = findCandidates(cwd, language, framework);
99
- if (candidates.length === 0) {
100
- throw new MagicPathError('No suitable files found for integration.');
101
- }
102
- const allChoices = candidates.map((c) => ({
103
- title: `${c.relativePath}${c.label ? ` ${c.label}` : ''}`,
104
- value: c.relativePath,
105
- }));
106
- const result = await prompts({
107
- type: 'autocomplete',
108
- name: 'targetPath',
109
- message: 'Where do you want to use this component?',
110
- choices: allChoices,
111
- limit: 10,
112
- suggest: async (input, _choices) => {
113
- const query = input.toLowerCase();
114
- if (!query)
115
- return allChoices;
116
- const filtered = allChoices.filter((c) => c.title.toLowerCase().includes(query));
117
- if (filtered.length === 0) {
118
- return [{ title: input, value: input }];
119
- }
120
- return filtered;
121
- },
122
- });
123
- if (!result.targetPath) {
124
- console.log('Integration cancelled.');
125
- return;
126
- }
127
- targetPath = result.targetPath;
128
- }
129
- const absTarget = path.resolve(cwd, targetPath);
130
- if (!fs.existsSync(absTarget)) {
131
- throw new MagicPathError(`File not found: ${targetPath}`, {
132
- code: 'NOT_FOUND',
133
- suggestion: 'Check that the `--target` path is correct and relative to the project root.',
134
- });
135
- }
136
- // Refine language from the actual file extension
137
- const fileLanguage = detectLanguageFromExtension(targetPath);
138
- if (fileLanguage !== 'unknown') {
139
- language = fileLanguage;
140
- }
141
- if (!json && language !== 'js') {
142
- console.log(` Target language: ${getLanguageDisplayName(language)}`);
143
- }
144
- // Optional user instruction (skip in non-interactive mode)
145
- let userInstruction;
146
- if (!providedTarget) {
147
- const result = await prompts({
148
- type: 'text',
149
- name: 'userInstruction',
150
- message: 'How should this component be used? (optional — press Enter to skip)',
151
- });
152
- userInstruction = result.userInstruction;
153
- }
154
- // Read target with context
155
- const { targetFile, importedFiles, referencingFiles } = readTargetWithContext(targetPath, cwd, undefined, language);
156
- // Call integrate API
157
- const integrationSpinner = json
158
- ? null
159
- : brandSpinner('Generating integration...').start();
160
- try {
161
- const result = await requestIntegration({
162
- targetFile,
163
- importedFiles,
164
- referencingFiles,
165
- componentGeneratedName: generatedName,
166
- framework,
167
- userInstruction: userInstruction || undefined,
168
- targetLanguage: language !== 'js' ? language : undefined,
169
- });
170
- integrationSpinner?.succeed('Integration generated');
171
- // JSON mode: return file contents without writing — the agent decides
172
- if (json) {
173
- jsonResult({
174
- modifiedFiles: result.modifiedFiles.map((f) => ({
175
- path: f.path,
176
- content: f.content,
177
- })),
178
- framework,
179
- });
180
- }
181
- // Dry run (human mode): show what would change
182
- if (dryRun) {
183
- console.log('\n[Dry run] Would modify:');
184
- for (const f of result.modifiedFiles) {
185
- console.log(` ${f.path}`);
186
- }
187
- return;
188
- }
189
- if (noReview) {
190
- applyChanges(result.modifiedFiles, cwd);
191
- console.log(` Applied ${result.modifiedFiles.length} file(s).`);
192
- }
193
- else {
194
- await reviewAndApplyChanges(result.modifiedFiles, cwd, 'Integration');
195
- }
196
- }
197
- catch (intErr) {
198
- integrationSpinner?.fail('Integration failed');
199
- throw intErr;
200
- }
201
- }
202
- //# sourceMappingURL=integrate.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integrate.js","sourceRoot":"","sources":["../../src/commands/integrate.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerRethemeCommand(program: Command): void;
@@ -1,327 +0,0 @@
1
- import prompts from 'prompts';
2
- import path from 'path';
3
- import fs from 'fs-extra';
4
- import { enableDebugLogger } from '../util/logger.js';
5
- import { MagicPathError } from '../util/error.js';
6
- import { isJsonMode, jsonError } from '../util/output.js';
7
- import { brandSpinner, BRAND_GREEN, ANSI_RESET } from '../util/ui.js';
8
- import { reviewAndApplyChanges, applyChanges } from '../util/diff.js';
9
- import { detectFramework, requestRetheme, gatherProjectFiles, findThemeFile, detectProjectLanguage, SkipFileError, } from '../util/integrate.js';
10
- import { runLoginFlow } from './auth.js';
11
- export function registerRethemeCommand(program) {
12
- program
13
- .command('retheme')
14
- .description("Retheme your entire project to match a MagicPath component's style using AI (EXPERIMENTAL)")
15
- .argument('<generatedName>', 'The generated name of the component to match (e.g., wispy-river-5234)')
16
- .option('-d, --debug', 'Enable debug logging', false)
17
- .option('--batch [size]', 'Process retheme in batches, pause between each')
18
- .option('--no-review', 'Apply each file immediately without review or confirmation')
19
- .action(async (generatedName, options) => {
20
- try {
21
- if (options.debug)
22
- enableDebugLogger();
23
- const json = isJsonMode();
24
- const cwd = process.cwd();
25
- // Step 1: Detect project language and framework
26
- const hasPackageJson = fs.existsSync(path.join(cwd, 'package.json'));
27
- const framework = hasPackageJson
28
- ? detectFramework(cwd)
29
- : 'unknown';
30
- const language = hasPackageJson
31
- ? 'js'
32
- : detectProjectLanguage(cwd);
33
- // Step 2: Verify auth
34
- const { getAuthHeaders } = await import('../util/auth.js');
35
- try {
36
- getAuthHeaders();
37
- }
38
- catch {
39
- if (json) {
40
- throw new MagicPathError('Not authenticated. Set MAGICPATH_TOKEN or run `magicpath-ai login`.', {
41
- code: 'NOT_AUTHENTICATED',
42
- suggestion: 'Run `magicpath-ai login` or set the MAGICPATH_TOKEN environment variable.',
43
- });
44
- }
45
- console.log('You need to be logged in to use retheme.');
46
- const { shouldLogin } = await prompts({
47
- type: 'confirm',
48
- name: 'shouldLogin',
49
- message: 'Log in now?',
50
- initial: true,
51
- });
52
- if (!shouldLogin) {
53
- console.log('Retheme cancelled.');
54
- return;
55
- }
56
- const loggedIn = await runLoginFlow();
57
- if (!loggedIn) {
58
- console.log('Retheme cancelled.');
59
- return;
60
- }
61
- }
62
- const batchSize = options.batch != null
63
- ? options.batch === true
64
- ? 10
65
- : parseInt(options.batch, 10)
66
- : undefined;
67
- await runRethemeFlow(generatedName, cwd, language, framework, batchSize, options.review === false);
68
- }
69
- catch (err) {
70
- if (isJsonMode())
71
- jsonError(err);
72
- if (err instanceof MagicPathError) {
73
- console.error(`\n${err.message}`);
74
- process.exit(1);
75
- }
76
- throw err;
77
- }
78
- });
79
- }
80
- async function runRethemeFlow(generatedName, cwd, language, framework, batchSize, noReview) {
81
- // Optional user instruction
82
- const { userInstruction: rethemeInstruction } = await prompts({
83
- type: 'text',
84
- name: 'userInstruction',
85
- message: 'Any specific instructions for the retheme? (optional — press Enter to skip)',
86
- });
87
- // Gather all project UI files
88
- const gatherSpinner = brandSpinner('Scanning project files...').start();
89
- const { files: projectFiles, truncated, skippedFiles, } = gatherProjectFiles(cwd, language, framework);
90
- gatherSpinner.succeed(`Found ${projectFiles.length} UI files`);
91
- if (truncated && skippedFiles.length > 0) {
92
- console.log(` Note: ${skippedFiles.length} file(s) skipped to stay within the 1MB total size budget. Pages and layouts are prioritized.`);
93
- for (const f of skippedFiles) {
94
- console.log(` - ${f}`);
95
- }
96
- }
97
- if (projectFiles.length === 0) {
98
- throw new MagicPathError('No UI files found in the project.');
99
- }
100
- // Detect theme file (globals.css etc.)
101
- let themeFile = findThemeFile(cwd, language, framework);
102
- if (themeFile) {
103
- console.log(` Found theme file: ${themeFile.path}`);
104
- }
105
- // Sort files by directory so related files are processed together
106
- if (batchSize) {
107
- projectFiles.sort((a, b) => {
108
- const dirA = path.dirname(a.path);
109
- const dirB = path.dirname(b.path);
110
- return dirA.localeCompare(dirB);
111
- });
112
- }
113
- // Process files one by one
114
- const totalFiles = projectFiles.length;
115
- const allModifiedFiles = [];
116
- let batchModifiedFiles = [];
117
- const rethemeSpinner = brandSpinner('').start();
118
- rethemeSpinner.spinner = {
119
- frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'].map((f) => `${BRAND_GREEN}${f}${ANSI_RESET}`),
120
- };
121
- const totalStart = Date.now();
122
- const BAR_WIDTH = 20;
123
- const fmtTime = (ms) => {
124
- const s = Math.floor(ms / 1000);
125
- const m = Math.floor(s / 60);
126
- return m > 0 ? `${m}m ${s % 60}s` : `${s}s`;
127
- };
128
- const makeBar = (done, total) => {
129
- const filled = Math.round((done / total) * BAR_WIDTH);
130
- const filledStr = '█'.repeat(filled);
131
- const emptyStr = '░'.repeat(BAR_WIDTH - filled);
132
- return `\x1b[38;2;8;92;52m${filledStr}${emptyStr}\x1b[0m`;
133
- };
134
- let currentBatch = 0;
135
- let appliedCount = 0;
136
- let filesInCurrentBatch = 0;
137
- const failedFiles = [];
138
- const userSkippedFiles = [];
139
- // Enable raw mode to capture 's' keypress for skipping files
140
- const stdin = process.stdin;
141
- const wasRaw = stdin.isRaw;
142
- if (stdin.isTTY)
143
- stdin.setRawMode(true);
144
- stdin.resume();
145
- stdin.setEncoding('utf8');
146
- console.log(` Press ${BRAND_GREEN}s${ANSI_RESET} to skip the current file\n`);
147
- try {
148
- for (let i = 0; i < totalFiles; i++) {
149
- const file = projectFiles[i];
150
- const fileStart = Date.now();
151
- const fileElapsed = () => fmtTime(Date.now() - fileStart);
152
- const totalElapsed = () => fmtTime(Date.now() - totalStart);
153
- const status = () => `${makeBar(i, totalFiles)} ${i + 1}/${totalFiles} ${file.path} — ${fileElapsed()} (${totalElapsed()} total)`;
154
- rethemeSpinner.text = status();
155
- const elapsedTimer = setInterval(() => {
156
- rethemeSpinner.text = status();
157
- }, 1000);
158
- const controller = new AbortController();
159
- const onKeypress = (key) => {
160
- if (key === 's' || key === 'S')
161
- controller.abort();
162
- // Ctrl+C — restore stdin and exit
163
- if (key === '\x03') {
164
- if (stdin.isTTY)
165
- stdin.setRawMode(wasRaw ?? false);
166
- stdin.pause();
167
- process.exit(130);
168
- }
169
- };
170
- stdin.on('data', onKeypress);
171
- let fileResult;
172
- try {
173
- fileResult = await requestRetheme({
174
- mode: 'retheme',
175
- projectFiles: [file],
176
- componentGeneratedName: generatedName,
177
- framework,
178
- userInstruction: rethemeInstruction || undefined,
179
- targetLanguage: language !== 'js' ? language : undefined,
180
- themeFile: themeFile || undefined,
181
- }, controller.signal);
182
- }
183
- catch (fileErr) {
184
- clearInterval(elapsedTimer);
185
- stdin.removeListener('data', onKeypress);
186
- if (fileErr instanceof SkipFileError) {
187
- userSkippedFiles.push(file.path);
188
- }
189
- else {
190
- failedFiles.push(file.path);
191
- }
192
- filesInCurrentBatch++;
193
- continue;
194
- }
195
- finally {
196
- clearInterval(elapsedTimer);
197
- stdin.removeListener('data', onKeypress);
198
- }
199
- for (const modified of fileResult.modifiedFiles) {
200
- // If the AI returned an updated theme file, accumulate it for subsequent iterations
201
- if (themeFile && modified.path === themeFile.path) {
202
- themeFile = { ...themeFile, content: modified.content };
203
- }
204
- allModifiedFiles.push(modified);
205
- batchModifiedFiles.push(modified);
206
- }
207
- filesInCurrentBatch++;
208
- // No-review mode: apply each file's changes immediately
209
- if (noReview && !batchSize) {
210
- applyChanges(fileResult.modifiedFiles, cwd);
211
- appliedCount += fileResult.modifiedFiles.length;
212
- }
213
- // Batch mode: pause once we've hit batchSize AND we're at a directory boundary
214
- if (batchSize && filesInCurrentBatch >= batchSize && i + 1 < totalFiles) {
215
- const currentDir = path.dirname(file.path);
216
- const nextDir = path.dirname(projectFiles[i + 1].path);
217
- if (currentDir !== nextDir) {
218
- currentBatch++;
219
- rethemeSpinner.stop();
220
- applyChanges(batchModifiedFiles, cwd);
221
- appliedCount += batchModifiedFiles.length;
222
- console.log(`\n Batch ${currentBatch} applied (${filesInCurrentBatch} files). Elapsed: ${fmtTime(Date.now() - totalStart)}`);
223
- // Restore normal stdin for interactive prompt
224
- if (stdin.isTTY)
225
- stdin.setRawMode(false);
226
- stdin.pause();
227
- const { shouldContinue } = await prompts({
228
- type: 'confirm',
229
- name: 'shouldContinue',
230
- message: 'Continue to next batch?',
231
- initial: true,
232
- });
233
- if (!shouldContinue) {
234
- console.log(`\n Stopped after batch ${currentBatch}. Applied ${appliedCount} files total.`);
235
- return;
236
- }
237
- // Re-enable raw mode for skip keypress
238
- if (stdin.isTTY)
239
- stdin.setRawMode(true);
240
- stdin.resume();
241
- batchModifiedFiles = [];
242
- filesInCurrentBatch = 0;
243
- rethemeSpinner.start();
244
- }
245
- }
246
- }
247
- const totalSeconds = Math.floor((Date.now() - totalStart) / 1000);
248
- const minutes = Math.floor(totalSeconds / 60);
249
- const seconds = totalSeconds % 60;
250
- const timeStr = minutes > 0 ? `${minutes}m ${seconds}s` : `${totalSeconds}s`;
251
- const failSuffix = failedFiles.length > 0 ? `, ${failedFiles.length} failed` : '';
252
- const skipSuffix = userSkippedFiles.length > 0 ? `, ${userSkippedFiles.length} skipped` : '';
253
- rethemeSpinner.succeed(`Retheme generated (${totalFiles} files in ${timeStr}${failSuffix}${skipSuffix})`);
254
- if (failedFiles.length > 0) {
255
- console.log(`\n Failed files:`);
256
- for (const f of failedFiles) {
257
- console.log(` ✖ ${f}`);
258
- }
259
- }
260
- if (userSkippedFiles.length > 0) {
261
- console.log(`\n Skipped files:`);
262
- for (const f of userSkippedFiles) {
263
- console.log(` ⏭ ${f}`);
264
- }
265
- }
266
- // Deduplicate theme file in allModifiedFiles — only keep the last version
267
- if (themeFile) {
268
- let lastThemeIdx = -1;
269
- for (let j = allModifiedFiles.length - 1; j >= 0; j--) {
270
- if (allModifiedFiles[j].path === themeFile.path) {
271
- if (lastThemeIdx === -1) {
272
- lastThemeIdx = j;
273
- }
274
- else {
275
- allModifiedFiles.splice(j, 1);
276
- lastThemeIdx--;
277
- }
278
- }
279
- }
280
- }
281
- if (batchSize) {
282
- // Deduplicate theme file in batchModifiedFiles as well
283
- if (themeFile) {
284
- let lastThemeIdx = -1;
285
- for (let j = batchModifiedFiles.length - 1; j >= 0; j--) {
286
- if (batchModifiedFiles[j].path === themeFile.path) {
287
- if (lastThemeIdx === -1) {
288
- lastThemeIdx = j;
289
- }
290
- else {
291
- batchModifiedFiles.splice(j, 1);
292
- lastThemeIdx--;
293
- }
294
- }
295
- }
296
- }
297
- // Apply remaining files from the final (possibly partial) batch
298
- if (batchModifiedFiles.length > 0) {
299
- applyChanges(batchModifiedFiles, cwd);
300
- appliedCount += batchModifiedFiles.length;
301
- }
302
- console.log(`\n✅ Retheme complete! Applied ${appliedCount} files.`);
303
- }
304
- else if (noReview) {
305
- // Already applied per-file above; just print summary
306
- console.log(`\n✅ Retheme complete! Applied ${appliedCount} files.`);
307
- }
308
- else {
309
- // Restore normal stdin for interactive review prompt
310
- if (stdin.isTTY)
311
- stdin.setRawMode(wasRaw ?? false);
312
- stdin.pause();
313
- await reviewAndApplyChanges(allModifiedFiles, cwd, 'Retheme');
314
- }
315
- }
316
- catch (rethemeErr) {
317
- rethemeSpinner.fail('Retheme failed');
318
- throw rethemeErr;
319
- }
320
- finally {
321
- // Restore stdin to normal mode (safe to call even if already restored)
322
- if (stdin.isTTY && stdin.isRaw)
323
- stdin.setRawMode(wasRaw ?? false);
324
- stdin.pause();
325
- }
326
- }
327
- //# sourceMappingURL=retheme.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"retheme.js","sourceRoot":"","sources":["../../src/commands/retheme.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerSkillsCommand(program: Command): void;
@@ -1,55 +0,0 @@
1
- import path from 'path';
2
- import fs from 'fs-extra';
3
- import { fileURLToPath } from 'url';
4
- function getSkillsDir() {
5
- // Resolve skills/ relative to the package root
6
- const thisFile = fileURLToPath(import.meta.url);
7
- // src/commands/skills.ts -> package root is ../../
8
- return path.resolve(path.dirname(thisFile), '..', '..', 'skills');
9
- }
10
- export function registerSkillsCommand(program) {
11
- program
12
- .command('skills')
13
- .description('List available AI agent skill files')
14
- .argument('[name]', 'Show a specific skill by name')
15
- .action((name) => {
16
- const skillsDir = getSkillsDir();
17
- if (!fs.existsSync(skillsDir)) {
18
- console.error('No skills directory found.');
19
- process.exit(1);
20
- }
21
- if (name) {
22
- // Show a specific skill
23
- const skillDir = path.join(skillsDir, name);
24
- const skillFile = path.join(skillDir, 'SKILL.md');
25
- if (!fs.existsSync(skillFile)) {
26
- console.error(`Skill "${name}" not found.`);
27
- console.error('Available skills:');
28
- listSkills(skillsDir);
29
- process.exit(1);
30
- }
31
- const content = fs.readFileSync(skillFile, 'utf8');
32
- console.log(content);
33
- return;
34
- }
35
- // List all skills
36
- console.log('Available MagicPath skills:\n');
37
- listSkills(skillsDir);
38
- console.log('\nUsage: magicpath-ai skills <name>');
39
- });
40
- }
41
- function listSkills(skillsDir) {
42
- const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
43
- for (const entry of entries) {
44
- if (entry.isDirectory()) {
45
- const skillFile = path.join(skillsDir, entry.name, 'SKILL.md');
46
- if (fs.existsSync(skillFile)) {
47
- const content = fs.readFileSync(skillFile, 'utf8');
48
- // Extract title from first line
49
- const firstLine = content.split('\n')[0]?.replace(/^#\s*/, '') || entry.name;
50
- console.log(` ${entry.name.padEnd(30)} ${firstLine}`);
51
- }
52
- }
53
- }
54
- }
55
- //# sourceMappingURL=skills.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- export interface ModifiedFile {
2
- path: string;
3
- content: string;
4
- }
5
- /**
6
- * Write modified files to disk without any prompts or review.
7
- */
8
- export declare function applyChanges(modifiedFiles: ModifiedFile[], cwd: string): void;
9
- /**
10
- * Show a list of modified files, optionally display colored diffs,
11
- * then prompt the user to apply changes. Returns true if changes were applied.
12
- */
13
- export declare function reviewAndApplyChanges(modifiedFiles: ModifiedFile[], cwd: string, label: string): Promise<boolean>;