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.
- package/dist/cli.js +137 -50
- package/package.json +9 -7
- package/dist/cli.d.ts +0 -2
- package/dist/cli.js.map +0 -1
- package/dist/commands/add.d.ts +0 -48
- package/dist/commands/add.js +0 -451
- package/dist/commands/add.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -7
- package/dist/commands/auth.js +0 -189
- package/dist/commands/auth.js.map +0 -1
- package/dist/commands/clone.d.ts +0 -2
- package/dist/commands/clone.js +0 -241
- package/dist/commands/clone.js.map +0 -1
- package/dist/commands/get-theme.d.ts +0 -2
- package/dist/commands/get-theme.js +0 -134
- package/dist/commands/get-theme.js.map +0 -1
- package/dist/commands/info.d.ts +0 -2
- package/dist/commands/info.js +0 -128
- package/dist/commands/info.js.map +0 -1
- package/dist/commands/inspect.d.ts +0 -53
- package/dist/commands/inspect.js +0 -122
- package/dist/commands/inspect.js.map +0 -1
- package/dist/commands/list-installed.d.ts +0 -2
- package/dist/commands/list-installed.js +0 -112
- package/dist/commands/list-installed.js.map +0 -1
- package/dist/commands/list-themes.d.ts +0 -2
- package/dist/commands/list-themes.js +0 -94
- package/dist/commands/list-themes.js.map +0 -1
- package/dist/commands/list.d.ts +0 -2
- package/dist/commands/list.js +0 -216
- package/dist/commands/list.js.map +0 -1
- package/dist/commands/schema.d.ts +0 -2
- package/dist/commands/schema.js +0 -282
- package/dist/commands/schema.js.map +0 -1
- package/dist/commands/search.d.ts +0 -2
- package/dist/commands/search.js +0 -124
- package/dist/commands/search.js.map +0 -1
- package/dist/commands/setup-skills.d.ts +0 -2
- package/dist/commands/setup-skills.js +0 -13
- package/dist/commands/setup-skills.js.map +0 -1
- package/dist/commands/view.d.ts +0 -2
- package/dist/commands/view.js +0 -27
- package/dist/commands/view.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -2
- package/dist/commands/whoami.js +0 -66
- package/dist/commands/whoami.js.map +0 -1
- package/dist/util/api.d.ts +0 -14
- package/dist/util/api.js +0 -40
- package/dist/util/api.js.map +0 -1
- package/dist/util/auth.d.ts +0 -25
- package/dist/util/auth.js +0 -106
- package/dist/util/auth.js.map +0 -1
- package/dist/util/authError.d.ts +0 -4
- package/dist/util/authError.js +0 -7
- package/dist/util/authError.js.map +0 -1
- package/dist/util/banner.d.ts +0 -1
- package/dist/util/banner.js +0 -79
- package/dist/util/banner.js.map +0 -1
- package/dist/util/component.d.ts +0 -186
- package/dist/util/component.js +0 -349
- package/dist/util/component.js.map +0 -1
- package/dist/util/dependencies.d.ts +0 -12
- package/dist/util/dependencies.js +0 -93
- package/dist/util/dependencies.js.map +0 -1
- package/dist/util/error.d.ts +0 -9
- package/dist/util/error.js +0 -10
- package/dist/util/error.js.map +0 -1
- package/dist/util/ide.d.ts +0 -3
- package/dist/util/ide.js +0 -145
- package/dist/util/ide.js.map +0 -1
- package/dist/util/logger.d.ts +0 -7
- package/dist/util/logger.js +0 -21
- package/dist/util/logger.js.map +0 -1
- package/dist/util/output.d.ts +0 -15
- package/dist/util/output.js +0 -36
- package/dist/util/output.js.map +0 -1
- package/dist/util/project.d.ts +0 -3
- package/dist/util/project.js +0 -64
- package/dist/util/project.js.map +0 -1
- package/dist/util/ui.d.ts +0 -11
- package/dist/util/ui.js +0 -30
- package/dist/util/ui.js.map +0 -1
package/dist/util/logger.d.ts
DELETED
package/dist/util/logger.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { pino } from 'pino';
|
|
2
|
-
let defaultLogger = pino();
|
|
3
|
-
export function enableDebugLogger() {
|
|
4
|
-
defaultLogger = pino({ level: 'debug' });
|
|
5
|
-
defaultLogger.debug({ message: 'DEBUG logger enabled. ' });
|
|
6
|
-
}
|
|
7
|
-
export const logger = {
|
|
8
|
-
info: (object) => {
|
|
9
|
-
defaultLogger.info(object);
|
|
10
|
-
},
|
|
11
|
-
debug: (object) => {
|
|
12
|
-
defaultLogger.debug(object);
|
|
13
|
-
},
|
|
14
|
-
warn: (object) => {
|
|
15
|
-
defaultLogger.warn(object);
|
|
16
|
-
},
|
|
17
|
-
error: (object) => {
|
|
18
|
-
defaultLogger.error(object);
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/util/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,IAAI,aAAa,GAAG,IAAI,EAAE,CAAC;AAE3B,MAAM,UAAU,iBAAiB;IAC/B,aAAa,GAAG,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;IACzC,aAAa,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE;QACxB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,EAAE,CAAC,MAAe,EAAE,EAAE;QACzB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,IAAI,EAAE,CAAC,MAAe,EAAE,EAAE;QACxB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,KAAK,EAAE,CAAC,MAAe,EAAE,EAAE;QACzB,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACF,CAAC"}
|
package/dist/util/output.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Output context for controlling JSON vs human-friendly output.
|
|
3
|
-
* When JSON mode is active, spinners and interactive prompts are suppressed.
|
|
4
|
-
*/
|
|
5
|
-
export declare function setJsonMode(enabled: boolean): void;
|
|
6
|
-
export declare function isJsonMode(): boolean;
|
|
7
|
-
/**
|
|
8
|
-
* Print a JSON result to stdout and exit with code 0.
|
|
9
|
-
*/
|
|
10
|
-
export declare function jsonResult(data: unknown): never;
|
|
11
|
-
/**
|
|
12
|
-
* Print a JSON error to stderr and exit with code 1.
|
|
13
|
-
* Includes `code` and `suggestion` fields when the error is a MagicPathError.
|
|
14
|
-
*/
|
|
15
|
-
export declare function jsonError(err: unknown): never;
|
package/dist/util/output.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Output context for controlling JSON vs human-friendly output.
|
|
3
|
-
* When JSON mode is active, spinners and interactive prompts are suppressed.
|
|
4
|
-
*/
|
|
5
|
-
import { MagicPathError } from './error.js';
|
|
6
|
-
let jsonMode = false;
|
|
7
|
-
export function setJsonMode(enabled) {
|
|
8
|
-
jsonMode = enabled;
|
|
9
|
-
}
|
|
10
|
-
export function isJsonMode() {
|
|
11
|
-
return jsonMode;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Print a JSON result to stdout and exit with code 0.
|
|
15
|
-
*/
|
|
16
|
-
export function jsonResult(data) {
|
|
17
|
-
console.log(JSON.stringify(data, null, 2));
|
|
18
|
-
process.exit(0);
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Print a JSON error to stderr and exit with code 1.
|
|
22
|
-
* Includes `code` and `suggestion` fields when the error is a MagicPathError.
|
|
23
|
-
*/
|
|
24
|
-
export function jsonError(err) {
|
|
25
|
-
const message = err instanceof Error ? err.message : String(err);
|
|
26
|
-
const payload = { error: message };
|
|
27
|
-
if (err instanceof MagicPathError) {
|
|
28
|
-
if (err.code)
|
|
29
|
-
payload.code = err.code;
|
|
30
|
-
if (err.suggestion)
|
|
31
|
-
payload.suggestion = err.suggestion;
|
|
32
|
-
}
|
|
33
|
-
console.error(JSON.stringify(payload, null, 2));
|
|
34
|
-
process.exit(1);
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=output.js.map
|
package/dist/util/output.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/util/output.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,QAAQ,GAAG,OAAO,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,OAAO,GAA2B,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAE3D,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,IAAI;YAAE,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACtC,IAAI,GAAG,CAAC,UAAU;YAAE,OAAO,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAC1D,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
package/dist/util/project.d.ts
DELETED
package/dist/util/project.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import axios from 'axios';
|
|
2
|
-
import path from 'path';
|
|
3
|
-
import os from 'os';
|
|
4
|
-
import fs from 'fs-extra';
|
|
5
|
-
import AdmZip from 'adm-zip';
|
|
6
|
-
import { v4 as uuidv4 } from 'uuid';
|
|
7
|
-
import { MagicPathError } from './error.js';
|
|
8
|
-
import { APIVersion, makeUrl } from './api.js';
|
|
9
|
-
export async function downloadProject(key) {
|
|
10
|
-
const url = makeUrl(APIVersion.V1, 'components/repository');
|
|
11
|
-
const filename = `${uuidv4()}.zip`;
|
|
12
|
-
const filepath = path.join(os.tmpdir(), filename);
|
|
13
|
-
try {
|
|
14
|
-
const response = await axios({
|
|
15
|
-
url,
|
|
16
|
-
params: { key },
|
|
17
|
-
method: 'GET',
|
|
18
|
-
responseType: 'stream',
|
|
19
|
-
});
|
|
20
|
-
await fs.ensureDir(path.dirname(filepath));
|
|
21
|
-
await new Promise(async (resolve, reject) => {
|
|
22
|
-
try {
|
|
23
|
-
response.data
|
|
24
|
-
.pipe(fs.createWriteStream(filepath))
|
|
25
|
-
.on('error', reject)
|
|
26
|
-
.once('close', () => resolve(filepath));
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
reject(err);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
return filepath;
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
throw new MagicPathError('Failed to download project. Make sure your key is valid.');
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
export function releaseProject(filename) {
|
|
39
|
-
try {
|
|
40
|
-
fs.removeSync(filename);
|
|
41
|
-
}
|
|
42
|
-
catch {
|
|
43
|
-
// do nothing
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export function unpackProject(filename, name, targetDir) {
|
|
47
|
-
try {
|
|
48
|
-
let projectDir = path.join(targetDir, name);
|
|
49
|
-
let counter = 1;
|
|
50
|
-
while (fs.existsSync(projectDir)) {
|
|
51
|
-
counter++;
|
|
52
|
-
projectDir = path.join(targetDir, `${name}-${counter}`);
|
|
53
|
-
}
|
|
54
|
-
fs.mkdirSync(projectDir, { recursive: true });
|
|
55
|
-
const zip = new AdmZip(filename);
|
|
56
|
-
zip.extractAllTo(projectDir, true);
|
|
57
|
-
releaseProject(filename);
|
|
58
|
-
return projectDir;
|
|
59
|
-
}
|
|
60
|
-
catch (err) {
|
|
61
|
-
throw new MagicPathError('Failed to extract project. Please try again.');
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=project.js.map
|
package/dist/util/project.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/util/project.ts"],"names":[],"mappings":"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"}
|
package/dist/util/ui.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const BRAND_GREEN = "\u001B[38;2;32;140;80m";
|
|
2
|
-
export declare const ANSI_RESET = "\u001B[0m";
|
|
3
|
-
export declare const GREEN_CHECK = "\u001B[38;2;32;140;80m\u2714\u001B[0m";
|
|
4
|
-
/** Create an ora spinner whose succeed() checkmark uses our brand green. */
|
|
5
|
-
export declare function brandSpinner(text: string): import("ora").Ora;
|
|
6
|
-
/**
|
|
7
|
-
* Temporarily patch stdout.write so that the cyan ANSI code (\x1b[36m)
|
|
8
|
-
* emitted by `prompts` select menus is replaced with our brand green.
|
|
9
|
-
* Returns a restore function that undoes the patch.
|
|
10
|
-
*/
|
|
11
|
-
export declare function patchPromptsColor(): () => void;
|
package/dist/util/ui.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import ora from 'ora';
|
|
2
|
-
export const BRAND_GREEN = '\x1b[38;2;32;140;80m';
|
|
3
|
-
export const ANSI_RESET = '\x1b[0m';
|
|
4
|
-
export const GREEN_CHECK = `${BRAND_GREEN}✔${ANSI_RESET}`;
|
|
5
|
-
/** Create an ora spinner whose succeed() checkmark uses our brand green. */
|
|
6
|
-
export function brandSpinner(text) {
|
|
7
|
-
const s = ora(text);
|
|
8
|
-
const origStop = s.stopAndPersist.bind(s);
|
|
9
|
-
s.succeed = (t) => origStop({ symbol: GREEN_CHECK, text: t });
|
|
10
|
-
return s;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Temporarily patch stdout.write so that the cyan ANSI code (\x1b[36m)
|
|
14
|
-
* emitted by `prompts` select menus is replaced with our brand green.
|
|
15
|
-
* Returns a restore function that undoes the patch.
|
|
16
|
-
*/
|
|
17
|
-
export function patchPromptsColor() {
|
|
18
|
-
const origWrite = process.stdout.write.bind(process.stdout);
|
|
19
|
-
const patchedWrite = ((chunk, ...args) => {
|
|
20
|
-
if (typeof chunk === 'string') {
|
|
21
|
-
chunk = chunk.replace(/\x1b\[36m/g, BRAND_GREEN);
|
|
22
|
-
}
|
|
23
|
-
return origWrite(chunk, ...args);
|
|
24
|
-
});
|
|
25
|
-
process.stdout.write = patchedWrite;
|
|
26
|
-
return () => {
|
|
27
|
-
process.stdout.write = origWrite;
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
//# sourceMappingURL=ui.js.map
|
package/dist/util/ui.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/util/ui.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAClD,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,WAAW,IAAI,UAAU,EAAE,CAAC;AAE1D,4EAA4E;AAC5E,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;IACpB,MAAM,QAAQ,GAAG,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,OAAO,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAgC,CAAC,CACjD,KAAU,EACV,GAAG,IAAW,EACd,EAAE;QACF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACnD,CAAC;QACD,OAAQ,SAAiB,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IAC5C,CAAC,CAAQ,CAAC;IACV,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,CAAC;IAEpC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
|