@codeworksh/aikit 0.7.2 → 0.8.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.
@@ -1 +0,0 @@
1
- {"version":3,"file":"failure-xra3YPdY.mjs","names":["Type","record"],"sources":["../../src/llm/failure/schema.ts","../../src/llm/failure.ts"],"sourcesContent":["import Type, { type Static } from \"typebox\";\n\nconst metadata = {\n\tmessage: Type.String(),\n\tretryable: Type.Boolean(),\n\tstatus: Type.Optional(Type.Number()),\n\tcode: Type.Optional(Type.String()),\n\trequestId: Type.Optional(Type.String()),\n\tretryAfterMs: Type.Optional(Type.Number()),\n};\n\nconst variant = <TTag extends string>(tag: TTag) =>\n\tType.Object({\n\t\t_tag: Type.Literal(tag),\n\t\t...metadata,\n\t});\n\nexport const Authentication = Type.Object({\n\t_tag: Type.Literal(\"Authentication\"),\n\treason: Type.Union([Type.Literal(\"missing\"), Type.Literal(\"invalid\"), Type.Literal(\"expired\")]),\n\t...metadata,\n});\nexport const Configuration = variant(\"Configuration\");\nexport const Authorization = variant(\"Authorization\");\nexport const ModelUnavailable = variant(\"ModelUnavailable\");\nexport const RateLimit = variant(\"RateLimit\");\nexport const Quota = variant(\"Quota\");\nexport const InvalidRequest = variant(\"InvalidRequest\");\nexport const ContentPolicy = variant(\"ContentPolicy\");\nexport const Timeout = variant(\"Timeout\");\nexport const Transport = variant(\"Transport\");\nexport const Unavailable = variant(\"Unavailable\");\nexport const InvalidResponse = variant(\"InvalidResponse\");\nexport const Unknown = variant(\"Unknown\");\n\n/** Provider-independent, JSON-safe failure data carried by terminal assistant messages. */\nexport const FailureSchema = Type.Union([\n\tAuthentication,\n\tConfiguration,\n\tAuthorization,\n\tModelUnavailable,\n\tRateLimit,\n\tQuota,\n\tInvalidRequest,\n\tContentPolicy,\n\tTimeout,\n\tTransport,\n\tUnavailable,\n\tInvalidResponse,\n\tUnknown,\n]);\nexport type Failure = Static<typeof FailureSchema>;\n\nconst tags = new Set<Failure[\"_tag\"]>([\n\t\"Authentication\",\n\t\"Configuration\",\n\t\"Authorization\",\n\t\"ModelUnavailable\",\n\t\"RateLimit\",\n\t\"Quota\",\n\t\"InvalidRequest\",\n\t\"ContentPolicy\",\n\t\"Timeout\",\n\t\"Transport\",\n\t\"Unavailable\",\n\t\"InvalidResponse\",\n\t\"Unknown\",\n]);\n\nconst record = (value: unknown): Record<string, unknown> | undefined =>\n\ttypeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n\n/** Lightweight guard for failure data crossing package or persistence boundaries. */\nexport function isFailure(value: unknown): value is Failure {\n\tconst candidate = record(value);\n\treturn (\n\t\ttags.has(candidate?._tag as Failure[\"_tag\"]) &&\n\t\ttypeof candidate?.message === \"string\" &&\n\t\ttypeof candidate.retryable === \"boolean\" &&\n\t\t(candidate.status === undefined || (typeof candidate.status === \"number\" && Number.isFinite(candidate.status))) &&\n\t\t(candidate.code === undefined || typeof candidate.code === \"string\") &&\n\t\t(candidate.requestId === undefined || typeof candidate.requestId === \"string\") &&\n\t\t(candidate.retryAfterMs === undefined ||\n\t\t\t(typeof candidate.retryAfterMs === \"number\" &&\n\t\t\t\tNumber.isFinite(candidate.retryAfterMs) &&\n\t\t\t\tcandidate.retryAfterMs >= 0)) &&\n\t\t(candidate._tag !== \"Authentication\" ||\n\t\t\tcandidate.reason === \"missing\" ||\n\t\t\tcandidate.reason === \"invalid\" ||\n\t\t\tcandidate.reason === \"expired\")\n\t);\n}\n","import {\n\tAPICallError,\n\tEmptyResponseBodyError,\n\tInvalidArgumentError,\n\tInvalidPromptError,\n\tInvalidResponseDataError,\n\tJSONParseError,\n\tLoadAPIKeyError,\n\tLoadSettingError,\n\tNoContentGeneratedError,\n\tNoSuchModelError,\n\tTypeValidationError,\n\tUnsupportedFunctionalityError,\n} from \"@ai-sdk/provider\";\nimport { RetryError } from \"ai\";\nimport type { Failure } from \"./failure/schema.ts\";\n\nexport * from \"./failure/schema.ts\";\n\ntype Metadata = Omit<Failure, \"_tag\" | \"reason\">;\n\nconst record = (value: unknown): Record<string, unknown> | undefined =>\n\ttypeof value === \"object\" && value !== null && !Array.isArray(value)\n\t\t? (value as Record<string, unknown>)\n\t\t: undefined;\n\nconst nonEmptyString = (value: unknown): string | undefined =>\n\ttypeof value === \"string\" && value.trim().length > 0 ? value.trim() : undefined;\n\nconst normalizeMessage = (message: string): string => {\n\tconst trimmed = message.trim().replace(/[.!?]+$/u, \"\");\n\treturn trimmed.replace(/^[A-Za-z]+/u, (word) => word.toLowerCase());\n};\n\nconst errorMessage = (error: unknown): string => {\n\tconst value = record(error);\n\tconst data = record(value?.data);\n\tif (value?.name === \"ProtocolAuthError\") {\n\t\treturn normalizeMessage(nonEmptyString(data?.message) ?? \"provider credentials are missing\");\n\t}\n\tif (error instanceof Error) return normalizeMessage(nonEmptyString(error.message) ?? error.name);\n\treturn normalizeMessage(nonEmptyString(error) ?? \"the provider request failed for an unknown reason\");\n};\n\nconst isProtocolAuthError = (error: unknown): boolean => {\n\tconst value = record(error);\n\treturn value?.name === \"ProtocolAuthError\";\n};\n\nconst errorCode = (data: unknown): string | undefined => {\n\tconst top = record(data);\n\tconst nested = record(top?.error);\n\treturn (\n\t\tnonEmptyString(top?.code) ??\n\t\tnonEmptyString(top?.type) ??\n\t\tnonEmptyString(nested?.code) ??\n\t\tnonEmptyString(nested?.type)\n\t);\n};\n\nconst header = (headers: Record<string, string> | undefined, name: string): string | undefined => {\n\tif (headers === undefined) return undefined;\n\tconst expected = name.toLowerCase();\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (key.toLowerCase() === expected) return nonEmptyString(value);\n\t}\n};\n\nconst retryAfter = (headers: Record<string, string> | undefined): number | undefined => {\n\tconst value = header(headers, \"retry-after\");\n\tif (value === undefined) return undefined;\n\tconst seconds = Number(value);\n\tif (Number.isFinite(seconds) && seconds >= 0) return seconds * 1_000;\n};\n\nconst apiMetadata = (error: APICallError): Metadata => {\n\tconst code = errorCode(error.data);\n\tconst data = record(error.data);\n\tconst nested = record(data?.error);\n\tconst structuredMessage = nonEmptyString(data?.message) ?? nonEmptyString(nested?.message);\n\tconst message = normalizeMessage(\n\t\tstructuredMessage ??\n\t\t\t(error.responseBody !== undefined && error.message.includes(error.responseBody)\n\t\t\t\t? `provider request failed${error.statusCode === undefined ? \"\" : ` with http ${error.statusCode}`}`\n\t\t\t\t: errorMessage(error)),\n\t);\n\tconst requestId =\n\t\theader(error.responseHeaders, \"x-request-id\") ??\n\t\theader(error.responseHeaders, \"request-id\") ??\n\t\theader(error.responseHeaders, \"cf-ray\");\n\tconst retryAfterMs = retryAfter(error.responseHeaders);\n\treturn {\n\t\tmessage,\n\t\tretryable: error.isRetryable,\n\t\t...(error.statusCode === undefined ? {} : { status: error.statusCode }),\n\t\t...(code === undefined ? {} : { code }),\n\t\t...(requestId === undefined ? {} : { requestId }),\n\t\t...(retryAfterMs === undefined ? {} : { retryAfterMs }),\n\t};\n};\n\nconst includes = (value: string | undefined, terms: ReadonlyArray<string>): boolean =>\n\tvalue !== undefined && terms.some((term) => value.toLowerCase().includes(term));\n\nconst fromAPICall = (error: APICallError): Failure => {\n\tconst details = apiMetadata(error);\n\tif (includes(details.code, [\"quota\", \"billing\", \"credit\"])) return { _tag: \"Quota\", ...details };\n\tif (includes(details.code, [\"content_filter\", \"content_policy\", \"safety\"])) {\n\t\treturn { _tag: \"ContentPolicy\", ...details };\n\t}\n\tif (error.statusCode === 401) return { _tag: \"Authentication\", reason: \"invalid\", ...details };\n\tif (error.statusCode === 403) return { _tag: \"Authorization\", ...details };\n\tif (error.statusCode === 404) return { _tag: \"ModelUnavailable\", ...details };\n\tif (error.statusCode === 408) return { _tag: \"Timeout\", ...details };\n\tif (error.statusCode === 429) return { _tag: \"RateLimit\", ...details };\n\tif (error.statusCode !== undefined && error.statusCode >= 500) return { _tag: \"Unavailable\", ...details };\n\tif (error.statusCode === undefined) return { _tag: \"Transport\", ...details };\n\tif (error.statusCode >= 400 && error.statusCode < 500) return { _tag: \"InvalidRequest\", ...details };\n\treturn { _tag: \"Unknown\", ...details };\n};\n\nconst resemblesTimeout = (error: unknown): boolean => {\n\tconst value = error instanceof Error ? `${error.name} ${error.message}` : String(error);\n\treturn /timeout|timed out/i.test(value);\n};\n\nconst resemblesTransportFailure = (error: unknown): boolean => {\n\tif (error instanceof TypeError) return true;\n\tconst value = error instanceof Error ? `${error.name} ${error.message}` : String(error);\n\treturn /fetch|network|socket|connection|econn|dns/i.test(value);\n};\n\n/** Normalize AI SDK and provider exceptions without retaining request bodies, response bodies, or headers. */\nexport function normalize(error: unknown): Failure {\n\tif (RetryError.isInstance(error) && error.lastError !== undefined && error.lastError !== error) {\n\t\treturn normalize(error.lastError);\n\t}\n\tif (LoadAPIKeyError.isInstance(error) || isProtocolAuthError(error)) {\n\t\treturn { _tag: \"Authentication\", reason: \"missing\", message: errorMessage(error), retryable: false };\n\t}\n\tif (LoadSettingError.isInstance(error)) {\n\t\treturn { _tag: \"Configuration\", message: errorMessage(error), retryable: false };\n\t}\n\tif (NoSuchModelError.isInstance(error)) {\n\t\treturn { _tag: \"ModelUnavailable\", message: errorMessage(error), retryable: false };\n\t}\n\tif (APICallError.isInstance(error)) return fromAPICall(error);\n\tif (\n\t\tInvalidPromptError.isInstance(error) ||\n\t\tInvalidArgumentError.isInstance(error) ||\n\t\tUnsupportedFunctionalityError.isInstance(error)\n\t) {\n\t\treturn { _tag: \"InvalidRequest\", message: errorMessage(error), retryable: false };\n\t}\n\tif (\n\t\tInvalidResponseDataError.isInstance(error) ||\n\t\tJSONParseError.isInstance(error) ||\n\t\tEmptyResponseBodyError.isInstance(error) ||\n\t\tNoContentGeneratedError.isInstance(error) ||\n\t\tTypeValidationError.isInstance(error)\n\t) {\n\t\treturn { _tag: \"InvalidResponse\", message: errorMessage(error), retryable: false };\n\t}\n\tif (resemblesTimeout(error)) return { _tag: \"Timeout\", message: errorMessage(error), retryable: true };\n\tif (resemblesTransportFailure(error)) {\n\t\treturn { _tag: \"Transport\", message: errorMessage(error), retryable: true };\n\t}\n\treturn { _tag: \"Unknown\", message: errorMessage(error), retryable: false };\n}\n\n/** Best-effort compatibility for terminal messages written before structured failures existed. */\nexport function fromMessage(message: string): Failure {\n\tconst normalized = normalizeMessage(message);\n\tif (/api key/i.test(normalized) && /missing|required|not set/i.test(normalized)) {\n\t\treturn { _tag: \"Authentication\", reason: \"missing\", message: normalized, retryable: false };\n\t}\n\tif (/api key|credential|token/i.test(normalized) && /invalid|expired|unauthorized/i.test(normalized)) {\n\t\treturn {\n\t\t\t_tag: \"Authentication\",\n\t\t\treason: /expired/i.test(normalized) ? \"expired\" : \"invalid\",\n\t\t\tmessage: normalized,\n\t\t\tretryable: false,\n\t\t};\n\t}\n\treturn { _tag: \"Unknown\", message: normalized, retryable: false };\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"modelgen-xolcfdfT.mjs","names":["Filesystem.readJson","path","ModelCatalog.path","Filesystem.writeJson","Model.normalizeInput"],"sources":["../../src/cli/modelgen.ts"],"sourcesContent":["import { Filesystem } from \"@codeworksh/utils\";\nimport { lazy } from \"@codeworksh/utils\";\nimport { resolve } from \"node:path\";\nimport { mapValues, pickBy, pipe } from \"remeda\";\nimport type { CommandModule } from \"yargs\";\nimport { DEFAULT_AI_SDK_FALLBACK, isAISDKPackage, protocolForPackage } from \"../llm/registry.ts\";\nimport * as ModelCatalog from \"../model/catalog.ts\";\nimport * as Model from \"../model/model.ts\";\n\nconst DEFAULT_PROVIDER_BASE_URLS: Partial<Record<Model.KnownProviderEnum, string>> = {\n\t[Model.KnownProviderEnum.anthropic]: \"https://api.anthropic.com/v1\",\n\t[Model.KnownProviderEnum.openai]: \"https://api.openai.com/v1\",\n\t[Model.KnownProviderEnum.openrouter]: \"https://openrouter.ai/api/v1\",\n\t[Model.KnownProviderEnum.xai]: \"https://api.x.ai/v1\",\n};\n\ninterface ModelsDevModel {\n\tid: string;\n\tname: string;\n\tfamily: string;\n\tattachment: boolean;\n\treasoning?: boolean;\n\ttool_call?: boolean;\n\ttemperature?: boolean;\n\tknowledge?: string | boolean;\n\trelease_date: string;\n\tlast_updated: string;\n\tmodalities: {\n\t\tinput?: string[];\n\t\toutput: string[];\n\t};\n\topen_weights: boolean;\n\tbaseUrl?: string;\n\theaders?: Record<string, string>;\n\tcost?: {\n\t\tinput?: number;\n\t\toutput?: number;\n\t\tcache_read?: number;\n\t\tcache_write?: number;\n\t};\n\tlimit?: {\n\t\tcontext?: number;\n\t\toutput?: number;\n\t};\n\tstructured_output?: boolean;\n\tprovider?: {\n\t\tnpm?: string;\n\t\tapi?: string;\n\t\theaders?: Record<string, string>;\n\t};\n}\n\ninterface ModelsDevProvider {\n\tid: string;\n\tenv: string[];\n\tnpm?: string;\n\tapi?: string;\n\tname: string;\n\tdoc?: string; // reference documentation link\n\tkey?: string; // runtime placeholder for api/oauth key\n\theaders?: Record<string, string>; // custom overrides at provider level\n\tmodels: Record<string, ModelsDevModel>;\n}\n\nexport type BuiltInModels = Partial<Record<string, Record<string, Model.Info>>>;\n\n// Doesn't represent the full spec from models.dev.\n// Represents the provider entries on a best-effort basis.\ntype ModelsDevCatalog = Record<string, ModelsDevProvider>;\ntype LazyModelsDevCatalog = ReturnType<typeof lazy<Promise<ModelsDevCatalog>>>;\n\nfunction modelsDevURL(): string {\n\treturn process.env.OPENCODE_MODELS_URL || \"https://models.dev\";\n}\n\nfunction modelsDevPath(): string | undefined {\n\treturn process.env.OPENCODE_MODELS_DEV_FILE;\n}\n\nconst modelsDevData: LazyModelsDevCatalog = lazy(async () => {\n\tconst path = modelsDevPath();\n\tif (path) {\n\t\tconst result = await Filesystem.readJson<ModelsDevCatalog>(path).catch(() => undefined);\n\t\tif (result) return result;\n\t}\n\n\tconst json = await fetch(`${modelsDevURL()}/api.json`).then((x) => x.text());\n\treturn JSON.parse(json) as ModelsDevCatalog;\n});\n\nasync function pullModelsDevData(): Promise<ModelsDevCatalog> {\n\treturn modelsDevData();\n}\n\nfunction toModelValue(providerId: string, provider: ModelsDevProvider, model: ModelsDevModel): Model.Info | undefined {\n\treturn applyModification(providerId, provider, model);\n}\n\nasync function loadBuiltInFromModelsDev() {\n\tconst catalog = await pullModelsDevData();\n\treturn pipe(\n\t\tcatalog,\n\t\tpickBy((provider) =>\n\t\t\tObject.values(provider.models).some(\n\t\t\t\t// If `resolveModelNpm` fallbacks to `@ai-sdk/openai-compatible`\n\t\t\t\t// isAISDKPakage will be truthy, modify resolveModelNpm for custom logic if needed.\n\t\t\t\t// Keep `isAISDKPackage` as readonly for supported implemenatations key check\n\t\t\t\t(model) => Boolean(model.tool_call) && isAISDKPackage(resolveModelNpm(provider, model)),\n\t\t\t),\n\t\t),\n\t\tmapValues((provider, providerId) =>\n\t\t\tpipe(\n\t\t\t\tprovider.models,\n\t\t\t\tpickBy((model) => Boolean(model.tool_call) && isAISDKPackage(resolveModelNpm(provider, model))),\n\t\t\t\tmapValues((model) => toModelValue(providerId, provider, model)),\n\t\t\t\tpickBy((model): model is Model.Info => model !== undefined),\n\t\t\t),\n\t\t),\n\t) as BuiltInModels;\n}\n\ntype ThinkingLevelMap = NonNullable<Model.Info[\"thinkingLevelMap\"]>;\n\nfunction resolveModelNpm(provider: ModelsDevProvider, model: ModelsDevModel): string {\n\treturn model.provider?.npm ?? provider.npm ?? DEFAULT_AI_SDK_FALLBACK;\n}\n\nfunction resolveModelBaseUrl(provider: ModelsDevProvider, model: ModelsDevModel): string {\n\tconst npm = resolveModelNpm(provider, model);\n\tconst protocol = protocolForPackage(npm);\n\treturn model.baseUrl ?? model.provider?.api ?? provider.api ?? DEFAULT_PROVIDER_BASE_URLS[protocol] ?? \"\";\n}\n\nfunction resolveModelAPIMethod(npm: string): Model.APIMethodEnum {\n\tconst protocol = protocolForPackage(npm);\n\t// `By default, xai(modelId) uses the Chat API.\n\t// To use the Responses API with server-side agentic tools, explicitly use xai.responses(modelId).`\n\t// References: https://ai-sdk.dev/providers/ai-sdk-providers/xai\n\tif (protocol === Model.KnownProviderEnum.openai || protocol === Model.KnownProviderEnum.xai) {\n\t\treturn Model.APIMethodEnum.responses;\n\t}\n\treturn Model.APIMethodEnum.languageModel;\n}\n\nfunction resolveProviderOptionsKey(protocol: Model.KnownProviderEnum): string {\n\tif (protocol === Model.KnownProviderEnum.openaiCompatible) return \"openai-compatible\";\n\tif (protocol === Model.KnownProviderEnum.googleVertex) return \"google-vertex\";\n\tif (protocol === Model.KnownProviderEnum.googleVertexAnthropic) return \"google-vertex-anthropic\";\n\treturn protocol;\n}\n\n//\n// adhoc helpers variations\nconst OPENAI_RESPONSES_NONE_REASONING_MODELS = new Set([\n\t\"gpt-5.1\",\n\t\"gpt-5.2\",\n\t\"gpt-5.3-codex\",\n\t\"gpt-5.4\",\n\t\"gpt-5.4-mini\",\n\t\"gpt-5.4-nano\",\n\t\"gpt-5.5\",\n]);\n\nfunction supportsOpenAiXhigh(model: Model.Info): boolean {\n\tconst modelId = model.id;\n\treturn (\n\t\tmodelId.includes(\"gpt-5.2\") ||\n\t\tmodelId.includes(\"gpt-5.3\") ||\n\t\tmodelId.includes(\"gpt-5.4\") ||\n\t\tmodelId.includes(\"gpt-5.5\") ||\n\t\t(model.protocol === Model.KnownProviderEnum.openaiCodex && modelId.includes(\"gpt-5.6\"))\n\t);\n}\n\nfunction supportsOpenAiCodexMax(model: Model.Info): boolean {\n\treturn model.protocol === Model.KnownProviderEnum.openaiCodex && model.id.includes(\"gpt-5.6\");\n}\n\nfunction mergeThinkingLevelMap(model: Model.Info, map: ThinkingLevelMap): void {\n\tmodel.thinkingLevelMap = { ...model.thinkingLevelMap, ...map };\n}\n\nfunction applyThinkingLevelMetadata(model: Model.Info): void {\n\tif (model.protocol === Model.KnownProviderEnum.openai && model.id.startsWith(\"gpt-5\")) {\n\t\tmergeThinkingLevelMap(model, { off: null });\n\t}\n\tif (\n\t\tmodel.protocol === Model.KnownProviderEnum.openai &&\n\t\tmodel.provider.id === \"openai\" &&\n\t\tOPENAI_RESPONSES_NONE_REASONING_MODELS.has(model.id)\n\t) {\n\t\tmergeThinkingLevelMap(model, { off: \"none\" });\n\t}\n\tif (supportsOpenAiXhigh(model)) {\n\t\tmergeThinkingLevelMap(model, { xhigh: \"xhigh\" });\n\t}\n\tif (supportsOpenAiCodexMax(model)) {\n\t\tmergeThinkingLevelMap(model, { max: \"max\" });\n\t}\n\tif (model.id.includes(\"opus-4-6\") || model.id.includes(\"opus-4.6\")) {\n\t\tmergeThinkingLevelMap(model, { xhigh: \"max\" });\n\t}\n\tif (model.id.includes(\"opus-4-7\") || model.id.includes(\"opus-4.7\")) {\n\t\tmergeThinkingLevelMap(model, { xhigh: \"xhigh\" });\n\t}\n}\n\n//\n// OpenAI Codex (ChatGPT OAuth) models.\n// NOTE: These are not fetched from models.dev; we keep a small, explicit list to avoid aliases.\n// Context window is based on observed server limits (400s above ~272k), not marketing numbers.\nconst OPENAI_CODEX_PROVIDER_ID = \"openai-codex\";\nconst OPENAI_CODEX_NPM = \"@codeworksh/ai-sdk-openai-codex\";\nconst OPENAI_CODEX_BASE_URL = \"https://chatgpt.com/backend-api\";\nconst OPENAI_CODEX_CONTEXT = 272_000;\nconst OPENAI_CODEX_GPT_56_CONTEXT = 272_000;\nconst OPENAI_CODEX_SPARK_CONTEXT = 128_000;\nconst OPENAI_CODEX_MAX_TOKENS = 128_000;\nconst OPENAI_LONG_CONTEXT_INPUT_THRESHOLD = 272_000;\nconst OPENAI_CODEX_TOOL_SEARCH_MODEL_IDS = new Set([\n\t\"gpt-5.4\",\n\t\"gpt-5.4-mini\",\n\t\"gpt-5.5\",\n\t\"gpt-5.6-luna\",\n\t\"gpt-5.6-sol\",\n\t\"gpt-5.6-terra\",\n]);\nconst OPENAI_CODEX_ADDITIONAL_TOOLS_MODEL_IDS = new Set([\"gpt-5.6-luna\", \"gpt-5.6-sol\", \"gpt-5.6-terra\"]);\n\ntype OpenAICodexModelSeed = Pick<Model.Info, \"id\" | \"name\" | \"input\" | \"cost\" | \"contextWindow\" | \"thinkingLevelMap\">;\n\nfunction roundCost(value: number): number {\n\treturn Number(value.toFixed(6));\n}\n\nfunction withOpenAiLongContextPricing(cost: Model.Info[\"cost\"]): Model.Info[\"cost\"] {\n\treturn {\n\t\t...cost,\n\t\ttiers: [\n\t\t\t{\n\t\t\t\tinputTokensAbove: OPENAI_LONG_CONTEXT_INPUT_THRESHOLD,\n\t\t\t\tinput: roundCost(cost.input * 2),\n\t\t\t\toutput: roundCost(cost.output * 1.5),\n\t\t\t\tcacheRead: roundCost(cost.cacheRead * 2),\n\t\t\t\tcacheWrite: roundCost(cost.cacheWrite * 2),\n\t\t\t},\n\t\t],\n\t};\n}\n\nconst OPENAI_CODEX_GPT_56_COSTS = {\n\t\"gpt-5.6-luna\": { input: 0.2, output: 1.2, cacheRead: 0.02, cacheWrite: 0.25 },\n\t\"gpt-5.6-terra\": { input: 2, output: 12, cacheRead: 0.2, cacheWrite: 2.5 },\n} satisfies Record<string, Model.Info[\"cost\"]>;\n\nconst OPENAI_CODEX_MODELS: OpenAICodexModelSeed[] = [\n\t{\n\t\tid: \"gpt-5.3-codex-spark\",\n\t\tname: \"GPT-5.3 Codex Spark\",\n\t\tinput: [\"text\"],\n\t\tcost: { input: 1.75, output: 14, cacheRead: 0.175, cacheWrite: 0 },\n\t\tcontextWindow: OPENAI_CODEX_SPARK_CONTEXT,\n\t},\n\t{\n\t\tid: \"gpt-5.4\",\n\t\tname: \"GPT-5.4\",\n\t\tinput: [\"text\", \"image\"],\n\t\tcost: withOpenAiLongContextPricing({ input: 2.5, output: 15, cacheRead: 0.25, cacheWrite: 0 }),\n\t\tcontextWindow: OPENAI_CODEX_CONTEXT,\n\t},\n\t{\n\t\tid: \"gpt-5.4-mini\",\n\t\tname: \"GPT-5.4 mini\",\n\t\tinput: [\"text\", \"image\"],\n\t\tcost: { input: 0.75, output: 4.5, cacheRead: 0.075, cacheWrite: 0 },\n\t\tcontextWindow: OPENAI_CODEX_CONTEXT,\n\t},\n\t{\n\t\tid: \"gpt-5.5\",\n\t\tname: \"GPT-5.5\",\n\t\tinput: [\"text\", \"image\"],\n\t\tcost: withOpenAiLongContextPricing({ input: 5, output: 30, cacheRead: 0.5, cacheWrite: 0 }),\n\t\tcontextWindow: OPENAI_CODEX_CONTEXT,\n\t},\n\t{\n\t\tid: \"gpt-5.6-luna\",\n\t\tname: \"GPT-5.6 Luna\",\n\t\tinput: [\"text\", \"image\"],\n\t\tcost: withOpenAiLongContextPricing(OPENAI_CODEX_GPT_56_COSTS[\"gpt-5.6-luna\"]),\n\t\tcontextWindow: OPENAI_CODEX_GPT_56_CONTEXT,\n\t\tthinkingLevelMap: { minimal: null },\n\t},\n\t{\n\t\tid: \"gpt-5.6-sol\",\n\t\tname: \"GPT-5.6 Sol\",\n\t\tinput: [\"text\", \"image\"],\n\t\tcost: withOpenAiLongContextPricing({ input: 5, output: 30, cacheRead: 0.5, cacheWrite: 6.25 }),\n\t\tcontextWindow: OPENAI_CODEX_GPT_56_CONTEXT,\n\t\tthinkingLevelMap: { minimal: null },\n\t},\n\t{\n\t\tid: \"gpt-5.6-terra\",\n\t\tname: \"GPT-5.6 Terra\",\n\t\tinput: [\"text\", \"image\"],\n\t\tcost: withOpenAiLongContextPricing(OPENAI_CODEX_GPT_56_COSTS[\"gpt-5.6-terra\"]),\n\t\tcontextWindow: OPENAI_CODEX_GPT_56_CONTEXT,\n\t\tthinkingLevelMap: { minimal: null },\n\t},\n];\n\nexport function openAICodexBuiltInModels(): Record<string, Model.Info> {\n\tconst models: Record<string, Model.Info> = {};\n\tfor (const seed of OPENAI_CODEX_MODELS) {\n\t\tconst supportsToolSearch = OPENAI_CODEX_TOOL_SEARCH_MODEL_IDS.has(seed.id);\n\t\tconst supportsAdditionalTools = OPENAI_CODEX_ADDITIONAL_TOOLS_MODEL_IDS.has(seed.id);\n\t\tconst info: Model.Info = {\n\t\t\t...seed,\n\t\t\tprovider: {\n\t\t\t\tid: OPENAI_CODEX_PROVIDER_ID,\n\t\t\t\tname: \"OpenAI Codex (ChatGPT)\",\n\t\t\t\tsource: \"custom\",\n\t\t\t\tenv: [\"OPENAI_CODEX_API_KEY\"],\n\t\t\t},\n\t\t\tbaseUrl: OPENAI_CODEX_BASE_URL,\n\t\t\treasoning: true,\n\t\t\t// Codex models always reason; the off level cannot be requested.\n\t\t\tthinkingLevelMap: { off: null, ...seed.thinkingLevelMap },\n\t\t\tmaxTokens: OPENAI_CODEX_MAX_TOKENS,\n\t\t\tnpm: OPENAI_CODEX_NPM,\n\t\t\tapi: {\n\t\t\t\tid: seed.id,\n\t\t\t\turl: OPENAI_CODEX_BASE_URL,\n\t\t\t\tmethod: Model.APIMethodEnum.responses,\n\t\t\t},\n\t\t\tproviderOptionsKey: OPENAI_CODEX_PROVIDER_ID,\n\t\t\tcompat: {\n\t\t\t\tsupportsOpenAIGrammarTools: true,\n\t\t\t\t...(supportsToolSearch ? { supportsToolSearch: true } : {}),\n\t\t\t\t...(supportsAdditionalTools ? { supportsAdditionalTools: true } : {}),\n\t\t\t},\n\t\t\tprotocol: Model.KnownProviderEnum.openaiCodex,\n\t\t};\n\t\tapplyThinkingLevelMetadata(info);\n\t\tmodels[seed.id] = info;\n\t}\n\treturn models;\n}\n\nexport async function generateModels(args: { path?: string | undefined } = {}): Promise<string> {\n\tconst path = resolve(args.path ?? ModelCatalog.path());\n\tconst modelsDev = await loadBuiltInFromModelsDev();\n\tconst customCodexModels = openAICodexBuiltInModels();\n\n\tconst allModels = { ...modelsDev, [OPENAI_CODEX_PROVIDER_ID]: customCodexModels };\n\tawait Filesystem.writeJson(path, allModels);\n\treturn path;\n}\n\n//\n// CLI entry\nexport const ModelgenCommand: CommandModule<object, { path?: string | undefined }> = {\n\tcommand: \"modelgen [path]\",\n\tdescribe: \"generate models.gen.json\",\n\tbuilder: (yargs) =>\n\t\tyargs.positional(\"path\", {\n\t\t\ttype: \"string\",\n\t\t\tdescribe: \"output path (defaults to CODEWORK_MODELS_FILE or ./models.gen.json)\",\n\t\t}),\n\thandler: async (args) => {\n\t\tconst path = await generateModels(args);\n\t\tconsole.log(`Generated model catalog at ${path}`);\n\t},\n};\n\nexport function applyModification(\n\tproviderId: string,\n\tprovider: ModelsDevProvider,\n\tmodel: ModelsDevModel,\n): Model.Info | undefined {\n\tconst npm = resolveModelNpm(provider, model);\n\tif (!isAISDKPackage(npm)) return;\n\n\tconst protocol = protocolForPackage(npm);\n\tconst baseUrl = resolveModelBaseUrl(provider, model);\n\tconst providerInfo: Model.ProviderInfo = {\n\t\tid: providerId,\n\t\tname: provider.name,\n\t\tsource: \"api\",\n\t\tenv: provider.env,\n\t};\n\tif (provider.key) providerInfo.key = provider.key;\n\tconst api: Model.APIMetadata = {\n\t\tid: model.id,\n\t\tmethod: resolveModelAPIMethod(npm),\n\t};\n\tif (baseUrl) api.url = baseUrl;\n\n\tconst info: Model.Info = {\n\t\tid: model.id,\n\t\tname: model.name,\n\t\tprovider: providerInfo,\n\t\tbaseUrl,\n\t\treasoning: Boolean(model.reasoning),\n\t\tinput: Model.normalizeInput(model.modalities.input),\n\t\tcost: {\n\t\t\tinput: model.cost?.input ?? 0,\n\t\t\toutput: model.cost?.output ?? 0,\n\t\t\tcacheRead: model.cost?.cache_read ?? 0,\n\t\t\tcacheWrite: model.cost?.cache_write ?? 0,\n\t\t},\n\t\tcontextWindow: model.limit?.context ?? 4096,\n\t\tmaxTokens: model.limit?.output ?? 4096,\n\t\theaders: {\n\t\t\t...provider.headers,\n\t\t\t...model.provider?.headers,\n\t\t\t...model.headers,\n\t\t},\n\t\tnpm,\n\t\tapi,\n\t\tproviderOptionsKey: resolveProviderOptionsKey(protocol),\n\t\tprotocol,\n\t};\n\tif (Object.keys(info.headers ?? {}).length === 0) delete info.headers;\n\tapplyThinkingLevelMetadata(info);\n\treturn info;\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { n as createOpenAICodex } from "./openai-codex-_3XkJ4bs.mjs";
2
- export { createOpenAICodex };
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai-codex-_3XkJ4bs.mjs","names":[],"sources":["../../src/providers/openai-codex/codex-tools.ts","../../src/utils/hash.ts","../../src/providers/openai-codex/codex-error.ts","../../src/providers/openai-codex/codex-prompt.ts","../../src/providers/openai-codex/codex-sse.ts","../../src/providers/openai-codex/codex-usage.ts","../../src/providers/openai-codex/codex-language-model.ts","../../src/providers/openai-codex/codex-provider.ts"],"sourcesContent":["import type { LanguageModelV3CallOptions, LanguageModelV3ToolChoice, SharedV3Warning } from \"@ai-sdk/provider\";\nimport type { TSchema } from \"typebox\";\nimport type * as Message from \"../../message/message.ts\";\nimport type { OpenAICodexCompatibility } from \"./codex-language-model.ts\";\n\nexport type OpenAICodexTool =\n\t| {\n\t\t\ttype: \"function\";\n\t\t\tname: string;\n\t\t\tdescription?: string;\n\t\t\tparameters: Record<string, unknown>;\n\t\t\tstrict?: boolean | null;\n\t\t\tdefer_loading?: boolean;\n\t }\n\t| {\n\t\t\ttype: \"custom\";\n\t\t\tname: string;\n\t\t\tdescription?: string;\n\t\t\tformat: {\n\t\t\t\ttype: \"grammar\";\n\t\t\t\tsyntax: \"lark\" | \"regex\";\n\t\t\t\tdefinition: string;\n\t\t\t};\n\t\t\tdefer_loading?: boolean;\n\t };\n\nexport type OpenAICodexGrammarConstraint = {\n\ttype: \"grammar\";\n\tformat: \"lark\" | \"regex\";\n\tdefinition: string;\n\tinputProperty: string;\n};\n\nexport type OpenAICodexGrammarInputBuffer = {\n\tinput: string;\n\tstarted: boolean;\n\tclosed: boolean;\n};\n\nexport function appendOpenAICodexGrammarInputJsonDelta(\n\tbuffer: OpenAICodexGrammarInputBuffer,\n\tinputProperty: string,\n\tnextInput: string,\n\tclose: boolean,\n): string | undefined {\n\tif (buffer.closed) {\n\t\tif (close && nextInput === buffer.input) return undefined;\n\t\tthrow new Error(`grammar tool input for property \"${inputProperty}\" changed after it was closed`);\n\t}\n\tif (!nextInput.startsWith(buffer.input)) {\n\t\tthrow new Error(`grammar tool input for property \"${inputProperty}\" changed non-monotonically`);\n\t}\n\n\tconst inputDelta = nextInput.slice(buffer.input.length);\n\tif (!close && inputDelta.length === 0) return undefined;\n\n\tlet delta = \"\";\n\tif (!buffer.started) {\n\t\tdelta += `{${JSON.stringify(inputProperty)}:\"`;\n\t\tbuffer.started = true;\n\t}\n\tdelta += JSON.stringify(inputDelta).slice(1, -1);\n\tbuffer.input = nextInput;\n\n\tif (close) {\n\t\tdelta += '\"}';\n\t\tbuffer.closed = true;\n\t}\n\treturn delta;\n}\n\ntype JsonSchemaObject = {\n\ttype?: unknown;\n\tproperties?: Record<string, { type?: unknown } | undefined>;\n\trequired?: unknown;\n};\n\nfunction inferGrammarInputProperty(parameters: TSchema): string {\n\tconst schema = parameters as JsonSchemaObject;\n\tif (schema.type !== \"object\") throw new Error(\"grammar constrained sampling requires an object parameter schema\");\n\tif (!Array.isArray(schema.required) || schema.required.length !== 1 || typeof schema.required[0] !== \"string\") {\n\t\tthrow new Error(\"grammar constrained sampling requires exactly one required string property\");\n\t}\n\tconst inputProperty = schema.required[0];\n\tif (!schema.properties?.[inputProperty]) {\n\t\tthrow new Error(`grammar constrained sampling requires a properties entry for ${inputProperty}`);\n\t}\n\tif (schema.properties[inputProperty]?.type !== \"string\") {\n\t\tthrow new Error(`grammar constrained sampling property ${inputProperty} must have type string`);\n\t}\n\treturn inputProperty;\n}\n\nexport function resolveOpenAICodexToolConstraint(\n\ttool: Message.Tool,\n\tcompat?: OpenAICodexCompatibility,\n): OpenAICodexGrammarConstraint | { type: \"json_schema\"; strict: true } | undefined {\n\tconst config = tool.constrainedSampling;\n\tif (!config) return undefined;\n\tif (config.type === \"json_schema\") {\n\t\tif (compat?.supportsStrictMode ?? true) return { type: \"json_schema\", strict: true };\n\t\tif (config.strict === \"require\") {\n\t\t\tthrow new Error(\n\t\t\t\t`Tool \"${tool.name}\" requires JSON-schema constrained sampling, but strict tools are unsupported.`,\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t}\n\tif (!(compat?.supportsOpenAIGrammarTools ?? false)) return undefined;\n\n\tconst lark = config.variants.openai_lark;\n\tconst regex = config.variants.openai_regex;\n\tconst hasLark = typeof lark === \"string\" && lark.trim().length > 0;\n\tconst hasRegex = typeof regex === \"string\" && regex.trim().length > 0;\n\tif (!hasLark && !hasRegex) {\n\t\tthrow new Error(\n\t\t\t`Tool \"${tool.name}\" cannot use grammar constrained sampling: no supported grammar variant was provided.`,\n\t\t);\n\t}\n\ttry {\n\t\treturn {\n\t\t\ttype: \"grammar\",\n\t\t\tformat: hasLark ? \"lark\" : \"regex\",\n\t\t\tdefinition: hasLark ? lark! : regex!,\n\t\t\tinputProperty: inferGrammarInputProperty(tool.parameters),\n\t\t};\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthrow new Error(`Tool \"${tool.name}\" cannot use grammar constrained sampling: ${message}.`);\n\t}\n}\n\nexport const openAICodexTools = {\n\tcustom<TParameters extends TSchema>(args: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tparameters: TParameters;\n\t\tformat: { type: \"grammar\"; syntax: \"lark\" | \"regex\"; definition: string };\n\t}): Message.Tool<TParameters> {\n\t\treturn {\n\t\t\tname: args.name,\n\t\t\tdescription: args.description,\n\t\t\tparameters: args.parameters,\n\t\t\tconstrainedSampling: {\n\t\t\t\ttype: \"grammar\",\n\t\t\t\tvariants:\n\t\t\t\t\targs.format.syntax === \"lark\"\n\t\t\t\t\t\t? { openai_lark: args.format.definition }\n\t\t\t\t\t\t: { openai_regex: args.format.definition },\n\t\t\t},\n\t\t};\n\t},\n};\n\nexport type OpenAICodexToolChoice = \"auto\" | \"none\" | \"required\";\nexport type OpenAICodexDeferredToolsMode = \"additional-tools\" | \"tool-search\";\n\nconst TOOL_SEARCH_MODEL_IDS = new Set([\n\t\"gpt-5.4\",\n\t\"gpt-5.4-mini\",\n\t\"gpt-5.5\",\n\t\"gpt-5.6-luna\",\n\t\"gpt-5.6-sol\",\n\t\"gpt-5.6-terra\",\n]);\nconst ADDITIONAL_TOOLS_MODEL_IDS = new Set([\"gpt-5.6-luna\", \"gpt-5.6-sol\", \"gpt-5.6-terra\"]);\n\nexport function resolveOpenAICodexDeferredToolsMode(\n\tmodelId: string,\n\tcompat?: OpenAICodexCompatibility,\n): OpenAICodexDeferredToolsMode | undefined {\n\tconst supportsAdditionalTools = compat?.supportsAdditionalTools ?? ADDITIONAL_TOOLS_MODEL_IDS.has(modelId);\n\tif (supportsAdditionalTools) return \"additional-tools\";\n\n\tconst supportsToolSearch = compat?.supportsToolSearch ?? TOOL_SEARCH_MODEL_IDS.has(modelId);\n\treturn supportsToolSearch ? \"tool-search\" : undefined;\n}\n\nexport function prepareOpenAICodexTools({\n\ttools,\n\ttoolChoice,\n\tdeferredToolNames,\n}: {\n\ttools: LanguageModelV3CallOptions[\"tools\"];\n\ttoolChoice: LanguageModelV3ToolChoice | undefined;\n\tdeferredToolNames?: ReadonlySet<string>;\n}): {\n\tcodexTools: OpenAICodexTool[] | undefined;\n\tdeferredCodexTools: ReadonlyMap<string, OpenAICodexTool>;\n\tgrammarToolInputProperties: ReadonlyMap<string, string>;\n\tcodexToolChoice: OpenAICodexToolChoice | undefined;\n\twarnings: SharedV3Warning[];\n} {\n\tconst warnings: SharedV3Warning[] = [];\n\tconst deferredCodexTools = new Map<string, OpenAICodexTool>();\n\tconst grammarToolInputProperties = new Map<string, string>();\n\n\tif (!tools || tools.length === 0) {\n\t\treturn {\n\t\t\tcodexTools: undefined,\n\t\t\tdeferredCodexTools,\n\t\t\tgrammarToolInputProperties,\n\t\t\tcodexToolChoice: undefined,\n\t\t\twarnings,\n\t\t};\n\t}\n\n\tconst codexTools: OpenAICodexTool[] = [];\n\tfor (const tool of tools) {\n\t\tif (tool.type !== \"function\") {\n\t\t\twarnings.push({\n\t\t\t\ttype: \"unsupported\",\n\t\t\t\tfeature: `tool type ${tool.type}`,\n\t\t\t\tdetails: `OpenAI Codex only supports function tools; ignoring ${tool.name}.`,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\t\tconst metadata = tool.providerOptions?.[\"openai-codex\"] as Record<string, unknown> | undefined;\n\t\tconst grammar = metadata?.grammar as OpenAICodexGrammarConstraint | undefined;\n\t\tconst codexTool: OpenAICodexTool =\n\t\t\tgrammar?.type === \"grammar\"\n\t\t\t\t? {\n\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\t...(tool.description !== undefined && { description: tool.description }),\n\t\t\t\t\t\tformat: {\n\t\t\t\t\t\t\ttype: \"grammar\",\n\t\t\t\t\t\t\tsyntax: grammar.format,\n\t\t\t\t\t\t\tdefinition: grammar.definition,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\t\ttype: \"function\",\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\t...(tool.description !== undefined && { description: tool.description }),\n\t\t\t\t\t\tparameters: tool.inputSchema as Record<string, unknown>,\n\t\t\t\t\t\tstrict: tool.strict ?? null,\n\t\t\t\t\t};\n\t\tif (grammar?.type === \"grammar\") grammarToolInputProperties.set(tool.name, grammar.inputProperty);\n\t\tif (deferredToolNames?.has(tool.name)) deferredCodexTools.set(tool.name, codexTool);\n\t\telse codexTools.push(codexTool);\n\t}\n\n\tlet codexToolChoice: OpenAICodexToolChoice | undefined;\n\tswitch (toolChoice?.type) {\n\t\tcase undefined:\n\t\t\tbreak;\n\t\tcase \"auto\":\n\t\tcase \"none\":\n\t\tcase \"required\":\n\t\t\tcodexToolChoice = toolChoice.type;\n\t\t\tbreak;\n\t\tcase \"tool\":\n\t\t\twarnings.push({\n\t\t\t\ttype: \"unsupported\",\n\t\t\t\tfeature: \"toolChoice tool name\",\n\t\t\t\tdetails: \"OpenAI Codex does not support forcing a specific tool; using 'required' instead.\",\n\t\t\t});\n\t\t\tcodexToolChoice = \"required\";\n\t\t\tbreak;\n\t}\n\n\treturn {\n\t\tcodexTools: codexTools.length > 0 ? codexTools : undefined,\n\t\tdeferredCodexTools,\n\t\tgrammarToolInputProperties,\n\t\tcodexToolChoice,\n\t\twarnings,\n\t};\n}\n","/** Fast deterministic hash for shortening provider wire identifiers. */\nexport function shortHash(value: string): string {\n\tlet high = 0xdeadbeef;\n\tlet low = 0x41c6ce57;\n\tfor (let index = 0; index < value.length; index++) {\n\t\tconst character = value.charCodeAt(index);\n\t\thigh = Math.imul(high ^ character, 2654435761);\n\t\tlow = Math.imul(low ^ character, 1597334677);\n\t}\n\thigh = Math.imul(high ^ (high >>> 16), 2246822507) ^ Math.imul(low ^ (low >>> 13), 3266489909);\n\tlow = Math.imul(low ^ (low >>> 16), 2246822507) ^ Math.imul(high ^ (high >>> 13), 3266489909);\n\treturn (low >>> 0).toString(36) + (high >>> 0).toString(36);\n}\n","import { APICallError } from \"@ai-sdk/provider\";\n\ntype OpenAICodexErrorPayload = {\n\terror?: {\n\t\tcode?: string;\n\t\ttype?: string;\n\t\tmessage?: string;\n\t\tplan_type?: string;\n\t\tresets_at?: number;\n\t};\n};\n\nfunction isTerminalRateLimitError(body: string): boolean {\n\treturn /GoUsageLimitError|FreeUsageLimitError|Monthly usage limit reached|available balance|insufficient_quota|out of budget|quota exceeded|billing/i.test(\n\t\tbody,\n\t);\n}\n\n/**\n * Turn a Codex error payload into a human-friendly message. ChatGPT plan usage\n * limits deserve a clearer message than the raw backend error.\n */\nexport function openAICodexErrorMessage(status: number, body: string, statusText?: string): string {\n\tlet message = body || statusText || \"OpenAI Codex request failed\";\n\n\ttry {\n\t\tconst parsed = JSON.parse(body) as OpenAICodexErrorPayload;\n\t\tconst error = parsed?.error;\n\t\tif (error) {\n\t\t\tconst code = error.code ?? error.type ?? \"\";\n\t\t\tif (/usage_limit_reached|usage_not_included|rate_limit_exceeded/i.test(code) || status === 429) {\n\t\t\t\tconst plan = error.plan_type ? ` (${error.plan_type.toLowerCase()} plan)` : \"\";\n\t\t\t\tconst minutes = error.resets_at\n\t\t\t\t\t? Math.max(0, Math.round((error.resets_at * 1000 - Date.now()) / 60000))\n\t\t\t\t\t: undefined;\n\t\t\t\tconst when = minutes === undefined ? \"\" : ` Try again in ~${minutes} min.`;\n\t\t\t\treturn `You have hit your ChatGPT usage limit${plan}.${when}`.trim();\n\t\t\t}\n\t\t\tmessage = error.message || message;\n\t\t}\n\t} catch {\n\t\t// Not JSON; keep the raw body as the message.\n\t}\n\n\treturn message;\n}\n\nexport async function createOpenAICodexAPICallError(args: {\n\tresponse: Response;\n\turl: string;\n\trequestBodyValues: unknown;\n}): Promise<APICallError> {\n\tconst { response, url, requestBodyValues } = args;\n\tconst responseBody = await response.text().catch(() => \"\");\n\tconst responseHeaders: Record<string, string> = {};\n\tresponse.headers.forEach((value, key) => {\n\t\tresponseHeaders[key] = value;\n\t});\n\n\treturn new APICallError({\n\t\tmessage: openAICodexErrorMessage(response.status, responseBody, response.statusText),\n\t\turl,\n\t\trequestBodyValues,\n\t\tstatusCode: response.status,\n\t\tresponseHeaders,\n\t\tresponseBody,\n\t\tisRetryable:\n\t\t\tresponse.status === 408 ||\n\t\t\tresponse.status === 409 ||\n\t\t\t(response.status === 429 && !isTerminalRateLimitError(responseBody)) ||\n\t\t\tresponse.status >= 500,\n\t});\n}\n","import type {\n\tLanguageModelV3FilePart,\n\tLanguageModelV3Prompt,\n\tLanguageModelV3ToolResultOutput,\n\tLanguageModelV4FilePart,\n\tLanguageModelV4Prompt,\n\tLanguageModelV4ToolResultOutput,\n} from \"@ai-sdk/provider\";\nimport { shortHash } from \"../../utils/hash.ts\";\nimport type { OpenAICodexDeferredToolsMode, OpenAICodexTool } from \"./codex-tools.ts\";\n\n/**\n * OpenAI Responses API input item types accepted by the Codex backend.\n */\nexport type OpenAICodexInputItem =\n\t| {\n\t\t\trole: \"user\";\n\t\t\tcontent: Array<\n\t\t\t\t{ type: \"input_text\"; text: string } | { type: \"input_image\"; image_url: string; detail?: string }\n\t\t\t>;\n\t }\n\t| {\n\t\t\ttype: \"message\";\n\t\t\trole: \"assistant\";\n\t\t\tid: string;\n\t\t\tcontent: Array<{ type: \"output_text\"; text: string; annotations: unknown[] }>;\n\t\t\tstatus: \"completed\";\n\t }\n\t| {\n\t\t\ttype: \"function_call\";\n\t\t\tid?: string;\n\t\t\tcall_id: string;\n\t\t\tname: string;\n\t\t\targuments: string;\n\t\t\tnamespace?: string;\n\t }\n\t| {\n\t\t\ttype: \"custom_tool_call\";\n\t\t\tid?: string;\n\t\t\tcall_id: string;\n\t\t\tname: string;\n\t\t\tinput: string;\n\t\t\tnamespace?: string;\n\t }\n\t| {\n\t\t\ttype: \"reasoning\";\n\t\t\tid: string;\n\t\t\t[key: string]: unknown;\n\t }\n\t| {\n\t\t\ttype: \"function_call_output\";\n\t\t\tcall_id: string;\n\t\t\toutput:\n\t\t\t\t| string\n\t\t\t\t| Array<{ type: \"input_text\"; text: string } | { type: \"input_image\"; image_url: string; detail: \"auto\" }>;\n\t }\n\t| {\n\t\t\ttype: \"custom_tool_call_output\";\n\t\t\tcall_id: string;\n\t\t\toutput: string;\n\t }\n\t| {\n\t\t\ttype: \"additional_tools\";\n\t\t\trole: \"developer\";\n\t\t\ttools: OpenAICodexTool[];\n\t }\n\t| {\n\t\t\ttype: \"tool_search_call\";\n\t\t\tcall_id: string;\n\t\t\texecution: \"client\";\n\t\t\tstatus: \"completed\";\n\t\t\targuments: { query: string; limit: number };\n\t }\n\t| {\n\t\t\ttype: \"tool_search_output\";\n\t\t\tcall_id: string;\n\t\t\texecution: \"client\";\n\t\t\tstatus: \"completed\";\n\t\t\ttools: OpenAICodexTool[];\n\t };\n\nexport type OpenAICodexPrompt = {\n\tinstructions: string;\n\tinput: OpenAICodexInputItem[];\n};\n\nconst DEFAULT_INSTRUCTIONS = \"You are a helpful assistant.\";\n\nexport type OpenAICodexPromptOptions = {\n\tdeferredTools?: ReadonlyMap<string, OpenAICodexTool>;\n\tdeferredToolsMode?: OpenAICodexDeferredToolsMode;\n\tgrammarToolInputProperties?: ReadonlyMap<string, string>;\n\tsupportsImages?: boolean;\n};\n\n// Tool call ids round-trip through the AI SDK as `call_id|item_id` because the\n// Responses API needs both halves: `call_id` to pair function_call_output and\n// `id` for the function_call item itself.\nexport function splitToolCallId(toolCallId: string): { callId: string; itemId: string } {\n\tconst separator = toolCallId.indexOf(\"|\");\n\tif (separator === -1) return { callId: toolCallId, itemId: toolCallId };\n\treturn { callId: toolCallId.slice(0, separator), itemId: toolCallId.slice(separator + 1) };\n}\n\nexport function joinToolCallId(callId: string, itemId: string): string {\n\treturn `${callId}|${itemId}`;\n}\n\nfunction uint8ArrayToBase64(bytes: Uint8Array): string {\n\tlet binary = \"\";\n\tfor (const byte of bytes) {\n\t\tbinary += String.fromCharCode(byte);\n\t}\n\treturn btoa(binary);\n}\n\nfunction imageUrlFromFilePart(part: LanguageModelV3FilePart | LanguageModelV4FilePart): string | undefined {\n\tconst data = part.data;\n\tif (data instanceof URL) return data.toString();\n\tif (typeof data === \"string\") {\n\t\tif (data.startsWith(\"data:\") || data.startsWith(\"http://\") || data.startsWith(\"https://\")) return data;\n\t\treturn `data:${part.mediaType};base64,${data}`;\n\t}\n\tif (data instanceof Uint8Array) {\n\t\treturn `data:${part.mediaType};base64,${uint8ArrayToBase64(data)}`;\n\t}\n\tif (\"type\" in data) {\n\t\tif (data.type === \"url\") return data.url.toString();\n\t\tif (data.type === \"data\") {\n\t\t\treturn typeof data.data === \"string\"\n\t\t\t\t? `data:${part.mediaType};base64,${data.data}`\n\t\t\t\t: `data:${part.mediaType};base64,${uint8ArrayToBase64(data.data)}`;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction toolResultOutput(\n\toutput: LanguageModelV3ToolResultOutput | LanguageModelV4ToolResultOutput,\n\tsupportsImages: boolean,\n): Extract<OpenAICodexInputItem, { type: \"function_call_output\" }>[\"output\"] {\n\tswitch (output.type) {\n\t\tcase \"text\":\n\t\tcase \"error-text\":\n\t\t\treturn output.value || \"(no tool output)\";\n\t\tcase \"json\":\n\t\tcase \"error-json\":\n\t\t\treturn JSON.stringify(output.value);\n\t\tcase \"execution-denied\":\n\t\t\treturn output.reason ?? \"Tool execution denied\";\n\t\tcase \"content\": {\n\t\t\tconst text = output.value\n\t\t\t\t.filter((part): part is Extract<typeof part, { type: \"text\" }> => part.type === \"text\")\n\t\t\t\t.map((part) => part.text)\n\t\t\t\t.join(\"\\n\");\n\t\t\tconst images: Array<{ type: \"input_image\"; image_url: string; detail: \"auto\" }> = [];\n\t\t\tif (supportsImages) {\n\t\t\t\tfor (const part of output.value) {\n\t\t\t\t\tif (part.type === \"file-data\" && part.mediaType.startsWith(\"image/\")) {\n\t\t\t\t\t\timages.push({\n\t\t\t\t\t\t\ttype: \"input_image\",\n\t\t\t\t\t\t\timage_url: `data:${part.mediaType};base64,${part.data}`,\n\t\t\t\t\t\t\tdetail: \"auto\",\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (part.type === \"file-url\") {\n\t\t\t\t\t\timages.push({ type: \"input_image\", image_url: part.url, detail: \"auto\" });\n\t\t\t\t\t} else if (part.type === \"file\" && part.mediaType.startsWith(\"image/\")) {\n\t\t\t\t\t\tconst data = part.data;\n\t\t\t\t\t\tif (data.type === \"url\") {\n\t\t\t\t\t\t\timages.push({ type: \"input_image\", image_url: data.url.toString(), detail: \"auto\" });\n\t\t\t\t\t\t} else if (data.type === \"data\") {\n\t\t\t\t\t\t\tconst encoded = typeof data.data === \"string\" ? data.data : uint8ArrayToBase64(data.data);\n\t\t\t\t\t\t\timages.push({\n\t\t\t\t\t\t\t\ttype: \"input_image\",\n\t\t\t\t\t\t\t\timage_url: `data:${part.mediaType};base64,${encoded}`,\n\t\t\t\t\t\t\t\tdetail: \"auto\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (images.length === 0)\n\t\t\t\treturn text || (output.value.length > 0 ? \"(see attached image)\" : \"(no tool output)\");\n\t\t\treturn [...(text ? [{ type: \"input_text\" as const, text }] : []), ...images];\n\t\t}\n\t\tdefault:\n\t\t\treturn JSON.stringify(output);\n\t}\n}\n\nfunction customToolInput(input: unknown, toolName: string, inputProperty: string): string {\n\tif (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n\t\tthrow new Error(`Custom tool \"${toolName}\" requires object input with string property \"${inputProperty}\".`);\n\t}\n\tconst value = (input as Record<string, unknown>)[inputProperty];\n\tif (typeof value !== \"string\") {\n\t\tthrow new Error(`Custom tool \"${toolName}\" requires string input property \"${inputProperty}\".`);\n\t}\n\treturn value;\n}\n\nfunction customToolOutput(\n\toutput: LanguageModelV3ToolResultOutput | LanguageModelV4ToolResultOutput,\n\tsupportsImages: boolean,\n): string {\n\tconst value = toolResultOutput(output, supportsImages);\n\treturn typeof value === \"string\" ? value : JSON.stringify(value);\n}\n\nfunction codexProviderMetadata(\n\tproviderOptions: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n\tconst codex = providerOptions?.[\"openai-codex\"];\n\treturn typeof codex === \"object\" && codex !== null && !Array.isArray(codex)\n\t\t? (codex as Record<string, unknown>)\n\t\t: undefined;\n}\n\nfunction addedToolNames(providerOptions: Record<string, unknown> | undefined): string[] {\n\tconst names = codexProviderMetadata(providerOptions)?.addedToolNames;\n\treturn Array.isArray(names) ? names.filter((name): name is string => typeof name === \"string\") : [];\n}\n\nfunction reasoningItem(\n\tproviderOptions: Record<string, unknown> | undefined,\n): Extract<OpenAICodexInputItem, { type: \"reasoning\" }> | undefined {\n\tconst value = codexProviderMetadata(providerOptions)?.reasoningItem;\n\tif (typeof value !== \"string\") return undefined;\n\ttry {\n\t\tconst parsed = JSON.parse(value) as unknown;\n\t\tif (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return undefined;\n\t\tconst item = parsed as Record<string, unknown>;\n\t\treturn item.type === \"reasoning\" && typeof item.id === \"string\"\n\t\t\t? (item as Extract<OpenAICodexInputItem, { type: \"reasoning\" }>)\n\t\t\t: undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\n/** Collect definitions that were introduced at a transcript load point rather than at request start. */\nexport function collectOpenAICodexDeferredToolNames(\n\tprompt: LanguageModelV3Prompt | LanguageModelV4Prompt,\n): Set<string> {\n\tconst deferredNames = new Set<string>();\n\tconst usedNames = new Set<string>();\n\n\tfor (const message of prompt) {\n\t\tif (message.role === \"assistant\") {\n\t\t\tfor (const part of message.content) {\n\t\t\t\tif (part.type === \"tool-call\") usedNames.add(part.toolName);\n\t\t\t\tif (part.type === \"tool-result\") {\n\t\t\t\t\tfor (const name of addedToolNames(part.providerOptions)) {\n\t\t\t\t\t\tif (!usedNames.has(name)) deferredNames.add(name);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\t\tif (message.role !== \"tool\") continue;\n\t\tfor (const part of message.content) {\n\t\t\tif (part.type !== \"tool-result\") continue;\n\t\t\tfor (const name of addedToolNames(part.providerOptions)) {\n\t\t\t\tif (!usedNames.has(name)) deferredNames.add(name);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn deferredNames;\n}\n\nfunction deferredToolCallId(toolCallId: string, names: readonly string[]): string {\n\treturn `aikit_tool_load_${shortHash(`${toolCallId}:${names.join(\",\")}`)}`;\n}\n\n/**\n * Convert an AI SDK V3 prompt into the Codex Responses request shape.\n * System messages become `instructions`; everything else maps to `input` items.\n */\nexport function convertToOpenAICodexPrompt(\n\tprompt: LanguageModelV3Prompt | LanguageModelV4Prompt,\n\toptions?: OpenAICodexPromptOptions,\n): OpenAICodexPrompt {\n\tlet instructions: string | undefined;\n\tconst input: OpenAICodexInputItem[] = [];\n\tlet syntheticMessageCounter = 0;\n\tconst loadedToolNames = new Set<string>();\n\n\tconst appendDeferredTools = (toolCallId: string, names: readonly string[]): void => {\n\t\tconst tools: OpenAICodexTool[] = [];\n\t\tfor (const name of names) {\n\t\t\tconst tool = options?.deferredTools?.get(name);\n\t\t\tif (!tool || loadedToolNames.has(name)) continue;\n\t\t\tloadedToolNames.add(name);\n\t\t\ttools.push(tool);\n\t\t}\n\t\tif (tools.length === 0) return;\n\n\t\tif (options?.deferredToolsMode === \"additional-tools\") {\n\t\t\tinput.push({ type: \"additional_tools\", role: \"developer\", tools });\n\t\t\treturn;\n\t\t}\n\t\tif (options?.deferredToolsMode === \"tool-search\") {\n\t\t\tconst callId = deferredToolCallId(\n\t\t\t\ttoolCallId,\n\t\t\t\ttools.map((tool) => tool.name),\n\t\t\t);\n\t\t\tinput.push({\n\t\t\t\ttype: \"tool_search_call\",\n\t\t\t\tcall_id: callId,\n\t\t\t\texecution: \"client\",\n\t\t\t\tstatus: \"completed\",\n\t\t\t\targuments: { query: tools.map((tool) => tool.name).join(\" \"), limit: tools.length },\n\t\t\t});\n\t\t\tinput.push({\n\t\t\t\ttype: \"tool_search_output\",\n\t\t\t\tcall_id: callId,\n\t\t\t\texecution: \"client\",\n\t\t\t\tstatus: \"completed\",\n\t\t\t\ttools: tools.map((tool) => ({ ...tool, defer_loading: true })),\n\t\t\t});\n\t\t}\n\t};\n\n\tfor (const message of prompt) {\n\t\tswitch (message.role) {\n\t\t\tcase \"system\": {\n\t\t\t\tinstructions = instructions == null ? message.content : `${instructions}\\n\\n${message.content}`;\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"user\": {\n\t\t\t\tconst content: Extract<OpenAICodexInputItem, { role: \"user\" }>[\"content\"] = [];\n\t\t\t\tfor (const part of message.content) {\n\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\tcontent.push({ type: \"input_text\", text: part.text });\n\t\t\t\t\t} else if (part.type === \"file\" && part.mediaType.startsWith(\"image/\")) {\n\t\t\t\t\t\tconst imageUrl = imageUrlFromFilePart(part);\n\t\t\t\t\t\tif (imageUrl) content.push({ type: \"input_image\", image_url: imageUrl, detail: \"auto\" });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (content.length > 0) {\n\t\t\t\t\tinput.push({ role: \"user\", content });\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"assistant\": {\n\t\t\t\tfor (const part of message.content) {\n\t\t\t\t\tif (part.type === \"reasoning\") {\n\t\t\t\t\t\tconst item = reasoningItem(part.providerOptions);\n\t\t\t\t\t\tif (item) input.push(item);\n\t\t\t\t\t} else if (part.type === \"text\") {\n\t\t\t\t\t\tsyntheticMessageCounter++;\n\t\t\t\t\t\tconst messageId = codexProviderMetadata(part.providerOptions)?.messageId;\n\t\t\t\t\t\tinput.push({\n\t\t\t\t\t\t\ttype: \"message\",\n\t\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\t\tid:\n\t\t\t\t\t\t\t\ttypeof messageId === \"string\" && messageId.length <= 64\n\t\t\t\t\t\t\t\t\t? messageId\n\t\t\t\t\t\t\t\t\t: `msg_aikit_${syntheticMessageCounter}`,\n\t\t\t\t\t\t\tcontent: [{ type: \"output_text\", text: part.text, annotations: [] }],\n\t\t\t\t\t\t\tstatus: \"completed\",\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (part.type === \"tool-call\") {\n\t\t\t\t\t\tconst { callId, itemId } = splitToolCallId(part.toolCallId);\n\t\t\t\t\t\tconst metadata = codexProviderMetadata(part.providerOptions);\n\t\t\t\t\t\tconst namespace = metadata?.namespace;\n\t\t\t\t\t\tconst inputProperty = options?.grammarToolInputProperties?.get(part.toolName);\n\t\t\t\t\t\tif (inputProperty) {\n\t\t\t\t\t\t\tinput.push({\n\t\t\t\t\t\t\t\ttype: \"custom_tool_call\",\n\t\t\t\t\t\t\t\t...(metadata?.omitItemId === true || !itemId.startsWith(\"ctc_\") ? {} : { id: itemId }),\n\t\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\t\tname: part.toolName,\n\t\t\t\t\t\t\t\tinput: customToolInput(part.input, part.toolName, inputProperty),\n\t\t\t\t\t\t\t\t...(typeof namespace === \"string\" ? { namespace } : {}),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tinput.push({\n\t\t\t\t\t\t\t\ttype: \"function_call\",\n\t\t\t\t\t\t\t\t...(metadata?.omitItemId === true || !itemId.startsWith(\"fc_\") ? {} : { id: itemId }),\n\t\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\t\tname: part.toolName,\n\t\t\t\t\t\t\t\targuments: typeof part.input === \"string\" ? part.input : JSON.stringify(part.input ?? {}),\n\t\t\t\t\t\t\t\t...(typeof namespace === \"string\" ? { namespace } : {}),\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase \"tool\": {\n\t\t\t\tfor (const part of message.content) {\n\t\t\t\t\tif (part.type !== \"tool-result\") continue;\n\t\t\t\t\tconst { callId } = splitToolCallId(part.toolCallId);\n\t\t\t\t\tif (options?.grammarToolInputProperties?.has(part.toolName)) {\n\t\t\t\t\t\tinput.push({\n\t\t\t\t\t\t\ttype: \"custom_tool_call_output\",\n\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\toutput: customToolOutput(part.output, options?.supportsImages ?? true),\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tinput.push({\n\t\t\t\t\t\t\ttype: \"function_call_output\",\n\t\t\t\t\t\t\tcall_id: callId,\n\t\t\t\t\t\t\toutput: toolResultOutput(part.output, options?.supportsImages ?? true),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tappendDeferredTools(part.toolCallId, addedToolNames(part.providerOptions));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { instructions: instructions || DEFAULT_INSTRUCTIONS, input };\n}\n","/**\n * Minimal SSE parsing for the Codex Responses endpoint. Each event is a JSON\n * payload on `data:` lines; `[DONE]` terminates the stream.\n */\nexport function parseOpenAICodexSSEStream(body: ReadableStream<Uint8Array>): ReadableStream<Record<string, unknown>> {\n\tconst decoder = new TextDecoder();\n\tlet buffer = \"\";\n\n\tconst parseChunk = (chunk: string, controller: TransformStreamDefaultController<Record<string, unknown>>) => {\n\t\tconst dataLines = chunk\n\t\t\t.split(\"\\n\")\n\t\t\t.filter((line) => line.startsWith(\"data:\"))\n\t\t\t.map((line) => line.slice(5).trim());\n\t\tif (dataLines.length === 0) return;\n\n\t\tconst data = dataLines.join(\"\\n\").trim();\n\t\tif (!data || data === \"[DONE]\") return;\n\n\t\ttry {\n\t\t\tcontroller.enqueue(JSON.parse(data) as Record<string, unknown>);\n\t\t} catch (cause) {\n\t\t\tcontroller.error(new Error(`Invalid OpenAI Codex SSE JSON: ${data.slice(0, 200)}`, { cause }));\n\t\t}\n\t};\n\n\treturn body.pipeThrough(\n\t\tnew TransformStream<Uint8Array, Record<string, unknown>>({\n\t\t\ttransform(value, controller) {\n\t\t\t\tbuffer += decoder.decode(value, { stream: true });\n\n\t\t\t\tlet index = buffer.indexOf(\"\\n\\n\");\n\t\t\t\twhile (index !== -1) {\n\t\t\t\t\tconst chunk = buffer.slice(0, index);\n\t\t\t\t\tbuffer = buffer.slice(index + 2);\n\t\t\t\t\tparseChunk(chunk, controller);\n\t\t\t\t\tindex = buffer.indexOf(\"\\n\\n\");\n\t\t\t\t}\n\t\t\t},\n\t\t\tflush(controller) {\n\t\t\t\tbuffer += decoder.decode();\n\t\t\t\tif (buffer.trim()) parseChunk(buffer, controller);\n\t\t\t},\n\t\t}),\n\t);\n}\n","import type { JSONObject, LanguageModelV3FinishReason, LanguageModelV3Usage } from \"@ai-sdk/provider\";\n\nexport type OpenAICodexUsage = {\n\tinput_tokens?: number;\n\toutput_tokens?: number;\n\ttotal_tokens?: number;\n\tinput_tokens_details?: { cached_tokens?: number; cache_write_tokens?: number };\n\toutput_tokens_details?: { reasoning_tokens?: number };\n};\n\nexport function convertOpenAICodexUsage(usage: OpenAICodexUsage | undefined): LanguageModelV3Usage {\n\tconst inputTotal = usage?.input_tokens;\n\tconst cachedTokens = usage?.input_tokens_details?.cached_tokens ?? 0;\n\tconst cacheWriteTokens = usage?.input_tokens_details?.cache_write_tokens ?? 0;\n\tconst outputTotal = usage?.output_tokens;\n\tconst reasoningTokens = usage?.output_tokens_details?.reasoning_tokens ?? 0;\n\n\treturn {\n\t\tinputTokens: {\n\t\t\ttotal: inputTotal,\n\t\t\tnoCache: inputTotal === undefined ? undefined : Math.max(inputTotal - cachedTokens - cacheWriteTokens, 0),\n\t\t\tcacheRead: inputTotal === undefined ? undefined : cachedTokens,\n\t\t\tcacheWrite: inputTotal === undefined ? undefined : cacheWriteTokens,\n\t\t},\n\t\toutputTokens: {\n\t\t\ttotal: outputTotal,\n\t\t\ttext: outputTotal === undefined ? undefined : outputTotal - reasoningTokens,\n\t\t\treasoning: outputTotal === undefined ? undefined : reasoningTokens,\n\t\t},\n\t\t...(usage ? { raw: usage as JSONObject } : {}),\n\t};\n}\n\nexport function mapOpenAICodexFinishReason(\n\tstatus: string | undefined,\n\thasToolCalls: boolean,\n\tincompleteReason?: string,\n): LanguageModelV3FinishReason {\n\tswitch (status) {\n\t\tcase \"completed\":\n\t\t\treturn { unified: hasToolCalls ? \"tool-calls\" : \"stop\", raw: status };\n\t\tcase \"incomplete\":\n\t\t\treturn incompleteReason === \"max_output_tokens\"\n\t\t\t\t? { unified: \"length\", raw: `${status}.${incompleteReason}` }\n\t\t\t\t: { unified: \"error\", raw: incompleteReason ? `${status}.${incompleteReason}` : status };\n\t\tcase \"failed\":\n\t\tcase \"cancelled\":\n\t\t\treturn { unified: \"error\", raw: status };\n\t\tcase undefined:\n\t\t\treturn { unified: \"other\", raw: undefined };\n\t\tdefault:\n\t\t\treturn { unified: \"stop\", raw: status };\n\t}\n}\n","import type * as NodeZlib from \"node:zlib\";\nimport type {\n\tLanguageModelV3,\n\tLanguageModelV3CallOptions,\n\tLanguageModelV3Content,\n\tLanguageModelV3FinishReason,\n\tLanguageModelV3GenerateResult,\n\tLanguageModelV3StreamPart,\n\tLanguageModelV3StreamResult,\n\tLanguageModelV3Usage,\n\tSharedV3Warning,\n} from \"@ai-sdk/provider\";\nimport { createOpenAICodexAPICallError } from \"./codex-error.ts\";\nimport { collectOpenAICodexDeferredToolNames, convertToOpenAICodexPrompt, joinToolCallId } from \"./codex-prompt.ts\";\nimport { parseOpenAICodexSSEStream } from \"./codex-sse.ts\";\nimport {\n\tappendOpenAICodexGrammarInputJsonDelta,\n\tprepareOpenAICodexTools,\n\tresolveOpenAICodexDeferredToolsMode,\n\ttype OpenAICodexGrammarInputBuffer,\n} from \"./codex-tools.ts\";\nimport { convertOpenAICodexUsage, mapOpenAICodexFinishReason, type OpenAICodexUsage } from \"./codex-usage.ts\";\n\nexport const OPENAI_CODEX_DEFAULT_BASE_URL = \"https://chatgpt.com/backend-api\";\nexport const OPENAI_CODEX_PROMPT_CACHE_KEY_MAX_LENGTH = 64;\nconst REQUEST_COMPRESSION_ZSTD_LEVEL = 3;\n\ntype ProcessWithBuiltinModule = typeof process & {\n\tgetBuiltinModule?: (id: \"node:zlib\") => typeof NodeZlib;\n};\n\nfunction compressOpenAICodexRequest(body: string): Uint8Array | undefined {\n\tif (typeof process === \"undefined\" || !(process.versions?.node || process.versions?.bun)) return undefined;\n\tconst zlib = (process as ProcessWithBuiltinModule).getBuiltinModule?.(\"node:zlib\");\n\tif (!zlib || typeof zlib.zstdCompressSync !== \"function\") return undefined;\n\ttry {\n\t\tconst compressed = zlib.zstdCompressSync(body, {\n\t\t\tparams: { [zlib.constants.ZSTD_c_compressionLevel]: REQUEST_COMPRESSION_ZSTD_LEVEL },\n\t\t});\n\t\treturn new Uint8Array(compressed.buffer, compressed.byteOffset, compressed.byteLength);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function clampOpenAICodexPromptCacheKey(key: string | undefined): string | undefined {\n\tif (key === undefined) return undefined;\n\tconst characters = Array.from(key);\n\treturn characters.length <= OPENAI_CODEX_PROMPT_CACHE_KEY_MAX_LENGTH\n\t\t? key\n\t\t: characters.slice(0, OPENAI_CODEX_PROMPT_CACHE_KEY_MAX_LENGTH).join(\"\");\n}\n\nexport type OpenAICodexModelId =\n\t| \"gpt-5.3-codex-spark\"\n\t| \"gpt-5.4\"\n\t| \"gpt-5.4-mini\"\n\t| \"gpt-5.5\"\n\t| \"gpt-5.6-luna\"\n\t| \"gpt-5.6-sol\"\n\t| \"gpt-5.6-terra\"\n\t| (string & {});\n\nexport type OpenAICodexServiceTier = \"auto\" | \"default\" | \"flex\" | \"scale\" | \"priority\";\n\nexport type OpenAICodexCompatibility = {\n\tsupportsToolSearch?: boolean;\n\tsupportsAdditionalTools?: boolean;\n\tsupportsStrictMode?: boolean;\n\tsupportsOpenAIGrammarTools?: boolean;\n\t/** Internal transport capability derived from the model's input modalities. */\n\tsupportsImages?: boolean;\n};\n\n/**\n * Per-call options, passed via `providerOptions[\"openai-codex\"]`.\n */\nexport type OpenAICodexLanguageModelOptions = {\n\t/** Reasoning effort forwarded as `reasoning.effort`. */\n\treasoningEffort?: \"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\" | (string & {});\n\t/** Reasoning summary verbosity; defaults to `auto` when an effort is set. */\n\treasoningSummary?: \"auto\" | \"concise\" | \"detailed\" | \"off\" | \"on\" | null;\n\t/** Output text verbosity; defaults to `low`. */\n\ttextVerbosity?: \"low\" | \"medium\" | \"high\";\n\tserviceTier?: OpenAICodexServiceTier;\n\t/** Prompt cache key; defaults to the provider `sessionId`. */\n\tpromptCacheKey?: string;\n\t/** `include` fields; defaults to `[\"reasoning.encrypted_content\"]`. */\n\tinclude?: string[];\n\t/** @deprecated Codex always requires `store: false`; this value is ignored. */\n\tstore?: boolean;\n};\n\nexport type OpenAICodexLanguageModelConfig = {\n\tprovider: string;\n\tbaseURL: string;\n\theaders: () => PromiseLike<Record<string, string | undefined>> | Record<string, string | undefined>;\n\tfetch?: typeof globalThis.fetch;\n\tsessionId?: string;\n\tserviceTier?: OpenAICodexServiceTier;\n\tcompat?: OpenAICodexCompatibility;\n};\n\n/**\n * Resolve the Codex responses endpoint from a base URL that may already\n * include the `/codex` or `/codex/responses` suffix.\n */\nexport function resolveOpenAICodexUrl(baseUrl?: string): string {\n\tconst raw = baseUrl?.trim() ? baseUrl : OPENAI_CODEX_DEFAULT_BASE_URL;\n\tconst normalized = raw.replace(/\\/+$/, \"\");\n\tif (normalized.endsWith(\"/codex/responses\")) return normalized;\n\tif (normalized.endsWith(\"/codex\")) return `${normalized}/responses`;\n\treturn `${normalized}/codex/responses`;\n}\n\ntype CodexEvent = Record<string, unknown>;\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value) ? (value as CodexEvent) : undefined;\n}\n\nfunction asString(value: unknown): string | undefined {\n\treturn typeof value === \"string\" ? value : undefined;\n}\n\nfunction cleanHeaders(headers: Record<string, string | undefined>): Record<string, string> {\n\tconst result: Record<string, string> = {};\n\tfor (const [key, value] of Object.entries(headers)) {\n\t\tif (value !== undefined) result[key] = value;\n\t}\n\treturn result;\n}\n\nexport class OpenAICodexLanguageModel implements LanguageModelV3 {\n\treadonly specificationVersion = \"v3\" as const;\n\treadonly modelId: OpenAICodexModelId;\n\n\tprivate readonly config: OpenAICodexLanguageModelConfig;\n\n\tconstructor(modelId: OpenAICodexModelId, config: OpenAICodexLanguageModelConfig) {\n\t\tthis.modelId = modelId;\n\t\tthis.config = config;\n\t}\n\n\tget provider(): string {\n\t\treturn this.config.provider;\n\t}\n\n\tget supportedUrls(): Record<string, RegExp[]> {\n\t\treturn {};\n\t}\n\n\tprivate getArgs(options: LanguageModelV3CallOptions): {\n\t\targs: Record<string, unknown>;\n\t\twarnings: SharedV3Warning[];\n\t\tgrammarToolInputProperties: ReadonlyMap<string, string>;\n\t} {\n\t\tconst warnings: SharedV3Warning[] = [];\n\n\t\tif (options.topP != null) warnings.push({ type: \"unsupported\", feature: \"topP\" });\n\t\tif (options.topK != null) warnings.push({ type: \"unsupported\", feature: \"topK\" });\n\t\tif (options.presencePenalty != null) warnings.push({ type: \"unsupported\", feature: \"presencePenalty\" });\n\t\tif (options.frequencyPenalty != null) warnings.push({ type: \"unsupported\", feature: \"frequencyPenalty\" });\n\t\tif (options.seed != null) warnings.push({ type: \"unsupported\", feature: \"seed\" });\n\t\tif (options.stopSequences != null) warnings.push({ type: \"unsupported\", feature: \"stopSequences\" });\n\t\tif (options.maxOutputTokens != null) {\n\t\t\t// The ChatGPT Codex backend rejects max_output_tokens with a 400.\n\t\t\twarnings.push({ type: \"unsupported\", feature: \"maxOutputTokens\" });\n\t\t}\n\t\tif (options.responseFormat && options.responseFormat.type !== \"text\") {\n\t\t\twarnings.push({ type: \"unsupported\", feature: \"responseFormat\" });\n\t\t}\n\n\t\tconst codexOptions = (options.providerOptions?.[\"openai-codex\"] ?? {}) as OpenAICodexLanguageModelOptions;\n\t\tconst deferredToolsMode = resolveOpenAICodexDeferredToolsMode(this.modelId, this.config.compat);\n\t\tconst deferredToolNames = deferredToolsMode ? collectOpenAICodexDeferredToolNames(options.prompt) : undefined;\n\t\tconst tools = prepareOpenAICodexTools({\n\t\t\ttools: options.tools,\n\t\t\ttoolChoice: options.toolChoice,\n\t\t\t...(deferredToolNames !== undefined && { deferredToolNames }),\n\t\t});\n\t\tconst { instructions, input } = convertToOpenAICodexPrompt(options.prompt, {\n\t\t\tdeferredTools: tools.deferredCodexTools,\n\t\t\t...(deferredToolsMode !== undefined && { deferredToolsMode }),\n\t\t\tgrammarToolInputProperties: tools.grammarToolInputProperties,\n\t\t\tsupportsImages: this.config.compat?.supportsImages ?? this.modelId !== \"gpt-5.3-codex-spark\",\n\t\t});\n\t\twarnings.push(...tools.warnings);\n\n\t\tconst args: Record<string, unknown> = {\n\t\t\tmodel: this.modelId,\n\t\t\t// The ChatGPT backend rejects stored responses for Codex subscriptions.\n\t\t\tstore: false,\n\t\t\tinstructions,\n\t\t\tinput,\n\t\t\ttool_choice: tools.codexToolChoice ?? \"auto\",\n\t\t\tparallel_tool_calls: true,\n\t\t\tinclude: codexOptions.include ?? [\"reasoning.encrypted_content\"],\n\t\t\ttext: { verbosity: codexOptions.textVerbosity ?? \"low\" },\n\t\t};\n\n\t\tif (tools.codexTools) args.tools = tools.codexTools;\n\t\tif (options.temperature != null) args.temperature = options.temperature;\n\n\t\tconst promptCacheKey = clampOpenAICodexPromptCacheKey(codexOptions.promptCacheKey ?? this.config.sessionId);\n\t\tif (promptCacheKey) args.prompt_cache_key = promptCacheKey;\n\n\t\tconst serviceTier = codexOptions.serviceTier ?? this.config.serviceTier;\n\t\tif (serviceTier) args.service_tier = serviceTier;\n\n\t\tif (codexOptions.reasoningEffort) {\n\t\t\targs.reasoning = {\n\t\t\t\teffort: codexOptions.reasoningEffort,\n\t\t\t\tsummary: codexOptions.reasoningSummary ?? \"auto\",\n\t\t\t};\n\t\t}\n\n\t\treturn { args, warnings, grammarToolInputProperties: tools.grammarToolInputProperties };\n\t}\n\n\tasync doGenerate(options: LanguageModelV3CallOptions): Promise<LanguageModelV3GenerateResult> {\n\t\tconst { stream, request, response } = await this.doStream(options);\n\n\t\tconst content: LanguageModelV3Content[] = [];\n\t\tconst textBlocks = new Map<string, Extract<LanguageModelV3Content, { type: \"text\" }>>();\n\t\tconst reasoningBlocks = new Map<string, Extract<LanguageModelV3Content, { type: \"reasoning\" }>>();\n\t\tconst warnings: SharedV3Warning[] = [];\n\t\tlet finishReason: LanguageModelV3FinishReason = { unified: \"other\", raw: undefined };\n\t\tlet usage: LanguageModelV3Usage = convertOpenAICodexUsage(undefined);\n\t\tlet responseId: string | undefined;\n\t\tlet responseModelId: string | undefined;\n\n\t\tconst reader = stream.getReader();\n\t\twhile (true) {\n\t\t\tconst { done, value } = await reader.read();\n\t\t\tif (done) break;\n\n\t\t\tswitch (value.type) {\n\t\t\t\tcase \"stream-start\":\n\t\t\t\t\twarnings.push(...value.warnings);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"response-metadata\":\n\t\t\t\t\tresponseId = value.id;\n\t\t\t\t\tresponseModelId = value.modelId;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"text-start\": {\n\t\t\t\t\tconst block = { type: \"text\" as const, text: \"\" };\n\t\t\t\t\ttextBlocks.set(value.id, block);\n\t\t\t\t\tcontent.push(block);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"text-delta\": {\n\t\t\t\t\tconst block = textBlocks.get(value.id);\n\t\t\t\t\tif (block) block.text += value.delta;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"text-end\": {\n\t\t\t\t\tconst block = textBlocks.get(value.id);\n\t\t\t\t\tif (block && value.providerMetadata !== undefined) block.providerMetadata = value.providerMetadata;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"reasoning-start\": {\n\t\t\t\t\tconst block = { type: \"reasoning\" as const, text: \"\" };\n\t\t\t\t\treasoningBlocks.set(value.id, block);\n\t\t\t\t\tcontent.push(block);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"reasoning-delta\": {\n\t\t\t\t\tconst block = reasoningBlocks.get(value.id);\n\t\t\t\t\tif (block) block.text += value.delta;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"reasoning-end\": {\n\t\t\t\t\tconst block = reasoningBlocks.get(value.id);\n\t\t\t\t\tif (block && value.providerMetadata !== undefined) block.providerMetadata = value.providerMetadata;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"tool-call\":\n\t\t\t\t\tcontent.push(value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"finish\":\n\t\t\t\t\tfinishReason = value.finishReason;\n\t\t\t\t\tusage = value.usage;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"error\":\n\t\t\t\t\tthrow value.error instanceof Error ? value.error : new Error(String(value.error));\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcontent: content.filter((part) =>\n\t\t\t\tpart.type === \"text\" || part.type === \"reasoning\"\n\t\t\t\t\t? part.text !== \"\" || part.providerMetadata !== undefined\n\t\t\t\t\t: true,\n\t\t\t),\n\t\t\tfinishReason,\n\t\t\tusage,\n\t\t\t...(request !== undefined && { request }),\n\t\t\tresponse: {\n\t\t\t\t...response,\n\t\t\t\t...(responseId !== undefined && { id: responseId }),\n\t\t\t\t...(responseModelId !== undefined && { modelId: responseModelId }),\n\t\t\t},\n\t\t\twarnings,\n\t\t};\n\t}\n\n\tasync doStream(options: LanguageModelV3CallOptions): Promise<LanguageModelV3StreamResult> {\n\t\tconst { args, warnings, grammarToolInputProperties } = this.getArgs(options);\n\t\tconst body = { ...args, stream: true };\n\t\tconst url = resolveOpenAICodexUrl(this.config.baseURL);\n\n\t\tconst headers = cleanHeaders({\n\t\t\t...(await this.config.headers()),\n\t\t\t...options.headers,\n\t\t});\n\t\tconst bodyJson = JSON.stringify(body);\n\t\tconst compressedBody = compressOpenAICodexRequest(bodyJson);\n\t\tif (compressedBody) headers[\"content-encoding\"] = \"zstd\";\n\n\t\tconst fetchImpl = this.config.fetch ?? globalThis.fetch;\n\t\tconst response = await fetchImpl(url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders,\n\t\t\tbody: compressedBody ?? bodyJson,\n\t\t\t...(options.abortSignal !== undefined && { signal: options.abortSignal }),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow await createOpenAICodexAPICallError({ response, url, requestBodyValues: body });\n\t\t}\n\t\tif (!response.body) {\n\t\t\tthrow new Error(\"OpenAI Codex response has no body\");\n\t\t}\n\n\t\tconst responseHeaders: Record<string, string> = {};\n\t\tresponse.headers.forEach((value, key) => {\n\t\t\tresponseHeaders[key] = value;\n\t\t});\n\n\t\treturn {\n\t\t\tstream: parseOpenAICodexSSEStream(response.body).pipeThrough(\n\t\t\t\tthis.createTransformStream(warnings, options.includeRawChunks ?? false, grammarToolInputProperties),\n\t\t\t),\n\t\t\trequest: { body },\n\t\t\tresponse: { headers: responseHeaders },\n\t\t};\n\t}\n\n\tprivate createTransformStream(\n\t\twarnings: SharedV3Warning[],\n\t\tincludeRawChunks: boolean,\n\t\tgrammarToolInputProperties: ReadonlyMap<string, string>,\n\t): TransformStream<CodexEvent, LanguageModelV3StreamPart> {\n\t\tlet finishReason: LanguageModelV3FinishReason = { unified: \"other\", raw: undefined };\n\t\tlet usage: OpenAICodexUsage | undefined;\n\t\tlet hasToolCalls = false;\n\t\tlet finished = false;\n\t\t// function_call argument deltas arrive keyed by item id; tool parts use the\n\t\t// composite `call_id|item_id` so multi-turn replay can recover both halves.\n\t\tconst toolCallIdsByItemId = new Map<string, string>();\n\t\tconst customToolInputsByItemId = new Map<\n\t\t\tstring,\n\t\t\t{\n\t\t\t\ttoolCallId: string;\n\t\t\t\ttoolName: string;\n\t\t\t\tinputProperty: string;\n\t\t\t\tbuffer: OpenAICodexGrammarInputBuffer;\n\t\t\t}\n\t\t>();\n\t\tconst finish = (controller: TransformStreamDefaultController<LanguageModelV3StreamPart>): void => {\n\t\t\tif (finished) return;\n\t\t\tfinished = true;\n\t\t\tcontroller.enqueue({\n\t\t\t\ttype: \"finish\",\n\t\t\t\tfinishReason,\n\t\t\t\tusage: convertOpenAICodexUsage(usage),\n\t\t\t});\n\t\t};\n\n\t\tconst handleOutputItemAdded = (\n\t\t\titem: CodexEvent,\n\t\t\tcontroller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n\t\t) => {\n\t\t\tconst itemType = asString(item.type);\n\t\t\tconst itemId = asString(item.id);\n\t\t\tif (!itemType || !itemId) return;\n\n\t\t\tif (itemType === \"message\") {\n\t\t\t\tcontroller.enqueue({ type: \"text-start\", id: itemId });\n\t\t\t} else if (itemType === \"reasoning\") {\n\t\t\t\tcontroller.enqueue({ type: \"reasoning-start\", id: itemId });\n\t\t\t} else if (itemType === \"function_call\") {\n\t\t\t\tconst toolCallId = joinToolCallId(asString(item.call_id) ?? itemId, itemId);\n\t\t\t\ttoolCallIdsByItemId.set(itemId, toolCallId);\n\t\t\t\thasToolCalls = true;\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"tool-input-start\",\n\t\t\t\t\tid: toolCallId,\n\t\t\t\t\ttoolName: asString(item.name) ?? \"\",\n\t\t\t\t});\n\t\t\t} else if (itemType === \"custom_tool_call\") {\n\t\t\t\tconst toolName = asString(item.name) ?? \"\";\n\t\t\t\tconst inputProperty = grammarToolInputProperties.get(toolName) ?? \"input\";\n\t\t\t\tconst toolCallId = joinToolCallId(asString(item.call_id) ?? itemId, itemId);\n\t\t\t\tcustomToolInputsByItemId.set(itemId, {\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName,\n\t\t\t\t\tinputProperty,\n\t\t\t\t\tbuffer: { input: \"\", started: false, closed: false },\n\t\t\t\t});\n\t\t\t\thasToolCalls = true;\n\t\t\t\tcontroller.enqueue({ type: \"tool-input-start\", id: toolCallId, toolName });\n\t\t\t}\n\t\t};\n\n\t\tconst handleOutputItemDone = (\n\t\t\titem: CodexEvent,\n\t\t\tcontroller: TransformStreamDefaultController<LanguageModelV3StreamPart>,\n\t\t) => {\n\t\t\tconst itemType = asString(item.type);\n\t\t\tconst itemId = asString(item.id);\n\t\t\tif (!itemType || !itemId) return;\n\n\t\t\tif (itemType === \"message\") {\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"text-end\",\n\t\t\t\t\tid: itemId,\n\t\t\t\t\tproviderMetadata: { \"openai-codex\": { messageId: itemId } },\n\t\t\t\t});\n\t\t\t} else if (itemType === \"reasoning\") {\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"reasoning-end\",\n\t\t\t\t\tid: itemId,\n\t\t\t\t\tproviderMetadata: { \"openai-codex\": { reasoningItem: JSON.stringify(item) } },\n\t\t\t\t});\n\t\t\t} else if (itemType === \"function_call\") {\n\t\t\t\tconst toolCallId =\n\t\t\t\t\ttoolCallIdsByItemId.get(itemId) ?? joinToolCallId(asString(item.call_id) ?? itemId, itemId);\n\t\t\t\thasToolCalls = true;\n\t\t\t\tcontroller.enqueue({ type: \"tool-input-end\", id: toolCallId });\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"tool-call\",\n\t\t\t\t\ttoolCallId,\n\t\t\t\t\ttoolName: asString(item.name) ?? \"\",\n\t\t\t\t\tinput: asString(item.arguments) ?? \"\",\n\t\t\t\t\t...(asString(item.namespace)\n\t\t\t\t\t\t? { providerMetadata: { \"openai-codex\": { namespace: asString(item.namespace)! } } }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t} else if (itemType === \"custom_tool_call\") {\n\t\t\t\tconst state = customToolInputsByItemId.get(itemId);\n\t\t\t\tif (!state) return;\n\t\t\t\tconst input = asString(item.input) ?? state.buffer.input;\n\t\t\t\tconst delta = appendOpenAICodexGrammarInputJsonDelta(state.buffer, state.inputProperty, input, true);\n\t\t\t\tif (delta) controller.enqueue({ type: \"tool-input-delta\", id: state.toolCallId, delta });\n\t\t\t\thasToolCalls = true;\n\t\t\t\tcontroller.enqueue({ type: \"tool-input-end\", id: state.toolCallId });\n\t\t\t\tcontroller.enqueue({\n\t\t\t\t\ttype: \"tool-call\",\n\t\t\t\t\ttoolCallId: state.toolCallId,\n\t\t\t\t\ttoolName: state.toolName,\n\t\t\t\t\tinput: JSON.stringify({ [state.inputProperty]: input }),\n\t\t\t\t\t...(asString(item.namespace)\n\t\t\t\t\t\t? { providerMetadata: { \"openai-codex\": { namespace: asString(item.namespace)! } } }\n\t\t\t\t\t\t: {}),\n\t\t\t\t});\n\t\t\t\tcustomToolInputsByItemId.delete(itemId);\n\t\t\t}\n\t\t};\n\n\t\treturn new TransformStream<CodexEvent, LanguageModelV3StreamPart>({\n\t\t\tstart(controller) {\n\t\t\t\tcontroller.enqueue({ type: \"stream-start\", warnings });\n\t\t\t},\n\n\t\t\ttransform(event, controller) {\n\t\t\t\tif (includeRawChunks) {\n\t\t\t\t\tcontroller.enqueue({ type: \"raw\", rawValue: event });\n\t\t\t\t}\n\n\t\t\t\tconst type = asString(event.type);\n\t\t\t\tif (!type) return;\n\n\t\t\t\tswitch (type) {\n\t\t\t\t\tcase \"response.created\": {\n\t\t\t\t\t\tconst response = asRecord(event.response);\n\t\t\t\t\t\tconst id = asString(response?.id);\n\t\t\t\t\t\tconst modelId = asString(response?.model);\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\ttype: \"response-metadata\",\n\t\t\t\t\t\t\t...(id !== undefined && { id }),\n\t\t\t\t\t\t\t...(modelId !== undefined && { modelId }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.output_item.added\": {\n\t\t\t\t\t\tconst item = asRecord(event.item);\n\t\t\t\t\t\tif (item) handleOutputItemAdded(item, controller);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.output_text.delta\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst delta = asString(event.delta);\n\t\t\t\t\t\tif (itemId && delta) controller.enqueue({ type: \"text-delta\", id: itemId, delta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.reasoning_text.delta\":\n\t\t\t\t\tcase \"response.reasoning_summary_text.delta\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst delta = asString(event.delta);\n\t\t\t\t\t\tif (itemId && delta) controller.enqueue({ type: \"reasoning-delta\", id: itemId, delta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.function_call_arguments.delta\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst delta = asString(event.delta);\n\t\t\t\t\t\tconst toolCallId = itemId ? toolCallIdsByItemId.get(itemId) : undefined;\n\t\t\t\t\t\tif (toolCallId && delta) controller.enqueue({ type: \"tool-input-delta\", id: toolCallId, delta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.custom_tool_call_input.delta\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst delta = asString(event.delta);\n\t\t\t\t\t\tconst state = itemId ? customToolInputsByItemId.get(itemId) : undefined;\n\t\t\t\t\t\tif (!state || delta === undefined) break;\n\t\t\t\t\t\tconst jsonDelta = appendOpenAICodexGrammarInputJsonDelta(\n\t\t\t\t\t\t\tstate.buffer,\n\t\t\t\t\t\t\tstate.inputProperty,\n\t\t\t\t\t\t\tstate.buffer.input + delta,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (jsonDelta)\n\t\t\t\t\t\t\tcontroller.enqueue({ type: \"tool-input-delta\", id: state.toolCallId, delta: jsonDelta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.custom_tool_call_input.done\": {\n\t\t\t\t\t\tconst itemId = asString(event.item_id);\n\t\t\t\t\t\tconst input = asString(event.input);\n\t\t\t\t\t\tconst state = itemId ? customToolInputsByItemId.get(itemId) : undefined;\n\t\t\t\t\t\tif (!state || input === undefined) break;\n\t\t\t\t\t\tconst jsonDelta = appendOpenAICodexGrammarInputJsonDelta(\n\t\t\t\t\t\t\tstate.buffer,\n\t\t\t\t\t\t\tstate.inputProperty,\n\t\t\t\t\t\t\tinput,\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (jsonDelta)\n\t\t\t\t\t\t\tcontroller.enqueue({ type: \"tool-input-delta\", id: state.toolCallId, delta: jsonDelta });\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.output_item.done\": {\n\t\t\t\t\t\tconst item = asRecord(event.item);\n\t\t\t\t\t\tif (item) handleOutputItemDone(item, controller);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.completed\":\n\t\t\t\t\tcase \"response.done\":\n\t\t\t\t\tcase \"response.incomplete\": {\n\t\t\t\t\t\tconst response = asRecord(event.response);\n\t\t\t\t\t\tusage = (response?.usage as OpenAICodexUsage | undefined) ?? usage;\n\t\t\t\t\t\tconst status =\n\t\t\t\t\t\t\tasString(response?.status) ?? (type === \"response.incomplete\" ? \"incomplete\" : \"completed\");\n\t\t\t\t\t\tconst incompleteReason = asString(asRecord(response?.incomplete_details)?.reason);\n\t\t\t\t\t\tfinishReason = mapOpenAICodexFinishReason(status, hasToolCalls, incompleteReason);\n\t\t\t\t\t\tfinish(controller);\n\t\t\t\t\t\tcontroller.terminate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"response.failed\": {\n\t\t\t\t\t\tconst response = asRecord(event.response);\n\t\t\t\t\t\tconst error = asRecord(response?.error);\n\t\t\t\t\t\tfinishReason = { unified: \"error\", raw: \"failed\" };\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: new Error(asString(error?.message) ?? \"OpenAI Codex response failed\"),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tcase \"error\": {\n\t\t\t\t\t\tconst code = asString(event.code);\n\t\t\t\t\t\tconst message = asString(event.message);\n\t\t\t\t\t\tfinishReason = { unified: \"error\", raw: code ?? \"error\" };\n\t\t\t\t\t\tcontroller.enqueue({\n\t\t\t\t\t\t\ttype: \"error\",\n\t\t\t\t\t\t\terror: new Error(\n\t\t\t\t\t\t\t\t`OpenAI Codex error${code ? ` ${code}` : \"\"}: ${message ?? JSON.stringify(event)}`,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\t// Ignore lifecycle events we do not surface (content_part, in_progress, ...).\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tflush(controller) {\n\t\t\t\tfinish(controller);\n\t\t\t},\n\t\t});\n\t}\n}\n","import { LoadAPIKeyError, NoSuchModelError, type LanguageModelV3, type ProviderV3 } from \"@ai-sdk/provider\";\nimport { getOpenAICodexAccountId } from \"../../oauth/openai/codex.ts\";\nimport {\n\tOPENAI_CODEX_DEFAULT_BASE_URL,\n\tOpenAICodexLanguageModel,\n\tclampOpenAICodexPromptCacheKey,\n\ttype OpenAICodexModelId,\n\ttype OpenAICodexCompatibility,\n\ttype OpenAICodexServiceTier,\n} from \"./codex-language-model.ts\";\n\nexport const OPENAI_CODEX_API_KEY_ENV = \"OPENAI_CODEX_API_KEY\";\n\nconst DEFAULT_ORIGINATOR = \"codework\";\n\nexport interface OpenAICodexProvider extends ProviderV3 {\n\t(modelId: OpenAICodexModelId): LanguageModelV3;\n\n\tlanguageModel(modelId: OpenAICodexModelId): LanguageModelV3;\n\n\t/** Alias for `languageModel`; the Codex API only speaks the Responses protocol. */\n\tresponses(modelId: OpenAICodexModelId): LanguageModelV3;\n}\n\nexport interface OpenAICodexProviderSettings {\n\t/**\n\t * Base URL for the Codex backend.\n\t * Defaults to `https://chatgpt.com/backend-api`.\n\t */\n\tbaseURL?: string;\n\n\t/**\n\t * ChatGPT OAuth access token (JWT) used as the API key.\n\t * Defaults to the `OPENAI_CODEX_API_KEY` environment variable.\n\t * A function can be passed to resolve a fresh token per request.\n\t */\n\tapiKey?: string | (() => string | PromiseLike<string>);\n\n\t/**\n\t * ChatGPT account id sent as the `chatgpt-account-id` header.\n\t * Extracted from the JWT access token when omitted.\n\t */\n\taccountId?: string;\n\n\t/** Custom headers merged into every request. */\n\theaders?: Record<string, string>;\n\n\t/** Custom fetch implementation. */\n\tfetch?: typeof globalThis.fetch;\n\n\t/** Session id used for the `session-id` header and the default prompt cache key. */\n\tsessionId?: string;\n\n\t/** Default service tier for requests. */\n\tserviceTier?: OpenAICodexServiceTier;\n\n\t/** `originator` header value; defaults to `codework`. */\n\toriginator?: string;\n\n\t/** Optional model capability overrides. Known Codex models use built-in defaults. */\n\tcompat?: OpenAICodexCompatibility;\n}\n\nasync function resolveApiKey(settings: OpenAICodexProviderSettings): Promise<string> {\n\tconst apiKey =\n\t\ttypeof settings.apiKey === \"function\"\n\t\t\t? await settings.apiKey()\n\t\t\t: (settings.apiKey ?? (typeof process === \"undefined\" ? undefined : process.env[OPENAI_CODEX_API_KEY_ENV]));\n\n\tif (!apiKey) {\n\t\tthrow new LoadAPIKeyError({\n\t\t\tmessage: `OpenAI Codex API key is missing. Pass it using the 'apiKey' option or the ${OPENAI_CODEX_API_KEY_ENV} environment variable.`,\n\t\t});\n\t}\n\n\treturn apiKey;\n}\n\nfunction resolveAccountId(settings: OpenAICodexProviderSettings, apiKey: string): string {\n\tconst accountId = settings.accountId ?? getOpenAICodexAccountId(apiKey);\n\tif (!accountId) {\n\t\tthrow new LoadAPIKeyError({\n\t\t\tmessage:\n\t\t\t\t\"Failed to extract the ChatGPT account id from the OpenAI Codex access token. \" +\n\t\t\t\t\"Provide it using the 'accountId' option or pass a valid ChatGPT OAuth JWT as the API key.\",\n\t\t});\n\t}\n\treturn accountId;\n}\n\nexport function createOpenAICodex(options: OpenAICodexProviderSettings = {}): OpenAICodexProvider {\n\tconst baseURL = options.baseURL?.replace(/\\/+$/, \"\") || OPENAI_CODEX_DEFAULT_BASE_URL;\n\tconst sessionId = clampOpenAICodexPromptCacheKey(options.sessionId);\n\n\tconst getHeaders = async (): Promise<Record<string, string | undefined>> => {\n\t\tconst apiKey = await resolveApiKey(options);\n\t\tconst accountId = resolveAccountId(options, apiKey);\n\n\t\treturn {\n\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\"chatgpt-account-id\": accountId,\n\t\t\t\"OpenAI-Beta\": \"responses=experimental\",\n\t\t\toriginator: options.originator ?? DEFAULT_ORIGINATOR,\n\t\t\taccept: \"text/event-stream\",\n\t\t\t\"content-type\": \"application/json\",\n\t\t\t...(sessionId ? { \"session-id\": sessionId, \"x-client-request-id\": sessionId } : {}),\n\t\t\t...options.headers,\n\t\t};\n\t};\n\n\tconst createLanguageModel = (modelId: OpenAICodexModelId) =>\n\t\tnew OpenAICodexLanguageModel(modelId, {\n\t\t\tprovider: \"openai-codex\",\n\t\t\tbaseURL,\n\t\t\theaders: getHeaders,\n\t\t\t...(options.fetch !== undefined && { fetch: options.fetch }),\n\t\t\t...(sessionId !== undefined && { sessionId }),\n\t\t\t...(options.serviceTier !== undefined && { serviceTier: options.serviceTier }),\n\t\t\t...(options.compat !== undefined && { compat: options.compat }),\n\t\t});\n\n\tconst provider = function (modelId: OpenAICodexModelId) {\n\t\tif (new.target) {\n\t\t\tthrow new Error(\"The OpenAI Codex model function cannot be called with the new keyword.\");\n\t\t}\n\t\treturn createLanguageModel(modelId);\n\t};\n\n\tprovider.specificationVersion = \"v3\" as const;\n\tprovider.languageModel = createLanguageModel;\n\tprovider.responses = createLanguageModel;\n\n\tprovider.embeddingModel = (modelId: string) => {\n\t\tthrow new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n\t};\n\tprovider.textEmbeddingModel = (modelId: string) => {\n\t\tthrow new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n\t};\n\tprovider.imageModel = (modelId: string) => {\n\t\tthrow new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n\t};\n\n\treturn provider as OpenAICodexProvider;\n}\n\n/**\n * Default provider instance using `OPENAI_CODEX_API_KEY`.\n */\nexport const openaiCodex = createOpenAICodex();\n"],"mappings":";;;AAuCA,SAAgB,uCACf,QACA,eACA,WACA,OACqB;CACrB,IAAI,OAAO,QAAQ;EAClB,IAAI,SAAS,cAAc,OAAO,OAAO,OAAO,KAAA;EAChD,MAAM,IAAI,MAAM,oCAAoC,cAAc,8BAA8B;CACjG;CACA,IAAI,CAAC,UAAU,WAAW,OAAO,KAAK,GACrC,MAAM,IAAI,MAAM,oCAAoC,cAAc,4BAA4B;CAG/F,MAAM,aAAa,UAAU,MAAM,OAAO,MAAM,MAAM;CACtD,IAAI,CAAC,SAAS,WAAW,WAAW,GAAG,OAAO,KAAA;CAE9C,IAAI,QAAQ;CACZ,IAAI,CAAC,OAAO,SAAS;EACpB,SAAS,IAAI,KAAK,UAAU,aAAa,EAAE;EAC3C,OAAO,UAAU;CAClB;CACA,SAAS,KAAK,UAAU,UAAU,CAAC,CAAC,MAAM,GAAG,EAAE;CAC/C,OAAO,QAAQ;CAEf,IAAI,OAAO;EACV,SAAS;EACT,OAAO,SAAS;CACjB;CACA,OAAO;AACR;AAQA,SAAS,0BAA0B,YAA6B;CAC/D,MAAM,SAAS;CACf,IAAI,OAAO,SAAS,UAAU,MAAM,IAAI,MAAM,kEAAkE;CAChH,IAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,KAAK,OAAO,SAAS,WAAW,KAAK,OAAO,OAAO,SAAS,OAAO,UACpG,MAAM,IAAI,MAAM,4EAA4E;CAE7F,MAAM,gBAAgB,OAAO,SAAS;CACtC,IAAI,CAAC,OAAO,aAAa,gBACxB,MAAM,IAAI,MAAM,gEAAgE,eAAe;CAEhG,IAAI,OAAO,WAAW,cAAc,EAAE,SAAS,UAC9C,MAAM,IAAI,MAAM,yCAAyC,cAAc,uBAAuB;CAE/F,OAAO;AACR;AAEA,SAAgB,iCACf,MACA,QACmF;CACnF,MAAM,SAAS,KAAK;CACpB,IAAI,CAAC,QAAQ,OAAO,KAAA;CACpB,IAAI,OAAO,SAAS,eAAe;EAClC,IAAI,QAAQ,sBAAsB,MAAM,OAAO;GAAE,MAAM;GAAe,QAAQ;EAAK;EACnF,IAAI,OAAO,WAAW,WACrB,MAAM,IAAI,MACT,SAAS,KAAK,KAAK,+EACpB;EAED;CACD;CACA,IAAI,EAAE,QAAQ,8BAA8B,QAAQ,OAAO,KAAA;CAE3D,MAAM,OAAO,OAAO,SAAS;CAC7B,MAAM,QAAQ,OAAO,SAAS;CAC9B,MAAM,UAAU,OAAO,SAAS,YAAY,KAAK,KAAK,CAAC,CAAC,SAAS;CACjE,MAAM,WAAW,OAAO,UAAU,YAAY,MAAM,KAAK,CAAC,CAAC,SAAS;CACpE,IAAI,CAAC,WAAW,CAAC,UAChB,MAAM,IAAI,MACT,SAAS,KAAK,KAAK,sFACpB;CAED,IAAI;EACH,OAAO;GACN,MAAM;GACN,QAAQ,UAAU,SAAS;GAC3B,YAAY,UAAU,OAAQ;GAC9B,eAAe,0BAA0B,KAAK,UAAU;EACzD;CACD,SAAS,OAAO;EACf,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;EACrE,MAAM,IAAI,MAAM,SAAS,KAAK,KAAK,6CAA6C,QAAQ,EAAE;CAC3F;AACD;AAEA,MAAa,mBAAmB,EAC/B,OAAoC,MAKN;CAC7B,OAAO;EACN,MAAM,KAAK;EACX,aAAa,KAAK;EAClB,YAAY,KAAK;EACjB,qBAAqB;GACpB,MAAM;GACN,UACC,KAAK,OAAO,WAAW,SACpB,EAAE,aAAa,KAAK,OAAO,WAAW,IACtC,EAAE,cAAc,KAAK,OAAO,WAAW;EAC5C;CACD;AACD,EACD;AAKA,MAAM,wCAAwB,IAAI,IAAI;CACrC;CACA;CACA;CACA;CACA;CACA;AACD,CAAC;AACD,MAAM,6CAA6B,IAAI,IAAI;CAAC;CAAgB;CAAe;AAAe,CAAC;AAE3F,SAAgB,oCACf,SACA,QAC2C;CAE3C,IADgC,QAAQ,2BAA2B,2BAA2B,IAAI,OAAO,GAC5E,OAAO;CAGpC,OAD2B,QAAQ,sBAAsB,sBAAsB,IAAI,OAAO,IAC9D,gBAAgB,KAAA;AAC7C;AAEA,SAAgB,wBAAwB,EACvC,OACA,YACA,qBAWC;CACD,MAAM,WAA8B,CAAC;CACrC,MAAM,qCAAqB,IAAI,IAA6B;CAC5D,MAAM,6CAA6B,IAAI,IAAoB;CAE3D,IAAI,CAAC,SAAS,MAAM,WAAW,GAC9B,OAAO;EACN,YAAY,KAAA;EACZ;EACA;EACA,iBAAiB,KAAA;EACjB;CACD;CAGD,MAAM,aAAgC,CAAC;CACvC,KAAK,MAAM,QAAQ,OAAO;EACzB,IAAI,KAAK,SAAS,YAAY;GAC7B,SAAS,KAAK;IACb,MAAM;IACN,SAAS,aAAa,KAAK;IAC3B,SAAS,uDAAuD,KAAK,KAAK;GAC3E,CAAC;GACD;EACD;EAEA,MAAM,WADW,KAAK,kBAAkB,gBAAA,EACd;EAC1B,MAAM,YACL,SAAS,SAAS,YACf;GACA,MAAM;GACN,MAAM,KAAK;GACX,GAAI,KAAK,gBAAgB,KAAA,KAAa,EAAE,aAAa,KAAK,YAAY;GACtE,QAAQ;IACP,MAAM;IACN,QAAQ,QAAQ;IAChB,YAAY,QAAQ;GACrB;EACD,IACC;GACA,MAAM;GACN,MAAM,KAAK;GACX,GAAI,KAAK,gBAAgB,KAAA,KAAa,EAAE,aAAa,KAAK,YAAY;GACtE,YAAY,KAAK;GACjB,QAAQ,KAAK,UAAU;EACxB;EACH,IAAI,SAAS,SAAS,WAAW,2BAA2B,IAAI,KAAK,MAAM,QAAQ,aAAa;EAChG,IAAI,mBAAmB,IAAI,KAAK,IAAI,GAAG,mBAAmB,IAAI,KAAK,MAAM,SAAS;OAC7E,WAAW,KAAK,SAAS;CAC/B;CAEA,IAAI;CACJ,QAAQ,YAAY,MAApB;EACC,KAAK,KAAA,GACJ;EACD,KAAK;EACL,KAAK;EACL,KAAK;GACJ,kBAAkB,WAAW;GAC7B;EACD,KAAK;GACJ,SAAS,KAAK;IACb,MAAM;IACN,SAAS;IACT,SAAS;GACV,CAAC;GACD,kBAAkB;CAEpB;CAEA,OAAO;EACN,YAAY,WAAW,SAAS,IAAI,aAAa,KAAA;EACjD;EACA;EACA;EACA;CACD;AACD;;;;AC5QA,SAAgB,UAAU,OAAuB;CAChD,IAAI,OAAO;CACX,IAAI,MAAM;CACV,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;EAClD,MAAM,YAAY,MAAM,WAAW,KAAK;EACxC,OAAO,KAAK,KAAK,OAAO,WAAW,UAAU;EAC7C,MAAM,KAAK,KAAK,MAAM,WAAW,UAAU;CAC5C;CACA,OAAO,KAAK,KAAK,OAAQ,SAAS,IAAK,UAAU,IAAI,KAAK,KAAK,MAAO,QAAQ,IAAK,UAAU;CAC7F,MAAM,KAAK,KAAK,MAAO,QAAQ,IAAK,UAAU,IAAI,KAAK,KAAK,OAAQ,SAAS,IAAK,UAAU;CAC5F,QAAQ,QAAQ,EAAA,CAAG,SAAS,EAAE,KAAK,SAAS,EAAA,CAAG,SAAS,EAAE;AAC3D;;;ACAA,SAAS,yBAAyB,MAAuB;CACxD,OAAO,+IAA+I,KACrJ,IACD;AACD;;;;;AAMA,SAAgB,wBAAwB,QAAgB,MAAc,YAA6B;CAClG,IAAI,UAAU,QAAQ,cAAc;CAEpC,IAAI;EAEH,MAAM,QADS,KAAK,MAAM,IACP,CAAC,EAAE;EACtB,IAAI,OAAO;GACV,MAAM,OAAO,MAAM,QAAQ,MAAM,QAAQ;GACzC,IAAI,8DAA8D,KAAK,IAAI,KAAK,WAAW,KAAK;IAC/F,MAAM,OAAO,MAAM,YAAY,KAAK,MAAM,UAAU,YAAY,EAAE,UAAU;IAC5E,MAAM,UAAU,MAAM,YACnB,KAAK,IAAI,GAAG,KAAK,OAAO,MAAM,YAAY,MAAO,KAAK,IAAI,KAAK,GAAK,CAAC,IACrE,KAAA;IAEH,OAAO,wCAAwC,KAAK,GADvC,YAAY,KAAA,IAAY,KAAK,kBAAkB,QAAQ,SACN,KAAK;GACpE;GACA,UAAU,MAAM,WAAW;EAC5B;CACD,QAAQ,CAER;CAEA,OAAO;AACR;AAEA,eAAsB,8BAA8B,MAI1B;CACzB,MAAM,EAAE,UAAU,KAAK,sBAAsB;CAC7C,MAAM,eAAe,MAAM,SAAS,KAAK,CAAC,CAAC,YAAY,EAAE;CACzD,MAAM,kBAA0C,CAAC;CACjD,SAAS,QAAQ,SAAS,OAAO,QAAQ;EACxC,gBAAgB,OAAO;CACxB,CAAC;CAED,OAAO,IAAI,aAAa;EACvB,SAAS,wBAAwB,SAAS,QAAQ,cAAc,SAAS,UAAU;EACnF;EACA;EACA,YAAY,SAAS;EACrB;EACA;EACA,aACC,SAAS,WAAW,OACpB,SAAS,WAAW,OACnB,SAAS,WAAW,OAAO,CAAC,yBAAyB,YAAY,KAClE,SAAS,UAAU;CACrB,CAAC;AACF;;;ACcA,MAAM,uBAAuB;AAY7B,SAAgB,gBAAgB,YAAwD;CACvF,MAAM,YAAY,WAAW,QAAQ,GAAG;CACxC,IAAI,cAAc,IAAI,OAAO;EAAE,QAAQ;EAAY,QAAQ;CAAW;CACtE,OAAO;EAAE,QAAQ,WAAW,MAAM,GAAG,SAAS;EAAG,QAAQ,WAAW,MAAM,YAAY,CAAC;CAAE;AAC1F;AAEA,SAAgB,eAAe,QAAgB,QAAwB;CACtE,OAAO,GAAG,OAAO,GAAG;AACrB;AAEA,SAAS,mBAAmB,OAA2B;CACtD,IAAI,SAAS;CACb,KAAK,MAAM,QAAQ,OAClB,UAAU,OAAO,aAAa,IAAI;CAEnC,OAAO,KAAK,MAAM;AACnB;AAEA,SAAS,qBAAqB,MAA6E;CAC1G,MAAM,OAAO,KAAK;CAClB,IAAI,gBAAgB,KAAK,OAAO,KAAK,SAAS;CAC9C,IAAI,OAAO,SAAS,UAAU;EAC7B,IAAI,KAAK,WAAW,OAAO,KAAK,KAAK,WAAW,SAAS,KAAK,KAAK,WAAW,UAAU,GAAG,OAAO;EAClG,OAAO,QAAQ,KAAK,UAAU,UAAU;CACzC;CACA,IAAI,gBAAgB,YACnB,OAAO,QAAQ,KAAK,UAAU,UAAU,mBAAmB,IAAI;CAEhE,IAAI,UAAU,MAAM;EACnB,IAAI,KAAK,SAAS,OAAO,OAAO,KAAK,IAAI,SAAS;EAClD,IAAI,KAAK,SAAS,QACjB,OAAO,OAAO,KAAK,SAAS,WACzB,QAAQ,KAAK,UAAU,UAAU,KAAK,SACtC,QAAQ,KAAK,UAAU,UAAU,mBAAmB,KAAK,IAAI;CAElE;AAED;AAEA,SAAS,iBACR,QACA,gBAC4E;CAC5E,QAAQ,OAAO,MAAf;EACC,KAAK;EACL,KAAK,cACJ,OAAO,OAAO,SAAS;EACxB,KAAK;EACL,KAAK,cACJ,OAAO,KAAK,UAAU,OAAO,KAAK;EACnC,KAAK,oBACJ,OAAO,OAAO,UAAU;EACzB,KAAK,WAAW;GACf,MAAM,OAAO,OAAO,MAClB,QAAQ,SAAyD,KAAK,SAAS,MAAM,CAAC,CACtF,KAAK,SAAS,KAAK,IAAI,CAAC,CACxB,KAAK,IAAI;GACX,MAAM,SAA4E,CAAC;GACnF,IAAI,gBACE;SAAA,MAAM,QAAQ,OAAO,OACzB,IAAI,KAAK,SAAS,eAAe,KAAK,UAAU,WAAW,QAAQ,GAClE,OAAO,KAAK;KACX,MAAM;KACN,WAAW,QAAQ,KAAK,UAAU,UAAU,KAAK;KACjD,QAAQ;IACT,CAAC;SACK,IAAI,KAAK,SAAS,YACxB,OAAO,KAAK;KAAE,MAAM;KAAe,WAAW,KAAK;KAAK,QAAQ;IAAO,CAAC;SAClE,IAAI,KAAK,SAAS,UAAU,KAAK,UAAU,WAAW,QAAQ,GAAG;KACvE,MAAM,OAAO,KAAK;KAClB,IAAI,KAAK,SAAS,OACjB,OAAO,KAAK;MAAE,MAAM;MAAe,WAAW,KAAK,IAAI,SAAS;MAAG,QAAQ;KAAO,CAAC;UAC7E,IAAI,KAAK,SAAS,QAAQ;MAChC,MAAM,UAAU,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO,mBAAmB,KAAK,IAAI;MACxF,OAAO,KAAK;OACX,MAAM;OACN,WAAW,QAAQ,KAAK,UAAU,UAAU;OAC5C,QAAQ;MACT,CAAC;KACF;IACD;;GAGF,IAAI,OAAO,WAAW,GACrB,OAAO,SAAS,OAAO,MAAM,SAAS,IAAI,yBAAyB;GACpE,OAAO,CAAC,GAAI,OAAO,CAAC;IAAE,MAAM;IAAuB;GAAK,CAAC,IAAI,CAAC,GAAI,GAAG,MAAM;EAC5E;EACA,SACC,OAAO,KAAK,UAAU,MAAM;CAC9B;AACD;AAEA,SAAS,gBAAgB,OAAgB,UAAkB,eAA+B;CACzF,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,QAAQ,KAAK,GACrE,MAAM,IAAI,MAAM,gBAAgB,SAAS,gDAAgD,cAAc,GAAG;CAE3G,MAAM,QAAS,MAAkC;CACjD,IAAI,OAAO,UAAU,UACpB,MAAM,IAAI,MAAM,gBAAgB,SAAS,oCAAoC,cAAc,GAAG;CAE/F,OAAO;AACR;AAEA,SAAS,iBACR,QACA,gBACS;CACT,MAAM,QAAQ,iBAAiB,QAAQ,cAAc;CACrD,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,KAAK;AAChE;AAEA,SAAS,sBACR,iBACsC;CACtC,MAAM,QAAQ,kBAAkB;CAChC,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IACtE,QACD,KAAA;AACJ;AAEA,SAAS,eAAe,iBAAgE;CACvF,MAAM,QAAQ,sBAAsB,eAAe,CAAC,EAAE;CACtD,OAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,SAAyB,OAAO,SAAS,QAAQ,IAAI,CAAC;AACnG;AAEA,SAAS,cACR,iBACmE;CACnE,MAAM,QAAQ,sBAAsB,eAAe,CAAC,EAAE;CACtD,IAAI,OAAO,UAAU,UAAU,OAAO,KAAA;CACtC,IAAI;EACH,MAAM,SAAS,KAAK,MAAM,KAAK;EAC/B,IAAI,OAAO,WAAW,YAAY,WAAW,QAAQ,MAAM,QAAQ,MAAM,GAAG,OAAO,KAAA;EACnF,MAAM,OAAO;EACb,OAAO,KAAK,SAAS,eAAe,OAAO,KAAK,OAAO,WACnD,OACD,KAAA;CACJ,QAAQ;EACP;CACD;AACD;;AAGA,SAAgB,oCACf,QACc;CACd,MAAM,gCAAgB,IAAI,IAAY;CACtC,MAAM,4BAAY,IAAI,IAAY;CAElC,KAAK,MAAM,WAAW,QAAQ;EAC7B,IAAI,QAAQ,SAAS,aAAa;GACjC,KAAK,MAAM,QAAQ,QAAQ,SAAS;IACnC,IAAI,KAAK,SAAS,aAAa,UAAU,IAAI,KAAK,QAAQ;IAC1D,IAAI,KAAK,SAAS,eACZ;UAAA,MAAM,QAAQ,eAAe,KAAK,eAAe,GACrD,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,cAAc,IAAI,IAAI;IAAA;GAGnD;GACA;EACD;EACA,IAAI,QAAQ,SAAS,QAAQ;EAC7B,KAAK,MAAM,QAAQ,QAAQ,SAAS;GACnC,IAAI,KAAK,SAAS,eAAe;GACjC,KAAK,MAAM,QAAQ,eAAe,KAAK,eAAe,GACrD,IAAI,CAAC,UAAU,IAAI,IAAI,GAAG,cAAc,IAAI,IAAI;EAElD;CACD;CAEA,OAAO;AACR;AAEA,SAAS,mBAAmB,YAAoB,OAAkC;CACjF,OAAO,mBAAmB,UAAU,GAAG,WAAW,GAAG,MAAM,KAAK,GAAG,GAAG;AACvE;;;;;AAMA,SAAgB,2BACf,QACA,SACoB;CACpB,IAAI;CACJ,MAAM,QAAgC,CAAC;CACvC,IAAI,0BAA0B;CAC9B,MAAM,kCAAkB,IAAI,IAAY;CAExC,MAAM,uBAAuB,YAAoB,UAAmC;EACnF,MAAM,QAA2B,CAAC;EAClC,KAAK,MAAM,QAAQ,OAAO;GACzB,MAAM,OAAO,SAAS,eAAe,IAAI,IAAI;GAC7C,IAAI,CAAC,QAAQ,gBAAgB,IAAI,IAAI,GAAG;GACxC,gBAAgB,IAAI,IAAI;GACxB,MAAM,KAAK,IAAI;EAChB;EACA,IAAI,MAAM,WAAW,GAAG;EAExB,IAAI,SAAS,sBAAsB,oBAAoB;GACtD,MAAM,KAAK;IAAE,MAAM;IAAoB,MAAM;IAAa;GAAM,CAAC;GACjE;EACD;EACA,IAAI,SAAS,sBAAsB,eAAe;GACjD,MAAM,SAAS,mBACd,YACA,MAAM,KAAK,SAAS,KAAK,IAAI,CAC9B;GACA,MAAM,KAAK;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,QAAQ;IACR,WAAW;KAAE,OAAO,MAAM,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG;KAAG,OAAO,MAAM;IAAO;GACnF,CAAC;GACD,MAAM,KAAK;IACV,MAAM;IACN,SAAS;IACT,WAAW;IACX,QAAQ;IACR,OAAO,MAAM,KAAK,UAAU;KAAE,GAAG;KAAM,eAAe;IAAK,EAAE;GAC9D,CAAC;EACF;CACD;CAEA,KAAK,MAAM,WAAW,QACrB,QAAQ,QAAQ,MAAhB;EACC,KAAK;GACJ,eAAe,gBAAgB,OAAO,QAAQ,UAAU,GAAG,aAAa,MAAM,QAAQ;GACtF;EAGD,KAAK,QAAQ;GACZ,MAAM,UAAsE,CAAC;GAC7E,KAAK,MAAM,QAAQ,QAAQ,SAC1B,IAAI,KAAK,SAAS,QACjB,QAAQ,KAAK;IAAE,MAAM;IAAc,MAAM,KAAK;GAAK,CAAC;QAC9C,IAAI,KAAK,SAAS,UAAU,KAAK,UAAU,WAAW,QAAQ,GAAG;IACvE,MAAM,WAAW,qBAAqB,IAAI;IAC1C,IAAI,UAAU,QAAQ,KAAK;KAAE,MAAM;KAAe,WAAW;KAAU,QAAQ;IAAO,CAAC;GACxF;GAED,IAAI,QAAQ,SAAS,GACpB,MAAM,KAAK;IAAE,MAAM;IAAQ;GAAQ,CAAC;GAErC;EACD;EAEA,KAAK;GACJ,KAAK,MAAM,QAAQ,QAAQ,SAC1B,IAAI,KAAK,SAAS,aAAa;IAC9B,MAAM,OAAO,cAAc,KAAK,eAAe;IAC/C,IAAI,MAAM,MAAM,KAAK,IAAI;GAC1B,OAAO,IAAI,KAAK,SAAS,QAAQ;IAChC;IACA,MAAM,YAAY,sBAAsB,KAAK,eAAe,CAAC,EAAE;IAC/D,MAAM,KAAK;KACV,MAAM;KACN,MAAM;KACN,IACC,OAAO,cAAc,YAAY,UAAU,UAAU,KAClD,YACA,aAAa;KACjB,SAAS,CAAC;MAAE,MAAM;MAAe,MAAM,KAAK;MAAM,aAAa,CAAC;KAAE,CAAC;KACnE,QAAQ;IACT,CAAC;GACF,OAAO,IAAI,KAAK,SAAS,aAAa;IACrC,MAAM,EAAE,QAAQ,WAAW,gBAAgB,KAAK,UAAU;IAC1D,MAAM,WAAW,sBAAsB,KAAK,eAAe;IAC3D,MAAM,YAAY,UAAU;IAC5B,MAAM,gBAAgB,SAAS,4BAA4B,IAAI,KAAK,QAAQ;IAC5E,IAAI,eACH,MAAM,KAAK;KACV,MAAM;KACN,GAAI,UAAU,eAAe,QAAQ,CAAC,OAAO,WAAW,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,OAAO;KACpF,SAAS;KACT,MAAM,KAAK;KACX,OAAO,gBAAgB,KAAK,OAAO,KAAK,UAAU,aAAa;KAC/D,GAAI,OAAO,cAAc,WAAW,EAAE,UAAU,IAAI,CAAC;IACtD,CAAC;SAED,MAAM,KAAK;KACV,MAAM;KACN,GAAI,UAAU,eAAe,QAAQ,CAAC,OAAO,WAAW,KAAK,IAAI,CAAC,IAAI,EAAE,IAAI,OAAO;KACnF,SAAS;KACT,MAAM,KAAK;KACX,WAAW,OAAO,KAAK,UAAU,WAAW,KAAK,QAAQ,KAAK,UAAU,KAAK,SAAS,CAAC,CAAC;KACxF,GAAI,OAAO,cAAc,WAAW,EAAE,UAAU,IAAI,CAAC;IACtD,CAAC;GAEH;GAED;EAGD,KAAK,QACJ,KAAK,MAAM,QAAQ,QAAQ,SAAS;GACnC,IAAI,KAAK,SAAS,eAAe;GACjC,MAAM,EAAE,WAAW,gBAAgB,KAAK,UAAU;GAClD,IAAI,SAAS,4BAA4B,IAAI,KAAK,QAAQ,GACzD,MAAM,KAAK;IACV,MAAM;IACN,SAAS;IACT,QAAQ,iBAAiB,KAAK,QAAQ,SAAS,kBAAkB,IAAI;GACtE,CAAC;QAED,MAAM,KAAK;IACV,MAAM;IACN,SAAS;IACT,QAAQ,iBAAiB,KAAK,QAAQ,SAAS,kBAAkB,IAAI;GACtE,CAAC;GAEF,oBAAoB,KAAK,YAAY,eAAe,KAAK,eAAe,CAAC;EAC1E;CAGF;CAGD,OAAO;EAAE,cAAc,gBAAgB;EAAsB;CAAM;AACpE;;;;;;;AC/ZA,SAAgB,0BAA0B,MAA2E;CACpH,MAAM,UAAU,IAAI,YAAY;CAChC,IAAI,SAAS;CAEb,MAAM,cAAc,OAAe,eAA0E;EAC5G,MAAM,YAAY,MAChB,MAAM,IAAI,CAAC,CACX,QAAQ,SAAS,KAAK,WAAW,OAAO,CAAC,CAAC,CAC1C,KAAK,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;EACpC,IAAI,UAAU,WAAW,GAAG;EAE5B,MAAM,OAAO,UAAU,KAAK,IAAI,CAAC,CAAC,KAAK;EACvC,IAAI,CAAC,QAAQ,SAAS,UAAU;EAEhC,IAAI;GACH,WAAW,QAAQ,KAAK,MAAM,IAAI,CAA4B;EAC/D,SAAS,OAAO;GACf,WAAW,MAAM,IAAI,MAAM,kCAAkC,KAAK,MAAM,GAAG,GAAG,KAAK,EAAE,MAAM,CAAC,CAAC;EAC9F;CACD;CAEA,OAAO,KAAK,YACX,IAAI,gBAAqD;EACxD,UAAU,OAAO,YAAY;GAC5B,UAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;GAEhD,IAAI,QAAQ,OAAO,QAAQ,MAAM;GACjC,OAAO,UAAU,IAAI;IACpB,MAAM,QAAQ,OAAO,MAAM,GAAG,KAAK;IACnC,SAAS,OAAO,MAAM,QAAQ,CAAC;IAC/B,WAAW,OAAO,UAAU;IAC5B,QAAQ,OAAO,QAAQ,MAAM;GAC9B;EACD;EACA,MAAM,YAAY;GACjB,UAAU,QAAQ,OAAO;GACzB,IAAI,OAAO,KAAK,GAAG,WAAW,QAAQ,UAAU;EACjD;CACD,CAAC,CACF;AACD;;;AClCA,SAAgB,wBAAwB,OAA2D;CAClG,MAAM,aAAa,OAAO;CAC1B,MAAM,eAAe,OAAO,sBAAsB,iBAAiB;CACnE,MAAM,mBAAmB,OAAO,sBAAsB,sBAAsB;CAC5E,MAAM,cAAc,OAAO;CAC3B,MAAM,kBAAkB,OAAO,uBAAuB,oBAAoB;CAE1E,OAAO;EACN,aAAa;GACZ,OAAO;GACP,SAAS,eAAe,KAAA,IAAY,KAAA,IAAY,KAAK,IAAI,aAAa,eAAe,kBAAkB,CAAC;GACxG,WAAW,eAAe,KAAA,IAAY,KAAA,IAAY;GAClD,YAAY,eAAe,KAAA,IAAY,KAAA,IAAY;EACpD;EACA,cAAc;GACb,OAAO;GACP,MAAM,gBAAgB,KAAA,IAAY,KAAA,IAAY,cAAc;GAC5D,WAAW,gBAAgB,KAAA,IAAY,KAAA,IAAY;EACpD;EACA,GAAI,QAAQ,EAAE,KAAK,MAAoB,IAAI,CAAC;CAC7C;AACD;AAEA,SAAgB,2BACf,QACA,cACA,kBAC8B;CAC9B,QAAQ,QAAR;EACC,KAAK,aACJ,OAAO;GAAE,SAAS,eAAe,eAAe;GAAQ,KAAK;EAAO;EACrE,KAAK,cACJ,OAAO,qBAAqB,sBACzB;GAAE,SAAS;GAAU,KAAK,GAAG,OAAO,GAAG;EAAmB,IAC1D;GAAE,SAAS;GAAS,KAAK,mBAAmB,GAAG,OAAO,GAAG,qBAAqB;EAAO;EACzF,KAAK;EACL,KAAK,aACJ,OAAO;GAAE,SAAS;GAAS,KAAK;EAAO;EACxC,KAAK,KAAA,GACJ,OAAO;GAAE,SAAS;GAAS,KAAK,KAAA;EAAU;EAC3C,SACC,OAAO;GAAE,SAAS;GAAQ,KAAK;EAAO;CACxC;AACD;;;AC9BA,MAAa,gCAAgC;AAE7C,MAAM,iCAAiC;AAMvC,SAAS,2BAA2B,MAAsC;CACzE,IAAI,OAAO,YAAY,eAAe,EAAE,QAAQ,UAAU,QAAQ,QAAQ,UAAU,MAAM,OAAO,KAAA;CACjG,MAAM,OAAQ,QAAqC,mBAAmB,WAAW;CACjF,IAAI,CAAC,QAAQ,OAAO,KAAK,qBAAqB,YAAY,OAAO,KAAA;CACjE,IAAI;EACH,MAAM,aAAa,KAAK,iBAAiB,MAAM,EAC9C,QAAQ,GAAG,KAAK,UAAU,0BAA0B,+BAA+B,EACpF,CAAC;EACD,OAAO,IAAI,WAAW,WAAW,QAAQ,WAAW,YAAY,WAAW,UAAU;CACtF,QAAQ;EACP;CACD;AACD;AAEA,SAAgB,+BAA+B,KAA6C;CAC3F,IAAI,QAAQ,KAAA,GAAW,OAAO,KAAA;CAC9B,MAAM,aAAa,MAAM,KAAK,GAAG;CACjC,OAAO,WAAW,UAAA,KACf,MACA,WAAW,MAAM,GAAA,EAA2C,CAAC,CAAC,KAAK,EAAE;AACzE;;;;;AAwDA,SAAgB,sBAAsB,SAA0B;CAE/D,MAAM,cADM,SAAS,KAAK,IAAI,UAAU,8BAAA,CACjB,QAAQ,QAAQ,EAAE;CACzC,IAAI,WAAW,SAAS,kBAAkB,GAAG,OAAO;CACpD,IAAI,WAAW,SAAS,QAAQ,GAAG,OAAO,GAAG,WAAW;CACxD,OAAO,GAAG,WAAW;AACtB;AAIA,SAAS,SAAS,OAAqD;CACtE,OAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IAAK,QAAuB,KAAA;AACvG;AAEA,SAAS,SAAS,OAAoC;CACrD,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAA;AAC5C;AAEA,SAAS,aAAa,SAAqE;CAC1F,MAAM,SAAiC,CAAC;CACxC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAChD,IAAI,UAAU,KAAA,GAAW,OAAO,OAAO;CAExC,OAAO;AACR;AAEA,IAAa,2BAAb,MAAiE;CAChE,uBAAgC;CAChC;CAEA;CAEA,YAAY,SAA6B,QAAwC;EAChF,KAAK,UAAU;EACf,KAAK,SAAS;CACf;CAEA,IAAI,WAAmB;EACtB,OAAO,KAAK,OAAO;CACpB;CAEA,IAAI,gBAA0C;EAC7C,OAAO,CAAC;CACT;CAEA,QAAgB,SAId;EACD,MAAM,WAA8B,CAAC;EAErC,IAAI,QAAQ,QAAQ,MAAM,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAO,CAAC;EAChF,IAAI,QAAQ,QAAQ,MAAM,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAO,CAAC;EAChF,IAAI,QAAQ,mBAAmB,MAAM,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAkB,CAAC;EACtG,IAAI,QAAQ,oBAAoB,MAAM,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAmB,CAAC;EACxG,IAAI,QAAQ,QAAQ,MAAM,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAO,CAAC;EAChF,IAAI,QAAQ,iBAAiB,MAAM,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAgB,CAAC;EAClG,IAAI,QAAQ,mBAAmB,MAE9B,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAkB,CAAC;EAElE,IAAI,QAAQ,kBAAkB,QAAQ,eAAe,SAAS,QAC7D,SAAS,KAAK;GAAE,MAAM;GAAe,SAAS;EAAiB,CAAC;EAGjE,MAAM,eAAgB,QAAQ,kBAAkB,mBAAmB,CAAC;EACpE,MAAM,oBAAoB,oCAAoC,KAAK,SAAS,KAAK,OAAO,MAAM;EAC9F,MAAM,oBAAoB,oBAAoB,oCAAoC,QAAQ,MAAM,IAAI,KAAA;EACpG,MAAM,QAAQ,wBAAwB;GACrC,OAAO,QAAQ;GACf,YAAY,QAAQ;GACpB,GAAI,sBAAsB,KAAA,KAAa,EAAE,kBAAkB;EAC5D,CAAC;EACD,MAAM,EAAE,cAAc,UAAU,2BAA2B,QAAQ,QAAQ;GAC1E,eAAe,MAAM;GACrB,GAAI,sBAAsB,KAAA,KAAa,EAAE,kBAAkB;GAC3D,4BAA4B,MAAM;GAClC,gBAAgB,KAAK,OAAO,QAAQ,kBAAkB,KAAK,YAAY;EACxE,CAAC;EACD,SAAS,KAAK,GAAG,MAAM,QAAQ;EAE/B,MAAM,OAAgC;GACrC,OAAO,KAAK;GAEZ,OAAO;GACP;GACA;GACA,aAAa,MAAM,mBAAmB;GACtC,qBAAqB;GACrB,SAAS,aAAa,WAAW,CAAC,6BAA6B;GAC/D,MAAM,EAAE,WAAW,aAAa,iBAAiB,MAAM;EACxD;EAEA,IAAI,MAAM,YAAY,KAAK,QAAQ,MAAM;EACzC,IAAI,QAAQ,eAAe,MAAM,KAAK,cAAc,QAAQ;EAE5D,MAAM,iBAAiB,+BAA+B,aAAa,kBAAkB,KAAK,OAAO,SAAS;EAC1G,IAAI,gBAAgB,KAAK,mBAAmB;EAE5C,MAAM,cAAc,aAAa,eAAe,KAAK,OAAO;EAC5D,IAAI,aAAa,KAAK,eAAe;EAErC,IAAI,aAAa,iBAChB,KAAK,YAAY;GAChB,QAAQ,aAAa;GACrB,SAAS,aAAa,oBAAoB;EAC3C;EAGD,OAAO;GAAE;GAAM;GAAU,4BAA4B,MAAM;EAA2B;CACvF;CAEA,MAAM,WAAW,SAA6E;EAC7F,MAAM,EAAE,QAAQ,SAAS,aAAa,MAAM,KAAK,SAAS,OAAO;EAEjE,MAAM,UAAoC,CAAC;EAC3C,MAAM,6BAAa,IAAI,IAA+D;EACtF,MAAM,kCAAkB,IAAI,IAAoE;EAChG,MAAM,WAA8B,CAAC;EACrC,IAAI,eAA4C;GAAE,SAAS;GAAS,KAAK,KAAA;EAAU;EACnF,IAAI,QAA8B,wBAAwB,KAAA,CAAS;EACnE,IAAI;EACJ,IAAI;EAEJ,MAAM,SAAS,OAAO,UAAU;EAChC,OAAO,MAAM;GACZ,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,KAAK;GAC1C,IAAI,MAAM;GAEV,QAAQ,MAAM,MAAd;IACC,KAAK;KACJ,SAAS,KAAK,GAAG,MAAM,QAAQ;KAC/B;IACD,KAAK;KACJ,aAAa,MAAM;KACnB,kBAAkB,MAAM;KACxB;IACD,KAAK,cAAc;KAClB,MAAM,QAAQ;MAAE,MAAM;MAAiB,MAAM;KAAG;KAChD,WAAW,IAAI,MAAM,IAAI,KAAK;KAC9B,QAAQ,KAAK,KAAK;KAClB;IACD;IACA,KAAK,cAAc;KAClB,MAAM,QAAQ,WAAW,IAAI,MAAM,EAAE;KACrC,IAAI,OAAO,MAAM,QAAQ,MAAM;KAC/B;IACD;IACA,KAAK,YAAY;KAChB,MAAM,QAAQ,WAAW,IAAI,MAAM,EAAE;KACrC,IAAI,SAAS,MAAM,qBAAqB,KAAA,GAAW,MAAM,mBAAmB,MAAM;KAClF;IACD;IACA,KAAK,mBAAmB;KACvB,MAAM,QAAQ;MAAE,MAAM;MAAsB,MAAM;KAAG;KACrD,gBAAgB,IAAI,MAAM,IAAI,KAAK;KACnC,QAAQ,KAAK,KAAK;KAClB;IACD;IACA,KAAK,mBAAmB;KACvB,MAAM,QAAQ,gBAAgB,IAAI,MAAM,EAAE;KAC1C,IAAI,OAAO,MAAM,QAAQ,MAAM;KAC/B;IACD;IACA,KAAK,iBAAiB;KACrB,MAAM,QAAQ,gBAAgB,IAAI,MAAM,EAAE;KAC1C,IAAI,SAAS,MAAM,qBAAqB,KAAA,GAAW,MAAM,mBAAmB,MAAM;KAClF;IACD;IACA,KAAK;KACJ,QAAQ,KAAK,KAAK;KAClB;IACD,KAAK;KACJ,eAAe,MAAM;KACrB,QAAQ,MAAM;KACd;IACD,KAAK,SACJ,MAAM,MAAM,iBAAiB,QAAQ,MAAM,QAAQ,IAAI,MAAM,OAAO,MAAM,KAAK,CAAC;GAClF;EACD;EAEA,OAAO;GACN,SAAS,QAAQ,QAAQ,SACxB,KAAK,SAAS,UAAU,KAAK,SAAS,cACnC,KAAK,SAAS,MAAM,KAAK,qBAAqB,KAAA,IAC9C,IACJ;GACA;GACA;GACA,GAAI,YAAY,KAAA,KAAa,EAAE,QAAQ;GACvC,UAAU;IACT,GAAG;IACH,GAAI,eAAe,KAAA,KAAa,EAAE,IAAI,WAAW;IACjD,GAAI,oBAAoB,KAAA,KAAa,EAAE,SAAS,gBAAgB;GACjE;GACA;EACD;CACD;CAEA,MAAM,SAAS,SAA2E;EACzF,MAAM,EAAE,MAAM,UAAU,+BAA+B,KAAK,QAAQ,OAAO;EAC3E,MAAM,OAAO;GAAE,GAAG;GAAM,QAAQ;EAAK;EACrC,MAAM,MAAM,sBAAsB,KAAK,OAAO,OAAO;EAErD,MAAM,UAAU,aAAa;GAC5B,GAAI,MAAM,KAAK,OAAO,QAAQ;GAC9B,GAAG,QAAQ;EACZ,CAAC;EACD,MAAM,WAAW,KAAK,UAAU,IAAI;EACpC,MAAM,iBAAiB,2BAA2B,QAAQ;EAC1D,IAAI,gBAAgB,QAAQ,sBAAsB;EAGlD,MAAM,WAAW,OADC,KAAK,OAAO,SAAS,WAAW,MAAA,CACjB,KAAK;GACrC,QAAQ;GACR;GACA,MAAM,kBAAkB;GACxB,GAAI,QAAQ,gBAAgB,KAAA,KAAa,EAAE,QAAQ,QAAQ,YAAY;EACxE,CAAC;EAED,IAAI,CAAC,SAAS,IACb,MAAM,MAAM,8BAA8B;GAAE;GAAU;GAAK,mBAAmB;EAAK,CAAC;EAErF,IAAI,CAAC,SAAS,MACb,MAAM,IAAI,MAAM,mCAAmC;EAGpD,MAAM,kBAA0C,CAAC;EACjD,SAAS,QAAQ,SAAS,OAAO,QAAQ;GACxC,gBAAgB,OAAO;EACxB,CAAC;EAED,OAAO;GACN,QAAQ,0BAA0B,SAAS,IAAI,CAAC,CAAC,YAChD,KAAK,sBAAsB,UAAU,QAAQ,oBAAoB,OAAO,0BAA0B,CACnG;GACA,SAAS,EAAE,KAAK;GAChB,UAAU,EAAE,SAAS,gBAAgB;EACtC;CACD;CAEA,sBACC,UACA,kBACA,4BACyD;EACzD,IAAI,eAA4C;GAAE,SAAS;GAAS,KAAK,KAAA;EAAU;EACnF,IAAI;EACJ,IAAI,eAAe;EACnB,IAAI,WAAW;EAGf,MAAM,sCAAsB,IAAI,IAAoB;EACpD,MAAM,2CAA2B,IAAI,IAQnC;EACF,MAAM,UAAU,eAAkF;GACjG,IAAI,UAAU;GACd,WAAW;GACX,WAAW,QAAQ;IAClB,MAAM;IACN;IACA,OAAO,wBAAwB,KAAK;GACrC,CAAC;EACF;EAEA,MAAM,yBACL,MACA,eACI;GACJ,MAAM,WAAW,SAAS,KAAK,IAAI;GACnC,MAAM,SAAS,SAAS,KAAK,EAAE;GAC/B,IAAI,CAAC,YAAY,CAAC,QAAQ;GAE1B,IAAI,aAAa,WAChB,WAAW,QAAQ;IAAE,MAAM;IAAc,IAAI;GAAO,CAAC;QAC/C,IAAI,aAAa,aACvB,WAAW,QAAQ;IAAE,MAAM;IAAmB,IAAI;GAAO,CAAC;QACpD,IAAI,aAAa,iBAAiB;IACxC,MAAM,aAAa,eAAe,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM;IAC1E,oBAAoB,IAAI,QAAQ,UAAU;IAC1C,eAAe;IACf,WAAW,QAAQ;KAClB,MAAM;KACN,IAAI;KACJ,UAAU,SAAS,KAAK,IAAI,KAAK;IAClC,CAAC;GACF,OAAO,IAAI,aAAa,oBAAoB;IAC3C,MAAM,WAAW,SAAS,KAAK,IAAI,KAAK;IACxC,MAAM,gBAAgB,2BAA2B,IAAI,QAAQ,KAAK;IAClE,MAAM,aAAa,eAAe,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM;IAC1E,yBAAyB,IAAI,QAAQ;KACpC;KACA;KACA;KACA,QAAQ;MAAE,OAAO;MAAI,SAAS;MAAO,QAAQ;KAAM;IACpD,CAAC;IACD,eAAe;IACf,WAAW,QAAQ;KAAE,MAAM;KAAoB,IAAI;KAAY;IAAS,CAAC;GAC1E;EACD;EAEA,MAAM,wBACL,MACA,eACI;GACJ,MAAM,WAAW,SAAS,KAAK,IAAI;GACnC,MAAM,SAAS,SAAS,KAAK,EAAE;GAC/B,IAAI,CAAC,YAAY,CAAC,QAAQ;GAE1B,IAAI,aAAa,WAChB,WAAW,QAAQ;IAClB,MAAM;IACN,IAAI;IACJ,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,OAAO,EAAE;GAC3D,CAAC;QACK,IAAI,aAAa,aACvB,WAAW,QAAQ;IAClB,MAAM;IACN,IAAI;IACJ,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,KAAK,UAAU,IAAI,EAAE,EAAE;GAC7E,CAAC;QACK,IAAI,aAAa,iBAAiB;IACxC,MAAM,aACL,oBAAoB,IAAI,MAAM,KAAK,eAAe,SAAS,KAAK,OAAO,KAAK,QAAQ,MAAM;IAC3F,eAAe;IACf,WAAW,QAAQ;KAAE,MAAM;KAAkB,IAAI;IAAW,CAAC;IAC7D,WAAW,QAAQ;KAClB,MAAM;KACN;KACA,UAAU,SAAS,KAAK,IAAI,KAAK;KACjC,OAAO,SAAS,KAAK,SAAS,KAAK;KACnC,GAAI,SAAS,KAAK,SAAS,IACxB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,SAAS,KAAK,SAAS,EAAG,EAAE,EAAE,IACjF,CAAC;IACL,CAAC;GACF,OAAO,IAAI,aAAa,oBAAoB;IAC3C,MAAM,QAAQ,yBAAyB,IAAI,MAAM;IACjD,IAAI,CAAC,OAAO;IACZ,MAAM,QAAQ,SAAS,KAAK,KAAK,KAAK,MAAM,OAAO;IACnD,MAAM,QAAQ,uCAAuC,MAAM,QAAQ,MAAM,eAAe,OAAO,IAAI;IACnG,IAAI,OAAO,WAAW,QAAQ;KAAE,MAAM;KAAoB,IAAI,MAAM;KAAY;IAAM,CAAC;IACvF,eAAe;IACf,WAAW,QAAQ;KAAE,MAAM;KAAkB,IAAI,MAAM;IAAW,CAAC;IACnE,WAAW,QAAQ;KAClB,MAAM;KACN,YAAY,MAAM;KAClB,UAAU,MAAM;KAChB,OAAO,KAAK,UAAU,GAAG,MAAM,gBAAgB,MAAM,CAAC;KACtD,GAAI,SAAS,KAAK,SAAS,IACxB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,WAAW,SAAS,KAAK,SAAS,EAAG,EAAE,EAAE,IACjF,CAAC;IACL,CAAC;IACD,yBAAyB,OAAO,MAAM;GACvC;EACD;EAEA,OAAO,IAAI,gBAAuD;GACjE,MAAM,YAAY;IACjB,WAAW,QAAQ;KAAE,MAAM;KAAgB;IAAS,CAAC;GACtD;GAEA,UAAU,OAAO,YAAY;IAC5B,IAAI,kBACH,WAAW,QAAQ;KAAE,MAAM;KAAO,UAAU;IAAM,CAAC;IAGpD,MAAM,OAAO,SAAS,MAAM,IAAI;IAChC,IAAI,CAAC,MAAM;IAEX,QAAQ,MAAR;KACC,KAAK,oBAAoB;MACxB,MAAM,WAAW,SAAS,MAAM,QAAQ;MACxC,MAAM,KAAK,SAAS,UAAU,EAAE;MAChC,MAAM,UAAU,SAAS,UAAU,KAAK;MACxC,WAAW,QAAQ;OAClB,MAAM;OACN,GAAI,OAAO,KAAA,KAAa,EAAE,GAAG;OAC7B,GAAI,YAAY,KAAA,KAAa,EAAE,QAAQ;MACxC,CAAC;MACD;KACD;KAEA,KAAK,8BAA8B;MAClC,MAAM,OAAO,SAAS,MAAM,IAAI;MAChC,IAAI,MAAM,sBAAsB,MAAM,UAAU;MAChD;KACD;KAEA,KAAK,8BAA8B;MAClC,MAAM,SAAS,SAAS,MAAM,OAAO;MACrC,MAAM,QAAQ,SAAS,MAAM,KAAK;MAClC,IAAI,UAAU,OAAO,WAAW,QAAQ;OAAE,MAAM;OAAc,IAAI;OAAQ;MAAM,CAAC;MACjF;KACD;KAEA,KAAK;KACL,KAAK,yCAAyC;MAC7C,MAAM,SAAS,SAAS,MAAM,OAAO;MACrC,MAAM,QAAQ,SAAS,MAAM,KAAK;MAClC,IAAI,UAAU,OAAO,WAAW,QAAQ;OAAE,MAAM;OAAmB,IAAI;OAAQ;MAAM,CAAC;MACtF;KACD;KAEA,KAAK,0CAA0C;MAC9C,MAAM,SAAS,SAAS,MAAM,OAAO;MACrC,MAAM,QAAQ,SAAS,MAAM,KAAK;MAClC,MAAM,aAAa,SAAS,oBAAoB,IAAI,MAAM,IAAI,KAAA;MAC9D,IAAI,cAAc,OAAO,WAAW,QAAQ;OAAE,MAAM;OAAoB,IAAI;OAAY;MAAM,CAAC;MAC/F;KACD;KAEA,KAAK,yCAAyC;MAC7C,MAAM,SAAS,SAAS,MAAM,OAAO;MACrC,MAAM,QAAQ,SAAS,MAAM,KAAK;MAClC,MAAM,QAAQ,SAAS,yBAAyB,IAAI,MAAM,IAAI,KAAA;MAC9D,IAAI,CAAC,SAAS,UAAU,KAAA,GAAW;MACnC,MAAM,YAAY,uCACjB,MAAM,QACN,MAAM,eACN,MAAM,OAAO,QAAQ,OACrB,KACD;MACA,IAAI,WACH,WAAW,QAAQ;OAAE,MAAM;OAAoB,IAAI,MAAM;OAAY,OAAO;MAAU,CAAC;MACxF;KACD;KAEA,KAAK,wCAAwC;MAC5C,MAAM,SAAS,SAAS,MAAM,OAAO;MACrC,MAAM,QAAQ,SAAS,MAAM,KAAK;MAClC,MAAM,QAAQ,SAAS,yBAAyB,IAAI,MAAM,IAAI,KAAA;MAC9D,IAAI,CAAC,SAAS,UAAU,KAAA,GAAW;MACnC,MAAM,YAAY,uCACjB,MAAM,QACN,MAAM,eACN,OACA,IACD;MACA,IAAI,WACH,WAAW,QAAQ;OAAE,MAAM;OAAoB,IAAI,MAAM;OAAY,OAAO;MAAU,CAAC;MACxF;KACD;KAEA,KAAK,6BAA6B;MACjC,MAAM,OAAO,SAAS,MAAM,IAAI;MAChC,IAAI,MAAM,qBAAqB,MAAM,UAAU;MAC/C;KACD;KAEA,KAAK;KACL,KAAK;KACL,KAAK,uBAAuB;MAC3B,MAAM,WAAW,SAAS,MAAM,QAAQ;MACxC,QAAS,UAAU,SAA0C;MAC7D,MAAM,SACL,SAAS,UAAU,MAAM,MAAM,SAAS,wBAAwB,eAAe;MAChF,MAAM,mBAAmB,SAAS,SAAS,UAAU,kBAAkB,CAAC,EAAE,MAAM;MAChF,eAAe,2BAA2B,QAAQ,cAAc,gBAAgB;MAChF,OAAO,UAAU;MACjB,WAAW,UAAU;MACrB;KACD;KAEA,KAAK,mBAAmB;MAEvB,MAAM,QAAQ,SADG,SAAS,MAAM,QACF,CAAC,EAAE,KAAK;MACtC,eAAe;OAAE,SAAS;OAAS,KAAK;MAAS;MACjD,WAAW,QAAQ;OAClB,MAAM;OACN,OAAO,IAAI,MAAM,SAAS,OAAO,OAAO,KAAK,8BAA8B;MAC5E,CAAC;MACD;KACD;KAEA,KAAK,SAAS;MACb,MAAM,OAAO,SAAS,MAAM,IAAI;MAChC,MAAM,UAAU,SAAS,MAAM,OAAO;MACtC,eAAe;OAAE,SAAS;OAAS,KAAK,QAAQ;MAAQ;MACxD,WAAW,QAAQ;OAClB,MAAM;OACN,uBAAO,IAAI,MACV,qBAAqB,OAAO,IAAI,SAAS,GAAG,IAAI,WAAW,KAAK,UAAU,KAAK,GAChF;MACD,CAAC;MACD;KACD;IAKD;GACD;GAEA,MAAM,YAAY;IACjB,OAAO,UAAU;GAClB;EACD,CAAC;CACF;AACD;;;AC1lBA,MAAa,2BAA2B;AAExC,MAAM,qBAAqB;AAkD3B,eAAe,cAAc,UAAwD;CACpF,MAAM,SACL,OAAO,SAAS,WAAW,aACxB,MAAM,SAAS,OAAO,IACrB,SAAS,WAAW,OAAO,YAAY,cAAc,KAAA,IAAY,QAAQ,IAAA;CAE9E,IAAI,CAAC,QACJ,MAAM,IAAI,gBAAgB,EACzB,SAAS,6EAA6E,yBAAyB,wBAChH,CAAC;CAGF,OAAO;AACR;AAEA,SAAS,iBAAiB,UAAuC,QAAwB;CACxF,MAAM,YAAY,SAAS,aAAa,wBAAwB,MAAM;CACtE,IAAI,CAAC,WACJ,MAAM,IAAI,gBAAgB,EACzB,SACC,yKAEF,CAAC;CAEF,OAAO;AACR;AAEA,SAAgB,kBAAkB,UAAuC,CAAC,GAAwB;CACjG,MAAM,UAAU,QAAQ,SAAS,QAAQ,QAAQ,EAAE,KAAA;CACnD,MAAM,YAAY,+BAA+B,QAAQ,SAAS;CAElE,MAAM,aAAa,YAAyD;EAC3E,MAAM,SAAS,MAAM,cAAc,OAAO;EAC1C,MAAM,YAAY,iBAAiB,SAAS,MAAM;EAElD,OAAO;GACN,eAAe,UAAU;GACzB,sBAAsB;GACtB,eAAe;GACf,YAAY,QAAQ,cAAc;GAClC,QAAQ;GACR,gBAAgB;GAChB,GAAI,YAAY;IAAE,cAAc;IAAW,uBAAuB;GAAU,IAAI,CAAC;GACjF,GAAG,QAAQ;EACZ;CACD;CAEA,MAAM,uBAAuB,YAC5B,IAAI,yBAAyB,SAAS;EACrC,UAAU;EACV;EACA,SAAS;EACT,GAAI,QAAQ,UAAU,KAAA,KAAa,EAAE,OAAO,QAAQ,MAAM;EAC1D,GAAI,cAAc,KAAA,KAAa,EAAE,UAAU;EAC3C,GAAI,QAAQ,gBAAgB,KAAA,KAAa,EAAE,aAAa,QAAQ,YAAY;EAC5E,GAAI,QAAQ,WAAW,KAAA,KAAa,EAAE,QAAQ,QAAQ,OAAO;CAC9D,CAAC;CAEF,MAAM,WAAW,SAAU,SAA6B;EACvD,IAAI,YACH,MAAM,IAAI,MAAM,wEAAwE;EAEzF,OAAO,oBAAoB,OAAO;CACnC;CAEA,SAAS,uBAAuB;CAChC,SAAS,gBAAgB;CACzB,SAAS,YAAY;CAErB,SAAS,kBAAkB,YAAoB;EAC9C,MAAM,IAAI,iBAAiB;GAAE;GAAS,WAAW;EAAiB,CAAC;CACpE;CACA,SAAS,sBAAsB,YAAoB;EAClD,MAAM,IAAI,iBAAiB;GAAE;GAAS,WAAW;EAAiB,CAAC;CACpE;CACA,SAAS,cAAc,YAAoB;EAC1C,MAAM,IAAI,iBAAiB;GAAE;GAAS,WAAW;EAAa,CAAC;CAChE;CAEA,OAAO;AACR;;;;AAKA,MAAa,cAAc,kBAAkB"}