@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 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
- 1) Login once (interactive approval-link flow):
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
- 2) Run as an MCP server (stdio):
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” for Codex/Every Code.
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": "npx",
43
- "args": ["-y", "@just-every/design"]
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`).
@@ -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,CAqElG"}
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('Approve this MCP client in your browser:');
28
- console.error(approval.approvalUrl);
29
- console.error(`Approval request expires at: ${expiresAtText}`);
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
- 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;
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":"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"}
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,6BAA6B,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IAChE,OAAO,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,KAAK,CAAC,kBAAkB,aAAa,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAE9E,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC7C,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACjF,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,GAAG,IAAI,CAAC;IACpD,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,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,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;YAChB,uDAAuD;YACvD,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,CAAC,KAAK,CAAC,qCAAqC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtE,UAAU,GAAG,SAAS,CAAC;YACzB,CAAC;YACD,MAAM,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;YACpC,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAyB,CAAC;QAC5D,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACrF,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjC,OAAO;gBACL,WAAW,EAAE,IAAI,CAAC,KAAK;gBACvB,eAAe,EAAE,IAAI,CAAC,SAAS;gBAC/B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,gBAAgB,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS;aACjD,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC;QACjD,IAAI,MAAM,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,kCAAkC,MAAM,cAAc,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAC9G,UAAU,GAAG,MAAM,CAAC;QACtB,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,aAAa,CAAC,EAAU;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,YAAY,GAAG,EAAE,CAAC;IAClC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACnF,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,IAAI,CAAC;QACd,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,IAAI,CAAC;QACd,CAAC;QACD,YAAY,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}