@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/README.md +84 -0
- package/dist/account-picker.d.ts +9 -0
- package/dist/account-picker.d.ts.map +1 -0
- package/dist/account-picker.js +50 -0
- package/dist/account-picker.js.map +1 -0
- package/dist/auth.d.ts +19 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +104 -0
- package/dist/auth.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +295 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -0
- package/dist/cookies.d.ts +10 -0
- package/dist/cookies.d.ts.map +1 -0
- package/dist/cookies.js +49 -0
- package/dist/cookies.js.map +1 -0
- package/dist/design-client.d.ts +113 -0
- package/dist/design-client.d.ts.map +1 -0
- package/dist/design-client.js +248 -0
- package/dist/design-client.js.map +1 -0
- package/dist/http.d.ts +14 -0
- package/dist/http.d.ts.map +1 -0
- package/dist/http.js +43 -0
- package/dist/http.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +20 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +437 -0
- package/dist/install.js.map +1 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +368 -0
- package/dist/server.js.map +1 -0
- package/package.json +43 -0
package/README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# @just-every/design
|
|
2
|
+
|
|
3
|
+
MCP (Model Context Protocol) stdio server that proxies the **Design App API** (default: `https://design.justevery.com`) so MCP clients can create and inspect design runs.
|
|
4
|
+
|
|
5
|
+
## Quick start
|
|
6
|
+
|
|
7
|
+
1) Login once (interactive approval-link flow):
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx @just-every/design auth login
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
If your user belongs to multiple companies, this will prompt you to pick one.
|
|
14
|
+
To skip the prompt, pass `--account <slug>`.
|
|
15
|
+
|
|
16
|
+
2) Run as an MCP server (stdio):
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx @just-every/design
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Install into common MCP clients
|
|
23
|
+
|
|
24
|
+
This writes MCP server config entries for detected clients (Claude Desktop, Cursor, Gemini CLI, Qwen Code, Codex, and Every Code), and installs a small local playbook “skill” for Codex/Every Code.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
npx @just-every/design install
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
To force-install into all supported clients:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npx @just-every/design install --client all --yes
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Claude Desktop config example
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"mcpServers": {
|
|
41
|
+
"every-design": {
|
|
42
|
+
"command": "npx",
|
|
43
|
+
"args": ["-y", "@just-every/design"]
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Authentication (recommended)
|
|
50
|
+
|
|
51
|
+
This package uses the JustEvery **login approval-link** flow:
|
|
52
|
+
|
|
53
|
+
- It creates an approval request via `POST /api/auth/m2m/approval-requests`.
|
|
54
|
+
- You click a single approval URL in your browser.
|
|
55
|
+
- The CLI polls, receives a short-lived bearer token, then exchanges it for a Better Auth session token via `POST /api/auth/m2m/session`.
|
|
56
|
+
- The session token is stored locally and used as `better-auth.session_token` for API calls.
|
|
57
|
+
|
|
58
|
+
This avoids needing long-lived client secrets and is the lowest-friction path for humans.
|
|
59
|
+
|
|
60
|
+
## Configuration
|
|
61
|
+
|
|
62
|
+
### Config file
|
|
63
|
+
|
|
64
|
+
- Default path: `~/.config/just-every/every-design/mcp.json`
|
|
65
|
+
- Override: `DESIGN_MCP_CONFIG_PATH=/path/to/mcp.json`
|
|
66
|
+
|
|
67
|
+
### Environment variables
|
|
68
|
+
|
|
69
|
+
- `DESIGN_MCP_ORIGIN` (default: `https://design.justevery.com`)
|
|
70
|
+
- `LOGIN_ORIGIN` (default: `https://login.justevery.com`)
|
|
71
|
+
- `DESIGN_MCP_SESSION_TOKEN` (bypass config)
|
|
72
|
+
- `DESIGN_MCP_ACCOUNT_SLUG` (optional; otherwise chosen from `/api/accounts`)
|
|
73
|
+
|
|
74
|
+
## MCP tools
|
|
75
|
+
|
|
76
|
+
Current tools are focused on runs + artifacts:
|
|
77
|
+
|
|
78
|
+
- `design.create`
|
|
79
|
+
- `design.list`
|
|
80
|
+
- `design.get`
|
|
81
|
+
- `design.wait`
|
|
82
|
+
- `design.events`
|
|
83
|
+
- `design.artifacts.list`
|
|
84
|
+
- `design.artifacts.download` (downloads and caches locally)
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AccountsResponse } from './design-client.js';
|
|
2
|
+
export type PickAccountOptions = {
|
|
3
|
+
preferredSlug?: string;
|
|
4
|
+
isInteractive: boolean;
|
|
5
|
+
prompt: (message: string) => Promise<string>;
|
|
6
|
+
log: (message: string) => void;
|
|
7
|
+
};
|
|
8
|
+
export declare function pickAccountSlug(accountsResponse: AccountsResponse, options: PickAccountOptions): Promise<string | undefined>;
|
|
9
|
+
//# sourceMappingURL=account-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-picker.d.ts","sourceRoot":"","sources":["../src/account-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,CAAC;AAEF,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAsD7B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
export async function pickAccountSlug(accountsResponse, options) {
|
|
2
|
+
const accounts = accountsResponse.accounts ?? [];
|
|
3
|
+
if (accounts.length === 0)
|
|
4
|
+
return undefined;
|
|
5
|
+
if (options.preferredSlug) {
|
|
6
|
+
const preferred = options.preferredSlug.trim();
|
|
7
|
+
if (preferred) {
|
|
8
|
+
const match = accounts.find((acct) => acct.slug === preferred);
|
|
9
|
+
if (match)
|
|
10
|
+
return match.slug;
|
|
11
|
+
options.log(`[auth login] Ignoring unknown account slug: ${preferred}`);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const current = accountsResponse.currentAccountId
|
|
15
|
+
? accounts.find((acct) => acct.id === accountsResponse.currentAccountId)
|
|
16
|
+
: undefined;
|
|
17
|
+
const defaultSlug = (current ?? accounts[0])?.slug;
|
|
18
|
+
if (!defaultSlug)
|
|
19
|
+
return undefined;
|
|
20
|
+
if (accounts.length < 2 || !options.isInteractive) {
|
|
21
|
+
return defaultSlug;
|
|
22
|
+
}
|
|
23
|
+
options.log('Select a company for design runs:');
|
|
24
|
+
accounts.forEach((acct, idx) => {
|
|
25
|
+
const marker = acct.slug === defaultSlug ? ' (default)' : '';
|
|
26
|
+
options.log(` ${idx + 1}) ${acct.name} (${acct.slug})${marker}`);
|
|
27
|
+
});
|
|
28
|
+
for (let attempt = 0; attempt < 3; attempt += 1) {
|
|
29
|
+
const answerRaw = await options.prompt(`Choose 1-${accounts.length} (or enter slug) [default ${defaultSlug}]: `);
|
|
30
|
+
const answer = answerRaw.trim();
|
|
31
|
+
if (!answer) {
|
|
32
|
+
return defaultSlug;
|
|
33
|
+
}
|
|
34
|
+
const asNumber = Number(answer);
|
|
35
|
+
if (Number.isFinite(asNumber)) {
|
|
36
|
+
const idx = Math.floor(asNumber) - 1;
|
|
37
|
+
if (idx >= 0 && idx < accounts.length) {
|
|
38
|
+
return accounts[idx]?.slug;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const bySlug = accounts.find((acct) => acct.slug === answer);
|
|
42
|
+
if (bySlug) {
|
|
43
|
+
return bySlug.slug;
|
|
44
|
+
}
|
|
45
|
+
options.log(`Invalid selection: ${answer}`);
|
|
46
|
+
}
|
|
47
|
+
options.log(`Using default: ${defaultSlug}`);
|
|
48
|
+
return defaultSlug;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=account-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-picker.js","sourceRoot":"","sources":["../src/account-picker.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type LoginFlowOptions = {
|
|
2
|
+
loginOrigin: string;
|
|
3
|
+
scopes?: string[];
|
|
4
|
+
ttlSeconds?: number;
|
|
5
|
+
ttlHours?: number;
|
|
6
|
+
ttlDays?: number;
|
|
7
|
+
intervalSeconds?: number;
|
|
8
|
+
timeoutSeconds?: number;
|
|
9
|
+
openBrowser?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type LoginFlowResult = {
|
|
12
|
+
bearerToken: string;
|
|
13
|
+
bearerExpiresAt?: number;
|
|
14
|
+
userId: string;
|
|
15
|
+
sessionToken: string;
|
|
16
|
+
sessionExpiresAt?: string;
|
|
17
|
+
};
|
|
18
|
+
export declare function runApprovalLinkLoginFlow(options: LoginFlowOptions): Promise<LoginFlowResult>;
|
|
19
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAqElG"}
|
package/dist/auth.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { setTimeout as sleep } from 'node:timers/promises';
|
|
2
|
+
import { execFileSync } from 'node:child_process';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import { httpRequest, readErrorBodyText } from './http.js';
|
|
5
|
+
export async function runApprovalLinkLoginFlow(options) {
|
|
6
|
+
const { loginOrigin, scopes = ['auth.impersonate'], ttlSeconds, ttlHours, ttlDays, intervalSeconds = 5, timeoutSeconds = 600, openBrowser = true, } = options;
|
|
7
|
+
const requestPayload = { scopes };
|
|
8
|
+
if (typeof ttlSeconds === 'number')
|
|
9
|
+
requestPayload.ttlSeconds = ttlSeconds;
|
|
10
|
+
if (typeof ttlHours === 'number')
|
|
11
|
+
requestPayload.ttlHours = ttlHours;
|
|
12
|
+
if (typeof ttlDays === 'number')
|
|
13
|
+
requestPayload.ttlDays = ttlDays;
|
|
14
|
+
const approvalRes = await httpRequest(`${stripTrailingSlash(loginOrigin)}/api/auth/m2m/approval-requests`, {
|
|
15
|
+
method: 'POST',
|
|
16
|
+
json: requestPayload,
|
|
17
|
+
timeoutMs: 30000,
|
|
18
|
+
});
|
|
19
|
+
if (!approvalRes.ok) {
|
|
20
|
+
throw new Error(`Login approval request failed (${approvalRes.status}): ${await readErrorBodyText(approvalRes)}`);
|
|
21
|
+
}
|
|
22
|
+
const approval = (await approvalRes.json());
|
|
23
|
+
if (!approval?.approvalUrl || !approval?.pollUrl || !approval?.pollSecret) {
|
|
24
|
+
throw new Error('Login approval request returned an unexpected payload');
|
|
25
|
+
}
|
|
26
|
+
const expiresAtText = typeof approval.expiresAt === 'number' ? new Date(approval.expiresAt).toISOString() : 'unknown';
|
|
27
|
+
console.error('Approve this MCP client in your browser:');
|
|
28
|
+
console.error(approval.approvalUrl);
|
|
29
|
+
console.error(`Approval request expires at: ${expiresAtText}`);
|
|
30
|
+
if (openBrowser) {
|
|
31
|
+
openUrl(approval.approvalUrl);
|
|
32
|
+
}
|
|
33
|
+
const deadline = Date.now() + timeoutSeconds * 1000;
|
|
34
|
+
let lastStatus = '';
|
|
35
|
+
while (Date.now() < deadline) {
|
|
36
|
+
const pollRes = await httpRequest(`${approval.pollUrl}?secret=${encodeURIComponent(approval.pollSecret)}`, {
|
|
37
|
+
method: 'GET',
|
|
38
|
+
timeoutMs: 30000,
|
|
39
|
+
});
|
|
40
|
+
if (pollRes.ok) {
|
|
41
|
+
const poll = (await pollRes.json());
|
|
42
|
+
if (poll?.token && poll.userId) {
|
|
43
|
+
const session = await exchangeBearerForSession(loginOrigin, poll.token, poll.userId);
|
|
44
|
+
return {
|
|
45
|
+
bearerToken: poll.token,
|
|
46
|
+
bearerExpiresAt: poll.expiresAt,
|
|
47
|
+
userId: poll.userId,
|
|
48
|
+
sessionToken: session.sessionToken,
|
|
49
|
+
sessionExpiresAt: session.expiresAt ?? undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const status = String(poll?.status ?? 'pending');
|
|
53
|
+
if (status && status !== lastStatus) {
|
|
54
|
+
console.error(`Approval status: ${status}`);
|
|
55
|
+
lastStatus = status;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
await sleep(intervalSeconds * 1000);
|
|
59
|
+
}
|
|
60
|
+
throw new Error('Timed out waiting for approval');
|
|
61
|
+
}
|
|
62
|
+
async function exchangeBearerForSession(loginOrigin, bearerToken, userId) {
|
|
63
|
+
const sessionRes = await httpRequest(`${stripTrailingSlash(loginOrigin)}/api/auth/m2m/session`, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: {
|
|
66
|
+
Authorization: `Bearer ${bearerToken}`,
|
|
67
|
+
},
|
|
68
|
+
json: {
|
|
69
|
+
userId,
|
|
70
|
+
returnToken: true,
|
|
71
|
+
redirect: '/profile',
|
|
72
|
+
},
|
|
73
|
+
timeoutMs: 30000,
|
|
74
|
+
});
|
|
75
|
+
if (!sessionRes.ok) {
|
|
76
|
+
throw new Error(`Failed to mint session (${sessionRes.status}): ${await readErrorBodyText(sessionRes)}`);
|
|
77
|
+
}
|
|
78
|
+
const payload = (await sessionRes.json());
|
|
79
|
+
if (!payload?.sessionToken) {
|
|
80
|
+
throw new Error('Login session endpoint did not return a sessionToken');
|
|
81
|
+
}
|
|
82
|
+
return { sessionToken: payload.sessionToken, expiresAt: payload.expiresAt };
|
|
83
|
+
}
|
|
84
|
+
function stripTrailingSlash(value) {
|
|
85
|
+
return value.replace(/\/+$/, '');
|
|
86
|
+
}
|
|
87
|
+
function openUrl(url) {
|
|
88
|
+
try {
|
|
89
|
+
const platform = os.platform();
|
|
90
|
+
if (platform === 'darwin') {
|
|
91
|
+
execFileSync('open', [url], { stdio: 'ignore' });
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (platform === 'win32') {
|
|
95
|
+
execFileSync('cmd', ['/c', 'start', '', url], { stdio: 'ignore' });
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
execFileSync('xdg-open', [url], { stdio: 'ignore' });
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Best-effort only.
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AA8C3D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,OAAyB;IACtE,MAAM,EACJ,WAAW,EACX,MAAM,GAAG,CAAC,kBAAkB,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,OAAO,EACP,eAAe,GAAG,CAAC,EACnB,cAAc,GAAG,GAAG,EACpB,WAAW,GAAG,IAAI,GACnB,GAAG,OAAO,CAAC;IAEZ,MAAM,cAAc,GAA4B,EAAE,MAAM,EAAE,CAAC;IAC3D,IAAI,OAAO,UAAU,KAAK,QAAQ;QAAE,cAAc,CAAC,UAAU,GAAG,UAAU,CAAC;IAC3E,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACrE,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC;IAElE,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAC,iCAAiC,EAAE;QACzG,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAW,CAAC,MAAM,MAAM,MAAM,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACpH,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAA4B,CAAC;IACvE,IAAI,CAAC,QAAQ,EAAE,WAAW,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtH,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC1D,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,gCAAgC,aAAa,EAAE,CAAC,CAAC;IAE/D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,IAAI,CAAC;IACpD,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,QAAQ,CAAC,OAAO,WAAW,kBAAkB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE;YACzG,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;SACjB,CAAC,CAAC;QACH,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAyB,CAAC;YAC5D,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrF,OAAO;oBACL,WAAW,EAAE,IAAI,CAAC,KAAK;oBACvB,eAAe,EAAE,IAAI,CAAC,SAAS;oBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,gBAAgB,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;iBACjD,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;YACjD,IAAI,MAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,EAAE,CAAC,CAAC;gBAC5C,UAAU,GAAG,MAAM,CAAC;YACtB,CAAC;QACH,CAAC;QACD,MAAM,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;AACpD,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,WAAmB,EAAE,WAAmB,EAAE,MAAc;IAC9F,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,GAAG,kBAAkB,CAAC,WAAW,CAAC,uBAAuB,EAAE;QAC9F,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,WAAW,EAAE;SACvC;QACD,IAAI,EAAE;YACJ,MAAM;YACN,WAAW,EAAE,IAAI;YACjB,QAAQ,EAAE,UAAU;SACrB;QACD,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IAEH,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,UAAU,CAAC,MAAM,MAAM,MAAM,iBAAiB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAoB,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa;IACvC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,OAAO,CAAC,GAAW;IAC1B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzB,YAAY,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACnE,OAAO;QACT,CAAC;QACD,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;AACH,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entrypoint for @just-every/design
|
|
4
|
+
*/
|
|
5
|
+
import { createInterface } from 'node:readline/promises';
|
|
6
|
+
import { runApprovalLinkLoginFlow } from './auth.js';
|
|
7
|
+
import { pickAccountSlug } from './account-picker.js';
|
|
8
|
+
import { clearConfig, readConfig, resolveConfigPath, writeConfig } from './config.js';
|
|
9
|
+
import { DesignAppClient } from './design-client.js';
|
|
10
|
+
import { detectDefaultClients, runInstall } from './install.js';
|
|
11
|
+
import { startMcpServer } from './server.js';
|
|
12
|
+
function parseArgs(argv) {
|
|
13
|
+
const flags = {};
|
|
14
|
+
const command = [];
|
|
15
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
16
|
+
const token = argv[i];
|
|
17
|
+
if (!token)
|
|
18
|
+
continue;
|
|
19
|
+
if (token.startsWith('--')) {
|
|
20
|
+
const eq = token.indexOf('=');
|
|
21
|
+
const name = (eq === -1 ? token.slice(2) : token.slice(2, eq)).trim();
|
|
22
|
+
if (!name)
|
|
23
|
+
continue;
|
|
24
|
+
if (eq !== -1) {
|
|
25
|
+
flags[name] = token.slice(eq + 1);
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const next = argv[i + 1];
|
|
29
|
+
if (next && !next.startsWith('-')) {
|
|
30
|
+
flags[name] = next;
|
|
31
|
+
i += 1;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
flags[name] = true;
|
|
35
|
+
}
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
command.push(token);
|
|
39
|
+
}
|
|
40
|
+
return { command, flags };
|
|
41
|
+
}
|
|
42
|
+
function printHelp() {
|
|
43
|
+
const configPath = resolveConfigPath();
|
|
44
|
+
console.error('Usage:');
|
|
45
|
+
console.error(' npx @just-every/design [command] [options]');
|
|
46
|
+
console.error(' design [command] [options]');
|
|
47
|
+
console.error('');
|
|
48
|
+
console.error('Commands:');
|
|
49
|
+
console.error(' (default) Start the MCP server (stdio)');
|
|
50
|
+
console.error(' install Install MCP config entries for common clients');
|
|
51
|
+
console.error(' auth login Login via approval-link flow and save config');
|
|
52
|
+
console.error(' auth status Check current auth against /api/me');
|
|
53
|
+
console.error(' auth logout Delete the saved config file');
|
|
54
|
+
console.error('');
|
|
55
|
+
console.error('Options:');
|
|
56
|
+
console.error(' --origin <url> Design app origin (default: DESIGN_MCP_ORIGIN or https://design.justevery.com)');
|
|
57
|
+
console.error(' --login-origin <url> Login origin (default: LOGIN_ORIGIN or https://login.justevery.com)');
|
|
58
|
+
console.error(' --account <slug> Preselect company/account slug (skips interactive prompt)');
|
|
59
|
+
console.error(` --config <path> Config path (default: ${configPath})`);
|
|
60
|
+
console.error(' --no-open Do not open the approval URL in a browser (auth login)');
|
|
61
|
+
console.error(' --client <name[,name...]> Install target(s): code,codex,claude-desktop,claude-code,cursor,gemini,qwen,all,auto');
|
|
62
|
+
console.error(' --name <serverName> MCP server name key (default: every-design)');
|
|
63
|
+
console.error(' --yes Non-interactive install (no prompts)');
|
|
64
|
+
console.error(' --dry-run Print what would change, but do not write');
|
|
65
|
+
console.error(' --force Overwrite existing entries');
|
|
66
|
+
console.error(' --no-skills Do not install Codex/Code skill playbook');
|
|
67
|
+
console.error(' --help, -h Show help');
|
|
68
|
+
}
|
|
69
|
+
function resolveFlagString(flags, name) {
|
|
70
|
+
const value = flags[name];
|
|
71
|
+
if (typeof value === 'string')
|
|
72
|
+
return value;
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
function resolveOrigin(flags) {
|
|
76
|
+
const flag = resolveFlagString(flags, 'origin');
|
|
77
|
+
const env = process.env.DESIGN_MCP_ORIGIN;
|
|
78
|
+
return (flag ?? env ?? 'https://design.justevery.com').trim();
|
|
79
|
+
}
|
|
80
|
+
function resolveLoginOrigin(flags) {
|
|
81
|
+
const flag = resolveFlagString(flags, 'login-origin');
|
|
82
|
+
const env = process.env.LOGIN_ORIGIN;
|
|
83
|
+
return (flag ?? env ?? 'https://login.justevery.com').trim();
|
|
84
|
+
}
|
|
85
|
+
async function main() {
|
|
86
|
+
const argv = process.argv.slice(2);
|
|
87
|
+
const { command, flags } = parseArgs(argv);
|
|
88
|
+
if (flags.help || flags.h || command[0] === 'help') {
|
|
89
|
+
printHelp();
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
const configPath = resolveFlagString(flags, 'config') ?? resolveConfigPath();
|
|
93
|
+
const designOrigin = resolveOrigin(flags);
|
|
94
|
+
const loginOrigin = resolveLoginOrigin(flags);
|
|
95
|
+
const verb = command[0] ?? '';
|
|
96
|
+
const sub = command[1] ?? '';
|
|
97
|
+
if (verb === 'install') {
|
|
98
|
+
const clientList = resolveFlagString(flags, 'client')?.trim() ||
|
|
99
|
+
resolveFlagString(flags, 'clients')?.trim() ||
|
|
100
|
+
'auto';
|
|
101
|
+
const requested = clientList
|
|
102
|
+
.split(',')
|
|
103
|
+
.map((s) => s.trim())
|
|
104
|
+
.filter(Boolean);
|
|
105
|
+
const allClients = [
|
|
106
|
+
'code',
|
|
107
|
+
'codex',
|
|
108
|
+
'claude-desktop',
|
|
109
|
+
'claude-code',
|
|
110
|
+
'cursor',
|
|
111
|
+
'gemini',
|
|
112
|
+
'qwen',
|
|
113
|
+
];
|
|
114
|
+
const selected = (() => {
|
|
115
|
+
if (requested.includes('all'))
|
|
116
|
+
return allClients;
|
|
117
|
+
if (requested.includes('auto'))
|
|
118
|
+
return detectDefaultClients();
|
|
119
|
+
return requested.filter((c) => allClients.includes(c));
|
|
120
|
+
})();
|
|
121
|
+
const serverName = (resolveFlagString(flags, 'name') ?? 'every-design').trim();
|
|
122
|
+
const installSkills = !flags['no-skills'];
|
|
123
|
+
const dryRun = Boolean(flags['dry-run']);
|
|
124
|
+
const force = Boolean(flags.force);
|
|
125
|
+
const yes = Boolean(flags.yes);
|
|
126
|
+
const isInteractive = Boolean(process.stdin.isTTY && process.stderr.isTTY);
|
|
127
|
+
const shouldProceed = yes
|
|
128
|
+
? true
|
|
129
|
+
: await (async () => {
|
|
130
|
+
if (!isInteractive)
|
|
131
|
+
return true;
|
|
132
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
133
|
+
try {
|
|
134
|
+
console.error('This will update MCP client config files in your home directory.');
|
|
135
|
+
console.error(`Clients: ${selected.length ? selected.join(', ') : '(none detected)'}`);
|
|
136
|
+
console.error(`Server name: ${serverName}`);
|
|
137
|
+
const answer = (await rl.question('Proceed? (y/N) ')).trim().toLowerCase();
|
|
138
|
+
return answer === 'y' || answer === 'yes';
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
rl.close();
|
|
142
|
+
}
|
|
143
|
+
})();
|
|
144
|
+
if (!shouldProceed) {
|
|
145
|
+
console.error('Aborted.');
|
|
146
|
+
process.exit(1);
|
|
147
|
+
}
|
|
148
|
+
if (selected.length === 0) {
|
|
149
|
+
console.error('No clients detected. Re-run with `--client all` to force installation.');
|
|
150
|
+
process.exit(1);
|
|
151
|
+
}
|
|
152
|
+
const result = await runInstall({
|
|
153
|
+
clients: selected,
|
|
154
|
+
serverName,
|
|
155
|
+
packageName: '@just-every/design',
|
|
156
|
+
installSkills,
|
|
157
|
+
dryRun,
|
|
158
|
+
force,
|
|
159
|
+
});
|
|
160
|
+
if (result.changed.length) {
|
|
161
|
+
console.error('Updated:');
|
|
162
|
+
for (const p of result.changed)
|
|
163
|
+
console.error(`- ${p}`);
|
|
164
|
+
}
|
|
165
|
+
if (result.skipped.length) {
|
|
166
|
+
console.error('Skipped:');
|
|
167
|
+
for (const p of result.skipped)
|
|
168
|
+
console.error(`- ${p}`);
|
|
169
|
+
}
|
|
170
|
+
if (result.notes.length) {
|
|
171
|
+
console.error('Notes:');
|
|
172
|
+
for (const n of result.notes)
|
|
173
|
+
console.error(`- ${n}`);
|
|
174
|
+
}
|
|
175
|
+
console.error('Next: run `npx @just-every/design auth login` once to authenticate.');
|
|
176
|
+
process.exit(0);
|
|
177
|
+
}
|
|
178
|
+
if (verb === 'auth' && sub === 'login') {
|
|
179
|
+
const openBrowser = !flags['no-open'];
|
|
180
|
+
const result = await runApprovalLinkLoginFlow({
|
|
181
|
+
loginOrigin,
|
|
182
|
+
openBrowser,
|
|
183
|
+
});
|
|
184
|
+
const client = new DesignAppClient({
|
|
185
|
+
designOrigin,
|
|
186
|
+
sessionToken: result.sessionToken,
|
|
187
|
+
});
|
|
188
|
+
let activeAccountSlug;
|
|
189
|
+
try {
|
|
190
|
+
const accounts = await client.listAccounts();
|
|
191
|
+
const preferred = resolveFlagString(flags, 'account')?.trim() ||
|
|
192
|
+
process.env.DESIGN_MCP_ACCOUNT_SLUG?.trim() ||
|
|
193
|
+
undefined;
|
|
194
|
+
const isInteractive = Boolean(process.stdin.isTTY && process.stderr.isTTY);
|
|
195
|
+
const rl = isInteractive
|
|
196
|
+
? createInterface({ input: process.stdin, output: process.stderr })
|
|
197
|
+
: null;
|
|
198
|
+
const selected = await pickAccountSlug(accounts, {
|
|
199
|
+
preferredSlug: preferred,
|
|
200
|
+
isInteractive,
|
|
201
|
+
prompt: async (message) => {
|
|
202
|
+
if (!rl)
|
|
203
|
+
return '';
|
|
204
|
+
return rl.question(message);
|
|
205
|
+
},
|
|
206
|
+
log: (message) => console.error(message),
|
|
207
|
+
});
|
|
208
|
+
if (rl) {
|
|
209
|
+
rl.close();
|
|
210
|
+
}
|
|
211
|
+
if (selected) {
|
|
212
|
+
// If /api/accounts already set a default active cookie, switch only when needed.
|
|
213
|
+
if (client.activeAccountSlug && client.activeAccountSlug !== selected) {
|
|
214
|
+
await client.switchAccount(selected);
|
|
215
|
+
}
|
|
216
|
+
activeAccountSlug = selected;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
activeAccountSlug = client.activeAccountSlug;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
224
|
+
console.error(`[auth login] Warning: failed to resolve active account: ${message}`);
|
|
225
|
+
}
|
|
226
|
+
const nextConfig = {
|
|
227
|
+
version: 1,
|
|
228
|
+
loginOrigin,
|
|
229
|
+
designOrigin,
|
|
230
|
+
sessionToken: client.sessionToken || result.sessionToken,
|
|
231
|
+
sessionExpiresAt: result.sessionExpiresAt,
|
|
232
|
+
userId: result.userId,
|
|
233
|
+
activeAccountSlug,
|
|
234
|
+
};
|
|
235
|
+
await writeConfig(nextConfig, configPath);
|
|
236
|
+
console.error(`Saved config to ${configPath}`);
|
|
237
|
+
if (activeAccountSlug) {
|
|
238
|
+
console.error(`Active account: ${activeAccountSlug}`);
|
|
239
|
+
}
|
|
240
|
+
process.exit(0);
|
|
241
|
+
}
|
|
242
|
+
if (verb === 'auth' && sub === 'logout') {
|
|
243
|
+
await clearConfig(configPath);
|
|
244
|
+
console.error(`Deleted ${configPath}`);
|
|
245
|
+
process.exit(0);
|
|
246
|
+
}
|
|
247
|
+
if (verb === 'auth' && sub === 'status') {
|
|
248
|
+
const cfg = await loadMergedConfig(configPath, { designOrigin, loginOrigin });
|
|
249
|
+
const sessionToken = cfg.sessionToken ?? process.env.DESIGN_MCP_SESSION_TOKEN ?? '';
|
|
250
|
+
if (!sessionToken) {
|
|
251
|
+
console.error('Not authenticated. Run `npx @just-every/design auth login`.');
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
const client = new DesignAppClient({
|
|
255
|
+
designOrigin: cfg.designOrigin,
|
|
256
|
+
sessionToken,
|
|
257
|
+
activeAccountSlug: cfg.activeAccountSlug,
|
|
258
|
+
});
|
|
259
|
+
const me = await client.getMe();
|
|
260
|
+
console.log(JSON.stringify(me, null, 2));
|
|
261
|
+
process.exit(0);
|
|
262
|
+
}
|
|
263
|
+
// Default: run MCP server.
|
|
264
|
+
const cfg = await loadMergedConfig(configPath, { designOrigin, loginOrigin });
|
|
265
|
+
const sessionToken = process.env.DESIGN_MCP_SESSION_TOKEN?.trim();
|
|
266
|
+
if (sessionToken) {
|
|
267
|
+
cfg.sessionToken = sessionToken;
|
|
268
|
+
}
|
|
269
|
+
const accountSlug = process.env.DESIGN_MCP_ACCOUNT_SLUG?.trim();
|
|
270
|
+
if (accountSlug) {
|
|
271
|
+
cfg.activeAccountSlug = accountSlug;
|
|
272
|
+
}
|
|
273
|
+
try {
|
|
274
|
+
await startMcpServer({ config: cfg });
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
278
|
+
console.error(message);
|
|
279
|
+
process.exit(1);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
async function loadMergedConfig(configPath, defaults) {
|
|
283
|
+
const existing = await readConfig(configPath);
|
|
284
|
+
return {
|
|
285
|
+
version: 1,
|
|
286
|
+
loginOrigin: existing?.loginOrigin ?? defaults.loginOrigin,
|
|
287
|
+
designOrigin: existing?.designOrigin ?? defaults.designOrigin,
|
|
288
|
+
sessionToken: existing?.sessionToken,
|
|
289
|
+
sessionExpiresAt: existing?.sessionExpiresAt,
|
|
290
|
+
userId: existing?.userId,
|
|
291
|
+
activeAccountSlug: existing?.activeAccountSlug,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
main();
|
|
295
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type DesignMcpConfig = {
|
|
2
|
+
version: 1;
|
|
3
|
+
loginOrigin: string;
|
|
4
|
+
designOrigin: string;
|
|
5
|
+
sessionToken?: string;
|
|
6
|
+
sessionExpiresAt?: string;
|
|
7
|
+
userId?: string;
|
|
8
|
+
activeAccountSlug?: string;
|
|
9
|
+
};
|
|
10
|
+
export declare function resolveConfigPath(): string;
|
|
11
|
+
export declare function readConfig(configPath?: string): Promise<DesignMcpConfig | null>;
|
|
12
|
+
export declare function writeConfig(next: DesignMcpConfig, configPath?: string): Promise<void>;
|
|
13
|
+
export declare function clearConfig(configPath?: string): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG;IAC5B,OAAO,EAAE,CAAC,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,wBAAgB,iBAAiB,IAAI,MAAM,CAQ1C;AAED,wBAAsB,UAAU,CAAC,UAAU,SAAsB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAYlG;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,UAAU,SAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CASxG;AAED,wBAAsB,WAAW,CAAC,UAAU,SAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF"}
|