@docyrus/docyrus 0.0.38 → 0.0.40
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/main.js +2780 -2716
- package/main.js.map +4 -4
- package/package.json +4 -1
- package/resources/officecli/install.mjs +111 -0
- package/resources/officecli/manifest.json +3 -0
- package/resources/pi-agent/skills/officecli/SKILL.md +2 -1
- package/server-loader.js +41 -39
- package/server-loader.js.map +3 -3
package/server-loader.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js", "../../../node_modules/.pnpm/@hono+node-server@1.19.11_hono@4.12.8/node_modules/@hono/node-server/dist/index.mjs", "../../../apps/api-cli/src/server/server-loader.ts", "../../../apps/api-cli/src/agent/envStore.ts", "../../../apps/api-cli/src/agent/packagedExtensions.ts", "../../../apps/api-cli/src/server/agentServer.ts", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/compose.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/request/constants.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/body.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/url.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/request.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/html.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/context.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/constants.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/hono-base.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/matcher.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/node.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/smart-router/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/trie-router/node.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/trie-router/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/hono.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/middleware/cors/index.js", "../../../apps/api-cli/resources/pi-agent/shared/askUserProtocol.ts", "../../../apps/api-cli/resources/pi-agent/shared/docyrusWebBrowserProtocol.ts", "../../../apps/api-cli/src/server/eventBridge.ts", "../../../apps/api-cli/src/agent/modelsConfig.ts", "../../../apps/api-cli/src/agent/authFlows.ts", "../../../apps/api-cli/src/agent/providerCatalog.ts", "../../../apps/api-cli/src/agent/authInteractivity.ts", "../../../apps/api-cli/src/server/oauthFlowManager.ts", "../../../apps/api-cli/src/server/mcpConfigService.ts", "../../../apps/api-cli/src/server/skillsService.ts", "../../../apps/api-cli/src/server/toolsService.ts", "../../../apps/api-cli/src/server/loaderRequest.ts", "../../../apps/api-cli/src/server/restrictedModelRegistry.ts", "../../../apps/api-cli/src/services/spinner.ts"],
|
|
4
|
-
"sourcesContent": ["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n", "// src/server.ts\nimport { createServer as createServerHTTP } from \"http\";\n\n// src/listener.ts\nimport { Http2ServerRequest as Http2ServerRequest2 } from \"http2\";\n\n// src/request.ts\nimport { Http2ServerRequest } from \"http2\";\nimport { Readable } from \"stream\";\nvar RequestError = class extends Error {\n constructor(message, options) {\n super(message, options);\n this.name = \"RequestError\";\n }\n};\nvar toRequestError = (e) => {\n if (e instanceof RequestError) {\n return e;\n }\n return new RequestError(e.message, { cause: e });\n};\nvar GlobalRequest = global.Request;\nvar Request = class extends GlobalRequest {\n constructor(input, options) {\n if (typeof input === \"object\" && getRequestCache in input) {\n input = input[getRequestCache]();\n }\n if (typeof options?.body?.getReader !== \"undefined\") {\n ;\n options.duplex ??= \"half\";\n }\n super(input, options);\n }\n};\nvar newHeadersFromIncoming = (incoming) => {\n const headerRecord = [];\n const rawHeaders = incoming.rawHeaders;\n for (let i = 0; i < rawHeaders.length; i += 2) {\n const { [i]: key, [i + 1]: value } = rawHeaders;\n if (key.charCodeAt(0) !== /*:*/\n 58) {\n headerRecord.push([key, value]);\n }\n }\n return new Headers(headerRecord);\n};\nvar wrapBodyStream = Symbol(\"wrapBodyStream\");\nvar newRequestFromIncoming = (method, url, headers, incoming, abortController) => {\n const init = {\n method,\n headers,\n signal: abortController.signal\n };\n if (method === \"TRACE\") {\n init.method = \"GET\";\n const req = new Request(url, init);\n Object.defineProperty(req, \"method\", {\n get() {\n return \"TRACE\";\n }\n });\n return req;\n }\n if (!(method === \"GET\" || method === \"HEAD\")) {\n if (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) {\n init.body = new ReadableStream({\n start(controller) {\n controller.enqueue(incoming.rawBody);\n controller.close();\n }\n });\n } else if (incoming[wrapBodyStream]) {\n let reader;\n init.body = new ReadableStream({\n async pull(controller) {\n try {\n reader ||= Readable.toWeb(incoming).getReader();\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n }\n });\n } else {\n init.body = Readable.toWeb(incoming);\n }\n }\n return new Request(url, init);\n};\nvar getRequestCache = Symbol(\"getRequestCache\");\nvar requestCache = Symbol(\"requestCache\");\nvar incomingKey = Symbol(\"incomingKey\");\nvar urlKey = Symbol(\"urlKey\");\nvar headersKey = Symbol(\"headersKey\");\nvar abortControllerKey = Symbol(\"abortControllerKey\");\nvar getAbortController = Symbol(\"getAbortController\");\nvar requestPrototype = {\n get method() {\n return this[incomingKey].method || \"GET\";\n },\n get url() {\n return this[urlKey];\n },\n get headers() {\n return this[headersKey] ||= newHeadersFromIncoming(this[incomingKey]);\n },\n [getAbortController]() {\n this[getRequestCache]();\n return this[abortControllerKey];\n },\n [getRequestCache]() {\n this[abortControllerKey] ||= new AbortController();\n return this[requestCache] ||= newRequestFromIncoming(\n this.method,\n this[urlKey],\n this.headers,\n this[incomingKey],\n this[abortControllerKey]\n );\n }\n};\n[\n \"body\",\n \"bodyUsed\",\n \"cache\",\n \"credentials\",\n \"destination\",\n \"integrity\",\n \"mode\",\n \"redirect\",\n \"referrer\",\n \"referrerPolicy\",\n \"signal\",\n \"keepalive\"\n].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n get() {\n return this[getRequestCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n value: function() {\n return this[getRequestCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(requestPrototype, Request.prototype);\nvar newRequest = (incoming, defaultHostname) => {\n const req = Object.create(requestPrototype);\n req[incomingKey] = incoming;\n const incomingUrl = incoming.url || \"\";\n if (incomingUrl[0] !== \"/\" && // short-circuit for performance. most requests are relative URL.\n (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n if (incoming instanceof Http2ServerRequest) {\n throw new RequestError(\"Absolute URL for :path is not allowed in HTTP/2\");\n }\n try {\n const url2 = new URL(incomingUrl);\n req[urlKey] = url2.href;\n } catch (e) {\n throw new RequestError(\"Invalid absolute URL\", { cause: e });\n }\n return req;\n }\n const host = (incoming instanceof Http2ServerRequest ? incoming.authority : incoming.headers.host) || defaultHostname;\n if (!host) {\n throw new RequestError(\"Missing host header\");\n }\n let scheme;\n if (incoming instanceof Http2ServerRequest) {\n scheme = incoming.scheme;\n if (!(scheme === \"http\" || scheme === \"https\")) {\n throw new RequestError(\"Unsupported scheme\");\n }\n } else {\n scheme = incoming.socket && incoming.socket.encrypted ? \"https\" : \"http\";\n }\n const url = new URL(`${scheme}://${host}${incomingUrl}`);\n if (url.hostname.length !== host.length && url.hostname !== host.replace(/:\\d+$/, \"\")) {\n throw new RequestError(\"Invalid host header\");\n }\n req[urlKey] = url.href;\n return req;\n};\n\n// src/response.ts\nvar responseCache = Symbol(\"responseCache\");\nvar getResponseCache = Symbol(\"getResponseCache\");\nvar cacheKey = Symbol(\"cache\");\nvar GlobalResponse = global.Response;\nvar Response2 = class _Response {\n #body;\n #init;\n [getResponseCache]() {\n delete this[cacheKey];\n return this[responseCache] ||= new GlobalResponse(this.#body, this.#init);\n }\n constructor(body, init) {\n let headers;\n this.#body = body;\n if (init instanceof _Response) {\n const cachedGlobalResponse = init[responseCache];\n if (cachedGlobalResponse) {\n this.#init = cachedGlobalResponse;\n this[getResponseCache]();\n return;\n } else {\n this.#init = init.#init;\n headers = new Headers(init.#init.headers);\n }\n } else {\n this.#init = init;\n }\n if (typeof body === \"string\" || typeof body?.getReader !== \"undefined\" || body instanceof Blob || body instanceof Uint8Array) {\n ;\n this[cacheKey] = [init?.status || 200, body, headers || init?.headers];\n }\n }\n get headers() {\n const cache = this[cacheKey];\n if (cache) {\n if (!(cache[2] instanceof Headers)) {\n cache[2] = new Headers(\n cache[2] || { \"content-type\": \"text/plain; charset=UTF-8\" }\n );\n }\n return cache[2];\n }\n return this[getResponseCache]().headers;\n }\n get status() {\n return this[cacheKey]?.[0] ?? this[getResponseCache]().status;\n }\n get ok() {\n const status = this.status;\n return status >= 200 && status < 300;\n }\n};\n[\"body\", \"bodyUsed\", \"redirected\", \"statusText\", \"trailers\", \"type\", \"url\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n get() {\n return this[getResponseCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n value: function() {\n return this[getResponseCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(Response2, GlobalResponse);\nObject.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);\n\n// src/utils.ts\nasync function readWithoutBlocking(readPromise) {\n return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);\n}\nfunction writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {\n const cancel = (error) => {\n reader.cancel(error).catch(() => {\n });\n };\n writable.on(\"close\", cancel);\n writable.on(\"error\", cancel);\n (currentReadPromise ?? reader.read()).then(flow, handleStreamError);\n return reader.closed.finally(() => {\n writable.off(\"close\", cancel);\n writable.off(\"error\", cancel);\n });\n function handleStreamError(error) {\n if (error) {\n writable.destroy(error);\n }\n }\n function onDrain() {\n reader.read().then(flow, handleStreamError);\n }\n function flow({ done, value }) {\n try {\n if (done) {\n writable.end();\n } else if (!writable.write(value)) {\n writable.once(\"drain\", onDrain);\n } else {\n return reader.read().then(flow, handleStreamError);\n }\n } catch (e) {\n handleStreamError(e);\n }\n }\n}\nfunction writeFromReadableStream(stream, writable) {\n if (stream.locked) {\n throw new TypeError(\"ReadableStream is locked.\");\n } else if (writable.destroyed) {\n return;\n }\n return writeFromReadableStreamDefaultReader(stream.getReader(), writable);\n}\nvar buildOutgoingHttpHeaders = (headers) => {\n const res = {};\n if (!(headers instanceof Headers)) {\n headers = new Headers(headers ?? void 0);\n }\n const cookies = [];\n for (const [k, v] of headers) {\n if (k === \"set-cookie\") {\n cookies.push(v);\n } else {\n res[k] = v;\n }\n }\n if (cookies.length > 0) {\n res[\"set-cookie\"] = cookies;\n }\n res[\"content-type\"] ??= \"text/plain; charset=UTF-8\";\n return res;\n};\n\n// src/utils/response/constants.ts\nvar X_ALREADY_SENT = \"x-hono-already-sent\";\n\n// src/globals.ts\nimport crypto from \"crypto\";\nif (typeof global.crypto === \"undefined\") {\n global.crypto = crypto;\n}\n\n// src/listener.ts\nvar outgoingEnded = Symbol(\"outgoingEnded\");\nvar handleRequestError = () => new Response(null, {\n status: 400\n});\nvar handleFetchError = (e) => new Response(null, {\n status: e instanceof Error && (e.name === \"TimeoutError\" || e.constructor.name === \"TimeoutError\") ? 504 : 500\n});\nvar handleResponseError = (e, outgoing) => {\n const err = e instanceof Error ? e : new Error(\"unknown error\", { cause: e });\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") {\n console.info(\"The user aborted a request.\");\n } else {\n console.error(e);\n if (!outgoing.headersSent) {\n outgoing.writeHead(500, { \"Content-Type\": \"text/plain\" });\n }\n outgoing.end(`Error: ${err.message}`);\n outgoing.destroy(err);\n }\n};\nvar flushHeaders = (outgoing) => {\n if (\"flushHeaders\" in outgoing && outgoing.writable) {\n outgoing.flushHeaders();\n }\n};\nvar responseViaCache = async (res, outgoing) => {\n let [status, body, header] = res[cacheKey];\n let hasContentLength = false;\n if (!header) {\n header = { \"content-type\": \"text/plain; charset=UTF-8\" };\n } else if (header instanceof Headers) {\n hasContentLength = header.has(\"content-length\");\n header = buildOutgoingHttpHeaders(header);\n } else if (Array.isArray(header)) {\n const headerObj = new Headers(header);\n hasContentLength = headerObj.has(\"content-length\");\n header = buildOutgoingHttpHeaders(headerObj);\n } else {\n for (const key in header) {\n if (key.length === 14 && key.toLowerCase() === \"content-length\") {\n hasContentLength = true;\n break;\n }\n }\n }\n if (!hasContentLength) {\n if (typeof body === \"string\") {\n header[\"Content-Length\"] = Buffer.byteLength(body);\n } else if (body instanceof Uint8Array) {\n header[\"Content-Length\"] = body.byteLength;\n } else if (body instanceof Blob) {\n header[\"Content-Length\"] = body.size;\n }\n }\n outgoing.writeHead(status, header);\n if (typeof body === \"string\" || body instanceof Uint8Array) {\n outgoing.end(body);\n } else if (body instanceof Blob) {\n outgoing.end(new Uint8Array(await body.arrayBuffer()));\n } else {\n flushHeaders(outgoing);\n await writeFromReadableStream(body, outgoing)?.catch(\n (e) => handleResponseError(e, outgoing)\n );\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar isPromise = (res) => typeof res.then === \"function\";\nvar responseViaResponseObject = async (res, outgoing, options = {}) => {\n if (isPromise(res)) {\n if (options.errorHandler) {\n try {\n res = await res;\n } catch (err) {\n const errRes = await options.errorHandler(err);\n if (!errRes) {\n return;\n }\n res = errRes;\n }\n } else {\n res = await res.catch(handleFetchError);\n }\n }\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);\n if (res.body) {\n const reader = res.body.getReader();\n const values = [];\n let done = false;\n let currentReadPromise = void 0;\n if (resHeaderRecord[\"transfer-encoding\"] !== \"chunked\") {\n let maxReadCount = 2;\n for (let i = 0; i < maxReadCount; i++) {\n currentReadPromise ||= reader.read();\n const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {\n console.error(e);\n done = true;\n });\n if (!chunk) {\n if (i === 1) {\n await new Promise((resolve) => setTimeout(resolve));\n maxReadCount = 3;\n continue;\n }\n break;\n }\n currentReadPromise = void 0;\n if (chunk.value) {\n values.push(chunk.value);\n }\n if (chunk.done) {\n done = true;\n break;\n }\n }\n if (done && !(\"content-length\" in resHeaderRecord)) {\n resHeaderRecord[\"content-length\"] = values.reduce((acc, value) => acc + value.length, 0);\n }\n }\n outgoing.writeHead(res.status, resHeaderRecord);\n values.forEach((value) => {\n ;\n outgoing.write(value);\n });\n if (done) {\n outgoing.end();\n } else {\n if (values.length === 0) {\n flushHeaders(outgoing);\n }\n await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);\n }\n } else if (resHeaderRecord[X_ALREADY_SENT]) {\n } else {\n outgoing.writeHead(res.status, resHeaderRecord);\n outgoing.end();\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar getRequestListener = (fetchCallback, options = {}) => {\n const autoCleanupIncoming = options.autoCleanupIncoming ?? true;\n if (options.overrideGlobalObjects !== false && global.Request !== Request) {\n Object.defineProperty(global, \"Request\", {\n value: Request\n });\n Object.defineProperty(global, \"Response\", {\n value: Response2\n });\n }\n return async (incoming, outgoing) => {\n let res, req;\n try {\n req = newRequest(incoming, options.hostname);\n let incomingEnded = !autoCleanupIncoming || incoming.method === \"GET\" || incoming.method === \"HEAD\";\n if (!incomingEnded) {\n ;\n incoming[wrapBodyStream] = true;\n incoming.on(\"end\", () => {\n incomingEnded = true;\n });\n if (incoming instanceof Http2ServerRequest2) {\n ;\n outgoing[outgoingEnded] = () => {\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n outgoing.destroy();\n });\n }\n });\n }\n };\n }\n }\n outgoing.on(\"close\", () => {\n const abortController = req[abortControllerKey];\n if (abortController) {\n if (incoming.errored) {\n req[abortControllerKey].abort(incoming.errored.toString());\n } else if (!outgoing.writableFinished) {\n req[abortControllerKey].abort(\"Client connection prematurely closed.\");\n }\n }\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n });\n }\n });\n }\n });\n res = fetchCallback(req, { incoming, outgoing });\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n } catch (e) {\n if (!res) {\n if (options.errorHandler) {\n res = await options.errorHandler(req ? e : toRequestError(e));\n if (!res) {\n return;\n }\n } else if (!req) {\n res = handleRequestError();\n } else {\n res = handleFetchError(e);\n }\n } else {\n return handleResponseError(e, outgoing);\n }\n }\n try {\n return await responseViaResponseObject(res, outgoing, options);\n } catch (e) {\n return handleResponseError(e, outgoing);\n }\n };\n};\n\n// src/server.ts\nvar createAdaptorServer = (options) => {\n const fetchCallback = options.fetch;\n const requestListener = getRequestListener(fetchCallback, {\n hostname: options.hostname,\n overrideGlobalObjects: options.overrideGlobalObjects,\n autoCleanupIncoming: options.autoCleanupIncoming\n });\n const createServer = options.createServer || createServerHTTP;\n const server = createServer(options.serverOptions || {}, requestListener);\n return server;\n};\nvar serve = (options, listeningListener) => {\n const server = createAdaptorServer(options);\n server.listen(options?.port ?? 3e3, options.hostname, () => {\n const serverInfo = server.address();\n listeningListener && listeningListener(serverInfo);\n });\n return server;\n};\nexport {\n RequestError,\n createAdaptorServer,\n getRequestListener,\n serve\n};\n", "import { existsSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport { join, resolve as resolvePath } from \"node:path\";\nimport picocolors from \"picocolors\";\nimport { AgentEnvStore } from \"../agent/envStore\";\nimport { resolvePackagedExtensionPaths } from \"../agent/packagedExtensions\";\nimport type { IDocyrusThinkingLevel } from \"../agent/authInteractivity\";\nimport { createAgentServer } from \"./agentServer\";\nimport type { IAgentSessionEvent } from \"./eventBridge\";\nimport { parseServerLoaderRequest, type IDocyrusPiProfileId, type IDocyrusPiServerLoaderRequest } from \"./loaderRequest\";\nimport { createServerRestrictedModelRegistry } from \"./restrictedModelRegistry\";\nimport { createSpinner } from \"../services/spinner\";\n\ninterface IPiExports {\n AuthStorage: {\n create(path?: string): any;\n };\n DefaultResourceLoader: new(config: IDefaultResourceLoaderConfig) => { reload(): Promise<void> };\n ModelRegistry: {\n create(authStorage: any, modelsJsonPath?: string): any;\n inMemory(authStorage: any): any;\n };\n SettingsManager: {\n create(cwd?: string, agentDir?: string): any;\n };\n SessionManager: {\n create(cwd: string, sessionDir?: string): any;\n list(cwd: string, sessionDir?: string, onProgress?: unknown): Promise<any[]>;\n open(path: string, sessionDir?: string): any;\n };\n createAgentSession(options: Record<string, unknown>): Promise<{\n session: any;\n extensionsResult: {\n runtime: {\n flagValues: Map<string, boolean | string>;\n getCommands?: () => Array<{ name: string; description?: string }>;\n };\n };\n modelFallbackMessage?: string;\n }>;\n createBashTool(cwd: string): unknown;\n createEditTool(cwd: string): unknown;\n createFindTool(cwd: string): unknown;\n createGrepTool(cwd: string): unknown;\n createLsTool(cwd: string): unknown;\n createReadTool(cwd: string): unknown;\n createWriteTool(cwd: string): unknown;\n}\n\ninterface IPiSkillSummary {\n name: string;\n [key: string]: unknown;\n}\n\ninterface IResourceLoaderSkillState {\n skills: IPiSkillSummary[];\n diagnostics: unknown[];\n}\n\ninterface IDefaultResourceLoaderConfig {\n cwd?: string;\n agentDir?: string;\n settingsManager?: unknown;\n additionalExtensionPaths?: string[];\n skillsOverride?: (current: IResourceLoaderSkillState) => IResourceLoaderSkillState;\n systemPrompt?: string;\n}\n\nfunction readRequiredEnv(name: string): string {\n const value = process.env[name];\n if (!value || value.trim().length === 0) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n\n return value;\n}\n\nfunction readLoaderRequest(): IDocyrusPiServerLoaderRequest {\n return parseServerLoaderRequest(readRequiredEnv(\"DOCYRUS_PI_REQUEST\"));\n}\n\nasync function loadPiExports(): Promise<IPiExports> {\n const piPackageDir = readRequiredEnv(\"PI_PACKAGE_DIR\");\n const moduleUrl = pathToFileURL(join(piPackageDir, \"dist\", \"index.js\")).href;\n return await import(moduleUrl) as IPiExports;\n}\n\nfunction resolvePackagedPiResourceRoot(): string {\n const candidates = [\n resolvePath(process.cwd(), \"apps/api-cli/resources/pi-agent\"),\n resolvePath(__dirname, \"../resources/pi-agent\"),\n resolvePath(__dirname, \"resources/pi-agent\"),\n resolvePath(process.cwd(), \"dist/apps/api-cli/resources/pi-agent\"),\n ];\n\n const resolved = candidates.find((candidate) => existsSync(candidate));\n if (!resolved) {\n throw new Error(`Unable to locate pi agent resources. Checked: ${candidates.join(\", \")}`);\n }\n\n return resolved;\n}\n\nfunction setProcessArgValue(flag: string, value: string): void {\n const existingIndex = process.argv.indexOf(flag);\n if (existingIndex >= 0) {\n if (existingIndex + 1 < process.argv.length) {\n process.argv[existingIndex + 1] = value;\n return;\n }\n\n process.argv.push(value);\n return;\n }\n\n process.argv.push(flag, value);\n}\n\nfunction buildTools(profile: IDocyrusPiProfileId, cwd: string, pi: IPiExports) {\n if (profile === \"agent\") {\n return [\n pi.createReadTool(cwd),\n pi.createBashTool(cwd),\n pi.createGrepTool(cwd),\n pi.createFindTool(cwd),\n pi.createLsTool(cwd),\n ];\n }\n\n return [\n pi.createReadTool(cwd),\n pi.createBashTool(cwd),\n pi.createEditTool(cwd),\n pi.createWriteTool(cwd),\n pi.createGrepTool(cwd),\n pi.createFindTool(cwd),\n pi.createLsTool(cwd),\n ];\n}\n\nfunction resolveRequestedModel(params: {\n request: IDocyrusPiServerLoaderRequest;\n modelRegistry: { getAvailable(): Array<{ provider: string; id: string }>; find(provider: string, modelId: string): unknown | undefined };\n}): unknown | undefined {\n const { request, modelRegistry } = params;\n const requestedProvider = request.provider?.trim();\n const requestedModel = request.model?.trim();\n\n if (!requestedProvider && !requestedModel) {\n return undefined;\n }\n\n if (requestedProvider && requestedModel) {\n const normalizedModelId = requestedModel.startsWith(`${requestedProvider}/`)\n ? requestedModel.slice(requestedProvider.length + 1)\n : requestedModel;\n return modelRegistry.find(requestedProvider, normalizedModelId);\n }\n\n if (requestedModel && requestedModel.includes(\"/\")) {\n const slashIndex = requestedModel.indexOf(\"/\");\n return modelRegistry.find(requestedModel.slice(0, slashIndex).trim(), requestedModel.slice(slashIndex + 1).trim());\n }\n\n if (requestedModel) {\n const availableModels = modelRegistry.getAvailable();\n const exactMatches = availableModels.filter((model) => model.id === requestedModel);\n if (exactMatches.length === 1) {\n return exactMatches[0];\n }\n\n return availableModels.find((model) => model.id.includes(requestedModel));\n }\n\n return undefined;\n}\n\nfunction renderStartupSplash(version: string): void {\n process.stderr.write(\n `\\n ${picocolors.bold(\"DOCYRUS SERVER\")} ${picocolors.dim(`v${version}`)}\\n` +\n ` ${picocolors.green(\"Starting agent server...\")}\\n`,\n );\n}\n\nfunction createServerSessionAdapter(params: {\n session: any;\n extensionsResult: {\n runtime: {\n getCommands?: () => Array<{ name: string; description?: string }>;\n };\n };\n}) {\n return {\n id: params.session.id,\n get isStreaming() {\n return params.session.isStreaming;\n },\n get model() {\n return params.session.model;\n },\n get thinkingLevel() {\n return params.session.thinkingLevel;\n },\n subscribe(listener: (event: IAgentSessionEvent) => void) {\n return params.session.subscribe(listener);\n },\n prompt(text: string) {\n return params.session.prompt(text);\n },\n abort() {\n return params.session.abort();\n },\n setModel(model: unknown) {\n return params.session.setModel(model);\n },\n setThinkingLevel(level: IDocyrusThinkingLevel) {\n return params.session.setThinkingLevel(level);\n },\n getAvailableThinkingLevels() {\n return params.session.getAvailableThinkingLevels();\n },\n supportsThinking() {\n return params.session.supportsThinking();\n },\n listCommands() {\n const getCommands = params.extensionsResult.runtime.getCommands;\n return typeof getCommands === \"function\" ? getCommands() : [];\n },\n };\n}\n\nasync function ensureServerSelectableSessionModel(params: {\n session: {\n model?: { provider: string; id: string };\n setModel(model: unknown): Promise<void>;\n };\n modelRegistry: {\n getAvailable(): Array<{ provider: string; id: string }>;\n };\n}): Promise<void> {\n const availableModels = params.modelRegistry.getAvailable();\n if (availableModels.length === 0) {\n return;\n }\n\n const currentModel = params.session.model;\n const currentModelIsSelectable = currentModel\n ? availableModels.some((model) => model.provider === currentModel.provider && model.id === currentModel.id)\n : false;\n\n if (!currentModelIsSelectable) {\n await params.session.setModel(availableModels[0]);\n }\n}\n\nasync function main(): Promise<void> {\n const request = readLoaderRequest();\n const pi = await loadPiExports();\n const cwd = process.cwd();\n const agentDir = readRequiredEnv(\"PI_CODING_AGENT_DIR\");\n const version = process.env.DOCYRUS_PI_VERSION || \"dev\";\n const resourceRoot = resolvePackagedPiResourceRoot();\n const packagedExtensionPaths = resolvePackagedExtensionPaths(resourceRoot, \"server\");\n const mcpConfigPath = join(agentDir, \"mcp.json\");\n const hasPackagedMcpAdapter = packagedExtensionPaths.some((extensionPath) => extensionPath.includes(\"pi-mcp-adapter\"));\n const envStore = new AgentEnvStore(join(agentDir, \"env.json\"));\n await envStore.hydrateProcessEnv(process.env);\n\n if (hasPackagedMcpAdapter) {\n setProcessArgValue(\"--mcp-config\", mcpConfigPath);\n }\n\n const authStorage = pi.AuthStorage.create(join(agentDir, \"auth.json\"));\n const settingsManager = pi.SettingsManager.create(cwd, agentDir);\n const modelsJsonPath = join(agentDir, \"models.json\");\n const modelRegistry = createServerRestrictedModelRegistry(pi.ModelRegistry.create(authStorage, modelsJsonPath));\n const quietStartup = !request.verbose;\n\n if (quietStartup) {\n process.env.PI_SKIP_VERSION_CHECK = \"1\";\n settingsManager.setQuietStartup(true);\n settingsManager.setCollapseChangelog(true);\n settingsManager.setLastChangelogVersion(version);\n }\n\n renderStartupSplash(version);\n const spinner = createSpinner(\"Loading agent...\");\n\n const requestedModel = resolveRequestedModel({\n request,\n modelRegistry,\n });\n\n if (request.apiKey) {\n const apiKeyProvider = request.provider?.trim() || (requestedModel as { provider?: string } | undefined)?.provider;\n if (!apiKeyProvider) {\n throw new Error(\"--api-key requires a provider or a resolvable model.\");\n }\n\n authStorage.setRuntimeApiKey(apiKeyProvider, request.apiKey);\n }\n\n const sessionManager = pi.SessionManager.create(cwd, request.sessionDir);\n\n spinner.update(\"Loading resources...\");\n const resourceLoader = new pi.DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n additionalExtensionPaths: packagedExtensionPaths,\n skillsOverride: ({ skills, diagnostics }) => ({\n skills: skills.filter((skill) => skill.name !== \"docyrus-chrome-devtools-cli\"),\n diagnostics,\n }),\n systemPrompt: join(\n resourceRoot,\n \"prompts\",\n request.profile === \"agent\" ? \"agent-system.md\" : \"coder-system.md\",\n ),\n });\n await resourceLoader.reload();\n\n spinner.update(\"Creating session...\");\n const { session, extensionsResult } = await pi.createAgentSession({\n cwd,\n agentDir,\n authStorage,\n modelRegistry,\n resourceLoader,\n settingsManager,\n sessionManager,\n tools: buildTools(request.profile, cwd, pi),\n model: requestedModel,\n thinkingLevel: request.thinking,\n });\n\n if (hasPackagedMcpAdapter) {\n extensionsResult.runtime.flagValues.set(\"mcp-config\", mcpConfigPath);\n }\n\n await ensureServerSelectableSessionModel({\n session,\n modelRegistry,\n });\n\n spinner.stop();\n\n if (!session.model) {\n process.stderr.write(\n ` ${picocolors.yellow(\"No model configured yet.\")} ` +\n \"Server will start so the client can complete provider login.\\n\",\n );\n }\n\n await createAgentServer({\n session: createServerSessionAdapter({ session, extensionsResult }),\n authToken: request.auth,\n port: request.port,\n sessionManager: {\n list: () => pi.SessionManager.list(cwd, request.sessionDir),\n open: (path: string) => pi.SessionManager.open(path, request.sessionDir),\n },\n modelRegistry: modelRegistry as unknown as {\n getAvailable: () => Array<{ provider: string; id: string }>;\n getAll: () => Array<{ provider: string; id: string; name?: string; reasoning?: boolean; contextWindow?: number; maxTokens?: number }>;\n find: (provider: string, modelId: string) => unknown | undefined;\n refresh: () => void;\n },\n authRuntime: {\n authStorage,\n envStore,\n settingsManager,\n modelsJsonPath,\n },\n context: {\n cwd,\n profile: request.profile,\n agentDir,\n version,\n sessionDir: request.sessionDir ?? null,\n thinkingLevel: request.thinking ?? null,\n },\n onCreateSession: async() => {\n const { session: freshSession, extensionsResult: freshExtensionsResult } = await pi.createAgentSession({\n cwd,\n agentDir,\n authStorage,\n modelRegistry,\n resourceLoader,\n settingsManager,\n sessionManager,\n tools: buildTools(request.profile, cwd, pi),\n model: requestedModel,\n thinkingLevel: request.thinking,\n });\n\n await ensureServerSelectableSessionModel({\n session: freshSession,\n modelRegistry,\n });\n\n return createServerSessionAdapter({\n session: freshSession,\n extensionsResult: freshExtensionsResult,\n });\n },\n onResumeSession: async(sessionId: string) => {\n const sessions = await pi.SessionManager.list(cwd, request.sessionDir);\n const match = sessions.find((s: { id: string }) => s.id === sessionId);\n if (!match) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const resumeCwd = (match as { cwd?: string }).cwd || cwd;\n const resumedSessionManager = pi.SessionManager.open(\n (match as { path: string }).path,\n request.sessionDir,\n );\n\n const { session: resumedSession, extensionsResult: resumedExtensionsResult } = await pi.createAgentSession({\n cwd: resumeCwd,\n agentDir,\n authStorage,\n modelRegistry,\n resourceLoader,\n settingsManager,\n sessionManager: resumedSessionManager,\n tools: buildTools(request.profile, resumeCwd, pi),\n model: requestedModel,\n thinkingLevel: request.thinking,\n });\n\n await ensureServerSelectableSessionModel({\n session: resumedSession,\n modelRegistry,\n });\n\n return createServerSessionAdapter({\n session: resumedSession,\n extensionsResult: resumedExtensionsResult,\n });\n },\n });\n}\n\nvoid main().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n});\n", "import { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nexport interface IAgentEnvStoreState {\n version: 1;\n values: Record<string, string>;\n}\n\nfunction createDefaultState(): IAgentEnvStoreState {\n return {\n version: 1,\n values: {},\n };\n}\n\nfunction normalizeState(state: IAgentEnvStoreState): IAgentEnvStoreState {\n const values: Record<string, string> = {};\n for (const [key, value] of Object.entries(state.values || {})) {\n const normalizedKey = key.trim();\n const normalizedValue = value.trim();\n if (!normalizedKey || !normalizedValue) {\n continue;\n }\n values[normalizedKey] = normalizedValue;\n }\n\n return {\n version: 1,\n values,\n };\n}\n\nexport class AgentEnvStore {\n constructor(private readonly filePath: string) {}\n\n getFilePath(): string {\n return this.filePath;\n }\n\n async readState(): Promise<IAgentEnvStoreState> {\n try {\n const raw = await readFile(this.filePath, \"utf8\");\n const parsed = JSON.parse(raw) as IAgentEnvStoreState;\n if (!parsed || parsed.version !== 1 || typeof parsed.values !== \"object\" || parsed.values === null) {\n return createDefaultState();\n }\n\n return normalizeState(parsed);\n }\n catch (error: unknown) {\n if (\n typeof error === \"object\"\n && error !== null\n && \"code\" in error\n && (error as { code?: string }).code === \"ENOENT\"\n ) {\n return createDefaultState();\n }\n\n return createDefaultState();\n }\n }\n\n async writeState(state: IAgentEnvStoreState): Promise<void> {\n const normalized = normalizeState(state);\n const directory = dirname(this.filePath);\n\n await mkdir(directory, {\n recursive: true,\n mode: 0o700,\n });\n\n await writeFile(this.filePath, `${JSON.stringify(normalized, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n\n await chmod(this.filePath, 0o600);\n }\n\n async setMany(values: Record<string, string>): Promise<void> {\n const state = await this.readState();\n await this.writeState({\n version: 1,\n values: {\n ...state.values,\n ...Object.fromEntries(\n Object.entries(values)\n .map(([key, value]) => [key.trim(), value.trim()] as const)\n .filter(([key, value]) => key.length > 0 && value.length > 0),\n ),\n },\n });\n }\n\n async removeMany(keys: string[]): Promise<void> {\n const state = await this.readState();\n const nextValues = { ...state.values };\n\n for (const key of keys) {\n delete nextValues[key];\n }\n\n await this.writeState({\n version: 1,\n values: nextValues,\n });\n }\n\n async hydrateProcessEnv(env: NodeJS.ProcessEnv = process.env): Promise<Record<string, string>> {\n const state = await this.readState();\n for (const [key, value] of Object.entries(state.values)) {\n if (!env[key]) {\n env[key] = value;\n }\n }\n\n return state.values;\n }\n\n async hasAny(keys: string[]): Promise<boolean> {\n const state = await this.readState();\n return keys.some((key) => Boolean(state.values[key] || process.env[key]));\n }\n}\n", "import { existsSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport type IPackagedExtensionRuntime = \"server\" | \"terminal\";\n\nconst SERVER_ONLY_PACKAGED_EXTENSION_NAMES = new Set([\"docyrus-web-browser\"]);\n\nfunction isPackagedExtensionEntry(entryName: string, isDirectory: boolean): boolean {\n return isDirectory || entryName.endsWith(\".ts\") || entryName.endsWith(\".js\");\n}\n\nfunction getPackagedExtensionName(entryName: string): string {\n return entryName.replace(/\\.(ts|js)$/u, \"\");\n}\n\nexport function resolvePackagedExtensionPaths(\n resourceRoot: string,\n runtime: IPackagedExtensionRuntime = \"terminal\",\n): string[] {\n const extensionsRoot = join(resourceRoot, \"extensions\");\n if (!existsSync(extensionsRoot)) {\n return [];\n }\n\n return readdirSync(extensionsRoot, {\n withFileTypes: true,\n })\n .filter((entry) => isPackagedExtensionEntry(entry.name, entry.isDirectory()))\n .filter((entry) => runtime === \"server\" || !SERVER_ONLY_PACKAGED_EXTENSION_NAMES.has(getPackagedExtensionName(entry.name)))\n .map((entry) => join(extensionsRoot, entry.name))\n .sort((left, right) => left.localeCompare(right));\n}\n", "import { execFile, spawn, type ChildProcess } from \"node:child_process\";\nimport { createHash, timingSafeEqual } from \"node:crypto\";\nimport { readdir, readFile, writeFile, mkdir, rm, stat, rename } from \"node:fs/promises\";\nimport { basename, join, resolve, relative, sep } from \"node:path\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nimport type { AuthStorage, SettingsManager } from \"@mariozechner/pi-coding-agent\";\nimport { createEventBridge } from \"./eventBridge\";\nimport type { IAgentSessionEvent } from \"./eventBridge\";\nimport {\n createAskUserToolCallId,\n formatAskUserResponsePrompt,\n parseAskUserRequestFromText,\n parseAskUserResponseFromToolOutput,\n type IAskUserRequest,\n type IAskUserResponse,\n} from \"../../resources/pi-agent/shared/askUserProtocol\";\nimport {\n createDocyrusWebBrowserToolCallId,\n formatDocyrusWebBrowserToolResponsePrompt,\n isDocyrusWebBrowserToolName,\n normalizeDocyrusWebBrowserToolRequest,\n parseDocyrusWebBrowserRequestFromText,\n type IDocyrusWebBrowserToolName,\n type IDocyrusWebBrowserToolRequest,\n} from \"../../resources/pi-agent/shared/docyrusWebBrowserProtocol\";\nimport { AgentEnvStore } from \"../agent/envStore\";\nimport {\n applyProviderLogin,\n buildProviderCatalog,\n findProviderOption,\n refreshSessionAfterCredentialChange,\n serializeModels,\n validateProviderLoginInput,\n type IDocyrusThinkingLevel,\n} from \"../agent/authInteractivity\";\nimport { clearProviderConfig } from \"../agent/authFlows\";\nimport { OAuthFlowManager } from \"./oauthFlowManager\";\nimport {\n loadMcpServerConfig,\n loadMcpServerCache,\n getServerProvenance,\n addMcpServer,\n updateMcpServer,\n removeMcpServer,\n validateServerName,\n validateServerEntry,\n detectTransport,\n redactSensitiveFields,\n isServerCacheValid,\n computeServerHash,\n type IServerEntry,\n} from \"./mcpConfigService\";\nimport { listSkills, getSkillDetail } from \"./skillsService\";\nimport { listAllTools } from \"./toolsService\";\n\ninterface IAgentSession {\n id?: string;\n isStreaming: boolean;\n model?: { provider: string; id: string };\n thinkingLevel: IDocyrusThinkingLevel;\n subscribe(listener: (event: IAgentSessionEvent) => void): () => void;\n prompt(text: string): Promise<void>;\n abort(): Promise<void>;\n setModel(model: unknown): Promise<void>;\n setThinkingLevel(level: IDocyrusThinkingLevel): void;\n getAvailableThinkingLevels(): IDocyrusThinkingLevel[];\n supportsThinking(): boolean;\n listCommands(): Array<{ name: string; description?: string }>;\n}\n\ninterface IAgentSessionManager {\n list(): Promise<ISessionInfo[]>;\n open(path: string): IOpenedSession;\n}\n\ninterface ISessionInfo {\n path: string;\n id: string;\n cwd: string;\n name?: string;\n parentSessionPath?: string;\n created: Date;\n modified: Date;\n messageCount: number;\n firstMessage: string;\n}\n\ninterface IOpenedSession {\n getEntries(): unknown[];\n getBranch(fromId?: string): unknown[];\n buildSessionContext(): { messages: unknown[]; thinkingLevel?: string; model?: unknown };\n getSessionName(): string | undefined;\n getSessionId(): string;\n getCwd(): string;\n}\n\ninterface IAgentModelRegistry {\n getAvailable(): Array<{ provider: string; id: string }>;\n getAll(): Array<{ provider: string; id: string; name?: string; reasoning?: boolean; contextWindow?: number; maxTokens?: number }>;\n find(provider: string, modelId: string): unknown | undefined;\n refresh(): void;\n}\n\ninterface IAgentAuthRuntime {\n authStorage: AuthStorage;\n envStore: AgentEnvStore;\n settingsManager: SettingsManager;\n modelsJsonPath: string;\n}\n\ninterface IAgentServerContext {\n cwd: string;\n profile: \"agent\" | \"coder\";\n agentDir: string;\n version: string;\n sessionDir: string | null;\n thinkingLevel: string | null;\n}\n\ninterface IUIMessagePart {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n state?: string;\n input?: unknown;\n output?: unknown;\n errorText?: string;\n}\n\ninterface IUIMessage {\n id: string;\n role: string;\n parts: IUIMessagePart[];\n}\n\nfunction generateMessageId(): string {\n return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction getLastAssistantMessage(messages: IUIMessage[]): IUIMessage | undefined {\n if (messages.length === 0) {\n return undefined;\n }\n\n const lastMessage = messages[messages.length - 1];\n return lastMessage.role === \"assistant\" ? lastMessage : undefined;\n}\n\nexport function getChatUnavailableReason(params: {\n session: Pick<IAgentSession, \"model\">;\n}): string | null {\n if (params.session.model) {\n return null;\n }\n\n return \"No model configured. Complete provider login or select a model first.\";\n}\n\nexport function extractLastUserText(messages: IUIMessage[]): string | undefined {\n if (messages.length === 0) {\n return undefined;\n }\n\n const lastMessage = messages[messages.length - 1];\n if (lastMessage.role !== \"user\") {\n return undefined;\n }\n\n for (const part of lastMessage.parts) {\n if (part.type === \"text\" && typeof part.text === \"string\") {\n return part.text;\n }\n }\n\n return undefined;\n}\n\nexport function extractAskUserToolResponse(messages: IUIMessage[]): { toolCallId: string; response: IAskUserResponse } | undefined {\n const message = getLastAssistantMessage(messages);\n if (!message) {\n return undefined;\n }\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (\n part.type === \"dynamic-tool\" &&\n part.toolName === \"ask_user\" &&\n part.state === \"output-available\" &&\n typeof part.toolCallId === \"string\"\n ) {\n const response = parseAskUserResponseFromToolOutput(part.output);\n if (response) {\n return {\n toolCallId: part.toolCallId,\n response,\n };\n }\n }\n }\n\n return undefined;\n}\n\nexport interface IDocyrusWebBrowserToolResponse {\n toolCallId: string;\n toolName: IDocyrusWebBrowserToolName;\n output?: unknown;\n errorText?: string;\n isError: boolean;\n}\n\nexport function extractDocyrusWebBrowserToolResponse(\n messages: IUIMessage[],\n): IDocyrusWebBrowserToolResponse | undefined {\n const message = getLastAssistantMessage(messages);\n if (!message) {\n return undefined;\n }\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (\n part.type === \"dynamic-tool\" &&\n isDocyrusWebBrowserToolName(part.toolName) &&\n typeof part.toolCallId === \"string\" &&\n (part.state === \"output-available\" || part.state === \"output-error\")\n ) {\n const errorText = typeof part.errorText === \"string\"\n ? part.errorText\n : typeof part.output === \"string\" && part.state === \"output-error\"\n ? part.output\n : undefined;\n\n return {\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: part.state === \"output-available\" ? part.output : undefined,\n errorText,\n isError: part.state === \"output-error\",\n };\n }\n }\n\n return undefined;\n}\n\nexport function extractDocyrusWebBrowserToolRequest(\n messages: IUIMessage[],\n toolCallId: string,\n): IDocyrusWebBrowserToolRequest | undefined {\n const message = getLastAssistantMessage(messages);\n if (!message) {\n return undefined;\n }\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (\n part.type === \"dynamic-tool\" &&\n isDocyrusWebBrowserToolName(part.toolName) &&\n part.toolCallId === toolCallId\n ) {\n const request = normalizeDocyrusWebBrowserToolRequest({\n tool: part.toolName,\n input: part.input,\n });\n if (request) {\n return request;\n }\n }\n }\n\n return undefined;\n}\n\nexport function normalizeSlashCommands(commands: Array<{ name: string; description?: string }>): Array<{ name: string; description: string | null }> {\n const seen = new Set<string>();\n return commands\n .filter((command) => typeof command.name === \"string\" && command.name.trim().length > 0)\n .sort((left, right) => left.name.localeCompare(right.name))\n .filter((command) => {\n if (seen.has(command.name)) {\n return false;\n }\n seen.add(command.name);\n return true;\n })\n .map((command) => ({\n name: command.name,\n description: command.description?.trim() || null,\n }));\n}\n\nasync function waitForIdle(session: IAgentSession, timeoutMs = 30_000): Promise<void> {\n if (!session.isStreaming) {\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n unsubscribe();\n reject(new Error(\"Timed out waiting for session to become idle\"));\n }, timeoutMs);\n\n const unsubscribe = session.subscribe((event: IAgentSessionEvent) => {\n if (event.type === \"agent_end\") {\n clearTimeout(timer);\n unsubscribe();\n resolve();\n }\n });\n\n if (!session.isStreaming) {\n clearTimeout(timer);\n unsubscribe();\n resolve();\n }\n });\n}\n\n// -- Session entry \u2192 AI SDK UIMessage converter --\n\ninterface IUIMessageOutput {\n id: string;\n role: \"user\" | \"assistant\";\n parts: Array<Record<string, unknown>>;\n}\n\nexport function convertSessionEntriesToUIMessages(entries: unknown[]): IUIMessageOutput[] {\n const messages: IUIMessageOutput[] = [];\n // Collect tool results keyed by toolCallId for merging into assistant messages\n const toolResults = new Map<string, { output: unknown; isError: boolean }>();\n\n // First pass: index tool results\n for (const entry of entries) {\n const rec = entry as Record<string, unknown>;\n if (rec.type !== \"message\") {continue;}\n const msg = rec.message as Record<string, unknown> | undefined;\n if (!msg || msg.role !== \"toolResult\") {continue;}\n const toolCallId = msg.toolCallId as string;\n if (toolCallId) {\n const content = msg.content;\n const textParts = Array.isArray(content)\n ? (content as Array<Record<string, unknown>>)\n .filter((b) => b.type === \"text\")\n .map((b) => b.text)\n .join(\"\\n\")\n : typeof content === \"string\" ? content : \"\";\n toolResults.set(toolCallId, {\n output: textParts,\n isError: (msg.isError as boolean) ?? false,\n });\n }\n }\n\n // Second pass: build UIMessages from user + assistant entries\n for (const entry of entries) {\n const rec = entry as Record<string, unknown>;\n if (rec.type !== \"message\") {continue;}\n const msg = rec.message as Record<string, unknown> | undefined;\n if (!msg) {continue;}\n const entryId = (rec.id as string) ?? `entry_${messages.length}`;\n\n if (msg.role === \"user\") {\n const content = msg.content;\n let text = \"\";\n if (typeof content === \"string\") {\n text = content;\n } else if (Array.isArray(content)) {\n text = (content as Array<Record<string, unknown>>)\n .filter((b) => b.type === \"text\")\n .map((b) => b.text as string)\n .join(\"\\n\");\n }\n if (text) {\n messages.push({ id: entryId, role: \"user\", parts: [{ type: \"text\", text }] });\n }\n continue;\n }\n\n if (msg.role === \"assistant\") {\n const content = msg.content;\n if (!Array.isArray(content)) {continue;}\n const parts: Array<Record<string, unknown>> = [];\n\n for (const block of content as Array<Record<string, unknown>>) {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n const askUserRequest = parseAskUserRequestFromText(block.text);\n if (askUserRequest) {\n parts.push({\n type: \"dynamic-tool\",\n toolCallId: createAskUserToolCallId(askUserRequest),\n toolName: \"ask_user\",\n state: \"input-available\",\n input: askUserRequest,\n });\n continue;\n }\n\n const docyrusWebBrowserRequest = parseDocyrusWebBrowserRequestFromText(block.text);\n if (docyrusWebBrowserRequest) {\n parts.push({\n type: \"dynamic-tool\",\n toolCallId: createDocyrusWebBrowserToolCallId(docyrusWebBrowserRequest),\n toolName: docyrusWebBrowserRequest.tool,\n state: \"input-available\",\n input: docyrusWebBrowserRequest.input ?? {},\n });\n continue;\n }\n\n parts.push({ type: \"text\", text: block.text });\n } else if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n parts.push({ type: \"reasoning\", text: block.thinking, state: \"complete\" });\n } else if (block.type === \"toolCall\") {\n const toolCallId = block.id as string;\n const toolName = block.name as string;\n const input = block.arguments ?? {};\n const result = toolResults.get(toolCallId);\n parts.push({\n type: \"dynamic-tool\",\n toolCallId,\n toolName,\n input,\n state: result\n ? (result.isError ? \"output-error\" : \"output-available\")\n : \"input-available\",\n ...(result && !result.isError ? { output: result.output } : {}),\n ...(result && result.isError ? { errorText: String(result.output) } : {}),\n });\n }\n }\n\n if (parts.length > 0) {\n messages.push({ id: entryId, role: \"assistant\", parts });\n }\n }\n }\n\n return messages;\n}\n\nconst FS_IGNORE = new Set([\n \"node_modules\", \".git\", \".next\", \".nuxt\", \"dist\", \"build\",\n \".docyrus\", \".pi\", \"__pycache__\", \".cache\", \"coverage\",\n \".turbo\", \".vercel\", \".output\", \".svelte-kit\",\n]);\n\ninterface ITreeNode {\n name: string;\n path: string;\n type: \"file\" | \"directory\";\n size?: number;\n children?: ITreeNode[];\n}\n\nfunction resolveSafePath(cwd: string, requestPath: string): string {\n const resolved = resolve(cwd, requestPath);\n const normalizedCwd = cwd.endsWith(sep) ? cwd : cwd + sep;\n if (resolved !== cwd && !resolved.startsWith(normalizedCwd)) {\n throw new Error(\"Path escapes working directory\");\n }\n return resolved;\n}\n\nfunction globToRegex(pattern: string): RegExp {\n const escaped = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*\\*/g, \"\\0\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/\\0/g, \".*\")\n .replace(/\\?/g, \"[^/]\");\n return new RegExp(`^${escaped}$`);\n}\n\nasync function buildTree(params: {\n dir: string;\n cwd: string;\n depth: number;\n maxDepth: number;\n maxFiles: number;\n counter: { value: number };\n ignore: Set<string>;\n}): Promise<ITreeNode[]> {\n const { dir, cwd, depth, maxDepth, maxFiles, counter, ignore } = params;\n if (depth >= maxDepth || counter.value >= maxFiles) {\n return [];\n }\n\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n\n entries.sort((a, b) => {\n const aIsDir = a.isDirectory();\n const bIsDir = b.isDirectory();\n if (aIsDir !== bIsDir) {return aIsDir ? -1 : 1;}\n return a.name.localeCompare(b.name);\n });\n\n const result: ITreeNode[] = [];\n\n for (const entry of entries) {\n if (counter.value >= maxFiles) {break;}\n if (ignore.has(entry.name)) {continue;}\n\n const fullPath = join(dir, entry.name);\n const relativePath = relative(cwd, fullPath);\n\n if (entry.isDirectory()) {\n const children = await buildTree({\n dir: fullPath,\n cwd,\n depth: depth + 1,\n maxDepth,\n maxFiles,\n counter,\n ignore,\n });\n result.push({ name: entry.name, path: relativePath, type: \"directory\", children });\n } else if (entry.isFile()) {\n counter.value++;\n result.push({ name: entry.name, path: relativePath, type: \"file\" });\n }\n }\n\n return result;\n}\n\nasync function walkFiles(params: {\n dir: string;\n cwd: string;\n pattern: RegExp;\n ignore: Set<string>;\n maxResults: number;\n results: string[];\n}): Promise<void> {\n const { dir, cwd, pattern, ignore, maxResults, results } = params;\n if (results.length >= maxResults) {return;}\n\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (results.length >= maxResults) {break;}\n if (ignore.has(entry.name)) {continue;}\n\n const fullPath = join(dir, entry.name);\n const relativePath = relative(cwd, fullPath);\n\n if (entry.isDirectory()) {\n await walkFiles({ dir: fullPath, cwd, pattern, ignore, maxResults, results });\n } else if (entry.isFile() && pattern.test(relativePath)) {\n results.push(relativePath);\n }\n }\n}\n\nexport async function createAgentServer(params: {\n session: IAgentSession;\n authToken?: string;\n port: number;\n sessionManager: IAgentSessionManager;\n modelRegistry: IAgentModelRegistry;\n authRuntime: IAgentAuthRuntime;\n context: IAgentServerContext;\n onCreateSession: () => Promise<IAgentSession>;\n onResumeSession: (sessionId: string) => Promise<IAgentSession>;\n}): Promise<void> {\n const { port, sessionManager, modelRegistry, authRuntime, context, onCreateSession, onResumeSession, authToken } = params;\n let activeSession = params.session;\n const pendingAskUserRequests = new Map<string, { toolCallId: string; request: IAskUserRequest }>();\n const pendingDocyrusWebBrowserRequests = new Map<string, Map<string, IDocyrusWebBrowserToolRequest>>();\n const oauthFlowManager = new OAuthFlowManager();\n const app = new Hono();\n\n function getModelIdsByProvider(): Record<string, string[]> {\n const values: Record<string, string[]> = {};\n for (const model of modelRegistry.getAll()) {\n if (!values[model.provider]) {\n values[model.provider] = [];\n }\n values[model.provider].push(model.id);\n }\n for (const providerId of Object.keys(values)) {\n values[providerId] = [...new Set(values[providerId])].sort((left, right) => left.localeCompare(right));\n }\n return values;\n }\n\n function getProviderCatalog() {\n return buildProviderCatalog({\n authStorage: authRuntime.authStorage,\n browserProviders: authRuntime.authStorage.getOAuthProviders(),\n apiKeyProviderIds: [...new Set(modelRegistry.getAll().map((model) => model.provider))].sort((left, right) => left.localeCompare(right)),\n modelIdsByProvider: getModelIdsByProvider(),\n });\n }\n\n app.use(\"/*\", cors({ origin: \"*\" }));\n app.use(\"/*\", async(c, next) => {\n const unauthorizedResponse = authorizeServerRequest(c.req.raw, authToken);\n if (unauthorizedResponse) {\n return unauthorizedResponse;\n }\n\n await next();\n });\n\n app.get(\"/api/health\", (c) => {\n return c.json({ ok: true });\n });\n\n app.get(\"/api/status\", (c) => {\n return c.json({\n isStreaming: activeSession.isStreaming,\n model: activeSession.model ? { provider: activeSession.model.provider, id: activeSession.model.id } : null,\n });\n });\n\n app.post(\"/api/chat\", async(c) => {\n const body = await c.req.json<{ messages?: IUIMessage[]; sessionId?: string }>();\n const messages = body.messages ?? [];\n\n // Resume a specific session if requested\n if (body.sessionId) {\n try {\n activeSession = await onResumeSession(body.sessionId);\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n return c.json({ error: `Failed to resume session: ${msg}` }, 400);\n }\n }\n\n const chatUnavailableReason = getChatUnavailableReason({ session: activeSession });\n if (chatUnavailableReason) {\n return c.json({ error: chatUnavailableReason }, 409);\n }\n\n const sessionId = body.sessionId?.trim() || activeSession.id?.trim() || \"active\";\n const askUserResponse = extractAskUserToolResponse(messages);\n const docyrusWebBrowserResponse = extractDocyrusWebBrowserToolResponse(messages);\n const pendingAskUser = pendingAskUserRequests.get(sessionId);\n const pendingDocyrusWebBrowser = pendingDocyrusWebBrowserRequests.get(sessionId);\n const pendingDocyrusWebBrowserRequest = docyrusWebBrowserResponse\n ? pendingDocyrusWebBrowser?.get(docyrusWebBrowserResponse.toolCallId)\n ?? extractDocyrusWebBrowserToolRequest(messages, docyrusWebBrowserResponse.toolCallId)\n : undefined;\n const userMessage = askUserResponse\n ? (pendingAskUser && pendingAskUser.toolCallId === askUserResponse.toolCallId\n ? formatAskUserResponsePrompt(askUserResponse.response)\n : undefined)\n : docyrusWebBrowserResponse\n ? (pendingDocyrusWebBrowserRequest\n ? formatDocyrusWebBrowserToolResponsePrompt({\n tool: docyrusWebBrowserResponse.toolName,\n request: pendingDocyrusWebBrowserRequest.input,\n status: docyrusWebBrowserResponse.isError ? \"error\" : \"success\",\n output: docyrusWebBrowserResponse.output,\n errorText: docyrusWebBrowserResponse.errorText,\n })\n : undefined)\n : extractLastUserText(messages);\n\n if (!userMessage) {\n return c.json({\n error: askUserResponse\n ? \"No matching pending ask_user request found\"\n : docyrusWebBrowserResponse\n ? \"No matching pending docyrus-web-browser request found\"\n : \"No user message found\",\n }, 400);\n }\n\n if (askUserResponse) {\n pendingAskUserRequests.delete(sessionId);\n }\n\n if (docyrusWebBrowserResponse && pendingDocyrusWebBrowser) {\n pendingDocyrusWebBrowser.delete(docyrusWebBrowserResponse.toolCallId);\n if (pendingDocyrusWebBrowser.size === 0) {\n pendingDocyrusWebBrowserRequests.delete(sessionId);\n }\n }\n\n if (activeSession.isStreaming) {\n await activeSession.abort();\n await waitForIdle(activeSession);\n }\n\n const messageId = generateMessageId();\n const encoder = new TextEncoder();\n\n const stream = new ReadableStream({\n start(controller) {\n function writeChunk(chunk: Record<string, unknown>): void {\n controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}\\n\\n`));\n }\n\n writeChunk({ type: \"start\" });\n writeChunk({ type: \"start-step\" });\n\n const bridge = createEventBridge({\n messageId,\n onChunk: writeChunk,\n onAskUser: ({ toolCallId, request }) => {\n pendingAskUserRequests.set(sessionId, { toolCallId, request });\n },\n onDocyrusWebBrowserTool: ({ toolCallId, request }) => {\n const pendingForSession = pendingDocyrusWebBrowserRequests.get(sessionId) ?? new Map<string, IDocyrusWebBrowserToolRequest>();\n pendingForSession.set(toolCallId, request);\n pendingDocyrusWebBrowserRequests.set(sessionId, pendingForSession);\n },\n onDone: () => {\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n controller.close();\n },\n onError: (errorText) => {\n writeChunk({ type: \"error\", errorText });\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n controller.close();\n },\n });\n\n const unsubscribe = activeSession.subscribe((event: IAgentSessionEvent) => {\n bridge.handleEvent(event);\n\n if (event.type === \"agent_end\") {\n unsubscribe();\n }\n });\n\n activeSession.prompt(userMessage)\n .then(() => {\n if (!activeSession.isStreaming) {\n unsubscribe();\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n controller.close();\n }\n })\n .catch((error: unknown) => {\n const errorMessage = error instanceof Error ? error.message : String(error);\n writeChunk({ type: \"error\", errorText: errorMessage });\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n unsubscribe();\n controller.close();\n });\n },\n });\n\n return c.body(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n \"Connection\": \"keep-alive\",\n \"x-vercel-ai-ui-message-stream\": \"v1\",\n },\n });\n });\n\n app.get(\"/api/sessions\", async(c) => {\n try {\n const sessions = await sessionManager.list();\n const mapped = sessions\n .map((s) => ({\n id: s.id,\n path: s.path,\n cwd: s.cwd,\n name: s.name ?? null,\n parentSessionPath: s.parentSessionPath ?? null,\n created: s.created.toISOString(),\n modified: s.modified.toISOString(),\n messageCount: s.messageCount,\n firstMessage: s.firstMessage,\n }))\n .sort((a, b) => b.modified.localeCompare(a.modified));\n return c.json({ sessions: mapped });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.post(\"/api/sessions\", async(c) => {\n try {\n if (activeSession.isStreaming) {\n await activeSession.abort();\n await waitForIdle(activeSession);\n }\n\n activeSession = await onCreateSession();\n\n const sessionId = activeSession.id?.trim();\n if (!sessionId) {\n return c.json({ error: \"Created session is missing an id\" }, 500);\n }\n\n const sessions = await sessionManager.list();\n const match = sessions.find((session) => session.id === sessionId);\n\n return c.json({\n ok: true,\n sessionId,\n sessionName: match?.name ?? null,\n cwd: match?.cwd ?? context.cwd,\n model: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/sessions/:sessionId/messages\", async(c) => {\n const sessionId = c.req.param(\"sessionId\");\n try {\n const sessions = await sessionManager.list();\n const match = sessions.find((s) => s.id === sessionId);\n if (!match) {\n return c.json({ error: \"Session not found\" }, 404);\n }\n const opened = sessionManager.open(match.path);\n const sessionContext = opened.buildSessionContext();\n const rawEntries = opened.getBranch();\n const messages = convertSessionEntriesToUIMessages(rawEntries);\n return c.json({\n sessionId: opened.getSessionId(),\n sessionName: opened.getSessionName() ?? null,\n cwd: opened.getCwd(),\n model: sessionContext.model ?? null,\n thinkingLevel: sessionContext.thinkingLevel ?? null,\n messages,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/context\", (c) => {\n return c.json({\n cwd: context.cwd,\n profile: context.profile,\n agentDir: context.agentDir,\n version: context.version,\n sessionDir: context.sessionDir,\n thinkingLevel: context.thinkingLevel,\n });\n });\n\n app.get(\"/api/models\", (c) => {\n return c.json({\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n availableThinkingLevels: activeSession.getAvailableThinkingLevels(),\n available: serializeModels({\n models: modelRegistry.getAvailable(),\n authStorage: authRuntime.authStorage,\n }),\n });\n });\n\n app.get(\"/api/slash-commands\", (c) => {\n return c.json({\n commands: normalizeSlashCommands(activeSession.listCommands()),\n });\n });\n\n app.get(\"/api/auth/providers\", (c) => {\n return c.json({\n providers: getProviderCatalog(),\n });\n });\n\n app.post(\"/api/auth/providers/:providerId/login\", async(c) => {\n const providerId = c.req.param(\"providerId\");\n const provider = findProviderOption({\n providerId,\n browserProviders: authRuntime.authStorage.getOAuthProviders(),\n apiKeyProviderIds: [...new Set(modelRegistry.getAll().map((model) => model.provider))],\n });\n\n if (!provider) {\n return c.json({ error: `Unknown provider: ${providerId}` }, 404);\n }\n\n if (provider.flow === \"oauth\") {\n const step = await oauthFlowManager.start({\n authStorage: authRuntime.authStorage,\n providerId,\n usesCallbackServer: authRuntime.authStorage.getOAuthProviders().find((item) => item.id === providerId)?.usesCallbackServer,\n });\n\n return c.json({ step });\n }\n\n const body = await c.req.json<Record<string, unknown>>();\n const validated = validateProviderLoginInput({\n provider,\n modelIdsByProvider: getModelIdsByProvider(),\n value: body,\n });\n if (!validated.ok) {\n return c.json({ error: validated.error }, 400);\n }\n\n try {\n const result = await applyProviderLogin({\n ...authRuntime,\n provider,\n input: validated.value,\n modelIdsByProvider: getModelIdsByProvider(),\n });\n await refreshSessionAfterCredentialChange({\n session: activeSession,\n modelRegistry: modelRegistry as any,\n envStore: authRuntime.envStore,\n preferredProviderId: result.providerId,\n preferredModelId: result.preferredModelId,\n });\n return c.json({\n ok: true,\n providerId,\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/auth/providers/:providerId/oauth/continue\", async(c) => {\n const providerId = c.req.param(\"providerId\");\n const body = await c.req.json<{ stepToken?: string; values?: Record<string, unknown> }>();\n if (!body.stepToken) {\n return c.json({ error: \"Missing required field: stepToken\" }, 400);\n }\n\n try {\n const value = typeof body.values?.value === \"string\" ? body.values.value : undefined;\n const step = await oauthFlowManager.continue({\n stepToken: body.stepToken,\n value,\n });\n\n if (step.type === \"complete\") {\n modelRegistry.refresh();\n await refreshSessionAfterCredentialChange({\n session: activeSession,\n modelRegistry: modelRegistry as any,\n envStore: authRuntime.envStore,\n preferredProviderId: providerId,\n });\n }\n\n return c.json({ step });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/auth/providers/:providerId/logout\", async(c) => {\n const providerId = c.req.param(\"providerId\");\n const provider = findProviderOption({\n providerId,\n browserProviders: authRuntime.authStorage.getOAuthProviders(),\n apiKeyProviderIds: [...new Set(modelRegistry.getAll().map((model) => model.provider))],\n });\n\n if (!provider) {\n return c.json({ error: `Unknown provider: ${providerId}` }, 404);\n }\n\n try {\n if (provider.flow === \"oauth\") {\n authRuntime.authStorage.logout(providerId);\n } else {\n await clearProviderConfig({\n ...authRuntime,\n providerId,\n });\n }\n\n modelRegistry.refresh();\n await refreshSessionAfterCredentialChange({\n session: activeSession,\n modelRegistry: modelRegistry as any,\n envStore: authRuntime.envStore,\n });\n\n return c.json({\n ok: true,\n providerId,\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/models/select\", async(c) => {\n const body = await c.req.json<{ provider?: string; modelId?: string; thinkingLevel?: IDocyrusThinkingLevel }>();\n const provider = body.provider?.trim();\n const modelId = body.modelId?.trim();\n if (!provider || !modelId) {\n return c.json({ error: \"Missing required fields: provider, modelId\" }, 400);\n }\n\n const model = modelRegistry.find(provider, modelId);\n if (!model) {\n return c.json({ error: `Model not found: ${provider}/${modelId}` }, 404);\n }\n\n try {\n await activeSession.setModel(model);\n if (body.thinkingLevel) {\n activeSession.setThinkingLevel(body.thinkingLevel);\n }\n\n return c.json({\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n availableThinkingLevels: activeSession.getAvailableThinkingLevels(),\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/sessions/:sessionId/resume\", async(c) => {\n const sessionId = c.req.param(\"sessionId\");\n try {\n if (activeSession.isStreaming) {\n await activeSession.abort();\n await waitForIdle(activeSession);\n }\n activeSession = await onResumeSession(sessionId);\n return c.json({\n ok: true,\n sessionId,\n model: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- Filesystem endpoints --\n\n app.get(\"/api/fs/tree\", async(c) => {\n const requestPath = c.req.query(\"path\") ?? \".\";\n const maxDepth = Math.min(Number(c.req.query(\"depth\") ?? 4), 10);\n const maxFiles = Math.min(Number(c.req.query(\"maxFiles\") ?? 2000), 10_000);\n try {\n const dir = resolveSafePath(context.cwd, requestPath);\n const nodes = await buildTree({\n dir,\n cwd: context.cwd,\n depth: 0,\n maxDepth,\n maxFiles,\n counter: { value: 0 },\n ignore: FS_IGNORE,\n });\n return c.json({ cwd: context.cwd, path: requestPath, tree: nodes });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.get(\"/api/fs/search\", async(c) => {\n const pattern = c.req.query(\"pattern\");\n if (!pattern) {\n return c.json({ error: \"Missing required query parameter: pattern\" }, 400);\n }\n const basePath = c.req.query(\"path\") ?? \".\";\n const maxResults = Math.min(Number(c.req.query(\"maxResults\") ?? 200), 5000);\n try {\n const dir = resolveSafePath(context.cwd, basePath);\n const regex = globToRegex(pattern);\n const results: string[] = [];\n await walkFiles({ dir, cwd: dir, pattern: regex, ignore: FS_IGNORE, maxResults, results });\n return c.json({ pattern, path: basePath, files: results });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.get(\"/api/fs/read\", async(c) => {\n const filePath = c.req.query(\"path\");\n if (!filePath) {\n return c.json({ error: \"Missing required query parameter: path\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, filePath);\n const fileStat = await stat(resolved);\n if (!fileStat.isFile()) {\n return c.json({ error: \"Path is not a file\" }, 400);\n }\n const content = await readFile(resolved, \"utf-8\");\n return c.json({\n path: filePath,\n content,\n size: fileStat.size,\n modified: fileStat.mtime.toISOString(),\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"ENOENT\") ? 404 : 400;\n return c.json({ error: message }, status);\n }\n });\n\n app.post(\"/api/fs/write\", async(c) => {\n const body = await c.req.json<{ path?: string; content?: string }>();\n if (!body.path || typeof body.content !== \"string\") {\n return c.json({ error: \"Missing required fields: path, content\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, body.path);\n await mkdir(join(resolved, \"..\"), { recursive: true });\n await writeFile(resolved, body.content, \"utf-8\");\n const fileStat = await stat(resolved);\n return c.json({ ok: true, path: body.path, size: fileStat.size });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/fs/mkdir\", async(c) => {\n const body = await c.req.json<{ path?: string }>();\n if (!body.path) {\n return c.json({ error: \"Missing required field: path\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, body.path);\n await mkdir(resolved, { recursive: true });\n return c.json({ ok: true, path: body.path });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/fs/rename\", async(c) => {\n const body = await c.req.json<{ from?: string; to?: string }>();\n if (!body.from || !body.to) {\n return c.json({ error: \"Missing required fields: from, to\" }, 400);\n }\n try {\n const resolvedFrom = resolveSafePath(context.cwd, body.from);\n const resolvedTo = resolveSafePath(context.cwd, body.to);\n await mkdir(join(resolvedTo, \"..\"), { recursive: true });\n await rename(resolvedFrom, resolvedTo);\n return c.json({ ok: true, from: body.from, to: body.to });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"ENOENT\") ? 404 : 400;\n return c.json({ error: message }, status);\n }\n });\n\n app.delete(\"/api/fs\", async(c) => {\n const filePath = c.req.query(\"path\");\n if (!filePath) {\n return c.json({ error: \"Missing required query parameter: path\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, filePath);\n if (resolved === context.cwd) {\n return c.json({ error: \"Cannot delete working directory\" }, 400);\n }\n const fileStat = await stat(resolved);\n await rm(resolved, { recursive: fileStat.isDirectory() });\n return c.json({ ok: true, path: filePath });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"ENOENT\") ? 404 : 400;\n return c.json({ error: message }, status);\n }\n });\n\n // -- CLI helpers --\n\n const CLI_EXEC = process.env.DOCYRUS_CLI_EXECUTABLE || process.execPath;\n const CLI_ENTRY = process.env.DOCYRUS_CLI_ENTRY\n || resolve(process.argv[1] ? join(process.argv[1], \"..\") : __dirname, \"main.js\");\n const CLI_SCOPE = process.env.DOCYRUS_CLI_SCOPE;\n const CLI_TIMEOUT_MS = 30_000;\n\n function runCliCommand(args: string[]): Promise<{ ok: boolean; data?: unknown; error?: string }> {\n return new Promise((resolveResult) => {\n const scopeArgs = CLI_SCOPE ? [\"--scope\", CLI_SCOPE] : [];\n const proc = spawn(CLI_EXEC, [CLI_ENTRY, ...scopeArgs, ...args, \"--json\"], {\n cwd: context.cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n timeout: CLI_TIMEOUT_MS,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n proc.stdout?.on(\"data\", (chunk: Buffer) => { stdout += chunk.toString(); });\n proc.stderr?.on(\"data\", (chunk: Buffer) => { stderr += chunk.toString(); });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n resolveResult({ ok: false, error: stderr.trim() || `exit code ${code}` });\n return;\n }\n try {\n resolveResult({ ok: true, data: JSON.parse(stdout) });\n } catch {\n resolveResult({ ok: true, data: stdout.trim() });\n }\n });\n\n proc.on(\"error\", (err) => {\n resolveResult({ ok: false, error: err.message });\n });\n });\n }\n\n // -- Dev environment endpoints --\n\n let devProcess: ChildProcess | null = null;\n let devUrl: string | null = null;\n\n const DEV_URL_PATTERN = /https?:\\/\\/(?:localhost|127\\.0\\.0\\.1):\\d+/;\n const DEV_STARTUP_TIMEOUT_MS = 30_000;\n const DEV_PROBE_TIMEOUT_MS = 3_000;\n\n async function probeUrl(url: string): Promise<number | null> {\n try {\n const res = await fetch(url, { signal: AbortSignal.timeout(DEV_PROBE_TIMEOUT_MS) });\n return res.status;\n } catch {\n return null;\n }\n }\n\n async function detectDevPort(cwd: string): Promise<number | null> {\n // 1. package.json \"dev\" script --port flag\n try {\n const pkg = JSON.parse(await readFile(join(cwd, \"package.json\"), \"utf-8\"));\n const devScript: string | undefined = pkg.scripts?.dev;\n if (devScript) {\n const portFlag = devScript.match(/--port\\s+(\\d+)/);\n if (portFlag) {return Number(portFlag[1]);}\n const dashP = devScript.match(/(?:^|\\s)-p\\s+(\\d+)/);\n if (dashP) {return Number(dashP[1]);}\n }\n } catch { /* no package.json */ }\n\n // 2. vite.config.ts / vite.config.js / vite.config.mts\n for (const name of [\"vite.config.ts\", \"vite.config.mts\", \"vite.config.js\"]) {\n try {\n const content = await readFile(join(cwd, name), \"utf-8\");\n const portMatch = content.match(/port\\s*:\\s*(\\d+)/);\n if (portMatch) {return Number(portMatch[1]);}\n } catch { /* not found */ }\n }\n\n // 3. next.config.* \u2014 Next.js defaults to 3000\n for (const name of [\"next.config.ts\", \"next.config.mts\", \"next.config.js\", \"next.config.mjs\"]) {\n try {\n await stat(join(cwd, name));\n return 3000;\n } catch { /* not found */ }\n }\n\n // 4. angular.json \u2014 Angular defaults to 4200\n try {\n await stat(join(cwd, \"angular.json\"));\n return 4200;\n } catch { /* not found */ }\n\n // 5. nuxt.config.* \u2014 Nuxt defaults to 3000\n for (const name of [\"nuxt.config.ts\", \"nuxt.config.js\"]) {\n try {\n await stat(join(cwd, name));\n return 3000;\n } catch { /* not found */ }\n }\n\n return null;\n }\n\n interface IProjectInfo {\n path: string;\n folder: string;\n repo: string | null;\n packageName: string | null;\n packageVersion: string | null;\n }\n\n let cachedProjectInfo: IProjectInfo | null = null;\n\n async function getProjectInfo(): Promise<IProjectInfo> {\n if (cachedProjectInfo) {return cachedProjectInfo;}\n\n const cwd = context.cwd;\n let repo: string | null = null;\n let packageName: string | null = null;\n let packageVersion: string | null = null;\n\n try {\n repo = await new Promise<string>((res, rej) => {\n execFile(\"git\", [\"remote\", \"get-url\", \"origin\"], { cwd }, (err, stdout) => {\n if (err) {return rej(err);}\n const url = stdout.trim();\n const match = url.match(/\\/([^/]+?)(?:\\.git)?$/);\n res(match ? match[1] : url);\n });\n });\n } catch { /* not a git repo or no remote */ }\n\n try {\n const pkg = JSON.parse(await readFile(join(cwd, \"package.json\"), \"utf-8\"));\n packageName = pkg.name ?? null;\n packageVersion = pkg.version ?? null;\n } catch { /* no package.json */ }\n\n cachedProjectInfo = {\n path: cwd,\n folder: basename(cwd),\n repo,\n packageName,\n packageVersion,\n };\n return cachedProjectInfo;\n }\n\n app.get(\"/api/env/status\", async(c) => {\n const [authResult, project] = await Promise.all([\n runCliCommand([\"auth\", \"who\"]),\n getProjectInfo(),\n ]);\n const env = authResult.ok ? authResult.data : null;\n\n // Check managed process first\n if (devProcess && devProcess.exitCode === null && devUrl) {\n const httpStatus = await probeUrl(devUrl);\n return c.json({\n status: httpStatus !== null ? \"running\" : \"starting\",\n url: devUrl,\n managed: true,\n project,\n env,\n ...(httpStatus !== null ? { httpStatus } : {}),\n });\n }\n\n if (devProcess && devProcess.exitCode !== null) {\n const exitCode = devProcess.exitCode;\n devProcess = null;\n const stoppedUrl = devUrl;\n devUrl = null;\n return c.json({ status: \"stopped\", url: stoppedUrl, exitCode, managed: true, project, env });\n }\n\n // Resolve probe target: explicit param > auto-detect from config\n const explicitUrl = c.req.query(\"url\");\n const explicitPort = c.req.query(\"port\");\n let probeTarget: string | null = null;\n\n if (explicitUrl) {\n probeTarget = explicitUrl;\n } else if (explicitPort) {\n probeTarget = `http://localhost:${explicitPort}`;\n } else {\n const detected = await detectDevPort(context.cwd);\n if (detected) {\n probeTarget = `http://localhost:${detected}`;\n }\n }\n\n if (probeTarget) {\n const httpStatus = await probeUrl(probeTarget);\n return c.json({\n status: httpStatus !== null ? \"running\" : \"stopped\",\n url: probeTarget,\n httpStatus: httpStatus ?? undefined,\n managed: false,\n project,\n env,\n });\n }\n\n return c.json({ status: \"stopped\", url: null, managed: false, project, env });\n });\n\n app.post(\"/api/env/serve\", (c) => {\n if (devProcess && devProcess.exitCode === null) {\n return c.json({ status: \"running\", url: devUrl });\n }\n\n devUrl = null;\n\n const proc = spawn(\"pnpm\", [\"dev\"], {\n cwd: context.cwd,\n shell: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n devProcess = proc;\n\n return new Promise<Response>((resolveResponse) => {\n let stderr = \"\";\n let resolved = false;\n\n function settle(response: Response): void {\n if (resolved) {return;}\n resolved = true;\n resolveResponse(response);\n }\n\n function checkOutput(text: string): void {\n const match = text.match(DEV_URL_PATTERN);\n if (match) {\n devUrl = match[0];\n settle(c.json({ status: \"running\", url: devUrl }));\n }\n }\n\n proc.stdout?.on(\"data\", (chunk: Buffer) => checkOutput(chunk.toString()));\n\n proc.stderr?.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n stderr += text;\n checkOutput(text);\n });\n\n proc.on(\"close\", (code) => {\n settle(c.json({ status: \"error\", error: stderr || `Process exited with code ${code}` }, 500));\n });\n\n proc.on(\"error\", (err) => {\n settle(c.json({ status: \"error\", error: err.message }, 500));\n });\n\n setTimeout(() => {\n settle(c.json({ status: \"error\", error: stderr || \"Timed out waiting for dev server URL\" }, 500));\n }, DEV_STARTUP_TIMEOUT_MS);\n });\n });\n\n app.post(\"/api/env/stop\", (c) => {\n if (!devProcess || devProcess.exitCode !== null) {\n devProcess = null;\n devUrl = null;\n return c.json({ status: \"stopped\" });\n }\n\n const pid = devProcess.pid;\n devProcess.kill(\"SIGTERM\");\n devProcess = null;\n const stoppedUrl = devUrl;\n devUrl = null;\n return c.json({ status: \"stopped\", url: stoppedUrl, pid });\n });\n\n // -- Git endpoints --\n\n function gitExec(args: string[], gitCwd: string): Promise<string> {\n return new Promise((res, rej) => {\n execFile(\"git\", args, { cwd: gitCwd, maxBuffer: 50 * 1024 * 1024 }, (err, stdout) => {\n if (err) {return rej(err);}\n res(stdout);\n });\n });\n }\n\n app.get(\"/api/git/diff\", async(c) => {\n const filterPath = c.req.query(\"path\");\n const cwd = context.cwd;\n\n try {\n // Branch name + HEAD existence check\n let branch: string | undefined;\n let hasHead = true;\n try {\n branch = (await gitExec([\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], cwd)).trim() || undefined;\n } catch {\n hasHead = false;\n }\n\n const diffRef = hasHead ? [\"diff\", \"HEAD\"] : [\"diff\", \"--cached\"];\n\n // Parallel: name-status, untracked files, numstat\n const [nameStatusRaw, untrackedRaw, numstatRaw] = await Promise.all([\n gitExec([...diffRef, \"--name-status\"], cwd).catch(() => \"\"),\n gitExec([\"ls-files\", \"--others\", \"--exclude-standard\"], cwd).catch(() => \"\"),\n gitExec([...diffRef, \"--numstat\"], cwd).catch(() => \"\"),\n ]);\n\n // Parse name-status\n type IGitFileStatus = \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"copied\" | \"untracked\";\n interface IFileEntry { path: string; status: IGitFileStatus; oldPath?: string }\n const entries: IFileEntry[] = [];\n\n for (const line of nameStatusRaw.split(\"\\n\").filter(Boolean)) {\n const parts = line.split(\"\\t\");\n const code = parts[0];\n if (code.startsWith(\"R\")) {\n entries.push({ path: parts[2], status: \"renamed\", oldPath: parts[1] });\n } else if (code.startsWith(\"C\")) {\n entries.push({ path: parts[2], status: \"copied\", oldPath: parts[1] });\n } else if (code.startsWith(\"M\")) {\n entries.push({ path: parts[1], status: \"modified\" });\n } else if (code.startsWith(\"A\")) {\n entries.push({ path: parts[1], status: \"added\" });\n } else if (code.startsWith(\"D\")) {\n entries.push({ path: parts[1], status: \"deleted\" });\n }\n }\n\n for (const filePath of untrackedRaw.split(\"\\n\").filter(Boolean)) {\n entries.push({ path: filePath, status: \"untracked\" });\n }\n\n // Parse numstat\n interface INumstat { additions: number; deletions: number; isBinary: boolean }\n const numstatMap = new Map<string, INumstat>();\n\n for (const line of numstatRaw.split(\"\\n\").filter(Boolean)) {\n const match = line.match(/^(-|\\d+)\\t(-|\\d+)\\t(.+)$/);\n if (!match) {continue;}\n const isBinary = match[1] === \"-\" && match[2] === \"-\";\n const additions = isBinary ? 0 : Number(match[1]);\n const deletions = isBinary ? 0 : Number(match[2]);\n let filePath = match[3];\n\n // Resolve rename syntax: \"{old => new}/suffix\" or \"old => new\"\n const arrowIdx = filePath.indexOf(\" => \");\n if (arrowIdx !== -1) {\n const braceStart = filePath.indexOf(\"{\");\n if (braceStart !== -1 && braceStart < arrowIdx) {\n const braceEnd = filePath.indexOf(\"}\", arrowIdx);\n if (braceEnd !== -1) {\n const prefix = filePath.slice(0, braceStart);\n const suffix = filePath.slice(braceEnd + 1);\n const newPart = filePath.slice(braceStart + 1, braceEnd).split(\" => \")[1];\n filePath = prefix + newPart + suffix;\n }\n } else {\n filePath = filePath.slice(arrowIdx + 4);\n }\n }\n\n numstatMap.set(filePath, { additions, deletions, isBinary });\n }\n\n // Filter by path\n const filtered = filterPath ? entries.filter(e => e.path === filterPath) : entries;\n\n // Build response with file contents (parallel reads)\n const MAX_CONTENT_SIZE = 1_000_000;\n\n const fileResults = await Promise.all(filtered.map(async(entry) => {\n // Skip binary files from numstat\n const stats = numstatMap.get(entry.path);\n if (stats?.isBinary) {return null;}\n\n let oldContent = \"\";\n let newContent = \"\";\n let truncated = false;\n\n // Old content from HEAD\n if (hasHead && (entry.status === \"modified\" || entry.status === \"deleted\" || entry.status === \"renamed\" || entry.status === \"copied\")) {\n const showPath = entry.oldPath ?? entry.path;\n try {\n oldContent = await gitExec([\"show\", `HEAD:${showPath}`], cwd);\n if (oldContent.length > MAX_CONTENT_SIZE) {\n oldContent = oldContent.slice(0, MAX_CONTENT_SIZE);\n truncated = true;\n }\n } catch { /* not in HEAD */ }\n }\n\n // New content from working tree\n if (entry.status !== \"deleted\") {\n try {\n const resolved = resolve(cwd, entry.path);\n const buf = await readFile(resolved);\n // Skip binary files (NUL byte in first 8KB)\n if (buf.subarray(0, 8192).includes(0)) {return null;}\n newContent = buf.toString(\"utf-8\");\n if (newContent.length > MAX_CONTENT_SIZE) {\n newContent = newContent.slice(0, MAX_CONTENT_SIZE);\n truncated = true;\n }\n } catch { /* file missing */ }\n }\n\n const additions = stats?.additions\n ?? (entry.status === \"untracked\" ? newContent.split(\"\\n\").length : 0);\n const deletions = stats?.deletions ?? 0;\n\n const file: Record<string, unknown> = {\n path: entry.path,\n status: entry.status,\n oldContent,\n newContent,\n additions,\n deletions,\n };\n if (entry.oldPath) {file.oldPath = entry.oldPath;}\n if (truncated) {file.truncated = true;}\n\n return file;\n }));\n\n const files = fileResults.filter((f): f is Record<string, unknown> => f !== null);\n\n return c.json({ files, ...(branch ? { branch } : {}) });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- MCP server endpoints --\n\n app.get(\"/api/mcp/servers\", async(c) => {\n try {\n const [config, cache, provenance] = await Promise.all([\n loadMcpServerConfig(context.agentDir, context.cwd),\n loadMcpServerCache(context.agentDir),\n getServerProvenance(context.agentDir, context.cwd),\n ]);\n\n const servers = Object.entries(config.mcpServers).map(([name, entry]) => {\n const prov = provenance.get(name);\n const serverCache = cache?.servers[name] ?? null;\n return {\n name,\n transport: detectTransport(entry),\n config: redactSensitiveFields(entry),\n provenance: prov?.kind ?? \"user\",\n importSource: prov?.importKind ?? null,\n cache: serverCache\n ? {\n toolCount: serverCache.tools?.length ?? 0,\n resourceCount: serverCache.resources?.length ?? 0,\n cachedAt: new Date(serverCache.cachedAt).toISOString(),\n isValid: isServerCacheValid(serverCache, entry),\n }\n : null,\n };\n });\n\n return c.json({\n servers,\n settings: {\n toolPrefix: config.settings?.toolPrefix ?? \"server\",\n idleTimeout: config.settings?.idleTimeout ?? 10,\n directTools: config.settings?.directTools ?? false,\n },\n imports: config.imports ?? null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/mcp/servers/:serverName\", async(c) => {\n const serverName = c.req.param(\"serverName\");\n try {\n const [config, cache, provenance] = await Promise.all([\n loadMcpServerConfig(context.agentDir, context.cwd),\n loadMcpServerCache(context.agentDir),\n getServerProvenance(context.agentDir, context.cwd),\n ]);\n\n const entry = config.mcpServers[serverName];\n if (!entry) {\n return c.json({ error: `Server \"${serverName}\" not found` }, 404);\n }\n\n const prov = provenance.get(serverName);\n const serverCache = cache?.servers[serverName] ?? null;\n\n return c.json({\n name: serverName,\n transport: detectTransport(entry),\n config: redactSensitiveFields(entry),\n provenance: prov?.kind ?? \"user\",\n tools: serverCache?.tools?.map((t) => ({\n name: t.name,\n description: t.description ?? null,\n inputSchema: t.inputSchema,\n })) ?? [],\n resources: serverCache?.resources?.map((r) => ({\n uri: r.uri,\n name: r.name,\n description: r.description ?? null,\n })) ?? [],\n cache: serverCache\n ? {\n configHash: serverCache.configHash,\n toolCount: serverCache.tools?.length ?? 0,\n resourceCount: serverCache.resources?.length ?? 0,\n cachedAt: new Date(serverCache.cachedAt).toISOString(),\n isValid: isServerCacheValid(serverCache, entry),\n }\n : null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.post(\"/api/mcp/servers\", async(c) => {\n try {\n const body = await c.req.json<{ name?: string; config?: unknown }>();\n if (!body.name) {\n return c.json({ error: \"Missing required field: name\" }, 400);\n }\n\n const nameResult = validateServerName(body.name);\n if (!nameResult.ok) {\n return c.json({ error: nameResult.error }, 400);\n }\n\n const entryResult = validateServerEntry(body.config);\n if (!entryResult.ok) {\n return c.json({ error: entryResult.error }, 400);\n }\n\n await addMcpServer(context.agentDir, body.name, entryResult.value);\n return c.json({ ok: true, name: body.name, config: redactSensitiveFields(entryResult.value) });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"already exists\") ? 409 : 500;\n return c.json({ error: message }, status);\n }\n });\n\n app.put(\"/api/mcp/servers/:serverName\", async(c) => {\n const serverName = c.req.param(\"serverName\");\n try {\n // Reject mutations to non-user servers\n const provenance = await getServerProvenance(context.agentDir, context.cwd);\n const prov = provenance.get(serverName);\n if (prov && prov.kind !== \"user\") {\n return c.json({ error: `Cannot modify ${prov.kind} server \"${serverName}\"` }, 403);\n }\n\n const body = await c.req.json<{ config?: unknown }>();\n const entryResult = validateServerEntry(body.config);\n if (!entryResult.ok) {\n return c.json({ error: entryResult.error }, 400);\n }\n\n await updateMcpServer(context.agentDir, serverName, entryResult.value);\n return c.json({ ok: true, name: serverName, config: redactSensitiveFields(entryResult.value) });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"not found\") ? 404 : 500;\n return c.json({ error: message }, status);\n }\n });\n\n app.delete(\"/api/mcp/servers/:serverName\", async(c) => {\n const serverName = c.req.param(\"serverName\");\n try {\n // Reject mutations to non-user servers\n const provenance = await getServerProvenance(context.agentDir, context.cwd);\n const prov = provenance.get(serverName);\n if (prov && prov.kind !== \"user\") {\n return c.json({ error: `Cannot remove ${prov.kind} server \"${serverName}\"` }, 403);\n }\n\n await removeMcpServer(context.agentDir, serverName);\n return c.json({ ok: true, name: serverName });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"not found\") ? 404 : 500;\n return c.json({ error: message }, status);\n }\n });\n\n // -- Skill endpoints --\n\n app.get(\"/api/skills\", async(c) => {\n try {\n const skills = (await listSkills(context.agentDir))\n .filter((skill) => skill.name !== \"docyrus-chrome-devtools-cli\");\n return c.json({ skills });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/skills/:skillName\", async(c) => {\n const skillName = c.req.param(\"skillName\");\n try {\n if (skillName === \"docyrus-chrome-devtools-cli\") {\n return c.json({ error: `Skill \"${skillName}\" not found` }, 404);\n }\n\n const result = await getSkillDetail(context.agentDir, skillName);\n if (!result) {\n return c.json({ error: `Skill \"${skillName}\" not found` }, 404);\n }\n return c.json({ ...result.skill, content: result.content });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- Tool endpoint --\n\n app.get(\"/api/tools\", async(c) => {\n try {\n const tools = await listAllTools({\n profile: context.profile,\n agentDir: context.agentDir,\n cwd: context.cwd,\n includeDocyrusWebBrowser: true,\n });\n\n const builtInCount = tools.filter((t) => t.source === \"built-in\").length;\n const mcpCount = tools.filter((t) => t.source !== \"built-in\").length;\n\n return c.json({\n tools,\n summary: { builtIn: builtInCount, mcp: mcpCount, total: tools.length },\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- CLI proxy endpoint --\n\n const BOOLEAN_CLI_FLAGS = new Set([\"json\", \"verbose\", \"global\", \"noAuth\", \"expand\", \"i\"]);\n\n function buildCliArgs(pathSegments: string[], query: Record<string, string>, body?: Record<string, unknown>): string[] {\n const args = [...pathSegments, \"--json\"];\n\n for (const [key, value] of Object.entries(query)) {\n if (key === \"json\") {continue;}\n const flag = key.length === 1 ? `-${key}` : `--${key}`;\n if (BOOLEAN_CLI_FLAGS.has(key) || value === \"\" || value === \"true\") {\n args.push(flag);\n } else {\n args.push(flag, value);\n }\n }\n\n if (body) {\n if (body.data !== undefined) {\n args.push(\"--data\", typeof body.data === \"string\" ? body.data : JSON.stringify(body.data));\n }\n if (typeof body.fromFile === \"string\") {\n args.push(\"--from-file\", body.fromFile);\n }\n // Pass remaining body fields as flags\n for (const [key, value] of Object.entries(body)) {\n if (key === \"data\" || key === \"fromFile\") {continue;}\n const flag = key.length === 1 ? `-${key}` : `--${key}`;\n if (typeof value === \"boolean\") {\n if (value) {args.push(flag);}\n } else if (value !== undefined && value !== null) {\n args.push(flag, String(value));\n }\n }\n }\n\n return args;\n }\n\n app.all(\"/api/cli/*\", async(c) => {\n const pathSegments = c.req.path\n .replace(/^\\/api\\/cli\\/?/, \"\")\n .split(\"/\")\n .filter(Boolean);\n\n if (pathSegments.length === 0) {\n return c.json({ error: \"No command specified. Usage: /api/cli/<command>/[subcommand]/[args...]\" }, 400);\n }\n\n const query: Record<string, string> = {};\n for (const [key, value] of Object.entries(c.req.query())) {\n if (typeof value === \"string\") {\n query[key] = value;\n }\n }\n\n let body: Record<string, unknown> | undefined;\n if (c.req.method === \"POST\" || c.req.method === \"PUT\") {\n try {\n body = await c.req.json();\n } catch { /* no body */ }\n }\n\n const cliArgs = buildCliArgs(pathSegments, query, body);\n\n return new Promise<Response>((resolveResponse) => {\n const scopeArgs = CLI_SCOPE ? [\"--scope\", CLI_SCOPE] : [];\n const proc = spawn(CLI_EXEC, [CLI_ENTRY, ...scopeArgs, ...cliArgs], {\n cwd: context.cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n timeout: CLI_TIMEOUT_MS,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout?.on(\"data\", (chunk: Buffer) => { stdout += chunk.toString(); });\n proc.stderr?.on(\"data\", (chunk: Buffer) => { stderr += chunk.toString(); });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n resolveResponse(c.json({\n error: stderr.trim() || `Command exited with code ${code}`,\n command: `docyrus ${cliArgs.join(\" \")}`,\n exitCode: code,\n }, 500));\n return;\n }\n\n try {\n const parsed = JSON.parse(stdout);\n resolveResponse(c.json(parsed));\n } catch {\n resolveResponse(c.json({ output: stdout.trim(), command: `docyrus ${cliArgs.join(\" \")}` }));\n }\n });\n\n proc.on(\"error\", (err) => {\n resolveResponse(c.json({ error: err.message, command: `docyrus ${cliArgs.join(\" \")}` }, 500));\n });\n });\n });\n\n const { serve } = await import(\"@hono/node-server\");\n\n const MAX_PORT_RETRIES = 10;\n\n function printBanner(actualPort: number): void {\n process.stderr.write(`\\n Agent server listening on http://localhost:${actualPort}\\n\\n`);\n process.stderr.write(` POST /api/chat \u2014 send chat messages (SSE UIMessage stream)\\n`);\n process.stderr.write(` GET /api/health \u2014 health check\\n`);\n process.stderr.write(` GET /api/status \u2014 session status\\n`);\n process.stderr.write(` GET /api/sessions \u2014 list sessions\\n`);\n process.stderr.write(` POST /api/sessions \u2014 create a new session\\n`);\n process.stderr.write(` GET /api/sessions/:sessionId/messages \u2014 session messages\\n`);\n process.stderr.write(` POST /api/sessions/:sessionId/resume \u2014 resume a session\\n`);\n process.stderr.write(` GET /api/context \u2014 server context\\n`);\n process.stderr.write(` GET /api/models \u2014 available models\\n`);\n process.stderr.write(` GET /api/auth/providers \u2014 auth provider catalog\\n`);\n process.stderr.write(` POST /api/auth/providers/:id/login \u2014 provider login/start login flow\\n`);\n process.stderr.write(` POST /api/auth/providers/:id/oauth/continue \u2014 continue OAuth flow\\n`);\n process.stderr.write(` POST /api/auth/providers/:id/logout \u2014 provider logout\\n`);\n process.stderr.write(` POST /api/models/select \u2014 select model and optional thinking level\\n`);\n process.stderr.write(` GET /api/slash-commands \u2014 slash command list\\n`);\n process.stderr.write(` GET /api/fs/tree \u2014 directory tree\\n`);\n process.stderr.write(` GET /api/fs/search \u2014 search files by glob\\n`);\n process.stderr.write(` GET /api/fs/read \u2014 read file contents\\n`);\n process.stderr.write(` POST /api/fs/write \u2014 write file\\n`);\n process.stderr.write(` POST /api/fs/mkdir \u2014 create directory\\n`);\n process.stderr.write(` POST /api/fs/rename \u2014 rename/move file\\n`);\n process.stderr.write(` DEL /api/fs \u2014 delete file or directory\\n`);\n process.stderr.write(` GET /api/env/status \u2014 dev server status\\n`);\n process.stderr.write(` POST /api/env/serve \u2014 start dev server (pnpm dev)\\n`);\n process.stderr.write(` POST /api/env/stop \u2014 stop dev server\\n`);\n process.stderr.write(` GET /api/git/diff \u2014 uncommitted file diffs\\n`);\n process.stderr.write(` GET /api/mcp/servers \u2014 list MCP servers\\n`);\n process.stderr.write(` GET /api/mcp/servers/:name \u2014 MCP server details\\n`);\n process.stderr.write(` POST /api/mcp/servers \u2014 add MCP server\\n`);\n process.stderr.write(` PUT /api/mcp/servers/:name \u2014 update MCP server\\n`);\n process.stderr.write(` DEL /api/mcp/servers/:name \u2014 remove MCP server\\n`);\n process.stderr.write(` GET /api/skills \u2014 list skills\\n`);\n process.stderr.write(` GET /api/skills/:name \u2014 skill details\\n`);\n process.stderr.write(` GET /api/tools \u2014 list all tools\\n`);\n process.stderr.write(` * /api/cli/** \u2014 proxy any docyrus CLI command\\n\\n`);\n }\n\n for (let attempt = 0; attempt < MAX_PORT_RETRIES; attempt++) {\n const candidatePort = port + attempt;\n try {\n await new Promise<void>((resolveStart, rejectStart) => {\n const server = serve({ fetch: app.fetch, port: candidatePort }, () => {\n printBanner(candidatePort);\n resolveStart();\n });\n\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n process.stderr.write(` Port ${candidatePort} in use, trying ${candidatePort + 1}...\\n`);\n rejectStart(err);\n } else {\n throw err;\n }\n });\n });\n return; // Server started successfully\n } catch (err: unknown) {\n const isAddrInUse = err instanceof Error && \"code\" in err && (err as NodeJS.ErrnoException).code === \"EADDRINUSE\";\n if (!isAddrInUse || attempt === MAX_PORT_RETRIES - 1) {\n throw new Error(`All ports ${port}\u2013${port + MAX_PORT_RETRIES - 1} are in use`);\n }\n }\n }\n}\n\nexport function extractBearerToken(authorizationHeader: string | null): string | null {\n if (!authorizationHeader) {\n return null;\n }\n\n const trimmed = authorizationHeader.trim();\n const firstSpaceIndex = trimmed.indexOf(\" \");\n if (firstSpaceIndex <= 0) {\n return null;\n }\n\n const scheme = trimmed.slice(0, firstSpaceIndex);\n const token = trimmed.slice(firstSpaceIndex + 1).trim();\n if (scheme.toLowerCase() !== \"bearer\" || token.length === 0) {\n return null;\n }\n\n return token;\n}\n\nfunction hashToken(token: string): Buffer {\n return createHash(\"sha256\").update(token).digest();\n}\n\nexport function isBearerTokenAuthorized(actualToken: string | null, expectedToken?: string): boolean {\n if (!expectedToken) {\n return true;\n }\n\n if (!actualToken) {\n return false;\n }\n\n const actualHash = hashToken(actualToken);\n const expectedHash = hashToken(expectedToken);\n return timingSafeEqual(actualHash, expectedHash);\n}\n\nfunction createUnauthorizedResponse(): Response {\n return new Response(JSON.stringify({ error: \"Unauthorized\" }), {\n status: 401,\n headers: {\n \"Content-Type\": \"application/json\",\n \"WWW-Authenticate\": \"Bearer\",\n },\n });\n}\n\nexport function authorizeServerRequest(request: Request, expectedToken?: string): Response | null {\n if (!expectedToken || request.method === \"OPTIONS\") {\n return null;\n }\n\n const authorizationHeader = request.headers.get(\"Authorization\");\n const token = extractBearerToken(authorizationHeader);\n if (!isBearerTokenAuthorized(token, expectedToken)) {\n return createUnauthorizedResponse();\n }\n\n return null;\n}\n", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n if (/(?:^|\\.)__proto__\\./.test(key)) {\n return;\n }\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n", "// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const hashIndex = url.indexOf(\"#\", i);\n const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n const path = url.slice(start, end);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63 || charCode === 35) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(\"?\", 8);\n if (keyIndex2 === -1) {\n return void 0;\n }\n if (!url.startsWith(key, keyIndex2 + 1)) {\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode,\n tryDecodeURI\n};\n", "// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n /**\n * `.raw` can get the raw Request object.\n *\n * @see {@link https://hono.dev/docs/api/request#raw}\n *\n * @example\n * ```ts\n * // For Cloudflare Workers\n * app.post('/', async (c) => {\n * const metadata = c.req.raw.cf?.hostMetadata?\n * ...\n * })\n * ```\n */\n raw;\n #validatedData;\n // Short name of validatedData\n #matchResult;\n routeIndex = 0;\n /**\n * `.path` can get the pathname of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#path}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const pathname = c.req.path // `/about/me`\n * })\n * ```\n */\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n this.#validatedData = {};\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n /**\n * `.json()` can parse Request body of type `application/json`\n *\n * @see {@link https://hono.dev/docs/api/request#json}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.json()\n * })\n * ```\n */\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n /**\n * `.text()` can parse Request body of type `text/plain`\n *\n * @see {@link https://hono.dev/docs/api/request#text}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.text()\n * })\n * ```\n */\n text() {\n return this.#cachedBody(\"text\");\n }\n /**\n * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n *\n * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.arrayBuffer()\n * })\n * ```\n */\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n /**\n * Parses the request body as a `Blob`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.blob();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#blob\n */\n blob() {\n return this.#cachedBody(\"blob\");\n }\n /**\n * Parses the request body as `FormData`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.formData();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#formdata\n */\n formData() {\n return this.#cachedBody(\"formData\");\n }\n /**\n * Adds validated data to the request.\n *\n * @param target - The target of the validation.\n * @param data - The validated data to add.\n */\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n /**\n * `.url()` can get the request url strings.\n *\n * @see {@link https://hono.dev/docs/api/request#url}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const url = c.req.url // `http://localhost:8787/about/me`\n * ...\n * })\n * ```\n */\n get url() {\n return this.raw.url;\n }\n /**\n * `.method()` can get the method name of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#method}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const method = c.req.method // `GET`\n * })\n * ```\n */\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n /**\n * `.matchedRoutes()` can return a matched route in the handler\n *\n * @deprecated\n *\n * Use matchedRoutes helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n *\n * @example\n * ```ts\n * app.use('*', async function logger(c, next) {\n * await next()\n * c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n * const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n * console.log(\n * method,\n * ' ',\n * path,\n * ' '.repeat(Math.max(10 - path.length, 0)),\n * name,\n * i === c.req.routeIndex ? '<- respond from here' : ''\n * )\n * })\n * })\n * ```\n */\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n /**\n * `routePath()` can retrieve the path registered within the handler\n *\n * @deprecated\n *\n * Use routePath helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#routepath}\n *\n * @example\n * ```ts\n * app.get('/posts/:id', (c) => {\n * return c.json({ path: c.req.routePath })\n * })\n * ```\n */\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nvar cloneRawRequest = async (req) => {\n if (!req.raw.bodyUsed) {\n return req.raw.clone();\n }\n const cacheKey = Object.keys(req.bodyCache)[0];\n if (!cacheKey) {\n throw new HTTPException(500, {\n message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n });\n }\n const requestInit = {\n body: await req[cacheKey](),\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers: req.header(),\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar createResponseInstance = (body, init) => new Response(body, init);\nvar Context = class {\n #rawRequest;\n #req;\n /**\n * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n *\n * @see {@link https://hono.dev/docs/api/context#env}\n *\n * @example\n * ```ts\n * // Environment object for Cloudflare Workers\n * app.get('*', async c => {\n * const counter = c.env.COUNTER\n * })\n * ```\n */\n env = {};\n #var;\n finalized = false;\n /**\n * `.error` can get the error object from the middleware if the Handler throws an error.\n *\n * @see {@link https://hono.dev/docs/api/context#error}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * await next()\n * if (c.error) {\n * // do something...\n * }\n * })\n * ```\n */\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n /**\n * Creates an instance of the Context class.\n *\n * @param req - The Request object.\n * @param options - Optional configuration options for the context.\n */\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n /**\n * `.req` is the instance of {@link HonoRequest}.\n */\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#event}\n * The FetchEvent associated with the current request.\n *\n * @throws Will throw an error if the context does not have a FetchEvent.\n */\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#executionctx}\n * The ExecutionContext associated with the current request.\n *\n * @throws Will throw an error if the context does not have an ExecutionContext.\n */\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#res}\n * The Response object for the current request.\n */\n get res() {\n return this.#res ||= createResponseInstance(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n /**\n * Sets the Response object for the current request.\n *\n * @param _res - The Response object to set.\n */\n set res(_res) {\n if (this.#res && _res) {\n _res = createResponseInstance(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n /**\n * `.render()` can create a response within a layout.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * return c.render('Hello!')\n * })\n * ```\n */\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n /**\n * Sets the layout for the response.\n *\n * @param layout - The layout to set.\n * @returns The layout function.\n */\n setLayout = (layout) => this.#layout = layout;\n /**\n * Gets the current layout for the response.\n *\n * @returns The current layout function.\n */\n getLayout = () => this.#layout;\n /**\n * `.setRenderer()` can set the layout in the custom middleware.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```tsx\n * app.use('*', async (c, next) => {\n * c.setRenderer((content) => {\n * return c.html(\n * <html>\n * <body>\n * <p>{content}</p>\n * </body>\n * </html>\n * )\n * })\n * await next()\n * })\n * ```\n */\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n /**\n * `.header()` can set headers.\n *\n * @see {@link https://hono.dev/docs/api/context#header}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n *\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = createResponseInstance(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n /**\n * `.set()` can set the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * c.set('message', 'Hono is hot!!')\n * await next()\n * })\n * ```\n */\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n /**\n * `.get()` can use the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * const message = c.get('message')\n * return c.text(`The message is \"${message}\"`)\n * })\n * ```\n */\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n /**\n * `.var` can access the value of a variable.\n *\n * @see {@link https://hono.dev/docs/api/context#var}\n *\n * @example\n * ```ts\n * const result = c.var.client.oneMethod()\n * ```\n */\n // c.var.propName is a read-only\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return createResponseInstance(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n /**\n * `.body()` can return the HTTP response.\n * You can set headers with `.header()` and set HTTP status code with `.status`.\n * This can also be set in `.text()`, `.json()` and so on.\n *\n * @see {@link https://hono.dev/docs/api/context#body}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n * // Set HTTP status code\n * c.status(201)\n *\n * // Return the response body\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n /**\n * `.text()` can render text as `Content-Type:text/plain`.\n *\n * @see {@link https://hono.dev/docs/api/context#text}\n *\n * @example\n * ```ts\n * app.get('/say', (c) => {\n * return c.text('Hello!')\n * })\n * ```\n */\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n /**\n * `.json()` can render JSON as `Content-Type:application/json`.\n *\n * @see {@link https://hono.dev/docs/api/context#json}\n *\n * @example\n * ```ts\n * app.get('/api', (c) => {\n * return c.json({ message: 'Hello!' })\n * })\n * ```\n */\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n /**\n * `.redirect()` can Redirect, default status code is 302.\n *\n * @see {@link https://hono.dev/docs/api/context#redirect}\n *\n * @example\n * ```ts\n * app.get('/redirect', (c) => {\n * return c.redirect('/')\n * })\n * app.get('/redirect-permanently', (c) => {\n * return c.redirect('/', 301)\n * })\n * ```\n */\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n // Multibyes should be encoded\n // eslint-disable-next-line no-control-regex\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n /**\n * `.notFound()` can return the Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/context#notfound}\n *\n * @example\n * ```ts\n * app.get('/notfound', (c) => {\n * return c.notFound()\n * })\n * ```\n */\n notFound = () => {\n this.#notFoundHandler ??= () => createResponseInstance();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n /**\n * `.basePath()` allows base paths to be specified.\n *\n * @see {@link https://hono.dev/docs/api/routing#base-path}\n *\n * @param {string} path - base Path\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * const api = new Hono().basePath('/api')\n * ```\n */\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n /**\n * `.onError()` handles an error and returns a customized Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#error-handling}\n *\n * @param {ErrorHandler} handler - request Handler for error\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.onError((err, c) => {\n * console.error(`${err}`)\n * return c.text('Custom Error Message', 500)\n * })\n * ```\n */\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n /**\n * `.notFound()` allows you to customize a Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#not-found}\n *\n * @param {NotFoundHandler} handler - request handler for not-found\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.notFound((c) => {\n * return c.text('Custom 404 Message', 404)\n * })\n * ```\n */\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n /**\n * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n *\n * @see {@link https://hono.dev/docs/api/hono#mount}\n *\n * @param {string} path - base Path\n * @param {Function} applicationHandler - other Request Handler\n * @param {MountOptions} [options] - options of `.mount()`\n * @returns {Hono} mounted Hono instance\n *\n * @example\n * ```ts\n * import { Router as IttyRouter } from 'itty-router'\n * import { Hono } from 'hono'\n * // Create itty-router application\n * const ittyRouter = IttyRouter()\n * // GET /itty-router/hello\n * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n *\n * const app = new Hono()\n * app.mount('/itty-router', ittyRouter.handle)\n * ```\n *\n * @example\n * ```ts\n * const app = new Hono()\n * // Send the request to another application without modification.\n * app.mount('/app', anotherApp, {\n * replaceRequest: (req) => req,\n * })\n * ```\n */\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar hasChildren = (children) => {\n for (const _ in children) {\n return true;\n }\n return false;\n};\nvar Node = class _Node {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new _Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n const len = parts.length;\n let partOffsets = null;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n }\n this.#pushHandlerSets(handlerSets, nextNode, method, node.#params);\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n this.#pushHandlerSets(handlerSets, astNode, method, node.#params);\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n if (matcher instanceof RegExp) {\n if (partOffsets === null) {\n partOffsets = new Array(len);\n let offset = path[0] === \"/\" ? 1 : 0;\n for (let p = 0; p < len; p++) {\n partOffsets[p] = offset;\n offset += parts[p].length + 1;\n }\n }\n const restPathString = path.substring(partOffsets[i]);\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n if (hasChildren(child.#children)) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n if (child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n params,\n node.#params\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n const shifted = curNodesQueue.shift();\n curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "// src/middleware/cors/index.ts\nvar cors = (options) => {\n const defaults = {\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\"],\n allowHeaders: [],\n exposeHeaders: []\n };\n const opts = {\n ...defaults,\n ...options\n };\n const findAllowOrigin = ((optsOrigin) => {\n if (typeof optsOrigin === \"string\") {\n if (optsOrigin === \"*\") {\n return () => optsOrigin;\n } else {\n return (origin) => optsOrigin === origin ? origin : null;\n }\n } else if (typeof optsOrigin === \"function\") {\n return optsOrigin;\n } else {\n return (origin) => optsOrigin.includes(origin) ? origin : null;\n }\n })(opts.origin);\n const findAllowMethods = ((optsAllowMethods) => {\n if (typeof optsAllowMethods === \"function\") {\n return optsAllowMethods;\n } else if (Array.isArray(optsAllowMethods)) {\n return () => optsAllowMethods;\n } else {\n return () => [];\n }\n })(opts.allowMethods);\n return async function cors2(c, next) {\n function set(key, value) {\n c.res.headers.set(key, value);\n }\n const allowOrigin = await findAllowOrigin(c.req.header(\"origin\") || \"\", c);\n if (allowOrigin) {\n set(\"Access-Control-Allow-Origin\", allowOrigin);\n }\n if (opts.credentials) {\n set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n if (opts.exposeHeaders?.length) {\n set(\"Access-Control-Expose-Headers\", opts.exposeHeaders.join(\",\"));\n }\n if (c.req.method === \"OPTIONS\") {\n if (opts.origin !== \"*\") {\n set(\"Vary\", \"Origin\");\n }\n if (opts.maxAge != null) {\n set(\"Access-Control-Max-Age\", opts.maxAge.toString());\n }\n const allowMethods = await findAllowMethods(c.req.header(\"origin\") || \"\", c);\n if (allowMethods.length) {\n set(\"Access-Control-Allow-Methods\", allowMethods.join(\",\"));\n }\n let headers = opts.allowHeaders;\n if (!headers?.length) {\n const requestHeaders = c.req.header(\"Access-Control-Request-Headers\");\n if (requestHeaders) {\n headers = requestHeaders.split(/\\s*,\\s*/);\n }\n }\n if (headers?.length) {\n set(\"Access-Control-Allow-Headers\", headers.join(\",\"));\n c.res.headers.append(\"Vary\", \"Access-Control-Request-Headers\");\n }\n c.res.headers.delete(\"Content-Length\");\n c.res.headers.delete(\"Content-Type\");\n return new Response(null, {\n headers: c.res.headers,\n status: 204,\n statusText: \"No Content\"\n });\n }\n await next();\n if (opts.origin !== \"*\") {\n c.header(\"Vary\", \"Origin\", { append: true });\n }\n };\n};\nexport {\n cors\n};\n", "export const ASK_USER_TAG = \"ask_user\";\nexport const ASK_USER_OPEN = `<${ASK_USER_TAG}>`;\nexport const ASK_USER_CLOSE = `</${ASK_USER_TAG}>`;\nexport const ASK_USER_RESPONSE_TAG = \"ask_user_response\";\nexport const ASK_USER_RESPONSE_OPEN = `<${ASK_USER_RESPONSE_TAG}>`;\nexport const ASK_USER_RESPONSE_CLOSE = `</${ASK_USER_RESPONSE_TAG}>`;\n\nexport type IAskUserQuestionType = \"text\" | \"textarea\" | \"boolean\" | \"singleSelect\" | \"multiSelect\";\nexport type IAskUserAnswerValue = string | boolean | string[];\n\nexport interface IAskUserOption {\n\tlabel: string;\n\tvalue: string;\n}\n\nexport interface IAskUserQuestion {\n\tid: string;\n\tlabel: string;\n\tdescription?: string;\n\ttype: IAskUserQuestionType;\n\trequired?: boolean;\n\toptions?: IAskUserOption[];\n\tplaceholder?: string;\n\tdefaultValue?: IAskUserAnswerValue;\n}\n\nexport interface IAskUserRequest {\n\ttitle: string;\n\tmessage: string;\n\tquestions: IAskUserQuestion[];\n}\n\nexport interface IAskUserResponse {\n\taction: \"submit\" | \"cancel\" | \"decline\";\n\tanswers: Record<string, IAskUserAnswerValue>;\n}\n\nfunction hashString(value: string): string {\n let hash = 0;\n for (let index = 0; index < value.length; index += 1) {\n hash = ((hash << 5) - hash) + value.charCodeAt(index);\n hash |= 0;\n }\n return Math.abs(hash).toString(36);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction normalizeTrimmedString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction normalizeQuestionType(value: unknown): IAskUserQuestionType | undefined {\n return value === \"text\" ||\n\t\tvalue === \"textarea\" ||\n\t\tvalue === \"boolean\" ||\n\t\tvalue === \"singleSelect\" ||\n\t\tvalue === \"multiSelect\"\n ? value\n : undefined;\n}\n\nfunction normalizeDefaultValue(value: unknown): IAskUserAnswerValue | undefined {\n if (typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n if (Array.isArray(value) && value.every((item) => typeof item === \"string\")) {\n return [...value];\n }\n return undefined;\n}\n\nfunction normalizeOptions(value: unknown): IAskUserOption[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const options: IAskUserOption[] = [];\n for (const item of value) {\n if (!isRecord(item) || !isNonEmptyString(item.label) || !isNonEmptyString(item.value)) {\n return undefined;\n }\n options.push({\n label: item.label.trim(),\n value: item.value.trim(),\n });\n }\n\n return options;\n}\n\nexport function normalizeAskUserQuestion(value: unknown): IAskUserQuestion | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const id = normalizeTrimmedString(value.id);\n const label = normalizeTrimmedString(value.label);\n const type = normalizeQuestionType(value.type);\n if (!id || !label || !type) {\n return undefined;\n }\n\n const question: IAskUserQuestion = {\n id,\n label,\n type,\n };\n\n const description = normalizeTrimmedString(value.description);\n if (description) {\n question.description = description;\n }\n\n if (typeof value.required === \"boolean\") {\n question.required = value.required;\n }\n\n const options = normalizeOptions(value.options);\n if (type === \"singleSelect\" || type === \"multiSelect\") {\n if (!options || options.length === 0) {\n return undefined;\n }\n question.options = options;\n }\n\n const placeholder = normalizeTrimmedString(value.placeholder);\n if (placeholder) {\n question.placeholder = placeholder;\n }\n\n const defaultValue = normalizeDefaultValue(value.defaultValue);\n if (defaultValue !== undefined) {\n question.defaultValue = defaultValue;\n }\n\n return question;\n}\n\nexport function normalizeAskUserRequest(value: unknown): IAskUserRequest | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const title = normalizeTrimmedString(value.title);\n const message = normalizeTrimmedString(value.message);\n if (!title || !message || !Array.isArray(value.questions) || value.questions.length === 0) {\n return undefined;\n }\n\n const questions: IAskUserQuestion[] = [];\n for (const question of value.questions) {\n const normalized = normalizeAskUserQuestion(question);\n if (!normalized) {\n return undefined;\n }\n questions.push(normalized);\n }\n\n return {\n title,\n message,\n questions,\n };\n}\n\nexport function normalizeAskUserResponse(value: unknown): IAskUserResponse | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const action = value.action;\n if (action !== \"submit\" && action !== \"cancel\" && action !== \"decline\") {\n return undefined;\n }\n\n const answersRecord = isRecord(value.answers) ? value.answers : {};\n const answers: Record<string, IAskUserAnswerValue> = {};\n for (const [key, answerValue] of Object.entries(answersRecord)) {\n const normalized = normalizeDefaultValue(answerValue);\n if (normalized !== undefined) {\n answers[key] = normalized;\n }\n }\n\n return {\n action,\n answers,\n };\n}\n\nexport function buildAskUserProtocolInstructions(): string {\n return [\n \"When clarification is required, do not ask free-form prose questions.\",\n `Instead, output only a single ${ASK_USER_OPEN}...${ASK_USER_CLOSE} block and nothing else in the assistant message.`,\n \"Inside that block, emit strict JSON with this shape:\",\n '{\"title\":\"...\",\"message\":\"...\",\"questions\":[{\"id\":\"...\",\"label\":\"...\",\"description\":\"...\",\"type\":\"text|textarea|boolean|singleSelect|multiSelect\",\"required\":true,\"options\":[{\"label\":\"...\",\"value\":\"...\"}],\"placeholder\":\"...\",\"defaultValue\":\"...\"}]}',\n \"Use batch questions when possible, keep ids stable, and limit the batch to the minimum needed to continue planning.\",\n ].join(\"\\n\");\n}\n\nexport function serializeAskUserRequest(request: IAskUserRequest): string {\n return `${ASK_USER_OPEN}\\n${JSON.stringify(request, null, 2)}\\n${ASK_USER_CLOSE}`;\n}\n\nexport function createAskUserToolCallId(request: IAskUserRequest): string {\n return `ask_user_${hashString(JSON.stringify(request))}`;\n}\n\nexport function parseAskUserRequestFromText(text: string): IAskUserRequest | undefined {\n const trimmed = text.trim();\n if (!trimmed.startsWith(ASK_USER_OPEN) || !trimmed.endsWith(ASK_USER_CLOSE)) {\n return undefined;\n }\n\n const body = trimmed.slice(ASK_USER_OPEN.length, trimmed.length - ASK_USER_CLOSE.length).trim();\n if (!body) {\n return undefined;\n }\n\n try {\n return normalizeAskUserRequest(JSON.parse(body));\n } catch {\n return undefined;\n }\n}\n\nexport function formatAskUserResponsePrompt(response: IAskUserResponse): string {\n return [\n \"The user submitted structured clarification answers.\",\n \"\",\n `${ASK_USER_RESPONSE_OPEN}`,\n JSON.stringify(response, null, 2),\n `${ASK_USER_RESPONSE_CLOSE}`,\n \"\",\n \"Continue the planning workflow using these answers.\",\n ].join(\"\\n\");\n}\n\nexport function parseAskUserResponseFromToolOutput(output: unknown): IAskUserResponse | undefined {\n return normalizeAskUserResponse(output);\n}\n", "export const DOCYRUS_WEB_BROWSER_EXTENSION_NAME = \"docyrus-web-browser\";\nexport const DOCYRUS_WEB_BROWSER_TAG = \"docyrus_web_browser\";\nexport const DOCYRUS_WEB_BROWSER_OPEN = `<${DOCYRUS_WEB_BROWSER_TAG}>`;\nexport const DOCYRUS_WEB_BROWSER_CLOSE = `</${DOCYRUS_WEB_BROWSER_TAG}>`;\nexport const DOCYRUS_WEB_BROWSER_RESULT_TAG = \"docyrus_web_browser_result\";\nexport const DOCYRUS_WEB_BROWSER_RESULT_OPEN = `<${DOCYRUS_WEB_BROWSER_RESULT_TAG}>`;\nexport const DOCYRUS_WEB_BROWSER_RESULT_CLOSE = `</${DOCYRUS_WEB_BROWSER_RESULT_TAG}>`;\nexport const WEB_PREVIEW_CONTEXT_TOOL = \"web_preview_context\";\nexport const WEB_PREVIEW_PLAYWRIGHT_TOOL = \"web_preview_playwright\";\n\nexport const DOCYRUS_WEB_BROWSER_TOOL_NAMES = [\n WEB_PREVIEW_CONTEXT_TOOL,\n WEB_PREVIEW_PLAYWRIGHT_TOOL,\n] as const;\n\nexport type IDocyrusWebBrowserToolName = typeof DOCYRUS_WEB_BROWSER_TOOL_NAMES[number];\n\nexport interface IDocyrusWebBrowserToolRequest {\n tool: IDocyrusWebBrowserToolName;\n input?: Record<string, unknown>;\n}\n\nexport interface IDocyrusWebBrowserToolResponsePrompt {\n tool: IDocyrusWebBrowserToolName;\n request?: Record<string, unknown>;\n status: \"success\" | \"error\";\n output?: unknown;\n errorText?: string;\n}\n\nexport interface IDocyrusWebBrowserClientToolInfo {\n name: IDocyrusWebBrowserToolName;\n description: string;\n inputSchema?: Record<string, unknown>;\n}\n\nexport const DOCYRUS_WEB_BROWSER_CLIENT_TOOLS: IDocyrusWebBrowserClientToolInfo[] = [\n {\n name: WEB_PREVIEW_CONTEXT_TOOL,\n description:\n \"Inspect the current Docyrus web preview state before automation. Prefer this first when preview availability or bridge state is unknown.\",\n inputSchema: {\n type: \"object\",\n properties: {\n includeSnapshot: { type: \"boolean\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: WEB_PREVIEW_PLAYWRIGHT_TOOL,\n description:\n \"Run Playwright-style actions against the Docyrus web preview. Prefer structured steps over raw scripts.\",\n inputSchema: {\n type: \"object\",\n properties: {\n script: { type: \"string\" },\n steps: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n action: { type: \"string\" },\n selector: { type: \"string\" },\n url: { type: \"string\" },\n value: { type: \"string\" },\n values: {\n type: \"array\",\n items: { type: \"string\" },\n },\n key: { type: \"string\" },\n attribute: { type: \"string\" },\n timeoutMs: { type: \"number\" },\n state: { type: \"string\" },\n },\n additionalProperties: true,\n },\n },\n timeoutMs: { type: \"number\" },\n stopOnError: { type: \"boolean\" },\n },\n additionalProperties: true,\n },\n },\n];\n\nfunction hashString(value: string): string {\n let hash = 0;\n for (let index = 0; index < value.length; index += 1) {\n hash = ((hash << 5) - hash) + value.charCodeAt(index);\n hash |= 0;\n }\n return Math.abs(hash).toString(36);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isDocyrusWebBrowserToolName(value: unknown): value is IDocyrusWebBrowserToolName {\n return DOCYRUS_WEB_BROWSER_TOOL_NAMES.some((toolName) => toolName === value);\n}\n\nexport function normalizeDocyrusWebBrowserToolRequest(value: unknown): IDocyrusWebBrowserToolRequest | undefined {\n if (!isRecord(value) || !isDocyrusWebBrowserToolName(value.tool)) {\n return undefined;\n }\n\n return {\n tool: value.tool,\n input: isRecord(value.input) ? value.input : undefined,\n };\n}\n\nexport function serializeDocyrusWebBrowserToolRequest(request: IDocyrusWebBrowserToolRequest): string {\n return `${DOCYRUS_WEB_BROWSER_OPEN}\\n${JSON.stringify(request, null, 2)}\\n${DOCYRUS_WEB_BROWSER_CLOSE}`;\n}\n\nexport function createDocyrusWebBrowserToolCallId(request: IDocyrusWebBrowserToolRequest): string {\n return `docyrus_web_browser_${hashString(JSON.stringify(request))}`;\n}\n\nexport function parseDocyrusWebBrowserRequestFromText(text: string): IDocyrusWebBrowserToolRequest | undefined {\n const trimmed = text.trim();\n if (!trimmed.startsWith(DOCYRUS_WEB_BROWSER_OPEN) || !trimmed.endsWith(DOCYRUS_WEB_BROWSER_CLOSE)) {\n return undefined;\n }\n\n const body = trimmed.slice(DOCYRUS_WEB_BROWSER_OPEN.length, trimmed.length - DOCYRUS_WEB_BROWSER_CLOSE.length).trim();\n if (!body) {\n return undefined;\n }\n\n try {\n return normalizeDocyrusWebBrowserToolRequest(JSON.parse(body));\n } catch {\n return undefined;\n }\n}\n\nexport function buildDocyrusWebBrowserProtocolInstructions(): string {\n return [\n \"When you need to inspect or automate the Docyrus web preview in server-backed sessions, use the docyrus-web-browser client tools.\",\n \"Do not use `docyrus chrome` or any visible Chrome DevTools workflow in this environment.\",\n `Instead, output only a single ${DOCYRUS_WEB_BROWSER_OPEN}...${DOCYRUS_WEB_BROWSER_CLOSE} block and nothing else in the assistant message.`,\n \"Inside that block, emit strict JSON with this shape:\",\n \"{\\\"tool\\\":\\\"web_preview_context\\\",\\\"input\\\":{\\\"includeSnapshot\\\":true}}\",\n \"or\",\n \"{\\\"tool\\\":\\\"web_preview_playwright\\\",\\\"input\\\":{\\\"steps\\\":[{\\\"action\\\":\\\"goto\\\",\\\"url\\\":\\\"/login\\\"},{\\\"action\\\":\\\"fill\\\",\\\"selector\\\":\\\"input[name='email']\\\",\\\"value\\\":\\\"demo@example.com\\\"}],\\\"timeoutMs\\\":10000,\\\"stopOnError\\\":true}}\",\n \"Call `web_preview_context` first when preview state is unknown.\",\n \"Prefer `steps` over `script` for `web_preview_playwright`.\",\n \"Supported playwright step actions are: goto, click, dblclick, hover, fill, press, select, check, uncheck, waitForSelector, waitForTimeout, textContent, getAttribute, title, url, snapshot.\",\n \"If the tool reports that the preview is unavailable or blocked by bridge/cross-origin constraints, stop and explain the exact blocker to the user.\",\n ].join(\"\\n\");\n}\n\nexport function formatDocyrusWebBrowserToolResponsePrompt(\n response: IDocyrusWebBrowserToolResponsePrompt,\n): string {\n return [\n \"The docyrus-web-browser client tool returned a result.\",\n \"\",\n `${DOCYRUS_WEB_BROWSER_RESULT_OPEN}`,\n JSON.stringify(response, null, 2),\n `${DOCYRUS_WEB_BROWSER_RESULT_CLOSE}`,\n \"\",\n \"Continue the task using this result. If the tool reported an availability or bridge blocker, explain that blocker exactly and do not claim success.\",\n ].join(\"\\n\");\n}\n", "import {\n createAskUserToolCallId,\n parseAskUserRequestFromText,\n type IAskUserRequest,\n} from \"../../resources/pi-agent/shared/askUserProtocol\";\nimport {\n createDocyrusWebBrowserToolCallId,\n parseDocyrusWebBrowserRequestFromText,\n type IDocyrusWebBrowserToolRequest,\n} from \"../../resources/pi-agent/shared/docyrusWebBrowserProtocol\";\n\ninterface IToolCallState {\n toolCallId: string;\n toolName: string;\n inputJson: string;\n}\n\ninterface ITextBufferState {\n text: string;\n mode: \"pending\" | \"plain\";\n}\n\nexport interface IEventBridgeParams {\n messageId: string;\n onChunk: (chunk: Record<string, unknown>) => void;\n onDone: () => void;\n onError: (errorText: string) => void;\n onAskUser?: (payload: { toolCallId: string; request: IAskUserRequest }) => void;\n onDocyrusWebBrowserTool?: (payload: {\n toolCallId: string;\n request: IDocyrusWebBrowserToolRequest;\n }) => void;\n}\n\nexport interface IAgentSessionEvent {\n type: string;\n assistantMessageEvent?: {\n type: string;\n contentIndex?: number;\n delta?: string;\n partial?: {\n content?: Array<{\n type: string;\n id?: string;\n name?: string;\n [key: string]: unknown;\n }>;\n };\n toolCall?: {\n id: string;\n name: string;\n input: unknown;\n };\n error?: unknown;\n };\n toolCallId?: string;\n toolName?: string;\n result?: unknown;\n isError?: boolean;\n}\n\nexport function createEventBridge(params: IEventBridgeParams) {\n const { messageId, onChunk, onDone, onError, onAskUser, onDocyrusWebBrowserTool } = params;\n const activeToolCalls = new Map<number, IToolCallState>();\n let activeTextBuffer: ITextBufferState | null = null;\n\n function flushBufferedTextToStream(close: boolean): void {\n if (!activeTextBuffer) {\n return;\n }\n\n onChunk({ type: \"text-start\", id: messageId });\n if (activeTextBuffer.text.length > 0) {\n onChunk({ type: \"text-delta\", id: messageId, delta: activeTextBuffer.text });\n }\n if (close) {\n onChunk({ type: \"text-end\", id: messageId });\n activeTextBuffer = null;\n return;\n }\n\n activeTextBuffer = { text: \"\", mode: \"plain\" };\n }\n\n function maybeEmitAskUser(text: string): boolean {\n const request = parseAskUserRequestFromText(text);\n if (!request) {\n return false;\n }\n\n const toolCallId = createAskUserToolCallId(request);\n onAskUser?.({ toolCallId, request });\n onChunk({ type: \"tool-input-start\", toolCallId, toolName: \"ask_user\", dynamic: true, title: request.title });\n onChunk({\n type: \"tool-input-available\",\n toolCallId,\n toolName: \"ask_user\",\n input: request,\n dynamic: true,\n title: request.title,\n });\n return true;\n }\n\n function maybeEmitDocyrusWebBrowserTool(text: string): boolean {\n const request = parseDocyrusWebBrowserRequestFromText(text);\n if (!request) {\n return false;\n }\n\n const toolCallId = createDocyrusWebBrowserToolCallId(request);\n onDocyrusWebBrowserTool?.({ toolCallId, request });\n onChunk({ type: \"tool-input-start\", toolCallId, toolName: request.tool, dynamic: true });\n onChunk({\n type: \"tool-input-available\",\n toolCallId,\n toolName: request.tool,\n input: request.input ?? {},\n dynamic: true,\n });\n return true;\n }\n\n function shouldKeepBufferingDynamicToolText(text: string): boolean {\n const dynamicToolTags = [\"<ask_user>\", \"<docyrus_web_browser>\"];\n return dynamicToolTags.some((tag) => tag.startsWith(text) || text.startsWith(tag));\n }\n\n function handleEvent(event: IAgentSessionEvent): void {\n switch (event.type) {\n case \"message_update\": {\n handleMessageUpdate(event);\n break;\n }\n\n case \"tool_execution_end\": {\n handleToolExecutionEnd(event);\n break;\n }\n\n case \"agent_end\": {\n onDone();\n break;\n }\n }\n }\n\n function handleMessageUpdate(event: IAgentSessionEvent): void {\n const assistantEvent = event.assistantMessageEvent;\n if (!assistantEvent) {\n return;\n }\n\n switch (assistantEvent.type) {\n case \"text_start\": {\n activeTextBuffer = { text: \"\", mode: \"pending\" };\n break;\n }\n\n case \"text_delta\": {\n if (!activeTextBuffer) {\n onChunk({ type: \"text-start\", id: messageId });\n onChunk({ type: \"text-delta\", id: messageId, delta: assistantEvent.delta ?? \"\" });\n activeTextBuffer = { text: \"\", mode: \"plain\" };\n break;\n }\n\n if (activeTextBuffer.mode === \"plain\") {\n onChunk({ type: \"text-delta\", id: messageId, delta: assistantEvent.delta ?? \"\" });\n break;\n }\n\n activeTextBuffer.text += assistantEvent.delta ?? \"\";\n if (shouldKeepBufferingDynamicToolText(activeTextBuffer.text)) {\n break;\n }\n\n flushBufferedTextToStream(false);\n break;\n }\n\n case \"text_end\": {\n if (!activeTextBuffer) {\n onChunk({ type: \"text-end\", id: messageId });\n break;\n }\n\n if (activeTextBuffer.mode === \"plain\") {\n onChunk({ type: \"text-end\", id: messageId });\n activeTextBuffer = null;\n break;\n }\n\n if (!maybeEmitAskUser(activeTextBuffer.text) && !maybeEmitDocyrusWebBrowserTool(activeTextBuffer.text)) {\n flushBufferedTextToStream(true);\n } else {\n activeTextBuffer = null;\n }\n break;\n }\n\n case \"thinking_start\": {\n onChunk({ type: \"reasoning-start\", id: messageId });\n break;\n }\n\n case \"thinking_delta\": {\n onChunk({ type: \"reasoning-delta\", id: messageId, delta: assistantEvent.delta ?? \"\" });\n break;\n }\n\n case \"thinking_end\": {\n onChunk({ type: \"reasoning-end\", id: messageId });\n break;\n }\n\n case \"toolcall_start\": {\n const contentIndex = assistantEvent.contentIndex ?? 0;\n const contentBlock = assistantEvent.partial?.content?.[contentIndex];\n activeToolCalls.set(contentIndex, {\n toolCallId: contentBlock?.id ?? `tool_${contentIndex}`,\n toolName: contentBlock?.name ?? \"unknown\",\n inputJson: \"\",\n });\n break;\n }\n\n case \"toolcall_delta\": {\n const contentIndex = assistantEvent.contentIndex ?? 0;\n const toolState = activeToolCalls.get(contentIndex);\n if (toolState) {\n toolState.inputJson += assistantEvent.delta ?? \"\";\n }\n break;\n }\n\n case \"toolcall_end\": {\n const contentIndex = assistantEvent.contentIndex ?? 0;\n const toolState = activeToolCalls.get(contentIndex);\n if (!toolState) {\n break;\n }\n\n const toolCall = assistantEvent.toolCall;\n const toolCallId = toolCall?.id ?? toolState.toolCallId;\n const toolName = toolCall?.name ?? toolState.toolName;\n\n let parsedInput: unknown = {};\n try {\n if (toolCall?.input !== undefined) {\n parsedInput = toolCall.input;\n } else if (toolState.inputJson.length > 0) {\n parsedInput = JSON.parse(toolState.inputJson);\n }\n } catch {\n parsedInput = {};\n }\n\n onChunk({ type: \"tool-input-start\", toolCallId, toolName });\n onChunk({ type: \"tool-input-available\", toolCallId, toolName, input: parsedInput });\n\n activeToolCalls.delete(contentIndex);\n break;\n }\n\n case \"error\": {\n const errorMessage = assistantEvent.error instanceof Error\n ? assistantEvent.error.message\n : typeof assistantEvent.error === \"string\"\n ? assistantEvent.error\n : \"Unknown agent error\";\n onError(errorMessage);\n break;\n }\n }\n }\n\n function handleToolExecutionEnd(event: IAgentSessionEvent): void {\n const toolCallId = event.toolCallId;\n if (!toolCallId) {\n return;\n }\n\n if (event.isError) {\n const errorText = typeof event.result === \"string\"\n ? event.result\n : JSON.stringify(event.result ?? \"Tool execution failed\");\n onChunk({ type: \"tool-output-error\", toolCallId, errorText });\n } else {\n onChunk({ type: \"tool-output-available\", toolCallId, output: event.result });\n }\n }\n\n return { handleEvent };\n}\n", "import { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\ntype IJsonValue = string | number | boolean | null | IJsonArray | IJsonObject;\ninterface IJsonObject {\n [key: string]: IJsonValue;\n}\ntype IJsonArray = IJsonValue[];\n\nexport interface IModelsConfigState {\n providers: Record<string, IJsonObject>;\n}\n\nfunction createDefaultState(): IModelsConfigState {\n return {\n providers: {},\n };\n}\n\nexport async function readModelsConfig(filePath: string): Promise<IModelsConfigState> {\n try {\n const raw = await readFile(filePath, \"utf8\");\n const parsed = JSON.parse(raw) as IModelsConfigState;\n if (!parsed || typeof parsed !== \"object\" || typeof parsed.providers !== \"object\" || parsed.providers === null) {\n return createDefaultState();\n }\n\n return {\n providers: { ...parsed.providers },\n };\n }\n catch (error: unknown) {\n if (\n typeof error === \"object\"\n && error !== null\n && \"code\" in error\n && (error as { code?: string }).code === \"ENOENT\"\n ) {\n return createDefaultState();\n }\n\n return createDefaultState();\n }\n}\n\nexport async function writeModelsConfig(filePath: string, state: IModelsConfigState): Promise<void> {\n const directory = dirname(filePath);\n await mkdir(directory, {\n recursive: true,\n mode: 0o700,\n });\n\n await writeFile(filePath, `${JSON.stringify(state, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n\n await chmod(filePath, 0o600);\n}\n\nexport async function upsertModelsProvider(filePath: string, providerId: string, providerConfig: IJsonObject): Promise<void> {\n const state = await readModelsConfig(filePath);\n await writeModelsConfig(filePath, {\n providers: {\n ...state.providers,\n [providerId]: providerConfig,\n },\n });\n}\n\nexport async function removeModelsProvider(filePath: string, providerId: string): Promise<void> {\n const state = await readModelsConfig(filePath);\n const nextProviders = { ...state.providers };\n delete nextProviders[providerId];\n\n await writeModelsConfig(filePath, {\n providers: nextProviders,\n });\n}\n\nexport function createCustomOpenAiProviderConfig(params: {\n baseUrl: string;\n modelId: string;\n}): IJsonObject {\n return {\n baseUrl: params.baseUrl,\n apiKey: \"env:CUSTOM_OPENAI_API_KEY\",\n api: \"openai-completions\",\n models: [\n {\n id: params.modelId,\n name: params.modelId,\n reasoning: false,\n input: [\"text\"],\n contextWindow: 128000,\n maxTokens: 16384,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n },\n ],\n };\n}\n\nexport function createAzureProviderConfig(params: {\n baseUrl: string;\n modelId: string;\n useCustomModel: boolean;\n}): IJsonObject {\n const providerConfig: IJsonObject = {\n baseUrl: params.baseUrl,\n apiKey: \"AZURE_OPENAI_API_KEY\",\n };\n\n if (params.useCustomModel) {\n providerConfig.api = \"azure-openai-responses\";\n providerConfig.models = [\n {\n id: params.modelId,\n name: params.modelId,\n reasoning: false,\n input: [\"text\"],\n contextWindow: 128000,\n maxTokens: 16384,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n },\n ];\n }\n\n return providerConfig;\n}\n", "import type { AuthStorage, SettingsManager } from \"@mariozechner/pi-coding-agent\";\nimport { AgentEnvStore } from \"./envStore\";\nimport {\n createAzureProviderConfig,\n createCustomOpenAiProviderConfig,\n removeModelsProvider,\n upsertModelsProvider,\n} from \"./modelsConfig\";\n\nexport interface IAzureConfigInput {\n apiKey: string;\n baseUrl: string;\n modelId: string;\n deploymentName?: string;\n apiVersion?: string;\n useCustomModel?: boolean;\n}\n\nexport interface ICustomOpenAiConfigInput {\n apiKey: string;\n baseUrl: string;\n modelId: string;\n}\n\nexport interface IBedrockConfigInput {\n region: string;\n modelId: string;\n profile?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n}\n\nexport interface IDocyrusAuthFlowDependencies {\n authStorage: AuthStorage;\n envStore: AgentEnvStore;\n settingsManager: SettingsManager;\n modelsJsonPath: string;\n}\n\nfunction trimOrUndefined(value?: string): string | undefined {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeAzureBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim().replace(/\\/+$/, \"\");\n\n try {\n const url = new URL(trimmed);\n url.search = \"\";\n url.hash = \"\";\n\n if (url.pathname.endsWith(\"/openai/v1\")) {\n url.pathname = url.pathname.slice(0, -3);\n }\n else if (url.pathname.endsWith(\"/openai/responses\")) {\n url.pathname = url.pathname.slice(0, -10);\n }\n\n return url.toString().replace(/\\/+$/, \"\");\n }\n catch {\n return trimmed\n .replace(/\\/openai\\/v1$/i, \"/openai\")\n .replace(/\\/openai\\/responses$/i, \"/openai\");\n }\n}\n\nexport async function saveGenericApiKey(params: IDocyrusAuthFlowDependencies & {\n providerId: string;\n apiKey: string;\n}): Promise<void> {\n params.authStorage.set(params.providerId, {\n type: \"api_key\",\n key: params.apiKey.trim(),\n });\n}\n\nexport async function saveCustomOpenAiConfig(params: IDocyrusAuthFlowDependencies & ICustomOpenAiConfigInput): Promise<void> {\n params.authStorage.set(\"custom-openai\", {\n type: \"api_key\",\n key: params.apiKey.trim(),\n });\n\n await params.envStore.removeMany([\n \"CUSTOM_OPENAI_API_KEY\",\n ]);\n await params.envStore.setMany({\n CUSTOM_OPENAI_API_KEY: params.apiKey.trim(),\n });\n\n await upsertModelsProvider(params.modelsJsonPath, \"custom-openai\", createCustomOpenAiProviderConfig({\n baseUrl: params.baseUrl.trim(),\n modelId: params.modelId.trim(),\n }));\n\n params.settingsManager.setDefaultModelAndProvider(\"custom-openai\", params.modelId.trim());\n}\n\nexport async function saveAzureConfig(params: IDocyrusAuthFlowDependencies & IAzureConfigInput): Promise<void> {\n const modelId = params.modelId.trim();\n const useCustomModel = params.useCustomModel ?? false;\n const normalizedBaseUrl = normalizeAzureBaseUrl(params.baseUrl);\n\n params.authStorage.set(\"azure-openai-responses\", {\n type: \"api_key\",\n key: params.apiKey.trim(),\n });\n\n await params.envStore.removeMany([\n \"AZURE_OPENAI_API_KEY\",\n \"AZURE_OPENAI_API_VERSION\",\n \"AZURE_OPENAI_DEPLOYMENT_NAME_MAP\",\n ]);\n const envValues: Record<string, string> = {\n AZURE_OPENAI_API_KEY: params.apiKey.trim(),\n };\n const trimmedApiVersion = trimOrUndefined(params.apiVersion);\n if (trimmedApiVersion) {\n envValues.AZURE_OPENAI_API_VERSION = trimmedApiVersion;\n }\n\n const trimmedDeploymentName = trimOrUndefined(params.deploymentName);\n if (trimmedDeploymentName && trimmedDeploymentName !== modelId) {\n envValues.AZURE_OPENAI_DEPLOYMENT_NAME_MAP = JSON.stringify({\n [modelId]: trimmedDeploymentName,\n });\n }\n\n await params.envStore.setMany(envValues);\n\n await upsertModelsProvider(params.modelsJsonPath, \"azure-openai-responses\", createAzureProviderConfig({\n baseUrl: normalizedBaseUrl,\n modelId,\n useCustomModel,\n }));\n\n params.settingsManager.setDefaultModelAndProvider(\"azure-openai-responses\", modelId);\n}\n\nexport async function saveBedrockConfig(params: IDocyrusAuthFlowDependencies & IBedrockConfigInput): Promise<void> {\n params.authStorage.set(\"amazon-bedrock\", {\n type: \"api_key\",\n key: \"aws-configured\",\n });\n\n await params.envStore.removeMany([\n \"AWS_PROFILE\",\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_SESSION_TOKEN\",\n \"AWS_REGION\",\n \"AWS_DEFAULT_REGION\",\n \"AWS_BEARER_TOKEN_BEDROCK\",\n ]);\n const envValues: Record<string, string> = {\n AWS_REGION: params.region.trim(),\n AWS_DEFAULT_REGION: params.region.trim(),\n };\n\n const profile = trimOrUndefined(params.profile);\n if (profile) {\n envValues.AWS_PROFILE = profile;\n }\n\n const accessKeyId = trimOrUndefined(params.accessKeyId);\n const secretAccessKey = trimOrUndefined(params.secretAccessKey);\n if (accessKeyId && secretAccessKey) {\n envValues.AWS_ACCESS_KEY_ID = accessKeyId;\n envValues.AWS_SECRET_ACCESS_KEY = secretAccessKey;\n }\n\n const sessionToken = trimOrUndefined(params.sessionToken);\n if (sessionToken) {\n envValues.AWS_SESSION_TOKEN = sessionToken;\n }\n\n await params.envStore.setMany(envValues);\n params.settingsManager.setDefaultModelAndProvider(\"amazon-bedrock\", params.modelId.trim());\n}\n\nexport async function clearProviderConfig(params: IDocyrusAuthFlowDependencies & {\n providerId: string;\n}): Promise<void> {\n params.authStorage.remove(params.providerId);\n\n if (params.providerId === \"custom-openai\") {\n await params.envStore.removeMany([\n \"CUSTOM_OPENAI_API_KEY\",\n ]);\n await removeModelsProvider(params.modelsJsonPath, \"custom-openai\");\n }\n\n if (params.providerId === \"azure-openai-responses\") {\n await params.envStore.removeMany([\n \"AZURE_OPENAI_API_KEY\",\n \"AZURE_OPENAI_API_VERSION\",\n \"AZURE_OPENAI_DEPLOYMENT_NAME_MAP\",\n ]);\n await removeModelsProvider(params.modelsJsonPath, \"azure-openai-responses\");\n }\n\n if (params.providerId === \"amazon-bedrock\") {\n await params.envStore.removeMany([\n \"AWS_PROFILE\",\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_SESSION_TOKEN\",\n \"AWS_REGION\",\n \"AWS_DEFAULT_REGION\",\n \"AWS_BEARER_TOKEN_BEDROCK\",\n ]);\n }\n}\n", "import type { AgentEnvStore } from \"./envStore\";\n\nexport type IDocyrusAuthFlowId = \"oauth\" | \"generic-api-key\" | \"custom-openai\" | \"azure-openai-responses\" | \"amazon-bedrock\";\n\nexport interface IDocyrusProviderOption {\n id: string;\n label: string;\n hint?: string;\n flow: IDocyrusAuthFlowId;\n}\n\nconst OAUTH_ONLY_PROVIDER_IDS = new Set([\n \"github-copilot\",\n \"openai-codex\",\n \"google-gemini-cli\",\n \"google-antigravity\",\n]);\n\nconst PROVIDER_LABELS: Record<string, string> = {\n anthropic: \"Anthropic (Claude)\",\n openai: \"OpenAI\",\n google: \"Google (Gemini)\",\n \"google-vertex\": \"Google Vertex AI\",\n \"azure-openai-responses\": \"Azure OpenAI\",\n \"amazon-bedrock\": \"Amazon Bedrock\",\n xai: \"xAI (Grok)\",\n groq: \"Groq\",\n cerebras: \"Cerebras\",\n openrouter: \"OpenRouter\",\n \"vercel-ai-gateway\": \"Vercel AI Gateway\",\n zai: \"ZAI\",\n mistral: \"Mistral\",\n minimax: \"MiniMax\",\n \"minimax-cn\": \"MiniMax CN\",\n huggingface: \"Hugging Face\",\n opencode: \"OpenCode\",\n \"opencode-go\": \"OpenCode Go\",\n \"kimi-coding\": \"Kimi Coding\",\n \"custom-openai\": \"Custom OpenAI-Compatible\",\n \"google-gemini-cli\": \"Google Gemini CLI\",\n \"google-antigravity\": \"Google Antigravity\",\n \"openai-codex\": \"OpenAI Codex\",\n \"github-copilot\": \"GitHub Copilot\",\n};\n\nconst PROVIDER_HINTS: Record<string, string> = {\n anthropic: \"recommended\",\n \"custom-openai\": \"custom base URL + API key\",\n \"azure-openai-responses\": \"API key + base URL/resource + deployment\",\n \"amazon-bedrock\": \"AWS profile or access key pair\",\n \"openai-codex\": \"browser auth\",\n \"github-copilot\": \"browser auth\",\n \"google-gemini-cli\": \"browser auth\",\n \"google-antigravity\": \"browser auth\",\n};\n\nfunction humanizeProviderId(providerId: string): string {\n return providerId\n .split(\"-\")\n .map((part) => {\n if (!part) {return part;}\n if (part.length <= 3) {return part.toUpperCase();}\n return part[0].toUpperCase() + part.slice(1);\n })\n .join(\" \");\n}\n\nfunction toLabel(providerId: string): string {\n return PROVIDER_LABELS[providerId] || humanizeProviderId(providerId);\n}\n\nfunction toHint(providerId: string): string | undefined {\n return PROVIDER_HINTS[providerId];\n}\n\nfunction compareProviderOptions(a: IDocyrusProviderOption, b: IDocyrusProviderOption): number {\n return a.label.localeCompare(b.label);\n}\n\nexport function getBrowserAuthProviderOptions(oauthProviders: Array<{ id: string; name?: string }>): IDocyrusProviderOption[] {\n return oauthProviders\n .map((provider: { id: string; name?: string }) => ({\n id: provider.id,\n label: provider.name || toLabel(provider.id),\n hint: toHint(provider.id),\n flow: \"oauth\" as const,\n }))\n .sort(compareProviderOptions);\n}\n\nexport function getApiKeyProviderOptions(providerIds: string[]): IDocyrusProviderOption[] {\n const baseProviders: IDocyrusProviderOption[] = providerIds\n .filter((providerId: string) => !OAUTH_ONLY_PROVIDER_IDS.has(providerId))\n .map((providerId: string) => {\n let flow: IDocyrusAuthFlowId = \"generic-api-key\";\n if (providerId === \"azure-openai-responses\") {\n flow = \"azure-openai-responses\";\n }\n else if (providerId === \"amazon-bedrock\") {\n flow = \"amazon-bedrock\";\n }\n\n return {\n id: providerId,\n label: toLabel(providerId),\n hint: toHint(providerId),\n flow,\n } satisfies IDocyrusProviderOption;\n });\n\n baseProviders.push({\n id: \"custom-openai\",\n label: toLabel(\"custom-openai\"),\n hint: toHint(\"custom-openai\"),\n flow: \"custom-openai\",\n });\n\n const deduped = new Map<string, IDocyrusProviderOption>();\n for (const provider of baseProviders) {\n deduped.set(provider.id, provider);\n }\n\n return Array.from(deduped.values()).sort(compareProviderOptions);\n}\n\nexport async function findExistingConfiguredProvider(params: {\n authStorage: {\n hasAuth(providerId: string): boolean;\n };\n envStore: AgentEnvStore;\n knownProviderIds: string[];\n}): Promise<string | null> {\n for (const providerId of params.knownProviderIds) {\n if (params.authStorage.hasAuth(providerId)) {\n return providerId;\n }\n }\n\n const hasBedrock = await params.envStore.hasAny([\"AWS_PROFILE\", \"AWS_ACCESS_KEY_ID\", \"AWS_BEARER_TOKEN_BEDROCK\"]);\n if (hasBedrock) {\n return \"amazon-bedrock\";\n }\n\n return null;\n}\n\nexport function getProviderLabel(providerId: string): string {\n return toLabel(providerId);\n}\n\nexport function getProviderHint(providerId: string): string | undefined {\n return toHint(providerId);\n}\n", "import type { AuthStorage, ModelRegistry, SettingsManager } from \"@mariozechner/pi-coding-agent\";\nimport { AgentEnvStore } from \"./envStore\";\nimport {\n clearProviderConfig,\n saveAzureConfig,\n saveBedrockConfig,\n saveCustomOpenAiConfig,\n saveGenericApiKey,\n type IDocyrusAuthFlowDependencies,\n} from \"./authFlows\";\nimport {\n getApiKeyProviderOptions,\n getBrowserAuthProviderOptions,\n getProviderHint,\n getProviderLabel,\n type IDocyrusProviderOption,\n} from \"./providerCatalog\";\n\nexport type IDocyrusAuthMode = \"oauth\" | \"api-key\";\nexport type IDocyrusFieldComponent = \"text\" | \"password\" | \"select\";\nexport type IDocyrusFieldType = \"string\";\nexport type IDocyrusThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\ninterface IJsonSchemaProperty {\n type: IDocyrusFieldType;\n title: string;\n description?: string;\n enum?: string[];\n default?: string;\n}\n\nexport interface IProviderFieldUiHint {\n component: IDocyrusFieldComponent;\n secret?: boolean;\n multiline?: boolean;\n placeholder?: string;\n options?: Array<{ label: string; value: string }>;\n dependsOn?: {\n field: string;\n equals: string;\n };\n}\n\nexport interface IProviderFormContract {\n inputSchema: {\n type: \"object\";\n properties: Record<string, IJsonSchemaProperty>;\n required: string[];\n };\n uiHints: {\n submitLabel: string;\n order: string[];\n fields: Record<string, IProviderFieldUiHint>;\n };\n}\n\nexport interface IProviderDescriptor {\n id: string;\n label: string;\n hint?: string;\n flow: IDocyrusProviderOption[\"flow\"];\n authMode: IDocyrusAuthMode;\n configured: boolean;\n canLogin: boolean;\n canLogout: boolean;\n inputSchema: IProviderFormContract[\"inputSchema\"] | null;\n uiHints: IProviderFormContract[\"uiHints\"] | null;\n oauth: { usesCallbackServer?: boolean } | null;\n}\n\nexport interface IProviderCatalogParams {\n authStorage: AuthStorage;\n browserProviders: Array<{ id: string; name?: string; usesCallbackServer?: boolean }>;\n apiKeyProviderIds: string[];\n modelIdsByProvider: Record<string, string[]>;\n}\n\nexport interface IProviderFormFieldDescriptor {\n name: string;\n title: string;\n description?: string;\n required?: boolean;\n defaultValue?: string;\n placeholder?: string;\n component: IDocyrusFieldComponent;\n options?: Array<{ label: string; value: string }>;\n dependsOn?: {\n field: string;\n equals: string;\n };\n}\n\nexport interface IValidatedProviderInput {\n [key: string]: string | undefined;\n}\n\nexport interface IModelSelectionSession {\n model?: { provider: string; id: string };\n thinkingLevel: IDocyrusThinkingLevel;\n setModel(model: { provider: string; id: string }): Promise<void>;\n setThinkingLevel(level: IDocyrusThinkingLevel): void;\n}\n\nfunction buildFieldUiHint(field: IProviderFormFieldDescriptor): IProviderFieldUiHint {\n return {\n component: field.component,\n ...(field.component === \"password\" ? { secret: true } : {}),\n ...(field.placeholder ? { placeholder: field.placeholder } : {}),\n ...(field.options ? { options: field.options } : {}),\n ...(field.dependsOn ? { dependsOn: field.dependsOn } : {}),\n };\n}\n\nfunction buildProperty(field: IProviderFormFieldDescriptor): IJsonSchemaProperty {\n return {\n type: \"string\",\n title: field.title,\n ...(field.description ? { description: field.description } : {}),\n ...(field.options ? { enum: field.options.map((option) => option.value) } : {}),\n ...(field.defaultValue ? { default: field.defaultValue } : {}),\n };\n}\n\nfunction toSelectOptions(values: string[]): Array<{ label: string; value: string }> {\n return values.map((value) => ({ label: value, value }));\n}\n\nexport function getProviderFormFields(params: {\n provider: IDocyrusProviderOption;\n modelIdsByProvider: Record<string, string[]>;\n}): IProviderFormFieldDescriptor[] {\n const provider = params.provider;\n switch (provider.flow) {\n case \"custom-openai\":\n return [\n {\n name: \"baseUrl\",\n title: \"Custom OpenAI base URL\",\n required: true,\n component: \"text\",\n placeholder: \"https://my-proxy.example.com/v1\",\n },\n {\n name: \"apiKey\",\n title: `${provider.label} API key`,\n required: true,\n component: \"password\",\n },\n {\n name: \"modelId\",\n title: \"Model ID\",\n required: true,\n component: \"text\",\n placeholder: \"gpt-4o\",\n },\n ];\n\n case \"azure-openai-responses\":\n return [\n {\n name: \"apiKey\",\n title: \"Azure OpenAI API key\",\n required: true,\n component: \"password\",\n },\n {\n name: \"configMode\",\n title: \"Azure OpenAI configuration\",\n required: true,\n defaultValue: \"base-url\",\n component: \"select\",\n options: [\n { label: \"Use a base URL\", value: \"base-url\" },\n { label: \"Use an Azure resource name\", value: \"resource-name\" },\n ],\n },\n {\n name: \"baseUrl\",\n title: \"Azure OpenAI base URL\",\n required: true,\n component: \"text\",\n placeholder: \"https://my-resource.openai.azure.com/openai\",\n dependsOn: { field: \"configMode\", equals: \"base-url\" },\n },\n {\n name: \"resourceName\",\n title: \"Azure resource name\",\n required: true,\n component: \"text\",\n placeholder: \"my-resource\",\n dependsOn: { field: \"configMode\", equals: \"resource-name\" },\n },\n {\n name: \"modelId\",\n title: \"Model ID\",\n required: true,\n component: params.modelIdsByProvider[provider.id]?.length ? \"select\" : \"text\",\n options: params.modelIdsByProvider[provider.id]?.length\n ? toSelectOptions(params.modelIdsByProvider[provider.id]!)\n : undefined,\n defaultValue: params.modelIdsByProvider[provider.id]?.[0] || \"gpt-4.1\",\n },\n {\n name: \"deploymentName\",\n title: \"Deployment name\",\n component: \"text\",\n placeholder: \"gpt-4.1\",\n },\n {\n name: \"apiVersion\",\n title: \"API version\",\n component: \"text\",\n defaultValue: \"2025-04-01-preview\",\n placeholder: \"2025-04-01-preview\",\n },\n ];\n\n case \"amazon-bedrock\":\n return [\n {\n name: \"authMode\",\n title: \"Amazon Bedrock authentication\",\n required: true,\n defaultValue: \"profile\",\n component: \"select\",\n options: [\n { label: \"Use an AWS profile\", value: \"profile\" },\n { label: \"Paste AWS access keys\", value: \"access-keys\" },\n ],\n },\n {\n name: \"profile\",\n title: \"AWS profile name\",\n required: true,\n defaultValue: \"default\",\n component: \"text\",\n placeholder: \"default\",\n dependsOn: { field: \"authMode\", equals: \"profile\" },\n },\n {\n name: \"accessKeyId\",\n title: \"AWS access key ID\",\n required: true,\n component: \"text\",\n dependsOn: { field: \"authMode\", equals: \"access-keys\" },\n },\n {\n name: \"secretAccessKey\",\n title: \"AWS secret access key\",\n required: true,\n component: \"password\",\n dependsOn: { field: \"authMode\", equals: \"access-keys\" },\n },\n {\n name: \"sessionToken\",\n title: \"AWS session token\",\n component: \"password\",\n dependsOn: { field: \"authMode\", equals: \"access-keys\" },\n },\n {\n name: \"region\",\n title: \"AWS region\",\n required: true,\n defaultValue: \"us-east-1\",\n component: \"text\",\n placeholder: \"us-east-1\",\n },\n {\n name: \"modelId\",\n title: \"Bedrock model ID\",\n required: true,\n component: params.modelIdsByProvider[provider.id]?.length ? \"select\" : \"text\",\n options: params.modelIdsByProvider[provider.id]?.length\n ? toSelectOptions(params.modelIdsByProvider[provider.id]!)\n : undefined,\n defaultValue: params.modelIdsByProvider[provider.id]?.[0] || \"anthropic.claude-3-7-sonnet-20250219-v1:0\",\n },\n ];\n\n default:\n return [\n {\n name: \"apiKey\",\n title: `${provider.label} API key`,\n required: true,\n component: \"password\",\n },\n ];\n }\n}\n\nexport function buildProviderFormContract(params: {\n provider: IDocyrusProviderOption;\n modelIdsByProvider: Record<string, string[]>;\n}): IProviderFormContract | null {\n if (params.provider.flow === \"oauth\") {\n return null;\n }\n\n const fields = getProviderFormFields(params);\n const properties = Object.fromEntries(fields.map((field) => [field.name, buildProperty(field)]));\n const required = fields.filter((field) => field.required).map((field) => field.name);\n const fieldHints = Object.fromEntries(fields.map((field) => [field.name, buildFieldUiHint(field)]));\n\n return {\n inputSchema: {\n type: \"object\",\n properties,\n required,\n },\n uiHints: {\n submitLabel: \"Save credentials\",\n order: fields.map((field) => field.name),\n fields: fieldHints,\n },\n };\n}\n\nfunction getOAuthDescriptor(params: IProviderCatalogParams, provider: { id: string; name?: string; usesCallbackServer?: boolean }): IProviderDescriptor {\n return {\n id: provider.id,\n label: provider.name || getProviderLabel(provider.id),\n hint: getProviderHint(provider.id),\n flow: \"oauth\",\n authMode: \"oauth\",\n configured: params.authStorage.hasAuth(provider.id),\n canLogin: true,\n canLogout: params.authStorage.hasAuth(provider.id),\n inputSchema: null,\n uiHints: null,\n oauth: { usesCallbackServer: provider.usesCallbackServer },\n };\n}\n\nfunction getApiKeyDescriptor(params: IProviderCatalogParams, provider: IDocyrusProviderOption): IProviderDescriptor {\n const contract = buildProviderFormContract({\n provider,\n modelIdsByProvider: params.modelIdsByProvider,\n });\n\n return {\n id: provider.id,\n label: provider.label,\n hint: provider.hint,\n flow: provider.flow,\n authMode: \"api-key\",\n configured: params.authStorage.hasAuth(provider.id),\n canLogin: true,\n canLogout: params.authStorage.hasAuth(provider.id),\n inputSchema: contract?.inputSchema ?? null,\n uiHints: contract?.uiHints ?? null,\n oauth: null,\n };\n}\n\nexport function buildProviderCatalog(params: IProviderCatalogParams): IProviderDescriptor[] {\n const oauthProviders = getBrowserAuthProviderOptions(params.browserProviders).map((provider) =>\n getOAuthDescriptor(\n params,\n params.browserProviders.find((item) => item.id === provider.id) ?? { id: provider.id, name: provider.label },\n ),\n );\n const apiKeyProviders = getApiKeyProviderOptions(params.apiKeyProviderIds)\n .map((provider) => getApiKeyDescriptor(params, provider));\n\n return [...oauthProviders, ...apiKeyProviders].sort((left, right) => left.label.localeCompare(right.label));\n}\n\nexport function listProviderOptions(params: {\n browserProviders: Array<{ id: string; name?: string }>;\n apiKeyProviderIds: string[];\n}): IDocyrusProviderOption[] {\n return [\n ...getBrowserAuthProviderOptions(params.browserProviders),\n ...getApiKeyProviderOptions(params.apiKeyProviderIds),\n ].sort((left, right) => left.label.localeCompare(right.label));\n}\n\nexport function findProviderOption(params: {\n providerId: string;\n browserProviders: Array<{ id: string; name?: string }>;\n apiKeyProviderIds: string[];\n}): IDocyrusProviderOption | undefined {\n return listProviderOptions({\n browserProviders: params.browserProviders,\n apiKeyProviderIds: params.apiKeyProviderIds,\n }).find((provider) => provider.id === params.providerId);\n}\n\nfunction trimOrUndefined(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function validateProviderLoginInput(params: {\n provider: IDocyrusProviderOption;\n modelIdsByProvider: Record<string, string[]>;\n value: Record<string, unknown>;\n}): { ok: true; value: IValidatedProviderInput } | { ok: false; error: string } {\n const fields = getProviderFormFields({\n provider: params.provider,\n modelIdsByProvider: params.modelIdsByProvider,\n });\n const values: IValidatedProviderInput = {};\n\n for (const field of fields) {\n if (field.dependsOn) {\n const dependsOnValue = values[field.dependsOn.field] ?? trimOrUndefined(params.value[field.dependsOn.field]);\n if (dependsOnValue !== field.dependsOn.equals) {\n continue;\n }\n }\n\n const rawValue = params.value[field.name];\n const normalized = trimOrUndefined(rawValue);\n if (field.required && !normalized) {\n return { ok: false, error: `Missing required field: ${field.name}` };\n }\n\n if (normalized && field.options && !field.options.some((option) => option.value === normalized)) {\n return { ok: false, error: `Invalid value for ${field.name}: ${normalized}` };\n }\n\n if (normalized) {\n values[field.name] = normalized;\n } else if (field.defaultValue) {\n values[field.name] = field.defaultValue;\n }\n }\n\n return { ok: true, value: values };\n}\n\nexport async function applyProviderLogin(params: IDocyrusAuthFlowDependencies & {\n provider: IDocyrusProviderOption;\n input: IValidatedProviderInput;\n modelIdsByProvider: Record<string, string[]>;\n}): Promise<{ providerId: string; preferredModelId?: string }> {\n const provider = params.provider;\n\n switch (provider.flow) {\n case \"custom-openai\": {\n await saveCustomOpenAiConfig({\n ...params,\n apiKey: params.input.apiKey!,\n baseUrl: params.input.baseUrl!,\n modelId: params.input.modelId!,\n });\n return { providerId: provider.id, preferredModelId: params.input.modelId };\n }\n\n case \"azure-openai-responses\": {\n const baseUrl = params.input.baseUrl\n ?? (params.input.resourceName ? `https://${params.input.resourceName}.openai.azure.com/openai` : undefined);\n if (!baseUrl) {\n throw new Error(\"Azure login requires either baseUrl or resourceName.\");\n }\n\n const builtInModelIds = new Set(params.modelIdsByProvider[provider.id] ?? []);\n await saveAzureConfig({\n ...params,\n apiKey: params.input.apiKey!,\n baseUrl,\n modelId: params.input.modelId!,\n deploymentName: params.input.deploymentName,\n apiVersion: params.input.apiVersion,\n useCustomModel: !builtInModelIds.has(params.input.modelId!),\n });\n return { providerId: provider.id, preferredModelId: params.input.modelId };\n }\n\n case \"amazon-bedrock\": {\n const authMode = params.input.authMode ?? \"profile\";\n await saveBedrockConfig({\n ...params,\n region: params.input.region!,\n modelId: params.input.modelId!,\n profile: authMode === \"profile\" ? params.input.profile : undefined,\n accessKeyId: authMode === \"access-keys\" ? params.input.accessKeyId : undefined,\n secretAccessKey: authMode === \"access-keys\" ? params.input.secretAccessKey : undefined,\n sessionToken: authMode === \"access-keys\" ? params.input.sessionToken : undefined,\n });\n return { providerId: provider.id, preferredModelId: params.input.modelId };\n }\n\n default: {\n await saveGenericApiKey({\n ...params,\n providerId: provider.id,\n apiKey: params.input.apiKey!,\n });\n return { providerId: provider.id };\n }\n }\n}\n\nexport async function refreshSessionAfterCredentialChange(params: {\n session: IModelSelectionSession;\n modelRegistry: ModelRegistry;\n envStore?: AgentEnvStore;\n preferredProviderId?: string;\n preferredModelId?: string;\n}): Promise<void> {\n await params.envStore?.hydrateProcessEnv(process.env);\n params.modelRegistry.refresh();\n const availableModels = params.modelRegistry.getAvailable();\n const preferredModel = params.preferredProviderId && params.preferredModelId\n ? availableModels.find((model) => model.provider === params.preferredProviderId && model.id === params.preferredModelId)\n : params.preferredProviderId\n ? availableModels.find((model) => model.provider === params.preferredProviderId)\n : undefined;\n\n if (preferredModel) {\n await params.session.setModel(preferredModel);\n return;\n }\n\n const currentModel = params.session.model;\n const currentModelStillAvailable = currentModel\n ? availableModels.some((model) => model.provider === currentModel.provider && model.id === currentModel.id)\n : false;\n\n if (currentModel && !currentModelStillAvailable) {\n if (preferredModel) {\n await params.session.setModel(preferredModel);\n return;\n }\n\n if (availableModels[0]) {\n await params.session.setModel(availableModels[0]);\n }\n return;\n }\n\n if (!currentModel && preferredModel) {\n await params.session.setModel(preferredModel);\n return;\n }\n\n if (!currentModel && availableModels[0]) {\n await params.session.setModel(availableModels[0]);\n }\n}\n\nexport function serializeModels(params: {\n models: Array<{\n provider: string;\n id: string;\n name?: string;\n reasoning?: boolean;\n contextWindow?: number;\n maxTokens?: number;\n }>;\n authStorage: AuthStorage;\n}): Array<{\n provider: string;\n providerLabel: string;\n id: string;\n name: string;\n reasoning: boolean;\n contextWindow: number | null;\n maxTokens: number | null;\n configured: boolean;\n}> {\n return params.models.map((model) => ({\n provider: model.provider,\n providerLabel: getProviderLabel(model.provider),\n id: model.id,\n name: typeof model.name === \"string\" && model.name.length > 0 ? model.name : model.id,\n reasoning: model.reasoning === true,\n contextWindow: typeof model.contextWindow === \"number\" ? model.contextWindow : null,\n maxTokens: typeof model.maxTokens === \"number\" ? model.maxTokens : null,\n configured: params.authStorage.hasAuth(model.provider),\n }));\n}\n", "import { randomUUID } from \"node:crypto\";\nimport type { AuthStorage } from \"@mariozechner/pi-coding-agent\";\nimport type { OAuthAuthInfo, OAuthPrompt } from \"@mariozechner/pi-ai\";\n\nexport type IOAuthStep =\n | {\n type: \"open-url\";\n stepToken: string;\n providerId: string;\n url: string;\n instructions?: string;\n usesCallbackServer?: boolean;\n pending: boolean;\n }\n | {\n type: \"prompt\" | \"manual-code\";\n stepToken: string;\n providerId: string;\n message: string;\n inputSchema: {\n type: \"object\";\n properties: Record<string, { type: \"string\"; title: string; description?: string; default?: string }>;\n required: string[];\n };\n uiHints: {\n submitLabel: string;\n order: string[];\n fields: Record<string, { component: \"text\"; placeholder?: string }>;\n };\n }\n | {\n type: \"complete\";\n stepToken: string;\n providerId: string;\n }\n | {\n type: \"error\";\n stepToken: string;\n providerId: string;\n error: string;\n };\n\ninterface IDeferredStep {\n resolve: (step: IOAuthStep) => void;\n}\n\ninterface IOAuthFlowState {\n stepToken: string;\n providerId: string;\n usesCallbackServer?: boolean;\n pendingInput:\n | {\n type: \"prompt\" | \"manual-code\";\n resolve: (value: string) => void;\n }\n | undefined;\n currentStep?: IOAuthStep;\n queuedSteps: IOAuthStep[];\n waitingForStep?: IDeferredStep;\n completed: boolean;\n}\n\nfunction normalizeError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction buildPromptStep(params: {\n state: IOAuthFlowState;\n type: \"prompt\" | \"manual-code\";\n prompt: OAuthPrompt;\n}): IOAuthStep {\n return {\n type: params.type,\n stepToken: params.state.stepToken,\n providerId: params.state.providerId,\n message: params.prompt.message,\n inputSchema: {\n type: \"object\",\n properties: {\n value: {\n type: \"string\",\n title: params.type === \"manual-code\" ? \"Verification Code\" : \"Value\",\n ...(params.prompt.placeholder ? { default: params.prompt.placeholder } : {}),\n },\n },\n required: params.prompt.allowEmpty ? [] : [\"value\"],\n },\n uiHints: {\n submitLabel: \"Continue\",\n order: [\"value\"],\n fields: {\n value: {\n component: \"text\",\n ...(params.prompt.placeholder ? { placeholder: params.prompt.placeholder } : {}),\n },\n },\n },\n };\n}\n\nfunction buildAuthStep(params: {\n state: IOAuthFlowState;\n authInfo: OAuthAuthInfo;\n}): IOAuthStep {\n return {\n type: \"open-url\",\n stepToken: params.state.stepToken,\n providerId: params.state.providerId,\n url: params.authInfo.url,\n instructions: params.authInfo.instructions,\n usesCallbackServer: params.state.usesCallbackServer,\n pending: true,\n };\n}\n\nexport class OAuthFlowManager {\n private flows = new Map<string, IOAuthFlowState>();\n\n private emitStep(state: IOAuthFlowState, step: IOAuthStep): void {\n state.currentStep = step;\n if (state.waitingForStep) {\n const waiting = state.waitingForStep;\n state.waitingForStep = undefined;\n waiting.resolve(step);\n return;\n }\n state.queuedSteps.push(step);\n }\n\n private nextStep(state: IOAuthFlowState): Promise<IOAuthStep> {\n const queued = state.queuedSteps.shift();\n if (queued) {\n return Promise.resolve(queued);\n }\n\n if (state.currentStep) {\n return Promise.resolve(state.currentStep);\n }\n\n return new Promise<IOAuthStep>((resolve) => {\n state.waitingForStep = { resolve };\n });\n }\n\n async start(params: {\n authStorage: AuthStorage;\n providerId: string;\n usesCallbackServer?: boolean;\n }): Promise<IOAuthStep> {\n const state: IOAuthFlowState = {\n stepToken: randomUUID(),\n providerId: params.providerId,\n usesCallbackServer: params.usesCallbackServer,\n pendingInput: undefined,\n currentStep: undefined,\n queuedSteps: [],\n completed: false,\n };\n this.flows.set(state.stepToken, state);\n\n void params.authStorage.login(params.providerId, {\n onAuth: (info) => {\n this.emitStep(state, buildAuthStep({ state, authInfo: info }));\n },\n onPrompt: async(prompt) => {\n const step = buildPromptStep({ state, type: \"prompt\", prompt });\n this.emitStep(state, step);\n return await new Promise<string>((resolve) => {\n state.pendingInput = { type: \"prompt\", resolve };\n });\n },\n onManualCodeInput: async() => {\n const step = buildPromptStep({\n state,\n type: \"manual-code\",\n prompt: {\n message: \"Enter the verification code from the provider.\",\n },\n });\n this.emitStep(state, step);\n return await new Promise<string>((resolve) => {\n state.pendingInput = { type: \"manual-code\", resolve };\n });\n },\n onProgress: (_message) => {\n // Reserved for future transport/UI updates.\n },\n })\n .then(() => {\n state.completed = true;\n this.emitStep(state, {\n type: \"complete\",\n stepToken: state.stepToken,\n providerId: state.providerId,\n });\n })\n .catch((error) => {\n state.completed = true;\n this.emitStep(state, {\n type: \"error\",\n stepToken: state.stepToken,\n providerId: state.providerId,\n error: normalizeError(error),\n });\n });\n\n return await this.nextStep(state);\n }\n\n async continue(params: {\n stepToken: string;\n value?: string;\n }): Promise<IOAuthStep> {\n const state = this.flows.get(params.stepToken);\n if (!state) {\n throw new Error(`Unknown OAuth step token: ${params.stepToken}`);\n }\n\n if (state.pendingInput) {\n const nextValue = params.value?.trim();\n state.pendingInput.resolve(nextValue ?? \"\");\n state.pendingInput = undefined;\n state.currentStep = undefined;\n }\n\n const step = await this.nextStep(state);\n if (step.type === \"complete\" || step.type === \"error\") {\n this.flows.delete(state.stepToken);\n }\n return step;\n }\n}\n", "import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile, mkdir, rename } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve, dirname } from \"node:path\";\n\n// -- Types (reimplemented from extension bundle) --\n\nexport type IImportKind =\n | \"cursor\"\n | \"claude-code\"\n | \"claude-desktop\"\n | \"codex\"\n | \"windsurf\"\n | \"vscode\";\n\nexport interface IServerEntry {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n url?: string;\n headers?: Record<string, string>;\n auth?: \"oauth\" | \"bearer\";\n bearerToken?: string;\n bearerTokenEnv?: string;\n lifecycle?: \"keep-alive\" | \"lazy\" | \"eager\";\n idleTimeout?: number;\n exposeResources?: boolean;\n directTools?: boolean | string[];\n debug?: boolean;\n}\n\nexport interface IMcpSettings {\n toolPrefix?: \"server\" | \"none\" | \"short\";\n idleTimeout?: number;\n directTools?: boolean;\n}\n\nexport interface IMcpConfig {\n mcpServers: Record<string, IServerEntry>;\n imports?: IImportKind[];\n settings?: IMcpSettings;\n}\n\nexport interface IServerProvenance {\n path: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n}\n\nexport interface ICachedTool {\n name: string;\n description?: string;\n inputSchema?: unknown;\n}\n\nexport interface ICachedResource {\n uri: string;\n name: string;\n description?: string;\n}\n\nexport interface IServerCacheEntry {\n configHash: string;\n tools: ICachedTool[];\n resources: ICachedResource[];\n cachedAt: number;\n}\n\nexport interface IMetadataCache {\n version: number;\n servers: Record<string, IServerCacheEntry>;\n}\n\n// -- Path helpers --\n\nconst PROJECT_CONFIG_NAME = \".pi/mcp.json\";\n\nconst IMPORT_PATHS: Record<IImportKind, string> = {\n \"cursor\": join(homedir(), \".cursor\", \"mcp.json\"),\n \"claude-code\": join(homedir(), \".claude\", \"claude_desktop_config.json\"),\n \"claude-desktop\": join(homedir(), \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\"),\n \"codex\": join(homedir(), \".codex\", \"config.json\"),\n \"windsurf\": join(homedir(), \".windsurf\", \"mcp.json\"),\n \"vscode\": \".vscode/mcp.json\",\n};\n\nexport function getMcpConfigPath(agentDir: string): string {\n return join(agentDir, \"mcp.json\");\n}\n\nexport function getMcpCachePath(agentDir: string): string {\n return join(agentDir, \"mcp-cache.json\");\n}\n\n// -- Validation --\n\nconst SERVER_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;\n\nexport function validateServerName(name: string): { ok: true } | { ok: false; error: string } {\n if (!name || typeof name !== \"string\") {\n return { ok: false, error: \"Server name is required\" };\n }\n if (!SERVER_NAME_REGEX.test(name)) {\n return { ok: false, error: \"Server name must start with alphanumeric and contain only alphanumeric, hyphens, and underscores\" };\n }\n return { ok: true };\n}\n\nexport function validateServerEntry(entry: unknown): { ok: true; value: IServerEntry } | { ok: false; error: string } {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n return { ok: false, error: \"Server entry must be an object\" };\n }\n\n const obj = entry as Record<string, unknown>;\n\n const hasCommand = typeof obj.command === \"string\" && obj.command.length > 0;\n const hasUrl = typeof obj.url === \"string\" && obj.url.length > 0;\n\n if (!hasCommand && !hasUrl) {\n return { ok: false, error: \"Server entry must have either 'command' (stdio) or 'url' (http)\" };\n }\n\n if (obj.lifecycle !== undefined) {\n if (![\"keep-alive\", \"lazy\", \"eager\"].includes(obj.lifecycle as string)) {\n return { ok: false, error: \"lifecycle must be 'keep-alive', 'lazy', or 'eager'\" };\n }\n }\n\n if (obj.auth !== undefined) {\n if (![\"oauth\", \"bearer\"].includes(obj.auth as string)) {\n return { ok: false, error: \"auth must be 'oauth' or 'bearer'\" };\n }\n }\n\n if (obj.args !== undefined) {\n if (!Array.isArray(obj.args) || !obj.args.every((a: unknown) => typeof a === \"string\")) {\n return { ok: false, error: \"args must be an array of strings\" };\n }\n }\n\n if (obj.env !== undefined) {\n if (!isStringRecord(obj.env)) {\n return { ok: false, error: \"env must be a Record<string, string>\" };\n }\n }\n\n if (obj.headers !== undefined) {\n if (!isStringRecord(obj.headers)) {\n return { ok: false, error: \"headers must be a Record<string, string>\" };\n }\n }\n\n return { ok: true, value: obj as IServerEntry };\n}\n\nfunction isStringRecord(value: unknown): value is Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {return false;}\n return Object.values(value as Record<string, unknown>).every((v) => typeof v === \"string\");\n}\n\n// -- Transport detection --\n\nexport function detectTransport(entry: IServerEntry): \"stdio\" | \"http\" {\n return entry.url ? \"http\" : \"stdio\";\n}\n\n// -- Sensitive field redaction --\n\nexport function redactSensitiveFields(entry: IServerEntry): IServerEntry {\n const copy = { ...entry };\n if (copy.bearerToken) {\n copy.bearerToken = copy.bearerToken.slice(0, 4) + \"****\";\n }\n if (copy.env) {\n const redactedEnv = { ...copy.env };\n for (const key of Object.keys(redactedEnv)) {\n const lower = key.toLowerCase();\n if (lower.includes(\"token\") || lower.includes(\"secret\") || lower.includes(\"key\") || lower.includes(\"password\")) {\n const val = redactedEnv[key];\n redactedEnv[key] = val.length > 4 ? val.slice(0, 4) + \"****\" : \"****\";\n }\n }\n copy.env = redactedEnv;\n }\n return copy;\n}\n\n// -- Config loading --\n\nfunction parseConfigFile(raw: unknown): IMcpConfig {\n if (!raw || typeof raw !== \"object\") {\n return { mcpServers: {} };\n }\n\n const obj = raw as Record<string, unknown>;\n const servers = obj.mcpServers ?? obj[\"mcp-servers\"] ?? {};\n\n if (typeof servers !== \"object\" || servers === null || Array.isArray(servers)) {\n return { mcpServers: {} };\n }\n\n return {\n mcpServers: servers as Record<string, IServerEntry>,\n imports: Array.isArray(obj.imports) ? obj.imports as IImportKind[] : undefined,\n settings: obj.settings as IMcpSettings | undefined,\n };\n}\n\nfunction extractServers(config: unknown, kind: IImportKind): Record<string, IServerEntry> {\n if (!config || typeof config !== \"object\") {return {};}\n\n const obj = config as Record<string, unknown>;\n\n let servers: unknown;\n switch (kind) {\n case \"claude-desktop\":\n case \"claude-code\":\n case \"codex\":\n servers = obj.mcpServers;\n break;\n case \"cursor\":\n case \"windsurf\":\n case \"vscode\":\n servers = obj.mcpServers ?? obj[\"mcp-servers\"];\n break;\n default:\n return {};\n }\n\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return {};\n }\n\n return servers as Record<string, IServerEntry>;\n}\n\nasync function readJsonFile(filePath: string): Promise<unknown> {\n try {\n const content = await readFile(filePath, \"utf-8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nexport async function loadMcpServerConfig(agentDir: string, cwd: string): Promise<IMcpConfig> {\n const configPath = getMcpConfigPath(agentDir);\n\n let config: IMcpConfig = { mcpServers: {} };\n\n const raw = await readJsonFile(configPath);\n if (raw) {\n config = parseConfigFile(raw);\n }\n\n // Process imports\n if (config.imports?.length) {\n for (const importKind of config.imports) {\n const importPath = IMPORT_PATHS[importKind];\n if (!importPath) {continue;}\n\n const fullPath = importPath.startsWith(\".\")\n ? resolve(cwd, importPath)\n : importPath;\n\n const imported = await readJsonFile(fullPath);\n if (!imported) {continue;}\n\n const servers = extractServers(imported, importKind);\n for (const [name, def] of Object.entries(servers)) {\n if (!config.mcpServers[name]) {\n config.mcpServers[name] = def;\n }\n }\n }\n }\n\n // Project-local config\n const projectPath = resolve(cwd, PROJECT_CONFIG_NAME);\n if (projectPath !== configPath) {\n const projectRaw = await readJsonFile(projectPath);\n if (projectRaw) {\n const validated = parseConfigFile(projectRaw);\n config.mcpServers = { ...config.mcpServers, ...validated.mcpServers };\n if (validated.settings) {\n config.settings = { ...config.settings, ...validated.settings };\n }\n }\n }\n\n return config;\n}\n\n// -- Cache loading --\n\nconst CACHE_VERSION = 1;\nconst CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport async function loadMcpServerCache(agentDir: string): Promise<IMetadataCache | null> {\n const cachePath = getMcpCachePath(agentDir);\n const raw = await readJsonFile(cachePath);\n if (!raw || typeof raw !== \"object\") {return null;}\n\n const obj = raw as Record<string, unknown>;\n if (obj.version !== CACHE_VERSION) {return null;}\n if (!obj.servers || typeof obj.servers !== \"object\") {return null;}\n\n return raw as IMetadataCache;\n}\n\nexport function computeServerHash(definition: IServerEntry): string {\n const identity: Record<string, unknown> = {\n command: definition.command,\n args: definition.args,\n env: definition.env,\n cwd: definition.cwd,\n url: definition.url,\n headers: definition.headers,\n auth: definition.auth,\n bearerToken: definition.bearerToken,\n bearerTokenEnv: definition.bearerTokenEnv,\n exposeResources: definition.exposeResources,\n };\n const normalized = stableStringify(identity);\n return createHash(\"sha256\").update(normalized).digest(\"hex\");\n}\n\nexport function isServerCacheValid(\n entry: IServerCacheEntry,\n definition: IServerEntry,\n maxAgeMs: number = CACHE_MAX_AGE_MS,\n): boolean {\n if (!entry || entry.configHash !== computeServerHash(definition)) {return false;}\n if (!entry.cachedAt || typeof entry.cachedAt !== \"number\") {return false;}\n if (maxAgeMs > 0 && Date.now() - entry.cachedAt > maxAgeMs) {return false;}\n return true;\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined || typeof value !== \"object\") {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? \"undefined\" : serialized;\n }\n if (Array.isArray(value)) {\n return `[${value.map((v) => stableStringify(v)).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj).sort();\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(\",\")}}`;\n}\n\n// -- Provenance --\n\nexport async function getServerProvenance(agentDir: string, cwd: string): Promise<Map<string, IServerProvenance>> {\n const provenance = new Map<string, IServerProvenance>();\n const userPath = getMcpConfigPath(agentDir);\n\n const userRaw = await readJsonFile(userPath);\n const userConfig = userRaw ? parseConfigFile(userRaw) : { mcpServers: {} };\n\n for (const name of Object.keys(userConfig.mcpServers)) {\n provenance.set(name, { path: userPath, kind: \"user\" });\n }\n\n if (userConfig.imports?.length) {\n for (const importKind of userConfig.imports) {\n const importPath = IMPORT_PATHS[importKind];\n if (!importPath) {continue;}\n const fullPath = importPath.startsWith(\".\")\n ? resolve(cwd, importPath)\n : importPath;\n\n const imported = await readJsonFile(fullPath);\n if (!imported) {continue;}\n\n const servers = extractServers(imported, importKind);\n for (const name of Object.keys(servers)) {\n if (!provenance.has(name)) {\n provenance.set(name, { path: userPath, kind: \"import\", importKind });\n }\n }\n }\n }\n\n const projectPath = resolve(cwd, PROJECT_CONFIG_NAME);\n if (projectPath !== userPath) {\n const projectRaw = await readJsonFile(projectPath);\n if (projectRaw) {\n const projectConfig = parseConfigFile(projectRaw);\n for (const name of Object.keys(projectConfig.mcpServers)) {\n provenance.set(name, { path: projectPath, kind: \"project\" });\n }\n }\n }\n\n return provenance;\n}\n\n// -- CRUD --\n\nasync function readUserConfig(agentDir: string): Promise<{ raw: Record<string, unknown>; config: IMcpConfig }> {\n const configPath = getMcpConfigPath(agentDir);\n let raw: Record<string, unknown> = {};\n\n const parsed = await readJsonFile(configPath);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n raw = parsed as Record<string, unknown>;\n }\n\n const config = parseConfigFile(raw);\n return { raw, config };\n}\n\nasync function writeUserConfig(agentDir: string, raw: Record<string, unknown>): Promise<void> {\n const configPath = getMcpConfigPath(agentDir);\n await mkdir(dirname(configPath), { recursive: true });\n const tmpPath = `${configPath}.${process.pid}.tmp`;\n await writeFile(tmpPath, JSON.stringify(raw, null, 2) + \"\\n\", \"utf-8\");\n await rename(tmpPath, configPath);\n}\n\nexport async function addMcpServer(agentDir: string, name: string, entry: IServerEntry): Promise<void> {\n const { raw, config } = await readUserConfig(agentDir);\n if (config.mcpServers[name]) {\n throw new Error(`Server \"${name}\" already exists`);\n }\n\n const servers = (raw.mcpServers ?? raw[\"mcp-servers\"] ?? {}) as Record<string, IServerEntry>;\n const key = raw[\"mcp-servers\"] && !raw.mcpServers ? \"mcp-servers\" : \"mcpServers\";\n\n servers[name] = entry;\n raw[key] = servers;\n await writeUserConfig(agentDir, raw);\n}\n\nexport async function updateMcpServer(agentDir: string, name: string, entry: IServerEntry): Promise<void> {\n const { raw } = await readUserConfig(agentDir);\n const servers = (raw.mcpServers ?? raw[\"mcp-servers\"] ?? {}) as Record<string, IServerEntry>;\n const key = raw[\"mcp-servers\"] && !raw.mcpServers ? \"mcp-servers\" : \"mcpServers\";\n\n if (!servers[name]) {\n throw new Error(`Server \"${name}\" not found in user config`);\n }\n\n servers[name] = entry;\n raw[key] = servers;\n await writeUserConfig(agentDir, raw);\n}\n\nexport async function removeMcpServer(agentDir: string, name: string): Promise<void> {\n const { raw } = await readUserConfig(agentDir);\n const servers = (raw.mcpServers ?? raw[\"mcp-servers\"] ?? {}) as Record<string, IServerEntry>;\n const key = raw[\"mcp-servers\"] && !raw.mcpServers ? \"mcp-servers\" : \"mcpServers\";\n\n if (!servers[name]) {\n throw new Error(`Server \"${name}\" not found in user config`);\n }\n\n delete servers[name];\n raw[key] = servers;\n await writeUserConfig(agentDir, raw);\n}\n\n// -- Tool name formatting (reimplemented from extension) --\n\nexport function getServerPrefix(\n serverName: string,\n mode: \"server\" | \"none\" | \"short\",\n): string {\n if (mode === \"none\") {return \"\";}\n if (mode === \"short\") {\n let short = serverName.replace(/-?mcp$/i, \"\").replace(/-/g, \"_\");\n if (!short) {short = \"mcp\";}\n return short;\n }\n return serverName.replace(/-/g, \"_\");\n}\n\nexport function formatToolName(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\",\n): string {\n const p = getServerPrefix(serverName, prefix);\n return p ? `${p}_${toolName}` : toolName;\n}\n", "import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface ISkillInfo {\n name: string;\n description: string | null;\n directory: string;\n hasReferences: boolean;\n userInvocable: boolean;\n frontmatter: Record<string, string>;\n}\n\ninterface IParsedFrontmatter {\n frontmatter: Record<string, string>;\n body: string;\n}\n\nexport function parseFrontmatter(content: string): IParsedFrontmatter {\n const frontmatter: Record<string, string> = {};\n\n if (!content.startsWith(\"---\")) {\n return { frontmatter, body: content };\n }\n\n const endIndex = content.indexOf(\"\\n---\", 3);\n if (endIndex === -1) {\n return { frontmatter, body: content };\n }\n\n const fmBlock = content.slice(4, endIndex);\n for (const line of fmBlock.split(\"\\n\")) {\n const colonIndex = line.indexOf(\":\");\n if (colonIndex <= 0) {continue;}\n const key = line.slice(0, colonIndex).trim();\n const value = line.slice(colonIndex + 1).trim();\n if (key) {\n frontmatter[key] = value;\n }\n }\n\n const body = content.slice(endIndex + 4).trimStart();\n return { frontmatter, body };\n}\n\nasync function dirExists(path: string): Promise<boolean> {\n try {\n const s = await stat(path);\n return s.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function listSkills(agentDir: string): Promise<ISkillInfo[]> {\n const skillsDir = join(agentDir, \"skills\");\n\n let entries;\n try {\n entries = await readdir(skillsDir, { withFileTypes: true });\n } catch {\n return [];\n }\n\n const skills: ISkillInfo[] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {continue;}\n\n const skillDir = join(skillsDir, entry.name);\n const skillMdPath = join(skillDir, \"SKILL.md\");\n\n let content: string;\n try {\n content = await readFile(skillMdPath, \"utf-8\");\n } catch {\n continue;\n }\n\n const parsed = parseFrontmatter(content);\n const hasReferences = await dirExists(join(skillDir, \"references\"));\n\n skills.push({\n name: parsed.frontmatter.name || entry.name,\n description: parsed.frontmatter.description || null,\n directory: entry.name,\n hasReferences,\n userInvocable: parsed.frontmatter[\"user-invocable\"] === \"true\",\n frontmatter: parsed.frontmatter,\n });\n }\n\n return skills.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function getSkillDetail(agentDir: string, skillName: string): Promise<{ skill: ISkillInfo; content: string } | null> {\n const skillsDir = join(agentDir, \"skills\");\n\n let entries;\n try {\n entries = await readdir(skillsDir, { withFileTypes: true });\n } catch {\n return null;\n }\n\n // Match by directory name or frontmatter name\n for (const entry of entries) {\n if (!entry.isDirectory()) {continue;}\n\n const skillDir = join(skillsDir, entry.name);\n const skillMdPath = join(skillDir, \"SKILL.md\");\n\n let content: string;\n try {\n content = await readFile(skillMdPath, \"utf-8\");\n } catch {\n continue;\n }\n\n const parsed = parseFrontmatter(content);\n const fmName = parsed.frontmatter.name || entry.name;\n\n if (entry.name === skillName || fmName === skillName) {\n const hasReferences = await dirExists(join(skillDir, \"references\"));\n\n return {\n skill: {\n name: fmName,\n description: parsed.frontmatter.description || null,\n directory: entry.name,\n hasReferences,\n userInvocable: parsed.frontmatter[\"user-invocable\"] === \"true\",\n frontmatter: parsed.frontmatter,\n },\n content,\n };\n }\n }\n\n return null;\n}\n", "import {\n loadMcpServerConfig,\n loadMcpServerCache,\n formatToolName,\n type IMcpConfig,\n type IMetadataCache,\n} from \"./mcpConfigService\";\nimport { DOCYRUS_WEB_BROWSER_CLIENT_TOOLS } from \"../../resources/pi-agent/shared/docyrusWebBrowserProtocol\";\n\nexport interface IToolInfo {\n name: string;\n description: string | null;\n source: \"built-in\" | string;\n serverName?: string;\n originalName?: string;\n inputSchema?: unknown;\n}\n\nconst BUILT_IN_TOOLS: Record<string, { name: string; description: string }[]> = {\n agent: [\n { name: \"read\", description: \"Read file contents\" },\n { name: \"bash\", description: \"Execute shell commands\" },\n { name: \"grep\", description: \"Search file contents\" },\n { name: \"find\", description: \"Find files by name pattern\" },\n { name: \"ls\", description: \"List directory contents\" },\n ],\n coder: [\n { name: \"read\", description: \"Read file contents\" },\n { name: \"bash\", description: \"Execute shell commands\" },\n { name: \"edit\", description: \"Edit file contents\" },\n { name: \"write\", description: \"Write file contents\" },\n { name: \"grep\", description: \"Search file contents\" },\n { name: \"find\", description: \"Find files by name pattern\" },\n { name: \"ls\", description: \"List directory contents\" },\n ],\n};\n\nexport async function listAllTools(params: {\n profile: string;\n agentDir: string;\n cwd: string;\n includeDocyrusWebBrowser?: boolean;\n}): Promise<IToolInfo[]> {\n const { profile, agentDir, cwd, includeDocyrusWebBrowser } = params;\n const tools: IToolInfo[] = [];\n\n // Built-in tools\n const builtIn = BUILT_IN_TOOLS[profile] ?? BUILT_IN_TOOLS.coder;\n for (const tool of builtIn) {\n tools.push({\n name: tool.name,\n description: tool.description,\n source: \"built-in\",\n });\n }\n\n if (includeDocyrusWebBrowser) {\n for (const tool of DOCYRUS_WEB_BROWSER_CLIENT_TOOLS) {\n tools.push({\n name: tool.name,\n description: tool.description,\n source: \"built-in\",\n inputSchema: tool.inputSchema,\n });\n }\n }\n\n // MCP tools from cache\n let config: IMcpConfig;\n let cache: IMetadataCache | null;\n try {\n [config, cache] = await Promise.all([\n loadMcpServerConfig(agentDir, cwd),\n loadMcpServerCache(agentDir),\n ]);\n } catch {\n return tools;\n }\n\n const serverNames = Object.keys(config.mcpServers);\n if (serverNames.length === 0) {\n return tools;\n }\n\n // Add the mcp proxy tool\n tools.push({\n name: \"mcp\",\n description: \"Call an MCP server tool\",\n source: \"built-in\",\n });\n\n if (!cache) {\n return tools;\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const serverName of serverNames) {\n const serverCache = cache.servers[serverName];\n if (!serverCache) {continue;}\n\n for (const tool of serverCache.tools ?? []) {\n if (!tool?.name) {continue;}\n tools.push({\n name: formatToolName(tool.name, serverName, prefix),\n description: tool.description ?? null,\n source: `mcp:${serverName}`,\n serverName,\n originalName: tool.name,\n inputSchema: tool.inputSchema,\n });\n }\n }\n\n return tools;\n}\n", "export type IDocyrusPiProfileId = \"agent\" | \"coder\";\nexport type IDocyrusPiThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\nexport interface IDocyrusPiServerLoaderRequest {\n profile: IDocyrusPiProfileId;\n port: number;\n provider?: string;\n model?: string;\n thinking?: IDocyrusPiThinkingLevel;\n sessionDir?: string;\n apiKey?: string;\n auth?: string;\n verbose?: boolean;\n}\n\nexport function parseServerLoaderRequest(payload: string): IDocyrusPiServerLoaderRequest {\n return JSON.parse(payload) as IDocyrusPiServerLoaderRequest;\n}\n", "const SERVER_MODE_ALLOWED_MODEL_IDS_BY_PROVIDER = {\n anthropic: [\n \"claude-opus-4-6\",\n \"claude-sonnet-4-6\",\n \"claude-haiku-4-5\",\n ],\n openai: [\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n \"gpt-5.4-nano\",\n ],\n \"azure-openai-responses\": [\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n \"gpt-5.4-nano\",\n ],\n} as const;\n\ninterface IModelDescriptor {\n provider: string;\n id: string;\n}\n\ninterface IModelRegistryLike {\n getAll(): IModelDescriptor[];\n getAvailable(): IModelDescriptor[];\n find(provider: string, modelId: string): unknown | undefined;\n}\n\nconst ALLOWED_MODEL_IDS_BY_PROVIDER: Record<string, ReadonlySet<string>> = Object.fromEntries(\n Object.entries(SERVER_MODE_ALLOWED_MODEL_IDS_BY_PROVIDER).map(([provider, modelIds]) => [provider, new Set(modelIds)]),\n);\n\nexport function isServerSelectableModel(model: IModelDescriptor): boolean {\n const allowedModelIds = ALLOWED_MODEL_IDS_BY_PROVIDER[model.provider];\n if (!allowedModelIds) {\n return true;\n }\n\n return allowedModelIds.has(model.id);\n}\n\nfunction filterModels<TModel extends IModelDescriptor>(models: TModel[]): TModel[] {\n return models.filter((model) => isServerSelectableModel(model));\n}\n\nexport function createServerRestrictedModelRegistry<TRegistry extends IModelRegistryLike>(modelRegistry: TRegistry): TRegistry {\n return new Proxy(modelRegistry, {\n get(target, property, receiver) {\n if (property === \"getAll\") {\n return () => filterModels(target.getAll());\n }\n\n if (property === \"getAvailable\") {\n return () => filterModels(target.getAvailable());\n }\n\n if (property === \"find\") {\n return (provider: string, modelId: string) => {\n if (!isServerSelectableModel({ provider, id: modelId })) {\n return undefined;\n }\n\n return target.find(provider, modelId);\n };\n }\n\n const value = Reflect.get(target, property, receiver);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n}\n\n", "import picocolors from \"picocolors\";\n\nconst SPINNER_FRAMES = [\"\u280B\", \"\u2819\", \"\u2839\", \"\u2838\", \"\u283C\", \"\u2834\", \"\u2826\", \"\u2827\", \"\u2807\", \"\u280F\"] as const;\nconst SPINNER_INTERVAL_MS = 80;\n\nexport interface ISpinner {\n update(message: string): void;\n stop(): void;\n}\n\nexport function createSpinner(message: string): ISpinner {\n let frameIndex = 0;\n let currentMessage = message;\n\n const render = () => {\n const frame = picocolors.cyan(SPINNER_FRAMES[frameIndex]);\n process.stderr.write(`\\r ${frame} ${picocolors.dim(currentMessage)}`);\n frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;\n };\n\n render();\n const interval = setInterval(render, SPINNER_INTERVAL_MS);\n\n return {\n update(newMessage: string) {\n currentMessage = newMessage;\n },\n stop() {\n clearInterval(interval);\n process.stderr.write(`\\r${\" \".repeat(currentMessage.length + 10)}\\r`);\n },\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
3
|
+
"sources": ["../../../node_modules/.pnpm/picocolors@1.1.1/node_modules/picocolors/picocolors.js", "../../../node_modules/.pnpm/@hono+node-server@1.19.11_hono@4.12.8/node_modules/@hono/node-server/dist/index.mjs", "../../../apps/api-cli/src/server/server-loader.ts", "../../../apps/api-cli/src/agent/envStore.ts", "../../../apps/api-cli/src/agent/packagedExtensions.ts", "../../../apps/api-cli/src/server/agentServer.ts", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/compose.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/request/constants.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/body.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/url.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/request.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/html.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/context.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/utils/constants.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/hono-base.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/matcher.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/node.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/reg-exp-router/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/smart-router/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/trie-router/node.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/router/trie-router/router.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/hono.js", "../../../node_modules/.pnpm/hono@4.12.8/node_modules/hono/dist/middleware/cors/index.js", "../../../apps/api-cli/resources/pi-agent/shared/askUserProtocol.ts", "../../../apps/api-cli/resources/pi-agent/shared/docyrusWebBrowserProtocol.ts", "../../../apps/api-cli/src/server/eventBridge.ts", "../../../apps/api-cli/src/agent/modelsConfig.ts", "../../../apps/api-cli/src/agent/authFlows.ts", "../../../apps/api-cli/src/agent/providerCatalog.ts", "../../../apps/api-cli/src/agent/authInteractivity.ts", "../../../apps/api-cli/src/server/oauthFlowManager.ts", "../../../apps/api-cli/src/server/mcpConfigService.ts", "../../../apps/api-cli/src/server/skillsService.ts", "../../../apps/api-cli/src/server/toolsService.ts", "../../../apps/api-cli/src/server/loaderRequest.ts", "../../../apps/api-cli/src/server/restrictedModelRegistry.ts", "../../../apps/api-cli/src/server/serverSessionAdapter.ts", "../../../apps/api-cli/src/services/spinner.ts"],
|
|
4
|
+
"sourcesContent": ["let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n", "// src/server.ts\nimport { createServer as createServerHTTP } from \"http\";\n\n// src/listener.ts\nimport { Http2ServerRequest as Http2ServerRequest2 } from \"http2\";\n\n// src/request.ts\nimport { Http2ServerRequest } from \"http2\";\nimport { Readable } from \"stream\";\nvar RequestError = class extends Error {\n constructor(message, options) {\n super(message, options);\n this.name = \"RequestError\";\n }\n};\nvar toRequestError = (e) => {\n if (e instanceof RequestError) {\n return e;\n }\n return new RequestError(e.message, { cause: e });\n};\nvar GlobalRequest = global.Request;\nvar Request = class extends GlobalRequest {\n constructor(input, options) {\n if (typeof input === \"object\" && getRequestCache in input) {\n input = input[getRequestCache]();\n }\n if (typeof options?.body?.getReader !== \"undefined\") {\n ;\n options.duplex ??= \"half\";\n }\n super(input, options);\n }\n};\nvar newHeadersFromIncoming = (incoming) => {\n const headerRecord = [];\n const rawHeaders = incoming.rawHeaders;\n for (let i = 0; i < rawHeaders.length; i += 2) {\n const { [i]: key, [i + 1]: value } = rawHeaders;\n if (key.charCodeAt(0) !== /*:*/\n 58) {\n headerRecord.push([key, value]);\n }\n }\n return new Headers(headerRecord);\n};\nvar wrapBodyStream = Symbol(\"wrapBodyStream\");\nvar newRequestFromIncoming = (method, url, headers, incoming, abortController) => {\n const init = {\n method,\n headers,\n signal: abortController.signal\n };\n if (method === \"TRACE\") {\n init.method = \"GET\";\n const req = new Request(url, init);\n Object.defineProperty(req, \"method\", {\n get() {\n return \"TRACE\";\n }\n });\n return req;\n }\n if (!(method === \"GET\" || method === \"HEAD\")) {\n if (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) {\n init.body = new ReadableStream({\n start(controller) {\n controller.enqueue(incoming.rawBody);\n controller.close();\n }\n });\n } else if (incoming[wrapBodyStream]) {\n let reader;\n init.body = new ReadableStream({\n async pull(controller) {\n try {\n reader ||= Readable.toWeb(incoming).getReader();\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n controller.error(error);\n }\n }\n });\n } else {\n init.body = Readable.toWeb(incoming);\n }\n }\n return new Request(url, init);\n};\nvar getRequestCache = Symbol(\"getRequestCache\");\nvar requestCache = Symbol(\"requestCache\");\nvar incomingKey = Symbol(\"incomingKey\");\nvar urlKey = Symbol(\"urlKey\");\nvar headersKey = Symbol(\"headersKey\");\nvar abortControllerKey = Symbol(\"abortControllerKey\");\nvar getAbortController = Symbol(\"getAbortController\");\nvar requestPrototype = {\n get method() {\n return this[incomingKey].method || \"GET\";\n },\n get url() {\n return this[urlKey];\n },\n get headers() {\n return this[headersKey] ||= newHeadersFromIncoming(this[incomingKey]);\n },\n [getAbortController]() {\n this[getRequestCache]();\n return this[abortControllerKey];\n },\n [getRequestCache]() {\n this[abortControllerKey] ||= new AbortController();\n return this[requestCache] ||= newRequestFromIncoming(\n this.method,\n this[urlKey],\n this.headers,\n this[incomingKey],\n this[abortControllerKey]\n );\n }\n};\n[\n \"body\",\n \"bodyUsed\",\n \"cache\",\n \"credentials\",\n \"destination\",\n \"integrity\",\n \"mode\",\n \"redirect\",\n \"referrer\",\n \"referrerPolicy\",\n \"signal\",\n \"keepalive\"\n].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n get() {\n return this[getRequestCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(requestPrototype, k, {\n value: function() {\n return this[getRequestCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(requestPrototype, Request.prototype);\nvar newRequest = (incoming, defaultHostname) => {\n const req = Object.create(requestPrototype);\n req[incomingKey] = incoming;\n const incomingUrl = incoming.url || \"\";\n if (incomingUrl[0] !== \"/\" && // short-circuit for performance. most requests are relative URL.\n (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n if (incoming instanceof Http2ServerRequest) {\n throw new RequestError(\"Absolute URL for :path is not allowed in HTTP/2\");\n }\n try {\n const url2 = new URL(incomingUrl);\n req[urlKey] = url2.href;\n } catch (e) {\n throw new RequestError(\"Invalid absolute URL\", { cause: e });\n }\n return req;\n }\n const host = (incoming instanceof Http2ServerRequest ? incoming.authority : incoming.headers.host) || defaultHostname;\n if (!host) {\n throw new RequestError(\"Missing host header\");\n }\n let scheme;\n if (incoming instanceof Http2ServerRequest) {\n scheme = incoming.scheme;\n if (!(scheme === \"http\" || scheme === \"https\")) {\n throw new RequestError(\"Unsupported scheme\");\n }\n } else {\n scheme = incoming.socket && incoming.socket.encrypted ? \"https\" : \"http\";\n }\n const url = new URL(`${scheme}://${host}${incomingUrl}`);\n if (url.hostname.length !== host.length && url.hostname !== host.replace(/:\\d+$/, \"\")) {\n throw new RequestError(\"Invalid host header\");\n }\n req[urlKey] = url.href;\n return req;\n};\n\n// src/response.ts\nvar responseCache = Symbol(\"responseCache\");\nvar getResponseCache = Symbol(\"getResponseCache\");\nvar cacheKey = Symbol(\"cache\");\nvar GlobalResponse = global.Response;\nvar Response2 = class _Response {\n #body;\n #init;\n [getResponseCache]() {\n delete this[cacheKey];\n return this[responseCache] ||= new GlobalResponse(this.#body, this.#init);\n }\n constructor(body, init) {\n let headers;\n this.#body = body;\n if (init instanceof _Response) {\n const cachedGlobalResponse = init[responseCache];\n if (cachedGlobalResponse) {\n this.#init = cachedGlobalResponse;\n this[getResponseCache]();\n return;\n } else {\n this.#init = init.#init;\n headers = new Headers(init.#init.headers);\n }\n } else {\n this.#init = init;\n }\n if (typeof body === \"string\" || typeof body?.getReader !== \"undefined\" || body instanceof Blob || body instanceof Uint8Array) {\n ;\n this[cacheKey] = [init?.status || 200, body, headers || init?.headers];\n }\n }\n get headers() {\n const cache = this[cacheKey];\n if (cache) {\n if (!(cache[2] instanceof Headers)) {\n cache[2] = new Headers(\n cache[2] || { \"content-type\": \"text/plain; charset=UTF-8\" }\n );\n }\n return cache[2];\n }\n return this[getResponseCache]().headers;\n }\n get status() {\n return this[cacheKey]?.[0] ?? this[getResponseCache]().status;\n }\n get ok() {\n const status = this.status;\n return status >= 200 && status < 300;\n }\n};\n[\"body\", \"bodyUsed\", \"redirected\", \"statusText\", \"trailers\", \"type\", \"url\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n get() {\n return this[getResponseCache]()[k];\n }\n });\n});\n[\"arrayBuffer\", \"blob\", \"clone\", \"formData\", \"json\", \"text\"].forEach((k) => {\n Object.defineProperty(Response2.prototype, k, {\n value: function() {\n return this[getResponseCache]()[k]();\n }\n });\n});\nObject.setPrototypeOf(Response2, GlobalResponse);\nObject.setPrototypeOf(Response2.prototype, GlobalResponse.prototype);\n\n// src/utils.ts\nasync function readWithoutBlocking(readPromise) {\n return Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);\n}\nfunction writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {\n const cancel = (error) => {\n reader.cancel(error).catch(() => {\n });\n };\n writable.on(\"close\", cancel);\n writable.on(\"error\", cancel);\n (currentReadPromise ?? reader.read()).then(flow, handleStreamError);\n return reader.closed.finally(() => {\n writable.off(\"close\", cancel);\n writable.off(\"error\", cancel);\n });\n function handleStreamError(error) {\n if (error) {\n writable.destroy(error);\n }\n }\n function onDrain() {\n reader.read().then(flow, handleStreamError);\n }\n function flow({ done, value }) {\n try {\n if (done) {\n writable.end();\n } else if (!writable.write(value)) {\n writable.once(\"drain\", onDrain);\n } else {\n return reader.read().then(flow, handleStreamError);\n }\n } catch (e) {\n handleStreamError(e);\n }\n }\n}\nfunction writeFromReadableStream(stream, writable) {\n if (stream.locked) {\n throw new TypeError(\"ReadableStream is locked.\");\n } else if (writable.destroyed) {\n return;\n }\n return writeFromReadableStreamDefaultReader(stream.getReader(), writable);\n}\nvar buildOutgoingHttpHeaders = (headers) => {\n const res = {};\n if (!(headers instanceof Headers)) {\n headers = new Headers(headers ?? void 0);\n }\n const cookies = [];\n for (const [k, v] of headers) {\n if (k === \"set-cookie\") {\n cookies.push(v);\n } else {\n res[k] = v;\n }\n }\n if (cookies.length > 0) {\n res[\"set-cookie\"] = cookies;\n }\n res[\"content-type\"] ??= \"text/plain; charset=UTF-8\";\n return res;\n};\n\n// src/utils/response/constants.ts\nvar X_ALREADY_SENT = \"x-hono-already-sent\";\n\n// src/globals.ts\nimport crypto from \"crypto\";\nif (typeof global.crypto === \"undefined\") {\n global.crypto = crypto;\n}\n\n// src/listener.ts\nvar outgoingEnded = Symbol(\"outgoingEnded\");\nvar handleRequestError = () => new Response(null, {\n status: 400\n});\nvar handleFetchError = (e) => new Response(null, {\n status: e instanceof Error && (e.name === \"TimeoutError\" || e.constructor.name === \"TimeoutError\") ? 504 : 500\n});\nvar handleResponseError = (e, outgoing) => {\n const err = e instanceof Error ? e : new Error(\"unknown error\", { cause: e });\n if (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") {\n console.info(\"The user aborted a request.\");\n } else {\n console.error(e);\n if (!outgoing.headersSent) {\n outgoing.writeHead(500, { \"Content-Type\": \"text/plain\" });\n }\n outgoing.end(`Error: ${err.message}`);\n outgoing.destroy(err);\n }\n};\nvar flushHeaders = (outgoing) => {\n if (\"flushHeaders\" in outgoing && outgoing.writable) {\n outgoing.flushHeaders();\n }\n};\nvar responseViaCache = async (res, outgoing) => {\n let [status, body, header] = res[cacheKey];\n let hasContentLength = false;\n if (!header) {\n header = { \"content-type\": \"text/plain; charset=UTF-8\" };\n } else if (header instanceof Headers) {\n hasContentLength = header.has(\"content-length\");\n header = buildOutgoingHttpHeaders(header);\n } else if (Array.isArray(header)) {\n const headerObj = new Headers(header);\n hasContentLength = headerObj.has(\"content-length\");\n header = buildOutgoingHttpHeaders(headerObj);\n } else {\n for (const key in header) {\n if (key.length === 14 && key.toLowerCase() === \"content-length\") {\n hasContentLength = true;\n break;\n }\n }\n }\n if (!hasContentLength) {\n if (typeof body === \"string\") {\n header[\"Content-Length\"] = Buffer.byteLength(body);\n } else if (body instanceof Uint8Array) {\n header[\"Content-Length\"] = body.byteLength;\n } else if (body instanceof Blob) {\n header[\"Content-Length\"] = body.size;\n }\n }\n outgoing.writeHead(status, header);\n if (typeof body === \"string\" || body instanceof Uint8Array) {\n outgoing.end(body);\n } else if (body instanceof Blob) {\n outgoing.end(new Uint8Array(await body.arrayBuffer()));\n } else {\n flushHeaders(outgoing);\n await writeFromReadableStream(body, outgoing)?.catch(\n (e) => handleResponseError(e, outgoing)\n );\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar isPromise = (res) => typeof res.then === \"function\";\nvar responseViaResponseObject = async (res, outgoing, options = {}) => {\n if (isPromise(res)) {\n if (options.errorHandler) {\n try {\n res = await res;\n } catch (err) {\n const errRes = await options.errorHandler(err);\n if (!errRes) {\n return;\n }\n res = errRes;\n }\n } else {\n res = await res.catch(handleFetchError);\n }\n }\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n const resHeaderRecord = buildOutgoingHttpHeaders(res.headers);\n if (res.body) {\n const reader = res.body.getReader();\n const values = [];\n let done = false;\n let currentReadPromise = void 0;\n if (resHeaderRecord[\"transfer-encoding\"] !== \"chunked\") {\n let maxReadCount = 2;\n for (let i = 0; i < maxReadCount; i++) {\n currentReadPromise ||= reader.read();\n const chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {\n console.error(e);\n done = true;\n });\n if (!chunk) {\n if (i === 1) {\n await new Promise((resolve) => setTimeout(resolve));\n maxReadCount = 3;\n continue;\n }\n break;\n }\n currentReadPromise = void 0;\n if (chunk.value) {\n values.push(chunk.value);\n }\n if (chunk.done) {\n done = true;\n break;\n }\n }\n if (done && !(\"content-length\" in resHeaderRecord)) {\n resHeaderRecord[\"content-length\"] = values.reduce((acc, value) => acc + value.length, 0);\n }\n }\n outgoing.writeHead(res.status, resHeaderRecord);\n values.forEach((value) => {\n ;\n outgoing.write(value);\n });\n if (done) {\n outgoing.end();\n } else {\n if (values.length === 0) {\n flushHeaders(outgoing);\n }\n await writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);\n }\n } else if (resHeaderRecord[X_ALREADY_SENT]) {\n } else {\n outgoing.writeHead(res.status, resHeaderRecord);\n outgoing.end();\n }\n ;\n outgoing[outgoingEnded]?.();\n};\nvar getRequestListener = (fetchCallback, options = {}) => {\n const autoCleanupIncoming = options.autoCleanupIncoming ?? true;\n if (options.overrideGlobalObjects !== false && global.Request !== Request) {\n Object.defineProperty(global, \"Request\", {\n value: Request\n });\n Object.defineProperty(global, \"Response\", {\n value: Response2\n });\n }\n return async (incoming, outgoing) => {\n let res, req;\n try {\n req = newRequest(incoming, options.hostname);\n let incomingEnded = !autoCleanupIncoming || incoming.method === \"GET\" || incoming.method === \"HEAD\";\n if (!incomingEnded) {\n ;\n incoming[wrapBodyStream] = true;\n incoming.on(\"end\", () => {\n incomingEnded = true;\n });\n if (incoming instanceof Http2ServerRequest2) {\n ;\n outgoing[outgoingEnded] = () => {\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n outgoing.destroy();\n });\n }\n });\n }\n };\n }\n }\n outgoing.on(\"close\", () => {\n const abortController = req[abortControllerKey];\n if (abortController) {\n if (incoming.errored) {\n req[abortControllerKey].abort(incoming.errored.toString());\n } else if (!outgoing.writableFinished) {\n req[abortControllerKey].abort(\"Client connection prematurely closed.\");\n }\n }\n if (!incomingEnded) {\n setTimeout(() => {\n if (!incomingEnded) {\n setTimeout(() => {\n incoming.destroy();\n });\n }\n });\n }\n });\n res = fetchCallback(req, { incoming, outgoing });\n if (cacheKey in res) {\n return responseViaCache(res, outgoing);\n }\n } catch (e) {\n if (!res) {\n if (options.errorHandler) {\n res = await options.errorHandler(req ? e : toRequestError(e));\n if (!res) {\n return;\n }\n } else if (!req) {\n res = handleRequestError();\n } else {\n res = handleFetchError(e);\n }\n } else {\n return handleResponseError(e, outgoing);\n }\n }\n try {\n return await responseViaResponseObject(res, outgoing, options);\n } catch (e) {\n return handleResponseError(e, outgoing);\n }\n };\n};\n\n// src/server.ts\nvar createAdaptorServer = (options) => {\n const fetchCallback = options.fetch;\n const requestListener = getRequestListener(fetchCallback, {\n hostname: options.hostname,\n overrideGlobalObjects: options.overrideGlobalObjects,\n autoCleanupIncoming: options.autoCleanupIncoming\n });\n const createServer = options.createServer || createServerHTTP;\n const server = createServer(options.serverOptions || {}, requestListener);\n return server;\n};\nvar serve = (options, listeningListener) => {\n const server = createAdaptorServer(options);\n server.listen(options?.port ?? 3e3, options.hostname, () => {\n const serverInfo = server.address();\n listeningListener && listeningListener(serverInfo);\n });\n return server;\n};\nexport {\n RequestError,\n createAdaptorServer,\n getRequestListener,\n serve\n};\n", "import { existsSync } from \"node:fs\";\nimport { pathToFileURL } from \"node:url\";\nimport { join, resolve as resolvePath } from \"node:path\";\nimport picocolors from \"picocolors\";\nimport { AgentEnvStore } from \"../agent/envStore\";\nimport { resolvePackagedExtensionPaths } from \"../agent/packagedExtensions\";\nimport { createAgentServer } from \"./agentServer\";\nimport { parseServerLoaderRequest, type IDocyrusPiProfileId, type IDocyrusPiServerLoaderRequest } from \"./loaderRequest\";\nimport { createServerRestrictedModelRegistry } from \"./restrictedModelRegistry\";\nimport { createServerSessionAdapter } from \"./serverSessionAdapter\";\nimport { createSpinner } from \"../services/spinner\";\n\ninterface IPiExports {\n AuthStorage: {\n create(path?: string): any;\n };\n DefaultResourceLoader: new(config: IDefaultResourceLoaderConfig) => { reload(): Promise<void> };\n ModelRegistry: {\n create(authStorage: any, modelsJsonPath?: string): any;\n inMemory(authStorage: any): any;\n };\n SettingsManager: {\n create(cwd?: string, agentDir?: string): any;\n };\n SessionManager: {\n create(cwd: string, sessionDir?: string): any;\n list(cwd: string, sessionDir?: string, onProgress?: unknown): Promise<any[]>;\n open(path: string, sessionDir?: string): any;\n };\n createAgentSession(options: Record<string, unknown>): Promise<{\n session: any;\n extensionsResult: {\n runtime: {\n flagValues: Map<string, boolean | string>;\n getCommands?: () => Array<{ name: string; description?: string }>;\n };\n };\n modelFallbackMessage?: string;\n }>;\n createBashTool(cwd: string): unknown;\n createEditTool(cwd: string): unknown;\n createFindTool(cwd: string): unknown;\n createGrepTool(cwd: string): unknown;\n createLsTool(cwd: string): unknown;\n createReadTool(cwd: string): unknown;\n createWriteTool(cwd: string): unknown;\n}\n\ninterface IPiSkillSummary {\n name: string;\n [key: string]: unknown;\n}\n\ninterface IResourceLoaderSkillState {\n skills: IPiSkillSummary[];\n diagnostics: unknown[];\n}\n\ninterface IDefaultResourceLoaderConfig {\n cwd?: string;\n agentDir?: string;\n settingsManager?: unknown;\n additionalExtensionPaths?: string[];\n skillsOverride?: (current: IResourceLoaderSkillState) => IResourceLoaderSkillState;\n systemPrompt?: string;\n}\n\nfunction readRequiredEnv(name: string): string {\n const value = process.env[name];\n if (!value || value.trim().length === 0) {\n throw new Error(`Missing required environment variable: ${name}`);\n }\n\n return value;\n}\n\nfunction readLoaderRequest(): IDocyrusPiServerLoaderRequest {\n return parseServerLoaderRequest(readRequiredEnv(\"DOCYRUS_PI_REQUEST\"));\n}\n\nasync function loadPiExports(): Promise<IPiExports> {\n const piPackageDir = readRequiredEnv(\"PI_PACKAGE_DIR\");\n const moduleUrl = pathToFileURL(join(piPackageDir, \"dist\", \"index.js\")).href;\n return await import(moduleUrl) as IPiExports;\n}\n\nfunction resolvePackagedPiResourceRoot(): string {\n const candidates = [\n resolvePath(process.cwd(), \"apps/api-cli/resources/pi-agent\"),\n resolvePath(__dirname, \"../resources/pi-agent\"),\n resolvePath(__dirname, \"resources/pi-agent\"),\n resolvePath(process.cwd(), \"dist/apps/api-cli/resources/pi-agent\"),\n ];\n\n const resolved = candidates.find((candidate) => existsSync(candidate));\n if (!resolved) {\n throw new Error(`Unable to locate pi agent resources. Checked: ${candidates.join(\", \")}`);\n }\n\n return resolved;\n}\n\nfunction setProcessArgValue(flag: string, value: string): void {\n const existingIndex = process.argv.indexOf(flag);\n if (existingIndex >= 0) {\n if (existingIndex + 1 < process.argv.length) {\n process.argv[existingIndex + 1] = value;\n return;\n }\n\n process.argv.push(value);\n return;\n }\n\n process.argv.push(flag, value);\n}\n\nfunction buildTools(profile: IDocyrusPiProfileId, cwd: string, pi: IPiExports) {\n if (profile === \"agent\") {\n return [\n pi.createReadTool(cwd),\n pi.createBashTool(cwd),\n pi.createGrepTool(cwd),\n pi.createFindTool(cwd),\n pi.createLsTool(cwd),\n ];\n }\n\n return [\n pi.createReadTool(cwd),\n pi.createBashTool(cwd),\n pi.createEditTool(cwd),\n pi.createWriteTool(cwd),\n pi.createGrepTool(cwd),\n pi.createFindTool(cwd),\n pi.createLsTool(cwd),\n ];\n}\n\nfunction resolveRequestedModel(params: {\n request: IDocyrusPiServerLoaderRequest;\n modelRegistry: { getAvailable(): Array<{ provider: string; id: string }>; find(provider: string, modelId: string): unknown | undefined };\n}): unknown | undefined {\n const { request, modelRegistry } = params;\n const requestedProvider = request.provider?.trim();\n const requestedModel = request.model?.trim();\n\n if (!requestedProvider && !requestedModel) {\n return undefined;\n }\n\n if (requestedProvider && requestedModel) {\n const normalizedModelId = requestedModel.startsWith(`${requestedProvider}/`)\n ? requestedModel.slice(requestedProvider.length + 1)\n : requestedModel;\n return modelRegistry.find(requestedProvider, normalizedModelId);\n }\n\n if (requestedModel && requestedModel.includes(\"/\")) {\n const slashIndex = requestedModel.indexOf(\"/\");\n return modelRegistry.find(requestedModel.slice(0, slashIndex).trim(), requestedModel.slice(slashIndex + 1).trim());\n }\n\n if (requestedModel) {\n const availableModels = modelRegistry.getAvailable();\n const exactMatches = availableModels.filter((model) => model.id === requestedModel);\n if (exactMatches.length === 1) {\n return exactMatches[0];\n }\n\n return availableModels.find((model) => model.id.includes(requestedModel));\n }\n\n return undefined;\n}\n\nfunction renderStartupSplash(version: string): void {\n process.stderr.write(\n `\\n ${picocolors.bold(\"DOCYRUS SERVER\")} ${picocolors.dim(`v${version}`)}\\n` +\n ` ${picocolors.green(\"Starting agent server...\")}\\n`,\n );\n}\n\nasync function ensureServerSelectableSessionModel(params: {\n session: {\n model?: { provider: string; id: string };\n setModel(model: unknown): Promise<void>;\n };\n modelRegistry: {\n getAvailable(): Array<{ provider: string; id: string }>;\n };\n}): Promise<void> {\n const availableModels = params.modelRegistry.getAvailable();\n if (availableModels.length === 0) {\n return;\n }\n\n const currentModel = params.session.model;\n const currentModelIsSelectable = currentModel\n ? availableModels.some((model) => model.provider === currentModel.provider && model.id === currentModel.id)\n : false;\n\n if (!currentModelIsSelectable) {\n await params.session.setModel(availableModels[0]);\n }\n}\n\nasync function main(): Promise<void> {\n const request = readLoaderRequest();\n const pi = await loadPiExports();\n const cwd = process.cwd();\n const agentDir = readRequiredEnv(\"PI_CODING_AGENT_DIR\");\n const version = process.env.DOCYRUS_PI_VERSION || \"dev\";\n const resourceRoot = resolvePackagedPiResourceRoot();\n const packagedExtensionPaths = resolvePackagedExtensionPaths(resourceRoot, \"server\");\n const mcpConfigPath = join(agentDir, \"mcp.json\");\n const hasPackagedMcpAdapter = packagedExtensionPaths.some((extensionPath) => extensionPath.includes(\"pi-mcp-adapter\"));\n const envStore = new AgentEnvStore(join(agentDir, \"env.json\"));\n await envStore.hydrateProcessEnv(process.env);\n\n if (hasPackagedMcpAdapter) {\n setProcessArgValue(\"--mcp-config\", mcpConfigPath);\n }\n\n const authStorage = pi.AuthStorage.create(join(agentDir, \"auth.json\"));\n const settingsManager = pi.SettingsManager.create(cwd, agentDir);\n const modelsJsonPath = join(agentDir, \"models.json\");\n const modelRegistry = createServerRestrictedModelRegistry(pi.ModelRegistry.create(authStorage, modelsJsonPath));\n const quietStartup = !request.verbose;\n\n if (quietStartup) {\n process.env.PI_SKIP_VERSION_CHECK = \"1\";\n settingsManager.setQuietStartup(true);\n settingsManager.setCollapseChangelog(true);\n settingsManager.setLastChangelogVersion(version);\n }\n\n renderStartupSplash(version);\n const spinner = createSpinner(\"Loading agent...\");\n\n const requestedModel = resolveRequestedModel({\n request,\n modelRegistry,\n });\n\n if (request.apiKey) {\n const apiKeyProvider = request.provider?.trim() || (requestedModel as { provider?: string } | undefined)?.provider;\n if (!apiKeyProvider) {\n throw new Error(\"--api-key requires a provider or a resolvable model.\");\n }\n\n authStorage.setRuntimeApiKey(apiKeyProvider, request.apiKey);\n }\n\n const sessionManager = pi.SessionManager.create(cwd, request.sessionDir);\n\n spinner.update(\"Loading resources...\");\n const resourceLoader = new pi.DefaultResourceLoader({\n cwd,\n agentDir,\n settingsManager,\n additionalExtensionPaths: packagedExtensionPaths,\n skillsOverride: ({ skills, diagnostics }) => ({\n skills: skills.filter((skill) => skill.name !== \"docyrus-chrome-devtools-cli\"),\n diagnostics,\n }),\n systemPrompt: join(\n resourceRoot,\n \"prompts\",\n request.profile === \"agent\" ? \"agent-system.md\" : \"coder-system.md\",\n ),\n });\n await resourceLoader.reload();\n\n spinner.update(\"Creating session...\");\n const { session, extensionsResult } = await pi.createAgentSession({\n cwd,\n agentDir,\n authStorage,\n modelRegistry,\n resourceLoader,\n settingsManager,\n sessionManager,\n tools: buildTools(request.profile, cwd, pi),\n model: requestedModel,\n thinkingLevel: request.thinking,\n });\n\n if (hasPackagedMcpAdapter) {\n extensionsResult.runtime.flagValues.set(\"mcp-config\", mcpConfigPath);\n }\n\n await ensureServerSelectableSessionModel({\n session,\n modelRegistry,\n });\n\n spinner.stop();\n\n if (!session.model) {\n process.stderr.write(\n ` ${picocolors.yellow(\"No model configured yet.\")} ` +\n \"Server will start so the client can complete provider login.\\n\",\n );\n }\n\n await createAgentServer({\n session: createServerSessionAdapter({ session, extensionsResult }),\n authToken: request.auth,\n port: request.port,\n sessionManager: {\n list: () => pi.SessionManager.list(cwd, request.sessionDir),\n open: (path: string) => pi.SessionManager.open(path, request.sessionDir),\n },\n modelRegistry: modelRegistry as unknown as {\n getAvailable: () => Array<{ provider: string; id: string }>;\n getAll: () => Array<{ provider: string; id: string; name?: string; reasoning?: boolean; contextWindow?: number; maxTokens?: number }>;\n find: (provider: string, modelId: string) => unknown | undefined;\n refresh: () => void;\n },\n authRuntime: {\n authStorage,\n envStore,\n settingsManager,\n modelsJsonPath,\n },\n context: {\n cwd,\n profile: request.profile,\n agentDir,\n version,\n sessionDir: request.sessionDir ?? null,\n thinkingLevel: request.thinking ?? null,\n },\n onCreateSession: async() => {\n const { session: freshSession, extensionsResult: freshExtensionsResult } = await pi.createAgentSession({\n cwd,\n agentDir,\n authStorage,\n modelRegistry,\n resourceLoader,\n settingsManager,\n sessionManager,\n tools: buildTools(request.profile, cwd, pi),\n model: requestedModel,\n thinkingLevel: request.thinking,\n });\n\n await ensureServerSelectableSessionModel({\n session: freshSession,\n modelRegistry,\n });\n\n return createServerSessionAdapter({\n session: freshSession,\n extensionsResult: freshExtensionsResult,\n });\n },\n onResumeSession: async(sessionId: string) => {\n const sessions = await pi.SessionManager.list(cwd, request.sessionDir);\n const match = sessions.find((s: { id: string }) => s.id === sessionId);\n if (!match) {\n throw new Error(`Session not found: ${sessionId}`);\n }\n\n const resumeCwd = (match as { cwd?: string }).cwd || cwd;\n const resumedSessionManager = pi.SessionManager.open(\n (match as { path: string }).path,\n request.sessionDir,\n );\n\n const { session: resumedSession, extensionsResult: resumedExtensionsResult } = await pi.createAgentSession({\n cwd: resumeCwd,\n agentDir,\n authStorage,\n modelRegistry,\n resourceLoader,\n settingsManager,\n sessionManager: resumedSessionManager,\n tools: buildTools(request.profile, resumeCwd, pi),\n model: requestedModel,\n thinkingLevel: request.thinking,\n });\n\n await ensureServerSelectableSessionModel({\n session: resumedSession,\n modelRegistry,\n });\n\n return createServerSessionAdapter({\n session: resumedSession,\n extensionsResult: resumedExtensionsResult,\n });\n },\n });\n}\n\nvoid main().catch((error: unknown) => {\n const message = error instanceof Error ? error.message : String(error);\n process.stderr.write(`${message}\\n`);\n process.exitCode = 1;\n});\n", "import { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\nexport interface IAgentEnvStoreState {\n version: 1;\n values: Record<string, string>;\n}\n\nfunction createDefaultState(): IAgentEnvStoreState {\n return {\n version: 1,\n values: {},\n };\n}\n\nfunction normalizeState(state: IAgentEnvStoreState): IAgentEnvStoreState {\n const values: Record<string, string> = {};\n for (const [key, value] of Object.entries(state.values || {})) {\n const normalizedKey = key.trim();\n const normalizedValue = value.trim();\n if (!normalizedKey || !normalizedValue) {\n continue;\n }\n values[normalizedKey] = normalizedValue;\n }\n\n return {\n version: 1,\n values,\n };\n}\n\nexport class AgentEnvStore {\n constructor(private readonly filePath: string) {}\n\n getFilePath(): string {\n return this.filePath;\n }\n\n async readState(): Promise<IAgentEnvStoreState> {\n try {\n const raw = await readFile(this.filePath, \"utf8\");\n const parsed = JSON.parse(raw) as IAgentEnvStoreState;\n if (!parsed || parsed.version !== 1 || typeof parsed.values !== \"object\" || parsed.values === null) {\n return createDefaultState();\n }\n\n return normalizeState(parsed);\n }\n catch (error: unknown) {\n if (\n typeof error === \"object\"\n && error !== null\n && \"code\" in error\n && (error as { code?: string }).code === \"ENOENT\"\n ) {\n return createDefaultState();\n }\n\n return createDefaultState();\n }\n }\n\n async writeState(state: IAgentEnvStoreState): Promise<void> {\n const normalized = normalizeState(state);\n const directory = dirname(this.filePath);\n\n await mkdir(directory, {\n recursive: true,\n mode: 0o700,\n });\n\n await writeFile(this.filePath, `${JSON.stringify(normalized, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n\n await chmod(this.filePath, 0o600);\n }\n\n async setMany(values: Record<string, string>): Promise<void> {\n const state = await this.readState();\n await this.writeState({\n version: 1,\n values: {\n ...state.values,\n ...Object.fromEntries(\n Object.entries(values)\n .map(([key, value]) => [key.trim(), value.trim()] as const)\n .filter(([key, value]) => key.length > 0 && value.length > 0),\n ),\n },\n });\n }\n\n async removeMany(keys: string[]): Promise<void> {\n const state = await this.readState();\n const nextValues = { ...state.values };\n\n for (const key of keys) {\n delete nextValues[key];\n }\n\n await this.writeState({\n version: 1,\n values: nextValues,\n });\n }\n\n async hydrateProcessEnv(env: NodeJS.ProcessEnv = process.env): Promise<Record<string, string>> {\n const state = await this.readState();\n for (const [key, value] of Object.entries(state.values)) {\n if (!env[key]) {\n env[key] = value;\n }\n }\n\n return state.values;\n }\n\n async hasAny(keys: string[]): Promise<boolean> {\n const state = await this.readState();\n return keys.some((key) => Boolean(state.values[key] || process.env[key]));\n }\n}\n", "import { existsSync, readdirSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nexport type IPackagedExtensionRuntime = \"server\" | \"terminal\";\n\nconst SERVER_ONLY_PACKAGED_EXTENSION_NAMES = new Set([\"docyrus-web-browser\"]);\n\nfunction isPackagedExtensionEntry(entryName: string, isDirectory: boolean): boolean {\n return isDirectory || entryName.endsWith(\".ts\") || entryName.endsWith(\".js\");\n}\n\nfunction getPackagedExtensionName(entryName: string): string {\n return entryName.replace(/\\.(ts|js)$/u, \"\");\n}\n\nexport function resolvePackagedExtensionPaths(\n resourceRoot: string,\n runtime: IPackagedExtensionRuntime = \"terminal\",\n): string[] {\n const extensionsRoot = join(resourceRoot, \"extensions\");\n if (!existsSync(extensionsRoot)) {\n return [];\n }\n\n return readdirSync(extensionsRoot, {\n withFileTypes: true,\n })\n .filter((entry) => isPackagedExtensionEntry(entry.name, entry.isDirectory()))\n .filter((entry) => runtime === \"server\" || !SERVER_ONLY_PACKAGED_EXTENSION_NAMES.has(getPackagedExtensionName(entry.name)))\n .map((entry) => join(extensionsRoot, entry.name))\n .sort((left, right) => left.localeCompare(right));\n}\n", "import { execFile, spawn, type ChildProcess } from \"node:child_process\";\nimport { createHash, timingSafeEqual } from \"node:crypto\";\nimport { readdir, readFile, writeFile, mkdir, rm, stat, rename } from \"node:fs/promises\";\nimport { basename, join, resolve, relative, sep } from \"node:path\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nimport type { AuthStorage, SettingsManager } from \"@mariozechner/pi-coding-agent\";\nimport { createEventBridge } from \"./eventBridge\";\nimport type { IAgentSessionEvent } from \"./eventBridge\";\nimport {\n createAskUserToolCallId,\n formatAskUserResponsePrompt,\n parseAskUserRequestFromText,\n parseAskUserResponseFromToolOutput,\n type IAskUserRequest,\n type IAskUserResponse,\n} from \"../../resources/pi-agent/shared/askUserProtocol\";\nimport {\n createDocyrusWebBrowserToolCallId,\n formatDocyrusWebBrowserToolResponsePrompt,\n isDocyrusWebBrowserToolName,\n normalizeDocyrusWebBrowserToolRequest,\n parseDocyrusWebBrowserRequestFromText,\n type IDocyrusWebBrowserToolName,\n type IDocyrusWebBrowserToolRequest,\n} from \"../../resources/pi-agent/shared/docyrusWebBrowserProtocol\";\nimport { AgentEnvStore } from \"../agent/envStore\";\nimport {\n applyProviderLogin,\n buildProviderCatalog,\n findProviderOption,\n refreshSessionAfterCredentialChange,\n serializeModels,\n validateProviderLoginInput,\n type IDocyrusThinkingLevel,\n} from \"../agent/authInteractivity\";\nimport { clearProviderConfig } from \"../agent/authFlows\";\nimport { OAuthFlowManager } from \"./oauthFlowManager\";\nimport {\n loadMcpServerConfig,\n loadMcpServerCache,\n getServerProvenance,\n addMcpServer,\n updateMcpServer,\n removeMcpServer,\n validateServerName,\n validateServerEntry,\n detectTransport,\n redactSensitiveFields,\n isServerCacheValid,\n computeServerHash,\n type IServerEntry,\n} from \"./mcpConfigService\";\nimport { listSkills, getSkillDetail } from \"./skillsService\";\nimport { listAllTools } from \"./toolsService\";\n\ninterface IAgentSession {\n id?: string;\n isStreaming: boolean;\n model?: { provider: string; id: string };\n thinkingLevel: IDocyrusThinkingLevel;\n subscribe(listener: (event: IAgentSessionEvent) => void): () => void;\n prompt(text: string): Promise<void>;\n abort(): Promise<void>;\n setModel(model: unknown): Promise<void>;\n setThinkingLevel(level: IDocyrusThinkingLevel): void;\n getAvailableThinkingLevels(): IDocyrusThinkingLevel[];\n supportsThinking(): boolean;\n listCommands(): Array<{ name: string; description?: string }>;\n}\n\ninterface IAgentSessionManager {\n list(): Promise<ISessionInfo[]>;\n open(path: string): IOpenedSession;\n}\n\ninterface ISessionInfo {\n path: string;\n id: string;\n cwd: string;\n name?: string;\n parentSessionPath?: string;\n created: Date;\n modified: Date;\n messageCount: number;\n firstMessage: string;\n}\n\ninterface IOpenedSession {\n getEntries(): unknown[];\n getBranch(fromId?: string): unknown[];\n buildSessionContext(): { messages: unknown[]; thinkingLevel?: string; model?: unknown };\n getSessionName(): string | undefined;\n getSessionId(): string;\n getCwd(): string;\n}\n\ninterface IAgentModelRegistry {\n getAvailable(): Array<{ provider: string; id: string }>;\n getAll(): Array<{ provider: string; id: string; name?: string; reasoning?: boolean; contextWindow?: number; maxTokens?: number }>;\n find(provider: string, modelId: string): unknown | undefined;\n refresh(): void;\n}\n\ninterface IAgentAuthRuntime {\n authStorage: AuthStorage;\n envStore: AgentEnvStore;\n settingsManager: SettingsManager;\n modelsJsonPath: string;\n}\n\ninterface IAgentServerContext {\n cwd: string;\n profile: \"agent\" | \"coder\";\n agentDir: string;\n version: string;\n sessionDir: string | null;\n thinkingLevel: string | null;\n}\n\ninterface IUIMessagePart {\n type: string;\n text?: string;\n toolName?: string;\n toolCallId?: string;\n state?: string;\n input?: unknown;\n output?: unknown;\n errorText?: string;\n}\n\ninterface IUIMessage {\n id: string;\n role: string;\n parts: IUIMessagePart[];\n}\n\nfunction generateMessageId(): string {\n return `msg_${Date.now()}_${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction getLastAssistantMessage(messages: IUIMessage[]): IUIMessage | undefined {\n if (messages.length === 0) {\n return undefined;\n }\n\n const lastMessage = messages[messages.length - 1];\n return lastMessage.role === \"assistant\" ? lastMessage : undefined;\n}\n\nexport function getChatUnavailableReason(params: {\n session: Pick<IAgentSession, \"model\">;\n}): string | null {\n if (params.session.model) {\n return null;\n }\n\n return \"No model configured. Complete provider login or select a model first.\";\n}\n\nexport function extractLastUserText(messages: IUIMessage[]): string | undefined {\n if (messages.length === 0) {\n return undefined;\n }\n\n const lastMessage = messages[messages.length - 1];\n if (lastMessage.role !== \"user\") {\n return undefined;\n }\n\n for (const part of lastMessage.parts) {\n if (part.type === \"text\" && typeof part.text === \"string\") {\n return part.text;\n }\n }\n\n return undefined;\n}\n\nexport function extractAskUserToolResponse(messages: IUIMessage[]): { toolCallId: string; response: IAskUserResponse } | undefined {\n const message = getLastAssistantMessage(messages);\n if (!message) {\n return undefined;\n }\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (\n part.type === \"dynamic-tool\" &&\n part.toolName === \"ask_user\" &&\n part.state === \"output-available\" &&\n typeof part.toolCallId === \"string\"\n ) {\n const response = parseAskUserResponseFromToolOutput(part.output);\n if (response) {\n return {\n toolCallId: part.toolCallId,\n response,\n };\n }\n }\n }\n\n return undefined;\n}\n\nexport interface IDocyrusWebBrowserToolResponse {\n toolCallId: string;\n toolName: IDocyrusWebBrowserToolName;\n output?: unknown;\n errorText?: string;\n isError: boolean;\n}\n\nexport function extractDocyrusWebBrowserToolResponse(\n messages: IUIMessage[],\n): IDocyrusWebBrowserToolResponse | undefined {\n const message = getLastAssistantMessage(messages);\n if (!message) {\n return undefined;\n }\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (\n part.type === \"dynamic-tool\" &&\n isDocyrusWebBrowserToolName(part.toolName) &&\n typeof part.toolCallId === \"string\" &&\n (part.state === \"output-available\" || part.state === \"output-error\")\n ) {\n const errorText = typeof part.errorText === \"string\"\n ? part.errorText\n : typeof part.output === \"string\" && part.state === \"output-error\"\n ? part.output\n : undefined;\n\n return {\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: part.state === \"output-available\" ? part.output : undefined,\n errorText,\n isError: part.state === \"output-error\",\n };\n }\n }\n\n return undefined;\n}\n\nexport function extractDocyrusWebBrowserToolRequest(\n messages: IUIMessage[],\n toolCallId: string,\n): IDocyrusWebBrowserToolRequest | undefined {\n const message = getLastAssistantMessage(messages);\n if (!message) {\n return undefined;\n }\n\n for (let partIndex = message.parts.length - 1; partIndex >= 0; partIndex -= 1) {\n const part = message.parts[partIndex];\n if (\n part.type === \"dynamic-tool\" &&\n isDocyrusWebBrowserToolName(part.toolName) &&\n part.toolCallId === toolCallId\n ) {\n const request = normalizeDocyrusWebBrowserToolRequest({\n tool: part.toolName,\n input: part.input,\n });\n if (request) {\n return request;\n }\n }\n }\n\n return undefined;\n}\n\nexport function normalizeSlashCommands(commands: Array<{ name: string; description?: string }>): Array<{ name: string; description: string | null }> {\n const seen = new Set<string>();\n return commands\n .filter((command) => typeof command.name === \"string\" && command.name.trim().length > 0)\n .sort((left, right) => left.name.localeCompare(right.name))\n .filter((command) => {\n if (seen.has(command.name)) {\n return false;\n }\n seen.add(command.name);\n return true;\n })\n .map((command) => ({\n name: command.name,\n description: command.description?.trim() || null,\n }));\n}\n\nasync function waitForIdle(session: IAgentSession, timeoutMs = 30_000): Promise<void> {\n if (!session.isStreaming) {\n return;\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n unsubscribe();\n reject(new Error(\"Timed out waiting for session to become idle\"));\n }, timeoutMs);\n\n const unsubscribe = session.subscribe((event: IAgentSessionEvent) => {\n if (event.type === \"agent_end\") {\n clearTimeout(timer);\n unsubscribe();\n resolve();\n }\n });\n\n if (!session.isStreaming) {\n clearTimeout(timer);\n unsubscribe();\n resolve();\n }\n });\n}\n\n// -- Session entry \u2192 AI SDK UIMessage converter --\n\ninterface IUIMessageOutput {\n id: string;\n role: \"user\" | \"assistant\";\n parts: Array<Record<string, unknown>>;\n}\n\nexport function convertSessionEntriesToUIMessages(entries: unknown[]): IUIMessageOutput[] {\n const messages: IUIMessageOutput[] = [];\n // Collect tool results keyed by toolCallId for merging into assistant messages\n const toolResults = new Map<string, { output: unknown; isError: boolean }>();\n\n // First pass: index tool results\n for (const entry of entries) {\n const rec = entry as Record<string, unknown>;\n if (rec.type !== \"message\") {continue;}\n const msg = rec.message as Record<string, unknown> | undefined;\n if (!msg || msg.role !== \"toolResult\") {continue;}\n const toolCallId = msg.toolCallId as string;\n if (toolCallId) {\n const content = msg.content;\n const textParts = Array.isArray(content)\n ? (content as Array<Record<string, unknown>>)\n .filter((b) => b.type === \"text\")\n .map((b) => b.text)\n .join(\"\\n\")\n : typeof content === \"string\" ? content : \"\";\n toolResults.set(toolCallId, {\n output: textParts,\n isError: (msg.isError as boolean) ?? false,\n });\n }\n }\n\n // Second pass: build UIMessages from user + assistant entries\n for (const entry of entries) {\n const rec = entry as Record<string, unknown>;\n if (rec.type !== \"message\") {continue;}\n const msg = rec.message as Record<string, unknown> | undefined;\n if (!msg) {continue;}\n const entryId = (rec.id as string) ?? `entry_${messages.length}`;\n\n if (msg.role === \"user\") {\n const content = msg.content;\n let text = \"\";\n if (typeof content === \"string\") {\n text = content;\n } else if (Array.isArray(content)) {\n text = (content as Array<Record<string, unknown>>)\n .filter((b) => b.type === \"text\")\n .map((b) => b.text as string)\n .join(\"\\n\");\n }\n if (text) {\n messages.push({ id: entryId, role: \"user\", parts: [{ type: \"text\", text }] });\n }\n continue;\n }\n\n if (msg.role === \"assistant\") {\n const content = msg.content;\n if (!Array.isArray(content)) {continue;}\n const parts: Array<Record<string, unknown>> = [];\n\n for (const block of content as Array<Record<string, unknown>>) {\n if (block.type === \"text\" && typeof block.text === \"string\") {\n const askUserRequest = parseAskUserRequestFromText(block.text);\n if (askUserRequest) {\n parts.push({\n type: \"dynamic-tool\",\n toolCallId: createAskUserToolCallId(askUserRequest),\n toolName: \"ask_user\",\n state: \"input-available\",\n input: askUserRequest,\n });\n continue;\n }\n\n const docyrusWebBrowserRequest = parseDocyrusWebBrowserRequestFromText(block.text);\n if (docyrusWebBrowserRequest) {\n parts.push({\n type: \"dynamic-tool\",\n toolCallId: createDocyrusWebBrowserToolCallId(docyrusWebBrowserRequest),\n toolName: docyrusWebBrowserRequest.tool,\n state: \"input-available\",\n input: docyrusWebBrowserRequest.input ?? {},\n });\n continue;\n }\n\n parts.push({ type: \"text\", text: block.text });\n } else if (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n parts.push({ type: \"reasoning\", text: block.thinking, state: \"complete\" });\n } else if (block.type === \"toolCall\") {\n const toolCallId = block.id as string;\n const toolName = block.name as string;\n const input = block.arguments ?? {};\n const result = toolResults.get(toolCallId);\n parts.push({\n type: \"dynamic-tool\",\n toolCallId,\n toolName,\n input,\n state: result\n ? (result.isError ? \"output-error\" : \"output-available\")\n : \"input-available\",\n ...(result && !result.isError ? { output: result.output } : {}),\n ...(result && result.isError ? { errorText: String(result.output) } : {}),\n });\n }\n }\n\n if (parts.length > 0) {\n messages.push({ id: entryId, role: \"assistant\", parts });\n }\n }\n }\n\n return messages;\n}\n\nconst FS_IGNORE = new Set([\n \"node_modules\", \".git\", \".next\", \".nuxt\", \"dist\", \"build\",\n \".docyrus\", \".pi\", \"__pycache__\", \".cache\", \"coverage\",\n \".turbo\", \".vercel\", \".output\", \".svelte-kit\",\n]);\n\ninterface ITreeNode {\n name: string;\n path: string;\n type: \"file\" | \"directory\";\n size?: number;\n children?: ITreeNode[];\n}\n\nfunction resolveSafePath(cwd: string, requestPath: string): string {\n const resolved = resolve(cwd, requestPath);\n const normalizedCwd = cwd.endsWith(sep) ? cwd : cwd + sep;\n if (resolved !== cwd && !resolved.startsWith(normalizedCwd)) {\n throw new Error(\"Path escapes working directory\");\n }\n return resolved;\n}\n\nfunction globToRegex(pattern: string): RegExp {\n const escaped = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, \"\\\\$&\")\n .replace(/\\*\\*/g, \"\\0\")\n .replace(/\\*/g, \"[^/]*\")\n .replace(/\\0/g, \".*\")\n .replace(/\\?/g, \"[^/]\");\n return new RegExp(`^${escaped}$`);\n}\n\nasync function buildTree(params: {\n dir: string;\n cwd: string;\n depth: number;\n maxDepth: number;\n maxFiles: number;\n counter: { value: number };\n ignore: Set<string>;\n}): Promise<ITreeNode[]> {\n const { dir, cwd, depth, maxDepth, maxFiles, counter, ignore } = params;\n if (depth >= maxDepth || counter.value >= maxFiles) {\n return [];\n }\n\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return [];\n }\n\n entries.sort((a, b) => {\n const aIsDir = a.isDirectory();\n const bIsDir = b.isDirectory();\n if (aIsDir !== bIsDir) {return aIsDir ? -1 : 1;}\n return a.name.localeCompare(b.name);\n });\n\n const result: ITreeNode[] = [];\n\n for (const entry of entries) {\n if (counter.value >= maxFiles) {break;}\n if (ignore.has(entry.name)) {continue;}\n\n const fullPath = join(dir, entry.name);\n const relativePath = relative(cwd, fullPath);\n\n if (entry.isDirectory()) {\n const children = await buildTree({\n dir: fullPath,\n cwd,\n depth: depth + 1,\n maxDepth,\n maxFiles,\n counter,\n ignore,\n });\n result.push({ name: entry.name, path: relativePath, type: \"directory\", children });\n } else if (entry.isFile()) {\n counter.value++;\n result.push({ name: entry.name, path: relativePath, type: \"file\" });\n }\n }\n\n return result;\n}\n\nasync function walkFiles(params: {\n dir: string;\n cwd: string;\n pattern: RegExp;\n ignore: Set<string>;\n maxResults: number;\n results: string[];\n}): Promise<void> {\n const { dir, cwd, pattern, ignore, maxResults, results } = params;\n if (results.length >= maxResults) {return;}\n\n let entries;\n try {\n entries = await readdir(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (results.length >= maxResults) {break;}\n if (ignore.has(entry.name)) {continue;}\n\n const fullPath = join(dir, entry.name);\n const relativePath = relative(cwd, fullPath);\n\n if (entry.isDirectory()) {\n await walkFiles({ dir: fullPath, cwd, pattern, ignore, maxResults, results });\n } else if (entry.isFile() && pattern.test(relativePath)) {\n results.push(relativePath);\n }\n }\n}\n\nexport async function createAgentServer(params: {\n session: IAgentSession;\n authToken?: string;\n port: number;\n sessionManager: IAgentSessionManager;\n modelRegistry: IAgentModelRegistry;\n authRuntime: IAgentAuthRuntime;\n context: IAgentServerContext;\n onCreateSession: () => Promise<IAgentSession>;\n onResumeSession: (sessionId: string) => Promise<IAgentSession>;\n}): Promise<void> {\n const { port, sessionManager, modelRegistry, authRuntime, context, onCreateSession, onResumeSession, authToken } = params;\n let activeSession = params.session;\n const pendingAskUserRequests = new Map<string, { toolCallId: string; request: IAskUserRequest }>();\n const pendingDocyrusWebBrowserRequests = new Map<string, Map<string, IDocyrusWebBrowserToolRequest>>();\n const oauthFlowManager = new OAuthFlowManager();\n const app = new Hono();\n\n function getModelIdsByProvider(): Record<string, string[]> {\n const values: Record<string, string[]> = {};\n for (const model of modelRegistry.getAll()) {\n if (!values[model.provider]) {\n values[model.provider] = [];\n }\n values[model.provider].push(model.id);\n }\n for (const providerId of Object.keys(values)) {\n values[providerId] = [...new Set(values[providerId])].sort((left, right) => left.localeCompare(right));\n }\n return values;\n }\n\n function getProviderCatalog() {\n return buildProviderCatalog({\n authStorage: authRuntime.authStorage,\n browserProviders: authRuntime.authStorage.getOAuthProviders(),\n apiKeyProviderIds: [...new Set(modelRegistry.getAll().map((model) => model.provider))].sort((left, right) => left.localeCompare(right)),\n modelIdsByProvider: getModelIdsByProvider(),\n });\n }\n\n app.use(\"/*\", cors({ origin: \"*\" }));\n app.use(\"/*\", async(c, next) => {\n const unauthorizedResponse = authorizeServerRequest(c.req.raw, authToken);\n if (unauthorizedResponse) {\n return unauthorizedResponse;\n }\n\n await next();\n });\n\n app.get(\"/api/health\", (c) => {\n return c.json({ ok: true });\n });\n\n app.get(\"/api/status\", (c) => {\n return c.json({\n isStreaming: activeSession.isStreaming,\n model: activeSession.model ? { provider: activeSession.model.provider, id: activeSession.model.id } : null,\n });\n });\n\n app.post(\"/api/chat\", async(c) => {\n const body = await c.req.json<{ messages?: IUIMessage[]; sessionId?: string }>();\n const messages = body.messages ?? [];\n\n // Resume a specific session if requested\n if (body.sessionId) {\n try {\n activeSession = await onResumeSession(body.sessionId);\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n return c.json({ error: `Failed to resume session: ${msg}` }, 400);\n }\n }\n\n const chatUnavailableReason = getChatUnavailableReason({ session: activeSession });\n if (chatUnavailableReason) {\n return c.json({ error: chatUnavailableReason }, 409);\n }\n\n const sessionId = body.sessionId?.trim() || activeSession.id?.trim() || \"active\";\n const askUserResponse = extractAskUserToolResponse(messages);\n const docyrusWebBrowserResponse = extractDocyrusWebBrowserToolResponse(messages);\n const pendingAskUser = pendingAskUserRequests.get(sessionId);\n const pendingDocyrusWebBrowser = pendingDocyrusWebBrowserRequests.get(sessionId);\n const pendingDocyrusWebBrowserRequest = docyrusWebBrowserResponse\n ? pendingDocyrusWebBrowser?.get(docyrusWebBrowserResponse.toolCallId)\n ?? extractDocyrusWebBrowserToolRequest(messages, docyrusWebBrowserResponse.toolCallId)\n : undefined;\n const userMessage = askUserResponse\n ? (pendingAskUser && pendingAskUser.toolCallId === askUserResponse.toolCallId\n ? formatAskUserResponsePrompt(askUserResponse.response)\n : undefined)\n : docyrusWebBrowserResponse\n ? (pendingDocyrusWebBrowserRequest\n ? formatDocyrusWebBrowserToolResponsePrompt({\n tool: docyrusWebBrowserResponse.toolName,\n request: pendingDocyrusWebBrowserRequest.input,\n status: docyrusWebBrowserResponse.isError ? \"error\" : \"success\",\n output: docyrusWebBrowserResponse.output,\n errorText: docyrusWebBrowserResponse.errorText,\n })\n : undefined)\n : extractLastUserText(messages);\n\n if (!userMessage) {\n return c.json({\n error: askUserResponse\n ? \"No matching pending ask_user request found\"\n : docyrusWebBrowserResponse\n ? \"No matching pending docyrus-web-browser request found\"\n : \"No user message found\",\n }, 400);\n }\n\n if (askUserResponse) {\n pendingAskUserRequests.delete(sessionId);\n }\n\n if (docyrusWebBrowserResponse && pendingDocyrusWebBrowser) {\n pendingDocyrusWebBrowser.delete(docyrusWebBrowserResponse.toolCallId);\n if (pendingDocyrusWebBrowser.size === 0) {\n pendingDocyrusWebBrowserRequests.delete(sessionId);\n }\n }\n\n if (activeSession.isStreaming) {\n await activeSession.abort();\n await waitForIdle(activeSession);\n }\n\n const messageId = generateMessageId();\n const encoder = new TextEncoder();\n\n const stream = new ReadableStream({\n start(controller) {\n function writeChunk(chunk: Record<string, unknown>): void {\n controller.enqueue(encoder.encode(`data: ${JSON.stringify(chunk)}\\n\\n`));\n }\n\n writeChunk({ type: \"start\" });\n writeChunk({ type: \"start-step\" });\n\n const bridge = createEventBridge({\n messageId,\n onChunk: writeChunk,\n onAskUser: ({ toolCallId, request }) => {\n pendingAskUserRequests.set(sessionId, { toolCallId, request });\n },\n onDocyrusWebBrowserTool: ({ toolCallId, request }) => {\n const pendingForSession = pendingDocyrusWebBrowserRequests.get(sessionId) ?? new Map<string, IDocyrusWebBrowserToolRequest>();\n pendingForSession.set(toolCallId, request);\n pendingDocyrusWebBrowserRequests.set(sessionId, pendingForSession);\n },\n onDone: () => {\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n controller.close();\n },\n onError: (errorText) => {\n writeChunk({ type: \"error\", errorText });\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n controller.close();\n },\n });\n\n const unsubscribe = activeSession.subscribe((event: IAgentSessionEvent) => {\n bridge.handleEvent(event);\n\n if (event.type === \"agent_end\") {\n unsubscribe();\n }\n });\n\n activeSession.prompt(userMessage)\n .then(() => {\n if (!activeSession.isStreaming) {\n unsubscribe();\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n controller.close();\n }\n })\n .catch((error: unknown) => {\n const errorMessage = error instanceof Error ? error.message : String(error);\n writeChunk({ type: \"error\", errorText: errorMessage });\n writeChunk({ type: \"finish-step\" });\n writeChunk({ type: \"finish\" });\n unsubscribe();\n controller.close();\n });\n },\n });\n\n return c.body(stream, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n \"Connection\": \"keep-alive\",\n \"x-vercel-ai-ui-message-stream\": \"v1\",\n },\n });\n });\n\n app.get(\"/api/sessions\", async(c) => {\n try {\n const sessions = await sessionManager.list();\n const mapped = sessions\n .map((s) => ({\n id: s.id,\n path: s.path,\n cwd: s.cwd,\n name: s.name ?? null,\n parentSessionPath: s.parentSessionPath ?? null,\n created: s.created.toISOString(),\n modified: s.modified.toISOString(),\n messageCount: s.messageCount,\n firstMessage: s.firstMessage,\n }))\n .sort((a, b) => b.modified.localeCompare(a.modified));\n return c.json({ sessions: mapped });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.post(\"/api/sessions\", async(c) => {\n try {\n if (activeSession.isStreaming) {\n await activeSession.abort();\n await waitForIdle(activeSession);\n }\n\n activeSession = await onCreateSession();\n\n const sessionId = activeSession.id?.trim();\n if (!sessionId) {\n return c.json({ error: \"Created session is missing an id\" }, 500);\n }\n\n const sessions = await sessionManager.list();\n const match = sessions.find((session) => session.id === sessionId);\n\n return c.json({\n ok: true,\n sessionId,\n sessionName: match?.name ?? null,\n cwd: match?.cwd ?? context.cwd,\n model: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/sessions/:sessionId/messages\", async(c) => {\n const sessionId = c.req.param(\"sessionId\");\n try {\n const sessions = await sessionManager.list();\n const match = sessions.find((s) => s.id === sessionId);\n if (!match) {\n return c.json({ error: \"Session not found\" }, 404);\n }\n const opened = sessionManager.open(match.path);\n const sessionContext = opened.buildSessionContext();\n const rawEntries = opened.getBranch();\n const messages = convertSessionEntriesToUIMessages(rawEntries);\n return c.json({\n sessionId: opened.getSessionId(),\n sessionName: opened.getSessionName() ?? null,\n cwd: opened.getCwd(),\n model: sessionContext.model ?? null,\n thinkingLevel: sessionContext.thinkingLevel ?? null,\n messages,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/context\", (c) => {\n return c.json({\n cwd: context.cwd,\n profile: context.profile,\n agentDir: context.agentDir,\n version: context.version,\n sessionDir: context.sessionDir,\n thinkingLevel: context.thinkingLevel,\n });\n });\n\n app.get(\"/api/models\", (c) => {\n return c.json({\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n availableThinkingLevels: activeSession.getAvailableThinkingLevels(),\n available: serializeModels({\n models: modelRegistry.getAvailable(),\n authStorage: authRuntime.authStorage,\n }),\n });\n });\n\n app.get(\"/api/slash-commands\", (c) => {\n return c.json({\n commands: normalizeSlashCommands(activeSession.listCommands()),\n });\n });\n\n app.get(\"/api/auth/providers\", (c) => {\n return c.json({\n providers: getProviderCatalog(),\n });\n });\n\n app.post(\"/api/auth/providers/:providerId/login\", async(c) => {\n const providerId = c.req.param(\"providerId\");\n const provider = findProviderOption({\n providerId,\n browserProviders: authRuntime.authStorage.getOAuthProviders(),\n apiKeyProviderIds: [...new Set(modelRegistry.getAll().map((model) => model.provider))],\n });\n\n if (!provider) {\n return c.json({ error: `Unknown provider: ${providerId}` }, 404);\n }\n\n if (provider.flow === \"oauth\") {\n const step = await oauthFlowManager.start({\n authStorage: authRuntime.authStorage,\n providerId,\n usesCallbackServer: authRuntime.authStorage.getOAuthProviders().find((item) => item.id === providerId)?.usesCallbackServer,\n });\n\n return c.json({ step });\n }\n\n const body = await c.req.json<Record<string, unknown>>();\n const validated = validateProviderLoginInput({\n provider,\n modelIdsByProvider: getModelIdsByProvider(),\n value: body,\n });\n if (!validated.ok) {\n return c.json({ error: validated.error }, 400);\n }\n\n try {\n const result = await applyProviderLogin({\n ...authRuntime,\n provider,\n input: validated.value,\n modelIdsByProvider: getModelIdsByProvider(),\n });\n await refreshSessionAfterCredentialChange({\n session: activeSession,\n modelRegistry: modelRegistry as any,\n envStore: authRuntime.envStore,\n preferredProviderId: result.providerId,\n preferredModelId: result.preferredModelId,\n });\n return c.json({\n ok: true,\n providerId,\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/auth/providers/:providerId/oauth/continue\", async(c) => {\n const providerId = c.req.param(\"providerId\");\n const body = await c.req.json<{ stepToken?: string; values?: Record<string, unknown> }>();\n if (!body.stepToken) {\n return c.json({ error: \"Missing required field: stepToken\" }, 400);\n }\n\n try {\n const value = typeof body.values?.value === \"string\" ? body.values.value : undefined;\n const step = await oauthFlowManager.continue({\n stepToken: body.stepToken,\n value,\n });\n\n if (step.type === \"complete\") {\n modelRegistry.refresh();\n await refreshSessionAfterCredentialChange({\n session: activeSession,\n modelRegistry: modelRegistry as any,\n envStore: authRuntime.envStore,\n preferredProviderId: providerId,\n });\n }\n\n return c.json({ step });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/auth/providers/:providerId/logout\", async(c) => {\n const providerId = c.req.param(\"providerId\");\n const provider = findProviderOption({\n providerId,\n browserProviders: authRuntime.authStorage.getOAuthProviders(),\n apiKeyProviderIds: [...new Set(modelRegistry.getAll().map((model) => model.provider))],\n });\n\n if (!provider) {\n return c.json({ error: `Unknown provider: ${providerId}` }, 404);\n }\n\n try {\n if (provider.flow === \"oauth\") {\n authRuntime.authStorage.logout(providerId);\n } else {\n await clearProviderConfig({\n ...authRuntime,\n providerId,\n });\n }\n\n modelRegistry.refresh();\n await refreshSessionAfterCredentialChange({\n session: activeSession,\n modelRegistry: modelRegistry as any,\n envStore: authRuntime.envStore,\n });\n\n return c.json({\n ok: true,\n providerId,\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/models/select\", async(c) => {\n const body = await c.req.json<{ provider?: string; modelId?: string; thinkingLevel?: IDocyrusThinkingLevel }>();\n const provider = body.provider?.trim();\n const modelId = body.modelId?.trim();\n if (!provider || !modelId) {\n return c.json({ error: \"Missing required fields: provider, modelId\" }, 400);\n }\n\n const model = modelRegistry.find(provider, modelId);\n if (!model) {\n return c.json({ error: `Model not found: ${provider}/${modelId}` }, 404);\n }\n\n try {\n await activeSession.setModel(model);\n if (body.thinkingLevel) {\n activeSession.setThinkingLevel(body.thinkingLevel);\n }\n\n return c.json({\n current: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n thinkingLevel: activeSession.thinkingLevel,\n availableThinkingLevels: activeSession.getAvailableThinkingLevels(),\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/sessions/:sessionId/resume\", async(c) => {\n const sessionId = c.req.param(\"sessionId\");\n try {\n if (activeSession.isStreaming) {\n await activeSession.abort();\n await waitForIdle(activeSession);\n }\n activeSession = await onResumeSession(sessionId);\n return c.json({\n ok: true,\n sessionId,\n model: activeSession.model\n ? { provider: activeSession.model.provider, id: activeSession.model.id }\n : null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- Filesystem endpoints --\n\n app.get(\"/api/fs/tree\", async(c) => {\n const requestPath = c.req.query(\"path\") ?? \".\";\n const maxDepth = Math.min(Number(c.req.query(\"depth\") ?? 4), 10);\n const maxFiles = Math.min(Number(c.req.query(\"maxFiles\") ?? 2000), 10_000);\n try {\n const dir = resolveSafePath(context.cwd, requestPath);\n const nodes = await buildTree({\n dir,\n cwd: context.cwd,\n depth: 0,\n maxDepth,\n maxFiles,\n counter: { value: 0 },\n ignore: FS_IGNORE,\n });\n return c.json({ cwd: context.cwd, path: requestPath, tree: nodes });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.get(\"/api/fs/search\", async(c) => {\n const pattern = c.req.query(\"pattern\");\n if (!pattern) {\n return c.json({ error: \"Missing required query parameter: pattern\" }, 400);\n }\n const basePath = c.req.query(\"path\") ?? \".\";\n const maxResults = Math.min(Number(c.req.query(\"maxResults\") ?? 200), 5000);\n try {\n const dir = resolveSafePath(context.cwd, basePath);\n const regex = globToRegex(pattern);\n const results: string[] = [];\n await walkFiles({ dir, cwd: dir, pattern: regex, ignore: FS_IGNORE, maxResults, results });\n return c.json({ pattern, path: basePath, files: results });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.get(\"/api/fs/read\", async(c) => {\n const filePath = c.req.query(\"path\");\n if (!filePath) {\n return c.json({ error: \"Missing required query parameter: path\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, filePath);\n const fileStat = await stat(resolved);\n if (!fileStat.isFile()) {\n return c.json({ error: \"Path is not a file\" }, 400);\n }\n const content = await readFile(resolved, \"utf-8\");\n return c.json({\n path: filePath,\n content,\n size: fileStat.size,\n modified: fileStat.mtime.toISOString(),\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"ENOENT\") ? 404 : 400;\n return c.json({ error: message }, status);\n }\n });\n\n app.post(\"/api/fs/write\", async(c) => {\n const body = await c.req.json<{ path?: string; content?: string }>();\n if (!body.path || typeof body.content !== \"string\") {\n return c.json({ error: \"Missing required fields: path, content\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, body.path);\n await mkdir(join(resolved, \"..\"), { recursive: true });\n await writeFile(resolved, body.content, \"utf-8\");\n const fileStat = await stat(resolved);\n return c.json({ ok: true, path: body.path, size: fileStat.size });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/fs/mkdir\", async(c) => {\n const body = await c.req.json<{ path?: string }>();\n if (!body.path) {\n return c.json({ error: \"Missing required field: path\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, body.path);\n await mkdir(resolved, { recursive: true });\n return c.json({ ok: true, path: body.path });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 400);\n }\n });\n\n app.post(\"/api/fs/rename\", async(c) => {\n const body = await c.req.json<{ from?: string; to?: string }>();\n if (!body.from || !body.to) {\n return c.json({ error: \"Missing required fields: from, to\" }, 400);\n }\n try {\n const resolvedFrom = resolveSafePath(context.cwd, body.from);\n const resolvedTo = resolveSafePath(context.cwd, body.to);\n await mkdir(join(resolvedTo, \"..\"), { recursive: true });\n await rename(resolvedFrom, resolvedTo);\n return c.json({ ok: true, from: body.from, to: body.to });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"ENOENT\") ? 404 : 400;\n return c.json({ error: message }, status);\n }\n });\n\n app.delete(\"/api/fs\", async(c) => {\n const filePath = c.req.query(\"path\");\n if (!filePath) {\n return c.json({ error: \"Missing required query parameter: path\" }, 400);\n }\n try {\n const resolved = resolveSafePath(context.cwd, filePath);\n if (resolved === context.cwd) {\n return c.json({ error: \"Cannot delete working directory\" }, 400);\n }\n const fileStat = await stat(resolved);\n await rm(resolved, { recursive: fileStat.isDirectory() });\n return c.json({ ok: true, path: filePath });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"ENOENT\") ? 404 : 400;\n return c.json({ error: message }, status);\n }\n });\n\n // -- CLI helpers --\n\n const CLI_EXEC = process.env.DOCYRUS_CLI_EXECUTABLE || process.execPath;\n const CLI_ENTRY = process.env.DOCYRUS_CLI_ENTRY\n || resolve(process.argv[1] ? join(process.argv[1], \"..\") : __dirname, \"main.js\");\n const CLI_SCOPE = process.env.DOCYRUS_CLI_SCOPE;\n const CLI_TIMEOUT_MS = 30_000;\n\n function runCliCommand(args: string[]): Promise<{ ok: boolean; data?: unknown; error?: string }> {\n return new Promise((resolveResult) => {\n const scopeArgs = CLI_SCOPE ? [\"--scope\", CLI_SCOPE] : [];\n const proc = spawn(CLI_EXEC, [CLI_ENTRY, ...scopeArgs, ...args, \"--json\"], {\n cwd: context.cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n timeout: CLI_TIMEOUT_MS,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n proc.stdout?.on(\"data\", (chunk: Buffer) => { stdout += chunk.toString(); });\n proc.stderr?.on(\"data\", (chunk: Buffer) => { stderr += chunk.toString(); });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n resolveResult({ ok: false, error: stderr.trim() || `exit code ${code}` });\n return;\n }\n try {\n resolveResult({ ok: true, data: JSON.parse(stdout) });\n } catch {\n resolveResult({ ok: true, data: stdout.trim() });\n }\n });\n\n proc.on(\"error\", (err) => {\n resolveResult({ ok: false, error: err.message });\n });\n });\n }\n\n // -- Dev environment endpoints --\n\n let devProcess: ChildProcess | null = null;\n let devUrl: string | null = null;\n\n const DEV_URL_PATTERN = /https?:\\/\\/(?:localhost|127\\.0\\.0\\.1):\\d+/;\n const DEV_STARTUP_TIMEOUT_MS = 30_000;\n const DEV_PROBE_TIMEOUT_MS = 3_000;\n\n async function probeUrl(url: string): Promise<number | null> {\n try {\n const res = await fetch(url, { signal: AbortSignal.timeout(DEV_PROBE_TIMEOUT_MS) });\n return res.status;\n } catch {\n return null;\n }\n }\n\n async function detectDevPort(cwd: string): Promise<number | null> {\n // 1. package.json \"dev\" script --port flag\n try {\n const pkg = JSON.parse(await readFile(join(cwd, \"package.json\"), \"utf-8\"));\n const devScript: string | undefined = pkg.scripts?.dev;\n if (devScript) {\n const portFlag = devScript.match(/--port\\s+(\\d+)/);\n if (portFlag) {return Number(portFlag[1]);}\n const dashP = devScript.match(/(?:^|\\s)-p\\s+(\\d+)/);\n if (dashP) {return Number(dashP[1]);}\n }\n } catch { /* no package.json */ }\n\n // 2. vite.config.ts / vite.config.js / vite.config.mts\n for (const name of [\"vite.config.ts\", \"vite.config.mts\", \"vite.config.js\"]) {\n try {\n const content = await readFile(join(cwd, name), \"utf-8\");\n const portMatch = content.match(/port\\s*:\\s*(\\d+)/);\n if (portMatch) {return Number(portMatch[1]);}\n } catch { /* not found */ }\n }\n\n // 3. next.config.* \u2014 Next.js defaults to 3000\n for (const name of [\"next.config.ts\", \"next.config.mts\", \"next.config.js\", \"next.config.mjs\"]) {\n try {\n await stat(join(cwd, name));\n return 3000;\n } catch { /* not found */ }\n }\n\n // 4. angular.json \u2014 Angular defaults to 4200\n try {\n await stat(join(cwd, \"angular.json\"));\n return 4200;\n } catch { /* not found */ }\n\n // 5. nuxt.config.* \u2014 Nuxt defaults to 3000\n for (const name of [\"nuxt.config.ts\", \"nuxt.config.js\"]) {\n try {\n await stat(join(cwd, name));\n return 3000;\n } catch { /* not found */ }\n }\n\n return null;\n }\n\n interface IProjectInfo {\n path: string;\n folder: string;\n repo: string | null;\n packageName: string | null;\n packageVersion: string | null;\n }\n\n let cachedProjectInfo: IProjectInfo | null = null;\n\n async function getProjectInfo(): Promise<IProjectInfo> {\n if (cachedProjectInfo) {return cachedProjectInfo;}\n\n const cwd = context.cwd;\n let repo: string | null = null;\n let packageName: string | null = null;\n let packageVersion: string | null = null;\n\n try {\n repo = await new Promise<string>((res, rej) => {\n execFile(\"git\", [\"remote\", \"get-url\", \"origin\"], { cwd }, (err, stdout) => {\n if (err) {return rej(err);}\n const url = stdout.trim();\n const match = url.match(/\\/([^/]+?)(?:\\.git)?$/);\n res(match ? match[1] : url);\n });\n });\n } catch { /* not a git repo or no remote */ }\n\n try {\n const pkg = JSON.parse(await readFile(join(cwd, \"package.json\"), \"utf-8\"));\n packageName = pkg.name ?? null;\n packageVersion = pkg.version ?? null;\n } catch { /* no package.json */ }\n\n cachedProjectInfo = {\n path: cwd,\n folder: basename(cwd),\n repo,\n packageName,\n packageVersion,\n };\n return cachedProjectInfo;\n }\n\n app.get(\"/api/env/status\", async(c) => {\n const [authResult, project] = await Promise.all([\n runCliCommand([\"auth\", \"who\"]),\n getProjectInfo(),\n ]);\n const env = authResult.ok ? authResult.data : null;\n\n // Check managed process first\n if (devProcess && devProcess.exitCode === null && devUrl) {\n const httpStatus = await probeUrl(devUrl);\n return c.json({\n status: httpStatus !== null ? \"running\" : \"starting\",\n url: devUrl,\n managed: true,\n project,\n env,\n ...(httpStatus !== null ? { httpStatus } : {}),\n });\n }\n\n if (devProcess && devProcess.exitCode !== null) {\n const exitCode = devProcess.exitCode;\n devProcess = null;\n const stoppedUrl = devUrl;\n devUrl = null;\n return c.json({ status: \"stopped\", url: stoppedUrl, exitCode, managed: true, project, env });\n }\n\n // Resolve probe target: explicit param > auto-detect from config\n const explicitUrl = c.req.query(\"url\");\n const explicitPort = c.req.query(\"port\");\n let probeTarget: string | null = null;\n\n if (explicitUrl) {\n probeTarget = explicitUrl;\n } else if (explicitPort) {\n probeTarget = `http://localhost:${explicitPort}`;\n } else {\n const detected = await detectDevPort(context.cwd);\n if (detected) {\n probeTarget = `http://localhost:${detected}`;\n }\n }\n\n if (probeTarget) {\n const httpStatus = await probeUrl(probeTarget);\n return c.json({\n status: httpStatus !== null ? \"running\" : \"stopped\",\n url: probeTarget,\n httpStatus: httpStatus ?? undefined,\n managed: false,\n project,\n env,\n });\n }\n\n return c.json({ status: \"stopped\", url: null, managed: false, project, env });\n });\n\n app.post(\"/api/env/serve\", (c) => {\n if (devProcess && devProcess.exitCode === null) {\n return c.json({ status: \"running\", url: devUrl });\n }\n\n devUrl = null;\n\n const proc = spawn(\"pnpm\", [\"dev\"], {\n cwd: context.cwd,\n shell: true,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n\n devProcess = proc;\n\n return new Promise<Response>((resolveResponse) => {\n let stderr = \"\";\n let resolved = false;\n\n function settle(response: Response): void {\n if (resolved) {return;}\n resolved = true;\n resolveResponse(response);\n }\n\n function checkOutput(text: string): void {\n const match = text.match(DEV_URL_PATTERN);\n if (match) {\n devUrl = match[0];\n settle(c.json({ status: \"running\", url: devUrl }));\n }\n }\n\n proc.stdout?.on(\"data\", (chunk: Buffer) => checkOutput(chunk.toString()));\n\n proc.stderr?.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n stderr += text;\n checkOutput(text);\n });\n\n proc.on(\"close\", (code) => {\n settle(c.json({ status: \"error\", error: stderr || `Process exited with code ${code}` }, 500));\n });\n\n proc.on(\"error\", (err) => {\n settle(c.json({ status: \"error\", error: err.message }, 500));\n });\n\n setTimeout(() => {\n settle(c.json({ status: \"error\", error: stderr || \"Timed out waiting for dev server URL\" }, 500));\n }, DEV_STARTUP_TIMEOUT_MS);\n });\n });\n\n app.post(\"/api/env/stop\", (c) => {\n if (!devProcess || devProcess.exitCode !== null) {\n devProcess = null;\n devUrl = null;\n return c.json({ status: \"stopped\" });\n }\n\n const pid = devProcess.pid;\n devProcess.kill(\"SIGTERM\");\n devProcess = null;\n const stoppedUrl = devUrl;\n devUrl = null;\n return c.json({ status: \"stopped\", url: stoppedUrl, pid });\n });\n\n // -- Git endpoints --\n\n function gitExec(args: string[], gitCwd: string): Promise<string> {\n return new Promise((res, rej) => {\n execFile(\"git\", args, { cwd: gitCwd, maxBuffer: 50 * 1024 * 1024 }, (err, stdout) => {\n if (err) {return rej(err);}\n res(stdout);\n });\n });\n }\n\n app.get(\"/api/git/diff\", async(c) => {\n const filterPath = c.req.query(\"path\");\n const cwd = context.cwd;\n\n try {\n // Branch name + HEAD existence check\n let branch: string | undefined;\n let hasHead = true;\n try {\n branch = (await gitExec([\"rev-parse\", \"--abbrev-ref\", \"HEAD\"], cwd)).trim() || undefined;\n } catch {\n hasHead = false;\n }\n\n const diffRef = hasHead ? [\"diff\", \"HEAD\"] : [\"diff\", \"--cached\"];\n\n // Parallel: name-status, untracked files, numstat\n const [nameStatusRaw, untrackedRaw, numstatRaw] = await Promise.all([\n gitExec([...diffRef, \"--name-status\"], cwd).catch(() => \"\"),\n gitExec([\"ls-files\", \"--others\", \"--exclude-standard\"], cwd).catch(() => \"\"),\n gitExec([...diffRef, \"--numstat\"], cwd).catch(() => \"\"),\n ]);\n\n // Parse name-status\n type IGitFileStatus = \"added\" | \"modified\" | \"deleted\" | \"renamed\" | \"copied\" | \"untracked\";\n interface IFileEntry { path: string; status: IGitFileStatus; oldPath?: string }\n const entries: IFileEntry[] = [];\n\n for (const line of nameStatusRaw.split(\"\\n\").filter(Boolean)) {\n const parts = line.split(\"\\t\");\n const code = parts[0];\n if (code.startsWith(\"R\")) {\n entries.push({ path: parts[2], status: \"renamed\", oldPath: parts[1] });\n } else if (code.startsWith(\"C\")) {\n entries.push({ path: parts[2], status: \"copied\", oldPath: parts[1] });\n } else if (code.startsWith(\"M\")) {\n entries.push({ path: parts[1], status: \"modified\" });\n } else if (code.startsWith(\"A\")) {\n entries.push({ path: parts[1], status: \"added\" });\n } else if (code.startsWith(\"D\")) {\n entries.push({ path: parts[1], status: \"deleted\" });\n }\n }\n\n for (const filePath of untrackedRaw.split(\"\\n\").filter(Boolean)) {\n entries.push({ path: filePath, status: \"untracked\" });\n }\n\n // Parse numstat\n interface INumstat { additions: number; deletions: number; isBinary: boolean }\n const numstatMap = new Map<string, INumstat>();\n\n for (const line of numstatRaw.split(\"\\n\").filter(Boolean)) {\n const match = line.match(/^(-|\\d+)\\t(-|\\d+)\\t(.+)$/);\n if (!match) {continue;}\n const isBinary = match[1] === \"-\" && match[2] === \"-\";\n const additions = isBinary ? 0 : Number(match[1]);\n const deletions = isBinary ? 0 : Number(match[2]);\n let filePath = match[3];\n\n // Resolve rename syntax: \"{old => new}/suffix\" or \"old => new\"\n const arrowIdx = filePath.indexOf(\" => \");\n if (arrowIdx !== -1) {\n const braceStart = filePath.indexOf(\"{\");\n if (braceStart !== -1 && braceStart < arrowIdx) {\n const braceEnd = filePath.indexOf(\"}\", arrowIdx);\n if (braceEnd !== -1) {\n const prefix = filePath.slice(0, braceStart);\n const suffix = filePath.slice(braceEnd + 1);\n const newPart = filePath.slice(braceStart + 1, braceEnd).split(\" => \")[1];\n filePath = prefix + newPart + suffix;\n }\n } else {\n filePath = filePath.slice(arrowIdx + 4);\n }\n }\n\n numstatMap.set(filePath, { additions, deletions, isBinary });\n }\n\n // Filter by path\n const filtered = filterPath ? entries.filter(e => e.path === filterPath) : entries;\n\n // Build response with file contents (parallel reads)\n const MAX_CONTENT_SIZE = 1_000_000;\n\n const fileResults = await Promise.all(filtered.map(async(entry) => {\n // Skip binary files from numstat\n const stats = numstatMap.get(entry.path);\n if (stats?.isBinary) {return null;}\n\n let oldContent = \"\";\n let newContent = \"\";\n let truncated = false;\n\n // Old content from HEAD\n if (hasHead && (entry.status === \"modified\" || entry.status === \"deleted\" || entry.status === \"renamed\" || entry.status === \"copied\")) {\n const showPath = entry.oldPath ?? entry.path;\n try {\n oldContent = await gitExec([\"show\", `HEAD:${showPath}`], cwd);\n if (oldContent.length > MAX_CONTENT_SIZE) {\n oldContent = oldContent.slice(0, MAX_CONTENT_SIZE);\n truncated = true;\n }\n } catch { /* not in HEAD */ }\n }\n\n // New content from working tree\n if (entry.status !== \"deleted\") {\n try {\n const resolved = resolve(cwd, entry.path);\n const buf = await readFile(resolved);\n // Skip binary files (NUL byte in first 8KB)\n if (buf.subarray(0, 8192).includes(0)) {return null;}\n newContent = buf.toString(\"utf-8\");\n if (newContent.length > MAX_CONTENT_SIZE) {\n newContent = newContent.slice(0, MAX_CONTENT_SIZE);\n truncated = true;\n }\n } catch { /* file missing */ }\n }\n\n const additions = stats?.additions\n ?? (entry.status === \"untracked\" ? newContent.split(\"\\n\").length : 0);\n const deletions = stats?.deletions ?? 0;\n\n const file: Record<string, unknown> = {\n path: entry.path,\n status: entry.status,\n oldContent,\n newContent,\n additions,\n deletions,\n };\n if (entry.oldPath) {file.oldPath = entry.oldPath;}\n if (truncated) {file.truncated = true;}\n\n return file;\n }));\n\n const files = fileResults.filter((f): f is Record<string, unknown> => f !== null);\n\n return c.json({ files, ...(branch ? { branch } : {}) });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- MCP server endpoints --\n\n app.get(\"/api/mcp/servers\", async(c) => {\n try {\n const [config, cache, provenance] = await Promise.all([\n loadMcpServerConfig(context.agentDir, context.cwd),\n loadMcpServerCache(context.agentDir),\n getServerProvenance(context.agentDir, context.cwd),\n ]);\n\n const servers = Object.entries(config.mcpServers).map(([name, entry]) => {\n const prov = provenance.get(name);\n const serverCache = cache?.servers[name] ?? null;\n return {\n name,\n transport: detectTransport(entry),\n config: redactSensitiveFields(entry),\n provenance: prov?.kind ?? \"user\",\n importSource: prov?.importKind ?? null,\n cache: serverCache\n ? {\n toolCount: serverCache.tools?.length ?? 0,\n resourceCount: serverCache.resources?.length ?? 0,\n cachedAt: new Date(serverCache.cachedAt).toISOString(),\n isValid: isServerCacheValid(serverCache, entry),\n }\n : null,\n };\n });\n\n return c.json({\n servers,\n settings: {\n toolPrefix: config.settings?.toolPrefix ?? \"server\",\n idleTimeout: config.settings?.idleTimeout ?? 10,\n directTools: config.settings?.directTools ?? false,\n },\n imports: config.imports ?? null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/mcp/servers/:serverName\", async(c) => {\n const serverName = c.req.param(\"serverName\");\n try {\n const [config, cache, provenance] = await Promise.all([\n loadMcpServerConfig(context.agentDir, context.cwd),\n loadMcpServerCache(context.agentDir),\n getServerProvenance(context.agentDir, context.cwd),\n ]);\n\n const entry = config.mcpServers[serverName];\n if (!entry) {\n return c.json({ error: `Server \"${serverName}\" not found` }, 404);\n }\n\n const prov = provenance.get(serverName);\n const serverCache = cache?.servers[serverName] ?? null;\n\n return c.json({\n name: serverName,\n transport: detectTransport(entry),\n config: redactSensitiveFields(entry),\n provenance: prov?.kind ?? \"user\",\n tools: serverCache?.tools?.map((t) => ({\n name: t.name,\n description: t.description ?? null,\n inputSchema: t.inputSchema,\n })) ?? [],\n resources: serverCache?.resources?.map((r) => ({\n uri: r.uri,\n name: r.name,\n description: r.description ?? null,\n })) ?? [],\n cache: serverCache\n ? {\n configHash: serverCache.configHash,\n toolCount: serverCache.tools?.length ?? 0,\n resourceCount: serverCache.resources?.length ?? 0,\n cachedAt: new Date(serverCache.cachedAt).toISOString(),\n isValid: isServerCacheValid(serverCache, entry),\n }\n : null,\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.post(\"/api/mcp/servers\", async(c) => {\n try {\n const body = await c.req.json<{ name?: string; config?: unknown }>();\n if (!body.name) {\n return c.json({ error: \"Missing required field: name\" }, 400);\n }\n\n const nameResult = validateServerName(body.name);\n if (!nameResult.ok) {\n return c.json({ error: nameResult.error }, 400);\n }\n\n const entryResult = validateServerEntry(body.config);\n if (!entryResult.ok) {\n return c.json({ error: entryResult.error }, 400);\n }\n\n await addMcpServer(context.agentDir, body.name, entryResult.value);\n return c.json({ ok: true, name: body.name, config: redactSensitiveFields(entryResult.value) });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"already exists\") ? 409 : 500;\n return c.json({ error: message }, status);\n }\n });\n\n app.put(\"/api/mcp/servers/:serverName\", async(c) => {\n const serverName = c.req.param(\"serverName\");\n try {\n // Reject mutations to non-user servers\n const provenance = await getServerProvenance(context.agentDir, context.cwd);\n const prov = provenance.get(serverName);\n if (prov && prov.kind !== \"user\") {\n return c.json({ error: `Cannot modify ${prov.kind} server \"${serverName}\"` }, 403);\n }\n\n const body = await c.req.json<{ config?: unknown }>();\n const entryResult = validateServerEntry(body.config);\n if (!entryResult.ok) {\n return c.json({ error: entryResult.error }, 400);\n }\n\n await updateMcpServer(context.agentDir, serverName, entryResult.value);\n return c.json({ ok: true, name: serverName, config: redactSensitiveFields(entryResult.value) });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"not found\") ? 404 : 500;\n return c.json({ error: message }, status);\n }\n });\n\n app.delete(\"/api/mcp/servers/:serverName\", async(c) => {\n const serverName = c.req.param(\"serverName\");\n try {\n // Reject mutations to non-user servers\n const provenance = await getServerProvenance(context.agentDir, context.cwd);\n const prov = provenance.get(serverName);\n if (prov && prov.kind !== \"user\") {\n return c.json({ error: `Cannot remove ${prov.kind} server \"${serverName}\"` }, 403);\n }\n\n await removeMcpServer(context.agentDir, serverName);\n return c.json({ ok: true, name: serverName });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n const status = message.includes(\"not found\") ? 404 : 500;\n return c.json({ error: message }, status);\n }\n });\n\n // -- Skill endpoints --\n\n app.get(\"/api/skills\", async(c) => {\n try {\n const skills = (await listSkills(context.agentDir))\n .filter((skill) => skill.name !== \"docyrus-chrome-devtools-cli\");\n return c.json({ skills });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n app.get(\"/api/skills/:skillName\", async(c) => {\n const skillName = c.req.param(\"skillName\");\n try {\n if (skillName === \"docyrus-chrome-devtools-cli\") {\n return c.json({ error: `Skill \"${skillName}\" not found` }, 404);\n }\n\n const result = await getSkillDetail(context.agentDir, skillName);\n if (!result) {\n return c.json({ error: `Skill \"${skillName}\" not found` }, 404);\n }\n return c.json({ ...result.skill, content: result.content });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- Tool endpoint --\n\n app.get(\"/api/tools\", async(c) => {\n try {\n const tools = await listAllTools({\n profile: context.profile,\n agentDir: context.agentDir,\n cwd: context.cwd,\n includeDocyrusWebBrowser: true,\n });\n\n const builtInCount = tools.filter((t) => t.source === \"built-in\").length;\n const mcpCount = tools.filter((t) => t.source !== \"built-in\").length;\n\n return c.json({\n tools,\n summary: { builtIn: builtInCount, mcp: mcpCount, total: tools.length },\n });\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n return c.json({ error: message }, 500);\n }\n });\n\n // -- CLI proxy endpoint --\n\n const BOOLEAN_CLI_FLAGS = new Set([\"json\", \"verbose\", \"global\", \"noAuth\", \"expand\", \"i\"]);\n\n function buildCliArgs(pathSegments: string[], query: Record<string, string>, body?: Record<string, unknown>): string[] {\n const args = [...pathSegments, \"--json\"];\n\n for (const [key, value] of Object.entries(query)) {\n if (key === \"json\") {continue;}\n const flag = key.length === 1 ? `-${key}` : `--${key}`;\n if (BOOLEAN_CLI_FLAGS.has(key) || value === \"\" || value === \"true\") {\n args.push(flag);\n } else {\n args.push(flag, value);\n }\n }\n\n if (body) {\n if (body.data !== undefined) {\n args.push(\"--data\", typeof body.data === \"string\" ? body.data : JSON.stringify(body.data));\n }\n if (typeof body.fromFile === \"string\") {\n args.push(\"--from-file\", body.fromFile);\n }\n // Pass remaining body fields as flags\n for (const [key, value] of Object.entries(body)) {\n if (key === \"data\" || key === \"fromFile\") {continue;}\n const flag = key.length === 1 ? `-${key}` : `--${key}`;\n if (typeof value === \"boolean\") {\n if (value) {args.push(flag);}\n } else if (value !== undefined && value !== null) {\n args.push(flag, String(value));\n }\n }\n }\n\n return args;\n }\n\n app.all(\"/api/cli/*\", async(c) => {\n const pathSegments = c.req.path\n .replace(/^\\/api\\/cli\\/?/, \"\")\n .split(\"/\")\n .filter(Boolean);\n\n if (pathSegments.length === 0) {\n return c.json({ error: \"No command specified. Usage: /api/cli/<command>/[subcommand]/[args...]\" }, 400);\n }\n\n const query: Record<string, string> = {};\n for (const [key, value] of Object.entries(c.req.query())) {\n if (typeof value === \"string\") {\n query[key] = value;\n }\n }\n\n let body: Record<string, unknown> | undefined;\n if (c.req.method === \"POST\" || c.req.method === \"PUT\") {\n try {\n body = await c.req.json();\n } catch { /* no body */ }\n }\n\n const cliArgs = buildCliArgs(pathSegments, query, body);\n\n return new Promise<Response>((resolveResponse) => {\n const scopeArgs = CLI_SCOPE ? [\"--scope\", CLI_SCOPE] : [];\n const proc = spawn(CLI_EXEC, [CLI_ENTRY, ...scopeArgs, ...cliArgs], {\n cwd: context.cwd,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n timeout: CLI_TIMEOUT_MS,\n });\n\n let stdout = \"\";\n let stderr = \"\";\n\n proc.stdout?.on(\"data\", (chunk: Buffer) => { stdout += chunk.toString(); });\n proc.stderr?.on(\"data\", (chunk: Buffer) => { stderr += chunk.toString(); });\n\n proc.on(\"close\", (code) => {\n if (code !== 0) {\n resolveResponse(c.json({\n error: stderr.trim() || `Command exited with code ${code}`,\n command: `docyrus ${cliArgs.join(\" \")}`,\n exitCode: code,\n }, 500));\n return;\n }\n\n try {\n const parsed = JSON.parse(stdout);\n resolveResponse(c.json(parsed));\n } catch {\n resolveResponse(c.json({ output: stdout.trim(), command: `docyrus ${cliArgs.join(\" \")}` }));\n }\n });\n\n proc.on(\"error\", (err) => {\n resolveResponse(c.json({ error: err.message, command: `docyrus ${cliArgs.join(\" \")}` }, 500));\n });\n });\n });\n\n const { serve } = await import(\"@hono/node-server\");\n\n const MAX_PORT_RETRIES = 10;\n\n function printBanner(actualPort: number): void {\n process.stderr.write(`\\n Agent server listening on http://localhost:${actualPort}\\n\\n`);\n process.stderr.write(` POST /api/chat \u2014 send chat messages (SSE UIMessage stream)\\n`);\n process.stderr.write(` GET /api/health \u2014 health check\\n`);\n process.stderr.write(` GET /api/status \u2014 session status\\n`);\n process.stderr.write(` GET /api/sessions \u2014 list sessions\\n`);\n process.stderr.write(` POST /api/sessions \u2014 create a new session\\n`);\n process.stderr.write(` GET /api/sessions/:sessionId/messages \u2014 session messages\\n`);\n process.stderr.write(` POST /api/sessions/:sessionId/resume \u2014 resume a session\\n`);\n process.stderr.write(` GET /api/context \u2014 server context\\n`);\n process.stderr.write(` GET /api/models \u2014 available models\\n`);\n process.stderr.write(` GET /api/auth/providers \u2014 auth provider catalog\\n`);\n process.stderr.write(` POST /api/auth/providers/:id/login \u2014 provider login/start login flow\\n`);\n process.stderr.write(` POST /api/auth/providers/:id/oauth/continue \u2014 continue OAuth flow\\n`);\n process.stderr.write(` POST /api/auth/providers/:id/logout \u2014 provider logout\\n`);\n process.stderr.write(` POST /api/models/select \u2014 select model and optional thinking level\\n`);\n process.stderr.write(` GET /api/slash-commands \u2014 slash command list\\n`);\n process.stderr.write(` GET /api/fs/tree \u2014 directory tree\\n`);\n process.stderr.write(` GET /api/fs/search \u2014 search files by glob\\n`);\n process.stderr.write(` GET /api/fs/read \u2014 read file contents\\n`);\n process.stderr.write(` POST /api/fs/write \u2014 write file\\n`);\n process.stderr.write(` POST /api/fs/mkdir \u2014 create directory\\n`);\n process.stderr.write(` POST /api/fs/rename \u2014 rename/move file\\n`);\n process.stderr.write(` DEL /api/fs \u2014 delete file or directory\\n`);\n process.stderr.write(` GET /api/env/status \u2014 dev server status\\n`);\n process.stderr.write(` POST /api/env/serve \u2014 start dev server (pnpm dev)\\n`);\n process.stderr.write(` POST /api/env/stop \u2014 stop dev server\\n`);\n process.stderr.write(` GET /api/git/diff \u2014 uncommitted file diffs\\n`);\n process.stderr.write(` GET /api/mcp/servers \u2014 list MCP servers\\n`);\n process.stderr.write(` GET /api/mcp/servers/:name \u2014 MCP server details\\n`);\n process.stderr.write(` POST /api/mcp/servers \u2014 add MCP server\\n`);\n process.stderr.write(` PUT /api/mcp/servers/:name \u2014 update MCP server\\n`);\n process.stderr.write(` DEL /api/mcp/servers/:name \u2014 remove MCP server\\n`);\n process.stderr.write(` GET /api/skills \u2014 list skills\\n`);\n process.stderr.write(` GET /api/skills/:name \u2014 skill details\\n`);\n process.stderr.write(` GET /api/tools \u2014 list all tools\\n`);\n process.stderr.write(` * /api/cli/** \u2014 proxy any docyrus CLI command\\n\\n`);\n }\n\n for (let attempt = 0; attempt < MAX_PORT_RETRIES; attempt++) {\n const candidatePort = port + attempt;\n try {\n await new Promise<void>((resolveStart, rejectStart) => {\n const server = serve({ fetch: app.fetch, port: candidatePort }, () => {\n printBanner(candidatePort);\n resolveStart();\n });\n\n server.on(\"error\", (err: NodeJS.ErrnoException) => {\n if (err.code === \"EADDRINUSE\") {\n process.stderr.write(` Port ${candidatePort} in use, trying ${candidatePort + 1}...\\n`);\n rejectStart(err);\n } else {\n throw err;\n }\n });\n });\n return; // Server started successfully\n } catch (err: unknown) {\n const isAddrInUse = err instanceof Error && \"code\" in err && (err as NodeJS.ErrnoException).code === \"EADDRINUSE\";\n if (!isAddrInUse || attempt === MAX_PORT_RETRIES - 1) {\n throw new Error(`All ports ${port}\u2013${port + MAX_PORT_RETRIES - 1} are in use`);\n }\n }\n }\n}\n\nexport function extractBearerToken(authorizationHeader: string | null): string | null {\n if (!authorizationHeader) {\n return null;\n }\n\n const trimmed = authorizationHeader.trim();\n const firstSpaceIndex = trimmed.indexOf(\" \");\n if (firstSpaceIndex <= 0) {\n return null;\n }\n\n const scheme = trimmed.slice(0, firstSpaceIndex);\n const token = trimmed.slice(firstSpaceIndex + 1).trim();\n if (scheme.toLowerCase() !== \"bearer\" || token.length === 0) {\n return null;\n }\n\n return token;\n}\n\nfunction hashToken(token: string): Buffer {\n return createHash(\"sha256\").update(token).digest();\n}\n\nexport function isBearerTokenAuthorized(actualToken: string | null, expectedToken?: string): boolean {\n if (!expectedToken) {\n return true;\n }\n\n if (!actualToken) {\n return false;\n }\n\n const actualHash = hashToken(actualToken);\n const expectedHash = hashToken(expectedToken);\n return timingSafeEqual(actualHash, expectedHash);\n}\n\nfunction createUnauthorizedResponse(): Response {\n return new Response(JSON.stringify({ error: \"Unauthorized\" }), {\n status: 401,\n headers: {\n \"Content-Type\": \"application/json\",\n \"WWW-Authenticate\": \"Bearer\",\n },\n });\n}\n\nexport function authorizeServerRequest(request: Request, expectedToken?: string): Response | null {\n if (!expectedToken || request.method === \"OPTIONS\") {\n return null;\n }\n\n const authorizationHeader = request.headers.get(\"Authorization\");\n const token = extractBearerToken(authorizationHeader);\n if (!isBearerTokenAuthorized(token, expectedToken)) {\n return createUnauthorizedResponse();\n }\n\n return null;\n}\n", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n if (/(?:^|\\.)__proto__\\./.test(key)) {\n return;\n }\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n", "// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const hashIndex = url.indexOf(\"#\", i);\n const end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n const path = url.slice(start, end);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63 || charCode === 35) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(\"?\", 8);\n if (keyIndex2 === -1) {\n return void 0;\n }\n if (!url.startsWith(key, keyIndex2 + 1)) {\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode,\n tryDecodeURI\n};\n", "// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n /**\n * `.raw` can get the raw Request object.\n *\n * @see {@link https://hono.dev/docs/api/request#raw}\n *\n * @example\n * ```ts\n * // For Cloudflare Workers\n * app.post('/', async (c) => {\n * const metadata = c.req.raw.cf?.hostMetadata?\n * ...\n * })\n * ```\n */\n raw;\n #validatedData;\n // Short name of validatedData\n #matchResult;\n routeIndex = 0;\n /**\n * `.path` can get the pathname of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#path}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const pathname = c.req.path // `/about/me`\n * })\n * ```\n */\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n this.#validatedData = {};\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n /**\n * `.json()` can parse Request body of type `application/json`\n *\n * @see {@link https://hono.dev/docs/api/request#json}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.json()\n * })\n * ```\n */\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n /**\n * `.text()` can parse Request body of type `text/plain`\n *\n * @see {@link https://hono.dev/docs/api/request#text}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.text()\n * })\n * ```\n */\n text() {\n return this.#cachedBody(\"text\");\n }\n /**\n * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n *\n * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.arrayBuffer()\n * })\n * ```\n */\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n /**\n * Parses the request body as a `Blob`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.blob();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#blob\n */\n blob() {\n return this.#cachedBody(\"blob\");\n }\n /**\n * Parses the request body as `FormData`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.formData();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#formdata\n */\n formData() {\n return this.#cachedBody(\"formData\");\n }\n /**\n * Adds validated data to the request.\n *\n * @param target - The target of the validation.\n * @param data - The validated data to add.\n */\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n /**\n * `.url()` can get the request url strings.\n *\n * @see {@link https://hono.dev/docs/api/request#url}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const url = c.req.url // `http://localhost:8787/about/me`\n * ...\n * })\n * ```\n */\n get url() {\n return this.raw.url;\n }\n /**\n * `.method()` can get the method name of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#method}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const method = c.req.method // `GET`\n * })\n * ```\n */\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n /**\n * `.matchedRoutes()` can return a matched route in the handler\n *\n * @deprecated\n *\n * Use matchedRoutes helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n *\n * @example\n * ```ts\n * app.use('*', async function logger(c, next) {\n * await next()\n * c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n * const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n * console.log(\n * method,\n * ' ',\n * path,\n * ' '.repeat(Math.max(10 - path.length, 0)),\n * name,\n * i === c.req.routeIndex ? '<- respond from here' : ''\n * )\n * })\n * })\n * ```\n */\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n /**\n * `routePath()` can retrieve the path registered within the handler\n *\n * @deprecated\n *\n * Use routePath helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#routepath}\n *\n * @example\n * ```ts\n * app.get('/posts/:id', (c) => {\n * return c.json({ path: c.req.routePath })\n * })\n * ```\n */\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nvar cloneRawRequest = async (req) => {\n if (!req.raw.bodyUsed) {\n return req.raw.clone();\n }\n const cacheKey = Object.keys(req.bodyCache)[0];\n if (!cacheKey) {\n throw new HTTPException(500, {\n message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n });\n }\n const requestInit = {\n body: await req[cacheKey](),\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers: req.header(),\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar createResponseInstance = (body, init) => new Response(body, init);\nvar Context = class {\n #rawRequest;\n #req;\n /**\n * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n *\n * @see {@link https://hono.dev/docs/api/context#env}\n *\n * @example\n * ```ts\n * // Environment object for Cloudflare Workers\n * app.get('*', async c => {\n * const counter = c.env.COUNTER\n * })\n * ```\n */\n env = {};\n #var;\n finalized = false;\n /**\n * `.error` can get the error object from the middleware if the Handler throws an error.\n *\n * @see {@link https://hono.dev/docs/api/context#error}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * await next()\n * if (c.error) {\n * // do something...\n * }\n * })\n * ```\n */\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n /**\n * Creates an instance of the Context class.\n *\n * @param req - The Request object.\n * @param options - Optional configuration options for the context.\n */\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n /**\n * `.req` is the instance of {@link HonoRequest}.\n */\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#event}\n * The FetchEvent associated with the current request.\n *\n * @throws Will throw an error if the context does not have a FetchEvent.\n */\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#executionctx}\n * The ExecutionContext associated with the current request.\n *\n * @throws Will throw an error if the context does not have an ExecutionContext.\n */\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#res}\n * The Response object for the current request.\n */\n get res() {\n return this.#res ||= createResponseInstance(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n /**\n * Sets the Response object for the current request.\n *\n * @param _res - The Response object to set.\n */\n set res(_res) {\n if (this.#res && _res) {\n _res = createResponseInstance(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n /**\n * `.render()` can create a response within a layout.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * return c.render('Hello!')\n * })\n * ```\n */\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n /**\n * Sets the layout for the response.\n *\n * @param layout - The layout to set.\n * @returns The layout function.\n */\n setLayout = (layout) => this.#layout = layout;\n /**\n * Gets the current layout for the response.\n *\n * @returns The current layout function.\n */\n getLayout = () => this.#layout;\n /**\n * `.setRenderer()` can set the layout in the custom middleware.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```tsx\n * app.use('*', async (c, next) => {\n * c.setRenderer((content) => {\n * return c.html(\n * <html>\n * <body>\n * <p>{content}</p>\n * </body>\n * </html>\n * )\n * })\n * await next()\n * })\n * ```\n */\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n /**\n * `.header()` can set headers.\n *\n * @see {@link https://hono.dev/docs/api/context#header}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n *\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = createResponseInstance(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n /**\n * `.set()` can set the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * c.set('message', 'Hono is hot!!')\n * await next()\n * })\n * ```\n */\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n /**\n * `.get()` can use the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * const message = c.get('message')\n * return c.text(`The message is \"${message}\"`)\n * })\n * ```\n */\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n /**\n * `.var` can access the value of a variable.\n *\n * @see {@link https://hono.dev/docs/api/context#var}\n *\n * @example\n * ```ts\n * const result = c.var.client.oneMethod()\n * ```\n */\n // c.var.propName is a read-only\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return createResponseInstance(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n /**\n * `.body()` can return the HTTP response.\n * You can set headers with `.header()` and set HTTP status code with `.status`.\n * This can also be set in `.text()`, `.json()` and so on.\n *\n * @see {@link https://hono.dev/docs/api/context#body}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n * // Set HTTP status code\n * c.status(201)\n *\n * // Return the response body\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n /**\n * `.text()` can render text as `Content-Type:text/plain`.\n *\n * @see {@link https://hono.dev/docs/api/context#text}\n *\n * @example\n * ```ts\n * app.get('/say', (c) => {\n * return c.text('Hello!')\n * })\n * ```\n */\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n /**\n * `.json()` can render JSON as `Content-Type:application/json`.\n *\n * @see {@link https://hono.dev/docs/api/context#json}\n *\n * @example\n * ```ts\n * app.get('/api', (c) => {\n * return c.json({ message: 'Hello!' })\n * })\n * ```\n */\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n /**\n * `.redirect()` can Redirect, default status code is 302.\n *\n * @see {@link https://hono.dev/docs/api/context#redirect}\n *\n * @example\n * ```ts\n * app.get('/redirect', (c) => {\n * return c.redirect('/')\n * })\n * app.get('/redirect-permanently', (c) => {\n * return c.redirect('/', 301)\n * })\n * ```\n */\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n // Multibyes should be encoded\n // eslint-disable-next-line no-control-regex\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n /**\n * `.notFound()` can return the Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/context#notfound}\n *\n * @example\n * ```ts\n * app.get('/notfound', (c) => {\n * return c.notFound()\n * })\n * ```\n */\n notFound = () => {\n this.#notFoundHandler ??= () => createResponseInstance();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n /**\n * `.basePath()` allows base paths to be specified.\n *\n * @see {@link https://hono.dev/docs/api/routing#base-path}\n *\n * @param {string} path - base Path\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * const api = new Hono().basePath('/api')\n * ```\n */\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n /**\n * `.onError()` handles an error and returns a customized Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#error-handling}\n *\n * @param {ErrorHandler} handler - request Handler for error\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.onError((err, c) => {\n * console.error(`${err}`)\n * return c.text('Custom Error Message', 500)\n * })\n * ```\n */\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n /**\n * `.notFound()` allows you to customize a Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#not-found}\n *\n * @param {NotFoundHandler} handler - request handler for not-found\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.notFound((c) => {\n * return c.text('Custom 404 Message', 404)\n * })\n * ```\n */\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n /**\n * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n *\n * @see {@link https://hono.dev/docs/api/hono#mount}\n *\n * @param {string} path - base Path\n * @param {Function} applicationHandler - other Request Handler\n * @param {MountOptions} [options] - options of `.mount()`\n * @returns {Hono} mounted Hono instance\n *\n * @example\n * ```ts\n * import { Router as IttyRouter } from 'itty-router'\n * import { Hono } from 'hono'\n * // Create itty-router application\n * const ittyRouter = IttyRouter()\n * // GET /itty-router/hello\n * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n *\n * const app = new Hono()\n * app.mount('/itty-router', ittyRouter.handle)\n * ```\n *\n * @example\n * ```ts\n * const app = new Hono()\n * // Send the request to another application without modification.\n * app.mount('/app', anotherApp, {\n * replaceRequest: (req) => req,\n * })\n * ```\n */\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar hasChildren = (children) => {\n for (const _ in children) {\n return true;\n }\n return false;\n};\nvar Node = class _Node {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new _Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #pushHandlerSets(handlerSets, node, method, nodeParams, params) {\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n const len = parts.length;\n let partOffsets = null;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n }\n this.#pushHandlerSets(handlerSets, nextNode, method, node.#params);\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n this.#pushHandlerSets(handlerSets, astNode, method, node.#params);\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n if (matcher instanceof RegExp) {\n if (partOffsets === null) {\n partOffsets = new Array(len);\n let offset = path[0] === \"/\" ? 1 : 0;\n for (let p = 0; p < len; p++) {\n partOffsets[p] = offset;\n offset += parts[p].length + 1;\n }\n }\n const restPathString = path.substring(partOffsets[i]);\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n this.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n if (hasChildren(child.#children)) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n this.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n if (child.#children[\"*\"]) {\n this.#pushHandlerSets(\n handlerSets,\n child.#children[\"*\"],\n method,\n params,\n node.#params\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n const shifted = curNodesQueue.shift();\n curNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "// src/middleware/cors/index.ts\nvar cors = (options) => {\n const defaults = {\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\"],\n allowHeaders: [],\n exposeHeaders: []\n };\n const opts = {\n ...defaults,\n ...options\n };\n const findAllowOrigin = ((optsOrigin) => {\n if (typeof optsOrigin === \"string\") {\n if (optsOrigin === \"*\") {\n return () => optsOrigin;\n } else {\n return (origin) => optsOrigin === origin ? origin : null;\n }\n } else if (typeof optsOrigin === \"function\") {\n return optsOrigin;\n } else {\n return (origin) => optsOrigin.includes(origin) ? origin : null;\n }\n })(opts.origin);\n const findAllowMethods = ((optsAllowMethods) => {\n if (typeof optsAllowMethods === \"function\") {\n return optsAllowMethods;\n } else if (Array.isArray(optsAllowMethods)) {\n return () => optsAllowMethods;\n } else {\n return () => [];\n }\n })(opts.allowMethods);\n return async function cors2(c, next) {\n function set(key, value) {\n c.res.headers.set(key, value);\n }\n const allowOrigin = await findAllowOrigin(c.req.header(\"origin\") || \"\", c);\n if (allowOrigin) {\n set(\"Access-Control-Allow-Origin\", allowOrigin);\n }\n if (opts.credentials) {\n set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n if (opts.exposeHeaders?.length) {\n set(\"Access-Control-Expose-Headers\", opts.exposeHeaders.join(\",\"));\n }\n if (c.req.method === \"OPTIONS\") {\n if (opts.origin !== \"*\") {\n set(\"Vary\", \"Origin\");\n }\n if (opts.maxAge != null) {\n set(\"Access-Control-Max-Age\", opts.maxAge.toString());\n }\n const allowMethods = await findAllowMethods(c.req.header(\"origin\") || \"\", c);\n if (allowMethods.length) {\n set(\"Access-Control-Allow-Methods\", allowMethods.join(\",\"));\n }\n let headers = opts.allowHeaders;\n if (!headers?.length) {\n const requestHeaders = c.req.header(\"Access-Control-Request-Headers\");\n if (requestHeaders) {\n headers = requestHeaders.split(/\\s*,\\s*/);\n }\n }\n if (headers?.length) {\n set(\"Access-Control-Allow-Headers\", headers.join(\",\"));\n c.res.headers.append(\"Vary\", \"Access-Control-Request-Headers\");\n }\n c.res.headers.delete(\"Content-Length\");\n c.res.headers.delete(\"Content-Type\");\n return new Response(null, {\n headers: c.res.headers,\n status: 204,\n statusText: \"No Content\"\n });\n }\n await next();\n if (opts.origin !== \"*\") {\n c.header(\"Vary\", \"Origin\", { append: true });\n }\n };\n};\nexport {\n cors\n};\n", "export const ASK_USER_TAG = \"ask_user\";\nexport const ASK_USER_OPEN = `<${ASK_USER_TAG}>`;\nexport const ASK_USER_CLOSE = `</${ASK_USER_TAG}>`;\nexport const ASK_USER_RESPONSE_TAG = \"ask_user_response\";\nexport const ASK_USER_RESPONSE_OPEN = `<${ASK_USER_RESPONSE_TAG}>`;\nexport const ASK_USER_RESPONSE_CLOSE = `</${ASK_USER_RESPONSE_TAG}>`;\n\nexport type IAskUserQuestionType = \"text\" | \"textarea\" | \"boolean\" | \"singleSelect\" | \"multiSelect\";\nexport type IAskUserAnswerValue = string | boolean | string[];\n\nexport interface IAskUserOption {\n\tlabel: string;\n\tvalue: string;\n}\n\nexport interface IAskUserQuestion {\n\tid: string;\n\tlabel: string;\n\tdescription?: string;\n\ttype: IAskUserQuestionType;\n\trequired?: boolean;\n\toptions?: IAskUserOption[];\n\tplaceholder?: string;\n\tdefaultValue?: IAskUserAnswerValue;\n}\n\nexport interface IAskUserRequest {\n\ttitle: string;\n\tmessage: string;\n\tquestions: IAskUserQuestion[];\n}\n\nexport interface IAskUserResponse {\n\taction: \"submit\" | \"cancel\" | \"decline\";\n\tanswers: Record<string, IAskUserAnswerValue>;\n}\n\nfunction hashString(value: string): string {\n let hash = 0;\n for (let index = 0; index < value.length; index += 1) {\n hash = ((hash << 5) - hash) + value.charCodeAt(index);\n hash |= 0;\n }\n return Math.abs(hash).toString(36);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0;\n}\n\nfunction normalizeTrimmedString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nfunction normalizeQuestionType(value: unknown): IAskUserQuestionType | undefined {\n return value === \"text\" ||\n\t\tvalue === \"textarea\" ||\n\t\tvalue === \"boolean\" ||\n\t\tvalue === \"singleSelect\" ||\n\t\tvalue === \"multiSelect\"\n ? value\n : undefined;\n}\n\nfunction normalizeDefaultValue(value: unknown): IAskUserAnswerValue | undefined {\n if (typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n if (Array.isArray(value) && value.every((item) => typeof item === \"string\")) {\n return [...value];\n }\n return undefined;\n}\n\nfunction normalizeOptions(value: unknown): IAskUserOption[] | undefined {\n if (!Array.isArray(value)) {\n return undefined;\n }\n\n const options: IAskUserOption[] = [];\n for (const item of value) {\n if (!isRecord(item) || !isNonEmptyString(item.label) || !isNonEmptyString(item.value)) {\n return undefined;\n }\n options.push({\n label: item.label.trim(),\n value: item.value.trim(),\n });\n }\n\n return options;\n}\n\nexport function normalizeAskUserQuestion(value: unknown): IAskUserQuestion | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const id = normalizeTrimmedString(value.id);\n const label = normalizeTrimmedString(value.label);\n const type = normalizeQuestionType(value.type);\n if (!id || !label || !type) {\n return undefined;\n }\n\n const question: IAskUserQuestion = {\n id,\n label,\n type,\n };\n\n const description = normalizeTrimmedString(value.description);\n if (description) {\n question.description = description;\n }\n\n if (typeof value.required === \"boolean\") {\n question.required = value.required;\n }\n\n const options = normalizeOptions(value.options);\n if (type === \"singleSelect\" || type === \"multiSelect\") {\n if (!options || options.length === 0) {\n return undefined;\n }\n question.options = options;\n }\n\n const placeholder = normalizeTrimmedString(value.placeholder);\n if (placeholder) {\n question.placeholder = placeholder;\n }\n\n const defaultValue = normalizeDefaultValue(value.defaultValue);\n if (defaultValue !== undefined) {\n question.defaultValue = defaultValue;\n }\n\n return question;\n}\n\nexport function normalizeAskUserRequest(value: unknown): IAskUserRequest | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const title = normalizeTrimmedString(value.title);\n const message = normalizeTrimmedString(value.message);\n if (!title || !message || !Array.isArray(value.questions) || value.questions.length === 0) {\n return undefined;\n }\n\n const questions: IAskUserQuestion[] = [];\n for (const question of value.questions) {\n const normalized = normalizeAskUserQuestion(question);\n if (!normalized) {\n return undefined;\n }\n questions.push(normalized);\n }\n\n return {\n title,\n message,\n questions,\n };\n}\n\nexport function normalizeAskUserResponse(value: unknown): IAskUserResponse | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const action = value.action;\n if (action !== \"submit\" && action !== \"cancel\" && action !== \"decline\") {\n return undefined;\n }\n\n const answersRecord = isRecord(value.answers) ? value.answers : {};\n const answers: Record<string, IAskUserAnswerValue> = {};\n for (const [key, answerValue] of Object.entries(answersRecord)) {\n const normalized = normalizeDefaultValue(answerValue);\n if (normalized !== undefined) {\n answers[key] = normalized;\n }\n }\n\n return {\n action,\n answers,\n };\n}\n\nexport function buildAskUserProtocolInstructions(): string {\n return [\n \"When clarification is required, do not ask free-form prose questions.\",\n `Instead, output only a single ${ASK_USER_OPEN}...${ASK_USER_CLOSE} block and nothing else in the assistant message.`,\n \"Inside that block, emit strict JSON with this shape:\",\n '{\"title\":\"...\",\"message\":\"...\",\"questions\":[{\"id\":\"...\",\"label\":\"...\",\"description\":\"...\",\"type\":\"text|textarea|boolean|singleSelect|multiSelect\",\"required\":true,\"options\":[{\"label\":\"...\",\"value\":\"...\"}],\"placeholder\":\"...\",\"defaultValue\":\"...\"}]}',\n \"Use batch questions when possible, keep ids stable, and limit the batch to the minimum needed to continue planning.\",\n ].join(\"\\n\");\n}\n\nexport function serializeAskUserRequest(request: IAskUserRequest): string {\n return `${ASK_USER_OPEN}\\n${JSON.stringify(request, null, 2)}\\n${ASK_USER_CLOSE}`;\n}\n\nexport function createAskUserToolCallId(request: IAskUserRequest): string {\n return `ask_user_${hashString(JSON.stringify(request))}`;\n}\n\nexport function parseAskUserRequestFromText(text: string): IAskUserRequest | undefined {\n const trimmed = text.trim();\n if (!trimmed.startsWith(ASK_USER_OPEN) || !trimmed.endsWith(ASK_USER_CLOSE)) {\n return undefined;\n }\n\n const body = trimmed.slice(ASK_USER_OPEN.length, trimmed.length - ASK_USER_CLOSE.length).trim();\n if (!body) {\n return undefined;\n }\n\n try {\n return normalizeAskUserRequest(JSON.parse(body));\n } catch {\n return undefined;\n }\n}\n\nexport function formatAskUserResponsePrompt(response: IAskUserResponse): string {\n return [\n \"The user submitted structured clarification answers.\",\n \"\",\n `${ASK_USER_RESPONSE_OPEN}`,\n JSON.stringify(response, null, 2),\n `${ASK_USER_RESPONSE_CLOSE}`,\n \"\",\n \"Continue the planning workflow using these answers.\",\n ].join(\"\\n\");\n}\n\nexport function parseAskUserResponseFromToolOutput(output: unknown): IAskUserResponse | undefined {\n return normalizeAskUserResponse(output);\n}\n", "export const DOCYRUS_WEB_BROWSER_EXTENSION_NAME = \"docyrus-web-browser\";\nexport const DOCYRUS_WEB_BROWSER_TAG = \"docyrus_web_browser\";\nexport const DOCYRUS_WEB_BROWSER_OPEN = `<${DOCYRUS_WEB_BROWSER_TAG}>`;\nexport const DOCYRUS_WEB_BROWSER_CLOSE = `</${DOCYRUS_WEB_BROWSER_TAG}>`;\nexport const DOCYRUS_WEB_BROWSER_RESULT_TAG = \"docyrus_web_browser_result\";\nexport const DOCYRUS_WEB_BROWSER_RESULT_OPEN = `<${DOCYRUS_WEB_BROWSER_RESULT_TAG}>`;\nexport const DOCYRUS_WEB_BROWSER_RESULT_CLOSE = `</${DOCYRUS_WEB_BROWSER_RESULT_TAG}>`;\nexport const WEB_PREVIEW_CONTEXT_TOOL = \"web_preview_context\";\nexport const WEB_PREVIEW_PLAYWRIGHT_TOOL = \"web_preview_playwright\";\n\nexport const DOCYRUS_WEB_BROWSER_TOOL_NAMES = [\n WEB_PREVIEW_CONTEXT_TOOL,\n WEB_PREVIEW_PLAYWRIGHT_TOOL,\n] as const;\n\nexport type IDocyrusWebBrowserToolName = typeof DOCYRUS_WEB_BROWSER_TOOL_NAMES[number];\n\nexport interface IDocyrusWebBrowserToolRequest {\n tool: IDocyrusWebBrowserToolName;\n input?: Record<string, unknown>;\n}\n\nexport interface IDocyrusWebBrowserToolResponsePrompt {\n tool: IDocyrusWebBrowserToolName;\n request?: Record<string, unknown>;\n status: \"success\" | \"error\";\n output?: unknown;\n errorText?: string;\n}\n\nexport interface IDocyrusWebBrowserClientToolInfo {\n name: IDocyrusWebBrowserToolName;\n description: string;\n inputSchema?: Record<string, unknown>;\n}\n\nexport const DOCYRUS_WEB_BROWSER_CLIENT_TOOLS: IDocyrusWebBrowserClientToolInfo[] = [\n {\n name: WEB_PREVIEW_CONTEXT_TOOL,\n description:\n \"Inspect the current Docyrus web preview state before automation. Prefer this first when preview availability or bridge state is unknown.\",\n inputSchema: {\n type: \"object\",\n properties: {\n includeSnapshot: { type: \"boolean\" },\n },\n additionalProperties: false,\n },\n },\n {\n name: WEB_PREVIEW_PLAYWRIGHT_TOOL,\n description:\n \"Run Playwright-style actions against the Docyrus web preview. Prefer structured steps over raw scripts.\",\n inputSchema: {\n type: \"object\",\n properties: {\n script: { type: \"string\" },\n steps: {\n type: \"array\",\n items: {\n type: \"object\",\n properties: {\n action: { type: \"string\" },\n selector: { type: \"string\" },\n url: { type: \"string\" },\n value: { type: \"string\" },\n values: {\n type: \"array\",\n items: { type: \"string\" },\n },\n key: { type: \"string\" },\n attribute: { type: \"string\" },\n timeoutMs: { type: \"number\" },\n state: { type: \"string\" },\n },\n additionalProperties: true,\n },\n },\n timeoutMs: { type: \"number\" },\n stopOnError: { type: \"boolean\" },\n },\n additionalProperties: true,\n },\n },\n];\n\nfunction hashString(value: string): string {\n let hash = 0;\n for (let index = 0; index < value.length; index += 1) {\n hash = ((hash << 5) - hash) + value.charCodeAt(index);\n hash |= 0;\n }\n return Math.abs(hash).toString(36);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nexport function isDocyrusWebBrowserToolName(value: unknown): value is IDocyrusWebBrowserToolName {\n return DOCYRUS_WEB_BROWSER_TOOL_NAMES.some((toolName) => toolName === value);\n}\n\nexport function normalizeDocyrusWebBrowserToolRequest(value: unknown): IDocyrusWebBrowserToolRequest | undefined {\n if (!isRecord(value) || !isDocyrusWebBrowserToolName(value.tool)) {\n return undefined;\n }\n\n return {\n tool: value.tool,\n input: isRecord(value.input) ? value.input : undefined,\n };\n}\n\nexport function serializeDocyrusWebBrowserToolRequest(request: IDocyrusWebBrowserToolRequest): string {\n return `${DOCYRUS_WEB_BROWSER_OPEN}\\n${JSON.stringify(request, null, 2)}\\n${DOCYRUS_WEB_BROWSER_CLOSE}`;\n}\n\nexport function createDocyrusWebBrowserToolCallId(request: IDocyrusWebBrowserToolRequest): string {\n return `docyrus_web_browser_${hashString(JSON.stringify(request))}`;\n}\n\nexport function parseDocyrusWebBrowserRequestFromText(text: string): IDocyrusWebBrowserToolRequest | undefined {\n const trimmed = text.trim();\n if (!trimmed.startsWith(DOCYRUS_WEB_BROWSER_OPEN) || !trimmed.endsWith(DOCYRUS_WEB_BROWSER_CLOSE)) {\n return undefined;\n }\n\n const body = trimmed.slice(DOCYRUS_WEB_BROWSER_OPEN.length, trimmed.length - DOCYRUS_WEB_BROWSER_CLOSE.length).trim();\n if (!body) {\n return undefined;\n }\n\n try {\n return normalizeDocyrusWebBrowserToolRequest(JSON.parse(body));\n } catch {\n return undefined;\n }\n}\n\nexport function buildDocyrusWebBrowserProtocolInstructions(): string {\n return [\n \"When you need to inspect or automate the Docyrus web preview in server-backed sessions, use the docyrus-web-browser client tools.\",\n \"Do not use `docyrus chrome` or any visible Chrome DevTools workflow in this environment.\",\n `Instead, output only a single ${DOCYRUS_WEB_BROWSER_OPEN}...${DOCYRUS_WEB_BROWSER_CLOSE} block and nothing else in the assistant message.`,\n \"Inside that block, emit strict JSON with this shape:\",\n \"{\\\"tool\\\":\\\"web_preview_context\\\",\\\"input\\\":{\\\"includeSnapshot\\\":true}}\",\n \"or\",\n \"{\\\"tool\\\":\\\"web_preview_playwright\\\",\\\"input\\\":{\\\"steps\\\":[{\\\"action\\\":\\\"goto\\\",\\\"url\\\":\\\"/login\\\"},{\\\"action\\\":\\\"fill\\\",\\\"selector\\\":\\\"input[name='email']\\\",\\\"value\\\":\\\"demo@example.com\\\"}],\\\"timeoutMs\\\":10000,\\\"stopOnError\\\":true}}\",\n \"Call `web_preview_context` first when preview state is unknown.\",\n \"Prefer `steps` over `script` for `web_preview_playwright`.\",\n \"Supported playwright step actions are: goto, click, dblclick, hover, fill, press, select, check, uncheck, waitForSelector, waitForTimeout, textContent, getAttribute, title, url, snapshot.\",\n \"If the tool reports that the preview is unavailable or blocked by bridge/cross-origin constraints, stop and explain the exact blocker to the user.\",\n ].join(\"\\n\");\n}\n\nexport function formatDocyrusWebBrowserToolResponsePrompt(\n response: IDocyrusWebBrowserToolResponsePrompt,\n): string {\n return [\n \"The docyrus-web-browser client tool returned a result.\",\n \"\",\n `${DOCYRUS_WEB_BROWSER_RESULT_OPEN}`,\n JSON.stringify(response, null, 2),\n `${DOCYRUS_WEB_BROWSER_RESULT_CLOSE}`,\n \"\",\n \"Continue the task using this result. If the tool reported an availability or bridge blocker, explain that blocker exactly and do not claim success.\",\n ].join(\"\\n\");\n}\n", "import {\n createAskUserToolCallId,\n parseAskUserRequestFromText,\n type IAskUserRequest,\n} from \"../../resources/pi-agent/shared/askUserProtocol\";\nimport {\n createDocyrusWebBrowserToolCallId,\n parseDocyrusWebBrowserRequestFromText,\n type IDocyrusWebBrowserToolRequest,\n} from \"../../resources/pi-agent/shared/docyrusWebBrowserProtocol\";\n\ninterface IToolCallState {\n toolCallId: string;\n toolName: string;\n inputJson: string;\n}\n\ninterface ITextBufferState {\n text: string;\n mode: \"pending\" | \"plain\";\n}\n\nexport interface IEventBridgeParams {\n messageId: string;\n onChunk: (chunk: Record<string, unknown>) => void;\n onDone: () => void;\n onError: (errorText: string) => void;\n onAskUser?: (payload: { toolCallId: string; request: IAskUserRequest }) => void;\n onDocyrusWebBrowserTool?: (payload: {\n toolCallId: string;\n request: IDocyrusWebBrowserToolRequest;\n }) => void;\n}\n\nexport interface IAgentSessionEvent {\n type: string;\n assistantMessageEvent?: {\n type: string;\n contentIndex?: number;\n delta?: string;\n partial?: {\n content?: Array<{\n type: string;\n id?: string;\n name?: string;\n [key: string]: unknown;\n }>;\n };\n toolCall?: {\n id: string;\n name: string;\n input: unknown;\n };\n error?: unknown;\n };\n toolCallId?: string;\n toolName?: string;\n result?: unknown;\n isError?: boolean;\n}\n\nexport function createEventBridge(params: IEventBridgeParams) {\n const { messageId, onChunk, onDone, onError, onAskUser, onDocyrusWebBrowserTool } = params;\n const activeToolCalls = new Map<number, IToolCallState>();\n let activeTextBuffer: ITextBufferState | null = null;\n\n function flushBufferedTextToStream(close: boolean): void {\n if (!activeTextBuffer) {\n return;\n }\n\n onChunk({ type: \"text-start\", id: messageId });\n if (activeTextBuffer.text.length > 0) {\n onChunk({ type: \"text-delta\", id: messageId, delta: activeTextBuffer.text });\n }\n if (close) {\n onChunk({ type: \"text-end\", id: messageId });\n activeTextBuffer = null;\n return;\n }\n\n activeTextBuffer = { text: \"\", mode: \"plain\" };\n }\n\n function maybeEmitAskUser(text: string): boolean {\n const request = parseAskUserRequestFromText(text);\n if (!request) {\n return false;\n }\n\n const toolCallId = createAskUserToolCallId(request);\n onAskUser?.({ toolCallId, request });\n onChunk({ type: \"tool-input-start\", toolCallId, toolName: \"ask_user\", dynamic: true, title: request.title });\n onChunk({\n type: \"tool-input-available\",\n toolCallId,\n toolName: \"ask_user\",\n input: request,\n dynamic: true,\n title: request.title,\n });\n return true;\n }\n\n function maybeEmitDocyrusWebBrowserTool(text: string): boolean {\n const request = parseDocyrusWebBrowserRequestFromText(text);\n if (!request) {\n return false;\n }\n\n const toolCallId = createDocyrusWebBrowserToolCallId(request);\n onDocyrusWebBrowserTool?.({ toolCallId, request });\n onChunk({ type: \"tool-input-start\", toolCallId, toolName: request.tool, dynamic: true });\n onChunk({\n type: \"tool-input-available\",\n toolCallId,\n toolName: request.tool,\n input: request.input ?? {},\n dynamic: true,\n });\n return true;\n }\n\n function shouldKeepBufferingDynamicToolText(text: string): boolean {\n const dynamicToolTags = [\"<ask_user>\", \"<docyrus_web_browser>\"];\n return dynamicToolTags.some((tag) => tag.startsWith(text) || text.startsWith(tag));\n }\n\n function handleEvent(event: IAgentSessionEvent): void {\n switch (event.type) {\n case \"message_update\": {\n handleMessageUpdate(event);\n break;\n }\n\n case \"tool_execution_end\": {\n handleToolExecutionEnd(event);\n break;\n }\n\n case \"agent_end\": {\n onDone();\n break;\n }\n }\n }\n\n function handleMessageUpdate(event: IAgentSessionEvent): void {\n const assistantEvent = event.assistantMessageEvent;\n if (!assistantEvent) {\n return;\n }\n\n switch (assistantEvent.type) {\n case \"text_start\": {\n activeTextBuffer = { text: \"\", mode: \"pending\" };\n break;\n }\n\n case \"text_delta\": {\n if (!activeTextBuffer) {\n onChunk({ type: \"text-start\", id: messageId });\n onChunk({ type: \"text-delta\", id: messageId, delta: assistantEvent.delta ?? \"\" });\n activeTextBuffer = { text: \"\", mode: \"plain\" };\n break;\n }\n\n if (activeTextBuffer.mode === \"plain\") {\n onChunk({ type: \"text-delta\", id: messageId, delta: assistantEvent.delta ?? \"\" });\n break;\n }\n\n activeTextBuffer.text += assistantEvent.delta ?? \"\";\n if (shouldKeepBufferingDynamicToolText(activeTextBuffer.text)) {\n break;\n }\n\n flushBufferedTextToStream(false);\n break;\n }\n\n case \"text_end\": {\n if (!activeTextBuffer) {\n onChunk({ type: \"text-end\", id: messageId });\n break;\n }\n\n if (activeTextBuffer.mode === \"plain\") {\n onChunk({ type: \"text-end\", id: messageId });\n activeTextBuffer = null;\n break;\n }\n\n if (!maybeEmitAskUser(activeTextBuffer.text) && !maybeEmitDocyrusWebBrowserTool(activeTextBuffer.text)) {\n flushBufferedTextToStream(true);\n } else {\n activeTextBuffer = null;\n }\n break;\n }\n\n case \"thinking_start\": {\n onChunk({ type: \"reasoning-start\", id: messageId });\n break;\n }\n\n case \"thinking_delta\": {\n onChunk({ type: \"reasoning-delta\", id: messageId, delta: assistantEvent.delta ?? \"\" });\n break;\n }\n\n case \"thinking_end\": {\n onChunk({ type: \"reasoning-end\", id: messageId });\n break;\n }\n\n case \"toolcall_start\": {\n const contentIndex = assistantEvent.contentIndex ?? 0;\n const contentBlock = assistantEvent.partial?.content?.[contentIndex];\n activeToolCalls.set(contentIndex, {\n toolCallId: contentBlock?.id ?? `tool_${contentIndex}`,\n toolName: contentBlock?.name ?? \"unknown\",\n inputJson: \"\",\n });\n break;\n }\n\n case \"toolcall_delta\": {\n const contentIndex = assistantEvent.contentIndex ?? 0;\n const toolState = activeToolCalls.get(contentIndex);\n if (toolState) {\n toolState.inputJson += assistantEvent.delta ?? \"\";\n }\n break;\n }\n\n case \"toolcall_end\": {\n const contentIndex = assistantEvent.contentIndex ?? 0;\n const toolState = activeToolCalls.get(contentIndex);\n if (!toolState) {\n break;\n }\n\n const toolCall = assistantEvent.toolCall;\n const toolCallId = toolCall?.id ?? toolState.toolCallId;\n const toolName = toolCall?.name ?? toolState.toolName;\n\n let parsedInput: unknown = {};\n try {\n if (toolCall?.input !== undefined) {\n parsedInput = toolCall.input;\n } else if (toolState.inputJson.length > 0) {\n parsedInput = JSON.parse(toolState.inputJson);\n }\n } catch {\n parsedInput = {};\n }\n\n onChunk({ type: \"tool-input-start\", toolCallId, toolName });\n onChunk({ type: \"tool-input-available\", toolCallId, toolName, input: parsedInput });\n\n activeToolCalls.delete(contentIndex);\n break;\n }\n\n case \"error\": {\n const errorMessage = assistantEvent.error instanceof Error\n ? assistantEvent.error.message\n : typeof assistantEvent.error === \"string\"\n ? assistantEvent.error\n : \"Unknown agent error\";\n onError(errorMessage);\n break;\n }\n }\n }\n\n function handleToolExecutionEnd(event: IAgentSessionEvent): void {\n const toolCallId = event.toolCallId;\n if (!toolCallId) {\n return;\n }\n\n if (event.isError) {\n const errorText = typeof event.result === \"string\"\n ? event.result\n : JSON.stringify(event.result ?? \"Tool execution failed\");\n onChunk({ type: \"tool-output-error\", toolCallId, errorText });\n } else {\n onChunk({ type: \"tool-output-available\", toolCallId, output: event.result });\n }\n }\n\n return { handleEvent };\n}\n", "import { chmod, mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\n\ntype IJsonValue = string | number | boolean | null | IJsonArray | IJsonObject;\ninterface IJsonObject {\n [key: string]: IJsonValue;\n}\ntype IJsonArray = IJsonValue[];\n\nexport interface IModelsConfigState {\n providers: Record<string, IJsonObject>;\n}\n\nfunction createDefaultState(): IModelsConfigState {\n return {\n providers: {},\n };\n}\n\nexport async function readModelsConfig(filePath: string): Promise<IModelsConfigState> {\n try {\n const raw = await readFile(filePath, \"utf8\");\n const parsed = JSON.parse(raw) as IModelsConfigState;\n if (!parsed || typeof parsed !== \"object\" || typeof parsed.providers !== \"object\" || parsed.providers === null) {\n return createDefaultState();\n }\n\n return {\n providers: { ...parsed.providers },\n };\n }\n catch (error: unknown) {\n if (\n typeof error === \"object\"\n && error !== null\n && \"code\" in error\n && (error as { code?: string }).code === \"ENOENT\"\n ) {\n return createDefaultState();\n }\n\n return createDefaultState();\n }\n}\n\nexport async function writeModelsConfig(filePath: string, state: IModelsConfigState): Promise<void> {\n const directory = dirname(filePath);\n await mkdir(directory, {\n recursive: true,\n mode: 0o700,\n });\n\n await writeFile(filePath, `${JSON.stringify(state, null, 2)}\\n`, {\n encoding: \"utf8\",\n mode: 0o600,\n });\n\n await chmod(filePath, 0o600);\n}\n\nexport async function upsertModelsProvider(filePath: string, providerId: string, providerConfig: IJsonObject): Promise<void> {\n const state = await readModelsConfig(filePath);\n await writeModelsConfig(filePath, {\n providers: {\n ...state.providers,\n [providerId]: providerConfig,\n },\n });\n}\n\nexport async function removeModelsProvider(filePath: string, providerId: string): Promise<void> {\n const state = await readModelsConfig(filePath);\n const nextProviders = { ...state.providers };\n delete nextProviders[providerId];\n\n await writeModelsConfig(filePath, {\n providers: nextProviders,\n });\n}\n\nexport function createCustomOpenAiProviderConfig(params: {\n baseUrl: string;\n modelId: string;\n}): IJsonObject {\n return {\n baseUrl: params.baseUrl,\n apiKey: \"env:CUSTOM_OPENAI_API_KEY\",\n api: \"openai-completions\",\n models: [\n {\n id: params.modelId,\n name: params.modelId,\n reasoning: false,\n input: [\"text\"],\n contextWindow: 128000,\n maxTokens: 16384,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n },\n ],\n };\n}\n\nexport function createAzureProviderConfig(params: {\n baseUrl: string;\n modelId: string;\n useCustomModel: boolean;\n}): IJsonObject {\n const providerConfig: IJsonObject = {\n baseUrl: params.baseUrl,\n apiKey: \"AZURE_OPENAI_API_KEY\",\n };\n\n if (params.useCustomModel) {\n providerConfig.api = \"azure-openai-responses\";\n providerConfig.models = [\n {\n id: params.modelId,\n name: params.modelId,\n reasoning: false,\n input: [\"text\"],\n contextWindow: 128000,\n maxTokens: 16384,\n cost: {\n input: 0,\n output: 0,\n cacheRead: 0,\n cacheWrite: 0,\n },\n },\n ];\n }\n\n return providerConfig;\n}\n", "import type { AuthStorage, SettingsManager } from \"@mariozechner/pi-coding-agent\";\nimport { AgentEnvStore } from \"./envStore\";\nimport {\n createAzureProviderConfig,\n createCustomOpenAiProviderConfig,\n removeModelsProvider,\n upsertModelsProvider,\n} from \"./modelsConfig\";\n\nexport interface IAzureConfigInput {\n apiKey: string;\n baseUrl: string;\n modelId: string;\n deploymentName?: string;\n apiVersion?: string;\n useCustomModel?: boolean;\n}\n\nexport interface ICustomOpenAiConfigInput {\n apiKey: string;\n baseUrl: string;\n modelId: string;\n}\n\nexport interface IBedrockConfigInput {\n region: string;\n modelId: string;\n profile?: string;\n accessKeyId?: string;\n secretAccessKey?: string;\n sessionToken?: string;\n}\n\nexport interface IDocyrusAuthFlowDependencies {\n authStorage: AuthStorage;\n envStore: AgentEnvStore;\n settingsManager: SettingsManager;\n modelsJsonPath: string;\n}\n\nfunction trimOrUndefined(value?: string): string | undefined {\n const trimmed = value?.trim();\n return trimmed && trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizeAzureBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim().replace(/\\/+$/, \"\");\n\n try {\n const url = new URL(trimmed);\n url.search = \"\";\n url.hash = \"\";\n\n if (url.pathname.endsWith(\"/openai/v1\")) {\n url.pathname = url.pathname.slice(0, -3);\n }\n else if (url.pathname.endsWith(\"/openai/responses\")) {\n url.pathname = url.pathname.slice(0, -10);\n }\n\n return url.toString().replace(/\\/+$/, \"\");\n }\n catch {\n return trimmed\n .replace(/\\/openai\\/v1$/i, \"/openai\")\n .replace(/\\/openai\\/responses$/i, \"/openai\");\n }\n}\n\nexport async function saveGenericApiKey(params: IDocyrusAuthFlowDependencies & {\n providerId: string;\n apiKey: string;\n}): Promise<void> {\n params.authStorage.set(params.providerId, {\n type: \"api_key\",\n key: params.apiKey.trim(),\n });\n}\n\nexport async function saveCustomOpenAiConfig(params: IDocyrusAuthFlowDependencies & ICustomOpenAiConfigInput): Promise<void> {\n params.authStorage.set(\"custom-openai\", {\n type: \"api_key\",\n key: params.apiKey.trim(),\n });\n\n await params.envStore.removeMany([\n \"CUSTOM_OPENAI_API_KEY\",\n ]);\n await params.envStore.setMany({\n CUSTOM_OPENAI_API_KEY: params.apiKey.trim(),\n });\n\n await upsertModelsProvider(params.modelsJsonPath, \"custom-openai\", createCustomOpenAiProviderConfig({\n baseUrl: params.baseUrl.trim(),\n modelId: params.modelId.trim(),\n }));\n\n params.settingsManager.setDefaultModelAndProvider(\"custom-openai\", params.modelId.trim());\n}\n\nexport async function saveAzureConfig(params: IDocyrusAuthFlowDependencies & IAzureConfigInput): Promise<void> {\n const modelId = params.modelId.trim();\n const useCustomModel = params.useCustomModel ?? false;\n const normalizedBaseUrl = normalizeAzureBaseUrl(params.baseUrl);\n\n params.authStorage.set(\"azure-openai-responses\", {\n type: \"api_key\",\n key: params.apiKey.trim(),\n });\n\n await params.envStore.removeMany([\n \"AZURE_OPENAI_API_KEY\",\n \"AZURE_OPENAI_API_VERSION\",\n \"AZURE_OPENAI_DEPLOYMENT_NAME_MAP\",\n ]);\n const envValues: Record<string, string> = {\n AZURE_OPENAI_API_KEY: params.apiKey.trim(),\n };\n const trimmedApiVersion = trimOrUndefined(params.apiVersion);\n if (trimmedApiVersion) {\n envValues.AZURE_OPENAI_API_VERSION = trimmedApiVersion;\n }\n\n const trimmedDeploymentName = trimOrUndefined(params.deploymentName);\n if (trimmedDeploymentName && trimmedDeploymentName !== modelId) {\n envValues.AZURE_OPENAI_DEPLOYMENT_NAME_MAP = JSON.stringify({\n [modelId]: trimmedDeploymentName,\n });\n }\n\n await params.envStore.setMany(envValues);\n\n await upsertModelsProvider(params.modelsJsonPath, \"azure-openai-responses\", createAzureProviderConfig({\n baseUrl: normalizedBaseUrl,\n modelId,\n useCustomModel,\n }));\n\n params.settingsManager.setDefaultModelAndProvider(\"azure-openai-responses\", modelId);\n}\n\nexport async function saveBedrockConfig(params: IDocyrusAuthFlowDependencies & IBedrockConfigInput): Promise<void> {\n params.authStorage.set(\"amazon-bedrock\", {\n type: \"api_key\",\n key: \"aws-configured\",\n });\n\n await params.envStore.removeMany([\n \"AWS_PROFILE\",\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_SESSION_TOKEN\",\n \"AWS_REGION\",\n \"AWS_DEFAULT_REGION\",\n \"AWS_BEARER_TOKEN_BEDROCK\",\n ]);\n const envValues: Record<string, string> = {\n AWS_REGION: params.region.trim(),\n AWS_DEFAULT_REGION: params.region.trim(),\n };\n\n const profile = trimOrUndefined(params.profile);\n if (profile) {\n envValues.AWS_PROFILE = profile;\n }\n\n const accessKeyId = trimOrUndefined(params.accessKeyId);\n const secretAccessKey = trimOrUndefined(params.secretAccessKey);\n if (accessKeyId && secretAccessKey) {\n envValues.AWS_ACCESS_KEY_ID = accessKeyId;\n envValues.AWS_SECRET_ACCESS_KEY = secretAccessKey;\n }\n\n const sessionToken = trimOrUndefined(params.sessionToken);\n if (sessionToken) {\n envValues.AWS_SESSION_TOKEN = sessionToken;\n }\n\n await params.envStore.setMany(envValues);\n params.settingsManager.setDefaultModelAndProvider(\"amazon-bedrock\", params.modelId.trim());\n}\n\nexport async function clearProviderConfig(params: IDocyrusAuthFlowDependencies & {\n providerId: string;\n}): Promise<void> {\n params.authStorage.remove(params.providerId);\n\n if (params.providerId === \"custom-openai\") {\n await params.envStore.removeMany([\n \"CUSTOM_OPENAI_API_KEY\",\n ]);\n await removeModelsProvider(params.modelsJsonPath, \"custom-openai\");\n }\n\n if (params.providerId === \"azure-openai-responses\") {\n await params.envStore.removeMany([\n \"AZURE_OPENAI_API_KEY\",\n \"AZURE_OPENAI_API_VERSION\",\n \"AZURE_OPENAI_DEPLOYMENT_NAME_MAP\",\n ]);\n await removeModelsProvider(params.modelsJsonPath, \"azure-openai-responses\");\n }\n\n if (params.providerId === \"amazon-bedrock\") {\n await params.envStore.removeMany([\n \"AWS_PROFILE\",\n \"AWS_ACCESS_KEY_ID\",\n \"AWS_SECRET_ACCESS_KEY\",\n \"AWS_SESSION_TOKEN\",\n \"AWS_REGION\",\n \"AWS_DEFAULT_REGION\",\n \"AWS_BEARER_TOKEN_BEDROCK\",\n ]);\n }\n}\n", "import type { AgentEnvStore } from \"./envStore\";\n\nexport type IDocyrusAuthFlowId = \"oauth\" | \"generic-api-key\" | \"custom-openai\" | \"azure-openai-responses\" | \"amazon-bedrock\";\n\nexport interface IDocyrusProviderOption {\n id: string;\n label: string;\n hint?: string;\n flow: IDocyrusAuthFlowId;\n}\n\nconst OAUTH_ONLY_PROVIDER_IDS = new Set([\n \"github-copilot\",\n \"openai-codex\",\n \"google-gemini-cli\",\n \"google-antigravity\",\n]);\n\nconst PROVIDER_LABELS: Record<string, string> = {\n anthropic: \"Anthropic (Claude)\",\n openai: \"OpenAI\",\n google: \"Google (Gemini)\",\n \"google-vertex\": \"Google Vertex AI\",\n \"azure-openai-responses\": \"Azure OpenAI\",\n \"amazon-bedrock\": \"Amazon Bedrock\",\n xai: \"xAI (Grok)\",\n groq: \"Groq\",\n cerebras: \"Cerebras\",\n openrouter: \"OpenRouter\",\n \"vercel-ai-gateway\": \"Vercel AI Gateway\",\n zai: \"ZAI\",\n mistral: \"Mistral\",\n minimax: \"MiniMax\",\n \"minimax-cn\": \"MiniMax CN\",\n huggingface: \"Hugging Face\",\n opencode: \"OpenCode\",\n \"opencode-go\": \"OpenCode Go\",\n \"kimi-coding\": \"Kimi Coding\",\n \"custom-openai\": \"Custom OpenAI-Compatible\",\n \"google-gemini-cli\": \"Google Gemini CLI\",\n \"google-antigravity\": \"Google Antigravity\",\n \"openai-codex\": \"OpenAI Codex\",\n \"github-copilot\": \"GitHub Copilot\",\n};\n\nconst PROVIDER_HINTS: Record<string, string> = {\n anthropic: \"recommended\",\n \"custom-openai\": \"custom base URL + API key\",\n \"azure-openai-responses\": \"API key + base URL/resource + deployment\",\n \"amazon-bedrock\": \"AWS profile or access key pair\",\n \"openai-codex\": \"browser auth\",\n \"github-copilot\": \"browser auth\",\n \"google-gemini-cli\": \"browser auth\",\n \"google-antigravity\": \"browser auth\",\n};\n\nfunction humanizeProviderId(providerId: string): string {\n return providerId\n .split(\"-\")\n .map((part) => {\n if (!part) {return part;}\n if (part.length <= 3) {return part.toUpperCase();}\n return part[0].toUpperCase() + part.slice(1);\n })\n .join(\" \");\n}\n\nfunction toLabel(providerId: string): string {\n return PROVIDER_LABELS[providerId] || humanizeProviderId(providerId);\n}\n\nfunction toHint(providerId: string): string | undefined {\n return PROVIDER_HINTS[providerId];\n}\n\nfunction compareProviderOptions(a: IDocyrusProviderOption, b: IDocyrusProviderOption): number {\n return a.label.localeCompare(b.label);\n}\n\nexport function getBrowserAuthProviderOptions(oauthProviders: Array<{ id: string; name?: string }>): IDocyrusProviderOption[] {\n return oauthProviders\n .map((provider: { id: string; name?: string }) => ({\n id: provider.id,\n label: provider.name || toLabel(provider.id),\n hint: toHint(provider.id),\n flow: \"oauth\" as const,\n }))\n .sort(compareProviderOptions);\n}\n\nexport function getApiKeyProviderOptions(providerIds: string[]): IDocyrusProviderOption[] {\n const baseProviders: IDocyrusProviderOption[] = providerIds\n .filter((providerId: string) => !OAUTH_ONLY_PROVIDER_IDS.has(providerId))\n .map((providerId: string) => {\n let flow: IDocyrusAuthFlowId = \"generic-api-key\";\n if (providerId === \"azure-openai-responses\") {\n flow = \"azure-openai-responses\";\n }\n else if (providerId === \"amazon-bedrock\") {\n flow = \"amazon-bedrock\";\n }\n\n return {\n id: providerId,\n label: toLabel(providerId),\n hint: toHint(providerId),\n flow,\n } satisfies IDocyrusProviderOption;\n });\n\n baseProviders.push({\n id: \"custom-openai\",\n label: toLabel(\"custom-openai\"),\n hint: toHint(\"custom-openai\"),\n flow: \"custom-openai\",\n });\n\n const deduped = new Map<string, IDocyrusProviderOption>();\n for (const provider of baseProviders) {\n deduped.set(provider.id, provider);\n }\n\n return Array.from(deduped.values()).sort(compareProviderOptions);\n}\n\nexport async function findExistingConfiguredProvider(params: {\n authStorage: {\n hasAuth(providerId: string): boolean;\n };\n envStore: AgentEnvStore;\n knownProviderIds: string[];\n}): Promise<string | null> {\n for (const providerId of params.knownProviderIds) {\n if (params.authStorage.hasAuth(providerId)) {\n return providerId;\n }\n }\n\n const hasBedrock = await params.envStore.hasAny([\"AWS_PROFILE\", \"AWS_ACCESS_KEY_ID\", \"AWS_BEARER_TOKEN_BEDROCK\"]);\n if (hasBedrock) {\n return \"amazon-bedrock\";\n }\n\n return null;\n}\n\nexport function getProviderLabel(providerId: string): string {\n return toLabel(providerId);\n}\n\nexport function getProviderHint(providerId: string): string | undefined {\n return toHint(providerId);\n}\n", "import type { AuthStorage, ModelRegistry, SettingsManager } from \"@mariozechner/pi-coding-agent\";\nimport { AgentEnvStore } from \"./envStore\";\nimport {\n clearProviderConfig,\n saveAzureConfig,\n saveBedrockConfig,\n saveCustomOpenAiConfig,\n saveGenericApiKey,\n type IDocyrusAuthFlowDependencies,\n} from \"./authFlows\";\nimport {\n getApiKeyProviderOptions,\n getBrowserAuthProviderOptions,\n getProviderHint,\n getProviderLabel,\n type IDocyrusProviderOption,\n} from \"./providerCatalog\";\n\nexport type IDocyrusAuthMode = \"oauth\" | \"api-key\";\nexport type IDocyrusFieldComponent = \"text\" | \"password\" | \"select\";\nexport type IDocyrusFieldType = \"string\";\nexport type IDocyrusThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\ninterface IJsonSchemaProperty {\n type: IDocyrusFieldType;\n title: string;\n description?: string;\n enum?: string[];\n default?: string;\n}\n\nexport interface IProviderFieldUiHint {\n component: IDocyrusFieldComponent;\n secret?: boolean;\n multiline?: boolean;\n placeholder?: string;\n options?: Array<{ label: string; value: string }>;\n dependsOn?: {\n field: string;\n equals: string;\n };\n}\n\nexport interface IProviderFormContract {\n inputSchema: {\n type: \"object\";\n properties: Record<string, IJsonSchemaProperty>;\n required: string[];\n };\n uiHints: {\n submitLabel: string;\n order: string[];\n fields: Record<string, IProviderFieldUiHint>;\n };\n}\n\nexport interface IProviderDescriptor {\n id: string;\n label: string;\n hint?: string;\n flow: IDocyrusProviderOption[\"flow\"];\n authMode: IDocyrusAuthMode;\n configured: boolean;\n canLogin: boolean;\n canLogout: boolean;\n inputSchema: IProviderFormContract[\"inputSchema\"] | null;\n uiHints: IProviderFormContract[\"uiHints\"] | null;\n oauth: { usesCallbackServer?: boolean } | null;\n}\n\nexport interface IProviderCatalogParams {\n authStorage: AuthStorage;\n browserProviders: Array<{ id: string; name?: string; usesCallbackServer?: boolean }>;\n apiKeyProviderIds: string[];\n modelIdsByProvider: Record<string, string[]>;\n}\n\nexport interface IProviderFormFieldDescriptor {\n name: string;\n title: string;\n description?: string;\n required?: boolean;\n defaultValue?: string;\n placeholder?: string;\n component: IDocyrusFieldComponent;\n options?: Array<{ label: string; value: string }>;\n dependsOn?: {\n field: string;\n equals: string;\n };\n}\n\nexport interface IValidatedProviderInput {\n [key: string]: string | undefined;\n}\n\nexport interface IModelSelectionSession {\n model?: { provider: string; id: string };\n thinkingLevel: IDocyrusThinkingLevel;\n setModel(model: { provider: string; id: string }): Promise<void>;\n setThinkingLevel(level: IDocyrusThinkingLevel): void;\n}\n\nfunction buildFieldUiHint(field: IProviderFormFieldDescriptor): IProviderFieldUiHint {\n return {\n component: field.component,\n ...(field.component === \"password\" ? { secret: true } : {}),\n ...(field.placeholder ? { placeholder: field.placeholder } : {}),\n ...(field.options ? { options: field.options } : {}),\n ...(field.dependsOn ? { dependsOn: field.dependsOn } : {}),\n };\n}\n\nfunction buildProperty(field: IProviderFormFieldDescriptor): IJsonSchemaProperty {\n return {\n type: \"string\",\n title: field.title,\n ...(field.description ? { description: field.description } : {}),\n ...(field.options ? { enum: field.options.map((option) => option.value) } : {}),\n ...(field.defaultValue ? { default: field.defaultValue } : {}),\n };\n}\n\nfunction toSelectOptions(values: string[]): Array<{ label: string; value: string }> {\n return values.map((value) => ({ label: value, value }));\n}\n\nexport function getProviderFormFields(params: {\n provider: IDocyrusProviderOption;\n modelIdsByProvider: Record<string, string[]>;\n}): IProviderFormFieldDescriptor[] {\n const provider = params.provider;\n switch (provider.flow) {\n case \"custom-openai\":\n return [\n {\n name: \"baseUrl\",\n title: \"Custom OpenAI base URL\",\n required: true,\n component: \"text\",\n placeholder: \"https://my-proxy.example.com/v1\",\n },\n {\n name: \"apiKey\",\n title: `${provider.label} API key`,\n required: true,\n component: \"password\",\n },\n {\n name: \"modelId\",\n title: \"Model ID\",\n required: true,\n component: \"text\",\n placeholder: \"gpt-4o\",\n },\n ];\n\n case \"azure-openai-responses\":\n return [\n {\n name: \"apiKey\",\n title: \"Azure OpenAI API key\",\n required: true,\n component: \"password\",\n },\n {\n name: \"configMode\",\n title: \"Azure OpenAI configuration\",\n required: true,\n defaultValue: \"base-url\",\n component: \"select\",\n options: [\n { label: \"Use a base URL\", value: \"base-url\" },\n { label: \"Use an Azure resource name\", value: \"resource-name\" },\n ],\n },\n {\n name: \"baseUrl\",\n title: \"Azure OpenAI base URL\",\n required: true,\n component: \"text\",\n placeholder: \"https://my-resource.openai.azure.com/openai\",\n dependsOn: { field: \"configMode\", equals: \"base-url\" },\n },\n {\n name: \"resourceName\",\n title: \"Azure resource name\",\n required: true,\n component: \"text\",\n placeholder: \"my-resource\",\n dependsOn: { field: \"configMode\", equals: \"resource-name\" },\n },\n {\n name: \"modelId\",\n title: \"Model ID\",\n required: true,\n component: params.modelIdsByProvider[provider.id]?.length ? \"select\" : \"text\",\n options: params.modelIdsByProvider[provider.id]?.length\n ? toSelectOptions(params.modelIdsByProvider[provider.id]!)\n : undefined,\n defaultValue: params.modelIdsByProvider[provider.id]?.[0] || \"gpt-4.1\",\n },\n {\n name: \"deploymentName\",\n title: \"Deployment name\",\n component: \"text\",\n placeholder: \"gpt-4.1\",\n },\n {\n name: \"apiVersion\",\n title: \"API version\",\n component: \"text\",\n defaultValue: \"2025-04-01-preview\",\n placeholder: \"2025-04-01-preview\",\n },\n ];\n\n case \"amazon-bedrock\":\n return [\n {\n name: \"authMode\",\n title: \"Amazon Bedrock authentication\",\n required: true,\n defaultValue: \"profile\",\n component: \"select\",\n options: [\n { label: \"Use an AWS profile\", value: \"profile\" },\n { label: \"Paste AWS access keys\", value: \"access-keys\" },\n ],\n },\n {\n name: \"profile\",\n title: \"AWS profile name\",\n required: true,\n defaultValue: \"default\",\n component: \"text\",\n placeholder: \"default\",\n dependsOn: { field: \"authMode\", equals: \"profile\" },\n },\n {\n name: \"accessKeyId\",\n title: \"AWS access key ID\",\n required: true,\n component: \"text\",\n dependsOn: { field: \"authMode\", equals: \"access-keys\" },\n },\n {\n name: \"secretAccessKey\",\n title: \"AWS secret access key\",\n required: true,\n component: \"password\",\n dependsOn: { field: \"authMode\", equals: \"access-keys\" },\n },\n {\n name: \"sessionToken\",\n title: \"AWS session token\",\n component: \"password\",\n dependsOn: { field: \"authMode\", equals: \"access-keys\" },\n },\n {\n name: \"region\",\n title: \"AWS region\",\n required: true,\n defaultValue: \"us-east-1\",\n component: \"text\",\n placeholder: \"us-east-1\",\n },\n {\n name: \"modelId\",\n title: \"Bedrock model ID\",\n required: true,\n component: params.modelIdsByProvider[provider.id]?.length ? \"select\" : \"text\",\n options: params.modelIdsByProvider[provider.id]?.length\n ? toSelectOptions(params.modelIdsByProvider[provider.id]!)\n : undefined,\n defaultValue: params.modelIdsByProvider[provider.id]?.[0] || \"anthropic.claude-3-7-sonnet-20250219-v1:0\",\n },\n ];\n\n default:\n return [\n {\n name: \"apiKey\",\n title: `${provider.label} API key`,\n required: true,\n component: \"password\",\n },\n ];\n }\n}\n\nexport function buildProviderFormContract(params: {\n provider: IDocyrusProviderOption;\n modelIdsByProvider: Record<string, string[]>;\n}): IProviderFormContract | null {\n if (params.provider.flow === \"oauth\") {\n return null;\n }\n\n const fields = getProviderFormFields(params);\n const properties = Object.fromEntries(fields.map((field) => [field.name, buildProperty(field)]));\n const required = fields.filter((field) => field.required).map((field) => field.name);\n const fieldHints = Object.fromEntries(fields.map((field) => [field.name, buildFieldUiHint(field)]));\n\n return {\n inputSchema: {\n type: \"object\",\n properties,\n required,\n },\n uiHints: {\n submitLabel: \"Save credentials\",\n order: fields.map((field) => field.name),\n fields: fieldHints,\n },\n };\n}\n\nfunction getOAuthDescriptor(params: IProviderCatalogParams, provider: { id: string; name?: string; usesCallbackServer?: boolean }): IProviderDescriptor {\n return {\n id: provider.id,\n label: provider.name || getProviderLabel(provider.id),\n hint: getProviderHint(provider.id),\n flow: \"oauth\",\n authMode: \"oauth\",\n configured: params.authStorage.hasAuth(provider.id),\n canLogin: true,\n canLogout: params.authStorage.hasAuth(provider.id),\n inputSchema: null,\n uiHints: null,\n oauth: { usesCallbackServer: provider.usesCallbackServer },\n };\n}\n\nfunction getApiKeyDescriptor(params: IProviderCatalogParams, provider: IDocyrusProviderOption): IProviderDescriptor {\n const contract = buildProviderFormContract({\n provider,\n modelIdsByProvider: params.modelIdsByProvider,\n });\n\n return {\n id: provider.id,\n label: provider.label,\n hint: provider.hint,\n flow: provider.flow,\n authMode: \"api-key\",\n configured: params.authStorage.hasAuth(provider.id),\n canLogin: true,\n canLogout: params.authStorage.hasAuth(provider.id),\n inputSchema: contract?.inputSchema ?? null,\n uiHints: contract?.uiHints ?? null,\n oauth: null,\n };\n}\n\nexport function buildProviderCatalog(params: IProviderCatalogParams): IProviderDescriptor[] {\n const oauthProviders = getBrowserAuthProviderOptions(params.browserProviders).map((provider) =>\n getOAuthDescriptor(\n params,\n params.browserProviders.find((item) => item.id === provider.id) ?? { id: provider.id, name: provider.label },\n ),\n );\n const apiKeyProviders = getApiKeyProviderOptions(params.apiKeyProviderIds)\n .map((provider) => getApiKeyDescriptor(params, provider));\n\n return [...oauthProviders, ...apiKeyProviders].sort((left, right) => left.label.localeCompare(right.label));\n}\n\nexport function listProviderOptions(params: {\n browserProviders: Array<{ id: string; name?: string }>;\n apiKeyProviderIds: string[];\n}): IDocyrusProviderOption[] {\n return [\n ...getBrowserAuthProviderOptions(params.browserProviders),\n ...getApiKeyProviderOptions(params.apiKeyProviderIds),\n ].sort((left, right) => left.label.localeCompare(right.label));\n}\n\nexport function findProviderOption(params: {\n providerId: string;\n browserProviders: Array<{ id: string; name?: string }>;\n apiKeyProviderIds: string[];\n}): IDocyrusProviderOption | undefined {\n return listProviderOptions({\n browserProviders: params.browserProviders,\n apiKeyProviderIds: params.apiKeyProviderIds,\n }).find((provider) => provider.id === params.providerId);\n}\n\nfunction trimOrUndefined(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n}\n\nexport function validateProviderLoginInput(params: {\n provider: IDocyrusProviderOption;\n modelIdsByProvider: Record<string, string[]>;\n value: Record<string, unknown>;\n}): { ok: true; value: IValidatedProviderInput } | { ok: false; error: string } {\n const fields = getProviderFormFields({\n provider: params.provider,\n modelIdsByProvider: params.modelIdsByProvider,\n });\n const values: IValidatedProviderInput = {};\n\n for (const field of fields) {\n if (field.dependsOn) {\n const dependsOnValue = values[field.dependsOn.field] ?? trimOrUndefined(params.value[field.dependsOn.field]);\n if (dependsOnValue !== field.dependsOn.equals) {\n continue;\n }\n }\n\n const rawValue = params.value[field.name];\n const normalized = trimOrUndefined(rawValue);\n if (field.required && !normalized) {\n return { ok: false, error: `Missing required field: ${field.name}` };\n }\n\n if (normalized && field.options && !field.options.some((option) => option.value === normalized)) {\n return { ok: false, error: `Invalid value for ${field.name}: ${normalized}` };\n }\n\n if (normalized) {\n values[field.name] = normalized;\n } else if (field.defaultValue) {\n values[field.name] = field.defaultValue;\n }\n }\n\n return { ok: true, value: values };\n}\n\nexport async function applyProviderLogin(params: IDocyrusAuthFlowDependencies & {\n provider: IDocyrusProviderOption;\n input: IValidatedProviderInput;\n modelIdsByProvider: Record<string, string[]>;\n}): Promise<{ providerId: string; preferredModelId?: string }> {\n const provider = params.provider;\n\n switch (provider.flow) {\n case \"custom-openai\": {\n await saveCustomOpenAiConfig({\n ...params,\n apiKey: params.input.apiKey!,\n baseUrl: params.input.baseUrl!,\n modelId: params.input.modelId!,\n });\n return { providerId: provider.id, preferredModelId: params.input.modelId };\n }\n\n case \"azure-openai-responses\": {\n const baseUrl = params.input.baseUrl\n ?? (params.input.resourceName ? `https://${params.input.resourceName}.openai.azure.com/openai` : undefined);\n if (!baseUrl) {\n throw new Error(\"Azure login requires either baseUrl or resourceName.\");\n }\n\n const builtInModelIds = new Set(params.modelIdsByProvider[provider.id] ?? []);\n await saveAzureConfig({\n ...params,\n apiKey: params.input.apiKey!,\n baseUrl,\n modelId: params.input.modelId!,\n deploymentName: params.input.deploymentName,\n apiVersion: params.input.apiVersion,\n useCustomModel: !builtInModelIds.has(params.input.modelId!),\n });\n return { providerId: provider.id, preferredModelId: params.input.modelId };\n }\n\n case \"amazon-bedrock\": {\n const authMode = params.input.authMode ?? \"profile\";\n await saveBedrockConfig({\n ...params,\n region: params.input.region!,\n modelId: params.input.modelId!,\n profile: authMode === \"profile\" ? params.input.profile : undefined,\n accessKeyId: authMode === \"access-keys\" ? params.input.accessKeyId : undefined,\n secretAccessKey: authMode === \"access-keys\" ? params.input.secretAccessKey : undefined,\n sessionToken: authMode === \"access-keys\" ? params.input.sessionToken : undefined,\n });\n return { providerId: provider.id, preferredModelId: params.input.modelId };\n }\n\n default: {\n await saveGenericApiKey({\n ...params,\n providerId: provider.id,\n apiKey: params.input.apiKey!,\n });\n return { providerId: provider.id };\n }\n }\n}\n\nexport async function refreshSessionAfterCredentialChange(params: {\n session: IModelSelectionSession;\n modelRegistry: ModelRegistry;\n envStore?: AgentEnvStore;\n preferredProviderId?: string;\n preferredModelId?: string;\n}): Promise<void> {\n await params.envStore?.hydrateProcessEnv(process.env);\n params.modelRegistry.refresh();\n const availableModels = params.modelRegistry.getAvailable();\n const preferredModel = params.preferredProviderId && params.preferredModelId\n ? availableModels.find((model) => model.provider === params.preferredProviderId && model.id === params.preferredModelId)\n : params.preferredProviderId\n ? availableModels.find((model) => model.provider === params.preferredProviderId)\n : undefined;\n\n if (preferredModel) {\n await params.session.setModel(preferredModel);\n return;\n }\n\n const currentModel = params.session.model;\n const currentModelStillAvailable = currentModel\n ? availableModels.some((model) => model.provider === currentModel.provider && model.id === currentModel.id)\n : false;\n\n if (currentModel && !currentModelStillAvailable) {\n if (preferredModel) {\n await params.session.setModel(preferredModel);\n return;\n }\n\n if (availableModels[0]) {\n await params.session.setModel(availableModels[0]);\n }\n return;\n }\n\n if (!currentModel && preferredModel) {\n await params.session.setModel(preferredModel);\n return;\n }\n\n if (!currentModel && availableModels[0]) {\n await params.session.setModel(availableModels[0]);\n }\n}\n\nexport function serializeModels(params: {\n models: Array<{\n provider: string;\n id: string;\n name?: string;\n reasoning?: boolean;\n contextWindow?: number;\n maxTokens?: number;\n }>;\n authStorage: AuthStorage;\n}): Array<{\n provider: string;\n providerLabel: string;\n id: string;\n name: string;\n reasoning: boolean;\n contextWindow: number | null;\n maxTokens: number | null;\n configured: boolean;\n}> {\n return params.models.map((model) => ({\n provider: model.provider,\n providerLabel: getProviderLabel(model.provider),\n id: model.id,\n name: typeof model.name === \"string\" && model.name.length > 0 ? model.name : model.id,\n reasoning: model.reasoning === true,\n contextWindow: typeof model.contextWindow === \"number\" ? model.contextWindow : null,\n maxTokens: typeof model.maxTokens === \"number\" ? model.maxTokens : null,\n configured: params.authStorage.hasAuth(model.provider),\n }));\n}\n", "import { randomUUID } from \"node:crypto\";\nimport type { AuthStorage } from \"@mariozechner/pi-coding-agent\";\nimport type { OAuthAuthInfo, OAuthPrompt } from \"@mariozechner/pi-ai\";\n\nexport type IOAuthStep =\n | {\n type: \"open-url\";\n stepToken: string;\n providerId: string;\n url: string;\n instructions?: string;\n usesCallbackServer?: boolean;\n pending: boolean;\n }\n | {\n type: \"prompt\" | \"manual-code\";\n stepToken: string;\n providerId: string;\n message: string;\n inputSchema: {\n type: \"object\";\n properties: Record<string, { type: \"string\"; title: string; description?: string; default?: string }>;\n required: string[];\n };\n uiHints: {\n submitLabel: string;\n order: string[];\n fields: Record<string, { component: \"text\"; placeholder?: string }>;\n };\n }\n | {\n type: \"complete\";\n stepToken: string;\n providerId: string;\n }\n | {\n type: \"error\";\n stepToken: string;\n providerId: string;\n error: string;\n };\n\ninterface IDeferredStep {\n resolve: (step: IOAuthStep) => void;\n}\n\ninterface IOAuthFlowState {\n stepToken: string;\n providerId: string;\n usesCallbackServer?: boolean;\n pendingInput:\n | {\n type: \"prompt\" | \"manual-code\";\n resolve: (value: string) => void;\n }\n | undefined;\n currentStep?: IOAuthStep;\n queuedSteps: IOAuthStep[];\n waitingForStep?: IDeferredStep;\n completed: boolean;\n}\n\nfunction normalizeError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction buildPromptStep(params: {\n state: IOAuthFlowState;\n type: \"prompt\" | \"manual-code\";\n prompt: OAuthPrompt;\n}): IOAuthStep {\n return {\n type: params.type,\n stepToken: params.state.stepToken,\n providerId: params.state.providerId,\n message: params.prompt.message,\n inputSchema: {\n type: \"object\",\n properties: {\n value: {\n type: \"string\",\n title: params.type === \"manual-code\" ? \"Verification Code\" : \"Value\",\n ...(params.prompt.placeholder ? { default: params.prompt.placeholder } : {}),\n },\n },\n required: params.prompt.allowEmpty ? [] : [\"value\"],\n },\n uiHints: {\n submitLabel: \"Continue\",\n order: [\"value\"],\n fields: {\n value: {\n component: \"text\",\n ...(params.prompt.placeholder ? { placeholder: params.prompt.placeholder } : {}),\n },\n },\n },\n };\n}\n\nfunction buildAuthStep(params: {\n state: IOAuthFlowState;\n authInfo: OAuthAuthInfo;\n}): IOAuthStep {\n return {\n type: \"open-url\",\n stepToken: params.state.stepToken,\n providerId: params.state.providerId,\n url: params.authInfo.url,\n instructions: params.authInfo.instructions,\n usesCallbackServer: params.state.usesCallbackServer,\n pending: true,\n };\n}\n\nexport class OAuthFlowManager {\n private flows = new Map<string, IOAuthFlowState>();\n\n private emitStep(state: IOAuthFlowState, step: IOAuthStep): void {\n state.currentStep = step;\n if (state.waitingForStep) {\n const waiting = state.waitingForStep;\n state.waitingForStep = undefined;\n waiting.resolve(step);\n return;\n }\n state.queuedSteps.push(step);\n }\n\n private nextStep(state: IOAuthFlowState): Promise<IOAuthStep> {\n const queued = state.queuedSteps.shift();\n if (queued) {\n return Promise.resolve(queued);\n }\n\n if (state.currentStep) {\n return Promise.resolve(state.currentStep);\n }\n\n return new Promise<IOAuthStep>((resolve) => {\n state.waitingForStep = { resolve };\n });\n }\n\n async start(params: {\n authStorage: AuthStorage;\n providerId: string;\n usesCallbackServer?: boolean;\n }): Promise<IOAuthStep> {\n const state: IOAuthFlowState = {\n stepToken: randomUUID(),\n providerId: params.providerId,\n usesCallbackServer: params.usesCallbackServer,\n pendingInput: undefined,\n currentStep: undefined,\n queuedSteps: [],\n completed: false,\n };\n this.flows.set(state.stepToken, state);\n\n void params.authStorage.login(params.providerId, {\n onAuth: (info) => {\n this.emitStep(state, buildAuthStep({ state, authInfo: info }));\n },\n onPrompt: async(prompt) => {\n const step = buildPromptStep({ state, type: \"prompt\", prompt });\n this.emitStep(state, step);\n return await new Promise<string>((resolve) => {\n state.pendingInput = { type: \"prompt\", resolve };\n });\n },\n onManualCodeInput: async() => {\n const step = buildPromptStep({\n state,\n type: \"manual-code\",\n prompt: {\n message: \"Enter the verification code from the provider.\",\n },\n });\n this.emitStep(state, step);\n return await new Promise<string>((resolve) => {\n state.pendingInput = { type: \"manual-code\", resolve };\n });\n },\n onProgress: (_message) => {\n // Reserved for future transport/UI updates.\n },\n })\n .then(() => {\n state.completed = true;\n this.emitStep(state, {\n type: \"complete\",\n stepToken: state.stepToken,\n providerId: state.providerId,\n });\n })\n .catch((error) => {\n state.completed = true;\n this.emitStep(state, {\n type: \"error\",\n stepToken: state.stepToken,\n providerId: state.providerId,\n error: normalizeError(error),\n });\n });\n\n return await this.nextStep(state);\n }\n\n async continue(params: {\n stepToken: string;\n value?: string;\n }): Promise<IOAuthStep> {\n const state = this.flows.get(params.stepToken);\n if (!state) {\n throw new Error(`Unknown OAuth step token: ${params.stepToken}`);\n }\n\n if (state.pendingInput) {\n const nextValue = params.value?.trim();\n state.pendingInput.resolve(nextValue ?? \"\");\n state.pendingInput = undefined;\n state.currentStep = undefined;\n }\n\n const step = await this.nextStep(state);\n if (step.type === \"complete\" || step.type === \"error\") {\n this.flows.delete(state.stepToken);\n }\n return step;\n }\n}\n", "import { createHash } from \"node:crypto\";\nimport { existsSync } from \"node:fs\";\nimport { readFile, writeFile, mkdir, rename } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve, dirname } from \"node:path\";\n\n// -- Types (reimplemented from extension bundle) --\n\nexport type IImportKind =\n | \"cursor\"\n | \"claude-code\"\n | \"claude-desktop\"\n | \"codex\"\n | \"windsurf\"\n | \"vscode\";\n\nexport interface IServerEntry {\n command?: string;\n args?: string[];\n env?: Record<string, string>;\n cwd?: string;\n url?: string;\n headers?: Record<string, string>;\n auth?: \"oauth\" | \"bearer\";\n bearerToken?: string;\n bearerTokenEnv?: string;\n lifecycle?: \"keep-alive\" | \"lazy\" | \"eager\";\n idleTimeout?: number;\n exposeResources?: boolean;\n directTools?: boolean | string[];\n debug?: boolean;\n}\n\nexport interface IMcpSettings {\n toolPrefix?: \"server\" | \"none\" | \"short\";\n idleTimeout?: number;\n directTools?: boolean;\n}\n\nexport interface IMcpConfig {\n mcpServers: Record<string, IServerEntry>;\n imports?: IImportKind[];\n settings?: IMcpSettings;\n}\n\nexport interface IServerProvenance {\n path: string;\n kind: \"user\" | \"project\" | \"import\";\n importKind?: string;\n}\n\nexport interface ICachedTool {\n name: string;\n description?: string;\n inputSchema?: unknown;\n}\n\nexport interface ICachedResource {\n uri: string;\n name: string;\n description?: string;\n}\n\nexport interface IServerCacheEntry {\n configHash: string;\n tools: ICachedTool[];\n resources: ICachedResource[];\n cachedAt: number;\n}\n\nexport interface IMetadataCache {\n version: number;\n servers: Record<string, IServerCacheEntry>;\n}\n\n// -- Path helpers --\n\nconst PROJECT_CONFIG_NAME = \".pi/mcp.json\";\n\nconst IMPORT_PATHS: Record<IImportKind, string> = {\n \"cursor\": join(homedir(), \".cursor\", \"mcp.json\"),\n \"claude-code\": join(homedir(), \".claude\", \"claude_desktop_config.json\"),\n \"claude-desktop\": join(homedir(), \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\"),\n \"codex\": join(homedir(), \".codex\", \"config.json\"),\n \"windsurf\": join(homedir(), \".windsurf\", \"mcp.json\"),\n \"vscode\": \".vscode/mcp.json\",\n};\n\nexport function getMcpConfigPath(agentDir: string): string {\n return join(agentDir, \"mcp.json\");\n}\n\nexport function getMcpCachePath(agentDir: string): string {\n return join(agentDir, \"mcp-cache.json\");\n}\n\n// -- Validation --\n\nconst SERVER_NAME_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9_-]*$/;\n\nexport function validateServerName(name: string): { ok: true } | { ok: false; error: string } {\n if (!name || typeof name !== \"string\") {\n return { ok: false, error: \"Server name is required\" };\n }\n if (!SERVER_NAME_REGEX.test(name)) {\n return { ok: false, error: \"Server name must start with alphanumeric and contain only alphanumeric, hyphens, and underscores\" };\n }\n return { ok: true };\n}\n\nexport function validateServerEntry(entry: unknown): { ok: true; value: IServerEntry } | { ok: false; error: string } {\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n return { ok: false, error: \"Server entry must be an object\" };\n }\n\n const obj = entry as Record<string, unknown>;\n\n const hasCommand = typeof obj.command === \"string\" && obj.command.length > 0;\n const hasUrl = typeof obj.url === \"string\" && obj.url.length > 0;\n\n if (!hasCommand && !hasUrl) {\n return { ok: false, error: \"Server entry must have either 'command' (stdio) or 'url' (http)\" };\n }\n\n if (obj.lifecycle !== undefined) {\n if (![\"keep-alive\", \"lazy\", \"eager\"].includes(obj.lifecycle as string)) {\n return { ok: false, error: \"lifecycle must be 'keep-alive', 'lazy', or 'eager'\" };\n }\n }\n\n if (obj.auth !== undefined) {\n if (![\"oauth\", \"bearer\"].includes(obj.auth as string)) {\n return { ok: false, error: \"auth must be 'oauth' or 'bearer'\" };\n }\n }\n\n if (obj.args !== undefined) {\n if (!Array.isArray(obj.args) || !obj.args.every((a: unknown) => typeof a === \"string\")) {\n return { ok: false, error: \"args must be an array of strings\" };\n }\n }\n\n if (obj.env !== undefined) {\n if (!isStringRecord(obj.env)) {\n return { ok: false, error: \"env must be a Record<string, string>\" };\n }\n }\n\n if (obj.headers !== undefined) {\n if (!isStringRecord(obj.headers)) {\n return { ok: false, error: \"headers must be a Record<string, string>\" };\n }\n }\n\n return { ok: true, value: obj as IServerEntry };\n}\n\nfunction isStringRecord(value: unknown): value is Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {return false;}\n return Object.values(value as Record<string, unknown>).every((v) => typeof v === \"string\");\n}\n\n// -- Transport detection --\n\nexport function detectTransport(entry: IServerEntry): \"stdio\" | \"http\" {\n return entry.url ? \"http\" : \"stdio\";\n}\n\n// -- Sensitive field redaction --\n\nexport function redactSensitiveFields(entry: IServerEntry): IServerEntry {\n const copy = { ...entry };\n if (copy.bearerToken) {\n copy.bearerToken = copy.bearerToken.slice(0, 4) + \"****\";\n }\n if (copy.env) {\n const redactedEnv = { ...copy.env };\n for (const key of Object.keys(redactedEnv)) {\n const lower = key.toLowerCase();\n if (lower.includes(\"token\") || lower.includes(\"secret\") || lower.includes(\"key\") || lower.includes(\"password\")) {\n const val = redactedEnv[key];\n redactedEnv[key] = val.length > 4 ? val.slice(0, 4) + \"****\" : \"****\";\n }\n }\n copy.env = redactedEnv;\n }\n return copy;\n}\n\n// -- Config loading --\n\nfunction parseConfigFile(raw: unknown): IMcpConfig {\n if (!raw || typeof raw !== \"object\") {\n return { mcpServers: {} };\n }\n\n const obj = raw as Record<string, unknown>;\n const servers = obj.mcpServers ?? obj[\"mcp-servers\"] ?? {};\n\n if (typeof servers !== \"object\" || servers === null || Array.isArray(servers)) {\n return { mcpServers: {} };\n }\n\n return {\n mcpServers: servers as Record<string, IServerEntry>,\n imports: Array.isArray(obj.imports) ? obj.imports as IImportKind[] : undefined,\n settings: obj.settings as IMcpSettings | undefined,\n };\n}\n\nfunction extractServers(config: unknown, kind: IImportKind): Record<string, IServerEntry> {\n if (!config || typeof config !== \"object\") {return {};}\n\n const obj = config as Record<string, unknown>;\n\n let servers: unknown;\n switch (kind) {\n case \"claude-desktop\":\n case \"claude-code\":\n case \"codex\":\n servers = obj.mcpServers;\n break;\n case \"cursor\":\n case \"windsurf\":\n case \"vscode\":\n servers = obj.mcpServers ?? obj[\"mcp-servers\"];\n break;\n default:\n return {};\n }\n\n if (!servers || typeof servers !== \"object\" || Array.isArray(servers)) {\n return {};\n }\n\n return servers as Record<string, IServerEntry>;\n}\n\nasync function readJsonFile(filePath: string): Promise<unknown> {\n try {\n const content = await readFile(filePath, \"utf-8\");\n return JSON.parse(content);\n } catch {\n return null;\n }\n}\n\nexport async function loadMcpServerConfig(agentDir: string, cwd: string): Promise<IMcpConfig> {\n const configPath = getMcpConfigPath(agentDir);\n\n let config: IMcpConfig = { mcpServers: {} };\n\n const raw = await readJsonFile(configPath);\n if (raw) {\n config = parseConfigFile(raw);\n }\n\n // Process imports\n if (config.imports?.length) {\n for (const importKind of config.imports) {\n const importPath = IMPORT_PATHS[importKind];\n if (!importPath) {continue;}\n\n const fullPath = importPath.startsWith(\".\")\n ? resolve(cwd, importPath)\n : importPath;\n\n const imported = await readJsonFile(fullPath);\n if (!imported) {continue;}\n\n const servers = extractServers(imported, importKind);\n for (const [name, def] of Object.entries(servers)) {\n if (!config.mcpServers[name]) {\n config.mcpServers[name] = def;\n }\n }\n }\n }\n\n // Project-local config\n const projectPath = resolve(cwd, PROJECT_CONFIG_NAME);\n if (projectPath !== configPath) {\n const projectRaw = await readJsonFile(projectPath);\n if (projectRaw) {\n const validated = parseConfigFile(projectRaw);\n config.mcpServers = { ...config.mcpServers, ...validated.mcpServers };\n if (validated.settings) {\n config.settings = { ...config.settings, ...validated.settings };\n }\n }\n }\n\n return config;\n}\n\n// -- Cache loading --\n\nconst CACHE_VERSION = 1;\nconst CACHE_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;\n\nexport async function loadMcpServerCache(agentDir: string): Promise<IMetadataCache | null> {\n const cachePath = getMcpCachePath(agentDir);\n const raw = await readJsonFile(cachePath);\n if (!raw || typeof raw !== \"object\") {return null;}\n\n const obj = raw as Record<string, unknown>;\n if (obj.version !== CACHE_VERSION) {return null;}\n if (!obj.servers || typeof obj.servers !== \"object\") {return null;}\n\n return raw as IMetadataCache;\n}\n\nexport function computeServerHash(definition: IServerEntry): string {\n const identity: Record<string, unknown> = {\n command: definition.command,\n args: definition.args,\n env: definition.env,\n cwd: definition.cwd,\n url: definition.url,\n headers: definition.headers,\n auth: definition.auth,\n bearerToken: definition.bearerToken,\n bearerTokenEnv: definition.bearerTokenEnv,\n exposeResources: definition.exposeResources,\n };\n const normalized = stableStringify(identity);\n return createHash(\"sha256\").update(normalized).digest(\"hex\");\n}\n\nexport function isServerCacheValid(\n entry: IServerCacheEntry,\n definition: IServerEntry,\n maxAgeMs: number = CACHE_MAX_AGE_MS,\n): boolean {\n if (!entry || entry.configHash !== computeServerHash(definition)) {return false;}\n if (!entry.cachedAt || typeof entry.cachedAt !== \"number\") {return false;}\n if (maxAgeMs > 0 && Date.now() - entry.cachedAt > maxAgeMs) {return false;}\n return true;\n}\n\nfunction stableStringify(value: unknown): string {\n if (value === null || value === undefined || typeof value !== \"object\") {\n const serialized = JSON.stringify(value);\n return serialized === undefined ? \"undefined\" : serialized;\n }\n if (Array.isArray(value)) {\n return `[${value.map((v) => stableStringify(v)).join(\",\")}]`;\n }\n const obj = value as Record<string, unknown>;\n const keys = Object.keys(obj).sort();\n return `{${keys.map((k) => `${JSON.stringify(k)}:${stableStringify(obj[k])}`).join(\",\")}}`;\n}\n\n// -- Provenance --\n\nexport async function getServerProvenance(agentDir: string, cwd: string): Promise<Map<string, IServerProvenance>> {\n const provenance = new Map<string, IServerProvenance>();\n const userPath = getMcpConfigPath(agentDir);\n\n const userRaw = await readJsonFile(userPath);\n const userConfig = userRaw ? parseConfigFile(userRaw) : { mcpServers: {} };\n\n for (const name of Object.keys(userConfig.mcpServers)) {\n provenance.set(name, { path: userPath, kind: \"user\" });\n }\n\n if (userConfig.imports?.length) {\n for (const importKind of userConfig.imports) {\n const importPath = IMPORT_PATHS[importKind];\n if (!importPath) {continue;}\n const fullPath = importPath.startsWith(\".\")\n ? resolve(cwd, importPath)\n : importPath;\n\n const imported = await readJsonFile(fullPath);\n if (!imported) {continue;}\n\n const servers = extractServers(imported, importKind);\n for (const name of Object.keys(servers)) {\n if (!provenance.has(name)) {\n provenance.set(name, { path: userPath, kind: \"import\", importKind });\n }\n }\n }\n }\n\n const projectPath = resolve(cwd, PROJECT_CONFIG_NAME);\n if (projectPath !== userPath) {\n const projectRaw = await readJsonFile(projectPath);\n if (projectRaw) {\n const projectConfig = parseConfigFile(projectRaw);\n for (const name of Object.keys(projectConfig.mcpServers)) {\n provenance.set(name, { path: projectPath, kind: \"project\" });\n }\n }\n }\n\n return provenance;\n}\n\n// -- CRUD --\n\nasync function readUserConfig(agentDir: string): Promise<{ raw: Record<string, unknown>; config: IMcpConfig }> {\n const configPath = getMcpConfigPath(agentDir);\n let raw: Record<string, unknown> = {};\n\n const parsed = await readJsonFile(configPath);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n raw = parsed as Record<string, unknown>;\n }\n\n const config = parseConfigFile(raw);\n return { raw, config };\n}\n\nasync function writeUserConfig(agentDir: string, raw: Record<string, unknown>): Promise<void> {\n const configPath = getMcpConfigPath(agentDir);\n await mkdir(dirname(configPath), { recursive: true });\n const tmpPath = `${configPath}.${process.pid}.tmp`;\n await writeFile(tmpPath, JSON.stringify(raw, null, 2) + \"\\n\", \"utf-8\");\n await rename(tmpPath, configPath);\n}\n\nexport async function addMcpServer(agentDir: string, name: string, entry: IServerEntry): Promise<void> {\n const { raw, config } = await readUserConfig(agentDir);\n if (config.mcpServers[name]) {\n throw new Error(`Server \"${name}\" already exists`);\n }\n\n const servers = (raw.mcpServers ?? raw[\"mcp-servers\"] ?? {}) as Record<string, IServerEntry>;\n const key = raw[\"mcp-servers\"] && !raw.mcpServers ? \"mcp-servers\" : \"mcpServers\";\n\n servers[name] = entry;\n raw[key] = servers;\n await writeUserConfig(agentDir, raw);\n}\n\nexport async function updateMcpServer(agentDir: string, name: string, entry: IServerEntry): Promise<void> {\n const { raw } = await readUserConfig(agentDir);\n const servers = (raw.mcpServers ?? raw[\"mcp-servers\"] ?? {}) as Record<string, IServerEntry>;\n const key = raw[\"mcp-servers\"] && !raw.mcpServers ? \"mcp-servers\" : \"mcpServers\";\n\n if (!servers[name]) {\n throw new Error(`Server \"${name}\" not found in user config`);\n }\n\n servers[name] = entry;\n raw[key] = servers;\n await writeUserConfig(agentDir, raw);\n}\n\nexport async function removeMcpServer(agentDir: string, name: string): Promise<void> {\n const { raw } = await readUserConfig(agentDir);\n const servers = (raw.mcpServers ?? raw[\"mcp-servers\"] ?? {}) as Record<string, IServerEntry>;\n const key = raw[\"mcp-servers\"] && !raw.mcpServers ? \"mcp-servers\" : \"mcpServers\";\n\n if (!servers[name]) {\n throw new Error(`Server \"${name}\" not found in user config`);\n }\n\n delete servers[name];\n raw[key] = servers;\n await writeUserConfig(agentDir, raw);\n}\n\n// -- Tool name formatting (reimplemented from extension) --\n\nexport function getServerPrefix(\n serverName: string,\n mode: \"server\" | \"none\" | \"short\",\n): string {\n if (mode === \"none\") {return \"\";}\n if (mode === \"short\") {\n let short = serverName.replace(/-?mcp$/i, \"\").replace(/-/g, \"_\");\n if (!short) {short = \"mcp\";}\n return short;\n }\n return serverName.replace(/-/g, \"_\");\n}\n\nexport function formatToolName(\n toolName: string,\n serverName: string,\n prefix: \"server\" | \"none\" | \"short\",\n): string {\n const p = getServerPrefix(serverName, prefix);\n return p ? `${p}_${toolName}` : toolName;\n}\n", "import { readdir, readFile, stat } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface ISkillInfo {\n name: string;\n description: string | null;\n directory: string;\n hasReferences: boolean;\n userInvocable: boolean;\n frontmatter: Record<string, string>;\n}\n\ninterface IParsedFrontmatter {\n frontmatter: Record<string, string>;\n body: string;\n}\n\nexport function parseFrontmatter(content: string): IParsedFrontmatter {\n const frontmatter: Record<string, string> = {};\n\n if (!content.startsWith(\"---\")) {\n return { frontmatter, body: content };\n }\n\n const endIndex = content.indexOf(\"\\n---\", 3);\n if (endIndex === -1) {\n return { frontmatter, body: content };\n }\n\n const fmBlock = content.slice(4, endIndex);\n for (const line of fmBlock.split(\"\\n\")) {\n const colonIndex = line.indexOf(\":\");\n if (colonIndex <= 0) {continue;}\n const key = line.slice(0, colonIndex).trim();\n const value = line.slice(colonIndex + 1).trim();\n if (key) {\n frontmatter[key] = value;\n }\n }\n\n const body = content.slice(endIndex + 4).trimStart();\n return { frontmatter, body };\n}\n\nasync function dirExists(path: string): Promise<boolean> {\n try {\n const s = await stat(path);\n return s.isDirectory();\n } catch {\n return false;\n }\n}\n\nexport async function listSkills(agentDir: string): Promise<ISkillInfo[]> {\n const skillsDir = join(agentDir, \"skills\");\n\n let entries;\n try {\n entries = await readdir(skillsDir, { withFileTypes: true });\n } catch {\n return [];\n }\n\n const skills: ISkillInfo[] = [];\n\n for (const entry of entries) {\n if (!entry.isDirectory()) {continue;}\n\n const skillDir = join(skillsDir, entry.name);\n const skillMdPath = join(skillDir, \"SKILL.md\");\n\n let content: string;\n try {\n content = await readFile(skillMdPath, \"utf-8\");\n } catch {\n continue;\n }\n\n const parsed = parseFrontmatter(content);\n const hasReferences = await dirExists(join(skillDir, \"references\"));\n\n skills.push({\n name: parsed.frontmatter.name || entry.name,\n description: parsed.frontmatter.description || null,\n directory: entry.name,\n hasReferences,\n userInvocable: parsed.frontmatter[\"user-invocable\"] === \"true\",\n frontmatter: parsed.frontmatter,\n });\n }\n\n return skills.sort((a, b) => a.name.localeCompare(b.name));\n}\n\nexport async function getSkillDetail(agentDir: string, skillName: string): Promise<{ skill: ISkillInfo; content: string } | null> {\n const skillsDir = join(agentDir, \"skills\");\n\n let entries;\n try {\n entries = await readdir(skillsDir, { withFileTypes: true });\n } catch {\n return null;\n }\n\n // Match by directory name or frontmatter name\n for (const entry of entries) {\n if (!entry.isDirectory()) {continue;}\n\n const skillDir = join(skillsDir, entry.name);\n const skillMdPath = join(skillDir, \"SKILL.md\");\n\n let content: string;\n try {\n content = await readFile(skillMdPath, \"utf-8\");\n } catch {\n continue;\n }\n\n const parsed = parseFrontmatter(content);\n const fmName = parsed.frontmatter.name || entry.name;\n\n if (entry.name === skillName || fmName === skillName) {\n const hasReferences = await dirExists(join(skillDir, \"references\"));\n\n return {\n skill: {\n name: fmName,\n description: parsed.frontmatter.description || null,\n directory: entry.name,\n hasReferences,\n userInvocable: parsed.frontmatter[\"user-invocable\"] === \"true\",\n frontmatter: parsed.frontmatter,\n },\n content,\n };\n }\n }\n\n return null;\n}\n", "import {\n loadMcpServerConfig,\n loadMcpServerCache,\n formatToolName,\n type IMcpConfig,\n type IMetadataCache,\n} from \"./mcpConfigService\";\nimport { DOCYRUS_WEB_BROWSER_CLIENT_TOOLS } from \"../../resources/pi-agent/shared/docyrusWebBrowserProtocol\";\n\nexport interface IToolInfo {\n name: string;\n description: string | null;\n source: \"built-in\" | string;\n serverName?: string;\n originalName?: string;\n inputSchema?: unknown;\n}\n\nconst BUILT_IN_TOOLS: Record<string, { name: string; description: string }[]> = {\n agent: [\n { name: \"read\", description: \"Read file contents\" },\n { name: \"bash\", description: \"Execute shell commands\" },\n { name: \"grep\", description: \"Search file contents\" },\n { name: \"find\", description: \"Find files by name pattern\" },\n { name: \"ls\", description: \"List directory contents\" },\n ],\n coder: [\n { name: \"read\", description: \"Read file contents\" },\n { name: \"bash\", description: \"Execute shell commands\" },\n { name: \"edit\", description: \"Edit file contents\" },\n { name: \"write\", description: \"Write file contents\" },\n { name: \"grep\", description: \"Search file contents\" },\n { name: \"find\", description: \"Find files by name pattern\" },\n { name: \"ls\", description: \"List directory contents\" },\n ],\n};\n\nexport async function listAllTools(params: {\n profile: string;\n agentDir: string;\n cwd: string;\n includeDocyrusWebBrowser?: boolean;\n}): Promise<IToolInfo[]> {\n const { profile, agentDir, cwd, includeDocyrusWebBrowser } = params;\n const tools: IToolInfo[] = [];\n\n // Built-in tools\n const builtIn = BUILT_IN_TOOLS[profile] ?? BUILT_IN_TOOLS.coder;\n for (const tool of builtIn) {\n tools.push({\n name: tool.name,\n description: tool.description,\n source: \"built-in\",\n });\n }\n\n if (includeDocyrusWebBrowser) {\n for (const tool of DOCYRUS_WEB_BROWSER_CLIENT_TOOLS) {\n tools.push({\n name: tool.name,\n description: tool.description,\n source: \"built-in\",\n inputSchema: tool.inputSchema,\n });\n }\n }\n\n // MCP tools from cache\n let config: IMcpConfig;\n let cache: IMetadataCache | null;\n try {\n [config, cache] = await Promise.all([\n loadMcpServerConfig(agentDir, cwd),\n loadMcpServerCache(agentDir),\n ]);\n } catch {\n return tools;\n }\n\n const serverNames = Object.keys(config.mcpServers);\n if (serverNames.length === 0) {\n return tools;\n }\n\n // Add the mcp proxy tool\n tools.push({\n name: \"mcp\",\n description: \"Call an MCP server tool\",\n source: \"built-in\",\n });\n\n if (!cache) {\n return tools;\n }\n\n const prefix = config.settings?.toolPrefix ?? \"server\";\n\n for (const serverName of serverNames) {\n const serverCache = cache.servers[serverName];\n if (!serverCache) {continue;}\n\n for (const tool of serverCache.tools ?? []) {\n if (!tool?.name) {continue;}\n tools.push({\n name: formatToolName(tool.name, serverName, prefix),\n description: tool.description ?? null,\n source: `mcp:${serverName}`,\n serverName,\n originalName: tool.name,\n inputSchema: tool.inputSchema,\n });\n }\n }\n\n return tools;\n}\n", "export type IDocyrusPiProfileId = \"agent\" | \"coder\";\nexport type IDocyrusPiThinkingLevel = \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\";\n\nexport interface IDocyrusPiServerLoaderRequest {\n profile: IDocyrusPiProfileId;\n port: number;\n provider?: string;\n model?: string;\n thinking?: IDocyrusPiThinkingLevel;\n sessionDir?: string;\n apiKey?: string;\n auth?: string;\n verbose?: boolean;\n}\n\nexport function parseServerLoaderRequest(payload: string): IDocyrusPiServerLoaderRequest {\n return JSON.parse(payload) as IDocyrusPiServerLoaderRequest;\n}\n", "const SERVER_MODE_ALLOWED_MODEL_IDS_BY_PROVIDER = {\n anthropic: [\n \"claude-opus-4-6\",\n \"claude-sonnet-4-6\",\n \"claude-haiku-4-5\",\n ],\n openai: [\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n \"gpt-5.4-nano\",\n ],\n \"azure-openai-responses\": [\n \"gpt-5.4\",\n \"gpt-5.4-mini\",\n \"gpt-5.4-nano\",\n ],\n} as const;\n\ninterface IModelDescriptor {\n provider: string;\n id: string;\n}\n\ninterface IModelRegistryLike {\n getAll(): IModelDescriptor[];\n getAvailable(): IModelDescriptor[];\n find(provider: string, modelId: string): unknown | undefined;\n}\n\nconst ALLOWED_MODEL_IDS_BY_PROVIDER: Record<string, ReadonlySet<string>> = Object.fromEntries(\n Object.entries(SERVER_MODE_ALLOWED_MODEL_IDS_BY_PROVIDER).map(([provider, modelIds]) => [provider, new Set(modelIds)]),\n);\n\nexport function isServerSelectableModel(model: IModelDescriptor): boolean {\n const allowedModelIds = ALLOWED_MODEL_IDS_BY_PROVIDER[model.provider];\n if (!allowedModelIds) {\n return true;\n }\n\n return allowedModelIds.has(model.id);\n}\n\nfunction filterModels<TModel extends IModelDescriptor>(models: TModel[]): TModel[] {\n return models.filter((model) => isServerSelectableModel(model));\n}\n\nexport function createServerRestrictedModelRegistry<TRegistry extends IModelRegistryLike>(modelRegistry: TRegistry): TRegistry {\n return new Proxy(modelRegistry, {\n get(target, property, receiver) {\n if (property === \"getAll\") {\n return () => filterModels(target.getAll());\n }\n\n if (property === \"getAvailable\") {\n return () => filterModels(target.getAvailable());\n }\n\n if (property === \"find\") {\n return (provider: string, modelId: string) => {\n if (!isServerSelectableModel({ provider, id: modelId })) {\n return undefined;\n }\n\n return target.find(provider, modelId);\n };\n }\n\n const value = Reflect.get(target, property, receiver);\n return typeof value === \"function\" ? value.bind(target) : value;\n },\n });\n}\n\n", "import type { IAgentSessionEvent } from \"./eventBridge\";\nimport type { IDocyrusThinkingLevel } from \"../agent/authInteractivity\";\n\nexport interface IServerSessionAdapterSource {\n sessionId?: string;\n id?: string;\n isStreaming: boolean;\n model?: { provider: string; id: string };\n thinkingLevel: IDocyrusThinkingLevel;\n subscribe(listener: (event: IAgentSessionEvent) => void): () => void;\n prompt(text: string): Promise<void>;\n abort(): Promise<void>;\n setModel(model: unknown): Promise<void>;\n setThinkingLevel(level: IDocyrusThinkingLevel): void;\n getAvailableThinkingLevels(): IDocyrusThinkingLevel[];\n supportsThinking(): boolean;\n}\n\nexport function createServerSessionAdapter(params: {\n session: IServerSessionAdapterSource;\n extensionsResult: {\n runtime: {\n getCommands?: () => Array<{ name: string; description?: string }>;\n };\n };\n}) {\n return {\n id: params.session.sessionId ?? params.session.id,\n get isStreaming() {\n return params.session.isStreaming;\n },\n get model() {\n return params.session.model;\n },\n get thinkingLevel() {\n return params.session.thinkingLevel;\n },\n subscribe(listener: (event: IAgentSessionEvent) => void) {\n return params.session.subscribe(listener);\n },\n prompt(text: string) {\n return params.session.prompt(text);\n },\n abort() {\n return params.session.abort();\n },\n setModel(model: unknown) {\n return params.session.setModel(model);\n },\n setThinkingLevel(level: IDocyrusThinkingLevel) {\n return params.session.setThinkingLevel(level);\n },\n getAvailableThinkingLevels() {\n return params.session.getAvailableThinkingLevels();\n },\n supportsThinking() {\n return params.session.supportsThinking();\n },\n listCommands() {\n const getCommands = params.extensionsResult.runtime.getCommands;\n return typeof getCommands === \"function\" ? getCommands() : [];\n },\n };\n}\n", "import picocolors from \"picocolors\";\n\nconst SPINNER_FRAMES = [\"\u280B\", \"\u2819\", \"\u2839\", \"\u2838\", \"\u283C\", \"\u2834\", \"\u2826\", \"\u2827\", \"\u2807\", \"\u280F\"] as const;\nconst SPINNER_INTERVAL_MS = 80;\n\nexport interface ISpinner {\n update(message: string): void;\n stop(): void;\n}\n\nexport function createSpinner(message: string): ISpinner {\n let frameIndex = 0;\n let currentMessage = message;\n\n const render = () => {\n const frame = picocolors.cyan(SPINNER_FRAMES[frameIndex]);\n process.stderr.write(`\\r ${frame} ${picocolors.dim(currentMessage)}`);\n frameIndex = (frameIndex + 1) % SPINNER_FRAMES.length;\n };\n\n render();\n const interval = setInterval(render, SPINNER_INTERVAL_MS);\n\n return {\n update(newMessage: string) {\n currentMessage = newMessage;\n },\n stop() {\n clearInterval(interval);\n process.stderr.write(`\\r${\" \".repeat(currentMessage.length + 10)}\\r`);\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["exports", "module", "import_http2", "Request", "crypto", "resolve", "Http2ServerRequest2", "createServerHTTP", "import_node_fs", "import_node_path", "import_picocolors", "raw", "import_node_path", "import_node_crypto", "import_promises", "import_node_path", "match", "cacheKey", "raw", "Node", "_Node", "Node", "Hono", "hashString", "isRecord", "hashString", "import_promises", "import_node_path", "createDefaultState", "raw", "trimOrUndefined", "resolve", "import_node_crypto", "import_promises", "import_node_path", "raw", "import_promises", "import_node_path", "resolve", "Hono", "match", "serve", "picocolors", "resolvePath", "picocolors", "match"]
|
|
7
7
|
}
|