magicpath-ai 1.3.0-beta.13 → 1.3.0-beta.15

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/util/auth.js CHANGED
@@ -1,17 +1,16 @@
1
1
  import fs from 'fs-extra';
2
2
  import path from 'path';
3
3
  import os from 'os';
4
+ import axios from 'axios';
5
+ import { getUserUrl } from './api.js';
4
6
  const CONFIG_DIR = path.join(os.homedir(), '.magicpath');
5
- const AUTH_FILE = path.join(CONFIG_DIR, 'auth.json');
6
- export function saveTokens(accessToken, refreshToken) {
7
- fs.ensureDirSync(CONFIG_DIR);
8
- fs.writeJsonSync(AUTH_FILE, { accessToken, refreshToken });
9
- }
10
- export function loadTokens() {
7
+ const SESSION_FILE = path.join(CONFIG_DIR, 'session.json');
8
+ // ── Internal helpers ─────────────────────────────────────
9
+ function loadSession() {
11
10
  try {
12
- if (!fs.existsSync(AUTH_FILE))
11
+ if (!fs.existsSync(SESSION_FILE))
13
12
  return null;
14
- const data = fs.readJsonSync(AUTH_FILE);
13
+ const data = fs.readJsonSync(SESSION_FILE);
15
14
  if (data.accessToken && data.refreshToken)
16
15
  return data;
17
16
  return null;
@@ -20,14 +19,49 @@ export function loadTokens() {
20
19
  return null;
21
20
  }
22
21
  }
23
- export function clearTokens() {
22
+ function saveSession(session) {
23
+ fs.ensureDirSync(CONFIG_DIR);
24
+ fs.writeJsonSync(SESSION_FILE, session);
25
+ }
26
+ // ── Public API ───────────────────────────────────────────
27
+ export function saveTokens(accessToken, refreshToken) {
28
+ const existing = loadSession();
29
+ saveSession({ accessToken, refreshToken, user: existing?.user });
30
+ }
31
+ export function loadTokens() {
32
+ const session = loadSession();
33
+ if (!session)
34
+ return null;
35
+ return { accessToken: session.accessToken, refreshToken: session.refreshToken };
36
+ }
37
+ export function clearSession() {
24
38
  try {
25
- fs.removeSync(AUTH_FILE);
39
+ fs.removeSync(SESSION_FILE);
26
40
  }
27
41
  catch {
28
42
  // Ignore if file doesn't exist
29
43
  }
30
44
  }
45
+ /** @deprecated Use clearSession() instead. */
46
+ export const clearTokens = clearSession;
47
+ /** @deprecated Use clearSession() instead. */
48
+ export const clearUserInfo = clearSession;
49
+ export function saveUserInfo(info) {
50
+ try {
51
+ const session = loadSession();
52
+ if (session) {
53
+ session.user = info;
54
+ saveSession(session);
55
+ }
56
+ }
57
+ catch {
58
+ // non-critical, ignore
59
+ }
60
+ }
61
+ export function loadUserInfo() {
62
+ const session = loadSession();
63
+ return session?.user ?? null;
64
+ }
31
65
  export function getAuthHeaders() {
32
66
  // Environment variable takes precedence (for CI/CD and AI agents)
33
67
  const envToken = process.env.MAGICPATH_TOKEN;
@@ -40,4 +74,27 @@ export function getAuthHeaders() {
40
74
  }
41
75
  return { Authorization: `Bearer ${tokens.accessToken}` };
42
76
  }
77
+ /** Extract CachedUserInfo from a raw API user object and save to session. */
78
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
+ export function cacheUserFromResponse(user) {
80
+ const plan = user.subscription?.active
81
+ ? user.subscription.type?.startsWith('PRO')
82
+ ? 'Pro'
83
+ : 'Creator'
84
+ : 'Free';
85
+ const info = {
86
+ name: user.name || user.firstName || user.displayName,
87
+ email: user.email,
88
+ plan,
89
+ };
90
+ saveUserInfo(info);
91
+ return info;
92
+ }
93
+ /** Fetch current user from API, cache the result, and return it. */
94
+ export async function fetchAndCacheUser() {
95
+ const headers = getAuthHeaders();
96
+ const response = await axios.get(getUserUrl(), { headers });
97
+ const user = response.data.user ?? response.data;
98
+ return cacheUserFromResponse(user);
99
+ }
43
100
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/util/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACzD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAOrD,MAAM,UAAU,UAAU,CAAC,WAAmB,EAAE,YAAoB;IAClE,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAC7B,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,kEAAkE;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC7C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,EAAE,aAAa,EAAE,UAAU,QAAQ,EAAE,EAAE,CAAC;IACjD,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/util/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function showBanner(version: string): void;
@@ -0,0 +1,119 @@
1
+ import { Chalk } from 'chalk';
2
+ import { loadTokens, loadUserInfo } from './auth.js';
3
+ const c = new Chalk({ level: 3 });
4
+ const G1 = c.hex('#52B788');
5
+ const G2 = c.hex('#40916C');
6
+ const G3 = c.hex('#2D6A4F');
7
+ const WH = c.hex('#E8F5E9');
8
+ const DM = c.hex('#555555');
9
+ const LC = 43;
10
+ const RC = 45;
11
+ const INNER = LC + RC + 1;
12
+ const SPRITE = [
13
+ '███╗ ███╗ █████╗ ██████╗ ██╗ ██████╗',
14
+ '████╗ ████║██╔══██╗██╔════╝ ██║██╔════╝',
15
+ '██╔████╔██║███████║██║ ███╗██║██║ ',
16
+ '██║╚██╔╝██║██╔══██║██║ ██║██║██║ ',
17
+ '██║ ╚═╝ ██║██║ ██║╚██████╔╝██║╚██████╗',
18
+ '╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝',
19
+ ' ',
20
+ '██████╗ █████╗ ████████╗██╗ ██╗',
21
+ '██╔══██╗██╔══██╗╚══██╔══╝██║ ██║',
22
+ '██████╔╝███████║ ██║ ███████║',
23
+ '██╔═══╝ ██╔══██║ ██║ ██╔══██║',
24
+ '██║ ██║ ██║ ██║ ██║ ██║',
25
+ '╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝',
26
+ ];
27
+ const ANSI = /\x1b\[[0-9;]*m/g;
28
+ const vis = (s) => s.replace(ANSI, '').length;
29
+ const GRAD_START = [180, 255, 220];
30
+ const GRAD_END = [30, 90, 58];
31
+ function lerpColor(t) {
32
+ const r = Math.round(GRAD_START[0] + (GRAD_END[0] - GRAD_START[0]) * t);
33
+ const g = Math.round(GRAD_START[1] + (GRAD_END[1] - GRAD_START[1]) * t);
34
+ const b = Math.round(GRAD_START[2] + (GRAD_END[2] - GRAD_START[2]) * t);
35
+ return c.rgb(r, g, b);
36
+ }
37
+ function pad(str, width) {
38
+ const need = width - vis(str);
39
+ return str + ' '.repeat(Math.max(0, need));
40
+ }
41
+ function center(str, width) {
42
+ const gap = Math.max(0, width - vis(str));
43
+ const l = Math.floor(gap / 2);
44
+ return ' '.repeat(l) + str + ' '.repeat(gap - l);
45
+ }
46
+ function styleSprite(rows) {
47
+ const h = rows.length;
48
+ const STEPS = 6;
49
+ return rows.map((row, y) => {
50
+ const raw = y / Math.max(1, h - 1);
51
+ const t = Math.floor(raw * STEPS) / STEPS;
52
+ const colorFn = lerpColor(t);
53
+ let out = '';
54
+ for (const ch of row) {
55
+ out += ch === ' ' ? ch : colorFn(ch);
56
+ }
57
+ return out;
58
+ });
59
+ }
60
+ function leftLines() {
61
+ return [
62
+ ' '.repeat(LC),
63
+ ...styleSprite(SPRITE).map((row) => center(row, LC)),
64
+ ' '.repeat(LC),
65
+ ];
66
+ }
67
+ function commandLine(cmd, desc) {
68
+ const cmdPadded = cmd + ' '.repeat(Math.max(0, 20 - cmd.length));
69
+ return ' ' + G1(cmdPadded) + DM(desc);
70
+ }
71
+ function buildRightLines(user, loggedIn, version) {
72
+ const commands = [
73
+ commandLine('search <query>', 'Search components'),
74
+ commandLine('add <name>', 'Add to project'),
75
+ commandLine('integrate <name>', 'AI integration'),
76
+ commandLine('list-projects', 'Your projects'),
77
+ commandLine('setup-skills', 'Set up AI agents'),
78
+ ];
79
+ const footer = [
80
+ ' '.repeat(RC),
81
+ pad(' ' + DM(`v${version} ─ magicpath-ai --help`), RC),
82
+ ];
83
+ if (loggedIn && user) {
84
+ const planLabel = user.plan ? ` · ${user.plan}` : '';
85
+ return [
86
+ ' '.repeat(RC),
87
+ pad(' ' + G1('●') + ' ' + WH.bold(user.name ?? 'MagicPath User'), RC),
88
+ pad(' ' + G2((user.email ?? '') + planLabel), RC),
89
+ ' '.repeat(RC),
90
+ ...commands.map((line) => pad(line, RC)),
91
+ ...footer,
92
+ ];
93
+ }
94
+ return [
95
+ ' '.repeat(RC),
96
+ pad(' ' + DM('○ Not logged in'), RC),
97
+ pad(' ' + DM('magicpath-ai login'), RC),
98
+ ' '.repeat(RC),
99
+ ...commands.map((line) => pad(line, RC)),
100
+ ...footer,
101
+ ];
102
+ }
103
+ function printBanner(right) {
104
+ const left = leftLines();
105
+ const height = Math.max(left.length, right.length);
106
+ console.log(G3('╭' + '─'.repeat(INNER) + '╮'));
107
+ for (let i = 0; i < height; i++) {
108
+ const l = pad(left[i] ?? ' '.repeat(LC), LC);
109
+ const r = pad(right[i] ?? ' '.repeat(RC), RC);
110
+ console.log(G3('│') + l + G3('│') + r + G3('│'));
111
+ }
112
+ console.log(G3('╰' + '─'.repeat(LC) + '┴' + '─'.repeat(RC) + '╯'));
113
+ }
114
+ export function showBanner(version) {
115
+ const loggedIn = !!loadTokens();
116
+ const user = loggedIn ? loadUserInfo() : null;
117
+ printBanner(buildRightLines(user, loggedIn, version));
118
+ }
119
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/util/banner.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.3.0-beta.13",
3
+ "version": "1.3.0-beta.15",
4
4
  "description": "Node CLI for MagicPath",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -58,6 +58,7 @@
58
58
  "dependencies": {
59
59
  "adm-zip": "^0.5.16",
60
60
  "axios": "^1.9.0",
61
+ "chalk": "^5.6.2",
61
62
  "commander": "^14.0.0",
62
63
  "diff": "^8.0.3",
63
64
  "fs-extra": "^11.3.0",
@@ -1,2 +0,0 @@
1
- import type { Command } from 'commander';
2
- export declare function registerInitCommand(program: Command): void;
@@ -1,113 +0,0 @@
1
- import path from 'path';
2
- import fs from 'fs-extra';
3
- import { fileURLToPath } from 'url';
4
- import { isJsonMode, jsonResult } from '../util/output.js';
5
- import { GREEN_CHECK } from '../util/ui.js';
6
- // ── Resolve skills directory (single source of truth) ────────────────
7
- function getSkillsDir() {
8
- const thisFile = fileURLToPath(import.meta.url);
9
- // src/commands/init.ts -> package root is ../../
10
- return path.resolve(path.dirname(thisFile), '..', '..', 'skills');
11
- }
12
- function readSkillFile(filename) {
13
- const filePath = path.join(getSkillsDir(), filename);
14
- return fs.readFileSync(filePath, 'utf8');
15
- }
16
- // ── Editor-specific metadata (not part of skill content) ─────────────
17
- const DESCRIPTION = 'MagicPath is an external platform where the user builds and stores UI components. Use this when the user mentions "magicpath", wants to find/browse/search their MagicPath components, add a MagicPath component, preview a MagicPath component, or integrate one into their project. MagicPath components are NOT in the local git repo — they live on the MagicPath platform and must be fetched via the CLI.';
18
- // ── Editor-specific content builders ─────────────────────────────────
19
- function buildClaudeSkill() {
20
- const guide = readSkillFile('guide.md');
21
- return `---
22
- name: magicpath
23
- description: ${DESCRIPTION} Also triggers for magicpath-ai CLI usage.
24
- user-invocable: true
25
- allowed-tools: Bash(magicpath-ai *)
26
- ---
27
-
28
- ${guide}
29
-
30
- ## Current Project Context
31
-
32
- \`\`\`json
33
- !\`magicpath-ai info --json 2>/dev/null || echo '{"error": "magicpath-ai not found. Run: npx magicpath-ai info --json"}'\`
34
- \`\`\`
35
-
36
- The JSON above contains auth status, projects, and CLI version. If auth.authenticated is false, the user needs to log in before any other operations.
37
-
38
- ## Detailed References
39
-
40
- - [cli.md](./cli.md) — Full CLI command reference with all flags
41
- `;
42
- }
43
- function buildCursorRule() {
44
- const guide = readSkillFile('guide.md');
45
- const cliReference = readSkillFile('cli-reference.md');
46
- // Use single quotes to avoid escaping double quotes in YAML
47
- const yamlDesc = DESCRIPTION.replace(/'/g, "''");
48
- return `---
49
- description: '${yamlDesc}'
50
- alwaysApply: false
51
- ---
52
-
53
- ${guide}
54
-
55
- ## CLI Reference
56
-
57
- ${cliReference}
58
- `;
59
- }
60
- function buildCopilotInstructions() {
61
- const guide = readSkillFile('guide.md');
62
- const cliReference = readSkillFile('cli-reference.md');
63
- return `---
64
- applyTo: "**"
65
- ---
66
-
67
- ${guide}
68
-
69
- ## CLI Reference
70
-
71
- ${cliReference}
72
- `;
73
- }
74
- function getFileTargets() {
75
- const cliReference = readSkillFile('cli-reference.md');
76
- return [
77
- // Claude Code
78
- { path: '.claude/skills/magicpath/SKILL.md', content: buildClaudeSkill() },
79
- { path: '.claude/skills/magicpath/cli.md', content: cliReference + '\n' },
80
- // Cursor
81
- { path: '.cursor/rules/magicpath.mdc', content: buildCursorRule() },
82
- // GitHub Copilot
83
- {
84
- path: '.github/instructions/magicpath.instructions.md',
85
- content: buildCopilotInstructions(),
86
- },
87
- ];
88
- }
89
- // ── Command ───────────────────────────────────────────────────────────
90
- export function registerInitCommand(program) {
91
- program
92
- .command('init')
93
- .description('Set up MagicPath for AI agents (Claude Code, Cursor, GitHub Copilot)')
94
- .action(async () => {
95
- const cwd = process.cwd();
96
- const json = isJsonMode();
97
- const created = [];
98
- // Write all editor rule files
99
- for (const target of getFileTargets()) {
100
- const absPath = path.join(cwd, target.path);
101
- fs.ensureDirSync(path.dirname(absPath));
102
- fs.writeFileSync(absPath, target.content, 'utf8');
103
- created.push(target.path);
104
- if (!json)
105
- console.log(`${GREEN_CHECK} Created ${target.path}`);
106
- }
107
- if (json) {
108
- jsonResult({ created }); // exits process
109
- }
110
- console.log('\nMagicPath is ready for AI agents (Claude Code, Cursor, GitHub Copilot).');
111
- });
112
- }
113
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}