codeden 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/README.md +18 -0
  2. package/dist/cli.js +214 -56089
  3. package/dist/cli.js.map +1 -1
  4. package/dist/main-BF0aQ9U8.js +57012 -0
  5. package/dist/main-BF0aQ9U8.js.map +1 -0
  6. package/dist/main-DaGFUbbW.js +59 -0
  7. package/dist/main-DaGFUbbW.js.map +1 -0
  8. package/dist/{runner-CoJjefjZ.js → runner-D8m3WdtS.js} +232 -98
  9. package/dist/runner-D8m3WdtS.js.map +1 -0
  10. package/dist/runner.js +16 -52
  11. package/dist/runner.js.map +1 -1
  12. package/dist/web/assets/{core-DpRfWkWN.js → core-BmMheb4i.js} +1 -1
  13. package/dist/web/assets/engine-oniguruma-CVzqqUIi.js +1 -0
  14. package/dist/web/assets/{highlighted-body-JLMTFACH-H03v731F.js → highlighted-body-JLMTFACH-nUCrIe8P.js} +1 -1
  15. package/dist/web/assets/{highlights-Dz1cMTeO.js → highlights-CdGBlIcw.js} +1 -1
  16. package/dist/web/assets/{index-BG4dO7iI.js → index-DKWZjMF1.js} +205 -205
  17. package/dist/web/assets/index-DfoaM4E6.css +1 -0
  18. package/dist/web/assets/langs-kfQh6fa2.js +1 -0
  19. package/dist/web/assets/mermaid-WFAXDIZX-BIq7_eYY.js +1 -0
  20. package/dist/web/assets/{shiki-NQ4ryC1Y.js → shiki-D8HIISPT.js} +2 -2
  21. package/dist/web/assets/{stream-tokenizer-BxwNb7lW.js → stream-tokenizer-BmWmYTv_.js} +1 -1
  22. package/dist/web/assets/{themes-CNX2CYCy.js → themes-CKsIQs7_.js} +2 -2
  23. package/dist/web/index.html +2 -2
  24. package/package.json +1 -1
  25. package/dist/runner-CoJjefjZ.js.map +0 -1
  26. package/dist/web/assets/engine-oniguruma-C_TN-UZT.js +0 -1
  27. package/dist/web/assets/index-BpVrEjZE.css +0 -1
  28. package/dist/web/assets/langs-D6g8tc-L.js +0 -1
  29. package/dist/web/assets/mermaid-WFAXDIZX-DbjU3Ezf.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-D8m3WdtS.js","names":["cached","F","pick","_a","util.jsonStringifyReplacer","initializer","core.$ZodAsyncError","util.finalizeIssue","core.config","safeParse","errors.$ZodRealError","validateAsync","_emoji","base64","date","datetime","number","boolean","_null","util.nullish","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","util.codePointLength","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","content","util.aborted","util.explicitlyAborted","core.$ZodAsyncError","util.hide","util.finalizeIssue","core.config","regexes.anyString","regexes.guid","regexes.uuid","regexes.email","regexes.emoji","regexes.nanoid","regexes.nanoidOfLength","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.e164","regexes.number","regexes.boolean","regexes.null","util.sizeCaps","util.prefixIssues","util.optionalKeys","util.cached","isObject","util.isObject","util.esc","allowsEval","util.allowsEval","util.cleanRegex","util.rawShape","util.isPlainObject","util.getEnumValues","util.escapeRegex","core.$ZodEncodeError","util.issue","util.rawShape","util.parsedType","util.stringifyPrimitive","util.joinValues","util.normalizeParams","_null","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","util.slugify","issue","util.issue","checks.$ZodCheck","regexes.base64","regexes.base64url","regexes.number","regexes.integer","core.formatError","core.flattenError","util.jsonStringifyReplacer","parse","en","core.memoizer","util.mergeDefs","core.clone","checks.overwrite","util.hide","core.standardProps","parse.parse","parse.parseAsync","parse.safeParse","parse.safeParseAsync","parse.validate","parse.validateAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","processors.stringProcessor","processors.aggregateChecks","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","checks.slugify","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","core._isoDateTime","core._isoDate","core._isoTime","core._isoDuration","core._string","processors.numberProcessor","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","number","core._number","core._int","processors.booleanProcessor","core._boolean","processors.nullProcessor","core._null","processors.unknownProcessor","core._unknown","processors.neverProcessor","core._never","processors.arrayProcessor","core._array","processors.objectProcessor","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","util.normalizeParams","processors.unionProcessor","processors.intersectionProcessor","processors.recordProcessor","processors.enumProcessor","processors.literalProcessor","processors.transformProcessor","core.$ZodEncodeError","issue","util.issue","processors.optionalProcessor","processors.nullableProcessor","processors.defaultProcessor","util.shallowClone","processors.prefaultProcessor","processors.nonoptionalProcessor","processors.catchProcessor","core.util.constantCatch","processors.pipeProcessor","processors.readonlyProcessor","processors.lazyProcessor","processors.customProcessor","core._custom","core._refine","core._superRefine","core._isoDateTime","core._isoDate","core._coercedNumber","schemas.ZodNumber","z.string","z.iso.datetime","z.json","z.enum","z.object","z.boolean","z.int","z.url","z.enum","z.object","z.string","z.boolean","z.int","z.array","z.discriminatedUnion","z.literal","z.record","z.unknown","z\n .string","z.discriminatedUnion","z.object","z.literal","z.base64","z.string","z.enum","z.array","z.enum","z.object","z.literal","z.string","z.boolean","z.int","z.discriminatedUnion","z.array","z.record","z.object","z.int","z.number","z\n .array","z.string","z.enum","z.iso.datetime","z.literal","z.discriminatedUnion","z.enum","z.object","z.string","z.enum","z.object","z.int","z\n .object","z.number","z.array","z.string","z.boolean","z.string","z.boolean","z.object","z.discriminatedUnion","z.literal","z.object","z.enum","z.string","z\n .string","z.array","z.discriminatedUnion","z.literal","z.boolean","z.object","z.string","z.int","z.array","z.union","z.object","z.boolean","z.string","z.array","z.int","z.enum","z\n .object","z.discriminatedUnion","z.literal","z.url","z.record","z.string","z.object","z.boolean","z.int","z.enum","z.number","z.literal","z.union","Empty","z.array","z.string","z.int","z.object","z.enum","z.boolean","z.discriminatedUnion","z.literal","z.url","z.array","z\n .string","z.record","z\n .array","z.object","z.string","z.enum","z.array","z.discriminatedUnion","z.literal","z.int","z.boolean","z\n .object","z.coerce.number","z.enum","z.object","z.string","z.int","z.enum","z.discriminatedUnion","z.object","z.literal","z.string","z\n .object","z.array","z\n .object","z.boolean","z.int","z\n .object","z\n .enum","z.enum","z.object","z.string","z.int","z\n .string","z.enum","z.object","z.string","z.boolean","z\n .array","z.array","z.number","z.int","z.record","z.union","z.literal","z.enum","z.object","z.boolean","z.string","z.int","z.url","z.array","z.coerce.number","z.enum","z.string","z.discriminatedUnion","z.object","z.literal","z.array","z.int","z.boolean","z.record","z.enum","z.object","z.string","z.boolean","z.array","compareVersions","z.union","z.literal","z.enum","z.object","z.string","z.int","z\n .object","z\n .object","z.boolean","z.record","z.preprocess","z\n .object","z.iso.datetime","z.object","z.int","z.string","z.unknown","z.literal","z.discriminatedUnion","z.enum","z.array","z.object","z.enum","z.string","z.array","z.int","z.literal","z.discriminatedUnion","z.number","z.object","z.enum","z.discriminatedUnion","z.literal","z.string","z.boolean","z.array","z.union","z\n .object","z\n .string","z.int","z.coerce.number","z.record","z.partialRecord","z.object","z.int","z.boolean","z.enum","z.string","z.array","z\n .object","z.record","z.discriminatedUnion","z.literal","z.coerce.number","z.object","z.string","z.array","z.boolean","z.enum","z.int","z.coerce.number","z.discriminatedUnion","z.literal","z.enum","z.object","z.string","z.boolean","z.int","z.record","z.array","z.object","z.enum","z.coerce.number","z\n .object","z.string","z.discriminatedUnion","z.object","z.literal","z.enum","z.int","z.boolean","z.string","z.array","z.string","z.int","z.object","z.boolean","z.literal","z.discriminatedUnion","z.array","z.enum","z.unknown","z.object","z.string","z.enum","z.int","z.array","z.boolean","z.enum","z.object","z.string","z.enum","z.object","z.int","z.string","z.number","z.iso.date","z.url","z.boolean","z.array","z.record","z.enum","z.object","z.string","z.record","z.array","WebSocket","splitPath","killTree","isInside","isAlive","capabilities","FALLBACK_MODELS","capabilities","ReasoningEffortSchema","Interrupted","constants","Hono","Node","Node","isWindows","createServer","exec","gitOps.status","gitOps.diff","gitOps.branches","gitOps.commit","gitOps.push","agent.snapshot","agent.click","agent.type","agent.press","agent.screenshot","agent.evaluate","agent.wait","ServerToRunnerSchema","WebSocketServer","allowsEval$1"],"sources":["../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/memoizer.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/locales/en.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/to-json-schema.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/core/json-schema-processors.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/schemas.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/iso.js","../../../node_modules/.pnpm/zod@4.6.7/node_modules/zod/v4/classic/coerce.js","../../../packages/contracts/src/common.ts","../../../packages/contracts/src/agent-config.ts","../../../packages/contracts/src/input.ts","../../../packages/contracts/src/items.ts","../../../packages/contracts/src/agent-events.ts","../../../packages/contracts/src/entities/inbox.ts","../../../packages/contracts/src/factory.ts","../../../packages/contracts/src/entities/project.ts","../../../packages/contracts/src/work.ts","../../../packages/contracts/src/project-config.ts","../../../packages/contracts/src/provider.ts","../../../packages/contracts/src/runner/browser.ts","../../../packages/contracts/src/runner/commands.ts","../../../packages/contracts/src/workbench.ts","../../../packages/contracts/src/entities/session.ts","../../../packages/contracts/src/entities/automation.ts","../../../packages/contracts/src/entities/artifact.ts","../../../packages/contracts/src/factory-api.ts","../../../packages/contracts/src/github.ts","../../../packages/contracts/src/orchestration.ts","../../../packages/contracts/src/updates.ts","../../../packages/contracts/src/settings.ts","../../../packages/contracts/src/events.ts","../../../packages/contracts/src/ws.ts","../../../packages/contracts/src/api.ts","../../../packages/contracts/src/automations-api.ts","../../../packages/contracts/src/browser-api.ts","../../../packages/contracts/src/images-api.ts","../../../packages/contracts/src/orchestration-api.ts","../../../packages/contracts/src/runner/events.ts","../../../packages/contracts/src/runner/messages.ts","../../../packages/contracts/src/session-files.ts","../../../packages/contracts/src/tools.ts","../../../packages/contracts/src/usage.ts","../../../packages/contracts/src/version.ts","../../../packages/contracts/src/voice-api.ts","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/constants.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/buffer-util.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/limiter.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/permessage-deflate.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/validation.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/receiver.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/sender.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/event-target.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/extension.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/websocket.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/stream.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/subprotocol.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/lib/websocket-server.js","../../../node_modules/.pnpm/ws@8.22.1/node_modules/ws/wrapper.mjs","../../../packages/providers/src/adapter.ts","../../../packages/providers/src/approvals.ts","../../../packages/providers/src/async-queue.ts","../../../packages/providers/src/util/exec.ts","../../../packages/providers/src/util/version.ts","../../../packages/providers/src/claude/detect.ts","../../../packages/providers/src/util/model.ts","../../../packages/providers/src/util/text.ts","../../../packages/providers/src/utility.ts","../../../packages/providers/src/policy/paths.ts","../../../packages/providers/src/policy/risk.ts","../../../packages/providers/src/policy/read-only.ts","../../../packages/providers/src/claude/tools.ts","../../../packages/providers/src/claude/permissions.ts","../../../packages/providers/src/claude/options.ts","../../../packages/providers/src/util/install-lock.ts","../../../packages/providers/src/util/npm.ts","../../../packages/providers/src/util/npm-run.ts","../../../packages/providers/src/claude/sdk/install.ts","../../../packages/providers/src/claude/sdk/load.ts","../../../packages/providers/src/claude/one-shot.ts","../../../packages/providers/src/claude/stream.ts","../../../packages/providers/src/claude/subagents.ts","../../../packages/providers/src/claude/tool-tracker.ts","../../../packages/providers/src/claude/usage.ts","../../../packages/providers/src/claude/mapper.ts","../../../packages/providers/src/claude/session.ts","../../../packages/providers/src/claude/adapter.ts","../../../packages/providers/src/codex/detect.ts","../../../packages/providers/src/codex/rpc.ts","../../../packages/providers/src/codex/process.ts","../../../packages/providers/src/codex/one-shot.ts","../../../packages/providers/src/codex/approvals.ts","../../../packages/providers/src/codex/config.ts","../../../packages/providers/src/codex/items.ts","../../../packages/providers/src/codex/mapper.ts","../../../packages/providers/src/codex/session.ts","../../../packages/providers/src/codex/adapter.ts","../../../packages/providers/src/fake/session.ts","../../../packages/providers/src/fake/adapter.ts","../../../packages/providers/src/image/errors.ts","../../../packages/providers/src/image/codex-turn.ts","../../../packages/providers/src/image/paths.ts","../../../packages/providers/src/image/image-file.ts","../../../packages/providers/src/image/types.ts","../../../packages/providers/src/image/request.ts","../../../packages/providers/src/image/codex.ts","../../../packages/providers/src/image/http.ts","../../../packages/providers/src/image/gemini.ts","../../../packages/providers/src/image/openai.ts","../../../packages/providers/src/image/registry.ts","../../../packages/providers/src/registry.ts","../../../packages/providers/src/replay/fixture.ts","../../../packages/providers/src/replay/adapter.ts","../../../node_modules/.pnpm/@hono+node-server@2.1.6_hono@4.13.17/node_modules/@hono/node-server/dist/constants-BLSFu_RU.mjs","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/helper/websocket/index.js","../../../node_modules/.pnpm/@hono+node-server@2.1.6_hono@4.13.17/node_modules/@hono/node-server/dist/index.mjs","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/request/constants.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/utils/buffer.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/utils/body.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/utils/url.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/request.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/utils/html.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/context.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/compose.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/utils/constants.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/utils/mount.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/hono-base.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/utils.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/reg-exp-router/matcher.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/reg-exp-router/node.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/reg-exp-router/trie.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/reg-exp-router/router.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/smart-router/router.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/trie-router/node.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/router/trie-router/router.js","../../../node_modules/.pnpm/hono@4.13.17/node_modules/hono/dist/hono.js","../../runner/src/errors.ts","../../runner/src/browser/launcher.ts","../../runner/src/process/env.ts","../../runner/src/process/tree.ts","../../runner/src/git/exec.ts","../../runner/src/git/diff.ts","../../runner/src/git/checkpoints.ts","../../runner/src/git/ops.ts","../../runner/src/ports.ts","../../runner/src/workspace/project-config.ts","../../runner/src/workspace/setup.ts","../../runner/src/workspace/worktree.ts","../../runner/src/commands.ts","../../runner/src/lock.ts","../../runner/src/journal.ts","../../runner/src/mcp/proxy.ts","../../runner/src/util/paths.ts","../../runner/src/process/supervisor.ts","../../runner/src/pty/scrollback.ts","../../runner/src/pty/terminal-host.ts","../../runner/src/browser/images.ts","../../runner/src/browser/agent.ts","../../runner/src/browser/handlers.ts","../../runner/src/browser/input.ts","../../runner/src/browser/logs.ts","../../runner/src/browser/screencast.ts","../../runner/src/browser/urls.ts","../../runner/src/browser/session.ts","../../runner/src/browser/manager.ts","../../runner/src/connection.ts","../../runner/src/session-host.ts","../../runner/src/runner.ts"],"sourcesContent":["import { globalConfig } from \"./core.js\";\n// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function toZod() {\n return (schema) => schema;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\n// the accessor lives on a shared prototype: an own accessor makes every box a dictionary-mode object (~360 B and a slow load per read against ~100 B and an inlined getter here)\nclass Cached {\n constructor(getter) {\n this._getter = getter;\n this._value = undefined;\n }\n get value() {\n const getter = this._getter;\n if (getter !== undefined) {\n this._value = getter();\n this._getter = undefined;\n }\n return this._value;\n }\n}\nexport function cached(getter) {\n return new Cached(getter);\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // `val` and `step` each round to a double before the division rounds again, so a true decimal multiple's quotient can sit up to 1.5 of these scaled epsilons from the integer. A 1x tolerance therefore rejected 2.03 as a multiple of 0.07; 4x covers the worst case with margin.\n const tolerance = 4 * Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\n/**\n * Whichever object a def's `shape` currently answers from: the one the caller passed until the first read, the frozen copy after it.\n *\n * Its keys and descriptors read without invoking anything, which is what lets a discriminated union check its discriminator, and the cycle walk read a shape, without resolving a getter that references the schema being constructed. A def that answers `shape` from an accessor of its own has none.\n */\nexport function rawShape(def) {\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n return desc?.get ? desc.get.raw : desc?.value;\n}\n// where a builder reads its source's keys and descriptors, resolving only a shape a def answers for itself. A shape resolves by object spread, so only its enumerable keys are ever part of it.\nfunction sourceShape(schema) {\n return rawShape(schema._zod.def) ?? schema._zod.def.shape;\n}\n// a key whose value is not settled yet, self-caching so every read after the first gets the same one\nfunction deferProp(target, key, getter) {\n Object.defineProperty(target, key, {\n get() {\n const value = getter();\n assignProp(this, key, value);\n return value;\n },\n enumerable: true,\n configurable: true,\n });\n}\n// Writes a settled key. A plain assignment is much cheaper than `defineProperty` and produces the same descriptor, but it runs whatever setter already answers to the key — an accessor this shape deferred, or an inherited one, which `__proto__` has on every object and prototype pollution can add for any name.\nfunction putProp(target, key, value) {\n if (key in target)\n assignProp(target, key, value);\n else\n target[key] = value;\n}\n/**\n * Copies `keys` of `source`'s shape onto `target`, each value passed through `wrap`.\n *\n * A key the source has resolved is copied through now, so the derived shape states it outright and nothing has to resolve it to learn what it holds. A key the source still defers stays deferred, and reads back through the source's own `shape`, so it resolves once and both shapes get that one schema.\n */\nfunction mirrorShape(target, source, keys, wrap) {\n const raw = sourceShape(source);\n for (const key of keys) {\n const desc = Object.getOwnPropertyDescriptor(raw, key);\n if (!desc.enumerable)\n continue;\n if (desc.get) {\n deferProp(target, key, () => {\n const value = source._zod.def.shape[key];\n return wrap ? wrap(value, key) : value;\n });\n }\n else\n putProp(target, key, wrap ? wrap(desc.value, key) : desc.value);\n }\n}\n// same, for a plain shape a caller passed rather than a schema's\nfunction mirrorProps(target, source) {\n for (const key of Reflect.ownKeys(source)) {\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!desc.enumerable)\n continue;\n if (desc.get)\n deferProp(target, key, () => source[key]);\n else\n putProp(target, key, desc.value);\n }\n}\nexport function mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport function slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function` as a `securitypolicyviolation` even though the throw is swallowed.\n if (globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin !== undefined && shape[k]._zod.optout === \"optional\";\n });\n}\n// Wrapped in a `@__PURE__` IIFE: esbuild never tree-shakes a top-level initializer that contains a member access on `Number`, so the bare object literal survived into every bundle.\nexport const NUMBER_FORMAT_RANGES = /*@__PURE__*/ (() => ({\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n}))();\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const newShape = {};\n mirrorShape(newShape, schema, maskedKeys(schema, mask));\n return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\n// the mask keys that select something, checked against the source's shape without resolving it\nfunction maskedKeys(schema, mask) {\n const raw = sourceShape(schema);\n const keys = [];\n // `for...in` skips symbols, so a symbol in the mask would select nothing\n for (const key of Reflect.ownKeys(mask)) {\n if (!Object.getOwnPropertyDescriptor(raw, key)?.enumerable) {\n throw new Error(`Unrecognized key: \"${String(key)}\"`);\n }\n if (mask[key])\n keys.push(key);\n }\n return keys;\n}\nexport function omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const omitted = new Set(maskedKeys(schema, mask));\n const newShape = {};\n mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)).filter((key) => !omitted.has(key)));\n return clone(schema, mergeDefs(currDef, { shape: newShape, checks: [] }));\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape. Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = sourceShape(schema);\n for (const key of Reflect.ownKeys(shape)) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\n// the source's keys, then the caller's overlaid on top\nfunction extended(schema, shape) {\n const newShape = {};\n mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)));\n mirrorProps(newShape, shape);\n return newShape;\n}\nexport function safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n return clone(schema, mergeDefs(schema._zod.def, { shape: extended(schema, shape) }));\n}\nexport function merge(a, b) {\n if (!b?._zod?.def) {\n throw new Error(\"Invalid input to merge: expected an object schema. To merge a plain shape, use `.extend()`.\");\n }\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const newShape = {};\n mirrorShape(newShape, a, Reflect.ownKeys(sourceShape(a)));\n mirrorShape(newShape, b, Reflect.ownKeys(sourceShape(b)));\n const def = mergeDefs(a._zod.def, {\n shape: newShape,\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nexport function partial(Class, schema, mask, name = \"partial\") {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(`.${name}() cannot be used on object schemas containing refinements`);\n }\n const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n const newShape = {};\n mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), Class &&\n ((value, key) => (selected && !selected.has(key) ? value : new Class({ type: \"optional\", innerType: value }))));\n return clone(schema, mergeDefs(schema._zod.def, { shape: newShape, checks: [] }));\n}\nexport function required(Class, schema, mask) {\n const selected = mask ? new Set(maskedKeys(schema, mask)) : undefined;\n const newShape = {};\n mirrorShape(newShape, schema, Reflect.ownKeys(sourceShape(schema)), (value, key) => \n // overwrite with non-optional\n selected && !selected.has(key) ? value : new Class({ type: \"nonoptional\", innerType: value }));\n return clone(schema, mergeDefs(schema._zod.def, { shape: newShape }));\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined). Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nexport function explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\n/* A check holds no link back to the schema it is attached to — the same check instance is shared by every clone of that schema — so the owner is stamped onto the issues a check just raised, at the only point where both are in scope. Runs on the failure path only; `start` is the issue count from before the check ran. */\n/** The leading size checks of `defChecks` that set an upper bound, each paired with it. */\nexport function sizeCaps(defChecks) {\n const caps = [];\n for (const ch of defChecks ?? []) {\n const d = ch._zod.def;\n // a later check may rewrite the value\n if (!/_(length|size)$|_equals$/.test(d.check))\n break;\n const max = d.maximum ?? d.length ?? d.size;\n if (max >= 0)\n caps.push([max, ch]);\n }\n return caps;\n}\nexport function attachSchema(issues, start, inst) {\n var _a;\n for (let i = start; i < issues.length; i++) {\n (_a = issues[i]).schema ?? (_a.schema = inst);\n }\n}\nexport function finalizeIssue(iss, ctx, config) {\n var _a;\n // A schema that raised an issue itself owns it outright, and outranks any stamp an enclosing check left in `attachSchema`. String formats and z.custom() are schema and check at once, so when they act as a check they defer to that stamp instead.\n const traits = iss.inst?._zod?.traits;\n if (traits?.has(\"$ZodType\")) {\n if (traits.has(\"$ZodCheck\"))\n (_a = iss).schema ?? (_a.schema = iss.inst);\n else\n iss.schema = iss.inst;\n }\n // Decreasing specificity, first map to return a message wins. `inst` is whatever raised the issue, so a check's own map outranks the owning schema's.\n const schemaError = iss.schema !== iss.inst ? iss.schema?._zod.def?.error : undefined;\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(schemaError?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n // an explicit own-key copy beats object rest with excluded keys, which v8 routes through a generic runtime call; Object.keys rather than for-in so an issue pushed with a prototype does not leak inherited keys, and an own __proto__ key is dropped rather than assigned through the setter\n const full = {};\n for (const k of Object.keys(iss)) {\n if (k === \"inst\" || k === \"schema\" || k === \"continue\" || k === \"input\" || k === \"__proto__\")\n continue;\n full[k] = iss[k];\n }\n full.path ?? (full.path = []);\n full.message = message;\n if (ctx?.reportInput) {\n full.input = iss.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nconst highSurrogate = /[\\uD800-\\uDBFF]/;\n// Code points in `str`: a surrogate pair counts once, a lone surrogate as itself. Hand-rolled because the string iterator allocates and runs ~250x slower on this path; the regex probe exits ~50x quicker for a string with no astral characters.\nexport function codePointLength(str) {\n const units = str.length;\n if (!highSurrogate.test(str))\n return units;\n let count = units;\n for (let i = 0; i < units - 1; i++) {\n if ((str.charCodeAt(i) & 0xfc00) === 0xd800 && (str.charCodeAt(i + 1) & 0xfc00) === 0xdc00) {\n count--;\n i++;\n }\n }\n return count;\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n////////// PROTOTYPE INSTALLERS //////////\n//\n// Members live on the prototype and materialize per instance on first read, which keeps own-property count under the step where V8 stops using inline slots. Changing anything here means re-measuring runtime, memory and bundle size together — see \"The three axes\" in AGENTS.md.\n/**\n * Installs a trait's members on its prototype. Each value builds that member for the instance on first read; the built value shadows the accessor as an own property, so a detached `const { parse } = schema` keeps working.\n *\n * Call this from a `proto` initializer, which runs once per prototype — never per instance.\n */\nexport function members(proto, table) {\n for (const key in table) {\n const desc = Object.getOwnPropertyDescriptor(table, key);\n // a getter installs as written, so it stays live: `description` reads through to the registry on every access. not enumerable: an object literal's is, and a prototype member never was\n if (desc.get)\n Object.defineProperty(proto, key, { ...desc, enumerable: false });\n // a method materializes bound on first read, which is what keeps a detached member working: `const opt = schema.optional; opt()`\n else\n defineBound(proto, key, desc.value);\n }\n}\n/** Shadows a prototype member with an own value, so a getter that builds from the instance runs once. */\nexport function own(inst, key, value, enumerable = true) {\n Object.defineProperty(inst, key, { configurable: true, writable: true, enumerable, value });\n return value;\n}\n/** Like {@link own}, for a member that was never an own data property and has to stay out of `Object.keys`. */\nexport function hide(inst, key, value) {\n return own(inst, key, value, false);\n}\n/** Adds members a table derives from the instance: each builds on first read and shadows as own data, and assignment shadows the same way, as when these were own properties. */\nexport /*@__NO_SIDE_EFFECTS__*/ function derived(computes, table) {\n for (const key in computes) {\n const compute = computes[key];\n // an object literal's accessor is configurable and enumerable, and `members` copies the descriptor as written\n Object.defineProperty(table, key, {\n configurable: true,\n enumerable: true,\n get() {\n return own(this, key, compute(this));\n },\n set(value) {\n own(this, key, value);\n },\n });\n }\n return table;\n}\nfunction defineBound(proto, key, fn) {\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n // vitest's spyOn calls a prototype getter bare to find the function it wraps, so a nullish receiver answers the raw method\n return this == null ? fn : own(this, key, fn.bind(this));\n },\n set(value) {\n own(this, key, value);\n },\n });\n}\n/** Returns the prototype to install on, or `undefined` if this group is already installed on it. */\nfunction claim(inst, sentinel) {\n const proto = Object.getPrototypeOf(inst);\n // Runs on every construction, so `in` rather than the costlier `hasOwnProperty.call`. Sentinels are keys the group itself defines.\n return sentinel in proto ? undefined : proto;\n}\n// The internals whose init chain is installing. A second call for the same one is a derived constructor overriding its base, so it must not construct another schema in between or the override is dropped.\nlet installing;\n// Set while a getter is running, so a value that resolved through a recursion break is not memoized. One shared descriptor shadows the key for the duration, which costs no per-key allocation.\nlet broke = false;\nconst breaker = {\n configurable: true,\n get() {\n broke = true;\n return undefined;\n },\n};\n/**\n * Installs a lazily-derived internal on the `_zod` prototype of `inst`'s\n * constructor, computed from the internals object itself and cached there on\n * first read. One accessor per constructor rather than one per instance.\n */\nexport function defineLazyInternal(inst, key, compute) {\n const proto = Object.getPrototypeOf(inst._zod);\n if (key in proto && installing !== inst._zod) {\n // A repeat construction: everything is installed already. Cleared here so the reference is not held past the first construction of every type.\n installing = undefined;\n return;\n }\n installing = inst._zod;\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n // Shadowed before computing so a re-entrant read from a recursive schema resolves to undefined instead of running the getter again.\n Object.defineProperty(this, key, breaker);\n const outer = broke;\n broke = false;\n try {\n const value = compute(this);\n // A result that resolved through a recursion break is recomputed once the graph is complete; everything else memoizes, undefined included.\n if (broke)\n delete this[key];\n else\n Object.defineProperty(this, key, { configurable: true, writable: true, value });\n broke = broke || outer;\n return value;\n }\n catch (err) {\n // A compute that threw memoizes nothing, so a later read runs it again and fails the same way. The shadow goes with it, since leaving it installed would answer undefined for every later read.\n delete this[key];\n broke = broke || outer;\n throw err;\n }\n },\n set(value) {\n Object.defineProperty(this, key, { configurable: true, writable: true, value });\n },\n });\n}\n/**\n * Installs `key` on `inst`'s prototype, computed by `make` on first read and cached there as an own\n * data property. One accessor per constructor rather than one per instance, because an own accessor\n * puts every instance after the first into v8 dictionary mode. The key doubles as the sentinel.\n */\nexport function installLazyProp(inst, key, make, enumerable) {\n const proto = claim(inst, key);\n if (!proto)\n return;\n Object.defineProperty(proto, key, {\n configurable: true,\n get() {\n // Shadowed before computing, so a re-entrant read from a self-referential shape resolves to undefined instead of running the getter again. A data property rather than an accessor: an own accessor is the dictionary-mode transition this exists to avoid.\n const desc = { configurable: true, writable: true, enumerable, value: undefined };\n Object.defineProperty(this, key, desc);\n // a compute that throws leaves the shadow behind, so later reads answer undefined instead of re-throwing; `defineLazy` did the same, and `defineLazyInternal`'s delete-on-catch would cost bytes in every bundle for a case only a throwing user getter reaches\n desc.value = make(this);\n Object.defineProperty(this, key, desc);\n return desc.value;\n },\n set(value) {\n Object.defineProperty(this, key, { configurable: true, writable: true, enumerable, value });\n },\n });\n}\n/** Marks the thunk `_catch` synthesises for a constant catch value. `Function.length` cannot tell that thunk from a user callback — rest and defaulted parameters both report arity 0 — and a user callback reads `ctx.error`, whose issues only finalize correctly against the caller's per-parse error map. Provenance can say what arity cannot. A plain string key rather than `Symbol.for`, whose call at module scope no bundler can prove pure — the same shape that anchored `urlCanParse` into every build. */\nexport const CONSTANT_CATCH = \"~constantCatch\";\n/** Wraps a constant catch value in a thunk tagged with {@link CONSTANT_CATCH}. */\nexport function constantCatch(value) {\n const fn = () => value;\n fn[CONSTANT_CATCH] = true;\n return fn;\n}\n","var _a;\nimport { members as installMembers } from \"./util.js\";\n/** A special constant with type `never` */\nexport const NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\n/* Shared descriptor for installing `_zod`; defineProperty reads it\n * synchronously, so reusing one object avoids a per-instance allocation. */\nconst _zodDesc = { value: undefined, enumerable: false };\n// null where suppressing the capture would be unrecoverable: `parse()` puts the frames back with `captureStackTrace`, so without it the throw would lose its stack. also latched to null once `stackTraceLimit` proves unassignable, which a realm can do at any point by hardening Error\nlet _E = \"captureStackTrace\" in Error ? Error : null;\n// v8 captures a stack trace inside the Error constructor, which dominates a failed parse; costs only the frames, and parse() restores those. the constructor must RUN: Object.create is cheaper and passes instanceof, but Error.isError and util.types.isNativeError check an internal slot\nfunction newError(Definition) {\n const E = _E;\n if (E) {\n const saved = E.stackTraceLimit;\n if (typeof saved === \"number\") {\n try {\n E.stackTraceLimit = 0;\n }\n catch {\n _E = null;\n return new Definition();\n }\n try {\n return new Definition();\n }\n finally {\n E.stackTraceLimit = saved;\n }\n }\n }\n return new Definition();\n}\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, \n/** This trait's members, installed once on every prototype that composes it. They cannot be declared in the initializer above: that runs per instance, and the prototype is shared. */\nproto, params) {\n // Prototype for this constructor's `_zod` internals. Lazily-derived fields (`values`, `pattern`, `optin`, …) install here once rather than as an accessor on every instance.\n const zodProto = {};\n // Assigning the fields in the constructor body is what gives instances in-object slots; building the object literally and reparenting it costs a second allocation and a generic property copy.\n function Internals(def) {\n this.def = def;\n this.constr = _;\n this.traits = new Set();\n }\n Internals.prototype = zodProto;\n const protoMembers = proto;\n // One trait's members land on every prototype whose chain composes it, so the answer is per prototype rather than per trait.\n const initialized = protoMembers && new WeakSet();\n function init(inst, def) {\n if (!inst._zod) {\n _zodDesc.value = new Internals(def);\n try {\n Object.defineProperty(inst, \"_zod\", _zodDesc);\n }\n finally {\n // Cleared even on throw, so the shared descriptor never leaks one instance's internals into the next.\n _zodDesc.value = undefined;\n }\n }\n else if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n if (initialized) {\n // `super(def)` from a user subclass gives `this` a prototype the subclass owns, and installing there would overwrite whatever the subclass declared. `constr` built the instance, so its prototype is the one below the subclass's that should carry the members. A receiver whose chain never reaches that prototype installs on its own, which for a plain object handed straight to `init` means `Object.prototype` — unchanged from before.\n const own = Object.getPrototypeOf(inst);\n const ctorProto = inst._zod.constr.prototype;\n let up = own;\n while (up && up !== ctorProto)\n up = Object.getPrototypeOf(up);\n const target = up ?? own;\n if (!initialized.has(target)) {\n initialized.add(target);\n installMembers(target, protoMembers);\n }\n }\n // support prototype modifications; for-in avoids the array allocation of Object.keys on the (usually empty) prototype\n const proto = _.prototype;\n for (const k in proto) {\n if (!Object.prototype.hasOwnProperty.call(proto, k))\n continue;\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n const inst = params?.Parent ? newError(Definition) : this;\n init(inst, def);\n const deferred = inst._zod.deferred;\n if (deferred) {\n for (const fn of deferred) {\n fn();\n }\n // Released: initializers run once, and the list would otherwise be retained for the schema's lifetime.\n inst._zod.deferred = undefined;\n }\n // Global post-processor hook. Internal: installed by `import \"zod/compile\"` to enable AOT compilation for every constructed schema. Runs last, once the instance is fully built, because it hands the instance to compile(). The post-processor is expected to be reentrancy-guarded by its own implementation.\n const pp = globalThis.__zod_globalConfig?.postProcessor;\n if (pp)\n pp(inst);\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = /*@__PURE__*/ Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport class $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nexport const globalConfig = globalThis.__zod_globalConfig;\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\n/* Computing the message eagerly is expensive (pretty-printed JSON of all\n * issues), so defer it until first read. The accessor functions and\n * descriptors are shared across instances to keep error construction\n * cheap; the computed message is cached on the internals object. The\n * setter preserves plain assignment semantics for consumers that\n * overwrite `message`. */\nfunction _getMessage() {\n const internals = this._zod;\n internals.message ?? (internals.message = JSON.stringify(internals.def, util.jsonStringifyReplacer, 2));\n return internals.message;\n}\nfunction _setMessage(value) {\n this._zod.message = value;\n}\nconst _messageDesc = {\n get: _getMessage,\n set: _setMessage,\n enumerable: true,\n configurable: true,\n};\nconst _issuesDesc = { value: undefined, enumerable: false };\n/* Prototypes that already carry the lazy `toString`. Seeded with the\n * intrinsics so that `init` on a foreign object — it accepts any object —\n * can never install an accessor onto a prototype we do not own. */\nconst _installedToString = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n // `_zod` is already non-enumerable: $constructor's init defined it with this same descriptor\n _issuesDesc.value = def;\n Object.defineProperty(inst, \"issues\", _issuesDesc);\n // Clear the shared slot; a retained `value` pins the last error's issues.\n _issuesDesc.value = undefined;\n Object.defineProperty(inst, \"message\", _messageDesc);\n /* `toString` lives as a non-enumerable lazy getter on the shared\n * prototype; on first access it caches a per-instance closure so\n * detached usage still works. */\n const proto = Object.getPrototypeOf(inst);\n if (!_installedToString.has(proto)) {\n _installedToString.add(proto);\n Object.defineProperty(proto, \"toString\", {\n configurable: true,\n enumerable: false,\n get() {\n const value = () => this.message;\n Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n return value;\n },\n set(value) {\n Object.defineProperty(this, \"toString\", { value, configurable: true, writable: true });\n },\n });\n }\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, undefined, {\n Parent: Error,\n});\n/** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member\n * (\"toString\", \"constructor\") would otherwise read through to the prototype, and assigning\n * \"__proto__\" would hit the setter instead of creating a key. */\nfunction node(obj, key, make) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n if (key === \"__proto__\") {\n Object.defineProperty(obj, key, { value: make(), writable: true, enumerable: true, configurable: true });\n }\n else {\n obj[key] = make();\n }\n }\n return obj[key];\n}\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n node(fieldErrors, sub.path[0], () => []).push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n // `_errors` is reserved by this legacy format, so merge a matching path segment into the current node instead of treating its array as a child.\n if (el === \"_errors\") {\n if (terminal)\n curr._errors.push(mapper(issue));\n i++;\n continue;\n }\n // A path element may collide with an inherited property name such as\n // \"__proto__\" or \"constructor\". Truthiness checks read the prototype\n // (so no node is created, then ._errors.push throws), and bracket\n // assignment of \"__proto__\" hits the setter instead of creating an\n // own key. Guard the read with hasOwnProperty and create the node\n // with defineProperty so any path element becomes a real own key.\n if (!Object.prototype.hasOwnProperty.call(curr, el)) {\n Object.defineProperty(curr, el, {\n value: { _errors: [] },\n enumerable: true,\n writable: true,\n configurable: true,\n });\n }\n const node = curr[el];\n if (terminal) {\n node._errors.push(mapper(issue));\n }\n curr = node;\n i++;\n }\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n // el may collide with an inherited property name (\"__proto__\",\n // \"constructor\", ...); ??= reads the prototype so the node is never\n // created and curr.errors.push throws. Guard with hasOwnProperty and\n // create the node with defineProperty so \"__proto__\" becomes a real\n // own key rather than invoking the prototype setter.\n if (!Object.prototype.hasOwnProperty.call(curr.properties, el)) {\n Object.defineProperty(curr.properties, el, {\n value: { errors: [] },\n enumerable: true,\n writable: true,\n configurable: true,\n });\n }\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_a = curr.items)[el] ?? (_a[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\n// Always both keys, so the `_params` read site in `_parse` sees one object shape rather than two.\nfunction finalizeParams(callee, params) {\n return { callee: params?.callee ?? callee, Err: params?.Err };\n}\nexport const _parse = (_Err) => {\n const fn = (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee ?? fn);\n throw e;\n }\n return result.value;\n };\n return fn;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => {\n const fn = async (schema, value, _ctx, params) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee ?? fn);\n throw e;\n }\n return result.value;\n };\n return fn;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\n// the error is built on the first read of `error`: finalizing the issues and constructing the instance is most of a failing parse, and a caller that only branches on `success` never pays it. a getter in the literal keeps this small; the alternative, one shared accessor descriptor plus a hidden state slot, reads ~15% faster but costs ~75 B gzipped in every bundle\nfunction failure(Err, issues, ctx) {\n let error;\n return {\n success: false,\n get error() {\n if (!error) {\n error = new Err(issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n // finalizeIssue drops `input`, so the built error holds nothing; keeping the raw issues past this point pins the parsed value for the life of the result\n issues = undefined;\n ctx = undefined;\n }\n return error;\n },\n set error(e) {\n error = e;\n // a replacement makes the getter's branch unreachable, so the captures have to go here too\n issues = undefined;\n ctx = undefined;\n },\n };\n}\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length ? failure(_Err, result.issues, ctx) : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n// registry mirrors of the compiler's sentinels, so this module never imports the compiler\nconst COMPILE_INVALID = /* @__PURE__ */ Symbol.for(\"zod.compile.invalid\");\nconst COMPILE_FALLBACK = /* @__PURE__ */ Symbol.for(\"zod.compile.fallback\");\n// Deliberately tiny, because v8 will not inline a body carrying the fallback's object literals and throw. Everything that is not the compiled happy path lives in validateFallback, and that split is worth ~35% on a compiled schema.\nexport const validate = ((schema, value, _ctx) => {\n const validator = schema._zod.bag.validator;\n if (validator !== undefined) {\n if (validator(value) !== COMPILE_INVALID)\n return true;\n // a definite sentinel means the runtime would reject, so skip the re-parse; a ctx can still change the answer\n if (validator.definite === true && _ctx === undefined)\n return false;\n }\n return validateFallback(schema, value, _ctx);\n});\nfunction validateFallback(schema, value, _ctx) {\n const ctx = _ctx\n ? { ..._ctx, async: false, abortEarly: true }\n : { async: false, abortEarly: true };\n const fallbackRun = schema._zod.bag.fallbackRun;\n let result;\n if (fallbackRun) {\n // skip nested fast paths on the fallback, so user callbacks keep the at-most-twice bound\n ctx[COMPILE_FALLBACK] = true;\n result = fallbackRun({ value, issues: [] }, ctx);\n }\n else {\n result = schema._zod.run({ value, issues: [] }, ctx);\n }\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length === 0;\n}\n// no fast path: the compiler keeps async parses on the runtime, because a promise-returning callback that is not declared async compiles to a throw\nexport const validateAsync = async (schema, value, _ctx) => {\n const ctx = _ctx\n ? { ..._ctx, async: true, abortEarly: true }\n : { async: true, abortEarly: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length === 0;\n};\nexport const _encode = (_Err) => {\n const parse = _parse(_Err);\n const fn = (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return parse(schema, value, ctx, finalizeParams(fn, _params));\n };\n return fn;\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => {\n const parse = _parse(_Err);\n const fn = (schema, value, _ctx, _params) => {\n return parse(schema, value, _ctx, finalizeParams(fn, _params));\n };\n return fn;\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => {\n const parseAsync = _parseAsync(_Err);\n const fn = async (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return (await parseAsync(schema, value, ctx, finalizeParams(fn, _params)));\n };\n return fn;\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => {\n const parseAsync = _parseAsync(_Err);\n const fn = async (schema, value, _ctx, _params) => {\n return await parseAsync(schema, value, _ctx, finalizeParams(fn, _params));\n };\n return fn;\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","import * as util from \"./util.js\";\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const cuid = /^[cC][0-9a-z]{6,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-7][0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{25}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\nexport function nanoidOfLength(length) {\n return new RegExp(`^[a-zA-Z0-9_-]{${length}}$`);\n}\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?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/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[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/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[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// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\n// Single character class, not an alternation: the two properties overlap (U+1F9B0-U+1F9B3), so `(A|B)+` backtracks exponentially on a failed match. The leading lookahead then demands one anchor — a pictograph, a regional indicator, or the enclosing keycap — because `\\p{Emoji_Component}` on its own covers ASCII digits, `#`, `*`, ZWJ, variation selectors and skin tone modifiers, none of which is an emoji without a base.\nconst _emoji = `^(?=[\\\\s\\\\S]*[\\\\p{Extended_Pictographic}\\\\p{Regional_Indicator}\\\\u20E3])[\\\\p{Extended_Pictographic}\\\\p{Emoji_Component}]+$`;\nexport function emoji() {\n return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?: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])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){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}|:))$/;\nexport const mac = (delimiter) => {\n const escapedDelim = util.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nexport const cidrv4 = /^((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])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){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}|:))\\/(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\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^(?:[A-Za-z0-9_-]{4})*(?:[A-Za-z0-9_-]{2,3})?$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^(?=.{1,253}$)([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,63}$/;\nexport const httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces) E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nexport const e164 = /^\\+[1-9]\\d{6,14}$/;\n// Credit card shape: 12–19 digits, optionally separated by single spaces or single hyphens. ISO/IEC 7812 caps the PAN at 19 digits; 12 is the shortest issued length (Maestro).\nexport const creditCard = /^\\d(?:[ -]?\\d){11,18}$/;\n// ISO 4217 alpha codes from the SIX list, regenerated by scripts/update-iso-4217.ts\nexport const currencyCode = /^(?:AED|AFN|ALL|AMD|AOA|ARS|AUD|AWG|AZN|BAM|BBD|BDT|BHD|BIF|BMD|BND|BOB|BOV|BRL|BSD|BTN|BWP|BYN|BZD|CAD|CDF|CHE|CHF|CHW|CLF|CLP|CNY|COP|COU|CRC|CUP|CVE|CZK|DJF|DKK|DOP|DZD|EGP|ERN|ETB|EUR|FJD|FKP|GBP|GEL|GHS|GIP|GMD|GNF|GTQ|GYD|HKD|HNL|HTG|HUF|IDR|ILS|INR|IQD|IRR|ISK|JMD|JOD|JPY|KES|KGS|KHR|KMF|KPW|KRW|KWD|KYD|KZT|LAK|LBP|LKR|LRD|LSL|LYD|MAD|MDL|MGA|MKD|MMK|MNT|MOP|MRU|MUR|MVR|MWK|MXN|MXV|MYR|MZN|NAD|NGN|NIO|NOK|NPR|NZD|OMR|PAB|PEN|PGK|PHP|PKR|PLN|PYG|QAR|RON|RSD|RUB|RWF|SAR|SBD|SCR|SDG|SEK|SGD|SHP|SLE|SOS|SRD|SSP|STN|SVC|SYP|SZL|THB|TJS|TMT|TND|TOP|TRY|TTD|TWD|TZS|UAH|UGX|USD|USN|UYI|UYU|UYW|UZS|VED|VES|VND|VUV|WST|XAD|XAF|XAG|XAU|XBA|XBB|XBC|XBD|XCD|XCG|XDR|XOF|XPD|XPF|XPT|XSU|XTS|XUA|XXX|YER|ZAR|ZMW|ZWG)$/;\n// iban electronic format: 2-letter country, check digits 02-98 (the only values `98 - remainder` can produce), 11-30 bban characters\nexport const iban = /^[A-Z]{2}(?!00|01|99)\\d{2}[A-Z0-9]{11,30}$/;\nconst dateSource = `(?:(?:\\\\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])))`;\n/** Anchors a pattern source. The interpolation lives here rather than at the call site because\n * esbuild will not drop a `@__PURE__` call whose own argument interpolates a variable, but it\n * will drop `anchor(dateSource)`. Keeping it inline pinned `date` into every bundle. */\nfunction anchor(source) {\n return new RegExp(`^${source}$`);\n}\nexport const date = /*@__PURE__*/ anchor(dateSource);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : args.seconds\n ? `${hhmm}:[0-5]\\\\d(?:\\\\.\\\\d+)?`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nexport function time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n const opts = [\"Z\"];\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n // RFC 3339 mandates seconds wherever the time carries a `Z` or an offset, so only the unqualified form `local` adds may omit them\n const qualified = `${timeSource({ precision: args.precision, seconds: true })}(?:${opts.join(\"|\")})`;\n const timeRegex = args.local ? `${qualified}|${timeSource({ precision: args.precision })}` : qualified;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\n// the unbounded form of `string()` as a literal, so every plain string shares one instance instead of building its own\nexport const anyString = /^[\\s\\S]{0,}$/;\nexport const string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?$/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\n/** Default `when` for size-based checks: run only on non-nullish values with a `size`. */\nconst _whenHasSize = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.size !== undefined;\n};\n/** Default `when` for length-based checks: run only on non-nullish values with a `length`. */\nconst _whenHasLength = (payload) => {\n const val = payload.value;\n return !util.nullish(val) && val.length !== undefined;\n};\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin: numericOriginMap[typeof payload.value] ?? origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin: numericOriginMap[typeof payload.value] ?? origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? // `value % 0n` throws, and nothing is a multiple of zero — the number branch already fails this way via NaN\n def.value !== BigInt(0) && payload.value % def.value === BigInt(0)\n : util.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasSize);\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: util.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n inst._zod.check = (payload) => {\n const input = payload.value;\n const units = input.length;\n // Strings are measured in Unicode code points, not UTF-16 units. A code point is at most two units, so a string that already fits in units fits in code points; only an overflow has to be counted.\n const length = typeof input === \"string\" && units > def.maximum ? util.codePointLength(input) : units;\n if (length <= def.maximum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n inst._zod.check = (payload) => {\n const input = payload.value;\n const units = input.length;\n // A code point is one or two UTF-16 units, so fewer units than the floor can never reach it and twice the floor always clears it. Only in between is the exact count in doubt.\n const length = typeof input === \"string\" && units >= def.minimum && units < def.minimum * 2\n ? util.codePointLength(input)\n : units;\n if (length >= def.minimum)\n return;\n const origin = util.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = _whenHasLength);\n inst._zod.check = (payload) => {\n const input = payload.value;\n const units = input.length;\n // A code point is one or two UTF-16 units, so outside `[length, length * 2]` units the target is missed either way — and missed in the same direction in both measures.\n const length = typeof input === \"string\" && units >= def.length && units <= def.length * 2\n ? util.codePointLength(input)\n : units;\n if (length === def.length)\n return;\n const origin = util.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = util.escapeRegex(def.includes);\n // `String.prototype.includes(sub, position)` matches `sub` at `position`\n // OR LATER, so the pattern must allow at least `position` leading chars\n // (`{N,}`), not exactly `position` chars (`{N}`).\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position},}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(property, result.issues));\n }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nexport const $ZodCheckProperties = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperties\", (inst, def) => {\n $ZodCheck.init(inst, def);\n util.hide(inst, Symbol.iterator, function* () {\n yield inst;\n });\n // key and schema snapshotted together: reading one live and the other cached lets a later mutation of the caller's shape object pair a stale key with a missing schema\n let entries;\n inst._zod.check = (payload) => {\n // the base schema already typed the value, so only a nullish one is rejected here: the properties read on a primitive too, matching z.property() on a string's length\n if (payload.value == null) {\n payload.issues.push({ expected: \"object\", code: \"invalid_type\", input: payload.value, inst });\n return undefined;\n }\n entries ?? (entries = Reflect.ownKeys(def.shape).map((key) => [key, def.shape[key]]));\n const input = payload.value;\n let proms;\n for (const [key, schema] of entries) {\n const result = schema._zod.run({ value: input[key], issues: [] }, {});\n if (result instanceof Promise) {\n proms ?? (proms = []);\n proms.push(result.then((result) => handleCheckPropertyResult(result, payload, key)));\n }\n else {\n handleCheckPropertyResult(result, payload, key);\n }\n }\n if (proms)\n return Promise.all(proms).then(() => undefined);\n return undefined;\n };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n","export class Doc {\n constructor(args = [], closed = {}) {\n this.content = [];\n this.indent = 0;\n this.args = args;\n this.closed = closed;\n }\n // the compiler catches a child's throw and keeps writing into this doc, so the indent has to unwind with it\n indented(fn) {\n this.indent += 1;\n try {\n fn(this);\n }\n finally {\n this.indent -= 1;\n }\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const content = this?.content ?? [``];\n const factory = new F(...Object.keys(this.closed), `return function (${this.args.join(\", \")}) {\\n${content.join(\"\\n\")}\\n};`);\n return factory(...Object.values(this.closed));\n }\n}\n","export const version = {\n major: 4,\n minor: 6,\n patch: 7,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = version;\n const defChecks = inst._zod.def.checks;\n // if inst is itself a checks.$ZodCheck, run it as a check\n const checks = inst._zod.traits.has(\"$ZodCheck\")\n ? [inst, ...(defChecks ?? [])]\n : defChecks?.length\n ? [...defChecks]\n : [];\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n if (payload.memo)\n return payload;\n let isAborted = util.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n if (util.explicitlyAborted(payload))\n continue;\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new core.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n util.attachSchema(payload.issues, currLen, inst);\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n util.attachSchema(payload.issues, currLen, inst);\n if (!isAborted)\n isAborted = util.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (util.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new core.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n}, {\n // Wrappers extend this by installing a richer factory over it; reading it eagerly would defeat the laziness.\n get \"~standard\"() {\n return util.hide(this, \"~standard\", standardProps(this));\n },\n set \"~standard\"(value) {\n util.own(this, \"~standard\", value);\n },\n});\n/** The Standard Schema surface for `inst`. Shared so wrappers can extend it without forcing it. */\n// a Standard Schema result only reports issues, so a failure finalizes them straight off the raw payload: no ZodError, and no lazy result to read through\nconst toStandardResult = (r, ctx) => r.issues.length ? { issues: r.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())) } : { value: r.value };\nasync function validateAsync(inst, value) {\n const ctx = { async: true };\n return toStandardResult((await inst._zod.run({ value, issues: [] }, ctx)), ctx);\n}\nexport function standardProps(inst) {\n return {\n validate: (value) => {\n const ctx = { async: false };\n try {\n const r = inst._zod.run({ value, issues: [] }, ctx);\n if (!(r instanceof Promise))\n return toStandardResult(r, ctx);\n }\n catch (_) { }\n // async function so a synchronously throwing check rejects instead of escaping validate\n return validateAsync(inst, value);\n },\n vendor: \"zod\",\n version: 1,\n };\n}\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n // a format's own pattern, else unbounded; a template literal derives the check-aware form itself\n inst._zod.pattern = def.pattern ?? regexes.anyString;\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n checks.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.guid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = regexes.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = regexes.uuid());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.email);\n $ZodStringFormat.init(inst, def);\n});\n/** The `://` guard rejected the input before the URL constructor saw it. */\nexport const URL_BAD_FORMAT = 1;\n/** The URL parser rejected the input. */\nexport const URL_UNPARSEABLE = 2;\nexport function canParseURL(input) {\n try {\n if (typeof URL !== \"undefined\" && typeof URL.canParse === \"function\")\n return URL.canParse(input);\n new URL(input);\n return true;\n }\n catch {\n return false;\n }\n}\nexport function validateURL(trimmed, def) {\n if (!(\"normalize\" in def) && !(\"hostname\" in def) && !(\"protocol\" in def)) {\n return canParseURL(trimmed) || URL_UNPARSEABLE;\n }\n return parseURLObject(trimmed, def);\n}\n/** Parses a URL while preserving the non-normalizing HTTP guard. */\nexport function parseURLObject(trimmed, def) {\n // When normalize is off, require :// for http/https URLs. This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n if (!def.normalize && def.protocol?.source === regexes.httpProtocol.source && !/^https?:\\/\\//i.test(trimmed)) {\n return URL_BAD_FORMAT;\n }\n try {\n if (typeof URL !== \"undefined\") {\n const URLStatic = URL;\n if (typeof URLStatic.parse === \"function\")\n return URLStatic.parse(trimmed) ?? URL_UNPARSEABLE;\n }\n // @ts-ignore\n return new URL(trimmed);\n }\n catch {\n return URL_UNPARSEABLE;\n }\n}\nconst asciiTabOrNewline = /[\\t\\n\\r]/g;\n/** The URL parser deletes every ASCII tab, LF and CR from its input before it parses, so `new URL(\"https://exa\\nmple.com\")` reports on `example.com`. Applying the same deletion to the returned value closes the half of that divergence which can move the host; the parser's other rewrite, stripping C0 controls at the edges, cannot. */\nexport function stripTabAndNewline(value) {\n return value.replace(asciiTabOrNewline, \"\");\n}\nexport function urlHostnameOk(url, hostname) {\n hostname.lastIndex = 0;\n return hostname.test(url.hostname);\n}\nexport function urlProtocolOk(url, protocol) {\n protocol.lastIndex = 0;\n return protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol);\n}\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n const url = validateURL(trimmed, def);\n if (url === URL_BAD_FORMAT) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid URL format\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n if (url === URL_UNPARSEABLE) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n if (url === true) {\n payload.value = stripTabAndNewline(trimmed);\n return;\n }\n if (def.hostname && !urlHostnameOk(url, def.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n if (def.protocol && !urlProtocolOk(url, def.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n // Set the output value based on normalize flag\n payload.value = def.normalize ? url.href : stripTabAndNewline(trimmed);\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.emoji());\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n if (def.length !== undefined && (!Number.isInteger(def.length) || def.length < 1))\n throw new Error(`Invalid nanoid length: ${def.length}`);\n def.pattern ?? (def.pattern = def.length === undefined ? regexes.nanoid : regexes.nanoidOfLength(def.length));\n $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ulid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.xid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.date);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.time(def));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.duration);\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv4);\n $ZodStringFormat.init(inst, def);\n});\n/** An IPv6 address is written with hex digits, colons and dots, and nothing else. The guard is what makes the check below an IPv6 check: `new URL(\"http://[...]\")` parses an authority, not an address, so `@` and `\\` re-delimit it and `\"::@1\\\\\"` validates against the host `0.0.0.1`. The URL parser also deletes ASCII tab, LF and CR rather than failing, which is how `\"::1\\n\"` validated as `::1`. */\nconst ipv6Alphabet = /^[0-9a-fA-F:.]+$/;\nexport function isValidIPv6(value) {\n if (!ipv6Alphabet.test(value))\n return false;\n return canParseURL(`http://[${value}]`);\n}\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (!isValidIPv6(payload.value)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nexport const $ZodMAC = /*@__PURE__*/ core.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nexport function isValidCIDRv6(value) {\n const parts = value.split(\"/\");\n if (parts.length !== 2)\n return false;\n const [address, prefix] = parts;\n if (!prefix)\n return false;\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n return false;\n if (prefixNum < 0 || prefixNum > 128)\n return false;\n return isValidIPv6(address);\n}\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (!isValidCIDRv6(payload.value)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nexport function isValidBase64(data) {\n if (data === \"\")\n return true;\n // atob ignores whitespace, so reject it up front.\n if (/\\s/.test(data))\n return false;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\n// lax on purpose: the quantified regexes.base64 overflows the regex stack on multi-MB input and its leading ^$| alternation leaks through template-literal composition; isValidBase64 enforces length and padding\nexport const base64Charset = /^[0-9a-zA-Z+/]*={0,2}$/;\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = base64Charset);\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64URL //////////////////////////////\n// lax on purpose: the quantified regexes.base64url overflows the regex stack on multi-MB input; isValidBase64 enforces length on the padded string\nexport const base64urlCharset = /^[A-Za-z0-9_-]*$/;\nexport function isValidBase64URL(data) {\n if (!base64urlCharset.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = base64urlCharset);\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = regexes.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodCreditCard //////////////////////////////\nconst CC_SANITIZE = /[- ]/g;\n/** Luhn checksum on a digit-only string. Adapted from valibot (MIT). */\nfunction isLuhnAlgo(digits) {\n let length = digits.length;\n let bit = 1;\n let sum = 0;\n while (length) {\n const value = digits.charCodeAt(--length) - 48;\n bit ^= 1;\n sum += bit ? [0, 2, 4, 6, 8, 1, 3, 5, 7, 9][value] : value;\n }\n return sum % 10 === 0;\n}\nexport function isValidCreditCard(input) {\n if (!regexes.creditCard.test(input))\n return false;\n return isLuhnAlgo(input.replace(CC_SANITIZE, \"\"));\n}\nexport const $ZodCreditCard = /*@__PURE__*/ core.$constructor(\"$ZodCreditCard\", (inst, def) => {\n // Shape only — the Luhn check below is not expressible as a pattern, so consumers of `pattern` (JSON Schema, template literals) get the length and separator rules alone.\n def.pattern ?? (def.pattern = regexes.creditCard);\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidCreditCard(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"credit_card\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodIBAN //////////////////////////////\n// iso 7064 mod 97-10 checksum without BigInt\nfunction isIso7064Mod97(iban) {\n let remainder = 0;\n const len = iban.length;\n for (let i = 4; i < len; i++) {\n const code = iban.charCodeAt(i);\n remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n }\n for (let i = 0; i < 4; i++) {\n const code = iban.charCodeAt(i);\n remainder = (code >= 65 ? remainder * 100 + (code - 55) : remainder * 10 + (code - 48)) % 97;\n }\n return remainder === 1;\n}\nexport function isValidIBAN(input) {\n if (!regexes.iban.test(input))\n return false;\n return isIso7064Mod97(input);\n}\nexport const $ZodIBAN = /*@__PURE__*/ core.$constructor(\"$ZodIBAN\", (inst, def) => {\n // shape only — checksum is not expressible as a pattern\n def.pattern ?? (def.pattern = regexes.iban);\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidIBAN(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"iban\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodJWT //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? String(input)\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n checks.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n checks.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = regexes.null;\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\n// an oversized container fails its leading size checks before any element is parsed\nfunction capSize(inst, size) {\n const caps = util.sizeCaps(inst._zod.def.checks);\n if (!caps.length)\n return;\n const cap = Math.min(...caps.map((c) => c[0]));\n const parse = inst._zod.parse;\n inst._zod.parse = (payload, ctx) => {\n const n = size(payload.value);\n if (n > cap && !ctx?.skipChecks && ctx?.direction !== \"backward\") {\n for (const [max, ch] of util.sizeCaps(inst._zod.def.checks)) {\n if (n > max && ch._zod.def.when(payload)) {\n const start = payload.issues.length;\n ch._zod.check(payload);\n // the value is still the raw input, so no later check may read it\n payload.issues[start].continue = false;\n util.attachSchema(payload.issues, start, inst);\n return payload;\n }\n }\n }\n return parse(payload, ctx);\n };\n}\nconst arraySize = (input) => (Array.isArray(input) ? input.length : -1);\nconst mapSize = (input) => (input instanceof Map ? input.size : -1);\nconst setSize = (input) => (input instanceof Set ? input.size : -1);\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = memo ? memo.alloc(inst, payload, Array(input.length), ctx) : Array(input.length);\n const proms = [];\n const abortEarly = ctx?.abortEarly;\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n // the element's payload is authoritative here, since handleArrayResult forwards every issue; an object's is not, because it drops a failed absent optional\n if (abortEarly && result.issues.length !== 0 && util.aborted(result))\n break;\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n capSize(inst, arraySize);\n});\nfunction handlePropertyResult(result, final, key, input, optin, optout) {\n const isPresent = key in input;\n const isOptionalOut = optout === \"optional\";\n // The middle rung means \"absence permitted, nothing supplied in its place\", so an absent key contributes nothing — whatever the schema made of `undefined` is invented, not substituted. Only `optional` reaches this with a value: `defaulted` substitutes, and a schema that isn't optional-out has to keep the key.\n if (!isPresent && isOptionalOut && optin === \"optional\") {\n return;\n }\n if (result.issues.length) {\n // For optional-in/out schemas, ignore errors on absent keys.\n if (optin !== undefined && isOptionalOut && !isPresent) {\n return;\n }\n final.issues.push(...util.prefixIssues(key, result.issues));\n }\n if (!isPresent && optin === undefined) {\n if (!result.issues.length) {\n final.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [key],\n });\n }\n return;\n }\n if (result.value === undefined) {\n if (isPresent || (optin === \"defaulted\" && !isOptionalOut)) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\n// one shared instance; a fresh [] per schema cost 56 bytes retained\nconst NO_SYMBOL_KEYS = [];\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n const ownSymbols = Object.getOwnPropertySymbols(def.shape);\n const symbolKeys = ownSymbols.length ? ownSymbols : NO_SYMBOL_KEYS;\n // aliases `keys` when there are no symbols, so a string-only shape keeps one array\n const allKeys = symbolKeys.length ? [...keys, ...symbolKeys] : keys;\n for (const k of allKeys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${String(k)}\": expected a Zod schema`);\n }\n }\n const okeys = util.optionalKeys(def.shape);\n return {\n ...def,\n allKeys,\n symbolKeys,\n // string-only: handleCatchall matches it against `for...in`, which never yields a symbol\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst, abortEarly) {\n const unrecognized = [];\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const optin = _catchall.optin;\n const optout = _catchall.optout;\n // starts at 0, not the current length: the shape phase already ran and may have aborted\n let seen = 0;\n for (const key in input) {\n if (abortEarly && payload.issues.length !== seen) {\n if (util.aborted(payload, seen))\n break;\n seen = payload.issues.length;\n }\n // Must precede the __proto__ branch: a declared key is not unrecognized, even though the shape loop deliberately strips __proto__ from the parsed output.\n if (keySet.has(key))\n continue;\n // Don't copy an undeclared __proto__ into the result; assignment to a plain {} would replace the result prototype. But in strict mode it is still an unknown key, so report it before skipping.\n if (key === \"__proto__\") {\n if (t === \"never\")\n unrecognized.push(key);\n continue;\n }\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n }\n else {\n handlePropertyResult(r, payload, key, input, optin, optout);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n // Describes the shape of the input, not the validity of the parsed value, so it never aborts. The parse still fails; the schema's own checks just get to run first, and an enclosing intersection can reconcile the key against a sibling operand.\n continue: true,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n // a cloned def carries its source's accessor, which knows the shape it answers from; adopting that keeps the clone's keys readable without running it\n const sh = desc?.get ? desc.get.raw : (def.shape ?? {});\n if (sh) {\n // Freezes the shape on first read, so its getters resolve once and every later read sees the same schemas.\n const get = () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", { value: newSh });\n get.raw = newSh;\n return newSh;\n };\n get.raw = sh;\n Object.defineProperty(def, \"shape\", { get });\n }\n const _normalized = util.cached(() => normalizeDef(def));\n util.defineLazyInternal(inst, \"propValues\", (zod) => {\n const shape = zod.def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n if (!Object.prototype.hasOwnProperty.call(propValues, key)) {\n util.assignProp(propValues, key, new Set());\n }\n for (const v of field.values)\n propValues[key].add(v);\n // An omittable slot reads back as undefined at a discriminator lookup, so it has to claim undefined: two options that can both omit the key are not discriminable on it.\n if (field.optin !== undefined)\n propValues[key].add(undefined);\n }\n }\n return propValues;\n });\n const isObject = util.isObject;\n const catchall = def.catchall;\n let value;\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n const proms = [];\n const shape = value.shape;\n const abortEarly = ctx?.abortEarly;\n let seen = payload.issues.length;\n for (const key of value.allKeys) {\n if (abortEarly && payload.issues.length !== seen) {\n if (util.aborted(payload, seen))\n break;\n seen = payload.issues.length;\n }\n if (key === \"__proto__\")\n continue;\n const el = shape[key];\n const optin = el._zod.optin;\n const optout = el._zod.optout;\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, optin, optout)));\n }\n else {\n handlePropertyResult(r, payload, key, input, optin, optout);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst, abortEarly === true);\n };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = util.cached(() => normalizeDef(def));\n const memo = core.globalConfig.memoizer;\n const generateFastpass = (shape) => {\n const normalized = _normalized.value;\n const syms = normalized.symbolKeys;\n // a symbol has no source literal, so it is read as `syms[i]` off the closed-over scope\n const doc = new Doc([\"payload\", \"ctx\"], { shape, inst, memo, syms });\n const parseStr = (k) => `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n // prefixes in place, like util.prefixIssues. newResult must land before the early return: a catchall runs after this and would otherwise write onto the caller's input\n const prefixStr = (id, k) => `\n let ${id}_ab = false;\n for (let i = 0; i < ${id}.issues.length; i++) {\n const iss = ${id}.issues[i];\n iss.path = iss.path ? [${k}, ...iss.path] : [${k}];\n payload.issues.push(iss);\n if (iss.continue !== true) ${id}_ab = true;\n }\n if (${id}_ab && ctx && ctx.abortEarly) {\n payload.value = newResult;\n return payload;\n }`;\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.allKeys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(memo ? `const newResult = memo.alloc(inst, payload, {}, ctx);` : `const newResult = {};`);\n for (const key of normalized.allKeys) {\n if (key === \"__proto__\")\n continue;\n const id = ids[key];\n const k = typeof key === \"symbol\" ? `syms[${syms.indexOf(key)}]` : util.esc(key);\n const isPresent = `${k} in input`;\n const schema = shape[key];\n const optin = schema?._zod?.optin;\n const isOptionalIn = optin !== undefined;\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(k)};`);\n if (isOptionalIn && isOptionalOut) {\n // For optional-in/out schemas, ignore errors on absent keys — and, like the interpreted path, drop the value produced alongside them. The middle rung goes further: it permits absence without supplying anything in its place, so an absent key contributes nothing at all.\n const assign = optin === \"optional\" ? `${id}_present` : `${id}.value !== undefined || ${id}_present`;\n doc.write(`\n const ${id}_present = ${isPresent};\n if (!${id}.issues.length || ${id}_present) {\n if (${id}.issues.length) {${prefixStr(id, k)}\n }\n\n if (${assign}) {\n newResult[${k}] = ${id}.value;\n }\n }\n\n `);\n }\n else if (!isOptionalIn) {\n doc.write(`\n const ${id}_present = ${isPresent};\n if (${id}.issues.length) {${prefixStr(id, k)}\n }\n if (!${id}_present && !${id}.issues.length) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [${k}]\n });\n if (ctx && ctx.abortEarly) {\n payload.value = newResult;\n return payload;\n }\n }\n\n if (${id}_present) {\n newResult[${k}] = ${id}.value;\n }\n\n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {${prefixStr(id, k)}\n }\n `);\n if (optin === \"defaulted\") {\n doc.write(`newResult[${k}] = ${id}.value;`);\n }\n else {\n doc.write(`\n if (${id}.value !== undefined || ${isPresent}) {\n newResult[${k}] = ${id}.value;\n }\n `);\n }\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n // closing `shape` in is what pays: turbofan specializes the parser against that one shape object, so every `shape[k]._zod.run` folds to a known callee. as a parameter it stays a generic load and measures 13% slower even with the forwarding frame gone\n return doc.compile();\n };\n let fastpass;\n const isObject = util.isObject;\n const jit = !core.globalConfig.jitless;\n const allowsEval = util.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst, ctx?.abortEarly === true);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !util.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.options.some((o) => o._zod.optin === \"defaulted\")\n ? \"defaulted\"\n : zod.def.options.some((o) => o._zod.optin !== undefined)\n ? \"optional\"\n : undefined);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n util.defineLazyInternal(inst, \"values\", (zod) => {\n if (zod.def.options.every((o) => o._zod.values)) {\n return new Set(zod.def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n if (zod.def.options.every((o) => o._zod.pattern)) {\n const patterns = zod.def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const matches = [];\n for (let i = 0; i < results.length; i++) {\n if (results[i].issues.length === 0)\n matches.push(i);\n }\n if (matches.length === 1) {\n final.value = results[matches[0]].value;\n return final;\n }\n if (matches.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n matches,\n });\n }\n return final;\n}\nexport const $ZodXor = /*@__PURE__*/ core.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\n/** Returns the option whose discriminator claims `value`, or throws if ambiguous. */\nexport function getDiscriminatedOption(union, value) {\n const internals = union._zod;\n let map = internals.bag.optionsMap;\n if (!map) {\n map = discriminatorMap(internals.def);\n internals.bag.optionsMap = map;\n }\n const option = map.get(value);\n if (option === null)\n throw new Error(`Ambiguous discriminator value \"${String(value)}\"`);\n return option;\n}\nfunction discriminatorMap(def) {\n const map = new Map();\n for (const option of def.options) {\n const values = option._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const value of values) {\n if (map.has(value)) {\n if (value !== undefined)\n throw new Error(`Duplicate discriminator value \"${String(value)}\"`);\n // keep the collision marked so a later member cannot reclaim it\n map.set(value, null);\n }\n else {\n map.set(value, option);\n }\n }\n }\n return map;\n}\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n util.defineLazyInternal(inst, \"propValues\", (zod) => {\n const propValues = {};\n let undefinedCount = 0;\n for (const option of zod.def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${zod.def.options.indexOf(option)}\"`);\n if (pv[zod.def.discriminator]?.has(undefined))\n undefinedCount++;\n for (const [k, v] of Object.entries(pv)) {\n if (!Object.prototype.hasOwnProperty.call(propValues, k)) {\n util.assignProp(propValues, k, new Set());\n }\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n if (!zod.def.unionFallback && undefinedCount > 1)\n propValues[zod.def.discriminator]?.delete(undefined);\n return propValues;\n });\n // Checked now rather than in the lookup map below, so an option that lacks the discriminator fails at the `discriminatedUnion` call instead of on the first object parsed. Options whose shape cannot be enumerated without resolving it — pipes and lazies — are left to the map.\n def.options.forEach((option, i) => {\n const propShape = util.rawShape(option._zod.def);\n if (propShape && !Object.prototype.hasOwnProperty.call(propShape, def.discriminator)) {\n throw new Error(`Invalid discriminated union option at index \"${i}\"`);\n }\n });\n const disc = util.cached(() => discriminatorMap(def));\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const value = input?.[def.discriminator];\n const opt = disc.value.get(value);\n // forward metadata cannot choose an encoder for an absent tag\n if (opt && (value !== undefined || ctx.direction !== \"backward\")) {\n return opt._zod.run(payload, ctx);\n }\n // Fall back to union matching when the fast discriminator path fails:\n // - explicitly enabled via unionFallback, or\n // - during backward direction (encode), since codec-based discriminators have different values in forward vs backward directions\n if (def.unionFallback || ctx.direction === \"backward\") {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n options: Array.from(disc.value.keys()).filter((value) => disc.value.get(value) !== null),\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nexport function mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (util.isPlainObject(a) && util.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n if (Object.prototype.hasOwnProperty.call(newObj, \"__proto__\"))\n delete newObj.__proto__;\n for (const key of sharedKeys) {\n if (key === \"__proto__\")\n continue;\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\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 {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) reject each key. A key rejection is reported only when BOTH sides reject it, so a key owned by one branch survives the other's key schema. strictObject reports these as unrecognized_keys; a record with an open key schema reports one invalid_key per key.\n const unrecKeys = new Map();\n let unrecIssue;\n const keyIssues = new Map();\n const collect = (iss, side) => {\n let keys;\n if (iss.code === \"unrecognized_keys\" && !iss.path?.length) {\n unrecIssue ?? (unrecIssue = iss);\n keys = iss.keys;\n }\n else if (iss.code === \"invalid_key\" && iss.origin === \"record\" && iss.path?.length === 1) {\n const k = String(iss.path[0]);\n if (!keyIssues.has(k))\n keyIssues.set(k, iss);\n keys = [k];\n }\n else {\n return false;\n }\n for (const k of keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k)[side] = true;\n }\n return true;\n };\n for (const iss of left.issues) {\n if (!collect(iss, \"l\"))\n result.issues.push(iss);\n }\n for (const iss of right.issues) {\n if (!collect(iss, \"r\"))\n result.issues.push(iss);\n }\n // Report only keys rejected by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length) {\n const aggregated = unrecIssue ? bothKeys.filter((k) => unrecIssue.keys.includes(k)) : [];\n if (aggregated.length)\n result.issues.push({ ...unrecIssue, keys: aggregated });\n for (const k of bothKeys) {\n if (!aggregated.includes(k) && keyIssues.has(k))\n result.issues.push(keyIssues.get(k));\n }\n }\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n if (util.aborted(result))\n return result;\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = memo ? memo.alloc(inst, payload, [], ctx) : [];\n const proms = [];\n const optinStart = getTupleOptStart(items, \"optin\");\n const optoutStart = getTupleOptStart(items, \"optout\");\n if (!def.rest) {\n if (input.length < optinStart) {\n payload.issues.push({\n code: \"too_small\",\n minimum: optinStart,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n if (input.length > items.length) {\n payload.issues.push({\n code: \"too_big\",\n maximum: items.length,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n }\n }\n // Run every item in parallel, collecting results into an indexed array. The post-processing in `handleTupleResults` walks them in order so it can decide whether an absent optional-output error can truncate the tail or must be reported to preserve required output.\n const itemResults = new Array(items.length);\n // only tracked when there is a rest loop to skip\n const abortEarly = def.rest ? ctx?.abortEarly : undefined;\n let itemAborted = false;\n for (let i = 0; i < items.length; i++) {\n const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((rr) => {\n itemResults[i] = rr;\n }));\n }\n else {\n itemResults[i] = r;\n if (abortEarly && !itemAborted && r.issues.length)\n itemAborted = util.aborted(r);\n }\n }\n // sound because rest is non-empty exactly when every fixed index is present, the one case handleTupleResults cannot discard an item's issues\n if (def.rest && !itemAborted) {\n let i = items.length - 1;\n const rest = input.slice(items.length);\n let seen = payload.issues.length;\n for (const el of rest) {\n if (abortEarly && payload.issues.length !== seen) {\n if (util.aborted(payload, seen))\n break;\n seen = payload.issues.length;\n }\n i++;\n const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n }\n return handleTupleResults(itemResults, payload, items, input, optoutStart);\n };\n});\nfunction getTupleOptStart(items, key) {\n for (let i = items.length - 1; i >= 0; i--) {\n // optin is a three-rung ladder so any rung above `undefined` permits an absent slot; optout stays two-valued.\n const omittable = key === \"optin\" ? items[i]._zod.optin !== undefined : items[i]._zod.optout === \"optional\";\n if (!omittable)\n return i + 1;\n }\n return 0;\n}\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(...util.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional rule, but only after `optoutStart`: the first index where the output tuple tail can be absent.\n for (let i = 0; i < items.length; i++) {\n const r = itemResults[i];\n const isPresent = i < input.length;\n // The array analog of `handlePropertyResult`'s absent-key early return: the middle rung permits absence without supplying anything in its place, so the tail truncates here instead of materializing whatever the item made of `undefined`.\n if (!isPresent && i >= optoutStart && items[i]._zod.optin === \"optional\") {\n final.value.length = i;\n break;\n }\n if (r.issues.length) {\n if (!isPresent && i >= optoutStart) {\n final.value.length = i;\n break;\n }\n final.issues.push(...util.prefixIssues(i, r.issues));\n }\n final.value[i] = r.value;\n }\n // Drop trailing slots that produced `undefined` for absent input\n // (the array analog of an absent optional key on an object). The\n // `i >= input.length` floor is critical: an explicit `undefined`\n // *inside* the input must be preserved even when the schema is\n // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n // explicit undefined value).\n for (let i = final.value.length - 1; i >= input.length; i--) {\n if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n final.value.length = i;\n }\n else {\n break;\n }\n }\n return final;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!util.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n // no guard in either loop below: a record's invalid_key aborts but an enclosing intersection can reconcile it, so a stopped loop hides keys the sibling does not own and the intersection then rejects nothing\n const proms = [];\n const values = def.keyType._zod.values;\n if (values && !def.partial) {\n payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n // A declared __proto__ is stripped but is not an unrecognized key.\n if (key === \"__proto__\")\n continue;\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (keyResult.issues.length) {\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n continue;\n }\n const outKey = keyResult.value;\n if (outKey === \"__proto__\")\n continue;\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n if (def.mode === \"loose\") {\n // skip __proto__ so it can't replace the result prototype via the assignment setter on the plain {} we build into\n if (key === \"__proto__\")\n continue;\n payload.value[key] = input[key];\n }\n else {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n continue: true,\n });\n }\n }\n else {\n payload.value = memo ? memo.alloc(inst, payload, {}, ctx) : {};\n // An enumerable key schema declares which keys the record owns, so a key outside the set is unrecognized. A non-enumerable one (regex, refine) is a constraint every key must satisfy, so a failing key is invalid. Only the former is reconcilable against the other side of an intersection.\n let unrecognized;\n // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n if (!Object.prototype.propertyIsEnumerable.call(input, key))\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key). This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && regexes.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else if (values) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n // the guard above tests the raw input key, but the key schema can normalize an ordinary key into __proto__; re-check the key we actually write under\n const outKey = keyResult.value;\n if (outKey === \"__proto__\")\n continue;\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(...util.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n continue: true,\n });\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = memo ? memo.alloc(inst, payload, new Map(), ctx) : new Map();\n const abortEarly = ctx?.abortEarly;\n let seen = payload.issues.length;\n for (const [key, value] of input) {\n if (abortEarly && payload.issues.length !== seen) {\n if (util.aborted(payload, seen))\n break;\n seen = payload.issues.length;\n }\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n capSize(inst, mapSize);\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (util.propertyKeyTypes.has(typeof key)) {\n final.issues.push(...util.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n const memo = core.globalConfig.memoizer;\n memo?.attach(inst);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = memo ? memo.alloc(inst, payload, new Set(), ctx) : new Set();\n const abortEarly = ctx?.abortEarly;\n let seen = payload.issues.length;\n for (const item of input) {\n if (abortEarly && payload.issues.length !== seen) {\n if (util.aborted(payload, seen))\n break;\n seen = payload.issues.length;\n }\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n capSize(inst, setSize);\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = util.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n const patternValues = util.getEnumValues(zod.def.entries).filter((k) => util.propertyKeyTypes.has(typeof k));\n // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n return new RegExp(patternValues.length ? `^(${patternValues.map((o) => util.escapeRegex(o.toString())).join(\"|\")})$` : \"^[^\\\\s\\\\S]$\");\n });\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = new Set(def.values);\n inst._zod.values = values;\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n const vals = zod.def.values;\n // unmatchable fallback, RE2-safe: an empty alternation would compile to /^()$/, which matches \"\"\n return new RegExp(vals.length\n ? `^(${vals\n .map((o) => typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o))\n .join(\"|\")})$`\n : \"^[^\\\\s\\\\S]$\");\n });\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n core.globalConfig.memoizer?.guard(inst);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n payload.value = _out;\n return payload;\n };\n});\nfunction handleOptionalResult(payload, result) {\n // A substituting schema that still failed has no usable answer; yield undefined. Its issues are simply dropped: it ran on a payload of its own, so there is no shared array to truncate and nothing of the caller's to lose with it.\n payload.value = result.issues.length ? undefined : result.value;\n return payload;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n // .optional() propagates absence rather than substituting for it, so a defaulted inner keeps its rung.\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n inst._zod.optout = \"optional\";\n util.defineLazyInternal(inst, \"values\", (zod) => {\n const values = zod.def.innerType._zod.values;\n return values ? new Set([...values, undefined]) : undefined;\n });\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n const pattern = zod.def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (payload.value === undefined) {\n // Only the top rung substitutes a value for absence; everything else leaves it intact, which is what .optional() means.\n if (def.innerType._zod.optin !== \"defaulted\")\n return payload;\n // Its own payload, for the same reason $ZodCatch gets one: a pipe forwards an unrecognized key through the caller's issues array, and this must not read that as the substituting schema failing and drop it.\n const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n if (result instanceof Promise)\n return result.then((result) => handleOptionalResult(payload, result));\n return handleOptionalResult(payload, result);\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodExactOptional = /*@__PURE__*/ core.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n util.defineLazyInternal(inst, \"pattern\", (zod) => zod.def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n util.defineLazyInternal(inst, \"pattern\", (zod) => {\n const pattern = zod.def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n util.defineLazyInternal(inst, \"values\", (zod) => {\n return zod.def.innerType._zod.values ? new Set([...zod.def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"defaulted\";\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"defaulted\";\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"values\", (zod) => {\n const v = zod.def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nfunction handleCatchResult(payload, result, def, ctx) {\n if (!result.issues.length) {\n payload.value = result.value;\n // The value carries up, so the flag describing it has to carry with it: a back-edge into a node still being parsed must not be frozen by an enclosing readonly, and its checks belong to the node itself. Guarded so the ordinary case adds no own property.\n if (result.memo)\n payload.memo = true;\n return payload;\n }\n // Spread the inner's own payload, not ours: `value` has to stay the input the catch was handed, and the inner ran on a payload of its own so its issues are already private to this call.\n payload.value = def.catchValue({\n ...result,\n value: payload.value,\n error: {\n issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n },\n input: payload.value,\n });\n return payload;\n}\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType._zod.optin === \"defaulted\" ? \"defaulted\" : \"optional\");\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType._zod.optout);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run({ value: payload.value, issues: [] }, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleCatchResult(payload, result, def, ctx));\n }\n return handleCatchResult(payload, result, def, ctx);\n };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n // Any issue stops the pipe, so a failing refinement never feeds its transform. An unrecognized key is the exception: it describes the input's extra properties, not the value being piped, and an enclosing intersection may yet reconcile it.\n if (left.issues.some((iss) => iss.code !== \"unrecognized_keys\")) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.in._zod.values);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.in._zod.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.out._zod.optout);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodPreprocess = /*@__PURE__*/ core.$constructor(\"$ZodPreprocess\", (inst, def) => {\n $ZodPipe.init(inst, def);\n});\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.def.innerType._zod.propValues);\n util.defineLazyInternal(inst, \"values\", (zod) => zod.def.innerType._zod.values);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.def.innerType?._zod?.optin);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n // A repeat visit hands back a node that is still being built; freezing it here would make the rest of its keys fail to assign.\n if (!payload.memo)\n payload.value = Object.freeze(payload.value);\n return payload;\n}\n// a leaf's pattern source with its own checks folded in: the last pattern-carrying check wins, else length bounds narrow the catch-all, else an integer format narrows the number form. the fold lives here instead of on `_zod.pattern` so a bundle without template literals never pays for it\nfunction leafPattern(schema) {\n const def = schema._zod.def;\n let pattern = def.pattern;\n let isInt = !!def.format?.includes(\"int\");\n let minimum;\n let maximum;\n for (const ch of def.checks ?? []) {\n const d = ch._zod.def;\n if (d.pattern)\n pattern = d.pattern;\n isInt || (isInt = !!d.format?.includes(\"int\"));\n const lo = d.minimum ?? d.length;\n const hi = d.maximum ?? d.length;\n if (lo !== undefined && (minimum === undefined || lo > minimum))\n minimum = lo;\n if (hi !== undefined && (maximum === undefined || hi < maximum))\n maximum = hi;\n }\n if (pattern)\n return pattern.source;\n // an empty range matches nothing at runtime, and `{8,5}` is not a legal quantifier\n if (minimum !== undefined && maximum !== undefined && minimum > maximum)\n return \"(?!)\";\n if (minimum !== undefined || maximum !== undefined)\n return regexes.string({ minimum, maximum }).source;\n const own = schema._zod.pattern;\n return (isInt && own === regexes.number ? regexes.integer : own)?.source;\n}\n// a part's pattern source. a wrapper's pattern embeds its inner pattern's source verbatim, so the folded form is substituted in place without knowing the wrapper's own composition; a union's options are joined the way the union builds its own pattern\nfunction partPattern(schema) {\n const def = schema._zod.def;\n const own = schema._zod.pattern?.source;\n // lazy resolves its inner on the internals, not the def\n const inner = def.innerType ?? schema._zod.innerType;\n if (inner) {\n const before = inner._zod.pattern?.source;\n const after = partPattern(inner);\n if (own && before && after && after !== before) {\n return own.replace(util.cleanRegex(before), () => util.cleanRegex(after));\n }\n return own;\n }\n if (def.options) {\n const sources = def.options.map(partPattern);\n if (sources.every(Boolean))\n return `^(${sources.map((s) => util.cleanRegex(s)).join(\"|\")})$`;\n }\n return leafPattern(schema);\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n const source = partPattern(part);\n if (!source) {\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n regexParts.push(util.cleanRegex(source));\n }\n else if (part === null || util.primitiveTypes.has(typeof part)) {\n regexParts.push(util.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n // Defined, not assigned: the classic prototype exposes `_def` as a getter with no setter.\n Object.defineProperty(inst, \"_def\", { value: def });\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n // Defined inline so the closure stays anonymous: binding it to a `const` first names it, which costs 256 bytes per implemented function.\n return Object.defineProperty(function (...args) {\n const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return parse(inst._def.output, result);\n }\n return result;\n }, \"_zod\", { value: inst._zod, enumerable: false });\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return Object.defineProperty(async function (...args) {\n const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await parseAsync(inst._def.output, result);\n }\n return result;\n }, \"_zod\", { value: inst._zod, enumerable: false });\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // Cache the resolved inner type on the shared `def` so all clones of this lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance, preserving identity for cycle detection on recursive schemas.\n util.defineLazy(inst._zod, \"innerType\", () => {\n const d = def;\n if (!d._cachedInner)\n d._cachedInner = def.getter();\n return d._cachedInner;\n });\n util.defineLazyInternal(inst, \"pattern\", (zod) => zod.innerType?._zod?.pattern);\n util.defineLazyInternal(inst, \"propValues\", (zod) => zod.innerType?._zod?.propValues);\n util.defineLazyInternal(inst, \"optin\", (zod) => zod.innerType?._zod?.optin ?? undefined);\n util.defineLazyInternal(inst, \"optout\", (zod) => zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n checks.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(util.issue(_iss));\n }\n}\n","import * as util from \"./util.js\";\nexport class $ZodCyclicError extends Error {\n constructor() {\n super(`Cannot parse a reference cycle that closes through a transform`);\n this.name = \"ZodCyclicError\";\n }\n}\n/** Keyed off the context object every schema in one parse call already shares. */\nconst STATE = \"~memo\";\nconst NO_ISSUES = [];\n// a value a cycle can close through\nfunction isRef(value) {\n return value !== null && typeof value === \"object\";\n}\n// Receivers prefix paths in place, so the cache and every hand-out need their own copies.\nfunction cloneIssues(issues) {\n return issues.map((iss) => (iss.path ? { ...iss, path: iss.path.slice() } : { ...iss }));\n}\nconst recursive = /*@__PURE__*/ new WeakMap();\n/** What the walk established, in order of certainty: ordered so the strongest answer among children wins. */\nconst NONE = 0;\nconst ASSUMED = 1;\nconst PROVEN = 2;\n/** Whether this schema's subtree contains a cycle, so one parse can re-enter it. */\nfunction isRecursive(inst, stack, resolve) {\n const cached = recursive.get(inst);\n if (cached !== undefined)\n return cached ? PROVEN : NONE;\n // Relative to the walk in progress, so not cached.\n if (stack.has(inst))\n return PROVEN;\n stack.add(inst);\n let result = NONE;\n const check = (child) => {\n if (result !== PROVEN && child?._zod) {\n const answer = isRecursive(child, stack, resolve);\n if (answer > result)\n result = answer;\n }\n };\n // `Reflect.ownKeys` rather than `Object.keys`, so a cycle through a declared symbol key is still seen\n const shape = (sh, spread) => {\n let answer = NONE;\n for (const key of Reflect.ownKeys(sh)) {\n const desc = Object.getOwnPropertyDescriptor(sh, key);\n // an object resolves its shape by spread, so a key it does not enumerate is never parsed; `z.properties` reads every own key and so keeps them all\n if (spread && !desc.enumerable)\n continue;\n // resolving runs user code, and a factory mints a fresh subtree per read, so an edge the walk can't follow counts as a cycle\n const child = desc.get ? ASSUMED : desc.value?._zod ? isRecursive(desc.value, stack, resolve) : NONE;\n if (child > answer)\n answer = child;\n }\n return answer;\n };\n const merge = (answer) => {\n if (answer > result)\n result = answer;\n };\n const def = inst._zod.def;\n const kind = def.type;\n switch (kind) {\n case \"object\": {\n const raw = util.rawShape(def);\n // a def with no raw shape answers `shape` from an accessor of its own, and running that can mint a whole fresh subtree\n merge(raw ? shape(raw, true) : ASSUMED);\n check(def.catchall);\n break;\n }\n case \"array\":\n check(def.element);\n break;\n case \"tuple\":\n for (const el of def.items)\n check(el);\n check(def.rest);\n break;\n case \"record\":\n case \"map\":\n check(def.keyType);\n check(def.valueType);\n break;\n case \"set\":\n check(def.valueType);\n break;\n case \"union\":\n for (const el of def.options)\n check(el);\n break;\n case \"intersection\":\n check(def.left);\n check(def.right);\n break;\n case \"optional\":\n case \"nullable\":\n case \"default\":\n case \"prefault\":\n case \"catch\":\n case \"readonly\":\n case \"nonoptional\":\n case \"promise\":\n case \"success\":\n check(def.innerType);\n break;\n case \"pipe\":\n check(def.in);\n check(def.out);\n break;\n case \"function\":\n check(def.input);\n check(def.output);\n break;\n // `$ZodLazy` caches its inner on the def, so a resolved edge is followed exactly\n case \"lazy\": {\n const inner = def._cachedInner ?? (resolve ? inst._zod.innerType : undefined);\n // walked with resolution off: one hop sees past the deferral, and a lazy that yields only another unresolved lazy is generative, so it stops there\n merge(inner ? isRecursive(inner, stack, false) : ASSUMED);\n break;\n }\n // a leaf by choice: `parts` are regex fragments, not data positions\n case \"template_literal\":\n // leaves\n case \"string\":\n case \"number\":\n case \"int\":\n case \"boolean\":\n case \"bigint\":\n case \"symbol\":\n case \"undefined\":\n case \"null\":\n case \"void\":\n case \"never\":\n case \"any\":\n case \"unknown\":\n case \"date\":\n case \"nan\":\n case \"enum\":\n case \"literal\":\n case \"file\":\n case \"transform\":\n case \"custom\":\n break;\n default: {\n // a new built-in kind becomes a compile error here\n kind;\n // a user-defined kind can still hold children, and only its author knows where, so fall back to scanning the def — skipping accessors, since reading one can run user code\n for (const key in def) {\n const desc = Object.getOwnPropertyDescriptor(def, key);\n if (!desc || desc.get)\n continue;\n const value = desc.value;\n if (!value || typeof value !== \"object\")\n continue;\n if (value._zod)\n check(value);\n else if (Array.isArray(value))\n for (const el of value)\n check(el);\n }\n }\n }\n stack.delete(inst);\n return settle(inst, result);\n}\n/** An assumed answer must not outlive the resolution that settles it, so only a certain one is cached. */\nfunction settle(inst, answer) {\n if (answer !== ASSUMED)\n recursive.set(inst, answer === PROVEN);\n return answer;\n}\n/**\n * Whether one parse can re-enter this schema, i.e. its subtree contains a cycle.\n * Exported for `z.compile`, which refuses to compile such a schema: cycle\n * breaking is driven from here off state keyed on the parse context, and a\n * generated fast path has no context to key on.\n */\nexport function isRecursiveSchema(inst) {\n // z.compile never parses, so nothing would ever resolve a lazy for it; it runs once and already treats a throw here as recursive\n return isRecursive(inst, new Set(), true) !== NONE;\n}\nfunction bucketFor(state, inst) {\n let bucket = state.buckets.get(inst);\n if (!bucket) {\n bucket = new WeakMap();\n state.buckets.set(inst, bucket);\n }\n return bucket;\n}\n// Set immediately before delegating to core and cleared immediately after, so `alloc` registers only for a visit this module is driving.\nlet handoff;\n// Allocated but unfinished entries. `alloc` and the matching pop both happen in the synchronous part of a parse, so they nest even when children are async, and one stack serves every schema.\nconst open = [];\nconst memo = {\n alloc(_inst, payload, empty) {\n const bucket = handoff;\n if (!bucket)\n return empty;\n handoff = undefined;\n const entry = { value: empty, issues: null };\n bucket.set(payload.value, entry);\n open.push(entry);\n return empty;\n },\n guard(inst) {\n var _a;\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred.push(() => {\n const base = inst._zod.parse;\n const wrapped = (payload, ctx) => {\n // The value is a placeholder a back-edge is still waiting on, so the cycle closes through this transform. Its output can't exist in time to bind.\n if (ctx.direction !== \"backward\" && isBackEdge(ctx, payload.value))\n throw new $ZodCyclicError();\n return base(payload, ctx);\n };\n inst._zod.parse = wrapped;\n if (inst._zod.run === base)\n inst._zod.run = wrapped;\n });\n },\n attach(inst) {\n var _a;\n let isRecursiveInst;\n let rechecked = false;\n // a recursive schema is re-entered many times per parse and its bucket never changes\n let lastCtx;\n let lastBucket;\n // Wraps `parse` in a deferred so it sees the container's final parse. Core's own deferred copies `parse` into `run` when there are no checks, and it ran first, so `run` is patched to match; with checks, `run` reads `parse` dynamically.\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred.push(() => {\n const base = inst._zod.parse;\n const wrapped = (payload, ctx) => {\n if (isRecursiveInst === undefined) {\n const walked = isRecursive(inst, new Set(), false);\n if (walked === NONE) {\n // Nothing here can ever fire, so take it back out.\n inst._zod.parse = base;\n if (inst._zod.run === wrapped)\n inst._zod.run = base;\n return base(payload, ctx);\n }\n // this parse resolves the deferred edges on its own path, so ask once more before latching\n if (walked === PROVEN || rechecked)\n isRecursiveInst = true;\n else\n rechecked = true;\n }\n const input = payload.value;\n if (!isRef(input))\n return base(payload, ctx);\n let state = ctx[STATE];\n if (!state) {\n state = { buckets: new WeakMap(), backEdges: undefined };\n ctx[STATE] = state;\n }\n let bucket;\n if (lastCtx === ctx) {\n bucket = lastBucket;\n }\n else {\n bucket = bucketFor(state, inst);\n lastCtx = ctx;\n lastBucket = bucket;\n }\n const hit = bucket.get(input);\n if (hit) {\n payload.value = hit.value;\n if (hit.issues) {\n if (hit.issues.length)\n payload.issues.push(...cloneIssues(hit.issues));\n }\n else {\n // Still being parsed: its own checks cover it, so skip them here.\n payload.memo = true;\n state.backEdges ?? (state.backEdges = new WeakSet());\n state.backEdges.add(hit.value);\n }\n return payload;\n }\n handoff = bucket;\n const depth = open.length;\n const result = base(payload, ctx);\n handoff = undefined;\n // A container that rejected its input outright allocated nothing.\n const entry = open.length > depth ? open.pop() : undefined;\n // Both paths written out so the sync one allocates no closure. It runs once per node, and capturing here cost more than everything else combined.\n if (result instanceof Promise) {\n return result.then((r) => {\n if (entry)\n entry.issues = r.issues.length ? cloneIssues(r.issues) : NO_ISSUES;\n return r;\n });\n }\n if (entry)\n entry.issues = result.issues.length ? cloneIssues(result.issues) : NO_ISSUES;\n return result;\n };\n inst._zod.parse = wrapped;\n if (inst._zod.run === base)\n inst._zod.run = wrapped;\n });\n },\n};\n/** The memoizer that gives containers cycle support. `zod` installs it by default; `zod/mini` opts in with `config({ memoizer: memoizer() })`. */\nexport function memoizer() {\n return memo;\n}\n/** Whether this value is a node a back-edge resolved to before it finished. */\nexport function isBackEdge(ctx, value) {\n const backEdges = ctx[STATE]?.backEdges;\n return backEdges !== undefined && isRef(value) && backEdges.has(value);\n}\n","import * as util from \"../core/util.js\";\nconst error = () => {\n const Sizable = {\n string: { unit: \"characters\", verb: \"to have\" },\n file: { unit: \"bytes\", verb: \"to have\" },\n array: { unit: \"items\", verb: \"to have\" },\n set: { unit: \"items\", verb: \"to have\" },\n map: { unit: \"entries\", verb: \"to have\" },\n };\n function getSizing(origin) {\n return Sizable[origin] ?? null;\n }\n const FormatDictionary = {\n regex: \"input\",\n email: \"email address\",\n url: \"URL\",\n emoji: \"emoji\",\n uuid: \"UUID\",\n uuidv4: \"UUIDv4\",\n uuidv6: \"UUIDv6\",\n nanoid: \"nanoid\",\n guid: \"GUID\",\n cuid: \"cuid\",\n cuid2: \"cuid2\",\n ulid: \"ULID\",\n xid: \"XID\",\n ksuid: \"KSUID\",\n datetime: \"ISO datetime\",\n date: \"ISO date\",\n time: \"ISO time\",\n duration: \"ISO duration\",\n ipv4: \"IPv4 address\",\n ipv6: \"IPv6 address\",\n mac: \"MAC address\",\n cidrv4: \"IPv4 range\",\n cidrv6: \"IPv6 range\",\n base64: \"base64-encoded string\",\n base64url: \"base64url-encoded string\",\n json_string: \"JSON string\",\n e164: \"E.164 number\",\n currency_code: \"currency code\",\n credit_card: \"credit card number\",\n iban: \"IBAN\",\n jwt: \"JWT\",\n template_literal: \"input\",\n };\n // type names: missing keys = do not translate (use raw value via ?? fallback)\n const TypeDictionary = {\n // Compatibility: \"nan\" -> \"NaN\" for display\n nan: \"NaN\",\n // All other type names omitted - they fall back to raw values via ?? operator\n };\n function getTypeName(type, input) {\n if (type === \"number\" && typeof input === \"number\" && !Number.isFinite(input)) {\n return String(input);\n }\n return TypeDictionary[type] ?? type;\n }\n return (issue) => {\n switch (issue.code) {\n case \"invalid_type\": {\n const expected = getTypeName(issue.expected);\n const receivedType = util.parsedType(issue.input);\n const received = getTypeName(receivedType, issue.input);\n return `Invalid input: expected ${expected}, received ${received}`;\n }\n case \"invalid_value\":\n if (issue.values.length === 1)\n return `Invalid input: expected ${util.stringifyPrimitive(issue.values[0])}`;\n return `Invalid option: expected one of ${util.joinValues(issue.values, \"|\")}`;\n case \"too_big\": {\n const adj = issue.exact ? \"exactly \" : issue.inclusive ? \"<=\" : \"<\";\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `Too big: expected ${issue.origin ?? \"value\"} to have ${adj}${issue.maximum.toString()} ${sizing.unit ?? \"elements\"}`;\n return `Too big: expected ${issue.origin ?? \"value\"} to be ${adj}${issue.maximum.toString()}`;\n }\n case \"too_small\": {\n const adj = issue.exact ? \"exactly \" : issue.inclusive ? \">=\" : \">\";\n const sizing = getSizing(issue.origin);\n if (sizing) {\n return `Too small: expected ${issue.origin} to have ${adj}${issue.minimum.toString()} ${sizing.unit}`;\n }\n return `Too small: expected ${issue.origin} to be ${adj}${issue.minimum.toString()}`;\n }\n case \"invalid_format\": {\n const _issue = issue;\n if (_issue.format === \"starts_with\") {\n return `Invalid string: must start with \"${_issue.prefix}\"`;\n }\n if (_issue.format === \"ends_with\")\n return `Invalid string: must end with \"${_issue.suffix}\"`;\n if (_issue.format === \"includes\")\n return `Invalid string: must include \"${_issue.includes}\"`;\n if (_issue.format === \"regex\")\n return `Invalid string: must match pattern ${_issue.pattern}`;\n return `Invalid ${FormatDictionary[_issue.format] ?? issue.format}`;\n }\n case \"not_multiple_of\":\n return `Invalid number: must be a multiple of ${issue.divisor}`;\n case \"unrecognized_keys\":\n return `Unrecognized key${issue.keys.length > 1 ? \"s\" : \"\"}: ${util.joinValues(issue.keys, \", \")}`;\n case \"invalid_key\":\n return `Invalid key in ${issue.origin}`;\n case \"invalid_union\":\n if (issue.options && Array.isArray(issue.options) && issue.options.length > 0) {\n const opts = issue.options.map((o) => `'${o}'`).join(\" | \");\n return `Invalid discriminator value. Expected ${opts}`;\n }\n if (issue.inclusive === false) {\n return \"Invalid input: more than one option matched\";\n }\n return \"Invalid input\";\n case \"invalid_element\":\n return `Invalid value in ${issue.origin}`;\n default:\n return `Invalid input`;\n }\n };\n};\nexport default function () {\n return {\n localeError: error(),\n };\n}\n","var _a;\nexport const $output = /*@__PURE__*/ Symbol(\"ZodOutput\");\nexport const $input = /*@__PURE__*/ Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nexport function registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nexport const globalRegistry = globalThis.__zod_globalRegistry;\n","import * as checks from \"./checks.js\";\nimport * as registries from \"./registries.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nfunction snapshotChecks(def) {\n if (def.checks)\n def.checks = [...def.checks];\n return def;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _string(Class, params) {\n return new Class(snapshotChecks({ type: \"string\", ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedString(Class, params) {\n return new Class(snapshotChecks({ type: \"string\", coerce: true, ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nexport function _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _creditCard(Class, params) {\n return new Class({\n type: \"string\",\n format: \"credit_card\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _iban(Class, params) {\n return new Class({\n type: \"string\",\n format: \"iban\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ...util.normalizeParams(params),\n });\n}\nexport const TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nexport function _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _number(Class, params) {\n return new Class(snapshotChecks({ type: \"number\", checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedNumber(Class, params) {\n return new Class(snapshotChecks({ type: \"number\", coerce: true, checks: [], ...util.normalizeParams(params) }));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _null(Class, params) {\n return new Class({\n type: \"null\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _never(Class, params) {\n return new Class({\n type: \"never\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _void(Class, params) {\n return new Class({\n type: \"void\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _date(Class, params) {\n return new Class({\n type: \"date\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lt(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lte(value, params) {\n return new checks.$ZodCheckLessThan({\n check: \"less_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\n// @__NO_SIDE_EFFECTS__\nexport function _gt(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _gte(value, params) {\n return new checks.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ...util.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\n// @__NO_SIDE_EFFECTS__\nexport function _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nexport function _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nexport function _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nexport function _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nexport function _multipleOf(value, params) {\n return new checks.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ...util.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxSize(maximum, params) {\n return new checks.$ZodCheckMaxSize({\n check: \"max_size\",\n ...util.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minSize(minimum, params) {\n return new checks.$ZodCheckMinSize({\n check: \"min_size\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _size(size, params) {\n return new checks.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ...util.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _maxLength(maximum, params) {\n const ch = new checks.$ZodCheckMaxLength({\n check: \"max_length\",\n ...util.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _minLength(minimum, params) {\n return new checks.$ZodCheckMinLength({\n check: \"min_length\",\n ...util.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _length(length, params) {\n return new checks.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ...util.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _regex(pattern, params) {\n return new checks.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ...util.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lowercase(params) {\n return new checks.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _uppercase(params) {\n return new checks.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _includes(includes, params) {\n return new checks.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ...util.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _startsWith(prefix, params) {\n return new checks.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ...util.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _endsWith(suffix, params) {\n return new checks.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ...util.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _property(property, schema, params) {\n return new checks.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _properties(shape, params) {\n return new checks.$ZodCheckProperties({\n check: \"properties\",\n shape,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _mime(types, params) {\n return new checks.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _overwrite(tx) {\n return new checks.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nexport function _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nexport function _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nexport function _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nexport function _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nexport function _slugify() {\n return _overwrite((input) => util.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nexport function _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ...util.normalizeParams(params),\n });\n}\nexport function _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options: options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _file(Class, params) {\n return new Class({\n type: \"file\",\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : util.constantCatch(catchValue)),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nexport function _custom(Class, fn, _params) {\n const norm = util.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nexport function _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...util.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _superRefine(fn, params) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n if (!(\"input\" in _issue))\n _issue.input = payload.value;\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(util.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n }, params);\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _check(fn, params) {\n const ch = new checks.$ZodCheck({\n check: \"custom\",\n ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function describe(description) {\n const ch = new checks.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function meta(metadata) {\n const ch = new checks.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = registries.globalRegistry.get(inst) ?? {};\n registries.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringbool(Classes, _params) {\n const params = util.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n const _String = Classes.String ?? schemas.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n codec._zod.bag.truthy = truthyArray;\n codec._zod.bag.falsy = falsyArray;\n codec._zod.bag.case = params.case ?? \"insensitive\";\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = util.normalizeParams(_params);\n const def = {\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n","import { globalRegistry } from \"./registries.js\";\nimport { assignProp } from \"./util.js\";\nfunction assignProps(target, ...sources) {\n for (const source of sources) {\n for (const key of Reflect.ownKeys(source)) {\n if (Object.prototype.propertyIsEnumerable.call(source, key)) {\n assignProp(target, key, source[key]);\n }\n }\n }\n return target;\n}\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nexport function initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n sharedDefsExtractedFor: undefined,\n sharedEmitDoneFor: undefined,\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n intersections: [],\n deferred: [],\n external: params?.external ?? undefined,\n };\n}\n/**\n * Applies the `unrepresentable` setting at a site that has no JSON Schema equivalent. Throws\n * `message` unless the setting (or the handler's return value) says otherwise. Returns `true` if a\n * custom JSON Schema was written into `json`, in which case the caller must not write its own.\n */\nexport function handleUnrepresentable(schema, ctx, json, params, message) {\n const result = typeof ctx.unrepresentable === \"function\"\n ? ctx.unrepresentable({ zodSchema: schema, path: params.path, message })\n : ctx.unrepresentable;\n if (result === \"any\")\n return false;\n if (result === undefined || result === \"throw\")\n throw new Error(message);\n Object.assign(json, result);\n return true;\n}\n// never rename this back to `process`: bundler polyfills inject a top-level `const process` that a lexical declaration of the same name collides with (#6397)\nexport function processSchema(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n ctx.sharedDefsExtractedFor = undefined;\n ctx.sharedEmitDoneFor = undefined;\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n processSchema(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n assignProps(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\n/** @deprecated Renamed to `processSchema`. An export alias declares no binding, so it is safe to keep. */\nexport { processSchema as process };\n// Escape a reference token for use in a JSON Pointer fragment (RFC 6901): `~` becomes `~0` and `/` becomes `~1`. The `~` replacement must run first.\nfunction encodeJSONPointerSegment(segment) {\n return segment.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\n}\nexport function extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // With `external` set, every registered schema resolves through the external branch of `makeURI`, so the root branch below produces the same ref the external branch would — this pass is identical whichever schema it is called with, and only needs to run once.\n if (ctx.external && ctx.sharedDefsExtractedFor === ctx.external)\n return;\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes multiple schemas map to the same seen object. e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${encodeJSONPointerSegment(id)}` };\n }\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n // an id-less root has nowhere to be extracted to, so it stays inline and self-references as `#`\n if (entry[1] === root && !entry[1].schema.id) {\n return { ref: uriPrefix };\n }\n // self-contained schema\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + encodeJSONPointerSegment(defId) };\n };\n // stored cached version in `def` property remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n }\n }\n }\n if (ctx.external)\n ctx.sharedDefsExtractedFor = ctx.external;\n}\n/** Rewrites `anyOf: [{type: \"a\"}, {type: \"b\"}]` to `type: [\"a\", \"b\"]`, which every JSON Schema draft treats as equivalent and most consumers render far better for the nullable case. Only branches that are a bare type assertion qualify — anything carrying a constraint, `$ref`, `const` or metadata is left alone. Runs after `flattenRef`, so a branch an override decorated or `$defs` extraction turned into a `$ref` is no longer bare and correctly stays in `anyOf`. `oneOf` is excluded: `integer` and `number` overlap, so \"exactly one\" and \"at least one\" are not the same there. OpenAPI 3.0 is excluded: its `type` must be a single string. */\nfunction compactTypeUnion(schema) {\n const options = schema.anyOf;\n if (!Array.isArray(options) || options.length === 0 || schema.type !== undefined)\n return;\n const types = [];\n for (const option of options) {\n if (!option || typeof option !== \"object\")\n return;\n // A branch that is itself a compactible union folds into this one — nested `anyOf` and a flat `type` array say the same thing. Compacting it first also makes the result independent of the order this pass walks the seen map in.\n compactTypeUnion(option);\n const keys = Object.keys(option);\n if (keys.length !== 1 || keys[0] !== \"type\")\n return;\n const type = option.type;\n for (const member of Array.isArray(type) ? type : [type]) {\n if (typeof member !== \"string\")\n return;\n if (!types.includes(member))\n types.push(member);\n }\n }\n delete schema.anyOf;\n // A `type` array must be non-empty and unique (metaschema); a single member is spelled as a bare string.\n schema.type = types.length === 1 ? types[0] : types;\n}\n/** Keywords `foldIntersection` knows how to combine. Anything else — `$ref`, `patternProperties`,\n * an annotation like `description` — makes a member unfoldable, so a constraint this does not\n * understand leaves the `allOf` alone instead of being silently dropped or misattributed. */\nconst FOLDABLE_KEYS = new Set([\"type\", \"properties\", \"required\", \"additionalProperties\"]);\nconst UNION_KEYS = [\"oneOf\", \"anyOf\"];\n/** A member's constraint on a key it does not declare itself. A `catchall` states one; `false`, an absent `additionalProperties`, and the empty schema a loose object emits state nothing. */\nfunction undeclaredConstraint(member) {\n const extra = member.additionalProperties;\n if (extra === undefined || extra === false || typeof extra !== \"object\" || extra === null)\n return null;\n return Object.keys(extra).length ? extra : null;\n}\n/** Combines object members into the single object they describe together, or returns `null` if any of them carries a keyword outside {@link FOLDABLE_KEYS}. */\nfunction foldObjects(members) {\n const objects = [];\n for (const member of members) {\n // A boolean subschema is legal JSON Schema and carries no keywords to fold.\n if (typeof member !== \"object\" || member.type !== \"object\")\n return null;\n for (const key in member) {\n if (!FOLDABLE_KEYS.has(key))\n return null;\n }\n objects.push(member);\n }\n const properties = {};\n const required = new Set();\n for (const object of objects) {\n for (const key in object.properties) {\n // `in` would report a `__proto__` key as already present via the prototype chain and skip it.\n if (Object.prototype.hasOwnProperty.call(properties, key))\n continue;\n // Every member constrains this key: the ones that declare it say how, and a `catchall` member constrains it too even though it does not name it. The key has to satisfy all of them, which is the same intersection one level down.\n const parts = [];\n for (const other of objects) {\n const part = other.properties?.[key] ?? undeclaredConstraint(other);\n if (part === null || part === undefined)\n continue;\n if (!parts.some((seen) => JSON.stringify(seen) === JSON.stringify(part)))\n parts.push(part);\n }\n const merged = parts.length === 1\n ? parts[0]\n : (foldObjects(parts) ?? { allOf: parts });\n assignProp(properties, key, merged);\n }\n for (const key of object.required ?? [])\n required.add(key);\n }\n const folded = { type: \"object\", properties };\n if (required.size)\n folded.required = [...required];\n // A key no member declares is rejected only when every member rejects it, so the fold is closed only when every member is. Otherwise it carries whatever the `catchall` members demand of such a key.\n if (objects.every((object) => object.additionalProperties === false)) {\n folded.additionalProperties = false;\n }\n else {\n const constraints = [];\n for (const object of objects) {\n const constraint = undeclaredConstraint(object);\n if (constraint && !constraints.some((seen) => JSON.stringify(seen) === JSON.stringify(constraint)))\n constraints.push(constraint);\n }\n if (constraints.length === 1)\n folded.additionalProperties = constraints[0];\n else if (constraints.length > 1)\n folded.additionalProperties = { allOf: constraints };\n }\n return folded;\n}\n/** `additionalProperties` in an `allOf` member sees only that member's own `properties`, so two\n * closed object members reject each other's keys and the schema validates nothing. Zod's parser\n * pools the key sets instead — `handleIntersectionResults` reports a key as unrecognized only when\n * *every* side rejects it — so the emitted schema has to pool them too, and folding the members\n * into one object is the encoding that says so on every target.\n *\n * This runs from `finalize`, after `extractDefs`, which is what keeps it clear of the `$ref`\n * machinery: a member extracted into `$defs` is already a `$ref` by now and declines to fold, so it\n * keeps its reference and its own closedness rather than being inlined as a stale copy. */\nfunction foldIntersection(json) {\n const allOf = json.allOf;\n if (!Array.isArray(allOf) || allOf.length < 2)\n return;\n // An `override` runs before this pass and may have written object keywords onto the intersection itself. Those are deliberate, so decline rather than overwrite them.\n for (const key of FOLDABLE_KEYS)\n if (key in json)\n return;\n // An intersection distributes over a union: `A & (X | Y)` is `(A & X) | (A & Y)`. Only the first union is distributed over; a second one stays among the members every branch folds against, where it fails the object check and declines the whole intersection rather than multiplying out.\n const unions = allOf.filter((m) => UNION_KEYS.some((k) => Array.isArray(m[k])));\n let folded = null;\n if (!unions.length) {\n folded = foldObjects(allOf);\n }\n else {\n const union = unions[0];\n const keyword = UNION_KEYS.find((k) => Array.isArray(union[k]));\n if (Object.keys(union).length !== 1)\n return;\n const rest = allOf.filter((m) => m !== union);\n const branches = union[keyword].map((branch) => foldObjects([...rest, branch]));\n if (branches.some((b) => !b))\n return;\n folded = { [keyword]: branches };\n }\n if (!folded)\n return;\n delete json.allOf;\n assignProps(json, folded);\n}\nexport function finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n assignProps(schema, refSchema);\n }\n // restore child's own properties (child wins)\n assignProps(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema. This handles cases like: readonly().meta({id}).describe() where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n // Flattening walks the whole map and clears each `ref` as it goes, so a second call over the same map is a no-op scan. Skip it outright once it has run for a registry conversion.\n if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n if (ctx.target !== \"openapi-3.0\") {\n for (const entry of ctx.seen.entries()) {\n compactTypeUnion(entry[1].def ?? entry[1].schema);\n }\n }\n for (const rewrite of ctx.deferred)\n rewrite();\n // After flattening, every member that was extracted is a `$ref`, so the fold sees the final shape. A schema that inherits an intersection — through `z.lazy`, or any `ref` chain — holds the same `allOf` array, so fold by array identity to catch every copy.\n if (ctx.intersections.length) {\n const carriers = new Map();\n for (const seen of ctx.seen.values()) {\n for (const json of [seen.schema, seen.def]) {\n const allOf = json?.allOf;\n if (!Array.isArray(allOf))\n continue;\n const existing = carriers.get(allOf);\n if (existing)\n existing.push(json);\n else\n carriers.set(allOf, [json]);\n }\n }\n for (const allOf of ctx.intersections) {\n for (const json of carriers.get(allOf) ?? [])\n foldIntersection(json);\n }\n }\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n // when the root was extracted into $defs, `root.schema` is the `$ref` wrapper and `root.def` is the body that now lives under $defs\n assignProps(result, root.defId ? root.schema : (root.def ?? root.schema));\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract schemas into $defs — it is not user-facing JSON Schema metadata. Strip it from the output body where it would otherwise leak. The id is preserved implicitly via the $defs key (and via $ref paths).\n const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n if (rootMetaId !== undefined && result.id === rootMetaId)\n delete result.id;\n // build defs object. With `external`, `defs` is the shared object every schema writes into, so the same entries are reassigned on every call. Without it, `defs` is fresh per call and must be rebuilt.\n const defs = ctx.external?.defs ?? {};\n if (!ctx.external || ctx.sharedEmitDoneFor !== ctx.external) {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n if (seen.def.id === seen.defId)\n delete seen.def.id;\n assignProp(defs, seen.defId, seen.def);\n }\n }\n }\n if (ctx.external)\n ctx.sharedEmitDoneFor = ctx.external;\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed each call to finalize() is functionally independent though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\" ||\n def.type === \"catch\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n if (_schema._zod.traits.has(\"$ZodCodec\"))\n return true;\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nexport const createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n processSchema(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nexport const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n processSchema(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n","import * as regexes from \"./regexes.js\";\nimport { base64Charset, base64urlCharset } from \"./schemas.js\";\nimport { extractDefs, finalize, handleUnrepresentable, initializeContext, processSchema, } from \"./to-json-schema.js\";\nimport { BIGINT_FORMAT_RANGES, NUMBER_FORMAT_RANGES, assignProp, getEnumValues } from \"./util.js\";\nconst narrowMin = (agg, key, value) => {\n if (agg[key] === undefined || value > agg[key])\n agg[key] = value;\n};\nconst narrowMax = (agg, key, value) => {\n if (agg[key] === undefined || value < agg[key])\n agg[key] = value;\n};\nconst narrowBoth = (agg, value) => {\n narrowMin(agg, \"minimum\", value);\n narrowMax(agg, \"maximum\", value);\n};\nconst addDivisor = (agg, value) => {\n agg.multipleOf ?? (agg.multipleOf = []);\n if (!agg.multipleOf.includes(value))\n agg.multipleOf.push(value);\n};\nconst addPattern = (agg, pattern) => {\n agg.patterns ?? (agg.patterns = new Set());\n agg.patterns.add(pattern);\n};\nconst intersectMime = (agg, mime) => {\n agg.mime = agg.mime ? agg.mime.filter((m) => mime.includes(m)) : [...mime];\n};\n// last-wins, matching the bag's historical write order; the flag keeps an integer format from being lost to a later float one\nconst setFormat = (agg, format) => {\n agg.format = format;\n if (format.includes(\"int\"))\n agg.isInt = true;\n};\nconst minContributor = (agg, def) => narrowMin(agg, \"minimum\", def.minimum);\nconst maxContributor = (agg, def) => narrowMax(agg, \"maximum\", def.maximum);\nconst formatContributor = (ranges) => (agg, def) => {\n setFormat(agg, def.format);\n const [minimum, maximum] = ranges[def.format];\n narrowMin(agg, \"minimum\", minimum);\n narrowMax(agg, \"maximum\", maximum);\n};\nconst contributors = {\n greater_than: (agg, def) => narrowMin(agg, def.inclusive ? \"minimum\" : \"exclusiveMinimum\", def.value),\n less_than: (agg, def) => narrowMax(agg, def.inclusive ? \"maximum\" : \"exclusiveMaximum\", def.value),\n multiple_of: (agg, def) => addDivisor(agg, def.value),\n number_format: formatContributor(NUMBER_FORMAT_RANGES),\n bigint_format: formatContributor(BIGINT_FORMAT_RANGES),\n min_length: minContributor,\n max_length: maxContributor,\n length_equals: (agg, def) => narrowBoth(agg, def.length),\n min_size: minContributor,\n max_size: maxContributor,\n size_equals: (agg, def) => narrowBoth(agg, def.size),\n string_format: (agg, def) => {\n setFormat(agg, def.format);\n if (def.pattern)\n addPattern(agg, def.pattern);\n if (def.format === \"base64\" || def.format === \"base64url\")\n agg.contentEncoding = def.format;\n if (def.local || def.precision === -1)\n agg.laxFormat = true;\n },\n mime_type: (agg, def) => intersectMime(agg, def.mime),\n};\nexport function aggregateChecks(schema) {\n const agg = {};\n const def = schema._zod.def;\n // a format schema is its own first check, same rule as $ZodType init\n const list = schema._zod.traits.has(\"$ZodCheck\")\n ? [schema, ...(def.checks ?? [])]\n : (def.checks ?? []);\n for (const ch of list)\n contributors[ch._zod.def.check]?.(agg, ch._zod.def);\n // reconcile with the bag so third-party onattach contributions still land; first-party residue is never tighter than the fold, so merging it back is idempotent for one and additive for the other\n const bag = schema._zod.bag;\n if (bag.minimum !== undefined)\n narrowMin(agg, \"minimum\", bag.minimum);\n if (bag.exclusiveMinimum !== undefined)\n narrowMin(agg, \"exclusiveMinimum\", bag.exclusiveMinimum);\n if (bag.maximum !== undefined)\n narrowMax(agg, \"maximum\", bag.maximum);\n if (bag.exclusiveMaximum !== undefined)\n narrowMax(agg, \"exclusiveMaximum\", bag.exclusiveMaximum);\n if (bag.multipleOf !== undefined)\n addDivisor(agg, bag.multipleOf);\n if (bag.format !== undefined) {\n agg.format ?? (agg.format = bag.format);\n if (bag.format.includes(\"int\"))\n agg.isInt = true;\n }\n if (bag.mime)\n intersectMime(agg, bag.mime);\n for (const pattern of bag.patterns ?? [])\n addPattern(agg, pattern);\n return agg;\n}\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\n// the runtime patterns are lax so parse paths never overflow the regex stack; the emitted schema swaps in the exact block forms, which zod itself never executes\nconst exactPatterns = new Map([\n [base64Charset, regexes.base64],\n [base64urlCharset, regexes.base64url],\n]);\nconst exactPattern = (p) => exactPatterns.get(p) ?? p;\nexport const stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding, laxFormat } = aggregateChecks(schema);\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // `z.iso.time()` is never full-time, and `laxFormat` carries the datetime shapes that also accept what their keyword forbids\n if (format === \"time\" || laxFormat) {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const patternList = [...patterns].map(exactPattern);\n if (patternList.length === 1)\n json.pattern = patternList[0].source;\n else if (patternList.length > 1) {\n json.allOf = [\n ...patternList.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nexport const numberProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const { minimum, maximum, multipleOf, exclusiveMaximum, exclusiveMinimum, isInt } = aggregateChecks(schema);\n json.type = isInt ? \"integer\" : \"number\";\n // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n if (exMin) {\n if (legacy) {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n else if (typeof minimum === \"number\") {\n json.minimum = minimum;\n }\n if (exMax) {\n if (legacy) {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n else if (typeof maximum === \"number\") {\n json.maximum = maximum;\n }\n if (multipleOf) {\n // JSON Schema requires a divisor strictly greater than zero, and a non-finite one does not survive JSON at all. A negative divisor accepts exactly what its absolute value accepts, so it still maps; zero, NaN and Infinity have no keyword form.\n const divisors = new Set();\n for (const divisor of multipleOf) {\n if (Number.isFinite(divisor) && divisor !== 0)\n divisors.add(Math.abs(divisor));\n else\n handleUnrepresentable(schema, ctx, json, params, `A multipleOf divisor of ${divisor} cannot be represented in JSON Schema`);\n }\n // chained divisors are a conjunction the keyword cannot carry alone, so extras ride an allOf, same as stacked patterns\n const [first, ...rest] = divisors;\n if (first !== undefined)\n json.multipleOf = first;\n if (rest.length)\n json.allOf = [...(json.allOf ?? []), ...rest.map((m) => ({ multipleOf: m }))];\n }\n};\nexport const booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const bigintProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"BigInt cannot be represented in JSON Schema\");\n};\nexport const symbolProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Symbols cannot be represented in JSON Schema\");\n};\nexport const nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nexport const undefinedProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Undefined cannot be represented in JSON Schema\");\n};\nexport const voidProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Void cannot be represented in JSON Schema\");\n};\nexport const neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nexport const anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nexport const dateProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Date cannot be represented in JSON Schema\");\n};\nexport const enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = getEnumValues(def.entries);\n // an empty enum accepts nothing, same as z.never()\n if (values.length === 0) {\n json.not = {};\n return;\n }\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nexport const literalProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // a literal with no values accepts nothing, same as z.never()\n if (def.values.length === 0) {\n json.not = {};\n return;\n }\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n // a custom schema replaces the whole literal, so there is nothing left to accumulate\n if (handleUnrepresentable(schema, ctx, json, params, \"Literal `undefined` cannot be represented in JSON Schema\"))\n return;\n // otherwise do not add to vals\n }\n else if (typeof val === \"bigint\") {\n if (handleUnrepresentable(schema, ctx, json, params, \"BigInt literals cannot be represented in JSON Schema\"))\n return;\n vals.push(Number(val));\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nexport const nanProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"NaN cannot be represented in JSON Schema\");\n};\nexport const templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nexport const fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n _json.type = \"string\";\n _json.format = \"binary\";\n _json.contentEncoding = \"binary\";\n const { minimum, maximum, mime } = aggregateChecks(schema);\n if (minimum !== undefined)\n _json.minLength = minimum;\n if (maximum !== undefined)\n _json.maxLength = maximum;\n if (!mime)\n return;\n // an empty intersection means the mime checks share no value, so nothing passes at runtime; `anyOf` must be non-empty, so the false schema is `not: {}`\n if (mime.length === 0)\n _json.not = {};\n else if (mime.length === 1)\n _json.contentMediaType = mime[0];\n // only contentMediaType differs, so the shared props stay at the root\n else\n _json.anyOf = mime.map((m) => ({ contentMediaType: m }));\n};\nexport const successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nexport const customProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Custom types cannot be represented in JSON Schema\");\n};\nexport const functionProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Function types cannot be represented in JSON Schema\");\n};\nexport const transformProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Transforms cannot be represented in JSON Schema\");\n};\nexport const mapProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Map cannot be represented in JSON Schema\");\n};\nexport const setProcessor = (schema, ctx, json, params) => {\n handleUnrepresentable(schema, ctx, json, params, \"Set cannot be represented in JSON Schema\");\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nexport const arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = aggregateChecks(schema);\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = processSchema(def.element, ctx, {\n ...params,\n path: [...params.path, \"items\"],\n });\n};\n// Transform and catch set `optin = \"optional\"` at runtime so the parser lets them observe an\n// absent key, but their declared input type stays required. An input JSON Schema describes the\n// declared type, so resolve past them to the schema that actually carries the optionality.\n// Used by both `objectProcessor` (for `required`) and `tupleProcessor` (for `minItems`); see\n// wiki/optionality.md, \"The JSON Schema emitter reads the *static* value\".\nfunction inputOptin(schema) {\n const def = schema._zod.def;\n if (def.type === \"pipe\" && def.in._zod.traits.has(\"$ZodTransform\")) {\n return inputOptin(def.out);\n }\n if (def.type === \"catch\") {\n return inputOptin(def.innerType);\n }\n return schema._zod.optin;\n}\nexport const objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const shape = def.shape;\n // dropping it while still emitting `additionalProperties: false` would emit a schema that rejects data this one requires\n const symbolKeys = Object.getOwnPropertySymbols(shape);\n if (symbolKeys.length &&\n handleUnrepresentable(schema, ctx, json, params, \"Symbol keys cannot be represented in JSON Schema\")) {\n return;\n }\n json.type = \"object\";\n json.properties = {};\n for (const key in shape) {\n // assignProp so a __proto__ key becomes an own property instead of hitting the inherited setter on the plain {} we build into\n assignProp(json.properties, key, processSchema(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n }));\n }\n // required keys\n const requiredKeys = [];\n for (const key of Object.keys(shape)) {\n const field = def.shape[key];\n if (ctx.io === \"input\" ? inputOptin(field) === undefined : field._zod.optout === undefined) {\n requiredKeys.push(key);\n }\n }\n if (requiredKeys.length > 0) {\n json.required = requiredKeys;\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = processSchema(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nexport const unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches). This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => processSchema(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nexport const intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = processSchema(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = processSchema(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n // Recorded innermost first, so a nested intersection has already folded by the time this one is considered. The array is the handle rather than the schema, because a wrapper that inherits this schema shares the same array; `finalize` folds every object holding it. See `foldIntersection`.\n ctx.intersections.push(allOf);\n};\nexport const tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => processSchema(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? processSchema(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n let minItems = def.items.length;\n while (minItems > 0) {\n const item = def.items[minItems - 1];\n const optional = ctx.io === \"input\" ? inputOptin(item) !== undefined : item._zod.optout === \"optional\";\n if (!optional)\n break;\n minItems--;\n }\n const maxItems = def.items.length;\n const isClosed = !def.rest;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (isClosed) {\n json.items = false;\n }\n else if (rest) {\n json.items = rest;\n }\n if (minItems > 0)\n json.minItems = minItems;\n if (isClosed)\n json.maxItems = maxItems;\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n if (minItems > 0)\n json.minItems = minItems;\n if (isClosed)\n json.maxItems = maxItems;\n }\n else {\n json.items = prefixItems;\n if (isClosed) {\n json.additionalItems = false;\n }\n else if (rest) {\n json.additionalItems = rest;\n }\n if (minItems > 0)\n json.minItems = minItems;\n if (isClosed)\n json.maxItems = maxItems;\n }\n // explicit user-defined length checks take precedence\n const { minimum, maximum } = aggregateChecks(schema);\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\n/** JSON object keys are always strings, so a numeric record key schema is re-expressed over the\n * numeric-string form the record parser matches. Deferred to `finalize`, after the flatten: a key\n * behind a wrapper only carries its own `type` before then, and a union key only has its branches.\n *\n * A numeric bound cannot apply to a property name, so `minimum` and its siblings are dropped rather\n * than carried over: keeping them beside `type: \"string\"` reproduces the match-nothing schema this\n * exists to fix. A key that carries one therefore emits wider than the record parses — `z.record(z.number().min(5), V)`\n * accepts `\"3\"` — which is the deliberate trade, since throwing on it would reject an ordinary schema\n * outright. */\nfunction stringifyKeyNames(bySchema, json, visited) {\n // an extracted key that rewrites cannot go on sharing its definition — the string form a key position needs is not the number form every other reference wants — so it inlines. One that does not rewrite keeps the `$ref`.\n if (json.$ref) {\n // a recursive key holds its own reference inside its definition, so a node already on the path is left alone rather than resolved again\n if (visited.has(json))\n return json;\n visited.add(json);\n const def = bySchema.get(json)?.def;\n if (!def)\n return json;\n const inlined = stringifyKeyNames(bySchema, def, visited);\n return inlined === def ? json : inlined;\n }\n for (const keyword of [\"anyOf\", \"oneOf\"]) {\n const branches = json[keyword];\n if (!Array.isArray(branches))\n continue;\n const mapped = branches.map((branch) => stringifyKeyNames(bySchema, branch, visited));\n // rebuilding regardless would detach a key that had nothing to re-express, dropping its `$ref` and leaking the internal `id`\n if (mapped.some((branch, i) => branch !== branches[i]))\n json = { ...json, [keyword]: mapped };\n }\n // a member that already admits a string leaves the key unconstrained, so the node's own type re-expresses only when every member is numeric\n const types = Array.isArray(json.type) ? json.type : [json.type];\n const numericType = !types.includes(\"string\") && types.some((t) => t === \"number\" || t === \"integer\");\n // a heterogeneous key carries no type at all, so its numeric members are caught here instead\n const values = json.enum ?? (json.const !== undefined ? [json.const] : undefined);\n if (!numericType && !values?.some((v) => typeof v === \"number\"))\n return json;\n const { minimum, maximum, exclusiveMinimum, exclusiveMaximum, multipleOf, format, id, ...rest } = json;\n if (rest.enum)\n rest.enum = rest.enum.map((v) => (typeof v === \"number\" ? String(v) : v));\n else if (typeof rest.const === \"number\")\n rest.const = String(rest.const);\n // a heterogeneous key keeps its absent type: the stringified members already say what a key may be\n if (!numericType)\n return rest;\n rest.type = \"string\";\n if (!values)\n rest.pattern = (types.includes(\"number\") ? regexes.number : regexes.integer).source;\n return rest;\n}\n/** Every record of one conversion, so the carriers are found in a single pass rather than once per record. */\nconst pendingRecords = new WeakMap();\nfunction rewriteKeyNames(ctx) {\n // an extracted key is resolved by the object `extractToDef` left in its place, so the map is built once rather than searched per reference. `_zod.toJSONSchema` can hand the same object to two schemas, so the first entry carrying a body wins, as a search would have found it.\n const bySchema = new Map();\n for (const entry of ctx.seen.values()) {\n if (entry.def && !bySchema.has(entry.schema))\n bySchema.set(entry.schema, entry);\n }\n const rewrites = new Map();\n for (const record of pendingRecords.get(ctx) ?? []) {\n const seen = ctx.seen.get(record);\n const names = (seen?.def ?? seen?.schema)?.propertyNames;\n if (!names || names === true || rewrites.has(names))\n continue;\n const rewritten = stringifyKeyNames(bySchema, names, new Set());\n if (rewritten !== names)\n rewrites.set(names, rewritten);\n }\n if (!rewrites.size)\n return;\n // the flatten has already copied each record's own properties onto every wrapper by reference, and an extracted body is another such copy, so every carrier holding a rewritten key is updated together\n for (const entry of ctx.seen.values()) {\n for (const carrier of [entry.schema, entry.def]) {\n const rewritten = carrier && rewrites.get(carrier.propertyNames);\n if (rewritten)\n carrier.propertyNames = rewritten;\n }\n }\n}\nexport const recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties. This correctly represents \"only validate keys matching the pattern\" semantics and composes well with allOf (intersections)\n const keyType = def.keyType;\n const patterns = aggregateChecks(keyType).patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = processSchema(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n assignProp(json.patternProperties, exactPattern(pattern).source, valueSchema);\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = processSchema(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n let pending = pendingRecords.get(ctx);\n if (!pending) {\n pending = [];\n pendingRecords.set(ctx, pending);\n ctx.deferred.push(() => rewriteKeyNames(ctx));\n }\n pending.push(schema);\n }\n json.additionalProperties = processSchema(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n // Every key shares one value schema, so an optional-in value makes the whole key set omittable on input. Output keeps them: the exhaustive branch assigns every key, even one whose value came back undefined.\n const omittableOnInput = ctx.io === \"input\" && inputOptin(def.valueType) !== undefined;\n if (keyValues && !def.partial && !omittableOnInput) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues.map(String);\n }\n }\n};\nexport const nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nexport const nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\n/** Round-trips a default value through JSON so the emitted schema is guaranteed to be valid JSON.\n * A BigInt has no reliable encoding, so it goes through `unrepresentable` like any other\n * unrepresentable value. Returns a sentinel when the caller must not write a default of its own. */\nconst UNREPRESENTABLE_DEFAULT = Symbol();\nfunction serializeDefaultValue(value, schema, ctx, json, params) {\n let unrepresentable = false;\n const serialized = JSON.stringify(value, (_, val) => {\n if (typeof val !== \"bigint\")\n return val;\n unrepresentable = true;\n return null;\n });\n if (!unrepresentable)\n return JSON.parse(serialized);\n handleUnrepresentable(schema, ctx, json, params, \"BigInt defaults cannot be represented in JSON Schema\");\n return UNREPRESENTABLE_DEFAULT;\n}\nexport const defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n if (value !== UNREPRESENTABLE_DEFAULT)\n json.default = value;\n};\nexport const prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io !== \"input\")\n return;\n const value = serializeDefaultValue(def.defaultValue, schema, ctx, json, params);\n if (value !== UNREPRESENTABLE_DEFAULT)\n json._prefault = value;\n};\nexport const catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n handleUnrepresentable(schema, ctx, json, params, \"Dynamic catch values are not supported in JSON Schema\");\n return;\n }\n json.default = catchValue;\n};\nexport const pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n processSchema(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nexport const readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nexport const promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n processSchema(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nexport const lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n processSchema(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nexport const allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nexport function toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = initializeContext({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n processSchema(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n extractDefs(ctx, schema);\n assignProp(schemas, key, finalize(ctx, schema));\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = initializeContext({ ...params, processors: allProcessors });\n processSchema(input, ctx);\n extractDefs(ctx, input);\n return finalize(ctx, input);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\n/* Prototypes that already carry the lazy helper methods. Seeded with the\n * intrinsics so that `init` on a foreign object — it accepts any object —\n * can never install an accessor onto a prototype we do not own. */\nconst _installedErrorProtos = /* @__PURE__ */ new WeakSet([Object.prototype, Error.prototype]);\n/* Helper methods live as non-enumerable lazy getters on the shared\n * prototype instead of own properties on every instance. On first\n * access the getter allocates the per-instance closure and caches it\n * as a non-enumerable own property, so detached usage still works and\n * the allocation only happens for methods actually touched. */\nfunction _lazyMethod(proto, key, make) {\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: false,\n get() {\n const value = make(this);\n Object.defineProperty(this, key, { value, configurable: true, writable: true });\n return value;\n },\n set(value) {\n Object.defineProperty(this, key, { value, configurable: true, writable: true });\n },\n });\n}\nconst initializer = (inst, issues) => {\n $ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n const proto = Object.getPrototypeOf(inst);\n if (_installedErrorProtos.has(proto))\n return;\n _installedErrorProtos.add(proto);\n _lazyMethod(proto, \"format\", (self) => (mapper) => core.formatError(self, mapper));\n _lazyMethod(proto, \"flatten\", (self) => (mapper) => core.flattenError(self, mapper));\n _lazyMethod(proto, \"addIssue\", (self) => (issue) => {\n self.issues.push(issue);\n self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n });\n _lazyMethod(proto, \"addIssues\", (self) => (issues) => {\n self.issues.push(...issues);\n self.message = JSON.stringify(self.issues, util.jsonStringifyReplacer, 2);\n });\n Object.defineProperty(proto, \"isEmpty\", {\n configurable: true,\n enumerable: false,\n get() {\n return this.issues.length === 0;\n },\n });\n};\nexport const ZodError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = /*@__PURE__*/ core.$constructor(\"ZodError\", initializer, undefined, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\nexport { validate, validateAsync } from \"../core/index.js\";\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as processors from \"../core/json-schema-processors.js\";\nimport * as regexes from \"../core/regexes.js\";\nimport { createStandardJSONSchemaMethod, createToJSONSchemaMethod } from \"../core/to-json-schema.js\";\nimport en from \"../locales/en.js\";\nimport * as checks from \"./checks.js\";\nimport * as parse from \"./parse.js\";\n// Register English as the default locale on first ZodType construction. Hooked into the `ZodType` `$constructor` (rather than a top-level `config(en())` in `external.ts`) so bundlers honoring `sideEffects: false` can't tree-shake it out — see #5953, #5725. An explicit `z.config(z.locales.xx())` call wins regardless of order, since this only sets the default when none is present.\nfunction _ensureDefaultLocale() {\n if (!core.globalConfig.localeError)\n core.config(en());\n}\n// the default memoizer is read by the core container init, which runs before `ZodType.init`, so each container calls this first\nfunction _ensureDefaultMemoizer() {\n if (!core.globalConfig.memoizer)\n core.config({ memoizer: core.memoizer() });\n}\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n _ensureDefaultLocale();\n core.$ZodType.init(inst, def);\n inst.def = def;\n inst.type = def.type;\n return inst;\n}, {\n check(...chks) {\n const def = this.def;\n return this.clone(util.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), { parent: true });\n },\n with(...chks) {\n return this.check(...chks);\n },\n clone(def, params) {\n return core.clone(this, def, params);\n },\n brand() {\n return this;\n },\n register(reg, meta) {\n reg.add(this, meta);\n return this;\n },\n refine(check, params) {\n return this.check(refine(check, params));\n },\n superRefine(refinement, params) {\n return this.check(superRefine(refinement, params));\n },\n overwrite(fn) {\n return this.check(checks.overwrite(fn));\n },\n optional() {\n return optional(this);\n },\n exactOptional() {\n return exactOptional(this);\n },\n nullable() {\n return nullable(this);\n },\n nullish() {\n return optional(nullable(this));\n },\n nonoptional(params) {\n return nonoptional(this, params);\n },\n array() {\n return array(this);\n },\n or(arg) {\n return union([this, arg]);\n },\n and(arg) {\n return intersection(this, arg);\n },\n transform(tx) {\n return pipe(this, transform(tx));\n },\n default(d) {\n return _default(this, d);\n },\n prefault(d) {\n return prefault(this, d);\n },\n catch(params) {\n return _catch(this, params);\n },\n pipe(target) {\n return pipe(this, target);\n },\n readonly() {\n return readonly(this);\n },\n describe(description) {\n const cl = this.clone();\n core.globalRegistry.add(cl, { description });\n return cl;\n },\n meta(...args) {\n // overloaded: meta() returns the registered metadata, meta(data) returns a clone with `data` registered. The mapped type picks up the second overload, so we accept variadic any-args and return `any` to satisfy both at runtime.\n if (args.length === 0)\n return core.globalRegistry.get(this);\n const cl = this.clone();\n core.globalRegistry.add(cl, args[0]);\n return cl;\n },\n isOptional() {\n return this.safeParse(undefined).success;\n },\n isNullable() {\n return this.safeParse(null).success;\n },\n apply(fn, ...args) {\n return args.length === 0 ? fn(this) : fn(this, ...args);\n },\n // Overrides core's `~standard` to add `jsonSchema`. Must stay a prototype entry: redefining it per instance demotes instances to dictionary mode.\n get \"~standard\"() {\n return util.hide(this, \"~standard\", {\n ...core.standardProps(this),\n jsonSchema: {\n input: createStandardJSONSchemaMethod(this, \"input\"),\n output: createStandardJSONSchemaMethod(this, \"output\"),\n },\n });\n },\n set \"~standard\"(value) {\n util.own(this, \"~standard\", value);\n },\n parse: function _parse(data, params) {\n return parse.parse(this, data, params, { callee: _parse });\n },\n parseAsync: async function _parseAsync(data, params) {\n return await parse.parseAsync(this, data, params, { callee: _parseAsync });\n },\n safeParse(data, params) {\n return parse.safeParse(this, data, params);\n },\n async safeParseAsync(data, params) {\n return parse.safeParseAsync(this, data, params);\n },\n // `spa` is an alias: same function object as `safeParseAsync`, as before.\n get spa() {\n return this?.safeParseAsync;\n },\n set spa(value) {\n util.own(this, \"spa\", value);\n },\n validate(data, params) {\n return parse.validate(this, data, params);\n },\n validateAsync(data, params) {\n return parse.validateAsync(this, data, params);\n },\n encode: function _encode(data, params) {\n return parse.encode(this, data, params, { callee: _encode });\n },\n decode: function _decode(data, params) {\n return parse.decode(this, data, params, { callee: _decode });\n },\n encodeAsync: async function _encodeAsync(data, params) {\n return await parse.encodeAsync(this, data, params, { callee: _encodeAsync });\n },\n decodeAsync: async function _decodeAsync(data, params) {\n return await parse.decodeAsync(this, data, params, { callee: _decodeAsync });\n },\n safeEncode(data, params) {\n return parse.safeEncode(this, data, params);\n },\n safeDecode(data, params) {\n return parse.safeDecode(this, data, params);\n },\n async safeEncodeAsync(data, params) {\n return parse.safeEncodeAsync(this, data, params);\n },\n async safeDecodeAsync(data, params) {\n return parse.safeDecodeAsync(this, data, params);\n },\n toJSONSchema(params) {\n return createToJSONSchemaMethod(this, {})(params);\n },\n // Reads through to the registry on every access, so it must not cache.\n get description() {\n return core.globalRegistry.get(this)?.description;\n },\n // No setter: `schema._def = x` throws, as it did when `_def` was a non-writable own property.\n get _def() {\n return this._zod.def;\n },\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.stringProcessor(inst, ctx, json, params);\n}, \n/*@__PURE__*/ util.derived({\n format: (inst) => processors.aggregateChecks(inst).format ?? null,\n minLength: (inst) => processors.aggregateChecks(inst).minimum ?? null,\n maxLength: (inst) => processors.aggregateChecks(inst).maximum ?? null,\n}, {\n regex(...args) {\n return this.check(checks.regex(...args));\n },\n includes(...args) {\n return this.check(checks.includes(...args));\n },\n startsWith(...args) {\n return this.check(checks.startsWith(...args));\n },\n endsWith(...args) {\n return this.check(checks.endsWith(...args));\n },\n min(...args) {\n return this.check(checks.minLength(...args));\n },\n max(...args) {\n return this.check(checks.maxLength(...args));\n },\n length(...args) {\n return this.check(checks.length(...args));\n },\n nonempty(...args) {\n return this.check(checks.minLength(1, ...args));\n },\n lowercase(params) {\n return this.check(checks.lowercase(params));\n },\n uppercase(params) {\n return this.check(checks.uppercase(params));\n },\n trim() {\n return this.check(checks.trim());\n },\n normalize(...args) {\n return this.check(checks.normalize(...args));\n },\n toLowerCase() {\n return this.check(checks.toLowerCase());\n },\n toUpperCase() {\n return this.check(checks.toUpperCase());\n },\n slugify() {\n return this.check(checks.slugify());\n },\n}));\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n core.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n}, {\n email(params) {\n return this.check(core._email(ZodEmail, params));\n },\n url(params) {\n return this.check(core._url(ZodURL, params));\n },\n jwt(params) {\n return this.check(core._jwt(ZodJWT, params));\n },\n emoji(params) {\n return this.check(core._emoji(ZodEmoji, params));\n },\n guid(params) {\n return this.check(core._guid(ZodGUID, params));\n },\n uuid(params) {\n return this.check(core._uuid(ZodUUID, params));\n },\n uuidv4(params) {\n return this.check(core._uuidv4(ZodUUID, params));\n },\n uuidv6(params) {\n return this.check(core._uuidv6(ZodUUID, params));\n },\n uuidv7(params) {\n return this.check(core._uuidv7(ZodUUID, params));\n },\n nanoid(params) {\n return this.check(core._nanoid(ZodNanoID, params));\n },\n cuid(params) {\n return this.check(core._cuid(ZodCUID, params));\n },\n cuid2(params) {\n return this.check(core._cuid2(ZodCUID2, params));\n },\n ulid(params) {\n return this.check(core._ulid(ZodULID, params));\n },\n base64(params) {\n return this.check(core._base64(ZodBase64, params));\n },\n base64url(params) {\n return this.check(core._base64url(ZodBase64URL, params));\n },\n xid(params) {\n return this.check(core._xid(ZodXID, params));\n },\n ksuid(params) {\n return this.check(core._ksuid(ZodKSUID, params));\n },\n ipv4(params) {\n return this.check(core._ipv4(ZodIPv4, params));\n },\n ipv6(params) {\n return this.check(core._ipv6(ZodIPv6, params));\n },\n cidrv4(params) {\n return this.check(core._cidrv4(ZodCIDRv4, params));\n },\n cidrv6(params) {\n return this.check(core._cidrv6(ZodCIDRv6, params));\n },\n e164(params) {\n return this.check(core._e164(ZodE164, params));\n },\n datetime(params) {\n return this.check(core._isoDateTime(ZodISODateTime, params));\n },\n date(params) {\n return this.check(core._isoDate(ZodISODate, params));\n },\n time(params) {\n return this.check(core._isoTime(ZodISOTime, params));\n },\n duration(params) {\n return this.check(core._isoDuration(ZodISODuration, params));\n },\n});\nexport function string(params) {\n return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n core.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n core.$ZodISODateTime.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n core.$ZodISODate.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n core.$ZodISOTime.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n core.$ZodISODuration.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n return core._url(ZodURL, {\n protocol: regexes.httpProtocol,\n hostname: regexes.domain,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n return core._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nexport function cuid(params) {\n return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n return core._ipv4(ZodIPv4, params);\n}\nexport const ZodMAC = /*@__PURE__*/ core.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function mac(params) {\n return core._mac(ZodMAC, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n core.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n core.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n return core._e164(ZodE164, params);\n}\nexport const ZodCreditCard = /*@__PURE__*/ core.$constructor(\"ZodCreditCard\", (inst, def) => {\n core.$ZodCreditCard.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function creditCard(params) {\n return core._creditCard(ZodCreditCard, params);\n}\nexport const ZodIBAN = /*@__PURE__*/ core.$constructor(\"ZodIBAN\", (inst, def) => {\n core.$ZodIBAN.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function iban(params) {\n return core._iban(ZodIBAN, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n core.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hostname\", regexes.hostname, _params);\n}\nexport function hex(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"hex\", regexes.hex, _params);\n}\nexport function currencyCode(_params) {\n return core._stringFormat(ZodCustomStringFormat, \"currency_code\", regexes.currencyCode, _params);\n}\nexport function hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = core.regexes[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n core.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.numberProcessor(inst, ctx, json, params);\n inst.isFinite = true;\n}, \n/*@__PURE__*/ util.derived({\n minValue: (inst) => {\n const { minimum, exclusiveMinimum } = processors.aggregateChecks(inst);\n return Math.max(minimum ?? Number.NEGATIVE_INFINITY, exclusiveMinimum ?? Number.NEGATIVE_INFINITY);\n },\n maxValue: (inst) => {\n const { maximum, exclusiveMaximum } = processors.aggregateChecks(inst);\n return Math.min(maximum ?? Number.POSITIVE_INFINITY, exclusiveMaximum ?? Number.POSITIVE_INFINITY);\n },\n isInt: (inst) => {\n const { isInt, multipleOf } = processors.aggregateChecks(inst);\n return !!isInt || !!multipleOf?.some(Number.isSafeInteger);\n },\n format: (inst) => processors.aggregateChecks(inst).format ?? null,\n}, {\n gt(value, params) {\n return this.check(checks.gt(value, params));\n },\n gte(value, params) {\n return this.check(checks.gte(value, params));\n },\n min(value, params) {\n return this.check(checks.gte(value, params));\n },\n lt(value, params) {\n return this.check(checks.lt(value, params));\n },\n lte(value, params) {\n return this.check(checks.lte(value, params));\n },\n max(value, params) {\n return this.check(checks.lte(value, params));\n },\n int(params) {\n return this.check(int(params));\n },\n safe(params) {\n return this.check(int(params));\n },\n positive(params) {\n return this.check(checks.gt(0, params));\n },\n nonnegative(params) {\n return this.check(checks.gte(0, params));\n },\n negative(params) {\n return this.check(checks.lt(0, params));\n },\n nonpositive(params) {\n return this.check(checks.lte(0, params));\n },\n multipleOf(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n step(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n finite() {\n return this;\n },\n}));\nexport function number(params) {\n return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n core.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nexport function int(params) {\n return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n core.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.booleanProcessor(inst, ctx, json, params);\n});\nexport function boolean(params) {\n return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n core.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.bigintProcessor(inst, ctx, json, params);\n}, \n/*@__PURE__*/ util.derived({\n minValue: (inst) => processors.aggregateChecks(inst).minimum ?? null,\n maxValue: (inst) => processors.aggregateChecks(inst).maximum ?? null,\n format: (inst) => processors.aggregateChecks(inst).format ?? null,\n}, {\n gte(value, params) {\n return this.check(checks.gte(value, params));\n },\n min(value, params) {\n return this.check(checks.gte(value, params));\n },\n gt(value, params) {\n return this.check(checks.gt(value, params));\n },\n lt(value, params) {\n return this.check(checks.lt(value, params));\n },\n lte(value, params) {\n return this.check(checks.lte(value, params));\n },\n max(value, params) {\n return this.check(checks.lte(value, params));\n },\n positive(params) {\n return this.check(checks.gt(BigInt(0), params));\n },\n negative(params) {\n return this.check(checks.lt(BigInt(0), params));\n },\n nonpositive(params) {\n return this.check(checks.lte(BigInt(0), params));\n },\n nonnegative(params) {\n return this.check(checks.gte(BigInt(0), params));\n },\n multipleOf(value, params) {\n return this.check(checks.multipleOf(value, params));\n },\n}));\nexport function bigint(params) {\n return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n core.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\nexport function int64(params) {\n return core._int64(ZodBigIntFormat, params);\n}\nexport function uint64(params) {\n return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n core.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.symbolProcessor(inst, ctx, json, params);\n});\nexport function symbol(params) {\n return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n core.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n core.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n core.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.anyProcessor(inst, ctx, json, params);\n});\nexport function any() {\n return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n core.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unknownProcessor(inst, ctx, json, params);\n});\nexport function unknown() {\n return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n core.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.neverProcessor(inst, ctx, json, params);\n});\nexport function never(params) {\n return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n core.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n core.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(checks.gte(value, params));\n inst.max = (value, params) => inst.check(checks.lte(value, params));\n}, \n/*@__PURE__*/ util.derived({\n minDate: (inst) => {\n const { minimum } = processors.aggregateChecks(inst);\n return minimum ? new Date(minimum) : null;\n },\n maxDate: (inst) => {\n const { maximum } = processors.aggregateChecks(inst);\n return maximum ? new Date(maximum) : null;\n },\n}, {}));\nexport function date(params) {\n return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n}, {\n min(n, params) {\n return this.check(checks.minLength(n, params));\n },\n nonempty(params) {\n return this.check(checks.minLength(1, params));\n },\n max(n, params) {\n return this.check(checks.maxLength(n, params));\n },\n length(n, params) {\n return this.check(checks.length(n, params));\n },\n unwrap() {\n return this.element;\n },\n});\nexport function array(element, params) {\n return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.objectProcessor(inst, ctx, json, params);\n util.installLazyProp(inst, \"shape\", (self) => self._zod.def.shape, false);\n}, {\n keyof() {\n return _enum(Object.keys(this._zod.def.shape));\n },\n catchall(catchall) {\n // `mergeDefs` rather than a spread: spreading reads `shape`, and resolving it can mint a whole fresh subtree\n return this.clone(util.mergeDefs(this._zod.def, { catchall: catchall }));\n },\n passthrough() {\n return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));\n },\n loose() {\n return this.clone(util.mergeDefs(this._zod.def, { catchall: unknown() }));\n },\n strict() {\n return this.clone(util.mergeDefs(this._zod.def, { catchall: never() }));\n },\n strip() {\n return this.clone(util.mergeDefs(this._zod.def, { catchall: undefined }));\n },\n extend(incoming) {\n return util.extend(this, incoming);\n },\n safeExtend(incoming) {\n return util.safeExtend(this, incoming);\n },\n merge(other) {\n return util.merge(this, other);\n },\n pick(mask) {\n return util.pick(this, mask);\n },\n omit(mask) {\n return util.omit(this, mask);\n },\n partial(...args) {\n return util.partial(ZodOptional, this, args[0]);\n },\n exactPartial(...args) {\n return util.partial(ZodExactOptional, this, args[0], \"exactPartial\");\n },\n required(...args) {\n return util.required(ZodNonOptional, this, args[0]);\n },\n});\nexport function object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ...util.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ...util.normalizeParams(params),\n });\n}\n// looseObject\nexport function looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ...util.normalizeParams(params),\n });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n core.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nexport function union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodXor = /*@__PURE__*/ core.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nexport function xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options: options,\n discriminator,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n core.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.intersectionProcessor(inst, ctx, json, params);\n});\nexport function intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.tupleProcessor(inst, ctx, json, params);\n}, {\n rest(rest) {\n return this.clone({\n ...this._zod.def,\n rest: rest,\n });\n },\n partial() {\n const def = this._zod.def;\n // a refinement was authored against the full arity; partialing would run it on a shorter array\n if (def.checks?.length)\n throw new Error(\".partial() cannot be used on tuple schemas containing refinements\");\n return this.clone({\n ...def,\n items: def.items.map((item) => new ZodOptional({ type: \"optional\", innerType: item })),\n });\n },\n});\nexport function tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof core.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n if (!valueType || !valueType._zod) {\n return new ZodRecord({\n type: \"record\",\n keyType: string(),\n valueType: keyType,\n ...util.normalizeParams(valueType),\n });\n }\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n partial: true,\n });\n}\nexport function looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ...util.normalizeParams(params),\n });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(core._minSize(...args));\n inst.nonempty = (params) => inst.check(core._minSize(1, params));\n inst.max = (...args) => inst.check(core._maxSize(...args));\n inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n core.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n // reuse the parsed value set so a numeric TS enum's reverse-mapping keys stay out\n inst.options = [...inst._zod.values];\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ...util.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n core.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nexport function literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ...util.normalizeParams(params),\n });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n core.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(core._minSize(size, params));\n inst.max = (size, params) => inst.check(core._maxSize(size, params));\n inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n _ensureDefaultMemoizer();\n core.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new core.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(util.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n if (!(\"input\" in _issue))\n _issue.input = payload.value;\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(util.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n return payload;\n });\n }\n payload.value = output;\n return payload;\n };\n});\nexport function transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n core.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodExactOptional = /*@__PURE__*/ core.$constructor(\"ZodExactOptional\", (inst, def) => {\n core.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n core.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nexport function nullish(innerType) {\n return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n core.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n core.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n },\n });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n core.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n core.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n core.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : core.util.constantCatch(catchValue)),\n });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n core.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.nanProcessor(inst, ctx, json, params);\n});\nexport function nan(params) {\n return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n core.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nexport function pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nexport function invertCodec(codec) {\n const def = codec._zod.def;\n return new ZodCodec({\n type: \"pipe\",\n in: def.out,\n out: def.in,\n transform: def.reverseTransform,\n reverseTransform: def.transform,\n });\n}\nexport const ZodPreprocess = /*@__PURE__*/ core.$constructor(\"ZodPreprocess\", (inst, def) => {\n ZodPipe.init(inst, def);\n core.$ZodPreprocess.init(inst, def);\n});\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n core.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n core.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.templateLiteralProcessor(inst, ctx, json, params);\n});\nexport function templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ...util.normalizeParams(params),\n });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n core.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n core.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n core.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.functionProcessor(inst, ctx, json, params);\n});\nexport function _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n core.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => processors.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nexport function check(fn) {\n const ch = new core.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nexport function custom(fn, _params) {\n return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn, params) {\n return core._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nexport const describe = core.describe;\nexport const meta = core.meta;\nexport const ZodInstanceOf = /*@__PURE__*/ core.$constructor(\"ZodInstanceOf\", (inst, def) => {\n ZodCustom.init(inst, def);\n}, {\n properties(shape, params) {\n // asserts in place, so the narrowed output type is truthful without a wrapper\n return this.check(core._properties(shape, params));\n },\n});\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodInstanceOf({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ...util.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nexport function json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\nexport function preprocess(fn, schema) {\n return new ZodPreprocess({\n type: \"pipe\",\n in: transform(fn),\n out: schema,\n });\n}\n","import * as core from \"../core/index.js\";\nimport { ZodISODate, ZodISODateTime, ZodISODuration, ZodISOTime } from \"./schemas.js\";\nexport { ZodISODate, ZodISODateTime, ZodISODuration, ZodISOTime } from \"./schemas.js\";\nexport function datetime(params) {\n return core._isoDateTime(ZodISODateTime, params);\n}\nexport function date(params) {\n return core._isoDate(ZodISODate, params);\n}\nexport function time(params) {\n return core._isoTime(ZodISOTime, params);\n}\nexport function duration(params) {\n return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport function string(params) {\n return core._coercedString(schemas.ZodString, params);\n}\nexport function number(params) {\n return core._coercedNumber(schemas.ZodNumber, params);\n}\nexport function boolean(params) {\n return core._coercedBoolean(schemas.ZodBoolean, params);\n}\nexport function bigint(params) {\n return core._coercedBigint(schemas.ZodBigInt, params);\n}\nexport function date(params) {\n return core._coercedDate(schemas.ZodDate, params);\n}\n","import { z } from \"zod\";\n\n/** Opaque identifier (UUIDs in practice, but never parsed). */\nexport const Id = z.string().min(1).max(200);\nexport type Id = z.infer<typeof Id>;\n\n/** UTC ISO-8601 timestamp, e.g. `2026-11-07T10:24:00.000Z`. */\nexport const Timestamp = z.iso.datetime();\nexport type Timestamp = z.infer<typeof Timestamp>;\n\n/** Arbitrary JSON value (tool inputs, structured results). */\nexport const JsonValue = z.json();\nexport type JsonValue = z.infer<typeof JsonValue>;\n\n/** The three agent roles (§8.1). All are the same kind of session with different tools/prompts. */\nexport const Role = z.enum([\"orchestrator\", \"pm\", \"agent\"]);\nexport type Role = z.infer<typeof Role>;\n\n/**\n * Autonomy levels (§11.2), mapped onto each provider's native enforcement.\n * - `supervised`: every edit and command asks.\n * - `auto`: edits and normal commands in the worktree run freely; risky actions ask (default).\n * - `full`: no approvals inside the worktree.\n */\nexport const AutonomyLevel = z.enum([\"supervised\", \"auto\", \"full\"]);\nexport type AutonomyLevel = z.infer<typeof AutonomyLevel>;\n\n/** Reasoning effort. Each model advertises the subset it supports (see `ModelInfo.efforts`). */\nexport const ReasoningEffort = z.enum([\"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"]);\nexport type ReasoningEffort = z.infer<typeof ReasoningEffort>;\n\n/**\n * Provider identifier such as `claude`, `codex` or `fake`. Deliberately an open string:\n * UI and orchestration must read capability flags, never branch on the id (Principle 5).\n */\nexport const ProviderId = z.string().regex(/^[a-z][a-z0-9-]{0,39}$/);\nexport type ProviderId = z.infer<typeof ProviderId>;\n\n/** Structured error carried by events, results and entities. */\nexport const ErrorInfo = z.object({\n /** Machine-readable code, e.g. `provider_crashed`, `not_found`. */\n code: z.string().optional(),\n /** Human-readable message, safe to show in the UI (never contains tokens). */\n message: z.string(),\n /** Whether retrying the same operation may succeed. */\n retryable: z.boolean().optional(),\n /** Optional extra detail (stack trace excerpt, stderr tail). */\n detail: z.string().optional(),\n});\nexport type ErrorInfo = z.infer<typeof ErrorInfo>;\n\n/** Link to a GitHub issue. */\nexport const GitHubIssueRef = z.object({\n number: z.int().positive(),\n url: z.url(),\n title: z.string().optional(),\n});\nexport type GitHubIssueRef = z.infer<typeof GitHubIssueRef>;\n\n/** Link to a GitHub pull request. */\nexport const GitHubPrRef = z.object({\n number: z.int().positive(),\n url: z.url(),\n state: z.enum([\"draft\", \"open\", \"closed\", \"merged\"]),\n title: z.string().optional(),\n});\nexport type GitHubPrRef = z.infer<typeof GitHubPrRef>;\n\n/** Hours of the day during which something must not run or speak, e.g. `22:00`-`07:00`. */\nexport const QuietHours = z.object({\n start: z.string().regex(/^([01]\\d|2[0-3]):[0-5]\\d$/),\n end: z.string().regex(/^([01]\\d|2[0-3]):[0-5]\\d$/),\n /** IANA timezone; defaults to the machine's timezone when omitted. */\n timezone: z.string().optional(),\n});\nexport type QuietHours = z.infer<typeof QuietHours>;\n","import { z } from \"zod\";\nimport { Id, Timestamp } from \"./common\";\n\n/**\n * Agent configuration screens (§12.4): each provider's own memory files, skills, subagents\n * and MCP servers, edited in place in their native files with a diff preview and a backup\n * before every overwrite or delete. Routes live under `/api/agent-config`.\n */\n\nexport const AgentConfigProvider = z.enum([\"claude\", \"codex\"]);\nexport type AgentConfigProvider = z.infer<typeof AgentConfigProvider>;\n\n/**\n * - `memory`: CLAUDE.md / CLAUDE.local.md / AGENTS.md files.\n * - `rule`: `.claude/rules/**.md`.\n * - `auto_memory`: files in Claude's auto-memory folder (`MEMORY.md` is the index).\n * - `skill`: a skill's `SKILL.md`. - `subagent`: a subagent definition.\n */\nexport const AgentConfigKind = z.enum([\"memory\", \"rule\", \"auto_memory\", \"skill\", \"subagent\"]);\nexport type AgentConfigKind = z.infer<typeof AgentConfigKind>;\n\n/** `user`: the user's home config. `project`: shared in the repo. `local`: personal, per project. */\nexport const AgentConfigScope = z.enum([\"user\", \"project\", \"local\"]);\nexport type AgentConfigScope = z.infer<typeof AgentConfigScope>;\n\n/**\n * Where a file lives: `home` (relative to the user's home), `project` (relative to a\n * project's checkout) or `auto_memory` (relative to the project's Claude auto-memory folder).\n * Only known agent-config locations are accepted (CLAUDE.md, AGENTS.md, rules, skills,\n * subagents, auto memory); anything else is refused.\n */\nexport const AgentConfigLocator = z.object({\n root: z.enum([\"home\", \"project\", \"auto_memory\"]),\n /** Required for `project` and `auto_memory`. */\n projectId: Id.optional(),\n /** Relative to the root, `/`-separated. */\n path: z.string().min(1).max(1_000),\n});\nexport type AgentConfigLocator = z.infer<typeof AgentConfigLocator>;\n\n/** One discovered file. */\nexport const AgentConfigFile = AgentConfigLocator.extend({\n provider: AgentConfigProvider,\n kind: AgentConfigKind,\n scope: AgentConfigScope,\n /** Display name: the file name, or the skill/subagent name. */\n name: z.string(),\n /** `description` from the front matter (skills, subagents). */\n description: z.string().optional(),\n absolutePath: z.string(),\n exists: z.boolean(),\n sizeBytes: z.int().nonnegative(),\n modifiedAt: Timestamp.nullable(),\n /** Loaded only when the agent reads files in that folder (nested CLAUDE.md). */\n onDemand: z.boolean().optional(),\n});\nexport type AgentConfigFile = z.infer<typeof AgentConfigFile>;\n\n/** `GET /api/agent-config/files?projectId=&provider=&kind=`. */\nexport const AgentConfigListQuery = z.object({\n projectId: Id.optional(),\n provider: AgentConfigProvider.optional(),\n kind: AgentConfigKind.optional(),\n});\nexport type AgentConfigListQuery = z.infer<typeof AgentConfigListQuery>;\n\nexport const AgentConfigListResponse = z.object({\n files: z.array(AgentConfigFile),\n /** Claude's auto-memory folder for the project (when `projectId` was given). */\n autoMemoryDir: z.string().nullable(),\n});\nexport type AgentConfigListResponse = z.infer<typeof AgentConfigListResponse>;\n\n/** `GET /api/agent-config/file?root=&projectId=&path=`. Missing files read as empty. */\nexport const AgentConfigFileContent = AgentConfigLocator.extend({\n absolutePath: z.string(),\n exists: z.boolean(),\n content: z.string(),\n sha256: z.string().nullable(),\n});\nexport type AgentConfigFileContent = z.infer<typeof AgentConfigFileContent>;\n\n/**\n * `PUT /api/agent-config/file` (create or overwrite) and `POST /api/agent-config/file`\n * (create only, 409 `file_exists` if present). `expectedSha256` guards against overwriting\n * a file that changed since the editor loaded it (409 `file_changed`).\n */\nexport const AgentConfigWriteRequest = AgentConfigLocator.extend({\n content: z.string().max(2 * 1024 * 1024),\n expectedSha256: z.string().nullable().optional(),\n});\nexport type AgentConfigWriteRequest = z.infer<typeof AgentConfigWriteRequest>;\n\n/** Result of a write or delete; `backupPath` is the copy taken first (null for new files). */\nexport const AgentConfigWriteResponse = z.object({\n file: AgentConfigFileContent,\n backupPath: z.string().nullable(),\n});\nexport type AgentConfigWriteResponse = z.infer<typeof AgentConfigWriteResponse>;\n\n/** `DELETE /api/agent-config/file?root=&projectId=&path=` (`&folder=1` deletes a skill folder). */\nexport const AgentConfigDeleteQuery = AgentConfigLocator.extend({\n folder: z.enum([\"0\", \"1\"]).optional(),\n});\nexport type AgentConfigDeleteQuery = z.infer<typeof AgentConfigDeleteQuery>;\n\nexport const AgentConfigDeleteResponse = z.object({\n deleted: z.boolean(),\n backupPath: z.string().nullable(),\n});\nexport type AgentConfigDeleteResponse = z.infer<typeof AgentConfigDeleteResponse>;\n\n/** A unified diff preview of a proposed change. */\nexport const AgentConfigDiff = z.object({\n absolutePath: z.string(),\n exists: z.boolean(),\n patch: z.string(),\n additions: z.int().nonnegative(),\n deletions: z.int().nonnegative(),\n changed: z.boolean(),\n});\nexport type AgentConfigDiff = z.infer<typeof AgentConfigDiff>;\n\n/** `POST /api/agent-config/diff`: preview writing `content` (body: `AgentConfigWriteRequest`). */\nexport const AgentConfigDiffRequest = AgentConfigLocator.extend({\n content: z.string().max(2 * 1024 * 1024),\n});\nexport type AgentConfigDiffRequest = z.infer<typeof AgentConfigDiffRequest>;\n\n// ------------------------------------------------------------------------- MCP servers\n\n/** Where an MCP server is configured. */\nexport const McpConfigScope = z.enum([\"user\", \"local\", \"project\"]);\nexport type McpConfigScope = z.infer<typeof McpConfigScope>;\n\n/** A provider-neutral MCP server definition. Unknown native fields are kept in `extra`. */\nexport const McpServerSpec = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"stdio\"),\n command: z.string().min(1),\n args: z.array(z.string()).optional(),\n env: z.record(z.string(), z.string()).optional(),\n cwd: z.string().optional(),\n enabled: z.boolean().optional(),\n extra: z.record(z.string(), z.unknown()).optional(),\n }),\n z.object({\n type: z.enum([\"http\", \"sse\"]),\n url: z.string().min(1),\n headers: z.record(z.string(), z.string()).optional(),\n /** Codex: name of the environment variable that holds a bearer token. */\n bearerTokenEnvVar: z.string().optional(),\n enabled: z.boolean().optional(),\n extra: z.record(z.string(), z.unknown()).optional(),\n }),\n]);\nexport type McpServerSpec = z.infer<typeof McpServerSpec>;\n\n/** One configured MCP server. `codeden` entries are CodeDen's own server (read-only). */\nexport const McpServerEntry = z.object({\n provider: z.enum([\"claude\", \"codex\", \"codeden\"]),\n scope: McpConfigScope,\n name: z.string(),\n spec: McpServerSpec,\n /** The native file it is defined in. */\n file: z.string(),\n /** Project the entry belongs to (`local` and `project` scopes). */\n projectId: Id.nullable(),\n});\nexport type McpServerEntry = z.infer<typeof McpServerEntry>;\n\n/** `GET /api/agent-config/mcp?projectId=`. */\nexport const McpServerListResponse = z.object({ servers: z.array(McpServerEntry) });\nexport type McpServerListResponse = z.infer<typeof McpServerListResponse>;\n\n/**\n * Target of an MCP edit. Claude: `user` (~/.claude.json), `local` (~/.claude.json, this\n * project) and `project` (`.mcp.json`). Codex: `user` (~/.codex/config.toml).\n */\nexport const McpServerTarget = z.object({\n provider: AgentConfigProvider,\n scope: McpConfigScope,\n projectId: Id.optional(),\n name: z\n .string()\n .min(1)\n .max(100)\n .regex(/^[A-Za-z0-9_.-]+$/),\n});\nexport type McpServerTarget = z.infer<typeof McpServerTarget>;\n\n/** `PUT /api/agent-config/mcp`: add or replace one server (other settings are kept). */\nexport const McpServerUpsertRequest = McpServerTarget.extend({ spec: McpServerSpec });\nexport type McpServerUpsertRequest = z.infer<typeof McpServerUpsertRequest>;\n\n/** `POST /api/agent-config/mcp/diff`: preview an upsert (with `spec`) or a removal (without). */\nexport const McpServerDiffRequest = McpServerTarget.extend({ spec: McpServerSpec.optional() });\nexport type McpServerDiffRequest = z.infer<typeof McpServerDiffRequest>;\n\n/** Result of an MCP upsert or delete. */\nexport const McpServerWriteResponse = z.object({\n file: z.string(),\n backupPath: z.string().nullable(),\n servers: z.array(McpServerEntry),\n});\nexport type McpServerWriteResponse = z.infer<typeof McpServerWriteResponse>;\n\n// ------------------------------------------------------------------------- what's loaded\n\n/** A skill folder (its `SKILL.md`). */\nexport const AgentSkill = z.object({\n provider: AgentConfigProvider,\n scope: AgentConfigScope,\n name: z.string(),\n description: z.string().optional(),\n file: AgentConfigFile,\n});\nexport type AgentSkill = z.infer<typeof AgentSkill>;\n\n/**\n * `GET /api/sessions/:id/agent-config/loaded`: what the session's provider loads into its\n * context from its working directory, in load order. Computed from each provider's discovery\n * rules (not reported by the provider).\n */\nexport const LoadedAgentConfig = z.object({\n sessionId: Id,\n provider: z.string(),\n cwd: z.string(),\n /** Memory, rule and auto-memory files that exist, broadest scope first. */\n memory: z.array(AgentConfigFile),\n skills: z.array(AgentSkill),\n subagents: z.array(AgentConfigFile),\n /** Enabled MCP servers, including CodeDen's own. */\n mcpServers: z.array(McpServerEntry),\n});\nexport type LoadedAgentConfig = z.infer<typeof LoadedAgentConfig>;\n","import { z } from \"zod\";\nimport { Id } from \"./common\";\n\n/** Where the bytes of an attachment come from. */\nexport const AttachmentSource = z.discriminatedUnion(\"type\", [\n /** Inline base64 data (pasted images). */\n z.object({ type: z.literal(\"base64\"), data: z.base64() }),\n /** A file on the runner's filesystem. */\n z.object({ type: z.literal(\"path\"), path: z.string().min(1) }),\n /** A stored CodeDen artifact (§6 `artifacts/`). */\n z.object({ type: z.literal(\"artifact\"), artifactId: Id }),\n]);\nexport type AttachmentSource = z.infer<typeof AttachmentSource>;\n\n/** Image MIME types accepted as agent input. */\nexport const ImageMediaType = z.enum([\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"]);\nexport type ImageMediaType = z.infer<typeof ImageMediaType>;\n\n/** An attachment on a user message: an image, or a file reference. */\nexport const Attachment = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"image\"),\n mediaType: ImageMediaType,\n source: AttachmentSource,\n name: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"file\"),\n /** Path on the runner, usually inside the session worktree. */\n path: z.string().min(1),\n name: z.string().optional(),\n mediaType: z.string().optional(),\n }),\n]);\nexport type Attachment = z.infer<typeof Attachment>;\n\n/** Input that starts or steers a turn: text plus optional image/file attachments. */\nexport const UserInput = z.object({\n text: z.string(),\n attachments: z.array(Attachment).default([]),\n});\nexport type UserInput = z.infer<typeof UserInput>;\n/** Input shape accepted before defaults are applied (`attachments` optional). */\nexport type UserInputInit = z.input<typeof UserInput>;\n","import { z } from \"zod\";\nimport { ErrorInfo, Id, JsonValue } from \"./common\";\nimport { UserInput } from \"./input\";\n\n/**\n * Lifecycle status of an item. For `approval_request` and `user_question`,\n * `in_progress` means \"waiting on a response\".\n */\nexport const ItemStatus = z.enum([\"in_progress\", \"completed\", \"failed\", \"declined\", \"cancelled\"]);\nexport type ItemStatus = z.infer<typeof ItemStatus>;\n\nconst itemBase = {\n /** Unique within the session. */\n id: Id,\n status: ItemStatus,\n};\n\n/** A message the user (or a PM/orchestrator acting as the user) sent. */\nexport const UserMessageItem = z.object({\n ...itemBase,\n kind: z.literal(\"user_message\"),\n input: UserInput,\n});\n\n/** Assistant text (markdown). Streamed via `item.delta` `{ type: \"text\" }`. */\nexport const AssistantMessageItem = z.object({\n ...itemBase,\n kind: z.literal(\"assistant_message\"),\n text: z.string(),\n});\n\n/** Model reasoning, when the provider exposes it. */\nexport const ReasoningItem = z.object({\n ...itemBase,\n kind: z.literal(\"reasoning\"),\n text: z.string(),\n summary: z.string().optional(),\n /** True when the provider hides the content and only reports that reasoning happened. */\n redacted: z.boolean().optional(),\n});\n\n/** Preview of a tool's output. Large outputs are truncated and fetched on demand (§6). */\nexport const ToolOutput = z.object({\n text: z.string(),\n truncated: z.boolean().default(false),\n totalBytes: z.int().nonnegative().optional(),\n /** Artifact holding the full output when truncated. */\n artifactId: Id.optional(),\n});\nexport type ToolOutput = z.infer<typeof ToolOutput>;\n\n/** What kind of work a tool call performs; drives rendering, never provider-specific. */\nexport const ToolKind = z.enum([\n \"command\",\n \"file_edit\",\n \"file_read\",\n \"search\",\n \"web\",\n \"mcp\",\n \"browser\",\n \"other\",\n]);\nexport type ToolKind = z.infer<typeof ToolKind>;\n\nconst toolCallBase = {\n ...itemBase,\n kind: z.literal(\"tool_call\"),\n /** Provider-native tool name, e.g. `Bash`, `apply_patch`, `mcp__codeden__finish`. */\n toolName: z.string(),\n /** Short human title, e.g. `Run pnpm test`. */\n title: z.string().optional(),\n /** Raw tool input as JSON. */\n input: JsonValue.optional(),\n output: ToolOutput.optional(),\n error: ErrorInfo.optional(),\n durationMs: z.int().nonnegative().optional(),\n};\n\n/** A single file change produced by a `file_edit` tool call. */\nexport const FileChange = z.object({\n path: z.string(),\n change: z.enum([\"add\", \"modify\", \"delete\", \"rename\"]),\n previousPath: z.string().optional(),\n /** Unified diff, when available. */\n diff: z.string().optional(),\n additions: z.int().nonnegative().optional(),\n deletions: z.int().nonnegative().optional(),\n});\nexport type FileChange = z.infer<typeof FileChange>;\n\n/** Tool call item; a nested discriminated union on `toolKind`. */\nexport const ToolCallItem = z.discriminatedUnion(\"toolKind\", [\n z.object({\n ...toolCallBase,\n toolKind: z.literal(\"command\"),\n command: z.string(),\n cwd: z.string().optional(),\n exitCode: z.int().nullable().optional(),\n }),\n z.object({\n ...toolCallBase,\n toolKind: z.literal(\"file_edit\"),\n changes: z.array(FileChange),\n }),\n z.object({\n ...toolCallBase,\n toolKind: z.literal(\"file_read\"),\n path: z.string(),\n startLine: z.int().positive().optional(),\n endLine: z.int().positive().optional(),\n }),\n z.object({\n ...toolCallBase,\n toolKind: z.literal(\"search\"),\n query: z.string(),\n path: z.string().optional(),\n matchCount: z.int().nonnegative().optional(),\n }),\n z.object({\n ...toolCallBase,\n toolKind: z.literal(\"web\"),\n url: z.string().optional(),\n query: z.string().optional(),\n }),\n z.object({\n ...toolCallBase,\n toolKind: z.literal(\"mcp\"),\n server: z.string(),\n tool: z.string(),\n }),\n z.object({\n ...toolCallBase,\n toolKind: z.literal(\"browser\"),\n action: z.string(),\n url: z.string().optional(),\n }),\n z.object({ ...toolCallBase, toolKind: z.literal(\"other\") }),\n]);\nexport type ToolCallItem = z.infer<typeof ToolCallItem>;\n\n/** A proposed plan (markdown), e.g. from plan mode. */\nexport const PlanItem = z.object({\n ...itemBase,\n kind: z.literal(\"plan\"),\n text: z.string(),\n});\n\nexport const TodoStatus = z.enum([\"pending\", \"in_progress\", \"completed\"]);\nexport type TodoStatus = z.infer<typeof TodoStatus>;\n\n/** The agent's working todo list. Updated in place via `item.updated`. */\nexport const TodoListItem = z.object({\n ...itemBase,\n kind: z.literal(\"todo_list\"),\n todos: z.array(\n z.object({\n id: z.string().optional(),\n text: z.string(),\n status: TodoStatus,\n }),\n ),\n});\n\n/** Decisions a user (or policy) can make on an approval request. */\nexport const ApprovalDecision = z.enum([\"allow_once\", \"allow_session\", \"deny\"]);\nexport type ApprovalDecision = z.infer<typeof ApprovalDecision>;\n\n/** What an approval request is about. */\nexport const ApprovalAction = z.enum([\n \"command\",\n \"file_change\",\n \"outside_worktree\",\n \"network\",\n \"git_destructive\",\n \"secrets\",\n \"tool\",\n \"other\",\n]);\nexport type ApprovalAction = z.infer<typeof ApprovalAction>;\n\n/**\n * An approval the agent is waiting on (§11.2). Surfaces in the transcript, the parent thread\n * (for subagents) and the inbox. Answered with `RuntimeResponse { kind: \"approval\" }`.\n */\nexport const ApprovalRequestItem = z.object({\n ...itemBase,\n kind: z.literal(\"approval_request\"),\n /** Id passed back to `ProviderSession.respond`. */\n requestId: Id,\n action: ApprovalAction,\n title: z.string(),\n /** Why this was flagged as risky. */\n reason: z.string().optional(),\n command: z.string().optional(),\n cwd: z.string().optional(),\n paths: z.array(z.string()).optional(),\n toolName: z.string().optional(),\n toolInput: JsonValue.optional(),\n /** The tool call item this approval gates, if any. */\n toolCallItemId: Id.optional(),\n options: z.array(ApprovalDecision).default([\"allow_once\", \"allow_session\", \"deny\"]),\n decision: ApprovalDecision.optional(),\n decidedBy: z.enum([\"user\", \"policy\", \"pm\"]).optional(),\n});\n\n/** One question in a `user_question` item. */\nexport const UserQuestion = z.object({\n id: Id,\n /** Short label (a few words) shown as a chip/header. */\n header: z.string().optional(),\n question: z.string(),\n options: z.array(z.object({ label: z.string(), description: z.string().optional() })).default([]),\n multiSelect: z.boolean().default(false),\n allowFreeText: z.boolean().default(true),\n});\nexport type UserQuestion = z.infer<typeof UserQuestion>;\n\n/** Questions the agent asks the user. Answered with `RuntimeResponse { kind: \"answer\" }`. */\nexport const UserQuestionItem = z.object({\n ...itemBase,\n kind: z.literal(\"user_question\"),\n requestId: Id,\n questions: z.array(UserQuestion).min(1),\n /** Answers keyed by question id, once answered. */\n answers: z.record(z.string(), z.array(z.string())).optional(),\n /**\n * Asked through CodeDen's `ask_user` tool rather than the provider: stays open after its\n * turn ends, and an answer that arrives after the tool returned is sent as a new message.\n */\n deferred: z.boolean().optional(),\n});\n\n/** A subagent run; its transcript lives in the child thread `childThreadId` (§7.3). */\nexport const SubagentItem = z.object({\n ...itemBase,\n kind: z.literal(\"subagent\"),\n childThreadId: Id,\n /** Subagent type/name, e.g. `code-reviewer`. */\n agentType: z.string().optional(),\n description: z.string().optional(),\n prompt: z.string().optional(),\n /** Final result summary when completed. */\n summary: z.string().optional(),\n});\n\n/** One suggested next prompt (§7.5). */\nexport const FollowupSuggestion = z.object({\n prompt: z.string().min(1),\n /** Short chip label; the UI falls back to a truncated prompt. */\n label: z.string().optional(),\n});\nexport type FollowupSuggestion = z.infer<typeof FollowupSuggestion>;\n\n/** Suggested follow-up prompts, stored on the turn and shown as chips (§7.5). */\nexport const FollowupsItem = z.object({\n ...itemBase,\n kind: z.literal(\"followups\"),\n /** `agent`: via the `suggest_followups` tool; `utility`: fallback from the utility model. */\n source: z.enum([\"agent\", \"utility\"]),\n suggestions: z.array(FollowupSuggestion).min(1).max(4),\n});\n\n/** Informational notice inside a transcript (e.g. \"context compacted\"). */\nexport const NoticeItem = z.object({\n ...itemBase,\n kind: z.literal(\"notice\"),\n level: z.enum([\"info\", \"warning\"]),\n code: z.string().optional(),\n message: z.string(),\n data: JsonValue.optional(),\n});\n\n/** An error shown inline in the transcript (the turn may still continue). */\nexport const ErrorItem = z.object({\n ...itemBase,\n kind: z.literal(\"error\"),\n error: ErrorInfo,\n});\n\n/** Every item kind in a turn (§7.3). Discriminated on `kind` (tool calls also on `toolKind`). */\nexport const Item = z.discriminatedUnion(\"kind\", [\n UserMessageItem,\n AssistantMessageItem,\n ReasoningItem,\n ToolCallItem,\n PlanItem,\n TodoListItem,\n ApprovalRequestItem,\n UserQuestionItem,\n SubagentItem,\n FollowupsItem,\n NoticeItem,\n ErrorItem,\n]);\nexport type Item = z.infer<typeof Item>;\nexport type ItemKind = Item[\"kind\"];\n/** Narrow `Item` to one kind: `ItemOf<\"subagent\">`. */\nexport type ItemOf<K extends ItemKind> = Extract<Item, { kind: K }>;\n\n/** Incremental update to an in-progress item, carried by `item.delta`. */\nexport const ItemDelta = z.discriminatedUnion(\"type\", [\n /** Append to `text` of assistant_message / reasoning / plan. */\n z.object({ type: z.literal(\"text\"), text: z.string() }),\n /** Append to a reasoning item's `summary`. */\n z.object({ type: z.literal(\"reasoning_summary\"), text: z.string() }),\n /** Append to a tool call's `output.text` (live command output). */\n z.object({\n type: z.literal(\"tool_output\"),\n text: z.string(),\n stream: z.enum([\"stdout\", \"stderr\"]).optional(),\n }),\n /** Streaming tool input JSON fragment (display only). */\n z.object({ type: z.literal(\"tool_input\"), partialJson: z.string() }),\n]);\nexport type ItemDelta = z.infer<typeof ItemDelta>;\n","import { z } from \"zod\";\nimport { ErrorInfo, Id } from \"./common\";\nimport { Item, ItemDelta } from \"./items\";\n\n/**\n * Token/cost/rate-limit usage. Providers fill in what they report; everything is optional.\n * With a `turnId`, token counts and cost are that turn's own usage so far (never a running\n * session total). `inputTokens` excludes cache reads and writes; `reasoningTokens` is\n * already included in `outputTokens`.\n */\nexport const Usage = z.object({\n inputTokens: z.int().nonnegative().optional(),\n outputTokens: z.int().nonnegative().optional(),\n cachedInputTokens: z.int().nonnegative().optional(),\n cacheWriteTokens: z.int().nonnegative().optional(),\n reasoningTokens: z.int().nonnegative().optional(),\n /** Tokens currently occupying the context window. */\n contextTokens: z.int().nonnegative().optional(),\n contextWindow: z.int().positive().optional(),\n /** Cost in USD where the provider reports it. */\n costUsd: z.number().nonnegative().optional(),\n rateLimits: z\n .array(\n z.object({\n /** Window name, e.g. `5h`, `weekly`. */\n id: z.string(),\n status: z.enum([\"ok\", \"warning\", \"limited\"]),\n usedPercent: z.number().min(0).max(100).optional(),\n resetsAt: z.iso.datetime().optional(),\n }),\n )\n .optional(),\n});\nexport type Usage = z.infer<typeof Usage>;\n\n/** A conversation thread. Root threads have no parent; subagent threads link to their spawner. */\nexport const ThreadInfo = z.object({\n id: Id,\n parentThreadId: Id.optional(),\n /** The `subagent` item in the parent thread that spawned this thread. */\n parentItemId: Id.optional(),\n title: z.string().optional(),\n agentType: z.string().optional(),\n});\nexport type ThreadInfo = z.infer<typeof ThreadInfo>;\n\nconst threadScoped = { threadId: Id };\nconst turnScoped = { threadId: Id, turnId: Id };\n\n/** Session-level metadata changed (resume token assigned, model switched, title generated). */\nexport const SessionUpdatedEvent = z.object({\n type: z.literal(\"session.updated\"),\n resumeToken: z.string().optional(),\n model: z.string().optional(),\n title: z.string().optional(),\n});\n\n/** A thread came into existence. Emitted for the root thread and every subagent thread. */\nexport const ThreadStartedEvent = z.object({\n type: z.literal(\"thread.started\"),\n thread: ThreadInfo,\n});\n\nexport const TurnStartedEvent = z.object({ type: z.literal(\"turn.started\"), ...turnScoped });\n\nexport const TurnCompletedEvent = z.object({\n type: z.literal(\"turn.completed\"),\n ...turnScoped,\n /** Provider stop reason, e.g. `end_turn`, `max_tokens`. */\n stopReason: z.string().optional(),\n});\n\nexport const TurnFailedEvent = z.object({\n type: z.literal(\"turn.failed\"),\n ...turnScoped,\n error: ErrorInfo,\n});\n\nexport const TurnInterruptedEvent = z.object({\n type: z.literal(\"turn.interrupted\"),\n ...turnScoped,\n /** `user`: interrupt button; `runner_restart`: cut off by a runner drain/crash; `provider`: provider-side. */\n reason: z.enum([\"user\", \"runner_restart\", \"provider\"]),\n});\n\n/** A new item appeared in a turn (possibly still in progress). */\nexport const ItemStartedEvent = z.object({\n type: z.literal(\"item.started\"),\n ...turnScoped,\n item: Item,\n});\n\n/** Incremental content for an in-progress item. */\nexport const ItemDeltaEvent = z.object({\n type: z.literal(\"item.delta\"),\n ...turnScoped,\n itemId: Id,\n delta: ItemDelta,\n});\n\n/** Full replacement of an item's state while it is still in progress (todo list edits, etc.). */\nexport const ItemUpdatedEvent = z.object({\n type: z.literal(\"item.updated\"),\n ...turnScoped,\n item: Item,\n});\n\n/** Final state of an item. Authoritative: replaces anything accumulated from deltas. */\nexport const ItemCompletedEvent = z.object({\n type: z.literal(\"item.completed\"),\n ...turnScoped,\n item: Item,\n});\n\nexport const UsageUpdatedEvent = z.object({\n type: z.literal(\"usage.updated\"),\n ...threadScoped,\n turnId: Id.optional(),\n usage: Usage,\n});\n\n/**\n * Normalized agent event (§7.3). Every provider adapter emits exactly this stream;\n * the UI and orchestration never see provider-native shapes.\n */\nexport const AgentEvent = z.discriminatedUnion(\"type\", [\n SessionUpdatedEvent,\n ThreadStartedEvent,\n TurnStartedEvent,\n TurnCompletedEvent,\n TurnFailedEvent,\n TurnInterruptedEvent,\n ItemStartedEvent,\n ItemDeltaEvent,\n ItemUpdatedEvent,\n ItemCompletedEvent,\n UsageUpdatedEvent,\n]);\nexport type AgentEvent = z.infer<typeof AgentEvent>;\nexport type AgentEventType = AgentEvent[\"type\"];\n/** Narrow `AgentEvent` by type: `AgentEventOf<\"item.delta\">`. */\nexport type AgentEventOf<T extends AgentEventType> = Extract<AgentEvent, { type: T }>;\n\n/** All agent event type names, useful for filters. */\nexport const AGENT_EVENT_TYPES = AgentEvent.options.map(\n (o) => o.shape.type.value,\n) as readonly AgentEventType[];\n","import { z } from \"zod\";\nimport { GitHubIssueRef, GitHubPrRef, Id, JsonValue, Timestamp } from \"../common\";\n\n/** What an inbox item asks of the user (§11.1). */\nexport const InboxItemKind = z.enum([\n \"question\",\n \"approval\",\n \"pr_review\",\n \"run_failed\",\n \"triage\",\n \"automation_result\",\n \"message\",\n /** A start request that matched running work (§8.4); resolved with wait/skip/join/force. */\n \"conflict\",\n]);\nexport type InboxItemKind = z.infer<typeof InboxItemKind>;\n\nexport const InboxItemStatus = z.enum([\"open\", \"resolved\", \"dismissed\"]);\nexport type InboxItemStatus = z.infer<typeof InboxItemStatus>;\n\n/** One thing waiting on the user. Links to its session, issue and PR and is answerable in place. */\nexport const InboxItem = z.object({\n id: Id,\n kind: InboxItemKind,\n status: InboxItemStatus,\n priority: z.enum([\"low\", \"normal\", \"high\"]).default(\"normal\"),\n title: z.string(),\n body: z.string().nullable(),\n projectId: Id.nullable(),\n sessionId: Id.nullable(),\n threadId: Id.nullable(),\n /** The transcript item (approval_request / user_question) this mirrors. */\n itemId: Id.nullable(),\n /** Provider request id to answer, for approvals and questions. */\n requestId: Id.nullable(),\n issue: GitHubIssueRef.nullable(),\n pr: GitHubPrRef.nullable(),\n automationRunId: Id.nullable(),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n resolvedAt: Timestamp.nullable(),\n /** How it was resolved (decision, answers, note). */\n resolution: JsonValue.nullable(),\n});\nexport type InboxItem = z.infer<typeof InboxItem>;\n","import { z } from \"zod\";\n\n/**\n * Project autonomy modes and dark-factory mode (§10.1). Types only; the factory loop itself\n * lands in M3b.\n */\n\n/**\n * A ladder climbed one step at a time:\n * - `manual`: you find work and merge; you drive every session.\n * - `assisted` (default): you, the PM and automations find work; you merge.\n * - `autopilot`: the PM finds work; CodeDen merges when every merge check passes.\n * - `dark_factory`: the PM finds work continuously from the vision; CodeDen merges.\n */\nexport const AutonomyMode = z.enum([\"manual\", \"assisted\", \"autopilot\", \"dark_factory\"]);\nexport type AutonomyMode = z.infer<typeof AutonomyMode>;\n\n/** Default location of a project's vision file, relative to the repo root. */\nexport const DEFAULT_VISION_PATH = \".codeden/VISION.md\";\n\n/** Limits enforced by the server (never left to agent judgement) for autopilot/dark factory. */\nexport const FactoryLimits = z.object({\n maxConcurrentSessions: z.int().positive().default(2),\n maxMergesPerDay: z.int().nonnegative().default(5),\n /** Daily spend budget; either or both may be set. */\n dailyBudget: z\n .object({\n tokens: z.int().positive().optional(),\n usd: z.number().positive().optional(),\n })\n .prefault({}),\n /**\n * What counts against the daily budget: `factory` (default) is the factory's own sessions\n * (discovery, builders, reviewers, reverts); `project` is every session in the project.\n */\n budgetScope: z.enum([\"factory\", \"project\"]).default(\"factory\"),\n /** Pause the loop after this many failed merge checks or reverts in a row. */\n pauseAfterConsecutiveFailures: z.int().positive().default(3),\n /** Globs that always escalate to a human (auth, payments, migrations, infra, licensing). */\n protectedPaths: z.array(z.string()).default([]),\n /** Deploys/releases are off unless explicitly enabled. */\n allowDeploys: z.boolean().default(false),\n});\nexport type FactoryLimits = z.infer<typeof FactoryLimits>;\n\n/** State of a project's factory loop (discover -> plan -> build -> verify -> merge -> watch). */\nexport const FactoryLoopState = z.enum([\n \"idle\",\n \"discovering\",\n \"building\",\n \"verifying\",\n \"paused\",\n \"stopped\",\n]);\nexport type FactoryLoopState = z.infer<typeof FactoryLoopState>;\n","import { z } from \"zod\";\nimport { AutonomyLevel, Id, ProviderId, Timestamp } from \"../common\";\nimport { AutonomyMode, DEFAULT_VISION_PATH, FactoryLimits } from \"../factory\";\n\nconst projectBase = {\n id: Id,\n name: z.string().min(1),\n /** Short, filesystem-safe name used in worktree paths (`wt/<slug>/...`). */\n slug: z.string().regex(/^[a-z0-9][a-z0-9-]{0,39}$/),\n /** Absolute path of the main checkout. */\n path: z.string().min(1),\n defaultBranch: z.string().nullable(),\n /** Overrides the global default provider for new agent sessions. */\n defaultProvider: ProviderId.nullable(),\n /** Overrides the global default per-session autonomy level (§11.2). */\n autonomy: AutonomyLevel.nullable(),\n /** Project autonomy mode (§10.1). */\n autonomyMode: AutonomyMode.default(\"assisted\"),\n /** Vision file, relative to the repo root; required for autopilot and dark factory. */\n visionPath: z.string().min(1).default(DEFAULT_VISION_PATH),\n factoryLimits: FactoryLimits.prefault({}),\n /** Stops this project's factory loop and all its sessions. */\n killSwitch: z.boolean().default(false),\n /** IANA timezone for cron automations; machine timezone when null. */\n timezone: z.string().nullable(),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n archivedAt: Timestamp.nullable(),\n};\n\n/** GitHub repository coordinates for a `github` project. */\nexport const GitHubRepo = z.object({\n owner: z.string().min(1),\n repo: z.string().min(1),\n remoteUrl: z.string().min(1),\n defaultBranch: z.string().min(1),\n});\nexport type GitHubRepo = z.infer<typeof GitHubRepo>;\n\n/**\n * A project. `github` projects get the full issue/PR/evidence flow; `local` projects\n * (no GitHub remote) get sessions, worktrees, checkpoints, diffs and automations only (§9).\n */\nexport const Project = z.discriminatedUnion(\"kind\", [\n z.object({ ...projectBase, kind: z.literal(\"github\"), github: GitHubRepo }),\n z.object({ ...projectBase, kind: z.literal(\"local\") }),\n]);\nexport type Project = z.infer<typeof Project>;\nexport type ProjectKind = Project[\"kind\"];\n","import { z } from \"zod\";\nimport { Id, Timestamp } from \"./common\";\n\n/**\n * Situational awareness and conflict handling (§8.4). Every unit of work (a session or an\n * automation run) is described in data so the orchestrator and PMs always know what is\n * running, and starting work never silently duplicates work already in progress.\n */\n\n/** Who started a unit of work. `id` is the user/session/automation id where applicable. */\nexport const StartedBy = z.object({\n kind: z.enum([\"user\", \"orchestrator\", \"pm\", \"automation\"]),\n id: z.string().optional(),\n});\nexport type StartedBy = z.infer<typeof StartedBy>;\n\n/**\n * Stable identifier of *what* the work is, used for conflict detection:\n * `automation:security-audit`, `issue:142`, `pr:57`, or one derived from the request.\n */\nexport const WorkKey = z\n .string()\n .min(1)\n .max(200)\n .regex(/^[a-z][a-z0-9_-]*:\\S.*$/, \"Expected <kind>:<id>, e.g. issue:142\");\nexport type WorkKey = z.infer<typeof WorkKey>;\n\n/** Where the work happens: a project, optionally narrowed to paths or a named area. */\nexport const WorkScope = z.object({\n projectId: Id.nullable(),\n paths: z.array(z.string()).optional(),\n /** Free-form area, e.g. `auth`, `ui`, `dependencies`. */\n area: z.string().optional(),\n});\nexport type WorkScope = z.infer<typeof WorkScope>;\n\n/** The latest `report_progress` call. */\nexport const WorkProgress = z.object({\n text: z.string(),\n at: Timestamp,\n});\nexport type WorkProgress = z.infer<typeof WorkProgress>;\n\n/** Fields every unit of work carries (spread into `Session` and `AutomationRun`). */\nexport const workFields = {\n startedBy: StartedBy,\n /** One line describing the work. */\n purpose: z.string(),\n workKey: WorkKey,\n scope: WorkScope,\n progress: WorkProgress.nullable(),\n};\n\n/** Compact description of running or queued work, used in conflicts and status digests. */\nexport const WorkSummary = z.object({\n kind: z.enum([\"session\", \"automation_run\"]),\n /** Session id or automation run id. */\n id: Id,\n /** Session doing the work, when there is one. */\n sessionId: Id.nullable(),\n projectId: Id.nullable(),\n ...workFields,\n /** Session status or automation run status. */\n status: z.string(),\n startedAt: Timestamp,\n});\nexport type WorkSummary = z.infer<typeof WorkSummary>;\n\n/**\n * Result of anything that starts work (`start_session`, `run_automation`, scheduled triggers).\n * On `conflict` nothing was started; the caller picks a `ConflictResolution`.\n */\nexport const StartWorkResult = z.discriminatedUnion(\"status\", [\n z.object({\n status: z.literal(\"started\"),\n sessionId: Id,\n automationRunId: Id.optional(),\n }),\n z.object({\n status: z.literal(\"conflict\"),\n /** Running or queued work with the same `workKey` or an overlapping scope. */\n existing: z.array(WorkSummary).min(1),\n /** Inbox conflict item persisted for this attempt (user starts), resolvable later. */\n conflictId: Id.optional(),\n }),\n]);\nexport type StartWorkResult = z.infer<typeof StartWorkResult>;\n\n/**\n * How to proceed after a conflict:\n * - `wait`: queue behind the existing work.\n * - `skip`: don't start anything.\n * - `join`: send the request to the existing session as a follow-up.\n * - `force`: start anyway (a reason is required and recorded).\n */\nexport const ConflictResolution = z.enum([\"wait\", \"skip\", \"join\", \"force\"]);\nexport type ConflictResolution = z.infer<typeof ConflictResolution>;\n\n/** A caller's decision on a conflict, passed back when retrying the start. */\nexport const ConflictDecision = z.discriminatedUnion(\"resolution\", [\n z.object({ resolution: z.literal(\"wait\"), behindId: Id.optional() }),\n z.object({ resolution: z.literal(\"skip\") }),\n z.object({ resolution: z.literal(\"join\"), sessionId: Id }),\n z.object({ resolution: z.literal(\"force\"), reason: z.string().trim().min(1) }),\n]);\nexport type ConflictDecision = z.infer<typeof ConflictDecision>;\n\n/** Overlap policy for scheduled triggers when the previous run is still going (§8.4, §10). */\nexport const OverlapPolicy = z.enum([\"skip-if-running\", \"queue\", \"run-anyway\"]);\nexport type OverlapPolicy = z.infer<typeof OverlapPolicy>;\n\n/** An upcoming scheduled automation run (the \"Next\" in a project's Now / Next strip). */\nexport const ScheduledRun = z.object({\n automationId: Id,\n projectId: Id.nullable(),\n name: z.string(),\n workKey: WorkKey,\n at: Timestamp,\n /** True when a PM chose to skip this occurrence (`skip_next_run`). */\n skipped: z.boolean().default(false),\n});\nexport type ScheduledRun = z.infer<typeof ScheduledRun>;\n","import { z } from \"zod\";\nimport { ProviderId } from \"./common\";\n\n/** Dev-server definition in `.codeden/project.json`. */\nexport const DevServerConfig = z.object({\n /** Shell command that starts the dev server, e.g. `pnpm dev`. */\n command: z.string().min(1),\n /** Port the dev server listens on, when known (used for discovery). */\n port: z.int().min(1).max(65535).optional(),\n /** Working directory relative to the repo root. */\n cwd: z.string().optional(),\n});\nexport type DevServerConfig = z.infer<typeof DevServerConfig>;\n\n/**\n * `.codeden/project.json` at a repository root (§9). Read by the runner after a worktree\n * is created: `setup` commands run in the new worktree (output streamed as\n * `workspace.setup` events), `devServer` feeds dev-server discovery and `defaultProvider`\n * is reported back to the server. Unknown keys are ignored.\n */\nexport const ProjectConfigFile = z.object({\n /** Commands run in order in every new worktree, e.g. `pnpm install`. */\n setup: z.array(z.string().min(1)).default([]),\n /** A bare command string or a full definition. */\n devServer: z.union([z.string().min(1), DevServerConfig]).optional(),\n defaultProvider: ProviderId.optional(),\n});\nexport type ProjectConfigFile = z.infer<typeof ProjectConfigFile>;\n\n/** Normalize `devServer` to its object form. */\nexport function devServerOf(config: ProjectConfigFile): DevServerConfig | undefined {\n const value = config.devServer;\n if (value === undefined) return undefined;\n return typeof value === \"string\" ? { command: value } : value;\n}\n","import { z } from \"zod\";\nimport { AutonomyLevel, Id, ProviderId, ReasoningEffort, Role, Timestamp } from \"./common\";\nimport { ApprovalDecision } from \"./items\";\n\n/**\n * What a provider can do (§7.1). The UI and orchestration read these flags and never branch\n * on the provider id (Principle 5).\n */\nexport const ProviderCapabilities = z.object({\n /** Sessions can be resumed from `resumeToken()`. */\n resume: z.boolean(),\n /** Input can be injected into a running turn. */\n steer: z.boolean(),\n interrupt: z.boolean(),\n /** Tool approvals can be routed to CodeDen. */\n approvals: z.boolean(),\n /** The agent can ask structured questions. */\n userQuestions: z.boolean(),\n /** Subagents surface as child threads. */\n subagents: z.boolean(),\n /** The conversation can be rolled back to an earlier turn. */\n rollback: z.boolean(),\n fork: z.boolean(),\n /** Image attachments are accepted as input. */\n images: z.boolean(),\n planMode: z.boolean(),\n reasoningEffort: z.boolean(),\n /** MCP servers can be injected (required for CodeDen tools). */\n mcp: z.boolean(),\n skills: z.boolean(),\n});\nexport type ProviderCapabilities = z.infer<typeof ProviderCapabilities>;\n\n/** A model a provider offers. */\nexport const ModelInfo = z.object({\n id: z.string(),\n label: z.string(),\n description: z.string().optional(),\n efforts: z.array(ReasoningEffort).default([]),\n defaultEffort: ReasoningEffort.optional(),\n isDefault: z.boolean().optional(),\n contextWindow: z.int().positive().optional(),\n});\nexport type ModelInfo = z.infer<typeof ModelInfo>;\n\n/** Static description of a provider adapter as loaded by a runner. */\nexport const ProviderInfo = z.object({\n id: ProviderId,\n displayName: z.string(),\n capabilities: ProviderCapabilities,\n models: z.array(ModelInfo).default([]),\n});\nexport type ProviderInfo = z.infer<typeof ProviderInfo>;\n\n/** A problem found while detecting a provider, with the one action that fixes it (§14). */\nexport const ProviderIssue = z.object({\n code: z.enum([\n \"not_installed\",\n \"not_logged_in\",\n \"login_expiring\",\n \"version_unsupported\",\n \"detect_failed\",\n ]),\n message: z.string(),\n fix: z\n .object({\n kind: z.enum([\"install\", \"login\", \"upgrade\"]),\n /** Command to run (in an embedded terminal), e.g. `claude auth login`. */\n command: z.string(),\n })\n .optional(),\n});\nexport type ProviderIssue = z.infer<typeof ProviderIssue>;\n\n/** Result of `ProviderAdapter.detect()`: installed? version? logged in? (§14). */\nexport const ProviderStatus = z.object({\n providerId: ProviderId,\n installed: z.boolean(),\n version: z.string().nullable(),\n executablePath: z.string().nullable(),\n /** `null` when login state could not be determined. */\n loggedIn: z.boolean().nullable(),\n authMethod: z.string().nullable(),\n account: z.string().nullable(),\n loginExpiresAt: Timestamp.nullable(),\n /** False when the installed version is outside the adapter's tested range. */\n supported: z.boolean(),\n issues: z.array(ProviderIssue).default([]),\n checkedAt: Timestamp,\n});\nexport type ProviderStatus = z.infer<typeof ProviderStatus>;\n\n/** An MCP server handed to a provider session (CodeDen's local proxy, user servers). */\nexport const McpServerConfig = z.discriminatedUnion(\"transport\", [\n z.object({\n transport: z.literal(\"http\"),\n name: z.string(),\n url: z.url(),\n headers: z.record(z.string(), z.string()).optional(),\n /** Max seconds one tool call may take (long-running tools such as `ask_user`). */\n toolTimeoutSec: z.int().positive().max(86_400).optional(),\n /** Tools of this server run without approval prompts (CodeDen's own tools). */\n trusted: z.boolean().optional(),\n }),\n z.object({\n transport: z.literal(\"stdio\"),\n name: z.string(),\n command: z.string(),\n args: z.array(z.string()).default([]),\n env: z.record(z.string(), z.string()).optional(),\n }),\n]);\nexport type McpServerConfig = z.infer<typeof McpServerConfig>;\n\n/** Options for `ProviderAdapter.openSession`. */\nexport const SessionOptions = z.object({\n /** CodeDen session id. */\n sessionId: Id,\n role: Role,\n /** Working directory (worktree, repo root, or the orchestrator folder). */\n cwd: z.string().min(1),\n model: z.string().optional(),\n effort: ReasoningEffort.optional(),\n autonomy: AutonomyLevel,\n /** Extra system prompt appended to the provider's own. */\n systemPrompt: z.string().optional(),\n /** Provider session/thread id from a previous `resumeToken()`. */\n resumeToken: z.string().optional(),\n mcpServers: z.array(McpServerConfig).default([]),\n /** Extra env vars for the agent process (CodeDen secrets are never included). */\n env: z.record(z.string(), z.string()).optional(),\n /** Extra directories the agent may read/write. */\n additionalDirectories: z.array(z.string()).default([]),\n /** Start in plan mode where supported. */\n planMode: z.boolean().default(false),\n /**\n * No writes to the workspace (orchestrator and PMs, §11.2): file edits and writing commands\n * are denied natively (Claude permission policy, Codex read-only sandbox).\n */\n readOnly: z.boolean().optional(),\n});\nexport type SessionOptions = z.infer<typeof SessionOptions>;\nexport type SessionOptionsInit = z.input<typeof SessionOptions>;\n\n/** Response to an `approval_request` or `user_question` item (`ProviderSession.respond`). */\nexport const RuntimeResponse = z.discriminatedUnion(\"kind\", [\n z.object({\n kind: z.literal(\"approval\"),\n decision: ApprovalDecision,\n /** Optional note passed to the agent (e.g. why it was denied). */\n message: z.string().optional(),\n }),\n z.object({\n kind: z.literal(\"answer\"),\n /** Selected option labels and/or free text, keyed by question id. */\n answers: z.record(z.string(), z.array(z.string())),\n }),\n /** Withdraw the request (session stopping, request superseded). */\n z.object({ kind: z.literal(\"cancel\") }),\n]);\nexport type RuntimeResponse = z.infer<typeof RuntimeResponse>;\n","import { z } from \"zod\";\nimport { Id } from \"../common\";\n\n/** Runner-assigned tab id, unique within a session's browser context (`t1`, `t2`, ...). */\nexport const BrowserTabId = z.string().min(1).max(100);\nexport type BrowserTabId = z.infer<typeof BrowserTabId>;\n\n/** One tab of a session's browser context. */\nexport const BrowserTab = z.object({\n tabId: BrowserTabId,\n url: z.string(),\n title: z.string(),\n /** The tab shown in the panel and targeted when a command omits `tabId`. */\n active: z.boolean(),\n});\nexport type BrowserTab = z.infer<typeof BrowserTab>;\n\n/** CDP modifier bitmask: Alt = 1, Ctrl = 2, Meta = 4, Shift = 8. */\nexport const BrowserModifiers = z.int().min(0).max(15);\n\n/**\n * Aria ref from a `browser.snapshot` (`e2`, or `f1e3` inside an iframe). Refs resolve\n * against the latest snapshot of the tab.\n */\nexport const BrowserElementRef = z.string().regex(/^(f\\d+)?e\\d+$/);\n\n/**\n * Pointer input from the panel. `x`/`y` are in the coordinate space of the frame as it\n * is displayed (`frameWidth` x `frameHeight`); the runner maps them onto the page viewport.\n */\nexport const BrowserMouseInput = z.object({\n type: z.enum([\"mouse.move\", \"mouse.down\", \"mouse.up\", \"mouse.wheel\"]),\n x: z.number(),\n y: z.number(),\n frameWidth: z.number().positive(),\n frameHeight: z.number().positive(),\n button: z.enum([\"none\", \"left\", \"middle\", \"right\"]).optional(),\n clickCount: z.int().min(0).max(3).optional(),\n /** Wheel deltas in CSS pixels (`mouse.wheel`). */\n deltaX: z.number().optional(),\n deltaY: z.number().optional(),\n modifiers: BrowserModifiers.optional(),\n});\nexport type BrowserMouseInput = z.infer<typeof BrowserMouseInput>;\n\n/** Keyboard input from the panel, mirroring DOM `KeyboardEvent` fields. */\nexport const BrowserKeyInput = z.object({\n type: z.enum([\"key.down\", \"key.up\", \"key.char\"]),\n /** DOM `key`, e.g. `a`, `Enter`, `ArrowLeft`. */\n key: z.string().min(1).max(40),\n /** DOM `code`, e.g. `KeyA`. */\n code: z.string().max(40).optional(),\n /** Text the key produces (printable keys). */\n text: z.string().max(10).optional(),\n modifiers: BrowserModifiers.optional(),\n});\nexport type BrowserKeyInput = z.infer<typeof BrowserKeyInput>;\n\n/** Insert text at the focused element as if typed by an IME (paste-like). */\nexport const BrowserTextInput = z.object({\n type: z.literal(\"text.insert\"),\n text: z.string().max(100_000),\n});\nexport type BrowserTextInput = z.infer<typeof BrowserTextInput>;\n\n/** Human input forwarded from the panel to the active tab. */\nexport const BrowserInput = z.union([BrowserMouseInput, BrowserKeyInput, BrowserTextInput]);\nexport type BrowserInput = z.infer<typeof BrowserInput>;\n\n/** A console message (or uncaught page error) captured from a tab. Bounded per session. */\nexport const BrowserConsoleEntry = z.object({\n /** Monotonic per session; pass as `since` to page through new entries. */\n id: z.int().nonnegative(),\n tabId: BrowserTabId,\n /** `log`, `info`, `warning`, `error`, `debug`, ..., or `pageerror`. */\n level: z.string(),\n text: z.string(),\n url: z.string().optional(),\n line: z.int().optional(),\n ts: z.string(),\n});\nexport type BrowserConsoleEntry = z.infer<typeof BrowserConsoleEntry>;\n\n/** A network request made by a tab. Bounded per session. */\nexport const BrowserNetworkEntry = z.object({\n id: z.int().nonnegative(),\n tabId: BrowserTabId,\n method: z.string(),\n url: z.string(),\n resourceType: z.string(),\n /** HTTP status; null while pending or when the request failed. */\n status: z.int().nullable(),\n /** Failure text (`net::ERR_...`) when the request failed. */\n failure: z.string().nullable(),\n ts: z.string(),\n durationMs: z.number().nullable(),\n});\nexport type BrowserNetworkEntry = z.infer<typeof BrowserNetworkEntry>;\n\n/** Screencast frame metadata from CDP `Page.screencastFrame` (CSS pixels). */\nexport const BrowserFrameMetadata = z.object({\n /** Seconds since epoch when the frame was produced. */\n timestamp: z.number().optional(),\n deviceWidth: z.number(),\n deviceHeight: z.number(),\n pageScaleFactor: z.number(),\n offsetTop: z.number(),\n scrollOffsetX: z.number(),\n scrollOffsetY: z.number(),\n});\nexport type BrowserFrameMetadata = z.infer<typeof BrowserFrameMetadata>;\n\nconst TabTarget = { sessionId: Id, tabId: BrowserTabId.optional() };\n\n/** `browser.*` commands (§12.2), spread into `RunnerCommand`. */\nexport const BrowserCommands = [\n /** Open (or reuse) the session's browser context; opens a first tab (at `url`) if none. */\n z.object({ name: z.literal(\"browser.open\"), sessionId: Id, url: z.string().optional() }),\n /** Navigate a tab (default: the active one). Bare `host:port` gets `http://`. */\n z.object({ name: z.literal(\"browser.navigate\"), ...TabTarget, url: z.string() }),\n /** Close the session's context and all its tabs. */\n z.object({ name: z.literal(\"browser.close\"), sessionId: Id }),\n z.object({\n name: z.literal(\"browser.history\"),\n ...TabTarget,\n action: z.enum([\"back\", \"forward\", \"reload\"]),\n }),\n z.object({ name: z.literal(\"browser.tabs.list\"), sessionId: Id }),\n z.object({ name: z.literal(\"browser.tabs.open\"), sessionId: Id, url: z.string().optional() }),\n z.object({ name: z.literal(\"browser.tabs.close\"), sessionId: Id, tabId: BrowserTabId }),\n z.object({ name: z.literal(\"browser.tabs.activate\"), sessionId: Id, tabId: BrowserTabId }),\n /** Resize the viewport of every tab in the session (CSS pixels). */\n z.object({\n name: z.literal(\"browser.viewport\"),\n sessionId: Id,\n width: z.int().min(200).max(7680),\n height: z.int().min(200).max(4320),\n }),\n /**\n * Add (`watching: true`) or remove a panel viewer. Frames stream as `browser.frame` while\n * at least one viewer watches; the screencast pauses when the last one leaves.\n */\n z.object({\n name: z.literal(\"browser.screencast\"),\n sessionId: Id,\n viewerId: z.string().min(1).max(200),\n watching: z.boolean(),\n quality: z.int().min(10).max(100).optional(),\n maxWidth: z.int().min(100).max(7680).optional(),\n maxHeight: z.int().min(100).max(4320).optional(),\n maxFps: z.int().min(1).max(60).optional(),\n }),\n /** Forward human input to the active tab. */\n z.object({ name: z.literal(\"browser.input\"), sessionId: Id, input: BrowserInput }),\n /** Open `http://localhost:<port><path>` in a new tab of the session. */\n z.object({\n name: z.literal(\"browser.devServer\"),\n sessionId: Id,\n port: z.int().min(1).max(65535),\n path: z.string().startsWith(\"/\").optional(),\n }),\n /** Accessibility snapshot (YAML) with element refs for click/type. */\n z.object({ name: z.literal(\"browser.snapshot\"), ...TabTarget }),\n z.object({\n name: z.literal(\"browser.click\"),\n ...TabTarget,\n ref: BrowserElementRef,\n button: z.enum([\"left\", \"middle\", \"right\"]).optional(),\n doubleClick: z.boolean().optional(),\n }),\n /** Fill an editable element by ref; `submit` presses Enter afterwards. */\n z.object({\n name: z.literal(\"browser.type\"),\n ...TabTarget,\n ref: BrowserElementRef,\n text: z.string().max(100_000),\n submit: z.boolean().optional(),\n }),\n /** Press a key or chord on the focused element, e.g. `Enter`, `Control+A`. */\n z.object({ name: z.literal(\"browser.press\"), ...TabTarget, key: z.string().min(1).max(60) }),\n /** PNG screenshot of the viewport, the full page, or one element (`ref`) to an absolute path. */\n z.object({\n name: z.literal(\"browser.screenshot\"),\n ...TabTarget,\n path: z.string().min(1),\n fullPage: z.boolean().optional(),\n ref: BrowserElementRef.optional(),\n }),\n /** Console messages and/or network requests captured since `since` (exclusive). */\n z.object({\n name: z.literal(\"browser.logs\"),\n ...TabTarget,\n /** Default `all`. */\n kind: z.enum([\"console\", \"network\", \"all\"]).optional(),\n since: z.int().nonnegative().optional(),\n limit: z.int().min(1).max(1000).optional(),\n }),\n /** Evaluate a JS expression or function source in the tab (guarded: timeout, size cap). */\n z.object({\n name: z.literal(\"browser.evaluate\"),\n ...TabTarget,\n expression: z.string().min(1).max(20_000),\n }),\n /** Wait for a selector, visible text, or network idle (exactly one). */\n z.object({\n name: z.literal(\"browser.wait\"),\n ...TabTarget,\n selector: z.string().min(1).optional(),\n text: z.string().min(1).optional(),\n networkIdle: z.boolean().optional(),\n timeoutMs: z.int().min(1).max(120_000).optional(),\n }),\n] as const;\n\nconst Empty = z.object({});\nconst TabResult = z.object({ tab: BrowserTab });\n\n/** Result schemas for `browser.*` commands, spread into `RunnerCommandResults`. */\nexport const BrowserCommandResults = {\n /** `cdpUrl` is the browser's CDP endpoint on 127.0.0.1. */\n \"browser.open\": z.object({ cdpUrl: z.string().nullable(), tabs: z.array(BrowserTab).optional() }),\n \"browser.navigate\": z.object({\n url: z.string().optional(),\n status: z.int().nullable().optional(),\n }),\n \"browser.close\": Empty,\n \"browser.history\": z.object({ url: z.string() }),\n \"browser.tabs.list\": z.object({ tabs: z.array(BrowserTab) }),\n \"browser.tabs.open\": TabResult,\n \"browser.tabs.close\": Empty,\n \"browser.tabs.activate\": Empty,\n \"browser.viewport\": Empty,\n \"browser.screencast\": z.object({ viewers: z.int().nonnegative() }),\n \"browser.input\": Empty,\n \"browser.devServer\": TabResult,\n \"browser.snapshot\": z.object({\n tabId: BrowserTabId,\n url: z.string(),\n title: z.string(),\n snapshot: z.string(),\n truncated: z.boolean(),\n }),\n \"browser.click\": Empty,\n \"browser.type\": Empty,\n \"browser.press\": Empty,\n \"browser.screenshot\": z.object({\n path: z.string(),\n width: z.int().positive(),\n height: z.int().positive(),\n bytes: z.int().positive(),\n }),\n \"browser.logs\": z.object({\n console: z.array(BrowserConsoleEntry),\n network: z.array(BrowserNetworkEntry),\n }),\n /** JSON-serialized result (truncated to the size cap). */\n \"browser.evaluate\": z.object({ json: z.string(), truncated: z.boolean() }),\n \"browser.wait\": z.object({ matched: z.boolean() }),\n};\n","import { z } from \"zod\";\nimport { Id, ProviderId, ReasoningEffort } from \"../common\";\nimport { UserInput } from \"../input\";\nimport { ProjectConfigFile } from \"../project-config\";\nimport { ProviderStatus, RuntimeResponse, SessionOptions } from \"../provider\";\nimport { BrowserCommandResults, BrowserCommands } from \"./browser\";\n\n/** Terminal (node-pty) id, unique per runner. */\nexport const PtyId = z.string().min(1).max(100);\n\n/** Index of a turn checkpoint: 0 is the baseline at session start, n the end of turn n. */\nexport const CheckpointIndex = z.int().nonnegative();\n\n/** Per-file change summary of a diff. */\nexport const DiffFileStat = z.object({\n path: z.string(),\n /** Previous path for renames and copies. */\n oldPath: z.string().optional(),\n status: z.enum([\"added\", \"modified\", \"deleted\", \"renamed\", \"copied\", \"type_changed\"]),\n additions: z.int().nonnegative(),\n deletions: z.int().nonnegative(),\n binary: z.boolean(),\n});\nexport type DiffFileStat = z.infer<typeof DiffFileStat>;\n\n/**\n * Commands the server sends to a runner (§4.3), discriminated on `name`.\n * Each has a matching result schema in `RunnerCommandResults`.\n */\nexport const RunnerCommand = z.discriminatedUnion(\"name\", [\n /** Report sessions, terminals and journal state. */\n z.object({ name: z.literal(\"runner.status\") }),\n /** Finish or pause running turns, then stop accepting work (before an upgrade). */\n z.object({\n name: z.literal(\"runner.drain\"),\n reason: z.string(),\n /** Max time to wait for running turns before interrupting them. Default 5 minutes. */\n timeoutMs: z.int().positive().optional(),\n /** Exit the process once drained, so the server starts a fresh runner (upgrades). */\n exitWhenDrained: z.boolean().optional(),\n }),\n /** Runtime configuration pushed by the server after each handshake. */\n z.object({\n name: z.literal(\"runner.configure\"),\n /** Where the local MCP proxy forwards to (the server's `/mcp`); `null` disables it. */\n mcpUpstreamUrl: z.url().nullable(),\n }),\n /** Exit the runner process after closing sessions and terminals. */\n z.object({ name: z.literal(\"runner.shutdown\") }),\n /** Detect installed providers (all when `providerId` is omitted). */\n z.object({ name: z.literal(\"provider.detect\"), providerId: ProviderId.optional() }),\n /** One tool-less utility-model call (§7.4) through a provider's `utilityModel()`. */\n z.object({\n name: z.literal(\"provider.oneShot\"),\n providerId: ProviderId,\n prompt: z.string().min(1),\n system: z.string().optional(),\n /** Provider model id; the provider's small default when omitted. */\n model: z.string().optional(),\n timeoutMs: z.int().positive().max(300_000).optional(),\n }),\n /** Create or reuse the working directory for a session (worktree + setup commands). */\n z.object({\n name: z.literal(\"workspace.prepare\"),\n sessionId: Id,\n repoPath: z.string().min(1),\n strategy: z.enum([\"worktree\", \"repo_root\", \"existing\"]),\n /** Target directory for `worktree` / `existing`. */\n path: z.string().optional(),\n branch: z.string().optional(),\n baseRef: z.string().optional(),\n setupCommands: z.array(z.string()).default([]),\n /** Used for the default worktree path `<home>/wt/<projectSlug>/<sessionShort>`. */\n projectSlug: z\n .string()\n .regex(/^[a-z0-9][a-z0-9-]{0,39}$/)\n .optional(),\n /** `git fetch origin` before branching (when an `origin` remote exists). */\n fetch: z.boolean().optional(),\n /** Run `.codeden/project.json` `setup` commands before `setupCommands`. Default true. */\n runProjectSetup: z.boolean().optional(),\n }),\n /** Remove a session worktree (and optionally its branch). */\n z.object({\n name: z.literal(\"workspace.remove\"),\n repoPath: z.string().min(1),\n path: z.string().min(1),\n deleteBranch: z.string().optional(),\n /** Remove even with uncommitted changes. */\n force: z.boolean().optional(),\n }),\n /** Open a provider session; optionally start the first turn. */\n z.object({\n name: z.literal(\"session.start\"),\n sessionId: Id,\n providerId: ProviderId,\n options: SessionOptions,\n input: UserInput.optional(),\n /** Snapshot the cwd at session start and every turn end (§9). Default true in git repos. */\n checkpoints: z.boolean().optional(),\n }),\n /** Start a new turn. */\n z.object({ name: z.literal(\"session.send\"), sessionId: Id, input: UserInput }),\n /** Inject input into the running turn (requires `capabilities.steer`). */\n z.object({ name: z.literal(\"session.steer\"), sessionId: Id, input: UserInput }),\n z.object({ name: z.literal(\"session.interrupt\"), sessionId: Id }),\n /** Answer an approval request or user question. */\n z.object({\n name: z.literal(\"session.respond\"),\n sessionId: Id,\n requestId: Id,\n response: RuntimeResponse,\n }),\n /** Close the provider session (resumable later via its resume token). */\n z.object({ name: z.literal(\"session.stop\"), sessionId: Id }),\n /** Change model/effort for the next turn (`unsupported` when the provider cannot). */\n z.object({\n name: z.literal(\"session.configure\"),\n sessionId: Id,\n model: z.string().nullable().optional(),\n effort: ReasoningEffort.nullable().optional(),\n }),\n z.object({\n name: z.literal(\"pty.open\"),\n ptyId: PtyId,\n cwd: z.string().min(1),\n shell: z.string().optional(),\n args: z.array(z.string()).optional(),\n cols: z.int().positive(),\n rows: z.int().positive(),\n env: z.record(z.string(), z.string()).optional(),\n sessionId: Id.optional(),\n }),\n z.object({ name: z.literal(\"pty.input\"), ptyId: PtyId, data: z.string() }),\n z.object({\n name: z.literal(\"pty.resize\"),\n ptyId: PtyId,\n cols: z.int().positive(),\n rows: z.int().positive(),\n }),\n z.object({ name: z.literal(\"pty.close\"), ptyId: PtyId }),\n /** Scrollback and state of a terminal, for (re)attaching a view. */\n z.object({ name: z.literal(\"pty.attach\"), ptyId: PtyId }),\n /** `browser.*` (§12.2), defined in `./browser`. */\n ...BrowserCommands,\n /** Snapshot the worktree into `refs/codeden/checkpoints/<session>/<n>` (§9). */\n z.object({\n name: z.literal(\"git.checkpoint\"),\n sessionId: Id,\n cwd: z.string(),\n index: z.int().nonnegative(),\n }),\n z.object({ name: z.literal(\"git.status\"), cwd: z.string() }),\n /** Unified diff `fromRef..toRef`; without `toRef`, against the working tree incl. untracked files. */\n z.object({\n name: z.literal(\"git.diff\"),\n cwd: z.string(),\n fromRef: z.string(),\n toRef: z.string().optional(),\n }),\n z.object({\n name: z.literal(\"git.branches\"),\n cwd: z.string(),\n includeRemote: z.boolean().optional(),\n }),\n /** Stage (all changes, or `paths`) and commit. */\n z.object({\n name: z.literal(\"git.commit\"),\n cwd: z.string(),\n message: z.string().min(1),\n paths: z.array(z.string()).optional(),\n }),\n z.object({\n name: z.literal(\"git.push\"),\n cwd: z.string(),\n /** Default `origin`. */\n remote: z.string().optional(),\n /** Default: the current branch. */\n branch: z.string().optional(),\n /** Set the upstream (`-u`). Default true. */\n setUpstream: z.boolean().optional(),\n forceWithLease: z.boolean().optional(),\n }),\n z.object({ name: z.literal(\"checkpoint.list\"), cwd: z.string(), sessionId: Id }),\n /** Diff between two checkpoints; without `to`, against the current working tree. */\n z.object({\n name: z.literal(\"checkpoint.diff\"),\n cwd: z.string(),\n sessionId: Id,\n from: CheckpointIndex,\n to: CheckpointIndex.optional(),\n }),\n /** Restore files (all, or `paths`) to their state at a checkpoint without touching the index. */\n z.object({\n name: z.literal(\"checkpoint.restoreFiles\"),\n cwd: z.string(),\n sessionId: Id,\n index: CheckpointIndex,\n paths: z.array(z.string()).optional(),\n }),\n /** Listening localhost ports of processes started by this runner, plus `probe`d ports. */\n z.object({\n name: z.literal(\"ports.list\"),\n probe: z.array(z.int().min(1).max(65535)).optional(),\n }),\n]);\nexport type RunnerCommand = z.infer<typeof RunnerCommand>;\nexport type RunnerCommandName = RunnerCommand[\"name\"];\nexport type RunnerCommandOf<N extends RunnerCommandName> = Extract<RunnerCommand, { name: N }>;\n\n/** A session currently hosted by the runner. */\nexport const RunnerSessionInfo = z.object({\n sessionId: Id,\n providerId: ProviderId,\n state: z.enum([\"idle\", \"running\", \"closing\"]),\n resumeToken: z.string().nullable(),\n});\nexport type RunnerSessionInfo = z.infer<typeof RunnerSessionInfo>;\n\nconst Empty = z.object({});\n\n/** Result schema for each command. */\nexport const RunnerCommandResults = {\n \"runner.status\": z.object({\n sessions: z.array(RunnerSessionInfo),\n ptys: z.array(PtyId),\n journal: z.object({ lastSeq: z.int().nonnegative(), unacked: z.int().nonnegative() }),\n draining: z.boolean(),\n }),\n \"runner.drain\": Empty,\n \"runner.configure\": z.object({ mcpProxyUrl: z.string().nullable() }),\n \"runner.shutdown\": Empty,\n \"provider.detect\": z.object({ statuses: z.array(ProviderStatus) }),\n \"provider.oneShot\": z.object({ text: z.string(), model: z.string() }),\n \"workspace.prepare\": z.object({\n cwd: z.string(),\n branch: z.string().nullable(),\n created: z.boolean(),\n /** Parsed `.codeden/project.json`, when present and valid. */\n config: ProjectConfigFile.nullable().optional(),\n /** Setup commands that ran, in order (stops at the first failure). */\n setup: z\n .array(z.object({ command: z.string(), exitCode: z.int().nullable(), ok: z.boolean() }))\n .optional(),\n }),\n \"workspace.remove\": z.object({ removed: z.boolean() }),\n \"session.start\": z.object({ resumeToken: z.string().nullable() }),\n \"session.send\": Empty,\n \"session.steer\": Empty,\n \"session.interrupt\": Empty,\n \"session.respond\": Empty,\n \"session.stop\": Empty,\n \"session.configure\": Empty,\n \"pty.open\": z.object({ pid: z.int() }),\n \"pty.input\": Empty,\n \"pty.resize\": Empty,\n \"pty.close\": Empty,\n \"pty.attach\": z.object({\n pid: z.int(),\n cols: z.int().positive(),\n rows: z.int().positive(),\n /** Bounded scrollback to replay into a fresh view. */\n scrollback: z.string(),\n exited: z.boolean(),\n exitCode: z.int().nullable(),\n }),\n ...BrowserCommandResults,\n \"git.checkpoint\": z.object({ ref: z.string(), commit: z.string() }),\n \"git.status\": z.object({\n branch: z.string().nullable(),\n ahead: z.int().nonnegative(),\n behind: z.int().nonnegative(),\n files: z.array(z.object({ path: z.string(), status: z.string() })),\n }),\n \"git.diff\": z.object({ diff: z.string(), files: z.array(DiffFileStat).optional() }),\n \"git.branches\": z.object({\n current: z.string().nullable(),\n defaultBranch: z.string().nullable(),\n branches: z.array(\n z.object({\n name: z.string(),\n remote: z.boolean(),\n commit: z.string(),\n upstream: z.string().nullable(),\n }),\n ),\n }),\n /** `commit` is null when there was nothing to commit. */\n \"git.commit\": z.object({ commit: z.string().nullable() }),\n \"git.push\": z.object({ remote: z.string(), branch: z.string() }),\n \"checkpoint.list\": z.object({\n checkpoints: z.array(\n z.object({\n index: CheckpointIndex,\n ref: z.string(),\n commit: z.string(),\n createdAt: z.string(),\n }),\n ),\n }),\n \"checkpoint.diff\": z.object({ diff: z.string(), files: z.array(DiffFileStat) }),\n \"checkpoint.restoreFiles\": z.object({\n restored: z.array(z.string()),\n deleted: z.array(z.string()),\n }),\n \"ports.list\": z.object({\n ports: z.array(\n z.object({\n port: z.int().min(1).max(65535),\n pid: z.int().nullable(),\n url: z.string(),\n }),\n ),\n }),\n} satisfies Record<RunnerCommandName, z.ZodType>;\n\n/** Result type of a command: `RunnerCommandResult<\"session.start\">`. */\nexport type RunnerCommandResult<N extends RunnerCommandName> = z.infer<\n (typeof RunnerCommandResults)[N]\n>;\n","import { z } from \"zod\";\nimport { Id, Timestamp } from \"./common\";\nimport { UserInput } from \"./input\";\nimport { CheckpointIndex, PtyId } from \"./runner/commands\";\n\n/**\n * Workbench data (§9, §12): turn checkpoints, workspace setup output, persisted message\n * queues, structured session results, diffs, git operations and the terminal channel.\n */\n\n/** A turn checkpoint recorded by the server from the runner's `checkpoint.created` (§9). */\nexport const Checkpoint = z.object({\n sessionId: Id,\n /** 0 is the baseline at session start; n the end of turn n. */\n index: CheckpointIndex,\n /** `refs/codeden/checkpoints/<session>/<index>`. */\n ref: z.string(),\n commit: z.string(),\n /** The turn that ended; null for the baseline. */\n turnId: Id.nullable(),\n createdAt: Timestamp,\n});\nexport type Checkpoint = z.infer<typeof Checkpoint>;\n\n/** One worktree setup command (`.codeden/project.json` `setup`, §9) and its latest output. */\nexport const SetupStep = z.object({\n command: z.string(),\n status: z.enum([\"running\", \"succeeded\", \"failed\"]),\n /** Tail of the command's output (bounded). */\n output: z.string(),\n updatedAt: Timestamp,\n});\nexport type SetupStep = z.infer<typeof SetupStep>;\n\n/** A message sent while a turn was running, waiting to be delivered (survives restarts). */\nexport const QueuedMessage = z.object({\n id: Id,\n sessionId: Id,\n input: UserInput,\n createdAt: Timestamp,\n});\nexport type QueuedMessage = z.infer<typeof QueuedMessage>;\n\n/** Structured result an agent reports with the `finish` tool (§8.3). */\nexport const SessionResult = z.object({\n outcome: z.enum([\"success\", \"partial\", \"failed\", \"blocked\"]),\n summary: z.string().min(1),\n /** Files the agent changed, when it reports them. */\n changedFiles: z.array(z.string()).optional(),\n /** Tests or checks run and how they went. */\n tests: z.string().optional(),\n /** Anything a human or PM should do next. */\n nextSteps: z.array(z.string()).optional(),\n at: Timestamp,\n});\nexport type SessionResult = z.infer<typeof SessionResult>;\n\n// ---------------------------------------------------------------------------- diffs\n\n/** What a diff covers: the whole session, one turn, or uncommitted changes in the worktree. */\nexport const DiffScope = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"session\") }),\n z.object({ kind: z.literal(\"turn\"), turnId: Id }),\n z.object({ kind: z.literal(\"uncommitted\") }),\n]);\nexport type DiffScope = z.infer<typeof DiffScope>;\n\n/** One file of a diff, with its unified patch. */\nexport const DiffFile = z.object({\n path: z.string(),\n previousPath: z.string().optional(),\n change: z.enum([\"add\", \"modify\", \"delete\", \"rename\"]),\n additions: z.int().nonnegative(),\n deletions: z.int().nonnegative(),\n binary: z.boolean().optional(),\n /** Unified patch for this file. */\n patch: z.string(),\n});\nexport type DiffFile = z.infer<typeof DiffFile>;\n\n/** `POST /api/sessions/:id/diff` (body: `DiffScope`). */\nexport const DiffResult = z.object({\n scope: DiffScope,\n files: z.array(DiffFile),\n /** Turns that have checkpoints, oldest first. */\n turns: z.array(z.object({ id: Id, index: CheckpointIndex, label: z.string(), at: Timestamp })),\n});\nexport type DiffResult = z.infer<typeof DiffResult>;\n\n/** `GET /api/sessions/:id/checkpoints`. */\nexport const CheckpointList = z.object({ checkpoints: z.array(Checkpoint) });\nexport type CheckpointList = z.infer<typeof CheckpointList>;\n\n/**\n * `POST /api/sessions/:id/restore`: put files (all, or `paths`) back to their state at a\n * checkpoint. `turnId` restores to the state *before* that turn; `index` names a checkpoint.\n */\nexport const RestoreFilesRequest = z\n .object({\n turnId: Id.optional(),\n index: CheckpointIndex.optional(),\n paths: z.array(z.string().min(1)).optional(),\n })\n .refine((r) => (r.turnId === undefined) !== (r.index === undefined), {\n message: \"Pass exactly one of turnId or index\",\n });\nexport type RestoreFilesRequest = z.infer<typeof RestoreFilesRequest>;\n\nexport const RestoreFilesResponse = z.object({\n index: CheckpointIndex,\n restored: z.array(z.string()),\n deleted: z.array(z.string()),\n});\nexport type RestoreFilesResponse = z.infer<typeof RestoreFilesResponse>;\n\n// ---------------------------------------------------------------------------- git\n\n/** `GET /api/sessions/:id/git/status`. */\nexport const GitStatusResponse = z.object({\n branch: z.string().nullable(),\n baseBranch: z.string().nullable(),\n ahead: z.int().nonnegative(),\n behind: z.int().nonnegative(),\n files: z.array(z.object({ path: z.string(), status: z.string() })),\n});\nexport type GitStatusResponse = z.infer<typeof GitStatusResponse>;\n\n/** `POST /api/sessions/:id/git/commit`: stage (all, or `paths`) and commit. */\nexport const GitCommitRequest = z.object({\n message: z.string().min(1).max(10_000),\n paths: z.array(z.string().min(1)).optional(),\n});\nexport type GitCommitRequest = z.infer<typeof GitCommitRequest>;\n\n/** `commit` is null when there was nothing to commit. */\nexport const GitCommitResponse = z.object({ commit: z.string().nullable() });\nexport type GitCommitResponse = z.infer<typeof GitCommitResponse>;\n\n/** `POST /api/sessions/:id/git/push`. */\nexport const GitPushRequest = z.object({\n remote: z.string().min(1).optional(),\n forceWithLease: z.boolean().optional(),\n});\nexport type GitPushRequest = z.infer<typeof GitPushRequest>;\n\nexport const GitPushResponse = z.object({ remote: z.string(), branch: z.string() });\nexport type GitPushResponse = z.infer<typeof GitPushResponse>;\n\n// ---------------------------------------------------------------------------- terminal\n\n/**\n * `GET /ws/pty?sessionId=&ptyId=&command=&cols=&rows=` opens (or, with `ptyId`, attaches to)\n * a runner terminal. Without `sessionId` the terminal opens in the CodeDen home folder.\n * Server -> client frames are plain text (terminal output) except for `TerminalServerMessage`\n * control frames, which are JSON objects prefixed with `\\u0000`.\n */\nexport const TerminalQuery = z.object({\n sessionId: Id.optional(),\n /** Attach to an existing terminal instead of opening a new one. */\n ptyId: PtyId.optional(),\n /** Run this command in the shell once it starts (e.g. `claude auth login`). */\n command: z.string().max(2_000).optional(),\n cols: z.coerce.number().int().positive().max(1_000).default(120),\n rows: z.coerce.number().int().positive().max(500).default(30),\n});\nexport type TerminalQuery = z.infer<typeof TerminalQuery>;\n\n/** Client -> server messages on a terminal socket (JSON text frames). */\nexport const TerminalClientMessage = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"input\"), data: z.string().max(1_000_000) }),\n z.object({\n type: z.literal(\"resize\"),\n cols: z.int().positive().max(1_000),\n rows: z.int().positive().max(500),\n }),\n /** Kill the terminal process (closing the socket only detaches). */\n z.object({ type: z.literal(\"kill\") }),\n]);\nexport type TerminalClientMessage = z.infer<typeof TerminalClientMessage>;\n\n/** Server -> client control frames (sent as `\\u0000` + JSON). */\nexport const TerminalServerMessage = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"opened\"), ptyId: PtyId, pid: z.int(), attached: z.boolean() }),\n z.object({ type: z.literal(\"exited\"), ptyId: PtyId, exitCode: z.int().nullable() }),\n z.object({ type: z.literal(\"error\"), message: z.string() }),\n]);\nexport type TerminalServerMessage = z.infer<typeof TerminalServerMessage>;\n\n/** Prefix that marks a terminal control frame. */\nexport const TERMINAL_CONTROL_PREFIX = \"\\u0000\";\n\n// ---------------------------------------------------------------------------- utility\n\n/** `POST /api/utility/speech-summary`: compress a final message for read-aloud (§11.3). */\nexport const SpeechSummaryRequest = z.object({ text: z.string().min(1).max(200_000) });\nexport type SpeechSummaryRequest = z.infer<typeof SpeechSummaryRequest>;\n\n/** `source: \"plain\"` when the utility model was off or failed and the text was only cleaned. */\nexport const SpeechSummaryResponse = z.object({\n text: z.string(),\n source: z.enum([\"utility\", \"plain\"]),\n});\nexport type SpeechSummaryResponse = z.infer<typeof SpeechSummaryResponse>;\n","import { z } from \"zod\";\nimport {\n AutonomyLevel,\n ErrorInfo,\n GitHubIssueRef,\n GitHubPrRef,\n Id,\n ProviderId,\n ReasoningEffort,\n Role,\n Timestamp,\n} from \"../common\";\nimport { Item } from \"../items\";\nimport { workFields } from \"../work\";\nimport { SessionResult } from \"../workbench\";\n\n/**\n * Session lifecycle.\n * - `created`: row exists, nothing started on a runner yet.\n * - `queued`: waiting behind conflicting work (§8.4 `wait`).\n * - `starting`: workspace prepared / provider process launching.\n * - `running`: a turn is in progress.\n * - `waiting`: blocked on the user (approval or question).\n * - `idle`: between turns, ready for input.\n * - `interrupted`: cut off (runner restart, crash); resumable.\n * - `completed` / `failed` / `stopped`: terminal.\n */\nexport const SessionStatus = z.enum([\n \"created\",\n \"queued\",\n \"starting\",\n \"running\",\n \"waiting\",\n \"idle\",\n \"interrupted\",\n \"completed\",\n \"failed\",\n \"stopped\",\n]);\nexport type SessionStatus = z.infer<typeof SessionStatus>;\n\n/** An agent session of any role (§8.1). */\nexport const Session = z.object({\n id: Id,\n /** Null for the orchestrator. */\n projectId: Id.nullable(),\n role: Role,\n /** The session that started this one (PM for agents, orchestrator for PMs). */\n parentSessionId: Id.nullable(),\n /** Who/why/what (§8.4): startedBy, purpose, workKey, scope, progress. */\n ...workFields,\n title: z.string().nullable(),\n provider: ProviderId,\n model: z.string().nullable(),\n effort: ReasoningEffort.nullable(),\n autonomy: AutonomyLevel,\n status: SessionStatus,\n /** Directory the agent runs in. */\n cwd: z.string(),\n /** Set when the session owns a worktree under `~/.codeden/wt/`. */\n worktreePath: z.string().nullable(),\n branch: z.string().nullable(),\n baseBranch: z.string().nullable(),\n issue: GitHubIssueRef.nullable(),\n pr: GitHubPrRef.nullable(),\n /** Provider resume token (session/thread id). */\n resumeToken: z.string().nullable(),\n /** Runner currently hosting the session. */\n runnerId: z.string().nullable(),\n automationRunId: Id.nullable(),\n /** The session's root thread, once the provider started it. */\n rootThreadId: Id.nullable(),\n /** Structured result from the agent's `finish` tool, once reported. */\n result: SessionResult.nullable().optional(),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n endedAt: Timestamp.nullable(),\n});\nexport type Session = z.infer<typeof Session>;\n\n/** Thread projection (§6 `threads`). */\nexport const Thread = z.object({\n id: Id,\n sessionId: Id,\n parentThreadId: Id.nullable(),\n parentItemId: Id.nullable(),\n title: z.string().nullable(),\n agentType: z.string().nullable(),\n createdAt: Timestamp,\n});\nexport type Thread = z.infer<typeof Thread>;\n\nexport const TurnStatus = z.enum([\"running\", \"completed\", \"failed\", \"interrupted\"]);\nexport type TurnStatus = z.infer<typeof TurnStatus>;\n\n/** Turn projection (§6 `turns`). */\nexport const Turn = z.object({\n id: Id,\n threadId: Id,\n sessionId: Id,\n status: TurnStatus,\n startedAt: Timestamp,\n completedAt: Timestamp.nullable(),\n error: ErrorInfo.nullable(),\n});\nexport type Turn = z.infer<typeof Turn>;\n\n/** Item projection (§6 `items`): the latest state of an item plus its location. */\nexport const ItemRecord = z.object({\n sessionId: Id,\n threadId: Id,\n turnId: Id,\n /** Order within the thread. */\n position: z.int().nonnegative(),\n item: Item,\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\nexport type ItemRecord = z.infer<typeof ItemRecord>;\n","import { z } from \"zod\";\nimport {\n AutonomyLevel,\n ErrorInfo,\n Id,\n ProviderId,\n QuietHours,\n ReasoningEffort,\n Timestamp,\n} from \"../common\";\nimport { OverlapPolicy, workFields } from \"../work\";\n\n/** Events an automation can be triggered by (§10). */\nexport const AutomationEventName = z.enum([\n \"session.finished\",\n \"session.failed\",\n \"session.needs_input\",\n \"pr.opened\",\n \"pr.merged\",\n \"pr.checks_failed\",\n \"pr.review_requested\",\n \"issue.opened\",\n \"issue.labeled\",\n \"issue.commented\",\n]);\nexport type AutomationEventName = z.infer<typeof AutomationEventName>;\n\n/** When an automation fires. */\nexport const AutomationTrigger = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"cron\"),\n /** Cron expression (croner syntax). */\n expression: z.string().min(1),\n /** IANA timezone; defaults to the project's timezone. */\n timezone: z.string().optional(),\n }),\n z.object({\n type: z.literal(\"event\"),\n event: AutomationEventName,\n filter: z\n .object({\n labels: z.array(z.string()).optional(),\n branches: z.array(z.string()).optional(),\n authors: z.array(z.string()).optional(),\n })\n .optional(),\n }),\n z.object({ type: z.literal(\"manual\") }),\n]);\nexport type AutomationTrigger = z.infer<typeof AutomationTrigger>;\n\n/**\n * How the PM's issue triage applies a decision (§10): labels per decision, whether to comment\n * and close, and whether a `ready` issue may start a session without asking (assisted mode and\n * above only; otherwise the user gets a \"Should I take this on?\" inbox decision).\n */\nexport const TriagePolicy = z.object({\n labels: z\n .object({\n ready: z.array(z.string().min(1)).default([\"triage:ready\"]),\n needs_info: z.array(z.string().min(1)).default([\"needs-info\"]),\n unsafe: z.array(z.string().min(1)).default([\"triage:unsafe\"]),\n out_of_scope: z.array(z.string().min(1)).default([\"out-of-scope\"]),\n duplicate: z.array(z.string().min(1)).default([\"duplicate\"]),\n })\n .prefault({}),\n /** Post a short comment explaining the decision. */\n comment: z.boolean().default(true),\n /** Close duplicates and out-of-scope issues as \"not planned\". */\n closeRejected: z.boolean().default(false),\n /** Start a session for `ready` issues without asking (never in `manual` projects). */\n autoStart: z.boolean().default(false),\n /** Provider, model and autonomy for sessions started from triage. */\n provider: ProviderId.optional(),\n model: z.string().optional(),\n autonomy: AutonomyLevel.optional(),\n});\nexport type TriagePolicy = z.infer<typeof TriagePolicy>;\n\n/** What an automation does when it fires. */\nexport const AutomationAction = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"start_session\"),\n /** Prompt template (Markdown, `{{placeholders}}` filled from the trigger context). */\n prompt: z.string().min(1),\n title: z.string().optional(),\n provider: ProviderId.optional(),\n model: z.string().optional(),\n effort: ReasoningEffort.optional(),\n autonomy: AutonomyLevel.optional(),\n }),\n z.object({\n type: z.literal(\"message_pm\"),\n message: z.string().min(1),\n }),\n z.object({\n type: z.literal(\"triage\"),\n policy: TriagePolicy.optional(),\n /** Extra guidance for the PM, appended to the triage request. */\n instructions: z.string().optional(),\n }),\n]);\nexport type AutomationAction = z.infer<typeof AutomationAction>;\n\n/** Which projects an automation applies to. */\nexport const AutomationTarget = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"project\"), projectId: Id }),\n z.object({ type: z.literal(\"all_projects\") }),\n]);\nexport type AutomationTarget = z.infer<typeof AutomationTarget>;\n\n/** Safety rails on automation runs (§10). */\nexport const AutomationGuards = z.object({\n /** What a trigger does while previous work with the same workKey is still going (§8.4). */\n overlapPolicy: OverlapPolicy.default(\"skip-if-running\"),\n maxConcurrent: z.int().positive().default(1),\n maxPerDay: z.int().positive().nullable().default(null),\n quietHours: QuietHours.nullable().default(null),\n /** Run once for missed schedules after downtime. */\n catchUpMissed: z.boolean().default(false),\n});\nexport type AutomationGuards = z.infer<typeof AutomationGuards>;\n\n/** An automation: trigger + action + target + guards. Off by default. */\nexport const Automation = z.object({\n id: Id,\n name: z.string().min(1),\n description: z.string().nullable(),\n enabled: z.boolean().default(false),\n /** Where the definition lives. */\n source: z.enum([\"builtin\", \"global_file\", \"project_file\", \"database\"]),\n /** Template this was created from, if any. */\n templateId: z.string().nullable(),\n trigger: AutomationTrigger,\n action: AutomationAction,\n target: AutomationTarget,\n guards: AutomationGuards.prefault({}),\n /**\n * Work key of its runs (§8.4), e.g. `automation:security-audit`; may contain\n * `{{placeholders}}` from the trigger (`automation:ci-fix:{{pr.number}}`). Defaults to\n * `automation:<template id or name slug>`.\n */\n workKey: z.string().min(1).max(200).optional(),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n});\nexport type Automation = z.infer<typeof Automation>;\n\n/**\n * Frontmatter of an automation template file (Markdown + YAML; the body is the prompt).\n * Lives in `~/.codeden/automations/` or a repo's `.codeden/automations/`.\n */\nexport const AutomationTemplateFrontmatter = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n trigger: AutomationTrigger,\n provider: ProviderId.optional(),\n model: z.string().optional(),\n autonomy: AutonomyLevel.optional(),\n guards: AutomationGuards.partial().optional(),\n});\nexport type AutomationTemplateFrontmatter = z.infer<typeof AutomationTemplateFrontmatter>;\n\nexport const AutomationRunStatus = z.enum([\n \"queued\",\n \"running\",\n \"completed\",\n \"failed\",\n \"skipped\",\n \"cancelled\",\n]);\nexport type AutomationRunStatus = z.infer<typeof AutomationRunStatus>;\n\n/** One execution of an automation. Every run is a normal session or PM turn (§10). */\nexport const AutomationRun = z\n .object({\n id: Id,\n automationId: Id,\n projectId: Id.nullable(),\n status: AutomationRunStatus,\n triggeredBy: z.enum([\"cron\", \"event\", \"manual\", \"catch_up\"]),\n /** Who/why/what (§8.4): startedBy, purpose, workKey, scope, progress. */\n ...workFields,\n /** Set when `status` is `skipped`. */\n skipReason: z\n .enum([\n \"overlap\",\n \"concurrency\",\n \"quiet_hours\",\n \"daily_cap\",\n \"disabled\",\n \"skipped_by_pm\",\n \"conflict_skip\",\n /** An issue-intake run in an autopilot/dark-factory project: the factory loop owns intake. */\n \"factory_intake\",\n ])\n .nullable(),\n sessionId: Id.nullable(),\n /**\n * The issue an issue-triggered run is about. A triage run stays `running` until the PM's\n * `report_triage` for this issue arrives.\n */\n issueNumber: z.int().positive().nullable().optional(),\n startedAt: Timestamp,\n finishedAt: Timestamp.nullable(),\n error: ErrorInfo.nullable(),\n })\n .refine((run) => (run.status === \"skipped\") === (run.skipReason !== null), {\n message: \"skipReason is required exactly when status is skipped\",\n path: [\"skipReason\"],\n });\nexport type AutomationRun = z.infer<typeof AutomationRun>;\n","import { z } from \"zod\";\nimport { Id, Timestamp } from \"../common\";\n\nexport const ArtifactKind = z.enum([\"image\", \"screenshot\", \"file\", \"tool_output\", \"evidence\"]);\nexport type ArtifactKind = z.infer<typeof ArtifactKind>;\n\n/** A stored file (screenshot, generated image, shared file, full tool output) under `artifacts/`. */\nexport const Artifact = z.object({\n id: Id,\n kind: ArtifactKind,\n name: z.string(),\n mediaType: z.string(),\n /** Path relative to `<home>/artifacts/`. */\n path: z.string(),\n sizeBytes: z.int().nonnegative(),\n sha256: z\n .string()\n .regex(/^[a-f0-9]{64}$/)\n .nullable(),\n projectId: Id.nullable(),\n sessionId: Id.nullable(),\n threadId: Id.nullable(),\n itemId: Id.nullable(),\n createdAt: Timestamp,\n});\nexport type Artifact = z.infer<typeof Artifact>;\n","import { z } from \"zod\";\nimport { GitHubIssueRef, GitHubPrRef, Id, ProviderId, Timestamp } from \"./common\";\nimport { AutonomyMode, FactoryLimits, FactoryLoopState } from \"./factory\";\n\n/**\n * The factory loop of autopilot and dark-factory projects (§10.1): work items, merge checks,\n * the reviewer's verdict, the loop record, the vision and the HTTP shapes of `/api/.../factory`.\n * Autopilot and dark factory are experimental in v1.\n */\n\n/** Modes in which CodeDen finds work and merges automatically. */\nexport const FACTORY_MODES = [\"autopilot\", \"dark_factory\"] as const satisfies AutonomyMode[];\n\n/** True for autopilot and dark factory. */\nexport function isFactoryMode(mode: AutonomyMode): boolean {\n return (FACTORY_MODES as readonly string[]).includes(mode);\n}\n\n/** Areas the improvement finders look at (one discovery session per area). */\nexport const DiscoveryArea = z.enum([\n \"features\",\n \"ux\",\n \"performance\",\n \"tech_debt\",\n \"test_gaps\",\n \"security\",\n]);\nexport type DiscoveryArea = z.infer<typeof DiscoveryArea>;\n\n/** Where a work item came from. */\nexport const FactoryItemSource = z.enum([\"discovery\", \"issue\", \"failed_check\", \"revert\"]);\nexport type FactoryItemSource = z.infer<typeof FactoryItemSource>;\n\n/**\n * Where a work item is:\n * - `candidate`: found, waiting for the PM to score it against the vision\n * - `backlog`: accepted (a GitHub issue exists), waiting for a build slot\n * - `building`, `verifying` (merge checks), `watching` (merged, main CI watched)\n * - `merged` (done), `reverted`, `rejected` (by the PM), `failed` (merge checks),\n * `escalated` (needs a human: protected area or a decision)\n */\nexport const FactoryItemStage = z.enum([\n \"candidate\",\n \"backlog\",\n \"building\",\n \"verifying\",\n \"watching\",\n \"merged\",\n \"reverted\",\n \"rejected\",\n \"failed\",\n \"escalated\",\n]);\nexport type FactoryItemStage = z.infer<typeof FactoryItemStage>;\n\n/** The merge checks; all must pass before an automatic merge. */\nexport const MergeCheckName = z.enum([\n \"ci\",\n \"tests\",\n \"review\",\n \"security\",\n \"ui_evidence\",\n \"size\",\n \"protected_paths\",\n]);\nexport type MergeCheckName = z.infer<typeof MergeCheckName>;\n\nexport const MergeCheckState = z.enum([\"pending\", \"pass\", \"fail\", \"skipped\"]);\nexport type MergeCheckState = z.infer<typeof MergeCheckState>;\n\n/** One recorded merge-check result. */\nexport const MergeCheck = z.object({\n name: MergeCheckName,\n state: MergeCheckState,\n detail: z.string().nullable(),\n /** A failure that needs a human (protected area) rather than a fix. */\n escalate: z.boolean().default(false),\n at: Timestamp,\n});\nexport type MergeCheck = z.infer<typeof MergeCheck>;\n\n/** The independent reviewer's structured verdict (`factory_submit_review`). */\nexport const ReviewVerdict = z.object({\n verdict: z.enum([\"approve\", \"request_changes\", \"reject\"]),\n summary: z.string().min(1).max(4_000),\n /** One entry per acceptance criterion. */\n criteria: z\n .array(z.object({ criterion: z.string(), met: z.boolean(), note: z.string().optional() }))\n .default([]),\n vision: z.object({ aligned: z.boolean(), note: z.string().optional() }),\n tests: z.object({\n adequate: z.boolean(),\n /** True when the change needs no tests (docs, config, copy). */\n notNeeded: z.boolean().optional(),\n note: z.string().optional(),\n }),\n security: z.object({ concerns: z.array(z.string()).default([]) }),\n});\nexport type ReviewVerdict = z.infer<typeof ReviewVerdict>;\nexport type ReviewVerdictInit = z.input<typeof ReviewVerdict>;\n\n/** A work item of the factory loop. */\nexport const FactoryItem = z.object({\n id: Id,\n projectId: Id,\n /** `factory:<slug>` while a candidate; `issue:<n>` once its issue exists. */\n workKey: z.string().min(1),\n title: z.string().min(1),\n /** Why it matters, as the finder or issue described it. */\n summary: z.string(),\n source: FactoryItemSource,\n area: DiscoveryArea.nullable(),\n acceptanceCriteria: z.array(z.string()),\n /** The PM's score against the vision, 0..1. */\n score: z.number().min(0).max(1).nullable(),\n stage: FactoryItemStage,\n issue: GitHubIssueRef.nullable(),\n pr: GitHubPrRef.nullable(),\n builderSessionId: Id.nullable(),\n builderProvider: ProviderId.nullable(),\n reviewerSessionId: Id.nullable(),\n reviewerProvider: ProviderId.nullable(),\n /** Set when the reviewer had to run on the author's provider. */\n reviewerNote: z.string().nullable(),\n review: ReviewVerdict.nullable(),\n checks: z.array(MergeCheck),\n /** Fix rounds after failed merge checks. */\n attempts: z.int().nonnegative(),\n /** Why it was rejected, failed or escalated. */\n reason: z.string().nullable(),\n /** Last thing the loop noted about it (waiting on a conflict, merge budget, ...). */\n note: z.string().nullable(),\n mergeSha: z.string().nullable(),\n /** For revert items: the item whose merge is reverted. */\n revertOf: Id.nullable(),\n /** When the PM was asked to triage it. */\n triageRequestedAt: Timestamp.nullable(),\n /** Timestamps of nudges sent to the builder or reviewer (keyed by purpose). */\n nudges: z.record(z.string(), Timestamp).default({}),\n createdAt: Timestamp,\n updatedAt: Timestamp,\n mergedAt: Timestamp.nullable(),\n finishedAt: Timestamp.nullable(),\n});\nexport type FactoryItem = z.infer<typeof FactoryItem>;\n\n/** Knobs of the loop beyond the required limits; all have safe defaults. */\nexport const FactoryTuning = z.object({\n /** Largest change (added + deleted lines) merged automatically. */\n maxChangedLines: z.int().positive().default(800),\n maxChangedFiles: z.int().positive().default(40),\n /** CI must report and pass; a repository without CI cannot auto-merge. */\n requireCi: z.boolean().default(true),\n /** Security/dependency scan run in the builder's worktree (e.g. `pnpm audit --prod`). */\n auditCommand: z.string().min(1).nullable().default(null),\n /** Fix rounds after failed merge checks before an item fails. */\n maxFixAttempts: z.int().nonnegative().default(1),\n /** Dark factory: start discovery when fewer items than this wait to be built. */\n minBacklog: z.int().nonnegative().default(2),\n /** Dark factory: minutes between discovery rounds. */\n discoveryIntervalMin: z.int().positive().default(360),\n /** Discovery sessions per round (round-robin over the areas). */\n discoveryPerRound: z.int().positive().default(2),\n areas: z.array(DiscoveryArea).default(DiscoveryArea.options),\n /** Provider for builders (`auto`: the project/role default). */\n builderProvider: z.union([z.literal(\"auto\"), ProviderId]).default(\"auto\"),\n /** Minutes to wait for main CI after a merge before calling it done. */\n watchTimeoutMin: z.int().positive().default(120),\n});\nexport type FactoryTuning = z.infer<typeof FactoryTuning>;\n\n/** A running improvement-finder session. */\nexport const DiscoveryRun = z.object({ sessionId: Id, area: DiscoveryArea, startedAt: Timestamp });\nexport type DiscoveryRun = z.infer<typeof DiscoveryRun>;\n\n/** The persisted loop of one project; resumable after a restart. */\nexport const FactoryLoop = z.object({\n projectId: Id,\n state: FactoryLoopState,\n pausedReason: z.string().nullable(),\n consecutiveFailures: z.int().nonnegative(),\n /** Local day (`YYYY-MM-DD`) the counters below belong to. */\n day: z.string(),\n mergesToday: z.int().nonnegative(),\n discovery: z.array(DiscoveryRun),\n /** Next area index for round-robin discovery. */\n nextArea: z.int().nonnegative(),\n lastDiscoveryAt: Timestamp.nullable(),\n /** Day of the last daily digest. */\n lastDigestDay: z.string().nullable(),\n /** Issues opened before this are not picked up automatically. */\n enabledAt: Timestamp.nullable(),\n /** Main-branch commits whose failed checks already became items. */\n seenFailedShas: z.array(z.string()).default([]),\n tuning: FactoryTuning.prefault({}),\n lastTickAt: Timestamp.nullable(),\n updatedAt: Timestamp,\n});\nexport type FactoryLoop = z.infer<typeof FactoryLoop>;\n\n/** The daily digest (inbox item + notice to the orchestrator). */\nexport const FactoryDigest = z.object({\n id: Id,\n projectId: Id,\n day: z.string(),\n shipped: z.array(\n z.object({ itemId: Id, title: z.string(), pr: GitHubPrRef.nullable(), reverted: z.boolean() }),\n ),\n rejected: z.array(\n z.object({ itemId: Id, title: z.string(), stage: FactoryItemStage, reason: z.string() }),\n ),\n spend: z.object({\n usd: z.number().nonnegative(),\n tokens: z.int().nonnegative(),\n budgetUsd: z.number().nullable(),\n budgetTokens: z.int().nullable(),\n }),\n waiting: z.array(\n z.object({ title: z.string(), inboxItemId: Id.nullable(), itemId: Id.nullable() }),\n ),\n text: z.string(),\n createdAt: Timestamp,\n});\nexport type FactoryDigest = z.infer<typeof FactoryDigest>;\n\n// ---------------------------------------------------------------- vision\n\n/** Protected areas parsed from the vision: path globs and topics that always need a human. */\nexport const ProtectedAreas = z.object({\n globs: z.array(z.string()),\n topics: z.array(z.string()),\n});\nexport type ProtectedAreas = z.infer<typeof ProtectedAreas>;\n\nexport const ParsedVision = z.object({\n goals: z.array(z.string()),\n users: z.array(z.string()),\n principles: z.array(z.string()),\n outOfScope: z.array(z.string()),\n qualityBar: z.array(z.string()),\n protectedAreas: ProtectedAreas,\n});\nexport type ParsedVision = z.infer<typeof ParsedVision>;\n\n/** `GET /api/projects/:id/vision`: the template when the file does not exist yet. */\nexport const VisionResponse = z.object({\n path: z.string(),\n exists: z.boolean(),\n contents: z.string(),\n parsed: ParsedVision,\n /**\n * After a save in a GitHub project: the pull request (`codeden/vision`) that commits the\n * vision, so agents' worktrees (cut from the default branch) get it once it merges.\n */\n pr: GitHubPrRef.nullable().optional(),\n /** Why the vision could not be committed to GitHub (it is still saved locally). */\n shareError: z.string().nullable().optional(),\n});\nexport type VisionResponse = z.infer<typeof VisionResponse>;\n\n/** `PUT /api/projects/:id/vision`. */\nexport const PutVisionRequest = z.object({ contents: z.string().min(1).max(200_000) });\nexport type PutVisionRequest = z.infer<typeof PutVisionRequest>;\n\n// ---------------------------------------------------------------- HTTP shapes\n\n/**\n * `PUT /api/projects/:id/autonomy`. Switching to autopilot or dark factory requires a vision\n * file and limits with a daily budget (sent here, or already saved while in a factory mode).\n */\nexport const SetAutonomyModeRequest = z.object({\n mode: AutonomyMode,\n limits: FactoryLimits.optional(),\n tuning: FactoryTuning.partial().optional(),\n});\nexport type SetAutonomyModeRequest = z.infer<typeof SetAutonomyModeRequest>;\nexport type SetAutonomyModeRequestInit = z.input<typeof SetAutonomyModeRequest>;\n\nexport const SetAutonomyModeResponse = z.object({\n projectId: Id,\n mode: AutonomyMode,\n limits: FactoryLimits,\n /** Autopilot and dark factory are experimental in v1. */\n experimental: z.boolean(),\n});\nexport type SetAutonomyModeResponse = z.infer<typeof SetAutonomyModeResponse>;\n\n/** `POST /api/projects/:id/kill-switch` and `POST /api/factory/kill-switch`. */\nexport const KillSwitchRequest = z.object({ on: z.boolean() });\nexport type KillSwitchRequest = z.infer<typeof KillSwitchRequest>;\n\nexport const KillSwitchResponse = z.object({\n on: z.boolean(),\n /** Sessions stopped by turning the switch on. */\n stoppedSessions: z.array(Id),\n});\nexport type KillSwitchResponse = z.infer<typeof KillSwitchResponse>;\n\n/** A work item as the factory panel shows it. */\nexport const FactoryWorkItem = z.object({\n id: Id,\n title: z.string(),\n workKey: z.string(),\n issue: GitHubIssueRef.nullable(),\n pr: GitHubPrRef.nullable(),\n score: z.number().nullable(),\n sessionId: Id.nullable(),\n stage: FactoryItemStage,\n source: FactoryItemSource,\n reason: z.string().nullable(),\n note: z.string().nullable(),\n updatedAt: Timestamp,\n});\nexport type FactoryWorkItem = z.infer<typeof FactoryWorkItem>;\n\n/** Merge-check results of one item with a PR. */\nexport const FactoryMergeChecks = z.object({\n itemId: Id,\n prNumber: z.int().positive(),\n title: z.string(),\n checks: z.array(MergeCheck),\n reviewerProvider: ProviderId.nullable(),\n reviewerNote: z.string().nullable(),\n verdict: ReviewVerdict.shape.verdict.nullable(),\n});\nexport type FactoryMergeChecks = z.infer<typeof FactoryMergeChecks>;\n\n/** `GET /api/projects/:id/factory`: everything the factory panel shows. */\nexport const FactoryStatus = z.object({\n projectId: Id,\n mode: AutonomyMode,\n experimental: z.boolean(),\n loopState: FactoryLoopState,\n pausedReason: z.string().nullable(),\n /** The project's switch; `globalKillSwitch` stops every project. */\n killSwitch: z.boolean(),\n globalKillSwitch: z.boolean(),\n limits: FactoryLimits,\n tuning: FactoryTuning,\n spendToday: z.object({ tokens: z.int().nonnegative(), usd: z.number().nonnegative() }),\n mergesToday: z.int().nonnegative(),\n consecutiveFailures: z.int().nonnegative(),\n activeSessions: z.int().nonnegative(),\n backlog: z.array(FactoryWorkItem),\n inProgress: z.array(FactoryWorkItem),\n mergeChecks: z.array(FactoryMergeChecks),\n /** Merged, reverted, failed, rejected and escalated items, newest first. */\n recent: z.array(FactoryWorkItem),\n visionExists: z.boolean(),\n lastDigest: FactoryDigest.nullable(),\n lastTickAt: Timestamp.nullable(),\n});\nexport type FactoryStatus = z.infer<typeof FactoryStatus>;\n\n/** `GET /api/projects/:id/factory/items/:itemId`. */\nexport const FactoryItemResponse = z.object({ item: FactoryItem });\nexport type FactoryItemResponse = z.infer<typeof FactoryItemResponse>;\n\n/** A candidate reported by an improvement finder (`factory_report_candidates`). */\nexport const FactoryCandidate = z.object({\n title: z.string().trim().min(3).max(200),\n summary: z.string().trim().min(1).max(4_000),\n acceptanceCriteria: z.array(z.string().trim().min(1).max(500)).min(1).max(12),\n /** Paths the change would touch, when known. */\n paths: z.array(z.string()).max(50).optional(),\n});\nexport type FactoryCandidate = z.infer<typeof FactoryCandidate>;\n\n/** The PM's decision on a candidate (`factory_triage`). */\nexport const FactoryTriageRequest = z.object({\n itemId: Id,\n decision: z.enum([\"accept\", \"reject\"]),\n /** Score against the vision, 0..1 (accepts). */\n score: z.number().min(0).max(1).optional(),\n /** Replaces the finder's acceptance criteria (accepts). */\n acceptanceCriteria: z.array(z.string().trim().min(1).max(500)).min(1).max(12).optional(),\n /** Why (required for rejects). */\n reason: z.string().trim().min(1).max(1_000).optional(),\n});\nexport type FactoryTriageRequest = z.infer<typeof FactoryTriageRequest>;\n\n// ---------------------------------------------------------------- events\n\n/** Payloads of the factory's persisted events (projected into `factory_*` tables). */\nexport const FACTORY_EVENT_PAYLOADS = {\n \"factory.loop.updated\": z.object({ loop: FactoryLoop }),\n \"factory.item.updated\": z.object({ item: FactoryItem }),\n \"factory.digest.created\": z.object({ digest: FactoryDigest }),\n} as const;\n","import { z } from \"zod\";\nimport { GitHubIssueRef, GitHubPrRef, Id, Timestamp } from \"./common\";\n\n/**\n * GitHub issue and pull request flow (§9): projections synced from GitHub, the events the\n * sync emits, and the HTTP shapes of `/api/projects/:id/github/*`, `/api/prs/:id` and\n * `/api/sessions/:id/github`. Local-only projects never have any of this.\n */\n\n// ---------------------------------------------------------------- connection\n\n/** Where the GitHub token came from: `gh auth token` at runtime, or the OS keychain. */\nexport const GithubTokenSource = z.enum([\"gh\", \"keychain\"]);\nexport type GithubTokenSource = z.infer<typeof GithubTokenSource>;\n\n/** Whether CodeDen can reach GitHub. The token itself never leaves the server. */\nexport const GithubConnection = z.object({\n connected: z.boolean(),\n source: GithubTokenSource.nullable(),\n /** The authenticated user, once known. */\n login: z.string().nullable(),\n /** Why it is not connected, e.g. \"Run `gh auth login`\". */\n message: z.string().nullable(),\n});\nexport type GithubConnection = z.infer<typeof GithubConnection>;\n\n/** Sync state of one GitHub project. */\nexport const GithubSyncStatus = z.object({\n projectId: Id,\n lastSyncAt: Timestamp.nullable(),\n lastError: z.string().nullable(),\n /** Milliseconds between polls right now (faster while sessions have open PRs). */\n intervalMs: z.int().nonnegative(),\n nextSyncAt: Timestamp.nullable(),\n});\nexport type GithubSyncStatus = z.infer<typeof GithubSyncStatus>;\n\n// ---------------------------------------------------------------- entities\n\n/** One issue (pull requests excluded), as projected into `github_issues`. */\nexport const GithubIssue = z.object({\n projectId: Id,\n number: z.int().positive(),\n title: z.string(),\n state: z.enum([\"open\", \"closed\"]),\n url: z.url(),\n labels: z.array(z.string()),\n author: z.string().nullable(),\n body: z.string().nullable(),\n comments: z.int().nonnegative(),\n createdAt: Timestamp.nullable(),\n updatedAt: Timestamp,\n closedAt: Timestamp.nullable(),\n /** CodeDen sessions working on this issue (from each session's `issue`). */\n sessionIds: z.array(Id).default([]),\n});\nexport type GithubIssue = z.infer<typeof GithubIssue>;\n\n/** Combined state of a PR's head commit checks and commit statuses. `none`: no checks. */\nexport const ChecksState = z.enum([\"none\", \"pending\", \"success\", \"failure\"]);\nexport type ChecksState = z.infer<typeof ChecksState>;\n\n/** One check run or commit status on a PR's head commit. */\nexport const GithubCheck = z.object({\n name: z.string(),\n /** `queued`, `in_progress`, `completed` (check runs) or `pending`/`completed` (statuses). */\n status: z.string(),\n /** `success`, `failure`, `neutral`, `skipped`, `cancelled`, `timed_out`, ... once completed. */\n conclusion: z.string().nullable(),\n url: z.string().nullable(),\n});\nexport type GithubCheck = z.infer<typeof GithubCheck>;\n\nexport const GithubChecksSummary = z.object({\n state: ChecksState,\n total: z.int().nonnegative(),\n passed: z.int().nonnegative(),\n failed: z.int().nonnegative(),\n pending: z.int().nonnegative(),\n checks: z.array(GithubCheck),\n});\nexport type GithubChecksSummary = z.infer<typeof GithubChecksSummary>;\n\n/** The PR's review decision (`none` when the repo needs no reviews and none was given). */\nexport const ReviewDecision = z.enum([\"none\", \"review_required\", \"approved\", \"changes_requested\"]);\nexport type ReviewDecision = z.infer<typeof ReviewDecision>;\n\nexport const GithubReview = z.object({\n id: z.string(),\n author: z.string().nullable(),\n state: z.enum([\"approved\", \"changes_requested\", \"commented\", \"dismissed\", \"pending\"]),\n body: z.string(),\n submittedAt: Timestamp.nullable(),\n url: z.string().nullable(),\n});\nexport type GithubReview = z.infer<typeof GithubReview>;\n\nexport const Mergeable = z.enum([\"mergeable\", \"conflicting\", \"unknown\"]);\nexport type Mergeable = z.infer<typeof Mergeable>;\n\n/** One pull request, as projected into `github_prs`. */\nexport const GithubPr = z.object({\n /** `<projectId>:<number>`, the id used by `/api/prs/:id`. */\n id: z.string().min(1),\n projectId: Id,\n number: z.int().positive(),\n title: z.string(),\n state: GitHubPrRef.shape.state,\n url: z.url(),\n author: z.string().nullable(),\n headBranch: z.string(),\n baseBranch: z.string(),\n headSha: z.string().nullable(),\n checks: GithubChecksSummary,\n reviewDecision: ReviewDecision,\n /** Latest reviews, oldest first (up to 20). */\n reviews: z.array(GithubReview),\n mergeable: Mergeable,\n /** Issues the PR closes (`Fixes #N` and linked issues). */\n linkedIssues: z.array(z.int().positive()),\n /**\n * Pending review requests: user logins and team slugs (`org/team`), sorted. Absent on rows\n * synced before it was tracked, which tells the sync not to treat every request as new.\n */\n requestedReviewers: z.array(z.string()).optional(),\n /** Latest commits on the PR (up to 50), oldest first. */\n commits: z.array(z.object({ sha: z.string(), message: z.string() })),\n /** The CodeDen session that owns the PR (created it, or works on its head branch). */\n sessionId: Id.nullable(),\n createdAt: Timestamp.nullable(),\n updatedAt: Timestamp,\n mergedAt: Timestamp.nullable(),\n closedAt: Timestamp.nullable(),\n});\nexport type GithubPr = z.infer<typeof GithubPr>;\n\n/** `/api/prs/:id`: the projection plus live details. */\nexport const GithubPrDetails = GithubPr.extend({\n body: z.string(),\n additions: z.int().nonnegative(),\n deletions: z.int().nonnegative(),\n files: z.array(\n z.object({\n path: z.string(),\n status: z.string(),\n additions: z.int().nonnegative(),\n deletions: z.int().nonnegative(),\n }),\n ),\n});\nexport type GithubPrDetails = z.infer<typeof GithubPrDetails>;\n\n/** Build the `/api/prs/:id` id of a PR. */\nexport function githubPrId(projectId: string, number: number): string {\n return `${projectId}:${number}`;\n}\n\n/** Parse a `/api/prs/:id` id; null when malformed. */\nexport function parseGithubPrId(id: string): { projectId: string; number: number } | null {\n const at = id.lastIndexOf(\":\");\n if (at <= 0) return null;\n const number = Number(id.slice(at + 1));\n if (!Number.isInteger(number) || number <= 0) return null;\n return { projectId: id.slice(0, at), number };\n}\n\n// ---------------------------------------------------------------- events\n\nconst issuePayload = { issue: GithubIssue };\n\n/** A new comment on an issue, as carried by `issue.commented`. */\nexport const GithubNewComment = z.object({\n id: z.int(),\n author: z.string().nullable(),\n body: z.string(),\n createdAt: Timestamp,\n url: z.url(),\n /** Posted by CodeDen itself (carries its hidden marker); never triggers automations. */\n fromCodeden: z.boolean(),\n});\nexport type GithubNewComment = z.infer<typeof GithubNewComment>;\nconst prPayload = { pr: GithubPr };\n\n/**\n * Domain events from GitHub sync (§9, §10 triggers). Each carries the full projection row, so\n * `github_issues` / `github_prs` can be rebuilt from the log. `github.synced` is the silent\n * first import of a project (no notices or automations fire for it).\n */\nexport const GITHUB_EVENT_PAYLOADS = {\n \"github.synced\": z.object({\n projectId: Id,\n issues: z.array(GithubIssue),\n prs: z.array(GithubPr),\n }),\n \"issue.opened\": z.object(issuePayload),\n \"issue.labeled\": z.object({ ...issuePayload, added: z.array(z.string()) }),\n /** Title, body, state or label removal changed. `changes` names the fields. */\n \"issue.updated\": z.object({ ...issuePayload, changes: z.array(z.string()) }),\n /**\n * The issue's comment count went up. `comments` are the new comments, oldest first (up to 10;\n * empty when they could not be read).\n */\n \"issue.commented\": z.object({ ...issuePayload, comments: z.array(GithubNewComment) }),\n \"pr.opened\": z.object(prPayload),\n \"pr.updated\": z.object({ ...prPayload, changes: z.array(z.string()) }),\n /** Reviews were requested from `reviewers` (logins or `org/team`) that were not before. */\n \"pr.review_requested\": z.object({ ...prPayload, reviewers: z.array(z.string()) }),\n \"pr.checks_passed\": z.object(prPayload),\n \"pr.checks_failed\": z.object(prPayload),\n \"pr.merged\": z.object(prPayload),\n \"pr.closed\": z.object(prPayload),\n \"review.submitted\": z.object({ ...prPayload, review: GithubReview }),\n} as const;\nexport type GithubEventType = keyof typeof GITHUB_EVENT_PAYLOADS;\nexport const GITHUB_EVENT_TYPES = Object.keys(GITHUB_EVENT_PAYLOADS) as GithubEventType[];\n\n// ---------------------------------------------------------------- HTTP shapes\n\nexport const GithubListQuery = z.object({\n state: z.enum([\"open\", \"closed\", \"all\"]).default(\"open\"),\n limit: z.coerce.number().int().min(1).max(500).default(100),\n});\nexport type GithubListQuery = z.infer<typeof GithubListQuery>;\n\nexport const GithubIssuesResponse = z.object({\n connection: GithubConnection,\n sync: GithubSyncStatus.nullable(),\n issues: z.array(GithubIssue),\n});\nexport type GithubIssuesResponse = z.infer<typeof GithubIssuesResponse>;\n\nexport const GithubPrsResponse = z.object({\n connection: GithubConnection,\n sync: GithubSyncStatus.nullable(),\n prs: z.array(GithubPr),\n});\nexport type GithubPrsResponse = z.infer<typeof GithubPrsResponse>;\n\nexport const CreateGithubIssueRequest = z.object({\n title: z.string().min(1).max(256),\n body: z.string().max(65_000).default(\"\"),\n labels: z.array(z.string().min(1)).max(20).default([]),\n});\nexport type CreateGithubIssueRequest = z.infer<typeof CreateGithubIssueRequest>;\n\nexport const GithubCommentRequest = z.object({ body: z.string().min(1).max(65_000) });\nexport type GithubCommentRequest = z.infer<typeof GithubCommentRequest>;\n\nexport const GithubCommentResponse = z.object({ id: z.int(), url: z.url() });\nexport type GithubCommentResponse = z.infer<typeof GithubCommentResponse>;\n\nexport const GithubLabelRequest = z.object({\n add: z.array(z.string().min(1)).max(20).default([]),\n remove: z.array(z.string().min(1)).max(20).default([]),\n});\nexport type GithubLabelRequest = z.infer<typeof GithubLabelRequest>;\n\nexport const MergePrRequest = z.object({\n method: z.enum([\"squash\", \"merge\", \"rebase\"]).default(\"squash\"),\n /** Only merge when the head is still this commit. */\n sha: z.string().optional(),\n commitTitle: z.string().max(256).optional(),\n commitMessage: z.string().max(65_000).optional(),\n});\nexport type MergePrRequest = z.infer<typeof MergePrRequest>;\n\nexport const MergePrResponse = z.object({ merged: z.boolean(), sha: z.string().nullable() });\nexport type MergePrResponse = z.infer<typeof MergePrResponse>;\n\n/** A comment on an issue or PR conversation. */\nexport const GithubIssueComment = z.object({\n id: z.int(),\n author: z.string().nullable(),\n body: z.string(),\n createdAt: Timestamp,\n url: z.url(),\n});\nexport type GithubIssueComment = z.infer<typeof GithubIssueComment>;\n\n/** An issue with its latest comments (up to 20, oldest first), for triage and briefs. */\nexport const GithubIssueDetails = GithubIssue.extend({\n recentComments: z.array(GithubIssueComment),\n});\nexport type GithubIssueDetails = z.infer<typeof GithubIssueDetails>;\n\n/** Issue triage classes (§10): `ready` accepts the issue, the rest decline or defer it. */\nexport const TriageDecision = z.enum([\n \"ready\",\n \"needs_info\",\n \"unsafe\",\n \"out_of_scope\",\n \"duplicate\",\n]);\nexport type TriageDecision = z.infer<typeof TriageDecision>;\n\n/** Apply a triage decision: labels, an optional comment, optionally close the issue. */\nexport const TriageIssueRequest = z.object({\n decision: TriageDecision,\n labels: z.array(z.string().min(1)).max(20).default([]),\n removeLabels: z.array(z.string().min(1)).max(20).default([]),\n comment: z.string().min(1).max(65_000).optional(),\n /** Close the issue (as \"not planned\" unless the decision is `ready`). */\n close: z.boolean().default(false),\n});\nexport type TriageIssueRequest = z.infer<typeof TriageIssueRequest>;\n\nexport const TriageIssueResult = z.object({\n issue: GithubIssue,\n decision: TriageDecision,\n commentUrl: z.url().nullable(),\n closed: z.boolean(),\n});\nexport type TriageIssueResult = z.infer<typeof TriageIssueResult>;\n\n/** `/api/sessions/:id/github`: the session's issue and PR with live status. */\nexport const SessionGithubResponse = z.object({\n connection: GithubConnection,\n issue: GitHubIssueRef.nullable(),\n pr: GithubPr.nullable(),\n});\nexport type SessionGithubResponse = z.infer<typeof SessionGithubResponse>;\n","import { z } from \"zod\";\nimport { GitHubIssueRef, GitHubPrRef, Id, JsonValue, Timestamp } from \"./common\";\nimport { InboxItemKind, InboxItemStatus } from \"./entities/inbox\";\nimport { ConflictDecision, ScheduledRun, StartedBy, WorkKey, WorkSummary } from \"./work\";\n\n/**\n * Orchestration (§8): typed notices that wake the PM and the orchestrator, the status digest\n * injected on every wake, the role sessions and persisted conflicts. Notices are structured\n * data all the way to the UI, which renders them as cards; they are never parsed from text.\n */\n\n/** Who a notice is for: a project's PM or the orchestrator. */\nexport const NoticeTarget = z.enum([\"pm\", \"orchestrator\"]);\nexport type NoticeTarget = z.infer<typeof NoticeTarget>;\n\n/** Kinds of notices (§8.2 step 4). */\nexport const NoticeType = z.enum([\n \"session.finished\",\n \"session.needs_input\",\n \"session.failed\",\n \"pr.opened\",\n \"pr.checks_failed\",\n \"pr.checks_passed\",\n \"pr.merged\",\n \"review.submitted\",\n \"issue.opened\",\n \"automation.skipped\",\n \"conflict\",\n \"pm.message\",\n \"factory.update\",\n]);\nexport type NoticeType = z.infer<typeof NoticeType>;\n\nconst noticeBase = {\n id: Id,\n projectId: Id.nullable(),\n target: NoticeTarget,\n /** Session the notice is about, when there is one. */\n sessionId: Id.nullable(),\n /** One line for cards and the wake summary. */\n title: z.string(),\n createdAt: Timestamp,\n /** Set when a wake delivered it to its target (or it was shown in a digest). */\n deliveredAt: Timestamp.nullable(),\n};\n\n/** The work a session notice is about. */\nconst workRef = {\n sessionId: Id,\n workKey: WorkKey,\n purpose: z.string(),\n startedBy: StartedBy,\n};\n\n/** A typed notice. `data` is specific to `type`. */\nexport const Notice = z.discriminatedUnion(\"type\", [\n z.object({\n ...noticeBase,\n type: z.literal(\"session.finished\"),\n data: z.object({\n ...workRef,\n /** The agent's `finish` summary, else the start of its final message. */\n summary: z.string().nullable(),\n outcome: z.string().nullable(),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"session.needs_input\"),\n data: z.object({ ...workRef, inboxItemId: Id, kind: InboxItemKind, question: z.string() }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"session.failed\"),\n data: z.object({ ...workRef, error: z.string() }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"pr.opened\"),\n data: z.object({ sessionId: Id.nullable(), pr: GitHubPrRef }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"pr.checks_failed\"),\n data: z.object({\n sessionId: Id.nullable(),\n pr: GitHubPrRef,\n failedChecks: z.array(z.string()),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"pr.checks_passed\"),\n data: z.object({ sessionId: Id.nullable(), pr: GitHubPrRef }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"pr.merged\"),\n data: z.object({\n sessionId: Id.nullable(),\n pr: GitHubPrRef,\n /** Issues the PR closes. */\n linkedIssues: z.array(z.int().positive()),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"review.submitted\"),\n data: z.object({\n sessionId: Id.nullable(),\n pr: GitHubPrRef,\n reviewer: z.string().nullable(),\n state: z.enum([\"approved\", \"changes_requested\", \"commented\", \"dismissed\", \"pending\"]),\n /** Start of the review body. */\n body: z.string(),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"issue.opened\"),\n data: z.object({\n issue: GitHubIssueRef,\n author: z.string().nullable(),\n labels: z.array(z.string()),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"automation.skipped\"),\n data: z.object({\n automationRunId: Id,\n automationId: Id,\n workKey: WorkKey,\n purpose: z.string(),\n reason: z.string(),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"conflict\"),\n data: z.object({\n conflictId: Id,\n workKey: WorkKey,\n purpose: z.string(),\n requestedBy: StartedBy,\n existing: z.array(WorkSummary),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"pm.message\"),\n data: z.object({\n fromSessionId: Id,\n text: z.string(),\n /** Informational messages never wake the orchestrator; they show in its next digest. */\n informational: z.boolean(),\n }),\n }),\n z.object({\n ...noticeBase,\n type: z.literal(\"factory.update\"),\n data: z.object({\n /** What happened in the factory loop (§10.1). */\n event: z.enum([\n \"triage_needed\",\n \"digest\",\n \"paused\",\n \"escalated\",\n \"regression\",\n \"merged\",\n \"failed\",\n ]),\n /** Instructions (for the PM) or a summary (for the orchestrator). */\n text: z.string(),\n itemIds: z.array(Id).default([]),\n }),\n }),\n]);\nexport type Notice = z.infer<typeof Notice>;\nexport type NoticeOf<T extends NoticeType> = Extract<Notice, { type: T }>;\n\n/** `notice` item `code` used for the batch of notices shown at the start of a wake turn. */\nexport const NOTICE_BATCH_CODE = \"orchestration_notices\";\n\n/** `data` of a `notice` item with `code: \"orchestration_notices\"` (rendered as cards). */\nexport const NoticeBatchData = z.object({\n notices: z.array(Notice),\n});\nexport type NoticeBatchData = z.infer<typeof NoticeBatchData>;\n\n// ---------------------------------------------------------------- status digest (§8.4)\n\n/** A recent outcome of agent work, for digests. */\nexport const RecentOutcome = z.object({\n sessionId: Id,\n workKey: WorkKey,\n purpose: z.string(),\n outcome: z.enum([\"finished\", \"failed\", \"stopped\"]),\n summary: z.string().nullable(),\n at: Timestamp,\n});\nexport type RecentOutcome = z.infer<typeof RecentOutcome>;\n\n/** Everything a PM needs to know about its project, without spending a tool call. */\nexport const ProjectStatus = z.object({\n project: z.object({ id: Id, name: z.string(), kind: z.enum([\"github\", \"local\"]) }),\n /** Agent sessions and automation runs that are starting, running or waiting. */\n running: z.array(WorkSummary),\n /** Work queued behind other work (§8.4 `wait`). */\n queued: z.array(WorkSummary),\n /** Next scheduled automation runs. */\n scheduled: z.array(ScheduledRun),\n inbox: z.object({\n open: z.int().nonnegative(),\n items: z.array(\n z.object({ id: Id, kind: InboxItemKind, title: z.string(), sessionId: Id.nullable() }),\n ),\n }),\n /** Finishes and failures of the last 24 hours, newest first. */\n recent: z.array(RecentOutcome),\n});\nexport type ProjectStatus = z.infer<typeof ProjectStatus>;\n\n/** The orchestrator's view: every project rolled up (`get_overview`). */\nexport const Overview = z.object({\n generatedAt: Timestamp,\n projects: z.array(ProjectStatus),\n /** Work keys running in more than one project at once. */\n sharedWork: z.array(z.object({ workKey: WorkKey, projectIds: z.array(Id) })),\n /** PM messages marked informational that the orchestrator has not seen yet. */\n pmMessages: z.array(z.object({ projectId: Id.nullable(), text: z.string(), at: Timestamp })),\n});\nexport type Overview = z.infer<typeof Overview>;\n\n// ---------------------------------------------------------------- role sessions and conflicts\n\n/** The long-lived role sessions (§8.1): the orchestrator and one PM per project. */\nexport const RoleSessionsRef = z.object({\n orchestrator: Id.nullable(),\n /** PM session id by project id. */\n pms: z.record(z.string(), Id),\n});\nexport type RoleSessionsRef = z.infer<typeof RoleSessionsRef>;\n\n/**\n * A start request that matched running work, persisted as an inbox item of kind `conflict`\n * (`id` is the inbox item id). Resolved with `wait`, `skip`, `join` or `force` (§8.4).\n */\nexport const ConflictRecord = z.object({\n id: Id,\n projectId: Id.nullable(),\n request: z.object({ purpose: z.string(), workKey: WorkKey, startedBy: StartedBy }),\n existing: z.array(WorkSummary).min(1),\n /** The original `StartSessionRequest`, retried with the decision. */\n start: JsonValue,\n status: InboxItemStatus,\n resolution: ConflictDecision.nullable(),\n /** The `StartSessionResponse` of the retried start. */\n outcome: JsonValue.nullable(),\n createdAt: Timestamp,\n resolvedAt: Timestamp.nullable(),\n});\nexport type ConflictRecord = z.infer<typeof ConflictRecord>;\n","import { z } from \"zod\";\nimport { Timestamp } from \"./common\";\n\n/**\n * `settings.updates.mode` (§16): `off` never asks the registry; `notify` checks and offers a\n * one-click update; `auto` also downloads a new version in the background so it starts on the\n * next launch (or right away with \"Restart now\").\n */\nexport const UpdateMode = z.enum([\"off\", \"notify\", \"auto\"]);\nexport type UpdateMode = z.infer<typeof UpdateMode>;\n\n/**\n * Where the running CodeDen came from. `packaged`: an npm install (`npx`, global or a\n * side-by-side version in `<home>/app`), which can update itself. `source`: the repository or\n * a workspace build, which never switches versions (pull and rebuild instead).\n */\nexport const InstallSource = z.enum([\"packaged\", \"source\"]);\nexport type InstallSource = z.infer<typeof InstallSource>;\n\n/**\n * Self-update progress. `installing`: npm is fetching `target` into `<home>/app/<target>`;\n * `installed`: it is ready and starts on the next launch (or with a restart); `restarting`:\n * the server is handing over to `target`; `failed`: see `installError`.\n */\nexport const UpdateState = z.enum([\"idle\", \"installing\", \"installed\", \"restarting\", \"failed\"]);\nexport type UpdateState = z.infer<typeof UpdateState>;\n\n/** A CodeDen version installed side by side in `<home>/app/<version>`. */\nexport const InstalledVersion = z.object({\n version: z.string(),\n /** `<home>/app/current.json` points at it: the launcher starts it. */\n current: z.boolean(),\n /** The CLI entry exists and its package reports this version. */\n valid: z.boolean(),\n});\nexport type InstalledVersion = z.infer<typeof InstalledVersion>;\n\n/**\n * `GET /api/updates` (§16) and the `update` WebSocket message: the npm registry check plus the\n * one-click self-update state. The registry is asked on start and every 6 hours while the\n * mode is not `off`; `?refresh=1` checks again now. Nothing but the package name is sent.\n */\nexport const UpdateStatus = z.object({\n /** The running version. */\n current: z.string(),\n /** Latest published version, null until a check succeeded. */\n latest: z.string().nullable(),\n /** `latest` is newer than `current`. */\n updateAvailable: z.boolean(),\n /** The mode is not `off` (and `CODEDEN_UPDATE_CHECK` is not `0`); when false nothing is fetched. */\n enabled: z.boolean(),\n mode: UpdateMode,\n checkedAt: Timestamp.nullable(),\n /** Why the last check failed (offline, registry error), else null. */\n error: z.string().nullable(),\n /** The manual way to update, e.g. `npm i -g codeden@latest`. */\n command: z.string(),\n source: InstallSource,\n state: UpdateState,\n /** The version being installed, installed and waiting for a restart, or restarting into. */\n target: z.string().nullable(),\n /** The latest npm output line while installing. */\n progress: z.string().nullable(),\n /** Why the last install, switch or restart failed. */\n installError: z.string().nullable(),\n /** This server can restart itself into another version (started by the `codeden` CLI). */\n canRestart: z.boolean(),\n /** What to run to restart by hand when it can't, e.g. `npx codeden`. */\n restartCommand: z.string(),\n /** Versions in `<home>/app`, newest first. */\n installed: z.array(InstalledVersion),\n /** The version \"Roll back\" would start (the previous one, or the copy you launched). */\n rollbackTo: z.string().nullable(),\n /** \"Roll back\" is possible (a previous version is recorded). */\n canRollback: z.boolean(),\n /** Set when the launcher could not start the pinned version and fell back. */\n warning: z.string().nullable(),\n});\nexport type UpdateStatus = z.infer<typeof UpdateStatus>;\n\n/** `POST /api/updates/install`: install `version` (default: the latest) and restart into it. */\nexport const UpdateInstallRequest = z.object({\n version: z.string().min(1).optional(),\n /** Restart once installed (default true); false leaves it for the next launch. */\n restart: z.boolean().optional(),\n});\nexport type UpdateInstallRequest = z.infer<typeof UpdateInstallRequest>;\n\n/** `GET /api/updates/notes?version=`: release notes for \"What's new\". */\nexport const ReleaseNotes = z.object({\n version: z.string(),\n /** Markdown from the GitHub Release body or the CHANGELOG section; null when unreachable. */\n body: z.string().nullable(),\n /** Where to read them in the browser. */\n url: z.string(),\n});\nexport type ReleaseNotes = z.infer<typeof ReleaseNotes>;\n\n/**\n * `<home>/app/current.json`: which side-by-side version the `codeden` launcher starts. Written\n * by the server or `codeden update`; read (without zod, on the hot path) by the launcher in\n * `apps/cli/src/launcher.ts`, which must accept everything this schema accepts.\n */\nexport const AppPointer = z.object({\n version: z.string().min(1),\n /** The version that ran before the switch (\"Roll back\" target), null when unknown. */\n previous: z.string().nullable(),\n updatedAt: Timestamp,\n});\nexport type AppPointer = z.infer<typeof AppPointer>;\n\n/** True when version `a` is newer than `b` (`x.y.z`, prerelease tags sort before releases). */\nexport function isNewerVersion(a: string, b: string): boolean {\n return compareVersions(a, b) > 0;\n}\n\n/** Compare two `x.y.z[-pre]` versions: negative when `a < b`, 0 when equal, positive when newer. */\nexport function compareVersions(a: string, b: string): number {\n const parse = (v: string) => {\n const trimmed = v.trim().replace(/^v/, \"\");\n const dash = trimmed.indexOf(\"-\");\n const core = dash === -1 ? trimmed : trimmed.slice(0, dash);\n const pre = dash === -1 ? \"\" : trimmed.slice(dash + 1);\n return { nums: core.split(\".\").map((n) => Number.parseInt(n, 10) || 0), pre };\n };\n const x = parse(a);\n const y = parse(b);\n for (let i = 0; i < 3; i++) {\n const d = (x.nums[i] ?? 0) - (y.nums[i] ?? 0);\n if (d !== 0) return d;\n }\n if (x.pre === y.pre) return 0;\n if (!x.pre) return 1; // release beats prerelease\n if (!y.pre) return -1;\n return comparePrerelease(x.pre, y.pre);\n}\n\n/** Dot-separated prerelease identifiers: numeric ones compare as numbers and sort first. */\nfunction comparePrerelease(a: string, b: string): number {\n const xs = a.split(\".\");\n const ys = b.split(\".\");\n for (let i = 0; i < Math.max(xs.length, ys.length); i++) {\n const x = xs[i];\n const y = ys[i];\n if (x === undefined) return -1;\n if (y === undefined) return 1;\n const xn = /^\\d+$/.test(x);\n const yn = /^\\d+$/.test(y);\n if (xn && yn) {\n const d = Number(x) - Number(y);\n if (d !== 0) return d;\n } else if (xn !== yn) {\n return xn ? -1 : 1;\n } else if (x !== y) {\n return x < y ? -1 : 1;\n }\n }\n return 0;\n}\n","import { z } from \"zod\";\nimport { AutonomyLevel, ProviderId, QuietHours, ReasoningEffort } from \"./common\";\nimport { UpdateMode } from \"./updates\";\n\n/** `auto` lets CodeDen pick the first ready provider (Claude, then Codex). */\nexport const ProviderChoice = z.union([z.literal(\"auto\"), ProviderId]);\nexport type ProviderChoice = z.infer<typeof ProviderChoice>;\n\n/** Image engine choice (§12.5): `auto` picks Codex when logged in, `none` hides the tool. */\nexport const ImageEngineSetting = z.enum([\"auto\", \"codex\", \"gemini\", \"openai\", \"none\"]);\nexport type ImageEngineSetting = z.infer<typeof ImageEngineSetting>;\n\n/** Per-project image generation override; unset fields fall back to the global settings. */\nexport const ImageGenerationOverride = z.object({\n engine: ImageEngineSetting.optional(),\n defaultSize: z.string().optional(),\n quality: z.enum([\"auto\", \"low\", \"medium\", \"high\"]).optional(),\n /** Images per day for this project (counted on its own, inside the global cap). */\n dailyCap: z.int().nonnegative().optional(),\n});\nexport type ImageGenerationOverride = z.infer<typeof ImageGenerationOverride>;\n\n/** Default provider/model/effort for one role. */\nexport const RoleDefaults = z.object({\n provider: ProviderChoice.default(\"auto\"),\n model: z.string().nullable().default(null),\n effort: ReasoningEffort.nullable().default(null),\n});\nexport type RoleDefaults = z.infer<typeof RoleDefaults>;\n\n/**\n * User settings persisted in `<home>/settings.json` (non-secret; API keys live in the OS\n * keychain). Every field has a default, so `Settings.parse({})` yields a complete object and\n * older files keep working as fields are added.\n */\nexport const Settings = z.object({\n schemaVersion: z.literal(1).default(1),\n appearance: z\n .object({\n theme: z.enum([\"system\", \"dark\", \"light\"]).default(\"dark\"),\n })\n .prefault({}),\n /** Default autonomy level (§11.2), overridable per project and session. */\n autonomy: z\n .object({\n default: AutonomyLevel.default(\"auto\"),\n })\n .prefault({}),\n providers: z\n .object({\n orchestrator: RoleDefaults.prefault({}),\n pm: RoleDefaults.prefault({}),\n agent: RoleDefaults.prefault({}),\n })\n .prefault({}),\n /** Small, cheap model for side jobs (§7.4). */\n utilityModel: z\n .object({\n provider: ProviderChoice.default(\"auto\"),\n model: z.string().nullable().default(null),\n jobs: z\n .object({\n followups: z.boolean().default(true),\n readAloudSummary: z.boolean().default(true),\n sessionTitles: z.boolean().default(true),\n noticeSummaries: z.boolean().default(true),\n })\n .prefault({}),\n })\n .prefault({}),\n /** Follow-up prompt chips (§7.5). */\n followups: z\n .object({\n enabled: z.boolean().default(true),\n /** Send immediately on click instead of filling the composer. */\n sendOnClick: z.boolean().default(false),\n })\n .prefault({}),\n /** Voice (§11.3). */\n voice: z\n .object({\n dictation: z\n .object({\n engine: z.enum([\"browser\", \"elevenlabs\", \"openai\"]).default(\"browser\"),\n pushToTalkShortcut: z.string().nullable().default(null),\n language: z.string().nullable().default(null),\n })\n .prefault({}),\n readAloud: z\n .object({\n enabled: z.boolean().default(false),\n engine: z.enum([\"browser\", \"elevenlabs\"]).default(\"browser\"),\n voice: z.string().nullable().default(null),\n onlyWhenUnfocused: z.boolean().default(false),\n quietHours: QuietHours.nullable().default(null),\n })\n .prefault({}),\n })\n .prefault({}),\n /** Image generation for every agent (§12.5). */\n imageGeneration: z\n .object({\n /** `auto`: Codex when logged in, else the first engine with a key; `none` hides the tool. */\n engine: ImageEngineSetting.default(\"auto\"),\n defaultSize: z.string().default(\"1024x1024\"),\n quality: z.enum([\"auto\", \"low\", \"medium\", \"high\"]).default(\"auto\"),\n /** Images per day across all projects (0 turns generation off). */\n dailyCap: z.int().nonnegative().default(50),\n /** Overrides by project id. */\n projects: z.record(z.string(), ImageGenerationOverride).default({}),\n })\n .prefault({}),\n notifications: z\n .object({\n toasts: z.boolean().default(true),\n browser: z.boolean().default(false),\n })\n .prefault({}),\n /** Global factory controls (§10.1). */\n factory: z\n .object({\n /** Stops every project's factory loop and all factory sessions. */\n killSwitch: z.boolean().default(false),\n })\n .prefault({}),\n /** Master switch; individual automations are still off by default (§10). */\n automations: z\n .object({\n enabled: z.boolean().default(true),\n })\n .prefault({}),\n /**\n * Update checks and one-click self-update (§16). Settings saved before `mode` existed had\n * `check: false` to turn checks off; that reads as `mode: \"off\"`.\n */\n updates: z.preprocess(\n (value) =>\n typeof value === \"object\" &&\n value !== null &&\n !(\"mode\" in value) &&\n (value as { check?: unknown }).check === false\n ? { mode: \"off\" }\n : value,\n z\n .object({\n mode: UpdateMode.default(\"notify\"),\n })\n .prefault({}),\n ),\n /** First-run setup (§14): set once the user finishes the detection checklist. */\n setup: z\n .object({\n completed: z.boolean().default(false),\n completedAt: z.iso.datetime().nullable().default(null),\n })\n .prefault({}),\n});\nexport type Settings = z.infer<typeof Settings>;\n/** Settings as accepted on input: any subset, defaults fill the rest. */\nexport type SettingsInput = z.input<typeof Settings>;\n\n/** Recursive partial used for `PATCH /api/settings`; validated by re-parsing the merged result. */\nexport type DeepPartial<T> = T extends readonly unknown[]\n ? T\n : T extends object\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : T;\nexport type SettingsPatch = DeepPartial<Settings>;\n\n/** Default settings. */\nexport function defaultSettings(): Settings {\n return Settings.parse({});\n}\n","import { z } from \"zod\";\nimport {\n type AgentEvent,\n ItemCompletedEvent,\n ItemDeltaEvent,\n ItemStartedEvent,\n ItemUpdatedEvent,\n SessionUpdatedEvent,\n ThreadStartedEvent,\n TurnCompletedEvent,\n TurnFailedEvent,\n TurnInterruptedEvent,\n TurnStartedEvent,\n UsageUpdatedEvent,\n} from \"./agent-events\";\nimport { Id, Timestamp } from \"./common\";\nimport { Artifact } from \"./entities/artifact\";\nimport { Automation, AutomationRun } from \"./entities/automation\";\nimport { InboxItem } from \"./entities/inbox\";\nimport { Project } from \"./entities/project\";\nimport { Session } from \"./entities/session\";\nimport { FACTORY_EVENT_PAYLOADS } from \"./factory-api\";\nimport { GITHUB_EVENT_PAYLOADS } from \"./github\";\nimport { ConflictRecord, Notice } from \"./orchestration\";\nimport { PtyId } from \"./runner/commands\";\nimport { Settings } from \"./settings\";\nimport { Checkpoint, QueuedMessage, SetupStep } from \"./workbench\";\n\n/**\n * Untyped row of the append-only `events` table (§6): `seq, session_id, type, payload, ts`.\n * Use `EventEnvelope` to parse it into the typed union.\n */\nexport const RawEventEnvelope = z.object({\n /** Global, monotonically increasing sequence number assigned by the server. */\n seq: z.int().positive(),\n /** Session the event belongs to; null for global events (projects, settings, runner). */\n sessionId: Id.nullable(),\n type: z.string(),\n payload: z.unknown(),\n ts: Timestamp,\n});\nexport type RawEventEnvelope = z.infer<typeof RawEventEnvelope>;\n\nconst base = { seq: z.int().positive(), sessionId: Id.nullable(), ts: Timestamp };\nconst sessionBase = { seq: z.int().positive(), sessionId: Id, ts: Timestamp };\n\nfunction globalEvent<T extends string, P extends z.ZodType>(type: T, payload: P) {\n return z.object({ ...base, type: z.literal(type), payload });\n}\n\nfunction agentEvent<T extends string, P extends z.ZodType>(type: T, payload: P) {\n return z.object({ ...sessionBase, type: z.literal(`agent.${type}` as `agent.${T}`), payload });\n}\n\n/** Prefix used for persisted agent events: `agent.turn.started`, `agent.item.delta`, ... */\nexport const AGENT_EVENT_PREFIX = \"agent.\";\n\n/**\n * Typed persisted event. Agent events (§7.3) are stored as `agent.<type>` with the\n * normalized `AgentEvent` as payload; the rest are domain events written by the server\n * in the same transaction as the projections they update.\n */\nexport const EventEnvelope = z.discriminatedUnion(\"type\", [\n // Agent events, from runners.\n agentEvent(\"session.updated\", SessionUpdatedEvent),\n agentEvent(\"thread.started\", ThreadStartedEvent),\n agentEvent(\"turn.started\", TurnStartedEvent),\n agentEvent(\"turn.completed\", TurnCompletedEvent),\n agentEvent(\"turn.failed\", TurnFailedEvent),\n agentEvent(\"turn.interrupted\", TurnInterruptedEvent),\n agentEvent(\"item.started\", ItemStartedEvent),\n agentEvent(\"item.delta\", ItemDeltaEvent),\n agentEvent(\"item.updated\", ItemUpdatedEvent),\n agentEvent(\"item.completed\", ItemCompletedEvent),\n agentEvent(\"usage.updated\", UsageUpdatedEvent),\n // Domain events.\n globalEvent(\"project.created\", z.object({ project: Project })),\n globalEvent(\"project.updated\", z.object({ project: Project })),\n globalEvent(\"project.archived\", z.object({ projectId: Id })),\n globalEvent(\"session.created\", z.object({ session: Session })),\n /** Any change to a session row, including status transitions. */\n globalEvent(\"session.updated\", z.object({ session: Session })),\n globalEvent(\"inbox.created\", z.object({ item: InboxItem })),\n globalEvent(\"inbox.updated\", z.object({ item: InboxItem })),\n globalEvent(\"automation.saved\", z.object({ automation: Automation })),\n globalEvent(\"automation.deleted\", z.object({ automationId: Id })),\n globalEvent(\"automation_run.updated\", z.object({ run: AutomationRun })),\n /**\n * Scheduler state of an automation in a project changed (paused, resumed, next run skipped\n * or advanced, per-project override), or a project's automation switch (`automationId` null).\n * A hint for live views to refetch; the state itself is operational and not projected.\n */\n globalEvent(\n \"automation.updated\",\n z.object({ automationId: Id.nullable(), projectId: Id.nullable() }),\n ),\n globalEvent(\"artifact.created\", z.object({ artifact: Artifact })),\n globalEvent(\"settings.updated\", z.object({ settings: Settings })),\n globalEvent(\n \"runner.connected\",\n z.object({ runnerId: z.string(), version: z.string(), protocolVersion: z.int() }),\n ),\n globalEvent(\"runner.disconnected\", z.object({ runnerId: z.string(), reason: z.string() })),\n /** The runner started draining (upgrade or shutdown); its sessions resume afterwards. */\n globalEvent(\"runner.draining\", z.object({ runnerId: z.string(), reason: z.string() })),\n /** Progress of a worktree setup command (projected into the session's start metadata). */\n globalEvent(\"session.setup\", z.object({ sessionId: Id, step: SetupStep })),\n /** A turn checkpoint was written (projected into `checkpoints`, used for diffs). */\n globalEvent(\"checkpoint.created\", z.object({ checkpoint: Checkpoint })),\n /** A message was queued behind the running turn. */\n globalEvent(\"message.queued\", z.object({ message: QueuedMessage })),\n /** A queued message left the queue: delivered, or dropped (interrupt, stop). */\n globalEvent(\n \"message.dequeued\",\n z.object({ sessionId: Id, messageId: Id, reason: z.enum([\"sent\", \"dropped\"]) }),\n ),\n /** A typed orchestration notice for a PM or the orchestrator (§8.2). */\n globalEvent(\"notice.created\", z.object({ notice: Notice })),\n /** Notices delivered to their target (a wake, or shown in a digest). */\n globalEvent(\"notice.delivered\", z.object({ noticeIds: z.array(Id), at: Timestamp })),\n /** A start request matched running work; persisted with its `conflict` inbox item (§8.4). */\n globalEvent(\"conflict.created\", z.object({ conflict: ConflictRecord })),\n /** A runner terminal exited. */\n globalEvent(\"pty.exited\", z.object({ ptyId: PtyId, exitCode: z.int().nullable() })),\n // GitHub sync (§9); `sessionId` is the PR's linked session when there is one.\n globalEvent(\"github.synced\", GITHUB_EVENT_PAYLOADS[\"github.synced\"]),\n globalEvent(\"issue.opened\", GITHUB_EVENT_PAYLOADS[\"issue.opened\"]),\n globalEvent(\"issue.labeled\", GITHUB_EVENT_PAYLOADS[\"issue.labeled\"]),\n globalEvent(\"issue.updated\", GITHUB_EVENT_PAYLOADS[\"issue.updated\"]),\n globalEvent(\"issue.commented\", GITHUB_EVENT_PAYLOADS[\"issue.commented\"]),\n globalEvent(\"pr.opened\", GITHUB_EVENT_PAYLOADS[\"pr.opened\"]),\n globalEvent(\"pr.updated\", GITHUB_EVENT_PAYLOADS[\"pr.updated\"]),\n globalEvent(\"pr.review_requested\", GITHUB_EVENT_PAYLOADS[\"pr.review_requested\"]),\n globalEvent(\"pr.checks_passed\", GITHUB_EVENT_PAYLOADS[\"pr.checks_passed\"]),\n globalEvent(\"pr.checks_failed\", GITHUB_EVENT_PAYLOADS[\"pr.checks_failed\"]),\n globalEvent(\"pr.merged\", GITHUB_EVENT_PAYLOADS[\"pr.merged\"]),\n globalEvent(\"pr.closed\", GITHUB_EVENT_PAYLOADS[\"pr.closed\"]),\n globalEvent(\"review.submitted\", GITHUB_EVENT_PAYLOADS[\"review.submitted\"]),\n // Factory loop (§10.1): the loop record, work items (with merge checks) and daily digests.\n globalEvent(\"factory.loop.updated\", FACTORY_EVENT_PAYLOADS[\"factory.loop.updated\"]),\n globalEvent(\"factory.item.updated\", FACTORY_EVENT_PAYLOADS[\"factory.item.updated\"]),\n globalEvent(\"factory.digest.created\", FACTORY_EVENT_PAYLOADS[\"factory.digest.created\"]),\n]);\nexport type EventEnvelope = z.infer<typeof EventEnvelope>;\nexport type EventType = EventEnvelope[\"type\"];\n/** Narrow an envelope by type: `EventOf<\"session.created\">`. */\nexport type EventOf<T extends EventType> = Extract<EventEnvelope, { type: T }>;\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown ? Omit<T, K> : never;\n/** An event before the store assigns `seq` and `ts`. */\nexport type NewEvent = DistributiveOmit<EventEnvelope, \"seq\" | \"ts\">;\n\n/** Build the persisted form of an agent event for a session. */\nexport function agentEventToNewEvent(sessionId: string, event: AgentEvent): NewEvent {\n return {\n sessionId,\n type: `${AGENT_EVENT_PREFIX}${event.type}`,\n payload: event,\n } as NewEvent;\n}\n\n/** True when a persisted event carries an agent event payload. */\nexport function isAgentEnvelope(\n e: EventEnvelope,\n): e is Extract<EventEnvelope, { type: `agent.${string}` }> {\n return e.type.startsWith(AGENT_EVENT_PREFIX);\n}\n","import { z } from \"zod\";\nimport { ErrorInfo, Id, Timestamp } from \"./common\";\nimport { Automation } from \"./entities/automation\";\nimport { InboxItem } from \"./entities/inbox\";\nimport { Project } from \"./entities/project\";\nimport { ItemRecord, Session, Thread, Turn } from \"./entities/session\";\nimport { RawEventEnvelope } from \"./events\";\nimport { RoleSessionsRef } from \"./orchestration\";\nimport { ProviderInfo } from \"./provider\";\nimport { Settings } from \"./settings\";\nimport { UpdateStatus } from \"./updates\";\nimport { ScheduledRun } from \"./work\";\n\n/**\n * Server <-> UI realtime protocol (§6 \"Realtime to the UI\").\n *\n * 1. The client loads a `Snapshot` over HTTP (`GET /api/snapshot`); it includes the current `seq`.\n * 2. It opens `/ws` and sends `subscribe { fromSeq: snapshot.seq }`.\n * 3. The server sends every event with `seq > fromSeq` (catch-up), then live `events` batches.\n * 4. On reconnect the client subscribes from the last `seq` it applied.\n * 5. If the server cannot serve the gap, it sends `resync`; the client reloads the snapshot.\n */\n\n/** Runner connection state as seen by the server. */\nexport const RunnerConnectionStatus = z.object({\n state: z.enum([\"disabled\", \"starting\", \"connected\", \"disconnected\", \"incompatible\"]),\n runnerId: z.string().nullable(),\n version: z.string().nullable(),\n providers: z.array(ProviderInfo),\n lastError: z.string().nullable(),\n});\nexport type RunnerConnectionStatus = z.infer<typeof RunnerConnectionStatus>;\n\n/** Everything the app shell needs on load. Transcripts are loaded per session. */\nexport const Snapshot = z.object({\n seq: z.int().nonnegative(),\n serverVersion: z.string(),\n generatedAt: Timestamp,\n settings: Settings,\n projects: z.array(Project),\n sessions: z.array(Session),\n inbox: z.array(InboxItem),\n automations: z.array(Automation),\n /** Upcoming scheduled runs across projects (§8.4 Now / Next). */\n scheduled: z.array(ScheduledRun).default([]),\n /** The orchestrator and PM sessions (§8.1), also present in `sessions`. */\n roleSessions: RoleSessionsRef.optional(),\n runner: RunnerConnectionStatus,\n});\nexport type Snapshot = z.infer<typeof Snapshot>;\n\n/** One session's transcript (`GET /api/sessions/:id/snapshot`). */\nexport const SessionSnapshot = z.object({\n seq: z.int().nonnegative(),\n session: Session,\n threads: z.array(Thread),\n turns: z.array(Turn),\n items: z.array(ItemRecord),\n});\nexport type SessionSnapshot = z.infer<typeof SessionSnapshot>;\n\n// ---------------------------------------------------------------- client -> server\n\nexport const ClientSubscribe = z.object({\n type: z.literal(\"subscribe\"),\n /** Deliver events with `seq > fromSeq`. */\n fromSeq: z.int().nonnegative(),\n /** Restrict to these sessions (plus global events); omitted means everything. */\n sessionIds: z.array(Id).optional(),\n});\n\nexport const ClientToServerMessage = z.discriminatedUnion(\"type\", [\n ClientSubscribe,\n z.object({ type: z.literal(\"unsubscribe\") }),\n z.object({ type: z.literal(\"ping\"), id: z.string() }),\n]);\nexport type ClientToServerMessage = z.infer<typeof ClientToServerMessage>;\n\n// ---------------------------------------------------------------- server -> client\n\nexport const ServerToClientMessage = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"hello\"),\n protocolVersion: z.int().positive(),\n serverVersion: z.string(),\n /** Current head of the event log. */\n seq: z.int().nonnegative(),\n }),\n /**\n * Ordered batch of events. Payloads are sent raw; parse with `EventEnvelope` and skip\n * unknown types so older clients survive newer servers.\n */\n z.object({ type: z.literal(\"events\"), events: z.array(RawEventEnvelope) }),\n /** The client must reload its snapshot and resubscribe from `seq`. */\n z.object({\n type: z.literal(\"resync\"),\n reason: z.enum([\"gap\", \"too_far_behind\", \"server_restarted\"]),\n seq: z.int().nonnegative(),\n }),\n /** Runner connection changed (ephemeral; not in the event log). */\n z.object({ type: z.literal(\"runner\"), runner: RunnerConnectionStatus }),\n /** Update check or self-update progress changed (ephemeral; not in the event log, §16). */\n z.object({ type: z.literal(\"update\"), update: UpdateStatus }),\n z.object({ type: z.literal(\"pong\"), id: z.string() }),\n z.object({ type: z.literal(\"error\"), error: ErrorInfo }),\n]);\nexport type ServerToClientMessage = z.infer<typeof ServerToClientMessage>;\n\n/** `GET /api/health` response (unauthenticated, used by the CLI to find a running server). */\nexport const HealthResponse = z.object({\n ok: z.literal(true),\n name: z.literal(\"codeden\"),\n version: z.string(),\n uptimeSec: z.number().nonnegative(),\n});\nexport type HealthResponse = z.infer<typeof HealthResponse>;\n","import { z } from \"zod\";\nimport { Usage } from \"./agent-events\";\nimport {\n AutonomyLevel,\n ErrorInfo,\n GitHubIssueRef,\n Id,\n ProviderId,\n ReasoningEffort,\n Role,\n Timestamp,\n} from \"./common\";\nimport { InboxItemKind, InboxItemStatus } from \"./entities/inbox\";\nimport { GitHubRepo, Project } from \"./entities/project\";\nimport { ItemRecord, Session, SessionStatus, Thread, Turn } from \"./entities/session\";\nimport { UserInput } from \"./input\";\nimport { FollowupsItem } from \"./items\";\nimport { RuntimeResponse } from \"./provider\";\nimport { ConflictDecision, StartedBy, StartWorkResult, WorkKey } from \"./work\";\nimport { SetupStep } from \"./workbench\";\nimport { ClientSubscribe, ClientToServerMessage, ServerToClientMessage } from \"./ws\";\n\n/**\n * HTTP API request/response shapes (`/api/*`) and the UI WebSocket extensions for live\n * transcripts. The server validates every request body and query with these schemas; the web\n * app types against them (and the Hono RPC `AppType`).\n */\n\n/** Error body returned by every failing API route. */\nexport const ApiError = z.object({ error: ErrorInfo });\nexport type ApiError = z.infer<typeof ApiError>;\n\n// ---------------------------------------------------------------- projects\n\n/** Package managers CodeDen recognises when adding a project (§14 step 5). */\nexport const PackageManager = z.enum([\"pnpm\", \"npm\", \"yarn\", \"bun\"]);\nexport type PackageManager = z.infer<typeof PackageManager>;\n\n/** Where a new project comes from: an existing folder, or a git URL to clone. */\nexport const ProjectSource = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"local\"), path: z.string().min(1) }),\n z.object({\n type: z.literal(\"clone\"),\n /** `https://github.com/owner/repo(.git)`, `git@github.com:owner/repo.git`, or `owner/repo`. */\n url: z.string().min(1),\n /**\n * Exact target folder. When omitted the repo is cloned into `<parentDir>/<repo>`, with\n * `parentDir` defaulting to `~/codeden-projects`.\n */\n path: z.string().min(1).optional(),\n parentDir: z.string().min(1).optional(),\n }),\n]);\nexport type ProjectSource = z.infer<typeof ProjectSource>;\n\n/** `POST /api/projects`. */\nexport const CreateProjectRequest = z.object({\n source: ProjectSource,\n /** Display name; defaults to the folder name. */\n name: z.string().trim().min(1).max(100).optional(),\n defaultProvider: ProviderId.nullable().optional(),\n autonomy: AutonomyLevel.nullable().optional(),\n});\nexport type CreateProjectRequest = z.infer<typeof CreateProjectRequest>;\n\n/** What CodeDen found in a project folder. */\nexport const ProjectDetection = z.object({\n isGitRepo: z.boolean(),\n /** Top level of the git checkout (may differ from the chosen folder). */\n gitRoot: z.string().nullable(),\n remoteUrl: z.string().nullable(),\n github: GitHubRepo.nullable(),\n defaultBranch: z.string().nullable(),\n currentBranch: z.string().nullable(),\n packageManager: PackageManager.nullable(),\n /** Suggested worktree setup commands, e.g. `pnpm install`. */\n suggestedSetupCommands: z.array(z.string()),\n});\nexport type ProjectDetection = z.infer<typeof ProjectDetection>;\n\n/** `POST /api/projects` response. */\nexport const CreateProjectResponse = z.object({\n project: Project,\n detected: ProjectDetection,\n});\nexport type CreateProjectResponse = z.infer<typeof CreateProjectResponse>;\n\n/** `PATCH /api/projects/:id`. */\nexport const UpdateProjectRequest = z.object({\n name: z.string().trim().min(1).max(100).optional(),\n defaultProvider: ProviderId.nullable().optional(),\n autonomy: AutonomyLevel.nullable().optional(),\n timezone: z.string().nullable().optional(),\n defaultBranch: z.string().nullable().optional(),\n});\nexport type UpdateProjectRequest = z.infer<typeof UpdateProjectRequest>;\n\n// ---------------------------------------------------------------- sessions\n\n/**\n * Where a session runs (§9): a fresh worktree (default for agents), the repo root, or an\n * existing directory (`path`).\n */\nexport const WorkspaceRequest = z.object({\n mode: z.enum([\"worktree\", \"repo_root\", \"existing\"]).default(\"worktree\"),\n path: z.string().min(1).optional(),\n branch: z.string().min(1).optional(),\n baseRef: z.string().min(1).optional(),\n setupCommands: z.array(z.string()).optional(),\n /**\n * Fetch `origin` before creating the worktree (for a `baseRef` such as `origin/<branch>`\n * that may not be local yet). CodeDen fetches; the agent then works offline.\n */\n fetch: z.boolean().optional(),\n});\nexport type WorkspaceRequest = z.infer<typeof WorkspaceRequest>;\n\n/** `POST /api/sessions`: start agent work, with the §8.4 conflict check built in. */\nexport const StartSessionRequest = z.object({\n /** Null only for the orchestrator. */\n projectId: Id.nullable(),\n role: Role.default(\"agent\"),\n /** Provider id; omitted or `auto` picks the role default / first ready provider. */\n provider: z.union([z.literal(\"auto\"), ProviderId]).optional(),\n model: z.string().min(1).optional(),\n effort: ReasoningEffort.optional(),\n autonomy: AutonomyLevel.optional(),\n workspace: WorkspaceRequest.prefault({}),\n /** One line describing the work; defaults to the first line of the input. */\n purpose: z.string().trim().min(1).max(300).optional(),\n /** Stable identifier of the work; derived from the issue or purpose when omitted. */\n workKey: WorkKey.optional(),\n /** Narrows the work for overlap detection (§8.4). */\n scope: z\n .object({ paths: z.array(z.string()).optional(), area: z.string().optional() })\n .optional(),\n startedBy: StartedBy.prefault({ kind: \"user\" }),\n title: z.string().trim().min(1).max(200).optional(),\n parentSessionId: Id.optional(),\n issue: GitHubIssueRef.optional(),\n /** First message; the session starts idle when omitted. */\n input: UserInput.optional(),\n /** The caller's decision when a previous attempt returned `conflict`. */\n conflict: ConflictDecision.optional(),\n});\nexport type StartSessionRequest = z.infer<typeof StartSessionRequest>;\nexport type StartSessionRequestInit = z.input<typeof StartSessionRequest>;\n\n/**\n * `POST /api/sessions` response: `StartWorkResult` (`started` / `conflict`) plus the outcomes\n * of a `ConflictDecision`: `queued` (wait), `skipped` (skip) and `joined` (join).\n */\nexport const StartSessionResponse = z.discriminatedUnion(\"status\", [\n ...StartWorkResult.options,\n z.object({\n status: z.literal(\"queued\"),\n sessionId: Id,\n /** Work this session waits for. */\n behind: z.array(Id),\n }),\n z.object({ status: z.literal(\"skipped\") }),\n z.object({ status: z.literal(\"joined\"), sessionId: Id }),\n]);\nexport type StartSessionResponse = z.infer<typeof StartSessionResponse>;\n\n/** Recorded with a session about how it was started (forced starts keep their reason). */\nexport const SessionStartMeta = z.object({\n workspaceMode: WorkspaceRequest.shape.mode,\n /** Set when the runner could not prepare the requested workspace and CodeDen fell back. */\n workspaceFallback: z.string().nullable(),\n forced: z.object({ reason: z.string(), conflictsWith: z.array(Id) }).nullable(),\n queuedBehind: z.array(Id),\n /** Worktree setup commands (`.codeden/project.json`) and their output, in order. */\n setup: z.array(SetupStep).optional(),\n});\nexport type SessionStartMeta = z.infer<typeof SessionStartMeta>;\n\n/** `GET /api/sessions` query. */\nexport const ListSessionsQuery = z.object({\n projectId: Id.optional(),\n status: z\n .string()\n .transform((s) => s.split(\",\"))\n .pipe(z.array(SessionStatus))\n .optional(),\n workKey: z.string().optional(),\n role: Role.optional(),\n});\nexport type ListSessionsQuery = z.infer<typeof ListSessionsQuery>;\n\n/** `GET /api/sessions/:id`. */\nexport const SessionDetail = z.object({\n session: Session,\n /** Accumulated usage across turns (token counts and cost summed; context/rate limits latest). */\n usage: Usage.nullable(),\n /** Follow-up suggestions of the latest completed root turn (§7.5). */\n followups: FollowupsItem.nullable(),\n startMeta: SessionStartMeta.nullable(),\n /** Messages waiting to be sent when the current turn ends. */\n queuedMessages: z.int().nonnegative(),\n});\nexport type SessionDetail = z.infer<typeof SessionDetail>;\n\n/** `POST /api/sessions/:id/messages`. */\nexport const SendMessageRequest = z.object({\n input: UserInput,\n /** What to do while a turn is running: queue (default), steer into it, or reject. */\n whenBusy: z.enum([\"queue\", \"steer\", \"reject\"]).default(\"queue\"),\n});\nexport type SendMessageRequest = z.infer<typeof SendMessageRequest>;\nexport type SendMessageRequestInit = z.input<typeof SendMessageRequest>;\n\nexport const SendMessageResponse = z.object({\n status: z.enum([\"sent\", \"queued\", \"steered\"]),\n});\nexport type SendMessageResponse = z.infer<typeof SendMessageResponse>;\n\n/** `POST /api/sessions/:id/steer`. */\nexport const SteerRequest = z.object({ input: UserInput });\nexport type SteerRequest = z.infer<typeof SteerRequest>;\n\n/** `POST /api/sessions/:id/respond`: answer an approval request or question. */\nexport const RespondRequest = z.object({ requestId: Id, response: RuntimeResponse });\nexport type RespondRequest = z.infer<typeof RespondRequest>;\n\n/** `GET /api/sessions/:id/threads/:threadId/items` query (positions are per thread). */\nexport const ThreadItemsQuery = z.object({\n /** Items with `position < before` (older page). */\n before: z.coerce.number().int().nonnegative().optional(),\n /** Items with `position > after` (newer page). */\n after: z.coerce.number().int().min(-1).optional(),\n limit: z.coerce.number().int().min(1).max(500).default(100),\n});\nexport type ThreadItemsQuery = z.infer<typeof ThreadItemsQuery>;\n\n/** A page of transcript items. Large tool outputs are previews (`output.truncated`). */\nexport const ThreadItemsPage = z.object({\n threadId: Id,\n items: z.array(ItemRecord),\n hasMoreBefore: z.boolean(),\n hasMoreAfter: z.boolean(),\n});\nexport type ThreadItemsPage = z.infer<typeof ThreadItemsPage>;\n\n/** `GET /api/sessions/:id/items/:itemId/output`: the full output of a tool call. */\nexport const ToolOutputResponse = z.object({\n itemId: Id,\n text: z.string(),\n totalBytes: z.int().nonnegative(),\n});\nexport type ToolOutputResponse = z.infer<typeof ToolOutputResponse>;\n\n// ---------------------------------------------------------------- inbox\n\n/** `GET /api/inbox` query. Defaults to open items. */\nexport const ListInboxQuery = z.object({\n status: InboxItemStatus.optional(),\n projectId: Id.optional(),\n sessionId: Id.optional(),\n});\nexport type ListInboxQuery = z.infer<typeof ListInboxQuery>;\n\n/**\n * `POST /api/inbox/:id/resolve`. Approvals and questions pass the `response`, which is sent\n * to the agent; other items are just marked resolved or dismissed.\n */\nexport const ResolveInboxRequest = z.object({\n response: RuntimeResponse.optional(),\n status: z.enum([\"resolved\", \"dismissed\"]).default(\"resolved\"),\n note: z.string().max(2000).optional(),\n});\nexport type ResolveInboxRequest = z.infer<typeof ResolveInboxRequest>;\n\n/** `GET /api/inbox/counts`: the sidebar badge numbers. */\nexport const InboxCounts = z.object({\n open: z.int().nonnegative(),\n byProject: z.record(z.string(), z.int().nonnegative()),\n byKind: z.partialRecord(InboxItemKind, z.int().nonnegative()),\n});\nexport type InboxCounts = z.infer<typeof InboxCounts>;\n\n// ---------------------------------------------------------------- first-run setup\n\nexport const SetupToolId = z.enum([\"claude\", \"codex\", \"gh\", \"git\", \"browser\", \"node\"]);\nexport type SetupToolId = z.infer<typeof SetupToolId>;\n\n/** A command the UI runs in its embedded terminal to fix a check (§14 step 3). */\nexport const SetupCommand = z.object({\n kind: z.enum([\"install\", \"login\", \"upgrade\", \"configure\"]),\n /** Shown to the user and typed into the terminal. */\n command: z.string(),\n /** Docs link for manual installs. */\n url: z.string().optional(),\n});\nexport type SetupCommand = z.infer<typeof SetupCommand>;\n\n/** Result of one detection check. Never contains tokens. */\nexport const SetupCheck = z.object({\n id: SetupToolId,\n label: z.string(),\n /** `ok`: ready; `warning`: usable but needs attention; `missing`: not usable. */\n state: z.enum([\"ok\", \"warning\", \"missing\", \"error\"]),\n installed: z.boolean(),\n version: z.string().nullable(),\n executablePath: z.string().nullable(),\n /** Null when not applicable or unknown. */\n loggedIn: z.boolean().nullable(),\n authMethod: z.string().nullable(),\n account: z.string().nullable(),\n loginExpiresAt: Timestamp.nullable(),\n /** Human-readable summary of the state. */\n message: z.string(),\n fix: SetupCommand.nullable(),\n durationMs: z.int().nonnegative(),\n});\nexport type SetupCheck = z.infer<typeof SetupCheck>;\n\n/** `GET /api/setup/status`. */\nexport const SetupStatus = z.object({\n checkedAt: Timestamp,\n /** Persisted in settings once the user finishes the checklist. */\n setupCompleted: z.boolean(),\n /** At least one agent provider is installed and logged in. */\n ready: z.boolean(),\n checks: z.array(SetupCheck),\n /** Changes worth a warning (expiring login, logged-out CLI). */\n warnings: z.array(z.object({ id: SetupToolId, message: z.string() })),\n});\nexport type SetupStatus = z.infer<typeof SetupStatus>;\n\n/**\n * Claude Code support (§14): the Claude Agent SDK that drives the user's installed `claude`.\n * The published package does not ship it; it is installed from npm on first use into\n * `<home>/deps` (without its optional platform binaries). `GET /api/setup/claude-sdk`;\n * `POST /api/setup/claude-sdk/install` starts (or joins) the install.\n */\nexport const ClaudeSdkStatus = z.object({\n /** `ready`: loadable; `missing`: not installed yet; `failed`: the last install failed. */\n state: z.enum([\"ready\", \"missing\", \"installing\", \"failed\"]),\n /** The SDK version CodeDen is tested with; the only version it installs. */\n version: z.string(),\n /** `deps`: installed on demand into `location`; `workspace`: resolved from a dev checkout. */\n source: z.enum([\"deps\", \"workspace\"]),\n /** The deps folder (null for `workspace`). */\n location: z.string().nullable(),\n /** Latest progress line while installing. */\n progress: z.string().nullable(),\n /** Why the last install failed. */\n error: z.string().nullable(),\n});\nexport type ClaudeSdkStatus = z.infer<typeof ClaudeSdkStatus>;\n\n/** `POST /api/setup/login/:tool` response: what to run in a terminal. */\nexport const LoginCommandResponse = z.object({\n tool: z.enum([\"claude\", \"codex\", \"gh\"]),\n command: z.string(),\n args: z.array(z.string()),\n});\nexport type LoginCommandResponse = z.infer<typeof LoginCommandResponse>;\n\n// ---------------------------------------------------------------- folder picker and files\n\n/** `GET /api/fs/list?path=`: directories only, read-only (§13 server-side folder picker). */\nexport const FsListResponse = z.object({\n /** The listed directory (absolute), or null for the roots view. */\n path: z.string().nullable(),\n parent: z.string().nullable(),\n home: z.string(),\n /** Drives on Windows, `/` elsewhere. */\n roots: z.array(z.object({ name: z.string(), path: z.string() })),\n entries: z.array(\n z.object({\n name: z.string(),\n path: z.string(),\n hidden: z.boolean(),\n /** True when the folder looks like a git checkout. */\n isGitRepo: z.boolean(),\n }),\n ),\n truncated: z.boolean(),\n});\nexport type FsListResponse = z.infer<typeof FsListResponse>;\n\n/** Roots the config-file API may touch (§12.4): a project checkout or a provider's home. */\nexport const FileRoot = z.enum([\"project\", \"claude\", \"codex\"]);\nexport type FileRoot = z.infer<typeof FileRoot>;\n\n/** `GET /api/files` query. `path` is relative to the root. */\nexport const FileReadQuery = z.object({\n root: FileRoot,\n projectId: Id.optional(),\n path: z.string().min(1),\n});\nexport type FileReadQuery = z.infer<typeof FileReadQuery>;\n\nexport const FileContent = z.object({\n root: FileRoot,\n path: z.string(),\n absolutePath: z.string(),\n exists: z.boolean(),\n content: z.string(),\n /** Null when the file does not exist. */\n sha256: z.string().nullable(),\n sizeBytes: z.int().nonnegative(),\n});\nexport type FileContent = z.infer<typeof FileContent>;\n\n/** `PUT /api/files`. A backup is written before overwriting. */\nexport const FileWriteRequest = z.object({\n root: FileRoot,\n projectId: Id.optional(),\n path: z.string().min(1),\n content: z.string().max(2_000_000),\n /**\n * Optimistic concurrency: the sha256 the editor loaded (null = the file must not exist).\n * Omit to overwrite unconditionally.\n */\n expectedSha256: z.string().nullable().optional(),\n});\nexport type FileWriteRequest = z.infer<typeof FileWriteRequest>;\n\n// ---------------------------------------------------------------- secrets\n\n/** Secrets CodeDen may keep in the OS keychain (§6). Values are never returned. */\nexport const SecretKey = z.enum([\n \"elevenlabs.apiKey\",\n \"openai.apiKey\",\n \"gemini.apiKey\",\n \"anthropic.apiKey\",\n /** Fallback GitHub token when `gh auth token` is unavailable (§9). */\n \"github.token\",\n]);\nexport type SecretKey = z.infer<typeof SecretKey>;\n\nexport const SecretsStatus = z.object({\n backend: z.enum([\"keyring\", \"memory\"]),\n keys: z.array(z.object({ key: SecretKey, set: z.boolean() })),\n});\nexport type SecretsStatus = z.infer<typeof SecretsStatus>;\n\nexport const SetSecretRequest = z.object({ value: z.string().min(1).max(10_000) });\nexport type SetSecretRequest = z.infer<typeof SetSecretRequest>;\n\n// ---------------------------------------------------------------- UI WebSocket extensions\n\n/**\n * `subscribe` with an extra switch: `agentEvents: false` delivers only domain events\n * (projects, sessions, inbox, settings, runner), leaving transcripts to `watch_session`.\n * Live events are batched (~40ms) and consecutive text deltas of one item are merged, so seqs\n * in a batch may skip; track the highest seq seen.\n */\nexport const UiSubscribe = ClientSubscribe.extend({\n agentEvents: z.boolean().default(true),\n});\n\n/**\n * Watch one session's transcript. The server sends the latest state of every thread, turn and\n * item changed after `fromSeq` (load pages over HTTP first, then watch from their `seq`),\n * then live `transcript` updates. `threadIds` limits items/turns to those threads (child\n * threads they spawn are still announced).\n */\nexport const WatchSession = z.object({\n type: z.literal(\"watch_session\"),\n sessionId: Id,\n fromSeq: z.int().nonnegative(),\n threadIds: z.array(Id).optional(),\n});\n\nexport const UnwatchSession = z.object({ type: z.literal(\"unwatch_session\"), sessionId: Id });\n\n/** Everything the UI may send over `/ws`. */\nexport const UiClientMessage = z.discriminatedUnion(\"type\", [\n UiSubscribe,\n ...ClientToServerMessage.options.filter(\n (o): o is Exclude<(typeof ClientToServerMessage.options)[number], typeof ClientSubscribe> =>\n o !== ClientSubscribe,\n ),\n WatchSession,\n UnwatchSession,\n]);\nexport type UiClientMessage = z.infer<typeof UiClientMessage>;\n\n/** Latest state of transcript rows that changed (replace by id). Outputs are previews. */\nexport const TranscriptMessage = z.object({\n type: z.literal(\"transcript\"),\n sessionId: Id,\n /** Highest event seq reflected in this message. */\n seq: z.int().nonnegative(),\n threads: z.array(Thread),\n turns: z.array(Turn),\n items: z.array(ItemRecord),\n /** Present when the session's accumulated usage changed. */\n usage: Usage.optional(),\n});\nexport type TranscriptMessage = z.infer<typeof TranscriptMessage>;\n\n/** The server cannot replay this session's changes; reload its transcript over HTTP. */\nexport const TranscriptResyncMessage = z.object({\n type: z.literal(\"transcript_resync\"),\n sessionId: Id,\n seq: z.int().nonnegative(),\n});\n\n/** Everything the server may send over `/ws`. */\nexport const UiServerMessage = z.discriminatedUnion(\"type\", [\n ...ServerToClientMessage.options,\n TranscriptMessage,\n TranscriptResyncMessage,\n]);\nexport type UiServerMessage = z.infer<typeof UiServerMessage>;\n\n// Workbench routes (diffs, checkpoints, git, terminal, utility) live in `workbench.ts`.\nexport * from \"./workbench\";\n","import { z } from \"zod\";\nimport { StartSessionResponse } from \"./api\";\nimport { AutonomyLevel, Id, ProviderId, QuietHours, ReasoningEffort, Timestamp } from \"./common\";\nimport {\n Automation,\n AutomationAction,\n AutomationGuards,\n AutomationRun,\n AutomationRunStatus,\n AutomationTarget,\n AutomationTrigger,\n TriagePolicy,\n} from \"./entities/automation\";\nimport { InboxItem } from \"./entities/inbox\";\nimport { TriageDecision } from \"./github\";\nimport { ConflictDecision, OverlapPolicy, ScheduledRun, WorkSummary } from \"./work\";\n\n/**\n * Automations HTTP API (§10): definitions from built-in templates, `~/.codeden/automations/`,\n * a repo's `.codeden/automations/` and the database; their per-project schedule state, runs,\n * manual runs with the §8.4 conflict result, the starter set and issue triage decisions.\n */\n\n/**\n * Some guards, without defaults: only the fields given override a template's or the current\n * guards (`AutomationGuards.partial()` would fill in every default).\n */\nexport const AutomationGuardsPatch = z.object({\n overlapPolicy: OverlapPolicy.optional(),\n maxConcurrent: z.int().positive().optional(),\n maxPerDay: z.int().positive().nullable().optional(),\n quietHours: QuietHours.nullable().optional(),\n catchUpMissed: z.boolean().optional(),\n});\nexport type AutomationGuardsPatch = z.infer<typeof AutomationGuardsPatch>;\n\n/** The action kinds a Markdown automation file can declare (`action:` in the frontmatter). */\nexport const AutomationFileAction = z.enum([\"start_session\", \"message_pm\", \"triage\"]);\nexport type AutomationFileAction = z.infer<typeof AutomationFileAction>;\n\n/**\n * Frontmatter of an automation Markdown file (built-in templates, global and project files).\n * The Markdown body is the prompt (`start_session`) or the message (`message_pm`).\n */\nexport const AutomationFileFrontmatter = z.object({\n name: z.string().min(1),\n description: z.string().optional(),\n trigger: AutomationTrigger,\n action: AutomationFileAction.default(\"start_session\"),\n /** Work key of the runs; `automation:<file name>` when omitted. */\n workKey: z.string().min(1).max(200).optional(),\n title: z.string().optional(),\n provider: ProviderId.optional(),\n model: z.string().optional(),\n effort: ReasoningEffort.optional(),\n autonomy: AutonomyLevel.optional(),\n guards: AutomationGuardsPatch.optional(),\n /** Triage policy (`action: triage` only). */\n policy: TriagePolicy.optional(),\n /** Part of the starter set offered to new projects (templates only). */\n starter: z.boolean().default(false),\n /** Needs a GitHub project (issues, PRs); hidden from the starter set of local projects. */\n requiresGithub: z.boolean().default(false),\n});\nexport type AutomationFileFrontmatter = z.infer<typeof AutomationFileFrontmatter>;\n\n/** A template an automation can be created from: built in, or a global automation file. */\nexport const AutomationTemplate = z.object({\n /** File name without `.md`, e.g. `security-audit`. */\n id: z.string().min(1),\n name: z.string(),\n description: z.string().nullable(),\n source: z.enum([\"builtin\", \"global_file\"]),\n path: z.string().nullable(),\n trigger: AutomationTrigger,\n action: AutomationAction,\n guards: AutomationGuards,\n workKey: z.string(),\n starter: z.boolean(),\n requiresGithub: z.boolean(),\n});\nexport type AutomationTemplate = z.infer<typeof AutomationTemplate>;\n\n/** Schedule state of an automation in one project. */\nexport const AutomationState = z.object({\n projectId: Id,\n /** Effective: global switch, project switch, the automation and any per-project override. */\n enabled: z.boolean(),\n /** Per-project override of `enabled` for automations that target all projects. */\n enabledOverride: z.boolean().nullable(),\n /** Paused by the PM or the user (`pause_automation`): no cron or event runs. */\n paused: z.boolean(),\n /** Next cron occurrence; null for event and manual triggers or when not scheduled. */\n nextRunAt: Timestamp.nullable(),\n /** The occurrence `skip_next_run` will skip. */\n skipNextAt: Timestamp.nullable(),\n});\nexport type AutomationState = z.infer<typeof AutomationState>;\n\n/** An automation with its per-project state and latest run. */\nexport const AutomationListItem = z.object({\n automation: Automation,\n states: z.array(AutomationState),\n lastRun: AutomationRun.nullable(),\n /** Source file for file-based automations. */\n path: z.string().nullable(),\n /** File-based automations are edited in their file; only enable/disable applies here. */\n readOnly: z.boolean(),\n});\nexport type AutomationListItem = z.infer<typeof AutomationListItem>;\n\n/** A Markdown automation file that failed to parse. */\nexport const AutomationFileError = z.object({ path: z.string(), message: z.string() });\nexport type AutomationFileError = z.infer<typeof AutomationFileError>;\n\n/** `GET /api/automations?projectId=`. */\nexport const ListAutomationsQuery = z.object({ projectId: Id.optional() });\nexport type ListAutomationsQuery = z.infer<typeof ListAutomationsQuery>;\n\nexport const AutomationListResponse = z.object({\n automations: z.array(AutomationListItem),\n errors: z.array(AutomationFileError),\n});\nexport type AutomationListResponse = z.infer<typeof AutomationListResponse>;\n\n/**\n * `POST /api/automations`: from a template (`templateId`, fields override it) or from scratch\n * (`name`, `trigger`, `action`). `projectId` targets one project; omitted, all projects.\n * Created disabled unless `enabled` is true.\n */\nexport const CreateAutomationRequest = z\n .object({\n templateId: z.string().min(1).optional(),\n projectId: Id.optional(),\n name: z.string().trim().min(1).max(200).optional(),\n description: z.string().nullable().optional(),\n trigger: AutomationTrigger.optional(),\n action: AutomationAction.optional(),\n guards: AutomationGuardsPatch.optional(),\n workKey: z.string().min(1).max(200).optional(),\n enabled: z.boolean().default(false),\n })\n .refine((r) => r.templateId !== undefined || (r.name && r.trigger && r.action), {\n message: \"Pass templateId, or name, trigger and action\",\n });\nexport type CreateAutomationRequest = z.infer<typeof CreateAutomationRequest>;\n\n/** `PATCH /api/automations/:id` (database automations only). */\nexport const UpdateAutomationRequest = z.object({\n name: z.string().trim().min(1).max(200).optional(),\n description: z.string().nullable().optional(),\n trigger: AutomationTrigger.optional(),\n action: AutomationAction.optional(),\n target: AutomationTarget.optional(),\n guards: AutomationGuardsPatch.optional(),\n workKey: z.string().min(1).max(200).nullable().optional(),\n});\nexport type UpdateAutomationRequest = z.infer<typeof UpdateAutomationRequest>;\n\n/**\n * `POST /api/automations/:id/enable|disable`. With `projectId` on an all-projects automation,\n * sets that project's override; otherwise the automation's own switch.\n */\nexport const SetAutomationEnabledRequest = z.object({ projectId: Id.optional() });\nexport type SetAutomationEnabledRequest = z.infer<typeof SetAutomationEnabledRequest>;\n\n/** `POST /api/automations/:id/pause|resume|skip-next|unskip-next`. */\nexport const AutomationProjectRequest = z.object({ projectId: Id });\nexport type AutomationProjectRequest = z.infer<typeof AutomationProjectRequest>;\n\n/** `POST /api/automations/:id/skip-next`: the occurrence now skipped (null: none scheduled). */\nexport const SkipNextResponse = z.object({ skipped: ScheduledRun.nullable() });\nexport type SkipNextResponse = z.infer<typeof SkipNextResponse>;\n\n/**\n * `POST /api/automations/:id/unskip-next`: undo a skip; the next occurrence, which runs again\n * (null when nothing was skipped).\n */\nexport const UnskipNextResponse = z.object({ next: ScheduledRun.nullable() });\nexport type UnskipNextResponse = z.infer<typeof UnskipNextResponse>;\n\n/** `POST /api/automations/:id/run`: run now, with the §8.4 conflict check. */\nexport const RunAutomationRequest = z.object({\n projectId: Id,\n /** The caller's decision when a previous attempt returned `conflict`. */\n conflict: ConflictDecision.optional(),\n /** Extra `{{placeholders}}` for the prompt. */\n context: z.record(z.string(), z.string()).optional(),\n});\nexport type RunAutomationRequest = z.infer<typeof RunAutomationRequest>;\n\n/** Result of a manual, scheduled or event run. On `conflict` nothing was recorded. */\nexport const RunAutomationResponse = z.discriminatedUnion(\"status\", [\n z.object({ status: z.literal(\"started\"), run: AutomationRun, sessionId: Id.nullable() }),\n z.object({\n status: z.literal(\"queued\"),\n run: AutomationRun,\n sessionId: Id,\n behind: z.array(Id),\n }),\n z.object({ status: z.literal(\"conflict\"), existing: z.array(WorkSummary).min(1) }),\n z.object({ status: z.literal(\"skipped\"), run: AutomationRun }),\n z.object({ status: z.literal(\"joined\"), sessionId: Id }),\n]);\nexport type RunAutomationResponse = z.infer<typeof RunAutomationResponse>;\n\n/** `GET /api/automations/runs`. */\nexport const ListAutomationRunsQuery = z.object({\n projectId: Id.optional(),\n automationId: Id.optional(),\n status: AutomationRunStatus.optional(),\n limit: z.coerce.number().int().min(1).max(500).default(50),\n});\nexport type ListAutomationRunsQuery = z.infer<typeof ListAutomationRunsQuery>;\n\n/** `GET /api/automations/upcoming` (the Now / Next strip). */\nexport const UpcomingRunsQuery = z.object({\n projectId: Id.optional(),\n limit: z.coerce.number().int().min(1).max(100).default(20),\n});\nexport type UpcomingRunsQuery = z.infer<typeof UpcomingRunsQuery>;\n\n/** `POST /api/projects/:id/automations/starter`: create (and optionally enable) the starter set. */\nexport const StarterSetRequest = z.object({ enable: z.boolean().default(false) });\nexport type StarterSetRequest = z.infer<typeof StarterSetRequest>;\n\nexport const StarterSetResponse = z.object({ automations: z.array(Automation) });\nexport type StarterSetResponse = z.infer<typeof StarterSetResponse>;\n\n/** A project's automation switch (`GET|PATCH /api/projects/:id/automations/settings`). */\nexport const AutomationProjectSettings = z.object({\n projectId: Id,\n enabled: z.boolean(),\n updatedAt: Timestamp.nullable(),\n});\nexport type AutomationProjectSettings = z.infer<typeof AutomationProjectSettings>;\n\nexport const UpdateAutomationProjectSettingsRequest = z.object({ enabled: z.boolean() });\nexport type UpdateAutomationProjectSettingsRequest = z.infer<\n typeof UpdateAutomationProjectSettingsRequest\n>;\n\n/** The PM's `report_triage`: the decision it applied to a new issue. */\nexport const TriageReport = z.object({\n issueNumber: z.int().positive(),\n decision: TriageDecision,\n /** Two or three sentences: what the issue asks and why this decision. */\n summary: z.string().trim().min(1).max(2000),\n duplicateOf: z.int().positive().optional(),\n});\nexport type TriageReport = z.infer<typeof TriageReport>;\n\n/** What happened after a triage report. */\nexport const TriageReportResult = z.discriminatedUnion(\"status\", [\n /** Not `ready`: labels and comment were the whole job. */\n z.object({ status: z.literal(\"recorded\") }),\n /** `ready` and policy allowed starting without asking. */\n z.object({ status: z.literal(\"started\"), start: StartSessionResponse }),\n /** `ready`, waiting on the user's \"Should I take this on?\" decision. */\n z.object({ status: z.literal(\"inbox\"), inboxItemId: Id }),\n]);\nexport type TriageReportResult = z.infer<typeof TriageReportResult>;\n\n/** `POST /api/automations/triage/:inboxItemId/accept|decline`. */\nexport const TriageDecisionRequest = z.object({\n reason: z.string().trim().max(2000).optional(),\n provider: ProviderId.optional(),\n model: z.string().optional(),\n /** Decision when accepting returned `conflict`. */\n conflict: ConflictDecision.optional(),\n});\nexport type TriageDecisionRequest = z.infer<typeof TriageDecisionRequest>;\n\nexport const TriageDecisionResponse = z.object({\n item: InboxItem,\n /** The session start when accepted (possibly `conflict`); null when declined. */\n start: StartSessionResponse.nullable(),\n});\nexport type TriageDecisionResponse = z.infer<typeof TriageDecisionResponse>;\n","import { z } from \"zod\";\nimport { Id } from \"./common\";\nimport {\n BrowserCommandResults,\n BrowserFrameMetadata,\n BrowserInput,\n BrowserTab,\n BrowserTabId,\n} from \"./runner/browser\";\n\n/**\n * Browser panel HTTP and WebSocket shapes (§12.2). Routes live under\n * `/api/sessions/:id/browser`; the live view is the `/ws/browser` channel. Every call acts on\n * the session's own browser context in the runner.\n */\n\n/** `POST /api/sessions/:id/browser/open`: open (or reuse) the context, optionally at `url`. */\nexport const BrowserOpenRequest = z.object({ url: z.string().min(1).max(8_000).optional() });\nexport type BrowserOpenRequest = z.infer<typeof BrowserOpenRequest>;\n\nexport const BrowserOpenResponse = z.object({\n /** CDP endpoint on 127.0.0.1 (for diagnostics; the panel never connects to it). */\n cdpUrl: z.string().nullable(),\n tabs: z.array(BrowserTab),\n});\nexport type BrowserOpenResponse = z.infer<typeof BrowserOpenResponse>;\n\n/** `GET /api/sessions/:id/browser/tabs`. `open` is false when the session has no browser. */\nexport const BrowserTabsResponse = z.object({ open: z.boolean(), tabs: z.array(BrowserTab) });\nexport type BrowserTabsResponse = z.infer<typeof BrowserTabsResponse>;\n\n/** `POST /api/sessions/:id/browser/tabs`: open a new tab. Response: `{ tab }`. */\nexport const BrowserNewTabRequest = z.object({ url: z.string().min(1).max(8_000).optional() });\nexport type BrowserNewTabRequest = z.infer<typeof BrowserNewTabRequest>;\n\nexport const BrowserTabResponse = z.object({ tab: BrowserTab });\nexport type BrowserTabResponse = z.infer<typeof BrowserTabResponse>;\n\n/** `POST /api/sessions/:id/browser/navigate`. Bare `host:port` gets `http://`. */\nexport const BrowserNavigateRequest = z.object({\n url: z.string().min(1).max(8_000),\n tabId: BrowserTabId.optional(),\n});\nexport type BrowserNavigateRequest = z.infer<typeof BrowserNavigateRequest>;\n\nexport const BrowserNavigateResponse = BrowserCommandResults[\"browser.navigate\"];\nexport type BrowserNavigateResponse = z.infer<typeof BrowserNavigateResponse>;\n\n/** `POST /api/sessions/:id/browser/history`. Response: `{ url }`. */\nexport const BrowserHistoryRequest = z.object({\n action: z.enum([\"back\", \"forward\", \"reload\"]),\n tabId: BrowserTabId.optional(),\n});\nexport type BrowserHistoryRequest = z.infer<typeof BrowserHistoryRequest>;\n\n/** `POST /api/sessions/:id/browser/viewport` (CSS pixels, every tab of the session). */\nexport const BrowserViewportRequest = z.object({\n width: z.int().min(200).max(7680),\n height: z.int().min(200).max(4320),\n});\nexport type BrowserViewportRequest = z.infer<typeof BrowserViewportRequest>;\n\n/** `POST /api/sessions/:id/browser/dev-server`: open `http://localhost:<port><path>` in a new tab. */\nexport const BrowserDevServerRequest = z.object({\n port: z.int().min(1).max(65535),\n path: z.string().startsWith(\"/\").max(2_000).optional(),\n});\nexport type BrowserDevServerRequest = z.infer<typeof BrowserDevServerRequest>;\n\n/** A local dev server the runner found listening (its own descendants or probed ports). */\nexport const DevServer = z.object({\n port: z.int().min(1).max(65535),\n pid: z.int().nullable(),\n url: z.string(),\n});\nexport type DevServer = z.infer<typeof DevServer>;\n\n/** `GET /api/browser/dev-servers?probe=3000,5173`. */\nexport const DevServersResponse = z.object({ servers: z.array(DevServer) });\nexport type DevServersResponse = z.infer<typeof DevServersResponse>;\n\n// ------------------------------------------------------------------ /ws/browser channel\n\n/**\n * Query of `/ws/browser`. One socket is one viewer of one session's browser. With\n * `open=1` the server opens the session's browser when it is not open yet; otherwise the\n * viewer waits and starts watching as soon as the agent (or another viewer) opens it.\n */\nexport const BrowserWsQuery = z.object({\n sessionId: Id,\n open: z.enum([\"0\", \"1\"]).optional(),\n quality: z.coerce.number().int().min(10).max(100).optional(),\n maxWidth: z.coerce.number().int().min(100).max(7680).optional(),\n maxHeight: z.coerce.number().int().min(100).max(4320).optional(),\n maxFps: z.coerce.number().int().min(1).max(60).optional(),\n});\nexport type BrowserWsQuery = z.infer<typeof BrowserWsQuery>;\n\n/** Screencast settings a viewer may change with `watch`. */\nexport const BrowserScreencastSettings = z.object({\n quality: z.int().min(10).max(100).optional(),\n maxWidth: z.int().min(100).max(7680).optional(),\n maxHeight: z.int().min(100).max(4320).optional(),\n maxFps: z.int().min(1).max(60).optional(),\n});\nexport type BrowserScreencastSettings = z.infer<typeof BrowserScreencastSettings>;\n\n/** Client -> server messages on `/ws/browser` (JSON text frames). */\nexport const BrowserClientMessage = z.discriminatedUnion(\"type\", [\n /** Human input for the active tab (mouse coordinates in displayed-frame space). */\n z.object({ type: z.literal(\"input\"), input: BrowserInput }),\n /** Start (or re-tune) the screencast for this viewer. */\n z.object({ type: z.literal(\"watch\"), settings: BrowserScreencastSettings.optional() }),\n /** Stop receiving frames (tab updates still arrive); the screencast pauses with no viewers. */\n z.object({ type: z.literal(\"unwatch\") }),\n /** Open the session's browser now (same as `open=1`). */\n z.object({ type: z.literal(\"open\"), url: z.string().min(1).max(8_000).optional() }),\n]);\nexport type BrowserClientMessage = z.infer<typeof BrowserClientMessage>;\n\n/** Server -> client messages on `/ws/browser` (JSON text frames). */\nexport const BrowserServerMessage = z.discriminatedUnion(\"type\", [\n /** Sent once after connecting, and again when the browser opens or closes. */\n z.object({\n type: z.literal(\"state\"),\n viewerId: z.string(),\n open: z.boolean(),\n watching: z.boolean(),\n tabs: z.array(BrowserTab),\n }),\n /** A screencast frame of the active tab. */\n z.object({\n type: z.literal(\"frame\"),\n mediaType: z.enum([\"image/jpeg\", \"image/png\"]),\n /** Base64 image data. */\n data: z.string(),\n width: z.int().positive(),\n height: z.int().positive(),\n tabId: BrowserTabId.optional(),\n metadata: BrowserFrameMetadata.optional(),\n }),\n /** The session's tabs changed (opened, closed, activated, navigated, retitled). */\n z.object({ type: z.literal(\"tabs\"), tabs: z.array(BrowserTab) }),\n z.object({ type: z.literal(\"error\"), code: z.string(), message: z.string() }),\n]);\nexport type BrowserServerMessage = z.infer<typeof BrowserServerMessage>;\n","import { z } from \"zod\";\nimport { Id } from \"./common\";\nimport { Artifact } from \"./entities/artifact\";\n\n/**\n * Image generation settings screen and test button (§12.5). The `generate_image` MCP tool\n * itself is described in the server's tool registry.\n */\n\nexport const ImageEngineId = z.enum([\"codex\", \"gemini\", \"openai\"]);\nexport type ImageEngineId = z.infer<typeof ImageEngineId>;\n\n/** One engine as the Settings screen shows it. */\nexport const ImageEngineStatus = z.object({\n id: ImageEngineId,\n label: z.string(),\n available: z.boolean(),\n /** Why it is unavailable, or a note when available (e.g. the login method). */\n reason: z.string().optional(),\n requiresApiKey: z.boolean(),\n referenceImages: z.boolean(),\n exactSize: z.boolean(),\n defaultModel: z.string(),\n});\nexport type ImageEngineStatus = z.infer<typeof ImageEngineStatus>;\n\n/** Images generated today (local date), for the daily caps. */\nexport const ImageUsage = z.object({\n /** `YYYY-MM-DD`. */\n date: z.string(),\n total: z.int().nonnegative(),\n byProject: z.record(z.string(), z.int().nonnegative()),\n});\nexport type ImageUsage = z.infer<typeof ImageUsage>;\n\n/** `GET /api/images/engines?projectId=`: engines, the one `generate_image` would use, usage. */\nexport const ImageEnginesResponse = z.object({\n engines: z.array(ImageEngineStatus),\n /** The engine chosen for these settings (with the project's override applied), or why none. */\n active: z.object({ engine: ImageEngineId.nullable(), reason: z.string().optional() }),\n usage: ImageUsage,\n /** Effective daily cap for the project (or the global cap without one). */\n dailyCap: z.int().nonnegative(),\n});\nexport type ImageEnginesResponse = z.infer<typeof ImageEnginesResponse>;\n\n/**\n * `POST /api/images/test`: check an engine (default: the active one). With `generate`\n * (default true) one small image is generated and stored as an artifact; it counts toward\n * the daily cap.\n */\nexport const ImageTestRequest = z.object({\n engine: z.enum([\"auto\", \"codex\", \"gemini\", \"openai\"]).optional(),\n projectId: Id.optional(),\n generate: z.boolean().optional(),\n prompt: z.string().min(1).max(2_000).optional(),\n});\nexport type ImageTestRequest = z.infer<typeof ImageTestRequest>;\n\nexport const ImageTestResponse = z.object({\n ok: z.boolean(),\n engine: ImageEngineId.nullable(),\n model: z.string().optional(),\n durationMs: z.int().nonnegative(),\n /** The generated test image. */\n artifact: Artifact.optional(),\n error: z.object({ code: z.string(), message: z.string() }).optional(),\n});\nexport type ImageTestResponse = z.infer<typeof ImageTestResponse>;\n","import { z } from \"zod\";\nimport { StartSessionResponse } from \"./api\";\nimport { Id, ReasoningEffort } from \"./common\";\nimport { InboxItemStatus } from \"./entities/inbox\";\nimport { Session } from \"./entities/session\";\nimport { UserInput } from \"./input\";\nimport { ConflictRecord, NoticeTarget } from \"./orchestration\";\nimport { ConflictDecision } from \"./work\";\n\n/** HTTP shapes for the orchestrator and PM chats, notices and conflicts (`/api/orchestration`). */\n\n/** `GET|POST /api/orchestration/orchestrator` and `.../projects/:id/pm`. */\nexport const RoleSessionResponse = z.object({ session: Session.nullable() });\nexport type RoleSessionResponse = z.infer<typeof RoleSessionResponse>;\n\n/** `POST .../orchestrator/messages` and `.../projects/:id/pm/messages`. */\nexport const RoleMessageRequest = z.object({\n input: UserInput,\n whenBusy: z.enum([\"queue\", \"steer\", \"reject\"]).default(\"queue\"),\n});\nexport type RoleMessageRequest = z.infer<typeof RoleMessageRequest>;\nexport type RoleMessageRequestInit = z.input<typeof RoleMessageRequest>;\n\nexport const RoleMessageResponse = z.object({\n sessionId: Id,\n status: z.enum([\"sent\", \"queued\", \"steered\"]),\n});\nexport type RoleMessageResponse = z.infer<typeof RoleMessageResponse>;\n\n/** `GET /api/orchestration/notices` query. */\nexport const ListNoticesQuery = z.object({\n projectId: Id.optional(),\n target: NoticeTarget.optional(),\n limit: z.coerce.number().int().min(1).max(500).default(100),\n});\nexport type ListNoticesQuery = z.infer<typeof ListNoticesQuery>;\n\n/** `GET /api/conflicts` query. Defaults to open conflicts. */\nexport const ListConflictsQuery = z.object({\n status: InboxItemStatus.optional(),\n projectId: Id.optional(),\n});\nexport type ListConflictsQuery = z.infer<typeof ListConflictsQuery>;\n\n/** `POST /api/conflicts/:id/resolve`: the decision (wait, skip, join or force with a reason). */\nexport const ResolveConflictRequest = ConflictDecision;\nexport type ResolveConflictRequest = z.infer<typeof ResolveConflictRequest>;\n\nexport const ResolveConflictResponse = z.object({\n conflict: ConflictRecord,\n result: StartSessionResponse,\n});\nexport type ResolveConflictResponse = z.infer<typeof ResolveConflictResponse>;\n\n/**\n * `PATCH /api/sessions/:id`: change the model or effort mid-session. Applied on the next turn\n * (a running turn keeps its settings). `null` returns to the role default.\n */\nexport const UpdateSessionRequest = z\n .object({\n model: z.string().min(1).nullable().optional(),\n effort: ReasoningEffort.nullable().optional(),\n title: z.string().trim().min(1).max(200).optional(),\n })\n .refine((r) => r.model !== undefined || r.effort !== undefined || r.title !== undefined, {\n message: \"Nothing to change\",\n });\nexport type UpdateSessionRequest = z.infer<typeof UpdateSessionRequest>;\n","import { z } from \"zod\";\nimport { AgentEvent } from \"../agent-events\";\nimport { ErrorInfo, Id } from \"../common\";\nimport { BrowserFrameMetadata, BrowserTab, BrowserTabId } from \"./browser\";\nimport { CheckpointIndex, PtyId } from \"./commands\";\n\n/**\n * Durable runner -> server events. Journaled by the runner and delivered with a `seq`\n * until the server acknowledges them (§4.2), so nothing is lost while the server is away.\n */\nexport const RunnerEvent = z.discriminatedUnion(\"kind\", [\n /** A normalized agent event for a session. */\n z.object({ kind: z.literal(\"agent\"), sessionId: Id, event: AgentEvent }),\n /** Provider process lifecycle for a session. */\n z.object({\n kind: z.literal(\"session.process\"),\n sessionId: Id,\n state: z.enum([\"starting\", \"ready\", \"exited\", \"crashed\"]),\n exitCode: z.int().nullable().optional(),\n error: ErrorInfo.optional(),\n /**\n * Why an exited session closed: `stopped` (asked to), `runner_exit` (the runner is\n * draining or shutting down; the session stays resumable), `ended` (provider ended it).\n */\n reason: z.enum([\"stopped\", \"runner_exit\", \"ended\"]).optional(),\n /** True when a running turn was cut off by the runner exiting (resume and continue). */\n interruptedTurn: z.boolean().optional(),\n }),\n /** Output of `workspace.prepare` setup commands. */\n z.object({\n kind: z.literal(\"workspace.setup\"),\n sessionId: Id,\n status: z.enum([\"running\", \"succeeded\", \"failed\"]),\n command: z.string(),\n output: z.string().optional(),\n }),\n z.object({ kind: z.literal(\"pty.exited\"), ptyId: PtyId, exitCode: z.int().nullable() }),\n /** A turn checkpoint was written to `refs/codeden/checkpoints/<session>/<index>` (§9). */\n z.object({\n kind: z.literal(\"checkpoint.created\"),\n sessionId: Id,\n index: CheckpointIndex,\n ref: z.string(),\n commit: z.string(),\n /** The turn that ended (absent for the baseline checkpoint 0). */\n turnId: Id.optional(),\n }),\n /** The runner started draining (upgrade/shutdown). */\n z.object({ kind: z.literal(\"runner.draining\"), reason: z.string() }),\n]);\nexport type RunnerEvent = z.infer<typeof RunnerEvent>;\nexport type RunnerEventKind = RunnerEvent[\"kind\"];\n\n/**\n * Ephemeral runner -> server stream data. Not journaled, no `seq`, no ack: dropping it while\n * the server is away is fine (terminals keep scrollback in the runner).\n */\nexport const RunnerStream = z.discriminatedUnion(\"kind\", [\n z.object({ kind: z.literal(\"pty.output\"), ptyId: PtyId, data: z.string() }),\n z.object({\n kind: z.literal(\"browser.frame\"),\n sessionId: Id,\n mediaType: z.enum([\"image/jpeg\", \"image/png\"]),\n /** Base64 frame data. */\n data: z.string(),\n width: z.int().positive(),\n height: z.int().positive(),\n /** Tab the frame belongs to. */\n tabId: BrowserTabId.optional(),\n /** Viewport geometry at capture time, for mapping panel input onto the page. */\n metadata: BrowserFrameMetadata.optional(),\n }),\n /** The session's tabs changed (opened, closed, activated, navigated, retitled). */\n z.object({ kind: z.literal(\"browser.tabs\"), sessionId: Id, tabs: z.array(BrowserTab) }),\n]);\nexport type RunnerStream = z.infer<typeof RunnerStream>;\n","import { z } from \"zod\";\nimport { ErrorInfo, ProviderId, Timestamp } from \"../common\";\nimport { ProviderInfo } from \"../provider\";\nimport { RunnerCommand, RunnerSessionInfo } from \"./commands\";\nimport { RunnerEvent, RunnerStream } from \"./events\";\n\n/**\n * Server <-> runner protocol over one WebSocket (§4.3).\n *\n * Handshake:\n * 1. server -> `hello` (protocol + server version)\n * 2. runner -> `welcome` (runner id/version/capabilities/providers/sessions) or `reject`\n * 3. server -> `resume` (last seq it has persisted for this runner id)\n * 4. runner replays journaled events with `seq > lastAckedSeq`, then streams live.\n *\n * After the handshake the server sends `command`s (answered by `result` with the same `id`)\n * and cumulative `ack`s; the runner sends `event`s (durable, with `seq`) and `stream`s\n * (ephemeral). Either side may `ping`.\n */\n\n/** Request id correlating a `command` with its `result`. */\nexport const RequestId = z.string().min(1).max(100);\n\n/** Monotonic per-runner event sequence number (distinct from the server's event log seq). */\nexport const RunnerSeq = z.int().positive();\n\n/** Features a runner offers (in addition to provider capabilities). */\nexport const RunnerCapabilities = z.object({\n pty: z.boolean(),\n browser: z.boolean(),\n git: z.boolean(),\n mcpProxy: z.boolean(),\n});\nexport type RunnerCapabilities = z.infer<typeof RunnerCapabilities>;\n\nconst Ping = z.object({ type: z.literal(\"ping\"), id: z.string() });\nconst Pong = z.object({ type: z.literal(\"pong\"), id: z.string() });\n\n// ---------------------------------------------------------------- server -> runner\n\nexport const ServerHello = z.object({\n type: z.literal(\"hello\"),\n protocolVersion: z.int().positive(),\n serverVersion: z.string(),\n});\n\nexport const ServerResume = z.object({\n type: z.literal(\"resume\"),\n /** Highest runner seq the server has durably stored; 0 when none. */\n lastAckedSeq: z.int().nonnegative(),\n});\n\nexport const ServerCommand = z.object({\n type: z.literal(\"command\"),\n id: RequestId,\n command: RunnerCommand,\n});\n\n/** Cumulative ack: every event with `seq <= seq` may be dropped from the journal. */\nexport const ServerAck = z.object({ type: z.literal(\"ack\"), seq: RunnerSeq });\n\nexport const ServerToRunnerMessage = z.discriminatedUnion(\"type\", [\n ServerHello,\n ServerResume,\n ServerCommand,\n ServerAck,\n Ping,\n Pong,\n]);\nexport type ServerToRunnerMessage = z.infer<typeof ServerToRunnerMessage>;\n\n// ---------------------------------------------------------------- runner -> server\n\nexport const RunnerWelcome = z.object({\n type: z.literal(\"welcome\"),\n protocolVersion: z.int().positive(),\n /** Stable id persisted in `<home>/runner/`; survives runner restarts. */\n runnerId: z.string().min(1),\n runnerVersion: z.string(),\n pid: z.int().positive(),\n startedAt: Timestamp,\n capabilities: RunnerCapabilities,\n providers: z.array(ProviderInfo),\n sessions: z.array(RunnerSessionInfo),\n journal: z.object({ lastSeq: z.int().nonnegative(), unacked: z.int().nonnegative() }),\n /** True when the runner is draining and will not accept new sessions. */\n draining: z.boolean(),\n});\nexport type RunnerWelcome = z.infer<typeof RunnerWelcome>;\n\nexport const RunnerReject = z.object({\n type: z.literal(\"reject\"),\n reason: z.enum([\"protocol_mismatch\", \"busy\", \"shutting_down\"]),\n message: z.string(),\n supportedProtocolVersions: z.array(z.int().positive()).optional(),\n});\n\nexport const RunnerResult = z.discriminatedUnion(\"ok\", [\n z.object({ type: z.literal(\"result\"), id: RequestId, ok: z.literal(true), result: z.unknown() }),\n z.object({ type: z.literal(\"result\"), id: RequestId, ok: z.literal(false), error: ErrorInfo }),\n]);\nexport type RunnerResult = z.infer<typeof RunnerResult>;\n\nexport const RunnerEventMessage = z.object({\n type: z.literal(\"event\"),\n seq: RunnerSeq,\n ts: Timestamp,\n event: RunnerEvent,\n});\nexport type RunnerEventMessage = z.infer<typeof RunnerEventMessage>;\n\nexport const RunnerStreamMessage = z.object({\n type: z.literal(\"stream\"),\n ts: Timestamp,\n stream: RunnerStream,\n});\n\nexport const RunnerToServerMessage = z.discriminatedUnion(\"type\", [\n RunnerWelcome,\n RunnerReject,\n RunnerResult,\n RunnerEventMessage,\n RunnerStreamMessage,\n Ping,\n Pong,\n]);\nexport type RunnerToServerMessage = z.infer<typeof RunnerToServerMessage>;\n\n// ---------------------------------------------------------------- lock file\n\n/**\n * `<home>/runner/runner.json`: how the server finds a live runner again (§4.2).\n * Written by the runner once it is listening; removed on clean exit.\n */\nexport const RunnerLock = z.object({\n pid: z.int().positive(),\n port: z.int().min(1).max(65535),\n /** Random token the server must present (`Authorization: Bearer`). */\n token: z.string().min(16),\n version: z.string(),\n protocolVersion: z.int().positive(),\n runnerId: z.string().min(1),\n startedAt: Timestamp,\n providers: z.array(ProviderId).default([]),\n});\nexport type RunnerLock = z.infer<typeof RunnerLock>;\n\n/** `<home>/server.json`: the running server, used by the CLI (`open`, `stop`). */\nexport const ServerLock = z.object({\n pid: z.int().positive(),\n port: z.int().min(1).max(65535),\n version: z.string(),\n startedAt: Timestamp,\n});\nexport type ServerLock = z.infer<typeof ServerLock>;\n","import { z } from \"zod\";\n\n/**\n * Read-only browsing of a session's working directory for the files panel (§12.3).\n * Paths are relative to the session's worktree (or cwd) and use `/` separators.\n */\n\n/** One entry of the session file tree. */\nexport const SessionFileEntry = z.object({\n /** Relative path with `/` separators, e.g. `src/index.ts`. */\n path: z.string().min(1),\n kind: z.enum([\"file\", \"dir\"]),\n sizeBytes: z.int().nonnegative().optional(),\n});\nexport type SessionFileEntry = z.infer<typeof SessionFileEntry>;\n\n/**\n * `GET /api/sessions/:id/files`: every file and folder under the session's working directory,\n * depth-first and sorted (folders first). `.git` and `node_modules` are skipped.\n */\nexport const SessionFileList = z.object({\n /** Absolute working directory the paths are relative to. */\n root: z.string(),\n entries: z.array(SessionFileEntry),\n /** True when the listing was cut off at the entry limit. */\n truncated: z.boolean(),\n});\nexport type SessionFileList = z.infer<typeof SessionFileList>;\n\n/** `GET /api/sessions/:id/files/content` query. */\nexport const SessionFileQuery = z.object({ path: z.string().min(1).max(4096) });\nexport type SessionFileQuery = z.infer<typeof SessionFileQuery>;\n\n/** A text file from the session's working directory. Binary files report `binary: true`. */\nexport const SessionFileContent = z.object({\n path: z.string(),\n content: z.string(),\n sizeBytes: z.int().nonnegative(),\n binary: z.boolean(),\n /** True when only the first part of a large file was returned. */\n truncated: z.boolean(),\n});\nexport type SessionFileContent = z.infer<typeof SessionFileContent>;\n","import { z } from \"zod\";\nimport { Id, Role } from \"./common\";\n\n/**\n * Internal MCP tool definitions (§8.3). One registry is exposed through MCP and also called\n * directly by the UI's API handlers. Only the types live here; the registry is in the server.\n */\n\n/**\n * What a tool's handler is bound to, resolved from the caller's token:\n * - `global`: no project (orchestrator tools).\n * - `project`: the caller's project.\n * - `session`: the caller's own session (and its project).\n */\nexport const ToolScope = z.enum([\"global\", \"project\", \"session\"]);\nexport type ToolScope = z.infer<typeof ToolScope>;\n\n/** Claims encoded in a per-session MCP bearer token; revoked when the session ends. */\nexport const McpTokenClaims = z.object({\n role: Role,\n sessionId: Id,\n projectId: Id.nullable(),\n /** Token id, used for revocation. */\n jti: z.string().min(1),\n});\nexport type McpTokenClaims = z.infer<typeof McpTokenClaims>;\n\n/** Context passed to a tool handler. Narrowed by the tool's scope. */\nexport interface ToolContextBase {\n role: Role;\n /** `mcp` when an agent called it, `ui` when an API handler did. */\n caller: \"mcp\" | \"ui\";\n signal: AbortSignal;\n}\nexport interface GlobalToolContext extends ToolContextBase {\n sessionId: string | null;\n projectId: string | null;\n}\nexport interface ProjectToolContext extends ToolContextBase {\n sessionId: string | null;\n projectId: string;\n}\nexport interface SessionToolContext extends ToolContextBase {\n sessionId: string;\n projectId: string | null;\n}\nexport type ToolContext<S extends ToolScope = ToolScope> = S extends \"session\"\n ? SessionToolContext\n : S extends \"project\"\n ? ProjectToolContext\n : GlobalToolContext;\n\n/** A tool definition. `name` is snake_case and unique across the registry. */\nexport interface ToolDefinition<\n TInput extends z.ZodType = z.ZodType,\n TOutput = unknown,\n S extends ToolScope = ToolScope,\n> {\n name: string;\n /** Shown to agents; write it for a model, not a human. */\n description: string;\n /** Roles that may see and call the tool. Tools outside the caller's role aren't listed. */\n roles: readonly Role[];\n scope: S;\n input: TInput;\n output?: z.ZodType<TOutput>;\n /** Core tools are always loaded; others are deferred behind tool search (§8.3). */\n alwaysLoad?: boolean;\n /** Hidden when the predicate is false (e.g. `generate_image` with no engine). */\n isAvailable?: () => boolean | Promise<boolean>;\n handler: (input: z.output<TInput>, ctx: ToolContext<S>) => Promise<TOutput>;\n}\n\n/** Identity helper that infers a tool's input/output/scope types. */\nexport function defineTool<TInput extends z.ZodType, TOutput, S extends ToolScope>(\n def: ToolDefinition<TInput, TOutput, S>,\n): ToolDefinition<TInput, TOutput, S> {\n return def;\n}\n\n/** Any tool, for registries. */\n// biome-ignore lint/suspicious/noExplicitAny: registries hold heterogeneous tools.\nexport type AnyToolDefinition = ToolDefinition<z.ZodType, any, ToolScope>;\n","import { z } from \"zod\";\nimport { GitHubPrRef, Id, ProviderId, Role, Timestamp } from \"./common\";\n\n/**\n * Usage and cost reports (§12.6). The server keeps a ledger with one row per turn: the\n * turn's own token counts (never a running total) plus who and what the work was for.\n * Costs are labelled honestly: `reported` when the provider returned a USD figure,\n * `estimated` when CodeDen priced the tokens from its price table, `unpriced` when neither.\n */\n\n/** Where a cost figure came from. */\nexport const CostSource = z.enum([\"reported\", \"estimated\", \"unpriced\"]);\nexport type CostSource = z.infer<typeof CostSource>;\n\n/**\n * How a provider is paid for. `subscription` (a claude.ai or ChatGPT login) shows costs as\n * \"API-equivalent\": what the same work would cost on API credits, not a bill.\n */\nexport const BillingMode = z.enum([\"api\", \"subscription\", \"unknown\"]);\nexport type BillingMode = z.infer<typeof BillingMode>;\n\n/** Who started the work a ledger row belongs to. `factory`: autopilot / dark-factory work. */\nexport const UsageSource = z.enum([\"user\", \"orchestrator\", \"pm\", \"automation\", \"factory\"]);\nexport type UsageSource = z.infer<typeof UsageSource>;\n\n/** Token counts in the four billed categories, plus reasoning (a subset of output). */\nexport const TokenCounts = z.object({\n /** Uncached input tokens (excludes cache reads and writes). */\n inputTokens: z.int().nonnegative(),\n outputTokens: z.int().nonnegative(),\n cacheReadTokens: z.int().nonnegative(),\n cacheWriteTokens: z.int().nonnegative(),\n /** Reasoning/thinking tokens where reported; already counted in `outputTokens`. */\n reasoningTokens: z.int().nonnegative(),\n});\nexport type TokenCounts = z.infer<typeof TokenCounts>;\n\n/** One turn's usage as stored in the ledger. */\nexport const UsageEntry = z.object({\n ...TokenCounts.shape,\n sessionId: Id,\n turnId: Id,\n projectId: Id.nullable(),\n provider: ProviderId,\n model: z.string(),\n role: Role,\n source: UsageSource,\n automationId: Id.nullable(),\n /** USD the provider reported for this turn, when it reports one. */\n reportedCostUsd: z.number().nonnegative().nullable(),\n /** The figure used in reports (reported, else estimated from the price table). */\n costUsd: z.number().nonnegative(),\n costSource: CostSource,\n /** When the turn first reported usage. */\n ts: Timestamp,\n});\nexport type UsageEntry = z.infer<typeof UsageEntry>;\n\n/** Price of a model in USD per million tokens. */\nexport const ModelPrice = z.object({\n provider: ProviderId,\n /** Model id or alias; matched exactly, then as a prefix (`claude-sonnet-4-5` matches dated ids). */\n model: z.string().min(1),\n label: z.string().optional(),\n inputPerMTok: z.number().nonnegative(),\n outputPerMTok: z.number().nonnegative(),\n cacheReadPerMTok: z.number().nonnegative(),\n cacheWritePerMTok: z.number().nonnegative(),\n /** Date the list price was checked (YYYY-MM-DD). */\n asOf: z.iso.date(),\n /** Where the price came from. */\n sourceUrl: z.url().optional(),\n});\nexport type ModelPrice = z.infer<typeof ModelPrice>;\n\n/** A spend alert: daily or monthly, for everything or one project. */\nexport const UsageBudget = z.object({\n id: Id,\n projectId: Id.nullable(),\n period: z.enum([\"daily\", \"monthly\"]),\n limitUsd: z.number().positive(),\n /** Warn once spend reaches this share of the limit (and again when it is exceeded). */\n warnAtPercent: z.int().min(1).max(100).default(80),\n enabled: z.boolean().default(true),\n});\nexport type UsageBudget = z.infer<typeof UsageBudget>;\nexport type UsageBudgetInit = z.input<typeof UsageBudget>;\n\n/** User-editable usage settings (`usage-settings.json` in the data directory). */\nexport const UsageSettings = z.object({\n /** Price overrides and additions; they win over the bundled table for the same model. */\n prices: z.array(ModelPrice).default([]),\n budgets: z.array(UsageBudget).default([]),\n /** Raise an inbox item when a rate-limit window reaches this percentage. */\n rateLimitWarnPercent: z.int().min(1).max(100).default(85),\n /** IANA timezone that days and months are counted in; the machine's when null. */\n timezone: z.string().nullable().default(null),\n});\nexport type UsageSettings = z.infer<typeof UsageSettings>;\nexport type UsageSettingsInit = z.input<typeof UsageSettings>;\n\n/** `GET /api/usage/settings` and `PUT /api/usage/settings`. */\nexport const UsageSettingsResponse = z.object({\n settings: UsageSettings,\n /** The bundled list prices (read-only; override them in `settings.prices`). */\n bundledPrices: z.array(ModelPrice),\n});\nexport type UsageSettingsResponse = z.infer<typeof UsageSettingsResponse>;\n\n/** Range and filters for report queries. Dates are inclusive local days (YYYY-MM-DD). */\nexport const UsageQuery = z.object({\n from: z.iso.date(),\n to: z.iso.date(),\n projectId: Id.optional(),\n provider: ProviderId.optional(),\n model: z.string().optional(),\n role: Role.optional(),\n source: UsageSource.optional(),\n});\nexport type UsageQuery = z.infer<typeof UsageQuery>;\n\n/** Totals over a set of ledger rows. */\nexport const UsageTotals = z.object({\n ...TokenCounts.shape,\n costUsd: z.number().nonnegative(),\n /** Part of `costUsd` that is estimated rather than reported. */\n estimatedCostUsd: z.number().nonnegative(),\n /** Turns whose model has no price and no reported cost. */\n unpricedTurns: z.int().nonnegative(),\n turns: z.int().nonnegative(),\n sessions: z.int().nonnegative(),\n /** Cache reads / (cache reads + cache writes + uncached input); null with no input. */\n cacheHitRate: z.number().min(0).max(1).nullable(),\n});\nexport type UsageTotals = z.infer<typeof UsageTotals>;\n\n/** Dimensions reports break down by. */\nexport const UsageDimension = z.enum([\"provider\", \"model\", \"project\", \"role\", \"source\"]);\nexport type UsageDimension = z.infer<typeof UsageDimension>;\n\n/** One value of a dimension with its daily cost and tokens (aligned with `UsageReport.days`). */\nexport const UsageSeries = z.object({\n key: z.string(),\n label: z.string(),\n costUsd: z.number().nonnegative(),\n estimatedCostUsd: z.number().nonnegative(),\n tokens: z.int().nonnegative(),\n turns: z.int().nonnegative(),\n sessions: z.int().nonnegative(),\n dailyCostUsd: z.array(z.number().nonnegative()),\n dailyTokens: z.array(z.int().nonnegative()),\n});\nexport type UsageSeries = z.infer<typeof UsageSeries>;\n\n/** A session ranked by cost. */\nexport const UsageSessionRow = z.object({\n sessionId: Id,\n title: z.string(),\n projectId: Id.nullable(),\n projectName: z.string().nullable(),\n provider: ProviderId,\n model: z.string(),\n role: Role,\n source: UsageSource,\n costUsd: z.number().nonnegative(),\n estimated: z.boolean(),\n tokens: z.int().nonnegative(),\n turns: z.int().nonnegative(),\n lastAt: Timestamp,\n pr: GitHubPrRef.nullable(),\n});\nexport type UsageSessionRow = z.infer<typeof UsageSessionRow>;\n\n/** Spend of one automation. */\nexport const AutomationSpend = z.object({\n automationId: Id,\n name: z.string(),\n costUsd: z.number().nonnegative(),\n sessions: z.int().nonnegative(),\n});\nexport type AutomationSpend = z.infer<typeof AutomationSpend>;\n\n/** `GET /api/usage/report`. */\nexport const UsageReport = z.object({\n query: UsageQuery,\n timezone: z.string(),\n /** Local days in the range, oldest first. */\n days: z.array(z.iso.date()),\n totals: UsageTotals,\n /** The same totals for the equally long range just before (for trend arrows). */\n previousTotals: UsageTotals,\n series: z.record(UsageDimension, z.array(UsageSeries)),\n topSessions: z.array(UsageSessionRow),\n automations: z.object({\n manualCostUsd: z.number().nonnegative(),\n automationCostUsd: z.number().nonnegative(),\n factoryCostUsd: z.number().nonnegative(),\n byAutomation: z.array(AutomationSpend),\n }),\n averages: z.object({\n perSessionUsd: z.number().nonnegative().nullable(),\n /** Spend of sessions whose PR merged, divided by the merged PRs (null with none). */\n perMergedPrUsd: z.number().nonnegative().nullable(),\n mergedPrs: z.int().nonnegative(),\n }),\n /** How each provider in the range is billed, for the \"API-equivalent\" label. */\n billing: z.record(ProviderId, BillingMode),\n});\nexport type UsageReport = z.infer<typeof UsageReport>;\n\n/** One turn's usage for the turn footer. */\nexport const TurnUsage = z.object({\n ...TokenCounts.shape,\n turnId: Id,\n costUsd: z.number().nonnegative(),\n costSource: CostSource,\n});\nexport type TurnUsage = z.infer<typeof TurnUsage>;\n\n/** `GET /api/usage/sessions/:id`: totals for the session header plus per-turn rows. */\nexport const SessionUsage = z.object({\n sessionId: Id,\n totals: UsageTotals,\n billing: BillingMode,\n turns: z.array(TurnUsage),\n});\nexport type SessionUsage = z.infer<typeof SessionUsage>;\n\n/** A provider rate-limit window as last reported. */\nexport const RateLimitWindow = z.object({\n provider: ProviderId,\n /** Window id from the provider: `5h`, `weekly`, `weekly-opus`, ... */\n windowId: z.string(),\n label: z.string(),\n status: z.enum([\"ok\", \"warning\", \"limited\"]),\n usedPercent: z.number().min(0).max(100).nullable(),\n resetsAt: Timestamp.nullable(),\n observedAt: Timestamp,\n /** The window has reset since this reading, so the percentage is out of date. */\n stale: z.boolean(),\n});\nexport type RateLimitWindow = z.infer<typeof RateLimitWindow>;\n\n/** `GET /api/usage/limits`. */\nexport const RateLimitsResponse = z.object({\n windows: z.array(RateLimitWindow),\n warnPercent: z.int(),\n billing: z.record(ProviderId, BillingMode),\n});\nexport type RateLimitsResponse = z.infer<typeof RateLimitsResponse>;\n\n/** Where a budget stands in its current period. */\nexport const BudgetStatus = z.object({\n budget: UsageBudget,\n periodStart: z.iso.date(),\n spentUsd: z.number().nonnegative(),\n percent: z.number().nonnegative(),\n state: z.enum([\"ok\", \"warning\", \"exceeded\"]),\n});\nexport type BudgetStatus = z.infer<typeof BudgetStatus>;\n\n/** `GET /api/usage/budgets`. */\nexport const BudgetsResponse = z.object({ budgets: z.array(BudgetStatus) });\nexport type BudgetsResponse = z.infer<typeof BudgetsResponse>;\n\n/** `GET /api/usage/projects/:id`: the project home spend card. */\nexport const ProjectSpend = z.object({\n projectId: Id,\n todayUsd: z.number().nonnegative(),\n last7Usd: z.number().nonnegative(),\n monthUsd: z.number().nonnegative(),\n estimated: z.boolean(),\n /** Last 14 local days, oldest first. */\n dailyUsd: z.array(z.number().nonnegative()),\n topModel: z.string().nullable(),\n budgets: z.array(BudgetStatus),\n billing: z.record(ProviderId, BillingMode),\n});\nexport type ProjectSpend = z.infer<typeof ProjectSpend>;\n","/** The version written into the source; kept in sync with `apps/cli/package.json` (tested). */\nexport const SOURCE_VERSION = \"0.1.1\";\n\n/**\n * CodeDen release version. Server and runner exchange it during the runner handshake to detect\n * upgrades. The published entries (`dist/cli.js`, `dist/runner.js`) set\n * `globalThis.__CODEDEN_PACKAGE_VERSION__` from their own `package.json` before loading the\n * rest of the bundle, so the package version is the single source of truth at runtime;\n * everywhere else (workspace, tests) it is `SOURCE_VERSION`.\n */\nexport const CODEDEN_VERSION: string = packageVersion() ?? SOURCE_VERSION;\n\nfunction packageVersion(): string | undefined {\n const value = (globalThis as { __CODEDEN_PACKAGE_VERSION__?: unknown })\n .__CODEDEN_PACKAGE_VERSION__;\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\n/** Version of the server <-> runner WebSocket protocol (§4.3). Bump on breaking changes. */\nexport const RUNNER_PROTOCOL_VERSION = 1;\n\n/** Version of the server <-> UI WebSocket protocol. Bump on breaking changes. */\nexport const UI_PROTOCOL_VERSION = 1;\n","import { z } from \"zod\";\n\n/**\n * Optional cloud voice engines (§11.3). The browser's speech APIs stay the default; these\n * routes proxy ElevenLabs (text to speech, Scribe) and OpenAI (transcription) with API keys\n * from the OS keychain, so keys never reach the browser.\n */\n\n/** ElevenLabs MP3 output formats (`codec_sampleRate_bitrate`). */\nexport const TtsOutputFormat = z.enum([\n \"mp3_22050_32\",\n \"mp3_44100_64\",\n \"mp3_44100_128\",\n \"mp3_44100_192\",\n]);\nexport type TtsOutputFormat = z.infer<typeof TtsOutputFormat>;\n\n/**\n * `POST /api/tts`: streams `audio/mpeg`. `voiceId` defaults to\n * `settings.voice.readAloud.voice`, then a stock voice; `modelId` to a low-latency model.\n */\nexport const TtsRequest = z.object({\n text: z.string().min(1).max(5_000),\n voiceId: z.string().min(1).max(100).optional(),\n modelId: z.string().min(1).max(100).optional(),\n outputFormat: TtsOutputFormat.optional(),\n});\nexport type TtsRequest = z.infer<typeof TtsRequest>;\n\n/** One ElevenLabs voice for the voice picker. */\nexport const VoiceInfo = z.object({\n id: z.string(),\n name: z.string(),\n category: z.string().optional(),\n description: z.string().optional(),\n previewUrl: z.string().optional(),\n labels: z.record(z.string(), z.string()).optional(),\n});\nexport type VoiceInfo = z.infer<typeof VoiceInfo>;\n\n/** `GET /api/voice/voices`. */\nexport const VoiceListResponse = z.object({ voices: z.array(VoiceInfo) });\nexport type VoiceListResponse = z.infer<typeof VoiceListResponse>;\n\n/**\n * `POST /api/stt?engine=&language=`: the body is the recorded audio (raw bytes with an\n * `audio/*` content type, or multipart with a `file` field), up to 25 MB. `engine` defaults\n * to `settings.voice.dictation.engine` (when that is `browser`, ElevenLabs).\n */\nexport const SttQuery = z.object({\n engine: z.enum([\"elevenlabs\", \"openai\"]).optional(),\n /** ISO 639-1 hint, e.g. `en`. */\n language: z.string().min(2).max(10).optional(),\n});\nexport type SttQuery = z.infer<typeof SttQuery>;\n\nexport const SttResponse = z.object({\n text: z.string(),\n language: z.string().nullable(),\n engine: z.enum([\"elevenlabs\", \"openai\"]),\n});\nexport type SttResponse = z.infer<typeof SttResponse>;\n","'use strict';\n\nconst BINARY_TYPES = ['nodebuffer', 'arraybuffer', 'fragments'];\nconst hasBlob = typeof Blob !== 'undefined';\n\nif (hasBlob) BINARY_TYPES.push('blob');\n\nmodule.exports = {\n BINARY_TYPES,\n CLOSE_TIMEOUT: 30000,\n EMPTY_BUFFER: Buffer.alloc(0),\n GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n hasBlob,\n kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n kListener: Symbol('kListener'),\n kStatusCode: Symbol('status-code'),\n kWebSocket: Symbol('websocket'),\n NOOP: () => {}\n};\n","'use strict';\n\nconst { websocketMask, websocketUnmask } = require('http');\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n if (list.length === 0) return EMPTY_BUFFER;\n if (list.length === 1) return list[0];\n\n const target = Buffer.allocUnsafe(totalLength);\n let offset = 0;\n\n for (let i = 0; i < list.length; i++) {\n const buf = list[i];\n target.set(buf, offset);\n offset += buf.length;\n }\n\n if (offset < totalLength) {\n return new FastBuffer(target.buffer, target.byteOffset, offset);\n }\n\n return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n for (let i = 0; i < length; i++) {\n output[offset + i] = source[i] ^ mask[i & 3];\n }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n for (let i = 0; i < buffer.length; i++) {\n buffer[i] ^= mask[i & 3];\n }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n if (buf.length === buf.buffer.byteLength) {\n return buf.buffer;\n }\n\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n toBuffer.readOnly = true;\n\n if (Buffer.isBuffer(data)) return data;\n\n let buf;\n\n if (data instanceof ArrayBuffer) {\n buf = new FastBuffer(data);\n } else if (ArrayBuffer.isView(data)) {\n buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n } else {\n buf = Buffer.from(data);\n toBuffer.readOnly = false;\n }\n\n return buf;\n}\n\nmodule.exports = {\n concat,\n mask: _mask,\n toArrayBuffer,\n toBuffer,\n unmask: _unmask\n};\n\nif (websocketMask) {\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 24) _mask(source, mask, output, offset, length);\n else websocketMask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 24) _unmask(buffer, mask);\n else websocketUnmask(buffer, mask);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_BUFFER_UTIL) {\n try {\n const bufferUtil = require('bufferutil');\n\n module.exports.mask = function (source, mask, output, offset, length) {\n if (length < 48) _mask(source, mask, output, offset, length);\n else bufferUtil.mask(source, mask, output, offset, length);\n };\n\n module.exports.unmask = function (buffer, mask) {\n if (buffer.length < 32) _unmask(buffer, mask);\n else bufferUtil.unmask(buffer, mask);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n /**\n * Creates a new `Limiter`.\n *\n * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n * to run concurrently\n */\n constructor(concurrency) {\n this[kDone] = () => {\n this.pending--;\n this[kRun]();\n };\n this.concurrency = concurrency || Infinity;\n this.jobs = [];\n this.pending = 0;\n }\n\n /**\n * Adds a job to the queue.\n *\n * @param {Function} job The job to run\n * @public\n */\n add(job) {\n this.jobs.push(job);\n this[kRun]();\n }\n\n /**\n * Removes a job from the queue and runs it if possible.\n *\n * @private\n */\n [kRun]() {\n if (this.pending === this.concurrency) return;\n\n if (this.jobs.length) {\n const job = this.jobs.shift();\n\n this.pending++;\n job(this[kDone]);\n }\n }\n}\n\nmodule.exports = Limiter;\n","'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n /**\n * Creates a PerMessageDeflate instance.\n *\n * @param {Object} [options] Configuration options\n * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n * for, or request, a custom client window size\n * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n * acknowledge disabling of client context takeover\n * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n * calls to zlib\n * @param {Boolean} [options.isServer=false] Create the instance in either\n * server or client mode\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n * use of a custom server window size\n * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n * disabling of server context takeover\n * @param {Number} [options.threshold=1024] Size (in bytes) below which\n * messages should not be compressed if context takeover is disabled\n * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n * deflate\n * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n * inflate\n */\n constructor(options) {\n this._options = options || {};\n this._threshold =\n this._options.threshold !== undefined ? this._options.threshold : 1024;\n this._maxPayload = this._options.maxPayload | 0;\n this._isServer = !!this._options.isServer;\n this._deflate = null;\n this._inflate = null;\n\n this.params = null;\n\n if (!zlibLimiter) {\n const concurrency =\n this._options.concurrencyLimit !== undefined\n ? this._options.concurrencyLimit\n : 10;\n zlibLimiter = new Limiter(concurrency);\n }\n }\n\n /**\n * @type {String}\n */\n static get extensionName() {\n return 'permessage-deflate';\n }\n\n /**\n * Create an extension negotiation offer.\n *\n * @return {Object} Extension parameters\n * @public\n */\n offer() {\n const params = {};\n\n if (this._options.serverNoContextTakeover) {\n params.server_no_context_takeover = true;\n }\n if (this._options.clientNoContextTakeover) {\n params.client_no_context_takeover = true;\n }\n if (this._options.serverMaxWindowBits) {\n params.server_max_window_bits = this._options.serverMaxWindowBits;\n }\n if (this._options.clientMaxWindowBits) {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n } else if (this._options.clientMaxWindowBits == null) {\n params.client_max_window_bits = true;\n }\n\n return params;\n }\n\n /**\n * Accept an extension negotiation offer/response.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Object} Accepted configuration\n * @public\n */\n accept(configurations) {\n configurations = this.normalizeParams(configurations);\n\n this.params = this._isServer\n ? this.acceptAsServer(configurations)\n : this.acceptAsClient(configurations);\n\n return this.params;\n }\n\n /**\n * Releases all resources used by the extension.\n *\n * @public\n */\n cleanup() {\n if (this._inflate) {\n this._inflate.close();\n this._inflate = null;\n }\n\n if (this._deflate) {\n const callback = this._deflate[kCallback];\n\n this._deflate.close();\n this._deflate = null;\n\n if (callback) {\n callback(\n new Error(\n 'The deflate stream was closed while data was being processed'\n )\n );\n }\n }\n }\n\n /**\n * Accept an extension negotiation offer.\n *\n * @param {Array} offers The extension negotiation offers\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsServer(offers) {\n const opts = this._options;\n const accepted = offers.find((params) => {\n if (\n (opts.serverNoContextTakeover === false &&\n params.server_no_context_takeover) ||\n (params.server_max_window_bits &&\n (opts.serverMaxWindowBits === false ||\n (typeof opts.serverMaxWindowBits === 'number' &&\n opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n (typeof opts.clientMaxWindowBits === 'number' &&\n (typeof params.client_max_window_bits === 'number'\n ? opts.clientMaxWindowBits > params.client_max_window_bits\n : !params.client_max_window_bits))\n ) {\n return false;\n }\n\n return true;\n });\n\n if (!accepted) {\n throw new Error('None of the extension offers can be accepted');\n }\n\n if (opts.serverNoContextTakeover) {\n accepted.server_no_context_takeover = true;\n }\n if (opts.clientNoContextTakeover) {\n accepted.client_no_context_takeover = true;\n }\n if (typeof opts.serverMaxWindowBits === 'number') {\n accepted.server_max_window_bits = opts.serverMaxWindowBits;\n }\n if (typeof opts.clientMaxWindowBits === 'number') {\n accepted.client_max_window_bits = opts.clientMaxWindowBits;\n } else if (\n accepted.client_max_window_bits === true ||\n opts.clientMaxWindowBits === false\n ) {\n delete accepted.client_max_window_bits;\n }\n\n return accepted;\n }\n\n /**\n * Accept the extension negotiation response.\n *\n * @param {Array} response The extension negotiation response\n * @return {Object} Accepted configuration\n * @private\n */\n acceptAsClient(response) {\n const params = response[0];\n\n if (\n this._options.clientNoContextTakeover === false &&\n params.client_no_context_takeover\n ) {\n throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n }\n\n if (!params.client_max_window_bits) {\n if (typeof this._options.clientMaxWindowBits === 'number') {\n params.client_max_window_bits = this._options.clientMaxWindowBits;\n }\n } else if (\n this._options.clientMaxWindowBits === false ||\n (typeof this._options.clientMaxWindowBits === 'number' &&\n params.client_max_window_bits > this._options.clientMaxWindowBits)\n ) {\n throw new Error(\n 'Unexpected or invalid parameter \"client_max_window_bits\"'\n );\n }\n\n return params;\n }\n\n /**\n * Normalize parameters.\n *\n * @param {Array} configurations The extension negotiation offers/reponse\n * @return {Array} The offers/response with normalized parameters\n * @private\n */\n normalizeParams(configurations) {\n configurations.forEach((params) => {\n Object.keys(params).forEach((key) => {\n let value = params[key];\n\n if (value.length > 1) {\n throw new Error(`Parameter \"${key}\" must have only a single value`);\n }\n\n value = value[0];\n\n if (key === 'client_max_window_bits') {\n if (value !== true) {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (!this._isServer) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else if (key === 'server_max_window_bits') {\n const num = +value;\n if (!Number.isInteger(num) || num < 8 || num > 15) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n value = num;\n } else if (\n key === 'client_no_context_takeover' ||\n key === 'server_no_context_takeover'\n ) {\n if (value !== true) {\n throw new TypeError(\n `Invalid value for parameter \"${key}\": ${value}`\n );\n }\n } else {\n throw new Error(`Unknown parameter \"${key}\"`);\n }\n\n params[key] = value;\n });\n });\n\n return configurations;\n }\n\n /**\n * Decompress data. Concurrency limited.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n decompress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._decompress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Compress data. Concurrency limited.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @public\n */\n compress(data, fin, callback) {\n zlibLimiter.add((done) => {\n this._compress(data, fin, (err, result) => {\n done();\n callback(err, result);\n });\n });\n }\n\n /**\n * Decompress data.\n *\n * @param {Buffer} data Compressed data\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _decompress(data, fin, callback) {\n const endpoint = this._isServer ? 'client' : 'server';\n\n if (!this._inflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._inflate = zlib.createInflateRaw({\n ...this._options.zlibInflateOptions,\n windowBits\n });\n this._inflate[kPerMessageDeflate] = this;\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n this._inflate.on('error', inflateOnError);\n this._inflate.on('data', inflateOnData);\n }\n\n this._inflate[kCallback] = callback;\n\n this._inflate.write(data);\n if (fin) this._inflate.write(TRAILER);\n\n this._inflate.flush(() => {\n const err = this._inflate[kError];\n\n if (err) {\n this._inflate.close();\n this._inflate = null;\n callback(err);\n return;\n }\n\n const data = bufferUtil.concat(\n this._inflate[kBuffers],\n this._inflate[kTotalLength]\n );\n\n if (this._inflate._readableState.endEmitted) {\n this._inflate.close();\n this._inflate = null;\n } else {\n this._inflate[kTotalLength] = 0;\n this._inflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._inflate.reset();\n }\n }\n\n callback(null, data);\n });\n }\n\n /**\n * Compress data.\n *\n * @param {(Buffer|String)} data Data to compress\n * @param {Boolean} fin Specifies whether or not this is the last fragment\n * @param {Function} callback Callback\n * @private\n */\n _compress(data, fin, callback) {\n const endpoint = this._isServer ? 'server' : 'client';\n\n if (!this._deflate) {\n const key = `${endpoint}_max_window_bits`;\n const windowBits =\n typeof this.params[key] !== 'number'\n ? zlib.Z_DEFAULT_WINDOWBITS\n : this.params[key];\n\n this._deflate = zlib.createDeflateRaw({\n ...this._options.zlibDeflateOptions,\n windowBits\n });\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n this._deflate.on('data', deflateOnData);\n }\n\n this._deflate[kCallback] = callback;\n\n this._deflate.write(data);\n this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n if (!this._deflate) {\n //\n // The deflate stream was closed while data was being processed.\n //\n return;\n }\n\n let data = bufferUtil.concat(\n this._deflate[kBuffers],\n this._deflate[kTotalLength]\n );\n\n if (fin) {\n data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n }\n\n //\n // Ensure that the callback will not be called again in\n // `PerMessageDeflate#cleanup()`.\n //\n this._deflate[kCallback] = null;\n\n this._deflate[kTotalLength] = 0;\n this._deflate[kBuffers] = [];\n\n if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n this._deflate.reset();\n }\n\n callback(null, data);\n });\n }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n this[kBuffers].push(chunk);\n this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n this[kTotalLength] += chunk.length;\n\n if (\n this[kPerMessageDeflate]._maxPayload < 1 ||\n this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n ) {\n this[kBuffers].push(chunk);\n return;\n }\n\n this[kError] = new RangeError('Max payload size exceeded');\n this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n this[kError][kStatusCode] = 1009;\n this.removeListener('data', inflateOnData);\n\n //\n // The choice to employ `zlib.reset()` over `zlib.close()` is dictated by the\n // fact that in Node.js versions prior to 13.10.0, the callback for\n // `zlib.flush()` is not called if `zlib.close()` is used. Utilizing\n // `zlib.reset()` ensures that either the callback is invoked or an error is\n // emitted.\n //\n this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n //\n // There is no need to call `Zlib#close()` as the handle is automatically\n // closed when an error is emitted.\n //\n this[kPerMessageDeflate]._inflate = null;\n\n if (this[kError]) {\n this[kCallback](this[kError]);\n return;\n }\n\n err[kStatusCode] = 1007;\n this[kCallback](err);\n}\n","'use strict';\n\nconst { isUtf8 } = require('buffer');\n\nconst { hasBlob } = require('./constants');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n return (\n (code >= 1000 &&\n code <= 1014 &&\n code !== 1004 &&\n code !== 1005 &&\n code !== 1006) ||\n (code >= 3000 && code <= 4999)\n );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n const len = buf.length;\n let i = 0;\n\n while (i < len) {\n if ((buf[i] & 0x80) === 0) {\n // 0xxxxxxx\n i++;\n } else if ((buf[i] & 0xe0) === 0xc0) {\n // 110xxxxx 10xxxxxx\n if (\n i + 1 === len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i] & 0xfe) === 0xc0 // Overlong\n ) {\n return false;\n }\n\n i += 2;\n } else if ((buf[i] & 0xf0) === 0xe0) {\n // 1110xxxx 10xxxxxx 10xxxxxx\n if (\n i + 2 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n ) {\n return false;\n }\n\n i += 3;\n } else if ((buf[i] & 0xf8) === 0xf0) {\n // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n if (\n i + 3 >= len ||\n (buf[i + 1] & 0xc0) !== 0x80 ||\n (buf[i + 2] & 0xc0) !== 0x80 ||\n (buf[i + 3] & 0xc0) !== 0x80 ||\n (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n buf[i] > 0xf4 // > U+10FFFF\n ) {\n return false;\n }\n\n i += 4;\n } else {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Determines whether a value is a `Blob`.\n *\n * @param {*} value The value to be tested\n * @return {Boolean} `true` if `value` is a `Blob`, else `false`\n * @private\n */\nfunction isBlob(value) {\n return (\n hasBlob &&\n typeof value === 'object' &&\n typeof value.arrayBuffer === 'function' &&\n typeof value.type === 'string' &&\n typeof value.stream === 'function' &&\n (value[Symbol.toStringTag] === 'Blob' ||\n value[Symbol.toStringTag] === 'File')\n );\n}\n\nmodule.exports = {\n isBlob,\n isValidStatusCode,\n isValidUTF8: _isValidUTF8,\n tokenChars\n};\n\nif (isUtf8) {\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n };\n} /* istanbul ignore else */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n try {\n const isValidUTF8 = require('utf-8-validate');\n\n module.exports.isValidUTF8 = function (buf) {\n return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n };\n } catch (e) {\n // Continue regardless of the error.\n }\n}\n","'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n BINARY_TYPES,\n EMPTY_BUFFER,\n kStatusCode,\n kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n /**\n * Creates a Receiver instance.\n *\n * @param {Object} [options] Options object\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {String} [options.binaryType=nodebuffer] The type for binary data\n * @param {Object} [options.extensions] An object containing the negotiated\n * extensions\n * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n * client or server mode\n * @param {Number} [options.maxBufferedChunks=0] The maximum number of\n * buffered data chunks\n * @param {Number} [options.maxFragments=0] The maximum number of message\n * fragments\n * @param {Number} [options.maxPayload=0] The maximum allowed message length\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n */\n constructor(options = {}) {\n super();\n\n this._allowSynchronousEvents =\n options.allowSynchronousEvents !== undefined\n ? options.allowSynchronousEvents\n : true;\n this._binaryType = options.binaryType || BINARY_TYPES[0];\n this._extensions = options.extensions || {};\n this._isServer = !!options.isServer;\n this._maxBufferedChunks = options.maxBufferedChunks | 0;\n this._maxFragments = options.maxFragments | 0;\n this._maxPayload = options.maxPayload | 0;\n this._skipUTF8Validation = !!options.skipUTF8Validation;\n this[kWebSocket] = undefined;\n\n this._bufferedBytes = 0;\n this._buffers = [];\n\n this._compressed = false;\n this._payloadLength = 0;\n this._mask = undefined;\n this._fragmented = 0;\n this._masked = false;\n this._fin = false;\n this._opcode = 0;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._numFragments = 0;\n this._fragments = [];\n\n this._errored = false;\n this._loop = false;\n this._state = GET_INFO;\n }\n\n /**\n * Implements `Writable.prototype._write()`.\n *\n * @param {Buffer} chunk The chunk of data to write\n * @param {String} encoding The character encoding of `chunk`\n * @param {Function} cb Callback\n * @private\n */\n _write(chunk, encoding, cb) {\n if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n if (\n this._maxBufferedChunks > 0 &&\n this._buffers.length >= this._maxBufferedChunks\n ) {\n cb(\n this.createError(\n RangeError,\n 'Too many buffered chunks',\n false,\n 1008,\n 'WS_ERR_TOO_MANY_BUFFERED_PARTS'\n )\n );\n return;\n }\n\n this._bufferedBytes += chunk.length;\n this._buffers.push(chunk);\n this.startLoop(cb);\n }\n\n /**\n * Consumes `n` bytes from the buffered data.\n *\n * @param {Number} n The number of bytes to consume\n * @return {Buffer} The consumed bytes\n * @private\n */\n consume(n) {\n this._bufferedBytes -= n;\n\n if (n === this._buffers[0].length) return this._buffers.shift();\n\n if (n < this._buffers[0].length) {\n const buf = this._buffers[0];\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n\n return new FastBuffer(buf.buffer, buf.byteOffset, n);\n }\n\n const dst = Buffer.allocUnsafe(n);\n\n do {\n const buf = this._buffers[0];\n const offset = dst.length - n;\n\n if (n >= buf.length) {\n dst.set(this._buffers.shift(), offset);\n } else {\n dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n this._buffers[0] = new FastBuffer(\n buf.buffer,\n buf.byteOffset + n,\n buf.length - n\n );\n }\n\n n -= buf.length;\n } while (n > 0);\n\n return dst;\n }\n\n /**\n * Starts the parsing loop.\n *\n * @param {Function} cb Callback\n * @private\n */\n startLoop(cb) {\n this._loop = true;\n\n do {\n switch (this._state) {\n case GET_INFO:\n this.getInfo(cb);\n break;\n case GET_PAYLOAD_LENGTH_16:\n this.getPayloadLength16(cb);\n break;\n case GET_PAYLOAD_LENGTH_64:\n this.getPayloadLength64(cb);\n break;\n case GET_MASK:\n this.getMask();\n break;\n case GET_DATA:\n this.getData(cb);\n break;\n case INFLATING:\n case DEFER_EVENT:\n this._loop = false;\n return;\n }\n } while (this._loop);\n\n if (!this._errored) cb();\n }\n\n /**\n * Reads the first two bytes of a frame.\n *\n * @param {Function} cb Callback\n * @private\n */\n getInfo(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(2);\n\n if ((buf[0] & 0x30) !== 0x00) {\n const error = this.createError(\n RangeError,\n 'RSV2 and RSV3 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_2_3'\n );\n\n cb(error);\n return;\n }\n\n const compressed = (buf[0] & 0x40) === 0x40;\n\n if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n this._fin = (buf[0] & 0x80) === 0x80;\n this._opcode = buf[0] & 0x0f;\n this._payloadLength = buf[1] & 0x7f;\n\n if (this._opcode === 0x00) {\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fragmented) {\n const error = this.createError(\n RangeError,\n 'invalid opcode 0',\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._opcode = this._fragmented;\n } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n if (this._fragmented) {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n this._compressed = compressed;\n } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n if (!this._fin) {\n const error = this.createError(\n RangeError,\n 'FIN must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_FIN'\n );\n\n cb(error);\n return;\n }\n\n if (compressed) {\n const error = this.createError(\n RangeError,\n 'RSV1 must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_RSV_1'\n );\n\n cb(error);\n return;\n }\n\n if (\n this._payloadLength > 0x7d ||\n (this._opcode === 0x08 && this._payloadLength === 1)\n ) {\n const error = this.createError(\n RangeError,\n `invalid payload length ${this._payloadLength}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n } else {\n const error = this.createError(\n RangeError,\n `invalid opcode ${this._opcode}`,\n true,\n 1002,\n 'WS_ERR_INVALID_OPCODE'\n );\n\n cb(error);\n return;\n }\n\n if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n this._masked = (buf[1] & 0x80) === 0x80;\n\n if (this._isServer) {\n if (!this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be set',\n true,\n 1002,\n 'WS_ERR_EXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n } else if (this._masked) {\n const error = this.createError(\n RangeError,\n 'MASK must be clear',\n true,\n 1002,\n 'WS_ERR_UNEXPECTED_MASK'\n );\n\n cb(error);\n return;\n }\n\n if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n else this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+16).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength16(cb) {\n if (this._bufferedBytes < 2) {\n this._loop = false;\n return;\n }\n\n this._payloadLength = this.consume(2).readUInt16BE(0);\n this.haveLength(cb);\n }\n\n /**\n * Gets extended payload length (7+64).\n *\n * @param {Function} cb Callback\n * @private\n */\n getPayloadLength64(cb) {\n if (this._bufferedBytes < 8) {\n this._loop = false;\n return;\n }\n\n const buf = this.consume(8);\n const num = buf.readUInt32BE(0);\n\n //\n // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n // if payload length is greater than this number.\n //\n if (num > Math.pow(2, 53 - 32) - 1) {\n const error = this.createError(\n RangeError,\n 'Unsupported WebSocket frame: payload length > 2^53 - 1',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n this.haveLength(cb);\n }\n\n /**\n * Payload length has been read.\n *\n * @param {Function} cb Callback\n * @private\n */\n haveLength(cb) {\n if (this._payloadLength && this._opcode < 0x08) {\n this._totalPayloadLength += this._payloadLength;\n if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n }\n\n if (this._masked) this._state = GET_MASK;\n else this._state = GET_DATA;\n }\n\n /**\n * Reads mask bytes.\n *\n * @private\n */\n getMask() {\n if (this._bufferedBytes < 4) {\n this._loop = false;\n return;\n }\n\n this._mask = this.consume(4);\n this._state = GET_DATA;\n }\n\n /**\n * Reads data bytes.\n *\n * @param {Function} cb Callback\n * @private\n */\n getData(cb) {\n let data = EMPTY_BUFFER;\n\n if (this._payloadLength) {\n if (this._bufferedBytes < this._payloadLength) {\n this._loop = false;\n return;\n }\n\n data = this.consume(this._payloadLength);\n\n if (\n this._masked &&\n (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n ) {\n unmask(data, this._mask);\n }\n }\n\n if (this._opcode > 0x07) {\n this.controlMessage(data, cb);\n return;\n }\n\n if (this._maxFragments > 0 && ++this._numFragments > this._maxFragments) {\n const error = this.createError(\n RangeError,\n 'Too many message fragments',\n false,\n 1008,\n 'WS_ERR_TOO_MANY_BUFFERED_PARTS'\n );\n\n cb(error);\n return;\n }\n\n if (this._compressed) {\n this._state = INFLATING;\n this.decompress(data, cb);\n return;\n }\n\n if (data.length) {\n //\n // This message is not compressed so its length is the sum of the payload\n // length of all fragments.\n //\n this._messageLength = this._totalPayloadLength;\n this._fragments.push(data);\n }\n\n this.dataMessage(cb);\n }\n\n /**\n * Decompresses data.\n *\n * @param {Buffer} data Compressed data\n * @param {Function} cb Callback\n * @private\n */\n decompress(data, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n if (err) return cb(err);\n\n if (buf.length) {\n this._messageLength += buf.length;\n if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n const error = this.createError(\n RangeError,\n 'Max payload size exceeded',\n false,\n 1009,\n 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n );\n\n cb(error);\n return;\n }\n\n this._fragments.push(buf);\n }\n\n this.dataMessage(cb);\n if (this._state === GET_INFO) this.startLoop(cb);\n });\n }\n\n /**\n * Handles a data message.\n *\n * @param {Function} cb Callback\n * @private\n */\n dataMessage(cb) {\n if (!this._fin) {\n this._state = GET_INFO;\n return;\n }\n\n const messageLength = this._messageLength;\n const fragments = this._fragments;\n\n this._totalPayloadLength = 0;\n this._messageLength = 0;\n this._fragmented = 0;\n this._numFragments = 0;\n this._fragments = [];\n\n if (this._opcode === 2) {\n let data;\n\n if (this._binaryType === 'nodebuffer') {\n data = concat(fragments, messageLength);\n } else if (this._binaryType === 'arraybuffer') {\n data = toArrayBuffer(concat(fragments, messageLength));\n } else if (this._binaryType === 'blob') {\n data = new Blob(fragments);\n } else {\n data = fragments;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit('message', data, true);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', data, true);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n } else {\n const buf = concat(fragments, messageLength);\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n if (this._state === INFLATING || this._allowSynchronousEvents) {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit('message', buf, false);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n }\n\n /**\n * Handles a control message.\n *\n * @param {Buffer} data Data to handle\n * @return {(Error|RangeError|undefined)} A possible error\n * @private\n */\n controlMessage(data, cb) {\n if (this._opcode === 0x08) {\n if (data.length === 0) {\n this._loop = false;\n this.emit('conclude', 1005, EMPTY_BUFFER);\n this.end();\n } else {\n const code = data.readUInt16BE(0);\n\n if (!isValidStatusCode(code)) {\n const error = this.createError(\n RangeError,\n `invalid status code ${code}`,\n true,\n 1002,\n 'WS_ERR_INVALID_CLOSE_CODE'\n );\n\n cb(error);\n return;\n }\n\n const buf = new FastBuffer(\n data.buffer,\n data.byteOffset + 2,\n data.length - 2\n );\n\n if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n const error = this.createError(\n Error,\n 'invalid UTF-8 sequence',\n true,\n 1007,\n 'WS_ERR_INVALID_UTF8'\n );\n\n cb(error);\n return;\n }\n\n this._loop = false;\n this.emit('conclude', code, buf);\n this.end();\n }\n\n this._state = GET_INFO;\n return;\n }\n\n if (this._allowSynchronousEvents) {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n } else {\n this._state = DEFER_EVENT;\n setImmediate(() => {\n this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n this._state = GET_INFO;\n this.startLoop(cb);\n });\n }\n }\n\n /**\n * Builds an error object.\n *\n * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n * @param {String} message The error message\n * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n * `message`\n * @param {Number} statusCode The status code\n * @param {String} errorCode The exposed error code\n * @return {(Error|RangeError)} The error\n * @private\n */\n createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n this._loop = false;\n this._errored = true;\n\n const err = new ErrorCtor(\n prefix ? `Invalid WebSocket frame: ${message}` : message\n );\n\n Error.captureStackTrace(err, this.createError);\n err.code = errorCode;\n err[kStatusCode] = statusCode;\n return err;\n }\n}\n\nmodule.exports = Receiver;\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\nconst {\n types: { isUint8Array }\n} = require('util');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER, kWebSocket, NOOP } = require('./constants');\nconst { isBlob, isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\nconst DEFAULT = 0;\nconst DEFLATING = 1;\nconst GET_BLOB_DATA = 2;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n /**\n * Creates a Sender instance.\n *\n * @param {Duplex} socket The connection socket\n * @param {Object} [extensions] An object containing the negotiated extensions\n * @param {Function} [generateMask] The function used to generate the masking\n * key\n */\n constructor(socket, extensions, generateMask) {\n this._extensions = extensions || {};\n\n if (generateMask) {\n this._generateMask = generateMask;\n this._maskBuffer = Buffer.alloc(4);\n }\n\n this._socket = socket;\n\n this._firstFragment = true;\n this._compress = false;\n\n this._bufferedBytes = 0;\n this._queue = [];\n this._state = DEFAULT;\n this.onerror = NOOP;\n this[kWebSocket] = undefined;\n }\n\n /**\n * Frames a piece of data according to the HyBi WebSocket protocol.\n *\n * @param {(Buffer|String)} data The data to frame\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @return {(Buffer|String)[]} The framed data\n * @public\n */\n static frame(data, options) {\n let mask;\n let merge = false;\n let offset = 2;\n let skipMasking = false;\n\n if (options.mask) {\n mask = options.maskBuffer || maskBuffer;\n\n if (options.generateMask) {\n options.generateMask(mask);\n } else {\n if (randomPoolPointer === RANDOM_POOL_SIZE) {\n /* istanbul ignore else */\n if (randomPool === undefined) {\n //\n // This is lazily initialized because server-sent frames must not\n // be masked so it may never be used.\n //\n randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n }\n\n randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n randomPoolPointer = 0;\n }\n\n mask[0] = randomPool[randomPoolPointer++];\n mask[1] = randomPool[randomPoolPointer++];\n mask[2] = randomPool[randomPoolPointer++];\n mask[3] = randomPool[randomPoolPointer++];\n }\n\n skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n offset = 6;\n }\n\n let dataLength;\n\n if (typeof data === 'string') {\n if (\n (!options.mask || skipMasking) &&\n options[kByteLength] !== undefined\n ) {\n dataLength = options[kByteLength];\n } else {\n data = Buffer.from(data);\n dataLength = data.length;\n }\n } else {\n dataLength = data.length;\n merge = options.mask && options.readOnly && !skipMasking;\n }\n\n let payloadLength = dataLength;\n\n if (dataLength >= 65536) {\n offset += 8;\n payloadLength = 127;\n } else if (dataLength > 125) {\n offset += 2;\n payloadLength = 126;\n }\n\n const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n if (options.rsv1) target[0] |= 0x40;\n\n target[1] = payloadLength;\n\n if (payloadLength === 126) {\n target.writeUInt16BE(dataLength, 2);\n } else if (payloadLength === 127) {\n target[2] = target[3] = 0;\n target.writeUIntBE(dataLength, 4, 6);\n }\n\n if (!options.mask) {\n return dataLength ? [target, data] : [target];\n }\n\n target[1] |= 0x80;\n target[offset - 4] = mask[0];\n target[offset - 3] = mask[1];\n target[offset - 2] = mask[2];\n target[offset - 1] = mask[3];\n\n if (!dataLength) return [target];\n if (skipMasking) return [target, data];\n\n if (merge) {\n applyMask(data, mask, target, offset, dataLength);\n return [target];\n }\n\n applyMask(data, mask, data, 0, dataLength);\n return [target, data];\n }\n\n /**\n * Sends a close message to the other peer.\n *\n * @param {Number} [code] The status code component of the body\n * @param {(String|Buffer)} [data] The message component of the body\n * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n * @param {Function} [cb] Callback\n * @public\n */\n close(code, data, mask, cb) {\n let buf;\n\n if (code === undefined) {\n buf = EMPTY_BUFFER;\n } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n throw new TypeError('First argument must be a valid error code number');\n } else if (data === undefined || !data.length) {\n buf = Buffer.allocUnsafe(2);\n buf.writeUInt16BE(code, 0);\n } else {\n const length = Buffer.byteLength(data);\n\n if (length > 123) {\n throw new RangeError('The message must not be greater than 123 bytes');\n }\n\n buf = Buffer.allocUnsafe(2 + length);\n buf.writeUInt16BE(code, 0);\n\n if (typeof data === 'string') {\n buf.write(data, 2);\n } else if (isUint8Array(data)) {\n buf.set(data, 2);\n } else {\n throw new TypeError('Second argument must be a string or a Uint8Array');\n }\n }\n\n const options = {\n [kByteLength]: buf.length,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x08,\n readOnly: false,\n rsv1: false\n };\n\n if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, buf, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(buf, options), cb);\n }\n }\n\n /**\n * Sends a ping message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n ping(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x09,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a pong message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback\n * @public\n */\n pong(data, mask, cb) {\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (byteLength > 125) {\n throw new RangeError('The data size must not be greater than 125 bytes');\n }\n\n const options = {\n [kByteLength]: byteLength,\n fin: true,\n generateMask: this._generateMask,\n mask,\n maskBuffer: this._maskBuffer,\n opcode: 0x0a,\n readOnly,\n rsv1: false\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, false, options, cb]);\n } else {\n this.getBlobData(data, false, options, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, false, options, cb]);\n } else {\n this.sendFrame(Sender.frame(data, options), cb);\n }\n }\n\n /**\n * Sends a data message to the other peer.\n *\n * @param {*} data The message to send\n * @param {Object} options Options object\n * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n * or text\n * @param {Boolean} [options.compress=false] Specifies whether or not to\n * compress `data`\n * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Function} [cb] Callback\n * @public\n */\n send(data, options, cb) {\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n let opcode = options.binary ? 2 : 1;\n let rsv1 = options.compress;\n\n let byteLength;\n let readOnly;\n\n if (typeof data === 'string') {\n byteLength = Buffer.byteLength(data);\n readOnly = false;\n } else if (isBlob(data)) {\n byteLength = data.size;\n readOnly = false;\n } else {\n data = toBuffer(data);\n byteLength = data.length;\n readOnly = toBuffer.readOnly;\n }\n\n if (this._firstFragment) {\n this._firstFragment = false;\n if (\n rsv1 &&\n perMessageDeflate &&\n perMessageDeflate.params[\n perMessageDeflate._isServer\n ? 'server_no_context_takeover'\n : 'client_no_context_takeover'\n ]\n ) {\n rsv1 = byteLength >= perMessageDeflate._threshold;\n }\n this._compress = rsv1;\n } else {\n rsv1 = false;\n opcode = 0;\n }\n\n if (options.fin) this._firstFragment = true;\n\n const opts = {\n [kByteLength]: byteLength,\n fin: options.fin,\n generateMask: this._generateMask,\n mask: options.mask,\n maskBuffer: this._maskBuffer,\n opcode,\n readOnly,\n rsv1\n };\n\n if (isBlob(data)) {\n if (this._state !== DEFAULT) {\n this.enqueue([this.getBlobData, data, this._compress, opts, cb]);\n } else {\n this.getBlobData(data, this._compress, opts, cb);\n }\n } else if (this._state !== DEFAULT) {\n this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n } else {\n this.dispatch(data, this._compress, opts, cb);\n }\n }\n\n /**\n * Gets the contents of a blob as binary data.\n *\n * @param {Blob} blob The blob\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * the data\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n getBlobData(blob, compress, options, cb) {\n this._bufferedBytes += options[kByteLength];\n this._state = GET_BLOB_DATA;\n\n blob\n .arrayBuffer()\n .then((arrayBuffer) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while the blob was being read'\n );\n\n //\n // `callCallbacks` is called in the next tick to ensure that errors\n // that might be thrown in the callbacks behave like errors thrown\n // outside the promise chain.\n //\n process.nextTick(callCallbacks, this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n const data = toBuffer(arrayBuffer);\n\n if (!compress) {\n this._state = DEFAULT;\n this.sendFrame(Sender.frame(data, options), cb);\n this.dequeue();\n } else {\n this.dispatch(data, compress, options, cb);\n }\n })\n .catch((err) => {\n //\n // `onError` is called in the next tick for the same reason that\n // `callCallbacks` above is.\n //\n process.nextTick(onError, this, err, cb);\n });\n }\n\n /**\n * Dispatches a message.\n *\n * @param {(Buffer|String)} data The message to send\n * @param {Boolean} [compress=false] Specifies whether or not to compress\n * `data`\n * @param {Object} options Options object\n * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n * FIN bit\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n * `data`\n * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n * key\n * @param {Number} options.opcode The opcode\n * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n * modified\n * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n * RSV1 bit\n * @param {Function} [cb] Callback\n * @private\n */\n dispatch(data, compress, options, cb) {\n if (!compress) {\n this.sendFrame(Sender.frame(data, options), cb);\n return;\n }\n\n const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n this._bufferedBytes += options[kByteLength];\n this._state = DEFLATING;\n perMessageDeflate.compress(data, options.fin, (_, buf) => {\n if (this._socket.destroyed) {\n const err = new Error(\n 'The socket was closed while data was being compressed'\n );\n\n callCallbacks(this, err, cb);\n return;\n }\n\n this._bufferedBytes -= options[kByteLength];\n this._state = DEFAULT;\n options.readOnly = false;\n this.sendFrame(Sender.frame(buf, options), cb);\n this.dequeue();\n });\n }\n\n /**\n * Executes queued send operations.\n *\n * @private\n */\n dequeue() {\n while (this._state === DEFAULT && this._queue.length) {\n const params = this._queue.shift();\n\n this._bufferedBytes -= params[3][kByteLength];\n Reflect.apply(params[0], this, params.slice(1));\n }\n }\n\n /**\n * Enqueues a send operation.\n *\n * @param {Array} params Send operation parameters.\n * @private\n */\n enqueue(params) {\n this._bufferedBytes += params[3][kByteLength];\n this._queue.push(params);\n }\n\n /**\n * Sends a frame.\n *\n * @param {(Buffer | String)[]} list The frame to send\n * @param {Function} [cb] Callback\n * @private\n */\n sendFrame(list, cb) {\n if (list.length === 2) {\n this._socket.cork();\n this._socket.write(list[0]);\n this._socket.write(list[1], cb);\n this._socket.uncork();\n } else {\n this._socket.write(list[0], cb);\n }\n }\n}\n\nmodule.exports = Sender;\n\n/**\n * Calls queued callbacks with an error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error to call the callbacks with\n * @param {Function} [cb] The first callback\n * @private\n */\nfunction callCallbacks(sender, err, cb) {\n if (typeof cb === 'function') cb(err);\n\n for (let i = 0; i < sender._queue.length; i++) {\n const params = sender._queue[i];\n const callback = params[params.length - 1];\n\n if (typeof callback === 'function') callback(err);\n }\n}\n\n/**\n * Handles a `Sender` error.\n *\n * @param {Sender} sender The `Sender` instance\n * @param {Error} err The error\n * @param {Function} [cb] The first pending callback\n * @private\n */\nfunction onError(sender, err, cb) {\n callCallbacks(sender, err, cb);\n sender.onerror(err);\n}\n","'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n /**\n * Create a new `Event`.\n *\n * @param {String} type The name of the event\n * @throws {TypeError} If the `type` argument is not specified\n */\n constructor(type) {\n this[kTarget] = null;\n this[kType] = type;\n }\n\n /**\n * @type {*}\n */\n get target() {\n return this[kTarget];\n }\n\n /**\n * @type {String}\n */\n get type() {\n return this[kType];\n }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n /**\n * Create a new `CloseEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {Number} [options.code=0] The status code explaining why the\n * connection was closed\n * @param {String} [options.reason=''] A human-readable string explaining why\n * the connection was closed\n * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n * connection was cleanly closed\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kCode] = options.code === undefined ? 0 : options.code;\n this[kReason] = options.reason === undefined ? '' : options.reason;\n this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n }\n\n /**\n * @type {Number}\n */\n get code() {\n return this[kCode];\n }\n\n /**\n * @type {String}\n */\n get reason() {\n return this[kReason];\n }\n\n /**\n * @type {Boolean}\n */\n get wasClean() {\n return this[kWasClean];\n }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n /**\n * Create a new `ErrorEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.error=null] The error that generated this event\n * @param {String} [options.message=''] The error message\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kError] = options.error === undefined ? null : options.error;\n this[kMessage] = options.message === undefined ? '' : options.message;\n }\n\n /**\n * @type {*}\n */\n get error() {\n return this[kError];\n }\n\n /**\n * @type {String}\n */\n get message() {\n return this[kMessage];\n }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n /**\n * Create a new `MessageEvent`.\n *\n * @param {String} type The name of the event\n * @param {Object} [options] A dictionary object that allows for setting\n * attributes via object members of the same name\n * @param {*} [options.data=null] The message content\n */\n constructor(type, options = {}) {\n super(type);\n\n this[kData] = options.data === undefined ? null : options.data;\n }\n\n /**\n * @type {*}\n */\n get data() {\n return this[kData];\n }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n /**\n * Register an event listener.\n *\n * @param {String} type A string representing the event type to listen for\n * @param {(Function|Object)} handler The listener to add\n * @param {Object} [options] An options object specifies characteristics about\n * the event listener\n * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n * listener should be invoked at most once after being added. If `true`,\n * the listener would be automatically removed when invoked.\n * @public\n */\n addEventListener(type, handler, options = {}) {\n for (const listener of this.listeners(type)) {\n if (\n !options[kForOnEventAttribute] &&\n listener[kListener] === handler &&\n !listener[kForOnEventAttribute]\n ) {\n return;\n }\n }\n\n let wrapper;\n\n if (type === 'message') {\n wrapper = function onMessage(data, isBinary) {\n const event = new MessageEvent('message', {\n data: isBinary ? data : data.toString()\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'close') {\n wrapper = function onClose(code, message) {\n const event = new CloseEvent('close', {\n code,\n reason: message.toString(),\n wasClean: this._closeFrameReceived && this._closeFrameSent\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'error') {\n wrapper = function onError(error) {\n const event = new ErrorEvent('error', {\n error,\n message: error.message\n });\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else if (type === 'open') {\n wrapper = function onOpen() {\n const event = new Event('open');\n\n event[kTarget] = this;\n callListener(handler, this, event);\n };\n } else {\n return;\n }\n\n wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n wrapper[kListener] = handler;\n\n if (options.once) {\n this.once(type, wrapper);\n } else {\n this.on(type, wrapper);\n }\n },\n\n /**\n * Remove an event listener.\n *\n * @param {String} type A string representing the event type to remove\n * @param {(Function|Object)} handler The listener to remove\n * @public\n */\n removeEventListener(type, handler) {\n for (const listener of this.listeners(type)) {\n if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n this.removeListener(type, listener);\n break;\n }\n }\n }\n};\n\nmodule.exports = {\n CloseEvent,\n ErrorEvent,\n Event,\n EventTarget,\n MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n if (typeof listener === 'object' && listener.handleEvent) {\n listener.handleEvent.call(listener, event);\n } else {\n listener.call(thisArg, event);\n }\n}\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n * parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n if (dest[name] === undefined) dest[name] = [elem];\n else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n const offers = Object.create(null);\n let params = Object.create(null);\n let mustUnescape = false;\n let isEscaping = false;\n let inQuotes = false;\n let extensionName;\n let paramName;\n let start = -1;\n let code = -1;\n let end = -1;\n let i = 0;\n\n for (; i < header.length; i++) {\n code = header.charCodeAt(i);\n\n if (extensionName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n const name = header.slice(start, end);\n if (code === 0x2c) {\n push(offers, name, params);\n params = Object.create(null);\n } else {\n extensionName = name;\n }\n\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (paramName === undefined) {\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x20 || code === 0x09) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n push(params, header.slice(start, end), true);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n start = end = -1;\n } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n paramName = header.slice(start, i);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else {\n //\n // The value of a quoted-string after unescaping must conform to the\n // token ABNF, so only token characters are valid.\n // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n //\n if (isEscaping) {\n if (tokenChars[code] !== 1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n if (start === -1) start = i;\n else if (!mustUnescape) mustUnescape = true;\n isEscaping = false;\n } else if (inQuotes) {\n if (tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (code === 0x22 /* '\"' */ && start !== -1) {\n inQuotes = false;\n end = i;\n } else if (code === 0x5c /* '\\' */) {\n isEscaping = true;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n inQuotes = true;\n } else if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n if (end === -1) end = i;\n } else if (code === 0x3b || code === 0x2c) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n let value = header.slice(start, end);\n if (mustUnescape) {\n value = value.replace(/\\\\/g, '');\n mustUnescape = false;\n }\n push(params, paramName, value);\n if (code === 0x2c) {\n push(offers, extensionName, params);\n params = Object.create(null);\n extensionName = undefined;\n }\n\n paramName = undefined;\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n }\n\n if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n if (end === -1) end = i;\n const token = header.slice(start, end);\n if (extensionName === undefined) {\n push(offers, token, params);\n } else {\n if (paramName === undefined) {\n push(params, token, true);\n } else if (mustUnescape) {\n push(params, paramName, token.replace(/\\\\/g, ''));\n } else {\n push(params, paramName, token);\n }\n push(offers, extensionName, params);\n }\n\n return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n return Object.keys(extensions)\n .map((extension) => {\n let configurations = extensions[extension];\n if (!Array.isArray(configurations)) configurations = [configurations];\n return configurations\n .map((params) => {\n return [extension]\n .concat(\n Object.keys(params).map((k) => {\n let values = params[k];\n if (!Array.isArray(values)) values = [values];\n return values\n .map((v) => (v === true ? k : `${k}=${v}`))\n .join('; ');\n })\n )\n .join('; ');\n })\n .join(', ');\n })\n .join(', ');\n}\n\nmodule.exports = { format, parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst { isBlob } = require('./validation');\n\nconst {\n BINARY_TYPES,\n CLOSE_TIMEOUT,\n EMPTY_BUFFER,\n GUID,\n kForOnEventAttribute,\n kListener,\n kStatusCode,\n kWebSocket,\n NOOP\n} = require('./constants');\nconst {\n EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n /**\n * Create a new `WebSocket`.\n *\n * @param {(String|URL)} address The URL to which to connect\n * @param {(String|String[])} [protocols] The subprotocols\n * @param {Object} [options] Connection options\n */\n constructor(address, protocols, options) {\n super();\n\n this._binaryType = BINARY_TYPES[0];\n this._closeCode = 1006;\n this._closeFrameReceived = false;\n this._closeFrameSent = false;\n this._closeMessage = EMPTY_BUFFER;\n this._closeTimer = null;\n this._errorEmitted = false;\n this._extensions = {};\n this._paused = false;\n this._protocol = '';\n this._readyState = WebSocket.CONNECTING;\n this._receiver = null;\n this._sender = null;\n this._socket = null;\n\n if (address !== null) {\n this._bufferedAmount = 0;\n this._isServer = false;\n this._redirects = 0;\n\n if (protocols === undefined) {\n if (!options || options.protocols === undefined) {\n protocols = [];\n } else if (Array.isArray(options.protocols)) {\n protocols = options.protocols;\n } else {\n protocols = [options.protocols];\n }\n } else if (!Array.isArray(protocols)) {\n if (typeof protocols === 'object' && protocols !== null) {\n options = protocols;\n\n if (options.protocols === undefined) {\n protocols = [];\n } else if (Array.isArray(options.protocols)) {\n protocols = options.protocols;\n } else {\n protocols = [options.protocols];\n }\n } else {\n protocols = [protocols];\n }\n }\n\n initAsClient(this, address, protocols, options);\n } else {\n this._autoPong = options.autoPong;\n this._closeTimeout = options.closeTimeout;\n this._isServer = true;\n }\n }\n\n /**\n * For historical reasons, the custom \"nodebuffer\" type is used by the default\n * instead of \"blob\".\n *\n * @type {String}\n */\n get binaryType() {\n return this._binaryType;\n }\n\n set binaryType(type) {\n if (!BINARY_TYPES.includes(type)) return;\n\n this._binaryType = type;\n\n //\n // Allow to change `binaryType` on the fly.\n //\n if (this._receiver) this._receiver._binaryType = type;\n }\n\n /**\n * @type {Number}\n */\n get bufferedAmount() {\n if (!this._socket) return this._bufferedAmount;\n\n return this._socket._writableState.length + this._sender._bufferedBytes;\n }\n\n /**\n * @type {String}\n */\n get extensions() {\n return Object.keys(this._extensions).join();\n }\n\n /**\n * @type {Boolean}\n */\n get isPaused() {\n return this._paused;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onclose() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onerror() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onopen() {\n return null;\n }\n\n /**\n * @type {Function}\n */\n /* istanbul ignore next */\n get onmessage() {\n return null;\n }\n\n /**\n * @type {String}\n */\n get protocol() {\n return this._protocol;\n }\n\n /**\n * @type {Number}\n */\n get readyState() {\n return this._readyState;\n }\n\n /**\n * @type {String}\n */\n get url() {\n return this._url;\n }\n\n /**\n * Set up the socket and the internal resources.\n *\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Object} options Options object\n * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.maxBufferedChunks=0] The maximum number of\n * buffered data chunks\n * @param {Number} [options.maxFragments=0] The maximum number of message\n * fragments\n * @param {Number} [options.maxPayload=0] The maximum allowed message size\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\n setSocket(socket, head, options) {\n const receiver = new Receiver({\n allowSynchronousEvents: options.allowSynchronousEvents,\n binaryType: this.binaryType,\n extensions: this._extensions,\n isServer: this._isServer,\n maxBufferedChunks: options.maxBufferedChunks,\n maxFragments: options.maxFragments,\n maxPayload: options.maxPayload,\n skipUTF8Validation: options.skipUTF8Validation\n });\n\n const sender = new Sender(socket, this._extensions, options.generateMask);\n\n this._receiver = receiver;\n this._sender = sender;\n this._socket = socket;\n\n receiver[kWebSocket] = this;\n sender[kWebSocket] = this;\n socket[kWebSocket] = this;\n\n receiver.on('conclude', receiverOnConclude);\n receiver.on('drain', receiverOnDrain);\n receiver.on('error', receiverOnError);\n receiver.on('message', receiverOnMessage);\n receiver.on('ping', receiverOnPing);\n receiver.on('pong', receiverOnPong);\n\n sender.onerror = senderOnError;\n\n //\n // These methods may not be available if `socket` is just a `Duplex`.\n //\n if (socket.setTimeout) socket.setTimeout(0);\n if (socket.setNoDelay) socket.setNoDelay();\n\n if (head.length > 0) socket.unshift(head);\n\n socket.on('close', socketOnClose);\n socket.on('data', socketOnData);\n socket.on('end', socketOnEnd);\n socket.on('error', socketOnError);\n\n this._readyState = WebSocket.OPEN;\n this.emit('open');\n }\n\n /**\n * Emit the `'close'` event.\n *\n * @private\n */\n emitClose() {\n if (!this._socket) {\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n return;\n }\n\n if (this._extensions[PerMessageDeflate.extensionName]) {\n this._extensions[PerMessageDeflate.extensionName].cleanup();\n }\n\n this._receiver.removeAllListeners();\n this._readyState = WebSocket.CLOSED;\n this.emit('close', this._closeCode, this._closeMessage);\n }\n\n /**\n * Start a closing handshake.\n *\n * +----------+ +-----------+ +----------+\n * - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n * | +----------+ +-----------+ +----------+ |\n * +----------+ +-----------+ |\n * CLOSING |ws.close()|<--|close frame|<--+-----+ CLOSING\n * +----------+ +-----------+ |\n * | | | +---+ |\n * +------------------------+-->|fin| - - - -\n * | +---+ | +---+\n * - - - - -|fin|<---------------------+\n * +---+\n *\n * @param {Number} [code] Status code explaining why the connection is closing\n * @param {(String|Buffer)} [data] The reason why the connection is\n * closing\n * @public\n */\n close(code, data) {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this.readyState === WebSocket.CLOSING) {\n if (\n this._closeFrameSent &&\n (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n ) {\n this._socket.end();\n }\n\n return;\n }\n\n this._sender.close(code, data, !this._isServer, (err) => {\n //\n // This error is handled by the `'error'` listener on the socket. We only\n // want to know if the close frame has been sent here.\n //\n if (err) return;\n\n this._closeFrameSent = true;\n\n if (\n this._closeFrameReceived ||\n this._receiver._writableState.errorEmitted\n ) {\n this._socket.end();\n }\n });\n\n this._readyState = WebSocket.CLOSING;\n setCloseTimer(this);\n }\n\n /**\n * Pause the socket.\n *\n * @public\n */\n pause() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = true;\n this._socket.pause();\n }\n\n /**\n * Send a ping.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the ping is sent\n * @public\n */\n ping(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Send a pong.\n *\n * @param {*} [data] The data to send\n * @param {Boolean} [mask] Indicates whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when the pong is sent\n * @public\n */\n pong(data, mask, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof data === 'function') {\n cb = data;\n data = mask = undefined;\n } else if (typeof mask === 'function') {\n cb = mask;\n mask = undefined;\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n if (mask === undefined) mask = !this._isServer;\n this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n }\n\n /**\n * Resume the socket.\n *\n * @public\n */\n resume() {\n if (\n this.readyState === WebSocket.CONNECTING ||\n this.readyState === WebSocket.CLOSED\n ) {\n return;\n }\n\n this._paused = false;\n if (!this._receiver._writableState.needDrain) this._socket.resume();\n }\n\n /**\n * Send a data message.\n *\n * @param {*} data The message to send\n * @param {Object} [options] Options object\n * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n * text\n * @param {Boolean} [options.compress] Specifies whether or not to compress\n * `data`\n * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n * last one\n * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n * @param {Function} [cb] Callback which is executed when data is written out\n * @public\n */\n send(data, options, cb) {\n if (this.readyState === WebSocket.CONNECTING) {\n throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n }\n\n if (typeof options === 'function') {\n cb = options;\n options = {};\n }\n\n if (typeof data === 'number') data = data.toString();\n\n if (this.readyState !== WebSocket.OPEN) {\n sendAfterClose(this, data, cb);\n return;\n }\n\n const opts = {\n binary: typeof data !== 'string',\n mask: !this._isServer,\n compress: true,\n fin: true,\n ...options\n };\n\n if (!this._extensions[PerMessageDeflate.extensionName]) {\n opts.compress = false;\n }\n\n this._sender.send(data || EMPTY_BUFFER, opts, cb);\n }\n\n /**\n * Forcibly close the connection.\n *\n * @public\n */\n terminate() {\n if (this.readyState === WebSocket.CLOSED) return;\n if (this.readyState === WebSocket.CONNECTING) {\n const msg = 'WebSocket was closed before the connection was established';\n abortHandshake(this, this._req, msg);\n return;\n }\n\n if (this._socket) {\n this._readyState = WebSocket.CLOSING;\n this._socket.destroy();\n }\n }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n enumerable: true,\n value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n enumerable: true,\n value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n enumerable: true,\n value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n enumerable: true,\n value: readyStates.indexOf('CLOSED')\n});\n\n[\n 'binaryType',\n 'bufferedAmount',\n 'extensions',\n 'isPaused',\n 'protocol',\n 'readyState',\n 'url'\n].forEach((property) => {\n Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n Object.defineProperty(WebSocket.prototype, `on${method}`, {\n enumerable: true,\n get() {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) return listener[kListener];\n }\n\n return null;\n },\n set(handler) {\n for (const listener of this.listeners(method)) {\n if (listener[kForOnEventAttribute]) {\n this.removeListener(method, listener);\n break;\n }\n }\n\n if (typeof handler !== 'function') return;\n\n this.addEventListener(method, handler, {\n [kForOnEventAttribute]: true\n });\n }\n });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n * of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n * times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to wait\n * for the closing handshake to finish after `websocket.close()` is called\n * @param {Function} [options.finishRequest] A function which can be used to\n * customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n * redirects\n * @param {Function} [options.generateMask] The function used to generate the\n * masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n * handshake request\n * @param {Number} [options.maxBufferedChunks=262144] The maximum number of\n * buffered data chunks\n * @param {Number} [options.maxFragments=16384] The maximum number of message\n * fragments\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n * allowed\n * @param {String} [options.origin] Value of the `Origin` or\n * `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n * permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n * `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n const opts = {\n allowSynchronousEvents: true,\n autoPong: true,\n closeTimeout: CLOSE_TIMEOUT,\n protocolVersion: protocolVersions[1],\n maxBufferedChunks: 256 * 1024,\n maxFragments: 16 * 1024,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: true,\n followRedirects: false,\n maxRedirects: 10,\n ...options,\n socketPath: undefined,\n hostname: undefined,\n protocol: undefined,\n protocols: undefined,\n timeout: undefined,\n method: 'GET',\n host: undefined,\n path: undefined,\n port: undefined\n };\n\n websocket._autoPong = opts.autoPong;\n websocket._closeTimeout = opts.closeTimeout;\n\n if (!protocolVersions.includes(opts.protocolVersion)) {\n throw new RangeError(\n `Unsupported protocol version: ${opts.protocolVersion} ` +\n `(supported versions: ${protocolVersions.join(', ')})`\n );\n }\n\n let parsedUrl;\n\n if (address instanceof URL) {\n parsedUrl = address;\n } else {\n try {\n parsedUrl = new URL(address);\n } catch {\n throw new SyntaxError(`Invalid URL: ${address}`);\n }\n }\n\n if (parsedUrl.protocol === 'http:') {\n parsedUrl.protocol = 'ws:';\n } else if (parsedUrl.protocol === 'https:') {\n parsedUrl.protocol = 'wss:';\n }\n\n websocket._url = parsedUrl.href;\n\n const isSecure = parsedUrl.protocol === 'wss:';\n const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n let invalidUrlMessage;\n\n if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n invalidUrlMessage =\n 'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n '\"http:\", \"https:\", or \"ws+unix:\"';\n } else if (isIpcUrl && !parsedUrl.pathname) {\n invalidUrlMessage = \"The URL's pathname is empty\";\n } else if (parsedUrl.hash) {\n invalidUrlMessage = 'The URL contains a fragment identifier';\n }\n\n if (invalidUrlMessage) {\n const err = new SyntaxError(invalidUrlMessage);\n\n if (websocket._redirects === 0) {\n throw err;\n } else {\n emitErrorAndClose(websocket, err);\n return;\n }\n }\n\n const defaultPort = isSecure ? 443 : 80;\n const key = randomBytes(16).toString('base64');\n const request = isSecure ? https.request : http.request;\n const protocolSet = new Set();\n let perMessageDeflate;\n\n opts.createConnection =\n opts.createConnection || (isSecure ? tlsConnect : netConnect);\n opts.defaultPort = opts.defaultPort || defaultPort;\n opts.port = parsedUrl.port || defaultPort;\n opts.host = parsedUrl.hostname.startsWith('[')\n ? parsedUrl.hostname.slice(1, -1)\n : parsedUrl.hostname;\n opts.headers = {\n ...opts.headers,\n 'Sec-WebSocket-Version': opts.protocolVersion,\n 'Sec-WebSocket-Key': key,\n Connection: 'Upgrade',\n Upgrade: 'websocket'\n };\n opts.path = parsedUrl.pathname + parsedUrl.search;\n opts.timeout = opts.handshakeTimeout;\n\n if (opts.perMessageDeflate) {\n perMessageDeflate = new PerMessageDeflate({\n ...opts.perMessageDeflate,\n isServer: false,\n maxPayload: opts.maxPayload\n });\n opts.headers['Sec-WebSocket-Extensions'] = format({\n [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n });\n }\n if (protocols.length) {\n for (const protocol of protocols) {\n if (\n typeof protocol !== 'string' ||\n !subprotocolRegex.test(protocol) ||\n protocolSet.has(protocol)\n ) {\n throw new SyntaxError(\n 'An invalid or duplicated subprotocol was specified'\n );\n }\n\n protocolSet.add(protocol);\n }\n\n opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n }\n if (opts.origin) {\n if (opts.protocolVersion < 13) {\n opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n } else {\n opts.headers.Origin = opts.origin;\n }\n }\n if (parsedUrl.username || parsedUrl.password) {\n opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n }\n\n if (isIpcUrl) {\n const i = opts.path.indexOf(':');\n\n if (i === -1) {\n opts.socketPath = opts.path;\n opts.path = '';\n } else {\n opts.socketPath = opts.path.slice(0, i);\n opts.path = opts.path.slice(i + 1);\n }\n }\n\n let req;\n\n if (opts.followRedirects) {\n if (websocket._redirects === 0) {\n websocket._originalIpc = isIpcUrl;\n websocket._originalSecure = isSecure;\n websocket._originalHostOrSocketPath = isIpcUrl\n ? opts.socketPath\n : parsedUrl.host;\n\n const headers = options && options.headers;\n\n //\n // Shallow copy the user provided options so that headers can be changed\n // without mutating the original object.\n //\n options = { ...options, headers: {} };\n\n if (headers) {\n for (const [key, value] of Object.entries(headers)) {\n options.headers[key.toLowerCase()] = value;\n }\n }\n } else if (websocket.listenerCount('redirect') === 0) {\n const isSameHost = isIpcUrl\n ? websocket._originalIpc\n ? opts.socketPath === websocket._originalHostOrSocketPath\n : false\n : websocket._originalIpc\n ? false\n : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n //\n // Match curl 7.77.0 behavior and drop the following headers. These\n // headers are also dropped when following a redirect to a subdomain.\n //\n delete opts.headers.authorization;\n delete opts.headers.cookie;\n\n if (!isSameHost) delete opts.headers.host;\n\n opts.auth = undefined;\n }\n }\n\n //\n // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n // If the `Authorization` header is set, then there is nothing to do as it\n // will take precedence.\n //\n if (opts.auth && !options.headers.authorization) {\n options.headers.authorization =\n 'Basic ' + Buffer.from(opts.auth).toString('base64');\n }\n\n req = websocket._req = request(opts);\n\n if (websocket._redirects) {\n //\n // Unlike what is done for the `'upgrade'` event, no early exit is\n // triggered here if the user calls `websocket.close()` or\n // `websocket.terminate()` from a listener of the `'redirect'` event. This\n // is because the user can also call `request.destroy()` with an error\n // before calling `websocket.close()` or `websocket.terminate()` and this\n // would result in an error being emitted on the `request` object with no\n // `'error'` event listeners attached.\n //\n websocket.emit('redirect', websocket.url, req);\n }\n } else {\n req = websocket._req = request(opts);\n }\n\n if (opts.timeout) {\n req.on('timeout', () => {\n abortHandshake(websocket, req, 'Opening handshake has timed out');\n });\n }\n\n req.on('error', (err) => {\n if (req === null || req[kAborted]) return;\n\n req = websocket._req = null;\n emitErrorAndClose(websocket, err);\n });\n\n req.on('response', (res) => {\n const location = res.headers.location;\n const statusCode = res.statusCode;\n\n if (\n location &&\n opts.followRedirects &&\n statusCode >= 300 &&\n statusCode < 400\n ) {\n if (++websocket._redirects > opts.maxRedirects) {\n abortHandshake(websocket, req, 'Maximum redirects exceeded');\n return;\n }\n\n req.abort();\n\n let addr;\n\n try {\n addr = new URL(location, address);\n } catch (e) {\n const err = new SyntaxError(`Invalid URL: ${location}`);\n emitErrorAndClose(websocket, err);\n return;\n }\n\n initAsClient(websocket, addr, protocols, options);\n } else if (!websocket.emit('unexpected-response', req, res)) {\n abortHandshake(\n websocket,\n req,\n `Unexpected server response: ${res.statusCode}`\n );\n }\n });\n\n req.on('upgrade', (res, socket, head) => {\n websocket.emit('upgrade', res);\n\n //\n // The user may have closed the connection from a listener of the\n // `'upgrade'` event.\n //\n if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n req = websocket._req = null;\n\n const upgrade = res.headers.upgrade;\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n abortHandshake(websocket, socket, 'Invalid Upgrade header');\n return;\n }\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n if (res.headers['sec-websocket-accept'] !== digest) {\n abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n return;\n }\n\n const serverProt = res.headers['sec-websocket-protocol'];\n let protError;\n\n if (serverProt !== undefined) {\n if (!protocolSet.size) {\n protError = 'Server sent a subprotocol but none was requested';\n } else if (!protocolSet.has(serverProt)) {\n protError = 'Server sent an invalid subprotocol';\n }\n } else if (protocolSet.size) {\n protError = 'Server sent no subprotocol';\n }\n\n if (protError) {\n abortHandshake(websocket, socket, protError);\n return;\n }\n\n if (serverProt) websocket._protocol = serverProt;\n\n const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n if (secWebSocketExtensions !== undefined) {\n if (!perMessageDeflate) {\n const message =\n 'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n 'was requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n let extensions;\n\n try {\n extensions = parse(secWebSocketExtensions);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n const extensionNames = Object.keys(extensions);\n\n if (\n extensionNames.length !== 1 ||\n extensionNames[0] !== PerMessageDeflate.extensionName\n ) {\n const message = 'Server indicated an extension that was not requested';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n try {\n perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Extensions header';\n abortHandshake(websocket, socket, message);\n return;\n }\n\n websocket._extensions[PerMessageDeflate.extensionName] =\n perMessageDeflate;\n }\n\n websocket.setSocket(socket, head, {\n allowSynchronousEvents: opts.allowSynchronousEvents,\n generateMask: opts.generateMask,\n maxBufferedChunks: opts.maxBufferedChunks,\n maxFragments: opts.maxFragments,\n maxPayload: opts.maxPayload,\n skipUTF8Validation: opts.skipUTF8Validation\n });\n });\n\n if (opts.finishRequest) {\n opts.finishRequest(req, websocket);\n } else {\n req.end();\n }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n websocket._readyState = WebSocket.CLOSING;\n //\n // The following assignment is practically useless and is done only for\n // consistency.\n //\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n options.path = options.socketPath;\n return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n options.path = undefined;\n\n if (!options.servername && options.servername !== '') {\n options.servername = net.isIP(options.host) ? '' : options.host;\n }\n\n return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n * abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n websocket._readyState = WebSocket.CLOSING;\n\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshake);\n\n if (stream.setHeader) {\n stream[kAborted] = true;\n stream.abort();\n\n if (stream.socket && !stream.socket.destroyed) {\n //\n // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n // called after the request completed. See\n // https://github.com/websockets/ws/issues/1869.\n //\n stream.socket.destroy();\n }\n\n process.nextTick(emitErrorAndClose, websocket, err);\n } else {\n stream.destroy(err);\n stream.once('error', websocket.emit.bind(websocket, 'error'));\n stream.once('close', websocket.emitClose.bind(websocket));\n }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n if (data) {\n const length = isBlob(data) ? data.size : toBuffer(data).length;\n\n //\n // The `_bufferedAmount` property is used only when the peer is a client and\n // the opening handshake fails. Under these circumstances, in fact, the\n // `setSocket()` method is not called, so the `_socket` and `_sender`\n // properties are set to `null`.\n //\n if (websocket._socket) websocket._sender._bufferedBytes += length;\n else websocket._bufferedAmount += length;\n }\n\n if (cb) {\n const err = new Error(\n `WebSocket is not open: readyState ${websocket.readyState} ` +\n `(${readyStates[websocket.readyState]})`\n );\n process.nextTick(cb, err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n const websocket = this[kWebSocket];\n\n websocket._closeFrameReceived = true;\n websocket._closeMessage = reason;\n websocket._closeCode = code;\n\n if (websocket._socket[kWebSocket] === undefined) return;\n\n websocket._socket.removeListener('data', socketOnData);\n process.nextTick(resume, websocket._socket);\n\n if (code === 1005) websocket.close();\n else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n const websocket = this[kWebSocket];\n\n if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket._socket[kWebSocket] !== undefined) {\n websocket._socket.removeListener('data', socketOnData);\n\n //\n // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n // https://github.com/websockets/ws/issues/1940.\n //\n process.nextTick(resume, websocket._socket);\n\n websocket.close(err[kStatusCode]);\n }\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n const websocket = this[kWebSocket];\n\n if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n stream.resume();\n}\n\n/**\n * The `Sender` error event handler.\n *\n * @param {Error} The error\n * @private\n */\nfunction senderOnError(err) {\n const websocket = this[kWebSocket];\n\n if (websocket.readyState === WebSocket.CLOSED) return;\n if (websocket.readyState === WebSocket.OPEN) {\n websocket._readyState = WebSocket.CLOSING;\n setCloseTimer(websocket);\n }\n\n //\n // `socket.end()` is used instead of `socket.destroy()` to allow the other\n // peer to finish sending queued data. There is no need to set a timer here\n // because `CLOSING` means that it is already set or not needed.\n //\n this._socket.end();\n\n if (!websocket._errorEmitted) {\n websocket._errorEmitted = true;\n websocket.emit('error', err);\n }\n}\n\n/**\n * Set a timer to destroy the underlying raw socket of a WebSocket.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @private\n */\nfunction setCloseTimer(websocket) {\n websocket._closeTimer = setTimeout(\n websocket._socket.destroy.bind(websocket._socket),\n websocket._closeTimeout\n );\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n const websocket = this[kWebSocket];\n\n this.removeListener('close', socketOnClose);\n this.removeListener('data', socketOnData);\n this.removeListener('end', socketOnEnd);\n\n websocket._readyState = WebSocket.CLOSING;\n\n //\n // The close frame might not have been received or the `'end'` event emitted,\n // for example, if the socket was destroyed due to an error. Ensure that the\n // `receiver` stream is closed after writing any remaining buffered data to\n // it. If the readable side of the socket is in flowing mode then there is no\n // buffered data as everything has been already written. If instead, the\n // socket is paused, any possible buffered data will be read as a single\n // chunk.\n //\n if (\n !this._readableState.endEmitted &&\n !websocket._closeFrameReceived &&\n !websocket._receiver._writableState.errorEmitted &&\n this._readableState.length !== 0\n ) {\n const chunk = this.read(this._readableState.length);\n\n websocket._receiver.write(chunk);\n }\n\n websocket._receiver.end();\n\n this[kWebSocket] = undefined;\n\n clearTimeout(websocket._closeTimer);\n\n if (\n websocket._receiver._writableState.finished ||\n websocket._receiver._writableState.errorEmitted\n ) {\n websocket.emitClose();\n } else {\n websocket._receiver.on('error', receiverOnFinish);\n websocket._receiver.on('finish', receiverOnFinish);\n }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n if (!this[kWebSocket]._receiver.write(chunk)) {\n this.pause();\n }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n const websocket = this[kWebSocket];\n\n websocket._readyState = WebSocket.CLOSING;\n websocket._receiver.end();\n this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n const websocket = this[kWebSocket];\n\n this.removeListener('error', socketOnError);\n this.on('error', NOOP);\n\n if (websocket) {\n websocket._readyState = WebSocket.CLOSING;\n this.destroy();\n }\n}\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^WebSocket$\" }] */\n'use strict';\n\nconst WebSocket = require('./websocket');\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n if (!this.destroyed && this._writableState.finished) {\n this.destroy();\n }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n this.removeListener('error', duplexOnError);\n this.destroy();\n if (this.listenerCount('error') === 0) {\n // Do not suppress the throwing behavior.\n this.emit('error', err);\n }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n let terminateOnDestroy = true;\n\n const duplex = new Duplex({\n ...options,\n autoDestroy: false,\n emitClose: false,\n objectMode: false,\n writableObjectMode: false\n });\n\n ws.on('message', function message(msg, isBinary) {\n const data =\n !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n if (!duplex.push(data)) ws.pause();\n });\n\n ws.once('error', function error(err) {\n if (duplex.destroyed) return;\n\n // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n //\n // - If the `'error'` event is emitted before the `'open'` event, then\n // `ws.terminate()` is a noop as no socket is assigned.\n // - Otherwise, the error is re-emitted by the listener of the `'error'`\n // event of the `Receiver` object. The listener already closes the\n // connection by calling `ws.close()`. This allows a close frame to be\n // sent to the other peer. If `ws.terminate()` is called right after this,\n // then the close frame might not be sent.\n terminateOnDestroy = false;\n duplex.destroy(err);\n });\n\n ws.once('close', function close() {\n if (duplex.destroyed) return;\n\n duplex.push(null);\n });\n\n duplex._destroy = function (err, callback) {\n if (ws.readyState === ws.CLOSED) {\n callback(err);\n process.nextTick(emitClose, duplex);\n return;\n }\n\n let called = false;\n\n ws.once('error', function error(err) {\n called = true;\n callback(err);\n });\n\n ws.once('close', function close() {\n if (!called) callback(err);\n process.nextTick(emitClose, duplex);\n });\n\n if (terminateOnDestroy) ws.terminate();\n };\n\n duplex._final = function (callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._final(callback);\n });\n return;\n }\n\n // If the value of the `_socket` property is `null` it means that `ws` is a\n // client websocket and the handshake failed. In fact, when this happens, a\n // socket is never assigned to the websocket. Wait for the `'error'` event\n // that will be emitted by the websocket.\n if (ws._socket === null) return;\n\n if (ws._socket._writableState.finished) {\n callback();\n if (duplex._readableState.endEmitted) duplex.destroy();\n } else {\n ws._socket.once('finish', function finish() {\n // `duplex` is not destroyed here because the `'end'` event will be\n // emitted on `duplex` after this `'finish'` event. The EOF signaling\n // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n callback();\n });\n ws.close();\n }\n };\n\n duplex._read = function () {\n if (ws.isPaused) ws.resume();\n };\n\n duplex._write = function (chunk, encoding, callback) {\n if (ws.readyState === ws.CONNECTING) {\n ws.once('open', function open() {\n duplex._write(chunk, encoding, callback);\n });\n return;\n }\n\n ws.send(chunk, callback);\n };\n\n duplex.on('end', duplexOnEnd);\n duplex.on('error', duplexOnError);\n return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n","'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n const protocols = new Set();\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (i; i < header.length; i++) {\n const code = header.charCodeAt(i);\n\n if (end === -1 && tokenChars[code] === 1) {\n if (start === -1) start = i;\n } else if (\n i !== 0 &&\n (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n ) {\n if (end === -1 && start !== -1) end = i;\n } else if (code === 0x2c /* ',' */) {\n if (start === -1) {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n\n if (end === -1) end = i;\n\n const protocol = header.slice(start, end);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n start = end = -1;\n } else {\n throw new SyntaxError(`Unexpected character at index ${i}`);\n }\n }\n\n if (start === -1 || end !== -1) {\n throw new SyntaxError('Unexpected end of input');\n }\n\n const protocol = header.slice(start, i);\n\n if (protocols.has(protocol)) {\n throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n }\n\n protocols.add(protocol);\n return protocols;\n}\n\nmodule.exports = { parse };\n","/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { CLOSE_TIMEOUT, GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n /**\n * Create a `WebSocketServer` instance.\n *\n * @param {Object} options Configuration options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n * any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n * multiple times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n * automatically send a pong in response to a ping\n * @param {Number} [options.backlog=511] The maximum length of the queue of\n * pending connections\n * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n * track clients\n * @param {Number} [options.closeTimeout=30000] Duration in milliseconds to\n * wait for the closing handshake to finish after `websocket.close()` is\n * called\n * @param {Function} [options.handleProtocols] A hook to handle protocols\n * @param {String} [options.host] The hostname where to bind the server\n * @param {Number} [options.maxBufferedChunks=262144] The maximum number of\n * buffered data chunks\n * @param {Number} [options.maxFragments=16384] The maximum number of message\n * fragments\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n * size\n * @param {Boolean} [options.noServer=false] Enable no server mode\n * @param {String} [options.path] Accept only connections matching this path\n * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n * permessage-deflate\n * @param {Number} [options.port] The port where to bind the server\n * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n * server to use\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n * not to skip UTF-8 validation for text and close messages\n * @param {Function} [options.verifyClient] A hook to reject connections\n * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n * class to use. It must be the `WebSocket` class or class that extends it\n * @param {Function} [callback] A listener for the `listening` event\n */\n constructor(options, callback) {\n super();\n\n options = {\n allowSynchronousEvents: true,\n autoPong: true,\n maxBufferedChunks: 256 * 1024,\n maxFragments: 16 * 1024,\n maxPayload: 100 * 1024 * 1024,\n skipUTF8Validation: false,\n perMessageDeflate: false,\n handleProtocols: null,\n clientTracking: true,\n closeTimeout: CLOSE_TIMEOUT,\n verifyClient: null,\n noServer: false,\n backlog: null, // use default (511 as implemented in net.js)\n server: null,\n host: null,\n path: null,\n port: null,\n WebSocket,\n ...options\n };\n\n if (\n (options.port == null && !options.server && !options.noServer) ||\n (options.port != null && (options.server || options.noServer)) ||\n (options.server && options.noServer)\n ) {\n throw new TypeError(\n 'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n 'must be specified'\n );\n }\n\n if (options.port != null) {\n this._server = http.createServer((req, res) => {\n const body = http.STATUS_CODES[426];\n\n res.writeHead(426, {\n 'Content-Length': body.length,\n 'Content-Type': 'text/plain'\n });\n res.end(body);\n });\n this._server.listen(\n options.port,\n options.host,\n options.backlog,\n callback\n );\n } else if (options.server) {\n this._server = options.server;\n }\n\n if (this._server) {\n const emitConnection = this.emit.bind(this, 'connection');\n\n this._removeListeners = addListeners(this._server, {\n listening: this.emit.bind(this, 'listening'),\n error: this.emit.bind(this, 'error'),\n upgrade: (req, socket, head) => {\n this.handleUpgrade(req, socket, head, emitConnection);\n }\n });\n }\n\n if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n if (options.clientTracking) {\n this.clients = new Set();\n this._shouldEmitClose = false;\n }\n\n this.options = options;\n this._state = RUNNING;\n }\n\n /**\n * Returns the bound address, the address family name, and port of the server\n * as reported by the operating system if listening on an IP socket.\n * If the server is listening on a pipe or UNIX domain socket, the name is\n * returned as a string.\n *\n * @return {(Object|String|null)} The address of the server\n * @public\n */\n address() {\n if (this.options.noServer) {\n throw new Error('The server is operating in \"noServer\" mode');\n }\n\n if (!this._server) return null;\n return this._server.address();\n }\n\n /**\n * Stop the server from accepting new connections and emit the `'close'` event\n * when all existing connections are closed.\n *\n * @param {Function} [cb] A one-time listener for the `'close'` event\n * @public\n */\n close(cb) {\n if (this._state === CLOSED) {\n if (cb) {\n this.once('close', () => {\n cb(new Error('The server is not running'));\n });\n }\n\n process.nextTick(emitClose, this);\n return;\n }\n\n if (cb) this.once('close', cb);\n\n if (this._state === CLOSING) return;\n this._state = CLOSING;\n\n if (this.options.noServer || this.options.server) {\n if (this._server) {\n this._removeListeners();\n this._removeListeners = this._server = null;\n }\n\n if (this.clients) {\n if (!this.clients.size) {\n process.nextTick(emitClose, this);\n } else {\n this._shouldEmitClose = true;\n }\n } else {\n process.nextTick(emitClose, this);\n }\n } else {\n const server = this._server;\n\n this._removeListeners();\n this._removeListeners = this._server = null;\n\n //\n // The HTTP/S server was created internally. Close it, and rely on its\n // `'close'` event.\n //\n server.close(() => {\n emitClose(this);\n });\n }\n }\n\n /**\n * See if a given request should be handled by this server instance.\n *\n * @param {http.IncomingMessage} req Request object to inspect\n * @return {Boolean} `true` if the request is valid, else `false`\n * @public\n */\n shouldHandle(req) {\n if (this.options.path) {\n const index = req.url.indexOf('?');\n const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n if (pathname !== this.options.path) return false;\n }\n\n return true;\n }\n\n /**\n * Handle a HTTP Upgrade request.\n *\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @public\n */\n handleUpgrade(req, socket, head, cb) {\n socket.on('error', socketOnError);\n\n const key = req.headers['sec-websocket-key'];\n const upgrade = req.headers.upgrade;\n const version = +req.headers['sec-websocket-version'];\n\n if (req.method !== 'GET') {\n const message = 'Invalid HTTP method';\n abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n return;\n }\n\n if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n const message = 'Invalid Upgrade header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (key === undefined || !keyRegex.test(key)) {\n const message = 'Missing or invalid Sec-WebSocket-Key header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n\n if (version !== 13 && version !== 8) {\n const message = 'Missing or invalid Sec-WebSocket-Version header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message, {\n 'Sec-WebSocket-Version': '13, 8'\n });\n return;\n }\n\n if (!this.shouldHandle(req)) {\n abortHandshake(socket, 400);\n return;\n }\n\n const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n let protocols = new Set();\n\n if (secWebSocketProtocol !== undefined) {\n try {\n protocols = subprotocol.parse(secWebSocketProtocol);\n } catch (err) {\n const message = 'Invalid Sec-WebSocket-Protocol header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n const extensions = {};\n\n if (\n this.options.perMessageDeflate &&\n secWebSocketExtensions !== undefined\n ) {\n const perMessageDeflate = new PerMessageDeflate({\n ...this.options.perMessageDeflate,\n isServer: true,\n maxPayload: this.options.maxPayload\n });\n\n try {\n const offers = extension.parse(secWebSocketExtensions);\n\n if (offers[PerMessageDeflate.extensionName]) {\n perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n }\n } catch (err) {\n const message =\n 'Invalid or unacceptable Sec-WebSocket-Extensions header';\n abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n return;\n }\n }\n\n //\n // Optionally call external client verification handler.\n //\n if (this.options.verifyClient) {\n const info = {\n origin:\n req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n secure: !!(req.socket.authorized || req.socket.encrypted),\n req\n };\n\n if (this.options.verifyClient.length === 2) {\n this.options.verifyClient(info, (verified, code, message, headers) => {\n if (!verified) {\n return abortHandshake(socket, code || 401, message, headers);\n }\n\n this.completeUpgrade(\n extensions,\n key,\n protocols,\n req,\n socket,\n head,\n cb\n );\n });\n return;\n }\n\n if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n }\n\n this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n }\n\n /**\n * Upgrade the connection to WebSocket.\n *\n * @param {Object} extensions The accepted extensions\n * @param {String} key The value of the `Sec-WebSocket-Key` header\n * @param {Set} protocols The subprotocols\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The network socket between the server and client\n * @param {Buffer} head The first packet of the upgraded stream\n * @param {Function} cb Callback\n * @throws {Error} If called more than once with the same socket\n * @private\n */\n completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n //\n // Destroy the socket if the client has already sent a FIN packet.\n //\n if (!socket.readable || !socket.writable) return socket.destroy();\n\n if (socket[kWebSocket]) {\n throw new Error(\n 'server.handleUpgrade() was called more than once with the same ' +\n 'socket, possibly due to a misconfiguration'\n );\n }\n\n if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n const digest = createHash('sha1')\n .update(key + GUID)\n .digest('base64');\n\n const headers = [\n 'HTTP/1.1 101 Switching Protocols',\n 'Upgrade: websocket',\n 'Connection: Upgrade',\n `Sec-WebSocket-Accept: ${digest}`\n ];\n\n const ws = new this.options.WebSocket(null, undefined, this.options);\n\n if (protocols.size) {\n //\n // Optionally call external protocol selection handler.\n //\n const protocol = this.options.handleProtocols\n ? this.options.handleProtocols(protocols, req)\n : protocols.values().next().value;\n\n if (protocol) {\n headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n ws._protocol = protocol;\n }\n }\n\n if (extensions[PerMessageDeflate.extensionName]) {\n const params = extensions[PerMessageDeflate.extensionName].params;\n const value = extension.format({\n [PerMessageDeflate.extensionName]: [params]\n });\n headers.push(`Sec-WebSocket-Extensions: ${value}`);\n ws._extensions = extensions;\n }\n\n //\n // Allow external modification/inspection of handshake headers.\n //\n this.emit('headers', headers, req);\n\n socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n socket.removeListener('error', socketOnError);\n\n ws.setSocket(socket, head, {\n allowSynchronousEvents: this.options.allowSynchronousEvents,\n maxBufferedChunks: this.options.maxBufferedChunks,\n maxFragments: this.options.maxFragments,\n maxPayload: this.options.maxPayload,\n skipUTF8Validation: this.options.skipUTF8Validation\n });\n\n if (this.clients) {\n this.clients.add(ws);\n ws.on('close', () => {\n this.clients.delete(ws);\n\n if (this._shouldEmitClose && !this.clients.size) {\n process.nextTick(emitClose, this);\n }\n });\n }\n\n cb(ws, req);\n }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n * called\n * @private\n */\nfunction addListeners(server, map) {\n for (const event of Object.keys(map)) server.on(event, map[event]);\n\n return function removeListeners() {\n for (const event of Object.keys(map)) {\n server.removeListener(event, map[event]);\n }\n };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n server._state = CLOSED;\n server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n //\n // The socket is writable unless the user destroyed or ended it before calling\n // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n // error. Handling this does not make much sense as the worst that can happen\n // is that some of the data written by the user might be discarded due to the\n // call to `socket.end()` below, which triggers an `'error'` event that in\n // turn causes the socket to be destroyed.\n //\n message = message || http.STATUS_CODES[code];\n headers = {\n Connection: 'close',\n 'Content-Type': 'text/html',\n 'Content-Length': Buffer.byteLength(message),\n ...headers\n };\n\n socket.once('finish', socket.destroy);\n\n socket.end(\n `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n Object.keys(headers)\n .map((h) => `${h}: ${headers[h]}`)\n .join('\\r\\n') +\n '\\r\\n\\r\\n' +\n message\n );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @param {Object} [headers] The HTTP response headers\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(\n server,\n req,\n socket,\n code,\n message,\n headers\n) {\n if (server.listenerCount('wsClientError')) {\n const err = new Error(message);\n Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n server.emit('wsClientError', err, socket, req);\n } else {\n abortHandshake(socket, code, message, headers);\n }\n}\n","import createWebSocketStream from './lib/stream.js';\nimport extension from './lib/extension.js';\nimport PerMessageDeflate from './lib/permessage-deflate.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport subprotocol from './lib/subprotocol.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport {\n createWebSocketStream,\n extension,\n PerMessageDeflate,\n Receiver,\n Sender,\n subprotocol,\n WebSocket,\n WebSocketServer\n};\n\nexport default WebSocket;\n","import type {\n AgentEvent,\n ModelInfo,\n ProviderCapabilities,\n ProviderInfo,\n ProviderStatus,\n ReasoningEffort,\n RuntimeResponse,\n SessionOptions,\n UserInput,\n} from \"@codeden/contracts\";\nimport type { UtilityModel } from \"./utility\";\n\n/**\n * A provider adapter (§7.1), loaded by the runner. One instance per provider; it opens any\n * number of sessions. Adapters translate provider-native protocols into `AgentEvent`s and\n * never leak provider-specific shapes.\n */\nexport interface ProviderAdapter {\n /** `claude`, `codex`, `fake`, ... */\n readonly id: string;\n readonly displayName: string;\n /** Installed? Version? Logged in? (§14). Must not throw; report problems as issues. */\n detect(): Promise<ProviderStatus>;\n /** Honest capability flags (Principle 5). */\n capabilities(): ProviderCapabilities;\n /** Models the provider offers. */\n models(): ModelInfo[];\n openSession(opts: SessionOptions): Promise<ProviderSession>;\n /** One-shot, tool-less model calls for side jobs (§7.4), when the provider supports them. */\n utilityModel?(): UtilityModel;\n}\n\n/** A live provider session. */\nexport interface ProviderSession {\n /** Normalized event stream. Ends after `close()` or when the provider process exits. */\n readonly events: AsyncIterable<AgentEvent>;\n /** Start a turn. Rejects if a turn is already running. */\n send(input: UserInput): Promise<void>;\n /** Inject input into the running turn. Present only when `capabilities().steer`. */\n steer?(input: UserInput): Promise<void>;\n /** Stop the running turn; emits `turn.interrupted`. No-op when idle. */\n interrupt(): Promise<void>;\n /** Answer an `approval_request` or `user_question` by its `requestId`. */\n respond(requestId: string, response: RuntimeResponse): Promise<void>;\n /**\n * Change model and/or effort for the next turn (`null` = provider default). Optional:\n * without it, CodeDen applies the change by reopening the session through its resume token.\n */\n configure?(change: SessionConfigChange): Promise<void>;\n /** Close the session and end `events`. Idempotent. */\n close(): Promise<void>;\n /** Provider session/thread id for resume, once known. */\n resumeToken(): string | undefined;\n}\n\n/** A mid-session model/effort change (`session.configure`). Absent keys stay unchanged. */\nexport interface SessionConfigChange {\n model?: string | null;\n effort?: ReasoningEffort | null;\n}\n\n/** Static description of an adapter, as sent in the runner handshake. */\nexport function providerInfo(adapter: ProviderAdapter): ProviderInfo {\n return {\n id: adapter.id,\n displayName: adapter.displayName,\n capabilities: adapter.capabilities(),\n models: adapter.models(),\n };\n}\n\n/** Error thrown by sessions for invalid calls (unknown request id, turn already running). */\nexport class ProviderSessionError extends Error {\n constructor(\n readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = \"ProviderSessionError\";\n }\n}\n","import type { AgentEvent, ItemOf, RuntimeResponse } from \"@codeden/contracts\";\nimport { ProviderSessionError } from \"./adapter\";\n\n/** Where an approval or question item lives. */\nexport interface ItemCtx {\n threadId: string;\n turnId: string;\n}\n\ntype Request = ItemOf<\"approval_request\"> | ItemOf<\"user_question\">;\n\ninterface Pending {\n ctx: ItemCtx;\n item: Request;\n resolve: (response: RuntimeResponse) => void;\n}\n\n/**\n * Tracks `approval_request` / `user_question` items waiting on `ProviderSession.respond`.\n * Emits `item.started` when a request opens and `item.completed` with the decision when it is\n * answered, cancelled or aborted. Shared by all adapters.\n */\nexport class ApprovalBroker {\n private readonly pending = new Map<string, Pending>();\n\n constructor(private readonly emit: (event: AgentEvent) => void) {}\n\n get size(): number {\n return this.pending.size;\n }\n\n /** Open a request and wait for its response. Resolves `{ kind: \"cancel\" }` if aborted. */\n request(ctx: ItemCtx, item: Request, signal?: AbortSignal): Promise<RuntimeResponse> {\n return new Promise((resolve) => {\n const finish = (response: RuntimeResponse) => {\n if (!this.pending.delete(item.requestId)) return;\n signal?.removeEventListener(\"abort\", onAbort);\n this.emit({ type: \"item.completed\", ...ctx, item: completed(item, response) });\n resolve(response);\n };\n const onAbort = () => finish({ kind: \"cancel\" });\n this.pending.set(item.requestId, { ctx, item, resolve: finish });\n this.emit({ type: \"item.started\", ...ctx, item });\n if (signal?.aborted) onAbort();\n else signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n }\n\n /** Answer a pending request. Throws `unknown_request` for unknown ids. */\n respond(requestId: string, response: RuntimeResponse): void {\n const pending = this.pending.get(requestId);\n if (!pending) throw new ProviderSessionError(\"unknown_request\", `Unknown request ${requestId}`);\n pending.resolve(response);\n }\n\n has(requestId: string): boolean {\n return this.pending.has(requestId);\n }\n\n /** Cancel every pending request (interrupt, close). */\n cancelAll(): void {\n for (const pending of [...this.pending.values()]) pending.resolve({ kind: \"cancel\" });\n }\n}\n\nfunction completed(item: Request, response: RuntimeResponse): Request {\n if (item.kind === \"approval_request\") {\n if (response.kind === \"approval\") {\n return {\n ...item,\n status: response.decision === \"deny\" ? \"declined\" : \"completed\",\n decision: response.decision,\n decidedBy: \"user\",\n };\n }\n return { ...item, status: \"cancelled\" };\n }\n if (response.kind === \"answer\")\n return { ...item, status: \"completed\", answers: response.answers };\n return { ...item, status: \"cancelled\" };\n}\n","/**\n * Minimal push-based async queue: producers `push`, one consumer iterates with `for await`.\n * Used by adapters to expose `ProviderSession.events`.\n */\nexport class AsyncQueue<T> implements AsyncIterable<T> {\n private readonly buffer: T[] = [];\n private waiters: Array<(result: IteratorResult<T>) => void> = [];\n private closed = false;\n\n /** Enqueue a value. Ignored after `close()`. */\n push(value: T): void {\n if (this.closed) return;\n const waiter = this.waiters.shift();\n if (waiter) waiter({ value, done: false });\n else this.buffer.push(value);\n }\n\n /** End the stream after buffered values are consumed. */\n close(): void {\n if (this.closed) return;\n this.closed = true;\n for (const waiter of this.waiters) waiter({ value: undefined, done: true });\n this.waiters = [];\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n [Symbol.asyncIterator](): AsyncIterator<T> {\n return {\n next: () => {\n if (this.buffer.length > 0) {\n return Promise.resolve({ value: this.buffer.shift() as T, done: false });\n }\n if (this.closed) return Promise.resolve({ value: undefined, done: true });\n return new Promise((resolve) => this.waiters.push(resolve));\n },\n return: () => {\n this.close();\n return Promise.resolve({ value: undefined, done: true });\n },\n };\n }\n}\n","import { type ChildProcess, type SpawnOptions, spawn } from \"node:child_process\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * How to launch a resolved executable. On Windows, npm-style `.cmd` shims cannot be spawned\n * without a shell (Node rejects them with EINVAL), so we unwrap them to `node <script>` when\n * possible and fall back to `cmd.exe /d /s /c` otherwise.\n */\nexport type ResolvedCommand =\n | { kind: \"native\"; path: string }\n | { kind: \"node-script\"; path: string; script: string }\n | { kind: \"shell-script\"; path: string };\n\nexport interface ResolveOptions {\n /** Defaults to `process.env.PATH`. */\n pathEnv?: string;\n /** Defaults to `process.env.PATHEXT` (Windows only). */\n pathExt?: string;\n /** Defaults to `process.platform`. */\n platform?: NodeJS.Platform;\n}\n\nfunction isFile(candidate: string): boolean {\n try {\n return statSync(candidate).isFile();\n } catch {\n return false;\n }\n}\n\n/**\n * Find `name` on PATH and decide how to launch it. Returns `undefined` when not found.\n * An absolute or relative path containing a separator is resolved directly.\n */\nexport function resolveExecutable(\n name: string,\n opts: ResolveOptions = {},\n): ResolvedCommand | undefined {\n const platform = opts.platform ?? process.platform;\n const win = platform === \"win32\";\n const p = win ? path.win32 : path.posix;\n const exts = win\n ? (opts.pathExt ?? process.env.PATHEXT ?? \".COM;.EXE;.BAT;.CMD\")\n .split(\";\")\n .filter(Boolean)\n .map((e) => e.toLowerCase())\n : [\"\"];\n const hasExt = win && exts.includes(p.extname(name).toLowerCase());\n const candidatesFor = (base: string): string[] =>\n win ? (hasExt ? [base] : exts.map((e) => base + e)) : [base];\n\n const dirs = name.includes(\"/\") || name.includes(\"\\\\\") ? [\"\"] : splitPath(opts, win);\n for (const dir of dirs) {\n for (const candidate of candidatesFor(dir ? p.join(dir, name) : name)) {\n if (isFile(candidate)) return classify(candidate, win);\n }\n }\n return undefined;\n}\n\nfunction splitPath(opts: ResolveOptions, win: boolean): string[] {\n const raw = opts.pathEnv ?? process.env.PATH ?? process.env.Path ?? \"\";\n return raw\n .split(win ? \";\" : \":\")\n .map((d) => d.trim().replace(/^\"(.*)\"$/, \"$1\"))\n .filter(Boolean);\n}\n\nfunction classify(file: string, win: boolean): ResolvedCommand {\n const ext = path.extname(file).toLowerCase();\n if (win && (ext === \".cmd\" || ext === \".bat\")) {\n const script = scriptFromCmdShim(file);\n return script\n ? { kind: \"node-script\", path: file, script }\n : { kind: \"shell-script\", path: file };\n }\n if ([\".js\", \".mjs\", \".cjs\"].includes(ext))\n return { kind: \"node-script\", path: file, script: file };\n return { kind: \"native\", path: file };\n}\n\n/**\n * Extract the JavaScript entry point from an npm/pnpm/yarn `.cmd` shim, e.g.\n * `\"%dp0%\\node_modules\\@openai\\codex\\bin\\codex.js\" %*`. Returns `undefined` if the shim does\n * not point at a script that exists.\n */\nexport function scriptFromCmdShim(shimPath: string, content?: string): string | undefined {\n let text = content;\n if (text === undefined) {\n try {\n text = readFileSync(shimPath, \"utf8\");\n } catch {\n return undefined;\n }\n }\n const re = /\"%~?dp0%?\\\\?([^\"%]+?\\.[cm]?js)\"/gi;\n let last: string | undefined;\n for (const match of text.matchAll(re)) last = match[1];\n if (!last) return undefined;\n const script = path.win32.resolve(path.win32.dirname(shimPath), last);\n if (content === undefined && !existsSync(script)) return undefined;\n return script;\n}\n\n/** The `[command, args]` to pass to `spawn` for a resolved executable (never needs `shell`). */\nexport function spawnArgs(cmd: ResolvedCommand, args: readonly string[]): [string, string[]] {\n switch (cmd.kind) {\n case \"native\":\n return [cmd.path, [...args]];\n case \"node-script\":\n return [process.execPath, [cmd.script, ...args]];\n case \"shell-script\":\n return [\n process.env.ComSpec ?? \"cmd.exe\",\n [\"/d\", \"/s\", \"/c\", `\"${[cmd.path, ...args].map(quoteCmdArg).join(\" \")}\"`],\n ];\n }\n}\n\n/** Quote one argument for `cmd.exe /s /c \"...\"`. */\nexport function quoteCmdArg(arg: string): string {\n if (arg !== \"\" && !/[\\s\"&|<>^%!()]/.test(arg)) return arg;\n return `\"${arg.replace(/([\"^%!])/g, \"^$1\")}\"`;\n}\n\n/** Spawn a resolved executable. Uses `windowsVerbatimArguments` for the cmd.exe fallback. */\nexport function spawnResolved(\n cmd: ResolvedCommand,\n args: readonly string[],\n options: SpawnOptions = {},\n): ChildProcess {\n const [file, argv] = spawnArgs(cmd, args);\n return spawn(file, argv, {\n windowsHide: true,\n ...options,\n ...(cmd.kind === \"shell-script\" ? { windowsVerbatimArguments: true } : {}),\n });\n}\n\nexport interface RunResult {\n code: number | null;\n stdout: string;\n stderr: string;\n timedOut: boolean;\n /** Set when the process could not be started. */\n error?: Error;\n}\n\n/** Run a command to completion with a timeout. Never throws. */\nexport function runCommand(\n cmd: ResolvedCommand,\n args: readonly string[],\n opts: { timeoutMs?: number; cwd?: string; env?: NodeJS.ProcessEnv } = {},\n): Promise<RunResult> {\n return new Promise((resolve) => {\n let stdout = \"\";\n let stderr = \"\";\n let timedOut = false;\n let settled = false;\n const done = (result: RunResult) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n resolve(result);\n };\n let child: ChildProcess;\n try {\n child = spawnResolved(cmd, args, {\n cwd: opts.cwd,\n env: opts.env,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n } catch (error) {\n resolve({ code: null, stdout, stderr, timedOut, error: error as Error });\n return;\n }\n const timer = setTimeout(() => {\n timedOut = true;\n killTree(child);\n done({ code: null, stdout, stderr, timedOut });\n }, opts.timeoutMs ?? 15_000);\n child.stdout?.setEncoding(\"utf8\").on(\"data\", (d: string) => {\n stdout += d;\n });\n child.stderr?.setEncoding(\"utf8\").on(\"data\", (d: string) => {\n stderr += d;\n });\n child.on(\"error\", (error) => done({ code: null, stdout, stderr, timedOut, error }));\n child.on(\"close\", (code) => done({ code, stdout, stderr, timedOut }));\n });\n}\n\n/** Kill a process and its children. On Windows `taskkill /T` is the only reliable way. */\nexport function killTree(child: ChildProcess): void {\n if (child.exitCode !== null || child.pid === undefined) return;\n if (process.platform === \"win32\") {\n try {\n spawn(\"taskkill\", [\"/pid\", String(child.pid), \"/T\", \"/F\"], {\n windowsHide: true,\n stdio: \"ignore\",\n }).on(\"error\", () => child.kill());\n return;\n } catch {\n // fall through\n }\n }\n child.kill(\"SIGTERM\");\n}\n","/** Parse the first `x.y.z` in a string. */\nexport function parseVersion(text: string): string | null {\n return /(\\d+\\.\\d+\\.\\d+(?:-[\\w.]+)?)/.exec(text)?.[1] ?? null;\n}\n\n/** Compare two `x.y.z` versions numerically (prerelease tags ignored). */\nexport function compareVersions(a: string, b: string): number {\n const pa = a\n .split(/[.-]/)\n .slice(0, 3)\n .map((n) => Number.parseInt(n, 10) || 0);\n const pb = b\n .split(/[.-]/)\n .slice(0, 3)\n .map((n) => Number.parseInt(n, 10) || 0);\n for (let i = 0; i < 3; i += 1) {\n const diff = (pa[i] ?? 0) - (pb[i] ?? 0);\n if (diff !== 0) return diff;\n }\n return 0;\n}\n","import type { ProviderIssue, ProviderStatus } from \"@codeden/contracts\";\nimport { type ResolvedCommand, resolveExecutable, runCommand } from \"../util/exec\";\nimport { compareVersions, parseVersion } from \"../util/version\";\n\n/** Oldest Claude Code version the adapter is tested against (pinned SDK 0.3.318). */\nexport const CLAUDE_MIN_VERSION = \"2.1.250\";\nconst LOGIN_EXPIRY_WARNING_MS = 3 * 24 * 60 * 60 * 1000;\n\nexport interface ClaudeDetectOptions {\n executable?: ResolvedCommand;\n timeoutMs?: number;\n}\n\n/** `claude --version` + `claude auth status` (§14). Never throws. */\nexport async function detectClaude(opts: ClaudeDetectOptions = {}): Promise<ProviderStatus> {\n const checkedAt = new Date().toISOString();\n const status: ProviderStatus = {\n providerId: \"claude\",\n installed: false,\n version: null,\n executablePath: null,\n loggedIn: null,\n authMethod: null,\n account: null,\n loginExpiresAt: null,\n supported: false,\n issues: [],\n checkedAt,\n };\n const issues: ProviderIssue[] = [];\n const exe = opts.executable ?? resolveExecutable(\"claude\");\n if (!exe) {\n issues.push({\n code: \"not_installed\",\n message: \"Claude Code is not installed (no `claude` on PATH).\",\n fix: { kind: \"install\", command: \"npm install -g @anthropic-ai/claude-code\" },\n });\n return { ...status, issues };\n }\n const timeoutMs = opts.timeoutMs ?? 15_000;\n const versionRun = await runCommand(exe, [\"--version\"], { timeoutMs });\n const version = parseVersion(versionRun.stdout);\n if (versionRun.error || !version) {\n issues.push({\n code: \"detect_failed\",\n message: `Could not run \\`claude --version\\`: ${versionRun.error?.message ?? (versionRun.timedOut ? \"timed out\" : versionRun.stderr.trim() || \"no version in output\")}`,\n });\n return { ...status, executablePath: exe.path, issues };\n }\n const supported = compareVersions(version, CLAUDE_MIN_VERSION) >= 0;\n if (!supported) {\n issues.push({\n code: \"version_unsupported\",\n message: `Claude Code ${version} is older than the tested minimum ${CLAUDE_MIN_VERSION}.`,\n fix: { kind: \"upgrade\", command: \"claude update\" },\n });\n }\n const auth = parseClaudeAuthStatus(\n (await runCommand(exe, [\"auth\", \"status\"], { timeoutMs })).stdout,\n );\n if (auth.loggedIn === false) {\n issues.push({\n code: \"not_logged_in\",\n message: \"Claude Code is not logged in.\",\n fix: { kind: \"login\", command: \"claude auth login\" },\n });\n } else if (auth.loggedIn === null) {\n issues.push({ code: \"detect_failed\", message: \"Could not read `claude auth status`.\" });\n } else if (\n auth.loginExpiresAt &&\n Date.parse(auth.loginExpiresAt) - Date.now() < LOGIN_EXPIRY_WARNING_MS\n ) {\n issues.push({\n code: \"login_expiring\",\n message: `Claude Code login expires at ${auth.loginExpiresAt}.`,\n fix: { kind: \"login\", command: \"claude auth login\" },\n });\n }\n return {\n ...status,\n installed: true,\n version,\n executablePath: exe.kind === \"node-script\" ? exe.script : exe.path,\n supported,\n ...auth,\n issues,\n };\n}\n\n/** Parse `claude auth status` JSON (`loggedIn`, `authMethod`, `email`, `loginExpiresAt`). */\nexport function parseClaudeAuthStatus(\n stdout: string,\n): Pick<ProviderStatus, \"loggedIn\" | \"authMethod\" | \"account\" | \"loginExpiresAt\"> {\n const unknown = { loggedIn: null, authMethod: null, account: null, loginExpiresAt: null };\n const start = stdout.indexOf(\"{\");\n if (start < 0) return unknown;\n try {\n const json = JSON.parse(stdout.slice(start)) as Record<string, unknown>;\n const expires = typeof json.loginExpiresAt === \"string\" ? json.loginExpiresAt : null;\n return {\n loggedIn: typeof json.loggedIn === \"boolean\" ? json.loggedIn : null,\n authMethod: typeof json.authMethod === \"string\" ? json.authMethod : null,\n account: typeof json.email === \"string\" ? json.email : null,\n loginExpiresAt:\n expires && !Number.isNaN(Date.parse(expires)) ? new Date(expires).toISOString() : null,\n };\n } catch {\n return unknown;\n }\n}\n","/** The id the model pickers use for \"the provider's own default model\". */\nexport const DEFAULT_MODEL_ID = \"default\";\n\n/**\n * The model to pass to a provider, or undefined to leave it out so the provider uses its own\n * default (the user's config). `\"default\"` and empty values are never sent as model ids.\n */\nexport function explicitModel(model: string | null | undefined): string | undefined {\n const id = model?.trim();\n return id && id !== DEFAULT_MODEL_ID ? id : undefined;\n}\n","import type { JsonValue, ToolOutput } from \"@codeden/contracts\";\n\n/** Max characters of tool output kept inline in an item (§6: larger outputs are truncated). */\nexport const TOOL_OUTPUT_PREVIEW_CHARS = 16_000;\n\n/** Build a `ToolOutput` preview, truncating long text. */\nexport function toolOutput(text: string, max = TOOL_OUTPUT_PREVIEW_CHARS): ToolOutput {\n const totalBytes = Buffer.byteLength(text, \"utf8\");\n if (text.length <= max) return { text, truncated: false, totalBytes };\n return { text: `${text.slice(0, max)}\\n...`, truncated: true, totalBytes };\n}\n\n/** One-line summary for titles: first line, trimmed and shortened. */\nexport function shorten(text: string, max = 80): string {\n const line = text.trim().split(/\\r?\\n/)[0] ?? \"\";\n return line.length > max ? `${line.slice(0, max - 1)}…` : line;\n}\n\n/** Coerce an arbitrary value to JSON (drops functions/undefined, breaks cycles). */\nexport function toJson(value: unknown): JsonValue {\n try {\n return JSON.parse(JSON.stringify(value ?? null)) as JsonValue;\n } catch {\n return null;\n }\n}\n\n/** Read a string field from an untyped record. */\nexport function str(record: unknown, key: string): string | undefined {\n if (record && typeof record === \"object\") {\n const value = (record as Record<string, unknown>)[key];\n if (typeof value === \"string\") return value;\n }\n return undefined;\n}\n\n/** Read a number field from an untyped record. */\nexport function num(record: unknown, key: string): number | undefined {\n if (record && typeof record === \"object\") {\n const value = (record as Record<string, unknown>)[key];\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n }\n return undefined;\n}\n\n/** Non-negative integer or undefined (for token counts). */\nexport function count(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? Math.round(value)\n : undefined;\n}\n\n/** Unix seconds or ms to ISO-8601, or undefined. */\nexport function unixToIso(value: number | null | undefined): string | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) return undefined;\n const ms = value < 1e12 ? value * 1000 : value;\n return new Date(ms).toISOString();\n}\n","/** A one-shot request to the utility model (§7.4): no tools, no session, text in, text out. */\nexport interface OneShotRequest {\n prompt: string;\n /** Provider model id; each provider picks a small default when omitted. */\n model?: string;\n /** System prompt replacing the provider's coding-agent prompt. */\n system?: string;\n /** Default 60s. */\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\n/**\n * The utility model: small side jobs (follow-up suggestions, read-aloud summaries, session\n * titles) run through an installed provider with no tools (§7.4).\n */\nexport interface UtilityModel {\n readonly providerId: string;\n /** The model used when a request names none. */\n readonly defaultModel: string;\n runOneShot(request: OneShotRequest): Promise<string>;\n}\n\n/** Abort signal that fires on the caller's signal or after `timeoutMs`. */\nexport function oneShotSignal(request: OneShotRequest): {\n signal: AbortSignal;\n dispose: () => void;\n} {\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(new Error(\"Utility model timed out\")),\n request.timeoutMs ?? 60_000,\n );\n const onAbort = () => controller.abort(request.signal?.reason);\n request.signal?.addEventListener(\"abort\", onAbort, { once: true });\n return {\n signal: controller.signal,\n dispose: () => {\n clearTimeout(timer);\n request.signal?.removeEventListener(\"abort\", onAbort);\n },\n };\n}\n","import path from \"node:path\";\n\n/** Context for path checks: the worktree plus any extra directories the agent may use. */\nexport interface PathContext {\n /** The session's working directory (worktree). */\n cwd: string;\n /** Extra writable roots (SessionOptions.additionalDirectories). */\n extraRoots?: readonly string[];\n /** Defaults to `process.platform`; set in tests to exercise both path flavours. */\n platform?: NodeJS.Platform;\n /** Home directory used to expand `~`. Defaults to `process.env.HOME ?? USERPROFILE`. */\n home?: string;\n}\n\nfunction pathApi(ctx: PathContext): path.PlatformPath {\n return (ctx.platform ?? process.platform) === \"win32\" ? path.win32 : path.posix;\n}\n\n/** Resolve `target` (absolute, relative to cwd, or `~`-prefixed) to an absolute path. */\nexport function resolveAgainst(target: string, ctx: PathContext): string {\n const p = pathApi(ctx);\n let value = target.trim().replace(/^[\"']|[\"']$/g, \"\");\n const home = ctx.home ?? process.env.HOME ?? process.env.USERPROFILE ?? \"\";\n if (value === \"~\" || value.startsWith(\"~/\") || value.startsWith(\"~\\\\\")) {\n value = home + value.slice(1);\n }\n value = value.replace(/^\\$HOME(?=$|[\\\\/])/, home).replace(/^\\$env:USERPROFILE(?=$|[\\\\/])/i, home);\n return p.resolve(ctx.cwd, value);\n}\n\n/** True when `target` resolves inside `root` (or equals it). Case-insensitive on Windows. */\nexport function isInside(target: string, root: string, ctx: PathContext): boolean {\n const p = pathApi(ctx);\n const win = (ctx.platform ?? process.platform) === \"win32\";\n const norm = (s: string) => {\n const r = p.resolve(s);\n return win ? r.toLowerCase() : r;\n };\n const rel = p.relative(norm(root), norm(target));\n return rel === \"\" || (!rel.startsWith(\"..\") && !p.isAbsolute(rel));\n}\n\n/** True when `target` is inside the worktree or one of the extra roots. */\nexport function isInWorkspace(target: string, ctx: PathContext): boolean {\n const abs = resolveAgainst(target, ctx);\n return [ctx.cwd, ...(ctx.extraRoots ?? [])].some((root) => isInside(abs, root, ctx));\n}\n\nconst SECRET_BASENAMES = new Set([\n \".env\",\n \".npmrc\",\n \".netrc\",\n \".pypirc\",\n \".git-credentials\",\n \"id_rsa\",\n \"id_dsa\",\n \"id_ecdsa\",\n \"id_ed25519\",\n \"credentials\",\n \"credentials.json\",\n \"secrets.json\",\n \"secrets.yaml\",\n \"secrets.yml\",\n \"service-account.json\",\n]);\nconst SAFE_ENV_SUFFIXES = [\".example\", \".sample\", \".template\", \".dist\", \".defaults\"];\nconst SECRET_EXTENSIONS = [\".pem\", \".key\", \".p12\", \".pfx\", \".keystore\", \".jks\"];\n\n/** True for files that commonly hold credentials (`.env`, SSH keys, `.npmrc`, `*.pem`, ...). */\nexport function isSecretPath(target: string): boolean {\n const normalized = target\n .trim()\n .replace(/^[\"']|[\"']$/g, \"\")\n .replace(/\\\\/g, \"/\");\n const base = normalized.split(\"/\").pop()?.toLowerCase() ?? \"\";\n if (!base) return false;\n if (base === \".env\" || base.startsWith(\".env.\")) {\n return !SAFE_ENV_SUFFIXES.some((s) => base.endsWith(s));\n }\n if (base.endsWith(\".env\") && base !== \".env\") return !base.includes(\"example\");\n if (SECRET_BASENAMES.has(base)) return true;\n if (SECRET_EXTENSIONS.some((ext) => base.endsWith(ext))) return true;\n return /(^|\\/)\\.(ssh|aws|gnupg|docker)\\//i.test(normalized) && !base.endsWith(\".pub\");\n}\n","import type { ApprovalAction } from \"@codeden/contracts\";\nimport { isInWorkspace, isSecretPath, type PathContext } from \"./paths\";\n\n/**\n * Risky-action classifier for the `auto` autonomy level (§11.2). Provider-neutral: adapters\n * translate their tool calls into `classifyCommand` / `classifyWrite` / `classifyRead` /\n * `classifyFetch` calls. A risky result is turned into an approval request; everything else\n * runs freely.\n */\nexport type RiskAssessment =\n | { risky: false }\n | { risky: true; action: ApprovalAction; reason: string };\n\nexport interface RiskContext extends PathContext {\n /** Hosts the agent may fetch freely. When omitted, web fetches are not flagged. */\n allowedHosts?: readonly string[];\n}\n\nconst SAFE: RiskAssessment = { risky: false };\nconst risky = (action: ApprovalAction, reason: string): RiskAssessment => ({\n risky: true,\n action,\n reason,\n});\n\n/** Split a shell command line into simple commands (on `;`, `&&`, `||`, `|`, newlines). */\nexport function splitCommands(command: string): string[] {\n return command\n .split(/\\r?\\n|;|&&|\\|\\||\\|/)\n .map((s) => s.trim())\n .filter(Boolean);\n}\n\n/** Tokenize one simple command, honouring single and double quotes. */\nexport function tokenize(command: string): string[] {\n const tokens: string[] = [];\n const re = /\"((?:[^\"\\\\]|\\\\.)*)\"|'([^']*)'|(\\S+)/g;\n for (const m of command.matchAll(re)) tokens.push(m[1] ?? m[2] ?? m[3] ?? \"\");\n return tokens;\n}\n\n/** Strip wrappers that don't change what runs (`sudo`, `env X=1`, `command`, `exec`). */\nfunction unwrap(tokens: string[]): { tokens: string[]; elevated: boolean } {\n let elevated = false;\n let rest = tokens;\n for (;;) {\n const head = rest[0]?.toLowerCase();\n if (head === \"sudo\" || head === \"doas\" || head === \"runas\" || head === \"gsudo\") {\n elevated = true;\n rest = rest.slice(1).filter((t, i) => !(i === 0 && t.startsWith(\"-\")));\n } else if (head === \"env\" || head === \"command\" || head === \"exec\" || head === \"nohup\") {\n rest = rest.slice(1);\n } else if (head && /^[A-Za-z_][A-Za-z0-9_]*=/.test(head)) {\n rest = rest.slice(1);\n } else break;\n }\n return { tokens: rest, elevated };\n}\n\nconst binName = (token: string | undefined): string =>\n (token ?? \"\")\n .replace(/\\\\/g, \"/\")\n .split(\"/\")\n .pop()\n ?.toLowerCase()\n .replace(/\\.(exe|cmd|bat|ps1)$/, \"\") ?? \"\";\n\nconst DOWNLOADERS = /\\b(curl|wget|iwr|irm|invoke-webrequest|invoke-restmethod)\\b|downloadstring/i;\nconst SHELLS =\n /^\\s*(sudo\\s+)?(sh|bash|zsh|fish|dash|ksh|iex|invoke-expression|python3?|node|pwsh|powershell|perl|ruby)(\\s|$)/i;\n\n/** Classify a shell command (any shell: POSIX, PowerShell or cmd). */\nexport function classifyCommand(command: string, ctx: RiskContext): RiskAssessment {\n // Remote script piped into an interpreter: `curl ... | sh`, `irm ... | iex`, `iex (irm ...)`.\n const pipeline = command.split(/\\|(?!\\|)/);\n for (let i = 1; i < pipeline.length; i += 1) {\n if (DOWNLOADERS.test(pipeline[i - 1] ?? \"\") && SHELLS.test(pipeline[i] ?? \"\")) {\n return risky(\"network\", \"Pipes a downloaded script straight into a shell\");\n }\n }\n if (\n /\\b(iex|invoke-expression)\\b[^|]*\\b(irm|iwr|invoke-restmethod|invoke-webrequest|downloadstring)\\b/i.test(\n command,\n )\n ) {\n return risky(\"network\", \"Executes a downloaded script\");\n }\n if (\n /\\b(bash|sh|zsh)\\s+(-c\\s+)?[\"']?\\$\\(\\s*(curl|wget)\\b/i.test(command) ||\n /<\\(\\s*(curl|wget)\\b/i.test(command)\n ) {\n return risky(\"network\", \"Executes a downloaded script\");\n }\n\n for (const simple of splitCommands(command)) {\n const result = classifySimple(simple, ctx);\n if (result.risky) return result;\n }\n return SAFE;\n}\n\nfunction classifySimple(simple: string, ctx: RiskContext): RiskAssessment {\n const { tokens, elevated } = unwrap(tokenize(simple));\n if (elevated) return risky(\"other\", \"Runs a command with elevated privileges\");\n const bin = binName(tokens[0]);\n const args = tokens.slice(1);\n const lower = args.map((a) => a.toLowerCase());\n\n if (bin === \"git\") return classifyGit(lower);\n\n const install = classifyInstall(bin, lower);\n if (install.risky) return install;\n\n if ([\"rm\", \"rmdir\", \"del\", \"erase\", \"rd\", \"remove-item\", \"ri\", \"unlink\", \"shred\"].includes(bin)) {\n const targets = args.filter((a) => !a.startsWith(\"-\") && !/^\\/[a-z]$/i.test(a));\n for (const target of targets) {\n if (target === \"*\" || /^[\\\\/]$/.test(target) || /^[a-z]:[\\\\/]?$/i.test(target)) {\n return risky(\"outside_worktree\", `Deletes ${target}`);\n }\n if (!isInWorkspace(target, ctx)) {\n return risky(\"outside_worktree\", `Deletes ${target}, outside the worktree`);\n }\n }\n }\n\n // Redirects or copy/move destinations outside the worktree.\n for (const m of simple.matchAll(/(?:^|[^0-9&])>>?\\s*(\"[^\"]+\"|'[^']+'|[^\\s;&|]+)/g)) {\n const target = m[1] ?? \"\";\n if (/^(\\/dev\\/null|nul|\\$null)$/i.test(target) || /^&\\d$/.test(target)) continue;\n if (!isInWorkspace(target, ctx))\n return risky(\"outside_worktree\", `Writes ${target}, outside the worktree`);\n if (isSecretPath(target)) return risky(\"secrets\", `Writes the secrets file ${target}`);\n }\n if (\n [\n \"cp\",\n \"mv\",\n \"copy\",\n \"move\",\n \"copy-item\",\n \"move-item\",\n \"xcopy\",\n \"robocopy\",\n \"tee\",\n \"set-content\",\n \"out-file\",\n \"add-content\",\n ].includes(bin)\n ) {\n const positional = args.filter((a) => !a.startsWith(\"-\") && !/^\\/[a-z]+$/i.test(a));\n const dest = [\"tee\", \"set-content\", \"out-file\", \"add-content\"].includes(bin)\n ? positional[0]\n : positional.at(-1);\n if (dest && !isInWorkspace(dest, ctx))\n return risky(\"outside_worktree\", `Writes ${dest}, outside the worktree`);\n }\n\n // Secrets: any argument naming a credentials file.\n const secret = args.find((a) => isSecretPath(a.replace(/^-+[a-z-]*=/i, \"\")));\n if (secret) return risky(\"secrets\", `Accesses the secrets file ${secret}`);\n\n const listsEnvDrive =\n /^(get-childitem|gci|ls|dir)$/.test(bin) && lower.some((a) => a.startsWith(\"env:\"));\n if (bin === \"printenv\" || listsEnvDrive) {\n return risky(\"secrets\", \"Dumps environment variables\");\n }\n return SAFE;\n}\n\nfunction classifyGit(args: string[]): RiskAssessment {\n // Skip global options like `-C dir` / `-c k=v`.\n let i = 0;\n while (i < args.length && args[i]?.startsWith(\"-\"))\n i += args[i] === \"-c\" || args[i] === \"-C\" ? 2 : 1;\n const sub = args[i];\n const rest = args.slice(i + 1);\n if (sub === \"push\") {\n if (\n rest.some(\n (a) =>\n a === \"--force\" ||\n a === \"-f\" ||\n a.startsWith(\"--force-with-lease\") ||\n a === \"--mirror\" ||\n /^-[a-z]*f[a-z]*$/.test(a),\n )\n ) {\n return risky(\"git_destructive\", \"Force-pushes, which can overwrite remote history\");\n }\n if (rest.some((a) => a.startsWith(\"+\") && a.length > 1)) {\n return risky(\"git_destructive\", \"Force-pushes a refspec\");\n }\n if (\n rest.includes(\"--delete\") ||\n rest.includes(\"-d\") ||\n rest.some((a) => a.startsWith(\":\") && a.length > 1)\n ) {\n return risky(\"git_destructive\", \"Deletes a remote branch\");\n }\n }\n if (\n sub === \"branch\" &&\n rest.some((a) => a === \"-d\" || a === \"-D\" || a === \"--delete\" || /^-[a-z]*d/i.test(a))\n ) {\n return risky(\"git_destructive\", \"Deletes a branch\");\n }\n if (sub === \"tag\" && rest.some((a) => a === \"-d\" || a === \"--delete\")) {\n return risky(\"git_destructive\", \"Deletes a tag\");\n }\n if (sub === \"update-ref\" && rest.includes(\"-d\")) return risky(\"git_destructive\", \"Deletes a ref\");\n if (sub === \"config\" && rest.includes(\"--global\")) {\n return risky(\"outside_worktree\", \"Changes global git configuration\");\n }\n return SAFE;\n}\n\nconst GLOBAL_FLAGS = new Set([\"-g\", \"--global\", \"--location=global\"]);\n\nfunction classifyInstall(bin: string, args: string[]): RiskAssessment {\n const sub = args[0];\n const isInstall = (verbs: string[]) => sub !== undefined && verbs.includes(sub);\n if (\n [\"npm\", \"pnpm\", \"bun\", \"cnpm\"].includes(bin) &&\n isInstall([\"i\", \"install\", \"add\", \"link\", \"update\", \"up\", \"remove\", \"rm\", \"uninstall\"])\n ) {\n if (args.some((a) => GLOBAL_FLAGS.has(a)))\n return risky(\"other\", `Installs packages globally (${bin} ${sub} -g)`);\n }\n if (bin === \"yarn\" && sub === \"global\")\n return risky(\"other\", \"Installs packages globally (yarn global)\");\n if (bin === \"volta\" && sub === \"install\")\n return risky(\"other\", \"Installs a global tool (volta install)\");\n if (\n (bin === \"pip\" || bin === \"pip3\" || bin === \"uv\" || bin === \"pipx\") &&\n args.includes(\"install\")\n ) {\n if (\n bin === \"pipx\" ||\n args.includes(\"--user\") ||\n args.includes(\"--system\") ||\n args.includes(\"--break-system-packages\")\n ) {\n return risky(\"other\", `Installs Python packages outside the project (${bin})`);\n }\n }\n if (bin === \"uv\" && sub === \"tool\" && args[1] === \"install\")\n return risky(\"other\", \"Installs a global tool (uv tool install)\");\n if (\n (bin === \"cargo\" || bin === \"go\" || bin === \"gem\" || bin === \"dotnet\") &&\n (sub === \"install\" || (bin === \"dotnet\" && sub === \"tool\" && args.includes(\"-g\")))\n ) {\n return risky(\"other\", `Installs a global tool (${bin} ${sub})`);\n }\n if (\n [\n \"brew\",\n \"apt\",\n \"apt-get\",\n \"yum\",\n \"dnf\",\n \"pacman\",\n \"zypper\",\n \"apk\",\n \"choco\",\n \"winget\",\n \"scoop\",\n \"port\",\n \"snap\",\n ].includes(bin)\n ) {\n if (args.some((a) => [\"install\", \"upgrade\", \"remove\", \"uninstall\", \"-s\", \"add\"].includes(a))) {\n return risky(\"other\", `Changes system packages (${bin})`);\n }\n }\n if (bin === \"install-module\" || bin === \"install-package\")\n return risky(\"other\", `Installs a system-wide module (${bin})`);\n return SAFE;\n}\n\n/** Classify a file write/edit. */\nexport function classifyWrite(target: string, ctx: RiskContext): RiskAssessment {\n if (!isInWorkspace(target, ctx))\n return risky(\"outside_worktree\", `Writes ${target}, outside the worktree`);\n if (isSecretPath(target)) return risky(\"secrets\", `Writes the secrets file ${target}`);\n return SAFE;\n}\n\n/** Classify a file read or search. Reads anywhere are fine except credential files. */\nexport function classifyRead(target: string, _ctx: RiskContext): RiskAssessment {\n if (isSecretPath(target)) return risky(\"secrets\", `Reads the secrets file ${target}`);\n return SAFE;\n}\n\n/** Classify a web fetch. Only flagged when the context has an allowlist of hosts. */\nexport function classifyFetch(url: string, ctx: RiskContext): RiskAssessment {\n if (!ctx.allowedHosts) return SAFE;\n let host: string;\n try {\n host = new URL(url).hostname.toLowerCase();\n } catch {\n return risky(\"network\", `Fetches an unparseable URL: ${url}`);\n }\n const allowed = ctx.allowedHosts.some((h) => {\n const rule = h.toLowerCase();\n return rule.startsWith(\"*.\") ? host.endsWith(rule.slice(1)) : host === rule;\n });\n return allowed\n ? SAFE\n : risky(\"network\", `Fetches ${host}, which is not on the allowed host list`);\n}\n","import { splitCommands, tokenize } from \"./risk\";\n\n/**\n * Read-only sessions (the orchestrator and PMs, §11.2) may inspect a repository but never\n * change it. This allowlist decides which shell commands they may run: commands that only\n * read, with no output redirection and no command substitution. Anything else is denied.\n */\n\n/** Programs that only read (or print). */\nconst READ_ONLY_BINS = new Set([\n \"ls\",\n \"dir\",\n \"cat\",\n \"type\",\n \"head\",\n \"tail\",\n \"less\",\n \"more\",\n \"wc\",\n \"grep\",\n \"egrep\",\n \"fgrep\",\n \"rg\",\n \"find\",\n \"fd\",\n \"tree\",\n \"pwd\",\n \"echo\",\n \"printf\",\n \"which\",\n \"where\",\n \"whoami\",\n \"date\",\n \"stat\",\n \"file\",\n \"du\",\n \"df\",\n \"sort\",\n \"uniq\",\n \"cut\",\n \"diff\",\n \"jq\",\n \"basename\",\n \"dirname\",\n \"realpath\",\n \"true\",\n \"get-childitem\",\n \"gci\",\n \"get-content\",\n \"gc\",\n \"get-item\",\n \"gi\",\n \"get-location\",\n \"gl\",\n \"select-string\",\n \"sls\",\n \"measure-object\",\n \"test-path\",\n \"resolve-path\",\n \"write-output\",\n \"write-host\",\n \"select-object\",\n \"where-object\",\n \"format-list\",\n \"format-table\",\n \"out-string\",\n \"sort-object\",\n \"gh\",\n]);\n\n/** Git subcommands that never change the repository. */\nconst READ_ONLY_GIT = new Set([\n \"status\",\n \"log\",\n \"show\",\n \"diff\",\n \"blame\",\n \"grep\",\n \"ls-files\",\n \"ls-tree\",\n \"rev-parse\",\n \"rev-list\",\n \"describe\",\n \"shortlog\",\n \"cat-file\",\n \"remote\",\n \"branch\",\n \"tag\",\n \"config\",\n \"reflog\",\n \"merge-base\",\n \"name-rev\",\n \"for-each-ref\",\n \"worktree\",\n]);\n\n/** `gh` subcommand verbs that only read. */\nconst READ_ONLY_GH = new Set([\"view\", \"list\", \"status\", \"diff\", \"checks\"]);\n\nconst bin = (token: string | undefined): string =>\n (token ?? \"\")\n .replace(/\\\\/g, \"/\")\n .split(\"/\")\n .pop()\n ?.toLowerCase()\n .replace(/\\.(exe|cmd|bat|ps1)$/, \"\") ?? \"\";\n\n/** Why a command is refused in a read-only session, or undefined when it may run. */\nexport function readOnlyCommandDenial(command: string): string | undefined {\n if (/\\$\\(|`|<\\(|>\\(/.test(command)) {\n return \"Command substitution is not allowed in a read-only session\";\n }\n for (const simple of splitCommands(command)) {\n if (/(^|[^0-9&<])>>?(?!\\s*(&\\d|\\/dev\\/null|nul\\b|\\$null))/i.test(simple)) {\n return \"Writing files is not allowed in a read-only session\";\n }\n const tokens = tokenize(simple);\n const name = bin(tokens[0]);\n const args = tokens.slice(1).map((a) => a.toLowerCase());\n if (name === \"git\") {\n const sub = args.find((a) => !a.startsWith(\"-\"));\n if (!sub || !READ_ONLY_GIT.has(sub)) return `git ${sub ?? \"\"} may change the repository`;\n if (\n (sub === \"branch\" || sub === \"tag\" || sub === \"remote\" || sub === \"worktree\") &&\n args.some((a) => /^-(d|D|m|M|f|-delete|-move|-force)$/.test(a) || a === \"add\")\n ) {\n return `git ${sub} with these options changes the repository`;\n }\n if (sub === \"config\" && !args.some((a) => a === \"--get\" || a === \"--list\" || a === \"-l\")) {\n return \"Only reading git config is allowed\";\n }\n continue;\n }\n if (name === \"gh\") {\n if (!args.some((a) => READ_ONLY_GH.has(a)) || args.includes(\"api\")) {\n return \"Only read-only gh commands are allowed (view, list, status, diff, checks)\";\n }\n continue;\n }\n if (name === \"find\" && args.some((a) => a === \"-delete\" || a === \"-exec\" || a === \"-execdir\")) {\n return \"find with -delete or -exec is not allowed in a read-only session\";\n }\n if (!READ_ONLY_BINS.has(name)) {\n return `${name || \"This command\"} is not on the read-only allowlist`;\n }\n }\n return undefined;\n}\n","import type { ApprovalAction, FileChange, ItemStatus, ToolCallItem } from \"@codeden/contracts\";\nimport {\n classifyCommand,\n classifyFetch,\n classifyRead,\n classifyWrite,\n type RiskAssessment,\n type RiskContext,\n} from \"../policy/risk\";\nimport { num, shorten, str, toJson, toolOutput } from \"../util/text\";\n\n/** Claude tools that are not rendered as `tool_call` items. */\nexport const SUBAGENT_TOOLS = new Set([\"Agent\", \"Task\"]);\nexport const TODO_TOOL = \"TodoWrite\";\nexport const QUESTION_TOOL = \"AskUserQuestion\";\nexport const PLAN_TOOL = \"ExitPlanMode\";\n/** Tools whose calls CodeDen renders as something other than a tool call. */\nexport function isSpecialTool(name: string): boolean {\n return (\n SUBAGENT_TOOLS.has(name) || name === TODO_TOOL || name === QUESTION_TOOL || name === PLAN_TOOL\n );\n}\n\nexport const COMMAND_TOOLS = new Set([\"Bash\", \"PowerShell\"]);\nexport const EDIT_TOOLS = new Set([\"Edit\", \"MultiEdit\", \"Write\", \"NotebookEdit\"]);\n\ntype Input = Record<string, unknown>;\n\n/** `mcp__server__tool` -> `{ server, tool }`. */\nexport function parseMcpName(name: string): { server: string; tool: string } | undefined {\n const m = /^mcp__(.+?)__(.+)$/.exec(name);\n return m?.[1] && m[2] ? { server: m[1], tool: m[2] } : undefined;\n}\n\nfunction editPath(input: Input): string {\n return str(input, \"file_path\") ?? str(input, \"notebook_path\") ?? str(input, \"path\") ?? \"\";\n}\n\n/** Build a `tool_call` item for a Claude `tool_use` block. */\nexport function toolCallItem(\n id: string,\n name: string,\n input: Input,\n cwd: string,\n status: ItemStatus = \"in_progress\",\n): ToolCallItem {\n const base = { id, kind: \"tool_call\" as const, status, toolName: name, input: toJson(input) };\n if (COMMAND_TOOLS.has(name)) {\n const command = str(input, \"command\") ?? \"\";\n const title = str(input, \"description\") ?? (command ? `Run ${shorten(command, 60)}` : name);\n return { ...base, toolKind: \"command\", command, cwd, title };\n }\n if (EDIT_TOOLS.has(name)) {\n const path = editPath(input);\n return {\n ...base,\n toolKind: \"file_edit\",\n title: path ? `${name === \"Write\" ? \"Write\" : \"Edit\"} ${baseName(path)}` : name,\n changes: path ? [{ path, change: \"modify\" }] : [],\n };\n }\n if (name === \"Read\") {\n const path = str(input, \"file_path\") ?? \"\";\n const offset = num(input, \"offset\");\n const limit = num(input, \"limit\");\n const startLine = offset && offset > 0 ? Math.floor(offset) : undefined;\n const endLine = startLine && limit && limit > 0 ? startLine + Math.floor(limit) - 1 : undefined;\n return {\n ...base,\n toolKind: \"file_read\",\n path,\n startLine,\n endLine,\n title: `Read ${baseName(path)}`,\n };\n }\n if (name === \"Grep\" || name === \"Glob\") {\n const query = str(input, \"pattern\") ?? \"\";\n return {\n ...base,\n toolKind: \"search\",\n query,\n path: str(input, \"path\"),\n title: `${name} ${shorten(query, 60)}`,\n };\n }\n if (name === \"WebFetch\") {\n const url = str(input, \"url\");\n return { ...base, toolKind: \"web\", url, title: url ? `Fetch ${url}` : name };\n }\n if (name === \"WebSearch\") {\n const query = str(input, \"query\");\n return {\n ...base,\n toolKind: \"web\",\n query,\n title: query ? `Search ${shorten(query, 60)}` : name,\n };\n }\n const mcp = parseMcpName(name);\n if (mcp) {\n if (/browser|playwright|chrome|puppeteer/i.test(mcp.server)) {\n return {\n ...base,\n toolKind: \"browser\",\n action: mcp.tool,\n url: str(input, \"url\"),\n title: `${mcp.server}: ${mcp.tool}`,\n };\n }\n return {\n ...base,\n toolKind: \"mcp\",\n server: mcp.server,\n tool: mcp.tool,\n title: `${mcp.server}: ${mcp.tool}`,\n };\n }\n return { ...base, toolKind: \"other\", title: name };\n}\n\nfunction baseName(p: string): string {\n return p.replace(/\\\\/g, \"/\").split(\"/\").pop() || p;\n}\n\n/** Text of a `tool_result` block's content (string or content-block array). */\nexport function toolResultText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (Array.isArray(content)) {\n return content\n .map((block) =>\n block && typeof block === \"object\" && str(block, \"type\") === \"text\"\n ? (str(block, \"text\") ?? \"\")\n : \"\",\n )\n .filter(Boolean)\n .join(\"\\n\");\n }\n return \"\";\n}\n\ninterface PatchHunk {\n oldStart?: number;\n newStart?: number;\n oldLines?: number;\n newLines?: number;\n lines?: string[];\n}\n\n/** Turn the CLI's `structuredPatch` hunks into unified diff text and line counts. */\nfunction patchToDiff(\n path: string,\n hunks: PatchHunk[],\n): Pick<FileChange, \"diff\" | \"additions\" | \"deletions\"> {\n let additions = 0;\n let deletions = 0;\n const out = [`--- a/${path}`, `+++ b/${path}`];\n for (const h of hunks) {\n out.push(`@@ -${h.oldStart ?? 0},${h.oldLines ?? 0} +${h.newStart ?? 0},${h.newLines ?? 0} @@`);\n for (const line of h.lines ?? []) {\n if (line.startsWith(\"+\")) additions += 1;\n else if (line.startsWith(\"-\")) deletions += 1;\n out.push(line);\n }\n }\n return { diff: out.join(\"\\n\"), additions, deletions };\n}\n\n/** Final state of a tool call once its `tool_result` arrived. */\nexport function completeToolCall(\n item: ToolCallItem,\n result: { content: unknown; isError: boolean; toolUseResult?: unknown; durationMs?: number },\n): ToolCallItem {\n const text = toolResultText(result.content);\n const status: ItemStatus = result.isError\n ? /denied|declined|rejected|doesn't want/i.test(text)\n ? \"declined\"\n : \"failed\"\n : \"completed\";\n const done: ToolCallItem = {\n ...item,\n status,\n output: toolOutput(text),\n ...(result.isError ? { error: { message: shorten(text, 300) || \"Tool failed\" } } : {}),\n ...(result.durationMs !== undefined\n ? { durationMs: Math.max(0, Math.round(result.durationMs)) }\n : {}),\n };\n const tur = result.toolUseResult;\n if (done.toolKind === \"file_edit\" && tur && typeof tur === \"object\" && !result.isError) {\n const path = str(tur, \"filePath\") ?? done.changes[0]?.path ?? \"\";\n const type = str(tur, \"type\");\n const hunks = (tur as { structuredPatch?: PatchHunk[] }).structuredPatch;\n const change: FileChange = {\n path,\n change: type === \"create\" ? \"add\" : \"modify\",\n ...(Array.isArray(hunks) && hunks.length > 0 ? patchToDiff(path, hunks) : {}),\n };\n if (type === \"create\" && (!hunks || hunks.length === 0)) {\n const content = str(tur, \"content\") ?? \"\";\n const lines = content.split(/\\r?\\n/);\n change.additions = content ? lines.length : 0;\n change.diff = [\n `--- /dev/null`,\n `+++ b/${path}`,\n `@@ -0,0 +1,${lines.length} @@`,\n ...lines.map((l) => `+${l}`),\n ].join(\"\\n\");\n }\n return { ...done, changes: [change] };\n }\n if (done.toolKind === \"command\" && tur && typeof tur === \"object\") {\n const interrupted = (tur as { interrupted?: boolean }).interrupted;\n if (interrupted) return { ...done, status: \"cancelled\" };\n }\n return done;\n}\n\n/** Risk of a Claude tool call under the `auto` policy (§11.2). */\nexport function assessClaudeTool(name: string, input: Input, ctx: RiskContext): RiskAssessment {\n if (COMMAND_TOOLS.has(name)) return classifyCommand(str(input, \"command\") ?? \"\", ctx);\n if (EDIT_TOOLS.has(name)) return classifyWrite(editPath(input), ctx);\n if (name === \"Read\") return classifyRead(str(input, \"file_path\") ?? \"\", ctx);\n if (name === \"Grep\" || name === \"Glob\") {\n const target = [str(input, \"path\"), str(input, \"glob\"), str(input, \"pattern\")].find(\n (t) => t && /\\.env|id_rsa|\\.pem|\\.npmrc/i.test(t),\n );\n return target ? classifyRead(target, ctx) : { risky: false };\n }\n if (name === \"WebFetch\") return classifyFetch(str(input, \"url\") ?? \"\", ctx);\n return { risky: false };\n}\n\n/** The approval category for a tool call that is not otherwise risky. */\nexport function defaultApprovalAction(name: string): ApprovalAction {\n if (COMMAND_TOOLS.has(name)) return \"command\";\n if (EDIT_TOOLS.has(name)) return \"file_change\";\n if (name === \"WebFetch\" || name === \"WebSearch\") return \"network\";\n return \"tool\";\n}\n\n/** Human title for an approval request. */\nexport function approvalTitle(name: string, input: Input): string {\n if (COMMAND_TOOLS.has(name)) return `Run \\`${shorten(str(input, \"command\") ?? name, 100)}\\``;\n if (EDIT_TOOLS.has(name))\n return `${name === \"Write\" ? \"Write\" : \"Edit\"} ${editPath(input) || \"a file\"}`;\n if (name === PLAN_TOOL) return \"Approve the plan and start implementing\";\n if (name === \"WebFetch\") return `Fetch ${str(input, \"url\") ?? \"a URL\"}`;\n if (name === \"Read\") return `Read ${str(input, \"file_path\") ?? \"a file\"}`;\n const mcp = parseMcpName(name);\n if (mcp) return `Use ${mcp.server}: ${mcp.tool}`;\n return `Use ${name}`;\n}\n","import type { PermissionMode } from \"@anthropic-ai/claude-agent-sdk\";\nimport type { ApprovalAction, AutonomyLevel } from \"@codeden/contracts\";\nimport { readOnlyCommandDenial } from \"../policy/read-only\";\nimport type { RiskContext } from \"../policy/risk\";\nimport { str } from \"../util/text\";\nimport {\n assessClaudeTool,\n COMMAND_TOOLS,\n defaultApprovalAction,\n EDIT_TOOLS,\n PLAN_TOOL,\n QUESTION_TOOL,\n} from \"./tools\";\n\n/** The decision for one tool call. */\nexport type Gate = { ask: false } | { ask: true; action: ApprovalAction; reason: string };\n\n/**\n * Native permission mode per autonomy level (§11.2):\n * - supervised -> `default`, and every edit/command is forced to ask via a PreToolUse hook\n * - auto -> `acceptEdits`, plus the risky-action classifier\n * - full -> `bypassPermissions`, asking only for writes outside the worktree\n * Plan mode overrides all of them with `plan`.\n */\nexport function permissionModeFor(autonomy: AutonomyLevel, planMode: boolean): PermissionMode {\n if (planMode) return \"plan\";\n if (autonomy === \"supervised\") return \"default\";\n if (autonomy === \"auto\") return \"acceptEdits\";\n return \"bypassPermissions\";\n}\n\n/**\n * CodeDen's approval policy for Claude tool calls. `gate()` runs in a PreToolUse hook (so it\n * sees every call, including ones Claude would auto-allow) and again in `canUseTool`.\n * Hook `ask` decisions route the call to `canUseTool` in every permission mode.\n */\nexport class ClaudePolicy {\n private readonly sessionAllow = new Set<string>();\n\n constructor(\n private readonly autonomy: AutonomyLevel,\n private readonly ctx: RiskContext,\n /** Read-only sessions (orchestrator, PMs): edits and writing commands are denied. */\n private readonly readOnly = false,\n ) {}\n\n /** Why a call is refused outright (read-only sessions), or undefined. */\n denial(toolName: string, input: Record<string, unknown>): string | undefined {\n if (!this.readOnly) return undefined;\n if (EDIT_TOOLS.has(toolName)) {\n return \"This session is read-only: it cannot edit files. Act through CodeDen tools instead.\";\n }\n if (COMMAND_TOOLS.has(toolName)) {\n const reason = readOnlyCommandDenial(str(input, \"command\") ?? \"\");\n return reason ? `This session is read-only: ${reason}.` : undefined;\n }\n return undefined;\n }\n\n gate(toolName: string, input: Record<string, unknown>): Gate {\n if (toolName === QUESTION_TOOL) {\n return { ask: true, action: \"other\", reason: \"The agent is asking a question\" };\n }\n if (toolName === PLAN_TOOL) {\n return { ask: true, action: \"other\", reason: \"The agent finished planning\" };\n }\n if (this.sessionAllow.has(this.key(toolName, input))) return { ask: false };\n const risk = assessClaudeTool(toolName, input, this.ctx);\n if (this.autonomy === \"supervised\") {\n if (risk.risky) return { ask: true, action: risk.action, reason: risk.reason };\n if (COMMAND_TOOLS.has(toolName) || EDIT_TOOLS.has(toolName)) {\n return {\n ask: true,\n action: defaultApprovalAction(toolName),\n reason: \"Supervised mode: every edit and command needs approval\",\n };\n }\n return { ask: false };\n }\n if (!risk.risky) return { ask: false };\n if (this.autonomy === \"full\" && risk.action !== \"outside_worktree\") return { ask: false };\n return { ask: true, action: risk.action, reason: risk.reason };\n }\n\n /**\n * Whether a `canUseTool` call (Claude's own permission prompt) needs the user. In supervised\n * mode everything Claude asks about goes to the user; otherwise only gated calls do.\n */\n needsUser(toolName: string, input: Record<string, unknown>): Gate {\n const gate = this.gate(toolName, input);\n if (gate.ask || this.autonomy !== \"supervised\") return gate;\n if (this.sessionAllow.has(this.key(toolName, input))) return gate;\n return {\n ask: true,\n action: defaultApprovalAction(toolName),\n reason: \"Claude asked for permission\",\n };\n }\n\n /** Remember an `allow_session` decision. Commands and edits match exactly; others by name. */\n allowForSession(toolName: string, input: Record<string, unknown>): void {\n this.sessionAllow.add(this.key(toolName, input));\n }\n\n private key(toolName: string, input: Record<string, unknown>): string {\n if (COMMAND_TOOLS.has(toolName)) return `${toolName}:${str(input, \"command\") ?? \"\"}`;\n if (EDIT_TOOLS.has(toolName)) {\n return `edit:${str(input, \"file_path\") ?? str(input, \"notebook_path\") ?? \"\"}`;\n }\n return toolName;\n }\n}\n","import { readFileSync } from \"node:fs\";\nimport type {\n CanUseTool,\n EffortLevel,\n HookCallbackMatcher,\n HookEvent,\n Options,\n SDKUserMessage,\n McpServerConfig as SdkMcpServerConfig,\n} from \"@anthropic-ai/claude-agent-sdk\";\nimport {\n CODEDEN_VERSION,\n type McpServerConfig,\n type ReasoningEffort,\n type SessionOptions,\n type UserInput,\n} from \"@codeden/contracts\";\nimport type { ResolvedCommand } from \"../util/exec\";\nimport { explicitModel } from \"../util/model\";\nimport { permissionModeFor } from \"./permissions\";\nimport { EDIT_TOOLS } from \"./tools\";\n\n/** Map a CodeDen effort to Claude's effort levels (`minimal` has no Claude equivalent). */\nexport function claudeEffort(effort: ReasoningEffort | undefined): EffortLevel | undefined {\n if (!effort) return undefined;\n return effort === \"minimal\" ? \"low\" : effort;\n}\n\n/** CodeDen MCP server configs -> Claude `mcpServers`. */\nexport function claudeMcpServers(\n servers: readonly McpServerConfig[],\n): Record<string, SdkMcpServerConfig> {\n const out: Record<string, SdkMcpServerConfig> = {};\n for (const server of servers) {\n out[server.name] =\n server.transport === \"http\"\n ? { type: \"http\", url: server.url, ...(server.headers ? { headers: server.headers } : {}) }\n : {\n type: \"stdio\",\n command: server.command,\n args: server.args,\n ...(server.env ? { env: server.env } : {}),\n };\n }\n return out;\n}\n\n/** Allow every tool of trusted MCP servers (CodeDen's own) without permission prompts. */\nexport function trustedMcpTools(\n servers: readonly McpServerConfig[],\n): Pick<Options, \"allowedTools\"> {\n const allowed = servers\n .filter((s) => s.transport === \"http\" && s.trusted)\n .map((s) => `mcp__${s.name}`);\n return allowed.length > 0 ? { allowedTools: allowed } : {};\n}\n\n/** Point the SDK at the user's installed `claude` (native binary or JS entry point). */\nexport function executableOptions(\n cmd: ResolvedCommand,\n): Pick<Options, \"pathToClaudeCodeExecutable\" | \"executable\"> {\n if (cmd.kind === \"native\") return { pathToClaudeCodeExecutable: cmd.path };\n if (cmd.kind === \"node-script\")\n return { pathToClaudeCodeExecutable: cmd.script, executable: \"node\" };\n throw new Error(\n `Cannot launch ${cmd.path} directly. Install Claude Code with its native installer or npm.`,\n );\n}\n\n/** Environment for the Claude process: the user's env plus session extras. */\nexport function claudeEnv(\n extra: Record<string, string> | undefined,\n): Record<string, string | undefined> {\n return {\n ...process.env,\n ...extra,\n CLAUDE_AGENT_SDK_CLIENT_APP: `codeden/${CODEDEN_VERSION}`,\n };\n}\n\nexport interface QueryOptionsInput {\n session: SessionOptions;\n executable: ResolvedCommand;\n canUseTool: CanUseTool;\n hooks: Partial<Record<HookEvent, HookCallbackMatcher[]>>;\n abortController: AbortController;\n resume?: string;\n stderr?: (data: string) => void;\n}\n\n/** Build the `query()` options for a session (§7.2). */\nexport function buildQueryOptions(input: QueryOptionsInput): Options {\n const { session } = input;\n const permissionMode = permissionModeFor(session.autonomy, session.planMode);\n const effort = claudeEffort(session.effort);\n return {\n ...executableOptions(input.executable),\n cwd: session.cwd,\n additionalDirectories: session.additionalDirectories,\n ...(explicitModel(session.model) ? { model: explicitModel(session.model) } : {}),\n ...(effort ? { effort } : {}),\n permissionMode,\n ...(permissionMode === \"bypassPermissions\" ? { allowDangerouslySkipPermissions: true } : {}),\n includePartialMessages: true,\n forwardSubagentText: true,\n ...(input.resume ? { resume: input.resume } : {}),\n // Read-only sessions (orchestrator, PMs) never get the edit tools (§11.2).\n ...(session.readOnly ? { disallowedTools: [...EDIT_TOOLS] } : {}),\n mcpServers: claudeMcpServers(session.mcpServers),\n ...trustedMcpTools(session.mcpServers),\n systemPrompt: {\n type: \"preset\",\n preset: \"claude_code\",\n ...(session.systemPrompt ? { append: session.systemPrompt } : {}),\n },\n env: claudeEnv(session.env),\n canUseTool: input.canUseTool,\n hooks: input.hooks,\n abortController: input.abortController,\n ...(input.stderr ? { stderr: input.stderr } : {}),\n };\n}\n\ntype ContentBlock =\n | { type: \"text\"; text: string }\n | { type: \"image\"; source: { type: \"base64\"; media_type: string; data: string } };\n\n/** Convert CodeDen `UserInput` (text, images, file references) to an SDK user message. */\nexport function toSdkUserMessage(input: UserInput): SDKUserMessage {\n const blocks: ContentBlock[] = [];\n const fileRefs: string[] = [];\n for (const attachment of input.attachments) {\n if (attachment.type === \"file\") {\n fileRefs.push(attachment.path);\n continue;\n }\n const source = attachment.source;\n if (source.type === \"base64\") {\n blocks.push({\n type: \"image\",\n source: { type: \"base64\", media_type: attachment.mediaType, data: source.data },\n });\n } else if (source.type === \"path\") {\n const data = readFileSync(source.path).toString(\"base64\");\n blocks.push({\n type: \"image\",\n source: { type: \"base64\", media_type: attachment.mediaType, data },\n });\n } else {\n throw new Error(\"Artifact attachments must be resolved to a path or base64 before sending\");\n }\n }\n const text = fileRefs.length\n ? `${input.text}\\n\\nAttached files:\\n${fileRefs.map((p) => `- ${p}`).join(\"\\n\")}`\n : input.text;\n const content = blocks.length ? [{ type: \"text\" as const, text }, ...blocks] : text;\n return {\n type: \"user\",\n message: { role: \"user\", content: content as SDKUserMessage[\"message\"][\"content\"] },\n parent_tool_use_id: null,\n };\n}\n","import { closeSync, openSync, readFileSync, rmSync, statSync, writeSync } from \"node:fs\";\n\nexport interface InstallLockOptions {\n /** A lock older than this is treated as abandoned (default 10 minutes). */\n staleMs?: number;\n /** Give up waiting for another holder after this long (default 10 minutes). */\n waitMs?: number;\n pollMs?: number;\n /** Called once when the lock is held by someone else and we start waiting. */\n onWait?: () => void;\n}\n\nfunction isAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return (error as NodeJS.ErrnoException).code === \"EPERM\";\n }\n}\n\n/** True when the lock file's holder is gone or the lock is older than `staleMs`. */\nfunction isStale(file: string, staleMs: number): boolean {\n try {\n const age = Date.now() - statSync(file).mtimeMs;\n if (age > staleMs) return true;\n const pid = Number(JSON.parse(readFileSync(file, \"utf8\")).pid);\n return Number.isInteger(pid) && pid > 0 && !isAlive(pid);\n } catch {\n // Unreadable or half-written: only stale once it is old enough.\n return false;\n }\n}\n\n/**\n * A cross-process lock file (`open(..., \"wx\")`), so the server and the runner never run two\n * installs into the same folder. Waits while another live process holds it.\n * Returns the release function.\n */\nexport async function acquireInstallLock(\n file: string,\n opts: InstallLockOptions = {},\n): Promise<() => void> {\n const staleMs = opts.staleMs ?? 600_000;\n const deadline = Date.now() + (opts.waitMs ?? 600_000);\n let waiting = false;\n for (;;) {\n try {\n const fd = openSync(file, \"wx\");\n writeSync(fd, JSON.stringify({ pid: process.pid, at: new Date().toISOString() }));\n closeSync(fd);\n return () => rmSync(file, { force: true });\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"EEXIST\") throw error;\n }\n if (isStale(file, staleMs)) {\n rmSync(file, { force: true });\n continue;\n }\n if (Date.now() > deadline) throw new Error(\"Timed out waiting for another install to finish\");\n if (!waiting) {\n waiting = true;\n opts.onWait?.();\n }\n await new Promise((resolve) => setTimeout(resolve, opts.pollMs ?? 500));\n }\n}\n","import { existsSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { type ResolvedCommand, resolveExecutable } from \"./exec\";\n\n/**\n * How to run npm for on-demand installs. Prefers the npm that started us (`npm_execpath`,\n * set under `npx`), then the npm shipped next to this Node binary, then `npm` on PATH.\n * Running `node <npm-cli.js>` avoids spawning a Windows `.cmd` shim through a shell.\n */\nexport function resolveNpm(\n env: NodeJS.ProcessEnv = process.env,\n execPath = process.execPath,\n platform: NodeJS.Platform = process.platform,\n): ResolvedCommand | undefined {\n const fromEnv = env.npm_execpath;\n if (fromEnv && path.basename(fromEnv) === \"npm-cli.js\" && existsSync(fromEnv)) {\n return { kind: \"node-script\", path: execPath, script: fromEnv };\n }\n const nodeDir = path.dirname(execPath);\n const bundled =\n platform === \"win32\"\n ? path.join(nodeDir, \"node_modules\", \"npm\", \"bin\", \"npm-cli.js\")\n : path.join(nodeDir, \"..\", \"lib\", \"node_modules\", \"npm\", \"bin\", \"npm-cli.js\");\n if (existsSync(bundled)) return { kind: \"node-script\", path: execPath, script: bundled };\n return resolveExecutable(\"npm\");\n}\n","import { killTree, type ResolvedCommand, spawnResolved } from \"./exec\";\n\nexport interface RunNpmOptions {\n cwd: string;\n timeoutMs: number;\n /** Each non-empty output line (trimmed, at most 300 characters), for progress UIs. */\n onLine: (line: string) => void;\n /** Extra environment on top of `process.env`. */\n env?: Record<string, string>;\n}\n\n/**\n * Run npm with `args` (on-demand installs: Claude Code support in `<home>/deps`, CodeDen\n * versions in `<home>/app`), streaming its output lines. Rejects with npm's own error summary\n * on a non-zero exit, and kills the process tree on timeout.\n */\nexport function runNpm(npm: ResolvedCommand, args: string[], opts: RunNpmOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n const child = spawnResolved(npm, args, {\n cwd: opts.cwd,\n env: {\n ...process.env,\n npm_config_update_notifier: \"false\",\n npm_config_progress: \"false\",\n ...opts.env,\n },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n windowsHide: true,\n });\n let output = \"\";\n const onData = (chunk: string) => {\n output = (output + chunk).slice(-20_000);\n for (const line of chunk.split(/\\r?\\n/)) {\n const text = line.trim();\n if (text) opts.onLine(text.slice(0, 300));\n }\n };\n child.stdout?.setEncoding(\"utf8\").on(\"data\", onData);\n child.stderr?.setEncoding(\"utf8\").on(\"data\", onData);\n const timer = setTimeout(() => {\n killTree(child);\n reject(new Error(`npm timed out after ${Math.round(opts.timeoutMs / 1000)}s`));\n }, opts.timeoutMs);\n child.on(\"error\", (error) => {\n clearTimeout(timer);\n reject(new Error(`Could not start npm: ${error.message}`));\n });\n child.on(\"close\", (code) => {\n clearTimeout(timer);\n if (code === 0) return resolve();\n const reason = npmFailure(output);\n reject(new Error(`npm install exited with code ${code}${reason ? `: ${reason}` : \"\"}`));\n });\n });\n}\n\n/**\n * The useful part of npm's error output: its error code and the first descriptive line\n * (`npm error code E404` + `npm error 404 Not Found - GET ...`), without stack frames.\n */\nexport function npmFailure(output: string): string {\n const lines = output\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => /^npm (error|ERR!)/.test(line))\n .map((line) => line.replace(/^npm (error|ERR!)\\s*/, \"\"))\n .filter((line) => line && !/^(at |\\{|\\}|[a-z]\\w*: |syscall|errno |A complete log)/.test(line));\n const code = lines.find((line) => line.startsWith(\"code \"));\n const detail = lines.find((line) => !line.startsWith(\"code \"));\n const summary = [code, detail].filter(Boolean).join(\": \").slice(0, 500);\n if (summary) return summary;\n return output.trim().split(/\\r?\\n/).slice(-3).join(\" \").slice(0, 500);\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { join } from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport type { ResolvedCommand } from \"../../util/exec\";\nimport { acquireInstallLock } from \"../../util/install-lock\";\nimport { resolveNpm } from \"../../util/npm\";\nimport { runNpm } from \"../../util/npm-run\";\n\n/** The Claude Agent SDK package. */\nexport const CLAUDE_SDK_PACKAGE = \"@anthropic-ai/claude-agent-sdk\";\n/** The SDK version CodeDen is tested with (keep in step with `packages/providers/package.json`). */\nexport const CLAUDE_SDK_VERSION = \"0.3.318\";\n\nexport type ClaudeSdkModule = typeof import(\"@anthropic-ai/claude-agent-sdk\");\n\n/** The SDK version installed in `depsDir`, or null. */\nexport function installedClaudeSdkVersion(depsDir: string): string | null {\n try {\n const file = join(depsDir, \"node_modules\", ...CLAUDE_SDK_PACKAGE.split(\"/\"), \"package.json\");\n const version = JSON.parse(readFileSync(file, \"utf8\")).version;\n return typeof version === \"string\" ? version : null;\n } catch {\n return null;\n }\n}\n\n/** True when `depsDir` holds the tested SDK version. */\nexport function isClaudeSdkInstalled(depsDir: string): boolean {\n return installedClaudeSdkVersion(depsDir) === CLAUDE_SDK_VERSION;\n}\n\n/** Import the SDK installed in `depsDir` (absolute file URL, so it also works on Windows). */\nexport async function importClaudeSdkFrom(depsDir: string): Promise<ClaudeSdkModule> {\n const entry = createRequire(join(depsDir, \"package.json\")).resolve(CLAUDE_SDK_PACKAGE);\n const sdk = (await import(pathToFileURL(entry).href)) as ClaudeSdkModule;\n if (typeof sdk.query !== \"function\") throw new Error(`${entry} does not export query()`);\n return sdk;\n}\n\nexport interface InstallClaudeSdkOptions {\n depsDir: string;\n /** Progress lines for the UI (\"Downloading ...\", npm output). */\n onProgress?: (line: string) => void;\n /** Override npm (tests). */\n npm?: ResolvedCommand;\n /** npm timeout (default 5 minutes). */\n timeoutMs?: number;\n}\n\nconst inflight = new Map<string, Promise<void>>();\n\n/**\n * Install the tested SDK version into `depsDir` with npm, skipping its optional platform\n * binaries and peers (the JS entry needs neither when CodeDen passes the user's `claude`).\n * Concurrent calls share one install per process; a lock file covers other processes.\n * Resolves immediately when it is already installed.\n */\nexport function installClaudeSdk(opts: InstallClaudeSdkOptions): Promise<void> {\n if (isClaudeSdkInstalled(opts.depsDir)) return Promise.resolve();\n let running = inflight.get(opts.depsDir);\n if (!running) {\n running = runInstall(opts).finally(() => inflight.delete(opts.depsDir));\n inflight.set(opts.depsDir, running);\n }\n return running;\n}\n\nasync function runInstall(opts: InstallClaudeSdkOptions): Promise<void> {\n const progress = opts.onProgress ?? (() => {});\n mkdirSync(opts.depsDir, { recursive: true });\n const release = await acquireInstallLock(join(opts.depsDir, \".install.lock\"), {\n onWait: () => progress(\"Waiting for another install to finish\"),\n });\n try {\n if (isClaudeSdkInstalled(opts.depsDir)) return;\n const manifest = join(opts.depsDir, \"package.json\");\n if (!existsSync(manifest)) {\n writeFileSync(\n manifest,\n `${JSON.stringify({ name: \"codeden-deps\", private: true }, null, 2)}\\n`,\n );\n }\n const npm = opts.npm ?? resolveNpm();\n if (!npm) throw new Error(\"npm was not found; install Node.js with npm and try again\");\n const spec = `${CLAUDE_SDK_PACKAGE}@${CLAUDE_SDK_VERSION}`;\n progress(`Downloading ${spec} from npm`);\n await runNpm(\n npm,\n [\n \"install\",\n spec,\n \"--omit=optional\",\n \"--omit=peer\",\n \"--no-audit\",\n \"--no-fund\",\n \"--save-exact\",\n \"--prefix\",\n opts.depsDir,\n ],\n { cwd: opts.depsDir, timeoutMs: opts.timeoutMs ?? 300_000, onLine: progress },\n );\n const version = installedClaudeSdkVersion(opts.depsDir);\n if (version !== CLAUDE_SDK_VERSION) {\n throw new Error(`npm finished but ${spec} is not in ${opts.depsDir}`);\n }\n progress(\"Checking the install\");\n await importClaudeSdkFrom(opts.depsDir);\n progress(`Installed ${spec}`);\n } finally {\n release();\n }\n}\n","import { type ClaudeSdkModule, importClaudeSdkFrom, installClaudeSdk } from \"./install\";\n\n/**\n * Set to `true` by the published bundle (tsdown `define`): the SDK is not shipped with\n * CodeDen and is installed on demand into `<home>/deps`. Undefined in the workspace, where\n * the SDK resolves from `node_modules` like any other dependency.\n */\ndeclare const __CODEDEN_CLAUDE_SDK_ON_DEMAND__: boolean | undefined;\n\n/** Where the SDK comes from in this process. `CODEDEN_CLAUDE_SDK=deps|workspace` overrides. */\nexport function claudeSdkSource(): \"deps\" | \"workspace\" {\n const forced = process.env.CODEDEN_CLAUDE_SDK;\n if (forced === \"deps\" || forced === \"workspace\") return forced;\n return typeof __CODEDEN_CLAUDE_SDK_ON_DEMAND__ !== \"undefined\" && __CODEDEN_CLAUDE_SDK_ON_DEMAND__\n ? \"deps\"\n : \"workspace\";\n}\n\nlet depsDir: string | undefined;\nlet progressListener: ((line: string) => void) | undefined;\nlet loaded: Promise<ClaudeSdkModule> | undefined;\n\n/** Tell the loader where on-demand dependencies live (`<home>/deps`). */\nexport function configureClaudeSdk(opts: {\n depsDir: string;\n onProgress?: (line: string) => void;\n}): void {\n depsDir = opts.depsDir;\n progressListener = opts.onProgress;\n loaded = undefined;\n}\n\n/**\n * The Claude Agent SDK module, installed first when needed. Failures are not cached, so the\n * next session retries the install.\n */\nexport function loadClaudeSdk(): Promise<ClaudeSdkModule> {\n loaded ??= load().catch((error: unknown) => {\n loaded = undefined;\n throw error;\n });\n return loaded;\n}\n\nasync function load(): Promise<ClaudeSdkModule> {\n if (claudeSdkSource() === \"workspace\") return import(\"@anthropic-ai/claude-agent-sdk\");\n if (!depsDir) throw new Error(\"Claude Code support is not configured (no deps folder)\");\n try {\n await installClaudeSdk({ depsDir, onProgress: progressListener });\n return await importClaudeSdkFrom(depsDir);\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n throw new Error(\n `Claude Code support could not be installed into ${depsDir}: ${reason}. ` +\n \"Start the session again to retry, use Settings > First-run setup, or run `codeden doctor --install`.\",\n );\n }\n}\n","import { tmpdir } from \"node:os\";\nimport type { ResolvedCommand } from \"../util/exec\";\nimport { explicitModel } from \"../util/model\";\nimport { str } from \"../util/text\";\nimport { type OneShotRequest, oneShotSignal, type UtilityModel } from \"../utility\";\nimport { claudeEnv, executableOptions } from \"./options\";\nimport { loadClaudeSdk } from \"./sdk\";\n\n/** Default utility model: the CLI's small-model alias. */\nexport const CLAUDE_UTILITY_MODEL = \"haiku\";\n\n/**\n * One-shot Claude call for the utility model: one turn, no tools, no MCP servers, no settings\n * or hooks loaded, nothing persisted.\n */\nexport class ClaudeUtilityModel implements UtilityModel {\n readonly providerId = \"claude\";\n readonly defaultModel = CLAUDE_UTILITY_MODEL;\n\n constructor(private readonly resolveExecutable: () => ResolvedCommand | undefined) {}\n\n async runOneShot(request: OneShotRequest): Promise<string> {\n const exe = this.resolveExecutable();\n if (!exe) throw new Error(\"Claude Code is not installed\");\n const { signal, dispose } = oneShotSignal(request);\n const abortController = new AbortController();\n signal.addEventListener(\"abort\", () => abortController.abort(), { once: true });\n try {\n const { query } = await loadClaudeSdk();\n const q = query({\n prompt: request.prompt,\n options: {\n ...executableOptions(exe),\n cwd: tmpdir(),\n model: explicitModel(request.model) ?? CLAUDE_UTILITY_MODEL,\n maxTurns: 1,\n tools: [],\n mcpServers: {},\n strictMcpConfig: true,\n settingSources: [],\n persistSession: false,\n permissionMode: \"dontAsk\",\n thinking: { type: \"disabled\" },\n ...(request.system ? { systemPrompt: request.system } : {}),\n env: claudeEnv(undefined),\n abortController,\n },\n });\n let text = \"\";\n for await (const message of q) {\n if (message.type === \"assistant\" && !message.parent_tool_use_id) {\n for (const block of message.message.content) {\n if (block.type === \"text\") text += block.text;\n }\n }\n if (message.type === \"result\") {\n if (message.subtype !== \"success\" || message.is_error) {\n throw new Error(`Utility model failed: ${message.subtype}`);\n }\n return (str(message, \"result\") ?? text).trim();\n }\n }\n if (signal.aborted)\n throw signal.reason instanceof Error ? signal.reason : new Error(\"Aborted\");\n return text.trim();\n } finally {\n dispose();\n }\n }\n}\n","import type { AgentEvent, Item, ItemStatus } from \"@codeden/contracts\";\nimport { str } from \"../util/text\";\nimport type { ThreadCtx } from \"./subagents\";\nimport type { ToolTracker } from \"./tool-tracker\";\nimport { isSpecialTool } from \"./tools\";\n\ntype Raw = Record<string, unknown>;\n\n/** A content block streaming in through `stream_event`s. */\nexport interface StreamBlock {\n itemId: string;\n type: \"text\" | \"thinking\" | \"tool_use\";\n text: string;\n /** Matched to a content block of a full `assistant` message. */\n consumed: boolean;\n completed: boolean;\n}\n\nexport interface StreamDeps {\n /** Root thread context, opening an implicit turn if needed. */\n rootCtx: () => ThreadCtx;\n emit: (event: AgentEvent) => void;\n item: (ctx: ThreadCtx, phase: \"item.started\", item: Item) => void;\n tools: ToolTracker;\n newId: () => string;\n}\n\n/**\n * Assembles root-thread `stream_event`s (text, thinking and tool-input deltas) into started\n * items. The full `assistant` message that follows each block completes it via `claim()`.\n */\nexport class StreamAssembler {\n private messageId = \"\";\n private blocks = new Map<number, StreamBlock>();\n\n constructor(private readonly deps: StreamDeps) {}\n\n onEvent(event: Raw): void {\n const index = typeof event.index === \"number\" ? event.index : -1;\n if (event.type === \"message_start\") {\n this.messageId = str(event.message, \"id\") ?? this.deps.newId();\n this.blocks = new Map();\n } else if (event.type === \"content_block_start\") {\n const block = (event.content_block ?? {}) as Raw;\n const ctx = this.deps.rootCtx();\n const fresh = { text: \"\", consumed: false, completed: false };\n if (block.type === \"text\" || block.type === \"thinking\") {\n const itemId = `${this.messageId}:${index}`;\n this.blocks.set(index, { itemId, type: block.type, ...fresh });\n this.deps.item(\n ctx,\n \"item.started\",\n block.type === \"text\"\n ? { id: itemId, kind: \"assistant_message\", status: \"in_progress\", text: \"\" }\n : { id: itemId, kind: \"reasoning\", status: \"in_progress\", text: \"\" },\n );\n } else if (\n block.type === \"tool_use\" &&\n typeof block.id === \"string\" &&\n typeof block.name === \"string\"\n ) {\n if (isSpecialTool(block.name)) return;\n this.blocks.set(index, { itemId: block.id, type: \"tool_use\", ...fresh });\n this.deps.tools.startStreamed(ctx, block.id, block.name);\n }\n } else if (event.type === \"content_block_delta\") {\n this.onDelta(this.blocks.get(index), (event.delta ?? {}) as Raw);\n }\n }\n\n private onDelta(sb: StreamBlock | undefined, delta: Raw): void {\n if (!sb) return;\n const ctx = this.deps.rootCtx();\n const base = { type: \"item.delta\" as const, ...ctx, itemId: sb.itemId };\n const text =\n delta.type === \"text_delta\"\n ? delta.text\n : delta.type === \"thinking_delta\"\n ? delta.thinking\n : undefined;\n if (typeof text === \"string\" && text) {\n sb.text += text;\n this.deps.emit({ ...base, delta: { type: \"text\", text } });\n } else if (\n delta.type === \"input_json_delta\" &&\n typeof delta.partial_json === \"string\" &&\n delta.partial_json\n ) {\n this.deps.emit({ ...base, delta: { type: \"tool_input\", partialJson: delta.partial_json } });\n }\n }\n\n /** The streamed block a full assistant message's content block corresponds to. */\n claim(messageId: string, type: StreamBlock[\"type\"]): StreamBlock | undefined {\n if (messageId !== this.messageId) return undefined;\n const ordered = [...this.blocks.entries()].sort((a, b) => a[0] - b[0]).map(([, b]) => b);\n const sb = ordered.find((b) => b.type === type && !b.consumed);\n if (sb) sb.consumed = true;\n return sb;\n }\n\n /** Turn ending: complete text/thinking blocks that never got their full message. */\n finish(status: ItemStatus, emitItem: (item: Item) => void): void {\n for (const sb of this.blocks.values()) {\n if (sb.completed || sb.type === \"tool_use\") continue;\n sb.completed = true;\n emitItem(\n sb.type === \"text\"\n ? { id: sb.itemId, kind: \"assistant_message\", status, text: sb.text }\n : {\n id: sb.itemId,\n kind: \"reasoning\",\n status,\n text: sb.text,\n ...(sb.text ? {} : { redacted: true }),\n },\n );\n }\n this.blocks = new Map();\n }\n}\n","import type { AgentEvent, ItemOf } from \"@codeden/contracts\";\nimport { str } from \"../util/text\";\nimport { toolResultText } from \"./tools\";\n\n/** A thread plus the turn currently running in it. */\nexport interface ThreadCtx {\n threadId: string;\n turnId: string;\n}\n\ninterface Subagent {\n parent: ThreadCtx;\n child: ThreadCtx;\n item: ItemOf<\"subagent\">;\n background: boolean;\n done: boolean;\n}\n\ntype Raw = Record<string, unknown>;\n\n/**\n * Subagent (Agent/Task tool) runs as child threads (§7.3). The parent gets a `subagent` item;\n * messages tagged with `parent_tool_use_id` go to the child thread. Background subagents\n * finish on `task_notification`, foreground ones on their `tool_result`.\n */\nexport class SubagentTracker {\n private readonly runs = new Map<string, Subagent>();\n\n constructor(\n private readonly sessionId: string,\n private readonly emit: (event: AgentEvent) => void,\n private readonly newId: () => string,\n private readonly onThreadEnd: (ctx: ThreadCtx, finished: boolean) => void = () => {},\n ) {}\n\n ctx(toolUseId: string): ThreadCtx | undefined {\n return this.runs.get(toolUseId)?.child;\n }\n\n start(parent: ThreadCtx, toolUseId: string, input: Raw): void {\n if (this.runs.has(toolUseId)) return;\n const childThreadId = `${this.sessionId}:thread-${toolUseId}`;\n const agentType = str(input, \"subagent_type\") ?? \"general-purpose\";\n const description = str(input, \"description\");\n const item: ItemOf<\"subagent\"> = {\n id: toolUseId,\n kind: \"subagent\",\n status: \"in_progress\",\n childThreadId,\n agentType,\n ...(description ? { description } : {}),\n ...(str(input, \"prompt\") ? { prompt: str(input, \"prompt\") } : {}),\n };\n const child = { threadId: childThreadId, turnId: this.newId() };\n this.runs.set(toolUseId, {\n parent,\n child,\n item,\n background: input.run_in_background === true,\n done: false,\n });\n this.emit({\n type: \"thread.started\",\n thread: {\n id: childThreadId,\n parentThreadId: parent.threadId,\n parentItemId: toolUseId,\n agentType,\n ...(description ? { title: description } : {}),\n },\n });\n this.emit({ type: \"item.started\", ...parent, item });\n this.emit({ type: \"turn.started\", ...child });\n }\n\n onTaskStarted(msg: Raw): void {\n const run = this.runs.get(str(msg, \"tool_use_id\") ?? \"\");\n if (run && msg.is_backgrounded === true) run.background = true;\n }\n\n onToolResult(\n toolUseId: string,\n content: unknown,\n isError: boolean,\n toolUseResult: unknown,\n ): void {\n const run = this.runs.get(toolUseId);\n if (!run || run.done) return;\n const status = str(toolUseResult, \"status\");\n if (\n !isError &&\n (status === \"async_launched\" || (toolUseResult as Raw | undefined)?.isAsync === true)\n ) {\n run.background = true;\n return;\n }\n const summary = cleanSummary(toolResultText(content));\n this.finish(toolUseId, isError ? \"failed\" : \"completed\", summary);\n }\n\n onTaskNotification(msg: Raw): void {\n const toolUseId = str(msg, \"tool_use_id\");\n if (!toolUseId) return;\n const status = str(msg, \"status\");\n const summary = str(msg, \"summary\");\n this.finish(\n toolUseId,\n status === \"completed\" ? \"completed\" : status === \"failed\" ? \"failed\" : \"interrupted\",\n summary,\n );\n }\n\n /** Root turn interrupted or failed: foreground subagents of that turn stop with it. */\n interruptForeground(rootTurnId: string): void {\n for (const [id, run] of this.runs) {\n if (!run.done && !run.background && run.parent.turnId === rootTurnId)\n this.finish(id, \"interrupted\");\n }\n }\n\n interruptAll(): void {\n for (const id of this.runs.keys()) this.finish(id, \"interrupted\");\n }\n\n private finish(\n toolUseId: string,\n outcome: \"completed\" | \"failed\" | \"interrupted\",\n summary?: string,\n ): void {\n const run = this.runs.get(toolUseId);\n if (!run || run.done) return;\n run.done = true;\n this.onThreadEnd(run.child, outcome === \"completed\");\n if (outcome === \"completed\") {\n this.emit({ type: \"turn.completed\", ...run.child, stopReason: \"end_turn\" });\n } else if (outcome === \"failed\") {\n this.emit({\n type: \"turn.failed\",\n ...run.child,\n error: { message: summary || \"Subagent failed\" },\n });\n } else {\n this.emit({ type: \"turn.interrupted\", ...run.child, reason: \"user\" });\n }\n const status =\n outcome === \"completed\" ? \"completed\" : outcome === \"failed\" ? \"failed\" : \"cancelled\";\n this.emit({\n type: \"item.completed\",\n ...run.parent,\n item: { ...run.item, status, ...(summary ? { summary } : {}) },\n });\n }\n}\n\n/** Drop the CLI's internal trailer (agent ids, usage) from a subagent result. */\nfunction cleanSummary(text: string): string {\n return text.split(/\\n(?=agentId:|<usage>)/)[0]?.trim() ?? \"\";\n}\n","import type { Item, ItemOf, ToolCallItem } from \"@codeden/contracts\";\nimport { str } from \"../util/text\";\nimport type { SubagentTracker, ThreadCtx } from \"./subagents\";\nimport {\n completeToolCall,\n PLAN_TOOL,\n QUESTION_TOOL,\n SUBAGENT_TOOLS,\n TODO_TOOL,\n toolCallItem,\n} from \"./tools\";\n\ntype Raw = Record<string, unknown>;\ntype Todos = ItemOf<\"todo_list\">[\"todos\"];\ntype EmitItem = (\n ctx: ThreadCtx,\n phase: \"item.started\" | \"item.updated\" | \"item.completed\",\n item: Item,\n) => void;\n\ninterface ToolState {\n ctx: ThreadCtx;\n item?: ToolCallItem;\n /** Tools rendered as something other than a tool call. */\n special?: \"subagent\" | \"todo\" | \"question\" | \"plan\";\n startedAt: number;\n}\n\n/**\n * Tracks Claude `tool_use` blocks until their `tool_result`: regular tools become `tool_call`\n * items, TodoWrite a `todo_list` updated in place, ExitPlanMode a `plan`, Agent/Task a\n * subagent (delegated to `SubagentTracker`), and AskUserQuestion is left to `canUseTool`.\n */\nexport class ToolTracker {\n private readonly tools = new Map<string, ToolState>();\n private readonly todos = new Map<string, { id: string; turnId: string; todos: Todos }>();\n\n constructor(\n private readonly cwd: string,\n private readonly emitItem: EmitItem,\n private readonly subagents: SubagentTracker,\n private readonly newId: () => string,\n ) {}\n\n /** Thread/turn a tool call runs in. */\n ctx(toolUseId: string): ThreadCtx | undefined {\n return this.tools.get(toolUseId)?.ctx;\n }\n\n /** A regular tool started streaming (input not known yet). */\n startStreamed(ctx: ThreadCtx, id: string, name: string): void {\n const item = toolCallItem(id, name, {}, this.cwd);\n this.tools.set(id, { ctx, item, startedAt: Date.now() });\n this.emitItem(ctx, \"item.started\", item);\n }\n\n /** A complete `tool_use` block arrived in an assistant message. */\n onToolUse(ctx: ThreadCtx, id: string, name: string, input: Raw): void {\n const now = Date.now();\n if (SUBAGENT_TOOLS.has(name)) {\n this.tools.set(id, { ctx, special: \"subagent\", startedAt: now });\n this.subagents.start(ctx, id, input);\n return;\n }\n if (name === TODO_TOOL) {\n this.tools.set(id, { ctx, special: \"todo\", startedAt: now });\n this.updateTodos(ctx, input.todos);\n return;\n }\n if (name === QUESTION_TOOL) {\n this.tools.set(id, { ctx, special: \"question\", startedAt: now });\n return;\n }\n if (name === PLAN_TOOL) {\n this.tools.set(id, { ctx, special: \"plan\", startedAt: now });\n const plan = str(input, \"plan\");\n if (plan) {\n this.emitItem(ctx, \"item.completed\", {\n id: `plan-${id}`,\n kind: \"plan\",\n status: \"completed\",\n text: plan,\n });\n }\n return;\n }\n const item = toolCallItem(id, name, input, this.cwd);\n const existing = this.tools.get(id);\n this.tools.set(id, { ctx, item, startedAt: existing?.startedAt ?? now });\n this.emitItem(ctx, existing ? \"item.updated\" : \"item.started\", item);\n }\n\n /** A `tool_result` arrived. */\n onToolResult(\n toolUseId: string,\n content: unknown,\n isError: boolean,\n toolUseResult: unknown,\n ): void {\n const state = this.tools.get(toolUseId);\n if (!state) return;\n this.tools.delete(toolUseId);\n if (state.special === \"subagent\") {\n this.subagents.onToolResult(toolUseId, content, isError, toolUseResult);\n return;\n }\n if (state.special || !state.item) return;\n const done = completeToolCall(state.item, {\n content,\n isError,\n toolUseResult,\n durationMs: Date.now() - state.startedAt,\n });\n this.emitItem(state.ctx, \"item.completed\", done);\n }\n\n /** A thread's turn is ending: cancel open tool calls and complete its todo list. */\n finishTurn(ctx: ThreadCtx, ok: boolean): void {\n for (const [id, state] of this.tools) {\n if (state.ctx.turnId !== ctx.turnId) continue;\n if (state.item) this.emitItem(ctx, \"item.completed\", { ...state.item, status: \"cancelled\" });\n if (state.special !== \"subagent\") this.tools.delete(id);\n }\n const todo = this.todos.get(ctx.threadId);\n if (todo && todo.turnId === ctx.turnId) {\n this.todos.delete(ctx.threadId);\n this.emitItem(ctx, \"item.completed\", {\n id: todo.id,\n kind: \"todo_list\",\n status: ok ? \"completed\" : \"cancelled\",\n todos: todo.todos,\n });\n }\n }\n\n private updateTodos(ctx: ThreadCtx, raw: unknown): void {\n const list = Array.isArray(raw) ? raw : [];\n const todos: Todos = list.map((t, i) => {\n const status = str(t, \"status\");\n return {\n id: String(i + 1),\n text: str(t, \"content\") ?? str(t, \"activeForm\") ?? \"\",\n status: status === \"in_progress\" || status === \"completed\" ? status : \"pending\",\n };\n });\n const existing = this.todos.get(ctx.threadId);\n if (existing && existing.turnId === ctx.turnId) {\n existing.todos = todos;\n this.emitItem(ctx, \"item.updated\", {\n id: existing.id,\n kind: \"todo_list\",\n status: \"in_progress\",\n todos,\n });\n return;\n }\n const id = `todos-${this.newId()}`;\n this.todos.set(ctx.threadId, { id, turnId: ctx.turnId, todos });\n this.emitItem(ctx, \"item.started\", { id, kind: \"todo_list\", status: \"in_progress\", todos });\n }\n}\n","import type { Usage } from \"@codeden/contracts\";\nimport { count, num, str, unixToIso } from \"../util/text\";\n\ninterface ModelUsageEntry {\n inputTokens?: number;\n outputTokens?: number;\n cacheReadInputTokens?: number;\n cacheCreationInputTokens?: number;\n thinkingTokens?: number;\n contextWindow?: number;\n}\n\n/**\n * Usage from a `result` message. `modelUsage` and `total_cost_usd` are cumulative for the whole\n * query (all turns, subagents included), so this reports session totals.\n */\nexport function usageFromResult(result: unknown, contextTokens: number | undefined): Usage {\n const modelUsage = ((result as { modelUsage?: Record<string, ModelUsageEntry> }).modelUsage ??\n {}) as Record<string, ModelUsageEntry>;\n let input = 0;\n let output = 0;\n let cacheRead = 0;\n let cacheWrite = 0;\n let thinking = 0;\n let contextWindow: number | undefined;\n for (const entry of Object.values(modelUsage)) {\n input += entry.inputTokens ?? 0;\n output += entry.outputTokens ?? 0;\n cacheRead += entry.cacheReadInputTokens ?? 0;\n cacheWrite += entry.cacheCreationInputTokens ?? 0;\n thinking += entry.thinkingTokens ?? 0;\n if (entry.contextWindow && entry.contextWindow > (contextWindow ?? 0)) {\n contextWindow = entry.contextWindow;\n }\n }\n const usage: Usage = {\n inputTokens: count(input),\n outputTokens: count(output),\n cachedInputTokens: count(cacheRead),\n cacheWriteTokens: count(cacheWrite),\n reasoningTokens: thinking > 0 ? count(thinking) : undefined,\n contextTokens: count(contextTokens),\n contextWindow: contextWindow && contextWindow > 0 ? Math.round(contextWindow) : undefined,\n costUsd: num(result, \"total_cost_usd\"),\n };\n return stripUndefined(usage);\n}\n\nconst ADDITIVE = [\n \"inputTokens\",\n \"outputTokens\",\n \"cachedInputTokens\",\n \"cacheWriteTokens\",\n \"reasoningTokens\",\n \"costUsd\",\n] as const;\n\n/**\n * One turn's own usage from two running totals of the same query: `total` now minus\n * `baseline` (the total when the turn began; none for the first turn of a process). Fields\n * are clamped at zero, since a running total can dip slightly (compaction). Context size and\n * window are kept from `total`. Pure.\n */\nexport function turnDelta(total: Usage, baseline: Usage | undefined): Usage {\n const out: Usage = { ...total };\n for (const field of ADDITIVE) {\n const now = total[field];\n if (now === undefined) continue;\n const diff = Math.max(0, now - (baseline?.[field] ?? 0));\n out[field] = field === \"costUsd\" ? Math.round(diff * 1e9) / 1e9 : Math.round(diff);\n }\n return out;\n}\n\n/** Tokens occupying the context window, from an assistant message's `usage`. */\nexport function contextTokensFromMessageUsage(usage: unknown): number | undefined {\n if (!usage || typeof usage !== \"object\") return undefined;\n const u = usage as Record<string, unknown>;\n const total =\n (count(u.input_tokens) ?? 0) +\n (count(u.cache_read_input_tokens) ?? 0) +\n (count(u.cache_creation_input_tokens) ?? 0);\n return total > 0 ? total : undefined;\n}\n\nconst WINDOW_IDS: Record<string, string> = {\n five_hour: \"5h\",\n seven_day: \"weekly\",\n seven_day_opus: \"weekly-opus\",\n seven_day_sonnet: \"weekly-sonnet\",\n};\n\n/** Usage carrying the rate-limit state from a `rate_limit_event`. */\nexport function usageFromRateLimit(event: unknown): Usage | undefined {\n const info = (event as { rate_limit_info?: unknown }).rate_limit_info;\n if (!info || typeof info !== \"object\") return undefined;\n const type = str(info, \"rateLimitType\") ?? \"unknown\";\n const rawStatus = str(info, \"status\");\n const status =\n rawStatus === \"rejected\" ? \"limited\" : rawStatus === \"allowed_warning\" ? \"warning\" : \"ok\";\n const utilization = num(info, \"utilization\");\n const usedPercent =\n utilization === undefined\n ? undefined\n : Math.min(100, Math.max(0, utilization <= 1 ? utilization * 100 : utilization));\n const resetsAt = unixToIso(num(info, \"resetsAt\"));\n return {\n rateLimits: [\n stripUndefined({ id: WINDOW_IDS[type] ?? type, status, usedPercent, resetsAt }) as {\n id: string;\n status: \"ok\" | \"warning\" | \"limited\";\n },\n ],\n };\n}\n\nfunction stripUndefined<T extends object>(value: T): T {\n return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined)) as T;\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { AgentEvent, ErrorInfo, Item, Usage } from \"@codeden/contracts\";\nimport { str } from \"../util/text\";\nimport { StreamAssembler } from \"./stream\";\nimport { SubagentTracker, type ThreadCtx } from \"./subagents\";\nimport { ToolTracker } from \"./tool-tracker\";\nimport {\n contextTokensFromMessageUsage,\n turnDelta,\n usageFromRateLimit,\n usageFromResult,\n} from \"./usage\";\n\ntype Raw = Record<string, unknown>;\ntype Block = Raw & { type?: string };\n\nexport type TurnOutcome =\n | { type: \"completed\"; stopReason?: string }\n | { type: \"failed\"; error: ErrorInfo }\n | { type: \"interrupted\"; reason: \"user\" | \"runner_restart\" | \"provider\" };\n\nexport interface MapperOptions {\n sessionId: string;\n cwd: string;\n emit: (event: AgentEvent) => void;\n newId?: () => string;\n}\n\n/**\n * Stateful translator from Claude Agent SDK messages to normalized `AgentEvent`s. Pure with\n * respect to I/O: the session feeds it SDK messages and turn boundaries; it emits events.\n * Root-thread text and tool input stream through `stream_event`s; the full `assistant`\n * message that follows completes the item.\n */\nexport class ClaudeEventMapper {\n readonly rootThreadId: string;\n private readonly emit: (event: AgentEvent) => void;\n private readonly newId: () => string;\n private readonly subagents: SubagentTracker;\n private readonly tools: ToolTracker;\n private rootTurnId: string | undefined;\n private readonly stream: StreamAssembler;\n private contextTokens: number | undefined;\n private interruptRequested = false;\n private claudeSessionId: string | undefined;\n private model: string | undefined;\n /** Running usage total of this query (process), from the latest `result`. */\n private queryTotal: Usage | undefined;\n /** `queryTotal` when the current root turn began. */\n private turnBaseline: Usage | undefined;\n\n constructor(opts: MapperOptions) {\n this.rootThreadId = `${opts.sessionId}:thread-root`;\n this.emit = opts.emit;\n this.newId = opts.newId ?? randomUUID;\n this.subagents = new SubagentTracker(opts.sessionId, this.emit, this.newId, (ctx, ok) =>\n this.tools.finishTurn(ctx, ok),\n );\n this.tools = new ToolTracker(\n opts.cwd,\n (ctx, phase, item) => this.item(ctx, phase, item),\n this.subagents,\n this.newId,\n );\n this.stream = new StreamAssembler({\n rootCtx: () => this.rootCtx(),\n emit: this.emit,\n item: (ctx, phase, item) => this.item(ctx, phase, item),\n tools: this.tools,\n newId: this.newId,\n });\n }\n\n get turnId(): string | undefined {\n return this.rootTurnId;\n }\n\n get resumeToken(): string | undefined {\n return this.claudeSessionId;\n }\n\n /** Emit `thread.started` for the root thread (once, at session open). */\n start(resumeToken?: string): void {\n this.emit({ type: \"thread.started\", thread: { id: this.rootThreadId } });\n if (resumeToken) {\n this.claudeSessionId = resumeToken;\n this.emit({ type: \"session.updated\", resumeToken });\n }\n }\n\n /** Begin a root turn (no-op if one is running). Returns its id. */\n beginTurn(): string {\n if (this.rootTurnId) return this.rootTurnId;\n const turnId = this.newId();\n this.rootTurnId = turnId;\n this.turnBaseline = this.queryTotal;\n this.emit({ type: \"turn.started\", threadId: this.rootThreadId, turnId });\n return turnId;\n }\n\n /** Root context for the current turn, starting an implicit turn if the CLI began one itself. */\n private rootCtx(): ThreadCtx {\n return { threadId: this.rootThreadId, turnId: this.beginTurn() };\n }\n\n /** Thread/turn of the thread a message belongs to (`parent_tool_use_id`). */\n private ctxFor(parentToolUseId: unknown): ThreadCtx {\n if (typeof parentToolUseId === \"string\" && parentToolUseId) {\n const child = this.subagents.ctx(parentToolUseId);\n if (child) return child;\n }\n return this.rootCtx();\n }\n\n /** Thread/turn of a tool call by its `tool_use` id (for approvals). */\n ctxForTool(toolUseId: string): ThreadCtx {\n return this.tools.ctx(toolUseId) ?? this.rootCtx();\n }\n\n /** Emit an item event in a context. */\n item(\n ctx: ThreadCtx,\n phase: \"item.started\" | \"item.updated\" | \"item.completed\",\n item: Item,\n ): void {\n this.emit({ type: phase, threadId: ctx.threadId, turnId: ctx.turnId, item });\n }\n\n /** Feed one SDK message. */\n handle(message: unknown): void {\n const msg = message as Raw;\n switch (msg.type) {\n case \"stream_event\":\n if (!msg.parent_tool_use_id) this.stream.onEvent(msg.event as Raw);\n return;\n case \"assistant\":\n this.onAssistant(msg);\n return;\n case \"user\":\n this.onUser(msg);\n return;\n case \"system\":\n this.onSystem(msg);\n return;\n case \"rate_limit_event\": {\n const usage = usageFromRateLimit(msg);\n if (usage) {\n this.emit({\n type: \"usage.updated\",\n threadId: this.rootThreadId,\n turnId: this.rootTurnId,\n usage,\n });\n }\n return;\n }\n case \"result\":\n this.onResult(msg);\n return;\n default:\n return;\n }\n }\n\n // ------------------------------------------------------------ full messages\n\n private onAssistant(msg: Raw): void {\n const message = (msg.message ?? {}) as Raw;\n const ctx = this.ctxFor(msg.parent_tool_use_id);\n const isRoot = !msg.parent_tool_use_id;\n const messageId = str(message, \"id\") ?? this.newId();\n if (isRoot)\n this.contextTokens = contextTokensFromMessageUsage(message.usage) ?? this.contextTokens;\n const content = Array.isArray(message.content) ? (message.content as Block[]) : [];\n for (const block of content) {\n if (\n block.type === \"text\" ||\n block.type === \"thinking\" ||\n block.type === \"redacted_thinking\"\n ) {\n const type = block.type === \"text\" ? \"text\" : \"thinking\";\n const sb = isRoot ? this.stream.claim(messageId, type) : undefined;\n const id = sb?.itemId ?? `${messageId}:${this.newId().slice(0, 8)}`;\n if (sb) sb.completed = true;\n if (type === \"text\") {\n const text = str(block, \"text\") ?? sb?.text ?? \"\";\n this.item(ctx, \"item.completed\", {\n id,\n kind: \"assistant_message\",\n status: \"completed\",\n text,\n });\n } else {\n const text = str(block, \"thinking\") ?? \"\";\n this.item(ctx, \"item.completed\", {\n id,\n kind: \"reasoning\",\n status: \"completed\",\n text,\n ...(text ? {} : { redacted: true }),\n });\n }\n } else if (block.type === \"tool_use\" || block.type === \"server_tool_use\") {\n if (isRoot) this.stream.claim(messageId, \"tool_use\");\n const id = str(block, \"id\");\n const raw = str(block, \"name\");\n const name = block.type === \"server_tool_use\" && raw === \"web_search\" ? \"WebSearch\" : raw;\n const input = (block.input && typeof block.input === \"object\" ? block.input : {}) as Raw;\n if (id && name) this.tools.onToolUse(ctx, id, name, input);\n } else if (\n typeof block.type === \"string\" &&\n block.type.endsWith(\"_tool_result\") &&\n typeof block.tool_use_id === \"string\"\n ) {\n this.tools.onToolResult(\n block.tool_use_id,\n block.content,\n block.type.includes(\"error\"),\n undefined,\n );\n }\n }\n const error = str(msg, \"error\");\n if (error && !msg.aborted) {\n const text = content\n .map((b) => str(b, \"text\") ?? \"\")\n .join(\"\")\n .trim();\n this.item(ctx, \"item.completed\", {\n id: this.newId(),\n kind: \"error\",\n status: \"completed\",\n error: {\n code: error,\n message: text || `Claude reported an error: ${error}`,\n retryable: error === \"rate_limit\" || error === \"overloaded\" || error === \"server_error\",\n },\n });\n }\n }\n\n private onUser(msg: Raw): void {\n const message = (msg.message ?? {}) as Raw;\n if (!Array.isArray(message.content)) return;\n for (const block of message.content as Block[]) {\n if (block.type === \"tool_result\" && typeof block.tool_use_id === \"string\") {\n this.tools.onToolResult(\n block.tool_use_id,\n block.content,\n block.is_error === true,\n msg.tool_use_result,\n );\n }\n }\n }\n\n private onSystem(msg: Raw): void {\n if (msg.subtype === \"init\") {\n const sessionId = str(msg, \"session_id\");\n const model = str(msg, \"model\");\n if (sessionId !== this.claudeSessionId || model !== this.model) {\n this.claudeSessionId = sessionId ?? this.claudeSessionId;\n this.model = model ?? this.model;\n this.emit({\n type: \"session.updated\",\n resumeToken: this.claudeSessionId,\n model: this.model,\n });\n }\n } else if (msg.subtype === \"task_started\") {\n this.subagents.onTaskStarted(msg);\n } else if (msg.subtype === \"task_notification\") {\n this.subagents.onTaskNotification(msg);\n } else if (msg.subtype === \"compact_boundary\") {\n this.item(this.rootCtx(), \"item.completed\", {\n id: this.newId(),\n kind: \"notice\",\n status: \"completed\",\n level: \"info\",\n code: \"context_compacted\",\n message: \"Context compacted\",\n });\n }\n }\n\n /** The user pressed stop: the next `result` ends the turn as interrupted. */\n requestInterrupt(): void {\n if (this.rootTurnId) this.interruptRequested = true;\n }\n\n private onResult(msg: Raw): void {\n if (!this.rootTurnId) return;\n // `result` carries running totals for the whole query; report this turn's own share.\n const total = usageFromResult(msg, this.contextTokens);\n this.queryTotal = total;\n this.emit({\n type: \"usage.updated\",\n threadId: this.rootThreadId,\n turnId: this.rootTurnId,\n usage: turnDelta(total, this.turnBaseline),\n });\n if (this.interruptRequested) {\n this.endTurn({ type: \"interrupted\", reason: \"user\" });\n return;\n }\n // Queued (steered) input that ran as its own CLI turn still belongs to this CodeDen turn.\n if (typeof msg.queued_turn_count === \"number\" && msg.queued_turn_count > 0) return;\n const subtype = str(msg, \"subtype\");\n if (subtype === \"success\" && msg.is_error !== true) {\n this.endTurn({ type: \"completed\", stopReason: str(msg, \"stop_reason\") ?? \"end_turn\" });\n return;\n }\n const errors = Array.isArray(msg.errors) ? msg.errors.filter((e) => typeof e === \"string\") : [];\n const message =\n errors.join(\"\\n\") || str(msg, \"result\") || `Claude turn ended with ${subtype ?? \"an error\"}`;\n this.endTurn({\n type: \"failed\",\n error: { code: subtype ?? \"error\", message, retryable: subtype === \"error_during_execution\" },\n });\n }\n\n /** Close the root turn: finish dangling items and emit the terminal turn event. */\n endTurn(outcome: TurnOutcome): void {\n const turnId = this.rootTurnId;\n if (!turnId) return;\n const ctx = { threadId: this.rootThreadId, turnId };\n const status = outcome.type === \"completed\" ? \"completed\" : \"cancelled\";\n this.stream.finish(status, (item) => this.item(ctx, \"item.completed\", item));\n if (outcome.type !== \"completed\") this.subagents.interruptForeground(turnId);\n this.tools.finishTurn(ctx, outcome.type === \"completed\");\n this.rootTurnId = undefined;\n this.interruptRequested = false;\n if (outcome.type === \"completed\") {\n this.emit({ type: \"turn.completed\", ...ctx, stopReason: outcome.stopReason });\n } else if (outcome.type === \"failed\") {\n this.emit({ type: \"turn.failed\", ...ctx, error: outcome.error });\n } else {\n this.emit({ type: \"turn.interrupted\", ...ctx, reason: outcome.reason });\n }\n }\n\n /** Session closing: end the running turn and any still-running subagent threads. */\n closeAll(): void {\n if (this.rootTurnId) this.endTurn({ type: \"interrupted\", reason: \"user\" });\n this.subagents.interruptAll();\n }\n}\n","import type {\n CanUseTool,\n HookCallback,\n PermissionResult,\n Query,\n SDKUserMessage,\n} from \"@anthropic-ai/claude-agent-sdk\";\nimport type {\n AgentEvent,\n ItemOf,\n RuntimeResponse,\n SessionOptions,\n UserInput,\n UserQuestion,\n} from \"@codeden/contracts\";\nimport { type ProviderSession, ProviderSessionError, type SessionConfigChange } from \"../adapter\";\nimport { ApprovalBroker } from \"../approvals\";\nimport { AsyncQueue } from \"../async-queue\";\nimport type { ResolvedCommand } from \"../util/exec\";\nimport { explicitModel } from \"../util/model\";\nimport { str, toJson } from \"../util/text\";\nimport { ClaudeEventMapper } from \"./mapper\";\nimport { buildQueryOptions, claudeEffort, toSdkUserMessage } from \"./options\";\nimport { ClaudePolicy } from \"./permissions\";\nimport type { ClaudeSdkModule } from \"./sdk\";\nimport { approvalTitle, QUESTION_TOOL } from \"./tools\";\n\nexport interface ClaudeSessionConfig {\n executable: ResolvedCommand;\n /** Called with the CLI's model list once a session is initialized. */\n onModels?: (models: Awaited<ReturnType<Query[\"supportedModels\"]>>) => void;\n /** The SDK's `query()`, loaded by the adapter (installed on demand in the published build). */\n query: ClaudeSdkModule[\"query\"];\n /** How long to wait for the CLI to confirm an interrupt before forcing the turn closed. */\n interruptTimeoutMs?: number;\n}\n\n/**\n * A Claude Code session over the Agent SDK with streaming input (§7.2). One `query()` per\n * session; turns are user messages pushed into its prompt queue. If the CLI exits, the next\n * `send()` starts a new query that resumes the same Claude session.\n */\nexport class ClaudeSession implements ProviderSession {\n readonly events = new AsyncQueue<AgentEvent>();\n private readonly mapper: ClaudeEventMapper;\n private readonly broker: ApprovalBroker;\n private readonly policy: ClaudePolicy;\n private q: Query | undefined;\n private prompts: AsyncQueue<SDKUserMessage> | undefined;\n private abort: AbortController | undefined;\n private stderrTail = \"\";\n private closed = false;\n\n constructor(\n private readonly opts: SessionOptions,\n private readonly config: ClaudeSessionConfig,\n ) {\n const emit = (event: AgentEvent) => this.events.push(event);\n this.mapper = new ClaudeEventMapper({ sessionId: opts.sessionId, cwd: opts.cwd, emit });\n this.broker = new ApprovalBroker(emit);\n this.policy = new ClaudePolicy(\n opts.autonomy,\n { cwd: opts.cwd, extraRoots: opts.additionalDirectories },\n opts.readOnly,\n );\n this.mapper.start(opts.resumeToken);\n this.ensureQuery();\n }\n\n resumeToken(): string | undefined {\n return this.mapper.resumeToken ?? this.opts.resumeToken;\n }\n\n /** Model/effort for the following turns, applied live through the SDK's streaming query. */\n async configure(change: SessionConfigChange): Promise<void> {\n const q = this.q;\n if (!q) return;\n if (change.model !== undefined) await q.setModel(explicitModel(change.model));\n if (change.effort !== undefined) {\n await q.applyFlagSettings({ effortLevel: claudeEffort(change.effort ?? undefined) ?? null });\n }\n }\n\n async send(input: UserInput): Promise<void> {\n if (this.closed) throw new ProviderSessionError(\"closed\", \"Session is closed\");\n if (this.mapper.turnId)\n throw new ProviderSessionError(\"turn_running\", \"A turn is already running\");\n const message = toSdkUserMessage(input);\n const prompts = this.ensureQuery();\n const turnId = this.mapper.beginTurn();\n this.emitUserMessage(turnId, input);\n prompts.push(message);\n }\n\n /** Queue input into the running turn; the CLI folds it in at the next tool boundary. */\n async steer(input: UserInput): Promise<void> {\n const turnId = this.mapper.turnId;\n if (!turnId || !this.prompts) throw new ProviderSessionError(\"no_turn\", \"No turn is running\");\n const message = toSdkUserMessage(input);\n this.emitUserMessage(turnId, input);\n this.prompts.push(message);\n }\n\n async interrupt(): Promise<void> {\n if (!this.mapper.turnId) return;\n this.mapper.requestInterrupt();\n this.broker.cancelAll();\n const turnId = this.mapper.turnId;\n try {\n await this.q?.interrupt();\n } catch {\n // The CLI may already be gone; the timeout below closes the turn.\n }\n setTimeout(() => {\n if (this.mapper.turnId === turnId)\n this.mapper.endTurn({ type: \"interrupted\", reason: \"user\" });\n }, this.config.interruptTimeoutMs ?? 10_000).unref();\n }\n\n async respond(requestId: string, response: RuntimeResponse): Promise<void> {\n this.broker.respond(requestId, response);\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.broker.cancelAll();\n this.mapper.closeAll();\n this.prompts?.close();\n try {\n this.q?.close();\n } catch {\n this.abort?.abort();\n }\n this.events.close();\n }\n\n // ---------------------------------------------------------------- internals\n\n private emitUserMessage(turnId: string, input: UserInput): void {\n this.mapper.item({ threadId: this.mapper.rootThreadId, turnId }, \"item.completed\", {\n id: `user-${turnId}-${Date.now().toString(36)}`,\n kind: \"user_message\",\n status: \"completed\",\n input,\n });\n }\n\n private ensureQuery(): AsyncQueue<SDKUserMessage> {\n if (this.q && this.prompts) return this.prompts;\n const prompts = new AsyncQueue<SDKUserMessage>();\n const abort = new AbortController();\n const preToolUse: HookCallback = async (hookInput) => {\n const name = str(hookInput, \"tool_name\") ?? \"\";\n const toolInput = ((hookInput as { tool_input?: unknown }).tool_input ?? {}) as Record<\n string,\n unknown\n >;\n const denied = this.policy.denial(name, toolInput);\n if (denied) {\n return {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\",\n permissionDecision: \"deny\",\n permissionDecisionReason: denied,\n },\n };\n }\n const gate = this.policy.gate(name, toolInput);\n if (!gate.ask) return {};\n return {\n hookSpecificOutput: {\n hookEventName: \"PreToolUse\",\n permissionDecision: \"ask\",\n permissionDecisionReason: gate.reason,\n },\n };\n };\n const q = this.config.query({\n prompt: prompts,\n options: buildQueryOptions({\n session: this.opts,\n executable: this.config.executable,\n canUseTool: this.canUseTool,\n hooks: { PreToolUse: [{ hooks: [preToolUse] }] },\n abortController: abort,\n resume: this.resumeToken(),\n stderr: (data) => {\n this.stderrTail = (this.stderrTail + data).slice(-4000);\n },\n }),\n });\n this.q = q;\n this.prompts = prompts;\n this.abort = abort;\n void this.pump(q);\n if (this.config.onModels) {\n q.supportedModels().then(this.config.onModels, () => {});\n }\n return prompts;\n }\n\n private async pump(q: Query): Promise<void> {\n let failure: unknown;\n try {\n for await (const message of q) this.mapper.handle(message);\n } catch (error) {\n failure = error;\n }\n if (this.q === q) {\n this.q = undefined;\n this.prompts = undefined;\n }\n if (this.closed) return;\n this.broker.cancelAll();\n if (this.mapper.turnId) {\n const message =\n failure instanceof Error ? failure.message : \"Claude Code exited unexpectedly\";\n this.mapper.endTurn({\n type: \"failed\",\n error: {\n code: \"provider_exited\",\n message,\n retryable: true,\n ...(this.stderrTail ? { detail: this.stderrTail } : {}),\n },\n });\n }\n }\n\n private readonly canUseTool: CanUseTool = async (toolName, input, options) => {\n if (toolName === QUESTION_TOOL)\n return this.askQuestion(input, options.toolUseID, options.signal);\n const denied = this.policy.denial(toolName, input);\n if (denied) return { behavior: \"deny\", message: denied };\n const gate = this.policy.needsUser(toolName, input);\n if (!gate.ask) return { behavior: \"allow\", updatedInput: input };\n const ctx = this.mapper.ctxForTool(options.toolUseID);\n const item: ItemOf<\"approval_request\"> = {\n id: `approval-${options.requestId ?? options.toolUseID}`,\n kind: \"approval_request\",\n status: \"in_progress\",\n requestId: options.requestId ?? options.toolUseID,\n action: gate.action,\n title: approvalTitle(toolName, input),\n reason:\n options.decisionReason && options.decisionReason !== gate.reason\n ? `${gate.reason}. ${options.decisionReason}`\n : gate.reason,\n toolName,\n toolInput: toJson(input),\n toolCallItemId: options.toolUseID,\n options: [\"allow_once\", \"allow_session\", \"deny\"],\n ...(str(input, \"command\") ? { command: str(input, \"command\"), cwd: this.opts.cwd } : {}),\n ...(str(input, \"file_path\") ? { paths: [str(input, \"file_path\") as string] } : {}),\n };\n const response = await this.broker.request(ctx, item, options.signal);\n return this.toPermissionResult(toolName, input, response);\n };\n\n private toPermissionResult(\n toolName: string,\n input: Record<string, unknown>,\n response: RuntimeResponse,\n ): PermissionResult {\n if (response.kind === \"approval\" && response.decision !== \"deny\") {\n if (response.decision === \"allow_session\") this.policy.allowForSession(toolName, input);\n return { behavior: \"allow\", updatedInput: input };\n }\n if (response.kind === \"approval\") {\n return { behavior: \"deny\", message: response.message ?? \"The user denied this action.\" };\n }\n return { behavior: \"deny\", message: \"The request was cancelled.\", interrupt: true };\n }\n\n private async askQuestion(\n input: Record<string, unknown>,\n toolUseId: string,\n signal: AbortSignal,\n ): Promise<PermissionResult> {\n const raw = Array.isArray(input.questions)\n ? (input.questions as Record<string, unknown>[])\n : [];\n const questions: UserQuestion[] = raw.map((q, i) => ({\n id: `q${i + 1}`,\n header: str(q, \"header\"),\n question: str(q, \"question\") ?? \"\",\n options: (Array.isArray(q.options) ? (q.options as Record<string, unknown>[]) : []).map(\n (o) => ({\n label: str(o, \"label\") ?? \"\",\n ...(str(o, \"description\") ? { description: str(o, \"description\") } : {}),\n }),\n ),\n multiSelect: q.multiSelect === true,\n allowFreeText: true,\n }));\n if (questions.length === 0) return { behavior: \"allow\", updatedInput: input };\n const ctx = this.mapper.ctxForTool(toolUseId);\n const response = await this.broker.request(\n ctx,\n {\n id: `question-${toolUseId}`,\n kind: \"user_question\",\n status: \"in_progress\",\n requestId: toolUseId,\n questions,\n },\n signal,\n );\n if (response.kind !== \"answer\") {\n return { behavior: \"deny\", message: \"The user dismissed the question.\" };\n }\n const answers: Record<string, string> = {};\n for (const q of questions) {\n const picked = response.answers[q.id];\n if (picked?.length) answers[q.question] = picked.join(\", \");\n }\n return { behavior: \"allow\", updatedInput: { ...input, answers } };\n }\n}\n","import type {\n ModelInfo,\n ProviderCapabilities,\n ProviderStatus,\n ReasoningEffort,\n SessionOptions,\n} from \"@codeden/contracts\";\nimport type { ProviderAdapter, ProviderSession } from \"../adapter\";\nimport { type ResolvedCommand, resolveExecutable } from \"../util/exec\";\nimport type { UtilityModel } from \"../utility\";\nimport { detectClaude } from \"./detect\";\nimport { ClaudeUtilityModel } from \"./one-shot\";\nimport { loadClaudeSdk } from \"./sdk\";\nimport { ClaudeSession } from \"./session\";\n\nexport const CLAUDE_PROVIDER_ID = \"claude\";\n\nconst capabilities: ProviderCapabilities = {\n resume: true,\n steer: true,\n interrupt: true,\n approvals: true,\n userQuestions: true,\n subagents: true,\n rollback: false,\n fork: false,\n images: true,\n planMode: true,\n reasoningEffort: true,\n mcp: true,\n skills: true,\n};\n\nconst EFFORTS: ReasoningEffort[] = [\"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\n\n/** Fallback model list (CLI aliases) until a session reports the real one. */\nconst FALLBACK_MODELS: ModelInfo[] = [\n {\n id: \"default\",\n label: \"Default\",\n description: \"Claude Code's default model\",\n efforts: EFFORTS,\n isDefault: true,\n },\n { id: \"opus\", label: \"Opus\", efforts: EFFORTS },\n { id: \"sonnet\", label: \"Sonnet\", efforts: EFFORTS },\n { id: \"haiku\", label: \"Haiku\", efforts: [] },\n];\n\nexport interface ClaudeAdapterOptions {\n /** Override executable resolution (tests, custom installs). */\n executable?: ResolvedCommand;\n}\n\n/** Claude Code through the Claude Agent SDK and the user's installed `claude` (§7.2). */\nexport class ClaudeAdapter implements ProviderAdapter {\n readonly id = CLAUDE_PROVIDER_ID;\n readonly displayName = \"Claude Code\";\n private modelList: ModelInfo[] = FALLBACK_MODELS;\n private cachedExe: ResolvedCommand | undefined;\n\n constructor(private readonly options: ClaudeAdapterOptions = {}) {}\n\n private executable(): ResolvedCommand | undefined {\n this.cachedExe ??= this.options.executable ?? resolveExecutable(\"claude\");\n return this.cachedExe;\n }\n\n detect(): Promise<ProviderStatus> {\n this.cachedExe = undefined;\n return detectClaude({ executable: this.executable() });\n }\n\n capabilities(): ProviderCapabilities {\n return { ...capabilities };\n }\n\n models(): ModelInfo[] {\n return this.modelList.map((m) => ({ ...m }));\n }\n\n async openSession(opts: SessionOptions): Promise<ProviderSession> {\n const executable = this.executable();\n if (!executable) throw new Error(\"Claude Code is not installed (no `claude` on PATH)\");\n const { query } = await loadClaudeSdk();\n return new ClaudeSession(opts, {\n executable,\n query,\n onModels: (models) => {\n if (!models.length) return;\n this.modelList = models.map((m, i) => ({\n id: m.value,\n label: m.displayName || m.value,\n ...(m.description ? { description: m.description } : {}),\n efforts: (m.supportedEffortLevels ?? []) as ReasoningEffort[],\n ...(i === 0 ? { isDefault: true } : {}),\n }));\n },\n });\n }\n\n utilityModel(): UtilityModel {\n return new ClaudeUtilityModel(() => this.executable());\n }\n}\n","import type { ProviderIssue, ProviderStatus } from \"@codeden/contracts\";\nimport { type ResolvedCommand, resolveExecutable, runCommand } from \"../util/exec\";\nimport { compareVersions, parseVersion } from \"../util/version\";\n\n/** Oldest Codex version whose app-server protocol matches the generated types. */\nexport const CODEX_MIN_VERSION = \"0.160.0\";\n\nexport interface CodexDetectOptions {\n executable?: ResolvedCommand;\n timeoutMs?: number;\n}\n\n/** `codex --version` + `codex login status` (§14). Never throws. */\nexport async function detectCodex(opts: CodexDetectOptions = {}): Promise<ProviderStatus> {\n const status: ProviderStatus = {\n providerId: \"codex\",\n installed: false,\n version: null,\n executablePath: null,\n loggedIn: null,\n authMethod: null,\n account: null,\n loginExpiresAt: null,\n supported: false,\n issues: [],\n checkedAt: new Date().toISOString(),\n };\n const issues: ProviderIssue[] = [];\n const exe = opts.executable ?? resolveExecutable(\"codex\");\n if (!exe) {\n issues.push({\n code: \"not_installed\",\n message: \"Codex is not installed (no `codex` on PATH).\",\n fix: { kind: \"install\", command: \"npm install -g @openai/codex\" },\n });\n return { ...status, issues };\n }\n const timeoutMs = opts.timeoutMs ?? 15_000;\n const versionRun = await runCommand(exe, [\"--version\"], { timeoutMs });\n const version = parseVersion(versionRun.stdout);\n if (versionRun.error || !version) {\n issues.push({\n code: \"detect_failed\",\n message: `Could not run \\`codex --version\\`: ${versionRun.error?.message ?? (versionRun.timedOut ? \"timed out\" : versionRun.stderr.trim() || \"no version in output\")}`,\n });\n return { ...status, executablePath: exe.path, issues };\n }\n const supported = compareVersions(version, CODEX_MIN_VERSION) >= 0;\n if (!supported) {\n issues.push({\n code: \"version_unsupported\",\n message: `Codex ${version} is older than the tested minimum ${CODEX_MIN_VERSION}.`,\n fix: { kind: \"upgrade\", command: \"npm install -g @openai/codex@latest\" },\n });\n }\n const login = await runCommand(exe, [\"login\", \"status\"], { timeoutMs });\n const auth = parseCodexLoginStatus(`${login.stdout}\\n${login.stderr}`, login.code);\n if (auth.loggedIn === false) {\n issues.push({\n code: \"not_logged_in\",\n message: \"Codex is not logged in.\",\n fix: { kind: \"login\", command: \"codex login\" },\n });\n } else if (auth.loggedIn === null) {\n issues.push({ code: \"detect_failed\", message: \"Could not read `codex login status`.\" });\n }\n return {\n ...status,\n installed: true,\n version,\n executablePath: exe.kind === \"node-script\" ? exe.script : exe.path,\n supported,\n loggedIn: auth.loggedIn,\n authMethod: auth.authMethod,\n issues,\n };\n}\n\n/** Parse `codex login status` text, e.g. `Logged in using ChatGPT` / `Not logged in`. */\nexport function parseCodexLoginStatus(\n output: string,\n exitCode: number | null,\n): { loggedIn: boolean | null; authMethod: string | null } {\n if (/not logged in/i.test(output)) return { loggedIn: false, authMethod: null };\n const m = /logged in(?: using| with)?\\s+(?:an?\\s+)?([^\\r\\n]+)/i.exec(output);\n if (m) {\n const raw = (m[1] ?? \"\").trim().toLowerCase();\n const authMethod = raw.includes(\"chatgpt\")\n ? \"chatgpt\"\n : raw.includes(\"api key\")\n ? \"api_key\"\n : raw || null;\n return { loggedIn: true, authMethod };\n }\n if (exitCode !== null && exitCode !== 0 && output.trim())\n return { loggedIn: false, authMethod: null };\n return { loggedIn: null, authMethod: null };\n}\n","import type { ChildProcess } from \"node:child_process\";\nimport { createInterface } from \"node:readline\";\nimport { killTree } from \"../util/exec\";\nimport type { ClientRequest, RequestId, ServerNotification, ServerRequest } from \"./protocol\";\n\n/** A JSON-RPC error returned by the app-server. */\nexport class CodexRpcError extends Error {\n constructor(\n readonly code: number,\n message: string,\n readonly data?: unknown,\n ) {\n super(message);\n this.name = \"CodexRpcError\";\n }\n}\n\nexport interface CodexRpcHandlers {\n onNotification: (notification: ServerNotification) => void;\n /** Server -> client request; resolve with the result (or throw to send an error). */\n onRequest: (request: ServerRequest) => Promise<unknown>;\n onExit: (code: number | null, stderrTail: string) => void;\n}\n\ntype ClientMethod = ClientRequest[\"method\"];\ntype ParamsOf<M extends ClientMethod> = Extract<ClientRequest, { method: M }>[\"params\"];\n\n/**\n * JSON-RPC over the `codex app-server` stdio transport: one JSON message per line, no\n * `jsonrpc` field. Ids are numbers we allocate; server requests carry their own ids (which\n * start at 0, so never test them for truthiness).\n */\nexport class CodexRpc {\n private nextId = 1;\n private readonly pending = new Map<\n number,\n { resolve: (v: unknown) => void; reject: (e: Error) => void }\n >();\n private stderrTail = \"\";\n private exited = false;\n\n constructor(\n private readonly child: ChildProcess,\n private readonly handlers: CodexRpcHandlers,\n ) {\n const stdout = child.stdout;\n if (!stdout || !child.stdin) throw new Error(\"codex app-server needs piped stdio\");\n createInterface({ input: stdout }).on(\"line\", (line) => this.onLine(line));\n child.stderr?.setEncoding(\"utf8\").on(\"data\", (d: string) => {\n this.stderrTail = (this.stderrTail + d).slice(-4000);\n });\n child.stdin.on(\"error\", () => {});\n child.on(\"exit\", (code) => this.onExit(code));\n child.on(\"error\", (error) => {\n this.stderrTail += `\\n${error.message}`;\n this.onExit(null);\n });\n }\n\n get isClosed(): boolean {\n return this.exited;\n }\n\n request<T, M extends ClientMethod = ClientMethod>(method: M, params: ParamsOf<M>): Promise<T> {\n if (this.exited)\n return Promise.reject(new CodexRpcError(-32000, \"codex app-server is not running\"));\n const id = this.nextId++;\n return new Promise<T>((resolve, reject) => {\n this.pending.set(id, { resolve: resolve as (v: unknown) => void, reject });\n this.write({ id, method, params });\n });\n }\n\n notify(method: string, params?: unknown): void {\n this.write(params === undefined ? { method } : { method, params });\n }\n\n /**\n * Stop the server: close stdin, then kill the process tree if it lingers. Resolves once the\n * process has exited (a thread can only have one writer, so a resume must wait for this).\n */\n close(): Promise<void> {\n if (this.exited) return Promise.resolve();\n const exited = new Promise<void>((resolve) => {\n this.child.once(\"exit\", () => resolve());\n const hardStop = setTimeout(() => resolve(), 5000);\n hardStop.unref();\n });\n try {\n this.child.stdin?.end();\n } catch {\n // ignore\n }\n setTimeout(() => {\n if (!this.exited) killTree(this.child);\n }, 1500).unref();\n return exited;\n }\n\n private write(message: object): void {\n if (this.exited) return;\n this.child.stdin?.write(`${JSON.stringify(message)}\\n`);\n }\n\n private onLine(line: string): void {\n if (!line.trim()) return;\n let msg: Record<string, unknown>;\n try {\n msg = JSON.parse(line) as Record<string, unknown>;\n } catch {\n return;\n }\n const hasId = msg.id !== undefined && msg.id !== null;\n if (hasId && typeof msg.method === \"string\") {\n void this.answer(msg as unknown as ServerRequest);\n } else if (hasId) {\n const pending = this.pending.get(msg.id as number);\n if (!pending) return;\n this.pending.delete(msg.id as number);\n const error = msg.error as { code?: number; message?: string; data?: unknown } | undefined;\n if (error)\n pending.reject(\n new CodexRpcError(error.code ?? -32000, error.message ?? \"Request failed\", error.data),\n );\n else pending.resolve(msg.result);\n } else if (typeof msg.method === \"string\") {\n this.handlers.onNotification(msg as unknown as ServerNotification);\n }\n }\n\n private async answer(request: ServerRequest): Promise<void> {\n const id: RequestId = request.id;\n try {\n const result = await this.handlers.onRequest(request);\n this.write({ id, result });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const code = error instanceof CodexRpcError ? error.code : -32603;\n this.write({ id, error: { code, message } });\n }\n }\n\n private onExit(code: number | null): void {\n if (this.exited) return;\n this.exited = true;\n const error = new CodexRpcError(-32000, `codex app-server exited (code ${code ?? \"unknown\"})`);\n for (const pending of this.pending.values()) pending.reject(error);\n this.pending.clear();\n this.handlers.onExit(code, this.stderrTail);\n }\n}\n","import { CODEDEN_VERSION } from \"@codeden/contracts\";\nimport { type ResolvedCommand, spawnResolved } from \"../util/exec\";\nimport type { InitializeParams, InitializeResponse } from \"./protocol\";\nimport { CodexRpc, type CodexRpcHandlers } from \"./rpc\";\n\n/** Notifications CodeDen never uses; opting out keeps the stdio stream small. */\nconst OPT_OUT = [\n \"rawResponseItem/completed\",\n \"rawResponse/completed\",\n \"remoteControl/status/changed\",\n \"fuzzyFileSearch/sessionUpdated\",\n \"fuzzyFileSearch/sessionCompleted\",\n];\n\n/** Spawn `codex app-server` (stdio) and complete the `initialize` handshake. */\nexport async function startAppServer(\n exe: ResolvedCommand,\n handlers: CodexRpcHandlers,\n opts: { env?: Record<string, string>; cwd?: string } = {},\n): Promise<{ rpc: CodexRpc; info: InitializeResponse }> {\n const child = spawnResolved(exe, [\"app-server\"], {\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n env: { ...process.env, ...opts.env },\n ...(opts.cwd ? { cwd: opts.cwd } : {}),\n });\n const rpc = new CodexRpc(child, handlers);\n const params: InitializeParams = {\n clientInfo: { name: \"codeden\", title: \"CodeDen\", version: CODEDEN_VERSION },\n capabilities: {\n experimentalApi: false,\n requestAttestation: false,\n optOutNotificationMethods: OPT_OUT,\n },\n };\n try {\n const info = await rpc.request<InitializeResponse>(\"initialize\", params);\n rpc.notify(\"initialized\");\n return { rpc, info };\n } catch (error) {\n rpc.close();\n throw error;\n }\n}\n","import { tmpdir } from \"node:os\";\nimport type { ResolvedCommand } from \"../util/exec\";\nimport { explicitModel } from \"../util/model\";\nimport { type OneShotRequest, oneShotSignal, type UtilityModel } from \"../utility\";\nimport { startAppServer } from \"./process\";\nimport type { ServerNotification } from \"./protocol\";\nimport type { ThreadStartResponse } from \"./protocol/v2\";\n\n/** Empty string = the user's configured Codex model. */\nexport const CODEX_UTILITY_MODEL = \"\";\n\n/**\n * One-shot Codex call for the utility model: an ephemeral thread in a read-only sandbox with\n * approvals off, low reasoning effort, and no MCP servers. Returns the final agent message.\n */\nexport class CodexUtilityModel implements UtilityModel {\n readonly providerId = \"codex\";\n readonly defaultModel = CODEX_UTILITY_MODEL;\n\n constructor(private readonly resolveExecutable: () => ResolvedCommand | undefined) {}\n\n async runOneShot(request: OneShotRequest): Promise<string> {\n const exe = this.resolveExecutable();\n if (!exe) throw new Error(\"Codex is not installed\");\n const { signal, dispose } = oneShotSignal(request);\n let finish: (text: string) => void = () => {};\n let fail: (error: Error) => void = () => {};\n const done = new Promise<string>((resolve, reject) => {\n finish = resolve;\n fail = reject;\n });\n let threadId: string | undefined;\n let last = \"\";\n const onNotification = (n: ServerNotification) => {\n if (\n n.method === \"item/completed\" &&\n n.params.item.type === \"agentMessage\" &&\n n.params.threadId === threadId\n ) {\n last = n.params.item.text;\n } else if (n.method === \"turn/completed\" && n.params.threadId === threadId) {\n if (n.params.turn.status === \"completed\") finish(last.trim());\n else\n fail(new Error(n.params.turn.error?.message ?? `Utility turn ${n.params.turn.status}`));\n }\n };\n const { rpc } = await startAppServer(\n exe,\n {\n onNotification,\n onRequest: async () => ({ decision: \"decline\" }),\n onExit: (code) => fail(new Error(`codex app-server exited (code ${code ?? \"unknown\"})`)),\n },\n { cwd: tmpdir() },\n );\n const onAbort = () =>\n fail(signal.reason instanceof Error ? signal.reason : new Error(\"Aborted\"));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n try {\n const model = explicitModel(request.model ?? CODEX_UTILITY_MODEL);\n const thread = await rpc.request<ThreadStartResponse>(\"thread/start\", {\n cwd: tmpdir(),\n ephemeral: true,\n approvalPolicy: \"never\",\n sandbox: \"read-only\",\n ...(model ? { model } : {}),\n config: { mcp_servers: {} },\n ...(request.system ? { baseInstructions: request.system } : {}),\n });\n threadId = thread.thread.id;\n await rpc.request(\"turn/start\", {\n threadId,\n input: [{ type: \"text\", text: request.prompt, text_elements: [] }],\n effort: \"low\",\n });\n return await done;\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n dispose();\n rpc.close();\n }\n }\n}\n","import type { ItemOf, RuntimeResponse, UserQuestion } from \"@codeden/contracts\";\nimport type { ApprovalBroker, ItemCtx } from \"../approvals\";\nimport { classifyCommand, type RiskContext } from \"../policy/risk\";\nimport { shorten } from \"../util/text\";\nimport type { ServerRequest } from \"./protocol\";\nimport type {\n CommandExecutionApprovalDecision,\n FileChangeApprovalDecision,\n ToolRequestUserInputResponse,\n} from \"./protocol/v2\";\nimport { CodexRpcError } from \"./rpc\";\n\nexport interface ApprovalContext {\n broker: ApprovalBroker;\n risk: RiskContext;\n /** Context for an item: the thread/turn the request belongs to. */\n ctx: (turnId: string) => ItemCtx;\n /** Paths touched by a pending file change item, if known. */\n filePaths: (itemId: string) => string[] | undefined;\n}\n\nconst decisionOf = (r: RuntimeResponse) => (r.kind === \"approval\" ? r.decision : \"cancel\");\n\n/** Handle an app-server -> client request. Resolves with the JSON-RPC result. */\nexport async function handleServerRequest(\n req: ServerRequest,\n ac: ApprovalContext,\n): Promise<unknown> {\n switch (req.method) {\n case \"item/commandExecution/requestApproval\": {\n const p = req.params;\n const command = p.commandActions?.length\n ? p.commandActions.map((a) => a.command).join(\" && \")\n : (p.command ?? \"\");\n const risk = classifyCommand(command, ac.risk);\n const item: ItemOf<\"approval_request\"> = {\n id: `approval-${p.approvalId ?? p.itemId}`,\n kind: \"approval_request\",\n status: \"in_progress\",\n requestId: p.approvalId ?? p.itemId,\n action: p.networkApprovalContext ? \"network\" : risk.risky ? risk.action : \"command\",\n title: command ? `Run \\`${shorten(command, 100)}\\`` : \"Run a command\",\n ...(p.reason || risk.risky\n ? { reason: p.reason ?? (risk.risky ? risk.reason : undefined) }\n : {}),\n ...(command ? { command } : {}),\n ...(p.cwd ? { cwd: p.cwd } : {}),\n toolName: \"shell\",\n toolCallItemId: p.itemId,\n options: [\"allow_once\", \"allow_session\", \"deny\"],\n };\n const response = await ac.broker.request(ac.ctx(p.turnId), item);\n const map: Record<string, CommandExecutionApprovalDecision> = {\n allow_once: \"accept\",\n allow_session: \"acceptForSession\",\n deny: \"decline\",\n cancel: \"cancel\",\n };\n return { decision: map[decisionOf(response)] ?? \"cancel\" };\n }\n case \"item/fileChange/requestApproval\": {\n const p = req.params;\n const paths = ac.filePaths(p.itemId) ?? [];\n const item: ItemOf<\"approval_request\"> = {\n id: `approval-${p.itemId}`,\n kind: \"approval_request\",\n status: \"in_progress\",\n requestId: p.itemId,\n action: p.grantRoot ? \"outside_worktree\" : \"file_change\",\n title:\n paths.length === 1\n ? `Edit ${paths[0]}`\n : paths.length\n ? `Edit ${paths.length} files`\n : \"Apply a patch\",\n ...(p.reason ? { reason: p.reason } : {}),\n ...(paths.length ? { paths } : {}),\n toolName: \"apply_patch\",\n toolCallItemId: p.itemId,\n options: [\"allow_once\", \"allow_session\", \"deny\"],\n };\n const response = await ac.broker.request(ac.ctx(p.turnId), item);\n const map: Record<string, FileChangeApprovalDecision> = {\n allow_once: \"accept\",\n allow_session: \"acceptForSession\",\n deny: \"decline\",\n cancel: \"cancel\",\n };\n return { decision: map[decisionOf(response)] ?? \"cancel\" };\n }\n case \"item/permissions/requestApproval\": {\n const p = req.params;\n const response = await ac.broker.request(ac.ctx(p.turnId), {\n id: `approval-${p.itemId}`,\n kind: \"approval_request\",\n status: \"in_progress\",\n requestId: p.itemId,\n action: p.permissions.network ? \"network\" : \"outside_worktree\",\n title: \"Grant additional permissions\",\n ...(p.reason ? { reason: p.reason } : {}),\n cwd: p.cwd,\n toolInput: JSON.parse(JSON.stringify(p.permissions)),\n options: [\"allow_once\", \"allow_session\", \"deny\"],\n });\n const decision = decisionOf(response);\n if (decision === \"allow_once\" || decision === \"allow_session\") {\n return {\n permissions: {\n ...(p.permissions.network ? { network: p.permissions.network } : {}),\n ...(p.permissions.fileSystem ? { fileSystem: p.permissions.fileSystem } : {}),\n },\n scope: decision === \"allow_session\" ? \"session\" : \"turn\",\n };\n }\n return { permissions: {}, scope: \"turn\" };\n }\n case \"item/tool/requestUserInput\": {\n const p = req.params;\n const questions: UserQuestion[] = p.questions.map((q) => ({\n id: q.id,\n header: q.header,\n question: q.question,\n options: (q.options ?? []).map((o) => ({ label: o.label, description: o.description })),\n multiSelect: false,\n allowFreeText: q.isOther || !q.options?.length,\n }));\n const response = await ac.broker.request(ac.ctx(p.turnId), {\n id: `question-${p.itemId}`,\n kind: \"user_question\",\n status: \"in_progress\",\n requestId: p.itemId,\n questions,\n });\n const answers: ToolRequestUserInputResponse[\"answers\"] = {};\n if (response.kind === \"answer\") {\n for (const [id, values] of Object.entries(response.answers))\n answers[id] = { answers: values };\n }\n return { answers };\n }\n case \"mcpServer/elicitation/request\":\n return { action: \"decline\", content: null, _meta: null };\n case \"execCommandApproval\":\n case \"applyPatchApproval\":\n // Legacy v1 approvals; v2 clients never receive them, but never leave the agent hanging.\n return { decision: { denied: { rejection: \"Unsupported approval request\" } } };\n default:\n throw new CodexRpcError(-32601, `CodeDen does not handle ${req.method}`);\n }\n}\n","import type { AutonomyLevel, McpServerConfig, SessionOptions, UserInput } from \"@codeden/contracts\";\nimport type { JsonValue } from \"./protocol/serde_json/JsonValue\";\nimport type { AskForApproval, UserInput as CodexUserInput, SandboxMode } from \"./protocol/v2\";\n\n/**\n * Native sandbox + approval policy per autonomy level (§11.2):\n * - supervised -> `untrusted`: every command that isn't known-safe and every patch asks\n * - auto -> workspace-write sandbox + `on-request`: the sandbox confines writes and\n * network; escaping it (outside the worktree, network, force pushes) asks\n * - full -> workspace-write + `never`, with network on: no approvals, still confined\n * to the worktree\n */\nexport function codexPolicy(\n autonomy: AutonomyLevel,\n readOnly = false,\n): {\n approvalPolicy: AskForApproval;\n sandbox: SandboxMode;\n networkAccess: boolean;\n} {\n // Read-only sessions (orchestrator, PMs, §11.2): the sandbox refuses every write.\n if (readOnly) return { approvalPolicy: \"never\", sandbox: \"read-only\", networkAccess: false };\n if (autonomy === \"supervised\")\n return { approvalPolicy: \"untrusted\", sandbox: \"workspace-write\", networkAccess: false };\n if (autonomy === \"auto\")\n return { approvalPolicy: \"on-request\", sandbox: \"workspace-write\", networkAccess: false };\n return { approvalPolicy: \"never\", sandbox: \"workspace-write\", networkAccess: true };\n}\n\n/**\n * Config overrides for `thread/start` / `thread/resume` (same semantics as `-c key=value`).\n * Sent over stdin as JSON, so MCP bearer tokens never appear on a command line.\n */\nexport function codexConfigOverrides(opts: SessionOptions): Record<string, JsonValue> {\n const { networkAccess } = codexPolicy(opts.autonomy, opts.readOnly);\n const config: Record<string, JsonValue> = {\n \"sandbox_workspace_write.network_access\": networkAccess,\n };\n if (opts.additionalDirectories.length) {\n config[\"sandbox_workspace_write.writable_roots\"] = [...opts.additionalDirectories];\n }\n for (const server of opts.mcpServers) Object.assign(config, mcpOverride(server));\n return config;\n}\n\n/** One MCP server as a `mcp_servers.<name>` override. */\nexport function mcpOverride(server: McpServerConfig): Record<string, JsonValue> {\n const key = `mcp_servers.${server.name}`;\n if (server.transport === \"http\") {\n return {\n [key]: {\n url: server.url,\n ...(server.headers ? { http_headers: server.headers } : {}),\n ...(server.toolTimeoutSec ? { tool_timeout_sec: server.toolTimeoutSec } : {}),\n // CodeDen's own tools run without per-call approval prompts.\n ...(server.trusted ? { default_tools_approval_mode: \"approve\" } : {}),\n },\n };\n }\n return {\n [key]: {\n command: server.command,\n args: server.args,\n ...(server.env ? { env: server.env } : {}),\n },\n };\n}\n\n/** CodeDen `UserInput` -> Codex turn input. */\nexport function toCodexInput(input: UserInput): CodexUserInput[] {\n const parts: CodexUserInput[] = [{ type: \"text\", text: input.text, text_elements: [] }];\n for (const attachment of input.attachments) {\n if (attachment.type === \"file\") {\n parts.push({\n type: \"mention\",\n name: attachment.name ?? attachment.path,\n path: attachment.path,\n });\n continue;\n }\n const source = attachment.source;\n if (source.type === \"path\") parts.push({ type: \"localImage\", path: source.path });\n else if (source.type === \"base64\") {\n parts.push({ type: \"image\", url: `data:${attachment.mediaType};base64,${source.data}` });\n } else {\n throw new Error(\"Artifact attachments must be resolved to a path or base64 before sending\");\n }\n }\n return parts;\n}\n","import type { Attachment, FileChange, Item, ItemStatus, ToolCallItem } from \"@codeden/contracts\";\nimport { shorten, toJson, toolOutput } from \"../util/text\";\nimport type { UserInput as CodexUserInput, FileUpdateChange, ThreadItem } from \"./protocol/v2\";\n\n/** Codex item status -> CodeDen item status. */\nexport function itemStatus(status: string | undefined): ItemStatus {\n switch (status) {\n case \"inProgress\":\n return \"in_progress\";\n case \"failed\":\n return \"failed\";\n case \"declined\":\n return \"declined\";\n case \"interrupted\":\n return \"cancelled\";\n default:\n return \"completed\";\n }\n}\n\n/** Codex user input -> CodeDen `UserInput`. */\nexport function userInputFromCodex(content: CodexUserInput[]): {\n text: string;\n attachments: Attachment[];\n} {\n const text: string[] = [];\n const attachments: Attachment[] = [];\n for (const part of content) {\n if (part.type === \"text\") text.push(part.text);\n else if (part.type === \"localImage\") {\n attachments.push({\n type: \"image\",\n mediaType: mediaTypeFor(part.path),\n source: { type: \"path\", path: part.path },\n });\n } else if (part.type === \"mention\" || part.type === \"skill\") {\n attachments.push({ type: \"file\", path: part.path, name: part.name });\n }\n }\n return { text: text.join(\"\\n\"), attachments };\n}\n\nfunction mediaTypeFor(path: string): \"image/png\" | \"image/jpeg\" | \"image/gif\" | \"image/webp\" {\n const lower = path.toLowerCase();\n if (lower.endsWith(\".jpg\") || lower.endsWith(\".jpeg\")) return \"image/jpeg\";\n if (lower.endsWith(\".gif\")) return \"image/gif\";\n if (lower.endsWith(\".webp\")) return \"image/webp\";\n return \"image/png\";\n}\n\nfunction fileChange(change: FileUpdateChange): FileChange {\n let additions = 0;\n let deletions = 0;\n for (const line of change.diff.split(\"\\n\")) {\n if (line.startsWith(\"+\") && !line.startsWith(\"+++\")) additions += 1;\n else if (line.startsWith(\"-\") && !line.startsWith(\"---\")) deletions += 1;\n }\n const kind = change.kind;\n const base = { path: change.path, diff: change.diff, additions, deletions };\n if (kind.type === \"add\")\n return {\n ...base,\n change: \"add\",\n additions: additions || change.diff.split(\"\\n\").filter(Boolean).length,\n };\n if (kind.type === \"delete\") return { ...base, change: \"delete\" };\n if (kind.move_path)\n return { ...base, change: \"rename\", previousPath: change.path, path: kind.move_path };\n return { ...base, change: \"modify\" };\n}\n\nfunction commandItem(item: Extract<ThreadItem, { type: \"commandExecution\" }>): ToolCallItem {\n const status = itemStatus(item.status);\n const actions = item.commandActions ?? [];\n const display = actions.length ? actions.map((a) => a.command).join(\" && \") : item.command;\n const base = {\n id: item.id,\n kind: \"tool_call\" as const,\n status:\n status === \"completed\" && item.exitCode !== null && item.exitCode !== 0\n ? (\"failed\" as const)\n : status,\n toolName: \"shell\",\n input: toJson({ command: item.command, commandActions: actions }),\n ...(item.aggregatedOutput !== null ? { output: toolOutput(item.aggregatedOutput) } : {}),\n ...(item.durationMs !== null ? { durationMs: Math.max(0, Math.round(item.durationMs)) } : {}),\n };\n const single = actions.length === 1 ? actions[0] : undefined;\n if (single?.type === \"read\") {\n return {\n ...base,\n toolKind: \"file_read\",\n path: single.path,\n title: `Read ${single.name || single.path}`,\n };\n }\n if (single?.type === \"search\" || single?.type === \"listFiles\") {\n const query = single.type === \"search\" ? (single.query ?? single.command) : single.command;\n return {\n ...base,\n toolKind: \"search\",\n query,\n ...(single.path ? { path: single.path } : {}),\n title: shorten(single.command, 80),\n };\n }\n return {\n ...base,\n toolKind: \"command\",\n command: display,\n cwd: item.cwd,\n exitCode: item.exitCode,\n title: `Run ${shorten(display, 60)}`,\n };\n}\n\n/** Map a Codex `ThreadItem` to a CodeDen item. Returns `undefined` for items CodeDen doesn't show. */\nexport function mapThreadItem(item: ThreadItem): Item | undefined {\n switch (item.type) {\n case \"userMessage\":\n return {\n id: item.id,\n kind: \"user_message\",\n status: \"completed\",\n input: userInputFromCodex(item.content),\n };\n case \"agentMessage\":\n return { id: item.id, kind: \"assistant_message\", status: \"completed\", text: item.text };\n case \"reasoning\": {\n const text = item.content.join(\"\\n\");\n const summary = item.summary.join(\"\\n\");\n return {\n id: item.id,\n kind: \"reasoning\",\n status: \"completed\",\n text,\n ...(summary ? { summary } : {}),\n ...(!text && !summary ? { redacted: true } : {}),\n };\n }\n case \"plan\":\n return { id: item.id, kind: \"plan\", status: \"completed\", text: item.text };\n case \"commandExecution\":\n return commandItem(item);\n case \"fileChange\": {\n const changes = item.changes.map(fileChange);\n const title =\n changes.length === 1\n ? `Edit ${changes[0]?.path.replace(/\\\\/g, \"/\").split(\"/\").pop()}`\n : `Edit ${changes.length} files`;\n return {\n id: item.id,\n kind: \"tool_call\",\n toolKind: \"file_edit\",\n status: itemStatus(item.status),\n toolName: \"apply_patch\",\n title,\n changes,\n };\n }\n case \"mcpToolCall\": {\n const text = item.result ? mcpResultText(item.result.content) : \"\";\n return {\n id: item.id,\n kind: \"tool_call\",\n toolKind: \"mcp\",\n status: itemStatus(item.status),\n toolName: `mcp__${item.server}__${item.tool}`,\n server: item.server,\n tool: item.tool,\n title: `${item.server}: ${item.tool}`,\n input: toJson(item.arguments),\n ...(item.result ? { output: toolOutput(text) } : {}),\n ...(item.error ? { error: { message: item.error.message } } : {}),\n ...(item.durationMs !== null\n ? { durationMs: Math.max(0, Math.round(item.durationMs)) }\n : {}),\n };\n }\n case \"dynamicToolCall\":\n return {\n id: item.id,\n kind: \"tool_call\",\n toolKind: \"other\",\n status: itemStatus(item.status),\n toolName: item.tool,\n title: item.tool,\n input: toJson(item.arguments),\n };\n case \"collabAgentToolCall\":\n return {\n id: item.id,\n kind: \"tool_call\",\n toolKind: \"other\",\n status: itemStatus(item.status),\n toolName: `agent.${item.tool}`,\n title: `Agent: ${item.tool}`,\n input: toJson({ prompt: item.prompt, receiverThreadIds: item.receiverThreadIds }),\n };\n case \"webSearch\": {\n const action = item.action;\n const url = action && \"url\" in action ? (action.url ?? undefined) : undefined;\n return {\n id: item.id,\n kind: \"tool_call\",\n toolKind: \"web\",\n status: \"completed\",\n toolName: \"web_search\",\n title: item.query ? `Search ${shorten(item.query, 60)}` : \"Web search\",\n query: item.query,\n ...(url ? { url } : {}),\n };\n }\n case \"imageView\":\n return {\n id: item.id,\n kind: \"tool_call\",\n toolKind: \"file_read\",\n status: \"completed\",\n toolName: \"view_image\",\n title: `View ${item.path}`,\n path: item.path,\n };\n case \"imageGeneration\":\n return {\n id: item.id,\n kind: \"tool_call\",\n toolKind: \"other\",\n status: \"completed\",\n toolName: \"image_generation\",\n title: \"Generate image\",\n input: toJson(item),\n };\n case \"contextCompaction\":\n return {\n id: item.id,\n kind: \"notice\",\n status: \"completed\",\n level: \"info\",\n code: \"context_compacted\",\n message: \"Context compacted\",\n };\n case \"enteredReviewMode\":\n case \"exitedReviewMode\":\n return {\n id: item.id,\n kind: \"notice\",\n status: \"completed\",\n level: \"info\",\n code: item.type,\n message: item.review,\n };\n default:\n return undefined;\n }\n}\n\nfunction mcpResultText(content: unknown[]): string {\n return content\n .map((c) =>\n c && typeof c === \"object\" && (c as { type?: string }).type === \"text\"\n ? String((c as { text?: unknown }).text ?? \"\")\n : \"\",\n )\n .filter(Boolean)\n .join(\"\\n\");\n}\n\n/** The in-progress shape of an item when it starts (status forced to in_progress). */\nexport function startedItem(item: ThreadItem): Item | undefined {\n const mapped = mapThreadItem(item);\n if (!mapped || mapped.kind === \"user_message\" || mapped.kind === \"notice\") return mapped;\n return { ...mapped, status: \"in_progress\" } as Item;\n}\n","import type { AgentEvent, Item, ItemOf, Usage } from \"@codeden/contracts\";\nimport { count, unixToIso } from \"../util/text\";\nimport { mapThreadItem, startedItem } from \"./items\";\nimport type { ServerNotification } from \"./protocol\";\nimport type { RateLimitSnapshot, ThreadTokenUsage, Turn } from \"./protocol/v2\";\n\ntype Todo = ItemOf<\"todo_list\">[\"todos\"][number];\n\n/**\n * Translates `codex app-server` notifications for one thread into normalized `AgentEvent`s.\n * Codex turn and item ids are used as-is (they are unique UUIDs / call ids).\n */\nexport class CodexEventMapper {\n readonly rootThreadId: string;\n /** Codex thread id (also the resume token). */\n codexThreadId: string | undefined;\n private turnId: string | undefined;\n private readonly open = new Map<string, Item>();\n private plan: { id: string; todos: Todo[] } | undefined;\n private readonly turnUsage = new CodexTurnUsage();\n\n constructor(\n sessionId: string,\n private readonly emit: (event: AgentEvent) => void,\n ) {\n this.rootThreadId = `${sessionId}:thread-root`;\n }\n\n get currentTurnId(): string | undefined {\n return this.turnId;\n }\n\n /** Start a turn by id (from the `turn/start` response or `turn/started`). Idempotent. */\n beginTurn(turnId: string): void {\n if (this.turnId === turnId) return;\n if (this.turnId) this.endTurn({ type: \"interrupted\" }, this.turnId);\n this.turnId = turnId;\n this.emit({ type: \"turn.started\", threadId: this.rootThreadId, turnId });\n }\n\n private ctx(turnId: string): { threadId: string; turnId: string } {\n return { threadId: this.rootThreadId, turnId };\n }\n\n handle(n: ServerNotification): void {\n const params = n.params as { threadId?: string | null; turnId?: string };\n if (params.threadId && this.codexThreadId && params.threadId !== this.codexThreadId) return;\n switch (n.method) {\n case \"turn/started\":\n this.beginTurn(n.params.turn.id);\n return;\n case \"item/started\": {\n const item = startedItem(n.params.item);\n if (!item || item.kind === \"user_message\") return;\n this.beginTurn(n.params.turnId);\n this.open.set(item.id, item);\n this.emit({ type: \"item.started\", ...this.ctx(n.params.turnId), item });\n return;\n }\n case \"item/completed\": {\n const item = mapThreadItem(n.params.item);\n if (!item) return;\n this.beginTurn(n.params.turnId);\n this.open.delete(item.id);\n this.emit({ type: \"item.completed\", ...this.ctx(n.params.turnId), item });\n return;\n }\n case \"item/agentMessage/delta\":\n case \"item/plan/delta\":\n case \"item/reasoning/textDelta\":\n this.delta(n.params.turnId, n.params.itemId, { type: \"text\", text: n.params.delta });\n return;\n case \"item/reasoning/summaryTextDelta\":\n this.delta(n.params.turnId, n.params.itemId, {\n type: \"reasoning_summary\",\n text: n.params.delta,\n });\n return;\n case \"item/commandExecution/outputDelta\":\n case \"item/fileChange/outputDelta\":\n this.delta(n.params.turnId, n.params.itemId, { type: \"tool_output\", text: n.params.delta });\n return;\n case \"turn/plan/updated\":\n this.updatePlan(n.params.turnId, n.params.plan);\n return;\n case \"thread/tokenUsage/updated\":\n this.emit({\n type: \"usage.updated\",\n ...this.ctx(n.params.turnId),\n usage: this.turnUsage.add(n.params.turnId, n.params.tokenUsage),\n });\n return;\n case \"account/rateLimits/updated\":\n this.emit({\n type: \"usage.updated\",\n threadId: this.rootThreadId,\n ...(this.turnId ? { turnId: this.turnId } : {}),\n usage: rateLimits(n.params.rateLimits),\n });\n return;\n case \"model/rerouted\":\n this.emit({ type: \"session.updated\", model: n.params.toModel });\n return;\n case \"error\":\n this.notice(\n n.params.turnId,\n \"warning\",\n n.params.error.message,\n n.params.willRetry ? \"retrying\" : \"provider_error\",\n !n.params.willRetry,\n );\n return;\n case \"warning\":\n if (this.turnId)\n this.notice(this.turnId, \"warning\", n.params.message, \"provider_warning\", false);\n return;\n case \"thread/compacted\":\n this.notice(n.params.turnId, \"info\", \"Context compacted\", \"context_compacted\", false);\n return;\n case \"turn/completed\":\n this.completeTurn(n.params.turn);\n return;\n default:\n return;\n }\n }\n\n private delta(\n turnId: string,\n itemId: string,\n delta: { type: \"text\" | \"reasoning_summary\" | \"tool_output\"; text: string },\n ): void {\n if (!delta.text) return;\n this.beginTurn(turnId);\n this.emit({ type: \"item.delta\", ...this.ctx(turnId), itemId, delta });\n }\n\n private notice(\n turnId: string,\n level: \"info\" | \"warning\",\n message: string,\n code: string,\n asError: boolean,\n ): void {\n const id = `${code}-${turnId}-${Date.now().toString(36)}`;\n const item: Item = asError\n ? { id, kind: \"error\", status: \"completed\", error: { code, message } }\n : { id, kind: \"notice\", status: \"completed\", level, code, message };\n this.emit({ type: \"item.completed\", ...this.ctx(turnId), item });\n }\n\n private updatePlan(turnId: string, steps: { step: string; status: string }[]): void {\n this.beginTurn(turnId);\n const todos: Todo[] = steps.map((s, i) => ({\n id: String(i + 1),\n text: s.step,\n status:\n s.status === \"inProgress\"\n ? \"in_progress\"\n : s.status === \"completed\"\n ? \"completed\"\n : \"pending\",\n }));\n if (this.plan) {\n this.plan.todos = todos;\n this.emit({\n type: \"item.updated\",\n ...this.ctx(turnId),\n item: { id: this.plan.id, kind: \"todo_list\", status: \"in_progress\", todos },\n });\n } else {\n this.plan = { id: `todos-${turnId}`, todos };\n this.emit({\n type: \"item.started\",\n ...this.ctx(turnId),\n item: { id: this.plan.id, kind: \"todo_list\", status: \"in_progress\", todos },\n });\n }\n }\n\n private completeTurn(turn: Turn): void {\n this.beginTurn(turn.id);\n if (turn.status === \"completed\") this.endTurn({ type: \"completed\" }, turn.id);\n else if (turn.status === \"interrupted\") this.endTurn({ type: \"interrupted\" }, turn.id);\n else {\n const message = turn.error?.message ?? \"Codex turn failed\";\n this.endTurn(\n { type: \"failed\", message, detail: turn.error?.additionalDetails ?? undefined },\n turn.id,\n );\n }\n }\n\n /** Close the current turn (also used when the process dies). */\n endTurn(\n outcome:\n | { type: \"completed\" }\n | { type: \"interrupted\" }\n | { type: \"failed\"; message: string; detail?: string; code?: string },\n turnId = this.turnId,\n ): void {\n if (!turnId || turnId !== this.turnId) return;\n const ctx = this.ctx(turnId);\n const ok = outcome.type === \"completed\";\n for (const item of this.open.values()) {\n this.emit({\n type: \"item.completed\",\n ...ctx,\n item: { ...item, status: ok ? \"completed\" : \"cancelled\" } as Item,\n });\n }\n this.open.clear();\n if (this.plan) {\n this.emit({\n type: \"item.completed\",\n ...ctx,\n item: {\n id: this.plan.id,\n kind: \"todo_list\",\n status: ok ? \"completed\" : \"cancelled\",\n todos: this.plan.todos,\n },\n });\n this.plan = undefined;\n }\n this.turnId = undefined;\n if (outcome.type === \"completed\")\n this.emit({ type: \"turn.completed\", ...ctx, stopReason: \"end_turn\" });\n else if (outcome.type === \"interrupted\")\n this.emit({ type: \"turn.interrupted\", ...ctx, reason: \"user\" });\n else {\n this.emit({\n type: \"turn.failed\",\n ...ctx,\n error: {\n code: outcome.code ?? \"turn_failed\",\n message: outcome.message,\n ...(outcome.detail ? { detail: outcome.detail } : {}),\n },\n });\n }\n }\n}\n\ntype Breakdown = ThreadTokenUsage[\"total\"];\nconst BREAKDOWN_KEYS = [\n \"totalTokens\",\n \"inputTokens\",\n \"cachedInputTokens\",\n \"cacheWriteInputTokens\",\n \"outputTokens\",\n \"reasoningOutputTokens\",\n] as const;\n\nfunction addBreakdown(a: Breakdown, b: Breakdown, sign = 1): Breakdown {\n const out = { ...a };\n for (const k of BREAKDOWN_KEYS) out[k] = Math.max(0, (a[k] ?? 0) + sign * (b[k] ?? 0));\n return out;\n}\n\nconst ZERO: Breakdown = {\n totalTokens: 0,\n inputTokens: 0,\n cachedInputTokens: 0,\n cacheWriteInputTokens: 0,\n outputTokens: 0,\n reasoningOutputTokens: 0,\n};\n\n/**\n * Per-turn token accounting for one thread. Codex reports the thread's running `total` (which\n * survives resumes) and the `last` request. A turn's usage is the growth of `total` since the\n * previous report in this process; the first report after a (re)start counts only `last`, so\n * history from before a resume is never charged again. Repeated reports add nothing.\n */\nexport class CodexTurnUsage {\n private previousTotal: Breakdown | undefined;\n private readonly turns = new Map<string, Breakdown>();\n\n /** Fold a report into its turn and return the turn's usage so far. */\n add(turnId: string, u: ThreadTokenUsage): Usage {\n const step = this.previousTotal ? addBreakdown(u.total, this.previousTotal, -1) : u.last;\n this.previousTotal = u.total;\n const turn = addBreakdown(this.turns.get(turnId) ?? ZERO, step);\n this.turns.set(turnId, turn);\n return tokenUsage({ ...u, total: turn });\n }\n}\n\n/**\n * Codex token usage in CodeDen's terms, from `u.total` (context from `last`). OpenAI counts\n * cached input inside `inputTokens`; CodeDen's `inputTokens` is the uncached part.\n */\nexport function tokenUsage(u: ThreadTokenUsage): Usage {\n const usage: Usage = {\n inputTokens: count(Math.max(0, u.total.inputTokens - u.total.cachedInputTokens)),\n outputTokens: count(u.total.outputTokens),\n cachedInputTokens: count(u.total.cachedInputTokens),\n cacheWriteTokens: count(u.total.cacheWriteInputTokens),\n reasoningTokens: count(u.total.reasoningOutputTokens),\n contextTokens: count(u.last.totalTokens),\n };\n if (u.modelContextWindow && u.modelContextWindow > 0)\n usage.contextWindow = Math.round(u.modelContextWindow);\n return usage;\n}\n\nfunction windowId(minutes: number | null, fallback: string): string {\n if (minutes === 300) return \"5h\";\n if (minutes === 10080) return \"weekly\";\n if (minutes && minutes % 1440 === 0) return `${minutes / 1440}d`;\n if (minutes && minutes % 60 === 0) return `${minutes / 60}h`;\n return fallback;\n}\n\n/** Codex rate-limit snapshot -> usage rate limits. */\nexport function rateLimits(snapshot: RateLimitSnapshot): Usage {\n const out: NonNullable<Usage[\"rateLimits\"]> = [];\n for (const [name, w] of [\n [\"primary\", snapshot.primary],\n [\"secondary\", snapshot.secondary],\n ] as const) {\n if (!w) continue;\n const used = Math.min(100, Math.max(0, w.usedPercent));\n const resetsAt = unixToIso(w.resetsAt);\n out.push({\n id: windowId(w.windowDurationMins, name),\n status:\n snapshot.rateLimitReachedType || used >= 100 ? \"limited\" : used >= 80 ? \"warning\" : \"ok\",\n usedPercent: used,\n ...(resetsAt ? { resetsAt } : {}),\n });\n }\n return { rateLimits: out };\n}\n","import type {\n AgentEvent,\n ReasoningEffort,\n RuntimeResponse,\n SessionOptions,\n UserInput,\n} from \"@codeden/contracts\";\nimport { type ProviderSession, ProviderSessionError, type SessionConfigChange } from \"../adapter\";\nimport { ApprovalBroker } from \"../approvals\";\nimport { AsyncQueue } from \"../async-queue\";\nimport type { ResolvedCommand } from \"../util/exec\";\nimport { explicitModel } from \"../util/model\";\nimport { handleServerRequest } from \"./approvals\";\nimport { codexConfigOverrides, codexPolicy, toCodexInput } from \"./config\";\nimport { CodexEventMapper } from \"./mapper\";\nimport { startAppServer } from \"./process\";\nimport type { ServerNotification } from \"./protocol\";\nimport type {\n Model,\n ThreadResumeResponse,\n ThreadStartResponse,\n TurnStartResponse,\n} from \"./protocol/v2\";\nimport type { CodexRpc } from \"./rpc\";\n\nexport interface CodexSessionConfig {\n executable: ResolvedCommand;\n onModels?: (models: Model[]) => void;\n interruptTimeoutMs?: number;\n}\n\n/** CodeDen effort -> Codex reasoning effort (Codex tops out at `xhigh`). */\nexport function codexEffort(effort: ReasoningEffort | undefined): string | undefined {\n if (!effort) return undefined;\n return effort === \"max\" ? \"xhigh\" : effort;\n}\n\n/**\n * A Codex session over `codex app-server` (§7.2): one app-server process and one thread per\n * session. If the process exits, the next `send()` restarts it and resumes the thread.\n */\nexport class CodexSession implements ProviderSession {\n readonly events = new AsyncQueue<AgentEvent>();\n private readonly mapper: CodexEventMapper;\n private readonly broker: ApprovalBroker;\n private rpc: CodexRpc | undefined;\n private starting: Promise<CodexRpc> | undefined;\n private turnPending = false;\n /** Model/effort changes from `configure`, applied on every following turn. */\n private nextTurn: SessionConfigChange = {};\n private closed = false;\n private readonly filePaths = new Map<string, string[]>();\n\n constructor(\n private readonly opts: SessionOptions,\n private readonly config: CodexSessionConfig,\n ) {\n const emit = (event: AgentEvent) => {\n if (\n (event.type === \"turn.completed\" ||\n event.type === \"turn.failed\" ||\n event.type === \"turn.interrupted\") &&\n event.threadId === this.mapper.rootThreadId\n ) {\n this.turnPending = false;\n }\n this.events.push(event);\n };\n this.mapper = new CodexEventMapper(opts.sessionId, emit);\n this.mapper.codexThreadId = opts.resumeToken;\n this.broker = new ApprovalBroker(emit);\n }\n\n /** Start the app-server and the thread. Called by the adapter before returning the session. */\n async start(): Promise<void> {\n this.events.push({ type: \"thread.started\", thread: { id: this.mapper.rootThreadId } });\n await this.ensureServer();\n }\n\n resumeToken(): string | undefined {\n return this.mapper.codexThreadId;\n }\n\n /** Model/effort applied from the next `turn/start` on (Codex takes both per turn). */\n async configure(change: SessionConfigChange): Promise<void> {\n this.nextTurn = { ...this.nextTurn, ...change };\n }\n\n async send(input: UserInput): Promise<void> {\n if (this.closed) throw new ProviderSessionError(\"closed\", \"Session is closed\");\n if (this.turnPending || this.mapper.currentTurnId) {\n throw new ProviderSessionError(\"turn_running\", \"A turn is already running\");\n }\n this.turnPending = true;\n try {\n const rpc = await this.ensureServer();\n const effort = codexEffort(\n this.nextTurn.effort !== undefined ? (this.nextTurn.effort ?? undefined) : this.opts.effort,\n );\n const model = await this.turnModel(rpc);\n const res = await rpc.request<TurnStartResponse>(\"turn/start\", {\n threadId: this.threadId(),\n input: toCodexInput(input),\n ...(effort ? { effort } : {}),\n ...(model !== undefined ? { model } : {}),\n });\n this.mapper.beginTurn(res.turn.id);\n } catch (error) {\n this.turnPending = false;\n throw error;\n }\n }\n\n async steer(input: UserInput): Promise<void> {\n const turnId = this.mapper.currentTurnId;\n if (!turnId || !this.rpc) throw new ProviderSessionError(\"no_turn\", \"No turn is running\");\n await this.rpc.request(\"turn/steer\", {\n threadId: this.threadId(),\n input: toCodexInput(input),\n expectedTurnId: turnId,\n });\n }\n\n async interrupt(): Promise<void> {\n const turnId = this.mapper.currentTurnId;\n if (!turnId || !this.rpc) return;\n this.broker.cancelAll();\n try {\n await this.rpc.request(\"turn/interrupt\", { threadId: this.threadId(), turnId });\n } catch {\n // Process gone or turn already over; the timeout below closes the turn.\n }\n setTimeout(() => {\n if (this.mapper.currentTurnId === turnId)\n this.mapper.endTurn({ type: \"interrupted\" }, turnId);\n }, this.config.interruptTimeoutMs ?? 10_000).unref();\n }\n\n async respond(requestId: string, response: RuntimeResponse): Promise<void> {\n this.broker.respond(requestId, response);\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n this.broker.cancelAll();\n this.mapper.endTurn({ type: \"interrupted\" });\n this.events.close();\n await this.rpc?.close();\n }\n\n // ---------------------------------------------------------------- internals\n\n private threadId(): string {\n const id = this.mapper.codexThreadId;\n if (!id) throw new ProviderSessionError(\"not_started\", \"Codex thread is not started\");\n return id;\n }\n\n private ensureServer(): Promise<CodexRpc> {\n if (this.rpc && !this.rpc.isClosed) return Promise.resolve(this.rpc);\n this.starting ??= this.boot().finally(() => {\n this.starting = undefined;\n });\n return this.starting;\n }\n\n private async boot(): Promise<CodexRpc> {\n const { rpc } = await startAppServer(\n this.config.executable,\n {\n onNotification: (n) => this.onNotification(n),\n onRequest: (req) =>\n handleServerRequest(req, {\n broker: this.broker,\n risk: { cwd: this.opts.cwd, extraRoots: this.opts.additionalDirectories },\n ctx: (turnId) => ({ threadId: this.mapper.rootThreadId, turnId }),\n filePaths: (itemId) => this.filePaths.get(itemId),\n }),\n onExit: (code, stderr) => this.onExit(code, stderr),\n },\n { env: this.opts.env, cwd: this.opts.cwd },\n );\n this.rpc = rpc;\n const { approvalPolicy, sandbox } = codexPolicy(this.opts.autonomy, this.opts.readOnly);\n const common = {\n cwd: this.opts.cwd,\n approvalPolicy,\n sandbox,\n config: codexConfigOverrides(this.opts),\n // \"Default\" is left out so Codex uses the model from the user's config.\n ...(explicitModel(this.opts.model) ? { model: explicitModel(this.opts.model) } : {}),\n ...(this.opts.systemPrompt ? { developerInstructions: this.opts.systemPrompt } : {}),\n };\n let res: ThreadStartResponse | ThreadResumeResponse | undefined;\n const resumeId = this.mapper.codexThreadId;\n if (resumeId) {\n // A thread has a single writer: while a previous app-server is still shutting down,\n // resume fails with \"already has an active writer\". Retry briefly, then give up loudly.\n for (let attempt = 0; !res; attempt += 1) {\n try {\n res = await rpc.request<ThreadResumeResponse>(\"thread/resume\", {\n threadId: resumeId,\n excludeTurns: true,\n ...common,\n });\n } catch (error) {\n const message = (error as Error).message;\n if (/active writer/i.test(message)) {\n if (attempt < 5) {\n await new Promise((r) => setTimeout(r, 500 * (attempt + 1)));\n continue;\n }\n await rpc.close();\n throw new ProviderSessionError(\n \"resume_conflict\",\n `Codex thread ${resumeId} is still open in another process`,\n );\n }\n this.noticeOutsideTurn(\n `Could not resume Codex thread ${resumeId}; started a new one. ${message}`,\n );\n break;\n }\n }\n }\n res ??= await rpc.request<ThreadStartResponse>(\"thread/start\", common);\n this.mapper.codexThreadId = res.thread.id;\n this.events.push({ type: \"session.updated\", resumeToken: res.thread.id, model: res.model });\n if (this.config.onModels) {\n rpc.request<{ data: Model[] }>(\"model/list\", {}).then(\n (r) => this.config.onModels?.(r.data),\n () => {},\n );\n }\n return rpc;\n }\n\n /**\n * The `turn/start` model override: undefined keeps the thread's model. Switching back to\n * \"Default\" mid-session needs a real id, so it is resolved from Codex's model list.\n */\n private async turnModel(rpc: CodexRpc): Promise<string | undefined> {\n const change = this.nextTurn.model;\n if (change === undefined) return undefined;\n const explicit = explicitModel(change);\n if (explicit) return explicit;\n try {\n const list = await rpc.request<{ data: Model[] }>(\"model/list\", {});\n return list.data.find((m) => m.isDefault)?.model;\n } catch {\n return undefined;\n }\n }\n\n private noticeOutsideTurn(message: string): void {\n // Notices need a turn; surface resume problems at the start of the next turn instead.\n this.pendingNotice = message;\n }\n\n private pendingNotice: string | undefined;\n\n private onNotification(n: ServerNotification): void {\n if (n.method === \"item/started\" && n.params.item.type === \"fileChange\") {\n this.filePaths.set(\n n.params.item.id,\n n.params.item.changes.map((c) => c.path),\n );\n }\n if (n.method === \"turn/started\" && this.pendingNotice) {\n this.mapper.beginTurn(n.params.turn.id);\n const message = this.pendingNotice;\n this.pendingNotice = undefined;\n this.events.push({\n type: \"item.completed\",\n threadId: this.mapper.rootThreadId,\n turnId: n.params.turn.id,\n item: {\n id: `resume-${n.params.turn.id}`,\n kind: \"notice\",\n status: \"completed\",\n level: \"warning\",\n code: \"resume_failed\",\n message,\n },\n });\n }\n this.mapper.handle(n);\n }\n\n private onExit(code: number | null, stderr: string): void {\n if (this.closed) return;\n this.broker.cancelAll();\n this.mapper.endTurn({\n type: \"failed\",\n code: \"provider_exited\",\n message: `codex app-server exited (code ${code ?? \"unknown\"})`,\n ...(stderr ? { detail: stderr.slice(-2000) } : {}),\n });\n this.turnPending = false;\n }\n}\n","import type {\n ModelInfo,\n ProviderCapabilities,\n ProviderStatus,\n ReasoningEffort,\n SessionOptions,\n} from \"@codeden/contracts\";\nimport { ReasoningEffort as ReasoningEffortSchema } from \"@codeden/contracts\";\nimport type { ProviderAdapter, ProviderSession } from \"../adapter\";\nimport { type ResolvedCommand, resolveExecutable } from \"../util/exec\";\nimport type { UtilityModel } from \"../utility\";\nimport { detectCodex } from \"./detect\";\nimport { CodexUtilityModel } from \"./one-shot\";\nimport type { Model } from \"./protocol/v2\";\nimport { CodexSession } from \"./session\";\n\nexport const CODEX_PROVIDER_ID = \"codex\";\n\n/**\n * Honest flags: subagents (collab agents) are experimental in app-server and not surfaced as\n * child threads yet; rollback/fork exist in the protocol but are not wired up.\n */\nconst capabilities: ProviderCapabilities = {\n resume: true,\n steer: true,\n interrupt: true,\n approvals: true,\n userQuestions: true,\n subagents: false,\n rollback: false,\n fork: false,\n images: true,\n planMode: false,\n reasoningEffort: true,\n mcp: true,\n skills: true,\n};\n\nconst FALLBACK_MODELS: ModelInfo[] = [\n {\n id: \"default\",\n label: \"Default\",\n description: \"The model configured in ~/.codex/config.toml\",\n efforts: [\"minimal\", \"low\", \"medium\", \"high\", \"xhigh\"],\n isDefault: true,\n },\n];\n\nexport interface CodexAdapterOptions {\n executable?: ResolvedCommand;\n}\n\n/** Map an app-server `Model` to CodeDen's `ModelInfo`. */\nexport function modelInfoFromCodex(m: Model): ModelInfo {\n const efforts = m.supportedReasoningEfforts\n .map((e) => e.reasoningEffort)\n .filter((e): e is ReasoningEffort => ReasoningEffortSchema.safeParse(e).success);\n const defaultEffort = ReasoningEffortSchema.safeParse(m.defaultReasoningEffort);\n return {\n id: m.model,\n label: m.displayName || m.model,\n ...(m.description ? { description: m.description } : {}),\n efforts,\n ...(defaultEffort.success ? { defaultEffort: defaultEffort.data } : {}),\n ...(m.isDefault ? { isDefault: true } : {}),\n };\n}\n\n/** Codex through `codex app-server` JSON-RPC (§7.2). */\nexport class CodexAdapter implements ProviderAdapter {\n readonly id = CODEX_PROVIDER_ID;\n readonly displayName = \"Codex\";\n private modelList: ModelInfo[] = FALLBACK_MODELS;\n private cachedExe: ResolvedCommand | undefined;\n\n constructor(private readonly options: CodexAdapterOptions = {}) {}\n\n private executable(): ResolvedCommand | undefined {\n this.cachedExe ??= this.options.executable ?? resolveExecutable(\"codex\");\n return this.cachedExe;\n }\n\n detect(): Promise<ProviderStatus> {\n this.cachedExe = undefined;\n return detectCodex({ executable: this.executable() });\n }\n\n capabilities(): ProviderCapabilities {\n return { ...capabilities };\n }\n\n models(): ModelInfo[] {\n return this.modelList.map((m) => ({ ...m }));\n }\n\n async openSession(opts: SessionOptions): Promise<ProviderSession> {\n const executable = this.executable();\n if (!executable) throw new Error(\"Codex is not installed (no `codex` on PATH)\");\n const session = new CodexSession(opts, {\n executable,\n onModels: (models) => {\n const visible = models.filter((m) => !m.hidden).map(modelInfoFromCodex);\n if (visible.length) this.modelList = visible;\n },\n });\n try {\n await session.start();\n } catch (error) {\n await session.close();\n throw error;\n }\n return session;\n }\n\n utilityModel(): UtilityModel {\n return new CodexUtilityModel(() => this.executable());\n }\n}\n","import type {\n AgentEvent,\n Item,\n RuntimeResponse,\n SessionOptions,\n TodoStatus,\n UserInput,\n} from \"@codeden/contracts\";\nimport { type ProviderSession, ProviderSessionError, type SessionConfigChange } from \"../adapter\";\nimport { AsyncQueue } from \"../async-queue\";\nimport type { FakeProviderOptions } from \"./adapter\";\n\nclass Interrupted extends Error {}\n\ntype Todo = { text: string; status: TodoStatus };\n\ninterface TurnState {\n threadId: string;\n turnId: string;\n abort: AbortController;\n}\n\n/** A scripted, deterministic session. Ids are counters scoped to the session. */\nexport class FakeSession implements ProviderSession {\n readonly events: AsyncQueue<AgentEvent> = new AsyncQueue<AgentEvent>();\n private readonly rootThreadId: string;\n private readonly token: string;\n private counter = 0;\n private turn: TurnState | undefined;\n private readonly pending = new Map<string, (response: RuntimeResponse) => void>();\n\n constructor(\n private readonly opts: SessionOptions,\n private readonly fake: FakeProviderOptions,\n ) {\n this.token = opts.resumeToken ?? `fake-${opts.sessionId}`;\n this.rootThreadId = `${opts.sessionId}:thread-root`;\n this.events.push({ type: \"thread.started\", thread: { id: this.rootThreadId } });\n this.events.push({ type: \"session.updated\", resumeToken: this.token, model: \"fake-1\" });\n }\n\n resumeToken(): string | undefined {\n return this.token;\n }\n\n /** Changes recorded by `configure` (tests read them through `lastConfig`). */\n lastConfig: SessionConfigChange = {};\n\n async configure(change: SessionConfigChange): Promise<void> {\n this.lastConfig = { ...this.lastConfig, ...change };\n if (change.model !== undefined) {\n this.events.push({ type: \"session.updated\", model: change.model ?? \"fake-1\" });\n }\n }\n\n async send(input: UserInput): Promise<void> {\n if (this.events.isClosed) throw new ProviderSessionError(\"closed\", \"Session is closed\");\n if (this.turn) throw new ProviderSessionError(\"turn_running\", \"A turn is already running\");\n const turn: TurnState = {\n threadId: this.rootThreadId,\n turnId: this.nextId(\"turn\"),\n abort: new AbortController(),\n };\n this.turn = turn;\n void this.runTurn(turn, input).finally(() => {\n if (this.turn === turn) this.turn = undefined;\n });\n }\n\n async steer(input: UserInput): Promise<void> {\n const turn = this.turn;\n if (!turn) throw new ProviderSessionError(\"no_turn\", \"No turn is running\");\n const item: Item = {\n id: this.nextId(\"item\"),\n kind: \"user_message\",\n status: \"completed\",\n input,\n };\n this.emit({ type: \"item.completed\", threadId: turn.threadId, turnId: turn.turnId, item });\n }\n\n async interrupt(): Promise<void> {\n this.turn?.abort.abort();\n }\n\n async respond(requestId: string, response: RuntimeResponse): Promise<void> {\n const resolve = this.pending.get(requestId);\n if (!resolve) throw new ProviderSessionError(\"unknown_request\", `Unknown request ${requestId}`);\n this.pending.delete(requestId);\n resolve(response);\n }\n\n async close(): Promise<void> {\n this.turn?.abort.abort();\n // Let an aborted turn emit its final event before the stream ends.\n await new Promise((r) => setImmediate(r));\n this.events.close();\n }\n\n // ------------------------------------------------------------------ script\n\n private async runTurn(turn: TurnState, input: UserInput): Promise<void> {\n const { threadId, turnId } = turn;\n const prompt = input.text;\n try {\n this.emit({ type: \"turn.started\", threadId, turnId });\n await this.step(turn);\n const userItem: Item = {\n id: this.nextId(\"item\"),\n kind: \"user_message\",\n status: \"completed\",\n input,\n };\n this.emit({ type: \"item.completed\", threadId, turnId, item: userItem });\n\n if (prompt.includes(\"[fail]\")) {\n await this.step(turn);\n this.emit({\n type: \"turn.failed\",\n threadId,\n turnId,\n error: { code: \"fake_failure\", message: \"Scripted failure\", retryable: true },\n });\n return;\n }\n\n await this.streamAssistant(turn, threadId, this.replyFor(prompt));\n await this.todoList(turn);\n const approved =\n this.fake.approval || prompt.includes(\"[approval]\") ? await this.approval(turn) : true;\n if (approved) await this.commandToolCall(turn);\n if (this.fake.subagent || prompt.includes(\"[subagent]\")) await this.subagent(turn);\n if (this.fake.followups ?? true) {\n await this.step(turn);\n const item: Item = {\n id: this.nextId(\"item\"),\n kind: \"followups\",\n status: \"completed\",\n source: \"agent\",\n suggestions: [\n { label: \"Add tests\", prompt: \"Add tests for the change you just made.\" },\n { label: \"Open a PR\", prompt: \"Open a pull request with a summary of the change.\" },\n ],\n };\n this.emit({ type: \"item.completed\", threadId, turnId, item });\n }\n this.emit({\n type: \"usage.updated\",\n threadId,\n turnId,\n usage: { inputTokens: prompt.length, outputTokens: 42, costUsd: 0 },\n });\n this.emit({ type: \"turn.completed\", threadId, turnId, stopReason: \"end_turn\" });\n } catch (error) {\n if (error instanceof Interrupted) {\n this.emit({ type: \"turn.interrupted\", threadId, turnId, reason: \"user\" });\n return;\n }\n const message = error instanceof Error ? error.message : String(error);\n this.emit({ type: \"turn.failed\", threadId, turnId, error: { message } });\n }\n }\n\n private async streamAssistant(turn: TurnState, threadId: string, text: string): Promise<void> {\n const { turnId } = turn;\n const id = this.nextId(\"item\");\n const started: Item = { id, kind: \"assistant_message\", status: \"in_progress\", text: \"\" };\n this.emit({ type: \"item.started\", threadId, turnId, item: started });\n const words = text.split(/(?<= )/);\n for (const word of words) {\n await this.step(turn);\n this.emit({\n type: \"item.delta\",\n threadId,\n turnId,\n itemId: id,\n delta: { type: \"text\", text: word },\n });\n }\n const done: Item = { id, kind: \"assistant_message\", status: \"completed\", text };\n this.emit({ type: \"item.completed\", threadId, turnId, item: done });\n }\n\n private async todoList(turn: TurnState): Promise<void> {\n const { threadId, turnId } = turn;\n const id = this.nextId(\"item\");\n const todos = (status: \"in_progress\" | \"completed\"): Todo[] => [\n { text: \"Read the request\", status: \"completed\" },\n { text: \"Run the checks\", status },\n ];\n await this.step(turn);\n this.emit({\n type: \"item.started\",\n threadId,\n turnId,\n item: { id, kind: \"todo_list\", status: \"in_progress\", todos: todos(\"in_progress\") },\n });\n this.pendingTodo = { id, todos };\n }\n\n private pendingTodo:\n | { id: string; todos: (s: \"in_progress\" | \"completed\") => Todo[] }\n | undefined;\n\n private async approval(turn: TurnState): Promise<boolean> {\n const { threadId, turnId } = turn;\n const id = this.nextId(\"item\");\n const requestId = this.nextId(\"request\");\n const base = {\n id,\n kind: \"approval_request\" as const,\n requestId,\n action: \"command\" as const,\n title: \"Run `echo hello` outside the sandbox\",\n reason: \"Scripted approval from the Fake provider\",\n command: \"echo hello\",\n options: [\"allow_once\", \"allow_session\", \"deny\"] as (\n | \"allow_once\"\n | \"allow_session\"\n | \"deny\"\n )[],\n };\n await this.step(turn);\n this.emit({ type: \"item.started\", threadId, turnId, item: { ...base, status: \"in_progress\" } });\n const response = await this.waitForResponse(turn, requestId);\n const decision = response.kind === \"approval\" ? response.decision : \"deny\";\n const allowed = decision !== \"deny\";\n this.emit({\n type: \"item.completed\",\n threadId,\n turnId,\n item: {\n ...base,\n status: allowed ? \"completed\" : \"declined\",\n decision,\n decidedBy: \"user\",\n },\n });\n if (!allowed) {\n this.emit({\n type: \"item.completed\",\n threadId,\n turnId,\n item: {\n id: this.nextId(\"item\"),\n kind: \"notice\",\n status: \"completed\",\n level: \"info\",\n message: \"Command skipped: approval denied.\",\n },\n });\n }\n return allowed;\n }\n\n private async commandToolCall(turn: TurnState): Promise<void> {\n const { threadId, turnId } = turn;\n const id = this.nextId(\"item\");\n const base = {\n id,\n kind: \"tool_call\" as const,\n toolKind: \"command\" as const,\n toolName: \"shell\",\n title: \"Run echo hello\",\n command: \"echo hello\",\n cwd: this.opts.cwd,\n };\n await this.step(turn);\n this.emit({ type: \"item.started\", threadId, turnId, item: { ...base, status: \"in_progress\" } });\n await this.step(turn);\n this.emit({\n type: \"item.delta\",\n threadId,\n turnId,\n itemId: id,\n delta: { type: \"tool_output\", text: \"hello\\n\", stream: \"stdout\" },\n });\n this.emit({\n type: \"item.completed\",\n threadId,\n turnId,\n item: {\n ...base,\n status: \"completed\",\n exitCode: 0,\n output: { text: \"hello\\n\", truncated: false },\n durationMs: 5,\n },\n });\n const todo = this.pendingTodo;\n if (todo) {\n this.pendingTodo = undefined;\n this.emit({\n type: \"item.completed\",\n threadId,\n turnId,\n item: {\n id: todo.id,\n kind: \"todo_list\",\n status: \"completed\",\n todos: todo.todos(\"completed\"),\n },\n });\n }\n }\n\n private async subagent(turn: TurnState): Promise<void> {\n const { threadId, turnId } = turn;\n const itemId = this.nextId(\"item\");\n const childThreadId = `${this.opts.sessionId}:thread-${this.nextId(\"sub\")}`;\n const base = {\n id: itemId,\n kind: \"subagent\" as const,\n childThreadId,\n agentType: \"reviewer\",\n description: \"Review the change\",\n };\n await this.step(turn);\n this.emit({\n type: \"thread.started\",\n thread: {\n id: childThreadId,\n parentThreadId: threadId,\n parentItemId: itemId,\n agentType: \"reviewer\",\n },\n });\n this.emit({ type: \"item.started\", threadId, turnId, item: { ...base, status: \"in_progress\" } });\n const child: TurnState = {\n threadId: childThreadId,\n turnId: this.nextId(\"turn\"),\n abort: turn.abort,\n };\n this.emit({ type: \"turn.started\", threadId: childThreadId, turnId: child.turnId });\n await this.streamAssistant(child, childThreadId, \"Reviewed: no issues found.\");\n this.emit({\n type: \"turn.completed\",\n threadId: childThreadId,\n turnId: child.turnId,\n stopReason: \"end_turn\",\n });\n this.emit({\n type: \"item.completed\",\n threadId,\n turnId,\n item: { ...base, status: \"completed\", summary: \"No issues found.\" },\n });\n }\n\n // ------------------------------------------------------------------ helpers\n\n private waitForResponse(turn: TurnState, requestId: string): Promise<RuntimeResponse> {\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n this.pending.delete(requestId);\n reject(new Interrupted());\n };\n if (turn.abort.signal.aborted) return onAbort();\n turn.abort.signal.addEventListener(\"abort\", onAbort, { once: true });\n this.pending.set(requestId, (response) => {\n turn.abort.signal.removeEventListener(\"abort\", onAbort);\n resolve(response);\n });\n });\n }\n\n /** Wait `delayMs` (or yield), then throw if the turn was interrupted. */\n private async step(turn: TurnState): Promise<void> {\n const delay = this.fake.delayMs ?? 0;\n await new Promise((r) => (delay > 0 ? setTimeout(r, delay) : setImmediate(r)));\n if (turn.abort.signal.aborted) throw new Interrupted();\n }\n\n private replyFor(prompt: string): string {\n return this.fake.reply ? this.fake.reply(prompt) : `Echo: ${prompt}`;\n }\n\n private emit(event: AgentEvent): void {\n this.events.push(event);\n }\n\n private nextId(kind: string): string {\n this.counter += 1;\n return `${kind}-${this.counter}`;\n }\n}\n","import type {\n ModelInfo,\n ProviderCapabilities,\n ProviderStatus,\n SessionOptions,\n} from \"@codeden/contracts\";\nimport type { ProviderAdapter, ProviderSession } from \"../adapter\";\nimport { FakeSession } from \"./session\";\n\n/** Options for the scripted Fake provider. */\nexport interface FakeProviderOptions {\n /** Delay between emitted events in ms (0 = yield only). Default 0. */\n delayMs?: number;\n /** Always raise an approval request before the tool call. Also triggered by `[approval]` in the prompt. */\n approval?: boolean;\n /** Always run a subagent child thread. Also triggered by `[subagent]` in the prompt. */\n subagent?: boolean;\n /** Emit a followups item at the end of each turn. Default true. */\n followups?: boolean;\n /** Assistant reply for a prompt. Default: `Echo: <prompt>`. */\n reply?: (prompt: string) => string;\n}\n\nconst capabilities: ProviderCapabilities = {\n resume: true,\n steer: true,\n interrupt: true,\n approvals: true,\n userQuestions: false,\n subagents: true,\n rollback: false,\n fork: false,\n images: false,\n planMode: false,\n reasoningEffort: false,\n mcp: false,\n skills: false,\n};\n\n/**\n * Deterministic scripted provider for demos and tests (§7.2). Every turn streams:\n * user message, assistant message (word deltas), a todo list, a command tool call,\n * optionally an approval request (waits for `respond`) and a subagent child thread,\n * followups, usage, then `turn.completed`. Prompts containing `[fail]` fail the turn.\n */\nexport class FakeProvider implements ProviderAdapter {\n readonly id = \"fake\";\n readonly displayName = \"Fake (scripted)\";\n\n constructor(private readonly options: FakeProviderOptions = {}) {}\n\n async detect(): Promise<ProviderStatus> {\n return {\n providerId: this.id,\n installed: true,\n version: \"1.0.0\",\n executablePath: null,\n loggedIn: true,\n authMethod: \"none\",\n account: null,\n loginExpiresAt: null,\n supported: true,\n issues: [],\n checkedAt: new Date().toISOString(),\n };\n }\n\n capabilities(): ProviderCapabilities {\n return { ...capabilities };\n }\n\n models(): ModelInfo[] {\n return [{ id: \"fake-1\", label: \"Fake 1\", efforts: [], isDefault: true }];\n }\n\n async openSession(opts: SessionOptions): Promise<ProviderSession> {\n return new FakeSession(opts, this.options);\n }\n}\n","import type { ImageEngineId } from \"./types\";\n\nexport type ImageErrorCode =\n /** Engine not installed, not logged in, or no API key. */\n | \"unavailable\"\n /** Bad prompt/size/count/reference image or output path. */\n | \"invalid_request\"\n /** The API rejected the credentials. */\n | \"auth\"\n /** Rate or usage limit hit; `retryAfter` says when, if known. */\n | \"rate_limited\"\n /** The provider refused the prompt or image on safety grounds. */\n | \"content_policy\"\n | \"timeout\"\n | \"aborted\"\n /** The call finished without producing an image. */\n | \"no_image\"\n /** Any other provider-side failure. */\n | \"provider_error\"\n /** Reading a reference image or writing an output file failed. */\n | \"io\";\n\nconst RETRYABLE: ReadonlySet<ImageErrorCode> = new Set([\n \"rate_limited\",\n \"timeout\",\n \"provider_error\",\n]);\n\n/** The only error type `ImageEngine.generate()` throws. */\nexport class ImageGenerationError extends Error {\n readonly retryable: boolean;\n constructor(\n readonly code: ImageErrorCode,\n readonly engine: ImageEngineId,\n message: string,\n readonly details: { status?: number; retryAfter?: Date; cause?: unknown } = {},\n ) {\n super(message, details.cause === undefined ? undefined : { cause: details.cause });\n this.name = \"ImageGenerationError\";\n this.retryable = RETRYABLE.has(code);\n }\n}\n\n/** Map an HTTP status from an image API to an error code. */\nexport function codeForHttpStatus(status: number, body: string): ImageErrorCode {\n if (status === 401 || status === 403) return \"auth\";\n if (status === 429) return \"rate_limited\";\n if (status === 400 && /safety|policy|moderation|blocked/i.test(body)) return \"content_policy\";\n if (status >= 400 && status < 500) return \"invalid_request\";\n return \"provider_error\";\n}\n\n/** Wrap anything thrown during generation, keeping existing `ImageGenerationError`s. */\nexport function toImageError(\n error: unknown,\n engine: ImageEngineId,\n signal?: AbortSignal,\n): ImageGenerationError {\n if (error instanceof ImageGenerationError) return error;\n if (signal?.aborted) {\n const reason = signal.reason;\n if (reason instanceof ImageGenerationError) return reason;\n return new ImageGenerationError(\"aborted\", engine, \"Image generation was cancelled\", {\n cause: reason,\n });\n }\n const message = error instanceof Error ? error.message : String(error);\n return new ImageGenerationError(\"provider_error\", engine, message, { cause: error });\n}\n","import { tmpdir } from \"node:os\";\nimport type { ImageGenerationItem, ServerNotification, ServerRequest } from \"../codex/protocol\";\nimport type { JsonValue } from \"../codex/protocol/serde_json/JsonValue\";\nimport type { ThreadStartResponse } from \"../codex/protocol/v2\";\nimport { CodexRpcError, type CodexRpcHandlers } from \"../codex/rpc\";\nimport { ImageGenerationError, toImageError } from \"./errors\";\n\n/** The slice of `CodexRpc` an image turn needs; tests pass a fake. */\nexport interface ImageTurnRpc {\n request<T>(method: string, params: unknown): Promise<T>;\n close(): Promise<void> | void;\n}\n\n/** Spawn `codex app-server` (or a fake) with these handlers. */\nexport type ConnectCodex = (handlers: CodexRpcHandlers, cwd: string) => Promise<ImageTurnRpc>;\n\nexport interface CodexImageTurnParams {\n prompt: string;\n referenceImages: readonly string[];\n /** Stop as soon as this many images arrived. */\n count: number;\n /** Empty = the user's configured Codex model. */\n model?: string;\n signal: AbortSignal;\n}\n\nexport interface CodexImage {\n data: Buffer;\n revisedPrompt: string | null;\n /** Codex keeps its own copy under `~/.codex/generated_images/<thread>/`. */\n savedPath?: string;\n}\n\nexport interface CodexImageTurnResult {\n images: CodexImage[];\n model: string;\n threadId: string;\n}\n\n/** Kept short so the turn spends few tokens; the model only needs to call one tool. */\nexport const CODEX_IMAGE_INSTRUCTIONS =\n \"You generate images for CodeDen. Use only your built-in image generation tool. Never run \" +\n \"shell commands, read or edit files, browse, or call any other tool. Follow the requested \" +\n \"shape and count exactly. When the images are done, reply with the single word: done.\";\n\n/**\n * Config overrides that leave the image generation tool as the only useful tool: the user's\n * MCP servers, plugins, apps, browser/computer use, web search, hooks and subagents are off,\n * and the turn runs in a read-only sandbox with approvals off.\n */\nexport function codexImageConfig(mcpServerNames: readonly string[]): Record<string, JsonValue> {\n const config: Record<string, JsonValue> = {\n \"features.image_generation\": true,\n \"features.apps\": false,\n \"features.plugins\": false,\n \"features.remote_plugin\": false,\n \"features.tool_suggest\": false,\n \"features.skill_search\": false,\n \"features.browser_use\": false,\n \"features.computer_use\": false,\n \"features.code_mode_host\": false,\n \"features.multi_agent\": false,\n \"features.goals\": false,\n \"features.hooks\": false,\n web_search: \"disabled\",\n };\n for (const name of mcpServerNames) {\n if (/^[\\w-]+$/.test(name)) config[`mcp_servers.${name}.enabled`] = false;\n }\n return config;\n}\n\n/** Deny anything the model asks for; an image turn never needs approvals or input. */\nexport async function denyServerRequest(request: ServerRequest): Promise<unknown> {\n switch (request.method) {\n case \"item/commandExecution/requestApproval\":\n case \"item/fileChange/requestApproval\":\n return { decision: \"decline\" };\n case \"item/permissions/requestApproval\":\n return { permissions: {}, scope: \"turn\" };\n case \"item/tool/requestUserInput\":\n return { answers: {} };\n case \"mcpServer/elicitation/request\":\n return { action: \"decline\", content: null, _meta: null };\n case \"execCommandApproval\":\n case \"applyPatchApproval\":\n return { decision: { denied: { rejection: \"Image generation turns cannot run tools\" } } };\n default:\n throw new CodexRpcError(-32601, `Image turns do not handle ${request.method}`);\n }\n}\n\nfunction usageLimitError(\n failure: NonNullable<ImageGenerationItem[\"failure\"]>,\n): ImageGenerationError {\n const retryAfter = failure.resetsAt ? new Date(failure.resetsAt * 1000) : undefined;\n return new ImageGenerationError(\n \"rate_limited\",\n \"codex\",\n `Codex image generation limit reached${retryAfter ? ` (resets ${retryAfter.toISOString()})` : \"\"}`,\n retryAfter ? { retryAfter } : {},\n );\n}\n\nfunction turnError(\n error: { message: string; codexErrorInfo: unknown } | null,\n): ImageGenerationError {\n const info = error?.codexErrorInfo;\n const message = error?.message ?? \"The Codex turn failed\";\n if (info === \"usageLimitExceeded\" || info === \"rateLimitExceeded\")\n return new ImageGenerationError(\"rate_limited\", \"codex\", message);\n if (info === \"unauthorized\") return new ImageGenerationError(\"auth\", \"codex\", message);\n if (info === \"cyberPolicy\" || info === \"misalignmentPolicyViolation\")\n return new ImageGenerationError(\"content_policy\", \"codex\", message);\n return new ImageGenerationError(\"provider_error\", \"codex\", message);\n}\n\n/**\n * Run one ephemeral, tool-restricted Codex turn and collect the `imageGeneration` items.\n * The images arrive base64-encoded in `item.result`, so nothing depends on Codex writing a\n * file itself. Resolves as soon as `count` images arrived (the app-server is then closed,\n * which ends the turn), or when the turn completes.\n */\nexport async function runCodexImageTurn(\n connect: ConnectCodex,\n params: CodexImageTurnParams,\n): Promise<CodexImageTurnResult> {\n const { signal } = params;\n if (signal.aborted) throw toImageError(signal.reason, \"codex\", signal);\n let finish: () => void = () => {};\n let fail: (error: unknown) => void = () => {};\n const done = new Promise<void>((resolve, reject) => {\n finish = resolve;\n fail = reject;\n });\n // Failures are re-thrown where `done` is awaited; this only silences early rejections.\n done.catch(() => {});\n /** Settle a step early when the turn fails, is aborted, or times out. */\n const race = <T>(step: Promise<T>): Promise<T> => Promise.race([step, done.then(() => step)]);\n let connecting: Promise<ImageTurnRpc> | undefined;\n const images: CodexImage[] = [];\n let threadId: string | undefined;\n let lastText = \"\";\n const onNotification = (n: ServerNotification) => {\n if (!threadId || !(\"threadId\" in n.params) || n.params.threadId !== threadId) return;\n if (n.method === \"item/completed\") {\n const item = n.params.item;\n if (item.type === \"agentMessage\" && item.text.trim()) lastText = item.text.trim();\n if (item.type !== \"imageGeneration\") return;\n if (item.failure?.type === \"usageLimitExceeded\") return fail(usageLimitError(item.failure));\n if (!item.result) return;\n images.push({\n data: Buffer.from(item.result, \"base64\"),\n revisedPrompt: item.revisedPrompt,\n ...(item.savedPath ? { savedPath: item.savedPath } : {}),\n });\n if (images.length >= params.count) finish();\n } else if (n.method === \"error\" && !n.params.willRetry) {\n fail(turnError(n.params.error));\n } else if (n.method === \"turn/completed\") {\n const turn = n.params.turn;\n if (turn.status === \"completed\") finish();\n else if (turn.status === \"interrupted\")\n fail(new ImageGenerationError(\"aborted\", \"codex\", \"The Codex turn was interrupted\"));\n else fail(turnError(turn.error));\n }\n };\n const onAbort = () => fail(toImageError(signal.reason, \"codex\", signal));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n let rpc: ImageTurnRpc | undefined;\n try {\n const cwd = tmpdir();\n connecting = connect(\n {\n onNotification,\n onRequest: denyServerRequest,\n onExit: (code, stderr) =>\n fail(\n new ImageGenerationError(\n \"provider_error\",\n \"codex\",\n `codex app-server exited (code ${code ?? \"unknown\"})${stderr.trim() ? `: ${stderr.trim().slice(-300)}` : \"\"}`,\n ),\n ),\n },\n cwd,\n );\n rpc = await race(connecting);\n const servers = await race(\n rpc\n .request<{ config: Record<string, unknown> }>(\"config/read\", { cwd })\n .then((r) => Object.keys((r.config.mcp_servers as Record<string, unknown> | null) ?? {}))\n .catch(() => [] as string[]),\n );\n const thread = await race(\n rpc.request<ThreadStartResponse>(\"thread/start\", {\n cwd,\n ephemeral: true,\n approvalPolicy: \"never\",\n sandbox: \"read-only\",\n ...(params.model ? { model: params.model } : {}),\n config: codexImageConfig(servers),\n developerInstructions: CODEX_IMAGE_INSTRUCTIONS,\n }),\n );\n threadId = thread.thread.id;\n await race(\n rpc.request(\"turn/start\", {\n threadId,\n input: [\n ...params.referenceImages.map((path) => ({ type: \"localImage\", path })),\n { type: \"text\", text: params.prompt, text_elements: [] },\n ],\n effort: \"low\",\n }),\n );\n await done;\n if (!images.length) {\n throw new ImageGenerationError(\n \"no_image\",\n \"codex\",\n `Codex finished without generating an image${lastText ? `: ${lastText.slice(0, 300)}` : \"\"}`,\n );\n }\n return { images: images.slice(0, params.count), model: thread.model, threadId };\n } catch (error) {\n throw toImageError(error, \"codex\", signal);\n } finally {\n signal.removeEventListener(\"abort\", onAbort);\n // Closing ends the turn if it is still running (e.g. after an early finish or a timeout).\n if (rpc) void Promise.resolve(rpc.close()).catch(() => {});\n else void connecting?.then((late) => late.close()).catch(() => {});\n }\n}\n","import path from \"node:path\";\n\n/** Where generated images go: an absolute directory plus a file stem (no extension). */\nexport interface ImageOutputTarget {\n outputDir: string;\n fileStem: string;\n}\n\nexport interface ResolveImageOutputOptions {\n /** Defaults to `process.platform`; decides path semantics and case sensitivity. */\n platform?: NodeJS.Platform;\n /** Directory (relative to the worktree) used when no path is given. */\n defaultDir?: string;\n /** Stem used when the path names a directory. */\n defaultStem?: string;\n}\n\nexport const DEFAULT_IMAGE_DIR = \"generated-images\";\nconst IMAGE_EXTENSIONS = new Set([\".png\", \".jpg\", \".jpeg\", \".webp\", \".gif\"]);\nconst WINDOWS_RESERVED = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])$/i;\n\n/**\n * Resolve a requested output path (relative to the worktree, or absolute inside it) into a\n * directory and file stem. Pure: it never touches the disk, so callers should pass the\n * worktree's real path. Throws `Error` for paths that escape the worktree, point into `.git`,\n * or contain NUL bytes.\n *\n * - `undefined` / `\"\"` -> `<root>/generated-images`, stem `image`\n * - `public/hero.png` -> `<root>/public`, stem `hero` (the extension follows the bytes)\n * - `assets/img/` or `assets` -> `<root>/assets/img` / `<root>/assets`, default stem\n */\nexport function resolveImageOutput(\n worktreeRoot: string,\n outputPath: string | undefined,\n opts: ResolveImageOutputOptions = {},\n): ImageOutputTarget {\n const platform = opts.platform ?? process.platform;\n const p = platform === \"win32\" ? path.win32 : path.posix;\n if (!p.isAbsolute(worktreeRoot)) throw new Error(\"The worktree root must be an absolute path\");\n const requested = (outputPath ?? \"\").trim() || (opts.defaultDir ?? DEFAULT_IMAGE_DIR);\n if (requested.includes(\"\\0\")) throw new Error(\"The output path contains a NUL byte\");\n const root = p.resolve(worktreeRoot);\n const target = p.resolve(root, requested);\n const rel = p.relative(root, target);\n if (rel.startsWith(\"..\") || p.isAbsolute(rel)) {\n throw new Error(`The output path must stay inside the worktree: ${requested}`);\n }\n const segments = rel.split(/[\\\\/]+/).filter(Boolean);\n if (segments.some((s) => s.toLowerCase() === \".git\")) {\n throw new Error(\"The output path must not point into .git\");\n }\n const endsWithSeparator = /[\\\\/]$/.test(requested);\n const ext = p.extname(target).toLowerCase();\n const namesFile = !endsWithSeparator && IMAGE_EXTENSIONS.has(ext) && segments.length > 0;\n if (!namesFile) {\n return { outputDir: target, fileStem: sanitizeFileStem(opts.defaultStem ?? \"image\") };\n }\n return {\n outputDir: p.dirname(target),\n fileStem: sanitizeFileStem(p.basename(target, p.extname(target))),\n };\n}\n\n/** A file stem that is safe on every platform: no separators, reserved names or odd endings. */\nexport function sanitizeFileStem(stem: string): string {\n let clean = Array.from(stem, (ch) =>\n ch.charCodeAt(0) < 32 || '<>:\"/\\\\|?*'.includes(ch) ? \"-\" : ch,\n )\n .join(\"\")\n .replace(/^[\\s.]+|[\\s.]+$/g, \"\")\n .slice(0, 80)\n .replace(/[\\s.]+$/g, \"\");\n if (!clean) clean = \"image\";\n if (WINDOWS_RESERVED.test(clean)) clean = `_${clean}`;\n return clean;\n}\n\n/** `hero.png`, `hero-2.png`, `hero-3.jpg`, ... one per extension, in order. */\nexport function imageFileNames(stem: string, extensions: readonly string[]): string[] {\n const base = sanitizeFileStem(stem);\n return extensions.map((ext, i) => `${base}${i === 0 ? \"\" : `-${i + 1}`}${ext}`);\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { ImageGenerationError } from \"./errors\";\nimport { imageFileNames } from \"./paths\";\nimport type { ImageEngineId } from \"./types\";\n\nexport type ImageFormat = \"png\" | \"jpeg\" | \"webp\" | \"gif\";\n\nexport interface ImageInfo {\n format: ImageFormat;\n mimeType: `image/${ImageFormat}`;\n width: number;\n height: number;\n}\n\n/** Sniff format and pixel size from the file header. `undefined` if not a supported image. */\nexport function imageInfo(data: Uint8Array): ImageInfo | undefined {\n const b = Buffer.from(data.buffer, data.byteOffset, data.byteLength);\n if (b.length >= 24 && b.readUInt32BE(0) === 0x89504e47 && b.readUInt32BE(4) === 0x0d0a1a0a) {\n return info(\"png\", b.readUInt32BE(16), b.readUInt32BE(20));\n }\n if (b.length >= 10 && b.toString(\"ascii\", 0, 6).startsWith(\"GIF8\")) {\n return info(\"gif\", b.readUInt16LE(6), b.readUInt16LE(8));\n }\n if (\n b.length >= 30 &&\n b.toString(\"ascii\", 0, 4) === \"RIFF\" &&\n b.toString(\"ascii\", 8, 12) === \"WEBP\"\n ) {\n return webpInfo(b);\n }\n if (b.length >= 4 && b[0] === 0xff && b[1] === 0xd8) return jpegInfo(b);\n return undefined;\n}\n\nfunction info(format: ImageFormat, width: number, height: number): ImageInfo | undefined {\n if (!width || !height) return undefined;\n return { format, mimeType: `image/${format}`, width, height };\n}\n\nfunction webpInfo(b: Buffer): ImageInfo | undefined {\n const chunk = b.toString(\"ascii\", 12, 16);\n if (chunk === \"VP8X\") return info(\"webp\", b.readUIntLE(24, 3) + 1, b.readUIntLE(27, 3) + 1);\n if (chunk === \"VP8L\") {\n const bits = b.readUInt32LE(21);\n return info(\"webp\", (bits & 0x3fff) + 1, ((bits >> 14) & 0x3fff) + 1);\n }\n if (chunk === \"VP8 \")\n return info(\"webp\", b.readUInt16LE(26) & 0x3fff, b.readUInt16LE(28) & 0x3fff);\n return undefined;\n}\n\nfunction jpegInfo(b: Buffer): ImageInfo | undefined {\n let offset = 2;\n while (offset + 9 < b.length) {\n if (b[offset] !== 0xff) return undefined;\n const marker = b[offset + 1] ?? 0;\n const length = b.readUInt16BE(offset + 2);\n // SOF0..SOF15, excluding DHT (C4), JPG (C8) and DAC (CC).\n if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {\n return info(\"jpeg\", b.readUInt16BE(offset + 7), b.readUInt16BE(offset + 5));\n }\n offset += 2 + length;\n }\n return undefined;\n}\n\nconst EXTENSION: Record<ImageFormat, string> = {\n png: \".png\",\n jpeg: \".jpg\",\n webp: \".webp\",\n gif: \".gif\",\n};\n\n/**\n * Write generated images as `<stem><ext>`, `<stem>-2<ext>`, ... in `outputDir` (created if\n * missing; existing files with the same names are replaced). The extension follows the actual\n * bytes, so a JPEG is never saved as `.png`.\n */\nexport async function writeImages(\n engine: ImageEngineId,\n images: readonly Uint8Array[],\n outputDir: string,\n fileStem: string,\n): Promise<string[]> {\n const formats = images.map((image) => {\n const meta = imageInfo(image);\n if (!meta) {\n throw new ImageGenerationError(\n \"no_image\",\n engine,\n \"The engine returned data that is not an image\",\n );\n }\n return meta.format;\n });\n const names = imageFileNames(\n fileStem,\n formats.map((f) => EXTENSION[f]),\n );\n try {\n await mkdir(outputDir, { recursive: true });\n const files: string[] = [];\n for (const [i, image] of images.entries()) {\n const file = path.join(outputDir, names[i] as string);\n await writeFile(file, image);\n files.push(file);\n }\n return files;\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n throw new ImageGenerationError(\"io\", engine, `Could not write the image: ${message}`, {\n cause: error,\n });\n }\n}\n","/**\n * Image generation engines (§12.5). Every engine sits behind `ImageEngine`, so the\n * `generate_image` tool, the Settings \"test\" button and the registry never branch on an id.\n */\n\n/** Built-in engine ids; matches `settings.imageGeneration.engine` minus `auto`/`none`. */\nexport type ImageEngineId = \"codex\" | \"gemini\" | \"openai\";\n\n/** Aspect ratios accepted by `generate()`. Engines map them to what their API supports. */\nexport const IMAGE_ASPECT_RATIOS = [\n \"1:1\",\n \"2:3\",\n \"3:2\",\n \"3:4\",\n \"4:3\",\n \"4:5\",\n \"5:4\",\n \"9:16\",\n \"16:9\",\n \"21:9\",\n] as const;\nexport type ImageAspectRatio = (typeof IMAGE_ASPECT_RATIOS)[number];\n\nexport type ImageQuality = \"auto\" | \"low\" | \"medium\" | \"high\";\n\n/** Most images one `generate()` call may produce. */\nexport const MAX_IMAGE_COUNT = 4;\n\nexport interface ImageGenerateRequest {\n prompt: string;\n /** Preferred shape. Ignored when `size` already implies one. */\n aspectRatio?: ImageAspectRatio;\n /** `WIDTHxHEIGHT` (e.g. `1024x1024`) or a resolution class (`1K`, `2K`, `4K`). */\n size?: string;\n quality?: ImageQuality;\n /** 1..MAX_IMAGE_COUNT, default 1. */\n count?: number;\n /** Absolute paths of existing images used for edits and variations. */\n referenceImages?: string[];\n /** Absolute directory the files are written to (created if missing). */\n outputDir: string;\n /** File name without extension; default `image`. Extra images get `-2`, `-3`, ... */\n fileStem?: string;\n /** Overall deadline; each engine has its own default. */\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\nexport interface ImageGenerateResult {\n /** Absolute paths of the written files, in generation order. */\n files: string[];\n engine: ImageEngineId;\n /** The model that produced the images (`\"\"` when the engine cannot tell). */\n model: string;\n /** The prompt the model actually used, when the engine rewrites prompts. */\n revisedPrompt?: string;\n}\n\nexport interface ImageEngineAvailability {\n available: boolean;\n /** Why the engine is unavailable (or a note when available, e.g. the login method). */\n reason?: string;\n}\n\n/** What an engine can do; read by the tool layer instead of branching on ids. */\nexport interface ImageEngineCapabilities {\n referenceImages: boolean;\n /** `size` is honoured exactly rather than mapped to the nearest supported shape. */\n exactSize: boolean;\n /** Needs an API key (stored in the OS keychain). */\n requiresApiKey: boolean;\n}\n\nexport interface ImageEngine {\n readonly id: ImageEngineId;\n /** Human label for Settings. */\n readonly label: string;\n readonly capabilities: ImageEngineCapabilities;\n /** Default model id used when the engine was not configured with one. */\n readonly defaultModel: string;\n /** Never throws. */\n detect(): Promise<ImageEngineAvailability>;\n /** Throws `ImageGenerationError`. */\n generate(request: ImageGenerateRequest): Promise<ImageGenerateResult>;\n}\n","import { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { ImageGenerationError } from \"./errors\";\nimport { imageInfo } from \"./image-file\";\nimport {\n IMAGE_ASPECT_RATIOS,\n type ImageEngineId,\n type ImageGenerateRequest,\n MAX_IMAGE_COUNT,\n} from \"./types\";\n\n/** Largest reference image accepted (bytes); matches the strictest provider limit. */\nexport const MAX_REFERENCE_BYTES = 20 * 1024 * 1024;\nexport const MAX_REFERENCE_IMAGES = 8;\n\nexport type ParsedSize =\n | { kind: \"pixels\"; width: number; height: number }\n | { kind: \"class\"; value: \"1K\" | \"2K\" | \"4K\" };\n\n/** `1024x1536` -> pixels, `2K` -> class, anything else -> `undefined`. */\nexport function parseSize(size: string): ParsedSize | undefined {\n const px = /^\\s*(\\d{2,5})\\s*[x×]\\s*(\\d{2,5})\\s*$/i.exec(size);\n if (px) return { kind: \"pixels\", width: Number(px[1]), height: Number(px[2]) };\n const cls = /^\\s*([124])k\\s*$/i.exec(size);\n if (cls) return { kind: \"class\", value: `${cls[1]}K` as \"1K\" | \"2K\" | \"4K\" };\n return undefined;\n}\n\n/** Validated request with defaults applied. Throws `invalid_request`. */\nexport function normalizeRequest(\n engine: ImageEngineId,\n request: ImageGenerateRequest,\n): ImageGenerateRequest & { count: number; fileStem: string; referenceImages: string[] } {\n const bad = (message: string) => new ImageGenerationError(\"invalid_request\", engine, message);\n if (!request.prompt?.trim()) throw bad(\"The prompt is empty\");\n const count = request.count ?? 1;\n if (!Number.isInteger(count) || count < 1 || count > MAX_IMAGE_COUNT) {\n throw bad(`count must be an integer from 1 to ${MAX_IMAGE_COUNT}`);\n }\n if (request.aspectRatio && !IMAGE_ASPECT_RATIOS.includes(request.aspectRatio)) {\n throw bad(`Unsupported aspect ratio ${request.aspectRatio}`);\n }\n if (request.size && request.size !== \"auto\" && !parseSize(request.size)) {\n throw bad(`size must look like 1024x1024 or 2K, got ${request.size}`);\n }\n if (!path.isAbsolute(request.outputDir)) throw bad(\"outputDir must be an absolute path\");\n const referenceImages = request.referenceImages ?? [];\n if (referenceImages.length > MAX_REFERENCE_IMAGES) {\n throw bad(`At most ${MAX_REFERENCE_IMAGES} reference images are supported`);\n }\n for (const ref of referenceImages) {\n if (!path.isAbsolute(ref)) throw bad(`Reference image paths must be absolute: ${ref}`);\n }\n return { ...request, count, fileStem: request.fileStem ?? \"image\", referenceImages };\n}\n\nexport interface ReferenceImage {\n path: string;\n mimeType: string;\n data: Buffer;\n}\n\n/** Read and type-check reference images. Throws `invalid_request` / `io`. */\nexport async function readReferenceImages(\n engine: ImageEngineId,\n paths: readonly string[],\n): Promise<ReferenceImage[]> {\n const out: ReferenceImage[] = [];\n for (const file of paths) {\n let data: Buffer;\n try {\n const st = await stat(file);\n if (!st.isFile()) throw new Error(\"not a file\");\n if (st.size > MAX_REFERENCE_BYTES) {\n throw new ImageGenerationError(\n \"invalid_request\",\n engine,\n `Reference image is larger than ${MAX_REFERENCE_BYTES / 1024 / 1024} MB: ${file}`,\n );\n }\n data = await readFile(file);\n } catch (error) {\n if (error instanceof ImageGenerationError) throw error;\n throw new ImageGenerationError(\"io\", engine, `Cannot read reference image ${file}`, {\n cause: error,\n });\n }\n const meta = imageInfo(data);\n if (!meta) {\n throw new ImageGenerationError(\n \"invalid_request\",\n engine,\n `Reference image is not a PNG, JPEG, WebP or GIF: ${file}`,\n );\n }\n out.push({ path: file, mimeType: meta.mimeType, data });\n }\n return out;\n}\n\n/** Width / height ratio implied by `size` or `aspectRatio`; `undefined` = engine default. */\nexport function requestedRatio(request: Pick<ImageGenerateRequest, \"size\" | \"aspectRatio\">) {\n const size = request.size ? parseSize(request.size) : undefined;\n if (size?.kind === \"pixels\") return size.width / size.height;\n if (request.aspectRatio) {\n const [w, h] = request.aspectRatio.split(\":\").map(Number);\n return (w ?? 1) / (h ?? 1);\n }\n return undefined;\n}\n\n/** The supported ratio closest to `ratio` (compared in log space, so 2:1 and 1:2 are symmetric). */\nexport function nearestAspectRatio<T extends string>(ratio: number, allowed: readonly T[]): T {\n let best = allowed[0] as T;\n let bestDiff = Number.POSITIVE_INFINITY;\n for (const candidate of allowed) {\n const [w, h] = candidate.split(\":\").map(Number);\n const diff = Math.abs(Math.log((w ?? 1) / (h ?? 1)) - Math.log(ratio));\n if (diff < bestDiff) {\n best = candidate;\n bestDiff = diff;\n }\n }\n return best;\n}\n\nexport type Orientation = \"square\" | \"landscape\" | \"portrait\";\n\nexport function orientationOf(ratio: number | undefined): Orientation | undefined {\n if (ratio === undefined) return undefined;\n if (ratio > 1.1) return \"landscape\";\n if (ratio < 1 / 1.1) return \"portrait\";\n return \"square\";\n}\n\n/**\n * An AbortSignal that fires on the caller's signal (`aborted`) or after `timeoutMs`\n * (`timeout`), with an `ImageGenerationError` as the reason.\n */\nexport function deadline(\n engine: ImageEngineId,\n timeoutMs: number,\n outer?: AbortSignal,\n): { signal: AbortSignal; dispose: () => void } {\n const controller = new AbortController();\n const timer = setTimeout(\n () =>\n controller.abort(\n new ImageGenerationError(\n \"timeout\",\n engine,\n `Image generation timed out after ${Math.round(timeoutMs / 1000)}s`,\n ),\n ),\n timeoutMs,\n );\n const onAbort = () =>\n controller.abort(\n new ImageGenerationError(\"aborted\", engine, \"Image generation was cancelled\", {\n cause: outer?.reason,\n }),\n );\n if (outer?.aborted) onAbort();\n else outer?.addEventListener(\"abort\", onAbort, { once: true });\n return {\n signal: controller.signal,\n dispose: () => {\n clearTimeout(timer);\n outer?.removeEventListener(\"abort\", onAbort);\n },\n };\n}\n","import { rm, rmdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport path from \"node:path\";\nimport type { ProviderStatus } from \"@codeden/contracts\";\nimport { detectCodex } from \"../codex/detect\";\nimport { startAppServer } from \"../codex/process\";\nimport type { ModelProviderCapabilitiesReadResponse } from \"../codex/protocol/v2\";\nimport { type ResolvedCommand, resolveExecutable } from \"../util/exec\";\nimport { type ConnectCodex, runCodexImageTurn } from \"./codex-turn\";\nimport { ImageGenerationError, toImageError } from \"./errors\";\nimport { writeImages } from \"./image-file\";\nimport {\n deadline,\n normalizeRequest,\n orientationOf,\n parseSize,\n readReferenceImages,\n requestedRatio,\n} from \"./request\";\nimport type {\n ImageEngine,\n ImageEngineAvailability,\n ImageGenerateRequest,\n ImageGenerateResult,\n} from \"./types\";\n\nexport interface CodexImageEngineOptions {\n /** Defaults to `codex` on PATH. */\n executable?: ResolvedCommand;\n /** Empty/undefined = the user's configured Codex model. */\n model?: string;\n /** Default 300s. */\n timeoutMs?: number;\n /** Delete the copy Codex keeps under `~/.codex/generated_images/` (default true). */\n removeCodexCopies?: boolean;\n /** Defaults to `$CODEX_HOME` or `~/.codex`; only files under it are ever removed. */\n codexHome?: string;\n /** Injected for tests. */\n detectStatus?: () => Promise<ProviderStatus>;\n /** Injected for tests; defaults to spawning `codex app-server`. */\n connect?: ConnectCodex;\n}\n\nconst STANDARD_SHAPES = { square: \"1024x1024\", landscape: \"1536x1024\", portrait: \"1024x1536\" };\n\n/** The user turn sent to Codex. Pure; exported for tests. */\nexport function buildCodexImagePrompt(\n request: Pick<ImageGenerateRequest, \"prompt\" | \"size\" | \"aspectRatio\" | \"quality\"> & {\n count: number;\n referenceImages: readonly string[];\n },\n): string {\n const lines: string[] = [];\n lines.push(\n request.count === 1\n ? \"Generate one image with your built-in image generation tool.\"\n : `Generate ${request.count} separate images with your built-in image generation tool: call the tool ${request.count} times, one image per call.`,\n );\n const size = request.size ? parseSize(request.size) : undefined;\n const orientation = orientationOf(requestedRatio(request));\n if (size?.kind === \"pixels\") {\n lines.push(`Size: ${size.width}x${size.height} (${orientation}).`);\n } else if (orientation) {\n const ratio = request.aspectRatio ? `aspect ratio ${request.aspectRatio}, ` : \"\";\n lines.push(`Shape: ${orientation} (${ratio}${STANDARD_SHAPES[orientation]}).`);\n }\n if (size?.kind === \"class\") lines.push(`Resolution: ${size.value}.`);\n if (request.quality && request.quality !== \"auto\") lines.push(`Quality: ${request.quality}.`);\n if (request.referenceImages.length) {\n lines.push(\n request.referenceImages.length === 1\n ? \"Use the attached image as the reference to edit or vary.\"\n : \"Use the attached images as references.\",\n );\n }\n lines.push(\n \"Do not run commands or use any other tool.\",\n \"\",\n \"Image description:\",\n request.prompt.trim(),\n );\n return lines.join(\"\\n\");\n}\n\n/** Reason text for an unusable Codex install, or `undefined` when it can be used. */\nexport function codexUnavailableReason(status: ProviderStatus): string | undefined {\n if (!status.installed) return status.issues[0]?.message ?? \"Codex is not installed.\";\n if (!status.supported) {\n return (\n status.issues.find((i) => i.code === \"version_unsupported\")?.message ??\n \"This Codex version is not supported.\"\n );\n }\n if (status.loggedIn === false) return \"Codex is not logged in (run `codex login`).\";\n if (status.loggedIn === null) return \"Could not read `codex login status`.\";\n return undefined;\n}\n\n/**\n * Image generation through the user's own Codex login (no API key): an ephemeral,\n * tool-restricted `codex app-server` turn whose built-in image generation tool returns the\n * image bytes, which CodeDen writes to the requested path itself.\n */\nexport class CodexImageEngine implements ImageEngine {\n readonly id = \"codex\" as const;\n readonly label = \"Codex\";\n readonly capabilities = { referenceImages: true, exactSize: false, requiresApiKey: false };\n readonly defaultModel = \"\";\n private readonly connect: ConnectCodex;\n\n constructor(private readonly opts: CodexImageEngineOptions = {}) {\n const exe = opts.executable;\n this.connect =\n opts.connect ??\n ((handlers, cwd) => {\n const resolved = exe ?? resolveExecutable(\"codex\");\n if (!resolved) return Promise.reject(new Error(\"Codex is not installed\"));\n return startAppServer(resolved, handlers, { cwd }).then(({ rpc }) => ({\n request: <T>(method: string, params: unknown) =>\n rpc.request<T>(method as never, params as never),\n close: () => rpc.close(),\n }));\n });\n }\n\n async detect(): Promise<ImageEngineAvailability> {\n try {\n const status = await (this.opts.detectStatus?.() ??\n detectCodex(this.opts.executable ? { executable: this.opts.executable } : {}));\n const reason = codexUnavailableReason(status);\n if (reason) return { available: false, reason };\n const caps = await this.readCapabilities();\n if (!caps.imageGeneration) {\n return {\n available: false,\n reason: \"The configured Codex model provider does not support image generation.\",\n };\n }\n return {\n available: true,\n reason: `Uses the Codex login (${status.authMethod ?? \"unknown\"}).`,\n };\n } catch (error) {\n return {\n available: false,\n reason: `Could not check Codex image generation: ${error instanceof Error ? error.message : String(error)}`,\n };\n }\n }\n\n async generate(input: ImageGenerateRequest): Promise<ImageGenerateResult> {\n const request = normalizeRequest(this.id, input);\n const { signal, dispose } = deadline(\n this.id,\n request.timeoutMs ?? this.opts.timeoutMs ?? 300_000,\n request.signal,\n );\n try {\n if (!this.opts.connect && !(this.opts.executable ?? resolveExecutable(\"codex\"))) {\n throw new ImageGenerationError(\"unavailable\", this.id, \"Codex is not installed\");\n }\n // Validate up front; Codex reads the files itself from the paths.\n await readReferenceImages(this.id, request.referenceImages);\n const turn = await runCodexImageTurn(this.connect, {\n prompt: buildCodexImagePrompt(request),\n referenceImages: request.referenceImages,\n count: request.count,\n ...(this.opts.model ? { model: this.opts.model } : {}),\n signal,\n });\n const files = await writeImages(\n this.id,\n turn.images.map((i) => i.data),\n request.outputDir,\n request.fileStem,\n );\n if (this.opts.removeCodexCopies !== false) {\n await this.removeCopies(turn.images.map((i) => i.savedPath));\n }\n const revisedPrompt = turn.images.find((i) => i.revisedPrompt)?.revisedPrompt ?? undefined;\n return {\n files,\n engine: this.id,\n model: turn.model,\n ...(revisedPrompt ? { revisedPrompt } : {}),\n };\n } catch (error) {\n throw toImageError(error, this.id, signal);\n } finally {\n dispose();\n }\n }\n\n private async readCapabilities(): Promise<ModelProviderCapabilitiesReadResponse> {\n const rpc = await this.connect(\n { onNotification: () => {}, onRequest: async () => ({}), onExit: () => {} },\n homedir(),\n );\n try {\n const timeout = new Promise<never>((_, reject) => {\n setTimeout(() => reject(new Error(\"timed out\")), 20_000).unref();\n });\n return await Promise.race([\n rpc.request<ModelProviderCapabilitiesReadResponse>(\"modelProvider/capabilities/read\", {}),\n timeout,\n ]);\n } finally {\n await rpc.close();\n }\n }\n\n /** Remove Codex's cached copies of our images (only inside `<codexHome>/generated_images`). */\n private async removeCopies(savedPaths: readonly (string | undefined)[]): Promise<void> {\n const home = this.opts.codexHome ?? process.env.CODEX_HOME ?? path.join(homedir(), \".codex\");\n const root = path.resolve(home, \"generated_images\");\n for (const saved of savedPaths) {\n if (!saved) continue;\n const file = path.resolve(saved);\n const rel = path.relative(root, file);\n if (!rel || rel.startsWith(\"..\") || path.isAbsolute(rel)) continue;\n await rm(file, { force: true }).catch(() => {});\n const dir = path.dirname(file);\n if (dir !== root) await rmdir(dir).catch(() => {}); // only succeeds when empty\n }\n }\n}\n","import { codeForHttpStatus, ImageGenerationError, toImageError } from \"./errors\";\nimport type { ImageEngineId } from \"./types\";\n\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\n/** An API key, or a function that reads it on demand (from the OS keychain). */\nexport type ApiKeySource = string | (() => string | undefined | Promise<string | undefined>);\n\nexport async function readApiKey(source: ApiKeySource | undefined): Promise<string | undefined> {\n if (source === undefined) return undefined;\n const key = typeof source === \"string\" ? source : await source();\n return key?.trim() || undefined;\n}\n\n/** POST JSON and parse the JSON reply, mapping HTTP failures to `ImageGenerationError`. */\nexport async function postJson<T>(\n engine: ImageEngineId,\n fetchImpl: FetchLike,\n url: string,\n headers: Record<string, string>,\n body: unknown,\n signal: AbortSignal,\n): Promise<T> {\n if (signal.aborted) throw toImageError(signal.reason, engine, signal);\n let response: Response;\n try {\n response = await fetchImpl(url, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\", ...headers },\n body: JSON.stringify(body),\n signal,\n });\n } catch (error) {\n throw toImageError(error, engine, signal);\n }\n const text = await response.text().catch(() => \"\");\n if (!response.ok) {\n const code = codeForHttpStatus(response.status, text);\n const retryAfter = parseRetryAfter(response.headers.get(\"retry-after\"));\n throw new ImageGenerationError(\n code,\n engine,\n `${engine} image API returned ${response.status}: ${apiErrorMessage(text)}`,\n { status: response.status, ...(retryAfter ? { retryAfter } : {}) },\n );\n }\n try {\n return JSON.parse(text) as T;\n } catch (error) {\n throw new ImageGenerationError(\n \"provider_error\",\n engine,\n \"The image API returned invalid JSON\",\n {\n status: response.status,\n cause: error,\n },\n );\n }\n}\n\n/** The `error.message` of a typical JSON error body, else the raw text (trimmed). */\nexport function apiErrorMessage(text: string): string {\n try {\n const parsed = JSON.parse(text) as { error?: { message?: unknown } | string };\n if (typeof parsed.error === \"string\") return parsed.error;\n if (typeof parsed.error?.message === \"string\") return parsed.error.message;\n } catch {\n // not JSON\n }\n return text.trim().slice(0, 500) || \"no details\";\n}\n\nfunction parseRetryAfter(value: string | null): Date | undefined {\n if (!value) return undefined;\n const seconds = Number(value);\n if (Number.isFinite(seconds)) return new Date(Date.now() + seconds * 1000);\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? undefined : date;\n}\n","import { ImageGenerationError, toImageError } from \"./errors\";\nimport { type ApiKeySource, type FetchLike, postJson, readApiKey } from \"./http\";\nimport { writeImages } from \"./image-file\";\nimport {\n deadline,\n nearestAspectRatio,\n normalizeRequest,\n parseSize,\n type ReferenceImage,\n readReferenceImages,\n} from \"./request\";\nimport type {\n ImageEngine,\n ImageEngineAvailability,\n ImageGenerateRequest,\n ImageGenerateResult,\n} from \"./types\";\n\n/** Current Gemini image model (\"Nano Banana\" family). */\nexport const GEMINI_IMAGE_MODEL = \"gemini-nano-banana-2.1\";\nexport const GEMINI_API_BASE = \"https://generativelanguage.googleapis.com/v1\";\nconst GEMINI_ASPECT_RATIOS = [\n \"1:1\",\n \"2:3\",\n \"3:2\",\n \"3:4\",\n \"4:3\",\n \"4:5\",\n \"5:4\",\n \"9:16\",\n \"16:9\",\n \"21:9\",\n] as const;\n\nexport interface GeminiImageEngineOptions {\n /** Google AI API key, or a reader for it (OS keychain). */\n apiKey?: ApiKeySource;\n model?: string;\n baseUrl?: string;\n fetch?: FetchLike;\n /** Default 120s. */\n timeoutMs?: number;\n}\n\ninterface GeminiPart {\n text?: string;\n thought?: boolean;\n inlineData?: { mimeType?: string; data?: string };\n}\ninterface GeminiResponse {\n candidates?: { content?: { parts?: GeminiPart[] }; finishReason?: string }[];\n promptFeedback?: { blockReason?: string };\n}\n\n/** The `generateContent` body for one image. Pure; exported for tests. */\nexport function buildGeminiRequest(\n request: Pick<ImageGenerateRequest, \"prompt\" | \"aspectRatio\" | \"size\">,\n references: readonly Pick<ReferenceImage, \"mimeType\" | \"data\">[],\n): Record<string, unknown> {\n const imageConfig: Record<string, string> = {};\n const size = request.size ? parseSize(request.size) : undefined;\n if (size?.kind === \"pixels\") {\n imageConfig.aspectRatio = nearestAspectRatio(size.width / size.height, GEMINI_ASPECT_RATIOS);\n const edge = Math.max(size.width, size.height);\n imageConfig.imageSize = edge <= 1024 ? \"1K\" : edge <= 2048 ? \"2K\" : \"4K\";\n } else if (size?.kind === \"class\") {\n imageConfig.imageSize = size.value;\n }\n if (request.aspectRatio && !imageConfig.aspectRatio)\n imageConfig.aspectRatio = request.aspectRatio;\n return {\n contents: [\n {\n role: \"user\",\n parts: [\n { text: request.prompt },\n ...references.map((r) => ({\n inlineData: { mimeType: r.mimeType, data: r.data.toString(\"base64\") },\n })),\n ],\n },\n ],\n generationConfig: {\n responseModalities: [\"TEXT\", \"IMAGE\"],\n ...(Object.keys(imageConfig).length ? { imageConfig } : {}),\n },\n };\n}\n\n/** Final (non-thought) images from a reply. Throws `content_policy` / `no_image`. */\nexport function parseGeminiImages(response: GeminiResponse): Buffer[] {\n const block = response.promptFeedback?.blockReason;\n if (block) {\n throw new ImageGenerationError(\n \"content_policy\",\n \"gemini\",\n `Gemini blocked the prompt (${block})`,\n );\n }\n const candidate = response.candidates?.[0];\n const parts = candidate?.content?.parts ?? [];\n const images = parts\n .filter((p) => !p.thought && p.inlineData?.data && p.inlineData.mimeType?.startsWith(\"image/\"))\n .map((p) => Buffer.from(p.inlineData?.data ?? \"\", \"base64\"));\n if (images.length) return images;\n const reason = candidate?.finishReason;\n if (reason && /SAFETY|PROHIBITED|BLOCKLIST|IMAGE_SAFETY|RECITATION/.test(reason)) {\n throw new ImageGenerationError(\n \"content_policy\",\n \"gemini\",\n `Gemini refused the image (${reason})`,\n );\n }\n const text = parts\n .filter((p) => !p.thought && p.text)\n .map((p) => p.text)\n .join(\" \")\n .trim();\n throw new ImageGenerationError(\n \"no_image\",\n \"gemini\",\n `Gemini returned no image${text ? `: ${text.slice(0, 300)}` : reason ? ` (${reason})` : \"\"}`,\n );\n}\n\n/** Gemini image models over the REST API with an API key. One request per image. */\nexport class GeminiImageEngine implements ImageEngine {\n readonly id = \"gemini\" as const;\n readonly label = \"Gemini\";\n readonly capabilities = { referenceImages: true, exactSize: false, requiresApiKey: true };\n readonly defaultModel = GEMINI_IMAGE_MODEL;\n private readonly fetchImpl: FetchLike;\n\n constructor(private readonly opts: GeminiImageEngineOptions = {}) {\n this.fetchImpl = opts.fetch ?? ((input, init) => fetch(input, init));\n }\n\n get model(): string {\n return this.opts.model ?? GEMINI_IMAGE_MODEL;\n }\n\n async detect(): Promise<ImageEngineAvailability> {\n try {\n return (await readApiKey(this.opts.apiKey))\n ? { available: true }\n : { available: false, reason: \"No Google AI API key is configured.\" };\n } catch (error) {\n return { available: false, reason: `Could not read the API key: ${String(error)}` };\n }\n }\n\n async generate(input: ImageGenerateRequest): Promise<ImageGenerateResult> {\n const request = normalizeRequest(this.id, input);\n const { signal, dispose } = deadline(\n this.id,\n request.timeoutMs ?? this.opts.timeoutMs ?? 120_000,\n request.signal,\n );\n try {\n const key = await readApiKey(this.opts.apiKey);\n if (!key)\n throw new ImageGenerationError(\n \"unavailable\",\n this.id,\n \"No Google AI API key is configured\",\n );\n const references = await readReferenceImages(this.id, request.referenceImages);\n const body = buildGeminiRequest(request, references);\n const url = `${(this.opts.baseUrl ?? GEMINI_API_BASE).replace(/\\/$/, \"\")}/models/${encodeURIComponent(this.model)}:generateContent`;\n const replies = await Promise.all(\n Array.from({ length: request.count }, () =>\n postJson<GeminiResponse>(\n this.id,\n this.fetchImpl,\n url,\n { \"x-goog-api-key\": key },\n body,\n signal,\n ),\n ),\n );\n const images = replies.map((r) => parseGeminiImages(r)[0] as Buffer);\n const files = await writeImages(this.id, images, request.outputDir, request.fileStem);\n return { files, engine: this.id, model: this.model };\n } catch (error) {\n throw toImageError(error, this.id, signal);\n } finally {\n dispose();\n }\n }\n}\n","import { ImageGenerationError, toImageError } from \"./errors\";\nimport { type ApiKeySource, type FetchLike, postJson, readApiKey } from \"./http\";\nimport { writeImages } from \"./image-file\";\nimport {\n deadline,\n normalizeRequest,\n orientationOf,\n parseSize,\n type ReferenceImage,\n readReferenceImages,\n requestedRatio,\n} from \"./request\";\nimport type {\n ImageEngine,\n ImageEngineAvailability,\n ImageGenerateRequest,\n ImageGenerateResult,\n} from \"./types\";\n\n/** Current GPT Image model (the Images API default). */\nexport const OPENAI_IMAGE_MODEL = \"gpt-image-2\";\nexport const OPENAI_API_BASE = \"https://api.openai.com/v1\";\nconst STANDARD_SIZES = { square: \"1024x1024\", landscape: \"1536x1024\", portrait: \"1024x1536\" };\n\nexport interface OpenAIImageEngineOptions {\n /** OpenAI API key, or a reader for it (OS keychain). */\n apiKey?: ApiKeySource;\n model?: string;\n baseUrl?: string;\n fetch?: FetchLike;\n /** Default 180s. */\n timeoutMs?: number;\n}\n\ninterface OpenAIImagesResponse {\n data?: { b64_json?: string; revised_prompt?: string }[];\n}\n\n/**\n * The Images API `size` for a request. `gpt-image-2` and newer accept any `WxH` with both\n * edges divisible by 16, a ratio between 1:3 and 3:1 and at most 3840 px; everything else is\n * mapped to the nearest standard size. `undefined` lets the API choose.\n */\nexport function openAiSize(\n request: Pick<ImageGenerateRequest, \"size\" | \"aspectRatio\">,\n model: string,\n): string | undefined {\n const size = request.size ? parseSize(request.size) : undefined;\n if (size?.kind === \"pixels\" && /^gpt-image-[2-9]/.test(model)) {\n const { width, height } = size;\n const ratio = width / height;\n if (\n width % 16 === 0 &&\n height % 16 === 0 &&\n ratio >= 1 / 3 &&\n ratio <= 3 &&\n Math.max(width, height) <= 3840\n ) {\n return `${width}x${height}`;\n }\n }\n const orientation = orientationOf(requestedRatio(request));\n return orientation ? STANDARD_SIZES[orientation] : undefined;\n}\n\n/** JSON body for `/images/generations` or (with references) `/images/edits`. Pure. */\nexport function buildOpenAIRequest(\n request: Pick<ImageGenerateRequest, \"prompt\" | \"size\" | \"aspectRatio\" | \"quality\"> & {\n count: number;\n },\n model: string,\n references: readonly Pick<ReferenceImage, \"mimeType\" | \"data\">[],\n): { path: \"/images/generations\" | \"/images/edits\"; body: Record<string, unknown> } {\n const size = openAiSize(request, model);\n const body: Record<string, unknown> = {\n model,\n prompt: request.prompt,\n n: request.count,\n output_format: \"png\",\n ...(size ? { size } : {}),\n ...(request.quality && request.quality !== \"auto\" ? { quality: request.quality } : {}),\n };\n if (!references.length) return { path: \"/images/generations\", body };\n body.images = references.map((r) => ({\n image_url: `data:${r.mimeType};base64,${r.data.toString(\"base64\")}`,\n }));\n return { path: \"/images/edits\", body };\n}\n\n/** OpenAI Images API (`gpt-image-*`) with an API key. */\nexport class OpenAIImageEngine implements ImageEngine {\n readonly id = \"openai\" as const;\n readonly label = \"OpenAI Images\";\n readonly capabilities = { referenceImages: true, exactSize: true, requiresApiKey: true };\n readonly defaultModel = OPENAI_IMAGE_MODEL;\n private readonly fetchImpl: FetchLike;\n\n constructor(private readonly opts: OpenAIImageEngineOptions = {}) {\n this.fetchImpl = opts.fetch ?? ((input, init) => fetch(input, init));\n }\n\n get model(): string {\n return this.opts.model ?? OPENAI_IMAGE_MODEL;\n }\n\n async detect(): Promise<ImageEngineAvailability> {\n try {\n return (await readApiKey(this.opts.apiKey))\n ? { available: true }\n : { available: false, reason: \"No OpenAI API key is configured.\" };\n } catch (error) {\n return { available: false, reason: `Could not read the API key: ${String(error)}` };\n }\n }\n\n async generate(input: ImageGenerateRequest): Promise<ImageGenerateResult> {\n const request = normalizeRequest(this.id, input);\n const { signal, dispose } = deadline(\n this.id,\n request.timeoutMs ?? this.opts.timeoutMs ?? 180_000,\n request.signal,\n );\n try {\n const key = await readApiKey(this.opts.apiKey);\n if (!key)\n throw new ImageGenerationError(\"unavailable\", this.id, \"No OpenAI API key is configured\");\n const references = await readReferenceImages(this.id, request.referenceImages);\n const { path, body } = buildOpenAIRequest(request, this.model, references);\n const base = (this.opts.baseUrl ?? OPENAI_API_BASE).replace(/\\/$/, \"\");\n const reply = await postJson<OpenAIImagesResponse>(\n this.id,\n this.fetchImpl,\n `${base}${path}`,\n { authorization: `Bearer ${key}` },\n body,\n signal,\n );\n const data = (reply.data ?? []).filter((d) => d.b64_json);\n if (!data.length)\n throw new ImageGenerationError(\"no_image\", this.id, \"OpenAI returned no image\");\n const images = data.map((d) => Buffer.from(d.b64_json ?? \"\", \"base64\"));\n const files = await writeImages(this.id, images, request.outputDir, request.fileStem);\n const revisedPrompt = data.find((d) => d.revised_prompt)?.revised_prompt;\n return {\n files,\n engine: this.id,\n model: this.model,\n ...(revisedPrompt ? { revisedPrompt } : {}),\n };\n } catch (error) {\n throw toImageError(error, this.id, signal);\n } finally {\n dispose();\n }\n }\n}\n","import type { Settings } from \"@codeden/contracts\";\nimport { CodexImageEngine, type CodexImageEngineOptions } from \"./codex\";\nimport { GeminiImageEngine, type GeminiImageEngineOptions } from \"./gemini\";\nimport { OpenAIImageEngine, type OpenAIImageEngineOptions } from \"./openai\";\nimport type { ImageEngine, ImageEngineAvailability, ImageEngineId } from \"./types\";\n\nexport type ImageEngineChoice = Settings[\"imageGeneration\"][\"engine\"];\n\nexport type ImageEnginePick =\n | { engine: ImageEngine; availability: ImageEngineAvailability }\n | { engine: null; reason: string };\n\n/**\n * Pure selection rule (§12.5): `none` hides the tool; an explicit engine is used only when\n * available (never silently swapped); `auto` prefers an engine that needs no API key (Codex\n * when logged in), then the first configured key engine in registration order.\n */\nexport function chooseImageEngine(\n choice: ImageEngineChoice,\n engines: readonly ImageEngine[],\n availability: ReadonlyMap<ImageEngineId, ImageEngineAvailability>,\n): ImageEnginePick {\n if (choice === \"none\")\n return { engine: null, reason: \"Image generation is turned off in Settings.\" };\n const ready = (engine: ImageEngine) => availability.get(engine.id)?.available === true;\n if (choice !== \"auto\") {\n const engine = engines.find((e) => e.id === choice);\n if (!engine) return { engine: null, reason: `The ${choice} image engine is not registered.` };\n const status = availability.get(engine.id);\n if (!status?.available) {\n return {\n engine: null,\n reason: status?.reason ?? `The ${engine.label} image engine is unavailable.`,\n };\n }\n return { engine, availability: status };\n }\n const ordered = [\n ...engines.filter((e) => !e.capabilities.requiresApiKey),\n ...engines.filter((e) => e.capabilities.requiresApiKey),\n ];\n const engine = ordered.find(ready);\n if (engine)\n return { engine, availability: availability.get(engine.id) as ImageEngineAvailability };\n const reasons = engines\n .map((e) => `${e.label}: ${availability.get(e.id)?.reason ?? \"unavailable\"}`)\n .join(\" \");\n return { engine: null, reason: `No image engine is available. ${reasons}`.trim() };\n}\n\n/** The image engines CodeDen knows about, in preference order. */\nexport class ImageEngineRegistry {\n private readonly engines: ImageEngine[];\n\n constructor(engines: readonly ImageEngine[]) {\n const ids = new Set<string>();\n for (const engine of engines) {\n if (ids.has(engine.id)) throw new Error(`Duplicate image engine: ${engine.id}`);\n ids.add(engine.id);\n }\n this.engines = [...engines];\n }\n\n list(): readonly ImageEngine[] {\n return this.engines;\n }\n\n get(id: ImageEngineId): ImageEngine | undefined {\n return this.engines.find((e) => e.id === id);\n }\n\n /** Detect every engine in parallel (each `detect()` never throws). */\n async detectAll(): Promise<Map<ImageEngineId, ImageEngineAvailability>> {\n const results = await Promise.all(\n this.engines.map(async (e) => [e.id, await e.detect()] as const),\n );\n return new Map(results);\n }\n\n /** The engine `generate_image` should use for these settings, or why there is none. */\n async pickDefault(\n settings: Pick<Settings[\"imageGeneration\"], \"engine\">,\n ): Promise<ImageEnginePick> {\n if (settings.engine === \"none\") return chooseImageEngine(\"none\", this.engines, new Map());\n const subset =\n settings.engine === \"auto\"\n ? this.engines\n : this.engines.filter((e) => e.id === settings.engine);\n const availability = new Map(\n await Promise.all(subset.map(async (e) => [e.id, await e.detect()] as const)),\n );\n return chooseImageEngine(settings.engine, this.engines, availability);\n }\n}\n\nexport interface DefaultImageEnginesOptions {\n codex?: CodexImageEngineOptions;\n gemini?: GeminiImageEngineOptions;\n openai?: OpenAIImageEngineOptions;\n}\n\n/** Codex, Gemini and OpenAI Images, in that order. API keys are read through the options. */\nexport function createImageEngineRegistry(\n opts: DefaultImageEnginesOptions = {},\n): ImageEngineRegistry {\n return new ImageEngineRegistry([\n new CodexImageEngine(opts.codex),\n new GeminiImageEngine(opts.gemini),\n new OpenAIImageEngine(opts.openai),\n ]);\n}\n","import type { ProviderInfo } from \"@codeden/contracts\";\nimport { type ProviderAdapter, providerInfo } from \"./adapter\";\nimport { ClaudeAdapter } from \"./claude/adapter\";\nimport { CodexAdapter } from \"./codex/adapter\";\n\n/** The set of adapters a runner has loaded, keyed by id. */\nexport class ProviderRegistry {\n private readonly adapters = new Map<string, ProviderAdapter>();\n\n constructor(adapters: ProviderAdapter[] = []) {\n for (const adapter of adapters) this.register(adapter);\n }\n\n register(adapter: ProviderAdapter): void {\n if (this.adapters.has(adapter.id)) {\n throw new Error(`Provider \"${adapter.id}\" is already registered`);\n }\n this.adapters.set(adapter.id, adapter);\n }\n\n get(id: string): ProviderAdapter | undefined {\n return this.adapters.get(id);\n }\n\n list(): ProviderAdapter[] {\n return [...this.adapters.values()];\n }\n\n info(): ProviderInfo[] {\n return this.list().map(providerInfo);\n }\n}\n\n/** Fresh instances of the built-in real providers (Claude Code, Codex). */\nexport function builtinProviders(): ProviderAdapter[] {\n return [new ClaudeAdapter(), new CodexAdapter()];\n}\n\nlet defaultRegistry: ProviderRegistry | undefined;\n\n/** Process-wide registry of the built-in providers, created on first use. */\nexport function defaultProviderRegistry(): ProviderRegistry {\n defaultRegistry ??= new ProviderRegistry(builtinProviders());\n return defaultRegistry;\n}\n\n/** A built-in provider by id (`claude`, `codex`). */\nexport function getProvider(id: string): ProviderAdapter | undefined {\n return defaultProviderRegistry().get(id);\n}\n\n/** All built-in providers. Check `detect()` for which are installed and logged in. */\nexport function listProviders(): ProviderAdapter[] {\n return defaultProviderRegistry().list();\n}\n","import { readFileSync, writeFileSync } from \"node:fs\";\nimport { userInfo } from \"node:os\";\nimport {\n AgentEvent,\n type AutonomyLevel,\n ProviderCapabilities,\n RuntimeResponse,\n UserInput,\n} from \"@codeden/contracts\";\n\n/** One recorded turn: the input sent, every event until the next send, and the answers given. */\nexport interface ReplayTurn {\n input: UserInput;\n events: AgentEvent[];\n /** Responses given to approval/question requests, keyed by request id. */\n responses: Record<string, RuntimeResponse>;\n}\n\n/**\n * A recorded provider session (§7.2 Replay). Paths under the recording's cwd and the CodeDen\n * session id are replaced with placeholders so fixtures are portable and replay deterministic.\n */\nexport interface ReplayFixture {\n version: 1;\n provider: string;\n scenario: string;\n recordedAt: string;\n cliVersion: string | null;\n autonomy: AutonomyLevel;\n model: string | null;\n capabilities: ProviderCapabilities;\n /** Events emitted before the first `send` (thread.started, session.updated). */\n preamble: AgentEvent[];\n turns: ReplayTurn[];\n}\n\nexport const CWD_PLACEHOLDER = \"<CWD>\";\nexport const SESSION_PLACEHOLDER = \"<SESSION>\";\n\n/** JSON string body for a raw string (what it looks like inside a JSON document). */\nconst jsonBody = (s: string) => JSON.stringify(s).slice(1, -1);\n\nfunction replaceAll(text: string, from: string, to: string): string {\n return from ? text.split(from).join(to) : text;\n}\n\n/**\n * Replace the recording cwd and session id with placeholders, and the OS user name (which\n * still shows up in streamed path fragments) with `user`.\n */\nexport function sanitizeFixture(\n fixture: ReplayFixture,\n cwd: string,\n sessionId: string,\n userName = safeUserName(),\n): ReplayFixture {\n let text = JSON.stringify(fixture);\n for (const variant of new Set([cwd, cwd.replace(/\\\\/g, \"/\")])) {\n text = replaceAll(text, jsonBody(variant), CWD_PLACEHOLDER);\n }\n text = replaceAll(text, jsonBody(sessionId), SESSION_PLACEHOLDER);\n if (userName && userName.length >= 3) {\n text = text.replace(\n new RegExp(`(?<=[\\\\\\\\/])${escapeRegExp(userName)}(?=[\\\\\\\\/])`, \"g\"),\n \"user\",\n );\n }\n return JSON.parse(text) as ReplayFixture;\n}\n\nfunction safeUserName(): string | undefined {\n try {\n return userInfo().username;\n } catch {\n return undefined;\n }\n}\n\nfunction escapeRegExp(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\n/** Substitute placeholders for a replay session's cwd and session id. */\nexport function instantiateFixture(\n fixture: ReplayFixture,\n cwd: string,\n sessionId: string,\n): ReplayFixture {\n let text = JSON.stringify(fixture);\n text = replaceAll(text, CWD_PLACEHOLDER, jsonBody(cwd));\n text = replaceAll(text, SESSION_PLACEHOLDER, jsonBody(sessionId));\n return JSON.parse(text) as ReplayFixture;\n}\n\n/** Validate a parsed fixture: every event, input and response must satisfy the contracts. */\nexport function parseFixture(value: unknown): ReplayFixture {\n const f = value as ReplayFixture;\n if (f?.version !== 1 || !Array.isArray(f.turns) || !Array.isArray(f.preamble)) {\n throw new Error(\"Not a CodeDen replay fixture (version 1)\");\n }\n ProviderCapabilities.parse(f.capabilities);\n for (const event of f.preamble) AgentEvent.parse(event);\n for (const turn of f.turns) {\n UserInput.parse(turn.input);\n for (const event of turn.events) AgentEvent.parse(event);\n for (const response of Object.values(turn.responses)) RuntimeResponse.parse(response);\n }\n return f;\n}\n\nexport function loadFixture(path: string): ReplayFixture {\n return parseFixture(JSON.parse(readFileSync(path, \"utf8\")));\n}\n\nexport function saveFixture(path: string, fixture: ReplayFixture): void {\n writeFileSync(path, `${JSON.stringify(fixture, null, 1)}\\n`);\n}\n","import type {\n AgentEvent,\n ModelInfo,\n ProviderCapabilities,\n ProviderStatus,\n RuntimeResponse,\n SessionOptions,\n UserInput,\n} from \"@codeden/contracts\";\nimport { type ProviderAdapter, type ProviderSession, ProviderSessionError } from \"../adapter\";\nimport { AsyncQueue } from \"../async-queue\";\nimport { instantiateFixture, type ReplayFixture } from \"./fixture\";\n\nexport interface ReplayProviderOptions {\n /** Adapter id; defaults to `replay`. */\n id?: string;\n /** Delay between events in ms (0 = yield only). */\n delayMs?: number;\n}\n\nclass Interrupted extends Error {}\n\nconst isRootTurnEnd = (e: AgentEvent, rootThreadId: string) =>\n (e.type === \"turn.completed\" || e.type === \"turn.failed\" || e.type === \"turn.interrupted\") &&\n e.threadId === rootThreadId;\n\n/**\n * Plays back a recorded session deterministically (§7.2): each `send()` emits the next\n * recorded turn's events. Recorded approval/question requests pause until `respond()` is\n * called for their request id; the recorded outcome then continues regardless of the answer.\n */\nexport class ReplaySession implements ProviderSession {\n readonly events = new AsyncQueue<AgentEvent>();\n private readonly fixture: ReplayFixture;\n private next = 0;\n private running: AbortController | undefined;\n private token: string | undefined;\n private readonly waiting = new Map<string, () => void>();\n private readonly rootThreadId: string;\n\n constructor(\n fixture: ReplayFixture,\n opts: SessionOptions,\n private readonly delayMs = 0,\n ) {\n this.fixture = instantiateFixture(fixture, opts.cwd, opts.sessionId);\n this.rootThreadId = `${opts.sessionId}:thread-root`;\n for (const event of this.fixture.preamble) this.emit(event);\n }\n\n resumeToken(): string | undefined {\n return this.token;\n }\n\n async send(_input: UserInput): Promise<void> {\n if (this.events.isClosed) throw new ProviderSessionError(\"closed\", \"Session is closed\");\n if (this.running) throw new ProviderSessionError(\"turn_running\", \"A turn is already running\");\n const turn = this.fixture.turns[this.next];\n if (!turn) throw new ProviderSessionError(\"no_recorded_turn\", \"The fixture has no more turns\");\n this.next += 1;\n const abort = new AbortController();\n this.running = abort;\n void this.play(turn.events, abort).finally(() => {\n if (this.running === abort) this.running = undefined;\n });\n }\n\n async interrupt(): Promise<void> {\n this.running?.abort();\n }\n\n async respond(requestId: string, _response: RuntimeResponse): Promise<void> {\n const resume = this.waiting.get(requestId);\n if (!resume) throw new ProviderSessionError(\"unknown_request\", `Unknown request ${requestId}`);\n this.waiting.delete(requestId);\n resume();\n }\n\n async close(): Promise<void> {\n this.running?.abort();\n await new Promise((r) => setImmediate(r));\n this.events.close();\n }\n\n private async play(events: AgentEvent[], abort: AbortController): Promise<void> {\n const signal = abort.signal;\n // Like the real adapters, the turn is marked idle before its terminal event is emitted,\n // so a consumer may `send()` as soon as it sees `turn.completed`.\n const idle = () => {\n if (this.running === abort) this.running = undefined;\n };\n let turnId: string | undefined;\n try {\n for (const event of events) {\n await this.step(signal);\n if (event.type === \"turn.started\" && event.threadId === this.rootThreadId) {\n turnId = event.turnId;\n }\n if (isRootTurnEnd(event, this.rootThreadId)) {\n turnId = undefined;\n idle();\n }\n this.emit(event);\n if (\n event.type === \"item.started\" &&\n (event.item.kind === \"approval_request\" || event.item.kind === \"user_question\")\n ) {\n await this.waitFor(event.item.requestId, signal);\n }\n }\n } catch (error) {\n if (!(error instanceof Interrupted)) throw error;\n idle();\n if (turnId) {\n this.emit({\n type: \"turn.interrupted\",\n threadId: this.rootThreadId,\n turnId,\n reason: \"user\",\n });\n }\n }\n }\n\n private waitFor(requestId: string, signal: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const onAbort = () => {\n this.waiting.delete(requestId);\n reject(new Interrupted());\n };\n if (signal.aborted) return onAbort();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n this.waiting.set(requestId, () => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n });\n });\n }\n\n private async step(signal: AbortSignal): Promise<void> {\n await new Promise((r) => (this.delayMs > 0 ? setTimeout(r, this.delayMs) : setImmediate(r)));\n if (signal.aborted) throw new Interrupted();\n }\n\n private emit(event: AgentEvent): void {\n if (event.type === \"session.updated\" && event.resumeToken) this.token = event.resumeToken;\n this.events.push(event);\n }\n}\n\n/** Replay adapter: serves sessions from one recorded fixture. Never spawns a CLI. */\nexport class ReplayProvider implements ProviderAdapter {\n readonly id: string;\n readonly displayName: string;\n\n constructor(\n private readonly fixture: ReplayFixture,\n private readonly options: ReplayProviderOptions = {},\n ) {\n this.id = options.id ?? \"replay\";\n this.displayName = `Replay (${fixture.provider}/${fixture.scenario})`;\n }\n\n async detect(): Promise<ProviderStatus> {\n return {\n providerId: this.id,\n installed: true,\n version: this.fixture.cliVersion,\n executablePath: null,\n loggedIn: true,\n authMethod: \"none\",\n account: null,\n loginExpiresAt: null,\n supported: true,\n issues: [],\n checkedAt: new Date().toISOString(),\n };\n }\n\n /** The recorded provider's capabilities, minus steering (replay can't inject input). */\n capabilities(): ProviderCapabilities {\n return { ...this.fixture.capabilities, steer: false };\n }\n\n models(): ModelInfo[] {\n const id = this.fixture.model ?? \"recorded\";\n return [{ id, label: id, efforts: [], isDefault: true }];\n }\n\n async openSession(opts: SessionOptions): Promise<ProviderSession> {\n return new ReplaySession(this.fixture, opts, this.options.delayMs ?? 0);\n }\n}\n","//#region src/utils/response/constants.ts\nconst X_ALREADY_SENT = \"x-hono-already-sent\";\n\n//#endregion\nexport { X_ALREADY_SENT as t };","//#region src/helper/websocket/index.ts\n/**\n* A context for controlling WebSockets\n*/\nvar WSContext = class {\n\t#init;\n\tconstructor(init) {\n\t\tthis.#init = init;\n\t\tthis.raw = init.raw;\n\t\tthis.url = init.url ? new URL(init.url) : null;\n\t\tthis.protocol = init.protocol ?? null;\n\t}\n\tsend(source, options) {\n\t\tthis.#init.send(source, options ?? {});\n\t}\n\traw;\n\tbinaryType = \"arraybuffer\";\n\tget readyState() {\n\t\treturn this.#init.readyState;\n\t}\n\turl;\n\tprotocol;\n\tclose(code, reason) {\n\t\tthis.#init.close(code, reason);\n\t}\n};\nconst createWSMessageEvent = (source) => {\n\treturn new MessageEvent(\"message\", { data: source });\n};\n/**\n* Create a WebSocket adapter/helper\n*/\nconst defineWebSocketHelper = (handler) => {\n\treturn ((...args) => {\n\t\tif (typeof args[0] === \"function\") {\n\t\t\tconst [createEvents, options] = args;\n\t\t\treturn async function upgradeWebSocket(c, next) {\n\t\t\t\tconst result = await handler(c, await createEvents(c), options);\n\t\t\t\tif (result) return result;\n\t\t\t\tawait next();\n\t\t\t};\n\t\t} else {\n\t\t\tconst [c, events, options] = args;\n\t\t\treturn (async () => {\n\t\t\t\tconst upgraded = await handler(c, events, options);\n\t\t\t\tif (!upgraded) throw new Error(\"Failed to upgrade WebSocket\");\n\t\t\t\treturn upgraded;\n\t\t\t})();\n\t\t}\n\t});\n};\n//#endregion\nexport { WSContext, createWSMessageEvent, defineWebSocketHelper };\n","import { t as X_ALREADY_SENT } from \"./constants-BLSFu_RU.mjs\";\nimport { STATUS_CODES, ServerResponse, createServer } from \"node:http\";\nimport { Http2ServerRequest, constants } from \"node:http2\";\nimport { Readable } from \"node:stream\";\nimport { defineWebSocketHelper } from \"hono/ws\";\n\n//#region src/error.ts\nvar RequestError = class extends Error {\n\tconstructor(message, options) {\n\t\tsuper(message, options);\n\t\tthis.name = \"RequestError\";\n\t}\n};\n\n//#endregion\n//#region src/headers.ts\nconst nonJoinedHeaders = new Set([\n\t\"age\",\n\t\"authorization\",\n\t\"content-length\",\n\t\"content-type\",\n\t\"etag\",\n\t\"expires\",\n\t\"from\",\n\t\"host\",\n\t\"if-modified-since\",\n\t\"if-unmodified-since\",\n\t\"last-modified\",\n\t\"location\",\n\t\"max-forwards\",\n\t\"proxy-authorization\",\n\t\"referer\",\n\t\"retry-after\",\n\t\"server\",\n\t\"user-agent\"\n]);\nconst validHeaderName = /^[!#$%&'*+\\-.^_`|~\\dA-Za-z]+$/;\nconst isHttpWhitespace = (code) => code === 9 || code === 10 || code === 13 || code === 32;\nconst normalizeHeaderValue = (value) => {\n\tif (!isHttpWhitespace(value.charCodeAt(0)) && !isHttpWhitespace(value.charCodeAt(value.length - 1))) return value;\n\tlet start = 0;\n\tlet end = value.length;\n\twhile (start < end && isHttpWhitespace(value.charCodeAt(start))) start++;\n\twhile (end > start && isHttpWhitespace(value.charCodeAt(end - 1))) end--;\n\treturn value.slice(start, end);\n};\nconst forbiddenHeaderValue = /[\\0\\r\\n]/;\nconst GlobalHeaders = globalThis.Headers;\nconst materializeHeaders = (rawHeaders, HeadersCtor = GlobalHeaders) => {\n\tconst headers = new HeadersCtor();\n\tfor (let i = 0; i < rawHeaders.length; i += 2) {\n\t\tconst name = rawHeaders[i];\n\t\tif (!name.startsWith(\":\")) headers.append(name, rawHeaders[i + 1]);\n\t}\n\treturn headers;\n};\nvar RequestHeaders = class {\n\t#incoming;\n\t#rawHeaders;\n\t#headers;\n\t#invalidValue;\n\tconstructor(incoming) {\n\t\tthis.#incoming = incoming;\n\t\tif (incoming instanceof Http2ServerRequest) this.#rawHeaders = incoming.rawHeaders.slice();\n\t}\n\tget #lazyRawHeaders() {\n\t\treturn this.#rawHeaders ??= this.#incoming.rawHeaders.slice();\n\t}\n\tget #native() {\n\t\tif (!this.#headers) {\n\t\t\tthis.#headers = materializeHeaders(this.#lazyRawHeaders);\n\t\t\tthis.#rawHeaders = void 0;\n\t\t}\n\t\treturn this.#headers;\n\t}\n\t#normalizedName(name) {\n\t\tif (typeof name !== \"string\") return;\n\t\tif (!validHeaderName.test(name)) throw new TypeError(`Invalid header name: ${name}`);\n\t\treturn name.toLowerCase();\n\t}\n\t#lookupHttp1(lowerName) {\n\t\tconst headers = this.#incoming instanceof Http2ServerRequest ? void 0 : this.#incoming.headers;\n\t\tif (!headers || nonJoinedHeaders.has(lowerName) || lowerName === \"set-cookie\" || lowerName === \"__proto__\") return;\n\t\tif (!Object.hasOwn(headers, lowerName)) return null;\n\t\tconst rawValue = headers[lowerName];\n\t\tif (typeof rawValue === \"string\") {\n\t\t\tconst value = normalizeHeaderValue(rawValue);\n\t\t\treturn forbiddenHeaderValue.test(value) ? void 0 : value;\n\t\t}\n\t}\n\t#lookup(rawHeaders, lowerName) {\n\t\tconst separator = lowerName === \"cookie\" ? \"; \" : \", \";\n\t\tlet value = null;\n\t\tfor (let i = 0; i < rawHeaders.length; i += 2) {\n\t\t\tconst rawName = rawHeaders[i];\n\t\t\tif (rawName.length === lowerName.length && rawName.toLowerCase() === lowerName) {\n\t\t\t\tconst rawValue = normalizeHeaderValue(rawHeaders[i + 1]);\n\t\t\t\tif (forbiddenHeaderValue.test(rawValue)) {\n\t\t\t\t\tthis.#invalidValue = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvalue = value === null ? rawValue : value + separator + rawValue;\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t}\n\tappend(name, value) {\n\t\tthis.#native.append(name, value);\n\t}\n\tdelete(name) {\n\t\tthis.#native.delete(name);\n\t}\n\tget(name) {\n\t\tconst lowerName = this.#normalizedName(name);\n\t\tif (lowerName && !this.#headers && !this.#invalidValue) {\n\t\t\tconst http1Value = this.#lookupHttp1(lowerName);\n\t\t\tif (http1Value !== void 0) return http1Value;\n\t\t\tconst value = this.#lookup(this.#lazyRawHeaders, lowerName);\n\t\t\tif (value !== void 0) return value;\n\t\t}\n\t\treturn this.#native.get(name);\n\t}\n\thas(name) {\n\t\tconst lowerName = this.#normalizedName(name);\n\t\tif (lowerName && !this.#headers && !this.#invalidValue) {\n\t\t\tconst http1Value = this.#lookupHttp1(lowerName);\n\t\t\tif (http1Value !== void 0) return http1Value !== null;\n\t\t\tconst value = this.#lookup(this.#lazyRawHeaders, lowerName);\n\t\t\tif (value !== void 0) return value !== null;\n\t\t}\n\t\treturn this.#native.has(name);\n\t}\n\tset(name, value) {\n\t\tthis.#native.set(name, value);\n\t}\n\tgetSetCookie() {\n\t\treturn this.#native.getSetCookie();\n\t}\n\tkeys() {\n\t\treturn this.#native.keys();\n\t}\n\tvalues() {\n\t\treturn this.#native.values();\n\t}\n\tentries() {\n\t\treturn this.#native.entries();\n\t}\n\tforEach(callback, thisArg) {\n\t\tthis.#native.forEach((value, key) => {\n\t\t\tcallback.call(thisArg, value, key, this);\n\t\t});\n\t}\n\t[Symbol.iterator]() {\n\t\treturn this.entries();\n\t}\n};\nObject.defineProperty(RequestHeaders.prototype, Symbol.for(\"nodejs.util.inspect.custom\"), { value: function(depth, options, inspectFn) {\n\treturn `Headers (lightweight) ${inspectFn(Object.fromEntries(this), {\n\t\t...options,\n\t\tdepth: depth == null ? null : depth - 1\n\t})}`;\n} });\nObject.setPrototypeOf(RequestHeaders.prototype, GlobalHeaders.prototype);\nconst newHeadersFromIncoming = (incoming) => globalThis.Headers === GlobalHeaders ? new RequestHeaders(incoming) : materializeHeaders(incoming.rawHeaders, globalThis.Headers);\n\n//#endregion\n//#region src/url.ts\nconst reValidRequestUrl = /^\\/[!#$&-;=?-\\[\\]_a-z~]*$/;\nconst reDotSegment = /\\/\\.\\.?(?:[/?#]|$)/;\nconst reValidHost = /^[a-z0-9._-]+(?::(?:[1-5]\\d{3,4}|[6-9]\\d{3}))?$/;\nconst validateRequestTarget = (target) => {\n\tconst backslash = target.indexOf(\"\\\\\");\n\tif (backslash !== -1) {\n\t\tconst query = target.indexOf(\"?\");\n\t\tif (query === -1 || backslash < query) throw new RequestError(\"Backslash in request path\");\n\t}\n};\nconst buildUrl = (scheme, host, incomingUrl) => {\n\tconst url = `${scheme}://${host}${incomingUrl}`;\n\tif (!reValidHost.test(host)) {\n\t\tvalidateRequestTarget(incomingUrl);\n\t\tconst urlObj = new URL(url);\n\t\tif (urlObj.hostname.length !== host.length && urlObj.hostname !== (host.includes(\":\") ? host.replace(/:\\d+$/, \"\") : host).toLowerCase()) throw new RequestError(\"Invalid host header\");\n\t\treturn urlObj.href;\n\t} else if (incomingUrl.length === 0) return url + \"/\";\n\telse {\n\t\tif (incomingUrl.charCodeAt(0) !== 47) throw new RequestError(\"Invalid URL\");\n\t\tif (!reValidRequestUrl.test(incomingUrl) || reDotSegment.test(incomingUrl)) {\n\t\t\tvalidateRequestTarget(incomingUrl);\n\t\t\treturn new URL(url).href;\n\t\t}\n\t\treturn url;\n\t}\n};\n\n//#endregion\n//#region src/request.ts\nconst toRequestError = (e) => {\n\tif (e instanceof RequestError) return e;\n\treturn new RequestError(e.message, { cause: e });\n};\nconst GlobalRequest = global.Request;\nvar Request$1 = class extends GlobalRequest {\n\tconstructor(input, options) {\n\t\tif (typeof input === \"object\" && getRequestCache in input) {\n\t\t\tconst hasReplacementBody = options !== void 0 && \"body\" in options && options.body != null;\n\t\t\tif (input[bodyConsumedDirectlyKey] && !hasReplacementBody) throw new TypeError(\"Cannot construct a Request with a Request object that has already been used.\");\n\t\t\tinput = input[getRequestCache]();\n\t\t}\n\t\tif (typeof (options?.body)?.getReader !== \"undefined\") options.duplex ??= \"half\";\n\t\tsuper(input, options);\n\t}\n};\nconst wrapBodyStream = Symbol(\"wrapBodyStream\");\nconst byteExactEncodings = new Set([\n\t\"latin1\",\n\t\"binary\",\n\t\"hex\",\n\t\"base64\",\n\t\"base64url\"\n]);\nconst isByteExactEncoding = (encoding) => encoding === null || byteExactEncodings.has(encoding);\nconst bodyBufferedBeforeDisconnectKey = Symbol(\"bodyBufferedBeforeDisconnect\");\nconst bodyBufferedLengthBeforeDisconnectKey = Symbol(\"bodyBufferedLengthBeforeDisconnect\");\nconst toBufferChunk = (chunk, encoding) => Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk, encoding ?? \"utf8\");\nconst isRecoverableDisconnectedIncoming = (incoming) => !(incoming instanceof Http2ServerRequest) && !!incoming.complete && !!incoming.readableAborted && typeof incoming.read === \"function\" && isByteExactEncoding(incoming.readableEncoding);\nconst recordBodyBufferedBeforeDisconnect = (incoming) => {\n\tif (incoming.readableDidRead || !isRecoverableDisconnectedIncoming(incoming)) return;\n\tconst incomingWithRecovery = incoming;\n\tincomingWithRecovery[bodyBufferedLengthBeforeDisconnectKey] ??= incoming.readableLength;\n};\nconst readBodyBufferedBeforeDisconnect = (incoming, chunks) => {\n\tif (incoming.readableDidRead && !chunks || !isRecoverableDisconnectedIncoming(incoming)) return;\n\tconst incomingWithRecovery = incoming;\n\tif (incomingWithRecovery[bodyBufferedBeforeDisconnectKey] !== void 0) return incomingWithRecovery[bodyBufferedBeforeDisconnectKey];\n\tlet result;\n\tconst errored = incoming.errored;\n\tif (errored && errored.code !== \"ECONNRESET\") result = errored;\n\telse if (incomingWithRecovery[bodyBufferedLengthBeforeDisconnectKey] !== void 0 && incoming.readableLength !== incomingWithRecovery[bodyBufferedLengthBeforeDisconnectKey]) result = newBodyUnusableError();\n\telse {\n\t\tconst bodyChunks = chunks ?? [];\n\t\tconst chunk = incoming.read();\n\t\tif (chunk !== null) bodyChunks.push(toBufferChunk(chunk, incoming.readableEncoding));\n\t\tconst buffer = bodyChunks.length === 1 ? bodyChunks[0] : Buffer.concat(bodyChunks);\n\t\tresult = buffer;\n\t\tconst contentLength = incoming.headers[\"content-length\"];\n\t\tif (typeof contentLength === \"string\" && /^\\d+$/.test(contentLength)) {\n\t\t\tconst expectedLength = Number(contentLength);\n\t\t\tif (Number.isSafeInteger(expectedLength) && buffer.length !== expectedLength) result = newBodyUnusableError();\n\t\t}\n\t}\n\tincomingWithRecovery[bodyBufferedBeforeDisconnectKey] = result;\n\treturn result;\n};\nconst enqueueBufferedBody = (controller, buffered) => {\n\tif (buffered instanceof Error) {\n\t\tcontroller.error(buffered);\n\t\treturn;\n\t}\n\tif (buffered.length > 0) controller.enqueue(buffered);\n\tcontroller.close();\n};\nconst newRequestFromIncoming = (method, url, headers, incoming, abortController) => {\n\tconst init = {\n\t\tmethod,\n\t\theaders,\n\t\tsignal: abortController.signal\n\t};\n\tif (method === \"TRACE\") {\n\t\tinit.method = \"GET\";\n\t\tconst req = new Request$1(url, init);\n\t\tObject.defineProperty(req, \"method\", { get() {\n\t\t\treturn \"TRACE\";\n\t\t} });\n\t\treturn req;\n\t}\n\tif (!(method === \"GET\" || method === \"HEAD\")) if (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) init.body = new ReadableStream({ start(controller) {\n\t\tcontroller.enqueue(incoming.rawBody);\n\t\tcontroller.close();\n\t} });\n\telse if (incoming[wrapBodyStream]) {\n\t\tlet reader;\n\t\tinit.body = new ReadableStream({ async pull(controller) {\n\t\t\ttry {\n\t\t\t\tif (!reader) {\n\t\t\t\t\tconst buffered = readBodyBufferedBeforeDisconnect(incoming);\n\t\t\t\t\tif (buffered !== void 0) {\n\t\t\t\t\t\tenqueueBufferedBody(controller, buffered);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader ||= Readable.toWeb(incoming).getReader();\n\t\t\t\tconst { done, value } = await reader.read();\n\t\t\t\tif (done) controller.close();\n\t\t\t\telse controller.enqueue(value);\n\t\t\t} catch (error) {\n\t\t\t\tcontroller.error(error);\n\t\t\t}\n\t\t} });\n\t} else {\n\t\tconst buffered = readBodyBufferedBeforeDisconnect(incoming);\n\t\tif (buffered !== void 0) init.body = new ReadableStream({ start(controller) {\n\t\t\tenqueueBufferedBody(controller, buffered);\n\t\t} });\n\t\telse init.body = Readable.toWeb(incoming);\n\t}\n\treturn new Request$1(url, init);\n};\nconst getRequestCache = Symbol(\"getRequestCache\");\nconst requestCache = Symbol(\"requestCache\");\nconst incomingKey = Symbol(\"incomingKey\");\nconst urlKey = Symbol(\"urlKey\");\nconst methodKey = Symbol(\"methodKey\");\nconst headersKey = Symbol(\"headersKey\");\nconst abortControllerKey = Symbol(\"abortControllerKey\");\nconst getAbortController = Symbol(\"getAbortController\");\nconst abortRequest = Symbol(\"abortRequest\");\nconst bodyBufferKey = Symbol(\"bodyBuffer\");\nconst bodyReadPromiseKey = Symbol(\"bodyReadPromise\");\nconst bodyConsumedDirectlyKey = Symbol(\"bodyConsumedDirectly\");\nconst bodyLockReaderKey = Symbol(\"bodyLockReader\");\nconst abortReasonKey = Symbol(\"abortReason\");\nconst newBodyUnusableError = () => {\n\treturn /* @__PURE__ */ new TypeError(\"Body is unusable\");\n};\nconst rejectBodyUnusable = () => {\n\treturn Promise.reject(newBodyUnusableError());\n};\nconst textDecoder = new TextDecoder();\nconst consumeBodyDirectOnce = (request) => {\n\tif (request[bodyConsumedDirectlyKey]) return rejectBodyUnusable();\n\trequest[bodyConsumedDirectlyKey] = true;\n};\nconst toArrayBuffer = (buf) => {\n\treturn buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n};\nconst contentType = (request) => {\n\treturn (request[headersKey] ||= newHeadersFromIncoming(request[incomingKey])).get(\"content-type\") || \"\";\n};\nconst methodTokenRegExp = /^[!#$%&'*+\\-.^_`|~0-9A-Za-z]+$/;\nconst normalizeIncomingMethod = (method) => {\n\tif (typeof method !== \"string\" || method.length === 0) return \"GET\";\n\tswitch (method) {\n\t\tcase \"DELETE\":\n\t\tcase \"GET\":\n\t\tcase \"HEAD\":\n\t\tcase \"OPTIONS\":\n\t\tcase \"PATCH\":\n\t\tcase \"POST\":\n\t\tcase \"PUT\":\n\t\tcase \"QUERY\": return method;\n\t}\n\tconst upper = method.toUpperCase();\n\tswitch (upper) {\n\t\tcase \"DELETE\":\n\t\tcase \"GET\":\n\t\tcase \"HEAD\":\n\t\tcase \"OPTIONS\":\n\t\tcase \"POST\":\n\t\tcase \"PUT\": return upper;\n\t\tdefault: return method;\n\t}\n};\nconst validateDirectReadMethod = (method) => {\n\tif (!methodTokenRegExp.test(method)) return /* @__PURE__ */ new TypeError(`'${method}' is not a valid HTTP method.`);\n\tconst normalized = method.toUpperCase();\n\tif (normalized === \"CONNECT\" || normalized === \"TRACK\" || normalized === \"TRACE\" && method !== \"TRACE\") return /* @__PURE__ */ new TypeError(`'${method}' HTTP method is unsupported.`);\n};\nconst readBodyWithFastPath = (request, method, fromBuffer) => {\n\tif (request[bodyConsumedDirectlyKey]) return rejectBodyUnusable();\n\tconst methodName = request.method;\n\tif (methodName === \"GET\" || methodName === \"HEAD\") return request[getRequestCache]()[method]();\n\tconst methodValidationError = validateDirectReadMethod(methodName);\n\tif (methodValidationError) return Promise.reject(methodValidationError);\n\tif (request[requestCache]) {\n\t\tif (methodName !== \"TRACE\") return request[requestCache][method]();\n\t}\n\tconst alreadyUsedError = consumeBodyDirectOnce(request);\n\tif (alreadyUsedError) return alreadyUsedError;\n\tconst raw = readRawBodyIfAvailable(request);\n\tif (raw) {\n\t\tconst result = Promise.resolve(fromBuffer(raw, request));\n\t\trequest[bodyBufferKey] = void 0;\n\t\treturn result;\n\t}\n\treturn readBodyDirect(request).then((buf) => {\n\t\tconst result = fromBuffer(buf, request);\n\t\trequest[bodyBufferKey] = void 0;\n\t\treturn result;\n\t});\n};\nconst readRawBodyIfAvailable = (request) => {\n\tconst incoming = request[incomingKey];\n\tif (\"rawBody\" in incoming && incoming.rawBody instanceof Buffer) return incoming.rawBody;\n};\nconst normalizeAbortError = (request, incoming) => {\n\tif (incoming.errored) return incoming.errored;\n\tconst reason = request[abortReasonKey];\n\tif (reason !== void 0) return reason instanceof Error ? reason : new Error(String(reason));\n\treturn /* @__PURE__ */ new Error(\"Client connection prematurely closed.\");\n};\nconst readBodyDirect = (request) => {\n\tif (request[bodyBufferKey]) return Promise.resolve(request[bodyBufferKey]);\n\tif (request[bodyReadPromiseKey]) return request[bodyReadPromiseKey];\n\tconst incoming = request[incomingKey];\n\tif (incoming.readableDidRead) return rejectBodyUnusable();\n\tconst buffered = readBodyBufferedBeforeDisconnect(incoming);\n\tif (buffered !== void 0) {\n\t\tif (buffered instanceof Error) return Promise.reject(buffered);\n\t\trequest[bodyBufferKey] = buffered;\n\t\treturn Promise.resolve(buffered);\n\t}\n\tconst promise = new Promise((resolve, reject) => {\n\t\tconst chunks = [];\n\t\tlet settled = false;\n\t\tconst finish = (callback) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tcleanup();\n\t\t\tcallback();\n\t\t};\n\t\tconst recoverCompleteBodyAfterDisconnect = (error) => {\n\t\t\tconst streamError = incoming.errored ?? error;\n\t\t\tif (!isRecoverableDisconnectedIncoming(incoming) || streamError && streamError.code !== \"ECONNRESET\") return false;\n\t\t\tfinish(() => {\n\t\t\t\tconst recovered = readBodyBufferedBeforeDisconnect(incoming, chunks);\n\t\t\t\tif (recovered instanceof Error) reject(recovered);\n\t\t\t\telse if (recovered === void 0) reject(error ?? normalizeAbortError(request, incoming));\n\t\t\t\telse {\n\t\t\t\t\trequest[bodyBufferKey] = recovered;\n\t\t\t\t\tresolve(recovered);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t};\n\t\tconst onData = (chunk) => {\n\t\t\tchunks.push(toBufferChunk(chunk, incoming.readableEncoding));\n\t\t};\n\t\tconst onEnd = () => {\n\t\t\tfinish(() => {\n\t\t\t\tconst buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks);\n\t\t\t\trequest[bodyBufferKey] = buffer;\n\t\t\t\tresolve(buffer);\n\t\t\t});\n\t\t};\n\t\tconst onError = (error) => {\n\t\t\tif (recoverCompleteBodyAfterDisconnect(error)) return;\n\t\t\tfinish(() => {\n\t\t\t\treject(error);\n\t\t\t});\n\t\t};\n\t\tconst onClose = () => {\n\t\t\tif (incoming.readableEnded) {\n\t\t\t\tonEnd();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (recoverCompleteBodyAfterDisconnect()) return;\n\t\t\tfinish(() => {\n\t\t\t\treject(normalizeAbortError(request, incoming));\n\t\t\t});\n\t\t};\n\t\tconst cleanup = () => {\n\t\t\tincoming.off(\"data\", onData);\n\t\t\tincoming.off(\"end\", onEnd);\n\t\t\tincoming.off(\"error\", onError);\n\t\t\tincoming.off(\"close\", onClose);\n\t\t\trequest[bodyReadPromiseKey] = void 0;\n\t\t};\n\t\tincoming.on(\"data\", onData);\n\t\tincoming.on(\"end\", onEnd);\n\t\tincoming.on(\"error\", onError);\n\t\tincoming.on(\"close\", onClose);\n\t\tqueueMicrotask(() => {\n\t\t\tif (settled) return;\n\t\t\tif (incoming.readableEnded) onEnd();\n\t\t\telse if (incoming.errored) onError(incoming.errored);\n\t\t\telse if (incoming.destroyed) onClose();\n\t\t});\n\t});\n\trequest[bodyReadPromiseKey] = promise;\n\treturn promise;\n};\nconst requestPrototype = {\n\tget method() {\n\t\treturn this[methodKey];\n\t},\n\tget url() {\n\t\treturn this[urlKey];\n\t},\n\tget headers() {\n\t\treturn this[headersKey] ||= newHeadersFromIncoming(this[incomingKey]);\n\t},\n\t[abortRequest](reason) {\n\t\tif (this[abortReasonKey] === void 0) this[abortReasonKey] = reason;\n\t\tconst abortController = this[abortControllerKey];\n\t\tif (abortController && !abortController.signal.aborted) abortController.abort(reason);\n\t},\n\t[getAbortController]() {\n\t\tthis[abortControllerKey] ||= new AbortController();\n\t\tif (this[abortReasonKey] !== void 0 && !this[abortControllerKey].signal.aborted) this[abortControllerKey].abort(this[abortReasonKey]);\n\t\treturn this[abortControllerKey];\n\t},\n\t[getRequestCache]() {\n\t\tconst abortController = this[getAbortController]();\n\t\tif (this[requestCache]) return this[requestCache];\n\t\tconst method = this.method;\n\t\tif (this[bodyConsumedDirectlyKey] && !(method === \"GET\" || method === \"HEAD\")) {\n\t\t\tthis[bodyBufferKey] = void 0;\n\t\t\tconst init = {\n\t\t\t\tmethod: method === \"TRACE\" ? \"GET\" : method,\n\t\t\t\theaders: this.headers,\n\t\t\t\tsignal: abortController.signal\n\t\t\t};\n\t\t\tif (method !== \"TRACE\") {\n\t\t\t\tinit.body = new ReadableStream({ start(c) {\n\t\t\t\t\tc.close();\n\t\t\t\t} });\n\t\t\t\tinit.duplex = \"half\";\n\t\t\t}\n\t\t\tconst req = new Request$1(this[urlKey], init);\n\t\t\tif (method === \"TRACE\") Object.defineProperty(req, \"method\", { get() {\n\t\t\t\treturn \"TRACE\";\n\t\t\t} });\n\t\t\treturn this[requestCache] = req;\n\t\t}\n\t\treturn this[requestCache] = newRequestFromIncoming(this.method, this[urlKey], this.headers, this[incomingKey], abortController);\n\t},\n\tget body() {\n\t\tif (!this[bodyConsumedDirectlyKey]) return this[getRequestCache]().body;\n\t\tconst request = this[getRequestCache]();\n\t\tif (!this[bodyLockReaderKey] && request.body) this[bodyLockReaderKey] = request.body.getReader();\n\t\treturn request.body;\n\t},\n\tget bodyUsed() {\n\t\tif (this[bodyConsumedDirectlyKey]) return true;\n\t\tif (this[requestCache]) return this[requestCache].bodyUsed;\n\t\treturn false;\n\t}\n};\nObject.defineProperty(requestPrototype, \"signal\", { get() {\n\treturn this[getAbortController]().signal;\n} });\n[\n\t\"cache\",\n\t\"credentials\",\n\t\"destination\",\n\t\"integrity\",\n\t\"mode\",\n\t\"redirect\",\n\t\"referrer\",\n\t\"referrerPolicy\",\n\t\"keepalive\"\n].forEach((k) => {\n\tObject.defineProperty(requestPrototype, k, { get() {\n\t\treturn this[getRequestCache]()[k];\n\t} });\n});\n[\"clone\", \"formData\"].forEach((k) => {\n\tObject.defineProperty(requestPrototype, k, { value: function() {\n\t\tif (this[bodyConsumedDirectlyKey]) {\n\t\t\tif (k === \"clone\") throw newBodyUnusableError();\n\t\t\treturn rejectBodyUnusable();\n\t\t}\n\t\treturn this[getRequestCache]()[k]();\n\t} });\n});\nObject.defineProperty(requestPrototype, \"text\", { value: function() {\n\treturn readBodyWithFastPath(this, \"text\", (buf) => textDecoder.decode(buf));\n} });\nObject.defineProperty(requestPrototype, \"arrayBuffer\", { value: function() {\n\treturn readBodyWithFastPath(this, \"arrayBuffer\", (buf) => toArrayBuffer(buf));\n} });\nObject.defineProperty(requestPrototype, \"blob\", { value: function() {\n\treturn readBodyWithFastPath(this, \"blob\", (buf, request) => {\n\t\tconst type = contentType(request);\n\t\tconst init = type ? { headers: { \"content-type\": type } } : void 0;\n\t\treturn new Response(buf, init).blob();\n\t});\n} });\nObject.defineProperty(requestPrototype, \"json\", { value: function() {\n\tif (this[bodyConsumedDirectlyKey]) return rejectBodyUnusable();\n\treturn this.text().then(JSON.parse);\n} });\nObject.defineProperty(requestPrototype, Symbol.for(\"nodejs.util.inspect.custom\"), { value: function(depth, options, inspectFn) {\n\treturn `Request (lightweight) ${inspectFn({\n\t\tmethod: this.method,\n\t\turl: this.url,\n\t\theaders: this.headers,\n\t\tnativeRequest: this[requestCache]\n\t}, {\n\t\t...options,\n\t\tdepth: depth == null ? null : depth - 1\n\t})}`;\n} });\nObject.setPrototypeOf(requestPrototype, Request$1.prototype);\nconst newRequest = (incoming, defaultHostname) => {\n\tconst req = Object.create(requestPrototype);\n\treq[incomingKey] = incoming;\n\treq[methodKey] = normalizeIncomingMethod(incoming.method);\n\tconst incomingUrl = incoming.url || \"\";\n\tif (incomingUrl[0] !== \"/\" && (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n\t\tif (incoming instanceof Http2ServerRequest) throw new RequestError(\"Absolute URL for :path is not allowed in HTTP/2\");\n\t\ttry {\n\t\t\tvalidateRequestTarget(incomingUrl);\n\t\t\treq[urlKey] = new URL(incomingUrl).href;\n\t\t} catch (e) {\n\t\t\tthrow new RequestError(\"Invalid absolute URL\", { cause: e });\n\t\t}\n\t\treturn req;\n\t}\n\tconst host = (incoming instanceof Http2ServerRequest ? incoming.authority : incoming.headers.host) || defaultHostname;\n\tif (!host) throw new RequestError(\"Missing host header\");\n\tlet scheme;\n\tif (incoming instanceof Http2ServerRequest) {\n\t\tscheme = incoming.scheme;\n\t\tif (!(scheme === \"http\" || scheme === \"https\")) throw new RequestError(\"Unsupported scheme\");\n\t} else scheme = incoming.socket && incoming.socket.encrypted ? \"https\" : \"http\";\n\ttry {\n\t\treq[urlKey] = buildUrl(scheme, host, incomingUrl);\n\t} catch (e) {\n\t\tif (e instanceof RequestError) throw e;\n\t\telse throw new RequestError(\"Invalid URL\", { cause: e });\n\t}\n\treturn req;\n};\n\n//#endregion\n//#region src/response.ts\nconst defaultContentType = \"text/plain; charset=UTF-8\";\nconst responseCache = Symbol(\"responseCache\");\nconst getResponseCache = Symbol(\"getResponseCache\");\nconst cacheKey = Symbol(\"cache\");\nconst GlobalResponse = global.Response;\nvar Response$1 = class Response$1 {\n\t#body;\n\t#init;\n\t[getResponseCache]() {\n\t\tconst cache = this[cacheKey];\n\t\tconst liveHeaders = cache && cache[2] instanceof Headers ? cache[2] : void 0;\n\t\tdelete this[cacheKey];\n\t\treturn this[responseCache] ||= new GlobalResponse(this.#body, liveHeaders ? {\n\t\t\tstatus: this.#init?.status,\n\t\t\tstatusText: this.#init?.statusText,\n\t\t\theaders: liveHeaders\n\t\t} : this.#init);\n\t}\n\tconstructor(body, init) {\n\t\tlet headers;\n\t\tthis.#body = body;\n\t\tif (init instanceof GlobalResponse) {\n\t\t\tconst cachedGlobalResponse = init[responseCache];\n\t\t\tif (cachedGlobalResponse) {\n\t\t\t\tthis.#init = cachedGlobalResponse;\n\t\t\t\tthis[getResponseCache]();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#init = init instanceof Response$1 ? init.#init : init;\n\t\t\theaders = new Headers(init.headers);\n\t\t} else this.#init = init;\n\t\tif (body == null || typeof body === \"string\" || typeof body?.getReader !== \"undefined\" || body instanceof Blob || body instanceof Uint8Array) this[cacheKey] = [\n\t\t\tinit?.status || 200,\n\t\t\tbody ?? null,\n\t\t\theaders || init?.headers\n\t\t];\n\t}\n\tget headers() {\n\t\tconst cache = this[cacheKey];\n\t\tif (cache) {\n\t\t\tif (!(cache[2] instanceof Headers)) cache[2] = new Headers(cache[2] || (cache[1] === null ? void 0 : { \"content-type\": defaultContentType }));\n\t\t\treturn cache[2];\n\t\t}\n\t\treturn this[getResponseCache]().headers;\n\t}\n\tget status() {\n\t\treturn this[cacheKey]?.[0] ?? this[getResponseCache]().status;\n\t}\n\tget ok() {\n\t\tconst status = this.status;\n\t\treturn status >= 200 && status < 300;\n\t}\n};\n[\n\t\"body\",\n\t\"bodyUsed\",\n\t\"redirected\",\n\t\"statusText\",\n\t\"trailers\",\n\t\"type\",\n\t\"url\"\n].forEach((k) => {\n\tObject.defineProperty(Response$1.prototype, k, { get() {\n\t\treturn this[getResponseCache]()[k];\n\t} });\n});\n[\n\t\"arrayBuffer\",\n\t\"blob\",\n\t\"clone\",\n\t\"formData\",\n\t\"json\",\n\t\"text\"\n].forEach((k) => {\n\tObject.defineProperty(Response$1.prototype, k, { value: function() {\n\t\treturn this[getResponseCache]()[k]();\n\t} });\n});\nObject.defineProperty(Response$1.prototype, Symbol.for(\"nodejs.util.inspect.custom\"), { value: function(depth, options, inspectFn) {\n\treturn `Response (lightweight) ${inspectFn({\n\t\tstatus: this.status,\n\t\theaders: this.headers,\n\t\tok: this.ok,\n\t\tnativeResponse: this[responseCache]\n\t}, {\n\t\t...options,\n\t\tdepth: depth == null ? null : depth - 1\n\t})}`;\n} });\nObject.setPrototypeOf(Response$1, GlobalResponse);\nObject.setPrototypeOf(Response$1.prototype, GlobalResponse.prototype);\nconst validRedirectUrl = /^https?:\\/\\/[!#-;=?-[\\]_a-z~A-Z]+$/;\nconst parseRedirectUrl = (url) => {\n\tif (url instanceof URL) return url.href;\n\tif (validRedirectUrl.test(url)) return url;\n\treturn new URL(url).href;\n};\nconst validRedirectStatuses = new Set([\n\t301,\n\t302,\n\t303,\n\t307,\n\t308\n]);\nObject.defineProperty(Response$1, \"redirect\", {\n\tvalue: function redirect(url, status = 302) {\n\t\tif (!validRedirectStatuses.has(status)) throw new RangeError(\"Invalid status code\");\n\t\treturn new Response$1(null, {\n\t\t\tstatus,\n\t\t\theaders: { location: parseRedirectUrl(url) }\n\t\t});\n\t},\n\twritable: true,\n\tconfigurable: true\n});\nObject.defineProperty(Response$1, \"json\", {\n\tvalue: function json(data, init) {\n\t\tconst body = JSON.stringify(data);\n\t\tif (body === void 0) throw new TypeError(\"The data is not JSON serializable\");\n\t\tconst initHeaders = init?.headers;\n\t\tlet headers;\n\t\tif (initHeaders) {\n\t\t\theaders = new Headers(initHeaders);\n\t\t\tif (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n\t\t} else headers = { \"content-type\": \"application/json\" };\n\t\treturn new Response$1(body, {\n\t\t\tstatus: init?.status ?? 200,\n\t\t\tstatusText: init?.statusText,\n\t\t\theaders\n\t\t});\n\t},\n\twritable: true,\n\tconfigurable: true\n});\n\n//#endregion\n//#region src/utils.ts\nasync function readWithoutBlocking(readPromise) {\n\treturn Promise.race([readPromise, Promise.resolve().then(() => Promise.resolve(void 0))]);\n}\nfunction writeFromReadableStreamDefaultReader(reader, writable, currentReadPromise) {\n\tconst cancel = (error) => {\n\t\treader.cancel(error).catch(() => {});\n\t};\n\twritable.on(\"close\", cancel);\n\twritable.on(\"error\", cancel);\n\t(currentReadPromise ?? reader.read()).then(flow, handleStreamError);\n\treturn reader.closed.finally(() => {\n\t\twritable.off(\"close\", cancel);\n\t\twritable.off(\"error\", cancel);\n\t});\n\tfunction handleStreamError(error) {\n\t\tif (error) writable.destroy(error);\n\t}\n\tfunction onDrain() {\n\t\treader.read().then(flow, handleStreamError);\n\t}\n\tfunction flow({ done, value }) {\n\t\ttry {\n\t\t\tif (done) writable.end();\n\t\t\telse if (!writable.write(value)) writable.once(\"drain\", onDrain);\n\t\t\telse return reader.read().then(flow, handleStreamError);\n\t\t} catch (e) {\n\t\t\thandleStreamError(e);\n\t\t}\n\t}\n}\nfunction writeFromReadableStream(stream, writable) {\n\tif (stream.locked) throw new TypeError(\"ReadableStream is locked.\");\n\telse if (writable.destroyed) return;\n\treturn writeFromReadableStreamDefaultReader(stream.getReader(), writable);\n}\nconst buildOutgoingHttpHeaders = (headers, defaultContentType) => {\n\tconst res = {};\n\tif (!(headers instanceof Headers)) headers = new Headers(headers ?? void 0);\n\tif (headers.has(\"set-cookie\")) {\n\t\tconst cookies = [];\n\t\tfor (const [k, v] of headers) if (k === \"set-cookie\") cookies.push(v);\n\t\telse res[k] = v;\n\t\tif (cookies.length > 0) res[\"set-cookie\"] = cookies;\n\t} else for (const [k, v] of headers) res[k] = v;\n\tif (defaultContentType) res[\"content-type\"] ??= defaultContentType;\n\treturn res;\n};\n\n//#endregion\n//#region src/listener.ts\nconst outgoingEnded = Symbol(\"outgoingEnded\");\nconst incomingDraining = Symbol(\"incomingDraining\");\nconst DRAIN_TIMEOUT_MS = 500;\nconst MAX_DRAIN_BYTES = 64 * 1024 * 1024;\nconst drainIncoming = (incoming) => {\n\tconst incomingWithDrainState = incoming;\n\tif (incoming.destroyed || incomingWithDrainState[incomingDraining]) return;\n\tincomingWithDrainState[incomingDraining] = true;\n\tif (incoming instanceof Http2ServerRequest) {\n\t\ttry {\n\t\t\tincoming.stream?.close?.(constants.NGHTTP2_NO_ERROR);\n\t\t} catch {}\n\t\treturn;\n\t}\n\tlet bytesRead = 0;\n\tconst cleanup = () => {\n\t\tclearTimeout(timer);\n\t\tincoming.off(\"data\", onData);\n\t\tincoming.off(\"end\", cleanup);\n\t\tincoming.off(\"error\", cleanup);\n\t};\n\tconst forceClose = () => {\n\t\tcleanup();\n\t\tconst socket = incoming.socket;\n\t\tif (socket && !socket.destroyed) {\n\t\t\tif (typeof socket.destroySoon === \"function\") socket.destroySoon();\n\t\t\telse if (typeof socket.destroy === \"function\") socket.destroy();\n\t\t}\n\t};\n\tconst timer = setTimeout(forceClose, DRAIN_TIMEOUT_MS);\n\ttimer.unref?.();\n\tconst onData = (chunk) => {\n\t\tbytesRead += chunk.length;\n\t\tif (bytesRead > MAX_DRAIN_BYTES) forceClose();\n\t};\n\tincoming.on(\"data\", onData);\n\tincoming.on(\"end\", cleanup);\n\tincoming.on(\"error\", cleanup);\n\tincoming.resume();\n};\nconst makeCloseHandler = (req, incoming, outgoing, needsBodyCleanup) => () => {\n\tif (incoming.errored) {\n\t\trecordBodyBufferedBeforeDisconnect(incoming);\n\t\treq[abortRequest](incoming.errored.toString());\n\t} else if (!outgoing.writableFinished || incoming instanceof Http2ServerRequest && incoming.aborted) {\n\t\trecordBodyBufferedBeforeDisconnect(incoming);\n\t\treq[abortRequest](\"Client connection prematurely closed.\");\n\t}\n\tif (needsBodyCleanup && !incoming.readableEnded) setTimeout(() => {\n\t\tif (!incoming.readableEnded) setTimeout(() => {\n\t\t\tdrainIncoming(incoming);\n\t\t});\n\t});\n};\nconst isImmediateCacheableResponse = (res) => {\n\tif (!(cacheKey in res)) return false;\n\tconst body = res[cacheKey][1];\n\treturn body === null || typeof body === \"string\" || body instanceof Uint8Array;\n};\nconst handleRequestError = () => new Response(null, { status: 400 });\nconst handleFetchError = (e) => new Response(null, { status: e instanceof Error && (e.name === \"TimeoutError\" || e.constructor.name === \"TimeoutError\") ? 504 : 500 });\nconst handleResponseError = (e, outgoing) => {\n\tconst err = e instanceof Error ? e : new Error(\"unknown error\", { cause: e });\n\tif (err.code === \"ERR_STREAM_PREMATURE_CLOSE\") console.info(\"The user aborted a request.\");\n\telse {\n\t\tconsole.error(e);\n\t\tif (!outgoing.headersSent) {\n\t\t\tif (outgoing instanceof ServerResponse) outgoing._contentLength = null;\n\t\t\toutgoing.writeHead(500, { \"Content-Type\": \"text/plain\" });\n\t\t}\n\t\toutgoing.end(`Error: ${err.message}`);\n\t\toutgoing.destroy(err);\n\t}\n};\nconst flushHeaders = (outgoing) => {\n\tif (\"flushHeaders\" in outgoing && outgoing.writable) outgoing.flushHeaders();\n};\nconst trySetContentLength = (outgoing, status, length) => {\n\tconst http1 = outgoing;\n\tif (http1._contentLength === null && http1._hasBody && http1.useChunkedEncodingByDefault && !http1._removedContLen && status >= 200 && status !== 204 && status !== 304 && !outgoing.hasHeader(\"content-length\") && !outgoing.hasHeader(\"transfer-encoding\") && !outgoing.hasHeader(\"trailer\")) {\n\t\thttp1._contentLength = length;\n\t\treturn true;\n\t}\n\treturn false;\n};\nconst writeDefaultHeaders = (outgoing, status, length) => {\n\tif (trySetContentLength(outgoing, status, length)) outgoing.writeHead(status, { \"Content-Type\": defaultContentType });\n\telse outgoing.writeHead(status, {\n\t\t\"Content-Type\": defaultContentType,\n\t\t\"Content-Length\": length\n\t});\n};\nconst responseViaCache = async (res, outgoing) => {\n\tlet [status, body, header] = res[cacheKey];\n\tif (!header) {\n\t\tif (body === null) {\n\t\t\toutgoing.writeHead(status);\n\t\t\toutgoing.end();\n\t\t} else if (typeof body === \"string\") {\n\t\t\twriteDefaultHeaders(outgoing, status, Buffer.byteLength(body));\n\t\t\toutgoing.end(body);\n\t\t} else if (body instanceof Uint8Array) {\n\t\t\twriteDefaultHeaders(outgoing, status, body.byteLength);\n\t\t\toutgoing.end(body);\n\t\t} else if (body instanceof Blob) {\n\t\t\twriteDefaultHeaders(outgoing, status, body.size);\n\t\t\toutgoing.end(new Uint8Array(await body.arrayBuffer()));\n\t\t} else {\n\t\t\toutgoing.writeHead(status, { \"Content-Type\": defaultContentType });\n\t\t\tflushHeaders(outgoing);\n\t\t\tawait writeFromReadableStream(body, outgoing)?.catch((e) => handleResponseError(e, outgoing));\n\t\t}\n\t\toutgoing[outgoingEnded]?.();\n\t\treturn;\n\t}\n\tlet hasContentLength = false;\n\tlet plainHeaders = false;\n\tlet canAutoLength = true;\n\tif (header instanceof Headers) {\n\t\thasContentLength = header.has(\"content-length\");\n\t\theader = buildOutgoingHttpHeaders(header, body === null ? void 0 : defaultContentType);\n\t} else if (Array.isArray(header)) {\n\t\tconst headerObj = new Headers(header);\n\t\thasContentLength = headerObj.has(\"content-length\");\n\t\theader = buildOutgoingHttpHeaders(headerObj, body === null ? void 0 : defaultContentType);\n\t} else {\n\t\tplainHeaders = true;\n\t\tfor (const key in header) {\n\t\t\tif (key.length === 14 && key.toLowerCase() === \"content-length\") {\n\t\t\t\thasContentLength = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (key.length === 17 && key.toLowerCase() === \"transfer-encoding\" || key.length === 7 && key.toLowerCase() === \"trailer\") canAutoLength = false;\n\t\t}\n\t}\n\tif (!hasContentLength) {\n\t\tlet length;\n\t\tif (typeof body === \"string\") length = Buffer.byteLength(body);\n\t\telse if (body instanceof Uint8Array) length = body.byteLength;\n\t\telse if (body instanceof Blob) length = body.size;\n\t\tif (length !== void 0 && (!plainHeaders || !canAutoLength || !trySetContentLength(outgoing, status, length))) {\n\t\t\tif (plainHeaders) header = { ...header };\n\t\t\theader[\"Content-Length\"] = length;\n\t\t}\n\t}\n\toutgoing.writeHead(status, header);\n\tif (body == null) outgoing.end();\n\telse if (typeof body === \"string\" || body instanceof Uint8Array) outgoing.end(body);\n\telse if (body instanceof Blob) outgoing.end(new Uint8Array(await body.arrayBuffer()));\n\telse {\n\t\tflushHeaders(outgoing);\n\t\tawait writeFromReadableStream(body, outgoing)?.catch((e) => handleResponseError(e, outgoing));\n\t}\n\toutgoing[outgoingEnded]?.();\n};\nconst isPromise = (res) => typeof res.then === \"function\";\nconst responseViaResponseObject = async (res, outgoing, options = {}) => {\n\tif (isPromise(res)) if (options.errorHandler) try {\n\t\tres = await res;\n\t} catch (err) {\n\t\tconst errRes = await options.errorHandler(err);\n\t\tif (!errRes) return;\n\t\tres = errRes;\n\t}\n\telse res = await res.catch(handleFetchError);\n\tif (cacheKey in res) return responseViaCache(res, outgoing);\n\tconst resHeaderRecord = buildOutgoingHttpHeaders(res.headers, res.body === null ? void 0 : defaultContentType);\n\tif (res.body) {\n\t\tconst reader = res.body.getReader();\n\t\tconst values = [];\n\t\tlet done = false;\n\t\tlet currentReadPromise = void 0;\n\t\tif (resHeaderRecord[\"transfer-encoding\"] !== \"chunked\") {\n\t\t\tlet maxReadCount = 2;\n\t\t\tfor (let i = 0; i < maxReadCount; i++) {\n\t\t\t\tcurrentReadPromise ||= reader.read();\n\t\t\t\tconst chunk = await readWithoutBlocking(currentReadPromise).catch((e) => {\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t\tdone = true;\n\t\t\t\t});\n\t\t\t\tif (!chunk) {\n\t\t\t\t\tif (i === 1) {\n\t\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve));\n\t\t\t\t\t\tmaxReadCount = 3;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcurrentReadPromise = void 0;\n\t\t\t\tif (chunk.value) values.push(chunk.value);\n\t\t\t\tif (chunk.done) {\n\t\t\t\t\tdone = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (done && !(\"content-length\" in resHeaderRecord)) resHeaderRecord[\"content-length\"] = values.reduce((acc, value) => acc + value.length, 0);\n\t\t}\n\t\toutgoing.writeHead(res.status, resHeaderRecord);\n\t\tvalues.forEach((value) => {\n\t\t\toutgoing.write(value);\n\t\t});\n\t\tif (done) outgoing.end();\n\t\telse {\n\t\t\tif (values.length === 0) flushHeaders(outgoing);\n\t\t\tawait writeFromReadableStreamDefaultReader(reader, outgoing, currentReadPromise);\n\t\t}\n\t} else if (resHeaderRecord[X_ALREADY_SENT]) {} else {\n\t\toutgoing.writeHead(res.status, resHeaderRecord);\n\t\toutgoing.end();\n\t}\n\toutgoing[outgoingEnded]?.();\n};\nconst getRequestListener = (fetchCallback, options = {}) => {\n\tconst autoCleanupIncoming = options.autoCleanupIncoming ?? true;\n\tif (options.overrideGlobalObjects !== false && global.Request !== Request$1) {\n\t\tObject.defineProperty(global, \"Request\", { value: Request$1 });\n\t\tObject.defineProperty(global, \"Response\", { value: Response$1 });\n\t}\n\treturn async (incoming, outgoing) => {\n\t\tlet res, req;\n\t\tlet needsBodyCleanup = false;\n\t\tlet closeHandlerAttached = false;\n\t\tconst ensureCloseHandler = () => {\n\t\t\tif (!req || closeHandlerAttached) return;\n\t\t\tcloseHandlerAttached = true;\n\t\t\toutgoing.on(\"close\", makeCloseHandler(req, incoming, outgoing, needsBodyCleanup));\n\t\t};\n\t\ttry {\n\t\t\treq = newRequest(incoming, options.hostname);\n\t\t\tneedsBodyCleanup = autoCleanupIncoming && !(incoming.method === \"GET\" || incoming.method === \"HEAD\");\n\t\t\tif (needsBodyCleanup) {\n\t\t\t\tincoming[wrapBodyStream] = true;\n\t\t\t\tif (incoming instanceof Http2ServerRequest) outgoing[outgoingEnded] = () => {\n\t\t\t\t\tif (!incoming.readableEnded) setTimeout(() => {\n\t\t\t\t\t\tif (!incoming.readableEnded) setTimeout(() => {\n\t\t\t\t\t\t\tincoming.destroy();\n\t\t\t\t\t\t\toutgoing.destroy();\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t}\n\t\t\tres = fetchCallback(req, {\n\t\t\t\tincoming,\n\t\t\t\toutgoing\n\t\t\t});\n\t\t\tif (!isPromise(res) && isImmediateCacheableResponse(res)) {\n\t\t\t\tif (needsBodyCleanup && !incoming.readableEnded) outgoing.once(\"finish\", () => {\n\t\t\t\t\tif (!incoming.readableEnded) drainIncoming(incoming);\n\t\t\t\t});\n\t\t\t\treturn responseViaCache(res, outgoing);\n\t\t\t}\n\t\t\tensureCloseHandler();\n\t\t} catch (e) {\n\t\t\tif (!res) if (options.errorHandler) {\n\t\t\t\tensureCloseHandler();\n\t\t\t\tres = await options.errorHandler(req ? e : toRequestError(e));\n\t\t\t\tif (!res) return;\n\t\t\t} else if (!req) res = handleRequestError();\n\t\t\telse res = handleFetchError(e);\n\t\t\telse return handleResponseError(e, outgoing);\n\t\t}\n\t\ttry {\n\t\t\treturn await responseViaResponseObject(res, outgoing, options);\n\t\t} catch (e) {\n\t\t\treturn handleResponseError(e, outgoing);\n\t\t}\n\t};\n};\n\n//#endregion\n//#region src/websocket.ts\n/**\n* @link https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent\n*/\nconst CloseEvent = globalThis.CloseEvent ?? class extends Event {\n\t#eventInitDict;\n\tconstructor(type, eventInitDict = {}) {\n\t\tsuper(type, eventInitDict);\n\t\tthis.#eventInitDict = eventInitDict;\n\t}\n\tget wasClean() {\n\t\treturn this.#eventInitDict.wasClean ?? false;\n\t}\n\tget code() {\n\t\treturn this.#eventInitDict.code ?? 0;\n\t}\n\tget reason() {\n\t\treturn this.#eventInitDict.reason ?? \"\";\n\t}\n};\n/**\n* Node.js has no global `ErrorEvent`, unlike `Event`/`MessageEvent`/`CloseEvent`.\n* @link https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent\n*/\nconst ErrorEvent = globalThis.ErrorEvent ?? class extends Event {\n\t#eventInitDict;\n\tconstructor(type, eventInitDict = {}) {\n\t\tsuper(type, eventInitDict);\n\t\tthis.#eventInitDict = eventInitDict;\n\t}\n\tget message() {\n\t\treturn this.#eventInitDict.message ?? \"\";\n\t}\n\tget filename() {\n\t\treturn this.#eventInitDict.filename ?? \"\";\n\t}\n\tget lineno() {\n\t\treturn this.#eventInitDict.lineno ?? 0;\n\t}\n\tget colno() {\n\t\treturn this.#eventInitDict.colno ?? 0;\n\t}\n\tget error() {\n\t\treturn this.#eventInitDict.error ?? null;\n\t}\n};\nconst generateConnectionSymbol = () => Symbol(\"connection\");\nconst CONNECTION_SYMBOL_KEY = Symbol(\"CONNECTION_SYMBOL_KEY\");\nconst WAIT_FOR_WEBSOCKET_SYMBOL = Symbol(\"WAIT_FOR_WEBSOCKET_SYMBOL\");\nconst responseHeadersToSkip = new Set([\n\t\"connection\",\n\t\"content-length\",\n\t\"keep-alive\",\n\t\"proxy-authenticate\",\n\t\"proxy-authorization\",\n\t\"te\",\n\t\"trailer\",\n\t\"transfer-encoding\",\n\t\"upgrade\",\n\t\"sec-websocket-accept\",\n\t\"sec-websocket-extensions\",\n\t\"sec-websocket-protocol\"\n]);\nconst appendResponseHeaders = (headers, responseHeaders) => {\n\tif (!responseHeaders) return;\n\tresponseHeaders.forEach((value, key) => {\n\t\tif (responseHeadersToSkip.has(key.toLowerCase())) return;\n\t\theaders.push(`${key}: ${value}`);\n\t});\n};\nconst rejectUpgradeRequest = (socket, status, responseHeaders) => {\n\tif (socket.destroyed) return;\n\tconst responseLines = [\"Connection: close\", \"Content-Length: 0\"];\n\tappendResponseHeaders(responseLines, responseHeaders);\n\tsocket.end(`HTTP/1.1 ${status.toString()} ${STATUS_CODES[status] ?? \"\"}\\r\\n${responseLines.join(\"\\r\\n\")}\\r\\n\\r\n`);\n};\nconst createUpgradeRequest = (request) => {\n\tconst protocol = request.socket.encrypted ? \"https\" : \"http\";\n\tconst incomingUrl = request.url ?? \"/\";\n\tlet url;\n\tif (incomingUrl[0] !== \"/\" && (incomingUrl.startsWith(\"http://\") || incomingUrl.startsWith(\"https://\"))) {\n\t\tvalidateRequestTarget(incomingUrl);\n\t\turl = new URL(incomingUrl).href;\n\t} else url = buildUrl(protocol, request.headers.host ?? \"localhost\", incomingUrl);\n\tconst headers = new Headers();\n\tfor (const key in request.headers) {\n\t\tconst value = request.headers[key];\n\t\tif (!value) continue;\n\t\theaders.append(key, Array.isArray(value) ? value[0] : value);\n\t}\n\treturn new Request(url, { headers });\n};\nconst setupWebSocket = (options) => {\n\tconst { server, fetchCallback, wss } = options;\n\tconst waiterMap = /* @__PURE__ */ new Map();\n\twss.on(\"connection\", (ws, request) => {\n\t\tconst waiter = waiterMap.get(request);\n\t\tif (waiter) {\n\t\t\twaiter.resolve(ws);\n\t\t\twaiterMap.delete(request);\n\t\t}\n\t});\n\tconst rejectWaiter = (request) => {\n\t\tconst waiter = waiterMap.get(request);\n\t\tif (waiter) {\n\t\t\twaiterMap.delete(request);\n\t\t\twaiter.reject(/* @__PURE__ */ new Error(\"WebSocket handshake aborted\"));\n\t\t}\n\t};\n\tconst waitForWebSocket = (request, connectionSymbol) => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\twaiterMap.set(request, {\n\t\t\t\tresolve,\n\t\t\t\treject,\n\t\t\t\tconnectionSymbol\n\t\t\t});\n\t\t});\n\t};\n\tserver.on(\"upgrade\", async (request, socket, head) => {\n\t\tif (request.headers.upgrade?.toLowerCase() !== \"websocket\") return;\n\t\tconst ignoreSocketError = () => {};\n\t\tconst reclaimWaiterOnClose = () => rejectWaiter(request);\n\t\tsocket.on(\"error\", ignoreSocketError);\n\t\tsocket.once(\"close\", reclaimWaiterOnClose);\n\t\tconst env = {\n\t\t\tincoming: request,\n\t\t\toutgoing: void 0,\n\t\t\twss,\n\t\t\t[WAIT_FOR_WEBSOCKET_SYMBOL]: waitForWebSocket\n\t\t};\n\t\tlet status = 400;\n\t\tlet responseHeaders;\n\t\ttry {\n\t\t\tconst response = await fetchCallback(createUpgradeRequest(request), env);\n\t\t\tif (response instanceof Response) {\n\t\t\t\tstatus = response.status;\n\t\t\t\tresponseHeaders = response.headers;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (server.listenerCount(\"upgrade\") === 1) rejectUpgradeRequest(socket, error instanceof RequestError ? 400 : 500);\n\t\t\treturn;\n\t\t}\n\t\tif (socket.destroyed) {\n\t\t\trejectWaiter(request);\n\t\t\treturn;\n\t\t}\n\t\tconst waiter = waiterMap.get(request);\n\t\tif (!waiter || waiter.connectionSymbol !== env[CONNECTION_SYMBOL_KEY]) {\n\t\t\trejectWaiter(request);\n\t\t\tif (server.listenerCount(\"upgrade\") === 1) rejectUpgradeRequest(socket, status, responseHeaders);\n\t\t\treturn;\n\t\t}\n\t\tconst addResponseHeaders = (headers) => {\n\t\t\tappendResponseHeaders(headers, responseHeaders);\n\t\t};\n\t\twss.on(\"headers\", addResponseHeaders);\n\t\ttry {\n\t\t\twss.handleUpgrade(request, socket, head, (ws) => {\n\t\t\t\tsocket.off(\"close\", reclaimWaiterOnClose);\n\t\t\t\tsocket.off(\"error\", ignoreSocketError);\n\t\t\t\twss.emit(\"connection\", ws, request);\n\t\t\t});\n\t\t} finally {\n\t\t\twss.off(\"headers\", addResponseHeaders);\n\t\t}\n\t});\n\tserver.on(\"close\", () => {\n\t\twss.close();\n\t});\n};\nconst upgradeWebSocket = defineWebSocketHelper(async (c, events, options) => {\n\tif (c.req.header(\"upgrade\")?.toLowerCase() !== \"websocket\") return;\n\tconst env = c.env;\n\tconst waitForWebSocket = env[WAIT_FOR_WEBSOCKET_SYMBOL];\n\tif (!waitForWebSocket || !env.incoming) return new Response(null, { status: 500 });\n\tconst connectionSymbol = generateConnectionSymbol();\n\tenv[CONNECTION_SYMBOL_KEY] = connectionSymbol;\n\t(async () => {\n\t\tlet ws;\n\t\ttry {\n\t\t\tws = await waitForWebSocket(env.incoming, connectionSymbol);\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\t\tconst messagesReceivedInStarting = [];\n\t\tconst bufferMessage = (data, isBinary) => {\n\t\t\tmessagesReceivedInStarting.push([data, isBinary]);\n\t\t};\n\t\tws.on(\"message\", bufferMessage);\n\t\tconst ctx = {\n\t\t\tbinaryType: \"arraybuffer\",\n\t\t\tclose(code, reason) {\n\t\t\t\tws.close(code, reason);\n\t\t\t},\n\t\t\tprotocol: ws.protocol,\n\t\t\traw: ws,\n\t\t\tget readyState() {\n\t\t\t\treturn ws.readyState;\n\t\t\t},\n\t\t\tsend(source, opts) {\n\t\t\t\tws.send(source, { compress: opts?.compress });\n\t\t\t},\n\t\t\turl: new URL(c.req.url)\n\t\t};\n\t\ttry {\n\t\t\tevents?.onOpen?.(new Event(\"open\"), ctx);\n\t\t} catch (e) {\n\t\t\t(options?.onError ?? console.error)(e);\n\t\t}\n\t\tconst handleMessage = (data, isBinary) => {\n\t\t\tconst datas = Array.isArray(data) ? data : [data];\n\t\t\tfor (const data of datas) try {\n\t\t\t\tevents?.onMessage?.(new MessageEvent(\"message\", { data: isBinary ? data instanceof ArrayBuffer ? data : data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) : typeof data === \"string\" ? data : Buffer.from(data).toString(\"utf-8\") }), ctx);\n\t\t\t} catch (e) {\n\t\t\t\t(options?.onError ?? console.error)(e);\n\t\t\t}\n\t\t};\n\t\tws.off(\"message\", bufferMessage);\n\t\tfor (const message of messagesReceivedInStarting) handleMessage(...message);\n\t\tws.on(\"message\", (data, isBinary) => {\n\t\t\thandleMessage(data, isBinary);\n\t\t});\n\t\tws.on(\"close\", (code, reason) => {\n\t\t\ttry {\n\t\t\t\tevents?.onClose?.(new CloseEvent(\"close\", {\n\t\t\t\t\tcode,\n\t\t\t\t\treason: reason.toString()\n\t\t\t\t}), ctx);\n\t\t\t} catch (e) {\n\t\t\t\t(options?.onError ?? console.error)(e);\n\t\t\t}\n\t\t});\n\t\tws.on(\"error\", (error) => {\n\t\t\ttry {\n\t\t\t\tevents?.onError?.(new ErrorEvent(\"error\", { error }), ctx);\n\t\t\t} catch (e) {\n\t\t\t\t(options?.onError ?? console.error)(e);\n\t\t\t}\n\t\t});\n\t})();\n\treturn new Response();\n});\n\n//#endregion\n//#region src/server.ts\nconst createAdaptorServer = (options) => {\n\tconst fetchCallback = options.fetch;\n\tconst requestListener = getRequestListener(fetchCallback, {\n\t\thostname: options.hostname,\n\t\toverrideGlobalObjects: options.overrideGlobalObjects,\n\t\tautoCleanupIncoming: options.autoCleanupIncoming\n\t});\n\tconst server = (options.createServer || createServer)(options.serverOptions || {}, requestListener);\n\tif (options.websocket && options.websocket.server) {\n\t\tif (options.websocket.server.options.noServer !== true) throw new Error(\"WebSocket server must be created with { noServer: true } option\");\n\t\tsetupWebSocket({\n\t\t\tserver,\n\t\t\tfetchCallback,\n\t\t\twss: options.websocket.server\n\t\t});\n\t}\n\treturn server;\n};\nconst serve = (options, listeningListener) => {\n\tconst server = createAdaptorServer(options);\n\tserver.listen(options?.port ?? 3e3, options.hostname, () => {\n\t\tconst serverInfo = server.address();\n\t\tlisteningListener && listeningListener(serverInfo);\n\t});\n\treturn server;\n};\n\n//#endregion\nexport { RequestError, createAdaptorServer, getRequestListener, serve, upgradeWebSocket };","//#region src/request/constants.ts\nconst GET_MATCH_RESULT = Symbol();\n//#endregion\nexport { GET_MATCH_RESULT };\n","import { sha256 } from \"./crypto.js\";\n//#region src/utils/buffer.ts\n/**\n* @module\n* Buffer utility.\n*/\nconst equal = (a, b) => {\n\tif (a === b) return true;\n\tif (a.byteLength !== b.byteLength) return false;\n\tconst va = new DataView(a);\n\tconst vb = new DataView(b);\n\tlet i = va.byteLength;\n\twhile (i--) if (va.getUint8(i) !== vb.getUint8(i)) return false;\n\treturn true;\n};\nconst constantTimeEqualString = (a, b) => {\n\tconst aLen = a.length;\n\tconst bLen = b.length;\n\tconst maxLen = Math.max(aLen, bLen);\n\tlet out = aLen ^ bLen;\n\tfor (let i = 0; i < maxLen; i++) {\n\t\tconst aChar = i < aLen ? a.charCodeAt(i) : 0;\n\t\tconst bChar = i < bLen ? b.charCodeAt(i) : 0;\n\t\tout |= aChar ^ bChar;\n\t}\n\treturn out === 0;\n};\nconst timingSafeEqualString = async (a, b, hashFunction) => {\n\tif (!hashFunction) hashFunction = sha256;\n\tconst [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n\tif (sa == null || sb == null || typeof sa !== \"string\" || typeof sb !== \"string\") return false;\n\tconst hashEqual = constantTimeEqualString(sa, sb);\n\tconst originalEqual = constantTimeEqualString(a, b);\n\treturn hashEqual && originalEqual;\n};\nconst timingSafeEqual = async (a, b, hashFunction) => {\n\tif (typeof a === \"string\" && typeof b === \"string\") return timingSafeEqualString(a, b, hashFunction);\n\tif (!hashFunction) hashFunction = sha256;\n\tconst [sa, sb] = await Promise.all([hashFunction(a), hashFunction(b)]);\n\tif (!sa || !sb || typeof sa !== \"string\" || typeof sb !== \"string\") return false;\n\treturn timingSafeEqualString(sa, sb);\n};\nconst bufferToString = (buffer) => {\n\tif (buffer instanceof ArrayBuffer) return new TextDecoder(\"utf-8\").decode(buffer);\n\treturn buffer;\n};\nconst bufferToFormData = (arrayBuffer, contentType) => {\n\treturn new Response(arrayBuffer, { headers: { \"Content-Type\": contentType.replace(/^[^;]+/, (mediaType) => mediaType.toLowerCase()) } }).formData();\n};\n//#endregion\nexport { bufferToFormData, bufferToString, equal, timingSafeEqual };\n","import { bufferToFormData } from \"./buffer.js\";\n//#region src/utils/body.ts\nconst MAX_NESTED_OBJECTS = 1e4;\nconst isRawRequest = (request) => \"headers\" in request;\nconst parseBody = async (request, options = Object.create(null)) => {\n\tconst { all = false, dot = false } = options;\n\tconst mediaType = (isRawRequest(request) ? request.headers : request.raw.headers).get(\"Content-Type\")?.split(\";\")[0].trim().toLowerCase();\n\tif (mediaType === \"multipart/form-data\" || mediaType === \"application/x-www-form-urlencoded\") return parseFormData(request, {\n\t\tall,\n\t\tdot\n\t});\n\treturn {};\n};\n/**\n* Parses form data from a request.\n*\n* @template T - The type of the parsed body data.\n* @param {HonoRequest | Request} request - The request object containing form data.\n* @param {ParseBodyOptions} options - Options for parsing the form data.\n* @returns {Promise<T>} The parsed body data.\n*/\nasync function parseFormData(request, options) {\n\tif (!isRawRequest(request) && request.bodyCache.formData) return convertFormDataToBodyData(await request.bodyCache.formData, options);\n\tconst headers = isRawRequest(request) ? request.headers : request.raw.headers;\n\tconst arrayBuffer = await request.arrayBuffer();\n\tconst formDataPromise = bufferToFormData(arrayBuffer, headers.get(\"Content-Type\") || \"\");\n\tif (!isRawRequest(request)) request.bodyCache.formData = formDataPromise;\n\tconst formData = await formDataPromise;\n\tif (formData) return convertFormDataToBodyData(formData, options);\n\treturn {};\n}\n/**\n* Converts form data to body data based on the provided options.\n*\n* @template T - The type of the parsed body data.\n* @param {FormData} formData - The form data to convert.\n* @param {ParseBodyOptions} options - Options for parsing the form data.\n* @returns {T} The converted body data.\n*/\nfunction convertFormDataToBodyData(formData, options) {\n\tconst form = Object.create(null);\n\tconst nestingState = { count: 0 };\n\tformData.forEach((value, key) => {\n\t\tif (!(options.all || key.endsWith(\"[]\"))) form[key] = value;\n\t\telse handleParsingAllValues(form, key, value);\n\t});\n\tif (options.dot) Object.entries(form).forEach(([key, value]) => {\n\t\tif (key.includes(\".\")) {\n\t\t\thandleParsingNestedValues(form, key, value, nestingState);\n\t\t\tdelete form[key];\n\t\t}\n\t});\n\treturn form;\n}\n/**\n* Handles parsing all values for a given key, supporting multiple values as arrays.\n*\n* @param {BodyData} form - The form data object.\n* @param {string} key - The key to parse.\n* @param {FormDataEntryValue} value - The value to assign.\n*/\nconst handleParsingAllValues = (form, key, value) => {\n\tif (form[key] !== void 0) {\n\t\tif (Array.isArray(form[key])) form[key].push(value);\n\t\telse form[key] = [form[key], value];\n\t} else if (!key.endsWith(\"[]\")) form[key] = value;\n\telse form[key] = [value];\n};\n/**\n* Handles parsing nested values using dot notation keys.\n*\n* @param {BodyData} form - The form data object.\n* @param {string} key - The dot notation key.\n* @param {BodyDataValue} value - The value to assign.\n*/\nconst handleParsingNestedValues = (form, key, value, state) => {\n\tif (/(?:^|\\.)__proto__\\./.test(key)) return;\n\tlet nestedForm = form;\n\tconst keys = key.split(\".\", 34);\n\tif (keys.length > 33) throwNestingLimitExceeded();\n\tkeys.forEach((key, index) => {\n\t\tif (index === keys.length - 1) nestedForm[key] = value;\n\t\telse {\n\t\t\tif (!nestedForm[key] || typeof nestedForm[key] !== \"object\" || Array.isArray(nestedForm[key]) || nestedForm[key] instanceof File) {\n\t\t\t\tif (state.count++ >= MAX_NESTED_OBJECTS) throwNestingLimitExceeded();\n\t\t\t\tnestedForm[key] = Object.create(null);\n\t\t\t}\n\t\t\tnestedForm = nestedForm[key];\n\t\t}\n\t});\n};\nconst throwNestingLimitExceeded = () => {\n\tthrow new Error(\"Nesting limit exceeded\");\n};\n//#endregion\nexport { parseBody };\n","//#region src/utils/url.ts\nconst splitPath = (path) => {\n\tconst paths = path.split(\"/\");\n\tif (paths[0] === \"\") paths.shift();\n\treturn paths;\n};\nconst splitRoutingPath = (routePath) => {\n\tconst { groups, path } = extractGroupsFromPath(routePath);\n\tconst paths = splitPath(path);\n\treturn replaceGroupMarks(paths, groups);\n};\nconst extractGroupsFromPath = (path) => {\n\tconst groups = [];\n\tpath = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n\t\tconst mark = `@${index}`;\n\t\tgroups.push([mark, match]);\n\t\treturn mark;\n\t});\n\treturn {\n\t\tgroups,\n\t\tpath\n\t};\n};\nconst replaceGroupMarks = (paths, groups) => {\n\tfor (let i = groups.length - 1; i >= 0; i--) {\n\t\tconst [mark] = groups[i];\n\t\tfor (let j = paths.length - 1; j >= 0; j--) if (paths[j].includes(mark)) {\n\t\t\tpaths[j] = paths[j].replace(mark, groups[i][1]);\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn paths;\n};\nconst patternCache = {};\nconst getPattern = (label, next) => {\n\tif (label === \"*\") return \"*\";\n\tconst match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n\tif (match) {\n\t\tconst cacheKey = `${label}#${next}`;\n\t\tif (!patternCache[cacheKey]) {\n\t\t\tif (match[2]) patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [\n\t\t\t\tcacheKey,\n\t\t\t\tmatch[1],\n\t\t\t\tnew RegExp(`^${match[2]}(?=/${next})`)\n\t\t\t] : [\n\t\t\t\tlabel,\n\t\t\t\tmatch[1],\n\t\t\t\tnew RegExp(`^${match[2]}$`)\n\t\t\t];\n\t\t\telse patternCache[cacheKey] = [\n\t\t\t\tlabel,\n\t\t\t\tmatch[1],\n\t\t\t\ttrue\n\t\t\t];\n\t\t}\n\t\treturn patternCache[cacheKey];\n\t}\n\treturn null;\n};\nconst tryDecode = (str, decoder) => {\n\ttry {\n\t\treturn decoder(str);\n\t} catch {\n\t\treturn str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n\t\t\ttry {\n\t\t\t\treturn decoder(match);\n\t\t\t} catch {\n\t\t\t\treturn match;\n\t\t\t}\n\t\t});\n\t}\n};\n/**\n* Try to apply decodeURI() to given string.\n* If it fails, skip invalid percent encoding or invalid UTF-8 sequences, and apply decodeURI() to the rest as much as possible.\n* @param str The string to decode.\n* @returns The decoded string that sometimes contains undecodable percent encoding.\n* @example\n* tryDecodeURI('Hello%20World') // 'Hello World'\n* tryDecodeURI('Hello%20World/%A4%A2') // 'Hello World/%A4%A2'\n*/\nconst tryDecodeURI = (str) => tryDecode(str, decodeURI);\nconst getPath = (request) => {\n\tconst url = request.url;\n\tconst start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n\tlet i = start;\n\tfor (; i < url.length; i++) {\n\t\tconst charCode = url.charCodeAt(i);\n\t\tif (charCode === 37) {\n\t\t\tconst queryIndex = url.indexOf(\"?\", i);\n\t\t\tconst hashIndex = url.indexOf(\"#\", i);\n\t\t\tconst end = queryIndex === -1 ? hashIndex === -1 ? void 0 : hashIndex : hashIndex === -1 ? queryIndex : Math.min(queryIndex, hashIndex);\n\t\t\tconst path = url.slice(start, end);\n\t\t\treturn tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n\t\t} else if (charCode === 63 || charCode === 35) break;\n\t}\n\treturn url.slice(start, i);\n};\n/**\n* @deprecated\n* Use the `URL` API instead.\n*/\nconst getQueryStrings = (url) => {\n\tconst queryIndex = url.indexOf(\"?\", 8);\n\tif (queryIndex === -1) return \"\";\n\tconst hashIndex = url.indexOf(\"#\", 8);\n\treturn hashIndex === -1 ? url.slice(queryIndex) : queryIndex < hashIndex ? url.slice(queryIndex, hashIndex) : \"\";\n};\nconst getPathNoStrict = (request) => {\n\tconst result = getPath(request);\n\treturn result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nconst stripPathPrefix = (rawPath, decodedPath, prefixLength) => {\n\tif (rawPath.at(-1) === \"/\" && decodedPath.at(-1) !== \"/\") rawPath = rawPath.slice(0, -1);\n\tlet index = 0;\n\tfor (let i = decodedPath.indexOf(\"/\"); i !== -1 && i < prefixLength; i = decodedPath.indexOf(\"/\", i + 1)) {\n\t\tindex = rawPath.indexOf(\"/\", index + 1);\n\t\tif (index === -1) return \"/\";\n\t}\n\treturn rawPath.slice(index) || \"/\";\n};\n/**\n* Merge paths.\n* @param {string[]} ...paths - The paths to merge.\n* @returns {string} The merged path.\n* @example\n* mergePath('/api', '/users') // '/api/users'\n* mergePath('/api/', '/users') // '/api/users'\n* mergePath('/api', '/') // '/api'\n* mergePath('/api/', '/') // '/api/'\n*/\nconst mergePath = (base, sub, ...rest) => {\n\tif (rest.length) sub = mergePath(sub, ...rest);\n\treturn `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nconst checkOptionalParameter = (path) => {\n\tif (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) return null;\n\tconst segments = path.split(\"/\");\n\tconst results = [];\n\tlet basePath = \"\";\n\tsegments.forEach((segment) => {\n\t\tif (segment !== \"\" && !/\\:/.test(segment)) basePath += \"/\" + segment;\n\t\telse if (/\\:/.test(segment)) {\n\t\t\tif (segment.charCodeAt(segment.length - 1) === 63) {\n\t\t\t\tif (results.length === 0 && basePath === \"\") results.push(\"/\");\n\t\t\t\telse results.push(basePath);\n\t\t\t\tconst optionalSegment = segment.slice(0, -1);\n\t\t\t\tbasePath += \"/\" + optionalSegment;\n\t\t\t\tresults.push(basePath);\n\t\t\t} else basePath += \"/\" + segment;\n\t\t}\n\t});\n\treturn results.filter((v, i, a) => a.indexOf(v) === i);\n};\nconst tryDecodeURIComponent = (str) => str.indexOf(\"%\") !== -1 ? tryDecode(str, decodeURIComponent_) : str;\nconst _decodeURI = (value) => {\n\tif (value.indexOf(\"+\") !== -1) value = value.replace(/\\+/g, \" \");\n\treturn tryDecodeURIComponent(value);\n};\nconst _getQueryParam = (url, key, multiple) => {\n\tconst hashIndex = url.indexOf(\"#\", 8);\n\tif (hashIndex !== -1) url = url.slice(0, hashIndex);\n\tlet encoded;\n\tif (!multiple && key && !/[%+&=]/.test(key)) {\n\t\tconst queryIndex = url.indexOf(\"?\", 8);\n\t\tlet keyIndex = queryIndex;\n\t\tif (keyIndex === -1) return;\n\t\tif (!url.startsWith(key, keyIndex + 1)) keyIndex = url.indexOf(`&${key}`, keyIndex + 1);\n\t\twhile (keyIndex !== -1) {\n\t\t\tconst trailingKeyCode = url.charCodeAt(keyIndex + key.length + 1);\n\t\t\tif (trailingKeyCode === 61 || trailingKeyCode === 38 || isNaN(trailingKeyCode)) {\n\t\t\t\tif (keyIndex > queryIndex && /(?:^|&)[^=&]*[%+]/.test(url.slice(queryIndex + 1, keyIndex))) break;\n\t\t\t\tif (trailingKeyCode === 61) {\n\t\t\t\t\tconst valueIndex = keyIndex + key.length + 2;\n\t\t\t\t\tconst endIndex = url.indexOf(\"&\", valueIndex);\n\t\t\t\t\treturn _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n\t\t\t\t}\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\tkeyIndex = url.indexOf(`&${key}`, keyIndex + 1);\n\t\t}\n\t\tencoded = /[%+]/.test(url);\n\t\tif (!encoded) return;\n\t}\n\tconst results = Object.create(null);\n\tencoded ??= /[%+]/.test(url);\n\tlet keyIndex = url.indexOf(\"?\", 8);\n\twhile (keyIndex !== -1) {\n\t\tconst nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n\t\tlet valueIndex = url.indexOf(\"=\", keyIndex);\n\t\tif (valueIndex > nextKeyIndex && nextKeyIndex !== -1) valueIndex = -1;\n\t\tlet name = url.slice(keyIndex + 1, valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex);\n\t\tif (encoded) name = _decodeURI(name);\n\t\tkeyIndex = nextKeyIndex;\n\t\tif (name === \"\") continue;\n\t\tlet value;\n\t\tif (valueIndex === -1) value = \"\";\n\t\telse {\n\t\t\tvalue = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n\t\t\tif (encoded) value = _decodeURI(value);\n\t\t}\n\t\tif (multiple) {\n\t\t\tif (!(results[name] && Array.isArray(results[name]))) results[name] = [];\n\t\t\tresults[name].push(value);\n\t\t} else results[name] ??= value;\n\t}\n\treturn key ? results[key] : results;\n};\nconst getQueryParam = _getQueryParam;\nconst getQueryParams = (url, key) => {\n\treturn _getQueryParam(url, key, true);\n};\nconst decodeURIComponent_ = decodeURIComponent;\n//#endregion\nexport { checkOptionalParameter, decodeURIComponent_, getPath, getPathNoStrict, getPattern, getQueryParam, getQueryParams, getQueryStrings, mergePath, splitPath, splitRoutingPath, stripPathPrefix, tryDecode, tryDecodeURI, tryDecodeURIComponent };\n","import { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { getQueryParam, getQueryParams, tryDecodeURIComponent } from \"./utils/url.js\";\n//#region src/request.ts\nvar HonoRequest = class {\n\t/**\n\t* `.raw` can get the raw Request object.\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#raw}\n\t*\n\t* @example\n\t* ```ts\n\t* // For Cloudflare Workers\n\t* app.post('/', async (c) => {\n\t* const metadata = c.req.raw.cf?.hostMetadata?\n\t* ...\n\t* })\n\t* ```\n\t*/\n\traw;\n\t#validatedData;\n\t#matchResult;\n\trouteIndex = 0;\n\t/**\n\t* `.path` can get the pathname of the request.\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#path}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/about/me', (c) => {\n\t* const pathname = c.req.path // `/about/me`\n\t* })\n\t* ```\n\t*/\n\tpath;\n\tbodyCache = {};\n\tconstructor(request, path = \"/\", matchResult = [[]]) {\n\t\tthis.raw = request;\n\t\tthis.path = path;\n\t\tthis.#matchResult = matchResult;\n\t}\n\tparam(key) {\n\t\treturn key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n\t}\n\t#getDecodedParam(key) {\n\t\tconst paramKey = this.#matchResult[0][this.routeIndex]?.[1][key];\n\t\tconst param = this.#getParamValue(paramKey);\n\t\treturn param && tryDecodeURIComponent(param);\n\t}\n\t#getAllDecodedParams() {\n\t\tconst decoded = {};\n\t\tconst keys = Object.keys(this.#matchResult[0][this.routeIndex]?.[1] ?? {});\n\t\tfor (const key of keys) {\n\t\t\tconst value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n\t\t\tif (value !== void 0) decoded[key] = tryDecodeURIComponent(value);\n\t\t}\n\t\treturn decoded;\n\t}\n\t#getParamValue(paramKey) {\n\t\treturn this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n\t}\n\tquery(key) {\n\t\treturn getQueryParam(this.url, key);\n\t}\n\tqueries(key) {\n\t\treturn getQueryParams(this.url, key);\n\t}\n\theader(name) {\n\t\tif (name) return this.raw.headers.get(name) ?? void 0;\n\t\tconst headerData = Object.create(null);\n\t\tthis.raw.headers.forEach((value, key) => {\n\t\t\theaderData[key] = value;\n\t\t});\n\t\treturn headerData;\n\t}\n\tasync parseBody(options) {\n\t\treturn parseBody(this, options);\n\t}\n\t#cachedBody = (key) => {\n\t\tconst { bodyCache, raw } = this;\n\t\tconst cachedBody = bodyCache[key];\n\t\tif (cachedBody) return cachedBody;\n\t\tfor (const anyCachedKey in bodyCache) return bodyCache[anyCachedKey].then((body) => {\n\t\t\tif (anyCachedKey === \"json\") body = JSON.stringify(body);\n\t\t\tconst contentType = anyCachedKey === \"formData\" ? void 0 : raw.headers.get(\"content-type\");\n\t\t\treturn new Response(body, { headers: contentType ? { \"Content-Type\": contentType } : void 0 })[key]();\n\t\t});\n\t\treturn bodyCache[key] = raw[key]();\n\t};\n\t/**\n\t* `.json()` can parse Request body of type `application/json`\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#json}\n\t*\n\t* @example\n\t* ```ts\n\t* app.post('/entry', async (c) => {\n\t* const body = await c.req.json()\n\t* })\n\t* ```\n\t*/\n\tjson() {\n\t\treturn this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n\t}\n\t/**\n\t* `.text()` can parse Request body of type `text/plain`\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#text}\n\t*\n\t* @example\n\t* ```ts\n\t* app.post('/entry', async (c) => {\n\t* const body = await c.req.text()\n\t* })\n\t* ```\n\t*/\n\ttext() {\n\t\treturn this.#cachedBody(\"text\");\n\t}\n\t/**\n\t* `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#arraybuffer}\n\t*\n\t* @example\n\t* ```ts\n\t* app.post('/entry', async (c) => {\n\t* const body = await c.req.arrayBuffer()\n\t* })\n\t* ```\n\t*/\n\tarrayBuffer() {\n\t\treturn this.#cachedBody(\"arrayBuffer\");\n\t}\n\t/**\n\t* `.bytes()` parses the request body as a `Uint8Array`.\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#bytes}\n\t*\n\t* @example\n\t* ```ts\n\t* app.post('/entry', async (c) => {\n\t* const body = await c.req.bytes()\n\t* })\n\t* ```\n\t*/\n\tbytes() {\n\t\treturn this.#cachedBody(\"arrayBuffer\").then((buffer) => new Uint8Array(buffer));\n\t}\n\t/**\n\t* Parses the request body as a `Blob`.\n\t* @example\n\t* ```ts\n\t* app.post('/entry', async (c) => {\n\t* const body = await c.req.blob();\n\t* });\n\t* ```\n\t* @see https://hono.dev/docs/api/request#blob\n\t*/\n\tblob() {\n\t\treturn this.#cachedBody(\"blob\");\n\t}\n\t/**\n\t* Parses the request body as `FormData`.\n\t* @example\n\t* ```ts\n\t* app.post('/entry', async (c) => {\n\t* const body = await c.req.formData();\n\t* });\n\t* ```\n\t* @see https://hono.dev/docs/api/request#formdata\n\t*/\n\tformData() {\n\t\treturn this.#cachedBody(\"formData\");\n\t}\n\t/**\n\t* Adds validated data to the request.\n\t*\n\t* @param target - The target of the validation.\n\t* @param data - The validated data to add.\n\t*/\n\taddValidatedData(target, data) {\n\t\t(this.#validatedData ??= {})[target] = data;\n\t}\n\tvalid(target) {\n\t\treturn this.#validatedData?.[target];\n\t}\n\t/**\n\t* `.url` can get the request url strings.\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#url}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/about/me', (c) => {\n\t* const url = c.req.url // `http://localhost:8787/about/me`\n\t* ...\n\t* })\n\t* ```\n\t*/\n\tget url() {\n\t\treturn this.raw.url;\n\t}\n\t/**\n\t* `.method` can get the method name of the request.\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#method}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/about/me', (c) => {\n\t* const method = c.req.method // `GET`\n\t* })\n\t* ```\n\t*/\n\tget method() {\n\t\treturn this.raw.method;\n\t}\n\tget [GET_MATCH_RESULT]() {\n\t\treturn this.#matchResult;\n\t}\n\t/**\n\t* `.matchedRoutes` can return a matched route in the handler\n\t*\n\t* @deprecated\n\t*\n\t* Use matchedRoutes helper defined in \"hono/route\" instead.\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#matchedroutes}\n\t*\n\t* @example\n\t* ```ts\n\t* app.use('*', async function logger(c, next) {\n\t* await next()\n\t* c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n\t* const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n\t* console.log(\n\t* method,\n\t* ' ',\n\t* path,\n\t* ' '.repeat(Math.max(10 - path.length, 0)),\n\t* name,\n\t* i === c.req.routeIndex ? '<- respond from here' : ''\n\t* )\n\t* })\n\t* })\n\t* ```\n\t*/\n\tget matchedRoutes() {\n\t\treturn this.#matchResult[0].map(([[, route]]) => route);\n\t}\n\t/**\n\t* `.routePath` can retrieve the path registered within the handler\n\t*\n\t* @deprecated\n\t*\n\t* Use routePath helper defined in \"hono/route\" instead.\n\t*\n\t* @see {@link https://hono.dev/docs/api/request#routepath}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/posts/:id', (c) => {\n\t* return c.json({ path: c.req.routePath })\n\t* })\n\t* ```\n\t*/\n\tget routePath() {\n\t\treturn this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n\t}\n};\n/**\n* Clones a HonoRequest's underlying raw Request object.\n*\n* This utility handles both consumed and unconsumed request bodies:\n* - If the request body hasn't been consumed, it uses the native `clone()` method\n* - If the request body has been consumed, it reconstructs a new Request using cached body data\n*\n* This is particularly useful when you need to:\n* - Process the same request body multiple times\n* - Pass requests to external services after validation\n*\n* @param req - The HonoRequest object to clone\n* @returns A Promise that resolves to a new Request object with the same properties\n* @throws {HTTPException} If the request body was consumed directly via `req.raw`\n* without using HonoRequest methods (e.g., `req.json()`, `req.text()`), making it\n* impossible to reconstruct the body from cache\n*\n* @example\n* ```ts\n* // Clone after consuming the body (e.g., after validation)\n* app.post('/forward',\n* validator('json', (data) => data),\n* async (c) => {\n* const validated = c.req.valid('json')\n* // Body has been consumed, but cloneRawRequest still works\n* const clonedReq = await cloneRawRequest(c.req)\n* return fetch('http://backend-service.com', clonedReq)\n* }\n* )\n* ```\n*/\nconst cloneRawRequest = async (req) => {\n\tif (!req.raw.bodyUsed) return req.raw.clone();\n\tconst cacheKey = Object.keys(req.bodyCache)[0];\n\tif (!cacheKey) throw new HTTPException(500, { message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\" });\n\tlet body = await req[cacheKey]();\n\tconst headers = req.header();\n\tif (cacheKey === \"json\") {\n\t\tbody = JSON.stringify(body);\n\t\tdelete headers[\"content-length\"];\n\t} else if (body instanceof FormData) {\n\t\tdelete headers[\"content-type\"];\n\t\tdelete headers[\"content-length\"];\n\t}\n\tconst requestInit = {\n\t\tbody,\n\t\tcache: req.raw.cache,\n\t\tcredentials: req.raw.credentials,\n\t\theaders,\n\t\tintegrity: req.raw.integrity,\n\t\tkeepalive: req.raw.keepalive,\n\t\tmethod: req.method,\n\t\tmode: req.raw.mode,\n\t\tredirect: req.raw.redirect,\n\t\treferrer: req.raw.referrer,\n\t\treferrerPolicy: req.raw.referrerPolicy,\n\t\tsignal: req.raw.signal\n\t};\n\treturn new Request(req.url, requestInit);\n};\n//#endregion\nexport { HonoRequest, cloneRawRequest };\n","//#region src/utils/html.ts\n/**\n* @module\n* HTML utility.\n*/\nconst HtmlEscapedCallbackPhase = {\n\tStringify: 1,\n\tBeforeStream: 2,\n\tStream: 3\n};\nconst raw = (value, callbacks) => {\n\tconst escapedString = new String(value);\n\tescapedString.isEscaped = true;\n\tescapedString.callbacks = callbacks;\n\treturn escapedString;\n};\nconst escapeRe = /[&<>'\"]/;\nconst stringBufferToString = async (buffer, callbacks) => {\n\tlet str = \"\";\n\tcallbacks ||= [];\n\tconst resolvedBuffer = await Promise.all(buffer);\n\tfor (let i = resolvedBuffer.length - 1;; i--) {\n\t\tstr += resolvedBuffer[i];\n\t\ti--;\n\t\tif (i < 0) break;\n\t\tlet r = resolvedBuffer[i];\n\t\tif (typeof r === \"object\") callbacks.push(...r.callbacks || []);\n\t\tconst isEscaped = r.isEscaped;\n\t\tr = await (typeof r === \"object\" ? r.toString() : r);\n\t\tif (typeof r === \"object\") callbacks.push(...r.callbacks || []);\n\t\tif (r.isEscaped ?? isEscaped) str += r;\n\t\telse {\n\t\t\tconst buf = [str];\n\t\t\tescapeToBuffer(r, buf);\n\t\t\tstr = buf[0];\n\t\t}\n\t}\n\treturn raw(str, callbacks);\n};\nconst escapeToBuffer = (str, buffer) => {\n\tconst match = str.search(escapeRe);\n\tif (match === -1) {\n\t\tbuffer[0] += str;\n\t\treturn;\n\t}\n\tlet escape;\n\tlet index;\n\tlet lastIndex = 0;\n\tfor (index = match; index < str.length; index++) {\n\t\tswitch (str.charCodeAt(index)) {\n\t\t\tcase 34:\n\t\t\t\tescape = \"&quot;\";\n\t\t\t\tbreak;\n\t\t\tcase 39:\n\t\t\t\tescape = \"&#39;\";\n\t\t\t\tbreak;\n\t\t\tcase 38:\n\t\t\t\tescape = \"&amp;\";\n\t\t\t\tbreak;\n\t\t\tcase 60:\n\t\t\t\tescape = \"&lt;\";\n\t\t\t\tbreak;\n\t\t\tcase 62:\n\t\t\t\tescape = \"&gt;\";\n\t\t\t\tbreak;\n\t\t\tdefault: continue;\n\t\t}\n\t\tbuffer[0] += str.substring(lastIndex, index) + escape;\n\t\tlastIndex = index + 1;\n\t}\n\tbuffer[0] += str.substring(lastIndex, index);\n};\nconst resolveCallbackSync = (str) => {\n\tconst callbacks = str.callbacks;\n\tif (!callbacks?.length) return str;\n\tconst buffer = [str];\n\tconst context = {};\n\tcallbacks.forEach((c) => c({\n\t\tphase: HtmlEscapedCallbackPhase.Stringify,\n\t\tbuffer,\n\t\tcontext\n\t}));\n\treturn buffer[0];\n};\nconst resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n\tif (typeof str === \"object\" && !(str instanceof String)) {\n\t\tif (!(str instanceof Promise)) str = str.toString();\n\t\tif (str instanceof Promise) str = await str;\n\t}\n\tconst callbacks = str.callbacks;\n\tif (!callbacks?.length) return Promise.resolve(str);\n\tif (buffer) buffer[0] += str;\n\telse buffer = [str];\n\tconst resStr = Promise.all(callbacks.map((c) => c({\n\t\tphase,\n\t\tbuffer,\n\t\tcontext\n\t}))).then((res) => Promise.all(res.filter(Boolean).map((str) => resolveCallback(str, phase, false, context, buffer))).then(() => buffer[0]));\n\tif (preserveCallbacks) return raw(await resStr, callbacks);\n\telse return resStr;\n};\n//#endregion\nexport { HtmlEscapedCallbackPhase, escapeToBuffer, raw, resolveCallback, resolveCallbackSync, stringBufferToString };\n","import { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\n//#region src/context.ts\nconst TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nconst setDefaultContentType = (contentType, headers) => {\n\treturn {\n\t\t\"Content-Type\": contentType,\n\t\t...headers\n\t};\n};\nconst createResponseInstance = (body, init) => new Response(body, init);\nvar Context = class {\n\t#rawRequest;\n\t#req;\n\t/**\n\t* `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#env}\n\t*\n\t* @example\n\t* ```ts\n\t* // Environment object for Cloudflare Workers\n\t* app.get('*', async c => {\n\t* const counter = c.env.COUNTER\n\t* })\n\t* ```\n\t*/\n\tenv = {};\n\t#var;\n\tfinalized = false;\n\t/**\n\t* `.error` can get the error object from the middleware if the Handler throws an error.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#error}\n\t*\n\t* @example\n\t* ```ts\n\t* app.use('*', async (c, next) => {\n\t* await next()\n\t* if (c.error) {\n\t* // do something...\n\t* }\n\t* })\n\t* ```\n\t*/\n\terror;\n\t#status;\n\t#executionCtx;\n\t#res;\n\t#layout;\n\t#renderer;\n\t#notFoundHandler;\n\t#preparedHeaders;\n\t#matchResult;\n\t#path;\n\t/**\n\t* Creates an instance of the Context class.\n\t*\n\t* @param req - The Request object.\n\t* @param options - Optional configuration options for the context.\n\t*/\n\tconstructor(req, options) {\n\t\tthis.#rawRequest = req;\n\t\tif (options) {\n\t\t\tthis.#executionCtx = options.executionCtx;\n\t\t\tthis.env = options.env;\n\t\t\tthis.#notFoundHandler = options.notFoundHandler;\n\t\t\tthis.#path = options.path;\n\t\t\tthis.#matchResult = options.matchResult;\n\t\t}\n\t}\n\t/**\n\t* `.req` is the instance of {@link HonoRequest}.\n\t*/\n\tget req() {\n\t\tthis.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n\t\treturn this.#req;\n\t}\n\t/**\n\t* @see {@link https://hono.dev/docs/api/context#event}\n\t* The FetchEvent associated with the current request.\n\t*\n\t* @throws Will throw an error if the context does not have a FetchEvent.\n\t*/\n\tget event() {\n\t\tif (this.#executionCtx && \"respondWith\" in this.#executionCtx) return this.#executionCtx;\n\t\telse throw Error(\"This context has no FetchEvent\");\n\t}\n\t/**\n\t* @see {@link https://hono.dev/docs/api/context#executionctx}\n\t* The ExecutionContext associated with the current request.\n\t*\n\t* @throws Will throw an error if the context does not have an ExecutionContext.\n\t*/\n\tget executionCtx() {\n\t\tif (this.#executionCtx) return this.#executionCtx;\n\t\telse throw Error(\"This context has no ExecutionContext\");\n\t}\n\t/**\n\t* @see {@link https://hono.dev/docs/api/context#res}\n\t* The Response object for the current request.\n\t*/\n\tget res() {\n\t\treturn this.#res ||= createResponseInstance(null, { headers: this.#preparedHeaders ??= new Headers() });\n\t}\n\t/**\n\t* Sets the Response object for the current request.\n\t*\n\t* @param _res - The Response object to set.\n\t*/\n\tset res(_res) {\n\t\tif (this.#res && _res) {\n\t\t\t_res = createResponseInstance(_res.body, _res);\n\t\t\tfor (const [k, v] of this.#res.headers.entries()) {\n\t\t\t\tif (k === \"content-type\") continue;\n\t\t\t\tif (k === \"set-cookie\") {\n\t\t\t\t\tconst cookies = this.#res.headers.getSetCookie();\n\t\t\t\t\t_res.headers.delete(\"set-cookie\");\n\t\t\t\t\tfor (const cookie of cookies) _res.headers.append(\"set-cookie\", cookie);\n\t\t\t\t} else _res.headers.set(k, v);\n\t\t\t}\n\t\t}\n\t\tthis.#res = _res;\n\t\tthis.finalized = true;\n\t}\n\t/**\n\t* `.render()` can create a response within a layout.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/', (c) => {\n\t* return c.render('Hello!')\n\t* })\n\t* ```\n\t*/\n\trender = (...args) => {\n\t\tthis.#renderer ??= (content) => this.html(content);\n\t\treturn this.#renderer(...args);\n\t};\n\t/**\n\t* Sets the layout for the response.\n\t*\n\t* @param layout - The layout to set.\n\t* @returns The layout function.\n\t*/\n\tsetLayout = (layout) => this.#layout = layout;\n\t/**\n\t* Gets the current layout for the response.\n\t*\n\t* @returns The current layout function.\n\t*/\n\tgetLayout = () => this.#layout;\n\t/**\n\t* `.setRenderer()` can set the layout in the custom middleware.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n\t*\n\t* @example\n\t* ```tsx\n\t* app.use('*', async (c, next) => {\n\t* c.setRenderer((content) => {\n\t* return c.html(\n\t* <html>\n\t* <body>\n\t* <p>{content}</p>\n\t* </body>\n\t* </html>\n\t* )\n\t* })\n\t* await next()\n\t* })\n\t* ```\n\t*/\n\tsetRenderer = (renderer) => {\n\t\tthis.#renderer = renderer;\n\t};\n\t/**\n\t* `.header()` can set headers.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#header}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/welcome', (c) => {\n\t* // Set headers\n\t* c.header('X-Message', 'Hello!')\n\t* c.header('Content-Type', 'text/plain')\n\t*\n\t* // Append multiple headers using the append option (e.g. Vary)\n\t* c.header('Vary', 'Accept-Encoding', { append: true })\n\t* c.header('Vary', 'User-Agent', { append: true })\n\t*\n\t* return c.body('Thank you for coming')\n\t* })\n\t* ```\n\t*/\n\theader = (name, value, options) => {\n\t\tif (this.finalized && !this.#res.bodyUsed) this.#res = createResponseInstance(this.#res.body, this.#res);\n\t\tconst headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n\t\tif (value === void 0) headers.delete(name);\n\t\telse if (options?.append) headers.append(name, value);\n\t\telse headers.set(name, value);\n\t};\n\tstatus = (status) => {\n\t\tthis.#status = status;\n\t};\n\t/**\n\t* `.set()` can set the value specified by the key.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#set-get}\n\t*\n\t* @example\n\t* ```ts\n\t* app.use('*', async (c, next) => {\n\t* c.set('message', 'Hono is hot!!')\n\t* await next()\n\t* })\n\t* ```\n\t*/\n\tset = (key, value) => {\n\t\tthis.#var ??= /* @__PURE__ */ new Map();\n\t\tthis.#var.set(key, value);\n\t};\n\t/**\n\t* `.get()` can use the value specified by the key.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#set-get}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/', (c) => {\n\t* const message = c.get('message')\n\t* return c.text(`The message is \"${message}\"`)\n\t* })\n\t* ```\n\t*/\n\tget = (key) => {\n\t\treturn this.#var ? this.#var.get(key) : void 0;\n\t};\n\t/**\n\t* `.var` can access the value of a variable.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#var}\n\t*\n\t* @example\n\t* ```ts\n\t* const result = c.var.client.oneMethod()\n\t* ```\n\t*/\n\tget var() {\n\t\tif (!this.#var) return {};\n\t\treturn Object.fromEntries(this.#var);\n\t}\n\t#newResponse(data, arg, headers) {\n\t\tlet responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders;\n\t\tif (typeof arg === \"object\" && arg.headers) {\n\t\t\tresponseHeaders ??= new Headers();\n\t\t\tfor (const [key, value] of new Headers(arg.headers)) if (key === \"set-cookie\") responseHeaders.append(key, value);\n\t\t\telse responseHeaders.set(key, value);\n\t\t}\n\t\tif (headers) {\n\t\t\tif (!responseHeaders) {\n\t\t\t\tlet count = 0;\n\t\t\t\tfor (const k in headers) if (++count > 1 || typeof headers[k] !== \"string\") {\n\t\t\t\t\tresponseHeaders = new Headers();\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (responseHeaders) for (const k in headers) {\n\t\t\t\tconst v = headers[k];\n\t\t\t\tif (typeof v === \"string\") responseHeaders.set(k, v);\n\t\t\t\telse {\n\t\t\t\t\tresponseHeaders.delete(k);\n\t\t\t\t\tfor (const v2 of v) responseHeaders.append(k, v2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n\t\treturn createResponseInstance(data, {\n\t\t\tstatus,\n\t\t\theaders: responseHeaders ?? headers\n\t\t});\n\t}\n\tnewResponse = (...args) => this.#newResponse(...args);\n\t/**\n\t* `.body()` can return the HTTP response.\n\t* You can set headers with `.header()` and set HTTP status code with `.status`.\n\t* This can also be set in `.text()`, `.json()` and so on.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#body}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/welcome', (c) => {\n\t* // Set headers\n\t* c.header('X-Message', 'Hello!')\n\t* c.header('Content-Type', 'text/plain')\n\t* // Set HTTP status code\n\t* c.status(201)\n\t*\n\t* // Return the response body\n\t* return c.body('Thank you for coming')\n\t* })\n\t* ```\n\t*/\n\tbody = (data, arg, headers) => this.#newResponse(data, arg, headers);\n\t/**\n\t* `.text()` can render text as `Content-Type:text/plain`.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#text}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/say', (c) => {\n\t* return c.text('Hello!')\n\t* })\n\t* ```\n\t*/\n\ttext = (text, arg, headers) => {\n\t\treturn !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(text, arg, setDefaultContentType(TEXT_PLAIN, headers));\n\t};\n\t/**\n\t* `.json()` can render JSON as `Content-Type:application/json`.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#json}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/api', (c) => {\n\t* return c.json({ message: 'Hello!' })\n\t* })\n\t* ```\n\t*/\n\tjson = (object, arg, headers) => {\n\t\treturn this.#newResponse(JSON.stringify(object), arg, setDefaultContentType(\"application/json\", headers));\n\t};\n\thtml = (html, arg, headers) => {\n\t\tconst res = (html) => this.#newResponse(html, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n\t\treturn typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n\t};\n\t/**\n\t* `.redirect()` can Redirect, default status code is 302.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#redirect}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/redirect', (c) => {\n\t* return c.redirect('/')\n\t* })\n\t* app.get('/redirect-permanently', (c) => {\n\t* return c.redirect('/', 301)\n\t* })\n\t* ```\n\t*/\n\tredirect = (location, status) => {\n\t\tconst locationString = String(location);\n\t\tthis.header(\"Location\", !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString));\n\t\treturn this.newResponse(null, status ?? 302);\n\t};\n\t/**\n\t* `.notFound()` can return the Not Found Response.\n\t*\n\t* @see {@link https://hono.dev/docs/api/context#notfound}\n\t*\n\t* @example\n\t* ```ts\n\t* app.get('/notfound', (c) => {\n\t* return c.notFound()\n\t* })\n\t* ```\n\t*/\n\tnotFound = () => {\n\t\tthis.#notFoundHandler ??= () => createResponseInstance();\n\t\treturn this.#notFoundHandler(this);\n\t};\n};\n//#endregion\nexport { Context, TEXT_PLAIN };\n","//#region src/compose.ts\n/**\n* Compose middleware functions into a single function based on `koa-compose` package.\n*\n* @template E - The environment type.\n*\n* @param {[[Function, unknown], unknown][] | [[Function]][]} middleware - An array of middleware functions and their corresponding parameters.\n* @param {ErrorHandler<E>} [onError] - An optional error handler function.\n* @param {NotFoundHandler<E>} [onNotFound] - An optional not-found handler function.\n*\n* @returns {(context: Context, next?: Next) => Promise<Context>} - A composed middleware function.\n*/\nconst compose = (middleware, onError, onNotFound) => {\n\treturn (context, next) => {\n\t\tlet index = -1;\n\t\treturn dispatch(0);\n\t\t/**\n\t\t* Dispatch the middleware functions.\n\t\t*\n\t\t* @param {number} i - The current index in the middleware array.\n\t\t*\n\t\t* @returns {Promise<Context>} - A promise that resolves to the context.\n\t\t*/\n\t\tasync function dispatch(i) {\n\t\t\tif (i <= index) throw new Error(\"next() called multiple times\");\n\t\t\tindex = i;\n\t\t\tlet res;\n\t\t\tlet isError = false;\n\t\t\tlet handler;\n\t\t\tif (middleware[i]) {\n\t\t\t\thandler = middleware[i][0][0];\n\t\t\t\tcontext.req.routeIndex = i;\n\t\t\t} else handler = i === middleware.length && next || void 0;\n\t\t\tif (handler) try {\n\t\t\t\tres = await handler(context, () => dispatch(i + 1));\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof Error && onError) {\n\t\t\t\t\tcontext.error = err;\n\t\t\t\t\tres = await onError(err, context);\n\t\t\t\t\tisError = true;\n\t\t\t\t} else throw err;\n\t\t\t}\n\t\t\telse if (context.finalized === false && onNotFound) res = await onNotFound(context);\n\t\t\tif (res && (context.finalized === false || isError)) context.res = res;\n\t\t\treturn context;\n\t\t}\n\t};\n};\n//#endregion\nexport { compose };\n","//#region src/router.ts\n/**\n* @module\n* This module provides types definitions and variables for the routers.\n*/\n/**\n* Constant representing all HTTP methods in uppercase.\n*/\nconst METHOD_NAME_ALL = \"ALL\";\n/**\n* Constant representing all HTTP methods in lowercase.\n*/\nconst METHOD_NAME_ALL_LOWERCASE = \"all\";\n/**\n* Array of supported HTTP methods.\n*/\nconst METHODS = [\n\t\"get\",\n\t\"post\",\n\t\"put\",\n\t\"delete\",\n\t\"options\",\n\t\"patch\",\n\t\"query\"\n];\n/**\n* Error message indicating that a route cannot be added because the matcher is already built.\n*/\nconst MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\n/**\n* Error class representing an unsupported path error.\n*/\nvar UnsupportedPathError = class extends Error {};\n//#endregion\nexport { MESSAGE_MATCHER_IS_ALREADY_BUILT, METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE, UnsupportedPathError };\n","//#region src/utils/constants.ts\n/**\n* Constant used to mark a composed handler.\n*/\nconst COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\n//#endregion\nexport { COMPOSED_HANDLER };\n","import { GET_MATCH_RESULT } from \"../request/constants.js\";\nimport { getPattern, splitRoutingPath, stripPathPrefix } from \"./url.js\";\n//#region src/utils/mount.ts\nconst getPathPrefixLength = (c, pathPrefix, routePath) => {\n\tif (!/[:*]/.test(pathPrefix)) return pathPrefix.length;\n\tconst path = c.req.path;\n\tconst matchResult = c.req[GET_MATCH_RESULT];\n\tconst paramNames = /* @__PURE__ */ new Set();\n\tlet length = 0;\n\tfor (const part of splitRoutingPath(pathPrefix)) {\n\t\tconst pattern = getPattern(part);\n\t\tif (pattern && pattern !== \"*\") {\n\t\t\tconst name = pattern[1];\n\t\t\tif (paramNames.has(name)) throw new Error(`mount(): Duplicate path parameter \"${name}\" in \"${routePath}\".`);\n\t\t\tparamNames.add(name);\n\t\t}\n\t\tif (pattern && pattern !== \"*\" && pattern[2] !== true) {\n\t\t\tconst value = matchResult.length === 2 ? matchResult[1][matchResult[0][c.req.routeIndex][1][pattern[1]]] : matchResult[0][c.req.routeIndex][1][pattern[1]];\n\t\t\tlength += value.length + 1;\n\t\t} else if (pattern || part.endsWith(\"*\")) {\n\t\t\tconst end = path.indexOf(\"/\", length + 1);\n\t\t\tlength = end === -1 ? path.length : end;\n\t\t} else length += part.length + 1;\n\t}\n\treturn length;\n};\nconst createMountedRequest = (c, pathPrefix, routePath) => {\n\tif (/[^/]\\*$/.test(routePath)) throw new Error(`mount(): Wildcard must follow \"/\" in \"${routePath}\".`);\n\tconst url = new URL(c.req.raw.url);\n\turl.pathname = stripPathPrefix(url.pathname, c.req.path, getPathPrefixLength(c, pathPrefix, routePath));\n\treturn new Request(url, c.req.raw);\n};\n//#endregion\nexport { createMountedRequest };\n","import { compose } from \"./compose.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { createMountedRequest } from \"./utils/mount.js\";\n//#region src/hono-base.ts\n/**\n* @module\n* This module is the base module for the Hono object.\n*/\nconst notFoundHandler = (c) => {\n\treturn c.text(\"404 Not Found\", 404);\n};\nconst errorHandler = (err, c) => {\n\tif (\"getResponse\" in err) {\n\t\tconst res = err.getResponse();\n\t\treturn c.newResponse(res.body, res);\n\t}\n\tconsole.error(err);\n\treturn c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class Hono {\n\tget;\n\tpost;\n\tput;\n\tdelete;\n\toptions;\n\tpatch;\n\tquery;\n\tall;\n\ton;\n\tuse;\n\trouter;\n\tgetPath;\n\t_basePath = \"/\";\n\t#path = \"/\";\n\troutes = [];\n\tconstructor(options = {}) {\n\t\t[...METHODS, \"all\"].forEach((method) => {\n\t\t\tthis[method] = (args1, ...args) => {\n\t\t\t\tconst methodName = method.toUpperCase();\n\t\t\t\tif (typeof args1 === \"string\") this.#path = args1;\n\t\t\t\telse this.#addRoute(methodName, this.#path, args1);\n\t\t\t\targs.forEach((handler) => {\n\t\t\t\t\tthis.#addRoute(methodName, this.#path, handler);\n\t\t\t\t});\n\t\t\t\treturn this;\n\t\t\t};\n\t\t});\n\t\tthis.on = (method, path, ...handlers) => {\n\t\t\tfor (const p of [path].flat()) {\n\t\t\t\tthis.#path = p;\n\t\t\t\tfor (const m of [method].flat()) {\n\t\t\t\t\tconst methodName = m.toUpperCase();\n\t\t\t\t\tfor (const handler of handlers) this.#addRoute(methodName, this.#path, handler);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t};\n\t\tthis.use = (arg1, ...handlers) => {\n\t\t\tif (typeof arg1 === \"string\") this.#path = arg1;\n\t\t\telse {\n\t\t\t\tthis.#path = \"*\";\n\t\t\t\thandlers.unshift(arg1);\n\t\t\t}\n\t\t\thandlers.forEach((handler) => {\n\t\t\t\tthis.#addRoute(\"ALL\", this.#path, handler);\n\t\t\t});\n\t\t\treturn this;\n\t\t};\n\t\tconst { strict, ...optionsWithoutStrict } = options;\n\t\tObject.assign(this, optionsWithoutStrict);\n\t\tthis.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n\t}\n\t#clone() {\n\t\tconst clone = new Hono({\n\t\t\trouter: this.router,\n\t\t\tgetPath: this.getPath\n\t\t});\n\t\tclone.errorHandler = this.errorHandler;\n\t\tclone.#notFoundHandler = this.#notFoundHandler;\n\t\tclone.routes = this.routes;\n\t\treturn clone;\n\t}\n\t#notFoundHandler = notFoundHandler;\n\terrorHandler = errorHandler;\n\t/**\n\t* `.route()` allows grouping other Hono instance in routes.\n\t*\n\t* @see {@link https://hono.dev/docs/api/routing#grouping}\n\t*\n\t* @param {string} path - base Path\n\t* @param {Hono} app - other Hono instance\n\t* @returns {Hono} routed Hono instance\n\t*\n\t* @example\n\t* ```ts\n\t* const app = new Hono()\n\t* const app2 = new Hono()\n\t*\n\t* app2.get(\"/user\", (c) => c.text(\"user\"))\n\t* app.route(\"/api\", app2) // GET /api/user\n\t* ```\n\t*/\n\troute(path, app) {\n\t\tconst subApp = this.basePath(path);\n\t\tapp.routes.map((r) => {\n\t\t\tlet handler;\n\t\t\tif (app.errorHandler === errorHandler) handler = r.handler;\n\t\t\telse {\n\t\t\t\thandler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n\t\t\t\thandler[COMPOSED_HANDLER] = r.handler;\n\t\t\t}\n\t\t\tsubApp.#addRoute(r.method, r.path, handler, r.basePath);\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* `.basePath()` allows base paths to be specified.\n\t*\n\t* @see {@link https://hono.dev/docs/api/routing#base-path}\n\t*\n\t* @param {string} path - base Path\n\t* @returns {Hono} changed Hono instance\n\t*\n\t* @example\n\t* ```ts\n\t* const api = new Hono().basePath('/api')\n\t* ```\n\t*/\n\tbasePath(path) {\n\t\tconst subApp = this.#clone();\n\t\tsubApp._basePath = mergePath(this._basePath, path);\n\t\treturn subApp;\n\t}\n\t/**\n\t* `.onError()` handles an error and returns a customized Response.\n\t*\n\t* @see {@link https://hono.dev/docs/api/hono#error-handling}\n\t*\n\t* @param {ErrorHandler} handler - request Handler for error\n\t* @returns {Hono} changed Hono instance\n\t*\n\t* @example\n\t* ```ts\n\t* app.onError((err, c) => {\n\t* console.error(`${err}`)\n\t* return c.text('Custom Error Message', 500)\n\t* })\n\t* ```\n\t*/\n\tonError = (handler) => {\n\t\tthis.errorHandler = handler;\n\t\treturn this;\n\t};\n\t/**\n\t* `.notFound()` allows you to customize a Not Found Response.\n\t*\n\t* @see {@link https://hono.dev/docs/api/hono#not-found}\n\t*\n\t* @param {NotFoundHandler} handler - request handler for not-found\n\t* @returns {Hono} changed Hono instance\n\t*\n\t* @example\n\t* ```ts\n\t* app.notFound((c) => {\n\t* return c.text('Custom 404 Message', 404)\n\t* })\n\t* ```\n\t*/\n\tnotFound = (handler) => {\n\t\tthis.#notFoundHandler = handler;\n\t\treturn this;\n\t};\n\t/**\n\t* `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n\t*\n\t* @deprecated Use `mount()` from `hono/mount` instead. `.mount()` will be removed in v5.\n\t*\n\t* @see {@link https://hono.dev/docs/api/hono#mount}\n\t*\n\t* @param {string} path - base Path\n\t* @param {Function} applicationHandler - other Request Handler\n\t* @param {MountOptions} [options] - options of `.mount()`\n\t* @returns {Hono} mounted Hono instance\n\t*\n\t* @example\n\t* ```ts\n\t* import { Router as IttyRouter } from 'itty-router'\n\t* import { Hono } from 'hono'\n\t* // Create itty-router application\n\t* const ittyRouter = IttyRouter()\n\t* // GET /itty-router/hello\n\t* ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n\t*\n\t* const app = new Hono()\n\t* app.mount('/itty-router', ittyRouter.handle)\n\t* ```\n\t*\n\t* @example\n\t* ```ts\n\t* const app = new Hono()\n\t* // Send the request to another application without modification.\n\t* app.mount('/app', anotherApp, {\n\t* replaceRequest: (req) => req,\n\t* })\n\t* ```\n\t*/\n\tmount(path, applicationHandler, options) {\n\t\tlet replaceRequest;\n\t\tlet optionHandler;\n\t\tif (options) {\n\t\t\tif (typeof options === \"function\") optionHandler = options;\n\t\t\telse {\n\t\t\t\toptionHandler = options.optionHandler;\n\t\t\t\tif (options.replaceRequest === false) replaceRequest = (request) => request;\n\t\t\t\telse replaceRequest = options.replaceRequest;\n\t\t\t}\n\t\t}\n\t\tconst getOptions = optionHandler ? (c) => {\n\t\t\tconst options = optionHandler(c);\n\t\t\treturn Array.isArray(options) ? options : [options];\n\t\t} : (c) => {\n\t\t\tlet executionContext = void 0;\n\t\t\ttry {\n\t\t\t\texecutionContext = c.executionCtx;\n\t\t\t} catch {}\n\t\t\treturn [c.env, executionContext];\n\t\t};\n\t\tconst mergedPath = mergePath(this._basePath, path);\n\t\tconst defaultReplaceRequest = (c) => createMountedRequest(c, mergedPath.replace(/\\/$/, \"\"), mergePath(mergedPath, \"*\"));\n\t\tconst handler = async (c, next) => {\n\t\t\tconst res = await applicationHandler(replaceRequest ? replaceRequest(c.req.raw) : defaultReplaceRequest(c), ...getOptions(c));\n\t\t\tif (res) return res;\n\t\t\tawait next();\n\t\t};\n\t\tthis.#addRoute(\"ALL\", mergePath(path, \"*\"), handler);\n\t\treturn this;\n\t}\n\t#addRoute(method, path, handler, baseRoutePath) {\n\t\tpath = mergePath(this._basePath, path);\n\t\tconst r = {\n\t\t\tbasePath: baseRoutePath !== void 0 ? mergePath(this._basePath, baseRoutePath) : this._basePath,\n\t\t\tpath,\n\t\t\tmethod,\n\t\t\thandler\n\t\t};\n\t\tthis.router.add(method, path, [handler, r]);\n\t\tthis.routes.push(r);\n\t}\n\t#handleError(err, c) {\n\t\tif (err instanceof Error) return this.errorHandler(err, c);\n\t\tthrow err;\n\t}\n\t#dispatch(request, executionCtx, env, method) {\n\t\tif (method === \"HEAD\") return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n\t\tconst path = this.getPath(request, { env });\n\t\tconst matchResult = this.router.match(method, path);\n\t\tconst c = new Context(request, {\n\t\t\tpath,\n\t\t\tmatchResult,\n\t\t\tenv,\n\t\t\texecutionCtx,\n\t\t\tnotFoundHandler: this.#notFoundHandler\n\t\t});\n\t\tif (matchResult[0].length === 1) {\n\t\t\tlet res;\n\t\t\ttry {\n\t\t\t\tres = matchResult[0][0][0][0](c, async () => {\n\t\t\t\t\tc.res = await this.#notFoundHandler(c);\n\t\t\t\t});\n\t\t\t} catch (err) {\n\t\t\t\treturn this.#handleError(err, c);\n\t\t\t}\n\t\t\treturn res instanceof Promise ? res.then((resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n\t\t}\n\t\tconst composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n\t\treturn (async () => {\n\t\t\ttry {\n\t\t\t\tconst context = await composed(c);\n\t\t\t\tif (!context.finalized) throw new Error(\"Context is not finalized. Did you forget to return a Response object or `await next()`?\");\n\t\t\t\treturn context.res;\n\t\t\t} catch (err) {\n\t\t\t\treturn this.#handleError(err, c);\n\t\t\t}\n\t\t})();\n\t}\n\t/**\n\t* `.fetch()` will be entry point of your app.\n\t*\n\t* @see {@link https://hono.dev/docs/api/hono#fetch}\n\t*\n\t* @param {Request} request - request Object of request\n\t* @param {Env} env - env Object\n\t* @param {ExecutionContext} executionCtx - context of execution\n\t* @returns {Response | Promise<Response>} response of request\n\t*\n\t*/\n\tfetch = (request, ...rest) => {\n\t\treturn this.#dispatch(request, rest[1], rest[0], request.method);\n\t};\n\t/**\n\t* `.request()` is a useful method for testing.\n\t* You can pass a URL or pathname to send a GET request.\n\t* app will return a Response object.\n\t* ```ts\n\t* test('GET /hello is ok', async () => {\n\t* const res = await app.request('/hello')\n\t* expect(res.status).toBe(200)\n\t* })\n\t* ```\n\t* @see https://hono.dev/docs/api/hono#request\n\t*/\n\trequest = (input, requestInit, Env, executionCtx) => {\n\t\tif (input instanceof Request) return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n\t\tinput = input.toString();\n\t\treturn this.fetch(new Request(/^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`, requestInit), Env, executionCtx);\n\t};\n\t/**\n\t* `.fire()` automatically adds a global fetch event listener.\n\t* This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n\t* @deprecated\n\t* Use `fire` from `hono/service-worker` instead.\n\t* ```ts\n\t* import { Hono } from 'hono'\n\t* import { fire } from 'hono/service-worker'\n\t*\n\t* const app = new Hono()\n\t* // ...\n\t* fire(app)\n\t* ```\n\t* @see https://hono.dev/docs/api/hono#fire\n\t* @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n\t* @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n\t*/\n\tfire = () => {\n\t\taddEventListener(\"fetch\", (event) => {\n\t\t\tevent.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n\t\t});\n\t};\n};\n//#endregion\nexport { Hono as HonoBase };\n","//#region src/router/utils.ts\nconst createNullObject = () => Object.create(null);\n//#endregion\nexport { createNullObject };\n","import \"../../router.js\";\n//#region src/router/reg-exp-router/matcher.ts\nconst emptyParam = [];\nfunction match(method, path) {\n\tconst matchers = this.buildAllMatchers();\n\tconst match = ((method, path) => {\n\t\tconst matcher = matchers[method] || matchers[\"ALL\"];\n\t\tconst staticMatch = matcher[2][path];\n\t\tif (staticMatch) return staticMatch;\n\t\tconst match = path.match(matcher[0]);\n\t\tif (!match) return [[], emptyParam];\n\t\tconst index = match.indexOf(\"\", 1);\n\t\treturn [matcher[1][index], match];\n\t});\n\tthis.match = match;\n\treturn match(method, path);\n}\n//#endregion\nexport { emptyParam, match };\n","import { createNullObject } from \"../utils.js\";\n//#region src/router/reg-exp-router/node.ts\nconst LABEL_REG_EXP_STR = \"[^/]+\";\nconst ONLY_WILDCARD_REG_EXP_STR = \"[^]*\";\nconst TAIL_WILDCARD_REG_EXP_STR = \"(?:|/[^]*)\";\nconst PATH_ERROR = Symbol();\nconst regExpMetaChars = /* @__PURE__ */ new Set(\".\\\\+*[^]$()\");\n/**\n* Sort order:\n* 1. literal\n* 2. special pattern (e.g. :label{[0-9]+})\n* 3. common label pattern (e.g. :label)\n* 4. wildcard\n*/\nfunction compareKey(a, b) {\n\tif (a.length === 1) return b.length === 1 ? a < b ? -1 : 1 : -1;\n\tif (b.length === 1) return 1;\n\tif (a === \"[^]*\" || a === \"(?:|/[^]*)\") return b === \"[^]*\" ? -1 : 1;\n\telse if (b === \"[^]*\" || b === \"(?:|/[^]*)\") return -1;\n\tif (a === \"[^/]+\") return 1;\n\telse if (b === \"[^/]+\") return -1;\n\treturn a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class Node {\n\t#index;\n\t#varIndex;\n\t#children = createNullObject();\n\tinsert(tokens, index, paramMap, context, keys) {\n\t\tlet node = this;\n\t\tfor (let i = 0, len = tokens.length; i < len; i++) {\n\t\t\tconst token = tokens[i];\n\t\t\tconst pattern = token.length === 1 ? token === \"*\" ? i === len - 1 ? [\n\t\t\t\t\"\",\n\t\t\t\t\"\",\n\t\t\t\tONLY_WILDCARD_REG_EXP_STR\n\t\t\t] : [\n\t\t\t\t\"\",\n\t\t\t\t\"\",\n\t\t\t\tLABEL_REG_EXP_STR\n\t\t\t] : null : token === \"/*\" ? [\n\t\t\t\t\"\",\n\t\t\t\t\"\",\n\t\t\t\tTAIL_WILDCARD_REG_EXP_STR\n\t\t\t] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n\t\t\tlet nextNode;\n\t\t\tif (pattern) {\n\t\t\t\tconst name = pattern[1];\n\t\t\t\tlet regexpStr = pattern[2] || \"[^/]+\";\n\t\t\t\tif (name && pattern[2]) {\n\t\t\t\t\tif (new RegExp(regexpStr).test(\"\")) throw PATH_ERROR;\n\t\t\t\t\tregexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n\t\t\t\t\tif (/\\((?!\\?:)/.test(regexpStr)) throw PATH_ERROR;\n\t\t\t\t\tif (regexpStr.length === 1 && regExpMetaChars.has(regexpStr)) throw PATH_ERROR;\n\t\t\t\t}\n\t\t\t\tkeys.push(regexpStr);\n\t\t\t\tnextNode = node.#children[regexpStr];\n\t\t\t\tif (!nextNode) {\n\t\t\t\t\tif (regexpStr !== \"[^]*\" && regexpStr !== \"(?:|/[^]*)\") {\n\t\t\t\t\t\tfor (const k in node.#children) if ((regexpStr.length > 1 || k.length > 1) && k !== \"[^]*\" && k !== \"(?:|/[^]*)\") throw PATH_ERROR;\n\t\t\t\t\t}\n\t\t\t\t\tnextNode = node.#children[regexpStr] = new Node();\n\t\t\t\t}\n\t\t\t\tif (name !== \"\") {\n\t\t\t\t\tnextNode.#varIndex ??= context.varIndex++;\n\t\t\t\t\tparamMap.push([name, nextNode.#varIndex]);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tkeys.push(token);\n\t\t\t\tnextNode = node.#children[token];\n\t\t\t\tif (!nextNode) {\n\t\t\t\t\tfor (const k in node.#children) if (k.length > 1 && k !== \"[^]*\" && k !== \"(?:|/[^]*)\") throw PATH_ERROR;\n\t\t\t\t\tnextNode = node.#children[token] = new Node();\n\t\t\t\t}\n\t\t\t}\n\t\t\tnode = nextNode;\n\t\t}\n\t\tif (node.#index !== void 0) throw PATH_ERROR;\n\t\tnode.#index = index;\n\t}\n\tbuildRegExpStr() {\n\t\tconst strList = Object.keys(this.#children).sort(compareKey).map((k) => {\n\t\t\tconst c = this.#children[k];\n\t\t\tconst childStr = c.buildRegExpStr();\n\t\t\treturn childStr === \"\" ? \"\" : (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + childStr;\n\t\t}).filter(Boolean);\n\t\tif (typeof this.#index === \"number\" && this.#index !== -1) strList.unshift(`#${this.#index}`);\n\t\tif (strList.length === 0) return \"\";\n\t\tif (strList.length === 1) return strList[0];\n\t\treturn \"(?:\" + strList.join(\"|\") + \")\";\n\t}\n};\n//#endregion\nexport { LABEL_REG_EXP_STR, Node, ONLY_WILDCARD_REG_EXP_STR, PATH_ERROR, TAIL_WILDCARD_REG_EXP_STR };\n","import { createNullObject } from \"../utils.js\";\nimport { Node } from \"./node.js\";\n//#region src/router/reg-exp-router/trie.ts\nvar Trie = class {\n\t#context = { varIndex: 0 };\n\t#root = new Node();\n\t#index = 0;\n\tpaths = createNullObject();\n\tinsert(path, isStatic) {\n\t\tconst keys = [];\n\t\tif (isStatic) {\n\t\t\tthis.#root.insert(path.split(\"\"), -1, [], this.#context, keys);\n\t\t\tthis.paths[path] = [\n\t\t\t\t-1,\n\t\t\t\t[],\n\t\t\t\tkeys\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\t\tconst paramAssoc = [];\n\t\tconst groups = [];\n\t\tlet markedPath = path;\n\t\tfor (let i = 0;;) {\n\t\t\tlet replaced = false;\n\t\t\tmarkedPath = markedPath.replace(/\\{(?:\\{[\\d,]+\\}|[^}])+\\}/g, (m) => {\n\t\t\t\tconst mark = `@\\\\${i}`;\n\t\t\t\tgroups[i] = [mark, m];\n\t\t\t\ti++;\n\t\t\t\treplaced = true;\n\t\t\t\treturn mark;\n\t\t\t});\n\t\t\tif (!replaced) break;\n\t\t}\n\t\t/**\n\t\t* - pattern (:label, :label{0-9]+}, ...)\n\t\t* - /* wildcard\n\t\t* - character\n\t\t*/\n\t\tconst tokens = markedPath.match(/(?::[^\\/]+)|(?:\\/\\*$)|./gs) || [];\n\t\tfor (let i = groups.length - 1; i >= 0; i--) {\n\t\t\tconst [mark] = groups[i];\n\t\t\tfor (let j = tokens.length - 1; j >= 0; j--) if (tokens[j].indexOf(mark) !== -1) {\n\t\t\t\ttokens[j] = tokens[j].replace(mark, groups[i][1]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tthis.#root.insert(tokens, this.#index, paramAssoc, this.#context, keys);\n\t\tthis.paths[path] = [\n\t\t\tthis.#index++,\n\t\t\tparamAssoc,\n\t\t\tkeys\n\t\t];\n\t}\n\tbuildRegExp() {\n\t\tlet regexp = this.#root.buildRegExpStr();\n\t\tif (regexp === \"\") return [\n\t\t\t/^$/,\n\t\t\t[],\n\t\t\t[]\n\t\t];\n\t\tlet captureIndex = 0;\n\t\tconst indexReplacementMap = [];\n\t\tconst paramReplacementMap = [];\n\t\tregexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n\t\t\tif (handlerIndex !== void 0) {\n\t\t\t\tindexReplacementMap[++captureIndex] = Number(handlerIndex);\n\t\t\t\treturn \"$()\";\n\t\t\t}\n\t\t\tif (paramIndex !== void 0) {\n\t\t\t\tparamReplacementMap[Number(paramIndex)] = ++captureIndex;\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t\treturn \"\";\n\t\t});\n\t\treturn [\n\t\t\tnew RegExp(`^${regexp}`),\n\t\t\tindexReplacementMap,\n\t\t\tparamReplacementMap\n\t\t];\n\t}\n};\n//#endregion\nexport { Trie };\n","import { checkOptionalParameter } from \"../../utils/url.js\";\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nimport { createNullObject } from \"../utils.js\";\nimport { emptyParam, match } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\n//#region src/router/reg-exp-router/router.ts\nfunction endsWithWildcard(keys) {\n\tconst tail = keys[keys.length - 1];\n\treturn tail === \"[^]*\" || tail === \"(?:|/[^]*)\";\n}\nfunction covers(wildcard, target) {\n\tconst last = wildcard.length - 1;\n\tfor (let i = 0; i < last; i++) if (wildcard[i] !== target[i]) return false;\n\treturn wildcard[last] === \"[^]*\" || target.length === last || target[last] === \"/\";\n}\nvar RegExpRouter = class {\n\tname = \"RegExpRouter\";\n\t#handlers;\n\t#tries;\n\tconstructor() {\n\t\tthis.#handlers = { [\"ALL\"]: [] };\n\t\tthis.#tries = { [\"ALL\"]: new Trie() };\n\t}\n\t#insertPath(method, path) {\n\t\ttry {\n\t\t\tthis.#tries[method].insert(path, !/\\*|\\/:/.test(path));\n\t\t} catch (e) {\n\t\t\tthrow e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n\t\t}\n\t}\n\tadd(method, path, handler) {\n\t\tconst handlers = this.#handlers;\n\t\tif (!handlers) throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n\t\tconst tries = this.#tries;\n\t\tif (!handlers[method]) {\n\t\t\ttries[method] = new Trie();\n\t\t\thandlers[method] = [...handlers[\"ALL\"]];\n\t\t\tfor (const p in tries[\"ALL\"].paths) this.#insertPath(method, p);\n\t\t}\n\t\tif (path === \"/*\") path = \"*\";\n\t\tconst methods = method === \"ALL\" ? Object.keys(handlers) : [method];\n\t\tconst paths = checkOptionalParameter(path) || [path];\n\t\tfor (const path of paths) for (const m of methods) {\n\t\t\tif (!tries[m].paths[path]) this.#insertPath(m, path);\n\t\t\thandlers[m].push([handler, path]);\n\t\t}\n\t}\n\tmatch = match;\n\tbuildAllMatchers() {\n\t\tconst matchers = createNullObject();\n\t\tfor (const method of Object.keys(this.#handlers)) matchers[method] = this.#buildMatcher(method);\n\t\tthis.#handlers = this.#tries = void 0;\n\t\treturn matchers;\n\t}\n\t#buildMatcher(method) {\n\t\tconst handlers = this.#handlers[method];\n\t\tconst trie = this.#tries[method];\n\t\tconst staticMap = createNullObject();\n\t\tconst handlerData = [];\n\t\tconst [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n\t\tconst own = createNullObject();\n\t\tconst entries = handlers.map(([h, p], i) => {\n\t\t\t(own[p] ??= []).push(i);\n\t\t\treturn [h, trie.paths[p][1].reduceRight((map, [key, varIndex]) => {\n\t\t\t\tmap[key] = paramReplacementMap[varIndex];\n\t\t\t\treturn map;\n\t\t\t}, createNullObject())];\n\t\t});\n\t\tconst wildcards = Object.keys(own).filter((p) => endsWithWildcard(trie.paths[p][2]));\n\t\tfor (const path in trie.paths) {\n\t\t\tconst [index, , keys] = trie.paths[path];\n\t\t\tconst indexes = [...own[path]];\n\t\t\tfor (const p of wildcards) if (p !== path && covers(trie.paths[p][2], keys)) indexes.push(...own[p]);\n\t\t\tconst data = indexes.sort((a, b) => a - b).map((i) => entries[i]);\n\t\t\tif (index === -1) {\n\t\t\t\tconst last = Math.max(-1, ...data.flatMap(([, map]) => Object.values(map)));\n\t\t\t\tstaticMap[path] = [data, last === -1 ? emptyParam : path.match(regexp).slice(0, last + 1)];\n\t\t\t} else handlerData[index] = data;\n\t\t}\n\t\treturn [\n\t\t\tregexp,\n\t\t\tindexReplacementMap.map((i) => handlerData[i]),\n\t\t\tstaticMap\n\t\t];\n\t}\n};\n//#endregion\nexport { RegExpRouter };\n","import { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\n//#region src/router/smart-router/router.ts\nvar SmartRouter = class {\n\tname = \"SmartRouter\";\n\t#routers = [];\n\t#routes = [];\n\tconstructor(init) {\n\t\tthis.#routers = init.routers;\n\t}\n\tadd(method, path, handler) {\n\t\tif (!this.#routes) throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n\t\tthis.#routes.push([\n\t\t\tmethod,\n\t\t\tpath,\n\t\t\thandler\n\t\t]);\n\t}\n\tmatch(method, path) {\n\t\tif (!this.#routes) throw new Error(\"Fatal error\");\n\t\tconst routers = this.#routers;\n\t\tconst routes = this.#routes;\n\t\tconst len = routers.length;\n\t\tlet i = 0;\n\t\tlet res;\n\t\tfor (; i < len; i++) {\n\t\t\tconst router = routers[i];\n\t\t\ttry {\n\t\t\t\tfor (let i = 0, len = routes.length; i < len; i++) router.add(...routes[i]);\n\t\t\t\tres = router.match(method, path);\n\t\t\t} catch (e) {\n\t\t\t\tif (e instanceof UnsupportedPathError) continue;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\tthis.match = router.match.bind(router);\n\t\t\tthis.#routers = [router];\n\t\t\tthis.#routes = void 0;\n\t\t\tbreak;\n\t\t}\n\t\tif (i === len) throw new Error(\"Fatal error\");\n\t\tthis.name = `SmartRouter + ${this.activeRouter.name}`;\n\t\treturn res;\n\t}\n\tget activeRouter() {\n\t\tif (this.#routes || this.#routers.length !== 1) throw new Error(\"No active router has been determined yet.\");\n\t\treturn this.#routers[0];\n\t}\n};\n//#endregion\nexport { SmartRouter };\n","import { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nimport \"../../router.js\";\nimport { createNullObject } from \"../utils.js\";\n//#region src/router/trie-router/node.ts\nconst emptyParams = createNullObject();\nlet order = 0;\nvar Node = class Node {\n\t#methods = [];\n\t#children = createNullObject();\n\t#patterns = [];\n\t#pattern;\n\t#params = emptyParams;\n\tinsert(method, path, handler) {\n\t\tlet curNode = this;\n\t\tconst parts = splitRoutingPath(path);\n\t\tconst possibleKeys = /* @__PURE__ */ new Set();\n\t\tlet i = 0;\n\t\tfor (const p of parts) {\n\t\t\tconst nextP = parts[++i];\n\t\t\tconst pattern = getPattern(p, nextP) || (nextP === void 0 && p && p.indexOf(\"*\") === p.length - 1 ? p : null);\n\t\t\tconst isParam = Array.isArray(pattern);\n\t\t\tconst key = isParam ? pattern[0] : pattern || p;\n\t\t\tconst child = curNode.#children[key] ||= new Node();\n\t\t\tif (pattern && !child.#pattern) {\n\t\t\t\tchild.#pattern = pattern;\n\t\t\t\tcurNode.#patterns.push(child);\n\t\t\t}\n\t\t\tcurNode = child;\n\t\t\tif (isParam) possibleKeys.add(pattern[1]);\n\t\t}\n\t\tcurNode.#methods.push({ [method]: {\n\t\t\thandler,\n\t\t\tpossibleKeys: [...possibleKeys],\n\t\t\tscore: ++order\n\t\t} });\n\t}\n\t#pushHandlerSets(handlerSets, node, method, nodeParams, params) {\n\t\tfor (let i = 0, len = node.#methods.length; i < len; i++) {\n\t\t\tconst m = node.#methods[i];\n\t\t\tconst handlerSet = m[method] || m[\"ALL\"];\n\t\t\tif (handlerSet) {\n\t\t\t\thandlerSet.params = createNullObject();\n\t\t\t\thandlerSets.push(handlerSet);\n\t\t\t\tfor (let i = 0, len = handlerSet.possibleKeys.length; i < len; i++) {\n\t\t\t\t\tconst key = handlerSet.possibleKeys[i];\n\t\t\t\t\thandlerSet.params[key] = params?.[key] && !i ? params[key] : nodeParams[key] ?? params?.[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tsearch(method, path) {\n\t\tconst handlerSets = [];\n\t\tthis.#params = emptyParams;\n\t\tlet curNodes = [this];\n\t\tconst parts = splitPath(path);\n\t\tconst curNodesQueue = [];\n\t\tconst len = parts.length;\n\t\tlet partOffsets = null;\n\t\tfor (let i = 0; i < len; i++) {\n\t\t\tconst part = parts[i];\n\t\t\tconst isLast = i === len - 1;\n\t\t\tconst tempNodes = [];\n\t\t\tfor (let j = 0, len2 = curNodes.length; j < len2; j++) {\n\t\t\t\tconst node = curNodes[j];\n\t\t\t\tconst nextNode = node.#children[part];\n\t\t\t\tif (nextNode) {\n\t\t\t\t\tnextNode.#params = node.#params;\n\t\t\t\t\tif (isLast) {\n\t\t\t\t\t\tif (nextNode.#children[\"*\"]) this.#pushHandlerSets(handlerSets, nextNode.#children[\"*\"], method, node.#params);\n\t\t\t\t\t\tthis.#pushHandlerSets(handlerSets, nextNode, method, node.#params);\n\t\t\t\t\t} else tempNodes.push(nextNode);\n\t\t\t\t}\n\t\t\t\tfor (const child of node.#patterns) {\n\t\t\t\t\tconst pattern = child.#pattern;\n\t\t\t\t\tconst params = node.#params === emptyParams ? {} : { ...node.#params };\n\t\t\t\t\tif (typeof pattern === \"string\") {\n\t\t\t\t\t\tif (pattern === \"*\" || part.startsWith(pattern.slice(0, -1))) {\n\t\t\t\t\t\t\tthis.#pushHandlerSets(handlerSets, child, method, node.#params);\n\t\t\t\t\t\t\tif (pattern === \"*\") {\n\t\t\t\t\t\t\t\tchild.#params = params;\n\t\t\t\t\t\t\t\ttempNodes.push(child);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst [, name, matcher] = pattern;\n\t\t\t\t\tif (!part && matcher === true) continue;\n\t\t\t\t\tif (matcher !== true) {\n\t\t\t\t\t\tif (!partOffsets) {\n\t\t\t\t\t\t\tpartOffsets = [];\n\t\t\t\t\t\t\tlet offset = path[0] === \"/\" ? 1 : 0;\n\t\t\t\t\t\t\tfor (let p = 0; p < len; p++) {\n\t\t\t\t\t\t\t\tpartOffsets[p] = offset;\n\t\t\t\t\t\t\t\toffset += parts[p].length + 1;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst restPathString = path.slice(partOffsets[i]);\n\t\t\t\t\t\tconst m = matcher.exec(restPathString);\n\t\t\t\t\t\tif (m) {\n\t\t\t\t\t\t\tif (!Object.hasOwn(params, name)) params[name] = m[0];\n\t\t\t\t\t\t\tthis.#pushHandlerSets(handlerSets, child, method, node.#params, params);\n\t\t\t\t\t\t\tif (m[0].length === restPathString.length && child.#children[\"*\"]) this.#pushHandlerSets(handlerSets, child.#children[\"*\"], method, node.#params, params);\n\t\t\t\t\t\t\tfor (const _ in child.#children) {\n\t\t\t\t\t\t\t\tchild.#params = params;\n\t\t\t\t\t\t\t\tconst componentCount = m[0].match(/\\//g)?.length ?? 0;\n\t\t\t\t\t\t\t\t(curNodesQueue[componentCount] ||= []).push(child);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (matcher === true || matcher.test(part)) {\n\t\t\t\t\t\tif (!Object.hasOwn(params, name)) params[name] = part;\n\t\t\t\t\t\tif (isLast) {\n\t\t\t\t\t\t\tthis.#pushHandlerSets(handlerSets, child, method, params, node.#params);\n\t\t\t\t\t\t\tif (child.#children[\"*\"]) this.#pushHandlerSets(handlerSets, child.#children[\"*\"], method, params, node.#params);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchild.#params = params;\n\t\t\t\t\t\t\ttempNodes.push(child);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst shifted = curNodesQueue.shift();\n\t\t\tcurNodes = shifted ? tempNodes.concat(shifted) : tempNodes;\n\t\t}\n\t\tif (handlerSets[1]) handlerSets.sort((a, b) => {\n\t\t\treturn a.score - b.score;\n\t\t});\n\t\treturn [handlerSets.map(({ handler, params }) => [handler, params])];\n\t}\n};\n//#endregion\nexport { Node };\n","import { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\n//#region src/router/trie-router/router.ts\nvar TrieRouter = class {\n\tname = \"TrieRouter\";\n\t#node = new Node();\n\tadd(method, path, handler) {\n\t\tfor (const result of checkOptionalParameter(path) || [path]) this.#node.insert(method, result, handler);\n\t}\n\tmatch(method, path) {\n\t\treturn this.#node.search(method, path);\n\t}\n};\n//#endregion\nexport { TrieRouter };\n","import { HonoBase as Hono$1 } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/router.js\";\nimport { SmartRouter } from \"./router/smart-router/router.js\";\nimport { TrieRouter } from \"./router/trie-router/router.js\";\nimport \"./router/trie-router/index.js\";\n//#region src/hono.ts\n/**\n* The Hono class extends the functionality of the HonoBase class.\n* It sets up routing and allows for custom options to be passed.\n*\n* @template E - The environment type.\n* @template S - The schema type.\n* @template BasePath - The base path type.\n*/\nvar Hono = class extends Hono$1 {\n\t/**\n\t* Creates an instance of the Hono class.\n\t*\n\t* @param options - Optional configuration options for the Hono instance.\n\t*/\n\tconstructor(options = {}) {\n\t\tsuper(options);\n\t\tthis.router = options.router ?? new SmartRouter({ routers: [new RegExpRouter(), new TrieRouter()] });\n\t}\n};\n//#endregion\nexport { Hono };\n","/** Error with a machine-readable code, returned to the server as a failed result. */\nexport class CommandError extends Error {\n constructor(\n readonly code: string,\n message: string,\n ) {\n super(message);\n this.name = \"CommandError\";\n }\n}\n","import { execFile } from \"node:child_process\";\nimport { existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { createServer } from \"node:net\";\nimport { dirname, join } from \"node:path\";\nimport { type Browser, chromium } from \"playwright-core\";\nimport { CommandError } from \"../errors\";\n\n/** Installed Chromium-family browsers playwright-core can drive by `channel`. */\nexport type BrowserChannel = \"msedge\" | \"chrome\";\n\nexport interface LaunchOptions {\n /** Channels to try, in order. Default: Edge then Chrome on Windows, Chrome then Edge elsewhere. */\n channels?: BrowserChannel[];\n /** Use this Chromium executable instead of an installed channel. */\n executablePath?: string;\n /**\n * Fall back to Playwright's own Chromium when no installed Edge/Chrome launches, and\n * download it if missing. Only set this with the user's consent (§12.2).\n */\n allowDownloadedChromium?: boolean;\n /** Default true. */\n headless?: boolean;\n log?: (message: string) => void;\n}\n\nexport interface LaunchedBrowser {\n browser: Browser;\n /** `msedge`, `chrome`, `executable` or `chromium` (downloaded). */\n channel: string;\n /** Browser-level CDP WebSocket endpoint on 127.0.0.1. */\n cdpUrl: string;\n cdpPort: number;\n /** Browser process id (for process-tree cleanup); null if it could not be determined. */\n pid: number | null;\n}\n\nconst isWindows = process.platform === \"win32\";\n\n/** Default channel order for this platform. */\nexport function defaultChannels(): BrowserChannel[] {\n return isWindows ? [\"msedge\", \"chrome\"] : [\"chrome\", \"msedge\"];\n}\n\nfunction knownPaths(channel: BrowserChannel): string[] {\n if (isWindows) {\n const roots = [\n process.env[\"PROGRAMFILES(X86)\"],\n process.env.PROGRAMFILES,\n process.env.LOCALAPPDATA,\n ].filter((r): r is string => Boolean(r));\n const rel =\n channel === \"msedge\"\n ? join(\"Microsoft\", \"Edge\", \"Application\", \"msedge.exe\")\n : join(\"Google\", \"Chrome\", \"Application\", \"chrome.exe\");\n return roots.map((root) => join(root, rel));\n }\n if (process.platform === \"darwin\") {\n return channel === \"msedge\"\n ? [\"/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge\"]\n : [\"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\"];\n }\n return channel === \"msedge\"\n ? [\"/opt/microsoft/msedge/msedge\", \"/usr/bin/microsoft-edge\"]\n : [\"/opt/google/chrome/chrome\", \"/usr/bin/google-chrome\", \"/usr/bin/google-chrome-stable\"];\n}\n\n/** Installed channels found at their standard locations (cheap, synchronous). */\nexport function findInstalledChannels(): BrowserChannel[] {\n return defaultChannels().filter((channel) => knownPaths(channel).some((p) => existsSync(p)));\n}\n\n/** A free TCP port on 127.0.0.1 (released before returning; callers retry on a race). */\nexport function freePort(): Promise<number> {\n return new Promise((resolve, reject) => {\n const server = createServer();\n server.once(\"error\", reject);\n server.listen(0, \"127.0.0.1\", () => {\n const address = server.address();\n const port = typeof address === \"object\" && address ? address.port : 0;\n server.close(() => resolve(port));\n });\n });\n}\n\nasync function cdpEndpoint(port: number): Promise<string | null> {\n try {\n const response = await fetch(`http://127.0.0.1:${port}/json/version`, {\n signal: AbortSignal.timeout(3_000),\n });\n const body = (await response.json()) as { webSocketDebuggerUrl?: string };\n return body.webSocketDebuggerUrl ?? null;\n } catch {\n return null;\n }\n}\n\nasync function browserPid(browser: Browser): Promise<number | null> {\n try {\n const cdp = await browser.newBrowserCDPSession();\n const info = (await cdp.send(\"SystemInfo.getProcessInfo\")) as {\n processInfo: { type: string; id: number }[];\n };\n await cdp.detach().catch(() => undefined);\n return info.processInfo.find((p) => p.type === \"browser\")?.id ?? null;\n } catch {\n return null;\n }\n}\n\ntype Target = { channel?: BrowserChannel; executablePath?: string; label: string };\n\nasync function launchTarget(target: Target, headless: boolean): Promise<LaunchedBrowser> {\n let lastError: unknown;\n for (let attempt = 0; attempt < 3; attempt++) {\n const port = await freePort();\n const browser = await chromium.launch({\n ...(target.channel ? { channel: target.channel } : {}),\n ...(target.executablePath ? { executablePath: target.executablePath } : {}),\n headless,\n handleSIGINT: false,\n handleSIGTERM: false,\n handleSIGHUP: false,\n args: [\n `--remote-debugging-port=${port}`,\n \"--remote-debugging-address=127.0.0.1\",\n \"--no-first-run\",\n \"--no-default-browser-check\",\n ],\n });\n const cdpUrl = await cdpEndpoint(port);\n if (cdpUrl) {\n return {\n browser,\n channel: target.label,\n cdpUrl,\n cdpPort: port,\n pid: await browserPid(browser),\n };\n }\n // Port taken between probe and launch: try again on a new one.\n lastError = new Error(`CDP endpoint on port ${port} did not answer`);\n await browser.close().catch(() => undefined);\n }\n throw lastError;\n}\n\n/** Download Playwright's Chromium build with the bundled playwright-core CLI. */\nexport function installChromium(log?: (message: string) => void): Promise<void> {\n const require = createRequire(import.meta.url);\n const cli = join(dirname(require.resolve(\"playwright-core/package.json\")), \"cli.js\");\n log?.(\"downloading Chromium (consented fallback)\");\n return new Promise((resolve, reject) => {\n execFile(\n process.execPath,\n [cli, \"install\", \"chromium\"],\n { windowsHide: true, timeout: 10 * 60_000 },\n (error) => (error ? reject(error) : resolve()),\n );\n });\n}\n\n/**\n * Launch one Chromium for the runner (§12.2): the installed Edge or Chrome first, then\n * (only when allowed) Playwright's downloaded Chromium. Exposes a CDP endpoint on 127.0.0.1.\n */\nexport async function launchChromium(opts: LaunchOptions = {}): Promise<LaunchedBrowser> {\n const headless = opts.headless ?? true;\n const failures: string[] = [];\n const targets: Target[] = opts.executablePath\n ? [{ executablePath: opts.executablePath, label: \"executable\" }]\n : (opts.channels ?? defaultChannels()).map((channel) => ({ channel, label: channel }));\n\n for (const target of targets) {\n try {\n const launched = await launchTarget(target, headless);\n opts.log?.(\n `browser: launched ${launched.channel} (pid ${launched.pid}) at ${launched.cdpUrl}`,\n );\n return launched;\n } catch (error) {\n failures.push(`${target.label}: ${firstLine(error)}`);\n }\n }\n\n if (opts.allowDownloadedChromium) {\n if (!existsSync(chromium.executablePath())) await installChromium(opts.log);\n return launchTarget({ label: \"chromium\" }, headless);\n }\n throw new CommandError(\n \"browser_unavailable\",\n `No installed Edge or Chrome could be launched (${failures.join(\"; \")}). ` +\n \"Install Microsoft Edge or Google Chrome, or allow downloading Chromium.\",\n );\n}\n\nfunction firstLine(error: unknown): string {\n const text = error instanceof Error ? error.message : String(error);\n return text.split(\"\\n\")[0] ?? text;\n}\n","/** Names of CodeDen-internal variables that must never reach agents, shells or setup scripts. */\nconst SECRET = /^CODEDEN_.*(TOKEN|SECRET|KEY|PASSWORD)/i;\n\n/**\n * Environment for child processes (§15): the user's environment minus CodeDen's own\n * secrets. `CODEDEN_HOME` and similar non-secret variables are kept.\n */\nexport function childEnv(extra: Record<string, string> = {}): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(process.env)) {\n if (value === undefined || SECRET.test(key)) continue;\n out[key] = value;\n }\n return { ...out, ...extra };\n}\n","import { execFile } from \"node:child_process\";\n\nconst isWindows = process.platform === \"win32\";\n\nfunction exec(file: string, args: string[], timeoutMs = 15_000): Promise<string> {\n return new Promise((resolve, reject) => {\n execFile(\n file,\n args,\n { windowsHide: true, timeout: timeoutMs, maxBuffer: 16 * 1024 * 1024 },\n (error, stdout) => (error ? reject(error) : resolve(stdout)),\n );\n });\n}\n\n/** True when a process with this pid exists (EPERM still means it exists). */\nexport function isAlive(pid: number): boolean {\n try {\n process.kill(pid, 0);\n return true;\n } catch (error) {\n return (error as NodeJS.ErrnoException).code === \"EPERM\";\n }\n}\n\n/**\n * Kill a process and everything it started.\n * - Windows: `taskkill /T /F /PID <pid>` (walks the parent-pid tree).\n * - POSIX: signal the process group (children are spawned as group leaders), then the pid.\n * `SIGTERM` first; `SIGKILL` after `graceMs` if anything is still alive.\n */\nexport async function killTree(pid: number, graceMs = 2_000): Promise<void> {\n if (!isAlive(pid)) return;\n if (isWindows) {\n await exec(\"taskkill\", [\"/T\", \"/F\", \"/PID\", String(pid)]).catch(() => undefined);\n return;\n }\n const descendants = await listDescendants(pid).catch(() => [] as number[]);\n signalPosix(pid, descendants, \"SIGTERM\");\n const deadline = Date.now() + graceMs;\n while (Date.now() < deadline) {\n if (![pid, ...descendants].some(isAlive)) return;\n await new Promise((r) => setTimeout(r, 50));\n }\n signalPosix(pid, descendants, \"SIGKILL\");\n}\n\nfunction signalPosix(pid: number, descendants: number[], signal: NodeJS.Signals): void {\n for (const target of [-pid, pid, ...descendants]) {\n try {\n process.kill(target, signal);\n } catch {\n // gone, or not a group leader\n }\n }\n}\n\n/** Parse `pid ppid` lines into a parent -> children map. */\nexport function parseProcessTable(output: string): Map<number, number[]> {\n const children = new Map<number, number[]>();\n for (const line of output.split(/\\r?\\n/)) {\n const match = /^\\s*(\\d+)\\s+(\\d+)\\s*$/.exec(line);\n if (!match) continue;\n const pid = Number(match[1]);\n const ppid = Number(match[2]);\n if (pid === ppid) continue;\n const list = children.get(ppid) ?? [];\n list.push(pid);\n children.set(ppid, list);\n }\n return children;\n}\n\nasync function processTable(): Promise<Map<number, number[]>> {\n const output = isWindows\n ? await exec(\"powershell.exe\", [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n 'Get-CimInstance Win32_Process | ForEach-Object { \"$($_.ProcessId) $($_.ParentProcessId)\" }',\n ])\n : await exec(\"ps\", [\"-A\", \"-o\", \"pid=,ppid=\"]);\n return parseProcessTable(output);\n}\n\n/** All descendants of `rootPid` (children, grandchildren, ...), breadth first. */\nexport async function listDescendants(rootPid: number): Promise<number[]> {\n const table = await processTable();\n const out: number[] = [];\n const seen = new Set<number>([rootPid]);\n const queue = [rootPid];\n while (queue.length > 0) {\n const pid = queue.shift() as number;\n for (const child of table.get(pid) ?? []) {\n if (seen.has(child)) continue;\n seen.add(child);\n out.push(child);\n queue.push(child);\n }\n }\n return out;\n}\n","import { spawn } from \"node:child_process\";\nimport { CommandError } from \"../errors\";\nimport { childEnv } from \"../process/env\";\nimport { killTree } from \"../process/tree\";\n\nexport interface GitOptions {\n /** Extra environment (e.g. `GIT_INDEX_FILE`). */\n env?: Record<string, string>;\n /** Written to stdin. */\n input?: string | Buffer;\n /** Default 60s. */\n timeoutMs?: number;\n /** Exit codes that are not errors (e.g. `[0, 1]` for `diff --quiet`). */\n okCodes?: number[];\n}\n\nexport interface GitResult {\n stdout: Buffer;\n stderr: string;\n code: number;\n}\n\n/**\n * Run `git` non-interactively: no terminal prompts, no pager, no editor, stable output.\n * Throws `CommandError(\"git_failed\")` with stderr for unexpected exit codes.\n */\nexport function git(cwd: string, args: string[], opts: GitOptions = {}): Promise<GitResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(\"git\", [\"-c\", \"core.quotepath=off\", ...args], {\n cwd,\n windowsHide: true,\n env: childEnv({\n GIT_TERMINAL_PROMPT: \"0\",\n GIT_PAGER: \"cat\",\n GIT_EDITOR: \"true\",\n LC_ALL: \"C\",\n ...opts.env,\n }),\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n const out: Buffer[] = [];\n const err: Buffer[] = [];\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n if (child.pid !== undefined) void killTree(child.pid, 200);\n }, opts.timeoutMs ?? 60_000);\n child.stdout.on(\"data\", (d: Buffer) => out.push(d));\n child.stderr.on(\"data\", (d: Buffer) => err.push(d));\n child.stdin.on(\"error\", () => undefined);\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n reject(new CommandError(\"git_unavailable\", `Could not run git: ${error.message}`));\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n const stderr = Buffer.concat(err).toString(\"utf8\").trim();\n const exit = code ?? -1;\n if (timedOut) {\n reject(new CommandError(\"git_timeout\", `git ${args[0]} timed out`));\n } else if (!(opts.okCodes ?? [0]).includes(exit)) {\n reject(\n new CommandError(\n \"git_failed\",\n `git ${args[0]} failed (${exit}): ${stderr || \"no output\"}`,\n ),\n );\n } else {\n resolve({ stdout: Buffer.concat(out), stderr, code: exit });\n }\n });\n if (opts.input !== undefined) child.stdin.end(opts.input);\n else child.stdin.end();\n });\n}\n\n/** `git ...` and return trimmed stdout as text. */\nexport async function gitText(cwd: string, args: string[], opts?: GitOptions): Promise<string> {\n return (await git(cwd, args, opts)).stdout.toString(\"utf8\").trim();\n}\n\n/** `git ...` returning true on exit 0, false on any failure. */\nexport async function gitOk(cwd: string, args: string[]): Promise<boolean> {\n try {\n await git(cwd, args);\n return true;\n } catch {\n return false;\n }\n}\n\n/** True when `cwd` is inside a git work tree. */\nexport function isWorkTree(cwd: string): Promise<boolean> {\n return gitOk(cwd, [\"rev-parse\", \"--is-inside-work-tree\"]);\n}\n\n/** Split NUL-separated output, dropping the trailing empty field. */\nexport function splitNul(buf: Buffer | string): string[] {\n const parts = buf.toString().split(\"\\0\");\n if (parts.at(-1) === \"\") parts.pop();\n return parts;\n}\n","import type { DiffFileStat } from \"@codeden/contracts\";\nimport { git, splitNul } from \"./exec\";\n\nconst STATUS: Record<string, DiffFileStat[\"status\"]> = {\n A: \"added\",\n M: \"modified\",\n D: \"deleted\",\n R: \"renamed\",\n C: \"copied\",\n T: \"type_changed\",\n};\n\ninterface NameStatus {\n status: DiffFileStat[\"status\"];\n path: string;\n oldPath?: string;\n}\n\n/** Parse `git diff --name-status -z` output. */\nexport function parseNameStatus(out: Buffer | string): NameStatus[] {\n const fields = splitNul(out);\n const result: NameStatus[] = [];\n for (let i = 0; i < fields.length; ) {\n const code = fields[i++] ?? \"\";\n const status = STATUS[code[0] ?? \"\"] ?? \"modified\";\n if (status === \"renamed\" || status === \"copied\") {\n const oldPath = fields[i++] ?? \"\";\n const path = fields[i++] ?? \"\";\n result.push({ status, path, oldPath });\n } else {\n result.push({ status, path: fields[i++] ?? \"\" });\n }\n }\n return result;\n}\n\ninterface NumStat {\n path: string;\n additions: number;\n deletions: number;\n binary: boolean;\n}\n\n/** Parse `git diff --numstat -z` output (renames use `\\0old\\0new` after an empty path). */\nexport function parseNumStat(out: Buffer | string): NumStat[] {\n const fields = splitNul(out);\n const result: NumStat[] = [];\n for (let i = 0; i < fields.length; ) {\n const head = fields[i++] ?? \"\";\n const [add = \"0\", del = \"0\", inlinePath = \"\"] = head.split(\"\\t\");\n let path = inlinePath;\n if (path === \"\") {\n i++; // old path\n path = fields[i++] ?? \"\";\n }\n const binary = add === \"-\" && del === \"-\";\n result.push({\n path,\n additions: binary ? 0 : Number(add),\n deletions: binary ? 0 : Number(del),\n binary,\n });\n }\n return result;\n}\n\nconst DIFF_FLAGS = [\"--no-color\", \"--no-ext-diff\", \"-M\", \"--full-index\"];\n\n/**\n * Unified diff and per-file stats between two tree-ish objects. Never reads or writes the\n * index or working tree.\n */\nexport async function diffTrees(\n cwd: string,\n from: string,\n to: string,\n paths: string[] = [],\n): Promise<{ diff: string; files: DiffFileStat[] }> {\n const spec = paths.length > 0 ? [\"--\", ...paths] : [];\n const [patch, names, nums] = await Promise.all([\n git(cwd, [\"diff\", ...DIFF_FLAGS, from, to, ...spec], { timeoutMs: 120_000 }),\n git(cwd, [\"diff\", \"--name-status\", \"-z\", \"-M\", from, to, ...spec]),\n git(cwd, [\"diff\", \"--numstat\", \"-z\", \"-M\", from, to, ...spec]),\n ]);\n const stats = new Map(parseNumStat(nums.stdout).map((s) => [s.path, s]));\n const files = parseNameStatus(names.stdout).map((entry): DiffFileStat => {\n const stat = stats.get(entry.path);\n return {\n path: entry.path,\n ...(entry.oldPath ? { oldPath: entry.oldPath } : {}),\n status: entry.status,\n additions: stat?.additions ?? 0,\n deletions: stat?.deletions ?? 0,\n binary: stat?.binary ?? false,\n };\n });\n return { diff: patch.stdout.toString(\"utf8\"), files };\n}\n","import { randomBytes } from \"node:crypto\";\nimport { copyFile, rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport type { DiffFileStat } from \"@codeden/contracts\";\nimport { CommandError } from \"../errors\";\nimport { diffTrees, parseNameStatus } from \"./diff\";\nimport { git, gitText } from \"./exec\";\n\n/** Root of all checkpoint refs. */\nexport const CHECKPOINT_ROOT = \"refs/codeden/checkpoints\";\n\nconst IDENTITY = {\n GIT_AUTHOR_NAME: \"CodeDen\",\n GIT_AUTHOR_EMAIL: \"codeden@localhost\",\n GIT_COMMITTER_NAME: \"CodeDen\",\n GIT_COMMITTER_EMAIL: \"codeden@localhost\",\n};\n\n/** A session id made safe for use as one ref path component. */\nexport function refComponent(sessionId: string): string {\n const safe = sessionId.replace(/[^A-Za-z0-9_-]/g, \"_\");\n return safe.length > 0 ? safe : \"_\";\n}\n\nexport function checkpointRef(sessionId: string, index: number): string {\n return `${CHECKPOINT_ROOT}/${refComponent(sessionId)}/${index}`;\n}\n\nexport interface CheckpointInfo {\n index: number;\n ref: string;\n commit: string;\n createdAt: string;\n}\n\n/** Repository top level of `cwd`, as a native absolute path. */\nexport async function topLevel(cwd: string): Promise<string> {\n return resolve(await gitText(cwd, [\"rev-parse\", \"--show-toplevel\"]));\n}\n\n/**\n * Write the full working tree (tracked + untracked, minus ignored files) as a tree object\n * using a temporary index seeded from a copy of the real one (for its stat cache). The\n * user's index, HEAD and branch are never modified.\n */\nexport async function snapshotTree(cwd: string): Promise<string> {\n const top = await topLevel(cwd);\n const realIndex = await gitText(top, [\n \"rev-parse\",\n \"--path-format=absolute\",\n \"--git-path\",\n \"index\",\n ]);\n const tmp = join(tmpdir(), `codeden-index-${randomBytes(8).toString(\"hex\")}`);\n try {\n await copyFile(realIndex, tmp).catch(() => undefined); // no index yet in a fresh repo\n const env = { GIT_INDEX_FILE: tmp };\n await git(top, [\"add\", \"-A\", \"--\", \".\"], { env, timeoutMs: 10 * 60_000 });\n return await gitText(top, [\"write-tree\"], { env });\n } finally {\n await rm(tmp, { force: true });\n await rm(`${tmp}.lock`, { force: true });\n }\n}\n\n/** Resolve a ref to a commit id, or undefined when it doesn't exist. */\nasync function resolveCommit(cwd: string, ref: string): Promise<string | undefined> {\n try {\n return await gitText(cwd, [\"rev-parse\", \"--verify\", \"--quiet\", `${ref}^{commit}`]);\n } catch {\n return undefined;\n }\n}\n\n/** Existing checkpoints of a session, ordered by index. */\nexport async function listCheckpoints(cwd: string, sessionId: string): Promise<CheckpointInfo[]> {\n const prefix = `${CHECKPOINT_ROOT}/${refComponent(sessionId)}/`;\n const out = await git(cwd, [\n \"for-each-ref\",\n \"--format=%(refname)%00%(objectname)%00%(creatordate:iso-strict)\",\n prefix,\n ]);\n const result: CheckpointInfo[] = [];\n for (const line of out.stdout.toString(\"utf8\").split(\"\\n\")) {\n if (!line) continue;\n const [ref = \"\", commit = \"\", date = \"\"] = line.split(\"\\0\");\n const index = Number(ref.slice(prefix.length));\n if (!Number.isInteger(index) || index < 0) continue;\n result.push({ index, ref, commit, createdAt: new Date(date).toISOString() });\n }\n return result.sort((a, b) => a.index - b.index);\n}\n\n/** Next free checkpoint index for a session (0 when none exist). */\nexport async function nextCheckpointIndex(cwd: string, sessionId: string): Promise<number> {\n const existing = await listCheckpoints(cwd, sessionId);\n return (existing.at(-1)?.index ?? -1) + 1;\n}\n\n/**\n * Snapshot the working tree into `refs/codeden/checkpoints/<session>/<index>` (§9):\n * temporary index -> `write-tree` -> `commit-tree` -> `update-ref`. The parent is the\n * previous checkpoint (or HEAD for the first), so `git log <ref>` walks the turns.\n */\nexport async function createCheckpoint(\n cwd: string,\n sessionId: string,\n index: number,\n turnId?: string,\n): Promise<CheckpointInfo> {\n const tree = await snapshotTree(cwd);\n const parent =\n (index > 0 ? await resolveCommit(cwd, checkpointRef(sessionId, index - 1)) : undefined) ??\n (await resolveCommit(cwd, \"HEAD\"));\n const message = [\n `CodeDen checkpoint ${index}`,\n \"\",\n `Session: ${sessionId}`,\n ...(turnId ? [`Turn: ${turnId}`] : []),\n ].join(\"\\n\");\n const commit = await gitText(\n cwd,\n [\"commit-tree\", tree, ...(parent ? [\"-p\", parent] : []), \"-F\", \"-\"],\n { env: IDENTITY, input: `${message}\\n` },\n );\n const ref = checkpointRef(sessionId, index);\n await git(cwd, [\"update-ref\", \"-m\", \"codeden checkpoint\", ref, commit]);\n return { index, ref, commit, createdAt: new Date().toISOString() };\n}\n\nasync function checkpointCommit(cwd: string, sessionId: string, index: number): Promise<string> {\n const commit = await resolveCommit(cwd, checkpointRef(sessionId, index));\n if (!commit) {\n throw new CommandError(\"unknown_checkpoint\", `Checkpoint ${index} of ${sessionId} not found`);\n }\n return commit;\n}\n\n/** Diff checkpoint `from` against checkpoint `to`, or against the current working tree. */\nexport async function diffCheckpoints(\n cwd: string,\n sessionId: string,\n from: number,\n to?: number,\n): Promise<{ diff: string; files: DiffFileStat[] }> {\n const fromCommit = await checkpointCommit(cwd, sessionId, from);\n const target =\n to === undefined ? await snapshotTree(cwd) : await checkpointCommit(cwd, sessionId, to);\n return diffTrees(cwd, fromCommit, target);\n}\n\n/**\n * Make files (all, or those under `paths`) match checkpoint `index`: changed and removed\n * files are written back from the checkpoint through a temporary index\n * (`read-tree` + `checkout-index`), and files that did not exist then are deleted.\n * The user's index and branch are untouched; ignored files are left alone.\n */\nexport async function restoreFiles(\n cwd: string,\n sessionId: string,\n index: number,\n paths?: string[],\n): Promise<{ restored: string[]; deleted: string[] }> {\n const top = await topLevel(cwd);\n const commit = await checkpointCommit(top, sessionId, index);\n const current = await snapshotTree(top);\n const spec = paths && paths.length > 0 ? [\"--\", ...paths] : [];\n const changes = parseNameStatus(\n (\n await git(top, [\"diff\", \"--name-status\", \"-z\", \"--no-renames\", current, commit, ...spec], {\n env: { GIT_LITERAL_PATHSPECS: \"1\" },\n })\n ).stdout,\n );\n const restored = changes.filter((c) => c.status !== \"deleted\").map((c) => c.path);\n const deleted = changes.filter((c) => c.status === \"deleted\").map((c) => c.path);\n\n for (const path of deleted) await rm(join(top, path), { force: true });\n if (restored.length > 0) {\n const tmp = join(tmpdir(), `codeden-index-${randomBytes(8).toString(\"hex\")}`);\n try {\n const env = { GIT_INDEX_FILE: tmp };\n await git(top, [\"read-tree\", commit], { env });\n await git(top, [\"checkout-index\", \"-f\", \"-z\", \"--stdin\"], {\n env,\n input: `${restored.join(\"\\0\")}\\0`,\n });\n } finally {\n await rm(tmp, { force: true });\n }\n }\n return { restored, deleted };\n}\n\n/** Delete all checkpoint refs of a session. */\nexport async function deleteCheckpoints(cwd: string, sessionId: string): Promise<void> {\n const refs = (await listCheckpoints(cwd, sessionId)).map((c) => c.ref);\n if (refs.length === 0) return;\n await git(cwd, [\"update-ref\", \"--stdin\", \"-z\"], {\n input: refs.map((r) => `delete ${r}\\0\\0`).join(\"\"),\n });\n}\n","import type { RunnerCommandOf, RunnerCommandResult } from \"@codeden/contracts\";\nimport { CommandError } from \"../errors\";\nimport { snapshotTree } from \"./checkpoints\";\nimport { diffTrees } from \"./diff\";\nimport { git, gitOk, gitText, splitNul } from \"./exec\";\n\n/** Parse `git status --porcelain=v2 --branch -z`. */\nexport function parseStatus(out: Buffer | string): RunnerCommandResult<\"git.status\"> {\n const fields = splitNul(out);\n let branch: string | null = null;\n let ahead = 0;\n let behind = 0;\n const files: Array<{ path: string; status: string }> = [];\n const xy = (code: string) => code.replace(/\\./g, \" \");\n for (let i = 0; i < fields.length; i++) {\n const line = fields[i] ?? \"\";\n if (line.startsWith(\"# branch.head \")) {\n const head = line.slice(\"# branch.head \".length);\n branch = head === \"(detached)\" ? null : head;\n } else if (line.startsWith(\"# branch.ab \")) {\n const match = /\\+(\\d+) -(\\d+)/.exec(line);\n ahead = Number(match?.[1] ?? 0);\n behind = Number(match?.[2] ?? 0);\n } else if (line.startsWith(\"1 \")) {\n const parts = line.split(\" \");\n files.push({ status: xy(parts[1] ?? \"\"), path: parts.slice(8).join(\" \") });\n } else if (line.startsWith(\"2 \")) {\n const parts = line.split(\" \");\n files.push({ status: xy(parts[1] ?? \"\"), path: parts.slice(9).join(\" \") });\n i++; // original path follows as its own field\n } else if (line.startsWith(\"u \")) {\n const parts = line.split(\" \");\n files.push({ status: xy(parts[1] ?? \"\"), path: parts.slice(10).join(\" \") });\n } else if (line.startsWith(\"? \")) {\n files.push({ status: \"??\", path: line.slice(2) });\n }\n }\n return { branch, ahead, behind, files };\n}\n\nexport async function status(cwd: string): Promise<RunnerCommandResult<\"git.status\">> {\n const out = await git(cwd, [\n \"status\",\n \"--porcelain=v2\",\n \"--branch\",\n \"-z\",\n \"--untracked-files=all\",\n ]);\n return parseStatus(out.stdout);\n}\n\n/** The repository's default branch: `origin/HEAD`, else `main`/`master`, else the current branch. */\nexport async function defaultBranch(cwd: string): Promise<string | null> {\n try {\n const remoteHead = await gitText(cwd, [\n \"symbolic-ref\",\n \"--quiet\",\n \"--short\",\n \"refs/remotes/origin/HEAD\",\n ]);\n if (remoteHead) return remoteHead.replace(/^origin\\//, \"\");\n } catch {\n // no origin/HEAD\n }\n for (const name of [\"main\", \"master\"]) {\n if (await gitOk(cwd, [\"show-ref\", \"--verify\", \"--quiet\", `refs/heads/${name}`])) return name;\n }\n return currentBranch(cwd);\n}\n\nexport async function currentBranch(cwd: string): Promise<string | null> {\n try {\n return (await gitText(cwd, [\"symbolic-ref\", \"--quiet\", \"--short\", \"HEAD\"])) || null;\n } catch {\n return null; // detached\n }\n}\n\nexport async function branches(\n cmd: RunnerCommandOf<\"git.branches\">,\n): Promise<RunnerCommandResult<\"git.branches\">> {\n const refs = cmd.includeRemote ? [\"refs/heads\", \"refs/remotes\"] : [\"refs/heads\"];\n const out = await gitText(cmd.cwd, [\n \"for-each-ref\",\n \"--format=%(refname)%00%(objectname)%00%(upstream:short)\",\n ...refs,\n ]);\n const list: RunnerCommandResult<\"git.branches\">[\"branches\"] = [];\n for (const line of out.split(\"\\n\")) {\n if (!line) continue;\n const [ref = \"\", commit = \"\", upstream = \"\"] = line.split(\"\\0\");\n if (ref.startsWith(\"refs/remotes/\") && ref.endsWith(\"/HEAD\")) continue;\n const remote = ref.startsWith(\"refs/remotes/\");\n const name = ref.replace(remote ? /^refs\\/remotes\\// : /^refs\\/heads\\//, \"\");\n list.push({ name, remote, commit, upstream: upstream || null });\n }\n return {\n current: await currentBranch(cmd.cwd),\n defaultBranch: await defaultBranch(cmd.cwd),\n branches: list,\n };\n}\n\n/** Stage all changes (or `paths`) and commit. Returns null when nothing was staged. */\nexport async function commit(\n cmd: RunnerCommandOf<\"git.commit\">,\n): Promise<RunnerCommandResult<\"git.commit\">> {\n const spec = cmd.paths && cmd.paths.length > 0 ? cmd.paths : [\".\"];\n await git(cmd.cwd, [\"add\", \"-A\", \"--\", ...spec]);\n const staged = await git(cmd.cwd, [\"diff\", \"--cached\", \"--quiet\"], { okCodes: [0, 1] });\n if (staged.code === 0) return { commit: null };\n await git(cmd.cwd, [\"commit\", \"-q\", \"-F\", \"-\"], { input: cmd.message, timeoutMs: 5 * 60_000 });\n return { commit: await gitText(cmd.cwd, [\"rev-parse\", \"HEAD\"]) };\n}\n\nexport async function push(\n cmd: RunnerCommandOf<\"git.push\">,\n): Promise<RunnerCommandResult<\"git.push\">> {\n const remote = cmd.remote ?? \"origin\";\n const current = await currentBranch(cmd.cwd);\n const branch = cmd.branch ?? current;\n if (!branch) throw new CommandError(\"detached_head\", \"Cannot push a detached HEAD\");\n const args = [\"push\"];\n if (cmd.setUpstream !== false) args.push(\"-u\");\n if (cmd.forceWithLease) args.push(\"--force-with-lease\");\n args.push(remote, branch === current ? branch : `HEAD:refs/heads/${branch}`);\n await git(cmd.cwd, args, { timeoutMs: 5 * 60_000 });\n return { remote, branch };\n}\n\n/** `fromRef..toRef`, or `fromRef` against the working tree (incl. untracked files). */\nexport async function diff(\n cmd: RunnerCommandOf<\"git.diff\">,\n): Promise<RunnerCommandResult<\"git.diff\">> {\n const to = cmd.toRef ?? (await snapshotTree(cmd.cwd));\n return diffTrees(cmd.cwd, cmd.fromRef, to);\n}\n","import { execFile } from \"node:child_process\";\nimport { connect } from \"node:net\";\nimport type { RunnerCommandResult } from \"@codeden/contracts\";\nimport { listDescendants } from \"./process/tree\";\n\ntype PortList = RunnerCommandResult<\"ports.list\">[\"ports\"];\n\nexport interface ListeningSocket {\n port: number;\n pid: number;\n /** Bound address, e.g. `127.0.0.1`, `0.0.0.0`, `::`. */\n address: string;\n}\n\nconst LOCAL = new Set([\"127.0.0.1\", \"0.0.0.0\", \"::\", \"::1\", \"*\", \"[::]\", \"[::1]\"]);\n\n/**\n * Parse `netstat -ano` (Windows) listening rows. Matched by the unconnected remote address\n * rather than the state word, which Windows localizes.\n */\nexport function parseNetstat(output: string): ListeningSocket[] {\n const out: ListeningSocket[] = [];\n for (const line of output.split(/\\r?\\n/)) {\n const m = /^\\s*TCP\\s+(\\S+):(\\d+)\\s+(?:0\\.0\\.0\\.0:0|\\[::\\]:0)\\s+\\S+\\s+(\\d+)\\s*$/i.exec(line);\n if (!m) continue;\n out.push({ address: m[1] as string, port: Number(m[2]), pid: Number(m[3]) });\n }\n return out;\n}\n\n/** Parse `lsof -nP -iTCP -sTCP:LISTEN -F pn` field output. */\nexport function parseLsof(output: string): ListeningSocket[] {\n const out: ListeningSocket[] = [];\n let pid = 0;\n for (const line of output.split(\"\\n\")) {\n if (line.startsWith(\"p\")) pid = Number(line.slice(1));\n else if (line.startsWith(\"n\")) {\n const m = /^n(.*):(\\d+)$/.exec(line);\n if (m) out.push({ address: m[1] as string, port: Number(m[2]), pid });\n }\n }\n return out;\n}\n\nfunction exec(file: string, args: string[]): Promise<string> {\n return new Promise((resolve) => {\n // netstat can take several seconds on a busy Windows machine.\n execFile(file, args, { windowsHide: true, timeout: 30_000 }, (error, stdout) =>\n resolve(error && !stdout ? \"\" : stdout),\n );\n });\n}\n\n/** Listening TCP sockets on this machine reachable from localhost. */\nexport async function listeningSockets(): Promise<ListeningSocket[]> {\n const all =\n process.platform === \"win32\"\n ? parseNetstat(await exec(\"netstat\", [\"-ano\"]))\n : parseLsof(await exec(\"lsof\", [\"-nP\", \"-iTCP\", \"-sTCP:LISTEN\", \"-F\", \"pn\"]));\n return all.filter((s) => LOCAL.has(s.address));\n}\n\n/**\n * True when something accepts TCP connections on 127.0.0.1:port. A closed port is refused at\n * once, so the timeout only bounds filtered ports; keep it generous for a busy event loop.\n */\nexport function probePort(port: number, timeoutMs = 2_000): Promise<boolean> {\n return new Promise((resolve) => {\n const socket = connect({ host: \"127.0.0.1\", port });\n const done = (ok: boolean) => {\n socket.destroy();\n resolve(ok);\n };\n socket.setTimeout(timeoutMs, () => done(false));\n socket.once(\"connect\", () => done(true));\n socket.once(\"error\", () => done(false));\n });\n}\n\n/**\n * Dev-server discovery (§12.2): listening localhost ports owned by processes this runner\n * started (terminals, setup scripts, agents and their children), plus any `probe` ports\n * (e.g. the `devServer.port` from `.codeden/project.json`) that accept connections.\n */\nexport async function listPorts(probe: number[] = []): Promise<PortList> {\n const [sockets, descendants] = await Promise.all([\n listeningSockets(),\n listDescendants(process.pid).catch(() => [] as number[]),\n ]);\n const ours = new Set(descendants);\n const byPort = new Map<number, number | null>();\n for (const s of sockets) if (ours.has(s.pid) && !byPort.has(s.port)) byPort.set(s.port, s.pid);\n for (const port of probe) {\n if (byPort.has(port)) continue;\n if (await probePort(port)) {\n byPort.set(port, sockets.find((s) => s.port === port)?.pid ?? null);\n }\n }\n return [...byPort.entries()]\n .sort((a, b) => a[0] - b[0])\n .map(([port, pid]) => ({ port, pid, url: `http://localhost:${port}` }));\n}\n","import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { ProjectConfigFile } from \"@codeden/contracts\";\n\nexport const PROJECT_CONFIG_PATH = \".codeden/project.json\";\n\n/**\n * Read `.codeden/project.json` from a checkout. `null` when the file is missing;\n * `error` is set when it exists but is not valid JSON or fails the schema.\n */\nexport async function readProjectConfig(\n dir: string,\n): Promise<{ config: ProjectConfigFile | null; error?: string }> {\n let raw: string;\n try {\n raw = await readFile(join(dir, PROJECT_CONFIG_PATH), \"utf8\");\n } catch {\n return { config: null };\n }\n try {\n const parsed = ProjectConfigFile.safeParse(JSON.parse(raw));\n if (parsed.success) return { config: parsed.data };\n return { config: null, error: `${PROJECT_CONFIG_PATH}: ${parsed.error.message}` };\n } catch (error) {\n return { config: null, error: `${PROJECT_CONFIG_PATH}: ${(error as Error).message}` };\n }\n}\n","import type { RunnerEvent } from \"@codeden/contracts\";\nimport type { ProcessSupervisor } from \"../process/supervisor\";\n\nexport interface SetupStep {\n command: string;\n exitCode: number | null;\n ok: boolean;\n}\n\nexport interface RunSetupOptions {\n sessionId: string;\n cwd: string;\n commands: string[];\n supervisor: ProcessSupervisor;\n emit: (event: RunnerEvent) => void;\n /** Per-command timeout. Default 30 minutes. */\n timeoutMs?: number;\n /** Flush buffered output at least this often. Default 250ms. */\n flushMs?: number;\n}\n\n/** Max output journaled per command; the rest is dropped with a notice. */\nconst MAX_OUTPUT = 1024 * 1024;\nconst FLUSH_BYTES = 16 * 1024;\n\n/**\n * Run setup commands in order in a worktree, streaming output as `workspace.setup` events\n * (batched, capped per command). Stops at the first failing command.\n */\nexport async function runSetup(opts: RunSetupOptions): Promise<SetupStep[]> {\n const steps: SetupStep[] = [];\n for (const command of opts.commands) {\n const { sessionId, emit } = opts;\n emit({ kind: \"workspace.setup\", sessionId, status: \"running\", command });\n let buffer = \"\";\n let total = 0;\n let truncated = false;\n const flush = () => {\n if (!buffer) return;\n emit({ kind: \"workspace.setup\", sessionId, status: \"running\", command, output: buffer });\n buffer = \"\";\n };\n const timer = setInterval(flush, opts.flushMs ?? 250);\n const result = await opts.supervisor.runShell(command, {\n cwd: opts.cwd,\n timeoutMs: opts.timeoutMs,\n label: `setup: ${command}`,\n onOutput: (chunk) => {\n if (truncated) return;\n if (total + chunk.length > MAX_OUTPUT) {\n buffer += `${chunk.slice(0, MAX_OUTPUT - total)}\\n[output truncated]\\n`;\n truncated = true;\n } else {\n buffer += chunk;\n }\n total += chunk.length;\n if (buffer.length >= FLUSH_BYTES) flush();\n },\n });\n clearInterval(timer);\n flush();\n const ok = result.exitCode === 0 && !result.timedOut;\n emit({\n kind: \"workspace.setup\",\n sessionId,\n status: ok ? \"succeeded\" : \"failed\",\n command,\n ...(result.timedOut ? { output: \"[timed out]\" } : {}),\n });\n steps.push({ command, exitCode: result.exitCode, ok });\n if (!ok) break;\n }\n return steps;\n}\n","import { createHash } from \"node:crypto\";\nimport { existsSync, readdirSync } from \"node:fs\";\nimport { mkdir, rm } from \"node:fs/promises\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport type { RunnerCommandOf, RunnerCommandResult, RunnerEvent } from \"@codeden/contracts\";\nimport { CommandError } from \"../errors\";\nimport { topLevel } from \"../git/checkpoints\";\nimport { git, gitOk, isWorkTree } from \"../git/exec\";\nimport { currentBranch, defaultBranch } from \"../git/ops\";\nimport type { ProcessSupervisor } from \"../process/supervisor\";\nimport { readProjectConfig } from \"./project-config\";\nimport { runSetup, type SetupStep } from \"./setup\";\n\nexport interface WorkspaceContext {\n home: string;\n supervisor: ProcessSupervisor;\n emit: (event: RunnerEvent) => void;\n}\n\n/** Short, path-safe form of a session id (worktree directory and default branch name). */\nexport function sessionShort(sessionId: string): string {\n const cleaned = sessionId.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n if (cleaned.length >= 4) return cleaned.slice(0, 8);\n return createHash(\"sha256\").update(sessionId).digest(\"hex\").slice(0, 8);\n}\n\n/** Project slug from a repo path when the server didn't send one. */\nexport function slugFromPath(repoPath: string): string {\n const slug = basename(resolve(repoPath))\n .toLowerCase()\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 40);\n return slug || \"project\";\n}\n\nfunction branchExists(cwd: string, branch: string): Promise<boolean> {\n return gitOk(cwd, [\"show-ref\", \"--verify\", \"--quiet\", `refs/heads/${branch}`]);\n}\n\nasync function uniqueBranch(cwd: string, wanted: string): Promise<string> {\n if (!(await branchExists(cwd, wanted))) return wanted;\n for (let i = 2; i < 100; i++) {\n const candidate = `${wanted}-${i}`;\n if (!(await branchExists(cwd, candidate))) return candidate;\n }\n throw new CommandError(\"branch_exists\", `No free branch name for ${wanted}`);\n}\n\nasync function resolveBase(\n repo: string,\n cmd: RunnerCommandOf<\"workspace.prepare\">,\n): Promise<string> {\n let fetched = false;\n const hasOrigin = await gitOk(repo, [\"remote\", \"get-url\", \"origin\"]);\n if (cmd.fetch && hasOrigin) {\n fetched = await git(repo, [\"fetch\", \"--prune\", \"origin\"], { timeoutMs: 120_000 }).then(\n () => true,\n () => false,\n );\n }\n if (cmd.baseRef) return cmd.baseRef;\n const def = await defaultBranch(repo);\n if (\n def &&\n fetched &&\n (await gitOk(repo, [\"rev-parse\", \"--verify\", \"--quiet\", `origin/${def}`]))\n ) {\n return `origin/${def}`;\n }\n return def ?? \"HEAD\";\n}\n\nasync function createWorktree(\n cmd: RunnerCommandOf<\"workspace.prepare\">,\n home: string,\n): Promise<{ cwd: string; branch: string | null; created: boolean }> {\n const repo = await topLevel(cmd.repoPath).catch(() => {\n throw new CommandError(\"not_a_repo\", `${cmd.repoPath} is not a git repository`);\n });\n const short = sessionShort(cmd.sessionId);\n const path = resolve(cmd.path ?? join(home, \"wt\", cmd.projectSlug ?? slugFromPath(repo), short));\n if (existsSync(path)) {\n if (await isWorkTree(path)) {\n return { cwd: path, branch: await currentBranch(path), created: false };\n }\n if (readdirSync(path).length > 0) {\n throw new CommandError(\"path_exists\", `${path} exists and is not a worktree`);\n }\n }\n await mkdir(dirname(path), { recursive: true });\n const base = await resolveBase(repo, cmd);\n if (cmd.branch && (await branchExists(repo, cmd.branch))) {\n await git(repo, [\"worktree\", \"add\", path, cmd.branch], { timeoutMs: 10 * 60_000 });\n return { cwd: path, branch: cmd.branch, created: true };\n }\n const branch = cmd.branch ?? (await uniqueBranch(repo, `codeden/${short}`));\n await git(repo, [\"worktree\", \"add\", \"--no-track\", \"-b\", branch, path, base], {\n timeoutMs: 10 * 60_000,\n });\n return { cwd: path, branch, created: true };\n}\n\n/**\n * `workspace.prepare` (§9): resolve the session's working directory (repo root, an existing\n * worktree, or a new worktree under `<home>/wt/<slug>/<short>` on a new branch), then run\n * `.codeden/project.json` setup (new worktrees only) and the explicit setup commands.\n */\nexport async function prepareWorkspace(\n cmd: RunnerCommandOf<\"workspace.prepare\">,\n ctx: WorkspaceContext,\n): Promise<RunnerCommandResult<\"workspace.prepare\">> {\n let target: { cwd: string; branch: string | null; created: boolean };\n switch (cmd.strategy) {\n case \"repo_root\": {\n if (!existsSync(cmd.repoPath))\n throw new CommandError(\"not_found\", `${cmd.repoPath} not found`);\n const isRepo = await isWorkTree(cmd.repoPath);\n const cwd = isRepo ? await topLevel(cmd.repoPath) : resolve(cmd.repoPath);\n target = { cwd, branch: isRepo ? await currentBranch(cwd) : null, created: false };\n break;\n }\n case \"existing\": {\n if (!cmd.path || !existsSync(cmd.path)) {\n throw new CommandError(\"not_found\", `Existing worktree ${cmd.path ?? \"(none)\"} not found`);\n }\n if (!(await isWorkTree(cmd.path))) {\n throw new CommandError(\"not_a_repo\", `${cmd.path} is not a git worktree`);\n }\n target = { cwd: resolve(cmd.path), branch: await currentBranch(cmd.path), created: false };\n break;\n }\n case \"worktree\":\n target = await createWorktree(cmd, ctx.home);\n break;\n }\n\n const { config, error } = await readProjectConfig(target.cwd);\n if (error) {\n ctx.emit({\n kind: \"workspace.setup\",\n sessionId: cmd.sessionId,\n status: \"failed\",\n command: \".codeden/project.json\",\n output: error,\n });\n }\n const commands = [\n ...(target.created && cmd.runProjectSetup !== false ? (config?.setup ?? []) : []),\n ...cmd.setupCommands,\n ];\n let setup: SetupStep[] = [];\n if (commands.length > 0) {\n setup = await runSetup({\n sessionId: cmd.sessionId,\n cwd: target.cwd,\n commands,\n supervisor: ctx.supervisor,\n emit: ctx.emit,\n });\n }\n return { ...target, config, setup };\n}\n\n/** `workspace.remove`: remove a worktree (retrying briefly for Windows file locks). */\nexport async function removeWorkspace(\n cmd: RunnerCommandOf<\"workspace.remove\">,\n): Promise<RunnerCommandResult<\"workspace.remove\">> {\n const path = resolve(cmd.path);\n let removed = false;\n let lastError: unknown;\n for (let attempt = 0; attempt < 5 && !removed; attempt++) {\n try {\n const args = [\"worktree\", \"remove\", ...(cmd.force ? [\"--force\"] : []), path];\n await git(cmd.repoPath, args);\n removed = true;\n } catch (error) {\n lastError = error;\n if (!existsSync(path)) break;\n if (!cmd.force && /modified or untracked|contains/.test(String(error))) break;\n await new Promise((r) => setTimeout(r, 250 * (attempt + 1)));\n }\n }\n if (!removed && existsSync(path) && cmd.force) {\n await rm(path, { recursive: true, force: true, maxRetries: 5, retryDelay: 200 });\n removed = true;\n }\n await git(cmd.repoPath, [\"worktree\", \"prune\"]).catch(() => undefined);\n if (!removed && existsSync(path)) {\n throw lastError instanceof Error\n ? lastError\n : new CommandError(\"remove_failed\", `Could not remove ${path}`);\n }\n if (cmd.deleteBranch) {\n await git(cmd.repoPath, [\"branch\", \"-D\", cmd.deleteBranch]).catch(() => undefined);\n }\n return { removed: removed || !existsSync(path) };\n}\n","import type { RunnerCommand, RunnerCommandResult, RunnerEvent } from \"@codeden/contracts\";\nimport type { ProviderRegistry } from \"@codeden/providers\";\nimport type { BrowserCommandHandlers } from \"./browser\";\nimport { CommandError } from \"./errors\";\nimport {\n createCheckpoint,\n diffCheckpoints,\n listCheckpoints,\n restoreFiles,\n} from \"./git/checkpoints\";\nimport * as gitOps from \"./git/ops\";\nimport type { Journal } from \"./journal\";\nimport { listPorts } from \"./ports\";\nimport type { ProcessSupervisor } from \"./process/supervisor\";\nimport type { TerminalHost } from \"./pty/terminal-host\";\nimport type { SessionHost } from \"./session-host\";\nimport { prepareWorkspace, removeWorkspace } from \"./workspace/worktree\";\n\n/** Everything command handlers need; owned by `startRunner`. */\nexport interface RunnerCore {\n home: string;\n version: string;\n journal: Journal;\n host: SessionHost;\n terminals: TerminalHost;\n supervisor: ProcessSupervisor;\n registry: ProviderRegistry;\n /** `browser.*` handlers over the runner's `BrowserManager` (§12.2). */\n browser: BrowserCommandHandlers;\n startedAt: string;\n emit: (event: RunnerEvent) => void;\n isDraining: () => boolean;\n drain: (opts: { reason: string; timeoutMs?: number; exitWhenDrained?: boolean }) => void;\n /** Point the MCP proxy at an upstream; returns the agent-facing proxy URL. */\n configureMcp: (upstreamUrl: string | null) => string | null;\n /** Exit the process shortly after the current result is sent. */\n shutdown: () => void;\n}\n\ntype AnyResult = RunnerCommandResult<RunnerCommand[\"name\"]>;\n\n/** Execute one server command (§4.3). Throws `CommandError` for expected failures. */\nexport async function executeCommand(core: RunnerCore, command: RunnerCommand): Promise<AnyResult> {\n const { host, journal, registry, terminals } = core;\n switch (command.name) {\n case \"runner.status\":\n return {\n sessions: host.list(),\n ptys: terminals.ids(),\n journal: { lastSeq: journal.lastSeq, unacked: journal.unacked },\n draining: core.isDraining(),\n };\n case \"runner.drain\":\n core.drain(command);\n return {};\n case \"runner.configure\":\n return { mcpProxyUrl: core.configureMcp(command.mcpUpstreamUrl) };\n case \"runner.shutdown\":\n core.shutdown();\n return {};\n case \"provider.detect\": {\n const adapters = command.providerId\n ? registry.list().filter((a) => a.id === command.providerId)\n : registry.list();\n return { statuses: await Promise.all(adapters.map((a) => a.detect())) };\n }\n\n case \"provider.oneShot\": {\n const adapter = registry.get(command.providerId);\n const utility = adapter?.utilityModel?.();\n if (!utility) {\n throw new CommandError(\n \"unsupported\",\n `Provider ${command.providerId} has no utility model`,\n );\n }\n const model = command.model ?? utility.defaultModel;\n const text = await utility.runOneShot({\n prompt: command.prompt,\n system: command.system,\n model,\n timeoutMs: command.timeoutMs,\n });\n return { text, model };\n }\n\n case \"workspace.prepare\":\n if (core.isDraining()) throw new CommandError(\"draining\", \"Runner is draining\");\n return prepareWorkspace(command, {\n home: core.home,\n supervisor: core.supervisor,\n emit: core.emit,\n });\n case \"workspace.remove\":\n await terminals.closeUnder(command.path);\n await core.supervisor.killUnder(command.path);\n return removeWorkspace(command);\n\n case \"session.start\":\n if (core.isDraining()) throw new CommandError(\"draining\", \"Runner is draining\");\n return host.start(command);\n case \"session.send\":\n await host.send(command);\n return {};\n case \"session.steer\":\n await host.steer(command);\n return {};\n case \"session.interrupt\":\n await host.interrupt(command.sessionId);\n return {};\n case \"session.respond\":\n await host.respond(command);\n return {};\n case \"session.configure\":\n await host.configure(command);\n return {};\n case \"session.stop\":\n await host.stop(command.sessionId);\n // The session's browser context (cookies, tabs) ends with the session.\n await core.browser.closeSession(command.sessionId);\n return {};\n\n case \"pty.open\":\n return terminals.open(command);\n case \"pty.input\":\n terminals.input(command.ptyId, command.data);\n return {};\n case \"pty.resize\":\n terminals.resize(command.ptyId, command.cols, command.rows);\n return {};\n case \"pty.attach\":\n return terminals.attach(command.ptyId);\n case \"pty.close\":\n await terminals.close(command.ptyId);\n return {};\n\n case \"git.checkpoint\": {\n const cp = await createCheckpoint(command.cwd, command.sessionId, command.index);\n const { index, ref, commit } = cp;\n core.emit({ kind: \"checkpoint.created\", sessionId: command.sessionId, index, ref, commit });\n return { ref: cp.ref, commit: cp.commit };\n }\n case \"git.status\":\n return gitOps.status(command.cwd);\n case \"git.diff\":\n return gitOps.diff(command);\n case \"git.branches\":\n return gitOps.branches(command);\n case \"git.commit\":\n return gitOps.commit(command);\n case \"git.push\":\n return gitOps.push(command);\n\n case \"checkpoint.list\":\n return { checkpoints: await listCheckpoints(command.cwd, command.sessionId) };\n case \"checkpoint.diff\":\n return diffCheckpoints(command.cwd, command.sessionId, command.from, command.to);\n case \"checkpoint.restoreFiles\":\n return restoreFiles(command.cwd, command.sessionId, command.index, command.paths);\n\n case \"ports.list\":\n return { ports: await listPorts(command.probe) };\n\n default: {\n // Only `browser.*` commands reach here (checked by the type below).\n const browserCommand: Extract<RunnerCommand, { name: `browser.${string}` }> = command;\n return core.browser.execute(browserCommand);\n }\n }\n}\n","import { readFileSync, rmSync } from \"node:fs\";\nimport { RunnerLock } from \"@codeden/contracts\";\nimport { isAlive } from \"./process/tree\";\n\n/** Lock files owned by runners in this process (several embedded runners in tests). */\nconst activeLocks = new Set<string>();\n\nexport function readLock(lockFile: string): RunnerLock | undefined {\n try {\n const parsed = RunnerLock.safeParse(JSON.parse(readFileSync(lockFile, \"utf8\")));\n return parsed.success ? parsed.data : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Liveness check beyond \"the pid exists\": the runner answers `/health` with its token.\n * Guards against pid reuse after a crash left a stale lock file.\n */\nexport async function probeRunner(lock: RunnerLock, timeoutMs = 3_000): Promise<boolean> {\n if (!isAlive(lock.pid)) return false;\n try {\n const res = await fetch(`http://127.0.0.1:${lock.port}/health`, {\n headers: { authorization: `Bearer ${lock.token}` },\n signal: AbortSignal.timeout(timeoutMs),\n });\n return res.ok;\n } catch {\n return false;\n }\n}\n\n/** Throw when another live runner owns this home; claim the lock for this process. */\nexport async function assertSingleInstance(lockFile: string): Promise<void> {\n if (activeLocks.has(lockFile)) throw new Error(\"Another runner is already running for this home\");\n const lock = readLock(lockFile);\n if (lock && lock.pid !== process.pid && (await probeRunner(lock))) {\n throw new Error(`Another runner (pid ${lock.pid}) is already running for this home`);\n }\n activeLocks.add(lockFile);\n}\n\n/** Remove the lock file if it still belongs to this process. */\nexport function removeOwnLock(lockFile: string): void {\n activeLocks.delete(lockFile);\n const current = readLock(lockFile);\n if (current?.pid === process.pid) rmSync(lockFile, { force: true });\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n appendFileSync,\n existsSync,\n mkdirSync,\n readFileSync,\n renameSync,\n writeFileSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { type RunnerEvent, RunnerEventMessage } from \"@codeden/contracts\";\n\ninterface JournalState {\n runnerId: string;\n /** Highest seq ever assigned. */\n lastSeq: number;\n /** Highest seq the server acknowledged. */\n ackedSeq: number;\n}\n\n/**\n * Durable runner event journal (§4.2). Events are appended to `journal.jsonl` with a\n * monotonically increasing seq and kept until the server acks them, so nothing is lost\n * while the server is away. `state.json` holds the stable runner id and seq counters.\n *\n * TODO(M1): batch fsyncs and compact lazily instead of rewriting on every ack.\n */\nexport class Journal {\n private readonly file: string;\n private readonly stateFile: string;\n private state: JournalState;\n private entries: RunnerEventMessage[] = [];\n\n constructor(dir: string) {\n mkdirSync(dir, { recursive: true });\n this.file = join(dir, \"journal.jsonl\");\n this.stateFile = join(dir, \"state.json\");\n this.state = this.loadState();\n this.entries = this.loadEntries().filter((e) => e.seq > this.state.ackedSeq);\n const maxSeq = this.entries.at(-1)?.seq ?? 0;\n this.state.lastSeq = Math.max(this.state.lastSeq, maxSeq);\n }\n\n get runnerId(): string {\n return this.state.runnerId;\n }\n\n get lastSeq(): number {\n return this.state.lastSeq;\n }\n\n get unacked(): number {\n return this.entries.length;\n }\n\n /** Assign the next seq, persist the event, and return the wire message. */\n append(event: RunnerEvent): RunnerEventMessage {\n this.state.lastSeq += 1;\n const msg: RunnerEventMessage = {\n type: \"event\",\n seq: this.state.lastSeq,\n ts: new Date().toISOString(),\n event,\n };\n appendFileSync(this.file, `${JSON.stringify(msg)}\\n`);\n this.entries.push(msg);\n return msg;\n }\n\n /** Drop everything with `seq <= seq` (cumulative ack). */\n ack(seq: number): void {\n if (seq <= this.state.ackedSeq) return;\n this.state.ackedSeq = Math.min(seq, this.state.lastSeq);\n this.entries = this.entries.filter((e) => e.seq > seq);\n this.rewrite();\n }\n\n /** Unacked events after `seq`, oldest first (for replay on resume). */\n after(seq: number): RunnerEventMessage[] {\n return this.entries.filter((e) => e.seq > seq);\n }\n\n private loadState(): JournalState {\n try {\n const raw = JSON.parse(readFileSync(this.stateFile, \"utf8\")) as Partial<JournalState>;\n if (typeof raw.runnerId === \"string\") {\n return { runnerId: raw.runnerId, lastSeq: raw.lastSeq ?? 0, ackedSeq: raw.ackedSeq ?? 0 };\n }\n } catch {\n // first run\n }\n const fresh = { runnerId: randomUUID(), lastSeq: 0, ackedSeq: 0 };\n this.writeState(fresh);\n return fresh;\n }\n\n private loadEntries(): RunnerEventMessage[] {\n if (!existsSync(this.file)) return [];\n const out: RunnerEventMessage[] = [];\n for (const line of readFileSync(this.file, \"utf8\").split(\"\\n\")) {\n if (!line.trim()) continue;\n const parsed = RunnerEventMessage.safeParse(safeJson(line));\n if (parsed.success) out.push(parsed.data); // a torn last line is skipped\n }\n return out.sort((a, b) => a.seq - b.seq);\n }\n\n private rewrite(): void {\n const tmp = `${this.file}.tmp`;\n writeFileSync(tmp, this.entries.map((e) => `${JSON.stringify(e)}\\n`).join(\"\"));\n renameSync(tmp, this.file);\n this.writeState(this.state);\n }\n\n private writeState(state: JournalState): void {\n const tmp = `${this.stateFile}.tmp`;\n writeFileSync(tmp, `${JSON.stringify(state, null, 2)}\\n`);\n renameSync(tmp, this.stateFile);\n }\n}\n\nfunction safeJson(line: string): unknown {\n try {\n return JSON.parse(line);\n } catch {\n return undefined;\n }\n}\n","/**\n * Local MCP proxy (§4.4). Agents always talk to `http://127.0.0.1:<runnerPort>/mcp`; the\n * runner forwards Streamable-HTTP MCP traffic (POST with JSON or SSE responses, GET SSE\n * streams, DELETE to end a session) to the server's `/mcp` with the agent's own\n * session-scoped bearer token, which the server validates.\n *\n * The transport behind the proxy is an `McpUpstream`, so a remote runner can later tunnel\n * over the runner connection instead of plain HTTP without changing the agent-facing side.\n */\n\n/** Something that can answer a forwarded MCP HTTP request. */\nexport interface McpUpstream {\n forward(request: Request): Promise<Response>;\n}\n\n/** Request headers passed through to the upstream. */\nconst REQUEST_HEADERS = [\n \"authorization\",\n \"accept\",\n \"content-type\",\n \"mcp-session-id\",\n \"mcp-protocol-version\",\n \"last-event-id\",\n];\n\n/** Response headers passed back to the agent. */\nconst RESPONSE_HEADERS = [\n \"content-type\",\n \"cache-control\",\n \"mcp-session-id\",\n \"mcp-protocol-version\",\n \"www-authenticate\",\n];\n\nfunction pick(source: Headers, names: string[]): Headers {\n const out = new Headers();\n for (const name of names) {\n const value = source.get(name);\n if (value !== null) out.set(name, value);\n }\n return out;\n}\n\n/** Direct HTTP to the server's MCP endpoint (local runners). */\nexport class HttpMcpUpstream implements McpUpstream {\n constructor(readonly url: string) {}\n\n async forward(request: Request): Promise<Response> {\n const hasBody = request.method !== \"GET\" && request.method !== \"HEAD\";\n const upstream = await fetch(this.url, {\n method: request.method,\n headers: pick(request.headers, REQUEST_HEADERS),\n body: hasBody ? await request.arrayBuffer() : undefined,\n signal: request.signal,\n redirect: \"manual\",\n });\n return new Response(upstream.body, {\n status: upstream.status,\n statusText: upstream.statusText,\n headers: pick(upstream.headers, RESPONSE_HEADERS),\n });\n }\n}\n\nfunction jsonRpcError(status: number, message: string): Response {\n return new Response(\n JSON.stringify({ jsonrpc: \"2.0\", id: null, error: { code: -32000, message } }),\n { status, headers: { \"content-type\": \"application/json\" } },\n );\n}\n\n/**\n * Handle one agent request to `/mcp`. Requires a bearer token (the session's scoped\n * token); the upstream decides whether it is valid.\n */\nexport async function handleMcpRequest(\n request: Request,\n upstream: McpUpstream | undefined,\n): Promise<Response> {\n if (!/^Bearer\\s+\\S+/i.test(request.headers.get(\"authorization\") ?? \"\")) {\n return jsonRpcError(401, \"Missing session token\");\n }\n if (!upstream) return jsonRpcError(503, \"CodeDen MCP endpoint is not configured\");\n try {\n return await upstream.forward(request);\n } catch (error) {\n if (request.signal.aborted) return new Response(null, { status: 499 });\n return jsonRpcError(502, `CodeDen server unreachable: ${(error as Error).message}`);\n }\n}\n","import { relative, resolve } from \"node:path\";\n\n/** True when `child` is `dir` itself or somewhere inside it. */\nexport function isInside(dir: string, child: string): boolean {\n const rel = relative(resolve(dir), resolve(child));\n return rel === \"\" || (!rel.startsWith(\"..\") && !/^[a-zA-Z]:/.test(rel));\n}\n","import { type ChildProcess, type SpawnOptions, spawn } from \"node:child_process\";\nimport { isInside } from \"../util/paths\";\nimport { childEnv } from \"./env\";\nimport { isAlive, killTree, listDescendants } from \"./tree\";\n\n/** A process the runner started (or adopted, like a pty shell). */\nexport interface TrackedProcess {\n pid: number;\n label: string;\n cwd: string;\n}\n\nexport interface RunShellOptions {\n cwd: string;\n env?: Record<string, string>;\n /** Kill the process tree after this long. Default 30 minutes. */\n timeoutMs?: number;\n onOutput?: (chunk: string) => void;\n label?: string;\n}\n\nexport interface RunShellResult {\n exitCode: number | null;\n timedOut: boolean;\n}\n\n/**\n * Tracks every child process the runner starts so they can be killed as whole process\n * trees: on stop, when their worktree is removed, and on runner shutdown. On POSIX,\n * children are spawned as process-group leaders so a group signal reaches grandchildren.\n */\nexport class ProcessSupervisor {\n private readonly tracked = new Map<number, TrackedProcess>();\n\n list(): TrackedProcess[] {\n return [...this.tracked.values()];\n }\n\n /** Track a process started elsewhere (pty shells). */\n adopt(proc: TrackedProcess): void {\n this.tracked.set(proc.pid, proc);\n }\n\n release(pid: number): void {\n this.tracked.delete(pid);\n }\n\n /** Spawn a tracked child. It is untracked automatically when it exits. */\n spawn(\n command: string,\n args: string[],\n opts: SpawnOptions & { cwd: string; label?: string },\n ): ChildProcess {\n const child = spawn(command, args, {\n ...opts,\n windowsHide: true,\n detached: process.platform !== \"win32\",\n });\n const pid = child.pid;\n if (pid !== undefined) {\n this.tracked.set(pid, { pid, label: opts.label ?? command, cwd: opts.cwd });\n child.once(\"exit\", () => this.tracked.delete(pid));\n }\n return child;\n }\n\n /** Run a shell command line, streaming combined output. Never rejects for exit codes. */\n runShell(command: string, opts: RunShellOptions): Promise<RunShellResult> {\n return new Promise((resolveResult) => {\n const child = this.spawn(command, [], {\n cwd: opts.cwd,\n shell: true,\n env: { ...childEnv(), ...opts.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n label: opts.label ?? command,\n });\n let timedOut = false;\n const timer = setTimeout(\n () => {\n timedOut = true;\n if (child.pid !== undefined) void killTree(child.pid);\n },\n opts.timeoutMs ?? 30 * 60_000,\n );\n const onData = (data: Buffer) => opts.onOutput?.(data.toString(\"utf8\"));\n child.stdout?.on(\"data\", onData);\n child.stderr?.on(\"data\", onData);\n child.once(\"error\", (error) => {\n clearTimeout(timer);\n opts.onOutput?.(`${error.message}\\n`);\n resolveResult({ exitCode: null, timedOut });\n });\n child.once(\"close\", (code) => {\n clearTimeout(timer);\n resolveResult({ exitCode: code, timedOut });\n });\n });\n }\n\n /** Kill the trees of tracked processes whose cwd is inside `dir` (before removing it). */\n async killUnder(dir: string): Promise<void> {\n const victims = this.list().filter((p) => isInside(dir, p.cwd));\n await Promise.all(victims.map((p) => this.kill(p.pid)));\n }\n\n async kill(pid: number): Promise<void> {\n await killTree(pid);\n if (!isAlive(pid)) this.tracked.delete(pid);\n }\n\n /**\n * Kill every tracked tree. With `sweepDescendants`, also kill any remaining descendant of\n * this process (provider processes started by adapters), so a clean shutdown of the\n * runner process leaves nothing behind. Not used when the runner is embedded (tests).\n */\n async killAll(sweepDescendants = false): Promise<void> {\n await Promise.all(this.list().map((p) => this.kill(p.pid)));\n if (!sweepDescendants) return;\n const rest = await listDescendants(process.pid).catch(() => [] as number[]);\n await Promise.all(rest.map((pid) => killTree(pid, 500)));\n }\n}\n","function countNewlines(text: string): number {\n let n = 0;\n for (let i = text.indexOf(\"\\n\"); i !== -1; i = text.indexOf(\"\\n\", i + 1)) n++;\n return n;\n}\n\n/**\n * Bounded terminal history: keeps at most `maxLines` lines and `maxChars` characters\n * (whichever is hit first), dropping the oldest output. Replayed into a fresh xterm view\n * when a client (re)attaches.\n */\nexport class Scrollback {\n private chunks: string[] = [];\n private chars = 0;\n private lines = 0;\n\n constructor(\n readonly maxLines = 5_000,\n readonly maxChars = 8 * 1024 * 1024,\n ) {}\n\n get size(): { chars: number; lines: number } {\n return { chars: this.chars, lines: this.lines };\n }\n\n append(data: string): void {\n if (!data) return;\n this.chunks.push(data);\n this.chars += data.length;\n this.lines += countNewlines(data);\n this.trim();\n }\n\n toString(): string {\n if (this.chunks.length > 1) this.chunks = [this.chunks.join(\"\")];\n return this.chunks[0] ?? \"\";\n }\n\n private trim(): void {\n // Drop whole chunks while the remainder still fits the limits.\n while (this.chunks.length > 1 && (this.chars > this.maxChars || this.lines > this.maxLines)) {\n const first = this.chunks[0] as string;\n const firstLines = countNewlines(first);\n const charsAfter = this.chars - first.length;\n const linesAfter = this.lines - firstLines;\n if (charsAfter < this.maxChars && linesAfter < this.maxLines) break;\n this.chunks.shift();\n this.chars = charsAfter;\n this.lines = linesAfter;\n }\n if (this.chars <= this.maxChars && this.lines <= this.maxLines) return;\n // Cut inside the oldest chunk.\n let first = this.chunks[0] as string;\n if (this.chars > this.maxChars) {\n const cut = this.chars - this.maxChars;\n this.lines -= countNewlines(first.slice(0, cut));\n first = first.slice(cut);\n this.chars -= cut;\n }\n while (this.lines > this.maxLines) {\n const nl = first.indexOf(\"\\n\");\n if (nl === -1) break;\n first = first.slice(nl + 1);\n this.chars -= nl + 1;\n this.lines -= 1;\n }\n this.chunks[0] = first;\n }\n}\n","import { accessSync, chmodSync, constants, existsSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { dirname, join, resolve } from \"node:path\";\nimport type {\n RunnerCommandOf,\n RunnerCommandResult,\n RunnerEvent,\n RunnerStream,\n} from \"@codeden/contracts\";\nimport type * as NodePty from \"node-pty\";\nimport { CommandError } from \"../errors\";\nimport { childEnv } from \"../process/env\";\nimport type { ProcessSupervisor } from \"../process/supervisor\";\nimport { killTree } from \"../process/tree\";\nimport { isInside } from \"../util/paths\";\nimport { Scrollback } from \"./scrollback\";\n\ntype PtyModule = typeof NodePty;\n\nlet cached: PtyModule | null | undefined;\n\n/** Load node-pty once; `null` when its native module is unavailable on this machine. */\nexport function loadPty(): PtyModule | null {\n if (cached !== undefined) return cached;\n try {\n const require = createRequire(import.meta.url);\n ensureSpawnHelperExecutable(require);\n cached = require(\"node-pty\") as PtyModule;\n } catch {\n cached = null;\n }\n return cached;\n}\n\n/**\n * On macOS and Linux node-pty forks through a small `spawn-helper` binary next to its native\n * module. Package managers do not always keep its executable bit when they extract the\n * prebuilt tarball, and every terminal then fails with \"posix_spawnp failed\". Restore it.\n */\nfunction ensureSpawnHelperExecutable(require: NodeJS.Require): void {\n if (process.platform === \"win32\") return;\n let root: string;\n try {\n root = dirname(require.resolve(\"node-pty/package.json\"));\n } catch {\n return;\n }\n const dirs = [\"build/Release\", \"build/Debug\", `prebuilds/${process.platform}-${process.arch}`];\n for (const dir of dirs) {\n const helper = join(root, dir, \"spawn-helper\");\n if (!existsSync(helper)) continue;\n try {\n accessSync(helper, constants.X_OK);\n } catch {\n try {\n chmodSync(helper, 0o755);\n } catch {\n // read-only install; node-pty reports the spawn failure itself\n }\n }\n }\n}\n\n/** Default interactive shell for this platform. */\nexport function defaultShell(): string {\n if (process.env.CODEDEN_SHELL) return process.env.CODEDEN_SHELL;\n if (process.platform === \"win32\") return \"powershell.exe\";\n return process.env.SHELL || \"/bin/bash\";\n}\n\ninterface Terminal {\n pty: NodePty.IPty;\n cwd: string;\n cols: number;\n rows: number;\n scrollback: Scrollback;\n exited: boolean;\n exitCode: number | null;\n}\n\nexport interface TerminalHostOptions {\n supervisor: ProcessSupervisor;\n emit: (event: RunnerEvent) => void;\n stream: (stream: RunnerStream) => void;\n maxLines?: number;\n maxChars?: number;\n}\n\n/**\n * node-pty terminals owned by the runner (§12.1), so they survive server restarts. Output\n * goes out on the ephemeral stream and into a bounded scrollback replayed on attach;\n * exits are journaled. ConPTY on Windows, forkpty elsewhere.\n */\nexport class TerminalHost {\n private readonly terminals = new Map<string, Terminal>();\n\n constructor(private readonly opts: TerminalHostOptions) {}\n\n get available(): boolean {\n return loadPty() !== null;\n }\n\n ids(): string[] {\n return [...this.terminals.keys()];\n }\n\n open(cmd: RunnerCommandOf<\"pty.open\">): RunnerCommandResult<\"pty.open\"> {\n const ptyModule = loadPty();\n if (!ptyModule) throw new CommandError(\"pty_unavailable\", \"node-pty is not available\");\n if (this.terminals.has(cmd.ptyId)) {\n throw new CommandError(\"pty_exists\", `Terminal ${cmd.ptyId} already exists`);\n }\n if (!existsSync(cmd.cwd)) throw new CommandError(\"not_found\", `${cmd.cwd} not found`);\n const pty = ptyModule.spawn(cmd.shell ?? defaultShell(), cmd.args ?? [], {\n name: \"xterm-256color\",\n cols: cmd.cols,\n rows: cmd.rows,\n cwd: cmd.cwd,\n env: childEnv({ TERM: \"xterm-256color\", COLORTERM: \"truecolor\", ...cmd.env }),\n });\n const term: Terminal = {\n pty,\n cwd: resolve(cmd.cwd),\n cols: cmd.cols,\n rows: cmd.rows,\n scrollback: new Scrollback(this.opts.maxLines, this.opts.maxChars),\n exited: false,\n exitCode: null,\n };\n this.terminals.set(cmd.ptyId, term);\n this.opts.supervisor.adopt({ pid: pty.pid, label: `pty ${cmd.ptyId}`, cwd: term.cwd });\n pty.onData((data) => {\n term.scrollback.append(data);\n this.opts.stream({ kind: \"pty.output\", ptyId: cmd.ptyId, data });\n });\n pty.onExit(({ exitCode }) => {\n term.exited = true;\n term.exitCode = exitCode;\n this.opts.supervisor.release(pty.pid);\n // Closed terminals were killed on purpose; only report exits of live ones.\n if (this.terminals.get(cmd.ptyId) === term) {\n this.opts.emit({ kind: \"pty.exited\", ptyId: cmd.ptyId, exitCode });\n }\n });\n return { pid: pty.pid };\n }\n\n input(ptyId: string, data: string): void {\n const term = this.get(ptyId);\n if (term.exited) throw new CommandError(\"pty_exited\", `Terminal ${ptyId} has exited`);\n term.pty.write(data);\n }\n\n resize(ptyId: string, cols: number, rows: number): void {\n const term = this.get(ptyId);\n term.cols = cols;\n term.rows = rows;\n if (!term.exited) term.pty.resize(cols, rows);\n }\n\n attach(ptyId: string): RunnerCommandResult<\"pty.attach\"> {\n const term = this.get(ptyId);\n return {\n pid: term.pty.pid,\n cols: term.cols,\n rows: term.rows,\n scrollback: term.scrollback.toString(),\n exited: term.exited,\n exitCode: term.exitCode,\n };\n }\n\n /** Kill the terminal's whole process tree and forget it. */\n async close(ptyId: string): Promise<void> {\n const term = this.get(ptyId);\n this.terminals.delete(ptyId);\n if (!term.exited) await killTree(term.pty.pid, 500);\n this.opts.supervisor.release(term.pty.pid);\n try {\n term.pty.kill(); // releases ConPTY handles even after the shell exited\n } catch {\n // already gone\n }\n }\n\n /** Close terminals whose cwd is inside `dir` (before removing a worktree). */\n async closeUnder(dir: string): Promise<void> {\n const ids = [...this.terminals.entries()]\n .filter(([, t]) => isInside(dir, t.cwd))\n .map(([id]) => id);\n await Promise.all(ids.map((id) => this.close(id)));\n }\n\n async closeAll(): Promise<void> {\n await Promise.all(this.ids().map((id) => this.close(id).catch(() => undefined)));\n }\n\n private get(ptyId: string): Terminal {\n const term = this.terminals.get(ptyId);\n if (!term) throw new CommandError(\"unknown_pty\", `Terminal ${ptyId} not found`);\n return term;\n }\n}\n","/** Pixel size of an image, read from its header. */\nexport interface ImageSize {\n width: number;\n height: number;\n}\n\nconst PNG_SIGNATURE = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);\n\n/** Size from a PNG's IHDR chunk; null if the buffer is not a PNG. */\nexport function pngSize(buf: Buffer): ImageSize | null {\n if (buf.length < 24 || !buf.subarray(0, 8).equals(PNG_SIGNATURE)) return null;\n if (buf.toString(\"ascii\", 12, 16) !== \"IHDR\") return null;\n return { width: buf.readUInt32BE(16), height: buf.readUInt32BE(20) };\n}\n\n/** Size from a JPEG's first start-of-frame marker; null if not found. */\nexport function jpegSize(buf: Buffer): ImageSize | null {\n if (buf.length < 4 || buf[0] !== 0xff || buf[1] !== 0xd8) return null;\n let offset = 2;\n while (offset + 9 < buf.length) {\n if (buf[offset] !== 0xff) return null;\n const marker = buf[offset + 1] as number;\n // Fill bytes and standalone markers carry no length.\n if (marker === 0xff) {\n offset += 1;\n continue;\n }\n if (marker === 0xd8 || marker === 0x01 || (marker >= 0xd0 && marker <= 0xd7)) {\n offset += 2;\n continue;\n }\n const length = buf.readUInt16BE(offset + 2);\n // SOF0..SOF15 except DHT (C4), JPG (C8) and DAC (CC).\n if (marker >= 0xc0 && marker <= 0xcf && marker !== 0xc4 && marker !== 0xc8 && marker !== 0xcc) {\n return { height: buf.readUInt16BE(offset + 5), width: buf.readUInt16BE(offset + 7) };\n }\n offset += 2 + length;\n }\n return null;\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, extname, isAbsolute } from \"node:path\";\nimport type { Locator, Page } from \"playwright-core\";\nimport { CommandError } from \"../errors\";\nimport { pngSize } from \"./images\";\nimport type { BrowserSession } from \"./session\";\n\n/** Limits applied to `evaluate` (§12.2 agent tools). */\nexport interface EvaluateGuard {\n /** When false, `evaluate` is refused. Default true. */\n enabled: boolean;\n timeoutMs: number;\n /** The JSON result is cut to this many characters. */\n maxResultChars: number;\n}\n\nexport const DEFAULT_EVALUATE_GUARD: EvaluateGuard = {\n enabled: true,\n timeoutMs: 5_000,\n maxResultChars: 20_000,\n};\n\nconst MAX_SNAPSHOT_CHARS = 200_000;\nconst REF = /^(f\\d+)?e\\d+$/;\n\nexport interface SnapshotResult {\n tabId: string;\n url: string;\n title: string;\n snapshot: string;\n truncated: boolean;\n}\n\n/**\n * Accessibility snapshot of a tab in YAML, with `[ref=eN]` element refs that stay stable\n * for unchanged elements across snapshots. Refs resolve against the latest snapshot.\n */\nexport async function snapshot(session: BrowserSession, tabId?: string): Promise<SnapshotResult> {\n const page = session.page(tabId);\n const text = await page.ariaSnapshot({ mode: \"ai\" });\n const truncated = text.length > MAX_SNAPSHOT_CHARS;\n return {\n tabId: session.tabId(tabId),\n url: page.url(),\n title: await page.title(),\n snapshot: truncated ? `${text.slice(0, MAX_SNAPSHOT_CHARS)}\\n# ... truncated` : text,\n truncated,\n };\n}\n\n/**\n * Run an action on the element behind a snapshot ref. Fails fast when the ref is not in the\n * latest snapshot instead of waiting for the action timeout.\n */\nasync function withRef<T>(\n page: Page,\n ref: string,\n action: (locator: Locator) => Promise<T>,\n): Promise<T> {\n if (!REF.test(ref)) throw new CommandError(\"invalid_ref\", `Not an element ref: ${ref}`);\n const locator = page.getByRef(ref);\n try {\n if ((await locator.count()) === 0) throw new Error(\"no such element\");\n return await action(locator);\n } catch (error) {\n const message = error instanceof Error ? error.message.split(\"\\n\")[0] : String(error);\n throw new CommandError(\n \"action_failed\",\n `Action on ${ref} failed: ${message}. Take a new snapshot if the page changed.`,\n );\n }\n}\n\nexport async function click(\n session: BrowserSession,\n ref: string,\n opts: { tabId?: string; button?: \"left\" | \"middle\" | \"right\"; doubleClick?: boolean } = {},\n): Promise<void> {\n const options = opts.button ? { button: opts.button } : {};\n await withRef(session.page(opts.tabId), ref, (locator) =>\n opts.doubleClick ? locator.dblclick(options) : locator.click(options),\n );\n}\n\n/** Replace the value of an editable element; `submit` presses Enter afterwards. */\nexport async function type(\n session: BrowserSession,\n ref: string,\n text: string,\n opts: { tabId?: string; submit?: boolean } = {},\n): Promise<void> {\n await withRef(session.page(opts.tabId), ref, async (locator) => {\n await locator.fill(text);\n if (opts.submit) await locator.press(\"Enter\");\n });\n}\n\n/** Press a key or chord (`Enter`, `Control+A`) on whatever has focus. */\nexport async function press(session: BrowserSession, key: string, tabId?: string): Promise<void> {\n try {\n await session.page(tabId).keyboard.press(key);\n } catch (error) {\n throw new CommandError(\"action_failed\", `Could not press ${key}: ${String(error)}`);\n }\n}\n\nexport interface ScreenshotResult {\n path: string;\n width: number;\n height: number;\n bytes: number;\n}\n\n/** PNG of the viewport, the full page, or one element (`ref`), written to an absolute path. */\nexport async function screenshot(\n session: BrowserSession,\n path: string,\n opts: { tabId?: string; fullPage?: boolean; ref?: string } = {},\n): Promise<ScreenshotResult> {\n if (!isAbsolute(path)) throw new CommandError(\"invalid_path\", \"Screenshot path must be absolute\");\n if (extname(path).toLowerCase() !== \".png\") {\n throw new CommandError(\"invalid_path\", \"Screenshot path must end in .png\");\n }\n const page = session.page(opts.tabId);\n const ref = opts.ref;\n const buffer = ref\n ? await withRef(page, ref, (locator) => locator.screenshot({ type: \"png\" }))\n : await page.screenshot({ type: \"png\", fullPage: opts.fullPage ?? false });\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, buffer);\n const size = pngSize(buffer);\n if (!size) throw new CommandError(\"action_failed\", \"Screenshot is not a valid PNG\");\n return { path, ...size, bytes: buffer.length };\n}\n\n/**\n * Evaluate a JS expression (or function source, which is called) in the tab's page.\n * Guarded: can be disabled, times out, and the JSON result is size-capped.\n */\nexport async function evaluate(\n session: BrowserSession,\n expression: string,\n guard: EvaluateGuard,\n tabId?: string,\n): Promise<{ json: string; truncated: boolean }> {\n if (!guard.enabled) throw new CommandError(\"forbidden\", \"evaluate is disabled for this runner\");\n const page = session.page(tabId);\n let timer: NodeJS.Timeout | undefined;\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () => reject(new CommandError(\"timeout\", `evaluate timed out after ${guard.timeoutMs}ms`)),\n guard.timeoutMs,\n );\n });\n try {\n const value: unknown = await Promise.race([evaluateValue(page, expression), timeout]);\n const json = JSON.stringify(value === undefined ? null : value) ?? \"null\";\n const truncated = json.length > guard.maxResultChars;\n return { json: truncated ? json.slice(0, guard.maxResultChars) : json, truncated };\n } catch (error) {\n if (error instanceof CommandError) throw error;\n const message = error instanceof Error ? error.message.split(\"\\n\")[0] : String(error);\n throw new CommandError(\"evaluate_failed\", message ?? \"evaluate failed\");\n } finally {\n clearTimeout(timer);\n }\n}\n\n/** Evaluate an expression; when it yields a function (`() => ...`), call it. CSP-safe. */\nasync function evaluateValue(page: Page, expression: string): Promise<unknown> {\n const handle = await page.evaluateHandle(expression);\n try {\n return await handle.evaluate((v: unknown) => (typeof v === \"function\" ? v() : v));\n } finally {\n await handle.dispose().catch(() => undefined);\n }\n}\n\nexport interface WaitOptions {\n tabId?: string;\n selector?: string;\n text?: string;\n networkIdle?: boolean;\n timeoutMs?: number;\n}\n\n/** Wait for exactly one condition; resolves `false` on timeout instead of throwing. */\nexport async function wait(session: BrowserSession, opts: WaitOptions): Promise<boolean> {\n const conditions = [opts.selector, opts.text, opts.networkIdle ? true : undefined];\n if (conditions.filter((c) => c !== undefined).length !== 1) {\n throw new CommandError(\"invalid_wait\", \"Give exactly one of selector, text or networkIdle\");\n }\n const page = session.page(opts.tabId);\n const timeout = opts.timeoutMs ?? session.timeoutMs;\n try {\n if (opts.selector) await page.locator(opts.selector).first().waitFor({ timeout });\n else if (opts.text) await page.getByText(opts.text).first().waitFor({ timeout });\n else await page.waitForLoadState(\"networkidle\", { timeout });\n return true;\n } catch (error) {\n if (error instanceof Error && error.name === \"TimeoutError\") return false;\n throw new CommandError(\"action_failed\", error instanceof Error ? error.message : String(error));\n }\n}\n","import type {\n RunnerCommand,\n RunnerCommandName,\n RunnerCommandOf,\n RunnerCommandResult,\n} from \"@codeden/contracts\";\nimport * as agent from \"./agent\";\nimport type { BrowserManager } from \"./manager\";\n\nexport type BrowserCommandName = Extract<RunnerCommandName, `browser.${string}`>;\nexport type BrowserCommand = RunnerCommandOf<BrowserCommandName>;\n\ntype Handlers = {\n [N in BrowserCommandName]: (command: RunnerCommandOf<N>) => Promise<RunnerCommandResult<N>>;\n};\n\nexport interface BrowserCommandDeps {\n manager: BrowserManager;\n}\n\n/** True for `browser.*` runner commands. */\nexport function isBrowserCommand(command: RunnerCommand): command is BrowserCommand {\n return command.name.startsWith(\"browser.\");\n}\n\nexport interface BrowserCommandHandlers {\n handlers: Handlers;\n /** Execute any `browser.*` command. */\n execute(command: BrowserCommand): Promise<RunnerCommandResult<BrowserCommandName>>;\n /** Close a session's context if it has one (session stopped). Never throws. */\n closeSession(sessionId: string): Promise<void>;\n}\n\n/**\n * Handlers for the `browser.*` runner commands (§4.3, §12.2). Wire `execute` into the\n * runner's command switch for every command where `isBrowserCommand` is true.\n */\nexport function createBrowserCommandHandlers(deps: BrowserCommandDeps): BrowserCommandHandlers {\n const { manager } = deps;\n const handlers: Handlers = {\n \"browser.open\": async (c) => {\n const session = await manager.open(c.sessionId, c.url);\n return { cdpUrl: manager.cdpUrl, tabs: session.listTabs() };\n },\n \"browser.navigate\": (c) => manager.get(c.sessionId).navigate(c.url, c.tabId),\n \"browser.close\": async (c) => {\n await manager.closeSession(c.sessionId);\n return {};\n },\n \"browser.history\": async (c) => ({\n url: await manager.get(c.sessionId).history(c.action, c.tabId),\n }),\n \"browser.tabs.list\": async (c) => ({ tabs: manager.get(c.sessionId).listTabs() }),\n \"browser.tabs.open\": async (c) => ({ tab: await manager.get(c.sessionId).openTab(c.url) }),\n \"browser.tabs.close\": async (c) => {\n await manager.get(c.sessionId).closeTab(c.tabId);\n return {};\n },\n \"browser.tabs.activate\": async (c) => {\n await manager.get(c.sessionId).activate(c.tabId);\n return {};\n },\n \"browser.viewport\": async (c) => {\n await manager.get(c.sessionId).setViewport({ width: c.width, height: c.height });\n return {};\n },\n \"browser.screencast\": async (c) => {\n const { quality, maxWidth, maxHeight, maxFps } = c;\n const session = manager.get(c.sessionId);\n const viewers = await session.screencast.watch(c.viewerId, c.watching, {\n quality,\n maxWidth,\n maxHeight,\n maxFps,\n });\n return { viewers };\n },\n \"browser.input\": async (c) => {\n await manager.get(c.sessionId).dispatchInput(c.input);\n return {};\n },\n \"browser.devServer\": async (c) => ({\n tab: await manager.openDevServer(c.sessionId, c.port, c.path),\n }),\n \"browser.snapshot\": (c) => agent.snapshot(manager.get(c.sessionId), c.tabId),\n \"browser.click\": async (c) => {\n const opts = { tabId: c.tabId, button: c.button, doubleClick: c.doubleClick };\n await agent.click(manager.get(c.sessionId), c.ref, opts);\n return {};\n },\n \"browser.type\": async (c) => {\n const opts = { tabId: c.tabId, submit: c.submit };\n await agent.type(manager.get(c.sessionId), c.ref, c.text, opts);\n return {};\n },\n \"browser.press\": async (c) => {\n await agent.press(manager.get(c.sessionId), c.key, c.tabId);\n return {};\n },\n \"browser.screenshot\": (c) =>\n agent.screenshot(manager.get(c.sessionId), c.path, {\n tabId: c.tabId,\n fullPage: c.fullPage,\n ref: c.ref,\n }),\n \"browser.logs\": async (c) => {\n const { logs } = manager.get(c.sessionId);\n const kind = c.kind ?? \"all\";\n const query = { tabId: c.tabId, since: c.since, limit: c.limit };\n return {\n console: kind === \"network\" ? [] : logs.consoleEntries(query),\n network: kind === \"console\" ? [] : logs.networkEntries(query),\n };\n },\n \"browser.evaluate\": (c) =>\n agent.evaluate(manager.get(c.sessionId), c.expression, manager.evaluateGuard, c.tabId),\n \"browser.wait\": async (c) => ({ matched: await agent.wait(manager.get(c.sessionId), c) }),\n };\n\n return {\n handlers,\n execute(command) {\n const handler = handlers[command.name] as (c: BrowserCommand) => Promise<never>;\n return handler(command);\n },\n async closeSession(sessionId) {\n if (manager.has(sessionId)) await manager.closeSession(sessionId).catch(() => undefined);\n },\n };\n}\n","import type { BrowserInput, BrowserKeyInput, BrowserMouseInput } from \"@codeden/contracts\";\nimport type { CDPSession } from \"playwright-core\";\n\n/** Page viewport in CSS pixels, the target space for mapped pointer coordinates. */\nexport interface ViewportSize {\n width: number;\n height: number;\n}\n\ntype MouseButton = \"none\" | \"left\" | \"middle\" | \"right\";\n\nconst BUTTON_BITS: Record<MouseButton, number> = { none: 0, left: 1, right: 2, middle: 4 };\n\nconst MOUSE_TYPES = {\n \"mouse.move\": \"mouseMoved\",\n \"mouse.down\": \"mousePressed\",\n \"mouse.up\": \"mouseReleased\",\n \"mouse.wheel\": \"mouseWheel\",\n} as const;\n\n/** Windows virtual key codes Chromium needs for default actions of non-printable keys. */\nconst VIRTUAL_KEYS: Record<string, number> = {\n Backspace: 8,\n Tab: 9,\n Enter: 13,\n Shift: 16,\n Control: 17,\n Alt: 18,\n Pause: 19,\n CapsLock: 20,\n Escape: 27,\n \" \": 32,\n PageUp: 33,\n PageDown: 34,\n End: 35,\n Home: 36,\n ArrowLeft: 37,\n ArrowUp: 38,\n ArrowRight: 39,\n ArrowDown: 40,\n Insert: 45,\n Delete: 46,\n Meta: 91,\n F1: 112,\n F2: 113,\n F3: 114,\n F4: 115,\n F5: 116,\n F6: 117,\n F7: 118,\n F8: 119,\n F9: 120,\n F10: 121,\n F11: 122,\n F12: 123,\n};\n\nconst KEY_TEXT: Record<string, string> = { Enter: \"\\r\", Tab: \"\\t\", \" \": \" \" };\n\n/** Map a point in the displayed frame onto the page viewport (CSS pixels), clamped. */\nexport function mapPoint(\n input: Pick<BrowserMouseInput, \"x\" | \"y\" | \"frameWidth\" | \"frameHeight\">,\n viewport: ViewportSize,\n): { x: number; y: number } {\n const x = (input.x / input.frameWidth) * viewport.width;\n const y = (input.y / input.frameHeight) * viewport.height;\n return {\n x: Math.min(Math.max(x, 0), viewport.width - 1),\n y: Math.min(Math.max(y, 0), viewport.height - 1),\n };\n}\n\n/** Windows virtual key code for a DOM key (letters and digits map to their char code). */\nexport function virtualKeyCode(key: string): number | undefined {\n const known = VIRTUAL_KEYS[key];\n if (known !== undefined) return known;\n if (/^[a-z]$/i.test(key)) return key.toUpperCase().charCodeAt(0);\n if (/^[0-9]$/.test(key)) return key.charCodeAt(0);\n return undefined;\n}\n\n/** CDP `Input.dispatchKeyEvent` parameters for a key input. */\nexport function keyEventParams(input: BrowserKeyInput): Record<string, unknown> {\n const text =\n input.text ?? KEY_TEXT[input.key] ?? (input.key.length === 1 ? input.key : undefined);\n const vk = virtualKeyCode(input.key);\n const base = {\n key: input.key,\n ...(input.code ? { code: input.code } : {}),\n ...(vk !== undefined ? { windowsVirtualKeyCode: vk, nativeVirtualKeyCode: vk } : {}),\n modifiers: input.modifiers ?? 0,\n };\n // Shortcuts (Ctrl/Meta held) must not insert text.\n const typing = text !== undefined && ((input.modifiers ?? 0) & (2 | 4)) === 0;\n switch (input.type) {\n case \"key.down\":\n return typing\n ? { ...base, type: \"keyDown\", text, unmodifiedText: text }\n : { ...base, type: \"rawKeyDown\" };\n case \"key.up\":\n return { ...base, type: \"keyUp\" };\n case \"key.char\":\n return { ...base, type: \"char\", text: text ?? input.key, unmodifiedText: text ?? input.key };\n }\n}\n\n/**\n * Forwards panel input to a tab through CDP `Input.dispatch*`, tracking held mouse buttons\n * so drags report the right `buttons` state.\n */\nexport class InputForwarder {\n private buttons = 0;\n\n /** CDP `Input.dispatchMouseEvent` parameters (exposed for tests). */\n mouseEventParams(input: BrowserMouseInput, viewport: ViewportSize): Record<string, unknown> {\n const { x, y } = mapPoint(input, viewport);\n const button: MouseButton = input.button ?? (input.type === \"mouse.move\" ? \"none\" : \"left\");\n if (input.type === \"mouse.down\") this.buttons |= BUTTON_BITS[button];\n if (input.type === \"mouse.up\") this.buttons &= ~BUTTON_BITS[button];\n const params: Record<string, unknown> = {\n type: MOUSE_TYPES[input.type],\n x,\n y,\n modifiers: input.modifiers ?? 0,\n button: input.type === \"mouse.wheel\" ? \"none\" : button,\n buttons: this.buttons,\n };\n if (input.type === \"mouse.down\" || input.type === \"mouse.up\") {\n params.clickCount = input.clickCount ?? 1;\n }\n if (input.type === \"mouse.wheel\") {\n params.deltaX = input.deltaX ?? 0;\n params.deltaY = input.deltaY ?? 0;\n }\n return params;\n }\n\n async dispatch(cdp: CDPSession, input: BrowserInput, viewport: ViewportSize): Promise<void> {\n switch (input.type) {\n case \"mouse.move\":\n case \"mouse.down\":\n case \"mouse.up\":\n case \"mouse.wheel\":\n await cdp.send(\"Input.dispatchMouseEvent\", this.mouseEventParams(input, viewport) as never);\n return;\n case \"key.down\":\n case \"key.up\":\n case \"key.char\":\n await cdp.send(\"Input.dispatchKeyEvent\", keyEventParams(input) as never);\n return;\n case \"text.insert\":\n await cdp.send(\"Input.insertText\", { text: input.text });\n return;\n }\n }\n}\n","import type { BrowserConsoleEntry, BrowserNetworkEntry } from \"@codeden/contracts\";\nimport type { Page, Request } from \"playwright-core\";\n\nconst MAX_TEXT = 4_000;\n\n/** Fixed-size ring of entries with monotonic ids. */\nclass Ring<T extends { id: number }> {\n private readonly items: T[] = [];\n constructor(private readonly max: number) {}\n\n push(item: T): void {\n this.items.push(item);\n if (this.items.length > this.max) this.items.splice(0, this.items.length - this.max);\n }\n\n query(filter: (item: T) => boolean, since: number | undefined, limit: number): T[] {\n const out = this.items.filter((i) => (since === undefined || i.id > since) && filter(i));\n return out.slice(-limit);\n }\n}\n\nexport interface LogQuery {\n tabId?: string;\n since?: number;\n limit?: number;\n}\n\n/**\n * Bounded console and network logs for one session's tabs. Agents page through them\n * with `since` (the last id they saw).\n */\nexport class BrowserLogs {\n private nextId = 1;\n private readonly console: Ring<BrowserConsoleEntry>;\n private readonly network: Ring<BrowserNetworkEntry>;\n private readonly pending = new WeakMap<Request, { entry: BrowserNetworkEntry; start: number }>();\n\n constructor(maxEntries = 500) {\n this.console = new Ring(maxEntries);\n this.network = new Ring(maxEntries);\n }\n\n /** Start capturing a tab's console messages, page errors and requests. */\n attach(page: Page, tabId: string): void {\n page.on(\"console\", (message) => {\n const location = message.location();\n this.console.push({\n id: this.nextId++,\n tabId,\n level: message.type(),\n text: clip(message.text()),\n ...(location.url ? { url: location.url, line: location.lineNumber } : {}),\n ts: new Date().toISOString(),\n });\n });\n page.on(\"pageerror\", (error) => {\n this.console.push({\n id: this.nextId++,\n tabId,\n level: \"pageerror\",\n text: clip(error.stack ?? error.message),\n ts: new Date().toISOString(),\n });\n });\n page.on(\"request\", (request) => {\n const entry: BrowserNetworkEntry = {\n id: this.nextId++,\n tabId,\n method: request.method(),\n url: clip(request.url()),\n resourceType: request.resourceType(),\n status: null,\n failure: null,\n ts: new Date().toISOString(),\n durationMs: null,\n };\n this.pending.set(request, { entry, start: performance.now() });\n this.network.push(entry);\n });\n page.on(\"response\", (response) => {\n const pending = this.pending.get(response.request());\n if (pending) pending.entry.status = response.status();\n });\n page.on(\"requestfinished\", (request) => this.finish(request, null));\n page.on(\"requestfailed\", (request) =>\n this.finish(request, request.failure()?.errorText ?? \"failed\"),\n );\n }\n\n private finish(request: Request, failure: string | null): void {\n const pending = this.pending.get(request);\n if (!pending) return;\n pending.entry.durationMs = Math.round(performance.now() - pending.start);\n if (failure) {\n pending.entry.failure = failure;\n pending.entry.status = null;\n }\n this.pending.delete(request);\n }\n\n consoleEntries(query: LogQuery = {}): BrowserConsoleEntry[] {\n return this.console.query(byTab(query.tabId), query.since, query.limit ?? 200);\n }\n\n networkEntries(query: LogQuery = {}): BrowserNetworkEntry[] {\n // Copies, so later status updates don't mutate a result already handed out.\n return this.network\n .query(byTab(query.tabId), query.since, query.limit ?? 200)\n .map((e) => ({ ...e }));\n }\n}\n\nfunction byTab(tabId: string | undefined) {\n return (entry: { tabId: string }) => tabId === undefined || entry.tabId === tabId;\n}\n\nfunction clip(text: string): string {\n return text.length > MAX_TEXT ? `${text.slice(0, MAX_TEXT)}…` : text;\n}\n","import type { BrowserFrameMetadata, RunnerStream } from \"@codeden/contracts\";\nimport type { CDPSession } from \"playwright-core\";\nimport { jpegSize } from \"./images\";\n\nexport interface ScreencastSettings {\n /** JPEG quality, 10-100. */\n quality: number;\n maxWidth: number;\n maxHeight: number;\n /** Upper bound on frames per second (acks are delayed to enforce it). */\n maxFps: number;\n}\n\nexport const DEFAULT_SCREENCAST: ScreencastSettings = {\n quality: 60,\n maxWidth: 1280,\n maxHeight: 800,\n maxFps: 15,\n};\n\nexport type FrameStream = Extract<RunnerStream, { kind: \"browser.frame\" }>;\n\ninterface ScreencastFrameEvent {\n data: string;\n sessionId: number;\n metadata: BrowserFrameMetadata;\n}\n\ninterface Target {\n tabId: string;\n cdp: CDPSession;\n onFrame: (event: ScreencastFrameEvent) => void;\n}\n\n/**\n * CDP screencast of a session's active tab (§12.2). Runs only while at least one panel\n * viewer watches; follows the active tab; throttles by delaying frame acks.\n */\nexport class Screencast {\n private readonly viewers = new Set<string>();\n private settings: ScreencastSettings = { ...DEFAULT_SCREENCAST };\n private target: Target | undefined;\n private tab: { tabId: string; cdp: CDPSession } | undefined;\n private lastFrame: FrameStream | undefined;\n private readonly ackTimers = new Set<NodeJS.Timeout>();\n private queue: Promise<void> = Promise.resolve();\n /** Total frames emitted (diagnostics and tests). */\n frames = 0;\n\n constructor(\n private readonly sessionId: string,\n private readonly emit: (frame: FrameStream) => void,\n ) {}\n\n get viewerCount(): number {\n return this.viewers.size;\n }\n\n get running(): boolean {\n return this.target !== undefined;\n }\n\n /** Geometry of the latest frame, for mapping panel input. */\n get metadata(): BrowserFrameMetadata | undefined {\n return this.lastFrame?.metadata;\n }\n\n /** Add or remove a viewer; starts on the first and pauses after the last. */\n watch(\n viewerId: string,\n watching: boolean,\n settings: Partial<ScreencastSettings> = {},\n ): Promise<number> {\n return this.serial(async () => {\n if (watching) {\n const changed = Object.entries(settings).some(\n ([k, v]) => v !== undefined && this.settings[k as keyof ScreencastSettings] !== v,\n );\n this.settings = { ...this.settings, ...definedOnly(settings) };\n this.viewers.add(viewerId);\n if (changed && this.target) await this.stopTarget();\n if (!this.target) await this.startTarget();\n // Chromium only sends frames on change: give the new viewer the current picture.\n else if (this.lastFrame) this.emit(this.lastFrame);\n } else {\n this.viewers.delete(viewerId);\n if (this.viewers.size === 0) await this.stopTarget();\n }\n return this.viewers.size;\n });\n }\n\n /** Follow a (new) active tab; `undefined` when the session has no tabs. */\n setTab(tab: { tabId: string; cdp: CDPSession } | undefined): Promise<void> {\n return this.serial(async () => {\n if (this.tab?.tabId === tab?.tabId && this.tab?.cdp === tab?.cdp) return;\n await this.stopTarget();\n this.tab = tab;\n this.lastFrame = undefined;\n if (this.viewers.size > 0) await this.startTarget();\n });\n }\n\n dispose(): Promise<void> {\n return this.serial(async () => {\n this.viewers.clear();\n await this.stopTarget();\n this.tab = undefined;\n });\n }\n\n /** Run state changes one at a time (tab switches and viewer changes can overlap). */\n private serial<T>(task: () => Promise<T>): Promise<T> {\n const run = this.queue.then(task);\n this.queue = run.then(\n () => undefined,\n () => undefined,\n );\n return run;\n }\n\n private async startTarget(): Promise<void> {\n const tab = this.tab;\n if (!tab) return;\n const { cdp, tabId } = tab;\n const interval = Math.round(1000 / this.settings.maxFps);\n const onFrame = (event: ScreencastFrameEvent) => {\n const ack = () => {\n cdp.send(\"Page.screencastFrameAck\", { sessionId: event.sessionId }).catch(() => undefined);\n };\n if (this.target?.cdp !== cdp) return ack();\n const size = jpegSize(Buffer.from(event.data.slice(0, 64 * 1024), \"base64\")) ?? {\n width: Math.max(1, Math.round(event.metadata.deviceWidth)),\n height: Math.max(1, Math.round(event.metadata.deviceHeight)),\n };\n const frame: FrameStream = {\n kind: \"browser.frame\",\n sessionId: this.sessionId,\n tabId,\n mediaType: \"image/jpeg\",\n data: event.data,\n width: size.width,\n height: size.height,\n metadata: pickMetadata(event.metadata),\n };\n this.lastFrame = frame;\n this.frames++;\n this.emit(frame);\n const timer = setTimeout(() => {\n this.ackTimers.delete(timer);\n ack();\n }, interval);\n this.ackTimers.add(timer);\n };\n cdp.on(\"Page.screencastFrame\", onFrame);\n this.target = { tabId, cdp, onFrame };\n await cdp\n .send(\"Page.startScreencast\", {\n format: \"jpeg\",\n quality: this.settings.quality,\n maxWidth: this.settings.maxWidth,\n maxHeight: this.settings.maxHeight,\n everyNthFrame: 1,\n })\n .catch(() => {\n // The tab closed under us; the session will retarget.\n cdp.off(\"Page.screencastFrame\", onFrame);\n if (this.target?.cdp === cdp) this.target = undefined;\n });\n }\n\n private async stopTarget(): Promise<void> {\n const target = this.target;\n if (!target) return;\n this.target = undefined;\n for (const timer of this.ackTimers) clearTimeout(timer);\n this.ackTimers.clear();\n target.cdp.off(\"Page.screencastFrame\", target.onFrame);\n await target.cdp.send(\"Page.stopScreencast\").catch(() => undefined);\n }\n}\n\nfunction definedOnly(settings: Partial<ScreencastSettings>): Partial<ScreencastSettings> {\n return Object.fromEntries(Object.entries(settings).filter(([, v]) => v !== undefined));\n}\n\nfunction pickMetadata(m: BrowserFrameMetadata): BrowserFrameMetadata {\n return {\n ...(m.timestamp !== undefined ? { timestamp: m.timestamp } : {}),\n deviceWidth: m.deviceWidth,\n deviceHeight: m.deviceHeight,\n pageScaleFactor: m.pageScaleFactor,\n offsetTop: m.offsetTop,\n scrollOffsetX: m.scrollOffsetX,\n scrollOffsetY: m.scrollOffsetY,\n };\n}\n","import { CommandError } from \"../errors\";\n\nconst ALLOWED_SCHEMES = new Set([\"http:\", \"https:\", \"file:\", \"data:\", \"about:\"]);\n\n/**\n * Validate and normalize a URL for navigation. A bare `host[:port][/path]` gets `http://`;\n * browser-internal schemes (`edge://`, `chrome://`, `devtools://`) and `javascript:` are refused.\n */\nexport function normalizeUrl(input: string): string {\n const raw = input.trim();\n if (raw === \"\") throw new CommandError(\"invalid_url\", \"URL is empty\");\n const hasScheme = /^[a-z][a-z0-9+.-]*:/i.test(raw) && !/^[^/:]+:\\d+(\\/|$)/.test(raw);\n const candidate = hasScheme ? raw : `http://${raw}`;\n let url: URL;\n try {\n url = new URL(candidate);\n } catch {\n throw new CommandError(\"invalid_url\", `Not a valid URL: ${input}`);\n }\n if (!ALLOWED_SCHEMES.has(url.protocol)) {\n throw new CommandError(\"invalid_url\", `URL scheme ${url.protocol} is not allowed`);\n }\n return url.href;\n}\n\n/** URL of a local dev server on `port`. */\nexport function devServerUrl(port: number, path = \"/\"): string {\n return `http://localhost:${port}${path.startsWith(\"/\") ? path : `/${path}`}`;\n}\n","import type { BrowserInput, BrowserTab, RunnerStream } from \"@codeden/contracts\";\nimport type { BrowserContext, CDPSession, Page } from \"playwright-core\";\nimport { CommandError } from \"../errors\";\nimport { InputForwarder, type ViewportSize } from \"./input\";\nimport { BrowserLogs } from \"./logs\";\nimport { type FrameStream, Screencast } from \"./screencast\";\nimport { normalizeUrl } from \"./urls\";\n\nexport interface BrowserSessionOptions {\n sessionId: string;\n context: BrowserContext;\n viewport: ViewportSize;\n stream: (data: RunnerStream) => void;\n /** Default timeout for navigation and agent actions. */\n timeoutMs: number;\n}\n\ninterface TabState {\n tabId: string;\n page: Page;\n cdp?: Promise<CDPSession>;\n}\n\n/**\n * One CodeDen session's isolated browser context (§12.2): its tabs, the active tab the\n * panel shows, the screencast, input forwarding and bounded console/network logs.\n */\nexport class BrowserSession {\n readonly sessionId: string;\n readonly context: BrowserContext;\n readonly logs = new BrowserLogs();\n readonly screencast: Screencast;\n private readonly tabs = new Map<string, TabState>();\n private readonly titles = new Map<string, string>();\n private readonly byPage = new WeakMap<Page, TabState>();\n private readonly input = new InputForwarder();\n private readonly stream: (data: RunnerStream) => void;\n private activeTabId: string | undefined;\n private nextTab = 1;\n private viewport: ViewportSize;\n private closed = false;\n private lastPublished = \"\";\n readonly timeoutMs: number;\n\n constructor(opts: BrowserSessionOptions) {\n this.sessionId = opts.sessionId;\n this.context = opts.context;\n this.viewport = opts.viewport;\n this.stream = opts.stream;\n this.timeoutMs = opts.timeoutMs;\n this.context.setDefaultTimeout(opts.timeoutMs);\n this.context.setDefaultNavigationTimeout(opts.timeoutMs);\n this.screencast = new Screencast(opts.sessionId, (frame: FrameStream) => this.stream(frame));\n // Pages opened by the page itself (popups, target=_blank) become tabs too.\n this.context.on(\"page\", (page) => {\n if (!this.byPage.has(page)) this.register(page, false);\n });\n }\n\n get isClosed(): boolean {\n return this.closed;\n }\n\n get viewportSize(): ViewportSize {\n return { ...this.viewport };\n }\n\n listTabs(): BrowserTab[] {\n return [...this.tabs.values()].map(({ tabId, page }) => ({\n tabId,\n url: page.url(),\n title: this.titles.get(tabId) ?? \"\",\n active: tabId === this.activeTabId,\n }));\n }\n\n /** Open a new tab (optionally at `url`) and make it active. */\n async openTab(url?: string): Promise<BrowserTab> {\n this.assertOpen();\n const page = await this.context.newPage();\n const state = this.byPage.get(page) ?? this.register(page, true);\n await this.activate(state.tabId);\n if (url) await this.navigate(url, state.tabId);\n return this.tabInfo(state.tabId);\n }\n\n async closeTab(tabId: string): Promise<void> {\n const state = this.tabState(tabId);\n await state.page.close();\n }\n\n /** Make a tab the one the panel shows and commands target by default. */\n async activate(tabId: string): Promise<void> {\n const state = this.tabState(tabId);\n if (this.activeTabId !== tabId) {\n this.activeTabId = tabId;\n this.publishTabs();\n }\n await state.page.bringToFront().catch(() => undefined);\n await this.screencast.setTab({ tabId, cdp: await this.cdp(state) });\n }\n\n /** The page of `tabId`, or of the active tab. */\n page(tabId?: string): Page {\n return this.tabState(tabId).page;\n }\n\n /** Resolve a tab id (default: the active tab). */\n tabId(tabId?: string): string {\n return this.tabState(tabId).tabId;\n }\n\n async navigate(url: string, tabId?: string): Promise<{ url: string; status: number | null }> {\n const page = this.page(tabId);\n const response = await page.goto(normalizeUrl(url), { waitUntil: \"domcontentloaded\" });\n await this.refreshTitle(page);\n return { url: page.url(), status: response?.status() ?? null };\n }\n\n async history(action: \"back\" | \"forward\" | \"reload\", tabId?: string): Promise<string> {\n const page = this.page(tabId);\n const options = { waitUntil: \"domcontentloaded\" as const };\n if (action === \"back\") await page.goBack(options);\n else if (action === \"forward\") await page.goForward(options);\n else await page.reload(options);\n await this.refreshTitle(page);\n return page.url();\n }\n\n async setViewport(size: ViewportSize): Promise<void> {\n this.viewport = { ...size };\n await Promise.all([...this.tabs.values()].map((t) => t.page.setViewportSize(size)));\n }\n\n /** Forward panel input to the active tab. */\n async dispatchInput(input: BrowserInput): Promise<void> {\n const state = this.tabState();\n const meta = this.screencast.metadata;\n const viewport = meta\n ? { width: meta.deviceWidth, height: meta.deviceHeight }\n : (state.page.viewportSize() ?? this.viewport);\n await this.input.dispatch(await this.cdp(state), input, viewport);\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.closed = true;\n await this.screencast.dispose();\n await this.context.close().catch(() => undefined);\n this.tabs.clear();\n this.activeTabId = undefined;\n }\n\n private register(page: Page, quiet: boolean): TabState {\n const tabId = `t${this.nextTab++}`;\n const state: TabState = { tabId, page };\n this.tabs.set(tabId, state);\n this.byPage.set(page, state);\n this.logs.attach(page, tabId);\n void page.setViewportSize(this.viewport).catch(() => undefined);\n page.on(\"framenavigated\", (frame) => {\n if (frame === page.mainFrame()) void this.refreshTitle(page);\n });\n page.on(\"load\", () => void this.refreshTitle(page));\n page.on(\"close\", () => void this.onClosed(state));\n if (!this.activeTabId) void this.activate(tabId).catch(() => undefined);\n else if (!quiet) this.publishTabs();\n return state;\n }\n\n private async onClosed(state: TabState): Promise<void> {\n this.tabs.delete(state.tabId);\n this.titles.delete(state.tabId);\n if (this.closed) return;\n if (this.activeTabId === state.tabId) {\n this.activeTabId = undefined;\n const next = [...this.tabs.keys()].at(-1);\n if (next) await this.activate(next).catch(() => undefined);\n else await this.screencast.setTab(undefined);\n }\n this.publishTabs();\n }\n\n private async refreshTitle(page: Page): Promise<void> {\n const state = this.byPage.get(page);\n if (!state || page.isClosed()) return;\n this.titles.set(state.tabId, await page.title().catch(() => \"\"));\n this.publishTabs();\n }\n\n private cdp(state: TabState): Promise<CDPSession> {\n state.cdp ??= this.context.newCDPSession(state.page);\n return state.cdp;\n }\n\n private tabInfo(tabId: string): BrowserTab {\n const tab = this.listTabs().find((t) => t.tabId === tabId);\n if (!tab) throw new CommandError(\"not_found\", `No tab ${tabId}`);\n return tab;\n }\n\n private tabState(tabId?: string): TabState {\n this.assertOpen();\n const id = tabId ?? this.activeTabId;\n const state = id ? this.tabs.get(id) : undefined;\n if (!state) {\n throw new CommandError(\n \"not_found\",\n tabId ? `No tab ${tabId}` : \"The session has no open tab\",\n );\n }\n return state;\n }\n\n private assertOpen(): void {\n if (this.closed) throw new CommandError(\"not_found\", \"The browser session is closed\");\n }\n\n private publishTabs(): void {\n if (this.closed) return;\n const tabs = this.listTabs();\n const key = JSON.stringify(tabs);\n if (key === this.lastPublished) return;\n this.lastPublished = key;\n this.stream({ kind: \"browser.tabs\", sessionId: this.sessionId, tabs });\n }\n}\n","import type { BrowserTab, RunnerStream } from \"@codeden/contracts\";\nimport { CommandError } from \"../errors\";\nimport { isAlive, killTree } from \"../process/tree\";\nimport { DEFAULT_EVALUATE_GUARD, type EvaluateGuard } from \"./agent\";\nimport type { ViewportSize } from \"./input\";\nimport { type LaunchedBrowser, type LaunchOptions, launchChromium } from \"./launcher\";\nimport { BrowserSession } from \"./session\";\nimport { devServerUrl } from \"./urls\";\n\nexport interface BrowserManagerOptions extends LaunchOptions {\n /** Ephemeral runner -> server stream (frames, tab updates). */\n stream: (data: RunnerStream) => void;\n /** Viewport of new tabs. Default 1280x800. */\n viewport?: ViewportSize;\n /** Default timeout for navigation and agent actions. Default 30s. */\n timeoutMs?: number;\n evaluate?: Partial<EvaluateGuard>;\n /** Replace the launcher (tests). */\n launch?: (opts: LaunchOptions) => Promise<LaunchedBrowser>;\n}\n\n/**\n * The runner's browser (§12.2): one Chromium launched lazily on first use, one isolated\n * `BrowserContext` per CodeDen session. Agents and the panel drive the same tabs; the CDP\n * endpoint stays on 127.0.0.1.\n */\nexport class BrowserManager {\n private launched: LaunchedBrowser | undefined;\n private launching: Promise<LaunchedBrowser> | undefined;\n private readonly sessions = new Map<string, BrowserSession>();\n private readonly opening = new Map<string, Promise<BrowserSession>>();\n private shuttingDown = false;\n readonly evaluateGuard: EvaluateGuard;\n\n constructor(private readonly opts: BrowserManagerOptions) {\n this.evaluateGuard = { ...DEFAULT_EVALUATE_GUARD, ...opts.evaluate };\n }\n\n /** CDP endpoint of the running browser, or null before the first launch. */\n get cdpUrl(): string | null {\n return this.launched?.cdpUrl ?? null;\n }\n\n /** Browser process id, or null when not running. */\n get pid(): number | null {\n return this.launched?.pid ?? null;\n }\n\n /** Channel that was launched (`msedge`, `chrome`, ...), or null. */\n get channel(): string | null {\n return this.launched?.channel ?? null;\n }\n\n sessionIds(): string[] {\n return [...this.sessions.keys()];\n }\n\n /** Launch the browser if it is not running yet. */\n async ensureBrowser(): Promise<LaunchedBrowser> {\n if (this.shuttingDown) throw new CommandError(\"unavailable\", \"The browser is shutting down\");\n if (this.launched?.browser.isConnected()) return this.launched;\n this.launching ??= (this.opts.launch ?? launchChromium)(this.opts)\n .then((launched) => {\n this.launched = launched;\n launched.browser.on(\"disconnected\", () => this.onDisconnected(launched));\n return launched;\n })\n .finally(() => {\n this.launching = undefined;\n });\n return this.launching;\n }\n\n /** Open (or reuse) a session's context; opens a first tab, at `url` if given. */\n async open(sessionId: string, url?: string): Promise<BrowserSession> {\n const session = await this.ensureSession(sessionId);\n if (session.listTabs().length === 0) await session.openTab(url);\n else if (url) await session.navigate(url);\n return session;\n }\n\n /** The session's browser state; throws `not_found` if `browser.open` was not called. */\n get(sessionId: string): BrowserSession {\n const session = this.sessions.get(sessionId);\n if (!session || session.isClosed) {\n throw new CommandError(\"not_found\", `No browser for session ${sessionId}; open it first`);\n }\n return session;\n }\n\n has(sessionId: string): boolean {\n return this.sessions.get(sessionId)?.isClosed === false;\n }\n\n /** Open a local dev server in a new tab of the session. */\n async openDevServer(sessionId: string, port: number, path = \"/\"): Promise<BrowserTab> {\n const session = await this.ensureSession(sessionId);\n return session.openTab(devServerUrl(port, path));\n }\n\n async closeSession(sessionId: string): Promise<void> {\n const session = this.sessions.get(sessionId);\n this.sessions.delete(sessionId);\n await session?.close();\n }\n\n /** Close every context and the browser, then kill whatever is left of its process tree. */\n async shutdown(): Promise<void> {\n this.shuttingDown = true;\n await this.launching?.catch(() => undefined);\n await Promise.all([...this.sessions.values()].map((s) => s.close()));\n this.sessions.clear();\n const launched = this.launched;\n this.launched = undefined;\n if (!launched) return;\n await Promise.race([\n launched.browser.close().catch(() => undefined),\n new Promise((resolve) => setTimeout(resolve, 5_000)),\n ]);\n if (launched.pid !== null && isAlive(launched.pid)) await killTree(launched.pid);\n }\n\n private async ensureSession(sessionId: string): Promise<BrowserSession> {\n const existing = this.sessions.get(sessionId);\n if (existing && !existing.isClosed) return existing;\n let pending = this.opening.get(sessionId);\n if (!pending) {\n pending = (async () => {\n const { browser } = await this.ensureBrowser();\n const viewport = this.opts.viewport ?? { width: 1280, height: 800 };\n const context = await browser.newContext({ viewport });\n const session = new BrowserSession({\n sessionId,\n context,\n viewport,\n stream: this.opts.stream,\n timeoutMs: this.opts.timeoutMs ?? 30_000,\n });\n this.sessions.set(sessionId, session);\n return session;\n })().finally(() => this.opening.delete(sessionId));\n this.opening.set(sessionId, pending);\n }\n return pending;\n }\n\n private onDisconnected(launched: LaunchedBrowser): void {\n if (this.launched !== launched) return;\n // Crashed or killed: drop state so the next command relaunches.\n this.opts.log?.(\"browser: disconnected\");\n this.launched = undefined;\n for (const session of this.sessions.values()) void session.close();\n this.sessions.clear();\n }\n}\n","import {\n RUNNER_PROTOCOL_VERSION,\n type RunnerToServerMessage,\n type ServerToRunnerMessage,\n ServerToRunnerMessage as ServerToRunnerSchema,\n} from \"@codeden/contracts\";\nimport type { WSContext, WSEvents } from \"hono/ws\";\nimport { executeCommand, type RunnerCore } from \"./commands\";\nimport { CommandError } from \"./errors\";\n\nexport type { RunnerCore };\n\n/**\n * One server connection. Handshake (`hello` -> `welcome` -> `resume`), then commands, acks\n * and journaled events. Only one connection is \"attached\" (receives events) at a time.\n */\nexport class ServerConnection {\n private attached = false;\n\n constructor(\n private readonly ws: WSContext,\n private readonly core: RunnerCore,\n private readonly onAttach: (conn: ServerConnection) => void,\n ) {}\n\n get isAttached(): boolean {\n return this.attached;\n }\n\n /** Deliver a freshly journaled event or stream message if attached. */\n deliver(msg: RunnerToServerMessage): void {\n if (this.attached) this.send(msg);\n }\n\n detach(): void {\n this.attached = false;\n }\n\n close(reason: string): void {\n this.attached = false;\n this.ws.close(1000, reason);\n }\n\n async handle(raw: unknown): Promise<void> {\n const parsed = ServerToRunnerSchema.safeParse(raw);\n if (!parsed.success) return;\n const msg: ServerToRunnerMessage = parsed.data;\n switch (msg.type) {\n case \"hello\":\n if (msg.protocolVersion !== RUNNER_PROTOCOL_VERSION) {\n this.send({\n type: \"reject\",\n reason: \"protocol_mismatch\",\n message: `Runner speaks protocol ${RUNNER_PROTOCOL_VERSION}, server sent ${msg.protocolVersion}`,\n supportedProtocolVersions: [RUNNER_PROTOCOL_VERSION],\n });\n return;\n }\n this.send({\n type: \"welcome\",\n protocolVersion: RUNNER_PROTOCOL_VERSION,\n runnerId: this.core.journal.runnerId,\n runnerVersion: this.core.version,\n pid: process.pid,\n startedAt: this.core.startedAt,\n capabilities: {\n pty: this.core.terminals.available,\n browser: true,\n git: true,\n mcpProxy: true,\n },\n providers: this.core.registry.info(),\n sessions: this.core.host.list(),\n journal: { lastSeq: this.core.journal.lastSeq, unacked: this.core.journal.unacked },\n draining: this.core.isDraining(),\n });\n return;\n case \"resume\":\n // Synchronous replay + attach: nothing can be journaled in between.\n this.core.journal.ack(msg.lastAckedSeq);\n for (const event of this.core.journal.after(msg.lastAckedSeq)) this.send(event);\n this.attached = true;\n this.onAttach(this);\n return;\n case \"ack\":\n this.core.journal.ack(msg.seq);\n return;\n case \"command\":\n try {\n const result = await executeCommand(this.core, msg.command);\n this.send({ type: \"result\", id: msg.id, ok: true, result });\n } catch (error) {\n const code = error instanceof CommandError ? error.code : \"command_failed\";\n const message = error instanceof Error ? error.message : String(error);\n this.send({ type: \"result\", id: msg.id, ok: false, error: { code, message } });\n }\n return;\n case \"ping\":\n this.send({ type: \"pong\", id: msg.id });\n return;\n case \"pong\":\n return;\n }\n }\n\n private send(msg: RunnerToServerMessage): void {\n if (this.ws.readyState === 1) this.ws.send(JSON.stringify(msg));\n }\n}\n\n/** Build `upgradeWebSocket` handlers bound to a connection. */\nexport function connectionHandlers(\n core: RunnerCore,\n register: (conn: ServerConnection) => void,\n unregister: (conn: ServerConnection) => void,\n onAttach: (conn: ServerConnection) => void,\n): WSEvents {\n let conn: ServerConnection | undefined;\n return {\n onOpen: (_event, ws) => {\n conn = new ServerConnection(ws, core, onAttach);\n register(conn);\n },\n onMessage: (event) => {\n if (!conn || typeof event.data !== \"string\") return;\n let raw: unknown;\n try {\n raw = JSON.parse(event.data);\n } catch {\n return;\n }\n void conn.handle(raw);\n },\n onClose: () => {\n if (conn) unregister(conn);\n },\n };\n}\n","import type {\n AgentEvent,\n RunnerCommandOf,\n RunnerEvent,\n RunnerSessionInfo,\n} from \"@codeden/contracts\";\nimport type { ProviderRegistry, ProviderSession } from \"@codeden/providers\";\nimport { CommandError } from \"./errors\";\nimport { createCheckpoint, nextCheckpointIndex } from \"./git/checkpoints\";\nimport { isWorkTree } from \"./git/exec\";\n\nexport { CommandError };\n\ninterface Hosted {\n providerId: string;\n session: ProviderSession;\n state: RunnerSessionInfo[\"state\"];\n rootThreadId: string | undefined;\n cwd: string;\n checkpoints: boolean;\n /** Serializes checkpoint writes for this session. */\n checkpointChain: Promise<void>;\n /** Why the session is closing, reported with its exit event. */\n closeReason?: \"stopped\" | \"runner_exit\";\n /** A running turn was interrupted by a drain: report it as a runner restart. */\n drainInterrupted: boolean;\n /** A root turn was running when the runner started closing the session. */\n turnCutOff: boolean;\n}\n\nexport interface SessionHostOptions {\n log?: (message: string) => void;\n}\n\n/**\n * Owns live provider sessions on this runner and pumps their normalized events into the\n * journal (via `emit`). Sessions outlive server connections. Any number run concurrently.\n * When the cwd is a git work tree, the host writes turn checkpoints (§9): a baseline when\n * the session starts and one after every root-thread turn ends.\n */\nexport class SessionHost {\n private readonly sessions = new Map<string, Hosted>();\n\n constructor(\n private readonly registry: ProviderRegistry,\n private readonly emit: (event: RunnerEvent) => void,\n private readonly opts: SessionHostOptions = {},\n ) {}\n\n list(): RunnerSessionInfo[] {\n return [...this.sessions.entries()].map(([sessionId, h]) => ({\n sessionId,\n providerId: h.providerId,\n state: h.state,\n resumeToken: h.session.resumeToken() ?? null,\n }));\n }\n\n /** Number of sessions with a running turn. */\n get running(): number {\n return [...this.sessions.values()].filter((h) => h.state === \"running\").length;\n }\n\n async start(cmd: RunnerCommandOf<\"session.start\">): Promise<{ resumeToken: string | null }> {\n if (this.sessions.has(cmd.sessionId)) {\n throw new CommandError(\"session_exists\", `Session ${cmd.sessionId} is already running`);\n }\n const adapter = this.registry.get(cmd.providerId);\n if (!adapter) {\n const available = this.registry.list().map((a) => a.id);\n throw new CommandError(\n \"unknown_provider\",\n `Provider ${cmd.providerId} is not available on this runner` +\n (available.length > 0 ? ` (available: ${available.join(\", \")})` : \"\"),\n );\n }\n this.emit({ kind: \"session.process\", sessionId: cmd.sessionId, state: \"starting\" });\n let session: ProviderSession;\n try {\n session = await adapter.openSession(cmd.options);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.emit({\n kind: \"session.process\",\n sessionId: cmd.sessionId,\n state: \"crashed\",\n error: { code: \"open_failed\", message },\n });\n throw new CommandError(\"open_failed\", `Could not open the session: ${message}`);\n }\n const checkpoints = cmd.checkpoints !== false && (await isWorkTree(cmd.options.cwd));\n const hosted: Hosted = {\n providerId: cmd.providerId,\n session,\n state: \"idle\",\n rootThreadId: undefined,\n cwd: cmd.options.cwd,\n checkpoints,\n checkpointChain: Promise.resolve(),\n drainInterrupted: false,\n turnCutOff: false,\n };\n this.sessions.set(cmd.sessionId, hosted);\n if (checkpoints) this.checkpoint(cmd.sessionId, hosted, undefined, true);\n this.emit({ kind: \"session.process\", sessionId: cmd.sessionId, state: \"ready\" });\n void this.pump(cmd.sessionId, hosted);\n if (cmd.input) {\n // The baseline must capture the tree before the first turn touches it.\n await hosted.checkpointChain;\n await session.send(cmd.input);\n }\n return { resumeToken: session.resumeToken() ?? null };\n }\n\n async send(cmd: RunnerCommandOf<\"session.send\">): Promise<void> {\n const hosted = this.get(cmd.sessionId);\n await hosted.checkpointChain;\n await hosted.session.send(cmd.input);\n }\n\n async steer(cmd: RunnerCommandOf<\"session.steer\">): Promise<void> {\n const { session } = this.get(cmd.sessionId);\n if (!session.steer) throw new CommandError(\"unsupported\", \"This provider cannot steer turns\");\n await session.steer(cmd.input);\n }\n\n async interrupt(sessionId: string): Promise<void> {\n await this.get(sessionId).session.interrupt();\n }\n\n /** Model/effort for the next turn, when the provider can change them live. */\n async configure(cmd: RunnerCommandOf<\"session.configure\">): Promise<void> {\n const { session } = this.get(cmd.sessionId);\n if (!session.configure) {\n throw new CommandError(\"unsupported\", \"This provider cannot change model or effort live\");\n }\n const change: { model?: string | null; effort?: typeof cmd.effort } = {};\n if (cmd.model !== undefined) change.model = cmd.model;\n if (cmd.effort !== undefined) change.effort = cmd.effort;\n await session.configure(change);\n }\n\n async respond(cmd: RunnerCommandOf<\"session.respond\">): Promise<void> {\n await this.get(cmd.sessionId).session.respond(cmd.requestId, cmd.response);\n }\n\n async stop(sessionId: string, reason: \"stopped\" | \"runner_exit\" = \"stopped\"): Promise<void> {\n const hosted = this.get(sessionId);\n if (hosted.state === \"running\" && reason === \"runner_exit\") hosted.turnCutOff = true;\n hosted.closeReason ??= reason;\n hosted.state = \"closing\";\n await hosted.session.close();\n await hosted.checkpointChain;\n }\n\n async closeAll(): Promise<void> {\n await Promise.all(\n [...this.sessions.keys()].map((id) => this.stop(id, \"runner_exit\").catch(() => undefined)),\n );\n }\n\n /**\n * Let running turns finish (up to `timeoutMs`), interrupt whatever is still running,\n * and wait for pending checkpoints. Sessions stay open (resumable) until `closeAll`.\n */\n async drain(timeoutMs: number): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n while (this.running > 0 && Date.now() < deadline) await sleep(100);\n const stuck = [...this.sessions.values()].filter((h) => h.state === \"running\");\n for (const h of stuck) h.drainInterrupted = true;\n await Promise.all(stuck.map((h) => h.session.interrupt().catch(() => undefined)));\n const settle = Date.now() + 5_000;\n while (this.running > 0 && Date.now() < settle) await sleep(50);\n await Promise.all([...this.sessions.values()].map((h) => h.checkpointChain));\n }\n\n /** Wait until every pending checkpoint of a session has been written (tests, drain). */\n async settled(sessionId: string): Promise<void> {\n await this.sessions.get(sessionId)?.checkpointChain;\n }\n\n private get(sessionId: string): Hosted {\n const hosted = this.sessions.get(sessionId);\n if (!hosted) throw new CommandError(\"unknown_session\", `Session ${sessionId} is not running`);\n return hosted;\n }\n\n /**\n * Queue a checkpoint. The baseline (index 0) is only written when the session has none\n * yet, so a resumed session continues its numbering.\n */\n private checkpoint(sessionId: string, hosted: Hosted, turnId?: string, baseline = false): void {\n hosted.checkpointChain = hosted.checkpointChain.then(async () => {\n try {\n const index = await nextCheckpointIndex(hosted.cwd, sessionId);\n if (baseline && index > 0) return;\n const cp = await createCheckpoint(hosted.cwd, sessionId, index, turnId);\n this.emit({\n kind: \"checkpoint.created\",\n sessionId,\n index: cp.index,\n ref: cp.ref,\n commit: cp.commit,\n ...(turnId ? { turnId } : {}),\n });\n } catch (error) {\n this.opts.log?.(`checkpoint failed for ${sessionId}: ${(error as Error).message}`);\n }\n });\n }\n\n private async pump(sessionId: string, hosted: Hosted): Promise<void> {\n try {\n for await (const raw of hosted.session.events) {\n const event = this.rewrite(hosted, raw);\n this.emit({ kind: \"agent\", sessionId, event });\n this.track(sessionId, hosted, event);\n }\n await hosted.checkpointChain;\n this.emit({\n kind: \"session.process\",\n sessionId,\n state: \"exited\",\n exitCode: 0,\n reason: hosted.closeReason ?? \"ended\",\n ...(hosted.closeReason === \"runner_exit\"\n ? { interruptedTurn: hosted.turnCutOff || hosted.drainInterrupted }\n : {}),\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n this.emit({\n kind: \"session.process\",\n sessionId,\n state: \"crashed\",\n error: { code: \"provider_crashed\", message },\n });\n } finally {\n this.sessions.delete(sessionId);\n }\n }\n\n /** A drain-interrupted root turn is reported as cut off by a runner restart. */\n private rewrite(hosted: Hosted, event: AgentEvent): AgentEvent {\n if (\n hosted.drainInterrupted &&\n event.type === \"turn.interrupted\" &&\n event.threadId === hosted.rootThreadId\n ) {\n return { ...event, reason: \"runner_restart\" };\n }\n return event;\n }\n\n private track(sessionId: string, hosted: Hosted, event: AgentEvent): void {\n if (event.type === \"thread.started\" && !event.thread.parentThreadId) {\n hosted.rootThreadId = event.thread.id;\n }\n const onRoot = \"threadId\" in event && event.threadId === hosted.rootThreadId;\n if (!onRoot) return;\n if (event.type === \"turn.started\" && hosted.state !== \"closing\") hosted.state = \"running\";\n if (\n event.type === \"turn.completed\" ||\n event.type === \"turn.failed\" ||\n event.type === \"turn.interrupted\"\n ) {\n if (hosted.state !== \"closing\") hosted.state = \"idle\";\n if (hosted.checkpoints) this.checkpoint(sessionId, hosted, event.turnId);\n }\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((r) => setTimeout(r, ms));\n}\n","import { randomBytes, timingSafeEqual } from \"node:crypto\";\nimport { mkdirSync, renameSync, writeFileSync } from \"node:fs\";\nimport type { AddressInfo } from \"node:net\";\nimport { join } from \"node:path\";\nimport {\n CODEDEN_VERSION,\n RUNNER_PROTOCOL_VERSION,\n type RunnerEvent,\n type RunnerLock,\n type RunnerStream,\n} from \"@codeden/contracts\";\nimport {\n builtinProviders,\n configureClaudeSdk,\n FakeProvider,\n loadFixture,\n type ProviderAdapter,\n ProviderRegistry,\n ReplayProvider,\n} from \"@codeden/providers\";\nimport { serve, upgradeWebSocket } from \"@hono/node-server\";\nimport { Hono } from \"hono\";\nimport { WebSocketServer } from \"ws\";\nimport { BrowserManager, createBrowserCommandHandlers } from \"./browser\";\nimport type { RunnerCore } from \"./commands\";\nimport { connectionHandlers, type ServerConnection } from \"./connection\";\nimport { Journal } from \"./journal\";\nimport { assertSingleInstance, removeOwnLock } from \"./lock\";\nimport { HttpMcpUpstream, handleMcpRequest, type McpUpstream } from \"./mcp/proxy\";\nimport { ProcessSupervisor } from \"./process/supervisor\";\nimport { TerminalHost } from \"./pty/terminal-host\";\nimport { SessionHost } from \"./session-host\";\n\nexport interface StartRunnerOptions {\n /** CodeDen data directory; the runner uses `<home>/runner/` and `<home>/wt/`. */\n home: string;\n /** Load the scripted Fake provider (development and tests). */\n enableFakeProvider?: boolean;\n /** Extra adapters (tests). */\n adapters?: ProviderAdapter[];\n /** Load the real Claude Code and Codex adapters (the runner process does; tests opt in). */\n builtinProviders?: boolean;\n /** Recorded fixtures to serve as Replay providers (tests), registered as `replay-<n>`. */\n replayFixtures?: string[];\n /** Port to listen on (127.0.0.1); 0 = random. */\n port?: number;\n /** Initial MCP proxy upstream (the server's `/mcp`); also set by `runner.configure`. */\n mcpUpstreamUrl?: string;\n /** Version reported in the handshake and lock file. Default `CODEDEN_VERSION` (tests override). */\n version?: string;\n /** On close, also kill leftover descendants of this process (the real runner process). */\n sweepDescendants?: boolean;\n /** Replace the browser engine (tests); by default one `BrowserManager` per runner. */\n browser?: BrowserManager;\n /** Called after `runner.shutdown` or a drain-and-exit closed everything (the CLI exits). */\n onShutdown?: () => void;\n log?: (message: string) => void;\n}\n\nexport interface RunningRunner {\n port: number;\n token: string;\n lockFile: string;\n /** Agent-facing MCP proxy URL. */\n mcpUrl: string;\n close(): Promise<void>;\n}\n\nconst LOOPBACK = /^(127\\.0\\.0\\.1|localhost|\\[::1\\])(:\\d+)?$/i;\nconst DEFAULT_DRAIN_TIMEOUT = 5 * 60_000;\n\n/**\n * Start the runner (§4.2): WebSocket server on 127.0.0.1, lock file with port/token/pid,\n * provider sessions, terminals, git/worktree operations, the local MCP proxy and a durable\n * journal. Survives server restarts.\n */\nexport async function startRunner(opts: StartRunnerOptions): Promise<RunningRunner> {\n const log = opts.log ?? (() => {});\n const version = opts.version ?? CODEDEN_VERSION;\n const dir = join(opts.home, \"runner\");\n mkdirSync(dir, { recursive: true });\n const lockFile = join(dir, \"runner.json\");\n await assertSingleInstance(lockFile);\n\n const token = randomBytes(32).toString(\"hex\");\n const journal = new Journal(dir);\n // Claude Code support is installed on demand into `<home>/deps` in the published package.\n configureClaudeSdk({\n depsDir: join(opts.home, \"deps\"),\n onProgress: (line) => log(`claude sdk: ${line}`),\n });\n const registry = new ProviderRegistry(opts.adapters ?? []);\n if (opts.enableFakeProvider && !registry.get(\"fake\"))\n registry.register(new FakeProvider({ delayMs: 15 }));\n if (opts.builtinProviders) {\n for (const adapter of builtinProviders())\n if (!registry.get(adapter.id)) registry.register(adapter);\n }\n opts.replayFixtures?.forEach((file, i) => {\n registry.register(\n new ReplayProvider(loadFixture(file), { id: i === 0 ? \"replay\" : `replay-${i}` }),\n );\n });\n\n const connections = new Set<ServerConnection>();\n let attached: ServerConnection | undefined;\n let draining = false;\n let drainExit: Promise<void> | undefined;\n let closing: Promise<void> | undefined;\n let mcpUpstream: McpUpstream | undefined = opts.mcpUpstreamUrl\n ? new HttpMcpUpstream(opts.mcpUpstreamUrl)\n : undefined;\n let port = 0;\n\n let stopped = false;\n const emit = (event: RunnerEvent) => {\n if (stopped) return; // late callbacks after close (killed processes)\n const msg = journal.append(event);\n attached?.deliver(msg);\n };\n const stream = (data: RunnerStream) => {\n attached?.deliver({ type: \"stream\", ts: new Date().toISOString(), stream: data });\n };\n const supervisor = new ProcessSupervisor();\n const host = new SessionHost(registry, emit, { log });\n const terminals = new TerminalHost({ supervisor, emit, stream });\n // Chromium launches lazily on the first `browser.*` command (§12.2).\n const browserManager = opts.browser ?? new BrowserManager({ stream, log });\n const browser = createBrowserCommandHandlers({ manager: browserManager });\n const finish = () => void close().then(() => opts.onShutdown?.());\n\n const core: RunnerCore = {\n home: opts.home,\n version,\n journal,\n host,\n terminals,\n supervisor,\n registry,\n browser,\n startedAt: new Date().toISOString(),\n emit,\n isDraining: () => draining,\n drain: ({ reason, timeoutMs, exitWhenDrained }) => {\n if (!draining) {\n draining = true;\n log(`draining: ${reason}`);\n emit({ kind: \"runner.draining\", reason });\n }\n if (exitWhenDrained && !drainExit) {\n drainExit = host.drain(timeoutMs ?? DEFAULT_DRAIN_TIMEOUT).then(finish);\n }\n },\n configureMcp: (url) => {\n mcpUpstream = url ? new HttpMcpUpstream(url) : undefined;\n return url ? `http://127.0.0.1:${port}/mcp` : null;\n },\n shutdown: () => {\n setTimeout(finish, 50);\n },\n };\n\n const app = new Hono();\n app.use(\"*\", async (c, next) => {\n if (!LOOPBACK.test(c.req.header(\"host\") ?? \"\")) return c.text(\"Forbidden host\", 403);\n // Only the server and agents' MCP clients call the runner; a browser page never may.\n if (c.req.header(\"origin\") !== undefined) return c.text(\"Forbidden origin\", 403);\n return next();\n });\n // Agents authenticate with their session-scoped token, validated by the server.\n app.all(\"/mcp\", (c) => handleMcpRequest(c.req.raw, mcpUpstream));\n app.use(\"*\", async (c, next) => {\n const auth = c.req.header(\"authorization\") ?? \"\";\n const given = Buffer.from(auth.replace(/^Bearer\\s+/i, \"\"));\n const expected = Buffer.from(token);\n if (given.length !== expected.length || !timingSafeEqual(given, expected)) {\n return c.text(\"Unauthorized\", 401);\n }\n return next();\n });\n app.get(\"/health\", (c) => c.json({ ok: true, version, runnerId: journal.runnerId }));\n app.get(\n \"/runner\",\n upgradeWebSocket(() =>\n connectionHandlers(\n core,\n (conn) => connections.add(conn),\n (conn) => {\n connections.delete(conn);\n if (attached === conn) attached = undefined;\n },\n (conn) => {\n // A newer server connection replaces the previous one.\n if (attached && attached !== conn) attached.close(\"replaced by a new connection\");\n attached = conn;\n log(\"server attached\");\n },\n ),\n ),\n );\n\n const wss = new WebSocketServer({ noServer: true });\n const server = await new Promise<ReturnType<typeof serve>>((resolve, reject) => {\n const s = serve(\n { fetch: app.fetch, port: opts.port ?? 0, hostname: \"127.0.0.1\", websocket: { server: wss } },\n () => resolve(s),\n );\n s.once(\"error\", reject);\n });\n port = (server.address() as AddressInfo).port;\n\n const lock: RunnerLock = {\n pid: process.pid,\n port,\n token,\n version,\n protocolVersion: RUNNER_PROTOCOL_VERSION,\n runnerId: journal.runnerId,\n startedAt: core.startedAt,\n providers: registry.list().map((a) => a.id),\n };\n const tmp = `${lockFile}.${process.pid}.tmp`;\n writeFileSync(tmp, `${JSON.stringify(lock, null, 2)}\\n`, { mode: 0o600 });\n renameSync(tmp, lockFile);\n log(`runner ${journal.runnerId} listening on 127.0.0.1:${port}`);\n\n const removeLock = () => removeOwnLock(lockFile);\n process.once(\"exit\", removeLock);\n\n async function close(): Promise<void> {\n closing ??= (async () => {\n // Stop advertising first so a new server spawns a fresh runner instead of reconnecting.\n removeLock();\n await host.closeAll();\n await terminals.closeAll();\n await browserManager.shutdown().catch((error: unknown) => log(`browser: ${String(error)}`));\n await supervisor.killAll(opts.sweepDescendants ?? false);\n for (const conn of connections) conn.close(\"runner stopping\");\n wss.close();\n await new Promise<void>((resolve) => {\n server.close(() => resolve());\n if (\"closeAllConnections\" in server) server.closeAllConnections();\n });\n process.off(\"exit\", removeLock);\n stopped = true;\n log(\"runner stopped\");\n })();\n return closing;\n }\n\n return { port, token, lockFile, mcpUrl: `http://127.0.0.1:${port}/mcp`, close };\n}\n"],"ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,56,57,58,59,60,61,62,63,64,65,66,67,68,69,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147],"mappings":"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"}