@heyditto/cli 2.1.0 → 2.3.0
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 +89 -7
- package/dist/agents/launch.d.ts +5 -0
- package/dist/agents/launch.js +124 -22
- package/dist/agents/launch.js.map +1 -1
- package/dist/api.d.ts +69 -1
- package/dist/api.js +53 -9
- package/dist/api.js.map +1 -1
- package/dist/browser.d.ts +2 -0
- package/dist/browser.js +17 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli.js +42 -33
- package/dist/cli.js.map +1 -1
- package/dist/commands.d.ts +66 -1
- package/dist/commands.js +490 -9
- package/dist/commands.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.js +14 -1
- package/dist/config.js.map +1 -1
- package/dist/device-login.d.ts +21 -5
- package/dist/device-login.js +17 -8
- package/dist/device-login.js.map +1 -1
- package/dist/endpoint-format.d.ts +9 -0
- package/dist/endpoint-format.js +21 -0
- package/dist/endpoint-format.js.map +1 -0
- package/dist/gh-secret.d.ts +31 -0
- package/dist/gh-secret.js +94 -0
- package/dist/gh-secret.js.map +1 -0
- package/dist/store.d.ts +16 -0
- package/dist/store.js +47 -0
- package/dist/store.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -85,7 +85,25 @@ requires backend support — see
|
|
|
85
85
|
[ditto-assistant/backend#1199](https://github.com/ditto-assistant/backend/issues/1199)),
|
|
86
86
|
so picking the right name at init avoids a stuck label.
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
### Humans: sign in through the browser
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
heyditto login
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
opens the Ditto web app with a one-time device code (sign in with Google, X, Apple
|
|
95
|
+
or GitHub, or create an account), approves it, and hands the key back to the CLI —
|
|
96
|
+
nothing to copy. `heyditto claude` / `heyditto codex` run the same flow
|
|
97
|
+
automatically on first use, and the web page lets you pick or create the
|
|
98
|
+
inference endpoint to launch through, so a fresh machine needs exactly one
|
|
99
|
+
command:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
npx @heyditto/cli@latest claude --yolo --worktree
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
You can still paste a key from **https://app.heyditto.ai/mcp/newkey**
|
|
106
|
+
(`heyditto login <key>`, `--paste`, or `--stdin`), or set it in the environment:
|
|
89
107
|
|
|
90
108
|
```bash
|
|
91
109
|
export DITTO_API_KEY=ditto_mcp_…
|
|
@@ -314,10 +332,11 @@ Print a Claude Desktop / Cursor / generic-MCP-client config snippet for the Ditt
|
|
|
314
332
|
## Coding agents
|
|
315
333
|
|
|
316
334
|
`heyditto claude` and `heyditto codex` launch Claude Code or Codex through one of
|
|
317
|
-
your Ditto **inference endpoints** (
|
|
318
|
-
|
|
335
|
+
your Ditto **inference endpoints** (managed at https://developer.heyditto.ai/endpoints;
|
|
336
|
+
the Ditto app's Settings → Developer page still works too). Each launch:
|
|
319
337
|
|
|
320
|
-
1.
|
|
338
|
+
1. signs you in through the browser if this machine has no key yet, then uses
|
|
339
|
+
the endpoint you picked there, `--endpoint`, the saved default, or a picker,
|
|
321
340
|
2. mints a temporary endpoint key (optionally capped with `--budget <tokens>`),
|
|
322
341
|
3. starts the agent with that key and a fresh `X-Ditto-Session-Id`, so the
|
|
323
342
|
session becomes its own thread with full traces under the endpoint,
|
|
@@ -370,9 +389,72 @@ How the wiring works:
|
|
|
370
389
|
|
|
371
390
|
### `endpoints`
|
|
372
391
|
|
|
373
|
-
|
|
374
|
-
the
|
|
375
|
-
|
|
392
|
+
Manage the inference endpoints the launchers route through — a CLI mirror of
|
|
393
|
+
the developer console at https://developer.heyditto.ai/endpoints (`open` takes
|
|
394
|
+
you to an endpoint's page there; set `DITTO_DEVELOPER_BASE` to point elsewhere):
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
heyditto endpoints [--set-default <slug>] [--clear-default] list (* = default)
|
|
398
|
+
heyditto endpoints create [--name <n>] [--slug <s>] [--model <id>] [--default]
|
|
399
|
+
heyditto endpoints show <endpoint>
|
|
400
|
+
heyditto endpoints use <endpoint> make it the default
|
|
401
|
+
heyditto endpoints pick choose the default interactively
|
|
402
|
+
heyditto endpoints open [endpoint] open the editor in the Ditto app
|
|
403
|
+
heyditto endpoints set <endpoint> --model … --system-prompt … --spend-limit <tokens|none>
|
|
404
|
+
--spend-period … --record-trace on|off --recall on|off
|
|
405
|
+
--record on|off --memory-depth <n>
|
|
406
|
+
heyditto endpoints delete <endpoint> [--yes]
|
|
407
|
+
heyditto endpoints keys <endpoint> list keys
|
|
408
|
+
heyditto endpoints keys create <endpoint> --gh-secret <NAME> [--repo owner/repo] [--env <env>] [--org <org>]
|
|
409
|
+
[--name <label>] [--expires <1h…never>] [--budget <tokens>]
|
|
410
|
+
[--spend-period <p>] [--yes]
|
|
411
|
+
heyditto endpoints keys revoke <endpoint> <keyId> [--yes]
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
Endpoints spend your Ditto credits, so deleting one, revoking a key or raising a
|
|
415
|
+
spend limit asks you to type the slug back; pass `--yes` in scripts. `--output
|
|
416
|
+
json` is available everywhere and includes the gateway base URL.
|
|
417
|
+
|
|
418
|
+
#### Put a key in GitHub Actions
|
|
419
|
+
|
|
420
|
+
`keys create --gh-secret` mints a long-lived key on an endpoint and stores it as
|
|
421
|
+
a GitHub Actions secret through the [`gh` CLI](https://cli.github.com) — **the
|
|
422
|
+
key is never shown**. The plaintext goes to `gh secret set` over stdin, so it
|
|
423
|
+
does not appear in argv, `ps`, shell history, logs or the CLI's own output, and
|
|
424
|
+
the CLI does not keep a copy. If `gh` fails to store it, the freshly minted key
|
|
425
|
+
is revoked again.
|
|
426
|
+
|
|
427
|
+
```bash
|
|
428
|
+
cd my-repo
|
|
429
|
+
heyditto endpoints keys create my-endpoint --gh-secret DITTO_KEY # repo from the current directory (like gh)
|
|
430
|
+
heyditto endpoints keys create my-endpoint --gh-secret DITTO_KEY --repo acme/app --budget 5000000
|
|
431
|
+
heyditto endpoints keys create my-endpoint --gh-secret DITTO_KEY --repo acme/app --env production --yes
|
|
432
|
+
heyditto endpoints keys create my-endpoint --gh-secret DITTO_KEY --org acme --expires 6mo --output json
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
Requirements: `gh` on `PATH` and signed in (`gh auth status`) — both are checked
|
|
436
|
+
before anything is minted. Without a terminal the command needs `--yes`;
|
|
437
|
+
interactively it shows what it will do and asks you to type the secret name.
|
|
438
|
+
Defaults: key name `gh:<owner>/<repo>:<NAME>`, expiry `1y`; `--budget` caps the
|
|
439
|
+
key's spend (`--spend-period` defaults to `monthly`). The output shows the key's
|
|
440
|
+
last four characters, expiry, budget, where the secret was set, and a workflow
|
|
441
|
+
snippet:
|
|
442
|
+
|
|
443
|
+
```yaml
|
|
444
|
+
env:
|
|
445
|
+
ANTHROPIC_AUTH_TOKEN: ${{ secrets.DITTO_KEY }}
|
|
446
|
+
ANTHROPIC_BASE_URL: https://api.heyditto.ai
|
|
447
|
+
# OpenAI-compatible clients: OPENAI_API_KEY: ${{ secrets.DITTO_KEY }} with OPENAI_BASE_URL: https://api.heyditto.ai/v1
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
Revoke it any time with `heyditto endpoints keys revoke my-endpoint <keyId>`.
|
|
451
|
+
|
|
452
|
+
**Agent accounts.** An agent set up with `heyditto init` can create and manage
|
|
453
|
+
endpoints too, but an endpoint created by an unclaimed agent starts **inactive**:
|
|
454
|
+
it serves requests once the person the agent works for claims the agent and
|
|
455
|
+
subscribes to Ditto Hero. The CLI prints the server's explanation together with
|
|
456
|
+
an activation link (the agent's claim link plus the endpoint) — hand that link
|
|
457
|
+
to the user.
|
|
376
458
|
|
|
377
459
|
### `sessions`
|
|
378
460
|
|
package/dist/agents/launch.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type InferenceEndpoint } from "../api.js";
|
|
1
2
|
import { type Harness } from "./types.js";
|
|
2
3
|
export interface LaunchOptions {
|
|
3
4
|
endpoint?: string;
|
|
@@ -16,5 +17,9 @@ export interface LaunchOptions {
|
|
|
16
17
|
name?: string;
|
|
17
18
|
dryRun?: boolean;
|
|
18
19
|
}
|
|
20
|
+
/** Interactive numbered picker; also accepts a slug or id. Exported for `heyditto endpoints pick`. */
|
|
21
|
+
export declare function pickEndpoint(endpoints: InferenceEndpoint[], defaultSlug?: string): Promise<InferenceEndpoint>;
|
|
22
|
+
/** Refuses to launch against an endpoint the backend marked inactive (e.g. awaiting the user's plan). */
|
|
23
|
+
export declare function assertEndpointActive(endpoint: InferenceEndpoint): Promise<void>;
|
|
19
24
|
/** Launches a coding harness against a Ditto inference endpoint with a temporary key. */
|
|
20
25
|
export declare function launchHarness(harness: Harness, rawArgs: string[], options: LaunchOptions): Promise<void>;
|
package/dist/agents/launch.js
CHANGED
|
@@ -2,8 +2,12 @@ import { spawn, spawnSync } from "node:child_process";
|
|
|
2
2
|
import { randomUUID } from "node:crypto";
|
|
3
3
|
import os from "node:os";
|
|
4
4
|
import { createInterface } from "node:readline/promises";
|
|
5
|
-
import { createKey, listEndpoints, revokeKey, } from "../api.js";
|
|
6
|
-
import {
|
|
5
|
+
import { ApiError, createEndpoint, createKey, findEndpoint, isEndpointPending, listEndpoints, revokeKey, } from "../api.js";
|
|
6
|
+
import { openInBrowser } from "../browser.js";
|
|
7
|
+
import { endpointURL, resolveApiKey } from "../config.js";
|
|
8
|
+
import { deviceLogin } from "../device-login.js";
|
|
9
|
+
import { formatActivation } from "../endpoint-format.js";
|
|
10
|
+
import { readStoredAuth, saveLogin, updateStoredAuth } from "../store.js";
|
|
7
11
|
import { planClaude } from "./claude.js";
|
|
8
12
|
import { planCodex } from "./codex.js";
|
|
9
13
|
import { latestSession, readSession, writeSession } from "./sessions.js";
|
|
@@ -40,51 +44,132 @@ function formatSpend(e) {
|
|
|
40
44
|
return `${used.toLocaleString()} tokens used, no limit`;
|
|
41
45
|
return `${used.toLocaleString()} / ${e.spendLimitTokens.toLocaleString()} tokens${e.spendPeriod && e.spendPeriod !== "never" ? ` per ${e.spendPeriod.replace(/ly$/, "")}` : ""}`;
|
|
42
46
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
function interactive() {
|
|
48
|
+
return Boolean(process.stdin.isTTY && process.stderr.isTTY);
|
|
49
|
+
}
|
|
50
|
+
async function ask(question) {
|
|
51
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
52
|
+
try {
|
|
53
|
+
return (await rl.question(question)).trim();
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
rl.close();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/** Yes/no prompt with Enter defaulting to yes. */
|
|
60
|
+
async function confirmYes(question) {
|
|
61
|
+
const answer = (await ask(`${question} [Y/n] `)).toLowerCase();
|
|
62
|
+
return answer === "" || answer === "y" || answer === "yes";
|
|
63
|
+
}
|
|
64
|
+
/** Interactive numbered picker; also accepts a slug or id. Exported for `heyditto endpoints pick`. */
|
|
65
|
+
export async function pickEndpoint(endpoints, defaultSlug) {
|
|
66
|
+
if (!interactive()) {
|
|
67
|
+
throw new Error("no endpoint selected. Pass --endpoint <slug>, or set a default with `heyditto endpoints use <slug>`.");
|
|
46
68
|
}
|
|
47
69
|
process.stderr.write("Ditto inference endpoints:\n\n");
|
|
48
70
|
endpoints.forEach((e, i) => {
|
|
49
|
-
|
|
71
|
+
const marks = [
|
|
72
|
+
e.slug === defaultSlug ? "default" : "",
|
|
73
|
+
isEndpointPending(e) ? "inactive" : "",
|
|
74
|
+
].filter(Boolean);
|
|
75
|
+
process.stderr.write(` ${i + 1}) ${e.slug} ${e.name !== e.slug ? `(${e.name}) ` : ""}model=${e.model}${marks.length ? ` [${marks.join(", ")}]` : ""}\n`);
|
|
50
76
|
process.stderr.write(` ${formatSpend(e)}${e.recordTrace ? " · traces on" : " · traces off"}\n`);
|
|
51
77
|
});
|
|
52
78
|
process.stderr.write("\n");
|
|
53
79
|
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
54
80
|
try {
|
|
55
81
|
for (;;) {
|
|
56
|
-
const answer = (await rl.question(`Connect to which endpoint? [1-${endpoints.length}] `)).trim();
|
|
82
|
+
const answer = (await rl.question(`Connect to which endpoint? [1-${endpoints.length}, or a slug] `)).trim();
|
|
57
83
|
const idx = Number(answer);
|
|
58
84
|
if (Number.isInteger(idx) && idx >= 1 && idx <= endpoints.length)
|
|
59
85
|
return endpoints[idx - 1];
|
|
60
|
-
const bySlug = endpoints
|
|
86
|
+
const bySlug = findEndpoint(endpoints, answer);
|
|
61
87
|
if (bySlug)
|
|
62
88
|
return bySlug;
|
|
63
|
-
process.stderr.write(
|
|
89
|
+
process.stderr.write(`Pick a number from 1 to ${endpoints.length}, or type an endpoint slug.\n`);
|
|
64
90
|
}
|
|
65
91
|
}
|
|
66
92
|
finally {
|
|
67
93
|
rl.close();
|
|
68
94
|
}
|
|
69
95
|
}
|
|
70
|
-
|
|
96
|
+
/** Refuses to launch against an endpoint the backend marked inactive (e.g. awaiting the user's plan). */
|
|
97
|
+
export async function assertEndpointActive(endpoint) {
|
|
98
|
+
if (!isEndpointPending(endpoint))
|
|
99
|
+
return;
|
|
100
|
+
const stored = await readStoredAuth();
|
|
101
|
+
const details = formatActivation(endpoint, stored?.claimURL);
|
|
102
|
+
throw new Error(`endpoint "${endpoint.slug}" is not active yet (${endpoint.status}).\n\n${details}`);
|
|
103
|
+
}
|
|
104
|
+
async function resolveEndpoint(wanted, endpoints, selected) {
|
|
71
105
|
if (endpoints.length === 0) {
|
|
72
|
-
|
|
106
|
+
if (interactive() && (await confirmYes("You have no inference endpoints yet. Create your first one now?"))) {
|
|
107
|
+
const created = await createEndpoint({});
|
|
108
|
+
log(`created endpoint ${created.slug} (model ${created.model})`);
|
|
109
|
+
await updateStoredAuth({ defaultEndpoint: created.slug });
|
|
110
|
+
return created;
|
|
111
|
+
}
|
|
112
|
+
throw new Error(`you have no inference endpoints yet. Create one with \`heyditto endpoints create\`, or at ${endpointURL()}.`);
|
|
73
113
|
}
|
|
74
114
|
const stored = (await readStoredAuth())?.defaultEndpoint;
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
const match = endpoints.find((e) => e.slug === target || e.id === target);
|
|
115
|
+
if (wanted?.trim()) {
|
|
116
|
+
const match = findEndpoint(endpoints, wanted);
|
|
78
117
|
if (match)
|
|
79
118
|
return match;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
119
|
+
throw new Error(`no endpoint named "${wanted.trim()}". Available: ${endpoints.map((e) => e.slug).join(", ")}`);
|
|
120
|
+
}
|
|
121
|
+
if (selected) {
|
|
122
|
+
// Chosen in the browser moments ago during the device login.
|
|
123
|
+
const match = findEndpoint(endpoints, selected.id) ?? findEndpoint(endpoints, selected.slug);
|
|
124
|
+
if (match)
|
|
125
|
+
return match;
|
|
126
|
+
log(`endpoint "${selected.slug}" picked in the browser is not in your list; pick another`);
|
|
127
|
+
}
|
|
128
|
+
if (stored?.trim()) {
|
|
129
|
+
const match = findEndpoint(endpoints, stored);
|
|
130
|
+
if (match)
|
|
131
|
+
return match;
|
|
132
|
+
log(`default endpoint "${stored.trim()}" no longer exists; pick another`);
|
|
84
133
|
}
|
|
85
134
|
if (endpoints.length === 1)
|
|
86
135
|
return endpoints[0];
|
|
87
|
-
|
|
136
|
+
const picked = await pickEndpoint(endpoints, stored);
|
|
137
|
+
if (await confirmYes(`Use ${picked.slug} by default next time?`)) {
|
|
138
|
+
await updateStoredAuth({ defaultEndpoint: picked.slug });
|
|
139
|
+
log(`default endpoint set to ${picked.slug} (change it with \`heyditto endpoints use <slug>\`)`);
|
|
140
|
+
}
|
|
141
|
+
return picked;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* First run: no key saved anywhere. On a terminal, run the browser device
|
|
145
|
+
* flow with the harness as the intent so the web page can offer the endpoint
|
|
146
|
+
* picker; the browser hands back the key and (optionally) the chosen endpoint.
|
|
147
|
+
*/
|
|
148
|
+
async function ensureLoggedIn(harness) {
|
|
149
|
+
const { key } = await resolveApiKey();
|
|
150
|
+
if (key)
|
|
151
|
+
return undefined;
|
|
152
|
+
if (!interactive()) {
|
|
153
|
+
// Non-interactive callers (CI, agents) must log in explicitly.
|
|
154
|
+
await listEndpoints(); // throws the shared "no Ditto API key configured" error
|
|
155
|
+
return undefined;
|
|
156
|
+
}
|
|
157
|
+
log(`no Ditto login yet — opening your browser to sign in and pick an endpoint for ${harness === "claude" ? "Claude Code" : "Codex"}.`);
|
|
158
|
+
return browserLogin(harness);
|
|
159
|
+
}
|
|
160
|
+
/** Runs the browser device flow for a harness and saves the result. */
|
|
161
|
+
async function browserLogin(harness) {
|
|
162
|
+
const result = await deviceLogin({
|
|
163
|
+
intent: harness,
|
|
164
|
+
onCode: (userCode, url) => {
|
|
165
|
+
process.stderr.write(`\n ${url}\n\n Code: ${userCode}\n\n`);
|
|
166
|
+
openInBrowser(url);
|
|
167
|
+
process.stderr.write("Waiting for approval in the browser (Ctrl+C to cancel)…\n");
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
await saveLogin(result.apiKey, result.setDefault && result.endpoint ? { defaultEndpoint: result.endpoint.slug } : {});
|
|
171
|
+
log(`logged in${result.endpoint ? `; endpoint ${result.endpoint.slug}${result.setDefault ? " saved as default" : ""}` : ""}`);
|
|
172
|
+
return result.endpoint;
|
|
88
173
|
}
|
|
89
174
|
function forwardSignals(child) {
|
|
90
175
|
// Ctrl+C reaches the child directly through the shared terminal; the
|
|
@@ -152,8 +237,25 @@ export async function launchHarness(harness, rawArgs, options) {
|
|
|
152
237
|
if (!record.harnessSessionId)
|
|
153
238
|
resumeLast = true;
|
|
154
239
|
}
|
|
155
|
-
|
|
156
|
-
|
|
240
|
+
let selected = options.dryRun ? undefined : await ensureLoggedIn(harness);
|
|
241
|
+
let catalog;
|
|
242
|
+
try {
|
|
243
|
+
catalog = await listEndpoints();
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
// A saved key that lapsed (device-flow keys expire) sends the user back
|
|
247
|
+
// through the browser instead of a dead 401.
|
|
248
|
+
if (!(err instanceof ApiError) || err.status !== 401 || options.dryRun || !interactive())
|
|
249
|
+
throw err;
|
|
250
|
+
const { source } = await resolveApiKey();
|
|
251
|
+
if (source !== "config")
|
|
252
|
+
throw err;
|
|
253
|
+
log("your saved Ditto login is no longer valid — opening your browser to sign in again.");
|
|
254
|
+
selected = await browserLogin(harness);
|
|
255
|
+
catalog = await listEndpoints();
|
|
256
|
+
}
|
|
257
|
+
const endpoint = await resolveEndpoint(options.endpoint ?? record?.endpointSlug, catalog.endpoints, selected);
|
|
258
|
+
await assertEndpointActive(endpoint);
|
|
157
259
|
let cwd = record?.worktree ?? process.cwd();
|
|
158
260
|
let worktreePath = record?.worktree;
|
|
159
261
|
if (options.worktree !== undefined && options.worktree !== false) {
|
|
@@ -209,7 +311,7 @@ export async function launchHarness(harness, rawArgs, options) {
|
|
|
209
311
|
.filter(Boolean)
|
|
210
312
|
.join(" ");
|
|
211
313
|
log(banner);
|
|
212
|
-
log(`traces:
|
|
314
|
+
log(`traces: ${endpointURL(endpoint.id)}`);
|
|
213
315
|
if (options.dryRun) {
|
|
214
316
|
const env = Object.fromEntries(Object.entries(plan.envSet).map(([k, v]) => [k, v === DRY_RUN_KEY ? "<key>" : v]));
|
|
215
317
|
process.stdout.write(`${JSON.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/agents/launch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"launch.js","sourceRoot":"","sources":["../../src/agents/launch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EACL,QAAQ,EAIR,cAAc,EACd,SAAS,EACT,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,SAAS,GACV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAsB,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAGL,YAAY,EAGZ,QAAQ,EACR,OAAO,EACP,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAoBpE,MAAM,WAAW,GAAG,8BAA8B,CAAC;AAEnD,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,OAAO,CAAC,OAAgB,EAAE,KAAgB;IACjD,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/D,OAAO,SAAS,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,WAAW,CAAC,GAAuB;IAC1C,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,GAAG,GAAG,CAAC,CAAC;IACrH,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,GAAuB;IAC1C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACnC,IAAK,YAAkC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAkB,CAAC;IACnF,MAAM,IAAI,KAAK,CAAC,6BAA6B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,SAAS,WAAW,CAAC,CAAoB;IACvC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,CAAC,gBAAgB,IAAI,IAAI,IAAI,CAAC,CAAC,gBAAgB,GAAG,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,wBAAwB,CAAC;IAClH,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,gBAAgB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnL,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,QAAgB;IACjC,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,kDAAkD;AAClD,KAAK,UAAU,UAAU,CAAC,QAAgB;IACxC,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/D,OAAO,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,KAAK,CAAC;AAC7D,CAAC;AAED,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAA8B,EAAE,WAAoB;IACrF,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CACb,sGAAsG,CACvG,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACvD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACzB,MAAM,KAAK,GAAG;YACZ,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;YACvC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;SACvC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CACvI,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7E,IAAI,CAAC;QACH,SAAS,CAAC;YACR,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,SAAS,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5G,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3B,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,SAAS,CAAC,MAAM;gBAAE,OAAO,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC5F,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,MAAM;gBAAE,OAAO,MAAM,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,SAAS,CAAC,MAAM,+BAA+B,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED,yGAAyG;AACzG,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAA2B;IACpE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAAE,OAAO;IACzC,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC7D,MAAM,IAAI,KAAK,CACb,aAAa,QAAQ,CAAC,IAAI,wBAAwB,QAAQ,CAAC,MAAM,SAAS,OAAO,EAAE,CACpF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,MAA0B,EAC1B,SAA8B,EAC9B,QAAsC;IAEtC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,WAAW,EAAE,IAAI,CAAC,MAAM,UAAU,CAAC,iEAAiE,CAAC,CAAC,EAAE,CAAC;YAC3G,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;YACzC,GAAG,CAAC,oBAAoB,OAAO,CAAC,IAAI,WAAW,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YACjE,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1D,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,6FAA6F,WAAW,EAAE,GAAG,CAC9G,CAAC;IACJ,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,cAAc,EAAE,CAAC,EAAE,eAAe,CAAC;IACzD,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,IAAI,EAAE,iBAAiB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACb,6DAA6D;QAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7F,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,GAAG,CAAC,aAAa,QAAQ,CAAC,IAAI,2DAA2D,CAAC,CAAC;IAC7F,CAAC;IACD,IAAI,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,MAAM,UAAU,CAAC,OAAO,MAAM,CAAC,IAAI,wBAAwB,CAAC,EAAE,CAAC;QACjE,MAAM,gBAAgB,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACzD,GAAG,CAAC,2BAA2B,MAAM,CAAC,IAAI,qDAAqD,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,cAAc,CAAC,OAAgB;IAC5C,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,aAAa,EAAE,CAAC;IACtC,IAAI,GAAG;QAAE,OAAO,SAAS,CAAC;IAC1B,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACnB,+DAA+D;QAC/D,MAAM,aAAa,EAAE,CAAC,CAAC,wDAAwD;QAC/E,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,GAAG,CAAC,iFAAiF,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;IACxI,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,uEAAuE;AACvE,KAAK,UAAU,YAAY,CAAC,OAAgB;IAC1C,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC;QAC/B,MAAM,EAAE,OAAO;QACf,MAAM,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,eAAe,QAAQ,MAAM,CAAC,CAAC;YAC9D,aAAa,CAAC,GAAG,CAAC,CAAC;YACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACpF,CAAC;KACF,CAAC,CAAC;IACH,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtH,GAAG,CAAC,YAAY,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9H,OAAO,MAAM,CAAC,QAAQ,CAAC;AACzB,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB;IACzC,qEAAqE;IACrE,sEAAsE;IACtE,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,0CAA0C;IAC5C,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC5B,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAmB;IACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,yFAAyF;AACzF,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgB,EAAE,OAAiB,EAAE,OAAsB;IAC7F,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACjG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC3G,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAEnH,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;YAC5B,OAAO,EAAE,EAAE;YACX,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,EAAE;YACb,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;SACR,CAAC,CAAC,WAAW,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,IAAI,OAAO,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,MAAiC,CAAC;IACtC,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM;YACJ,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;gBAChC,CAAC,CAAC,MAAM,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;gBACnC,CAAC,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;gBAChC,CAAC,CAAC,qBAAqB,OAAO,CAAC,MAAM,8BAA8B;gBACnE,CAAC,CAAC,eAAe,OAAO,+CAA+C,CAC1E,CAAC;QACJ,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,EAAE,UAAU,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;QACxG,IAAI,CAAC,MAAM,CAAC,gBAAgB;YAAE,UAAU,GAAG,IAAI,CAAC;IAClD,CAAC;IAED,IAAI,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1E,IAAI,OAAkD,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IAClC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,wEAAwE;QACxE,6CAA6C;QAC7C,IAAI,CAAC,CAAC,GAAG,YAAY,QAAQ,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE;YAAE,MAAM,GAAG,CAAC;QACpG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,IAAI,MAAM,KAAK,QAAQ;YAAE,MAAM,GAAG,CAAC;QACnC,GAAG,CAAC,oFAAoF,CAAC,CAAC;QAC1F,QAAQ,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IAClC,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9G,MAAM,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAErC,IAAI,GAAG,GAAG,MAAM,EAAE,QAAQ,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5C,IAAI,YAAY,GAAuB,MAAM,EAAE,QAAQ,CAAC;IACxD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACpG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,oCAAoC,IAAI,EAAE,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YACrD,GAAG,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,aAAa,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACvF,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC;YACd,YAAY,GAAG,EAAE,CAAC,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,UAAU,EAAE,CAAC;IACxE,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,EAAE,gBAAgB,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClG,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,OAAO,OAAO,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC1E,IAAI,GAA6B,CAAC;IAClC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE;YACjC,IAAI,EAAE,OAAO;YACb,SAAS;YACT,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,EAAE;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,WAAW;QAC/B,SAAS;QACT,KAAK;QACL,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS;QACtD,UAAU;QACV,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW;QACX,GAAG,EAAE,OAAO,CAAC,GAAG;KACjB,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG;QACb,YAAY,QAAQ,CAAC,IAAI,EAAE;QAC3B,SAAS,KAAK,IAAI,qCAAqC,EAAE;QACzD,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE;QACxE,WAAW,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,EAAE;QACpE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS;QAC7E,WAAW,SAAS,EAAE;KACvB;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,GAAG,CAAC,MAAM,CAAC,CAAC;IACZ,GAAG,CAAC,WAAW,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAE3C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAC5B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAClF,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,IAAI,CAAC,SAAS,CACf;YACE,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,GAAG;YACH,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,GAAG;YACH,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE;YACzE,SAAS;YACT,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,IAAI,IAAI,EAAE;SACpE,EACD,IAAI,EACJ,CAAC,CACF,IAAI,CACN,CAAC;QACF,OAAO;IACT,CAAC;IACD,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAkB;QAChC,EAAE,EAAE,SAAS;QACb,OAAO;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,KAAK,EAAE,GAAG,CAAC,EAAE;QACb,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,gBAAgB;QAChB,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QACjC,QAAQ,EAAE,YAAY;QACtB,KAAK;QACL,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,GAAG;QACnC,cAAc,EAAE,GAAG;QACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC;KACtC,CAAC;IACF,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE;QAC3C,KAAK,EAAE,SAAS;QAChB,GAAG,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;QAChC,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;YAAS,CAAC;QACT,OAAO,EAAE,CAAC;QACV,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,GAAG,CAAC,aAAa,GAAG,CAAC,OAAO,aAAa,SAAS,2CAA2C,CAAC,CAAC;QACjG,CAAC;aAAM,CAAC;YACN,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBACrC,GAAG,CAAC,wBAAwB,GAAG,CAAC,OAAO,wCAAwC,OAAO,aAAa,SAAS,GAAG,CAAC,CAAC;YACnH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,yBAAyB,GAAG,CAAC,OAAO,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,SAAS,EAAE,CAAC,CAAC;YAChI,CAAC;QACH,CAAC;QACD,MAAM,YAAY,CAAC,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,CAAC,QAAQ,GAAG,QAAQ,IAAI,CAAC,CAAC;AACnC,CAAC"}
|
package/dist/api.d.ts
CHANGED
|
@@ -5,24 +5,62 @@ export declare class ApiError extends Error {
|
|
|
5
5
|
constructor(message: string, status: number, body: string);
|
|
6
6
|
}
|
|
7
7
|
export declare function apiBase(): string;
|
|
8
|
+
/** Shared "not logged in" message: browser login first, then the alternatives. */
|
|
9
|
+
export declare const NO_KEY_MESSAGE: string;
|
|
8
10
|
export declare function apiFetch<T>(path: string, init?: {
|
|
9
11
|
method?: string;
|
|
10
12
|
body?: unknown;
|
|
11
13
|
auth?: boolean;
|
|
12
14
|
}): Promise<T>;
|
|
15
|
+
export type EndpointStatus = "active" | "pending_plan";
|
|
16
|
+
/** Backend-controlled copy explaining why an endpoint cannot serve requests yet. */
|
|
17
|
+
export interface EndpointActivation {
|
|
18
|
+
state: string;
|
|
19
|
+
reason: "agent_unclaimed" | "plan_required" | string;
|
|
20
|
+
requiredTier?: number;
|
|
21
|
+
requiredTierName?: string;
|
|
22
|
+
priceHint?: string;
|
|
23
|
+
message: string;
|
|
24
|
+
/** Link to hand to the user; for agent accounts the CLI adds the claim token (see mergeActivationURL). */
|
|
25
|
+
url?: string;
|
|
26
|
+
}
|
|
13
27
|
export interface InferenceEndpoint {
|
|
14
28
|
id: string;
|
|
15
29
|
slug: string;
|
|
16
30
|
name: string;
|
|
17
31
|
model: string;
|
|
32
|
+
systemPrompt?: string;
|
|
18
33
|
spendPeriod?: string;
|
|
19
34
|
spendLimitTokens?: number | null;
|
|
20
35
|
spentTokens?: number;
|
|
36
|
+
memoryDepth?: number;
|
|
37
|
+
maxToolRounds?: number;
|
|
21
38
|
recordTrace?: boolean;
|
|
39
|
+
recordAttachments?: boolean;
|
|
22
40
|
recallEnabled?: boolean;
|
|
23
41
|
recordEnabled?: boolean;
|
|
24
42
|
tools?: string[];
|
|
43
|
+
modelMode?: string;
|
|
44
|
+
billingMode?: string;
|
|
45
|
+
status?: EndpointStatus | string;
|
|
46
|
+
activation?: EndpointActivation;
|
|
47
|
+
createdAt?: string;
|
|
48
|
+
updatedAt?: string;
|
|
49
|
+
}
|
|
50
|
+
/** Partial body for POST / PATCH /api/v5/inference/endpoints. */
|
|
51
|
+
export interface EndpointInput {
|
|
52
|
+
name?: string;
|
|
53
|
+
slug?: string;
|
|
54
|
+
model?: string;
|
|
55
|
+
systemPrompt?: string;
|
|
56
|
+
spendLimitTokens?: number | null;
|
|
57
|
+
spendPeriod?: string;
|
|
58
|
+
recordTrace?: boolean;
|
|
59
|
+
recallEnabled?: boolean;
|
|
60
|
+
recordEnabled?: boolean;
|
|
61
|
+
memoryDepth?: number;
|
|
25
62
|
}
|
|
63
|
+
export declare function isEndpointPending(e: InferenceEndpoint): boolean;
|
|
26
64
|
export interface InferenceEndpointsResponse {
|
|
27
65
|
baseUrl: string;
|
|
28
66
|
endpoints: InferenceEndpoint[];
|
|
@@ -30,6 +68,16 @@ export interface InferenceEndpointsResponse {
|
|
|
30
68
|
used?: number;
|
|
31
69
|
}
|
|
32
70
|
export declare function listEndpoints(): Promise<InferenceEndpointsResponse>;
|
|
71
|
+
export declare function createEndpoint(input?: EndpointInput): Promise<InferenceEndpoint>;
|
|
72
|
+
export declare function updateEndpoint(id: string, patch: EndpointInput): Promise<InferenceEndpoint>;
|
|
73
|
+
export declare function deleteEndpoint(id: string): Promise<void>;
|
|
74
|
+
/** Finds one endpoint by slug or id from the catalog (there is no GET-by-id route). */
|
|
75
|
+
export declare function findEndpoint(endpoints: InferenceEndpoint[], ref: string): InferenceEndpoint | undefined;
|
|
76
|
+
export declare function getEndpoint(ref: string): Promise<{
|
|
77
|
+
endpoint: InferenceEndpoint;
|
|
78
|
+
catalog: InferenceEndpointsResponse;
|
|
79
|
+
}>;
|
|
80
|
+
export declare function listKeys(endpointId: string): Promise<InferenceKey[]>;
|
|
33
81
|
export interface InferenceKey {
|
|
34
82
|
id: string;
|
|
35
83
|
endpointId: string;
|
|
@@ -39,6 +87,10 @@ export interface InferenceKey {
|
|
|
39
87
|
expiresAt?: string | null;
|
|
40
88
|
spendLimitTokens?: number | null;
|
|
41
89
|
spendPeriod?: string;
|
|
90
|
+
spentTokens?: number;
|
|
91
|
+
createdAt?: string;
|
|
92
|
+
lastUsedAt?: string | null;
|
|
93
|
+
revokedAt?: string | null;
|
|
42
94
|
}
|
|
43
95
|
export interface CreateKeyInput {
|
|
44
96
|
name: string;
|
|
@@ -60,17 +112,33 @@ export interface InferenceSession {
|
|
|
60
112
|
lastSeenAt?: string;
|
|
61
113
|
}
|
|
62
114
|
export declare function listRemoteSessions(endpointId: string): Promise<InferenceSession[]>;
|
|
115
|
+
/** What the CLI was asked to do; the web page specializes its onboarding on it. */
|
|
116
|
+
export type DeviceIntent = "login" | "claude" | "codex";
|
|
117
|
+
export declare const DEVICE_CLIENT = "heyditto-cli";
|
|
63
118
|
export interface DeviceCode {
|
|
64
119
|
device_code: string;
|
|
65
120
|
user_code: string;
|
|
66
121
|
verification_url: string;
|
|
122
|
+
/** Backend-built URL carrying the code and the intent (RFC 8628 §3.3.1). */
|
|
123
|
+
verification_uri_complete?: string;
|
|
67
124
|
expires_in: number;
|
|
68
125
|
interval: number;
|
|
69
126
|
}
|
|
70
|
-
export declare function requestDeviceCode(
|
|
127
|
+
export declare function requestDeviceCode(input: {
|
|
128
|
+
intent: DeviceIntent;
|
|
129
|
+
}): Promise<DeviceCode>;
|
|
130
|
+
/** Endpoint the browser picked for the CLI during the device flow. */
|
|
131
|
+
export interface SelectedEndpoint {
|
|
132
|
+
id: string;
|
|
133
|
+
slug: string;
|
|
134
|
+
name?: string;
|
|
135
|
+
model?: string;
|
|
136
|
+
}
|
|
71
137
|
export type DeviceTokenResult = {
|
|
72
138
|
status: "ok";
|
|
73
139
|
accessToken: string;
|
|
140
|
+
endpoint?: SelectedEndpoint;
|
|
141
|
+
setDefault?: boolean;
|
|
74
142
|
} | {
|
|
75
143
|
status: "pending";
|
|
76
144
|
} | {
|
package/dist/api.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import os from "node:os";
|
|
1
2
|
import { packageName, packageVersion, resolveApiKey } from "./config.js";
|
|
2
3
|
/** Minimal authenticated REST client for the Ditto management API. */
|
|
3
4
|
export class ApiError extends Error {
|
|
@@ -16,13 +17,15 @@ export function apiBase() {
|
|
|
16
17
|
function userAgent() {
|
|
17
18
|
return `${packageName}/${packageVersion}`;
|
|
18
19
|
}
|
|
20
|
+
/** Shared "not logged in" message: browser login first, then the alternatives. */
|
|
21
|
+
export const NO_KEY_MESSAGE = "no Ditto API key configured.\n\n" +
|
|
22
|
+
" Run: heyditto login (opens your browser)\n" +
|
|
23
|
+
" Or: heyditto login <key> (save an existing key)\n" +
|
|
24
|
+
" Or: heyditto init --json (create a claimable agent account, no browser)\n";
|
|
19
25
|
async function requireKey() {
|
|
20
26
|
const { key } = await resolveApiKey();
|
|
21
|
-
if (!key)
|
|
22
|
-
throw new Error(
|
|
23
|
-
" Run: heyditto login\n" +
|
|
24
|
-
" Or save an existing key with: heyditto login <key>\n");
|
|
25
|
-
}
|
|
27
|
+
if (!key)
|
|
28
|
+
throw new Error(NO_KEY_MESSAGE);
|
|
26
29
|
return key;
|
|
27
30
|
}
|
|
28
31
|
export async function apiFetch(path, init = {}) {
|
|
@@ -60,6 +63,9 @@ export async function apiFetch(path, init = {}) {
|
|
|
60
63
|
return undefined;
|
|
61
64
|
return (await response.json());
|
|
62
65
|
}
|
|
66
|
+
export function isEndpointPending(e) {
|
|
67
|
+
return e.status === "pending_plan" || (e.status !== undefined && e.status !== "active");
|
|
68
|
+
}
|
|
63
69
|
export async function listEndpoints() {
|
|
64
70
|
const res = await apiFetch("/api/v5/inference/endpoints");
|
|
65
71
|
return {
|
|
@@ -69,6 +75,36 @@ export async function listEndpoints() {
|
|
|
69
75
|
used: res.used,
|
|
70
76
|
};
|
|
71
77
|
}
|
|
78
|
+
const endpointsPath = "/api/v5/inference/endpoints";
|
|
79
|
+
function endpointPath(id) {
|
|
80
|
+
return `${endpointsPath}/${encodeURIComponent(id)}`;
|
|
81
|
+
}
|
|
82
|
+
export async function createEndpoint(input = {}) {
|
|
83
|
+
return apiFetch(endpointsPath, { method: "POST", body: input });
|
|
84
|
+
}
|
|
85
|
+
export async function updateEndpoint(id, patch) {
|
|
86
|
+
return apiFetch(endpointPath(id), { method: "PATCH", body: patch });
|
|
87
|
+
}
|
|
88
|
+
export async function deleteEndpoint(id) {
|
|
89
|
+
await apiFetch(endpointPath(id), { method: "DELETE" });
|
|
90
|
+
}
|
|
91
|
+
/** Finds one endpoint by slug or id from the catalog (there is no GET-by-id route). */
|
|
92
|
+
export function findEndpoint(endpoints, ref) {
|
|
93
|
+
const wanted = ref.trim();
|
|
94
|
+
return endpoints.find((e) => e.slug === wanted || e.id === wanted);
|
|
95
|
+
}
|
|
96
|
+
export async function getEndpoint(ref) {
|
|
97
|
+
const catalog = await listEndpoints();
|
|
98
|
+
const endpoint = findEndpoint(catalog.endpoints, ref);
|
|
99
|
+
if (!endpoint) {
|
|
100
|
+
throw new Error(`no endpoint named "${ref.trim()}". Available: ${catalog.endpoints.map((e) => e.slug).join(", ") || "(none — create one with `heyditto endpoints create`)"}`);
|
|
101
|
+
}
|
|
102
|
+
return { endpoint, catalog };
|
|
103
|
+
}
|
|
104
|
+
export async function listKeys(endpointId) {
|
|
105
|
+
const res = await apiFetch(`${endpointPath(endpointId)}/keys`);
|
|
106
|
+
return Array.isArray(res) ? res : (res.keys ?? []);
|
|
107
|
+
}
|
|
72
108
|
export async function createKey(endpointId, input) {
|
|
73
109
|
const key = await apiFetch(`/api/v5/inference/endpoints/${encodeURIComponent(endpointId)}/keys`, { method: "POST", body: input });
|
|
74
110
|
if (!key.key)
|
|
@@ -82,10 +118,16 @@ export async function listRemoteSessions(endpointId) {
|
|
|
82
118
|
const res = await apiFetch(`/api/v5/inference/endpoints/${encodeURIComponent(endpointId)}/sessions`);
|
|
83
119
|
return res.sessions ?? [];
|
|
84
120
|
}
|
|
85
|
-
export
|
|
121
|
+
export const DEVICE_CLIENT = "heyditto-cli";
|
|
122
|
+
export async function requestDeviceCode(input) {
|
|
86
123
|
const res = await apiFetch("/api/v2/mcp/device-code", {
|
|
87
124
|
method: "POST",
|
|
88
|
-
body: {
|
|
125
|
+
body: {
|
|
126
|
+
client: DEVICE_CLIENT,
|
|
127
|
+
client_version: packageVersion,
|
|
128
|
+
intent: input.intent,
|
|
129
|
+
hostname: os.hostname().slice(0, 128),
|
|
130
|
+
},
|
|
89
131
|
auth: false,
|
|
90
132
|
});
|
|
91
133
|
if (!res.device_code || !res.user_code || !res.verification_url) {
|
|
@@ -99,8 +141,10 @@ export async function pollDeviceToken(deviceCode) {
|
|
|
99
141
|
auth: false,
|
|
100
142
|
body: { device_code: deviceCode, grant_type: "urn:ietf:params:oauth:grant-type:device_code" },
|
|
101
143
|
});
|
|
102
|
-
if (res.access_token)
|
|
103
|
-
|
|
144
|
+
if (res.access_token) {
|
|
145
|
+
const endpoint = res.endpoint && res.endpoint.id && res.endpoint.slug ? res.endpoint : undefined;
|
|
146
|
+
return { status: "ok", accessToken: res.access_token, endpoint, setDefault: Boolean(res.set_default) };
|
|
147
|
+
}
|
|
104
148
|
switch (res.error) {
|
|
105
149
|
case "authorization_pending":
|
|
106
150
|
return { status: "pending" };
|