gemi 0.137.0 → 0.138.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/dist/ai/index.js +3 -3
  2. package/dist/ai/index.js.map +4 -4
  3. package/dist/ai/providers/errors.d.ts +9 -1
  4. package/dist/ai/providers/errors.d.ts.map +1 -1
  5. package/dist/ai/providers/http.d.ts.map +1 -1
  6. package/dist/ai/providers/images.d.ts +2 -0
  7. package/dist/ai/providers/images.d.ts.map +1 -1
  8. package/dist/ai/types.d.ts +10 -1
  9. package/dist/ai/types.d.ts.map +1 -1
  10. package/dist/{chunk-t0p6zb29.js → chunk-1y6hxv30.js} +1 -1
  11. package/dist/{chunk-fjw51b91.js → chunk-4wyhf6j2.js} +1 -1
  12. package/dist/{chunk-x1j7e46e.js → chunk-es3mah07.js} +1 -1
  13. package/dist/chunk-n1n7qb34.js +117 -0
  14. package/dist/{chunk-z19rwc6x.js.map → chunk-n1n7qb34.js.map} +6 -5
  15. package/dist/{chunk-4zjtbgnr.js → chunk-vtc1khbm.js} +2 -2
  16. package/dist/{chunk-4zjtbgnr.js.map → chunk-vtc1khbm.js.map} +1 -1
  17. package/dist/{chunk-atmw5c0q.js → chunk-z88axcxg.js} +15 -15
  18. package/dist/{chunk-atmw5c0q.js.map → chunk-z88axcxg.js.map} +3 -3
  19. package/dist/chunks/{RealtimeClient-DsWbFRC7.js → RealtimeClient-B345JtXu.js} +2 -2
  20. package/dist/chunks/{RealtimeClient-DsWbFRC7.js.map → RealtimeClient-B345JtXu.js.map} +1 -1
  21. package/dist/chunks/{ThemeProvider-gWqXjGh-.js → ThemeProvider-BwlMubvu.js} +97 -30
  22. package/dist/chunks/ThemeProvider-BwlMubvu.js.map +1 -0
  23. package/dist/chunks/{fetchFileRequest-BSrgYnAy.js → fetchFileRequest-DKKdn8Yp.js} +2 -2
  24. package/dist/chunks/{fetchFileRequest-BSrgYnAy.js.map → fetchFileRequest-DKKdn8Yp.js.map} +1 -1
  25. package/dist/chunks/{live-CUdMhXHL.js → live-Cq65lqVg.js} +3 -3
  26. package/dist/chunks/{live-CUdMhXHL.js.map → live-Cq65lqVg.js.map} +1 -1
  27. package/dist/chunks/{mutationExtras-CtY-X9m7.js → mutationExtras-KMQj-GZD.js} +2 -2
  28. package/dist/chunks/{mutationExtras-CtY-X9m7.js.map → mutationExtras-KMQj-GZD.js.map} +1 -1
  29. package/dist/client/ServerDataProvider.d.ts +3 -0
  30. package/dist/client/ServerDataProvider.d.ts.map +1 -1
  31. package/dist/client/ThemeProvider.d.ts +23 -8
  32. package/dist/client/ThemeProvider.d.ts.map +1 -1
  33. package/dist/client/index.d.ts +1 -0
  34. package/dist/client/index.d.ts.map +1 -1
  35. package/dist/client/index.js +3 -3
  36. package/dist/client/theme.d.ts +47 -0
  37. package/dist/client/theme.d.ts.map +1 -0
  38. package/dist/facades/index.js +1 -1
  39. package/dist/http/index.js +1 -1
  40. package/dist/i18n/index.js +1 -1
  41. package/dist/kernel/index.js +1 -1
  42. package/dist/server/index.js +1 -1
  43. package/dist/services/index.js +1 -1
  44. package/dist/services/router/ViewRouteDispatcher.d.ts +3 -1
  45. package/dist/services/router/ViewRouteDispatcher.d.ts.map +1 -1
  46. package/dist/services/router/config.d.ts +27 -0
  47. package/dist/services/router/config.d.ts.map +1 -1
  48. package/dist/testing/index.js +2 -2
  49. package/package.json +1 -1
  50. package/dist/chunk-z19rwc6x.js +0 -122
  51. package/dist/chunks/ThemeProvider-gWqXjGh-.js.map +0 -1
  52. /package/dist/{chunk-t0p6zb29.js.map → chunk-1y6hxv30.js.map} +0 -0
  53. /package/dist/{chunk-fjw51b91.js.map → chunk-4wyhf6j2.js.map} +0 -0
  54. /package/dist/{chunk-x1j7e46e.js.map → chunk-es3mah07.js.map} +0 -0
@@ -9,8 +9,8 @@
9
9
  "import {\n AgentTool,\n ToolNamespace,\n type AnyAgentTool,\n type ToolEntry,\n type ToolShapesOf,\n} from \"../../ai/Agent\";\nimport { ToolError } from \"../../ai/redact\";\nimport type {\n McpRouteDeclaration,\n McpRouter,\n McpToolDeclaration,\n} from \"../../http/McpRouter\";\nimport { RequestContext } from \"../../http/requestContext\";\nimport type { McpRegistry, McpToolDescriptor, McpToolFilter } from \"./McpRegistry\";\n\n/** One namespace `toAgentTools` groups a tag's tools into. */\nexport type McpToolNamespaceOptions = {\n /**\n * What the model reads when deciding whether anything inside is worth\n * loading — the only description the group has. Required.\n */\n description: string;\n /** Overrides the top-level `deferred` for this namespace. */\n deferred?: boolean;\n};\n\nexport type ToAgentToolsOptions = {\n /** Narrows the tools, as `McpRegistry.descriptors` does. */\n filter?: McpToolFilter;\n /**\n * Withholds the tools' parameter schemas until the model searches for them\n * (`ToolNamespace.deferred` for a namespace, `AgentTool.deferred` for a bare\n * tool). The default for every namespace and every bare tool; a namespace\n * may override it. Purely a prompt optimization: a provider without tool\n * search is sent every schema inline, and the agent behaves the same.\n */\n deferred?: boolean;\n /**\n * Groups the tools into `ToolNamespace`s by tag: each key is a tag, and the\n * namespace's name. A tool goes into the namespace of the first of its tags\n * declared here, in the order the keys are written — tool names are unique\n * within an agent, so it cannot be in two. A tool with none of these tags\n * stays a bare tool.\n */\n namespaces?: Record<string, McpToolNamespaceOptions>;\n};\n\n// --- types, read off the router (#771) ----------------------------------------\n\ntype RoutesOf<R> = R extends { routes: infer T } ? T : never;\n\n/** What a declaration types its tool as: a route's or a native tool's (#759). */\ntype ToolTypesOf<D> =\n D extends McpRouteDeclaration<any, any, infer I, infer O, infer T>\n ? { input: I; output: O; tags: T; progress: never }\n : D extends McpToolDeclaration<infer I, infer O, infer T, infer P>\n ? { input: I; output: O; tags: T; progress: P }\n : never;\n\n/** Whether a filter's field narrows by literals, rather than by `string`s. */\ntype LiteralsOf<L> = L extends readonly (infer X)[] ? (string extends X ? never : X) : never;\n\n/** Whether the tool `N`, declared as `D`, passes the filter `F`. */\ntype Passes<N, D, F> =\n // `names`: kept when the filter names it, or names only `string`s.\n (F extends { names: readonly string[] }\n ? [LiteralsOf<F[\"names\"]>] extends [never]\n ? true\n : N extends LiteralsOf<F[\"names\"]>\n ? true\n : false\n : true) extends true\n ? // `tags`: kept when one of its tags is filtered for, or either side's\n // tags are only `string`s. A tool with no tags has none to match.\n F extends { tags: readonly string[] }\n ? [LiteralsOf<F[\"tags\"]>] extends [never]\n ? true\n : ToolTypesOf<D> extends { tags: infer T extends readonly string[] }\n ? string extends T[number]\n ? true\n : [Extract<T[number], LiteralsOf<F[\"tags\"]>>] extends [never]\n ? false\n : true\n : true\n : true\n : false;\n\n/**\n * The tools of the router `R` that pass the filter `F`, as `toAgentTools`\n * builds them: named by their `routes` key, with the input the model sends and\n * the output the tool answers. An untyped router (`McpRouter<any>`, what the\n * container answers) gives `AnyAgentTool`, as before.\n */\nexport type McpAgentTool<R extends McpRouter<any>, F = {}> =\n string extends keyof RoutesOf<R>\n ? AnyAgentTool\n : {\n [N in keyof RoutesOf<R> & string]: Passes<N, RoutesOf<R>[N], F> extends true\n ? ToolTypesOf<RoutesOf<R>[N]> extends {\n input: infer I;\n output: infer O;\n progress: infer P;\n }\n ? AgentTool<N, I, O, P>\n : never\n : never;\n }[keyof RoutesOf<R> & string];\n\n/**\n * The client's shapes of the router's tools, as `ToolShapesOf` gives them for\n * an agent holding `toAgentTools(registry, { filter: F })`. For a chat built\n * on its tools alone; an agent mixing them with its own tools gets them from\n * `ToolShapesOf<typeof agent.tools>`.\n */\nexport type McpToolShapesOf<R extends McpRouter<any>, F = {}> = ToolShapesOf<\n McpAgentTool<R, F>[]\n>;\n\n/** What the grouped call answers: namespaces of the tools, and the bare ones. */\ntype McpToolEntry<R extends McpRouter<any>, F> =\n string extends keyof RoutesOf<R>\n ? ToolEntry\n : ToolNamespace<string, readonly McpAgentTool<R, F>[]> | McpAgentTool<R, F>;\n\ntype FilterOf<O> = O extends { filter: infer F } ? F : {};\n\n/** Namespace names are sent to the provider the way tool names are. */\nconst NAMESPACE_NAME = /^[A-Za-z0-9_-]{1,64}$/;\n\n/**\n * The registry's tools as `AgentTool`s, for an agent running in this server —\n * v1's only projection.\n *\n * Build them once and hand them to `Agent.create`. None of them holds a user:\n * the caller is `{ kind: \"local\", req }`, where `req` is the request the run is\n * executing inside, taken when the tool executes, so the same tools run as\n * whichever user's run calls them. That is the reason the caller is not an\n * argument here.\n *\n * AMBIENT, AND ONLY HERE. A run is not given a request (see `AgentContext`),\n * but these tools have no other way to act as a user: the route is dispatched\n * with the initiator's own credentials, and those live on the request. A run\n * started by `AgentController` executes inside its request, which the run holds\n * open until it settles, so the request is there to read. A run started from a\n * job or a script has none, and these tools refuse there with a sentence\n * saying so rather than dispatching as nobody.\n *\n * `requiresApproval` comes from the route's meta, where the app wrote it down;\n * it is never inferred from the verb.\n *\n * A failure the model should read — a 4xx, a missing file, a bad argument —\n * throws a `ToolError` (`McpToolError` is one), whose message is shown, and the agent loop turns a throw into a `tool_error` result the model\n * sees and can correct on its next step.\n *\n * Grouped (#758): with `namespaces`, the tools come back as `ToolNamespace`s\n * by tag, followed by the bare tools left over, ready for `Agent.create`'s\n * `tools`:\n *\n * ```ts\n * toAgentTools(registry, {\n * namespaces: {\n * pages: { description: \"Read and edit the pages of the site\" },\n * files: { description: \"Upload, list and delete files\" },\n * },\n * deferred: true,\n * });\n * ```\n *\n * The second argument is read as options when it has `filter`, `deferred` or\n * `namespaces`, and as a filter otherwise, so `toAgentTools(registry, filter)`\n * is unchanged.\n *\n * Typed (#771): given the app's router type, the tools keep their names,\n * inputs and outputs, so the client's `ToolShapesOf<typeof agent.tools>` types\n * their parts. A literal `filter` narrows them as it narrows the tools:\n *\n * ```ts\n * const registry = app(McpRegistry) as McpRegistry<SiteMcpRouter>;\n * toAgentTools(registry, { filter: { tags: [\"collections\"] } });\n * // AgentTool<\"listCollections\", { page: string | null }, { name: string }[]> | …\n * ```\n *\n * `toAgentTools<SiteMcpRouter>(app(McpRegistry), …)` types them too, but an\n * explicit type argument leaves the filter uninferred: every tool of the\n * router is in the type. An untyped registry answers `AnyAgentTool`s, as\n * before.\n */\nexport function toAgentTools<\n R extends McpRouter<any> = McpRouter<any>,\n const F extends McpToolFilter = {},\n>(registry: McpRegistry<R> | McpRegistry, filter?: F): McpAgentTool<R, F>[];\nexport function toAgentTools<\n R extends McpRouter<any> = McpRouter<any>,\n const O extends ToAgentToolsOptions & {\n namespaces: Record<string, McpToolNamespaceOptions>;\n } = ToAgentToolsOptions & { namespaces: Record<string, McpToolNamespaceOptions> },\n>(registry: McpRegistry<R> | McpRegistry, options: O): McpToolEntry<R, FilterOf<O>>[];\nexport function toAgentTools<\n R extends McpRouter<any> = McpRouter<any>,\n const O extends ToAgentToolsOptions & { namespaces?: undefined } = ToAgentToolsOptions & {\n namespaces?: undefined;\n },\n>(registry: McpRegistry<R> | McpRegistry, options: O): McpAgentTool<R, FilterOf<O>>[];\n/** Options whose `namespaces` is not known statically: either shape. */\nexport function toAgentTools<R extends McpRouter<any> = McpRouter<any>>(\n registry: McpRegistry<R> | McpRegistry,\n options: ToAgentToolsOptions,\n): McpToolEntry<R, FilterOf<ToAgentToolsOptions>>[];\nexport function toAgentTools(\n registry: McpRegistry,\n arg?: McpToolFilter | ToAgentToolsOptions,\n): AnyAgentTool[] | ToolEntry[] {\n const options: ToAgentToolsOptions = isOptions(arg) ? arg : { filter: arg };\n const deferred = options.deferred === true;\n const descriptors = registry.descriptors(options.filter);\n\n if (!options.namespaces) {\n return descriptors.map((descriptor) => agentTool(registry, descriptor, deferred));\n }\n\n const declared = Object.entries(options.namespaces);\n const known = new Set(registry.descriptors().flatMap((descriptor) => descriptor.tags));\n for (const [tag, namespace] of declared) {\n if (!NAMESPACE_NAME.test(tag)) {\n throw new Error(\n `toAgentTools: \"${tag}\" is not a valid namespace name. A namespace is named by its tag and sent to the provider as a tool name is — letters, digits, \"_\" and \"-\", at most 64.`,\n );\n }\n if (typeof namespace?.description !== \"string\" || namespace.description.trim() === \"\") {\n throw new Error(\n `toAgentTools: the namespace \"${tag}\" needs a description. It is what the model reads to decide whether to look inside.`,\n );\n }\n // Checked against every tool, not the filtered ones: a filter may leave a\n // namespace empty on purpose, but a tag no tool carries is a typo, and a\n // typo here would silently leave its tools bare.\n if (!known.has(tag)) {\n throw new Error(`toAgentTools: no tool is tagged \"${tag}\", so its namespace would be empty.`);\n }\n }\n\n const grouped = new Map<string, AnyAgentTool[]>(declared.map(([tag]) => [tag, []]));\n const bare: AnyAgentTool[] = [];\n for (const descriptor of descriptors) {\n const tag = declared.find(([name]) => descriptor.tags.includes(name))?.[0];\n if (tag === undefined) {\n bare.push(agentTool(registry, descriptor, deferred));\n } else {\n // Deferral is the namespace's, not the tool's: `ToolNamespace.deferred`\n // covers its members, and a member deferred on its own would stay\n // deferred under a namespace that set `deferred: false`.\n grouped.get(tag)!.push(agentTool(registry, descriptor, false));\n }\n }\n\n const entries: ToolEntry[] = [];\n for (const [tag, namespace] of declared) {\n const tools = grouped.get(tag)!;\n // Emptied by the filter. A namespace with nothing in it is a description\n // the model would search for nothing.\n if (tools.length === 0) continue;\n entries.push(\n ToolNamespace.create({\n name: tag,\n description: namespace.description,\n tools,\n deferred: namespace.deferred ?? deferred,\n }),\n );\n }\n return [...entries, ...bare];\n}\n\nfunction isOptions(arg: unknown): arg is ToAgentToolsOptions {\n return (\n typeof arg === \"object\" &&\n arg !== null &&\n (\"filter\" in arg || \"namespaces\" in arg || \"deferred\" in arg)\n );\n}\n\nfunction agentTool(\n registry: McpRegistry,\n descriptor: McpToolDescriptor,\n deferred: boolean,\n): AnyAgentTool {\n if (descriptor.kind === \"tool\") return nativeAgentTool(registry, descriptor, deferred);\n return AgentTool.create({\n name: descriptor.name,\n description: descriptor.description,\n inputSchema: descriptor.inputSchema,\n ...(descriptor.outputSchema ? { outputSchema: descriptor.outputSchema } : {}),\n requiresApproval: descriptor.requiresApproval,\n deferred,\n execute: (input, ctx) => {\n const req = RequestContext.getStore()?.req;\n if (!req) {\n throw new ToolError(\n `\"${descriptor.name}\" calls an api route as the user who started this run, and this run was not started inside a request. Run it from an AgentController, or give this agent tools that do not go through the MCP registry.`,\n );\n }\n return registry.execute({ kind: \"local\", req }, descriptor.name, input, ctx);\n },\n });\n}\n\n/**\n * A native tool (#759), projected back to an `AgentTool` under its `routes`\n * key. Its `execute` hands the run's own `ToolContext` to the registered tool\n * and returns what that returns — so its yields are `tool-progress`, its job\n * handle a background job — with `mcpCallOf(ctx)` naming the local caller.\n *\n * Unlike a route, it needs no request to run: a run started from a job\n * executes it as the agent would have executed the tool directly, with\n * `mcpCallOf(ctx)` answering `undefined`.\n */\nfunction nativeAgentTool(\n registry: McpRegistry,\n descriptor: McpToolDescriptor,\n deferred: boolean,\n): AnyAgentTool {\n const native = registry.nativeTool(descriptor.name);\n return AgentTool.create({\n name: descriptor.name,\n description: descriptor.description,\n inputSchema: descriptor.inputSchema,\n ...(descriptor.outputSchema ? { outputSchema: descriptor.outputSchema } : {}),\n requiresApproval: descriptor.requiresApproval,\n deferred,\n ...(native.timeoutMs !== undefined ? { timeoutMs: native.timeoutMs } : {}),\n ...(native.async ? { async: native.async } : {}),\n execute: ((input: unknown, ctx) => {\n const req = RequestContext.getStore()?.req;\n return registry.startNative(req ? { kind: \"local\", req } : undefined, descriptor.name, input, ctx);\n }) as NonNullable<AnyAgentTool[\"execute\"]>,\n });\n}\n",
10
10
  "import type { ImageProvider } from \"./ImageProvider\";\nimport type { ImageResponse } from \"./providers/images\";\nimport type { Usage } from \"./types\";\n\n/**\n * A named image model with its settings, the way `Agent` is a named text model\n * with its settings.\n *\n * `ImageModel`, not `Image`, because `Image` is already gemi's `<img>` srcset\n * component (`client/Image.tsx`). Different entrypoints, so nothing collides\n * technically — and a page builder, which is what this feature is for, imports\n * both in the same file.\n *\n * export const banner = ImageModel.create({\n * name: \"banner\",\n * provider: AzureOpenAIImageProvider.model(\"gpt-image-2\"),\n * size: \"1536x1024\",\n * quality: \"high\",\n * });\n *\n * const { image, mimeType } = await banner.generate({ prompt });\n * await Storage.put({ name: `pages/${id}/hero.png`, body: image, contentType: mimeType });\n *\n * Inside an agent tool, call `ctx.generateImage(banner, …)` instead: it memoizes\n * the render against the tool call so a replay does not pay for it twice, and it\n * parks the bytes as an attachment. See `ToolContext.generateImage`.\n */\n\n/**\n * `WIDTHxHEIGHT`, or `auto`.\n *\n * NOT A CLOSED UNION OF THREE LITERALS, which is what the older image models\n * allowed and what a first draft of this type was. `gpt-image-2` takes arbitrary\n * dimensions, and a page builder deriving a size from a layout slot's aspect\n * ratio is precisely the caller that needs them.\n */\nexport type ImageSize = `${number}x${number}` | \"auto\";\nexport type ImageQuality = \"low\" | \"medium\" | \"high\" | \"auto\";\nexport type ImageBackground = \"transparent\" | \"opaque\" | \"auto\";\n\n/**\n * `png` or `jpeg`. Not `webp`, although every source lists it — measured against\n * `gpt-image-2`:\n *\n * 400 Invalid value: 'webp'. Supported values are: 'png' and 'jpeg'.\n * param: output_format\n */\nexport type ImageFormat = \"png\" | \"jpeg\";\n\ntype Settings = {\n size?: ImageSize;\n quality?: ImageQuality;\n background?: ImageBackground;\n format?: ImageFormat;\n /** JPEG quality, 0–100. Ignored by the vendor for PNG. */\n compression?: number;\n};\n\nexport type CreateImageModelParams = Settings & {\n /** For logs and, later, telemetry — the same role `Agent.name` plays. */\n name: string;\n provider: ImageProvider;\n};\n\nexport type GenerateImageParams = Settings & {\n prompt: string;\n /** Aborts the render. Inside a tool, `ctx.generateImage` passes the run's. */\n signal?: AbortSignal;\n};\n\nexport type ImageInput = Blob | File;\n\nexport type EditImageParams = GenerateImageParams & {\n /**\n * The images to edit, at least one. Typed as a non-empty tuple so an empty\n * array is a compile error rather than a paid call that quietly generates from\n * scratch.\n */\n images: [ImageInput, ...ImageInput[]];\n /**\n * A PNG with an alpha channel, the same dimensions as the input. The\n * **transparent** region is the part to replace.\n *\n * MEASURED, and honoured rather than merely accepted: with a transparent\n * centre square and the prompt \"put a yellow star in the masked area\", the\n * centre came back yellow and the surrounding ring kept the original colour,\n * while the same edit without a mask recoloured the whole image.\n */\n mask?: ImageInput;\n};\n\n/**\n * One generated image.\n *\n * NO `revisedPrompt`. It was in the original design, the requesting app asked\n * for it, and `gpt-image-2` does not return one — five successful responses,\n * generations and edits, none carrying `revised_prompt`. A field that is always\n * `undefined` teaches callers to write dead branches; adding it back if a model\n * ever populates it is not a breaking change.\n */\nexport type GeneratedImage = {\n /** The bytes, with `type` set — ready for `Storage.put` or\n * `ctx.attachments.put`, neither of which accepts a `Uint8Array`. */\n image: Blob;\n mimeType: string;\n /**\n * What was actually produced, read off the response and never assumed.\n *\n * MEASURED: an edit sent with no `size` answered `1254x1254` — neither a size\n * anyone asked for nor a multiple of 16. So the divisible-by-16 rule below\n * constrains the *request* and says nothing about the answer.\n */\n size: string;\n usage: Usage;\n};\n\n/** The measured request rules. Each one is a real 400, quoted. */\nfunction assertSize(size: string): void {\n if (size === \"auto\") return;\n\n const match = /^(\\d+)x(\\d+)$/.exec(size);\n if (!match) {\n throw new Error(`An image size is \"WIDTHxHEIGHT\" or \"auto\"; got ${JSON.stringify(size)}.`);\n }\n\n const width = Number(match[1]);\n const height = Number(match[2]);\n\n // 400 Invalid size '1000x1000'. Width and height must both be divisible by 16.\n if (width % 16 !== 0 || height % 16 !== 0) {\n throw new Error(\n `Image size ${size} is not supported: width and height must both be divisible by 16.`,\n );\n }\n\n // 400 Invalid size '1024x256'. The maximum supported aspect ratio is 3:1.\n if (Math.max(width / height, height / width) > 3) {\n throw new Error(\n `Image size ${size} is not supported: the maximum aspect ratio is 3:1, either way up.`,\n );\n }\n}\n\nfunction assertSettings(settings: Settings, where: string): void {\n if (settings.size !== undefined) {\n try {\n assertSize(settings.size);\n } catch (error) {\n throw new Error(`${where}: ${(error as Error).message}`);\n }\n }\n\n // 400 Transparent background is not supported for JPEG output format\n if (settings.background === \"transparent\" && settings.format === \"jpeg\") {\n throw new Error(`${where}: a transparent background needs \"png\"; JPEG has no alpha channel.`);\n }\n\n if (settings.compression !== undefined) {\n const value = settings.compression;\n if (!Number.isInteger(value) || value < 0 || value > 100) {\n throw new Error(`${where}: compression is an integer from 0 to 100; got ${value}.`);\n }\n }\n}\n\nfunction toBlob(input: ImageInput, fallbackName: string): File {\n if (input instanceof File) return input;\n // A Blob built from raw bytes has no name, and the vendor reads the part's\n // filename: an extensionless part is answered with a type error rather than a\n // useful one.\n const type = input.type || \"image/png\";\n const extension = type === \"image/jpeg\" ? \"jpg\" : (type.split(\"/\")[1] ?? \"png\");\n return new File([input], `${fallbackName}.${extension}`, { type });\n}\n\nexport class ImageModel {\n readonly name: string;\n readonly provider: ImageProvider;\n private readonly settings: Settings;\n\n private constructor(params: CreateImageModelParams) {\n const { name, provider, ...settings } = params;\n // Checked here as well as per call, so a bad default fails when the module\n // loads rather than on whichever request first happens to hit it.\n assertSettings(settings, `ImageModel \"${name}\"`);\n this.name = name;\n this.provider = provider;\n this.settings = settings;\n }\n\n static create(params: CreateImageModelParams): ImageModel {\n return new ImageModel(params);\n }\n\n async generate(params: GenerateImageParams): Promise<GeneratedImage> {\n const merged = this.merge(params);\n return present(\n await this.provider.generate({ prompt: params.prompt, ...merged, signal: params.signal }),\n );\n }\n\n /**\n * Edits one or more images.\n *\n * A SEPARATE METHOD, not an `images?` on `generate`. One method would mean an\n * `images` that arrives `undefined` — a mistyped field, a destructure of the\n * wrong object — silently generates a fresh image instead of editing: the\n * wrong picture, no error, on a call that is billed either way. Requiring a\n * non-empty `images` here makes \"edit with nothing to edit\" unspellable.\n */\n async edit(params: EditImageParams): Promise<GeneratedImage> {\n const merged = this.merge(params);\n return present(\n await this.provider.edit({\n prompt: params.prompt,\n ...merged,\n images: params.images.map((image, index) => toBlob(image, `image-${index}`)),\n ...(params.mask ? { mask: toBlob(params.mask, \"mask\") } : {}),\n signal: params.signal,\n }),\n );\n }\n\n /** Per-call params over the model's defaults, validated as one. */\n private merge(params: Settings): Settings {\n const merged: Settings = {\n ...this.settings,\n ...(params.size !== undefined ? { size: params.size } : {}),\n ...(params.quality !== undefined ? { quality: params.quality } : {}),\n ...(params.background !== undefined ? { background: params.background } : {}),\n ...(params.format !== undefined ? { format: params.format } : {}),\n ...(params.compression !== undefined ? { compression: params.compression } : {}),\n };\n // The merged pair is what matters: a model with `background: \"transparent\"`\n // and a call passing `format: \"jpeg\"` is the combination the vendor rejects,\n // and neither half is wrong on its own.\n assertSettings(merged, `ImageModel \"${this.name}\"`);\n return merged;\n }\n}\n\nfunction present(response: ImageResponse): GeneratedImage {\n return {\n image: new Blob([response.bytes as BlobPart], { type: response.mimeType }),\n mimeType: response.mimeType,\n size: response.size,\n usage: response.usage,\n };\n}\n",
11
11
  "/**\n * Where a vendor lives, and who we are to it — resolved once, for every kind of\n * call.\n *\n * WHY THIS IS ITS OWN MODULE. The Responses path and the images path differ only\n * in the last segment of the URL. Everything before it — which host, whether the\n * configured endpoint already carried `/openai`, whether the api-version is\n * dated and therefore routes to the older path, whether to send `authorization:\n * Bearer` or `api-key`, whether an Entra token has to be minted again because\n * the last one expired mid-conversation — is identical, and every line of it was\n * worked out by measuring a real resource rather than reading documentation (the\n * transcripts are on `azureBase` below).\n *\n * That is exactly the kind of knowledge that must not be copied. A second copy\n * in an image provider would be correct on the day it was written and would\n * drift on the first fix that only one of them got, and the symptom of the drift\n * is a 404 on every request for whichever apps configured the provider the\n * documented way — which is the bug `azureBase` exists because of.\n *\n * So a provider resolves a `ProviderTarget` and appends its own path. Nothing\n * here knows about Responses, files or images.\n */\n\nexport type ProviderConfig = {\n apiKey?: string;\n baseURL?: string;\n timeoutMs?: number;\n maxRetries?: number;\n headers?: Record<string, string>;\n};\n\nexport type AzureConfig = ProviderConfig & {\n /**\n * The resource host, with or without a trailing `/openai`. Both spellings\n * work — `https://<resource>.cognitiveservices.azure.com` and\n * `https://<resource>.openai.azure.com` — and neither is rewritten, because\n * only one of them exists for a resource that was not created as\n * kind=OpenAI. See `azureBase` for what is done to it.\n */\n endpoint?: string;\n /**\n * Just the resource name, when there is no endpoint to hand. `<name>` is\n * expanded to `https://<name>.cognitiveservices.azure.com/openai`.\n */\n resourceName?: string;\n apiVersion?: string;\n /**\n * The deployment to call, when it is not named after the model. Azure lets\n * whoever ran the template call it anything, and plenty of them are called\n * `prod` — this is the override the class comment promises.\n */\n deployment?: string;\n /**\n * For Entra ID instead of a key. A function, not a token, because these\n * expire mid-conversation.\n */\n getToken?: () => Promise<string>;\n};\n\n/**\n * A resolved vendor, ready for a path to be appended.\n *\n * `base` and `query` are separate because Azure's api-version is a query\n * parameter and a caller appending `/images/generations` must not have to know\n * that it goes *before* the `?`. Every URL is `${base}${path}${query}`.\n */\nexport type ProviderTarget = {\n /** e.g. `https://api.openai.com/v1`, or `https://<host>/openai/v1`. */\n base: string;\n /** e.g. `` or `?api-version=preview`. Already encoded. */\n query: string;\n /** Called per request. See the Azure branch for why that is not an accident. */\n headers: () => Promise<Record<string, string>>;\n timeoutMs: number;\n maxRetries: number;\n};\n\n/** Long enough for a reasoning model to think before it says anything, short\n * enough that a hung connection is not mistaken for a slow one. For a streamed\n * call it only covers getting a response; the stream that follows has no\n * deadline. For a one-shot call it is the whole deadline — which is why the\n * images path sets its own, and why `retryTimeouts` exists. */\nexport const DEFAULT_TIMEOUT_MS = 120_000;\nexport const DEFAULT_MAX_RETRIES = 2;\n\nexport function env(name: string): string | undefined {\n return typeof process === \"undefined\" ? undefined : process.env?.[name];\n}\n\n/**\n * `preview` selects Azure's `/openai/v1` surface, which is the OpenAI-shaped\n * one — same request body, same SSE frames, same `model` field naming the\n * deployment — and it is the only surface the Responses API has that gemi's\n * request builder can talk to unchanged. It takes no dated version: sending\n * `api-version=2025-04-01-preview` to `/openai/v1/responses` answers\n * `400 {\"code\":\"BadRequest\",\"message\":\"API version not supported\"}`.\n *\n * A dated version is still honoured, and routes to the older\n * `/openai/responses` path instead — see `azurePath`. So an app that pinned\n * one keeps working, which is the promise the old comment here made and could\n * not keep once the paths diverged.\n */\nexport const AZURE_API_VERSION = \"preview\";\n\n/**\n * Where an Azure call goes, worked out live rather than from docs.\n *\n * THE PROBLEM THIS SOLVES. `AZURE_OPENAI_ENDPOINT` is conventionally written\n * with `/openai` already on the end, and the old code appended `/openai` again\n * and then a deployment path, producing\n * `…/openai/openai/deployments/<dep>/responses` — a 404 on every request, for\n * every app that configured the provider the documented way. Two separate\n * mistakes were stacked there, and only measuring told them apart.\n *\n * WHAT WAS MEASURED, against a real resource, POSTing a Responses body:\n *\n * 404 {endpoint}/openai/deployments/gpt-5.4/responses?api-version=2025-04-01-preview\n * 404 {host}/openai/deployments/gpt-5.4/responses?api-version=2025-04-01-preview\n * 404 {host}/openai/deployments/gpt-5.4/responses?api-version=preview\n * 400 {host}/openai/v1/responses?api-version=2025-04-01-preview (\"API version not supported\")\n * 200 {host}/openai/v1/responses?api-version=preview\n * 200 {host}/openai/v1/responses (no api-version at all)\n * 200 {host}/openai/responses?api-version=2025-04-01-preview\n *\n * for {host} in BOTH `https://<resource>.cognitiveservices.azure.com` and\n * `https://<resource>.openai.azure.com` — both spellings answered identically,\n * so the host was never the variable. The deployment-in-the-URL path is the\n * Chat Completions shape and the Responses API does not serve it at all; the\n * deployment goes in the body's `model`, which is what `buildResponsesRequest`\n * already puts there.\n *\n * `/openai/v1/files?api-version=preview` and\n * `/openai/files?api-version=2025-04-01-preview` were both checked too (200,\n * empty list), so uploads follow the same fork.\n *\n * And so do images, measured the same way against a `gpt-image-2` deployment:\n *\n * 200 {host}/openai/v1/images/generations?api-version=preview\n * 200 {host}/openai/v1/images/edits?api-version=preview\n *\n * which is the whole reason this function is shared rather than reimplemented.\n */\nexport function azureBase(raw: string): string {\n const trimmed = raw.trim().replace(/\\/+$/, \"\");\n if (!trimmed) return \"\";\n // A configured endpoint may or may not already carry `/openai`, and may even\n // carry `/openai/v1` if someone copied a full URL. Normalize down to the\n // resource base and put exactly one `/openai` back, rather than appending\n // blind — appending blind is the bug.\n const base = trimmed.replace(/\\/openai(?:\\/v1)?$/i, \"\");\n return `${base}/openai`;\n}\n\n/** Dated versions belong to the older path; `preview` (and anything that is not\n * a date) belongs to `/v1`. Both were verified above. */\nexport function azurePath(apiVersion: string): string {\n return /^\\d{4}-\\d{2}-\\d{2}/.test(apiVersion) ? \"\" : \"/v1\";\n}\n\n/** Overrides for a call whose deadline is not a streaming handshake's. */\nexport type TargetDefaults = { timeoutMs?: number };\n\nexport function openAITarget(\n config: ProviderConfig,\n defaults: TargetDefaults = {},\n): ProviderTarget {\n const base = (config.baseURL ?? env(\"OPENAI_BASE_URL\") ?? \"https://api.openai.com/v1\").replace(\n /\\/+$/,\n \"\",\n );\n\n return {\n base,\n query: \"\",\n headers: async () => {\n const apiKey = config.apiKey ?? env(\"OPENAI_API_KEY\");\n return {\n ...(apiKey ? { authorization: `Bearer ${apiKey}` } : {}),\n ...config.headers,\n };\n },\n timeoutMs: config.timeoutMs ?? defaults.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxRetries: config.maxRetries ?? DEFAULT_MAX_RETRIES,\n };\n}\n\n/**\n * The resource base, `<host>/openai`, from whichever of the three ways it was\n * configured. A bare resource name expands to the `cognitiveservices` host\n * rather than the `openai.azure.com` one: both answer for a resource created\n * as kind=OpenAI, only `cognitiveservices` answers for an AI Foundry or\n * multi-service resource, so it is the spelling that is right more often. An\n * app on the other one sets `endpoint` and nothing rewrites it.\n */\nexport function azureResourceBase(config: AzureConfig): string {\n const configured = config.baseURL ?? config.endpoint ?? env(\"AZURE_OPENAI_ENDPOINT\");\n if (configured) return azureBase(configured);\n const resource =\n config.resourceName ?? env(\"AZURE_OPENAI_RESOURCE_NAME\") ?? env(\"AZURE_RESOURCE_NAME\");\n return resource ? azureBase(`https://${resource.trim()}.cognitiveservices.azure.com`) : \"\";\n}\n\nexport function azureTarget(config: AzureConfig, defaults: TargetDefaults = {}): ProviderTarget {\n const apiVersion = config.apiVersion ?? env(\"AZURE_OPENAI_API_VERSION\") ?? AZURE_API_VERSION;\n\n return {\n base: `${azureResourceBase(config)}${azurePath(apiVersion)}`,\n query: `?api-version=${encodeURIComponent(apiVersion)}`,\n headers: async () => {\n // Called per request, not per provider: an Entra token minted when the\n // app booted is expired by the time a long conversation reaches step\n // nine, and that failure looks like a random 401 in the middle of a\n // working feature.\n if (config.getToken) {\n return { authorization: `Bearer ${await config.getToken()}`, ...config.headers };\n }\n const apiKey = config.apiKey ?? env(\"AZURE_OPENAI_API_KEY\");\n return { ...(apiKey ? { \"api-key\": apiKey } : {}), ...config.headers };\n },\n timeoutMs: config.timeoutMs ?? defaults.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n maxRetries: config.maxRetries ?? DEFAULT_MAX_RETRIES,\n };\n}\n\n/**\n * Azure's realtime surface, which is the GA `/openai/v1` one regardless of the\n * configured api-version.\n *\n * WHY NOT `azureTarget`. A dated api-version routes `azureTarget` to the older\n * `/openai/...` path (see `azurePath`), and that path has no `realtime/calls`:\n * the WebRTC \"unified interface\", the client secrets and the call's sideband\n * socket are documented on `/openai/v1/realtime/...` only, and the documented\n * URLs carry no `api-version` at all. An app that pinned a dated version for\n * its Responses calls must not lose voice for it, so this target ignores the\n * version and keeps everything else — the resource base and, above all, the\n * per-request credential — from the one place that resolves them.\n *\n * NOT YET MEASURED against a real Azure realtime deployment (there was none to\n * measure when this was written). The shape follows Azure's GA realtime\n * documentation; when a deployment exists, the transcripts belong here as they\n * do on `azureBase`.\n */\nexport function azureRealtimeTarget(\n config: AzureConfig,\n defaults: TargetDefaults = {},\n): ProviderTarget {\n const target = azureTarget(config, defaults);\n return { ...target, base: `${azureResourceBase(config)}/v1`, query: \"\" };\n}\n",
12
- "import { normalizeProviderError, ProviderHttpError, ProviderTimeoutError } from \"./errors\";\n\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\nexport type RequestOptions = {\n maxRetries: number;\n timeoutMs: number;\n signal?: AbortSignal;\n /** Injected by the tests. Nothing here should ever need a real socket to be\n * exercised, and a retry policy that is only tested against a live API is\n * one that gets tested during an outage. */\n fetchImpl?: FetchLike;\n /** Takes the caller's signal so the default can clear its timer rather than\n * hold the process open for a backoff nobody is waiting for any more. An\n * injected sleep may ignore it: the wait is raced against the abort either\n * way. */\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n random?: () => number;\n now?: () => number;\n /**\n * Whether a timeout is worth another attempt. Defaults to `true`.\n *\n * THE ANSWER DEPENDS ON WHAT THE TIMER BOUNDS, which is why this is a\n * parameter and not a policy. For a streamed call the timer covers getting a\n * response and is cleared once the headers land (see `requestWithRetry`), so a\n * timeout means the provider never started answering: nothing was generated,\n * nothing was billed, and retrying is both cheap and likely to work.\n *\n * For a call that returns its whole result in one body, the same timer bounds\n * the *work*. A timeout there means the work probably happened and we hung up\n * before hearing about it — so a retry pays for it a second time, at the same\n * latency, and most likely times out again.\n *\n * MEASURED, because the margin is what makes this urgent rather than\n * theoretical. One `gpt-image-2` render at `quality: \"high\"`, `1536x1024`,\n * against a real Azure deployment: **117.8 seconds**, against a\n * `DEFAULT_TIMEOUT_MS` of 120_000. Two seconds of headroom, about 2%. Any\n * variance crosses it, and with retries on, one such request becomes three\n * two-minute renders, six minutes of waiting, three images billed, and a\n * `ProviderTimeoutError` returned to the caller. (For scale: the same model at\n * `low`/1024² answers in 15s, and an edit in 14–20s.)\n *\n * So the image path passes `false` and the streaming path leaves it alone. A\n * 429 or a 5xx is still retried in both cases: those say the request did not\n * run, which is the opposite of what a timeout says here.\n */\n retryTimeouts?: boolean;\n};\n\n/** The floor of the backoff. Doubling from here gives 0.5s, 1s, 2s, 4s — long\n * enough to outlast a rate-limit window, short enough that a user watching a\n * stream does not assume it died. */\nconst BASE_DELAY_MS = 500;\nexport const MAX_DELAY_MS = 20_000;\n\n/**\n * `Retry-After` in either of its two legal forms: seconds, or an HTTP date.\n *\n * Honoured rather than ignored because the server knows when its window\n * reopens and we are guessing. A value in the past clamps to zero; a garbage\n * value falls back to the computed backoff, since a header we cannot read is\n * not a reason to give up on the request.\n *\n * Parsed here, bounded at the call site: this returns what the server said.\n */\nexport function parseRetryAfter(value: string | null | undefined, now: number): number | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (/^\\d+(\\.\\d+)?$/.test(trimmed)) return Math.max(0, Number(trimmed) * 1000);\n const date = Date.parse(trimmed);\n if (Number.isNaN(date)) return undefined;\n return Math.max(0, date - now);\n}\n\n/**\n * Exponential backoff with full jitter. The jitter is the point: without it,\n * every request that got rate limited at the same moment retries at the same\n * moment, and the second wave is the same size as the first.\n */\nexport function backoffDelayMs(attempt: number, random: () => number): number {\n const ceiling = Math.min(MAX_DELAY_MS, BASE_DELAY_MS * 2 ** attempt);\n return Math.round(ceiling * (0.5 + random() * 0.5));\n}\n\nfunction isRetryableStatus(status: number): boolean {\n // 429 and the 5xx range. 409 is in here because OpenAI answers it for a\n // request that raced with something on their side, and it succeeds on the\n // second try.\n return status === 429 || status === 408 || status === 409 || status >= 500;\n}\n\n/**\n * One retry policy, not two.\n *\n * The status table alone cannot answer this: a 429 from a spent quota is a 429\n * every time for the rest of the month, and retrying it turns one billing\n * problem into `maxRetries` of them and a much later error message. Only the\n * body says which 429 this is, and `normalizeProviderError` is where that is\n * already read — so it is asked here rather than left to disagree with a table\n * after the retries have happened.\n *\n * It is a veto, not a second opinion: the table decides which statuses are\n * worth another attempt and the normalized verdict can only take one away.\n * That way a future change to the error mapping cannot start retrying 400s.\n */\nfunction shouldRetry(status: number, error: ProviderHttpError): boolean {\n return isRetryableStatus(status) && normalizeProviderError(error).retryable;\n}\n\nfunction abortReason(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException(\"The operation was aborted.\", \"AbortError\");\n}\n\nfunction defaultSleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(abortReason(signal));\n },\n { once: true },\n );\n });\n}\n\n/**\n * One HTTP call, retried.\n *\n * The timeout covers getting a response, not consuming one. A streamed answer\n * legitimately takes minutes, and a timeout that kept running would cut off\n * long completions at exactly the point where they were most expensive to\n * abandon — so the timer is cleared once the headers land, and only the\n * caller's own signal can end the body.\n */\nexport async function requestWithRetry(\n url: string,\n init: RequestInit,\n options: RequestOptions,\n): Promise<Response> {\n const doFetch = options.fetchImpl ?? ((u: string, i: RequestInit) => fetch(u, i));\n const sleep = options.sleep ?? defaultSleep;\n const random = options.random ?? Math.random;\n const now = options.now ?? Date.now;\n const maxRetries = Math.max(0, options.maxRetries);\n\n /**\n * A backoff nobody can interrupt is a `stop()` that does not stop.\n *\n * The wait is where a retrying request spends nearly all of its time — up to\n * 20 seconds of it — and noticing the abort only at the top of the next\n * iteration means the run holds its state, and the user watches a cancelled\n * stream, for the rest of the window. So the sleep loses a race with the\n * signal, and the abort propagates like any other.\n */\n const wait = async (ms: number): Promise<void> => {\n const signal = options.signal;\n if (!signal) return await sleep(ms);\n signal.throwIfAborted();\n let onAbort: (() => void) | undefined;\n try {\n await Promise.race([\n sleep(ms, signal),\n new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(abortReason(signal));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n } finally {\n if (onAbort) signal.removeEventListener(\"abort\", onAbort);\n }\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n options.signal?.throwIfAborted();\n\n const controller = new AbortController();\n const abortOuter = () => controller.abort(options.signal?.reason);\n options.signal?.addEventListener(\"abort\", abortOuter, { once: true });\n\n let timedOut = false;\n const timer =\n options.timeoutMs > 0\n ? setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, options.timeoutMs)\n : undefined;\n\n let response: Response;\n try {\n response = await doFetch(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (timer !== undefined) clearTimeout(timer);\n options.signal?.removeEventListener(\"abort\", abortOuter);\n // The caller's abort wins outright — `stop()` means stop, not \"stop and\n // try three more times\".\n if (options.signal?.aborted) throw error;\n lastError = timedOut ? new ProviderTimeoutError(options.timeoutMs) : error;\n // Checked before the attempt count, because this is not \"no attempts\n // left\" — it is \"another attempt is the wrong thing to do\". See\n // `RequestOptions.retryTimeouts`.\n if (timedOut && options.retryTimeouts === false) throw lastError;\n if (attempt === maxRetries) throw lastError;\n await wait(backoffDelayMs(attempt, random));\n continue;\n }\n\n if (timer !== undefined) clearTimeout(timer);\n\n if (response.ok) {\n // Deliberately left attached: the caller is about to read a stream, and\n // its own signal has to keep reaching it.\n return response;\n }\n\n options.signal?.removeEventListener(\"abort\", abortOuter);\n const body = await readErrorBody(response);\n const error = new ProviderHttpError(\n response.status,\n body,\n response.headers.get(\"x-request-id\") ?? undefined,\n );\n\n if (attempt === maxRetries || !shouldRetry(response.status, error)) throw error;\n\n // Bounded, because `Retry-After` is a number the server chooses and a daily\n // quota answers it in hours. Sleeping through that holds the run open for\n // the whole window; waking early costs one request that gets the same 429\n // and a longer, still-bounded backoff after it.\n const retryAfter = parseRetryAfter(response.headers.get(\"retry-after\"), now());\n await wait(\n retryAfter === undefined\n ? backoffDelayMs(attempt, random)\n : Math.min(retryAfter, MAX_DELAY_MS),\n );\n lastError = error;\n }\n\n // Unreachable: the loop either returns or throws. Kept honest rather than\n // asserted away.\n throw lastError ?? new Error(\"Provider request failed with no response.\");\n}\n\nasync function readErrorBody(response: Response): Promise<unknown> {\n let text: string;\n try {\n text = await response.text();\n } catch {\n return null;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n",
13
- "import type { AgentError, Usage } from \"../types\";\nimport type { ProviderTarget } from \"./endpoints\";\nimport { normalizeProviderError } from \"./errors\";\nimport { requestWithRetry, type FetchLike } from \"./http\";\n\n/**\n * One image call, retried where retrying is free and not where it costs a render.\n *\n * MEASURED against a `gpt-image-2` deployment, api-version `preview`, and every\n * decision in this file comes from one of these rather than from documentation —\n * which disagreed with the endpoint on three separate points:\n *\n * 200 {base}/images/generations low, 1024x1024, png 15.0s\n * 200 {base}/images/generations low, 1024x1024, png, transparent 14.6s\n * 400 {base}/images/generations high, 1536x1024, webp\n * → \"Invalid value: 'webp'. Supported values are: 'png' and 'jpeg'.\"\n * 200 {base}/images/generations high, 1536x1024, png 117.8s\n * 200 {base}/images/edits low, one image[], no mask, no size 13.7s\n * → answered size \"1254x1254\", which is neither what was asked for\n * nor a multiple of 16\n * 200 {base}/images/edits low, one image[], mask, 1024x1024 14.0s\n * 200 {base}/images/edits low, two image[], 1024x1024 20.2s\n *\n * The documentation was wrong that `webp` is accepted, wrong that this model\n * cannot do transparency, and wrong about the `usage` field names. The response\n * shape, verbatim:\n *\n * { \"created\": 1790519365, \"background\": \"opaque\", \"output_format\": \"png\",\n * \"quality\": \"low\", \"size\": \"1024x1024\",\n * \"data\": [{ \"b64_json\": \"…\" }],\n * \"usage\": { \"input_tokens\": 15,\n * \"input_tokens_details\": { \"image_tokens\": 0, \"text_tokens\": 15 },\n * \"output_tokens\": 196,\n * \"output_tokens_details\": { \"image_tokens\": 196, \"text_tokens\": 0 },\n * \"total_tokens\": 211 } }\n *\n * There is no `revised_prompt` in any of the five successful responses. See\n * `ImageModel` for why the field is not on the public result type.\n */\nexport type ImagesEndpoint = {\n generationsUrl: string;\n editsUrl: string;\n /** Async for the same reason the Responses endpoint's is: Entra tokens expire\n * mid-conversation, so the credential is read per request. */\n headers: () => Promise<Record<string, string>>;\n timeoutMs: number;\n maxRetries: number;\n fetchImpl?: FetchLike;\n};\n\n/**\n * Longer than the Responses default, because here the timer bounds the work.\n *\n * A `high` / 1536x1024 render measured 117.8 seconds against a 120_000 default —\n * two seconds of headroom. That is not a timeout, it is a coin flip, and losing\n * it used to mean three renders billed (see `RequestOptions.retryTimeouts`). 300\n * seconds is chosen to clear the measured worst case with room for a busier\n * resource and a larger size, and an app that knows its own ceiling sets\n * `timeoutMs` in config.\n */\nexport const DEFAULT_IMAGE_TIMEOUT_MS = 300_000;\n\nexport function imagesEndpoint(target: ProviderTarget): ImagesEndpoint {\n return {\n generationsUrl: `${target.base}/images/generations${target.query}`,\n editsUrl: `${target.base}/images/edits${target.query}`,\n headers: target.headers,\n timeoutMs: target.timeoutMs,\n maxRetries: target.maxRetries,\n };\n}\n\n/**\n * What an image call failed with, as a normalized code rather than a vendor body.\n *\n * A one-shot call throws where the streaming path emits an `error` event — a\n * promise has nowhere else to put it, and a caller awaiting bytes should not have\n * to check a union. The normalized `AgentError` is carried so an app can branch\n * on `rate_limited` exactly as it would for a text call.\n *\n * The vendor's own body is on `cause` and deliberately NOT in `message`. Inside a\n * tool a throw becomes a tool result the model reads (#446), and a provider error\n * body is not something to hand a model verbatim when a sentence will do.\n */\nexport class ImageRequestError extends Error {\n readonly code: AgentError[\"code\"];\n readonly retryable: boolean;\n\n constructor(error: AgentError, options: { cause?: unknown } = {}) {\n super(error.message, options);\n this.name = \"ImageRequestError\";\n this.code = error.code;\n this.retryable = error.retryable;\n }\n}\n\n/** The JSON body of a generation. Vendor field names, built by `ImageModel`. */\nexport type ImageGenerationRequest = {\n model: string;\n prompt: string;\n size?: string;\n quality?: string;\n background?: string;\n output_format?: string;\n output_compression?: number;\n};\n\n/** What every image call answers, before `ImageModel` gives it a public shape. */\nexport type ImageResponse = {\n /** Decoded from `b64_json`. */\n bytes: Uint8Array;\n mimeType: string;\n /** Read off the response, never assumed — an edit with no `size` answered\n * `1254x1254`. */\n size: string;\n background?: string;\n usage: Usage;\n};\n\nconst MIME_BY_FORMAT: Record<string, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n};\n\n/**\n * The vendor's `usage` onto gemi's.\n *\n * Separate from `toUsage` in `stream.ts` rather than shared with it. The three\n * totals have the same names, so sharing looked right; the details objects do\n * not. `toUsage` reads `output_tokens_details.reasoning_tokens` and\n * `input_tokens_details.cached_tokens`, and this endpoint sends `image_tokens`\n * and `text_tokens` in both — so reusing it silently discards the only part of\n * this payload that is specific to images, which is the part `imageInputTokens`\n * exists for.\n */\nexport function toImageUsage(raw: any): Usage {\n const inputTokens = Number(raw?.input_tokens ?? 0);\n const outputTokens = Number(raw?.output_tokens ?? 0);\n const usage: Usage = {\n inputTokens,\n outputTokens,\n totalTokens: Number(raw?.total_tokens ?? inputTokens + outputTokens),\n };\n const inImages = raw?.input_tokens_details?.image_tokens;\n if (typeof inImages === \"number\") usage.imageInputTokens = inImages;\n const outImages = raw?.output_tokens_details?.image_tokens;\n if (typeof outImages === \"number\") usage.imageOutputTokens = outImages;\n return usage;\n}\n\nfunction decodeBase64(b64: string): Uint8Array {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\n\nfunction parseImageResponse(json: any): ImageResponse {\n const first = json?.data?.[0];\n const b64 = first?.b64_json;\n if (typeof b64 !== \"string\" || b64.length === 0) {\n // Not an assertion for its own sake: the endpoint has a `url` response mode\n // for other models, and a deployment that answered with one would otherwise\n // reach the caller as an empty Blob.\n throw new ImageRequestError({\n code: \"provider_error\",\n message: \"The provider answered an image call with no base64 image data.\",\n retryable: false,\n });\n }\n\n const format = typeof json.output_format === \"string\" ? json.output_format : \"png\";\n return {\n bytes: decodeBase64(b64),\n mimeType: MIME_BY_FORMAT[format] ?? `image/${format}`,\n size: typeof json.size === \"string\" ? json.size : \"\",\n ...(typeof json.background === \"string\" ? { background: json.background } : {}),\n usage: toImageUsage(json.usage),\n };\n}\n\ntype CallOptions = { signal?: AbortSignal };\n\nasync function post(\n url: string,\n init: RequestInit,\n endpoint: ImagesEndpoint,\n options: CallOptions,\n): Promise<ImageResponse> {\n let response: Response;\n try {\n response = await requestWithRetry(url, init, {\n maxRetries: endpoint.maxRetries,\n timeoutMs: endpoint.timeoutMs,\n // The whole point. A timeout here means the render probably happened and\n // we hung up; retrying pays for it again. 429 and 5xx are still retried.\n retryTimeouts: false,\n signal: options.signal,\n fetchImpl: endpoint.fetchImpl,\n });\n } catch (error) {\n // An abort is the caller's own doing and must stay recognisable as one —\n // `stop()` is not a provider failure.\n if (options.signal?.aborted) throw error;\n throw new ImageRequestError(normalizeProviderError(error), { cause: error });\n }\n\n return parseImageResponse(await response.json());\n}\n\nexport async function generateImage(\n endpoint: ImagesEndpoint,\n body: ImageGenerationRequest,\n options: CallOptions = {},\n): Promise<ImageResponse> {\n return await post(\n endpoint.generationsUrl,\n {\n method: \"POST\",\n headers: { ...(await endpoint.headers()), \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n endpoint,\n options,\n );\n}\n\n/**\n * An edit, as multipart.\n *\n * `image[]` repeated once per input, measured — two parts reported 2048 input\n * image tokens against 1024 for one. No `content-type` header, for the reason\n * `uploadFile` gives: the boundary is generated with the body, and setting the\n * header by hand fails with a parser error that names nothing useful.\n */\nexport async function editImage(\n endpoint: ImagesEndpoint,\n form: FormData,\n options: CallOptions = {},\n): Promise<ImageResponse> {\n return await post(\n endpoint.editsUrl,\n { method: \"POST\", headers: await endpoint.headers(), body: form },\n endpoint,\n options,\n );\n}\n",
12
+ "import { normalizeProviderError, ProviderHttpError, ProviderTimeoutError } from \"./errors\";\n\nexport type FetchLike = (input: string, init: RequestInit) => Promise<Response>;\n\nexport type RequestOptions = {\n maxRetries: number;\n timeoutMs: number;\n signal?: AbortSignal;\n /** Injected by the tests. Nothing here should ever need a real socket to be\n * exercised, and a retry policy that is only tested against a live API is\n * one that gets tested during an outage. */\n fetchImpl?: FetchLike;\n /** Takes the caller's signal so the default can clear its timer rather than\n * hold the process open for a backoff nobody is waiting for any more. An\n * injected sleep may ignore it: the wait is raced against the abort either\n * way. */\n sleep?: (ms: number, signal?: AbortSignal) => Promise<void>;\n random?: () => number;\n now?: () => number;\n /**\n * Whether a timeout is worth another attempt. Defaults to `true`.\n *\n * THE ANSWER DEPENDS ON WHAT THE TIMER BOUNDS, which is why this is a\n * parameter and not a policy. For a streamed call the timer covers getting a\n * response and is cleared once the headers land (see `requestWithRetry`), so a\n * timeout means the provider never started answering: nothing was generated,\n * nothing was billed, and retrying is both cheap and likely to work.\n *\n * For a call that returns its whole result in one body, the same timer bounds\n * the *work*. A timeout there means the work probably happened and we hung up\n * before hearing about it — so a retry pays for it a second time, at the same\n * latency, and most likely times out again.\n *\n * MEASURED, because the margin is what makes this urgent rather than\n * theoretical. One `gpt-image-2` render at `quality: \"high\"`, `1536x1024`,\n * against a real Azure deployment: **117.8 seconds**, against a\n * `DEFAULT_TIMEOUT_MS` of 120_000. Two seconds of headroom, about 2%. Any\n * variance crosses it, and with retries on, one such request becomes three\n * two-minute renders, six minutes of waiting, three images billed, and a\n * `ProviderTimeoutError` returned to the caller. (For scale: the same model at\n * `low`/1024² answers in 15s, and an edit in 14–20s.)\n *\n * So the image path passes `false` and the streaming path leaves it alone. A\n * 429 or a 5xx is still retried in both cases: those say the request did not\n * run, which is the opposite of what a timeout says here.\n */\n retryTimeouts?: boolean;\n};\n\n/** The floor of the backoff. Doubling from here gives 0.5s, 1s, 2s, 4s — long\n * enough to outlast a rate-limit window, short enough that a user watching a\n * stream does not assume it died. */\nconst BASE_DELAY_MS = 500;\nexport const MAX_DELAY_MS = 20_000;\n\n/**\n * `Retry-After` in either of its two legal forms: seconds, or an HTTP date.\n *\n * Honoured rather than ignored because the server knows when its window\n * reopens and we are guessing. A value in the past clamps to zero; a garbage\n * value falls back to the computed backoff, since a header we cannot read is\n * not a reason to give up on the request.\n *\n * Parsed here, bounded at the call site: this returns what the server said.\n */\nexport function parseRetryAfter(value: string | null | undefined, now: number): number | undefined {\n if (!value) return undefined;\n const trimmed = value.trim();\n if (/^\\d+(\\.\\d+)?$/.test(trimmed)) return Math.max(0, Number(trimmed) * 1000);\n const date = Date.parse(trimmed);\n if (Number.isNaN(date)) return undefined;\n return Math.max(0, date - now);\n}\n\n/**\n * Exponential backoff with full jitter. The jitter is the point: without it,\n * every request that got rate limited at the same moment retries at the same\n * moment, and the second wave is the same size as the first.\n */\nexport function backoffDelayMs(attempt: number, random: () => number): number {\n const ceiling = Math.min(MAX_DELAY_MS, BASE_DELAY_MS * 2 ** attempt);\n return Math.round(ceiling * (0.5 + random() * 0.5));\n}\n\nfunction isRetryableStatus(status: number): boolean {\n // 429 and the 5xx range. 409 is in here because OpenAI answers it for a\n // request that raced with something on their side, and it succeeds on the\n // second try.\n return status === 429 || status === 408 || status === 409 || status >= 500;\n}\n\n/**\n * One retry policy, not two.\n *\n * The status table alone cannot answer this: a 429 from a spent quota is a 429\n * every time for the rest of the month, and retrying it turns one billing\n * problem into `maxRetries` of them and a much later error message. Only the\n * body says which 429 this is, and `normalizeProviderError` is where that is\n * already read — so it is asked here rather than left to disagree with a table\n * after the retries have happened.\n *\n * It is a veto, not a second opinion: the table decides which statuses are\n * worth another attempt and the normalized verdict can only take one away.\n * That way a future change to the error mapping cannot start retrying 400s.\n */\nfunction shouldRetry(status: number, error: ProviderHttpError): boolean {\n return isRetryableStatus(status) && normalizeProviderError(error).retryable;\n}\n\nfunction abortReason(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException(\"The operation was aborted.\", \"AbortError\");\n}\n\nfunction defaultSleep(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(abortReason(signal));\n },\n { once: true },\n );\n });\n}\n\n/**\n * One HTTP call, retried.\n *\n * The timeout covers getting a response, not consuming one. A streamed answer\n * legitimately takes minutes, and a timeout that kept running would cut off\n * long completions at exactly the point where they were most expensive to\n * abandon — so the timer is cleared once the headers land, and only the\n * caller's own signal can end the body.\n */\nexport async function requestWithRetry(\n url: string,\n init: RequestInit,\n options: RequestOptions,\n): Promise<Response> {\n const doFetch = options.fetchImpl ?? ((u: string, i: RequestInit) => fetch(u, i));\n const sleep = options.sleep ?? defaultSleep;\n const random = options.random ?? Math.random;\n const now = options.now ?? Date.now;\n const maxRetries = Math.max(0, options.maxRetries);\n\n /**\n * A backoff nobody can interrupt is a `stop()` that does not stop.\n *\n * The wait is where a retrying request spends nearly all of its time — up to\n * 20 seconds of it — and noticing the abort only at the top of the next\n * iteration means the run holds its state, and the user watches a cancelled\n * stream, for the rest of the window. So the sleep loses a race with the\n * signal, and the abort propagates like any other.\n */\n const wait = async (ms: number): Promise<void> => {\n const signal = options.signal;\n if (!signal) return await sleep(ms);\n signal.throwIfAborted();\n let onAbort: (() => void) | undefined;\n try {\n await Promise.race([\n sleep(ms, signal),\n new Promise<never>((_resolve, reject) => {\n onAbort = () => reject(abortReason(signal));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n } finally {\n if (onAbort) signal.removeEventListener(\"abort\", onAbort);\n }\n };\n\n let lastError: unknown;\n\n for (let attempt = 0; attempt <= maxRetries; attempt++) {\n options.signal?.throwIfAborted();\n\n const controller = new AbortController();\n const abortOuter = () => controller.abort(options.signal?.reason);\n options.signal?.addEventListener(\"abort\", abortOuter, { once: true });\n\n let timedOut = false;\n const timer =\n options.timeoutMs > 0\n ? setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, options.timeoutMs)\n : undefined;\n\n let response: Response;\n try {\n response = await doFetch(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (timer !== undefined) clearTimeout(timer);\n options.signal?.removeEventListener(\"abort\", abortOuter);\n // The caller's abort wins outright — `stop()` means stop, not \"stop and\n // try three more times\".\n if (options.signal?.aborted) throw error;\n lastError = timedOut ? new ProviderTimeoutError(options.timeoutMs) : error;\n // Checked before the attempt count, because this is not \"no attempts\n // left\" — it is \"another attempt is the wrong thing to do\". See\n // `RequestOptions.retryTimeouts`.\n if (timedOut && options.retryTimeouts === false) throw lastError;\n if (attempt === maxRetries) throw lastError;\n await wait(backoffDelayMs(attempt, random));\n continue;\n }\n\n if (timer !== undefined) clearTimeout(timer);\n\n if (response.ok) {\n // Deliberately left attached: the caller is about to read a stream, and\n // its own signal has to keep reaching it.\n return response;\n }\n\n options.signal?.removeEventListener(\"abort\", abortOuter);\n const body = await readErrorBody(response);\n const error = new ProviderHttpError(\n response.status,\n body,\n response.headers.get(\"x-request-id\") ?? undefined,\n parseRetryAfter(response.headers.get(\"retry-after\"), now()),\n );\n\n if (attempt === maxRetries || !shouldRetry(response.status, error)) throw error;\n\n // Bounded, because `Retry-After` is a number the server chooses and a daily\n // quota answers it in hours. Sleeping through that holds the run open for\n // the whole window; waking early costs one request that gets the same 429\n // and a longer, still-bounded backoff after it. Without the header, a 429\n // whose message names the wait (Azure: \"Please retry after 30 seconds\")\n // is believed too.\n const retryAfter =\n error.retryAfter ??\n (response.status === 429 ? normalizeProviderError(error).retryAfter : undefined);\n await wait(\n retryAfter === undefined\n ? backoffDelayMs(attempt, random)\n : Math.min(retryAfter, MAX_DELAY_MS),\n );\n lastError = error;\n }\n\n // Unreachable: the loop either returns or throws. Kept honest rather than\n // asserted away.\n throw lastError ?? new Error(\"Provider request failed with no response.\");\n}\n\nasync function readErrorBody(response: Response): Promise<unknown> {\n let text: string;\n try {\n text = await response.text();\n } catch {\n return null;\n }\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n",
13
+ "import type { AgentError, Usage } from \"../types\";\nimport type { ProviderTarget } from \"./endpoints\";\nimport { normalizeProviderError } from \"./errors\";\nimport { requestWithRetry, type FetchLike } from \"./http\";\n\n/**\n * One image call, retried where retrying is free and not where it costs a render.\n *\n * MEASURED against a `gpt-image-2` deployment, api-version `preview`, and every\n * decision in this file comes from one of these rather than from documentation —\n * which disagreed with the endpoint on three separate points:\n *\n * 200 {base}/images/generations low, 1024x1024, png 15.0s\n * 200 {base}/images/generations low, 1024x1024, png, transparent 14.6s\n * 400 {base}/images/generations high, 1536x1024, webp\n * → \"Invalid value: 'webp'. Supported values are: 'png' and 'jpeg'.\"\n * 200 {base}/images/generations high, 1536x1024, png 117.8s\n * 200 {base}/images/edits low, one image[], no mask, no size 13.7s\n * → answered size \"1254x1254\", which is neither what was asked for\n * nor a multiple of 16\n * 200 {base}/images/edits low, one image[], mask, 1024x1024 14.0s\n * 200 {base}/images/edits low, two image[], 1024x1024 20.2s\n *\n * The documentation was wrong that `webp` is accepted, wrong that this model\n * cannot do transparency, and wrong about the `usage` field names. The response\n * shape, verbatim:\n *\n * { \"created\": 1790519365, \"background\": \"opaque\", \"output_format\": \"png\",\n * \"quality\": \"low\", \"size\": \"1024x1024\",\n * \"data\": [{ \"b64_json\": \"…\" }],\n * \"usage\": { \"input_tokens\": 15,\n * \"input_tokens_details\": { \"image_tokens\": 0, \"text_tokens\": 15 },\n * \"output_tokens\": 196,\n * \"output_tokens_details\": { \"image_tokens\": 196, \"text_tokens\": 0 },\n * \"total_tokens\": 211 } }\n *\n * There is no `revised_prompt` in any of the five successful responses. See\n * `ImageModel` for why the field is not on the public result type.\n */\nexport type ImagesEndpoint = {\n generationsUrl: string;\n editsUrl: string;\n /** Async for the same reason the Responses endpoint's is: Entra tokens expire\n * mid-conversation, so the credential is read per request. */\n headers: () => Promise<Record<string, string>>;\n timeoutMs: number;\n maxRetries: number;\n fetchImpl?: FetchLike;\n};\n\n/**\n * Longer than the Responses default, because here the timer bounds the work.\n *\n * A `high` / 1536x1024 render measured 117.8 seconds against a 120_000 default —\n * two seconds of headroom. That is not a timeout, it is a coin flip, and losing\n * it used to mean three renders billed (see `RequestOptions.retryTimeouts`). 300\n * seconds is chosen to clear the measured worst case with room for a busier\n * resource and a larger size, and an app that knows its own ceiling sets\n * `timeoutMs` in config.\n */\nexport const DEFAULT_IMAGE_TIMEOUT_MS = 300_000;\n\nexport function imagesEndpoint(target: ProviderTarget): ImagesEndpoint {\n return {\n generationsUrl: `${target.base}/images/generations${target.query}`,\n editsUrl: `${target.base}/images/edits${target.query}`,\n headers: target.headers,\n timeoutMs: target.timeoutMs,\n maxRetries: target.maxRetries,\n };\n}\n\n/**\n * What an image call failed with, as a normalized code rather than a vendor body.\n *\n * A one-shot call throws where the streaming path emits an `error` event — a\n * promise has nowhere else to put it, and a caller awaiting bytes should not have\n * to check a union. The normalized `AgentError` is carried so an app can branch\n * on `rate_limited` exactly as it would for a text call.\n *\n * The vendor's own body is on `cause` and deliberately NOT in `message`. Inside a\n * tool a throw becomes a tool result the model reads (#446), and a provider error\n * body is not something to hand a model verbatim when a sentence will do.\n */\nexport class ImageRequestError extends Error {\n readonly code: AgentError[\"code\"];\n readonly retryable: boolean;\n /** For a retryable `rate_limited`: the wait the provider asked for, in ms. */\n readonly retryAfter?: number;\n\n constructor(error: AgentError, options: { cause?: unknown } = {}) {\n super(error.message, options);\n this.name = \"ImageRequestError\";\n this.code = error.code;\n this.retryable = error.retryable;\n if (error.retryAfter !== undefined) this.retryAfter = error.retryAfter;\n }\n}\n\n/** The JSON body of a generation. Vendor field names, built by `ImageModel`. */\nexport type ImageGenerationRequest = {\n model: string;\n prompt: string;\n size?: string;\n quality?: string;\n background?: string;\n output_format?: string;\n output_compression?: number;\n};\n\n/** What every image call answers, before `ImageModel` gives it a public shape. */\nexport type ImageResponse = {\n /** Decoded from `b64_json`. */\n bytes: Uint8Array;\n mimeType: string;\n /** Read off the response, never assumed — an edit with no `size` answered\n * `1254x1254`. */\n size: string;\n background?: string;\n usage: Usage;\n};\n\nconst MIME_BY_FORMAT: Record<string, string> = {\n png: \"image/png\",\n jpeg: \"image/jpeg\",\n};\n\n/**\n * The vendor's `usage` onto gemi's.\n *\n * Separate from `toUsage` in `stream.ts` rather than shared with it. The three\n * totals have the same names, so sharing looked right; the details objects do\n * not. `toUsage` reads `output_tokens_details.reasoning_tokens` and\n * `input_tokens_details.cached_tokens`, and this endpoint sends `image_tokens`\n * and `text_tokens` in both — so reusing it silently discards the only part of\n * this payload that is specific to images, which is the part `imageInputTokens`\n * exists for.\n */\nexport function toImageUsage(raw: any): Usage {\n const inputTokens = Number(raw?.input_tokens ?? 0);\n const outputTokens = Number(raw?.output_tokens ?? 0);\n const usage: Usage = {\n inputTokens,\n outputTokens,\n totalTokens: Number(raw?.total_tokens ?? inputTokens + outputTokens),\n };\n const inImages = raw?.input_tokens_details?.image_tokens;\n if (typeof inImages === \"number\") usage.imageInputTokens = inImages;\n const outImages = raw?.output_tokens_details?.image_tokens;\n if (typeof outImages === \"number\") usage.imageOutputTokens = outImages;\n return usage;\n}\n\nfunction decodeBase64(b64: string): Uint8Array {\n const binary = atob(b64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes;\n}\n\nfunction parseImageResponse(json: any): ImageResponse {\n const first = json?.data?.[0];\n const b64 = first?.b64_json;\n if (typeof b64 !== \"string\" || b64.length === 0) {\n // Not an assertion for its own sake: the endpoint has a `url` response mode\n // for other models, and a deployment that answered with one would otherwise\n // reach the caller as an empty Blob.\n throw new ImageRequestError({\n code: \"provider_error\",\n message: \"The provider answered an image call with no base64 image data.\",\n retryable: false,\n });\n }\n\n const format = typeof json.output_format === \"string\" ? json.output_format : \"png\";\n return {\n bytes: decodeBase64(b64),\n mimeType: MIME_BY_FORMAT[format] ?? `image/${format}`,\n size: typeof json.size === \"string\" ? json.size : \"\",\n ...(typeof json.background === \"string\" ? { background: json.background } : {}),\n usage: toImageUsage(json.usage),\n };\n}\n\ntype CallOptions = { signal?: AbortSignal };\n\nasync function post(\n url: string,\n init: RequestInit,\n endpoint: ImagesEndpoint,\n options: CallOptions,\n): Promise<ImageResponse> {\n let response: Response;\n try {\n response = await requestWithRetry(url, init, {\n maxRetries: endpoint.maxRetries,\n timeoutMs: endpoint.timeoutMs,\n // The whole point. A timeout here means the render probably happened and\n // we hung up; retrying pays for it again. 429 and 5xx are still retried.\n retryTimeouts: false,\n signal: options.signal,\n fetchImpl: endpoint.fetchImpl,\n });\n } catch (error) {\n // An abort is the caller's own doing and must stay recognisable as one —\n // `stop()` is not a provider failure.\n if (options.signal?.aborted) throw error;\n throw new ImageRequestError(normalizeProviderError(error), { cause: error });\n }\n\n return parseImageResponse(await response.json());\n}\n\nexport async function generateImage(\n endpoint: ImagesEndpoint,\n body: ImageGenerationRequest,\n options: CallOptions = {},\n): Promise<ImageResponse> {\n return await post(\n endpoint.generationsUrl,\n {\n method: \"POST\",\n headers: { ...(await endpoint.headers()), \"content-type\": \"application/json\" },\n body: JSON.stringify(body),\n },\n endpoint,\n options,\n );\n}\n\n/**\n * An edit, as multipart.\n *\n * `image[]` repeated once per input, measured — two parts reported 2048 input\n * image tokens against 1024 for one. No `content-type` header, for the reason\n * `uploadFile` gives: the boundary is generated with the body, and setting the\n * header by hand fails with a parser error that names nothing useful.\n */\nexport async function editImage(\n endpoint: ImagesEndpoint,\n form: FormData,\n options: CallOptions = {},\n): Promise<ImageResponse> {\n return await post(\n endpoint.editsUrl,\n { method: \"POST\", headers: await endpoint.headers(), body: form },\n endpoint,\n options,\n );\n}\n",
14
14
  "import {\n azureTarget,\n openAITarget,\n type AzureConfig,\n type ProviderConfig,\n} from \"./providers/endpoints\";\nimport { normalizeProviderError } from \"./providers/errors\";\nimport {\n DEFAULT_IMAGE_TIMEOUT_MS,\n editImage,\n generateImage,\n imagesEndpoint,\n type ImageGenerationRequest,\n type ImageResponse,\n type ImagesEndpoint,\n} from \"./providers/images\";\nimport type { AgentError } from \"./types\";\n\n/**\n * A provider that makes images, separate from the one that makes text.\n *\n * WHY NOT A METHOD ON `AgentProvider`. `provider.generateImage(...)` was the\n * requested shape and it does not survive two facts about this codebase.\n *\n * First, `AgentProvider` is abstract with `stream` and `upload`, and a third\n * abstract member breaks every implementor — including gemi's own `FakeProvider`\n * (duck-typed) and `RecordingProvider` (hand-implements all five members). A\n * capability that only one vendor surface has should not be a hole punched in the\n * interface every other surface has to fill.\n *\n * Second, and this is the real one: an image deployment would have to lie about\n * itself. `capabilities` is computed in the constructor from the model id, and\n * `capabilitiesForModel` deliberately grants an unrecognised id *every*\n * capability — so `AzureOpenAIProvider.model(\"gpt-image-2\")` claims structured\n * output, reasoning and tool search, and exposes a `stream()` that is callable\n * and broken. Splitting the hierarchy makes the wrong call unspellable instead\n * of merely wrong, which is the same reasoning `ScopedAttachments` is built on.\n *\n * What the two hierarchies *do* share is the part worth sharing: which host,\n * which credential, and Azure's api-version fork. That is `providers/endpoints.ts`\n * and neither class reimplements it.\n */\nexport abstract class ImageProvider {\n /** The model, or on Azure the model the deployment serves. */\n abstract readonly model: string;\n\n /** For autocomplete only; any string is accepted, because a model released\n * next Tuesday must not need a gemi release to use. */\n static models(): readonly string[] {\n return [];\n }\n\n protected abstract endpoint(): ImagesEndpoint;\n\n /** What goes in the body's `model`. The deployment, on Azure. */\n protected modelName(): string {\n return this.model;\n }\n\n async generate(params: ImageProviderParams): Promise<ImageResponse> {\n return await generateImage(this.endpoint(), this.body(params), { signal: params.signal });\n }\n\n /**\n * An edit. `images` is required and non-empty — see `ImageModel.edit` for why\n * that is a separate method rather than an optional field on `generate`.\n */\n async edit(params: ImageProviderEditParams): Promise<ImageResponse> {\n const form = new FormData();\n for (const [key, value] of Object.entries(this.body(params))) {\n if (value !== undefined) form.set(key, String(value));\n }\n // Repeated `image[]`, measured: two parts reported 2048 input image tokens\n // against 1024 for one, so each part is read as its own image rather than\n // the last one winning.\n for (const image of params.images) form.append(\"image[]\", image, image.name);\n if (params.mask) form.set(\"mask\", params.mask, params.mask.name);\n return await editImage(this.endpoint(), form, { signal: params.signal });\n }\n\n /**\n * Maps gemi's params onto the vendor's field names.\n *\n * On the base class rather than in each subclass: OpenAI and Azure take the\n * same body, and the only difference is that Azure's `model` names a\n * deployment — which `modelName()` answers.\n */\n protected body(params: ImageProviderParams): ImageGenerationRequest {\n return {\n model: this.modelName(),\n prompt: params.prompt,\n ...(params.size ? { size: params.size } : {}),\n ...(params.quality ? { quality: params.quality } : {}),\n ...(params.background ? { background: params.background } : {}),\n ...(params.format ? { output_format: params.format } : {}),\n ...(params.compression !== undefined ? { output_compression: params.compression } : {}),\n };\n }\n\n /** As `AgentProvider.normalizeError`, so an app branches on `rate_limited`\n * without caring which surface produced it. */\n normalizeError(error: unknown): AgentError {\n return normalizeProviderError(error);\n }\n}\n\nexport type ImageProviderParams = {\n prompt: string;\n size?: string;\n quality?: string;\n background?: string;\n format?: string;\n compression?: number;\n signal?: AbortSignal;\n};\n\nexport type ImageProviderEditParams = ImageProviderParams & {\n images: File[];\n mask?: File;\n};\n\n/**\n * Autocomplete, not a gate — and short on purpose. These are the image models\n * with a Responses-era `/images` surface; `gpt-image-2` is the one measured.\n */\nconst OPENAI_IMAGE_MODELS = [\"gpt-image-2\", \"gpt-image-1.5\", \"gpt-image-1\"] as const;\n\nexport class OpenAIImageProvider extends ImageProvider {\n readonly model: string;\n protected readonly config: ProviderConfig;\n\n constructor(model: string, config: ProviderConfig = {}) {\n super();\n this.model = model;\n this.config = config;\n }\n\n static model(model: string, config?: ProviderConfig): OpenAIImageProvider {\n return new OpenAIImageProvider(model, config);\n }\n\n static models(): readonly string[] {\n return OPENAI_IMAGE_MODELS;\n }\n\n protected endpoint(): ImagesEndpoint {\n return imagesEndpoint(openAITarget(this.config, { timeoutMs: DEFAULT_IMAGE_TIMEOUT_MS }));\n }\n}\n\n/**\n * Azure's image surface, which is the same resource and credential as its chat\n * surface — an app that already configured `AZURE_OPENAI_*` for an agent writes\n * only the deployment name here.\n *\n * `.model()`, not `.deployment()`, for the symmetry `AzureOpenAIProvider` keeps:\n * apps name a model and `AzureConfig.deployment` is the override for a resource\n * whose deployment is called something else.\n */\nexport class AzureOpenAIImageProvider extends ImageProvider {\n readonly model: string;\n protected readonly config: AzureConfig;\n\n constructor(model: string, config: AzureConfig = {}) {\n super();\n this.model = model;\n this.config = config;\n }\n\n static model(model: string, config?: AzureConfig): AzureOpenAIImageProvider {\n return new AzureOpenAIImageProvider(model, config);\n }\n\n static models(): readonly string[] {\n return OPENAI_IMAGE_MODELS;\n }\n\n protected modelName(): string {\n return this.config.deployment ?? this.model;\n }\n\n protected endpoint(): ImagesEndpoint {\n return imagesEndpoint(azureTarget(this.config, { timeoutMs: DEFAULT_IMAGE_TIMEOUT_MS }));\n }\n}\n",
15
15
  "import type { AgentMessage } from \"../types\";\nimport { ProviderHttpError } from \"./errors\";\nimport type { ResponsesInputItem, ResponsesRequest } from \"./request\";\n\n/**\n * A stored file the provider will not read, and what to do about it (#684).\n *\n * THE FAILURE. A `FilePart` lives in the thread's history and goes back up on\n * every request. If the provider refuses its `file_id` — an id from the wrong\n * upload purpose, a file that was deleted or expired, a resource that no longer\n * owns it — the turn that added it fails with a 400, and so does every turn\n * after it, because the history that holds the part is the history every turn\n * sends. The user's only way out was a new thread.\n *\n * THE FIX. When a 400 names a file block of the request, that block is swapped\n * for a line of text saying the attachment could not be read, and the request\n * is sent again. The model is told, so it can tell the user rather than answer\n * as though it had read the file. `Agent` is told too (a `file-rejected`\n * provider event), and marks the stored part `providerRejected` so later turns\n * send the note instead of the id and do not pay for a failed request first.\n *\n * WHAT A REFUSAL LOOKS LIKE, MEASURED against a live Azure resource (gpt-6-sol,\n * `/openai/v1`, `api-version=preview`, 2026-10-01). Each body is recorded in\n * `__fixtures__` and the tests read those files:\n *\n * A `user_data` id (`azure-error-file-id-prefix.json`): `param` points at the\n * block, `input[2].content[1].file_id`, and the message says `Expected an\n * ID that begins with 'assistant'`. With TWO such ids in one request only\n * the first is named, which is why more than one retry is allowed below.\n * An id that does not exist, or a file that was deleted\n * (`azure-error-files-not-found.json`, `azure-error-file-deleted.json`):\n * `param: null`, and the message lists every missing id at once —\n * `Files [assistant-…, assistant-…] were not found due to ownership\n * verification failure.` So the ids are read out of the message, by\n * matching the ids the request actually sent rather than by parsing the\n * sentence, which also covers OpenAI's wording without having measured it.\n * The right id in the wrong block (`azure-error-file-type.json`): `param:\n * \"input\"` and `… but got .png.`, naming neither the block nor the id. The\n * block is found by the extension and the block type the message names,\n * and only when that settles on exactly one file: guessing between two\n * would hide a file that was fine.\n *\n * Anything else is left alone and fails the turn as it did before. In\n * particular a refusal that names no file in this request is not retried: a\n * retry is only worth sending when something about the request has changed.\n */\n\n/** What the request builder knew about each file id it sent, for the note. */\nexport type SentFile = { name?: string; mimeType?: string };\n\n/**\n * How many times one call may be re-sent for a rejected file. Each retry has to\n * take out a file the previous ones did not, so this bounds requests, not\n * files: Azure names one bad block per 400 (`param` holds a single path), and\n * a thread that picked up several `user_data` ids before #682 would otherwise\n * clear one per turn and fail every turn until it ran out.\n */\nexport const MAX_FILE_REJECTION_RETRIES = 3;\n\n/** The file ids in a history, with the name each was attached under. */\nexport function sentFiles(messages: AgentMessage[]): Map<string, SentFile> {\n const files = new Map<string, SentFile>();\n for (const message of messages) {\n for (const part of message.content ?? []) {\n if (part.type !== \"file\" || !part.fileId || files.has(part.fileId)) continue;\n files.set(part.fileId, { name: part.name, mimeType: part.mimeType });\n }\n }\n return files;\n}\n\n/**\n * The file ids a provider error blames, among the ones `body` sent.\n *\n * Empty when the error is not a 400/404 from the API, or names nothing in this\n * request — which is the signal not to retry.\n */\nexport function rejectedFileIds(\n body: ResponsesRequest,\n error: unknown,\n files: Map<string, SentFile> = new Map(),\n): string[] {\n if (!(error instanceof ProviderHttpError)) return [];\n if (error.status !== 400 && error.status !== 404) return [];\n const detail = errorDetail(error.body);\n if (!detail) return [];\n\n const blocks = fileBlocks(body.input);\n if (blocks.length === 0) return [];\n\n // 1. The block, by its path. The most precise answer there is.\n const path = /^input\\[(\\d+)\\]\\.content\\[(\\d+)\\]\\.file_id$/.exec(detail.param ?? \"\");\n if (path) {\n const item = body.input[Number(path[1])];\n const block = contentOf(item)[Number(path[2])];\n const id = block && typeof block.file_id === \"string\" ? block.file_id : undefined;\n if (id) return [id];\n }\n\n // 2. The ids, by name. Matched against what was sent, so a message that\n // mentions an id this request never held cannot blame one that it did.\n const message = detail.message ?? \"\";\n const named = unique(blocks.map((block) => block.fileId).filter((id) => mentions(message, id)));\n if (named.length > 0) return named;\n\n // 3. The wrong block for the file's type. No id and no path, so it has to be\n // worked out, and it is only worth doing when the answer is unambiguous.\n const wrongType =\n /Expected (image type|context stuffing file type) to be a supported format:.*but got \\.([a-z0-9]+)\\.?\\s*$/is.exec(\n message,\n );\n if (wrongType) {\n const blockType = wrongType[1]!.toLowerCase() === \"image type\" ? \"input_image\" : \"input_file\";\n const extension = wrongType[2]!.toLowerCase();\n const candidates = unique(\n blocks.filter((block) => block.type === blockType).map((block) => block.fileId),\n );\n const byName = candidates.filter((id) =>\n (files.get(id)?.name ?? \"\").trim().toLowerCase().endsWith(`.${extension}`),\n );\n if (byName.length === 1) return byName;\n if (byName.length === 0 && candidates.length === 1) return candidates;\n }\n\n return [];\n}\n\n/**\n * `body` with every block holding one of `fileIds` replaced by a note.\n *\n * A copy: the caller's body is what was sent, and the next attempt is a\n * different request.\n */\nexport function withoutFiles(\n body: ResponsesRequest,\n fileIds: Set<string>,\n files: Map<string, SentFile> = new Map(),\n): ResponsesRequest {\n return {\n ...body,\n input: body.input.map((item) => {\n const content = contentOf(item);\n if (!content.some((block) => isRejected(block, fileIds))) return item;\n return {\n ...item,\n content: content.map((block) =>\n isRejected(block, fileIds)\n ? { type: \"input_text\", text: unreadableNote(files.get(String(block.file_id))?.name) }\n : block,\n ),\n };\n }),\n };\n}\n\n/**\n * What the model reads where the file would have been.\n *\n * It says the file was not read, so the model does not describe a document it\n * never saw, and it says the provider refused it, so \"please re-upload it\" is\n * the obvious next step rather than something the model has to guess at. The\n * name is JSON-quoted for the reason `attachmentLine` gives: it is the user's,\n * and can hold anything.\n */\nexport function unreadableNote(name: string | undefined): string {\n const label = name ? `attachment ${JSON.stringify(name)}` : \"an attachment\";\n return `[${label} could not be read by the provider and is not shown to you. Tell the user if it matters to the answer; uploading it again may help.]`;\n}\n\nfunction isRejected(block: Record<string, unknown>, fileIds: Set<string>): boolean {\n return typeof block.file_id === \"string\" && fileIds.has(block.file_id);\n}\n\nfunction contentOf(item: ResponsesInputItem | undefined): Record<string, unknown>[] {\n const content = item?.content;\n return Array.isArray(content) ? (content as Record<string, unknown>[]) : [];\n}\n\nfunction fileBlocks(input: ResponsesInputItem[]): { type: string; fileId: string }[] {\n const out: { type: string; fileId: string }[] = [];\n for (const item of input) {\n for (const block of contentOf(item)) {\n if (typeof block.file_id === \"string\" && block.file_id) {\n out.push({ type: String(block.type), fileId: block.file_id });\n }\n }\n }\n return out;\n}\n\nfunction errorDetail(body: unknown): { message?: string; param?: string } | null {\n if (!body || typeof body !== \"object\") return null;\n const wrapper = body as { error?: unknown };\n const inner = (wrapper.error && typeof wrapper.error === \"object\" ? wrapper.error : body) as {\n message?: unknown;\n param?: unknown;\n };\n return {\n message: typeof inner.message === \"string\" ? inner.message : undefined,\n param: typeof inner.param === \"string\" ? inner.param : undefined,\n };\n}\n\n/** `id` as a whole token in `message`, so `file-ab` is not blamed for `file-abc`. */\nfunction mentions(message: string, id: string): boolean {\n const escaped = id.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return new RegExp(`(^|[^A-Za-z0-9_-])${escaped}($|[^A-Za-z0-9_-])`).test(message);\n}\n\nfunction unique<T>(values: T[]): T[] {\n return [...new Set(values)];\n}\n",
16
16
  "import type { ProviderEvent } from \"../AgentProvider\";\nimport type { FinishReason, Usage } from \"../types\";\n\n/**\n * The Responses SSE stream to `ProviderEvent`.\n *\n * Also a pure function over chunks, for the same reason the request builder is:\n * everything that breaks here breaks on a byte boundary or a malformed frame,\n * and neither needs a network to reproduce. The tests drive it with recorded\n * fixture strings, including one fed a byte at a time.\n */\n\nexport type SSEMessage = { event: string; data: string; id?: string };\n\n/**\n * Chunks to SSE messages.\n *\n * Written out rather than reached for as a one-liner because every shortcut\n * here is a bug that only shows up under load. A frame split across two chunks\n * is the normal case, not the edge case — TCP has no idea what an event is.\n * Multi-line `data:` is spec, comment lines beginning with `:` are what\n * keepalives look like, and a `\\r\\n` stream is what you get through some\n * proxies.\n */\nexport async function* sseMessages(\n chunks: AsyncIterable<string> | Iterable<string>,\n): AsyncGenerator<SSEMessage> {\n let buffer = \"\";\n let event = \"\";\n let data: string[] = [];\n let id: string | undefined;\n\n const dispatch = (): SSEMessage | null => {\n if (data.length === 0 && !event) return null;\n const message: SSEMessage = { event, data: data.join(\"\\n\"), id };\n event = \"\";\n data = [];\n id = undefined;\n // A frame with a name but no data is legal and carries nothing we want.\n return message.data ? message : null;\n };\n\n const handleLine = (rawLine: string): SSEMessage | null => {\n // Trailing CR from a `\\r\\n` stream. Stripping it here rather than\n // normalizing the whole buffer keeps a CR that lands on a chunk boundary\n // from being counted as a line ending of its own.\n const line = rawLine.endsWith(\"\\r\") ? rawLine.slice(0, -1) : rawLine;\n if (line === \"\") return dispatch();\n // Keepalive. Servers send these so idle connections survive proxies, and a\n // parser that treats one as data corrupts the next real frame.\n if (line.startsWith(\":\")) return null;\n\n const colon = line.indexOf(\":\");\n const field = colon === -1 ? line : line.slice(0, colon);\n let value = colon === -1 ? \"\" : line.slice(colon + 1);\n if (value.startsWith(\" \")) value = value.slice(1);\n\n if (field === \"event\") event = value;\n else if (field === \"data\") data.push(value);\n else if (field === \"id\") id = value;\n return null;\n };\n\n for await (const chunk of chunks as AsyncIterable<string>) {\n buffer += chunk;\n let newline = buffer.indexOf(\"\\n\");\n while (newline !== -1) {\n const line = buffer.slice(0, newline);\n buffer = buffer.slice(newline + 1);\n const message = handleLine(line);\n if (message) yield message;\n newline = buffer.indexOf(\"\\n\");\n }\n }\n\n // A stream that ends without its final blank line still has one frame in it.\n if (buffer.length > 0) {\n const message = handleLine(buffer);\n if (message) yield message;\n }\n const last = dispatch();\n if (last) yield last;\n}\n\ntype ParseOptions = {\n /**\n * Set when the agent declared an `output` schema. The same\n * `response.output_text.delta` carries prose in one case and the JSON of the\n * final answer in the other, and only the caller knows which it asked for.\n */\n structuredOutput?: boolean;\n};\n\ntype PendingCall = { callId: string; name: string; namespace?: string; done: boolean };\n\nexport async function* parseResponsesStream(\n chunks: AsyncIterable<string> | Iterable<string>,\n options: ParseOptions = {},\n): AsyncGenerator<ProviderEvent> {\n // Keyed by `item_id`, because the argument deltas name the item and not the\n // call, and the call id is what the rest of gemi pairs results on.\n const calls = new Map<string, PendingCall>();\n const searchesReported = new Set<string>();\n // The query of the last `tool_search_call`, held for the output that follows\n // it: the live API links the two by nothing but order (see below), and the\n // event is reported off the output, which does not carry the query.\n let searchArguments: unknown;\n let finished = false;\n // What the vendor says answered (#741): `response.model` on the lifecycle\n // frames. Kept from every frame that has it, so a stream that dies after\n // `response.created` still says who it was talking to.\n let responseModel: string | undefined;\n const ended = (reason: FinishReason, usage: Usage): ProviderEvent => ({\n type: \"finish\",\n reason,\n usage,\n ...(responseModel ? { model: responseModel } : {}),\n });\n\n for await (const message of sseMessages(chunks)) {\n if (message.data === \"[DONE]\") break;\n\n let payload: Record<string, any>;\n try {\n payload = JSON.parse(message.data);\n } catch {\n // A frame we cannot read is not a reason to abandon a stream that is\n // otherwise fine; the terminal event is what decides how this ended.\n continue;\n }\n\n // The event name is duplicated in the payload's own `type`. Preferring the\n // payload means a gateway that drops the `event:` line still parses, and\n // the two never disagree in practice.\n const type: string = typeof payload.type === \"string\" ? payload.type : message.event;\n\n const model = payload.response?.model;\n if (typeof model === \"string\" && model) responseModel = model;\n\n switch (type) {\n case \"response.output_text.delta\": {\n const delta = String(payload.delta ?? \"\");\n if (!delta) break;\n yield options.structuredOutput\n ? { type: \"output-delta\", delta }\n : { type: \"text-delta\", delta };\n break;\n }\n\n // Two names for the same thing across model generations: the summary\n // stream and, on models that expose it, the reasoning text itself.\n case \"response.reasoning_summary_text.delta\":\n case \"response.reasoning_text.delta\": {\n const delta = String(payload.delta ?? \"\");\n if (!delta) break;\n yield { type: \"reasoning-delta\", delta, id: payload.item_id };\n break;\n }\n\n case \"response.output_item.added\": {\n const item = payload.item as Record<string, any> | undefined;\n if (!item) break;\n if (item.type === \"function_call\") {\n const itemId = String(item.id ?? payload.item_id ?? item.call_id ?? \"\");\n calls.set(itemId, {\n callId: String(item.call_id ?? itemId),\n // FLAT, and pinned by a test against the recorded stream. A call to\n // a function inside a namespace comes back as\n // `{name:\"getOrder\", namespace:\"crm\"}` — not `\"crm.getOrder\"` — so\n // the name is already the registry key `Agent` looks tools up by,\n // and qualifying it here would break every lookup. The namespace is\n // carried alongside rather than folded in, because a name that is\n // sometimes qualified is a name nothing can match on.\n name: String(item.name ?? \"\"),\n namespace: typeof item.namespace === \"string\" && item.namespace\n ? item.namespace\n : undefined,\n done: false,\n });\n }\n break;\n }\n\n case \"response.function_call_arguments.delta\": {\n const call = calls.get(String(payload.item_id ?? \"\"));\n if (!call) break;\n const argsDelta = String(payload.delta ?? \"\");\n if (!argsDelta) break;\n yield {\n type: \"tool-call-delta\",\n toolCallId: call.callId,\n name: call.name,\n argsDelta,\n // Spread rather than `namespace: call.namespace`: a flat tool has no\n // namespace, and an explicit `undefined` is a key a consumer has to\n // remember to check for.\n ...(call.namespace ? { namespace: call.namespace } : {}),\n };\n break;\n }\n\n case \"response.function_call_arguments.done\": {\n const itemId = String(payload.item_id ?? \"\");\n const call = calls.get(itemId);\n if (!call) break;\n call.done = true;\n yield {\n type: \"tool-call\",\n toolCallId: call.callId,\n name: call.name,\n args: String(payload.arguments ?? \"\"),\n ...(call.namespace ? { namespace: call.namespace } : {}),\n };\n break;\n }\n\n case \"response.output_item.done\": {\n const item = payload.item as Record<string, any> | undefined;\n if (!item) break;\n\n if (item.type === \"function_call\") {\n const itemId = String(item.id ?? payload.item_id ?? item.call_id ?? \"\");\n const call = calls.get(itemId);\n // Belt and braces: a call whose arguments never got a `done` event\n // still has to reach the agent, or the loop waits for a step that\n // will not arrive.\n if (call?.done) break;\n const namespace =\n (typeof item.namespace === \"string\" ? item.namespace : \"\") || call?.namespace;\n yield {\n type: \"tool-call\",\n toolCallId: String(item.call_id ?? itemId),\n name: String(item.name ?? call?.name ?? \"\"),\n args: String(item.arguments ?? \"\"),\n ...(namespace ? { namespace } : {}),\n };\n if (call) call.done = true;\n break;\n }\n\n if (item.type === \"tool_search_call\" || item.type === \"tool_search_output\") {\n // The call and its output are one thing to a user — \"went looking,\n // found these\" — so they collapse into one event. Two mechanisms do\n // that, and which one fires depends on what the server sent:\n //\n // 1. THE PAIR IS LINKED. The documented shape puts\n // `tool_search_call_id` on the output item, naming the call item's\n // id, so both sides key the same and the second one is dropped.\n //\n // 2. THE PAIR IS NOT LINKED, which is what the live API actually\n // sends. In `__fixtures__/openai-tool-search.sse` the call is\n // `tsc_08945…`, the output is `tso_08945…`, `call_id` is null on\n // both and neither carries `tool_search_call_id` — so there is\n // nothing to pair them on. What collapses them there is the\n // `found` check below: only the OUTPUT item carries a `tools`\n // array, and the call item carries the query it ran\n // (`arguments.paths`), which is not a result and is not reported\n // as one.\n //\n // That second one used to be load-bearing and unwritten — the dedup\n // key was doing nothing and the length check was doing all the work\n // by accident. Both are tested now: \"the tool_search call and its\n // output collapse into one event\" in `stream.test.ts` covers (1), and\n // \"nothing in the recording links the search call to its output\"\n // plus \"reports one event from the real stream, despite that\" in\n // `recordings.test.ts` cover (2).\n if (item.type === \"tool_search_call\" && item.arguments !== undefined) {\n searchArguments = item.arguments;\n }\n const found = toolSearchReport(item);\n if (found.loaded.length === 0 && found.namespaces.length === 0) break;\n const key = String(item.tool_search_call_id ?? item.id ?? \"\");\n if (searchesReported.has(key)) break;\n searchesReported.add(key);\n // The query rides along so the search can be replayed (#776). Taken\n // and cleared, so a second search in the same response does not\n // report the first one's query.\n const query = searchArguments;\n searchArguments = undefined;\n yield {\n type: \"tool-search\",\n ...found,\n ...(query !== undefined && query !== null ? { arguments: query } : {}),\n };\n }\n break;\n }\n\n // A refusal is the model declining, and it arrives as its own item rather\n // than as an HTTP status. Reporting it as text would put the refusal in\n // the transcript as if it were an answer.\n case \"response.refusal.done\": {\n yield {\n type: \"error\",\n error: {\n code: \"content_filtered\",\n message: String(payload.refusal ?? \"The model refused to answer.\"),\n retryable: false,\n },\n };\n break;\n }\n\n case \"response.completed\": {\n finished = true;\n yield ended(\"stop\", toUsage(payload.response?.usage));\n break;\n }\n\n /**\n * Two very different endings share this frame, and the old code called\n * both of them \"stop\".\n *\n * `max_output_tokens` is a truncated answer. `content_filter` is Azure\n * blocking the request — verified against\n * `__fixtures__/azure-content-filtered.sse`, where a prompt that trips\n * the filter answers HTTP 200, streams a polite refusal, and ends\n * `response.incomplete` with `incomplete_details.reason` of\n * `content_filter`. Reporting that as a clean stop tells the agent the\n * model finished talking, which is exactly the mistake `content_filtered`\n * exists to prevent: the run reads as a normal answer, the loop takes\n * another step, and nothing anywhere says the content was blocked.\n *\n * The detail comes off Azure's `content_filters` array rather than off\n * the frame, because `incomplete_details` carries the word\n * `content_filter` and nothing else — no category, no severity.\n */\n case \"response.incomplete\": {\n finished = true;\n const usage = toUsage(payload.response?.usage);\n const reason = payload.response?.incomplete_details?.reason;\n if (reason === \"content_filter\") {\n yield {\n type: \"error\",\n error: {\n code: \"content_filtered\",\n message: describeContentFilters(payload.response?.content_filters),\n retryable: false,\n },\n };\n yield ended(\"error\", usage);\n break;\n }\n yield ended(reason === \"max_output_tokens\" ? \"length\" : \"stop\", usage);\n break;\n }\n\n case \"response.failed\":\n case \"error\": {\n finished = true;\n const raw = payload.response?.error ?? payload.error ?? payload;\n yield { type: \"error\", error: normalizeStreamError(raw) };\n yield ended(\"error\", toUsage(payload.response?.usage));\n break;\n }\n }\n\n if (finished) return;\n }\n\n // The connection closed with no terminal event: a dropped socket, a proxy\n // timing out, a process going away mid-answer. Reporting it as a clean stop\n // would tell the agent the model finished talking, and it did not — so this\n // is an error, and a retryable one, because the same request usually works.\n if (!finished) {\n yield {\n type: \"error\",\n error: {\n code: \"provider_error\",\n message: \"The provider stream ended without a terminal event.\",\n retryable: true,\n },\n };\n yield ended(\"error\", emptyUsage());\n }\n}\n\n/**\n * What a tool search actually pulled in.\n *\n * The entries of `tool_search_output.tools` are NAMESPACES, not functions:\n *\n * [{type:\"namespace\", name:\"crm\", tools:[{type:\"function\", name:\"listOrders\"},\n * {type:\"function\", name:\"getOrder\"}]}]\n *\n * — verified against `__fixtures__/openai-tool-search.sse`. Reading `name` off\n * the top level, which is what this did, reported `loaded: [\"crm\"]` for a\n * search that loaded `listOrders` and `getOrder`. The names it reported were\n * not names of tools, and nothing downstream could tell, because a namespace\n * name is a plausible tool name.\n *\n * BOTH HALVES ARE REPORTED. \"Searched crm, loaded getOrder\" is the sentence a\n * UI wants, and neither field can be recovered from the other: flattening to\n * `crm.getOrder` would invent a name the model never used (calls come back with\n * a flat `name` — see the `function_call` branch above), and dropping the\n * namespace throws away the only description of the *group*, which is the thing\n * the model actually chose between.\n *\n * The shape is read structurally rather than off `type === \"namespace\"`: an\n * entry with a `tools` array is a group whatever it calls itself, and the\n * hand-written fixtures that predate the recording use `results:[{name}]` with\n * no `type` at all.\n */\ntype ToolSearchReport = { loaded: string[]; namespaces: string[] };\n\nfunction toolSearchReport(item: Record<string, any>): ToolSearchReport {\n const loaded: string[] = [];\n const namespaces: string[] = [];\n collectToolNames(item.results ?? item.tools ?? item.loaded ?? item.output, loaded, namespaces, 0);\n return { loaded: unique(loaded), namespaces: unique(namespaces) };\n}\n\nfunction collectToolNames(\n raw: unknown,\n loaded: string[],\n namespaces: string[],\n depth: number,\n): void {\n // Nesting is one level deep today and a namespace of namespaces is not a\n // thing. The cap is here so a payload that disagrees costs a truncated event\n // rather than a blown stack in the middle of someone's stream.\n if (!Array.isArray(raw) || depth > 4) return;\n for (const entry of raw) {\n if (typeof entry === \"string\") {\n loaded.push(entry);\n continue;\n }\n if (!entry || typeof entry !== \"object\") continue;\n const e = entry as Record<string, any>;\n const name =\n typeof e.name === \"string\" ? e.name : typeof e.tool_name === \"string\" ? e.tool_name : \"\";\n const children = e.tools ?? e.functions;\n if (Array.isArray(children)) {\n if (name) namespaces.push(name);\n collectToolNames(children, loaded, namespaces, depth + 1);\n continue;\n }\n if (name) loaded.push(name);\n }\n}\n\nfunction unique(names: string[]): string[] {\n return names.filter((name, index) => names.indexOf(name) === index);\n}\n\n/**\n * Azure's `content_filters`, read only where it means something.\n *\n * IT DOES NOT MAP ONTO `content_filtered` ON ITS OWN, and that is the decision\n * worth writing down: the array is on EVERY Azure response — `azure-text.sse`,\n * a recording of \"say hi\", carries it on `response.created`,\n * `response.in_progress` and `response.completed`, with `blocked:false` and\n * every category `severity:\"safe\"`. Treating its presence as a filter hit would\n * report every single Azure call as content-filtered, and treating any\n * `filtered:true` inside it as one would report a *warning* as a block. What is\n * authoritative about the outcome is `incomplete_details.reason`; this array is\n * authoritative only about the DETAIL, which is why it is read for a message\n * and for nothing else.\n *\n * OpenAI sends no such array. It signals a block by refusing in-band\n * (`response.refusal.done`, handled above) or by rejecting the request, so\n * nothing here needs a provider flag — an absent array just yields the generic\n * sentence.\n */\nfunction describeContentFilters(raw: unknown): string {\n const generic = \"The provider's content filter blocked this request.\";\n if (!Array.isArray(raw)) return generic;\n const hits: string[] = [];\n for (const entry of raw) {\n if (!entry || typeof entry !== \"object\") continue;\n const e = entry as Record<string, any>;\n const results = e.content_filter_results;\n if (!results || typeof results !== \"object\") continue;\n for (const [category, detail] of Object.entries(results as Record<string, any>)) {\n if (detail && typeof detail === \"object\" && detail.filtered === true) {\n // The source matters as much as the category: a `prompt` hit means the\n // user's own words were blocked and rewording works, a `completion` hit\n // means the model's answer was, and retrying the same prompt will not.\n hits.push(`${category} (${String(e.source_type ?? \"unknown\")})`);\n }\n }\n }\n return hits.length === 0 ? generic : `${generic} Categories: ${unique(hits).join(\", \")}.`;\n}\n\nfunction normalizeStreamError(raw: any) {\n const message = typeof raw?.message === \"string\" ? raw.message : \"The provider stream failed.\";\n const code = String(raw?.code ?? \"\").toLowerCase();\n if (code === \"rate_limit_exceeded\") {\n return { code: \"rate_limited\" as const, message, retryable: true };\n }\n if (code === \"context_length_exceeded\") {\n return { code: \"context_length_exceeded\" as const, message, retryable: false };\n }\n if (code.includes(\"content_filter\")) {\n return { code: \"content_filtered\" as const, message, retryable: false };\n }\n // Mid-stream failures are overwhelmingly transient — the request was accepted,\n // so it was not malformed.\n return { code: \"provider_error\" as const, message, retryable: true };\n}\n\nexport function emptyUsage(): Usage {\n return { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n}\n\nexport function toUsage(raw: any): Usage {\n if (!raw) return emptyUsage();\n const inputTokens = Number(raw.input_tokens ?? 0);\n const outputTokens = Number(raw.output_tokens ?? 0);\n const usage: Usage = {\n inputTokens,\n outputTokens,\n totalTokens: Number(raw.total_tokens ?? inputTokens + outputTokens),\n };\n const reasoning = raw.output_tokens_details?.reasoning_tokens;\n if (typeof reasoning === \"number\") usage.reasoningTokens = reasoning;\n const cached = raw.input_tokens_details?.cached_tokens;\n if (typeof cached === \"number\") usage.cachedInputTokens = cached;\n return usage;\n}\n\n/** A `ReadableStream` of bytes to the string chunks the parser wants. Split out\n * so the parser never has to know it came from a socket. */\nexport async function* decodeChunks(\n body: ReadableStream<Uint8Array> | null,\n): AsyncGenerator<string> {\n if (!body) return;\n const reader = body.getReader();\n const decoder = new TextDecoder();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n // `stream: true` matters: a multi-byte character can land across two\n // reads, and decoding each read on its own turns it into two U+FFFDs.\n if (value) yield decoder.decode(value, { stream: true });\n }\n const tail = decoder.decode();\n if (tail) yield tail;\n } finally {\n reader.releaseLock();\n }\n}\n",
@@ -34,7 +34,7 @@
34
34
  "import type { Schema } from \"../Schema\";\nimport type { AgentJobRef, AgentMessage, ToolResultPart } from \"../types\";\nimport { clockOf, expire } from \"./AgentJob\";\nimport type { AgentJobRecord, AgentJobState, AgentJobStore } from \"./AgentJobStore\";\n\n/** How many of a thread's newest jobs are checked for orphans on each load. */\nconst ORPHAN_SCAN = 50;\n\nconst ANY_STATE: AgentJobState[] = [\"running\", \"ok\", \"error\"];\n\n/**\n * The thread with each background job's current state rendered over the tool\n * result that points at it (#461).\n *\n * A tool that returned a `JobHandle` left a `running` result in the thread.\n * The job settles later, into the job store, and never into the messages: a\n * live run writes whole messages, and a settle racing those writes would be\n * overwritten by the run's stale copy. So the messages are brought up to date\n * here, when the thread is loaded, which `AgentController` does under the\n * thread's lock before a turn and without writing for `readThread`.\n *\n * - A `running` result whose job settled becomes the job's `ok` or `error`\n * result, in place, with the job still named on it (`job`).\n * - A `running` result whose job is still running is left exactly as it is,\n * so the request stays byte-identical, and the prompt cache with it, until\n * the job settles.\n * - A `running` result whose job the store does not have becomes an `error`:\n * the record was lost (a memory store across a restart), and the work may or\n * may not have happened.\n *\n * `settled` is the messages that changed, for the caller to write back, so\n * the store converges and a job settled long ago costs nothing on later loads.\n *\n * `orphans` are jobs whose tool result never reached the thread: the run died\n * between starting the job and storing the result. They are found among the\n * thread's newest jobs, only once the run that started them is gone, and only\n * the ones not marked yet; the caller marks them (`orphaned`).\n */\nexport async function overlayJobs(\n messages: AgentMessage[],\n params: {\n threadId: string;\n store: AgentJobStore;\n isRunLive: (runId: string) => boolean | Promise<boolean>;\n /** The tool's output schema, to check a settled output against. */\n outputSchemaFor?: (toolName: string) => Schema<any> | undefined;\n /** How many of the thread's newest jobs to read. At least 50. */\n scan?: number;\n },\n): Promise<{\n messages: AgentMessage[];\n settled: AgentMessage[];\n orphans: AgentJobRecord[];\n /** The thread's newest jobs, as they stand after this pass: for the `<jobs>` block. */\n jobs: AgentJobRecord[];\n}> {\n const { store, threadId } = params;\n const scan = Math.max(ORPHAN_SCAN, params.scan ?? 0);\n const recent = await store.listForThread(threadId, { limit: scan });\n\n // The lazy half of the deadline sweep: a running job past its deadline is\n // failed here, so an app with no cron still sees it fail.\n let now: number | undefined;\n const current = async (record: AgentJobRecord): Promise<AgentJobRecord> => {\n if (record.state !== \"running\") return record;\n now ??= await clockOf(store);\n if (record.deadlineAt > now) return record;\n await expire(store, record);\n return (await store.get(record.id)) ?? record;\n };\n for (let index = 0; index < recent.length; index++) {\n recent[index] = await current(recent[index]!);\n }\n const known = new Map(recent.map((record) => [record.id, record]));\n\n const out = messages.slice();\n const settled: AgentMessage[] = [];\n const calls = new Set<string>();\n\n for (let at = 0; at < out.length; at++) {\n const message = out[at]!;\n let content: AgentMessage[\"content\"] | null = null;\n for (let index = 0; index < message.content.length; index++) {\n const part = message.content[index]!;\n if (part.type === \"tool-call\") calls.add(part.toolCallId);\n if (part.type !== \"tool-result\" || part.status !== \"running\") continue;\n\n const id = part.job?.id;\n let record = id ? known.get(id) : undefined;\n if (id && record === undefined) {\n const found = await store.get(id);\n record = found ? await current(found) : undefined;\n if (record) known.set(id, record);\n }\n if (record?.state === \"running\") continue;\n\n content ??= message.content.slice();\n content[index] = settledResult(part, record, params.outputSchemaFor);\n }\n if (content) {\n const changed: AgentMessage = { ...message, content };\n out[at] = changed;\n settled.push(changed);\n }\n }\n\n const orphans: AgentJobRecord[] = [];\n for (const record of recent) {\n if (record.orphaned || calls.has(record.toolCallId)) continue;\n if (await params.isRunLive(record.runId)) continue;\n orphans.push(record);\n }\n\n return { messages: out, settled, orphans, jobs: recent };\n}\n\n/** Marks orphans found by `overlayJobs`. Never throws: it is bookkeeping. */\nexport async function markOrphans(\n store: AgentJobStore,\n orphans: AgentJobRecord[],\n report: (error: unknown) => void,\n): Promise<void> {\n for (const record of orphans) {\n try {\n await store.transition(record.id, ANY_STATE, { orphaned: true });\n } catch (error) {\n report(error);\n }\n }\n}\n\nfunction settledResult(\n part: Extract<ToolResultPart, { status: \"running\" }>,\n record: AgentJobRecord | undefined,\n outputSchemaFor: ((toolName: string) => Schema<any> | undefined) | undefined,\n): ToolResultPart {\n const base = { type: \"tool-result\" as const, toolCallId: part.toolCallId, name: part.name };\n if (!record) {\n return {\n ...base,\n status: \"error\",\n job: part.job,\n error: {\n code: \"tool_error\",\n message: `The background job for \"${String(part.name)}\" can no longer be found, so its result was lost. It may have run in part or in full: check its effects before repeating it.`,\n toolCallId: part.toolCallId,\n retryable: true,\n },\n };\n }\n\n const job: AgentJobRef = {\n id: record.id,\n ...(record.summary !== undefined ? { summary: record.summary } : {}),\n ...(record.usage ? { usage: record.usage } : {}),\n };\n if (record.state === \"error\") {\n return {\n ...base,\n status: \"error\",\n job,\n error: record.error ?? {\n code: \"tool_error\",\n message: `The background job for \"${String(part.name)}\" failed.`,\n toolCallId: part.toolCallId,\n retryable: true,\n },\n };\n }\n\n const schema = outputSchemaFor?.(String(part.name));\n if (schema) {\n const parsed = schema.safeParse(record.output);\n if (parsed.ok === false) {\n return {\n ...base,\n status: \"error\",\n job,\n error: {\n code: \"invalid_tool_result\",\n message: `The background job for \"${String(part.name)}\" finished with an output that does not match the tool's output schema: ${parsed.errors.join(\", \")}`,\n toolCallId: part.toolCallId,\n retryable: true,\n },\n };\n }\n return { ...base, status: \"ok\", job, output: parsed.value };\n }\n return { ...base, status: \"ok\", job, output: record.output };\n}\n",
35
35
  "import { Storage } from \"../facades/Storage\";\nimport { Controller } from \"../http/Controller\";\nimport { refusal, RequestBreakerError } from \"../http/Error\";\nimport { HttpRequest } from \"../http/HttpRequest\";\nimport { RequestContext } from \"../http/requestContext\";\nimport { mediaType } from \"../http/mediaType\";\nimport { refusalKindForStatus } from \"../http/refusal\";\nimport type { MiddlewareInput } from \"../http/middlewareList\";\nimport type { AgentResource } from \"../http/ResourcePolicy\";\nimport type {\n AgentContext,\n AgentRun,\n AgentRunResult,\n AgentToolShapes,\n AnyAgent,\n PrepareStepContext,\n PrepareStepResult,\n ToolShapesOf,\n} from \"./Agent\";\nimport type { ContextWindowOptions } from \"./contextWindow\";\nimport { isSummaryStore, type ThreadSummary } from \"./contextCompaction\";\nimport { injectedMessageIds } from \"./Agent\";\nimport {\n type Attachment,\n ATTACHMENT_ID_PREFIX,\n type AttachmentDestination,\n attachmentObjectName,\n type AttachmentScope,\n type AttachmentStorage,\n type AttachmentStore,\n defaultAttachmentStore,\n newAttachmentId,\n ScopedAttachments,\n} from \"./store/Attachments\";\nimport {\n FrameCursorEvictedError,\n liveRuns as defaultLiveRuns,\n LiveRunNotFoundError,\n MemoryLiveRuns,\n} from \"./store/LiveRuns\";\nimport {\n defaultFileOwners,\n type FileOwnerRecord,\n type FileOwners,\n MemoryFileOwners,\n} from \"./store/FileOwners\";\nimport {\n defaultNonceStore,\n MemoryNonceStore,\n type NonceRedisClient,\n type NonceStore,\n RedisNonceStore,\n type RedisNonceStoreOptions,\n} from \"./store/Nonces\";\nimport {\n MemoryReceiptStore,\n type ReceiptClaim,\n type ReceiptRedisClient,\n type ReceiptStore,\n RedisReceiptStore,\n type RedisReceiptStoreOptions,\n} from \"./store/Receipts\";\nimport { defaultAgentStore, MemoryAgentStore } from \"./store/MemoryAgentStore\";\nimport { normalizeProviderError, ProviderHttpError } from \"./providers/errors\";\nimport { redactError, unredactedError } from \"./redact\";\nimport type { ErrorRedactionInfo } from \"./redact\";\nimport { sseResponse } from \"./store/sse\";\nimport { settleInterrupted, TurnJournal } from \"./store/TurnJournal\";\nimport { AgentJobs } from \"./jobs/AgentJob\";\nimport { markOrphans, overlayJobs } from \"./jobs/overlay\";\nimport { DEFAULT_JOBS_CONTEXT_MAX, renderJobsBlock } from \"./jobs/contextBlock\";\nimport type { AgentJobRecord } from \"./jobs/AgentJobStore\";\nimport type { AgentMemoryScopes } from \"./memory/runMemory\";\nimport type { Schema } from \"./Schema\";\nimport { RealtimeRequestError, type RealtimeSession } from \"./providers/realtime\";\nimport type { VoiceConfig } from \"./voiceConfig\";\nimport { defaultVoiceStore, type VoiceSessionRecord, type VoiceSessionStore } from \"./voiceStore\";\nimport { emptyUsage } from \"./runtime\";\nimport { mcpVoiceTools } from \"./voiceMcp\";\nimport { DEFAULT_DELEGATE_NAME, VoiceBridge, voiceTools } from \"./VoiceBridge\";\nimport type { VoiceStartResponse } from \"./voice/wire\";\nimport type {\n AgentError,\n AgentMessage,\n AgentStreamEvent,\n ClientTurn,\n PendingToolCall,\n ToolShapes,\n} from \"./types\";\n\n// --- storage -------------------------------------------------------------\n\n/**\n * Where conversations live.\n *\n * Stateless is the default and nothing here is required to hold a conversation:\n * the client can carry its own history, and a pending approval travels in it\n * safely because the server signed it. What a store buys is a conversation that\n * survives the browser — and, with `/attach`, one whose interrupted turn is\n * still there after a refresh.\n */\nexport interface AgentStore {\n /**\n * Where a `threadId` comes from. `ApiRouter.agent()` mounts no route for\n * this: the app writes one, calls it here, and hands the id to `useChat` —\n * the mount is the app's because it is where ownership gets recorded, and a\n * store that holds no user cannot do that for it. An id that did not come out\n * of here is `null` from `loadThread` and a 404 from the controller, unless\n * the store's ids are the client's by design (`MemoryAgentStore`'s\n * `clientOwnedIds`).\n */\n createThread(params: { userId?: string | number }): Promise<{ threadId: string }>;\n /**\n * The history, or `null` for a thread the store does not have.\n *\n * `null` and `[]` are different answers and the controller acts on the\n * difference: an empty array is a conversation with nothing in it yet, and a\n * turn on it runs; `null` is a 404 before anything runs. A store that answers\n * `[]` for an id it has never seen turns an expired or mistyped thread into a\n * fresh conversation with no signal, and persists the next turn under the\n * dead id. Only a store whose ids are minted by the client should do that,\n * and then on purpose — see `MemoryAgentStore`'s `clientOwnedIds`.\n */\n loadThread(threadId: string): Promise<AgentMessage[] | null>;\n /**\n * Upsert by message id: replace a message the thread already holds, append\n * one it does not, and keep the order the thread had. Called with a thread\n * `loadThread` just found; must not create one.\n *\n * The name says append because that is what almost every call is, but a\n * turn that resolves a pending call reports the earlier assistant message\n * again — same id, now with the result attached — and a store that only\n * appends ends up with both versions. A table keyed by message id has the\n * lookup already but still needs an insert-or-update rather than a plain\n * insert, which would fail on the key; a store that is a list has to look\n * before it pushes.\n *\n * It is also called while a turn runs, not only when it ends (#617): with the\n * user's message as the run starts, with the assistant message in progress\n * (no `finishReason`, the run's id in `runId`) as it opens and at each tool\n * call and result, and with each message again once it is finished. The\n * same message arrives several times, and the last write is the one to\n * keep. Calls for one run never overlap: each waits for the one before.\n */\n appendMessages(threadId: string, messages: AgentMessage[]): Promise<void>;\n /**\n * Delete these messages from the thread; ids it does not hold are ignored.\n *\n * What a threaded `regenerate` needs (#451): the server owns the history,\n * so the answer being replaced has to leave the store, or the model reads\n * `user: X, assistant: A, user: X` and writes a follow-up instead of a new\n * answer. The controller calls it under the thread's lock with the last user\n * turn and everything after it, then runs that turn again.\n *\n * Optional so a store written before it still compiles; without it a turn\n * with `regenerate: true` on a thread is a 501 `regenerate_unsupported`.\n */\n removeMessages?(threadId: string, messageIds: string[]): Promise<void>;\n /**\n * Optional: where `contextWindow.compact` keeps the thread's summaries\n * (#782), so they live, and are deleted, with the thread. Implement both to\n * opt in; without them summaries go to `defaultSummaryStore`, in memory.\n * Same contract as `SummaryStore`.\n */\n loadSummaries?(threadId: string): Promise<ThreadSummary[]>;\n saveSummary?(threadId: string, summary: ThreadSummary): Promise<void>;\n /** Optional cross-process lock for one cut. See `SummaryStore.lockSummary`. */\n lockSummary?(\n threadId: string,\n cutMessageId: string,\n ttlMs: number,\n ): Promise<(() => Promise<void>) | null>;\n}\n\n/** The default: conversations last as long as the process. */\nexport { defaultAgentStore, MemoryAgentStore };\n\n/** The attachment half of the same story. See `store/Attachments.ts`. */\nexport {\n type Attachment,\n type AttachmentDestination,\n AttachmentNotFoundError,\n type AttachmentScope,\n type AttachmentStorage,\n type AttachmentStore,\n defaultAttachmentStore,\n InvalidAttachmentScopeError,\n MemoryAttachmentStore,\n type PutAttachmentParams,\n ScopedAttachments,\n type ToolAttachmentPut,\n type ToolAttachmentRecord,\n type ToolAttachments,\n} from \"./store/Attachments\";\n\n/**\n * The runs currently in flight, and their frames.\n *\n * A run outlives the request that started it, so something has to hold it while\n * no one is listening, and hold what it emitted meanwhile so a returning client\n * can catch up rather than start over. That is all this is: a per-process map\n * plus a bounded buffer.\n *\n * Per-process is not an implementation shortcut that a better store fixes — a\n * running generator lives in one process, and a second server cannot attach to\n * it. Reattachment therefore needs the request to land where the run is: one\n * server, sticky routing, or a proxy that forwards by `runId`. Worth saying out\n * loud, because the failure mode behind a round-robin load balancer is a\n * refresh that usually works.\n *\n * This is the read side, which is all `attach` and `stop` need. Registering a\n * run and replaying its buffer are on `MemoryLiveRuns`, the only implementation\n * there can be — see the note there for why a second one would not help.\n */\nexport interface LiveRuns {\n /** What the client asks after a refresh: is anything still going here? */\n find(params: { threadId: string }): Promise<{ runId: string; seq: number } | null>;\n get(runId: string): AgentRun | null;\n /** Kept for a short while after `run-end`, so a refresh a second late still\n * sees the tail instead of an empty screen. */\n ttlMs: number;\n}\n\nexport {\n FrameCursorEvictedError,\n LiveRunNotFoundError,\n MemoryLiveRuns,\n defaultLiveRuns as liveRuns,\n};\n\n/** Who uploaded each provider file id (#443). See `store/FileOwners.ts`. */\nexport { defaultFileOwners, type FileOwnerRecord, type FileOwners, MemoryFileOwners };\n/** Where approved tools' executions are recorded (#458). See `store/Receipts.ts`. */\nexport {\n MemoryReceiptStore,\n type ReceiptClaim,\n type ReceiptRedisClient,\n type ReceiptStore,\n RedisReceiptStore,\n type RedisReceiptStoreOptions,\n};\n/** Where answered calls' nonces are spent (#445). See `store/Nonces.ts`. */\nexport {\n defaultNonceStore,\n MemoryNonceStore,\n type NonceRedisClient,\n type NonceStore,\n RedisNonceStore,\n type RedisNonceStoreOptions,\n};\n\n// --- controller ----------------------------------------------------------\n\nexport type AgentHookContext = {\n /**\n * The request that started the turn. Its `state` is the turn's own typed\n * state (#887): a value set in `authorizeRequest()`, `instructions()` or\n * `context()` (`req.state.set(key, value)`) is read here with\n * `ctx.req.state.get(key)`, instead of a `WeakMap` keyed on the request.\n * A request answering an approval is a new turn and starts with none.\n */\n req: HttpRequest<any, any>;\n runId: string;\n threadId?: string;\n};\n\n/**\n * What `AgentController.startTurn` takes (#839).\n */\nexport type AgentTurnParams<Body extends object = Record<string, unknown>> = {\n /** The thread the turn is stored on, as a turn from `useChat` would be. */\n threadId: string;\n /** The user's message. Shorthand for `turn: { text }`, and wins over `turn.text`. */\n text?: string;\n /**\n * The whole turn, for files or answers: `{ text, files, toolResults }`, as\n * `useChat` sends it. Neither `text` nor `turn` is a turn with nothing in\n * it, which lets the model continue the thread.\n */\n turn?: ClientTurn;\n /**\n * Who the turn runs as: `req.ctx().user` for `authorizeRequest`, `runOwner`,\n * `context()`, the hooks and every tool, as the authentication middleware\n * would have set it. Absent or `null` is an anonymous turn.\n */\n user?: unknown;\n /** What `useChat`'s `body` option would send: `instructions()`, `context()` and `ctx.body` read it. */\n body?: Body;\n};\n\n/** A turn `AgentController.startTurn` started. */\nexport type AgentTurn = {\n runId: string;\n threadId: string;\n /** The run: iterate it (or its `frames()`) to follow the turn as it goes. */\n run: AgentRun;\n /** What the chat's stop button does. */\n stop(params?: { reason?: string }): void;\n /**\n * Settles when the run has ended, its transcript is stored and the\n * controller's hooks have run (or `hookHoldMs` has passed). Rejects only if\n * the run itself does; a failed model call resolves with `finishReason:\n * \"error\"` and `error`, as `AgentRun.result()` does.\n */\n result(): Promise<AgentTurnResult>;\n};\n\n/** What `AgentTurn.result()` answers: the run's result, and what a caller reads off it. */\nexport type AgentTurnResult = AgentRunResult<ToolShapes, unknown> & {\n threadId: string;\n /** The text of the run's last assistant message; `\"\"` when it wrote none. */\n text: string;\n /**\n * The calls waiting for an answer when `finishReason` is\n * `\"awaiting-input\"`, and `[]` otherwise. They stay on the thread, signed\n * for the turn's `runOwner`: that user can answer them in the chat, or the\n * caller can with another `startTurn({ turn: { toolResults } })`.\n */\n pending: PendingToolCall[];\n};\n\n/**\n * A turn `startTurn` could not start: what the route would have answered,\n * thrown. `status` and `code` are the route's (`404` `thread_not_found`,\n * `429` `too_many_runs`, `403` for another owner's run or file...).\n */\nexport class AgentTurnError extends Error {\n readonly status: number;\n readonly code?: string;\n readonly kind?: string;\n\n constructor(message: string, params: { status: number; code?: string; kind?: string }) {\n super(message);\n this.name = \"AgentTurnError\";\n this.status = params.status;\n this.code = params.code;\n this.kind = params.kind;\n }\n\n /** @internal Reads a refusal `stream` answered. */\n static async from(response: Response): Promise<AgentTurnError> {\n let error: Record<string, unknown> = {};\n try {\n const parsed = (await response.json()) as { error?: Record<string, unknown> };\n if (parsed?.error && typeof parsed.error === \"object\") error = parsed.error;\n } catch {\n // Not a JSON refusal: the status says what there is to say.\n }\n const text = (key: string) => (typeof error[key] === \"string\" ? (error[key] as string) : undefined);\n return new AgentTurnError(\n text(\"message\") ?? `The agent turn was refused with status ${response.status}.`,\n { status: response.status, code: text(\"code\"), kind: text(\"kind\") },\n );\n }\n}\n\n/** `Body` of a controller instance type, as `AgentRouteRPC` reads it. */\ntype ControllerBody<C> = C extends { [BODY]?: infer B }\n ? B extends object\n ? B\n : Record<string, unknown>\n : Record<string, unknown>;\n\n/** The text of the last assistant message among `messages`, or `\"\"`. */\nfunction lastAssistantText(messages: AgentMessage[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const message = messages[i];\n if (message.role !== \"assistant\") continue;\n return message.content\n .map((part) => (part.type === \"text\" ? part.text : \"\"))\n .join(\"\");\n }\n return \"\";\n}\n\n/** What `AgentController.attachmentLimits` answers. Both optional. */\nexport type AttachmentLimits = {\n /** The largest file accepted, in bytes. */\n maxBytes?: number;\n /** `<input accept>` entries: `\".pdf\"`, `\"image/*\"`, `\"text/csv\"`. */\n accept?: string[];\n};\n\n/** The file `AgentController.checkUpload` is asked about: what it is, not its bytes. */\nexport type UploadCheckFile = {\n /** The file's name as the client sent it, `\"upload\"` when it sent none. */\n name: string;\n /** In bytes. */\n size: number;\n /** As the client sent it, `\"application/octet-stream\"` when it sent none. */\n mimeType: string;\n};\n\n/**\n * What an upload hook is told beyond the request (#836): the client's `body`\n * option (what `attachmentScope` gets) and the thread the upload is for, when\n * the store knows it.\n */\nexport type UploadContext<Body extends object = Record<string, unknown>> = {\n body: Body;\n /** Only a thread the store found; an id it has never seen is left out. */\n threadId?: string;\n};\n\n/**\n * What `AgentController.checkUpload` returns to refuse a file. Answered **422**\n * with `{ error: { code, message } }`, which `useChat().attach()` rejects with\n * as an `AttachError` carrying the same `code` and `message`.\n */\nexport type UploadRefusal = {\n /** A code the composer can switch on. `\"upload_refused\"` when left out. */\n code?: string;\n /** The sentence the person reads. */\n message: string;\n};\n\n/**\n * What `POST /<path>/files` answers.\n *\n * TWO IDS, AND THEY ARE NOT INTERCHANGEABLE. `fileId` is the *provider's* id and\n * means exactly what it always meant — the value a `FilePart` carries so the\n * model can see the file. `attachmentId` is *gemi's*, and is the handle a tool\n * resolves through `ScopedAttachments` to get the bytes back. A file can have\n * both, and usually does.\n *\n * `fileId` stays first and stays named that on purpose: `useChat.uploadFile`\n * already reads it, apps already put it in a `FilePart`, and renaming it or\n * folding the two into one id would break vision for every existing app while\n * looking like a tidier API. The two ids exist because there are two systems\n * holding the file.\n *\n * Both are optional, and `destination` says which to expect: `provider` has no\n * `attachmentId` (nothing was kept), `storage` has no `fileId` (the provider\n * never saw it, so there is nothing for a `FilePart` to point at), `both` has\n * both.\n *\n * `destination` ALONE IS NOT ENOUGH TO SAY WHY AN ID IS MISSING, which is why\n * `downgraded` is here. An upload that reached a route with no authentication\n * and no `threadId` answers `destination: \"provider\"` — truthfully, that is\n * where the bytes went — and so does a controller that deliberately returns\n * `\"provider\"` from `attachmentDestination`. Those two answers were byte\n * identical, and they are the opposite situations: one is the app's policy\n * working, the other is the app's policy silently not applying because the\n * server could not tell who was calling. The server logs the second one once\n * per process; the client saw nothing at all. `downgraded` is the difference,\n * carried in the answer so a client — or an integration test — can assert on\n * it.\n */\nexport type UploadResult = {\n /** The provider's id, for a `FilePart`. Absent when the file never went there. */\n fileId?: string;\n /** gemi's id, for a tool. Absent when nothing was kept — see `attachmentScope`. */\n attachmentId?: string;\n name: string;\n mimeType: string;\n size: number;\n destination: AttachmentDestination;\n /**\n * Set only when the app's policy asked for a copy and the request had no\n * subject to file it under, so the upload fell back to the provider alone.\n * Absent when `destination` is what the app actually chose.\n *\n * A string rather than `true` because there is exactly one reason today and\n * there will be more (a store that refused the write, say), and a boolean\n * that later needs a reason beside it is two fields where one would have\n * done.\n */\n downgraded?: \"no_scope\";\n};\n\n/**\n * `Controller.kind` is typed as the literal `\"controller\"`, so a subclass that\n * declares a `kind` of its own fails the static-side check (TS2417). Widening\n * it belongs in `http/Controller.ts`, which this slice does not own; erasing\n * the static side of the base here is the smaller change and costs nothing —\n * `Controller.kind` has no reader, in this package or out of it.\n */\nconst ControllerBase = Controller as new () => Controller;\n\n/**\n * The thread a `stream` is setting up on, to the setup ahead of it. Module\n * level because the controller is constructed per request, so nothing on it\n * can be seen by the next request; keyed by thread rather than held on\n * `liveRuns` because it guards the controller's protocol, not the frames. An\n * entry is removed once the last setup queued on it releases.\n */\nconst threadLocks = new Map<string, Promise<void>>();\n\n/**\n * Each run to the promise that its transcript has been stored. Weak, so a run\n * the map has evicted is not kept alive here for a promise nobody will ask for.\n */\nconst persisted = new WeakMap<AgentRun, Promise<void>>();\n\n/**\n * The run a `startTurn` request started, by that request (#839). `stream`\n * answers a `Response`, which is what a route needs; `startTurn` needs the run\n * itself and the promise that its hooks are done, and this is how it gets them\n * without `stream` growing a second return shape. Weak, so a request nobody\n * reads back leaves nothing behind.\n */\nconst serverTurns = new WeakMap<\n HttpRequest<any, any>,\n { run: AgentRun; hooks: Promise<void> } | null\n>();\n\n/** The URL of the request `startTurn` builds. Nothing routes to it. */\nconst SERVER_TURN_URL = \"http://gemi.internal/__gemi/agent-turn\";\n\n/**\n * Turns read but not yet registered, by the client's name for them.\n *\n * A run can be stopped from `register` on, and named from `run-start` on. What\n * `/stop` could not reach was a turn still waiting its place on the thread —\n * which is where a user who sent twice and thought better of it presses stop,\n * and the wait is now as long as the old run's unwind. Falling through to\n * `threadId` there found the old run, already stopping, said `stopped: true`,\n * and the queued turn started anyway: unwatched, billing, and with no handle\n * left on the client that had let go of it. The entry is marked rather than\n * removed, because the turn itself is what answers once its wait is over.\n */\nconst pendingTurns = new Map<string, { cancelled: boolean; owner: string | null }>();\n\n// --- limits (#444) -------------------------------------------------------\n\n/** `AgentController.maxBodyBytes`'s default. */\nexport const DEFAULT_MAX_BODY_BYTES = 4 * 1024 * 1024;\n/** `AgentController.maxHistoryMessages`'s default. */\nexport const DEFAULT_MAX_HISTORY_MESSAGES = 1000;\n/** `AgentController.maxConcurrentRuns`'s default. */\nexport const DEFAULT_MAX_CONCURRENT_RUNS = 5;\n/** The cap on `attach` and `stop` bodies, which carry ids and nothing else. */\nconst SMALL_BODY_BYTES = 64 * 1024;\n\nconst noop = () => {};\n\n/**\n * The runs each `runLimitKey` has going, by lane: a thread is one lane however\n * many turns are queued or superseding on it, and a stateless turn is a lane\n * of its own. A lane is held from the moment its turn is admitted until its\n * last run ends.\n */\nclass RunSlots {\n private byKey = new Map<string, Map<string, number>>();\n\n /**\n * Admits a turn in `lane` for `key`, or answers `null` when `key` already\n * holds `limit` other lanes. Synchronous, so two turns arriving together\n * cannot both see the last free slot. The function it returns frees the\n * turn's hold; calling it twice is harmless.\n */\n take(key: string, lane: string, limit: number): (() => void) | null {\n let lanes = this.byKey.get(key);\n if (!lanes?.has(lane) && (lanes?.size ?? 0) >= limit) {\n return null;\n }\n if (!lanes) {\n lanes = new Map();\n this.byKey.set(key, lanes);\n }\n lanes.set(lane, (lanes.get(lane) ?? 0) + 1);\n let released = false;\n return () => {\n if (released) return;\n released = true;\n const current = this.byKey.get(key);\n const count = (current?.get(lane) ?? 1) - 1;\n if (!current) return;\n if (count > 0) {\n current.set(lane, count);\n } else {\n current.delete(lane);\n if (current.size === 0) this.byKey.delete(key);\n }\n };\n }\n}\n\n/**\n * Slots are counted per `liveRuns` registry rather than per process: the\n * registry is what holds the runs being counted, and an app (or a test) with\n * two registries has two sets of runs.\n */\nconst runSlots = new WeakMap<object, RunSlots>();\nfunction runSlotsFor(liveRuns: object): RunSlots {\n let slots = runSlots.get(liveRuns);\n if (!slots) {\n slots = new RunSlots();\n runSlots.set(liveRuns, slots);\n }\n return slots;\n}\n\n/**\n * The key that carries `Body` on the instance type.\n *\n * A `declare const` unique symbol, so it exists only in the type layer — the\n * same device `Schema.ts` uses for its output type, and for the same reason: a\n * real property would be one an app could see, serialise or depend on.\n */\ndeclare const BODY: unique symbol;\n\n/**\n * What `authorizeRequest` is told about the request, per route.\n *\n * A union on `route` because `body` exists on only two of them: `stream` and\n * `upload` carry the client's `body` option, `attach` and `stop` carry none.\n * Typing it optional everywhere would make every reader of `body.pageId` on\n * `stream` write a check for a case that cannot happen there; narrowing on\n * `route` says which case it is. An override written against the older\n * `{ route; threadId? }` shape still accepts every member.\n */\nexport type AuthorizeRequestParams<Body extends object = Record<string, unknown>> =\n | { route: \"stream\" | \"upload\"; threadId?: string; body: Body }\n | { route: \"attach\" | \"stop\"; threadId?: string; body?: undefined };\n\nexport abstract class AgentController<\n A extends AnyAgent = AnyAgent,\n /**\n * The extra fields `useChat`'s `body` option sends with every turn, as they\n * arrive in `instructions()` and on `ctx.body`.\n *\n * Declaring it also types the client: `useChat` reads it back off the route\n * through `AgentRouteRPC`, so a `body` the controller does not expect is a\n * compile error at the call site rather than an `undefined` three layers\n * into a tool. It types the shape, not the contents — see `instructions`.\n *\n * Constrained to `object`, not `Record<string, unknown>`: an `interface` gets\n * no implicit index signature, so the tighter bound refused\n * `interface PageBody { pageId: string }` with a `TS2344` that names the\n * constraint and not the reason. An interface is how most apps write a request\n * shape, and turning that into a puzzle about `type` versus `interface` is a\n * poor first impression of the feature.\n */\n Body extends object = Record<string, unknown>,\n> extends ControllerBase {\n static kind = \"agent-controller\" as const;\n\n /**\n * `Body`, in a position nothing can shorten away.\n *\n * It has to appear on the instance type for `AgentRouteRPC` to infer it, and\n * `instructions`'s second parameter is not a safe place to leave that job:\n * TypeScript's parameter-wise inference stops at the shorter signature, so a\n * controller overriding `instructions(req)` — which is every override written\n * before this existed, since that was the only signature — supplied no\n * candidate and silently fell back to the open record. The client-side\n * checking then vanished on the most ordinary upgrade path, with nothing to\n * read.\n *\n * `declare` so it emits no field: there is no value here, only a type for\n * `infer B` to find. Optional and never assigned, so no subclass has to\n * mention it.\n */\n declare readonly [BODY]?: Body;\n\n /** The agent this controller serves. A property rather than a constructor\n * argument so `Router.agent(ChatController)` can take the class, matching how\n * every other controller is mounted. */\n abstract agent: A;\n\n /**\n * Defaults to the process-wide `MemoryAgentStore`.\n *\n * Whatever you put here, make it something that outlives the request: this\n * controller is constructed fresh for every call, so `store = new\n * MemoryAgentStore()` written here is an empty store on every turn and a\n * threaded conversation silently reads back nothing. Assign a module-level\n * instance, or a store whose state is somewhere else entirely.\n */\n store: AgentStore = defaultAgentStore;\n\n /**\n * Defaults to the process-wide map. Overridable so a test — or an app running\n * two agents that must not see each other's runs — can hold its own; not so\n * that it can be moved off the process, which is not a thing that can be\n * done. See `MemoryLiveRuns`.\n */\n liveRuns: MemoryLiveRuns = defaultLiveRuns;\n\n /**\n * VOICE (#921): what `this.voice(Controller)` needs to run voice calls in\n * front of this agent. Absent, the voice routes answer 404. See\n * `VoiceConfig` and `docs/ai-voice.md`.\n */\n voice?: VoiceConfig<Body>;\n\n /**\n * Where voice sessions are recorded, so a `PATCH` or `DELETE` that lands on\n * another instance finds the call. Defaults to the process-wide\n * `MemoryVoiceSessionStore`: assign a shared one when more than one instance\n * serves the route.\n */\n voiceStore: VoiceSessionStore = defaultVoiceStore;\n\n /**\n * Where attachment *records* live — the row that says which bytes, whose, and\n * under what id. Defaults to the process-wide `MemoryAttachmentStore`, with\n * the same warning `store` carries: assign something that outlives the\n * request, because this controller is constructed per call.\n */\n attachments: AttachmentStore = defaultAttachmentStore;\n\n /**\n * Where an attachment's *bytes* live. Defaults to the app's configured\n * `FileStorage` through the `Storage` facade, which resolves the driver per\n * call out of the container — so an app that configured S3 gets S3 here\n * without saying so twice.\n *\n * Overridable mostly for tests and for an app that keeps user uploads in a\n * different bucket from everything else.\n */\n attachmentStorage: AttachmentStorage = Storage;\n\n /**\n * Who uploaded each provider file id (#443). `upload` records the id under\n * `runOwner(req)`, and `stream` refuses a turn whose files name an id\n * recorded for another owner with a 403 `{ error: { kind: \"permission\",\n * message, status } }`. Defaults to the process-wide `MemoryFileOwners`; the\n * same warning as `store` applies — assign something that outlives the\n * request. An app with several processes, or that wants the binding to\n * survive a restart, gives it a table (see `FileOwners`).\n */\n fileOwners: FileOwners = defaultFileOwners;\n\n /**\n * Where the nonce of each answered approval or question is spent, which is\n * what makes a signed answer single-use (#445). On a stateless chat the\n * client carries its history and can rewind it to before a result existed;\n * the spent nonce is then the only thing that refuses the replayed answer.\n *\n * Defaults to the process-wide `MemoryNonceStore`, which is exact for one\n * instance and forgets on restart. An app running several instances (or\n * behind a load balancer whose affinity is best effort) assigns a shared\n * store, built once at module scope like `store`:\n *\n * const nonces = new RedisNonceStore();\n * class ChatController extends AgentController<typeof chat> {\n * nonces = nonces;\n * }\n *\n * or its own `NonceStore` over a table keyed by the nonce. In production a\n * stateless turn served with the in-memory default logs a warning once.\n */\n nonces: NonceStore = defaultNonceStore;\n\n /**\n * Where approved tools' executions are claimed and their results recorded,\n * so that an approval runs its tool at most once (#458). Off by default.\n *\n * The nonce makes an answer single-use; it does not remember what the tool\n * did. So a retried submit whose response was lost is refused (\"already\n * used\") although the tool acted, and an answer that reaches two instances\n * with unshared nonce stores runs the tool twice. With a receipt store the\n * first presentation claims the execution and records its result; a later\n * one gets that result back without running anything, and one that arrives\n * while the first is still running gets a `tool_error` result for the model.\n *\n * Assign one built at module scope, like `nonces`, shared by every instance:\n *\n * const receipts = new RedisReceiptStore();\n * class ChatController extends AgentController<typeof chat> {\n * receipts = receipts;\n * }\n *\n * or your own `ReceiptStore` over a table (see `store/Receipts.ts`).\n * `MemoryReceiptStore` is exact for one instance only.\n */\n receipts?: ReceiptStore;\n\n /**\n * Whether a turn may name a provider file id that `fileOwners` has no record\n * of. `false` by default, which is what keeps the change additive: an id\n * uploaded before the upgrade, before a restart (with the in-memory default),\n * on another process, or by the app outside `upload` still works, as every id\n * did before. An id that IS recorded for someone else is refused either way.\n *\n * Set it to `true` once `fileOwners` is durable and shared, to make the\n * binding complete: then an id is usable only by the owner it was recorded\n * for, or by anyone when it was recorded as anonymous. On a stateless chat\n * the client carries its history, so this also refuses a file a tool attached\n * earlier in the conversation; a strict app keeps its chats on a thread.\n */\n protected requireKnownFiles = false;\n\n /**\n * How long the request that started a run is held open for its hooks, in\n * milliseconds, once the run has settled. The run itself is not bounded\n * here — the request is held for as long as it runs — only the app's code\n * still going after it, from `onMessage` to an `onAwaitingInput` queued\n * behind a slow `onToolCall`.\n *\n * The hooks read the user from that request (`ctx.req.ctx().user`,\n * `Auth.user()`, a policied query), so the request stays open until they are\n * done; but a hook that never settles — a `fetch` with no timeout — would\n * then hold the store, the user and `onRequestEnd` forever, one per turn. Past\n * this the request ends anyway: `onRequestEnd` runs, the user is released,\n * and the hook runs on without one. Thirty seconds is far past a healthy\n * write or notification, so a hook that reaches it is hung rather than slow.\n * Raise it for a hook that is legitimately longer; `Infinity` holds the\n * request until the hooks are done, however long that is.\n */\n protected hookHoldMs = 30_000;\n\n /**\n * Appended to the agent's static instructions for this request — the user's\n * name, tenant, today's date.\n *\n * `body` is what `useChat`'s `body` option sent, with the four keys the wire\n * format owns removed. It is the only way to read it here: this controller\n * consumes the request body itself, so `await req.input()` answers `Body\n * already used` and takes the whole turn down with it.\n *\n * It is client-controlled, exactly like any request body. `Body` types what\n * arrives, it does not check it — a client can send anything, and a tenant id\n * read from here is the client's claim about which tenant it wants, not the\n * middleware's finding about who it is.\n */\n instructions(req: HttpRequest<any, any>, extra: { body: Body }): string | Promise<string> | void {\n void req;\n void extra;\n }\n\n /**\n * What every tool of this turn's run gets as `ctx.context` — the user, the\n * tenant, functions the tools call back into. See `AgentContext`.\n *\n * The run is not given the request, so this is where the request's facts\n * become the run's: read the user the middleware authenticated here, and a\n * tool reads it from `ctx.context` instead of reaching for `req`. Runs after\n * `authorizeRequest()`, once per turn, and before anything is asked of the\n * model.\n *\n * The default is `{}`. An app that gives `AgentContext` a required field must\n * override this: the type of the default cannot see the app's declaration,\n * so forgetting is a tool that finds the field missing, not a compile error.\n *\n * Values from `body` are the client's claim, exactly as in `instructions()`;\n * putting one here does not make it any more trustworthy, only easier to\n * mistake for something the server decided.\n */\n context(req: HttpRequest<any, any>, extra: { body: Body }): AgentContext | Promise<AgentContext> {\n void req;\n void extra;\n return {} as AgentContext;\n }\n\n /**\n * THE MEMORY SCOPES THIS TURN MAY USE (#936): the labels the agent declares\n * in `memory.scopes`, each resolved to the app's scope key for this caller.\n *\n * ```ts\n * protected async memoryScopes(req, { body }) {\n * const user = req.ctx().user;\n * const project = await Project.forPage(body.pageId); // authorized in authorizeRequest()\n * return {\n * project: project.memoryOff ? null : `project:${project.publicId}`,\n * user: user && !user.memoryOff ? `user:${user.publicId}` : null,\n * };\n * }\n * ```\n *\n * The model only ever names a label; the key is decided here, on the\n * server, from the request — the same defence `attachmentScope()` gives\n * attachments. A label answered with `null`, or left out, is OFF for the\n * turn: it is not in the `<memory>` block and the tools cannot name it, so\n * a per-account or per-project \"memory off\" switch is a `null` here. A\n * declared `thread` label is the turn's thread (`thread:<threadId>`) unless\n * this answers it.\n *\n * Runs after `authorizeRequest()` and `context()`, once per turn, on turns\n * from `useChat`, `startTurn` and voice alike. The default is `{}`: memory\n * stays off until a controller resolves something. Not called for an agent\n * without `memory`. Values read from `body` are the client's claim, as in\n * `context()`: check them (in `authorizeRequest()` or here) before turning\n * one into a key.\n */\n protected memoryScopes(\n req: HttpRequest<any, any>,\n extra: { body: Body },\n ): AgentMemoryScopes | Promise<AgentMemoryScopes> {\n void req;\n void extra;\n return {};\n }\n\n /**\n * The `<memory>` block's budget, in tokens, for this controller's turns.\n * `undefined` (the default) uses the agent's `memory.maxTokens` (1,500\n * unless it says otherwise); `0` leaves the block out.\n */\n protected memoryMaxTokens: number | undefined = undefined;\n\n /**\n * Refuse a turn that arrives without a `threadId`, with a 400\n * `thread_required`, before anything runs.\n *\n * A stateless turn is otherwise open to any caller the route's middleware\n * lets through: the client carries the history, so the model runs, and is\n * billed, as a general-purpose chat. An app whose tools resolve their subject\n * from the thread can make them refuse such a turn, but the model has still\n * been paid for by then.\n *\n * It governs `stream` only. `upload` can still reach the provider without a\n * thread (a `provider` destination); refuse that in `authorizeRequest`.\n */\n protected requireThread = false;\n\n /**\n * The largest JSON body `stream` reads, in bytes (#444). Default 4 MB.\n *\n * A turn is a few kilobytes; even a long stateless chat carrying its whole\n * history is well under a megabyte, since files travel by id and not inline.\n * Without a cap the route read whatever arrived (the production server\n * accepts up to 10 GB), parsed it, and sent it to the provider at the app's\n * expense. A body over it is refused with a 413 `{ error: { kind, message,\n * status, code: \"body_too_large\" } }` before it is parsed, and before\n * `authorizeRequest`. Checked against `Content-Length` when there is one and\n * against the bytes read otherwise, so a chunked body cannot get past it.\n * `attach` and `stop` carry only ids and are held to 64 KB. `Infinity` turns\n * it off.\n */\n protected maxBodyBytes = DEFAULT_MAX_BODY_BYTES;\n\n /**\n * The most messages a stateless turn's client-carried history may hold\n * (#444). Default 1000. A longer one is a 413 `history_too_long` before\n * anything runs. Only `body.messages` counts: a threaded turn reads its\n * history from the store, which the client does not write. Every message is\n * sent to the model on every step, so this bounds what one turn can be billed\n * for as much as `maxBodyBytes` does. `Infinity` turns it off.\n */\n protected maxHistoryMessages = DEFAULT_MAX_HISTORY_MESSAGES;\n\n /**\n * Bounds what each model call of this controller's turns is sent (#473):\n * the latest turns of the thread that fit, cut at a turn start, the cut\n * moving `step` turns at a time so the prompt cache keeps hitting. See\n * `ContextWindowOptions`. `undefined` (the default) uses the agent's own\n * `contextWindow`, if it has one; `false` sends the whole history.\n *\n * The store is untouched: `loadThread` still answers the whole thread, every\n * message is still appended, and `readThread` shows all of it. Unlike\n * `maxHistoryMessages`, which refuses a stateless turn, this applies to\n * threaded and stateless turns alike and refuses nothing.\n *\n * protected contextWindow = { maxTurns: 40, maxTokens: 100_000 };\n */\n protected contextWindow: ContextWindowOptions | false | undefined = undefined;\n\n /**\n * Called before every model call of a turn's run, after the agent's own\n * `prepareStep`, with the request it hands over (`step.messages`,\n * `step.instructions`) and the turn's hook context. Answer `{ messages }`\n * or `{ instructions }` to send something else for that call alone; nothing\n * answered is stored. Not called for a sub-agent's model calls.\n *\n * protected prepareStep(step: PrepareStepContext) {\n * return { messages: windowMessages(step.history, { maxTurns: 20 }).messages };\n * }\n */\n protected prepareStep(\n step: PrepareStepContext,\n ctx: AgentHookContext,\n ): PrepareStepResult | void | Promise<PrepareStepResult | void> {\n void step;\n void ctx;\n }\n\n /**\n * How many runs one caller may have going at once in this process (#444).\n * Default 5. A run outlives the request that started it (so `attach` can\n * find it), which means a client can post a turn and disconnect and the run\n * still bills up to `maxSteps` model calls; without a cap, a thousand posts\n * were a thousand runs.\n *\n * Counted per `runLimitKey` (by default `runOwner`, the authenticated user),\n * and per conversation rather than per request: every turn on one thread is\n * one slot, because a thread holds one run at a time and a new turn there\n * supersedes the old one rather than adding to it. So a user resending\n * mid-answer is never refused; a user with five chats answering at once and\n * starting a sixth is, with a 429 `{ error: { kind: \"rate_limit\", message,\n * status, code: \"too_many_runs\" } }`, after `authorizeRequest` and before the\n * model is asked anything. A slot is freed when the run ends (stopped, timed\n * out, or finished). `Infinity` turns it off.\n */\n protected maxConcurrentRuns = DEFAULT_MAX_CONCURRENT_RUNS;\n\n /**\n * Who `maxConcurrentRuns` counts a turn against (#444). The default is\n * `runOwner`'s answer, the authenticated user; `null` is not counted.\n *\n * An anonymous turn is therefore not limited by default, because there is\n * nothing sound to count it under: a client address is the proxy's unless\n * `GEMI_TRUST_PROXY` is set, which would put every visitor in one bucket, and\n * the session cookie is the visitor's to drop. An app that serves anonymous\n * chats returns its own key here (`ip:${clientIp(req)}` behind a trusted\n * proxy, say), sets `requireThread`, or puts `RateLimitMiddleware` on the\n * route.\n */\n protected runLimitKey(\n req: HttpRequest<any, any>,\n params: { owner: string | null; threadId?: string },\n ): string | null | Promise<string | null> {\n void req;\n return params.owner;\n }\n\n /**\n * Decides whether this caller may use this route, on every one of the four:\n * `stream`, `attach`, `stop` and `upload` (#542). Throw a request breaker\n * (`InsufficientPermissionsError`, say) to refuse; return to let it through.\n *\n * It runs before the route does any work of its own: on `stream`, ahead of\n * the thread's lock and load, `instructions()` and the provider, so a refused\n * turn is not charged for, waits behind no run and does not learn whether its\n * thread exists; on `attach`, before a live run's frames are read.\n *\n * `threadId` is the one the client sent, taken on trust and not yet checked\n * against the store — which is what makes this the place to check that the\n * caller owns it. A thread-scoped app that checks it here on every route\n * keeps a thread's live answer, its stop button and its attachments to its\n * owner. It is `undefined` when the request names no thread: a stateless\n * turn, an upload without one, a stop by `runId` or `clientRunId`.\n *\n * `body` is the client's `body` option — the same object `instructions()`,\n * `context()` and `attachmentScope()` get — on the two routes that carry it,\n * `stream` and `upload` (#603). A chat with no thread and no user names its\n * subject there (a page id, say), and this is where to check that the caller\n * may touch it. `attach` and `stop` carry no body, so it is absent on them;\n * narrow on `route` to read it. Like `threadId` it is the client's claim,\n * unchecked.\n *\n * THE DEFAULT CHECKS `resource`, when there is one, and lets everything\n * through otherwise. An override that also wants it calls\n * `super.authorizeRequest(req, params)`.\n */\n protected authorizeRequest(\n req: HttpRequest<any, any>,\n params: AuthorizeRequestParams<Body>,\n ): void | Promise<void> {\n return this.resource?.authorize(req, params);\n }\n\n /**\n * THE RESOURCE THIS CHAT IS ABOUT, checked on every route by the default\n * `authorizeRequest` (#726): a resource policy's `forAgent`, which names the\n * resource's id in the `body` and the resource a thread belongs to.\n *\n * ```ts\n * resource = PagePolicy.forAgent({\n * body: (body: PageBody) => body.pageId,\n * thread: (threadId) => ChatThread.pageIdOf(threadId),\n * });\n * ```\n *\n * `stream` and `upload` are refused unless the caller may use the resource\n * the body names, and, when they name a thread, unless it is that\n * resource's. `attach` and `stop` are refused unless the caller may use the\n * thread's resource. A refusal is the policy's (a 404 by default), the same\n * for a resource or thread that does not exist. A live run still answers\n * only its `runOwner`.\n */\n protected resource?: AgentResource<Body>;\n\n /**\n * WHO OWNS A RUN THIS REQUEST STARTS, and who a request to `attach` or `stop`\n * one is (#442). An opaque key, compared with `===`; `null` is nobody.\n *\n * `stream` records it on the run, and from then on the run answers only that\n * key: `attach` to it, `stop` of it (by `runId`, `threadId` or `clientRunId`,\n * including a turn still waiting its place), and a turn on its thread that\n * would supersede it while it is still going are each refused with a 403\n * `{ error: { kind: \"permission\", message, status } }` for any other caller.\n * That holds whatever `authorizeRequest` says, which is the point: every\n * handle on a run is one a third party can come to hold (a shared link, a\n * log line, a guessable `clientRunId`), and none of them says whose it is.\n *\n * THE DEFAULT IS THE AUTHENTICATED USER, `user:<id>`, and `null` without one.\n * A `null` owner records an unowned run, which answers whoever holds a\n * handle — exactly what every run did before this existed. So:\n *\n * - an anonymous turn starts an unowned run; its `threadId` stays the\n * capability. `sessionId()` is not used as a fallback: it is a cookie the\n * visitor writes, it can be minted between the turn and the reattach (a\n * view visited in between), and a mismatch would lock a visitor out of\n * their own run. An app with its own anonymous identity returns it here.\n * - a run started by an authenticated user cannot be read or stopped by an\n * anonymous request, nor by another user.\n * - a run the server starts itself (registered on `liveRuns` with no\n * `owner`) is unowned.\n *\n * Override it for anything wider than a user — a thread shared by a team\n * returns `team:<id>` (from the user, never from the body) — or `null` to\n * turn the check off. Whatever it reads must be present on all of `stream`,\n * `attach` and `stop`, the same rule `attachmentScope` states: guard the three\n * routes with the same middleware.\n *\n * It is also the `subject` every pending call of the run is signed for\n * (#447): an approval or answer is accepted only on a turn whose `runOwner`\n * is the one the question was asked of. So it must answer the same on the\n * turn that asks and the turn that answers.\n */\n protected runOwner(req: HttpRequest<any, any>): string | null | Promise<string | null> {\n const user = req.ctx?.()?.user;\n const userId = user?.id ?? user?.publicId;\n if (userId !== undefined && userId !== null && String(userId) !== \"\") {\n return `user:${String(userId)}`;\n }\n return null;\n }\n\n /**\n * STARTS A TURN FROM SERVER CODE (#839): a queue job, a command, an MCP\n * tool, a webhook. No browser and no route: the turn goes through this\n * controller's `stream` as a `useChat` turn would, on a request built here,\n * so the agent, the store, `authorizeRequest` and `resource`, `runOwner`,\n * `maxConcurrentRuns`, the thread's lock, `instructions()`, `context()`,\n * the hooks and the tools' `ctx` (`threadId`, `ctx.jobs`, `ctx.generate`)\n * are the same as for a turn from the chat.\n *\n * ```ts\n * const turn = await ChatController.startTurn({\n * threadId,\n * text: \"Make the hero darker\",\n * user, // req.ctx().user for the turn\n * body: { siteId }, // what useChat's `body` option would send\n * });\n * const { text, finishReason, pending } = await turn.result();\n * ```\n *\n * The route's middleware does not run: the caller is server code and names\n * the user itself (`null` or absent is an anonymous turn). A turn the route\n * would refuse throws an `AgentTurnError` with the status and code it would\n * have answered; a request breaker thrown by `authorizeRequest` is thrown\n * as it is.\n *\n * The run lives in the process that called this, like every run. From a\n * queue job, await `result()` so the worker does not move on without it.\n */\n static async startTurn<C extends AgentController<any, any>>(\n this: new () => C,\n params: AgentTurnParams<ControllerBody<C>>,\n ): Promise<AgentTurn> {\n const { threadId } = params;\n if (typeof threadId !== \"string\" || threadId === \"\") {\n throw new TypeError(\n \"AgentController.startTurn needs a `threadId`: a server turn is stored on a thread. Create one with the store's `createThread`.\",\n );\n }\n const turn: ClientTurn = {\n ...params.turn,\n ...(params.text !== undefined ? { text: params.text } : {}),\n };\n // The app's fields first, so none of them can take the place of the\n // envelope's.\n const payload = { ...(params.body as object | undefined), threadId, turn };\n const req = new HttpRequest<any, any>(\n new Request(SERVER_TURN_URL, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(payload),\n }),\n {},\n \"api\",\n new URL(SERVER_TURN_URL).pathname,\n );\n const controller = new this();\n // Marks the request as `startTurn`'s, so only its run is kept here.\n serverTurns.set(req, null);\n // A request scope of its own, carrying the caller's user, whether or not\n // this is called from inside another request: the run is not that\n // request's, and must not end with it or read its user.\n const response = await RequestContext.run(req, () => controller.stream(req), {\n user: params.user ?? null,\n });\n\n const started = serverTurns.get(req);\n if (!started) {\n throw await AgentTurnError.from(response);\n }\n serverTurns.delete(req);\n // Nobody reads the stream; the run goes on without it (see `toResponse`).\n response.body?.cancel().catch(noop);\n\n const { run, hooks } = started;\n let pending: PendingToolCall[] = [];\n // The pending calls are on the `awaiting-input` event, not on the result.\n // The run's frames are buffered from the start, so this misses nothing.\n const watched = (async () => {\n for await (const event of run) {\n if (event.type === \"awaiting-input\") pending = event.pending as PendingToolCall[];\n }\n })().catch(noop);\n\n let result: Promise<AgentTurnResult> | undefined;\n return {\n runId: run.runId,\n threadId,\n run,\n stop: (stopParams) => run.stop(stopParams),\n result: () =>\n (result ??= (async () => {\n const outcome = await run.result();\n // After the transcript is stored and the hooks are done (or\n // `hookHoldMs` passed), so a caller that reads the thread next sees\n // this turn in it.\n await Promise.all([hooks, watched]);\n const messages = outcome.messages as AgentMessage[];\n return {\n ...outcome,\n threadId,\n text: lastAssistantText(messages),\n pending: outcome.finishReason === \"awaiting-input\" ? pending : [],\n };\n })()),\n };\n }\n\n /**\n * `POST /<path>` — one route for every client turn. A first message, an\n * approval, an answer to a question and a client tool's result are all just\n * the next turn, so none of them gets an endpoint of its own.\n */\n async stream(req: HttpRequest<any, any> = new HttpRequest()): Promise<Response> {\n const parsed = await readJsonBody(req, this.maxBodyBytes);\n if (parsed.error) {\n // Before anything is registered or charged for. A run started off a body\n // we could not read would answer nothing, at the user's expense.\n return invalidRequest(parsed);\n }\n const body = parsed.body;\n const threadId = typeof body.threadId === \"string\" ? body.threadId : undefined;\n const parsedTurn = toClientTurn(body);\n if (parsedTurn.error) {\n return invalidRequest({ body: {}, error: parsedTurn.error });\n }\n // Reassigned by a regenerate: the turn run again is the one the store holds.\n let turn = parsedTurn.turn;\n // Replace the thread's last answer rather than answer after it (#451). Only\n // meaningful on a thread: a stateless client trims its own history.\n const regenerate = threadId !== undefined && body.regenerate === true;\n const clientRunId = typeof body.clientRunId === \"string\" ? body.clientRunId : undefined;\n // The app's fields, separated once and handed to every method that reads\n // them — `authorizeRequest`, `instructions`, `context`, `attachmentScope` —\n // so none of them can disagree about what the client sent. They cannot read\n // it themselves: `readJsonBody` has consumed the request's body by now.\n const extraBody = appBody<Body>(body);\n\n // Before `pendingTurns`, so a refused turn leaves nothing for `/stop` to\n // find. It does not yield, unlike `authorizeRequest` below.\n if (this.requireThread && !threadId) {\n return jsonResponse(400, {\n code: \"thread_required\",\n message: \"This agent takes a turn only on a thread: send a threadId.\",\n });\n }\n\n if (regenerate && !this.store.removeMessages) {\n return jsonResponse(501, {\n code: \"regenerate_unsupported\",\n message:\n \"This agent's store cannot remove messages, so a thread's answer cannot be regenerated. Implement `removeMessages` on the AgentStore.\",\n });\n }\n\n // The client's history is the only part of a stateless turn whose size the\n // client chooses and the model is billed for on every step (#444). A\n // threaded turn's `messages` are ignored, so they are not counted.\n if (\n !threadId &&\n Array.isArray(body.messages) &&\n body.messages.length > this.maxHistoryMessages\n ) {\n return limitResponse(\n 413,\n \"history_too_long\",\n `The conversation has ${body.messages.length} messages; this agent takes at most ${this.maxHistoryMessages}.`,\n );\n }\n\n // Who this run will belong to. Read before `pending` exists, so a stop that\n // finds the pending turn can already be checked against it. See `runOwner`.\n const owner = await this.runOwner(req);\n\n // From here until `register`, the only thing `/stop` can find this turn by.\n // See `pendingTurns`.\n const pending = clientRunId ? { cancelled: false, owner } : null;\n if (pending) {\n pendingTurns.set(clientRunId, pending);\n }\n\n // The whole of the stateless/threaded difference, in one expression: with a\n // thread the server owns the history, without one the client carries it.\n // Nothing else below branches on it, which is why stateless keeps working\n // even for an app that never configures a store.\n //\n // The `threadId` is the client's, and nothing here checks that this caller\n // owns it — `AgentStore` cannot, since it holds no user. A `threadId` is\n // therefore a capability and has to be unguessable (`createThread` mints a\n // uuid) and, for anything that matters, checked: override `authorizeRequest()`\n // or give it a `store` that scopes by `req.user`. The framework's job is to make\n // sure the route is behind the router's middleware in the first place,\n // which `ApiRouter.agent()` now does.\n //\n // Everything from the load on happens inside `start`, which on a thread\n // runs under the thread's lock once the previous run's transcript is in the\n // store — the load has to come after that, or it reads a history the old\n // answer is missing from. `instructions()` follows the load in there rather\n // than running ahead of the lock, so that a dead thread is still a 404\n // before the app's own work is spent on it; the cost is that a turn queued\n // behind this one waits for `instructions()` as well.\n // The run `start` registered, if it got that far: its end is what frees\n // this turn's `maxConcurrentRuns` slot.\n let started: AgentRun | null = null;\n // What a regenerate took out of the thread, kept until the run replacing\n // it has started.\n let removed: AgentMessage[] = [];\n const start = async (): Promise<Response> => {\n try {\n return await startRun();\n } finally {\n // A regenerate that never started its run — stopped while it waited,\n // or a throw from the app's hooks — puts back what it took out, since\n // no new answer is coming to replace it. Still under the thread's lock,\n // and appended at the end, which is where it was: it was the tail.\n if (threadId && removed.length > 0 && (started as AgentRun | null) === null) {\n await this.store\n .appendMessages(threadId, removed)\n .catch((err) => this.reportHookFailure(err));\n }\n }\n };\n const startRun = async (): Promise<Response> => {\n let messages: AgentMessage[];\n // The `<jobs>` block for this turn's system prompt (#461), on a thread\n // that has background jobs.\n let jobsBlock: string | null = null;\n if (threadId) {\n const history = await this.store.loadThread(threadId);\n if (!history) {\n // Before `instructions()` and before the run: nothing has been\n // charged for, and the client has to learn that its thread is gone —\n // expired, mistyped, or on an instance that no longer exists — rather\n // than see it answered as an empty conversation and have this turn\n // persisted under the dead id.\n //\n // That ordering is deliberate. An ownership check belongs in\n // `authorizeRequest()`, which has already run; one left in\n // `instructions()` has not, so a caller holding a uuid learns whether\n // it is live here without the app's say. The id is unguessable, so\n // the load stays above `instructions()`, whose own work (a database\n // read, typically) would otherwise be spent on a thread that is gone.\n // Move it below and that work is spent on every dead id instead.\n return jsonResponse(404, {\n code: \"thread_not_found\",\n message: `Thread ${threadId} does not exist here, or has expired.`,\n });\n }\n // A message a dead run left unfinished is closed here, and written\n // back, before the run is handed the history: the model then reads it\n // as interrupted, and its open calls have results. Under the thread's\n // lock and after the previous run's transcript is stored, so the only\n // unfinished message left is one no run in this process owns.\n const thread = await this.settleThread(threadId, history, { write: true });\n messages = thread.messages;\n jobsBlock = this.jobsBlock(thread.jobs);\n if (regenerate) {\n const cut = regenerationCut(messages);\n if (!cut) {\n return jsonResponse(409, {\n code: \"nothing_to_regenerate\",\n message: `Thread ${threadId} has no user turn to answer again.`,\n });\n }\n // The last user turn and everything after it leave the store, and the\n // turn is run again from what the store held — not from the client's\n // copy, which may be stale or carry local ids. The user message comes\n // back under a new id when the run reports it. Under the thread's\n // lock and after the previous run's transcript is stored, so nothing\n // writes the removed answer back. Each removed message takes its\n // `usage` with it: the thread never holds both answers' costs.\n removed = messages.slice(cut.index);\n await this.store.removeMessages!(\n threadId,\n removed.map((message) => message.id),\n );\n messages = messages.slice(0, cut.index);\n // The stored turn, under the client's `localId` for it: the message\n // is minted again, and the client has to be told the new id (#466).\n turn = turn?.localId ? { ...cut.turn, localId: turn.localId } : cut.turn;\n }\n } else {\n messages = Array.isArray(body.messages) ? (body.messages as AgentMessage[]) : [];\n warnInMemoryNonces(this.nonces);\n }\n\n const instructions =\n [(await this.instructions(req, { body: extraBody })) || undefined, jobsBlock ?? undefined]\n .filter(Boolean)\n .join(\"\\n\\n\") || undefined;\n const context = await this.context(req, { body: extraBody });\n // Above the cancel check, not below it, and that placement is the whole\n // reason this is a separate statement rather than an argument on the call\n // below: the comment on that check says nothing yields between it and\n // `register`, and an `await` for the app's `attachmentScope()` — a\n // database read, in any app that has one — is exactly the yield a stop\n // would land in and be missed.\n const attachments = await this.attachmentsFor(req, threadId, { body: extraBody });\n // For the same reason as `attachments`: an `await` on the app's code,\n // which has to come before the cancel check below.\n const memoryScopes = (this.agent as AnyAgent).memory\n ? await this.memoryScopes(req, { body: extraBody })\n : undefined;\n\n if (pending?.cancelled) {\n // Stopped while it waited. Nothing has been asked of the model and\n // nothing registered, so there is no run to end and nothing charged\n // for. Checked after the last `await` above, so that a stop landing\n // during it is not missed: from here to `register` nothing yields.\n return stoppedBeforeStart();\n }\n\n // Only a threaded turn has anywhere to be written as it runs. See\n // `TurnJournal`.\n const journal = threadId\n ? new TurnJournal(this.store, threadId, messages, (err) => this.reportHookFailure(err))\n : null;\n\n // Chosen here rather than by the run, so the hook context exists before\n // the run does: `redactError` below is handed it, and the run may call\n // it for its first frame.\n const runId = `run_${crypto.randomUUID()}`;\n const ctx: AgentHookContext = { req, runId, threadId };\n\n // The app's `onMessage` for the turn's user message, called while the\n // run goes rather than after it (#806). See `EarlyTurn`.\n const early: EarlyTurn = { id: null, notified: Promise.resolve() };\n\n const run = this.agent.stream({\n runId,\n messages,\n turn,\n threadId,\n // The run reports each message as it finishes it, the user's turn\n // first and before the model is asked anything. Only the store hears\n // about most of them here: the app's `onMessage` runs after the run,\n // in `notifyRun`, except for the turn's own message (below).\n ...(journal ? { onMessage: (message: AgentMessage) => journal.finish(message) } : {}),\n // The turn's user message, once the journal has written it: the app's\n // `onMessage` for it is called now, so whatever the app keeps beside\n // a stored message (where it was sent from, say) is there for a read\n // of the thread while the run is still going (#806). Off the run's\n // path, as the journal is: neither the store nor the hook holds up\n // the model. `notifyRun` waits for it and does not call it again.\n onTurn: (message: AgentMessage) => {\n if (early.id !== null) return;\n early.id = message.id;\n const written = journal ? journal.settled() : Promise.resolve();\n early.notified = written.then(() => this.safely(() => this.onMessage(message, ctx)));\n },\n instructions,\n // Built from this request once, here, and the only thing the run knows\n // about who asked. The run has no request of its own — see\n // `AgentContext` — so a tool that needs the user reads it from this.\n context,\n // Resolved once, above, and handed to every tool of the run as\n // `ctx.attachments`. It is derived from the request — the user the\n // middleware authenticated, or the thread — and never from anything the\n // model can write, which is the property that makes an attachment id\n // safe to give a model at all. `null` for a request with no subject:\n // tools still get an object, and it throws with a sentence naming\n // `attachmentScope()`.\n attachments,\n // The same object `instructions()` was handed, so the two cannot\n // disagree about what the client sent — and carried on the run\n // because a run outlives the request that started it. By the time a\n // tool executes, the body is long gone.\n // Cast because `Body` is constrained to `object` so an `interface` can be\n // used, and an interface has no index signature to satisfy\n // `Record<string, unknown>`. The value is a parsed JSON object either\n // way; the constraint is about what an app may declare, not about what\n // arrives.\n body: extraBody as Record<string, unknown>,\n // What the client, and for a tool's exception the model, is told about\n // a failure. See `redactError`.\n redactError: (error, info) => this.redactError(error, info, ctx),\n // Where answers' nonces are spent. See `nonces`.\n nonces: this.nonces,\n // Where approved tools' executions are recorded. See `receipts`.\n receipts: this.receipts,\n // The principal its pending calls are bound to (#447): an answer is\n // only accepted from the same `runOwner` the question was asked of.\n subject: owner,\n // The memory scopes the server resolved for this caller (#936). The\n // model only ever sees their labels.\n ...(memoryScopes\n ? {\n memory: {\n scopes: memoryScopes,\n ...(this.memoryMaxTokens !== undefined ? { maxTokens: this.memoryMaxTokens } : {}),\n },\n }\n : {}),\n // Background jobs (#461) settle into the thread, so only a threaded\n // turn can start one. The job records who started it.\n ...(threadId ? { jobs: { owner } } : {}),\n // What each model call is sent (#473). Only the request: the store\n // still gets every message through `journal` above.\n ...(this.contextWindow !== undefined ? { contextWindow: this.contextWindow } : {}),\n // Where `contextWindow.compact` keeps this thread's summaries, when\n // the store holds them (#782).\n ...(threadId && isSummaryStore(this.store) ? { summaryStore: this.store } : {}),\n // Only when overridden, so a controller without one adds no call.\n ...(this.prepareStep !== AgentController.prototype.prepareStep\n ? { prepareStep: (step: PrepareStepContext) => this.prepareStep(step, ctx) }\n : {}),\n }) as AgentRun;\n\n // Registered before the response is built: the run is now owned by the\n // process rather than by this request, which is the property `/attach`\n // depends on and the reason a dropped connection no longer cancels\n // anything.\n const eventHooks = this.liveRuns.register(run, {\n threadId,\n // Who may attach to it and stop it from now on. See `runOwner`.\n owner,\n // The client's handle on a run it started, which is the only one that\n // exists before `run-start` reaches it. See `RegisterParams`.\n clientRunId,\n onEvent: (event) => this.dispatchEvent(event, ctx),\n onInternalError: (err) => this.reportHookFailure(err),\n // So the registry's age ceiling never cuts short a run its agent\n // allowed to be longer. See `MemoryLiveRuns.maxAgeMs`.\n maxRunDurationMs: this.agent.maxRunDurationMs,\n });\n\n started = run;\n if (journal) this.follow(run, journal);\n\n // Kept, not just fired: the next turn on this thread has to know when\n // this one's transcript is in the store. See `withThread`. The request\n // waits for more than the thread does — the hooks as well — so that\n // `onMessage` still finds the user who sent the message; the thread\n // waits only for the store, so a slow hook is not a slow next turn.\n const { stored, hooks } = this.persistRun(run, ctx, eventHooks, journal, early);\n persisted.set(run, stored);\n if (serverTurns.has(req)) serverTurns.set(req, { run, hooks });\n // Registered now, while the request is certainly open: `waitUntil` is\n // ignored once it has ended, and the run settling can end it before a\n // single hook has been called.\n req.ctx?.()?.waitUntil(hooks);\n\n return run.toResponse();\n };\n\n try {\n // After `pending` is registered, not before: the app's check is a yield —\n // a database read, typically — and a stop pressed during it has to find\n // this turn. Before the thread's lock, which ends the thread's previous\n // run, so a refused or stopped turn does not end it either.\n await this.authorizeRequest(req, { route: \"stream\", threadId, body: extraBody });\n // After the app's check, so a caller it refuses does not learn which ids\n // are someone's; before the thread's lock, so a refused turn supersedes\n // nothing. The client's history only counts without a thread: with one,\n // `body.messages` is ignored and the history comes from the store.\n const foreign = await this.foreignFile(\n [...(turn?.files ?? []), ...(threadId ? [] : clientHistoryFiles(body.messages))],\n owner,\n );\n if (foreign) {\n return foreign;\n }\n if (pending?.cancelled) {\n return stoppedBeforeStart();\n }\n // After the app's check, so a refused caller spends no slot; before the\n // thread's lock, so a turn over the limit waits behind nothing. No yield\n // between the count and the take: see `RunSlots.take`.\n const limitKey = await this.runLimitKey(req, { owner, threadId });\n const release =\n limitKey === null\n ? noop\n : runSlotsFor(this.liveRuns).take(\n limitKey,\n threadId ? `thread:${threadId}` : `run:${crypto.randomUUID()}`,\n this.maxConcurrentRuns,\n );\n if (!release) {\n return limitResponse(\n 429,\n \"too_many_runs\",\n `You already have ${this.maxConcurrentRuns} conversations answering. Wait for one to finish, or stop it, and send again.`,\n );\n }\n try {\n return threadId ? await this.withThread(threadId, owner, start) : await start();\n } finally {\n // A turn that never started a run (a dead thread, stopped while it\n // waited, a throw) frees its slot now; one that did, when the run ends.\n const run = started as AgentRun | null;\n if (run) {\n run.result().then(release, release);\n } else {\n release();\n }\n }\n } finally {\n if (pending && pendingTurns.get(clientRunId) === pending) {\n pendingTurns.delete(clientRunId);\n }\n }\n }\n\n /**\n * A thread holds one run at a time; a new turn on it ends the old one first.\n *\n * Since a dropped connection no longer stops a run, a user who sends again\n * mid-answer used to leave the first run going. It could not see the new\n * turn, the new run's `loadThread` could not see its answer, and both\n * appended when they finished — in whichever order the model returned them,\n * so the thread read `user2, assistant2, user1, assistant1`. `byThread` then\n * named the second run while the first was still live and unstoppable by\n * `threadId`.\n *\n * Stopping the old run and waiting for its transcript to land is chosen over\n * refusing the new turn with a 409, because sending again *is* the stop: it\n * is what `useChat.send` means, and a client that has to poll `/stop` until\n * the run is really gone before it may post the turn it has already shown is\n * a worse client for no better thread. The cost is that the new turn waits\n * for the old run to unwind, which is as long as its slowest tool in flight —\n * and that wait is the thing that puts `assistant1` before `user2`.\n *\n * The wait is on `persistRun`'s `stored`, not on `run.result()`. `result()`\n * settling is the transcript being final, not stored: `appendMessages` runs\n * after it, and a `loadThread` in that gap reads a history the old answer is\n * missing from, which is the original bug by a shorter route. It is also\n * *only* that: `stored` settles once the transcript is stored, and the app's\n * hooks run on in `hooks`, which holds the old run's request and not the\n * thread, so a slow `onMessage` is not a slow thread and a hung one is not a\n * hung thread.\n *\n * The lock around it is what makes a *third* turn wait for the second rather\n * than for the first. Two turns arriving together both see the same live\n * run, both stop it, both wait for it, and both start — the same race, one\n * message later. Under the lock the later one finds the earlier one\n * registered and stops that instead. Per process, like `LiveRuns`, and for\n * the same reason: the run it guards lives here.\n */\n private async withThread(\n threadId: string,\n owner: string | null,\n fn: () => Promise<Response>,\n ): Promise<Response> {\n const previous = threadLocks.get(threadId) ?? Promise.resolve();\n let release!: () => void;\n const held = new Promise<void>((resolve) => {\n release = resolve;\n });\n const tail = previous.then(() => held);\n threadLocks.set(threadId, tail);\n await previous;\n try {\n const live = await this.liveRuns.find({ threadId });\n if (\n live &&\n this.liveRuns.isRunning(live.runId) &&\n !this.liveRuns.mayAccess(live.runId, owner)\n ) {\n // Superseding is a stop, and someone else's run is not this caller's to\n // stop (#442). Only while it is still going: an ended run is kept for\n // `ttlMs` but a turn after it touches nothing of it. Whether this caller\n // may post on the thread at all is `authorizeRequest`'s question.\n return notYourRun();\n }\n const run = live ? this.liveRuns.get(live.runId) : null;\n if (run) {\n // A run that already ended is still `find`-able for `ttlMs`; stopping\n // it is a no-op and waiting on it is the append it may still be doing.\n run.stop({ reason: \"superseded by a later turn on this thread\" });\n await persisted.get(run);\n }\n return await fn();\n } finally {\n release();\n if (threadLocks.get(threadId) === tail) {\n threadLocks.delete(threadId);\n }\n }\n }\n\n /**\n * `POST /<path>/attach` — subscribe to a run already in progress, from a\n * cursor. This is a read of a live run, not a continuation of a stopped one:\n * the work never paused, the listener changed.\n *\n * The cursor is `from`, else the client's `cursor`, else `Last-Event-ID`,\n * else the oldest frame still buffered — and it is honoured only for the run\n * the client's `runId` names. A cursor the buffer has dropped is a 410 naming\n * what survives; *no* cursor is the tail, because a page reattaching on mount\n * has no transcript to leave a hole in. See `resolveCursor`.\n */\n async attach(req: HttpRequest<any, any> = new HttpRequest()): Promise<Response> {\n const parsed = await readJsonBody(req, SMALL_BODY_BYTES);\n if (parsed.error) {\n return invalidRequest(parsed);\n }\n const body = parsed.body;\n const threadId =\n typeof body.threadId === \"string\" ? body.threadId : searchParam(req, \"threadId\");\n\n if (!threadId) {\n return jsonResponse(400, {\n code: \"invalid_request\",\n message: \"attach needs a threadId: it is the handle that survives a refresh.\",\n });\n }\n\n // Before the lookup: a refused caller learns neither whether a run is live\n // on the thread nor any frame of it.\n await this.authorizeRequest(req, { route: \"attach\", threadId });\n\n // The store is not consulted. This route answers whether a run is in\n // flight here, and a run it finds was started on a thread `stream` had\n // already loaded; a miss is `no_live_run` whether or not the thread exists,\n // because a client that gets one re-reads the thread anyway (see\n // `onAttachMiss`) and learns there. The thread's own 404 is `stream`'s,\n // where a turn would otherwise be persisted under it.\n const live = await this.liveRuns.find({ threadId });\n if (live && !this.liveRuns.mayAccess(live.runId, await this.runOwner(req))) {\n // Another caller's run (#442): none of its frames, ended or not.\n return notYourRun();\n }\n if (!live) {\n // An explicit miss, not a 200 with an empty stream. See `MemoryLiveRuns`:\n // behind a round-robin load balancer this is the common case, and it has\n // to be visible as one.\n return jsonResponse(404, {\n code: \"no_live_run\",\n message: `No run in progress for thread ${threadId} in this process.`,\n });\n }\n\n // A cursor is only a number if you know which run it counts within: `seq`\n // restarts at zero in every run, so honouring a cursor from run_1 against a\n // live run_2 would skip that many frames off the head of a run this client\n // has seen nothing of. `runId` is the client saying which run its cursor\n // means; naming one that is not live forfeits the cursor and takes the\n // tail, which is as close to the start as the buffer can offer.\n //\n // Only a MISMATCH forfeits. An absent `runId` is not a wrong answer, it is\n // an older question: `from` and `Last-Event-ID` predate the pairing and\n // carry no run, and an `EventSource` reconnecting on its own will never\n // grow one. Those keep resuming exactly as before.\n const cursorRunId = typeof body.runId === \"string\" ? body.runId : undefined;\n const cursor = cursorRunId && cursorRunId !== live.runId ? undefined : resolveCursor(req, body);\n\n try {\n return sseResponse(this.liveRuns.replay(live.runId, cursor));\n } catch (err) {\n if (err instanceof FrameCursorEvictedError) {\n // 410 rather than 404: the run is there, the position is not. A client\n // that gets this reloads the thread instead of resuming into a hole.\n return jsonResponse(410, {\n code: err.code,\n message: err.message,\n oldestSeq: err.oldest,\n });\n }\n if (err instanceof LiveRunNotFoundError) {\n // Lost the race with eviction between `find` and `replay`.\n return jsonResponse(404, { code: err.code, message: err.message });\n }\n throw err;\n }\n }\n\n /**\n * `POST /<path>/stop` — the explicit cancel. Since a dropped connection no\n * longer stops a run, this and a later turn on the same thread are the only\n * things that do, and it is why stopping cannot be a client-side concern:\n * the tool loop is here, and a client that stops reading has not stopped\n * step four from charging a card.\n *\n * Returns as soon as the run is aborted, not when it has finished unwinding.\n * The terminal events — the stopped tool results, the aborted message — go\n * out on the run's own stream, so whoever is watching it sees the ending,\n * and `onMessage` records it whether anyone is watching or not.\n *\n * Answers `{ stopped }` normally, and a `Response` only to reject a request\n * it could not read — the union is the error, not a second success shape.\n */\n async stop(\n req: HttpRequest<any, any> = new HttpRequest(),\n ): Promise<{ stopped: boolean } | Response> {\n const parsed = await readJsonBody(req, SMALL_BODY_BYTES);\n if (parsed.error) {\n // `{ stopped: false }` would be the wrong answer as well as the wrong\n // status: it means \"there was nothing to stop\", and the truth is that we\n // could not tell what to stop. A client that believes the first one stops\n // asking, and the run keeps going.\n return invalidRequest(parsed);\n }\n const body = parsed.body;\n\n await this.authorizeRequest(req, {\n route: \"stop\",\n threadId: typeof body.threadId === \"string\" ? body.threadId : undefined,\n });\n\n // Three handles, most specific first, because which ones the client has\n // depends on how far the run got. `runId` is the server's own and settles\n // it. `clientRunId` covers the window before `run-start`, when the client\n // has nothing else for a stateless first turn — and, before that, a turn\n // that has not become a run yet because it is waiting its place on the\n // thread, which is ended where it waits. `threadId` is the fallback for a\n // client that did not start this run at all — one that attached to it,\n // whose replayed tail carried no `run-start`.\n const caller = await this.runOwner(req);\n let runId = typeof body.runId === \"string\" ? body.runId : undefined;\n if (!runId && typeof body.clientRunId === \"string\") {\n runId = this.liveRuns.findByClientRunId(body.clientRunId) ?? undefined;\n if (!runId) {\n const pending = pendingTurns.get(body.clientRunId);\n if (pending) {\n // A `clientRunId` is the client's own choice and only as unguessable\n // as it made it, so the turn it names is checked like a run (#442).\n if (pending.owner !== null && pending.owner !== caller) {\n return notYourRun();\n }\n // Not on to `threadId`: that names the run this turn is queued\n // behind, which is already stopping, and answering for it would\n // leave this one to start.\n pending.cancelled = true;\n return { stopped: true };\n }\n }\n }\n if (!runId && typeof body.threadId === \"string\") {\n runId = (await this.liveRuns.find({ threadId: body.threadId }))?.runId;\n }\n\n const run = runId ? this.liveRuns.get(runId) : null;\n if (!run) {\n // Already finished, already evicted, or never here. Not an error: the\n // caller wanted the run stopped and it is not running.\n return { stopped: false };\n }\n if (!this.liveRuns.mayAccess(run.runId, caller)) {\n // Someone else's run, by whichever handle (#442). See `runOwner`.\n return notYourRun();\n }\n\n run.stop({ reason: typeof body.reason === \"string\" ? body.reason : undefined });\n\n // Deliberately not awaiting `run.result()`. Unwinding means letting tools\n // in flight settle into `denied` results and finalizing the assistant\n // message, which can take as long as the slowest tool — and a stop button\n // that spins for twenty seconds is a stop button people press twice.\n return { stopped: true };\n }\n\n /**\n * WHO A SCOPE BELONGS TO, and the one question in this file whose wrong\n * answer is a data leak rather than a bug.\n *\n * An attachment id given to the model comes back *from* the model, and what\n * the model writes is a function of everything it read — the user's text, a\n * tool's output, a document someone uploaded. So the id is untrusted in\n * exactly the way a request body is, and the scope it resolves under must come\n * from the server's own knowledge of the request. Nothing that reaches this\n * method may be readable or writable by the model: `req` is the HTTP request,\n * and `threadId` is the client's handle, not the model's.\n *\n * THE DEFAULT IS THE AUTHENTICATED USER, falling back to the thread, falling\n * back to `null`.\n *\n * - `user:<id>` when the request is authenticated. `req.ctx().user` is what\n * `AuthenticationMiddleware` and the `Auth` facade put there, so an agent\n * route behind `middlewares = [\"auth\"]` — which `ApiRouter.agent()` makes\n * the default posture — has a subject without the app writing anything.\n * - `thread:<id>` for an unauthenticated chat that has a thread. A `threadId`\n * is minted by `createThread` as a uuid and is documented as a capability,\n * and `upload` only passes one here that `store.loadThread` finds;\n * an anonymous support widget has nothing better, and scoping to the\n * conversation is strictly narrower than scoping to nothing.\n * - `null` otherwise, which means no attachment id is minted at all. There is\n * no third fallback on purpose. `sessionId()` is the tempting one and it is\n * the wrong one: it is a cookie the visitor writes, documented as *not a\n * credential*, so scoping to it is scoping to a value the caller chooses —\n * which is not a scope, it is a lookup key with extra steps.\n *\n * WHAT THIS DEFAULT GETS WRONG, since it will get something wrong for someone:\n * it is per user, not per conversation, so a user's own upload from one thread\n * resolves in another thread of theirs. That is the loose direction, and it is\n * chosen because the tight one breaks the flow the framework actually ships —\n * `useChat.uploadFile` posts a file before any thread exists, so a per-thread\n * default would make the first upload of every conversation unresolvable. An\n * app that wants per-conversation isolation returns\n * `{ key: \\`user:${id}:thread:${threadId}\\` }` here and has it; an app with\n * tenants returns `{ key: \\`org:${orgId}\\` }` and has that. What the default\n * must never be is broader than a user, and it is not.\n *\n * WHATEVER THIS READS MUST BE PRESENT ON EVERY AGENT ROUTE, and the default\n * reads `req.ctx().user`, which is present only where authentication\n * middleware ran. `agent()` mounts four routes and `.middleware()` guards\n * them individually, so `middleware({ stream: \"auth\" })` — the example in\n * `ApiRouter.agent`'s own doc — leaves `POST /chat/files` unauthenticated.\n * The upload then files the record under `thread:<id>` (or nothing at all)\n * while the run that follows, on the guarded route, resolves under\n * `user:<id>`, and every id minted on upload is a miss for the rest of the\n * conversation. It fails as `AttachmentNotFoundError`, worded identically to\n * an id the model invented, which is the point of that error and is also why\n * this particular misconfiguration is invisible. Guard `upload` and `stream`\n * together, or derive the key from something both of them have.\n *\n * gemi does not detect the skew for you, and the reason is the module's whole\n * premise: noticing that an id exists under a *different* scope requires\n * looking it up without one, and an unscoped read is the thing that must not\n * exist here — not even behind a `console.warn`. So the answer is the\n * documentation you are reading and the identical error, not a probe.\n *\n * THE BODY, AND THE ONE RULE FOR READING IT (#603). The third argument is the\n * client's `body` option — what `instructions()` gets — on both routes that\n * resolve a scope: `stream`, and `upload`, where `useChat.uploadFile` sends\n * the same option beside the file. It exists for the chat that has neither a\n * user nor a thread, a stateless page builder say, whose subject is only in\n * the body:\n *\n * protected async attachmentScope(req, threadId, { body }) {\n * const scope = await super.attachmentScope(req, threadId);\n * if (scope) return scope;\n * if (typeof body.pageId !== \"string\") return null;\n * const page = await Page.findFirst({ where: { publicId: body.pageId } });\n * return page ? { key: `page:${page.publicId}` } : null;\n * }\n *\n * The `typeof` line is not tidiness. `Body` types the shape, not the contents,\n * and to an ORM `{ publicId: undefined }` is no filter at all: a request that\n * leaves `pageId` out would find the first page in the table and be filed\n * under it, along with every other request that leaves it out.\n *\n * A body field is a value the caller chose, which is exactly what the\n * `sessionId()` paragraph above refuses. What separates the keys this may be\n * built from is not whether the client sent them — `threadId` is sent by the\n * client too — but WHETHER THE VALUE IS AN UNGUESSABLE CAPABILITY WHOSE\n * EXISTENCE THE SERVER CHECKS. A page `publicId` that is looked up, as above,\n * is one, on the same footing as a `threadId` that `loadThread` finds: holding\n * it is what entitles the caller to the page, and an id nobody minted resolves\n * to nothing. `body.orgId` in an app with users is NOT one, and passing the\n * body is precisely what makes `` { key: `org:${body.orgId}` } `` spellable: an\n * org id is enumerable and the caller may not belong to that org, so that is\n * every tenant's files handed to whoever types another tenant's id. A tenant\n * comes from `req.ctx().user`, never from here. And a value interpolated\n * without being looked up is the `sessionId()` mistake again, however\n * unguessable it looks — an anonymous caller then mints a fresh scope per\n * request. Look it up, and key on what the lookup returned.\n *\n * The same skew rule as above applies to the body, and more quietly: the key\n * must come out the same on `upload` and on `stream`. `useChat` sends the one\n * `body` option to both, so a key derived from a field that stays put for the\n * whole conversation — the page, not the selected element — agrees by\n * construction. One derived from a field that changes between the upload and\n * the turn does not, and fails as that same `AttachmentNotFoundError`.\n *\n * The third argument is new, and the method keeps its first two, so an\n * override written as `attachmentScope(req, threadId)` works unchanged; one\n * that calls `super.attachmentScope(req, threadId)` may leave it off too.\n *\n * The key is opaque and compared with `===`. It is never sent to the client\n * and never shown to the model.\n */\n protected attachmentScope(\n req: HttpRequest<any, any>,\n threadId?: string,\n extra?: { body: Body },\n ): AttachmentScope | null | Promise<AttachmentScope | null> {\n void extra;\n const user = req.ctx()?.user;\n const userId = user?.id ?? user?.publicId;\n if (userId !== undefined && userId !== null && String(userId) !== \"\") {\n return { key: `user:${String(userId)}` };\n }\n if (threadId) {\n return { key: `thread:${threadId}` };\n }\n return null;\n }\n\n /**\n * WHAT THIS ROUTE ACCEPTS AT ALL: a size ceiling and a list of types (#683).\n * Checked once per upload, after `authorizeRequest` and before anything is\n * stored or sent to the provider, and a file outside them is answered **422**\n * with `{ error: { code, message } }` — `file_too_large` or\n * `unsupported_file_type` — which `useChat().attach()` rejects with as an\n * `AttachError`, so a composer can mark the one file.\n *\n * `accept` reads like an `<input accept>`: `\".pdf\"` matches the file name's\n * extension, `\"image/*\"` a type family, `\"text/csv\"` one type. A file\n * matching any entry is accepted. Left out (or `null` returned, the default)\n * means no limit of that kind, which is how the route behaved before.\n *\n * Here rather than in `attachmentDestination`, which an app could throw from\n * to the same end: a throw there is a 500 unless the app builds the response\n * itself, and the provider's own refusal only arrives after the bytes were\n * stored. A limit is a rule about the file, so it is answered before either.\n *\n * protected attachmentLimits() {\n * return { maxBytes: 10 * 1024 * 1024, accept: [\".pdf\", \"image/*\"] };\n * }\n */\n protected attachmentLimits(\n req: HttpRequest<any, any>,\n ): AttachmentLimits | null | Promise<AttachmentLimits | null> {\n void req;\n return null;\n }\n\n /**\n * THE APP'S OWN RULE ABOUT ONE UPLOAD (#836): a storage quota, a per-subject\n * cap, anything that needs the file and the request's subject at once.\n * Called once per upload, after `authorizeRequest` and `attachmentLimits` and\n * before anything is stored or sent to the provider.\n *\n * It is told what the file is (`name`, `size`, `mimeType`) and what the\n * upload is about: `body`, the client's `body` option exactly as\n * `attachmentScope` gets it, and `threadId` when the store knows the thread.\n * Return nothing to let the file through, or an `UploadRefusal` to refuse it:\n * the route answers **422** with `{ error: { code, message } }` (`code`\n * defaults to `\"upload_refused\"`), and `useChat().attach()` rejects with an\n * `AttachError` carrying both, as it does for `attachmentLimits`' refusals.\n * A `RequestBreakerError` thrown here is answered as itself; anything else\n * thrown is a 500.\n *\n * protected async checkUpload(file, req, { body }) {\n * if (typeof body.pageId !== \"string\") return;\n * const page = await Page.findFirst({ where: { publicId: body.pageId } });\n * if (!page) return;\n * const used = await storageUsedBy(page);\n * if (used + file.size > capFor(page)) {\n * return { code: \"storage_full\", message: \"This site's storage is full.\" };\n * }\n * }\n *\n * The `body` rule from `attachmentScope` applies here too: it types the\n * shape, not the contents, so check a field before looking it up, and\n * decide whose quota to charge from what the lookup returned.\n *\n * Here rather than in `attachmentDestination`, which also sees the file: a\n * quota is a rule about the file and its subject, not about where the bytes\n * go, and a throw there is a 500 unless the app builds the response itself.\n *\n * A check here is not a reservation: two uploads checked at the same moment\n * both see the old usage. A cap that must never be exceeded by one file is\n * enforced where usage is recorded.\n */\n protected checkUpload(\n file: UploadCheckFile,\n req: HttpRequest<any, any>,\n ctx: UploadContext<Body>,\n ): UploadRefusal | null | void | Promise<UploadRefusal | null | void> {\n void file;\n void req;\n void ctx;\n }\n\n /**\n * WHERE ONE FILE'S BYTES SHOULD GO. Called once per upload, with the file in\n * hand, and since #836 with the same `{ body, threadId }` that `checkUpload`\n * gets as a third argument. An override written as\n * `attachmentDestination(file, req)` works unchanged.\n *\n * The model needs to perceive a file only for vision or document reading; a\n * tool needs the bytes only to forward them. Those are different needs and\n * they were being answered the same way, because `upload` sent everything to\n * the vendor unconditionally — which is a cost and a data-minimisation problem\n * as much as a capability one. A CSV that exists to be imported belongs in\n * storage and not at the provider; an image the model must look at and no tool\n * will forward is the reverse.\n *\n * THE DEFAULT IS `\"both\"`, AND THE JUSTIFICATION IS THE FAILURE MODE, not the\n * hit rate. A mimeType table was the obvious alternative — images and PDFs to\n * the provider, everything else to storage — and it is wrong in the quiet\n * direction. Getting `\"both\"` wrong sends a file to a vendor that did not need\n * it: it costs money, it is visible on an invoice and in the vendor's file\n * list, and it is corrected by overriding one method. Getting `\"storage\"`\n * wrong drops the file out of the model's view with no error anywhere; the\n * model answers as though the image were not there, which is indistinguishable\n * from a bad prompt, and the developer debugs their instructions for an\n * afternoon. Being wrong on the invoice beats being wrong in a way that\n * presents as \"the AI is stupid\".\n *\n * `\"both\"` is also what keeps this change additive: every upload that reached\n * the provider before still reaches it, and storage is added underneath. An\n * app that never asks for an attachment id sees no difference except a second\n * copy it owns.\n *\n * A client may ask, per file, for `\"storage\"` under a `\"both\"` policy — the\n * one direction that only ever removes the vendor. It may not ask for\n * anything else, including `\"provider\"`, which would let a form field decide\n * that the app does not keep its own copy. See `narrowDestination`.\n */\n protected attachmentDestination(\n file: File,\n req: HttpRequest<any, any>,\n extra?: UploadContext<Body>,\n ): AttachmentDestination | Promise<AttachmentDestination> {\n void file;\n void req;\n void extra;\n return \"both\";\n }\n\n /**\n * The attachment handle for this request — the object a tool is given.\n *\n * `null` when `attachmentScope` says the request has no subject, and a caller\n * that gets `null` must not fall back to anything: there is no unscoped handle\n * to fall back to, which is the point.\n *\n * Issue #490 hangs `ctx.attachments` off this.\n */\n protected async attachmentsFor(\n req: HttpRequest<any, any>,\n threadId?: string,\n extra: { body: Body } = { body: {} as Body },\n ): Promise<ScopedAttachments | null> {\n const scope = await this.attachmentScope(req, threadId, extra);\n if (!scope) {\n return null;\n }\n return new ScopedAttachments(this.attachments, this.attachmentStorage, scope);\n }\n\n /**\n * `POST /<voice route>` (#921): starts a voice call in front of this agent.\n *\n * Takes the browser's SDP offer (`sdp`), the chat's `threadId`, `pushToTalk`\n * and the app's `body`. Runs `authorizeRequest` (`route: \"stream\"`), then\n * `voice.start` (credits, limits: throw to refuse), creates the call at the\n * vendor with the server's key and the session `start` answered plus the\n * bridge's tools, records it in `voiceStore`, and starts a `VoiceBridge` on\n * its sideband in this process. Answers the vendor's SDP answer and the\n * session's id.\n *\n * Every failure after `start` has run calls the session's `onEnd` with\n * reason `start_failed`, so an app that charged in `start` can refund: no\n * thread (400), a refused thread (the `authorizeRequest` error), a vendor\n * failure (502, or 429 when the vendor rate-limited us, code\n * `voice_unavailable`), and a failure after the vendor call exists (500),\n * which also hangs that call up.\n *\n * @experimental Not yet verified against a live Azure or OpenAI call.\n */\n async voiceStart(\n req: HttpRequest<any, any> = new HttpRequest(),\n ): Promise<VoiceStartResponse | Response> {\n const voice = this.voice;\n if (!voice) return voiceNotEnabled();\n const parsed = await readJsonBody(req, SMALL_BODY_BYTES);\n if (parsed.error) return invalidRequest(parsed);\n const { sdp, threadId: claimed, pushToTalk } = parsed.body;\n if (typeof sdp !== \"string\" || !sdp.trimStart().startsWith(\"v=\")) {\n return jsonResponse(400, {\n code: \"invalid_request\",\n message: \"`sdp` must be the browser's SDP offer.\",\n });\n }\n const body = appBody<Body>(parsed.body, VOICE_START_KEYS);\n const clientThreadId = typeof claimed === \"string\" && claimed !== \"\" ? claimed : undefined;\n await this.authorizeRequest(req, { route: \"stream\", threadId: clientThreadId, body });\n\n const user = req.ctx?.()?.user ?? null;\n const options = await voice.start({\n req,\n body,\n threadId: clientThreadId,\n user,\n pushToTalk: pushToTalk === true,\n });\n const startedAt = Date.now();\n // From here on `start` has run, and may have charged: every way out that\n // is not a running bridge calls `onEnd` with `start_failed` (so the charge\n // can be refunded), and a vendor call that exists by then is hung up, so\n // nothing is left running with nobody metering it.\n let callId: string | undefined;\n const failed = async (error: unknown): Promise<void> => {\n if (error !== undefined) console.error(\"[gemi/ai] a voice session could not start.\", error);\n if (callId) {\n await voice.realtime.hangup(callId).catch((hangupError) => {\n console.error(\"[gemi/ai] a voice call that failed to start could not be hung up.\", hangupError);\n });\n }\n try {\n await options.onEnd?.({\n sessionId: \"\",\n ...(callId ? { callId } : {}),\n threadId: options.threadId ?? clientThreadId ?? \"\",\n reason: \"start_failed\",\n startedAt,\n endedAt: Date.now(),\n durationMs: 0,\n seconds: 0,\n usage: emptyUsage(),\n transcription: { usage: emptyUsage(), seconds: 0 },\n transcript: [],\n requests: [],\n toolCalls: [],\n errors: [],\n });\n } catch (onEndError) {\n console.error(\"[gemi/ai] a voice session's onEnd threw.\", onEndError);\n }\n };\n\n const threadId = options.threadId ?? clientThreadId;\n if (!threadId) {\n await failed(undefined);\n return jsonResponse(400, {\n code: \"invalid_request\",\n message:\n \"A voice session needs a thread: send `threadId`, or answer one from `voice.start`.\",\n });\n }\n try {\n if (threadId !== clientThreadId) {\n await this.authorizeRequest(req, { route: \"stream\", threadId, body });\n }\n } catch (error) {\n await failed(undefined);\n throw error;\n }\n\n // The id first: an MCP principal is keyed to the session.\n const sessionId = crypto.randomUUID();\n let toolHandlers = options.tools ?? [];\n try {\n if (options.mcp) {\n toolHandlers = [\n ...toolHandlers,\n ...(await mcpVoiceTools(options.mcp, { user, sessionId })),\n ];\n }\n } catch (error) {\n await failed(error);\n return jsonResponse(500, {\n code: \"voice_unavailable\",\n message: \"Voice isn't available right now.\",\n });\n }\n const session: RealtimeSession = {\n ...options.session,\n tools: [\n ...voiceTools(voice.delegate),\n ...(options.session?.tools ?? []),\n ...toolHandlers.map((handler) => handler.tool),\n ],\n ...(pushToTalk === true ? { turnDetection: null } : {}),\n };\n let call: { sdpAnswer: string; callId: string };\n try {\n call = await voice.realtime.createCall({\n sdp,\n session,\n safetyIdentifier: options.safetyIdentifier,\n });\n } catch (error) {\n await failed(error);\n const limited = error instanceof RealtimeRequestError && error.code === \"rate_limited\";\n return jsonResponse(limited ? 429 : 502, {\n code: \"voice_unavailable\",\n message: \"Voice isn't available right now.\",\n });\n }\n callId = call.callId;\n\n try {\n await this.voiceStore.create({\n id: sessionId,\n callId: call.callId,\n threadId,\n owner: await this.runOwner(req),\n body: body as Record<string, unknown>,\n startedAt,\n });\n const {\n threadId: _thread,\n session: _session,\n safetyIdentifier: _safety,\n mcp: _mcp,\n tools: _tools,\n ...hooks\n } = options;\n const bridge = VoiceBridge.start<Body>({\n ...hooks,\n tools: toolHandlers,\n controller: this.constructor as unknown as VoiceBridgeController<Body>,\n threadId,\n user,\n body,\n call: { realtime: voice.realtime, callId: call.callId },\n sessionId,\n store: this.voiceStore,\n liveRuns: this.liveRuns,\n delegate: voice.delegate,\n session,\n });\n return {\n sessionId: bridge.sessionId,\n sdp: call.sdpAnswer,\n threadId,\n delegate: voice.delegate?.name ?? DEFAULT_DELEGATE_NAME,\n endsAt: startedAt + (options.limits?.maxDurationMs ?? 15 * 60_000),\n };\n } catch (error) {\n await failed(error);\n return jsonResponse(500, {\n code: \"voice_unavailable\",\n message: \"Voice isn't available right now.\",\n });\n }\n }\n\n /**\n * `PATCH /<voice route>/:sessionId` (#921): the session's new `body` (the\n * selection, the open page). Delegated turns get it from their next start,\n * and `contextNote` tells the voice when the bridge is in this process.\n */\n async voiceUpdate(\n req: HttpRequest<any, any> = new HttpRequest(),\n ): Promise<{ updated: boolean } | Response> {\n if (!this.voice) return voiceNotEnabled();\n const found = await this.voiceSession(req);\n if (found instanceof Response) return found;\n const parsed = await readJsonBody(req, SMALL_BODY_BYTES);\n if (parsed.error) return invalidRequest(parsed);\n const body = appBody<Body>(parsed.body, []);\n await this.authorizeRequest(req, { route: \"stream\", threadId: found.threadId, body });\n if (found.endedAt !== undefined) {\n return jsonResponse(409, { code: \"voice_ended\", message: \"This voice session has ended.\" });\n }\n await this.voiceStore.update(found.id, { body: body as Record<string, unknown> });\n VoiceBridge.get(found.id)?.setBody(body);\n return { updated: true };\n }\n\n /**\n * `DELETE /<voice route>/:sessionId` (#921): ends the call. On the instance\n * holding the bridge it hangs up and runs `onEnd` before answering; on any\n * other it hangs the call up at the vendor, and the holder's sideband sees\n * the call end.\n */\n async voiceEnd(\n req: HttpRequest<any, any> = new HttpRequest(),\n ): Promise<{ ended: boolean } | Response> {\n const voice = this.voice;\n if (!voice) return voiceNotEnabled();\n const found = await this.voiceSession(req);\n if (found instanceof Response) return found;\n await this.authorizeRequest(req, {\n route: \"stream\",\n threadId: found.threadId,\n body: found.body as Body,\n });\n if (found.endedAt !== undefined) return { ended: false };\n const bridge = VoiceBridge.get(found.id);\n if (bridge) {\n await bridge.end(\"hangup\");\n } else {\n await voice.realtime.hangup(found.callId);\n await this.voiceStore.update(found.id, { endedAt: Date.now(), endReason: \"hangup\" });\n }\n return { ended: true };\n }\n\n /** The session a voice `PATCH` or `DELETE` names, if the caller owns it. */\n private async voiceSession(req: HttpRequest<any, any>): Promise<VoiceSessionRecord | Response> {\n const id = (req.params as Record<string, unknown> | undefined)?.sessionId;\n const record = typeof id === \"string\" && id ? await this.voiceStore.get(id) : null;\n if (!record) {\n return jsonResponse(404, { code: \"voice_not_found\", message: \"No such voice session.\" });\n }\n if (record.owner !== null && record.owner !== (await this.runOwner(req))) {\n return notYourRun();\n }\n return record;\n }\n\n /**\n * `POST /<path>/files` — takes an attachment and answers the handles for it.\n *\n * `fileId` IS STILL IN THE ANSWER AND STILL MEANS THE SAME THING: the\n * provider's id for the file, the thing a `FilePart` carries, unchanged. It\n * has to stay, because it is what makes vision work and what\n * `useChat.uploadFile` already reads; `attachmentId` is added beside it rather\n * than in place of it. The two are not interchangeable, and swapping them\n * would reach the vendor as a file id it has never issued — so\n * `toResponsesInput` rejects a `gemi_att_` prefix in `FilePart.fileId` with a\n * sentence saying so, rather than leaving it to whatever the vendor answers\n * (not measured).\n *\n * `fileId` is absent exactly when the file did not go to the provider, which\n * only happens when the app or the client asked for that. `attachmentId` is\n * absent when there was no scope to file the record under — see\n * `attachmentScope` — and the answer then carries `downgraded: \"no_scope\"`,\n * which is the only thing separating that case from a controller that chose\n * `\"provider\"` on purpose. Both answer `destination: \"provider\"`, because both\n * are true about where the bytes went.\n *\n * ORDER: storage first, then the provider. If the second one fails the request\n * fails either way, so the only question is where the orphan is left, and an\n * orphan in our own bucket is ours to sweep on a schedule we set, while an\n * orphan at the vendor sits under a retention policy that is not ours.\n */\n async upload(req: HttpRequest<any, any> = new HttpRequest()): Promise<UploadResult> {\n const form = await req.rawRequest.formData();\n const file = form.get(\"file\");\n if (!(file instanceof Blob)) {\n throw new Error(\"upload expects a multipart body with a `file` field.\");\n }\n const name = file instanceof File && file.name ? file.name : \"upload\";\n const mimeType = file.type || \"application/octet-stream\";\n\n // The client's `body` option, as one JSON part beside the file (#603), so\n // `authorizeRequest` and `attachmentScope` see here what they see on\n // `stream`. Read off the form already parsed: the request's body is\n // consumed, and an override cannot read it again. A malformed part is\n // refused before anything else runs, as a malformed turn is on `stream`.\n const extraBody = uploadAppBody<Body>(form.get(\"body\"));\n\n // The client's thread, read here only so an unauthenticated chat has\n // something to scope to. It is the client's own handle — `stream` already\n // takes it on trust for the whole conversation — and it is not the model's:\n // this is a form field on an HTTP request the user's browser made, not a\n // tool argument.\n //\n // It is only passed on if the store knows it. `stream` answers\n // `thread_not_found` for an id it has never seen, and this route must not\n // be looser: an invented id would otherwise be a scope, and an anonymous\n // caller could keep writing to storage by sending a fresh one each time.\n const threadField = form.get(\"threadId\");\n // The field as sent, before the store is asked about it, so a refused\n // caller does not learn whether the thread exists.\n await this.authorizeRequest(req, {\n route: \"upload\",\n threadId: typeof threadField === \"string\" && threadField.length > 0 ? threadField : undefined,\n body: extraBody,\n });\n // Before the thread is looked up, the policy is asked, or a byte is kept:\n // a file this route never takes costs nothing past this line.\n const refusal = limitRefusal(await this.attachmentLimits(req), file, name, mimeType);\n if (refusal) {\n throw new LimitedUploadError(refusal.code, refusal.message);\n }\n\n const threadId =\n typeof threadField === \"string\" &&\n threadField.length > 0 &&\n (await this.store.loadThread(threadField)) !== null\n ? threadField\n : undefined;\n\n // Who the provider's copy will belong to (#443): the same key that owns a\n // run this caller starts, so the turn that names the file finds it its own.\n const owner = await this.runOwner(req);\n const recordOwner = (fileId: string) =>\n this.fileOwners.record(fileId, {\n owner,\n name,\n mimeType,\n size: file.size,\n createdAt: new Date().toISOString(),\n });\n\n // The app's own rule about this file and its subject (#836), still before\n // anything is kept or sent.\n const uploadContext: UploadContext<Body> = { body: extraBody, threadId };\n const appRefusal = await this.checkUpload(\n { name, size: file.size, mimeType },\n req,\n uploadContext,\n );\n if (appRefusal) {\n throw new LimitedUploadError(appRefusal.code || \"upload_refused\", appRefusal.message);\n }\n\n const policy = await this.attachmentDestination(file as File, req, uploadContext);\n const destination = narrowDestination(policy, form.get(\"destination\"));\n\n const scope = await this.attachmentScope(req, threadId, { body: extraBody });\n\n // The app's policy wanted a copy of these bytes and the request has no\n // subject to file them under. Recorded rather than merely warned about,\n // because the answer has to be able to tell the client that what it is\n // getting is not the policy — see `UploadResult.downgraded`.\n const downgraded = destination !== \"provider\" && !scope;\n if (downgraded) {\n if (destination === \"storage\") {\n // Bytes were asked to be kept and there is nobody to keep them for.\n // Storing them anyway files them under a scope every caller shares, and\n // answering nothing is an upload that silently did not happen. Neither\n // is an answer; this is.\n throw new Error(\n 'This upload was routed to storage, but `attachmentScope()` returned null for the request, so there is no subject to file the attachment under. Guard the route (`this.agent(Chat).middleware({ upload: \"auth\" })`), send a `threadId` with the upload, or override `attachmentScope()`.',\n );\n }\n // Policy said `both` and the request has no subject: fall through to the\n // provider alone, which is exactly what this route did before attachments\n // existed. Downgrading rather than throwing is what keeps an\n // unauthenticated chat working across the upgrade — but a downgrade nobody\n // is told about is the failure mode this file keeps arguing against, so it\n // is warned once per process on the server and marked `downgraded` in the\n // answer, so the client can tell this apart from a deliberate\n // provider-only policy.\n warnUnscopedUploadOnce();\n }\n\n if (destination === \"provider\" || !scope) {\n // Identical to the pre-attachment behaviour, down to the answer's\n // `fileId` — plus `downgraded` when this path was not the app's choice.\n const fileId = await providerUpload(this.agent.provider, file as File);\n await recordOwner(fileId);\n const answer: UploadResult = {\n fileId,\n name,\n mimeType,\n size: file.size,\n destination: \"provider\",\n };\n if (downgraded) {\n answer.downgraded = \"no_scope\";\n }\n return answer;\n }\n\n const attachmentId = newAttachmentId();\n const objectName = await this.attachmentStorage.put({\n name: attachmentObjectName(attachmentId, name),\n body: file,\n contentType: mimeType,\n });\n\n const fileId =\n destination === \"both\" ? await providerUpload(this.agent.provider, file as File) : undefined;\n if (fileId) {\n await recordOwner(fileId);\n }\n\n const record: Attachment = {\n id: attachmentId,\n scopeKey: scope.key,\n fileId,\n objectName,\n name,\n mimeType,\n size: file.size,\n createdAt: new Date().toISOString(),\n destination,\n };\n await this.attachments.put(scope, record);\n\n return { fileId, attachmentId, name, mimeType, size: file.size, destination };\n }\n\n /**\n * The 403 for a turn naming a provider file id that is not this caller's, or\n * `null` when every id may be used (#443). See `fileOwners`.\n *\n * Only `fileId` is checked: an `attachmentId` is resolved under the request's\n * own scope, so another user's is already a not-found (`ScopedAttachments`).\n * An entry carrying the caller's own `attachmentId` beside a foreign `fileId`\n * is refused all the same — the `fileId` is what reaches the provider.\n */\n private async foreignFile(\n files: { fileId?: string }[],\n caller: string | null,\n ): Promise<Response | null> {\n const ids = new Set(\n files.map((file) => file.fileId).filter((id): id is string => typeof id === \"string\"),\n );\n for (const fileId of ids) {\n const record = await this.fileOwners.get(fileId);\n if (record ? record.owner !== null && record.owner !== caller : this.requireKnownFiles) {\n // The same sentence for a file that is someone else's and, in strict\n // mode, one nobody recorded: which of the two it is would tell a caller\n // probing ids that the id exists.\n return notYourFile();\n }\n }\n return null;\n }\n\n /**\n * Protected, not private: these exist to be overridden. `onMessage` fires for\n * every completed message, user and assistant alike, and is the intended\n * persistence point for an app that is not using `store`.\n *\n * Once per message, in the transcript's order. The turn's own user message\n * is handed over while the run is still going: on a thread once the store\n * has it, and before the model's answer, so whatever the app keeps beside it\n * is there for a read of the thread during a long run (#806). Every other\n * message is handed over after the run, as before. A run that fails or is\n * stopped after taking the turn in has still reported it.\n *\n * Every hook runs inside the request that started the run, which is held\n * open for them — after the run, and after a client that left — so\n * `ctx.req.ctx().user` is the user who sent the turn. See `hookHoldMs` for\n * how long a hook that does not finish keeps it.\n */\n protected onMessage(message: AgentMessage, ctx: AgentHookContext): void | Promise<void> {\n void message;\n void ctx;\n }\n\n protected onToolCall(\n call: { toolCallId: string; name: string; input: unknown },\n ctx: AgentHookContext,\n ): void | Promise<void> {\n void call;\n void ctx;\n }\n\n /** Fires before the stream ends `awaiting-input` — where to notify whoever\n * has to approve, if they are not the person watching the stream. */\n protected onAwaitingInput(\n pending: PendingToolCall[],\n ctx: AgentHookContext,\n ): void | Promise<void> {\n void pending;\n void ctx;\n }\n\n /**\n * What the client is told about a failure: the run's `error` frame, and the\n * result of a tool that threw, which the model reads too and the store\n * keeps. Return the error to send.\n *\n * The default (`redactError` from `gemi/ai`) keeps `code`, `retryable` and\n * `toolCallId` and replaces every message gemi did not write with a fixed\n * sentence for its code: a provider's error body names resources,\n * deployments and request ids, and an exception's text can be a connection\n * string. A tool that throws a `ToolError` keeps its message. The full\n * detail is in `info` (`info.failure` for the run, `info.cause` for a\n * tool), in the log, on `result().error`, and in `onError`, which is handed\n * the unredacted error.\n *\n * Override it to show more, for instance everything in development:\n *\n * protected redactError(error, info, ctx) {\n * if (process.env.NODE_ENV === \"development\") return error;\n * return super.redactError(error, info, ctx);\n * }\n *\n * Only the `AgentError` fields of what it returns are sent. One that throws\n * is reported and the default is used instead.\n */\n protected redactError(\n error: AgentError,\n info: ErrorRedactionInfo,\n ctx: AgentHookContext,\n ): AgentError {\n void ctx;\n return redactError(error, info);\n }\n\n /**\n * A failure on the run's stream, unredacted: the provider's own message,\n * and the HTTP `status` and `requestId` when there were any. The client was\n * sent `redactError`'s copy.\n */\n protected onError(error: AgentError, ctx: AgentHookContext): void | Promise<void> {\n void error;\n void ctx;\n }\n\n protected onStreamComplete(\n result: AgentRunResult<ToolShapesOf<A[\"tools\"]>, any>,\n ctx: AgentHookContext,\n ): void | Promise<void> {\n void result;\n void ctx;\n }\n\n /**\n * WHAT HAPPENS WHEN A HOOK THROWS: it is reported and the run carries on.\n *\n * The alternative is to fail the run, and that trade is not close. These\n * hooks are an app's persistence and notification points; the run is a model\n * call the user has already been charged for and whose tools may already have\n * charged a card. Letting a failed `INSERT` in `onMessage` abort a generation\n * mid-sentence loses the answer as well as the row, and the user cannot\n * retry into a better outcome. So the answer survives and the failure is\n * logged.\n *\n * It is logged rather than routed to `onError`: `onError` is itself a hook,\n * and a hook that throws inside the handler for hooks that throw is a loop.\n * Override this to send it somewhere with a pager attached.\n */\n protected reportHookFailure(error: unknown): void {\n console.error(\"[gemi/ai] agent controller hook failed\", error);\n }\n\n private async dispatchEvent(event: AgentStreamEvent, ctx: AgentHookContext): Promise<void> {\n switch (event.type) {\n case \"tool-call\":\n // Skipped while the arguments are still streaming: a hook that fires\n // per token would fire with a half-parsed input, which is worse than\n // firing late. And skipped for a re-sent frame, which carries a parked\n // sub-run's record on a call this hook has already seen — once per call\n // is the contract, and a run that re-parks would otherwise fire it for\n // a call some earlier run made.\n if (!event.part.partial && !event.resent) {\n await this.onToolCall(\n {\n toolCallId: event.part.toolCallId,\n name: String(event.part.name),\n input: event.part.input,\n },\n ctx,\n );\n }\n return;\n case \"awaiting-input\":\n await this.onAwaitingInput(event.pending as PendingToolCall[], ctx);\n return;\n case \"error\":\n // The frame carries the redacted copy; the hook is server-side and\n // gets what it was made from.\n await this.onError(unredactedError(event.error), ctx);\n return;\n default:\n return;\n }\n }\n\n /**\n * The thread as a client should see it: the store's history, with any\n * assistant message a dead run left unfinished marked `interrupted` (#617).\n *\n * For the app's own route that hands a thread to `useChat` (or a native\n * session) as its initial messages. A message whose run is still going here\n * is left as it is, still being written, so the client attaches to it. `null`\n * for a thread the store does not have, as `loadThread` answers.\n *\n * It does not write: the next turn on the thread settles the same messages\n * the same way and stores them then, under the thread's lock.\n */\n async readThread(threadId: string): Promise<AgentMessage[] | null> {\n const history = await this.store.loadThread(threadId);\n return history ? (await this.settleThread(threadId, history, { write: false })).messages : null;\n }\n\n /**\n * Whether the run that was writing a message is still going, so the message\n * is in progress rather than interrupted.\n *\n * The default asks this process's `liveRuns`, which is the whole answer on a\n * single instance: a run lives in the process that started it, and a run\n * that is not there died with an earlier one. A finished run still within\n * `ttlMs` counts as live, since its final write may not have landed yet.\n *\n * Behind several instances it is not the whole answer. A run on another\n * instance is not in this map, so its message reads as interrupted here\n * until that run's own writes replace it. Knowing better needs a lasting\n * record of running runs (#459); override this to consult one.\n */\n protected isRunLive(runId: string, threadId: string): boolean | Promise<boolean> {\n void threadId;\n return this.liveRuns.get(runId) !== null;\n }\n\n private async settleThread(\n threadId: string,\n history: AgentMessage[],\n { write }: { write: boolean },\n ): Promise<{ messages: AgentMessage[]; jobs: AgentJobRecord[] }> {\n const isLive = (runId: string) => this.isRunLive(runId, threadId);\n const interrupted = await settleInterrupted(history, isLive);\n let messages = interrupted.messages;\n let jobs: AgentJobRecord[] = [];\n const settled = new Map(interrupted.settled.map((message) => [message.id, message]));\n\n // Background jobs (#461): each `running` tool result gets its job's\n // current state, and the ones that settled are written back with the\n // rest. A job store that cannot be read leaves the results `running`,\n // which is what the model saw last time, rather than failing the turn.\n if (hasRunningResult(messages) || write) {\n try {\n const overlaid = await overlayJobs(messages, {\n threadId,\n store: AgentJobs.store,\n isRunLive: isLive,\n outputSchemaFor: (name) => this.toolOutputSchema(name),\n scan: this.jobsBlockMax(),\n });\n messages = overlaid.messages;\n jobs = overlaid.jobs;\n for (const message of overlaid.settled) settled.set(message.id, message);\n if (write && overlaid.orphans.length > 0) {\n await markOrphans(AgentJobs.store, overlaid.orphans, (err) =>\n this.reportHookFailure(err),\n );\n const orphans = new Set(overlaid.orphans.map((record) => record.id));\n jobs = jobs.map((record) =>\n orphans.has(record.id) ? { ...record, orphaned: true as const } : record,\n );\n }\n } catch (err) {\n this.reportHookFailure(err);\n }\n }\n\n if (write && settled.size > 0) {\n try {\n await this.store.appendMessages(threadId, [...settled.values()]);\n } catch (err) {\n // The run still gets the settled history. The store keeps the\n // unfinished copy, and the next turn settles it the same way again.\n this.reportHookFailure(err);\n }\n }\n return { messages, jobs };\n }\n\n /** The agent's `jobs.contextBlock.max`, or 0 for no block. */\n private jobsBlockMax(): number {\n const block = (this.agent as { jobs?: { contextBlock?: { max?: number } | false } }).jobs\n ?.contextBlock;\n if (block === false) return 0;\n return block?.max ?? DEFAULT_JOBS_CONTEXT_MAX;\n }\n\n private jobsBlock(jobs: AgentJobRecord[]): string | null {\n return renderJobsBlock(jobs, this.jobsBlockMax());\n }\n\n /** A tool's output schema, by name, for checking a background job's output. */\n private toolOutputSchema(name: string): Schema<any> | undefined {\n const visit = (entries: readonly unknown[]): Schema<any> | undefined => {\n for (const entry of entries) {\n const tool = entry as { name?: string; outputSchema?: Schema<any>; tools?: unknown[] };\n if (Array.isArray(tool.tools)) {\n const found = visit(tool.tools);\n if (found) return found;\n } else if (tool.name === name) {\n return tool.outputSchema;\n }\n }\n return undefined;\n };\n return visit((this.agent as { tools?: readonly unknown[] }).tools ?? []);\n }\n\n /**\n * Feeds the run's frames to its journal as they are emitted.\n *\n * A subscriber of its own on `run.frames()` rather than a ride on the\n * `onEvent` chain: that chain waits for the app's hooks, and a slow\n * `onToolCall` must not be what decides whether a tool call was stored\n * before the process died. `frames()` is a read of the run's own buffer, the\n * one `toResponse` already reads beside `liveRuns`, so a third reader costs a\n * cursor and nothing else.\n */\n private follow(run: AgentRun, journal: TurnJournal): void {\n void (async () => {\n try {\n for await (const frame of run.frames()) journal.frame(frame);\n } catch (err) {\n this.reportHookFailure(err);\n }\n })();\n }\n\n /**\n * Runs after the stream is over, whether or not anyone was still watching it.\n *\n * The messages come from `result()` rather than from the event stream because\n * assembling a message out of deltas is the agent's job and doing it twice is\n * how the two copies drift. It also means a stopped run persists the same way\n * a finished one does: `stop()` finalizes the transcript, so by the time this\n * resolves there is a valid history to store.\n *\n * `stored` settles when the transcript is in the store, not when the app is\n * done with it. The next turn on this thread waits on that (see\n * `withThread`), and the hooks are the app's: an `onMessage` that writes to\n * something slow would make every later turn wait for it, once per message\n * of the old run, and one that never settles — which `safely` cannot catch —\n * would hold the thread, and every turn queued on it, behind an open\n * connection each. So the hooks run on after it on their own, reported the\n * same way.\n *\n * `hooks` settles once they have too, and every event-stream hook the run\n * led to (`eventHooks`), or after `hookHoldMs` of them, and is what the\n * request that started the run is held open for. Separate from\n * `stored` for the reason above, and it has to exist from the start: by the\n * time the hooks are called the run has settled, and the request with it,\n * unless something was already holding it. Neither rejects.\n */\n private persistRun(\n run: AgentRun,\n ctx: AgentHookContext,\n eventHooks: Promise<void>,\n journal: TurnJournal | null = null,\n early: EarlyTurn = { id: null, notified: Promise.resolve() },\n ): { stored: Promise<void>; hooks: Promise<void> } {\n // Assigned before `stored` settles, on every path, so `hooks` below reads\n // the chain this run actually started.\n let notified: Promise<void> = Promise.resolve();\n\n const stored = (async () => {\n let result: AgentRunResult<ToolShapes, unknown>;\n try {\n result = await run.result();\n } catch (err) {\n // What was written while it ran stays: it is the most the store can\n // know about a run that did not settle, and the next read marks it\n // interrupted once the run is gone.\n journal?.close();\n await journal?.settled();\n // After the turn's own `onMessage`, if the run got that far: the hooks\n // keep their order on every path.\n notified = early.notified.then(() =>\n this.safely(() =>\n this.onError(\n {\n code: \"unknown\",\n message: err instanceof Error ? err.message : String(err),\n retryable: false,\n },\n ctx,\n ),\n ),\n );\n return;\n }\n\n const messages = result.messages as AgentMessage[];\n\n // The writes made while it ran land first, then the transcript whole: the\n // same messages under the same ids, now final, so this replaces every\n // in-progress copy rather than adding to them.\n journal?.close(messages);\n await journal?.settled();\n\n if (ctx.threadId && messages.length > 0) {\n try {\n await this.store.appendMessages(ctx.threadId, messages);\n } catch (err) {\n this.reportHookFailure(err);\n }\n }\n\n notified = this.notifyRun(result, messages, ctx, early);\n })();\n\n // The bound starts once the run has settled, not with the run: a long run\n // is not a hung hook. `eventHooks` is in it because the event-stream hooks\n // are chained (see `MemoryLiveRuns.register`): an `onAwaitingInput` queued\n // behind a slow `onToolCall` is called after the run, and after every hook\n // above, and has nothing else to hold the request for it.\n const hooks = stored.then(() =>\n within(\n Promise.all([notified, eventHooks]).then(() => {}),\n this.hookHoldMs,\n ),\n );\n return { stored, hooks };\n }\n\n /** The hooks on a finished run, in order. Never rejects: see `safely`. */\n private async notifyRun(\n result: AgentRunResult<ToolShapes, unknown>,\n messages: AgentMessage[],\n ctx: AgentHookContext,\n early: EarlyTurn,\n ): Promise<void> {\n // The turn's message was handed to `onMessage` while the run went. It\n // comes before every message the run made after it, so waiting for it\n // here keeps the hook's order the transcript's.\n await early.notified;\n for (const message of messages) {\n if (message.id === early.id) continue;\n await this.safely(() => this.onMessage(message, ctx));\n }\n\n await this.safely(() => this.onStreamComplete(result as any, ctx));\n }\n\n private async safely(fn: () => void | Promise<void>): Promise<void> {\n try {\n await fn();\n } catch (err) {\n this.reportHookFailure(err);\n }\n }\n}\n\n/**\n * The turn's user message, as far as the app's `onMessage` has heard of it\n * (#806).\n *\n * The turn's message is the one thing a run stores that the app usually wants\n * to tag from the request: where it was sent from, whether the app sent it on\n * the user's behalf. Called after the run with everything else, those tags\n * were missing for the whole of a long run, to a reload or a second tab, while\n * the store already held the message. So it is called as soon as the journal\n * has written it, and `notifyRun` skips it by `id`: once per message, as\n * before, and in the same order.\n */\ntype EarlyTurn = {\n /** The turn message's id, once the run has reported it. */\n id: string | null;\n /** Settles once its `onMessage` has. Never rejects. */\n notified: Promise<void>;\n};\n\n// --- request plumbing ----------------------------------------------------\n\n/**\n * The keys of the turn envelope itself, which `useChat` puts in the same JSON\n * object as an app's `body`.\n *\n * Listed so `appBody` can take them back out. Sharing one object was the right\n * wire choice — a nested `body` field would be a second envelope for every\n * client, including the Swift and Kotlin ones — but it does mean the app's\n * fields and the framework's are mixed together on arrival, and handing an app\n * `turn` and `messages` would invite reading them. They are this module's to\n * change; an app that depended on their shape would break on a release that\n * never mentioned them.\n */\nconst ENVELOPE_KEYS = [\"turn\", \"clientRunId\", \"threadId\", \"messages\", \"regenerate\"] as const;\n\n/**\n * The turn's own fields, which `toClientTurn` reads off the top level when the\n * body carries no `turn` object. Reserved in that form and only that form —\n * with an envelope present, a top-level `text` is the app's.\n */\nconst BARE_TURN_KEYS = [\"text\", \"files\", \"toolResults\"] as const;\n\n/**\n * An app's own fields, out of the parsed turn body.\n *\n * A fresh object rather than a `delete` on the parsed one. Nothing reads the\n * body after this today — `turn`, `threadId`, `clientRunId` and `messages` are\n * all pulled out above — so this is not load-bearing and no test pins it. It is\n * how a helper that takes a parsed body should behave regardless: the next\n * reader to move a line above this one should not have to know that the body\n * was quietly hollowed out.\n */\nfunction appBody<Body extends object>(\n body: Record<string, any>,\n reserved: readonly string[] = hasTurnEnvelope(body)\n ? ENVELOPE_KEYS\n : [...ENVELOPE_KEYS, ...BARE_TURN_KEYS],\n): Body {\n const extra: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(body)) {\n if (reserved.includes(key)) continue;\n // `JSON.parse` produces `__proto__` as an own property, and `Object.entries`\n // hands it over like any other. Assigning it with `[]` goes through\n // `Object.prototype`'s setter and changes the prototype of the object an app\n // is about to read — from a value the client chose. `defineProperty` writes\n // the key itself, which is what \"the fields the client sent\" means.\n Object.defineProperty(extra, key, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n return extra as Body;\n}\n\n/**\n * The app's fields from an upload's `body` form part — the JSON of\n * `useChat`'s `body` option — in the shape `stream` hands out.\n *\n * One JSON part rather than a form field per key: a form field is a string, so\n * `{ count: 3 }` would arrive as `\"3\"` and `Body` would lie on this route and\n * not the other. A missing part is `{}`, as a turn with no app fields is.\n *\n * Only the envelope's four names are taken back out, not the bare-turn ones:\n * `useChat` always sends a `turn` envelope, so on `stream` an app's `text` is\n * the app's, and it has to be here as well.\n *\n * Anything else — a file where the JSON should be, JSON that does not parse,\n * JSON that is not an object — is a 400, not `{}`. Read as empty, the scope\n * would quietly resolve to `null` and the upload downgrade, and the reason\n * would be a missing page rather than a broken client.\n */\nfunction uploadAppBody<Body extends object>(part: FormDataEntryValue | null): Body {\n if (part === null) {\n return {} as Body;\n }\n let parsed: unknown;\n if (typeof part === \"string\") {\n try {\n parsed = JSON.parse(part);\n } catch {\n throw new InvalidUploadError(\"The upload's `body` field is not valid JSON.\");\n }\n }\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n throw new InvalidUploadError(\"The upload's `body` field must be a JSON object.\");\n }\n return appBody<Body>(parsed as Record<string, any>, ENVELOPE_KEYS);\n}\n\n/**\n * A 400 from `upload`, which answers `UploadResult` and so rejects by throwing.\n * The payload is the shape `stream`'s own 400s have, so a client reads both the\n * same way.\n */\nclass InvalidUploadError extends RequestBreakerError {\n constructor(message: string) {\n super(message);\n this.name = \"InvalidUploadError\";\n this.payload = {\n api: { status: 400, data: { error: { code: \"invalid_request\", message } } },\n view: {},\n };\n }\n}\n\n/**\n * The provider's upload, with a refusal of THE FILE answered as the client's\n * problem rather than the server's.\n *\n * A vendor that will not take a file answers 4xx, and before this that left\n * `upload` as an unhandled `ProviderHttpError`: a 500 that tells the person\n * attaching the file nothing about the file. MEASURED on Azure (#682,\n * 2026-10-01): with `purpose: \"user_data\"` a `.docx` was refused with `400\n * Unsupported extension: .docx. Supported extensions: .txt, .md, .pdf, …`; with\n * `assistants` the `.docx` is accepted (and read in a turn), and an `.exe` is\n * refused with `400 Invalid extension exe. Supported formats: \"c\", \"cpp\", …`.\n * Either sentence is exactly what the person needs to read, so it is passed\n * through as the message.\n *\n * Only the statuses that are about the request body: 400, 413, 415 and 422. A\n * 401/403 is our key, a 429/5xx is the vendor's day, and both stay server\n * errors — a person cannot fix either by picking another file.\n */\nasync function providerUpload(provider: { upload(file: File): Promise<string> }, file: File) {\n try {\n return await provider.upload(file);\n } catch (error) {\n if (error instanceof ProviderHttpError && REJECTED_FILE_STATUSES.has(error.status)) {\n throw new RejectedUploadError(normalizeProviderError(error).message);\n }\n throw error;\n }\n}\n\nconst REJECTED_FILE_STATUSES = new Set([400, 413, 415, 422]);\n\n/** A 422 from `upload` for a file outside `attachmentLimits`, or one\n * `checkUpload` refused. */\nclass LimitedUploadError extends RequestBreakerError {\n constructor(code: string, message: string) {\n super(message);\n this.name = \"LimitedUploadError\";\n this.payload = {\n api: { status: 422, data: { error: { code, message } } },\n view: {},\n };\n }\n}\n\n/** Why `file` is outside `limits`, or `null` when it is not. Exported for the\n * tests; the route is the only caller. */\nexport function limitRefusal(\n limits: AttachmentLimits | null | undefined,\n file: Blob,\n name: string,\n mimeType: string,\n): { code: \"file_too_large\" | \"unsupported_file_type\"; message: string } | null {\n if (!limits) return null;\n const { maxBytes, accept } = limits;\n if (typeof maxBytes === \"number\" && file.size > maxBytes) {\n return {\n code: \"file_too_large\",\n message: `${JSON.stringify(name)} is ${formatBytes(file.size)}; the limit is ${formatBytes(maxBytes)}.`,\n };\n }\n if (\n accept &&\n accept.length > 0 &&\n !accept.some((entry) => acceptMatches(entry, name, mimeType))\n ) {\n return {\n code: \"unsupported_file_type\",\n message: `${JSON.stringify(name)} is not a type this chat accepts. Accepted: ${accept.join(\", \")}.`,\n };\n }\n return null;\n}\n\nfunction acceptMatches(entry: string, name: string, mimeType: string): boolean {\n const rule = entry.trim().toLowerCase();\n if (!rule) return false;\n if (rule.startsWith(\".\")) return name.toLowerCase().endsWith(rule);\n const type = mimeType.toLowerCase().split(\";\")[0]!.trim();\n if (rule.endsWith(\"/*\")) return type.startsWith(rule.slice(0, -1));\n return type === rule;\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n const units = [\"KB\", \"MB\", \"GB\"];\n let value = bytes / 1024;\n let unit = 0;\n while (value >= 1024 && unit < units.length - 1) {\n value /= 1024;\n unit++;\n }\n return `${Math.round(value * 10) / 10} ${units[unit]}`;\n}\n\n/**\n * A 422 from `upload`: the provider would not take this file. `code` is\n * `unsupported_file_type` when the vendor said the type was the problem (an\n * extension or format allow-list) and `file_rejected` otherwise, so\n * a composer can mark the one chip without parsing English. Same payload shape\n * as `InvalidUploadError`.\n */\nclass RejectedUploadError extends RequestBreakerError {\n constructor(message: string) {\n super(message);\n this.name = \"RejectedUploadError\";\n const code =\n /(unsupported|invalid) (extension|file type|format|mime)|supported (extensions|formats?)/i.test(\n message,\n )\n ? \"unsupported_file_type\"\n : \"file_rejected\";\n this.payload = {\n api: { status: 422, data: { error: { code, message } } },\n view: {},\n };\n }\n}\n\n/**\n * A body, or the reason there is not one.\n *\n * Deliberately one shape with an optional `error` rather than a discriminated\n * union on `ok`: this package compiles with `strict: false`, and without\n * `strictNullChecks` TypeScript will not narrow a union by a boolean\n * discriminant — `if (!parsed.ok)` leaves `parsed.message` an error. A field\n * that is either set or not needs no narrowing to read.\n */\ntype ParsedBody = {\n body: Record<string, any>;\n error?: string;\n /** Which HTTP error the rejection is. A missing one is the 400. */\n status?: number;\n code?: string;\n};\n\n/**\n * The body, as JSON — or a reason it is not.\n *\n * Read off the raw request rather than through `req.input()`: that path also\n * accepts `+json` types and answers its failures as a thrown refusal, while\n * these routes are held to `application/json` alone (below) and answer with\n * a `{ code, message }` body of their own.\n *\n * Matching the type by prefix is not the same as ignoring it. A body that\n * arrives as anything other than `application/json` is a 415, and the reason\n * is not tidiness: a cross-site `<form enctype=\"text/plain\">` can be made to\n * concatenate its one field into valid JSON, and a JSON parser that reads\n * whatever it is handed turns that form into a turn on someone else's\n * conversation. Insisting on `application/json` is what makes these routes\n * non-simple requests — the browser will not send one cross-origin without a\n * preflight — and that holds whether or not the app's cookies are `SameSite`\n * and whether or not `CSRFMiddleware` is mounted. Only a request that carries a\n * body is held to this; a bodiless POST has no type to check and stays `{}`.\n *\n * The three cases are kept apart deliberately. NO body is a real request — a\n * reattach, or a turn that just lets the model continue — and reads as `{}`. A\n * body that will not parse, or that parses to something other than an object,\n * is a failed request and has to say so: folding it into `{}` made a truncated\n * proxy response or a mis-serialized client indistinguishable from an empty\n * turn, so `stream` billed a model call with no history and no turn and threw\n * the user's actual message away. That presents as the model hallucinating\n * rather than as an error, which is the expensive way to debug it. Pre-flight\n * failures stay ordinary HTTP errors and never reach the event stream.\n *\n * An array counts as malformed even though `typeof [] === \"object\"`: nothing\n * downstream reads a positional body, so `[1,2,3]` could only ever have run as\n * an empty turn.\n */\nasync function readJsonBody(req: HttpRequest<any, any>, maxBytes: number): Promise<ParsedBody> {\n const raw = req?.rawRequest;\n if (!raw || raw.method === \"GET\" || raw.method === \"HEAD\" || !raw.body) {\n return { body: {} };\n }\n\n if (!isJsonContentType(raw.headers.get(\"Content-Type\"))) {\n // Before the body is read: nothing in a body about to be refused is worth\n // the bytes, and the refusal must not depend on what they were.\n return {\n body: {},\n status: 415,\n code: \"unsupported_media_type\",\n error: \"The request body must be sent as application/json.\",\n };\n }\n\n // Before a byte is read when the client declared its length, and while\n // reading when it did not (#444).\n const declared = Number(raw.headers.get(\"Content-Length\"));\n if (Number.isFinite(declared) && declared > maxBytes) {\n return bodyTooLarge(maxBytes);\n }\n\n let text: string;\n try {\n const read = await readCapped(raw, maxBytes);\n if (read === null) {\n return bodyTooLarge(maxBytes);\n }\n text = read;\n } catch {\n // A body that stopped arriving mid-flight. Same class of failure as one\n // that arrived truncated, and the same answer.\n return { body: {}, error: \"The request body could not be read.\" };\n }\n\n if (!text.trim()) {\n return { body: {} };\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n return { body: {}, error: \"The request body is not valid JSON.\" };\n }\n\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n return { body: {}, error: \"The request body must be a JSON object.\" };\n }\n\n return { body: parsed as Record<string, any> };\n}\n\n/**\n * Media types compare case-insensitively and may carry parameters, so the\n * comparison is on the lowercased type with its parameters cut off, and\n * `Application/JSON; charset=utf-8` passes. It is an equality on that type\n * rather than a prefix, so `application/json-seq` and the other types that\n * merely begin with those bytes do not. None of the three types a browser will\n * send without a preflight — `text/plain`, `application/x-www-form-urlencoded`,\n * `multipart/form-data` — does either, and neither does no type at all, which\n * is what a hand-written `fetch` with a string body and no header ends up\n * sending as `text/plain`.\n */\nfunction isJsonContentType(value: string | null): boolean {\n return mediaType(value) === \"application/json\";\n}\n\n/**\n * The body as text, or `null` once more than `maxBytes` of it has arrived, at\n * which point the rest is not read. A limit that is not finite reads it all.\n */\nasync function readCapped(raw: Request, maxBytes: number): Promise<string | null> {\n if (!Number.isFinite(maxBytes) || !raw.body) {\n return await raw.text();\n }\n const reader = raw.body.getReader();\n const chunks: Uint8Array[] = [];\n let size = 0;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (size > maxBytes) {\n await reader.cancel().catch(noop);\n return null;\n }\n chunks.push(value);\n }\n const bytes = new Uint8Array(size);\n let offset = 0;\n for (const chunk of chunks) {\n bytes.set(chunk, offset);\n offset += chunk.byteLength;\n }\n return new TextDecoder().decode(bytes);\n}\n\nfunction bodyTooLarge(maxBytes: number): ParsedBody {\n return {\n body: {},\n status: 413,\n code: \"body_too_large\",\n error: `The request body is larger than this agent accepts (${maxBytes} bytes).`,\n };\n}\n\n/**\n * A refusal for one of #444's limits: the `{ kind, message, status }` every\n * refusal has (#686), plus the `code` the agent routes' own errors carry, so a\n * client can tell the limits apart without reading the message.\n */\nfunction limitResponse(status: number, code: string, message: string): Response {\n return jsonResponse(status, {\n ...refusal(refusalKindForStatus(status), message, status),\n code,\n });\n}\n\nfunction invalidRequest(parsed: ParsedBody): Response {\n if (parsed.status === 413) {\n return limitResponse(413, parsed.code ?? \"body_too_large\", parsed.error ?? \"\");\n }\n return jsonResponse(parsed.status ?? 400, {\n code: parsed.code ?? \"invalid_request\",\n message: parsed.error,\n });\n}\n\n/**\n * Whether the turn arrived in a `turn` object of its own, rather than spread\n * across the top level of the body.\n *\n * Both forms are accepted, and which one it is decides what belongs to the app:\n * a top-level `text` is the user's message in the bare form and an app's own\n * field in the enveloped one. `toClientTurn` and `appBody` have to agree about\n * that, so they ask the same question here rather than each testing it.\n */\nfunction hasTurnEnvelope(body: Record<string, any>): boolean {\n return Boolean(body.turn) && typeof body.turn === \"object\";\n}\n\n/**\n * The client's turn, accepting both `{ turn: {...} }` and the flattened\n * `{ text, files, toolResults }` — the second is what a hand-written `fetch`\n * writes, and refusing it buys nothing.\n *\n * `turn` is `undefined` for an empty turn, which is a real request:\n * reattaching to a conversation and letting the model continue is a turn with\n * nothing in it. `error` is a turn that is refused with a 400 before anything\n * runs — see `toTurnFiles`.\n */\nfunction toClientTurn(body: Record<string, any>): { turn?: ClientTurn; error?: string } {\n const source = hasTurnEnvelope(body) ? body.turn : body;\n const turn: ClientTurn = {};\n if (typeof source.text === \"string\") {\n turn.text = source.text;\n }\n if (Array.isArray(source.files)) {\n const files = toTurnFiles(source.files);\n if (typeof files === \"string\") {\n return { error: files };\n }\n turn.files = files;\n }\n if (Array.isArray(source.toolResults)) {\n turn.toolResults = source.toolResults;\n }\n if (Object.keys(turn).length === 0) return {};\n // Envelope only: in the bare form the top level is shared with the app's own\n // fields, and an app that already sends a `localId` of its own would lose it\n // to the turn. `null` and `\"\"` read as absent, as they do for `files`.\n if (\n source === body.turn &&\n source.localId !== undefined &&\n source.localId !== null &&\n source.localId !== \"\"\n ) {\n const { localId } = source;\n if (typeof localId !== \"string\") return { error: \"turn.localId must be a string.\" };\n // Echoed back on the stream and nothing else, so the only thing to bound\n // is what one frame carries.\n if (localId.length > MAX_LOCAL_ID_LENGTH) {\n return { error: `turn.localId is longer than ${MAX_LOCAL_ID_LENGTH} characters.` };\n }\n turn.localId = localId;\n }\n return { turn };\n}\n\n/** How long `turn.localId` may be. Comfortably above `local_<uuid>`. */\nconst MAX_LOCAL_ID_LENGTH = 200;\n\n/**\n * `turn.files`, checked field by field, or the sentence refusing it.\n *\n * REFUSED, NOT FILTERED. Every entry becomes a `FilePart` in a user message,\n * and on a thread that message is stored before the provider sees it. An entry\n * the request builder cannot send — no id at all, or a gemi id in `fileId` —\n * then throws from `toResponsesInput` on this turn and on every turn after it,\n * because every later turn re-sends the history: one bad upload bricks the\n * thread. Dropping the entry instead is quieter and worse — the model answers\n * about a file it was never given, with nothing saying so. A 400 here is the\n * one place the client can still do something about it.\n *\n * Scoping is what makes a foreign `attachmentId` harmless (`ScopedAttachments`\n * answers the same not-found for another tenant's id as for an invented one),\n * so the id is not signed or looked up here. What this checks is the shape a\n * crash would come from: strings where strings go, the prefix on\n * `attachmentId`, at least one id. Unknown fields are dropped rather than\n * refused, since `attach()` answers more than a `FilePart` holds (`downgraded`)\n * and passing its answer on whole is the documented use. `null` and `\"\"` read\n * as absent, for every field: `null` is what a serializer that writes\n * `undefined` as `null` means, and `\"\"` is what a form field left blank sends.\n * Neither can be an id, so refusing `attachmentId: \"\"` for its prefix would\n * turn a blank into an error the entry's `fileId` does not deserve.\n */\nfunction toTurnFiles(raw: unknown[]): NonNullable<ClientTurn[\"files\"]> | string {\n const files: NonNullable<ClientTurn[\"files\"]> = [];\n for (const [index, entry] of raw.entries()) {\n const where = `turn.files[${index}]`;\n if (!entry || typeof entry !== \"object\" || Array.isArray(entry)) {\n return `${where} must be an object.`;\n }\n const fields: Record<string, string> = {};\n for (const key of [\"fileId\", \"attachmentId\", \"name\", \"mimeType\"] as const) {\n const value = (entry as Record<string, unknown>)[key];\n if (value === undefined || value === null || value === \"\") continue;\n if (typeof value !== \"string\") {\n return `${where}.${key} must be a string.`;\n }\n fields[key] = value;\n }\n const { fileId, attachmentId, name, mimeType } = fields;\n if (fileId?.startsWith(ATTACHMENT_ID_PREFIX)) {\n return `${where}.fileId holds a gemi attachment id (${fileId}). \\`fileId\\` is the provider's id from the upload response; put this one in \\`attachmentId\\`.`;\n }\n if (attachmentId !== undefined && !attachmentId.startsWith(ATTACHMENT_ID_PREFIX)) {\n return `${where}.attachmentId is not a gemi attachment id: it must start with \"${ATTACHMENT_ID_PREFIX}\".`;\n }\n if (!fileId && !attachmentId) {\n return `${where} has neither a \\`fileId\\` nor an \\`attachmentId\\`. Send the ids the upload response answered.`;\n }\n files.push({\n ...(fileId ? { fileId } : {}),\n ...(attachmentId ? { attachmentId } : {}),\n ...(name !== undefined ? { name } : {}),\n ...(mimeType !== undefined ? { mimeType } : {}),\n });\n }\n return files;\n}\n\n/**\n * Where to resume from, or `undefined` for \"wherever you still can\".\n *\n * An explicit `from` wins, because a client that tracked its own position knows\n * something the transport does not. Otherwise `Last-Event-ID` — the browser\n * sends it on its own when an `EventSource` reconnects, and the frames put\n * `seq` in `id:` precisely so that header is already the right question. It\n * names the last event *received*, so the resume point is one past it.\n *\n * With neither, the answer is `undefined` and NOT 0. A client reattaching on\n * mount is a fresh POST from a page that has just loaded: no `Last-Event-ID`,\n * and no cursor of its own, because the only handle it was given is the\n * `threadId`. Reading that as \"resume from frame 0\" asked `replay` for a frame\n * every run longer than `maxFrames` has already evicted, so the mount-time\n * reattach — the one case `/attach` exists for — 410'd on exactly the long runs\n * it was meant to rescue, and the documented remedy of reloading the thread\n * does not help because the store is only written at run end. `undefined` means\n * the tail, which is all such a client can use anyway.\n */\nfunction resolveCursor(req: HttpRequest<any, any>, body: Record<string, any>): number | undefined {\n if (typeof body.from === \"number\" && Number.isFinite(body.from)) {\n return Math.max(0, Math.floor(body.from));\n }\n // `cursor` is what `useChat` actually sends, and it counts the other way:\n // `from` is the frame to resume AT, `cursor` the last frame the client\n // APPLIED — the same convention as `Last-Event-ID`, and the same `+ 1`. A\n // client that has applied nothing sends -1, which is not a position but the\n // absence of one, so it falls through to the tail rather than asking for\n // frame 0 and 410ing on precisely the long runs `/attach` exists to rescue.\n if (typeof body.cursor === \"number\" && Number.isFinite(body.cursor)) {\n const applied = Math.floor(body.cursor);\n if (applied >= 0) {\n return applied + 1;\n }\n return undefined;\n }\n const header = req?.rawRequest?.headers?.get(\"Last-Event-ID\");\n if (header) {\n const seq = Number.parseInt(header, 10);\n if (Number.isFinite(seq)) {\n return Math.max(0, seq + 1);\n }\n }\n return undefined;\n}\n\nfunction searchParam(req: HttpRequest<any, any>, key: string): string | undefined {\n const value = req?.search?.get(key);\n return typeof value === \"string\" ? value : undefined;\n}\n\n/**\n * Where a threaded regenerate cuts the history: at the last message the user\n * wrote, with the turn that wrote it. A file a tool showed is a user-role\n * message too, but it is part of the answer being replaced, so it is stepped\n * over (`injectedMessageIds`, the test `historyForProvider` uses).\n */\nfunction regenerationCut(\n messages: AgentMessage[],\n): { index: number; turn: ClientTurn } | null {\n const injected = injectedMessageIds(messages);\n for (let index = messages.length - 1; index >= 0; index--) {\n const message = messages[index]!;\n if (message.role !== \"user\" || injected.has(message.id)) continue;\n let text = \"\";\n const files: NonNullable<ClientTurn[\"files\"]> = [];\n for (const part of message.content) {\n if (part.type === \"text\") text += part.text;\n if (part.type === \"file\") {\n files.push({\n ...(part.fileId ? { fileId: part.fileId } : {}),\n ...(part.attachmentId ? { attachmentId: part.attachmentId } : {}),\n ...(part.name ? { name: part.name } : {}),\n ...(part.mimeType ? { mimeType: part.mimeType } : {}),\n });\n }\n }\n if (!text && files.length === 0) continue;\n return {\n index,\n turn: { ...(text ? { text } : {}), ...(files.length > 0 ? { files } : {}) },\n };\n }\n return null;\n}\n\n/** A turn `/stop` ended while it waited, before anything ran or was charged. */\nfunction stoppedBeforeStart(): Response {\n return jsonResponse(409, {\n code: \"stopped\",\n message: \"The turn was stopped before it started.\",\n });\n}\n\n/**\n * The refusal for a run that belongs to another caller (#442), in the shape\n * every other refusal has (`{ kind, message, status }`, #686), so `useChat` and\n * the client guards classify it as `permission` without matching on text.\n */\nfunction notYourRun(): Response {\n return jsonResponse(\n 403,\n refusal(\"permission\", \"This run belongs to someone else.\", 403) as Record<string, unknown>,\n );\n}\n\n/** The refusal for a turn naming another owner's provider file (#443). Same\n * shape as `notYourRun`. */\nfunction notYourFile(): Response {\n return jsonResponse(\n 403,\n refusal(\n \"permission\",\n \"A file in this turn was uploaded by someone else.\",\n 403,\n ) as Record<string, unknown>,\n );\n}\n\n/**\n * The file parts of a stateless chat's history, which the client carries and\n * may have written anything into. Read defensively: the history is not\n * validated anywhere else before the run, and a malformed one is the run's\n * problem, not this check's.\n */\nfunction clientHistoryFiles(messages: unknown): { fileId?: string }[] {\n if (!Array.isArray(messages)) return [];\n const files: { fileId?: string }[] = [];\n for (const message of messages) {\n const content = (message as { content?: unknown } | null)?.content;\n if (!Array.isArray(content)) continue;\n for (const part of content) {\n if (part && typeof part === \"object\" && typeof part.fileId === \"string\") {\n files.push({ fileId: part.fileId });\n }\n }\n }\n return files;\n}\n\n/** What `voiceStart` takes out of the body before the rest is the app's. */\nconst VOICE_START_KEYS = [\"sdp\", \"threadId\", \"pushToTalk\"] as const;\n\ntype VoiceBridgeController<Body extends object> = {\n startTurn(params: AgentTurnParams<Body>): Promise<AgentTurn>;\n};\n\nfunction voiceNotEnabled(): Response {\n return jsonResponse(404, {\n code: \"voice_not_enabled\",\n message: \"This agent has no voice: set `voice` on its controller.\",\n });\n}\n\nfunction jsonResponse(status: number, error: Record<string, unknown>): Response {\n return new Response(JSON.stringify({ error }), {\n status,\n headers: { \"Content-Type\": \"application/json\" },\n });\n}\n\n// --- attachments ---------------------------------------------------------\n\n/**\n * Reads the client's `destination` field and applies it to the app's policy.\n *\n * THE ONLY THING A CLIENT MAY ASK FOR IS \"DO NOT SEND THIS TO THE VENDOR\", and\n * that is the entire permitted vocabulary: a `storage` hint under a `both`\n * policy, or a hint that agrees with the policy and changes nothing. Everything\n * else throws.\n *\n * The rule here used to be \"a hint may narrow, never widen\", counting\n * destinations, and counting is what made it wrong in one direction.\n * `both → provider` is fewer destinations and reads as narrowing, but what it\n * removes is *gemi's own copy*, while the third party still gets the file. That\n * is not a client declining exposure, it is a client overriding the app's\n * retention decision from a field in a multipart body: an app that keeps every\n * upload because a tool has to forward it — or because an auditor asked — loses\n * the copy, mints no `attachmentId`, records nothing, and gets no warning\n * either, since the bytes did reach the provider exactly as policy said. The\n * two directions are not alike, because only one of them reduces who ends up\n * holding the file.\n *\n * What is left is defensible on its own terms: `storage` keeps bytes off a\n * vendor the app was willing to send them to, which is a thing the client is\n * entitled to ask for and which cannot hurt anyone if the client is lying. A UI\n * that knows this CSV exists to be imported and will never be read by the model\n * is the case that makes a hint worth having at all. The policy hook is the\n * ceiling; the hint may only take the vendor out from under it.\n *\n * A hint the policy does not permit throws rather than being ignored. Ignoring\n * it is the shape of this bug that never gets found: the client believes it kept\n * a file off the vendor, the file went anyway, and nothing anywhere says so.\n */\nfunction narrowDestination(\n policy: AttachmentDestination,\n hint: FormDataEntryValue | null,\n): AttachmentDestination {\n if (typeof hint !== \"string\" || hint.length === 0) {\n return policy;\n }\n if (hint !== \"both\" && hint !== \"provider\" && hint !== \"storage\") {\n throw new Error(\n `Unknown attachment destination \"${hint}\". Expected \"both\", \"provider\" or \"storage\".`,\n );\n }\n if (hint === policy || (policy === \"both\" && hint === \"storage\")) {\n return hint;\n }\n if (policy === \"both\" && hint === \"provider\") {\n throw new Error(\n 'This upload asked for the \"provider\" destination under a \"both\" policy. A client may ask for \"storage\", which keeps a file away from the model provider, but it may not ask the server to stop keeping its own copy while the vendor still gets the file — that is the app\\'s retention decision. Change `attachmentDestination()` if this file should not be kept.',\n );\n }\n throw new Error(\n `This upload asked for the \"${hint}\" destination, but the server's policy for it is \"${policy}\", and a client hint may only ask for \"storage\" under a \"both\" policy. Change \\`attachmentDestination()\\` if the file really should go there.`,\n );\n}\n\n/**\n * Said once per process, not once per upload.\n *\n * The condition is a property of how the app is wired — an agent route with no\n * authentication and no `threadId` on its uploads — so it is either true for\n * every request or false for every request. Logging it per request would put a\n * line in the log for every file anyone ever uploads, which is how a warning\n * stops being read.\n */\nlet warnedAboutUnscopedUpload = false;\nfunction warnUnscopedUploadOnce(): void {\n if (warnedAboutUnscopedUpload) return;\n warnedAboutUnscopedUpload = true;\n console.warn(\n \"[gemi/ai] An upload had no attachment scope, so its bytes were sent to the model provider only and no attachment id was minted — a tool cannot forward this file. Guard the route with auth, send a `threadId` with the upload, or override `attachmentScope()`.\",\n );\n}\n\n// --- routing -------------------------------------------------------------\n//\n// `agent()` itself belongs on ApiRouter next to `resource()`, which is the\n// method it works like: one call, several routes, all of them the controller's.\n// The types are declared here because they are the ai module's contract, not\n// the router's.\n//\n// class Api extends ApiRouter {\n// routes = {\n// \"/chat\": this.agent(ChatAgentController),\n// };\n// }\n//\n// POST /chat → stream every client turn\n// POST /chat/attach → attach reattach to a run in progress\n// POST /chat/stop → stop explicit cancel\n// POST /chat/files → upload attachments\n//\n// Mounting under a single path is what gives the client one key to name. The\n// agent's tool types ride along on `AgentRoute`, so `useChat(\"/chat\")` gets them\n// out of the existing `RPC` interface — no second augmentation to generate, and\n// renaming the route moves the client key with it.\n\nexport type AgentRouteMethod = \"stream\" | \"attach\" | \"stop\" | \"upload\";\n\nexport type AgentMiddlewareConfig = Partial<Record<AgentRouteMethod, MiddlewareInput>>;\n\n/**\n * What `this.agent(Controller)` returns. `T` is unconstrained so that mounting\n * the route never resolves the controller (#774): an agent whose tools are\n * routes of the same api would otherwise resolve the api's route table from\n * inside it. That `T` is an `AgentController` class is checked when the route\n * is mounted: `this.agent()` throws otherwise.\n */\nexport type AgentRoute<T> = {\n __internal_brand: \"AgentRoute\";\n controller: T;\n middleware(config: AgentMiddlewareConfig): AgentRoute<T>;\n};\n\n/** What `CreateRPC` should produce for an agent route: enough for the client to\n * type its messages, and nothing that drags server code into the bundle. */\nexport type AgentRouteRPC<T extends new () => AgentController<any, any>> = {\n __agent: true;\n tools: InstanceType<T>[\"agent\"] extends AnyAgent\n ? AgentToolShapes<InstanceType<T>[\"agent\"]>\n : ToolShapes;\n output: unknown;\n /**\n * The controller's `Body`, so `useChat` can check what it sends against what\n * the controller declared.\n *\n * Read off the phantom key rather than by matching the class, which is what\n * made this fail: `Body` used to reach the instance type only through\n * `instructions`'s second parameter, and a controller overriding\n * `instructions(req)` — the pre-existing signature, so every existing\n * override — gave inference nothing to work with and got the open record.\n */\n body: InstanceType<T> extends { [BODY]?: infer B } ? B : Record<string, unknown>;\n};\n\n// --- the voice route (#921) ----------------------------------------------\n//\n// class Api extends ApiRouter {\n// routes = {\n// \"/chat\": this.agent(ChatController),\n// \"/chat/voice\": this.voice(ChatController),\n// };\n// }\n//\n// POST /chat/voice → voiceStart create the call\n// PATCH /chat/voice/:sessionId → voiceUpdate the session's body\n// DELETE /chat/voice/:sessionId → voiceEnd hang up\n//\n// One key for the client, `useVoiceSession(\"/chat/voice\")`, as `useChat` has.\n\nexport type VoiceRouteMethod = \"start\" | \"update\" | \"end\";\n\nexport type VoiceMiddlewareConfig = Partial<Record<VoiceRouteMethod, MiddlewareInput>>;\n\n/** What `this.voice(Controller)` returns. Unconstrained `T` for the reason\n * `AgentRoute`'s is (#774); checked when the route is mounted. */\nexport type VoiceRoute<T> = {\n __internal_brand: \"VoiceRoute\";\n controller: T;\n middleware(config: VoiceMiddlewareConfig): VoiceRoute<T>;\n};\n\n/** What `CreateRPC` produces for a voice route: the controller's `Body`, for\n * `useVoiceSession`'s `body` option. */\nexport type VoiceRouteRPC<T extends new () => AgentController<any, any>> = {\n __voice: true;\n body: InstanceType<T> extends { [BODY]?: infer B } ? B : Record<string, unknown>;\n};\n\n/** The longest delay `setTimeout` keeps; past it the runtime fires in ~1ms. */\nconst MAX_TIMEOUT_MS = 2 ** 31 - 1;\n\n/**\n * Settles when `work` does or after `ms`, whichever is first, and never\n * rejects. For how long the request waits on the app's code, not for the code\n * itself, which runs on either way.\n *\n * An `ms` a timer cannot hold — `Infinity` is what \"no bound\" reads as — is\n * no bound. Handed to `setTimeout` it would fire at once, and the request\n * would end before the hooks it was raised for.\n */\nfunction within(work: Promise<void>, ms: number): Promise<void> {\n const settled = work.then(\n () => {},\n () => {},\n );\n if (!(ms <= MAX_TIMEOUT_MS)) {\n return settled;\n }\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<void>((resolve) => {\n timer = setTimeout(resolve, ms);\n });\n return Promise.race([settled, timeout]).finally(() => clearTimeout(timer));\n}\n\nlet warnedInMemoryNonces = false;\n\n/**\n * Once per process, in production: a stateless chat whose answers are spent\n * only in this process's memory. Correct for a single instance, which is why\n * it is a warning; with several, a rewound history replays an approval once\n * per instance (#445).\n */\nfunction warnInMemoryNonces(nonces: NonceStore): void {\n if (warnedInMemoryNonces || process.env.NODE_ENV !== \"production\") return;\n if (!(nonces instanceof MemoryNonceStore)) return;\n warnedInMemoryNonces = true;\n console.warn(\n \"[gemi/ai] A stateless agent chat is spending approval nonces in process memory. \" +\n \"With more than one instance a replayed approval is accepted once per instance. \" +\n \"Set `nonces = new RedisNonceStore()` (or your own NonceStore) on the AgentController.\",\n );\n}\n\n/** Whether any message holds a tool result still waiting on a background job. */\nfunction hasRunningResult(messages: AgentMessage[]): boolean {\n return messages.some((message) =>\n message.content.some((part) => part.type === \"tool-result\" && part.status === \"running\"),\n );\n}\n"
36
36
  ],
37
- "mappings": "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",
38
- "debugId": "97655AD9478AC41964756E2164756E21",
37
+ "mappings": "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",
38
+ "debugId": "4F8192EF64AFAF0064756E2164756E21",
39
39
  "names": []
40
40
  }