@heyditto/cli 3.5.1 → 3.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,231 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import { createHash, randomUUID } from "node:crypto";
3
+ import { accessSync, closeSync, constants, existsSync, fsyncSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ import { Option } from "commander";
8
+ function object(value) {
9
+ return typeof value === "object" && value !== null && !Array.isArray(value);
10
+ }
11
+ function userPath(value) {
12
+ return path.resolve(value === "~" ? os.homedir() : value.startsWith("~/") ? path.join(os.homedir(), value.slice(2)) : value);
13
+ }
14
+ function ownedPath(target, kind) {
15
+ const st = lstatSync(target);
16
+ if (st.isSymbolicLink() || (kind === "file" ? !st.isFile() || st.nlink !== 1 : !st.isDirectory()) || st.uid !== process.getuid?.()) {
17
+ throw new Error(`Refusing an unowned, linked or unexpected T3 ${kind}: ${target}`);
18
+ }
19
+ if (kind === "directory" && (st.mode & 0o022) !== 0)
20
+ throw new Error(`Refusing a writable shared T3 directory: ${target}`);
21
+ }
22
+ function privateDirectory(target) {
23
+ if (existsSync(target)) {
24
+ ownedPath(target, "directory");
25
+ if ((statSync(target).mode & 0o077) !== 0)
26
+ throw new Error(`T3 setup needs an owner-only directory: ${target}`);
27
+ return;
28
+ }
29
+ privateDirectory(path.dirname(target));
30
+ mkdirSync(target, { mode: 0o700 });
31
+ }
32
+ function executable(value, name) {
33
+ const found = value ?? spawnSync("which", [name], { encoding: "utf8" }).stdout?.trim();
34
+ if (!found || /[\r\n\0]/.test(found))
35
+ throw new Error(`Cannot locate ${name}; set --${name === "claude" ? "claude" : "heyditto"}-bin to its executable path`);
36
+ const resolved = userPath(found);
37
+ accessSync(resolved, constants.X_OK);
38
+ if (!statSync(resolved).isFile())
39
+ throw new Error(`${name} must be an executable file`);
40
+ return resolved;
41
+ }
42
+ function parseObject(raw, label) {
43
+ try {
44
+ const parsed = JSON.parse(raw);
45
+ if (object(parsed))
46
+ return parsed;
47
+ }
48
+ catch { /* Do not include potentially secret JSON excerpts in diagnostics. */ }
49
+ throw new Error(`Cannot parse ${label} as a JSON object; nothing changed`);
50
+ }
51
+ function runningServer(userdata) {
52
+ const runtime = path.join(userdata, "server-runtime.json");
53
+ if (!existsSync(runtime))
54
+ return undefined;
55
+ ownedPath(runtime, "file");
56
+ const record = parseObject(readFileSync(runtime, "utf8"), "T3 server runtime");
57
+ const pid = record.pid;
58
+ if (!Number.isSafeInteger(pid) || pid <= 0)
59
+ throw new Error("Cannot establish whether T3 is stopped: invalid server runtime pid");
60
+ try {
61
+ process.kill(pid, 0);
62
+ return pid;
63
+ }
64
+ catch (error) {
65
+ if (error.code === "ESRCH")
66
+ return undefined;
67
+ throw new Error("Cannot establish whether T3 is stopped; close T3 before setup");
68
+ }
69
+ }
70
+ function shellQuote(value) {
71
+ return `'${value.replaceAll("'", "'\\''")}'`;
72
+ }
73
+ /** Plan only: no credentials, endpoint changes, filesystem writes or service stops. */
74
+ export function planT3Setup(options) {
75
+ if (process.platform === "win32")
76
+ throw new Error("T3 launcher setup currently supports macOS and Linux; use the manual T3 guide on Windows");
77
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]*$/.test(options.endpoint))
78
+ throw new Error("Use an endpoint CLI slug or UUID with --endpoint");
79
+ const inference = options.inference ?? "cliproxy";
80
+ if (inference !== "router" && inference !== "cliproxy")
81
+ throw new Error("--inference must be router or cliproxy");
82
+ const instance = options.instance ?? "claude_ditto_cliproxy";
83
+ if (!/^[a-zA-Z0-9][a-zA-Z0-9_-]{0,79}$/.test(instance))
84
+ throw new Error("--instance must contain letters, digits, '-' or '_' and be at most 80 characters");
85
+ const base = userPath(options.baseDir ?? process.env.T3CODE_HOME ?? path.join(os.homedir(), ".t3"));
86
+ const userdata = path.join(base, "userdata");
87
+ const settingsPath = path.join(userdata, "settings.json");
88
+ ownedPath(base, "directory");
89
+ ownedPath(userdata, "directory");
90
+ ownedPath(settingsPath, "file");
91
+ const original = readFileSync(settingsPath, "utf8");
92
+ const settings = parseObject(original, "T3 settings");
93
+ if (settings.providerInstances !== undefined && !object(settings.providerInstances))
94
+ throw new Error("Unsupported T3 provider settings shape; nothing changed");
95
+ const instances = (settings.providerInstances ?? {});
96
+ const existing = Object.hasOwn(instances, instance) ? instances[instance] : undefined;
97
+ const managedRoot = path.join(base, "ditto-providers");
98
+ // Check existing ancestors before planning any generated paths. The root may
99
+ // be new; it must not redirect the install through a symlink.
100
+ for (const dir of [managedRoot, path.join(managedRoot, instance)]) {
101
+ if (existsSync(dir))
102
+ ownedPath(dir, "directory");
103
+ }
104
+ const homePath = path.join(managedRoot, instance, "claude");
105
+ if (existing !== undefined && (!object(existing) || existing.driver !== "claudeAgent" || !object(existing.config) || existing.config.homePath !== homePath || typeof existing.config.binaryPath !== "string" || !existing.config.binaryPath.startsWith(path.join(managedRoot, instance) + path.sep))) {
106
+ throw new Error(`T3 provider '${instance}' already exists outside this setup; choose another --instance (no overwrite)`);
107
+ }
108
+ const heydittoBin = executable(options.heydittoBin, "heyditto");
109
+ const claudeBin = executable(options.claudeBin, "claude");
110
+ if (path.basename(claudeBin) !== "claude")
111
+ throw new Error("--claude-bin must point to an executable named claude (a symlink is supported)");
112
+ const help = spawnSync(heydittoBin, ["claude", "--help"], { encoding: "utf8", timeout: 15_000 });
113
+ const required = inference === "cliproxy" ? ["--cliproxy", "--mcp", "--no-mcp-only", "--no-remote-control"] : ["--no-mcp", "--no-mcp-only", "--no-remote-control"];
114
+ if (help.status !== 0 || required.some((flag) => !new RegExp(`(^|[\\s,])${flag}([\\s,]|$)`, "m").test(help.stdout ?? ""))) {
115
+ throw new Error(`The selected heyditto does not support ${inference} T3 launches; update it before setup`);
116
+ }
117
+ const launcher = readFileSync(fileURLToPath(new URL("../../scripts/claude-router-launcher.sh", import.meta.url)), "utf8");
118
+ const digest = createHash("sha256").update(JSON.stringify({ inference, endpoint: options.endpoint, heydittoBin, claudeBin, launcher })).digest("hex").slice(0, 20);
119
+ const versionDir = path.join(managedRoot, instance, digest);
120
+ const supportPath = path.join(versionDir, "claude-router-launcher.sh");
121
+ const launcherPath = path.join(versionDir, "launch");
122
+ const wrapper = `#!/bin/sh\n# Managed by heyditto t3 setup. No credentials are stored here.\nexport DITTO_T3_INFERENCE=${shellQuote(inference)}\nexport DITTO_T3_ENDPOINT=${shellQuote(options.endpoint)}\nexport DITTO_T3_HEYDITTO_BIN=${shellQuote(heydittoBin)}\nexport DITTO_T3_CLAUDE_BIN=${shellQuote(claudeBin)}\nexec ${shellQuote(supportPath)} "$@"\n`;
123
+ const displayName = options.name?.trim() || (inference === "cliproxy" ? "Claude CLIProxy + Ditto" : "Ditto Router");
124
+ const previous = object(existing) ? existing : {};
125
+ const provider = { ...previous, driver: "claudeAgent", displayName, enabled: true, config: { ...(object(previous.config) ? previous.config : {}), binaryPath: launcherPath, homePath } };
126
+ const updatedObject = { ...settings, providerInstances: { ...instances, [instance]: provider } };
127
+ const same = JSON.stringify(settings) === JSON.stringify(updatedObject);
128
+ return {
129
+ settingsPath, original, updated: same ? original : JSON.stringify(updatedObject, null, 2) + "\n",
130
+ instance, endpoint: options.endpoint, inference, displayName, managedRoot, homePath, launcherPath,
131
+ files: [{ path: supportPath, content: launcher }, { path: launcherPath, content: wrapper }],
132
+ action: existing === undefined ? "add" : same ? "unchanged" : "update",
133
+ runningPid: runningServer(userdata),
134
+ };
135
+ }
136
+ function ensureStopped(plan) {
137
+ const pid = runningServer(path.dirname(plan.settingsPath));
138
+ if (pid !== undefined)
139
+ throw new Error(`T3 is running (pid ${pid}). Quit T3 or stop its service yourself, then rerun setup; no active chats were stopped`);
140
+ }
141
+ /** Apply only the selected provider; immutable launchers cannot change an old instance on failure. */
142
+ export function applyT3Setup(plan) {
143
+ ensureStopped(plan);
144
+ const userdata = path.dirname(plan.settingsPath);
145
+ const lock = path.join(userdata, ".heyditto-t3-setup.lock");
146
+ const lockFd = openSync(lock, "wx", 0o600);
147
+ let stage;
148
+ let backup;
149
+ let installed = false;
150
+ try {
151
+ ownedPath(plan.settingsPath, "file");
152
+ if (readFileSync(plan.settingsPath, "utf8") !== plan.original)
153
+ throw new Error("T3 settings changed since planning; rerun setup (no overwrite)");
154
+ // The base directory is already validated, so start recursion at our new,
155
+ // private child instead of trying to privatize T3's existing directories.
156
+ if (!existsSync(plan.managedRoot))
157
+ mkdirSync(plan.managedRoot, { mode: 0o700 });
158
+ privateDirectory(plan.managedRoot);
159
+ privateDirectory(plan.homePath);
160
+ for (const file of plan.files) {
161
+ privateDirectory(path.dirname(file.path));
162
+ if (existsSync(file.path)) {
163
+ ownedPath(file.path, "file");
164
+ if (readFileSync(file.path, "utf8") !== file.content || (statSync(file.path).mode & 0o777) !== 0o700)
165
+ throw new Error("An installed T3 launcher was modified; refusing to overwrite it");
166
+ }
167
+ else {
168
+ writeFileSync(file.path, file.content, { flag: "wx", mode: 0o700 });
169
+ installed = true;
170
+ }
171
+ }
172
+ if (plan.original === plan.updated)
173
+ return { changed: installed };
174
+ const backups = path.join(plan.managedRoot, "backups");
175
+ privateDirectory(backups);
176
+ backup = path.join(backups, `settings-${Date.now()}-${randomUUID()}.json`);
177
+ writeFileSync(backup, plan.original, { flag: "wx", mode: 0o600 });
178
+ stage = path.join(userdata, `.heyditto-settings-${randomUUID()}.json`);
179
+ const fd = openSync(stage, "wx", 0o600);
180
+ try {
181
+ writeFileSync(fd, plan.updated, "utf8");
182
+ fsyncSync(fd);
183
+ }
184
+ finally {
185
+ closeSync(fd);
186
+ }
187
+ ensureStopped(plan);
188
+ ownedPath(plan.settingsPath, "file");
189
+ if (readFileSync(plan.settingsPath, "utf8") !== plan.original)
190
+ throw new Error("T3 settings changed during setup; backup kept, original launcher retained, settings not overwritten");
191
+ renameSync(stage, plan.settingsPath);
192
+ stage = undefined;
193
+ return { changed: true, backup };
194
+ }
195
+ finally {
196
+ closeSync(lockFd);
197
+ if (stage !== undefined)
198
+ unlinkSync(stage);
199
+ unlinkSync(lock);
200
+ }
201
+ }
202
+ export function registerT3Commands(program) {
203
+ program.command("t3").description("configure a local T3 Code provider for Ditto").command("setup")
204
+ .description("install a Claude launcher and configure a T3 provider while T3 is stopped")
205
+ .requiredOption("--endpoint <slug>", "Ditto endpoint supplying tools (and inference in Router mode)")
206
+ .addOption(new Option("--inference <mode>", "inference route").choices(["cliproxy", "router"]).default("cliproxy"))
207
+ .option("--instance <id>", "T3 provider instance id", "claude_ditto_cliproxy")
208
+ .option("--name <name>", "provider display name")
209
+ .option("--base-dir <dir>", "T3 base directory (default: T3CODE_HOME or ~/.t3; userdata is appended)")
210
+ .option("--claude-bin <path>", "installed Claude executable named claude")
211
+ .option("--heyditto-bin <path>", "installed heyditto executable")
212
+ .option("--dry-run", "show the setup plan; write nothing and allow T3 to remain open")
213
+ .option("--json", "print a credential-free setup summary")
214
+ .action((options) => {
215
+ const plan = planT3Setup(options);
216
+ const applied = options.dryRun ? undefined : applyT3Setup(plan);
217
+ const summary = { action: plan.action, dryRun: Boolean(options.dryRun), instance: plan.instance, displayName: plan.displayName, endpoint: plan.endpoint, inference: plan.inference, settingsPath: plan.settingsPath, binaryPath: plan.launcherPath, homePath: plan.homePath, runningPid: plan.runningPid ?? null, ...applied };
218
+ if (options.json)
219
+ process.stdout.write(JSON.stringify(summary, null, 2) + "\n");
220
+ else {
221
+ process.stdout.write(`${options.dryRun ? "Plan" : "Configured"}: ${plan.displayName} → ${plan.endpoint} (${plan.inference})\nSettings: ${plan.settingsPath}\nBinary: ${plan.launcherPath}\nClaude config: ${plan.homePath}\n`);
222
+ if (applied?.backup)
223
+ process.stdout.write(`Private settings backup: ${applied.backup}\n`);
224
+ if (options.dryRun && plan.runningPid !== undefined)
225
+ process.stdout.write("T3 is running. Quit it before applying; this command will not stop chats.\n");
226
+ else if (!options.dryRun)
227
+ process.stdout.write("Open T3 and select this provider in a new chat. Setup did not mint any keys or send inference requests.\n");
228
+ }
229
+ });
230
+ }
231
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/t3/setup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":1,"bootstrap":1,"name":"@heyditto/cli","packageVersion":"3.5.1","packages":[{"path":"node_modules/@hono/node-server","name":"@hono/node-server","version":"1.19.14","resolved":"https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz","integrity":"sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="},{"path":"node_modules/@isaacs/fs-minipass","name":"@isaacs/fs-minipass","version":"4.0.1","resolved":"https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz","integrity":"sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="},{"path":"node_modules/@lydell/node-pty","name":"@lydell/node-pty","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty/-/node-pty-1.2.0-beta.15.tgz","integrity":"sha512-Br8wBxzbxFwdWgk9uQ+rdzE0xfoxOK4QuGH54swhRwc5IxP6H9Y1/bcyazRGvNUs6XkB5qNVkezuKSRxUwZe7A==","optional":true},{"path":"node_modules/@lydell/node-pty-darwin-arm64","name":"@lydell/node-pty-darwin-arm64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-darwin-arm64/-/node-pty-darwin-arm64-1.2.0-beta.15.tgz","integrity":"sha512-6TSBbzdcLiNTHl1mTuzflqXrkmcC36USVGvERoDgvHk2ItEDaMaFZuAJ1CqPmwYj0DyhCS16TVS8OGK9xZnjyQ==","optional":true,"os":["darwin"],"cpu":["arm64"]},{"path":"node_modules/@lydell/node-pty-darwin-x64","name":"@lydell/node-pty-darwin-x64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-darwin-x64/-/node-pty-darwin-x64-1.2.0-beta.15.tgz","integrity":"sha512-yDT2oqPqYMBScyuk1U9Rg5VKcrbMOD9o9jWYYamDADA3NSbUISroPChrqYRQ74Y7BQtNH4gqYAiWOZRi5uQZ0Q==","optional":true,"os":["darwin"],"cpu":["x64"]},{"path":"node_modules/@lydell/node-pty-linux-arm64","name":"@lydell/node-pty-linux-arm64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-linux-arm64/-/node-pty-linux-arm64-1.2.0-beta.15.tgz","integrity":"sha512-wkbNF7dYAmtJv+o2+iztVlNwnUB4B0uX0wh/UD+mwMcmE2gNMnW9GChXO7fEE5XJokD0vB5idiHpGegaN+G/sg==","optional":true,"os":["linux"],"cpu":["arm64"]},{"path":"node_modules/@lydell/node-pty-linux-x64","name":"@lydell/node-pty-linux-x64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-linux-x64/-/node-pty-linux-x64-1.2.0-beta.15.tgz","integrity":"sha512-+U/5AVvHT6W+8OCYcnJgN0Qgc0ycO3TfD6aaFJHK+WHij797f8gsi5dV1HEO9l6YQmWCD+VL5gaLDhx3mxHwCA==","optional":true,"os":["linux"],"cpu":["x64"]},{"path":"node_modules/@lydell/node-pty-win32-arm64","name":"@lydell/node-pty-win32-arm64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-win32-arm64/-/node-pty-win32-arm64-1.2.0-beta.15.tgz","integrity":"sha512-pyAk91w7wnnKrD4mrHXtIXRfmzSWV5bEzvRhurXcMCtCc2TJ424ciUskIgWMhAPP6y3KyUnqElj+U6kY3iOt0A==","optional":true,"os":["win32"],"cpu":["arm64"]},{"path":"node_modules/@lydell/node-pty-win32-x64","name":"@lydell/node-pty-win32-x64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-win32-x64/-/node-pty-win32-x64-1.2.0-beta.15.tgz","integrity":"sha512-2f8twEmDVxZ7drchAXjtevpmSPhFok0avAnzXro4t5gmz0xsPNKkoZvymwtuIS3xo7PzQqZOPQ/YzwEMb7oIzQ==","optional":true,"os":["win32"],"cpu":["x64"]},{"path":"node_modules/@modelcontextprotocol/sdk","name":"@modelcontextprotocol/sdk","version":"1.29.0","resolved":"https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz","integrity":"sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="},{"path":"node_modules/accepts","name":"accepts","version":"2.0.0","resolved":"https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz","integrity":"sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="},{"path":"node_modules/ajv","name":"ajv","version":"8.20.0","resolved":"https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz","integrity":"sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="},{"path":"node_modules/ajv-formats","name":"ajv-formats","version":"3.0.1","resolved":"https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz","integrity":"sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="},{"path":"node_modules/body-parser","name":"body-parser","version":"2.2.2","resolved":"https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz","integrity":"sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="},{"path":"node_modules/bytes","name":"bytes","version":"3.1.2","resolved":"https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz","integrity":"sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="},{"path":"node_modules/call-bind-apply-helpers","name":"call-bind-apply-helpers","version":"1.0.2","resolved":"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz","integrity":"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="},{"path":"node_modules/call-bound","name":"call-bound","version":"1.0.4","resolved":"https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz","integrity":"sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="},{"path":"node_modules/chownr","name":"chownr","version":"3.0.0","resolved":"https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz","integrity":"sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="},{"path":"node_modules/commander","name":"commander","version":"15.0.0","resolved":"https://registry.npmjs.org/commander/-/commander-15.0.0.tgz","integrity":"sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg=="},{"path":"node_modules/content-disposition","name":"content-disposition","version":"1.1.0","resolved":"https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz","integrity":"sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="},{"path":"node_modules/content-type","name":"content-type","version":"1.0.5","resolved":"https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz","integrity":"sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="},{"path":"node_modules/cookie","name":"cookie","version":"0.7.2","resolved":"https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz","integrity":"sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="},{"path":"node_modules/cookie-signature","name":"cookie-signature","version":"1.2.2","resolved":"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz","integrity":"sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="},{"path":"node_modules/cors","name":"cors","version":"2.8.6","resolved":"https://registry.npmjs.org/cors/-/cors-2.8.6.tgz","integrity":"sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="},{"path":"node_modules/cross-spawn","name":"cross-spawn","version":"7.0.6","resolved":"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz","integrity":"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="},{"path":"node_modules/debug","name":"debug","version":"4.4.3","resolved":"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz","integrity":"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="},{"path":"node_modules/depd","name":"depd","version":"2.0.0","resolved":"https://registry.npmjs.org/depd/-/depd-2.0.0.tgz","integrity":"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="},{"path":"node_modules/dunder-proto","name":"dunder-proto","version":"1.0.1","resolved":"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz","integrity":"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="},{"path":"node_modules/ee-first","name":"ee-first","version":"1.1.1","resolved":"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz","integrity":"sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="},{"path":"node_modules/encodeurl","name":"encodeurl","version":"2.0.0","resolved":"https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz","integrity":"sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="},{"path":"node_modules/es-define-property","name":"es-define-property","version":"1.0.1","resolved":"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz","integrity":"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="},{"path":"node_modules/es-errors","name":"es-errors","version":"1.3.0","resolved":"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz","integrity":"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="},{"path":"node_modules/es-object-atoms","name":"es-object-atoms","version":"1.1.2","resolved":"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz","integrity":"sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="},{"path":"node_modules/escape-html","name":"escape-html","version":"1.0.3","resolved":"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz","integrity":"sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="},{"path":"node_modules/etag","name":"etag","version":"1.8.1","resolved":"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz","integrity":"sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="},{"path":"node_modules/eventsource","name":"eventsource","version":"3.0.7","resolved":"https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz","integrity":"sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="},{"path":"node_modules/eventsource-parser","name":"eventsource-parser","version":"3.0.8","resolved":"https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.8.tgz","integrity":"sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="},{"path":"node_modules/express","name":"express","version":"5.2.1","resolved":"https://registry.npmjs.org/express/-/express-5.2.1.tgz","integrity":"sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="},{"path":"node_modules/express-rate-limit","name":"express-rate-limit","version":"8.5.1","resolved":"https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.1.tgz","integrity":"sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ=="},{"path":"node_modules/fast-deep-equal","name":"fast-deep-equal","version":"3.1.3","resolved":"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz","integrity":"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="},{"path":"node_modules/fast-uri","name":"fast-uri","version":"3.1.2","resolved":"https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz","integrity":"sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ=="},{"path":"node_modules/finalhandler","name":"finalhandler","version":"2.1.1","resolved":"https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz","integrity":"sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="},{"path":"node_modules/forwarded","name":"forwarded","version":"0.2.0","resolved":"https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz","integrity":"sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="},{"path":"node_modules/fresh","name":"fresh","version":"2.0.0","resolved":"https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz","integrity":"sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="},{"path":"node_modules/function-bind","name":"function-bind","version":"1.1.2","resolved":"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz","integrity":"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="},{"path":"node_modules/get-intrinsic","name":"get-intrinsic","version":"1.3.0","resolved":"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz","integrity":"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="},{"path":"node_modules/get-proto","name":"get-proto","version":"1.0.1","resolved":"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz","integrity":"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="},{"path":"node_modules/gopd","name":"gopd","version":"1.2.0","resolved":"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz","integrity":"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="},{"path":"node_modules/has-symbols","name":"has-symbols","version":"1.1.0","resolved":"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz","integrity":"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="},{"path":"node_modules/hasown","name":"hasown","version":"2.0.4","resolved":"https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz","integrity":"sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="},{"path":"node_modules/hono","name":"hono","version":"4.12.28","resolved":"https://registry.npmjs.org/hono/-/hono-4.12.28.tgz","integrity":"sha512-YwUvVpSF7m1yOblFPrU3Hbo8XhPheBoiyfGuII6z19LnOr6JpDnyyp7LFNrfV56wS8tpvtBFGRISHN02pDdLOA=="},{"path":"node_modules/http-errors","name":"http-errors","version":"2.0.1","resolved":"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz","integrity":"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="},{"path":"node_modules/iconv-lite","name":"iconv-lite","version":"0.7.2","resolved":"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz","integrity":"sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="},{"path":"node_modules/inherits","name":"inherits","version":"2.0.4","resolved":"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz","integrity":"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="},{"path":"node_modules/ip-address","name":"ip-address","version":"10.2.0","resolved":"https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz","integrity":"sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA=="},{"path":"node_modules/ipaddr.js","name":"ipaddr.js","version":"1.9.1","resolved":"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz","integrity":"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="},{"path":"node_modules/is-promise","name":"is-promise","version":"4.0.0","resolved":"https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz","integrity":"sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="},{"path":"node_modules/isexe","name":"isexe","version":"2.0.0","resolved":"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz","integrity":"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="},{"path":"node_modules/jose","name":"jose","version":"6.2.3","resolved":"https://registry.npmjs.org/jose/-/jose-6.2.3.tgz","integrity":"sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="},{"path":"node_modules/json-schema-traverse","name":"json-schema-traverse","version":"1.0.0","resolved":"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz","integrity":"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="},{"path":"node_modules/json-schema-typed","name":"json-schema-typed","version":"8.0.2","resolved":"https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz","integrity":"sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="},{"path":"node_modules/math-intrinsics","name":"math-intrinsics","version":"1.1.0","resolved":"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz","integrity":"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="},{"path":"node_modules/media-typer","name":"media-typer","version":"1.1.0","resolved":"https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz","integrity":"sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="},{"path":"node_modules/merge-descriptors","name":"merge-descriptors","version":"2.0.0","resolved":"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz","integrity":"sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="},{"path":"node_modules/mime-db","name":"mime-db","version":"1.54.0","resolved":"https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz","integrity":"sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="},{"path":"node_modules/mime-types","name":"mime-types","version":"3.0.2","resolved":"https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz","integrity":"sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="},{"path":"node_modules/minipass","name":"minipass","version":"7.1.3","resolved":"https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz","integrity":"sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="},{"path":"node_modules/minizlib","name":"minizlib","version":"3.1.0","resolved":"https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz","integrity":"sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="},{"path":"node_modules/ms","name":"ms","version":"2.1.3","resolved":"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz","integrity":"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="},{"path":"node_modules/negotiator","name":"negotiator","version":"1.0.0","resolved":"https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz","integrity":"sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="},{"path":"node_modules/object-assign","name":"object-assign","version":"4.1.1","resolved":"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz","integrity":"sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="},{"path":"node_modules/object-inspect","name":"object-inspect","version":"1.13.4","resolved":"https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz","integrity":"sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="},{"path":"node_modules/on-finished","name":"on-finished","version":"2.4.1","resolved":"https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz","integrity":"sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="},{"path":"node_modules/once","name":"once","version":"1.4.0","resolved":"https://registry.npmjs.org/once/-/once-1.4.0.tgz","integrity":"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="},{"path":"node_modules/parseurl","name":"parseurl","version":"1.3.3","resolved":"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz","integrity":"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="},{"path":"node_modules/path-key","name":"path-key","version":"3.1.1","resolved":"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz","integrity":"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="},{"path":"node_modules/path-to-regexp","name":"path-to-regexp","version":"8.4.2","resolved":"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz","integrity":"sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="},{"path":"node_modules/pkce-challenge","name":"pkce-challenge","version":"5.0.1","resolved":"https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz","integrity":"sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="},{"path":"node_modules/proxy-addr","name":"proxy-addr","version":"2.0.7","resolved":"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz","integrity":"sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="},{"path":"node_modules/qs","name":"qs","version":"6.15.3","resolved":"https://registry.npmjs.org/qs/-/qs-6.15.3.tgz","integrity":"sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A=="},{"path":"node_modules/range-parser","name":"range-parser","version":"1.2.1","resolved":"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz","integrity":"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="},{"path":"node_modules/raw-body","name":"raw-body","version":"3.0.2","resolved":"https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz","integrity":"sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="},{"path":"node_modules/require-from-string","name":"require-from-string","version":"2.0.2","resolved":"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz","integrity":"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="},{"path":"node_modules/router","name":"router","version":"2.2.0","resolved":"https://registry.npmjs.org/router/-/router-2.2.0.tgz","integrity":"sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="},{"path":"node_modules/safer-buffer","name":"safer-buffer","version":"2.1.2","resolved":"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz","integrity":"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="},{"path":"node_modules/semver","name":"semver","version":"7.8.5","resolved":"https://registry.npmjs.org/semver/-/semver-7.8.5.tgz","integrity":"sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="},{"path":"node_modules/send","name":"send","version":"1.2.1","resolved":"https://registry.npmjs.org/send/-/send-1.2.1.tgz","integrity":"sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="},{"path":"node_modules/serve-static","name":"serve-static","version":"2.2.1","resolved":"https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz","integrity":"sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="},{"path":"node_modules/setprototypeof","name":"setprototypeof","version":"1.2.0","resolved":"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz","integrity":"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="},{"path":"node_modules/shebang-command","name":"shebang-command","version":"2.0.0","resolved":"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz","integrity":"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="},{"path":"node_modules/shebang-regex","name":"shebang-regex","version":"3.0.0","resolved":"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz","integrity":"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="},{"path":"node_modules/side-channel","name":"side-channel","version":"1.1.1","resolved":"https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz","integrity":"sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="},{"path":"node_modules/side-channel-list","name":"side-channel-list","version":"1.0.1","resolved":"https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz","integrity":"sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="},{"path":"node_modules/side-channel-map","name":"side-channel-map","version":"1.0.1","resolved":"https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz","integrity":"sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="},{"path":"node_modules/side-channel-weakmap","name":"side-channel-weakmap","version":"1.0.2","resolved":"https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz","integrity":"sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="},{"path":"node_modules/smol-toml","name":"smol-toml","version":"1.8.0","resolved":"https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz","integrity":"sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ=="},{"path":"node_modules/statuses","name":"statuses","version":"2.0.2","resolved":"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz","integrity":"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="},{"path":"node_modules/tar","name":"tar","version":"7.5.22","resolved":"https://registry.npmjs.org/tar/-/tar-7.5.22.tgz","integrity":"sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA=="},{"path":"node_modules/toidentifier","name":"toidentifier","version":"1.0.1","resolved":"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz","integrity":"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="},{"path":"node_modules/type-is","name":"type-is","version":"2.0.1","resolved":"https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz","integrity":"sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="},{"path":"node_modules/unpipe","name":"unpipe","version":"1.0.0","resolved":"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz","integrity":"sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="},{"path":"node_modules/vary","name":"vary","version":"1.1.2","resolved":"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz","integrity":"sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="},{"path":"node_modules/which","name":"which","version":"2.0.2","resolved":"https://registry.npmjs.org/which/-/which-2.0.2.tgz","integrity":"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="},{"path":"node_modules/wrappy","name":"wrappy","version":"1.0.2","resolved":"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz","integrity":"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="},{"path":"node_modules/yallist","name":"yallist","version":"5.0.0","resolved":"https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz","integrity":"sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="},{"path":"node_modules/zod","name":"zod","version":"4.4.3","resolved":"https://registry.npmjs.org/zod/-/zod-4.4.3.tgz","integrity":"sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="},{"path":"node_modules/zod-to-json-schema","name":"zod-to-json-schema","version":"3.25.2","resolved":"https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz","integrity":"sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="}]}
1
+ {"version":1,"bootstrap":1,"name":"@heyditto/cli","packageVersion":"3.6.1","packages":[{"path":"node_modules/@hono/node-server","name":"@hono/node-server","version":"1.19.14","resolved":"https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz","integrity":"sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="},{"path":"node_modules/@isaacs/fs-minipass","name":"@isaacs/fs-minipass","version":"4.0.1","resolved":"https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz","integrity":"sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="},{"path":"node_modules/@lydell/node-pty","name":"@lydell/node-pty","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty/-/node-pty-1.2.0-beta.15.tgz","integrity":"sha512-Br8wBxzbxFwdWgk9uQ+rdzE0xfoxOK4QuGH54swhRwc5IxP6H9Y1/bcyazRGvNUs6XkB5qNVkezuKSRxUwZe7A==","optional":true},{"path":"node_modules/@lydell/node-pty-darwin-arm64","name":"@lydell/node-pty-darwin-arm64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-darwin-arm64/-/node-pty-darwin-arm64-1.2.0-beta.15.tgz","integrity":"sha512-6TSBbzdcLiNTHl1mTuzflqXrkmcC36USVGvERoDgvHk2ItEDaMaFZuAJ1CqPmwYj0DyhCS16TVS8OGK9xZnjyQ==","optional":true,"os":["darwin"],"cpu":["arm64"]},{"path":"node_modules/@lydell/node-pty-darwin-x64","name":"@lydell/node-pty-darwin-x64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-darwin-x64/-/node-pty-darwin-x64-1.2.0-beta.15.tgz","integrity":"sha512-yDT2oqPqYMBScyuk1U9Rg5VKcrbMOD9o9jWYYamDADA3NSbUISroPChrqYRQ74Y7BQtNH4gqYAiWOZRi5uQZ0Q==","optional":true,"os":["darwin"],"cpu":["x64"]},{"path":"node_modules/@lydell/node-pty-linux-arm64","name":"@lydell/node-pty-linux-arm64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-linux-arm64/-/node-pty-linux-arm64-1.2.0-beta.15.tgz","integrity":"sha512-wkbNF7dYAmtJv+o2+iztVlNwnUB4B0uX0wh/UD+mwMcmE2gNMnW9GChXO7fEE5XJokD0vB5idiHpGegaN+G/sg==","optional":true,"os":["linux"],"cpu":["arm64"]},{"path":"node_modules/@lydell/node-pty-linux-x64","name":"@lydell/node-pty-linux-x64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-linux-x64/-/node-pty-linux-x64-1.2.0-beta.15.tgz","integrity":"sha512-+U/5AVvHT6W+8OCYcnJgN0Qgc0ycO3TfD6aaFJHK+WHij797f8gsi5dV1HEO9l6YQmWCD+VL5gaLDhx3mxHwCA==","optional":true,"os":["linux"],"cpu":["x64"]},{"path":"node_modules/@lydell/node-pty-win32-arm64","name":"@lydell/node-pty-win32-arm64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-win32-arm64/-/node-pty-win32-arm64-1.2.0-beta.15.tgz","integrity":"sha512-pyAk91w7wnnKrD4mrHXtIXRfmzSWV5bEzvRhurXcMCtCc2TJ424ciUskIgWMhAPP6y3KyUnqElj+U6kY3iOt0A==","optional":true,"os":["win32"],"cpu":["arm64"]},{"path":"node_modules/@lydell/node-pty-win32-x64","name":"@lydell/node-pty-win32-x64","version":"1.2.0-beta.15","resolved":"https://registry.npmjs.org/@lydell/node-pty-win32-x64/-/node-pty-win32-x64-1.2.0-beta.15.tgz","integrity":"sha512-2f8twEmDVxZ7drchAXjtevpmSPhFok0avAnzXro4t5gmz0xsPNKkoZvymwtuIS3xo7PzQqZOPQ/YzwEMb7oIzQ==","optional":true,"os":["win32"],"cpu":["x64"]},{"path":"node_modules/@modelcontextprotocol/sdk","name":"@modelcontextprotocol/sdk","version":"1.29.0","resolved":"https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz","integrity":"sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="},{"path":"node_modules/accepts","name":"accepts","version":"2.0.0","resolved":"https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz","integrity":"sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="},{"path":"node_modules/ajv","name":"ajv","version":"8.20.0","resolved":"https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz","integrity":"sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="},{"path":"node_modules/ajv-formats","name":"ajv-formats","version":"3.0.1","resolved":"https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz","integrity":"sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="},{"path":"node_modules/body-parser","name":"body-parser","version":"2.2.2","resolved":"https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz","integrity":"sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="},{"path":"node_modules/bytes","name":"bytes","version":"3.1.2","resolved":"https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz","integrity":"sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="},{"path":"node_modules/call-bind-apply-helpers","name":"call-bind-apply-helpers","version":"1.0.2","resolved":"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz","integrity":"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="},{"path":"node_modules/call-bound","name":"call-bound","version":"1.0.4","resolved":"https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz","integrity":"sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="},{"path":"node_modules/chownr","name":"chownr","version":"3.0.0","resolved":"https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz","integrity":"sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="},{"path":"node_modules/commander","name":"commander","version":"15.0.0","resolved":"https://registry.npmjs.org/commander/-/commander-15.0.0.tgz","integrity":"sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg=="},{"path":"node_modules/content-disposition","name":"content-disposition","version":"1.1.0","resolved":"https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz","integrity":"sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="},{"path":"node_modules/content-type","name":"content-type","version":"1.0.5","resolved":"https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz","integrity":"sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="},{"path":"node_modules/cookie","name":"cookie","version":"0.7.2","resolved":"https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz","integrity":"sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="},{"path":"node_modules/cookie-signature","name":"cookie-signature","version":"1.2.2","resolved":"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz","integrity":"sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="},{"path":"node_modules/cors","name":"cors","version":"2.8.6","resolved":"https://registry.npmjs.org/cors/-/cors-2.8.6.tgz","integrity":"sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="},{"path":"node_modules/cross-spawn","name":"cross-spawn","version":"7.0.6","resolved":"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz","integrity":"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="},{"path":"node_modules/debug","name":"debug","version":"4.4.3","resolved":"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz","integrity":"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="},{"path":"node_modules/depd","name":"depd","version":"2.0.0","resolved":"https://registry.npmjs.org/depd/-/depd-2.0.0.tgz","integrity":"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="},{"path":"node_modules/dunder-proto","name":"dunder-proto","version":"1.0.1","resolved":"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz","integrity":"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="},{"path":"node_modules/ee-first","name":"ee-first","version":"1.1.1","resolved":"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz","integrity":"sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="},{"path":"node_modules/encodeurl","name":"encodeurl","version":"2.0.0","resolved":"https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz","integrity":"sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="},{"path":"node_modules/es-define-property","name":"es-define-property","version":"1.0.1","resolved":"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz","integrity":"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="},{"path":"node_modules/es-errors","name":"es-errors","version":"1.3.0","resolved":"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz","integrity":"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="},{"path":"node_modules/es-object-atoms","name":"es-object-atoms","version":"1.1.2","resolved":"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz","integrity":"sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw=="},{"path":"node_modules/escape-html","name":"escape-html","version":"1.0.3","resolved":"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz","integrity":"sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="},{"path":"node_modules/etag","name":"etag","version":"1.8.1","resolved":"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz","integrity":"sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="},{"path":"node_modules/eventsource","name":"eventsource","version":"3.0.7","resolved":"https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz","integrity":"sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="},{"path":"node_modules/eventsource-parser","name":"eventsource-parser","version":"3.0.8","resolved":"https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.8.tgz","integrity":"sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="},{"path":"node_modules/express","name":"express","version":"5.2.1","resolved":"https://registry.npmjs.org/express/-/express-5.2.1.tgz","integrity":"sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="},{"path":"node_modules/express-rate-limit","name":"express-rate-limit","version":"8.5.1","resolved":"https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.1.tgz","integrity":"sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ=="},{"path":"node_modules/fast-deep-equal","name":"fast-deep-equal","version":"3.1.3","resolved":"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz","integrity":"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="},{"path":"node_modules/fast-uri","name":"fast-uri","version":"3.1.2","resolved":"https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz","integrity":"sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ=="},{"path":"node_modules/finalhandler","name":"finalhandler","version":"2.1.1","resolved":"https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz","integrity":"sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA=="},{"path":"node_modules/forwarded","name":"forwarded","version":"0.2.0","resolved":"https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz","integrity":"sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="},{"path":"node_modules/fresh","name":"fresh","version":"2.0.0","resolved":"https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz","integrity":"sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="},{"path":"node_modules/function-bind","name":"function-bind","version":"1.1.2","resolved":"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz","integrity":"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="},{"path":"node_modules/get-intrinsic","name":"get-intrinsic","version":"1.3.0","resolved":"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz","integrity":"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="},{"path":"node_modules/get-proto","name":"get-proto","version":"1.0.1","resolved":"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz","integrity":"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="},{"path":"node_modules/gopd","name":"gopd","version":"1.2.0","resolved":"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz","integrity":"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="},{"path":"node_modules/has-symbols","name":"has-symbols","version":"1.1.0","resolved":"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz","integrity":"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="},{"path":"node_modules/hasown","name":"hasown","version":"2.0.4","resolved":"https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz","integrity":"sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A=="},{"path":"node_modules/hono","name":"hono","version":"4.12.28","resolved":"https://registry.npmjs.org/hono/-/hono-4.12.28.tgz","integrity":"sha512-YwUvVpSF7m1yOblFPrU3Hbo8XhPheBoiyfGuII6z19LnOr6JpDnyyp7LFNrfV56wS8tpvtBFGRISHN02pDdLOA=="},{"path":"node_modules/http-errors","name":"http-errors","version":"2.0.1","resolved":"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz","integrity":"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="},{"path":"node_modules/iconv-lite","name":"iconv-lite","version":"0.7.2","resolved":"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz","integrity":"sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw=="},{"path":"node_modules/inherits","name":"inherits","version":"2.0.4","resolved":"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz","integrity":"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="},{"path":"node_modules/ip-address","name":"ip-address","version":"10.2.0","resolved":"https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz","integrity":"sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA=="},{"path":"node_modules/ipaddr.js","name":"ipaddr.js","version":"1.9.1","resolved":"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz","integrity":"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="},{"path":"node_modules/is-promise","name":"is-promise","version":"4.0.0","resolved":"https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz","integrity":"sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="},{"path":"node_modules/isexe","name":"isexe","version":"2.0.0","resolved":"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz","integrity":"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="},{"path":"node_modules/jose","name":"jose","version":"6.2.3","resolved":"https://registry.npmjs.org/jose/-/jose-6.2.3.tgz","integrity":"sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="},{"path":"node_modules/json-schema-traverse","name":"json-schema-traverse","version":"1.0.0","resolved":"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz","integrity":"sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="},{"path":"node_modules/json-schema-typed","name":"json-schema-typed","version":"8.0.2","resolved":"https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz","integrity":"sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="},{"path":"node_modules/math-intrinsics","name":"math-intrinsics","version":"1.1.0","resolved":"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz","integrity":"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="},{"path":"node_modules/media-typer","name":"media-typer","version":"1.1.0","resolved":"https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz","integrity":"sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw=="},{"path":"node_modules/merge-descriptors","name":"merge-descriptors","version":"2.0.0","resolved":"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz","integrity":"sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g=="},{"path":"node_modules/mime-db","name":"mime-db","version":"1.54.0","resolved":"https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz","integrity":"sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="},{"path":"node_modules/mime-types","name":"mime-types","version":"3.0.2","resolved":"https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz","integrity":"sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="},{"path":"node_modules/minipass","name":"minipass","version":"7.1.3","resolved":"https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz","integrity":"sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A=="},{"path":"node_modules/minizlib","name":"minizlib","version":"3.1.0","resolved":"https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz","integrity":"sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw=="},{"path":"node_modules/ms","name":"ms","version":"2.1.3","resolved":"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz","integrity":"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="},{"path":"node_modules/negotiator","name":"negotiator","version":"1.0.0","resolved":"https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz","integrity":"sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="},{"path":"node_modules/object-assign","name":"object-assign","version":"4.1.1","resolved":"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz","integrity":"sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="},{"path":"node_modules/object-inspect","name":"object-inspect","version":"1.13.4","resolved":"https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz","integrity":"sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="},{"path":"node_modules/on-finished","name":"on-finished","version":"2.4.1","resolved":"https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz","integrity":"sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="},{"path":"node_modules/once","name":"once","version":"1.4.0","resolved":"https://registry.npmjs.org/once/-/once-1.4.0.tgz","integrity":"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="},{"path":"node_modules/parseurl","name":"parseurl","version":"1.3.3","resolved":"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz","integrity":"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="},{"path":"node_modules/path-key","name":"path-key","version":"3.1.1","resolved":"https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz","integrity":"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="},{"path":"node_modules/path-to-regexp","name":"path-to-regexp","version":"8.4.2","resolved":"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz","integrity":"sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="},{"path":"node_modules/pkce-challenge","name":"pkce-challenge","version":"5.0.1","resolved":"https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz","integrity":"sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="},{"path":"node_modules/proxy-addr","name":"proxy-addr","version":"2.0.7","resolved":"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz","integrity":"sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="},{"path":"node_modules/qs","name":"qs","version":"6.15.3","resolved":"https://registry.npmjs.org/qs/-/qs-6.15.3.tgz","integrity":"sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A=="},{"path":"node_modules/range-parser","name":"range-parser","version":"1.2.1","resolved":"https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz","integrity":"sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="},{"path":"node_modules/raw-body","name":"raw-body","version":"3.0.2","resolved":"https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz","integrity":"sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="},{"path":"node_modules/require-from-string","name":"require-from-string","version":"2.0.2","resolved":"https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz","integrity":"sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="},{"path":"node_modules/router","name":"router","version":"2.2.0","resolved":"https://registry.npmjs.org/router/-/router-2.2.0.tgz","integrity":"sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="},{"path":"node_modules/safer-buffer","name":"safer-buffer","version":"2.1.2","resolved":"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz","integrity":"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="},{"path":"node_modules/semver","name":"semver","version":"7.8.5","resolved":"https://registry.npmjs.org/semver/-/semver-7.8.5.tgz","integrity":"sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA=="},{"path":"node_modules/send","name":"send","version":"1.2.1","resolved":"https://registry.npmjs.org/send/-/send-1.2.1.tgz","integrity":"sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="},{"path":"node_modules/serve-static","name":"serve-static","version":"2.2.1","resolved":"https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz","integrity":"sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw=="},{"path":"node_modules/setprototypeof","name":"setprototypeof","version":"1.2.0","resolved":"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz","integrity":"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="},{"path":"node_modules/shebang-command","name":"shebang-command","version":"2.0.0","resolved":"https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz","integrity":"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="},{"path":"node_modules/shebang-regex","name":"shebang-regex","version":"3.0.0","resolved":"https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz","integrity":"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="},{"path":"node_modules/side-channel","name":"side-channel","version":"1.1.1","resolved":"https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz","integrity":"sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ=="},{"path":"node_modules/side-channel-list","name":"side-channel-list","version":"1.0.1","resolved":"https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz","integrity":"sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="},{"path":"node_modules/side-channel-map","name":"side-channel-map","version":"1.0.1","resolved":"https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz","integrity":"sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="},{"path":"node_modules/side-channel-weakmap","name":"side-channel-weakmap","version":"1.0.2","resolved":"https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz","integrity":"sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="},{"path":"node_modules/smol-toml","name":"smol-toml","version":"1.8.0","resolved":"https://registry.npmjs.org/smol-toml/-/smol-toml-1.8.0.tgz","integrity":"sha512-kCZr2V3ch9i00x8zXRhjUNVcjG9ijES5dDudkXvUVCT5QlJNQWElSJdZqyPemffHoLNUYwOcou0Fy+ojN0uHSQ=="},{"path":"node_modules/statuses","name":"statuses","version":"2.0.2","resolved":"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz","integrity":"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="},{"path":"node_modules/tar","name":"tar","version":"7.5.22","resolved":"https://registry.npmjs.org/tar/-/tar-7.5.22.tgz","integrity":"sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA=="},{"path":"node_modules/toidentifier","name":"toidentifier","version":"1.0.1","resolved":"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz","integrity":"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA=="},{"path":"node_modules/type-is","name":"type-is","version":"2.0.1","resolved":"https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz","integrity":"sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="},{"path":"node_modules/unpipe","name":"unpipe","version":"1.0.0","resolved":"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz","integrity":"sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="},{"path":"node_modules/vary","name":"vary","version":"1.1.2","resolved":"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz","integrity":"sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg=="},{"path":"node_modules/which","name":"which","version":"2.0.2","resolved":"https://registry.npmjs.org/which/-/which-2.0.2.tgz","integrity":"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="},{"path":"node_modules/wrappy","name":"wrappy","version":"1.0.2","resolved":"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz","integrity":"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="},{"path":"node_modules/yallist","name":"yallist","version":"5.0.0","resolved":"https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz","integrity":"sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="},{"path":"node_modules/zod","name":"zod","version":"4.4.3","resolved":"https://registry.npmjs.org/zod/-/zod-4.4.3.tgz","integrity":"sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="},{"path":"node_modules/zod-to-json-schema","name":"zod-to-json-schema","version":"3.25.2","resolved":"https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz","integrity":"sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="}]}
package/docs/t3-code.md CHANGED
@@ -5,6 +5,55 @@ Keep the normal Claude instance for its existing subscription. The extra
5
5
  instance uses the installed Claude Code harness, Ditto Router inference, and
6
6
  the Router's endpoint tools and optimizations.
7
7
 
8
+ ## Automatic setup
9
+
10
+ Preview a dedicated Claude provider using local CLIProxy inference and the
11
+ selected endpoint's MCP tools:
12
+
13
+ ```sh
14
+ heyditto t3 setup --endpoint ditto-dev --inference cliproxy --dry-run
15
+ ```
16
+
17
+ Quit T3 Code (or stop its background service yourself), then apply:
18
+
19
+ ```sh
20
+ heyditto t3 setup --endpoint ditto-dev --inference cliproxy
21
+ ```
22
+
23
+ Keep T3 closed until setup finishes. Reopen it and choose **Claude CLIProxy +
24
+ Ditto** in a new chat. The command installs a private launcher, creates an
25
+ isolated Claude config directory, and adds the `claude_ditto_cliproxy` provider.
26
+ It preserves other providers and settings, saves an exact private backup before
27
+ replacing settings, and can be rerun without duplicating the provider. It does
28
+ not mint keys, copy credentials, change the saved default endpoint, stop active
29
+ chats, or send inference requests. Session keys are minted by the launcher when
30
+ a chat starts and revoked on normal exit.
31
+
32
+ Use `--inference router` for Router inference instead. `--instance` and `--name`
33
+ choose a separate provider id and label. An id belonging to another provider is
34
+ refused rather than overwritten. To update a provider created by this command,
35
+ rerun setup with its id and the new endpoint or inference mode. Its Claude home
36
+ stays the same, and its old launcher is kept intact.
37
+
38
+ `--base-dir` selects a local T3 installation, defaulting to `T3CODE_HOME` or
39
+ `~/.t3`. Pass the base directory, not its `userdata` child. T3 must already have
40
+ been initialized there. `--heyditto-bin` and `--claude-bin` override executable
41
+ detection. `--json` prints a summary with paths and route choices, never the
42
+ existing settings or their secrets.
43
+
44
+ T3 CLI v0.1.7 has no provider-settings command. This shortcut updates its local
45
+ `userdata/settings.json` while the server is stopped, rather than invoking a
46
+ nonexistent `t3 provider` command or an undocumented live API. Apply refuses a
47
+ live or unreadable runtime record, changed settings, linked destinations, and
48
+ modified generated launchers. Dry runs are allowed while T3 is open. This
49
+ file-based integration was developed against T3 v0.1.7; verify it after T3
50
+ configuration-schema changes. It currently supports the Claude provider on
51
+ macOS/Linux, not native MCP attachment for Codex.
52
+
53
+ To undo, disable or remove this dedicated provider in T3; your previous providers
54
+ are preserved. Setup also prints a private backup path. Restore a whole backup
55
+ only with T3 stopped and before making later settings edits you would lose.
56
+
8
57
  ## Install the launcher
9
58
 
10
59
  Use `@heyditto/cli` **3.4.0 or newer** and a Node runtime supported by that
@@ -94,6 +143,39 @@ key. A hard kill or a failed revocation can leave that key valid until its
94
143
  expiry; the CLI reports revocation failures. No key is saved in this launcher
95
144
  or in T3's provider settings.
96
145
 
146
+ ## Local CLIProxy inference with automatic Ditto MCP tools
147
+
148
+ With CLI **3.5.0 or newer**, the same launcher can keep inference on the local
149
+ CLIProxy while attaching the selected endpoint's tools as native MCP servers.
150
+ Install the current packaged launcher; updating only the CLI does not replace
151
+ an older copy of the launcher script.
152
+
153
+ In the Claude provider's **Environment variables**, set:
154
+
155
+ | Variable | Value |
156
+ | --- | --- |
157
+ | `DITTO_T3_INFERENCE` | `cliproxy` |
158
+ | `DITTO_T3_ENDPOINT` | Your tool endpoint slug, for example `ditto-dev` |
159
+
160
+ Keep **Binary path** pointed at the installed launcher and keep the provider's
161
+ isolated **Claude config directory**. Leave **Launch arguments** empty unless
162
+ you have other Claude options to pass. The launcher auto-detects EasyCLIProxyAPI
163
+ through the CLI and uses `--cliproxy --mcp --no-remote-control`. Each launch
164
+ fetches the endpoint's current tool catalog and attaches one MCP server per app,
165
+ using a temporary endpoint key revoked on normal exit. No endpoint key belongs
166
+ in T3 settings or a static MCP JSON file.
167
+
168
+ T3's own SDK servers remain managed by T3. Verify both its tools and the Ditto
169
+ servers in a fresh session, then perform a harmless read through one Ditto tool.
170
+ A provider status or CLI version probe does not test MCP connectivity. Resume
171
+ an existing session as a separate check. Tool approvals still follow the
172
+ endpoint policy; this setting does not bypass them. Catalog setup failures stop
173
+ CLIProxy launches rather than falling back to paid Router inference.
174
+
175
+ This mode is for the Claude provider. It does not attach native MCP servers to
176
+ T3's Codex provider. Omitting `DITTO_T3_INFERENCE` (or setting it to `router`)
177
+ retains the original Router-inference behavior described above.
178
+
97
179
  ## Troubleshooting
98
180
 
99
181
  - **Missing mode flag:** the selected CLI is too old. The launcher checks
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heyditto/cli",
3
- "version": "3.5.1",
3
+ "version": "3.6.1",
4
4
  "description": "Ditto Memory CLI — save, search, fetch, and traverse the Ditto memory graph from the shell.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -51,6 +51,15 @@ if [ "$version_probe" = true ]; then
51
51
  exec "$claude_bin" "$@"
52
52
  fi
53
53
 
54
+ # Keep Router inference as the default for existing provider instances. Local
55
+ # inference needs native MCP attachment: no Router request will inject tools.
56
+ inference=${DITTO_T3_INFERENCE:-router}
57
+ case "$inference" in
58
+ router) required_flags='--no-mcp-only --no-mcp --no-remote-control'; minimum_cli=3.4.0 ;;
59
+ cliproxy) required_flags='--no-mcp-only --mcp --cliproxy --no-remote-control'; minimum_cli=3.5.0 ;;
60
+ *) fail "DITTO_T3_INFERENCE must be router or cliproxy" ;;
61
+ esac
62
+
54
63
  heyditto_bin=$(resolve_binary "${DITTO_T3_HEYDITTO_BIN:-heyditto}" heyditto DITTO_T3_HEYDITTO_BIN)
55
64
  # heyditto launches `claude` by name. Select the same executable for that child
56
65
  # and use the Node installation alongside the selected heyditto, when present.
@@ -69,9 +78,9 @@ unset CLAUDE_CODE_USE_BEDROCK CLAUDE_CODE_USE_VERTEX CLAUDE_CODE_USE_FOUNDRY
69
78
  # Old CLI versions accept unknown options as Claude passthrough. Fail before a
70
79
  # launch rather than silently forwarding our mode flags or using native auth.
71
80
  help_output=$("$heyditto_bin" claude --help 2>&1) || fail "cannot inspect heyditto; check its Node runtime and installation"
72
- for required_flag in --no-mcp-only --no-mcp --no-remote-control; do
81
+ for required_flag in $required_flags; do
73
82
  printf '%s\n' "$help_output" | grep -Eq -- "(^|[[:space:],])${required_flag}([[:space:],]|$)" ||
74
- fail "heyditto lacks $required_flag; install @heyditto/cli 3.4.0 or newer with its supported Node runtime"
83
+ fail "heyditto lacks $required_flag; install @heyditto/cli $minimum_cli or newer with its supported Node runtime"
75
84
  done
76
85
 
77
86
  # A restarted SDK may still supply its fresh-session flag beside --resume.
@@ -101,7 +110,11 @@ fi
101
110
  # Arguments after `--` are owned by the SDK, including stdin/stdout wire flags.
102
111
  # Fresh sessions share one native/trace id. Resume is resolved by heyditto's
103
112
  # existing --resume handling and must never be combined with its --session flag.
104
- set -- --no-mcp-only --no-mcp --no-remote-control -- "$@"
113
+ if [ "$inference" = cliproxy ]; then
114
+ set -- --no-mcp-only --cliproxy --mcp --no-remote-control -- "$@"
115
+ else
116
+ set -- --no-mcp-only --no-mcp --no-remote-control -- "$@"
117
+ fi
105
118
  if [ "$resuming" = false ] && [ -n "$session_id" ]; then
106
119
  set -- --session "$session_id" "$@"
107
120
  fi