@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.
@@ -0,0 +1,437 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { spawnSync } from 'node:child_process';
3
+ import { access, chmod, copyFile, mkdir, readFile, rename, writeFile } from 'node:fs/promises';
4
+ import os from 'node:os';
5
+ import path from 'node:path';
6
+ export function detectDefaultClients(homeDir = os.homedir()) {
7
+ const candidates = [];
8
+ const cursorConfig = path.join(homeDir, '.cursor', 'mcp.json');
9
+ const geminiConfig = path.join(homeDir, '.gemini', 'settings.json');
10
+ const qwenConfig = path.join(homeDir, '.qwen', 'settings.json');
11
+ // This function is sync signature; do lightweight guesses based on common dirs.
12
+ // If they aren't present, install can still be forced via --client.
13
+ if (existsSync(path.join(homeDir, '.code')))
14
+ candidates.push('code');
15
+ if (existsSync(path.join(homeDir, '.codex')))
16
+ candidates.push('codex');
17
+ if (existsSync(path.dirname(cursorConfig)))
18
+ candidates.push('cursor');
19
+ if (existsSync(path.dirname(geminiConfig)))
20
+ candidates.push('gemini');
21
+ if (existsSync(path.dirname(qwenConfig)))
22
+ candidates.push('qwen');
23
+ // Claude Desktop is macOS-specific path; add only if the app config dir exists.
24
+ if (process.platform === 'darwin') {
25
+ const claudeDir = path.join(homeDir, 'Library', 'Application Support', 'Claude');
26
+ if (existsSync(claudeDir))
27
+ candidates.push('claude-desktop');
28
+ }
29
+ // Claude Code is an executable, not a file-based config we can reliably write.
30
+ // We'll always support it if explicitly requested; don't auto-add.
31
+ return Array.from(new Set(candidates));
32
+ }
33
+ export async function runInstall(options) {
34
+ const homeDir = options.homeDir ?? os.homedir();
35
+ const changed = [];
36
+ const skipped = [];
37
+ const notes = [];
38
+ const command = 'npx';
39
+ const args = ['-y', options.packageName];
40
+ for (const client of options.clients) {
41
+ if (client === 'claude-desktop') {
42
+ const filePath = resolveClaudeDesktopConfigPath(homeDir);
43
+ const result = await upsertJsonMcpServer({
44
+ filePath,
45
+ serverName: options.serverName,
46
+ command,
47
+ args,
48
+ dryRun: options.dryRun,
49
+ force: options.force,
50
+ });
51
+ record(result, { changed, skipped, notes });
52
+ continue;
53
+ }
54
+ if (client === 'cursor') {
55
+ const filePath = path.join(homeDir, '.cursor', 'mcp.json');
56
+ const result = await upsertJsonMcpServer({
57
+ filePath,
58
+ serverName: options.serverName,
59
+ command,
60
+ args,
61
+ dryRun: options.dryRun,
62
+ force: options.force,
63
+ });
64
+ record(result, { changed, skipped, notes });
65
+ continue;
66
+ }
67
+ if (client === 'gemini') {
68
+ const filePath = path.join(homeDir, '.gemini', 'settings.json');
69
+ const result = await upsertJsonMcpServer({
70
+ filePath,
71
+ serverName: options.serverName,
72
+ command,
73
+ args,
74
+ dryRun: options.dryRun,
75
+ force: options.force,
76
+ });
77
+ record(result, { changed, skipped, notes });
78
+ continue;
79
+ }
80
+ if (client === 'qwen') {
81
+ const filePath = path.join(homeDir, '.qwen', 'settings.json');
82
+ const result = await upsertJsonMcpServer({
83
+ filePath,
84
+ serverName: options.serverName,
85
+ command,
86
+ args,
87
+ dryRun: options.dryRun,
88
+ force: options.force,
89
+ });
90
+ record(result, { changed, skipped, notes });
91
+ continue;
92
+ }
93
+ if (client === 'code') {
94
+ const filePath = path.join(homeDir, '.code', 'config.toml');
95
+ const existingToml = await readTextFile(filePath);
96
+ const tableKey = detectTomlMcpTableKey(existingToml, 'mcp-servers');
97
+ const result = await upsertTomlMcpServer({
98
+ filePath,
99
+ tableKey,
100
+ serverName: options.serverName,
101
+ command,
102
+ args,
103
+ dryRun: options.dryRun,
104
+ force: options.force,
105
+ });
106
+ record(result, { changed, skipped, notes });
107
+ if (options.installSkills) {
108
+ const skillDir = path.join(homeDir, '.code', 'skills', 'every-design');
109
+ const skillPath = path.join(skillDir, 'SKILL.md');
110
+ const skillResult = await writeSkillFile({
111
+ filePath: skillPath,
112
+ contents: renderSkillMarkdown(),
113
+ dryRun: options.dryRun,
114
+ force: options.force,
115
+ });
116
+ record(skillResult, { changed, skipped, notes });
117
+ }
118
+ continue;
119
+ }
120
+ if (client === 'codex') {
121
+ const filePath = path.join(homeDir, '.codex', 'config.toml');
122
+ const existingToml = await readTextFile(filePath);
123
+ const tableKey = detectTomlMcpTableKey(existingToml, 'mcp_servers');
124
+ const result = await upsertTomlMcpServer({
125
+ filePath,
126
+ tableKey,
127
+ serverName: options.serverName,
128
+ command,
129
+ args,
130
+ dryRun: options.dryRun,
131
+ force: options.force,
132
+ });
133
+ record(result, { changed, skipped, notes });
134
+ if (options.installSkills) {
135
+ const skillDir = path.join(homeDir, '.codex', 'skills', 'every-design');
136
+ const skillPath = path.join(skillDir, 'SKILL.md');
137
+ const skillResult = await writeSkillFile({
138
+ filePath: skillPath,
139
+ contents: renderSkillMarkdown(),
140
+ dryRun: options.dryRun,
141
+ force: options.force,
142
+ });
143
+ record(skillResult, { changed, skipped, notes });
144
+ }
145
+ continue;
146
+ }
147
+ if (client === 'claude-code') {
148
+ const result = await installViaCliMcpAdd({
149
+ cli: 'claude',
150
+ serverName: options.serverName,
151
+ command,
152
+ args,
153
+ dryRun: options.dryRun,
154
+ });
155
+ record(result, { changed, skipped, notes });
156
+ continue;
157
+ }
158
+ }
159
+ return { changed, skipped, notes };
160
+ }
161
+ function resolveClaudeDesktopConfigPath(homeDir) {
162
+ // macOS default
163
+ if (process.platform === 'darwin') {
164
+ return path.join(homeDir, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
165
+ }
166
+ // Fallback: keep it near other app configs.
167
+ return path.join(homeDir, '.config', 'Claude', 'claude_desktop_config.json');
168
+ }
169
+ async function installViaCliMcpAdd(input) {
170
+ if (input.dryRun) {
171
+ return {
172
+ changed: false,
173
+ skipped: true,
174
+ path: `${input.cli} (mcp add)`,
175
+ note: `[dry-run] Would run: ${input.cli} mcp add ${input.serverName} -- ${input.command} ${input.args.join(' ')}`,
176
+ };
177
+ }
178
+ const supportsMcp = spawnSync(input.cli, ['mcp', '--help'], { encoding: 'utf8' });
179
+ if (supportsMcp.error && supportsMcp.error.code === 'ENOENT') {
180
+ return {
181
+ changed: false,
182
+ skipped: true,
183
+ path: `${input.cli} (mcp add)`,
184
+ note: `Skipped ${input.cli}: command not found.`,
185
+ };
186
+ }
187
+ if (supportsMcp.status !== 0) {
188
+ const tail = (supportsMcp.stderr || supportsMcp.stdout || '').trim();
189
+ return {
190
+ changed: false,
191
+ skipped: true,
192
+ path: `${input.cli} (mcp add)`,
193
+ note: `Skipped ${input.cli}: does not appear to support MCP (${tail || 'mcp --help failed'}).`,
194
+ };
195
+ }
196
+ const result = spawnSync(input.cli, ['mcp', 'add', input.serverName, '--', input.command, ...input.args], { encoding: 'utf8' });
197
+ if (result.status !== 0) {
198
+ const tail = (result.stderr || result.stdout || '').trim();
199
+ return {
200
+ changed: false,
201
+ skipped: true,
202
+ path: `${input.cli} (mcp add)`,
203
+ note: `Failed to run \
204
+ ${input.cli} mcp add\
205
+ : ${tail || `exit code ${result.status}`}`,
206
+ };
207
+ }
208
+ return {
209
+ changed: true,
210
+ path: `${input.cli} (mcp add)`,
211
+ note: `Configured ${input.cli} MCP server: ${input.serverName}`,
212
+ };
213
+ }
214
+ function record(result, acc) {
215
+ if (result.note)
216
+ acc.notes.push(result.note);
217
+ if (result.changed)
218
+ acc.changed.push(result.path);
219
+ else if (result.skipped)
220
+ acc.skipped.push(result.path);
221
+ }
222
+ export function renderSkillMarkdown() {
223
+ return `---
224
+ name: every-design
225
+ description: Use the Every Design MCP server (@just-every/design) to create, inspect, and download artifacts from design runs.
226
+ ---
227
+
228
+ # Every Design (MCP)
229
+
230
+ This skill assumes you've installed the MCP server entry (via:
231
+
232
+ ~~~bash
233
+ npx @just-every/design install
234
+ ~~~
235
+
236
+ or by adding the server manually in your client's MCP config).
237
+
238
+ ## Authentication
239
+
240
+ Login once:
241
+
242
+ ~~~bash
243
+ npx @just-every/design auth login
244
+ ~~~
245
+
246
+ ## What you can do
247
+
248
+ - Create a run: call design.create
249
+ - Poll until done: call design.wait
250
+ - Inspect details: call design.get and design.events
251
+ - Download outputs: call design.artifacts.list then design.artifacts.download
252
+
253
+ ## Tips
254
+
255
+ - Prefer design.create + design.wait for most flows.
256
+ - If you're iterating, keep the runId and reuse it as context when debugging.
257
+ `;
258
+ }
259
+ async function upsertJsonMcpServer(args) {
260
+ const existing = await readJsonFileDetailed(args.filePath);
261
+ if (existing.status === 'invalid') {
262
+ return {
263
+ changed: false,
264
+ skipped: true,
265
+ path: args.filePath,
266
+ note: `Skipped ${args.filePath}: file exists but is not valid JSON.`,
267
+ };
268
+ }
269
+ const next = existing.status === 'ok' ? existing.value : {};
270
+ if (!next || typeof next !== 'object' || Array.isArray(next)) {
271
+ return {
272
+ changed: false,
273
+ skipped: true,
274
+ path: args.filePath,
275
+ note: `Skipped ${args.filePath}: existing JSON is not an object.`,
276
+ };
277
+ }
278
+ const root = next;
279
+ const mcpServersRaw = root.mcpServers;
280
+ const mcpServers = mcpServersRaw && typeof mcpServersRaw === 'object' && !Array.isArray(mcpServersRaw)
281
+ ? mcpServersRaw
282
+ : {};
283
+ const already = mcpServers[args.serverName];
284
+ if (already && !args.force) {
285
+ return {
286
+ changed: false,
287
+ skipped: true,
288
+ path: args.filePath,
289
+ note: `Skipped ${args.filePath}: mcpServers.${args.serverName} already exists (use --force to overwrite).`,
290
+ };
291
+ }
292
+ mcpServers[args.serverName] = {
293
+ command: args.command,
294
+ args: args.args,
295
+ };
296
+ root.mcpServers = mcpServers;
297
+ const payload = `${JSON.stringify(root, null, 2)}\n`;
298
+ if (args.dryRun) {
299
+ return { changed: false, skipped: true, path: args.filePath, note: `[dry-run] Would write ${args.filePath}` };
300
+ }
301
+ await backupIfExists(args.filePath);
302
+ await writeFileAtomic(args.filePath, payload);
303
+ return { changed: true, path: args.filePath };
304
+ }
305
+ async function upsertTomlMcpServer(args) {
306
+ const existing = await readTextFile(args.filePath);
307
+ const header = `[${args.tableKey}.${args.serverName}]`;
308
+ const block = renderTomlMcpBlock({ header, command: args.command, args: args.args });
309
+ if (existing && existing.includes(header) && !args.force) {
310
+ return {
311
+ changed: false,
312
+ skipped: true,
313
+ path: args.filePath,
314
+ note: `Skipped ${args.filePath}: ${header} already exists (use --force to overwrite).`,
315
+ };
316
+ }
317
+ const next = upsertTomlTable(existing ?? '', header, block);
318
+ if (args.dryRun) {
319
+ return { changed: false, skipped: true, path: args.filePath, note: `[dry-run] Would write ${args.filePath}` };
320
+ }
321
+ await backupIfExists(args.filePath);
322
+ await writeFileAtomic(args.filePath, next);
323
+ return { changed: true, path: args.filePath };
324
+ }
325
+ function detectTomlMcpTableKey(existing, fallback) {
326
+ if (!existing)
327
+ return fallback;
328
+ if (existing.includes('[mcp_servers.'))
329
+ return 'mcp_servers';
330
+ if (existing.includes('[mcp-servers.'))
331
+ return 'mcp-servers';
332
+ return fallback;
333
+ }
334
+ export function upsertTomlTable(existing, header, block) {
335
+ const normalized = existing.replace(/\r\n/g, '\n');
336
+ const lines = normalized.split('\n');
337
+ const headerLine = header.trim();
338
+ let start = -1;
339
+ for (let i = 0; i < lines.length; i += 1) {
340
+ if (lines[i]?.trim() === headerLine) {
341
+ start = i;
342
+ break;
343
+ }
344
+ }
345
+ if (start !== -1) {
346
+ // Replace the existing table block.
347
+ let end = lines.length;
348
+ for (let i = start + 1; i < lines.length; i += 1) {
349
+ const t = lines[i]?.trim();
350
+ if (t?.startsWith('[') && t.endsWith(']')) {
351
+ end = i;
352
+ break;
353
+ }
354
+ }
355
+ const before = lines.slice(0, start).join('\n').replace(/\n*$/, '');
356
+ const after = lines.slice(end).join('\n').replace(/^\n*/, '');
357
+ const joined = [before, block.trimEnd(), after].filter((p) => p.length > 0).join('\n\n');
358
+ return `${joined.replace(/\n*$/, '')}\n`;
359
+ }
360
+ // Append.
361
+ const trimmed = normalized.replace(/\n*$/, '');
362
+ const sep = trimmed.length === 0 ? '' : '\n\n';
363
+ return `${trimmed}${sep}${block.trimEnd()}\n`;
364
+ }
365
+ function renderTomlMcpBlock(input) {
366
+ const argsToml = `[${input.args.map((a) => JSON.stringify(a)).join(', ')}]`;
367
+ return `${input.header}\ncommand = ${JSON.stringify(input.command)}\nargs = ${argsToml}\n`;
368
+ }
369
+ async function readJsonFileDetailed(filePath) {
370
+ try {
371
+ const raw = await readFile(filePath, 'utf8');
372
+ try {
373
+ const parsed = JSON.parse(raw);
374
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
375
+ return { status: 'invalid' };
376
+ }
377
+ return { status: 'ok', value: parsed };
378
+ }
379
+ catch {
380
+ return { status: 'invalid' };
381
+ }
382
+ }
383
+ catch {
384
+ return { status: 'missing' };
385
+ }
386
+ }
387
+ async function readTextFile(filePath) {
388
+ try {
389
+ return await readFile(filePath, 'utf8');
390
+ }
391
+ catch {
392
+ return null;
393
+ }
394
+ }
395
+ async function backupIfExists(filePath) {
396
+ try {
397
+ await access(filePath);
398
+ }
399
+ catch {
400
+ return;
401
+ }
402
+ const ts = new Date().toISOString().replace(/[:.]/g, '-');
403
+ const backupPath = `${filePath}.bak-${ts}`;
404
+ await mkdir(path.dirname(filePath), { recursive: true });
405
+ await copyFile(filePath, backupPath);
406
+ }
407
+ async function writeFileAtomic(filePath, contents) {
408
+ const dir = path.dirname(filePath);
409
+ await mkdir(dir, { recursive: true });
410
+ const tmpPath = `${filePath}.tmp-${process.pid}-${Math.random().toString(16).slice(2)}`;
411
+ await writeFile(tmpPath, contents, 'utf8');
412
+ await chmod(tmpPath, 0o600).catch(() => undefined);
413
+ await rename(tmpPath, filePath);
414
+ }
415
+ async function writeSkillFile(args) {
416
+ if (!args.force) {
417
+ try {
418
+ await access(args.filePath);
419
+ return {
420
+ changed: false,
421
+ skipped: true,
422
+ path: args.filePath,
423
+ note: `Skipped ${args.filePath}: already exists (use --force to overwrite).`,
424
+ };
425
+ }
426
+ catch {
427
+ // continue
428
+ }
429
+ }
430
+ if (args.dryRun) {
431
+ return { changed: false, skipped: true, path: args.filePath, note: `[dry-run] Would write ${args.filePath}` };
432
+ }
433
+ await backupIfExists(args.filePath);
434
+ await writeFileAtomic(args.filePath, `${args.contents.trimEnd()}\n`);
435
+ return { changed: true, path: args.filePath };
436
+ }
437
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { DesignMcpConfig } from './config.js';
2
+ export type McpServerOptions = {
3
+ config: DesignMcpConfig;
4
+ };
5
+ export declare function startMcpServer(options: McpServerOptions): Promise<void>;
6
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,iBA+U7D"}