@versot/vaguspi 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../apps/cli/src/bin.ts", "../../../apps/cli/src/commands/daemon.ts", "../../host/config/src/config-store.ts", "../../host/events/src/event-bus.ts", "../../host/models/src/vag-models.ts", "../../host/engine/src/vagus-engine.ts", "../../host/engine/src/display-utils.ts", "../../host/engine/src/usage-stats.ts", "../../host/engine/src/ui-bridge.ts", "../../../node_modules/.pnpm/zod@3.24.1/node_modules/zod/lib/index.mjs", "../../protocol/src/jsonrpc.ts", "../../protocol/src/session-message.ts", "../../protocol/src/session-queue.ts", "../../protocol/src/session-thinking.ts", "../../protocol/src/session-tool.ts", "../../protocol/src/session-turn.ts", "../../protocol/src/session-subagent.ts", "../../protocol/src/events.ts", "../../protocol/src/frames.ts", "../../host/rpc/src/server.ts", "../../host/rpc/src/stdio-transport.ts", "../../host/rpc/src/websocket-server.ts", "../../host/rpc/src/static-server.ts", "../../../apps/cli/src/plugin-manager.ts", "../../../apps/cli/src/skills.ts", "../../../apps/cli/src/commands/web.ts", "../../../apps/cli/src/daemon.ts"],
4
+ "sourcesContent": ["import { readFileSync } from \"node:fs\";\nimport { parseArgs } from \"node:util\";\nimport { runDaemon } from \"./commands/daemon.js\";\nimport { runWeb } from \"./commands/web.js\";\n\n/**\n * pi-web CLI entry (`pi-web`).\n *\n * Minimal command surface: the web UI is the product, the daemon is its\n * backend. `pi-web web` starts the daemon and opens the browser \u2014 the whole\n * app in one command. The pi CLI's own extension mechanism covers plugins.\n */\n\nconst VERSION = JSON.parse(\n readFileSync(new URL(\"../package.json\", import.meta.url), \"utf8\"),\n).version as string;\n\ninterface Command {\n name: string;\n summary: string;\n /** When the command becomes available (roadmap milestone). */\n milestone: string;\n run: (args: string[]) => Promise<number> | number;\n}\n\nconst commands: Command[] = [\n {\n name: \"daemon\",\n summary: \"Start the vagusPI orchestration daemon\",\n milestone: \"ready\",\n run: () => runDaemon(),\n },\n {\n name: \"web\",\n summary: \"Start the daemon and open the web UI in your browser\",\n milestone: \"ready\",\n run: () => runWeb(),\n },\n {\n name: \"gui\",\n summary: \"Alias for `web` (open the web UI)\",\n milestone: \"ready\",\n run: () => runWeb(),\n },\n];\n\nfunction printUsage(): void {\n process.stdout.write(`pi-web \u2014 pi coding agent web GUI v${VERSION}\\n\\n`);\n process.stdout.write(\"usage: pi-web <command> [options]\\n\\ncommands:\\n\");\n for (const command of commands) {\n process.stdout.write(` ${command.name.padEnd(9)} ${command.summary} (${command.milestone})\\n`);\n }\n process.stdout.write(\"\\noptions:\\n --version print version\\n -h, --help print this help\\n\");\n}\n\nasync function main(argv: string[]): Promise<number> {\n const { values, positionals } = parseArgs({\n args: argv,\n options: {\n version: { type: \"boolean\", short: \"v\" },\n help: { type: \"boolean\", short: \"h\" },\n },\n allowPositionals: true,\n });\n\n if (values.version) {\n process.stdout.write(`${VERSION}\\n`);\n return 0;\n }\n if (values.help || positionals.length === 0) {\n printUsage();\n return 0;\n }\n\n const name = positionals[0];\n const command = commands.find((candidate) => candidate.name === name);\n if (!command) {\n process.stderr.write(`unknown command: ${name}\\n\\n`);\n printUsage();\n return 1;\n }\n return command.run(positionals.slice(1));\n}\n\nmain(process.argv.slice(2))\n .then((code) => {\n process.exitCode = code;\n })\n .catch((error: unknown) => {\n process.stderr.write(`fatal: ${error instanceof Error ? error.message : String(error)}\\n`);\n process.exitCode = 1;\n });\n", "import { existsSync, mkdirSync, readFileSync, readdirSync, statSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { homedir } from \"node:os\";\nimport { join, normalize, resolve, sep } from \"node:path\";\nimport { ConfigStore } from \"@vagus/host-config\";\nimport { EventBus, type CoreEventMap } from \"@vagus/host-events\";\nimport { VagModelsStore } from \"@vagus/host-models\";\nimport { VagusEngine } from \"@vagus/host-engine\";\nimport { JsonRpcServer, StdioTransport, WsServerHost } from \"@vagus/host-rpc\";\nimport type { DomainEvent } from \"@vagus/protocol\";\nimport { PiPackageManager } from \"../plugin-manager.js\";\nimport { listAllSkills } from \"../skills.js\";\n\n/**\n * `pi-web daemon` \u2014 the pi Web GUI backend process.\n *\n * Speaks JSON-RPC 2.0 + event-stream over stdin/stdout JSONL (docs/protocol.md)\n * and WebSocket for the GUI. Session creation is lazy: `session.create`\n * instantiates a session backed by the pi SDK. All configuration lives under\n * `~/.pi/agent/` \u2014 the same agent dir the pi CLI uses \u2014 so the web GUI and\n * the pi TUI share models, auth, settings, packages, skills and sessions.\n */\n\nfunction defaultStateDir(): string {\n // Daemon bookkeeping (session index + web-only prefs) stays out of pi's\n // scan dirs (extensions/ skills/ prompts/ themes/) but inside ~/.pi/agent.\n return process.env.PI_WEB_STATE_DIR ?? join(piAgentDir(), \"state\");\n}\n\n/** Resolves pi's agent dir: PI_CODING_AGENT_DIR env or the default ~/.pi/agent. */\nfunction piAgentDir(): string {\n return process.env.PI_CODING_AGENT_DIR ?? join(homedir(), \".pi\", \"agent\");\n}\n\nfunction requireString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`${label} must be a non-empty string`);\n }\n return value;\n}\n\n/**\n * Per-API-format probe request: endpoint URL + auth headers. Shared by\n * `models.test` (connectivity) and `models.probe` (capability detection) so\n * the two never drift on endpoint/header shape.\n */\nfunction probeRequestFor(apiType: string, url: string, apiKey: string | undefined, modelId: string): { endpoint: string; headers: Record<string, string> } | undefined {\n const headers: Record<string, string> = { \"Content-Type\": \"application/json\" };\n // Strip a trailing /chat/completions if the baseUrl already carries it \u2014\n // idempotent so callers never double-append.\n const base = url.replace(/\\/chat\\/completions$/, \"\");\n let endpoint: string;\n if (apiType === \"anthropic-messages\") {\n endpoint = base.endsWith(\"/v1\") ? `${base}/messages` : `${base}/v1/messages`;\n headers[\"x-api-key\"] = String(apiKey ?? \"\");\n headers[\"anthropic-version\"] = \"2023-06-01\";\n } else if (apiType === \"openai-responses\") {\n endpoint = `${base}/responses`;\n headers[\"Authorization\"] = `Bearer ${String(apiKey ?? \"\")}`;\n } else if (apiType === \"google-generative-ai\") {\n endpoint = `${base}/v1beta/models/${modelId}:generateContent`;\n headers[\"x-goog-api-key\"] = String(apiKey ?? \"\");\n } else {\n // openai-completions (default) \u2014 and the detailed probe only supports this.\n endpoint = `${base}/chat/completions`;\n headers[\"Authorization\"] = `Bearer ${String(apiKey ?? \"\")}`;\n }\n return { endpoint, headers };\n}\n\n/**\n * Built-in pi extension paths for the web GUI's sessions.\n *\n * These are loaded SESSION-SCOPED via the engine's resource loader\n * (additionalExtensionPaths) \u2014 NEVER written into ~/.pi/agent/settings.json.\n *\n * WHY: settings.json is shared with every pi process on the machine (the\n * pi CLI, the pi agent studio VS Code plugin, \u2026). Injecting a dev extension\n * there would make a buggy extension crash those unrelated tools (exit 1).\n * By scoping to web sessions, the GUI gets its built-ins while other pi\n * frontends stay untouched. The production pi-package (@versot/vaguspi) ships\n * the same extensions via its `pi.extensions` manifest instead.\n */\nfunction builtinExtensionPaths(): string[] {\n const out: string[] = [];\n // Where this file lives: dev (monorepo source) or bundled (npx package).\n const here = fileURLToPath(new URL(\".\", import.meta.url));\n // Bundled layout: {pkg}/dist/bin.js + {pkg}/extensions/*.js\n const bundleRoot = join(here, \"..\");\n\n // \u2500\u2500 Built-in MCP extension \u2500\u2500\n // Dev: <repo>/packages/mcp-extension/{src,dist}/index.{ts,js}\n // Bundle: <pkg>/extensions/mcp-extension.js\n const mcpDev = join(here, \"..\", \"..\", \"..\", \"..\", \"packages\", \"mcp-extension\");\n const mcpSource = join(mcpDev, \"src\", \"index.ts\");\n const mcpDist = join(mcpDev, \"dist\", \"index.js\");\n const mcpBundle = join(bundleRoot, \"extensions\", \"mcp-extension.js\");\n const mcpPath = existsSync(mcpSource) ? mcpSource : existsSync(mcpDist) ? mcpDist : mcpBundle;\n if (existsSync(mcpPath)) out.push(mcpPath);\n\n return out;\n}\n\nexport async function runDaemon(): Promise<number> {\n const stateDir = defaultStateDir();\n mkdirSync(stateDir, { recursive: true });\n\n const config = new ConfigStore({ dir: stateDir });\n const bus = new EventBus<CoreEventMap>();\n // Engine dir: pi's real agent dir (~/.pi/agent). The pi SDK and the web\n // stores read the *same* models.json/auth.json/settings.json the pi CLI\n // uses \u2014 the web GUI is just another frontend for pi, not an isolated twin.\n const engineDir = piAgentDir();\n mkdirSync(engineDir, { recursive: true });\n process.env.PI_CODING_AGENT_DIR = engineDir;\n const vagModels = new VagModelsStore(engineDir);\n // Built-in pi extensions for web sessions \u2014 loaded session-scoped via the\n // engine, never injected into the shared ~/.pi/agent/settings.json.\n const builtinExtensions = builtinExtensionPaths();\n const host = new VagusEngine({\n cwd: process.cwd(),\n bus,\n engineDir,\n // Built-in capabilities (MCP) load only in web sessions.\n builtinExtensionPaths: builtinExtensions,\n // Global skill enable/disable state (persisted in stateDir/config.json).\n disabledSkills: () => {\n const cfg = config.read() as { disabledSkills?: unknown };\n return Array.isArray(cfg.disabledSkills)\n ? (cfg.disabledSkills as unknown[]).filter((s): s is string => typeof s === \"string\")\n : [];\n },\n });\n // Plugin store: pi's own package manager (npm/git sources, persisted in\n // settings.json `packages` \u2014 identical to `pi install`). MCP server configs\n // are written to the engine dir's mcp.json (consumed by the built-in MCP\n // extension that ships with this package).\n const plugins = new PiPackageManager({ engineDir });\n\n // Shared RPC method registration \u2014 used by both the stdio server and every\n // WebSocket connection (the GUI attaches over WS with the same protocol).\n const registerMethods = (srv: JsonRpcServer): void => {\n srv.registerMethod(\"ping\", () => ({ pong: true }));\n // \u2500\u2500 extension UI bridge: answer ctx.ui.confirm/select/input from the GUI \u2500\u2500\n // The engine emits `ui.request` events (forwarded to the GUI over WS); the\n // frontend renders the dialog and responds here, which resolves the\n // extension's pending ctx.ui promise.\n srv.registerMethod(\"ui.respond\", (params) => {\n const { id, ...result } = (params ?? {}) as { id?: unknown; confirmed?: unknown; value?: unknown; cancelled?: unknown };\n if (typeof id !== \"string\" || id.length === 0) throw new Error(\"ui.respond: id required\");\n host.resolveUi(id, result as Record<string, unknown>);\n return { ok: true };\n });\n // Latest widget state \u2014 lets a freshly-loaded frontend re-hydrate widgets\n // (setWidget lines) after a page reload without waiting for re-registration.\n srv.registerMethod(\"ui.widgets\", () => host.getWidgets());\n // Pending dialogs \u2014 lets a freshly-loaded frontend re-show confirm/select/\n // input dialogs after a page reload (the awaiting extension call is still\n // alive in the daemon; resolving it works as before).\n srv.registerMethod(\"ui.pending\", () => host.getPendingUiRequests());\n // Answered dialog history \u2014 DURABLE (disk-backed, ~/.pi/agent/ui-history);\n // restores read-only cards even after a daemon restart.\n srv.registerMethod(\"ui.history\", () => host.getUiHistory());\n // \u2500\u2500 usage stats (settings panel) \u2500\u2500\n srv.registerMethod(\"usage.stats\", () => host.getUsageStats());\n srv.registerMethod(\"session.tools\", (params) => {\n const sessionId = requireString((params as { sessionId?: unknown } | undefined)?.sessionId, \"sessionId\");\n return host.listSessionTools(sessionId);\n });\n srv.registerMethod(\"session.reload\", (params) => {\n const sid = (params as { sessionId?: unknown } | undefined)?.sessionId;\n return host.reloadSession(typeof sid === \"string\" && sid.length > 0 ? sid : undefined);\n });\n srv.registerMethod(\"session.history\", (params) =>\n host.listHistory((params as { cwd?: unknown } | undefined)?.cwd === undefined ? undefined : requireString((params as { cwd?: unknown }).cwd, \"cwd\")),\n );\n srv.registerMethod(\"session.create\", (params) => {\n const cwd = (params as { cwd?: unknown } | undefined)?.cwd;\n return host.createSession(cwd === undefined ? process.cwd() : requireString(cwd, \"cwd\"));\n });\n\n // Returns the user's home directory (start point for the folder picker).\n srv.registerMethod(\"project.home\", () => {\n return homedir();\n });\n\n // \u2500\u2500 project archive \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Archive flow: a project (cwd) is archived first \u2014 its session files are\n // physically moved into the daemon's `archived/` dir. Only from there\n // can it be permanently deleted. Restore moves the files back.\n\n srv.registerMethod(\"project.archive\", (params) => {\n const cwd = requireString((params as { cwd?: unknown } | undefined)?.cwd, \"cwd\");\n return host.archiveProject(cwd);\n });\n\n srv.registerMethod(\"project.unarchive\", (params) => {\n const cwd = requireString((params as { cwd?: unknown } | undefined)?.cwd, \"cwd\");\n return host.restoreProject(cwd);\n });\n\n srv.registerMethod(\"project.archived\", () => host.listArchivedProjects());\n\n // Permanently delete an archived project (its archived session dir).\n srv.registerMethod(\"project.delete\", (params) => {\n const cwd = requireString((params as { cwd?: unknown } | undefined)?.cwd, \"cwd\");\n return host.deleteArchivedProject(cwd);\n });\n\n // Quick-access roots for the picker: places (Home, Desktop, \u2026) + drives (C:, \u2026).\n srv.registerMethod(\"project.roots\", () => {\n const home = homedir();\n const places: { name: string; path: string; isDirectory: boolean }[] = [\n { name: \"Home\", path: home, isDirectory: true },\n { name: \"Root\", path: sep, isDirectory: true },\n ];\n const candidates = [\"Desktop\", \"Downloads\", \"Documents\", \"Pictures\", \"Music\", \"Videos\"];\n for (const name of candidates) {\n const p = join(home, name);\n try { if (statSync(p).isDirectory()) places.push({ name, path: p, isDirectory: true }); } catch { /* skip */ }\n }\n const drives: { name: string; path: string; isDirectory: boolean }[] = [];\n if (process.platform === \"win32\") {\n for (const letter of \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\") {\n const root = `${letter}:\\\\`;\n try { if (statSync(root).isDirectory()) drives.push({ name: `${letter}:`, path: root, isDirectory: true }); } catch { /* skip */ }\n }\n }\n return { places, drives };\n });\n\n // Lists a directory for the in-app folder picker.\n // Supports `~` for home dir. Entries sorted: dirs first, then files, alphabetically.\n srv.registerMethod(\"project.listDir\", (params) => {\n const raw = requireString((params as { dir?: unknown } | undefined)?.dir, \"dir\");\n const dir = normalize(resolve(raw.replace(/^~(?=$|[\\\\/])/, homedir())));\n const entries: { name: string; path: string; isDirectory: boolean }[] = [];\n try {\n for (const name of readdirSync(dir, { withFileTypes: true })) {\n if (name.name.startsWith(\".\")) continue; // hide dotfiles\n if (name.name === \"node_modules\" || name.name === \".git\") continue;\n try {\n const st = statSync(join(dir, name.name));\n entries.push({ name: name.name, path: join(dir, name.name), isDirectory: st.isDirectory() });\n } catch {\n // unreadable entry \u2014 skip\n }\n }\n } catch {\n return { path: dir, entries: [] };\n }\n entries.sort((a, b) => (a.isDirectory === b.isDirectory ? a.name.localeCompare(b.name) : a.isDirectory ? -1 : 1));\n return { path: dir, entries };\n });\n\n // Lists workspace files (up to 300, depth <= 4, text files only) for the\n // \"@\" context picker. Returns relative paths.\n srv.registerMethod(\"project.files\", (params) => {\n const raw = requireString((params as { cwd?: unknown } | undefined)?.cwd ?? homedir(), \"cwd\");\n const dir = normalize(resolve(raw.replace(/^~(?=$|[\\\\/])/, homedir())));\n const out: string[] = [];\n const EXT = new Set([\"ts\", \"tsx\", \"js\", \"jsx\", \"mjs\", \"cjs\", \"json\", \"md\", \"mdx\", \"txt\", \"css\", \"scss\", \"html\", \"vue\", \"svelte\", \"py\", \"go\", \"rs\", \"java\", \"kt\", \"swift\", \"c\", \"cpp\", \"h\", \"hpp\", \"rb\", \"php\", \"sh\", \"yml\", \"yaml\", \"toml\", \"sql\", \"graphql\", \"proto\", \"xml\", \"env\", \"ini\", \"lock\"]);\n const walk = (current: string, depth: number): void => {\n if (out.length >= 300 || depth > 4) return;\n let items: { name: string; isDir: boolean }[] = [];\n try {\n items = readdirSync(current, { withFileTypes: true })\n .filter((e) => !e.name.startsWith(\".\") && e.name !== \"node_modules\" && e.name !== \"dist\" && e.name !== \"build\")\n .map((e) => ({ name: e.name, isDir: e.isDirectory() }));\n } catch { return; }\n items.sort((a, b) => (a.isDir === b.isDir ? a.name.localeCompare(b.name) : a.isDir ? -1 : 1));\n for (const it of items) {\n if (out.length >= 300) return;\n const full = join(current, it.name);\n const rel = full.slice(dir.length).replace(/^[\\\\/]+/, \"\").replace(/\\\\/g, \"/\");\n if (it.isDir) walk(full, depth + 1);\n else {\n const ext = it.name.split(\".\").pop() ?? \"\";\n if (EXT.has(ext)) out.push(rel);\n }\n }\n };\n walk(dir, 0);\n return { cwd: dir, files: out.slice(0, 300) };\n });\n\n // Reads a workspace file's text content (for \"@\" context attachment).\n srv.registerMethod(\"project.readFile\", (params) => {\n const path = requireString((params as { path?: unknown } | undefined)?.path, \"path\");\n try {\n return { ok: true, content: readFileSync(path, \"utf8\") };\n } catch (err) {\n return { ok: false, error: String(err) };\n }\n });\n\n // Lists global skills (SKILL.md in ~/.pi/agent/skills/*/ and\n // ~/.agents/skills/), deduped by name (vagusPI wins). Each entry carries\n // `enabled` (the user's enable/disable preference). The \"/\" command menu\n // still reads name/description, which these include.\n const readDisabledSkills = (): string[] => {\n const cfg = config.read() as { disabledSkills?: unknown };\n return Array.isArray(cfg.disabledSkills)\n ? (cfg.disabledSkills as unknown[]).filter((s): s is string => typeof s === \"string\")\n : [];\n };\n const skillsWithEnabled = async () => {\n const disabled = new Set(readDisabledSkills());\n const all = await listAllSkills(process.cwd(), engineDir);\n // Settings panel is global \u2014 hide project-scoped skills (they belong\n // to their own project's session view, loaded per-session by pi).\n return all.filter((s) => s.source !== \"project\").map((s) => ({ ...s, enabled: !disabled.has(s.name) }));\n };\n srv.registerMethod(\"skills.list\", async () => skillsWithEnabled());\n srv.registerMethod(\"skills.setEnabled\", async (params) => {\n const { name, enabled } = (params ?? {}) as { name?: unknown; enabled?: unknown };\n const skillName = requireString(name, \"name\");\n const isEnabled = enabled === true;\n const allNames = new Set(\n (await listAllSkills(process.cwd(), engineDir)).filter((s) => s.source !== \"project\").map((s) => s.name),\n );\n const disabled = new Set(readDisabledSkills());\n if (isEnabled) disabled.delete(skillName);\n else disabled.add(skillName);\n const next = [...disabled].filter((n) => allNames.has(n)).toSorted();\n config.update({ disabledSkills: next });\n return skillsWithEnabled();\n });\n\n // \u2500\u2500 slash-command palette (the \"/\" dropdown) \u2500\u2500\n // Combines every command the web GUI can dispatch:\n // extensions/templates \u2014 from the active pi session (same internals as\n // pi's RPC `get_commands`); extension commands + templates are executed\n // by session.prompt() which dispatches/expands them.\n // skills \u2014 /skill:<name> expansion (also handled by session.prompt()).\n // builtins \u2014 web-native session ops routed by the frontend to engine\n // RPCs (session.prompt() does NOT dispatch pi's builtin slash commands;\n // those are TUI-only).\n srv.registerMethod(\"commands.list\", async (params) => {\n const sessionId = (params as { sessionId?: unknown } | undefined)?.sessionId;\n const { extensions, templates } = host.listCommands(\n typeof sessionId === \"string\" && sessionId.length > 0 ? sessionId : undefined,\n );\n const skills = (await listAllSkills(process.cwd(), engineDir))\n .filter((s) => s.source !== \"project\")\n // User-disabled skills (settings panel) never appear in the \"/\" palette.\n .filter((s) => !new Set(readDisabledSkills()).has(s.name));\n return {\n extensions: extensions.map((e) => ({ name: e.name, description: e.description })),\n templates: templates.map((t) => ({ name: t.name, description: t.description })),\n skills: skills.map((s) => ({ name: s.name, description: s.description })),\n };\n });\n\n // Resumes a historical pi session (full context restored from disk).\n srv.registerMethod(\"session.open\", async (params) => {\n const { sessionFile, limit } = (params ?? {}) as { sessionFile?: unknown; limit?: unknown };\n const file = requireString(sessionFile, \"sessionFile\");\n const ref = await host.resumeSession(file);\n if (typeof limit === \"number\" && Number.isFinite(limit) && limit > 0) {\n // Lazy-load: only build the latest `limit` messages + pagination info.\n const page = host.readSessionPage(file, { limit });\n return { ...ref, ...page };\n }\n const messages = host.readSessionMessages(file);\n return { ...ref, messages, total: messages.length, startIndex: 0, hasMore: false };\n });\n // Lazy-load an earlier page of a session (scroll up in the chat).\n srv.registerMethod(\"session.page\", (params) => {\n const p = (params ?? {}) as { sessionFile?: unknown; limit?: unknown; beforeIndex?: unknown };\n const file = requireString(p.sessionFile, \"sessionFile\");\n const limit = typeof p.limit === \"number\" && Number.isFinite(p.limit) && p.limit > 0 ? p.limit : 200;\n return host.readSessionPage(file, {\n limit,\n beforeIndex: typeof p.beforeIndex === \"number\" ? p.beforeIndex : undefined,\n });\n });\n // Reads the current conversation path of a session file (for display).\n srv.registerMethod(\"session.messages\", (params) => {\n const sessionFile = requireString((params as { sessionFile?: unknown } | undefined)?.sessionFile, \"sessionFile\");\n return host.readSessionMessages(sessionFile);\n });\n srv.registerMethod(\"session.prompt\", (params) => {\n const { sessionId, text, images } = (params ?? {}) as { sessionId?: unknown; text?: unknown; images?: Array<{ dataUrl: string; mimeType: string }> };\n return host.prompt(requireString(sessionId, \"sessionId\"), requireString(text, \"text\"), images);\n });\n\n // \u2500\u2500 model & credential management (pi GUI parity: /model /login /logout) \u2500\u2500\n srv.registerMethod(\"models.list\", () => host.listAvailableModels());\n srv.registerMethod(\"models.config\", () => vagModels.read());\n // Full pi model catalog (incl. compat) so the GUI can auto-fill model\n // config instead of asking the user to hand-write compat fields.\n srv.registerMethod(\"models.catalog\", async () => host.listModelCatalog());\n srv.registerMethod(\"models.probe\", async (params) => {\n const { baseUrl, api, apiKey, model } = (params ?? {}) as { baseUrl?: string; api?: string; apiKey?: string; model?: string };\n const url = (baseUrl ?? \"\").replace(/\\/+$/, \"\");\n const apiType = String(api ?? \"openai-completions\");\n const modelId = String(model ?? \"\");\n if (!url || !modelId) return { ok: false, error: \"baseUrl and model are required\" };\n // Only openai-completions probing is supported; other API types\n // just return connection-ok without capability details.\n if (apiType !== \"openai-completions\") {\n // Simple connectivity test for non-OpenAI APIs.\n try {\n const res = await fetch(url.replace(/\\/chat\\/completions$/, \"\") + \"/chat/completions\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", \"Authorization\": `Bearer ${String(apiKey ?? \"\")}` },\n body: JSON.stringify({ model: modelId, max_tokens: 1, messages: [{ role: \"user\", content: \"ping\" }] }),\n signal: AbortSignal.timeout(10000),\n });\n return { ok: res.ok, compat: {}, input: [\"text\"], reasoning: false };\n } catch (e: unknown) {\n return { ok: false, error: String(e) };\n }\n }\n const probe = probeRequestFor(\"openai-completions\", url, apiKey, modelId);\n const endpoint = probe!.endpoint;\n const headers = probe!.headers;\n // 1. Basic request \u2014 test connectivity & detect reasoning_content.\n let reasoning = false;\n try {\n const r1 = await fetch(endpoint, {\n method: \"POST\", headers,\n body: JSON.stringify({ model: modelId, max_tokens: 5, messages: [{ role: \"user\", content: \"ping\" }] }),\n signal: AbortSignal.timeout(10000),\n });\n if (!r1.ok) {\n const txt = await r1.text();\n return { ok: false, error: `Base request failed (HTTP ${r1.status}): ${txt.slice(0, 200)}` };\n }\n const d1 = (await r1.json()) as Record<string, unknown>;\n const choice = (d1.choices as Array<{ message?: Record<string, unknown> }> | undefined)?.[0];\n reasoning = (choice?.message as Record<string, unknown> | undefined)?.reasoning_content !== undefined;\n } catch (e: unknown) {\n return { ok: false, error: String(e) };\n }\n // 2. Developer-role probe.\n let supportsDeveloperRole = true;\n try {\n const r2 = await fetch(endpoint, {\n method: \"POST\", headers,\n body: JSON.stringify({ model: modelId, max_tokens: 2, messages: [{ role: \"developer\", content: \"ping\" }, { role: \"user\", content: \"hi\" }] }),\n signal: AbortSignal.timeout(10000),\n });\n if (!r2.ok) supportsDeveloperRole = false;\n } catch { supportsDeveloperRole = false; }\n // 3. Image probe (1\u00D71 red PNG).\n let supportsImage = false;\n const tinyPng = \"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==\";\n try {\n const r3 = await fetch(endpoint, {\n method: \"POST\", headers,\n body: JSON.stringify({\n model: modelId, max_tokens: 2,\n messages: [{ role: \"user\", content: [{ type: \"text\", text: \"what\" }, { type: \"image_url\", image_url: { url: `data:image/png;base64,${tinyPng}` } }] }],\n }),\n signal: AbortSignal.timeout(10000),\n });\n if (r3.ok) supportsImage = true;\n } catch { /* image not supported */ }\n // Assemble result.\n const compat: Record<string, unknown> = {};\n if (!supportsDeveloperRole) compat.supportsDeveloperRole = false;\n if (reasoning) {\n compat.thinkingFormat = \"deepseek\";\n compat.requiresReasoningContentOnAssistantMessages = true;\n }\n const input = supportsImage ? [\"text\", \"image\"] : [\"text\"];\n return { ok: true, compat, input, reasoning };\n });\n\n srv.registerMethod(\"models.save\", (params) => {\n const providers = (params as { providers?: unknown } | undefined)?.providers;\n if (!Array.isArray(providers)) throw new Error(\"providers must be an array\");\n vagModels.write(providers as Parameters<VagModelsStore[\"write\"]>[0]);\n vagModels.backup();\n return vagModels.read();\n });\n srv.registerMethod(\"models.test\", async (params) => {\n const { baseUrl, api, apiKey, model } = (params ?? {}) as { baseUrl?: unknown; api?: unknown; apiKey?: unknown; model?: unknown };\n const url = String(baseUrl ?? \"\").replace(/\\/+$/, \"\");\n if (url === \"\") throw new Error(\"baseUrl required\");\n const apiType = String(api ?? \"openai-completions\");\n const modelId = String(model ?? \"\");\n const probe = probeRequestFor(apiType, url, String(apiKey ?? \"\"), modelId);\n if (!probe) throw new Error(`Unsupported API type: ${apiType}`);\n const { endpoint, headers } = probe;\n // Per-API-format body shape.\n let body: unknown;\n if (apiType === \"anthropic-messages\") {\n body = { model: modelId, max_tokens: 1, messages: [{ role: \"user\", content: \"ping\" }] };\n } else if (apiType === \"openai-responses\") {\n body = { model: modelId, input: \"ping\", max_output_tokens: 1 };\n } else if (apiType === \"google-generative-ai\") {\n body = { contents: [{ role: \"user\", parts: [{ text: \"ping\" }] }] };\n } else {\n body = { model: modelId, max_tokens: 1, messages: [{ role: \"user\", content: \"ping\" }] };\n }\n try {\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(10000),\n });\n const status = res.status;\n let bodyText = \"\";\n try { bodyText = await res.text(); } catch { /* non-JSON body */ }\n // Model-level precision: an endpoint that responds means the address\n // and key are fine, but if the error says the *model* is unknown the\n // test must fail for that model specifically.\n const lower = bodyText.toLowerCase();\n const modelMissing =\n /model.{0,60}(not found|does not exist|not support|not available|invalid|not_found)|(does not exist|unknown model|no such model|invalid model|model_not_found|not_found_error)/.test(lower);\n if (status >= 200 && status < 300) return { ok: true, status };\n if (status === 401 || status === 403) return { ok: false, status, reason: \"auth\" };\n if (modelMissing) return { ok: false, status, reason: \"model\" };\n // Any other response < 500: reachable + auth accepted, only the probe\n // shape is off \u2014 count as connected.\n return { ok: status < 500, status };\n } catch {\n return { ok: false, status: 0 };\n }\n });\n srv.registerMethod(\"credentials.set\", (params) => {\n const { providerId, apiKey } = (params ?? {}) as { providerId?: unknown; apiKey?: unknown };\n return host.setRuntimeApiKey(requireString(providerId, \"providerId\"), requireString(apiKey, \"apiKey\"));\n });\n srv.registerMethod(\"credentials.remove\", (params) => {\n const { providerId } = (params ?? {}) as { providerId?: unknown };\n return host.removeRuntimeApiKey(requireString(providerId, \"providerId\"));\n });\n\n // \u2500\u2500 session ops (pi GUI parity: /model /session /name /compact /queue) \u2500\u2500\n srv.registerMethod(\"session.model.set\", (params) => {\n const { sessionId, providerId, modelId } = (params ?? {}) as { sessionId?: unknown; providerId?: unknown; modelId?: unknown };\n return host.setActiveModel(requireString(sessionId, \"sessionId\"), requireString(providerId, \"providerId\"), requireString(modelId, \"modelId\"));\n });\n srv.registerMethod(\"session.thinking.set\", (params) => {\n const { sessionId, level } = (params ?? {}) as { sessionId?: unknown; level?: unknown };\n host.setThinkingLevel(requireString(sessionId, \"sessionId\"), requireString(level, \"level\"));\n return { ok: true };\n });\n srv.registerMethod(\"session.info\", (params) => {\n const { sessionId } = (params ?? {}) as { sessionId?: unknown };\n return host.getSessionInfo(requireString(sessionId, \"sessionId\"));\n });\n srv.registerMethod(\"session.rename\", (params) => {\n const { sessionId, name } = (params ?? {}) as { sessionId?: unknown; name?: unknown };\n return host.setSessionName(requireString(sessionId, \"sessionId\"), requireString(name, \"name\"));\n });\n\n // Rename a *historical* session (no activation needed) by file path.\n srv.registerMethod(\"session.renameFile\", (params) => {\n const { sessionFile, name } = (params ?? {}) as { sessionFile?: unknown; name?: unknown };\n return host.renameSessionFile(requireString(sessionFile, \"sessionFile\"), requireString(name, \"name\"));\n });\n\n // Delete a historical session (file + index row).\n srv.registerMethod(\"session.delete\", (params) => {\n const { sessionFile, sessionId } = (params ?? {}) as { sessionFile?: unknown; sessionId?: unknown };\n return host.deleteSession(\n requireString(sessionFile, \"sessionFile\"),\n typeof sessionId === \"string\" && sessionId.length > 0 ? sessionId : undefined,\n );\n });\n\n // Archive a session (moves its file into the daemon's archived dir).\n srv.registerMethod(\"session.archive\", (params) => {\n const sessionFile = requireString((params as { sessionFile?: unknown } | undefined)?.sessionFile, \"sessionFile\");\n return host.archiveSession(sessionFile);\n });\n\n // Restore an archived session (moves its file back under sessions/).\n srv.registerMethod(\"session.restore\", (params) => {\n const sessionFile = requireString((params as { sessionFile?: unknown } | undefined)?.sessionFile, \"sessionFile\");\n return host.restoreSession(sessionFile);\n });\n\n // Permanently delete an archived session file.\n srv.registerMethod(\"session.deleteArchived\", (params) => {\n const sessionFile = requireString((params as { sessionFile?: unknown } | undefined)?.sessionFile, \"sessionFile\");\n return host.deleteArchivedSession(sessionFile);\n });\n\n // Pin/unpin a session (persisted in stateDir/config.json under `pins`).\n srv.registerMethod(\"session.pin\", (params) => {\n const { sessionFile, pinned } = (params ?? {}) as { sessionFile?: unknown; pinned?: unknown };\n const file = requireString(sessionFile, \"sessionFile\");\n const pins = (config.read().pins as string[] | undefined) ?? [];\n const next = pinned === true ? [...new Set([...pins, file])] : pins.filter((p) => p !== file);\n config.update({ pins: next });\n return { pins: next };\n });\n srv.registerMethod(\"session.pins\", () => {\n return (config.read().pins as string[] | undefined) ?? [];\n });\n srv.registerMethod(\"session.compact\", (params) => {\n const { sessionId, customInstructions } = (params ?? {}) as { sessionId?: unknown; customInstructions?: unknown };\n return host.compactSession(\n requireString(sessionId, \"sessionId\"),\n typeof customInstructions === \"string\" && customInstructions.length > 0 ? customInstructions : undefined,\n );\n });\n srv.registerMethod(\"session.steer\", (params) => {\n const { sessionId, text } = (params ?? {}) as { sessionId?: unknown; text?: unknown };\n return host.steerSession(requireString(sessionId, \"sessionId\"), requireString(text, \"text\"));\n });\n srv.registerMethod(\"session.followUp\", (params) => {\n const { sessionId, text } = (params ?? {}) as { sessionId?: unknown; text?: unknown };\n return host.followUpSession(requireString(sessionId, \"sessionId\"), requireString(text, \"text\"));\n });\n\n // Cancel a message still waiting in the steering queue (by exact text).\n srv.registerMethod(\"session.cancelQueued\", (params) => {\n const { sessionId, text } = (params ?? {}) as { sessionId?: unknown; text?: unknown };\n return host.cancelQueuedMessage(requireString(sessionId, \"sessionId\"), requireString(text, \"text\"));\n });\n srv.registerMethod(\"session.abort\", (params) => {\n const { sessionId } = (params ?? {}) as { sessionId?: unknown };\n return host.abortSession(requireString(sessionId, \"sessionId\"));\n });\n srv.registerMethod(\"session.abortCompaction\", (params) => {\n const { sessionId } = (params ?? {}) as { sessionId?: unknown };\n host.abortCompaction(requireString(sessionId, \"sessionId\"));\n return { ok: true };\n });\n\n // \u2500\u2500 file-edit revert (session file baseline \u2014 git-free checkpoint) \u2500\u2500\n srv.registerMethod(\"tool.revert\", async (params) => {\n const { sessionId, file } = (params ?? {}) as { sessionId?: unknown; file?: unknown };\n const f = requireString(file, \"file\");\n return await host.revertFile(requireString(sessionId, \"sessionId\"), f);\n });\n\n // \u2500\u2500 per-turn batch revert (undo whole turn; atomic check-then-write) \u2500\u2500\n srv.registerMethod(\"tool.revertBatch\", async (params) => {\n const { sessionId, files } = (params ?? {}) as { sessionId?: unknown; files?: unknown };\n const sessionIdStr = requireString(sessionId, \"sessionId\");\n if (!Array.isArray(files)) throw new Error(\"files must be an array of file paths\");\n return await host.revertFiles(sessionIdStr, files.map((f) => requireString(f, \"files[]\")));\n });\n\n // \u2500\u2500 tree / fork / export (pi GUI parity: /tree /fork /export /copy) \u2500\u2500\n srv.registerMethod(\"session.forkPoints\", (params) => {\n const { sessionId } = (params ?? {}) as { sessionId?: unknown };\n return host.listForkPoints(requireString(sessionId, \"sessionId\"));\n });\n srv.registerMethod(\"session.tree\", (params) => {\n const { sessionId } = (params ?? {}) as { sessionId?: unknown };\n return host.getSessionTree(requireString(sessionId, \"sessionId\"));\n });\n srv.registerMethod(\"session.navigate\", (params) => {\n const { sessionId, targetId, summarize, customInstructions } = (params ?? {}) as {\n sessionId?: unknown;\n targetId?: unknown;\n summarize?: unknown;\n customInstructions?: unknown;\n };\n return host.navigateToTreeNode(\n requireString(sessionId, \"sessionId\"),\n requireString(targetId, \"targetId\"),\n {\n summarize: summarize === true ? true : undefined,\n customInstructions:\n typeof customInstructions === \"string\" && customInstructions.length > 0 ? customInstructions : undefined,\n },\n );\n });\n srv.registerMethod(\"session.export\", (params) => {\n const { sessionId, outputPath } = (params ?? {}) as { sessionId?: unknown; outputPath?: unknown };\n return host.exportSession(\n requireString(sessionId, \"sessionId\"),\n typeof outputPath === \"string\" && outputPath.length > 0 ? outputPath : undefined,\n );\n });\n srv.registerMethod(\"session.lastAssistant\", (params) => {\n const { sessionId } = (params ?? {}) as { sessionId?: unknown };\n return host.getLastAssistantText(requireString(sessionId, \"sessionId\"));\n });\n\n // \u2500\u2500 generic daemon config (stateDir/config.json) \u2500\u2500\n srv.registerMethod(\"config.get\", () => config.read());\n srv.registerMethod(\"config.set\", (params) => {\n const patch = (params ?? {}) as Record<string, unknown>;\n const next: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(patch)) {\n if (value === undefined) continue;\n next[key] = value;\n }\n return config.update(next);\n });\n\n // \u2500\u2500 pi packages (pi install npm:... / git:... \u2014 same as the TUI CLI) \u2500\u2500\n // Install/uninstall go through pi's own PackageManager (SDK), which\n // persists to settings.json `packages` \u2014 exactly what `pi install` does.\n srv.registerMethod(\"plugin.list\", () => plugins.list());\n srv.registerMethod(\"plugin.install\", async (params) => {\n const source = requireString((params as { source?: unknown } | undefined)?.source, \"source\");\n const result = await plugins.install(source);\n // Auto-reload active sessions so the agent immediately sees the newly\n // installed package's extensions/tools/skills (no manual /reload needed).\n if (result.ok) void host.reloadSession().catch(() => {});\n return result;\n });\n srv.registerMethod(\"plugin.uninstall\", async (params) => {\n const source = requireString((params as { source?: unknown } | undefined)?.source, \"source\");\n const result = await plugins.uninstall(source);\n if (result.ok) void host.reloadSession().catch(() => {});\n return result;\n });\n\n // \u2500\u2500 MCP server config (mcp.json, read by the built-in MCP extension) \u2500\u2500\n srv.registerMethod(\"mcp.list\", (params) => {\n const p = (params ?? {}) as { scope?: unknown; cwd?: unknown };\n const scope = p.scope === \"project\" ? \"project\" : \"user\";\n const cwd = typeof p.cwd === \"string\" ? p.cwd : undefined;\n return plugins.mcpList(scope, cwd);\n });\n srv.registerMethod(\"mcp.add\", (params) => {\n const p = (params ?? {}) as { name?: unknown; config?: unknown; scope?: unknown; cwd?: unknown };\n return plugins.mcpAdd({\n name: requireString(p.name, \"name\"),\n config: typeof p.config === \"object\" && p.config !== null ? (p.config as Record<string, unknown>) : {},\n scope: p.scope === \"project\" ? \"project\" : \"user\",\n cwd: typeof p.cwd === \"string\" ? p.cwd : undefined,\n });\n });\n srv.registerMethod(\"mcp.remove\", (params) => {\n const p = (params ?? {}) as { name?: unknown; scope?: unknown; cwd?: unknown };\n return plugins.mcpRemove(\n requireString(p.name, \"name\"),\n p.scope === \"project\" ? \"project\" : \"user\",\n typeof p.cwd === \"string\" ? p.cwd : undefined,\n );\n });\n srv.registerMethod(\"mcp.update\", (params) => {\n const p = (params ?? {}) as { name?: unknown; config?: unknown; scope?: unknown; cwd?: unknown };\n return plugins.mcpUpdate({\n name: requireString(p.name, \"name\"),\n config: typeof p.config === \"object\" && p.config !== null ? (p.config as Record<string, unknown>) : {},\n scope: p.scope === \"project\" ? \"project\" : \"user\",\n cwd: typeof p.cwd === \"string\" ? p.cwd : undefined,\n });\n });\n };\n\n // Wire the stdio server and transport together without circular init.\n let server: JsonRpcServer | undefined;\n const transport = new StdioTransport((frame) => {\n if (server) void server.handleFrame(frame);\n });\n server = new JsonRpcServer({ send: (frame) => transport.send(frame) });\n registerMethods(server);\n\n // The GUI attaches over a local WebSocket on the same protocol. When\n // VAGUS_GUI_DIR points at a built UI, the daemon serves it over HTTP on\n // the same port (one process, one port \u2014 see WsServerHost).\n const wsPort = Number(process.env.VAGUS_WS_PORT ?? \"19707\");\n const wsHost = new WsServerHost();\n wsHost.listen({\n port: wsPort,\n registerMethods,\n staticDir: process.env.VAGUS_GUI_DIR,\n });\n\n // Forward engine events to wire: stdio (headless) + WebSocket (GUI).\n bus.subscribeAll((_name, event) => {\n server?.emit(event as DomainEvent);\n wsHost.broadcast(event as DomainEvent);\n });\n\n let shuttingDown = false;\n const shutdown = (): void => {\n if (shuttingDown) return;\n shuttingDown = true;\n void (async () => {\n try {\n wsHost.close();\n await host.close();\n } finally {\n transport.close();\n process.exit(0);\n }\n })();\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n transport.start();\n process.stderr.write(`pi-web daemon ready (state: ${stateDir})\\n`);\n // Run until killed; shutdown is handled by the signal handlers above.\n return new Promise<number>(() => {});\n}\n", "import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\n/**\n * Daemon configuration store.\n *\n * A small JSON file (`<stateDir>/config.json`) holding runtime-tunable\n * settings for the daemon. Generic key/value \u2014 the daemon reads it live, so\n * changes take effect without a restart.\n *\n * Settings are deliberately few and operational; UI preferences (theme\u2026)\n * stay in the client (localStorage), since multiple clients may connect.\n */\n\nexport interface VagusConfig {\n [key: string]: unknown;\n}\n\nconst DEFAULT_CONFIG: VagusConfig = {};\n\nexport class ConfigStore {\n private readonly file: string;\n private readonly defaults: VagusConfig;\n\n constructor(options: { dir: string; defaults?: VagusConfig }) {\n this.file = join(options.dir, \"config.json\");\n this.defaults = options.defaults ?? DEFAULT_CONFIG;\n }\n\n /** Loads the current config, merging defaults (missing file \u2192 defaults). */\n read(): VagusConfig {\n try {\n const raw = readFileSync(this.file, \"utf8\") as string;\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n return { ...this.defaults, ...parsed };\n } catch {\n return { ...this.defaults };\n }\n }\n\n /** Persists a partial update, returning the merged result. */\n update(patch: Record<string, unknown>): VagusConfig {\n const next = { ...this.read(), ...patch };\n mkdirSync(dirname(this.file), { recursive: true });\n writeFileSync(this.file, `${JSON.stringify(next, null, 2)}\\n`, \"utf8\");\n return next;\n }\n}\n", "/**\n * Typed in-process event bus.\n *\n * The bus is the core's \"single source of truth\" (ADR-003 / ADR-010): every\n * state transition is emitted here and projected outward to frontends via the\n * protocol layer. Keeping the bus generic over an event map means each manager\n * gets full type safety without a monolithic event registry.\n */\n\n/** Maps event names to their payload types. */\nexport interface EventMap {\n [name: string]: unknown;\n}\n\n/** Listener contract; async listeners are awaited by {@link EventBus.emit}. */\nexport type EventListener<E> = (event: E) => void | Promise<void>;\n\n/** Optional sink for listener errors (defaults to rethrow via queueMicrotask). */\nexport type ErrorHandler = (error: unknown, eventName: string) => void;\n\n/** Listener for every event name, regardless of subscription time. */\nexport type AllEventsListener<M extends EventMap> = (name: keyof M, event: M[keyof M]) => void | Promise<void>;\n\ninterface Entry<E> {\n fn: EventListener<E>;\n once: boolean;\n}\n\nexport class EventBus<M extends EventMap> {\n private readonly entries = new Map<keyof M, Set<Entry<M[keyof M]>>>();\n private readonly allListeners = new Set<AllEventsListener<M>>();\n private errorHandler: ErrorHandler | undefined;\n\n /**\n * Registers a callback invoked whenever `name` is emitted.\n * @returns an unsubscribe function.\n */\n subscribe<K extends keyof M>(name: K, fn: EventListener<M[K]>): () => void {\n return this.add(name, { fn: fn as EventListener<M[keyof M]>, once: false });\n }\n\n /**\n * Registers a callback invoked at most once.\n * @returns an unsubscribe function (safe to call after firing).\n */\n once<K extends keyof M>(name: K, fn: EventListener<M[K]>): () => void {\n return this.add(name, { fn: fn as EventListener<M[keyof M]>, once: true });\n }\n\n /**\n * Registers a callback invoked for every emitted event (used by the daemon\n * to forward engine events onto the wire).\n * @returns an unsubscribe function.\n */\n subscribeAll(listener: AllEventsListener<M>): () => void {\n this.allListeners.add(listener);\n return () => this.allListeners.delete(listener);\n }\n\n /**\n * Emits an event to all subscribers. Listeners run sequentially and are\n * awaited; a throwing listener is isolated (reported via the error handler)\n * and does not prevent the remaining listeners from running.\n */\n async emit<K extends keyof M>(name: K, event: M[K]): Promise<void> {\n const named = this.entries.get(name) ? Array.from(this.entries.get(name)!) : [];\n const all = Array.from(this.allListeners);\n // Sequential, ordered delivery is intentional: async listeners read shared\n // state, so ordering must be deterministic (see ADR-010).\n /* oxlint-disable no-await-in-loop */\n for (const entry of named) {\n if (entry.once) {\n this.remove(name, entry);\n }\n try {\n await entry.fn(event);\n } catch (error) {\n this.reportError(error, String(name));\n }\n }\n for (const listener of all) {\n try {\n await listener(name, event);\n } catch (error) {\n this.reportError(error, String(name));\n }\n }\n }\n\n /** Number of subscribers for a given event name. */\n listenerCount<K extends keyof M>(name: K): number {\n return this.entries.get(name)?.size ?? 0;\n }\n\n /** Names with at least one subscriber (used for event forwarding). */\n eventNames(): Array<keyof M> {\n return [...this.entries.keys()];\n }\n\n /** Removes all subscribers across every event name. */\n clear(): void {\n this.entries.clear();\n this.allListeners.clear();\n }\n\n /** Overrides the error handler used for listener failures. */\n onError(handler: ErrorHandler): void {\n this.errorHandler = handler;\n }\n\n private add<K extends keyof M>(name: K, entry: Entry<M[keyof M]>): () => void {\n let set = this.entries.get(name);\n if (!set) {\n set = new Set();\n this.entries.set(name, set);\n }\n set.add(entry);\n return () => this.remove(name, entry);\n }\n\n private remove<K extends keyof M>(name: K, entry: Entry<M[keyof M]>): void {\n const set = this.entries.get(name);\n if (!set) return;\n set.delete(entry);\n if (set.size === 0) this.entries.delete(name);\n }\n\n private reportError(error: unknown, eventName: string): void {\n if (this.errorHandler) {\n this.errorHandler(error, eventName);\n return;\n }\n // Default: surface async so it cannot break the emit call stack.\n queueMicrotask(() => {\n throw error;\n });\n }\n}\n", "import { copyFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport type { ApiType, CompatConfig, ProviderConfig } from \"@vagus/protocol\";\n\n/**\n * Vagus models.json configuration (M5 parity).\n *\n * Vagus model store \u2014 format compatible with pi's models.json so the\n * format compatible with pi's models.json (docs/models.md).\n * Schema mirrors pi's provider/model format.\n * writes is immediately usable by pi \u2014 no translation layer, no drift.\n *\n * The daemon owns file access (host side); the GUI talks to it over RPC.\n */\n\nexport interface ModelsFile {\n providers: Record<string, ProviderConfig>;\n}\n\n/** Normalizes a compat object read from disk (provider- or model-level). */\nfunction normalizeCompat(raw: Record<string, unknown> | undefined): CompatConfig | undefined {\n if (!raw || typeof raw !== \"object\") return undefined;\n const out: CompatConfig = {};\n if (typeof (raw as { supportsDeveloperRole?: unknown }).supportsDeveloperRole === \"boolean\") {\n out.supportsDeveloperRole = (raw as { supportsDeveloperRole?: boolean }).supportsDeveloperRole;\n }\n if (typeof (raw as { supportsReasoningEffort?: unknown }).supportsReasoningEffort === \"boolean\") {\n out.supportsReasoningEffort = (raw as { supportsReasoningEffort?: boolean }).supportsReasoningEffort;\n }\n if (typeof (raw as { thinkingFormat?: unknown }).thinkingFormat === \"string\") {\n out.thinkingFormat = (raw as { thinkingFormat?: string }).thinkingFormat;\n }\n if (typeof (raw as { requiresReasoningContentOnAssistantMessages?: unknown }).requiresReasoningContentOnAssistantMessages === \"boolean\") {\n out.requiresReasoningContentOnAssistantMessages = (raw as { requiresReasoningContentOnAssistantMessages?: boolean }).requiresReasoningContentOnAssistantMessages;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\n/** Normalizes a provider object read from disk into a typed shape. */\nfunction normalizeProvider(id: string, raw: Record<string, unknown>): ProviderConfig {\n const models = Array.isArray(raw.models)\n ? (raw.models as Record<string, unknown>[]).map((m) => ({\n id: String(m.id ?? \"\"),\n name: typeof m.name === \"string\" ? m.name : undefined,\n api: typeof m.api === \"string\" ? (m.api as ApiType) : undefined,\n reasoning: m.reasoning === true ? true : undefined,\n input: Array.isArray(m.input) ? m.input.map(String) : undefined,\n contextWindow: typeof m.contextWindow === \"number\" ? m.contextWindow : undefined,\n maxTokens: typeof m.maxTokens === \"number\" ? m.maxTokens : undefined,\n cost:\n m.cost && typeof m.cost === \"object\"\n ? {\n input: Number((m.cost as { input?: unknown }).input ?? 0),\n output: Number((m.cost as { output?: unknown }).output ?? 0),\n cacheRead: typeof (m.cost as { cacheRead?: unknown }).cacheRead === \"number\"\n ? ((m.cost as { cacheRead?: unknown }).cacheRead as number)\n : undefined,\n cacheWrite: typeof (m.cost as { cacheWrite?: unknown }).cacheWrite === \"number\"\n ? ((m.cost as { cacheWrite?: unknown }).cacheWrite as number)\n : undefined,\n }\n : undefined,\n compat: normalizeCompat((m as { compat?: unknown }).compat as Record<string, unknown> | undefined),\n }))\n : [];\n return {\n id,\n enabled: raw.enabled === false ? false : undefined,\n baseUrl: typeof raw.baseUrl === \"string\" ? raw.baseUrl : \"\",\n api: typeof raw.api === \"string\" ? (raw.api as ApiType) : \"openai-completions\",\n apiKey: typeof raw.apiKey === \"string\" ? raw.apiKey : undefined,\n headers: typeof raw.headers === \"object\" && raw.headers !== null ? (raw.headers as Record<string, string>) : undefined,\n compat: normalizeCompat(raw.compat as Record<string, unknown> | undefined),\n models,\n };\n}\n\n/** Serializes a compat object (provider- or model-level). */\nfunction serializeCompat(compat: CompatConfig): Record<string, unknown> {\n return {\n ...(compat.supportsDeveloperRole !== undefined\n ? { supportsDeveloperRole: compat.supportsDeveloperRole }\n : {}),\n ...(compat.supportsReasoningEffort !== undefined\n ? { supportsReasoningEffort: compat.supportsReasoningEffort }\n : {}),\n ...(compat.thinkingFormat !== undefined\n ? { thinkingFormat: compat.thinkingFormat }\n : {}),\n ...(compat.requiresReasoningContentOnAssistantMessages !== undefined\n ? { requiresReasoningContentOnAssistantMessages: compat.requiresReasoningContentOnAssistantMessages }\n : {}),\n };\n}\n\n/** Serializes a provider back to the pi models.json shape. */\nexport function serializeProvider(provider: ProviderConfig): Record<string, unknown> {\n const out: Record<string, unknown> = {\n baseUrl: provider.baseUrl,\n api: provider.api,\n };\n if (provider.enabled !== undefined) out.enabled = provider.enabled;\n if (provider.apiKey) out.apiKey = provider.apiKey;\n if (provider.headers && Object.keys(provider.headers).length > 0) out.headers = provider.headers;\n if (provider.compat && Object.keys(provider.compat).length > 0) {\n out.compat = serializeCompat(provider.compat);\n }\n out.models = provider.models.map((m) => {\n const model: Record<string, unknown> = { id: m.id };\n if (m.name) model.name = m.name;\n if (m.api) model.api = m.api;\n if (m.reasoning) model.reasoning = true;\n if (m.input) model.input = m.input;\n if (m.contextWindow !== undefined) model.contextWindow = m.contextWindow;\n if (m.maxTokens !== undefined) model.maxTokens = m.maxTokens;\n if (m.cost) {\n model.cost = {\n input: m.cost.input,\n output: m.cost.output,\n ...(m.cost.cacheRead !== undefined ? { cacheRead: m.cost.cacheRead } : {}),\n ...(m.cost.cacheWrite !== undefined ? { cacheWrite: m.cost.cacheWrite } : {}),\n };\n }\n if (m.compat && Object.keys(m.compat).length > 0) {\n model.compat = serializeCompat(m.compat);\n }\n return model;\n });\n return out;\n}\n\n/**\n * Reads/writes models.json from the engine dir. Defaults to `~/.vagus`;\n * agent dir; tests inject a temp dir.\n */\nexport class VagModelsStore {\n constructor(private readonly engineDir: string) {}\n\n private get file(): string {\n return join(this.engineDir, \"models.json\");\n }\n\n /** Loads providers (missing file \u2192 empty). */\n read(): ProviderConfig[] {\n try {\n const raw = JSON.parse(readFileSync(this.file, \"utf8\")) as { providers?: Record<string, unknown> };\n if (!raw.providers || typeof raw.providers !== \"object\") return [];\n return Object.entries(raw.providers).map(([id, p]) => normalizeProvider(id, p as Record<string, unknown>));\n } catch {\n return [];\n }\n }\n\n /** Backs up models.json to models.json.bak. Called after every save. */\n backup(): void {\n if (existsSync(this.file)) {\n copyFileSync(this.file, this.bakFile);\n }\n }\n\n /** Restores models.json from the backup (if it exists). */\n restoreFromBackup(): boolean {\n if (!existsSync(this.bakFile)) return false;\n copyFileSync(this.bakFile, this.file);\n return true;\n }\n\n private get bakFile(): string {\n return `${this.file}.bak`;\n }\n\n /** Writes providers back as models.json (preserving unknown fields). */\n write(providers: ProviderConfig[]): void {\n // Merge with existing raw file so pi-specific fields the GUI doesn't\n // model (modelOverrides, oauth, samplingParams\u2026) survive a save.\n const existing = this.readRaw();\n const merged: Record<string, unknown> = { ...existing };\n const providersOut: Record<string, unknown> = {};\n for (const provider of providers) {\n const rawExisting = (existing.providers?.[provider.id] ?? {}) as Record<string, unknown>;\n providersOut[provider.id] = { ...rawExisting, ...serializeProvider(provider) };\n }\n merged.providers = providersOut;\n mkdirSync(dirname(this.file), { recursive: true });\n writeFileSync(this.file, `${JSON.stringify(merged, null, 2)}\\n`, \"utf8\");\n }\n\n private readRaw(): { providers?: Record<string, unknown> } {\n try {\n return JSON.parse(readFileSync(this.file, \"utf8\")) as { providers?: Record<string, unknown> };\n } catch {\n return {};\n }\n }\n}\n", "import { createAgentSession, DefaultResourceLoader, ModelRuntime, SessionManager, SettingsManager } from \"@earendil-works/pi-coding-agent\";\nimport type {\n AgentSession,\n CompactionResult,\n CreateAgentSessionOptions,\n CreateAgentSessionResult,\n ExtensionUIContext,\n} from \"@earendil-works/pi-coding-agent\";\nimport { homedir } from \"node:os\";\nimport { basename, dirname, isAbsolute, join, resolve } from \"node:path\";\nimport { appendFileSync, copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, writeFileSync } from \"node:fs\";\nimport type { EventBus } from \"@vagus/host-events\";\nimport type { CoreEventMap } from \"@vagus/host-events\";\nimport type { SessionHistoryItem, SessionMessage, UsageStats } from \"@vagus/protocol\";\nimport { computeToolDiff, extractToolDiff, extractToolPatch, extractToolPath, messageToText, parseContentBlocks, serializeToolArg, sessionEntryPreview, toolResultText, truncateDisplay } from \"./display-utils.js\";\nimport type { HistoryMessageLike, SessionEntryLike } from \"./display-utils.js\";\nimport { aggregateUsageStats } from \"./usage-stats.js\";\nimport { ExtensionUiBridge } from \"./ui-bridge.js\";\n\n/**\n * VagusEngine \u2014 the session engine (ADR-002/ADR-005).\n *\n * Wraps pi's SDK (`createAgentSession`) behind the engine's event bus and\n * session store. The model runtime is created *lazily* on the first session\n * so the daemon can boot without any provider credentials (users' existing\n * `~/.pi` auth is picked up automatically when a session is created).\n *\n * Sessions are pi's own append-only JSONL trees under the engine dir:\n * `createSession` starts a fresh tree, `resumeSession` reopens an existing\n * file (full context restored via SessionManager.open) \u2014 so the GUI's session\n * tree shows *real* history, not stubs.\n */\n\nexport interface ActiveSession {\n sessionId: string;\n cwd: string;\n /** Underlying session file on disk (undefined for test/in-memory sessions). */\n sessionFile?: string;\n}\n\nexport interface VagusEngineOptions {\n /** Working directory for pi's session manager. */\n cwd: string;\n bus: EventBus<CoreEventMap>;\n /** Engine config dir. Maps to pi's agentDir. Defaults to `~/.pi/agent`. */\n engineDir?: string;\n /** Injectable for tests. */\n modelRuntime?: ModelRuntime;\n /** Injectable for tests. */\n sessionManager?: SessionManager;\n /** Injectable for tests; defaults to pi's `createAgentSession`. */\n sessionFactory?: SessionFactory;\n /**\n * Names of global skills the user has disabled. When non-empty, the engine\n * builds the pi resource-loader with a `skillsOverride` that filters these\n * out of every session (so they never enter the system prompt). Falls back\n * to pi's default loader (no filtering) when empty/undefined.\n */\n disabledSkills?: () => string[];\n /**\n * Built-in extension paths loaded session-scoped (via the resource\n * loader's additionalExtensionPaths) \u2014 the web GUI's own capabilities\n * (MCP). These are NEVER written to settings.json so\n * other pi frontends (CLI, agent studio) stay unaffected.\n */\n builtinExtensionPaths?: string[];\n}\n\nexport type SessionFactory = (\n options: CreateAgentSessionOptions,\n) => Promise<CreateAgentSessionResult>;\n\n/** A file's pre-session baseline plus the content after the agent's last edit. */\ninterface FileBaseline {\n /** Content before the session's first edit of this file (revert target). */\n content: string;\n /** Whether the file existed before the session edited it. */\n exists: boolean;\n /** Content right after the agent's most recent edit of this file. */\n lastContent?: string;\n}\n\nexport class VagusEngine {\n private readonly sessions = new Map<string, AgentSession>();\n /**\n * Pre-tool file contents keyed by toolCallId, captured at tool_execution_start\n * for path-carrying tools (write/edit/multi_edit). Lets the engine compute its\n * own diff at tool end for tools that don't return pi's details.diff (e.g. write).\n */\n private readonly toolBaselines = new Map<string, { path: string; content: string }>();\n /**\n * Per-session file baselines for revert: sessionId \u2192 absPath \u2192 content as it\n * was BEFORE this session's first edit of that file. `exists: false` means\n * the file did not exist (revert deletes it). `lastContent` is the content\n * right after the agent's most recent edit \u2014 revert refuses to overwrite a\n * file the user has hand-modified since (current != lastContent). This is\n * the git-free checkpoint mechanism \u2014 restoring writes the snapshot back.\n */\n private readonly fileBaselines = new Map<string, Map<string, FileBaseline>>();\n private runtimePromise: Promise<ModelRuntime> | undefined;\n private readonly uiBridge: ExtensionUiBridge;\n\n constructor(private readonly options: VagusEngineOptions) {\n this.uiBridge = new ExtensionUiBridge(this.options.bus, () => this.agentDirPath());\n }\n\n /**\n * Extension UI bridge \u2014 lets web sessions answer `ctx.ui.confirm/select/\n * input` from extensions (pi RPC-style extension_ui_request sub-protocol).\n *\n * Each dialog emits a `ui.request` bus event (forwarded to the GUI over\n * WebSocket); the frontend renders the dialog and calls `resolveUi()` via\n * the `ui.respond` RPC. Fire-and-forget methods (notify/\u2026) are forwarded\n * as events with no pending promise.\n */\n createUiContext(sessionId: string): ExtensionUIContext {\n return this.uiBridge.createUiContext(sessionId);\n }\n\n /** Resolve a pending extension UI dialog (from the `ui.respond` RPC). */\n resolveUi(id: string, result: Record<string, unknown>): void {\n this.uiBridge.resolveUi(id, result);\n }\n\n /** Latest widget state (key \u2192 lines + owner session) for frontend re-hydration. */\n getWidgets(): Record<string, { lines: string[]; placement: string; sessionId: string }> {\n return this.uiBridge.getWidgets();\n }\n\n /** Pending extension dialogs (confirm/select/input) \u2014 still awaiting a\n * response after a page reload. Answered ones live on disk (ui.history). */\n getPendingUiRequests(): Array<{ id: string; request: Record<string, unknown> }> {\n return this.uiBridge.getPendingUiRequests();\n }\n\n /**\n * Answered extension dialogs, DURABLY persisted per session on disk\n * (`~/.pi/agent/ui-history/<sessionId>.jsonl`, NDJSON append). Survives\n * daemon restarts \u2014 the frontend restores read-only cards from here.\n */\n getUiHistory(): Record<string, Array<{ request: Record<string, unknown>; result: Record<string, unknown> }>> {\n return this.uiBridge.getUiHistory();\n }\n\n /**\n * Starts a pi session in `cwd` (closing any active session first, mirroring\n * pi's one-session-per-process model).\n */\n async createSession(cwd: string): Promise<ActiveSession> {\n return this.startSession({\n cwd,\n sessionManager: this.options.sessionManager ?? SessionManager.create(cwd),\n });\n }\n\n /**\n * Reopens a historical session file, restoring its full conversation\n * context (pi's SessionManager.open). The session becomes the active one\n * and streams into the bus exactly like a fresh session.\n *\n * If the session is already active (user switched away and back), it is\n * reused as-is \u2014 its agent keeps running in the background; recreating it\n * would fork the same file and clash with the live stream.\n */\n async resumeSession(sessionFile: string): Promise<ActiveSession> {\n for (const [sid, session] of this.sessions) {\n if (session.sessionManager?.getSessionFile() === sessionFile) {\n return {\n sessionId: sid,\n cwd: session.sessionManager.getCwd() || this.options.cwd,\n sessionFile: session.sessionManager.getSessionFile(),\n };\n }\n }\n const manager = SessionManager.open(sessionFile);\n const cwd = manager.getCwd() || this.options.cwd;\n return this.startSession({ cwd, sessionManager: manager });\n }\n\n /**\n * Reads the current conversation path of a session file (root \u2192 leaf),\n * serialized for UI display. Does not activate the session.\n *\n * The serialization preserves everything the live stream showed: assistant\n * thinking blocks become `thinking`, tool calls become `toolCalls` (matched\n * to their results via toolCallId), and plain text stays `text` \u2014 so a\n * reloaded session renders identically to the live conversation.\n */\n readSessionMessages(sessionFile: string): SessionMessage[] {\n const { entries, persistedDiffs } = this.openSessionForRead(sessionFile);\n return this.buildMessageViews(entries, persistedDiffs);\n }\n\n /**\n * Lazy-loads a window of a session's messages. Returns the TAIL of the\n * conversation first (the latest `limit` visible messages); scrolling up\n * requests earlier pages via `beforeIndex`. Only the window's entries are\n * turned into views, so opening a huge session no longer pays to parse and\n * render every message.\n */\n readSessionPage(\n sessionFile: string,\n opts: { limit: number; beforeIndex?: number },\n ): { messages: SessionMessage[]; total: number; startIndex: number; hasMore: boolean } {\n const { entries, persistedDiffs } = this.openSessionForRead(sessionFile);\n\n // A \"visible\" view excludes toolResult entries (they fold into the tool\n // call that declared them). Count them so we can locate the window in\n // entry-space without building full views for out-of-window content.\n const visibleEntryIdx: number[] = [];\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]!;\n if (entry.type === \"compaction\" || entry.type === \"branch_summary\") {\n visibleEntryIdx.push(i);\n continue;\n }\n if (entry.type !== \"message\" || !entry.message) continue;\n const role = String(entry.message.role);\n if (role !== \"toolResult\") visibleEntryIdx.push(i);\n }\n const total = visibleEntryIdx.length;\n const endVisible = opts.beforeIndex ?? total; // exclusive end in view-space\n const startVisible = Math.max(0, endVisible - opts.limit);\n const startEntry = visibleEntryIdx[startVisible] ?? 0;\n const endEntry = endVisible < total ? (visibleEntryIdx[endVisible] ?? entries.length) : entries.length;\n const messages = this.buildMessageViews(entries.slice(startEntry, endEntry), persistedDiffs);\n return {\n messages,\n total,\n startIndex: startVisible,\n hasMore: startVisible > 0,\n };\n }\n\n /** Shared session-open plumbing for the read methods above. */\n private openSessionForRead(sessionFile: string): { entries: SessionEntryLike[]; persistedDiffs: Map<string, { result: string; isError: boolean; diff?: string; patch?: string }> } {\n // Multi-session: prefer the in-memory branch of the active session that\n // owns this file \u2014 it reflects the live stream, not just what has been\n // flushed to disk (pi writes JSONL at message end, so the file can lag\n // behind the stream when switching back to a running session).\n let manager: SessionManager | undefined;\n for (const [, session] of this.sessions) {\n if (session.sessionManager?.getSessionFile() === sessionFile) {\n manager = session.sessionManager;\n break;\n }\n }\n if (!manager) manager = SessionManager.open(sessionFile);\n const entries = manager.getBranch();\n\n // Persisted diffs (git-free snapshot store) \u2014 the JSONL toolResult entries\n // don't carry details.diff, so refresh/history would lose the red/green\n // view without this fallback.\n const sessionId = manager.getSessionId?.() ?? \"\";\n const persistedDiffs = sessionId !== \"\" ? this.loadToolDiffs(sessionId) : new Map();\n return { entries, persistedDiffs };\n }\n\n /** Turn raw session entries into display views (shared by full + paged reads). */\n private buildMessageViews(entries: SessionEntryLike[], persistedDiffs: Map<string, { result: string; isError: boolean; diff?: string; patch?: string }>): SessionMessage[] {\n // First pass: collect all toolResults by id (they arrive after the\n // assistant message that declared the call).\n const resultsById = new Map<string, { result: string; isError: boolean; diff?: string; patch?: string }>();\n for (const entry of entries) {\n if (entry.type !== \"message\" || !entry.message) continue;\n const m = entry.message as { role?: unknown; toolCallId?: unknown; isError?: unknown; details?: { diff?: unknown; patch?: unknown } };\n if (String(m.role) === \"toolResult\" && typeof m.toolCallId === \"string\") {\n const diff = m.details?.diff;\n const patch = m.details?.patch;\n const persisted = persistedDiffs.get(m.toolCallId);\n resultsById.set(m.toolCallId, {\n result: messageToText(entry.message as HistoryMessageLike),\n isError: m.isError === true,\n ...(typeof diff === \"string\" && diff.trim() !== \"\" ? { diff: truncateDisplay(diff, 20_000) } : {}),\n ...(typeof patch === \"string\" && patch.trim() !== \"\" ? { patch: truncateDisplay(patch, 40_000) } : {}),\n ...(!diff && persisted?.diff ? { diff: persisted.diff } : {}),\n ...(!patch && persisted?.patch ? { patch: persisted.patch } : {}),\n });\n }\n }\n\n // Second pass: build views, matching toolResults by id, and compute each\n // turn's total duration (user question \u2192 final conclusion) from entry\n // timestamps so reloaded sessions show the same work-block timings.\n const views: SessionMessage[] = [];\n let turnStartTs: number | undefined;\n let turnLastView = -1;\n let turnLastTs = 0;\n const closeTurn = (): void => {\n if (turnStartTs !== undefined && turnLastView >= 0 && turnLastView < views.length) {\n views[turnLastView]!.turnDurationMs = Math.max(0, turnLastTs - turnStartTs);\n }\n turnStartTs = undefined;\n turnLastView = -1;\n };\n for (const entry of entries) {\n // Compaction / branch-summary entries become a visible system note. The\n // summary text itself is NOT shown \u2014 the UI only renders a compact\n // \"context was summarized\" marker (token counts are only available on\n // the live compact call, not from the JSONL).\n if (entry.type === \"compaction\" || entry.type === \"branch_summary\") {\n views.push({ role: \"system\", text: \"\u25CC \u524D\u6587\u5DF2\u6458\u8981\" });\n continue;\n }\n if (entry.type !== \"message\" || !entry.message) continue;\n const role = String(entry.message.role);\n if (role === \"toolResult\") continue; // already folded into toolCalls\n\n const entryTs = new Date(entry.timestamp).getTime();\n if (role === \"user\") closeTurn(); // a new question ends the previous turn\n\n const parsed = parseContentBlocks(entry.message as HistoryMessageLike);\n const view: SessionMessage = { role, text: parsed.text };\n if (parsed.images.length > 0) view.images = parsed.images;\n if (parsed.thinking) view.thinking = truncateDisplay(parsed.thinking);\n if (parsed.toolCalls.length > 0) {\n view.toolCalls = parsed.toolCalls.map((call) => {\n const matched = resultsById.get(call.id);\n return {\n id: call.id,\n name: call.name,\n args: truncateDisplay(call.args),\n ...(matched\n ? {\n result: truncateDisplay(matched.result),\n isError: matched.isError,\n ...(matched.diff !== undefined ? { diff: matched.diff } : {}),\n ...(matched.patch !== undefined ? { patch: matched.patch } : {}),\n }\n : {}),\n };\n });\n }\n views.push(view);\n if (role === \"user\") turnStartTs = entryTs;\n if (!Number.isNaN(entryTs)) {\n turnLastView = views.length - 1;\n turnLastTs = entryTs;\n }\n }\n closeTurn();\n return views;\n }\n\n /**\n * Lists historical sessions for a cwd from pi's session store (most recent\n * first). Wraps `SessionManager.list`, which reads the JSONL session files\n * on disk \u2014 the GUI session tree is backed by real pi history.\n */\n async listHistory(cwd?: string): Promise<SessionHistoryItem[]> {\n try {\n // List across ALL project dirs (the sidebar groups by cwd). The cwd\n // arg is kept for API compat but pi's listAll covers every workspace.\n const infos = await SessionManager.listAll();\n return infos\n .filter((info) => (cwd === undefined ? true : info.cwd === cwd))\n .map((info) => ({\n id: info.id,\n path: info.path,\n name: info.name,\n cwd: info.cwd,\n created: info.created.toISOString(),\n modified: info.modified.toISOString(),\n messageCount: info.messageCount,\n firstMessage: info.firstMessage,\n }));\n } catch {\n // No sessions yet (fresh pi store) \u2014 treat as empty history.\n return [];\n }\n }\n\n /**\n * Aggregates token/cost usage across all persisted sessions (pi JSONL).\n * Each assistant message carries a `usage` record (tokens + cost); this\n * sums them per session and per model. Used by the settings usage panel.\n */\n async getUsageStats(): Promise<UsageStats> {\n return aggregateUsageStats();\n }\n\n private async startSession(options: { cwd: string; sessionManager: SessionManager }): Promise<ActiveSession> {\n // Multi-session model: do NOT close other sessions here \u2014 switching chats\n // must let each session's agent keep running in the background. All\n // sessions are disposed together in close() when the daemon shuts down.\n\n const modelRuntime = await this.resolveRuntime();\n const factory = this.options.sessionFactory ?? createAgentSession;\n\n const agentDir = this.options.engineDir ?? process.env.PI_CODING_AGENT_DIR ?? join(homedir(), \".pi\", \"agent\");\n\n // When the user has disabled specific global skills or the web GUI ships\n // built-in extensions, build a resource loader that filters skills and/or\n // adds those extensions for THIS session only. Otherwise use pi's default\n // loader (reads settings.json + default discovery paths).\n const disabled = this.options.disabledSkills?.() ?? [];\n const builtinExts = this.options.builtinExtensionPaths ?? [];\n let resourceLoader: DefaultResourceLoader | undefined;\n if (disabled.length > 0 || builtinExts.length > 0) {\n const settingsManager = SettingsManager.create(options.cwd, agentDir);\n const disabledSet = new Set(disabled);\n const loader = new DefaultResourceLoader({\n cwd: options.cwd,\n agentDir,\n settingsManager,\n // Built-in capabilities load ONLY into web sessions \u2014 the shared\n // ~/.pi/agent/settings.json is never modified.\n additionalExtensionPaths: builtinExts.length > 0 ? builtinExts : undefined,\n ...(disabled.length > 0\n ? {\n // Filter user-disabled skills out of the session's system prompt.\n skillsOverride: (result) => ({\n ...result,\n skills: result.skills.filter((skill) => !disabledSet.has(skill.name)),\n }),\n }\n : {}),\n });\n await loader.reload();\n resourceLoader = loader;\n }\n\n const { session } = await factory({\n cwd: options.cwd,\n agentDir,\n modelRuntime,\n sessionManager: options.sessionManager,\n ...(resourceLoader ? { resourceLoader } : {}),\n });\n\n // SDK-created sessions never run the interactive/rpc boot path that emits\n // the `session_start` extension event. Extensions like pi-mcp-adapter rely\n // on it to initialize (connect servers, register tools) \u2014 without it they\n // stay in \"not initialized\" forever. bindExtensions emits session_start\n // (all bindings are optional), so call it once per session to give every\n // extension its startup signal.\n try {\n // onError is a real (no-op) binding so `hasBindings` is true \u2014\n // otherwise AgentSession.reload() would skip re-emitting session_start\n // and extensions (pi-mcp-adapter) could never be reloaded on an active\n // session after a config change. uiContext + mode \"rpc\" lets extensions\n // call ctx.ui.confirm/select/input \u2014 bridged to the web GUI.\n await session.bindExtensions({\n onError: () => {},\n uiContext: this.createUiContext(session.sessionId),\n mode: \"rpc\",\n });\n } catch {\n // Extensions must never break session startup \u2014 if a session_start\n // handler throws (e.g. a broken extension), the session still works;\n // that extension simply stays inactive for this session.\n }\n\n // Ensure the session is on a model with configured credentials. pi picks\n // a built-in default (e.g. openai/gpt-5.5) that the user likely has no\n // key for; switch to the first provider/model the user configured.\n await this.ensureConfiguredModel(session, modelRuntime);\n\n this.sessions.set(session.sessionId, session);\n this.forwardSessionMessages(session, session.sessionId);\n await this.options.bus.emit(\"session.created\", {\n type: \"session.created\",\n sessionId: session.sessionId,\n cwd: options.cwd,\n });\n return {\n sessionId: session.sessionId,\n cwd: options.cwd,\n sessionFile: options.sessionManager.getSessionFile(),\n };\n }\n\n /** Sends a prompt to the given session and records activity in the store. */\n async prompt(sessionId: string, text: string, images?: Array<{ dataUrl: string; mimeType: string }>): Promise<void> {\n const session = this.requireSession(sessionId);\n // Note: models.json is SHARED with the pi CLI \u2014 we never auto-restore it\n // from a backup here, or the web GUI would silently clobber config the\n // user changed in the TUI or by hand.\n await session.prompt(text, {\n // pi's provider prefixes data with `data:${mimeType};base64,` itself, so\n // pass the RAW base64 \u2014 sending the full data URL would double the prefix\n // and break image requests (e.g. minimax 404s on malformed image data).\n images: images?.map((img) => ({ type: \"image\" as const, data: img.dataUrl.replace(/^data:[^;]+;base64,/, \"\"), mimeType: img.mimeType })),\n // When the agent is streaming, steer the current turn: the new message\n // is delivered as soon as the running tool call finishes (automatic\n // guidance \u2014 same behavior as the VS Code plugin).\n streamingBehavior: \"steer\",\n });\n }\n\n /** Returns the active tool names for a running session. */\n listSessionTools(sessionId: string): string[] {\n const session = this.requireSession(sessionId);\n return session.getActiveToolNames();\n }\n\n /**\n * Returns the available slash commands for a session: extension commands\n * (pi.registerCommand) + prompt templates. Mirrors pi's own RPC\n * `get_commands` handler (which reads session.extensionRunner / promptTemplates).\n *\n * Skills are merged on the daemon side (listAllSkills). Web-native builtins\n * (compact/new/model/...) are routed by the frontend to engine RPCs, since\n * `session.prompt()` only dispatches extension commands + skill/template\n * expansion \u2014 builtin slash commands are TUI-only.\n */\n listCommands(sessionId?: string): { extensions: Array<{ name: string; description?: string }>; templates: Array<{ name: string; description?: string }> } {\n let session: AgentSession | undefined;\n try {\n session = sessionId ? this.requireSession(sessionId) : (this.sessions.values().next().value as AgentSession | undefined);\n } catch {\n session = undefined;\n }\n if (!session) return { extensions: [], templates: [] };\n try {\n // Session internals \u2014 same fields pi's RPC server reads for get_commands.\n const internals = session as unknown as {\n extensionRunner?: { getRegisteredCommands(): Array<{ invocationName: string; description?: string }> };\n promptTemplates?: Array<{ name: string; description?: string }>;\n };\n const extensions = (internals.extensionRunner?.getRegisteredCommands() ?? []).map((c) => ({\n name: c.invocationName,\n description: c.description ?? \"\",\n }));\n const templates = (internals.promptTemplates ?? []).map((t) => ({\n name: t.name,\n description: t.description ?? \"\",\n }));\n return { extensions, templates };\n } catch {\n return { extensions: [], templates: [] };\n }\n }\n\n /**\n * Reload a running session's extensions so config changes (e.g. a new MCP\n * server added to mcp.json) take effect without starting a new session.\n * AgentSession.reload() tears down + rebuilds the extension runtime and,\n * because we bound a shutdownHandler, re-emits session_start \u2014 which is how\n * pi-mcp-adapter re-reads mcp.json and connects newly-added servers.\n *\n * Reloads every active session when no sessionId is given (MCP servers are\n * global/user-scoped, so all sessions should pick up the change).\n */\n async reloadSession(sessionId?: string): Promise<{ ok: boolean; reloaded: number }> {\n const targets = sessionId ? [this.requireSession(sessionId)] : [...this.sessions.values()];\n let reloaded = 0;\n for (const session of targets) {\n try {\n await session.reload();\n reloaded += 1;\n } catch {\n // reload of one session failing must not block the others\n }\n }\n return { ok: reloaded > 0, reloaded };\n }\n\n /** The currently active pi session, if any (used by the dispatch tool). */\n getActiveSession(): ActiveSession | undefined {\n const session = this.sessions.values().next().value as AgentSession | undefined;\n if (!session) return undefined;\n return { sessionId: session.sessionId, cwd: this.options.cwd };\n }\n\n /** Closes the active session (if any) and emits the protocol event. */\n async closeActiveSession(): Promise<void> {\n /* oxlint-disable no-await-in-loop */\n for (const [sessionId, session] of this.sessions) {\n session.dispose();\n this.sessions.delete(sessionId);\n await this.options.bus.emit(\"session.closed\", { type: \"session.closed\", sessionId });\n }\n }\n\n async close(): Promise<void> {\n await this.closeActiveSession();\n }\n\n // \u2500\u2500\u2500\u2500\u2500\u2500\u2500 model / credential / session operations (M5 \u2014 pi GUI parity) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * Lists all available models from the runtime, with provider config loaded\n * from models.json (via VagModelsStore). Used by the GUI's model selector.\n */\n /** Returns the full pi model catalog \u2014 every model definition (including\n * compat, cost, contextWindow, etc.) \u2014 so the GUI can auto-fill model\n * config from the catalog instead of asking the user to hand-write compat.\n */\n async listModelCatalog(): Promise<Array<{\n id: string;\n name?: string;\n provider: string;\n baseUrl: string;\n api: string;\n reasoning?: boolean;\n input?: string[];\n contextWindow?: number;\n maxTokens?: number;\n cost?: { input: number; output: number; cacheRead?: number; cacheWrite?: number };\n compat?: Record<string, unknown>;\n }>> {\n const runtime = await this.getRuntime();\n const available = await runtime.getAvailable();\n return available.map((m) => ({\n id: String(m.id ?? \"\"),\n name: m.name !== undefined ? String(m.name) : undefined,\n provider: String(m.provider ?? \"\"),\n baseUrl: String(m.baseUrl ?? \"\"),\n api: String(m.api ?? \"\"),\n reasoning: m.reasoning === true ? true : undefined,\n input: Array.isArray(m.input) ? (m.input as string[]) : undefined,\n contextWindow: typeof m.contextWindow === \"number\" ? (m.contextWindow as number) : undefined,\n maxTokens: typeof m.maxTokens === \"number\" ? (m.maxTokens as number) : undefined,\n cost: m.cost && typeof m.cost === \"object\" ? (m.cost as { input: number; output: number; cacheRead?: number; cacheWrite?: number }) : undefined,\n compat: m.compat && typeof m.compat === \"object\" ? (m.compat as Record<string, unknown>) : undefined,\n }));\n }\n\n async listAvailableModels(): Promise<{\n providers: Array<{\n id: string;\n baseUrl: string;\n api: string;\n hasAuth: boolean;\n models: Array<{ id: string; name: string; reasoning: boolean }>;\n }>;\n }> {\n const runtime = await this.getRuntime();\n const available = await runtime.getAvailable();\n\n // Group by provider id (Model.provider is the provider id)\n const byProvider = new Map<string, { id: string; baseUrl: string; api: string; hasAuth: boolean; models: Array<{ id: string; name: string; reasoning: boolean }> }>();\n for (const model of available) {\n const pid = model.provider;\n let entry = byProvider.get(pid);\n if (!entry) {\n entry = {\n id: pid,\n baseUrl: model.baseUrl ?? \"\",\n api: model.api ?? \"\",\n hasAuth: runtime.hasConfiguredAuth(pid),\n models: [],\n };\n byProvider.set(pid, entry);\n }\n entry.models.push({\n id: model.id,\n name: model.name ?? model.id,\n reasoning: model.reasoning ?? false,\n });\n }\n return { providers: [...byProvider.values()] };\n }\n\n /**\n * Sets a runtime API key for a provider (equivalent to pi's `/login`).\n * Takes effect immediately \u2014 no file write, no restart.\n */\n async setRuntimeApiKey(providerId: string, apiKey: string): Promise<void> {\n const runtime = await this.getRuntime();\n await runtime.setRuntimeApiKey(providerId, apiKey);\n }\n\n /**\n * Removes a runtime API key (equivalent to pi's `/logout`).\n */\n async removeRuntimeApiKey(providerId: string): Promise<void> {\n const runtime = await this.getRuntime();\n await runtime.removeRuntimeApiKey(providerId);\n }\n\n /**\n * Switches the active session's model (equivalent to pi's `/model`).\n */\n async setActiveModel(sessionId: string, providerId: string, modelId: string): Promise<void> {\n const session = this.requireSession(sessionId);\n const runtime = await this.getRuntime();\n const model = runtime.getModel(providerId, modelId);\n if (!model) throw new Error(`model ${providerId}/${modelId} not found`);\n await session.setModel(model);\n }\n\n /**\n * Sets the thinking level (equivalent to Shift+Tab).\n */\n setThinkingLevel(sessionId: string, level: string): void {\n const session = this.requireSession(sessionId);\n session.setThinkingLevel(level as Parameters<AgentSession[\"setThinkingLevel\"]>[0]);\n }\n\n /**\n * Cumulative cache waste across a session (pi-compatible algorithm):\n * prompt tokens that appeared in the previous turn's prompt but were NOT\n * read from cache this turn (re-billed at full input rate) \u2014 i.e. the\n * extra cost paid vs. a full cache hit.\n *\n * Mirrors pi's `cache-stats` module: per-turn comparison, 1024-token noise\n * floor, compaction/branch_summary resets the baseline.\n */\n private computeCacheStats(session: AgentSession): { missedTokens: number; missedCost: number; missCount: number } | undefined {\n try {\n const entries = session.sessionManager.getBranch();\n let prev: { promptTokens: number; modelKey: string; reportedCache: boolean } | undefined;\n const totals = { missedTokens: 0, missedCost: 0, missCount: 0 };\n for (const entry of entries) {\n if (entry.type === \"compaction\" || entry.type === \"branch_summary\") {\n prev = undefined;\n continue;\n }\n if (entry.type !== \"message\") continue;\n const message = entry.message as {\n role?: string;\n usage?: { input?: number; output?: number; cacheRead?: number; cacheWrite?: number; cost?: { input?: number; cacheRead?: number; cacheWrite?: number } };\n provider?: string;\n model?: string;\n };\n if (message.role !== \"assistant\") continue;\n const usage = message.usage;\n if (!usage) continue;\n const promptTokens = (usage.input ?? 0) + (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0);\n const modelKey = `${message.provider ?? \"\"}/${message.model ?? \"\"}`;\n const reportedCache = (usage.cacheRead ?? 0) + (usage.cacheWrite ?? 0) > 0;\n // First turn, zero prompt, or a zero-cache turn before any cache was reported \u2192 not countable.\n if (!prev || promptTokens <= 0 || (!reportedCache && !prev.reportedCache)) {\n prev = { promptTokens, modelKey, reportedCache: (prev?.reportedCache ?? false) || reportedCache };\n continue;\n }\n const missedTokens = Math.min(prev.promptTokens, promptTokens) - (usage.cacheRead ?? 0);\n if (missedTokens > 1024) {\n const paidTokens = (usage.input ?? 0) + (usage.cacheWrite ?? 0);\n const paidCost = usage.cost ? (usage.cost.input ?? 0) + (usage.cost.cacheWrite ?? 0) : 0;\n const paidPerToken = paidTokens > 0 ? paidCost / paidTokens : 0;\n const readPerToken = (usage.cacheRead ?? 0) > 0 && usage.cost\n ? (usage.cost.cacheRead ?? 0) / (usage.cacheRead ?? 1)\n : 0;\n totals.missedTokens += missedTokens;\n totals.missedCost += missedTokens * Math.max(0, paidPerToken - readPerToken);\n totals.missCount += 1;\n }\n prev = { promptTokens, modelKey, reportedCache: prev.reportedCache || reportedCache };\n }\n return totals.missCount > 0 ? totals : undefined;\n } catch {\n return undefined;\n }\n }\n\n /** Returns the working directory the given session's agent operates in. */\n getSessionCwd(sessionId: string): string {\n const session = this.requireSession(sessionId);\n return session.sessionManager?.getCwd() || this.options.cwd;\n }\n\n /**\n * Reverts a file to its pre-session state (git-free checkpoint): writes back\n * the first content the engine saw for this file in this session, or deletes\n * the file if it didn't exist before the session's edits.\n */\n async revertFile(sessionId: string, file: string): Promise<{ ok: boolean; error?: string }> {\n const session = this.requireSession(sessionId);\n const cwd = session.sessionManager?.getCwd() || this.options.cwd;\n const resolved = this.resolveBaseline(sessionId, cwd, file);\n if (!resolved) return { ok: false, error: \"\u6CA1\u6709\u6B64\u6587\u4EF6\u7684\u7F16\u8F91\u8BB0\u5F55\uFF0C\u65E0\u6CD5\u56DE\u9000\" };\n const blocked = this.checkRevert(resolved);\n if (blocked) return blocked;\n return this.executeRevert(resolved);\n }\n\n /**\n * Reverts a whole turn's files atomically: every file is checked first and\n * if ANY of them was hand-modified (or has no edit record) the whole revert\n * is refused \u2014 nothing is written. Only when every file passes does the\n * batch write back. Mirrors the per-turn \u64A4\u9500 button's contract. */\n async revertFiles(sessionId: string, files: string[]): Promise<{\n ok: boolean;\n results: Array<{ file: string; ok: boolean; error?: string }>;\n }> {\n const session = this.requireSession(sessionId);\n const cwd = session.sessionManager?.getCwd() || this.options.cwd;\n const prepared = files.map((file) => ({ file, resolved: this.resolveBaseline(sessionId, cwd, file) }));\n // Phase 1 \u2014 check everything; any block refuses the entire turn revert.\n const results = prepared.map(({ file, resolved }) => {\n if (!resolved) return { file, ok: false, error: \"\u6CA1\u6709\u6B64\u6587\u4EF6\u7684\u7F16\u8F91\u8BB0\u5F55\uFF0C\u65E0\u6CD5\u56DE\u9000\" };\n const blocked = this.checkRevert(resolved);\n return blocked ? { file, ok: false, error: blocked.error } : { file, ok: true };\n });\n if (results.some((r) => !r.ok)) {\n return { ok: false, results };\n }\n // Phase 2 \u2014 all clear, write everything back.\n for (let i = 0; i < prepared.length; i++) {\n const p = prepared[i]!;\n if (!p.resolved) continue; // unreachable after phase 1\n const done = this.executeRevert(p.resolved);\n if (!done.ok) results[i] = { file: p.file, ok: false, error: done.error };\n }\n return { ok: results.every((r) => r.ok), results };\n }\n\n /** Looks up a file's baseline (memory \u2192 disk) and normalises the path. */\n private resolveBaseline(\n sessionId: string,\n cwd: string,\n file: string,\n ): { abs: string; raw: string; baseline: FileBaseline } | undefined {\n const raw = isAbsolute(file) ? file : join(cwd, file);\n // Normalise the path (resolve) so Map lookups survive / vs \\ and casing\n // differences between the args path and the frontend's file string.\n const abs = resolve(raw);\n let perSession = this.fileBaselines.get(sessionId);\n let baseline = perSession?.get(abs) ?? perSession?.get(raw);\n if (!baseline) {\n perSession = this.loadFileBaselines(sessionId);\n baseline = perSession?.get(abs) ?? perSession?.get(raw);\n }\n return baseline ? { abs, raw, baseline } : undefined;\n }\n\n /** Refuses the revert if the user hand-modified/deleted the file. */\n private checkRevert({ abs, baseline }: { abs: string; baseline: FileBaseline }): { ok: false; error: string } | undefined {\n if (!baseline.exists || typeof baseline.lastContent !== \"string\") return undefined;\n let current: string | undefined;\n try {\n current = readFileSync(abs, \"utf-8\");\n } catch {\n current = undefined;\n }\n if (current !== baseline.lastContent) {\n return { ok: false, error: \"\u6587\u4EF6\u5DF2\u88AB\u624B\u52A8\u4FEE\u6539\uFF0C\u65E0\u6CD5\u81EA\u52A8\u56DE\u9000\uFF08\u8BF7\u624B\u52A8\u8FD8\u539F\u6216\u5148\u64A4\u9500\u4F60\u7684\u4FEE\u6539\uFF09\" };\n }\n return undefined;\n }\n\n /** Writes the pre-session snapshot back (or deletes a file that didn't exist). */\n private executeRevert({ abs, baseline }: { abs: string; baseline: FileBaseline }): { ok: boolean; error?: string } {\n try {\n if (baseline.exists) {\n mkdirSync(dirname(abs), { recursive: true });\n writeFileSync(abs, baseline.content, \"utf-8\");\n } else if (existsSync(abs)) {\n rmSync(abs, { force: true });\n }\n return { ok: true };\n } catch (err) {\n return { ok: false, error: err instanceof Error ? err.message : String(err) };\n }\n }\n\n /**\n * Returns the active session's info (equivalent to pi's `/session`).\n */\n getSessionInfo(sessionId: string): {\n sessionFile?: string;\n model?: string;\n activeProvider?: string;\n thinkingLevel?: string;\n tokens: { input: number; output: number; cacheRead: number; cacheWrite: number; total: number };\n /** Current context occupancy (not cumulative billing). */\n contextUsage?: { tokens: number | null; contextWindow: number; percent: number | null };\n cost: number;\n messageCount: number;\n name?: string;\n /** Cache hit rate of the LATEST assistant message (pi footer semantics). */\n latestCacheHitRate?: number;\n /** Cumulative cache waste (missed re-billed tokens + extra cost). */\n cacheStats?: { missedTokens: number; missedCost: number; missCount: number };\n } {\n const session = this.requireSession(sessionId);\n const stats = session.getSessionStats();\n const cacheStats = this.computeCacheStats(session);\n const contextUsage = session.getContextUsage();\n const latestCacheHitRate = this.latestCacheHitRate(session);\n return {\n sessionFile: stats.sessionFile,\n model: session.model?.id,\n activeProvider: session.model?.provider,\n thinkingLevel: session.thinkingLevel,\n tokens: {\n input: stats.tokens.input,\n output: stats.tokens.output,\n cacheRead: stats.tokens.cacheRead,\n cacheWrite: stats.tokens.cacheWrite,\n total: stats.tokens.total,\n },\n contextUsage: contextUsage\n ? { tokens: contextUsage.tokens, contextWindow: contextUsage.contextWindow, percent: contextUsage.percent }\n : undefined,\n cost: stats.cost,\n messageCount: stats.totalMessages,\n name: session.sessionName,\n latestCacheHitRate,\n cacheStats,\n };\n }\n\n /**\n * Cache hit rate of the most recent assistant message \u2014 the value pi's\n * footer shows. Per-turn hit rate (not cumulative) is the signal users\n * actually want: it answers \"did my last prompt hit the cache?\".\n */\n private latestCacheHitRate(session: AgentSession): number | undefined {\n try {\n const entries = session.sessionManager.getBranch();\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (entry?.type !== \"message\") continue;\n const message = entry.message as { role?: string; usage?: { input?: number; cacheRead?: number; cacheWrite?: number } };\n if (message.role !== \"assistant\" || !message.usage) continue;\n const prompt = (message.usage.input ?? 0) + (message.usage.cacheRead ?? 0) + (message.usage.cacheWrite ?? 0);\n if (prompt <= 0) continue;\n return ((message.usage.cacheRead ?? 0) / prompt) * 100;\n }\n return undefined;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Sets the session display name (/name).\n */\n async setSessionName(sessionId: string, name: string): Promise<void> {\n const session = this.requireSession(sessionId);\n session.setSessionName(name);\n }\n\n /**\n * Renames a *historical* session by appending a session_info entry to its\n * JSONL file (works without activating the session).\n */\n async renameSessionFile(sessionFile: string, name: string): Promise<void> {\n // Prefer the active session's in-memory manager \u2014 reopening the file here\n // would create a SECOND SessionManager writing the same JSONL while the\n // live agent is appending to it (corruption risk).\n let manager: SessionManager | undefined;\n for (const [, session] of this.sessions) {\n if (session.sessionManager?.getSessionFile() === sessionFile) {\n manager = session.sessionManager;\n break;\n }\n }\n if (!manager) manager = SessionManager.open(sessionFile);\n manager.appendSessionInfo(name);\n }\n\n /**\n * Deletes a historical session: removes its JSONL file. If it is the\n * active session, it is closed first.\n */\n async deleteSession(sessionFile: string, _sessionId?: string): Promise<void> {\n // Close the active session if it matches this file.\n for (const [sid, session] of this.sessions) {\n const file = session.sessionManager?.getSessionFile();\n if (file === sessionFile) {\n session.dispose();\n this.sessions.delete(sid);\n await this.options.bus.emit(\"session.closed\", { type: \"session.closed\", sessionId: sid });\n }\n }\n // Remove the file on disk (ignore missing).\n try {\n rmSync(sessionFile, { force: true });\n } catch {\n // non-fatal\n }\n // Clean up this session's durable UI-card history (our PRIVATE directory \u2014\n // never touches pi's own sessions/settings data; keeps lifecycle aligned).\n const sid = _sessionId ?? [...this.sessions].find(([, s]) => s.sessionManager?.getSessionFile() === sessionFile)?.[0];\n if (sid) {\n try {\n rmSync(join(this.agentDirPath(), \"ui-history\", `${sid}.jsonl`), { force: true });\n } catch {\n // non-fatal\n }\n }\n }\n\n // \u2500\u2500 project-level archive (file-backed) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n //\n // Archiving a project PHYSICALLY moves its whole session directory from\n // `sessions/<encoded-cwd>/` into `archived/<encoded-cwd>/`, so archived\n // sessions disappear from pi's normal scan and only reappear on restore.\n // Permanently deleting happens from the archive only.\n\n /** pi's agent dir \u2014 sessions/ and archived/ live under it. */\n private agentDirPath(): string {\n return this.options.engineDir ?? process.env.PI_CODING_AGENT_DIR ?? join(homedir(), \".pi\", \"agent\");\n }\n\n /** Directory for persisted session snapshots (git-free checkpoints + diffs). */\n private snapshotsDir(): string {\n return join(this.agentDirPath(), \"snapshots\");\n }\n\n private snapshotFile(sessionId: string): string {\n return join(this.snapshotsDir(), `${sessionId}.json`);\n }\n\n private diffFile(sessionId: string): string {\n return join(this.snapshotsDir(), `${sessionId}.diffs.json`);\n }\n\n /** Persists a session's file baselines to disk (sync, best-effort). */\n private saveFileBaselines(sessionId: string, baselines: Map<string, FileBaseline>): void {\n try {\n mkdirSync(this.snapshotsDir(), { recursive: true });\n writeFileSync(\n this.snapshotFile(sessionId),\n JSON.stringify({ files: Object.fromEntries(baselines) }),\n \"utf-8\",\n );\n } catch {\n /* best-effort persistence */\n }\n }\n\n /** Loads a session's file baselines from disk, or undefined if none. */\n private loadFileBaselines(sessionId: string): Map<string, FileBaseline> | undefined {\n try {\n const raw = readFileSync(this.snapshotFile(sessionId), \"utf-8\");\n const parsed = JSON.parse(raw) as { files?: Record<string, FileBaseline> };\n if (!parsed.files || typeof parsed.files !== \"object\") return undefined;\n const out = new Map<string, FileBaseline>();\n for (const [path, v] of Object.entries(parsed.files)) {\n out.set(path, {\n content: v.content,\n exists: v.exists === true,\n ...(typeof v.lastContent === \"string\" ? { lastContent: v.lastContent } : {}),\n });\n }\n return out;\n } catch {\n return undefined;\n }\n }\n\n /** Appends a tool's diff/patch to the session's persisted diff log (best-effort).\n * Append-only JSONL: each entry is one line, so concurrent tool executions\n * (pi runs tools in parallel) never clobber each other, and each write is\n * O(1) regardless of log size. Old JSON-array files are still readable. */\n private saveToolDiff(sessionId: string, toolCallId: string, file: string, diff?: string, patch?: string): void {\n if (!diff && !patch) return;\n try {\n mkdirSync(this.snapshotsDir(), { recursive: true });\n appendFileSync(\n this.diffFile(sessionId),\n JSON.stringify({ toolCallId, file, ...(diff !== undefined ? { diff } : {}), ...(patch !== undefined ? { patch } : {}) }) + \"\\n\",\n \"utf-8\",\n );\n } catch {\n /* best-effort persistence */\n }\n }\n\n /** Loads a session's persisted diffs (keyed by toolCallId). Accepts both the\n * current JSONL format and older JSON-array files. */\n private loadToolDiffs(sessionId: string): Map<string, { file: string; diff?: string; patch?: string }> {\n const out = new Map<string, { file: string; diff?: string; patch?: string }>();\n try {\n const raw = readFileSync(this.diffFile(sessionId), \"utf-8\");\n const trimmed = raw.trim();\n if (trimmed === \"\") return out;\n // JSONL: parse line by line; legacy JSON array: parse the whole body once.\n const entries: Array<{ toolCallId: string; file: string; diff?: string; patch?: string }> =\n trimmed.startsWith(\"[\") ? (JSON.parse(trimmed) as Array<{ toolCallId: string; file: string; diff?: string; patch?: string }>) :\n trimmed.split(\"\\n\").map((line) => JSON.parse(line) as { toolCallId: string; file: string; diff?: string; patch?: string });\n for (const e of entries) {\n if (e.toolCallId) out.set(e.toolCallId, { file: e.file, diff: e.diff, patch: e.patch });\n }\n return out;\n } catch {\n return out;\n }\n }\n\n /** Encode a cwd into pi's session subdir name (mirrors pi's getDefaultSessionDirPath). */\n private encodeCwd(cwd: string): string {\n return `--${cwd.replace(/^[/\\\\]/, \"\").replace(/[/\\\\:]/g, \"-\")}--`;\n }\n\n /** Close the active session if it belongs to the given cwd. */\n private closeSessionForCwd(cwd: string): void {\n for (const [sid, session] of this.sessions) {\n if (session.sessionManager?.getCwd() === cwd) {\n session.dispose();\n this.sessions.delete(sid);\n void this.options.bus.emit(\"session.closed\", { type: \"session.closed\", sessionId: sid });\n }\n }\n }\n\n /**\n * Archives a project: moves its session dir under `sessions/` to\n * `archived/`. The project disappears from the active tree; its sessions\n * remain fully intact on disk and can be restored or opened by path.\n */\n async archiveProject(cwd: string): Promise<void> {\n const agentDir = this.agentDirPath();\n const src = join(agentDir, \"sessions\", this.encodeCwd(cwd));\n if (!existsSync(src)) return;\n this.closeSessionForCwd(cwd);\n const dst = join(agentDir, \"archived\", this.encodeCwd(cwd));\n mkdirSync(dirname(dst), { recursive: true });\n renameSync(src, dst);\n }\n\n /**\n * Archives a single session file into `archived/<cwd>/`. The session\n * leaves the active tree but stays intact and restorable.\n */\n async archiveSession(sessionFile: string): Promise<void> {\n const cwd = this.sessionCwd(sessionFile);\n if (!cwd) return;\n // Close the active session if it matches this file.\n for (const [sid, session] of this.sessions) {\n if (session.sessionManager?.getSessionFile() === sessionFile) {\n session.dispose();\n this.sessions.delete(sid);\n void this.options.bus.emit(\"session.closed\", { type: \"session.closed\", sessionId: sid });\n }\n }\n const agentDir = this.agentDirPath();\n const dst = join(agentDir, \"archived\", this.encodeCwd(cwd), basename(sessionFile));\n mkdirSync(dirname(dst), { recursive: true });\n renameSync(sessionFile, dst);\n }\n\n /** Restores an archived session file back under `sessions/<cwd>/`. */\n async restoreSession(sessionFile: string): Promise<void> {\n const cwd = this.sessionCwd(sessionFile);\n if (!cwd) return;\n const agentDir = this.agentDirPath();\n const dst = join(agentDir, \"sessions\", this.encodeCwd(cwd), basename(sessionFile));\n mkdirSync(dirname(dst), { recursive: true });\n renameSync(sessionFile, dst);\n }\n\n /** Permanently deletes an archived session file (JSONL). */\n async deleteArchivedSession(sessionFile: string): Promise<void> {\n rmSync(sessionFile, { force: true });\n }\n\n /** Reads the cwd of a session file via pi's SessionManager. */\n private sessionCwd(sessionFile: string): string | undefined {\n try {\n return SessionManager.open(sessionFile).getCwd();\n } catch {\n return undefined;\n }\n }\n\n /** Restores an archived project: moves its session files back under `sessions/`. */\n async restoreProject(cwd: string): Promise<void> {\n const agentDir = this.agentDirPath();\n const src = join(agentDir, \"archived\", this.encodeCwd(cwd));\n if (!existsSync(src)) return;\n this.closeSessionForCwd(cwd);\n // Merge files back into sessions/<cwd>/ (which may still hold other\n // active sessions \u2014 renaming the whole dir would fail when it exists).\n const dst = join(agentDir, \"sessions\", this.encodeCwd(cwd));\n mkdirSync(dst, { recursive: true });\n for (const entry of readdirSync(src)) {\n if (!entry.endsWith(\".jsonl\")) continue;\n const from = join(src, entry);\n try {\n if (statSync(from).isFile()) renameSync(from, join(dst, entry));\n } catch {\n // skip unreadable/locked files\n }\n }\n rmSync(src, { recursive: true, force: true });\n }\n\n /** Permanently deletes an archived project's session dir (JSONL). */\n async deleteArchivedProject(cwd: string): Promise<void> {\n const agentDir = this.agentDirPath();\n const dir = join(agentDir, \"archived\", this.encodeCwd(cwd));\n this.closeSessionForCwd(cwd);\n rmSync(dir, { recursive: true, force: true });\n }\n\n /** Lists archived projects with their sessions (scans the `archived/` dir). */\n async listArchivedProjects(): Promise<Array<{ cwd: string; sessions: SessionHistoryItem[] }>> {\n const agentDir = this.agentDirPath();\n const root = join(agentDir, \"archived\");\n if (!existsSync(root)) return [];\n const out: Array<{ cwd: string; sessions: SessionHistoryItem[] }> = [];\n for (const entry of readdirSync(root)) {\n const dir = join(root, entry);\n try {\n if (!statSync(dir).isDirectory()) continue;\n const infos = await SessionManager.listAll(dir);\n const cwd = infos[0]?.cwd ?? \"\";\n if (!cwd) continue;\n out.push({\n cwd,\n sessions: infos.map((i) => ({\n id: i.id,\n path: i.path,\n name: i.name,\n cwd: i.cwd,\n created: i.created.toISOString(),\n modified: i.modified.toISOString(),\n messageCount: i.messageCount,\n firstMessage: i.firstMessage,\n })),\n });\n } catch {\n // Skip unreadable archived dirs.\n }\n }\n return out.toSorted((a, b) => Date.parse(b.sessions[0]!.modified) - Date.parse(a.sessions[0]!.modified));\n }\n\n /**\n * Manually triggers context compaction (/compact). Returns pi's result so\n * the GUI can show the post-compaction token count.\n */\n async compactSession(sessionId: string, customInstructions?: string): Promise<CompactionResult> {\n const session = this.requireSession(sessionId);\n return await session.compact(customInstructions);\n }\n\n /**\n * Steers a running session (queues a steering message).\n */\n async steerSession(sessionId: string, text: string): Promise<void> {\n const session = this.requireSession(sessionId);\n await session.steer(text);\n }\n\n /** Cancels a queued message by removing it from pi's steering queue. */\n async cancelQueuedMessage(sessionId: string, text: string): Promise<{ cancelled: boolean }> {\n const session = this.requireSession(sessionId);\n const msgs = (session as unknown as Record<string, unknown>)['_steeringMessages'] as string[] | undefined;\n if (msgs) {\n const idx = msgs.indexOf(text);\n if (idx !== -1) {\n msgs.splice(idx, 1);\n return { cancelled: true };\n }\n }\n return { cancelled: false };\n }\n\n /**\n * Queues a follow-up message.\n */\n async followUpSession(sessionId: string, text: string): Promise<void> {\n const session = this.requireSession(sessionId);\n await session.followUp(text);\n }\n\n /**\n * Aborts the current session operation.\n */\n async abortSession(sessionId: string): Promise<void> {\n const session = this.requireSession(sessionId);\n await session.abort();\n }\n\n /** Cancels an in-progress manual/auto compaction. */\n abortCompaction(sessionId: string): void {\n const session = this.requireSession(sessionId);\n session.abortCompaction();\n }\n\n /**\n * Lists every user message in the active branch as a fork point \u2014 the GUI\n * shows a small \"\u56DE\u9000\" affordance on each user message (pi's `/tree`).\n */\n listForkPoints(sessionId: string): Array<{ entryId: string; text: string }> {\n const session = this.requireSession(sessionId);\n return session.getUserMessagesForForking();\n }\n\n /**\n * Navigates the active branch back to a historical node (pi's `/tree`).\n * The conversation path from root to that node becomes the active branch;\n * returns the user prompt text at that point so the GUI can prefill the\n * editor for modification.\n */\n async navigateToTreeNode(\n sessionId: string,\n targetId: string,\n options?: { summarize?: boolean; customInstructions?: string },\n ): Promise<{ editorText?: string; cancelled: boolean }> {\n const session = this.requireSession(sessionId);\n const result = await session.navigateTree(targetId, options);\n return { editorText: result.editorText, cancelled: result.cancelled };\n }\n\n /**\n * Exports the active branch to JSONL (/export). Returns the output path.\n */\n exportSession(sessionId: string, outputPath?: string): string {\n const session = this.requireSession(sessionId);\n return session.exportToJsonl(outputPath);\n }\n\n /**\n * Copies the last assistant message text (/copy).\n */\n getLastAssistantText(sessionId: string): string | undefined {\n const session = this.requireSession(sessionId);\n return session.getLastAssistantText();\n }\n\n /**\n * Returns the session tree as a serializable view (pi's /tree): every\n * entry with its children, plus the ids on the active leaf path so the\n * GUI can highlight the current branch.\n */\n getSessionTree(sessionId: string): {\n nodes: Array<{\n id: string;\n parentId: string | null;\n type: string;\n role?: string;\n text?: string;\n label?: string;\n timestamp: string;\n children: string[];\n }>;\n leafPath: string[];\n leafId: string;\n } {\n const session = this.requireSession(sessionId);\n const tree = session.sessionManager.getTree();\n\n // Recursively flatten while recording children ids.\n const nodes: Array<{\n id: string;\n parentId: string | null;\n type: string;\n role?: string;\n text?: string;\n label?: string;\n timestamp: string;\n children: string[];\n }> = [];\n const walk = (node: (typeof tree)[number]): void => {\n const entry = node.entry as SessionEntryLike;\n const childrenIds: string[] = [];\n for (const child of node.children) {\n childrenIds.push((child.entry as SessionEntryLike).id);\n }\n nodes.push({\n id: entry.id,\n parentId: entry.parentId,\n type: entry.type,\n role: typeof (entry as { message?: unknown }).message === \"object\"\n ? String(((entry as { message?: { role?: unknown } }).message as { role?: unknown })?.role ?? \"\")\n : undefined,\n text: sessionEntryPreview(entry),\n label: node.label,\n timestamp: entry.timestamp,\n children: childrenIds,\n });\n for (const child of node.children) walk(child);\n };\n for (const root of tree) walk(root);\n\n // Active leaf path: walk parentId from the leaf up.\n const leafId = session.sessionManager.getLeafId() ?? \"\";\n const byId = new Map(nodes.map((n) => [n.id, n]));\n const leafPath: string[] = [];\n let cursor: string | undefined = leafId;\n while (cursor) {\n leafPath.push(cursor);\n cursor = byId.get(cursor)?.parentId ?? undefined;\n }\n\n return { nodes, leafPath, leafId };\n }\n\n /** Resolves the model runtime (lazy, same as createSession). */\n private getRuntime(): Promise<ModelRuntime> {\n return this.resolveRuntime();\n }\n\n private async forwardSessionMessages(session: AgentSession, sessionId: string): Promise<void> {\n // Session cwd (the project the agent actually works in) \u2014 NOT the daemon's\n // cwd, which is where the engine was constructed. Path-carrying tools and\n // working-tree snapshots must resolve against this.\n const sessionCwd = session.sessionManager?.getCwd() || this.options.cwd;\n session.subscribe((event) => {\n // Agent lifecycle \u2014 the GUI uses this to track the whole task\n // (start \u2192 end, including all sub-rounds of thinking + tools + final\n // conclusion). Pi's turn_start/turn_end fire per sub-round; we ignore\n // them and use the task-level agent_start/agent_end instead.\n if (event.type === \"agent_start\") {\n this.uiBridge.nextTurn(sessionId);\n void this.options.bus.emit(\"session.turn\", { type: \"session.turn\", sessionId, kind: \"start\" });\n return;\n }\n if (event.type === \"agent_end\") {\n void this.options.bus.emit(\"session.turn\", { type: \"session.turn\", sessionId, kind: \"end\" });\n return;\n }\n if (event.type === \"turn_start\" || event.type === \"turn_end\") {\n return; // per-sub-round events \u2014 ignored\n }\n if (event.type === \"tool_execution_start\") {\n // Remember the triggering tool call so ctx.ui cards opened by this\n // tool can anchor to it.\n this.uiBridge.noteToolCall(sessionId, event.toolCallId);\n // Capture the file's content before path-carrying tools run, so we can\n // compute a diff for tools that don't surface pi's details.diff (write).\n const path = extractToolPath(event.args, sessionCwd);\n if (path) {\n try {\n this.toolBaselines.set(event.toolCallId, { path, content: readFileSync(path, \"utf-8\") });\n } catch {\n // New file (write to a path that doesn't exist yet) \u2014 baseline as empty.\n this.toolBaselines.set(event.toolCallId, { path, content: \"\" });\n }\n // Session-level baseline for revert: keep the FIRST content we saw\n // for this file (before the session's first edit), so revert can\n // restore the pre-session state without git. Normalise the path\n // (path.resolve) so Map lookups are robust to / vs \\ and casing.\n const normalized = resolve(path);\n const perSession = this.fileBaselines.get(sessionId) ?? new Map<string, FileBaseline>();\n if (!perSession.has(normalized)) {\n try {\n const initial = readFileSync(path, \"utf-8\");\n perSession.set(normalized, { content: initial, exists: true, lastContent: initial });\n } catch {\n // File didn't exist before the session's edit \u2014 revert deletes it.\n perSession.set(normalized, { content: \"\", exists: false, lastContent: \"\" });\n }\n }\n this.fileBaselines.set(sessionId, perSession);\n // Persist so revert survives a daemon restart.\n this.saveFileBaselines(sessionId, perSession);\n } else {\n // No path (bash): pi's own tool diffs (details.diff) still surface\n // for edit tools; bash-driven file changes are not tracked, matching\n // Claude Code's checkpoint behavior.\n }\n void this.options.bus.emit(\"session.tool_call\", {\n type: \"session.tool_call\",\n sessionId,\n toolCallId: event.toolCallId,\n name: event.toolName,\n args: serializeToolArg(event.args),\n });\n return;\n }\n if (event.type === \"tool_execution_end\") {\n const diff = extractToolDiff(event.result);\n const patch = extractToolPatch(event.result);\n const baseline = this.toolBaselines.get(event.toolCallId);\n this.toolBaselines.delete(event.toolCallId);\n if (baseline && diff === undefined) {\n // Tools without pi's diff (write, and some bash variants): compute one\n // from the pre-tool content we captured.\n try {\n const current = readFileSync(baseline.path, \"utf-8\");\n const ours = computeToolDiff(baseline.path, baseline.content, current, sessionCwd);\n if (ours.diff) {\n this.saveToolDiff(sessionId, event.toolCallId, baseline.path, ours.diff, ours.patch);\n void this.options.bus.emit(\"session.tool_result\", {\n type: \"session.tool_result\",\n sessionId,\n toolCallId: event.toolCallId,\n name: event.toolName,\n result: toolResultText(event.result),\n isError: event.isError,\n diff: ours.diff,\n patch: ours.patch,\n });\n }\n return;\n } catch {\n // File missing/read error \u2014 fall through to the plain result below.\n }\n }\n if (diff !== undefined || patch !== undefined) {\n const file = baseline?.path ?? \"\u672A\u77E5\u6587\u4EF6\";\n this.saveToolDiff(sessionId, event.toolCallId, file, diff, patch);\n }\n // Record the content right after the agent's edit so a later revert can\n // detect hand edits (current != lastContent) and refuse to overwrite.\n if (baseline && !event.isError) {\n const perSession = this.fileBaselines.get(sessionId);\n if (perSession) {\n const key = resolve(baseline.path);\n const entry = perSession.get(key) ?? perSession.get(baseline.path);\n if (entry) {\n try {\n entry.lastContent = readFileSync(baseline.path, \"utf-8\");\n } catch {\n entry.lastContent = \"\";\n }\n perSession.set(key, entry);\n this.fileBaselines.set(sessionId, perSession);\n this.saveFileBaselines(sessionId, perSession);\n }\n }\n }\n void this.options.bus.emit(\"session.tool_result\", {\n type: \"session.tool_result\",\n sessionId,\n toolCallId: event.toolCallId,\n name: event.toolName,\n result: toolResultText(event.result),\n isError: event.isError,\n ...(diff !== undefined ? { diff } : {}),\n ...(patch !== undefined ? { patch } : {}),\n });\n return;\n }\n // A user message (steer) was injected into the agent loop \u2014 the GUI uses\n // this to move queued input into the chat timeline at the right moment.\n if (event.type === \"message_start\" && event.message.role === \"user\") {\n const parsed = parseContentBlocks(event.message as HistoryMessageLike);\n void this.options.bus.emit(\"session.message\", {\n type: \"session.message\",\n sessionId,\n kind: \"user_queued\",\n text: parsed.text,\n ...(parsed.images.length > 0 ? { images: parsed.images } : {}),\n });\n return;\n }\n // pi surfaces model/loop failures as an assistant message carrying an\n // `errorMessage` field (no text deltas) \u2014 forward it so the GUI shows\n // the real error instead of a silent turn end.\n if (event.type === \"message_end\" && event.message.role === \"assistant\" && event.message.errorMessage) {\n void this.options.bus.emit(\"session.message\", {\n type: \"session.message\",\n sessionId,\n kind: \"error\",\n text: event.message.errorMessage,\n });\n return;\n }\n // Authoritative steering-queue state \u2014 the GUI renders its queued rail\n // from this instead of optimistically inserting messages locally, so a\n // cancel can never race with pi's internal queue.\n if (event.type === \"queue_update\") {\n void this.options.bus.emit(\"session.queue_update\", {\n type: \"session.queue_update\",\n sessionId,\n steering: event.steering,\n });\n return;\n }\n if (event.type !== \"message_update\") return;\n const { assistantMessageEvent } = event;\n if (assistantMessageEvent.type === \"thinking_delta\") {\n void this.options.bus.emit(\"session.thinking\", {\n type: \"session.thinking\",\n sessionId,\n kind: \"delta\",\n text: assistantMessageEvent.delta,\n });\n } else if (assistantMessageEvent.type === \"thinking_end\") {\n void this.options.bus.emit(\"session.thinking\", {\n type: \"session.thinking\",\n sessionId,\n kind: \"done\",\n text: assistantMessageEvent.content,\n });\n } else if (assistantMessageEvent.type === \"text_delta\") {\n void this.options.bus.emit(\"session.message\", {\n type: \"session.message\",\n sessionId,\n kind: \"text_delta\",\n text: assistantMessageEvent.delta,\n });\n } else if (assistantMessageEvent.type === \"text_end\") {\n void this.options.bus.emit(\"session.message\", {\n type: \"session.message\",\n sessionId,\n kind: \"text_done\",\n text: assistantMessageEvent.content,\n });\n }\n });\n }\n\n /**\n * Ensures the session is on a model with configured credentials.\n *\n * pi picks a built-in default model (e.g. openai/gpt-5.5) when the user\n * has no saved default \u2014 that call would hang on missing API keys. If the\n * current model's provider has no auth, switch to the first configured\n * provider/model that does.\n */\n private async ensureConfiguredModel(session: AgentSession, runtime: ModelRuntime): Promise<void> {\n const current = session.model;\n if (current && runtime.hasConfiguredAuth(current.provider)) return;\n\n const available = await runtime.getAvailable();\n // No models available (test environment) \u2014 skip selection.\n if (available.length === 0) return;\n const authModels = available.filter((m) => runtime.hasConfiguredAuth(m.provider));\n // Prefer the user's configured default (settings.json defaultProvider/defaultModel)\n // when it exists and has auth; otherwise pick the first reachable reasoning model.\n const defaults = this.readDefaultModelConfig();\n const defaultMatch = defaults\n ? authModels.find((m) => m.provider === defaults.provider && m.id === defaults.model)\n : undefined;\n if (defaultMatch) {\n try {\n await session.setModel(defaultMatch);\n return;\n } catch {\n // fall through to reachability-based selection\n }\n }\n\n const candidates = await this.filterReachableProviders(authModels);\n const target = candidates.toSorted(\n (a, b) => Number(b.reasoning ?? false) - Number(a.reasoning ?? false),\n )[0];\n if (!target || (current && current.provider === target.provider && current.id === target.id)) return;\n\n try {\n await session.setModel(target);\n } catch {\n // Non-fatal: the prompt call will surface a clear error if the model\n // can't be used, and the GUI can switch models explicitly.\n }\n }\n\n /** Reads defaultProvider/defaultModel from settings.json (if present). */\n private readDefaultModelConfig(): { provider: string; model: string } | undefined {\n try {\n const settingsPath = join(this.options.engineDir ?? join(homedir(), \".pi\", \"agent\"), \"settings.json\");\n const raw = readFileSync(settingsPath, \"utf8\");\n const parsed = JSON.parse(raw) as { defaultProvider?: string; defaultModel?: string };\n if (parsed.defaultProvider && parsed.defaultModel) return { provider: parsed.defaultProvider, model: parsed.defaultModel };\n return undefined;\n } catch {\n return undefined;\n }\n }\n\n /**\n * Filters out providers whose base URLs are unreachable (TCP connect check\n * with a 3-second timeout). Providers that fail the check are skipped so\n * the engine doesn't pick a dead endpoint and hang.\n */\n private async filterReachableProviders(\n models: Awaited<ReturnType<ModelRuntime[\"getAvailable\"]>>,\n ): Promise<Awaited<ReturnType<ModelRuntime[\"getAvailable\"]>>> {\n const seen = new Map<string, boolean>();\n const out: Array<(typeof models)[number]> = []; for (const m of models) {\n const key = `${m.provider}::${m.baseUrl}`;\n if (!seen.has(key)) {\n const reachable = await this.checkReachable(m.baseUrl);\n seen.set(key, reachable);\n }\n if (seen.get(key)) out.push(m);\n }\n return out;\n }\n\n private async checkReachable(baseUrl: string): Promise<boolean> {\n try {\n const url = new URL(baseUrl);\n const { hostname, port } = url;\n const p = port ? Number(port) : url.protocol === \"https:\" ? 443 : 80;\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), 3000);\n // Use a lightweight HEAD or TCP connect via fetch\n const res = await fetch(`${url.protocol}//${hostname}:${p}/`, {\n method: \"HEAD\",\n signal: controller.signal,\n }).catch(() => undefined);\n clearTimeout(timer);\n return res !== undefined;\n } catch {\n return false;\n }\n }\n\n private requireSession(sessionId: string): AgentSession {\n const session = this.sessions.get(sessionId);\n if (!session) {\n throw new Error(`no active session: ${sessionId}`);\n }\n return session;\n }\n\n /** If models.json was hand-edited since the last UI save, auto-restore it\n * from the backup so a misconfigured compat doesn't silence every turn.\n *\n * REMOVED from the prompt path \u2014 models.json is shared with the pi CLI\n * (~/.pi/agent), so auto-restoring would silently overwrite config the\n * user changed in the TUI. Kept only as a manual recovery helper.\n *\n * @deprecated manual recovery only */\n private restoreConfigIfChanged(_sessionId: string): void {\n try {\n const dir = this.options.engineDir ?? join(homedir(), \".pi\", \"agent\");\n const file = join(dir, \"models.json\");\n const bak = join(dir, \"models.json.bak\");\n if (!existsSync(bak)) return;\n if (readFileSync(file, \"utf8\") !== readFileSync(bak, \"utf8\")) {\n copyFileSync(bak, file);\n }\n } catch { /* best-effort */ }\n }\n\n private async resolveRuntime(): Promise<ModelRuntime> {\n if (this.options.modelRuntime) return this.options.modelRuntime;\n // Created once per process; reuses the user's existing pi auth/models.\n this.runtimePromise ??= ModelRuntime.create();\n return this.runtimePromise;\n }\n}\n", "import * as Diff from \"diff\";\nimport { isAbsolute, join } from \"node:path\";\n\n/**\n * Pure display/serialization helpers shared across the engine. No class\n * state \u2014 every function derives its output purely from its inputs, so they\n * live here (out of VagusEngine) and are trivially unit-testable.\n */\n\n/** Serializes tool arguments for display (JSON, truncated). */\nexport function serializeToolArg(args: unknown): string {\n try {\n const text = typeof args === \"string\" ? args : JSON.stringify(args, null, 2);\n return truncateDisplay(text);\n } catch {\n return String(args);\n }\n}\n\n/** Extracts display text from a tool result (content blocks or string). */\nexport function toolResultText(result: unknown): string {\n if (typeof result === \"string\") return truncateDisplay(result);\n const r = result as { content?: unknown; details?: unknown } | null | undefined;\n if (!r) return \"\";\n if (typeof r.content === \"string\") return truncateDisplay(r.content);\n if (Array.isArray(r.content)) {\n const parts: string[] = [];\n for (const block of r.content) {\n const b = block as { type?: unknown; text?: unknown };\n if (b && b.type === \"text\" && typeof b.text === \"string\") parts.push(b.text);\n else if (b && b.type === \"image\") parts.push(\"[image]\");\n }\n return truncateDisplay(parts.join(\"\\n\"));\n }\n // Fallback: try JSON for opaque results (e.g. tool details only).\n try {\n return truncateDisplay(JSON.stringify(r, null, 2));\n } catch {\n return \"\";\n }\n}\n\n/** Caps display text so huge tool outputs don't flood the UI. */\nexport function truncateDisplay(text: string, max = 4000): string {\n return text.length > max ? `${text.slice(0, max)}\u2026 (truncated)` : text;\n}\n\n/**\n * Extracts the file-edit diff for display. Prefers pi's unified patch\n * (`details.patch` \u2014 the format developers know: `@@` hunks, `a/`/`b/` headers)\n * and falls back to pi's display diff (`details.diff`, `+N`/`-N` rows).\n * Write tools and non-edit tools have neither.\n */\nexport function extractToolDiff(result: unknown): string | undefined {\n const r = result as { details?: { patch?: unknown; diff?: unknown } } | null | undefined;\n const patch = r?.details?.patch;\n if (typeof patch === \"string\" && patch.trim() !== \"\") return truncateDisplay(patch, 40_000);\n const diff = r?.details?.diff;\n if (typeof diff !== \"string\" || diff.trim() === \"\") return undefined;\n return truncateDisplay(diff, 20_000);\n}\n\n/**\n * Extracts the target file path from a tool's args, resolved against the\n * session cwd. Only path-carrying file tools (write/edit/multi_edit) return one;\n * shell and read-only tools return undefined.\n */\nexport function extractToolPath(args: unknown, cwd: string): string | undefined {\n const a = args as Record<string, unknown> | undefined;\n const raw = a?.path ?? a?.file_path;\n if (typeof raw !== \"string\" || raw.trim() === \"\") return undefined;\n const abs = isAbsolute(raw) ? raw : join(cwd, raw);\n // Normalise WSL-style /mnt/d/... to Windows D:/... \u2014 the daemon runs on\n // Windows, so every path (baselines, revert, diffs) must be one canonical\n // form or lookups/operations silently mismatch.\n return abs.replace(/^\\/mnt\\/([a-zA-Z])\\//, (_m, d: string) => `${d.toUpperCase()}:/`);\n}\n\n/**\n * Computes a unified diff + patch from a tool's before/after file content\n * (used for tools that don't provide pi's details.diff, e.g. write). Both\n * `diff` (display) and `patch` are the unified format so the UI shows one\n * consistent style. The patch uses `a/` `b/` relative paths.\n */\nexport function computeToolDiff(path: string, oldContent: string, newContent: string, cwd: string): { diff?: string; patch?: string } {\n if (oldContent === newContent) return {};\n const rel = path.startsWith(cwd + \"/\") ? path.slice(cwd.length + 1) : path;\n const patch = Diff.createTwoFilesPatch(`a/${rel}`, `b/${rel}`, oldContent, newContent, undefined, undefined, {\n context: 4,\n headerOptions: Diff.FILE_HEADERS_ONLY,\n });\n const out = truncateDisplay(patch, 40_000);\n if (!out) return {};\n return { diff: out, patch: out };\n}\n\n/** Extracts the unified patch (pi's `details.patch`) \u2014 a standard git-style\n * diff for the edit. Falls back to undefined for tools without a patch. */\nexport function extractToolPatch(result: unknown): string | undefined {\n const r = result as { details?: { patch?: unknown } } | null | undefined;\n const patch = r?.details?.patch;\n if (typeof patch !== \"string\" || patch.trim() === \"\") return undefined;\n return truncateDisplay(patch, 40_000);\n}\n\n/**\n * Extracts display text from a pi session message. Uses a minimal structural\n * shape instead of pi's AgentMessage type (which is an SDK-internal union) \u2014\n * content is either a plain string or a list of text/image content blocks.\n */\nexport interface SessionEntryLike {\n type: string;\n id: string;\n parentId: string | null;\n timestamp: string;\n message?: { role?: unknown; content?: unknown };\n summary?: unknown;\n modelId?: unknown;\n provider?: unknown;\n thinkingLevel?: unknown;\n}\n\n/** One-line preview of a session entry for the tree view. */\nexport function sessionEntryPreview(entry: SessionEntryLike): string | undefined {\n if (entry.type === \"message\" && entry.message) {\n const role = String(entry.message.role ?? \"\");\n const text = messageToText({ role, content: entry.message.content } as HistoryMessageLike).replace(/\\s+/g, \" \").trim();\n if (role === \"user\") return `\u276F ${text}`;\n if (role === \"assistant\") return text.slice(0, 120);\n if (role === \"toolResult\") return `\u2699 ${text.slice(0, 80)}`;\n return text.slice(0, 120);\n }\n if (entry.type === \"model_change\") return `\u25C7 \u6A21\u578B\u5207\u6362 \u2192 ${String(entry.provider ?? \"\")}/${String(entry.modelId ?? \"\")}`;\n if (entry.type === \"thinking_level_change\") return `\u25C8 \u601D\u8003\u7EA7\u522B \u2192 ${String(entry.thinkingLevel ?? \"\")}`;\n if (entry.type === \"compaction\" && typeof entry.summary === \"string\") return `\u25CC \u538B\u7F29: ${entry.summary.slice(0, 100)}`;\n if (entry.type === \"branch_summary\" && typeof entry.summary === \"string\") return `\u25D4 \u5206\u652F\u6458\u8981: ${entry.summary.slice(0, 100)}`;\n if (entry.type === \"label\") return `\uD83C\uDFF7 ${String(entry.id)}`;\n if (entry.type === \"session_info\") return `\u25AA \u4F1A\u8BDD\u4FE1\u606F`;\n return `\u00B7 ${entry.type}`;\n}\n\nexport interface HistoryMessageLike {\n role: unknown;\n content?: unknown;\n}\n\n/** Parsed view of a message's content blocks. */\nexport interface ParsedBlocks {\n text: string;\n thinking?: string;\n images: Array<{ dataUrl: string; mimeType: string }>;\n toolCalls: Array<{ id: string; name: string; args: string }>;\n}\n\n/**\n * Splits a pi message into its display parts: plain text, thinking text, and\n * tool-call declarations (id/name/args). Content blocks that are none of\n * those (images, custom UI) are skipped.\n */\nexport function parseContentBlocks(message: HistoryMessageLike): ParsedBlocks {\n const content = message.content;\n const parsed: ParsedBlocks = { text: \"\", images: [], toolCalls: [] };\n if (typeof content === \"string\") {\n parsed.text = content;\n return parsed;\n }\n if (!Array.isArray(content)) return parsed;\n\n const textParts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; thinking?: unknown; id?: unknown; name?: unknown; arguments?: unknown; data?: unknown; mimeType?: unknown };\n if (!b || typeof b.type !== \"string\") continue;\n if (b.type === \"text\" && typeof b.text === \"string\") {\n textParts.push(b.text);\n } else if (b.type === \"thinking\" && typeof b.thinking === \"string\") {\n parsed.thinking = b.thinking;\n } else if (b.type === \"toolCall\" && typeof b.name === \"string\") {\n parsed.toolCalls.push({\n id: typeof b.id === \"string\" ? b.id : \"\",\n name: b.name,\n args: serializeToolArg(b.arguments),\n });\n } else if (b.type === \"image\" && typeof b.data === \"string\") {\n // pi persists image blocks with a full data URL (data:image/png;base64,\u2026)\n // in `data` and the mime type in `mimeType`. Pass the data URL straight\n // through so the UI can render it with <img src>. If the data is raw\n // base64 without the prefix, re-add it.\n const data = b.data.startsWith(\"data:\") ? b.data : `data:${typeof b.mimeType === \"string\" && b.mimeType !== \"\" ? b.mimeType : \"image/png\"};base64,${b.data}`;\n parsed.images.push({\n dataUrl: data,\n mimeType: typeof b.mimeType === \"string\" ? b.mimeType : \"image/png\",\n });\n }\n }\n parsed.text = textParts.join(\"\\n\");\n return parsed;\n}\n\nexport function messageToText(message: HistoryMessageLike): string {\n return parseContentBlocks(message).text;\n}\n", "import { SessionManager } from \"@earendil-works/pi-coding-agent\";\nimport type { UsageDailyPoint, UsageStats, UsageStatModel } from \"@vagus/protocol\";\n\n/**\n * Aggregates token/cost usage across all persisted sessions (pi JSONL).\n * Each assistant message carries a `usage` record (tokens + cost); this\n * sums them per session and per model. Used by the settings usage panel.\n *\n * Pure function \u2014 no engine state; reads pi's session store directly.\n */\nexport async function aggregateUsageStats(): Promise<UsageStats> {\n const infos = await SessionManager.listAll();\n let totalTokens = 0;\n let totalCost = 0;\n let messageCount = 0;\n let peakTokens = 0;\n let maxDurationMs = 0;\n let firstTs = 0;\n let lastTs = 0;\n const byModel = new Map<string, { tokens: number; cost: number }>();\n const activeDates = new Set<number>();\n const DAY = 86_400_000;\n const dayMap = new Map<number, { tokens: number; messages: number; sessions: number; byModel: Map<string, number> }>();\n const dayAt = (ts: number): number => Math.floor(ts / DAY);\n const ensureDay = (day: number): { tokens: number; messages: number; sessions: number; byModel: Map<string, number> } => {\n let p = dayMap.get(day);\n if (!p) {\n p = { tokens: 0, messages: 0, sessions: 0, byModel: new Map() };\n dayMap.set(day, p);\n }\n return p;\n };\n\n for (const info of infos) {\n try {\n const manager = SessionManager.open(info.path);\n const entries = manager.getBranch();\n let sessionTokens = 0;\n const createdMs = info.created.getTime();\n const modifiedMs = info.modified.getTime();\n ensureDay(dayAt(modifiedMs)).sessions += 1;\n for (const entry of entries) {\n if (entry.type !== \"message\") continue;\n messageCount += 1;\n const day = dayAt(typeof entry.timestamp === \"number\" ? entry.timestamp : modifiedMs);\n const dayPoint = ensureDay(day);\n dayPoint.messages += 1;\n const m = entry.message as {\n role?: unknown;\n model?: unknown;\n provider?: unknown;\n usage?: { totalTokens?: unknown; input?: unknown; output?: unknown; cacheRead?: unknown; cacheWrite?: unknown; cost?: { total?: unknown } };\n };\n if (m.role !== \"assistant\" || m.usage === undefined) continue;\n const u = m.usage;\n const tokens = typeof u.totalTokens === \"number\"\n ? u.totalTokens\n : Number(u.input ?? 0) + Number(u.output ?? 0) + Number(u.cacheRead ?? 0) + Number(u.cacheWrite ?? 0);\n const cost = typeof u.cost?.total === \"number\" ? u.cost.total : 0;\n totalTokens += tokens;\n totalCost += cost;\n sessionTokens += tokens;\n dayPoint.tokens += tokens;\n const key = `${String(m.provider ?? \"unknown\")}/${String(m.model ?? \"unknown\")}`;\n const cur = byModel.get(key) ?? { tokens: 0, cost: 0 };\n byModel.set(key, { tokens: cur.tokens + tokens, cost: cur.cost + cost });\n dayPoint.byModel.set(key, (dayPoint.byModel.get(key) ?? 0) + tokens);\n }\n if (sessionTokens > peakTokens) peakTokens = sessionTokens;\n if (modifiedMs - createdMs > maxDurationMs) maxDurationMs = modifiedMs - createdMs;\n if (firstTs === 0 || createdMs < firstTs) firstTs = createdMs;\n if (modifiedMs > lastTs) lastTs = modifiedMs;\n activeDates.add(dayAt(modifiedMs));\n } catch {\n // Skip unreadable session files.\n }\n }\n\n const daily: UsageDailyPoint[] = [...dayMap.entries()]\n .toSorted((a, b) => a[0] - b[0])\n .map(([day, p]) => ({\n ts: day * DAY,\n tokens: p.tokens,\n messages: p.messages,\n sessions: p.sessions,\n byModel: Object.fromEntries(p.byModel),\n }));\n const perModel: UsageStatModel[] = [...byModel.entries()]\n .map(([model, v]) => ({ model, tokens: v.tokens, cost: v.cost }))\n .toSorted((a, b) => b.tokens - a.tokens);\n // Streaks: consecutive days with session activity (day = floor of epoch days).\n const dates = [...activeDates].toSorted((a, b) => a - b);\n let longestStreak = 0;\n let run = 0;\n for (let i = 0; i < dates.length; i++) {\n run = i === 0 || dates[i] === (dates[i - 1] ?? 0) + 1 ? run + 1 : 1;\n if (run > longestStreak) longestStreak = run;\n }\n const today = Math.floor(Date.now() / DAY);\n let currentStreak = 0;\n for (let i = dates.length - 1; i >= 0; i--) {\n if (dates[i] === today - currentStreak) {\n currentStreak++;\n } else {\n break;\n }\n }\n return {\n totalTokens,\n totalCost,\n sessionCount: infos.length,\n messageCount,\n peakTokens,\n maxDurationMs,\n firstTs,\n lastTs,\n currentStreak,\n longestStreak,\n activeDays: dayMap.size,\n perModel,\n daily,\n };\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { appendFileSync, existsSync, mkdirSync, readdirSync, readFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport type { ExtensionUIContext, ExtensionUIDialogOptions } from \"@earendil-works/pi-coding-agent\";\nimport type { EventBus } from \"@vagus/host-events\";\nimport type { CoreEventMap } from \"@vagus/host-events\";\n\n/**\n * Extension UI bridge \u2014 ctx.ui dialogs (confirm/select/input), notify,\n * setStatus and setWidget, plus the durable ui-history store.\n *\n * Self-contained: owns all extension-UI state (pending dialogs, turn counters,\n * widget registry/lines cache) so VagusEngine doesn't accumulate per-feature\n * Maps. Writes answered dialogs to `<agentDir>/ui-history/<sessionId>.jsonl`\n * (NDJSON) so a daemon restart still restores read-only cards.\n */\nexport class ExtensionUiBridge {\n /**\n * Pending `ctx.ui` dialog requests (extension \u2192 web frontend). Keyed by a\n * UUID; resolveUi() completes the Promise so the extension continues.\n * Same pattern as pi's RPC `extension_ui_request`/`extension_ui_response`.\n */\n private readonly uiPending = new Map<string, { resolve: (result: Record<string, unknown>) => void; timer?: NodeJS.Timeout; request: Record<string, unknown> }>();\n\n /**\n * Task-level turn counter per session (agent_start = one turn). Cards\n * record their turn so the frontend can anchor them to the right work\n * block, not just the last one. After a daemon restart the counter is\n * re-based on the persisted ui-history (continuing a session keeps the\n * next card on the correct turn).\n */\n private readonly turnCounters = new Map<string, number>();\n\n /** Most recent tool call per session (tool_execution_start). The triggering\n * tool's id is stamped onto each ctx.ui request so the frontend can anchor\n * the card to that exact tool call (stable across reloads). */\n private readonly lastToolCallIds = new Map<string, string>();\n\n /**\n * Extension widgets (ctx.ui.setWidget) \u2014 shared by all sessions so\n * module-level widgets (rpiv-todo's TodoOverlay) whose `tui` points at one\n * mock still see every widget on requestRender.\n */\n private readonly widgetRegistry = new Map<string, { render: (w: number) => string[]; placement?: string; sessionId: string }>();\n\n /** Latest rendered widget lines (key \u2192 lines + owner session) \u2014 lets a\n * freshly-connected web frontend re-hydrate widgets after a reload. */\n private readonly widgetLinesCache = new Map<string, { lines: string[]; placement: string; sessionId: string }>();\n\n constructor(\n private readonly bus: EventBus<CoreEventMap>,\n /** Provider for the agent dir (ui-history lives under it). */\n private readonly agentDir: () => string,\n ) {}\n\n /** Next turn number for a session. The base comes from the session's OWN\n * history (user-message count = completed task turns), which is durable\n * across daemon restarts and independent of ui-history (which may be\n * cleared). ui-history max-turn is only a legacy fallback. */\n nextTurn(sessionId: string): number {\n const cur = this.turnCounters.get(sessionId);\n if (cur !== undefined) {\n const n = cur + 1;\n this.turnCounters.set(sessionId, n);\n return n;\n }\n let base = 0;\n try {\n const f = join(this.agentDir(), \"ui-history\", `${sessionId}.jsonl`);\n if (existsSync(f)) {\n for (const line of readFileSync(f, \"utf8\").split(\"\\n\")) {\n if (!line.trim()) continue;\n try {\n const t = (JSON.parse(line).request as { turn?: number })?.turn ?? 0;\n if (t > base) base = t;\n } catch {\n // skip corrupt line\n }\n }\n }\n } catch {\n // non-fatal\n }\n // By the time agent_start fires, the current user message is already\n // flushed to the session JSONL \u2014 so `base` already INCLUDES the current\n // turn. Turn = base (not base+1); a brand-new session (base 0) is turn 1.\n const n = base > 0 ? base : 1;\n this.turnCounters.set(sessionId, n);\n return n;\n }\n\n /** Remember the triggering tool call for a session (tool_execution_start). */\n noteToolCall(sessionId: string, toolCallId: string): void {\n this.lastToolCallIds.set(sessionId, toolCallId);\n }\n\n /**\n * Builds the ExtensionUIContext handed to extensions for a session. Each\n * dialog emits a `ui.request` bus event (forwarded to the GUI over\n * WebSocket); the frontend renders the dialog and calls `resolveUi()` via\n * the `ui.respond` RPC. Fire-and-forget methods (notify/\u2026) are forwarded\n * as events with no pending promise.\n */\n createUiContext(sessionId: string): ExtensionUIContext {\n const request = <T>(\n method: \"select\" | \"confirm\" | \"input\",\n payload: Record<string, unknown>,\n opts: ExtensionUIDialogOptions | undefined,\n pick: (r: Record<string, unknown>) => T,\n ): Promise<T> => {\n const id = randomUUID();\n return new Promise<T>((resolve) => {\n const timer = opts?.timeout ? setTimeout(() => {\n this.uiPending.delete(id);\n resolve(pick({ cancelled: true }));\n }, opts.timeout) : undefined;\n this.uiPending.set(id, { resolve: (r) => { if (timer) clearTimeout(timer); resolve(pick(r)); }, timer, request: { type: \"ui.request\", id, method, timeout: opts?.timeout ?? null, ...payload, sessionId, turn: this.turnCounters.get(sessionId) ?? 0, toolCallId: this.lastToolCallIds.get(sessionId) } });\n void this.bus.emit(\"ui.request\", {\n type: \"ui.request\", id, method, timeout: opts?.timeout ?? null, ...payload,\n sessionId, // tell the frontend which session this dialog belongs to\n turn: this.turnCounters.get(sessionId) ?? 0, // which task-turn this card belongs to\n toolCallId: this.lastToolCallIds.get(sessionId), // the triggering tool call (stable anchor)\n });\n });\n };\n // \u2500\u2500 Widget support (aboveEditor / belowEditor fixed panels) \u2500\u2500\n // Registry + mock TUI live at BRIDGE level so all sessions share one;\n // module-level widgets (rpiv-todo's TodoOverlay) reference a single tui\n // mock whose requestRender must see every widget.\n const emitWidgetLines = (key: string, lines: string[], placement: string | undefined, sid: string) => {\n // Cache latest lines so a reloaded frontend can re-hydrate widgets.\n if (lines.length === 0) this.widgetLinesCache.delete(key);\n else this.widgetLinesCache.set(key, { lines, placement: placement ?? \"aboveEditor\", sessionId: sid });\n void this.bus.emit(\"ui.request\", {\n type: \"ui.request\", id: randomUUID(), method: \"widgetLines\",\n widgetKey: key, lines, placement: placement ?? \"aboveEditor\",\n sessionId: sid, // tell the frontend which session this widget belongs to\n });\n };\n // Mock TUI \u2014 requestRender re-renders ALL registered widgets (each with\n // its own owning session).\n const widgetTui = { requestRender: () => {\n for (const [key, w] of this.widgetRegistry) {\n try { emitWidgetLines(key, w.render(80), w.placement, w.sessionId); } catch {}\n }\n }};\n\n return {\n select: (title, options, opts) =>\n request(\"select\", { title, options }, opts, (r) => (\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? String(r.value) : undefined)),\n confirm: (title, message, opts) =>\n request(\"confirm\", { title, message }, opts, (r) => (\"cancelled\" in r && r.cancelled ? false : \"confirmed\" in r ? r.confirmed === true : false)),\n input: (title, placeholder, opts) =>\n request(\"input\", { title, placeholder }, opts, (r) => (\"cancelled\" in r && r.cancelled ? undefined : \"value\" in r ? String(r.value) : undefined)),\n notify: (message, type) => {\n void this.bus.emit(\"ui.request\", {\n type: \"ui.request\", id: randomUUID(), method: \"notify\", message, notifyType: type ?? \"info\",\n });\n },\n setStatus: (key, text) => {\n // Persistent status text (shown above the input bar, like a status\n // strip). undefined clears the item for that key.\n void this.bus.emit(\"ui.request\", {\n type: \"ui.request\", id: randomUUID(), method: \"setStatus\", statusKey: key, statusText: text ?? null,\n });\n },\n // \u2500\u2500 TUI-only methods \u2014 no-op / degraded (same as pi's RPC mode) \u2500\u2500\n onTerminalInput: () => () => {},\n setWorkingMessage: () => {},\n setWorkingVisible: () => {},\n setWorkingIndicator: () => {},\n setHiddenThinkingLabel: () => {},\n setWidget: (key, content, options) => {\n if (content === undefined) {\n this.widgetRegistry.delete(key);\n emitWidgetLines(key, [], undefined, sessionId);\n return;\n }\n if (typeof content === \"function\") {\n // Factory form: mock tui + theme, call factory, get render, forward.\n try {\n const widget = content(widgetTui as never, {\n fg: (_c: string, t: string) => t,\n bg: (_c: string, t: string) => t,\n bold: (t: string) => t,\n italic: (t: string) => t,\n underline: (t: string) => t,\n inverse: (t: string) => t,\n strikethrough: (t: string) => t,\n getFgAnsi: () => \"\",\n getBgAnsi: () => \"\",\n getColorMode: () => \"dark\",\n getThinkingBorderColor: () => (t: string) => t,\n getBashModeBorderColor: () => (t: string) => t,\n } as never);\n this.widgetRegistry.set(key, { render: widget.render, placement: options?.placement, sessionId });\n const lines = widget.render(80);\n emitWidgetLines(key, lines, options?.placement, sessionId);\n } catch { /* factory/widget crashed \u2014 skip */ }\n return;\n }\n if (Array.isArray(content)) {\n // String array form: forward directly.\n this.widgetRegistry.delete(key);\n emitWidgetLines(key, content, options?.placement, sessionId);\n return;\n }\n },\n setFooter: () => {},\n setHeader: () => {},\n setEditorComponent: () => {},\n setEditorText: () => {},\n getEditorText: () => \"\",\n pasteToEditor: () => {},\n setToolsExpanded: () => {},\n getToolsExpanded: () => false,\n getAllThemes: () => [],\n getTheme: () => undefined,\n setTheme: () => ({ success: false, error: \"themes not supported in web mode\" }),\n custom: () => Promise.resolve(undefined) as never,\n setTitle: () => {},\n editor: (_title, _prefill) => Promise.resolve<string | undefined>(undefined),\n addAutocompleteProvider: () => {},\n getEditorComponent: () => undefined,\n // Terminal theme mock \u2014 every coloring/styling method returns the text\n // as-is (no ANSI codes; the web frontend colors with CSS). This lets\n // extensions like permission-gate call theme.fg()/bold() safely.\n theme: {\n fg: (_color: string, text: string) => text,\n bg: (_color: string, text: string) => text,\n bold: (text: string) => text,\n italic: (text: string) => text,\n underline: (text: string) => text,\n inverse: (text: string) => text,\n strikethrough: (text: string) => text,\n getFgAnsi: () => \"\",\n getBgAnsi: () => \"\",\n getColorMode: () => \"dark\",\n getThinkingBorderColor: () => (t: string) => t,\n getBashModeBorderColor: () => (t: string) => t,\n } as never,\n };\n }\n\n /** Resolve a pending extension UI dialog (from the `ui.respond` RPC). */\n resolveUi(id: string, result: Record<string, unknown>): void {\n const pending = this.uiPending.get(id);\n if (pending) {\n this.uiPending.delete(id);\n // Persist the answered exchange to disk (~/.pi/agent/ui-history/\u2026) so a\n // daemon RESTART (not just a page reload) still restores the read-only\n // cards in the conversation stream \u2014 durable, not a memory cache.\n const request = pending.request;\n try {\n const sid = String((request as { sessionId?: unknown }).sessionId ?? \"global\");\n const dir = join(this.agentDir(), \"ui-history\");\n mkdirSync(dir, { recursive: true });\n appendFileSync(join(dir, `${sid}.jsonl`), JSON.stringify({ request, result, ts: Date.now() }) + \"\\n\", \"utf8\");\n } catch {\n // Non-fatal: the extension still resolves; only the history record is lost.\n }\n pending.resolve(result);\n }\n }\n\n /** Latest widget state (key \u2192 lines + owner session) for frontend re-hydration. */\n getWidgets(): Record<string, { lines: string[]; placement: string; sessionId: string }> {\n return Object.fromEntries(this.widgetLinesCache);\n }\n\n /** Pending extension dialogs (confirm/select/input) \u2014 still awaiting a\n * response after a page reload. Answered ones live on disk (ui.history). */\n getPendingUiRequests(): Array<{ id: string; request: Record<string, unknown> }> {\n const out: Array<{ id: string; request: Record<string, unknown> }> = [];\n for (const [id, p] of this.uiPending) {\n out.push({ id, request: p.request });\n }\n return out;\n }\n\n /**\n * Answered extension dialogs, DURABLY persisted per session on disk\n * (`~/.pi/agent/ui-history/<sessionId>.jsonl`, NDJSON append). Survives\n * daemon restarts \u2014 the frontend restores read-only cards from here.\n */\n getUiHistory(): Record<string, Array<{ request: Record<string, unknown>; result: Record<string, unknown> }>> {\n const out: Record<string, Array<{ request: Record<string, unknown>; result: Record<string, unknown> }>> = {};\n try {\n const dir = join(this.agentDir(), \"ui-history\");\n if (!existsSync(dir)) return out;\n for (const f of readdirSync(dir)) {\n if (!f.endsWith(\".jsonl\")) continue;\n const sid = f.slice(0, -\".jsonl\".length);\n const records: Array<{ request: Record<string, unknown>; result: Record<string, unknown> }> = [];\n for (const line of readFileSync(join(dir, f), \"utf8\").split(\"\\n\")) {\n if (line.trim().length > 0) {\n try {\n const parsed = JSON.parse(line) as { request: Record<string, unknown>; result: Record<string, unknown> };\n if (parsed.request && parsed.result) records.push(parsed);\n } catch {\n // Skip corrupt lines defensively.\n }\n }\n }\n if (records.length > 0) out[sid] = records;\n }\n } catch {\n // Non-fatal \u2014 history is best-effort.\n }\n return out;\n }\n}\n", "var util;\n(function (util) {\n util.assertEqual = (val) => val;\n function assertIs(_arg) { }\n util.assertIs = assertIs;\n function assertNever(_x) {\n throw new Error();\n }\n util.assertNever = assertNever;\n util.arrayToEnum = (items) => {\n const obj = {};\n for (const item of items) {\n obj[item] = item;\n }\n return obj;\n };\n util.getValidEnumValues = (obj) => {\n const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n const filtered = {};\n for (const k of validKeys) {\n filtered[k] = obj[k];\n }\n return util.objectValues(filtered);\n };\n util.objectValues = (obj) => {\n return util.objectKeys(obj).map(function (e) {\n return obj[e];\n });\n };\n util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n : (object) => {\n const keys = [];\n for (const key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n keys.push(key);\n }\n }\n return keys;\n };\n util.find = (arr, checker) => {\n for (const item of arr) {\n if (checker(item))\n return item;\n }\n return undefined;\n };\n util.isInteger = typeof Number.isInteger === \"function\"\n ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n function joinValues(array, separator = \" | \") {\n return array\n .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n .join(separator);\n }\n util.joinValues = joinValues;\n util.jsonStringifyReplacer = (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n return value;\n };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n objectUtil.mergeShapes = (first, second) => {\n return {\n ...first,\n ...second, // second overwrites first\n };\n };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n \"string\",\n \"nan\",\n \"number\",\n \"integer\",\n \"float\",\n \"boolean\",\n \"date\",\n \"bigint\",\n \"symbol\",\n \"function\",\n \"undefined\",\n \"null\",\n \"array\",\n \"object\",\n \"unknown\",\n \"promise\",\n \"void\",\n \"never\",\n \"map\",\n \"set\",\n]);\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return ZodParsedType.undefined;\n case \"string\":\n return ZodParsedType.string;\n case \"number\":\n return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n case \"boolean\":\n return ZodParsedType.boolean;\n case \"function\":\n return ZodParsedType.function;\n case \"bigint\":\n return ZodParsedType.bigint;\n case \"symbol\":\n return ZodParsedType.symbol;\n case \"object\":\n if (Array.isArray(data)) {\n return ZodParsedType.array;\n }\n if (data === null) {\n return ZodParsedType.null;\n }\n if (data.then &&\n typeof data.then === \"function\" &&\n data.catch &&\n typeof data.catch === \"function\") {\n return ZodParsedType.promise;\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return ZodParsedType.map;\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return ZodParsedType.set;\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return ZodParsedType.date;\n }\n return ZodParsedType.object;\n default:\n return ZodParsedType.unknown;\n }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n \"invalid_type\",\n \"invalid_literal\",\n \"custom\",\n \"invalid_union\",\n \"invalid_union_discriminator\",\n \"invalid_enum_value\",\n \"unrecognized_keys\",\n \"invalid_arguments\",\n \"invalid_return_type\",\n \"invalid_date\",\n \"invalid_string\",\n \"too_small\",\n \"too_big\",\n \"invalid_intersection_types\",\n \"not_multiple_of\",\n \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n const json = JSON.stringify(obj, null, 2);\n return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n get errors() {\n return this.issues;\n }\n constructor(issues) {\n super();\n this.issues = [];\n this.addIssue = (sub) => {\n this.issues = [...this.issues, sub];\n };\n this.addIssues = (subs = []) => {\n this.issues = [...this.issues, ...subs];\n };\n const actualProto = new.target.prototype;\n if (Object.setPrototypeOf) {\n // eslint-disable-next-line ban/ban\n Object.setPrototypeOf(this, actualProto);\n }\n else {\n this.__proto__ = actualProto;\n }\n this.name = \"ZodError\";\n this.issues = issues;\n }\n format(_mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\") {\n issue.unionErrors.map(processError);\n }\n else if (issue.code === \"invalid_return_type\") {\n processError(issue.returnTypeError);\n }\n else if (issue.code === \"invalid_arguments\") {\n processError(issue.argumentsError);\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n // if (typeof el === \"string\") {\n // curr[el] = curr[el] || { _errors: [] };\n // } else if (typeof el === \"number\") {\n // const errorArray: any = [];\n // errorArray._errors = [];\n // curr[el] = curr[el] || errorArray;\n // }\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(this);\n return fieldErrors;\n }\n static assert(value) {\n if (!(value instanceof ZodError)) {\n throw new Error(`Not a ZodError: ${value}`);\n }\n }\n toString() {\n return this.message;\n }\n get message() {\n return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n }\n get isEmpty() {\n return this.issues.length === 0;\n }\n flatten(mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of this.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n }\n get formErrors() {\n return this.flatten();\n }\n}\nZodError.create = (issues) => {\n const error = new ZodError(issues);\n return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n let message;\n switch (issue.code) {\n case ZodIssueCode.invalid_type:\n if (issue.received === ZodParsedType.undefined) {\n message = \"Required\";\n }\n else {\n message = `Expected ${issue.expected}, received ${issue.received}`;\n }\n break;\n case ZodIssueCode.invalid_literal:\n message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n break;\n case ZodIssueCode.unrecognized_keys:\n message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n break;\n case ZodIssueCode.invalid_union:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_union_discriminator:\n message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n break;\n case ZodIssueCode.invalid_enum_value:\n message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n break;\n case ZodIssueCode.invalid_arguments:\n message = `Invalid function arguments`;\n break;\n case ZodIssueCode.invalid_return_type:\n message = `Invalid function return type`;\n break;\n case ZodIssueCode.invalid_date:\n message = `Invalid date`;\n break;\n case ZodIssueCode.invalid_string:\n if (typeof issue.validation === \"object\") {\n if (\"includes\" in issue.validation) {\n message = `Invalid input: must include \"${issue.validation.includes}\"`;\n if (typeof issue.validation.position === \"number\") {\n message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n }\n }\n else if (\"startsWith\" in issue.validation) {\n message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n }\n else if (\"endsWith\" in issue.validation) {\n message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n }\n else {\n util.assertNever(issue.validation);\n }\n }\n else if (issue.validation !== \"regex\") {\n message = `Invalid ${issue.validation}`;\n }\n else {\n message = \"Invalid\";\n }\n break;\n case ZodIssueCode.too_small:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${issue.minimum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly equal to `\n : issue.inclusive\n ? `greater than or equal to `\n : `greater than `}${new Date(Number(issue.minimum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.too_big:\n if (issue.type === \"array\")\n message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n else if (issue.type === \"string\")\n message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n else if (issue.type === \"number\")\n message = `Number must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"bigint\")\n message = `BigInt must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `less than or equal to`\n : `less than`} ${issue.maximum}`;\n else if (issue.type === \"date\")\n message = `Date must be ${issue.exact\n ? `exactly`\n : issue.inclusive\n ? `smaller than or equal to`\n : `smaller than`} ${new Date(Number(issue.maximum))}`;\n else\n message = \"Invalid input\";\n break;\n case ZodIssueCode.custom:\n message = `Invalid input`;\n break;\n case ZodIssueCode.invalid_intersection_types:\n message = `Intersection results could not be merged`;\n break;\n case ZodIssueCode.not_multiple_of:\n message = `Number must be a multiple of ${issue.multipleOf}`;\n break;\n case ZodIssueCode.not_finite:\n message = \"Number must be finite\";\n break;\n default:\n message = _ctx.defaultError;\n util.assertNever(issue);\n }\n return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n overrideErrorMap = map;\n}\nfunction getErrorMap() {\n return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n const { data, path, errorMaps, issueData } = params;\n const fullPath = [...path, ...(issueData.path || [])];\n const fullIssue = {\n ...issueData,\n path: fullPath,\n };\n if (issueData.message !== undefined) {\n return {\n ...issueData,\n path: fullPath,\n message: issueData.message,\n };\n }\n let errorMessage = \"\";\n const maps = errorMaps\n .filter((m) => !!m)\n .slice()\n .reverse();\n for (const map of maps) {\n errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n }\n return {\n ...issueData,\n path: fullPath,\n message: errorMessage,\n };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n const overrideMap = getErrorMap();\n const issue = makeIssue({\n issueData: issueData,\n data: ctx.data,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap, // contextual error map is first priority\n ctx.schemaErrorMap, // then schema-bound map if available\n overrideMap, // then global override map\n overrideMap === errorMap ? undefined : errorMap, // then global default map\n ].filter((x) => !!x),\n });\n ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n constructor() {\n this.value = \"valid\";\n }\n dirty() {\n if (this.value === \"valid\")\n this.value = \"dirty\";\n }\n abort() {\n if (this.value !== \"aborted\")\n this.value = \"aborted\";\n }\n static mergeArray(status, results) {\n const arrayValue = [];\n for (const s of results) {\n if (s.status === \"aborted\")\n return INVALID;\n if (s.status === \"dirty\")\n status.dirty();\n arrayValue.push(s.value);\n }\n return { status: status.value, value: arrayValue };\n }\n static async mergeObjectAsync(status, pairs) {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n });\n }\n return ParseStatus.mergeObjectSync(status, syncPairs);\n }\n static mergeObjectSync(status, pairs) {\n const finalObject = {};\n for (const pair of pairs) {\n const { key, value } = pair;\n if (key.status === \"aborted\")\n return INVALID;\n if (value.status === \"aborted\")\n return INVALID;\n if (key.status === \"dirty\")\n status.dirty();\n if (value.status === \"dirty\")\n status.dirty();\n if (key.value !== \"__proto__\" &&\n (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n finalObject[key.value] = value.value;\n }\n }\n return { status: status.value, value: finalObject };\n }\n}\nconst INVALID = Object.freeze({\n status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n constructor(parent, value, path, key) {\n this._cachedPath = [];\n this.parent = parent;\n this.data = value;\n this._path = path;\n this._key = key;\n }\n get path() {\n if (!this._cachedPath.length) {\n if (this._key instanceof Array) {\n this._cachedPath.push(...this._path, ...this._key);\n }\n else {\n this._cachedPath.push(...this._path, this._key);\n }\n }\n return this._cachedPath;\n }\n}\nconst handleResult = (ctx, result) => {\n if (isValid(result)) {\n return { success: true, data: result.value };\n }\n else {\n if (!ctx.common.issues.length) {\n throw new Error(\"Validation failed but no issues detected.\");\n }\n return {\n success: false,\n get error() {\n if (this._error)\n return this._error;\n const error = new ZodError(ctx.common.issues);\n this._error = error;\n return this._error;\n },\n };\n }\n};\nfunction processCreateParams(params) {\n if (!params)\n return {};\n const { errorMap, invalid_type_error, required_error, description } = params;\n if (errorMap && (invalid_type_error || required_error)) {\n throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n }\n if (errorMap)\n return { errorMap: errorMap, description };\n const customMap = (iss, ctx) => {\n var _a, _b;\n const { message } = params;\n if (iss.code === \"invalid_enum_value\") {\n return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n }\n if (typeof ctx.data === \"undefined\") {\n return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n }\n if (iss.code !== \"invalid_type\")\n return { message: ctx.defaultError };\n return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n };\n return { errorMap: customMap, description };\n}\nclass ZodType {\n get description() {\n return this._def.description;\n }\n _getType(input) {\n return getParsedType(input.data);\n }\n _getOrReturnCtx(input, ctx) {\n return (ctx || {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n });\n }\n _processInputParams(input) {\n return {\n status: new ParseStatus(),\n ctx: {\n common: input.parent.common,\n data: input.data,\n parsedType: getParsedType(input.data),\n schemaErrorMap: this._def.errorMap,\n path: input.path,\n parent: input.parent,\n },\n };\n }\n _parseSync(input) {\n const result = this._parse(input);\n if (isAsync(result)) {\n throw new Error(\"Synchronous parse encountered promise.\");\n }\n return result;\n }\n _parseAsync(input) {\n const result = this._parse(input);\n return Promise.resolve(result);\n }\n parse(data, params) {\n const result = this.safeParse(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n safeParse(data, params) {\n var _a;\n const ctx = {\n common: {\n issues: [],\n async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n return handleResult(ctx, result);\n }\n \"~validate\"(data) {\n var _a, _b;\n const ctx = {\n common: {\n issues: [],\n async: !!this[\"~standard\"].async,\n },\n path: [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n if (!this[\"~standard\"].async) {\n try {\n const result = this._parseSync({ data, path: [], parent: ctx });\n return isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n };\n }\n catch (err) {\n if ((_b = (_a = err === null || err === void 0 ? void 0 : err.message) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes(\"encountered\")) {\n this[\"~standard\"].async = true;\n }\n ctx.common = {\n issues: [],\n async: true,\n };\n }\n }\n return this._parseAsync({ data, path: [], parent: ctx }).then((result) => isValid(result)\n ? {\n value: result.value,\n }\n : {\n issues: ctx.common.issues,\n });\n }\n async parseAsync(data, params) {\n const result = await this.safeParseAsync(data, params);\n if (result.success)\n return result.data;\n throw result.error;\n }\n async safeParseAsync(data, params) {\n const ctx = {\n common: {\n issues: [],\n contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n async: true,\n },\n path: (params === null || params === void 0 ? void 0 : params.path) || [],\n schemaErrorMap: this._def.errorMap,\n parent: null,\n data,\n parsedType: getParsedType(data),\n };\n const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n const result = await (isAsync(maybeAsyncResult)\n ? maybeAsyncResult\n : Promise.resolve(maybeAsyncResult));\n return handleResult(ctx, result);\n }\n refine(check, message) {\n const getIssueProperties = (val) => {\n if (typeof message === \"string\" || typeof message === \"undefined\") {\n return { message };\n }\n else if (typeof message === \"function\") {\n return message(val);\n }\n else {\n return message;\n }\n };\n return this._refinement((val, ctx) => {\n const result = check(val);\n const setError = () => ctx.addIssue({\n code: ZodIssueCode.custom,\n ...getIssueProperties(val),\n });\n if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n return result.then((data) => {\n if (!data) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n if (!result) {\n setError();\n return false;\n }\n else {\n return true;\n }\n });\n }\n refinement(check, refinementData) {\n return this._refinement((val, ctx) => {\n if (!check(val)) {\n ctx.addIssue(typeof refinementData === \"function\"\n ? refinementData(val, ctx)\n : refinementData);\n return false;\n }\n else {\n return true;\n }\n });\n }\n _refinement(refinement) {\n return new ZodEffects({\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"refinement\", refinement },\n });\n }\n superRefine(refinement) {\n return this._refinement(refinement);\n }\n constructor(def) {\n /** Alias of safeParseAsync */\n this.spa = this.safeParseAsync;\n this._def = def;\n this.parse = this.parse.bind(this);\n this.safeParse = this.safeParse.bind(this);\n this.parseAsync = this.parseAsync.bind(this);\n this.safeParseAsync = this.safeParseAsync.bind(this);\n this.spa = this.spa.bind(this);\n this.refine = this.refine.bind(this);\n this.refinement = this.refinement.bind(this);\n this.superRefine = this.superRefine.bind(this);\n this.optional = this.optional.bind(this);\n this.nullable = this.nullable.bind(this);\n this.nullish = this.nullish.bind(this);\n this.array = this.array.bind(this);\n this.promise = this.promise.bind(this);\n this.or = this.or.bind(this);\n this.and = this.and.bind(this);\n this.transform = this.transform.bind(this);\n this.brand = this.brand.bind(this);\n this.default = this.default.bind(this);\n this.catch = this.catch.bind(this);\n this.describe = this.describe.bind(this);\n this.pipe = this.pipe.bind(this);\n this.readonly = this.readonly.bind(this);\n this.isNullable = this.isNullable.bind(this);\n this.isOptional = this.isOptional.bind(this);\n this[\"~standard\"] = {\n version: 1,\n vendor: \"zod\",\n validate: (data) => this[\"~validate\"](data),\n };\n }\n optional() {\n return ZodOptional.create(this, this._def);\n }\n nullable() {\n return ZodNullable.create(this, this._def);\n }\n nullish() {\n return this.nullable().optional();\n }\n array() {\n return ZodArray.create(this);\n }\n promise() {\n return ZodPromise.create(this, this._def);\n }\n or(option) {\n return ZodUnion.create([this, option], this._def);\n }\n and(incoming) {\n return ZodIntersection.create(this, incoming, this._def);\n }\n transform(transform) {\n return new ZodEffects({\n ...processCreateParams(this._def),\n schema: this,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect: { type: \"transform\", transform },\n });\n }\n default(def) {\n const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodDefault({\n ...processCreateParams(this._def),\n innerType: this,\n defaultValue: defaultValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n });\n }\n brand() {\n return new ZodBranded({\n typeName: ZodFirstPartyTypeKind.ZodBranded,\n type: this,\n ...processCreateParams(this._def),\n });\n }\n catch(def) {\n const catchValueFunc = typeof def === \"function\" ? def : () => def;\n return new ZodCatch({\n ...processCreateParams(this._def),\n innerType: this,\n catchValue: catchValueFunc,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n });\n }\n describe(description) {\n const This = this.constructor;\n return new This({\n ...this._def,\n description,\n });\n }\n pipe(target) {\n return ZodPipeline.create(this, target);\n }\n readonly() {\n return ZodReadonly.create(this);\n }\n isOptional() {\n return this.safeParse(undefined).success;\n }\n isNullable() {\n return this.safeParse(null).success;\n }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;\n// const uuidRegex =\n// /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst jwtRegex = /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n// /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n// /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n// /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n// /^[a-z0-9.!#$%&\u2019*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/;\n// const ipv6Regex =\n// /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\nconst ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;\nconst ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// https://base64.guru/standards/base64url\nconst base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n if (args.precision) {\n regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n }\n else if (args.precision == null) {\n regex = `${regex}(\\\\.\\\\d+)?`;\n }\n return regex;\n}\nfunction timeRegex(args) {\n return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n const opts = [];\n opts.push(args.local ? `Z?` : `Z`);\n if (args.offset)\n opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n regex = `${regex}(${opts.join(\"|\")})`;\n return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n return true;\n }\n return false;\n}\nfunction isValidJWT(jwt, alg) {\n if (!jwtRegex.test(jwt))\n return false;\n try {\n const [header] = jwt.split(\".\");\n // Convert base64url to base64\n const base64 = header\n .replace(/-/g, \"+\")\n .replace(/_/g, \"/\")\n .padEnd(header.length + ((4 - (header.length % 4)) % 4), \"=\");\n const decoded = JSON.parse(atob(base64));\n if (typeof decoded !== \"object\" || decoded === null)\n return false;\n if (!decoded.typ || !decoded.alg)\n return false;\n if (alg && decoded.alg !== alg)\n return false;\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction isValidCidr(ip, version) {\n if ((version === \"v4\" || !version) && ipv4CidrRegex.test(ip)) {\n return true;\n }\n if ((version === \"v6\" || !version) && ipv6CidrRegex.test(ip)) {\n return true;\n }\n return false;\n}\nclass ZodString extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = String(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.string) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.string,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.length < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.length > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"length\") {\n const tooBig = input.data.length > check.value;\n const tooSmall = input.data.length < check.value;\n if (tooBig || tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n if (tooBig) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n else if (tooSmall) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"string\",\n inclusive: true,\n exact: true,\n message: check.message,\n });\n }\n status.dirty();\n }\n }\n else if (check.kind === \"email\") {\n if (!emailRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"email\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"emoji\") {\n if (!emojiRegex) {\n emojiRegex = new RegExp(_emojiRegex, \"u\");\n }\n if (!emojiRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"emoji\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"uuid\") {\n if (!uuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"uuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"nanoid\") {\n if (!nanoidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"nanoid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid\") {\n if (!cuidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cuid2\") {\n if (!cuid2Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cuid2\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ulid\") {\n if (!ulidRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ulid\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"url\") {\n try {\n new URL(input.data);\n }\n catch (_a) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"regex\") {\n check.regex.lastIndex = 0;\n const testResult = check.regex.test(input.data);\n if (!testResult) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"regex\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"trim\") {\n input.data = input.data.trim();\n }\n else if (check.kind === \"includes\") {\n if (!input.data.includes(check.value, check.position)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { includes: check.value, position: check.position },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"toLowerCase\") {\n input.data = input.data.toLowerCase();\n }\n else if (check.kind === \"toUpperCase\") {\n input.data = input.data.toUpperCase();\n }\n else if (check.kind === \"startsWith\") {\n if (!input.data.startsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { startsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"endsWith\") {\n if (!input.data.endsWith(check.value)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: { endsWith: check.value },\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"datetime\") {\n const regex = datetimeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"datetime\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"date\") {\n const regex = dateRegex;\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"date\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"time\") {\n const regex = timeRegex(check);\n if (!regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_string,\n validation: \"time\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"duration\") {\n if (!durationRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"duration\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"ip\") {\n if (!isValidIP(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"ip\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"jwt\") {\n if (!isValidJWT(input.data, check.alg)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"jwt\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"cidr\") {\n if (!isValidCidr(input.data, check.version)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"cidr\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64\") {\n if (!base64Regex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"base64url\") {\n if (!base64urlRegex.test(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n validation: \"base64url\",\n code: ZodIssueCode.invalid_string,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _regex(regex, validation, message) {\n return this.refinement((data) => regex.test(data), {\n validation,\n code: ZodIssueCode.invalid_string,\n ...errorUtil.errToObj(message),\n });\n }\n _addCheck(check) {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n email(message) {\n return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n }\n url(message) {\n return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n }\n emoji(message) {\n return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n }\n uuid(message) {\n return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n }\n nanoid(message) {\n return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n }\n cuid(message) {\n return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n }\n cuid2(message) {\n return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n }\n ulid(message) {\n return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n }\n base64(message) {\n return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n }\n base64url(message) {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return this._addCheck({\n kind: \"base64url\",\n ...errorUtil.errToObj(message),\n });\n }\n jwt(options) {\n return this._addCheck({ kind: \"jwt\", ...errorUtil.errToObj(options) });\n }\n ip(options) {\n return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n }\n cidr(options) {\n return this._addCheck({ kind: \"cidr\", ...errorUtil.errToObj(options) });\n }\n datetime(options) {\n var _a, _b;\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"datetime\",\n precision: null,\n offset: false,\n local: false,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"datetime\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n date(message) {\n return this._addCheck({ kind: \"date\", message });\n }\n time(options) {\n if (typeof options === \"string\") {\n return this._addCheck({\n kind: \"time\",\n precision: null,\n message: options,\n });\n }\n return this._addCheck({\n kind: \"time\",\n precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n duration(message) {\n return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n }\n regex(regex, message) {\n return this._addCheck({\n kind: \"regex\",\n regex: regex,\n ...errorUtil.errToObj(message),\n });\n }\n includes(value, options) {\n return this._addCheck({\n kind: \"includes\",\n value: value,\n position: options === null || options === void 0 ? void 0 : options.position,\n ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n });\n }\n startsWith(value, message) {\n return this._addCheck({\n kind: \"startsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n endsWith(value, message) {\n return this._addCheck({\n kind: \"endsWith\",\n value: value,\n ...errorUtil.errToObj(message),\n });\n }\n min(minLength, message) {\n return this._addCheck({\n kind: \"min\",\n value: minLength,\n ...errorUtil.errToObj(message),\n });\n }\n max(maxLength, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxLength,\n ...errorUtil.errToObj(message),\n });\n }\n length(len, message) {\n return this._addCheck({\n kind: \"length\",\n value: len,\n ...errorUtil.errToObj(message),\n });\n }\n /**\n * Equivalent to `.min(1)`\n */\n nonempty(message) {\n return this.min(1, errorUtil.errToObj(message));\n }\n trim() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"trim\" }],\n });\n }\n toLowerCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n });\n }\n toUpperCase() {\n return new ZodString({\n ...this._def,\n checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n });\n }\n get isDatetime() {\n return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n }\n get isDate() {\n return !!this._def.checks.find((ch) => ch.kind === \"date\");\n }\n get isTime() {\n return !!this._def.checks.find((ch) => ch.kind === \"time\");\n }\n get isDuration() {\n return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n }\n get isEmail() {\n return !!this._def.checks.find((ch) => ch.kind === \"email\");\n }\n get isURL() {\n return !!this._def.checks.find((ch) => ch.kind === \"url\");\n }\n get isEmoji() {\n return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n }\n get isUUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n }\n get isNANOID() {\n return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n }\n get isCUID() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n }\n get isCUID2() {\n return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n }\n get isULID() {\n return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n }\n get isIP() {\n return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n }\n get isCIDR() {\n return !!this._def.checks.find((ch) => ch.kind === \"cidr\");\n }\n get isBase64() {\n return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n }\n get isBase64url() {\n // base64url encoding is a modification of base64 that can safely be used in URLs and filenames\n return !!this._def.checks.find((ch) => ch.kind === \"base64url\");\n }\n get minLength() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxLength() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodString.create = (params) => {\n var _a;\n return new ZodString({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodString,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n this.step = this.multipleOf;\n }\n _parse(input) {\n if (this._def.coerce) {\n input.data = Number(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.number) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.number,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"int\") {\n if (!util.isInteger(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: \"integer\",\n received: \"float\",\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: check.value,\n type: \"number\",\n inclusive: check.inclusive,\n exact: false,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (floatSafeRemainder(input.data, check.value) !== 0) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"finite\") {\n if (!Number.isFinite(input.data)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_finite,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodNumber({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodNumber({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n int(message) {\n return this._addCheck({\n kind: \"int\",\n message: errorUtil.toString(message),\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: 0,\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value: value,\n message: errorUtil.toString(message),\n });\n }\n finite(message) {\n return this._addCheck({\n kind: \"finite\",\n message: errorUtil.toString(message),\n });\n }\n safe(message) {\n return this._addCheck({\n kind: \"min\",\n inclusive: true,\n value: Number.MIN_SAFE_INTEGER,\n message: errorUtil.toString(message),\n })._addCheck({\n kind: \"max\",\n inclusive: true,\n value: Number.MAX_SAFE_INTEGER,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n get isInt() {\n return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n }\n get isFinite() {\n let max = null, min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"finite\" ||\n ch.kind === \"int\" ||\n ch.kind === \"multipleOf\") {\n return true;\n }\n else if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n else if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return Number.isFinite(min) && Number.isFinite(max);\n }\n}\nZodNumber.create = (params) => {\n return new ZodNumber({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodNumber,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodBigInt extends ZodType {\n constructor() {\n super(...arguments);\n this.min = this.gte;\n this.max = this.lte;\n }\n _parse(input) {\n if (this._def.coerce) {\n try {\n input.data = BigInt(input.data);\n }\n catch (_a) {\n return this._getInvalidInput(input);\n }\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.bigint) {\n return this._getInvalidInput(input);\n }\n let ctx = undefined;\n const status = new ParseStatus();\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n const tooSmall = check.inclusive\n ? input.data < check.value\n : input.data <= check.value;\n if (tooSmall) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n type: \"bigint\",\n minimum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n const tooBig = check.inclusive\n ? input.data > check.value\n : input.data >= check.value;\n if (tooBig) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n type: \"bigint\",\n maximum: check.value,\n inclusive: check.inclusive,\n message: check.message,\n });\n status.dirty();\n }\n }\n else if (check.kind === \"multipleOf\") {\n if (input.data % check.value !== BigInt(0)) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.not_multiple_of,\n multipleOf: check.value,\n message: check.message,\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return { status: status.value, value: input.data };\n }\n _getInvalidInput(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.bigint,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n gte(value, message) {\n return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n }\n gt(value, message) {\n return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n }\n lte(value, message) {\n return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n }\n lt(value, message) {\n return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n }\n setLimit(kind, value, inclusive, message) {\n return new ZodBigInt({\n ...this._def,\n checks: [\n ...this._def.checks,\n {\n kind,\n value,\n inclusive,\n message: errorUtil.toString(message),\n },\n ],\n });\n }\n _addCheck(check) {\n return new ZodBigInt({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n positive(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n negative(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: false,\n message: errorUtil.toString(message),\n });\n }\n nonpositive(message) {\n return this._addCheck({\n kind: \"max\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n nonnegative(message) {\n return this._addCheck({\n kind: \"min\",\n value: BigInt(0),\n inclusive: true,\n message: errorUtil.toString(message),\n });\n }\n multipleOf(value, message) {\n return this._addCheck({\n kind: \"multipleOf\",\n value,\n message: errorUtil.toString(message),\n });\n }\n get minValue() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min;\n }\n get maxValue() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max;\n }\n}\nZodBigInt.create = (params) => {\n var _a;\n return new ZodBigInt({\n checks: [],\n typeName: ZodFirstPartyTypeKind.ZodBigInt,\n coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n ...processCreateParams(params),\n });\n};\nclass ZodBoolean extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = Boolean(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.boolean) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.boolean,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodBoolean.create = (params) => {\n return new ZodBoolean({\n typeName: ZodFirstPartyTypeKind.ZodBoolean,\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n ...processCreateParams(params),\n });\n};\nclass ZodDate extends ZodType {\n _parse(input) {\n if (this._def.coerce) {\n input.data = new Date(input.data);\n }\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.date) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.date,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (isNaN(input.data.getTime())) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_date,\n });\n return INVALID;\n }\n const status = new ParseStatus();\n let ctx = undefined;\n for (const check of this._def.checks) {\n if (check.kind === \"min\") {\n if (input.data.getTime() < check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n message: check.message,\n inclusive: true,\n exact: false,\n minimum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else if (check.kind === \"max\") {\n if (input.data.getTime() > check.value) {\n ctx = this._getOrReturnCtx(input, ctx);\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n message: check.message,\n inclusive: true,\n exact: false,\n maximum: check.value,\n type: \"date\",\n });\n status.dirty();\n }\n }\n else {\n util.assertNever(check);\n }\n }\n return {\n status: status.value,\n value: new Date(input.data.getTime()),\n };\n }\n _addCheck(check) {\n return new ZodDate({\n ...this._def,\n checks: [...this._def.checks, check],\n });\n }\n min(minDate, message) {\n return this._addCheck({\n kind: \"min\",\n value: minDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n max(maxDate, message) {\n return this._addCheck({\n kind: \"max\",\n value: maxDate.getTime(),\n message: errorUtil.toString(message),\n });\n }\n get minDate() {\n let min = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"min\") {\n if (min === null || ch.value > min)\n min = ch.value;\n }\n }\n return min != null ? new Date(min) : null;\n }\n get maxDate() {\n let max = null;\n for (const ch of this._def.checks) {\n if (ch.kind === \"max\") {\n if (max === null || ch.value < max)\n max = ch.value;\n }\n }\n return max != null ? new Date(max) : null;\n }\n}\nZodDate.create = (params) => {\n return new ZodDate({\n checks: [],\n coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n typeName: ZodFirstPartyTypeKind.ZodDate,\n ...processCreateParams(params),\n });\n};\nclass ZodSymbol extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.symbol) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.symbol,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodSymbol.create = (params) => {\n return new ZodSymbol({\n typeName: ZodFirstPartyTypeKind.ZodSymbol,\n ...processCreateParams(params),\n });\n};\nclass ZodUndefined extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.undefined,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodUndefined.create = (params) => {\n return new ZodUndefined({\n typeName: ZodFirstPartyTypeKind.ZodUndefined,\n ...processCreateParams(params),\n });\n};\nclass ZodNull extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.null) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.null,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodNull.create = (params) => {\n return new ZodNull({\n typeName: ZodFirstPartyTypeKind.ZodNull,\n ...processCreateParams(params),\n });\n};\nclass ZodAny extends ZodType {\n constructor() {\n super(...arguments);\n // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n this._any = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodAny.create = (params) => {\n return new ZodAny({\n typeName: ZodFirstPartyTypeKind.ZodAny,\n ...processCreateParams(params),\n });\n};\nclass ZodUnknown extends ZodType {\n constructor() {\n super(...arguments);\n // required\n this._unknown = true;\n }\n _parse(input) {\n return OK(input.data);\n }\n}\nZodUnknown.create = (params) => {\n return new ZodUnknown({\n typeName: ZodFirstPartyTypeKind.ZodUnknown,\n ...processCreateParams(params),\n });\n};\nclass ZodNever extends ZodType {\n _parse(input) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.never,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n}\nZodNever.create = (params) => {\n return new ZodNever({\n typeName: ZodFirstPartyTypeKind.ZodNever,\n ...processCreateParams(params),\n });\n};\nclass ZodVoid extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.undefined) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.void,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n}\nZodVoid.create = (params) => {\n return new ZodVoid({\n typeName: ZodFirstPartyTypeKind.ZodVoid,\n ...processCreateParams(params),\n });\n};\nclass ZodArray extends ZodType {\n _parse(input) {\n const { ctx, status } = this._processInputParams(input);\n const def = this._def;\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (def.exactLength !== null) {\n const tooBig = ctx.data.length > def.exactLength.value;\n const tooSmall = ctx.data.length < def.exactLength.value;\n if (tooBig || tooSmall) {\n addIssueToContext(ctx, {\n code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n minimum: (tooSmall ? def.exactLength.value : undefined),\n maximum: (tooBig ? def.exactLength.value : undefined),\n type: \"array\",\n inclusive: true,\n exact: true,\n message: def.exactLength.message,\n });\n status.dirty();\n }\n }\n if (def.minLength !== null) {\n if (ctx.data.length < def.minLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.minLength.message,\n });\n status.dirty();\n }\n }\n if (def.maxLength !== null) {\n if (ctx.data.length > def.maxLength.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxLength.value,\n type: \"array\",\n inclusive: true,\n exact: false,\n message: def.maxLength.message,\n });\n status.dirty();\n }\n }\n if (ctx.common.async) {\n return Promise.all([...ctx.data].map((item, i) => {\n return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n })).then((result) => {\n return ParseStatus.mergeArray(status, result);\n });\n }\n const result = [...ctx.data].map((item, i) => {\n return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n });\n return ParseStatus.mergeArray(status, result);\n }\n get element() {\n return this._def.type;\n }\n min(minLength, message) {\n return new ZodArray({\n ...this._def,\n minLength: { value: minLength, message: errorUtil.toString(message) },\n });\n }\n max(maxLength, message) {\n return new ZodArray({\n ...this._def,\n maxLength: { value: maxLength, message: errorUtil.toString(message) },\n });\n }\n length(len, message) {\n return new ZodArray({\n ...this._def,\n exactLength: { value: len, message: errorUtil.toString(message) },\n });\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodArray.create = (schema, params) => {\n return new ZodArray({\n type: schema,\n minLength: null,\n maxLength: null,\n exactLength: null,\n typeName: ZodFirstPartyTypeKind.ZodArray,\n ...processCreateParams(params),\n });\n};\nfunction deepPartialify(schema) {\n if (schema instanceof ZodObject) {\n const newShape = {};\n for (const key in schema.shape) {\n const fieldSchema = schema.shape[key];\n newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n }\n return new ZodObject({\n ...schema._def,\n shape: () => newShape,\n });\n }\n else if (schema instanceof ZodArray) {\n return new ZodArray({\n ...schema._def,\n type: deepPartialify(schema.element),\n });\n }\n else if (schema instanceof ZodOptional) {\n return ZodOptional.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodNullable) {\n return ZodNullable.create(deepPartialify(schema.unwrap()));\n }\n else if (schema instanceof ZodTuple) {\n return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n }\n else {\n return schema;\n }\n}\nclass ZodObject extends ZodType {\n constructor() {\n super(...arguments);\n this._cached = null;\n /**\n * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n * If you want to pass through unknown properties, use `.passthrough()` instead.\n */\n this.nonstrict = this.passthrough;\n // extend<\n // Augmentation extends ZodRawShape,\n // NewOutput extends util.flatten<{\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // }>,\n // NewInput extends util.flatten<{\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }>\n // >(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<T, Augmentation>,\n // UnknownKeys,\n // Catchall,\n // NewOutput,\n // NewInput\n // > {\n // return new ZodObject({\n // ...this._def,\n // shape: () => ({\n // ...this._def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // }\n /**\n * @deprecated Use `.extend` instead\n * */\n this.augment = this.extend;\n }\n _getCached() {\n if (this._cached !== null)\n return this._cached;\n const shape = this._def.shape();\n const keys = util.objectKeys(shape);\n return (this._cached = { shape, keys });\n }\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.object) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const { status, ctx } = this._processInputParams(input);\n const { shape, keys: shapeKeys } = this._getCached();\n const extraKeys = [];\n if (!(this._def.catchall instanceof ZodNever &&\n this._def.unknownKeys === \"strip\")) {\n for (const key in ctx.data) {\n if (!shapeKeys.includes(key)) {\n extraKeys.push(key);\n }\n }\n }\n const pairs = [];\n for (const key of shapeKeys) {\n const keyValidator = shape[key];\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (this._def.catchall instanceof ZodNever) {\n const unknownKeys = this._def.unknownKeys;\n if (unknownKeys === \"passthrough\") {\n for (const key of extraKeys) {\n pairs.push({\n key: { status: \"valid\", value: key },\n value: { status: \"valid\", value: ctx.data[key] },\n });\n }\n }\n else if (unknownKeys === \"strict\") {\n if (extraKeys.length > 0) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.unrecognized_keys,\n keys: extraKeys,\n });\n status.dirty();\n }\n }\n else if (unknownKeys === \"strip\") ;\n else {\n throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n }\n }\n else {\n // run catchall validation\n const catchall = this._def.catchall;\n for (const key of extraKeys) {\n const value = ctx.data[key];\n pairs.push({\n key: { status: \"valid\", value: key },\n value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n ),\n alwaysSet: key in ctx.data,\n });\n }\n }\n if (ctx.common.async) {\n return Promise.resolve()\n .then(async () => {\n const syncPairs = [];\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n syncPairs.push({\n key,\n value,\n alwaysSet: pair.alwaysSet,\n });\n }\n return syncPairs;\n })\n .then((syncPairs) => {\n return ParseStatus.mergeObjectSync(status, syncPairs);\n });\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get shape() {\n return this._def.shape();\n }\n strict(message) {\n errorUtil.errToObj;\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strict\",\n ...(message !== undefined\n ? {\n errorMap: (issue, ctx) => {\n var _a, _b, _c, _d;\n const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n if (issue.code === \"unrecognized_keys\")\n return {\n message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n };\n return {\n message: defaultError,\n };\n },\n }\n : {}),\n });\n }\n strip() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"strip\",\n });\n }\n passthrough() {\n return new ZodObject({\n ...this._def,\n unknownKeys: \"passthrough\",\n });\n }\n // const AugmentFactory =\n // <Def extends ZodObjectDef>(def: Def) =>\n // <Augmentation extends ZodRawShape>(\n // augmentation: Augmentation\n // ): ZodObject<\n // extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n // Def[\"unknownKeys\"],\n // Def[\"catchall\"]\n // > => {\n // return new ZodObject({\n // ...def,\n // shape: () => ({\n // ...def.shape(),\n // ...augmentation,\n // }),\n // }) as any;\n // };\n extend(augmentation) {\n return new ZodObject({\n ...this._def,\n shape: () => ({\n ...this._def.shape(),\n ...augmentation,\n }),\n });\n }\n /**\n * Prior to zod@1.0.12 there was a bug in the\n * inferred type of merged objects. Please\n * upgrade if you are experiencing issues.\n */\n merge(merging) {\n const merged = new ZodObject({\n unknownKeys: merging._def.unknownKeys,\n catchall: merging._def.catchall,\n shape: () => ({\n ...this._def.shape(),\n ...merging._def.shape(),\n }),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n });\n return merged;\n }\n // merge<\n // Incoming extends AnyZodObject,\n // Augmentation extends Incoming[\"shape\"],\n // NewOutput extends {\n // [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n // ? Augmentation[k][\"_output\"]\n // : k extends keyof Output\n // ? Output[k]\n // : never;\n // },\n // NewInput extends {\n // [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n // ? Augmentation[k][\"_input\"]\n // : k extends keyof Input\n // ? Input[k]\n // : never;\n // }\n // >(\n // merging: Incoming\n // ): ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"],\n // NewOutput,\n // NewInput\n // > {\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n setKey(key, schema) {\n return this.augment({ [key]: schema });\n }\n // merge<Incoming extends AnyZodObject>(\n // merging: Incoming\n // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n // ZodObject<\n // extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n // Incoming[\"_def\"][\"unknownKeys\"],\n // Incoming[\"_def\"][\"catchall\"]\n // > {\n // // const mergedShape = objectUtil.mergeShapes(\n // // this._def.shape(),\n // // merging._def.shape()\n // // );\n // const merged: any = new ZodObject({\n // unknownKeys: merging._def.unknownKeys,\n // catchall: merging._def.catchall,\n // shape: () =>\n // objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n // typeName: ZodFirstPartyTypeKind.ZodObject,\n // }) as any;\n // return merged;\n // }\n catchall(index) {\n return new ZodObject({\n ...this._def,\n catchall: index,\n });\n }\n pick(mask) {\n const shape = {};\n util.objectKeys(mask).forEach((key) => {\n if (mask[key] && this.shape[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n omit(mask) {\n const shape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (!mask[key]) {\n shape[key] = this.shape[key];\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => shape,\n });\n }\n /**\n * @deprecated\n */\n deepPartial() {\n return deepPartialify(this);\n }\n partial(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n const fieldSchema = this.shape[key];\n if (mask && !mask[key]) {\n newShape[key] = fieldSchema;\n }\n else {\n newShape[key] = fieldSchema.optional();\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n required(mask) {\n const newShape = {};\n util.objectKeys(this.shape).forEach((key) => {\n if (mask && !mask[key]) {\n newShape[key] = this.shape[key];\n }\n else {\n const fieldSchema = this.shape[key];\n let newField = fieldSchema;\n while (newField instanceof ZodOptional) {\n newField = newField._def.innerType;\n }\n newShape[key] = newField;\n }\n });\n return new ZodObject({\n ...this._def,\n shape: () => newShape,\n });\n }\n keyof() {\n return createZodEnum(util.objectKeys(this.shape));\n }\n}\nZodObject.create = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.strictCreate = (shape, params) => {\n return new ZodObject({\n shape: () => shape,\n unknownKeys: \"strict\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nZodObject.lazycreate = (shape, params) => {\n return new ZodObject({\n shape,\n unknownKeys: \"strip\",\n catchall: ZodNever.create(),\n typeName: ZodFirstPartyTypeKind.ZodObject,\n ...processCreateParams(params),\n });\n};\nclass ZodUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const options = this._def.options;\n function handleResults(results) {\n // return first issue-free validation if it exists\n for (const result of results) {\n if (result.result.status === \"valid\") {\n return result.result;\n }\n }\n for (const result of results) {\n if (result.result.status === \"dirty\") {\n // add issues from dirty option\n ctx.common.issues.push(...result.ctx.common.issues);\n return result.result;\n }\n }\n // return invalid\n const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return Promise.all(options.map(async (option) => {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n return {\n result: await option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n }),\n ctx: childCtx,\n };\n })).then(handleResults);\n }\n else {\n let dirty = undefined;\n const issues = [];\n for (const option of options) {\n const childCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n parent: null,\n };\n const result = option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: childCtx,\n });\n if (result.status === \"valid\") {\n return result;\n }\n else if (result.status === \"dirty\" && !dirty) {\n dirty = { result, ctx: childCtx };\n }\n if (childCtx.common.issues.length) {\n issues.push(childCtx.common.issues);\n }\n }\n if (dirty) {\n ctx.common.issues.push(...dirty.ctx.common.issues);\n return dirty.result;\n }\n const unionErrors = issues.map((issues) => new ZodError(issues));\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union,\n unionErrors,\n });\n return INVALID;\n }\n }\n get options() {\n return this._def.options;\n }\n}\nZodUnion.create = (types, params) => {\n return new ZodUnion({\n options: types,\n typeName: ZodFirstPartyTypeKind.ZodUnion,\n ...processCreateParams(params),\n });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n////////// //////////\n////////// ZodDiscriminatedUnion //////////\n////////// //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n if (type instanceof ZodLazy) {\n return getDiscriminator(type.schema);\n }\n else if (type instanceof ZodEffects) {\n return getDiscriminator(type.innerType());\n }\n else if (type instanceof ZodLiteral) {\n return [type.value];\n }\n else if (type instanceof ZodEnum) {\n return type.options;\n }\n else if (type instanceof ZodNativeEnum) {\n // eslint-disable-next-line ban/ban\n return util.objectValues(type.enum);\n }\n else if (type instanceof ZodDefault) {\n return getDiscriminator(type._def.innerType);\n }\n else if (type instanceof ZodUndefined) {\n return [undefined];\n }\n else if (type instanceof ZodNull) {\n return [null];\n }\n else if (type instanceof ZodOptional) {\n return [undefined, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodNullable) {\n return [null, ...getDiscriminator(type.unwrap())];\n }\n else if (type instanceof ZodBranded) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodReadonly) {\n return getDiscriminator(type.unwrap());\n }\n else if (type instanceof ZodCatch) {\n return getDiscriminator(type._def.innerType);\n }\n else {\n return [];\n }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const discriminator = this.discriminator;\n const discriminatorValue = ctx.data[discriminator];\n const option = this.optionsMap.get(discriminatorValue);\n if (!option) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_union_discriminator,\n options: Array.from(this.optionsMap.keys()),\n path: [discriminator],\n });\n return INVALID;\n }\n if (ctx.common.async) {\n return option._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n else {\n return option._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n get discriminator() {\n return this._def.discriminator;\n }\n get options() {\n return this._def.options;\n }\n get optionsMap() {\n return this._def.optionsMap;\n }\n /**\n * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n * have a different value for each object in the union.\n * @param discriminator the name of the discriminator property\n * @param types an array of object schemas\n * @param params\n */\n static create(discriminator, options, params) {\n // Get all the valid discriminator values\n const optionsMap = new Map();\n // try {\n for (const type of options) {\n const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n if (!discriminatorValues.length) {\n throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n }\n for (const value of discriminatorValues) {\n if (optionsMap.has(value)) {\n throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n }\n optionsMap.set(value, type);\n }\n }\n return new ZodDiscriminatedUnion({\n typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n discriminator,\n options,\n optionsMap,\n ...processCreateParams(params),\n });\n }\n}\nfunction mergeValues(a, b) {\n const aType = getParsedType(a);\n const bType = getParsedType(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n const bKeys = util.objectKeys(b);\n const sharedKeys = util\n .objectKeys(a)\n .filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n if (a.length !== b.length) {\n return { valid: false };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return { valid: false };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n else if (aType === ZodParsedType.date &&\n bType === ZodParsedType.date &&\n +a === +b) {\n return { valid: true, data: a };\n }\n else {\n return { valid: false };\n }\n}\nclass ZodIntersection extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const handleParsed = (parsedLeft, parsedRight) => {\n if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n return INVALID;\n }\n const merged = mergeValues(parsedLeft.value, parsedRight.value);\n if (!merged.valid) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_intersection_types,\n });\n return INVALID;\n }\n if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n status.dirty();\n }\n return { status: status.value, value: merged.data };\n };\n if (ctx.common.async) {\n return Promise.all([\n this._def.left._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n this._def.right._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }),\n ]).then(([left, right]) => handleParsed(left, right));\n }\n else {\n return handleParsed(this._def.left._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }), this._def.right._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n }));\n }\n }\n}\nZodIntersection.create = (left, right, params) => {\n return new ZodIntersection({\n left: left,\n right: right,\n typeName: ZodFirstPartyTypeKind.ZodIntersection,\n ...processCreateParams(params),\n });\n};\nclass ZodTuple extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.array) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.array,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n if (ctx.data.length < this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n return INVALID;\n }\n const rest = this._def.rest;\n if (!rest && ctx.data.length > this._def.items.length) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: this._def.items.length,\n inclusive: true,\n exact: false,\n type: \"array\",\n });\n status.dirty();\n }\n const items = [...ctx.data]\n .map((item, itemIndex) => {\n const schema = this._def.items[itemIndex] || this._def.rest;\n if (!schema)\n return null;\n return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n })\n .filter((x) => !!x); // filter nulls\n if (ctx.common.async) {\n return Promise.all(items).then((results) => {\n return ParseStatus.mergeArray(status, results);\n });\n }\n else {\n return ParseStatus.mergeArray(status, items);\n }\n }\n get items() {\n return this._def.items;\n }\n rest(rest) {\n return new ZodTuple({\n ...this._def,\n rest,\n });\n }\n}\nZodTuple.create = (schemas, params) => {\n if (!Array.isArray(schemas)) {\n throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n }\n return new ZodTuple({\n items: schemas,\n typeName: ZodFirstPartyTypeKind.ZodTuple,\n rest: null,\n ...processCreateParams(params),\n });\n};\nclass ZodRecord extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.object) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.object,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const pairs = [];\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n for (const key in ctx.data) {\n pairs.push({\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n alwaysSet: key in ctx.data,\n });\n }\n if (ctx.common.async) {\n return ParseStatus.mergeObjectAsync(status, pairs);\n }\n else {\n return ParseStatus.mergeObjectSync(status, pairs);\n }\n }\n get element() {\n return this._def.valueType;\n }\n static create(first, second, third) {\n if (second instanceof ZodType) {\n return new ZodRecord({\n keyType: first,\n valueType: second,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(third),\n });\n }\n return new ZodRecord({\n keyType: ZodString.create(),\n valueType: first,\n typeName: ZodFirstPartyTypeKind.ZodRecord,\n ...processCreateParams(second),\n });\n }\n}\nclass ZodMap extends ZodType {\n get keySchema() {\n return this._def.keyType;\n }\n get valueSchema() {\n return this._def.valueType;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.map) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.map,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const keyType = this._def.keyType;\n const valueType = this._def.valueType;\n const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n return {\n key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n };\n });\n if (ctx.common.async) {\n const finalMap = new Map();\n return Promise.resolve().then(async () => {\n for (const pair of pairs) {\n const key = await pair.key;\n const value = await pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n });\n }\n else {\n const finalMap = new Map();\n for (const pair of pairs) {\n const key = pair.key;\n const value = pair.value;\n if (key.status === \"aborted\" || value.status === \"aborted\") {\n return INVALID;\n }\n if (key.status === \"dirty\" || value.status === \"dirty\") {\n status.dirty();\n }\n finalMap.set(key.value, value.value);\n }\n return { status: status.value, value: finalMap };\n }\n }\n}\nZodMap.create = (keyType, valueType, params) => {\n return new ZodMap({\n valueType,\n keyType,\n typeName: ZodFirstPartyTypeKind.ZodMap,\n ...processCreateParams(params),\n });\n};\nclass ZodSet extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.set) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.set,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const def = this._def;\n if (def.minSize !== null) {\n if (ctx.data.size < def.minSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_small,\n minimum: def.minSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.minSize.message,\n });\n status.dirty();\n }\n }\n if (def.maxSize !== null) {\n if (ctx.data.size > def.maxSize.value) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.too_big,\n maximum: def.maxSize.value,\n type: \"set\",\n inclusive: true,\n exact: false,\n message: def.maxSize.message,\n });\n status.dirty();\n }\n }\n const valueType = this._def.valueType;\n function finalizeSet(elements) {\n const parsedSet = new Set();\n for (const element of elements) {\n if (element.status === \"aborted\")\n return INVALID;\n if (element.status === \"dirty\")\n status.dirty();\n parsedSet.add(element.value);\n }\n return { status: status.value, value: parsedSet };\n }\n const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n if (ctx.common.async) {\n return Promise.all(elements).then((elements) => finalizeSet(elements));\n }\n else {\n return finalizeSet(elements);\n }\n }\n min(minSize, message) {\n return new ZodSet({\n ...this._def,\n minSize: { value: minSize, message: errorUtil.toString(message) },\n });\n }\n max(maxSize, message) {\n return new ZodSet({\n ...this._def,\n maxSize: { value: maxSize, message: errorUtil.toString(message) },\n });\n }\n size(size, message) {\n return this.min(size, message).max(size, message);\n }\n nonempty(message) {\n return this.min(1, message);\n }\n}\nZodSet.create = (valueType, params) => {\n return new ZodSet({\n valueType,\n minSize: null,\n maxSize: null,\n typeName: ZodFirstPartyTypeKind.ZodSet,\n ...processCreateParams(params),\n });\n};\nclass ZodFunction extends ZodType {\n constructor() {\n super(...arguments);\n this.validate = this.implement;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.function) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.function,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n function makeArgsIssue(args, error) {\n return makeIssue({\n data: args,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_arguments,\n argumentsError: error,\n },\n });\n }\n function makeReturnsIssue(returns, error) {\n return makeIssue({\n data: returns,\n path: ctx.path,\n errorMaps: [\n ctx.common.contextualErrorMap,\n ctx.schemaErrorMap,\n getErrorMap(),\n errorMap,\n ].filter((x) => !!x),\n issueData: {\n code: ZodIssueCode.invalid_return_type,\n returnTypeError: error,\n },\n });\n }\n const params = { errorMap: ctx.common.contextualErrorMap };\n const fn = ctx.data;\n if (this._def.returns instanceof ZodPromise) {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(async function (...args) {\n const error = new ZodError([]);\n const parsedArgs = await me._def.args\n .parseAsync(args, params)\n .catch((e) => {\n error.addIssue(makeArgsIssue(args, e));\n throw error;\n });\n const result = await Reflect.apply(fn, this, parsedArgs);\n const parsedReturns = await me._def.returns._def.type\n .parseAsync(result, params)\n .catch((e) => {\n error.addIssue(makeReturnsIssue(result, e));\n throw error;\n });\n return parsedReturns;\n });\n }\n else {\n // Would love a way to avoid disabling this rule, but we need\n // an alias (using an arrow function was what caused 2651).\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const me = this;\n return OK(function (...args) {\n const parsedArgs = me._def.args.safeParse(args, params);\n if (!parsedArgs.success) {\n throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n }\n const result = Reflect.apply(fn, this, parsedArgs.data);\n const parsedReturns = me._def.returns.safeParse(result, params);\n if (!parsedReturns.success) {\n throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n }\n return parsedReturns.data;\n });\n }\n }\n parameters() {\n return this._def.args;\n }\n returnType() {\n return this._def.returns;\n }\n args(...items) {\n return new ZodFunction({\n ...this._def,\n args: ZodTuple.create(items).rest(ZodUnknown.create()),\n });\n }\n returns(returnType) {\n return new ZodFunction({\n ...this._def,\n returns: returnType,\n });\n }\n implement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n strictImplement(func) {\n const validatedFunc = this.parse(func);\n return validatedFunc;\n }\n static create(args, returns, params) {\n return new ZodFunction({\n args: (args\n ? args\n : ZodTuple.create([]).rest(ZodUnknown.create())),\n returns: returns || ZodUnknown.create(),\n typeName: ZodFirstPartyTypeKind.ZodFunction,\n ...processCreateParams(params),\n });\n }\n}\nclass ZodLazy extends ZodType {\n get schema() {\n return this._def.getter();\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const lazySchema = this._def.getter();\n return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n }\n}\nZodLazy.create = (getter, params) => {\n return new ZodLazy({\n getter: getter,\n typeName: ZodFirstPartyTypeKind.ZodLazy,\n ...processCreateParams(params),\n });\n};\nclass ZodLiteral extends ZodType {\n _parse(input) {\n if (input.data !== this._def.value) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_literal,\n expected: this._def.value,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n get value() {\n return this._def.value;\n }\n}\nZodLiteral.create = (value, params) => {\n return new ZodLiteral({\n value: value,\n typeName: ZodFirstPartyTypeKind.ZodLiteral,\n ...processCreateParams(params),\n });\n};\nfunction createZodEnum(values, params) {\n return new ZodEnum({\n values,\n typeName: ZodFirstPartyTypeKind.ZodEnum,\n ...processCreateParams(params),\n });\n}\nclass ZodEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodEnum_cache.set(this, void 0);\n }\n _parse(input) {\n if (typeof input.data !== \"string\") {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n const ctx = this._getOrReturnCtx(input);\n const expectedValues = this._def.values;\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get options() {\n return this._def.values;\n }\n get enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Values() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n get Enum() {\n const enumValues = {};\n for (const val of this._def.values) {\n enumValues[val] = val;\n }\n return enumValues;\n }\n extract(values, newDef = this._def) {\n return ZodEnum.create(values, {\n ...this._def,\n ...newDef,\n });\n }\n exclude(values, newDef = this._def) {\n return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n ...this._def,\n ...newDef,\n });\n }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n constructor() {\n super(...arguments);\n _ZodNativeEnum_cache.set(this, void 0);\n }\n _parse(input) {\n const nativeEnumValues = util.getValidEnumValues(this._def.values);\n const ctx = this._getOrReturnCtx(input);\n if (ctx.parsedType !== ZodParsedType.string &&\n ctx.parsedType !== ZodParsedType.number) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n expected: util.joinValues(expectedValues),\n received: ctx.parsedType,\n code: ZodIssueCode.invalid_type,\n });\n return INVALID;\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n }\n if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n const expectedValues = util.objectValues(nativeEnumValues);\n addIssueToContext(ctx, {\n received: ctx.data,\n code: ZodIssueCode.invalid_enum_value,\n options: expectedValues,\n });\n return INVALID;\n }\n return OK(input.data);\n }\n get enum() {\n return this._def.values;\n }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n return new ZodNativeEnum({\n values: values,\n typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n ...processCreateParams(params),\n });\n};\nclass ZodPromise extends ZodType {\n unwrap() {\n return this._def.type;\n }\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n if (ctx.parsedType !== ZodParsedType.promise &&\n ctx.common.async === false) {\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.promise,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n const promisified = ctx.parsedType === ZodParsedType.promise\n ? ctx.data\n : Promise.resolve(ctx.data);\n return OK(promisified.then((data) => {\n return this._def.type.parseAsync(data, {\n path: ctx.path,\n errorMap: ctx.common.contextualErrorMap,\n });\n }));\n }\n}\nZodPromise.create = (schema, params) => {\n return new ZodPromise({\n type: schema,\n typeName: ZodFirstPartyTypeKind.ZodPromise,\n ...processCreateParams(params),\n });\n};\nclass ZodEffects extends ZodType {\n innerType() {\n return this._def.schema;\n }\n sourceType() {\n return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n ? this._def.schema.sourceType()\n : this._def.schema;\n }\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n const effect = this._def.effect || null;\n const checkCtx = {\n addIssue: (arg) => {\n addIssueToContext(ctx, arg);\n if (arg.fatal) {\n status.abort();\n }\n else {\n status.dirty();\n }\n },\n get path() {\n return ctx.path;\n },\n };\n checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n if (effect.type === \"preprocess\") {\n const processed = effect.transform(ctx.data, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(processed).then(async (processed) => {\n if (status.value === \"aborted\")\n return INVALID;\n const result = await this._def.schema._parseAsync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n });\n }\n else {\n if (status.value === \"aborted\")\n return INVALID;\n const result = this._def.schema._parseSync({\n data: processed,\n path: ctx.path,\n parent: ctx,\n });\n if (result.status === \"aborted\")\n return INVALID;\n if (result.status === \"dirty\")\n return DIRTY(result.value);\n if (status.value === \"dirty\")\n return DIRTY(result.value);\n return result;\n }\n }\n if (effect.type === \"refinement\") {\n const executeRefinement = (acc) => {\n const result = effect.refinement(acc, checkCtx);\n if (ctx.common.async) {\n return Promise.resolve(result);\n }\n if (result instanceof Promise) {\n throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n }\n return acc;\n };\n if (ctx.common.async === false) {\n const inner = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n // return value is ignored\n executeRefinement(inner.value);\n return { status: status.value, value: inner.value };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((inner) => {\n if (inner.status === \"aborted\")\n return INVALID;\n if (inner.status === \"dirty\")\n status.dirty();\n return executeRefinement(inner.value).then(() => {\n return { status: status.value, value: inner.value };\n });\n });\n }\n }\n if (effect.type === \"transform\") {\n if (ctx.common.async === false) {\n const base = this._def.schema._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (!isValid(base))\n return base;\n const result = effect.transform(base.value, checkCtx);\n if (result instanceof Promise) {\n throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n }\n return { status: status.value, value: result };\n }\n else {\n return this._def.schema\n ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n .then((base) => {\n if (!isValid(base))\n return base;\n return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n });\n }\n }\n util.assertNever(effect);\n }\n}\nZodEffects.create = (schema, effect, params) => {\n return new ZodEffects({\n schema,\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n effect,\n ...processCreateParams(params),\n });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n return new ZodEffects({\n schema,\n effect: { type: \"preprocess\", transform: preprocess },\n typeName: ZodFirstPartyTypeKind.ZodEffects,\n ...processCreateParams(params),\n });\n};\nclass ZodOptional extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.undefined) {\n return OK(undefined);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodOptional.create = (type, params) => {\n return new ZodOptional({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodOptional,\n ...processCreateParams(params),\n });\n};\nclass ZodNullable extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType === ZodParsedType.null) {\n return OK(null);\n }\n return this._def.innerType._parse(input);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodNullable.create = (type, params) => {\n return new ZodNullable({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodNullable,\n ...processCreateParams(params),\n });\n};\nclass ZodDefault extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n let data = ctx.data;\n if (ctx.parsedType === ZodParsedType.undefined) {\n data = this._def.defaultValue();\n }\n return this._def.innerType._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n removeDefault() {\n return this._def.innerType;\n }\n}\nZodDefault.create = (type, params) => {\n return new ZodDefault({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodDefault,\n defaultValue: typeof params.default === \"function\"\n ? params.default\n : () => params.default,\n ...processCreateParams(params),\n });\n};\nclass ZodCatch extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n // newCtx is used to not collect issues from inner types in ctx\n const newCtx = {\n ...ctx,\n common: {\n ...ctx.common,\n issues: [],\n },\n };\n const result = this._def.innerType._parse({\n data: newCtx.data,\n path: newCtx.path,\n parent: {\n ...newCtx,\n },\n });\n if (isAsync(result)) {\n return result.then((result) => {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n });\n }\n else {\n return {\n status: \"valid\",\n value: result.status === \"valid\"\n ? result.value\n : this._def.catchValue({\n get error() {\n return new ZodError(newCtx.common.issues);\n },\n input: newCtx.data,\n }),\n };\n }\n }\n removeCatch() {\n return this._def.innerType;\n }\n}\nZodCatch.create = (type, params) => {\n return new ZodCatch({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodCatch,\n catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n ...processCreateParams(params),\n });\n};\nclass ZodNaN extends ZodType {\n _parse(input) {\n const parsedType = this._getType(input);\n if (parsedType !== ZodParsedType.nan) {\n const ctx = this._getOrReturnCtx(input);\n addIssueToContext(ctx, {\n code: ZodIssueCode.invalid_type,\n expected: ZodParsedType.nan,\n received: ctx.parsedType,\n });\n return INVALID;\n }\n return { status: \"valid\", value: input.data };\n }\n}\nZodNaN.create = (params) => {\n return new ZodNaN({\n typeName: ZodFirstPartyTypeKind.ZodNaN,\n ...processCreateParams(params),\n });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n _parse(input) {\n const { ctx } = this._processInputParams(input);\n const data = ctx.data;\n return this._def.type._parse({\n data,\n path: ctx.path,\n parent: ctx,\n });\n }\n unwrap() {\n return this._def.type;\n }\n}\nclass ZodPipeline extends ZodType {\n _parse(input) {\n const { status, ctx } = this._processInputParams(input);\n if (ctx.common.async) {\n const handleAsync = async () => {\n const inResult = await this._def.in._parseAsync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return DIRTY(inResult.value);\n }\n else {\n return this._def.out._parseAsync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n };\n return handleAsync();\n }\n else {\n const inResult = this._def.in._parseSync({\n data: ctx.data,\n path: ctx.path,\n parent: ctx,\n });\n if (inResult.status === \"aborted\")\n return INVALID;\n if (inResult.status === \"dirty\") {\n status.dirty();\n return {\n status: \"dirty\",\n value: inResult.value,\n };\n }\n else {\n return this._def.out._parseSync({\n data: inResult.value,\n path: ctx.path,\n parent: ctx,\n });\n }\n }\n }\n static create(a, b) {\n return new ZodPipeline({\n in: a,\n out: b,\n typeName: ZodFirstPartyTypeKind.ZodPipeline,\n });\n }\n}\nclass ZodReadonly extends ZodType {\n _parse(input) {\n const result = this._def.innerType._parse(input);\n const freeze = (data) => {\n if (isValid(data)) {\n data.value = Object.freeze(data.value);\n }\n return data;\n };\n return isAsync(result)\n ? result.then((data) => freeze(data))\n : freeze(result);\n }\n unwrap() {\n return this._def.innerType;\n }\n}\nZodReadonly.create = (type, params) => {\n return new ZodReadonly({\n innerType: type,\n typeName: ZodFirstPartyTypeKind.ZodReadonly,\n ...processCreateParams(params),\n });\n};\nfunction custom(check, params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n if (check)\n return ZodAny.create().superRefine((data, ctx) => {\n var _a, _b;\n if (!check(data)) {\n const p = typeof params === \"function\"\n ? params(data)\n : typeof params === \"string\"\n ? { message: params }\n : params;\n const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n const p2 = typeof p === \"string\" ? { message: p } : p;\n ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n }\n });\n return ZodAny.create();\n}\nconst late = {\n object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n boolean: ((arg) => ZodBoolean.create({\n ...arg,\n coerce: true,\n })),\n bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n __proto__: null,\n defaultErrorMap: errorMap,\n setErrorMap: setErrorMap,\n getErrorMap: getErrorMap,\n makeIssue: makeIssue,\n EMPTY_PATH: EMPTY_PATH,\n addIssueToContext: addIssueToContext,\n ParseStatus: ParseStatus,\n INVALID: INVALID,\n DIRTY: DIRTY,\n OK: OK,\n isAborted: isAborted,\n isDirty: isDirty,\n isValid: isValid,\n isAsync: isAsync,\n get util () { return util; },\n get objectUtil () { return objectUtil; },\n ZodParsedType: ZodParsedType,\n getParsedType: getParsedType,\n ZodType: ZodType,\n datetimeRegex: datetimeRegex,\n ZodString: ZodString,\n ZodNumber: ZodNumber,\n ZodBigInt: ZodBigInt,\n ZodBoolean: ZodBoolean,\n ZodDate: ZodDate,\n ZodSymbol: ZodSymbol,\n ZodUndefined: ZodUndefined,\n ZodNull: ZodNull,\n ZodAny: ZodAny,\n ZodUnknown: ZodUnknown,\n ZodNever: ZodNever,\n ZodVoid: ZodVoid,\n ZodArray: ZodArray,\n ZodObject: ZodObject,\n ZodUnion: ZodUnion,\n ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n ZodIntersection: ZodIntersection,\n ZodTuple: ZodTuple,\n ZodRecord: ZodRecord,\n ZodMap: ZodMap,\n ZodSet: ZodSet,\n ZodFunction: ZodFunction,\n ZodLazy: ZodLazy,\n ZodLiteral: ZodLiteral,\n ZodEnum: ZodEnum,\n ZodNativeEnum: ZodNativeEnum,\n ZodPromise: ZodPromise,\n ZodEffects: ZodEffects,\n ZodTransformer: ZodEffects,\n ZodOptional: ZodOptional,\n ZodNullable: ZodNullable,\n ZodDefault: ZodDefault,\n ZodCatch: ZodCatch,\n ZodNaN: ZodNaN,\n BRAND: BRAND,\n ZodBranded: ZodBranded,\n ZodPipeline: ZodPipeline,\n ZodReadonly: ZodReadonly,\n custom: custom,\n Schema: ZodType,\n ZodSchema: ZodType,\n late: late,\n get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n coerce: coerce,\n any: anyType,\n array: arrayType,\n bigint: bigIntType,\n boolean: booleanType,\n date: dateType,\n discriminatedUnion: discriminatedUnionType,\n effect: effectsType,\n 'enum': enumType,\n 'function': functionType,\n 'instanceof': instanceOfType,\n intersection: intersectionType,\n lazy: lazyType,\n literal: literalType,\n map: mapType,\n nan: nanType,\n nativeEnum: nativeEnumType,\n never: neverType,\n 'null': nullType,\n nullable: nullableType,\n number: numberType,\n object: objectType,\n oboolean: oboolean,\n onumber: onumber,\n optional: optionalType,\n ostring: ostring,\n pipeline: pipelineType,\n preprocess: preprocessType,\n promise: promiseType,\n record: recordType,\n set: setType,\n strictObject: strictObjectType,\n string: stringType,\n symbol: symbolType,\n transformer: effectsType,\n tuple: tupleType,\n 'undefined': undefinedType,\n union: unionType,\n unknown: unknownType,\n 'void': voidType,\n NEVER: NEVER,\n ZodIssueCode: ZodIssueCode,\n quotelessJson: quotelessJson,\n ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n", "import { z } from \"zod\";\n\n/**\n * JSON-RPC 2.0 primitives shared by every Vagus transport.\n *\n * The wire contract is schema-first: schemas in this package are the single\n * source of truth for both the core engine (host) and every frontend (client).\n * See `docs/protocol.md` for the transport and versioning policy.\n */\n\nexport const JSONRPC_VERSION = \"2.0\" as const;\n\n/** Standard JSON-RPC error codes (subset used by Vagus). */\nexport const ErrorCodes = {\n ParseError: -32700,\n InvalidRequest: -32600,\n MethodNotFound: -32601,\n InvalidParams: -32602,\n InternalError: -32603,\n /** Vagus-specific: request timed out client-side. */\n Timeout: -32000,\n} as const;\n\nexport const JsonRpcId = z.union([z.string(), z.number(), z.null()]);\nexport type JsonRpcId = z.infer<typeof JsonRpcId>;\n\n/** A client-to-server call. `id: null` is a notification (no response). */\nexport const JsonRpcRequest = z.object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: JsonRpcId,\n method: z.string().min(1),\n params: z.unknown().optional(),\n});\nexport type JsonRpcRequest = z.infer<typeof JsonRpcRequest>;\n\nexport const JsonRpcError = z.object({\n code: z.number(),\n message: z.string(),\n data: z.unknown().optional(),\n});\nexport type JsonRpcError = z.infer<typeof JsonRpcError>;\n\n/**\n * A server response. Exactly one of `result` or `error` must be present;\n * enforced at the schema level so malformed responses fail fast on both sides.\n */\nexport const JsonRpcResponse = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: JsonRpcId,\n result: z.unknown().optional(),\n error: JsonRpcError.optional(),\n })\n .superRefine((value, ctx) => {\n const hasResult = \"result\" in value;\n const hasError = value.error !== undefined;\n if (hasResult === hasError) {\n ctx.addIssue({\n code: \"custom\",\n message: \"exactly one of `result` or `error` must be present\",\n });\n }\n });\nexport type JsonRpcResponse = z.infer<typeof JsonRpcResponse>;\n\n/** Builds a typed error object, useful for shared error factories. */\nexport function makeError(code: number, message: string, data?: unknown): JsonRpcError {\n return data === undefined ? { code, message } : { code, message, data };\n}\n", "import { z } from \"zod\";\n\n/**\n * Session message events (M3): pi's assistant stream, forwarded to UIs.\n *\n * The pi host subscribes to its AgentSession and re-emits text chunks as\n * protocol events, so both the TUI and the GUI render assistant responses\n * without ever touching pi internals.\n */\n\nexport const sessionMessageEvent = z.object({\n type: z.literal(\"session.message\"),\n sessionId: z.string(),\n kind: z.enum([\"text_delta\", \"text_done\", \"user_queued\", \"error\"]),\n text: z.string(),\n /** Image attachments on a user message (data URLs, ready for <img src>). */\n images: z.array(z.object({ dataUrl: z.string(), mimeType: z.string() })).optional(),\n});\nexport type SessionMessageEvent = z.infer<typeof sessionMessageEvent>;\n", "import { z } from \"zod\";\n\n/**\n * Queue state broadcast from the pi session \u2014 the authoritative list of\n * messages still waiting to be delivered to the agent (steering queue).\n *\n * The GUI renders its queued-messages rail from this event instead of\n * optimistically inserting messages locally, so cancelling never races with\n * pi's internal queue and \"fake queued\" flashes cannot happen.\n */\nexport const sessionQueueUpdateEvent = z.object({\n type: z.literal(\"session.queue_update\"),\n sessionId: z.string(),\n /** Messages still waiting in pi's steering queue (in delivery order). */\n steering: z.array(z.string()),\n});\nexport type SessionQueueUpdateEvent = z.infer<typeof sessionQueueUpdateEvent>;\n", "import { z } from \"zod\";\n\n/**\n * Session thinking events (M4b): pi's reasoning stream, forwarded to UIs.\n *\n * pi's AssistantMessageEvent includes `thinking_delta` / `thinking_end` in\n * the message_update stream. The pi host re-emits them as protocol events so\n * the GUI can render a Codex-style collapsible thinking card \u2014 shown while\n * the model is reasoning, auto-collapsed when text generation starts.\n */\n\nexport const sessionThinkingEvent = z.object({\n type: z.literal(\"session.thinking\"),\n sessionId: z.string(),\n kind: z.enum([\"delta\", \"done\"]),\n text: z.string(),\n});\nexport type SessionThinkingEvent = z.infer<typeof sessionThinkingEvent>;", "import { z } from \"zod\";\n\n/**\n * Session tool-call events (M4b): pi's tool executions, forwarded to UIs.\n *\n * pi's AgentSession emits `tool_execution_start` / `tool_execution_end` for\n * every tool call (bash, read, edit, write, dispatch, \u2026). The pi host\n * re-emits them as protocol events so the GUI can render Codex-style inline\n * tool cards \u2014 the user sees *what* ran and *what came back*, not just the\n * final assistant text.\n *\n * `toolCallId` correlates the call with its result (pi's `toolCallId`).\n */\n\nexport const sessionToolCallEvent = z.object({\n type: z.literal(\"session.tool_call\"),\n sessionId: z.string(),\n toolCallId: z.string(),\n name: z.string(),\n /** Serialized arguments (JSON), truncated for display. */\n args: z.string(),\n});\nexport type SessionToolCallEvent = z.infer<typeof sessionToolCallEvent>;\n\nexport const sessionToolResultEvent = z.object({\n type: z.literal(\"session.tool_result\"),\n sessionId: z.string(),\n toolCallId: z.string(),\n name: z.string(),\n /** Serialized result text, truncated for display. */\n result: z.string(),\n /** File-edit diff (pi's display format, `+/ -/ space` lines) \u2014 present for\n * edit tools so UIs can render a Claude-Code-style red/green diff. */\n diff: z.string().optional(),\n /** Unified patch (git-style) for the edit \u2014 reverse-appliable to revert. */\n patch: z.string().optional(),\n isError: z.boolean(),\n});\nexport type SessionToolResultEvent = z.infer<typeof sessionToolResultEvent>;\n", "import { z } from \"zod\";\n\n/**\n * Turn lifecycle events (turn_start / turn_end projected from the pi session).\n *\n * The GUI uses these to flip its busy state \u2014 the send button becomes a stop\n * button while the agent is working.\n */\nexport const sessionTurnEvent = z.object({\n type: z.literal(\"session.turn\"),\n sessionId: z.string(),\n kind: z.enum([\"start\", \"end\"]),\n});\nexport type SessionTurnEvent = z.infer<typeof sessionTurnEvent>;\n", "import { z } from \"zod\";\n\n/**\n * Subagent lifecycle event (from @tintinweb/pi-subagents bridge).\n *\n * Mirrors the extension's `subagents:*` events on `pi.events` so the GUI can\n * render subagent activity (fleet view, completion states, results) without\n * touching pi internals. Payload is kept loosely typed \u2014 the extension owns\n * the shape; Vagus only forwards it.\n */\nexport const sessionSubagentEvent = z.object({\n type: z.literal(\"session.subagent\"),\n /** Parent Vagus session id (may be missing for session-less events). */\n sessionId: z.string().optional(),\n /** One of: created, started, completed, failed, steered, compacted, ready, scheduled. */\n kind: z.string(),\n /** Subagent id (extension-owned). */\n agentId: z.string().optional(),\n /** Subagent type name (Explore, Plan, ...). */\n agentType: z.string().optional(),\n /** Human description of the task. */\n description: z.string().optional(),\n /** Terminal status (completed/failed/stopped/aborted). */\n status: z.string().optional(),\n /** Final text output (completed/failed). */\n result: z.string().optional(),\n /** Error message (failed). */\n error: z.string().optional(),\n /** Raw payload from the extension, for forward compatibility. */\n payload: z.record(z.string(), z.unknown()).optional(),\n});\n\nexport type SessionSubagentEvent = z.infer<typeof sessionSubagentEvent>;\n", "import { z } from \"zod\";\nimport { sessionMessageEvent } from \"./session-message.js\";\nimport { sessionQueueUpdateEvent } from \"./session-queue.js\";\nimport { sessionThinkingEvent } from \"./session-thinking.js\";\nimport { sessionToolCallEvent, sessionToolResultEvent } from \"./session-tool.js\";\nimport { sessionTurnEvent } from \"./session-turn.js\";\nimport { sessionSubagentEvent } from \"./session-subagent.js\";\n\n/**\n * Domain event schemas pushed from the core engine to subscribed frontends.\n *\n * Events are the \"single source of truth\" projection: every state transition\n * in the core is emitted as an event, and UIs render purely from the event\n * stream (see ADR-003 / ADR-010). Session events are the pi session's own\n * lifecycle projected onto the wire.\n */\n\n/** Session lifecycle events. */\nconst sessionCreated = z.object({\n type: z.literal(\"session.created\"),\n sessionId: z.string(),\n cwd: z.string(),\n});\nconst sessionClosed = z.object({\n type: z.literal(\"session.closed\"),\n sessionId: z.string(),\n});\n\n/** Session lifecycle events, narrowed for session-specific consumers. */\nexport const sessionEvent = z.discriminatedUnion(\"type\", [sessionCreated, sessionClosed]);\nexport type SessionEvent = z.infer<typeof sessionEvent>;\n\n/** Union of all domain events. */\nexport const domainEvent = z.discriminatedUnion(\"type\", [\n sessionCreated,\n sessionClosed,\n sessionMessageEvent,\n sessionQueueUpdateEvent,\n sessionThinkingEvent,\n sessionToolCallEvent,\n sessionToolResultEvent,\n sessionTurnEvent,\n sessionSubagentEvent,\n]);\nexport type DomainEvent = z.infer<typeof domainEvent>;\n\n/** Envelope that carries a domain event over a transport. */\nexport const EventEnvelope = z.object({\n type: z.literal(\"event\"),\n event: domainEvent,\n});\nexport type EventEnvelope = z.infer<typeof EventEnvelope>;\n\nexport * from \"./session-message.js\";\nexport * from \"./session-queue.js\";\nexport * from \"./session-thinking.js\";\nexport * from \"./session-tool.js\";\nexport * from \"./session-turn.js\";\nexport * from \"./session-subagent.js\";\n", "import { z } from \"zod\";\nimport { JsonRpcRequest, JsonRpcResponse } from \"./jsonrpc.js\";\nimport { EventEnvelope } from \"./events.js\";\n\n/**\n * Frame-level envelope. Every message on the wire is one of three frames;\n * `type` is the discriminated union key, so parsers can dispatch without\n * deep validation first.\n */\nexport const RequestFrame = z.object({\n type: z.literal(\"request\"),\n payload: JsonRpcRequest,\n});\nexport type RequestFrame = z.infer<typeof RequestFrame>;\n\nexport const ResponseFrame = z.object({\n type: z.literal(\"response\"),\n payload: JsonRpcResponse,\n});\nexport type ResponseFrame = z.infer<typeof ResponseFrame>;\n\nexport const EventFrame = z.object({\n type: z.literal(\"event\"),\n payload: EventEnvelope,\n});\nexport type EventFrame = z.infer<typeof EventFrame>;\n\nexport const Frame = z.discriminatedUnion(\"type\", [\n RequestFrame,\n ResponseFrame,\n EventFrame,\n]);\nexport type Frame = z.infer<typeof Frame>;\n", "import { ErrorCodes, makeError } from \"@vagus/protocol\";\nimport type { DomainEvent, Frame, JsonRpcError, JsonRpcId } from \"@vagus/protocol\";\n\n/**\n * JSON-RPC 2.0 server (ADR-003).\n *\n * Transport-agnostic: the daemon feeds frames from a {@link StdioTransport}\n * (or, later, a WebSocket) into {@link handleFrame} and sends every outgoing\n * frame through the `send` callback. Notifications (`id: null`) never produce\n * a response; unknown methods produce a standard -32601 error.\n */\n\nexport type MethodHandler = (params: unknown) => unknown | Promise<unknown>;\n\nexport interface JsonRpcServerOptions {\n /** Outgoing frame sink (the transport). */\n send: (frame: Frame) => void;\n}\n\nexport class JsonRpcServer {\n private readonly methods = new Map<string, MethodHandler>();\n\n constructor(private readonly options: JsonRpcServerOptions) {}\n\n /** Registers a method; duplicate registration is a programming error. */\n registerMethod(name: string, handler: MethodHandler): void {\n if (this.methods.has(name)) {\n throw new Error(`method already registered: ${name}`);\n }\n this.methods.set(name, handler);\n }\n\n /**\n * Processes one inbound frame. Requests are dispatched sequentially so\n * notifications and responses keep their arrival order (callers await this).\n */\n async handleFrame(frame: Frame): Promise<void> {\n if (frame.type !== \"request\") return; // responses/events are never client\u2192daemon\n const { id, method, params } = frame.payload;\n if (id === null) {\n await this.runHandler(method, params, null);\n return;\n }\n await this.runHandler(method, params, id);\n }\n\n /** Pushes a domain event to connected clients. */\n emit(event: DomainEvent): void {\n this.options.send({ type: \"event\", payload: { type: \"event\", event } });\n }\n\n private async runHandler(method: string, params: unknown, id: JsonRpcId): Promise<void> {\n const handler = this.methods.get(method);\n if (!handler) {\n if (id !== null) {\n this.respond(id, undefined, makeError(ErrorCodes.MethodNotFound, `method not found: ${method}`));\n }\n return;\n }\n try {\n const result = await handler(params);\n if (id !== null) this.respond(id, result);\n } catch (error) {\n if (id !== null) {\n const message = error instanceof Error ? error.message : String(error);\n this.respond(id, undefined, makeError(ErrorCodes.InternalError, message));\n }\n }\n }\n\n private respond(id: JsonRpcId, result: unknown, error?: JsonRpcError): void {\n const payload = error\n ? { jsonrpc: \"2.0\" as const, id, error }\n // JSON-RPC has no `undefined` value: normalize to null so the frame\n // stays schema-valid on the wire.\n : { jsonrpc: \"2.0\" as const, id, result: result === undefined ? null : result };\n this.options.send({ type: \"response\", payload });\n }\n}\n", "import { createInterface } from \"node:readline\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { Frame as FrameSchema } from \"@vagus/protocol\";\nimport type { Frame } from \"@vagus/protocol\";\n\n/**\n * Host-side stdio JSONL transport (ADR-003).\n *\n * One JSON frame per line on stdin/stdout. Lines are LF-delimited only \u2014\n * consumers must not use generic Unicode line readers (the same caveat pi's\n * RPC mode documents). Malformed frames are dropped with a stderr diagnostic\n * instead of crashing the daemon.\n */\n\n/** Hard cap per line to bound memory on hostile/broken input (1 MiB). */\nconst MAX_LINE_BYTES = 1024 * 1024;\n\nexport interface StdioStreams {\n stdin: Readable;\n stdout: Writable;\n}\n\nexport class StdioTransport {\n private readline?: ReturnType<typeof createInterface>;\n private closed = false;\n\n constructor(\n private readonly onFrame: (frame: Frame) => void,\n private readonly streams: StdioStreams = { stdin: process.stdin, stdout: process.stdout },\n ) {}\n\n /** Starts reading frames from stdin. */\n start(): void {\n if (this.closed) return;\n this.readline = createInterface({ input: this.streams.stdin, crlfDelay: Infinity });\n this.readline.on(\"line\", (line: string) => this.handleLine(line));\n }\n\n /** Writes a frame to stdout as a single JSON line. */\n send(frame: Frame): void {\n if (this.closed) return;\n this.streams.stdout.write(`${JSON.stringify(frame)}\\n`);\n }\n\n close(): void {\n if (this.closed) return;\n this.closed = true;\n this.readline?.close();\n }\n\n private handleLine(line: string): void {\n if (line.length > MAX_LINE_BYTES) {\n process.stderr.write(`vagus: dropping oversized frame (${line.length} bytes)\\n`);\n return;\n }\n let parsed: unknown;\n try {\n parsed = JSON.parse(line);\n } catch {\n process.stderr.write(\"vagus: dropping malformed frame (invalid JSON)\\n\");\n return;\n }\n const frame = FrameSchema.safeParse(parsed);\n if (!frame.success) {\n process.stderr.write(\"vagus: dropping malformed frame (schema mismatch)\\n\");\n return;\n }\n this.onFrame(frame.data);\n }\n}\n", "import { existsSync } from \"node:fs\";\nimport { createServer, type Server } from \"node:http\";\nimport { WebSocketServer as WsServer, type WebSocket } from \"ws\";\nimport { createStaticHandler } from \"./static-server.js\";\nimport { JsonRpcServer } from \"./server.js\";\nimport type { DomainEvent, Frame } from \"@vagus/protocol\";\n\n/**\n * Multi-client WebSocket transport for the JSON-RPC server (ADR-003).\n *\n * Each WebSocket connection gets its own {@link JsonRpcServer} instance,\n * sharing the same method handlers via a factory function. Events from the\n * engine are broadcast to every connected client.\n */\n\nexport interface WebSocketServerOptions {\n /** TCP port to listen on (default 19707). */\n port: number;\n /**\n * Called for each new connection to register the same methods that the\n * stdio server uses. The server is already wired to the WebSocket \u2014 the\n * factory just calls `server.registerMethod(...)`.\n */\n registerMethods: (server: JsonRpcServer) => void;\n /**\n * Optional directory of static files (the built GUI) served over HTTP on\n * the *same* port, with WebSocket upgrades handled on that HTTP server.\n * One process, one port: the browser loads the UI and attaches to the\n * event stream with no extra infrastructure.\n */\n staticDir?: string;\n}\n\n/**\n * Thin wrapper around the `ws` WebSocket server.\n *\n * Lifecycle: create \u2192 start via `listen()` \u2192 stop via `close()`.\n */\nexport class WsServerHost {\n private wss: WsServer | undefined;\n private httpServer: Server | undefined;\n private readonly connections = new Set<JsonRpcServer>();\n\n /** Starts the WebSocket server (optionally serving static files alongside). */\n listen(options: WebSocketServerOptions): void {\n const { port, registerMethods, staticDir } = options;\n try {\n if (staticDir !== undefined) {\n if (!existsSync(staticDir)) {\n // eslint-disable-next-line no-console\n console.error(`vagus: GUI directory not found: ${staticDir} (build the UI first)`);\n this.httpServer = undefined;\n this.wss = new WsServer({ port });\n } else {\n // Serve the web UI and accept WebSocket upgrades on the same HTTP server.\n this.httpServer = createServer(createStaticHandler(staticDir));\n this.wss = new WsServer({ server: this.httpServer });\n }\n } else {\n this.wss = new WsServer({ port });\n }\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"vagus: WebSocket server failed to start:\", (error as Error).message);\n return;\n }\n if (this.httpServer) {\n this.httpServer.listen(port, () => {\n // eslint-disable-next-line no-console\n console.error(`vagus: serving web UI + WebSocket on http://127.0.0.1:${port}`);\n });\n } else {\n this.wss.on(\"listening\", () => {\n // eslint-disable-next-line no-console\n console.error(`vagus: WebSocket server listening on ws://127.0.0.1:${port}`);\n });\n }\n this.wss.on(\"error\", (error) => {\n // eslint-disable-next-line no-console\n console.error(\"vagus: WebSocket server error:\", error.message);\n });\n\n this.wss.on(\"connection\", (ws: WebSocket) => {\n const server = new JsonRpcServer({\n send: (frame: Frame) => {\n if (ws.readyState === ws.OPEN) {\n ws.send(JSON.stringify(frame));\n }\n },\n });\n\n registerMethods(server);\n this.connections.add(server);\n\n ws.on(\"message\", (raw: Buffer) => {\n try {\n const frame = JSON.parse(raw.toString()) as Frame;\n void server.handleFrame(frame);\n } catch {\n // malformed JSON \u2014 ignore\n }\n });\n\n ws.on(\"close\", () => {\n this.connections.delete(server);\n });\n });\n }\n\n /** Broadcasts a domain event to every connected client. */\n broadcast(event: DomainEvent): void {\n for (const server of this.connections) {\n server.emit(event);\n }\n }\n\n /** Shuts down the server and drops all connections. */\n close(): void {\n this.wss?.close();\n this.httpServer?.close();\n this.connections.clear();\n }\n}", "import { createReadStream, existsSync, statSync } from \"node:fs\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { extname, join, resolve, sep } from \"node:path\";\n\n/**\n * Minimal static file server for the daemon's web UI (M4).\n *\n * The GUI is a plain Vite SPA build; the daemon serves it over HTTP on the\n * same port as the WebSocket endpoint (one process, one port \u2014 the browser\n * loads the UI from `http://127.0.0.1:19707/` and the UI attaches to\n * `ws://127.0.0.1:19707`).\n *\n * Zero dependencies and deliberately small: enough for a production SPA\n * (correct MIME types, path-traversal protection, SPA fallback, HEAD\n * support) without pulling in a framework.\n */\n\nconst MIME_TYPES: Record<string, string> = {\n \".html\": \"text/html; charset=utf-8\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".css\": \"text/css; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".svg\": \"image/svg+xml\",\n \".png\": \"image/png\",\n \".ico\": \"image/x-icon\",\n \".woff2\": \"font/woff2\",\n \".map\": \"application/json; charset=utf-8\",\n};\n\nfunction contentType(pathname: string): string {\n return MIME_TYPES[extname(pathname)] ?? \"application/octet-stream\";\n}\n\n/**\n * Resolves a request pathname to a file inside `root`, or `undefined` when\n * the request does not map to a file. Guards against path traversal\n * (`../` escaping the root) and implements the SPA fallback (extensionless\n * routes serve `index.html`).\n */\nexport function resolveStaticFile(rootDir: string, pathname: string): string | undefined {\n const root = resolve(rootDir);\n const name = pathname === \"/\" ? \"index.html\" : pathname;\n\n const candidate = resolve(join(root, name));\n if (candidate !== root && !candidate.startsWith(root + sep)) {\n // Escaped the document root \u2014 never serve.\n return undefined;\n }\n\n if (existsSync(candidate)) {\n if (statSync(candidate).isDirectory()) {\n const index = join(candidate, \"index.html\");\n return existsSync(index) ? index : undefined;\n }\n return candidate;\n }\n\n // SPA fallback: extensionless routes render the app shell so client-side\n // routing (future session pages) works without a server config.\n if (extname(name) === \"\") {\n const index = join(root, \"index.html\");\n return existsSync(index) ? index : undefined;\n }\n return undefined;\n}\n\nfunction send(\n res: ServerResponse,\n status: number,\n headers: Record<string, string>,\n body?: Buffer | string,\n): void {\n res.writeHead(status, headers);\n if (body !== undefined) res.end(body);\n else res.end();\n}\n\n/** HTTP request handler serving a static directory (see {@link createStaticHandler}). */\nexport type StaticHandler = (req: IncomingMessage, res: ServerResponse) => void;\n\n/**\n * Creates a request handler that serves files from `rootDir`.\n *\n * - `GET`/`HEAD` only (405 otherwise)\n * - correct MIME types + `Content-Length` for streaming\n * - `Cache-Control: no-cache` so a redeployed UI is picked up immediately\n * - SPA fallback for extensionless routes\n */\nexport function createStaticHandler(rootDir: string): StaticHandler {\n return (req: IncomingMessage, res: ServerResponse): void => {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n send(res, 405, { Allow: \"GET, HEAD\", \"Content-Type\": \"text/plain; charset=utf-8\" }, \"method not allowed\\n\");\n return;\n }\n\n let pathname: string;\n try {\n pathname = new URL(req.url ?? \"/\", \"http://vagus.local\").pathname;\n pathname = decodeURIComponent(pathname);\n } catch {\n send(res, 400, { \"Content-Type\": \"text/plain; charset=utf-8\" }, \"bad request\\n\");\n return;\n }\n\n const file = resolveStaticFile(rootDir, pathname);\n if (!file) {\n send(res, 404, { \"Content-Type\": \"text/plain; charset=utf-8\" }, \"not found\\n\");\n return;\n }\n\n const stat = statSync(file);\n const headers: Record<string, string> = {\n \"Content-Type\": contentType(file),\n \"Content-Length\": String(stat.size),\n \"Cache-Control\": \"no-cache\",\n \"X-Content-Type-Options\": \"nosniff\",\n };\n res.writeHead(200, headers);\n if (req.method === \"HEAD\") {\n res.end();\n return;\n }\n createReadStream(file).pipe(res);\n };\n}\n", "import { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { DefaultPackageManager, SettingsManager } from \"@earendil-works/pi-coding-agent\";\n\n/**\n * Pi package manager for the web GUI.\n *\n * Plugin/extension installs go through pi's OWN PackageManager (SDK), which\n * persists to `~/.pi/agent/settings.json` under `packages` \u2014 the exact same\n * file and format `pi install npm:@foo/bar` writes. So installing a package\n * from the web GUI is indistinguishable from installing it in the pi TUI:\n * `pi list` sees it, `pi remove` can uninstall it, and vice versa.\n *\n * MCP server configuration (mcp.json) is a BUILT-IN feature here (not a\n * plugin): the management layer lives in this class, and the connection\n * layer is the bundled MCP pi-extension that ships with this package.\n */\n\nexport interface PiPackageInfo {\n /** Normalized source spec, e.g. \"npm:@foo/bar@1.0.0\" or \"git:host/repo@v1\". */\n source: string;\n /** Which settings scope the package is configured in. */\n scope: \"user\" | \"project\";\n /** Whether the package is currently installed on disk. */\n installed: boolean;\n /** On-disk install path (npm \u2192 ~/.pi/agent/npm/..., git \u2192 ~/.pi/agent/git/...). */\n installedPath?: string;\n /** Resource counts the package contributes (resolved from its manifest). */\n resources: { extensions: number; skills: number; prompts: number; themes: number };\n}\n\nexport interface MarketEntry {\n source: string;\n name: string;\n description?: string;\n installed: boolean;\n}\n\nexport interface McpServerEntry {\n name: string;\n config: Record<string, unknown>;\n}\n\nexport type McpScope = \"user\" | \"project\";\n\n// Directory under which pi manages installed packages (npm clones / git clones).\n\nexport class PiPackageManager {\n private readonly engineDir: string;\n private readonly cwd: string;\n private pm: DefaultPackageManager | undefined;\n\n constructor(opts: { engineDir: string; cwd?: string }) {\n this.engineDir = opts.engineDir;\n this.cwd = opts.cwd ?? process.cwd();\n }\n\n /** Lazily create pi's package manager (SettingsManager is cheap to build). */\n private manager(): DefaultPackageManager {\n if (!this.pm) {\n const settingsManager = SettingsManager.create(this.cwd, this.engineDir);\n this.pm = new DefaultPackageManager({\n cwd: this.cwd,\n agentDir: this.engineDir,\n settingsManager,\n });\n }\n return this.pm;\n }\n\n // \u2500\u2500 packages (pi install npm:... / git:... \u2014 TUI-identical) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n /**\n * List configured packages. `source` strings are exactly what the pi CLI\n * shows in `pi list`, so the web GUI and the TUI stay in sync.\n */\n async list(): Promise<PiPackageInfo[]> {\n const configured = this.manager().listConfiguredPackages();\n // Resolve once so each package reports its enabled resource counts.\n // Resolution is best-effort: listing never auto-installs missing sources\n // (the onMissing callback returns \"skip\" for anything not installed).\n let resolved: Awaited<ReturnType<DefaultPackageManager[\"resolve\"]>> | undefined;\n try {\n resolved = await this.manager().resolve(async () => \"skip\");\n } catch {\n resolved = undefined;\n }\n\n return configured.map((pkg) => {\n const installedPath = pkg.installedPath ?? this.manager().getInstalledPath(pkg.source, pkg.scope);\n const resources = this.countResources(pkg.source, resolved);\n return {\n source: pkg.source,\n scope: pkg.scope,\n installed: installedPath !== undefined,\n installedPath,\n resources,\n };\n });\n }\n\n /** Count enabled resources contributed by one package source. */\n private countResources(\n source: string,\n resolved: Awaited<ReturnType<DefaultPackageManager[\"resolve\"]>> | undefined,\n ): { extensions: number; skills: number; prompts: number; themes: number } {\n const none = { extensions: 0, skills: 0, prompts: 0, themes: 0 };\n if (!resolved) return none;\n const from = (list: Array<{ metadata: { source: string } }>): number =>\n list.filter((r) => r.metadata.source === source).length;\n return {\n extensions: from(resolved.extensions),\n skills: from(resolved.skills),\n prompts: from(resolved.prompts),\n themes: from(resolved.themes),\n };\n }\n\n /**\n * Install a pi package \u2014 equivalent to `pi install <source>`.\n *\n * Accepted sources (pi's format): `npm:@foo/bar@1.0.0`, `git:github.com/u/r@v1`,\n * `https://github.com/u/r`, or a local path. `-l` project-local installs are\n * not exposed from the web GUI (we always install at user scope, matching\n * the default `pi install` behavior).\n */\n async install(source: string): Promise<{ ok: boolean; error?: string }> {\n // Lenient: accept a full `pi install npm:xxx` command copied from docs \u2014\n // strip the `pi install ` prefix so pasting works directly.\n const cleaned = source.trim().replace(/^pi\\s+install\\s+/i, \"\");\n const spec = cleaned.trim();\n if (spec === \"\") return { ok: false, error: \"\u5305\u6E90\u4E0D\u80FD\u4E3A\u7A7A\" };\n try {\n await this.manager().installAndPersist(spec);\n return { ok: true };\n } catch (err) {\n return { ok: false, error: err instanceof Error ? err.message : String(err) };\n }\n }\n\n /**\n * Remove a pi package \u2014 equivalent to `pi remove <source>`.\n */\n async uninstall(source: string): Promise<{ ok: boolean; error?: string }> {\n const spec = source.trim();\n if (spec === \"\") return { ok: false, error: \"\u5305\u6E90\u4E0D\u80FD\u4E3A\u7A7A\" };\n try {\n const removed = await this.manager().removeAndPersist(spec);\n if (!removed) return { ok: false, error: \"\u672A\u627E\u5230\u8BE5\u5305\uFF08\u53EF\u80FD\u5E76\u672A\u5B89\u88C5\uFF09\" };\n return { ok: true };\n } catch (err) {\n return { ok: false, error: err instanceof Error ? err.message : String(err) };\n }\n }\n\n // \u2500\u2500 MCP server config (mcp.json \u2014 built-in feature) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n // Scope: \"user\" writes the engine dir's mcp.json (user-global, read by the\n // bundled MCP extension in every pi session); \"project\" writes\n // <cwd>/.mcp.json (project-local, also read by the extension).\n\n /** mcp.json path \u2014 the engine dir's mcp.json, read by the built-in MCP ext. */\n private get mcpJsonPath(): string {\n return join(this.engineDir, \"mcp.json\");\n }\n\n private mcpFilePath(scope: \"user\" | \"project\", cwd?: string): string {\n return scope === \"project\" ? join(cwd ?? \".\", \".mcp.json\") : this.mcpJsonPath;\n }\n\n private readMcpJsonFile(path: string): Record<string, unknown> {\n try {\n const raw = JSON.parse(readFileSync(path, \"utf8\")) as Record<string, unknown>;\n return typeof raw.mcpServers === \"object\" && raw.mcpServers !== null\n ? (raw.mcpServers as Record<string, unknown>)\n : {};\n } catch {\n return {};\n }\n }\n\n private writeMcpJsonFile(path: string, servers: Record<string, unknown>): void {\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, JSON.stringify({ mcpServers: servers }, null, 2) + \"\\n\", \"utf8\");\n }\n\n mcpList(scope: McpScope = \"user\", cwd?: string): McpServerEntry[] {\n const servers = this.readMcpJsonFile(this.mcpFilePath(scope, cwd));\n return Object.entries(servers).map(([name, config]) => ({\n name,\n config: typeof config === \"object\" && config !== null ? (config as Record<string, unknown>) : {},\n }));\n }\n\n mcpAdd(opts: { name: string; config: Record<string, unknown>; scope?: McpScope; cwd?: string }): { ok: boolean; error?: string } {\n if (!opts.name.trim()) return { ok: false, error: \"\u540D\u79F0\u5FC5\u586B\" };\n if (!opts.config || typeof opts.config !== \"object\") return { ok: false, error: \"\u914D\u7F6E\u65E0\u6548\" };\n const scope = opts.scope ?? \"user\";\n const path = this.mcpFilePath(scope, opts.cwd);\n const servers = this.readMcpJsonFile(path);\n servers[opts.name] = opts.config;\n this.writeMcpJsonFile(path, servers);\n return { ok: true };\n }\n\n mcpUpdate(opts: { name: string; config: Record<string, unknown>; scope?: McpScope; cwd?: string }): { ok: boolean; error?: string } {\n if (!opts.name.trim()) return { ok: false, error: \"\u540D\u79F0\u5FC5\u586B\" };\n if (!opts.config || typeof opts.config !== \"object\") return { ok: false, error: \"\u914D\u7F6E\u65E0\u6548\" };\n const scope = opts.scope ?? \"user\";\n const path = this.mcpFilePath(scope, opts.cwd);\n const servers = this.readMcpJsonFile(path);\n if (!(opts.name in servers)) return { ok: false, error: \"\u670D\u52A1\u5668\u4E0D\u5B58\u5728\" };\n servers[opts.name] = opts.config;\n this.writeMcpJsonFile(path, servers);\n return { ok: true };\n }\n\n mcpRemove(name: string, scope: McpScope = \"user\", cwd?: string): { ok: boolean; error?: string } {\n const path = this.mcpFilePath(scope, cwd);\n const servers = this.readMcpJsonFile(path);\n if (!(name in servers)) return { ok: false, error: \"\u670D\u52A1\u5668\u4E0D\u5B58\u5728\" };\n delete servers[name];\n this.writeMcpJsonFile(path, servers);\n return { ok: true };\n }\n}\n", "import { DefaultResourceLoader, SettingsManager } from \"@earendil-works/pi-coding-agent\";\n\n/**\n * Global skill discovery via pi's OWN DefaultResourceLoader.\n *\n * Unlike the old manual frontmatter parser (which only scanned\n * ~/.pi/agent/skills/ and ~/.agents/skills/), this picks up skills from\n * ALL sources pi knows about:\n * - ~/.pi/agent/skills/ (local)\n * - ~/.agents/skills/ (shared across agent harnesses)\n * - pi packages (declared in pi.skills in package.json)\n * - .pi/skills/ (project-local)\n *\n * This is the same discovery pi uses for sessions \u2014 no duplication, no drift.\n */\n\nexport interface SkillEntry {\n name: string;\n description: string;\n path: string;\n /** Source category: \"local\", \"agents\", \"package\", or \"project\". */\n source: string;\n}\n\n/**\n * List all skills discoverable by pi, deduped by name (first found wins).\n * Returns a stable, alphabetically sorted list for the UI settings panel.\n */\nexport async function listAllSkills(cwd: string, agentDir: string): Promise<SkillEntry[]> {\n try {\n const settingsManager = SettingsManager.create(cwd, agentDir);\n const loader = new DefaultResourceLoader({ cwd, agentDir, settingsManager });\n await loader.reload();\n const result = loader.getSkills();\n const seen = new Set<string>();\n const out: SkillEntry[] = [];\n for (const skill of result.skills) {\n if (seen.has(skill.name)) continue;\n seen.add(skill.name);\n // Derive a source category from pi's SourceInfo for the UI.\n const src = skill.sourceInfo;\n let source = \"local\";\n if (src.origin === \"package\") source = \"package\";\n else if (src.scope === \"project\") source = \"project\";\n else if (src.baseDir && src.baseDir.includes(\".agents\")) source = \"agents\";\n out.push({ name: skill.name, description: skill.description, path: skill.filePath, source });\n }\n return out.toSorted((a, b) => a.name.localeCompare(b.name));\n } catch {\n return [];\n }\n}", "import { spawn } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { spawnDaemon } from \"../daemon.js\";\n\n/**\n * `pi-web web` \u2014 spawns the daemon (which serves the built web UI over HTTP\n * on the same port as the WebSocket event stream) and opens the browser.\n *\n * One process, one port: the daemon serves `http://127.0.0.1:19707/` and\n * accepts `ws://127.0.0.1:19707` upgrades on the same HTTP server, so the\n * GUI attaches to the event stream with zero extra infrastructure.\n *\n * `gui` is kept as a backwards-compatible alias for `web`.\n */\n\nconst DEFAULT_WS_PORT = 19707;\n\n/**\n * Resolves the built web UI directory.\n *\n * Resolution order:\n * 1. Published CLI package: `dist/gui/` (web assets copied at build time)\n * 2. Monorepo dev: `apps/gui/dist/` (built via `pnpm --filter @vagus/gui build`)\n */\nfunction guiDistPath(): string | undefined {\n // Prod (published package): GUI assets ship inside the CLI package.\n const prod = fileURLToPath(new URL(\"../gui\", import.meta.url));\n if (existsSync(join(prod, \"index.html\"))) return prod;\n // Dev (monorepo): apps/gui/dist, built via `pnpm --filter @vagus/pi-web-gui build`.\n const dev = fileURLToPath(new URL(\"../../../gui/dist\", import.meta.url));\n if (existsSync(join(dev, \"index.html\"))) return dev;\n return undefined;\n}\n\n/** Opens the default browser to a URL, without blocking the CLI. */\nfunction openBrowser(url: string): void {\n const platform = process.platform;\n if (platform === \"win32\") {\n spawn(\"cmd\", [\"/c\", \"start\", \"\", url], { stdio: \"ignore\", detached: true }).unref();\n } else if (platform === \"darwin\") {\n spawn(\"open\", [url], { stdio: \"ignore\", detached: true }).unref();\n } else {\n spawn(\"xdg-open\", [url], { stdio: \"ignore\", detached: true }).unref();\n }\n}\n\nexport async function runWeb(): Promise<number> {\n const dist = guiDistPath();\n if (!dist) {\n process.stderr.write(\n \"pi-web: web UI build not found \u2014 run `pnpm --filter @vagus/pi-web-gui build` first.\\n\",\n );\n return 1;\n }\n\n const port = Number(process.env.VAGUS_WS_PORT ?? String(DEFAULT_WS_PORT));\n const url = `http://127.0.0.1:${port}/`;\n\n const child = spawnDaemon({\n stdio: [\"ignore\", \"inherit\", \"pipe\"],\n env: { VAGUS_GUI_DIR: dist },\n });\n\n let opened = false;\n let stderrBuf = \"\";\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString();\n stderrBuf += text;\n process.stderr.write(text);\n if (!opened && stderrBuf.includes(\"pi-web daemon ready\")) {\n opened = true;\n process.stdout.write(`pi-web: web UI at ${url}\\n`);\n openBrowser(url);\n }\n });\n\n child.on(\"exit\", (code, signal) => {\n if (!opened && code !== 0) {\n process.stderr.write(`pi-web: daemon exited (code ${code ?? \"?\"}, signal ${signal ?? \"none\"}) before the UI was ready.\\n`);\n }\n process.exit(code ?? 0);\n });\n\n const shutdown = (): void => {\n child.kill();\n };\n process.once(\"SIGINT\", shutdown);\n process.once(\"SIGTERM\", shutdown);\n\n // Runs until the daemon exits (Ctrl+C kills the child via the handlers above).\n return new Promise<number>(() => {});\n}\n", "import { spawn, type ChildProcess } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\n/**\n * Shared daemon lifecycle for the CLI GUI frontend.\n *\n * `pi-web web` spawns `pi-web daemon` as a child process and attaches to its\n * protocol \u2014 the daemon is the single source of truth, the frontend is a pure\n * view. This module owns the entry-point resolution (source via tsx in dev,\n * built dist in production).\n */\n\n/** Daemon entry that works both from source (tsx) and built dist. */\nfunction daemonEntryPath(): string {\n const base = fileURLToPath(new URL(\"./bin\", import.meta.url));\n const source = `${base}.ts`;\n return existsSync(source) ? source : `${base}.js`;\n}\n\nexport interface SpawnDaemonOptions {\n /** Extra environment variables merged over `process.env`. */\n env?: NodeJS.ProcessEnv;\n /** Stdio config for the child (defaults to piped; the TUI needs the stdio channel). */\n stdio?: Array<\"pipe\" | \"ignore\" | \"inherit\">;\n}\n\n/** Spawns the daemon child process. */\nexport function spawnDaemon(options: SpawnDaemonOptions = {}): ChildProcess {\n return spawn(process.execPath, [\"--import\", \"tsx\", daemonEntryPath(), \"daemon\"], {\n stdio: options.stdio ?? [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env, ...options.env },\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["readFileSync", "existsSync", "mkdirSync", "readFileSync", "readdirSync", "statSync", "homedir", "join", "resolve", "sep", "mkdirSync", "readFileSync", "writeFileSync", "dirname", "join", "SessionManager", "dirname", "isAbsolute", "join", "appendFileSync", "copyFileSync", "existsSync", "mkdirSync", "readdirSync", "readFileSync", "writeFileSync", "join", "existsSync", "mkdirSync", "readFileSync", "join", "n", "resolve", "SessionManager", "join", "isAbsolute", "readFileSync", "mkdirSync", "dirname", "writeFileSync", "existsSync", "sid", "appendFileSync", "readdirSync", "copyFileSync", "util", "objectUtil", "errorUtil", "errorMap", "ctx", "result", "issues", "elements", "processed", "ZodFirstPartyTypeKind", "existsSync", "existsSync", "statSync", "join", "resolve", "existsSync", "mkdirSync", "readFileSync", "writeFileSync", "dirname", "join", "SettingsManager", "DefaultResourceLoader", "SettingsManager", "join", "homedir", "existsSync", "mkdirSync", "sep", "statSync", "resolve", "readdirSync", "readFileSync", "spawn", "existsSync", "join", "fileURLToPath", "existsSync", "fileURLToPath", "fileURLToPath", "existsSync", "join", "spawn", "readFileSync"]
7
+ }