@just-every/design 0.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/config.js ADDED
@@ -0,0 +1,42 @@
1
+ import { mkdir, readFile, rename, rm, writeFile, chmod } from 'node:fs/promises';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ export function resolveConfigPath() {
5
+ const explicit = process.env.DESIGN_MCP_CONFIG_PATH?.trim();
6
+ if (explicit)
7
+ return explicit;
8
+ const home = os.homedir();
9
+ const xdg = process.env.XDG_CONFIG_HOME?.trim();
10
+ const base = xdg ? xdg : path.join(home, '.config');
11
+ return path.join(base, 'just-every', 'every-design', 'mcp.json');
12
+ }
13
+ export async function readConfig(configPath = resolveConfigPath()) {
14
+ try {
15
+ const raw = await readFile(configPath, 'utf8');
16
+ const parsed = JSON.parse(raw);
17
+ if (!parsed || typeof parsed !== 'object')
18
+ return null;
19
+ const cfg = parsed;
20
+ if (cfg.version !== 1)
21
+ return null;
22
+ if (typeof cfg.loginOrigin !== 'string' || typeof cfg.designOrigin !== 'string')
23
+ return null;
24
+ return cfg;
25
+ }
26
+ catch {
27
+ return null;
28
+ }
29
+ }
30
+ export async function writeConfig(next, configPath = resolveConfigPath()) {
31
+ const dir = path.dirname(configPath);
32
+ await mkdir(dir, { recursive: true });
33
+ const tmpPath = `${configPath}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;
34
+ const payload = `${JSON.stringify(next, null, 2)}\n`;
35
+ await writeFile(tmpPath, payload, 'utf8');
36
+ await chmod(tmpPath, 0o600).catch(() => undefined);
37
+ await rename(tmpPath, configPath);
38
+ }
39
+ export async function clearConfig(configPath = resolveConfigPath()) {
40
+ await rm(configPath, { force: true });
41
+ }
42
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAY7B,MAAM,UAAU,iBAAiB;IAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,EAAE,CAAC;IAC5D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,UAAU,GAAG,iBAAiB,EAAE;IAC/D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACvD,MAAM,GAAG,GAAG,MAAkC,CAAC;QAC/C,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC7F,OAAO,GAAsB,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAqB,EAAE,UAAU,GAAG,iBAAiB,EAAE;IACvF,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,OAAO,GAAG,GAAG,UAAU,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IACrD,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAU,GAAG,iBAAiB,EAAE;IAChE,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,10 @@
1
+ export declare class CookieJar {
2
+ private readonly values;
3
+ constructor(initial?: Record<string, string | undefined>);
4
+ get(name: string): string | undefined;
5
+ set(name: string, value: string): void;
6
+ toHeader(): string;
7
+ applySetCookie(setCookie: string): void;
8
+ }
9
+ export declare function getSetCookieHeaders(headers: Headers): string[];
10
+ //# sourceMappingURL=cookies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../src/cookies.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6B;gBAExC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IASxD,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIrC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAItC,QAAQ,IAAI,MAAM;IASlB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAUxC;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAQ9D"}
@@ -0,0 +1,49 @@
1
+ export class CookieJar {
2
+ values = new Map();
3
+ constructor(initial) {
4
+ if (initial) {
5
+ for (const [key, value] of Object.entries(initial)) {
6
+ if (!value)
7
+ continue;
8
+ this.values.set(key, value);
9
+ }
10
+ }
11
+ }
12
+ get(name) {
13
+ return this.values.get(name);
14
+ }
15
+ set(name, value) {
16
+ this.values.set(name, value);
17
+ }
18
+ toHeader() {
19
+ const parts = [];
20
+ for (const [key, value] of this.values.entries()) {
21
+ if (!value)
22
+ continue;
23
+ parts.push(`${key}=${value}`);
24
+ }
25
+ return parts.join('; ');
26
+ }
27
+ applySetCookie(setCookie) {
28
+ const first = setCookie.split(';', 1)[0];
29
+ if (!first)
30
+ return;
31
+ const idx = first.indexOf('=');
32
+ if (idx <= 0)
33
+ return;
34
+ const name = first.slice(0, idx).trim();
35
+ const value = first.slice(idx + 1).trim();
36
+ if (!name)
37
+ return;
38
+ this.values.set(name, value);
39
+ }
40
+ }
41
+ export function getSetCookieHeaders(headers) {
42
+ const anyHeaders = headers;
43
+ if (typeof anyHeaders.getSetCookie === 'function') {
44
+ return anyHeaders.getSetCookie();
45
+ }
46
+ const single = headers.get('set-cookie');
47
+ return single ? [single] : [];
48
+ }
49
+ //# sourceMappingURL=cookies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cookies.js","sourceRoot":"","sources":["../src/cookies.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IACH,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD,YAAY,OAA4C;QACtD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,KAAa;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,QAAQ;QACN,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,GAAG,IAAI,CAAC;YAAE,OAAO;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,UAAU,GAAG,OAAuD,CAAC;IAC3E,IAAI,OAAO,UAAU,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QAClD,OAAO,UAAU,CAAC,YAAY,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,113 @@
1
+ export type DesignClientOptions = {
2
+ designOrigin: string;
3
+ sessionToken: string;
4
+ activeAccountSlug?: string;
5
+ timeoutMs?: number;
6
+ };
7
+ export type AccountSummary = {
8
+ id: string;
9
+ slug: string;
10
+ name: string;
11
+ [key: string]: unknown;
12
+ };
13
+ export type AccountsResponse = {
14
+ accounts: AccountSummary[];
15
+ currentAccountId: string | null;
16
+ };
17
+ export type DesignRun = {
18
+ id: string;
19
+ status: string;
20
+ prompt: string | null;
21
+ createdAt: string;
22
+ updatedAt: string;
23
+ progress?: number;
24
+ [key: string]: unknown;
25
+ };
26
+ export type CreateRunResponse = {
27
+ run: DesignRun;
28
+ };
29
+ export type ListRunsResponse = {
30
+ runs: DesignRun[];
31
+ pagination?: unknown;
32
+ };
33
+ export type RunDetailResponse = {
34
+ run: DesignRun;
35
+ };
36
+ export type RunEventsResponse = {
37
+ events: unknown[];
38
+ };
39
+ export type DesignRunArtifact = {
40
+ id: string;
41
+ artifactType: string;
42
+ storageKey: string;
43
+ contentType: string | null;
44
+ sizeBytes: number | null;
45
+ metadata: string | null;
46
+ createdAt: string;
47
+ };
48
+ export type ArtifactsResponse = {
49
+ artifacts: DesignRunArtifact[];
50
+ };
51
+ export type MeResponse = {
52
+ authenticated: boolean;
53
+ session?: {
54
+ email_address?: string | null;
55
+ session_id?: string | null;
56
+ session_token?: string | null;
57
+ expires_at?: string | null;
58
+ };
59
+ };
60
+ export type DownloadedArtifact = {
61
+ filePath: string;
62
+ contentType: string | null;
63
+ sizeBytes: number;
64
+ };
65
+ export type SourceImageInput = {
66
+ type: 'path';
67
+ path: string;
68
+ filename?: string;
69
+ } | {
70
+ type: 'url';
71
+ url: string;
72
+ filename?: string;
73
+ } | {
74
+ type: 'base64';
75
+ data: string;
76
+ mime?: string;
77
+ filename?: string;
78
+ };
79
+ export declare class DesignAppClient {
80
+ private readonly origin;
81
+ private readonly timeoutMs;
82
+ private readonly cookies;
83
+ constructor(options: DesignClientOptions);
84
+ get sessionToken(): string;
85
+ get activeAccountSlug(): string | undefined;
86
+ listAccounts(): Promise<AccountsResponse>;
87
+ uploadSourceImages(inputs: SourceImageInput[]): Promise<Array<Record<string, unknown>>>;
88
+ getMe(): Promise<MeResponse>;
89
+ switchAccount(slug: string): Promise<{
90
+ currentAccountId: string;
91
+ currentAccountSlug: string;
92
+ }>;
93
+ createRun(params: {
94
+ prompt: string;
95
+ config?: Record<string, unknown>;
96
+ }): Promise<CreateRunResponse>;
97
+ listRuns(params?: {
98
+ page?: number;
99
+ limit?: number;
100
+ }): Promise<ListRunsResponse>;
101
+ getRun(runId: string): Promise<RunDetailResponse>;
102
+ getRunEvents(runId: string): Promise<RunEventsResponse>;
103
+ listArtifacts(runId: string): Promise<ArtifactsResponse>;
104
+ downloadArtifactToCache(runId: string, artifactId: string, options?: {
105
+ fileNameHint?: string;
106
+ }): Promise<DownloadedArtifact>;
107
+ requestJson<T>(pathOrUrl: string, options?: {
108
+ method?: string;
109
+ json?: unknown;
110
+ }): Promise<T>;
111
+ private captureSetCookies;
112
+ }
113
+ //# sourceMappingURL=design-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-client.d.ts","sourceRoot":"","sources":["../src/design-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,248 @@
1
+ import path from 'node:path';
2
+ import os from 'node:os';
3
+ import { mkdir, writeFile } from 'node:fs/promises';
4
+ import { CookieJar, getSetCookieHeaders } from './cookies.js';
5
+ import { httpRequest, readErrorBodyText } from './http.js';
6
+ const ACTIVE_ACCOUNT_COOKIE = 'je.active_account';
7
+ const SESSION_COOKIE = 'better-auth.session_token';
8
+ export class DesignAppClient {
9
+ origin;
10
+ timeoutMs;
11
+ cookies;
12
+ constructor(options) {
13
+ this.origin = stripTrailingSlash(options.designOrigin);
14
+ this.timeoutMs = options.timeoutMs ?? 30000;
15
+ this.cookies = new CookieJar({
16
+ [SESSION_COOKIE]: options.sessionToken,
17
+ ...(options.activeAccountSlug ? { [ACTIVE_ACCOUNT_COOKIE]: encodeURIComponent(options.activeAccountSlug) } : {}),
18
+ });
19
+ }
20
+ get sessionToken() {
21
+ return this.cookies.get(SESSION_COOKIE) ?? '';
22
+ }
23
+ get activeAccountSlug() {
24
+ const raw = this.cookies.get(ACTIVE_ACCOUNT_COOKIE);
25
+ if (!raw)
26
+ return undefined;
27
+ try {
28
+ return decodeURIComponent(raw);
29
+ }
30
+ catch {
31
+ return raw;
32
+ }
33
+ }
34
+ async listAccounts() {
35
+ const res = await this.requestJson('/api/accounts', { method: 'GET' });
36
+ return res;
37
+ }
38
+ async uploadSourceImages(inputs) {
39
+ if (!Array.isArray(inputs) || inputs.length === 0) {
40
+ return [];
41
+ }
42
+ const form = new FormData();
43
+ for (const entry of inputs) {
44
+ if (!entry || typeof entry !== 'object')
45
+ continue;
46
+ const file = await toFormFile(entry);
47
+ if (!file)
48
+ continue;
49
+ form.append('file', file.blob, file.filename);
50
+ }
51
+ const url = `${this.origin}/api/design/source-assets`;
52
+ const response = await httpRequest(url, {
53
+ method: 'POST',
54
+ headers: {
55
+ cookie: this.cookies.toHeader(),
56
+ },
57
+ body: form,
58
+ timeoutMs: this.timeoutMs,
59
+ });
60
+ this.captureSetCookies(response.headers);
61
+ if (!response.ok) {
62
+ throw new Error(`Source image upload failed (${response.status}): ${await readErrorBodyText(response)}`);
63
+ }
64
+ const payload = (await response.json());
65
+ const refs = [];
66
+ for (const asset of payload.assets ?? []) {
67
+ if (asset && typeof asset === 'object' && asset.reference && typeof asset.reference === 'object') {
68
+ refs.push(asset.reference);
69
+ }
70
+ }
71
+ return refs;
72
+ }
73
+ async getMe() {
74
+ return this.requestJson('/api/me', { method: 'GET' });
75
+ }
76
+ async switchAccount(slug) {
77
+ const payload = await this.requestJson(`/api/accounts/${encodeURIComponent(slug)}/switch`, { method: 'POST' });
78
+ return { currentAccountId: payload.currentAccountId, currentAccountSlug: payload.currentAccountSlug };
79
+ }
80
+ async createRun(params) {
81
+ return this.requestJson('/api/design/runs', {
82
+ method: 'POST',
83
+ json: {
84
+ prompt: params.prompt,
85
+ ...(params.config ? { config: params.config } : {}),
86
+ },
87
+ });
88
+ }
89
+ async listRuns(params = {}) {
90
+ const search = new URLSearchParams();
91
+ if (typeof params.page === 'number')
92
+ search.set('page', String(params.page));
93
+ if (typeof params.limit === 'number')
94
+ search.set('limit', String(params.limit));
95
+ const suffix = search.toString();
96
+ return this.requestJson(`/api/design/runs${suffix ? `?${suffix}` : ''}`, { method: 'GET' });
97
+ }
98
+ async getRun(runId) {
99
+ return this.requestJson(`/api/design/runs/${encodeURIComponent(runId)}`, { method: 'GET' });
100
+ }
101
+ async getRunEvents(runId) {
102
+ return this.requestJson(`/api/design/runs/${encodeURIComponent(runId)}/events`, { method: 'GET' });
103
+ }
104
+ async listArtifacts(runId) {
105
+ return this.requestJson(`/api/design/runs/${encodeURIComponent(runId)}/artifacts`, { method: 'GET' });
106
+ }
107
+ async downloadArtifactToCache(runId, artifactId, options = {}) {
108
+ const url = `${this.origin}/api/design/runs/${encodeURIComponent(runId)}/artifacts/${encodeURIComponent(artifactId)}`;
109
+ const response = await httpRequest(url, {
110
+ method: 'GET',
111
+ headers: {
112
+ cookie: this.cookies.toHeader(),
113
+ },
114
+ timeoutMs: this.timeoutMs,
115
+ });
116
+ this.captureSetCookies(response.headers);
117
+ if (!response.ok) {
118
+ throw new Error(`Artifact download failed (${response.status}): ${await readErrorBodyText(response)}`);
119
+ }
120
+ const contentType = response.headers.get('content-type');
121
+ const bytes = new Uint8Array(await response.arrayBuffer());
122
+ const cachePath = await writeToCache(runId, artifactId, bytes, options.fileNameHint);
123
+ return { filePath: cachePath, contentType, sizeBytes: bytes.byteLength };
124
+ }
125
+ async requestJson(pathOrUrl, options = {}) {
126
+ const url = pathOrUrl.startsWith('http://') || pathOrUrl.startsWith('https://')
127
+ ? pathOrUrl
128
+ : `${this.origin}${pathOrUrl.startsWith('/') ? '' : '/'}${pathOrUrl}`;
129
+ const response = await httpRequest(url, {
130
+ method: options.method,
131
+ headers: {
132
+ cookie: this.cookies.toHeader(),
133
+ },
134
+ json: options.json,
135
+ timeoutMs: this.timeoutMs,
136
+ });
137
+ this.captureSetCookies(response.headers);
138
+ if (!response.ok) {
139
+ throw new Error(`Request failed (${response.status}): ${await readErrorBodyText(response)}`);
140
+ }
141
+ return (await response.json());
142
+ }
143
+ captureSetCookies(headers) {
144
+ for (const cookie of getSetCookieHeaders(headers)) {
145
+ this.cookies.applySetCookie(cookie);
146
+ }
147
+ }
148
+ }
149
+ async function toFormFile(input) {
150
+ if (input.type === 'path') {
151
+ const filePath = String(input.path ?? '').trim();
152
+ if (!filePath)
153
+ return null;
154
+ const { readFile } = await import('node:fs/promises');
155
+ const bytes = await readFile(filePath);
156
+ const filename = sanitizeFilename(input.filename || path.basename(filePath) || 'image.png');
157
+ const mime = guessMimeFromFilename(filename);
158
+ return { blob: new Blob([bytes], { type: mime }), filename };
159
+ }
160
+ if (input.type === 'url') {
161
+ const url = String(input.url ?? '').trim();
162
+ if (!url)
163
+ return null;
164
+ const response = await fetch(url);
165
+ if (!response.ok) {
166
+ throw new Error(`Failed to fetch source image URL (${response.status}): ${url}`);
167
+ }
168
+ const bytes = new Uint8Array(await response.arrayBuffer());
169
+ const contentType = response.headers.get('content-type') || undefined;
170
+ const fallbackName = filenameFromUrl(url) ?? 'image.png';
171
+ const filename = sanitizeFilename(input.filename || fallbackName);
172
+ const mime = contentType && contentType.startsWith('image/') ? contentType : guessMimeFromFilename(filename);
173
+ return { blob: new Blob([bytes], { type: mime }), filename };
174
+ }
175
+ if (input.type === 'base64') {
176
+ const raw = String(input.data ?? '').trim();
177
+ if (!raw)
178
+ return null;
179
+ const parsed = parseBase64Payload(raw);
180
+ const bytes = parsed.bytes;
181
+ const mime = (typeof input.mime === 'string' && input.mime.startsWith('image/') ? input.mime : undefined)
182
+ ?? parsed.mime
183
+ ?? 'image/png';
184
+ const filename = sanitizeFilename(input.filename || `image.${mime.includes('jpeg') ? 'jpg' : 'png'}`);
185
+ return { blob: new Blob([bytes], { type: mime }), filename };
186
+ }
187
+ return null;
188
+ }
189
+ function filenameFromUrl(value) {
190
+ try {
191
+ const url = new URL(value);
192
+ const last = url.pathname.split('/').filter(Boolean).pop();
193
+ return last ? last : null;
194
+ }
195
+ catch {
196
+ return null;
197
+ }
198
+ }
199
+ function parseBase64Payload(raw) {
200
+ const match = raw.match(/^data:([^;]+);base64,(.*)$/i);
201
+ const mime = match ? match[1] : undefined;
202
+ const data = match ? match[2] : raw;
203
+ const normalized = data.replace(/\s+/g, '');
204
+ const buf = Buffer.from(normalized, 'base64');
205
+ return { bytes: new Uint8Array(buf), mime };
206
+ }
207
+ function guessMimeFromFilename(filename) {
208
+ const ext = filename.split('.').pop()?.toLowerCase();
209
+ if (ext === 'jpg' || ext === 'jpeg')
210
+ return 'image/jpeg';
211
+ if (ext === 'png')
212
+ return 'image/png';
213
+ if (ext === 'webp')
214
+ return 'image/webp';
215
+ return 'application/octet-stream';
216
+ }
217
+ function sanitizeFilename(value) {
218
+ const trimmed = value.trim();
219
+ const base = trimmed || 'asset';
220
+ return base.replace(/[^a-zA-Z0-9._-]/g, '_').slice(0, 120);
221
+ }
222
+ async function writeToCache(runId, artifactId, bytes, fileNameHint) {
223
+ const base = resolveCacheDir();
224
+ const safeRunId = sanitizePathComponent(runId);
225
+ const safeArtifactId = sanitizePathComponent(artifactId);
226
+ const dir = path.join(base, safeRunId);
227
+ await mkdir(dir, { recursive: true });
228
+ const safeNameHint = fileNameHint ? sanitizePathComponent(fileNameHint) : '';
229
+ const fileName = safeNameHint ? `${safeArtifactId}-${safeNameHint}` : safeArtifactId;
230
+ const filePath = path.join(dir, fileName);
231
+ await writeFile(filePath, bytes);
232
+ return filePath;
233
+ }
234
+ function resolveCacheDir() {
235
+ const explicit = process.env.DESIGN_MCP_CACHE_DIR?.trim();
236
+ if (explicit)
237
+ return explicit;
238
+ const xdg = process.env.XDG_CACHE_HOME?.trim();
239
+ const base = xdg ? xdg : path.join(os.homedir(), '.cache');
240
+ return path.join(base, 'justevery', 'design-app', 'mcp');
241
+ }
242
+ function sanitizePathComponent(input) {
243
+ return input.replace(/[^a-zA-Z0-9._-]/g, '_').slice(0, 200);
244
+ }
245
+ function stripTrailingSlash(value) {
246
+ return value.replace(/\/+$/, '');
247
+ }
248
+ //# sourceMappingURL=design-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-client.js","sourceRoot":"","sources":["../src/design-client.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAkF3D,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AAClD,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD,MAAM,OAAO,eAAe;IACT,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,OAAO,CAAY;IAEpC,YAAY,OAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAE5C,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC;YAC3B,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,YAAY;YACtC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjH,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAChD,CAAC;IAED,IAAI,iBAAiB;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAmB,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACzF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,MAA0B;QACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,SAAS;YAClD,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,KAAyB,CAAC,CAAC;YACzD,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,2BAA2B,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;aAChC;YACD,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,MAAM,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAgE,CAAC;QACvG,MAAM,IAAI,GAAmC,EAAE,CAAC;QAChD,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,SAAS,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;gBACjG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,OAAO,IAAI,CAAC,WAAW,CAAa,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CACpC,iBAAiB,kBAAkB,CAAC,IAAI,CAAC,SAAS,EAClD,EAAE,MAAM,EAAE,MAAM,EAAE,CACnB,CAAC;QACF,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;IACxG,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAA4D;QAC1E,OAAO,IAAI,CAAC,WAAW,CAAoB,kBAAkB,EAAE;YAC7D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD;SACF,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,SAA4C,EAAE;QAC3D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7E,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAChF,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,CAAmB,mBAAmB,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAChH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,WAAW,CAAoB,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACjH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAa;QAC9B,OAAO,IAAI,CAAC,WAAW,CAAoB,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACxH,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,OAAO,IAAI,CAAC,WAAW,CAAoB,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3H,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,KAAa,EACb,UAAkB,EAClB,UAAqC,EAAE;QAEvC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,oBAAoB,kBAAkB,CAAC,KAAK,CAAC,cAAc,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;QACtH,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;YACtC,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;aAChC;YACD,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,MAAM,MAAM,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;QACrF,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,WAAW,CAAI,SAAiB,EAAE,UAA+C,EAAE;QACvF,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC;YAC7E,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,EAAE,CAAC;QAExE,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;YACtC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE;gBACP,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;aAChC;YACD,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,CAAC,MAAM,MAAM,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;IAEO,iBAAiB,CAAC,OAAgB;QACxC,KAAK,MAAM,MAAM,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;CACF;AAED,KAAK,UAAU,UAAU,CAAC,KAAuB;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC;QAC5F,MAAM,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC7C,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,MAAM,CAAE,KAAa,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,qCAAqC,QAAQ,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;QACtE,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC;QACzD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,WAAW,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;QAC7G,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/D,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAE,KAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,IAAI,GACR,CAAC,OAAQ,KAAa,CAAC,IAAI,KAAK,QAAQ,IAAK,KAAa,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAE,KAAa,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;eACpH,MAAM,CAAC,IAAI;eACX,WAAW,CAAC;QACjB,MAAM,QAAQ,GAAG,gBAAgB,CAAE,KAAa,CAAC,QAAQ,IAAI,SAAS,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/G,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC/D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;IACrD,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IACzD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,WAAW,CAAC;IACtC,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,YAAY,CAAC;IACxC,OAAO,0BAA0B,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,KAAa,EACb,UAAkB,EAClB,KAAiB,EACjB,YAAqB;IAErB,MAAM,IAAI,GAAG,eAAe,EAAE,CAAC;IAC/B,MAAM,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACvC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;IACrF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,14 @@
1
+ export type HttpRequestOptions = {
2
+ method?: string;
3
+ headers?: Record<string, string | undefined>;
4
+ json?: unknown;
5
+ body?: any;
6
+ timeoutMs?: number;
7
+ };
8
+ export type HttpError = {
9
+ status: number;
10
+ bodyText: string;
11
+ };
12
+ export declare function httpRequest(url: string, options?: HttpRequestOptions): Promise<Response>;
13
+ export declare function readErrorBodyText(response: Response): Promise<string>;
14
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgClG;AAED,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAO3E"}
package/dist/http.js ADDED
@@ -0,0 +1,43 @@
1
+ export async function httpRequest(url, options = {}) {
2
+ const controller = new AbortController();
3
+ const timeoutMs = options.timeoutMs ?? 30000;
4
+ const timeout = setTimeout(() => controller.abort(), timeoutMs);
5
+ timeout.unref?.();
6
+ try {
7
+ const headers = new Headers();
8
+ for (const [key, value] of Object.entries(options.headers ?? {})) {
9
+ if (value === undefined)
10
+ continue;
11
+ headers.set(key, value);
12
+ }
13
+ let body = options.body;
14
+ if (options.json !== undefined) {
15
+ if (!headers.has('content-type')) {
16
+ headers.set('content-type', 'application/json');
17
+ }
18
+ body = JSON.stringify(options.json);
19
+ }
20
+ if (!headers.has('accept')) {
21
+ headers.set('accept', 'application/json');
22
+ }
23
+ return await fetch(url, {
24
+ method: options.method ?? (body ? 'POST' : 'GET'),
25
+ headers,
26
+ body: body,
27
+ signal: controller.signal,
28
+ });
29
+ }
30
+ finally {
31
+ clearTimeout(timeout);
32
+ }
33
+ }
34
+ export async function readErrorBodyText(response) {
35
+ try {
36
+ const text = await response.text();
37
+ return text.slice(0, 2000);
38
+ }
39
+ catch {
40
+ return '';
41
+ }
42
+ }
43
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,UAA8B,EAAE;IAC7E,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAChE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;IAElB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;QAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,CAAC;YACjE,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,IAAI,IAAI,GAAQ,OAAO,CAAC,IAAI,CAAC;QAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;YAClD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;YACjD,OAAO;YACP,IAAI,EAAE,IAAW;YACjB,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,QAAkB;IACxD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { startMcpServer } from './server.js';
2
+ export { readConfig, writeConfig, resolveConfigPath, type DesignMcpConfig } from './config.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { startMcpServer } from './server.js';
2
+ export { readConfig, writeConfig, resolveConfigPath } from './config.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAwB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type InstallClient = 'code' | 'codex' | 'claude-desktop' | 'claude-code' | 'cursor' | 'gemini' | 'qwen';
2
+ export type InstallOptions = {
3
+ clients: InstallClient[];
4
+ serverName: string;
5
+ packageName: string;
6
+ installSkills: boolean;
7
+ dryRun: boolean;
8
+ force: boolean;
9
+ homeDir?: string;
10
+ };
11
+ export type InstallResult = {
12
+ changed: string[];
13
+ skipped: string[];
14
+ notes: string[];
15
+ };
16
+ export declare function detectDefaultClients(homeDir?: string): InstallClient[];
17
+ export declare function runInstall(options: InstallOptions): Promise<InstallResult>;
18
+ export declare function renderSkillMarkdown(): string;
19
+ export declare function upsertTomlTable(existing: string, header: string, block: string): string;
20
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,OAAO,GACP,gBAAgB,GAChB,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,SAAe,GAAG,aAAa,EAAE,CAwB5E;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA0IhF;AA0FD,wBAAgB,mBAAmB,IAAI,MAAM,CAoC5C;AA8GD,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAiCvF"}