magicpath-ai 1.4.1 → 1.5.0-beta.2

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 +139 -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,24 +0,0 @@
1
- import { createClient } from '@liveblocks/client';
2
- export declare function createLiveblocksClient(authHeaders: Record<string, string>): import("@liveblocks/core").Client<import("@liveblocks/core").BaseUserMeta, import("@liveblocks/core").BaseMetadata, import("@liveblocks/core").BaseMetadata>;
3
- /**
4
- * Enter a Liveblocks room and wait for the connection to be established.
5
- * Returns the room and a leave function.
6
- */
7
- export declare function enterRoomAndWait(client: ReturnType<typeof createClient>, roomId: string, timeoutMs?: number): Promise<{
8
- room: any;
9
- leave: () => void;
10
- }>;
11
- /**
12
- * Read selected shape IDs from other connections' TLDraw presence in a room.
13
- * Returns an array of shape IDs that are selected.
14
- */
15
- export declare function getSelectedShapeIdsFromRoom(room: any): string[];
16
- /**
17
- * Look up shape records in room storage by shape IDs.
18
- * Returns component info for shapes that are component type.
19
- */
20
- export declare function resolveShapesToComponents(room: any, shapeIds: string[]): Promise<{
21
- serverId: string;
22
- clientId: string;
23
- name: string;
24
- }[]>;
@@ -1,112 +0,0 @@
1
- import { createClient } from '@liveblocks/client';
2
- import WebSocket from 'ws';
3
- import { getLiveblocksAuthUrl } from './api.js';
4
- export function createLiveblocksClient(authHeaders) {
5
- const liveblocksAuthUrl = getLiveblocksAuthUrl();
6
- return createClient({
7
- polyfills: { fetch, WebSocket: WebSocket },
8
- authEndpoint: async (room) => {
9
- const response = await fetch(liveblocksAuthUrl, {
10
- method: 'POST',
11
- headers: { ...authHeaders, 'Content-Type': 'application/json' },
12
- body: JSON.stringify({ room }),
13
- });
14
- return await response.json();
15
- },
16
- });
17
- }
18
- /**
19
- * Enter a Liveblocks room and wait for the connection to be established.
20
- * Returns the room and a leave function.
21
- */
22
- export async function enterRoomAndWait(client, roomId, timeoutMs = 10000) {
23
- const { room, leave } = client.enterRoom(roomId, {
24
- initialPresence: {},
25
- });
26
- // Wait for connected status
27
- await new Promise((resolve, reject) => {
28
- const timeout = setTimeout(() => {
29
- reject(new Error(`Timed out connecting to room ${roomId}`));
30
- }, timeoutMs);
31
- const unsubscribe = room.subscribe('status', (status) => {
32
- if (status === 'connected') {
33
- clearTimeout(timeout);
34
- unsubscribe();
35
- resolve();
36
- }
37
- });
38
- // Check if already connected
39
- if (room.getStatus() === 'connected') {
40
- clearTimeout(timeout);
41
- unsubscribe();
42
- resolve();
43
- }
44
- });
45
- // Wait for others' presence to arrive (syncs asynchronously after connection)
46
- await new Promise((resolve) => {
47
- const others = room.getOthers();
48
- if (others.length > 0) {
49
- resolve();
50
- return;
51
- }
52
- const timeout = setTimeout(() => {
53
- unsubscribe();
54
- resolve(); // Resolve even on timeout — maybe no one else is in the room
55
- }, 3000);
56
- const unsubscribe = room.subscribe('others', (othersList) => {
57
- if (othersList.length > 0) {
58
- clearTimeout(timeout);
59
- unsubscribe();
60
- resolve();
61
- }
62
- });
63
- });
64
- return { room, leave };
65
- }
66
- /**
67
- * Read selected shape IDs from other connections' TLDraw presence in a room.
68
- * Returns an array of shape IDs that are selected.
69
- */
70
- export function getSelectedShapeIdsFromRoom(room) {
71
- const others = room.getOthers();
72
- const selectedShapeIds = [];
73
- for (const other of others) {
74
- const tlPresence = other.presence?.presence;
75
- if (tlPresence?.selectedShapeIds?.length) {
76
- selectedShapeIds.push(...tlPresence.selectedShapeIds);
77
- }
78
- }
79
- return [...new Set(selectedShapeIds)]; // deduplicate
80
- }
81
- /**
82
- * Look up shape records in room storage by shape IDs.
83
- * Returns component info for shapes that are component type.
84
- */
85
- export async function resolveShapesToComponents(room, shapeIds) {
86
- const { root } = await room.getStorage();
87
- const records = root.get('records');
88
- if (!records)
89
- return [];
90
- const components = [];
91
- for (const shapeId of shapeIds) {
92
- const shape = records.get(shapeId);
93
- if (!shape)
94
- continue;
95
- // Convert LiveObject to plain object if needed
96
- const shapeData = typeof shape.toObject === 'function' ? shape.toObject() : shape;
97
- if (shapeData.type === 'component' && shapeData.props) {
98
- const props = typeof shapeData.props.toObject === 'function'
99
- ? shapeData.props.toObject()
100
- : shapeData.props;
101
- if (props.serverId) {
102
- components.push({
103
- serverId: props.serverId,
104
- clientId: props.clientId ?? shapeId.replace('shape:', ''),
105
- name: props.name ?? 'Unknown',
106
- });
107
- }
108
- }
109
- }
110
- return components;
111
- }
112
- //# sourceMappingURL=liveblocks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"liveblocks.js","sourceRoot":"","sources":["../../src/util/liveblocks.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare function enableDebugLogger(): void;
2
- export declare const logger: {
3
- info: (object: unknown) => void;
4
- debug: (object: unknown) => void;
5
- warn: (object: unknown) => void;
6
- error: (object: unknown) => void;
7
- };
@@ -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
@@ -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"}
@@ -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;
@@ -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
@@ -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"}
@@ -1,3 +0,0 @@
1
- export declare function downloadProject(key: string): Promise<string>;
2
- export declare function releaseProject(filename: string): void;
3
- export declare function unpackProject(filename: string, name: string, targetDir: string): string;
@@ -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
@@ -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
@@ -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"}