@just-every/design 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +60 -6
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +50 -22
- package/dist/auth.js.map +1 -1
- package/dist/cli.js +835 -109
- package/dist/cli.js.map +1 -1
- package/dist/design-client.d.ts.map +1 -1
- package/dist/design-client.js +10 -0
- package/dist/design-client.js.map +1 -1
- package/dist/install.d.ts +20 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +558 -49
- package/dist/install.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +13 -83
- package/dist/server.js.map +1 -1
- package/dist/tool-logic.d.ts +12 -0
- package/dist/tool-logic.d.ts.map +1 -0
- package/dist/tool-logic.js +108 -0
- package/dist/tool-logic.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,27 @@ MCP (Model Context Protocol) stdio server that proxies the **Design App API** (d
|
|
|
4
4
|
|
|
5
5
|
## Quick start
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
The recommended path is to run the guided installer once. It will:
|
|
8
|
+
|
|
9
|
+
- Authenticate you (if needed)
|
|
10
|
+
- Install a local `every-design` launcher (no `npx` required after)
|
|
11
|
+
- Configure detected MCP clients (and install Skills where supported)
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx @just-every/design install
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
After install, you can use `every-design` directly.
|
|
18
|
+
|
|
19
|
+
### Authenticate
|
|
20
|
+
|
|
21
|
+
Login once (interactive approval-link flow):
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
every-design auth login
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If you do not have `every-design` on PATH yet, you can always run:
|
|
8
28
|
|
|
9
29
|
```bash
|
|
10
30
|
npx @just-every/design auth login
|
|
@@ -13,7 +33,13 @@ npx @just-every/design auth login
|
|
|
13
33
|
If your user belongs to multiple companies, this will prompt you to pick one.
|
|
14
34
|
To skip the prompt, pass `--account <slug>`.
|
|
15
35
|
|
|
16
|
-
|
|
36
|
+
### Run as an MCP server (stdio)
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
every-design
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Fallback (no local install):
|
|
17
43
|
|
|
18
44
|
```bash
|
|
19
45
|
npx @just-every/design
|
|
@@ -21,31 +47,46 @@ npx @just-every/design
|
|
|
21
47
|
|
|
22
48
|
## Install into common MCP clients
|
|
23
49
|
|
|
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”
|
|
50
|
+
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” where supported.
|
|
25
51
|
|
|
26
52
|
```bash
|
|
27
53
|
npx @just-every/design install
|
|
28
54
|
```
|
|
29
55
|
|
|
56
|
+
By default, install will prefer a local launcher and attempt to ensure `~/.local/bin` is on your `PATH`.
|
|
57
|
+
To skip modifying shell config files:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npx @just-every/design install --no-path
|
|
61
|
+
```
|
|
62
|
+
|
|
30
63
|
To force-install into all supported clients:
|
|
31
64
|
|
|
32
65
|
```bash
|
|
33
66
|
npx @just-every/design install --client all --yes
|
|
34
67
|
```
|
|
35
68
|
|
|
69
|
+
To remove the MCP server + playbook skill from detected clients:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
npx @just-every/design remove
|
|
73
|
+
```
|
|
74
|
+
|
|
36
75
|
### Claude Desktop config example
|
|
37
76
|
|
|
38
77
|
```json
|
|
39
78
|
{
|
|
40
79
|
"mcpServers": {
|
|
41
80
|
"every-design": {
|
|
42
|
-
"command": "
|
|
43
|
-
"args": [
|
|
81
|
+
"command": "/absolute/path/to/every-design",
|
|
82
|
+
"args": []
|
|
44
83
|
}
|
|
45
84
|
}
|
|
46
85
|
}
|
|
47
86
|
```
|
|
48
87
|
|
|
88
|
+
Tip: GUI apps may not inherit your shell `PATH`, so an absolute path is recommended.
|
|
89
|
+
|
|
49
90
|
## Authentication (recommended)
|
|
50
91
|
|
|
51
92
|
This package uses the JustEvery **login approval-link** flow:
|
|
@@ -61,7 +102,7 @@ This avoids needing long-lived client secrets and is the lowest-friction path fo
|
|
|
61
102
|
|
|
62
103
|
### Config file
|
|
63
104
|
|
|
64
|
-
- Default path: `~/.config/just-every/every-design/mcp.json`
|
|
105
|
+
- Default path: `$XDG_CONFIG_HOME/just-every/every-design/mcp.json` (or `~/.config/just-every/every-design/mcp.json`)
|
|
65
106
|
- Override: `DESIGN_MCP_CONFIG_PATH=/path/to/mcp.json`
|
|
66
107
|
|
|
67
108
|
### Environment variables
|
|
@@ -82,3 +123,16 @@ Current tools are focused on runs + artifacts:
|
|
|
82
123
|
- `design.events`
|
|
83
124
|
- `design.artifacts.list`
|
|
84
125
|
- `design.artifacts.download` (downloads and caches locally)
|
|
126
|
+
|
|
127
|
+
CLI helper commands (non-MCP):
|
|
128
|
+
|
|
129
|
+
- `every-design screenshot <url>`
|
|
130
|
+
- `every-design critique --json '{...}'`
|
|
131
|
+
|
|
132
|
+
## Output kinds (CLI/MCP)
|
|
133
|
+
|
|
134
|
+
When using this package via MCP/CLI:
|
|
135
|
+
|
|
136
|
+
- HTML output is **opt-in**: set `output.designKind` to `html`.
|
|
137
|
+
- For web/app UI prompts with no explicit `output`, the CLI/MCP path defaults to `output.designKind: "interface"` to avoid expensive code builds while still producing a UI design.
|
|
138
|
+
- If you explicitly set `output.designKind` to `auto`, the backend will infer the best kind from the prompt (this may select `html`).
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +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,
|
|
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,CA0FlG"}
|
package/dist/auth.js
CHANGED
|
@@ -24,36 +24,56 @@ export async function runApprovalLinkLoginFlow(options) {
|
|
|
24
24
|
throw new Error('Login approval request returned an unexpected payload');
|
|
25
25
|
}
|
|
26
26
|
const expiresAtText = typeof approval.expiresAt === 'number' ? new Date(approval.expiresAt).toISOString() : 'unknown';
|
|
27
|
-
console.error('
|
|
28
|
-
console.error(
|
|
29
|
-
console.error(
|
|
27
|
+
console.error('Every Design authentication');
|
|
28
|
+
console.error('');
|
|
29
|
+
console.error('1) Approve this login request in your browser:');
|
|
30
|
+
console.error(` ${approval.approvalUrl}`);
|
|
31
|
+
console.error(` Expires at: ${expiresAtText}`);
|
|
32
|
+
console.error('');
|
|
33
|
+
console.error('2) Return here and this CLI will finish setup automatically.');
|
|
30
34
|
if (openBrowser) {
|
|
31
|
-
openUrl(approval.approvalUrl);
|
|
35
|
+
const opened = openUrl(approval.approvalUrl);
|
|
36
|
+
if (opened) {
|
|
37
|
+
console.error('Opened your browser to the approval link.');
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.error('Could not auto-open a browser window. Open the link manually.');
|
|
41
|
+
}
|
|
32
42
|
}
|
|
33
43
|
const deadline = Date.now() + timeoutSeconds * 1000;
|
|
34
44
|
let lastStatus = '';
|
|
45
|
+
const startedAt = Date.now();
|
|
35
46
|
while (Date.now() < deadline) {
|
|
36
47
|
const pollRes = await httpRequest(`${approval.pollUrl}?secret=${encodeURIComponent(approval.pollSecret)}`, {
|
|
37
48
|
method: 'GET',
|
|
38
49
|
timeoutMs: 30000,
|
|
39
50
|
});
|
|
40
|
-
if (pollRes.ok) {
|
|
41
|
-
|
|
42
|
-
if (
|
|
43
|
-
|
|
44
|
-
|
|
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;
|
|
51
|
+
if (!pollRes.ok) {
|
|
52
|
+
// Transient errors happen; keep polling until timeout.
|
|
53
|
+
if (!lastStatus) {
|
|
54
|
+
console.error(`Waiting for approval… (poll error ${pollRes.status})`);
|
|
55
|
+
lastStatus = 'pending';
|
|
56
56
|
}
|
|
57
|
+
await sleep(intervalSeconds * 1000);
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const poll = (await pollRes.json());
|
|
61
|
+
if (poll?.token && poll.userId) {
|
|
62
|
+
console.error('Approval received. Minting session…');
|
|
63
|
+
const session = await exchangeBearerForSession(loginOrigin, poll.token, poll.userId);
|
|
64
|
+
console.error('Login complete.');
|
|
65
|
+
return {
|
|
66
|
+
bearerToken: poll.token,
|
|
67
|
+
bearerExpiresAt: poll.expiresAt,
|
|
68
|
+
userId: poll.userId,
|
|
69
|
+
sessionToken: session.sessionToken,
|
|
70
|
+
sessionExpiresAt: session.expiresAt ?? undefined,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
const status = String(poll?.status ?? 'pending');
|
|
74
|
+
if (status && status !== lastStatus) {
|
|
75
|
+
console.error(`Waiting for approval… (status: ${status}, elapsed: ${formatElapsed(Date.now() - startedAt)})`);
|
|
76
|
+
lastStatus = status;
|
|
57
77
|
}
|
|
58
78
|
await sleep(intervalSeconds * 1000);
|
|
59
79
|
}
|
|
@@ -84,21 +104,29 @@ async function exchangeBearerForSession(loginOrigin, bearerToken, userId) {
|
|
|
84
104
|
function stripTrailingSlash(value) {
|
|
85
105
|
return value.replace(/\/+$/, '');
|
|
86
106
|
}
|
|
107
|
+
function formatElapsed(ms) {
|
|
108
|
+
const totalSeconds = Math.max(0, Math.floor(ms / 1000));
|
|
109
|
+
const minutes = Math.floor(totalSeconds / 60);
|
|
110
|
+
const seconds = totalSeconds % 60;
|
|
111
|
+
return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
|
|
112
|
+
}
|
|
87
113
|
function openUrl(url) {
|
|
88
114
|
try {
|
|
89
115
|
const platform = os.platform();
|
|
90
116
|
if (platform === 'darwin') {
|
|
91
117
|
execFileSync('open', [url], { stdio: 'ignore' });
|
|
92
|
-
return;
|
|
118
|
+
return true;
|
|
93
119
|
}
|
|
94
120
|
if (platform === 'win32') {
|
|
95
121
|
execFileSync('cmd', ['/c', 'start', '', url], { stdio: 'ignore' });
|
|
96
|
-
return;
|
|
122
|
+
return true;
|
|
97
123
|
}
|
|
98
124
|
execFileSync('xdg-open', [url], { stdio: 'ignore' });
|
|
125
|
+
return true;
|
|
99
126
|
}
|
|
100
127
|
catch {
|
|
101
128
|
// Best-effort only.
|
|
129
|
+
return false;
|
|
102
130
|
}
|
|
103
131
|
}
|
|
104
132
|
//# sourceMappingURL=auth.js.map
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +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,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|