@opencode-ai/cli-linux-arm64
Advanced tools
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "875942786C98B06D64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/ai-gateway-provider@3.1.2+a6631614dda8d488/node_modules/ai-gateway-provider/dist/providers/unified.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/providers/unified.ts\nimport { createOpenAICompatible } from \"@ai-sdk/openai-compatible\";\nvar createUnified = (arg) => {\n return createOpenAICompatible({\n baseURL: \"https://gateway.ai.cloudflare.com/v1/compat\",\n // intercepted and replaced with actual base URL later\n name: \"Unified\",\n ...arg || {}\n });\n};\nvar unified = createUnified();\nexport {\n createUnified,\n unified\n};\n//# sourceMappingURL=unified.mjs.map" | ||
| ], | ||
| "mappings": ";kSAEA,SAAI,OAAgB,MAAC,SAAQ,MAC3B,YAAO,OAAuB,CAC5B,QAAS,8CAET,KAAM,aACH,GAAO,CAAC,CACb,CAAC,GAEC,EAAU,EAAc", | ||
| "debugId": "363B5338273CE39364756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+perplexity@3.0.26+d6123d32214422cb/node_modules/@ai-sdk/perplexity/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/perplexity-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/perplexity-language-model.ts\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\n\n// src/convert-perplexity-usage.ts\nfunction convertPerplexityUsage(usage) {\n var _a, _b, _c;\n if (usage == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const promptTokens = (_a = usage.prompt_tokens) != null ? _a : 0;\n const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;\n const reasoningTokens = (_c = usage.reasoning_tokens) != null ? _c : 0;\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens\n },\n raw: usage\n };\n}\n\n// src/convert-to-perplexity-messages.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nimport { convertUint8ArrayToBase64 } from \"@ai-sdk/provider-utils\";\nfunction convertToPerplexityMessages(prompt) {\n const messages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\":\n case \"assistant\": {\n const hasMultipartContent = content.some(\n (part) => part.type === \"file\" && part.mediaType.startsWith(\"image/\") || part.type === \"file\" && part.mediaType === \"application/pdf\"\n );\n const messageContent = content.map((part, index) => {\n var _a;\n switch (part.type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text\n };\n }\n case \"file\": {\n if (part.mediaType === \"application/pdf\") {\n return part.data instanceof URL ? {\n type: \"file_url\",\n file_url: {\n url: part.data.toString()\n },\n file_name: part.filename\n } : {\n type: \"file_url\",\n file_url: {\n url: typeof part.data === \"string\" ? part.data : convertUint8ArrayToBase64(part.data)\n },\n file_name: part.filename || `document-${index}.pdf`\n };\n } else if (part.mediaType.startsWith(\"image/\")) {\n return part.data instanceof URL ? {\n type: \"image_url\",\n image_url: {\n url: part.data.toString()\n }\n } : {\n type: \"image_url\",\n image_url: {\n url: `data:${(_a = part.mediaType) != null ? _a : \"image/jpeg\"};base64,${typeof part.data === \"string\" ? part.data : convertUint8ArrayToBase64(part.data)}`\n }\n };\n }\n }\n }\n }).filter(Boolean);\n messages.push({\n role,\n content: hasMultipartContent ? messageContent : messageContent.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\")\n });\n break;\n }\n case \"tool\": {\n throw new UnsupportedFunctionalityError({\n functionality: \"Tool messages\"\n });\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return messages;\n}\n\n// src/map-perplexity-finish-reason.ts\nfunction mapPerplexityFinishReason(finishReason) {\n switch (finishReason) {\n case \"stop\":\n case \"length\":\n return finishReason;\n default:\n return \"other\";\n }\n}\n\n// src/perplexity-language-model.ts\nvar PerplexityLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.provider = \"perplexity\";\n this.supportedUrls = {\n // No URLs are supported.\n };\n this.modelId = modelId;\n this.config = config;\n }\n getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions\n }) {\n var _a;\n const warnings = [];\n if (topK != null) {\n warnings.push({ type: \"unsupported\", feature: \"topK\" });\n }\n if (stopSequences != null) {\n warnings.push({ type: \"unsupported\", feature: \"stopSequences\" });\n }\n if (seed != null) {\n warnings.push({ type: \"unsupported\", feature: \"seed\" });\n }\n return {\n args: {\n // model id:\n model: this.modelId,\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n max_tokens: maxOutputTokens,\n presence_penalty: presencePenalty,\n temperature,\n top_k: topK,\n top_p: topP,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? {\n type: \"json_schema\",\n json_schema: { schema: responseFormat.schema }\n } : void 0,\n // provider extensions\n ...(_a = providerOptions == null ? void 0 : providerOptions.perplexity) != null ? _a : {},\n // messages:\n messages: convertToPerplexityMessages(prompt)\n },\n warnings\n };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;\n const { args: body, warnings } = this.getArgs(options);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const choice = response.choices[0];\n const content = [];\n const text = choice.message.content;\n if (text.length > 0) {\n content.push({ type: \"text\", text });\n }\n if (response.citations != null) {\n for (const url of response.citations) {\n content.push({\n type: \"source\",\n sourceType: \"url\",\n id: this.config.generateId(),\n url\n });\n }\n }\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: (_a = choice.finish_reason) != null ? _a : void 0\n },\n usage: convertPerplexityUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse\n },\n warnings,\n providerMetadata: {\n perplexity: {\n images: (_c = (_b = response.images) == null ? void 0 : _b.map((image) => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width\n }))) != null ? _c : null,\n usage: {\n citationTokens: (_e = (_d = response.usage) == null ? void 0 : _d.citation_tokens) != null ? _e : null,\n numSearchQueries: (_g = (_f = response.usage) == null ? void 0 : _f.num_search_queries) != null ? _g : null\n },\n cost: ((_h = response.usage) == null ? void 0 : _h.cost) ? {\n inputTokensCost: (_i = response.usage.cost.input_tokens_cost) != null ? _i : null,\n outputTokensCost: (_j = response.usage.cost.output_tokens_cost) != null ? _j : null,\n requestCost: (_k = response.usage.cost.request_cost) != null ? _k : null,\n totalCost: (_l = response.usage.cost.total_cost) != null ? _l : null\n } : null\n }\n }\n };\n }\n async doStream(options) {\n const { args, warnings } = this.getArgs(options);\n const body = { ...args, stream: true };\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n const providerMetadata = {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries: null\n },\n cost: null,\n images: null\n }\n };\n let isFirstChunk = true;\n let isActive = false;\n const self = this;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n var _a, _b, _c, _d, _e, _f, _g;\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n if (isFirstChunk) {\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value)\n });\n (_a = value.citations) == null ? void 0 : _a.forEach((url) => {\n controller.enqueue({\n type: \"source\",\n sourceType: \"url\",\n id: self.config.generateId(),\n url\n });\n });\n isFirstChunk = false;\n }\n if (value.usage != null) {\n usage = value.usage;\n providerMetadata.perplexity.usage = {\n citationTokens: (_b = value.usage.citation_tokens) != null ? _b : null,\n numSearchQueries: (_c = value.usage.num_search_queries) != null ? _c : null\n };\n providerMetadata.perplexity.cost = value.usage.cost ? {\n inputTokensCost: (_d = value.usage.cost.input_tokens_cost) != null ? _d : null,\n outputTokensCost: (_e = value.usage.cost.output_tokens_cost) != null ? _e : null,\n requestCost: (_f = value.usage.cost.request_cost) != null ? _f : null,\n totalCost: (_g = value.usage.cost.total_cost) != null ? _g : null\n } : null;\n }\n if (value.images != null) {\n providerMetadata.perplexity.images = value.images.map((image) => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width\n }));\n }\n const choice = value.choices[0];\n if ((choice == null ? void 0 : choice.finish_reason) != null) {\n finishReason = {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason\n };\n }\n if ((choice == null ? void 0 : choice.delta) == null) {\n return;\n }\n const delta = choice.delta;\n const textContent = delta.content;\n if (textContent != null) {\n if (!isActive) {\n controller.enqueue({ type: \"text-start\", id: \"0\" });\n isActive = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: \"0\",\n delta: textContent\n });\n }\n },\n flush(controller) {\n if (isActive) {\n controller.enqueue({ type: \"text-end\", id: \"0\" });\n }\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata\n });\n }\n })\n ),\n request: { body },\n response: { headers: responseHeaders }\n };\n }\n};\nfunction getResponseMetadata({\n id,\n model,\n created\n}) {\n return {\n id,\n modelId: model,\n timestamp: new Date(created * 1e3)\n };\n}\nvar perplexityCostSchema = z.object({\n input_tokens_cost: z.number().nullish(),\n output_tokens_cost: z.number().nullish(),\n request_cost: z.number().nullish(),\n total_cost: z.number().nullish()\n});\nvar perplexityUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().nullish(),\n citation_tokens: z.number().nullish(),\n num_search_queries: z.number().nullish(),\n reasoning_tokens: z.number().nullish(),\n cost: perplexityCostSchema.nullish()\n});\nvar perplexityImageSchema = z.object({\n image_url: z.string(),\n origin_url: z.string(),\n height: z.number(),\n width: z.number()\n});\nvar perplexityResponseSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string()\n }),\n finish_reason: z.string().nullish()\n })\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish()\n});\nvar perplexityChunkSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.literal(\"assistant\"),\n content: z.string()\n }),\n finish_reason: z.string().nullish()\n })\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish()\n});\nvar perplexityErrorSchema = z.object({\n error: z.object({\n code: z.number(),\n message: z.string().nullish(),\n type: z.string().nullish()\n })\n});\nvar errorToMessage = (data) => {\n var _a, _b;\n return (_b = (_a = data.error.message) != null ? _a : data.error.type) != null ? _b : \"unknown error\";\n};\n\n// src/version.ts\nvar VERSION = true ? \"3.0.26\" : \"0.0.0-test\";\n\n// src/perplexity-provider.ts\nfunction createPerplexity(options = {}) {\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"PERPLEXITY_API_KEY\",\n description: \"Perplexity\"\n })}`,\n ...options.headers\n },\n `ai-sdk/perplexity/${VERSION}`\n );\n const createLanguageModel = (modelId) => {\n var _a;\n return new PerplexityLanguageModel(modelId, {\n baseURL: withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.perplexity.ai\"\n ),\n headers: getHeaders,\n generateId,\n fetch: options.fetch\n });\n };\n const provider = (modelId) => createLanguageModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.languageModel = createLanguageModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar perplexity = createPerplexity();\nexport {\n VERSION,\n createPerplexity,\n perplexity\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "7D79C1788BD2FCA364756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/restart.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.restart,\n Effect.fn(\"cli.service.restart\")(function* () {\n const options = yield* ServiceConfig.options()\n yield* Service.stop(options)\n const transport = yield* Service.ensure(options)\n process.stdout.write(transport.url + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAAA,mBAAS,gBAOT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,aACnC,OAAO,QAAG,0BAAqB,OAAE,cAAU,OAAG,MAC5C,SAAM,OAAU,WAAO,OAAc,aAAQ,EAC7C,MAAO,EAAQ,KAAK,CAAO,EAC3B,IAAM,EAAY,MAAO,EAAQ,OAAO,CAAO,EAC/C,QAAQ,OAAO,MAAM,EAAU,IAAM,CAAG,EACzC,CACH", | ||
| "debugId": "61E35DEFF7072DF464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/demo.ts"], | ||
| "sourcesContent": [ | ||
| "// Demo mode for testing direct interactive mode without a real SDK.\n//\n// Enabled with `--demo`. Intercepts prompt submissions and drives the same\n// presentation commits and footer actions as the live transport. This\n// lets you test scrollback formatting, permission UI, canonical Form UI, and tool\n// snapshots without making actual model calls. Pass a demo slash command as\n// the initial interactive message to trigger a preview immediately.\n//\n// Slash commands:\n// /permission [kind] → triggers a permission request variant\n// /form [kind] → triggers a canonical Form request variant\n// /fmt <kind> → emits a specific tool/text type (text, reasoning, shell,\n// write, edit, patch, subagent, question, error, mix)\n//\n// Demo mode handles permission and Form replies locally, completing or failing\n// the synthetic tool parts through the same callbacks used by the live footer.\nimport path from \"path\"\nimport type { JsonValue, SessionMessageAssistantTool } from \"@opencode-ai/client/promise\"\nimport { parseSlashHead } from \"../prompt/parse\"\nimport { writeSessionOutput } from \"./stream\"\nimport { toolCommit, toolFinalPhase } from \"./stream-v2.subagent\"\nimport type {\n FooterApi,\n FooterView,\n FormCancel,\n FormReply,\n MiniFormRequest,\n MiniPermissionRequest,\n PermissionReply,\n RunPrompt,\n StreamCommit,\n} from \"./types\"\n\nconst KINDS = [\n \"markdown\",\n \"table\",\n \"text\",\n \"reasoning\",\n \"shell\",\n \"write\",\n \"edit\",\n \"patch\",\n \"subagent\",\n \"question\",\n \"error\",\n \"mix\",\n]\nconst PERMISSIONS = [\"edit\", \"shell\", \"read\", \"subagent\", \"external\", \"doom\"] as const\nconst FORMS = [\"question\", \"external\"] as const\n\ntype PermissionKind = (typeof PERMISSIONS)[number]\ntype FormKind = (typeof FORMS)[number]\n\nfunction permissionKind(value: string | undefined): PermissionKind | undefined {\n const next = (value || \"edit\").toLowerCase()\n return PERMISSIONS.find((item) => item === next)\n}\n\nfunction formKind(value: string | undefined): FormKind | undefined {\n const next = (value || \"question\").toLowerCase()\n return FORMS.find((item) => item === next)\n}\n\nconst SAMPLE_MARKDOWN = [\n \"# Direct Mode Demo\",\n \"\",\n \"This is a realistic assistant response for direct-mode formatting checks.\",\n \"It mixes **bold**, _italic_, `inline code`, links, code fences, and tables in one streamed reply.\",\n \"\",\n \"## Summary\",\n \"\",\n \"- Restored the final markdown flush so the last block is committed on idle.\",\n \"- Switched markdown scrollback commits back to top-level block boundaries.\",\n \"- Added footer-level regression coverage for split-footer rendering.\",\n \"\",\n \"## Status\",\n \"\",\n \"| Area | Before | After | Notes |\",\n \"| --- | --- | --- | --- |\",\n \"| Direct mode | Missing final rows | Stable | Final markdown block now flushes on idle |\",\n \"| Tables | Dropped in streaming mode | Visible | Block-based commits match the working OpenTUI demo |\",\n \"| Tests | Partial coverage | Broader coverage | Includes a footer-level split render capture |\",\n \"\",\n \"> This sample intentionally includes a wide table so you can spot wrapping and commit bugs quickly.\",\n \"\",\n \"```ts\",\n \"const result = { markdown: true, tables: 2, stable: true }\",\n \"```\",\n \"\",\n \"## Files\",\n \"\",\n \"| File | Change |\",\n \"| --- | --- |\",\n \"| `scrollback.surface.ts` | Align markdown commit logic with the split-footer demo |\",\n \"| `footer.ts` | Keep active surfaces across footer-height-only resizes |\",\n \"| `footer.test.ts` | Capture real split-footer markdown payloads during idle completion |\",\n \"\",\n \"Next step: run `/fmt table` if you want a tighter table-only sample.\",\n].join(\"\\n\")\n\nconst SAMPLE_TABLE = [\n \"# Table Sample\",\n \"\",\n \"| Kind | Example | Notes |\",\n \"| --- | --- | --- |\",\n \"| Pipe | `A\\\\|B` | Escaped pipes should stay in one cell |\",\n \"| Unicode | `漢字` | Wide characters should remain aligned |\",\n \"| Wrap | `LongTokenWithoutNaturalBreaks_1234567890` | Useful for width stress |\",\n \"| Status | done | Final row should still appear after idle |\",\n].join(\"\\n\")\n\ntype Ref = {\n msg: string\n call: string\n tool: string\n input: Record<string, JsonValue>\n start: number\n}\n\ntype FormRequest = {\n ref: Ref\n kind: FormKind\n request: MiniFormRequest\n}\n\ntype Perm = {\n ref: Ref\n done: {\n output: string\n metadata?: Record<string, JsonValue>\n }\n}\n\ntype Permit = {\n ref: Ref\n permission: string\n patterns: string[]\n metadata?: MiniPermissionRequest[\"metadata\"]\n always: string[]\n done: Perm[\"done\"]\n}\n\ntype State = {\n id: string\n thinking: boolean\n footer: FooterApi\n msg: number\n part: number\n call: number\n perm: number\n form: number\n perms: Map<string, Perm>\n forms: Map<string, FormRequest>\n started: Set<string>\n}\n\ntype Input = {\n sessionID: string\n thinking: boolean\n footer: FooterApi\n}\n\nfunction note(footer: FooterApi, text: string): void {\n footer.append({\n kind: \"system\",\n text,\n phase: \"start\",\n source: \"system\",\n })\n}\n\nfunction clearSubagent(footer: FooterApi): void {\n footer.event({\n type: \"stream.subagent\",\n state: {\n tabs: [],\n details: {},\n permissions: [],\n forms: [],\n },\n })\n}\n\nfunction showSubagent(\n state: State,\n input: {\n sessionID: string\n label: string\n description: string\n status: \"running\" | \"completed\" | \"cancelled\" | \"error\"\n title?: string\n commits: StreamCommit[]\n },\n) {\n state.footer.event({\n type: \"stream.subagent\",\n state: {\n tabs: [\n {\n sessionID: input.sessionID,\n label: input.label,\n description: input.description,\n status: input.status,\n title: input.title,\n },\n ],\n details: {\n [input.sessionID]: {\n commits: input.commits,\n },\n },\n permissions: [],\n forms: [],\n },\n })\n}\n\nfunction wait(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (!signal) {\n setTimeout(resolve, ms)\n return\n }\n\n if (signal.aborted) {\n resolve()\n return\n }\n\n const done = () => {\n clearTimeout(timer)\n signal.removeEventListener(\"abort\", done)\n resolve()\n }\n\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", done)\n resolve()\n }, ms)\n\n signal.addEventListener(\"abort\", done, { once: true })\n })\n}\n\nfunction split(text: string): string[] {\n if (text.length <= 48) {\n return [text]\n }\n\n const size = Math.ceil(text.length / 3)\n return [text.slice(0, size), text.slice(size, size * 2), text.slice(size * 2)]\n}\n\nfunction take(state: State, key: \"msg\" | \"part\" | \"call\" | \"perm\", prefix: string): string {\n state[key] += 1\n return `demo_${prefix}_${state[key]}`\n}\n\nfunction present(state: State, commits: StreamCommit[], view?: FooterView): void {\n writeSessionOutput(\n { footer: state.footer },\n {\n commits,\n updates: view\n ? [\n {\n type: \"stream.patch\" as const,\n patch: { status: view.type === \"permission\" ? \"awaiting permission\" : \"awaiting form\" },\n },\n { type: \"stream.view\" as const, view },\n ]\n : undefined,\n },\n )\n}\n\nfunction clearBlocker(state: State): void {\n writeSessionOutput(\n { footer: state.footer },\n {\n commits: [],\n updates: [\n { type: \"stream.patch\", patch: { status: \"\" } },\n { type: \"stream.view\", view: { type: \"prompt\" } },\n ],\n },\n )\n}\n\nfunction open(state: State): string {\n return take(state, \"msg\", \"msg\")\n}\n\nasync function emitText(state: State, body: string, signal?: AbortSignal): Promise<void> {\n const msg = open(state)\n const part = take(state, \"part\", \"part\")\n for (const item of split(body)) {\n if (signal?.aborted) {\n return\n }\n\n present(state, [\n { kind: \"assistant\", source: \"assistant\", text: item, phase: \"progress\", messageID: msg, partID: part },\n ])\n await wait(45, signal)\n }\n}\n\nasync function emitReasoning(state: State, body: string, signal?: AbortSignal): Promise<void> {\n const msg = open(state)\n const part = take(state, \"part\", \"part\")\n let first = true\n for (const item of split(body)) {\n if (signal?.aborted) {\n return\n }\n\n if (state.thinking) {\n present(state, [\n {\n kind: \"reasoning\",\n source: \"reasoning\",\n text: first ? `Thinking: ${item.replace(/\\[REDACTED\\]/g, \"\")}` : item.replace(/\\[REDACTED\\]/g, \"\"),\n phase: \"progress\",\n messageID: msg,\n partID: part,\n },\n ])\n first = false\n }\n await wait(45, signal)\n }\n}\n\nfunction make(state: State, tool: string, input: Record<string, JsonValue>): Ref {\n return {\n msg: open(state),\n call: take(state, \"call\", \"call\"),\n tool,\n input,\n start: Date.now(),\n }\n}\n\nfunction startTool(state: State, ref: Ref, metadata: Record<string, JsonValue> = {}): SessionMessageAssistantTool {\n state.started.add(ref.call)\n const part = {\n type: \"tool\" as const,\n id: ref.call,\n name: ref.tool,\n state: { status: \"running\" as const, input: ref.input, metadata },\n time: { created: ref.start, ran: ref.start },\n }\n present(state, [toolCommit(part, ref.msg, \"start\")])\n return part\n}\n\nfunction askPermission(state: State, item: Permit): void {\n const tool = startTool(state, item.ref)\n\n const id = take(state, \"perm\", \"perm\")\n state.perms.set(id, {\n ref: item.ref,\n done: item.done,\n })\n\n present(state, [], {\n type: \"permission\",\n request: {\n id,\n sessionID: state.id,\n action: item.permission,\n resources: item.patterns,\n metadata: item.metadata ?? {},\n save: item.always,\n source: { type: \"tool\", messageID: item.ref.msg, callID: item.ref.call },\n tool,\n },\n })\n}\n\nfunction doneTool(\n state: State,\n ref: Ref,\n output: {\n output: string\n metadata?: Record<string, JsonValue>\n },\n): void {\n if (!state.started.has(ref.call)) startTool(state, ref)\n const part: SessionMessageAssistantTool = {\n type: \"tool\",\n id: ref.call,\n name: ref.tool,\n state: {\n status: \"completed\",\n input: ref.input,\n content: [{ type: \"text\", text: output.output }],\n metadata: output.metadata,\n },\n time: { created: ref.start, ran: ref.start, completed: Date.now() },\n }\n present(state, [toolCommit(part, ref.msg, toolFinalPhase(part))])\n}\n\nfunction failTool(state: State, ref: Ref, error: string): void {\n if (!state.started.has(ref.call)) startTool(state, ref)\n present(state, [\n toolCommit(\n {\n type: \"tool\",\n id: ref.call,\n name: ref.tool,\n state: {\n status: \"error\",\n input: ref.input,\n error: { type: \"unknown\", message: error },\n },\n time: { created: ref.start, ran: ref.start, completed: Date.now() },\n },\n ref.msg,\n \"final\",\n ),\n ])\n}\n\nfunction emitError(state: State, text: string): void {\n present(state, [{ kind: \"error\", source: \"system\", text, phase: \"start\" }])\n}\n\nasync function emitBash(state: State, signal?: AbortSignal): Promise<void> {\n const ref = make(state, \"shell\", {\n command: \"git status\",\n workdir: process.cwd(),\n description: \"Show git status\",\n })\n startTool(state, ref)\n await wait(70, signal)\n doneTool(state, ref, {\n output: `${process.cwd()}\\ngit status\\nOn branch demo\\nnothing to commit, working tree clean\\n`,\n metadata: {\n exit: 0,\n },\n })\n}\n\nfunction emitWrite(state: State): void {\n const file = path.join(process.cwd(), \"src\", \"demo-format.ts\")\n const ref = make(state, \"write\", {\n path: file,\n content: \"export const demo = 42\\n\",\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {},\n })\n}\n\nfunction emitEdit(state: State): void {\n const file = path.join(process.cwd(), \"src\", \"demo-format.ts\")\n const ref = make(state, \"edit\", {\n path: file,\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n files: [\n {\n file,\n status: \"modified\",\n patch: \"@@ -1 +1 @@\\n-export const demo = 1\\n+export const demo = 42\\n\",\n },\n ],\n },\n })\n}\n\nfunction emitPatch(state: State): void {\n const file = path.join(process.cwd(), \"src\", \"demo-format.ts\")\n const ref = make(state, \"patch\", {\n patchText: \"*** Begin Patch\\n*** End Patch\",\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n files: [\n {\n status: \"modified\",\n file,\n patch: \"@@ -1 +1 @@\\n-export const demo = 1\\n+export const demo = 42\\n\",\n deletions: 1,\n },\n {\n status: \"added\",\n file: path.join(process.cwd(), \"README-demo.md\"),\n patch: \"@@ -0,0 +1,4 @@\\n+# Demo\\n+This is a generated preview file.\\n\",\n deletions: 0,\n },\n ],\n },\n })\n}\n\nfunction emitTask(state: State): void {\n const ref = make(state, \"subagent\", {\n description: \"Scan run/* for reducer touchpoints\",\n agent: \"explore\",\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n sessionID: \"ses_demo_child\",\n status: \"completed\",\n output: \"\",\n },\n })\n const part = {\n type: \"tool\",\n id: \"sub_demo_call_1\",\n name: \"read\",\n state: {\n status: \"running\",\n input: {\n path: \"packages/tui/src/mini/stream.ts\",\n offset: 1,\n limit: 200,\n },\n metadata: {},\n },\n time: { created: Date.now(), ran: Date.now() },\n } satisfies SessionMessageAssistantTool\n showSubagent(state, {\n sessionID: \"ses_demo_child\",\n label: \"Explore\",\n description: \"Scan run/* for reducer touchpoints\",\n status: \"completed\",\n title: \"Reducer touchpoints found\",\n commits: [\n {\n kind: \"user\",\n text: \"Scan run/* for reducer touchpoints\",\n phase: \"start\",\n source: \"system\",\n },\n {\n kind: \"reasoning\",\n text: \"Thinking: tracing reducer and footer boundaries\",\n phase: \"progress\",\n source: \"reasoning\",\n messageID: \"sub_demo_msg_reasoning\",\n partID: \"sub_demo_reasoning_1\",\n },\n toolCommit(part, \"sub_demo_msg_tool\", \"start\"),\n {\n kind: \"assistant\",\n text: \"Footer updates flow through stream.ts into RunFooter\",\n phase: \"progress\",\n source: \"assistant\",\n messageID: \"sub_demo_msg_text\",\n partID: \"sub_demo_text_1\",\n },\n ],\n })\n}\n\nfunction emitQuestionTool(state: State): void {\n const ref = make(state, \"question\", {\n questions: [\n {\n header: \"Style\",\n question: \"Which output style do you want to inspect?\",\n options: [\n { label: \"Diff\", description: \"Show diff block\" },\n { label: \"Code\", description: \"Show code block\" },\n ],\n multiple: false,\n custom: false,\n },\n {\n header: \"Extras\",\n question: \"Pick extra rows\",\n options: [\n { label: \"Usage\", description: \"Add usage row\" },\n { label: \"Duration\", description: \"Add duration row\" },\n ],\n multiple: true,\n custom: true,\n },\n ],\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n answers: [[\"Diff\"], [\"Usage\", \"custom-note\"]],\n },\n })\n}\n\nfunction emitPermission(state: State, kind: PermissionKind = \"edit\"): void {\n const root = process.cwd()\n const file = path.join(root, \"src\", \"demo-format.ts\")\n\n if (kind === \"shell\") {\n const command = \"git status --short\"\n const ref = make(state, \"shell\", {\n command,\n workdir: root,\n description: \"Inspect worktree changes\",\n })\n askPermission(state, {\n ref,\n permission: \"shell\",\n patterns: [command],\n always: [\"*\"],\n done: {\n output: `${root}\\ngit status --short\\n M src/demo-format.ts\\n?? src/demo-permission.ts\\n`,\n metadata: {\n exit: 0,\n },\n },\n })\n return\n }\n\n if (kind === \"read\") {\n const target = path.join(root, \"package.json\")\n const ref = make(state, \"read\", {\n path: target,\n offset: 1,\n limit: 80,\n })\n askPermission(state, {\n ref,\n permission: \"read\",\n patterns: [target],\n always: [target],\n done: {\n output: [\"1: {\", '2: \"name\": \"opencode\",', '3: \"private\": true', \"4: }\"].join(\"\\n\"),\n metadata: {},\n },\n })\n return\n }\n\n if (kind === \"subagent\") {\n const ref = make(state, \"subagent\", {\n description: \"Inspect footer spacing across direct-mode prompts\",\n agent: \"explore\",\n })\n askPermission(state, {\n ref,\n permission: \"subagent\",\n patterns: [\"explore\"],\n always: [\"*\"],\n done: {\n output: \"\",\n metadata: {\n sessionID: \"sub_demo_perm_1\",\n status: \"completed\",\n output: \"\",\n },\n },\n })\n return\n }\n\n if (kind === \"external\") {\n const dir = path.join(path.dirname(root), \"demo-shared\")\n const target = path.join(dir, \"README.md\")\n const ref = make(state, \"read\", {\n path: target,\n offset: 1,\n limit: 40,\n })\n askPermission(state, {\n ref,\n permission: \"external_directory\",\n patterns: [`${dir}/**`],\n metadata: {\n parentDir: dir,\n filepath: target,\n },\n always: [`${dir}/**`],\n done: {\n output: `1: # External demo\\n2: Shared preview file\\nPath: ${target}`,\n metadata: {},\n },\n })\n return\n }\n\n if (kind === \"doom\") {\n const ref = make(state, \"subagent\", {\n description: \"Retry the formatter after repeated failures\",\n agent: \"general\",\n })\n askPermission(state, {\n ref,\n permission: \"doom_loop\",\n patterns: [\"*\"],\n always: [\"*\"],\n done: {\n output: \"Continuing after repeated failures.\\n\",\n metadata: {},\n },\n })\n return\n }\n\n const diff = \"@@ -1 +1 @@\\n-export const demo = 1\\n+export const demo = 42\\n\"\n const ref = make(state, \"edit\", {\n path: file,\n })\n askPermission(state, {\n ref,\n permission: \"edit\",\n patterns: [file],\n always: [file],\n done: {\n output: \"\",\n metadata: {\n files: [{ file, status: \"modified\", patch: diff }],\n },\n },\n })\n}\n\nfunction demoForm(kind: FormKind): { title: string; fields: MiniFormRequest[\"fields\"]; questions?: JsonValue[] } {\n if (kind === \"question\") {\n const questions: JsonValue[] = [\n {\n header: \"Layout\",\n question: \"Which footer view should be the reference for spacing checks?\",\n options: [\n { label: \"Form\", description: \"Inspect the canonical Form footer\" },\n { label: \"Prompt\", description: \"Return to the normal composer\" },\n ],\n multiple: false,\n custom: true,\n },\n {\n header: \"Checks\",\n question: \"Pick formatting previews\",\n options: [\n { label: \"Diff\", description: \"Emit an edit diff\" },\n { label: \"Subagent\", description: \"Emit a subagent card\" },\n ],\n multiple: true,\n custom: true,\n },\n ]\n return {\n title: \"Questions\",\n questions,\n fields: [\n {\n key: \"q0\",\n title: \"Layout\",\n description: \"Which footer view should be the reference for spacing checks?\",\n type: \"string\",\n options: [\n { value: \"Form\", label: \"Form\", description: \"Inspect the canonical Form footer\" },\n { value: \"Prompt\", label: \"Prompt\", description: \"Return to the normal composer\" },\n ],\n custom: true,\n },\n {\n key: \"q1\",\n title: \"Checks\",\n description: \"Pick formatting previews\",\n type: \"multiselect\",\n options: [\n { value: \"Diff\", label: \"Diff\", description: \"Emit an edit diff\" },\n { value: \"Subagent\", label: \"Subagent\", description: \"Emit a subagent card\" },\n ],\n custom: true,\n },\n ],\n }\n }\n return {\n title: \"MCP authorization\",\n fields: [\n {\n key: \"authorization\",\n type: \"external\",\n url: \"https://example.com/opencode-demo\",\n title: \"Authorize demo MCP server\",\n description: \"Complete authorization in your browser\",\n },\n ],\n }\n}\n\nfunction emitForm(state: State, kind: FormKind = \"question\"): void {\n const form = demoForm(kind)\n const ref = make(state, kind === \"question\" ? \"question\" : \"mcp_demo\", {\n ...(form.questions ? { questions: form.questions } : { form: kind }),\n })\n startTool(state, ref)\n state.form++\n const request: MiniFormRequest = {\n id: `frm_demo_${state.form}`,\n sessionID: state.id,\n title: form.title,\n metadata:\n kind === \"question\"\n ? { kind: \"question\", tool: { messageID: ref.msg, callID: ref.call } }\n : { kind: \"mcp\", message: `Synthetic ${kind} MCP elicitation` },\n fields: form.fields,\n }\n state.forms.set(request.id, { ref, kind, request })\n present(state, [], { type: \"form\", request })\n}\n\nasync function emitFmt(state: State, kind: string, body: string, signal?: AbortSignal): Promise<boolean> {\n if (kind === \"text\") {\n await emitText(state, body || SAMPLE_MARKDOWN, signal)\n return true\n }\n\n if (kind === \"markdown\" || kind === \"md\") {\n await emitText(state, body || SAMPLE_MARKDOWN, signal)\n return true\n }\n\n if (kind === \"table\") {\n await emitText(state, body || SAMPLE_TABLE, signal)\n return true\n }\n\n if (kind === \"reasoning\") {\n await emitReasoning(state, body || \"Planning next steps [REDACTED] while preserving reducer ordering.\", signal)\n return true\n }\n\n if (kind === \"shell\") {\n await emitBash(state, signal)\n return true\n }\n\n if (kind === \"write\") {\n emitWrite(state)\n return true\n }\n\n if (kind === \"edit\") {\n emitEdit(state)\n return true\n }\n\n if (kind === \"patch\") {\n emitPatch(state)\n return true\n }\n\n if (kind === \"subagent\") {\n emitTask(state)\n return true\n }\n\n if (kind === \"question\") {\n emitQuestionTool(state)\n return true\n }\n\n if (kind === \"error\") {\n emitError(state, body || \"demo error event\")\n return true\n }\n\n if (kind === \"mix\") {\n await emitText(state, SAMPLE_MARKDOWN, signal)\n await wait(50, signal)\n await emitReasoning(state, \"Thinking through formatter edge cases [REDACTED].\", signal)\n await wait(50, signal)\n await emitBash(state, signal)\n emitWrite(state)\n emitEdit(state)\n emitPatch(state)\n emitTask(state)\n emitQuestionTool(state)\n emitError(state, \"demo mixed scenario error\")\n return true\n }\n\n return false\n}\n\nfunction intro(state: State): void {\n note(\n state.footer,\n [\n \"Demo slash commands enabled for interactive mode.\",\n `- /permission [kind] (${PERMISSIONS.join(\", \")})`,\n `- /form [kind] (${FORMS.join(\", \")})`,\n `- /fmt <kind> (${KINDS.join(\", \")})`,\n \"Examples:\",\n \"- /permission shell\",\n \"- /form question\",\n \"- /form external\",\n \"- /fmt markdown\",\n \"- /fmt table\",\n \"- /fmt text your custom text\",\n ].join(\"\\n\"),\n )\n}\n\nexport function createRunDemo(input: Input) {\n const state: State = {\n id: input.sessionID,\n thinking: input.thinking,\n footer: input.footer,\n msg: 0,\n part: 0,\n call: 0,\n perm: 0,\n form: 0,\n perms: new Map(),\n forms: new Map(),\n started: new Set(),\n }\n\n const start = async (): Promise<void> => {\n intro(state)\n }\n\n const prompt = async (line: RunPrompt, signal?: AbortSignal): Promise<boolean> => {\n const text = line.text.trim()\n const head = parseSlashHead(text)\n const list = head?.arguments.split(/\\s+/).filter(Boolean) ?? []\n const cmd = head ? `/${head.name}` : \"\"\n\n clearSubagent(state.footer)\n\n if (cmd === \"/help\") {\n intro(state)\n return true\n }\n\n if (cmd === \"/permission\") {\n const kind = permissionKind(list[0])\n if (!kind) {\n note(state.footer, `Pick a permission kind: ${PERMISSIONS.join(\", \")}`)\n return true\n }\n\n emitPermission(state, kind)\n return true\n }\n\n if (cmd === \"/form\") {\n const kind = formKind(list[0])\n if (!kind) {\n note(state.footer, `Pick a form kind: ${FORMS.join(\", \")}`)\n return true\n }\n\n emitForm(state, kind)\n return true\n }\n\n if (cmd === \"/fmt\") {\n const kind = (list[0] || \"\").toLowerCase()\n const body = list.slice(1).join(\" \")\n if (!kind) {\n note(state.footer, `Pick a kind: ${KINDS.join(\", \")}`)\n return true\n }\n\n const ok = await emitFmt(state, kind, body, signal)\n if (ok) {\n return true\n }\n\n note(state.footer, `Unknown kind \"${kind}\". Use: ${KINDS.join(\", \")}`)\n return true\n }\n\n return false\n }\n\n const permission = (input: PermissionReply): boolean => {\n const item = state.perms.get(input.requestID)\n if (!item || !input.reply) {\n return false\n }\n\n state.perms.delete(input.requestID)\n clearBlocker(state)\n\n if (input.reply === \"reject\") {\n failTool(state, item.ref, input.message || \"permission rejected\")\n return true\n }\n\n doneTool(state, item.ref, item.done)\n return true\n }\n\n const formReply = (input: FormReply): boolean => {\n const form = state.forms.get(input.formID)\n if (!form || input.sessionID !== form.request.sessionID) return false\n state.forms.delete(input.formID)\n clearBlocker(state)\n if (form.kind === \"question\") {\n doneTool(state, form.ref, {\n output: \"\",\n metadata: {\n answers: form.request.fields.map((field) => {\n const value = input.answer[field.key]\n if (value === undefined) return []\n return Array.isArray(value) ? [...value] : [String(value)]\n }),\n },\n })\n return true\n }\n doneTool(state, form.ref, {\n output: `Form submitted: ${Object.entries(input.answer)\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.join(\", \") : String(value)}`)\n .join(\"; \")}\\n`,\n metadata: { answer: input.answer },\n })\n return true\n }\n\n const formCancel = (input: FormCancel): boolean => {\n const form = state.forms.get(input.formID)\n if (!form || input.sessionID !== form.request.sessionID) return false\n state.forms.delete(input.formID)\n clearBlocker(state)\n failTool(state, form.ref, \"form cancelled\")\n return true\n }\n\n return {\n start,\n prompt,\n permission,\n formReply,\n formCancel,\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "9DDA1028ACCC13E764756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/util/io.ts", "src/session-target.ts"], | ||
| "sourcesContent": [ | ||
| "import { text } from \"node:stream/consumers\"\n\nexport function readStdin() {\n return text(process.stdin)\n}\n", | ||
| "import type { LocationGetOutput, ModelRef, OpenCodeClient, SessionInfo } from \"@opencode-ai/client/promise\"\nimport { Model } from \"@opencode-ai/schema/model\"\n\nconst SESSION_PAGE_LIMIT = 50\n\nexport type SessionTarget = {\n session: SessionInfo\n location: LocationGetOutput\n model: ModelRef | undefined\n agent: string | undefined\n resume: boolean\n}\n\nexport type SessionTargetPreparation = (input: {\n client: OpenCodeClient\n location: LocationGetOutput\n session: SessionInfo | undefined\n model: ModelRef | undefined\n agent: string | undefined\n signal?: AbortSignal\n}) => Promise<{ model: ModelRef | undefined; agent: string | undefined }>\n\nexport class SessionTargetMutationError extends Error {\n override readonly name = \"SessionTargetMutationError\"\n\n constructor(cause: unknown) {\n super(cause instanceof Error ? cause.message : \"Session target mutation failed\", { cause })\n }\n}\n\nexport async function resolveSessionTarget(input: {\n client: OpenCodeClient\n location?: { directory?: string; workspace?: string }\n continue?: boolean\n session?: string\n fork?: boolean\n model?: ModelRef\n agent?: string\n prepare: SessionTargetPreparation\n signal?: AbortSignal\n}): Promise<SessionTarget> {\n const selection = await selectSession(input)\n const selected = selection.session\n const location =\n selection.location ??\n (await resolveLocation(\n input.client,\n selected ? { directory: selected.location.directory, workspace: selected.location.workspaceID } : input.location,\n input.signal,\n ))\n const prepared = await input.prepare({\n client: input.client,\n location,\n session: selected,\n model: input.model ?? selected?.model,\n agent: input.agent ?? selected?.agent,\n signal: input.signal,\n })\n const session =\n selected ??\n (await input.client.session\n .create(\n {\n agent: prepared.agent,\n model: prepared.model,\n location: { directory: location.directory, workspaceID: location.workspaceID },\n },\n ...requestOptions(input.signal),\n )\n .catch((error) => {\n throw new SessionTargetMutationError(error)\n }))\n return {\n session,\n location,\n model: prepared.model,\n agent: prepared.agent ?? session.agent,\n resume: selected !== undefined,\n }\n}\n\nexport function parseSessionTargetModel(value?: string): ModelRef | undefined {\n if (!value) return\n const model = Model.Ref.parse(value)\n return { providerID: model.providerID, id: model.id, variant: model.variant }\n}\n\nasync function selectSession(input: {\n client: OpenCodeClient\n location?: { directory?: string; workspace?: string }\n continue?: boolean\n session?: string\n fork?: boolean\n signal?: AbortSignal\n}) {\n const explicit = input.session\n ? await input.client.session.get({ sessionID: input.session }, ...requestOptions(input.signal)).catch((error) => {\n if (error && typeof error === \"object\" && Reflect.get(error, \"_tag\") === \"SessionNotFoundError\")\n return undefined\n throw error\n })\n : undefined\n if (input.session && !explicit) throw new Error(\"Session not found\")\n if (explicit)\n return {\n session: input.fork\n ? await input.client.session\n .fork({ sessionID: explicit.id, boundary: { type: \"through\" } }, ...requestOptions(input.signal))\n .catch((error) => {\n throw new SessionTargetMutationError(error)\n })\n : explicit,\n }\n if (!input.continue) return { session: undefined }\n\n const location = await resolveLocation(input.client, input.location, input.signal)\n const selected = await latestSession(input.client, location, undefined, input.signal)\n if (!selected) return { session: undefined, location }\n return {\n session: input.fork\n ? await input.client.session\n .fork({ sessionID: selected.id, boundary: { type: \"through\" } }, ...requestOptions(input.signal))\n .catch((error) => {\n throw new SessionTargetMutationError(error)\n })\n : selected,\n }\n}\n\nasync function latestSession(\n client: OpenCodeClient,\n location: LocationGetOutput,\n cursor?: string,\n signal?: AbortSignal,\n): Promise<SessionInfo | undefined> {\n const page = await client.session.list(\n {\n directory: location.directory,\n workspace: location.workspaceID,\n parentID: null,\n limit: SESSION_PAGE_LIMIT,\n order: \"desc\",\n ...(cursor ? { cursor } : {}),\n },\n ...requestOptions(signal),\n )\n const selected = page.data.find(\n (session) =>\n session.location.directory === location.directory && session.location.workspaceID === location.workspaceID,\n )\n if (selected) return selected\n if (!page.cursor.next || page.data.length === 0) return\n return latestSession(client, location, page.cursor.next, signal)\n}\n\nfunction resolveLocation(\n client: OpenCodeClient,\n location?: { directory?: string; workspace?: string },\n signal?: AbortSignal,\n) {\n if (!location && !signal) return client.location.get()\n if (!location) return client.location.get(undefined, { signal })\n return client.location.get({ location }, ...requestOptions(signal))\n}\n\nfunction requestOptions(signal?: AbortSignal): [] | [{ signal: AbortSignal }] {\n return signal ? [{ signal }] : []\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "B4E343280064A29B64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+deepinfra@2.0.41+d6123d32214422cb/node_modules/@ai-sdk/deepinfra/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/deepinfra-provider.ts\nimport {\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel\n} from \"@ai-sdk/openai-compatible\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/deepinfra-image-model.ts\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertToFormData,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n downloadBlob,\n postFormDataToApi,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\nvar DeepInfraImageModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n this.maxImagesPerCall = 1;\n }\n get provider() {\n return this.config.provider;\n }\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask\n }) {\n var _a, _b, _c, _d, _e;\n const warnings = [];\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n if (files != null && files.length > 0) {\n const { value: response2, responseHeaders: responseHeaders2 } = await postFormDataToApi({\n url: this.getEditUrl(),\n headers: combineHeaders(this.config.headers(), headers),\n formData: convertToFormData(\n {\n model: this.modelId,\n prompt,\n image: await Promise.all(files.map((file) => fileToBlob(file))),\n mask: mask != null ? await fileToBlob(mask) : void 0,\n n,\n size,\n ...(_d = providerOptions.deepinfra) != null ? _d : {}\n },\n { useArrayBrackets: false }\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraEditErrorSchema,\n errorToMessage: (error) => {\n var _a2, _b2;\n return (_b2 = (_a2 = error.error) == null ? void 0 : _a2.message) != null ? _b2 : \"Unknown error\";\n }\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraEditResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n images: response2.data.map((item) => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders2\n }\n };\n }\n const splitSize = size == null ? void 0 : size.split(\"x\");\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n prompt,\n num_images: n,\n ...aspectRatio && { aspect_ratio: aspectRatio },\n ...splitSize && { width: splitSize[0], height: splitSize[1] },\n ...seed != null && { seed },\n ...(_e = providerOptions.deepinfra) != null ? _e : {}\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraErrorSchema,\n errorToMessage: (error) => error.detail.error\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraImageResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n images: response.images.map(\n (image) => image.replace(/^data:image\\/\\w+;base64,/, \"\")\n ),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders\n }\n };\n }\n getEditUrl() {\n const baseUrl = this.config.baseURL.replace(\"/inference\", \"/openai\");\n return `${baseUrl}/images/edits`;\n }\n};\nvar deepInfraErrorSchema = z.object({\n detail: z.object({\n error: z.string()\n })\n});\nvar deepInfraImageResponseSchema = z.object({\n images: z.array(z.string())\n});\nvar deepInfraEditErrorSchema = z.object({\n error: z.object({\n message: z.string()\n }).optional()\n});\nvar deepInfraEditResponseSchema = z.object({\n data: z.array(z.object({ b64_json: z.string() }))\n});\nasync function fileToBlob(file) {\n if (file.type === \"url\") {\n return downloadBlob(file.url);\n }\n const data = file.data instanceof Uint8Array ? file.data : convertBase64ToUint8Array(file.data);\n return new Blob([data], { type: file.mediaType });\n}\n\n// src/deepinfra-chat-language-model.ts\nimport { OpenAICompatibleChatLanguageModel } from \"@ai-sdk/openai-compatible\";\nvar DeepInfraChatLanguageModel = class extends OpenAICompatibleChatLanguageModel {\n constructor(modelId, config) {\n super(modelId, config);\n }\n /**\n * Fixes incorrect token usage for Gemini/Gemma models from DeepInfra.\n *\n * DeepInfra's API returns completion_tokens that don't include reasoning_tokens\n * for Gemini/Gemma models, which violates the OpenAI-compatible spec.\n * According to the spec, completion_tokens should include reasoning_tokens.\n *\n * Example of incorrect data from DeepInfra:\n * {\n * \"completion_tokens\": 84, // text-only tokens\n * \"completion_tokens_details\": {\n * \"reasoning_tokens\": 1081 // reasoning tokens not included above\n * }\n * }\n *\n * This would result in negative text tokens: 84 - 1081 = -997\n *\n * The fix: If reasoning_tokens > completion_tokens, add reasoning_tokens\n * to completion_tokens: 84 + 1081 = 1165\n */\n fixUsageForGeminiModels(usage) {\n var _a, _b;\n if (!usage || !((_a = usage.completion_tokens_details) == null ? void 0 : _a.reasoning_tokens)) {\n return usage;\n }\n const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;\n const reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n if (reasoningTokens > completionTokens) {\n const correctedCompletionTokens = completionTokens + reasoningTokens;\n return {\n ...usage,\n // Add reasoning_tokens to completion_tokens to get the correct total\n completion_tokens: correctedCompletionTokens,\n // Update total_tokens if present\n total_tokens: usage.total_tokens != null ? usage.total_tokens + reasoningTokens : void 0\n };\n }\n return usage;\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g;\n const result = await super.doGenerate(options);\n if ((_a = result.usage) == null ? void 0 : _a.raw) {\n const fixedRawUsage = this.fixUsageForGeminiModels(result.usage.raw);\n if (fixedRawUsage !== result.usage.raw) {\n const promptTokens = (_b = fixedRawUsage.prompt_tokens) != null ? _b : 0;\n const completionTokens = (_c = fixedRawUsage.completion_tokens) != null ? _c : 0;\n const cacheReadTokens = (_e = (_d = fixedRawUsage.prompt_tokens_details) == null ? void 0 : _d.cached_tokens) != null ? _e : 0;\n const reasoningTokens = (_g = (_f = fixedRawUsage.completion_tokens_details) == null ? void 0 : _f.reasoning_tokens) != null ? _g : 0;\n return {\n ...result,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens\n },\n raw: fixedRawUsage\n }\n };\n }\n }\n return result;\n }\n async doStream(options) {\n const result = await super.doStream(options);\n const originalStream = result.stream;\n const fixUsage = this.fixUsageForGeminiModels.bind(this);\n const transformedStream = new ReadableStream({\n async start(controller) {\n var _a, _b, _c, _d, _e, _f, _g;\n const reader = originalStream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value.type === \"finish\" && ((_a = value.usage) == null ? void 0 : _a.raw)) {\n const fixedRawUsage = fixUsage(value.usage.raw);\n if (fixedRawUsage !== value.usage.raw) {\n const promptTokens = (_b = fixedRawUsage.prompt_tokens) != null ? _b : 0;\n const completionTokens = (_c = fixedRawUsage.completion_tokens) != null ? _c : 0;\n const cacheReadTokens = (_e = (_d = fixedRawUsage.prompt_tokens_details) == null ? void 0 : _d.cached_tokens) != null ? _e : 0;\n const reasoningTokens = (_g = (_f = fixedRawUsage.completion_tokens_details) == null ? void 0 : _f.reasoning_tokens) != null ? _g : 0;\n controller.enqueue({\n ...value,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens\n },\n raw: fixedRawUsage\n }\n });\n } else {\n controller.enqueue(value);\n }\n } else {\n controller.enqueue(value);\n }\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n }\n });\n return {\n ...result,\n stream: transformedStream\n };\n }\n};\n\n// src/version.ts\nvar VERSION = true ? \"2.0.41\" : \"0.0.0-test\";\n\n// src/deepinfra-provider.ts\nfunction createDeepInfra(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.deepinfra.com/v1\"\n );\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"DEEPINFRA_API_KEY\",\n description: \"DeepInfra's API key\"\n })}`,\n ...options.headers\n },\n `ai-sdk/deepinfra/${VERSION}`\n );\n const getCommonModelConfig = (modelType) => ({\n provider: `deepinfra.${modelType}`,\n url: ({ path }) => `${baseURL}/openai${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createChatModel = (modelId) => {\n return new DeepInfraChatLanguageModel(\n modelId,\n getCommonModelConfig(\"chat\")\n );\n };\n const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(\n modelId,\n getCommonModelConfig(\"completion\")\n );\n const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig(\"embedding\")\n );\n const createImageModel = (modelId) => new DeepInfraImageModel(modelId, {\n ...getCommonModelConfig(\"image\"),\n baseURL: baseURL ? `${baseURL}/inference` : \"https://api.deepinfra.com/v1/inference\"\n });\n const provider = (modelId) => createChatModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.languageModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n return provider;\n}\nvar deepinfra = createDeepInfra();\nexport {\n VERSION,\n createDeepInfra,\n deepinfra\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "D5D25AC5CA608FBB64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/mini.ts", "src/mini-host.ts"], | ||
| "sourcesContent": [ | ||
| "import { Service, type Endpoint } from \"@opencode-ai/client/effect/service\"\nimport { ClientError, OpenCode, type OpenCodeClient } from \"@opencode-ai/client/promise\"\nimport type { MiniFrontendInput } from \"@opencode-ai/tui/mini\"\nimport { setTimeout } from \"node:timers/promises\"\nimport { readStdin } from \"./util/io\"\nimport { createMiniHost, INTERACTIVE_INPUT_ERROR, usingInteractiveStdin } from \"./mini-host\"\nimport { parseSessionTargetModel, resolveSessionTarget, type SessionTargetPreparation } from \"./session-target\"\n\nexport type MiniCommandInput = {\n server: {\n endpoint: Endpoint\n reconnect?: (signal: AbortSignal) => Promise<Endpoint>\n }\n continue?: boolean\n session?: string\n fork?: boolean\n model?: string\n agent?: string\n prompt?: string\n replay?: boolean\n replayLimit?: number\n demo?: boolean\n tuiConfig?: MiniFrontendInput[\"tuiConfig\"]\n config?: MiniFrontendInput[\"config\"]\n}\n\ntype Model = MiniFrontendInput[\"model\"]\n\nclass MiniInputError extends Error {}\n\nexport async function runMini(input: MiniCommandInput) {\n try {\n validate(input)\n const result = await usingInteractiveStdin(async (terminal) => {\n const initialInput = mergeInput(process.stdin.isTTY ? undefined : await readStdin(), input.prompt)\n const frontendTask = import(\"@opencode-ai/tui/mini\")\n const directory = localDirectory()\n const connection = createMiniConnection(input.server)\n const sdk = connection.sdk\n const requested = parseModel(input.model)\n const model = requested ? { providerID: requested.providerID, modelID: requested.id } : undefined\n const prepare = prepareTarget(input.agent)\n const resolveTarget = async (initial: OpenCodeClient, signal: AbortSignal) => {\n const resolved = await resolveMiniTarget({\n sdk: initial,\n reconnect: connection.reconnect,\n signal,\n resolve: (client) =>\n resolveSessionTarget({\n client,\n location: { directory },\n continue: input.continue,\n session: input.session,\n fork: input.fork,\n model: requested,\n agent: input.agent,\n prepare,\n signal,\n }).catch((error) => {\n if (error instanceof Error && error.message === \"Session not found\")\n throw new MiniInputError(error.message)\n throw error\n }),\n })\n const target = resolved.value\n return {\n sdk: resolved.sdk,\n sessionID: target.session.id,\n sessionTitle: target.session.title,\n location: target.location,\n model: target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined,\n variant: target.model?.variant,\n agent: target.agent,\n resume: target.resume,\n }\n }\n const create = (\n client: OpenCodeClient,\n next: {\n location: { directory: string; workspaceID?: string }\n agent: string | undefined\n model: Model\n variant: string | undefined\n },\n signal?: AbortSignal,\n ) =>\n resolveSessionTarget({\n client,\n location: { directory: next.location.directory, workspace: next.location.workspaceID },\n agent: next.agent,\n model: next.model\n ? { providerID: next.model.providerID, id: next.model.modelID, variant: next.variant }\n : undefined,\n prepare,\n signal,\n }).then((target) => ({\n sessionID: target.session.id,\n sessionTitle: target.session.title,\n location: target.location,\n model: target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined,\n variant: target.model?.variant,\n agent: target.agent,\n resume: false,\n }))\n const frontend = await frontendTask\n return frontend.runMiniFrontend({\n host: createMiniHost({ terminal, directory }),\n sdk,\n directory,\n target: resolveTarget,\n reconnect: connection.reconnect,\n createSession: create,\n agent: input.agent,\n model,\n variant: requested?.variant,\n files: [],\n initialInput,\n replay: input.replay ?? true,\n replayLimit: input.replayLimit,\n demo: input.demo,\n tuiConfig: input.tuiConfig,\n config: input.config,\n })\n })\n if (result.exitCode !== 0) process.exit(result.exitCode)\n } catch (error) {\n if (error instanceof MiniInputError || (error instanceof Error && error.message === INTERACTIVE_INPUT_ERROR))\n fail(error.message)\n throw error\n }\n}\n\n/** @internal Exported for CLI boundary tests. */\nexport function createMiniConnection(input: MiniCommandInput[\"server\"]) {\n const make = (endpoint: Endpoint) =>\n OpenCode.make({\n baseUrl: endpoint.url,\n headers: Service.headers(endpoint),\n })\n const reconnect = input.reconnect\n return {\n sdk: make(input.endpoint),\n reconnect: reconnect\n ? async (signal: AbortSignal) => {\n const endpoint = await reconnect(signal)\n return make(endpoint)\n }\n : undefined,\n }\n}\n\n/** @internal Exported for reconnect lifecycle tests. */\nexport async function resolveMiniTarget<A>(input: {\n sdk: OpenCodeClient\n reconnect?: (signal: AbortSignal) => Promise<OpenCodeClient>\n signal: AbortSignal\n resolve: (sdk: OpenCodeClient) => Promise<A>\n}) {\n let sdk = input.sdk\n while (true) {\n try {\n return { sdk, value: await input.resolve(sdk) }\n } catch (error) {\n if (!input.reconnect || !(error instanceof ClientError) || error.reason !== \"Transport\") throw error\n while (true) {\n try {\n sdk = await input.reconnect(input.signal)\n break\n } catch (resolveError) {\n if (input.signal.aborted) throw resolveError\n await setTimeout(250, undefined, { signal: input.signal })\n }\n }\n }\n }\n}\n\nexport function validateMiniTerminal() {\n if (!process.stdout.isTTY) fail(\"opencode mini requires a TTY stdout\")\n}\n\n/** @internal Exported for testing. */\nexport function mergeInput(piped: string | undefined, prompt: string | undefined) {\n if (!prompt) return piped || undefined\n if (!piped) return prompt\n return piped + \"\\n\" + prompt\n}\n\nfunction validate(input: MiniCommandInput) {\n validateMiniTerminal()\n if (input.replayLimit !== undefined && (!Number.isInteger(input.replayLimit) || input.replayLimit <= 0)) {\n fail(\"--replay-limit must be a positive integer\")\n }\n if (input.fork && !input.continue && !input.session) fail(\"--fork requires --continue or --session\")\n}\n\nfunction localDirectory(): string {\n const root = process.env.PWD ?? process.cwd()\n try {\n process.chdir(root)\n return process.cwd()\n } catch {\n throw new MiniInputError(`Failed to change directory to ${root}`)\n }\n}\n\nfunction parseModel(value?: string) {\n try {\n return parseSessionTargetModel(value)\n } catch {\n throw new MiniInputError(\"--model must use the format provider/model[#variant]\")\n }\n}\n\nfunction prepareTarget(requestedAgent?: string): SessionTargetPreparation {\n return async (input) => ({ model: input.model, agent: requestedAgent ?? input.agent })\n}\n\nfunction fail(message: string): never {\n process.stderr.write(`\\x1b[91m\\x1b[1mError: \\x1b[0m${message}\\n`)\n process.exit(1)\n}\n", | ||
| "import type { MiniFrontendInput } from \"@opencode-ai/tui/mini\"\nimport { createModelPreferenceRepository } from \"@opencode-ai/tui/model-preference\"\nimport { Global } from \"@opencode-ai/util/global\"\nimport fs from \"node:fs\"\nimport { readFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { ReadStream } from \"node:tty\"\n\nexport const INTERACTIVE_INPUT_ERROR = \"opencode mini requires a controlling terminal for input\"\n\nexport type InteractiveStdin = {\n stdin: NodeJS.ReadStream\n cleanup(): void\n}\n\ntype MiniHost = MiniFrontendInput[\"host\"]\n\nfunction preferences(statePath: string): MiniHost[\"preferences\"] {\n const repository = createModelPreferenceRepository(path.join(statePath, \"model.json\"))\n return {\n async resolveVariant(model) {\n if (!model) return\n return repository.resolveVariant(model)\n },\n async saveVariant(model, variant) {\n if (!model) return\n await repository.saveVariant(model, variant).catch(() => undefined)\n },\n }\n}\n\nfunction signal(name: \"SIGINT\" | \"SIGUSR2\"): MiniHost[\"signals\"][\"sigint\"] {\n return {\n subscribe(listener) {\n let subscribed = true\n process.on(name, listener)\n return () => {\n if (!subscribed) return\n subscribed = false\n process.off(name, listener)\n }\n },\n }\n}\n\nfunction createTrace(\n logPath: string,\n diagnostics: { pid: number; cwd: string; argv: string[] },\n): MiniHost[\"diagnostics\"][\"trace\"] {\n if (!process.env.OPENCODE_DIRECT_TRACE) return\n const stamp = new Date()\n .toISOString()\n .replace(/[-:]/g, \"\")\n .replace(/\\.\\d+Z$/, \"Z\")\n const target = path.join(logPath, \"direct\", `${stamp}-${diagnostics.pid}.jsonl`)\n const text = (data: unknown) =>\n JSON.stringify(data, (_key, value) => (typeof value === \"bigint\" ? String(value) : value), 0)\n fs.mkdirSync(path.dirname(target), { recursive: true })\n fs.writeFileSync(\n path.join(logPath, \"direct\", \"latest.json\"),\n text({\n time: new Date().toISOString(),\n ...diagnostics,\n path: target,\n }) + \"\\n\",\n )\n const trace = {\n write(type: string, data?: unknown) {\n fs.appendFileSync(\n target,\n text({\n time: new Date().toISOString(),\n pid: diagnostics.pid,\n type,\n data,\n }) + \"\\n\",\n )\n },\n }\n trace.write(\"trace.start\", {\n argv: diagnostics.argv,\n cwd: diagnostics.cwd,\n path: target,\n })\n return trace\n}\n\nfunction openTerminalStdin(target: string): NodeJS.ReadStream {\n return new ReadStream(fs.openSync(target, \"r\"))\n}\n\nexport function resolveInteractiveStdin(\n stdin: NodeJS.ReadStream = process.stdin,\n open: (target: string) => NodeJS.ReadStream = openTerminalStdin,\n platform: NodeJS.Platform = process.platform,\n): InteractiveStdin {\n if (stdin.isTTY) return { stdin, cleanup() {} }\n const target = platform === \"win32\" ? \"CONIN$\" : \"/dev/tty\"\n try {\n const source = open(target)\n let cleaned = false\n return {\n stdin: source,\n cleanup() {\n if (cleaned) return\n cleaned = true\n source.destroy()\n },\n }\n } catch (error) {\n throw new Error(INTERACTIVE_INPUT_ERROR, { cause: error })\n }\n}\n\n/** @internal Exported for owner-local resource cleanup tests. */\nexport async function usingInteractiveStdin<T>(\n run: (terminal: InteractiveStdin) => Promise<T>,\n resolve: () => InteractiveStdin = resolveInteractiveStdin,\n) {\n const terminal = resolve()\n try {\n return await run(terminal)\n } finally {\n terminal.cleanup()\n }\n}\n\n/** @internal Exported for owner-local host capability tests. */\nexport function createMiniHost(input: {\n terminal: InteractiveStdin\n directory: string\n paths?: { home: string; state: string; log: string }\n}): MiniHost {\n const paths = input.paths ?? {\n home: Global.Path.home,\n state: Global.Path.state,\n log: Global.Path.log,\n }\n const diagnostics = {\n pid: process.pid,\n cwd: input.directory,\n argv: process.argv.slice(2),\n }\n return {\n terminal: { stdin: input.terminal.stdin },\n platform: process.platform,\n stdout: {\n write(value) {\n process.stdout.write(value)\n },\n },\n files: {\n readText: (url) => readFile(new URL(url), \"utf8\"),\n },\n editor: {\n async open(options) {\n const { openEditor } = await import(\"@opencode-ai/tui/editor\")\n return openEditor(options)\n },\n },\n paths: { home: paths.home },\n signals: {\n sigint: signal(\"SIGINT\"),\n sigusr2: signal(\"SIGUSR2\"),\n },\n startup: {\n showTiming: [\"1\", \"true\"].includes(process.env.OPENCODE_SHOW_TTFD?.toLowerCase() ?? \"\"),\n now: () => performance.now(),\n },\n diagnostics: {\n trace: createTrace(paths.log, diagnostics),\n },\n preferences: preferences(paths.state),\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "E7271AE278F12DF764756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "0FA444C473521EC864756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/utils/image-input.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Encoding } from \"effect\"\nimport type { ImageInput } from \"../../image\"\nimport { InvalidRequestReason, AIError } from \"../../schema\"\n\nconst invalid = (module: string, message: string) =>\n new AIError({\n module,\n method: \"generate\",\n reason: new InvalidRequestReason({ message }),\n })\n\nexport const dataUrl = (input: Extract<ImageInput, { readonly type: \"bytes\" }>) =>\n `data:${input.mediaType};base64,${Encoding.encodeBase64(input.data)}`\n\nexport const decodeDataUrl = (\n url: string,\n module: string,\n): Effect.Effect<{ readonly mediaType: string; readonly data: Uint8Array } | undefined, AIError> => {\n if (!url.startsWith(\"data:\")) return Effect.succeed(undefined)\n const match = /^data:([^;,]+);base64,(.*)$/s.exec(url)\n if (!match) return Effect.fail(invalid(module, \"Image data URLs must contain a MIME type and base64 data\"))\n return Effect.fromResult(Encoding.decodeBase64(match[2])).pipe(\n Effect.mapError(() => invalid(module, \"Image data URL contains invalid base64 data\")),\n Effect.map((data) => ({ mediaType: match[1], data })),\n )\n}\n\nexport const invalidImageInput = invalid\n\nexport const ImageInputs = {\n dataUrl,\n decodeDataUrl,\n invalid: invalidImageInput,\n} as const\n" | ||
| ], | ||
| "mappings": ";mHAIA,SAAM,EAAU,CAAC,EAAgB,IAC/B,IAAI,EAAQ,CACV,SACA,OAAQ,WACR,OAAQ,IAAI,EAAqB,CAAE,SAAQ,CAAC,CAC9C,CAAC,EAEU,EAAU,CAAC,IACtB,QAAQ,EAAM,oBAAoB,EAAS,aAAa,EAAM,IAAI,IAEvD,EAAgB,CAC3B,EACA,IACkG,CAClG,GAAI,CAAC,EAAI,WAAW,OAAO,EAAG,OAAO,EAAO,QAAQ,MAAS,EAC7D,IAAM,EAAQ,+BAA+B,KAAK,CAAG,EACrD,GAAI,CAAC,EAAO,OAAO,EAAO,KAAK,EAAQ,EAAQ,0DAA0D,CAAC,EAC1G,OAAO,EAAO,WAAW,EAAS,aAAa,EAAM,EAAE,CAAC,EAAE,KACxD,EAAO,SAAS,IAAM,EAAQ,EAAQ,6CAA6C,CAAC,EACpF,EAAO,IAAI,CAAC,KAAU,CAAE,UAAW,EAAM,GAAI,MAAK,EAAE,CACtD,GAGW,EAAoB,EAEpB,EAAc,CACzB,UACA,gBACA,QAAS,CACX", | ||
| "debugId": "64E124A427FD2CC864756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/prompt.shared.ts"], | ||
| "sourcesContent": [ | ||
| "// Pure state machine for the prompt input.\n//\n// Handles history ring navigation and prompt text helpers. All functions are\n// pure -- they take state in and return new state out, with no side effects.\n//\n// The history ring (PromptHistoryState) stores past prompts and tracks\n// the current browse position. When the user arrows up at cursor offset 0,\n// the current draft is saved and history begins. Arrowing past the end\n// restores the draft.\nexport { displayCharAt, displaySlice, mentionTriggerIndex } from \"../prompt/display\"\nimport { stringWidth } from \"../util/string-width\"\nimport type { RunPrompt } from \"./types\"\n\nconst HISTORY_LIMIT = 200\n\nexport type PromptHistoryState = {\n items: RunPrompt[]\n index: number | null\n draft: string\n}\n\nexport type PromptMove = {\n state: PromptHistoryState\n text?: string\n cursor?: number\n apply: boolean\n}\n\nexport function promptCopy(prompt: RunPrompt): RunPrompt {\n return {\n text: prompt.text,\n parts: structuredClone(prompt.parts),\n ...(prompt.mode ? { mode: prompt.mode } : {}),\n ...(prompt.command ? { command: prompt.command } : {}),\n }\n}\n\nexport function promptSame(a: RunPrompt, b: RunPrompt): boolean {\n return (\n a.mode === b.mode &&\n a.text === b.text &&\n JSON.stringify(a.parts) === JSON.stringify(b.parts) &&\n JSON.stringify(a.command) === JSON.stringify(b.command)\n )\n}\n\nexport function isExitCommand(input: string): boolean {\n const text = input.trim().toLowerCase()\n return text === \"/exit\" || text === \"/quit\" || text === \":q\"\n}\n\nexport function isNewCommand(input: string): boolean {\n return input.trim().toLowerCase() === \"/new\"\n}\n\nexport function isCompactCommand(input: string): boolean {\n const text = input.trim().toLowerCase()\n return text === \"/compact\" || text === \"/summarize\"\n}\n\nexport function createPromptHistory(items?: RunPrompt[]): PromptHistoryState {\n const list = (items ?? []).filter((item) => item.text.trim().length > 0).map(promptCopy)\n const next: RunPrompt[] = []\n for (const item of list) {\n if (next.length > 0 && promptSame(next[next.length - 1], item)) {\n continue\n }\n\n next.push(item)\n }\n\n return {\n items: next.slice(-HISTORY_LIMIT),\n index: null,\n draft: \"\",\n }\n}\n\nexport function pushPromptHistory(state: PromptHistoryState, prompt: RunPrompt): PromptHistoryState {\n if (!prompt.text.trim()) {\n return state\n }\n\n const next = promptCopy(prompt)\n if (state.items[state.items.length - 1] && promptSame(state.items[state.items.length - 1], next)) {\n return {\n ...state,\n index: null,\n draft: \"\",\n }\n }\n\n const items = [...state.items, next].slice(-HISTORY_LIMIT)\n return {\n ...state,\n items,\n index: null,\n draft: \"\",\n }\n}\n\nexport function movePromptHistory(state: PromptHistoryState, dir: -1 | 1, text: string, cursor: number): PromptMove {\n if (state.items.length === 0) {\n return { state, apply: false }\n }\n\n if (dir === -1 && cursor !== 0) {\n return { state, apply: false }\n }\n\n if (dir === 1 && cursor !== stringWidth(text)) {\n return { state, apply: false }\n }\n\n if (state.index === null) {\n if (dir === 1) {\n return { state, apply: false }\n }\n\n const idx = state.items.length - 1\n return {\n state: {\n ...state,\n index: idx,\n draft: text,\n },\n text: state.items[idx].text,\n cursor: 0,\n apply: true,\n }\n }\n\n const idx = state.index + dir\n if (idx < 0) {\n return { state, apply: false }\n }\n\n if (idx >= state.items.length) {\n return {\n state: {\n ...state,\n index: null,\n },\n text: state.draft,\n cursor: stringWidth(state.draft),\n apply: true,\n }\n }\n\n return {\n state: {\n ...state,\n index: idx,\n },\n text: state.items[idx].text,\n cursor: dir === -1 ? 0 : stringWidth(state.items[idx].text),\n apply: true,\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "88765B61E2DE421964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "61F09E53755C316C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/resolve.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport type { OpenCodeClient } from \"@opencode-ai/client\"\n\n// Resolve through the MCP-owned integrationID rather than matching integration names: the shared\n// integration registry also holds provider/plugin integrations, whose names could collide with a server.\n// Fails when the server is unknown; returns undefined when the server has no integration (e.g. a local\n// or anonymous server), leaving that case for the caller to interpret.\nexport const resolveIntegration = (client: OpenCodeClient, name: string, location: { directory: string }) =>\n Effect.gen(function* () {\n const servers = yield* Effect.promise(() => client.mcp.list({ location }))\n const server = servers.data.find((entry) => entry.name === name)\n if (!server) return yield* Effect.fail(new Error(`MCP server not found: ${name}`))\n const integrationID = server.integrationID\n if (!integrationID) return undefined\n return yield* Effect.promise(() => client.integration.get({ integrationID, location })).pipe(\n Effect.map((result) => result.data ?? undefined),\n )\n })\n" | ||
| ], | ||
| "mappings": ";oDAOO,IAAM,EAAqB,CAAC,EAAwB,EAAc,IACvE,EAAO,IAAI,SAAU,EAAG,CAEtB,IAAM,GADU,MAAO,EAAO,QAAQ,IAAM,EAAO,IAAI,KAAK,CAAE,UAAS,CAAC,CAAC,GAClD,KAAK,KAAK,CAAC,IAAU,EAAM,OAAS,CAAI,EAC/D,GAAI,CAAC,EAAQ,OAAO,MAAO,EAAO,KAAS,MAAM,yBAAyB,GAAM,CAAC,EACjF,IAAM,EAAgB,EAAO,cAC7B,GAAI,CAAC,EAAe,OACpB,OAAO,MAAO,EAAO,QAAQ,IAAM,EAAO,YAAY,IAAI,CAAE,gBAAe,UAAS,CAAC,CAAC,EAAE,KACtF,EAAO,IAAI,CAAC,IAAW,EAAO,MAAQ,MAAS,CACjD,EACD", | ||
| "debugId": "4C861A415406FE5264756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/set.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.set,\n Effect.fn(\"cli.service.set\")(function* (input) {\n yield* ServiceConfig.set(input.key, input.value)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";k0BAKA,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,SACnC,OAAO,QAAG,sBAAiB,OAAE,cAAU,MAAC,OAAO,MAC7C,WAAO,OAAc,SAAI,OAAM,SAAK,OAAM,KAAK,EAChD,CACH", | ||
| "debugId": "EEB42227360BEA1964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/logo.ts"], | ||
| "sourcesContent": [ | ||
| "export const logo = {\n left: [\" \", \"█▀▀█ █▀▀█ █▀▀█ █▀▀▄\", \"█__█ █__█ █^^^ █__█\", \"▀▀▀▀ █▀▀▀ ▀▀▀▀ ▀~~▀\"],\n right: [\" ▄ \", \"█▀▀▀ █▀▀█ █▀▀█ █▀▀█\", \"█___ █__█ █__█ █^^^\", \"▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀\"],\n}\n\nexport const go = {\n left: [\" \", \"█▀▀▀\", \"█_^█\", \"▀▀▀▀\"],\n right: [\" \", \"█▀▀█\", \"█__█\", \"▀▀▀▀\"],\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,IAAM,EAAO,CAClB,KAAM,CAAC,sBAAuB,sGAAsB,yDAAuB,2FAAqB,EAChG,MAAO,CAAC,2BAAsB,sGAAuB,oDAAuB,qGAAqB,CACnG,EAEa,EAAK,CAChB,KAAM,CAAC,OAAQ,2BAAO,iBAAQ,0BAAM,EACpC,MAAO,CAAC,OAAQ,2BAAO,iBAAQ,0BAAM,CACvC", | ||
| "debugId": "F9FECD62C57EF38664756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/run.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServerConnection } from \"../../services/server-connection\"\n\nexport default Runtime.handler(Commands.commands.run, (input) =>\n Effect.gen(function* () {\n const { runNonInteractive } = yield* Effect.promise(() => import(\"../../run/run\"))\n const separator = process.argv.indexOf(\"--\", 2)\n const server = yield* ServerConnection.resolve({\n server: Option.getOrUndefined(input.server),\n standalone: input.standalone,\n })\n yield* Effect.promise(() =>\n runNonInteractive({\n server,\n message: [...input.message, ...(separator === -1 ? [] : process.argv.slice(separator + 1))],\n continue: input.continue,\n session: Option.getOrUndefined(input.session),\n fork: input.fork,\n model: Option.getOrUndefined(input.model),\n agent: Option.getOrUndefined(input.agent),\n format: input.format,\n file: [...input.file],\n title: Option.getOrUndefined(input.title),\n thinking: input.thinking,\n auto: input.auto || input.yolo || input.dangerouslySkipPermissions,\n }),\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+9BAKA,SAAe,SAAQ,aAAQ,OAAS,cAAS,SAAK,MAAC,SACrD,OAAO,SAAI,cAAU,OAAG,MACtB,SAAQ,0BAAsB,WAAO,OAAO,aAAQ,SAAa,wCAAgB,OAC3E,OAAY,aAAQ,UAAK,aAAQ,UAAM,MAAC,EACxC,EAAS,MAAO,EAAiB,QAAQ,CAC7C,OAAQ,EAAO,eAAe,EAAM,MAAM,EAC1C,WAAY,EAAM,UACpB,CAAC,EACD,MAAO,EAAO,QAAQ,IACpB,EAAkB,CAChB,SACA,QAAS,CAAC,GAAG,EAAM,QAAS,GAAI,IAAc,GAAK,CAAC,EAAI,QAAQ,KAAK,MAAM,EAAY,CAAC,CAAE,EAC1F,SAAU,EAAM,SAChB,QAAS,EAAO,eAAe,EAAM,OAAO,EAC5C,KAAM,EAAM,KACZ,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,OAAQ,EAAM,OACd,KAAM,CAAC,GAAG,EAAM,IAAI,EACpB,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,SAAU,EAAM,SAChB,KAAM,EAAM,MAAQ,EAAM,MAAQ,EAAM,0BAC1C,CAAC,CACH,EACD,CACH", | ||
| "debugId": "E82495525A356EED64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "38CE5DDC447A5BD264756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/auth/connect.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode, type IntegrationCommandStatusOutput, type OpenCodeClient } from \"@opencode-ai/client/promise\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.auth.commands.connect,\n Effect.fn(\"cli.auth.connect\")(function* (input) {\n process.stdout.write(\"Connecting...\" + EOL + EOL)\n const endpoint = yield* Service.ensure(yield* ServiceConfig.options())\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n yield* request(() => client.integration.wellknown.add({ url: input.url, location }))\n const integrationID = input.url.replace(/\\/+$/, \"\")\n const started = yield* request(() =>\n client.integration.command.connect({ integrationID, methodID: \"login\", location }),\n )\n yield* Effect.addFinalizer(() =>\n request(() =>\n client.integration.command.cancel({ integrationID, attemptID: started.data.attemptID, location }),\n ).pipe(Effect.ignore),\n )\n\n const status = yield* wait(client, integrationID, started.data.attemptID)\n if (status.status === \"failed\") return yield* Effect.fail(new Error(status.message))\n if (status.status === \"expired\") return yield* Effect.fail(new Error(\"Authentication expired\"))\n process.stdout.write(\"Connected\" + EOL)\n }),\n)\n\nconst wait = (\n client: OpenCodeClient,\n integrationID: string,\n attemptID: string,\n shown = false,\n): Effect.Effect<Exclude<IntegrationCommandStatusOutput[\"data\"], { status: \"pending\" }>, unknown> =>\n Effect.gen(function* () {\n const response = yield* request(() => client.integration.command.status({ integrationID, attemptID, location }))\n if (response.data.status !== \"pending\") return response.data\n const output = response.data.message?.trim()\n if (!shown && output) process.stdout.write(output + EOL + EOL)\n yield* Effect.sleep(500)\n return yield* wait(client, integrationID, attemptID, shown || !!output)\n })\n\nfunction request<A>(task: () => Promise<A>) {\n return Effect.tryPromise({ try: task, catch: (cause) => cause })\n}\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAM,OAAW,MAAE,eAAW,aAAQ,SAAI,MAAE,OAE7B,SAAQ,aACrB,OAAS,cAAS,UAAK,cAAS,aAChC,OAAO,QAAG,uBAAkB,OAAE,cAAU,MAAC,EAAO,CAC9C,QAAQ,OAAO,MAAM,gBAAkB,EAAM,CAAG,EAChD,IAAM,EAAW,MAAO,EAAQ,OAAO,MAAO,EAAc,QAAQ,CAAC,EAC/D,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAC1F,MAAO,EAAQ,IAAM,EAAO,YAAY,UAAU,IAAI,CAAE,IAAK,EAAM,IAAK,UAAS,CAAC,CAAC,EACnF,IAAM,EAAgB,EAAM,IAAI,QAAQ,OAAQ,EAAE,EAC5C,EAAU,MAAO,EAAQ,IAC7B,EAAO,YAAY,QAAQ,QAAQ,CAAE,gBAAe,SAAU,QAAS,UAAS,CAAC,CACnF,EACA,MAAO,EAAO,aAAa,IACzB,EAAQ,IACN,EAAO,YAAY,QAAQ,OAAO,CAAE,gBAAe,UAAW,EAAQ,KAAK,UAAW,UAAS,CAAC,CAClG,EAAE,KAAK,EAAO,MAAM,CACtB,EAEA,IAAM,EAAS,MAAO,EAAK,EAAQ,EAAe,EAAQ,KAAK,SAAS,EACxE,GAAI,EAAO,SAAW,SAAU,OAAO,MAAO,EAAO,KAAS,MAAM,EAAO,OAAO,CAAC,EACnF,GAAI,EAAO,SAAW,UAAW,OAAO,MAAO,EAAO,KAAS,MAAM,wBAAwB,CAAC,EAC9F,QAAQ,OAAO,MAAM,YAAc,CAAG,EACvC,CACH,EAEM,EAAO,CACX,EACA,EACA,EACA,EAAQ,KAER,EAAO,IAAI,SAAU,EAAG,CACtB,IAAM,EAAW,MAAO,EAAQ,IAAM,EAAO,YAAY,QAAQ,OAAO,CAAE,gBAAe,YAAW,UAAS,CAAC,CAAC,EAC/G,GAAI,EAAS,KAAK,SAAW,UAAW,OAAO,EAAS,KACxD,IAAM,EAAS,EAAS,KAAK,SAAS,KAAK,EAC3C,GAAI,CAAC,GAAS,EAAQ,QAAQ,OAAO,MAAM,EAAS,EAAM,CAAG,EAE7D,OADA,MAAO,EAAO,MAAM,GAAG,EAChB,MAAO,EAAK,EAAQ,EAAe,EAAW,GAAS,CAAC,CAAC,CAAM,EACvE,EAEH,SAAS,CAAU,CAAC,EAAwB,CAC1C,OAAO,EAAO,WAAW,CAAE,IAAK,EAAM,MAAO,CAAC,IAAU,CAAM,CAAC", | ||
| "debugId": "769047624CB0754164756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/openai-compatible-chat.ts"], | ||
| "sourcesContent": [ | ||
| "import { Route, type RouteRoutedLanguageModelInput } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport * as OpenAIChat from \"./openai-chat\"\n\nconst ADAPTER = \"openai-compatible-chat\"\n\nexport type OpenAICompatibleChatLanguageModelInput = RouteRoutedLanguageModelInput\n\n/**\n * Route for non-OpenAI providers that expose an OpenAI Chat-compatible\n * `/chat/completions` endpoint. Reuses `OpenAIChat.protocol` end-to-end and\n * overrides only the route id so providers can be resolved per-family without\n * colliding with native OpenAI. Provider helpers configure the route endpoint\n * before model selection.\n */\nexport const route = Route.make({\n id: ADAPTER,\n providerMetadataKey: \"openai\",\n protocol: OpenAIChat.protocol,\n endpoint: Endpoint.path(\"/chat/completions\"),\n framing: Framing.sse,\n})\n\nexport * as OpenAICompatibleChat from \"./openai-compatible-chat\"\n" | ||
| ], | ||
| "mappings": ";mHAKA,SAAM,EAAU,yBAWH,EAAQ,EAAM,KAAK,CAC9B,GAAI,EACJ,oBAAqB,SACrB,SAAqB,EACrB,SAAU,EAAS,KAAK,mBAAmB,EAC3C,QAAS,EAAQ,GACnB,CAAC", | ||
| "debugId": "4FE623DA6C173E7D64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/server-process.ts", "src/commands/handlers/serve.ts"], | ||
| "sourcesContent": [ | ||
| "export * as ServerProcess from \"./server-process\"\n\nimport { NodeServices } from \"@effect/platform-node\"\nimport { Service, type DiscoverOptions, type Info } from \"@opencode-ai/client/effect/service\"\nimport { LayerNode } from \"@opencode-ai/util/effect/layer-node\"\nimport { Global } from \"@opencode-ai/util/global\"\nimport { OPENCODE_CHANNEL, OPENCODE_VERSION } from \"./version\"\nimport { AppProcess } from \"@opencode-ai/util/process\"\nimport { randomBytes, randomUUID } from \"node:crypto\"\nimport path from \"node:path\"\nimport { Effect, FileSystem, Logger, Option, Redacted, Schedule, Schema } from \"effect\"\nimport { HttpServer } from \"effect/unstable/http\"\nimport { Env } from \"./env\"\nimport { ServiceConfig } from \"./services/service-config\"\nimport { Updater } from \"./services/updater\"\n\nexport type Mode = \"default\" | \"service\" | \"stdio\"\n\nexport type Options = {\n readonly mode: Mode\n readonly hostname?: string\n readonly port?: number\n}\n\n// The process effect lives until server shutdown; tracing it would parent every request to one process-lifetime trace.\nexport const run = Effect.fnUntraced(function* (options: Options) {\n return yield* processEffect(options).pipe(\n Effect.provide(Updater.layer),\n Effect.provide(\n LayerNode.compile(LayerNode.group([Global.node, AppProcess.node]), [\n [\n Global.node,\n Global.layerWith(process.env.OPENCODE_CONFIG_DIR ? { config: process.env.OPENCODE_CONFIG_DIR } : {}),\n ],\n ]),\n ),\n Effect.provide(NodeServices.layer),\n )\n})\n\nconst processEffect = Effect.fnUntraced(function* (options: Options) {\n if (options.mode === \"service\") yield* Effect.sync(() => process.chdir(Global.Path.home))\n return yield* Effect.scoped(\n Effect.gen(function* () {\n const serviceOptions = options.mode === \"service\" ? yield* ServiceConfig.options() : undefined\n const config = options.mode === \"service\" ? yield* ServiceConfig.read() : {}\n const hostname = options.hostname ?? config.hostname ?? \"127.0.0.1\"\n const port = options.port ?? config.port ?? (options.mode === \"service\" ? ServiceConfig.defaultPort() : undefined)\n if (\n serviceOptions !== undefined &&\n port !== undefined &&\n (yield* Service.incumbent({ ...serviceOptions, url: serviceURL(hostname, port) })) !== undefined\n )\n return\n const { start } = yield* Effect.promise(() => import(\"@opencode-ai/server/process\"))\n const environmentPassword = yield* Env.password\n // Keep the lease credential out of the environment inherited by tools.\n if (options.mode === \"stdio\") {\n delete process.env.OPENCODE_PASSWORD\n delete process.env.OPENCODE_SERVER_PASSWORD\n }\n const password =\n options.mode === \"service\"\n ? config.password || randomBytes(32).toString(\"base64url\")\n : environmentPassword\n ? Redacted.value(environmentPassword)\n : randomBytes(32).toString(\"base64url\")\n if (!password) return yield* Effect.fail(new Error(\"Missing server password\"))\n const instanceID = randomUUID()\n const server = yield* start(\n {\n app: {\n name: process.env.OPENCODE_CLIENT ?? \"cli\",\n version: OPENCODE_VERSION,\n channel: OPENCODE_CHANNEL,\n },\n hostname,\n port,\n password,\n simulation: truthy(process.env.OPENCODE_SIMULATE),\n database: {\n path:\n process.env.OPENCODE_DB ??\n ([\"latest\", \"beta\", \"prod\"].includes(OPENCODE_CHANNEL) ||\n process.env.OPENCODE_DISABLE_CHANNEL_DB === \"1\" ||\n process.env.OPENCODE_DISABLE_CHANNEL_DB === \"true\"\n ? \"opencode.db\"\n : `opencode-${OPENCODE_CHANNEL.replace(/[^a-zA-Z0-9._-]/g, \"-\")}.db`),\n },\n models: {\n url: process.env.OPENCODE_MODELS_URL,\n file: process.env.OPENCODE_MODELS_PATH,\n fetch: !truthy(process.env.OPENCODE_DISABLE_MODELS_FETCH),\n },\n observability: {\n endpoint: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,\n headers: process.env.OTEL_EXPORTER_OTLP_HEADERS,\n },\n config: {\n directory: process.env.OPENCODE_CONFIG_DIR,\n project: !truthy(\n process.env.OPENCODE_CONFIG_PROJECT_DISABLE ?? process.env.OPENCODE_DISABLE_PROJECT_CONFIG,\n ),\n file: process.env.OPENCODE_CONFIG,\n content: process.env.OPENCODE_CONFIG_CONTENT,\n },\n windows: {\n gitbash: process.env.OPENCODE_GIT_BASH_PATH,\n },\n fs: {\n filewatcher: !truthy(\n process.env.OPENCODE_FILEWATCHER_DISABLE ?? process.env.OPENCODE_DISABLE_FILEWATCHER,\n ),\n fff:\n process.env.OPENCODE_DISABLE_FFF === undefined\n ? process.platform !== \"win32\"\n : !truthy(process.env.OPENCODE_DISABLE_FFF),\n },\n },\n serviceOptions === undefined\n ? undefined\n : {\n instanceID,\n onListen: (address, shutdown) =>\n Effect.gen(function* () {\n if (!config.password) yield* ServiceConfig.password(password)\n return yield* register(address, password, instanceID, serviceOptions.file, shutdown)\n }),\n },\n ).pipe(\n Effect.provide(Logger.layer([], { mergeWithExisting: false })),\n Effect.catch((error) => {\n if (serviceOptions === undefined || port === undefined || !addressInUse(error)) return Effect.fail(error)\n return recognizeIncumbent(serviceOptions, hostname, port).pipe(\n Effect.flatMap((found) =>\n found\n ? Effect.void\n : Effect.fail(\n new Error(\n `Managed service port ${port} on ${hostname} is already in use by another process. ` +\n \"Configure another port with `opencode service set port <port>` and start the service again.\",\n { cause: error },\n ),\n ),\n ),\n )\n }),\n )\n if (server === undefined) return\n const url = HttpServer.formatAddress(server.address)\n console.log(options.mode === \"stdio\" ? JSON.stringify({ url }) : `server listening on ${url}`)\n if (options.mode === \"default\" && !environmentPassword) console.log(`server password ${password}`)\n const updater = yield* Updater.Service\n yield* updater.check().pipe(Effect.schedule(Schedule.spaced(\"10 minutes\")), Effect.forkScoped)\n return yield* options.mode === \"service\"\n ? server.shutdown\n : options.mode === \"stdio\"\n ? waitForStdinClose()\n : Effect.never\n }).pipe(Effect.annotateLogs({ role: \"server\" })),\n )\n})\n\nconst infoJson = Schema.fromJsonString(Service.Info)\nconst encodeInfo = Schema.encodeEffect(infoJson)\nconst decodeInfo = Schema.decodeUnknownEffect(infoJson)\n\nconst register = Effect.fnUntraced(function* (\n address: HttpServer.Address,\n password: string,\n id: string,\n file: string,\n shutdown: Effect.Effect<void>,\n) {\n const fs = yield* FileSystem.FileSystem\n const temp = file + \".\" + id + \".tmp\"\n yield* fs.makeDirectory(path.dirname(file), { recursive: true })\n const info = {\n id,\n version: OPENCODE_VERSION,\n url: HttpServer.formatAddress(address),\n pid: process.pid,\n password,\n }\n const encoded = yield* encodeInfo(info)\n const current = fs.readFileString(file).pipe(\n Effect.flatMap(decodeInfo),\n Effect.orElseSucceed(() => undefined),\n )\n const owns = (found: Info | undefined) =>\n found?.id === info.id &&\n found.version === info.version &&\n found.url === info.url &&\n found.pid === info.pid &&\n found.password === info.password\n yield* fs.writeFileString(temp, encoded, { mode: 0o600 }).pipe(Effect.andThen(fs.rename(temp, file)))\n yield* current.pipe(\n Effect.filterOrFail(owns),\n Effect.repeat(Schedule.spaced(\"5 seconds\")),\n Effect.ignore,\n Effect.andThen(shutdown),\n Effect.forkScoped,\n )\n return current.pipe(\n Effect.flatMap((found) => (owns(found) ? fs.remove(file) : Effect.void)),\n Effect.ignore,\n )\n})\n\nconst recognizeIncumbent = Effect.fnUntraced(function* (options: DiscoverOptions, hostname: string, port: number) {\n const found = yield* Service.incumbent({ ...options, url: serviceURL(hostname, port) }).pipe(\n Effect.filterOrFail((value) => value !== undefined),\n Effect.retry(Schedule.spaced(\"100 millis\")),\n Effect.timeoutOption(\"15 seconds\"),\n )\n return Option.isSome(found)\n})\n\nfunction serviceURL(hostname: string, port: number) {\n return `http://${hostname.includes(\":\") ? `[${hostname}]` : hostname}:${port}`\n}\n\nfunction truthy(value?: string) {\n return value === \"1\" || value?.toLowerCase() === \"true\"\n}\n\nfunction addressInUse(error: unknown): boolean {\n if (typeof error !== \"object\" || error === null) return false\n if (\"code\" in error && error.code === \"EADDRINUSE\") return true\n return \"cause\" in error && addressInUse(error.cause)\n}\n\nfunction waitForStdinClose() {\n return Effect.callback<void>((resume) => {\n const close = () => resume(Effect.void)\n process.stdin.once(\"end\", close)\n process.stdin.once(\"close\", close)\n process.stdin.resume()\n if (process.stdin.readableEnded || process.stdin.destroyed) close()\n return Effect.sync(() => {\n process.stdin.off(\"end\", close)\n process.stdin.off(\"close\", close)\n process.stdin.pause()\n })\n })\n}\n", | ||
| "import { Effect, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServerProcess } from \"../../server-process\"\n\nexport default Runtime.handler(\n Commands.commands.serve,\n Effect.fnUntraced(function* (input) {\n if (input.service && input.stdio) return yield* Effect.fail(new Error(\"--service and --stdio cannot be combined\"))\n return yield* ServerProcess.run({\n mode: input.service ? \"service\" : input.stdio ? \"stdio\" : \"default\",\n hostname: Option.getOrUndefined(input.hostname),\n port: Option.getOrUndefined(input.port),\n })\n }),\n)\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "7ECE1B7370817BF964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/editor.ts", "../tui/src/editor-zed-sqlite.bun.ts", "../tui/src/editor-zed.ts"], | ||
| "sourcesContent": [ | ||
| "import type { CliRenderer } from \"@opentui/core\"\nimport { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\"\nimport { readFile, rm, writeFile } from \"node:fs/promises\"\nimport os from \"node:os\"\nimport path from \"node:path\"\nimport { spawn } from \"node:child_process\"\nimport type { Stream } from \"node:stream\"\nimport { resolveZedDbPath, resolveZedSelection } from \"./editor-zed\"\n\nexport { normalizePromptContent } from \"./prompt/content\"\n\ntype EditorStdio = \"inherit\" | \"pipe\" | \"ignore\" | number | Stream\n\nexport async function openEditor(input: { value: string; renderer: CliRenderer; cwd?: string; stdin?: EditorStdio }) {\n const editor = process.env.VISUAL || process.env.EDITOR\n if (!editor) return\n const file = path.join(os.tmpdir(), `${Date.now()}.md`)\n await writeFile(file, input.value)\n input.renderer.suspend()\n input.renderer.currentRenderBuffer.clear()\n try {\n await new Promise<void>((resolve, reject) => {\n const parts = editor.split(\" \")\n const child = spawn(parts[0]!, [...parts.slice(1), file], {\n cwd: input.cwd && existsSync(input.cwd) ? input.cwd : process.cwd(),\n stdio: [input.stdin ?? \"inherit\", \"inherit\", \"inherit\"],\n shell: process.platform === \"win32\",\n })\n child.on(\"error\", reject)\n child.on(\"exit\", (code, signal) => {\n if (code === 0) return resolve()\n reject(new Error(`Editor exited with ${signal ? `signal ${signal}` : `code ${code}`}`))\n })\n })\n return (await readFile(file, \"utf8\")) || undefined\n } finally {\n await rm(file, { force: true }).catch(() => {})\n input.renderer.currentRenderBuffer.clear()\n input.renderer.resume()\n input.renderer.requestRender()\n }\n}\n\nexport function discoverEditorConnection(directory: string) {\n const root = path.join(os.homedir(), \".claude\", \"ide\")\n const contains = (parent: string) => {\n const resolved = path.resolve(parent)\n const relative = path.relative(resolved, path.resolve(directory))\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative)) ? resolved.length : 0\n }\n try {\n return readdirSync(root)\n .filter((entry) => entry.endsWith(\".lock\"))\n .flatMap((entry) => {\n const file = path.join(root, entry)\n const port = Number.parseInt(path.basename(file, \".lock\"), 10)\n if (!Number.isInteger(port) || port <= 0 || port > 65535) return []\n try {\n const value = JSON.parse(readFileSync(file, \"utf8\")) as Record<string, unknown>\n if (value.transport !== undefined && value.transport !== \"ws\") return []\n const folders = Array.isArray(value.workspaceFolders)\n ? value.workspaceFolders.filter((item): item is string => typeof item === \"string\")\n : []\n const score = Math.max(0, ...folders.map(contains))\n if (!score) return []\n return [\n {\n url: `ws://127.0.0.1:${port}`,\n authToken: typeof value.authToken === \"string\" ? value.authToken : undefined,\n source: `lock:${port}`,\n score,\n mtime: statSync(file).mtimeMs,\n },\n ]\n } catch {\n return []\n }\n })\n .sort((left, right) => right.score - left.score || right.mtime - left.mtime)\n .map(({ url, authToken, source }) => ({ url, authToken, source }))[0]\n } catch {\n return undefined\n }\n}\n\nexport const editorIntegration = {\n connection: discoverEditorConnection,\n selection: (directory: string) => resolveZedSelection(resolveZedDbPath() ?? \"\", directory),\n}\n", | ||
| "export { Database } from \"bun:sqlite\"\n", | ||
| "import { Database } from \"#zed-sqlite\"\nimport { statSync } from \"node:fs\"\nimport { readFile as readFileAsync } from \"node:fs/promises\"\nimport os from \"node:os\"\nimport path from \"node:path\"\nimport { Option, Schema } from \"effect\"\nimport type { EditorSelection } from \"./context/editor\"\n\nconst ZedEditorRowSchema = Schema.Struct({\n item_kind: Schema.String,\n editor_id: Schema.NullOr(Schema.Number),\n workspace_id: Schema.Number,\n workspace_paths: Schema.NullOr(Schema.String),\n timestamp: Schema.String,\n buffer_path: Schema.NullOr(Schema.String),\n})\n\nconst ZedSelectionRowSchema = Schema.Struct({\n selection_start: Schema.NullOr(Schema.Number),\n selection_end: Schema.NullOr(Schema.Number),\n})\n\nconst ZedEditorContentsSchema = Schema.Struct({\n contents: Schema.NullOr(Schema.String),\n})\n\nconst decodeZedEditorRow = Schema.decodeUnknownOption(ZedEditorRowSchema)\nconst decodeZedSelectionRow = Schema.decodeUnknownOption(ZedSelectionRowSchema)\nconst decodeZedEditorContents = Schema.decodeUnknownOption(ZedEditorContentsSchema)\n\nconst utf8 = new TextEncoder()\n\ntype ZedEditorRow = Schema.Schema.Type<typeof ZedEditorRowSchema>\ntype ZedActiveEditorRow = ZedEditorRow & { item_kind: \"Editor\"; editor_id: number }\n\nexport type ZedSelectionResult =\n | { type: \"selection\"; selection: EditorSelection }\n | { type: \"empty\" }\n | { type: \"unavailable\" }\n\nexport async function resolveZedSelection(dbPath: string, cwd = process.cwd()): Promise<ZedSelectionResult> {\n const active = queryZedActiveEditor(dbPath, cwd)\n if (active.type !== \"row\") return active\n\n const row = active.row\n if (!row.buffer_path) return { type: \"empty\" }\n\n const selections = queryZedEditorSelections(dbPath, row)\n if (selections.type !== \"selections\") return selections\n const byteRanges = selections.selections\n .flatMap((selection) => {\n if (selection.selection_start == null || selection.selection_end == null) return []\n return [\n {\n start: Math.min(selection.selection_start, selection.selection_end),\n end: Math.max(selection.selection_start, selection.selection_end),\n },\n ]\n })\n .sort((left, right) => left.start - right.start || left.end - right.end)\n if (byteRanges.length === 0) return { type: \"unavailable\" }\n\n const contents = queryZedEditorContents(dbPath, row)\n const text =\n contents.type === \"contents\" && contents.contents != null\n ? contents.contents\n : await readFileAsync(row.buffer_path, \"utf8\").catch(() => undefined)\n if (text == null) return { type: \"unavailable\" }\n\n const ranges = byteRanges.map((range) => {\n const startOffset = utf8ByteOffsetToStringIndex(text, range.start)\n const endOffset = utf8ByteOffsetToStringIndex(text, range.end)\n return {\n text: text.slice(startOffset, endOffset),\n selection: offsetsToSelection(text, startOffset, endOffset),\n }\n })\n\n return {\n type: \"selection\",\n selection: {\n filePath: row.buffer_path,\n source: \"zed\",\n ranges,\n },\n }\n}\n\nfunction queryZedActiveEditor(dbPath: string, cwd: string) {\n let db: Database | undefined\n try {\n db = new Database(dbPath, { readonly: true })\n const raw = db\n .query(\n `select\n i.kind as item_kind,\n e.item_id as editor_id,\n i.workspace_id as workspace_id,\n w.paths as workspace_paths,\n w.timestamp as timestamp,\n e.buffer_path as buffer_path\n from items i\n join panes p on p.pane_id = i.pane_id and p.workspace_id = i.workspace_id\n join workspaces w on w.workspace_id = i.workspace_id\n left join editors e on e.item_id = i.item_id and e.workspace_id = i.workspace_id\n where i.active = 1 and p.active = 1\n order by w.timestamp desc`,\n )\n .all()\n\n const rows = raw.flatMap((row) => {\n const parsed = decodeZedEditorRow(row)\n return Option.isSome(parsed) ? [parsed.value] : []\n })\n\n if (raw.length > 0 && rows.length === 0) return { type: \"unavailable\" as const }\n\n const row = rows\n .map((row) => ({ row, score: scoreZedWorkspace(row.workspace_paths, cwd) }))\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score || right.row.timestamp.localeCompare(left.row.timestamp))[0]?.row\n if (!row) return { type: \"empty\" as const }\n if (row.item_kind !== \"Editor\") return { type: \"unavailable\" as const }\n if (!isZedActiveEditorRow(row)) return { type: \"empty\" as const }\n return { type: \"row\" as const, row }\n } catch {\n return { type: \"unavailable\" as const }\n } finally {\n db?.close()\n }\n}\n\nfunction queryZedEditorSelections(dbPath: string, row: ZedActiveEditorRow) {\n let db: Database | undefined\n try {\n db = new Database(dbPath, { readonly: true })\n const raw = db\n .query(\n `select\n start as selection_start,\n end as selection_end\n from editor_selections\n where editor_id = $editorID and workspace_id = $workspaceID`,\n )\n .all({ $editorID: row.editor_id, $workspaceID: row.workspace_id })\n\n const selections = raw.flatMap((selection) => {\n const parsed = decodeZedSelectionRow(selection)\n return Option.isSome(parsed) ? [parsed.value] : []\n })\n\n if (raw.length > 0 && selections.length === 0) return { type: \"unavailable\" as const }\n return { type: \"selections\" as const, selections }\n } catch {\n return { type: \"unavailable\" as const }\n } finally {\n db?.close()\n }\n}\n\nfunction queryZedEditorContents(dbPath: string, row: ZedActiveEditorRow) {\n let db: Database | undefined\n try {\n db = new Database(dbPath, { readonly: true })\n const parsed = decodeZedEditorContents(\n db\n .query(\n `select contents\n from editors\n where item_id = $editorID and workspace_id = $workspaceID`,\n )\n .get({ $editorID: row.editor_id, $workspaceID: row.workspace_id }),\n )\n if (Option.isNone(parsed)) return { type: \"unavailable\" as const }\n return { type: \"contents\" as const, contents: parsed.value.contents }\n } catch {\n return { type: \"unavailable\" as const }\n } finally {\n db?.close()\n }\n}\n\nfunction isZedActiveEditorRow(row: ZedEditorRow): row is ZedActiveEditorRow {\n return row.item_kind === \"Editor\" && row.editor_id != null\n}\n\nexport function resolveZedDbPath() {\n const candidates = [\n process.env.OPENCODE_ZED_DB,\n path.join(os.homedir(), \"Library\", \"Application Support\", \"Zed\", \"db\", \"0-stable\", \"db.sqlite\"),\n path.join(os.homedir(), \".local\", \"share\", \"zed\", \"db\", \"0-stable\", \"db.sqlite\"),\n ].filter((item): item is string => Boolean(item))\n\n return candidates.find((item) => isFile(item))\n}\n\nfunction isFile(item: string) {\n try {\n return statSync(item).isFile()\n } catch {\n return false\n }\n}\n\nfunction scoreZedWorkspace(workspacePaths: string | null, cwd: string) {\n return zedWorkspacePaths(workspacePaths).reduce((score, item) => {\n if (pathContains(item, cwd)) return Math.max(score, path.resolve(item).length)\n return score\n }, 0)\n}\n\nfunction zedWorkspacePaths(value: string | null) {\n if (!value) return []\n const parsed = parseJson(value)\n if (Array.isArray(parsed)) return parsed.filter((item): item is string => typeof item === \"string\")\n return value.split(/\\r?\\n/).filter(Boolean)\n}\n\nfunction utf8ByteOffsetToStringIndex(text: string, byteOffset: number) {\n if (byteOffset <= 0) return 0\n\n let bytes = 0\n for (let index = 0; index < text.length; ) {\n const codePoint = text.codePointAt(index)\n if (codePoint === undefined) return text.length\n\n const nextIndex = index + (codePoint > 0xffff ? 2 : 1)\n bytes += utf8.encode(text.slice(index, nextIndex)).length\n if (bytes >= byteOffset) return nextIndex\n index = nextIndex\n }\n\n return text.length\n}\n\nfunction offsetsToSelection(text: string, startOffset: number, endOffset: number) {\n const start = Math.max(0, Math.min(startOffset, text.length))\n const end = Math.max(0, Math.min(endOffset, text.length))\n let line = 1\n let lineStart = 0\n let startPosition = position(line, lineStart, start)\n let endPosition = position(line, lineStart, end)\n\n for (let index = 0; index <= end; index++) {\n if (index === start) startPosition = position(line, lineStart, index)\n if (index === end) {\n endPosition = position(line, lineStart, index)\n break\n }\n if (text[index] === \"\\n\") {\n line += 1\n lineStart = index + 1\n }\n }\n\n return { start: startPosition, end: endPosition }\n}\n\nfunction position(line: number, lineStart: number, offset: number) {\n return {\n line,\n character: offset - lineStart + 1,\n }\n}\n\nfunction pathContains(parent: string, child: string) {\n const relative = path.relative(path.resolve(parent), path.resolve(child))\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))\n}\n\nfunction parseJson(value: string) {\n try {\n return JSON.parse(value) as unknown\n } catch {\n return\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "06392E3C126BC75464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/services/service-config.ts"], | ||
| "sourcesContent": [ | ||
| "import { Global } from \"@opencode-ai/util/global\"\nimport { OPENCODE_CHANNEL, OPENCODE_VERSION } from \"../version\"\nimport { Hash } from \"@opencode-ai/util/hash\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Effect, FileSystem, Option, Schema } from \"effect\"\nimport { randomBytes } from \"crypto\"\nimport path from \"path\"\nimport { selfCommand } from \"../util/process\"\n\n// The CLI's service configuration file, plus the Service.EnsureOptions binding that\n// points the client package's service operations at this CLI: which\n// registration file (by channel), which version, and how to spawn opencode.\n\nexport const Info = Schema.Struct({\n hostname: Schema.optional(Schema.String),\n port: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(65_535))),\n password: Schema.optional(Schema.String),\n})\nexport type Info = typeof Info.Type\n\nconst keys = [\"hostname\", \"port\", \"password\"] as const\ntype Key = (typeof keys)[number]\n\nconst decodeInfo = Schema.decodeUnknownEffect(Schema.fromJsonString(Info))\nconst decodeRegistration = Schema.decodeUnknownEffect(Schema.fromJsonString(Service.Info))\n\nexport function filename(channel = OPENCODE_CHANNEL) {\n if (channel === \"latest\" || channel === \"next\") return \"service.json\"\n return `service-${channel.replace(/[^a-zA-Z0-9._-]/g, \"-\")}.json`\n}\n\nexport function defaultPort(channel = OPENCODE_CHANNEL) {\n if (channel === \"latest\" || channel === \"next\") return 0xc0de\n if (channel === \"local\") return 0xc0df\n return 10_000 + (Number.parseInt(Hash.fast(channel).slice(0, 8), 16) % 50_000)\n}\n\nexport function legacyFilename(channel = OPENCODE_CHANNEL) {\n if (channel === \"latest\" || channel === \"local\") return\n return `service-${Hash.fast(channel)}.json`\n}\n\nexport function versionBelongsToChannel(\n version: string | undefined,\n channel = OPENCODE_CHANNEL,\n installedVersion = OPENCODE_VERSION,\n) {\n if (version === undefined) return false\n if (version === installedVersion) return true\n const prefix = `0.0.0-${channel}-`\n if (!version.startsWith(prefix)) return false\n return /^\\d+(?:\\.\\d+)?$/.test(version.slice(prefix.length))\n}\n\nexport const migrateRegistration = Effect.fnUntraced(function* (\n legacy: string,\n file: string,\n channel = OPENCODE_CHANNEL,\n installedVersion = OPENCODE_VERSION,\n) {\n const fs = yield* FileSystem.FileSystem\n const text = yield* fs.readFileString(legacy).pipe(Effect.option)\n if (Option.isNone(text)) return\n const registration = yield* decodeRegistration(text.value).pipe(Effect.option)\n if (Option.isNone(registration)) return\n if (!versionBelongsToChannel(registration.value.version, channel, installedVersion)) return\n yield* fs.writeFileString(file, text.value, { flag: \"wx\", mode: 0o600 }).pipe(Effect.ignore)\n})\n\nexport const migrateConfig = Effect.fnUntraced(function* (legacy: string, file: string) {\n const fs = yield* FileSystem.FileSystem\n const text = yield* fs.readFileString(legacy).pipe(Effect.option)\n if (Option.isNone(text)) return\n if (Option.isNone(yield* decodeInfo(text.value).pipe(Effect.option))) return\n yield* fs.writeFileString(file, text.value, { flag: \"wx\", mode: 0o600 }).pipe(Effect.ignore)\n})\n\nfunction configKey(key: string): Key {\n if (key === \"hostname\" || key === \"port\" || key === \"password\") return key\n throw new Error(`Unknown service config key: ${key}`)\n}\n\nconst paths = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem\n const global = yield* Global.Service\n const name = filename()\n const legacy = legacyFilename()\n const file = path.join(global.state, name)\n return {\n fs,\n file,\n legacyConfigFile: legacy ? path.join(global.config, legacy) : undefined,\n legacyRegistrationFiles: [\n ...(legacy ? [path.join(global.state, legacy)] : []),\n ...(name !== \"service.json\" && OPENCODE_CHANNEL !== \"local\" ? [path.join(global.state, \"service.json\")] : []),\n ],\n configFile: path.join(global.config, name),\n }\n})\n\nexport const options = Effect.fnUntraced(function* () {\n const { file, legacyRegistrationFiles } = yield* paths\n yield* Effect.forEach(legacyRegistrationFiles, (legacy) => migrateRegistration(legacy, file))\n return {\n file,\n version: OPENCODE_VERSION,\n command: [...selfCommand(), \"serve\", \"--service\"],\n }\n})\n\nexport const read = Effect.fn(\"cli.service-config.read\")(function* () {\n const { fs, configFile, legacyConfigFile } = yield* paths\n if (legacyConfigFile) yield* migrateConfig(legacyConfigFile, configFile)\n return yield* fs.readFileString(configFile).pipe(\n Effect.flatMap(decodeInfo),\n Effect.catch(() => Effect.succeed({} as Info)),\n )\n})\n\nconst write = Effect.fn(\"cli.service-config.write\")(function* (value: Info) {\n const { fs, configFile } = yield* paths\n const temp = configFile + \".tmp\"\n yield* fs.makeDirectory(path.dirname(configFile), { recursive: true })\n yield* fs.writeFileString(temp, JSON.stringify(value, null, 2) + \"\\n\", { mode: 0o600 })\n yield* fs.rename(temp, configFile)\n})\n\nexport const password = Effect.fn(\"cli.service-config.password\")(function* (value?: string) {\n const existing = yield* read()\n if (value === undefined && existing.password) return existing.password\n const next = value ?? randomBytes(32).toString(\"base64url\")\n\n // Keep one private credential across server restarts so discovered clients\n // can reconnect without exposing a password flag or environment variable.\n yield* write({ ...existing, password: next })\n return next\n})\n\nexport const get = Effect.fn(\"cli.service-config.get\")(function* (key?: string) {\n if (key === undefined) {\n const { password: _password, ...safe } = yield* read()\n return JSON.stringify(safe, null, 2)\n }\n switch (configKey(key)) {\n case \"hostname\": {\n return (yield* read()).hostname ?? \"\"\n }\n case \"port\": {\n const port = (yield* read()).port\n return port === undefined ? \"\" : String(port)\n }\n case \"password\": {\n return yield* password()\n }\n }\n throw new Error(`Unknown service config key: ${key}`)\n})\n\nexport const set = Effect.fn(\"cli.service-config.set\")(function* (key: string, value: string) {\n switch (configKey(key)) {\n case \"hostname\": {\n yield* Service.stop(yield* options())\n yield* write({ ...(yield* read()), hostname: value })\n return\n }\n case \"port\": {\n const port = Number(value)\n if (!Number.isInteger(port) || port < 1 || port > 65_535) throw new Error(\"Port must be between 1 and 65535\")\n yield* Service.stop(yield* options())\n yield* write({ ...(yield* read()), port })\n return\n }\n case \"password\": {\n yield* Service.stop(yield* options())\n yield* password(value)\n return\n }\n }\n})\n\nexport const unset = Effect.fn(\"cli.service-config.unset\")(function* (key: string) {\n switch (configKey(key)) {\n case \"hostname\": {\n yield* Service.stop(yield* options())\n const { hostname: _hostname, ...next } = yield* read()\n yield* write(next)\n return\n }\n case \"port\": {\n yield* Service.stop(yield* options())\n const { port: _port, ...next } = yield* read()\n yield* write(next)\n return\n }\n case \"password\": {\n yield* Service.stop(yield* options())\n const { password: _password, ...next } = yield* read()\n yield* write(next)\n return\n }\n }\n})\n\nexport * as ServiceConfig from \"./service-config\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "2D13A0CE1C270A6364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/fuzzysort@3.1.0/node_modules/fuzzysort/fuzzysort.js"], | ||
| "sourcesContent": [ | ||
| "// https://github.com/farzher/fuzzysort v3.0.2\r\n\r\n// UMD (Universal Module Definition) for fuzzysort\r\n;((root, UMD) => {\r\n if(typeof define === 'function' && define.amd) define([], UMD)\r\n else if(typeof module === 'object' && module.exports) module.exports = UMD()\r\n else root['fuzzysort'] = UMD()\r\n})(this, _ => {\r\n 'use strict'\r\n\r\n var single = (search, target) => {\r\n if(!search || !target) return NULL\r\n\r\n var preparedSearch = getPreparedSearch(search)\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n var searchBitflags = preparedSearch.bitflags\r\n if((searchBitflags & target._bitflags) !== searchBitflags) return NULL\r\n\r\n return algorithm(preparedSearch, target)\r\n }\r\n\r\n var go = (search, targets, options) => {\r\n if(!search) return options?.all ? all(targets, options) : noResults\r\n\r\n var preparedSearch = getPreparedSearch(search)\r\n var searchBitflags = preparedSearch.bitflags\r\n var containsSpace = preparedSearch.containsSpace\r\n\r\n var threshold = denormalizeScore( options?.threshold || 0 )\r\n var limit = options?.limit || INFINITY\r\n\r\n var resultsLen = 0; var limitedCount = 0\r\n var targetsLen = targets.length\r\n\r\n function push_result(result) {\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result._score > q.peek()._score) q.replaceTop(result)\r\n }\r\n }\r\n\r\n // This code is copy/pasted 3 times for performance reasons [options.key, options.keys, no keys]\r\n\r\n // options.key\r\n if(options?.key) {\r\n var key = options.key\r\n for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n var target = getValue(obj, key)\r\n if(!target) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n var result = algorithm(preparedSearch, target)\r\n if(result === NULL) continue\r\n if(result._score < threshold) continue\r\n\r\n result.obj = obj\r\n push_result(result)\r\n }\r\n\r\n // options.keys\r\n } else if(options?.keys) {\r\n var keys = options.keys\r\n var keysLen = keys.length\r\n\r\n outer: for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n\r\n { // early out based on bitflags\r\n var keysBitflags = 0\r\n for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n var key = keys[keyI]\r\n var target = getValue(obj, key)\r\n if(!target) { tmpTargets[keyI] = noTarget; continue }\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n tmpTargets[keyI] = target\r\n\r\n keysBitflags |= target._bitflags\r\n }\r\n\r\n if((searchBitflags & keysBitflags) !== searchBitflags) continue\r\n }\r\n\r\n if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) keysSpacesBestScores[i] = NEGATIVE_INFINITY\r\n\r\n for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n target = tmpTargets[keyI]\r\n if(target === noTarget) { tmpResults[keyI] = noTarget; continue }\r\n\r\n tmpResults[keyI] = algorithm(preparedSearch, target, /*allowSpaces=*/false, /*allowPartialMatch=*/containsSpace)\r\n if(tmpResults[keyI] === NULL) { tmpResults[keyI] = noTarget; continue }\r\n\r\n // todo: this seems weird and wrong. like what if our first match wasn't good. this should just replace it instead of averaging with it\r\n // if our second match isn't good we ignore it instead of averaging with it\r\n if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) {\r\n if(allowPartialMatchScores[i] > -1000) {\r\n if(keysSpacesBestScores[i] > NEGATIVE_INFINITY) {\r\n var tmp = (keysSpacesBestScores[i] + allowPartialMatchScores[i]) / 4/*bonus score for having multiple matches*/\r\n if(tmp > keysSpacesBestScores[i]) keysSpacesBestScores[i] = tmp\r\n }\r\n }\r\n if(allowPartialMatchScores[i] > keysSpacesBestScores[i]) keysSpacesBestScores[i] = allowPartialMatchScores[i]\r\n }\r\n }\r\n\r\n if(containsSpace) {\r\n for(let i=0; i<preparedSearch.spaceSearches.length; i++) { if(keysSpacesBestScores[i] === NEGATIVE_INFINITY) continue outer }\r\n } else {\r\n var hasAtLeast1Match = false\r\n for(let i=0; i < keysLen; i++) { if(tmpResults[i]._score !== NEGATIVE_INFINITY) { hasAtLeast1Match = true; break } }\r\n if(!hasAtLeast1Match) continue\r\n }\r\n\r\n var objResults = new KeysResult(keysLen)\r\n for(let i=0; i < keysLen; i++) { objResults[i] = tmpResults[i] }\r\n\r\n if(containsSpace) {\r\n var score = 0\r\n for(let i=0; i<preparedSearch.spaceSearches.length; i++) score += keysSpacesBestScores[i]\r\n } else {\r\n // todo could rewrite this scoring to be more similar to when there's spaces\r\n // if we match multiple keys give us bonus points\r\n var score = NEGATIVE_INFINITY\r\n for(let i=0; i<keysLen; i++) {\r\n var result = objResults[i]\r\n if(result._score > -1000) {\r\n if(score > NEGATIVE_INFINITY) {\r\n var tmp = (score + result._score) / 4/*bonus score for having multiple matches*/\r\n if(tmp > score) score = tmp\r\n }\r\n }\r\n if(result._score > score) score = result._score\r\n }\r\n }\r\n\r\n objResults.obj = obj\r\n objResults._score = score\r\n if(options?.scoreFn) {\r\n score = options.scoreFn(objResults)\r\n if(!score) continue\r\n score = denormalizeScore(score)\r\n objResults._score = score\r\n }\r\n\r\n if(score < threshold) continue\r\n push_result(objResults)\r\n }\r\n\r\n // no keys\r\n } else {\r\n for(var i = 0; i < targetsLen; ++i) { var target = targets[i]\r\n if(!target) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n var result = algorithm(preparedSearch, target)\r\n if(result === NULL) continue\r\n if(result._score < threshold) continue\r\n\r\n push_result(result)\r\n }\r\n }\r\n\r\n if(resultsLen === 0) return noResults\r\n var results = new Array(resultsLen)\r\n for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n results.total = resultsLen + limitedCount\r\n return results\r\n }\r\n\r\n\r\n // this is written as 1 function instead of 2 for minification. perf seems fine ...\r\n // except when minified. the perf is very slow\r\n var highlight = (result, open='<b>', close='</b>') => {\r\n var callback = typeof open === 'function' ? open : undefined\r\n\r\n var target = result.target\r\n var targetLen = target.length\r\n var indexes = result.indexes\r\n var highlighted = ''\r\n var matchI = 0\r\n var indexesI = 0\r\n var opened = false\r\n var parts = []\r\n\r\n for(var i = 0; i < targetLen; ++i) { var char = target[i]\r\n if(indexes[indexesI] === i) {\r\n ++indexesI\r\n if(!opened) { opened = true\r\n if(callback) {\r\n parts.push(highlighted); highlighted = ''\r\n } else {\r\n highlighted += open\r\n }\r\n }\r\n\r\n if(indexesI === indexes.length) {\r\n if(callback) {\r\n highlighted += char\r\n parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n parts.push(target.substr(i+1))\r\n } else {\r\n highlighted += char + close + target.substr(i+1)\r\n }\r\n break\r\n }\r\n } else {\r\n if(opened) { opened = false\r\n if(callback) {\r\n parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n } else {\r\n highlighted += close\r\n }\r\n }\r\n }\r\n highlighted += char\r\n }\r\n\r\n return callback ? parts : highlighted\r\n }\r\n\r\n\r\n var prepare = (target) => {\r\n if(typeof target === 'number') target = ''+target\r\n else if(typeof target !== 'string') target = ''\r\n var info = prepareLowerInfo(target)\r\n return new_result(target, {_targetLower:info._lower, _targetLowerCodes:info.lowerCodes, _bitflags:info.bitflags})\r\n }\r\n\r\n var cleanup = () => { preparedCache.clear(); preparedSearchCache.clear() }\r\n\r\n\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n\r\n\r\n class Result {\r\n get ['indexes']() { return this._indexes.slice(0, this._indexes.len).sort((a,b)=>a-b) }\r\n set ['indexes'](indexes) { return this._indexes = indexes }\r\n ['highlight'](open, close) { return highlight(this, open, close) }\r\n get ['score']() { return normalizeScore(this._score) }\r\n set ['score'](score) { this._score = denormalizeScore(score) }\r\n }\r\n\r\n class KeysResult extends Array {\r\n get ['score']() { return normalizeScore(this._score) }\r\n set ['score'](score) { this._score = denormalizeScore(score) }\r\n }\r\n\r\n var new_result = (target, options) => {\r\n const result = new Result()\r\n result['target'] = target\r\n result['obj'] = options.obj ?? NULL\r\n result._score = options._score ?? NEGATIVE_INFINITY\r\n result._indexes = options._indexes ?? []\r\n result._targetLower = options._targetLower ?? ''\r\n result._targetLowerCodes = options._targetLowerCodes ?? NULL\r\n result._nextBeginningIndexes = options._nextBeginningIndexes ?? NULL\r\n result._bitflags = options._bitflags ?? 0\r\n return result\r\n }\r\n\r\n\r\n var normalizeScore = score => {\r\n if(score === NEGATIVE_INFINITY) return 0\r\n if(score > 1) return score\r\n return Math.E ** ( ((-score + 1)**.04307 - 1) * -2)\r\n }\r\n var denormalizeScore = normalizedScore => {\r\n if(normalizedScore === 0) return NEGATIVE_INFINITY\r\n if(normalizedScore > 1) return normalizedScore\r\n return 1 - Math.pow((Math.log(normalizedScore) / -2 + 1), 1 / 0.04307)\r\n }\r\n\r\n\r\n var prepareSearch = (search) => {\r\n if(typeof search === 'number') search = ''+search\r\n else if(typeof search !== 'string') search = ''\r\n search = search.trim()\r\n var info = prepareLowerInfo(search)\r\n\r\n var spaceSearches = []\r\n if(info.containsSpace) {\r\n var searches = search.split(/\\s+/)\r\n searches = [...new Set(searches)] // distinct\r\n for(var i=0; i<searches.length; i++) {\r\n if(searches[i] === '') continue\r\n var _info = prepareLowerInfo(searches[i])\r\n spaceSearches.push({lowerCodes:_info.lowerCodes, _lower:searches[i].toLowerCase(), containsSpace:false})\r\n }\r\n }\r\n\r\n return {lowerCodes: info.lowerCodes, _lower: info._lower, containsSpace: info.containsSpace, bitflags: info.bitflags, spaceSearches: spaceSearches}\r\n }\r\n\r\n\r\n\r\n var getPrepared = (target) => {\r\n if(target.length > 999) return prepare(target) // don't cache huge targets\r\n var targetPrepared = preparedCache.get(target)\r\n if(targetPrepared !== undefined) return targetPrepared\r\n targetPrepared = prepare(target)\r\n preparedCache.set(target, targetPrepared)\r\n return targetPrepared\r\n }\r\n var getPreparedSearch = (search) => {\r\n if(search.length > 999) return prepareSearch(search) // don't cache huge searches\r\n var searchPrepared = preparedSearchCache.get(search)\r\n if(searchPrepared !== undefined) return searchPrepared\r\n searchPrepared = prepareSearch(search)\r\n preparedSearchCache.set(search, searchPrepared)\r\n return searchPrepared\r\n }\r\n\r\n\r\n var all = (targets, options) => {\r\n var results = []; results.total = targets.length // this total can be wrong if some targets are skipped\r\n\r\n var limit = options?.limit || INFINITY\r\n\r\n if(options?.key) {\r\n for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n var target = getValue(obj, options.key)\r\n if(target == NULL) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n var result = new_result(target.target, {_score: target._score, obj: obj})\r\n results.push(result); if(results.length >= limit) return results\r\n }\r\n } else if(options?.keys) {\r\n for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n var objResults = new KeysResult(options.keys.length)\r\n for (var keyI = options.keys.length - 1; keyI >= 0; --keyI) {\r\n var target = getValue(obj, options.keys[keyI])\r\n if(!target) { objResults[keyI] = noTarget; continue }\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n target._score = NEGATIVE_INFINITY\r\n target._indexes.len = 0\r\n objResults[keyI] = target\r\n }\r\n objResults.obj = obj\r\n objResults._score = NEGATIVE_INFINITY\r\n results.push(objResults); if(results.length >= limit) return results\r\n }\r\n } else {\r\n for(var i=0;i<targets.length;i++) { var target = targets[i]\r\n if(target == NULL) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n target._score = NEGATIVE_INFINITY\r\n target._indexes.len = 0\r\n results.push(target); if(results.length >= limit) return results\r\n }\r\n }\r\n\r\n return results\r\n }\r\n\r\n\r\n var algorithm = (preparedSearch, prepared, allowSpaces=false, allowPartialMatch=false) => {\r\n if(allowSpaces===false && preparedSearch.containsSpace) return algorithmSpaces(preparedSearch, prepared, allowPartialMatch)\r\n\r\n var searchLower = preparedSearch._lower\r\n var searchLowerCodes = preparedSearch.lowerCodes\r\n var searchLowerCode = searchLowerCodes[0]\r\n var targetLowerCodes = prepared._targetLowerCodes\r\n var searchLen = searchLowerCodes.length\r\n var targetLen = targetLowerCodes.length\r\n var searchI = 0 // where we at\r\n var targetI = 0 // where you at\r\n var matchesSimpleLen = 0\r\n\r\n // very basic fuzzy match; to remove non-matching targets ASAP!\r\n // walk through target. find sequential matches.\r\n // if all chars aren't found then exit\r\n for(;;) {\r\n var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesSimple[matchesSimpleLen++] = targetI\r\n ++searchI; if(searchI === searchLen) break\r\n searchLowerCode = searchLowerCodes[searchI]\r\n }\r\n ++targetI; if(targetI >= targetLen) return NULL // Failed to find searchI\r\n }\r\n\r\n var searchI = 0\r\n var successStrict = false\r\n var matchesStrictLen = 0\r\n\r\n var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n if(nextBeginningIndexes === NULL) nextBeginningIndexes = prepared._nextBeginningIndexes = prepareNextBeginningIndexes(prepared.target)\r\n targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n // Our target string successfully matched all characters in sequence!\r\n // Let's try a more advanced and strict test to improve the score\r\n // only count it as a match if it's consecutive or a beginning character!\r\n var backtrackCount = 0\r\n if(targetI !== targetLen) for(;;) {\r\n if(targetI >= targetLen) {\r\n // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n if(searchI <= 0) break // We failed to push chars forward for a better match\r\n\r\n ++backtrackCount; if(backtrackCount > 200) break // exponential backtracking is taking too long, just give up and return a bad match\r\n\r\n --searchI\r\n var lastMatch = matchesStrict[--matchesStrictLen]\r\n targetI = nextBeginningIndexes[lastMatch]\r\n\r\n } else {\r\n var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesStrict[matchesStrictLen++] = targetI\r\n ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n ++targetI\r\n } else {\r\n targetI = nextBeginningIndexes[targetI]\r\n }\r\n }\r\n }\r\n\r\n // check if it's a substring match\r\n var substringIndex = searchLen <= 1 ? -1 : prepared._targetLower.indexOf(searchLower, matchesSimple[0]) // perf: this is slow\r\n var isSubstring = !!~substringIndex\r\n var isSubstringBeginning = !isSubstring ? false : substringIndex===0 || prepared._nextBeginningIndexes[substringIndex-1] === substringIndex\r\n\r\n // if it's a substring match but not at a beginning index, let's try to find a substring starting at a beginning index for a better score\r\n if(isSubstring && !isSubstringBeginning) {\r\n for(var i=0; i<nextBeginningIndexes.length; i=nextBeginningIndexes[i]) {\r\n if(i <= substringIndex) continue\r\n\r\n for(var s=0; s<searchLen; s++) if(searchLowerCodes[s] !== prepared._targetLowerCodes[i+s]) break\r\n if(s === searchLen) { substringIndex = i; isSubstringBeginning = true; break }\r\n }\r\n }\r\n\r\n // tally up the score & keep track of matches for highlighting later\r\n // if it's a simple match, we'll switch to a substring match if a substring exists\r\n // if it's a strict match, we'll switch to a substring match only if that's a better score\r\n\r\n var calculateScore = matches => {\r\n var score = 0\r\n\r\n var extraMatchGroupCount = 0\r\n for(var i = 1; i < searchLen; ++i) {\r\n if(matches[i] - matches[i-1] !== 1) {score -= matches[i]; ++extraMatchGroupCount}\r\n }\r\n var unmatchedDistance = matches[searchLen-1] - matches[0] - (searchLen-1)\r\n\r\n score -= (12+unmatchedDistance) * extraMatchGroupCount // penality for more groups\r\n\r\n if(matches[0] !== 0) score -= matches[0]*matches[0]*.2 // penality for not starting near the beginning\r\n\r\n if(!successStrict) {\r\n score *= 1000\r\n } else {\r\n // successStrict on a target with too many beginning indexes loses points for being a bad target\r\n var uniqueBeginningIndexes = 1\r\n for(var i = nextBeginningIndexes[0]; i < targetLen; i=nextBeginningIndexes[i]) ++uniqueBeginningIndexes\r\n\r\n if(uniqueBeginningIndexes > 24) score *= (uniqueBeginningIndexes-24)*10 // quite arbitrary numbers here ...\r\n }\r\n\r\n score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n if(isSubstring) score /= 1+searchLen*searchLen*1 // bonus for being a full substring\r\n if(isSubstringBeginning) score /= 1+searchLen*searchLen*1 // bonus for substring starting on a beginningIndex\r\n\r\n score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n return score\r\n }\r\n\r\n if(!successStrict) {\r\n if(isSubstring) for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n var matchesBest = matchesSimple\r\n var score = calculateScore(matchesBest)\r\n } else {\r\n if(isSubstringBeginning) {\r\n for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n var matchesBest = matchesSimple\r\n var score = calculateScore(matchesSimple)\r\n } else {\r\n var matchesBest = matchesStrict\r\n var score = calculateScore(matchesStrict)\r\n }\r\n }\r\n\r\n prepared._score = score\r\n\r\n for(var i = 0; i < searchLen; ++i) prepared._indexes[i] = matchesBest[i]\r\n prepared._indexes.len = searchLen\r\n\r\n const result = new Result()\r\n result.target = prepared.target\r\n result._score = prepared._score\r\n result._indexes = prepared._indexes\r\n return result\r\n }\r\n var algorithmSpaces = (preparedSearch, target, allowPartialMatch) => {\r\n var seen_indexes = new Set()\r\n var score = 0\r\n var result = NULL\r\n\r\n var first_seen_index_last_search = 0\r\n var searches = preparedSearch.spaceSearches\r\n var searchesLen = searches.length\r\n var changeslen = 0\r\n\r\n // Return _nextBeginningIndexes back to its normal state\r\n var resetNextBeginningIndexes = () => {\r\n for(let i=changeslen-1; i>=0; i--) target._nextBeginningIndexes[nextBeginningIndexesChanges[i*2 + 0]] = nextBeginningIndexesChanges[i*2 + 1]\r\n }\r\n\r\n var hasAtLeast1Match = false\r\n for(var i=0; i<searchesLen; ++i) {\r\n allowPartialMatchScores[i] = NEGATIVE_INFINITY\r\n var search = searches[i]\r\n\r\n result = algorithm(search, target)\r\n if(allowPartialMatch) {\r\n if(result === NULL) continue\r\n hasAtLeast1Match = true\r\n } else {\r\n if(result === NULL) {resetNextBeginningIndexes(); return NULL}\r\n }\r\n\r\n // if not the last search, we need to mutate _nextBeginningIndexes for the next search\r\n var isTheLastSearch = i === searchesLen - 1\r\n if(!isTheLastSearch) {\r\n var indexes = result._indexes\r\n\r\n var indexesIsConsecutiveSubstring = true\r\n for(let i=0; i<indexes.len-1; i++) {\r\n if(indexes[i+1] - indexes[i] !== 1) {\r\n indexesIsConsecutiveSubstring = false; break;\r\n }\r\n }\r\n\r\n if(indexesIsConsecutiveSubstring) {\r\n var newBeginningIndex = indexes[indexes.len-1] + 1\r\n var toReplace = target._nextBeginningIndexes[newBeginningIndex-1]\r\n for(let i=newBeginningIndex-1; i>=0; i--) {\r\n if(toReplace !== target._nextBeginningIndexes[i]) break\r\n target._nextBeginningIndexes[i] = newBeginningIndex\r\n nextBeginningIndexesChanges[changeslen*2 + 0] = i\r\n nextBeginningIndexesChanges[changeslen*2 + 1] = toReplace\r\n changeslen++\r\n }\r\n }\r\n }\r\n\r\n score += result._score / searchesLen\r\n allowPartialMatchScores[i] = result._score / searchesLen\r\n\r\n // dock points based on order otherwise \"c man\" returns Manifest.cpp instead of CheatManager.h\r\n if(result._indexes[0] < first_seen_index_last_search) {\r\n score -= (first_seen_index_last_search - result._indexes[0]) * 2\r\n }\r\n first_seen_index_last_search = result._indexes[0]\r\n\r\n for(var j=0; j<result._indexes.len; ++j) seen_indexes.add(result._indexes[j])\r\n }\r\n\r\n if(allowPartialMatch && !hasAtLeast1Match) return NULL\r\n\r\n resetNextBeginningIndexes()\r\n\r\n // allows a search with spaces that's an exact substring to score well\r\n var allowSpacesResult = algorithm(preparedSearch, target, /*allowSpaces=*/true)\r\n if(allowSpacesResult !== NULL && allowSpacesResult._score > score) {\r\n if(allowPartialMatch) {\r\n for(var i=0; i<searchesLen; ++i) {\r\n allowPartialMatchScores[i] = allowSpacesResult._score / searchesLen\r\n }\r\n }\r\n return allowSpacesResult\r\n }\r\n\r\n if(allowPartialMatch) result = target\r\n result._score = score\r\n\r\n var i = 0\r\n for (let index of seen_indexes) result._indexes[i++] = index\r\n result._indexes.len = i\r\n\r\n return result\r\n }\r\n\r\n // we use this instead of just .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') because that screws with japanese characters\r\n var remove_accents = (str) => str.replace(/\\p{Script=Latin}+/gu, match => match.normalize('NFD')).replace(/[\\u0300-\\u036f]/g, '')\r\n\r\n var prepareLowerInfo = (str) => {\r\n str = remove_accents(str)\r\n var strLen = str.length\r\n var lower = str.toLowerCase()\r\n var lowerCodes = [] // new Array(strLen) sparse array is too slow\r\n var bitflags = 0\r\n var containsSpace = false // space isn't stored in bitflags because of how searching with a space works\r\n\r\n for(var i = 0; i < strLen; ++i) {\r\n var lowerCode = lowerCodes[i] = lower.charCodeAt(i)\r\n\r\n if(lowerCode === 32) {\r\n containsSpace = true\r\n continue // it's important that we don't set any bitflags for space\r\n }\r\n\r\n var bit = lowerCode>=97&&lowerCode<=122 ? lowerCode-97 // alphabet\r\n : lowerCode>=48&&lowerCode<=57 ? 26 // numbers\r\n // 3 bits available\r\n : lowerCode<=127 ? 30 // other ascii\r\n : 31 // other utf8\r\n bitflags |= 1<<bit\r\n }\r\n\r\n return {lowerCodes:lowerCodes, bitflags:bitflags, containsSpace:containsSpace, _lower:lower}\r\n }\r\n var prepareBeginningIndexes = (target) => {\r\n var targetLen = target.length\r\n var beginningIndexes = []; var beginningIndexesLen = 0\r\n var wasUpper = false\r\n var wasAlphanum = false\r\n for(var i = 0; i < targetLen; ++i) {\r\n var targetCode = target.charCodeAt(i)\r\n var isUpper = targetCode>=65&&targetCode<=90\r\n var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57\r\n var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum\r\n wasUpper = isUpper\r\n wasAlphanum = isAlphanum\r\n if(isBeginning) beginningIndexes[beginningIndexesLen++] = i\r\n }\r\n return beginningIndexes\r\n }\r\n var prepareNextBeginningIndexes = (target) => {\r\n target = remove_accents(target)\r\n var targetLen = target.length\r\n var beginningIndexes = prepareBeginningIndexes(target)\r\n var nextBeginningIndexes = [] // new Array(targetLen) sparse array is too slow\r\n var lastIsBeginning = beginningIndexes[0]\r\n var lastIsBeginningI = 0\r\n for(var i = 0; i < targetLen; ++i) {\r\n if(lastIsBeginning > i) {\r\n nextBeginningIndexes[i] = lastIsBeginning\r\n } else {\r\n lastIsBeginning = beginningIndexes[++lastIsBeginningI]\r\n nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning\r\n }\r\n }\r\n return nextBeginningIndexes\r\n }\r\n\r\n var preparedCache = new Map()\r\n var preparedSearchCache = new Map()\r\n\r\n // the theory behind these being globals is to reduce garbage collection by not making new arrays\r\n var matchesSimple = []; var matchesStrict = []\r\n var nextBeginningIndexesChanges = [] // allows straw berry to match strawberry well, by modifying the end of a substring to be considered a beginning index for the rest of the search\r\n var keysSpacesBestScores = []; var allowPartialMatchScores = []\r\n var tmpTargets = []; var tmpResults = []\r\n\r\n // prop = 'key' 2.5ms optimized for this case, seems to be about as fast as direct obj[prop]\r\n // prop = 'key1.key2' 10ms\r\n // prop = ['key1', 'key2'] 27ms\r\n // prop = obj => obj.tags.join() ??ms\r\n var getValue = (obj, prop) => {\r\n var tmp = obj[prop]; if(tmp !== undefined) return tmp\r\n if(typeof prop === 'function') return prop(obj) // this should run first. but that makes string props slower\r\n var segs = prop\r\n if(!Array.isArray(prop)) segs = prop.split('.')\r\n var len = segs.length\r\n var i = -1\r\n while (obj && (++i < len)) obj = obj[segs[i]]\r\n return obj\r\n }\r\n\r\n var isPrepared = (x) => { return typeof x === 'object' && typeof x._bitflags === 'number' }\r\n var INFINITY = Infinity; var NEGATIVE_INFINITY = -INFINITY\r\n var noResults = []; noResults.total = 0\r\n var NULL = null\r\n\r\n var noTarget = prepare('')\r\n\r\n // Hacked version of https://github.com/lemire/FastPriorityQueue.js\r\n var fastpriorityqueue=r=>{var e=[],o=0,a={},v=r=>{for(var a=0,v=e[a],c=1;c<o;){var s=c+1;a=c,s<o&&e[s]._score<e[c]._score&&(a=s),e[a-1>>1]=e[a],c=1+(a<<1)}for(var f=a-1>>1;a>0&&v._score<e[f]._score;f=(a=f)-1>>1)e[a]=e[f];e[a]=v};return a.add=(r=>{var a=o;e[o++]=r;for(var v=a-1>>1;a>0&&r._score<e[v]._score;v=(a=v)-1>>1)e[a]=e[v];e[a]=r}),a.poll=(r=>{if(0!==o){var a=e[0];return e[0]=e[--o],v(),a}}),a.peek=(r=>{if(0!==o)return e[0]}),a.replaceTop=(r=>{e[0]=r,v()}),a}\r\n var q = fastpriorityqueue() // reuse this\r\n\r\n // fuzzysort is written this way for minification. all names are mangeled unless quoted\r\n return {'single':single, 'go':go, 'prepare':prepare, 'cleanup':cleanup}\r\n}) // UMD\r\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "E06FE38AECDAEB7C64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/image/photon-wasm.bun.ts", "../core/src/image/photon.ts"], | ||
| "sourcesContent": [ | ||
| "// @ts-ignore Bun embeds static file imports when compiling the CLI.\nimport photonWasm from \"@silvia-odwyer/photon-node/photon_rs_bg.wasm\" with { type: \"file\" }\n\nexport default photonWasm\n", | ||
| "import photonWasm from \"#photon-wasm\"\nimport { Effect } from \"effect\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { FileSystem } from \"../filesystem\"\nimport { DecodeError, ResizerUnavailableError, SizeError } from \"../image\"\n\nconst JPEG_QUALITIES = [80, 85, 70, 55, 40]\n\nexport const make = Effect.gen(function* () {\n ;(globalThis as typeof globalThis & { __OPENCODE_PHOTON_WASM_PATH?: string }).__OPENCODE_PHOTON_WASM_PATH =\n path.isAbsolute(photonWasm) ? photonWasm : fileURLToPath(new URL(photonWasm, import.meta.url))\n const loadPhoton = yield* Effect.cached(\n Effect.tryPromise({\n try: () => import(\"@silvia-odwyer/photon-node\"),\n catch: () => new ResizerUnavailableError(),\n }),\n )\n return Effect.fn(\"Image.Photon.normalize\")(function* (\n resource: string,\n content: FileSystem.Content & { readonly encoding: \"base64\" },\n limits: {\n readonly autoResize: boolean\n readonly maxWidth: number\n readonly maxHeight: number\n readonly maxBase64Bytes: number\n },\n ) {\n const photon = yield* loadPhoton\n const decoded = yield* Effect.try({\n try: () => photon.PhotonImage.new_from_byteslice(Buffer.from(content.content, \"base64\")),\n catch: () => new DecodeError({ resource }),\n })\n try {\n const width = decoded.get_width()\n const height = decoded.get_height()\n const bytes = Buffer.byteLength(content.content, \"utf-8\")\n if (width <= limits.maxWidth && height <= limits.maxHeight && bytes <= limits.maxBase64Bytes) return content\n if (!limits.autoResize)\n return yield* new SizeError({\n resource,\n width,\n height,\n bytes,\n maxWidth: limits.maxWidth,\n maxHeight: limits.maxHeight,\n maxBytes: limits.maxBase64Bytes,\n })\n const scale = Math.min(1, limits.maxWidth / width, limits.maxHeight / height)\n const sizes = Array.from({ length: 32 }).reduce<Array<{ width: number; height: number }>>((acc) => {\n const previous = acc.at(-1) ?? {\n width: Math.max(1, Math.round(width * scale)),\n height: Math.max(1, Math.round(height * scale)),\n }\n const next =\n acc.length === 0\n ? previous\n : {\n width: previous.width === 1 ? 1 : Math.max(1, Math.floor(previous.width * 0.75)),\n height: previous.height === 1 ? 1 : Math.max(1, Math.floor(previous.height * 0.75)),\n }\n return acc.some((item) => item.width === next.width && item.height === next.height) ? acc : [...acc, next]\n }, [])\n for (const size of sizes) {\n const resized = photon.resize(decoded, size.width, size.height, photon.SamplingFilter.Lanczos3)\n try {\n const encoders: Array<readonly [mime: string, encode: () => Uint8Array]> = [\n [\"image/png\", () => resized.get_bytes()],\n ...JPEG_QUALITIES.map((quality) => [\"image/jpeg\", () => resized.get_bytes_jpeg(quality)] as const),\n ]\n for (const [mime, encode] of encoders) {\n const candidate = Buffer.from(encode()).toString(\"base64\")\n if (Buffer.byteLength(candidate, \"utf-8\") <= limits.maxBase64Bytes)\n return { ...content, content: candidate, encoding: \"base64\" as const, mime }\n }\n } finally {\n resized.free()\n }\n }\n return yield* new SizeError({\n resource,\n width,\n height,\n bytes,\n maxWidth: limits.maxWidth,\n maxHeight: limits.maxHeight,\n maxBytes: limits.maxBase64Bytes,\n })\n } finally {\n decoded.free()\n }\n })\n})\n" | ||
| ], | ||
| "mappings": ";yvBAGA,SAAe,SCDf,yBACA,6BAAS,iBAIT,SAAM,OAAiB,MAAC,QAAI,QAAI,QAAI,QAAI,OAAE,OAE7B,OAAO,OAAO,SAAI,cAAU,OAAG,eACxC,WAA4E,4BAC5E,EAAK,WAAW,CAAU,EAAI,EAAa,EAAc,IAAI,IAAI,EAAY,YAAY,GAAG,CAAC,EAC/F,IAAM,EAAa,MAAO,EAAO,OAC/B,EAAO,WAAW,CAChB,IAAK,IAAa,yCAClB,MAAO,IAAM,IAAI,CACnB,CAAC,CACH,EACA,OAAO,EAAO,GAAG,wBAAwB,EAAE,SAAU,CACnD,EACA,EACA,EAMA,CACA,IAAM,EAAS,MAAO,EAChB,EAAU,MAAO,EAAO,IAAI,CAChC,IAAK,IAAM,EAAO,YAAY,mBAAmB,OAAO,KAAK,EAAQ,QAAS,QAAQ,CAAC,EACvF,MAAO,IAAM,IAAI,EAAY,CAAE,UAAS,CAAC,CAC3C,CAAC,EACD,GAAI,CACF,IAAM,EAAQ,EAAQ,UAAU,EAC1B,EAAS,EAAQ,WAAW,EAC5B,EAAQ,OAAO,WAAW,EAAQ,QAAS,OAAO,EACxD,GAAI,GAAS,EAAO,UAAY,GAAU,EAAO,WAAa,GAAS,EAAO,eAAgB,OAAO,EACrG,GAAI,CAAC,EAAO,WACV,OAAO,MAAO,IAAI,EAAU,CAC1B,WACA,QACA,SACA,QACA,SAAU,EAAO,SACjB,UAAW,EAAO,UAClB,SAAU,EAAO,cACnB,CAAC,EACH,IAAM,EAAQ,KAAK,IAAI,EAAG,EAAO,SAAW,EAAO,EAAO,UAAY,CAAM,EACtE,EAAQ,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,EAAE,OAAiD,CAAC,IAAQ,CACjG,IAAM,EAAW,EAAI,GAAG,EAAE,GAAK,CAC7B,MAAO,KAAK,IAAI,EAAG,KAAK,MAAM,EAAQ,CAAK,CAAC,EAC5C,OAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,CAAK,CAAC,CAChD,EACM,EACJ,EAAI,SAAW,EACX,EACA,CACE,MAAO,EAAS,QAAU,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,MAAQ,IAAI,CAAC,EAC/E,OAAQ,EAAS,SAAW,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,OAAS,IAAI,CAAC,CACpF,EACN,OAAO,EAAI,KAAK,CAAC,IAAS,EAAK,QAAU,EAAK,OAAS,EAAK,SAAW,EAAK,MAAM,EAAI,EAAM,CAAC,GAAG,EAAK,CAAI,GACxG,CAAC,CAAC,EACL,QAAW,KAAQ,EAAO,CACxB,IAAM,EAAU,EAAO,OAAO,EAAS,EAAK,MAAO,EAAK,OAAQ,EAAO,eAAe,QAAQ,EAC9F,GAAI,CACF,IAAM,EAAqE,CACzE,CAAC,YAAa,IAAM,EAAQ,UAAU,CAAC,EACvC,GAAG,EAAe,IAAI,CAAC,IAAY,CAAC,aAAc,IAAM,EAAQ,eAAe,CAAO,CAAC,CAAU,CACnG,EACA,QAAY,EAAM,KAAW,EAAU,CACrC,IAAM,EAAY,OAAO,KAAK,EAAO,CAAC,EAAE,SAAS,QAAQ,EACzD,GAAI,OAAO,WAAW,EAAW,OAAO,GAAK,EAAO,eAClD,MAAO,IAAK,EAAS,QAAS,EAAW,SAAU,SAAmB,MAAK,UAE/E,CACA,EAAQ,KAAK,GAGjB,OAAO,MAAO,IAAI,EAAU,CAC1B,WACA,QACA,SACA,QACA,SAAU,EAAO,SACjB,UAAW,EAAO,UAClB,SAAU,EAAO,cACnB,CAAC,SACD,CACA,EAAQ,KAAK,GAEhB,EACF", | ||
| "debugId": "B1B0131A7932A83C64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/database/migration/20260722170000_canonical_tool_results.ts"], | ||
| "sourcesContent": [ | ||
| "import { sql } from \"drizzle-orm\"\nimport { Effect, Schema } from \"effect\"\nimport type { DatabaseMigration } from \"../migration\"\n\nconst decodeJson = Schema.decodeUnknownOption(Schema.UnknownFromJsonString)\nconst isObject = Schema.is(Schema.Record(Schema.String, Schema.Unknown))\nconst isJsonObject = Schema.is(Schema.Record(Schema.String, Schema.Json))\n\nconst object = (value: unknown): Record<string, unknown> => (isObject(value) ? value : {})\n\nconst stringify = (value: unknown) => {\n try {\n return JSON.stringify(value, null, 2) ?? String(value)\n } catch {\n return String(value)\n }\n}\n\nconst contentOf = (state: Record<string, unknown>) => (Array.isArray(state.content) ? state.content : [])\nconst resultOf = (state: Record<string, unknown>) =>\n isObject(state.result) && \"value\" in state.result ? state.result.value : state.result\nconst metadataOf = (state: Record<string, unknown>) => {\n if (isJsonObject(state.structured) && Object.keys(state.structured).length > 0)\n return { metadata: state.structured }\n return isJsonObject(state.metadata) ? { metadata: state.metadata } : {}\n}\nconst completedContent = (state: Record<string, unknown>) => {\n const preserved = contentOf(state)\n if (preserved.length > 0) return preserved\n return [{ type: \"text\", text: stringify(Object.keys(object(state.structured)).length ? state.structured : resultOf(state)) }]\n}\n\n/**\n * One-time rewrite of projected tool rows into the canonical result shape:\n * terminal states store model content plus optional metadata; the generic\n * `structured` and `result` fields disappear. Provider-hosted result payloads\n * move into provider-owned result state so hosted continuation survives.\n * Pre-release durable event versions are intentionally left untouched.\n */\nexport default {\n id: \"20260722170000_canonical_tool_results\",\n up(tx) {\n return Effect.gen(function* () {\n // Keyset-paginated batches keep memory bounded: production databases hold\n // gigabytes of assistant rows, and materializing them all at once was\n // measured at a ~5GB RSS spike.\n let cursor = \"\"\n while (true) {\n const messages = yield* tx.all<{ id: string; data: string }>(\n sql`SELECT id, data FROM session_message WHERE type = 'assistant' AND id > ${cursor} ORDER BY id LIMIT 1000`,\n )\n if (messages.length === 0) break\n cursor = messages[messages.length - 1].id\n yield* rewrite(tx, messages)\n }\n })\n },\n} satisfies DatabaseMigration.Migration\n\nfunction rewrite(tx: Parameters<DatabaseMigration.Migration[\"up\"]>[0], messages: { id: string; data: string }[]) {\n return Effect.gen(function* () {\n for (const row of messages) {\n // A row that never decoded is skipped rather than failing the whole\n // migration on every startup; it was equally unreadable before.\n const decoded = decodeJson(row.data)\n if (decoded._tag === \"None\") {\n yield* Effect.logWarning(\"skipping undecodable session_message row\").pipe(Effect.annotateLogs({ id: row.id }))\n continue\n }\n const data = object(decoded.value)\n if (!Array.isArray(data.content)) continue\n let changed = false\n const content = data.content.map((part) => {\n const tool = object(part)\n if (tool.type !== \"tool\" || !isObject(tool.state)) return part\n const state = tool.state\n if (state.status !== \"completed\" && state.status !== \"error\" && state.status !== \"running\") return part\n if (!(\"structured\" in state) && !(\"result\" in state)) return part\n changed = true\n if (state.status === \"running\")\n return {\n ...tool,\n state: {\n status: \"running\",\n input: object(state.input),\n metadata: object(state.structured),\n },\n }\n // Hosted payloads are irreducible provider replay state; keep them under\n // the provider-owned result state instead of a generic result field.\n const hosted =\n tool.executed === true && isObject(state.result) && \"value\" in state.result\n ? { providerResultState: { ...object(tool.providerResultState), result: state.result.value } }\n : {}\n const preserved = contentOf(state)\n if (state.status === \"completed\")\n return {\n ...tool,\n ...hosted,\n state: {\n status: \"completed\",\n input: object(state.input),\n content: completedContent(state),\n ...metadataOf(state),\n },\n }\n return {\n ...tool,\n ...hosted,\n state: {\n status: \"error\",\n input: object(state.input),\n error: state.error,\n ...(preserved.length > 0 ? { content: preserved } : {}),\n ...metadataOf(state),\n },\n }\n })\n if (!changed) continue\n yield* tx.run(sql`UPDATE session_message SET data = ${JSON.stringify({ ...data, content })} WHERE id = ${row.id}`)\n }\n })\n}\n" | ||
| ], | ||
| "mappings": ";+KAIA,SAAM,OAAa,OAAO,oBAAoB,EAAO,qBAAqB,EACpE,EAAW,EAAO,GAAG,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,EACjE,EAAe,EAAO,GAAG,EAAO,OAAO,EAAO,OAAQ,EAAO,IAAI,CAAC,EAElE,EAAS,CAAC,IAA6C,EAAS,CAAK,EAAI,EAAQ,CAAC,EAElF,EAAY,CAAC,IAAmB,CACpC,GAAI,CACF,OAAO,KAAK,UAAU,EAAO,KAAM,CAAC,GAAK,OAAO,CAAK,EACrD,KAAM,CACN,OAAO,OAAO,CAAK,IAIjB,EAAY,CAAC,IAAoC,MAAM,QAAQ,EAAM,OAAO,EAAI,EAAM,QAAU,CAAC,EACjG,EAAW,CAAC,IAChB,EAAS,EAAM,MAAM,IAAK,UAAW,EAAM,QAAS,EAAM,OAAO,MAAQ,EAAM,OAC3E,EAAa,CAAC,IAAmC,CACrD,GAAI,EAAa,EAAM,UAAU,GAAK,OAAO,KAAK,EAAM,UAAU,EAAE,OAAS,EAC3E,MAAO,CAAE,SAAU,EAAM,UAAW,EACtC,OAAO,EAAa,EAAM,QAAQ,EAAI,CAAE,SAAU,EAAM,QAAS,EAAI,CAAC,GAElE,EAAmB,CAAC,IAAmC,CAC3D,IAAM,EAAY,EAAU,CAAK,EACjC,GAAI,EAAU,OAAS,EAAG,OAAO,EACjC,MAAO,CAAC,CAAE,KAAM,OAAQ,KAAM,EAAU,OAAO,KAAK,EAAO,EAAM,UAAU,CAAC,EAAE,OAAS,EAAM,WAAa,EAAS,CAAK,CAAC,CAAE,CAAC,GAU/G,GACb,GAAI,wCACJ,EAAE,CAAC,EAAI,CACL,OAAO,EAAO,IAAI,SAAU,EAAG,CAI7B,IAAI,EAAS,GACb,MAAO,GAAM,CACX,IAAM,EAAW,MAAO,EAAG,IACzB,2EAA6E,0BAC/E,EACA,GAAI,EAAS,SAAW,EAAG,MAC3B,EAAS,EAAS,EAAS,OAAS,GAAG,GACvC,MAAO,EAAQ,EAAI,CAAQ,GAE9B,EAEL,EAEA,SAAS,CAAO,CAAC,EAAsD,EAA0C,CAC/G,OAAO,EAAO,IAAI,SAAU,EAAG,CAC7B,QAAW,KAAO,EAAU,CAG1B,IAAM,EAAU,EAAW,EAAI,IAAI,EACnC,GAAI,EAAQ,OAAS,OAAQ,CAC3B,MAAO,EAAO,WAAW,0CAA0C,EAAE,KAAK,EAAO,aAAa,CAAE,GAAI,EAAI,EAAG,CAAC,CAAC,EAC7G,SAEF,IAAM,EAAO,EAAO,EAAQ,KAAK,EACjC,GAAI,CAAC,MAAM,QAAQ,EAAK,OAAO,EAAG,SAClC,IAAI,EAAU,GACR,EAAU,EAAK,QAAQ,IAAI,CAAC,IAAS,CACzC,IAAM,EAAO,EAAO,CAAI,EACxB,GAAI,EAAK,OAAS,QAAU,CAAC,EAAS,EAAK,KAAK,EAAG,OAAO,EAC1D,IAAM,EAAQ,EAAK,MACnB,GAAI,EAAM,SAAW,aAAe,EAAM,SAAW,SAAW,EAAM,SAAW,UAAW,OAAO,EACnG,GAAI,EAAE,eAAgB,IAAU,EAAE,WAAY,GAAQ,OAAO,EAE7D,GADA,EAAU,GACN,EAAM,SAAW,UACnB,MAAO,IACF,EACH,MAAO,CACL,OAAQ,UACR,MAAO,EAAO,EAAM,KAAK,EACzB,SAAU,EAAO,EAAM,UAAU,CACnC,CACF,EAGF,IAAM,EACJ,EAAK,WAAa,IAAQ,EAAS,EAAM,MAAM,GAAK,UAAW,EAAM,OACjE,CAAE,oBAAqB,IAAK,EAAO,EAAK,mBAAmB,EAAG,OAAQ,EAAM,OAAO,KAAM,CAAE,EAC3F,CAAC,EACD,EAAY,EAAU,CAAK,EACjC,GAAI,EAAM,SAAW,YACnB,MAAO,IACF,KACA,EACH,MAAO,CACL,OAAQ,YACR,MAAO,EAAO,EAAM,KAAK,EACzB,QAAS,EAAiB,CAAK,KAC5B,EAAW,CAAK,CACrB,CACF,EACF,MAAO,IACF,KACA,EACH,MAAO,CACL,OAAQ,QACR,MAAO,EAAO,EAAM,KAAK,EACzB,MAAO,EAAM,SACT,EAAU,OAAS,EAAI,CAAE,QAAS,CAAU,EAAI,CAAC,KAClD,EAAW,CAAK,CACrB,CACF,EACD,EACD,GAAI,CAAC,EAAS,SACd,MAAO,EAAG,IAAI,sCAAwC,KAAK,UAAU,IAAK,EAAM,SAAQ,CAAC,gBAAgB,EAAI,IAAI,GAEpH", | ||
| "debugId": "9E3E67BAE63BD0A764756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/utils/open-responses-options.ts", "../ai/src/protocols/utils/openai-options.ts", "../ai/src/protocols/openai-chat.ts"], | ||
| "sourcesContent": [ | ||
| "import { Schema } from \"effect\"\nimport { TextVerbosity, type LLMRequest } from \"../../schema\"\n\nexport const ResponseIncludables = [\n \"file_search_call.results\",\n \"web_search_call.results\",\n \"web_search_call.action.sources\",\n \"message.input_image.image_url\",\n \"computer_call_output.output.image_url\",\n \"code_interpreter_call.outputs\",\n \"reasoning.encrypted_content\",\n \"message.output_text.logprobs\",\n] as const\nexport type ResponseIncludable = (typeof ResponseIncludables)[number]\n\nexport const ServiceTiers = [\"auto\", \"default\", \"flex\", \"priority\"] as const\nexport type ServiceTier = (typeof ServiceTiers)[number]\n\nconst TEXT_VERBOSITY = new Set<string>([\"low\", \"medium\", \"high\"])\nconst INCLUDABLES = new Set<string>(ResponseIncludables)\nconst SERVICE_TIERS = new Set<string>(ServiceTiers)\n\nconst isTextVerbosity = (value: unknown): value is Schema.Schema.Type<typeof TextVerbosity> =>\n typeof value === \"string\" && TEXT_VERBOSITY.has(value)\n\nconst isServiceTier = (value: unknown): value is ServiceTier => typeof value === \"string\" && SERVICE_TIERS.has(value)\n\nexport const ReasoningEffort = Schema.String\nexport const TextVerbositySchema = TextVerbosity\nexport const ResponseIncludableSchema = Schema.Literals(ResponseIncludables)\nexport const ServiceTierSchema = Schema.Literals(ServiceTiers)\n\nexport interface Resolved {\n readonly instructions?: string\n readonly store?: boolean\n readonly promptCacheKey?: string\n readonly reasoningEffort?: string\n readonly reasoningSummary?: \"auto\" | \"concise\" | \"detailed\"\n readonly include?: ReadonlyArray<ResponseIncludable>\n readonly textVerbosity?: Schema.Schema.Type<typeof TextVerbosity>\n readonly serviceTier?: ServiceTier\n}\n\nexport const resolve = (request: LLMRequest): Resolved => {\n const input = request.providerOptions?.[request.model.route.providerMetadataKey ?? \"openresponses\"]\n const include = Array.isArray(input?.include)\n ? input.include.filter((entry): entry is ResponseIncludable => INCLUDABLES.has(entry))\n : []\n const reasoningSummary = input?.reasoningSummary\n return {\n instructions: typeof input?.instructions === \"string\" ? input.instructions : undefined,\n store: typeof input?.store === \"boolean\" ? input.store : undefined,\n promptCacheKey: typeof input?.promptCacheKey === \"string\" ? input.promptCacheKey : undefined,\n reasoningEffort: typeof input?.reasoningEffort === \"string\" ? input.reasoningEffort : undefined,\n reasoningSummary:\n reasoningSummary === \"auto\" || reasoningSummary === \"concise\" || reasoningSummary === \"detailed\"\n ? reasoningSummary\n : undefined,\n include: include.length > 0 ? include : undefined,\n textVerbosity: isTextVerbosity(input?.textVerbosity) ? input.textVerbosity : undefined,\n serviceTier: isServiceTier(input?.serviceTier) ? input.serviceTier : undefined,\n }\n}\n\nexport * as OpenResponsesOptions from \"./open-responses-options\"\n", | ||
| "import { ReasoningEfforts } from \"../../schema\"\nimport { OpenResponsesOptions } from \"./open-responses-options\"\n\nexport const OpenAIReasoningEfforts = ReasoningEfforts\nexport type OpenAIReasoningEffort = string\n\n// Mirrors OpenAI's `ResponseIncludable` union from the official SDK. Keep this\n// in lockstep with `openai-node/src/resources/responses/responses.ts`.\nexport const OpenAIResponseIncludables = OpenResponsesOptions.ResponseIncludables\nexport type OpenAIResponseIncludable = OpenResponsesOptions.ResponseIncludable\nexport const OpenAIServiceTiers = OpenResponsesOptions.ServiceTiers\nexport type OpenAIServiceTier = OpenResponsesOptions.ServiceTier\n\nexport const OpenAIReasoningEffort = OpenResponsesOptions.ReasoningEffort\nexport const OpenAITextVerbosity = OpenResponsesOptions.TextVerbositySchema\nexport const OpenAIResponseIncludable = OpenResponsesOptions.ResponseIncludableSchema\nexport const OpenAIServiceTier = OpenResponsesOptions.ServiceTierSchema\n\nexport const isReasoningEffort = (effort: unknown): effort is OpenAIReasoningEffort => typeof effort === \"string\"\n\nexport const resolve = OpenResponsesOptions.resolve\n\nexport * as OpenAIOptions from \"./openai-options\"\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport { Tool } from \"@opencode-ai/schema/tool\"\nimport { Route } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { HttpTransport } from \"../route/transport\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n AIError,\n LLMEvent,\n Usage,\n type FinishReason,\n type FinishReasonDetails,\n type CacheHint,\n type JsonSchema,\n type LLMRequest,\n type MediaPart,\n type ReasoningPart,\n type TextPart,\n type ToolCallPart,\n type ToolDefinition,\n} from \"../schema\"\nimport { classifyProviderFailure } from \"../provider-error\"\nimport { isRecord, JsonObject, optionalArray, optionalNull, ProviderShared } from \"./shared\"\nimport { OpenAIOptions } from \"./utils/openai-options\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\nimport { ToolStream } from \"./utils/tool-stream\"\n\nconst ADAPTER = \"openai-chat\"\nconst IMAGE_MIMES = new Set<string>(ProviderShared.IMAGE_MIMES)\nconst RESERVED_REASONING_FIELDS = new Set([\"role\", \"content\", \"tool_calls\"])\nexport const DEFAULT_BASE_URL = \"https://api.openai.com/v1\"\nexport const PATH = \"/chat/completions\"\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\n// The body schema is the provider-native JSON body. `fromRequest` below builds\n// this shape from the common `LLMRequest`, then `Route.make` validates and\n// JSON-encodes it before transport.\nconst OpenAIChatCacheControl = Schema.Struct({\n type: Schema.Literal(\"ephemeral\"),\n ttl: Schema.optional(Schema.String),\n})\n\nconst OpenAIChatFunction = Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n parameters: JsonObject,\n})\n\nconst OpenAIChatTool = Schema.Struct({\n type: Schema.tag(\"function\"),\n function: OpenAIChatFunction,\n cache_control: Schema.optional(OpenAIChatCacheControl),\n})\ntype OpenAIChatTool = Schema.Schema.Type<typeof OpenAIChatTool>\n\nconst OpenAIChatAssistantToolCall = Schema.Struct({\n id: Schema.String,\n type: Schema.tag(\"function\"),\n function: Schema.Struct({\n name: Schema.String,\n arguments: Schema.String,\n }),\n})\ntype OpenAIChatAssistantToolCall = Schema.Schema.Type<typeof OpenAIChatAssistantToolCall>\n\nconst OpenAIChatUserContent = Schema.Union([\n Schema.Struct({\n type: Schema.Literal(\"text\"),\n text: Schema.String,\n cache_control: Schema.optional(OpenAIChatCacheControl),\n }),\n Schema.Struct({\n type: Schema.Literal(\"image_url\"),\n image_url: Schema.Struct({ url: Schema.String }),\n }),\n])\n\nconst OpenAIChatMessage = Schema.Union([\n Schema.Struct({\n role: Schema.Literal(\"system\"),\n content: Schema.Union([Schema.String, Schema.Array(OpenAIChatUserContent)]),\n }),\n Schema.Struct({\n role: Schema.Literal(\"user\"),\n content: Schema.Union([Schema.String, Schema.Array(OpenAIChatUserContent)]),\n }),\n Schema.StructWithRest(\n Schema.Struct({\n role: Schema.Literal(\"assistant\"),\n content: Schema.NullOr(Schema.String),\n tool_calls: optionalArray(OpenAIChatAssistantToolCall),\n reasoning_content: Schema.optional(Schema.String),\n reasoning: Schema.optional(Schema.String),\n reasoning_text: Schema.optional(Schema.String),\n reasoning_details: Schema.optional(Schema.Unknown),\n cache_control: Schema.optional(OpenAIChatCacheControl),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n ),\n Schema.Struct({\n role: Schema.Literal(\"tool\"),\n tool_call_id: Schema.String,\n content: Schema.String,\n cache_control: Schema.optional(OpenAIChatCacheControl),\n }),\n]).pipe(Schema.toTaggedUnion(\"role\"))\ntype OpenAIChatMessage = Schema.Schema.Type<typeof OpenAIChatMessage>\n\nconst OpenAIChatToolChoice = Schema.Union([\n Schema.Literals([\"auto\", \"none\", \"required\"]),\n Schema.Struct({\n type: Schema.tag(\"function\"),\n function: Schema.Struct({ name: Schema.String }),\n }),\n])\n\nexport const bodyFields = {\n model: Schema.String,\n messages: Schema.Array(OpenAIChatMessage),\n tools: optionalArray(OpenAIChatTool),\n tool_choice: Schema.optional(OpenAIChatToolChoice),\n stream: Schema.Literal(true),\n stream_options: Schema.optional(Schema.Struct({ include_usage: Schema.Boolean })),\n store: Schema.optional(Schema.Boolean),\n reasoning_effort: Schema.optional(OpenAIOptions.OpenAIReasoningEffort),\n max_completion_tokens: Schema.optional(Schema.Number),\n max_tokens: Schema.optional(Schema.Number),\n temperature: Schema.optional(Schema.Number),\n top_p: Schema.optional(Schema.Number),\n frequency_penalty: Schema.optional(Schema.Number),\n presence_penalty: Schema.optional(Schema.Number),\n seed: Schema.optional(Schema.Number),\n stop: optionalArray(Schema.String),\n}\nconst OpenAIChatBody = Schema.Struct(bodyFields)\nexport type OpenAIChatBody = Schema.Schema.Type<typeof OpenAIChatBody>\n\n// =============================================================================\n// Streaming Event Schema\n// =============================================================================\n// The event schema is one decoded SSE `data:` payload. `Framing.sse` splits the\n// byte stream into strings, then `Protocol.jsonEvent` decodes each string into\n// this provider-native event shape.\nconst OpenAIChatUsage = Schema.Struct({\n prompt_tokens: Schema.optional(Schema.Number),\n completion_tokens: Schema.optional(Schema.Number),\n total_tokens: Schema.optional(Schema.Number),\n prompt_tokens_details: optionalNull(\n Schema.Struct({\n cached_tokens: Schema.optional(Schema.Number),\n cache_write_tokens: Schema.optional(Schema.Number),\n }),\n ),\n completion_tokens_details: optionalNull(\n Schema.Struct({\n reasoning_tokens: Schema.optional(Schema.Number),\n }),\n ),\n})\n\nconst OpenAIChatToolCallDeltaFunction = Schema.Struct({\n name: optionalNull(Schema.String),\n arguments: optionalNull(Schema.String),\n})\n\nconst OpenAIChatToolCallDelta = Schema.Struct({\n index: Schema.Number,\n id: optionalNull(Schema.String),\n function: optionalNull(OpenAIChatToolCallDeltaFunction),\n})\ntype OpenAIChatToolCallDelta = Schema.Schema.Type<typeof OpenAIChatToolCallDelta>\n\nconst OpenAIChatDelta = Schema.StructWithRest(\n Schema.Struct({\n content: optionalNull(Schema.String),\n reasoning_content: optionalNull(Schema.String),\n reasoning: optionalNull(Schema.String),\n reasoning_text: optionalNull(Schema.String),\n reasoning_details: optionalNull(Schema.Unknown),\n tool_calls: optionalNull(Schema.Array(OpenAIChatToolCallDelta)),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n)\n\nconst OpenAIChatChoice = Schema.Struct({\n delta: optionalNull(OpenAIChatDelta),\n finish_reason: optionalNull(Schema.String),\n native_finish_reason: optionalNull(Schema.String),\n})\n\nconst OpenAIChatError = Schema.Struct({\n code: optionalNull(Schema.Union([Schema.String, Schema.Number])),\n message: Schema.String,\n})\n\nexport const OpenAIChatEvent = Schema.Struct({\n choices: optionalNull(Schema.Array(OpenAIChatChoice)),\n usage: optionalNull(OpenAIChatUsage),\n error: optionalNull(OpenAIChatError),\n})\nexport type OpenAIChatEvent = Schema.Schema.Type<typeof OpenAIChatEvent>\ntype OpenAIChatRequestMessage = LLMRequest[\"messages\"][number]\n\ninterface PendingToolDelta {\n readonly id?: string\n readonly name?: string\n readonly input: string\n}\n\nexport interface ParserState {\n readonly tools: ToolStream.State<number>\n readonly pendingTools: Partial<Record<number, PendingToolDelta>>\n readonly toolCallEvents: ReadonlyArray<LLMEvent>\n readonly usage?: Usage\n readonly finishReason?: FinishReasonDetails\n readonly lifecycle: Lifecycle.State\n readonly reasoningField?: string\n readonly reasoningDetails: Array<unknown>\n readonly reasoningDetailsObserved: boolean\n readonly reasoningEmitted: boolean\n}\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\n// Lowering is the only place that knows how common LLM messages map onto the\n// OpenAI Chat wire format. Keep provider quirks here instead of leaking native\n// fields into `LLMRequest`.\ninterface LoweringOptions {\n readonly cacheControl?: (\n cache: CacheHint | undefined,\n ) => Schema.Schema.Type<typeof OpenAIChatCacheControl> | undefined\n}\n\nconst lowerTool = (tool: ToolDefinition, inputSchema: JsonSchema, options: LoweringOptions): OpenAIChatTool => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: ToolSchemaProjection.openAI(inputSchema),\n },\n cache_control: options.cacheControl?.(tool.cache),\n})\n\nconst lowerToolChoice = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"OpenAI Chat\", toolChoice, {\n auto: () => \"auto\" as const,\n none: () => \"none\" as const,\n required: () => \"required\" as const,\n tool: (name) => ({ type: \"function\" as const, function: { name } }),\n })\n\nconst lowerToolCall = (part: ToolCallPart): OpenAIChatAssistantToolCall => ({\n id: part.id,\n type: \"function\",\n function: {\n name: part.name,\n arguments: ProviderShared.encodeJson(part.input),\n },\n})\n\nconst lowerMedia = Effect.fn(\"OpenAIChat.lowerMedia\")(function* (part: MediaPart) {\n const media = yield* ProviderShared.validateMedia(\"OpenAI Chat\", part, IMAGE_MIMES)\n return { type: \"image_url\" as const, image_url: { url: media.dataUrl } }\n})\n\nconst openAICompatibleReasoningContent = (native: unknown) =>\n isRecord(native) && typeof native.reasoning_content === \"string\" ? native.reasoning_content : undefined\n\nconst reasoningField = (part: ReasoningPart) => {\n const field = part.providerMetadata?.openai?.reasoningField\n return typeof field === \"string\" ? field : undefined\n}\n\nconst reasoningDetails = (parts: ReadonlyArray<ReasoningPart>, native: unknown) => {\n const observed = parts.flatMap((part) => {\n const details = part.providerMetadata?.openai?.reasoningDetails\n return Array.isArray(details) ? details : []\n })\n if (parts.some((part) => Array.isArray(part.providerMetadata?.openai?.reasoningDetails))) return observed\n if (isRecord(native) && Array.isArray(native.reasoning_details)) return native.reasoning_details\n}\n\nconst lowerUserMessage = Effect.fn(\"OpenAIChat.lowerUserMessage\")(function* (\n message: OpenAIChatRequestMessage,\n options: LoweringOptions,\n) {\n const content: Array<Schema.Schema.Type<typeof OpenAIChatUserContent>> = []\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text, cache_control: options.cacheControl?.(part.cache) })\n continue\n }\n if (part.type === \"media\") {\n content.push(yield* lowerMedia(part))\n continue\n }\n return yield* ProviderShared.unsupportedContent(\"OpenAI Chat\", \"user\", [\"text\", \"media\"])\n }\n if (content.every((part) => part.type === \"text\" && part.cache_control === undefined))\n return {\n role: \"user\" as const,\n content: content.map((part) => (part.type === \"text\" ? part.text : \"\")).join(\"\"),\n }\n return { role: \"user\" as const, content }\n})\n\nconst lowerAssistantMessage = Effect.fn(\"OpenAIChat.lowerAssistantMessage\")(function* (\n message: OpenAIChatRequestMessage,\n configuredField?: string,\n options: LoweringOptions = {},\n) {\n const content: TextPart[] = []\n const reasoning: ReasoningPart[] = []\n const toolCalls: OpenAIChatAssistantToolCall[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"reasoning\", \"tool-call\"]))\n return yield* ProviderShared.unsupportedContent(\"OpenAI Chat\", \"assistant\", [\"text\", \"reasoning\", \"tool-call\"])\n if (part.type === \"text\") {\n content.push(part)\n continue\n }\n if (part.type === \"reasoning\") {\n reasoning.push(part)\n continue\n }\n if (part.type === \"tool-call\") {\n toolCalls.push(lowerToolCall(part))\n continue\n }\n }\n const text = reasoning.map((part) => part.text).join(\"\")\n const details = reasoningDetails(reasoning, message.native?.openaiCompatible)\n const observedField = reasoning.map(reasoningField).find((value) => value !== undefined)\n const nativeReasoning = openAICompatibleReasoningContent(message.native?.openaiCompatible)\n const fullyStructured = reasoning.every((part) => Array.isArray(part.providerMetadata?.openai?.reasoningDetails))\n const field = (() => {\n if (configuredField !== undefined) return configuredField\n if (reasoning.length === 0) return undefined\n if (observedField !== undefined) return observedField\n if (nativeReasoning !== undefined) return \"reasoning_content\"\n if (!fullyStructured) return \"reasoning_content\"\n })()\n const reasoningText = (() => {\n if (configuredField !== undefined) return reasoning.length === 0 ? (nativeReasoning ?? \"\") : text\n if (reasoning.length === 0) return nativeReasoning\n return text\n })()\n const cached = message.content.findLast((part) => \"cache\" in part && part.cache !== undefined)\n const result = {\n role: \"assistant\" as const,\n content: content.length === 0 ? null : ProviderShared.joinText(content),\n tool_calls: toolCalls.length === 0 ? undefined : toolCalls,\n reasoning_details: details,\n cache_control: options.cacheControl?.(cached && \"cache\" in cached ? cached.cache : undefined),\n }\n if (field === undefined || reasoningText === undefined) return result\n return { ...result, [field]: reasoningText }\n})\n\nconst lowerToolMessages = Effect.fn(\"OpenAIChat.lowerToolMessages\")(function* (\n message: OpenAIChatRequestMessage,\n options: LoweringOptions,\n) {\n const messages: OpenAIChatMessage[] = []\n const images: Array<Schema.Schema.Type<typeof OpenAIChatUserContent>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"OpenAI Chat\", \"tool\", [\"tool-result\"])\n if (part.result.type !== \"content\") {\n messages.push({\n role: \"tool\",\n tool_call_id: part.id,\n content: ProviderShared.toolResultText(part),\n cache_control: options.cacheControl?.(part.cache),\n })\n continue\n }\n const content: ReadonlyArray<Tool.Content> = part.result.value\n const text = content.filter((item) => item.type === \"text\").map((item) => item.text)\n messages.push({\n role: \"tool\",\n tool_call_id: part.id,\n content: text.join(\"\\n\"),\n cache_control: options.cacheControl?.(part.cache),\n })\n const files = content.filter((item) => item.type === \"file\")\n images.push(\n ...(yield* Effect.forEach(files, (item) =>\n lowerMedia({ type: \"media\", mediaType: item.mime, data: item.uri, filename: item.name }),\n )),\n )\n }\n return { messages, images }\n})\n\nconst lowerMessage = Effect.fn(\"OpenAIChat.lowerMessage\")(function* (\n message: OpenAIChatRequestMessage,\n reasoningField?: string,\n options: LoweringOptions = {},\n) {\n if (message.role === \"user\") return [yield* lowerUserMessage(message, options)]\n if (message.role === \"assistant\") return [yield* lowerAssistantMessage(message, reasoningField, options)]\n return (yield* lowerToolMessages(message, options)).messages\n})\n\nconst lowerMessages = Effect.fn(\"OpenAIChat.lowerMessages\")(function* (request: LLMRequest, options: LoweringOptions) {\n const system: OpenAIChatMessage[] =\n request.system.length === 0\n ? []\n : request.system.some((part) => part.cache !== undefined) && options.cacheControl !== undefined\n ? [\n {\n role: \"system\",\n content: request.system.map((part) => ({\n type: \"text\",\n text: part.text,\n cache_control: options.cacheControl?.(part.cache),\n })),\n },\n ]\n : [{ role: \"system\", content: ProviderShared.joinText(request.system) }]\n const messages = [...system]\n const pendingImages: Array<Schema.Schema.Type<typeof OpenAIChatUserContent>> = []\n const flushImages = () => {\n if (pendingImages.length === 0) return\n messages.push({ role: \"user\", content: pendingImages.splice(0) })\n }\n for (const message of request.messages) {\n if (message.role === \"system\") {\n const part = yield* ProviderShared.wrappedSystemUpdate(\"OpenAI Chat\", message)\n if (pendingImages.length > 0) {\n messages.push({\n role: \"user\",\n content: [\n ...pendingImages.splice(0),\n { type: \"text\", text: part.text, cache_control: options.cacheControl?.(part.cache) },\n ],\n })\n continue\n }\n const previous = messages.at(-1)\n if (previous?.role === \"user\" && typeof previous.content === \"string\")\n messages[messages.length - 1] = options.cacheControl?.(part.cache)\n ? {\n role: \"user\",\n content: [\n { type: \"text\", text: previous.content },\n { type: \"text\", text: part.text, cache_control: options.cacheControl(part.cache) },\n ],\n }\n : { role: \"user\", content: `${previous.content}\\n${part.text}` }\n else if (previous?.role === \"user\" && Array.isArray(previous.content))\n messages[messages.length - 1] = {\n role: \"user\",\n content: [\n ...previous.content,\n { type: \"text\", text: part.text, cache_control: options.cacheControl?.(part.cache) },\n ],\n }\n else\n messages.push(\n options.cacheControl?.(part.cache)\n ? {\n role: \"user\",\n content: [{ type: \"text\", text: part.text, cache_control: options.cacheControl(part.cache) }],\n }\n : { role: \"user\", content: part.text },\n )\n continue\n }\n if (message.role === \"tool\") {\n const lowered = yield* lowerToolMessages(message, options)\n messages.push(...lowered.messages)\n pendingImages.push(...lowered.images)\n continue\n }\n flushImages()\n messages.push(...(yield* lowerMessage(message, request.model.compatibility?.reasoningField, options)))\n }\n flushImages()\n return messages\n})\n\nconst lowerOptions = (request: LLMRequest) => {\n const options = OpenAIOptions.resolve(request)\n return {\n ...(options.store !== undefined ? { store: options.store } : {}),\n ...(options.reasoningEffort ? { reasoning_effort: options.reasoningEffort } : {}),\n }\n}\n\nexport const fromRequest = Effect.fn(\"OpenAIChat.fromRequest\")(function* (\n request: LLMRequest,\n options: LoweringOptions = {},\n) {\n // `fromRequest` returns the provider body only. Endpoint, auth, framing,\n // validation, and HTTP execution are composed by `Route.make`.\n const reasoningField = request.model.compatibility?.reasoningField\n if (reasoningField && RESERVED_REASONING_FIELDS.has(reasoningField))\n return yield* ProviderShared.invalidRequest(\n `OpenAI Chat reasoning field conflicts with reserved field ${reasoningField}`,\n )\n const generation = request.generation\n const toolSchemaCompatibility = request.model.compatibility?.toolSchema\n const maxTokensField = request.model.compatibility?.maxTokensField ?? \"max_tokens\"\n return {\n model: request.model.id,\n messages: yield* lowerMessages(request, options),\n tools:\n request.tools.length === 0\n ? undefined\n : request.tools.map((tool) =>\n lowerTool(\n tool,\n ToolSchemaProjection.modelCompatibility(tool.inputSchema, toolSchemaCompatibility),\n options,\n ),\n ),\n tool_choice: request.toolChoice ? yield* lowerToolChoice(request.toolChoice) : undefined,\n stream: true as const,\n stream_options: { include_usage: true },\n ...(maxTokensField === \"max_completion_tokens\"\n ? { max_completion_tokens: generation?.maxTokens }\n : { max_tokens: generation?.maxTokens }),\n temperature: generation?.temperature,\n top_p: generation?.topP,\n frequency_penalty: generation?.frequencyPenalty,\n presence_penalty: generation?.presencePenalty,\n seed: generation?.seed,\n stop: generation?.stop,\n ...lowerOptions(request),\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\n// Streaming parsers are small state machines: every event returns a new state\n// plus the common `LLMEvent`s produced by that event. Tool calls are accumulated\n// because OpenAI streams JSON arguments across multiple deltas.\nconst mapFinishReason = (reason: string | null | undefined): FinishReason => {\n if (reason === \"stop\") return \"stop\"\n if (reason === \"length\") return \"length\"\n if (reason === \"content_filter\") return \"content-filter\"\n if (reason === \"function_call\" || reason === \"tool_calls\") return \"tool-calls\"\n if (reason === \"error\") return \"error\"\n return \"unknown\"\n}\n\n// OpenAI Chat reports `prompt_tokens` (inclusive total) with a\n// cached-read and cache-write subsets, and `completion_tokens` (inclusive\n// total) with a `reasoning_tokens` subset. We pass the inclusive totals\n// through and derive the non-cached breakdown so the `AI.Usage` contract is\n// satisfied on both sides.\nconst mapUsage = (usage: OpenAIChatEvent[\"usage\"]): Usage | undefined => {\n if (!usage) return undefined\n const cached = usage.prompt_tokens_details?.cached_tokens\n const cacheWrite = usage.prompt_tokens_details?.cache_write_tokens\n const reasoning = usage.completion_tokens_details?.reasoning_tokens\n const nonCached = ProviderShared.subtractTokens(usage.prompt_tokens, ProviderShared.sumTokens(cached, cacheWrite))\n return new Usage({\n inputTokens: usage.prompt_tokens,\n outputTokens: usage.completion_tokens,\n nonCachedInputTokens: nonCached,\n cacheReadInputTokens: cached,\n cacheWriteInputTokens: cacheWrite,\n reasoningTokens: reasoning,\n totalTokens: ProviderShared.totalTokens(usage.prompt_tokens, usage.completion_tokens, usage.total_tokens),\n providerMetadata: { openai: usage },\n })\n}\n\nconst reasoningDelta = (\n delta: Schema.Schema.Type<typeof OpenAIChatDelta> | null | undefined,\n configuredField?: string,\n) => {\n if (!delta) return undefined\n const fields = new Set([configuredField, \"reasoning_content\", \"reasoning\", \"reasoning_text\"])\n for (const field of fields) {\n if (field === undefined) continue\n const text = delta[field]\n if (typeof text === \"string\" && text.length > 0) return { field, text }\n }\n return undefined\n}\n\nconst detailText = (details: ReadonlyArray<unknown>) => {\n const text = details.flatMap((detail) => {\n if (!isRecord(detail)) return []\n if (detail.type === \"reasoning.text\" && typeof detail.text === \"string\" && detail.text) return [detail.text]\n if (detail.type === \"reasoning.summary\" && typeof detail.summary === \"string\" && detail.summary)\n return [detail.summary]\n return []\n })\n if (text.length > 0) return text.join(\"\")\n}\n\nconst appendReasoningDetails = (result: Array<unknown>, details: ReadonlyArray<unknown>) => {\n for (const detail of details) {\n const previous = result.at(-1)\n if (\n !isRecord(previous) ||\n previous.type !== \"reasoning.text\" ||\n !isRecord(detail) ||\n detail.type !== \"reasoning.text\" ||\n conflictingReasoningTextDetails(previous, detail)\n ) {\n result.push(detail)\n continue\n }\n result[result.length - 1] = {\n ...previous,\n ...Object.fromEntries(Object.entries(detail).filter((entry) => entry[1] !== undefined)),\n text: `${typeof previous.text === \"string\" ? previous.text : \"\"}${typeof detail.text === \"string\" ? detail.text : \"\"}`,\n signature: mergeDetailValue(previous.signature, detail.signature),\n format: mergeDetailValue(previous.format, detail.format),\n }\n }\n}\n\nconst mergeDetailValue = (previous: unknown, current: unknown) =>\n previous || current || (previous !== undefined ? previous : current)\n\nconst conflictingReasoningTextDetails = (previous: Record<string, unknown>, current: Record<string, unknown>) =>\n conflictingDetailValue(previous.id, current.id) ||\n conflictingDetailValue(previous.index, current.index) ||\n conflictingDetailValue(previous.format, current.format) ||\n (Boolean(previous.signature) && Boolean(current.signature) && previous.signature !== current.signature)\n\nconst conflictingDetailValue = (previous: unknown, current: unknown) =>\n previous !== undefined && previous !== null && current !== undefined && current !== null && previous !== current\n\nconst reasoningMetadata = (field: ParserState[\"reasoningField\"], details?: ReadonlyArray<unknown>) => ({\n openai: {\n ...(field ? { reasoningField: field } : {}),\n ...(details ? { reasoningDetails: details } : {}),\n },\n})\n\nconst step = (state: ParserState, event: OpenAIChatEvent) =>\n Effect.gen(function* () {\n if (event.error)\n return yield* new AIError({\n module: ADAPTER,\n method: \"stream\",\n reason: classifyProviderFailure({\n message: event.error.message,\n code: event.error.code === undefined || event.error.code === null ? undefined : String(event.error.code),\n status: typeof event.error.code === \"number\" ? event.error.code : undefined,\n }),\n })\n const events: LLMEvent[] = []\n const usage = mapUsage(event.usage) ?? state.usage\n const choice = event.choices?.[0]\n const finishReason = choice?.finish_reason\n ? { normalized: mapFinishReason(choice.finish_reason), raw: choice.native_finish_reason ?? choice.finish_reason }\n : state.finishReason\n const delta = choice?.delta\n const toolDeltas = delta?.tool_calls ?? []\n let tools = state.tools\n let pendingTools = state.pendingTools\n\n let lifecycle = state.lifecycle\n\n const reasoning = reasoningDelta(delta, state.reasoningField)\n const reasoningField = state.reasoningField ?? (!state.lifecycle.text.has(\"text-0\") ? reasoning?.field : undefined)\n const detailDelta = Array.isArray(delta?.reasoning_details) ? delta.reasoning_details : undefined\n if (detailDelta !== undefined) appendReasoningDetails(state.reasoningDetails, detailDelta)\n const reasoningDetailsObserved = state.reasoningDetailsObserved || detailDelta !== undefined\n const deltaMetadata = reasoningMetadata(reasoningField)\n const text = detailDelta?.length ? (detailText(detailDelta) ?? reasoning?.text) : reasoning?.text\n if (!state.lifecycle.text.has(\"text-0\") && text !== undefined)\n lifecycle = Lifecycle.reasoningDelta(lifecycle, events, \"reasoning-0\", text, deltaMetadata)\n else if (\n reasoningDetailsObserved &&\n !lifecycle.reasoning.has(\"reasoning-0\") &&\n (Boolean(delta?.content) || toolDeltas.length > 0)\n )\n lifecycle = Lifecycle.reasoningStart(lifecycle, events, \"reasoning-0\", deltaMetadata)\n const reasoningEmitted = state.reasoningEmitted || lifecycle.reasoning.has(\"reasoning-0\")\n\n if (delta?.content) {\n lifecycle = Lifecycle.reasoningEnd(\n lifecycle,\n events,\n \"reasoning-0\",\n reasoningMetadata(reasoningField, reasoningDetailsObserved ? state.reasoningDetails : undefined),\n )\n lifecycle = Lifecycle.textDelta(lifecycle, events, \"text-0\", delta.content)\n }\n\n for (const tool of toolDeltas) {\n const current = tools[tool.index]\n const pending = pendingTools[tool.index]\n const id = current?.id ?? pending?.id ?? (tool.id || undefined)\n const name = current?.name ?? pending?.name ?? (tool.function?.name || undefined)\n const text = `${pending?.input ?? \"\"}${tool.function?.arguments ?? \"\"}`\n if (!current && (!id || !name)) {\n pendingTools = { ...pendingTools, [tool.index]: { id: id || undefined, name: name || undefined, input: text } }\n continue\n }\n if (pending) {\n pendingTools = { ...pendingTools }\n delete pendingTools[tool.index]\n }\n const result = ToolStream.appendOrStart(\n ADAPTER,\n tools,\n tool.index,\n { id: id || undefined, name: name || undefined, text },\n \"OpenAI Chat tool call delta is missing id or name\",\n )\n if (ToolStream.isError(result)) return yield* result\n tools = result.tools\n if (result.events.length) lifecycle = Lifecycle.stepStart(lifecycle, events)\n events.push(...result.events)\n }\n\n if (finishReason !== undefined && state.finishReason === undefined && Object.keys(pendingTools).length > 0)\n return yield* ProviderShared.eventError(ADAPTER, \"OpenAI Chat tool call delta is missing id or name\")\n\n // Finalize accumulated tool inputs eagerly when finish_reason arrives so\n // valid calls and malformed local calls settle independently.\n const finished =\n finishReason !== undefined && state.finishReason === undefined && Object.keys(tools).length > 0\n ? yield* ToolStream.finishAll(ADAPTER, tools)\n : undefined\n\n return [\n {\n tools: finished?.tools ?? tools,\n pendingTools,\n toolCallEvents: finished?.events ?? state.toolCallEvents,\n usage,\n finishReason,\n lifecycle,\n reasoningField,\n reasoningDetails: state.reasoningDetails,\n reasoningDetailsObserved,\n reasoningEmitted,\n },\n events,\n ] as const\n })\n\nconst finishEvents = (state: ParserState): ReadonlyArray<LLMEvent> => {\n const events: LLMEvent[] = []\n const hasToolCalls = state.toolCallEvents.length > 0\n const reason = state.finishReason\n ? {\n ...state.finishReason,\n normalized:\n state.finishReason.normalized === \"stop\" && hasToolCalls ? \"tool-calls\" : state.finishReason.normalized,\n }\n : undefined\n const metadata = reasoningMetadata(\n state.reasoningField,\n state.reasoningDetailsObserved ? state.reasoningDetails : undefined,\n )\n const started =\n state.reasoningDetailsObserved && !state.reasoningEmitted\n ? Lifecycle.reasoningStart(state.lifecycle, events, \"reasoning-0\", reasoningMetadata(state.reasoningField))\n : state.lifecycle\n const ended = Lifecycle.reasoningEnd(started, events, \"reasoning-0\", metadata)\n const lifecycle = state.toolCallEvents.length ? Lifecycle.stepStart(ended, events) : ended\n events.push(...state.toolCallEvents)\n if (reason) Lifecycle.finish(lifecycle, events, { reason, usage: state.usage })\n return events\n}\n\n// =============================================================================\n// Protocol And OpenAI Route\n// =============================================================================\n/**\n * The OpenAI Chat protocol — request body construction, body schema, and the\n * streaming-event state machine. Reused by every route that speaks OpenAI Chat\n * over HTTP+SSE: native OpenAI, DeepSeek, TogetherAI, Cerebras, Baseten,\n * Fireworks, DeepInfra, and (once added) Azure OpenAI Chat.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: OpenAIChatBody,\n from: fromRequest,\n },\n stream: {\n event: Protocol.jsonEvent(OpenAIChatEvent),\n initial: (request) => ({\n tools: ToolStream.empty<number>(),\n pendingTools: {},\n toolCallEvents: [],\n lifecycle: Lifecycle.initial(),\n reasoningField: request.model.compatibility?.reasoningField,\n reasoningDetails: [],\n reasoningDetailsObserved: false,\n reasoningEmitted: false,\n }),\n step,\n onHalt: finishEvents,\n },\n})\n\nexport const httpTransport = HttpTransport.sseJson.with<OpenAIChatBody>()\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"openai\",\n providerMetadataKey: \"openai\",\n protocol,\n endpoint: Endpoint.path(PATH, { baseURL: DEFAULT_BASE_URL }),\n auth: Auth.none,\n transport: httpTransport,\n})\n\nexport * as OpenAIChat from \"./openai-chat\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "E2BEC82EB98019A764756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/status.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.status,\n Effect.fn(\"cli.service.status\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover({ ...options, version: undefined })\n process.stdout.write((found?.url ?? \"stopped\") + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAAA,mBAAS,gBAOT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,YACnC,OAAO,QAAG,yBAAoB,OAAE,cAAU,OAAG,MAC3C,SAAM,OAAU,WAAO,OAAc,aAAQ,EACvC,EAAQ,MAAO,EAAQ,SAAS,IAAK,EAAS,QAAS,MAAU,CAAC,EACxE,QAAQ,OAAO,OAAO,GAAO,KAAO,WAAa,CAAG,EACrD,CACH", | ||
| "debugId": "B4A84081252F027A64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/logout.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { OpenCode } from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\nimport { resolveIntegration } from \"./resolve\"\n\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.logout,\n Effect.fn(\"cli.mcp.logout\")(function* (input) {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n\n const integration = yield* resolveIntegration(client, input.name, location)\n if (!integration) {\n process.stdout.write(`No stored credentials for ${input.name}` + EOL)\n return\n }\n\n const credentials = integration.connections.filter((connection) => connection.type === \"credential\")\n if (credentials.length === 0) {\n process.stdout.write(`No stored credentials for ${input.name}` + EOL)\n return\n }\n\n yield* Effect.forEach(\n credentials,\n (connection) => Effect.promise(() => client.credential.remove({ credentialID: connection.id, location })),\n { discard: true },\n )\n process.stdout.write(`Removed OAuth credentials for ${input.name}` + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";66BAAA,mBAAS,gBAST,SAAM,OAAW,MAAE,eAAW,aAAQ,SAAI,MAAE,OAE7B,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,YAC/B,OAAO,QAAG,qBAAgB,OAAE,cAAU,MAAC,OAAO,CAC5C,IAAM,EAAU,MAAO,EAAc,QAAQ,EAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,EAAc,MAAO,EAAmB,EAAQ,EAAM,KAAM,CAAQ,EAC1E,GAAI,CAAC,EAAa,CAChB,QAAQ,OAAO,MAAM,6BAA6B,EAAM,OAAS,CAAG,EACpE,OAGF,IAAM,EAAc,EAAY,YAAY,OAAO,CAAC,IAAe,EAAW,OAAS,YAAY,EACnG,GAAI,EAAY,SAAW,EAAG,CAC5B,QAAQ,OAAO,MAAM,6BAA6B,EAAM,OAAS,CAAG,EACpE,OAGF,MAAO,EAAO,QACZ,EACA,CAAC,IAAe,EAAO,QAAQ,IAAM,EAAO,WAAW,OAAO,CAAE,aAAc,EAAW,GAAI,UAAS,CAAC,CAAC,EACxG,CAAE,QAAS,EAAK,CAClB,EACA,QAAQ,OAAO,MAAM,iCAAiC,EAAM,OAAS,CAAG,EACzE,CACH", | ||
| "debugId": "BC143887953ABB6D64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mini.ts"], | ||
| "sourcesContent": [ | ||
| "import { Context, Effect, FileSystem, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServerConnection } from \"../../services/server-connection\"\nimport { Config } from \"../../config\"\nimport { resolve } from \"@opencode-ai/tui/config\"\n\nexport default Runtime.handler(Commands.commands.mini, (input) =>\n Effect.gen(function* () {\n const { runMini, validateMiniTerminal } = yield* Effect.promise(() => import(\"../../mini\"))\n yield* Effect.promise(async () => validateMiniTerminal())\n const serverURL = Option.getOrUndefined(input.server)\n const server = yield* ServerConnection.resolve({ server: serverURL, standalone: input.standalone })\n const config = yield* Config.Service\n const resolved = resolve(yield* config.get(), { terminalSuspend: process.platform !== \"win32\" })\n const fileSystem = yield* FileSystem.FileSystem\n const runServicePromise = Effect.runPromiseWith(Context.make(FileSystem.FileSystem, fileSystem))\n const service = server.service\n yield* Effect.promise(() =>\n runMini({\n server: {\n endpoint: server.endpoint,\n reconnect: service ? (signal) => runServicePromise(service.reconnect(), { signal }) : undefined,\n },\n continue: input.continue,\n session: Option.getOrUndefined(input.session),\n fork: input.fork,\n model: Option.getOrUndefined(input.model),\n agent: Option.getOrUndefined(input.agent),\n prompt: Option.getOrUndefined(input.prompt),\n replay: Option.getOrUndefined(input.replay) ?? resolved.mini?.replay ?? true,\n replayLimit: Option.getOrUndefined(input.replayLimit) ?? resolved.mini?.replay_limit,\n demo: input.demo,\n tuiConfig: resolved,\n config: {\n update: (update) => runServicePromise(config.update(update)),\n },\n }),\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";ogCAOA,SAAe,SAAQ,aAAQ,OAAS,cAAS,UAAM,MAAC,SACtD,OAAO,SAAI,cAAU,OAAG,MACtB,SAAQ,eAAS,6BAAyB,WAAO,OAAO,aAAQ,SAAa,wCAAa,OAC1F,WAAO,OAAO,aAAQ,cAAY,OAAqB,CAAC,EACxD,IAAM,EAAY,EAAO,eAAe,EAAM,MAAM,EAC9C,EAAS,MAAO,EAAiB,QAAQ,CAAE,OAAQ,EAAW,WAAY,EAAM,UAAW,CAAC,EAC5F,EAAS,MAAO,EAAO,QACvB,EAAW,EAAQ,MAAO,EAAO,IAAI,EAAG,CAAE,gBAAiB,EAA6B,CAAC,EACzF,EAAa,MAAO,EAAW,WAC/B,EAAoB,EAAO,eAAe,EAAQ,KAAK,EAAW,WAAY,CAAU,CAAC,EACzF,EAAU,EAAO,QACvB,MAAO,EAAO,QAAQ,IACpB,EAAQ,CACN,OAAQ,CACN,SAAU,EAAO,SACjB,UAAW,EAAU,CAAC,IAAW,EAAkB,EAAQ,UAAU,EAAG,CAAE,QAAO,CAAC,EAAI,MACxF,EACA,SAAU,EAAM,SAChB,QAAS,EAAO,eAAe,EAAM,OAAO,EAC5C,KAAM,EAAM,KACZ,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,OAAQ,EAAO,eAAe,EAAM,MAAM,EAC1C,OAAQ,EAAO,eAAe,EAAM,MAAM,GAAK,EAAS,MAAM,QAAU,GACxE,YAAa,EAAO,eAAe,EAAM,WAAW,GAAK,EAAS,MAAM,aACxE,KAAM,EAAM,KACZ,UAAW,EACX,OAAQ,CACN,OAAQ,CAAC,IAAW,EAAkB,EAAO,OAAO,CAAM,CAAC,CAC7D,CACF,CAAC,CACH,EACD,CACH", | ||
| "debugId": "EDD4B8518F7D63FE64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/auth.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport {\n OpenCode,\n type IntegrationAttemptStatus,\n type IntegrationOAuthMethod,\n type OpenCodeClient,\n} from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\nimport { resolveIntegration } from \"./resolve\"\n\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.auth,\n Effect.fn(\"cli.mcp.auth\")(function* (input) {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n\n const integration = yield* resolveIntegration(client, input.name, location)\n if (!integration)\n return yield* Effect.fail(new Error(`MCP server \"${input.name}\" is not an OAuth-capable remote server`))\n const method = integration.methods.find(\n (candidate): candidate is IntegrationOAuthMethod => candidate.type === \"oauth\",\n )\n if (!method)\n return yield* Effect.fail(new Error(`MCP server \"${input.name}\" is not an OAuth-capable remote server`))\n\n const started = yield* Effect.promise(() =>\n client.integration.oauth.connect({ integrationID: integration.id, methodID: method.id, inputs: {}, location }),\n )\n const attempt = started.data\n if (attempt.mode === \"code\")\n return yield* Effect.fail(new Error(\"This server requires manual code entry, which the CLI does not support\"))\n\n process.stdout.write(attempt.instructions + EOL + attempt.url + EOL)\n\n const result = yield* poll(client, integration.id, attempt.attemptID)\n if (result.status === \"complete\") {\n process.stdout.write(`Authenticated with ${input.name}` + EOL)\n return\n }\n const reason = result.status === \"failed\" ? `: ${result.message}` : \"\"\n return yield* Effect.fail(new Error(`Authentication ${result.status}${reason}`))\n }),\n)\n\nconst poll = (\n client: OpenCodeClient,\n integrationID: string,\n attemptID: string,\n): Effect.Effect<Exclude<IntegrationAttemptStatus, { status: \"pending\" }>> =>\n Effect.gen(function* () {\n const status = yield* Effect.promise(() =>\n client.integration.oauth.status({ integrationID, attemptID, location }),\n ).pipe(Effect.map((result) => result.data))\n if (status.status === \"pending\") {\n yield* Effect.sleep(\"1 second\")\n return yield* poll(client, integrationID, attemptID)\n }\n return status\n })\n" | ||
| ], | ||
| "mappings": ";66BAAA,mBAAS,gBAcT,SAAM,OAAW,MAAE,eAAW,aAAQ,SAAI,MAAE,OAE7B,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,UAC/B,OAAO,QAAG,mBAAc,OAAE,cAAU,MAAC,OAAO,CAC1C,IAAM,EAAU,MAAO,EAAc,QAAQ,EAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,EAAc,MAAO,EAAmB,EAAQ,EAAM,KAAM,CAAQ,EAC1E,GAAI,CAAC,EACH,OAAO,MAAO,EAAO,KAAS,MAAM,eAAe,EAAM,6CAA6C,CAAC,EACzG,IAAM,EAAS,EAAY,QAAQ,KACjC,CAAC,IAAmD,EAAU,OAAS,OACzE,EACA,GAAI,CAAC,EACH,OAAO,MAAO,EAAO,KAAS,MAAM,eAAe,EAAM,6CAA6C,CAAC,EAKzG,IAAM,GAHU,MAAO,EAAO,QAAQ,IACpC,EAAO,YAAY,MAAM,QAAQ,CAAE,cAAe,EAAY,GAAI,SAAU,EAAO,GAAI,OAAQ,CAAC,EAAG,UAAS,CAAC,CAC/G,GACwB,KACxB,GAAI,EAAQ,OAAS,OACnB,OAAO,MAAO,EAAO,KAAS,MAAM,wEAAwE,CAAC,EAE/G,QAAQ,OAAO,MAAM,EAAQ,aAAe,EAAM,EAAQ,IAAM,CAAG,EAEnE,IAAM,EAAS,MAAO,EAAK,EAAQ,EAAY,GAAI,EAAQ,SAAS,EACpE,GAAI,EAAO,SAAW,WAAY,CAChC,QAAQ,OAAO,MAAM,sBAAsB,EAAM,OAAS,CAAG,EAC7D,OAEF,IAAM,EAAS,EAAO,SAAW,SAAW,KAAK,EAAO,UAAY,GACpE,OAAO,MAAO,EAAO,KAAS,MAAM,kBAAkB,EAAO,SAAS,GAAQ,CAAC,EAChF,CACH,EAEM,EAAO,CACX,EACA,EACA,IAEA,EAAO,IAAI,SAAU,EAAG,CACtB,IAAM,EAAS,MAAO,EAAO,QAAQ,IACnC,EAAO,YAAY,MAAM,OAAO,CAAE,gBAAe,YAAW,UAAS,CAAC,CACxE,EAAE,KAAK,EAAO,IAAI,CAAC,IAAW,EAAO,IAAI,CAAC,EAC1C,GAAI,EAAO,SAAW,UAEpB,OADA,MAAO,EAAO,MAAM,UAAU,EACvB,MAAO,EAAK,EAAQ,EAAe,CAAS,EAErD,OAAO,EACR", | ||
| "debugId": "EE05052744A78EDE64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/anthropic-messages.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Schema } from \"effect\"\nimport { Tool } from \"@opencode-ai/schema/tool\"\nimport { Route } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n AIError,\n LLMEvent,\n mergeJsonRecords,\n Usage,\n type CacheHint,\n type FinishReasonDetails,\n type FinishReason,\n type JsonSchema,\n type LLMRequest,\n type MediaPart,\n type ProviderOptions,\n type ProviderMetadata,\n type ToolCallPart,\n type ToolDefinition,\n type ToolResultPart,\n} from \"../schema\"\nimport { JsonObject, optionalArray, optionalNull, ProviderShared } from \"./shared\"\nimport { classifyProviderFailure } from \"../provider-error\"\nimport * as Cache from \"./utils/cache\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\nimport { ToolStream } from \"./utils/tool-stream\"\n\nconst ADAPTER = \"anthropic-messages\"\nconst MEDIA_MIMES = new Set<string>([...ProviderShared.IMAGE_MIMES, ...ProviderShared.PDF_MIMES])\nexport const DEFAULT_BASE_URL = \"https://api.anthropic.com/v1\"\nexport const PATH = \"/messages\"\n\nexport type ThinkingInput =\n | {\n readonly type: \"adaptive\"\n readonly display?: \"summarized\" | \"omitted\"\n }\n | {\n readonly type: \"disabled\"\n }\n | ({ readonly type: \"enabled\" } & (\n | { readonly budgetTokens: number; readonly budget_tokens?: number }\n | { readonly budgetTokens?: number; readonly budget_tokens: number }\n ))\n\nexport interface OptionsInput {\n readonly [key: string]: unknown\n readonly thinking?: ThinkingInput\n readonly effort?: string\n}\n\nexport type ProviderOptionsInput = ProviderOptions & {\n readonly anthropic?: OptionsInput\n}\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\nconst AnthropicCacheControl = Schema.Struct({\n type: Schema.tag(\"ephemeral\"),\n ttl: Schema.optional(Schema.Literals([\"5m\", \"1h\"])),\n})\n\nconst AnthropicTextBlock = Schema.Struct({\n type: Schema.tag(\"text\"),\n text: Schema.String,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicTextBlock = Schema.Schema.Type<typeof AnthropicTextBlock>\n\nconst AnthropicImageBlock = Schema.Struct({\n type: Schema.tag(\"image\"),\n source: Schema.Struct({\n type: Schema.tag(\"base64\"),\n media_type: Schema.String,\n data: Schema.String,\n }),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicImageBlock = Schema.Schema.Type<typeof AnthropicImageBlock>\n\nconst AnthropicDocumentBlock = Schema.Struct({\n type: Schema.tag(\"document\"),\n source: Schema.Struct({\n type: Schema.tag(\"base64\"),\n media_type: Schema.Literal(\"application/pdf\"),\n data: Schema.String,\n }),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicDocumentBlock = Schema.Schema.Type<typeof AnthropicDocumentBlock>\n\nconst AnthropicThinkingBlock = Schema.Struct({\n type: Schema.tag(\"thinking\"),\n thinking: Schema.String,\n signature: Schema.optional(Schema.String),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\n\n// Safety-filtered thinking arrives as an opaque encrypted `data` payload with\n// no visible text. It must round-trip verbatim so multi-turn thinking + tool\n// use conversations keep their reasoning continuity.\nconst AnthropicRedactedThinkingBlock = Schema.Struct({\n type: Schema.tag(\"redacted_thinking\"),\n data: Schema.String,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\n\nconst AnthropicToolUseBlock = Schema.Struct({\n type: Schema.tag(\"tool_use\"),\n id: Schema.String,\n name: Schema.String,\n input: Schema.Unknown,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicToolUseBlock = Schema.Schema.Type<typeof AnthropicToolUseBlock>\n\nconst AnthropicServerToolUseBlock = Schema.Struct({\n type: Schema.tag(\"server_tool_use\"),\n id: Schema.String,\n name: Schema.String,\n input: Schema.Unknown,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicServerToolUseBlock = Schema.Schema.Type<typeof AnthropicServerToolUseBlock>\n\n// Server tool result blocks: web_search_tool_result, code_execution_tool_result,\n// and web_fetch_tool_result. The provider executes the tool and inlines the\n// structured result into the assistant turn — there is no client tool_result\n// round-trip. We round-trip the structured `content` payload as opaque JSON so\n// the next request can echo it back when continuing the conversation.\nconst AnthropicServerToolResultType = Schema.Literals([\n \"web_search_tool_result\",\n \"code_execution_tool_result\",\n \"web_fetch_tool_result\",\n])\ntype AnthropicServerToolResultType = Schema.Schema.Type<typeof AnthropicServerToolResultType>\n\nconst AnthropicServerToolResultBlock = Schema.Struct({\n type: AnthropicServerToolResultType,\n tool_use_id: Schema.String,\n content: Schema.Unknown,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicServerToolResultBlock = Schema.Schema.Type<typeof AnthropicServerToolResultBlock>\n\n// Anthropic accepts either a plain string or an ordered array of text, image, and\n// document blocks inside `tool_result.content`. The array form keeps media as native\n// model input instead of JSON-stringifying base64 into prompt text.\nconst AnthropicToolResultContent = Schema.Union([AnthropicTextBlock, AnthropicImageBlock, AnthropicDocumentBlock])\n\nconst AnthropicToolResultBlock = Schema.Struct({\n type: Schema.tag(\"tool_result\"),\n tool_use_id: Schema.String,\n content: Schema.Union([Schema.String, Schema.Array(AnthropicToolResultContent)]),\n is_error: Schema.optional(Schema.Boolean),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\n\nconst AnthropicUserBlock = Schema.Union([\n AnthropicTextBlock,\n AnthropicImageBlock,\n AnthropicDocumentBlock,\n AnthropicToolResultBlock,\n])\ntype AnthropicUserBlock = Schema.Schema.Type<typeof AnthropicUserBlock>\nconst AnthropicAssistantBlock = Schema.Union([\n AnthropicTextBlock,\n AnthropicThinkingBlock,\n AnthropicRedactedThinkingBlock,\n AnthropicToolUseBlock,\n AnthropicServerToolUseBlock,\n AnthropicServerToolResultBlock,\n])\ntype AnthropicAssistantBlock = Schema.Schema.Type<typeof AnthropicAssistantBlock>\ntype AnthropicToolResultBlock = Schema.Schema.Type<typeof AnthropicToolResultBlock>\n\nconst AnthropicMessage = Schema.Union([\n Schema.Struct({ role: Schema.Literal(\"user\"), content: Schema.Array(AnthropicUserBlock) }),\n Schema.Struct({ role: Schema.Literal(\"assistant\"), content: Schema.Array(AnthropicAssistantBlock) }),\n Schema.Struct({ role: Schema.Literal(\"system\"), content: Schema.Array(AnthropicTextBlock) }),\n]).pipe(Schema.toTaggedUnion(\"role\"))\ntype AnthropicMessage = Schema.Schema.Type<typeof AnthropicMessage>\n\nconst AnthropicTool = Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n input_schema: JsonObject,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicTool = Schema.Schema.Type<typeof AnthropicTool>\n\nconst AnthropicToolChoice = Schema.Union([\n Schema.Struct({ type: Schema.Literals([\"auto\", \"any\", \"none\"]) }),\n Schema.Struct({ type: Schema.tag(\"tool\"), name: Schema.String }),\n])\n\nconst AnthropicThinking = Schema.Union([\n Schema.Struct({\n type: Schema.tag(\"enabled\"),\n budget_tokens: Schema.Number,\n }),\n Schema.Struct({\n type: Schema.tag(\"adaptive\"),\n display: Schema.optional(Schema.Literals([\"summarized\", \"omitted\"])),\n }),\n Schema.Struct({\n type: Schema.tag(\"disabled\"),\n }),\n])\n\nconst AnthropicOutputConfig = Schema.Struct({\n effort: Schema.optional(Schema.String),\n})\n\nconst AnthropicBodyFields = {\n model: Schema.String,\n system: optionalArray(AnthropicTextBlock),\n messages: Schema.Array(AnthropicMessage),\n tools: optionalArray(AnthropicTool),\n tool_choice: Schema.optional(AnthropicToolChoice),\n stream: Schema.Literal(true),\n max_tokens: Schema.Number,\n temperature: Schema.optional(Schema.Number),\n top_p: Schema.optional(Schema.Number),\n top_k: Schema.optional(Schema.Number),\n stop_sequences: optionalArray(Schema.String),\n thinking: Schema.optional(AnthropicThinking),\n output_config: Schema.optional(AnthropicOutputConfig),\n}\nexport const AnthropicMessagesBody = Schema.Struct(AnthropicBodyFields)\nexport type AnthropicMessagesBody = Schema.Schema.Type<typeof AnthropicMessagesBody>\n\nconst AnthropicUsage = Schema.StructWithRest(\n Schema.Struct({\n input_tokens: Schema.optional(Schema.Number),\n output_tokens: Schema.optional(Schema.Number),\n cache_creation_input_tokens: optionalNull(Schema.Number),\n cache_read_input_tokens: optionalNull(Schema.Number),\n server_tool_use: optionalNull(\n Schema.StructWithRest(Schema.Struct({ web_search_requests: Schema.optional(Schema.Number) }), [\n Schema.Record(Schema.String, Schema.Unknown),\n ]),\n ),\n output_tokens_details: optionalNull(\n Schema.StructWithRest(Schema.Struct({ thinking_tokens: Schema.optional(Schema.Number) }), [\n Schema.Record(Schema.String, Schema.Unknown),\n ]),\n ),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n)\ntype AnthropicUsage = Schema.Schema.Type<typeof AnthropicUsage>\n\nconst AnthropicStreamBlock = Schema.Struct({\n type: Schema.String,\n id: Schema.optional(Schema.String),\n name: Schema.optional(Schema.String),\n text: Schema.optional(Schema.String),\n thinking: Schema.optional(Schema.String),\n signature: Schema.optional(Schema.String),\n // redacted_thinking blocks arrive whole in content_block_start with the\n // encrypted payload in `data`; there is no streaming delta sequence.\n data: Schema.optional(Schema.String),\n input: Schema.optional(Schema.Unknown),\n // *_tool_result blocks arrive whole as content_block_start (no streaming\n // delta) with the structured payload in `content` and the originating\n // server_tool_use id in `tool_use_id`.\n tool_use_id: Schema.optional(Schema.String),\n content: Schema.optional(Schema.Unknown),\n})\n\nconst AnthropicStreamDelta = Schema.Struct({\n type: Schema.optional(Schema.String),\n text: Schema.optional(Schema.String),\n thinking: Schema.optional(Schema.String),\n partial_json: Schema.optional(Schema.String),\n signature: Schema.optional(Schema.String),\n stop_reason: optionalNull(Schema.String),\n stop_sequence: optionalNull(Schema.String),\n})\n\nconst AnthropicEvent = Schema.Struct({\n type: Schema.String,\n index: Schema.optional(Schema.Number),\n message: Schema.optional(Schema.Struct({ usage: Schema.optional(AnthropicUsage) })),\n content_block: Schema.optional(AnthropicStreamBlock),\n delta: Schema.optional(AnthropicStreamDelta),\n usage: Schema.optional(AnthropicUsage),\n // `type` and `message` are both required per Anthropic's spec, but\n // OpenAI-compatible proxies and gateway translations occasionally drop one\n // or the other; mark them optional so a partial payload still parses and\n // the parser can fall back to whichever field is populated.\n error: Schema.optional(\n Schema.Struct({ type: Schema.optional(Schema.String), message: Schema.optional(Schema.String) }),\n ),\n})\ntype AnthropicEvent = Schema.Schema.Type<typeof AnthropicEvent>\n\ninterface ParserState {\n readonly tools: ToolStream.State<number>\n readonly reasoningSignatures: Readonly<Record<number, string>>\n readonly usage?: Usage\n readonly pendingFinish?: {\n readonly reason: FinishReasonDetails\n readonly providerMetadata?: ProviderMetadata\n }\n readonly lifecycle: Lifecycle.State\n}\n\nconst invalid = ProviderShared.invalidRequest\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\n// Anthropic accepts at most 4 explicit cache_control breakpoints per request,\n// across `tools`, `system`, and `messages`. Beyond the cap the API returns a\n// 400 — so the lowering layer counts emitted markers and silently drops any\n// that exceed it.\nconst ANTHROPIC_BREAKPOINT_CAP = 4\n\nconst EPHEMERAL_5M = { type: \"ephemeral\" as const }\nconst EPHEMERAL_1H = { type: \"ephemeral\" as const, ttl: \"1h\" as const }\n\nconst cacheControl = (breakpoints: Cache.Breakpoints, cache: CacheHint | undefined) => {\n if (cache?.type !== \"ephemeral\" && cache?.type !== \"persistent\") return undefined\n if (breakpoints.remaining <= 0) {\n breakpoints.dropped += 1\n return undefined\n }\n breakpoints.remaining -= 1\n return Cache.ttlBucket(cache.ttlSeconds) === \"1h\" ? EPHEMERAL_1H : EPHEMERAL_5M\n}\n\nconst anthropicMetadata = (metadata: Record<string, unknown>): ProviderMetadata => ({ anthropic: metadata })\n\nconst signatureFromMetadata = (metadata: ProviderMetadata | undefined): string | undefined => {\n const anthropic = metadata?.anthropic\n if (!ProviderShared.isRecord(anthropic)) return undefined\n return typeof anthropic.signature === \"string\" ? anthropic.signature : undefined\n}\n\nconst redactedDataFromMetadata = (metadata: ProviderMetadata | undefined): string | undefined => {\n const anthropic = metadata?.anthropic\n if (!ProviderShared.isRecord(anthropic)) return undefined\n return typeof anthropic.redactedData === \"string\" ? anthropic.redactedData : undefined\n}\n\nconst lowerTool = (breakpoints: Cache.Breakpoints, tool: ToolDefinition, inputSchema: JsonSchema): AnthropicTool => ({\n name: tool.name,\n description: tool.description,\n input_schema: inputSchema,\n cache_control: cacheControl(breakpoints, tool.cache),\n})\n\nconst lowerToolChoice = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"Anthropic Messages\", toolChoice, {\n auto: () => ({ type: \"auto\" as const }),\n none: () => ({ type: \"none\" as const }),\n required: () => ({ type: \"any\" as const }),\n tool: (name) => ({ type: \"tool\" as const, name }),\n })\n\nconst lowerToolCall = (part: ToolCallPart): AnthropicToolUseBlock => ({\n type: \"tool_use\",\n id: part.id,\n name: part.name,\n input: part.input,\n})\n\nconst lowerServerToolCall = (part: ToolCallPart): AnthropicServerToolUseBlock => ({\n type: \"server_tool_use\",\n id: part.id,\n name: part.name,\n input: part.input,\n})\n\n// Server tool result blocks are typed by name. Anthropic ships three today;\n// extend this list when new server tools land. The block content is the\n// structured payload returned by the provider, which we round-trip as-is.\nconst serverToolResultType = (name: string): AnthropicServerToolResultType | undefined => {\n if (name === \"web_search\") return \"web_search_tool_result\"\n if (name === \"code_execution\") return \"code_execution_tool_result\"\n if (name === \"web_fetch\") return \"web_fetch_tool_result\"\n return undefined\n}\n\nconst lowerServerToolResult = Effect.fn(\"AnthropicMessages.lowerServerToolResult\")(function* (part: ToolResultPart) {\n const wireType = serverToolResultType(part.name)\n if (!wireType)\n return yield* invalid(`Anthropic Messages does not know how to round-trip server tool result for ${part.name}`)\n // Prefer the provider-owned replay payload; fall back to the result value for\n // histories constructed directly from provider events.\n const payload = part.providerMetadata?.anthropic?.[\"result\"] ?? part.result.value\n return { type: wireType, tool_use_id: part.id, content: payload } satisfies AnthropicServerToolResultBlock\n})\n\nconst lowerMedia = Effect.fn(\"AnthropicMessages.lowerMedia\")(function* (part: MediaPart) {\n const media = yield* ProviderShared.validateMedia(\"Anthropic Messages\", part, MEDIA_MIMES)\n if (media.mime === \"application/pdf\")\n return {\n type: \"document\" as const,\n source: {\n type: \"base64\" as const,\n media_type: \"application/pdf\" as const,\n data: media.base64,\n },\n } satisfies AnthropicDocumentBlock\n return {\n type: \"image\" as const,\n source: {\n type: \"base64\" as const,\n media_type: media.mime,\n data: media.base64,\n },\n } satisfies AnthropicImageBlock\n})\n\n// Tool results may carry structured text, images, and documents. Keep media as provider-native\n// content instead of JSON-stringifying base64 into a prompt string.\nconst lowerToolResultContentItem = Effect.fn(\"AnthropicMessages.lowerToolResultContentItem\")(function* (\n item: Tool.Content,\n) {\n if (item.type === \"text\") return { type: \"text\" as const, text: item.text } satisfies AnthropicTextBlock\n return yield* lowerMedia({ type: \"media\", mediaType: item.mime, data: item.uri, filename: item.name })\n})\n\nconst lowerToolResultContent = Effect.fn(\"AnthropicMessages.lowerToolResultContent\")(function* (part: ToolResultPart) {\n // Text / json / error results stay as a string for backward compatibility\n // with existing cassettes and provider expectations.\n if (part.result.type !== \"content\") return ProviderShared.toolResultText(part)\n // Preserve the narrowed array element type when compiled through a consumer package.\n const content: ReadonlyArray<Tool.Content> = part.result.value\n return yield* Effect.forEach(content, lowerToolResultContentItem)\n})\n\n// Mid-conversation system messages are a native Claude API feature only for\n// Opus 4.8. Other Anthropic models intentionally use the same visible wrapped-\n// user fallback as non-Anthropic routes rather than sending a role they reject.\nconst supportsNativeSystemUpdates = (request: LLMRequest) => String(request.model.id) === \"claude-opus-4-8\"\n\nconst endsInServerToolUse = (message: LLMRequest[\"messages\"][number]) => {\n const last = message.content.at(-1)\n return message.role === \"assistant\" && last?.type === \"tool-call\" && last.providerExecuted === true\n}\n\nconst canUseNativeSystemUpdate = (messages: LLMRequest[\"messages\"], index: number) => {\n const previous = messages[index - 1]\n const next = messages[index + 1]\n return (\n previous !== undefined &&\n previous.role !== \"system\" &&\n (previous.role === \"user\" || previous.role === \"tool\" || endsInServerToolUse(previous)) &&\n next?.role !== \"system\" &&\n (next === undefined || next.role === \"assistant\")\n )\n}\n\nconst splitsLocalToolResults = (messages: LLMRequest[\"messages\"], index: number) => {\n const pending = new Set<string>()\n for (const message of messages.slice(0, index)) {\n for (const part of message.content) {\n if (message.role === \"assistant\" && part.type === \"tool-call\" && part.providerExecuted !== true)\n pending.add(part.id)\n if (message.role === \"tool\" && part.type === \"tool-result\") pending.delete(part.id)\n }\n }\n return pending.size > 0\n}\n\nconst lowerNativeSystemUpdate = Effect.fn(\"AnthropicMessages.lowerNativeSystemUpdate\")(function* (\n message: LLMRequest[\"messages\"][number],\n breakpoints: Cache.Breakpoints,\n) {\n const content = yield* ProviderShared.systemUpdateText(\"Anthropic Messages\", message)\n return {\n role: \"system\" as const,\n content: content.map((part) => ({\n type: \"text\" as const,\n text: part.text,\n cache_control: cacheControl(breakpoints, part.cache),\n })),\n }\n})\n\nconst lowerMessages = Effect.fn(\"AnthropicMessages.lowerMessages\")(function* (\n request: LLMRequest,\n breakpoints: Cache.Breakpoints,\n) {\n const messages: AnthropicMessage[] = []\n\n for (const [index, message] of request.messages.entries()) {\n if (message.role === \"system\") {\n if (splitsLocalToolResults(request.messages, index))\n return yield* invalid(\"Anthropic Messages system updates cannot split a local tool call from its tool result\")\n if (supportsNativeSystemUpdates(request) && canUseNativeSystemUpdate(request.messages, index)) {\n messages.push(yield* lowerNativeSystemUpdate(message, breakpoints))\n continue\n }\n const part = yield* ProviderShared.wrappedSystemUpdate(\"Anthropic Messages\", message)\n const block = { type: \"text\" as const, text: part.text, cache_control: cacheControl(breakpoints, part.cache) }\n const previous = messages.at(-1)\n if (previous?.role === \"user\")\n messages[messages.length - 1] = { role: \"user\", content: [...previous.content, block] }\n else messages.push({ role: \"user\", content: [block] })\n continue\n }\n\n if (message.role === \"user\") {\n const content: AnthropicUserBlock[] = []\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text, cache_control: cacheControl(breakpoints, part.cache) })\n continue\n }\n if (part.type === \"media\") {\n content.push(yield* lowerMedia(part))\n continue\n }\n return yield* ProviderShared.unsupportedContent(\"Anthropic Messages\", \"user\", [\"text\", \"media\"])\n }\n messages.push({ role: \"user\", content })\n continue\n }\n\n if (message.role === \"assistant\") {\n const content: AnthropicAssistantBlock[] = []\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text, cache_control: cacheControl(breakpoints, part.cache) })\n continue\n }\n if (part.type === \"reasoning\") {\n // Mirrors Vercel's @ai-sdk/anthropic: a signature marks visible\n // thinking; only signature-less parts carrying redactedData\n // round-trip as opaque redacted_thinking blocks.\n const signature = part.encrypted ?? signatureFromMetadata(part.providerMetadata)\n const redactedData = redactedDataFromMetadata(part.providerMetadata)\n if (signature === undefined && redactedData !== undefined) {\n content.push({ type: \"redacted_thinking\", data: redactedData })\n continue\n }\n content.push({ type: \"thinking\", thinking: part.text, signature })\n continue\n }\n if (part.type === \"tool-call\") {\n content.push(part.providerExecuted ? lowerServerToolCall(part) : lowerToolCall(part))\n continue\n }\n if (part.type === \"tool-result\" && part.providerExecuted) {\n content.push(yield* lowerServerToolResult(part))\n continue\n }\n return yield* invalid(\n `Anthropic Messages assistant messages only support text, reasoning, and tool-call content for now`,\n )\n }\n messages.push({ role: \"assistant\", content })\n continue\n }\n\n const content: AnthropicToolResultBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"Anthropic Messages\", \"tool\", [\"tool-result\"])\n content.push({\n type: \"tool_result\",\n tool_use_id: part.id,\n content: yield* lowerToolResultContent(part),\n is_error: part.result.type === \"error\" ? true : undefined,\n cache_control: cacheControl(breakpoints, part.cache),\n })\n }\n messages.push({ role: \"user\", content })\n }\n\n return messages\n})\n\nconst resolveOptions = Effect.fn(\"AnthropicMessages.resolveOptions\")(function* (request: LLMRequest) {\n const input = request.providerOptions?.anthropic\n return {\n thinking: yield* resolveThinking(input?.thinking),\n effort: typeof input?.effort === \"string\" ? input.effort : undefined,\n }\n})\n\nconst resolveThinking = Effect.fn(\"AnthropicMessages.resolveThinking\")(function* (input: unknown) {\n if (!ProviderShared.isRecord(input)) return undefined\n if (input.type === \"adaptive\") {\n const display =\n input.display === \"summarized\"\n ? (\"summarized\" as const)\n : input.display === \"omitted\"\n ? (\"omitted\" as const)\n : undefined\n return { type: \"adaptive\" as const, ...(display === undefined ? {} : { display }) }\n }\n if (input.type === \"disabled\") return { type: \"disabled\" as const }\n if (input.type !== \"enabled\") return undefined\n const budget =\n typeof input.budgetTokens === \"number\"\n ? input.budgetTokens\n : typeof input.budget_tokens === \"number\"\n ? input.budget_tokens\n : undefined\n if (budget === undefined)\n return yield* ProviderShared.invalidRequest(\"Anthropic thinking provider option requires budgetTokens\")\n return { type: \"enabled\" as const, budget_tokens: budget }\n})\n\nconst fromRequest = Effect.fn(\"AnthropicMessages.fromRequest\")(function* (request: LLMRequest) {\n const generation = request.generation\n const toolSchemaCompatibility = request.model.compatibility?.toolSchema\n const outputLimit = request.model.defaults?.limits?.output ?? request.model.route.defaults.limits?.output ?? 4096\n // Allocate the 4-breakpoint budget in invalidation order: tools → system →\n // messages. Tools live highest in the cache hierarchy, so when callers\n // over-mark we keep their tool hints and shed the message-tail ones first.\n const breakpoints = Cache.newBreakpoints(ANTHROPIC_BREAKPOINT_CAP)\n const tools =\n request.tools.length === 0\n ? undefined\n : request.tools.map((tool) =>\n lowerTool(\n breakpoints,\n tool,\n ToolSchemaProjection.modelCompatibility(tool.inputSchema, toolSchemaCompatibility),\n ),\n )\n // Anthropic rejects tool_choice when tools are absent; \"none\" is only meaningful with tools present.\n const toolChoice = tools === undefined || !request.toolChoice ? undefined : yield* lowerToolChoice(request.toolChoice)\n const system =\n request.system.length === 0\n ? undefined\n : request.system.map((part) => ({\n type: \"text\" as const,\n text: part.text,\n cache_control: cacheControl(breakpoints, part.cache),\n }))\n const messages = yield* lowerMessages(request, breakpoints)\n if (breakpoints.dropped > 0) {\n yield* Effect.logWarning(\n `Anthropic Messages: dropped ${breakpoints.dropped} cache breakpoint(s); the API allows at most ${ANTHROPIC_BREAKPOINT_CAP} per request.`,\n )\n }\n const options = yield* resolveOptions(request)\n return {\n model: request.model.id,\n system,\n messages,\n tools,\n tool_choice: toolChoice,\n stream: true as const,\n max_tokens: generation?.maxTokens ?? outputLimit,\n temperature: generation?.temperature,\n top_p: generation?.topP,\n top_k: generation?.topK,\n stop_sequences: generation?.stop,\n thinking: options.thinking,\n output_config: options.effort === undefined ? undefined : { effort: options.effort },\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\nconst mapFinishReason = (reason: string | null | undefined): FinishReason => {\n if (reason === \"end_turn\" || reason === \"stop_sequence\" || reason === \"pause_turn\") return \"stop\"\n if (reason === \"max_tokens\" || reason === \"model_context_window_exceeded\") return \"length\"\n if (reason === \"tool_use\") return \"tool-calls\"\n if (reason === \"refusal\") return \"content-filter\"\n return \"unknown\"\n}\n\n// Anthropic reports the non-overlapping breakdown natively — its\n// `input_tokens` is the *non-cached* count per the Messages API docs, with\n// cache reads and writes as separate fields. We sum them to derive the\n// inclusive `inputTokens` the rest of the contract expects. Extended\n// thinking tokens are included in `output_tokens`; newer responses also\n// expose that subset through `output_tokens_details.thinking_tokens`.\nconst mapUsage = (usage: AnthropicUsage | undefined): Usage | undefined => {\n if (!usage) return undefined\n const nonCached = usage.input_tokens\n const cacheRead = usage.cache_read_input_tokens ?? undefined\n const cacheWrite = usage.cache_creation_input_tokens ?? undefined\n const inputTokens = ProviderShared.sumTokens(nonCached, cacheRead, cacheWrite)\n return new Usage({\n inputTokens,\n outputTokens: usage.output_tokens,\n nonCachedInputTokens: nonCached,\n cacheReadInputTokens: cacheRead,\n cacheWriteInputTokens: cacheWrite,\n reasoningTokens: usage.output_tokens_details?.thinking_tokens,\n totalTokens: ProviderShared.totalTokens(inputTokens, usage.output_tokens, undefined),\n providerMetadata: { anthropic: usage },\n })\n}\n\n// Anthropic emits usage on `message_start` and again on `message_delta` — the\n// final delta carries the authoritative totals. Right-biased merge: each\n// field prefers `right` when defined, falls back to `left`. `inputTokens` is\n// recomputed from the merged breakdown so the inclusive total stays\n// consistent with `nonCached + cacheRead + cacheWrite`.\nconst mergeUsage = (left: Usage | undefined, right: Usage | undefined) => {\n if (!left) return right\n if (!right) return left\n const nonCachedInputTokens = right.nonCachedInputTokens ?? left.nonCachedInputTokens\n const cacheReadInputTokens = right.cacheReadInputTokens ?? left.cacheReadInputTokens\n const cacheWriteInputTokens = right.cacheWriteInputTokens ?? left.cacheWriteInputTokens\n const inputTokens = ProviderShared.sumTokens(nonCachedInputTokens, cacheReadInputTokens, cacheWriteInputTokens)\n const outputTokens = right.outputTokens ?? left.outputTokens\n const reasoningTokens = right.reasoningTokens ?? left.reasoningTokens\n return new Usage({\n inputTokens,\n outputTokens,\n nonCachedInputTokens,\n cacheReadInputTokens,\n cacheWriteInputTokens,\n reasoningTokens,\n totalTokens: ProviderShared.totalTokens(inputTokens, outputTokens, undefined),\n providerMetadata: {\n anthropic: mergeJsonRecords(left.providerMetadata?.[\"anthropic\"], right.providerMetadata?.[\"anthropic\"]) ?? {},\n },\n })\n}\n\n// Server tool result blocks come whole in `content_block_start` (no streaming\n// delta sequence). We convert the payload to a `tool-result` event with\n// `providerExecuted: true`. The runtime appends it to the assistant message\n// for round-trip; downstream consumers can inspect `result.value` for the\n// structured payload.\nconst SERVER_TOOL_RESULT_NAMES: Record<AnthropicServerToolResultType, string> = {\n web_search_tool_result: \"web_search\",\n code_execution_tool_result: \"code_execution\",\n web_fetch_tool_result: \"web_fetch\",\n}\n\nconst isServerToolResultType = (type: string): type is AnthropicServerToolResultType => type in SERVER_TOOL_RESULT_NAMES\n\nconst serverToolResultEvent = (block: NonNullable<AnthropicEvent[\"content_block\"]>): LLMEvent | undefined => {\n if (!block.type || !isServerToolResultType(block.type)) return undefined\n const errorPayload =\n typeof block.content === \"object\" && block.content !== null && \"type\" in block.content\n ? String((block.content as Record<string, unknown>).type)\n : \"\"\n const isError = errorPayload.endsWith(\"_tool_result_error\")\n return LLMEvent.toolResult({\n id: block.tool_use_id ?? \"\",\n name: SERVER_TOOL_RESULT_NAMES[block.type],\n result: isError ? { type: \"error\", value: block.content } : { type: \"json\", value: block.content },\n providerExecuted: true,\n // The complete payload is irreducible provider replay state: subsequent\n // stateless requests must round-trip the typed result block verbatim.\n providerMetadata: anthropicMetadata({ blockType: block.type, result: block.content }),\n })\n}\n\ntype StepResult = readonly [ParserState, ReadonlyArray<LLMEvent>]\n\nconst NO_EVENTS: StepResult[\"1\"] = []\n\nconst onMessageStart = (state: ParserState, event: AnthropicEvent): StepResult => {\n const usage = mapUsage(event.message?.usage)\n return [usage ? { ...state, usage: mergeUsage(state.usage, usage) } : state, NO_EVENTS]\n}\n\nconst onContentBlockStart = (state: ParserState, event: AnthropicEvent): StepResult => {\n const block = event.content_block\n if (!block) return [state, NO_EVENTS]\n\n if ((block.type === \"tool_use\" || block.type === \"server_tool_use\") && event.index !== undefined) {\n const events: LLMEvent[] = []\n const lifecycle = Lifecycle.stepStart(state.lifecycle, events)\n return [\n {\n ...state,\n lifecycle,\n tools: ToolStream.start(state.tools, event.index, {\n id: block.id ?? String(event.index),\n name: block.name ?? \"\",\n input:\n block.input !== undefined && (!ProviderShared.isRecord(block.input) || Object.keys(block.input).length > 0)\n ? ProviderShared.encodeJson(block.input)\n : undefined,\n providerExecuted: block.type === \"server_tool_use\",\n }),\n },\n [\n ...events,\n LLMEvent.toolInputStart({\n id: block.id ?? String(event.index),\n name: block.name ?? \"\",\n providerExecuted: block.type === \"server_tool_use\" ? true : undefined,\n }),\n ],\n ]\n }\n\n if (block.type === \"text\" && block.text !== undefined) {\n const events: LLMEvent[] = []\n const id = `text-${event.index ?? 0}`\n const lifecycle = Lifecycle.textStart(state.lifecycle, events, id)\n return [\n { ...state, lifecycle: block.text ? Lifecycle.textDelta(lifecycle, events, id, block.text) : lifecycle },\n events,\n ]\n }\n\n if (block.type === \"thinking\" && block.thinking !== undefined) {\n const events: LLMEvent[] = []\n const id = `reasoning-${event.index ?? 0}`\n const providerMetadata =\n block.signature === undefined ? undefined : anthropicMetadata({ signature: block.signature })\n const lifecycle = Lifecycle.reasoningStart(state.lifecycle, events, id, providerMetadata)\n return [\n {\n ...state,\n lifecycle: block.thinking\n ? Lifecycle.reasoningDelta(lifecycle, events, id, block.thinking, providerMetadata)\n : lifecycle,\n reasoningSignatures:\n event.index === undefined || block.signature === undefined\n ? state.reasoningSignatures\n : { ...state.reasoningSignatures, [event.index]: block.signature },\n },\n events,\n ]\n }\n\n // Redacted thinking surfaces as an empty reasoning part carrying the opaque\n // payload as `redactedData` metadata (same model as Vercel's\n // @ai-sdk/anthropic). The existing content_block_stop closes the part.\n if (block.type === \"redacted_thinking\" && block.data !== undefined) {\n const events: LLMEvent[] = []\n return [\n {\n ...state,\n lifecycle: Lifecycle.reasoningStart(\n state.lifecycle,\n events,\n `reasoning-${event.index ?? 0}`,\n anthropicMetadata({ redactedData: block.data }),\n ),\n },\n events,\n ]\n }\n\n const result = serverToolResultEvent(block)\n if (!result) return [state, NO_EVENTS]\n const events: LLMEvent[] = []\n return [{ ...state, lifecycle: Lifecycle.stepStart(state.lifecycle, events) }, [...events, result]]\n}\n\nconst onContentBlockDelta = Effect.fn(\"AnthropicMessages.onContentBlockDelta\")(function* (\n state: ParserState,\n event: AnthropicEvent,\n) {\n const delta = event.delta\n\n if (delta?.type === \"text_delta\" && delta.text) {\n const events: LLMEvent[] = []\n return [\n { ...state, lifecycle: Lifecycle.textDelta(state.lifecycle, events, `text-${event.index ?? 0}`, delta.text) },\n events,\n ] satisfies StepResult\n }\n\n if (delta?.type === \"thinking_delta\" && delta.thinking) {\n const events: LLMEvent[] = []\n return [\n {\n ...state,\n lifecycle: Lifecycle.reasoningDelta(state.lifecycle, events, `reasoning-${event.index ?? 0}`, delta.thinking),\n },\n events,\n ] satisfies StepResult\n }\n\n if (delta?.type === \"signature_delta\" && delta.signature) {\n const index = event.index ?? 0\n return [\n {\n ...state,\n reasoningSignatures: { ...state.reasoningSignatures, [index]: delta.signature },\n },\n NO_EVENTS,\n ] satisfies StepResult\n }\n\n if (delta?.type === \"input_json_delta\" && event.index !== undefined) {\n if (!delta.partial_json) return [state, NO_EVENTS] satisfies StepResult\n const result = ToolStream.appendExisting(\n ADAPTER,\n state.tools,\n event.index,\n delta.partial_json,\n \"Anthropic Messages tool argument delta is missing its tool call\",\n )\n if (ToolStream.isError(result)) return yield* result\n const events: LLMEvent[] = []\n const lifecycle = result.events.length ? Lifecycle.stepStart(state.lifecycle, events) : state.lifecycle\n events.push(...result.events)\n return [{ ...state, lifecycle, tools: result.tools }, events] satisfies StepResult\n }\n\n return [state, NO_EVENTS] satisfies StepResult\n})\n\nconst onContentBlockStop = Effect.fn(\"AnthropicMessages.onContentBlockStop\")(function* (\n state: ParserState,\n event: AnthropicEvent,\n) {\n if (event.index === undefined) return [state, NO_EVENTS] satisfies StepResult\n const result = yield* ToolStream.finish(ADAPTER, state.tools, event.index)\n const events: LLMEvent[] = []\n const resultEvents = result.events ?? []\n const signature = state.reasoningSignatures[event.index]\n const lifecycle = resultEvents.length\n ? Lifecycle.stepStart(state.lifecycle, events)\n : Lifecycle.reasoningEnd(\n Lifecycle.textEnd(state.lifecycle, events, `text-${event.index}`),\n events,\n `reasoning-${event.index}`,\n signature === undefined ? undefined : anthropicMetadata({ signature }),\n )\n events.push(...resultEvents)\n const reasoningSignatures = { ...state.reasoningSignatures }\n delete reasoningSignatures[event.index]\n return [{ ...state, lifecycle, tools: result.tools, reasoningSignatures }, events] satisfies StepResult\n})\n\nconst onMessageDelta = (state: ParserState, event: AnthropicEvent): StepResult => {\n const usage = mergeUsage(state.usage, mapUsage(event.usage))\n return [\n {\n ...state,\n usage,\n pendingFinish: {\n reason: {\n normalized: mapFinishReason(event.delta?.stop_reason),\n raw: event.delta?.stop_reason ?? undefined,\n },\n providerMetadata:\n event.delta?.stop_sequence === null || event.delta?.stop_sequence === undefined\n ? undefined\n : anthropicMetadata({ stopSequence: event.delta.stop_sequence }),\n },\n },\n NO_EVENTS,\n ]\n}\n\nconst onMessageStop = (state: ParserState): StepResult => {\n const events: LLMEvent[] = []\n const lifecycle = Lifecycle.finish(state.lifecycle, events, {\n reason: state.pendingFinish?.reason ?? {\n normalized: \"unknown\",\n raw: undefined,\n },\n usage: state.usage,\n providerMetadata: state.pendingFinish?.providerMetadata,\n })\n return [{ ...state, lifecycle }, events]\n}\n\n// Prefix `error.type` so overloads, rate limits, and quota errors are visible\n// even when the provider message is generic or empty.\nconst providerErrorMessage = (event: AnthropicEvent): string => {\n const type = event.error?.type\n const message = event.error?.message\n if (type && message) return `${type}: ${message}`\n return message || type || \"Anthropic Messages stream error\"\n}\n\nconst onError = (event: AnthropicEvent) =>\n new AIError({\n module: ADAPTER,\n method: \"stream\",\n reason: classifyProviderFailure({ message: providerErrorMessage(event), code: event.error?.type }),\n })\n\nconst step = (state: ParserState, event: AnthropicEvent) => {\n if (event.type === \"message_start\") return Effect.succeed(onMessageStart(state, event))\n if (event.type === \"content_block_start\") return Effect.succeed(onContentBlockStart(state, event))\n if (event.type === \"content_block_delta\") return onContentBlockDelta(state, event)\n if (event.type === \"content_block_stop\") return onContentBlockStop(state, event)\n if (event.type === \"message_delta\") return Effect.succeed(onMessageDelta(state, event))\n if (event.type === \"message_stop\") return Effect.succeed(onMessageStop(state))\n if (event.type === \"error\") return onError(event)\n return Effect.succeed<StepResult>([state, NO_EVENTS])\n}\n\n// =============================================================================\n// Protocol And Anthropic Route\n// =============================================================================\n/**\n * The Anthropic Messages protocol — request body construction, body schema,\n * and the streaming-event state machine. Used by native Anthropic Cloud and\n * (once registered) Vertex Anthropic / Bedrock-hosted Anthropic passthrough.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: AnthropicMessagesBody,\n from: fromRequest,\n },\n stream: {\n event: Protocol.jsonEvent(AnthropicEvent),\n initial: () => ({\n tools: ToolStream.empty<number>(),\n reasoningSignatures: {},\n lifecycle: Lifecycle.initial(),\n }),\n step,\n },\n})\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"anthropic\",\n providerMetadataKey: \"anthropic\",\n protocol,\n endpoint: Endpoint.path(PATH, { baseURL: DEFAULT_BASE_URL }),\n auth: Auth.none,\n framing: Framing.sse,\n headers: () => ({ \"anthropic-version\": \"2023-06-01\" }),\n})\n\nexport * as AnthropicMessages from \"./anthropic-messages\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "5804F5C11560E15964756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/xai-images.ts", "../ai/src/providers/xai.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Encoding, Schema } from \"effect\"\nimport { Headers, HttpClientRequest } from \"effect/unstable/http\"\nimport { GeneratedImage, ImageModel, ImageResponse, type ImageRequestFor, type ImageRoute } from \"../image\"\nimport { Auth, type Definition as AuthDefinition } from \"../route/auth\"\nimport {\n InvalidProviderOutputReason,\n AIError,\n Usage,\n mergeHttpOptions,\n mergeJsonRecords,\n type HttpOptions,\n} from \"../schema\"\nimport { ProviderShared, optionalNull } from \"./shared\"\nimport { ImageInputs } from \"./utils/image-input\"\n\nconst ADAPTER = \"xai-images\"\nexport const DEFAULT_BASE_URL = \"https://api.x.ai/v1\"\nexport const PATH = \"/images/generations\"\nexport const EDIT_PATH = \"/images/edits\"\n\nexport type XAIImageString<Known extends string> = Known | (string & {})\n\nexport type XAIImageOptions = {\n readonly n?: number\n readonly aspectRatio?: XAIImageString<\n | \"1:1\"\n | \"3:4\"\n | \"4:3\"\n | \"9:16\"\n | \"16:9\"\n | \"2:3\"\n | \"3:2\"\n | \"9:19.5\"\n | \"19.5:9\"\n | \"9:20\"\n | \"20:9\"\n | \"1:2\"\n | \"2:1\"\n | \"auto\"\n >\n readonly aspect_ratio?: XAIImageString<\n | \"1:1\"\n | \"3:4\"\n | \"4:3\"\n | \"9:16\"\n | \"16:9\"\n | \"2:3\"\n | \"3:2\"\n | \"9:19.5\"\n | \"19.5:9\"\n | \"9:20\"\n | \"20:9\"\n | \"1:2\"\n | \"2:1\"\n | \"auto\"\n >\n readonly resolution?: XAIImageString<\"1k\" | \"2k\">\n readonly responseFormat?: XAIImageString<\"url\" | \"b64_json\">\n readonly response_format?: XAIImageString<\"url\" | \"b64_json\">\n} & Record<string, unknown>\n\ntype XAIImageBody = Record<string, unknown> & {\n readonly model: string\n readonly prompt: string\n}\n\nconst XAIImageResponse = Schema.Struct({\n data: Schema.Array(\n Schema.Struct({\n b64_json: optionalNull(Schema.String),\n url: optionalNull(Schema.String),\n revised_prompt: optionalNull(Schema.String),\n mime_type: optionalNull(Schema.String),\n }),\n ),\n usage: Schema.optional(Schema.Unknown),\n})\n\nexport interface ModelInput {\n readonly id: string\n readonly auth: AuthDefinition\n readonly baseURL?: string\n readonly headers?: Record<string, string>\n readonly http?: HttpOptions\n}\n\nconst nativeOptions = (options: XAIImageOptions | undefined) => {\n if (!options) return undefined\n const { aspectRatio, responseFormat, ...native } = options\n return {\n aspect_ratio: aspectRatio,\n response_format: responseFormat,\n ...native,\n }\n}\n\nconst invalidOutput = (message: string) =>\n new AIError({\n module: ADAPTER,\n method: \"generate\",\n reason: new InvalidProviderOutputReason({ message, route: ADAPTER }),\n })\n\nconst applyQuery = (url: string, query: Record<string, string> | undefined) => {\n if (!query) return url\n const next = new URL(url)\n Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value))\n return next.toString()\n}\n\nexport const model = (input: ModelInput) => {\n const route: ImageRoute<XAIImageOptions> = {\n id: ADAPTER,\n generate: Effect.fn(\"XAIImages.generate\")(function* (request: ImageRequestFor<XAIImageOptions>, execute) {\n const http = mergeHttpOptions(request.model.http, request.http)\n const imageReferences = (request.images ?? []).map((image) => {\n if (image.type === \"bytes\") return { url: ImageInputs.dataUrl(image), type: \"image_url\" as const }\n if (image.type === \"url\") return { url: image.url, type: \"image_url\" as const }\n if (image.type === \"file-id\") return { file_id: image.id }\n return undefined\n })\n if (imageReferences.some((image) => image === undefined))\n return yield* ImageInputs.invalid(ADAPTER, \"xAI Images accepts image URLs, data URLs, bytes, and file IDs\")\n const requestBody = mergeJsonRecords(\n {\n model: request.model.id,\n prompt: request.prompt,\n image: imageReferences.length === 1 ? imageReferences[0] : undefined,\n images: imageReferences.length > 1 ? imageReferences : undefined,\n },\n nativeOptions(request.options),\n http?.body,\n ) as XAIImageBody\n const text = ProviderShared.encodeJson(requestBody)\n const url = applyQuery(\n `${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\")}${imageReferences.length === 0 ? PATH : EDIT_PATH}`,\n http?.query,\n )\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: text,\n headers: Headers.fromInput({ ...input.headers, ...http?.headers }),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(\n HttpClientRequest.setHeaders(headers),\n HttpClientRequest.bodyText(text, \"application/json\"),\n ),\n )\n const payload = yield* response.json.pipe(\n Effect.mapError(() => invalidOutput(\"Failed to read the xAI Images response\")),\n )\n const decoded = yield* Schema.decodeUnknownEffect(XAIImageResponse)(payload).pipe(\n Effect.mapError(() => invalidOutput(\"xAI Images returned an invalid response\")),\n )\n const images = yield* Effect.forEach(decoded.data, (item, index) => {\n const mediaType = item.mime_type ?? \"application/octet-stream\"\n if (item.b64_json)\n return Effect.fromResult(Encoding.decodeBase64(item.b64_json)).pipe(\n Effect.mapError(() => invalidOutput(`xAI Images result ${index} contains invalid base64 data`)),\n Effect.map(\n (data) =>\n new GeneratedImage({\n mediaType,\n data,\n providerMetadata:\n item.revised_prompt === undefined || item.revised_prompt === null\n ? undefined\n : { xai: { revisedPrompt: item.revised_prompt } },\n }),\n ),\n )\n if (item.url)\n return Effect.succeed(\n new GeneratedImage({\n mediaType,\n data: item.url,\n providerMetadata:\n item.revised_prompt === undefined || item.revised_prompt === null\n ? undefined\n : { xai: { revisedPrompt: item.revised_prompt } },\n }),\n )\n return Effect.fail(invalidOutput(`xAI Images result ${index} has neither image data nor a URL`))\n })\n if (images.length === 0) return yield* invalidOutput(\"xAI Images returned no images\")\n const usage = ProviderShared.isRecord(decoded.usage) ? decoded.usage : undefined\n return new ImageResponse({\n images,\n usage: usage === undefined ? undefined : new Usage({ providerMetadata: { xai: usage } }),\n providerMetadata: usage === undefined ? undefined : { xai: { usage } },\n })\n }),\n }\n return ImageModel.make<XAIImageOptions>({ id: input.id, provider: \"xai\", route, http: input.http })\n}\n\nexport const XAIImages = {\n model,\n} as const\n", | ||
| "import { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport { Route, type RouteDefaultsInput } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { HttpOptions, ProviderID, type ModelID, type ProviderOptions } from \"../schema\"\nimport * as OpenAICompatibleProfiles from \"./openai-compatible-profile\"\nimport * as OpenAICompatibleChat from \"../protocols/openai-compatible-chat\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport * as OpenAIResponses from \"../protocols/openai-responses\"\nimport { XAIImages } from \"../protocols/xai-images\"\nimport type { OpenAIOptionsInput } from \"./openai-options\"\nimport type { ProviderPackage } from \"../provider-package\"\n\nexport const id = ProviderID.make(\"xai\")\n\nexport type XAIProviderOptionsInput = ProviderOptions & {\n readonly xai?: OpenAIOptionsInput\n}\n\nexport type LanguageModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: XAIProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly providerOptions?: XAIProviderOptionsInput\n}\n\nexport type { XAIImageOptions } from \"../protocols/xai-images\"\n\nconst responsesRoute = Route.make({\n id: \"openai-responses\",\n provider: id,\n providerMetadataKey: \"xai\",\n protocol: OpenAIResponses.protocol,\n endpoint: Endpoint.path(\"/responses\", { baseURL: OpenAICompatibleProfiles.profiles.xai.baseURL }),\n transport: OpenAIResponses.httpTransport,\n defaults: { providerOptions: { xai: { store: false } } },\n})\n\nconst chatRoute = Route.make({\n id: \"openai-compatible-chat\",\n provider: id,\n providerMetadataKey: \"xai\",\n protocol: OpenAIChat.protocol,\n endpoint: Endpoint.path(\"/chat/completions\", { baseURL: OpenAICompatibleProfiles.profiles.xai.baseURL }),\n transport: OpenAICompatibleChat.route.transport,\n})\n\nexport const routes = [responsesRoute, chatRoute]\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => AuthOptions.bearer(options, \"XAI_API_KEY\")\n\nconst configuredResponsesRoute = (input: LanguageModelOptions) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return responsesRoute.with({\n ...rest,\n endpoint: { baseURL: baseURL ?? OpenAICompatibleProfiles.profiles.xai.baseURL },\n auth: auth(input),\n })\n}\n\nconst configuredChatRoute = (input: LanguageModelOptions) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return chatRoute.with({\n ...rest,\n endpoint: { baseURL: baseURL ?? OpenAICompatibleProfiles.profiles.xai.baseURL },\n auth: auth(input),\n })\n}\n\nexport const configure = (input: LanguageModelOptions = {}) => {\n const responsesRoute = configuredResponsesRoute(input)\n const chatRoute = configuredChatRoute(input)\n const responses = (modelID: string | ModelID) => responsesRoute.model<XAIProviderOptionsInput>({ id: modelID })\n const chat = (modelID: string | ModelID) => chatRoute.model<XAIProviderOptionsInput>({ id: modelID })\n const image = (modelID: string | ModelID) =>\n XAIImages.model({\n id: modelID,\n auth: auth(input),\n baseURL: input.baseURL ?? OpenAICompatibleProfiles.profiles.xai.baseURL,\n headers: input.headers,\n http: input.http === undefined ? undefined : HttpOptions.make(input.http),\n })\n return {\n id,\n model: responses,\n responses,\n chat,\n image,\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, XAIProviderOptionsInput>[\"model\"] = (modelID, settings) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers,\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\nexport const responses = provider.responses\nexport const chat = provider.chat\nexport const image = provider.image\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "D1AC945179A4119864756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/image-client.ts", "../ai/src/image.ts"], | ||
| "sourcesContent": [ | ||
| "import { Context, Effect, Layer } from \"effect\"\nimport { RequestExecutor } from \"./route/executor\"\nimport type { ImageOptions, ImageRequest, ImageRequestFor, ImageResponse } from \"./image\"\nimport type { AIError } from \"./schema\"\n\nexport type Execute = RequestExecutor.Interface[\"execute\"]\n\nexport interface Interface {\n readonly generate: <Options extends ImageOptions>(\n request: ImageRequestFor<Options>,\n ) => Effect.Effect<ImageResponse, AIError>\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@opencode/ImageClient\") {}\n\nexport const generate = <Options extends ImageOptions>(\n request: ImageRequestFor<Options>,\n): Effect.Effect<ImageResponse, AIError> =>\n Effect.gen(function* () {\n const client = yield* Service\n return yield* client.generate(request)\n }) as Effect.Effect<ImageResponse, AIError>\n\nexport const layer: Layer.Layer<Service, never, RequestExecutor.Service> = Layer.effect(\n Service,\n Effect.gen(function* () {\n const executor = yield* RequestExecutor.Service\n return Service.of({\n generate: (request) => request.model.route.generate(request, executor.execute),\n })\n }),\n)\n\nexport const ImageClient = {\n Service,\n layer,\n generate,\n} as const\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport { HttpOptions, InvalidRequestReason, AIError, ModelID, ProviderID, ProviderMetadata, Usage } from \"./schema\"\nimport { ImageClient, Service, type Execute as ImageExecute } from \"./image-client\"\n\nexport interface ImageRoute<Options extends ImageOptions = ImageOptions> {\n readonly id: string\n readonly generate: (request: ImageRequestFor<Options>, execute: ImageExecute) => Effect.Effect<ImageResponse, AIError>\n}\n\nexport type ImageOptions = Record<string, unknown>\n\nexport class ImageModel<Options extends ImageOptions = ImageOptions> {\n declare protected readonly _Options: (options: Options) => Options\n readonly id: ModelID\n readonly provider: ProviderID\n readonly route: ImageRoute<Options>\n readonly http?: HttpOptions\n\n constructor(input: ImageModel.Input<Options>) {\n this.id = input.id\n this.provider = input.provider\n this.route = input.route\n this.http = input.http\n }\n\n static make<Options extends ImageOptions = ImageOptions>(input: ImageModel.MakeInput<Options>) {\n return new ImageModel<Options>({\n id: ModelID.make(input.id),\n provider: ProviderID.make(input.provider),\n route: input.route,\n http: input.http,\n })\n }\n}\n\nexport namespace ImageModel {\n export interface Input<Options extends ImageOptions = ImageOptions> {\n readonly id: ModelID\n readonly provider: ProviderID\n readonly route: ImageRoute<Options>\n readonly http?: HttpOptions\n }\n\n export interface MakeInput<Options extends ImageOptions = ImageOptions>\n extends Omit<Input<Options>, \"id\" | \"provider\"> {\n readonly id: string | ModelID\n readonly provider: string | ProviderID\n }\n}\n\nexport const ImageModelSchema = Schema.declare((value): value is ImageModel => value instanceof ImageModel, {\n expected: \"Image.Model\",\n})\n\nconst ImageBytesInput = Schema.Struct({\n type: Schema.Literal(\"bytes\"),\n data: Schema.Uint8Array,\n mediaType: Schema.String,\n})\nconst ImageUrlInput = Schema.Struct({\n type: Schema.Literal(\"url\"),\n url: Schema.String,\n})\nconst ImageFileIDInput = Schema.Struct({\n type: Schema.Literal(\"file-id\"),\n id: Schema.String,\n})\nconst ImageFileURIInput = Schema.Struct({\n type: Schema.Literal(\"file-uri\"),\n uri: Schema.String,\n mediaType: Schema.String,\n})\n\nexport const ImageInputSchema = Schema.Union([\n ImageBytesInput,\n ImageUrlInput,\n ImageFileIDInput,\n ImageFileURIInput,\n]).pipe(Schema.toTaggedUnion(\"type\"))\nexport type ImageInput = Schema.Schema.Type<typeof ImageInputSchema>\n\nexport const ImageInput = {\n bytes: (data: Uint8Array, mediaType: string): ImageInput => ({ type: \"bytes\", data, mediaType }),\n url: (url: string): ImageInput => ({ type: \"url\", url }),\n file: (id: string): ImageInput => ({ type: \"file-id\", id }),\n fileUri: (uri: string, mediaType: string): ImageInput => ({ type: \"file-uri\", uri, mediaType }),\n} as const\n\nexport class ImageRequest extends Schema.Class<ImageRequest>(\"Image.Request\")({\n model: ImageModelSchema,\n prompt: Schema.String,\n images: Schema.optional(Schema.Array(ImageInputSchema)),\n options: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n http: Schema.optional(HttpOptions),\n}) {\n declare protected readonly _ImageRequest: void\n}\n\nexport type ImageRequestFor<Options extends ImageOptions = ImageOptions> = Omit<ImageRequest, \"model\" | \"options\"> & {\n readonly model: ImageModel<Options>\n readonly options?: Options\n}\n\nexport type ImageModelOptions<Model> = Model extends ImageModel<infer Options> ? Options : never\n\nexport type ImageRequestInput<Model extends object = ImageModel> = Omit<\n ConstructorParameters<typeof ImageRequest>[0],\n \"model\" | \"options\" | \"http\"\n> & {\n readonly model: Model\n readonly options?: NoInfer<ImageModelOptions<Model>>\n readonly http?: HttpOptions.Input\n} & (Model extends ImageModel<ImageModelOptions<Model>> ? unknown : never)\n\nexport class GeneratedImage extends Schema.Class<GeneratedImage>(\"Image.Generated\")({\n mediaType: Schema.String,\n data: Schema.Union([Schema.String, Schema.Uint8Array]),\n providerMetadata: Schema.optional(ProviderMetadata),\n}) {}\n\nexport class ImageResponse extends Schema.Class<ImageResponse>(\"Image.Response\")({\n images: Schema.Array(GeneratedImage),\n usage: Schema.optional(Usage),\n providerMetadata: Schema.optional(ProviderMetadata),\n}) {\n get image() {\n return this.images[0]\n }\n}\n\nexport function request<const Model extends object>(\n input: ImageRequestInput<Model>,\n): ImageRequestFor<ImageModelOptions<Model>>\nexport function request(input: ImageRequest): ImageRequest\nexport function request(input: ImageRequest | ImageRequestInput) {\n if (input instanceof ImageRequest) return input\n return new ImageRequest({\n ...input,\n model: input.model as unknown as ImageModel,\n http: input.http === undefined ? undefined : HttpOptions.make(input.http),\n })\n}\n\nexport function generate<const Model extends object>(\n input: ImageRequestInput<Model>,\n): Effect.Effect<ImageResponse, AIError, Service>\nexport function generate(input: ImageRequest): Effect.Effect<ImageResponse, AIError, Service>\nexport function generate(input: ImageRequest | ImageRequestInput) {\n return Effect.try({\n try: () => (input instanceof ImageRequest ? input : request(input)),\n catch: (error) =>\n new AIError({\n module: \"Image\",\n method: \"generate\",\n reason: new InvalidRequestReason({ message: error instanceof Error ? error.message : String(error) }),\n }),\n }).pipe(Effect.flatMap((request) => ImageClient.generate(request as unknown as ImageRequestFor<ImageOptions>)))\n}\n\nexport const Image = {\n request,\n generate,\n} as const\n" | ||
| ], | ||
| "mappings": ";mKAaO,WAAM,UAAgB,EAAQ,QAA4B,EAAE,uBAAuB,CAAE,CAAC,CAUtF,IAAM,EAA8D,EAAM,OAC/E,EACA,EAAO,IAAI,SAAU,EAAG,CACtB,IAAM,EAAW,MAAO,EAAgB,QACxC,OAAO,EAAQ,GAAG,CAChB,SAAU,CAAC,IAAY,EAAQ,MAAM,MAAM,SAAS,EAAS,EAAS,OAAO,CAC/E,CAAC,EACF,CACH,ECpBO,MAAM,CAAwD,CAE1D,GACA,SACA,MACA,KAET,WAAW,CAAC,EAAkC,CAC5C,KAAK,GAAK,EAAM,GAChB,KAAK,SAAW,EAAM,SACtB,KAAK,MAAQ,EAAM,MACnB,KAAK,KAAO,EAAM,WAGb,KAAiD,CAAC,EAAsC,CAC7F,OAAO,IAAI,EAAoB,CAC7B,GAAI,EAAQ,KAAK,EAAM,EAAE,EACzB,SAAU,EAAW,KAAK,EAAM,QAAQ,EACxC,MAAO,EAAM,MACb,KAAM,EAAM,IACd,CAAC,EAEL,CAiBO,IAAM,EAAmB,EAAO,QAAQ,CAAC,IAA+B,aAAiB,EAAY,CAC1G,SAAU,aACZ,CAAC,EAEK,EAAkB,EAAO,OAAO,CACpC,KAAM,EAAO,QAAQ,OAAO,EAC5B,KAAM,EAAO,WACb,UAAW,EAAO,MACpB,CAAC,EACK,EAAgB,EAAO,OAAO,CAClC,KAAM,EAAO,QAAQ,KAAK,EAC1B,IAAK,EAAO,MACd,CAAC,EACK,EAAmB,EAAO,OAAO,CACrC,KAAM,EAAO,QAAQ,SAAS,EAC9B,GAAI,EAAO,MACb,CAAC,EACK,EAAoB,EAAO,OAAO,CACtC,KAAM,EAAO,QAAQ,UAAU,EAC/B,IAAK,EAAO,OACZ,UAAW,EAAO,MACpB,CAAC,EAEY,EAAmB,EAAO,MAAM,CAC3C,EACA,EACA,EACA,CACF,CAAC,EAAE,KAAK,EAAO,cAAc,MAAM,CAAC,EAU7B,MAAM,UAAqB,EAAO,MAAoB,eAAe,EAAE,CAC5E,MAAO,EACP,OAAQ,EAAO,OACf,OAAQ,EAAO,SAAS,EAAO,MAAM,CAAgB,CAAC,EACtD,QAAS,EAAO,SAAS,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,EACrE,KAAM,EAAO,SAAS,CAAW,CACnC,CAAC,CAAE,CAEH,CAkBO,MAAM,UAAuB,EAAO,MAAsB,iBAAiB,EAAE,CAClF,UAAW,EAAO,OAClB,KAAM,EAAO,MAAM,CAAC,EAAO,OAAQ,EAAO,UAAU,CAAC,EACrD,iBAAkB,EAAO,SAAS,CAAgB,CACpD,CAAC,CAAE,CAAC,CAEG,MAAM,UAAsB,EAAO,MAAqB,gBAAgB,EAAE,CAC/E,OAAQ,EAAO,MAAM,CAAc,EACnC,MAAO,EAAO,SAAS,CAAK,EAC5B,iBAAkB,EAAO,SAAS,CAAgB,CACpD,CAAC,CAAE,IACG,MAAK,EAAG,CACV,OAAO,KAAK,OAAO,GAEvB", | ||
| "debugId": "8D5D677E3CFCF65A64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "CC5DE01D792BB21F64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/ui/timeline.tsx", "src/commands/handlers/console/login.ts"], | ||
| "sourcesContent": [ | ||
| "import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\nimport { createCliRenderer, RGBA } from \"@opentui/core\";\nimport { createScrollbackWriter, render, useKeyboard } from \"@opentui/solid\";\nimport { registerOpencodeSpinner } from \"@opencode-ai/tui/component/register-spinner\";\nimport { Show, createSignal } from \"solid-js\";\nregisterOpencodeSpinner();\nconst SPINNER_FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nconst IDLE_TIMEOUT = 1_000;\nconst COLORS = {\n accent: RGBA.fromIndex(6),\n error: RGBA.fromIndex(1),\n foreground: RGBA.defaultForeground(),\n muted: RGBA.fromIndex(8),\n success: RGBA.fromIndex(2)\n};\nconst ROWS = {\n intro: {\n marker: \"┌\",\n color: COLORS.muted,\n connector: true\n },\n item: {\n marker: \"●\",\n color: COLORS.accent,\n connector: true\n },\n success: {\n marker: \"◇\",\n color: COLORS.success,\n connector: true\n },\n failure: {\n marker: \"■\",\n color: COLORS.error,\n connector: false\n },\n outro: {\n marker: \"└\",\n color: COLORS.muted,\n connector: false\n }\n};\nfunction row(kind, value) {\n const style = ROWS[kind];\n return createScrollbackWriter(() => (() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"minHeight\", 1);\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$insertNode(_el$2, _el$3);\n _$insertNode(_el$2, _el$4);\n _$setProp(_el$2, \"width\", \"100%\");\n _$setProp(_el$2, \"minHeight\", 1);\n _$setProp(_el$2, \"flexDirection\", \"row\");\n _$setProp(_el$2, \"gap\", 1);\n _$setProp(_el$3, \"flexShrink\", 0);\n _$insert(_el$3, () => style.marker);\n _$setProp(_el$4, \"wrapMode\", \"word\");\n _$insert(_el$4, value);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return style.connector;\n },\n get children() {\n var _el$5 = _$createElement(\"text\");\n _$insertNode(_el$5, _$createTextNode(`│`));\n _$effect(_$p => _$setProp(_el$5, \"fg\", COLORS.muted, _$p));\n return _el$5;\n }\n }), null);\n _$effect(_p$ => {\n var _v$ = style.color,\n _v$2 = COLORS.foreground;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$3, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, \"fg\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n })(), {\n startOnNewLine: true,\n trailingNewline: !style.connector\n });\n}\nfunction TimelineFooter(props) {\n useKeyboard(event => {\n if (event.name !== \"escape\" && !(event.ctrl && event.name === \"c\")) return;\n event.preventDefault();\n props.cancel();\n });\n return (() => {\n var _el$7 = _$createElement(\"box\");\n _$setProp(_el$7, \"width\", \"100%\");\n _$setProp(_el$7, \"height\", 1);\n _$setProp(_el$7, \"flexDirection\", \"row\");\n _$setProp(_el$7, \"gap\", 1);\n _$insert(_el$7, _$createComponent(Show, {\n get when() {\n return props.pending();\n },\n children: text => [(() => {\n var _el$8 = _$createElement(\"spinner\");\n _$setProp(_el$8, \"frames\", SPINNER_FRAMES);\n _$setProp(_el$8, \"interval\", 80);\n _$effect(_$p => _$setProp(_el$8, \"color\", COLORS.accent, _$p));\n return _el$8;\n })(), (() => {\n var _el$9 = _$createElement(\"text\");\n _$setProp(_el$9, \"wrapMode\", \"none\");\n _$setProp(_el$9, \"truncate\", true);\n _$insert(_el$9, text);\n _$effect(_$p => _$setProp(_el$9, \"fg\", COLORS.foreground, _$p));\n return _el$9;\n })()]\n }));\n return _el$7;\n })();\n}\nfunction bounded(task) {\n return new Promise(resolve => {\n const timer = setTimeout(resolve, IDLE_TIMEOUT);\n timer.unref();\n const finish = () => {\n clearTimeout(timer);\n resolve();\n };\n void task.then(finish, finish);\n });\n}\nasync function shutdown(renderer) {\n await bounded(renderer.idle());\n try {\n renderer.externalOutputMode = \"passthrough\";\n } finally {\n try {\n renderer.screenMode = \"main-screen\";\n } finally {\n if (!renderer.isDestroyed) renderer.destroy();\n }\n }\n}\nexport async function createTimelineHost() {\n const stdout = process.stdout;\n const controller = new AbortController();\n const signals = [\"SIGINT\", \"SIGHUP\", \"SIGQUIT\"];\n const cancel = () => {\n if (!controller.signal.aborted) controller.abort();\n };\n signals.forEach(signal => process.on(signal, cancel));\n if (!stdout.isTTY || !process.stdin.isTTY) {\n let closed = false;\n let writing = false;\n let active;\n let closeTask;\n const write = async (kind, text) => {\n if (closed) throw new Error(\"timeline closed\");\n if (writing) throw new Error(\"timeline write already in progress\");\n writing = true;\n try {\n const style = kind === \"pending\" ? undefined : ROWS[kind];\n const marker = kind === \"pending\" ? \".\" : ROWS[kind].marker;\n const connector = style?.connector ? \"│\\n\" : \"\";\n active = new Promise((resolve, reject) => {\n stdout.write(`${marker} ${text}\\n${connector}`, error => error ? reject(error) : resolve());\n });\n await active;\n } finally {\n writing = false;\n active = undefined;\n }\n };\n const close = () => {\n if (closeTask) return closeTask;\n closed = true;\n closeTask = (async () => {\n await active?.catch(() => {});\n signals.forEach(signal => process.off(signal, cancel));\n })();\n return closeTask;\n };\n return {\n signal: controller.signal,\n intro: text => write(\"intro\", text),\n item: text => write(\"item\", text),\n pending: text => write(\"pending\", text),\n success: text => write(\"success\", text),\n failure: text => write(\"failure\", text),\n outro: text => write(\"outro\", text),\n close\n };\n }\n let renderer;\n try {\n // Start on a fresh row so delayed SSH cursor reports cannot make\n // split-footer overwrite the shell command.\n process.stdout.write(\"\\n\");\n renderer = await createCliRenderer({\n stdin: process.stdin,\n useMouse: false,\n autoFocus: false,\n openConsoleOnError: false,\n exitOnCtrlC: false,\n exitSignals: [],\n screenMode: \"split-footer\",\n footerHeight: 1,\n externalOutputMode: \"capture-stdout\",\n consoleMode: \"disabled\",\n clearOnShutdown: false\n });\n const activeRenderer = renderer;\n const [pending, setPending] = createSignal();\n const renderTask = render(() => _$createComponent(TimelineFooter, {\n pending: pending,\n cancel: cancel\n }), activeRenderer);\n void renderTask.catch(cancel);\n await bounded(activeRenderer.idle());\n let closed = false;\n let writing = false;\n let active;\n let closeTask;\n const write = (kind, text) => {\n if (closed) return Promise.reject(new Error(\"timeline closed\"));\n if (writing) return Promise.reject(new Error(\"timeline write already in progress\"));\n writing = true;\n active = (async () => {\n if (kind === \"pending\") {\n setPending(text);\n activeRenderer.requestRender();\n } else {\n if (kind === \"success\" || kind === \"failure\" || kind === \"outro\") setPending(undefined);\n activeRenderer.writeToScrollback(row(kind, text));\n activeRenderer.requestRender();\n }\n await bounded(activeRenderer.idle());\n })().finally(() => {\n writing = false;\n active = undefined;\n });\n return active;\n };\n const close = () => {\n if (closeTask) return closeTask;\n closed = true;\n closeTask = (async () => {\n await active?.catch(() => {});\n try {\n await shutdown(activeRenderer);\n await bounded(renderTask);\n } finally {\n signals.forEach(signal => process.off(signal, cancel));\n }\n })();\n return closeTask;\n };\n return {\n signal: controller.signal,\n intro: text => write(\"intro\", text),\n item: text => write(\"item\", text),\n pending: text => write(\"pending\", text),\n success: text => write(\"success\", text),\n failure: text => write(\"failure\", text),\n outro: text => write(\"outro\", text),\n close\n };\n } catch (error) {\n try {\n if (renderer) await shutdown(renderer);\n } finally {\n signals.forEach(signal => process.off(signal, cancel));\n }\n throw error;\n }\n}", | ||
| "import { Cause, Effect, Exit, Option } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode, type OpenCodeClient } from \"@opencode-ai/client/promise\"\nimport { AppProcess } from \"@opencode-ai/util/process\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\nimport { createTimelineHost, type TimelineHost } from \"../../../ui/timeline\"\n\nconst integrationID = \"opencode\"\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.console.commands.login,\n Effect.fn(\"cli.console.login\")(function* (input) {\n const timeline = yield* Effect.acquireRelease(\n Effect.promise(() => createTimelineHost()),\n (value) => request(() => value.close()).pipe(Effect.ignore),\n )\n const exit = yield* login(timeline, Option.getOrUndefined(input.url)).pipe(\n Effect.raceFirst(AppProcess.waitForAbort(timeline.signal)),\n Effect.exit,\n )\n if (Exit.isSuccess(exit)) return\n\n const cancelled = timeline.signal.aborted\n yield* request(() => timeline.failure(cancelled ? \"Authorization cancelled\" : errorMessage(exit.cause))).pipe(\n Effect.ignore,\n )\n process.exitCode = cancelled ? 130 : 1\n }),\n)\n\nconst login = Effect.fn(\"cli.console.login.run\")(function* (timeline: TimelineHost, server?: string) {\n yield* request(() => timeline.intro(\"Log in\"))\n yield* request(() => timeline.pending(\"Connecting to OpenCode...\"))\n\n const endpoint = yield* Service.ensure(yield* ServiceConfig.options())\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const found = yield* request((signal) => client.integration.get({ integrationID, location }, { signal }))\n const integration = yield* required(found.data, \"OpenCode Console integration is unavailable\")\n const method = yield* required(\n integration.methods.find((candidate) => candidate.type === \"oauth\"),\n \"OpenCode Console login is unavailable\",\n )\n\n yield* request(() => timeline.pending(\"Starting authorization...\"))\n const started = yield* request((signal) =>\n client.integration.oauth.connect(\n {\n integrationID,\n methodID: method.id,\n inputs: server ? { server } : {},\n location,\n },\n { signal },\n ),\n )\n const attempt = started.data\n yield* Effect.addFinalizer(() =>\n request(() =>\n client.integration.oauth.cancel(\n { integrationID, attemptID: attempt.attemptID, location },\n { signal: AbortSignal.timeout(5_000) },\n ),\n ).pipe(Effect.ignore),\n )\n if (attempt.mode !== \"auto\") yield* Effect.fail(new Error(\"OpenCode Console requires a device login\"))\n\n yield* request(() => timeline.item(`Go to: ${attempt.url}`))\n yield* request(() => timeline.item(attempt.instructions))\n yield* request(async () => {\n const { default: open } = await import(\"open\")\n await open(attempt.url)\n }).pipe(Effect.ignore)\n yield* request(() => timeline.pending(\"Waiting for authorization...\"))\n\n const status = yield* waitForConsoleLogin(client, integrationID, attempt.attemptID)\n if (status.status === \"failed\") yield* Effect.fail(new Error(status.message))\n if (status.status === \"expired\") yield* Effect.fail(new Error(\"Device code expired\"))\n\n yield* request(() => timeline.success(\"Connected to OpenCode Console\"))\n yield* request(() => timeline.outro(\"Done\"))\n})\n\nconst waitForConsoleLogin = Effect.fn(\"cli.console.login.wait\")(function* (\n client: OpenCodeClient,\n integrationID: string,\n attemptID: string,\n) {\n while (true) {\n const response = yield* request((signal) =>\n client.integration.oauth.status({ integrationID, attemptID, location }, { signal }),\n )\n if (response.data.status !== \"pending\") return response.data\n yield* Effect.sleep(500)\n }\n})\n\nfunction request<A>(task: (signal: AbortSignal) => Promise<A>) {\n return Effect.tryPromise({\n try: task,\n catch: (cause) => cause,\n })\n}\n\nfunction required<A>(value: A | null | undefined, message: string) {\n return value === null || value === undefined ? Effect.fail(new Error(message)) : Effect.succeed(value)\n}\n\nfunction errorMessage(cause: Cause.Cause<unknown>) {\n const error = Cause.squash(cause)\n if (error instanceof Error) return error.message\n if (typeof error === \"object\" && error !== null && \"message\" in error && typeof error.message === \"string\") {\n return error.message\n }\n return String(error)\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "D3FDE3CD20549AA364756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/debug/agents.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { OpenCode } from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.debug.commands.agents,\n Effect.fn(\"cli.debug.agents\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const response = yield* Effect.promise(() => client.agent.list({ location: { directory: process.cwd() } }))\n process.stdout.write(\n JSON.stringify(\n response.data.toSorted((a, b) => a.id.localeCompare(b.id)),\n null,\n 2,\n ) + EOL,\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAe,SAAQ,aACrB,OAAS,cAAS,WAAM,cAAS,YACjC,OAAO,QAAG,uBAAkB,OAAE,cAAU,OAAG,MACzC,SAAM,OAAU,WAAO,OAAc,aAAQ,OAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EACpF,EAAW,MAAO,EAAO,QAAQ,IAAM,EAAO,MAAM,KAAK,CAAE,SAAU,CAAE,UAAW,QAAQ,IAAI,CAAE,CAAE,CAAC,CAAC,EAC1G,QAAQ,OAAO,MACb,KAAK,UACH,EAAS,KAAK,SAAS,CAAC,EAAG,IAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC,EACzD,KACA,CACF,EAAI,CACN,EACD,CACH", | ||
| "debugId": "DC1E8E4F50442EE464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+cerebras@2.0.41+d6123d32214422cb/node_modules/@ai-sdk/cerebras/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/cerebras-provider.ts\nimport { OpenAICompatibleChatLanguageModel } from \"@ai-sdk/openai-compatible\";\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\n\n// src/version.ts\nvar VERSION = true ? \"2.0.41\" : \"0.0.0-test\";\n\n// src/cerebras-provider.ts\nvar cerebrasErrorSchema = z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string()\n});\nvar cerebrasErrorStructure = {\n errorSchema: cerebrasErrorSchema,\n errorToMessage: (data) => data.message\n};\nfunction createCerebras(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.cerebras.ai/v1\"\n );\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"CEREBRAS_API_KEY\",\n description: \"Cerebras API key\"\n })}`,\n ...options.headers\n },\n `ai-sdk/cerebras/${VERSION}`\n );\n const createLanguageModel = (modelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `cerebras.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: cerebrasErrorStructure,\n supportsStructuredOutputs: true\n });\n };\n const provider = (modelId) => createLanguageModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar cerebras = createCerebras();\nexport {\n VERSION,\n cerebras,\n createCerebras\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": ";yVAaA,SAAI,OAAiB,cAGjB,OAAsB,OAAE,YAAO,MACjC,QAAS,EAAE,OAAO,EAClB,KAAM,EAAE,OAAO,EACf,MAAO,EAAE,OAAO,EAChB,KAAM,EAAE,OAAO,CACjB,CAAC,EACG,EAAyB,CAC3B,YAAa,EACb,eAAgB,CAAC,IAAS,EAAK,OACjC,EACA,SAAS,CAAc,CAAC,EAAU,CAAC,EAAG,CACpC,IAAI,EACJ,IAAM,EAAU,GACb,EAAK,EAAQ,UAAY,KAAO,EAAK,4BACxC,EACM,EAAa,IAAM,EACvB,CACE,cAAe,UAAU,EAAW,CAClC,OAAQ,EAAQ,OAChB,wBAAyB,mBACzB,YAAa,kBACf,CAAC,OACE,EAAQ,OACb,EACA,mBAAmB,GACrB,EACM,EAAsB,CAAC,IAAY,CACvC,OAAO,IAAI,EAAkC,EAAS,CACpD,SAAU,gBACV,IAAK,EAAG,UAAW,GAAG,IAAU,IAChC,QAAS,EACT,MAAO,EAAQ,MACf,eAAgB,EAChB,0BAA2B,EAC7B,CAAC,GAEG,EAAW,CAAC,IAAY,EAAoB,CAAO,EAWzD,OAVA,EAAS,qBAAuB,KAChC,EAAS,cAAgB,EACzB,EAAS,KAAO,EAChB,EAAS,eAAiB,CAAC,IAAY,CACrC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,gBAAiB,CAAC,GAErE,EAAS,mBAAqB,EAAS,eACvC,EAAS,WAAa,CAAC,IAAY,CACjC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,YAAa,CAAC,GAE1D,EAET,IAAI,EAAW,EAAe", | ||
| "debugId": "6BD08D391098529864756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/openai-options.ts"], | ||
| "sourcesContent": [ | ||
| "import type { ProviderOptions } from \"../schema\"\nimport { mergeProviderOptions } from \"../schema\"\nimport type { OpenResponsesOptionsInput } from \"./open-responses-options\"\n\nexport type { OpenAIResponseIncludable, OpenAIServiceTier } from \"../protocols/utils/openai-options\"\n\nexport type OpenAIOptionsInput = OpenResponsesOptionsInput\n\nexport type OpenAIProviderOptionsInput = ProviderOptions & {\n readonly openai?: OpenAIOptionsInput\n}\n\nconst definedEntries = (input: Record<string, unknown>) =>\n Object.entries(input).filter((entry) => entry[1] !== undefined)\n\nconst openAIProviderOptions = (options: OpenAIOptionsInput | undefined): ProviderOptions | undefined => {\n const openai = Object.fromEntries(\n definedEntries({\n store: options?.store,\n promptCacheKey: options?.promptCacheKey,\n reasoningEffort: options?.reasoningEffort,\n reasoningSummary: options?.reasoningSummary,\n include: options?.include,\n textVerbosity: options?.textVerbosity,\n serviceTier: options?.serviceTier,\n }),\n )\n if (Object.keys(openai).length === 0) return undefined\n return { openai }\n}\n\nexport const gpt5DefaultOptions = (\n modelID: string,\n options: { readonly textVerbosity?: boolean } = {},\n): ProviderOptions | undefined => {\n const id = modelID.toLowerCase()\n if (!id.includes(\"gpt-5\") || id.includes(\"gpt-5-chat\") || id.includes(\"gpt-5-pro\")) return undefined\n return openAIProviderOptions({\n reasoningEffort: \"medium\",\n reasoningSummary: \"auto\",\n // GPT-5 reasoning models are configured stateless (`store: false`) by\n // `openAIDefaultOptions` below, so the only way a follow-up turn can\n // carry reasoning state is via the encrypted reasoning include. Without\n // this, callers using the default model facade get reasoning summaries\n // they cannot replay statelessly.\n include: [\"reasoning.encrypted_content\"],\n textVerbosity:\n options.textVerbosity === true && id.includes(\"gpt-5.\") && !id.includes(\"codex\") && !id.includes(\"-chat\")\n ? \"low\"\n : undefined,\n })\n}\n\nexport const openAIDefaultOptions = (\n modelID: string,\n options: { readonly textVerbosity?: boolean } = {},\n): ProviderOptions | undefined =>\n mergeProviderOptions(openAIProviderOptions({ store: false }), gpt5DefaultOptions(modelID, options))\n\nexport const withOpenAIOptions = <Options extends { readonly providerOptions?: OpenAIProviderOptionsInput }>(\n modelID: string,\n options: Options,\n defaults: { readonly textVerbosity?: boolean } = {},\n): Omit<Options, \"providerOptions\"> & { readonly providerOptions?: ProviderOptions } => {\n return {\n ...options,\n providerOptions: mergeProviderOptions(openAIDefaultOptions(modelID, defaults), options.providerOptions),\n }\n}\n\nexport * as OpenAIProviderOptions from \"./openai-options\"\n" | ||
| ], | ||
| "mappings": ";oDAYA,IAAM,EAAiB,CAAC,IACtB,OAAO,QAAQ,CAAK,EAAE,OAAO,CAAC,IAAU,EAAM,KAAO,MAAS,EAE1D,EAAwB,CAAC,IAAyE,CACtG,IAAM,EAAS,OAAO,YACpB,EAAe,CACb,MAAO,GAAS,MAChB,eAAgB,GAAS,eACzB,gBAAiB,GAAS,gBAC1B,iBAAkB,GAAS,iBAC3B,QAAS,GAAS,QAClB,cAAe,GAAS,cACxB,YAAa,GAAS,WACxB,CAAC,CACH,EACA,GAAI,OAAO,KAAK,CAAM,EAAE,SAAW,EAAG,OACtC,MAAO,CAAE,QAAO,GAGL,EAAqB,CAChC,EACA,EAAgD,CAAC,IACjB,CAChC,IAAM,EAAK,EAAQ,YAAY,EAC/B,GAAI,CAAC,EAAG,SAAS,OAAO,GAAK,EAAG,SAAS,YAAY,GAAK,EAAG,SAAS,WAAW,EAAG,OACpF,OAAO,EAAsB,CAC3B,gBAAiB,SACjB,iBAAkB,OAMlB,QAAS,CAAC,6BAA6B,EACvC,cACE,EAAQ,gBAAkB,IAAQ,EAAG,SAAS,QAAQ,GAAK,CAAC,EAAG,SAAS,OAAO,GAAK,CAAC,EAAG,SAAS,OAAO,EACpG,MACA,MACR,CAAC,GAGU,EAAuB,CAClC,EACA,EAAgD,CAAC,IAEjD,EAAqB,EAAsB,CAAE,MAAO,EAAM,CAAC,EAAG,EAAmB,EAAS,CAAO,CAAC,EAEvF,EAAoB,CAC/B,EACA,EACA,EAAiD,CAAC,IACoC,CACtF,MAAO,IACF,EACH,gBAAiB,EAAqB,EAAqB,EAAS,CAAQ,EAAG,EAAQ,eAAe,CACxG", | ||
| "debugId": "7951DAA985BF657664756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/version.ts"], | ||
| "sourcesContent": [ | ||
| "declare const OPENCODE_VERSION: string\ndeclare const OPENCODE_CHANNEL: string\n\nconst version = typeof OPENCODE_VERSION === \"string\" ? OPENCODE_VERSION : \"local\"\nconst channel = typeof OPENCODE_CHANNEL === \"string\" ? OPENCODE_CHANNEL : \"local\"\n\nexport { version as OPENCODE_VERSION, channel as OPENCODE_CHANNEL }\nexport const OPENCODE_LOCAL = channel === \"local\"\n" | ||
| ], | ||
| "mappings": ";AAGA,IAAM,EAAiD,mBACjD,EAAiD,OAGhD,IAAM,EAAiB", | ||
| "debugId": "33BAB4735C03918964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "5B3673582876E14464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/prompt/content.ts"], | ||
| "sourcesContent": [ | ||
| "export function normalizePromptContent(content: string) {\n if (content.endsWith(\"\\r\\n\")) {\n const body = content.slice(0, -2)\n return !body.includes(\"\\n\") && !body.includes(\"\\r\") ? body : content\n }\n\n if (content.endsWith(\"\\n\")) {\n const body = content.slice(0, -1)\n return !body.includes(\"\\n\") && !body.includes(\"\\r\") ? body : content\n }\n\n return content\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,SAAS,CAAsB,CAAC,EAAiB,CACtD,GAAI,EAAQ,SAAS;AAAA,CAAM,EAAG,CAC5B,IAAM,EAAO,EAAQ,MAAM,EAAG,EAAE,EAChC,MAAO,CAAC,EAAK,SAAS;AAAA,CAAI,GAAK,CAAC,EAAK,SAAS,IAAI,EAAI,EAAO,EAG/D,GAAI,EAAQ,SAAS;AAAA,CAAI,EAAG,CAC1B,IAAM,EAAO,EAAQ,MAAM,EAAG,EAAE,EAChC,MAAO,CAAC,EAAK,SAAS;AAAA,CAAI,GAAK,CAAC,EAAK,SAAS,IAAI,EAAI,EAAO,EAG/D,OAAO", | ||
| "debugId": "C3B24A7A01B96C4764756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+togetherai@2.0.41+d6123d32214422cb/node_modules/@ai-sdk/togetherai/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/togetherai-provider.ts\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel\n} from \"@ai-sdk/openai-compatible\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/reranking/togetherai-reranking-model.ts\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\n\n// src/reranking/togetherai-reranking-api.ts\nimport { lazySchema, zodSchema } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\nvar togetheraiErrorSchema = lazySchema(\n () => zodSchema(\n z.object({\n error: z.object({\n message: z.string()\n })\n })\n )\n);\nvar togetheraiRerankingResponseSchema = lazySchema(\n () => zodSchema(\n z.object({\n id: z.string().nullish(),\n model: z.string().nullish(),\n results: z.array(\n z.object({\n index: z.number(),\n relevance_score: z.number()\n })\n ),\n usage: z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number()\n })\n })\n )\n);\n\n// src/reranking/togetherai-reranking-options.ts\nimport { lazySchema as lazySchema2, zodSchema as zodSchema2 } from \"@ai-sdk/provider-utils\";\nimport { z as z2 } from \"zod/v4\";\nvar togetheraiRerankingModelOptionsSchema = lazySchema2(\n () => zodSchema2(\n z2.object({\n rankFields: z2.array(z2.string()).optional()\n })\n )\n);\n\n// src/reranking/togetherai-reranking-model.ts\nvar TogetherAIRerankingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n // see https://docs.together.ai/reference/rerank-1\n async doRerank({\n documents,\n headers,\n query,\n topN,\n abortSignal,\n providerOptions\n }) {\n var _a, _b;\n const rerankingOptions = await parseProviderOptions({\n provider: \"togetherai\",\n providerOptions,\n schema: togetheraiRerankingModelOptionsSchema\n });\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi({\n url: `${this.config.baseURL}/rerank`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n documents: documents.values,\n query,\n top_n: topN,\n rank_fields: rerankingOptions == null ? void 0 : rerankingOptions.rankFields,\n return_documents: false\n // reduce response size\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: togetheraiErrorSchema,\n errorToMessage: (data) => data.error.message\n }),\n successfulResponseHandler: createJsonResponseHandler(\n togetheraiRerankingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n ranking: response.results.map((result) => ({\n index: result.index,\n relevanceScore: result.relevance_score\n })),\n response: {\n id: (_a = response.id) != null ? _a : void 0,\n modelId: (_b = response.model) != null ? _b : void 0,\n headers: responseHeaders,\n body: rawValue\n }\n };\n }\n};\n\n// src/togetherai-image-model.ts\nimport {\n combineHeaders as combineHeaders2,\n convertImageModelFileToDataUri,\n createJsonResponseHandler as createJsonResponseHandler2,\n createJsonErrorResponseHandler as createJsonErrorResponseHandler2,\n lazySchema as lazySchema3,\n parseProviderOptions as parseProviderOptions2,\n postJsonToApi as postJsonToApi2,\n zodSchema as zodSchema3\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\nvar TogetherAIImageModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n this.maxImagesPerCall = 1;\n }\n get provider() {\n return this.config.provider;\n }\n async doGenerate({\n prompt,\n n,\n size,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask\n }) {\n var _a, _b, _c;\n const warnings = [];\n if (mask != null) {\n throw new Error(\n \"Together AI does not support mask-based image editing. Use FLUX Kontext models (e.g., black-forest-labs/FLUX.1-kontext-pro) with a reference image and descriptive prompt instead.\"\n );\n }\n if (size != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"aspectRatio\",\n details: \"This model does not support the `aspectRatio` option. Use `size` instead.\"\n });\n }\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n const togetheraiOptions = await parseProviderOptions2({\n provider: \"togetherai\",\n providerOptions,\n schema: togetheraiImageModelOptionsSchema\n });\n let imageUrl;\n if (files != null && files.length > 0) {\n imageUrl = convertImageModelFileToDataUri(files[0]);\n if (files.length > 1) {\n warnings.push({\n type: \"other\",\n message: \"Together AI only supports a single input image. Additional images are ignored.\"\n });\n }\n }\n const splitSize = size == null ? void 0 : size.split(\"x\");\n const { value: response, responseHeaders } = await postJsonToApi2({\n url: `${this.config.baseURL}/images/generations`,\n headers: combineHeaders2(this.config.headers(), headers),\n body: {\n model: this.modelId,\n prompt,\n seed,\n ...n > 1 ? { n } : {},\n ...splitSize && {\n width: parseInt(splitSize[0]),\n height: parseInt(splitSize[1])\n },\n ...imageUrl != null ? { image_url: imageUrl } : {},\n response_format: \"base64\",\n ...togetheraiOptions != null ? togetheraiOptions : {}\n },\n failedResponseHandler: createJsonErrorResponseHandler2({\n errorSchema: togetheraiErrorSchema2,\n errorToMessage: (data) => data.error.message\n }),\n successfulResponseHandler: createJsonResponseHandler2(\n togetheraiImageResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n images: response.data.map((item) => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders\n }\n };\n }\n};\nvar togetheraiImageResponseSchema = z3.object({\n data: z3.array(\n z3.object({\n b64_json: z3.string()\n })\n )\n});\nvar togetheraiErrorSchema2 = z3.object({\n error: z3.object({\n message: z3.string()\n })\n});\nvar togetheraiImageModelOptionsSchema = lazySchema3(\n () => zodSchema3(\n z3.object({\n /**\n * Number of generation steps. Higher values can improve quality.\n */\n steps: z3.number().nullish(),\n /**\n * Guidance scale for image generation.\n */\n guidance: z3.number().nullish(),\n /**\n * Negative prompt to guide what to avoid.\n */\n negative_prompt: z3.string().nullish(),\n /**\n * Disable the safety checker for image generation.\n * When true, the API will not reject images flagged as potentially NSFW.\n * Not available for Flux Schnell Free and Flux Pro models.\n */\n disable_safety_checker: z3.boolean().nullish()\n }).passthrough()\n )\n);\n\n// src/version.ts\nvar VERSION = true ? \"2.0.41\" : \"0.0.0-test\";\n\n// src/togetherai-provider.ts\nfunction loadDeprecatedApiKey() {\n if (typeof process === \"undefined\") {\n return void 0;\n }\n if (typeof process.env.TOGETHER_API_KEY === \"string\") {\n return void 0;\n }\n const key = process.env.TOGETHER_AI_API_KEY;\n if (typeof key === \"string\") {\n console.warn(\n \"TOGETHER_AI_API_KEY is deprecated and will be removed in a future release. Please use TOGETHER_API_KEY instead.\"\n );\n }\n return key;\n}\nfunction createTogetherAI(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.together.xyz/v1/\"\n );\n const getHeaders = () => {\n var _a2;\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: (_a2 = options.apiKey) != null ? _a2 : loadDeprecatedApiKey(),\n environmentVariableName: \"TOGETHER_API_KEY\",\n description: \"TogetherAI\"\n })}`,\n ...options.headers\n },\n `ai-sdk/togetherai/${VERSION}`\n );\n };\n const getCommonModelConfig = (modelType) => ({\n provider: `togetherai.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createChatModel = (modelId) => {\n return new OpenAICompatibleChatLanguageModel(\n modelId,\n getCommonModelConfig(\"chat\")\n );\n };\n const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(\n modelId,\n getCommonModelConfig(\"completion\")\n );\n const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig(\"embedding\")\n );\n const createImageModel = (modelId) => new TogetherAIImageModel(modelId, {\n ...getCommonModelConfig(\"image\"),\n baseURL: baseURL != null ? baseURL : \"https://api.together.xyz/v1/\"\n });\n const createRerankingModel = (modelId) => new TogetherAIRerankingModel(modelId, {\n ...getCommonModelConfig(\"reranking\"),\n baseURL: baseURL != null ? baseURL : \"https://api.together.xyz/v1/\"\n });\n const provider = (modelId) => createChatModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.completionModel = createCompletionModel;\n provider.languageModel = createChatModel;\n provider.chatModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n return provider;\n}\nvar togetherai = createTogetherAI();\nexport {\n VERSION,\n createTogetherAI,\n togetherai\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "6265C5C2D635008F64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+groq@3.0.31+d6123d32214422cb/node_modules/@ai-sdk/groq/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/groq-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/groq-chat-language-model.ts\nimport {\n InvalidResponseDataError\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\n\n// src/convert-groq-usage.ts\nfunction convertGroqUsage(usage) {\n var _a, _b, _c, _d;\n if (usage == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const promptTokens = (_a = usage.prompt_tokens) != null ? _a : 0;\n const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;\n const reasoningTokens = (_d = (_c = usage.completion_tokens_details) == null ? void 0 : _c.reasoning_tokens) != null ? _d : void 0;\n const textTokens = reasoningTokens != null ? completionTokens - reasoningTokens : completionTokens;\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: textTokens,\n reasoning: reasoningTokens\n },\n raw: usage\n };\n}\n\n// src/convert-to-groq-chat-messages.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nimport { convertToBase64 } from \"@ai-sdk/provider-utils\";\nfunction convertToGroqChatMessages(prompt) {\n var _a;\n const messages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\": {\n if (content.length === 1 && content[0].type === \"text\") {\n messages.push({ role: \"user\", content: content[0].text });\n break;\n }\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"file\": {\n if (!part.mediaType.startsWith(\"image/\")) {\n throw new UnsupportedFunctionalityError({\n functionality: \"Non-image file content parts\"\n });\n }\n const mediaType = part.mediaType === \"image/*\" ? \"image/jpeg\" : part.mediaType;\n return {\n type: \"image_url\",\n image_url: {\n url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${convertToBase64(part.data)}`\n }\n };\n }\n }\n })\n });\n break;\n }\n case \"assistant\": {\n let text = \"\";\n let reasoning = \"\";\n const toolCalls = [];\n for (const part of content) {\n switch (part.type) {\n // groq supports reasoning for tool-calls in multi-turn conversations\n // https://github.com/vercel/ai/issues/7860\n case \"reasoning\": {\n reasoning += part.text;\n break;\n }\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input)\n }\n });\n break;\n }\n }\n }\n messages.push({\n role: \"assistant\",\n content: text,\n ...reasoning.length > 0 ? { reasoning } : null,\n ...toolCalls.length > 0 ? { tool_calls: toolCalls } : null\n });\n break;\n }\n case \"tool\": {\n for (const toolResponse of content) {\n if (toolResponse.type === \"tool-approval-response\") {\n continue;\n }\n const output = toolResponse.output;\n let contentValue;\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n contentValue = output.value;\n break;\n case \"execution-denied\":\n contentValue = (_a = output.reason) != null ? _a : \"Tool execution denied.\";\n break;\n case \"content\":\n case \"json\":\n case \"error-json\":\n contentValue = JSON.stringify(output.value);\n break;\n }\n messages.push({\n role: \"tool\",\n tool_call_id: toolResponse.toolCallId,\n content: contentValue\n });\n }\n break;\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return messages;\n}\n\n// src/get-response-metadata.ts\nfunction getResponseMetadata({\n id,\n model,\n created\n}) {\n return {\n id: id != null ? id : void 0,\n modelId: model != null ? model : void 0,\n timestamp: created != null ? new Date(created * 1e3) : void 0\n };\n}\n\n// src/groq-chat-options.ts\nimport { z } from \"zod/v4\";\nvar groqLanguageModelOptions = z.object({\n reasoningFormat: z.enum([\"parsed\", \"raw\", \"hidden\"]).optional(),\n /**\n * Specifies the reasoning effort level for model inference.\n * @see https://console.groq.com/docs/reasoning#reasoning-effort\n */\n reasoningEffort: z.enum([\"none\", \"default\", \"low\", \"medium\", \"high\"]).optional(),\n /**\n * Whether to enable parallel function calling during tool use. Default to true.\n */\n parallelToolCalls: z.boolean().optional(),\n /**\n * A unique identifier representing your end-user, which can help OpenAI to\n * monitor and detect abuse. Learn more.\n */\n user: z.string().optional(),\n /**\n * Whether to use structured outputs.\n *\n * @default true\n */\n structuredOutputs: z.boolean().optional(),\n /**\n * Whether to use strict JSON schema validation.\n * When true, the model uses constrained decoding to guarantee schema compliance.\n * Only used when structured outputs are enabled and a schema is provided.\n *\n * @default true\n */\n strictJsonSchema: z.boolean().optional(),\n /**\n * Service tier for the request.\n * - 'on_demand': Default tier with consistent performance and fairness\n * - 'flex': Higher throughput tier optimized for workloads that can handle occasional request failures\n * - 'auto': Uses on_demand rate limits, then falls back to flex tier if exceeded\n *\n * @default 'on_demand'\n */\n serviceTier: z.enum([\"on_demand\", \"flex\", \"auto\"]).optional()\n});\n\n// src/groq-error.ts\nimport { z as z2 } from \"zod/v4\";\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nvar groqErrorDataSchema = z2.object({\n error: z2.object({\n message: z2.string(),\n type: z2.string()\n })\n});\nvar groqFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: groqErrorDataSchema,\n errorToMessage: (data) => data.error.message\n});\n\n// src/groq-prepare-tools.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\n\n// src/groq-browser-search-models.ts\nvar BROWSER_SEARCH_SUPPORTED_MODELS = [\n \"openai/gpt-oss-20b\",\n \"openai/gpt-oss-120b\"\n];\nfunction isBrowserSearchSupportedModel(modelId) {\n return BROWSER_SEARCH_SUPPORTED_MODELS.includes(modelId);\n}\nfunction getSupportedModelsString() {\n return BROWSER_SEARCH_SUPPORTED_MODELS.join(\", \");\n}\n\n// src/groq-prepare-tools.ts\nfunction prepareTools({\n tools,\n toolChoice,\n modelId\n}) {\n tools = (tools == null ? void 0 : tools.length) ? tools : void 0;\n const toolWarnings = [];\n if (tools == null) {\n return { tools: void 0, toolChoice: void 0, toolWarnings };\n }\n const groqTools2 = [];\n for (const tool of tools) {\n if (tool.type === \"provider\") {\n if (tool.id === \"groq.browser_search\") {\n if (!isBrowserSearchSupportedModel(modelId)) {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`,\n details: `Browser search is only supported on the following models: ${getSupportedModelsString()}. Current model: ${modelId}`\n });\n } else {\n groqTools2.push({\n type: \"browser_search\"\n });\n }\n } else {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`\n });\n }\n } else {\n groqTools2.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...tool.strict != null ? { strict: tool.strict } : {}\n }\n });\n }\n }\n if (toolChoice == null) {\n return { tools: groqTools2, toolChoice: void 0, toolWarnings };\n }\n const type = toolChoice.type;\n switch (type) {\n case \"auto\":\n case \"none\":\n case \"required\":\n return { tools: groqTools2, toolChoice: type, toolWarnings };\n case \"tool\":\n return {\n tools: groqTools2,\n toolChoice: {\n type: \"function\",\n function: {\n name: toolChoice.toolName\n }\n },\n toolWarnings\n };\n default: {\n const _exhaustiveCheck = type;\n throw new UnsupportedFunctionalityError2({\n functionality: `tool choice type: ${_exhaustiveCheck}`\n });\n }\n }\n}\n\n// src/map-groq-finish-reason.ts\nfunction mapGroqFinishReason(finishReason) {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content-filter\";\n case \"function_call\":\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"other\";\n }\n}\n\n// src/groq-chat-language-model.ts\nvar GroqChatLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.supportedUrls = {\n \"image/*\": [/^https?:\\/\\/.*$/]\n };\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n stream,\n tools,\n toolChoice,\n providerOptions\n }) {\n var _a, _b, _c;\n const warnings = [];\n const groqOptions = await parseProviderOptions({\n provider: \"groq\",\n providerOptions,\n schema: groqLanguageModelOptions\n });\n const structuredOutputs = (_a = groqOptions == null ? void 0 : groqOptions.structuredOutputs) != null ? _a : true;\n const strictJsonSchema = (_b = groqOptions == null ? void 0 : groqOptions.strictJsonSchema) != null ? _b : true;\n if (topK != null) {\n warnings.push({ type: \"unsupported\", feature: \"topK\" });\n }\n if ((responseFormat == null ? void 0 : responseFormat.type) === \"json\" && responseFormat.schema != null && !structuredOutputs) {\n warnings.push({\n type: \"unsupported\",\n feature: \"responseFormat\",\n details: \"JSON response format schema is only supported with structuredOutputs\"\n });\n }\n const {\n tools: groqTools2,\n toolChoice: groqToolChoice,\n toolWarnings\n } = prepareTools({ tools, toolChoice, modelId: this.modelId });\n return {\n args: {\n // model id:\n model: this.modelId,\n // model specific settings:\n user: groqOptions == null ? void 0 : groqOptions.user,\n parallel_tool_calls: groqOptions == null ? void 0 : groqOptions.parallelToolCalls,\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? structuredOutputs && responseFormat.schema != null ? {\n type: \"json_schema\",\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: (_c = responseFormat.name) != null ? _c : \"response\",\n description: responseFormat.description\n }\n } : { type: \"json_object\" } : void 0,\n // provider options:\n reasoning_format: groqOptions == null ? void 0 : groqOptions.reasoningFormat,\n reasoning_effort: groqOptions == null ? void 0 : groqOptions.reasoningEffort,\n service_tier: groqOptions == null ? void 0 : groqOptions.serviceTier,\n // messages:\n messages: convertToGroqChatMessages(prompt),\n // tools:\n tools: groqTools2,\n tool_choice: groqToolChoice\n },\n warnings: [...warnings, ...toolWarnings]\n };\n }\n async doGenerate(options) {\n var _a, _b;\n const { args, warnings } = await this.getArgs({\n ...options,\n stream: false\n });\n const body = JSON.stringify(args);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: groqFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n groqChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const choice = response.choices[0];\n const content = [];\n const text = choice.message.content;\n if (text != null && text.length > 0) {\n content.push({ type: \"text\", text });\n }\n const reasoning = choice.message.reasoning;\n if (reasoning != null && reasoning.length > 0) {\n content.push({\n type: \"reasoning\",\n text: reasoning\n });\n }\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: (_a = toolCall.id) != null ? _a : generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments\n });\n }\n }\n return {\n content,\n finishReason: {\n unified: mapGroqFinishReason(choice.finish_reason),\n raw: (_b = choice.finish_reason) != null ? _b : void 0\n },\n usage: convertGroqUsage(response.usage),\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse\n },\n warnings,\n request: { body }\n };\n }\n async doStream(options) {\n const { args, warnings } = await this.getArgs({ ...options, stream: true });\n const body = JSON.stringify({ ...args, stream: true });\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true\n },\n failedResponseHandler: groqFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(groqChatChunkSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const toolCalls = [];\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n let isFirstChunk = true;\n let isActiveText = false;\n let isActiveReasoning = false;\n let providerMetadata;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n finishReason = {\n unified: \"error\",\n raw: void 0\n };\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n if (\"error\" in value) {\n finishReason = {\n unified: \"error\",\n raw: void 0\n };\n controller.enqueue({ type: \"error\", error: value.error });\n return;\n }\n if (isFirstChunk) {\n isFirstChunk = false;\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value)\n });\n }\n if (((_a = value.x_groq) == null ? void 0 : _a.usage) != null) {\n usage = value.x_groq.usage;\n }\n const choice = value.choices[0];\n if ((choice == null ? void 0 : choice.finish_reason) != null) {\n finishReason = {\n unified: mapGroqFinishReason(choice.finish_reason),\n raw: choice.finish_reason\n };\n }\n if ((choice == null ? void 0 : choice.delta) == null) {\n return;\n }\n const delta = choice.delta;\n if (delta.reasoning != null && delta.reasoning.length > 0) {\n if (!isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-start\",\n id: \"reasoning-0\"\n });\n isActiveReasoning = true;\n }\n controller.enqueue({\n type: \"reasoning-delta\",\n id: \"reasoning-0\",\n delta: delta.reasoning\n });\n }\n if (delta.content != null && delta.content.length > 0) {\n if (isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: \"reasoning-0\"\n });\n isActiveReasoning = false;\n }\n if (!isActiveText) {\n controller.enqueue({ type: \"text-start\", id: \"txt-0\" });\n isActiveText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: \"txt-0\",\n delta: delta.content\n });\n }\n if (delta.tool_calls != null) {\n if (isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: \"reasoning-0\"\n });\n isActiveReasoning = false;\n }\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`\n });\n }\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`\n });\n }\n if (((_b = toolCallDelta.function) == null ? void 0 : _b.name) == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`\n });\n }\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name\n });\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: \"function\",\n function: {\n name: toolCallDelta.function.name,\n arguments: (_c = toolCallDelta.function.arguments) != null ? _c : \"\"\n },\n hasFinished: false\n };\n const toolCall2 = toolCalls[index];\n if (((_d = toolCall2.function) == null ? void 0 : _d.name) != null && ((_e = toolCall2.function) == null ? void 0 : _e.arguments) != null) {\n if (toolCall2.function.arguments.length > 0) {\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCall2.id,\n delta: toolCall2.function.arguments\n });\n }\n if (isParsableJson(toolCall2.function.arguments)) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCall2.id\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: (_f = toolCall2.id) != null ? _f : generateId(),\n toolName: toolCall2.function.name,\n input: toolCall2.function.arguments\n });\n toolCall2.hasFinished = true;\n }\n }\n continue;\n }\n const toolCall = toolCalls[index];\n if (toolCall.hasFinished) {\n continue;\n }\n if (((_g = toolCallDelta.function) == null ? void 0 : _g.arguments) != null) {\n toolCall.function.arguments += (_i = (_h = toolCallDelta.function) == null ? void 0 : _h.arguments) != null ? _i : \"\";\n }\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCall.id,\n delta: (_j = toolCallDelta.function.arguments) != null ? _j : \"\"\n });\n if (((_k = toolCall.function) == null ? void 0 : _k.name) != null && ((_l = toolCall.function) == null ? void 0 : _l.arguments) != null && isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCall.id\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: (_m = toolCall.id) != null ? _m : generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: \"reasoning-end\", id: \"reasoning-0\" });\n }\n if (isActiveText) {\n controller.enqueue({ type: \"text-end\", id: \"txt-0\" });\n }\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertGroqUsage(usage),\n ...providerMetadata != null ? { providerMetadata } : {}\n });\n }\n })\n ),\n request: { body },\n response: { headers: responseHeaders }\n };\n }\n};\nvar groqChatResponseSchema = z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n message: z3.object({\n content: z3.string().nullish(),\n reasoning: z3.string().nullish(),\n tool_calls: z3.array(\n z3.object({\n id: z3.string().nullish(),\n type: z3.literal(\"function\"),\n function: z3.object({\n name: z3.string(),\n arguments: z3.string()\n })\n })\n ).nullish()\n }),\n index: z3.number(),\n finish_reason: z3.string().nullish()\n })\n ),\n usage: z3.object({\n prompt_tokens: z3.number().nullish(),\n completion_tokens: z3.number().nullish(),\n total_tokens: z3.number().nullish(),\n prompt_tokens_details: z3.object({\n cached_tokens: z3.number().nullish()\n }).nullish(),\n completion_tokens_details: z3.object({\n reasoning_tokens: z3.number().nullish()\n }).nullish()\n }).nullish()\n});\nvar groqChatChunkSchema = z3.union([\n z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n delta: z3.object({\n content: z3.string().nullish(),\n reasoning: z3.string().nullish(),\n tool_calls: z3.array(\n z3.object({\n index: z3.number(),\n id: z3.string().nullish(),\n type: z3.literal(\"function\").optional(),\n function: z3.object({\n name: z3.string().nullish(),\n arguments: z3.string().nullish()\n })\n })\n ).nullish()\n }).nullish(),\n finish_reason: z3.string().nullable().optional(),\n index: z3.number()\n })\n ),\n x_groq: z3.object({\n usage: z3.object({\n prompt_tokens: z3.number().nullish(),\n completion_tokens: z3.number().nullish(),\n total_tokens: z3.number().nullish(),\n prompt_tokens_details: z3.object({\n cached_tokens: z3.number().nullish()\n }).nullish(),\n completion_tokens_details: z3.object({\n reasoning_tokens: z3.number().nullish()\n }).nullish()\n }).nullish()\n }).nullish()\n }),\n groqErrorDataSchema\n]);\n\n// src/groq-transcription-model.ts\nimport {\n combineHeaders as combineHeaders2,\n convertBase64ToUint8Array,\n createJsonResponseHandler as createJsonResponseHandler2,\n mediaTypeToExtension,\n parseProviderOptions as parseProviderOptions2,\n postFormDataToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z5 } from \"zod/v4\";\n\n// src/groq-transcription-options.ts\nimport { lazySchema, zodSchema } from \"@ai-sdk/provider-utils\";\nimport { z as z4 } from \"zod/v4\";\nvar groqTranscriptionModelOptions = lazySchema(\n () => zodSchema(\n z4.object({\n language: z4.string().nullish(),\n prompt: z4.string().nullish(),\n responseFormat: z4.string().nullish(),\n temperature: z4.number().min(0).max(1).nullish(),\n timestampGranularities: z4.array(z4.string()).nullish()\n })\n )\n);\n\n// src/groq-transcription-model.ts\nvar GroqTranscriptionModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n audio,\n mediaType,\n providerOptions\n }) {\n var _a, _b, _c, _d, _e;\n const warnings = [];\n const groqOptions = await parseProviderOptions2({\n provider: \"groq\",\n providerOptions,\n schema: groqTranscriptionModelOptions\n });\n const formData = new FormData();\n const blob = audio instanceof Uint8Array ? new Blob([audio]) : new Blob([convertBase64ToUint8Array(audio)]);\n formData.append(\"model\", this.modelId);\n const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n \"file\",\n new File([blob], \"audio\", { type: mediaType }),\n `audio.${fileExtension}`\n );\n if (groqOptions) {\n const transcriptionModelOptions = {\n language: (_a = groqOptions.language) != null ? _a : void 0,\n prompt: (_b = groqOptions.prompt) != null ? _b : void 0,\n response_format: (_c = groqOptions.responseFormat) != null ? _c : void 0,\n temperature: (_d = groqOptions.temperature) != null ? _d : void 0,\n timestamp_granularities: (_e = groqOptions.timestampGranularities) != null ? _e : void 0\n };\n for (const key in transcriptionModelOptions) {\n const value = transcriptionModelOptions[key];\n if (value !== void 0) {\n if (Array.isArray(value)) {\n for (const item of value) {\n formData.append(`${key}[]`, String(item));\n }\n } else {\n formData.append(key, String(value));\n }\n }\n }\n }\n return {\n formData,\n warnings\n };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g;\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n const { formData, warnings } = await this.getArgs(options);\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/audio/transcriptions\",\n modelId: this.modelId\n }),\n headers: combineHeaders2(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: groqFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler2(\n groqTranscriptionResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n return {\n text: response.text,\n segments: (_e = (_d = response.segments) == null ? void 0 : _d.map((segment) => ({\n text: segment.text,\n startSecond: segment.start,\n endSecond: segment.end\n }))) != null ? _e : [],\n language: (_f = response.language) != null ? _f : void 0,\n durationInSeconds: (_g = response.duration) != null ? _g : void 0,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse\n }\n };\n }\n};\nvar groqTranscriptionResponseSchema = z5.object({\n text: z5.string(),\n x_groq: z5.object({\n id: z5.string()\n }),\n // additional properties are returned when `response_format: 'verbose_json'` is\n task: z5.string().nullish(),\n language: z5.string().nullish(),\n duration: z5.number().nullish(),\n segments: z5.array(\n z5.object({\n id: z5.number(),\n seek: z5.number(),\n start: z5.number(),\n end: z5.number(),\n text: z5.string(),\n tokens: z5.array(z5.number()),\n temperature: z5.number(),\n avg_logprob: z5.number(),\n compression_ratio: z5.number(),\n no_speech_prob: z5.number()\n })\n ).nullish()\n});\n\n// src/tool/browser-search.ts\nimport { createProviderToolFactory } from \"@ai-sdk/provider-utils\";\nimport { z as z6 } from \"zod/v4\";\nvar browserSearch = createProviderToolFactory({\n id: \"groq.browser_search\",\n inputSchema: z6.object({})\n});\n\n// src/groq-tools.ts\nvar groqTools = {\n browserSearch\n};\n\n// src/version.ts\nvar VERSION = true ? \"3.0.31\" : \"0.0.0-test\";\n\n// src/groq-provider.ts\nfunction createGroq(options = {}) {\n var _a;\n const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : \"https://api.groq.com/openai/v1\";\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"GROQ_API_KEY\",\n description: \"Groq\"\n })}`,\n ...options.headers\n },\n `ai-sdk/groq/${VERSION}`\n );\n const createChatModel = (modelId) => new GroqChatLanguageModel(modelId, {\n provider: \"groq.chat\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createLanguageModel = (modelId) => {\n if (new.target) {\n throw new Error(\n \"The Groq model function cannot be called with the new keyword.\"\n );\n }\n return createChatModel(modelId);\n };\n const createTranscriptionModel = (modelId) => {\n return new GroqTranscriptionModel(modelId, {\n provider: \"groq.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n };\n const provider = function(modelId) {\n return createLanguageModel(modelId);\n };\n provider.specificationVersion = \"v3\";\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n provider.tools = groqTools;\n return provider;\n}\nvar groq = createGroq();\nexport {\n VERSION,\n browserSearch,\n createGroq,\n groq\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": ";ybA0BA,cAAS,MAAgB,MAAC,OAAO,MAC/B,SAAI,EAAI,EAAI,EAAI,EAChB,GAAI,GAAS,KACX,MAAO,CACL,YAAa,CACX,MAAY,OACZ,QAAc,OACd,UAAgB,OAChB,WAAiB,MACnB,EACA,aAAc,CACZ,MAAY,OACZ,KAAW,OACX,UAAgB,MAClB,EACA,IAAU,MACZ,EAEF,IAAM,GAAgB,EAAK,EAAM,gBAAkB,KAAO,EAAK,EACzD,GAAoB,EAAK,EAAM,oBAAsB,KAAO,EAAK,EACjE,GAAmB,GAAM,EAAK,EAAM,4BAA8B,KAAY,OAAI,EAAG,mBAAqB,KAAO,EAAU,OAC3H,EAAa,GAAmB,KAAO,EAAmB,EAAkB,EAClF,MAAO,CACL,YAAa,CACX,MAAO,EACP,QAAS,EACT,UAAgB,OAChB,WAAiB,MACnB,EACA,aAAc,CACZ,MAAO,EACP,KAAM,EACN,UAAW,CACb,EACA,IAAK,CACP,EAQF,SAAS,EAAyB,CAAC,EAAQ,CACzC,IAAI,EACJ,IAAM,EAAW,CAAC,EAClB,QAAa,OAAM,aAAa,EAC9B,OAAQ,OACD,SAAU,CACb,EAAS,KAAK,CAAE,KAAM,SAAU,SAAQ,CAAC,EACzC,KACF,KACK,OAAQ,CACX,GAAI,EAAQ,SAAW,GAAK,EAAQ,GAAG,OAAS,OAAQ,CACtD,EAAS,KAAK,CAAE,KAAM,OAAQ,QAAS,EAAQ,GAAG,IAAK,CAAC,EACxD,MAEF,EAAS,KAAK,CACZ,KAAM,OACN,QAAS,EAAQ,IAAI,CAAC,IAAS,CAC7B,OAAQ,EAAK,UACN,OACH,MAAO,CAAE,KAAM,OAAQ,KAAM,EAAK,IAAK,MAEpC,OAAQ,CACX,GAAI,CAAC,EAAK,UAAU,WAAW,QAAQ,EACrC,MAAM,IAAI,EAA8B,CACtC,cAAe,8BACjB,CAAC,EAEH,IAAM,EAAY,EAAK,YAAc,UAAY,aAAe,EAAK,UACrE,MAAO,CACL,KAAM,YACN,UAAW,CACT,IAAK,EAAK,gBAAgB,IAAM,EAAK,KAAK,SAAS,EAAI,QAAQ,YAAoB,EAAgB,EAAK,IAAI,GAC9G,CACF,CACF,GAEH,CACH,CAAC,EACD,KACF,KACK,YAAa,CAChB,IAAI,EAAO,GACP,EAAY,GACV,EAAY,CAAC,EACnB,QAAW,KAAQ,EACjB,OAAQ,EAAK,UAGN,YAAa,CAChB,GAAa,EAAK,KAClB,KACF,KACK,OAAQ,CACX,GAAQ,EAAK,KACb,KACF,KACK,YAAa,CAChB,EAAU,KAAK,CACb,GAAI,EAAK,WACT,KAAM,WACN,SAAU,CACR,KAAM,EAAK,SACX,UAAW,KAAK,UAAU,EAAK,KAAK,CACtC,CACF,CAAC,EACD,KACF,EAGJ,EAAS,KAAK,CACZ,KAAM,YACN,QAAS,KACN,EAAU,OAAS,EAAI,CAAE,WAAU,EAAI,QACvC,EAAU,OAAS,EAAI,CAAE,WAAY,CAAU,EAAI,IACxD,CAAC,EACD,KACF,KACK,OAAQ,CACX,QAAW,KAAgB,EAAS,CAClC,GAAI,EAAa,OAAS,yBACxB,SAEF,IAAM,EAAS,EAAa,OACxB,EACJ,OAAQ,EAAO,UACR,WACA,aACH,EAAe,EAAO,MACtB,UACG,mBACH,GAAgB,EAAK,EAAO,SAAW,KAAO,EAAK,yBACnD,UACG,cACA,WACA,aACH,EAAe,KAAK,UAAU,EAAO,KAAK,EAC1C,MAEJ,EAAS,KAAK,CACZ,KAAM,OACN,aAAc,EAAa,WAC3B,QAAS,CACX,CAAC,EAEH,KACF,SAGE,MAAU,MAAM,qBADS,GAC8B,EAI7D,OAAO,EAIT,SAAS,CAAmB,EAC1B,KACA,QACA,WACC,CACD,MAAO,CACL,GAAI,GAAM,KAAO,EAAU,OAC3B,QAAS,GAAS,KAAO,EAAa,OACtC,UAAW,GAAW,KAAO,IAAI,KAAK,EAAU,IAAG,EAAS,MAC9D,EAKF,IAAI,GAA2B,EAAE,OAAO,CACtC,gBAAiB,EAAE,KAAK,CAAC,SAAU,MAAO,QAAQ,CAAC,EAAE,SAAS,EAK9D,gBAAiB,EAAE,KAAK,CAAC,OAAQ,UAAW,MAAO,SAAU,MAAM,CAAC,EAAE,SAAS,EAI/E,kBAAmB,EAAE,QAAQ,EAAE,SAAS,EAKxC,KAAM,EAAE,OAAO,EAAE,SAAS,EAM1B,kBAAmB,EAAE,QAAQ,EAAE,SAAS,EAQxC,iBAAkB,EAAE,QAAQ,EAAE,SAAS,EASvC,YAAa,EAAE,KAAK,CAAC,YAAa,OAAQ,MAAM,CAAC,EAAE,SAAS,CAC9D,CAAC,EAKG,GAAsB,EAAG,OAAO,CAClC,MAAO,EAAG,OAAO,CACf,QAAS,EAAG,OAAO,EACnB,KAAM,EAAG,OAAO,CAClB,CAAC,CACH,CAAC,EACG,EAA4B,GAA+B,CAC7D,YAAa,GACb,eAAgB,CAAC,IAAS,EAAK,MAAM,OACvC,CAAC,EAQG,GAAkC,CACpC,qBACA,qBACF,EACA,SAAS,EAA6B,CAAC,EAAS,CAC9C,OAAO,GAAgC,SAAS,CAAO,EAEzD,SAAS,EAAwB,EAAG,CAClC,OAAO,GAAgC,KAAK,IAAI,EAIlD,SAAS,EAAY,EACnB,QACA,aACA,WACC,CACD,GAAS,GAAS,KAAY,OAAI,EAAM,QAAU,EAAa,OAC/D,IAAM,EAAe,CAAC,EACtB,GAAI,GAAS,KACX,MAAO,CAAE,MAAY,OAAG,WAAiB,OAAG,cAAa,EAE3D,IAAM,EAAa,CAAC,EACpB,QAAW,KAAQ,EACjB,GAAI,EAAK,OAAS,WAChB,GAAI,EAAK,KAAO,sBACd,GAAI,CAAC,GAA8B,CAAO,EACxC,EAAa,KAAK,CAChB,KAAM,cACN,QAAS,yBAAyB,EAAK,KACvC,QAAS,6DAA6D,GAAyB,qBAAqB,GACtH,CAAC,EAED,OAAW,KAAK,CACd,KAAM,gBACR,CAAC,EAGH,OAAa,KAAK,CAChB,KAAM,cACN,QAAS,yBAAyB,EAAK,IACzC,CAAC,EAGH,OAAW,KAAK,CACd,KAAM,WACN,SAAU,CACR,KAAM,EAAK,KACX,YAAa,EAAK,YAClB,WAAY,EAAK,eACd,EAAK,QAAU,KAAO,CAAE,OAAQ,EAAK,MAAO,EAAI,CAAC,CACtD,CACF,CAAC,EAGL,GAAI,GAAc,KAChB,MAAO,CAAE,MAAO,EAAY,WAAiB,OAAG,cAAa,EAE/D,IAAM,EAAO,EAAW,KACxB,OAAQ,OACD,WACA,WACA,WACH,MAAO,CAAE,MAAO,EAAY,WAAY,EAAM,cAAa,MACxD,OACH,MAAO,CACL,MAAO,EACP,WAAY,CACV,KAAM,WACN,SAAU,CACR,KAAM,EAAW,QACnB,CACF,EACA,cACF,UAGA,MAAM,IAAI,EAA+B,CACvC,cAAe,qBAFQ,GAGzB,CAAC,GAMP,SAAS,CAAmB,CAAC,EAAc,CACzC,OAAQ,OACD,OACH,MAAO,WACJ,SACH,MAAO,aACJ,iBACH,MAAO,qBACJ,oBACA,aACH,MAAO,qBAEP,MAAO,SAKb,IAAI,GAAwB,KAAM,CAChC,WAAW,CAAC,EAAS,EAAQ,CAC3B,KAAK,qBAAuB,KAC5B,KAAK,cAAgB,CACnB,UAAW,CAAC,iBAAiB,CAC/B,EACA,KAAK,QAAU,EACf,KAAK,OAAS,KAEZ,SAAQ,EAAG,CACb,OAAO,KAAK,OAAO,cAEf,QAAO,EACX,SACA,kBACA,cACA,OACA,OACA,mBACA,kBACA,gBACA,iBACA,OACA,SACA,QACA,aACA,mBACC,CACD,IAAI,EAAI,EAAI,EACZ,IAAM,EAAW,CAAC,EACZ,EAAc,MAAM,EAAqB,CAC7C,SAAU,OACV,kBACA,OAAQ,EACV,CAAC,EACK,GAAqB,EAAK,GAAe,KAAY,OAAI,EAAY,oBAAsB,KAAO,EAAK,GACvG,GAAoB,EAAK,GAAe,KAAY,OAAI,EAAY,mBAAqB,KAAO,EAAK,GAC3G,GAAI,GAAQ,KACV,EAAS,KAAK,CAAE,KAAM,cAAe,QAAS,MAAO,CAAC,EAExD,IAAK,GAAkB,KAAY,OAAI,EAAe,QAAU,QAAU,EAAe,QAAU,MAAQ,CAAC,EAC1G,EAAS,KAAK,CACZ,KAAM,cACN,QAAS,iBACT,QAAS,sEACX,CAAC,EAEH,IACE,MAAO,EACP,WAAY,EACZ,gBACE,GAAa,CAAE,QAAO,aAAY,QAAS,KAAK,OAAQ,CAAC,EAC7D,MAAO,CACL,KAAM,CAEJ,MAAO,KAAK,QAEZ,KAAM,GAAe,KAAY,OAAI,EAAY,KACjD,oBAAqB,GAAe,KAAY,OAAI,EAAY,kBAEhE,WAAY,EACZ,cACA,MAAO,EACP,kBAAmB,EACnB,iBAAkB,EAClB,KAAM,EACN,OAEA,iBAAkB,GAAkB,KAAY,OAAI,EAAe,QAAU,OAAS,GAAqB,EAAe,QAAU,KAAO,CACzI,KAAM,cACN,YAAa,CACX,OAAQ,EAAe,OACvB,OAAQ,EACR,MAAO,EAAK,EAAe,OAAS,KAAO,EAAK,WAChD,YAAa,EAAe,WAC9B,CACF,EAAI,CAAE,KAAM,aAAc,EAAS,OAEnC,iBAAkB,GAAe,KAAY,OAAI,EAAY,gBAC7D,iBAAkB,GAAe,KAAY,OAAI,EAAY,gBAC7D,aAAc,GAAe,KAAY,OAAI,EAAY,YAEzD,SAAU,GAA0B,CAAM,EAE1C,MAAO,EACP,YAAa,CACf,EACA,SAAU,CAAC,GAAG,EAAU,GAAG,CAAY,CACzC,OAEI,WAAU,CAAC,EAAS,CACxB,IAAI,EAAI,EACR,IAAQ,OAAM,YAAa,MAAM,KAAK,QAAQ,IACzC,EACH,OAAQ,EACV,CAAC,EACK,EAAO,KAAK,UAAU,CAAI,GAE9B,kBACA,MAAO,EACP,SAAU,GACR,MAAM,EAAc,CACtB,IAAK,KAAK,OAAO,IAAI,CACnB,KAAM,oBACN,QAAS,KAAK,OAChB,CAAC,EACD,QAAS,EAAe,KAAK,OAAO,QAAQ,EAAG,EAAQ,OAAO,EAC9D,KAAM,EACN,sBAAuB,EACvB,0BAA2B,EACzB,EACF,EACA,YAAa,EAAQ,YACrB,MAAO,KAAK,OAAO,KACrB,CAAC,EACK,EAAS,EAAS,QAAQ,GAC1B,EAAU,CAAC,EACX,EAAO,EAAO,QAAQ,QAC5B,GAAI,GAAQ,MAAQ,EAAK,OAAS,EAChC,EAAQ,KAAK,CAAE,KAAM,OAAQ,MAAK,CAAC,EAErC,IAAM,EAAY,EAAO,QAAQ,UACjC,GAAI,GAAa,MAAQ,EAAU,OAAS,EAC1C,EAAQ,KAAK,CACX,KAAM,YACN,KAAM,CACR,CAAC,EAEH,GAAI,EAAO,QAAQ,YAAc,KAC/B,QAAW,KAAY,EAAO,QAAQ,WACpC,EAAQ,KAAK,CACX,KAAM,YACN,YAAa,EAAK,EAAS,KAAO,KAAO,EAAK,EAAW,EACzD,SAAU,EAAS,SAAS,KAC5B,MAAO,EAAS,SAAS,SAC3B,CAAC,EAGL,MAAO,CACL,UACA,aAAc,CACZ,QAAS,EAAoB,EAAO,aAAa,EACjD,KAAM,EAAK,EAAO,gBAAkB,KAAO,EAAU,MACvD,EACA,MAAO,EAAiB,EAAS,KAAK,EACtC,SAAU,IACL,EAAoB,CAAQ,EAC/B,QAAS,EACT,KAAM,CACR,EACA,WACA,QAAS,CAAE,MAAK,CAClB,OAEI,SAAQ,CAAC,EAAS,CACtB,IAAQ,OAAM,YAAa,MAAM,KAAK,QAAQ,IAAK,EAAS,OAAQ,EAAK,CAAC,EACpE,EAAO,KAAK,UAAU,IAAK,EAAM,OAAQ,EAAK,CAAC,GAC7C,kBAAiB,MAAO,GAAa,MAAM,EAAc,CAC/D,IAAK,KAAK,OAAO,IAAI,CACnB,KAAM,oBACN,QAAS,KAAK,OAChB,CAAC,EACD,QAAS,EAAe,KAAK,OAAO,QAAQ,EAAG,EAAQ,OAAO,EAC9D,KAAM,IACD,EACH,OAAQ,EACV,EACA,sBAAuB,EACvB,0BAA2B,GAAiC,EAAmB,EAC/E,YAAa,EAAQ,YACrB,MAAO,KAAK,OAAO,KACrB,CAAC,EACK,EAAY,CAAC,EACf,EAAe,CACjB,QAAS,QACT,IAAU,MACZ,EACI,EAAa,OACb,EAAe,GACf,EAAe,GACf,EAAoB,GACpB,EACJ,MAAO,CACL,OAAQ,EAAS,YACf,IAAI,gBAAgB,CAClB,KAAK,CAAC,EAAY,CAChB,EAAW,QAAQ,CAAE,KAAM,eAAgB,UAAS,CAAC,GAEvD,SAAS,CAAC,EAAO,EAAY,CAC3B,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EACpD,GAAI,EAAQ,iBACV,EAAW,QAAQ,CAAE,KAAM,MAAO,SAAU,EAAM,QAAS,CAAC,EAE9D,GAAI,CAAC,EAAM,QAAS,CAClB,EAAe,CACb,QAAS,QACT,IAAU,MACZ,EACA,EAAW,QAAQ,CAAE,KAAM,QAAS,MAAO,EAAM,KAAM,CAAC,EACxD,OAEF,IAAM,EAAQ,EAAM,MACpB,GAAI,UAAW,EAAO,CACpB,EAAe,CACb,QAAS,QACT,IAAU,MACZ,EACA,EAAW,QAAQ,CAAE,KAAM,QAAS,MAAO,EAAM,KAAM,CAAC,EACxD,OAEF,GAAI,EACF,EAAe,GACf,EAAW,QAAQ,CACjB,KAAM,uBACH,EAAoB,CAAK,CAC9B,CAAC,EAEH,KAAM,EAAK,EAAM,SAAW,KAAY,OAAI,EAAG,QAAU,KACvD,EAAQ,EAAM,OAAO,MAEvB,IAAM,EAAS,EAAM,QAAQ,GAC7B,IAAK,GAAU,KAAY,OAAI,EAAO,gBAAkB,KACtD,EAAe,CACb,QAAS,EAAoB,EAAO,aAAa,EACjD,IAAK,EAAO,aACd,EAEF,IAAK,GAAU,KAAY,OAAI,EAAO,QAAU,KAC9C,OAEF,IAAM,EAAQ,EAAO,MACrB,GAAI,EAAM,WAAa,MAAQ,EAAM,UAAU,OAAS,EAAG,CACzD,GAAI,CAAC,EACH,EAAW,QAAQ,CACjB,KAAM,kBACN,GAAI,aACN,CAAC,EACD,EAAoB,GAEtB,EAAW,QAAQ,CACjB,KAAM,kBACN,GAAI,cACJ,MAAO,EAAM,SACf,CAAC,EAEH,GAAI,EAAM,SAAW,MAAQ,EAAM,QAAQ,OAAS,EAAG,CACrD,GAAI,EACF,EAAW,QAAQ,CACjB,KAAM,gBACN,GAAI,aACN,CAAC,EACD,EAAoB,GAEtB,GAAI,CAAC,EACH,EAAW,QAAQ,CAAE,KAAM,aAAc,GAAI,OAAQ,CAAC,EACtD,EAAe,GAEjB,EAAW,QAAQ,CACjB,KAAM,aACN,GAAI,QACJ,MAAO,EAAM,OACf,CAAC,EAEH,GAAI,EAAM,YAAc,KAAM,CAC5B,GAAI,EACF,EAAW,QAAQ,CACjB,KAAM,gBACN,GAAI,aACN,CAAC,EACD,EAAoB,GAEtB,QAAW,KAAiB,EAAM,WAAY,CAC5C,IAAM,EAAQ,EAAc,MAC5B,GAAI,EAAU,IAAU,KAAM,CAC5B,GAAI,EAAc,OAAS,WACzB,MAAM,IAAI,EAAyB,CACjC,KAAM,EACN,QAAS,2BACX,CAAC,EAEH,GAAI,EAAc,IAAM,KACtB,MAAM,IAAI,EAAyB,CACjC,KAAM,EACN,QAAS,+BACX,CAAC,EAEH,KAAM,EAAK,EAAc,WAAa,KAAY,OAAI,EAAG,OAAS,KAChE,MAAM,IAAI,EAAyB,CACjC,KAAM,EACN,QAAS,0CACX,CAAC,EAEH,EAAW,QAAQ,CACjB,KAAM,mBACN,GAAI,EAAc,GAClB,SAAU,EAAc,SAAS,IACnC,CAAC,EACD,EAAU,GAAS,CACjB,GAAI,EAAc,GAClB,KAAM,WACN,SAAU,CACR,KAAM,EAAc,SAAS,KAC7B,WAAY,EAAK,EAAc,SAAS,YAAc,KAAO,EAAK,EACpE,EACA,YAAa,EACf,EACA,IAAM,EAAY,EAAU,GAC5B,KAAM,EAAK,EAAU,WAAa,KAAY,OAAI,EAAG,OAAS,QAAU,EAAK,EAAU,WAAa,KAAY,OAAI,EAAG,YAAc,KAAM,CACzI,GAAI,EAAU,SAAS,UAAU,OAAS,EACxC,EAAW,QAAQ,CACjB,KAAM,mBACN,GAAI,EAAU,GACd,MAAO,EAAU,SAAS,SAC5B,CAAC,EAEH,GAAI,EAAe,EAAU,SAAS,SAAS,EAC7C,EAAW,QAAQ,CACjB,KAAM,iBACN,GAAI,EAAU,EAChB,CAAC,EACD,EAAW,QAAQ,CACjB,KAAM,YACN,YAAa,EAAK,EAAU,KAAO,KAAO,EAAK,EAAW,EAC1D,SAAU,EAAU,SAAS,KAC7B,MAAO,EAAU,SAAS,SAC5B,CAAC,EACD,EAAU,YAAc,GAG5B,SAEF,IAAM,EAAW,EAAU,GAC3B,GAAI,EAAS,YACX,SAEF,KAAM,EAAK,EAAc,WAAa,KAAY,OAAI,EAAG,YAAc,KACrE,EAAS,SAAS,YAAc,GAAM,EAAK,EAAc,WAAa,KAAY,OAAI,EAAG,YAAc,KAAO,EAAK,GAOrH,GALA,EAAW,QAAQ,CACjB,KAAM,mBACN,GAAI,EAAS,GACb,OAAQ,EAAK,EAAc,SAAS,YAAc,KAAO,EAAK,EAChE,CAAC,IACK,EAAK,EAAS,WAAa,KAAY,OAAI,EAAG,OAAS,QAAU,EAAK,EAAS,WAAa,KAAY,OAAI,EAAG,YAAc,MAAQ,EAAe,EAAS,SAAS,SAAS,EACnL,EAAW,QAAQ,CACjB,KAAM,iBACN,GAAI,EAAS,EACf,CAAC,EACD,EAAW,QAAQ,CACjB,KAAM,YACN,YAAa,EAAK,EAAS,KAAO,KAAO,EAAK,EAAW,EACzD,SAAU,EAAS,SAAS,KAC5B,MAAO,EAAS,SAAS,SAC3B,CAAC,EACD,EAAS,YAAc,MAK/B,KAAK,CAAC,EAAY,CAChB,GAAI,EACF,EAAW,QAAQ,CAAE,KAAM,gBAAiB,GAAI,aAAc,CAAC,EAEjE,GAAI,EACF,EAAW,QAAQ,CAAE,KAAM,WAAY,GAAI,OAAQ,CAAC,EAEtD,EAAW,QAAQ,CACjB,KAAM,SACN,eACA,MAAO,EAAiB,CAAK,KAC1B,GAAoB,KAAO,CAAE,kBAAiB,EAAI,CAAC,CACxD,CAAC,EAEL,CAAC,CACH,EACA,QAAS,CAAE,MAAK,EAChB,SAAU,CAAE,QAAS,CAAgB,CACvC,EAEJ,EACI,GAAyB,EAAG,OAAO,CACrC,GAAI,EAAG,OAAO,EAAE,QAAQ,EACxB,QAAS,EAAG,OAAO,EAAE,QAAQ,EAC7B,MAAO,EAAG,OAAO,EAAE,QAAQ,EAC3B,QAAS,EAAG,MACV,EAAG,OAAO,CACR,QAAS,EAAG,OAAO,CACjB,QAAS,EAAG,OAAO,EAAE,QAAQ,EAC7B,UAAW,EAAG,OAAO,EAAE,QAAQ,EAC/B,WAAY,EAAG,MACb,EAAG,OAAO,CACR,GAAI,EAAG,OAAO,EAAE,QAAQ,EACxB,KAAM,EAAG,QAAQ,UAAU,EAC3B,SAAU,EAAG,OAAO,CAClB,KAAM,EAAG,OAAO,EAChB,UAAW,EAAG,OAAO,CACvB,CAAC,CACH,CAAC,CACH,EAAE,QAAQ,CACZ,CAAC,EACD,MAAO,EAAG,OAAO,EACjB,cAAe,EAAG,OAAO,EAAE,QAAQ,CACrC,CAAC,CACH,EACA,MAAO,EAAG,OAAO,CACf,cAAe,EAAG,OAAO,EAAE,QAAQ,EACnC,kBAAmB,EAAG,OAAO,EAAE,QAAQ,EACvC,aAAc,EAAG,OAAO,EAAE,QAAQ,EAClC,sBAAuB,EAAG,OAAO,CAC/B,cAAe,EAAG,OAAO,EAAE,QAAQ,CACrC,CAAC,EAAE,QAAQ,EACX,0BAA2B,EAAG,OAAO,CACnC,iBAAkB,EAAG,OAAO,EAAE,QAAQ,CACxC,CAAC,EAAE,QAAQ,CACb,CAAC,EAAE,QAAQ,CACb,CAAC,EACG,GAAsB,EAAG,MAAM,CACjC,EAAG,OAAO,CACR,GAAI,EAAG,OAAO,EAAE,QAAQ,EACxB,QAAS,EAAG,OAAO,EAAE,QAAQ,EAC7B,MAAO,EAAG,OAAO,EAAE,QAAQ,EAC3B,QAAS,EAAG,MACV,EAAG,OAAO,CACR,MAAO,EAAG,OAAO,CACf,QAAS,EAAG,OAAO,EAAE,QAAQ,EAC7B,UAAW,EAAG,OAAO,EAAE,QAAQ,EAC/B,WAAY,EAAG,MACb,EAAG,OAAO,CACR,MAAO,EAAG,OAAO,EACjB,GAAI,EAAG,OAAO,EAAE,QAAQ,EACxB,KAAM,EAAG,QAAQ,UAAU,EAAE,SAAS,EACtC,SAAU,EAAG,OAAO,CAClB,KAAM,EAAG,OAAO,EAAE,QAAQ,EAC1B,UAAW,EAAG,OAAO,EAAE,QAAQ,CACjC,CAAC,CACH,CAAC,CACH,EAAE,QAAQ,CACZ,CAAC,EAAE,QAAQ,EACX,cAAe,EAAG,OAAO,EAAE,SAAS,EAAE,SAAS,EAC/C,MAAO,EAAG,OAAO,CACnB,CAAC,CACH,EACA,OAAQ,EAAG,OAAO,CAChB,MAAO,EAAG,OAAO,CACf,cAAe,EAAG,OAAO,EAAE,QAAQ,EACnC,kBAAmB,EAAG,OAAO,EAAE,QAAQ,EACvC,aAAc,EAAG,OAAO,EAAE,QAAQ,EAClC,sBAAuB,EAAG,OAAO,CAC/B,cAAe,EAAG,OAAO,EAAE,QAAQ,CACrC,CAAC,EAAE,QAAQ,EACX,0BAA2B,EAAG,OAAO,CACnC,iBAAkB,EAAG,OAAO,EAAE,QAAQ,CACxC,CAAC,EAAE,QAAQ,CACb,CAAC,EAAE,QAAQ,CACb,CAAC,EAAE,QAAQ,CACb,CAAC,EACD,EACF,CAAC,EAgBG,GAAgC,GAClC,IAAM,GACJ,EAAG,OAAO,CACR,SAAU,EAAG,OAAO,EAAE,QAAQ,EAC9B,OAAQ,EAAG,OAAO,EAAE,QAAQ,EAC5B,eAAgB,EAAG,OAAO,EAAE,QAAQ,EACpC,YAAa,EAAG,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAC/C,uBAAwB,EAAG,MAAM,EAAG,OAAO,CAAC,EAAE,QAAQ,CACxD,CAAC,CACH,CACF,EAGI,GAAyB,KAAM,CACjC,WAAW,CAAC,EAAS,EAAQ,CAC3B,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,qBAAuB,QAE1B,SAAQ,EAAG,CACb,OAAO,KAAK,OAAO,cAEf,QAAO,EACX,QACA,YACA,mBACC,CACD,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,IAAM,EAAW,CAAC,EACZ,EAAc,MAAM,EAAsB,CAC9C,SAAU,OACV,kBACA,OAAQ,EACV,CAAC,EACK,EAAW,IAAI,SACf,EAAO,aAAiB,WAAa,IAAI,KAAK,CAAC,CAAK,CAAC,EAAI,IAAI,KAAK,CAAC,EAA0B,CAAK,CAAC,CAAC,EAC1G,EAAS,OAAO,QAAS,KAAK,OAAO,EACrC,IAAM,EAAgB,EAAqB,CAAS,EAMpD,GALA,EAAS,OACP,OACA,IAAI,KAAK,CAAC,CAAI,EAAG,QAAS,CAAE,KAAM,CAAU,CAAC,EAC7C,SAAS,GACX,EACI,EAAa,CACf,IAAM,EAA4B,CAChC,UAAW,EAAK,EAAY,WAAa,KAAO,EAAU,OAC1D,QAAS,EAAK,EAAY,SAAW,KAAO,EAAU,OACtD,iBAAkB,EAAK,EAAY,iBAAmB,KAAO,EAAU,OACvE,aAAc,EAAK,EAAY,cAAgB,KAAO,EAAU,OAChE,yBAA0B,EAAK,EAAY,yBAA2B,KAAO,EAAU,MACzF,EACA,QAAW,KAAO,EAA2B,CAC3C,IAAM,EAAQ,EAA0B,GACxC,GAAI,IAAe,OACjB,GAAI,MAAM,QAAQ,CAAK,EACrB,QAAW,KAAQ,EACjB,EAAS,OAAO,GAAG,MAAS,OAAO,CAAI,CAAC,EAG1C,OAAS,OAAO,EAAK,OAAO,CAAK,CAAC,GAK1C,MAAO,CACL,WACA,UACF,OAEI,WAAU,CAAC,EAAS,CACxB,IAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5B,IAAM,GAAe,GAAM,GAAM,EAAK,KAAK,OAAO,YAAc,KAAY,OAAI,EAAG,cAAgB,KAAY,OAAI,EAAG,KAAK,CAAE,IAAM,KAAO,EAAqB,IAAI,MAC3J,WAAU,YAAa,MAAM,KAAK,QAAQ,CAAO,GAEvD,MAAO,EACP,kBACA,SAAU,GACR,MAAM,GAAkB,CAC1B,IAAK,KAAK,OAAO,IAAI,CACnB,KAAM,wBACN,QAAS,KAAK,OAChB,CAAC,EACD,QAAS,EAAgB,KAAK,OAAO,QAAQ,EAAG,EAAQ,OAAO,EAC/D,WACA,sBAAuB,EACvB,0BAA2B,EACzB,EACF,EACA,YAAa,EAAQ,YACrB,MAAO,KAAK,OAAO,KACrB,CAAC,EACD,MAAO,CACL,KAAM,EAAS,KACf,UAAW,GAAM,EAAK,EAAS,WAAa,KAAY,OAAI,EAAG,IAAI,CAAC,KAAa,CAC/E,KAAM,EAAQ,KACd,YAAa,EAAQ,MACrB,UAAW,EAAQ,GACrB,EAAE,IAAM,KAAO,EAAK,CAAC,EACrB,UAAW,EAAK,EAAS,WAAa,KAAO,EAAU,OACvD,mBAAoB,EAAK,EAAS,WAAa,KAAO,EAAU,OAChE,WACA,SAAU,CACR,UAAW,EACX,QAAS,KAAK,QACd,QAAS,EACT,KAAM,CACR,CACF,EAEJ,EACI,GAAkC,EAAG,OAAO,CAC9C,KAAM,EAAG,OAAO,EAChB,OAAQ,EAAG,OAAO,CAChB,GAAI,EAAG,OAAO,CAChB,CAAC,EAED,KAAM,EAAG,OAAO,EAAE,QAAQ,EAC1B,SAAU,EAAG,OAAO,EAAE,QAAQ,EAC9B,SAAU,EAAG,OAAO,EAAE,QAAQ,EAC9B,SAAU,EAAG,MACX,EAAG,OAAO,CACR,GAAI,EAAG,OAAO,EACd,KAAM,EAAG,OAAO,EAChB,MAAO,EAAG,OAAO,EACjB,IAAK,EAAG,OAAO,EACf,KAAM,EAAG,OAAO,EAChB,OAAQ,EAAG,MAAM,EAAG,OAAO,CAAC,EAC5B,YAAa,EAAG,OAAO,EACvB,YAAa,EAAG,OAAO,EACvB,kBAAmB,EAAG,OAAO,EAC7B,eAAgB,EAAG,OAAO,CAC5B,CAAC,CACH,EAAE,QAAQ,CACZ,CAAC,EAKG,GAAgB,GAA0B,CAC5C,GAAI,sBACJ,YAAa,EAAG,OAAO,CAAC,CAAC,CAC3B,CAAC,EAGG,GAAY,CACd,gBACF,EAGI,GAAiB,SAGrB,SAAS,EAAU,CAAC,EAAU,CAAC,EAAG,CAChC,IAAI,EACJ,IAAM,GAAW,EAAK,GAAqB,EAAQ,OAAO,IAAM,KAAO,EAAK,iCACtE,EAAa,IAAM,EACvB,CACE,cAAe,UAAU,EAAW,CAClC,OAAQ,EAAQ,OAChB,wBAAyB,eACzB,YAAa,MACf,CAAC,OACE,EAAQ,OACb,EACA,eAAe,IACjB,EACM,EAAkB,CAAC,IAAY,IAAI,GAAsB,EAAS,CACtE,SAAU,YACV,IAAK,EAAG,UAAW,GAAG,IAAU,IAChC,QAAS,EACT,MAAO,EAAQ,KACjB,CAAC,EACK,EAAsB,CAAC,IAAY,CACvC,GAAI,WACF,MAAU,MACR,gEACF,EAEF,OAAO,EAAgB,CAAO,GAE1B,EAA2B,CAAC,IAAY,CAC5C,OAAO,IAAI,GAAuB,EAAS,CACzC,SAAU,qBACV,IAAK,EAAG,UAAW,GAAG,IAAU,IAChC,QAAS,EACT,MAAO,EAAQ,KACjB,CAAC,GAEG,EAAW,QAAQ,CAAC,EAAS,CACjC,OAAO,EAAoB,CAAO,GAepC,OAbA,EAAS,qBAAuB,KAChC,EAAS,cAAgB,EACzB,EAAS,KAAO,EAChB,EAAS,eAAiB,CAAC,IAAY,CACrC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,gBAAiB,CAAC,GAErE,EAAS,mBAAqB,EAAS,eACvC,EAAS,WAAa,CAAC,IAAY,CACjC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,YAAa,CAAC,GAEjE,EAAS,cAAgB,EACzB,EAAS,mBAAqB,EAC9B,EAAS,MAAQ,GACV,EAET,IAAI,GAAO,GAAW", | ||
| "debugId": "747BC1822F15C3E764756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/start.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.start,\n Effect.fn(\"cli.service.start\")(function* () {\n const transport = yield* Service.ensure(yield* ServiceConfig.options())\n process.stdout.write(transport.url + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAAA,mBAAS,gBAOT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,WACnC,OAAO,QAAG,wBAAmB,OAAE,cAAU,OAAG,MAC1C,SAAM,OAAY,WAAO,OAAQ,YAAO,MAAO,EAAc,QAAQ,CAAC,EACtE,QAAQ,OAAO,MAAM,EAAU,IAAM,CAAG,EACzC,CACH", | ||
| "debugId": "C4DA16569FB9E0C364756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/util/slug.ts"], | ||
| "sourcesContent": [ | ||
| "export namespace Slug {\n const ADJECTIVES = [\n \"brave\",\n \"calm\",\n \"clever\",\n \"cosmic\",\n \"crisp\",\n \"curious\",\n \"eager\",\n \"gentle\",\n \"glowing\",\n \"happy\",\n \"hidden\",\n \"jolly\",\n \"kind\",\n \"lucky\",\n \"mighty\",\n \"misty\",\n \"neon\",\n \"nimble\",\n \"playful\",\n \"proud\",\n \"quick\",\n \"quiet\",\n \"shiny\",\n \"silent\",\n \"stellar\",\n \"sunny\",\n \"swift\",\n \"tidy\",\n \"witty\",\n ] as const\n\n const NOUNS = [\n \"cabin\",\n \"cactus\",\n \"canyon\",\n \"circuit\",\n \"comet\",\n \"eagle\",\n \"engine\",\n \"falcon\",\n \"forest\",\n \"garden\",\n \"harbor\",\n \"island\",\n \"knight\",\n \"lagoon\",\n \"meadow\",\n \"moon\",\n \"mountain\",\n \"nebula\",\n \"orchid\",\n \"otter\",\n \"panda\",\n \"pixel\",\n \"planet\",\n \"river\",\n \"rocket\",\n \"sailor\",\n \"squid\",\n \"star\",\n \"tiger\",\n \"wizard\",\n \"wolf\",\n ] as const\n\n export function create() {\n return [\n ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)],\n NOUNS[Math.floor(Math.random() * NOUNS.length)],\n ].join(\"-\")\n }\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,IAAU,GAAV,CAAU,IAAV,CACL,IAAM,EAAa,CACjB,QACA,OACA,SACA,SACA,QACA,UACA,QACA,SACA,UACA,QACA,SACA,QACA,OACA,QACA,SACA,QACA,OACA,SACA,UACA,QACA,QACA,QACA,QACA,SACA,UACA,QACA,QACA,OACA,OACF,EAEM,EAAQ,CACZ,QACA,SACA,SACA,UACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,OACA,WACA,SACA,SACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,QACA,OACA,QACA,SACA,MACF,EAEO,SAAS,CAAM,EAAG,CACvB,MAAO,CACL,EAAW,KAAK,MAAM,KAAK,OAAO,EAAI,EAAW,MAAM,GACvD,EAAM,KAAK,MAAM,KAAK,OAAO,EAAI,EAAM,MAAM,EAC/C,EAAE,KAAK,GAAG,EAJL,EAAS,WAnED", | ||
| "debugId": "FC84A19CCB63C25964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/runtime.queue.ts"], | ||
| "sourcesContent": [ | ||
| "// Serial prompt queue for direct interactive mode.\n//\n// Prompts arrive from the footer (user types and hits enter) and local\n// operations drain one at a time. Ordinary prompts submitted during an active\n// ordinary turn are admitted immediately to the server's durable queue.\n//\n// The queue also handles local session commands, empty-prompt rejection,\n// and tracks per-turn wall-clock duration for the footer status line.\n//\n// Resolves when the footer closes and all in-flight work finishes.\nimport { SessionMessage } from \"@opencode-ai/schema/session-message\"\nimport { Locale } from \"../util/locale\"\nimport { isCompactCommand, isExitCommand, isNewCommand } from \"./prompt.shared\"\nimport type { FooterApi, FooterEvent, RunPrompt } from \"./types\"\n\ntype Trace = {\n write(type: string, data?: unknown): void\n}\n\nexport type QueueInput = {\n footer: FooterApi\n initialInput?: string\n trace?: Trace\n onSend?: (prompt: RunPrompt, delivery: \"steer\" | \"queue\") => void\n onAdmissionError?: (prompt: RunPrompt, error: unknown) => void | Promise<void>\n onNewSession?: () => void | Promise<void>\n onCompact?: () => void | Promise<void>\n admit: (prompt: RunPrompt, signal: AbortSignal) => Promise<void>\n settle: () => Promise<void>\n run: (prompt: RunPrompt, signal: AbortSignal, admitted: () => void) => Promise<void>\n}\n\ntype State = {\n queue: RunPrompt[]\n active?: RunPrompt\n admission?: Promise<void>\n ctrl?: AbortController\n closed: boolean\n}\n\n// Runs the prompt queue until the footer closes.\n//\n// Subscribes to footer prompt events and drains operations through input.run().\n// Ordinary prompts submitted during an ordinary active turn are admitted as\n// durable queued work instead of remaining editable process-local state.\nexport async function runPromptQueue(input: QueueInput): Promise<void> {\n const stop = Promise.withResolvers<{ type: \"closed\" }>()\n const done = Promise.withResolvers<void>()\n const state: State = {\n queue: [],\n closed: input.footer.isClosed,\n }\n let draining: Promise<void> | undefined\n let admissions = Promise.resolve()\n let admissionVersion = 0\n const admissionController = new AbortController()\n\n const emit = (next: FooterEvent, row: Record<string, unknown>) => {\n input.trace?.write(\"ui.patch\", row)\n input.footer.event(next)\n }\n\n const finish = () => {\n if (!state.closed || draining) {\n return\n }\n\n done.resolve()\n }\n\n const close = () => {\n if (state.closed) {\n return\n }\n\n state.closed = true\n state.queue.length = 0\n // Ordinary turn signals map to session.interrupt; exiting should only detach the TUI.\n if (state.active?.mode === \"shell\") state.ctrl?.abort()\n admissionController.abort()\n stop.resolve({ type: \"closed\" })\n finish()\n }\n\n const drain = () => {\n if (draining || state.closed || state.queue.length === 0) {\n return\n }\n\n draining = (async () => {\n try {\n while (!state.closed && state.queue.length > 0) {\n const prompt = state.queue.shift()!\n\n if (prompt.mode !== \"shell\" && isNewCommand(prompt.text)) {\n if (!input.onNewSession) {\n emit(\n {\n type: \"stream.patch\",\n patch: {\n status: \"new sessions unavailable\",\n },\n },\n {\n status: \"new sessions unavailable\",\n },\n )\n continue\n }\n\n emit(\n {\n type: \"stream.patch\",\n patch: {\n phase: \"running\",\n status: \"starting new session\",\n },\n },\n {\n phase: \"running\",\n status: \"starting new session\",\n },\n )\n await input.onNewSession()\n continue\n }\n\n if (prompt.mode !== \"shell\" && isCompactCommand(prompt.text)) {\n emit(\n {\n type: \"stream.patch\",\n patch: {\n phase: \"running\",\n status: \"compacting session\",\n },\n },\n {\n phase: \"running\",\n status: \"compacting session\",\n },\n )\n await input.onCompact?.()\n continue\n }\n\n const sent =\n prompt.mode === \"shell\"\n ? prompt\n : {\n ...prompt,\n messageID: prompt.messageID ?? SessionMessage.ID.create(),\n }\n state.active = sent\n\n emit(\n { type: \"turn.send\" },\n {\n phase: \"running\",\n status: \"sending prompt\",\n },\n )\n const start = Date.now()\n const ctrl = new AbortController()\n const admission = Promise.withResolvers<void>()\n const version = admissionVersion\n state.ctrl = ctrl\n state.admission = admission.promise\n\n try {\n await input.footer.idle()\n if (state.closed) {\n break\n }\n\n if (sent.mode !== \"shell\") {\n const commit = {\n kind: \"user\",\n text: sent.text,\n phase: \"start\",\n source: \"system\",\n messageID: sent.messageID,\n } as const\n input.trace?.write(\"ui.commit\", commit)\n input.footer.append(commit)\n }\n input.onSend?.(sent, \"steer\")\n\n if (state.closed) {\n break\n }\n\n const task = input.run(sent, ctrl.signal, admission.resolve).then(\n () => ({ type: \"done\" as const }),\n (error) => ({ type: \"error\" as const, error }),\n )\n\n const next = await Promise.race([task, stop.promise])\n if (next.type === \"closed\") {\n break\n }\n\n if (next.type === \"error\") {\n throw next.error\n }\n if (sent.mode !== \"shell\" && admissionVersion !== version) {\n do {\n const current = admissionVersion\n await admissions\n if (state.closed) break\n await input.settle()\n if (current === admissionVersion) break\n } while (!state.closed)\n }\n } finally {\n admission.resolve()\n if (state.ctrl === ctrl) {\n state.ctrl = undefined\n }\n if (state.admission === admission.promise) state.admission = undefined\n\n if (sent.mode !== \"shell\") {\n const duration = Locale.duration(Math.max(0, Date.now() - start))\n emit(\n {\n type: \"turn.duration\",\n duration,\n },\n {\n duration,\n },\n )\n }\n state.active = undefined\n }\n }\n } catch (error) {\n done.reject(error)\n return\n } finally {\n draining = undefined\n emit(\n { type: \"turn.idle\" },\n {\n phase: \"idle\",\n status: \"\",\n },\n )\n }\n\n finish()\n })()\n }\n\n const submit = (prompt: RunPrompt) => {\n if (!prompt.text.trim() || state.closed) {\n return\n }\n\n if (prompt.mode !== \"shell\" && isExitCommand(prompt.text)) {\n input.footer.close()\n return\n }\n\n const active = state.active\n if (\n active &&\n active.mode !== \"shell\" &&\n prompt.mode !== \"shell\" &&\n prompt.command?.source !== \"skill\" &&\n !isNewCommand(prompt.text) &&\n !isCompactCommand(prompt.text) &&\n !state.queue.some(\n (item) => item.mode !== \"shell\" && (isNewCommand(item.text) || isCompactCommand(item.text)),\n )\n ) {\n const sent = { ...prompt, messageID: SessionMessage.ID.create() }\n const admission = state.admission\n admissionVersion += 1\n input.onSend?.(sent, \"queue\")\n admissions = admissions\n .then(() => admission)\n .then(() => input.admit(sent, admissionController.signal))\n .catch((error) => (state.closed ? undefined : input.onAdmissionError?.(sent, error)))\n return\n }\n\n state.queue.push(prompt)\n if (prompt.mode !== \"shell\" && (isNewCommand(prompt.text) || isCompactCommand(prompt.text))) {\n drain()\n return\n }\n\n emit(\n {\n type: \"first\",\n first: false,\n },\n {\n first: false,\n },\n )\n drain()\n }\n\n const offPrompt = input.footer.onPrompt((prompt) => {\n submit(prompt)\n })\n const offClose = input.footer.onClose(() => {\n close()\n })\n try {\n if (state.closed) {\n return\n }\n\n submit({\n text: input.initialInput ?? \"\",\n parts: [],\n })\n finish()\n await done.promise\n } finally {\n offPrompt()\n offClose()\n close()\n await draining?.catch(() => {})\n await admissions\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "4808CC2FA63F4F7664756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../schema/src/prompt.ts", "../schema/src/shell.ts", "../schema/src/session-error.ts", "../schema/src/session-id.ts", "../schema/src/permission.ts", "../schema/src/agent.ts", "../schema/src/skill.ts", "../schema/src/snapshot.ts", "../schema/src/token-usage.ts", "../schema/src/session-message.ts"], | ||
| "sourcesContent": [ | ||
| "import { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { statics } from \"./schema.js\"\n\nexport interface PromptMention extends Schema.Schema.Type<typeof PromptMention> {}\nexport const PromptMention = Schema.Struct({\n start: Schema.Finite,\n end: Schema.Finite,\n text: Schema.String,\n}).annotate({ identifier: \"Prompt.Mention\" })\n\nexport const FileSource = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"inline\") }),\n Schema.Struct({ type: Schema.Literal(\"uri\"), uri: Schema.String }),\n])\n .pipe(Schema.toTaggedUnion(\"type\"))\n .annotate({ identifier: \"Prompt.FileSource\" })\nexport type FileSource = typeof FileSource.Type\n\nexport const Base64 = Schema.String.check(\n Schema.isPattern(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/),\n).annotate({ identifier: \"Prompt.Base64\" })\nexport type Base64 = typeof Base64.Type\n\nexport interface FileAttachment extends Schema.Schema.Type<typeof FileAttachment> {}\nexport const FileAttachment = Schema.Struct({\n data: Base64,\n mime: Schema.String,\n source: FileSource,\n name: Schema.String.pipe(optional),\n description: Schema.String.pipe(optional),\n mention: PromptMention.pipe(optional),\n})\n .annotate({ identifier: \"Prompt.FileAttachment\" })\n .pipe(\n statics((schema) => ({\n create: (input: FileAttachment) =>\n schema.make({\n data: input.data,\n mime: input.mime,\n source: input.source,\n name: input.name,\n description: input.description,\n mention: input.mention,\n }),\n })),\n )\n\nexport interface AgentAttachment extends Schema.Schema.Type<typeof AgentAttachment> {}\nexport const AgentAttachment = Schema.Struct({\n name: Schema.String,\n mention: PromptMention.pipe(optional),\n}).annotate({ identifier: \"Prompt.AgentAttachment\" })\n\nexport interface Prompt extends Schema.Schema.Type<typeof Prompt> {}\nexport const Prompt = Schema.Struct({\n text: Schema.String,\n files: Schema.Array(FileAttachment).pipe(optional),\n agents: Schema.Array(AgentAttachment).pipe(optional),\n})\n .annotate({ identifier: \"Prompt\" })\n .pipe(\n statics((schema) => ({\n equivalence: Schema.toEquivalence(schema),\n fromUserMessage: (input: Pick<Prompt, \"text\" | \"files\" | \"agents\">) =>\n schema.make({\n text: input.text,\n ...(input.files === undefined ? {} : { files: input.files }),\n ...(input.agents === undefined ? {} : { agents: input.agents }),\n }),\n })),\n )\n", | ||
| "export * as Shell from \"./shell.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { ephemeral, inventory } from \"./event.js\"\nimport { ascending } from \"./identifier.js\"\nimport { NonNegativeInt, statics } from \"./schema.js\"\n\nconst IDSchema = Schema.String.check(Schema.isStartsWith(\"sh_\")).pipe(Schema.brand(\"Shell.ID\"))\n\nexport const ID = IDSchema.pipe(\n statics((schema: typeof IDSchema) => {\n const create = () => schema.make(\"sh_\" + ascending())\n return {\n create,\n ascending: (id?: string) => (id === undefined ? create() : schema.make(id)),\n }\n }),\n)\nexport type ID = typeof ID.Type\n\nexport const Status = Schema.Literals([\"running\", \"exited\", \"timeout\", \"killed\"])\nexport type Status = typeof Status.Type\n\nexport const Time = Schema.Struct({\n started: Schema.Finite,\n completed: optional(Schema.Finite),\n})\nexport interface Time extends Schema.Schema.Type<typeof Time> {}\n\n// Opaque caller-supplied tags echoed back on Info and events. The Shell service never interprets\n// these; callers (e.g. ShellTool stores the originating session ID) use them to filter or correlate.\nexport const Metadata = Schema.Record(Schema.String, Schema.Unknown)\nexport type Metadata = typeof Metadata.Type\n\nexport const Info = Schema.Struct({\n id: ID,\n status: Status,\n command: Schema.String,\n cwd: Schema.String,\n shell: Schema.String,\n // Absolute path of the file capturing combined stdout/stderr. Page through it via `output`.\n file: Schema.String,\n pid: optional(NonNegativeInt),\n exit: optional(Schema.Finite),\n // Always present; defaults to an empty object when the creator supplies no metadata.\n metadata: Metadata,\n time: Time,\n}).annotate({ identifier: \"Shell.Info\" })\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\n\nconst Created = ephemeral({ type: \"shell.created\", schema: { info: Info } })\nconst Exited = ephemeral({ type: \"shell.exited\", schema: { id: ID, exit: optional(Schema.Finite), status: Status } })\nconst Deleted = ephemeral({ type: \"shell.deleted\", schema: { id: ID } })\nexport const Event = { Created, Exited, Deleted, Definitions: inventory(Created, Exited, Deleted) }\n\nexport const CreateInput = Schema.Struct({\n command: Schema.String,\n cwd: optional(Schema.String),\n timeout: NonNegativeInt,\n metadata: optional(Metadata),\n})\nexport interface CreateInput extends Schema.Schema.Type<typeof CreateInput> {}\n\nexport const OutputInput = Schema.Struct({\n cursor: optional(NonNegativeInt),\n limit: optional(NonNegativeInt),\n})\nexport interface OutputInput extends Schema.Schema.Type<typeof OutputInput> {}\n\nexport const Output = Schema.Struct({\n output: Schema.String,\n // Absolute cursor after this page. Equals `size` once fully caught up.\n cursor: NonNegativeInt,\n // Total bytes captured so far. A consumer has more to page while `cursor < size`.\n size: NonNegativeInt,\n truncated: Schema.Boolean,\n})\nexport interface Output extends Schema.Schema.Type<typeof Output> {}\n", | ||
| "export * as SessionError from \"./session-error.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\n\nexport interface Error extends Schema.Schema.Type<typeof Error> {}\nexport const Error = Schema.Struct({\n type: Schema.String,\n message: Schema.String,\n status: Schema.Int.check(Schema.isBetween({ minimum: 100, maximum: 599 })).pipe(optional),\n}).annotate({ identifier: \"Session.StructuredError\" })\n", | ||
| "import { Schema } from \"effect\"\nimport { descending } from \"./identifier.js\"\nimport { statics } from \"./schema.js\"\n\nexport const SessionID = Schema.String.check(Schema.isStartsWith(\"ses\")).pipe(\n Schema.brand(\"SessionID\"),\n statics((schema) => {\n const create = () => schema.make(\"ses_\" + descending())\n return {\n create,\n descending: (id?: string) => (id === undefined ? create() : schema.make(id)),\n }\n }),\n)\nexport type SessionID = typeof SessionID.Type\n", | ||
| "export * as Permission from \"./permission.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { ephemeral, inventory } from \"./event.js\"\nimport { ascending } from \"./identifier.js\"\nimport { SessionID } from \"./session-id.js\"\nimport { statics } from \"./schema.js\"\n\nexport const ID = Schema.String.check(Schema.isStartsWith(\"per\")).pipe(\n Schema.brand(\"Permission.ID\"),\n statics((schema) => ({ create: (id?: string) => schema.make(id ?? \"per_\" + ascending()) })),\n)\nexport type ID = typeof ID.Type\n\nexport const Source = Schema.Union([\n Schema.Struct({\n type: Schema.Literal(\"tool\"),\n messageID: Schema.String,\n callID: Schema.String,\n }),\n]).annotate({ identifier: \"Permission.Source\" })\nexport type Source = typeof Source.Type\n\nconst RequestFields = {\n sessionID: SessionID,\n action: Schema.String,\n resources: Schema.Array(Schema.String),\n save: Schema.Array(Schema.String).pipe(optional),\n metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(optional),\n source: Source.pipe(optional),\n}\n\nexport const Request = Schema.Struct({\n id: ID,\n ...RequestFields,\n}).annotate({ identifier: \"Permission.Request\" })\nexport interface Request extends Schema.Schema.Type<typeof Request> {}\n\nexport const Reply = Schema.Literals([\"once\", \"always\", \"reject\"]).annotate({ identifier: \"Permission.Reply\" })\nexport type Reply = typeof Reply.Type\n\nconst Asked = ephemeral({ type: \"permission.asked\", schema: Request.fields })\nconst Replied = ephemeral({\n type: \"permission.replied\",\n schema: {\n sessionID: SessionID,\n requestID: ID,\n reply: Reply,\n },\n})\nexport const Event = { Asked, Replied, Definitions: inventory(Asked, Replied) }\n\nexport const Effect = Schema.Literals([\"allow\", \"deny\", \"ask\"]).annotate({ identifier: \"Permission.Effect\" })\nexport type Effect = typeof Effect.Type\n\nexport interface Rule extends Schema.Schema.Type<typeof Rule> {}\nexport const Rule = Schema.Struct({\n action: Schema.String,\n resource: Schema.String,\n effect: Effect,\n}).annotate({ identifier: \"Permission.Rule\" })\n\nexport const Ruleset = Schema.Array(Rule).annotate({ identifier: \"Permission.Ruleset\" })\nexport type Ruleset = typeof Ruleset.Type\n", | ||
| "export * as Agent from \"./agent.js\"\n\nimport { Schema } from \"effect\"\nimport { ephemeral, inventory } from \"./event.js\"\nimport { optional } from \"./schema.js\"\nimport { Model } from \"./model.js\"\nimport { Permission } from \"./permission.js\"\nimport { Provider } from \"./provider.js\"\nimport { PositiveInt, statics } from \"./schema.js\"\n\nconst Updated = ephemeral({ type: \"agent.updated\", schema: {} })\n\nexport const ID = Schema.String.pipe(Schema.brand(\"Agent.ID\"))\nexport type ID = typeof ID.Type\n\nexport const Name = Schema.String.pipe(Schema.brand(\"Agent.Name\"))\nexport type Name = typeof Name.Type\n\nexport const Color = Schema.String.annotate({ identifier: \"Agent.Color\" })\nexport type Color = typeof Color.Type\n\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\nexport const Info = Schema.Struct({\n id: ID,\n name: Name,\n model: Model.Ref.pipe(optional),\n request: Provider.Request,\n system: Schema.String.pipe(optional),\n description: Schema.String.pipe(optional),\n mode: Schema.Literals([\"subagent\", \"primary\", \"all\"]),\n hidden: Schema.Boolean,\n color: Color.pipe(optional),\n steps: PositiveInt.pipe(optional),\n permissions: Permission.Ruleset,\n})\n .annotate({ identifier: \"Agent.Info\" })\n .pipe(\n statics(() => ({\n empty: (id: ID) =>\n ({\n id,\n name: Name.make(id),\n request: { settings: {}, headers: {}, body: {} },\n mode: \"all\",\n hidden: false,\n permissions: [\n { action: \"*\", resource: \"*\", effect: \"allow\" },\n { action: \"external_directory\", resource: \"*\", effect: \"ask\" },\n ],\n }) satisfies Info,\n })),\n )\n\nexport const Event = {\n Updated,\n Definitions: inventory(Updated),\n}\n", | ||
| "export * as Skill from \"./skill.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { AbsolutePath } from \"./schema.js\"\nimport { ephemeral, inventory } from \"./event.js\"\n\nexport const ID = Schema.String.pipe(Schema.brand(\"Skill.ID\"))\nexport type ID = typeof ID.Type\n\nexport const Name = Schema.String.pipe(Schema.brand(\"Skill.Name\"))\nexport type Name = typeof Name.Type\n\nexport interface DirectorySource extends Schema.Schema.Type<typeof DirectorySource> {}\nexport const DirectorySource = Schema.Struct({\n type: Schema.tag(\"directory\"),\n path: AbsolutePath,\n}).annotate({ identifier: \"Skill.DirectorySource\" })\n\nexport interface UrlSource extends Schema.Schema.Type<typeof UrlSource> {}\nexport const UrlSource = Schema.Struct({\n type: Schema.tag(\"url\"),\n url: Schema.String,\n}).annotate({ identifier: \"Skill.UrlSource\" })\n\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\nexport const Info = Schema.Struct({\n id: ID,\n name: Name,\n description: Schema.String.pipe(optional),\n slash: Schema.Boolean.pipe(optional),\n autoinvoke: Schema.Boolean.pipe(optional),\n location: AbsolutePath,\n content: Schema.String,\n}).annotate({ identifier: \"Skill.Info\" })\n\nconst Updated = ephemeral({ type: \"skill.updated\", schema: {} })\nexport const Event = { Updated, Definitions: inventory(Updated) }\n\nexport interface EmbeddedSource extends Schema.Schema.Type<typeof EmbeddedSource> {}\nexport const EmbeddedSource = Schema.Struct({\n type: Schema.tag(\"embedded\"),\n skill: Schema.suspend(() => Info),\n}).annotate({ identifier: \"Skill.EmbeddedSource\" })\n\nexport type Source = DirectorySource | UrlSource | EmbeddedSource\nexport const Source = Object.assign(\n Schema.Union([DirectorySource, UrlSource, EmbeddedSource]).pipe(\n Schema.toTaggedUnion(\"type\"),\n Schema.annotate({ identifier: \"Skill.Source\" }),\n ),\n {\n equals: (a: Source, b: Source) => {\n if (a.type !== b.type) return false\n if (a.type === \"directory\" && b.type === \"directory\") return a.path === b.path\n if (a.type === \"url\" && b.type === \"url\") return a.url === b.url\n if (a.type === \"embedded\" && b.type === \"embedded\") return a.skill.id === b.skill.id\n return false\n },\n key: (source: Source) =>\n source.type === \"directory\"\n ? `directory:${source.path}`\n : source.type === \"url\"\n ? `url:${source.url}`\n : `embedded:${source.skill.id}`,\n },\n)\n", | ||
| "export * as Snapshot from \"./snapshot.js\"\n\nimport { Schema } from \"effect\"\n\nexport const ID = Schema.String.pipe(Schema.brand(\"Snapshot.ID\"))\nexport type ID = typeof ID.Type\n", | ||
| "export * as TokenUsage from \"./token-usage.js\"\n\nimport { Schema } from \"effect\"\n\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\nexport const Info = Schema.Struct({\n input: Schema.Finite,\n output: Schema.Finite,\n reasoning: Schema.Finite,\n cache: Schema.Struct({\n read: Schema.Finite,\n write: Schema.Finite,\n }),\n}).annotate({ identifier: \"TokenUsage.Info\" })\n", | ||
| "export * as SessionMessage from \"./session-message.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { Content } from \"./tool.js\"\nimport { Model } from \"./model.js\"\nimport { Prompt } from \"./prompt.js\"\nimport { DateTimeUtcFromMillis, PositiveInt, RelativePath, statics } from \"./schema.js\"\nimport { ascending } from \"./identifier.js\"\nimport { Event } from \"./event.js\"\nimport { Shell as ShellSchema } from \"./shell.js\"\nimport { FinishReason } from \"./llm.js\"\nimport { SessionError } from \"./session-error.js\"\nimport { Agent } from \"./agent.js\"\nimport { Skill as SkillSchema } from \"./skill.js\"\nimport { Money } from \"./money.js\"\nimport { Snapshot } from \"./snapshot.js\"\nimport { TokenUsage } from \"./token-usage.js\"\n\nexport const ID = Schema.String.check(Schema.isStartsWith(\"msg_\")).pipe(\n Schema.brand(\"Session.Message.ID\"),\n statics((schema) => ({\n create: () => schema.make(\"msg_\" + ascending()),\n fromEvent: (eventID: Event.ID) => schema.make(eventID.replace(/^evt_/, \"msg_\")),\n })),\n)\nexport type ID = typeof ID.Type\n\nconst Base = {\n id: ID,\n metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(optional),\n time: Schema.Struct({ created: DateTimeUtcFromMillis }),\n}\n\nexport const ProviderState = Schema.Record(Schema.String, Schema.Unknown).annotate({\n identifier: \"Session.Message.ProviderState\",\n})\nexport type ProviderState = typeof ProviderState.Type\n\nexport interface AgentSelected extends Schema.Schema.Type<typeof AgentSelected> {}\nexport const AgentSelected = Schema.Struct({\n ...Base,\n type: Schema.tag(\"agent-switched\"),\n agent: Agent.ID,\n}).annotate({ identifier: \"Session.Message.AgentSelected\" })\n\nexport interface ModelSelected extends Schema.Schema.Type<typeof ModelSelected> {}\nexport const ModelSelected = Schema.Struct({\n ...Base,\n type: Schema.tag(\"model-switched\"),\n model: Model.Ref,\n previous: Model.Ref.pipe(optional),\n}).annotate({ identifier: \"Session.Message.ModelSelected\" })\n\nexport interface User extends Schema.Schema.Type<typeof User> {}\nexport const User = Schema.Struct({\n ...Base,\n text: Prompt.fields.text,\n files: Prompt.fields.files,\n agents: Prompt.fields.agents,\n type: Schema.tag(\"user\"),\n}).annotate({ identifier: \"Session.Message.User\" })\n\nexport interface Synthetic extends Schema.Schema.Type<typeof Synthetic> {}\nexport const Synthetic = Schema.Struct({\n ...Base,\n text: Schema.String,\n description: Schema.String.pipe(optional),\n type: Schema.tag(\"synthetic\"),\n}).annotate({ identifier: \"Session.Message.Synthetic\" })\n\nexport interface System extends Schema.Schema.Type<typeof System> {}\nexport const System = Schema.Struct({\n ...Base,\n type: Schema.tag(\"system\"),\n text: Schema.String,\n}).annotate({ identifier: \"Session.Message.System\" })\n\nexport interface Skill extends Schema.Schema.Type<typeof Skill> {}\nexport const Skill = Schema.Struct({\n ...Base,\n type: Schema.tag(\"skill\"),\n skill: SkillSchema.ID,\n name: SkillSchema.Name,\n text: Schema.String,\n}).annotate({ identifier: \"Session.Message.Skill\" })\n\nexport interface Shell extends Schema.Schema.Type<typeof Shell> {}\nexport const Shell = Schema.Struct({\n ...Base,\n type: Schema.tag(\"shell\"),\n shellID: ShellSchema.ID,\n command: Schema.String,\n status: ShellSchema.Status,\n exit: Schema.Number.pipe(optional),\n output: ShellSchema.Output.pipe(optional),\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n completed: DateTimeUtcFromMillis.pipe(optional),\n }),\n}).annotate({ identifier: \"Session.Message.Shell\" })\n\nexport interface ToolStateStreaming extends Schema.Schema.Type<typeof ToolStateStreaming> {}\nexport const ToolStateStreaming = Schema.Struct({\n status: Schema.tag(\"streaming\"),\n input: Schema.String,\n}).annotate({ identifier: \"Session.Message.ToolState.Streaming\" })\n\nexport interface ToolStateRunning extends Schema.Schema.Type<typeof ToolStateRunning> {}\nexport const ToolStateRunning = Schema.Struct({\n status: Schema.tag(\"running\"),\n input: Schema.Record(Schema.String, Schema.Unknown),\n metadata: Schema.Record(Schema.String, Schema.Json),\n}).annotate({ identifier: \"Session.Message.ToolState.Running\" })\n\nexport interface ToolStateCompleted extends Schema.Schema.Type<typeof ToolStateCompleted> {}\nexport const ToolStateCompleted = Schema.Struct({\n status: Schema.tag(\"completed\"),\n input: Schema.Record(Schema.String, Schema.Unknown),\n content: Schema.NonEmptyArray(Content),\n metadata: Schema.Record(Schema.String, Schema.Json).pipe(optional),\n}).annotate({ identifier: \"Session.Message.ToolState.Completed\" })\n\nexport interface ToolStateError extends Schema.Schema.Type<typeof ToolStateError> {}\nexport const ToolStateError = Schema.Struct({\n status: Schema.tag(\"error\"),\n input: Schema.Record(Schema.String, Schema.Unknown),\n error: SessionError.Error,\n content: Schema.NonEmptyArray(Content).pipe(optional),\n metadata: Schema.Record(Schema.String, Schema.Json).pipe(optional),\n}).annotate({ identifier: \"Session.Message.ToolState.Error\" })\n\nexport const ToolState = Schema.Union([ToolStateStreaming, ToolStateRunning, ToolStateCompleted, ToolStateError]).pipe(\n Schema.toTaggedUnion(\"status\"),\n)\nexport type ToolState = ToolStateStreaming | ToolStateRunning | ToolStateCompleted | ToolStateError\n\nexport interface AssistantTool extends Schema.Schema.Type<typeof AssistantTool> {}\nexport const AssistantTool = Schema.Struct({\n type: Schema.tag(\"tool\"),\n id: Schema.String,\n name: Schema.String,\n executed: Schema.Boolean.pipe(optional),\n providerState: ProviderState.pipe(optional),\n providerResultState: ProviderState.pipe(optional),\n state: ToolState,\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n ran: DateTimeUtcFromMillis.pipe(optional),\n completed: DateTimeUtcFromMillis.pipe(optional),\n }),\n}).annotate({ identifier: \"Session.Message.Assistant.Tool\" })\n\nexport interface AssistantText extends Schema.Schema.Type<typeof AssistantText> {}\nexport const AssistantText = Schema.Struct({\n type: Schema.tag(\"text\"),\n text: Schema.String,\n state: ProviderState.pipe(optional),\n}).annotate({ identifier: \"Session.Message.Assistant.Text\" })\n\nexport interface AssistantReasoning extends Schema.Schema.Type<typeof AssistantReasoning> {}\nexport const AssistantReasoning = Schema.Struct({\n type: Schema.tag(\"reasoning\"),\n text: Schema.String,\n state: ProviderState.pipe(optional),\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n completed: DateTimeUtcFromMillis.pipe(optional),\n }).pipe(optional),\n}).annotate({ identifier: \"Session.Message.Assistant.Reasoning\" })\n\nexport const AssistantContent = Schema.Union([AssistantText, AssistantReasoning, AssistantTool]).pipe(\n Schema.toTaggedUnion(\"type\"),\n)\nexport type AssistantContent = AssistantText | AssistantReasoning | AssistantTool\n\nexport interface AssistantRetry extends Schema.Schema.Type<typeof AssistantRetry> {}\nexport const AssistantRetry = Schema.Struct({\n attempt: PositiveInt,\n at: DateTimeUtcFromMillis,\n error: SessionError.Error,\n}).annotate({ identifier: \"Session.Message.Assistant.Retry\" })\n\nexport interface Assistant extends Schema.Schema.Type<typeof Assistant> {}\nexport const Assistant = Schema.Struct({\n ...Base,\n type: Schema.tag(\"assistant\"),\n agent: Agent.ID,\n model: Model.Ref,\n content: AssistantContent.pipe(Schema.Array),\n snapshot: Schema.Struct({\n start: Snapshot.ID.pipe(optional),\n end: Snapshot.ID.pipe(optional),\n files: Schema.Array(RelativePath).pipe(optional),\n }).pipe(optional),\n finish: FinishReason.pipe(optional),\n cost: Money.USD.pipe(optional),\n tokens: TokenUsage.Info.pipe(optional),\n error: SessionError.Error.pipe(optional),\n retry: AssistantRetry.pipe(optional),\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n completed: DateTimeUtcFromMillis.pipe(optional),\n }),\n}).annotate({ identifier: \"Session.Message.Assistant\" })\n\nconst CompactionBase = { type: Schema.tag(\"compaction\"), ...Base }\n\nexport interface CompactionRunning extends Schema.Schema.Type<typeof CompactionRunning> {}\nexport const CompactionRunning = Schema.Struct({\n ...CompactionBase,\n status: Schema.tag(\"running\"),\n reason: Schema.Literals([\"auto\", \"manual\"]),\n summary: Schema.String,\n recent: Schema.String,\n}).annotate({ identifier: \"Session.Message.Compaction.Running\" })\n\nexport interface CompactionCompleted extends Schema.Schema.Type<typeof CompactionCompleted> {}\nexport const CompactionCompleted = Schema.Struct({\n ...CompactionBase,\n status: Schema.tag(\"completed\"),\n reason: Schema.Literals([\"auto\", \"manual\"]),\n summary: Schema.String,\n recent: Schema.String,\n}).annotate({ identifier: \"Session.Message.Compaction.Completed\" })\n\nexport interface CompactionFailed extends Schema.Schema.Type<typeof CompactionFailed> {}\nexport const CompactionFailed = Schema.Struct({\n ...CompactionBase,\n status: Schema.tag(\"failed\"),\n reason: Schema.Literals([\"auto\", \"manual\"]),\n error: SessionError.Error,\n}).annotate({ identifier: \"Session.Message.Compaction.Failed\" })\n\nexport const Compaction = Schema.Union([CompactionRunning, CompactionCompleted, CompactionFailed]).pipe(\n Schema.toTaggedUnion(\"status\"),\n Schema.annotate({ identifier: \"Session.Message.Compaction\" }),\n)\nexport type Compaction = CompactionRunning | CompactionCompleted | CompactionFailed\n\nexport const Info = Schema.Union([\n AgentSelected,\n ModelSelected,\n User,\n Synthetic,\n System,\n Skill,\n Shell,\n Assistant,\n Compaction,\n]).annotate({ identifier: \"Session.Message.Info\" })\nexport type Info = AgentSelected | ModelSelected | User | Synthetic | System | Skill | Shell | Assistant | Compaction\nexport type Type = Info[\"type\"]\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "3ED6C9BCEB5EC20B64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/theme/system.ts"], | ||
| "sourcesContent": [ | ||
| "import { RGBA, type TerminalColors } from \"@opentui/core\"\nimport { ansiToRgba, tint } from \"./color\"\n\nexport function terminalMode(colors: TerminalColors): \"dark\" | \"light\" | undefined {\n const bg = colors.defaultBackground\n if (!bg) return\n const { r, g, b } = RGBA.fromHex(bg)\n return 0.299 * r + 0.587 * g + 0.114 * b > 0.5 ? \"light\" : \"dark\"\n}\n\nexport function generateSystem(colors: TerminalColors, mode: \"dark\" | \"light\") {\n const bg = RGBA.fromHex(colors.defaultBackground ?? colors.palette[0]!)\n const fg = RGBA.fromHex(colors.defaultForeground ?? colors.palette[7]!)\n const transparent = RGBA.fromValues(bg.r, bg.g, bg.b, 0)\n const isDark = mode === \"dark\"\n\n const col = (index: number) => {\n const value = colors.palette[index]\n if (value) return RGBA.fromHex(value)\n return ansiToRgba(index)\n }\n\n const grays = generateGrayScale(bg, isDark)\n const textMuted = generateMutedTextColor(bg, isDark)\n const ansiColors = {\n red: col(1),\n green: col(2),\n yellow: col(3),\n blue: col(4),\n magenta: col(5),\n cyan: col(6),\n redBright: col(9),\n greenBright: col(10),\n }\n\n const diffAlpha = isDark ? 0.22 : 0.14\n const diffAddedBg = tint(bg, ansiColors.green, diffAlpha)\n const diffRemovedBg = tint(bg, ansiColors.red, diffAlpha)\n const diffContextBg = grays[2]\n const diffAddedLineNumberBg = tint(diffContextBg, ansiColors.green, diffAlpha)\n const diffRemovedLineNumberBg = tint(diffContextBg, ansiColors.red, diffAlpha)\n\n return {\n theme: {\n primary: ansiColors.cyan,\n secondary: ansiColors.magenta,\n accent: ansiColors.cyan,\n error: ansiColors.red,\n warning: ansiColors.yellow,\n success: ansiColors.green,\n info: ansiColors.cyan,\n text: fg,\n textMuted,\n selectedListItemText: bg,\n background: transparent,\n backgroundPanel: grays[2],\n backgroundElement: grays[3],\n backgroundMenu: grays[3],\n borderSubtle: grays[6],\n border: grays[7],\n borderActive: grays[8],\n diffAdded: ansiColors.green,\n diffRemoved: ansiColors.red,\n diffContext: grays[7],\n diffHunkHeader: grays[7],\n diffHighlightAdded: ansiColors.greenBright,\n diffHighlightRemoved: ansiColors.redBright,\n diffAddedBg,\n diffRemovedBg,\n diffContextBg,\n diffLineNumber: textMuted,\n diffAddedLineNumberBg,\n diffRemovedLineNumberBg,\n markdownText: fg,\n markdownHeading: fg,\n markdownLink: ansiColors.blue,\n markdownLinkText: ansiColors.cyan,\n markdownCode: ansiColors.green,\n markdownBlockQuote: ansiColors.yellow,\n markdownEmph: ansiColors.yellow,\n markdownStrong: fg,\n markdownHorizontalRule: grays[7],\n markdownListItem: ansiColors.blue,\n markdownListEnumeration: ansiColors.cyan,\n markdownImage: ansiColors.blue,\n markdownImageText: ansiColors.cyan,\n markdownCodeBlock: fg,\n syntaxComment: textMuted,\n syntaxKeyword: ansiColors.magenta,\n syntaxFunction: ansiColors.blue,\n syntaxVariable: fg,\n syntaxString: ansiColors.green,\n syntaxNumber: ansiColors.yellow,\n syntaxType: ansiColors.cyan,\n syntaxOperator: ansiColors.cyan,\n syntaxPunctuation: fg,\n },\n }\n}\n\nfunction generateGrayScale(bg: RGBA, isDark: boolean): Record<number, RGBA> {\n const grays: Record<number, RGBA> = {}\n const bgR = bg.r * 255\n const bgG = bg.g * 255\n const bgB = bg.b * 255\n const luminance = 0.299 * bgR + 0.587 * bgG + 0.114 * bgB\n\n for (let i = 1; i <= 12; i++) {\n const factor = i / 12\n\n if (isDark && luminance < 10) {\n const gray = Math.floor(factor * 0.4 * 255)\n grays[i] = RGBA.fromInts(gray, gray, gray)\n continue\n }\n\n if (!isDark && luminance > 245) {\n const gray = Math.floor(255 - factor * 0.4 * 255)\n grays[i] = RGBA.fromInts(gray, gray, gray)\n continue\n }\n\n const next = isDark ? luminance + (255 - luminance) * factor * 0.4 : luminance * (1 - factor * 0.4)\n const ratio = next / luminance\n grays[i] = RGBA.fromInts(\n Math.floor(Math.min(Math.max(bgR * ratio, 0), 255)),\n Math.floor(Math.min(Math.max(bgG * ratio, 0), 255)),\n Math.floor(Math.min(Math.max(bgB * ratio, 0), 255)),\n )\n }\n\n return grays\n}\n\nfunction generateMutedTextColor(bg: RGBA, isDark: boolean): RGBA {\n const luminance = 0.299 * bg.r * 255 + 0.587 * bg.g * 255 + 0.114 * bg.b * 255\n if (isDark) {\n const gray = luminance < 10 ? 180 : Math.min(Math.floor(160 + luminance * 0.3), 200)\n return RGBA.fromInts(gray, gray, gray)\n }\n\n const gray = luminance > 245 ? 75 : Math.max(Math.floor(100 - (255 - luminance) * 0.2), 60)\n return RGBA.fromInts(gray, gray, gray)\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "669C0117CA3E478564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/anthropic-compatible.ts", "../ai/src/providers/anthropic.ts"], | ||
| "sourcesContent": [ | ||
| "import type { ProviderPackage } from \"../provider-package\"\nimport { AnthropicMessages } from \"../protocols/anthropic-messages\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderAuthOption } from \"../route/auth-options\"\nimport type { RouteDefaultsInput } from \"../route/client\"\nimport { ProviderID, type ModelID } from \"../schema\"\n\nexport type AnthropicOptionsInput = AnthropicMessages.OptionsInput\nexport type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput\nexport type AnthropicThinkingInput = AnthropicMessages.ThinkingInput\n\nexport const id = ProviderID.make(\"anthropic-compatible\")\n\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly provider?: string\n readonly baseURL: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nexport type Settings = ProviderPackage.Settings &\n (\n | { readonly apiKey?: string; readonly authToken?: never }\n | { readonly apiKey?: never; readonly authToken?: string }\n ) & {\n readonly baseURL: string\n readonly provider?: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nexport const routes = [AnthropicMessages.route]\n\nconst auth = (input: ProviderAuthOption<\"optional\">) => {\n if (\"auth\" in input && input.auth) return input.auth\n return Auth.optional(\"apiKey\" in input ? input.apiKey : undefined, \"apiKey\").pipe(Auth.header(\"x-api-key\"))\n}\n\nexport const configure = (input: Config) => {\n if (!input.baseURL) throw new Error(\"Anthropic-compatible providers require a baseURL\")\n const provider = input.provider ?? \"anthropic-compatible\"\n const { provider: _, baseURL, apiKey: _apiKey, auth: _auth, ...rest } = input\n const route = AnthropicMessages.route.with({\n ...rest,\n provider,\n endpoint: { baseURL },\n auth: auth(input),\n })\n return {\n id: ProviderID.make(provider),\n model: (modelID: string | ModelID) => route.model<AnthropicMessages.ProviderOptionsInput>({ id: modelID }),\n configure,\n }\n}\n\nexport const provider = {\n id,\n configure,\n}\n\nexport const model: ProviderPackage.Definition<Settings, AnthropicMessages.ProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => {\n if (settings.apiKey !== undefined && settings.authToken !== undefined)\n throw new Error(\"Anthropic-compatible apiKey cannot be combined with authToken\")\n return configure({\n ...(settings.authToken === undefined ? { apiKey: settings.apiKey } : { auth: Auth.bearer(settings.authToken) }),\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n provider: settings.provider,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n}\n\nexport * as AnthropicCompatible from \"./anthropic-compatible\"\n", | ||
| "import type { RouteDefaultsInput } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderAuthOption } from \"../route/auth-options\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { ProviderID, type ModelID } from \"../schema\"\nimport { AnthropicMessages } from \"../protocols/anthropic-messages\"\nimport { AnthropicCompatible } from \"./anthropic-compatible\"\n\nexport type AnthropicOptionsInput = AnthropicMessages.OptionsInput\nexport type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput\nexport type AnthropicThinkingInput = AnthropicMessages.ThinkingInput\n\nexport const id = ProviderID.make(\"anthropic\")\n\nexport const routes = [AnthropicMessages.route]\n\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nexport type Settings = ProviderPackage.Settings &\n (\n | { readonly apiKey?: string; readonly authToken?: never }\n | { readonly apiKey?: never; readonly authToken?: string }\n ) & {\n readonly baseURL?: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => {\n if (\"auth\" in options && options.auth) return options.auth\n return Auth.optional(\"apiKey\" in options ? options.apiKey : undefined, \"apiKey\")\n .orElse(Auth.config(\"ANTHROPIC_API_KEY\"))\n .pipe(Auth.header(\"x-api-key\"))\n}\n\nexport const configure = (input: Config = {}) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n const compatible = AnthropicCompatible.configure({\n ...rest,\n auth: auth(input),\n baseURL: baseURL ?? AnthropicMessages.DEFAULT_BASE_URL,\n provider: id,\n })\n return {\n id,\n model: (modelID: string | ModelID) => compatible.model(modelID),\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, AnthropicMessages.ProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => {\n if (settings.apiKey !== undefined && settings.authToken !== undefined)\n throw new Error(\"Anthropic apiKey cannot be combined with authToken\")\n return configure({\n ...(settings.authToken === undefined ? { apiKey: settings.apiKey } : { auth: Auth.bearer(settings.authToken) }),\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n}\n" | ||
| ], | ||
| "mappings": ";qhBAWO,SAAM,OAAK,OAAW,UAAK,2BAAsB,OAmB3C,OAAS,MAAC,OAAkB,UAAK,EAExC,EAAO,CAAC,IAA0C,CACtD,GAAI,SAAU,GAAS,EAAM,KAAM,OAAO,EAAM,KAChD,OAAO,EAAK,SAAS,WAAY,EAAQ,EAAM,OAAS,OAAW,QAAQ,EAAE,KAAK,EAAK,OAAO,WAAW,CAAC,GAG/F,EAAY,CAAC,IAAkB,CAC1C,GAAI,CAAC,EAAM,QAAS,MAAU,MAAM,kDAAkD,EACtF,IAAM,EAAW,EAAM,UAAY,wBAC3B,SAAU,EAAG,UAAS,OAAQ,EAAS,KAAM,KAAU,GAAS,EAClE,EAAQ,EAAkB,MAAM,KAAK,IACtC,EACH,WACA,SAAU,CAAE,SAAQ,EACpB,KAAM,EAAK,CAAK,CAClB,CAAC,EACD,MAAO,CACL,GAAI,EAAW,KAAK,CAAQ,EAC5B,MAAO,CAAC,IAA8B,EAAM,MAA8C,CAAE,GAAI,CAAQ,CAAC,EACzG,WACF,GAGW,EAAW,CACtB,KACA,WACF,EAEa,EAA+F,CAC1G,EACA,IACG,CACH,GAAI,EAAS,SAAW,QAAa,EAAS,YAAc,OAC1D,MAAU,MAAM,+DAA+D,EACjF,OAAO,EAAU,IACX,EAAS,YAAc,OAAY,CAAE,OAAQ,EAAS,MAAO,EAAI,CAAE,KAAM,EAAK,OAAO,EAAS,SAAS,CAAE,EAC7G,QAAS,EAAS,QAClB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,SAAU,EAAS,SACnB,gBAAiB,EAAS,eAC5B,CAAC,EAAE,MAAM,CAAO,GC7DX,IAAM,EAAK,EAAW,KAAK,WAAW,EAEhC,EAAS,CAAC,EAAkB,KAAK,EAiBxC,EAAO,CAAC,IAA4C,CACxD,GAAI,SAAU,GAAW,EAAQ,KAAM,OAAO,EAAQ,KACtD,OAAO,EAAK,SAAS,WAAY,EAAU,EAAQ,OAAS,OAAW,QAAQ,EAC5E,OAAO,EAAK,OAAO,mBAAmB,CAAC,EACvC,KAAK,EAAK,OAAO,WAAW,CAAC,GAGrB,EAAY,CAAC,EAAgB,CAAC,IAAM,CAC/C,IAAQ,OAAQ,EAAG,KAAM,EAAO,aAAY,GAAS,EAC/C,EAAa,EAAoB,UAAU,IAC5C,EACH,KAAM,EAAK,CAAK,EAChB,QAAS,GAAW,EAAkB,iBACtC,SAAU,CACZ,CAAC,EACD,MAAO,CACL,KACA,MAAO,CAAC,IAA8B,EAAW,MAAM,CAAO,EAC9D,WACF,GAGW,EAAW,EAAU,EACrB,EAA+F,CAC1G,EACA,IACG,CACH,GAAI,EAAS,SAAW,QAAa,EAAS,YAAc,OAC1D,MAAU,MAAM,oDAAoD,EACtE,OAAO,EAAU,IACX,EAAS,YAAc,OAAY,CAAE,OAAQ,EAAS,MAAO,EAAI,CAAE,KAAM,EAAK,OAAO,EAAS,SAAS,CAAE,EAC7G,QAAS,EAAS,QAClB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,gBAAiB,EAAS,eAC5B,CAAC,EAAE,MAAM,CAAO", | ||
| "debugId": "F87C0917DB651D1264756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/pair.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode } from \"@opencode-ai/client/promise\"\nimport { renderUnicodeCompact } from \"uqr\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServiceConfig } from \"../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.pair,\n Effect.fn(\"cli.pair\")(function* () {\n const endpoint = yield* Service.ensure(yield* ServiceConfig.options())\n const password = yield* ServiceConfig.password()\n const server = yield* Effect.tryPromise(() =>\n OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) }).server.get(),\n )\n const info = { urls: server.urls, username: \"opencode\", password }\n process.stdout.write(\n [\n \"\",\n ` URLs ${info.urls[0] ?? \"(none)\"}`,\n ...info.urls.slice(1).map((url) => ` ${url}`),\n ` Username ${info.username}`,\n ` Password ${info.password}`,\n \"\",\n \" Scan to pair\",\n \"\",\n renderUnicodeCompact(JSON.stringify(info), { border: 2 })\n .split(EOL)\n .map((line) => \" \" + line)\n .join(EOL),\n \"\",\n ].join(EOL) + EOL,\n )\n\n const hostname = new URL(endpoint.url).hostname\n if (![\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(hostname)) return\n process.stderr.write(\n ` Run \\`opencode service set hostname 0.0.0.0\\` to access the service remotely.${EOL}${EOL}`,\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";66BAAA,mBAAS,gBAST,SAAe,SAAQ,aACrB,OAAS,cAAS,UAClB,OAAO,QAAG,eAAU,OAAE,cAAU,OAAG,MACjC,SAAM,OAAW,WAAO,OAAQ,YAAO,WAAO,OAAc,aAAQ,MAAC,EAC/D,EAAW,MAAO,EAAc,SAAS,EAIzC,EAAO,CAAE,MAHA,MAAO,EAAO,WAAW,IACtC,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAAE,OAAO,IAAI,CAC1F,GAC4B,KAAM,SAAU,WAAY,UAAS,EACjE,QAAQ,OAAO,MACb,CACE,GACA,eAAe,EAAK,KAAK,IAAM,WAC/B,GAAG,EAAK,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAQ,eAAe,GAAK,EACvD,eAAe,EAAK,WACpB,eAAe,EAAK,WACpB,GACA,iBACA,GACA,EAAqB,KAAK,UAAU,CAAI,EAAG,CAAE,OAAQ,CAAE,CAAC,EACrD,MAAM,CAAG,EACT,IAAI,CAAC,IAAS,KAAO,CAAI,EACzB,KAAK,CAAG,EACX,EACF,EAAE,KAAK,CAAG,EAAI,CAChB,EAEA,IAAM,EAAW,IAAI,IAAI,EAAS,GAAG,EAAE,SACvC,GAAI,CAAC,CAAC,YAAa,YAAa,OAAO,EAAE,SAAS,CAAQ,EAAG,OAC7D,QAAQ,OAAO,MACb,kFAAkF,IAAM,GAC1F,EACD,CACH", | ||
| "debugId": "AA783541FA3BB8AB64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/prompt/parse.ts"], | ||
| "sourcesContent": [ | ||
| "export function parseFileLineRange(input: string) {\n const hash = input.lastIndexOf(\"#\")\n if (hash === -1) return { base: input }\n\n const base = input.slice(0, hash)\n const match = input.slice(hash + 1).match(/^(\\d+)(?:-(\\d*))?$/)\n if (!match) return { base }\n\n const startLine = Number(match[1])\n const endLine = match[2] && startLine < Number(match[2]) ? Number(match[2]) : undefined\n return { base, lineRange: { startLine, endLine } }\n}\n\nexport function stripFileLineRange(input: string) {\n return parseFileLineRange(input).base\n}\n\nexport function parseSlashHead(text: string, separator = /[ \\t\\n]/) {\n if (!text.startsWith(\"/\")) return\n\n const end = text.slice(1).search(separator)\n if (end === -1) return { name: text.slice(1), arguments: \"\", end: text.length }\n\n const split = end + 1\n return { name: text.slice(1, split), arguments: text.slice(split + 1), end: split }\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,SAAS,CAAkB,CAAC,EAAe,CAChD,IAAM,EAAO,EAAM,YAAY,GAAG,EAClC,GAAI,IAAS,GAAI,MAAO,CAAE,KAAM,CAAM,EAEtC,IAAM,EAAO,EAAM,MAAM,EAAG,CAAI,EAC1B,EAAQ,EAAM,MAAM,EAAO,CAAC,EAAE,MAAM,oBAAoB,EAC9D,GAAI,CAAC,EAAO,MAAO,CAAE,MAAK,EAE1B,IAAM,EAAY,OAAO,EAAM,EAAE,EAC3B,EAAU,EAAM,IAAM,EAAY,OAAO,EAAM,EAAE,EAAI,OAAO,EAAM,EAAE,EAAI,OAC9E,MAAO,CAAE,OAAM,UAAW,CAAE,YAAW,SAAQ,CAAE,EAG5C,SAAS,CAAkB,CAAC,EAAe,CAChD,OAAO,EAAmB,CAAK,EAAE,KAG5B,SAAS,CAAc,CAAC,EAAc,EAAY,UAAW,CAClE,GAAI,CAAC,EAAK,WAAW,GAAG,EAAG,OAE3B,IAAM,EAAM,EAAK,MAAM,CAAC,EAAE,OAAO,CAAS,EAC1C,GAAI,IAAQ,GAAI,MAAO,CAAE,KAAM,EAAK,MAAM,CAAC,EAAG,UAAW,GAAI,IAAK,EAAK,MAAO,EAE9E,IAAM,EAAQ,EAAM,EACpB,MAAO,CAAE,KAAM,EAAK,MAAM,EAAG,CAAK,EAAG,UAAW,EAAK,MAAM,EAAQ,CAAC,EAAG,IAAK,CAAM", | ||
| "debugId": "3389D8F2E99F8A1364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/list.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { OpenCode, type McpServer } from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.list,\n Effect.fn(\"cli.mcp.list\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const response = yield* Effect.promise(() => client.mcp.list({ location: { directory: process.cwd() } }))\n const servers = response.data.toSorted((a, b) => a.name.localeCompare(b.name))\n if (servers.length === 0) {\n process.stdout.write(\"No MCP servers configured\" + EOL)\n return\n }\n const width = Math.max(...servers.map((server) => server.name.length))\n const lines = servers.map(\n (server) => `${icon(server.status)} ${server.name.padEnd(width)} ${describe(server.status)}`,\n )\n process.stdout.write(lines.join(EOL) + EOL)\n }),\n)\n\nfunction icon(status: McpServer[\"status\"]) {\n switch (status.status) {\n case \"connected\":\n return \"✓\"\n case \"needs_auth\":\n return \"⚠\"\n case \"failed\":\n case \"needs_client_registration\":\n return \"✗\"\n default:\n return \"○\"\n }\n}\n\nfunction describe(status: McpServer[\"status\"]) {\n switch (status.status) {\n case \"needs_auth\":\n return \"needs authentication\"\n case \"needs_client_registration\":\n return `needs client registration: ${status.error}`\n case \"failed\":\n return `failed: ${status.error}`\n default:\n return status.status\n }\n}\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAe,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,UAC/B,OAAO,QAAG,mBAAc,OAAE,cAAU,OAAG,MACrC,SAAM,OAAU,WAAO,OAAc,aAAQ,OAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,GADW,MAAO,EAAO,QAAQ,IAAM,EAAO,IAAI,KAAK,CAAE,SAAU,CAAE,UAAW,QAAQ,IAAI,CAAE,CAAE,CAAC,CAAC,GAC/E,KAAK,SAAS,CAAC,EAAG,IAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,EAC7E,GAAI,EAAQ,SAAW,EAAG,CACxB,QAAQ,OAAO,MAAM,4BAA8B,CAAG,EACtD,OAEF,IAAM,EAAQ,KAAK,IAAI,GAAG,EAAQ,IAAI,CAAC,IAAW,EAAO,KAAK,MAAM,CAAC,EAC/D,EAAQ,EAAQ,IACpB,CAAC,IAAW,GAAG,EAAK,EAAO,MAAM,KAAK,EAAO,KAAK,OAAO,CAAK,MAAM,EAAS,EAAO,MAAM,GAC5F,EACA,QAAQ,OAAO,MAAM,EAAM,KAAK,CAAG,EAAI,CAAG,EAC3C,CACH,EAEA,SAAS,CAAI,CAAC,EAA6B,CACzC,OAAQ,EAAO,YACR,YACH,MAAO,aACJ,aACH,MAAO,aACJ,aACA,4BACH,MAAO,iBAEP,MAAO,UAIb,SAAS,CAAQ,CAAC,EAA6B,CAC7C,OAAQ,EAAO,YACR,aACH,MAAO,2BACJ,4BACH,MAAO,8BAA8B,EAAO,YACzC,SACH,MAAO,WAAW,EAAO,gBAEzB,OAAO,EAAO", | ||
| "debugId": "91AF7D85D72F531B64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/util/persistence.ts", "../tui/src/util/record.ts", "../tui/src/model-preference.ts"], | ||
| "sourcesContent": [ | ||
| "import path from \"path\"\nimport { appendFile, mkdir, readFile, rename, rm, writeFile } from \"fs/promises\"\n\nexport function readText(filePath: string) {\n return readFile(filePath, \"utf8\")\n}\n\nexport async function readJson<T>(filePath: string) {\n return JSON.parse(await readFile(filePath, \"utf8\")) as T\n}\n\nexport async function writeText(filePath: string, content: string) {\n await mkdir(path.dirname(filePath), { recursive: true })\n await writeFile(filePath, content)\n}\n\nexport async function appendText(filePath: string, content: string) {\n await mkdir(path.dirname(filePath), { recursive: true })\n await appendFile(filePath, content)\n}\n\nexport async function writeJsonAtomic(filePath: string, value: unknown) {\n await mkdir(path.dirname(filePath), { recursive: true })\n const temporary = `${filePath}.${process.pid}.${crypto.randomUUID()}.tmp`\n await writeFile(temporary, JSON.stringify(value)).catch(async (error) => {\n await rm(temporary, { force: true }).catch(() => undefined)\n throw error\n })\n await rename(temporary, filePath).catch(async (error) => {\n await rm(temporary, { force: true }).catch(() => undefined)\n throw error\n })\n}\n", | ||
| "export function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value)\n}\n", | ||
| "import { readJson, writeJsonAtomic } from \"./util/persistence\"\nimport { isRecord } from \"./util/record\"\n\nexport type ModelPreferenceModel = {\n providerID: string\n modelID: string\n}\n\nexport type ModelPreference = {\n recent: ModelPreferenceModel[]\n favorite: ModelPreferenceModel[]\n variant: Record<string, string | undefined>\n}\n\nexport type ModelPreferenceDocument = Record<string, unknown> & ModelPreference\n\nfunction models(value: unknown) {\n if (!Array.isArray(value)) return []\n return value.flatMap((item): ModelPreferenceModel[] => {\n if (!isRecord(item)) return []\n if (typeof item.providerID !== \"string\" || item.providerID.length === 0) return []\n if (typeof item.modelID !== \"string\" || item.modelID.length === 0) return []\n return [{ providerID: item.providerID, modelID: item.modelID }]\n })\n}\n\nfunction variants(value: unknown) {\n if (!isRecord(value)) return {}\n return Object.fromEntries(\n Object.entries(value).flatMap(([key, item]) => {\n if (key.length === 0 || typeof item !== \"string\" || item.length === 0) return []\n const variant = normalizeModelVariant(item)\n return variant === undefined ? [] : ([[key, variant]] as const)\n }),\n )\n}\n\nexport function normalizeModelVariant(value: string | undefined) {\n return value === \"default\" ? undefined : value\n}\n\nexport function modelPreferenceKey(model: ModelPreferenceModel) {\n return `${model.providerID}/${model.modelID}`\n}\n\nexport function cycleModelVariant(current: string | undefined, variants: string[]) {\n const named = variants.filter((variant) => variant !== \"default\")\n if (named.length === 0) return undefined\n const value = normalizeModelVariant(current)\n if (value === undefined) return named[0]\n const index = named.indexOf(value)\n if (index === -1 || index === named.length - 1) return undefined\n return named[index + 1]\n}\n\nexport function decodeModelPreference(value: unknown): ModelPreferenceDocument {\n const root = isRecord(value) ? value : {}\n return {\n ...root,\n recent: models(root.recent),\n favorite: models(root.favorite),\n variant: variants(root.variant),\n }\n}\n\nfunction preference(value: ModelPreferenceDocument): ModelPreference {\n return {\n recent: value.recent,\n favorite: value.favorite,\n variant: value.variant,\n }\n}\n\nfunction patch(value: Partial<ModelPreference>) {\n return {\n ...(value.recent === undefined ? {} : { recent: models(value.recent) }),\n ...(value.favorite === undefined ? {} : { favorite: models(value.favorite) }),\n ...(value.variant === undefined ? {} : { variant: variants(value.variant) }),\n }\n}\n\nexport function createModelPreferenceRepository(filePath: string) {\n const state = {\n pending: Promise.resolve(),\n }\n const read = () =>\n readJson<unknown>(filePath)\n .then(decodeModelPreference)\n .catch(() => decodeModelPreference(undefined))\n\n function update(change: (current: ModelPreference) => Partial<ModelPreference>) {\n const result = state.pending.then(async () => {\n const current = await read()\n const next = { ...current, ...patch(change(preference(current))) }\n await writeJsonAtomic(filePath, next)\n })\n state.pending = result.catch(() => undefined)\n return result\n }\n\n function load() {\n return state.pending.then(read).then(preference)\n }\n\n return {\n load,\n patch(value: Partial<ModelPreference>) {\n return update(() => value)\n },\n async resolveVariant(model: ModelPreferenceModel) {\n return (await load()).variant[modelPreferenceKey(model)]\n },\n saveVariant(model: ModelPreferenceModel, value: string | undefined) {\n const key = modelPreferenceKey(model)\n const next = normalizeModelVariant(value)\n return update((current) => {\n const variant = { ...current.variant }\n if (next === undefined) delete variant[key]\n if (next !== undefined) variant[key] = next\n return { variant }\n })\n },\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "125CAC9D130204AA64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/stop.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.stop,\n Effect.fn(\"cli.service.stop\")(function* () {\n yield* Service.stop(yield* ServiceConfig.options())\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAMA,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,UACnC,OAAO,QAAG,uBAAkB,OAAE,cAAU,OAAG,MACzC,WAAO,OAAQ,UAAK,WAAO,OAAc,aAAQ,MAAC,EACnD,CACH", | ||
| "debugId": "DE9701E7A9BDA3EC64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../simulation/src/frontend/actions.ts", "../simulation/src/recording.ts", "../simulation/src/frontend/renderer.ts", "../simulation/src/frontend/semantics.ts", "../simulation/src/frontend/server.ts", "../simulation/src/frontend/simulation.ts"], | ||
| "sourcesContent": [ | ||
| "import { tmpdir } from \"node:os\"\nimport { extname, join, resolve } from \"node:path\"\nimport type { CliRenderer, Renderable } from \"@opentui/core\"\nimport {\n createMockKeys,\n createMockMouse,\n KeyCodes,\n type KeyInput,\n type MockInput,\n type MockMouse,\n} from \"@opentui/core/testing\"\nimport { Config, Effect, FileSystem, Schema } from \"effect\"\nimport { SimulationProtocol } from \"../protocol\"\nimport { SimulationRenderer } from \"./renderer\"\nimport { SimulationSemantics } from \"./semantics\"\n\nexport type Action = SimulationProtocol.Frontend.Action\nexport type Element = SimulationProtocol.Frontend.Element\n\nexport interface Harness {\n readonly renderer: CliRenderer\n readonly mockInput: MockInput\n readonly mockMouse: MockMouse\n readonly resize: (cols: number, rows: number) => void\n readonly renderOnce: () => Promise<void>\n readonly screen: () => string\n}\n\ntype RenderBuffer = {\n readonly width: number\n readonly height: number\n getRealCharBytes(includeAnsi?: boolean): Uint8Array\n}\n\nconst decoder = new TextDecoder()\n\nfunction isKeyCode(key: string): key is keyof typeof KeyCodes {\n return Object.hasOwn(KeyCodes, key)\n}\n\nfunction keyInput(key: string): KeyInput {\n const named = key.toUpperCase()\n return isKeyCode(named) ? named : key\n}\n\nfunction children(renderable: Renderable) {\n return renderable.getChildren().filter((child): child is Renderable => \"num\" in child)\n}\n\nfunction all(renderable: Renderable): Renderable[] {\n return [renderable, ...children(renderable).flatMap(all)]\n}\n\nfunction mouseListeners(renderable: Renderable) {\n const general = Reflect.get(renderable, \"_mouseListener\")\n const specific = Reflect.get(renderable, \"_mouseListeners\")\n return Boolean(general) || (specific && typeof specific === \"object\" && Object.keys(specific).length > 0)\n}\n\nfunction hit(renderer: CliRenderer, renderable: Renderable) {\n if (renderable.width <= 0 || renderable.height <= 0) return false\n const x = Math.floor(renderable.screenX + renderable.width / 2)\n const y = Math.floor(renderable.screenY + renderable.height / 2)\n const target = renderer.hitTest(x, y)\n return all(renderable).some((item) => item.num === target)\n}\n\n/**\n * Builds the harness the simulation server drives.\n *\n * When the renderer is the headless simulation renderer, its TestRendererSetup\n * provides the supported testing APIs. For the visible terminal renderer the\n * harness falls back to `requestRender` + `idle` and reading the private\n * `currentRenderBuffer`.\n */\nexport function createHarness(renderer: CliRenderer): Harness {\n const setup = SimulationRenderer.setupFor(renderer)\n return {\n renderer,\n mockInput: setup?.mockInput ?? createMockKeys(renderer),\n mockMouse: setup?.mockMouse ?? createMockMouse(renderer),\n resize: setup?.resize ?? ((cols, rows) => renderer.resize(cols, rows)),\n renderOnce:\n setup?.renderOnce ??\n (async () => {\n renderer.requestRender()\n await renderer.idle()\n }),\n // captureCharFrame follows the test renderer's output sink. Recording\n // redirects that sink to the timeline, so read the live render buffer\n // instead; it is also the source used by screenshots.\n screen: () => decoder.decode((Reflect.get(renderer, \"currentRenderBuffer\") as RenderBuffer).getRealCharBytes()),\n }\n}\n\nexport function elements(renderer: CliRenderer): Element[] {\n return all(renderer.root)\n .filter((renderable) => renderable.visible && !renderable.isDestroyed)\n .map((renderable) => {\n const clickable = mouseListeners(renderable) && hit(renderer, renderable)\n return {\n id: renderable.id,\n num: renderable.num,\n x: renderable.screenX,\n y: renderable.screenY,\n width: renderable.width,\n height: renderable.height,\n focusable: renderable.focusable,\n focused: renderable.focused,\n clickable,\n editor: renderer.currentFocusedEditor === renderable,\n } satisfies Element\n })\n .filter((element) => element.focusable || element.clickable || element.editor)\n}\n\nexport function state(harness: Harness) {\n return {\n focused: {\n renderable: harness.renderer.currentFocusedRenderable?.num,\n editor: Boolean(harness.renderer.currentFocusedEditor),\n },\n elements: elements(harness.renderer),\n }\n}\n\nexport function snapshot(harness: Harness): SimulationProtocol.Frontend.SemanticSnapshot {\n const ids = new Set<string>()\n const visit = (renderable: Renderable, parent?: string): SimulationProtocol.Frontend.SemanticNode[] => {\n if (!renderable.visible || renderable.isDestroyed) return []\n const definition = SimulationSemantics.read(renderable)?.()\n if (definition && ids.has(renderable.id)) throw new Error(`duplicate semantic UI id: ${renderable.id}`)\n if (definition) ids.add(renderable.id)\n const node = definition\n ? [{ id: renderable.id, ...definition, ...(parent === undefined ? {} : { parent }), element: renderable.num }]\n : []\n const ancestor = definition ? renderable.id : parent\n return [...node, ...children(renderable).flatMap((child) => visit(child, ancestor))]\n }\n return Schema.decodeUnknownSync(SimulationProtocol.Frontend.SemanticSnapshot)({\n format: \"opencode-ui-snapshot-v1\",\n nodes: visit(harness.renderer.root),\n })\n}\n\nexport function matches(harness: Pick<Harness, \"screen\">, text: string) {\n return harness.screen().includes(text)\n}\n\nexport const capture = Effect.fn(\"SimulationActions.capture\")(function* (harness: Harness) {\n yield* Effect.tryPromise(() => harness.renderOnce())\n const buffer = harness.renderer.currentRenderBuffer\n return {\n cols: buffer.width,\n rows: buffer.height,\n cursor: [0, 0] as const,\n lines: buffer.getSpanLines().map((line) => ({\n spans: line.spans.map((span) => ({\n text: span.text,\n fg: span.fg.toInts(),\n bg: span.bg.toInts(),\n attributes: span.attributes,\n width: span.width,\n })),\n })),\n } satisfies SimulationProtocol.Frontend.CapturedFrame\n})\n\nexport const screenshot = Effect.fn(\"SimulationActions.screenshot\")(function* (harness: Harness, name?: string) {\n const filename = name ?? `screenshot-${crypto.randomUUID()}`\n if (!filename || filename.includes(\"/\") || filename.includes(\"\\\\\") || extname(filename))\n return yield* Effect.fail(new Error(\"screenshot name must not contain a path or extension\"))\n yield* Effect.tryPromise(() => harness.renderOnce())\n const { SimulationPng } = yield* Effect.promise(() => import(\"./png\"))\n const image = SimulationPng.screenshot(harness.renderer)\n const directory = resolve(\n yield* Config.string(\"OPENCODE_DRIVE_MEDIA_DIR\").pipe(\n Config.withDefault(join(tmpdir(), \"opencode-drive\", \"output\")),\n ),\n )\n const fs = yield* FileSystem.FileSystem\n yield* fs.makeDirectory(directory, { recursive: true })\n const path = join(directory, `${filename}.png`)\n yield* fs.writeFile(path, image.data)\n return path\n})\n\nexport const execute = Effect.fn(\"SimulationActions.execute\")(function* (harness: Harness, action: Action) {\n switch (action.type) {\n case \"ui.type\":\n yield* Effect.tryPromise(() => harness.mockInput.typeText(action.text))\n break\n case \"ui.press\":\n harness.mockInput.pressKey(keyInput(action.key), action.modifiers)\n break\n case \"ui.enter\":\n harness.mockInput.pressEnter()\n break\n case \"ui.arrow\":\n harness.mockInput.pressArrow(action.direction)\n break\n case \"ui.focus\":\n all(harness.renderer.root)\n .find((item) => item.num === action.target)\n ?.focus()\n break\n case \"ui.click\": {\n const target = all(harness.renderer.root).find((item) => item.num === action.target)\n if (!target || !target.visible || target.isDestroyed)\n return yield* Effect.fail(new Error(`click target is stale or unavailable: ${action.target}`))\n if (action.semantic) {\n const current = snapshot(harness).nodes.find((node) => node.element === action.target)\n if (\n current?.id !== action.semantic.id ||\n current.instance !== action.semantic.instance ||\n current.element !== action.semantic.element\n )\n return yield* Effect.fail(new Error(`semantic click target is stale or unavailable: ${action.semantic.id}`))\n }\n if (\n !Number.isFinite(action.x) ||\n action.x < 0 ||\n action.x >= target.width ||\n !Number.isFinite(action.y) ||\n action.y < 0 ||\n action.y >= target.height\n )\n return yield* Effect.fail(new Error(\"click position must be within the target element\"))\n yield* Effect.tryPromise(() => harness.mockMouse.click(target.screenX + action.x, target.screenY + action.y))\n break\n }\n case \"ui.resize\":\n if (\n !Number.isSafeInteger(action.cols) ||\n action.cols <= 0 ||\n !Number.isSafeInteger(action.rows) ||\n action.rows <= 0\n ) {\n return yield* Effect.fail(new Error(\"resize cols and rows must be positive integers\"))\n }\n harness.resize(action.cols, action.rows)\n SimulationRenderer.recordResize(harness.renderer, action.cols, action.rows)\n break\n }\n yield* Effect.tryPromise(() => harness.renderOnce())\n return state(harness)\n})\n\nexport * as SimulationActions from \"./actions\"\n", | ||
| "import { createWriteStream, type WriteStream } from \"node:fs\"\nimport { mkdir } from \"node:fs/promises\"\nimport { dirname } from \"node:path\"\nimport { Writable } from \"node:stream\"\nimport { finished } from \"node:stream/promises\"\nimport { Schema } from \"effect\"\n\nexport const Header = Schema.Struct({\n type: Schema.Literal(\"header\"),\n version: Schema.Literal(1),\n cols: Schema.Number,\n rows: Schema.Number,\n encoding: Schema.Literal(\"base64\"),\n})\nexport interface Header extends Schema.Schema.Type<typeof Header> {}\n\nexport const Output = Schema.Struct({\n type: Schema.Literal(\"output\"),\n at_ms: Schema.Number,\n data: Schema.String,\n})\nexport interface Output extends Schema.Schema.Type<typeof Output> {}\n\nexport const Resize = Schema.Struct({\n type: Schema.Literal(\"resize\"),\n at_ms: Schema.Number,\n cols: Schema.Number,\n rows: Schema.Number,\n})\nexport interface Resize extends Schema.Schema.Type<typeof Resize> {}\n\nexport const Event = Schema.Union([Header, Output, Resize])\nexport type Event = Schema.Schema.Type<typeof Event>\n\nexport class Timeline extends Writable {\n readonly isTTY = true\n readonly path: string\n readonly columns: number\n readonly rows: number\n private readonly output: WriteStream\n private readonly started = performance.now()\n private readonly timestamps: number[] = []\n private done?: Promise<string>\n\n private constructor(path: string, cols: number, rows: number, output: WriteStream) {\n super()\n this.path = path\n this.columns = cols\n this.rows = rows\n this.output = output\n // finish() reports stream failures; keep Writable from also throwing them process-wide.\n this.on(\"error\", () => {})\n output.on(\"error\", (error) => this.destroy(error))\n }\n\n static async create(path: string, cols: number, rows: number) {\n await mkdir(dirname(path), { recursive: true })\n const output = createWriteStream(path)\n const timeline = new Timeline(path, cols, rows, output)\n await new Promise<void>((resolve, reject) => {\n output.write(\n `${JSON.stringify({ type: \"header\", version: 1, cols, rows, encoding: \"base64\" } satisfies Header)}\\n`,\n (error) => (error ? reject(error) : resolve()),\n )\n })\n return timeline\n }\n\n getColorDepth() {\n return 24\n }\n\n override write(chunk: unknown, callback?: (error?: Error | null) => void): boolean\n override write(chunk: unknown, encoding: BufferEncoding, callback?: (error?: Error | null) => void): boolean\n override write(\n chunk: unknown,\n encoding?: BufferEncoding | ((error?: Error | null) => void),\n callback?: (error?: Error | null) => void,\n ) {\n if (!this.writableEnded) {\n this.timestamps.push(this.elapsed())\n if (typeof encoding === \"function\") return super.write(chunk, encoding)\n if (encoding === undefined) return super.write(chunk, callback)\n return super.write(chunk, encoding, callback)\n }\n const done = typeof encoding === \"function\" ? encoding : callback\n queueMicrotask(() => done?.(null))\n return true\n }\n\n override _write(chunk: Buffer, _encoding: BufferEncoding, callback: (error?: Error | null) => void) {\n this.writeOutput(chunk, this.timestamps.shift() ?? this.elapsed(), callback)\n }\n\n override _final(callback: (error?: Error | null) => void) {\n this.writeOutput(Buffer.alloc(0), this.elapsed(), (error) => {\n if (error) return callback(error)\n this.output.end(callback)\n })\n }\n\n finish() {\n if (this.done) return this.done\n this.end()\n this.done = finished(this).then(() => this.path)\n return this.done\n }\n\n resize(cols: number, rows: number) {\n if (this.writableEnded) return\n const event = { type: \"resize\", at_ms: this.elapsed(), cols, rows } satisfies Resize\n this.output.write(`${JSON.stringify(event)}\\n`)\n }\n\n private elapsed() {\n return Math.max(0, Math.round(performance.now() - this.started))\n }\n\n private writeOutput(data: Buffer, at_ms: number, callback: (error?: Error | null) => void) {\n const event = {\n type: \"output\",\n at_ms,\n data: data.toString(\"base64\"),\n } satisfies Output\n this.output.write(`${JSON.stringify(event)}\\n`, callback)\n }\n}\n\nexport * as SimulationRecording from \"./recording\"\n", | ||
| "import type { CliRenderer, CliRendererConfig } from \"@opentui/core\"\nimport { createTestRenderer, type TestRendererSetup } from \"@opentui/core/testing\"\nimport { Effect } from \"effect\"\nimport { Timeline } from \"../recording\"\n\nconst setups = new WeakMap<CliRenderer, TestRendererSetup>()\nconst recordings = new WeakMap<CliRenderer, Timeline>()\n\n/**\n * Creates a headless renderer with optional recording: a real CliRenderer\n * backed by an in-memory screen buffer. The TestRendererSetup is kept\n * module-side so the harness can use supported testing APIs without app\n * code carrying it around.\n */\nexport interface Viewport {\n readonly cols: number\n readonly rows: number\n}\n\nexport const create = Effect.fn(\"SimulationRenderer.create\")(function* (\n options: CliRendererConfig,\n path?: string,\n viewport?: Viewport,\n) {\n const cols = viewport?.cols ?? 100\n const rows = viewport?.rows ?? 40\n const recording = path\n ? yield* Effect.acquireRelease(\n Effect.tryPromise(() => Timeline.create(path, cols, rows)),\n (recording) =>\n Effect.tryPromise(() => recording.finish()).pipe(\n Effect.catch((error) =>\n Effect.sync(() => process.stderr.write(`Failed to finish UI recording: ${error}\\n`)),\n ),\n ),\n )\n : undefined\n const setup = yield* Effect.acquireRelease(\n Effect.tryPromise(() =>\n createTestRenderer({\n ...options,\n width: cols,\n height: rows,\n kittyKeyboard: Boolean(options.useKittyKeyboard),\n ...(recording\n ? {\n stdout: recording as unknown as NodeJS.WriteStream,\n bufferedOutput: \"stdout\" as const,\n }\n : {}),\n }),\n ),\n (setup) =>\n Effect.sync(() => {\n if (!setup.renderer.isDestroyed) setup.renderer.destroy()\n }),\n )\n setups.set(setup.renderer, setup)\n if (recording) recordings.set(setup.renderer, recording)\n return setup.renderer\n})\n\nexport function recordResize(renderer: CliRenderer, cols: number, rows: number) {\n recordings.get(renderer)?.resize(cols, rows)\n}\n\nexport function setupFor(renderer: CliRenderer): TestRendererSetup | undefined {\n return setups.get(renderer)\n}\n\nexport function finish(renderer: CliRenderer) {\n const recording = recordings.get(renderer)\n if (!recording) return Effect.fail(new Error(\"UI recording is not available\"))\n return Effect.tryPromise(() => recording.finish())\n}\n\nexport * as SimulationRenderer from \"./renderer\"\n", | ||
| "import type { Renderable } from \"@opentui/core\"\nimport type { SimulationProtocol } from \"../protocol\"\n\n// Semantic renderables set an explicit stable OpenTUI id so ui.state and\n// ui.snapshot expose the same identity. Hierarchy and element handles come\n// from the live render tree.\nexport type Definition = Omit<SimulationProtocol.Frontend.SemanticNode, \"id\" | \"element\" | \"parent\">\n\nconst key = Symbol.for(\"opencode.simulation.semantics\")\n\nconst bind = (definition: () => Definition) => (renderable: Renderable) => {\n Object.defineProperty(renderable, key, { value: definition, configurable: true })\n}\n\nexport const read = (renderable: Renderable) => {\n const definition: unknown = Reflect.get(renderable, key)\n return typeof definition === \"function\" ? (definition as () => Definition) : undefined\n}\n\nexport const SimulationSemantics = { bind, read }\n", | ||
| "import { Effect } from \"effect\"\nimport { SimulationControlServer } from \"../control-server\"\nimport { SimulationProtocol } from \"../protocol\"\nimport { SimulationActions, type Harness } from \"./actions\"\nimport { SimulationRenderer } from \"./renderer\"\n\nfunction handle(harness: Harness, request: SimulationProtocol.Frontend.Request, version: string) {\n switch (request.method) {\n case \"simulation.handshake\":\n return SimulationProtocol.Handshake.dispatch(\n {\n role: \"ui\",\n server: { name: \"opencode\", version },\n capabilities: SimulationProtocol.Frontend.Capabilities,\n },\n request.params,\n )\n case \"ui.capture\":\n return SimulationActions.capture(harness)\n case \"ui.screenshot\":\n return SimulationActions.screenshot(harness, request.params?.name)\n case \"ui.state\":\n return Effect.sync(() => SimulationActions.state(harness))\n case \"ui.snapshot\":\n return Effect.sync(() => SimulationActions.snapshot(harness))\n case \"ui.matches\":\n return Effect.sync(() => SimulationActions.matches(harness, request.params.text))\n case \"ui.recording.finish\":\n return SimulationRenderer.finish(harness.renderer)\n case \"ui.type\":\n return SimulationActions.execute(harness, { type: \"ui.type\", text: request.params.text })\n case \"ui.enter\":\n return SimulationActions.execute(harness, { type: \"ui.enter\" })\n case \"ui.press\":\n return SimulationActions.execute(harness, {\n type: \"ui.press\",\n key: request.params.key,\n modifiers: request.params.modifiers,\n })\n case \"ui.arrow\":\n return SimulationActions.execute(harness, { type: \"ui.arrow\", direction: request.params.direction })\n case \"ui.focus\":\n return SimulationActions.execute(harness, { type: \"ui.focus\", target: request.params.target })\n case \"ui.click\":\n return SimulationActions.execute(harness, {\n type: \"ui.click\",\n target: request.params.target,\n x: request.params.x,\n y: request.params.y,\n semantic: request.params.semantic,\n })\n case \"ui.resize\":\n return SimulationActions.execute(harness, {\n type: \"ui.resize\",\n cols: request.params.cols,\n rows: request.params.rows,\n })\n }\n}\n\nexport const start = Effect.fn(\"SimulationServer.start\")(function* (\n harness: Harness,\n endpoint: string,\n version = \"unknown\",\n) {\n return yield* SimulationControlServer.start({\n endpoint,\n label: \"opencode drive ui websocket\",\n data: () => ({ drive: true as const }),\n decode: SimulationProtocol.Frontend.decodeRequestEffect,\n handle: (_socket, request) => handle(harness, request, version),\n })\n})\n\nexport * as SimulationServer from \"./server\"\n", | ||
| "import { createCliRenderer, type CliRendererConfig } from \"@opentui/core\"\nimport { Config, Effect } from \"effect\"\nimport { DriveManifest } from \"../manifest\"\nimport { SimulationActions } from \"./actions\"\nimport { SimulationRenderer } from \"./renderer\"\nimport { SimulationServer } from \"./server\"\n\n/** Drive-mode renderer and control-server acquisition. */\nexport const create = Effect.fn(\"Drive.create\")(function* (options: CliRendererConfig, version: string) {\n const headless = (yield* Config.string(\"OPENCODE_DRIVE_RENDERER\").pipe(Config.withDefault(\"visible\"))) === \"headless\"\n const manifest = yield* DriveManifest.resolve()\n const renderer = headless\n ? yield* SimulationRenderer.create(options, manifest.recording?.timeline, manifest.viewport)\n : yield* Effect.acquireRelease(\n Effect.tryPromise(() => createCliRenderer(options)),\n (renderer) =>\n Effect.sync(() => {\n if (!renderer.isDestroyed) renderer.destroy()\n }),\n )\n if (!headless && manifest.viewport) renderer.resize(manifest.viewport.cols, manifest.viewport.rows)\n const server = yield* SimulationServer.start(SimulationActions.createHarness(renderer), manifest.endpoints.ui, version)\n yield* Effect.sync(() => process.stderr.write(`opencode drive ui websocket: ${server.url}\\n`))\n return renderer\n})\n\nexport * as Drive from \"./simulation\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "7767A02B801E887C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/bedrock-event-stream.ts", "../ai/src/protocols/utils/bedrock-auth.ts", "../ai/src/protocols/utils/bedrock-cache.ts", "../ai/src/protocols/utils/bedrock-media.ts", "../ai/src/protocols/bedrock-converse.ts", "../ai/src/providers/amazon-bedrock.ts"], | ||
| "sourcesContent": [ | ||
| "import { EventStreamCodec } from \"@smithy/eventstream-codec\"\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\"\nimport { Effect, Stream } from \"effect\"\nimport { Framing } from \"../route/framing\"\nimport { ProviderShared } from \"./shared\"\n\n// Bedrock streams responses using the AWS event stream binary protocol — each\n// frame is `[length:4][headers-length:4][prelude-crc:4][headers][payload][crc:4]`.\n// We use `@smithy/eventstream-codec` to validate framing and CRCs, then\n// reconstruct the JSON wrapping by `:event-type` so the chunk schema can match.\nconst eventCodec = new EventStreamCodec(toUtf8, fromUtf8)\nconst utf8 = new TextDecoder()\n\n// Cursor-tracking buffer state. Bytes accumulate in `buffer`; `offset` is the\n// read position. Reading by `subarray` is zero-copy. We only allocate a fresh\n// buffer when a new network chunk arrives and we need to append.\ninterface FrameBufferState {\n readonly buffer: Uint8Array\n readonly offset: number\n}\n\nconst initialFrameBuffer: FrameBufferState = { buffer: new Uint8Array(0), offset: 0 }\n\nconst appendChunk = (state: FrameBufferState, chunk: Uint8Array): FrameBufferState => {\n const remaining = state.buffer.length - state.offset\n // Compact: drop the consumed prefix and append the new chunk in one alloc.\n // This bounds buffer growth to at most one network chunk past the live\n // window, regardless of stream length.\n const next = new Uint8Array(remaining + chunk.length)\n next.set(state.buffer.subarray(state.offset), 0)\n next.set(chunk, remaining)\n return { buffer: next, offset: 0 }\n}\n\nconst consumeFrames = (route: string) => (state: FrameBufferState, chunk: Uint8Array) =>\n Effect.gen(function* () {\n let cursor = appendChunk(state, chunk)\n const out: object[] = []\n while (cursor.buffer.length - cursor.offset >= 4) {\n const view = cursor.buffer.subarray(cursor.offset)\n const totalLength = new DataView(view.buffer, view.byteOffset, view.byteLength).getUint32(0, false)\n if (view.length < totalLength) break\n\n const decoded = yield* Effect.try({\n try: () => eventCodec.decode(view.subarray(0, totalLength)),\n catch: (error) =>\n ProviderShared.eventError(\n route,\n `Failed to decode Bedrock Converse event-stream frame: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ),\n })\n cursor = { buffer: cursor.buffer, offset: cursor.offset + totalLength }\n\n const messageType = decoded.headers[\":message-type\"]?.value\n if (messageType === \"error\") {\n const code = decoded.headers[\":error-code\"]?.value\n const message = decoded.headers[\":error-message\"]?.value\n return yield* ProviderShared.eventError(\n route,\n [code, message].filter((value): value is string => typeof value === \"string\").join(\": \") ||\n \"Bedrock Converse event-stream error\",\n )\n }\n const eventType =\n messageType === \"event\"\n ? decoded.headers[\":event-type\"]?.value\n : messageType === \"exception\"\n ? decoded.headers[\":exception-type\"]?.value\n : undefined\n if (typeof eventType !== \"string\") continue\n const payload = utf8.decode(decoded.body)\n if (!payload) continue\n // The AWS event stream pads short payloads with a `p` field. Drop it\n // before handing the object to the chunk schema. JSON decode goes\n // through the shared Schema-driven codec to satisfy the package rule\n // against ad-hoc `JSON.parse` calls.\n const parsed = (yield* ProviderShared.parseJson(\n route,\n payload,\n \"Failed to parse Bedrock Converse event-stream payload\",\n )) as Record<string, unknown>\n delete parsed.p\n out.push({ [eventType]: parsed })\n }\n return [cursor, out] as const\n })\n\n/**\n * AWS event-stream framing for Bedrock Converse. Each frame is decoded by\n * `@smithy/eventstream-codec` (length + header + payload + CRC) and rewrapped\n * under its `:event-type` header so the chunk schema can match the JSON\n * payload directly.\n */\nexport const framing = (route: string): Framing.Definition<object> => ({\n id: \"aws-event-stream\",\n frame: (bytes) => bytes.pipe(Stream.mapAccumEffect(() => initialFrameBuffer, consumeFrames(route))),\n})\n\nexport * as BedrockEventStream from \"./bedrock-event-stream\"\n", | ||
| "import { AwsV4Signer } from \"aws4fetch\"\nimport { Effect } from \"effect\"\nimport { Headers } from \"effect/unstable/http\"\nimport { Auth, type AuthInput } from \"../../route/auth\"\nimport { ProviderShared } from \"../shared\"\n\n/**\n * AWS credentials for SigV4 signing. Bedrock also supports Bearer API key auth,\n * which provider facades configure as route auth instead of SigV4. STS-vended\n * credentials should be refreshed by the consumer (rebuild the model) before\n * they expire; the route does not refresh.\n */\nexport interface Credentials {\n readonly region: string\n readonly accessKeyId: string\n readonly secretAccessKey: string\n readonly sessionToken?: string\n}\n\nconst signRequest = (input: {\n readonly url: string\n readonly body: string\n readonly headers: Headers.Headers\n readonly credentials: Credentials\n}) =>\n Effect.tryPromise({\n try: async () => {\n const signed = await new AwsV4Signer({\n url: input.url,\n method: \"POST\",\n headers: Object.entries(input.headers),\n body: input.body,\n region: input.credentials.region,\n accessKeyId: input.credentials.accessKeyId,\n secretAccessKey: input.credentials.secretAccessKey,\n sessionToken: input.credentials.sessionToken,\n service: \"bedrock\",\n }).sign()\n return Object.fromEntries(signed.headers.entries())\n },\n catch: (error) =>\n ProviderShared.invalidRequest(\n `Bedrock Converse SigV4 signing failed: ${error instanceof Error ? error.message : String(error)}`,\n ),\n })\n\n/** Sign the exact JSON bytes with SigV4 using credentials configured on the route. */\nexport const sigV4 = (credentials: Credentials | undefined) =>\n Auth.custom((input: AuthInput) => {\n return Effect.gen(function* () {\n if (!credentials) {\n return yield* ProviderShared.invalidRequest(\n \"Bedrock Converse requires either route bearer auth or AWS credentials configured on the route\",\n )\n }\n const headersForSigning = Headers.set(input.headers, \"content-type\", \"application/json\")\n const signed = yield* signRequest({\n url: input.url,\n body: input.body,\n headers: headersForSigning,\n credentials,\n })\n return Headers.setAll(headersForSigning, signed)\n })\n })\n\n/** Bedrock route auth defaults to SigV4 and expects credentials from route configuration. */\nexport const auth = sigV4(undefined)\n\nexport * as BedrockAuth from \"./bedrock-auth\"\n", | ||
| "import { Schema } from \"effect\"\nimport type { CacheHint } from \"../../schema\"\nimport { newBreakpoints, ttlBucket, type Breakpoints } from \"./cache\"\n\n// Bedrock cache markers are positional: emit a `cachePoint` block immediately\n// after the content the caller wants treated as a cacheable prefix. Bedrock\n// accepts optional `ttl: \"5m\" | \"1h\"` on cachePoint, mirroring Anthropic.\nexport const CachePointBlock = Schema.Struct({\n cachePoint: Schema.Struct({\n type: Schema.tag(\"default\"),\n ttl: Schema.optional(Schema.Literals([\"5m\", \"1h\"])),\n }),\n})\nexport type CachePointBlock = Schema.Schema.Type<typeof CachePointBlock>\n\n// Bedrock-Claude enforces the same 4-breakpoint cap as the Anthropic Messages\n// API. Callers pass a shared counter through every `block()` call site so the\n// budget is respected across `system`, `messages`, and `tools`.\nexport const BEDROCK_BREAKPOINT_CAP = 4\n\nexport type { Breakpoints } from \"./cache\"\nexport const breakpoints = () => newBreakpoints(BEDROCK_BREAKPOINT_CAP)\n\nconst DEFAULT_5M: CachePointBlock = { cachePoint: { type: \"default\" } }\nconst DEFAULT_1H: CachePointBlock = { cachePoint: { type: \"default\", ttl: \"1h\" } }\n\nexport const block = (breakpoints: Breakpoints, cache: CacheHint | undefined): CachePointBlock | undefined => {\n if (cache?.type !== \"ephemeral\" && cache?.type !== \"persistent\") return undefined\n if (breakpoints.remaining <= 0) {\n breakpoints.dropped += 1\n return undefined\n }\n breakpoints.remaining -= 1\n return ttlBucket(cache.ttlSeconds) === \"1h\" ? DEFAULT_1H : DEFAULT_5M\n}\n\nexport * as BedrockCache from \"./bedrock-cache\"\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport type { MediaPart } from \"../../schema\"\nimport { ProviderShared } from \"../shared\"\n\n// Bedrock Converse accepts image `format` as the file extension and\n// `source.bytes` as base64 in the JSON wire format.\nexport const ImageFormat = Schema.Literals([\"png\", \"jpeg\", \"gif\", \"webp\"])\nexport type ImageFormat = Schema.Schema.Type<typeof ImageFormat>\n\nexport const ImageBlock = Schema.Struct({\n image: Schema.Struct({\n format: ImageFormat,\n source: Schema.Struct({ bytes: Schema.String }),\n }),\n})\nexport type ImageBlock = Schema.Schema.Type<typeof ImageBlock>\n\n// Bedrock document blocks require a user-facing name so the model can refer to\n// the uploaded document.\nexport const DocumentFormat = Schema.Literals([\"pdf\", \"csv\", \"doc\", \"docx\", \"xls\", \"xlsx\", \"html\", \"txt\", \"md\"])\nexport type DocumentFormat = Schema.Schema.Type<typeof DocumentFormat>\n\nexport const DocumentBlock = Schema.Struct({\n document: Schema.Struct({\n format: DocumentFormat,\n name: Schema.String,\n source: Schema.Struct({ bytes: Schema.String }),\n }),\n})\nexport type DocumentBlock = Schema.Schema.Type<typeof DocumentBlock>\n\nconst IMAGE_FORMATS = {\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpeg\",\n \"image/jpg\": \"jpeg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n} as const satisfies Record<string, ImageFormat>\n\nconst DOCUMENT_FORMATS = {\n \"application/pdf\": \"pdf\",\n \"text/csv\": \"csv\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"text/html\": \"html\",\n \"text/plain\": \"txt\",\n \"text/markdown\": \"md\",\n} as const satisfies Record<string, DocumentFormat>\n\nconst documentBlock = (name: string, format: DocumentFormat, bytes: string): DocumentBlock => ({\n document: {\n format,\n name,\n source: { bytes },\n },\n})\n\n// Route by MIME. Known image/document formats lower into a typed block; anything\n// else fails with a clear error instead of silently degrading to a malformed\n// document block. Image MIME types not in `IMAGE_FORMATS` (e.g. `image/svg+xml`)\n// get an image-specific error so the caller knows it's a format-support issue,\n// not a kind-detection issue.\nexport const lower = Effect.fn(\"BedrockMedia.lower\")(function* (part: MediaPart) {\n const mime = part.mediaType.toLowerCase()\n const imageFormat = IMAGE_FORMATS[mime as keyof typeof IMAGE_FORMATS]\n if (imageFormat) {\n const media = yield* ProviderShared.validateMedia(\n \"Bedrock Converse\",\n part,\n new Set<string>(Object.keys(IMAGE_FORMATS)),\n )\n return { image: { format: imageFormat, source: { bytes: media.base64 } } } satisfies ImageBlock\n }\n if (mime.startsWith(\"image/\"))\n return yield* ProviderShared.invalidRequest(`Bedrock Converse does not support image media type ${part.mediaType}`)\n const documentFormat = DOCUMENT_FORMATS[mime as keyof typeof DOCUMENT_FORMATS]\n if (documentFormat) {\n if (!part.filename)\n return yield* ProviderShared.invalidRequest(\"Bedrock Converse document media requires a filename\")\n const media = yield* ProviderShared.validateMedia(\n \"Bedrock Converse\",\n part,\n new Set<string>(Object.keys(DOCUMENT_FORMATS)),\n )\n return documentBlock(part.filename, documentFormat, media.base64)\n }\n return yield* ProviderShared.invalidRequest(`Bedrock Converse does not support media type ${part.mediaType}`)\n})\n\nexport * as BedrockMedia from \"./bedrock-media\"\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport { Route } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n AIError,\n LLMEvent,\n Usage,\n type CacheHint,\n type FinishReason,\n type FinishReasonDetails,\n type JsonSchema,\n type LLMRequest,\n type LanguageModelToolSchemaCompatibility,\n type ProviderMetadata,\n type ReasoningPart,\n type ToolCallPart,\n type ToolDefinition,\n type ToolResultPart,\n} from \"../schema\"\nimport { BedrockEventStream } from \"./bedrock-event-stream\"\nimport { classifyProviderFailure } from \"../provider-error\"\nimport { JsonObject, optionalArray, ProviderShared } from \"./shared\"\nimport { BedrockAuth } from \"./utils/bedrock-auth\"\nimport { BedrockCache } from \"./utils/bedrock-cache\"\nimport { BedrockMedia } from \"./utils/bedrock-media\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\nimport { ToolStream } from \"./utils/tool-stream\"\n\nconst ADAPTER = \"bedrock-converse\"\n\nexport type { Credentials as BedrockCredentials } from \"./utils/bedrock-auth\"\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\nconst BedrockTextBlock = Schema.Struct({\n text: Schema.String,\n})\ntype BedrockTextBlock = Schema.Schema.Type<typeof BedrockTextBlock>\n\nconst BedrockToolUseBlock = Schema.Struct({\n toolUse: Schema.Struct({\n toolUseId: Schema.String,\n name: Schema.String,\n input: Schema.Unknown,\n }),\n})\ntype BedrockToolUseBlock = Schema.Schema.Type<typeof BedrockToolUseBlock>\n\nconst BedrockToolResultContentItem = Schema.Union([\n Schema.Struct({ text: Schema.String }),\n Schema.Struct({ json: Schema.Unknown }),\n BedrockMedia.ImageBlock,\n BedrockMedia.DocumentBlock,\n])\n\nconst BedrockToolResultBlock = Schema.Struct({\n toolResult: Schema.Struct({\n toolUseId: Schema.String,\n content: Schema.Array(BedrockToolResultContentItem),\n status: Schema.optional(Schema.Literals([\"success\", \"error\"])),\n }),\n})\ntype BedrockToolResultBlock = Schema.Schema.Type<typeof BedrockToolResultBlock>\n\nconst BedrockReasoningBlock = Schema.Struct({\n reasoningContent: Schema.Union([\n Schema.Struct({\n reasoningText: Schema.Struct({\n text: Schema.String,\n signature: Schema.optional(Schema.String),\n }),\n }),\n Schema.Struct({ redactedContent: Schema.String }),\n ]),\n})\n\nconst BedrockUserBlock = Schema.Union([\n BedrockTextBlock,\n BedrockMedia.ImageBlock,\n BedrockMedia.DocumentBlock,\n BedrockToolResultBlock,\n BedrockCache.CachePointBlock,\n])\ntype BedrockUserBlock = Schema.Schema.Type<typeof BedrockUserBlock>\n\nconst BedrockAssistantBlock = Schema.Union([\n BedrockTextBlock,\n BedrockReasoningBlock,\n BedrockToolUseBlock,\n BedrockCache.CachePointBlock,\n])\ntype BedrockAssistantBlock = Schema.Schema.Type<typeof BedrockAssistantBlock>\n\nconst BedrockMessage = Schema.Union([\n Schema.Struct({ role: Schema.Literal(\"user\"), content: Schema.Array(BedrockUserBlock) }),\n Schema.Struct({ role: Schema.Literal(\"assistant\"), content: Schema.Array(BedrockAssistantBlock) }),\n]).pipe(Schema.toTaggedUnion(\"role\"))\ntype BedrockMessage = Schema.Schema.Type<typeof BedrockMessage>\n\nconst BedrockSystemBlock = Schema.Union([BedrockTextBlock, BedrockCache.CachePointBlock])\ntype BedrockSystemBlock = Schema.Schema.Type<typeof BedrockSystemBlock>\n\nconst BedrockToolSpec = Schema.Struct({\n toolSpec: Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n inputSchema: Schema.Struct({\n json: JsonObject,\n }),\n }),\n})\ntype BedrockToolSpec = Schema.Schema.Type<typeof BedrockToolSpec>\n\nconst BedrockTool = Schema.Union([BedrockToolSpec, BedrockCache.CachePointBlock])\ntype BedrockTool = Schema.Schema.Type<typeof BedrockTool>\n\nconst BedrockToolChoice = Schema.Union([\n Schema.Struct({ auto: Schema.Struct({}) }),\n Schema.Struct({ any: Schema.Struct({}) }),\n Schema.Struct({ tool: Schema.Struct({ name: Schema.String }) }),\n])\n\nconst BedrockBodyFields = {\n modelId: Schema.String,\n messages: Schema.Array(BedrockMessage),\n system: optionalArray(BedrockSystemBlock),\n inferenceConfig: Schema.optional(\n Schema.Struct({\n maxTokens: Schema.optional(Schema.Number),\n temperature: Schema.optional(Schema.Number),\n topP: Schema.optional(Schema.Number),\n stopSequences: optionalArray(Schema.String),\n }),\n ),\n toolConfig: Schema.optional(\n Schema.Struct({\n tools: Schema.Array(BedrockTool),\n toolChoice: Schema.optional(BedrockToolChoice),\n }),\n ),\n additionalModelRequestFields: Schema.optional(JsonObject),\n}\nconst BedrockConverseBody = Schema.Struct(BedrockBodyFields)\nexport type BedrockConverseBody = Schema.Schema.Type<typeof BedrockConverseBody>\n\nconst BedrockUsageSchema = Schema.Struct({\n inputTokens: Schema.optional(Schema.Number),\n outputTokens: Schema.optional(Schema.Number),\n totalTokens: Schema.optional(Schema.Number),\n cacheReadInputTokens: Schema.optional(Schema.Number),\n cacheWriteInputTokens: Schema.optional(Schema.Number),\n})\ntype BedrockUsageSchema = Schema.Schema.Type<typeof BedrockUsageSchema>\n\nconst BedrockStreamException = Schema.Struct({\n message: Schema.optional(Schema.String),\n originalMessage: Schema.optional(Schema.String),\n originalStatusCode: Schema.optional(Schema.Number),\n})\n\n// Streaming event shape — the AWS event stream wraps each JSON payload by its\n// `:event-type` header (e.g. `messageStart`, `contentBlockDelta`). We\n// reconstruct that wrapping in `decodeFrames` below so the event schema can\n// stay a plain discriminated record.\nconst BedrockEvent = Schema.Struct({\n messageStart: Schema.optional(Schema.Struct({ role: Schema.String })),\n contentBlockStart: Schema.optional(\n Schema.Struct({\n contentBlockIndex: Schema.Number,\n start: Schema.optional(\n Schema.Struct({\n toolUse: Schema.optional(Schema.Struct({ toolUseId: Schema.String, name: Schema.String })),\n }),\n ),\n }),\n ),\n contentBlockDelta: Schema.optional(\n Schema.Struct({\n contentBlockIndex: Schema.Number,\n delta: Schema.optional(\n Schema.Struct({\n text: Schema.optional(Schema.String),\n toolUse: Schema.optional(Schema.Struct({ input: Schema.String })),\n reasoningContent: Schema.optional(\n Schema.Struct({\n text: Schema.optional(Schema.String),\n signature: Schema.optional(Schema.String),\n // Blob fields in Bedrock's JSON event stream are base64 strings.\n redactedContent: Schema.optional(Schema.String),\n // Vercel's Bedrock provider exposes the same delta under\n // Anthropic's shorter `data` spelling.\n data: Schema.optional(Schema.String),\n }),\n ),\n }),\n ),\n }),\n ),\n contentBlockStop: Schema.optional(Schema.Struct({ contentBlockIndex: Schema.Number })),\n messageStop: Schema.optional(\n Schema.Struct({\n stopReason: Schema.String,\n additionalModelResponseFields: Schema.optional(Schema.Unknown),\n }),\n ),\n metadata: Schema.optional(\n Schema.Struct({\n usage: Schema.optional(BedrockUsageSchema),\n metrics: Schema.optional(Schema.Unknown),\n }),\n ),\n internalServerException: Schema.optional(BedrockStreamException),\n modelStreamErrorException: Schema.optional(BedrockStreamException),\n validationException: Schema.optional(BedrockStreamException),\n throttlingException: Schema.optional(BedrockStreamException),\n serviceUnavailableException: Schema.optional(BedrockStreamException),\n})\ntype BedrockEvent = Schema.Schema.Type<typeof BedrockEvent>\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\nconst lowerToolSpec = (tool: ToolDefinition, inputSchema: JsonSchema): BedrockToolSpec => ({\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: { json: inputSchema },\n },\n})\n\nconst lowerTools = (\n compatibility: LanguageModelToolSchemaCompatibility | undefined,\n breakpoints: BedrockCache.Breakpoints,\n tools: ReadonlyArray<ToolDefinition>,\n): BedrockTool[] => {\n const result: BedrockTool[] = []\n for (const tool of tools) {\n result.push(lowerToolSpec(tool, ToolSchemaProjection.modelCompatibility(tool.inputSchema, compatibility)))\n const cachePoint = BedrockCache.block(breakpoints, tool.cache)\n if (cachePoint) result.push(cachePoint)\n }\n return result\n}\n\nconst textWithCache = (\n breakpoints: BedrockCache.Breakpoints,\n text: string,\n cache: CacheHint | undefined,\n): Array<BedrockTextBlock | BedrockCache.CachePointBlock> => {\n const cachePoint = BedrockCache.block(breakpoints, cache)\n return cachePoint ? [{ text }, cachePoint] : [{ text }]\n}\n\nconst lowerToolChoice = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"Bedrock Converse\", toolChoice, {\n auto: () => ({ auto: {} }) as const,\n none: () => undefined,\n required: () => ({ any: {} }) as const,\n tool: (name) => ({ tool: { name } }) as const,\n })\n\nconst bedrockMetadata = (metadata: Record<string, unknown>): ProviderMetadata => ({ bedrock: metadata })\n\nconst reasoningSignature = (part: ReasoningPart) => {\n const bedrock = part.providerMetadata?.bedrock\n return (\n part.encrypted ??\n (ProviderShared.isRecord(bedrock) && typeof bedrock.signature === \"string\" ? bedrock.signature : undefined)\n )\n}\n\nconst reasoningRedactedData = (part: ReasoningPart) => {\n const bedrock = part.providerMetadata?.bedrock\n return ProviderShared.isRecord(bedrock) && typeof bedrock.redactedData === \"string\" ? bedrock.redactedData : undefined\n}\n\nconst lowerToolCall = (part: ToolCallPart): BedrockToolUseBlock => ({\n toolUse: {\n toolUseId: part.id,\n name: part.name,\n input: part.input,\n },\n})\n\nconst lowerToolResultContent = Effect.fn(\"BedrockConverse.lowerToolResultContent\")(function* (part: ToolResultPart) {\n if (part.result.type === \"text\" || part.result.type === \"error\")\n return [{ text: ProviderShared.toolResultText(part) }]\n if (part.result.type === \"json\") return [{ json: part.result.value }]\n\n const content: Array<Schema.Schema.Type<typeof BedrockToolResultContentItem>> = []\n for (const item of part.result.value) {\n if (item.type === \"text\") {\n content.push({ text: item.text })\n continue\n }\n const media = yield* BedrockMedia.lower({\n type: \"media\",\n mediaType: item.mime,\n data: item.uri,\n filename: item.name,\n })\n content.push(media)\n }\n return content\n})\n\nconst lowerToolResult = Effect.fn(\"BedrockConverse.lowerToolResult\")(function* (part: ToolResultPart) {\n return {\n toolResult: {\n toolUseId: part.id,\n content: yield* lowerToolResultContent(part),\n status: part.result.type === \"error\" ? \"error\" : \"success\",\n },\n } satisfies BedrockToolResultBlock\n})\n\nconst lowerMessages = Effect.fn(\"BedrockConverse.lowerMessages\")(function* (\n request: LLMRequest,\n breakpoints: BedrockCache.Breakpoints,\n) {\n const messages: BedrockMessage[] = []\n\n for (const message of request.messages) {\n if (message.role === \"system\") {\n const part = yield* ProviderShared.wrappedSystemUpdate(\"Bedrock Converse\", message)\n const content = textWithCache(breakpoints, part.text, part.cache)\n const previous = messages.at(-1)\n if (previous?.role === \"user\")\n messages[messages.length - 1] = { role: \"user\", content: [...previous.content, ...content] }\n else messages.push({ role: \"user\", content })\n continue\n }\n\n if (message.role === \"user\") {\n const content: BedrockUserBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"media\"]))\n return yield* ProviderShared.unsupportedContent(\"Bedrock Converse\", \"user\", [\"text\", \"media\"])\n if (part.type === \"text\") {\n content.push(...textWithCache(breakpoints, part.text, part.cache))\n continue\n }\n if (part.type === \"media\") {\n content.push(yield* BedrockMedia.lower(part))\n continue\n }\n }\n messages.push({ role: \"user\", content })\n continue\n }\n\n if (message.role === \"assistant\") {\n const content: BedrockAssistantBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"reasoning\", \"tool-call\"]))\n return yield* ProviderShared.unsupportedContent(\"Bedrock Converse\", \"assistant\", [\n \"text\",\n \"reasoning\",\n \"tool-call\",\n ])\n if (part.type === \"text\") {\n content.push(...textWithCache(breakpoints, part.text, part.cache))\n continue\n }\n if (part.type === \"reasoning\") {\n const signature = reasoningSignature(part)\n const redactedData = reasoningRedactedData(part)\n if (signature === undefined && redactedData !== undefined) {\n content.push({ reasoningContent: { redactedContent: redactedData } })\n continue\n }\n content.push({ reasoningContent: { reasoningText: { text: part.text, signature } } })\n continue\n }\n if (part.type === \"tool-call\") {\n content.push(lowerToolCall(part))\n continue\n }\n }\n messages.push({ role: \"assistant\", content })\n continue\n }\n\n const content: BedrockUserBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"Bedrock Converse\", \"tool\", [\"tool-result\"])\n content.push(yield* lowerToolResult(part))\n const cachePoint = BedrockCache.block(breakpoints, part.cache)\n if (cachePoint) content.push(cachePoint)\n }\n messages.push({ role: \"user\", content })\n }\n\n return messages\n})\n\n// System prompts share the cache-point convention: emit the text block, then\n// optionally a positional `cachePoint` marker.\nconst lowerSystem = (\n breakpoints: BedrockCache.Breakpoints,\n system: ReadonlyArray<LLMRequest[\"system\"][number]>,\n): BedrockSystemBlock[] => system.flatMap((part) => textWithCache(breakpoints, part.text, part.cache))\n\nconst fromRequest = Effect.fn(\"BedrockConverse.fromRequest\")(function* (request: LLMRequest) {\n const toolChoice = request.toolChoice ? yield* lowerToolChoice(request.toolChoice) : undefined\n const generation = request.generation\n // Bedrock-Claude shares Anthropic's 4-breakpoint cap. Spend the budget in\n // tools → system → messages order to favour the highest-impact prefixes.\n const breakpoints = BedrockCache.breakpoints()\n const toolConfig =\n request.tools.length > 0\n ? {\n tools: lowerTools(request.model.compatibility?.toolSchema, breakpoints, request.tools),\n // Converse has no native \"none\". Keep definitions stable for prompt\n // caching and omit only the unsupported choice.\n toolChoice,\n }\n : undefined\n const system = request.system.length === 0 ? undefined : lowerSystem(breakpoints, request.system)\n const messages = yield* lowerMessages(request, breakpoints)\n if (breakpoints.dropped > 0) {\n yield* Effect.logWarning(\n `Bedrock Converse: dropped ${breakpoints.dropped} cache breakpoint(s); the API allows at most ${BedrockCache.BEDROCK_BREAKPOINT_CAP} per request.`,\n )\n }\n return {\n modelId: request.model.id,\n messages,\n system,\n inferenceConfig:\n generation?.maxTokens === undefined &&\n generation?.temperature === undefined &&\n generation?.topP === undefined &&\n (generation?.stop === undefined || generation.stop.length === 0)\n ? undefined\n : {\n maxTokens: generation?.maxTokens,\n temperature: generation?.temperature,\n topP: generation?.topP,\n stopSequences: generation?.stop,\n },\n toolConfig,\n // Converse's base inferenceConfig has no topK; Anthropic/Nova accept it\n // as a model-specific field, so it goes through additionalModelRequestFields.\n additionalModelRequestFields: generation?.topK === undefined ? undefined : { top_k: generation.topK },\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\nconst mapFinishReason = (reason: string): FinishReason => {\n if (reason === \"end_turn\" || reason === \"stop_sequence\") return \"stop\"\n if (reason === \"max_tokens\" || reason === \"model_context_window_exceeded\") return \"length\"\n if (reason === \"tool_use\") return \"tool-calls\"\n if (reason === \"content_filtered\" || reason === \"guardrail_intervened\") return \"content-filter\"\n if (reason === \"malformed_model_output\" || reason === \"malformed_tool_use\") return \"error\"\n return \"unknown\"\n}\n\n// AWS reports inputTokens separately from cache reads and writes.\n// Bedrock does not break reasoning out of outputTokens for current models.\nconst mapUsage = (usage: BedrockUsageSchema | undefined): Usage | undefined => {\n if (!usage) return undefined\n const inputTokens = ProviderShared.sumTokens(\n usage.inputTokens,\n usage.cacheReadInputTokens,\n usage.cacheWriteInputTokens,\n )\n return new Usage({\n inputTokens,\n outputTokens: usage.outputTokens,\n nonCachedInputTokens: usage.inputTokens,\n cacheReadInputTokens: usage.cacheReadInputTokens,\n cacheWriteInputTokens: usage.cacheWriteInputTokens,\n totalTokens: ProviderShared.totalTokens(inputTokens, usage.outputTokens, usage.totalTokens),\n providerMetadata: { bedrock: usage },\n })\n}\n\ninterface ParserState {\n readonly tools: ToolStream.State<number>\n // Bedrock splits the finish into `messageStop` (carries `stopReason`) and\n // `metadata` (carries usage). Hold the terminal event in state so `onHalt`\n // can emit exactly one finish after both chunks have had a chance to arrive.\n readonly pendingFinish: { readonly reason: FinishReasonDetails; readonly usage?: Usage } | undefined\n readonly hasToolCalls: boolean\n readonly lifecycle: Lifecycle.State\n readonly reasoningSignatures: Readonly<Record<number, string>>\n}\n\nconst step = (state: ParserState, event: BedrockEvent) =>\n Effect.gen(function* () {\n if (event.contentBlockStart?.start?.toolUse) {\n const index = event.contentBlockStart.contentBlockIndex\n const events: LLMEvent[] = []\n const lifecycle = Lifecycle.stepStart(state.lifecycle, events)\n return [\n {\n ...state,\n lifecycle,\n tools: ToolStream.start(state.tools, index, {\n id: event.contentBlockStart.start.toolUse.toolUseId,\n name: event.contentBlockStart.start.toolUse.name,\n }),\n },\n [\n ...events,\n LLMEvent.toolInputStart({\n id: event.contentBlockStart.start.toolUse.toolUseId,\n name: event.contentBlockStart.start.toolUse.name,\n }),\n ],\n ] as const\n }\n\n if (event.contentBlockDelta?.delta?.text) {\n const events: LLMEvent[] = []\n return [\n {\n ...state,\n lifecycle: Lifecycle.textDelta(\n state.lifecycle,\n events,\n `text-${event.contentBlockDelta.contentBlockIndex}`,\n event.contentBlockDelta.delta.text,\n ),\n },\n events,\n ] as const\n }\n\n if (event.contentBlockDelta?.delta?.reasoningContent) {\n const index = event.contentBlockDelta.contentBlockIndex\n const reasoning = event.contentBlockDelta.delta.reasoningContent\n const events: LLMEvent[] = []\n const redactedData = reasoning.redactedContent ?? reasoning.data\n const providerMetadata = reasoning.signature\n ? bedrockMetadata({ signature: reasoning.signature })\n : redactedData !== undefined\n ? bedrockMetadata({ redactedData })\n : undefined\n const lifecycle =\n reasoning.text !== undefined || providerMetadata !== undefined\n ? Lifecycle.reasoningDelta(\n state.lifecycle,\n events,\n `reasoning-${index}`,\n reasoning.text ?? \"\",\n providerMetadata,\n )\n : state.lifecycle\n return [\n {\n ...state,\n lifecycle,\n reasoningSignatures: reasoning.signature\n ? { ...state.reasoningSignatures, [index]: reasoning.signature }\n : state.reasoningSignatures,\n },\n events,\n ] as const\n }\n\n if (event.contentBlockDelta?.delta?.toolUse) {\n const index = event.contentBlockDelta.contentBlockIndex\n const result = ToolStream.appendExisting(\n ADAPTER,\n state.tools,\n index,\n event.contentBlockDelta.delta.toolUse.input,\n \"Bedrock Converse tool delta is missing its tool call\",\n )\n if (ToolStream.isError(result)) return yield* result\n const events: LLMEvent[] = []\n const lifecycle = result.events.length ? Lifecycle.stepStart(state.lifecycle, events) : state.lifecycle\n events.push(...result.events)\n return [{ ...state, lifecycle, tools: result.tools }, events] as const\n }\n\n if (event.contentBlockStop) {\n const index = event.contentBlockStop.contentBlockIndex\n const result = yield* ToolStream.finish(ADAPTER, state.tools, index)\n const events: LLMEvent[] = []\n const resultEvents = result.events ?? []\n const lifecycle = resultEvents.length\n ? Lifecycle.stepStart(state.lifecycle, events)\n : Lifecycle.reasoningEnd(\n Lifecycle.textEnd(state.lifecycle, events, `text-${index}`),\n events,\n `reasoning-${index}`,\n state.reasoningSignatures[index]\n ? bedrockMetadata({ signature: state.reasoningSignatures[index] })\n : undefined,\n )\n events.push(...resultEvents)\n return [\n {\n ...state,\n hasToolCalls:\n resultEvents.some((event) => LLMEvent.is.toolCall(event) || LLMEvent.is.toolInputError(event)) ||\n state.hasToolCalls,\n lifecycle,\n tools: result.tools,\n reasoningSignatures: Object.fromEntries(\n Object.entries(state.reasoningSignatures).filter(([key]) => key !== String(index)),\n ),\n },\n events,\n ] as const\n }\n\n if (event.messageStop) {\n return [\n {\n ...state,\n pendingFinish: {\n reason: {\n normalized: mapFinishReason(event.messageStop.stopReason),\n raw: event.messageStop.stopReason,\n },\n usage: state.pendingFinish?.usage,\n },\n },\n [],\n ] as const\n }\n\n if (event.metadata) {\n const usage = mapUsage(event.metadata.usage) ?? state.pendingFinish?.usage\n return [\n {\n ...state,\n pendingFinish: {\n reason: state.pendingFinish?.reason ?? { normalized: \"stop\" },\n usage,\n },\n },\n [],\n ] as const\n }\n\n const exception = (\n [\n [\"internalServerException\", event.internalServerException],\n [\"modelStreamErrorException\", event.modelStreamErrorException],\n [\"serviceUnavailableException\", event.serviceUnavailableException],\n [\"throttlingException\", event.throttlingException],\n [\"validationException\", event.validationException],\n ] as const\n ).find((entry) => entry[1] !== undefined)\n if (exception) {\n return yield* new AIError({\n module: ADAPTER,\n method: \"stream\",\n reason: classifyProviderFailure({\n message: exception[1]?.message ?? exception[1]?.originalMessage ?? \"Bedrock Converse stream error\",\n code: exception[0],\n }),\n })\n }\n\n return [state, []] as const\n })\n\nconst framing = BedrockEventStream.framing(ADAPTER)\n\nconst onHalt = (state: ParserState): ReadonlyArray<LLMEvent> =>\n state.pendingFinish\n ? (() => {\n const events: LLMEvent[] = []\n Lifecycle.finish(state.lifecycle, events, {\n reason: {\n ...state.pendingFinish.reason,\n normalized:\n state.pendingFinish.reason.normalized === \"stop\" && state.hasToolCalls\n ? \"tool-calls\"\n : state.pendingFinish.reason.normalized,\n },\n usage: state.pendingFinish.usage,\n })\n return events\n })()\n : []\n\n// =============================================================================\n// Protocol And Bedrock Route\n// =============================================================================\n/**\n * The Bedrock Converse protocol — request body construction, body schema, and\n * the streaming-event state machine.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: BedrockConverseBody,\n from: fromRequest,\n },\n stream: {\n event: BedrockEvent,\n initial: () => ({\n tools: ToolStream.empty<number>(),\n pendingFinish: undefined,\n hasToolCalls: false,\n lifecycle: Lifecycle.initial(),\n reasoningSignatures: {},\n }),\n step,\n onHalt,\n },\n})\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"bedrock\",\n providerMetadataKey: \"bedrock\",\n protocol,\n // Bedrock's URL embeds the region in the route endpoint host and the\n // validated modelId in the path. We read the validated body so the URL\n // matches the body that gets signed.\n endpoint: Endpoint.path<BedrockConverseBody>(\n ({ body }) => `/model/${encodeURIComponent(body.modelId)}/converse-stream`,\n ),\n auth: BedrockAuth.auth,\n framing,\n})\n\nexport const sigV4Auth = BedrockAuth.sigV4\n\nexport * as BedrockConverse from \"./bedrock-converse\"\n", | ||
| "import type { RouteDefaultsInput } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { ProviderID, type ModelID } from \"../schema\"\nimport * as BedrockConverse from \"../protocols/bedrock-converse\"\nimport type { BedrockCredentials } from \"../protocols/bedrock-converse\"\n\nexport const id = ProviderID.make(\"amazon-bedrock\")\n\nexport type Config = RouteDefaultsInput & {\n readonly apiKey?: string\n readonly headers?: Record<string, string>\n readonly credentials?: BedrockCredentials\n /** AWS region. Defaults to `us-east-1` when neither this nor `credentials.region` is set. */\n readonly region?: string\n /** Override the computed `https://bedrock-runtime.<region>.amazonaws.com` URL. */\n readonly baseURL?: string\n}\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly auth?: \"bearer\" | \"sigv4\"\n readonly baseURL?: string\n readonly credentials?: BedrockCredentials\n readonly region?: string\n readonly topP?: number\n}\nexport const routes = [BedrockConverse.route]\n\nconst bedrockBaseURL = (region: string) => `https://bedrock-runtime.${region}.amazonaws.com`\n\nconst configuredRoute = (input: Config) => {\n const { apiKey, credentials, region, baseURL, ...rest } = input\n const resolvedRegion = region ?? credentials?.region ?? \"us-east-1\"\n return BedrockConverse.route.with({\n ...rest,\n provider: id,\n endpoint: { baseURL: baseURL ?? bedrockBaseURL(resolvedRegion) },\n auth: apiKey === undefined ? BedrockConverse.sigV4Auth(credentials) : Auth.bearer(apiKey),\n })\n}\n\nexport const configure = (input: Config = {}) => {\n const route = configuredRoute(input)\n return {\n id,\n model: (modelID: string | ModelID) => route.model({ id: modelID }),\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings>[\"model\"] = (modelID, settings) => {\n if (settings.auth === \"bearer\" && settings.apiKey === undefined)\n throw new Error(\"Amazon Bedrock bearer auth requires apiKey\")\n if (settings.auth === \"sigv4\" && settings.apiKey !== undefined)\n throw new Error(\"Amazon Bedrock SigV4 auth does not accept apiKey\")\n return configure({\n apiKey: settings.auth === \"sigv4\" ? undefined : settings.apiKey,\n baseURL: settings.baseURL,\n credentials: settings.credentials,\n generation: settings.topP === undefined ? undefined : { topP: settings.topP },\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n region: settings.region,\n }).model(modelID)\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "7A5C9791F321409964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/add.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport path from \"node:path\"\nimport { readFile, stat, writeFile } from \"node:fs/promises\"\nimport { Effect, Option } from \"effect\"\nimport { applyEdits, modify } from \"jsonc-parser\"\nimport { Global } from \"@opencode-ai/util/global\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.add,\n Effect.fn(\"cli.mcp.add\")(function* (input) {\n const url = Option.getOrUndefined(input.url)\n const headers = Option.getOrUndefined(input.header)\n const environment = Option.getOrUndefined(input.env)\n // The CLI framework strands `--` operands on the root command, so read the local server command\n // straight from argv after `--`. This also lets the command carry its own flags (e.g. `npx -y`).\n const dash = process.argv.indexOf(\"--\")\n const command = dash === -1 ? [...input.command] : process.argv.slice(dash + 1)\n\n const hasCommand = command.length > 0\n if (url && hasCommand)\n return yield* Effect.fail(new Error(\"Provide either --url <url> or a command after --, not both\"))\n if (!url && !hasCommand) return yield* Effect.fail(new Error(\"Provide either --url <url> or a command after --\"))\n if (url && !URL.canParse(url)) return yield* Effect.fail(new Error(`Invalid URL: ${url}`))\n if (url && environment) return yield* Effect.fail(new Error(\"--env is only valid for local MCP servers\"))\n if (hasCommand && headers) return yield* Effect.fail(new Error(\"--header is only valid for remote MCP servers\"))\n\n const server = url\n ? { type: \"remote\" as const, url, ...(headers ? { headers } : {}) }\n : { type: \"local\" as const, command, ...(environment ? { environment } : {}) }\n\n const global = yield* Global.Service\n const configPath = yield* Effect.promise(() => resolveConfigPath(input.global ? global.config : process.cwd()))\n yield* Effect.promise(() => write(configPath, input.name, server))\n process.stdout.write(`MCP server \"${input.name}\" added to ${configPath}` + EOL)\n }),\n)\n\nexport async function resolveConfigPath(directory: string) {\n const candidates = [\n path.join(directory, \"opencode.json\"),\n path.join(directory, \"opencode.jsonc\"),\n path.join(directory, \".opencode\", \"opencode.json\"),\n path.join(directory, \".opencode\", \"opencode.jsonc\"),\n ]\n for (const candidate of candidates) {\n if (\n await stat(candidate).then(\n (info) => info.isFile(),\n () => false,\n )\n )\n return candidate\n }\n return candidates[0]\n}\n\nasync function write(configPath: string, name: string, server: unknown) {\n const text = await readFile(configPath, \"utf8\").catch((error) => {\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\") return \"{}\"\n throw error\n })\n const edits = modify(text, [\"mcp\", \"servers\", name], server, {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n })\n await writeFile(configPath, applyEdits(text, edits))\n}\n" | ||
| ], | ||
| "mappings": ";qrBAAA,mBAAS,gBACT,yBACA,wBAAS,eAAU,oBAAM,yBAOzB,SAAe,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,SAC/B,OAAO,QAAG,aAAa,EAAE,SAAU,CAAC,EAAO,CACzC,IAAM,EAAM,EAAO,eAAe,EAAM,GAAG,EACrC,EAAU,EAAO,eAAe,EAAM,MAAM,EAC5C,EAAc,EAAO,eAAe,EAAM,GAAG,EAG7C,EAAO,QAAQ,KAAK,QAAQ,IAAI,EAChC,EAAU,IAAS,GAAK,CAAC,GAAG,EAAM,OAAO,EAAI,QAAQ,KAAK,MAAM,EAAO,CAAC,EAExE,EAAa,EAAQ,OAAS,EACpC,GAAI,GAAO,EACT,OAAO,MAAO,EAAO,KAAS,MAAM,4DAA4D,CAAC,EACnG,GAAI,CAAC,GAAO,CAAC,EAAY,OAAO,MAAO,EAAO,KAAS,MAAM,kDAAkD,CAAC,EAChH,GAAI,GAAO,CAAC,IAAI,SAAS,CAAG,EAAG,OAAO,MAAO,EAAO,KAAS,MAAM,gBAAgB,GAAK,CAAC,EACzF,GAAI,GAAO,EAAa,OAAO,MAAO,EAAO,KAAS,MAAM,2CAA2C,CAAC,EACxG,GAAI,GAAc,EAAS,OAAO,MAAO,EAAO,KAAS,MAAM,+CAA+C,CAAC,EAE/G,IAAM,EAAS,EACX,CAAE,KAAM,SAAmB,SAAS,EAAU,CAAE,SAAQ,EAAI,CAAC,CAAG,EAChE,CAAE,KAAM,QAAkB,aAAa,EAAc,CAAE,aAAY,EAAI,CAAC,CAAG,EAEzE,EAAS,MAAO,EAAO,QACvB,EAAa,MAAO,EAAO,QAAQ,IAAM,EAAkB,EAAM,OAAS,EAAO,OAAS,QAAQ,IAAI,CAAC,CAAC,EAC9G,MAAO,EAAO,QAAQ,IAAM,EAAM,EAAY,EAAM,KAAM,CAAM,CAAC,EACjE,QAAQ,OAAO,MAAM,eAAe,EAAM,kBAAkB,IAAe,CAAG,EAC/E,CACH,EAEA,eAAsB,CAAiB,CAAC,EAAmB,CACzD,IAAM,EAAa,CACjB,EAAK,KAAK,EAAW,eAAe,EACpC,EAAK,KAAK,EAAW,gBAAgB,EACrC,EAAK,KAAK,EAAW,YAAa,eAAe,EACjD,EAAK,KAAK,EAAW,YAAa,gBAAgB,CACpD,EACA,QAAW,KAAa,EACtB,GACE,MAAM,EAAK,CAAS,EAAE,KACpB,CAAC,IAAS,EAAK,OAAO,EACtB,IAAM,EACR,EAEA,OAAO,EAEX,OAAO,EAAW,GAGpB,eAAe,CAAK,CAAC,EAAoB,EAAc,EAAiB,CACtE,IAAM,EAAO,MAAM,EAAS,EAAY,MAAM,EAAE,MAAM,CAAC,IAAU,CAC/D,GAAI,OAAO,IAAU,UAAY,IAAU,MAAQ,SAAU,GAAS,EAAM,OAAS,SAAU,MAAO,KACtG,MAAM,EACP,EACK,EAAQ,EAAO,EAAM,CAAC,MAAO,UAAW,CAAI,EAAG,EAAQ,CAC3D,kBAAmB,CAAE,QAAS,EAAG,aAAc,EAAK,CACtD,CAAC,EACD,MAAM,EAAU,EAAY,EAAW,EAAM,CAAK,CAAC", | ||
| "debugId": "79D99B8EA88E111C64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/openai-images.ts", "../ai/src/providers/openai.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Encoding, Schema } from \"effect\"\nimport { Headers, HttpClientRequest, HttpClientResponse } from \"effect/unstable/http\"\nimport {\n ImageModel,\n GeneratedImage,\n ImageResponse,\n type ImageInput,\n type ImageRequestFor,\n type ImageRoute,\n} from \"../image\"\nimport { Auth, type Definition as AuthDefinition } from \"../route/auth\"\nimport {\n InvalidProviderOutputReason,\n AIError,\n Usage,\n mergeHttpOptions,\n mergeJsonRecords,\n type HttpOptions,\n} from \"../schema\"\nimport { ProviderShared } from \"./shared\"\nimport { ImageInputs } from \"./utils/image-input\"\nimport { OpenAIImage } from \"./utils/openai-image\"\n\nconst ADAPTER = \"openai-images\"\nexport const DEFAULT_BASE_URL = \"https://api.openai.com/v1\"\nexport const PATH = \"/images/generations\"\nexport const EDIT_PATH = \"/images/edits\"\n\nexport type OpenAIImageString<Known extends string> = Known | (string & {})\n\nexport type OpenAIImageOptions = {\n readonly mask?: ImageInput\n readonly n?: number\n readonly size?: OpenAIImageString<\n \"auto\" | \"256x256\" | \"512x512\" | \"1024x1024\" | \"1536x1024\" | \"1024x1536\" | \"1792x1024\" | \"1024x1792\"\n >\n readonly quality?: OpenAIImageString<\"auto\" | \"low\" | \"medium\" | \"high\" | \"standard\" | \"hd\">\n readonly background?: OpenAIImageString<\"auto\" | \"opaque\" | \"transparent\">\n readonly moderation?: OpenAIImageString<\"auto\" | \"low\">\n readonly outputFormat?: OpenAIImageString<\"png\" | \"jpeg\" | \"webp\">\n readonly outputCompression?: number\n} & Record<string, unknown>\n\nexport type OpenAIImageBody = Record<string, unknown> & {\n readonly model: string\n readonly prompt: string\n}\n\nconst OpenAIImageResponse = Schema.Struct({\n data: Schema.Array(\n Schema.Struct({\n b64_json: Schema.optional(Schema.String),\n url: Schema.optional(Schema.String),\n revised_prompt: Schema.optional(Schema.String),\n }),\n ),\n output_format: Schema.optional(Schema.String),\n usage: Schema.optional(\n Schema.Struct({\n input_tokens: Schema.optional(Schema.Number),\n output_tokens: Schema.optional(Schema.Number),\n total_tokens: Schema.optional(Schema.Number),\n input_tokens_details: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n output_tokens_details: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n }),\n ),\n})\n\nexport interface ModelInput {\n readonly id: string\n readonly auth: AuthDefinition\n readonly baseURL?: string\n readonly headers?: Record<string, string>\n readonly http?: HttpOptions\n}\n\nconst nativeOptions = (options: OpenAIImageOptions | undefined) => {\n if (!options) return undefined\n const { mask: _, outputFormat, outputCompression, ...native } = options\n return {\n output_format: outputFormat,\n output_compression: outputCompression,\n ...native,\n }\n}\n\nconst invalidOutput = (message: string) =>\n new AIError({\n module: ADAPTER,\n method: \"generate\",\n reason: new InvalidProviderOutputReason({ message, route: ADAPTER }),\n })\n\nconst applyQuery = (url: string, query: Record<string, string> | undefined) => {\n if (!query) return url\n const next = new URL(url)\n Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value))\n return next.toString()\n}\n\nexport const model = (input: ModelInput) => {\n const route: ImageRoute<OpenAIImageOptions> = {\n id: ADAPTER,\n generate: Effect.fn(\"OpenAIImages.generate\")(function* (request: ImageRequestFor<OpenAIImageOptions>, execute) {\n const mask = request.options?.mask\n if (mask !== undefined && (request.images?.length ?? 0) === 0)\n return yield* ImageInputs.invalid(ADAPTER, \"An OpenAI image mask requires at least one input image\")\n const http = mergeHttpOptions(request.model.http, request.http)\n const sourceImages = request.images ?? []\n const multipartImages = yield* Effect.forEach(sourceImages, (image) => {\n if (image.type === \"bytes\") return Effect.succeed({ data: image.data, mediaType: image.mediaType })\n if (image.type === \"url\") return ImageInputs.decodeDataUrl(image.url, ADAPTER)\n return Effect.succeed(undefined)\n })\n const multipartMask =\n mask === undefined\n ? undefined\n : mask.type === \"bytes\"\n ? { data: mask.data, mediaType: mask.mediaType }\n : mask.type === \"url\"\n ? yield* ImageInputs.decodeDataUrl(mask.url, ADAPTER)\n : undefined\n const useMultipart =\n sourceImages.length > 0 &&\n multipartImages.every((image) => image !== undefined) &&\n (mask === undefined || multipartMask !== undefined)\n const path = sourceImages.length === 0 ? PATH : EDIT_PATH\n const url = applyQuery(`${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\")}${path}`, http?.query)\n\n if (useMultipart) {\n const form = new FormData()\n form.append(\"model\", request.model.id)\n form.append(\"prompt\", request.prompt)\n Object.entries(mergeJsonRecords(nativeOptions(request.options), http?.body) ?? {}).forEach(([key, value]) => {\n if ([\"model\", \"prompt\", \"image\", \"image[]\", \"images\", \"mask\"].includes(key)) return\n form.append(key, typeof value === \"string\" ? value : ProviderShared.encodeJson(value))\n })\n multipartImages.forEach((image, index) => {\n if (image === undefined) return\n form.append(\"image[]\", imageBlob(image.data, image.mediaType), `image-${index}`)\n })\n if (multipartMask !== undefined)\n form.append(\"mask\", imageBlob(multipartMask.data, multipartMask.mediaType), \"mask\")\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: \"[multipart/form-data]\",\n headers: Headers.remove(Headers.fromInput({ ...input.headers, ...http?.headers }), \"content-type\"),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(HttpClientRequest.setHeaders(headers), HttpClientRequest.bodyFormData(form)),\n )\n return yield* parseResponse(response, request.options, http?.body)\n }\n\n const references = sourceImages.map((image) => {\n if (image.type === \"bytes\") return { image_url: ImageInputs.dataUrl(image) }\n if (image.type === \"url\") return { image_url: image.url }\n if (image.type === \"file-id\") return { file_id: image.id }\n return undefined\n })\n if (references.some((image) => image === undefined))\n return yield* ImageInputs.invalid(ADAPTER, \"OpenAI Images accepts image URLs, data URLs, bytes, and file IDs\")\n const maskReference =\n mask === undefined\n ? undefined\n : mask.type === \"bytes\"\n ? { image_url: ImageInputs.dataUrl(mask) }\n : mask.type === \"url\"\n ? { image_url: mask.url }\n : mask.type === \"file-id\"\n ? { file_id: mask.id }\n : undefined\n if (mask !== undefined && maskReference === undefined)\n return yield* ImageInputs.invalid(ADAPTER, \"OpenAI Images accepts masks as URLs, data URLs, bytes, or file IDs\")\n const requestBody = mergeJsonRecords(\n {\n model: request.model.id,\n prompt: request.prompt,\n images: references.length === 0 ? undefined : references,\n mask: maskReference,\n },\n nativeOptions(request.options),\n http?.body,\n ) as OpenAIImageBody\n const text = ProviderShared.encodeJson(requestBody)\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: text,\n headers: Headers.fromInput({ ...input.headers, ...http?.headers }),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(\n HttpClientRequest.setHeaders(headers),\n HttpClientRequest.bodyText(text, \"application/json\"),\n ),\n )\n return yield* parseResponse(response, request.options, http?.body)\n }),\n }\n return ImageModel.make<OpenAIImageOptions>({ id: input.id, provider: \"openai\", route, http: input.http })\n}\n\nconst parseResponse = Effect.fn(\"OpenAIImages.parseResponse\")(function* (\n response: HttpClientResponse.HttpClientResponse,\n options: OpenAIImageOptions | undefined,\n overlay: Record<string, unknown> | undefined,\n) {\n const payload = yield* response.json.pipe(\n Effect.mapError(() => invalidOutput(\"Failed to read the OpenAI Images response\")),\n )\n const decoded = yield* Schema.decodeUnknownEffect(OpenAIImageResponse)(payload).pipe(\n Effect.mapError(() => invalidOutput(\"OpenAI Images returned an invalid response\")),\n )\n const requestBody = mergeJsonRecords(nativeOptions(options), overlay)\n const format =\n decoded.output_format ?? (typeof requestBody?.output_format === \"string\" ? requestBody.output_format : \"png\")\n const images = yield* Effect.forEach(decoded.data, (item, index) => {\n if (item.b64_json)\n return Effect.fromResult(Encoding.decodeBase64(item.b64_json)).pipe(\n Effect.mapError(() => invalidOutput(`OpenAI Images result ${index} contains invalid base64 data`)),\n Effect.map(\n (data) =>\n new GeneratedImage({\n mediaType: `image/${format}`,\n data,\n providerMetadata:\n item.revised_prompt === undefined ? undefined : { openai: { revisedPrompt: item.revised_prompt } },\n }),\n ),\n )\n if (item.url)\n return Effect.succeed(\n new GeneratedImage({\n mediaType: `image/${format}`,\n data: item.url,\n providerMetadata:\n item.revised_prompt === undefined ? undefined : { openai: { revisedPrompt: item.revised_prompt } },\n }),\n )\n return Effect.fail(invalidOutput(`OpenAI Images result ${index} has neither image data nor a URL`))\n })\n if (images.length === 0) return yield* invalidOutput(\"OpenAI Images returned no images\")\n return new ImageResponse({\n images,\n usage:\n decoded.usage === undefined\n ? undefined\n : new Usage({\n inputTokens: decoded.usage.input_tokens,\n outputTokens: decoded.usage.output_tokens,\n totalTokens: decoded.usage.total_tokens,\n providerMetadata: { openai: decoded.usage },\n }),\n providerMetadata: { openai: { outputFormat: format } },\n })\n})\n\nconst imageBlob = (data: Uint8Array, mediaType: string) => {\n const buffer = new ArrayBuffer(data.byteLength)\n new Uint8Array(buffer).set(data)\n return new Blob([buffer], { type: mediaType })\n}\n\nexport const OpenAIImages = {\n model,\n} as const\n", | ||
| "import { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport type { Route, RouteDefaultsInput } from \"../route/client\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { HttpOptions, ProviderID, ToolDefinition, mergeHttpOptions, type ModelID } from \"../schema\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport * as OpenAIResponses from \"../protocols/openai-responses\"\nimport { withOpenAIOptions, type OpenAIProviderOptionsInput } from \"./openai-options\"\nimport { OpenAIImages, type OpenAIImageString } from \"../protocols/openai-images\"\n\nexport type { OpenAIOptionsInput, OpenAIResponseIncludable } from \"./openai-options\"\nexport type { OpenAIImageOptions } from \"../protocols/openai-images\"\n\nexport const id = ProviderID.make(\"openai\")\n\nexport const routes = [OpenAIResponses.route, OpenAIResponses.webSocketRoute, OpenAIChat.route]\n\n// This provider facade wraps the lower-level Responses and Chat model factories\n// with OpenAI-specific conveniences: typed options, API-key sugar, env fallback,\n// and default option normalization.\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly queryParams?: Record<string, string>\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nexport interface ImageGenerationOptions {\n readonly action?: OpenAIImageString<\"auto\" | \"generate\" | \"edit\">\n readonly background?: OpenAIImageString<\"auto\" | \"opaque\" | \"transparent\">\n readonly inputFidelity?: OpenAIImageString<\"low\" | \"high\">\n readonly outputCompression?: number\n readonly outputFormat?: OpenAIImageString<\"png\" | \"jpeg\" | \"webp\">\n readonly partialImages?: number\n readonly quality?: OpenAIImageString<\"auto\" | \"low\" | \"medium\" | \"high\" | \"standard\" | \"hd\">\n readonly size?: OpenAIImageString<\n \"auto\" | \"256x256\" | \"512x512\" | \"1024x1024\" | \"1536x1024\" | \"1024x1536\" | \"1792x1024\" | \"1024x1792\"\n >\n}\n\nexport const imageGeneration = (options: ImageGenerationOptions = {}) =>\n ToolDefinition.make({\n name: \"image_generation\",\n description: \"Generate or edit an image using OpenAI's hosted image generation tool.\",\n inputSchema: { type: \"object\", properties: {}, additionalProperties: false },\n native: {\n openai: {\n type: \"image_generation\",\n action: options.action,\n background: options.background,\n input_fidelity: options.inputFidelity,\n output_compression: options.outputCompression,\n output_format: options.outputFormat,\n partial_images: options.partialImages,\n quality: options.quality,\n size: options.size,\n },\n },\n })\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly organization?: string\n readonly project?: string\n readonly queryParams?: Readonly<Record<string, string>>\n readonly transport?: \"http\" | \"websocket\"\n readonly providerOptions?: OpenAIProviderOptionsInput\n}\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => AuthOptions.bearer(options, \"OPENAI_API_KEY\")\n\nconst defaults = (input: Config) => {\n const { apiKey: _, auth: _auth, baseURL: _baseURL, queryParams: _queryParams, ...rest } = input\n return rest\n}\n\nconst configuredRoute = <Body, Prepared>(route: Route<Body, Prepared>, input: Config) =>\n route.with({\n auth: auth(input),\n endpoint: { baseURL: input.baseURL, query: input.queryParams },\n })\n\nexport const configure = (input: Config = {}) => {\n const responsesRoute = configuredRoute(OpenAIResponses.route, input)\n const responsesWebSocketRoute = configuredRoute(OpenAIResponses.webSocketRoute, input)\n const chatRoute = configuredRoute(OpenAIChat.route, input)\n const modelDefaults = defaults(input)\n const responses = (id: string | ModelID) =>\n responsesRoute\n .with(withOpenAIOptions(id, modelDefaults, { textVerbosity: true }))\n .model<OpenAIProviderOptionsInput>({ id })\n const responsesWebSocket = (id: string | ModelID) =>\n responsesWebSocketRoute\n .with(withOpenAIOptions(id, modelDefaults, { textVerbosity: true }))\n .model<OpenAIProviderOptionsInput>({ id })\n const chat = (id: string | ModelID) =>\n chatRoute.with(withOpenAIOptions(id, modelDefaults)).model<OpenAIProviderOptionsInput>({ id })\n const image = (modelID: string | ModelID) =>\n OpenAIImages.model({\n id: modelID,\n auth: auth(input),\n baseURL: input.baseURL,\n headers: input.headers,\n http: mergeHttpOptions(\n input.http === undefined ? undefined : HttpOptions.make(input.http),\n input.queryParams === undefined ? undefined : new HttpOptions({ query: input.queryParams }),\n ),\n })\n\n return {\n id,\n model: responses,\n responses,\n responsesWebSocket,\n chat,\n image,\n configure,\n }\n}\n\nexport const provider = configure()\n\nconst config = (settings: Settings): Config => {\n const headers = {\n ...(settings.organization === undefined ? {} : { \"OpenAI-Organization\": settings.organization }),\n ...(settings.project === undefined ? {} : { \"OpenAI-Project\": settings.project }),\n ...settings.headers,\n }\n return {\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: Object.keys(headers).length === 0 ? undefined : headers,\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n queryParams: settings.queryParams === undefined ? undefined : { ...settings.queryParams },\n }\n}\n\nexport const model: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (modelID, settings) => {\n const configured = configure(config(settings))\n if (settings.transport === undefined || settings.transport === \"http\") return configured.responses(modelID)\n if (settings.transport === \"websocket\") return configured.responsesWebSocket(modelID)\n throw new Error(`Unsupported OpenAI Responses transport: ${String(settings.transport)}`)\n}\n\nexport const chatModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => configure(config(settings)).chat(modelID)\nexport const responses = provider.responses\nexport const responsesWebSocket = provider.responsesWebSocket\nexport const chat = provider.chat\nexport const image = provider.image\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "287D67FA93DCE02364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/get.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect, Option } from \"effect\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.get,\n Effect.fn(\"cli.service.get\")(function* (input) {\n process.stdout.write((yield* ServiceConfig.get(Option.getOrUndefined(input.key))) + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";00BAAA,mBAAS,gBAMT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,SACnC,OAAO,QAAG,sBAAiB,OAAE,cAAU,MAAC,OAAO,MAC7C,aAAQ,YAAO,YAAO,WAAO,EAAc,IAAI,EAAO,eAAe,EAAM,GAAG,CAAC,GAAK,CAAG,EACxF,CACH", | ||
| "debugId": "7304B14AAA300C5564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+cohere@3.0.27+d6123d32214422cb/node_modules/@ai-sdk/cohere/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/cohere-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/cohere-chat-language-model.ts\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\n\n// src/cohere-chat-options.ts\nimport { z } from \"zod/v4\";\nvar cohereLanguageModelOptions = z.object({\n /**\n * Configuration for reasoning features (optional)\n *\n * Can be set to an object with the two properties `type` and `tokenBudget`. `type` can be set to `'enabled'` or `'disabled'` (defaults to `'enabled'`).\n * `tokenBudget` is the maximum number of tokens the model can use for thinking, which must be set to a positive integer. The model will stop thinking if it reaches the thinking token budget and will proceed with the response\n *\n * @see https://docs.cohere.com/reference/chat#request.body.thinking\n */\n thinking: z.object({\n type: z.enum([\"enabled\", \"disabled\"]).optional(),\n tokenBudget: z.number().optional()\n }).optional()\n});\n\n// src/cohere-error.ts\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z as z2 } from \"zod/v4\";\nvar cohereErrorDataSchema = z2.object({\n message: z2.string()\n});\nvar cohereFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: cohereErrorDataSchema,\n errorToMessage: (data) => data.message\n});\n\n// src/cohere-prepare-tools.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nfunction prepareTools({\n tools,\n toolChoice\n}) {\n tools = (tools == null ? void 0 : tools.length) ? tools : void 0;\n const toolWarnings = [];\n if (tools == null) {\n return { tools: void 0, toolChoice: void 0, toolWarnings };\n }\n const cohereTools = [];\n for (const tool of tools) {\n if (tool.type === \"provider\") {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`\n });\n } else {\n cohereTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema\n }\n });\n }\n }\n if (toolChoice == null) {\n return { tools: cohereTools, toolChoice: void 0, toolWarnings };\n }\n const type = toolChoice.type;\n switch (type) {\n case \"auto\":\n return { tools: cohereTools, toolChoice: void 0, toolWarnings };\n case \"none\":\n return { tools: cohereTools, toolChoice: \"NONE\", toolWarnings };\n case \"required\":\n return { tools: cohereTools, toolChoice: \"REQUIRED\", toolWarnings };\n case \"tool\":\n return {\n tools: cohereTools.filter(\n (tool) => tool.function.name === toolChoice.toolName\n ),\n toolChoice: \"REQUIRED\",\n toolWarnings\n };\n default: {\n const _exhaustiveCheck = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`\n });\n }\n }\n}\n\n// src/convert-cohere-usage.ts\nfunction convertCohereUsage(tokens) {\n if (tokens == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const inputTokens = tokens.input_tokens;\n const outputTokens = tokens.output_tokens;\n return {\n inputTokens: {\n total: inputTokens,\n noCache: inputTokens,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: outputTokens,\n text: outputTokens,\n reasoning: void 0\n },\n raw: tokens\n };\n}\n\n// src/convert-to-cohere-chat-prompt.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\nfunction convertToCohereChatPrompt(prompt) {\n const messages = [];\n const documents = [];\n const warnings = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n var _a;\n switch (part.type) {\n case \"text\": {\n return part.text;\n }\n case \"file\": {\n let textContent;\n if (typeof part.data === \"string\") {\n textContent = part.data;\n } else if (part.data instanceof Uint8Array) {\n if (!(((_a = part.mediaType) == null ? void 0 : _a.startsWith(\"text/\")) || part.mediaType === \"application/json\")) {\n throw new UnsupportedFunctionalityError2({\n functionality: `document media type: ${part.mediaType}`,\n message: `Media type '${part.mediaType}' is not supported. Supported media types are: text/* and application/json.`\n });\n }\n textContent = new TextDecoder().decode(part.data);\n } else {\n throw new UnsupportedFunctionalityError2({\n functionality: \"File URL data\",\n message: \"URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue.\"\n });\n }\n documents.push({\n data: {\n text: textContent,\n title: part.filename\n }\n });\n return \"\";\n }\n }\n }).join(\"\")\n });\n break;\n }\n case \"assistant\": {\n let text = \"\";\n const toolCalls = [];\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input)\n }\n });\n break;\n }\n }\n }\n messages.push({\n role: \"assistant\",\n content: toolCalls.length > 0 ? void 0 : text,\n tool_calls: toolCalls.length > 0 ? toolCalls : void 0,\n tool_plan: void 0\n });\n break;\n }\n case \"tool\": {\n messages.push(\n ...content.filter((toolResult) => toolResult.type !== \"tool-approval-response\").map((toolResult) => {\n var _a;\n const output = toolResult.output;\n let contentValue;\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n contentValue = output.value;\n break;\n case \"execution-denied\":\n contentValue = (_a = output.reason) != null ? _a : \"Tool execution denied.\";\n break;\n case \"content\":\n case \"json\":\n case \"error-json\":\n contentValue = JSON.stringify(output.value);\n break;\n }\n return {\n role: \"tool\",\n content: contentValue,\n tool_call_id: toolResult.toolCallId\n };\n })\n );\n break;\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return { messages, documents, warnings };\n}\n\n// src/map-cohere-finish-reason.ts\nfunction mapCohereFinishReason(finishReason) {\n switch (finishReason) {\n case \"COMPLETE\":\n case \"STOP_SEQUENCE\":\n return \"stop\";\n case \"MAX_TOKENS\":\n return \"length\";\n case \"ERROR\":\n return \"error\";\n case \"TOOL_CALL\":\n return \"tool-calls\";\n default:\n return \"other\";\n }\n}\n\n// src/cohere-chat-language-model.ts\nvar CohereChatLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.supportedUrls = {\n // No URLs are supported.\n };\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n tools,\n toolChoice,\n providerOptions\n }) {\n var _a, _b;\n const cohereOptions = (_a = await parseProviderOptions({\n provider: \"cohere\",\n providerOptions,\n schema: cohereLanguageModelOptions\n })) != null ? _a : {};\n const {\n messages: chatPrompt,\n documents: cohereDocuments,\n warnings: promptWarnings\n } = convertToCohereChatPrompt(prompt);\n const {\n tools: cohereTools,\n toolChoice: cohereToolChoice,\n toolWarnings\n } = prepareTools({ tools, toolChoice });\n return {\n args: {\n // model id:\n model: this.modelId,\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n max_tokens: maxOutputTokens,\n temperature,\n p: topP,\n k: topK,\n seed,\n stop_sequences: stopSequences,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? { type: \"json_object\", json_schema: responseFormat.schema } : void 0,\n // messages:\n messages: chatPrompt,\n // tools:\n tools: cohereTools,\n tool_choice: cohereToolChoice,\n // documents for RAG:\n ...cohereDocuments.length > 0 && { documents: cohereDocuments },\n // reasoning\n ...cohereOptions.thinking && {\n thinking: {\n type: (_b = cohereOptions.thinking.type) != null ? _b : \"enabled\",\n token_budget: cohereOptions.thinking.tokenBudget\n }\n }\n },\n warnings: [...toolWarnings, ...promptWarnings]\n };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g;\n const { args, warnings } = await this.getArgs(options);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const content = [];\n for (const item of (_a = response.message.content) != null ? _a : []) {\n if (item.type === \"text\" && item.text.length > 0) {\n content.push({ type: \"text\", text: item.text });\n continue;\n }\n if (item.type === \"thinking\" && item.thinking.length > 0) {\n content.push({ type: \"reasoning\", text: item.thinking });\n continue;\n }\n }\n for (const citation of (_b = response.message.citations) != null ? _b : []) {\n content.push({\n type: \"source\",\n sourceType: \"document\",\n id: this.config.generateId(),\n mediaType: \"text/plain\",\n title: ((_d = (_c = citation.sources[0]) == null ? void 0 : _c.document) == null ? void 0 : _d.title) || \"Document\",\n providerMetadata: {\n cohere: {\n start: citation.start,\n end: citation.end,\n text: citation.text,\n sources: citation.sources,\n ...citation.type && { citationType: citation.type }\n }\n }\n });\n }\n for (const toolCall of (_e = response.message.tool_calls) != null ? _e : []) {\n content.push({\n type: \"tool-call\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n // Cohere sometimes returns `null` for tool call arguments for tools\n // defined as having no arguments.\n input: toolCall.function.arguments.replace(/^null$/, \"{}\")\n });\n }\n return {\n content,\n finishReason: {\n unified: mapCohereFinishReason(response.finish_reason),\n raw: (_f = response.finish_reason) != null ? _f : void 0\n },\n usage: convertCohereUsage(response.usage.tokens),\n request: { body: args },\n response: {\n // TODO timestamp, model id\n id: (_g = response.generation_id) != null ? _g : void 0,\n headers: responseHeaders,\n body: rawResponse\n },\n warnings\n };\n }\n async doStream(options) {\n const { args, warnings } = await this.getArgs(options);\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: { ...args, stream: true },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n cohereChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n let pendingToolCall = null;\n let isActiveReasoning = false;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n var _a, _b;\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n finishReason = { unified: \"error\", raw: void 0 };\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n const type = value.type;\n switch (type) {\n case \"content-start\": {\n if (value.delta.message.content.type === \"thinking\") {\n controller.enqueue({\n type: \"reasoning-start\",\n id: String(value.index)\n });\n isActiveReasoning = true;\n return;\n }\n controller.enqueue({\n type: \"text-start\",\n id: String(value.index)\n });\n return;\n }\n case \"content-delta\": {\n if (\"thinking\" in value.delta.message.content) {\n controller.enqueue({\n type: \"reasoning-delta\",\n id: String(value.index),\n delta: value.delta.message.content.thinking\n });\n return;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: String(value.index),\n delta: value.delta.message.content.text\n });\n return;\n }\n case \"content-end\": {\n if (isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: String(value.index)\n });\n isActiveReasoning = false;\n return;\n }\n controller.enqueue({\n type: \"text-end\",\n id: String(value.index)\n });\n return;\n }\n case \"tool-call-start\": {\n const toolId = value.delta.message.tool_calls.id;\n const toolName = value.delta.message.tool_calls.function.name;\n const initialArgs = value.delta.message.tool_calls.function.arguments;\n pendingToolCall = {\n id: toolId,\n name: toolName,\n arguments: initialArgs,\n hasFinished: false\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolId,\n toolName\n });\n if (initialArgs.length > 0) {\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolId,\n delta: initialArgs\n });\n }\n return;\n }\n case \"tool-call-delta\": {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n const argsDelta = value.delta.message.tool_calls.function.arguments;\n pendingToolCall.arguments += argsDelta;\n controller.enqueue({\n type: \"tool-input-delta\",\n id: pendingToolCall.id,\n delta: argsDelta\n });\n }\n return;\n }\n case \"tool-call-end\": {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: pendingToolCall.id\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: pendingToolCall.id,\n toolName: pendingToolCall.name,\n input: JSON.stringify(\n JSON.parse(((_a = pendingToolCall.arguments) == null ? void 0 : _a.trim()) || \"{}\")\n )\n });\n pendingToolCall.hasFinished = true;\n pendingToolCall = null;\n }\n return;\n }\n case \"message-start\": {\n controller.enqueue({\n type: \"response-metadata\",\n id: (_b = value.id) != null ? _b : void 0\n });\n return;\n }\n case \"message-end\": {\n finishReason = {\n unified: mapCohereFinishReason(value.delta.finish_reason),\n raw: value.delta.finish_reason\n };\n usage = value.delta.usage.tokens;\n return;\n }\n default: {\n return;\n }\n }\n },\n flush(controller) {\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertCohereUsage(usage)\n });\n }\n })\n ),\n request: { body: { ...args, stream: true } },\n response: { headers: responseHeaders }\n };\n }\n};\nvar cohereChatResponseSchema = z3.object({\n generation_id: z3.string().nullish(),\n message: z3.object({\n role: z3.string(),\n content: z3.array(\n z3.union([\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"thinking\"),\n thinking: z3.string()\n })\n ])\n ).nullish(),\n tool_plan: z3.string().nullish(),\n tool_calls: z3.array(\n z3.object({\n id: z3.string(),\n type: z3.literal(\"function\"),\n function: z3.object({\n name: z3.string(),\n arguments: z3.string()\n })\n })\n ).nullish(),\n citations: z3.array(\n z3.object({\n start: z3.number(),\n end: z3.number(),\n text: z3.string(),\n sources: z3.array(\n z3.object({\n type: z3.string().optional(),\n id: z3.string().optional(),\n document: z3.object({\n id: z3.string().optional(),\n text: z3.string(),\n title: z3.string()\n })\n })\n ),\n type: z3.string().optional()\n })\n ).nullish()\n }),\n finish_reason: z3.string(),\n usage: z3.object({\n billed_units: z3.object({\n input_tokens: z3.number(),\n output_tokens: z3.number()\n }),\n tokens: z3.object({\n input_tokens: z3.number(),\n output_tokens: z3.number()\n })\n })\n});\nvar cohereChatChunkSchema = z3.discriminatedUnion(\"type\", [\n z3.object({\n type: z3.literal(\"citation-start\")\n }),\n z3.object({\n type: z3.literal(\"citation-end\")\n }),\n z3.object({\n type: z3.literal(\"content-start\"),\n index: z3.number(),\n delta: z3.object({\n message: z3.object({\n content: z3.union([\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"thinking\"),\n thinking: z3.string()\n })\n ])\n })\n })\n }),\n z3.object({\n type: z3.literal(\"content-delta\"),\n index: z3.number(),\n delta: z3.object({\n message: z3.object({\n content: z3.union([\n z3.object({\n text: z3.string()\n }),\n z3.object({\n thinking: z3.string()\n })\n ])\n })\n })\n }),\n z3.object({\n type: z3.literal(\"content-end\"),\n index: z3.number()\n }),\n z3.object({\n type: z3.literal(\"message-start\"),\n id: z3.string().nullish()\n }),\n z3.object({\n type: z3.literal(\"message-end\"),\n delta: z3.object({\n finish_reason: z3.string(),\n usage: z3.object({\n tokens: z3.object({\n input_tokens: z3.number(),\n output_tokens: z3.number()\n })\n })\n })\n }),\n // https://docs.cohere.com/v2/docs/streaming#tool-use-stream-events-for-tool-calling\n z3.object({\n type: z3.literal(\"tool-plan-delta\"),\n delta: z3.object({\n message: z3.object({\n tool_plan: z3.string()\n })\n })\n }),\n z3.object({\n type: z3.literal(\"tool-call-start\"),\n delta: z3.object({\n message: z3.object({\n tool_calls: z3.object({\n id: z3.string(),\n type: z3.literal(\"function\"),\n function: z3.object({\n name: z3.string(),\n arguments: z3.string()\n })\n })\n })\n })\n }),\n // A single tool call's `arguments` stream in chunks and must be accumulated\n // in a string and so the full tool object info can only be parsed once we see\n // `tool-call-end`.\n z3.object({\n type: z3.literal(\"tool-call-delta\"),\n delta: z3.object({\n message: z3.object({\n tool_calls: z3.object({\n function: z3.object({\n arguments: z3.string()\n })\n })\n })\n })\n }),\n z3.object({\n type: z3.literal(\"tool-call-end\")\n })\n]);\n\n// src/cohere-embedding-model.ts\nimport {\n TooManyEmbeddingValuesForCallError\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders as combineHeaders2,\n createJsonResponseHandler as createJsonResponseHandler2,\n parseProviderOptions as parseProviderOptions2,\n postJsonToApi as postJsonToApi2\n} from \"@ai-sdk/provider-utils\";\nimport { z as z5 } from \"zod/v4\";\n\n// src/cohere-embedding-options.ts\nimport { z as z4 } from \"zod/v4\";\nvar cohereEmbeddingModelOptions = z4.object({\n /**\n * Specifies the type of input passed to the model. Default is `search_query`.\n *\n * - \"search_document\": Used for embeddings stored in a vector database for search use-cases.\n * - \"search_query\": Used for embeddings of search queries run against a vector DB to find relevant documents.\n * - \"classification\": Used for embeddings passed through a text classifier.\n * - \"clustering\": Used for embeddings run through a clustering algorithm.\n */\n inputType: z4.enum([\"search_document\", \"search_query\", \"classification\", \"clustering\"]).optional(),\n /**\n * Specifies how the API will handle inputs longer than the maximum token length.\n * Default is `END`.\n *\n * - \"NONE\": If selected, when the input exceeds the maximum input token length will return an error.\n * - \"START\": Will discard the start of the input until the remaining input is exactly the maximum input token length for the model.\n * - \"END\": Will discard the end of the input until the remaining input is exactly the maximum input token length for the model.\n */\n truncate: z4.enum([\"NONE\", \"START\", \"END\"]).optional(),\n /**\n * The number of dimensions of the output embedding.\n * Only available for `embed-v4.0` and newer models.\n *\n * Possible values are `256`, `512`, `1024`, and `1536`.\n * The default is `1536`.\n */\n outputDimension: z4.union([z4.literal(256), z4.literal(512), z4.literal(1024), z4.literal(1536)]).optional()\n});\n\n// src/cohere-embedding-model.ts\nvar CohereEmbeddingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.maxEmbeddingsPerCall = 96;\n this.supportsParallelCalls = true;\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions\n }) {\n var _a;\n const embeddingOptions = await parseProviderOptions2({\n provider: \"cohere\",\n providerOptions,\n schema: cohereEmbeddingModelOptions\n });\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values\n });\n }\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi2({\n url: `${this.config.baseURL}/embed`,\n headers: combineHeaders2(this.config.headers(), headers),\n body: {\n model: this.modelId,\n // The AI SDK only supports 'float' embeddings. Note that the Cohere API\n // supports other embedding types, but they are not currently supported by the AI SDK.\n // https://docs.cohere.com/v2/reference/embed#request.body.embedding_types\n embedding_types: [\"float\"],\n texts: values,\n input_type: (_a = embeddingOptions == null ? void 0 : embeddingOptions.inputType) != null ? _a : \"search_query\",\n truncate: embeddingOptions == null ? void 0 : embeddingOptions.truncate,\n output_dimension: embeddingOptions == null ? void 0 : embeddingOptions.outputDimension\n },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler2(\n cohereTextEmbeddingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n warnings: [],\n embeddings: response.embeddings.float,\n usage: { tokens: response.meta.billed_units.input_tokens },\n response: { headers: responseHeaders, body: rawValue }\n };\n }\n};\nvar cohereTextEmbeddingResponseSchema = z5.object({\n embeddings: z5.object({\n float: z5.array(z5.array(z5.number()))\n }),\n meta: z5.object({\n billed_units: z5.object({\n input_tokens: z5.number()\n })\n })\n});\n\n// src/reranking/cohere-reranking-model.ts\nimport {\n combineHeaders as combineHeaders3,\n createJsonResponseHandler as createJsonResponseHandler3,\n parseProviderOptions as parseProviderOptions3,\n postJsonToApi as postJsonToApi3\n} from \"@ai-sdk/provider-utils\";\n\n// src/reranking/cohere-reranking-api.ts\nimport { lazySchema, zodSchema } from \"@ai-sdk/provider-utils\";\nimport { z as z6 } from \"zod/v4\";\nvar cohereRerankingResponseSchema = lazySchema(\n () => zodSchema(\n z6.object({\n id: z6.string().nullish(),\n results: z6.array(\n z6.object({\n index: z6.number(),\n relevance_score: z6.number()\n })\n ),\n meta: z6.any()\n })\n )\n);\n\n// src/reranking/cohere-reranking-options.ts\nimport { lazySchema as lazySchema2, zodSchema as zodSchema2 } from \"@ai-sdk/provider-utils\";\nimport { z as z7 } from \"zod/v4\";\nvar cohereRerankingModelOptionsSchema = lazySchema2(\n () => zodSchema2(\n z7.object({\n maxTokensPerDoc: z7.number().optional(),\n priority: z7.number().optional()\n })\n )\n);\n\n// src/reranking/cohere-reranking-model.ts\nvar CohereRerankingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n // current implementation is based on v2 of the API: https://docs.cohere.com/v2/reference/rerank\n async doRerank({\n documents,\n headers,\n query,\n topN,\n abortSignal,\n providerOptions\n }) {\n var _a;\n const rerankingOptions = await parseProviderOptions3({\n provider: \"cohere\",\n providerOptions,\n schema: cohereRerankingModelOptionsSchema\n });\n const warnings = [];\n if (documents.type === \"object\") {\n warnings.push({\n type: \"compatibility\",\n feature: \"object documents\",\n details: \"Object documents are converted to strings.\"\n });\n }\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi3({\n url: `${this.config.baseURL}/rerank`,\n headers: combineHeaders3(this.config.headers(), headers),\n body: {\n model: this.modelId,\n query,\n documents: documents.type === \"text\" ? documents.values : documents.values.map((value) => JSON.stringify(value)),\n top_n: topN,\n max_tokens_per_doc: rerankingOptions == null ? void 0 : rerankingOptions.maxTokensPerDoc,\n priority: rerankingOptions == null ? void 0 : rerankingOptions.priority\n },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler3(\n cohereRerankingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n ranking: response.results.map((result) => ({\n index: result.index,\n relevanceScore: result.relevance_score\n })),\n warnings,\n response: {\n id: (_a = response.id) != null ? _a : void 0,\n headers: responseHeaders,\n body: rawValue\n }\n };\n }\n};\n\n// src/version.ts\nvar VERSION = true ? \"3.0.27\" : \"0.0.0-test\";\n\n// src/cohere-provider.ts\nfunction createCohere(options = {}) {\n var _a;\n const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : \"https://api.cohere.com/v2\";\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"COHERE_API_KEY\",\n description: \"Cohere\"\n })}`,\n ...options.headers\n },\n `ai-sdk/cohere/${VERSION}`\n );\n const createChatModel = (modelId) => {\n var _a2;\n return new CohereChatLanguageModel(modelId, {\n provider: \"cohere.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: (_a2 = options.generateId) != null ? _a2 : generateId\n });\n };\n const createEmbeddingModel = (modelId) => new CohereEmbeddingModel(modelId, {\n provider: \"cohere.textEmbedding\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createRerankingModel = (modelId) => new CohereRerankingModel(modelId, {\n provider: \"cohere.reranking\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const provider = function(modelId) {\n if (new.target) {\n throw new Error(\n \"The Cohere model function cannot be called with the new keyword.\"\n );\n }\n return createChatModel(modelId);\n };\n provider.specificationVersion = \"v3\";\n provider.languageModel = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar cohere = createCohere();\nexport {\n VERSION,\n cohere,\n createCohere\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "6F6088EF46DA734F64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/session.shared.ts", "../tui/src/mini/variant.shared.ts", "../tui/src/mini/theme.ts", "../tui/src/mini/mono.ts"], | ||
| "sourcesContent": [ | ||
| "import type { SessionMessageInfo, SessionMessageUser } from \"@opencode-ai/client/promise\"\nimport { promptCopy, promptSame } from \"./prompt.shared\"\nimport type { RunInput, RunPrompt } from \"./types\"\n\nconst LIMIT = 200\n\nexport type SessionMessages = SessionMessageInfo[]\n\ntype Turn = {\n prompt: RunPrompt\n provider: string | undefined\n model: string | undefined\n variant: string | undefined\n}\n\nexport type RunSession = {\n first: boolean\n turns: Turn[]\n model?: NonNullable<RunInput[\"model\"]>\n variant?: string\n}\n\nfunction messagePrompt(message: SessionMessageUser): RunPrompt {\n return {\n text: message.text,\n parts: [\n ...(message.files ?? []).map((file) => ({\n type: \"file\" as const,\n url: file.source.type === \"uri\" ? file.source.uri : `data:${file.mime};base64,${file.data}`,\n mime: file.mime,\n filename: file.name,\n source: file.mention\n ? {\n type: \"file\",\n path: file.name ?? (file.source.type === \"uri\" ? file.source.uri : \"inline attachment\"),\n text: { start: file.mention.start, end: file.mention.end, value: file.mention.text },\n }\n : undefined,\n })),\n ...(message.agents ?? []).map((agent) => ({\n type: \"agent\" as const,\n name: agent.name,\n source: agent.mention\n ? { start: agent.mention.start, end: agent.mention.end, value: agent.mention.text }\n : undefined,\n })),\n ],\n }\n}\n\nexport function createSession(messages: SessionMessages): RunSession {\n return {\n first: messages.length === 0,\n turns: messages.flatMap((message) =>\n message.type === \"user\"\n ? [{ prompt: messagePrompt(message), provider: undefined, model: undefined, variant: undefined }]\n : [],\n ),\n }\n}\n\nexport async function resolveCurrentSession(\n sdk: RunInput[\"sdk\"],\n sessionID: string,\n signal?: AbortSignal,\n limit = LIMIT,\n): Promise<RunSession> {\n const [response, session] = await Promise.all([\n sdk.message.list({ sessionID, limit, order: \"desc\" }, ...requestOptions(signal)),\n sdk.session.get({ sessionID }, ...requestOptions(signal)),\n ])\n const current = createSession(response.data.toReversed())\n return {\n ...current,\n turns: current.turns.map((turn) => ({\n ...turn,\n provider: session.model?.providerID,\n model: session.model?.id,\n variant: session.model?.variant,\n })),\n ...(session.model && {\n model: { providerID: session.model.providerID, modelID: session.model.id },\n variant: session.model.variant,\n }),\n }\n}\n\nfunction requestOptions(signal?: AbortSignal): [] | [{ signal: AbortSignal }] {\n return signal ? [{ signal }] : []\n}\n\nexport function sessionHistory(session: RunSession, limit = LIMIT): RunPrompt[] {\n return session.turns\n .map((turn) => turn.prompt)\n .filter((prompt) => prompt.text.trim())\n .filter((prompt, index, prompts) => index === 0 || !promptSame(prompts[index - 1], prompt))\n .map(promptCopy)\n .slice(-limit)\n}\n\nexport function sessionVariant(session: RunSession, model: RunInput[\"model\"]): string | undefined {\n if (!model) return\n if (session.model?.providerID === model.providerID && session.model.modelID === model.modelID) return session.variant\n\n return session.turns.findLast((turn) => turn.provider === model.providerID && turn.model === model.modelID)?.variant\n}\n", | ||
| "// Model variant resolution and persistence.\n//\n// Variants are provider-specific reasoning effort levels (e.g., \"high\", \"max\").\n// Resolution priority: CLI --variant flag > valid session history > saved preference.\n//\n// The saved variant persists across sessions in ~/.local/state/opencode/model.json\n// so your last-used variant sticks. Cycling (ctrl+t) updates both the active\n// variant and the persisted file.\nimport { createSession, sessionVariant, type RunSession, type SessionMessages } from \"./session.shared\"\nimport type { RunInput, RunProvider } from \"./types\"\nimport { cycleModelVariant, normalizeModelVariant } from \"../model-preference\"\n\nexport function modelInfo(providers: RunProvider[] | undefined, model: NonNullable<RunInput[\"model\"]>) {\n const provider = providers?.find((item) => item.id === model.providerID)\n return {\n provider: provider?.name ?? model.providerID,\n model: provider?.models[model.modelID]?.name ?? model.modelID,\n }\n}\n\nexport function formatModelLabel(\n model: NonNullable<RunInput[\"model\"]>,\n variant: string | undefined,\n providers?: RunProvider[],\n): string {\n const names = modelInfo(providers, model)\n const label = variant ? ` · ${variant}` : \"\"\n return `${names.model} · ${names.provider}${label}`\n}\n\nexport function cycleVariant(current: string | undefined, variants: string[]): string | undefined {\n return cycleModelVariant(current, variants)\n}\n\nexport function pickVariant(model: RunInput[\"model\"], input: RunSession | SessionMessages): string | undefined {\n return sessionVariant(Array.isArray(input) ? createSession(input) : input, model)\n}\n\nfunction fitVariant(value: string | undefined, variants: string[]): string | undefined {\n const normalized = normalizeModelVariant(value)\n return normalized && (variants.length === 0 || variants.includes(normalized)) ? normalized : undefined\n}\n\n// Picks the active variant. CLI flag wins, then valid session history, then the\n// saved preference. Saved and session values are dropped when the provider no\n// longer offers them.\nexport function resolveVariant(\n input: string | undefined,\n session: string | undefined,\n saved: string | undefined,\n variants: string[],\n): string | undefined {\n if (input !== undefined) {\n return normalizeModelVariant(input)\n }\n\n return fitVariant(session, variants) ?? fitVariant(saved, variants)\n}\n", | ||
| "// Theme resolution for direct interactive mode.\n//\n// Derives scrollback and footer colors from the terminal's actual palette.\n// resolveRunTheme() queries the renderer for the terminal's palette,\n// detects dark/light mode, builds a small system theme locally, and maps it to\n// the run footer + scrollback color model. Falls back to a hardcoded dark-mode\n// palette if detection fails.\nimport { RGBA, SyntaxStyle, type CliRenderer, type ColorInput, type TerminalColors } from \"@opentui/core\"\nimport type { TuiThemeCurrent } from \"@opencode-ai/plugin/v1/tui\"\nimport { ansiToRgba } from \"../theme/color\"\nimport { resolveThemeColors } from \"../theme/resolve\"\nimport { terminalMode } from \"../theme/system\"\nimport type { ThemeV1Json } from \"../theme/v1\"\nimport type { EntryKind, RunTuiConfig } from \"./types\"\n\ntype Tone = {\n body: ColorInput\n start?: ColorInput\n}\n\nexport type RunEntryTheme = Record<EntryKind, Tone>\n\nexport type RunSplashTheme = {\n left: ColorInput\n right: ColorInput\n leftShadow: ColorInput\n}\n\nexport type RunFooterTheme = {\n highlight: ColorInput\n selected: ColorInput\n selectedText: ColorInput\n warning: ColorInput\n error: ColorInput\n muted: ColorInput\n text: ColorInput\n status: ColorInput\n statusAccent: ColorInput\n shade: ColorInput\n surface: ColorInput\n pane: ColorInput\n border: ColorInput\n line: ColorInput\n}\n\nexport type RunBlockTheme = {\n text: ColorInput\n muted: ColorInput\n syntax?: SyntaxStyle\n diffRemoved: ColorInput\n diffAddedBg: ColorInput\n diffRemovedBg: ColorInput\n diffContextBg: ColorInput\n diffHighlightAdded: ColorInput\n diffHighlightRemoved: ColorInput\n diffLineNumber: ColorInput\n diffAddedLineNumberBg: ColorInput\n diffRemovedLineNumberBg: ColorInput\n}\n\nexport type RunTheme = {\n background: ColorInput\n footer: RunFooterTheme\n entry: RunEntryTheme\n splash: RunSplashTheme\n block: RunBlockTheme\n}\n\ntype ThemeColor = Exclude<keyof TuiThemeCurrent, \"thinkingOpacity\">\n\ntype SharedSyntaxTheme = TuiThemeCurrent & {\n _hasSelectedListItemText: boolean\n}\n\nexport const transparent = RGBA.fromValues(0, 0, 0, 0)\n\nfunction alpha(color: RGBA, value: number): RGBA {\n return RGBA.fromValues(color.r, color.g, color.b, Math.max(0, Math.min(1, value)))\n}\n\nfunction rgba(hex: string, value?: number): RGBA {\n const color = RGBA.fromHex(hex)\n return value === undefined ? color : alpha(color, value)\n}\n\nfunction colorMode(bg: RGBA): \"dark\" | \"light\" {\n return luminance(bg) > 0.5 ? \"light\" : \"dark\"\n}\n\nfunction luminance(color: RGBA): number {\n return 0.299 * color.r + 0.587 * color.g + 0.114 * color.b\n}\n\nfunction fade(color: RGBA, base: RGBA, fallback: number, scale: number, limit: number): RGBA {\n if (color.a === 0) {\n return RGBA.fromValues(color.r, color.g, color.b, Math.max(0, Math.min(1, fallback)))\n }\n\n const target = Math.min(limit, color.a * scale)\n const mix = Math.min(1, target / color.a)\n\n return RGBA.fromValues(\n base.r + (color.r - base.r) * mix,\n base.g + (color.g - base.g) * mix,\n base.b + (color.b - base.b) * mix,\n color.a,\n )\n}\n\nfunction tint(base: RGBA, overlay: RGBA, value: number): RGBA {\n return RGBA.fromInts(\n Math.round((base.r + (overlay.r - base.r) * value) * 255),\n Math.round((base.g + (overlay.g - base.g) * value) * 255),\n Math.round((base.b + (overlay.b - base.b) * value) * 255),\n )\n}\n\nfunction chroma(color: RGBA) {\n return Math.max(color.r, color.g, color.b) - Math.min(color.r, color.g, color.b)\n}\n\nfunction indexedPalette(colors: TerminalColors, size: number = Math.max(colors.palette.length, 16)): RGBA[] {\n return Array.from({ length: size }, (_, index) => {\n const value = colors.palette[index]\n return RGBA.fromIndex(index, value ? RGBA.fromHex(value) : ansiToRgba(index))\n })\n}\n\nfunction srgbToLinear(value: number): number {\n if (value <= 0.04045) {\n return value / 12.92\n }\n\n return ((value + 0.055) / 1.055) ** 2.4\n}\n\nfunction oklab(color: RGBA) {\n const r = srgbToLinear(color.r)\n const g = srgbToLinear(color.g)\n const b = srgbToLinear(color.b)\n\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b)\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b)\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b)\n\n return {\n l: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,\n }\n}\n\nfunction nearestIndexed(indexed: RGBA[], rgba: RGBA): RGBA {\n const target = oklab(rgba)\n const hit = indexed.reduce(\n (best, item) => {\n const sample = oklab(item)\n const dl = sample.l - target.l\n const da = sample.a - target.a\n const db = sample.b - target.b\n const dist = dl * dl * 2 + da * da + db * db\n if (dist >= best.dist) return best\n return {\n dist,\n item,\n }\n },\n {\n dist: Number.POSITIVE_INFINITY,\n item: indexed[0]!,\n },\n )\n\n return RGBA.clone(hit.item)\n}\n\nfunction paletteColor(colors: TerminalColors, index: number): RGBA {\n const value = colors.palette[index]\n return value ? RGBA.fromHex(value) : ansiToRgba(index)\n}\n\nfunction splashShadow(indexed: RGBA[], base: RGBA, overlay: RGBA, value: number): RGBA {\n const mixed = tint(base, overlay, value)\n return nearestIndexed(indexed, mixed)\n}\n\nexport function resolveTheme(theme: ThemeV1Json, pick: \"dark\" | \"light\"): TuiThemeCurrent {\n const resolved = resolveThemeColors(theme, pick, (code) => RGBA.fromIndex(code, ansiToRgba(code)))\n return {\n ...resolved.theme,\n thinkingOpacity: resolved.thinkingOpacity,\n }\n}\n\nfunction generateGrayScale(bg: RGBA, isDark: boolean, map: (rgba: RGBA) => RGBA): Record<number, RGBA> {\n const r = bg.r * 255\n const g = bg.g * 255\n const b = bg.b * 255\n const lum = 0.299 * r + 0.587 * g + 0.114 * b\n const cast = 0.25 * (1 - chroma(bg)) ** 2\n\n const gray = (level: number) => {\n const factor = level / 12\n\n if (isDark && lum < 10) {\n const value = Math.floor(factor * 0.4 * 255)\n return map(RGBA.fromInts(value, value, value))\n }\n\n if (!isDark && lum > 245) {\n const value = Math.floor(255 - factor * 0.4 * 255)\n return map(RGBA.fromInts(value, value, value))\n }\n\n const value = isDark ? lum + (255 - lum) * factor * 0.4 : lum * (1 - factor * 0.4)\n const tone = RGBA.fromInts(Math.floor(value), Math.floor(value), Math.floor(value))\n if (cast === 0) return map(tone)\n\n const ratio = lum === 0 ? 0 : value / lum\n return map(\n tint(\n tone,\n RGBA.fromInts(\n Math.floor(Math.max(0, Math.min(r * ratio, 255))),\n Math.floor(Math.max(0, Math.min(g * ratio, 255))),\n Math.floor(Math.max(0, Math.min(b * ratio, 255))),\n ),\n cast,\n ),\n )\n }\n\n return Object.fromEntries(Array.from({ length: 12 }, (_, index) => [index + 1, gray(index + 1)]))\n}\n\nfunction generateMutedTextColor(bg: RGBA, isDark: boolean, map: (rgba: RGBA) => RGBA): RGBA {\n const lum = 0.299 * bg.r * 255 + 0.587 * bg.g * 255 + 0.114 * bg.b * 255\n const gray = isDark\n ? lum < 10\n ? 180\n : Math.min(Math.floor(160 + lum * 0.3), 200)\n : lum > 245\n ? 75\n : Math.max(Math.floor(100 - (255 - lum) * 0.2), 60)\n\n return map(RGBA.fromInts(gray, gray, gray))\n}\n\nexport function generateSystem(colors: TerminalColors, pick: \"dark\" | \"light\"): ThemeV1Json {\n const bg_snapshot = RGBA.fromHex(colors.defaultBackground ?? colors.palette[0]!)\n const fg_snapshot = RGBA.fromHex(colors.defaultForeground ?? colors.palette[7]!)\n const bg = RGBA.defaultBackground(bg_snapshot)\n const fg = RGBA.defaultForeground(fg_snapshot)\n const isDark = pick === \"dark\"\n\n const color = (index: number) => paletteColor(colors, index)\n\n const grays = generateGrayScale(bg_snapshot, isDark, (rgba) => rgba)\n const textMuted = generateMutedTextColor(bg_snapshot, isDark, (rgba) => rgba)\n\n const ansi = {\n red: color(1),\n green: color(2),\n yellow: color(3),\n blue: color(4),\n magenta: color(5),\n cyan: color(6),\n red_bright: color(9),\n green_bright: color(10),\n }\n\n const diff_alpha = isDark ? 0.22 : 0.14\n const diff_context_bg = grays[2]\n const primary = ansi.cyan\n const secondary = ansi.magenta\n\n return {\n theme: {\n primary,\n secondary,\n accent: primary,\n error: ansi.red,\n warning: ansi.yellow,\n success: ansi.green,\n info: ansi.cyan,\n text: fg,\n textMuted,\n selectedListItemText: bg,\n background: alpha(bg, 0),\n backgroundPanel: grays[2],\n backgroundElement: grays[3],\n backgroundMenu: grays[3],\n borderSubtle: grays[6],\n border: grays[7],\n borderActive: grays[8],\n diffAdded: ansi.green,\n diffRemoved: ansi.red,\n diffContext: grays[7],\n diffHunkHeader: grays[7],\n diffHighlightAdded: ansi.green_bright,\n diffHighlightRemoved: ansi.red_bright,\n diffAddedBg: tint(bg_snapshot, ansi.green, diff_alpha),\n diffRemovedBg: tint(bg_snapshot, ansi.red, diff_alpha),\n diffContextBg: diff_context_bg,\n diffLineNumber: textMuted,\n diffAddedLineNumberBg: tint(diff_context_bg, ansi.green, diff_alpha),\n diffRemovedLineNumberBg: tint(diff_context_bg, ansi.red, diff_alpha),\n markdownText: fg,\n markdownHeading: fg,\n markdownLink: ansi.blue,\n markdownLinkText: ansi.cyan,\n markdownCode: ansi.green,\n markdownBlockQuote: ansi.yellow,\n markdownEmph: ansi.yellow,\n markdownStrong: fg,\n markdownHorizontalRule: grays[7],\n markdownListItem: ansi.blue,\n markdownListEnumeration: ansi.cyan,\n markdownImage: ansi.blue,\n markdownImageText: ansi.cyan,\n markdownCodeBlock: fg,\n syntaxComment: textMuted,\n syntaxKeyword: ansi.magenta,\n syntaxFunction: ansi.blue,\n syntaxVariable: fg,\n syntaxString: ansi.green,\n syntaxNumber: ansi.yellow,\n syntaxType: ansi.cyan,\n syntaxOperator: ansi.cyan,\n syntaxPunctuation: fg,\n },\n }\n}\n\nfunction quantizeColor(indexed: RGBA[], rgba: RGBA): RGBA {\n if (rgba.a === 0 || rgba.intent === \"default\" || rgba.intent === \"indexed\") {\n return RGBA.clone(rgba)\n }\n\n return nearestIndexed(indexed, rgba)\n}\n\nfunction quantizeTheme(theme: TuiThemeCurrent, indexed: RGBA[]): TuiThemeCurrent {\n const resolved = Object.fromEntries(\n Object.entries(theme)\n .filter(([key]) => key !== \"thinkingOpacity\")\n .map(([key, value]) => [key, quantizeColor(indexed, value as RGBA)]),\n ) as Partial<Record<ThemeColor, RGBA>>\n\n return {\n ...(resolved as Record<ThemeColor, RGBA>),\n thinkingOpacity: theme.thinkingOpacity,\n }\n}\n\nfunction splashTheme(theme: TuiThemeCurrent, indexed: RGBA[]): RunSplashTheme {\n const left = nearestIndexed(indexed, theme.textMuted)\n const right = nearestIndexed(indexed, theme.text)\n return {\n left,\n right,\n leftShadow: splashShadow(indexed, theme.background, left, 0.14),\n }\n}\n\nfunction map(\n footerTheme: TuiThemeCurrent,\n scrollbackTheme: TuiThemeCurrent,\n splash: RunSplashTheme,\n syntax?: SyntaxStyle,\n): RunTheme {\n const footerBackground = alpha(footerTheme.background, 1)\n const footerMode = colorMode(footerBackground)\n const shade = fade(footerTheme.backgroundMenu, footerTheme.background, 0.12, 0.56, 0.72)\n const surface = fade(footerTheme.backgroundMenu, footerTheme.background, 0.18, 0.76, 0.9)\n const line = fade(footerTheme.backgroundMenu, footerTheme.background, 0.24, 0.9, 0.98)\n const statusBase = tint(footerBackground, rgba(\"#000000\"), footerMode === \"dark\" ? 0.13 : 0.06)\n const statusAccentBase =\n footerMode === \"dark\" ? tint(footerBackground, rgba(\"#ffffff\"), 0.06) : tint(statusBase, rgba(\"#000000\"), 0.04)\n const collapsedStatus = footerMode === \"dark\" && luminance(statusBase) <= 0.04\n // Pure-black backgrounds need a slight lift or the row disappears into the terminal background.\n const status = collapsedStatus ? tint(statusBase, statusAccentBase, 0.7) : statusBase\n const statusAccent = collapsedStatus ? tint(status, rgba(\"#ffffff\"), 0.06) : statusAccentBase\n\n return {\n background: footerTheme.background,\n footer: {\n highlight: footerTheme.primary,\n selected: footerTheme.backgroundElement,\n selectedText: footerTheme.selectedListItemText,\n warning: footerTheme.warning,\n error: footerTheme.error,\n muted: footerTheme.textMuted,\n text: footerTheme.text,\n status,\n statusAccent,\n shade,\n surface,\n pane: footerTheme.backgroundMenu,\n border: footerTheme.border,\n line,\n },\n entry: {\n system: {\n body: scrollbackTheme.textMuted,\n },\n user: {\n body: scrollbackTheme.primary,\n },\n assistant: {\n body: scrollbackTheme.text,\n },\n reasoning: {\n body: scrollbackTheme.textMuted,\n },\n tool: {\n body: scrollbackTheme.text,\n start: scrollbackTheme.textMuted,\n },\n error: {\n body: scrollbackTheme.error,\n },\n },\n splash,\n block: {\n text: scrollbackTheme.text,\n muted: scrollbackTheme.textMuted,\n syntax,\n diffRemoved: scrollbackTheme.diffRemoved,\n diffAddedBg: transparent,\n diffRemovedBg: transparent,\n diffContextBg: transparent,\n diffHighlightAdded: scrollbackTheme.diffHighlightAdded,\n diffHighlightRemoved: scrollbackTheme.diffHighlightRemoved,\n diffLineNumber: scrollbackTheme.diffLineNumber,\n diffAddedLineNumberBg: scrollbackTheme.diffAddedLineNumberBg,\n diffRemovedLineNumberBg: scrollbackTheme.diffRemovedLineNumberBg,\n },\n }\n}\n\nconst seed = {\n highlight: RGBA.fromIndex(6, rgba(\"#38bdf8\")),\n muted: RGBA.fromIndex(8, rgba(\"#64748b\")),\n text: RGBA.defaultForeground(rgba(\"#f8fafc\")),\n panel: rgba(\"#0f172a\"),\n success: RGBA.fromIndex(2, rgba(\"#22c55e\")),\n warning: RGBA.fromIndex(3, rgba(\"#f59e0b\")),\n error: RGBA.fromIndex(1, rgba(\"#ef4444\")),\n}\n\nfunction tone(body: ColorInput, start?: ColorInput): Tone {\n return {\n body,\n start,\n }\n}\n\nconst fallbackSplashIndexed = Array.from({ length: 256 }, (_, index) => RGBA.fromIndex(index))\nconst fallbackSplashLeft = RGBA.fromIndex(67)\nconst fallbackSplashRight = RGBA.fromIndex(110)\n\nexport const RUN_THEME_FALLBACK: RunTheme = {\n background: RGBA.fromValues(0, 0, 0, 0),\n footer: {\n highlight: seed.highlight,\n selected: seed.text,\n selectedText: seed.panel,\n warning: seed.warning,\n error: seed.error,\n muted: seed.muted,\n text: seed.text,\n status: tint(seed.panel, rgba(\"#000000\"), 0.12),\n statusAccent: tint(seed.panel, rgba(\"#ffffff\"), 0.06),\n shade: alpha(seed.panel, 0.68),\n surface: alpha(seed.panel, 0.86),\n pane: seed.panel,\n border: seed.muted,\n line: alpha(seed.panel, 0.96),\n },\n entry: {\n system: tone(seed.muted),\n user: tone(seed.highlight),\n assistant: tone(seed.text),\n reasoning: tone(seed.muted),\n tool: tone(seed.text, seed.muted),\n error: tone(seed.error),\n },\n splash: {\n left: fallbackSplashLeft,\n right: fallbackSplashRight,\n leftShadow: splashShadow(fallbackSplashIndexed, RGBA.fromValues(0, 0, 0, 0), fallbackSplashLeft, 0.14),\n },\n block: {\n text: seed.text,\n muted: seed.muted,\n diffRemoved: seed.error,\n diffAddedBg: alpha(seed.success, 0.18),\n diffRemovedBg: alpha(seed.error, 0.18),\n diffContextBg: alpha(seed.panel, 0.72),\n diffHighlightAdded: seed.success,\n diffHighlightRemoved: seed.error,\n diffLineNumber: seed.muted,\n diffAddedLineNumberBg: alpha(seed.success, 0.12),\n diffRemovedLineNumberBg: alpha(seed.error, 0.12),\n },\n}\n\nfunction monoTheme(mode: \"dark\" | \"light\"): RunTheme {\n const foreground = RGBA.defaultForeground(mode === \"light\" ? \"#000000\" : \"#ffffff\")\n const background = RGBA.defaultBackground(mode === \"light\" ? \"#ffffff\" : \"#000000\")\n return {\n background,\n footer: {\n highlight: foreground,\n selected: background,\n selectedText: foreground,\n warning: foreground,\n error: foreground,\n muted: foreground,\n text: foreground,\n status: background,\n statusAccent: background,\n shade: background,\n surface: background,\n pane: background,\n border: foreground,\n line: background,\n },\n entry: {\n system: tone(foreground),\n user: tone(foreground),\n assistant: tone(foreground),\n reasoning: tone(foreground),\n tool: tone(foreground),\n error: tone(foreground),\n },\n splash: {\n left: foreground,\n right: foreground,\n leftShadow: background,\n },\n block: {\n text: foreground,\n muted: foreground,\n diffRemoved: foreground,\n diffAddedBg: background,\n diffRemovedBg: background,\n diffContextBg: background,\n diffHighlightAdded: foreground,\n diffHighlightRemoved: foreground,\n diffLineNumber: foreground,\n diffAddedLineNumberBg: background,\n diffRemovedLineNumberBg: background,\n },\n }\n}\n\nexport const RUN_THEME_MONO = monoTheme(\"dark\")\nconst RUN_THEME_MONO_LIGHT = monoTheme(\"light\")\n\nexport async function resolveRunTheme(\n renderer: CliRenderer,\n config?: RunTuiConfig[\"theme\"],\n mono = false,\n): Promise<RunTheme> {\n if (mono) {\n const mode =\n config?.mode === \"light\" || config?.mode === \"dark\"\n ? config.mode\n : (renderer.themeMode ?? (await renderer.waitForThemeMode(300)))\n return mode === \"light\" ? RUN_THEME_MONO_LIGHT : RUN_THEME_MONO\n }\n try {\n const colors = await renderer.getPalette({\n size: 256,\n })\n const bg = colors.defaultBackground ?? colors.palette[0]\n if (!bg) {\n return RUN_THEME_FALLBACK\n }\n\n // Palette-only terminal reloads can leave renderer.themeMode stale, but\n // ANSI slot zero is not the terminal background when OSC 11 is absent.\n const pick =\n config?.mode === \"dark\" || config?.mode === \"light\"\n ? config.mode\n : (terminalMode(colors) ?? renderer.themeMode ?? colorMode(RGBA.fromHex(bg)))\n const { generateSyntax } = await import(\"../theme\")\n const indexed = indexedPalette(colors, 256)\n const footerTheme = resolveTheme(generateSystem(colors, pick), pick)\n const scrollbackTheme = quantizeTheme(footerTheme, indexed)\n const syntaxTheme: SharedSyntaxTheme = {\n ...scrollbackTheme,\n _hasSelectedListItemText: true,\n }\n return map(footerTheme, scrollbackTheme, splashTheme(scrollbackTheme, indexed), generateSyntax(syntaxTheme))\n } catch {\n return RUN_THEME_FALLBACK\n }\n}\n", | ||
| "import {\n BoxRenderable,\n CodeRenderable,\n MarkdownRenderable,\n RGBA,\n Renderable,\n StyledText,\n TextRenderable,\n TextTableRenderable,\n isStyledText,\n stringToStyledText,\n type BorderCharacters,\n type CliRendererExternalOutputEvent,\n type TreeSitterClient,\n} from \"@opentui/core\"\n\nconst prefixes: Record<number, string> = {\n 0x2192: \"->\",\n 0x2190: \"<-\",\n 0x2731: \"*\",\n 0x2699: \"*\",\n 0x2716: \"!\",\n 0x2717: \"!\",\n 0x25c8: \"*\",\n 0x25c9: \"*\",\n 0x27f3: \"*\",\n}\n\nconst markdown: Record<number, string> = {\n ...prefixes,\n 0x00a0: \" \",\n 0x00b7: \"-\",\n 0x2010: \"-\",\n 0x2011: \"-\",\n 0x2012: \"-\",\n 0x2013: \"-\",\n 0x2014: \"--\",\n 0x2018: \"'\",\n 0x2019: \"'\",\n 0x201c: '\"',\n 0x201d: '\"',\n 0x2022: \"*\",\n 0x2026: \"...\",\n 0x2191: \"up\",\n 0x2193: \"down\",\n}\n\nconst asciiBorder: BorderCharacters = {\n topLeft: \"+\",\n topRight: \"+\",\n bottomLeft: \"+\",\n bottomRight: \"+\",\n horizontal: \"-\",\n vertical: \"|\",\n topT: \"+\",\n bottomT: \"+\",\n leftT: \"+\",\n rightT: \"+\",\n cross: \"+\",\n}\n\nconst hooked = new WeakSet<Renderable>()\n\nexport const monoMarkdownTableOptions = {\n style: \"columns\" as const,\n widthMode: \"content\" as const,\n borders: false,\n}\n\nexport function monoMarkdownRenderable(renderable: MarkdownRenderable): void {\n monoRenderable(renderable)\n}\n\nfunction monoRenderable(renderable: Renderable): void {\n if (hooked.has(renderable)) return\n hooked.add(renderable)\n // Markdown reconciles nested lists and tables without calling renderNode.\n // Hook the actual tree so future descendants are transformed before layout.\n const add = renderable.add.bind(renderable)\n renderable.add = (child, index) => {\n if (child instanceof Renderable) monoRenderable(child)\n return add(child, index)\n }\n\n if (renderable instanceof BoxRenderable) renderable.customBorderChars = asciiBorder\n if (renderable instanceof CodeRenderable) monoCode(renderable)\n if (renderable instanceof TextRenderable) renderable.content = monoStyledText(renderable.content)\n if (renderable instanceof TextTableRenderable) monoTable(renderable)\n renderable.getChildren().forEach(monoRenderable)\n}\n\nfunction monoCode(renderable: CodeRenderable): void {\n const onChunks = renderable.onChunks\n const prose = renderable.filetype === \"markdown\" && onChunks !== undefined\n renderable.onChunks = async (chunks, context) => monoChunks((await onChunks?.(chunks, context)) ?? chunks)\n renderable.treeSitterClient = monoTreeSitter(renderable.treeSitterClient)\n\n const initialDescriptor = Object.getOwnPropertyDescriptor(CodeRenderable.prototype, \"initialStyledText\")\n const contentDescriptor = Object.getOwnPropertyDescriptor(CodeRenderable.prototype, \"content\")\n if (!initialDescriptor?.set || !contentDescriptor?.get || !contentDescriptor.set) return\n const initialSetter = initialDescriptor.set.bind(renderable)\n const contentGetter = contentDescriptor.get.bind(renderable)\n const contentSetter = contentDescriptor.set.bind(renderable)\n const initial = Reflect.get(renderable, \"_initialStyledText\")\n Object.defineProperty(renderable, \"initialStyledText\", {\n configurable: true,\n set(value: StyledText | undefined) {\n initialSetter(value ? monoStyledText(value) : value)\n },\n })\n Object.defineProperty(renderable, \"content\", {\n configurable: true,\n get: contentGetter,\n set(value: string) {\n if (!prose || !isStyledText(Reflect.get(renderable, \"_initialStyledText\"))) {\n renderable.drawUnstyledText = true\n renderable.initialStyledText = stringToStyledText(value)\n }\n contentSetter(value)\n },\n })\n\n if (isStyledText(initial)) {\n renderable.initialStyledText = initial\n } else {\n renderable.drawUnstyledText = true\n renderable.initialStyledText = stringToStyledText(renderable.content)\n }\n if (!renderable.drawUnstyledText) return\n\n // Refresh the eager buffer with the transformed initial text. Highlighted\n // chunks continue through onChunks without changing the Markdown source.\n const content = renderable.content\n renderable.content = \"\"\n renderable.content = content\n}\n\nfunction monoTreeSitter(client: TreeSitterClient): TreeSitterClient {\n return new Proxy(client, {\n get(target, property) {\n if (property !== \"highlightOnce\") return Reflect.get(target, property, target)\n // Keep parser failures on the chunk path instead of OpenTUI's raw-text fallback.\n return (...args: Parameters<TreeSitterClient[\"highlightOnce\"]>) =>\n target.highlightOnce(...args).catch(() => ({ highlights: [] }))\n },\n })\n}\n\nfunction monoTable(renderable: TextTableRenderable): void {\n const descriptor = Object.getOwnPropertyDescriptor(TextTableRenderable.prototype, \"content\")\n if (!descriptor?.get || !descriptor.set) return\n const cells = new WeakMap<StyledText[\"chunks\"], StyledText[\"chunks\"]>()\n const content = renderable.content\n Object.defineProperty(renderable, \"content\", {\n configurable: true,\n get: () => descriptor.get!.call(renderable),\n set: (value: TextTableRenderable[\"content\"]) => {\n descriptor.set!.call(\n renderable,\n value.map((row) =>\n row.map((cell) => {\n if (!cell) return cell\n const cached = cells.get(cell)\n if (cached) return cached\n const next = monoChunks(cell)\n cells.set(cell, next)\n return next\n }),\n ),\n )\n },\n })\n renderable.content = content\n}\n\nfunction monoStyledText(value: StyledText): StyledText {\n return new StyledText(monoChunks(value.chunks))\n}\n\nfunction monoChunks(value: StyledText[\"chunks\"]): StyledText[\"chunks\"] {\n return value.map((chunk) => ({ ...chunk, text: monoText(chunk.text) }))\n}\n\nfunction monoText(value: string): string {\n return value.replace(/[^\\t\\n\\x20-\\x7e]/gu, (char) => markdown[char.codePointAt(0)!] ?? \"?\")\n}\n\nexport function monoSnapshot(event: CliRendererExternalOutputEvent): void {\n const buffers = event.snapshot.buffers\n const chars = buffers.char\n for (let index = 0; index < chars.length; index += 1) {\n const point = chars[index]\n if (point <= 0x7f) continue\n const offset = index * 4\n event.snapshot.setCell(\n index % event.snapshot.width,\n Math.floor(index / event.snapshot.width),\n monoCell(point),\n RGBA.fromArray(buffers.fg.subarray(offset, offset + 4)),\n RGBA.fromArray(buffers.bg.subarray(offset, offset + 4)),\n buffers.attributes[index],\n )\n }\n}\n\nfunction monoCell(point: number): string {\n const kind = point >>> 30\n if (kind === 2) return \"?\"\n if (kind === 3) return \" \"\n if (point === 0x2500) return \"-\"\n if (point === 0x2502) return \"|\"\n return markdown[point]?.[0] ?? \"?\"\n}\n\nexport function monoPrefix(value: string, mono: boolean): string {\n if (!mono) return value\n const point = value.codePointAt(0)\n if (point === undefined) return value\n const prefix = prefixes[point]\n if (!prefix) return value\n return prefix + value.slice(point > 0xffff ? 2 : 1)\n}\n\nexport function monoToolText(value: string, mono: boolean): string {\n const result = monoPrefix(value, mono)\n if (!mono) return result\n const separator = ` ${String.fromCodePoint(0xb7)} `\n const index = result.lastIndexOf(separator)\n if (index === -1) return result\n const head = result.slice(0, index)\n if (!head.includes(\" completed\") && head !== \"patch\" && !/^\\d+ questions$/.test(head)) return result\n return result.slice(0, index) + \" - \" + result.slice(index + separator.length)\n}\n\nexport function monoShortcut(value: string, mono: boolean): string {\n if (!mono) return value\n return value\n .replaceAll(String.fromCodePoint(0x2192), \"right\")\n .replaceAll(String.fromCodePoint(0x2190), \"left\")\n .replaceAll(String.fromCodePoint(0x2191), \"up\")\n .replaceAll(String.fromCodePoint(0x2193), \"down\")\n}\n\nexport function monoTruncate(value: string, width: number, mono: boolean): string {\n if (!mono || value.length <= width) return value\n if (width <= 3) return \".\".repeat(Math.max(0, width))\n return value.slice(0, width - 3) + \"...\"\n}\n\nexport function monoTruncateMiddle(value: string, width: number, mono: boolean): string {\n if (!mono || value.length <= width) return value\n if (width <= 3) return \".\".repeat(Math.max(0, width))\n const available = width - 3\n const left = Math.ceil(available / 2)\n return value.slice(0, left) + \"...\" + value.slice(value.length - (available - left))\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "9A6BC936A112BE8D64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/prompt/display.ts"], | ||
| "sourcesContent": [ | ||
| "import { stringWidth } from \"../util/string-width\"\n\nconst graphemes = new Intl.Segmenter(undefined, { granularity: \"grapheme\" })\n\nexport function promptOffsetWidth(value: string) {\n let width = 0\n for (const part of graphemes.segment(value)) {\n // Textarea offsets count newlines as one position; terminal width counts them as zero.\n width += part.segment === \"\\n\" ? 1 : stringWidth(part.segment)\n }\n return width\n}\n\nfunction displayOffsetIndex(value: string, offset: number) {\n if (offset <= 0) return 0\n\n let width = 0\n for (const part of graphemes.segment(value)) {\n const next = width + promptOffsetWidth(part.segment)\n if (next > offset) return part.index\n width = next\n }\n\n return value.length\n}\n\nexport function displaySlice(value: string, start = 0, end = promptOffsetWidth(value)) {\n return value.slice(displayOffsetIndex(value, start), displayOffsetIndex(value, end))\n}\n\nexport function displayCharAt(value: string, offset: number) {\n let width = 0\n for (const part of graphemes.segment(value)) {\n const next = width + promptOffsetWidth(part.segment)\n if (offset === width || offset < next) return part.segment\n width = next\n }\n}\n\nexport function mentionTriggerIndex(value: string, offset = promptOffsetWidth(value)) {\n const text = displaySlice(value, 0, offset)\n const index = text.lastIndexOf(\"@\")\n if (index === -1) return\n\n const before = index === 0 ? undefined : text[index - 1]\n const query = text.slice(index)\n if ((before === undefined || /\\s/.test(before)) && !/\\s/.test(query)) {\n return promptOffsetWidth(text.slice(0, index))\n }\n}\n" | ||
| ], | ||
| "mappings": ";oDAEA,IAAM,EAAY,IAAI,KAAK,UAAU,OAAW,CAAE,YAAa,UAAW,CAAC,EAEpE,SAAS,CAAiB,CAAC,EAAe,CAC/C,IAAI,EAAQ,EACZ,QAAW,KAAQ,EAAU,QAAQ,CAAK,EAExC,GAAS,EAAK,UAAY;AAAA,EAAO,EAAI,EAAY,EAAK,OAAO,EAE/D,OAAO,EAGT,SAAS,CAAkB,CAAC,EAAe,EAAgB,CACzD,GAAI,GAAU,EAAG,MAAO,GAExB,IAAI,EAAQ,EACZ,QAAW,KAAQ,EAAU,QAAQ,CAAK,EAAG,CAC3C,IAAM,EAAO,EAAQ,EAAkB,EAAK,OAAO,EACnD,GAAI,EAAO,EAAQ,OAAO,EAAK,MAC/B,EAAQ,EAGV,OAAO,EAAM,OAGR,SAAS,CAAY,CAAC,EAAe,EAAQ,EAAG,EAAM,EAAkB,CAAK,EAAG,CACrF,OAAO,EAAM,MAAM,EAAmB,EAAO,CAAK,EAAG,EAAmB,EAAO,CAAG,CAAC,EAG9E,SAAS,CAAa,CAAC,EAAe,EAAgB,CAC3D,IAAI,EAAQ,EACZ,QAAW,KAAQ,EAAU,QAAQ,CAAK,EAAG,CAC3C,IAAM,EAAO,EAAQ,EAAkB,EAAK,OAAO,EACnD,GAAI,IAAW,GAAS,EAAS,EAAM,OAAO,EAAK,QACnD,EAAQ,GAIL,SAAS,CAAmB,CAAC,EAAe,EAAS,EAAkB,CAAK,EAAG,CACpF,IAAM,EAAO,EAAa,EAAO,EAAG,CAAM,EACpC,EAAQ,EAAK,YAAY,GAAG,EAClC,GAAI,IAAU,GAAI,OAElB,IAAM,EAAS,IAAU,EAAI,OAAY,EAAK,EAAQ,GAChD,EAAQ,EAAK,MAAM,CAAK,EAC9B,IAAK,IAAW,QAAa,KAAK,KAAK,CAAM,IAAM,CAAC,KAAK,KAAK,CAAK,EACjE,OAAO,EAAkB,EAAK,MAAM,EAAG,CAAK,CAAC", | ||
| "debugId": "32603D98295814F964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/database/migration/20260707120000_migrate_prelaunch_v2_state.ts"], | ||
| "sourcesContent": [ | ||
| "import { sql } from \"drizzle-orm\"\nimport { Effect, Schema } from \"effect\"\nimport type { DatabaseMigration } from \"../migration\"\n\nconst decodeJson = Schema.decodeUnknownSync(Schema.UnknownFromJsonString)\nconst isObject = Schema.is(Schema.Record(Schema.String, Schema.Unknown))\n\nexport default {\n id: \"20260707120000_migrate_prelaunch_v2_state\",\n up(tx) {\n return Effect.gen(function* () {\n yield* tx.run(\n sql`DELETE FROM session_message WHERE type = 'compaction' AND json_extract(data, '$.status') = 'queued'`,\n )\n const messages = yield* tx.all<{ id: string; type: string; data: string }>(\n sql`SELECT id, type, data FROM session_message WHERE type IN ('skill', 'shell', 'assistant', 'compaction', 'synthetic')`,\n )\n for (const row of messages) {\n const data = object(decodeJson(row.data))\n yield* tx.run(\n sql`UPDATE session_message SET data = ${JSON.stringify(messageData(row.type, data))} WHERE id = ${row.id}`,\n )\n }\n\n yield* tx.run(sql`DELETE FROM event WHERE type = 'session.compaction.delta.1'`)\n const events = yield* tx.all<{ id: string; aggregateID: string; seq: number; type: string; data: string }>(sql`\n SELECT id, aggregate_id as aggregateID, seq, type, data\n FROM event\n WHERE type IN (\n 'session.skill.activated.1',\n 'session.skill.activated.2',\n 'session.compaction.started.1',\n 'session.compaction.started.2',\n 'session.compaction.ended.1',\n 'session.compaction.failed.1',\n 'session.compaction.failed.2',\n 'session.revert.staged.1',\n 'session.revert.staged.2'\n )\n ORDER BY aggregate_id, seq\n `)\n const compactionReasons = new Map<string, \"auto\" | \"manual\">()\n for (const row of events) {\n const data = object(decodeJson(row.data))\n if (row.type.startsWith(\"session.compaction.ended.\")) {\n compactionReasons.delete(row.aggregateID)\n continue\n }\n const event = eventData(row.type, data, compactionReasons.get(row.aggregateID))\n if (row.type.startsWith(\"session.compaction.started.\"))\n compactionReasons.set(row.aggregateID, event.data.reason === \"auto\" ? \"auto\" : \"manual\")\n if (row.type.startsWith(\"session.compaction.failed.\")) compactionReasons.delete(row.aggregateID)\n yield* tx.run(\n sql`UPDATE event SET type = ${event.type}, data = ${JSON.stringify(event.data)} WHERE id = ${row.id}`,\n )\n }\n })\n },\n} satisfies DatabaseMigration.Migration\n\nfunction messageData(type: string, data: Record<string, unknown>) {\n if (type === \"skill\")\n return defined({\n metadata: data.metadata,\n time: data.time,\n skill: data.skill ?? data.id ?? data.name,\n name: data.name,\n text: data.text,\n })\n if (type === \"shell\") {\n const shell = object(data.shell)\n return defined({\n metadata: data.metadata,\n time: data.time,\n shellID: data.shellID ?? shell.id,\n command: data.command ?? shell.command,\n status: data.status ?? shell.status,\n exit: data.exit ?? shell.exit,\n output: data.output,\n })\n }\n if (type === \"assistant\")\n return defined({\n metadata: data.metadata,\n time: data.time,\n agent: data.agent,\n model: data.model,\n content: Array.isArray(data.content) ? data.content.map(assistantContent) : data.content,\n snapshot: data.snapshot,\n finish: data.finish,\n cost: data.cost,\n tokens: data.tokens,\n error: data.error,\n retry: data.retry,\n })\n if (type === \"compaction\") {\n if (data.status === \"failed\")\n return defined({\n metadata: data.metadata,\n time: data.time,\n status: data.status,\n reason: data.reason,\n error: data.error ?? genericCompactionError,\n })\n return defined({\n metadata: data.metadata,\n time: data.time,\n status: data.status,\n reason: data.reason,\n summary: data.summary,\n recent: data.recent,\n })\n }\n if (type === \"synthetic\")\n return defined({ metadata: data.metadata, time: data.time, text: data.text, description: data.description })\n const { sessionID: _, ...current } = data\n return current\n}\n\nfunction assistantContent(value: unknown) {\n const content = object(value)\n if (content.type === \"text\") return defined({ type: content.type, text: content.text })\n if (content.type === \"reasoning\")\n return defined({ type: content.type, text: content.text, state: content.state, time: content.time })\n if (content.type !== \"tool\") return content\n return defined({\n type: content.type,\n id: content.id,\n name: content.name,\n executed: content.executed,\n providerState: content.providerState,\n providerResultState: content.providerResultState,\n state: toolState(content.state),\n time: content.time,\n })\n}\n\nfunction toolState(value: unknown) {\n const state = object(value)\n if (state.status === \"pending\" || state.status === \"streaming\")\n return defined({ status: \"streaming\", input: state.input })\n if (state.status === \"running\")\n return defined({ status: state.status, input: state.input, structured: state.structured, content: state.content })\n if (state.status === \"completed\")\n return defined({\n status: state.status,\n input: state.input,\n structured: state.structured,\n content: state.content,\n result: state.result,\n })\n if (state.status === \"error\")\n return defined({\n status: state.status,\n input: state.input,\n structured: state.structured,\n content: state.content,\n error: state.error,\n result: state.result,\n })\n return state\n}\n\nfunction eventData(type: string, data: Record<string, unknown>, compactionReason?: \"auto\" | \"manual\") {\n if (type.startsWith(\"session.skill.activated.\"))\n return {\n type: \"session.skill.activated.1\",\n data: defined({ sessionID: data.sessionID, id: data.id ?? data.name, name: data.name, text: data.text }),\n }\n if (type.startsWith(\"session.compaction.started.\"))\n return {\n type: \"session.compaction.started.1\",\n data: defined({\n sessionID: data.sessionID,\n reason: data.reason,\n recent: data.recent ?? \"\",\n inputID: data.inputID,\n }),\n }\n if (type.startsWith(\"session.compaction.failed.\"))\n return {\n type: \"session.compaction.failed.1\",\n data: defined({\n sessionID: data.sessionID,\n reason: data.reason ?? compactionReason ?? \"manual\",\n error: data.error ?? genericCompactionError,\n inputID: data.inputID,\n }),\n }\n const revert = object(data.revert)\n return {\n type: \"session.revert.staged.1\",\n data: defined({\n sessionID: data.sessionID,\n revert: defined({\n messageID: revert.messageID,\n partID: revert.partID,\n snapshot: revert.snapshot,\n files: Array.isArray(revert.files)\n ? revert.files.map((value) => {\n const file = object(value)\n return defined({\n file: file.file ?? file.path,\n patch: file.patch,\n additions: file.additions,\n deletions: file.deletions,\n status: file.status,\n })\n })\n : undefined,\n }),\n }),\n }\n}\n\nconst genericCompactionError = {\n type: \"compaction.failed\",\n message: \"Compaction failed before recording an error\",\n}\n\nfunction object(value: unknown): Record<string, unknown> {\n return isObject(value) ? value : {}\n}\n\nfunction defined(value: Record<string, unknown>) {\n return Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== undefined))\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "8AE63F2C6C4A3F1C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../simulation/src/manifest.ts", "../simulation/src/protocol/index.ts", "../simulation/src/control-server.ts"], | ||
| "sourcesContent": [ | ||
| "import { homedir } from \"node:os\"\nimport { isAbsolute, join } from \"node:path\"\nimport { Config, Effect, FileSystem, Schema } from \"effect\"\nimport { PositiveInt } from \"@opencode-ai/core/schema\"\n\nconst InstanceName = Schema.String.check(\n Schema.makeFilter((value) =>\n /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(value) ? undefined : \"a valid Drive instance name\",\n ),\n)\n\nconst Endpoint = Schema.String.check(\n Schema.makeFilter((value) => {\n if (!URL.canParse(value)) return \"a loopback WebSocket endpoint with an explicit port\"\n const endpoint = new URL(value)\n const port = Number(endpoint.port)\n return endpoint.protocol === \"ws:\" && endpoint.hostname === \"127.0.0.1\" && Number.isInteger(port) && port >= 1\n ? undefined\n : \"a loopback WebSocket endpoint with an explicit port\"\n }),\n)\n\nconst AbsolutePath = Schema.String.check(\n Schema.makeFilter((value) => (isAbsolute(value) ? undefined : \"an absolute path\")),\n)\n\nexport const Manifest = Schema.Struct({\n endpoints: Schema.Struct({\n ui: Endpoint,\n backend: Endpoint,\n }),\n viewport: Schema.optionalKey(\n Schema.Struct({\n cols: PositiveInt,\n rows: PositiveInt,\n }),\n ),\n recording: Schema.optionalKey(\n Schema.Struct({\n timeline: AbsolutePath,\n }),\n ),\n})\nexport interface Manifest extends Schema.Schema.Type<typeof Manifest> {}\n\nexport class ResolveError extends Schema.TaggedErrorClass<ResolveError>()(\"DriveManifest.ResolveError\", {\n reason: Schema.Literals([\"config\", \"not-found\", \"read\", \"decode\"]),\n path: Schema.optionalKey(Schema.String),\n message: Schema.String,\n cause: Schema.Defect(),\n}) {}\n\nexport const defaults: Manifest = {\n endpoints: {\n ui: \"ws://127.0.0.1:40900\",\n backend: \"ws://127.0.0.1:40950\",\n },\n}\n\nconst decode = Schema.decodeUnknownEffect(Schema.fromJsonString(Manifest))\n\nconst configError = (cause: unknown) =>\n new ResolveError({\n reason: \"config\",\n message: `Invalid Drive configuration: ${String(cause)}`,\n cause,\n })\n\nexport const resolve = Effect.fn(\"DriveManifest.resolve\")(function* () {\n const name = yield* Config.schema(InstanceName, \"OPENCODE_DRIVE\").pipe(Effect.mapError(configError))\n if (name === \"1\") return defaults\n\n const state = yield* Config.string(\"XDG_STATE_HOME\").pipe(\n Config.withDefault(join(homedir(), \".local\", \"state\")),\n Effect.mapError(configError),\n )\n const directory = yield* Config.string(\"DRIVE_REGISTRY_DIR\").pipe(\n Config.withDefault(join(state, \"opencode-drive\", \"instances\")),\n Effect.mapError(configError),\n )\n const file = join(directory, `${name}.json`)\n const fs = yield* FileSystem.FileSystem\n const contents = yield* fs.readFileString(file).pipe(\n Effect.mapError(\n (cause) =>\n new ResolveError({\n reason: cause.reason._tag === \"NotFound\" ? \"not-found\" : \"read\",\n path: file,\n message:\n cause.reason._tag === \"NotFound\"\n ? `Drive manifest not found: ${file}`\n : `Failed to read Drive manifest: ${file}: ${cause.message}`,\n cause,\n }),\n ),\n )\n return yield* decode(contents).pipe(\n Effect.mapError(\n (cause) =>\n new ResolveError({\n reason: \"decode\",\n path: file,\n message: `Invalid Drive manifest: ${file}: ${cause.message}`,\n cause,\n }),\n ),\n )\n})\n\nexport * as DriveManifest from \"./manifest\"\n", | ||
| "import { Effect, Schema } from \"effect\"\n\nconst JsonRpcID = Schema.Union([Schema.String, Schema.Number, Schema.Null])\ntype Json = Schema.Schema.Type<typeof Schema.Json>\n\nexport namespace JsonRpc {\n export const RequestFields = {\n jsonrpc: Schema.Literal(\"2.0\"),\n id: Schema.optional(JsonRpcID),\n }\n export const Request = Schema.Struct({\n ...RequestFields,\n method: Schema.String,\n params: Schema.optional(Schema.Json),\n })\n export interface Request extends Schema.Schema.Type<typeof Request> {}\n\n export const ErrorObject = Schema.Struct({\n code: Schema.Number,\n message: Schema.String,\n data: Schema.optional(Schema.Json),\n })\n\n export const Response = Schema.Struct({\n jsonrpc: Schema.Literal(\"2.0\"),\n id: JsonRpcID,\n result: Schema.optional(Schema.Json),\n error: Schema.optional(ErrorObject),\n })\n export interface Response extends Schema.Schema.Type<typeof Response> {}\n\n export const decodeRequest = Schema.decodeUnknownSync(Request)\n\n export function success(id: Request[\"id\"], result: unknown): Response | undefined {\n if (id === undefined) return undefined\n return { jsonrpc: \"2.0\", id, result: result as Json }\n }\n\n export function failure(id: Request[\"id\"], error: unknown): Response {\n return {\n jsonrpc: \"2.0\",\n id: id ?? null,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : String(error),\n },\n }\n }\n}\n\nexport namespace Handshake {\n export const ProtocolVersion = Schema.Literal(1)\n export type ProtocolVersion = Schema.Schema.Type<typeof ProtocolVersion>\n\n export const Capability = Schema.NonEmptyString\n export type Capability = Schema.Schema.Type<typeof Capability>\n\n export const EndpointRole = Schema.Literals([\"ui\", \"backend\"])\n export type EndpointRole = Schema.Schema.Type<typeof EndpointRole>\n\n export const Identity = Schema.Struct({\n name: Schema.NonEmptyString,\n version: Schema.NonEmptyString,\n })\n export interface Identity extends Schema.Schema.Type<typeof Identity> {}\n\n export const Params = Schema.Struct({\n client: Identity,\n expectedRole: EndpointRole,\n offeredVersions: Schema.Array(Schema.Int.check(Schema.isGreaterThan(0))).check(\n Schema.isMinLength(1),\n Schema.isUnique(),\n ),\n requiredCapabilities: Schema.Array(Capability).check(Schema.isUnique()),\n optionalCapabilities: Schema.Array(Capability).check(Schema.isUnique()),\n })\n export interface Params extends Schema.Schema.Type<typeof Params> {}\n\n export const Response = Schema.Struct({\n protocolVersion: ProtocolVersion,\n role: EndpointRole,\n server: Identity,\n capabilities: Schema.Array(Capability),\n })\n export interface Response extends Schema.Schema.Type<typeof Response> {}\n\n export const Request = Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literal(\"simulation.handshake\"),\n params: Params,\n })\n export interface Request extends Schema.Schema.Type<typeof Request> {}\n\n export interface DispatchAction {\n readonly role: EndpointRole\n readonly server: Identity\n readonly capabilities: ReadonlyArray<Capability>\n }\n\n export class RoleMismatchError extends Schema.TaggedErrorClass<RoleMismatchError>()(\n \"SimulationHandshake.RoleMismatchError\",\n {\n expected: EndpointRole,\n actual: EndpointRole,\n message: Schema.String,\n },\n ) {}\n\n export class UnsupportedProtocolError extends Schema.TaggedErrorClass<UnsupportedProtocolError>()(\n \"SimulationHandshake.UnsupportedProtocolError\",\n {\n offered: Schema.Array(Schema.Number),\n supported: Schema.Array(ProtocolVersion),\n message: Schema.String,\n },\n ) {}\n\n export class MissingCapabilityError extends Schema.TaggedErrorClass<MissingCapabilityError>()(\n \"SimulationHandshake.MissingCapabilityError\",\n {\n missing: Schema.Array(Capability),\n message: Schema.String,\n },\n ) {}\n\n export function dispatch(action: DispatchAction, params: Params) {\n return Effect.gen(function* () {\n if (params.expectedRole !== action.role) {\n return yield* Effect.fail(\n new RoleMismatchError({\n expected: params.expectedRole,\n actual: action.role,\n message: `Expected simulation endpoint role ${params.expectedRole}, received ${action.role}`,\n }),\n )\n }\n if (!params.offeredVersions.includes(1)) {\n return yield* Effect.fail(\n new UnsupportedProtocolError({\n offered: params.offeredVersions,\n supported: [1],\n message: \"No mutually supported simulation protocol version\",\n }),\n )\n }\n const installed = new Set(action.capabilities)\n const missing = params.requiredCapabilities.filter((capability) => !installed.has(capability))\n if (missing.length > 0) {\n return yield* Effect.fail(\n new MissingCapabilityError({\n missing,\n message: `Simulation endpoint is missing required capabilities: ${missing.join(\", \")}`,\n }),\n )\n }\n return {\n protocolVersion: 1,\n role: action.role,\n server: action.server,\n capabilities: Array.from(installed),\n } satisfies Response\n })\n }\n}\n\nexport namespace Frontend {\n export const Capabilities = [\n \"ui.type\",\n \"ui.press\",\n \"ui.enter\",\n \"ui.arrow\",\n \"ui.focus\",\n \"ui.click\",\n \"ui.click.semantic\",\n \"ui.resize\",\n \"ui.matches\",\n \"ui.screenshot\",\n \"ui.state\",\n \"ui.snapshot\",\n \"ui.capture\",\n \"ui.recording.finish\",\n ] as const satisfies ReadonlyArray<Handshake.Capability>\n\n export const KeyModifiers = Schema.Struct({\n ctrl: Schema.optional(Schema.Boolean),\n shift: Schema.optional(Schema.Boolean),\n meta: Schema.optional(Schema.Boolean),\n super: Schema.optional(Schema.Boolean),\n hyper: Schema.optional(Schema.Boolean),\n })\n export interface KeyModifiers extends Schema.Schema.Type<typeof KeyModifiers> {}\n\n export const SemanticClickTarget = Schema.Struct({\n id: Schema.NonEmptyString,\n instance: Schema.optionalKey(Schema.NonEmptyString),\n element: Schema.Number.check(Schema.isInt(), Schema.isGreaterThan(0)),\n })\n export interface SemanticClickTarget extends Schema.Schema.Type<typeof SemanticClickTarget> {}\n\n export const Action = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"ui.type\"), text: Schema.String }),\n Schema.Struct({ type: Schema.Literal(\"ui.press\"), key: Schema.String, modifiers: Schema.optional(KeyModifiers) }),\n Schema.Struct({ type: Schema.Literal(\"ui.enter\") }),\n Schema.Struct({ type: Schema.Literal(\"ui.arrow\"), direction: Schema.Literals([\"up\", \"down\", \"left\", \"right\"]) }),\n Schema.Struct({ type: Schema.Literal(\"ui.focus\"), target: Schema.Number }),\n Schema.Struct({\n type: Schema.Literal(\"ui.click\"),\n target: Schema.Number,\n x: Schema.Number,\n y: Schema.Number,\n semantic: Schema.optionalKey(SemanticClickTarget),\n }),\n Schema.Struct({ type: Schema.Literal(\"ui.resize\"), cols: Schema.Number, rows: Schema.Number }),\n ])\n export type Action = Schema.Schema.Type<typeof Action>\n\n export const Element = Schema.Struct({\n id: Schema.String,\n num: Schema.Number,\n x: Schema.Number,\n y: Schema.Number,\n width: Schema.Number,\n height: Schema.Number,\n focusable: Schema.Boolean,\n focused: Schema.Boolean,\n clickable: Schema.Boolean,\n editor: Schema.Boolean,\n })\n export interface Element extends Schema.Schema.Type<typeof Element> {}\n\n export const State = Schema.Struct({\n focused: Schema.Struct({\n renderable: Schema.optional(Schema.Number),\n editor: Schema.Boolean,\n }),\n elements: Schema.Array(Element),\n })\n export interface State extends Schema.Schema.Type<typeof State> {}\n\n export const SemanticNode = Schema.Struct({\n id: Schema.NonEmptyString,\n instance: Schema.optionalKey(Schema.NonEmptyString),\n parent: Schema.optionalKey(Schema.NonEmptyString),\n role: Schema.NonEmptyString,\n label: Schema.optionalKey(Schema.NonEmptyString),\n element: Schema.Number.check(Schema.isInt(), Schema.isGreaterThan(0)),\n focused: Schema.optionalKey(Schema.Boolean),\n selected: Schema.optionalKey(Schema.Boolean),\n expanded: Schema.optionalKey(Schema.Boolean),\n disabled: Schema.optionalKey(Schema.Boolean),\n })\n export interface SemanticNode extends Schema.Schema.Type<typeof SemanticNode> {}\n\n export const SemanticSnapshot = Schema.Struct({\n format: Schema.Literal(\"opencode-ui-snapshot-v1\"),\n nodes: Schema.Array(SemanticNode).check(\n Schema.makeFilter((nodes) => {\n const ids = new Set(nodes.map((node) => node.id))\n if (ids.size !== nodes.length) return \"semantic node ids must be unique\"\n if (new Set(nodes.map((node) => node.element)).size !== nodes.length)\n return \"semantic node elements must be unique\"\n if (nodes.some((node) => node.parent !== undefined && !ids.has(node.parent)))\n return \"semantic node parents must reference another node\"\n const parents = new Map(nodes.map((node) => [node.id, node.parent]))\n for (const node of nodes) {\n const visited = new Set<string>()\n let current: string | undefined = node.id\n while (current !== undefined) {\n if (visited.has(current)) return \"semantic node hierarchy must be acyclic\"\n visited.add(current)\n current = parents.get(current)\n }\n }\n return undefined\n }),\n ),\n })\n export interface SemanticSnapshot extends Schema.Schema.Type<typeof SemanticSnapshot> {}\n\n export const Screenshot = Schema.String\n export type Screenshot = Schema.Schema.Type<typeof Screenshot>\n\n export const Color = Schema.Tuple([Schema.Number, Schema.Number, Schema.Number, Schema.Number])\n export type Color = Schema.Schema.Type<typeof Color>\n\n export const CapturedFrame = Schema.Struct({\n cols: Schema.Number,\n rows: Schema.Number,\n cursor: Schema.Tuple([Schema.Number, Schema.Number]),\n lines: Schema.Array(\n Schema.Struct({\n spans: Schema.Array(\n Schema.Struct({\n text: Schema.String,\n fg: Color,\n bg: Color,\n attributes: Schema.Number,\n width: Schema.Number,\n }),\n ),\n }),\n ),\n })\n export interface CapturedFrame extends Schema.Schema.Type<typeof CapturedFrame> {}\n\n export const RecordingFinish = Schema.String\n export type RecordingFinish = Schema.Schema.Type<typeof RecordingFinish>\n\n export const Matches = Schema.Boolean\n export type Matches = Schema.Schema.Type<typeof Matches>\n\n export const ScreenshotParams = Schema.Struct({ name: Schema.optional(Schema.String) })\n export interface ScreenshotParams extends Schema.Schema.Type<typeof ScreenshotParams> {}\n\n export const TypeParams = Schema.Struct({ text: Schema.String })\n export interface TypeParams extends Schema.Schema.Type<typeof TypeParams> {}\n\n export const MatchesParams = Schema.Struct({ text: Schema.String })\n export interface MatchesParams extends Schema.Schema.Type<typeof MatchesParams> {}\n\n export const PressParams = Schema.Struct({ key: Schema.String, modifiers: Schema.optional(KeyModifiers) })\n export interface PressParams extends Schema.Schema.Type<typeof PressParams> {}\n\n export const ArrowParams = Schema.Struct({ direction: Schema.Literals([\"up\", \"down\", \"left\", \"right\"]) })\n export interface ArrowParams extends Schema.Schema.Type<typeof ArrowParams> {}\n\n export const FocusParams = Schema.Struct({ target: Schema.Number })\n export interface FocusParams extends Schema.Schema.Type<typeof FocusParams> {}\n\n export const ClickParams = Schema.Struct({\n target: Schema.Number,\n x: Schema.Number,\n y: Schema.Number,\n semantic: Schema.optionalKey(SemanticClickTarget),\n })\n export interface ClickParams extends Schema.Schema.Type<typeof ClickParams> {}\n\n export const ResizeParams = Schema.Struct({ cols: Schema.Number, rows: Schema.Number })\n export interface ResizeParams extends Schema.Schema.Type<typeof ResizeParams> {}\n\n export const Request = Schema.Union([\n Handshake.Request,\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.type\"), params: TypeParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.press\"), params: PressParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.arrow\"), params: ArrowParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.focus\"), params: FocusParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.click\"), params: ClickParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.resize\"), params: ResizeParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.matches\"), params: MatchesParams }),\n Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literal(\"ui.screenshot\"),\n params: Schema.optional(ScreenshotParams),\n }),\n Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literals([\"ui.enter\", \"ui.state\", \"ui.snapshot\", \"ui.recording.finish\"]),\n }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.capture\") }),\n ])\n export type Request = Schema.Schema.Type<typeof Request>\n export const decodeRequest = Schema.decodeUnknownSync(Request)\n export const decodeRequestEffect = Schema.decodeUnknownEffect(Schema.fromJsonString(Request))\n}\n\nexport namespace Backend {\n export const Capabilities = [\n \"llm.attach\",\n \"llm.chunk\",\n \"llm.finish\",\n \"llm.disconnect\",\n \"llm.pending\",\n \"llm.request\",\n \"llm.tool-input-delta\",\n \"tool.attach\",\n \"tool.update\",\n \"tool.finish\",\n \"tool.fail\",\n \"tool.invocation\",\n \"tool.cancel\",\n ] as const satisfies ReadonlyArray<Handshake.Capability>\n\n export const Item = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"textDelta\"), text: Schema.String }),\n Schema.Struct({ type: Schema.Literal(\"reasoningDelta\"), text: Schema.String }),\n Schema.Struct({\n type: Schema.Literal(\"toolInputStart\"),\n index: Schema.Number,\n id: Schema.String,\n name: Schema.String,\n }),\n Schema.Struct({\n type: Schema.Literal(\"toolInputDelta\"),\n index: Schema.Number,\n text: Schema.String,\n }),\n Schema.Struct({\n type: Schema.Literal(\"toolCall\"),\n index: Schema.Number,\n id: Schema.String,\n name: Schema.String,\n input: Schema.Json,\n }),\n Schema.Struct({ type: Schema.Literal(\"raw\"), chunk: Schema.Json }),\n ])\n export type Item = Schema.Schema.Type<typeof Item>\n\n export const FinishReason = Schema.Literals([\"stop\", \"tool-calls\", \"length\", \"content-filter\"])\n export type FinishReason = Schema.Schema.Type<typeof FinishReason>\n\n export const ToolContent = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"text\"), text: Schema.String }),\n Schema.Struct({\n type: Schema.Literal(\"file\"),\n data: Schema.String,\n mime: Schema.NonEmptyString,\n name: Schema.optionalKey(Schema.String),\n }),\n ])\n export type ToolContent = Schema.Schema.Type<typeof ToolContent>\n\n const ToolName = Schema.NonEmptyString.check(\n Schema.makeFilter((name) =>\n /^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(name) ? undefined : \"simulated tool names must be provider-safe\",\n ),\n )\n const ToolNamespace = Schema.NonEmptyString.check(\n Schema.makeFilter((namespace) =>\n namespace.split(\".\").every((segment) => /^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(segment))\n ? undefined\n : \"simulated tool namespaces must contain provider-safe segments\",\n ),\n )\n\n export const ToolRegistration = Schema.Struct({\n name: ToolName,\n description: Schema.String,\n inputSchema: Schema.Record(Schema.String, Schema.Json),\n outputSchema: Schema.optionalKey(Schema.Record(Schema.String, Schema.Json)),\n permission: Schema.optionalKey(Schema.NonEmptyString),\n options: Schema.optionalKey(\n Schema.Struct({\n namespace: Schema.optionalKey(ToolNamespace),\n codemode: Schema.optionalKey(Schema.Boolean),\n }),\n ),\n })\n export interface ToolRegistration extends Schema.Schema.Type<typeof ToolRegistration> {}\n\n export const ToolAttachParams = Schema.Struct({\n tools: Schema.Array(ToolRegistration).check(\n Schema.makeFilter((tools) => {\n const names = tools.map(exposedToolName)\n if (names.some((name) => !/^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(name)))\n return \"simulated tool names including namespaces must be provider-safe\"\n if (new Set(names).size !== names.length) return \"simulated tool registrations must have unique exposed names\"\n if (\n tools.some(\n (tool) =>\n tool.name === \"execute\" && tool.options?.namespace === undefined && tool.options?.codemode === false,\n )\n )\n return 'direct simulated tool name \"execute\" is reserved'\n return undefined\n }),\n ),\n })\n export interface ToolAttachParams extends Schema.Schema.Type<typeof ToolAttachParams> {}\n\n export function exposedToolName(registration: ToolRegistration) {\n return registration.options?.namespace === undefined\n ? registration.name\n : `${registration.options.namespace.replaceAll(\".\", \"_\")}_${registration.name}`\n }\n\n export const ToolProgress = Schema.Record(Schema.String, Schema.Json)\n export interface ToolProgress extends Schema.Schema.Type<typeof ToolProgress> {}\n\n export const ToolOutput = Schema.Struct({\n structured: Schema.Json,\n content: Schema.Array(ToolContent),\n })\n export interface ToolOutput extends Schema.Schema.Type<typeof ToolOutput> {}\n\n export const ToolUpdateParams = Schema.Struct({\n id: Schema.String,\n sequence: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n update: ToolProgress,\n })\n export interface ToolUpdateParams extends Schema.Schema.Type<typeof ToolUpdateParams> {}\n\n export const ToolFinishParams = Schema.Struct({ id: Schema.String, output: ToolOutput })\n export interface ToolFinishParams extends Schema.Schema.Type<typeof ToolFinishParams> {}\n\n export const ToolFailParams = Schema.Struct({ id: Schema.String, message: Schema.String })\n export interface ToolFailParams extends Schema.Schema.Type<typeof ToolFailParams> {}\n\n export const ToolInvocation = Schema.Struct({\n id: Schema.String,\n name: Schema.String,\n input: Schema.Json,\n context: Schema.Struct({\n sessionID: Schema.String,\n agent: Schema.String,\n messageID: Schema.String,\n callID: Schema.String,\n }),\n })\n export interface ToolInvocation extends Schema.Schema.Type<typeof ToolInvocation> {}\n\n export const ToolCancellation = Schema.Struct({\n id: Schema.String,\n reason: Schema.Literal(\"interrupted\"),\n })\n export interface ToolCancellation extends Schema.Schema.Type<typeof ToolCancellation> {}\n\n export const ChunkParams = Schema.Struct({ id: Schema.String, items: Schema.Array(Item) })\n export interface ChunkParams extends Schema.Schema.Type<typeof ChunkParams> {}\n\n export const FinishParams = Schema.Struct({\n id: Schema.String,\n reason: FinishReason.pipe(Schema.withDecodingDefault(Effect.succeed(\"stop\" as const))),\n })\n export interface FinishParams extends Schema.Schema.Type<typeof FinishParams> {}\n\n export const DisconnectParams = Schema.Struct({ id: Schema.String })\n export interface DisconnectParams extends Schema.Schema.Type<typeof DisconnectParams> {}\n\n export const Request = Schema.Union([\n Handshake.Request,\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"llm.chunk\"), params: ChunkParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"llm.finish\"), params: FinishParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"llm.disconnect\"), params: DisconnectParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.attach\"), params: ToolAttachParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.update\"), params: ToolUpdateParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.finish\"), params: ToolFinishParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.fail\"), params: ToolFailParams }),\n Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literals([\"llm.attach\", \"llm.pending\"]),\n }),\n ])\n export type Request = Schema.Schema.Type<typeof Request>\n export const decodeRequest = Schema.decodeUnknownSync(Request)\n export const decodeRequestEffect = Schema.decodeUnknownEffect(Schema.fromJsonString(Request))\n\n export const ProviderInvocation = Schema.Struct({ id: Schema.String, url: Schema.String, body: Schema.Json })\n export interface ProviderInvocation extends Schema.Schema.Type<typeof ProviderInvocation> {}\n\n export const NetworkLogEntry = Schema.Struct({\n time: Schema.Number,\n method: Schema.String,\n url: Schema.String,\n matched: Schema.Boolean,\n })\n export interface NetworkLogEntry extends Schema.Schema.Type<typeof NetworkLogEntry> {}\n}\n\nexport * as SimulationProtocol from \"./index\"\n", | ||
| "import { Effect, Fiber, Queue, Stream } from \"effect\"\nimport { SimulationProtocol } from \"./protocol\"\n\nexport interface Server {\n readonly url: string\n}\n\ninterface Request {\n readonly id?: string | number | null\n}\n\nexport interface SocketData {\n readonly drive?: true\n attachment?: Fiber.Fiber<void>\n closed?: true\n}\n\nexport type Socket = Bun.ServerWebSocket<SocketData>\n\nexport function start<RequestType extends Request, Error, Services>(options: {\n readonly endpoint: string\n readonly label: string\n readonly data: () => SocketData\n readonly decode: (input: string) => Effect.Effect<RequestType, Error>\n readonly handle: (socket: Socket, request: RequestType) => Effect.Effect<unknown, unknown, Services>\n readonly close?: (socket: Socket) => Effect.Effect<void, never, Services>\n}) {\n return Effect.gen(function* () {\n const messages = yield* Queue.bounded<{ readonly socket: Socket; readonly input: string }>(256)\n const closures = yield* Queue.unbounded<Socket>()\n yield* Stream.fromQueue(messages).pipe(\n Stream.runForEach((message) =>\n options.decode(message.input).pipe(\n Effect.flatMap((request) =>\n options.handle(message.socket, request).pipe(\n Effect.matchEffect({\n onFailure: (error) => send(message.socket, SimulationProtocol.JsonRpc.failure(request.id, error)),\n onSuccess: (result) => send(message.socket, SimulationProtocol.JsonRpc.success(request.id, result)),\n }),\n ),\n ),\n Effect.catch((error) => send(message.socket, SimulationProtocol.JsonRpc.failure(undefined, error))),\n ),\n ),\n Effect.forkScoped,\n )\n yield* Stream.fromQueue(closures).pipe(\n Stream.runForEach((socket) => options.close?.(socket) ?? Effect.void),\n Effect.forkScoped,\n )\n const url = yield* Effect.try({ try: () => new URL(options.endpoint), catch: (cause) => cause })\n yield* Effect.acquireRelease(\n Effect.sync(() =>\n Bun.serve<SocketData>({\n hostname: url.hostname,\n port: Number(url.port),\n fetch(request, server) {\n if (server.upgrade(request, { data: options.data() })) return undefined\n return new Response(options.label, { status: 426 })\n },\n websocket: {\n close(socket) {\n socket.data.closed = true\n Queue.offerUnsafe(closures, socket)\n },\n message(socket, message) {\n const input = typeof message === \"string\" ? message : message.toString()\n if (Queue.offerUnsafe(messages, { socket, input })) return\n socket.send(\n JSON.stringify(\n SimulationProtocol.JsonRpc.failure(undefined, new Error(\"Simulation control queue is full\")),\n ),\n )\n },\n },\n }),\n ),\n (server) => Effect.promise(() => server.stop(true)),\n )\n return { url: options.endpoint } satisfies Server\n })\n}\n\nfunction send(socket: Socket, response: SimulationProtocol.JsonRpc.Response | undefined) {\n if (!response) return Effect.void\n return Effect.sync(() => {\n socket.send(JSON.stringify(response))\n })\n}\n\nexport * as SimulationControlServer from \"./control-server\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "49C3966E789E058664756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/theme/color.ts", "../tui/src/theme/resolve.ts"], | ||
| "sourcesContent": [ | ||
| "import { RGBA } from \"@opentui/core\"\n\nexport function ansiToRgba(code: number): RGBA {\n if (code < 16) {\n const ansiColors = [\n \"#000000\",\n \"#800000\",\n \"#008000\",\n \"#808000\",\n \"#000080\",\n \"#800080\",\n \"#008080\",\n \"#c0c0c0\",\n \"#808080\",\n \"#ff0000\",\n \"#00ff00\",\n \"#ffff00\",\n \"#0000ff\",\n \"#ff00ff\",\n \"#00ffff\",\n \"#ffffff\",\n ]\n return RGBA.fromHex(ansiColors[code] ?? \"#000000\")\n }\n\n if (code < 232) {\n const index = code - 16\n const b = index % 6\n const g = Math.floor(index / 6) % 6\n const r = Math.floor(index / 36)\n const val = (x: number) => (x === 0 ? 0 : x * 40 + 55)\n return RGBA.fromInts(val(r), val(g), val(b))\n }\n\n if (code < 256) {\n const gray = (code - 232) * 10 + 8\n return RGBA.fromInts(gray, gray, gray)\n }\n\n return RGBA.fromInts(0, 0, 0)\n}\n\nexport function tint(base: RGBA, overlay: RGBA, alpha: number): RGBA {\n const r = base.r + (overlay.r - base.r) * alpha\n const g = base.g + (overlay.g - base.g) * alpha\n const b = base.b + (overlay.b - base.b) * alpha\n return RGBA.fromInts(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255))\n}\n", | ||
| "import { RGBA } from \"@opentui/core\"\nimport { ansiToRgba } from \"./color\"\nimport type { ColorValue, Theme, ThemeColor, ThemeV1Json } from \"./v1\"\n\nexport function resolveThemeColors(\n theme: ThemeV1Json,\n mode: \"dark\" | \"light\",\n resolveAnsi: (code: number) => RGBA = ansiToRgba,\n) {\n const defs = theme.defs ?? {}\n function resolveColor(color: ColorValue, chain: string[] = []): RGBA {\n if (color instanceof RGBA) return color\n if (typeof color === \"string\") {\n if (color === \"transparent\" || color === \"none\") return RGBA.fromInts(0, 0, 0, 0)\n\n if (color.startsWith(\"#\")) return RGBA.fromHex(color)\n\n if (chain.includes(color)) {\n throw new Error(`Circular color reference: ${[...chain, color].join(\" -> \")}`)\n }\n\n const next = defs[color] ?? theme.theme[color as ThemeColor]\n if (next === undefined) {\n throw new Error(`Color reference \"${color}\" not found in defs or theme`)\n }\n return resolveColor(next, [...chain, color])\n }\n if (typeof color === \"number\") return resolveAnsi(color)\n return resolveColor(color[mode], chain)\n }\n\n const resolved = Object.fromEntries(\n Object.entries(theme.theme)\n .filter(([key]) => key !== \"selectedListItemText\" && key !== \"backgroundMenu\" && key !== \"thinkingOpacity\")\n .map(([key, value]) => [key, resolveColor(value as ColorValue)]),\n ) as Partial<Record<ThemeColor, RGBA>>\n\n const hasSelectedListItemText = theme.theme.selectedListItemText !== undefined\n return {\n theme: {\n ...(resolved as Record<ThemeColor, RGBA>),\n selectedListItemText: hasSelectedListItemText\n ? resolveColor(theme.theme.selectedListItemText!)\n : resolved.background!,\n backgroundMenu:\n theme.theme.backgroundMenu === undefined\n ? resolved.backgroundElement!\n : resolveColor(theme.theme.backgroundMenu),\n } satisfies Omit<Theme, \"_hasSelectedListItemText\" | \"thinkingOpacity\">,\n hasSelectedListItemText,\n thinkingOpacity: theme.theme.thinkingOpacity ?? 0.6,\n }\n}\n" | ||
| ], | ||
| "mappings": ";oDAEO,SAAS,CAAU,CAAC,EAAoB,CAC7C,GAAI,EAAO,GAAI,CACb,IAAM,EAAa,CACjB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAO,EAAK,QAAQ,EAAW,IAAS,SAAS,EAGnD,GAAI,EAAO,IAAK,CACd,IAAM,EAAQ,EAAO,GACf,EAAI,EAAQ,EACZ,EAAI,KAAK,MAAM,EAAQ,CAAC,EAAI,EAC5B,EAAI,KAAK,MAAM,EAAQ,EAAE,EACzB,EAAM,CAAC,IAAe,IAAM,EAAI,EAAI,EAAI,GAAK,GACnD,OAAO,EAAK,SAAS,EAAI,CAAC,EAAG,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAG7C,GAAI,EAAO,IAAK,CACd,IAAM,GAAQ,EAAO,KAAO,GAAK,EACjC,OAAO,EAAK,SAAS,EAAM,EAAM,CAAI,EAGvC,OAAO,EAAK,SAAS,EAAG,EAAG,CAAC,EAGvB,SAAS,CAAI,CAAC,EAAY,EAAe,EAAqB,CACnE,IAAM,EAAI,EAAK,GAAK,EAAQ,EAAI,EAAK,GAAK,EACpC,EAAI,EAAK,GAAK,EAAQ,EAAI,EAAK,GAAK,EACpC,EAAI,EAAK,GAAK,EAAQ,EAAI,EAAK,GAAK,EAC1C,OAAO,EAAK,SAAS,KAAK,MAAM,EAAI,GAAG,EAAG,KAAK,MAAM,EAAI,GAAG,EAAG,KAAK,MAAM,EAAI,GAAG,CAAC,EC1C7E,SAAS,CAAkB,CAChC,EACA,EACA,EAAsC,EACtC,CACA,IAAM,EAAO,EAAM,MAAQ,CAAC,EAC5B,SAAS,CAAY,CAAC,EAAmB,EAAkB,CAAC,EAAS,CACnE,GAAI,aAAiB,EAAM,OAAO,EAClC,GAAI,OAAO,IAAU,SAAU,CAC7B,GAAI,IAAU,eAAiB,IAAU,OAAQ,OAAO,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EAEhF,GAAI,EAAM,WAAW,GAAG,EAAG,OAAO,EAAK,QAAQ,CAAK,EAEpD,GAAI,EAAM,SAAS,CAAK,EACtB,MAAU,MAAM,6BAA6B,CAAC,GAAG,EAAO,CAAK,EAAE,KAAK,MAAM,GAAG,EAG/E,IAAM,EAAO,EAAK,IAAU,EAAM,MAAM,GACxC,GAAI,IAAS,OACX,MAAU,MAAM,oBAAoB,+BAAmC,EAEzE,OAAO,EAAa,EAAM,CAAC,GAAG,EAAO,CAAK,CAAC,EAE7C,GAAI,OAAO,IAAU,SAAU,OAAO,EAAY,CAAK,EACvD,OAAO,EAAa,EAAM,GAAO,CAAK,EAGxC,IAAM,EAAW,OAAO,YACtB,OAAO,QAAQ,EAAM,KAAK,EACvB,OAAO,EAAE,KAAS,IAAQ,wBAA0B,IAAQ,kBAAoB,IAAQ,iBAAiB,EACzG,IAAI,EAAE,EAAK,KAAW,CAAC,EAAK,EAAa,CAAmB,CAAC,CAAC,CACnE,EAEM,EAA0B,EAAM,MAAM,uBAAyB,OACrE,MAAO,CACL,MAAO,IACD,EACJ,qBAAsB,EAClB,EAAa,EAAM,MAAM,oBAAqB,EAC9C,EAAS,WACb,eACE,EAAM,MAAM,iBAAmB,OAC3B,EAAS,kBACT,EAAa,EAAM,MAAM,cAAc,CAC/C,EACA,0BACA,gBAAiB,EAAM,MAAM,iBAAmB,GAClD", | ||
| "debugId": "6690E6E492D7566764756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "A450BF571CFC44F964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/plugin/list.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { OpenCode } from \"@opencode-ai/client\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.plugin.commands.list,\n Effect.fn(\"cli.plugin.list\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const response = yield* Effect.promise(() => client.plugin.list({ location: { directory: process.cwd() } }))\n const plugins = response.data.toSorted((a, b) => a.id.localeCompare(b.id))\n if (plugins.length === 0) {\n process.stdout.write(\"No plugins loaded\" + EOL)\n return\n }\n process.stdout.write(plugins.map((plugin) => plugin.id).join(EOL) + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAe,SAAQ,aACrB,OAAS,cAAS,YAAO,cAAS,UAClC,OAAO,QAAG,sBAAiB,OAAE,cAAU,OAAG,MACxC,SAAM,OAAU,WAAO,OAAc,aAAQ,OAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,GADW,MAAO,EAAO,QAAQ,IAAM,EAAO,OAAO,KAAK,CAAE,SAAU,CAAE,UAAW,QAAQ,IAAI,CAAE,CAAE,CAAC,CAAC,GAClF,KAAK,SAAS,CAAC,EAAG,IAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC,EACzE,GAAI,EAAQ,SAAW,EAAG,CACxB,QAAQ,OAAO,MAAM,oBAAsB,CAAG,EAC9C,OAEF,QAAQ,OAAO,MAAM,EAAQ,IAAI,CAAC,IAAW,EAAO,EAAE,EAAE,KAAK,CAAG,EAAI,CAAG,EACxE,CACH", | ||
| "debugId": "5977C78B899EE8DD64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+mistral@3.0.51+d6123d32214422cb/node_modules/@ai-sdk/mistral/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/mistral-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/mistral-chat-language-model.ts\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\n\n// src/convert-mistral-usage.ts\nfunction convertMistralUsage(usage) {\n var _a, _b, _c, _d, _e;\n if (usage == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const promptTokens = usage.prompt_tokens;\n const completionTokens = usage.completion_tokens;\n const cacheReadTokens = (_e = (_d = (_b = usage.num_cached_tokens) != null ? _b : (_a = usage.prompt_tokens_details) == null ? void 0 : _a.cached_tokens) != null ? _d : (_c = usage.prompt_token_details) == null ? void 0 : _c.cached_tokens) != null ? _e : 0;\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens || void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens,\n reasoning: void 0\n },\n raw: usage\n };\n}\n\n// src/convert-to-mistral-chat-messages.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nimport { convertToBase64 } from \"@ai-sdk/provider-utils\";\nfunction formatFileUrl({\n data,\n mediaType\n}) {\n return data instanceof URL ? data.toString() : `data:${mediaType};base64,${convertToBase64(data)}`;\n}\nfunction convertToMistralChatMessages(prompt) {\n var _a;\n const messages = [];\n for (let i = 0; i < prompt.length; i++) {\n const { role, content } = prompt[i];\n const isLastMessage = i === prompt.length - 1;\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"file\": {\n if (part.mediaType.startsWith(\"image/\")) {\n const mediaType = part.mediaType === \"image/*\" ? \"image/jpeg\" : part.mediaType;\n return {\n type: \"image_url\",\n image_url: formatFileUrl({ data: part.data, mediaType })\n };\n } else if (part.mediaType === \"application/pdf\") {\n return {\n type: \"document_url\",\n document_url: formatFileUrl({\n data: part.data,\n mediaType: \"application/pdf\"\n })\n };\n } else {\n throw new UnsupportedFunctionalityError({\n functionality: \"Only images and PDF file parts are supported\"\n });\n }\n }\n }\n })\n });\n break;\n }\n case \"assistant\": {\n let text = \"\";\n const structuredContent = [];\n let hasNativeReasoning = false;\n const toolCalls = [];\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n structuredContent.push({ type: \"text\", text: part.text });\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input)\n }\n });\n break;\n }\n case \"reasoning\": {\n text += part.text;\n const native = part.providerOptions?.mistral?.thinking;\n if (native?.type === \"thinking\") {\n hasNativeReasoning = true;\n structuredContent.push(native);\n break;\n }\n structuredContent.push({ type: \"text\", text: part.text });\n break;\n }\n default: {\n throw new Error(\n `Unsupported content type in assistant message: ${part.type}`\n );\n }\n }\n }\n messages.push({\n role: \"assistant\",\n content: hasNativeReasoning ? structuredContent : text,\n prefix: isLastMessage ? true : void 0,\n tool_calls: toolCalls.length > 0 ? toolCalls : void 0\n });\n break;\n }\n case \"tool\": {\n for (const toolResponse of content) {\n if (toolResponse.type === \"tool-approval-response\") {\n continue;\n }\n const output = toolResponse.output;\n let contentValue;\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n contentValue = output.value;\n break;\n case \"execution-denied\":\n contentValue = (_a = output.reason) != null ? _a : \"Tool call execution denied.\";\n break;\n case \"content\":\n case \"json\":\n case \"error-json\":\n contentValue = JSON.stringify(output.value);\n break;\n }\n messages.push({\n role: \"tool\",\n name: toolResponse.toolName,\n tool_call_id: toolResponse.toolCallId,\n content: contentValue\n });\n }\n break;\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return messages;\n}\n\n// src/get-response-metadata.ts\nfunction getResponseMetadata({\n id,\n model,\n created\n}) {\n return {\n id: id != null ? id : void 0,\n modelId: model != null ? model : void 0,\n timestamp: created != null ? new Date(created * 1e3) : void 0\n };\n}\n\n// src/map-mistral-finish-reason.ts\nfunction mapMistralFinishReason(finishReason) {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n case \"model_length\":\n return \"length\";\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"other\";\n }\n}\n\n// src/mistral-chat-options.ts\nimport { z } from \"zod/v4\";\nvar mistralLanguageModelOptions = z.object({\n /**\n * Whether to inject a safety prompt before all conversations.\n *\n * Defaults to `false`.\n */\n safePrompt: z.boolean().optional(),\n documentImageLimit: z.number().optional(),\n documentPageLimit: z.number().optional(),\n /**\n * Whether to use structured outputs.\n *\n * @default true\n */\n structuredOutputs: z.boolean().optional(),\n /**\n * Whether to use strict JSON schema validation.\n *\n * @default false\n */\n strictJsonSchema: z.boolean().optional(),\n /**\n * Whether to enable parallel function calling during tool use.\n * When set to false, the model will use at most one tool per response.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n /**\n * Controls the reasoning effort for models that support adjustable reasoning.\n *\n * - `'high'`: Enable reasoning\n * - `'none'`: Disable reasoning\n */\n reasoningEffort: z.enum([\"high\", \"none\"]).optional(),\n promptCacheKey: z.string().optional()\n});\n\n// src/mistral-error.ts\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z as z2 } from \"zod/v4\";\nvar mistralErrorDataSchema = z2.object({\n object: z2.literal(\"error\"),\n message: z2.string(),\n type: z2.string(),\n param: z2.string().nullable(),\n code: z2.string().nullable()\n});\nvar mistralFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: mistralErrorDataSchema,\n errorToMessage: (data) => data.message\n});\n\n// src/mistral-prepare-tools.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\nfunction prepareTools({\n tools,\n toolChoice\n}) {\n tools = (tools == null ? void 0 : tools.length) ? tools : void 0;\n const toolWarnings = [];\n if (tools == null) {\n return { tools: void 0, toolChoice: void 0, toolWarnings };\n }\n const mistralTools = [];\n for (const tool of tools) {\n if (tool.type === \"provider\") {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`\n });\n } else {\n mistralTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...tool.strict != null ? { strict: tool.strict } : {}\n }\n });\n }\n }\n if (toolChoice == null) {\n return { tools: mistralTools, toolChoice: void 0, toolWarnings };\n }\n const type = toolChoice.type;\n switch (type) {\n case \"auto\":\n case \"none\":\n return { tools: mistralTools, toolChoice: type, toolWarnings };\n case \"required\":\n return { tools: mistralTools, toolChoice: \"any\", toolWarnings };\n // mistral does not support tool mode directly,\n // so we filter the tools and force the tool choice through 'any'\n case \"tool\":\n return {\n tools: mistralTools.filter(\n (tool) => tool.function.name === toolChoice.toolName\n ),\n toolChoice: \"any\",\n toolWarnings\n };\n default: {\n const _exhaustiveCheck = type;\n throw new UnsupportedFunctionalityError2({\n functionality: `tool choice type: ${_exhaustiveCheck}`\n });\n }\n }\n}\n\n// src/mistral-chat-language-model.ts\nvar MistralChatLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.supportedUrls = {\n \"application/pdf\": [/^https:\\/\\/.*$/]\n };\n var _a;\n this.modelId = modelId;\n this.config = config;\n this.generateId = (_a = config.generateId) != null ? _a : generateId;\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice\n }) {\n var _a, _b, _c, _d;\n const warnings = [];\n const options = (_a = await parseProviderOptions({\n provider: \"mistral\",\n providerOptions,\n schema: mistralLanguageModelOptions\n })) != null ? _a : {};\n if (topK != null) {\n warnings.push({ type: \"unsupported\", feature: \"topK\" });\n }\n const structuredOutputs = (_b = options.structuredOutputs) != null ? _b : true;\n const strictJsonSchema = (_c = options.strictJsonSchema) != null ? _c : false;\n if ((responseFormat == null ? void 0 : responseFormat.type) === \"json\" && !(responseFormat == null ? void 0 : responseFormat.schema)) {\n prompt = injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema\n });\n }\n const baseArgs = {\n // model id:\n model: this.modelId,\n // model specific settings:\n safe_prompt: options.safePrompt,\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n ...frequencyPenalty != null ? { frequency_penalty: frequencyPenalty } : {},\n ...presencePenalty != null ? { presence_penalty: presencePenalty } : {},\n stop: stopSequences,\n random_seed: seed,\n reasoning_effort: options.reasoningEffort,\n prompt_cache_key: options.promptCacheKey,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? structuredOutputs && (responseFormat == null ? void 0 : responseFormat.schema) != null ? {\n type: \"json_schema\",\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: (_d = responseFormat.name) != null ? _d : \"response\",\n description: responseFormat.description\n }\n } : { type: \"json_object\" } : void 0,\n // mistral-specific provider options:\n document_image_limit: options.documentImageLimit,\n document_page_limit: options.documentPageLimit,\n // messages:\n messages: convertToMistralChatMessages(prompt)\n };\n const {\n tools: mistralTools,\n toolChoice: mistralToolChoice,\n toolWarnings\n } = prepareTools({\n tools,\n toolChoice\n });\n return {\n args: {\n ...baseArgs,\n tools: mistralTools,\n tool_choice: mistralToolChoice,\n ...mistralTools != null && options.parallelToolCalls !== void 0 ? { parallel_tool_calls: options.parallelToolCalls } : {}\n },\n warnings: [...warnings, ...toolWarnings]\n };\n }\n async doGenerate(options) {\n var _a;\n const { args: body, warnings } = await this.getArgs(options);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const choice = response.choices[0];\n const content = [];\n if (choice.message.content != null && Array.isArray(choice.message.content)) {\n for (const part of choice.message.content) {\n if (part.type === \"thinking\") {\n const reasoningText = extractReasoningContent(part.thinking);\n content.push({\n type: \"reasoning\",\n text: reasoningText,\n providerMetadata: { mistral: { thinking: part } }\n });\n } else if (part.type === \"text\") {\n if (part.text.length > 0) {\n content.push({ type: \"text\", text: part.text });\n }\n }\n }\n } else {\n const text = extractTextContent(choice.message.content);\n if (text != null && text.length > 0) {\n content.push({ type: \"text\", text });\n }\n }\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments\n });\n }\n }\n return {\n content,\n finishReason: {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: (_a = choice.finish_reason) != null ? _a : void 0\n },\n usage: convertMistralUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse\n },\n warnings\n };\n }\n async doStream(options) {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId = null;\n let activeThinking = null;\n const generateId2 = this.generateId;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n if (isFirstChunk) {\n isFirstChunk = false;\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value)\n });\n }\n if (value.usage != null) {\n usage = value.usage;\n }\n const choice = value.choices[0];\n const delta = choice.delta;\n const textContent = extractTextContent(delta.content);\n if (delta.content != null && Array.isArray(delta.content)) {\n for (const part of delta.content) {\n if (part.type === \"thinking\") {\n const reasoningDelta = extractReasoningContent(part.thinking);\n activeThinking = mergeThinking(activeThinking, part);\n if (activeReasoningId == null) {\n if (activeText) {\n controller.enqueue({ type: \"text-end\", id: \"0\" });\n activeText = false;\n }\n activeReasoningId = generateId2();\n controller.enqueue({\n type: \"reasoning-start\",\n id: activeReasoningId\n });\n }\n if (reasoningDelta.length > 0) {\n controller.enqueue({\n type: \"reasoning-delta\",\n id: activeReasoningId,\n delta: reasoningDelta\n });\n }\n }\n }\n }\n if (textContent != null && textContent.length > 0) {\n if (!activeText) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: activeReasoningId,\n providerMetadata: { mistral: { thinking: activeThinking } }\n });\n activeReasoningId = null;\n activeThinking = null;\n }\n controller.enqueue({ type: \"text-start\", id: \"0\" });\n activeText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: \"0\",\n delta: textContent\n });\n }\n if ((delta == null ? void 0 : delta.tool_calls) != null) {\n for (const toolCall of delta.tool_calls) {\n const toolCallId = toolCall.id;\n const toolName = toolCall.function.name;\n const input = toolCall.function.arguments;\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolCallId,\n toolName\n });\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCallId,\n delta: input\n });\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCallId\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input\n });\n }\n }\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: choice.finish_reason\n };\n }\n },\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: activeReasoningId,\n providerMetadata: { mistral: { thinking: activeThinking } }\n });\n }\n if (activeText) {\n controller.enqueue({ type: \"text-end\", id: \"0\" });\n }\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertMistralUsage(usage)\n });\n }\n })\n ),\n request: { body },\n response: { headers: responseHeaders }\n };\n }\n};\nfunction extractReasoningContent(thinking) {\n return thinking.filter((chunk) => chunk.type === \"text\").map((chunk) => chunk.text).join(\"\");\n}\nfunction mergeThinking(current, next) {\n if (current === null) return { ...next, thinking: [...next.thinking] };\n current.thinking.push(...next.thinking);\n if (next.closed !== void 0) current.closed = next.closed;\n if (next.signature !== void 0) current.signature = next.signature;\n return current;\n}\nfunction extractTextContent(content) {\n if (typeof content === \"string\") {\n return content;\n }\n if (content == null) {\n return void 0;\n }\n const textContent = [];\n for (const chunk of content) {\n const { type } = chunk;\n switch (type) {\n case \"text\":\n textContent.push(chunk.text);\n break;\n case \"thinking\":\n case \"image_url\":\n case \"reference\":\n break;\n default: {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n return textContent.length ? textContent.join(\"\") : void 0;\n}\nvar mistralThinkingContentSchema = z3.discriminatedUnion(\"type\", [\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"tool_reference\"),\n tool: z3.string(),\n title: z3.string(),\n url: z3.string().nullish(),\n favicon: z3.string().nullish(),\n description: z3.string().nullish()\n }),\n z3.object({\n type: z3.literal(\"reference\"),\n reference_ids: z3.array(z3.union([z3.string(), z3.number().int()]))\n })\n]);\nvar mistralThinkChunkSchema = z3.object({\n type: z3.literal(\"thinking\"),\n thinking: z3.array(mistralThinkingContentSchema),\n closed: z3.boolean().optional(),\n signature: z3.string().nullish()\n});\nvar mistralContentSchema = z3.union([\n z3.string(),\n z3.array(\n z3.discriminatedUnion(\"type\", [\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"image_url\"),\n image_url: z3.union([\n z3.string(),\n z3.object({\n url: z3.string(),\n detail: z3.string().nullable()\n })\n ])\n }),\n z3.object({\n type: z3.literal(\"reference\"),\n reference_ids: z3.array(z3.union([z3.string(), z3.number()]))\n }),\n mistralThinkChunkSchema\n ])\n )\n]).nullish();\nvar mistralUsageSchema = z3.object({\n prompt_tokens: z3.number(),\n completion_tokens: z3.number(),\n total_tokens: z3.number(),\n num_cached_tokens: z3.number().nullish(),\n prompt_tokens_details: z3.object({ cached_tokens: z3.number().nullish() }).nullish(),\n prompt_token_details: z3.object({ cached_tokens: z3.number().nullish() }).nullish()\n});\nvar mistralChatResponseSchema = z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n message: z3.object({\n role: z3.literal(\"assistant\"),\n content: mistralContentSchema,\n tool_calls: z3.array(\n z3.object({\n id: z3.string(),\n function: z3.object({ name: z3.string(), arguments: z3.string() })\n })\n ).nullish()\n }),\n index: z3.number(),\n finish_reason: z3.string().nullish()\n })\n ),\n object: z3.literal(\"chat.completion\"),\n usage: mistralUsageSchema\n});\nvar mistralChatChunkSchema = z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n delta: z3.object({\n role: z3.enum([\"assistant\"]).optional(),\n content: mistralContentSchema,\n tool_calls: z3.array(\n z3.object({\n id: z3.string(),\n function: z3.object({ name: z3.string(), arguments: z3.string() })\n })\n ).nullish()\n }),\n finish_reason: z3.string().nullish(),\n index: z3.number()\n })\n ),\n usage: mistralUsageSchema.nullish()\n});\n\n// src/mistral-embedding-model.ts\nimport {\n TooManyEmbeddingValuesForCallError\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders as combineHeaders2,\n createJsonResponseHandler as createJsonResponseHandler2,\n postJsonToApi as postJsonToApi2\n} from \"@ai-sdk/provider-utils\";\nimport { z as z4 } from \"zod/v4\";\nvar MistralEmbeddingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.maxEmbeddingsPerCall = 32;\n this.supportsParallelCalls = false;\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async doEmbed({\n values,\n abortSignal,\n headers\n }) {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values\n });\n }\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi2({\n url: `${this.config.baseURL}/embeddings`,\n headers: combineHeaders2(this.config.headers(), headers),\n body: {\n model: this.modelId,\n input: values,\n encoding_format: \"float\"\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler2(\n MistralTextEmbeddingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n warnings: [],\n embeddings: response.data.map((item) => item.embedding),\n usage: response.usage ? { tokens: response.usage.prompt_tokens } : void 0,\n response: { headers: responseHeaders, body: rawValue }\n };\n }\n};\nvar MistralTextEmbeddingResponseSchema = z4.object({\n data: z4.array(z4.object({ embedding: z4.array(z4.number()) })),\n usage: z4.object({ prompt_tokens: z4.number() }).nullish()\n});\n\n// src/mistral-speech-model.ts\nimport {\n combineHeaders as combineHeaders3,\n createJsonResponseHandler as createJsonResponseHandler3,\n parseProviderOptions as parseProviderOptions2,\n postToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z6 } from \"zod/v4\";\n\n// src/mistral-speech-model-options.ts\nimport { z as z5 } from \"zod/v4\";\nvar mistralSpeechModelOptions = z5.object({\n /**\n * Base64-encoded reference audio for one-off voice cloning.\n *\n * When provided, this takes precedence over the standard `voice` option.\n */\n refAudio: z5.string().min(1).optional()\n});\n\n// src/mistral-speech-model.ts\nvar MistralSpeechModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n text,\n voice,\n outputFormat = \"mp3\",\n instructions,\n speed,\n language,\n providerOptions\n }) {\n const warnings = [];\n const mistralOptions = await parseProviderOptions2({\n provider: \"mistral\",\n providerOptions,\n schema: mistralSpeechModelOptions\n });\n let responseFormat = \"mp3\";\n if ([\"pcm\", \"wav\", \"mp3\", \"flac\", \"opus\"].includes(outputFormat)) {\n responseFormat = outputFormat;\n } else {\n warnings.push({\n type: \"unsupported\",\n feature: \"outputFormat\",\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`\n });\n }\n if (instructions != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"instructions\",\n details: \"Mistral speech models do not support the `instructions` option. Use a reference audio clip to guide delivery.\"\n });\n }\n if (speed != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"speed\",\n details: \"Mistral speech models do not support the `speed` option. It was ignored.\"\n });\n }\n if (language != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"language\",\n details: \"Mistral speech models do not support the `language` option. Language is inferred from the input text and voice.\"\n });\n }\n const refAudio = mistralOptions == null ? void 0 : mistralOptions.refAudio;\n const requestBody = {\n model: this.modelId,\n input: text,\n voice_id: refAudio == null ? voice : void 0,\n ref_audio: refAudio,\n response_format: responseFormat,\n stream: false\n };\n const requestBodyValues = {\n ...requestBody,\n ref_audio: refAudio == null ? void 0 : \"[redacted]\"\n };\n return { requestBody, requestBodyValues, warnings };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e;\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n const { requestBody, requestBodyValues, warnings } = await this.getArgs(options);\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse\n } = await postToApi({\n url: `${this.config.baseURL}/audio/speech`,\n headers: combineHeaders3(\n { \"Content-Type\": \"application/json\" },\n (_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d),\n options.headers\n ),\n body: {\n content: JSON.stringify(requestBody),\n values: requestBodyValues\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler3(\n mistralSpeechResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n return {\n audio: response.audio_data,\n warnings,\n request: {\n body: JSON.stringify(requestBodyValues)\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse\n }\n };\n }\n};\nvar mistralSpeechResponseSchema = z6.object({\n audio_data: z6.string()\n});\n\n// src/version.ts\nvar VERSION = true ? \"3.0.51\" : \"0.0.0-test\";\n\n// src/mistral-provider.ts\nfunction createMistral(options = {}) {\n var _a;\n const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : \"https://api.mistral.ai/v1\";\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"MISTRAL_API_KEY\",\n description: \"Mistral\"\n })}`,\n ...options.headers\n },\n `ai-sdk/mistral/${VERSION}`\n );\n const createChatModel = (modelId) => new MistralChatLanguageModel(modelId, {\n provider: \"mistral.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId\n });\n const createEmbeddingModel = (modelId) => new MistralEmbeddingModel(modelId, {\n provider: \"mistral.embedding\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createSpeechModel = (modelId) => new MistralSpeechModel(modelId, {\n provider: \"mistral.speech\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const provider = function(modelId) {\n if (new.target) {\n throw new Error(\n \"The Mistral model function cannot be called with the new keyword.\"\n );\n }\n return createChatModel(modelId);\n };\n provider.specificationVersion = \"v3\";\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar mistral = createMistral();\nexport {\n VERSION,\n createMistral,\n mistral\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "D0DE54CABB2A489564756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/azure.ts"], | ||
| "sourcesContent": [ | ||
| "import { Auth } from \"../route/auth\"\nimport { type AtLeastOne, type ProviderAuthOption } from \"../route/auth-options\"\nimport type { Route as RouteDef, RouteDefaultsInput } from \"../route/client\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { ProviderID, type ModelID } from \"../schema\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport * as OpenAIResponses from \"../protocols/openai-responses\"\nimport { withOpenAIOptions, type OpenAIProviderOptionsInput } from \"./openai-options\"\n\nexport const id = ProviderID.make(\"azure\")\nconst routeAuth = Auth.remove(\"authorization\")\n\n// Azure needs the customer's resource URL; supply either `resourceName`\n// (helper builds the URL) or `baseURL` directly.\ntype AzureURL = AtLeastOne<{ readonly resourceName: string; readonly baseURL: string }>\n\nexport type LanguageModelOptions = AzureURL &\n RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly apiVersion?: string\n readonly queryParams?: Record<string, string>\n readonly useCompletionUrls?: boolean\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\nexport type Config = LanguageModelOptions\n\nexport type Settings = ProviderPackage.Settings &\n AzureURL & {\n readonly apiKey?: string\n readonly apiVersion?: string\n readonly queryParams?: Readonly<Record<string, string>>\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nconst resourceBaseURL = (resourceName: string) => `https://${resourceName.trim()}.openai.azure.com/openai/v1`\n\nconst responsesRoute = OpenAIResponses.route.with({\n id: \"azure-openai-responses\",\n provider: id,\n auth: routeAuth,\n endpoint: {\n query: { \"api-version\": \"v1\" },\n },\n})\n\nconst chatRoute = OpenAIChat.route.with({\n id: \"azure-openai-chat\",\n provider: id,\n auth: routeAuth,\n endpoint: {\n query: { \"api-version\": \"v1\" },\n },\n})\n\nexport const routes = [responsesRoute, chatRoute]\n\nconst defaults = (input: Config) => {\n const {\n apiKey: _,\n apiVersion: _apiVersion,\n resourceName: _resourceName,\n useCompletionUrls: _useCompletionUrls,\n baseURL: _baseURL,\n queryParams: _queryParams,\n ...rest\n } = input\n if (\"auth\" in rest) {\n const { auth: _, ...withoutAuth } = rest\n return withoutAuth\n }\n return rest\n}\n\nconst auth = (input: Config) => {\n if (\"auth\" in input && input.auth) return input.auth\n return Auth.remove(\"authorization\").andThen(\n Auth.optional(\"apiKey\" in input ? input.apiKey : undefined, \"apiKey\")\n .orElse(Auth.config(\"AZURE_OPENAI_API_KEY\"))\n .pipe(Auth.header(\"api-key\")),\n )\n}\n\nconst configuredRoute = <Body, Prepared>(route: RouteDef<Body, Prepared>, input: Config) =>\n route.with({\n auth: auth(input),\n endpoint: {\n // AtLeastOne guarantees at least one is set; baseURL wins if both are.\n baseURL: input.baseURL ?? resourceBaseURL(input.resourceName!),\n query: {\n ...(input.apiVersion ? { \"api-version\": input.apiVersion } : {}),\n ...input.queryParams,\n },\n },\n })\n\nexport const configure = (input: Config) => {\n const configuredResponsesRoute = configuredRoute(responsesRoute, input)\n const configuredChatRoute = configuredRoute(chatRoute, input)\n const modelDefaults = defaults(input)\n\n const responses = (modelID: string | ModelID) =>\n configuredResponsesRoute\n .with(withOpenAIOptions(modelID, modelDefaults))\n .model<OpenAIProviderOptionsInput>({ id: modelID })\n\n const chat = (modelID: string | ModelID) =>\n configuredChatRoute\n .with(withOpenAIOptions(modelID, modelDefaults))\n .model<OpenAIProviderOptionsInput>({ id: modelID })\n\n return {\n id,\n model: (modelID: string | ModelID) => (input.useCompletionUrls === true ? chat(modelID) : responses(modelID)),\n responses,\n chat,\n configure,\n }\n}\n\nexport const provider = {\n id,\n configure,\n}\n\nconst config = (settings: Settings): Config => {\n const common = {\n apiKey: settings.apiKey,\n apiVersion: settings.apiVersion,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n queryParams: settings.queryParams === undefined ? undefined : { ...settings.queryParams },\n }\n if (settings.baseURL !== undefined) return { ...common, baseURL: settings.baseURL }\n if (settings.resourceName !== undefined) return { ...common, resourceName: settings.resourceName }\n throw new Error(\"Azure requires resourceName or baseURL\")\n}\n\nexport const responsesModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => configure(config(settings)).responses(modelID)\nexport const chatModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => configure(config(settings)).chat(modelID)\nexport const model = responsesModel\n" | ||
| ], | ||
| "mappings": ";yMASO,SAAM,OAAK,OAAW,KAAK,OAAO,EACnC,EAAY,EAAK,OAAO,eAAe,EAwBvC,EAAkB,CAAC,IAAyB,WAAW,EAAa,KAAK,+BAEzE,EAAiC,EAAM,KAAK,CAChD,GAAI,yBACJ,SAAU,EACV,KAAM,EACN,SAAU,CACR,MAAO,CAAE,cAAe,IAAK,CAC/B,CACF,CAAC,EAEK,EAAuB,EAAM,KAAK,CACtC,GAAI,oBACJ,SAAU,EACV,KAAM,EACN,SAAU,CACR,MAAO,CAAE,cAAe,IAAK,CAC/B,CACF,CAAC,EAEY,EAAS,CAAC,EAAgB,CAAS,EAE1C,EAAW,CAAC,IAAkB,CAClC,IACE,OAAQ,EACR,WAAY,EACZ,aAAc,EACd,kBAAmB,EACnB,QAAS,EACT,YAAa,KACV,GACD,EACJ,GAAI,SAAU,EAAM,CAClB,IAAQ,KAAM,KAAM,GAAgB,EACpC,OAAO,EAET,OAAO,GAGH,EAAO,CAAC,IAAkB,CAC9B,GAAI,SAAU,GAAS,EAAM,KAAM,OAAO,EAAM,KAChD,OAAO,EAAK,OAAO,eAAe,EAAE,QAClC,EAAK,SAAS,WAAY,EAAQ,EAAM,OAAS,OAAW,QAAQ,EACjE,OAAO,EAAK,OAAO,sBAAsB,CAAC,EAC1C,KAAK,EAAK,OAAO,SAAS,CAAC,CAChC,GAGI,EAAkB,CAAiB,EAAiC,IACxE,EAAM,KAAK,CACT,KAAM,EAAK,CAAK,EAChB,SAAU,CAER,QAAS,EAAM,SAAW,EAAgB,EAAM,YAAa,EAC7D,MAAO,IACD,EAAM,WAAa,CAAE,cAAe,EAAM,UAAW,EAAI,CAAC,KAC3D,EAAM,WACX,CACF,CACF,CAAC,EAEU,EAAY,CAAC,IAAkB,CAC1C,IAAM,EAA2B,EAAgB,EAAgB,CAAK,EAChE,EAAsB,EAAgB,EAAW,CAAK,EACtD,EAAgB,EAAS,CAAK,EAE9B,EAAY,CAAC,IACjB,EACG,KAAK,EAAkB,EAAS,CAAa,CAAC,EAC9C,MAAkC,CAAE,GAAI,CAAQ,CAAC,EAEhD,EAAO,CAAC,IACZ,EACG,KAAK,EAAkB,EAAS,CAAa,CAAC,EAC9C,MAAkC,CAAE,GAAI,CAAQ,CAAC,EAEtD,MAAO,CACL,KACA,MAAO,CAAC,IAA+B,EAAM,oBAAsB,GAAO,EAAK,CAAO,EAAI,EAAU,CAAO,EAC3G,YACA,OACA,WACF,GAGW,EAAW,CACtB,KACA,WACF,EAEM,EAAS,CAAC,IAA+B,CAC7C,IAAM,EAAS,CACb,OAAQ,EAAS,OACjB,WAAY,EAAS,WACrB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,gBAAiB,EAAS,gBAC1B,YAAa,EAAS,cAAgB,OAAY,OAAY,IAAK,EAAS,WAAY,CAC1F,EACA,GAAI,EAAS,UAAY,OAAW,MAAO,IAAK,EAAQ,QAAS,EAAS,OAAQ,EAClF,GAAI,EAAS,eAAiB,OAAW,MAAO,IAAK,EAAQ,aAAc,EAAS,YAAa,EACjG,MAAU,MAAM,wCAAwC,GAG7C,EAA4F,CACvG,EACA,IACG,EAAU,EAAO,CAAQ,CAAC,EAAE,UAAU,CAAO,EACrC,EAAuF,CAClG,EACA,IACG,EAAU,EAAO,CAAQ,CAAC,EAAE,KAAK,CAAO,EAChC,EAAQ", | ||
| "debugId": "3327360D0674F7E864756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/util/session.ts"], | ||
| "sourcesContent": [ | ||
| "import type { ModelInfo, SessionMessageAssistant, SessionMessageInfo } from \"@opencode-ai/client\"\nimport { Locale } from \"./locale\"\n\nexport function lastAssistantWithUsage(messages: ReadonlyArray<SessionMessageInfo>, boundary?: string) {\n const boundaryIndex = boundary ? messages.findIndex((message) => message.id === boundary) : -1\n if (boundary && boundaryIndex === -1) return undefined\n const end = boundaryIndex === -1 ? messages.length : boundaryIndex\n const compactionIndex = messages.findLastIndex(\n (message, index) => message.type === \"compaction\" && message.status === \"completed\" && index < end,\n )\n return messages.findLast(\n (message, index): message is SessionMessageAssistant & { tokens: NonNullable<SessionMessageAssistant[\"tokens\"]> } =>\n message.type === \"assistant\" && message.tokens !== undefined && index > compactionIndex && index < end,\n )\n}\n\nexport function contextUsage(\n messages: ReadonlyArray<SessionMessageInfo>,\n models: ReadonlyArray<ModelInfo> | undefined,\n boundary?: string,\n) {\n const last = lastAssistantWithUsage(messages, boundary)\n if (!last) return\n const tokens =\n last.tokens.input + last.tokens.output + last.tokens.reasoning + last.tokens.cache.read + last.tokens.cache.write\n if (tokens <= 0) return\n const model = models?.find((model) => model.providerID === last.model.providerID && model.id === last.model.id)\n return {\n tokens,\n percent: model?.limit.context ? Math.round((tokens / model.limit.context) * 100) : undefined,\n }\n}\n\nexport function formatContextUsage(tokens: number, percent?: number) {\n const value = Locale.number(tokens)\n return percent === undefined ? value : `${value} (${percent}%)`\n}\n" | ||
| ], | ||
| "mappings": ";oDAGO,SAAS,CAAsB,CAAC,EAA6C,EAAmB,CACrG,IAAM,EAAgB,EAAW,EAAS,UAAU,CAAC,IAAY,EAAQ,KAAO,CAAQ,EAAI,GAC5F,GAAI,GAAY,IAAkB,GAAI,OACtC,IAAM,EAAM,IAAkB,GAAK,EAAS,OAAS,EAC/C,EAAkB,EAAS,cAC/B,CAAC,EAAS,IAAU,EAAQ,OAAS,cAAgB,EAAQ,SAAW,aAAe,EAAQ,CACjG,EACA,OAAO,EAAS,SACd,CAAC,EAAS,IACR,EAAQ,OAAS,aAAe,EAAQ,SAAW,QAAa,EAAQ,GAAmB,EAAQ,CACvG,EAGK,SAAS,CAAY,CAC1B,EACA,EACA,EACA,CACA,IAAM,EAAO,EAAuB,EAAU,CAAQ,EACtD,GAAI,CAAC,EAAM,OACX,IAAM,EACJ,EAAK,OAAO,MAAQ,EAAK,OAAO,OAAS,EAAK,OAAO,UAAY,EAAK,OAAO,MAAM,KAAO,EAAK,OAAO,MAAM,MAC9G,GAAI,GAAU,EAAG,OACjB,IAAM,EAAQ,GAAQ,KAAK,CAAC,IAAU,EAAM,aAAe,EAAK,MAAM,YAAc,EAAM,KAAO,EAAK,MAAM,EAAE,EAC9G,MAAO,CACL,SACA,QAAS,GAAO,MAAM,QAAU,KAAK,MAAO,EAAS,EAAM,MAAM,QAAW,GAAG,EAAI,MACrF,EAGK,SAAS,CAAkB,CAAC,EAAgB,EAAkB,CACnE,IAAM,EAAQ,EAAO,OAAO,CAAM,EAClC,OAAO,IAAY,OAAY,EAAQ,GAAG,MAAU", | ||
| "debugId": "28C4379C8AF4E99664756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/utils/tool-stream.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { AIError, LLMEvent, type ProviderMetadata, type ToolCall, type ToolInputError } from \"../../schema\"\nimport { eventError, parseToolInput, type ToolAccumulator } from \"../shared\"\n\ntype StreamKey = string | number\n\n/**\n * One pending streamed tool call. Providers emit the tool identity and JSON\n * argument text across separate chunks; `input` is the raw JSON string collected\n * so far, not the parsed object.\n */\nexport interface PendingTool extends ToolAccumulator {\n readonly providerExecuted?: boolean\n readonly providerMetadata?: ProviderMetadata\n}\n\n/**\n * Sparse parser state keyed by the provider's stream-local tool identifier.\n *\n * This key is not the final tool-call id (`call_...`). It is the id/index the\n * provider uses while streaming a partial call: OpenAI Chat / Anthropic /\n * Bedrock use numeric content indexes, while OpenAI Responses uses string\n * `item_id`s. The generic keeps each protocol internally consistent.\n */\nexport type State<K extends StreamKey> = Partial<Record<K, PendingTool>>\n\n/**\n * Result of adding argument text to one pending tool call. It returns both the\n * next `tools` state and the updated `tool` because parsers often need the\n * current id/name immediately. `events` contains lifecycle and delta events\n * produced by the append; metadata-only deltas update identity without output.\n */\nexport interface AppendOutcome<K extends StreamKey> {\n readonly tools: State<K>\n readonly tool: PendingTool\n readonly events: ReadonlyArray<LLMEvent>\n}\n\n/** Create empty accumulator state for one provider stream. */\nexport const empty = <K extends StreamKey>(): State<K> => ({})\n\nconst withTool = <K extends StreamKey>(tools: State<K>, key: K, tool: PendingTool): State<K> => {\n return { ...tools, [key]: tool }\n}\n\nconst withoutTool = <K extends StreamKey>(tools: State<K>, key: K): State<K> => {\n const next = { ...tools }\n delete next[key]\n return next\n}\n\nconst inputStart = (tool: PendingTool) =>\n LLMEvent.toolInputStart({\n id: tool.id,\n name: tool.name,\n providerExecuted: tool.providerExecuted ? true : undefined,\n providerMetadata: tool.providerMetadata,\n })\n\nconst inputDelta = (tool: PendingTool, text: string) =>\n LLMEvent.toolInputDelta({\n id: tool.id,\n name: tool.name,\n text,\n })\n\nconst toolCall = (route: string, tool: PendingTool, inputOverride?: string) => {\n const raw = inputOverride ?? tool.input\n return parseToolInput(route, tool.name, raw).pipe(\n Effect.map((input): ToolCall | ToolInputError =>\n LLMEvent.toolCall({\n id: tool.id,\n name: tool.name,\n input,\n providerExecuted: tool.providerExecuted ? true : undefined,\n providerMetadata: tool.providerMetadata,\n }),\n ),\n Effect.catch((error) =>\n tool.providerExecuted\n ? Effect.fail(error)\n : Effect.succeed(\n LLMEvent.toolInputError({\n id: tool.id,\n name: tool.name,\n raw,\n }),\n ),\n ),\n )\n}\n\nconst finishEvents = (tool: PendingTool, event: ToolCall | ToolInputError): ReadonlyArray<LLMEvent> =>\n event.type === \"tool-input-error\"\n ? [event]\n : [LLMEvent.toolInputEnd({ id: tool.id, name: tool.name, providerMetadata: tool.providerMetadata }), event]\n\n/** Store the updated tool and produce the optional public delta event. */\nconst appendTool = <K extends StreamKey>(\n tools: State<K>,\n key: K,\n tool: PendingTool,\n text: string,\n): AppendOutcome<K> => {\n const events: LLMEvent[] = []\n if (!tools[key]) events.push(inputStart(tool))\n if (text.length > 0) events.push(inputDelta(tool, text))\n return {\n tools: withTool(tools, key, tool),\n tool,\n events,\n }\n}\n\nexport const isError = <K extends StreamKey>(result: AppendOutcome<K> | AIError): result is AIError =>\n result instanceof AIError\n\n/**\n * Register a tool call whose start event arrived before any argument deltas.\n * Used by Anthropic `content_block_start`, Bedrock `contentBlockStart`, and\n * OpenAI Responses `response.output_item.added`.\n */\nexport const start = <K extends StreamKey>(\n tools: State<K>,\n key: K,\n tool: Omit<PendingTool, \"input\"> & { readonly input?: string },\n) => withTool(tools, key, { ...tool, input: tool.input ?? \"\" })\n\n/**\n * Append a streamed argument delta, starting the tool if this provider encodes\n * identity on the first delta instead of a separate start event. OpenAI Chat has\n * this shape: `tool_calls[].index` is the stream key, and `id` / `name` may only\n * appear on the first delta for that index.\n */\nexport const appendOrStart = <K extends StreamKey>(\n route: string,\n tools: State<K>,\n key: K,\n delta: { readonly id?: string; readonly name?: string; readonly text: string },\n missingToolMessage: string,\n): AppendOutcome<K> | AIError => {\n const current = tools[key]\n const id = current?.id ?? delta.id\n const name = current?.name ?? delta.name\n if (!id || !name) return eventError(route, missingToolMessage)\n\n const tool = {\n id,\n name,\n input: `${current?.input ?? \"\"}${delta.text}`,\n providerExecuted: current?.providerExecuted,\n providerMetadata: current?.providerMetadata,\n }\n if (current && delta.text.length === 0 && current.id === id && current.name === name)\n return { tools, tool: current, events: [] }\n return appendTool(tools, key, tool, delta.text)\n}\n\n/**\n * Append argument text to a tool that must already have been started. This keeps\n * protocols honest when their stream grammar promises a start event before any\n * argument delta.\n */\nexport const appendExisting = <K extends StreamKey>(\n route: string,\n tools: State<K>,\n key: K,\n text: string,\n missingToolMessage: string,\n): AppendOutcome<K> | AIError => {\n const current = tools[key]\n if (!current) return eventError(route, missingToolMessage)\n if (text.length === 0) return { tools, tool: current, events: [] }\n return appendTool(tools, key, { ...current, input: `${current.input}${text}` }, text)\n}\n\n/**\n * Finalize one pending tool call: parse the accumulated raw JSON, remove it\n * from state, and return either a call or a non-executable local input error.\n * Missing keys are a no-op because some providers emit stop events for\n * non-tool content blocks.\n */\nexport const finish = <K extends StreamKey>(route: string, tools: State<K>, key: K) =>\n Effect.gen(function* () {\n const tool = tools[key]\n if (!tool) return { tools }\n return {\n tools: withoutTool(tools, key),\n events: finishEvents(tool, yield* toolCall(route, tool)),\n }\n })\n\n/**\n * Finalize one pending tool call with an authoritative final input string.\n * OpenAI Responses can send accumulated deltas and then repeat the completed\n * arguments on `response.output_item.done`; the final value wins.\n */\nexport const finishWithInput = <K extends StreamKey>(route: string, tools: State<K>, key: K, input: string) =>\n Effect.gen(function* () {\n const tool = tools[key]\n if (!tool) return { tools }\n return {\n tools: withoutTool(tools, key),\n events: finishEvents(tool, yield* toolCall(route, tool, input)),\n }\n })\n\n/**\n * Finalize every pending tool call at once. OpenAI Chat has this shape: it does\n * not emit per-tool stop events, so all accumulated calls finish independently\n * when the choice receives a terminal `finish_reason`.\n */\nexport const finishAll = <K extends StreamKey>(route: string, tools: State<K>) =>\n Effect.gen(function* () {\n const pending = Object.values<PendingTool | undefined>(tools).filter(\n (tool): tool is PendingTool => tool !== undefined,\n )\n return {\n tools: empty<K>(),\n events: yield* Effect.forEach(pending, (tool) =>\n toolCall(route, tool).pipe(Effect.map((event) => finishEvents(tool, event))),\n ).pipe(Effect.map((events) => events.flat())),\n }\n })\n\nexport * as ToolStream from \"./tool-stream\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "5861EB251F828D6364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../schema/src/tool.ts", "../schema/src/llm.ts"], | ||
| "sourcesContent": [ | ||
| "export * as Tool from \"./tool.js\"\n\nimport { Effect, JsonSchema, Schema } from \"effect\"\nimport type { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\"\nimport type { Agent } from \"./agent.js\"\nimport type { Session } from \"./session.js\"\nimport type { SessionMessage } from \"./session-message.js\"\n\nexport type Metadata = Readonly<Record<string, any>>\n\nexport const CallID = Schema.String.pipe(Schema.brand(\"Tool.CallID\"))\nexport type CallID = typeof CallID.Type\n\nexport interface Context {\n readonly sessionID: Session.ID\n readonly agent: Agent.ID\n readonly messageID: SessionMessage.ID\n readonly callID: CallID\n readonly progress: (update: Metadata) => Effect.Effect<void>\n}\n\ninterface BaseOptions {\n readonly namespace?: string\n readonly permission?: string\n}\n\nexport type Options = BaseOptions &\n (\n | {\n readonly codemode?: true\n readonly pinned?: boolean\n }\n | {\n readonly codemode: boolean\n readonly pinned?: never\n }\n )\n\nexport type ValueSchema<A = unknown> =\n | Schema.Codec<A, any>\n | (StandardSchemaV1<any, A> & StandardJSONSchemaV1<any, A>)\n | JsonSchema.JsonSchema\n\ntype InputValue<S> = 0 extends 1 & S\n ? any\n : S extends Schema.Codec<infer A, any>\n ? A\n : S extends StandardSchemaV1<any, infer A>\n ? A\n : unknown\ntype OutputValue<S> = S extends undefined\n ? never\n : S extends Schema.Codec<infer A, any>\n ? A\n : S extends StandardSchemaV1<infer A, any>\n ? A\n : any\n\nexport class Error extends Schema.TaggedErrorClass<Error>()(\"Tool.Error\", {\n message: Schema.String,\n error: Schema.optional(Schema.Defect()),\n metadata: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n}) {}\n\nexport interface TextContent extends Schema.Schema.Type<typeof TextContent> {}\nexport const TextContent = Schema.Struct({\n type: Schema.Literal(\"text\"),\n text: Schema.String,\n}).annotate({ identifier: \"Tool.TextContent\" })\n\nexport interface FileContent extends Schema.Schema.Type<typeof FileContent> {}\nexport const FileContent = Schema.Struct({\n type: Schema.Literal(\"file\"),\n uri: Schema.String,\n mime: Schema.String,\n name: Schema.optional(Schema.String),\n}).annotate({ identifier: \"Tool.FileContent\" })\n\nexport const Content = Schema.Union([TextContent, FileContent])\n .pipe(Schema.toTaggedUnion(\"type\"))\n .annotate({ identifier: \"Tool.Content\" })\nexport type Content = Schema.Schema.Type<typeof Content>\n\nexport interface Result<Output extends ValueSchema<any> | undefined = ValueSchema<any> | undefined> {\n readonly output?: OutputValue<Output>\n readonly content?: string | ReadonlyArray<Content>\n readonly metadata?: Metadata\n}\n\nexport type Info<\n Input extends ValueSchema<any> = ValueSchema<any>,\n Output extends ValueSchema<any> | undefined = ValueSchema<any> | undefined,\n> = {\n readonly name: string\n readonly input: Input\n readonly description: string\n readonly execute: (input: InputValue<Input>, context: Context) => Effect.Effect<Result<Output>, Error>\n readonly output?: Output\n readonly options?: Options\n}\n", | ||
| "export * as LLM from \"./llm.js\"\n\nimport { Schema } from \"effect\"\n\nexport const FinishReason = Schema.Literals([\"stop\", \"length\", \"tool-calls\", \"content-filter\", \"error\", \"unknown\"])\nexport type FinishReason = typeof FinishReason.Type\n" | ||
| ], | ||
| "mappings": ";yMAUO,SAAM,EAAS,EAAO,OAAO,KAAK,EAAO,MAAM,aAAa,CAAC,EAgD7D,MAAM,UAAc,EAAO,iBAAwB,EAAE,aAAc,CACxE,QAAS,EAAO,OAChB,MAAO,EAAO,SAAS,EAAO,OAAO,CAAC,EACtC,SAAU,EAAO,SAAS,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,CACxE,CAAC,CAAE,CAAC,CAGG,IAAM,EAAc,EAAO,OAAO,CACvC,KAAM,EAAO,QAAQ,MAAM,EAC3B,KAAM,EAAO,MACf,CAAC,EAAE,SAAS,CAAE,WAAY,kBAAmB,CAAC,EAGjC,EAAc,EAAO,OAAO,CACvC,KAAM,EAAO,QAAQ,MAAM,EAC3B,IAAK,EAAO,OACZ,KAAM,EAAO,OACb,KAAM,EAAO,SAAS,EAAO,MAAM,CACrC,CAAC,EAAE,SAAS,CAAE,WAAY,kBAAmB,CAAC,EAEjC,EAAU,EAAO,MAAM,CAAC,EAAa,CAAW,CAAC,EAC3D,KAAK,EAAO,cAAc,MAAM,CAAC,EACjC,SAAS,CAAE,WAAY,cAAe,CAAC,+CC5EnC,IAAM,EAAe,EAAO,SAAS,CAAC,OAAQ,SAAU,aAAc,iBAAkB,QAAS,SAAS,CAAC", | ||
| "debugId": "90C917DDE9A15E3064756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/uqr@0.1.3/node_modules/uqr/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "var QrCodeDataType = /* @__PURE__ */ ((QrCodeDataType2) => {\n QrCodeDataType2[QrCodeDataType2[\"Border\"] = -1] = \"Border\";\n QrCodeDataType2[QrCodeDataType2[\"Data\"] = 0] = \"Data\";\n QrCodeDataType2[QrCodeDataType2[\"Function\"] = 1] = \"Function\";\n QrCodeDataType2[QrCodeDataType2[\"Position\"] = 2] = \"Position\";\n QrCodeDataType2[QrCodeDataType2[\"Timing\"] = 3] = \"Timing\";\n QrCodeDataType2[QrCodeDataType2[\"Alignment\"] = 4] = \"Alignment\";\n return QrCodeDataType2;\n})(QrCodeDataType || {});\n\nconst LOW = [0, 1];\nconst MEDIUM = [1, 0];\nconst QUARTILE = [2, 3];\nconst HIGH = [3, 2];\nconst EccMap = {\n L: LOW,\n M: MEDIUM,\n Q: QUARTILE,\n H: HIGH\n};\nconst NUMERIC_REGEX = /^\\d*$/;\nconst ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+./:-]*$/;\nconst ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\nconst MIN_VERSION = 1;\nconst MAX_VERSION = 40;\nconst PENALTY_N1 = 3;\nconst PENALTY_N2 = 3;\nconst PENALTY_N3 = 40;\nconst PENALTY_N4 = 10;\nconst ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n];\nconst NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n];\nclass QrCode {\n /* -- Constructor (low level) and fields -- */\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, ecc, dataCodewords, msk) {\n this.version = version;\n this.ecc = ecc;\n if (version < MIN_VERSION || version > MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n const row = Array.from({ length: this.size }).fill(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.types.push(row.map(() => 0));\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk === -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n }\n /* -- Fields -- */\n // The width and height of this QR Code, measured in modules, between\n // 21 and 177 (inclusive). This is equal to version * 4 + 17.\n size;\n // The index of the mask pattern used in this QR Code, which is between 0 and 7 (inclusive).\n // Even if a QR Code is created with automatic masking requested (mask = -1),\n // the resulting object still has a mask value between 0 and 7.\n mask;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n modules = [];\n types = [];\n /* -- Accessor methods -- */\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return x >= 0 && x < this.size && y >= 0 && y < this.size && this.modules[y][x];\n }\n /* -- Private helper methods for constructor: Drawing function modules -- */\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 === 0, QrCodeDataType.Timing);\n this.setFunctionModule(i, 6, i % 2 === 0, QrCodeDataType.Timing);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i === 0 && j === 0 || i === 0 && j === numAlign - 1 || i === numAlign - 1 && j === 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.ecc[1] << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (xx >= 0 && xx < this.size && yy >= 0 && yy < this.size)\n this.setFunctionModule(xx, yy, dist !== 2 && dist !== 4, QrCodeDataType.Position);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++) {\n this.setFunctionModule(\n x + dx,\n y + dy,\n Math.max(Math.abs(dx), Math.abs(dy)) !== 1,\n QrCodeDataType.Alignment\n );\n }\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark, type = QrCodeDataType.Function) {\n this.modules[y][x] = isDark;\n this.types[y][x] = type;\n }\n /* -- Private helper methods for constructor: Codewords and masking -- */\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.ecc;\n if (data.length !== getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecl[0]][ver];\n const blockEccLen = ECC_CODEWORDS_PER_BLOCK[ecl[0]][ver];\n const rawCodewords = Math.floor(getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n const blocks = [];\n const rsDiv = reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n const dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n const result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i !== shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length !== Math.floor(getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right === 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) === 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.types[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 === 0;\n break;\n case 1:\n invert = y % 2 === 0;\n break;\n case 2:\n invert = x % 3 === 0;\n break;\n case 3:\n invert = (x + y) % 3 === 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 === 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 === 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 === 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.types[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] === runColor) {\n runX++;\n if (runX === 5)\n result += PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] === runColor) {\n runY++;\n if (runY === 5)\n result += PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color === this.modules[y][x + 1] && color === this.modules[y + 1][x] && color === this.modules[y + 1][x + 1]) {\n result += PENALTY_N2;\n }\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n result += k * PENALTY_N4;\n return result;\n }\n /* -- Private helper functions -- */\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version === 1) {\n return [];\n } else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version === 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n const result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n const core = n > 0 && runHistory[2] === n && runHistory[3] === n * 3 && runHistory[4] === n && runHistory[5] === n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] === 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n}\nfunction appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len !== 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n}\nfunction getBit(x, i) {\n return (x >>> i & 1) !== 0;\n}\nclass QrSegment {\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /* -- Methods -- */\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n}\nconst MODE_NUMERIC = [1, 10, 12, 14];\nconst MODE_ALPHANUMERIC = [2, 9, 11, 13];\nconst MODE_BYTE = [4, 8, 16, 16];\nfunction numCharCountBits(mode, ver) {\n return mode[Math.floor((ver + 7) / 17) + 1];\n}\nfunction makeBytes(data) {\n const bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new QrSegment(MODE_BYTE, data.length, bb);\n}\nfunction makeNumeric(digits) {\n if (!isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n const bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(Number.parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new QrSegment(MODE_NUMERIC, digits.length, bb);\n}\nfunction makeAlphanumeric(text) {\n if (!isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n const bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new QrSegment(MODE_ALPHANUMERIC, text.length, bb);\n}\nfunction makeSegments(text) {\n if (text === \"\")\n return [];\n else if (isNumeric(text))\n return [makeNumeric(text)];\n else if (isAlphanumeric(text))\n return [makeAlphanumeric(text)];\n else\n return [makeBytes(toUtf8ByteArray(text))];\n}\nfunction isNumeric(text) {\n return NUMERIC_REGEX.test(text);\n}\nfunction isAlphanumeric(text) {\n return ALPHANUMERIC_REGEX.test(text);\n}\nfunction getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = numCharCountBits(seg.mode, version);\n if (seg.numChars >= 1 << ccbits)\n return Number.POSITIVE_INFINITY;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n}\nfunction toUtf8ByteArray(str) {\n str = encodeURI(str);\n const result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) !== \"%\") {\n result.push(str.charCodeAt(i));\n } else {\n result.push(Number.parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n}\nfunction getNumRawDataModules(ver) {\n if (ver < MIN_VERSION || ver > MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n return result;\n}\nfunction getNumDataCodewords(ver, ecl) {\n return Math.floor(getNumRawDataModules(ver) / 8) - ECC_CODEWORDS_PER_BLOCK[ecl[0]][ver] * NUM_ERROR_CORRECTION_BLOCKS[ecl[0]][ver];\n}\nfunction reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n const result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = reedSolomonMultiply(root, 2);\n }\n return result;\n}\nfunction reedSolomonComputeRemainder(data, divisor) {\n const result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= reedSolomonMultiply(coef, factor));\n }\n return result;\n}\nfunction reedSolomonMultiply(x, y) {\n if (x >>> 8 !== 0 || y >>> 8 !== 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n return z;\n}\nfunction encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= MAX_VERSION) || mask < -1 || mask > 7) {\n throw new RangeError(\"Invalid value\");\n }\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = getNumDataCodewords(version, ecl) * 8;\n const usedBits = getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [MEDIUM, QUARTILE, HIGH]) {\n if (boostEcl && dataUsedBits <= getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n const bb = [];\n for (const seg of segs) {\n appendBits(seg.mode[0], 4, bb);\n appendBits(seg.numChars, numCharCountBits(seg.mode, version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n const dataCapacityBits = getNumDataCodewords(version, ecl) * 8;\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n const dataCodewords = Array.from({ length: Math.ceil(bb.length / 8) }, () => 0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new QrCode(version, ecl, dataCodewords, mask);\n}\n\nfunction encode(data, options) {\n const {\n ecc = \"L\",\n boostEcc = false,\n minVersion = 1,\n maxVersion = 40,\n maskPattern = -1,\n border = 1\n } = options || {};\n const segment = typeof data === \"string\" ? makeSegments(data) : Array.isArray(data) ? [makeBytes(data)] : void 0;\n if (!segment)\n throw new Error(`uqr only supports encoding string and binary data, but got: ${typeof data}`);\n const qr = encodeSegments(\n segment,\n EccMap[ecc],\n minVersion,\n maxVersion,\n maskPattern,\n boostEcc\n );\n const result = addBorder({\n version: qr.version,\n maskPattern: qr.mask,\n size: qr.size,\n data: qr.modules,\n types: qr.types\n }, border);\n if (options?.invert)\n result.data = result.data.map((row) => row.map((mod) => !mod));\n options?.onEncoded?.(result);\n return result;\n}\nfunction addBorder(input, border = 1) {\n if (!border)\n return input;\n const { size } = input;\n const newSize = size + border * 2;\n input.size = newSize;\n input.data.forEach((row) => {\n for (let i = 0; i < border; i++) {\n row.unshift(false);\n row.push(false);\n }\n });\n for (let i = 0; i < border; i++) {\n input.data.unshift(Array.from({ length: newSize }, (_) => false));\n input.data.push(Array.from({ length: newSize }, (_) => false));\n }\n const b = QrCodeDataType.Border;\n input.types.forEach((row) => {\n for (let i = 0; i < border; i++) {\n row.unshift(b);\n row.push(b);\n }\n });\n for (let i = 0; i < border; i++) {\n input.types.unshift(Array.from({ length: newSize }, (_) => b));\n input.types.push(Array.from({ length: newSize }, (_) => b));\n }\n return input;\n}\nfunction getDataAt(data, x, y, defaults = false) {\n if (x < 0 || y < 0 || x >= data.length || y >= data.length)\n return defaults;\n return data[y][x];\n}\n\nfunction renderUnicode(data, options = {}) {\n const {\n whiteChar = \"\\u2588\",\n blackChar = \"\\u2591\"\n } = options;\n const result = encode(data, options);\n return result.data.map((row) => {\n return row.map((mod) => mod ? blackChar : whiteChar).join(\"\");\n }).join(\"\\n\");\n}\nfunction renderANSI(data, options = {}) {\n return renderUnicode(data, {\n ...options,\n blackChar: \"\\x1B[40m\\u3000\\x1B[0m\",\n whiteChar: \"\\x1B[47m\\u3000\\x1B[0m\"\n });\n}\nfunction renderUnicodeCompact(data, options = {}) {\n const palette = {\n WHITE_ALL: \"\\u2588\",\n WHITE_BLACK: \"\\u2580\",\n BLACK_WHITE: \"\\u2584\",\n BLACK_ALL: \" \"\n };\n const result = encode(data, options);\n const WHITE = false;\n const BLACK = true;\n const at = (x, y) => getDataAt(result.data, x, y, true);\n const lines = [];\n let line = \"\";\n for (let row = 0; row < result.size; row += 2) {\n for (let col = 0; col < result.size; col++) {\n if (at(col, row) === WHITE && at(col, row + 1) === WHITE)\n line += palette.WHITE_ALL;\n else if (at(col, row) === WHITE && at(col, row + 1) === BLACK)\n line += palette.WHITE_BLACK;\n else if (at(col, row) === BLACK && at(col, row + 1) === WHITE)\n line += palette.BLACK_WHITE;\n else\n line += palette.BLACK_ALL;\n }\n lines.push(line);\n line = \"\";\n }\n return lines.join(\"\\n\");\n}\n\nfunction escapeAttr(value) {\n return value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\nfunction renderSVG(data, options = {}) {\n const result = encode(data, options);\n const {\n pixelSize = 10,\n whiteColor = \"white\",\n blackColor = \"black\"\n } = options;\n const height = result.size * pixelSize;\n const width = result.size * pixelSize;\n let svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">`;\n const paths = [];\n for (let row = 0; row < result.size; row++) {\n for (let col = 0; col < result.size; col++) {\n const x = col * pixelSize;\n const y = row * pixelSize;\n if (result.data[row][col])\n paths.push(`M${x},${y}h${pixelSize}v${pixelSize}h-${pixelSize}z`);\n }\n }\n svg += `<rect fill=\"${escapeAttr(whiteColor)}\" width=\"${width}\" height=\"${height}\"/>`;\n svg += `<path fill=\"${escapeAttr(blackColor)}\" d=\"${paths.join(\"\")}\"/>`;\n svg += \"</svg>\";\n return svg;\n}\n\nexport { QrCodeDataType, encode, renderANSI, renderSVG, renderUnicode, renderUnicodeCompact };\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "4B72A774ED98463D64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "570C86F3055AC8BA64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/services/server-connection.ts"], | ||
| "sourcesContent": [ | ||
| "import { Service, type Endpoint, type EnsureOptions } from \"@opencode-ai/client/effect/service\"\nimport { ClientError, isUnauthorizedError, OpenCode } from \"@opencode-ai/client/promise\"\nimport { OPENCODE_VERSION } from \"../version\"\nimport { Effect, Redacted } from \"effect\"\nimport { Env } from \"../env\"\nimport { ServiceConfig } from \"./service-config\"\nimport { Standalone } from \"./standalone\"\n\nexport type Args = {\n readonly server?: string\n readonly standalone?: boolean\n readonly mismatch?: \"replace\" | \"ignore\" | \"error\"\n readonly onStart?: EnsureOptions[\"onStart\"]\n}\n\nexport type Resolved = {\n readonly endpoint: Endpoint\n readonly service?: ReturnType<typeof managedService>\n}\n\nexport const resolve = Effect.fn(\"cli.server-connection.resolve\")(function* (args: Args) {\n if (args.server !== undefined && args.standalone)\n return yield* Effect.fail(new Error(\"--server and --standalone cannot be combined\"))\n if (args.server !== undefined) {\n const password = yield* Env.password\n const endpoint = {\n url: args.server,\n auth: password ? { type: \"basic\" as const, username: \"opencode\", password: Redacted.value(password) } : undefined,\n } satisfies Endpoint\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const health = yield* Effect.tryPromise({\n try: () => client.health.get({ signal: AbortSignal.timeout(5_000) }),\n catch: (cause) => connectError(endpoint, cause),\n })\n if (health.version !== OPENCODE_VERSION)\n process.stderr.write(\n `Warning: Server at ${endpoint.url} has version ${health.version}; this client is ${OPENCODE_VERSION}. Continuing anyway.\\n`,\n )\n return { endpoint } satisfies Resolved\n }\n if (args.standalone) {\n return { endpoint: yield* Standalone.start() } satisfies Resolved\n }\n\n const options = yield* ServiceConfig.options()\n return {\n endpoint: yield* resolveManaged({ ...options, onStart: args.onStart }, args.mismatch ?? \"replace\"),\n service: managedService(options),\n } satisfies Resolved\n})\n\nfunction managedService(options: EnsureOptions) {\n const reconnectOptions = { ...options, version: undefined }\n return {\n reconnect: () => Service.ensure(reconnectOptions),\n restart: () =>\n Effect.gen(function* () {\n yield* Service.stop(options)\n yield* Service.ensure(reconnectOptions)\n }),\n }\n}\n\nconst resolveManaged = Effect.fnUntraced(function* (\n options: EnsureOptions,\n mismatch: NonNullable<Args[\"mismatch\"]>,\n) {\n if (mismatch === \"replace\") return yield* Service.ensure(options)\n if (mismatch === \"ignore\") return yield* Service.ensure({ ...options, version: undefined })\n\n const compatible = yield* Service.discover(options)\n if (compatible !== undefined) return compatible\n const existing = yield* Service.discover({ ...options, version: undefined })\n if (existing !== undefined)\n return yield* Effect.fail(new Error(\"Background server version does not match this client\"))\n return yield* Service.ensure(options)\n})\n\nfunction connectError(endpoint: Endpoint, cause: unknown) {\n if (isUnauthorizedError(cause)) {\n return new Error(\n endpoint.auth === undefined\n ? `Server at ${endpoint.url} requires a password; set OPENCODE_PASSWORD`\n : `Server at ${endpoint.url} rejected the password`,\n { cause },\n )\n }\n if (cause instanceof ClientError && cause.reason === \"Transport\")\n return new Error(`Could not reach server at ${endpoint.url}`, { cause })\n return new Error(`Server at ${endpoint.url} did not provide a compatible V2 health response`, { cause })\n}\n\nexport * as ServerConnection from \"./server-connection\"\n" | ||
| ], | ||
| "mappings": ";0cAoBO,SAAM,OAAU,OAAO,QAAG,oCAA+B,OAAE,cAAU,CAAC,EAAY,CACvF,GAAI,EAAK,SAAW,QAAa,EAAK,WACpC,OAAO,MAAO,EAAO,KAAS,MAAM,8CAA8C,CAAC,EACrF,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAW,MAAO,EAAI,SACtB,EAAW,CACf,IAAK,EAAK,OACV,KAAM,EAAW,CAAE,KAAM,QAAkB,SAAU,WAAY,SAAU,EAAS,MAAM,CAAQ,CAAE,EAAI,MAC1G,EACM,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EACpF,EAAS,MAAO,EAAO,WAAW,CACtC,IAAK,IAAM,EAAO,OAAO,IAAI,CAAE,OAAQ,YAAY,QAAQ,IAAK,CAAE,CAAC,EACnE,MAAO,CAAC,IAAU,EAAa,EAAU,CAAK,CAChD,CAAC,EACD,GAAI,EAAO,UAAY,EACrB,QAAQ,OAAO,MACb,sBAAsB,EAAS,mBAAmB,EAAO,2BAA2B;AAAA,CACtF,EACF,MAAO,CAAE,UAAS,EAEpB,GAAI,EAAK,WACP,MAAO,CAAE,SAAU,MAAO,EAAW,MAAM,CAAE,EAG/C,IAAM,EAAU,MAAO,EAAc,QAAQ,EAC7C,MAAO,CACL,SAAU,MAAO,EAAe,IAAK,EAAS,QAAS,EAAK,OAAQ,EAAG,EAAK,UAAY,SAAS,EACjG,QAAS,EAAe,CAAO,CACjC,EACD,EAED,SAAS,CAAc,CAAC,EAAwB,CAC9C,IAAM,EAAmB,IAAK,EAAS,QAAS,MAAU,EAC1D,MAAO,CACL,UAAW,IAAM,EAAQ,OAAO,CAAgB,EAChD,QAAS,IACP,EAAO,IAAI,SAAU,EAAG,CACtB,MAAO,EAAQ,KAAK,CAAO,EAC3B,MAAO,EAAQ,OAAO,CAAgB,EACvC,CACL,EAGF,IAAM,EAAiB,EAAO,WAAW,SAAU,CACjD,EACA,EACA,CACA,GAAI,IAAa,UAAW,OAAO,MAAO,EAAQ,OAAO,CAAO,EAChE,GAAI,IAAa,SAAU,OAAO,MAAO,EAAQ,OAAO,IAAK,EAAS,QAAS,MAAU,CAAC,EAE1F,IAAM,EAAa,MAAO,EAAQ,SAAS,CAAO,EAClD,GAAI,IAAe,OAAW,OAAO,EAErC,IADiB,MAAO,EAAQ,SAAS,IAAK,EAAS,QAAS,MAAU,CAAC,KAC1D,OACf,OAAO,MAAO,EAAO,KAAS,MAAM,sDAAsD,CAAC,EAC7F,OAAO,MAAO,EAAQ,OAAO,CAAO,EACrC,EAED,SAAS,CAAY,CAAC,EAAoB,EAAgB,CACxD,GAAI,EAAoB,CAAK,EAC3B,OAAW,MACT,EAAS,OAAS,OACd,aAAa,EAAS,iDACtB,aAAa,EAAS,4BAC1B,CAAE,OAAM,CACV,EAEF,GAAI,aAAiB,GAAe,EAAM,SAAW,YACnD,OAAW,MAAM,6BAA6B,EAAS,MAAO,CAAE,OAAM,CAAC,EACzE,OAAW,MAAM,aAAa,EAAS,sDAAuD,CAAE,OAAM,CAAC", | ||
| "debugId": "653078340988C5EE64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/openai-compatible.ts"], | ||
| "sourcesContent": [ | ||
| "import { ProviderID, type ModelID } from \"../schema\"\nimport * as OpenAICompatibleChat from \"../protocols/openai-compatible-chat\"\nimport type { RouteDefaultsInput } from \"../route/client\"\nimport { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { profiles, type OpenAICompatibleProfile } from \"./openai-compatible-profile\"\nimport type { OpenAIProviderOptionsInput } from \"./openai-options\"\n\nexport const id = ProviderID.make(\"openai-compatible\")\n\ntype GenericModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly provider?: string\n readonly baseURL: string\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL: string\n readonly provider?: string\n}\n\nexport type FamilyModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nexport const routes = [OpenAICompatibleChat.route]\n\nexport const configure = (input: GenericModelOptions) => {\n const provider = input.provider ?? \"openai-compatible\"\n const { provider: _, baseURL, apiKey: _apiKey, auth: _auth, ...rest } = input\n const route = OpenAICompatibleChat.route.with({\n ...rest,\n provider,\n endpoint: { baseURL },\n auth: AuthOptions.bearer(input, []),\n })\n return {\n id: ProviderID.make(provider),\n model: (modelID: string | ModelID) =>\n route.model<OpenAIProviderOptionsInput>({ id: modelID, provider: ProviderID.make(provider) }),\n configure,\n }\n}\n\nconst define = (profile: OpenAICompatibleProfile) => {\n const configureProfile = (input: FamilyModelOptions = {}) => {\n const facade = configure({\n ...input,\n baseURL: input.baseURL ?? profile.baseURL,\n provider: profile.provider,\n })\n return {\n id: ProviderID.make(profile.provider),\n model: facade.model,\n configure: configureProfile,\n }\n }\n return configureProfile()\n}\n\nexport const provider = {\n id,\n configure,\n}\n\nexport const model: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (modelID, settings) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n provider: settings.provider,\n }).model(modelID)\n\nexport const baseten = define(profiles.baseten)\nexport const cerebras = define(profiles.cerebras)\nexport const deepinfra = define(profiles.deepinfra)\nexport const deepseek = define(profiles.deepseek)\nexport const fireworks = define(profiles.fireworks)\nexport const groq = define(profiles.groq)\nexport const togetherai = define(profiles.togetherai)\n" | ||
| ], | ||
| "mappings": ";mfAQO,SAAM,OAAK,OAAW,UAAK,wBAAmB,OAqBxC,OAAS,MAAsB,MAAK,OAEpC,OAAY,MAAC,IAA+B,CACvD,IAAM,EAAW,EAAM,UAAY,qBAC3B,SAAU,EAAG,UAAS,OAAQ,EAAS,KAAM,KAAU,GAAS,EAClE,EAA6B,EAAM,KAAK,IACzC,EACH,WACA,SAAU,CAAE,SAAQ,EACpB,KAAM,EAAY,OAAO,EAAO,CAAC,CAAC,CACpC,CAAC,EACD,MAAO,CACL,GAAI,EAAW,KAAK,CAAQ,EAC5B,MAAO,CAAC,IACN,EAAM,MAAkC,CAAE,GAAI,EAAS,SAAU,EAAW,KAAK,CAAQ,CAAE,CAAC,EAC9F,WACF,GAGI,EAAS,CAAC,IAAqC,CACnD,IAAM,EAAmB,CAAC,EAA4B,CAAC,IAAM,CAC3D,IAAM,EAAS,EAAU,IACpB,EACH,QAAS,EAAM,SAAW,EAAQ,QAClC,SAAU,EAAQ,QACpB,CAAC,EACD,MAAO,CACL,GAAI,EAAW,KAAK,EAAQ,QAAQ,EACpC,MAAO,EAAO,MACd,UAAW,CACb,GAEF,OAAO,EAAiB,GAGb,EAAW,CACtB,KACA,WACF,EAEa,EAAmF,CAAC,EAAS,IACxG,EAAU,CACR,OAAQ,EAAS,OACjB,QAAS,EAAS,QAClB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,SAAU,EAAS,QACrB,CAAC,EAAE,MAAM,CAAO,EAEL,EAAU,EAAO,EAAS,OAAO,EACjC,EAAW,EAAO,EAAS,QAAQ,EACnC,EAAY,EAAO,EAAS,SAAS,EACrC,EAAW,EAAO,EAAS,QAAQ,EACnC,EAAY,EAAO,EAAS,SAAS,EACrC,EAAO,EAAO,EAAS,IAAI,EAC3B,EAAa,EAAO,EAAS,UAAU", | ||
| "debugId": "A98AC1D5F6D399FD64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/gemini.ts", "../ai/src/protocols/google-images.ts", "../ai/src/providers/google.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Schema } from \"effect\"\nimport { Tool } from \"@opencode-ai/schema/tool\"\nimport { Route } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n LLMEvent,\n Usage,\n type FinishReason,\n type JsonSchema,\n type LLMRequest,\n type MediaPart,\n type ProviderOptions,\n type ProviderMetadata,\n type TextPart,\n type ToolCallPart,\n type ToolDefinition,\n} from \"../schema\"\nimport { JsonObject, optionalArray, ProviderShared } from \"./shared\"\nimport { GeminiToolSchema } from \"./utils/gemini-tool-schema\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\n\nconst ADAPTER = \"gemini\"\nconst MEDIA_MIMES = new Set<string>(ProviderShared.MEDIA_MIMES)\nexport const DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com/v1beta\"\n\nexport interface OptionsInput {\n readonly [key: string]: unknown\n readonly cachedContent?: string\n readonly safetySettings?: ReadonlyArray<{\n readonly category:\n | \"HARM_CATEGORY_UNSPECIFIED\"\n | \"HARM_CATEGORY_HATE_SPEECH\"\n | \"HARM_CATEGORY_DANGEROUS_CONTENT\"\n | \"HARM_CATEGORY_HARASSMENT\"\n | \"HARM_CATEGORY_SEXUALLY_EXPLICIT\"\n | \"HARM_CATEGORY_CIVIC_INTEGRITY\"\n | (string & {})\n readonly threshold:\n | \"HARM_BLOCK_THRESHOLD_UNSPECIFIED\"\n | \"BLOCK_LOW_AND_ABOVE\"\n | \"BLOCK_MEDIUM_AND_ABOVE\"\n | \"BLOCK_ONLY_HIGH\"\n | \"BLOCK_NONE\"\n | \"OFF\"\n | (string & {})\n }>\n readonly serviceTier?: \"standard\" | \"flex\" | \"priority\" | (string & {})\n readonly thinkingConfig?: {\n readonly thinkingBudget?: number\n readonly includeThoughts?: boolean\n readonly thinkingLevel?: \"minimal\" | \"low\" | \"medium\" | \"high\" | (string & {})\n }\n}\n\nexport type ProviderOptionsInput = ProviderOptions & {\n readonly gemini?: OptionsInput\n}\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\nconst GeminiTextPart = Schema.Struct({\n text: Schema.String,\n thought: Schema.optional(Schema.Boolean),\n thoughtSignature: Schema.optional(Schema.String),\n})\n\nconst GeminiInlineDataPart = Schema.Struct({\n inlineData: Schema.Struct({\n mimeType: Schema.String,\n data: Schema.String,\n }),\n})\ntype GeminiInlineDataPart = Schema.Schema.Type<typeof GeminiInlineDataPart>\n\nconst GeminiFunctionCallPart = Schema.Struct({\n functionCall: Schema.Struct({\n id: Schema.optional(Schema.String),\n name: Schema.String,\n args: Schema.Unknown,\n }),\n thoughtSignature: Schema.optional(Schema.String),\n})\n\nconst GeminiFunctionResponsePart = Schema.Struct({\n functionResponse: Schema.Struct({\n id: Schema.optional(Schema.String),\n name: Schema.String,\n response: Schema.Unknown,\n parts: Schema.optional(Schema.Array(GeminiInlineDataPart)),\n }),\n})\n\nconst GeminiContentPart = Schema.Union([\n GeminiTextPart,\n GeminiInlineDataPart,\n GeminiFunctionCallPart,\n GeminiFunctionResponsePart,\n])\n\nconst GeminiContent = Schema.Struct({\n role: Schema.Literals([\"user\", \"model\"]),\n parts: Schema.Array(GeminiContentPart),\n})\ntype GeminiContent = Schema.Schema.Type<typeof GeminiContent>\n\nconst GeminiSystemInstruction = Schema.Struct({\n parts: Schema.Array(Schema.Struct({ text: Schema.String })),\n})\n\nconst GeminiFunctionDeclaration = Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n parameters: Schema.optional(JsonObject),\n})\n\nconst GeminiTool = Schema.Struct({\n functionDeclarations: Schema.Array(GeminiFunctionDeclaration),\n})\n\nconst GeminiToolConfig = Schema.Struct({\n functionCallingConfig: Schema.Struct({\n mode: Schema.Literals([\"AUTO\", \"NONE\", \"ANY\"]),\n allowedFunctionNames: optionalArray(Schema.String),\n }),\n})\n\nconst GeminiThinkingConfig = Schema.Struct({\n thinkingBudget: Schema.optional(Schema.Number),\n includeThoughts: Schema.optional(Schema.Boolean),\n thinkingLevel: Schema.optional(Schema.String),\n})\n\nconst GeminiSafetySetting = Schema.Struct({\n category: Schema.String,\n threshold: Schema.String,\n})\n\nconst GeminiGenerationConfig = Schema.Struct({\n maxOutputTokens: Schema.optional(Schema.Number),\n temperature: Schema.optional(Schema.Number),\n topP: Schema.optional(Schema.Number),\n topK: Schema.optional(Schema.Number),\n stopSequences: optionalArray(Schema.String),\n thinkingConfig: Schema.optional(GeminiThinkingConfig),\n})\n\nconst GeminiBodyFields = {\n cachedContent: Schema.optional(Schema.String),\n contents: Schema.Array(GeminiContent),\n safetySettings: optionalArray(GeminiSafetySetting),\n serviceTier: Schema.optional(Schema.String),\n systemInstruction: Schema.optional(GeminiSystemInstruction),\n tools: optionalArray(GeminiTool),\n toolConfig: Schema.optional(GeminiToolConfig),\n generationConfig: Schema.optional(GeminiGenerationConfig),\n}\nconst GeminiBody = Schema.Struct(GeminiBodyFields)\nexport type GeminiBody = Schema.Schema.Type<typeof GeminiBody>\n\nconst GeminiUsage = Schema.Struct({\n cachedContentTokenCount: Schema.optional(Schema.Number),\n thoughtsTokenCount: Schema.optional(Schema.Number),\n promptTokenCount: Schema.optional(Schema.Number),\n candidatesTokenCount: Schema.optional(Schema.Number),\n totalTokenCount: Schema.optional(Schema.Number),\n})\ntype GeminiUsage = Schema.Schema.Type<typeof GeminiUsage>\n\nconst GeminiCandidate = Schema.Struct({\n content: Schema.optional(GeminiContent),\n finishReason: Schema.optional(Schema.String),\n})\n\nconst GeminiEvent = Schema.Struct({\n candidates: optionalArray(GeminiCandidate),\n usageMetadata: Schema.optional(GeminiUsage),\n})\ntype GeminiEvent = Schema.Schema.Type<typeof GeminiEvent>\n\ninterface ParserState {\n readonly finishReason?: string\n readonly hasToolCalls: boolean\n readonly nextToolCallId: number\n readonly usage?: Usage\n readonly lifecycle: Lifecycle.State\n readonly reasoningSignature?: string\n}\n\n// =============================================================================\n// Tool Schema Conversion\n// =============================================================================\n// Tool-schema conversion has two distinct concerns:\n//\n// 1. Sanitize — fix common authoring mistakes Gemini rejects: integer/number\n// enums (must be strings), `required` entries that don't match a property,\n// untyped arrays (`items` must be present), and `properties`/`required`\n// keys on non-object scalars. Mirrors OpenCode's historical Gemini rules.\n//\n// 2. Project — lossy mapping from JSON Schema to Gemini's schema dialect:\n// drop empty objects, derive `nullable: true` from `type: [..., \"null\"]`,\n// coerce `const` to `[const]` enum, recurse properties/items, propagate\n// only an allowlisted set of keys (description, required, format, type,\n// properties, items, allOf, anyOf, oneOf, minLength). Anything outside the\n// allowlist (e.g. `additionalProperties`, `$ref`) is silently dropped.\n//\n// Sanitize runs first, then project. The implementation lives in\n// `utils/gemini-tool-schema` so this protocol keeps the same shape as the other\n// provider protocols.\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\nconst lowerTool = (tool: ToolDefinition, inputSchema: JsonSchema) => ({\n name: tool.name,\n description: tool.description,\n parameters: GeminiToolSchema.convert(inputSchema),\n})\n\nconst lowerToolConfig = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"Gemini\", toolChoice, {\n auto: () => ({ functionCallingConfig: { mode: \"AUTO\" as const } }),\n none: () => ({ functionCallingConfig: { mode: \"NONE\" as const } }),\n required: () => ({ functionCallingConfig: { mode: \"ANY\" as const } }),\n tool: (name) => ({ functionCallingConfig: { mode: \"ANY\" as const, allowedFunctionNames: [name] } }),\n })\n\nconst lowerUserPart = Effect.fn(\"Gemini.lowerUserPart\")(function* (part: TextPart | MediaPart) {\n if (part.type === \"text\") return { text: part.text }\n const media = yield* ProviderShared.validateMedia(\"Gemini\", part, MEDIA_MIMES)\n return { inlineData: { mimeType: media.mime, data: media.base64 } }\n})\n\nconst googleMetadata = (metadata: Record<string, unknown>): ProviderMetadata => ({ google: metadata })\n\nconst thoughtSignature = (providerMetadata: ProviderMetadata | undefined) => {\n const google = providerMetadata?.google\n return ProviderShared.isRecord(google) && typeof google.thoughtSignature === \"string\"\n ? google.thoughtSignature\n : undefined\n}\n\nconst functionCallId = (providerMetadata: ProviderMetadata | undefined) => {\n const google = providerMetadata?.google\n return ProviderShared.isRecord(google) && typeof google.functionCallId === \"string\"\n ? google.functionCallId\n : undefined\n}\n\nconst lowerToolCall = (part: ToolCallPart) => ({\n functionCall: { id: functionCallId(part.providerMetadata), name: part.name, args: part.input },\n thoughtSignature: thoughtSignature(part.providerMetadata),\n})\n\nconst lowerMessages = Effect.fn(\"Gemini.lowerMessages\")(function* (request: LLMRequest) {\n const contents: GeminiContent[] = []\n\n for (const message of request.messages) {\n if (message.role === \"system\") {\n const part = yield* ProviderShared.wrappedSystemUpdate(\"Gemini\", message)\n const previous = contents.at(-1)\n if (previous?.role === \"user\")\n contents[contents.length - 1] = { role: \"user\", parts: [...previous.parts, { text: part.text }] }\n else contents.push({ role: \"user\", parts: [{ text: part.text }] })\n continue\n }\n\n if (message.role === \"user\") {\n const parts: Array<Schema.Schema.Type<typeof GeminiContentPart>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"media\"]))\n return yield* ProviderShared.unsupportedContent(\"Gemini\", \"user\", [\"text\", \"media\"])\n parts.push(yield* lowerUserPart(part))\n }\n contents.push({ role: \"user\", parts })\n continue\n }\n\n if (message.role === \"assistant\") {\n const parts: Array<Schema.Schema.Type<typeof GeminiContentPart>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"reasoning\", \"tool-call\"]))\n return yield* ProviderShared.unsupportedContent(\"Gemini\", \"assistant\", [\"text\", \"reasoning\", \"tool-call\"])\n if (part.type === \"text\") {\n parts.push({ text: part.text })\n continue\n }\n if (part.type === \"reasoning\") {\n parts.push({ text: part.text, thought: true, thoughtSignature: thoughtSignature(part.providerMetadata) })\n continue\n }\n if (part.type === \"tool-call\") {\n parts.push(lowerToolCall(part))\n continue\n }\n }\n contents.push({ role: \"model\", parts })\n continue\n }\n\n const parts: Array<Schema.Schema.Type<typeof GeminiContentPart>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"Gemini\", \"tool\", [\"tool-result\"])\n if (part.result.type !== \"content\") {\n parts.push({\n functionResponse: {\n id: functionCallId(part.providerMetadata),\n name: part.name,\n response: {\n name: part.name,\n content: ProviderShared.toolResultText(part),\n },\n },\n })\n continue\n }\n const content: ReadonlyArray<Tool.Content> = part.result.value\n const text = content.filter((item) => item.type === \"text\").map((item) => item.text)\n const media: GeminiInlineDataPart[] = []\n for (const item of content) {\n if (item.type === \"text\") continue\n const value = yield* ProviderShared.validateToolFile(\"Gemini\", item, MEDIA_MIMES)\n media.push({ inlineData: { mimeType: value.mime, data: value.base64 } })\n }\n parts.push({\n functionResponse: {\n id: functionCallId(part.providerMetadata),\n name: part.name,\n response: {\n name: part.name,\n content: text.join(\"\\n\"),\n },\n parts: media.length > 0 ? media : undefined,\n },\n })\n }\n contents.push({ role: \"user\", parts })\n }\n\n return contents\n})\n\nconst resolveOptions = (request: LLMRequest) => {\n const input = request.providerOptions?.gemini\n const value = input?.thinkingConfig\n const thinkingConfig = {\n thinkingBudget:\n ProviderShared.isRecord(value) && typeof value.thinkingBudget === \"number\" ? value.thinkingBudget : undefined,\n includeThoughts:\n ProviderShared.isRecord(value) && typeof value.includeThoughts === \"boolean\"\n ? value.includeThoughts\n : ProviderShared.isRecord(value)\n ? true\n : undefined,\n thinkingLevel:\n ProviderShared.isRecord(value) && typeof value.thinkingLevel === \"string\" ? value.thinkingLevel : undefined,\n }\n return {\n cachedContent: typeof input?.cachedContent === \"string\" ? input.cachedContent : undefined,\n safetySettings: mapSafetySettings(input?.safetySettings),\n serviceTier: typeof input?.serviceTier === \"string\" ? input.serviceTier : undefined,\n thinkingConfig: Object.values(thinkingConfig).some((item) => item !== undefined) ? thinkingConfig : undefined,\n }\n}\n\nfunction mapSafetySettings(value: unknown) {\n if (!Array.isArray(value)) return undefined\n const settings = value.flatMap((item) =>\n ProviderShared.isRecord(item) && typeof item.category === \"string\" && typeof item.threshold === \"string\"\n ? [{ category: item.category, threshold: item.threshold }]\n : [],\n )\n return settings\n}\n\nconst fromRequest = Effect.fn(\"Gemini.fromRequest\")(function* (request: LLMRequest) {\n const hasTools = request.tools.length > 0\n const generation = request.generation\n const options = resolveOptions(request)\n const toolSchemaCompatibility = request.model.compatibility?.toolSchema\n const generationConfig = {\n maxOutputTokens: generation?.maxTokens,\n temperature: generation?.temperature,\n topP: generation?.topP,\n topK: generation?.topK,\n stopSequences: generation?.stop,\n thinkingConfig: options.thinkingConfig,\n }\n\n return {\n cachedContent: options.cachedContent,\n contents: yield* lowerMessages(request),\n safetySettings: options.safetySettings,\n serviceTier: options.serviceTier,\n systemInstruction:\n request.system.length === 0 ? undefined : { parts: [{ text: ProviderShared.joinText(request.system) }] },\n tools: hasTools\n ? [\n {\n functionDeclarations: request.tools.map((tool) =>\n lowerTool(tool, ToolSchemaProjection.modelCompatibility(tool.inputSchema, toolSchemaCompatibility)),\n ),\n },\n ]\n : undefined,\n toolConfig: hasTools && request.toolChoice ? yield* lowerToolConfig(request.toolChoice) : undefined,\n generationConfig: Object.values(generationConfig).some((value) => value !== undefined)\n ? generationConfig\n : undefined,\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\n// Gemini reports `promptTokenCount` (inclusive total) with a\n// `cachedContentTokenCount` subset. `candidatesTokenCount` is *exclusive*\n// of `thoughtsTokenCount` — visible-only, not a total — so we sum the two\n// to produce the inclusive `outputTokens` the rest of the contract expects.\nconst mapUsage = (usage: GeminiUsage | undefined) => {\n if (!usage) return undefined\n const cached = usage.cachedContentTokenCount\n const nonCached = ProviderShared.subtractTokens(usage.promptTokenCount, cached)\n // `candidatesTokenCount` is visible-only; sum with thoughts to produce the\n // inclusive `outputTokens` the contract expects. Only compute the total\n // when the visible component is reported — otherwise we'd fabricate an\n // inclusive number from a partial breakdown.\n const outputTokens =\n usage.candidatesTokenCount !== undefined ? usage.candidatesTokenCount + (usage.thoughtsTokenCount ?? 0) : undefined\n return new Usage({\n inputTokens: usage.promptTokenCount,\n outputTokens,\n nonCachedInputTokens: nonCached,\n cacheReadInputTokens: cached,\n reasoningTokens: usage.thoughtsTokenCount,\n totalTokens: ProviderShared.totalTokens(usage.promptTokenCount, outputTokens, usage.totalTokenCount),\n providerMetadata: { google: usage },\n })\n}\n\nconst mapFinishReason = (finishReason: string | undefined, hasToolCalls: boolean): FinishReason => {\n if (finishReason === \"STOP\") return hasToolCalls ? \"tool-calls\" : \"stop\"\n if (finishReason === \"MAX_TOKENS\") return \"length\"\n if (\n finishReason === \"IMAGE_SAFETY\" ||\n finishReason === \"RECITATION\" ||\n finishReason === \"SAFETY\" ||\n finishReason === \"BLOCKLIST\" ||\n finishReason === \"PROHIBITED_CONTENT\" ||\n finishReason === \"SPII\" ||\n finishReason === \"MODEL_ARMOR\" ||\n finishReason === \"IMAGE_PROHIBITED_CONTENT\" ||\n finishReason === \"IMAGE_RECITATION\" ||\n finishReason === \"LANGUAGE\"\n )\n return \"content-filter\"\n if (\n finishReason === \"MALFORMED_FUNCTION_CALL\" ||\n finishReason === \"UNEXPECTED_TOOL_CALL\" ||\n finishReason === \"NO_IMAGE\" ||\n finishReason === \"TOO_MANY_TOOL_CALLS\" ||\n finishReason === \"MISSING_THOUGHT_SIGNATURE\" ||\n finishReason === \"MALFORMED_RESPONSE\"\n )\n return \"error\"\n return \"unknown\"\n}\n\nconst finish = (state: ParserState): ReadonlyArray<LLMEvent> =>\n state.finishReason || state.usage\n ? (() => {\n const events: LLMEvent[] = []\n const lifecycle = state.reasoningSignature\n ? Lifecycle.reasoningEnd(\n state.lifecycle,\n events,\n \"reasoning-0\",\n googleMetadata({ thoughtSignature: state.reasoningSignature }),\n )\n : state.lifecycle\n Lifecycle.finish(lifecycle, events, {\n reason: {\n normalized: mapFinishReason(state.finishReason, state.hasToolCalls),\n raw: state.finishReason,\n },\n usage: state.usage,\n })\n return events\n })()\n : []\n\nconst step = (state: ParserState, event: GeminiEvent) => {\n const nextState = {\n ...state,\n usage: event.usageMetadata ? (mapUsage(event.usageMetadata) ?? state.usage) : state.usage,\n }\n const candidate = event.candidates?.[0]\n if (!candidate?.content)\n return Effect.succeed([\n { ...nextState, finishReason: candidate?.finishReason ?? nextState.finishReason },\n [],\n ] as const)\n\n const events: LLMEvent[] = []\n let hasToolCalls = nextState.hasToolCalls\n let lifecycle = nextState.lifecycle\n let nextToolCallId = nextState.nextToolCallId\n let reasoningSignature = nextState.reasoningSignature\n\n for (const part of candidate.content.parts) {\n if (\"thoughtSignature\" in part && part.thoughtSignature && \"thought\" in part && part.thought)\n reasoningSignature = part.thoughtSignature\n if (\"text\" in part && part.text.length > 0) {\n if (part.thought) {\n lifecycle = Lifecycle.reasoningDelta(\n lifecycle,\n events,\n \"reasoning-0\",\n part.text,\n part.thoughtSignature ? googleMetadata({ thoughtSignature: part.thoughtSignature }) : undefined,\n )\n continue\n }\n lifecycle = Lifecycle.reasoningEnd(\n lifecycle,\n events,\n \"reasoning-0\",\n reasoningSignature ? googleMetadata({ thoughtSignature: reasoningSignature }) : undefined,\n )\n lifecycle = Lifecycle.textDelta(lifecycle, events, \"text-0\", part.text)\n continue\n }\n\n if (\"functionCall\" in part) {\n const input = part.functionCall.args\n const id = `tool_${nextToolCallId++}`\n const metadata = {\n ...(part.functionCall.id === undefined ? {} : { functionCallId: part.functionCall.id }),\n ...(part.thoughtSignature === undefined ? {} : { thoughtSignature: part.thoughtSignature }),\n }\n lifecycle = Lifecycle.reasoningEnd(\n lifecycle,\n events,\n \"reasoning-0\",\n reasoningSignature ? googleMetadata({ thoughtSignature: reasoningSignature }) : undefined,\n )\n lifecycle = Lifecycle.stepStart(lifecycle, events)\n events.push(\n LLMEvent.toolCall({\n id,\n name: part.functionCall.name,\n input,\n providerMetadata: Object.keys(metadata).length > 0 ? googleMetadata(metadata) : undefined,\n }),\n )\n hasToolCalls = true\n }\n }\n\n return Effect.succeed([\n {\n ...nextState,\n hasToolCalls,\n lifecycle,\n nextToolCallId,\n reasoningSignature,\n finishReason: candidate.finishReason ?? nextState.finishReason,\n },\n events,\n ] as const)\n}\n\n// =============================================================================\n// Protocol And Gemini Route\n// =============================================================================\n/**\n * The Gemini protocol — request body construction, body schema, and the\n * streaming-event state machine. Used by Google AI Studio Gemini and (once\n * registered) Vertex Gemini.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: GeminiBody,\n from: fromRequest,\n },\n stream: {\n event: Protocol.jsonEvent(GeminiEvent),\n initial: () => ({ hasToolCalls: false, nextToolCallId: 0, lifecycle: Lifecycle.initial() }),\n step,\n onHalt: finish,\n },\n})\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"google\",\n providerMetadataKey: \"google\",\n protocol,\n // Gemini's path embeds the model id and pins SSE framing at the URL level.\n endpoint: Endpoint.path(({ request }) => `/models/${request.model.id}:streamGenerateContent?alt=sse`, {\n baseURL: DEFAULT_BASE_URL,\n }),\n auth: Auth.none,\n framing: Framing.sse,\n})\n\nexport * as Gemini from \"./gemini\"\n", | ||
| "import { Effect, Encoding, Schema } from \"effect\"\nimport { Headers, HttpClientRequest } from \"effect/unstable/http\"\nimport {\n GeneratedImage,\n ImageModel,\n ImageResponse,\n type ImageInput,\n type ImageRequestFor,\n type ImageRoute,\n} from \"../image\"\nimport { Auth, type Definition as AuthDefinition } from \"../route/auth\"\nimport {\n InvalidProviderOutputReason,\n AIError,\n Usage,\n mergeHttpOptions,\n mergeJsonRecords,\n type HttpOptions,\n type ProviderMetadata,\n} from \"../schema\"\nimport { ProviderShared } from \"./shared\"\nimport { ImageInputs } from \"./utils/image-input\"\n\nconst ADAPTER = \"google-images\"\nexport const DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com/v1beta\"\n\nexport type GoogleImageString<Known extends string> = Known | (string & {})\n\nexport type GoogleImageOptions = {\n readonly aspectRatio?: GoogleImageString<\n \"1:1\" | \"2:3\" | \"3:2\" | \"3:4\" | \"4:3\" | \"4:5\" | \"5:4\" | \"9:16\" | \"16:9\" | \"21:9\"\n >\n readonly imageSize?: GoogleImageString<\"1K\" | \"2K\" | \"4K\">\n readonly seed?: number\n readonly thinkingLevel?: GoogleImageString<\"MINIMAL\" | \"LOW\" | \"MEDIUM\" | \"HIGH\">\n readonly includeThoughts?: boolean\n} & Record<string, unknown>\n\nexport type GoogleImageBody = Record<string, unknown> & {\n readonly contents: ReadonlyArray<{\n readonly role: \"user\"\n readonly parts: ReadonlyArray<Record<string, unknown>>\n }>\n readonly generationConfig: Record<string, unknown>\n}\n\nconst GoogleUsage = Schema.StructWithRest(\n Schema.Struct({\n cachedContentTokenCount: Schema.optional(Schema.Number),\n thoughtsTokenCount: Schema.optional(Schema.Number),\n promptTokenCount: Schema.optional(Schema.Number),\n candidatesTokenCount: Schema.optional(Schema.Number),\n totalTokenCount: Schema.optional(Schema.Number),\n promptTokensDetails: Schema.optional(Schema.Unknown),\n candidatesTokensDetails: Schema.optional(Schema.Unknown),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n)\n\nconst GoogleImageResponse = Schema.Struct({\n candidates: Schema.optional(\n Schema.Array(\n Schema.Struct({\n index: Schema.optional(Schema.Number),\n content: Schema.optional(\n Schema.Struct({\n parts: Schema.Array(\n Schema.Struct({\n text: Schema.optional(Schema.String),\n thought: Schema.optional(Schema.Boolean),\n thoughtSignature: Schema.optional(Schema.String),\n inlineData: Schema.optional(\n Schema.Struct({\n mimeType: Schema.String,\n data: Schema.String,\n }),\n ),\n }),\n ),\n }),\n ),\n finishReason: Schema.optional(Schema.String),\n finishMessage: Schema.optional(Schema.String),\n safetyRatings: Schema.optional(Schema.Unknown),\n citationMetadata: Schema.optional(Schema.Unknown),\n groundingMetadata: Schema.optional(Schema.Unknown),\n }),\n ),\n ),\n usageMetadata: Schema.optional(GoogleUsage),\n modelVersion: Schema.optional(Schema.String),\n responseId: Schema.optional(Schema.String),\n promptFeedback: Schema.optional(Schema.Unknown),\n})\n\nexport interface ModelInput {\n readonly id: string\n readonly auth: AuthDefinition\n readonly baseURL?: string\n readonly headers?: Record<string, string>\n readonly http?: HttpOptions\n}\n\nconst nativeOptions = (options: GoogleImageOptions | undefined) => {\n const { aspectRatio, imageSize, seed, thinkingLevel, includeThoughts, ...native } = options ?? {}\n const image = {\n aspectRatio,\n imageSize,\n }\n const thinkingConfig = {\n thinkingLevel,\n includeThoughts,\n }\n return (\n mergeJsonRecords(\n {\n responseModalities: [\"IMAGE\"],\n imageConfig: Object.values(image).some((value) => value !== undefined) ? image : undefined,\n seed,\n thinkingConfig: Object.values(thinkingConfig).some((value) => value !== undefined) ? thinkingConfig : undefined,\n },\n native,\n ) ?? { responseModalities: [\"IMAGE\"] }\n )\n}\n\nconst invalidOutput = (message: string, providerMetadata?: ProviderMetadata) =>\n new AIError({\n module: ADAPTER,\n method: \"generate\",\n reason: new InvalidProviderOutputReason({ message, route: ADAPTER, providerMetadata }),\n })\n\nconst applyQuery = (url: string, query: Record<string, string> | undefined) => {\n if (!query) return url\n const next = new URL(url)\n Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value))\n return next.toString()\n}\n\nexport const model = (input: ModelInput) => {\n const route: ImageRoute<GoogleImageOptions> = {\n id: ADAPTER,\n generate: Effect.fn(\"GoogleImages.generate\")(function* (request: ImageRequestFor<GoogleImageOptions>, execute) {\n const imageParts = yield* Effect.forEach(request.images ?? [], googleImagePart)\n const http = mergeHttpOptions(request.model.http, request.http)\n const requestBody = mergeJsonRecords(\n {\n contents: [{ role: \"user\", parts: [{ text: request.prompt }, ...imageParts] }],\n generationConfig: nativeOptions(request.options),\n },\n http?.body,\n ) as GoogleImageBody\n const text = ProviderShared.encodeJson(requestBody)\n const url = applyQuery(\n `${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\")}/models/${request.model.id}:generateContent`,\n http?.query,\n )\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: text,\n headers: Headers.fromInput({ ...input.headers, ...http?.headers }),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(\n HttpClientRequest.setHeaders(headers),\n HttpClientRequest.bodyText(text, \"application/json\"),\n ),\n )\n const payload = yield* response.json.pipe(\n Effect.mapError(() => invalidOutput(\"Failed to read the Google Images response\")),\n )\n const decoded = yield* Schema.decodeUnknownEffect(GoogleImageResponse)(payload).pipe(\n Effect.mapError(() => invalidOutput(\"Google Images returned an invalid response\")),\n )\n const candidates = decoded.candidates ?? []\n const candidateMetadata = candidates.map((candidate, candidateIndex) => ({\n index: candidate.index ?? candidateIndex,\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n safetyRatings: candidate.safetyRatings,\n citationMetadata: candidate.citationMetadata,\n groundingMetadata: candidate.groundingMetadata,\n parts: (candidate.content?.parts ?? []).map((part) =>\n part.inlineData === undefined\n ? {\n type: \"text\",\n text: part.text,\n thought: part.thought,\n thoughtSignature: part.thoughtSignature,\n }\n : {\n type: \"inlineData\",\n mediaType: part.inlineData.mimeType,\n thought: part.thought,\n thoughtSignature: part.thoughtSignature,\n },\n ),\n }))\n const encoded = candidates.flatMap((candidate, candidateIndex) =>\n (candidate.content?.parts ?? []).flatMap((part, partIndex) =>\n part.inlineData === undefined || part.thought === true\n ? []\n : [{ candidate, candidateIndex, partIndex, inlineData: part.inlineData }],\n ),\n )\n const images = yield* Effect.forEach(encoded, (item) =>\n Effect.fromResult(Encoding.decodeBase64(item.inlineData.data)).pipe(\n Effect.mapError(() =>\n invalidOutput(\n `Google Images candidate ${item.candidateIndex} part ${item.partIndex} contains invalid base64 data`,\n ),\n ),\n Effect.map(\n (data) =>\n new GeneratedImage({\n mediaType: item.inlineData.mimeType,\n data,\n providerMetadata: {\n google: {\n candidateIndex: item.candidate.index ?? item.candidateIndex,\n partIndex: item.partIndex,\n finishReason: item.candidate.finishReason,\n safetyRatings: item.candidate.safetyRatings,\n citationMetadata: item.candidate.citationMetadata,\n groundingMetadata: item.candidate.groundingMetadata,\n thoughtSignature: item.candidate.content?.parts[item.partIndex]?.thoughtSignature,\n },\n },\n }),\n ),\n ),\n )\n if (images.length === 0) {\n const finishReasons = candidates.flatMap((candidate) =>\n candidate.finishReason === undefined ? [] : [candidate.finishReason],\n )\n return yield* invalidOutput(\n `Google Images returned no final images${\n finishReasons.length === 0 ? \"\" : ` (finish reasons: ${finishReasons.join(\", \")})`\n }; inspect reason.providerMetadata.google for prompt feedback and candidate details`,\n {\n google: {\n promptFeedback: decoded.promptFeedback,\n candidates: candidateMetadata,\n },\n },\n )\n }\n const usage = decoded.usageMetadata\n const outputTokens =\n usage?.candidatesTokenCount === undefined\n ? undefined\n : usage.candidatesTokenCount + (usage.thoughtsTokenCount ?? 0)\n return new ImageResponse({\n images,\n usage:\n usage === undefined\n ? undefined\n : new Usage({\n inputTokens: usage.promptTokenCount,\n outputTokens,\n nonCachedInputTokens: ProviderShared.subtractTokens(\n usage.promptTokenCount,\n usage.cachedContentTokenCount,\n ),\n cacheReadInputTokens: usage.cachedContentTokenCount,\n reasoningTokens: usage.thoughtsTokenCount,\n totalTokens: ProviderShared.totalTokens(usage.promptTokenCount, outputTokens, usage.totalTokenCount),\n providerMetadata: { google: usage },\n }),\n providerMetadata: {\n google: {\n modelVersion: decoded.modelVersion,\n responseId: decoded.responseId,\n promptFeedback: decoded.promptFeedback,\n candidates: candidateMetadata,\n },\n },\n })\n }),\n }\n return ImageModel.make<GoogleImageOptions>({ id: input.id, provider: \"google\", route, http: input.http })\n}\n\nconst googleImagePart = (image: ImageInput): Effect.Effect<Record<string, unknown>, AIError> => {\n if (image.type === \"bytes\")\n return Effect.succeed({ inlineData: { mimeType: image.mediaType, data: Encoding.encodeBase64(image.data) } })\n if (image.type === \"file-uri\") return Effect.succeed({ fileData: { mimeType: image.mediaType, fileUri: image.uri } })\n if (image.type === \"url\")\n return ImageInputs.decodeDataUrl(image.url, ADAPTER).pipe(\n Effect.flatMap((decoded) => {\n if (decoded === undefined)\n return Effect.fail(\n ImageInputs.invalid(\n ADAPTER,\n \"Google generateContent does not fetch public image URLs; use bytes, a data URL, or a Gemini file URI\",\n ),\n )\n return Effect.succeed({\n inlineData: { mimeType: decoded.mediaType, data: Encoding.encodeBase64(decoded.data) },\n })\n }),\n )\n return Effect.fail(\n ImageInputs.invalid(ADAPTER, \"Google generateContent requires Gemini file URIs rather than provider file IDs\"),\n )\n}\n\nexport const GoogleImages = {\n model,\n} as const\n", | ||
| "import type { RouteDefaultsInput } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderAuthOption } from \"../route/auth-options\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { HttpOptions, ProviderID, mergeHttpOptions, type ModelID } from \"../schema\"\nimport { Gemini } from \"../protocols/gemini\"\nimport { GoogleImages } from \"../protocols/google-images\"\n\nexport type { GoogleImageOptions } from \"../protocols/google-images\"\nexport type GeminiOptionsInput = Gemini.OptionsInput\nexport type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput\n\nexport const id = ProviderID.make(\"google\")\n\nexport const routes = [Gemini.route]\n\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: Gemini.ProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly providerOptions?: Gemini.ProviderOptionsInput\n}\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => {\n if (\"auth\" in options && options.auth) return options.auth\n return Auth.optional(\"apiKey\" in options ? options.apiKey : undefined, \"apiKey\")\n .orElse(Auth.config(\"GOOGLE_GENERATIVE_AI_API_KEY\"))\n .pipe(Auth.header(\"x-goog-api-key\"))\n}\n\nconst configuredRoute = (input: Config) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return Gemini.route.with({ ...rest, endpoint: { baseURL }, auth: auth(input) })\n}\n\nexport const configure = (input: Config = {}) => {\n const route = configuredRoute(input)\n const image = (modelID: string | ModelID) =>\n GoogleImages.model({\n id: modelID,\n auth: auth(input),\n baseURL: input.baseURL,\n headers: input.headers,\n http: mergeHttpOptions(input.http === undefined ? undefined : HttpOptions.make(input.http)),\n })\n return {\n id,\n model: (modelID: string | ModelID) => route.model<Gemini.ProviderOptionsInput>({ id: modelID }),\n image,\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, Gemini.ProviderOptionsInput>[\"model\"] = (modelID, settings) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n\nexport const image = provider.image\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "174C0A1E39D35EC264756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+vercel@2.0.39+d6123d32214422cb/node_modules/@ai-sdk/vercel/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/vercel-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport { OpenAICompatibleChatLanguageModel } from \"@ai-sdk/openai-compatible\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/version.ts\nvar VERSION = true ? \"2.0.39\" : \"0.0.0-test\";\n\n// src/vercel-provider.ts\nfunction createVercel(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.v0.dev/v1\"\n );\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"VERCEL_API_KEY\",\n description: \"Vercel\"\n })}`,\n ...options.headers\n },\n `ai-sdk/vercel/${VERSION}`\n );\n const getCommonModelConfig = (modelType) => ({\n provider: `vercel.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createChatModel = (modelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n ...getCommonModelConfig(\"chat\")\n });\n };\n const provider = (modelId) => createChatModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.languageModel = createChatModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar vercel = createVercel();\nexport {\n VERSION,\n createVercel,\n vercel\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": ";4UAYA,SAAI,OAAiB,cAGrB,cAAS,MAAY,MAAC,OAAU,CAAC,EAAG,CAClC,IAAI,EACJ,IAAM,EAAU,GACb,EAAK,EAAQ,UAAY,KAAO,EAAK,uBACxC,EACM,EAAa,IAAM,EACvB,CACE,cAAe,UAAU,EAAW,CAClC,OAAQ,EAAQ,OAChB,wBAAyB,iBACzB,YAAa,QACf,CAAC,OACE,EAAQ,OACb,EACA,iBAAiB,GACnB,EACM,EAAuB,CAAC,KAAe,CAC3C,SAAU,UAAU,IACpB,IAAK,EAAG,UAAW,GAAG,IAAU,IAChC,QAAS,EACT,MAAO,EAAQ,KACjB,GACM,EAAkB,CAAC,IAAY,CACnC,OAAO,IAAI,EAAkC,EAAS,IACjD,EAAqB,MAAM,CAChC,CAAC,GAEG,EAAW,CAAC,IAAY,EAAgB,CAAO,EAUrD,OATA,EAAS,qBAAuB,KAChC,EAAS,cAAgB,EACzB,EAAS,eAAiB,CAAC,IAAY,CACrC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,gBAAiB,CAAC,GAErE,EAAS,mBAAqB,EAAS,eACvC,EAAS,WAAa,CAAC,IAAY,CACjC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,YAAa,CAAC,GAE1D,EAET,IAAI,EAAS,EAAa", | ||
| "debugId": "33EE0A9DE8ED3E1D64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/route/auth-options.ts"], | ||
| "sourcesContent": [ | ||
| "import type { Config, Redacted } from \"effect\"\nimport { Auth } from \"./auth\"\n\nexport type ApiKeyMode = \"optional\" | \"required\"\n\nexport type AuthOverride = {\n readonly auth: Auth.Definition\n readonly apiKey?: never\n}\n\nexport type OptionalApiKeyAuth = {\n readonly apiKey?: string | Redacted.Redacted<string> | Config.Config<string | Redacted.Redacted<string>>\n readonly auth?: never\n}\n\nexport type RequiredApiKeyAuth = {\n readonly apiKey: string | Redacted.Redacted<string> | Config.Config<string | Redacted.Redacted<string>>\n readonly auth?: never\n}\n\nexport type ProviderAuthOption<Mode extends ApiKeyMode> =\n | AuthOverride\n | (Mode extends \"optional\" ? OptionalApiKeyAuth : RequiredApiKeyAuth)\n\nexport type LanguageModelOptions<Base, Mode extends ApiKeyMode> = Omit<Base, \"apiKey\" | \"auth\"> &\n ProviderAuthOption<Mode>\n\nexport type LanguageModelArgs<Base, Mode extends ApiKeyMode> = Mode extends \"optional\"\n ? readonly [options?: LanguageModelOptions<Base, Mode>]\n : readonly [options: LanguageModelOptions<Base, Mode>]\n\nexport type LanguageModelFactory<Base, Mode extends ApiKeyMode, LanguageModel> = (\n id: string,\n ...args: LanguageModelArgs<Base, Mode>\n) => LanguageModel\n\n/**\n * Require at least one of the keys in `T`. Use for option shapes where any\n * subset of fields is acceptable but at least one must be present (e.g. Azure\n * accepts `resourceName` or `baseURL`).\n */\nexport type AtLeastOne<T> = {\n [K in keyof T]: Required<Pick<T, K>> & Partial<Omit<T, K>>\n}[keyof T]\n\n/**\n * Standard bearer-auth resolution for providers: honor an explicit `auth`\n * override, otherwise resolve `apiKey` (option > config var) and apply it as\n * a bearer token.\n */\nexport const bearer = (\n options: ProviderAuthOption<\"optional\">,\n envVar: string | ReadonlyArray<string>,\n): Auth.Definition => {\n if (\"auth\" in options && options.auth) return options.auth\n return (Array.isArray(envVar) ? envVar : [envVar])\n .reduce(\n (auth, name) => auth.orElse(Auth.config(name)),\n Auth.optional(\"apiKey\" in options ? options.apiKey : undefined, \"apiKey\"),\n )\n .bearer()\n}\n\nexport * as AuthOptions from \"./auth-options\"\n" | ||
| ], | ||
| "mappings": ";kJAkDO,SAAM,EAAS,CACpB,EACA,IACoB,CACpB,GAAI,SAAU,GAAW,EAAQ,KAAM,OAAO,EAAQ,KACtD,OAAQ,MAAM,QAAQ,CAAM,EAAI,EAAS,CAAC,CAAM,GAC7C,OACC,CAAC,EAAM,IAAS,EAAK,OAAO,EAAK,OAAO,CAAI,CAAC,EAC7C,EAAK,SAAS,WAAY,EAAU,EAAQ,OAAS,OAAW,QAAQ,CAC1E,EACC,OAAO", | ||
| "debugId": "F21EF78F8F7D625B64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/run/run.ts", "src/run/noninteractive.ts", "src/run/ui.ts"], | ||
| "sourcesContent": [ | ||
| "import { Service, type Endpoint } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode, type OpenCodeClient, type SessionMessageAssistantTool } from \"@opencode-ai/client/promise\"\nimport { FSUtil } from \"@opencode-ai/util/fs-util\"\nimport { open } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { readStdin } from \"../util/io\"\nimport { ServerConnection } from \"../services/server-connection\"\nimport { parseSessionTargetModel, resolveSessionTarget } from \"../session-target\"\nimport { toolInlineInfo } from \"@opencode-ai/tui/mini/tool\"\nimport { runNonInteractivePrompt } from \"./noninteractive\"\nimport { UI } from \"./ui\"\n\nexport type RunCommandInput = {\n server: ServerConnection.Resolved\n message: string[]\n continue?: boolean\n session?: string\n fork?: boolean\n model?: string\n agent?: string\n format: \"default\" | \"json\"\n file: string[]\n title?: string\n thinking?: boolean\n auto?: boolean\n}\n\ntype FilePart = {\n url: string\n filename: string\n mime: string\n}\n\ntype Prepared = {\n directory?: string\n message: string\n files: FilePart[]\n}\n\ntype ExecutionOptions = {\n root?: string\n directory?: string\n useServerDirectory?: boolean\n variant?: string\n attached?: boolean\n compatibility?: \"v1\"\n}\n\nclass RunTargetError extends Error {\n constructor(\n message: string,\n readonly sessionID?: string,\n ) {\n super(message)\n }\n}\n\nconst ATTACH_FILE_MAX_BYTES = 10 * 1024 * 1024\n\nexport function runNonInteractive(input: RunCommandInput) {\n return runNonInteractiveWithOptions(input, {})\n}\n\n/** @internal Used only by the V1 command boundary. */\nexport function runNonInteractiveWithOptions(input: RunCommandInput, options: ExecutionOptions) {\n return run(input, options).catch((error) => reportRunError(input, errorMessage(error)))\n}\n\nasync function run(input: RunCommandInput, options: ExecutionOptions) {\n if (input.fork && !input.continue && !input.session) fail(\"--fork requires --continue or --session\")\n const root = options.root ?? process.env.PWD ?? process.cwd()\n const local = localDirectory(root)\n const directory = options.useServerDirectory ? undefined : (options.directory ?? local)\n const message = mergeInput(formatMessage(input.message), process.stdin.isTTY ? undefined : await readStdin())\n if (!message?.trim()) fail(\"You must provide a message\")\n const files = await Promise.all(input.file.map((file) => prepareFile(file, root, options)))\n const prepared = { directory, message, files }\n return execute(input, prepared, input.server.endpoint, options)\n}\n\nasync function execute(input: RunCommandInput, prepared: Prepared, endpoint: Endpoint, options: ExecutionOptions) {\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const explicit = parseRunModel(input.model)\n const target = await resolveSessionTarget({\n client,\n location: prepared.directory ? { directory: prepared.directory } : undefined,\n continue: input.continue,\n session: input.session,\n fork: input.fork,\n model: explicit\n ? { providerID: explicit.model.providerID, id: explicit.model.modelID, variant: explicit.variant }\n : undefined,\n agent: input.agent,\n prepare: async (next) => {\n const selected =\n next.model ??\n (options.variant\n ? await client.model\n .default({ location: { directory: next.location.directory, workspace: next.location.workspaceID } })\n .then((result) => result.data)\n : undefined)\n const model = selected\n ? {\n providerID: selected.providerID,\n id: selected.id,\n variant: options.variant ?? (\"variant\" in selected ? selected.variant : undefined),\n }\n : undefined\n if ((options.variant ?? explicit?.variant) && !model)\n throw new RunTargetError(\"Cannot select a variant before selecting a model\", next.session?.id)\n return { model, agent: next.agent }\n },\n }).catch((error) => {\n if (!(error instanceof RunTargetError)) throw error\n reportRunError(input, error.message, error.sessionID)\n return undefined\n })\n if (!target) return\n const model = target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined\n const variant = target.model?.variant\n if (!target.resume && input.title !== undefined) {\n await client.session.rename({\n sessionID: target.session.id,\n title: input.title || prepared.message.slice(0, 50) + (prepared.message.length > 50 ? \"...\" : \"\"),\n })\n }\n\n await runNonInteractivePrompt({\n client,\n sessionID: target.session.id,\n location: target.location,\n message: prepared.message,\n files: prepared.files,\n agent: target.agent,\n model,\n variant,\n thinking: input.thinking ?? false,\n format: input.format,\n auto: input.auto ?? false,\n attached: options.attached ?? true,\n compatibility: options.compatibility,\n renderTool: (part) => renderTool(part, target.location.directory),\n renderToolError: (part) => renderToolError(part, target.location.directory),\n }).catch((error) => reportRunError(input, errorMessage(error), target.session.id))\n}\n\nexport function mergeInput(message: string | undefined, piped: string | undefined) {\n if (!message) return piped || undefined\n if (!piped) return message\n return message + \"\\n\" + piped\n}\n\nfunction formatMessage(message: string[]) {\n const value = message.map((part) => (part.includes(\" \") ? `\"${part.replace(/\"/g, '\\\\\"')}\"` : part)).join(\" \")\n return value || undefined\n}\n\nfunction localDirectory(root: string) {\n try {\n process.chdir(root)\n return process.cwd()\n } catch {\n fail(`Failed to change directory to ${root}`)\n }\n}\n\nexport function parseRunModel(value?: string) {\n const ref = parseSessionTargetModel(value)\n if (!ref) return\n return {\n model: { providerID: ref.providerID, modelID: ref.id },\n variant: ref.variant,\n }\n}\n\nasync function prepareFile(input: string, directory: string, options: ExecutionOptions): Promise<FilePart> {\n const file = path.resolve(directory, input)\n const handle = await open(file, \"r\").catch(() => fail(`File not found: ${input}`))\n try {\n const stat = await handle.stat()\n if (options.compatibility === \"v1\" && options.attached && stat.isDirectory())\n fail(`Cannot attach local directory without a shared filesystem: ${input}`)\n if (!stat.isFile() || stat.size > ATTACH_FILE_MAX_BYTES)\n fail(`Cannot attach a directory, special file, or file larger than 10 MiB: ${input}`)\n const content = Buffer.alloc(Number(stat.size))\n let offset = 0\n while (offset < content.length) {\n const read = await handle.read(content, offset, content.length - offset, offset)\n if (read.bytesRead === 0) break\n offset += read.bytesRead\n }\n const bytes = content.subarray(0, offset)\n const detected = FSUtil.mimeType(file)\n const text = bytes.toString(\"utf8\")\n const mime =\n detected.startsWith(\"image/\") || detected === \"application/pdf\"\n ? detected\n : !isBinaryContent(bytes) && Buffer.from(text, \"utf8\").equals(bytes)\n ? \"text/plain\"\n : detected\n return {\n url: `data:${mime};base64,${bytes.toString(\"base64\")}`,\n filename: path.basename(file),\n mime,\n }\n } finally {\n await handle.close()\n }\n}\n\nfunction isBinaryContent(bytes: Uint8Array) {\n if (bytes.length === 0) return false\n if (bytes.includes(0)) return true\n return bytes.reduce((count, byte) => count + Number(byte < 9 || (byte > 13 && byte < 32)), 0) / bytes.length > 0.3\n}\n\nasync function renderTool(part: SessionMessageAssistantTool, directory: string) {\n const info = toolInlineInfo(part, directory)\n if (info.mode === \"block\") {\n UI.empty()\n UI.println(UI.Style.TEXT_NORMAL + info.icon, UI.Style.TEXT_NORMAL + info.title)\n if (info.body?.trim()) UI.println(info.body)\n UI.empty()\n return\n }\n UI.println(\n UI.Style.TEXT_NORMAL + info.icon,\n UI.Style.TEXT_NORMAL + info.title,\n info.description ? UI.Style.TEXT_DIM + info.description + UI.Style.TEXT_NORMAL : \"\",\n )\n}\n\nasync function renderToolError(part: SessionMessageAssistantTool, directory: string) {\n const info = toolInlineInfo(part, directory)\n UI.println(UI.Style.TEXT_NORMAL + \"✗\", UI.Style.TEXT_NORMAL + `${info.title} failed`)\n}\n\nfunction errorMessage(error: unknown) {\n if (error instanceof Error) return error.message\n if (typeof error === \"object\" && error !== null && \"message\" in error && typeof error.message === \"string\")\n return error.message\n return String(error)\n}\n\n/** @internal Used by the V1 command boundary before a Session exists. */\nexport function reportRunError(input: Pick<RunCommandInput, \"format\">, message: string, sessionID?: string) {\n process.exitCode = 1\n if (input.format === \"json\") {\n process.stdout.write(\n JSON.stringify({\n type: \"error\",\n timestamp: Date.now(),\n sessionID: sessionID ?? \"\",\n error: { type: \"unknown\", message },\n }) + \"\\n\",\n )\n return\n }\n UI.error(message)\n}\n\nfunction fail(message: string): never {\n throw new Error(message)\n}\n", | ||
| "import type {\n EventSubscribeOutput,\n JsonValue,\n LocationRef,\n OpenCodeClient,\n SessionMessageAssistantTool,\n SessionMessageInfo,\n ToolContent,\n} from \"@opencode-ai/client/promise\"\nimport { SessionMessage } from \"@opencode-ai/schema/session-message\"\nimport { EOL } from \"node:os\"\nimport { readFile } from \"node:fs/promises\"\nimport { nonEmptyToolContent, toolOutputText, type MiniToolPart } from \"@opencode-ai/tui/mini/tool\"\nimport { UI } from \"./ui\"\n\ntype Model = {\n providerID: string\n modelID: string\n}\n\ntype File = {\n url: string\n filename: string\n mime: string\n}\n\ntype Input = {\n client: OpenCodeClient\n sessionID: string\n location: LocationRef\n message: string\n files: File[]\n agent?: string\n model?: Model\n variant?: string\n thinking: boolean\n format: \"default\" | \"json\"\n auto: boolean\n /** True when the client is attached to a shared server rather than an exclusive in-process one. */\n attached: boolean\n compatibility?: \"v1\"\n renderTool: (part: SessionMessageAssistantTool) => Promise<void>\n renderToolError: (part: SessionMessageAssistantTool) => Promise<void>\n}\n\ntype StartedPart = {\n id: string\n timestamp: number\n}\n\ntype ToolState = StartedPart & {\n assistantMessageID: string\n tool: string\n input: Record<string, JsonValue>\n raw?: string\n provider?: unknown\n providerState?: SessionMessageAssistantTool[\"providerState\"]\n metadata: Record<string, JsonValue>\n content: ToolContent[]\n}\n\ntype V2Event = EventSubscribeOutput\ntype FormRequest = Extract<V2Event, { type: \"form.created\" }>[\"data\"][\"form\"]\n\n// MCP elicitations are temporarily owned by the \"global\" sentinel instead of a real\n// session. An exclusive local process may treat them as this run's blockers; an\n// attached client must not cancel input that may belong to another session.\nconst GLOBAL_FORM_SESSION_ID = \"global\"\n\nexport async function runNonInteractivePrompt(input: Input) {\n const controller = new AbortController()\n const stream = input.client.event.subscribe({ signal: controller.signal })[Symbol.asyncIterator]()\n const connected = await stream.next()\n if (connected.done) throw new Error(\"Event stream disconnected before prompt admission\")\n\n const messageID = SessionMessage.ID.create()\n const starts = new Map<string, StartedPart>()\n const tools = new Map<string, ToolState>()\n const renderedText = new Map<string, string>()\n const renderedReasoning = new Map<string, string>()\n const renderedTools = new Set<string>()\n let submitted = false\n let promoted = false\n let emittedError = false\n let permissionRejected = false\n let formCancelled = false\n let interrupted = false\n let v1InvalidOutput = false\n let prePromotionError: { message: string; [key: string]: unknown } | undefined\n let finalizing = false\n let admission: AbortController | undefined\n let pendingStep: { timestamp: number; part: Record<string, unknown>; label: string } | undefined\n\n const emit = (type: string, timestamp: number, data: Record<string, unknown>) => {\n if (input.format !== \"json\") return false\n process.stdout.write(JSON.stringify({ type, timestamp, sessionID: input.sessionID, ...data }) + EOL)\n return true\n }\n\n const writeText = (part: { text: string; [key: string]: unknown }, timestamp: number) => {\n if (emit(\"text\", timestamp, { part })) return\n const text = part.text.trim()\n if (!text) return\n if (!process.stdout.isTTY) {\n process.stdout.write(text + EOL)\n return\n }\n UI.empty()\n UI.println(text)\n UI.empty()\n }\n\n const writeReasoning = (part: { text: string; [key: string]: unknown }, timestamp: number) => {\n if (emit(\"reasoning\", timestamp, { part })) return\n const text = part.text.trim()\n if (!text) return\n const line = `Thinking: ${text}`\n if (!process.stdout.isTTY) return void process.stdout.write(line + EOL)\n UI.empty()\n UI.println(`${UI.Style.TEXT_DIM}\\u001b[3m${line}\\u001b[0m${UI.Style.TEXT_NORMAL}`)\n UI.empty()\n }\n\n const flushStep = () => {\n if (!pendingStep) return\n const value = pendingStep\n pendingStep = undefined\n if (!emit(\"step_start\", value.timestamp, { part: value.part }) && input.format !== \"json\") {\n UI.empty()\n UI.println(value.label)\n UI.empty()\n }\n }\n\n const replyPermission = async (request: { id: string; action: string; resources: ReadonlyArray<string> }) => {\n if (!input.auto) {\n permissionRejected = true\n UI.println(\n UI.Style.TEXT_WARNING_BOLD + \"!\",\n UI.Style.TEXT_NORMAL +\n `permission requested: ${request.action} (${request.resources.join(\", \")}); auto-rejecting`,\n )\n }\n await input.client.permission\n .reply({\n sessionID: input.sessionID,\n requestID: request.id,\n reply: input.auto ? \"once\" : \"reject\",\n })\n .catch(() => {})\n if (!input.auto) {\n await input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n }\n }\n\n const cancelForm = async (request: Pick<FormRequest, \"id\" | \"sessionID\">) => {\n try {\n await input.client.form.cancel(\n { sessionID: request.sessionID, formID: request.id },\n ...formRequestOptions(request.sessionID === GLOBAL_FORM_SESSION_ID ? input.location : undefined),\n )\n } catch (error) {\n if (!formAlreadySettled(error)) throw error\n }\n formCancelled = true\n }\n\n const consume = async () => {\n while (!controller.signal.aborted) {\n const next = await stream.next().catch((error) => {\n if (!emittedError) throw error\n return { done: true as const, value: undefined }\n })\n if (next.done) {\n if (emittedError) return\n throw new Error(\"Event stream disconnected during prompt execution\")\n }\n const event = next.value\n\n if (event.type === \"permission.asked\" && submitted && event.data.sessionID === input.sessionID) {\n await replyPermission(event.data)\n continue\n }\n if (\n event.type === \"form.created\" &&\n submitted &&\n (event.data.form.sessionID === input.sessionID ||\n (!input.attached &&\n event.data.form.sessionID === GLOBAL_FORM_SESSION_ID &&\n sameLocation(event.location, input.location)))\n ) {\n await cancelForm(event.data.form)\n continue\n }\n if (!(\"sessionID\" in event.data) || event.data.sessionID !== input.sessionID) continue\n const time = toMillis(\"created\" in event ? event.created : undefined)\n\n if (event.type === \"session.input.promoted\") {\n if (event.data.inputID === messageID) {\n promoted = true\n prePromotionError = undefined\n continue\n }\n }\n if (\n event.type === \"session.execution.interrupted\" &&\n event.data.reason === \"user\" &&\n (interrupted || permissionRejected || formCancelled)\n ) {\n return\n }\n if (!promoted && event.type === \"session.execution.failed\") {\n prePromotionError = event.data.error\n if (finalizing) return\n continue\n }\n if (\n !promoted &&\n finalizing &&\n (event.type === \"session.execution.succeeded\" || event.type === \"session.execution.interrupted\")\n )\n return\n if (!promoted) continue\n if (finalizing && !event.type.startsWith(\"session.execution.\")) continue\n\n if (event.type === \"session.step.started\") {\n const part = {\n id: partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"step-start\",\n snapshot: event.data.snapshot,\n }\n if (input.compatibility === \"v1\") {\n pendingStep = {\n timestamp: time,\n part,\n label: `> ${event.data.agent} · ${event.data.model.id}`,\n }\n continue\n }\n if (!emit(\"step_start\", time, { part }) && input.format !== \"json\") {\n UI.empty()\n UI.println(`> ${event.data.agent} · ${event.data.model.id}`)\n UI.empty()\n }\n continue\n }\n\n if (event.type === \"session.text.started\") {\n flushStep()\n starts.set(`text\\u0000${contentKey(event.data.assistantMessageID, event.data.ordinal)}`, {\n id: partID(event.id),\n timestamp: time,\n })\n continue\n }\n if (event.type === \"session.text.ended\") {\n const key = contentKey(event.data.assistantMessageID, event.data.ordinal)\n const started = starts.get(`text\\u0000${key}`)\n starts.delete(`text\\u0000${key}`)\n const part = {\n id: started?.id ?? partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"text\",\n text: event.data.text,\n time: { start: started?.timestamp ?? time, end: time },\n }\n renderedText.set(key, event.data.text)\n writeText(part, time)\n continue\n }\n\n if (event.type === \"session.reasoning.started\") {\n flushStep()\n starts.set(`reasoning\\u0000${contentKey(event.data.assistantMessageID, event.data.ordinal)}`, {\n id: partID(event.id),\n timestamp: time,\n })\n continue\n }\n if (event.type === \"session.reasoning.ended\" && input.thinking) {\n const key = contentKey(event.data.assistantMessageID, event.data.ordinal)\n const started = starts.get(`reasoning\\u0000${key}`)\n starts.delete(`reasoning\\u0000${key}`)\n const part = {\n id: started?.id ?? partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"reasoning\",\n text: event.data.text,\n metadata: event.data.state,\n time: { start: started?.timestamp ?? time, end: time },\n }\n renderedReasoning.set(key, event.data.text)\n writeReasoning(part, time)\n continue\n }\n\n if (event.type === \"session.tool.input.started\") {\n flushStep()\n tools.set(toolKey(event.data.assistantMessageID, event.data.callID), {\n id: partID(event.id),\n timestamp: time,\n assistantMessageID: event.data.assistantMessageID,\n tool: event.data.name,\n input: {},\n metadata: {},\n content: [],\n })\n continue\n }\n if (event.type === \"session.tool.input.ended\") {\n const current = tools.get(toolKey(event.data.assistantMessageID, event.data.callID))\n if (current) current.raw = event.data.text\n continue\n }\n if (event.type === \"session.tool.input.delta\") {\n const current = tools.get(toolKey(event.data.assistantMessageID, event.data.callID))\n if (current) current.raw = (current.raw ?? \"\") + event.data.delta\n continue\n }\n if (event.type === \"session.tool.called\") {\n flushStep()\n const key = toolKey(event.data.assistantMessageID, event.data.callID)\n const current = tools.get(key)\n tools.set(key, {\n id: current?.id ?? partID(event.id),\n timestamp: current?.timestamp ?? time,\n assistantMessageID: event.data.assistantMessageID,\n tool: current?.tool ?? \"tool\",\n input: event.data.input,\n raw: current?.raw,\n provider: { executed: event.data.executed, state: event.data.state },\n providerState: event.data.state,\n metadata: {},\n content: [],\n })\n continue\n }\n if (event.type === \"session.tool.progress\") {\n const current = tools.get(toolKey(event.data.assistantMessageID, event.data.callID))\n if (current) {\n current.metadata = event.data.metadata\n }\n continue\n }\n if (event.type === \"session.tool.success\") {\n const key = toolKey(event.data.assistantMessageID, event.data.callID)\n const current = tools.get(key) ?? fallbackTool(event)\n const tool: SessionMessageAssistantTool = {\n type: \"tool\",\n id: event.data.callID,\n name: current.tool,\n executed: event.data.executed,\n providerState: current.providerState,\n providerResultState: event.data.resultState,\n state: {\n status: \"completed\",\n input: current.input,\n metadata: event.data.metadata,\n content: event.data.content,\n },\n time: { created: current.timestamp, ran: current.timestamp, completed: time },\n }\n const part: MiniToolPart = {\n id: current.id,\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"tool\",\n callID: event.data.callID,\n tool: current.tool,\n state: {\n status: \"completed\",\n input: current.input,\n output: toolOutputText(current.tool, event.data.content),\n title: current.tool,\n metadata: {\n metadata: event.data.metadata,\n content: event.data.content,\n providerCall: current.provider,\n providerResult: { executed: event.data.executed, state: event.data.resultState },\n rawInput: current.raw,\n },\n time: { start: current.timestamp, end: time },\n },\n }\n tools.delete(key)\n renderedTools.add(key)\n if (!emit(\"tool_use\", time, { part })) await input.renderTool(tool)\n continue\n }\n if (event.type === \"session.tool.failed\") {\n const key = toolKey(event.data.assistantMessageID, event.data.callID)\n const current = tools.get(key) ?? fallbackTool(event)\n const error = event.data.error.message\n const metadata = event.data.metadata ?? current.metadata\n const content = event.data.content ?? nonEmptyToolContent(current.content)\n const tool: SessionMessageAssistantTool = {\n type: \"tool\",\n id: event.data.callID,\n name: current.tool,\n executed: event.data.executed,\n providerState: current.providerState,\n providerResultState: event.data.resultState,\n state: {\n status: \"error\",\n input: current.input,\n metadata,\n content,\n error: event.data.error,\n },\n time: { created: current.timestamp, ran: current.timestamp, completed: time },\n }\n const part: MiniToolPart = {\n id: current.id,\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"tool\",\n callID: event.data.callID,\n tool: current.tool,\n state: {\n status: \"error\",\n input: current.input,\n error,\n metadata: {\n providerCall: current.provider,\n providerResult: { executed: event.data.executed, state: event.data.resultState },\n rawInput: current.raw,\n },\n time: { start: current.timestamp, end: time },\n },\n }\n tools.delete(key)\n renderedTools.add(key)\n if (input.compatibility === \"v1\" && (permissionRejected || formCancelled)) continue\n if (!emit(\"tool_use\", time, { part })) {\n if (content && toolOutputText(current.tool, content).trim())\n await input.renderTool({\n ...tool,\n state: {\n status: \"completed\",\n input: current.input,\n metadata,\n content,\n },\n })\n await input.renderToolError(tool)\n UI.error(error)\n }\n continue\n }\n\n if (event.type === \"session.step.ended\") {\n flushStep()\n const part = {\n id: partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"step-finish\",\n reason: event.data.finish,\n snapshot: event.data.snapshot,\n cost: event.data.cost,\n tokens: event.data.tokens,\n }\n emit(\"step_finish\", time, { part })\n continue\n }\n if (event.type === \"session.step.failed\") {\n if (\n input.compatibility === \"v1\" &&\n event.data.error.message === \"Provider stream ended without a terminal finish event\"\n ) {\n pendingStep = undefined\n v1InvalidOutput = true\n continue\n }\n if (interrupted || permissionRejected || formCancelled) continue\n flushStep()\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", time, { error: event.data.error })) UI.error(event.data.error.message)\n continue\n }\n if (event.type === \"session.execution.failed\") {\n if (input.compatibility === \"v1\" && (v1InvalidOutput || permissionRejected || formCancelled)) return\n flushStep()\n if (!emittedError && !formCancelled) {\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", time, { error: event.data.error })) UI.error(event.data.error.message)\n }\n return\n }\n if (event.type === \"session.execution.interrupted\") {\n if (input.compatibility === \"v1\" && (permissionRejected || formCancelled)) return\n if (event.data.reason === \"user\" && interrupted) process.exitCode = 130\n if (event.data.reason !== \"user\" && !emittedError) {\n emittedError = true\n process.exitCode = 1\n const error = { type: \"aborted\" as const, message: `Session interrupted: ${event.data.reason}` }\n if (!emit(\"error\", time, { error })) UI.error(error.message)\n }\n return\n }\n if (event.type === \"session.execution.succeeded\") return\n }\n }\n\n const projectedMessages = async () => {\n const messages: SessionMessageInfo[] = []\n let cursor: string | undefined\n while (true) {\n const page = await input.client.message.list(\n cursor\n ? { sessionID: input.sessionID, limit: 200, cursor }\n : { sessionID: input.sessionID, limit: 200, order: \"desc\" },\n )\n for (const message of page.data) {\n if (message.id === messageID) return { found: true, messages: messages.toReversed() }\n messages.push(message)\n }\n cursor = page.cursor.next ?? undefined\n if (!cursor) return { found: false, messages: [] }\n }\n }\n\n const reconcile = async () => {\n const projected = await projectedMessages()\n for (const message of projected.messages) {\n if (message.type !== \"assistant\") continue\n const timestamp = message.time.completed ?? message.time.created\n let textOrdinal = 0\n let reasoningOrdinal = 0\n for (const item of message.content) {\n if (item.type === \"text\") {\n const ordinal = textOrdinal++\n const key = contentKey(message.id, ordinal)\n const rendered = renderedText.get(key) ?? \"\"\n if (rendered === item.text || !item.text.startsWith(rendered)) continue\n const text = item.text.slice(rendered.length)\n writeText(\n {\n id: projectedPartID(message.id, `text-${ordinal}`),\n sessionID: input.sessionID,\n messageID: message.id,\n type: \"text\",\n text,\n time: { start: message.time.created, end: timestamp },\n },\n timestamp,\n )\n renderedText.set(key, item.text)\n continue\n }\n if (item.type === \"reasoning\") {\n const ordinal = reasoningOrdinal++\n if (!input.thinking) continue\n const key = contentKey(message.id, ordinal)\n const rendered = renderedReasoning.get(key) ?? \"\"\n if (rendered === item.text || !item.text.startsWith(rendered)) continue\n const text = item.text.slice(rendered.length)\n const part = {\n id: projectedPartID(message.id, `reasoning-${ordinal}`),\n sessionID: input.sessionID,\n messageID: message.id,\n type: \"reasoning\",\n text,\n metadata: item.state,\n time: { start: message.time.created, end: timestamp },\n }\n renderedReasoning.set(key, item.text)\n writeReasoning(part, timestamp)\n continue\n }\n\n const key = toolKey(message.id, item.id)\n if (renderedTools.has(key) || item.state.status === \"streaming\" || item.state.status === \"running\") continue\n const part: MiniToolPart = {\n id: projectedPartID(message.id, `tool-${item.id}`),\n sessionID: input.sessionID,\n messageID: message.id,\n type: \"tool\",\n callID: item.id,\n tool: item.name,\n state:\n item.state.status === \"completed\"\n ? {\n status: \"completed\",\n input: item.state.input,\n output: toolOutputText(item.name, item.state.content),\n title: item.name,\n metadata: { metadata: item.state.metadata, content: item.state.content },\n time: { start: item.time.ran ?? item.time.created, end: item.time.completed ?? timestamp },\n }\n : {\n status: \"error\",\n input: item.state.input,\n error: item.state.error.message,\n metadata: { metadata: item.state.metadata, content: item.state.content },\n time: { start: item.time.ran ?? item.time.created, end: item.time.completed ?? timestamp },\n },\n }\n renderedTools.add(key)\n if (emit(\"tool_use\", timestamp, { part })) continue\n if (item.state.status === \"completed\") {\n await input.renderTool(item)\n continue\n }\n if (item.state.content && toolOutputText(item.name, item.state.content).trim()) {\n await input.renderTool({\n ...item,\n state: {\n status: \"completed\",\n input: item.state.input,\n metadata: item.state.metadata,\n content: item.state.content,\n },\n })\n }\n await input.renderToolError(item)\n UI.error(item.state.error.message)\n }\n\n if (message.error && !emittedError) {\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", timestamp, { error: message.error })) UI.error(message.error.message)\n }\n }\n return {\n found: projected.found,\n responded: projected.messages.some((message) => message.type === \"assistant\"),\n }\n }\n\n const interrupt = () => {\n if (interrupted) process.exit(130)\n interrupted = true\n process.exitCode = 130\n admission?.abort()\n void input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n }\n process.on(\"SIGINT\", interrupt)\n\n let completed: Promise<void> | undefined\n try {\n if (input.agent) {\n await input.client.session.switchAgent({ sessionID: input.sessionID, agent: input.agent })\n }\n const selected = input.model\n ? { providerID: input.model.providerID, id: input.model.modelID, variant: input.variant }\n : input.variant\n ? await input.client.session\n .get({ sessionID: input.sessionID })\n .then((result) => result.model)\n .then(async (model) => {\n if (model) return { ...model, variant: input.variant }\n const result = await input.client.model.default()\n const fallback = result.data\n return fallback ? { providerID: fallback.providerID, id: fallback.id, variant: input.variant } : undefined\n })\n : undefined\n if (input.variant && !selected) throw new Error(\"Cannot select a variant before selecting a model\")\n if (selected) {\n await input.client.session.switchModel({ sessionID: input.sessionID, model: selected })\n }\n\n const prepared = await Promise.all(input.files.map(prepareFile))\n if (interrupted) return\n submitted = true\n completed = consume()\n admission = new AbortController()\n const response = await input.client.session\n .prompt(\n {\n sessionID: input.sessionID,\n id: messageID,\n text: [input.message, ...prepared.flatMap((file) => (file.text ? [file.text] : []))].join(\"\\n\\n\"),\n files: prepared.flatMap((file) => (file.attachment ? [file.attachment] : [])),\n delivery: \"steer\",\n },\n { signal: admission.signal },\n )\n .catch(async (error) => {\n if (interrupted) {\n await input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n }\n controller.abort()\n await completed?.catch(() => {})\n if (interrupted || emittedError) return undefined\n throw error\n })\n admission = undefined\n if (!response) return\n if (interrupted) await input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n\n const [permissions, forms, globals] = await Promise.all([\n input.client.permission.list({ sessionID: input.sessionID }).catch(() => undefined),\n input.client.form.list({ sessionID: input.sessionID }).catch(() => undefined),\n input.attached\n ? Promise.resolve(undefined)\n : input.client.form.request\n .list({\n location: { directory: input.location.directory, workspace: input.location.workspaceID },\n })\n .catch(() => undefined),\n ])\n await Promise.all([\n ...(permissions ?? []).map(replyPermission),\n ...(forms ?? []).map(cancelForm),\n ...(globals && sameLocation(globals.location, input.location)\n ? globals.data.filter((form) => form.sessionID === GLOBAL_FORM_SESSION_ID).map(cancelForm)\n : []),\n ])\n if (input.compatibility === \"v1\") {\n await completed\n return\n }\n\n const waiting = input.client.session.wait({ sessionID: input.sessionID })\n await Promise.race([waiting, completed.then(() => waiting)])\n finalizing = true\n const projected = await reconcile()\n if (\n !projected.responded &&\n !interrupted &&\n !permissionRejected &&\n !formCancelled &&\n !emittedError &&\n !prePromotionError\n ) {\n await completed\n }\n if (!projected.found && !interrupted && !permissionRejected && !formCancelled && !emittedError) {\n const error = prePromotionError ?? { type: \"unknown\", message: \"Prompt was not promoted\" }\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", Date.now(), { error })) UI.error(error.message)\n }\n } finally {\n process.off(\"SIGINT\", interrupt)\n controller.abort()\n if (input.compatibility === \"v1\") await stream.return?.(undefined).catch(() => {})\n else void stream.return?.(undefined).catch(() => {})\n }\n}\n\nfunction sameLocation(left: LocationRef | undefined, right: LocationRef) {\n return !!left && left.directory === right.directory && left.workspaceID === right.workspaceID\n}\n\nfunction formRequestOptions(location: LocationRef | undefined): [] | [{ headers: Record<string, string> }] {\n if (!location) return []\n return [\n {\n headers: {\n \"x-opencode-directory\": encodeURIComponent(location.directory),\n ...(location.workspaceID ? { \"x-opencode-workspace\": location.workspaceID } : {}),\n },\n },\n ]\n}\n\nfunction formAlreadySettled(error: unknown) {\n return !!error && typeof error === \"object\" && Reflect.get(error, \"_tag\") === \"FormAlreadySettledError\"\n}\n\nfunction partID(eventID: string) {\n return `prt_${eventID.replace(/^evt_/, \"\")}`\n}\n\nfunction toolKey(messageID: string, callID: string) {\n return `${messageID}\\u0000${callID}`\n}\n\nfunction contentKey(messageID: string, ordinal: number) {\n return `${messageID}\\u0000${ordinal}`\n}\n\nfunction projectedPartID(messageID: string, part: string) {\n return `prt_${messageID.replace(/^msg_/, \"\")}_${part}`\n}\n\nfunction fallbackTool(event: {\n id: string\n created: number\n data: { assistantMessageID: string; callID: string }\n}): ToolState {\n return {\n id: partID(event.id),\n timestamp: toMillis(event.created),\n assistantMessageID: event.data.assistantMessageID,\n tool: \"tool\",\n input: {},\n metadata: {},\n content: [],\n }\n}\n\nfunction toMillis(value: unknown) {\n if (typeof value === \"number\") return value\n if (typeof value === \"string\") return new Date(value).getTime()\n return Date.now()\n}\n\nasync function prepareFile(file: File) {\n if (file.mime !== \"text/plain\") {\n const uri = file.url.startsWith(\"data:\")\n ? file.url\n : `data:${file.mime};base64,${(await readFile(new URL(file.url))).toString(\"base64\")}`\n return { attachment: { uri, name: file.filename } }\n }\n const content = file.url.startsWith(\"data:\")\n ? Buffer.from(file.url.slice(file.url.indexOf(\",\") + 1), \"base64\").toString(\"utf8\")\n : await readFile(new URL(file.url), \"utf8\")\n return { text: `<file name=\"${file.filename}\">\\n${content}\\n</file>` }\n}\n", | ||
| "import { EOL } from \"node:os\"\n\nexport const Style = {\n TEXT_DIM: \"\\x1b[90m\",\n TEXT_NORMAL: \"\\x1b[0m\",\n TEXT_WARNING_BOLD: \"\\x1b[93m\\x1b[1m\",\n TEXT_DANGER_BOLD: \"\\x1b[91m\\x1b[1m\",\n}\n\nexport function println(...message: string[]) {\n process.stderr.write(message.join(\" \") + EOL)\n}\n\nlet blank = false\n\nexport function empty() {\n if (blank) return\n println(Style.TEXT_NORMAL)\n blank = true\n}\n\nexport function error(message: string) {\n if (message.startsWith(\"Error: \")) message = message.slice(\"Error: \".length)\n println(Style.TEXT_DANGER_BOLD + \"Error: \" + Style.TEXT_NORMAL + message)\n}\n\nexport * as UI from \"./ui\"\n" | ||
| ], | ||
| "mappings": ";oiCAGA,oBAAS,0BACT,0BCMA,mBAAS,gBACT,wBAAS,wGCXT,mBAAS,iBAEF,SAAM,OAAQ,MACnB,cAAU,gBACV,iBAAa,eACb,uBAAmB,uBACnB,sBAAkB,sBACpB,OAEO,cAAS,MAAO,SAAI,OAAmB,MAC5C,QAAQ,OAAO,MAAM,EAAQ,KAAK,GAAG,EAAI,EAAG,EAG9C,IAAI,GAAQ,GAEL,SAAS,EAAK,EAAG,CACtB,GAAI,GAAO,OACX,EAAQ,EAAM,WAAW,EACzB,GAAQ,GAGH,SAAS,EAAK,CAAC,EAAiB,CACrC,GAAI,EAAQ,WAAW,SAAS,EAAG,EAAU,EAAQ,MAAM,CAAgB,EAC3E,EAAQ,EAAM,iBAAmB,UAAY,EAAM,YAAc,CAAO,ED4C1E,IAAM,EAAyB,SAE/B,eAAsB,EAAuB,CAAC,EAAc,CAC1D,IAAM,EAAa,IAAI,gBACjB,EAAS,EAAM,OAAO,MAAM,UAAU,CAAE,OAAQ,EAAW,MAAO,CAAC,EAAE,OAAO,eAAe,EAEjG,IADkB,MAAM,EAAO,KAAK,GACtB,KAAM,MAAU,MAAM,mDAAmD,EAEvF,IAAM,EAAY,GAAe,GAAG,OAAO,EACrC,EAAS,IAAI,IACb,EAAQ,IAAI,IACZ,EAAe,IAAI,IACnB,EAAoB,IAAI,IACxB,EAAgB,IAAI,IACtB,EAAY,GACZ,EAAW,GACX,EAAe,GACf,EAAqB,GACrB,EAAgB,GAChB,EAAc,GACd,EAAkB,GAClB,EACA,EAAa,GACb,EACA,EAEE,EAAO,CAAC,EAAc,EAAmB,IAAkC,CAC/E,GAAI,EAAM,SAAW,OAAQ,MAAO,GAEpC,OADA,QAAQ,OAAO,MAAM,KAAK,UAAU,CAAE,OAAM,YAAW,UAAW,EAAM,aAAc,CAAK,CAAC,EAAI,CAAG,EAC5F,IAGH,EAAY,CAAC,EAAgD,IAAsB,CACvF,GAAI,EAAK,OAAQ,EAAW,CAAE,MAAK,CAAC,EAAG,OACvC,IAAM,EAAO,EAAK,KAAK,KAAK,EAC5B,GAAI,CAAC,EAAM,OACX,GAAI,CAAC,QAAQ,OAAO,MAAO,CACzB,QAAQ,OAAO,MAAM,EAAO,CAAG,EAC/B,OAEF,EAAG,MAAM,EACT,EAAG,QAAQ,CAAI,EACf,EAAG,MAAM,GAGL,EAAiB,CAAC,EAAgD,IAAsB,CAC5F,GAAI,EAAK,YAAa,EAAW,CAAE,MAAK,CAAC,EAAG,OAC5C,IAAM,EAAO,EAAK,KAAK,KAAK,EAC5B,GAAI,CAAC,EAAM,OACX,IAAM,EAAO,aAAa,IAC1B,GAAI,CAAC,QAAQ,OAAO,MAAO,OAAO,KAAK,QAAQ,OAAO,MAAM,EAAO,CAAG,EACtE,EAAG,MAAM,EACT,EAAG,QAAQ,GAAG,EAAG,MAAM,kBAAoB,WAAgB,EAAG,MAAM,aAAa,EACjF,EAAG,MAAM,GAGL,EAAY,IAAM,CACtB,GAAI,CAAC,EAAa,OAClB,IAAM,EAAQ,EAEd,GADA,EAAc,OACV,CAAC,EAAK,aAAc,EAAM,UAAW,CAAE,KAAM,EAAM,IAAK,CAAC,GAAK,EAAM,SAAW,OACjF,EAAG,MAAM,EACT,EAAG,QAAQ,EAAM,KAAK,EACtB,EAAG,MAAM,GAIP,EAAkB,MAAO,IAA8E,CAC3G,GAAI,CAAC,EAAM,KACT,EAAqB,GACrB,EAAG,QACD,EAAG,MAAM,kBAAoB,IAC7B,EAAG,MAAM,YACP,yBAAyB,EAAQ,WAAW,EAAQ,UAAU,KAAK,IAAI,oBAC3E,EASF,GAPA,MAAM,EAAM,OAAO,WAChB,MAAM,CACL,UAAW,EAAM,UACjB,UAAW,EAAQ,GACnB,MAAO,EAAM,KAAO,OAAS,QAC/B,CAAC,EACA,MAAM,IAAM,EAAE,EACb,CAAC,EAAM,KACT,MAAM,EAAM,OAAO,QAAQ,UAAU,CAAE,UAAW,EAAM,SAAU,CAAC,EAAE,MAAM,IAAM,EAAE,GAIjF,EAAa,MAAO,IAAmD,CAC3E,GAAI,CACF,MAAM,EAAM,OAAO,KAAK,OACtB,CAAE,UAAW,EAAQ,UAAW,OAAQ,EAAQ,EAAG,EACnD,GAAG,GAAmB,EAAQ,YAAc,EAAyB,EAAM,SAAW,MAAS,CACjG,EACA,MAAO,EAAO,CACd,GAAI,CAAC,GAAmB,CAAK,EAAG,MAAM,EAExC,EAAgB,IAGZ,GAAU,SAAY,CAC1B,MAAO,CAAC,EAAW,OAAO,QAAS,CACjC,IAAM,EAAO,MAAM,EAAO,KAAK,EAAE,MAAM,CAAC,IAAU,CAChD,GAAI,CAAC,EAAc,MAAM,EACzB,MAAO,CAAE,KAAM,GAAe,MAAO,MAAU,EAChD,EACD,GAAI,EAAK,KAAM,CACb,GAAI,EAAc,OAClB,MAAU,MAAM,mDAAmD,EAErE,IAAM,EAAQ,EAAK,MAEnB,GAAI,EAAM,OAAS,oBAAsB,GAAa,EAAM,KAAK,YAAc,EAAM,UAAW,CAC9F,MAAM,EAAgB,EAAM,IAAI,EAChC,SAEF,GACE,EAAM,OAAS,gBACf,IACC,EAAM,KAAK,KAAK,YAAc,EAAM,WAClC,CAAC,EAAM,UACN,EAAM,KAAK,KAAK,YAAc,GAC9B,GAAa,EAAM,SAAU,EAAM,QAAQ,GAC/C,CACA,MAAM,EAAW,EAAM,KAAK,IAAI,EAChC,SAEF,GAAI,EAAE,cAAe,EAAM,OAAS,EAAM,KAAK,YAAc,EAAM,UAAW,SAC9E,IAAM,EAAO,GAAS,YAAa,EAAQ,EAAM,QAAU,MAAS,EAEpE,GAAI,EAAM,OAAS,0BACjB,GAAI,EAAM,KAAK,UAAY,EAAW,CACpC,EAAW,GACX,EAAoB,OACpB,UAGJ,GACE,EAAM,OAAS,iCACf,EAAM,KAAK,SAAW,SACrB,GAAe,GAAsB,GAEtC,OAEF,GAAI,CAAC,GAAY,EAAM,OAAS,2BAA4B,CAE1D,GADA,EAAoB,EAAM,KAAK,MAC3B,EAAY,OAChB,SAEF,GACE,CAAC,GACD,IACC,EAAM,OAAS,+BAAiC,EAAM,OAAS,iCAEhE,OACF,GAAI,CAAC,EAAU,SACf,GAAI,GAAc,CAAC,EAAM,KAAK,WAAW,oBAAoB,EAAG,SAEhE,GAAI,EAAM,OAAS,uBAAwB,CACzC,IAAM,EAAO,CACX,GAAI,EAAO,EAAM,EAAE,EACnB,UAAW,EAAM,UACjB,UAAW,EAAM,KAAK,mBACtB,KAAM,aACN,SAAU,EAAM,KAAK,QACvB,EACA,GAAI,EAAM,gBAAkB,KAAM,CAChC,EAAc,CACZ,UAAW,EACX,OACA,MAAO,KAAK,EAAM,KAAK,cAAU,EAAM,KAAK,MAAM,IACpD,EACA,SAEF,GAAI,CAAC,EAAK,aAAc,EAAM,CAAE,MAAK,CAAC,GAAK,EAAM,SAAW,OAC1D,EAAG,MAAM,EACT,EAAG,QAAQ,KAAK,EAAM,KAAK,cAAU,EAAM,KAAK,MAAM,IAAI,EAC1D,EAAG,MAAM,EAEX,SAGF,GAAI,EAAM,OAAS,uBAAwB,CACzC,EAAU,EACV,EAAO,IAAI,WAAa,EAAW,EAAM,KAAK,mBAAoB,EAAM,KAAK,OAAO,IAAK,CACvF,GAAI,EAAO,EAAM,EAAE,EACnB,UAAW,CACb,CAAC,EACD,SAEF,GAAI,EAAM,OAAS,qBAAsB,CACvC,IAAM,EAAM,EAAW,EAAM,KAAK,mBAAoB,EAAM,KAAK,OAAO,EAClE,EAAU,EAAO,IAAI,WAAa,GAAK,EAC7C,EAAO,OAAO,WAAa,GAAK,EAChC,IAAM,EAAO,CACX,GAAI,GAAS,IAAM,EAAO,EAAM,EAAE,EAClC,UAAW,EAAM,UACjB,UAAW,EAAM,KAAK,mBACtB,KAAM,OACN,KAAM,EAAM,KAAK,KACjB,KAAM,CAAE,MAAO,GAAS,WAAa,EAAM,IAAK,CAAK,CACvD,EACA,EAAa,IAAI,EAAK,EAAM,KAAK,IAAI,EACrC,EAAU,EAAM,CAAI,EACpB,SAGF,GAAI,EAAM,OAAS,4BAA6B,CAC9C,EAAU,EACV,EAAO,IAAI,gBAAkB,EAAW,EAAM,KAAK,mBAAoB,EAAM,KAAK,OAAO,IAAK,CAC5F,GAAI,EAAO,EAAM,EAAE,EACnB,UAAW,CACb,CAAC,EACD,SAEF,GAAI,EAAM,OAAS,2BAA6B,EAAM,SAAU,CAC9D,IAAM,EAAM,EAAW,EAAM,KAAK,mBAAoB,EAAM,KAAK,OAAO,EAClE,EAAU,EAAO,IAAI,gBAAkB,GAAK,EAClD,EAAO,OAAO,gBAAkB,GAAK,EACrC,IAAM,EAAO,CACX,GAAI,GAAS,IAAM,EAAO,EAAM,EAAE,EAClC,UAAW,EAAM,UACjB,UAAW,EAAM,KAAK,mBACtB,KAAM,YACN,KAAM,EAAM,KAAK,KACjB,SAAU,EAAM,KAAK,MACrB,KAAM,CAAE,MAAO,GAAS,WAAa,EAAM,IAAK,CAAK,CACvD,EACA,EAAkB,IAAI,EAAK,EAAM,KAAK,IAAI,EAC1C,EAAe,EAAM,CAAI,EACzB,SAGF,GAAI,EAAM,OAAS,6BAA8B,CAC/C,EAAU,EACV,EAAM,IAAI,EAAQ,EAAM,KAAK,mBAAoB,EAAM,KAAK,MAAM,EAAG,CACnE,GAAI,EAAO,EAAM,EAAE,EACnB,UAAW,EACX,mBAAoB,EAAM,KAAK,mBAC/B,KAAM,EAAM,KAAK,KACjB,MAAO,CAAC,EACR,SAAU,CAAC,EACX,QAAS,CAAC,CACZ,CAAC,EACD,SAEF,GAAI,EAAM,OAAS,2BAA4B,CAC7C,IAAM,EAAU,EAAM,IAAI,EAAQ,EAAM,KAAK,mBAAoB,EAAM,KAAK,MAAM,CAAC,EACnF,GAAI,EAAS,EAAQ,IAAM,EAAM,KAAK,KACtC,SAEF,GAAI,EAAM,OAAS,2BAA4B,CAC7C,IAAM,EAAU,EAAM,IAAI,EAAQ,EAAM,KAAK,mBAAoB,EAAM,KAAK,MAAM,CAAC,EACnF,GAAI,EAAS,EAAQ,KAAO,EAAQ,KAAO,IAAM,EAAM,KAAK,MAC5D,SAEF,GAAI,EAAM,OAAS,sBAAuB,CACxC,EAAU,EACV,IAAM,EAAM,EAAQ,EAAM,KAAK,mBAAoB,EAAM,KAAK,MAAM,EAC9D,EAAU,EAAM,IAAI,CAAG,EAC7B,EAAM,IAAI,EAAK,CACb,GAAI,GAAS,IAAM,EAAO,EAAM,EAAE,EAClC,UAAW,GAAS,WAAa,EACjC,mBAAoB,EAAM,KAAK,mBAC/B,KAAM,GAAS,MAAQ,OACvB,MAAO,EAAM,KAAK,MAClB,IAAK,GAAS,IACd,SAAU,CAAE,SAAU,EAAM,KAAK,SAAU,MAAO,EAAM,KAAK,KAAM,EACnE,cAAe,EAAM,KAAK,MAC1B,SAAU,CAAC,EACX,QAAS,CAAC,CACZ,CAAC,EACD,SAEF,GAAI,EAAM,OAAS,wBAAyB,CAC1C,IAAM,EAAU,EAAM,IAAI,EAAQ,EAAM,KAAK,mBAAoB,EAAM,KAAK,MAAM,CAAC,EACnF,GAAI,EACF,EAAQ,SAAW,EAAM,KAAK,SAEhC,SAEF,GAAI,EAAM,OAAS,uBAAwB,CACzC,IAAM,EAAM,EAAQ,EAAM,KAAK,mBAAoB,EAAM,KAAK,MAAM,EAC9D,EAAU,EAAM,IAAI,CAAG,GAAK,GAAa,CAAK,EAC9C,EAAoC,CACxC,KAAM,OACN,GAAI,EAAM,KAAK,OACf,KAAM,EAAQ,KACd,SAAU,EAAM,KAAK,SACrB,cAAe,EAAQ,cACvB,oBAAqB,EAAM,KAAK,YAChC,MAAO,CACL,OAAQ,YACR,MAAO,EAAQ,MACf,SAAU,EAAM,KAAK,SACrB,QAAS,EAAM,KAAK,OACtB,EACA,KAAM,CAAE,QAAS,EAAQ,UAAW,IAAK,EAAQ,UAAW,UAAW,CAAK,CAC9E,EACM,EAAqB,CACzB,GAAI,EAAQ,GACZ,UAAW,EAAM,UACjB,UAAW,EAAM,KAAK,mBACtB,KAAM,OACN,OAAQ,EAAM,KAAK,OACnB,KAAM,EAAQ,KACd,MAAO,CACL,OAAQ,YACR,MAAO,EAAQ,MACf,OAAQ,EAAe,EAAQ,KAAM,EAAM,KAAK,OAAO,EACvD,MAAO,EAAQ,KACf,SAAU,CACR,SAAU,EAAM,KAAK,SACrB,QAAS,EAAM,KAAK,QACpB,aAAc,EAAQ,SACtB,eAAgB,CAAE,SAAU,EAAM,KAAK,SAAU,MAAO,EAAM,KAAK,WAAY,EAC/E,SAAU,EAAQ,GACpB,EACA,KAAM,CAAE,MAAO,EAAQ,UAAW,IAAK,CAAK,CAC9C,CACF,EAGA,GAFA,EAAM,OAAO,CAAG,EAChB,EAAc,IAAI,CAAG,EACjB,CAAC,EAAK,WAAY,EAAM,CAAE,MAAK,CAAC,EAAG,MAAM,EAAM,WAAW,CAAI,EAClE,SAEF,GAAI,EAAM,OAAS,sBAAuB,CACxC,IAAM,EAAM,EAAQ,EAAM,KAAK,mBAAoB,EAAM,KAAK,MAAM,EAC9D,EAAU,EAAM,IAAI,CAAG,GAAK,GAAa,CAAK,EAC9C,EAAQ,EAAM,KAAK,MAAM,QACzB,EAAW,EAAM,KAAK,UAAY,EAAQ,SAC1C,EAAU,EAAM,KAAK,SAAW,GAAoB,EAAQ,OAAO,EACnE,EAAoC,CACxC,KAAM,OACN,GAAI,EAAM,KAAK,OACf,KAAM,EAAQ,KACd,SAAU,EAAM,KAAK,SACrB,cAAe,EAAQ,cACvB,oBAAqB,EAAM,KAAK,YAChC,MAAO,CACL,OAAQ,QACR,MAAO,EAAQ,MACf,WACA,UACA,MAAO,EAAM,KAAK,KACpB,EACA,KAAM,CAAE,QAAS,EAAQ,UAAW,IAAK,EAAQ,UAAW,UAAW,CAAK,CAC9E,EACM,EAAqB,CACzB,GAAI,EAAQ,GACZ,UAAW,EAAM,UACjB,UAAW,EAAM,KAAK,mBACtB,KAAM,OACN,OAAQ,EAAM,KAAK,OACnB,KAAM,EAAQ,KACd,MAAO,CACL,OAAQ,QACR,MAAO,EAAQ,MACf,QACA,SAAU,CACR,aAAc,EAAQ,SACtB,eAAgB,CAAE,SAAU,EAAM,KAAK,SAAU,MAAO,EAAM,KAAK,WAAY,EAC/E,SAAU,EAAQ,GACpB,EACA,KAAM,CAAE,MAAO,EAAQ,UAAW,IAAK,CAAK,CAC9C,CACF,EAGA,GAFA,EAAM,OAAO,CAAG,EAChB,EAAc,IAAI,CAAG,EACjB,EAAM,gBAAkB,OAAS,GAAsB,GAAgB,SAC3E,GAAI,CAAC,EAAK,WAAY,EAAM,CAAE,MAAK,CAAC,EAAG,CACrC,GAAI,GAAW,EAAe,EAAQ,KAAM,CAAO,EAAE,KAAK,EACxD,MAAM,EAAM,WAAW,IAClB,EACH,MAAO,CACL,OAAQ,YACR,MAAO,EAAQ,MACf,WACA,SACF,CACF,CAAC,EACH,MAAM,EAAM,gBAAgB,CAAI,EAChC,EAAG,MAAM,CAAK,EAEhB,SAGF,GAAI,EAAM,OAAS,qBAAsB,CACvC,EAAU,EACV,IAAM,EAAO,CACX,GAAI,EAAO,EAAM,EAAE,EACnB,UAAW,EAAM,UACjB,UAAW,EAAM,KAAK,mBACtB,KAAM,cACN,OAAQ,EAAM,KAAK,OACnB,SAAU,EAAM,KAAK,SACrB,KAAM,EAAM,KAAK,KACjB,OAAQ,EAAM,KAAK,MACrB,EACA,EAAK,cAAe,EAAM,CAAE,MAAK,CAAC,EAClC,SAEF,GAAI,EAAM,OAAS,sBAAuB,CACxC,GACE,EAAM,gBAAkB,MACxB,EAAM,KAAK,MAAM,UAAY,wDAC7B,CACA,EAAc,OACd,EAAkB,GAClB,SAEF,GAAI,GAAe,GAAsB,EAAe,SAIxD,GAHA,EAAU,EACV,EAAe,GACf,QAAQ,SAAW,EACf,CAAC,EAAK,QAAS,EAAM,CAAE,MAAO,EAAM,KAAK,KAAM,CAAC,EAAG,EAAG,MAAM,EAAM,KAAK,MAAM,OAAO,EACxF,SAEF,GAAI,EAAM,OAAS,2BAA4B,CAC7C,GAAI,EAAM,gBAAkB,OAAS,GAAmB,GAAsB,GAAgB,OAE9F,GADA,EAAU,EACN,CAAC,GAAgB,CAAC,GAGpB,GAFA,EAAe,GACf,QAAQ,SAAW,EACf,CAAC,EAAK,QAAS,EAAM,CAAE,MAAO,EAAM,KAAK,KAAM,CAAC,EAAG,EAAG,MAAM,EAAM,KAAK,MAAM,OAAO,EAE1F,OAEF,GAAI,EAAM,OAAS,gCAAiC,CAClD,GAAI,EAAM,gBAAkB,OAAS,GAAsB,GAAgB,OAC3E,GAAI,EAAM,KAAK,SAAW,QAAU,EAAa,QAAQ,SAAW,IACpE,GAAI,EAAM,KAAK,SAAW,QAAU,CAAC,EAAc,CACjD,EAAe,GACf,QAAQ,SAAW,EACnB,IAAM,EAAQ,CAAE,KAAM,UAAoB,QAAS,wBAAwB,EAAM,KAAK,QAAS,EAC/F,GAAI,CAAC,EAAK,QAAS,EAAM,CAAE,OAAM,CAAC,EAAG,EAAG,MAAM,EAAM,OAAO,EAE7D,OAEF,GAAI,EAAM,OAAS,8BAA+B,SAIhD,GAAoB,SAAY,CACpC,IAAM,EAAiC,CAAC,EACpC,EACJ,MAAO,GAAM,CACX,IAAM,EAAO,MAAM,EAAM,OAAO,QAAQ,KACtC,EACI,CAAE,UAAW,EAAM,UAAW,MAAO,IAAK,QAAO,EACjD,CAAE,UAAW,EAAM,UAAW,MAAO,IAAK,MAAO,MAAO,CAC9D,EACA,QAAW,KAAW,EAAK,KAAM,CAC/B,GAAI,EAAQ,KAAO,EAAW,MAAO,CAAE,MAAO,GAAM,SAAU,EAAS,WAAW,CAAE,EACpF,EAAS,KAAK,CAAO,EAGvB,GADA,EAAS,EAAK,OAAO,MAAQ,OACzB,CAAC,EAAQ,MAAO,CAAE,MAAO,GAAO,SAAU,CAAC,CAAE,IAI/C,GAAY,SAAY,CAC5B,IAAM,EAAY,MAAM,GAAkB,EAC1C,QAAW,KAAW,EAAU,SAAU,CACxC,GAAI,EAAQ,OAAS,YAAa,SAClC,IAAM,EAAY,EAAQ,KAAK,WAAa,EAAQ,KAAK,QACrD,EAAc,EACd,EAAmB,EACvB,QAAW,KAAQ,EAAQ,QAAS,CAClC,GAAI,EAAK,OAAS,OAAQ,CACxB,IAAM,EAAU,IACV,EAAM,EAAW,EAAQ,GAAI,CAAO,EACpC,EAAW,EAAa,IAAI,CAAG,GAAK,GAC1C,GAAI,IAAa,EAAK,MAAQ,CAAC,EAAK,KAAK,WAAW,CAAQ,EAAG,SAC/D,IAAM,EAAO,EAAK,KAAK,MAAM,EAAS,MAAM,EAC5C,EACE,CACE,GAAI,EAAgB,EAAQ,GAAI,QAAQ,GAAS,EACjD,UAAW,EAAM,UACjB,UAAW,EAAQ,GACnB,KAAM,OACN,OACA,KAAM,CAAE,MAAO,EAAQ,KAAK,QAAS,IAAK,CAAU,CACtD,EACA,CACF,EACA,EAAa,IAAI,EAAK,EAAK,IAAI,EAC/B,SAEF,GAAI,EAAK,OAAS,YAAa,CAC7B,IAAM,EAAU,IAChB,GAAI,CAAC,EAAM,SAAU,SACrB,IAAM,EAAM,EAAW,EAAQ,GAAI,CAAO,EACpC,EAAW,EAAkB,IAAI,CAAG,GAAK,GAC/C,GAAI,IAAa,EAAK,MAAQ,CAAC,EAAK,KAAK,WAAW,CAAQ,EAAG,SAC/D,IAAM,EAAO,EAAK,KAAK,MAAM,EAAS,MAAM,EACtC,GAAO,CACX,GAAI,EAAgB,EAAQ,GAAI,aAAa,GAAS,EACtD,UAAW,EAAM,UACjB,UAAW,EAAQ,GACnB,KAAM,YACN,OACA,SAAU,EAAK,MACf,KAAM,CAAE,MAAO,EAAQ,KAAK,QAAS,IAAK,CAAU,CACtD,EACA,EAAkB,IAAI,EAAK,EAAK,IAAI,EACpC,EAAe,GAAM,CAAS,EAC9B,SAGF,IAAM,EAAM,EAAQ,EAAQ,GAAI,EAAK,EAAE,EACvC,GAAI,EAAc,IAAI,CAAG,GAAK,EAAK,MAAM,SAAW,aAAe,EAAK,MAAM,SAAW,UAAW,SACpG,IAAM,EAAqB,CACzB,GAAI,EAAgB,EAAQ,GAAI,QAAQ,EAAK,IAAI,EACjD,UAAW,EAAM,UACjB,UAAW,EAAQ,GACnB,KAAM,OACN,OAAQ,EAAK,GACb,KAAM,EAAK,KACX,MACE,EAAK,MAAM,SAAW,YAClB,CACE,OAAQ,YACR,MAAO,EAAK,MAAM,MAClB,OAAQ,EAAe,EAAK,KAAM,EAAK,MAAM,OAAO,EACpD,MAAO,EAAK,KACZ,SAAU,CAAE,SAAU,EAAK,MAAM,SAAU,QAAS,EAAK,MAAM,OAAQ,EACvE,KAAM,CAAE,MAAO,EAAK,KAAK,KAAO,EAAK,KAAK,QAAS,IAAK,EAAK,KAAK,WAAa,CAAU,CAC3F,EACA,CACE,OAAQ,QACR,MAAO,EAAK,MAAM,MAClB,MAAO,EAAK,MAAM,MAAM,QACxB,SAAU,CAAE,SAAU,EAAK,MAAM,SAAU,QAAS,EAAK,MAAM,OAAQ,EACvE,KAAM,CAAE,MAAO,EAAK,KAAK,KAAO,EAAK,KAAK,QAAS,IAAK,EAAK,KAAK,WAAa,CAAU,CAC3F,CACR,EAEA,GADA,EAAc,IAAI,CAAG,EACjB,EAAK,WAAY,EAAW,CAAE,MAAK,CAAC,EAAG,SAC3C,GAAI,EAAK,MAAM,SAAW,YAAa,CACrC,MAAM,EAAM,WAAW,CAAI,EAC3B,SAEF,GAAI,EAAK,MAAM,SAAW,EAAe,EAAK,KAAM,EAAK,MAAM,OAAO,EAAE,KAAK,EAC3E,MAAM,EAAM,WAAW,IAClB,EACH,MAAO,CACL,OAAQ,YACR,MAAO,EAAK,MAAM,MAClB,SAAU,EAAK,MAAM,SACrB,QAAS,EAAK,MAAM,OACtB,CACF,CAAC,EAEH,MAAM,EAAM,gBAAgB,CAAI,EAChC,EAAG,MAAM,EAAK,MAAM,MAAM,OAAO,EAGnC,GAAI,EAAQ,OAAS,CAAC,GAGpB,GAFA,EAAe,GACf,QAAQ,SAAW,EACf,CAAC,EAAK,QAAS,EAAW,CAAE,MAAO,EAAQ,KAAM,CAAC,EAAG,EAAG,MAAM,EAAQ,MAAM,OAAO,GAG3F,MAAO,CACL,MAAO,EAAU,MACjB,UAAW,EAAU,SAAS,KAAK,CAAC,IAAY,EAAQ,OAAS,WAAW,CAC9E,GAGI,GAAY,IAAM,CACtB,GAAI,EAAa,QAAQ,KAAK,GAAG,EACjC,EAAc,GACd,QAAQ,SAAW,IACnB,GAAW,MAAM,EACZ,EAAM,OAAO,QAAQ,UAAU,CAAE,UAAW,EAAM,SAAU,CAAC,EAAE,MAAM,IAAM,EAAE,GAEpF,QAAQ,GAAG,SAAU,EAAS,EAE9B,IAAI,EACJ,GAAI,CACF,GAAI,EAAM,MACR,MAAM,EAAM,OAAO,QAAQ,YAAY,CAAE,UAAW,EAAM,UAAW,MAAO,EAAM,KAAM,CAAC,EAE3F,IAAM,EAAW,EAAM,MACnB,CAAE,WAAY,EAAM,MAAM,WAAY,GAAI,EAAM,MAAM,QAAS,QAAS,EAAM,OAAQ,EACtF,EAAM,QACJ,MAAM,EAAM,OAAO,QAChB,IAAI,CAAE,UAAW,EAAM,SAAU,CAAC,EAClC,KAAK,CAAC,IAAW,EAAO,KAAK,EAC7B,KAAK,MAAO,IAAU,CACrB,GAAI,EAAO,MAAO,IAAK,EAAO,QAAS,EAAM,OAAQ,EAErD,IAAM,GADS,MAAM,EAAM,OAAO,MAAM,QAAQ,GACxB,KACxB,OAAO,EAAW,CAAE,WAAY,EAAS,WAAY,GAAI,EAAS,GAAI,QAAS,EAAM,OAAQ,EAAI,OAClG,EACH,OACN,GAAI,EAAM,SAAW,CAAC,EAAU,MAAU,MAAM,kDAAkD,EAClG,GAAI,EACF,MAAM,EAAM,OAAO,QAAQ,YAAY,CAAE,UAAW,EAAM,UAAW,MAAO,CAAS,CAAC,EAGxF,IAAM,EAAW,MAAM,QAAQ,IAAI,EAAM,MAAM,IAAI,EAAW,CAAC,EAC/D,GAAI,EAAa,OACjB,EAAY,GACZ,EAAY,GAAQ,EACpB,EAAY,IAAI,gBAChB,IAAM,EAAW,MAAM,EAAM,OAAO,QACjC,OACC,CACE,UAAW,EAAM,UACjB,GAAI,EACJ,KAAM,CAAC,EAAM,QAAS,GAAG,EAAS,QAAQ,CAAC,IAAU,EAAK,KAAO,CAAC,EAAK,IAAI,EAAI,CAAC,CAAE,CAAC,EAAE,KAAK;AAAA;AAAA,CAAM,EAChG,MAAO,EAAS,QAAQ,CAAC,IAAU,EAAK,WAAa,CAAC,EAAK,UAAU,EAAI,CAAC,CAAE,EAC5E,SAAU,OACZ,EACA,CAAE,OAAQ,EAAU,MAAO,CAC7B,EACC,MAAM,MAAO,IAAU,CACtB,GAAI,EACF,MAAM,EAAM,OAAO,QAAQ,UAAU,CAAE,UAAW,EAAM,SAAU,CAAC,EAAE,MAAM,IAAM,EAAE,EAIrF,GAFA,EAAW,MAAM,EACjB,MAAM,GAAW,MAAM,IAAM,EAAE,EAC3B,GAAe,EAAc,OACjC,MAAM,EACP,EAEH,GADA,EAAY,OACR,CAAC,EAAU,OACf,GAAI,EAAa,MAAM,EAAM,OAAO,QAAQ,UAAU,CAAE,UAAW,EAAM,SAAU,CAAC,EAAE,MAAM,IAAM,EAAE,EAEpG,IAAO,EAAa,EAAO,GAAW,MAAM,QAAQ,IAAI,CACtD,EAAM,OAAO,WAAW,KAAK,CAAE,UAAW,EAAM,SAAU,CAAC,EAAE,MAAM,IAAG,CAAG,OAAS,EAClF,EAAM,OAAO,KAAK,KAAK,CAAE,UAAW,EAAM,SAAU,CAAC,EAAE,MAAM,IAAG,CAAG,OAAS,EAC5E,EAAM,SACF,QAAQ,QAAQ,MAAS,EACzB,EAAM,OAAO,KAAK,QACf,KAAK,CACJ,SAAU,CAAE,UAAW,EAAM,SAAS,UAAW,UAAW,EAAM,SAAS,WAAY,CACzF,CAAC,EACA,MAAM,IAAG,CAAG,OAAS,CAC9B,CAAC,EAQD,GAPA,MAAM,QAAQ,IAAI,CAChB,IAAI,GAAe,CAAC,GAAG,IAAI,CAAe,EAC1C,IAAI,GAAS,CAAC,GAAG,IAAI,CAAU,EAC/B,GAAI,GAAW,GAAa,EAAQ,SAAU,EAAM,QAAQ,EACxD,EAAQ,KAAK,OAAO,CAAC,IAAS,EAAK,YAAc,CAAsB,EAAE,IAAI,CAAU,EACvF,CAAC,CACP,CAAC,EACG,EAAM,gBAAkB,KAAM,CAChC,MAAM,EACN,OAGF,IAAM,EAAU,EAAM,OAAO,QAAQ,KAAK,CAAE,UAAW,EAAM,SAAU,CAAC,EACxE,MAAM,QAAQ,KAAK,CAAC,EAAS,EAAU,KAAK,IAAM,CAAO,CAAC,CAAC,EAC3D,EAAa,GACb,IAAM,EAAY,MAAM,GAAU,EAClC,GACE,CAAC,EAAU,WACX,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,EAED,MAAM,EAER,GAAI,CAAC,EAAU,OAAS,CAAC,GAAe,CAAC,GAAsB,CAAC,GAAiB,CAAC,EAAc,CAC9F,IAAM,EAAQ,GAAqB,CAAE,KAAM,UAAW,QAAS,yBAA0B,EAGzF,GAFA,EAAe,GACf,QAAQ,SAAW,EACf,CAAC,EAAK,QAAS,KAAK,IAAI,EAAG,CAAE,OAAM,CAAC,EAAG,EAAG,MAAM,EAAM,OAAO,UAEnE,CAGA,GAFA,QAAQ,IAAI,SAAU,EAAS,EAC/B,EAAW,MAAM,EACb,EAAM,gBAAkB,KAAM,MAAM,EAAO,SAAS,MAAS,EAAE,MAAM,IAAM,EAAE,EAC5E,KAAK,EAAO,SAAS,MAAS,EAAE,MAAM,IAAM,EAAE,GAIvD,SAAS,EAAY,CAAC,EAA+B,EAAoB,CACvE,MAAO,CAAC,CAAC,GAAQ,EAAK,YAAc,EAAM,WAAa,EAAK,cAAgB,EAAM,YAGpF,SAAS,EAAkB,CAAC,EAA+E,CACzG,GAAI,CAAC,EAAU,MAAO,CAAC,EACvB,MAAO,CACL,CACE,QAAS,CACP,uBAAwB,mBAAmB,EAAS,SAAS,KACzD,EAAS,YAAc,CAAE,uBAAwB,EAAS,WAAY,EAAI,CAAC,CACjF,CACF,CACF,EAGF,SAAS,EAAkB,CAAC,EAAgB,CAC1C,MAAO,CAAC,CAAC,GAAS,OAAO,IAAU,UAAY,QAAQ,IAAI,EAAO,MAAM,IAAM,0BAGhF,SAAS,CAAM,CAAC,EAAiB,CAC/B,MAAO,OAAO,EAAQ,QAAQ,QAAS,EAAE,IAG3C,SAAS,CAAO,CAAC,EAAmB,EAAgB,CAClD,MAAO,GAAG,QAAkB,IAG9B,SAAS,CAAU,CAAC,EAAmB,EAAiB,CACtD,MAAO,GAAG,QAAkB,IAG9B,SAAS,CAAe,CAAC,EAAmB,EAAc,CACxD,MAAO,OAAO,EAAU,QAAQ,QAAS,EAAE,KAAK,IAGlD,SAAS,EAAY,CAAC,EAIR,CACZ,MAAO,CACL,GAAI,EAAO,EAAM,EAAE,EACnB,UAAW,GAAS,EAAM,OAAO,EACjC,mBAAoB,EAAM,KAAK,mBAC/B,KAAM,OACN,MAAO,CAAC,EACR,SAAU,CAAC,EACX,QAAS,CAAC,CACZ,EAGF,SAAS,EAAQ,CAAC,EAAgB,CAChC,GAAI,OAAO,IAAU,SAAU,OAAO,EACtC,GAAI,OAAO,IAAU,SAAU,OAAO,IAAI,KAAK,CAAK,EAAE,QAAQ,EAC9D,OAAO,KAAK,IAAI,EAGlB,eAAe,EAAW,CAAC,EAAY,CACrC,GAAI,EAAK,OAAS,aAIhB,MAAO,CAAE,WAAY,CAAE,IAHX,EAAK,IAAI,WAAW,OAAO,EACnC,EAAK,IACL,QAAQ,EAAK,gBAAgB,MAAM,GAAS,IAAI,IAAI,EAAK,GAAG,CAAC,GAAG,SAAS,QAAQ,IACzD,KAAM,EAAK,QAAS,CAAE,EAEpD,IAAM,EAAU,EAAK,IAAI,WAAW,OAAO,EACvC,OAAO,KAAK,EAAK,IAAI,MAAM,EAAK,IAAI,QAAQ,GAAG,EAAI,CAAC,EAAG,QAAQ,EAAE,SAAS,MAAM,EAChF,MAAM,GAAS,IAAI,IAAI,EAAK,GAAG,EAAG,MAAM,EAC5C,MAAO,CAAE,KAAM,eAAe,EAAK;AAAA,EAAe;AAAA,QAAmB,EDjwBvE,MAAM,UAAuB,KAAM,CAGtB,UAFX,WAAW,CACT,EACS,EACT,CACA,MAAM,CAAO,EAFJ,iBAIb,CAEA,IAAM,GAAwB,SAEvB,SAAS,EAAiB,CAAC,EAAwB,CACxD,OAAO,GAA6B,EAAO,CAAC,CAAC,EAIxC,SAAS,EAA4B,CAAC,EAAwB,EAA2B,CAC9F,OAAO,GAAI,EAAO,CAAO,EAAE,MAAM,CAAC,IAAU,EAAe,EAAO,GAAa,CAAK,CAAC,CAAC,EAGxF,eAAe,EAAG,CAAC,EAAwB,EAA2B,CACpE,GAAI,EAAM,MAAQ,CAAC,EAAM,UAAY,CAAC,EAAM,QAAS,EAAK,yCAAyC,EACnG,IAAM,EAAO,EAAQ,MAAQ,QAAQ,IAAI,KAAO,QAAQ,IAAI,EACtD,EAAQ,GAAe,CAAI,EAC3B,EAAY,EAAQ,mBAAqB,OAAa,EAAQ,WAAa,EAC3E,EAAU,GAAW,GAAc,EAAM,OAAO,EAAG,QAAQ,MAAM,MAAQ,OAAY,MAAM,GAAU,CAAC,EAC5G,GAAI,CAAC,GAAS,KAAK,EAAG,EAAK,4BAA4B,EACvD,IAAM,EAAQ,MAAM,QAAQ,IAAI,EAAM,KAAK,IAAI,CAAC,IAAS,GAAY,EAAM,EAAM,CAAO,CAAC,CAAC,EAE1F,OAAO,GAAQ,EADE,CAAE,YAAW,UAAS,OAAM,EACb,EAAM,OAAO,SAAU,CAAO,EAGhE,eAAe,EAAO,CAAC,EAAwB,EAAoB,EAAoB,EAA2B,CAChH,IAAM,EAAS,GAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,GAAQ,QAAQ,CAAQ,CAAE,CAAC,EACpF,EAAW,GAAc,EAAM,KAAK,EACpC,EAAS,MAAM,GAAqB,CACxC,SACA,SAAU,EAAS,UAAY,CAAE,UAAW,EAAS,SAAU,EAAI,OACnE,SAAU,EAAM,SAChB,QAAS,EAAM,QACf,KAAM,EAAM,KACZ,MAAO,EACH,CAAE,WAAY,EAAS,MAAM,WAAY,GAAI,EAAS,MAAM,QAAS,QAAS,EAAS,OAAQ,EAC/F,OACJ,MAAO,EAAM,MACb,QAAS,MAAO,IAAS,CACvB,IAAM,EACJ,EAAK,QACJ,EAAQ,QACL,MAAM,EAAO,MACV,QAAQ,CAAE,SAAU,CAAE,UAAW,EAAK,SAAS,UAAW,UAAW,EAAK,SAAS,WAAY,CAAE,CAAC,EAClG,KAAK,CAAC,IAAW,EAAO,IAAI,EAC/B,QACA,EAAQ,EACV,CACE,WAAY,EAAS,WACrB,GAAI,EAAS,GACb,QAAS,EAAQ,UAAY,YAAa,EAAW,EAAS,QAAU,OAC1E,EACA,OACJ,IAAK,EAAQ,SAAW,GAAU,UAAY,CAAC,EAC7C,MAAM,IAAI,EAAe,mDAAoD,EAAK,SAAS,EAAE,EAC/F,MAAO,CAAE,QAAO,MAAO,EAAK,KAAM,EAEtC,CAAC,EAAE,MAAM,CAAC,IAAU,CAClB,GAAI,EAAE,aAAiB,GAAiB,MAAM,EAC9C,EAAe,EAAO,EAAM,QAAS,EAAM,SAAS,EACpD,OACD,EACD,GAAI,CAAC,EAAQ,OACb,IAAM,EAAQ,EAAO,MAAQ,CAAE,WAAY,EAAO,MAAM,WAAY,QAAS,EAAO,MAAM,EAAG,EAAI,OAC3F,EAAU,EAAO,OAAO,QAC9B,GAAI,CAAC,EAAO,QAAU,EAAM,QAAU,OACpC,MAAM,EAAO,QAAQ,OAAO,CAC1B,UAAW,EAAO,QAAQ,GAC1B,MAAO,EAAM,OAAS,EAAS,QAAQ,MAAM,EAAG,EAAE,GAAK,EAAS,QAAQ,OAAS,GAAK,MAAQ,GAChG,CAAC,EAGH,MAAM,GAAwB,CAC5B,SACA,UAAW,EAAO,QAAQ,GAC1B,SAAU,EAAO,SACjB,QAAS,EAAS,QAClB,MAAO,EAAS,MAChB,MAAO,EAAO,MACd,QACA,UACA,SAAU,EAAM,UAAY,GAC5B,OAAQ,EAAM,OACd,KAAM,EAAM,MAAQ,GACpB,SAAU,EAAQ,UAAY,GAC9B,cAAe,EAAQ,cACvB,WAAY,CAAC,IAAS,GAAW,EAAM,EAAO,SAAS,SAAS,EAChE,gBAAiB,CAAC,IAAS,GAAgB,EAAM,EAAO,SAAS,SAAS,CAC5E,CAAC,EAAE,MAAM,CAAC,IAAU,EAAe,EAAO,GAAa,CAAK,EAAG,EAAO,QAAQ,EAAE,CAAC,EAG5E,SAAS,EAAU,CAAC,EAA6B,EAA2B,CACjF,GAAI,CAAC,EAAS,OAAO,GAAS,OAC9B,GAAI,CAAC,EAAO,OAAO,EACnB,OAAO,EAAU;AAAA,EAAO,EAG1B,SAAS,EAAa,CAAC,EAAmB,CAExC,OADc,EAAQ,IAAI,CAAC,IAAU,EAAK,SAAS,GAAG,EAAI,IAAI,EAAK,QAAQ,KAAM,MAAK,KAAO,CAAK,EAAE,KAAK,GAAG,GAC5F,OAGlB,SAAS,EAAc,CAAC,EAAc,CACpC,GAAI,CAEF,OADA,QAAQ,MAAM,CAAI,EACX,QAAQ,IAAI,EACnB,KAAM,CACN,EAAK,iCAAiC,GAAM,GAIzC,SAAS,EAAa,CAAC,EAAgB,CAC5C,IAAM,EAAM,GAAwB,CAAK,EACzC,GAAI,CAAC,EAAK,OACV,MAAO,CACL,MAAO,CAAE,WAAY,EAAI,WAAY,QAAS,EAAI,EAAG,EACrD,QAAS,EAAI,OACf,EAGF,eAAe,EAAW,CAAC,EAAe,EAAmB,EAA8C,CACzG,IAAM,EAAO,GAAK,QAAQ,EAAW,CAAK,EACpC,EAAS,MAAM,GAAK,EAAM,GAAG,EAAE,MAAM,IAAM,EAAK,mBAAmB,GAAO,CAAC,EACjF,GAAI,CACF,IAAM,EAAO,MAAM,EAAO,KAAK,EAC/B,GAAI,EAAQ,gBAAkB,MAAQ,EAAQ,UAAY,EAAK,YAAY,EACzE,EAAK,8DAA8D,GAAO,EAC5E,GAAI,CAAC,EAAK,OAAO,GAAK,EAAK,KAAO,GAChC,EAAK,wEAAwE,GAAO,EACtF,IAAM,EAAU,OAAO,MAAM,OAAO,EAAK,IAAI,CAAC,EAC1C,EAAS,EACb,MAAO,EAAS,EAAQ,OAAQ,CAC9B,IAAM,EAAO,MAAM,EAAO,KAAK,EAAS,EAAQ,EAAQ,OAAS,EAAQ,CAAM,EAC/E,GAAI,EAAK,YAAc,EAAG,MAC1B,GAAU,EAAK,UAEjB,IAAM,EAAQ,EAAQ,SAAS,EAAG,CAAM,EAClC,EAAW,GAAO,SAAS,CAAI,EAC/B,EAAO,EAAM,SAAS,MAAM,EAC5B,EACJ,EAAS,WAAW,QAAQ,GAAK,IAAa,kBAC1C,EACA,CAAC,GAAgB,CAAK,GAAK,OAAO,KAAK,EAAM,MAAM,EAAE,OAAO,CAAK,EAC/D,aACA,EACR,MAAO,CACL,IAAK,QAAQ,YAAe,EAAM,SAAS,QAAQ,IACnD,SAAU,GAAK,SAAS,CAAI,EAC5B,MACF,SACA,CACA,MAAM,EAAO,MAAM,GAIvB,SAAS,EAAe,CAAC,EAAmB,CAC1C,GAAI,EAAM,SAAW,EAAG,MAAO,GAC/B,GAAI,EAAM,SAAS,CAAC,EAAG,MAAO,GAC9B,OAAO,EAAM,OAAO,CAAC,EAAO,IAAS,EAAQ,OAAO,EAAO,GAAM,EAAO,IAAM,EAAO,EAAG,EAAG,CAAC,EAAI,EAAM,OAAS,IAGjH,eAAe,EAAU,CAAC,EAAmC,EAAmB,CAC9E,IAAM,EAAO,EAAe,EAAM,CAAS,EAC3C,GAAI,EAAK,OAAS,QAAS,CAGzB,GAFA,EAAG,MAAM,EACT,EAAG,QAAQ,EAAG,MAAM,YAAc,EAAK,KAAM,EAAG,MAAM,YAAc,EAAK,KAAK,EAC1E,EAAK,MAAM,KAAK,EAAG,EAAG,QAAQ,EAAK,IAAI,EAC3C,EAAG,MAAM,EACT,OAEF,EAAG,QACD,EAAG,MAAM,YAAc,EAAK,KAC5B,EAAG,MAAM,YAAc,EAAK,MAC5B,EAAK,YAAc,EAAG,MAAM,SAAW,EAAK,YAAc,EAAG,MAAM,YAAc,EACnF,EAGF,eAAe,EAAe,CAAC,EAAmC,EAAmB,CACnF,IAAM,EAAO,EAAe,EAAM,CAAS,EAC3C,EAAG,QAAQ,EAAG,MAAM,YAAc,SAAI,EAAG,MAAM,YAAc,GAAG,EAAK,cAAc,EAGrF,SAAS,EAAY,CAAC,EAAgB,CACpC,GAAI,aAAiB,MAAO,OAAO,EAAM,QACzC,GAAI,OAAO,IAAU,UAAY,IAAU,MAAQ,YAAa,GAAS,OAAO,EAAM,UAAY,SAChG,OAAO,EAAM,QACf,OAAO,OAAO,CAAK,EAId,SAAS,CAAc,CAAC,EAAwC,EAAiB,EAAoB,CAE1G,GADA,QAAQ,SAAW,EACf,EAAM,SAAW,OAAQ,CAC3B,QAAQ,OAAO,MACb,KAAK,UAAU,CACb,KAAM,QACN,UAAW,KAAK,IAAI,EACpB,UAAW,GAAa,GACxB,MAAO,CAAE,KAAM,UAAW,SAAQ,CACpC,CAAC,EAAI;AAAA,CACP,EACA,OAEF,EAAG,MAAM,CAAO,EAGlB,SAAS,CAAI,CAAC,EAAwB,CACpC,MAAU,MAAM,CAAO", | ||
| "debugId": "3E4CC90527D27EA764756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../util/src/bom.ts", "../util/src/patch.ts"], | ||
| "sourcesContent": [ | ||
| "export * as Bom from \"./bom.js\"\n\nimport { Effect } from \"effect\"\nimport { FSUtil } from \"./fs-util.js\"\n\nconst code = 0xfeff\nconst value = String.fromCharCode(code)\n\nexport function split(text: string) {\n const stripped = text.replace(/^\\uFEFF+/, \"\")\n return { bom: stripped.length !== text.length, text: stripped }\n}\n\nexport function join(text: string, bom: boolean) {\n const stripped = split(text).text\n return bom ? value + stripped : stripped\n}\n\nexport function has(content: Uint8Array) {\n return content[0] === 0xef && content[1] === 0xbb && content[2] === 0xbf\n}\n\nexport const readFile = Effect.fn(\"Bom.readFile\")(function* (fs: FSUtil.Interface, filepath: string) {\n return split(decode(yield* fs.readFile(filepath)))\n})\n\nexport const syncFile = Effect.fn(\"Bom.syncFile\")(function* (fs: FSUtil.Interface, filepath: string, bom: boolean) {\n const decoded = decode(yield* fs.readFile(filepath))\n const current = split(decoded)\n const canonical = join(current.text, bom)\n if (decoded === canonical) return current.text\n yield* fs.writeWithDirs(filepath, canonical)\n return current.text\n})\n\nfunction decode(content: Uint8Array) {\n return new TextDecoder(\"utf-8\", { ignoreBOM: true }).decode(content)\n}\n", | ||
| "export * as Patch from \"./patch.js\"\n\nimport { Result, Schema } from \"effect\"\nimport { Bom } from \"./bom.js\"\n\nexport class BoundaryError extends Schema.TaggedErrorClass<BoundaryError>()(\"Patch.BoundaryError\", {\n boundary: Schema.Literals([\"first\", \"last\"]),\n}) {\n override get message() {\n return `The ${this.boundary} line of the patch must be '${this.boundary === \"first\" ? \"*** Begin Patch\" : \"*** End Patch\"}'`\n }\n}\n\nexport class InvalidHunkError extends Schema.TaggedErrorClass<InvalidHunkError>()(\"Patch.InvalidHunkError\", {\n line: Schema.String,\n lineNumber: Schema.Number,\n reason: Schema.optional(Schema.String),\n}) {\n override get message() {\n if (this.reason) return `Invalid hunk at line ${this.lineNumber}: ${this.reason}`\n return `Invalid hunk at line ${this.lineNumber}: '${this.line}' is not a valid hunk header. Valid hunk headers: '*** Add File: {path}', '*** Delete File: {path}', '*** Update File: {path}'`\n }\n}\n\nexport type ParseError = BoundaryError | InvalidHunkError\n\nexport type Hunk =\n | { readonly type: \"add\"; readonly path: string; readonly contents: string }\n | { readonly type: \"delete\"; readonly path: string }\n | {\n readonly type: \"update\"\n readonly path: string\n readonly movePath?: string\n readonly chunks: ReadonlyArray<UpdateFileChunk>\n }\n\nexport interface UpdateFileChunk {\n readonly oldLines: ReadonlyArray<string>\n readonly newLines: ReadonlyArray<string>\n readonly changeContext?: string\n readonly endOfFile?: boolean\n}\n\nexport interface FileUpdate {\n readonly content: string\n readonly bom: boolean\n}\n\nexport function parse(patchText: string): Result.Result<ReadonlyArray<Hunk>, ParseError> {\n const lines = stripHeredoc(patchText.trim())\n .split(\"\\n\")\n .map((line) => (line.endsWith(\"\\r\") ? line.slice(0, -1) : line))\n const begin = lines[0]?.trim() === \"*** Begin Patch\" ? 0 : -1\n const end = lines.at(-1)?.trim() === \"*** End Patch\" ? lines.length - 1 : -1\n if (begin === -1) return Result.fail(new BoundaryError({ boundary: \"first\" }))\n if (end === -1 || begin >= end) return Result.fail(new BoundaryError({ boundary: \"last\" }))\n\n const hunks: Hunk[] = []\n let index = begin + 1\n while (index < end) {\n const line = lines[index]!\n const header = line.trim()\n if (\n index === begin + 1 &&\n header.startsWith(\"*** Environment ID:\") &&\n header.slice(\"*** Environment ID:\".length).trim()\n ) {\n index++\n continue\n }\n if (header.startsWith(\"*** Add File: \")) {\n const path = header.slice(\"*** Add File: \".length).trim()\n const parsed = parseAdd(lines, index + 1, end, path)\n if (\"error\" in parsed) return Result.fail(parsed.error)\n hunks.push({ type: \"add\", path, contents: parsed.content })\n index = parsed.next\n continue\n }\n if (header.startsWith(\"*** Delete File: \")) {\n const path = header.slice(\"*** Delete File: \".length).trim()\n const next = lines[index + 1]?.trim()\n if (index + 1 < end && next !== undefined && !isBoundary(next)) {\n if (next.startsWith(\"*** \")) {\n return Result.fail(new InvalidHunkError({ line: next, lineNumber: index + 2 }))\n }\n return Result.fail(\n new InvalidHunkError({\n line: next,\n lineNumber: index + 2,\n reason: `Unexpected line after Delete File '${path}': '${next}'. Delete hunks do not contain body lines`,\n }),\n )\n }\n hunks.push({ type: \"delete\", path })\n index++\n continue\n }\n if (header.startsWith(\"*** Update File: \")) {\n const path = header.slice(\"*** Update File: \".length).trim()\n let next = index + 1\n let movePath: string | undefined\n while (lines[next]?.trimEnd() === \"*** End of File\") next++\n const move = lines[next]?.trimEnd()\n if (move === \"*** Move to:\" || move?.startsWith(\"*** Move to: \")) {\n movePath = move.slice(\"*** Move to: \".length).trim()\n if (!movePath) {\n return Result.fail(\n new InvalidHunkError({\n line: lines[next]!.trim(),\n lineNumber: next + 1,\n reason: `Move destination for '${path}' must not be empty`,\n }),\n )\n }\n next++\n }\n const parsed = parseUpdate(lines, next, end, path, index)\n if (\"error\" in parsed) return Result.fail(parsed.error)\n hunks.push({ type: \"update\", path, movePath, chunks: parsed.chunks })\n index = parsed.next\n continue\n }\n return Result.fail(new InvalidHunkError({ line: header, lineNumber: index + 1 }))\n }\n return Result.succeed(hunks)\n}\n\nexport function derive(path: string, chunks: ReadonlyArray<UpdateFileChunk>, original: string): FileUpdate {\n const source = Bom.split(original)\n const lines = source.text.split(\"\\n\")\n if (lines.at(-1) === \"\") lines.pop()\n const replacements = computeReplacements(lines, path, chunks)\n const updated = [...lines]\n for (const [start, remove, insert] of replacements.toReversed()) updated.splice(start, remove, ...insert)\n if (updated.at(-1) !== \"\") updated.push(\"\")\n const next = Bom.split(updated.join(\"\\n\"))\n return { content: next.text, bom: source.bom || next.bom }\n}\n\nexport function joinBom(text: string, bom: boolean) {\n return Bom.join(text, bom)\n}\n\nfunction parseAdd(\n lines: ReadonlyArray<string>,\n start: number,\n end: number,\n path: string,\n): { content: string; next: number } | { error: InvalidHunkError } {\n const content: string[] = []\n let index = start\n while (index < end && !isBoundary(lines[index]!.trim())) {\n if (!lines[index]!.startsWith(\"+\")) {\n const line = lines[index]!.trim()\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: `Invalid Add File line for '${path}': expected a line starting with '+', got '${line}'`,\n }),\n }\n }\n content.push(lines[index]!.slice(1))\n index++\n }\n return { content: content.join(\"\\n\"), next: index }\n}\n\nfunction parseUpdate(\n lines: ReadonlyArray<string>,\n start: number,\n end: number,\n path: string,\n hunk: number,\n): { chunks: ReadonlyArray<UpdateFileChunk>; next: number } | { error: InvalidHunkError } {\n const chunks: Array<{\n oldLines: string[]\n newLines: string[]\n changeContext?: string\n endOfFile?: boolean\n }> = []\n let index = start\n let afterEndOfFile = false\n while (index < end) {\n const line = lines[index]!\n const updateLine = line.trimEnd()\n if (afterEndOfFile) {\n if (updateLine === \"\") {\n index++\n continue\n }\n if (updateLine === \"@@\" || updateLine.startsWith(\"@@ \")) afterEndOfFile = false\n else if (isBoundary(updateLine)) break\n else {\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: `Expected update hunk to start with a @@ context marker, got: '${line}'`,\n }),\n }\n }\n }\n if (updateLine === \"*** End of File\") {\n const chunk = chunks.at(-1)\n if (chunk && chunk.oldLines.length === 0 && chunk.newLines.length === 0) {\n return {\n error: new InvalidHunkError({\n line: updateLine,\n lineNumber: index + 1,\n reason: \"Update hunk does not contain any lines\",\n }),\n }\n }\n if (chunk) {\n chunk.endOfFile = true\n afterEndOfFile = true\n }\n index++\n continue\n }\n if (isBoundary(updateLine)) break\n if (updateLine === \"@@\" || updateLine.startsWith(\"@@ \")) {\n const previous = chunks.at(-1)\n if (previous && previous.oldLines.length === 0 && previous.newLines.length === 0) {\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: `Unexpected line found in update hunk: '${line}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n }),\n }\n }\n chunks.push({\n oldLines: [],\n newLines: [],\n changeContext: updateLine === \"@@\" ? undefined : updateLine.slice(\"@@ \".length),\n })\n index++\n continue\n }\n if (chunks.length === 0) chunks.push({ oldLines: [], newLines: [] })\n const chunk = chunks.at(-1)!\n if (line === \"\") {\n chunk.oldLines.push(\"\")\n chunk.newLines.push(\"\")\n index++\n continue\n }\n if (line.startsWith(\" \")) {\n chunk.oldLines.push(line.slice(1))\n chunk.newLines.push(line.slice(1))\n index++\n continue\n }\n if (line.startsWith(\"-\")) {\n chunk.oldLines.push(line.slice(1))\n index++\n continue\n }\n if (line.startsWith(\"+\")) {\n chunk.newLines.push(line.slice(1))\n index++\n continue\n }\n const populated = chunk.oldLines.length > 0 || chunk.newLines.length > 0\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: populated\n ? `Expected update hunk to start with a @@ context marker, got: '${line}'`\n : `Unexpected line found in update hunk: '${line}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n }),\n }\n }\n if (chunks.length === 0) {\n return {\n error: new InvalidHunkError({\n line: lines[hunk]!.trim(),\n lineNumber: hunk + 1,\n reason: `Update file hunk for path '${path}' is empty`,\n }),\n }\n }\n const last = chunks.at(-1)!\n if (last.oldLines.length === 0 && last.newLines.length === 0) {\n const line = lines[index]!.trim()\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason:\n line === \"*** End Patch\"\n ? \"Update hunk does not contain any lines\"\n : `Unexpected line found in update hunk: '${line}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n }),\n }\n }\n return { chunks, next: index }\n}\n\nfunction isBoundary(line: string) {\n return (\n line === \"*** End Patch\" ||\n line.startsWith(\"*** Add File: \") ||\n line.startsWith(\"*** Delete File: \") ||\n line.startsWith(\"*** Update File: \")\n )\n}\n\nfunction computeReplacements(lines: ReadonlyArray<string>, path: string, chunks: ReadonlyArray<UpdateFileChunk>) {\n const replacements: Array<readonly [start: number, remove: number, insert: ReadonlyArray<string>]> = []\n let lineIndex = 0\n for (const chunk of chunks) {\n if (chunk.changeContext) {\n const context = seek(lines, [chunk.changeContext], lineIndex)\n if (context === -1) throw new Error(`Failed to find context '${chunk.changeContext}' in ${path}`)\n lineIndex = context + 1\n }\n if (chunk.oldLines.length === 0) {\n replacements.push([lines.length, 0, chunk.newLines])\n continue\n }\n let oldLines = chunk.oldLines\n let newLines = chunk.newLines\n let found = seek(lines, oldLines, lineIndex, chunk.endOfFile)\n if (found === -1 && oldLines.at(-1) === \"\") {\n oldLines = oldLines.slice(0, -1)\n if (newLines.at(-1) === \"\") newLines = newLines.slice(0, -1)\n found = seek(lines, oldLines, lineIndex, chunk.endOfFile)\n }\n if (found === -1 && chunk.oldLines.every((line) => line === \"\")) {\n const expected =\n chunk.oldLines.length === 1 ? \"an expected blank line\" : `${chunk.oldLines.length} consecutive blank lines`\n throw new Error(`Failed to find ${expected} in ${path}`)\n }\n if (found === -1) throw new Error(`Failed to find expected lines in ${path}:\\n${chunk.oldLines.join(\"\\n\")}`)\n replacements.push([found, oldLines.length, newLines])\n lineIndex = found + oldLines.length\n }\n return replacements.toSorted((left, right) => left[0] - right[0])\n}\n\nfunction seek(lines: ReadonlyArray<string>, pattern: ReadonlyArray<string>, start: number, eof = false) {\n if (pattern.length === 0) return -1\n if (eof) {\n const offset = lines.length - pattern.length\n if (offset < start) return -1\n for (const compare of [exact, rstrip, trim, normalized]) {\n if (matches(lines, pattern, offset, compare)) return offset\n }\n return -1\n }\n for (const compare of [exact, rstrip, trim, normalized]) {\n for (let offset = start; offset <= lines.length - pattern.length; offset++) {\n if (matches(lines, pattern, offset, compare)) return offset\n }\n }\n return -1\n}\n\nfunction matches(\n lines: ReadonlyArray<string>,\n pattern: ReadonlyArray<string>,\n offset: number,\n compare: (left: string, right: string) => boolean,\n) {\n return pattern.every((line, index) => compare(lines[offset + index]!, line))\n}\n\nconst exact = (left: string, right: string) => left === right\nconst rstrip = (left: string, right: string) => left.trimEnd() === right.trimEnd()\nconst trim = (left: string, right: string) => left.trim() === right.trim()\nconst normalized = (left: string, right: string) => normalize(left.trim()) === normalize(right.trim())\nconst normalize = (value: string) =>\n value\n .replace(/[‘’‚‛]/g, \"'\")\n .replace(/[“”„‟]/g, '\"')\n .replace(/[‐‑‒–—―−]/g, \"-\")\n .replace(/[\\u00A0\\u2002-\\u200A\\u202F\\u205F\\u3000]/g, \" \")\nconst stripHeredoc = (input: string) => input.match(/^(?:cat\\s+)?<<(['\"]?)(\\w+)\\1\\s*\\n([\\s\\S]*?)\\n\\2\\s*$/)?.[3] ?? input\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "71F3FE087FEFB89B64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/unset.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.unset,\n Effect.fn(\"cli.service.unset\")(function* (input) {\n yield* ServiceConfig.unset(input.key)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";k0BAKA,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,WACnC,OAAO,QAAG,wBAAmB,OAAE,cAAU,MAAC,OAAO,MAC/C,WAAO,OAAc,WAAM,OAAM,QAAG,OACrC,CACH", | ||
| "debugId": "009ABB7F32AEB70264756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/api.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { Service, type Endpoint } from \"@opencode-ai/client/effect/service\"\nimport { ServerConnection } from \"../../services/server-connection\"\n\nconst methods = new Set([\"delete\", \"get\", \"head\", \"options\", \"patch\", \"post\", \"put\"])\n\ntype Operation = {\n operationId?: string\n}\n\ntype OpenApi = {\n paths?: Record<string, Record<string, Operation>>\n}\n\nexport default Runtime.handler(\n Commands.commands.api,\n Effect.fn(\"cli.api\")(function* (input) {\n const server = yield* ServerConnection.resolve({\n server: Option.getOrUndefined(input.server),\n standalone: input.standalone,\n mismatch: \"ignore\",\n })\n const endpoint = server.endpoint\n const params = Option.getOrElse(input.param, () => ({}))\n const request = yield* resolveRequest(endpoint, input.request, params)\n const headers = new Headers(Service.headers(endpoint))\n for (const header of input.header) {\n const index = header.indexOf(\":\")\n if (index < 1) return yield* Effect.fail(new Error(`Invalid header, expected name:value: ${header}`))\n headers.set(header.slice(0, index).trim(), header.slice(index + 1).trim())\n }\n const body = Option.getOrUndefined(input.data)\n if (body !== undefined && !headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\")\n\n const response = yield* Effect.tryPromise(() =>\n fetch(new URL(request.path, endpoint.url), {\n method: request.method,\n headers,\n body,\n }),\n )\n const output = yield* Effect.promise(() => response.text())\n if (output) process.stdout.write(output + (output.endsWith(EOL) ? \"\" : EOL))\n }),\n)\n\nexport function resolveOperation(spec: OpenApi, operationID: string, params: Record<string, string>) {\n for (const [path, operations] of Object.entries(spec.paths ?? {})) {\n for (const [method, operation] of Object.entries(operations)) {\n if (!methods.has(method) || operation.operationId !== operationID) continue\n return { method: method.toUpperCase(), path: interpolate(path, params) }\n }\n }\n throw new Error(`Operation not found: ${operationID}`)\n}\n\nexport function rawRequest(input: readonly string[]) {\n if (input.length !== 2 || !methods.has(input[0].toLowerCase()) || !input[1].startsWith(\"/\")) return\n return { method: input[0].toUpperCase(), path: input[1] }\n}\n\nfunction resolveRequest(endpoint: Endpoint, input: readonly string[], params: Record<string, string>) {\n const raw = rawRequest(input)\n if (raw) return Effect.succeed(raw)\n if (input.length !== 1) return Effect.fail(new Error(\"Expected an operation name or an HTTP method and path\"))\n return Effect.tryPromise(async () => {\n const response = await fetch(new URL(\"/openapi.json\", endpoint.url), { headers: Service.headers(endpoint) })\n if (!response.ok) throw new Error(`Failed to load OpenAPI document: HTTP ${response.status}`)\n return resolveOperation((await response.json()) as OpenApi, input[0], params)\n })\n}\n\nfunction interpolate(path: string, params: Record<string, string>) {\n const used = new Set<string>()\n const pathname = path.replaceAll(/\\{([^}]+)\\}/g, (_, name: string) => {\n const value = params[name]\n if (value === undefined) throw new Error(`Missing path parameter: ${name}`)\n used.add(name)\n return encodeURIComponent(value)\n })\n const query = new URLSearchParams(Object.entries(params).filter(([name]) => !used.has(name))).toString()\n return query ? `${pathname}?${query}` : pathname\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "F2D6BCD4F0E4487164756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/openrouter.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Schema } from \"effect\"\nimport { Route, type RouteDefaultsInput } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport { Protocol } from \"../route/protocol\"\nimport { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport { ProviderID, type CacheHint, type ModelID, type ProviderOptions } from \"../schema\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport * as OpenAICompatibleProfiles from \"./openai-compatible-profile\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport { newBreakpoints, ttlBucket } from \"../protocols/utils/cache\"\nimport { isRecord } from \"../protocols/shared\"\n\nexport const profile = OpenAICompatibleProfiles.profiles.openrouter\nexport const id = ProviderID.make(profile.provider)\nconst ADAPTER = \"openrouter\"\n\ntype OpenRouterString<Known extends string> = Known | (string & {})\n\nexport interface OpenRouterProviderRouting {\n readonly [key: string]: unknown\n readonly order?: ReadonlyArray<string>\n readonly allow_fallbacks?: boolean\n readonly require_parameters?: boolean\n readonly data_collection?: OpenRouterString<\"allow\" | \"deny\">\n readonly only?: ReadonlyArray<string>\n readonly ignore?: ReadonlyArray<string>\n readonly quantizations?: ReadonlyArray<string>\n readonly sort?: OpenRouterString<\"price\" | \"throughput\" | \"latency\">\n readonly max_price?: Readonly<{\n prompt?: number | string\n completion?: number | string\n image?: number | string\n audio?: number | string\n request?: number | string\n }>\n readonly zdr?: boolean\n}\n\nexport type OpenRouterPlugin =\n | Readonly<{\n id: \"web\"\n max_results?: number\n search_prompt?: string\n engine?: OpenRouterString<\"native\" | \"exa\">\n }>\n | Readonly<{ id: \"file-parser\"; max_files?: number; pdf?: { engine?: string } }>\n | Readonly<{ id: \"moderation\" }>\n | Readonly<{ id: \"response-healing\" }>\n | Readonly<{ id: \"auto-router\"; allowed_models?: ReadonlyArray<string> }>\n | Readonly<{ id: string & {}; [key: string]: unknown }>\n\nexport interface OpenRouterOptions {\n readonly [key: string]: unknown\n readonly debug?: Readonly<{ echo_upstream_body?: boolean }>\n readonly models?: ReadonlyArray<string>\n readonly plugins?: ReadonlyArray<OpenRouterPlugin>\n readonly promptCacheKey?: string\n readonly provider?: OpenRouterProviderRouting\n readonly reasoning?: Readonly<{\n enabled?: boolean\n exclude?: boolean\n effort?: OpenRouterString<\"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">\n max_tokens?: number\n }>\n readonly usage?: boolean | Readonly<{ include: boolean }>\n readonly user?: string\n readonly web_search_options?: Readonly<{\n max_results?: number\n search_prompt?: string\n engine?: OpenRouterString<\"native\" | \"exa\">\n }>\n}\n\nexport type OpenRouterProviderOptionsInput = ProviderOptions & {\n readonly openrouter?: OpenRouterOptions\n}\n\nexport type LanguageModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: OpenRouterProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly providerOptions?: OpenRouterProviderOptionsInput\n}\n\nconst OpenRouterBody = Schema.StructWithRest(Schema.Struct(OpenAIChat.bodyFields), [\n Schema.Record(Schema.String, Schema.Any),\n])\nexport type OpenRouterBody = Schema.Schema.Type<typeof OpenRouterBody>\n\nexport const protocol = Protocol.make({\n id: \"openrouter-chat\",\n body: {\n schema: OpenRouterBody,\n from: (request) =>\n OpenAIChat.fromRequest(request, { cacheControl: cacheControl() }).pipe(\n Effect.map((body) => {\n const sourceAssistants = request.messages.filter((message) => message.role === \"assistant\")\n let assistantIndex = 0\n const messages = body.messages.map((message) => {\n if (message.role !== \"assistant\") return message\n const source = sourceAssistants[assistantIndex++]\n const reasoning = source?.content\n .filter((part) => part.type === \"reasoning\")\n .map((part) => part.text)\n .join(\"\")\n const reasoningDetails = Array.isArray(message.reasoning_details) ? message.reasoning_details : undefined\n return {\n ...message,\n reasoning_content: undefined,\n reasoning_text: undefined,\n reasoning: reasoning && reasoningDetails && reasoningDetails.length > 0 ? reasoning : undefined,\n reasoning_details: reasoningDetails,\n }\n })\n return {\n ...body,\n messages,\n ...bodyOptions(request.providerOptions?.openrouter),\n } as OpenRouterBody\n }),\n ),\n },\n stream: OpenAIChat.protocol.stream,\n})\n\nconst cacheControl = () => {\n const breakpoints = newBreakpoints(4)\n return (cache: CacheHint | undefined) => {\n if (cache === undefined || breakpoints.remaining === 0) return undefined\n breakpoints.remaining -= 1\n return {\n type: \"ephemeral\" as const,\n ...(ttlBucket(cache.ttlSeconds) === \"1h\" ? { ttl: \"1h\" } : {}),\n }\n }\n}\n\nconst bodyOptions = (input: unknown) => {\n const openrouter = isRecord(input) ? input : {}\n const { usage, models, provider, plugins, web_search_options, debug, user, reasoning, promptCacheKey, ...options } =\n openrouter\n return {\n ...options,\n ...(usage === undefined || usage === true\n ? { usage: { include: true } }\n : usage === false\n ? { usage: { include: false } }\n : isRecord(usage)\n ? { usage }\n : {}),\n ...(Array.isArray(models) ? { models } : {}),\n ...(isRecord(provider) ? { provider } : {}),\n ...(Array.isArray(plugins) ? { plugins } : {}),\n ...(isRecord(web_search_options) ? { web_search_options } : {}),\n ...(isRecord(debug) ? { debug } : {}),\n ...(typeof user === \"string\" ? { user } : {}),\n ...(isRecord(reasoning) ? { reasoning } : {}),\n ...(typeof promptCacheKey === \"string\" ? { prompt_cache_key: promptCacheKey } : {}),\n }\n}\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: profile.provider,\n protocol,\n endpoint: Endpoint.path(\"/chat/completions\", { baseURL: profile.baseURL }),\n framing: Framing.sse,\n})\n\nexport const routes = [route]\n\nconst configuredRoute = (input: LanguageModelOptions) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return route.with({\n ...rest,\n endpoint: { baseURL: baseURL ?? profile.baseURL },\n auth: AuthOptions.bearer(input, \"OPENROUTER_API_KEY\"),\n })\n}\n\nexport const configure = (input: LanguageModelOptions = {}) => {\n const route = configuredRoute(input)\n return {\n id,\n model: (modelID: string | ModelID) => route.model<OpenRouterProviderOptionsInput>({ id: modelID }),\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, OpenRouterProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers,\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "01008026F8351C9464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/entity.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/column-common.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/column.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/table.utils.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/table.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/subquery.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/tracing-utils.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/tracing.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/view-common.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/sql/sql.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/sql/expressions/conditions.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/sql/expressions/select.js"], | ||
| "sourcesContent": [ | ||
| "//#region src/entity.ts\nconst entityKind = Symbol.for(\"drizzle:entityKind\");\nconst hasOwnEntityKind = Symbol.for(\"drizzle:hasOwnEntityKind\");\nfunction is(value, type) {\n\tif (!value || typeof value !== \"object\") return false;\n\tif (value instanceof type) return true;\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) throw new Error(`Class \"${type.name ?? \"<unknown>\"}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`);\n\tlet cls = Object.getPrototypeOf(value)?.constructor;\n\tif (cls) while (cls) {\n\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) return true;\n\t\tcls = Object.getPrototypeOf(cls);\n\t}\n\treturn false;\n}\n\n//#endregion\nexport { entityKind, hasOwnEntityKind, is };\n//# sourceMappingURL=entity.js.map", | ||
| "//#region src/column-common.ts\nconst OriginalColumn = Symbol.for(\"drizzle:OriginalColumn\");\n\n//#endregion\nexport { OriginalColumn };\n//# sourceMappingURL=column-common.js.map", | ||
| "import { entityKind } from \"./entity.js\";\nimport { OriginalColumn } from \"./column-common.js\";\n\n//#region src/column.ts\nconst noop = (v) => v;\nnoop.isNoop = true;\nvar Column = class {\n\tstatic [entityKind] = \"Column\";\n\t/** @internal */\n\tcodec;\n\tname;\n\tkeyAsName;\n\tprimary;\n\tnotNull;\n\tdefault;\n\tdefaultFn;\n\tonUpdateFn;\n\thasDefault;\n\tisUnique;\n\tuniqueName;\n\tuniqueType;\n\tdataType;\n\tcolumnType;\n\tenumValues = void 0;\n\tgenerated = void 0;\n\tgeneratedIdentity = void 0;\n\tlength;\n\tisLengthExact;\n\tisAlias;\n\t/** @internal */\n\tconfig;\n\t/** @internal */\n\ttable;\n\t/** @internal */\n\tonInit() {}\n\tconstructor(table, config) {\n\t\tthis.config = config;\n\t\tthis.onInit();\n\t\tthis.table = table;\n\t\tthis.name = config.name;\n\t\tthis.isAlias = false;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType;\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t\tthis.length = config[\"length\"];\n\t\tthis.isLengthExact = config[\"isLengthExact\"];\n\t}\n\tmapFromDriverValue = noop;\n\tmapToDriverValue = noop;\n\t/** @internal */\n\tpostBuild() {\n\t\treturn this;\n\t}\n\t/** @internal */\n\tshouldDisableInsert() {\n\t\treturn this.config.generated !== void 0 && this.config.generated.type !== \"byDefault\";\n\t}\n\t/** @internal */\n\t[OriginalColumn]() {\n\t\treturn this;\n\t}\n};\nfunction getColumnTable(column) {\n\treturn column.table;\n}\n\n//#endregion\nexport { Column, getColumnTable };\n//# sourceMappingURL=column.js.map", | ||
| "//#region src/table.utils.ts\n/** @internal */\nconst TableName = Symbol.for(\"drizzle:Name\");\n\n//#endregion\nexport { TableName };\n//# sourceMappingURL=table.utils.js.map", | ||
| "import { entityKind } from \"./entity.js\";\nimport { TableName } from \"./table.utils.js\";\n\n//#region src/table.ts\n/** @internal */\nconst TableSchema = Symbol.for(\"drizzle:Schema\");\n/** @internal */\nconst TableColumns = Symbol.for(\"drizzle:Columns\");\n/** @internal */\nconst ExtraConfigColumns = Symbol.for(\"drizzle:ExtraConfigColumns\");\n/** @internal */\nconst OriginalName = Symbol.for(\"drizzle:OriginalName\");\n/** @internal */\nconst BaseName = Symbol.for(\"drizzle:BaseName\");\n/** @internal */\nconst IsAlias = Symbol.for(\"drizzle:IsAlias\");\n/** @internal */\nconst ExtraConfigBuilder = Symbol.for(\"drizzle:ExtraConfigBuilder\");\nconst IsDrizzleTable = Symbol.for(\"drizzle:IsDrizzleTable\");\nvar Table = class {\n\tstatic [entityKind] = \"Table\";\n\t/** @internal */\n\tstatic Symbol = {\n\t\tName: TableName,\n\t\tSchema: TableSchema,\n\t\tOriginalName,\n\t\tColumns: TableColumns,\n\t\tExtraConfigColumns,\n\t\tBaseName,\n\t\tIsAlias,\n\t\tExtraConfigBuilder\n\t};\n\t/**\n\t* @internal\n\t* Can be changed if the table is aliased.\n\t*/\n\t[TableName];\n\t/**\n\t* @internal\n\t* Used to store the original name of the table, before any aliasing.\n\t*/\n\t[OriginalName];\n\t/** @internal */\n\t[TableSchema];\n\t/** @internal */\n\t[TableColumns];\n\t/** @internal */\n\t[ExtraConfigColumns];\n\t/**\n\t* @internal\n\t* Used to store the table name before the transformation via the `tableCreator` functions.\n\t*/\n\t[BaseName];\n\t/** @internal */\n\t[IsAlias] = false;\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\t/** @internal */\n\t[ExtraConfigBuilder] = void 0;\n\tconstructor(name, schema, baseName) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[TableSchema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n};\nfunction isTable(table) {\n\treturn typeof table === \"object\" && table !== null && IsDrizzleTable in table;\n}\nfunction getTableName(table) {\n\treturn table[TableName];\n}\nfunction getTableUniqueName(table) {\n\treturn `${table[TableSchema] ?? \"public\"}.${table[TableName]}`;\n}\n\n//#endregion\nexport { BaseName, ExtraConfigBuilder, ExtraConfigColumns, IsAlias, OriginalName, Table, TableColumns, TableSchema, getTableName, getTableUniqueName, isTable };\n//# sourceMappingURL=table.js.map", | ||
| "import { entityKind } from \"./entity.js\";\n\n//#region src/subquery.ts\nvar Subquery = class {\n\tstatic [entityKind] = \"Subquery\";\n\tconstructor(sql, fields, alias, isWith = false, usedTables = []) {\n\t\tthis._ = {\n\t\t\tbrand: \"Subquery\",\n\t\t\tsql,\n\t\t\tselectedFields: fields,\n\t\t\talias,\n\t\t\tisWith,\n\t\t\tusedTables\n\t\t};\n\t}\n};\nvar WithSubquery = class extends Subquery {\n\tstatic [entityKind] = \"WithSubquery\";\n};\n\n//#endregion\nexport { Subquery, WithSubquery };\n//# sourceMappingURL=subquery.js.map", | ||
| "//#region src/tracing-utils.ts\nfunction iife(fn, ...args) {\n\treturn fn(...args);\n}\n\n//#endregion\nexport { iife };\n//# sourceMappingURL=tracing-utils.js.map", | ||
| "import { iife } from \"./tracing-utils.js\";\nimport { npmVersion } from \"./version.js\";\n\n//#region src/tracing.ts\nconst hasTelemetry = false;\n/** @internal */\nconst tracer = { startActiveSpan(name, fn) {\n\treturn fn();\n} };\n\n//#endregion\nexport { hasTelemetry, tracer };\n//# sourceMappingURL=tracing.js.map", | ||
| "//#region src/view-common.ts\nconst ViewBaseConfig = Symbol.for(\"drizzle:ViewBaseConfig\");\n\n//#endregion\nexport { ViewBaseConfig };\n//# sourceMappingURL=view-common.js.map", | ||
| "import { Column } from \"../column.js\";\nimport { IsAlias, OriginalName, Table, TableColumns, TableSchema } from \"../table.js\";\nimport { entityKind, is } from \"../entity.js\";\nimport { Subquery } from \"../subquery.js\";\nimport { TableName } from \"../table.utils.js\";\nimport { tracer } from \"../tracing.js\";\nimport { ViewBaseConfig } from \"../view-common.js\";\n\n//#region src/sql/sql.ts\n/**\n* This class is used to indicate a primitive param value that is used in `sql` tag.\n* It is only used on type level and is never instantiated at runtime.\n* If you see a value of this type in the code, its runtime value is actually the primitive param value.\n*/\nvar FakePrimitiveParam = class {\n\tstatic [entityKind] = \"FakePrimitiveParam\";\n};\nfunction isSQLWrapper(value) {\n\treturn value !== null && value !== void 0 && typeof value.getSQL === \"function\";\n}\nfunction mergeQueries(queries) {\n\tconst result = {\n\t\tsql: \"\",\n\t\tparams: []\n\t};\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t}\n\treturn result;\n}\nfunction _mergeQueries(queries) {\n\tconst result = {\n\t\tsql: \"\",\n\t\tparams: []\n\t};\n\tconst sqls = [];\n\tfor (const query of queries) {\n\t\tsqls.push(query.sql);\n\t\tresult.params.push(...query.params);\n\t}\n\tresult._sql = Object.assign(sqls, { raw: sqls });\n\treturn result;\n}\nvar StringChunk = class {\n\tstatic [entityKind] = \"StringChunk\";\n\tvalue;\n\tconstructor(value) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\nvar SQL = class SQL {\n\tstatic [entityKind] = \"SQL\";\n\t/** @internal */\n\tdecoder = noopDecoder;\n\t/** @internal */\n\tshouldInlineParams = false;\n\t/** @internal */\n\tusedTables = [];\n\tconstructor(queryChunks) {\n\t\tthis.queryChunks = queryChunks;\n\t\tfor (const chunk of queryChunks) if (is(chunk, Table)) {\n\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\tthis.usedTables.push(schemaName === void 0 ? chunk[Table.Symbol.Name] : schemaName + \".\" + chunk[Table.Symbol.Name]);\n\t\t}\n\t}\n\tappend(query) {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\ttoQuery(config) {\n\t\treturn tracer.startActiveSpan(\"drizzle.buildSQL\", (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t\"drizzle.query.text\": query.sql,\n\t\t\t\t\"drizzle.query.params\": JSON.stringify(query.params)\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\tbuildQueryFromSourceParams(chunks, _config) {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 }\n\t\t});\n\t\tconst { escapeName, escapeParam, codecs, inlineParams, paramStartIndex, invokeSource } = config;\n\t\tconst mappedChunks = chunks.map((chunk) => {\n\t\t\tif (is(chunk, StringChunk)) return {\n\t\t\t\tsql: chunk.value.join(\"\"),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (is(chunk, Name)) return {\n\t\t\t\tsql: escapeName(chunk.value),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (chunk === void 0) return {\n\t\t\t\tsql: \"\",\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result = [new StringChunk(\"(\")];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) result.push(new StringChunk(\", \"));\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(\")\"));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\t\t\tif (is(chunk, SQL)) return this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t...config,\n\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams\n\t\t\t});\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\t\t\t\tif (invokeSource === \"mssql-view-with-schemabinding\") return {\n\t\t\t\t\tsql: (schemaName === void 0 ? escapeName(\"dbo\") : escapeName(schemaName)) + \".\" + escapeName(tableName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === void 0 || chunk[IsAlias] ? escapeName(tableName) : escapeName(schemaName) + \".\" + escapeName(tableName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = chunk.name;\n\t\t\t\tif (_config.invokeSource === \"indexes\") return {\n\t\t\t\t\tsql: escapeName(columnName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\tconst schemaName = invokeSource === \"mssql-check\" ? void 0 : chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.isAlias ? escapeName(chunk.name) : chunk.table[IsAlias] || schemaName === void 0 ? escapeName(chunk.table[Table.Symbol.Name]) + \".\" + escapeName(columnName) : escapeName(schemaName) + \".\" + escapeName(chunk.table[Table.Symbol.Name]) + \".\" + escapeName(columnName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === void 0 || chunk[ViewBaseConfig].isAlias ? escapeName(viewName) : escapeName(schemaName) + \".\" + escapeName(viewName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, SQL)) return this.buildQueryFromSourceParams([chunk.value], config);\n\t\t\t\tconst useCodecs = codecs && is(chunk.encoder, Column);\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\tconst escaped = escapeParam(paramStartIndex.value++, chunk);\n\t\t\t\t\tchunk.codec = useCodecs ? (value) => codecs.apply(chunk.encoder, \"normalizeParam\", value) : void 0;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: useCodecs ? codecs.apply(chunk.encoder, \"castParam\", escaped) : escaped,\n\t\t\t\t\t\tparams: [chunk]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tlet mappedValue;\n\t\t\t\tif (chunk.value === null) mappedValue = chunk.value;\n\t\t\t\telse {\n\t\t\t\t\tmappedValue = chunk.encoder.mapToDriverValue.isNoop ? chunk.value : chunk.encoder.mapToDriverValue(chunk.value);\n\t\t\t\t\tif (is(mappedValue, SQL)) return this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t\tif (useCodecs) mappedValue = codecs.apply(chunk.encoder, \"normalizeParam\", mappedValue);\n\t\t\t\t}\n\t\t\t\tif (inlineParams) return {\n\t\t\t\t\tsql: this.mapInlineParam(mappedValue, config),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\tconst escaped = escapeParam(paramStartIndex.value++, mappedValue);\n\t\t\t\treturn {\n\t\t\t\t\tsql: useCodecs ? codecs.apply(chunk.encoder, \"castParam\", escaped) : escaped,\n\t\t\t\t\tparams: [mappedValue]\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, Placeholder)) return {\n\t\t\t\tsql: escapeParam(paramStartIndex.value++, chunk),\n\t\t\t\tparams: [chunk]\n\t\t\t};\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== void 0) return {\n\t\t\t\tsql: (chunk.origin !== void 0 ? escapeName(chunk.origin) + \".\" : \"\") + escapeName(chunk.fieldAlias),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) return {\n\t\t\t\t\tsql: escapeName(chunk._.alias),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk(\"(\"),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(\") \"),\n\t\t\t\t\tnew Name(chunk._.alias)\n\t\t\t\t], config);\n\t\t\t}\n\t\t\tif (typeof chunk === \"function\" && \"enumName\" in chunk) {\n\t\t\t\tif (\"schema\" in chunk && chunk.schema) return {\n\t\t\t\t\tsql: escapeName(chunk.schema) + \".\" + escapeName(chunk.enumName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tsql: escapeName(chunk.enumName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) return this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk(\"(\"),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(\")\")\n\t\t\t\t], config);\n\t\t\t}\n\t\t\tif (inlineParams) return {\n\t\t\t\tsql: this.mapInlineParam(chunk, config),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tsql: escapeParam(paramStartIndex.value++, chunk),\n\t\t\t\tparams: [chunk]\n\t\t\t};\n\t\t});\n\t\tif (_config.tagged) return _mergeQueries(mappedChunks);\n\t\treturn mergeQueries(mappedChunks);\n\t}\n\tmapInlineParam(chunk, { escapeString }) {\n\t\tif (chunk === null) return \"null\";\n\t\tif (typeof chunk === \"number\" || typeof chunk === \"boolean\" || typeof chunk === \"bigint\") return chunk.toString();\n\t\tif (typeof chunk === \"string\") return escapeString(chunk);\n\t\tif (typeof chunk === \"object\") {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === \"[object Object]\") return escapeString(JSON.stringify(chunk));\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error(\"Unexpected param value: \" + chunk);\n\t}\n\tgetSQL() {\n\t\treturn this;\n\t}\n\tas(alias) {\n\t\tif (alias === void 0) return this;\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\tmapWith(decoder) {\n\t\tthis.decoder = typeof decoder === \"function\" ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this;\n\t}\n\tinlineParams() {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\t/**\n\t* This method is used to conditionally include a part of the query.\n\t*\n\t* @param condition - Condition to check\n\t* @returns itself if the condition is `true`, otherwise `undefined`\n\t*/\n\tif(condition) {\n\t\treturn condition ? this : void 0;\n\t}\n};\n/**\n* Any DB name (table, column, index etc.)\n*/\nvar Name = class {\n\tstatic [entityKind] = \"Name\";\n\tbrand;\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\n/**\n* Any DB name (table, column, index etc.)\n* @deprecated Use `sql.identifier` instead.\n*/\nfunction name(value) {\n\treturn new Name(value);\n}\nfunction isDriverValueEncoder(value) {\n\treturn typeof value === \"object\" && value !== null && \"mapToDriverValue\" in value && typeof value.mapToDriverValue === \"function\";\n}\nconst noopDecoder = { mapFromDriverValue: (value) => value };\nnoopDecoder.mapFromDriverValue.isNoop = true;\nconst noopEncoder = { mapToDriverValue: (value) => value };\nnoopEncoder.mapToDriverValue.isNoop = true;\nfunction isNoop(mapper) {\n\treturn mapper.isNoop;\n}\nconst noopMapper = {\n\t...noopDecoder,\n\t...noopEncoder\n};\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nvar Param = class {\n\tstatic [entityKind] = \"Param\";\n\tbrand;\n\t/**\n\t* @param value - Parameter value\n\t* @param encoder - Encoder to convert the value to a driver parameter\n\t*/\n\tconstructor(value, encoder = noopEncoder, codec) {\n\t\tthis.value = value;\n\t\tthis.encoder = encoder;\n\t\tthis.codec = codec;\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\n/** @deprecated Use `sql.param` instead. */\nfunction param(value, encoder) {\n\treturn new Param(value, encoder);\n}\nfunction sql(strings, ...params) {\n\tconst queryChunks = [];\n\tif (params.length > 0 || strings.length > 0 && strings[0] !== \"\") queryChunks.push(new StringChunk(strings[0]));\n\tfor (const [paramIndex, param] of params.entries()) queryChunks.push(param, new StringChunk(strings[paramIndex + 1]));\n\treturn new SQL(queryChunks);\n}\n(function(_sql) {\n\tfunction empty() {\n\t\treturn new SQL([]);\n\t}\n\t_sql.empty = empty;\n\tfunction fromList(list) {\n\t\treturn new SQL(list);\n\t}\n\t_sql.fromList = fromList;\n\tfunction raw(str) {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\t_sql.raw = raw;\n\tfunction join(chunks, separator) {\n\t\tconst result = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== void 0) result.push(separator);\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\t_sql.join = join;\n\tfunction identifier(value) {\n\t\treturn new Name(value);\n\t}\n\t_sql.identifier = identifier;\n\tfunction placeholder(name) {\n\t\treturn new Placeholder(name);\n\t}\n\t_sql.placeholder = placeholder;\n\tfunction param(value, encoder) {\n\t\treturn new Param(value, encoder);\n\t}\n\t_sql.param = param;\n\tfunction comment(input) {\n\t\tconst encoded = sqlCommenter(input);\n\t\tif (!encoded.length) return void 0;\n\t\treturn sql.raw(encoded);\n\t}\n\t_sql.comment = comment;\n})(sql || (sql = {}));\nfunction sqlCommenter(input) {\n\tconst encoded = sqlCommenter.encodeInput(input);\n\tif (!encoded.length) return \"\";\n\treturn `/*${encoded}*/`;\n}\n(function(_sqlCommenter) {\n\tfunction merge(input1, input2) {\n\t\tlet encoded;\n\t\tif (typeof input1 === \"object\" && typeof input2 === \"object\") encoded = encodeInput({\n\t\t\t...input1,\n\t\t\t...input2\n\t\t});\n\t\telse if (input1 && input2) encoded = [encodeInput(input1), encodeInput(input2)].filter((i) => i.length).join(\",\");\n\t\telse if (input2) encoded = encodeInput(input2);\n\t\telse if (input1) encoded = encodeInput(input1);\n\t\telse return \"\";\n\t\tif (!encoded.length) return \"\";\n\t\treturn `/*${encoded}*/`;\n\t}\n\t_sqlCommenter.merge = merge;\n\tfunction encodeInput(input) {\n\t\tif (typeof input === \"string\") {\n\t\t\tif (!input.length) return input;\n\t\t\treturn sanitizeStringInput(input);\n\t\t}\n\t\tconst parts = [];\n\t\tfor (const [key, value] of Object.entries(input)) {\n\t\t\tif (value === null || value === void 0 || value === \"\") continue;\n\t\t\tconst encodedKey = sanitizeObjectElement(key);\n\t\t\tconst encodedValue = sanitizeObjectElement(String(value));\n\t\t\tparts.push(`${encodedKey}='${encodedValue}'`);\n\t\t}\n\t\tif (!parts.length) return \"\";\n\t\treturn parts.sort().join(\",\");\n\t}\n\t_sqlCommenter.encodeInput = encodeInput;\n\tfunction sanitizeObjectElement(key) {\n\t\treturn encodeURIComponent(key).replace(/'/g, `\\\\'`);\n\t}\n\t_sqlCommenter.sanitizeObjectElement = sanitizeObjectElement;\n\tfunction sanitizeStringInput(input) {\n\t\treturn input.replace(/\\/\\*/g, \"/ *\").replace(/\\*\\//g, \"* /\");\n\t}\n\t_sqlCommenter.sanitizeStringInput = sanitizeStringInput;\n})(sqlCommenter || (sqlCommenter = {}));\n(function(_SQL) {\n\tclass Aliased {\n\t\tstatic [entityKind] = \"SQL.Aliased\";\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\t\t/** @internal */\n\t\torigin;\n\t\tconstructor(sql, fieldAlias) {\n\t\t\tthis.sql = sql;\n\t\t\tthis.fieldAlias = fieldAlias;\n\t\t}\n\t\tgetSQL() {\n\t\t\treturn this.sql;\n\t\t}\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased(this.sql, this.fieldAlias);\n\t\t}\n\t}\n\t_SQL.Aliased = Aliased;\n})(SQL || (SQL = {}));\nvar Placeholder = class {\n\tstatic [entityKind] = \"Placeholder\";\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\n/** @deprecated Use `sql.placeholder` instead. */\nfunction placeholder(name) {\n\treturn new Placeholder(name);\n}\nfunction fillPlaceholders(params, values) {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) throw new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\treturn values[p.name];\n\t\t}\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) throw new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\tif (values[p.value.name] === null) return values[p.value.name];\n\t\t\tconst mapped = p.encoder.mapToDriverValue.isNoop ? values[p.value.name] : p.encoder.mapToDriverValue(values[p.value.name]);\n\t\t\treturn p.codec ? p.codec(mapped) : mapped;\n\t\t}\n\t\treturn p;\n\t});\n}\nconst IsDrizzleView = Symbol.for(\"drizzle:IsDrizzleView\");\nvar View = class {\n\tstatic [entityKind] = \"View\";\n\t/** @internal */\n\t[ViewBaseConfig];\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\t/** @internal */\n\tget [TableName]() {\n\t\treturn this[ViewBaseConfig].name;\n\t}\n\t/** @internal */\n\tget [TableSchema]() {\n\t\treturn this[ViewBaseConfig].schema;\n\t}\n\t/** @internal */\n\tget [IsAlias]() {\n\t\treturn this[ViewBaseConfig].isAlias;\n\t}\n\t/** @internal */\n\tget [OriginalName]() {\n\t\treturn this[ViewBaseConfig].originalName;\n\t}\n\t/** @internal */\n\tget [TableColumns]() {\n\t\treturn this[ViewBaseConfig].selectedFields;\n\t}\n\tconstructor({ name, schema, selectedFields, query }) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery,\n\t\t\tisExisting: !query,\n\t\t\tisAlias: false\n\t\t};\n\t}\n};\nfunction isView(view) {\n\treturn typeof view === \"object\" && view !== null && IsDrizzleView in view;\n}\nfunction getViewName(view) {\n\treturn view[ViewBaseConfig].name;\n}\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n//#endregion\nexport { FakePrimitiveParam, Name, Param, Placeholder, SQL, StringChunk, View, fillPlaceholders, getViewName, isDriverValueEncoder, isNoop, isSQLWrapper, isView, name, noopDecoder, noopEncoder, noopMapper, param, placeholder, sql, sqlCommenter };\n//# sourceMappingURL=sql.js.map", | ||
| "import { Param, Placeholder, SQL, StringChunk, View, isDriverValueEncoder, isSQLWrapper, sql } from \"../sql.js\";\nimport { is } from \"../../entity.js\";\nimport { Table } from \"../../table.js\";\nimport { Column } from \"../../column.js\";\n\n//#region src/sql/expressions/conditions.ts\nfunction bindIfParam(value, column) {\n\tif (isDriverValueEncoder(column) && !isSQLWrapper(value) && !is(value, Param) && !is(value, Placeholder) && !is(value, Column) && !is(value, Table) && !is(value, View)) return new Param(value, column);\n\treturn value;\n}\n/**\n* Test that two values are equal.\n*\n* Remember that the SQL standard dictates that\n* two NULL values are not equal, so if you want to test\n* whether a value is null, you may want to use\n* `isNull` instead.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made by Ford\n* db.select().from(cars)\n* .where(eq(cars.make, 'Ford'))\n* ```\n*\n* @see isNull for a way to test equality to NULL.\n*/\nconst eq = (left, right) => {\n\treturn sql`${left} = ${bindIfParam(right, left)}`;\n};\n/**\n* Test that two values are not equal.\n*\n* Remember that the SQL standard dictates that\n* two NULL values are not equal, so if you want to test\n* whether a value is not null, you may want to use\n* `isNotNull` instead.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars not made by Ford\n* db.select().from(cars)\n* .where(ne(cars.make, 'Ford'))\n* ```\n*\n* @see isNotNull for a way to test whether a value is not null.\n*/\nconst ne = (left, right) => {\n\treturn sql`${left} <> ${bindIfParam(right, left)}`;\n};\nfunction and(...unfilteredConditions) {\n\tconst conditions = unfilteredConditions.filter((c) => c !== void 0);\n\tif (conditions.length === 0) return;\n\tif (conditions.length === 1) return new SQL(conditions);\n\treturn new SQL([\n\t\tnew StringChunk(\"(\"),\n\t\tsql.join(conditions.map((c) => sql`(${c})`), new StringChunk(\" and \")),\n\t\tnew StringChunk(\")\")\n\t]);\n}\nfunction or(...unfilteredConditions) {\n\tconst conditions = unfilteredConditions.filter((c) => c !== void 0);\n\tif (conditions.length === 0) return;\n\tif (conditions.length === 1) return new SQL(conditions);\n\treturn new SQL([\n\t\tnew StringChunk(\"(\"),\n\t\tsql.join(conditions.map((c) => sql`(${c})`), new StringChunk(\" or \")),\n\t\tnew StringChunk(\")\")\n\t]);\n}\n/**\n* Negate the meaning of an expression using the `not` keyword.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars _not_ made by GM or Ford.\n* db.select().from(cars)\n* .where(not(inArray(cars.make, ['GM', 'Ford'])))\n* ```\n*/\nfunction not(condition) {\n\treturn is(condition, SQL) ? sql`not (${condition})` : sql`not ${condition}`;\n}\n/**\n* Test that the first expression passed is greater than\n* the second expression.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made after 2000.\n* db.select().from(cars)\n* .where(gt(cars.year, 2000))\n* ```\n*\n* @see gte for greater-than-or-equal\n*/\nconst gt = (left, right) => {\n\treturn sql`${left} > ${bindIfParam(right, left)}`;\n};\n/**\n* Test that the first expression passed is greater than\n* or equal to the second expression. Use `gt` to\n* test whether an expression is strictly greater\n* than another.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made on or after 2000.\n* db.select().from(cars)\n* .where(gte(cars.year, 2000))\n* ```\n*\n* @see gt for a strictly greater-than condition\n*/\nconst gte = (left, right) => {\n\treturn sql`${left} >= ${bindIfParam(right, left)}`;\n};\n/**\n* Test that the first expression passed is less than\n* the second expression.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made before 2000.\n* db.select().from(cars)\n* .where(lt(cars.year, 2000))\n* ```\n*\n* @see lte for less-than-or-equal\n*/\nconst lt = (left, right) => {\n\treturn sql`${left} < ${bindIfParam(right, left)}`;\n};\n/**\n* Test that the first expression passed is less than\n* or equal to the second expression.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made before 2000.\n* db.select().from(cars)\n* .where(lte(cars.year, 2000))\n* ```\n*\n* @see lt for a strictly less-than condition\n*/\nconst lte = (left, right) => {\n\treturn sql`${left} <= ${bindIfParam(right, left)}`;\n};\nfunction inArray(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) return sql`false`;\n\t\treturn sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\treturn sql`${column} in ${bindIfParam(values, column)}`;\n}\nfunction notInArray(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) return sql`true`;\n\t\treturn sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\treturn sql`${column} not in ${bindIfParam(values, column)}`;\n}\n/**\n* Test whether an expression is NULL. By the SQL standard,\n* NULL is neither equal nor not equal to itself, so\n* it's recommended to use `isNull` and `notIsNull` for\n* comparisons to NULL.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars that have no discontinuedAt date.\n* db.select().from(cars)\n* .where(isNull(cars.discontinuedAt))\n* ```\n*\n* @see isNotNull for the inverse of this test\n*/\nfunction isNull(value) {\n\treturn sql`(${value} is null)`;\n}\n/**\n* Test whether an expression is not NULL. By the SQL standard,\n* NULL is neither equal nor not equal to itself, so\n* it's recommended to use `isNull` and `notIsNull` for\n* comparisons to NULL.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars that have been discontinued.\n* db.select().from(cars)\n* .where(isNotNull(cars.discontinuedAt))\n* ```\n*\n* @see isNull for the inverse of this test\n*/\nfunction isNotNull(value) {\n\treturn sql`(${value} is not null)`;\n}\n/**\n* Test whether a subquery evaluates to have any rows.\n*\n* ## Examples\n*\n* ```ts\n* // Users whose `homeCity` column has a match in a cities\n* // table.\n* db\n* .select()\n* .from(users)\n* .where(\n* exists(db.select()\n* .from(cities)\n* .where(eq(users.homeCity, cities.id))),\n* );\n* ```\n*\n* @see notExists for the inverse of this test\n*/\nfunction exists(subquery) {\n\treturn sql`exists ${subquery}`;\n}\n/**\n* Test whether a subquery doesn't include any result\n* rows.\n*\n* ## Examples\n*\n* ```ts\n* // Users whose `homeCity` column doesn't match\n* // a row in the cities table.\n* db\n* .select()\n* .from(users)\n* .where(\n* notExists(db.select()\n* .from(cities)\n* .where(eq(users.homeCity, cities.id))),\n* );\n* ```\n*\n* @see exists for the inverse of this test\n*/\nfunction notExists(subquery) {\n\treturn sql`not exists ${subquery}`;\n}\nfunction between(column, min, max) {\n\treturn sql`${column} between ${bindIfParam(min, column)} and ${bindIfParam(max, column)}`;\n}\nfunction notBetween(column, min, max) {\n\treturn sql`${column} not between ${bindIfParam(min, column)} and ${bindIfParam(max, column)}`;\n}\n/**\n* Compare a column to a pattern, which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars with 'Turbo' in their names.\n* db.select().from(cars)\n* .where(like(cars.name, '%Turbo%'))\n* ```\n*\n* @see ilike for a case-insensitive version of this condition\n*/\nfunction like(column, value) {\n\treturn sql`${column} like ${value}`;\n}\n/**\n* The inverse of like - this tests that a given column\n* does not match a pattern, which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars that don't have \"ROver\" in their name.\n* db.select().from(cars)\n* .where(notLike(cars.name, '%Rover%'))\n* ```\n*\n* @see like for the inverse condition\n* @see notIlike for a case-insensitive version of this condition\n*/\nfunction notLike(column, value) {\n\treturn sql`${column} not like ${value}`;\n}\n/**\n* Case-insensitively compare a column to a pattern,\n* which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* Unlike like, this performs a case-insensitive comparison.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars with 'Turbo' in their names.\n* db.select().from(cars)\n* .where(ilike(cars.name, '%Turbo%'))\n* ```\n*\n* @see like for a case-sensitive version of this condition\n*/\nfunction ilike(column, value) {\n\treturn sql`${column} ilike ${value}`;\n}\n/**\n* The inverse of ilike - this case-insensitively tests that a given column\n* does not match a pattern, which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars that don't have \"Rover\" in their name.\n* db.select().from(cars)\n* .where(notLike(cars.name, '%Rover%'))\n* ```\n*\n* @see ilike for the inverse condition\n* @see notLike for a case-sensitive version of this condition\n*/\nfunction notIlike(column, value) {\n\treturn sql`${column} not ilike ${value}`;\n}\nfunction arrayContains(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) throw new Error(\"arrayContains requires at least one value\");\n\t\tconst par = bindIfParam(values, column);\n\t\treturn sql`${column} @> ${sql`${Array.isArray(par) ? new Param(par) : par}`}`;\n\t}\n\treturn sql`${column} @> ${bindIfParam(values, column)}`;\n}\nfunction arrayContained(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) throw new Error(\"arrayContained requires at least one value\");\n\t\tconst par = bindIfParam(values, column);\n\t\treturn sql`${column} <@ ${sql`${Array.isArray(par) ? new Param(par) : par}`}`;\n\t}\n\treturn sql`${column} <@ ${bindIfParam(values, column)}`;\n}\nfunction arrayOverlaps(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) throw new Error(\"arrayOverlaps requires at least one value\");\n\t\tconst par = bindIfParam(values, column);\n\t\treturn sql`${column} && ${sql`${Array.isArray(par) ? new Param(par) : par}`}`;\n\t}\n\treturn sql`${column} && ${bindIfParam(values, column)}`;\n}\n\n//#endregion\nexport { and, arrayContained, arrayContains, arrayOverlaps, between, bindIfParam, eq, exists, gt, gte, ilike, inArray, isNotNull, isNull, like, lt, lte, ne, not, notBetween, notExists, notIlike, notInArray, notLike, or };\n//# sourceMappingURL=conditions.js.map", | ||
| "import { sql } from \"../sql.js\";\n\n//#region src/sql/expressions/select.ts\n/**\n* Used in sorting, this specifies that the given\n* column or expression should be sorted in ascending\n* order. By the SQL standard, ascending order is the\n* default, so it is not usually necessary to specify\n* ascending sort order.\n*\n* ## Examples\n*\n* ```ts\n* // Return cars, starting with the oldest models\n* // and going in ascending order to the newest.\n* db.select().from(cars)\n* .orderBy(asc(cars.year));\n* ```\n*\n* @see desc to sort in descending order\n*/\nfunction asc(column) {\n\treturn sql`${column} asc`;\n}\n/**\n* Used in sorting, this specifies that the given\n* column or expression should be sorted in descending\n* order.\n*\n* ## Examples\n*\n* ```ts\n* // Select users, with the most recently created\n* // records coming first.\n* db.select().from(users)\n* .orderBy(desc(users.createdAt));\n* ```\n*\n* @see asc to sort in ascending order\n*/\nfunction desc(column) {\n\treturn sql`${column} desc`;\n}\n\n//#endregion\nexport { asc, desc };\n//# sourceMappingURL=select.js.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "125EBE230F3E99F464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "29163BF5156E1EE464756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
+1
-1
| { | ||
| "name": "@opencode-ai/cli-linux-arm64", | ||
| "version": "0.0.0-next-16671", | ||
| "version": "0.0.0-next-16676", | ||
| "license": "MIT", | ||
@@ -5,0 +5,0 @@ "repository": { |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/run/run.ts", "src/run/noninteractive.ts", "src/run/ui.ts"], | ||
| "sourcesContent": [ | ||
| "import { Service, type Endpoint } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode, type OpenCodeClient, type SessionMessageAssistantTool } from \"@opencode-ai/client/promise\"\nimport { FSUtil } from \"@opencode-ai/util/fs-util\"\nimport { open } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { readStdin } from \"../util/io\"\nimport { ServerConnection } from \"../services/server-connection\"\nimport { parseSessionTargetModel, resolveSessionTarget } from \"../session-target\"\nimport { toolInlineInfo } from \"@opencode-ai/tui/mini/tool\"\nimport { runNonInteractivePrompt } from \"./noninteractive\"\nimport { UI } from \"./ui\"\n\nexport type RunCommandInput = {\n server: ServerConnection.Resolved\n message: string[]\n continue?: boolean\n session?: string\n fork?: boolean\n model?: string\n agent?: string\n format: \"default\" | \"json\"\n file: string[]\n title?: string\n thinking?: boolean\n auto?: boolean\n}\n\ntype FilePart = {\n url: string\n filename: string\n mime: string\n}\n\ntype Prepared = {\n directory?: string\n message: string\n files: FilePart[]\n}\n\ntype ExecutionOptions = {\n root?: string\n directory?: string\n useServerDirectory?: boolean\n variant?: string\n attached?: boolean\n compatibility?: \"v1\"\n}\n\nclass RunTargetError extends Error {\n constructor(\n message: string,\n readonly sessionID?: string,\n ) {\n super(message)\n }\n}\n\nconst ATTACH_FILE_MAX_BYTES = 10 * 1024 * 1024\n\nexport function runNonInteractive(input: RunCommandInput) {\n return runNonInteractiveWithOptions(input, {})\n}\n\n/** @internal Used only by the V1 command boundary. */\nexport function runNonInteractiveWithOptions(input: RunCommandInput, options: ExecutionOptions) {\n return run(input, options).catch((error) => reportRunError(input, errorMessage(error)))\n}\n\nasync function run(input: RunCommandInput, options: ExecutionOptions) {\n if (input.fork && !input.continue && !input.session) fail(\"--fork requires --continue or --session\")\n const root = options.root ?? process.env.PWD ?? process.cwd()\n const local = localDirectory(root)\n const directory = options.useServerDirectory ? undefined : (options.directory ?? local)\n const message = mergeInput(formatMessage(input.message), process.stdin.isTTY ? undefined : await readStdin())\n if (!message?.trim()) fail(\"You must provide a message\")\n const files = await Promise.all(input.file.map((file) => prepareFile(file, root, options)))\n const prepared = { directory, message, files }\n return execute(input, prepared, input.server.endpoint, options)\n}\n\nasync function execute(input: RunCommandInput, prepared: Prepared, endpoint: Endpoint, options: ExecutionOptions) {\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const explicit = parseRunModel(input.model)\n const target = await resolveSessionTarget({\n client,\n location: prepared.directory ? { directory: prepared.directory } : undefined,\n continue: input.continue,\n session: input.session,\n fork: input.fork,\n model: explicit\n ? { providerID: explicit.model.providerID, id: explicit.model.modelID, variant: explicit.variant }\n : undefined,\n agent: input.agent,\n prepare: async (next) => {\n const selected =\n next.model ??\n (options.variant\n ? await client.model\n .default({ location: { directory: next.location.directory, workspace: next.location.workspaceID } })\n .then((result) => result.data)\n : undefined)\n const model = selected\n ? {\n providerID: selected.providerID,\n id: selected.id,\n variant: options.variant ?? (\"variant\" in selected ? selected.variant : undefined),\n }\n : undefined\n if ((options.variant ?? explicit?.variant) && !model)\n throw new RunTargetError(\"Cannot select a variant before selecting a model\", next.session?.id)\n return { model, agent: next.agent }\n },\n }).catch((error) => {\n if (!(error instanceof RunTargetError)) throw error\n reportRunError(input, error.message, error.sessionID)\n return undefined\n })\n if (!target) return\n const model = target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined\n const variant = target.model?.variant\n if (!target.resume && input.title !== undefined) {\n await client.session.rename({\n sessionID: target.session.id,\n title: input.title || prepared.message.slice(0, 50) + (prepared.message.length > 50 ? \"...\" : \"\"),\n })\n }\n\n await runNonInteractivePrompt({\n client,\n sessionID: target.session.id,\n location: target.location,\n message: prepared.message,\n files: prepared.files,\n agent: target.agent,\n model,\n variant,\n thinking: input.thinking ?? false,\n format: input.format,\n auto: input.auto ?? false,\n attached: options.attached ?? true,\n compatibility: options.compatibility,\n renderTool: (part) => renderTool(part, target.location.directory),\n renderToolError: (part) => renderToolError(part, target.location.directory),\n }).catch((error) => reportRunError(input, errorMessage(error), target.session.id))\n}\n\nexport function mergeInput(message: string | undefined, piped: string | undefined) {\n if (!message) return piped || undefined\n if (!piped) return message\n return message + \"\\n\" + piped\n}\n\nfunction formatMessage(message: string[]) {\n const value = message.map((part) => (part.includes(\" \") ? `\"${part.replace(/\"/g, '\\\\\"')}\"` : part)).join(\" \")\n return value || undefined\n}\n\nfunction localDirectory(root: string) {\n try {\n process.chdir(root)\n return process.cwd()\n } catch {\n fail(`Failed to change directory to ${root}`)\n }\n}\n\nexport function parseRunModel(value?: string) {\n const ref = parseSessionTargetModel(value)\n if (!ref) return\n return {\n model: { providerID: ref.providerID, modelID: ref.id },\n variant: ref.variant,\n }\n}\n\nasync function prepareFile(input: string, directory: string, options: ExecutionOptions): Promise<FilePart> {\n const file = path.resolve(directory, input)\n const handle = await open(file, \"r\").catch(() => fail(`File not found: ${input}`))\n try {\n const stat = await handle.stat()\n if (options.compatibility === \"v1\" && options.attached && stat.isDirectory())\n fail(`Cannot attach local directory without a shared filesystem: ${input}`)\n if (!stat.isFile() || stat.size > ATTACH_FILE_MAX_BYTES)\n fail(`Cannot attach a directory, special file, or file larger than 10 MiB: ${input}`)\n const content = Buffer.alloc(Number(stat.size))\n let offset = 0\n while (offset < content.length) {\n const read = await handle.read(content, offset, content.length - offset, offset)\n if (read.bytesRead === 0) break\n offset += read.bytesRead\n }\n const bytes = content.subarray(0, offset)\n const detected = FSUtil.mimeType(file)\n const text = bytes.toString(\"utf8\")\n const mime =\n detected.startsWith(\"image/\") || detected === \"application/pdf\"\n ? detected\n : !isBinaryContent(bytes) && Buffer.from(text, \"utf8\").equals(bytes)\n ? \"text/plain\"\n : detected\n return {\n url: `data:${mime};base64,${bytes.toString(\"base64\")}`,\n filename: path.basename(file),\n mime,\n }\n } finally {\n await handle.close()\n }\n}\n\nfunction isBinaryContent(bytes: Uint8Array) {\n if (bytes.length === 0) return false\n if (bytes.includes(0)) return true\n return bytes.reduce((count, byte) => count + Number(byte < 9 || (byte > 13 && byte < 32)), 0) / bytes.length > 0.3\n}\n\nasync function renderTool(part: SessionMessageAssistantTool, directory: string) {\n const info = toolInlineInfo(part, directory)\n if (info.mode === \"block\") {\n UI.empty()\n UI.println(UI.Style.TEXT_NORMAL + info.icon, UI.Style.TEXT_NORMAL + info.title)\n if (info.body?.trim()) UI.println(info.body)\n UI.empty()\n return\n }\n UI.println(\n UI.Style.TEXT_NORMAL + info.icon,\n UI.Style.TEXT_NORMAL + info.title,\n info.description ? UI.Style.TEXT_DIM + info.description + UI.Style.TEXT_NORMAL : \"\",\n )\n}\n\nasync function renderToolError(part: SessionMessageAssistantTool, directory: string) {\n const info = toolInlineInfo(part, directory)\n UI.println(UI.Style.TEXT_NORMAL + \"✗\", UI.Style.TEXT_NORMAL + `${info.title} failed`)\n}\n\nfunction errorMessage(error: unknown) {\n if (error instanceof Error) return error.message\n if (typeof error === \"object\" && error !== null && \"message\" in error && typeof error.message === \"string\")\n return error.message\n return String(error)\n}\n\n/** @internal Used by the V1 command boundary before a Session exists. */\nexport function reportRunError(input: Pick<RunCommandInput, \"format\">, message: string, sessionID?: string) {\n process.exitCode = 1\n if (input.format === \"json\") {\n process.stdout.write(\n JSON.stringify({\n type: \"error\",\n timestamp: Date.now(),\n sessionID: sessionID ?? \"\",\n error: { type: \"unknown\", message },\n }) + \"\\n\",\n )\n return\n }\n UI.error(message)\n}\n\nfunction fail(message: string): never {\n throw new Error(message)\n}\n", | ||
| "import type {\n EventSubscribeOutput,\n JsonValue,\n LocationRef,\n OpenCodeClient,\n SessionMessageAssistantTool,\n SessionMessageInfo,\n ToolContent,\n} from \"@opencode-ai/client/promise\"\nimport { SessionMessage } from \"@opencode-ai/schema/session-message\"\nimport { EOL } from \"node:os\"\nimport { readFile } from \"node:fs/promises\"\nimport { nonEmptyToolContent, toolOutputText, type MiniToolPart } from \"@opencode-ai/tui/mini/tool\"\nimport { UI } from \"./ui\"\n\ntype Model = {\n providerID: string\n modelID: string\n}\n\ntype File = {\n url: string\n filename: string\n mime: string\n}\n\ntype Input = {\n client: OpenCodeClient\n sessionID: string\n location: LocationRef\n message: string\n files: File[]\n agent?: string\n model?: Model\n variant?: string\n thinking: boolean\n format: \"default\" | \"json\"\n auto: boolean\n /** True when the client is attached to a shared server rather than an exclusive in-process one. */\n attached: boolean\n compatibility?: \"v1\"\n renderTool: (part: SessionMessageAssistantTool) => Promise<void>\n renderToolError: (part: SessionMessageAssistantTool) => Promise<void>\n}\n\ntype StartedPart = {\n id: string\n timestamp: number\n}\n\ntype ToolState = StartedPart & {\n assistantMessageID: string\n tool: string\n input: Record<string, JsonValue>\n raw?: string\n provider?: unknown\n providerState?: SessionMessageAssistantTool[\"providerState\"]\n metadata: Record<string, JsonValue>\n content: ToolContent[]\n}\n\ntype V2Event = EventSubscribeOutput\ntype FormRequest = Extract<V2Event, { type: \"form.created\" }>[\"data\"][\"form\"]\n\n// MCP elicitations are temporarily owned by the \"global\" sentinel instead of a real\n// session. An exclusive local process may treat them as this run's blockers; an\n// attached client must not cancel input that may belong to another session.\nconst GLOBAL_FORM_SESSION_ID = \"global\"\n\nexport async function runNonInteractivePrompt(input: Input) {\n const controller = new AbortController()\n const stream = input.client.event.subscribe({ signal: controller.signal })[Symbol.asyncIterator]()\n const connected = await stream.next()\n if (connected.done) throw new Error(\"Event stream disconnected before prompt admission\")\n\n const messageID = SessionMessage.ID.create()\n const starts = new Map<string, StartedPart>()\n const tools = new Map<string, ToolState>()\n const renderedText = new Map<string, string>()\n const renderedReasoning = new Map<string, string>()\n const renderedTools = new Set<string>()\n let submitted = false\n let promoted = false\n let emittedError = false\n let permissionRejected = false\n let formCancelled = false\n let interrupted = false\n let v1InvalidOutput = false\n let prePromotionError: { message: string; [key: string]: unknown } | undefined\n let finalizing = false\n let admission: AbortController | undefined\n let pendingStep: { timestamp: number; part: Record<string, unknown>; label: string } | undefined\n\n const emit = (type: string, timestamp: number, data: Record<string, unknown>) => {\n if (input.format !== \"json\") return false\n process.stdout.write(JSON.stringify({ type, timestamp, sessionID: input.sessionID, ...data }) + EOL)\n return true\n }\n\n const writeText = (part: { text: string; [key: string]: unknown }, timestamp: number) => {\n if (emit(\"text\", timestamp, { part })) return\n const text = part.text.trim()\n if (!text) return\n if (!process.stdout.isTTY) {\n process.stdout.write(text + EOL)\n return\n }\n UI.empty()\n UI.println(text)\n UI.empty()\n }\n\n const writeReasoning = (part: { text: string; [key: string]: unknown }, timestamp: number) => {\n if (emit(\"reasoning\", timestamp, { part })) return\n const text = part.text.trim()\n if (!text) return\n const line = `Thinking: ${text}`\n if (!process.stdout.isTTY) return void process.stdout.write(line + EOL)\n UI.empty()\n UI.println(`${UI.Style.TEXT_DIM}\\u001b[3m${line}\\u001b[0m${UI.Style.TEXT_NORMAL}`)\n UI.empty()\n }\n\n const flushStep = () => {\n if (!pendingStep) return\n const value = pendingStep\n pendingStep = undefined\n if (!emit(\"step_start\", value.timestamp, { part: value.part }) && input.format !== \"json\") {\n UI.empty()\n UI.println(value.label)\n UI.empty()\n }\n }\n\n const replyPermission = async (request: { id: string; action: string; resources: ReadonlyArray<string> }) => {\n if (!input.auto) {\n permissionRejected = true\n UI.println(\n UI.Style.TEXT_WARNING_BOLD + \"!\",\n UI.Style.TEXT_NORMAL +\n `permission requested: ${request.action} (${request.resources.join(\", \")}); auto-rejecting`,\n )\n }\n await input.client.permission\n .reply({\n sessionID: input.sessionID,\n requestID: request.id,\n reply: input.auto ? \"once\" : \"reject\",\n })\n .catch(() => {})\n if (!input.auto) {\n await input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n }\n }\n\n const cancelForm = async (request: Pick<FormRequest, \"id\" | \"sessionID\">) => {\n try {\n await input.client.form.cancel(\n { sessionID: request.sessionID, formID: request.id },\n ...formRequestOptions(request.sessionID === GLOBAL_FORM_SESSION_ID ? input.location : undefined),\n )\n } catch (error) {\n if (!formAlreadySettled(error)) throw error\n }\n formCancelled = true\n }\n\n const consume = async () => {\n while (!controller.signal.aborted) {\n const next = await stream.next().catch((error) => {\n if (!emittedError) throw error\n return { done: true as const, value: undefined }\n })\n if (next.done) {\n if (emittedError) return\n throw new Error(\"Event stream disconnected during prompt execution\")\n }\n const event = next.value\n\n if (event.type === \"permission.asked\" && submitted && event.data.sessionID === input.sessionID) {\n await replyPermission(event.data)\n continue\n }\n if (\n event.type === \"form.created\" &&\n submitted &&\n (event.data.form.sessionID === input.sessionID ||\n (!input.attached &&\n event.data.form.sessionID === GLOBAL_FORM_SESSION_ID &&\n sameLocation(event.location, input.location)))\n ) {\n await cancelForm(event.data.form)\n continue\n }\n if (!(\"sessionID\" in event.data) || event.data.sessionID !== input.sessionID) continue\n const time = toMillis(\"created\" in event ? event.created : undefined)\n\n if (event.type === \"session.input.promoted\") {\n if (event.data.inputID === messageID) {\n promoted = true\n prePromotionError = undefined\n continue\n }\n }\n if (\n event.type === \"session.execution.interrupted\" &&\n event.data.reason === \"user\" &&\n (interrupted || permissionRejected || formCancelled)\n ) {\n return\n }\n if (!promoted && event.type === \"session.execution.failed\") {\n prePromotionError = event.data.error\n if (finalizing) return\n continue\n }\n if (\n !promoted &&\n finalizing &&\n (event.type === \"session.execution.succeeded\" || event.type === \"session.execution.interrupted\")\n )\n return\n if (!promoted) continue\n if (finalizing && !event.type.startsWith(\"session.execution.\")) continue\n\n if (event.type === \"session.step.started\") {\n const part = {\n id: partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"step-start\",\n snapshot: event.data.snapshot,\n }\n if (input.compatibility === \"v1\") {\n pendingStep = {\n timestamp: time,\n part,\n label: `> ${event.data.agent} · ${event.data.model.id}`,\n }\n continue\n }\n if (!emit(\"step_start\", time, { part }) && input.format !== \"json\") {\n UI.empty()\n UI.println(`> ${event.data.agent} · ${event.data.model.id}`)\n UI.empty()\n }\n continue\n }\n\n if (event.type === \"session.text.started\") {\n flushStep()\n starts.set(`text\\u0000${contentKey(event.data.assistantMessageID, event.data.ordinal)}`, {\n id: partID(event.id),\n timestamp: time,\n })\n continue\n }\n if (event.type === \"session.text.ended\") {\n const key = contentKey(event.data.assistantMessageID, event.data.ordinal)\n const started = starts.get(`text\\u0000${key}`)\n starts.delete(`text\\u0000${key}`)\n const part = {\n id: started?.id ?? partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"text\",\n text: event.data.text,\n time: { start: started?.timestamp ?? time, end: time },\n }\n renderedText.set(key, event.data.text)\n writeText(part, time)\n continue\n }\n\n if (event.type === \"session.reasoning.started\") {\n flushStep()\n starts.set(`reasoning\\u0000${contentKey(event.data.assistantMessageID, event.data.ordinal)}`, {\n id: partID(event.id),\n timestamp: time,\n })\n continue\n }\n if (event.type === \"session.reasoning.ended\" && input.thinking) {\n const key = contentKey(event.data.assistantMessageID, event.data.ordinal)\n const started = starts.get(`reasoning\\u0000${key}`)\n starts.delete(`reasoning\\u0000${key}`)\n const part = {\n id: started?.id ?? partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"reasoning\",\n text: event.data.text,\n metadata: event.data.state,\n time: { start: started?.timestamp ?? time, end: time },\n }\n renderedReasoning.set(key, event.data.text)\n writeReasoning(part, time)\n continue\n }\n\n if (event.type === \"session.tool.input.started\") {\n flushStep()\n tools.set(toolKey(event.data.assistantMessageID, event.data.callID), {\n id: partID(event.id),\n timestamp: time,\n assistantMessageID: event.data.assistantMessageID,\n tool: event.data.name,\n input: {},\n metadata: {},\n content: [],\n })\n continue\n }\n if (event.type === \"session.tool.input.ended\") {\n const current = tools.get(toolKey(event.data.assistantMessageID, event.data.callID))\n if (current) current.raw = event.data.text\n continue\n }\n if (event.type === \"session.tool.input.delta\") {\n const current = tools.get(toolKey(event.data.assistantMessageID, event.data.callID))\n if (current) current.raw = (current.raw ?? \"\") + event.data.delta\n continue\n }\n if (event.type === \"session.tool.called\") {\n flushStep()\n const key = toolKey(event.data.assistantMessageID, event.data.callID)\n const current = tools.get(key)\n tools.set(key, {\n id: current?.id ?? partID(event.id),\n timestamp: current?.timestamp ?? time,\n assistantMessageID: event.data.assistantMessageID,\n tool: current?.tool ?? \"tool\",\n input: event.data.input,\n raw: current?.raw,\n provider: { executed: event.data.executed, state: event.data.state },\n providerState: event.data.state,\n metadata: {},\n content: [],\n })\n continue\n }\n if (event.type === \"session.tool.progress\") {\n const current = tools.get(toolKey(event.data.assistantMessageID, event.data.callID))\n if (current) {\n current.metadata = event.data.metadata\n }\n continue\n }\n if (event.type === \"session.tool.success\") {\n const key = toolKey(event.data.assistantMessageID, event.data.callID)\n const current = tools.get(key) ?? fallbackTool(event)\n const tool: SessionMessageAssistantTool = {\n type: \"tool\",\n id: event.data.callID,\n name: current.tool,\n executed: event.data.executed,\n providerState: current.providerState,\n providerResultState: event.data.resultState,\n state: {\n status: \"completed\",\n input: current.input,\n metadata: event.data.metadata,\n content: event.data.content,\n },\n time: { created: current.timestamp, ran: current.timestamp, completed: time },\n }\n const part: MiniToolPart = {\n id: current.id,\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"tool\",\n callID: event.data.callID,\n tool: current.tool,\n state: {\n status: \"completed\",\n input: current.input,\n output: toolOutputText(current.tool, event.data.content),\n title: current.tool,\n metadata: {\n metadata: event.data.metadata,\n content: event.data.content,\n providerCall: current.provider,\n providerResult: { executed: event.data.executed, state: event.data.resultState },\n rawInput: current.raw,\n },\n time: { start: current.timestamp, end: time },\n },\n }\n tools.delete(key)\n renderedTools.add(key)\n if (!emit(\"tool_use\", time, { part })) await input.renderTool(tool)\n continue\n }\n if (event.type === \"session.tool.failed\") {\n const key = toolKey(event.data.assistantMessageID, event.data.callID)\n const current = tools.get(key) ?? fallbackTool(event)\n const error = event.data.error.message\n const metadata = event.data.metadata ?? current.metadata\n const content = event.data.content ?? nonEmptyToolContent(current.content)\n const tool: SessionMessageAssistantTool = {\n type: \"tool\",\n id: event.data.callID,\n name: current.tool,\n executed: event.data.executed,\n providerState: current.providerState,\n providerResultState: event.data.resultState,\n state: {\n status: \"error\",\n input: current.input,\n metadata,\n content,\n error: event.data.error,\n },\n time: { created: current.timestamp, ran: current.timestamp, completed: time },\n }\n const part: MiniToolPart = {\n id: current.id,\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"tool\",\n callID: event.data.callID,\n tool: current.tool,\n state: {\n status: \"error\",\n input: current.input,\n error,\n metadata: {\n providerCall: current.provider,\n providerResult: { executed: event.data.executed, state: event.data.resultState },\n rawInput: current.raw,\n },\n time: { start: current.timestamp, end: time },\n },\n }\n tools.delete(key)\n renderedTools.add(key)\n if (input.compatibility === \"v1\" && (permissionRejected || formCancelled)) continue\n if (!emit(\"tool_use\", time, { part })) {\n if (content && toolOutputText(current.tool, content).trim())\n await input.renderTool({\n ...tool,\n state: {\n status: \"completed\",\n input: current.input,\n metadata,\n content,\n },\n })\n await input.renderToolError(tool)\n UI.error(error)\n }\n continue\n }\n\n if (event.type === \"session.step.ended\") {\n flushStep()\n const part = {\n id: partID(event.id),\n sessionID: input.sessionID,\n messageID: event.data.assistantMessageID,\n type: \"step-finish\",\n reason: event.data.finish,\n snapshot: event.data.snapshot,\n cost: event.data.cost,\n tokens: event.data.tokens,\n }\n emit(\"step_finish\", time, { part })\n continue\n }\n if (event.type === \"session.step.failed\") {\n if (\n input.compatibility === \"v1\" &&\n event.data.error.message === \"Provider stream ended without a terminal finish event\"\n ) {\n pendingStep = undefined\n v1InvalidOutput = true\n continue\n }\n if (interrupted || permissionRejected || formCancelled) continue\n flushStep()\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", time, { error: event.data.error })) UI.error(event.data.error.message)\n continue\n }\n if (event.type === \"session.execution.failed\") {\n if (input.compatibility === \"v1\" && (v1InvalidOutput || permissionRejected || formCancelled)) return\n flushStep()\n if (!emittedError && !formCancelled) {\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", time, { error: event.data.error })) UI.error(event.data.error.message)\n }\n return\n }\n if (event.type === \"session.execution.interrupted\") {\n if (input.compatibility === \"v1\" && (permissionRejected || formCancelled)) return\n if (event.data.reason === \"user\" && interrupted) process.exitCode = 130\n if (event.data.reason !== \"user\" && !emittedError) {\n emittedError = true\n process.exitCode = 1\n const error = { type: \"aborted\" as const, message: `Session interrupted: ${event.data.reason}` }\n if (!emit(\"error\", time, { error })) UI.error(error.message)\n }\n return\n }\n if (event.type === \"session.execution.succeeded\") return\n }\n }\n\n const projectedMessages = async () => {\n const messages: SessionMessageInfo[] = []\n let cursor: string | undefined\n while (true) {\n const page = await input.client.message.list(\n cursor\n ? { sessionID: input.sessionID, limit: 200, cursor }\n : { sessionID: input.sessionID, limit: 200, order: \"desc\" },\n )\n for (const message of page.data) {\n if (message.id === messageID) return { found: true, messages: messages.toReversed() }\n messages.push(message)\n }\n cursor = page.cursor.next ?? undefined\n if (!cursor) return { found: false, messages: [] }\n }\n }\n\n const reconcile = async () => {\n const projected = await projectedMessages()\n for (const message of projected.messages) {\n if (message.type !== \"assistant\") continue\n const timestamp = message.time.completed ?? message.time.created\n let textOrdinal = 0\n let reasoningOrdinal = 0\n for (const item of message.content) {\n if (item.type === \"text\") {\n const ordinal = textOrdinal++\n const key = contentKey(message.id, ordinal)\n const rendered = renderedText.get(key) ?? \"\"\n if (rendered === item.text || !item.text.startsWith(rendered)) continue\n const text = item.text.slice(rendered.length)\n writeText(\n {\n id: projectedPartID(message.id, `text-${ordinal}`),\n sessionID: input.sessionID,\n messageID: message.id,\n type: \"text\",\n text,\n time: { start: message.time.created, end: timestamp },\n },\n timestamp,\n )\n renderedText.set(key, item.text)\n continue\n }\n if (item.type === \"reasoning\") {\n const ordinal = reasoningOrdinal++\n if (!input.thinking) continue\n const key = contentKey(message.id, ordinal)\n const rendered = renderedReasoning.get(key) ?? \"\"\n if (rendered === item.text || !item.text.startsWith(rendered)) continue\n const text = item.text.slice(rendered.length)\n const part = {\n id: projectedPartID(message.id, `reasoning-${ordinal}`),\n sessionID: input.sessionID,\n messageID: message.id,\n type: \"reasoning\",\n text,\n metadata: item.state,\n time: { start: message.time.created, end: timestamp },\n }\n renderedReasoning.set(key, item.text)\n writeReasoning(part, timestamp)\n continue\n }\n\n const key = toolKey(message.id, item.id)\n if (renderedTools.has(key) || item.state.status === \"streaming\" || item.state.status === \"running\") continue\n const part: MiniToolPart = {\n id: projectedPartID(message.id, `tool-${item.id}`),\n sessionID: input.sessionID,\n messageID: message.id,\n type: \"tool\",\n callID: item.id,\n tool: item.name,\n state:\n item.state.status === \"completed\"\n ? {\n status: \"completed\",\n input: item.state.input,\n output: toolOutputText(item.name, item.state.content),\n title: item.name,\n metadata: { metadata: item.state.metadata, content: item.state.content },\n time: { start: item.time.ran ?? item.time.created, end: item.time.completed ?? timestamp },\n }\n : {\n status: \"error\",\n input: item.state.input,\n error: item.state.error.message,\n metadata: { metadata: item.state.metadata, content: item.state.content },\n time: { start: item.time.ran ?? item.time.created, end: item.time.completed ?? timestamp },\n },\n }\n renderedTools.add(key)\n if (emit(\"tool_use\", timestamp, { part })) continue\n if (item.state.status === \"completed\") {\n await input.renderTool(item)\n continue\n }\n if (item.state.content && toolOutputText(item.name, item.state.content).trim()) {\n await input.renderTool({\n ...item,\n state: {\n status: \"completed\",\n input: item.state.input,\n metadata: item.state.metadata,\n content: item.state.content,\n },\n })\n }\n await input.renderToolError(item)\n UI.error(item.state.error.message)\n }\n\n if (message.error && !emittedError) {\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", timestamp, { error: message.error })) UI.error(message.error.message)\n }\n }\n return {\n found: projected.found,\n responded: projected.messages.some((message) => message.type === \"assistant\"),\n }\n }\n\n const interrupt = () => {\n if (interrupted) process.exit(130)\n interrupted = true\n process.exitCode = 130\n admission?.abort()\n void input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n }\n process.on(\"SIGINT\", interrupt)\n\n let completed: Promise<void> | undefined\n try {\n if (input.agent) {\n await input.client.session.switchAgent({ sessionID: input.sessionID, agent: input.agent })\n }\n const selected = input.model\n ? { providerID: input.model.providerID, id: input.model.modelID, variant: input.variant }\n : input.variant\n ? await input.client.session\n .get({ sessionID: input.sessionID })\n .then((result) => result.model)\n .then(async (model) => {\n if (model) return { ...model, variant: input.variant }\n const result = await input.client.model.default()\n const fallback = result.data\n return fallback ? { providerID: fallback.providerID, id: fallback.id, variant: input.variant } : undefined\n })\n : undefined\n if (input.variant && !selected) throw new Error(\"Cannot select a variant before selecting a model\")\n if (selected) {\n await input.client.session.switchModel({ sessionID: input.sessionID, model: selected })\n }\n\n const prepared = await Promise.all(input.files.map(prepareFile))\n if (interrupted) return\n submitted = true\n completed = consume()\n admission = new AbortController()\n const response = await input.client.session\n .prompt(\n {\n sessionID: input.sessionID,\n id: messageID,\n text: [input.message, ...prepared.flatMap((file) => (file.text ? [file.text] : []))].join(\"\\n\\n\"),\n files: prepared.flatMap((file) => (file.attachment ? [file.attachment] : [])),\n delivery: \"steer\",\n },\n { signal: admission.signal },\n )\n .catch(async (error) => {\n if (interrupted) {\n await input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n }\n controller.abort()\n await completed?.catch(() => {})\n if (interrupted || emittedError) return undefined\n throw error\n })\n admission = undefined\n if (!response) return\n if (interrupted) await input.client.session.interrupt({ sessionID: input.sessionID }).catch(() => {})\n\n const [permissions, forms, globals] = await Promise.all([\n input.client.permission.list({ sessionID: input.sessionID }).catch(() => undefined),\n input.client.form.list({ sessionID: input.sessionID }).catch(() => undefined),\n input.attached\n ? Promise.resolve(undefined)\n : input.client.form.request\n .list({\n location: { directory: input.location.directory, workspace: input.location.workspaceID },\n })\n .catch(() => undefined),\n ])\n await Promise.all([\n ...(permissions ?? []).map(replyPermission),\n ...(forms ?? []).map(cancelForm),\n ...(globals && sameLocation(globals.location, input.location)\n ? globals.data.filter((form) => form.sessionID === GLOBAL_FORM_SESSION_ID).map(cancelForm)\n : []),\n ])\n if (input.compatibility === \"v1\") {\n await completed\n return\n }\n\n const waiting = input.client.session.wait({ sessionID: input.sessionID })\n await Promise.race([waiting, completed.then(() => waiting)])\n finalizing = true\n const projected = await reconcile()\n if (\n !projected.responded &&\n !interrupted &&\n !permissionRejected &&\n !formCancelled &&\n !emittedError &&\n !prePromotionError\n ) {\n await completed\n }\n if (!projected.found && !interrupted && !permissionRejected && !formCancelled && !emittedError) {\n const error = prePromotionError ?? { type: \"unknown\", message: \"Prompt was not promoted\" }\n emittedError = true\n process.exitCode = 1\n if (!emit(\"error\", Date.now(), { error })) UI.error(error.message)\n }\n } finally {\n process.off(\"SIGINT\", interrupt)\n controller.abort()\n if (input.compatibility === \"v1\") await stream.return?.(undefined).catch(() => {})\n else void stream.return?.(undefined).catch(() => {})\n }\n}\n\nfunction sameLocation(left: LocationRef | undefined, right: LocationRef) {\n return !!left && left.directory === right.directory && left.workspaceID === right.workspaceID\n}\n\nfunction formRequestOptions(location: LocationRef | undefined): [] | [{ headers: Record<string, string> }] {\n if (!location) return []\n return [\n {\n headers: {\n \"x-opencode-directory\": encodeURIComponent(location.directory),\n ...(location.workspaceID ? { \"x-opencode-workspace\": location.workspaceID } : {}),\n },\n },\n ]\n}\n\nfunction formAlreadySettled(error: unknown) {\n return !!error && typeof error === \"object\" && Reflect.get(error, \"_tag\") === \"FormAlreadySettledError\"\n}\n\nfunction partID(eventID: string) {\n return `prt_${eventID.replace(/^evt_/, \"\")}`\n}\n\nfunction toolKey(messageID: string, callID: string) {\n return `${messageID}\\u0000${callID}`\n}\n\nfunction contentKey(messageID: string, ordinal: number) {\n return `${messageID}\\u0000${ordinal}`\n}\n\nfunction projectedPartID(messageID: string, part: string) {\n return `prt_${messageID.replace(/^msg_/, \"\")}_${part}`\n}\n\nfunction fallbackTool(event: {\n id: string\n created: number\n data: { assistantMessageID: string; callID: string }\n}): ToolState {\n return {\n id: partID(event.id),\n timestamp: toMillis(event.created),\n assistantMessageID: event.data.assistantMessageID,\n tool: \"tool\",\n input: {},\n metadata: {},\n content: [],\n }\n}\n\nfunction toMillis(value: unknown) {\n if (typeof value === \"number\") return value\n if (typeof value === \"string\") return new Date(value).getTime()\n return Date.now()\n}\n\nasync function prepareFile(file: File) {\n if (file.mime !== \"text/plain\") {\n const uri = file.url.startsWith(\"data:\")\n ? file.url\n : `data:${file.mime};base64,${(await readFile(new URL(file.url))).toString(\"base64\")}`\n return { attachment: { uri, name: file.filename } }\n }\n const content = file.url.startsWith(\"data:\")\n ? Buffer.from(file.url.slice(file.url.indexOf(\",\") + 1), \"base64\").toString(\"utf8\")\n : await readFile(new URL(file.url), \"utf8\")\n return { text: `<file name=\"${file.filename}\">\\n${content}\\n</file>` }\n}\n", | ||
| "import { EOL } from \"node:os\"\n\nexport const Style = {\n TEXT_DIM: \"\\x1b[90m\",\n TEXT_NORMAL: \"\\x1b[0m\",\n TEXT_WARNING_BOLD: \"\\x1b[93m\\x1b[1m\",\n TEXT_DANGER_BOLD: \"\\x1b[91m\\x1b[1m\",\n}\n\nexport function println(...message: string[]) {\n process.stderr.write(message.join(\" \") + EOL)\n}\n\nlet blank = false\n\nexport function empty() {\n if (blank) return\n println(Style.TEXT_NORMAL)\n blank = true\n}\n\nexport function error(message: string) {\n if (message.startsWith(\"Error: \")) message = message.slice(\"Error: \".length)\n println(Style.TEXT_DANGER_BOLD + \"Error: \" + Style.TEXT_NORMAL + message)\n}\n\nexport * as UI from \"./ui\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "67814733884F203064756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+vercel@2.0.39+d6123d32214422cb/node_modules/@ai-sdk/vercel/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/vercel-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport { OpenAICompatibleChatLanguageModel } from \"@ai-sdk/openai-compatible\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/version.ts\nvar VERSION = true ? \"2.0.39\" : \"0.0.0-test\";\n\n// src/vercel-provider.ts\nfunction createVercel(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.v0.dev/v1\"\n );\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"VERCEL_API_KEY\",\n description: \"Vercel\"\n })}`,\n ...options.headers\n },\n `ai-sdk/vercel/${VERSION}`\n );\n const getCommonModelConfig = (modelType) => ({\n provider: `vercel.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createChatModel = (modelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n ...getCommonModelConfig(\"chat\")\n });\n };\n const provider = (modelId) => createChatModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.languageModel = createChatModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar vercel = createVercel();\nexport {\n VERSION,\n createVercel,\n vercel\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": ";4UAYA,SAAI,OAAiB,cAGrB,cAAS,MAAY,MAAC,OAAU,CAAC,EAAG,CAClC,IAAI,EACJ,IAAM,EAAU,GACb,EAAK,EAAQ,UAAY,KAAO,EAAK,uBACxC,EACM,EAAa,IAAM,EACvB,CACE,cAAe,UAAU,EAAW,CAClC,OAAQ,EAAQ,OAChB,wBAAyB,iBACzB,YAAa,QACf,CAAC,OACE,EAAQ,OACb,EACA,iBAAiB,GACnB,EACM,EAAuB,CAAC,KAAe,CAC3C,SAAU,UAAU,IACpB,IAAK,EAAG,UAAW,GAAG,IAAU,IAChC,QAAS,EACT,MAAO,EAAQ,KACjB,GACM,EAAkB,CAAC,IAAY,CACnC,OAAO,IAAI,EAAkC,EAAS,IACjD,EAAqB,MAAM,CAChC,CAAC,GAEG,EAAW,CAAC,IAAY,EAAgB,CAAO,EAUrD,OATA,EAAS,qBAAuB,KAChC,EAAS,cAAgB,EACzB,EAAS,eAAiB,CAAC,IAAY,CACrC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,gBAAiB,CAAC,GAErE,EAAS,mBAAqB,EAAS,eACvC,EAAS,WAAa,CAAC,IAAY,CACjC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,YAAa,CAAC,GAE1D,EAET,IAAI,EAAS,EAAa", | ||
| "debugId": "33EE0A9DE8ED3E1D64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/azure.ts"], | ||
| "sourcesContent": [ | ||
| "import { Auth } from \"../route/auth\"\nimport { type AtLeastOne, type ProviderAuthOption } from \"../route/auth-options\"\nimport type { Route as RouteDef, RouteDefaultsInput } from \"../route/client\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { ProviderID, type ModelID } from \"../schema\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport * as OpenAIResponses from \"../protocols/openai-responses\"\nimport { withOpenAIOptions, type OpenAIProviderOptionsInput } from \"./openai-options\"\n\nexport const id = ProviderID.make(\"azure\")\nconst routeAuth = Auth.remove(\"authorization\")\n\n// Azure needs the customer's resource URL; supply either `resourceName`\n// (helper builds the URL) or `baseURL` directly.\ntype AzureURL = AtLeastOne<{ readonly resourceName: string; readonly baseURL: string }>\n\nexport type ModelOptions = AzureURL &\n RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly apiVersion?: string\n readonly queryParams?: Record<string, string>\n readonly useCompletionUrls?: boolean\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\nexport type Config = ModelOptions\n\nexport type Settings = ProviderPackage.Settings &\n AzureURL & {\n readonly apiKey?: string\n readonly apiVersion?: string\n readonly queryParams?: Readonly<Record<string, string>>\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nconst resourceBaseURL = (resourceName: string) => `https://${resourceName.trim()}.openai.azure.com/openai/v1`\n\nconst responsesRoute = OpenAIResponses.route.with({\n id: \"azure-openai-responses\",\n provider: id,\n auth: routeAuth,\n endpoint: {\n query: { \"api-version\": \"v1\" },\n },\n})\n\nconst chatRoute = OpenAIChat.route.with({\n id: \"azure-openai-chat\",\n provider: id,\n auth: routeAuth,\n endpoint: {\n query: { \"api-version\": \"v1\" },\n },\n})\n\nexport const routes = [responsesRoute, chatRoute]\n\nconst defaults = (input: Config) => {\n const {\n apiKey: _,\n apiVersion: _apiVersion,\n resourceName: _resourceName,\n useCompletionUrls: _useCompletionUrls,\n baseURL: _baseURL,\n queryParams: _queryParams,\n ...rest\n } = input\n if (\"auth\" in rest) {\n const { auth: _, ...withoutAuth } = rest\n return withoutAuth\n }\n return rest\n}\n\nconst auth = (input: Config) => {\n if (\"auth\" in input && input.auth) return input.auth\n return Auth.remove(\"authorization\").andThen(\n Auth.optional(\"apiKey\" in input ? input.apiKey : undefined, \"apiKey\")\n .orElse(Auth.config(\"AZURE_OPENAI_API_KEY\"))\n .pipe(Auth.header(\"api-key\")),\n )\n}\n\nconst configuredRoute = <Body, Prepared>(route: RouteDef<Body, Prepared>, input: Config) =>\n route.with({\n auth: auth(input),\n endpoint: {\n // AtLeastOne guarantees at least one is set; baseURL wins if both are.\n baseURL: input.baseURL ?? resourceBaseURL(input.resourceName!),\n query: {\n ...(input.apiVersion ? { \"api-version\": input.apiVersion } : {}),\n ...input.queryParams,\n },\n },\n })\n\nexport const configure = (input: Config) => {\n const configuredResponsesRoute = configuredRoute(responsesRoute, input)\n const configuredChatRoute = configuredRoute(chatRoute, input)\n const modelDefaults = defaults(input)\n\n const responses = (modelID: string | ModelID) =>\n configuredResponsesRoute\n .with(withOpenAIOptions(modelID, modelDefaults))\n .model<OpenAIProviderOptionsInput>({ id: modelID })\n\n const chat = (modelID: string | ModelID) =>\n configuredChatRoute\n .with(withOpenAIOptions(modelID, modelDefaults))\n .model<OpenAIProviderOptionsInput>({ id: modelID })\n\n return {\n id,\n model: (modelID: string | ModelID) => (input.useCompletionUrls === true ? chat(modelID) : responses(modelID)),\n responses,\n chat,\n configure,\n }\n}\n\nexport const provider = {\n id,\n configure,\n}\n\nconst config = (settings: Settings): Config => {\n const common = {\n apiKey: settings.apiKey,\n apiVersion: settings.apiVersion,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n queryParams: settings.queryParams === undefined ? undefined : { ...settings.queryParams },\n }\n if (settings.baseURL !== undefined) return { ...common, baseURL: settings.baseURL }\n if (settings.resourceName !== undefined) return { ...common, resourceName: settings.resourceName }\n throw new Error(\"Azure requires resourceName or baseURL\")\n}\n\nexport const responsesModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => configure(config(settings)).responses(modelID)\nexport const chatModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => configure(config(settings)).chat(modelID)\nexport const model = responsesModel\n" | ||
| ], | ||
| "mappings": ";yMASO,SAAM,OAAK,OAAW,KAAK,OAAO,EACnC,EAAY,EAAK,OAAO,eAAe,EAwBvC,EAAkB,CAAC,IAAyB,WAAW,EAAa,KAAK,+BAEzE,EAAiC,EAAM,KAAK,CAChD,GAAI,yBACJ,SAAU,EACV,KAAM,EACN,SAAU,CACR,MAAO,CAAE,cAAe,IAAK,CAC/B,CACF,CAAC,EAEK,EAAuB,EAAM,KAAK,CACtC,GAAI,oBACJ,SAAU,EACV,KAAM,EACN,SAAU,CACR,MAAO,CAAE,cAAe,IAAK,CAC/B,CACF,CAAC,EAEY,EAAS,CAAC,EAAgB,CAAS,EAE1C,EAAW,CAAC,IAAkB,CAClC,IACE,OAAQ,EACR,WAAY,EACZ,aAAc,EACd,kBAAmB,EACnB,QAAS,EACT,YAAa,KACV,GACD,EACJ,GAAI,SAAU,EAAM,CAClB,IAAQ,KAAM,KAAM,GAAgB,EACpC,OAAO,EAET,OAAO,GAGH,EAAO,CAAC,IAAkB,CAC9B,GAAI,SAAU,GAAS,EAAM,KAAM,OAAO,EAAM,KAChD,OAAO,EAAK,OAAO,eAAe,EAAE,QAClC,EAAK,SAAS,WAAY,EAAQ,EAAM,OAAS,OAAW,QAAQ,EACjE,OAAO,EAAK,OAAO,sBAAsB,CAAC,EAC1C,KAAK,EAAK,OAAO,SAAS,CAAC,CAChC,GAGI,EAAkB,CAAiB,EAAiC,IACxE,EAAM,KAAK,CACT,KAAM,EAAK,CAAK,EAChB,SAAU,CAER,QAAS,EAAM,SAAW,EAAgB,EAAM,YAAa,EAC7D,MAAO,IACD,EAAM,WAAa,CAAE,cAAe,EAAM,UAAW,EAAI,CAAC,KAC3D,EAAM,WACX,CACF,CACF,CAAC,EAEU,EAAY,CAAC,IAAkB,CAC1C,IAAM,EAA2B,EAAgB,EAAgB,CAAK,EAChE,EAAsB,EAAgB,EAAW,CAAK,EACtD,EAAgB,EAAS,CAAK,EAE9B,EAAY,CAAC,IACjB,EACG,KAAK,EAAkB,EAAS,CAAa,CAAC,EAC9C,MAAkC,CAAE,GAAI,CAAQ,CAAC,EAEhD,EAAO,CAAC,IACZ,EACG,KAAK,EAAkB,EAAS,CAAa,CAAC,EAC9C,MAAkC,CAAE,GAAI,CAAQ,CAAC,EAEtD,MAAO,CACL,KACA,MAAO,CAAC,IAA+B,EAAM,oBAAsB,GAAO,EAAK,CAAO,EAAI,EAAU,CAAO,EAC3G,YACA,OACA,WACF,GAGW,EAAW,CACtB,KACA,WACF,EAEM,EAAS,CAAC,IAA+B,CAC7C,IAAM,EAAS,CACb,OAAQ,EAAS,OACjB,WAAY,EAAS,WACrB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,gBAAiB,EAAS,gBAC1B,YAAa,EAAS,cAAgB,OAAY,OAAY,IAAK,EAAS,WAAY,CAC1F,EACA,GAAI,EAAS,UAAY,OAAW,MAAO,IAAK,EAAQ,QAAS,EAAS,OAAQ,EAClF,GAAI,EAAS,eAAiB,OAAW,MAAO,IAAK,EAAQ,aAAc,EAAS,YAAa,EACjG,MAAU,MAAM,wCAAwC,GAG7C,EAA4F,CACvG,EACA,IACG,EAAU,EAAO,CAAQ,CAAC,EAAE,UAAU,CAAO,EACrC,EAAuF,CAClG,EACA,IACG,EAAU,EAAO,CAAQ,CAAC,EAAE,KAAK,CAAO,EAChC,EAAQ", | ||
| "debugId": "F3DBE34E2AB9F53C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+groq@3.0.31+d6123d32214422cb/node_modules/@ai-sdk/groq/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/groq-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/groq-chat-language-model.ts\nimport {\n InvalidResponseDataError\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n isParsableJson,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\n\n// src/convert-groq-usage.ts\nfunction convertGroqUsage(usage) {\n var _a, _b, _c, _d;\n if (usage == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const promptTokens = (_a = usage.prompt_tokens) != null ? _a : 0;\n const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;\n const reasoningTokens = (_d = (_c = usage.completion_tokens_details) == null ? void 0 : _c.reasoning_tokens) != null ? _d : void 0;\n const textTokens = reasoningTokens != null ? completionTokens - reasoningTokens : completionTokens;\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: textTokens,\n reasoning: reasoningTokens\n },\n raw: usage\n };\n}\n\n// src/convert-to-groq-chat-messages.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nimport { convertToBase64 } from \"@ai-sdk/provider-utils\";\nfunction convertToGroqChatMessages(prompt) {\n var _a;\n const messages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\": {\n if (content.length === 1 && content[0].type === \"text\") {\n messages.push({ role: \"user\", content: content[0].text });\n break;\n }\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"file\": {\n if (!part.mediaType.startsWith(\"image/\")) {\n throw new UnsupportedFunctionalityError({\n functionality: \"Non-image file content parts\"\n });\n }\n const mediaType = part.mediaType === \"image/*\" ? \"image/jpeg\" : part.mediaType;\n return {\n type: \"image_url\",\n image_url: {\n url: part.data instanceof URL ? part.data.toString() : `data:${mediaType};base64,${convertToBase64(part.data)}`\n }\n };\n }\n }\n })\n });\n break;\n }\n case \"assistant\": {\n let text = \"\";\n let reasoning = \"\";\n const toolCalls = [];\n for (const part of content) {\n switch (part.type) {\n // groq supports reasoning for tool-calls in multi-turn conversations\n // https://github.com/vercel/ai/issues/7860\n case \"reasoning\": {\n reasoning += part.text;\n break;\n }\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input)\n }\n });\n break;\n }\n }\n }\n messages.push({\n role: \"assistant\",\n content: text,\n ...reasoning.length > 0 ? { reasoning } : null,\n ...toolCalls.length > 0 ? { tool_calls: toolCalls } : null\n });\n break;\n }\n case \"tool\": {\n for (const toolResponse of content) {\n if (toolResponse.type === \"tool-approval-response\") {\n continue;\n }\n const output = toolResponse.output;\n let contentValue;\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n contentValue = output.value;\n break;\n case \"execution-denied\":\n contentValue = (_a = output.reason) != null ? _a : \"Tool execution denied.\";\n break;\n case \"content\":\n case \"json\":\n case \"error-json\":\n contentValue = JSON.stringify(output.value);\n break;\n }\n messages.push({\n role: \"tool\",\n tool_call_id: toolResponse.toolCallId,\n content: contentValue\n });\n }\n break;\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return messages;\n}\n\n// src/get-response-metadata.ts\nfunction getResponseMetadata({\n id,\n model,\n created\n}) {\n return {\n id: id != null ? id : void 0,\n modelId: model != null ? model : void 0,\n timestamp: created != null ? new Date(created * 1e3) : void 0\n };\n}\n\n// src/groq-chat-options.ts\nimport { z } from \"zod/v4\";\nvar groqLanguageModelOptions = z.object({\n reasoningFormat: z.enum([\"parsed\", \"raw\", \"hidden\"]).optional(),\n /**\n * Specifies the reasoning effort level for model inference.\n * @see https://console.groq.com/docs/reasoning#reasoning-effort\n */\n reasoningEffort: z.enum([\"none\", \"default\", \"low\", \"medium\", \"high\"]).optional(),\n /**\n * Whether to enable parallel function calling during tool use. Default to true.\n */\n parallelToolCalls: z.boolean().optional(),\n /**\n * A unique identifier representing your end-user, which can help OpenAI to\n * monitor and detect abuse. Learn more.\n */\n user: z.string().optional(),\n /**\n * Whether to use structured outputs.\n *\n * @default true\n */\n structuredOutputs: z.boolean().optional(),\n /**\n * Whether to use strict JSON schema validation.\n * When true, the model uses constrained decoding to guarantee schema compliance.\n * Only used when structured outputs are enabled and a schema is provided.\n *\n * @default true\n */\n strictJsonSchema: z.boolean().optional(),\n /**\n * Service tier for the request.\n * - 'on_demand': Default tier with consistent performance and fairness\n * - 'flex': Higher throughput tier optimized for workloads that can handle occasional request failures\n * - 'auto': Uses on_demand rate limits, then falls back to flex tier if exceeded\n *\n * @default 'on_demand'\n */\n serviceTier: z.enum([\"on_demand\", \"flex\", \"auto\"]).optional()\n});\n\n// src/groq-error.ts\nimport { z as z2 } from \"zod/v4\";\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nvar groqErrorDataSchema = z2.object({\n error: z2.object({\n message: z2.string(),\n type: z2.string()\n })\n});\nvar groqFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: groqErrorDataSchema,\n errorToMessage: (data) => data.error.message\n});\n\n// src/groq-prepare-tools.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\n\n// src/groq-browser-search-models.ts\nvar BROWSER_SEARCH_SUPPORTED_MODELS = [\n \"openai/gpt-oss-20b\",\n \"openai/gpt-oss-120b\"\n];\nfunction isBrowserSearchSupportedModel(modelId) {\n return BROWSER_SEARCH_SUPPORTED_MODELS.includes(modelId);\n}\nfunction getSupportedModelsString() {\n return BROWSER_SEARCH_SUPPORTED_MODELS.join(\", \");\n}\n\n// src/groq-prepare-tools.ts\nfunction prepareTools({\n tools,\n toolChoice,\n modelId\n}) {\n tools = (tools == null ? void 0 : tools.length) ? tools : void 0;\n const toolWarnings = [];\n if (tools == null) {\n return { tools: void 0, toolChoice: void 0, toolWarnings };\n }\n const groqTools2 = [];\n for (const tool of tools) {\n if (tool.type === \"provider\") {\n if (tool.id === \"groq.browser_search\") {\n if (!isBrowserSearchSupportedModel(modelId)) {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`,\n details: `Browser search is only supported on the following models: ${getSupportedModelsString()}. Current model: ${modelId}`\n });\n } else {\n groqTools2.push({\n type: \"browser_search\"\n });\n }\n } else {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`\n });\n }\n } else {\n groqTools2.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...tool.strict != null ? { strict: tool.strict } : {}\n }\n });\n }\n }\n if (toolChoice == null) {\n return { tools: groqTools2, toolChoice: void 0, toolWarnings };\n }\n const type = toolChoice.type;\n switch (type) {\n case \"auto\":\n case \"none\":\n case \"required\":\n return { tools: groqTools2, toolChoice: type, toolWarnings };\n case \"tool\":\n return {\n tools: groqTools2,\n toolChoice: {\n type: \"function\",\n function: {\n name: toolChoice.toolName\n }\n },\n toolWarnings\n };\n default: {\n const _exhaustiveCheck = type;\n throw new UnsupportedFunctionalityError2({\n functionality: `tool choice type: ${_exhaustiveCheck}`\n });\n }\n }\n}\n\n// src/map-groq-finish-reason.ts\nfunction mapGroqFinishReason(finishReason) {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n return \"length\";\n case \"content_filter\":\n return \"content-filter\";\n case \"function_call\":\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"other\";\n }\n}\n\n// src/groq-chat-language-model.ts\nvar GroqChatLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.supportedUrls = {\n \"image/*\": [/^https?:\\/\\/.*$/]\n };\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n stream,\n tools,\n toolChoice,\n providerOptions\n }) {\n var _a, _b, _c;\n const warnings = [];\n const groqOptions = await parseProviderOptions({\n provider: \"groq\",\n providerOptions,\n schema: groqLanguageModelOptions\n });\n const structuredOutputs = (_a = groqOptions == null ? void 0 : groqOptions.structuredOutputs) != null ? _a : true;\n const strictJsonSchema = (_b = groqOptions == null ? void 0 : groqOptions.strictJsonSchema) != null ? _b : true;\n if (topK != null) {\n warnings.push({ type: \"unsupported\", feature: \"topK\" });\n }\n if ((responseFormat == null ? void 0 : responseFormat.type) === \"json\" && responseFormat.schema != null && !structuredOutputs) {\n warnings.push({\n type: \"unsupported\",\n feature: \"responseFormat\",\n details: \"JSON response format schema is only supported with structuredOutputs\"\n });\n }\n const {\n tools: groqTools2,\n toolChoice: groqToolChoice,\n toolWarnings\n } = prepareTools({ tools, toolChoice, modelId: this.modelId });\n return {\n args: {\n // model id:\n model: this.modelId,\n // model specific settings:\n user: groqOptions == null ? void 0 : groqOptions.user,\n parallel_tool_calls: groqOptions == null ? void 0 : groqOptions.parallelToolCalls,\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: stopSequences,\n seed,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? structuredOutputs && responseFormat.schema != null ? {\n type: \"json_schema\",\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: (_c = responseFormat.name) != null ? _c : \"response\",\n description: responseFormat.description\n }\n } : { type: \"json_object\" } : void 0,\n // provider options:\n reasoning_format: groqOptions == null ? void 0 : groqOptions.reasoningFormat,\n reasoning_effort: groqOptions == null ? void 0 : groqOptions.reasoningEffort,\n service_tier: groqOptions == null ? void 0 : groqOptions.serviceTier,\n // messages:\n messages: convertToGroqChatMessages(prompt),\n // tools:\n tools: groqTools2,\n tool_choice: groqToolChoice\n },\n warnings: [...warnings, ...toolWarnings]\n };\n }\n async doGenerate(options) {\n var _a, _b;\n const { args, warnings } = await this.getArgs({\n ...options,\n stream: false\n });\n const body = JSON.stringify(args);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: groqFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n groqChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const choice = response.choices[0];\n const content = [];\n const text = choice.message.content;\n if (text != null && text.length > 0) {\n content.push({ type: \"text\", text });\n }\n const reasoning = choice.message.reasoning;\n if (reasoning != null && reasoning.length > 0) {\n content.push({\n type: \"reasoning\",\n text: reasoning\n });\n }\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: (_a = toolCall.id) != null ? _a : generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments\n });\n }\n }\n return {\n content,\n finishReason: {\n unified: mapGroqFinishReason(choice.finish_reason),\n raw: (_b = choice.finish_reason) != null ? _b : void 0\n },\n usage: convertGroqUsage(response.usage),\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse\n },\n warnings,\n request: { body }\n };\n }\n async doStream(options) {\n const { args, warnings } = await this.getArgs({ ...options, stream: true });\n const body = JSON.stringify({ ...args, stream: true });\n const { responseHeaders, value: response } = await postJsonToApi({\n url: this.config.url({\n path: \"/chat/completions\",\n modelId: this.modelId\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...args,\n stream: true\n },\n failedResponseHandler: groqFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(groqChatChunkSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const toolCalls = [];\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n let isFirstChunk = true;\n let isActiveText = false;\n let isActiveReasoning = false;\n let providerMetadata;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n finishReason = {\n unified: \"error\",\n raw: void 0\n };\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n if (\"error\" in value) {\n finishReason = {\n unified: \"error\",\n raw: void 0\n };\n controller.enqueue({ type: \"error\", error: value.error });\n return;\n }\n if (isFirstChunk) {\n isFirstChunk = false;\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value)\n });\n }\n if (((_a = value.x_groq) == null ? void 0 : _a.usage) != null) {\n usage = value.x_groq.usage;\n }\n const choice = value.choices[0];\n if ((choice == null ? void 0 : choice.finish_reason) != null) {\n finishReason = {\n unified: mapGroqFinishReason(choice.finish_reason),\n raw: choice.finish_reason\n };\n }\n if ((choice == null ? void 0 : choice.delta) == null) {\n return;\n }\n const delta = choice.delta;\n if (delta.reasoning != null && delta.reasoning.length > 0) {\n if (!isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-start\",\n id: \"reasoning-0\"\n });\n isActiveReasoning = true;\n }\n controller.enqueue({\n type: \"reasoning-delta\",\n id: \"reasoning-0\",\n delta: delta.reasoning\n });\n }\n if (delta.content != null && delta.content.length > 0) {\n if (isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: \"reasoning-0\"\n });\n isActiveReasoning = false;\n }\n if (!isActiveText) {\n controller.enqueue({ type: \"text-start\", id: \"txt-0\" });\n isActiveText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: \"txt-0\",\n delta: delta.content\n });\n }\n if (delta.tool_calls != null) {\n if (isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: \"reasoning-0\"\n });\n isActiveReasoning = false;\n }\n for (const toolCallDelta of delta.tool_calls) {\n const index = toolCallDelta.index;\n if (toolCalls[index] == null) {\n if (toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`\n });\n }\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`\n });\n }\n if (((_b = toolCallDelta.function) == null ? void 0 : _b.name) == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`\n });\n }\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name\n });\n toolCalls[index] = {\n id: toolCallDelta.id,\n type: \"function\",\n function: {\n name: toolCallDelta.function.name,\n arguments: (_c = toolCallDelta.function.arguments) != null ? _c : \"\"\n },\n hasFinished: false\n };\n const toolCall2 = toolCalls[index];\n if (((_d = toolCall2.function) == null ? void 0 : _d.name) != null && ((_e = toolCall2.function) == null ? void 0 : _e.arguments) != null) {\n if (toolCall2.function.arguments.length > 0) {\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCall2.id,\n delta: toolCall2.function.arguments\n });\n }\n if (isParsableJson(toolCall2.function.arguments)) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCall2.id\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: (_f = toolCall2.id) != null ? _f : generateId(),\n toolName: toolCall2.function.name,\n input: toolCall2.function.arguments\n });\n toolCall2.hasFinished = true;\n }\n }\n continue;\n }\n const toolCall = toolCalls[index];\n if (toolCall.hasFinished) {\n continue;\n }\n if (((_g = toolCallDelta.function) == null ? void 0 : _g.arguments) != null) {\n toolCall.function.arguments += (_i = (_h = toolCallDelta.function) == null ? void 0 : _h.arguments) != null ? _i : \"\";\n }\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCall.id,\n delta: (_j = toolCallDelta.function.arguments) != null ? _j : \"\"\n });\n if (((_k = toolCall.function) == null ? void 0 : _k.name) != null && ((_l = toolCall.function) == null ? void 0 : _l.arguments) != null && isParsableJson(toolCall.function.arguments)) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCall.id\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: (_m = toolCall.id) != null ? _m : generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments\n });\n toolCall.hasFinished = true;\n }\n }\n }\n },\n flush(controller) {\n if (isActiveReasoning) {\n controller.enqueue({ type: \"reasoning-end\", id: \"reasoning-0\" });\n }\n if (isActiveText) {\n controller.enqueue({ type: \"text-end\", id: \"txt-0\" });\n }\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertGroqUsage(usage),\n ...providerMetadata != null ? { providerMetadata } : {}\n });\n }\n })\n ),\n request: { body },\n response: { headers: responseHeaders }\n };\n }\n};\nvar groqChatResponseSchema = z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n message: z3.object({\n content: z3.string().nullish(),\n reasoning: z3.string().nullish(),\n tool_calls: z3.array(\n z3.object({\n id: z3.string().nullish(),\n type: z3.literal(\"function\"),\n function: z3.object({\n name: z3.string(),\n arguments: z3.string()\n })\n })\n ).nullish()\n }),\n index: z3.number(),\n finish_reason: z3.string().nullish()\n })\n ),\n usage: z3.object({\n prompt_tokens: z3.number().nullish(),\n completion_tokens: z3.number().nullish(),\n total_tokens: z3.number().nullish(),\n prompt_tokens_details: z3.object({\n cached_tokens: z3.number().nullish()\n }).nullish(),\n completion_tokens_details: z3.object({\n reasoning_tokens: z3.number().nullish()\n }).nullish()\n }).nullish()\n});\nvar groqChatChunkSchema = z3.union([\n z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n delta: z3.object({\n content: z3.string().nullish(),\n reasoning: z3.string().nullish(),\n tool_calls: z3.array(\n z3.object({\n index: z3.number(),\n id: z3.string().nullish(),\n type: z3.literal(\"function\").optional(),\n function: z3.object({\n name: z3.string().nullish(),\n arguments: z3.string().nullish()\n })\n })\n ).nullish()\n }).nullish(),\n finish_reason: z3.string().nullable().optional(),\n index: z3.number()\n })\n ),\n x_groq: z3.object({\n usage: z3.object({\n prompt_tokens: z3.number().nullish(),\n completion_tokens: z3.number().nullish(),\n total_tokens: z3.number().nullish(),\n prompt_tokens_details: z3.object({\n cached_tokens: z3.number().nullish()\n }).nullish(),\n completion_tokens_details: z3.object({\n reasoning_tokens: z3.number().nullish()\n }).nullish()\n }).nullish()\n }).nullish()\n }),\n groqErrorDataSchema\n]);\n\n// src/groq-transcription-model.ts\nimport {\n combineHeaders as combineHeaders2,\n convertBase64ToUint8Array,\n createJsonResponseHandler as createJsonResponseHandler2,\n mediaTypeToExtension,\n parseProviderOptions as parseProviderOptions2,\n postFormDataToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z5 } from \"zod/v4\";\n\n// src/groq-transcription-options.ts\nimport { lazySchema, zodSchema } from \"@ai-sdk/provider-utils\";\nimport { z as z4 } from \"zod/v4\";\nvar groqTranscriptionModelOptions = lazySchema(\n () => zodSchema(\n z4.object({\n language: z4.string().nullish(),\n prompt: z4.string().nullish(),\n responseFormat: z4.string().nullish(),\n temperature: z4.number().min(0).max(1).nullish(),\n timestampGranularities: z4.array(z4.string()).nullish()\n })\n )\n);\n\n// src/groq-transcription-model.ts\nvar GroqTranscriptionModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n audio,\n mediaType,\n providerOptions\n }) {\n var _a, _b, _c, _d, _e;\n const warnings = [];\n const groqOptions = await parseProviderOptions2({\n provider: \"groq\",\n providerOptions,\n schema: groqTranscriptionModelOptions\n });\n const formData = new FormData();\n const blob = audio instanceof Uint8Array ? new Blob([audio]) : new Blob([convertBase64ToUint8Array(audio)]);\n formData.append(\"model\", this.modelId);\n const fileExtension = mediaTypeToExtension(mediaType);\n formData.append(\n \"file\",\n new File([blob], \"audio\", { type: mediaType }),\n `audio.${fileExtension}`\n );\n if (groqOptions) {\n const transcriptionModelOptions = {\n language: (_a = groqOptions.language) != null ? _a : void 0,\n prompt: (_b = groqOptions.prompt) != null ? _b : void 0,\n response_format: (_c = groqOptions.responseFormat) != null ? _c : void 0,\n temperature: (_d = groqOptions.temperature) != null ? _d : void 0,\n timestamp_granularities: (_e = groqOptions.timestampGranularities) != null ? _e : void 0\n };\n for (const key in transcriptionModelOptions) {\n const value = transcriptionModelOptions[key];\n if (value !== void 0) {\n if (Array.isArray(value)) {\n for (const item of value) {\n formData.append(`${key}[]`, String(item));\n }\n } else {\n formData.append(key, String(value));\n }\n }\n }\n }\n return {\n formData,\n warnings\n };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g;\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n const { formData, warnings } = await this.getArgs(options);\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse\n } = await postFormDataToApi({\n url: this.config.url({\n path: \"/audio/transcriptions\",\n modelId: this.modelId\n }),\n headers: combineHeaders2(this.config.headers(), options.headers),\n formData,\n failedResponseHandler: groqFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler2(\n groqTranscriptionResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n return {\n text: response.text,\n segments: (_e = (_d = response.segments) == null ? void 0 : _d.map((segment) => ({\n text: segment.text,\n startSecond: segment.start,\n endSecond: segment.end\n }))) != null ? _e : [],\n language: (_f = response.language) != null ? _f : void 0,\n durationInSeconds: (_g = response.duration) != null ? _g : void 0,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse\n }\n };\n }\n};\nvar groqTranscriptionResponseSchema = z5.object({\n text: z5.string(),\n x_groq: z5.object({\n id: z5.string()\n }),\n // additional properties are returned when `response_format: 'verbose_json'` is\n task: z5.string().nullish(),\n language: z5.string().nullish(),\n duration: z5.number().nullish(),\n segments: z5.array(\n z5.object({\n id: z5.number(),\n seek: z5.number(),\n start: z5.number(),\n end: z5.number(),\n text: z5.string(),\n tokens: z5.array(z5.number()),\n temperature: z5.number(),\n avg_logprob: z5.number(),\n compression_ratio: z5.number(),\n no_speech_prob: z5.number()\n })\n ).nullish()\n});\n\n// src/tool/browser-search.ts\nimport { createProviderToolFactory } from \"@ai-sdk/provider-utils\";\nimport { z as z6 } from \"zod/v4\";\nvar browserSearch = createProviderToolFactory({\n id: \"groq.browser_search\",\n inputSchema: z6.object({})\n});\n\n// src/groq-tools.ts\nvar groqTools = {\n browserSearch\n};\n\n// src/version.ts\nvar VERSION = true ? \"3.0.31\" : \"0.0.0-test\";\n\n// src/groq-provider.ts\nfunction createGroq(options = {}) {\n var _a;\n const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : \"https://api.groq.com/openai/v1\";\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"GROQ_API_KEY\",\n description: \"Groq\"\n })}`,\n ...options.headers\n },\n `ai-sdk/groq/${VERSION}`\n );\n const createChatModel = (modelId) => new GroqChatLanguageModel(modelId, {\n provider: \"groq.chat\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createLanguageModel = (modelId) => {\n if (new.target) {\n throw new Error(\n \"The Groq model function cannot be called with the new keyword.\"\n );\n }\n return createChatModel(modelId);\n };\n const createTranscriptionModel = (modelId) => {\n return new GroqTranscriptionModel(modelId, {\n provider: \"groq.transcription\",\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n };\n const provider = function(modelId) {\n return createLanguageModel(modelId);\n };\n provider.specificationVersion = \"v3\";\n provider.languageModel = createLanguageModel;\n provider.chat = createChatModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n provider.transcription = createTranscriptionModel;\n provider.transcriptionModel = createTranscriptionModel;\n provider.tools = groqTools;\n return provider;\n}\nvar groq = createGroq();\nexport {\n VERSION,\n browserSearch,\n createGroq,\n groq\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "BCC83C49F74BC2B964756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/stop.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.stop,\n Effect.fn(\"cli.service.stop\")(function* () {\n yield* Service.stop(yield* ServiceConfig.options())\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAMA,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,UACnC,OAAO,QAAG,uBAAkB,OAAE,cAAU,OAAG,MACzC,WAAO,OAAQ,UAAK,WAAO,OAAc,aAAQ,MAAC,EACnD,CACH", | ||
| "debugId": "DE9701E7A9BDA3EC64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/route/auth-options.ts"], | ||
| "sourcesContent": [ | ||
| "import type { Config, Redacted } from \"effect\"\nimport { Auth } from \"./auth\"\n\nexport type ApiKeyMode = \"optional\" | \"required\"\n\nexport type AuthOverride = {\n readonly auth: Auth.Definition\n readonly apiKey?: never\n}\n\nexport type OptionalApiKeyAuth = {\n readonly apiKey?: string | Redacted.Redacted<string> | Config.Config<string | Redacted.Redacted<string>>\n readonly auth?: never\n}\n\nexport type RequiredApiKeyAuth = {\n readonly apiKey: string | Redacted.Redacted<string> | Config.Config<string | Redacted.Redacted<string>>\n readonly auth?: never\n}\n\nexport type ProviderAuthOption<Mode extends ApiKeyMode> =\n | AuthOverride\n | (Mode extends \"optional\" ? OptionalApiKeyAuth : RequiredApiKeyAuth)\n\nexport type ModelOptions<Base, Mode extends ApiKeyMode> = Omit<Base, \"apiKey\" | \"auth\"> & ProviderAuthOption<Mode>\n\nexport type ModelArgs<Base, Mode extends ApiKeyMode> = Mode extends \"optional\"\n ? readonly [options?: ModelOptions<Base, Mode>]\n : readonly [options: ModelOptions<Base, Mode>]\n\nexport type ModelFactory<Base, Mode extends ApiKeyMode, Model> = (id: string, ...args: ModelArgs<Base, Mode>) => Model\n\n/**\n * Require at least one of the keys in `T`. Use for option shapes where any\n * subset of fields is acceptable but at least one must be present (e.g. Azure\n * accepts `resourceName` or `baseURL`).\n */\nexport type AtLeastOne<T> = {\n [K in keyof T]: Required<Pick<T, K>> & Partial<Omit<T, K>>\n}[keyof T]\n\n/**\n * Standard bearer-auth resolution for providers: honor an explicit `auth`\n * override, otherwise resolve `apiKey` (option > config var) and apply it as\n * a bearer token.\n */\nexport const bearer = (\n options: ProviderAuthOption<\"optional\">,\n envVar: string | ReadonlyArray<string>,\n): Auth.Definition => {\n if (\"auth\" in options && options.auth) return options.auth\n return (Array.isArray(envVar) ? envVar : [envVar])\n .reduce(\n (auth, name) => auth.orElse(Auth.config(name)),\n Auth.optional(\"apiKey\" in options ? options.apiKey : undefined, \"apiKey\"),\n )\n .bearer()\n}\n\nexport * as AuthOptions from \"./auth-options\"\n" | ||
| ], | ||
| "mappings": ";kJA8CO,SAAM,EAAS,CACpB,EACA,IACoB,CACpB,GAAI,SAAU,GAAW,EAAQ,KAAM,OAAO,EAAQ,KACtD,OAAQ,MAAM,QAAQ,CAAM,EAAI,EAAS,CAAC,CAAM,GAC7C,OACC,CAAC,EAAM,IAAS,EAAK,OAAO,EAAK,OAAO,CAAI,CAAC,EAC7C,EAAK,SAAS,WAAY,EAAU,EAAQ,OAAS,OAAW,QAAQ,CAC1E,EACC,OAAO", | ||
| "debugId": "6FBBDA98249523A164756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/session.shared.ts", "../tui/src/mini/variant.shared.ts", "../tui/src/mini/theme.ts", "../tui/src/mini/mono.ts"], | ||
| "sourcesContent": [ | ||
| "import type { SessionMessageInfo, SessionMessageUser } from \"@opencode-ai/client/promise\"\nimport { promptCopy, promptSame } from \"./prompt.shared\"\nimport type { RunInput, RunPrompt } from \"./types\"\n\nconst LIMIT = 200\n\nexport type SessionMessages = SessionMessageInfo[]\n\ntype Turn = {\n prompt: RunPrompt\n provider: string | undefined\n model: string | undefined\n variant: string | undefined\n}\n\nexport type RunSession = {\n first: boolean\n turns: Turn[]\n model?: NonNullable<RunInput[\"model\"]>\n variant?: string\n}\n\nfunction messagePrompt(message: SessionMessageUser): RunPrompt {\n return {\n text: message.text,\n parts: [\n ...(message.files ?? []).map((file) => ({\n type: \"file\" as const,\n url: file.source.type === \"uri\" ? file.source.uri : `data:${file.mime};base64,${file.data}`,\n mime: file.mime,\n filename: file.name,\n source: file.mention\n ? {\n type: \"file\",\n path: file.name ?? (file.source.type === \"uri\" ? file.source.uri : \"inline attachment\"),\n text: { start: file.mention.start, end: file.mention.end, value: file.mention.text },\n }\n : undefined,\n })),\n ...(message.agents ?? []).map((agent) => ({\n type: \"agent\" as const,\n name: agent.name,\n source: agent.mention\n ? { start: agent.mention.start, end: agent.mention.end, value: agent.mention.text }\n : undefined,\n })),\n ],\n }\n}\n\nexport function createSession(messages: SessionMessages): RunSession {\n return {\n first: messages.length === 0,\n turns: messages.flatMap((message) =>\n message.type === \"user\"\n ? [{ prompt: messagePrompt(message), provider: undefined, model: undefined, variant: undefined }]\n : [],\n ),\n }\n}\n\nexport async function resolveCurrentSession(\n sdk: RunInput[\"sdk\"],\n sessionID: string,\n signal?: AbortSignal,\n limit = LIMIT,\n): Promise<RunSession> {\n const [response, session] = await Promise.all([\n sdk.message.list({ sessionID, limit, order: \"desc\" }, ...requestOptions(signal)),\n sdk.session.get({ sessionID }, ...requestOptions(signal)),\n ])\n const current = createSession(response.data.toReversed())\n return {\n ...current,\n turns: current.turns.map((turn) => ({\n ...turn,\n provider: session.model?.providerID,\n model: session.model?.id,\n variant: session.model?.variant,\n })),\n ...(session.model && {\n model: { providerID: session.model.providerID, modelID: session.model.id },\n variant: session.model.variant,\n }),\n }\n}\n\nfunction requestOptions(signal?: AbortSignal): [] | [{ signal: AbortSignal }] {\n return signal ? [{ signal }] : []\n}\n\nexport function sessionHistory(session: RunSession, limit = LIMIT): RunPrompt[] {\n return session.turns\n .map((turn) => turn.prompt)\n .filter((prompt) => prompt.text.trim())\n .filter((prompt, index, prompts) => index === 0 || !promptSame(prompts[index - 1], prompt))\n .map(promptCopy)\n .slice(-limit)\n}\n\nexport function sessionVariant(session: RunSession, model: RunInput[\"model\"]): string | undefined {\n if (!model) return\n if (session.model?.providerID === model.providerID && session.model.modelID === model.modelID) return session.variant\n\n return session.turns.findLast((turn) => turn.provider === model.providerID && turn.model === model.modelID)?.variant\n}\n", | ||
| "// Model variant resolution and persistence.\n//\n// Variants are provider-specific reasoning effort levels (e.g., \"high\", \"max\").\n// Resolution priority: CLI --variant flag > valid session history > saved preference.\n//\n// The saved variant persists across sessions in ~/.local/state/opencode/model.json\n// so your last-used variant sticks. Cycling (ctrl+t) updates both the active\n// variant and the persisted file.\nimport { createSession, sessionVariant, type RunSession, type SessionMessages } from \"./session.shared\"\nimport type { RunInput, RunProvider } from \"./types\"\nimport { cycleModelVariant, normalizeModelVariant } from \"../model-preference\"\n\nexport function modelInfo(providers: RunProvider[] | undefined, model: NonNullable<RunInput[\"model\"]>) {\n const provider = providers?.find((item) => item.id === model.providerID)\n return {\n provider: provider?.name ?? model.providerID,\n model: provider?.models[model.modelID]?.name ?? model.modelID,\n }\n}\n\nexport function formatModelLabel(\n model: NonNullable<RunInput[\"model\"]>,\n variant: string | undefined,\n providers?: RunProvider[],\n): string {\n const names = modelInfo(providers, model)\n const label = variant ? ` · ${variant}` : \"\"\n return `${names.model} · ${names.provider}${label}`\n}\n\nexport function cycleVariant(current: string | undefined, variants: string[]): string | undefined {\n return cycleModelVariant(current, variants)\n}\n\nexport function pickVariant(model: RunInput[\"model\"], input: RunSession | SessionMessages): string | undefined {\n return sessionVariant(Array.isArray(input) ? createSession(input) : input, model)\n}\n\nfunction fitVariant(value: string | undefined, variants: string[]): string | undefined {\n const normalized = normalizeModelVariant(value)\n return normalized && (variants.length === 0 || variants.includes(normalized)) ? normalized : undefined\n}\n\n// Picks the active variant. CLI flag wins, then valid session history, then the\n// saved preference. Saved and session values are dropped when the provider no\n// longer offers them.\nexport function resolveVariant(\n input: string | undefined,\n session: string | undefined,\n saved: string | undefined,\n variants: string[],\n): string | undefined {\n if (input !== undefined) {\n return normalizeModelVariant(input)\n }\n\n return fitVariant(session, variants) ?? fitVariant(saved, variants)\n}\n", | ||
| "// Theme resolution for direct interactive mode.\n//\n// Derives scrollback and footer colors from the terminal's actual palette.\n// resolveRunTheme() queries the renderer for the terminal's palette,\n// detects dark/light mode, builds a small system theme locally, and maps it to\n// the run footer + scrollback color model. Falls back to a hardcoded dark-mode\n// palette if detection fails.\nimport { RGBA, SyntaxStyle, type CliRenderer, type ColorInput, type TerminalColors } from \"@opentui/core\"\nimport type { TuiThemeCurrent } from \"@opencode-ai/plugin/v1/tui\"\nimport { ansiToRgba } from \"../theme/color\"\nimport { resolveThemeColors } from \"../theme/resolve\"\nimport { terminalMode } from \"../theme/system\"\nimport type { ThemeV1Json } from \"../theme/v1\"\nimport type { EntryKind, RunTuiConfig } from \"./types\"\n\ntype Tone = {\n body: ColorInput\n start?: ColorInput\n}\n\nexport type RunEntryTheme = Record<EntryKind, Tone>\n\nexport type RunSplashTheme = {\n left: ColorInput\n right: ColorInput\n leftShadow: ColorInput\n}\n\nexport type RunFooterTheme = {\n highlight: ColorInput\n selected: ColorInput\n selectedText: ColorInput\n warning: ColorInput\n error: ColorInput\n muted: ColorInput\n text: ColorInput\n status: ColorInput\n statusAccent: ColorInput\n shade: ColorInput\n surface: ColorInput\n pane: ColorInput\n border: ColorInput\n line: ColorInput\n}\n\nexport type RunBlockTheme = {\n text: ColorInput\n muted: ColorInput\n syntax?: SyntaxStyle\n diffRemoved: ColorInput\n diffAddedBg: ColorInput\n diffRemovedBg: ColorInput\n diffContextBg: ColorInput\n diffHighlightAdded: ColorInput\n diffHighlightRemoved: ColorInput\n diffLineNumber: ColorInput\n diffAddedLineNumberBg: ColorInput\n diffRemovedLineNumberBg: ColorInput\n}\n\nexport type RunTheme = {\n background: ColorInput\n footer: RunFooterTheme\n entry: RunEntryTheme\n splash: RunSplashTheme\n block: RunBlockTheme\n}\n\ntype ThemeColor = Exclude<keyof TuiThemeCurrent, \"thinkingOpacity\">\n\ntype SharedSyntaxTheme = TuiThemeCurrent & {\n _hasSelectedListItemText: boolean\n}\n\nexport const transparent = RGBA.fromValues(0, 0, 0, 0)\n\nfunction alpha(color: RGBA, value: number): RGBA {\n return RGBA.fromValues(color.r, color.g, color.b, Math.max(0, Math.min(1, value)))\n}\n\nfunction rgba(hex: string, value?: number): RGBA {\n const color = RGBA.fromHex(hex)\n return value === undefined ? color : alpha(color, value)\n}\n\nfunction colorMode(bg: RGBA): \"dark\" | \"light\" {\n return luminance(bg) > 0.5 ? \"light\" : \"dark\"\n}\n\nfunction luminance(color: RGBA): number {\n return 0.299 * color.r + 0.587 * color.g + 0.114 * color.b\n}\n\nfunction fade(color: RGBA, base: RGBA, fallback: number, scale: number, limit: number): RGBA {\n if (color.a === 0) {\n return RGBA.fromValues(color.r, color.g, color.b, Math.max(0, Math.min(1, fallback)))\n }\n\n const target = Math.min(limit, color.a * scale)\n const mix = Math.min(1, target / color.a)\n\n return RGBA.fromValues(\n base.r + (color.r - base.r) * mix,\n base.g + (color.g - base.g) * mix,\n base.b + (color.b - base.b) * mix,\n color.a,\n )\n}\n\nfunction tint(base: RGBA, overlay: RGBA, value: number): RGBA {\n return RGBA.fromInts(\n Math.round((base.r + (overlay.r - base.r) * value) * 255),\n Math.round((base.g + (overlay.g - base.g) * value) * 255),\n Math.round((base.b + (overlay.b - base.b) * value) * 255),\n )\n}\n\nfunction chroma(color: RGBA) {\n return Math.max(color.r, color.g, color.b) - Math.min(color.r, color.g, color.b)\n}\n\nfunction indexedPalette(colors: TerminalColors, size: number = Math.max(colors.palette.length, 16)): RGBA[] {\n return Array.from({ length: size }, (_, index) => {\n const value = colors.palette[index]\n return RGBA.fromIndex(index, value ? RGBA.fromHex(value) : ansiToRgba(index))\n })\n}\n\nfunction srgbToLinear(value: number): number {\n if (value <= 0.04045) {\n return value / 12.92\n }\n\n return ((value + 0.055) / 1.055) ** 2.4\n}\n\nfunction oklab(color: RGBA) {\n const r = srgbToLinear(color.r)\n const g = srgbToLinear(color.g)\n const b = srgbToLinear(color.b)\n\n const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b)\n const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b)\n const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b)\n\n return {\n l: 0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,\n a: 1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,\n b: 0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,\n }\n}\n\nfunction nearestIndexed(indexed: RGBA[], rgba: RGBA): RGBA {\n const target = oklab(rgba)\n const hit = indexed.reduce(\n (best, item) => {\n const sample = oklab(item)\n const dl = sample.l - target.l\n const da = sample.a - target.a\n const db = sample.b - target.b\n const dist = dl * dl * 2 + da * da + db * db\n if (dist >= best.dist) return best\n return {\n dist,\n item,\n }\n },\n {\n dist: Number.POSITIVE_INFINITY,\n item: indexed[0]!,\n },\n )\n\n return RGBA.clone(hit.item)\n}\n\nfunction paletteColor(colors: TerminalColors, index: number): RGBA {\n const value = colors.palette[index]\n return value ? RGBA.fromHex(value) : ansiToRgba(index)\n}\n\nfunction splashShadow(indexed: RGBA[], base: RGBA, overlay: RGBA, value: number): RGBA {\n const mixed = tint(base, overlay, value)\n return nearestIndexed(indexed, mixed)\n}\n\nexport function resolveTheme(theme: ThemeV1Json, pick: \"dark\" | \"light\"): TuiThemeCurrent {\n const resolved = resolveThemeColors(theme, pick, (code) => RGBA.fromIndex(code, ansiToRgba(code)))\n return {\n ...resolved.theme,\n thinkingOpacity: resolved.thinkingOpacity,\n }\n}\n\nfunction generateGrayScale(bg: RGBA, isDark: boolean, map: (rgba: RGBA) => RGBA): Record<number, RGBA> {\n const r = bg.r * 255\n const g = bg.g * 255\n const b = bg.b * 255\n const lum = 0.299 * r + 0.587 * g + 0.114 * b\n const cast = 0.25 * (1 - chroma(bg)) ** 2\n\n const gray = (level: number) => {\n const factor = level / 12\n\n if (isDark && lum < 10) {\n const value = Math.floor(factor * 0.4 * 255)\n return map(RGBA.fromInts(value, value, value))\n }\n\n if (!isDark && lum > 245) {\n const value = Math.floor(255 - factor * 0.4 * 255)\n return map(RGBA.fromInts(value, value, value))\n }\n\n const value = isDark ? lum + (255 - lum) * factor * 0.4 : lum * (1 - factor * 0.4)\n const tone = RGBA.fromInts(Math.floor(value), Math.floor(value), Math.floor(value))\n if (cast === 0) return map(tone)\n\n const ratio = lum === 0 ? 0 : value / lum\n return map(\n tint(\n tone,\n RGBA.fromInts(\n Math.floor(Math.max(0, Math.min(r * ratio, 255))),\n Math.floor(Math.max(0, Math.min(g * ratio, 255))),\n Math.floor(Math.max(0, Math.min(b * ratio, 255))),\n ),\n cast,\n ),\n )\n }\n\n return Object.fromEntries(Array.from({ length: 12 }, (_, index) => [index + 1, gray(index + 1)]))\n}\n\nfunction generateMutedTextColor(bg: RGBA, isDark: boolean, map: (rgba: RGBA) => RGBA): RGBA {\n const lum = 0.299 * bg.r * 255 + 0.587 * bg.g * 255 + 0.114 * bg.b * 255\n const gray = isDark\n ? lum < 10\n ? 180\n : Math.min(Math.floor(160 + lum * 0.3), 200)\n : lum > 245\n ? 75\n : Math.max(Math.floor(100 - (255 - lum) * 0.2), 60)\n\n return map(RGBA.fromInts(gray, gray, gray))\n}\n\nexport function generateSystem(colors: TerminalColors, pick: \"dark\" | \"light\"): ThemeV1Json {\n const bg_snapshot = RGBA.fromHex(colors.defaultBackground ?? colors.palette[0]!)\n const fg_snapshot = RGBA.fromHex(colors.defaultForeground ?? colors.palette[7]!)\n const bg = RGBA.defaultBackground(bg_snapshot)\n const fg = RGBA.defaultForeground(fg_snapshot)\n const isDark = pick === \"dark\"\n\n const color = (index: number) => paletteColor(colors, index)\n\n const grays = generateGrayScale(bg_snapshot, isDark, (rgba) => rgba)\n const textMuted = generateMutedTextColor(bg_snapshot, isDark, (rgba) => rgba)\n\n const ansi = {\n red: color(1),\n green: color(2),\n yellow: color(3),\n blue: color(4),\n magenta: color(5),\n cyan: color(6),\n red_bright: color(9),\n green_bright: color(10),\n }\n\n const diff_alpha = isDark ? 0.22 : 0.14\n const diff_context_bg = grays[2]\n const primary = ansi.cyan\n const secondary = ansi.magenta\n\n return {\n theme: {\n primary,\n secondary,\n accent: primary,\n error: ansi.red,\n warning: ansi.yellow,\n success: ansi.green,\n info: ansi.cyan,\n text: fg,\n textMuted,\n selectedListItemText: bg,\n background: alpha(bg, 0),\n backgroundPanel: grays[2],\n backgroundElement: grays[3],\n backgroundMenu: grays[3],\n borderSubtle: grays[6],\n border: grays[7],\n borderActive: grays[8],\n diffAdded: ansi.green,\n diffRemoved: ansi.red,\n diffContext: grays[7],\n diffHunkHeader: grays[7],\n diffHighlightAdded: ansi.green_bright,\n diffHighlightRemoved: ansi.red_bright,\n diffAddedBg: tint(bg_snapshot, ansi.green, diff_alpha),\n diffRemovedBg: tint(bg_snapshot, ansi.red, diff_alpha),\n diffContextBg: diff_context_bg,\n diffLineNumber: textMuted,\n diffAddedLineNumberBg: tint(diff_context_bg, ansi.green, diff_alpha),\n diffRemovedLineNumberBg: tint(diff_context_bg, ansi.red, diff_alpha),\n markdownText: fg,\n markdownHeading: fg,\n markdownLink: ansi.blue,\n markdownLinkText: ansi.cyan,\n markdownCode: ansi.green,\n markdownBlockQuote: ansi.yellow,\n markdownEmph: ansi.yellow,\n markdownStrong: fg,\n markdownHorizontalRule: grays[7],\n markdownListItem: ansi.blue,\n markdownListEnumeration: ansi.cyan,\n markdownImage: ansi.blue,\n markdownImageText: ansi.cyan,\n markdownCodeBlock: fg,\n syntaxComment: textMuted,\n syntaxKeyword: ansi.magenta,\n syntaxFunction: ansi.blue,\n syntaxVariable: fg,\n syntaxString: ansi.green,\n syntaxNumber: ansi.yellow,\n syntaxType: ansi.cyan,\n syntaxOperator: ansi.cyan,\n syntaxPunctuation: fg,\n },\n }\n}\n\nfunction quantizeColor(indexed: RGBA[], rgba: RGBA): RGBA {\n if (rgba.a === 0 || rgba.intent === \"default\" || rgba.intent === \"indexed\") {\n return RGBA.clone(rgba)\n }\n\n return nearestIndexed(indexed, rgba)\n}\n\nfunction quantizeTheme(theme: TuiThemeCurrent, indexed: RGBA[]): TuiThemeCurrent {\n const resolved = Object.fromEntries(\n Object.entries(theme)\n .filter(([key]) => key !== \"thinkingOpacity\")\n .map(([key, value]) => [key, quantizeColor(indexed, value as RGBA)]),\n ) as Partial<Record<ThemeColor, RGBA>>\n\n return {\n ...(resolved as Record<ThemeColor, RGBA>),\n thinkingOpacity: theme.thinkingOpacity,\n }\n}\n\nfunction splashTheme(theme: TuiThemeCurrent, indexed: RGBA[]): RunSplashTheme {\n const left = nearestIndexed(indexed, theme.textMuted)\n const right = nearestIndexed(indexed, theme.text)\n return {\n left,\n right,\n leftShadow: splashShadow(indexed, theme.background, left, 0.14),\n }\n}\n\nfunction map(\n footerTheme: TuiThemeCurrent,\n scrollbackTheme: TuiThemeCurrent,\n splash: RunSplashTheme,\n syntax?: SyntaxStyle,\n): RunTheme {\n const footerBackground = alpha(footerTheme.background, 1)\n const footerMode = colorMode(footerBackground)\n const shade = fade(footerTheme.backgroundMenu, footerTheme.background, 0.12, 0.56, 0.72)\n const surface = fade(footerTheme.backgroundMenu, footerTheme.background, 0.18, 0.76, 0.9)\n const line = fade(footerTheme.backgroundMenu, footerTheme.background, 0.24, 0.9, 0.98)\n const statusBase = tint(footerBackground, rgba(\"#000000\"), footerMode === \"dark\" ? 0.13 : 0.06)\n const statusAccentBase =\n footerMode === \"dark\" ? tint(footerBackground, rgba(\"#ffffff\"), 0.06) : tint(statusBase, rgba(\"#000000\"), 0.04)\n const collapsedStatus = footerMode === \"dark\" && luminance(statusBase) <= 0.04\n // Pure-black backgrounds need a slight lift or the row disappears into the terminal background.\n const status = collapsedStatus ? tint(statusBase, statusAccentBase, 0.7) : statusBase\n const statusAccent = collapsedStatus ? tint(status, rgba(\"#ffffff\"), 0.06) : statusAccentBase\n\n return {\n background: footerTheme.background,\n footer: {\n highlight: footerTheme.primary,\n selected: footerTheme.backgroundElement,\n selectedText: footerTheme.selectedListItemText,\n warning: footerTheme.warning,\n error: footerTheme.error,\n muted: footerTheme.textMuted,\n text: footerTheme.text,\n status,\n statusAccent,\n shade,\n surface,\n pane: footerTheme.backgroundMenu,\n border: footerTheme.border,\n line,\n },\n entry: {\n system: {\n body: scrollbackTheme.textMuted,\n },\n user: {\n body: scrollbackTheme.primary,\n },\n assistant: {\n body: scrollbackTheme.text,\n },\n reasoning: {\n body: scrollbackTheme.textMuted,\n },\n tool: {\n body: scrollbackTheme.text,\n start: scrollbackTheme.textMuted,\n },\n error: {\n body: scrollbackTheme.error,\n },\n },\n splash,\n block: {\n text: scrollbackTheme.text,\n muted: scrollbackTheme.textMuted,\n syntax,\n diffRemoved: scrollbackTheme.diffRemoved,\n diffAddedBg: transparent,\n diffRemovedBg: transparent,\n diffContextBg: transparent,\n diffHighlightAdded: scrollbackTheme.diffHighlightAdded,\n diffHighlightRemoved: scrollbackTheme.diffHighlightRemoved,\n diffLineNumber: scrollbackTheme.diffLineNumber,\n diffAddedLineNumberBg: scrollbackTheme.diffAddedLineNumberBg,\n diffRemovedLineNumberBg: scrollbackTheme.diffRemovedLineNumberBg,\n },\n }\n}\n\nconst seed = {\n highlight: RGBA.fromIndex(6, rgba(\"#38bdf8\")),\n muted: RGBA.fromIndex(8, rgba(\"#64748b\")),\n text: RGBA.defaultForeground(rgba(\"#f8fafc\")),\n panel: rgba(\"#0f172a\"),\n success: RGBA.fromIndex(2, rgba(\"#22c55e\")),\n warning: RGBA.fromIndex(3, rgba(\"#f59e0b\")),\n error: RGBA.fromIndex(1, rgba(\"#ef4444\")),\n}\n\nfunction tone(body: ColorInput, start?: ColorInput): Tone {\n return {\n body,\n start,\n }\n}\n\nconst fallbackSplashIndexed = Array.from({ length: 256 }, (_, index) => RGBA.fromIndex(index))\nconst fallbackSplashLeft = RGBA.fromIndex(67)\nconst fallbackSplashRight = RGBA.fromIndex(110)\n\nexport const RUN_THEME_FALLBACK: RunTheme = {\n background: RGBA.fromValues(0, 0, 0, 0),\n footer: {\n highlight: seed.highlight,\n selected: seed.text,\n selectedText: seed.panel,\n warning: seed.warning,\n error: seed.error,\n muted: seed.muted,\n text: seed.text,\n status: tint(seed.panel, rgba(\"#000000\"), 0.12),\n statusAccent: tint(seed.panel, rgba(\"#ffffff\"), 0.06),\n shade: alpha(seed.panel, 0.68),\n surface: alpha(seed.panel, 0.86),\n pane: seed.panel,\n border: seed.muted,\n line: alpha(seed.panel, 0.96),\n },\n entry: {\n system: tone(seed.muted),\n user: tone(seed.highlight),\n assistant: tone(seed.text),\n reasoning: tone(seed.muted),\n tool: tone(seed.text, seed.muted),\n error: tone(seed.error),\n },\n splash: {\n left: fallbackSplashLeft,\n right: fallbackSplashRight,\n leftShadow: splashShadow(fallbackSplashIndexed, RGBA.fromValues(0, 0, 0, 0), fallbackSplashLeft, 0.14),\n },\n block: {\n text: seed.text,\n muted: seed.muted,\n diffRemoved: seed.error,\n diffAddedBg: alpha(seed.success, 0.18),\n diffRemovedBg: alpha(seed.error, 0.18),\n diffContextBg: alpha(seed.panel, 0.72),\n diffHighlightAdded: seed.success,\n diffHighlightRemoved: seed.error,\n diffLineNumber: seed.muted,\n diffAddedLineNumberBg: alpha(seed.success, 0.12),\n diffRemovedLineNumberBg: alpha(seed.error, 0.12),\n },\n}\n\nfunction monoTheme(mode: \"dark\" | \"light\"): RunTheme {\n const foreground = RGBA.defaultForeground(mode === \"light\" ? \"#000000\" : \"#ffffff\")\n const background = RGBA.defaultBackground(mode === \"light\" ? \"#ffffff\" : \"#000000\")\n return {\n background,\n footer: {\n highlight: foreground,\n selected: background,\n selectedText: foreground,\n warning: foreground,\n error: foreground,\n muted: foreground,\n text: foreground,\n status: background,\n statusAccent: background,\n shade: background,\n surface: background,\n pane: background,\n border: foreground,\n line: background,\n },\n entry: {\n system: tone(foreground),\n user: tone(foreground),\n assistant: tone(foreground),\n reasoning: tone(foreground),\n tool: tone(foreground),\n error: tone(foreground),\n },\n splash: {\n left: foreground,\n right: foreground,\n leftShadow: background,\n },\n block: {\n text: foreground,\n muted: foreground,\n diffRemoved: foreground,\n diffAddedBg: background,\n diffRemovedBg: background,\n diffContextBg: background,\n diffHighlightAdded: foreground,\n diffHighlightRemoved: foreground,\n diffLineNumber: foreground,\n diffAddedLineNumberBg: background,\n diffRemovedLineNumberBg: background,\n },\n }\n}\n\nexport const RUN_THEME_MONO = monoTheme(\"dark\")\nconst RUN_THEME_MONO_LIGHT = monoTheme(\"light\")\n\nexport async function resolveRunTheme(\n renderer: CliRenderer,\n config?: RunTuiConfig[\"theme\"],\n mono = false,\n): Promise<RunTheme> {\n if (mono) {\n const mode =\n config?.mode === \"light\" || config?.mode === \"dark\"\n ? config.mode\n : (renderer.themeMode ?? (await renderer.waitForThemeMode(300)))\n return mode === \"light\" ? RUN_THEME_MONO_LIGHT : RUN_THEME_MONO\n }\n try {\n const colors = await renderer.getPalette({\n size: 256,\n })\n const bg = colors.defaultBackground ?? colors.palette[0]\n if (!bg) {\n return RUN_THEME_FALLBACK\n }\n\n // Palette-only terminal reloads can leave renderer.themeMode stale, but\n // ANSI slot zero is not the terminal background when OSC 11 is absent.\n const pick =\n config?.mode === \"dark\" || config?.mode === \"light\"\n ? config.mode\n : (terminalMode(colors) ?? renderer.themeMode ?? colorMode(RGBA.fromHex(bg)))\n const { generateSyntax } = await import(\"../theme\")\n const indexed = indexedPalette(colors, 256)\n const footerTheme = resolveTheme(generateSystem(colors, pick), pick)\n const scrollbackTheme = quantizeTheme(footerTheme, indexed)\n const syntaxTheme: SharedSyntaxTheme = {\n ...scrollbackTheme,\n _hasSelectedListItemText: true,\n }\n return map(footerTheme, scrollbackTheme, splashTheme(scrollbackTheme, indexed), generateSyntax(syntaxTheme))\n } catch {\n return RUN_THEME_FALLBACK\n }\n}\n", | ||
| "import {\n BoxRenderable,\n CodeRenderable,\n MarkdownRenderable,\n RGBA,\n Renderable,\n StyledText,\n TextRenderable,\n TextTableRenderable,\n isStyledText,\n stringToStyledText,\n type BorderCharacters,\n type CliRendererExternalOutputEvent,\n type TreeSitterClient,\n} from \"@opentui/core\"\n\nconst prefixes: Record<number, string> = {\n 0x2192: \"->\",\n 0x2190: \"<-\",\n 0x2731: \"*\",\n 0x2699: \"*\",\n 0x2716: \"!\",\n 0x2717: \"!\",\n 0x25c8: \"*\",\n 0x25c9: \"*\",\n 0x27f3: \"*\",\n}\n\nconst markdown: Record<number, string> = {\n ...prefixes,\n 0x00a0: \" \",\n 0x00b7: \"-\",\n 0x2010: \"-\",\n 0x2011: \"-\",\n 0x2012: \"-\",\n 0x2013: \"-\",\n 0x2014: \"--\",\n 0x2018: \"'\",\n 0x2019: \"'\",\n 0x201c: '\"',\n 0x201d: '\"',\n 0x2022: \"*\",\n 0x2026: \"...\",\n 0x2191: \"up\",\n 0x2193: \"down\",\n}\n\nconst asciiBorder: BorderCharacters = {\n topLeft: \"+\",\n topRight: \"+\",\n bottomLeft: \"+\",\n bottomRight: \"+\",\n horizontal: \"-\",\n vertical: \"|\",\n topT: \"+\",\n bottomT: \"+\",\n leftT: \"+\",\n rightT: \"+\",\n cross: \"+\",\n}\n\nconst hooked = new WeakSet<Renderable>()\n\nexport const monoMarkdownTableOptions = {\n style: \"columns\" as const,\n widthMode: \"content\" as const,\n borders: false,\n}\n\nexport function monoMarkdownRenderable(renderable: MarkdownRenderable): void {\n monoRenderable(renderable)\n}\n\nfunction monoRenderable(renderable: Renderable): void {\n if (hooked.has(renderable)) return\n hooked.add(renderable)\n // Markdown reconciles nested lists and tables without calling renderNode.\n // Hook the actual tree so future descendants are transformed before layout.\n const add = renderable.add.bind(renderable)\n renderable.add = (child, index) => {\n if (child instanceof Renderable) monoRenderable(child)\n return add(child, index)\n }\n\n if (renderable instanceof BoxRenderable) renderable.customBorderChars = asciiBorder\n if (renderable instanceof CodeRenderable) monoCode(renderable)\n if (renderable instanceof TextRenderable) renderable.content = monoStyledText(renderable.content)\n if (renderable instanceof TextTableRenderable) monoTable(renderable)\n renderable.getChildren().forEach(monoRenderable)\n}\n\nfunction monoCode(renderable: CodeRenderable): void {\n const onChunks = renderable.onChunks\n const prose = renderable.filetype === \"markdown\" && onChunks !== undefined\n renderable.onChunks = async (chunks, context) => monoChunks((await onChunks?.(chunks, context)) ?? chunks)\n renderable.treeSitterClient = monoTreeSitter(renderable.treeSitterClient)\n\n const initialDescriptor = Object.getOwnPropertyDescriptor(CodeRenderable.prototype, \"initialStyledText\")\n const contentDescriptor = Object.getOwnPropertyDescriptor(CodeRenderable.prototype, \"content\")\n if (!initialDescriptor?.set || !contentDescriptor?.get || !contentDescriptor.set) return\n const initialSetter = initialDescriptor.set.bind(renderable)\n const contentGetter = contentDescriptor.get.bind(renderable)\n const contentSetter = contentDescriptor.set.bind(renderable)\n const initial = Reflect.get(renderable, \"_initialStyledText\")\n Object.defineProperty(renderable, \"initialStyledText\", {\n configurable: true,\n set(value: StyledText | undefined) {\n initialSetter(value ? monoStyledText(value) : value)\n },\n })\n Object.defineProperty(renderable, \"content\", {\n configurable: true,\n get: contentGetter,\n set(value: string) {\n if (!prose || !isStyledText(Reflect.get(renderable, \"_initialStyledText\"))) {\n renderable.drawUnstyledText = true\n renderable.initialStyledText = stringToStyledText(value)\n }\n contentSetter(value)\n },\n })\n\n if (isStyledText(initial)) {\n renderable.initialStyledText = initial\n } else {\n renderable.drawUnstyledText = true\n renderable.initialStyledText = stringToStyledText(renderable.content)\n }\n if (!renderable.drawUnstyledText) return\n\n // Refresh the eager buffer with the transformed initial text. Highlighted\n // chunks continue through onChunks without changing the Markdown source.\n const content = renderable.content\n renderable.content = \"\"\n renderable.content = content\n}\n\nfunction monoTreeSitter(client: TreeSitterClient): TreeSitterClient {\n return new Proxy(client, {\n get(target, property) {\n if (property !== \"highlightOnce\") return Reflect.get(target, property, target)\n // Keep parser failures on the chunk path instead of OpenTUI's raw-text fallback.\n return (...args: Parameters<TreeSitterClient[\"highlightOnce\"]>) =>\n target.highlightOnce(...args).catch(() => ({ highlights: [] }))\n },\n })\n}\n\nfunction monoTable(renderable: TextTableRenderable): void {\n const descriptor = Object.getOwnPropertyDescriptor(TextTableRenderable.prototype, \"content\")\n if (!descriptor?.get || !descriptor.set) return\n const cells = new WeakMap<StyledText[\"chunks\"], StyledText[\"chunks\"]>()\n const content = renderable.content\n Object.defineProperty(renderable, \"content\", {\n configurable: true,\n get: () => descriptor.get!.call(renderable),\n set: (value: TextTableRenderable[\"content\"]) => {\n descriptor.set!.call(\n renderable,\n value.map((row) =>\n row.map((cell) => {\n if (!cell) return cell\n const cached = cells.get(cell)\n if (cached) return cached\n const next = monoChunks(cell)\n cells.set(cell, next)\n return next\n }),\n ),\n )\n },\n })\n renderable.content = content\n}\n\nfunction monoStyledText(value: StyledText): StyledText {\n return new StyledText(monoChunks(value.chunks))\n}\n\nfunction monoChunks(value: StyledText[\"chunks\"]): StyledText[\"chunks\"] {\n return value.map((chunk) => ({ ...chunk, text: monoText(chunk.text) }))\n}\n\nfunction monoText(value: string): string {\n return value.replace(/[^\\t\\n\\x20-\\x7e]/gu, (char) => markdown[char.codePointAt(0)!] ?? \"?\")\n}\n\nexport function monoSnapshot(event: CliRendererExternalOutputEvent): void {\n const buffers = event.snapshot.buffers\n const chars = buffers.char\n for (let index = 0; index < chars.length; index += 1) {\n const point = chars[index]\n if (point <= 0x7f) continue\n const offset = index * 4\n event.snapshot.setCell(\n index % event.snapshot.width,\n Math.floor(index / event.snapshot.width),\n monoCell(point),\n RGBA.fromArray(buffers.fg.subarray(offset, offset + 4)),\n RGBA.fromArray(buffers.bg.subarray(offset, offset + 4)),\n buffers.attributes[index],\n )\n }\n}\n\nfunction monoCell(point: number): string {\n const kind = point >>> 30\n if (kind === 2) return \"?\"\n if (kind === 3) return \" \"\n if (point === 0x2500) return \"-\"\n if (point === 0x2502) return \"|\"\n return markdown[point]?.[0] ?? \"?\"\n}\n\nexport function monoPrefix(value: string, mono: boolean): string {\n if (!mono) return value\n const point = value.codePointAt(0)\n if (point === undefined) return value\n const prefix = prefixes[point]\n if (!prefix) return value\n return prefix + value.slice(point > 0xffff ? 2 : 1)\n}\n\nexport function monoToolText(value: string, mono: boolean): string {\n const result = monoPrefix(value, mono)\n if (!mono) return result\n const separator = ` ${String.fromCodePoint(0xb7)} `\n const index = result.lastIndexOf(separator)\n if (index === -1) return result\n const head = result.slice(0, index)\n if (!head.includes(\" completed\") && head !== \"patch\" && !/^\\d+ questions$/.test(head)) return result\n return result.slice(0, index) + \" - \" + result.slice(index + separator.length)\n}\n\nexport function monoShortcut(value: string, mono: boolean): string {\n if (!mono) return value\n return value\n .replaceAll(String.fromCodePoint(0x2192), \"right\")\n .replaceAll(String.fromCodePoint(0x2190), \"left\")\n .replaceAll(String.fromCodePoint(0x2191), \"up\")\n .replaceAll(String.fromCodePoint(0x2193), \"down\")\n}\n\nexport function monoTruncate(value: string, width: number, mono: boolean): string {\n if (!mono || value.length <= width) return value\n if (width <= 3) return \".\".repeat(Math.max(0, width))\n return value.slice(0, width - 3) + \"...\"\n}\n\nexport function monoTruncateMiddle(value: string, width: number, mono: boolean): string {\n if (!mono || value.length <= width) return value\n if (width <= 3) return \".\".repeat(Math.max(0, width))\n const available = width - 3\n const left = Math.ceil(available / 2)\n return value.slice(0, left) + \"...\" + value.slice(value.length - (available - left))\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "ADD0FD8794751D5064756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/anthropic-messages.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Schema } from \"effect\"\nimport { Tool } from \"@opencode-ai/schema/tool\"\nimport { Route } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n LLMError,\n LLMEvent,\n mergeJsonRecords,\n Usage,\n type CacheHint,\n type FinishReasonDetails,\n type FinishReason,\n type JsonSchema,\n type LLMRequest,\n type MediaPart,\n type ProviderOptions,\n type ProviderMetadata,\n type ToolCallPart,\n type ToolDefinition,\n type ToolResultPart,\n} from \"../schema\"\nimport { JsonObject, optionalArray, optionalNull, ProviderShared } from \"./shared\"\nimport { classifyProviderFailure } from \"../provider-error\"\nimport * as Cache from \"./utils/cache\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\nimport { ToolStream } from \"./utils/tool-stream\"\n\nconst ADAPTER = \"anthropic-messages\"\nconst MEDIA_MIMES = new Set<string>([...ProviderShared.IMAGE_MIMES, ...ProviderShared.PDF_MIMES])\nexport const DEFAULT_BASE_URL = \"https://api.anthropic.com/v1\"\nexport const PATH = \"/messages\"\n\nexport type ThinkingInput =\n | {\n readonly type: \"adaptive\"\n readonly display?: \"summarized\" | \"omitted\"\n }\n | {\n readonly type: \"disabled\"\n }\n | ({ readonly type: \"enabled\" } & (\n | { readonly budgetTokens: number; readonly budget_tokens?: number }\n | { readonly budgetTokens?: number; readonly budget_tokens: number }\n ))\n\nexport interface OptionsInput {\n readonly [key: string]: unknown\n readonly thinking?: ThinkingInput\n readonly effort?: string\n}\n\nexport type ProviderOptionsInput = ProviderOptions & {\n readonly anthropic?: OptionsInput\n}\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\nconst AnthropicCacheControl = Schema.Struct({\n type: Schema.tag(\"ephemeral\"),\n ttl: Schema.optional(Schema.Literals([\"5m\", \"1h\"])),\n})\n\nconst AnthropicTextBlock = Schema.Struct({\n type: Schema.tag(\"text\"),\n text: Schema.String,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicTextBlock = Schema.Schema.Type<typeof AnthropicTextBlock>\n\nconst AnthropicImageBlock = Schema.Struct({\n type: Schema.tag(\"image\"),\n source: Schema.Struct({\n type: Schema.tag(\"base64\"),\n media_type: Schema.String,\n data: Schema.String,\n }),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicImageBlock = Schema.Schema.Type<typeof AnthropicImageBlock>\n\nconst AnthropicDocumentBlock = Schema.Struct({\n type: Schema.tag(\"document\"),\n source: Schema.Struct({\n type: Schema.tag(\"base64\"),\n media_type: Schema.Literal(\"application/pdf\"),\n data: Schema.String,\n }),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicDocumentBlock = Schema.Schema.Type<typeof AnthropicDocumentBlock>\n\nconst AnthropicThinkingBlock = Schema.Struct({\n type: Schema.tag(\"thinking\"),\n thinking: Schema.String,\n signature: Schema.optional(Schema.String),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\n\n// Safety-filtered thinking arrives as an opaque encrypted `data` payload with\n// no visible text. It must round-trip verbatim so multi-turn thinking + tool\n// use conversations keep their reasoning continuity.\nconst AnthropicRedactedThinkingBlock = Schema.Struct({\n type: Schema.tag(\"redacted_thinking\"),\n data: Schema.String,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\n\nconst AnthropicToolUseBlock = Schema.Struct({\n type: Schema.tag(\"tool_use\"),\n id: Schema.String,\n name: Schema.String,\n input: Schema.Unknown,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicToolUseBlock = Schema.Schema.Type<typeof AnthropicToolUseBlock>\n\nconst AnthropicServerToolUseBlock = Schema.Struct({\n type: Schema.tag(\"server_tool_use\"),\n id: Schema.String,\n name: Schema.String,\n input: Schema.Unknown,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicServerToolUseBlock = Schema.Schema.Type<typeof AnthropicServerToolUseBlock>\n\n// Server tool result blocks: web_search_tool_result, code_execution_tool_result,\n// and web_fetch_tool_result. The provider executes the tool and inlines the\n// structured result into the assistant turn — there is no client tool_result\n// round-trip. We round-trip the structured `content` payload as opaque JSON so\n// the next request can echo it back when continuing the conversation.\nconst AnthropicServerToolResultType = Schema.Literals([\n \"web_search_tool_result\",\n \"code_execution_tool_result\",\n \"web_fetch_tool_result\",\n])\ntype AnthropicServerToolResultType = Schema.Schema.Type<typeof AnthropicServerToolResultType>\n\nconst AnthropicServerToolResultBlock = Schema.Struct({\n type: AnthropicServerToolResultType,\n tool_use_id: Schema.String,\n content: Schema.Unknown,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicServerToolResultBlock = Schema.Schema.Type<typeof AnthropicServerToolResultBlock>\n\n// Anthropic accepts either a plain string or an ordered array of text, image, and\n// document blocks inside `tool_result.content`. The array form keeps media as native\n// model input instead of JSON-stringifying base64 into prompt text.\nconst AnthropicToolResultContent = Schema.Union([AnthropicTextBlock, AnthropicImageBlock, AnthropicDocumentBlock])\n\nconst AnthropicToolResultBlock = Schema.Struct({\n type: Schema.tag(\"tool_result\"),\n tool_use_id: Schema.String,\n content: Schema.Union([Schema.String, Schema.Array(AnthropicToolResultContent)]),\n is_error: Schema.optional(Schema.Boolean),\n cache_control: Schema.optional(AnthropicCacheControl),\n})\n\nconst AnthropicUserBlock = Schema.Union([\n AnthropicTextBlock,\n AnthropicImageBlock,\n AnthropicDocumentBlock,\n AnthropicToolResultBlock,\n])\ntype AnthropicUserBlock = Schema.Schema.Type<typeof AnthropicUserBlock>\nconst AnthropicAssistantBlock = Schema.Union([\n AnthropicTextBlock,\n AnthropicThinkingBlock,\n AnthropicRedactedThinkingBlock,\n AnthropicToolUseBlock,\n AnthropicServerToolUseBlock,\n AnthropicServerToolResultBlock,\n])\ntype AnthropicAssistantBlock = Schema.Schema.Type<typeof AnthropicAssistantBlock>\ntype AnthropicToolResultBlock = Schema.Schema.Type<typeof AnthropicToolResultBlock>\n\nconst AnthropicMessage = Schema.Union([\n Schema.Struct({ role: Schema.Literal(\"user\"), content: Schema.Array(AnthropicUserBlock) }),\n Schema.Struct({ role: Schema.Literal(\"assistant\"), content: Schema.Array(AnthropicAssistantBlock) }),\n Schema.Struct({ role: Schema.Literal(\"system\"), content: Schema.Array(AnthropicTextBlock) }),\n]).pipe(Schema.toTaggedUnion(\"role\"))\ntype AnthropicMessage = Schema.Schema.Type<typeof AnthropicMessage>\n\nconst AnthropicTool = Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n input_schema: JsonObject,\n cache_control: Schema.optional(AnthropicCacheControl),\n})\ntype AnthropicTool = Schema.Schema.Type<typeof AnthropicTool>\n\nconst AnthropicToolChoice = Schema.Union([\n Schema.Struct({ type: Schema.Literals([\"auto\", \"any\", \"none\"]) }),\n Schema.Struct({ type: Schema.tag(\"tool\"), name: Schema.String }),\n])\n\nconst AnthropicThinking = Schema.Union([\n Schema.Struct({\n type: Schema.tag(\"enabled\"),\n budget_tokens: Schema.Number,\n }),\n Schema.Struct({\n type: Schema.tag(\"adaptive\"),\n display: Schema.optional(Schema.Literals([\"summarized\", \"omitted\"])),\n }),\n Schema.Struct({\n type: Schema.tag(\"disabled\"),\n }),\n])\n\nconst AnthropicOutputConfig = Schema.Struct({\n effort: Schema.optional(Schema.String),\n})\n\nconst AnthropicBodyFields = {\n model: Schema.String,\n system: optionalArray(AnthropicTextBlock),\n messages: Schema.Array(AnthropicMessage),\n tools: optionalArray(AnthropicTool),\n tool_choice: Schema.optional(AnthropicToolChoice),\n stream: Schema.Literal(true),\n max_tokens: Schema.Number,\n temperature: Schema.optional(Schema.Number),\n top_p: Schema.optional(Schema.Number),\n top_k: Schema.optional(Schema.Number),\n stop_sequences: optionalArray(Schema.String),\n thinking: Schema.optional(AnthropicThinking),\n output_config: Schema.optional(AnthropicOutputConfig),\n}\nexport const AnthropicMessagesBody = Schema.Struct(AnthropicBodyFields)\nexport type AnthropicMessagesBody = Schema.Schema.Type<typeof AnthropicMessagesBody>\n\nconst AnthropicUsage = Schema.StructWithRest(\n Schema.Struct({\n input_tokens: Schema.optional(Schema.Number),\n output_tokens: Schema.optional(Schema.Number),\n cache_creation_input_tokens: optionalNull(Schema.Number),\n cache_read_input_tokens: optionalNull(Schema.Number),\n server_tool_use: optionalNull(\n Schema.StructWithRest(\n Schema.Struct({ web_search_requests: Schema.optional(Schema.Number) }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n ),\n ),\n output_tokens_details: optionalNull(\n Schema.StructWithRest(\n Schema.Struct({ thinking_tokens: Schema.optional(Schema.Number) }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n ),\n ),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n)\ntype AnthropicUsage = Schema.Schema.Type<typeof AnthropicUsage>\n\nconst AnthropicStreamBlock = Schema.Struct({\n type: Schema.String,\n id: Schema.optional(Schema.String),\n name: Schema.optional(Schema.String),\n text: Schema.optional(Schema.String),\n thinking: Schema.optional(Schema.String),\n signature: Schema.optional(Schema.String),\n // redacted_thinking blocks arrive whole in content_block_start with the\n // encrypted payload in `data`; there is no streaming delta sequence.\n data: Schema.optional(Schema.String),\n input: Schema.optional(Schema.Unknown),\n // *_tool_result blocks arrive whole as content_block_start (no streaming\n // delta) with the structured payload in `content` and the originating\n // server_tool_use id in `tool_use_id`.\n tool_use_id: Schema.optional(Schema.String),\n content: Schema.optional(Schema.Unknown),\n})\n\nconst AnthropicStreamDelta = Schema.Struct({\n type: Schema.optional(Schema.String),\n text: Schema.optional(Schema.String),\n thinking: Schema.optional(Schema.String),\n partial_json: Schema.optional(Schema.String),\n signature: Schema.optional(Schema.String),\n stop_reason: optionalNull(Schema.String),\n stop_sequence: optionalNull(Schema.String),\n})\n\nconst AnthropicEvent = Schema.Struct({\n type: Schema.String,\n index: Schema.optional(Schema.Number),\n message: Schema.optional(Schema.Struct({ usage: Schema.optional(AnthropicUsage) })),\n content_block: Schema.optional(AnthropicStreamBlock),\n delta: Schema.optional(AnthropicStreamDelta),\n usage: Schema.optional(AnthropicUsage),\n // `type` and `message` are both required per Anthropic's spec, but\n // OpenAI-compatible proxies and gateway translations occasionally drop one\n // or the other; mark them optional so a partial payload still parses and\n // the parser can fall back to whichever field is populated.\n error: Schema.optional(\n Schema.Struct({ type: Schema.optional(Schema.String), message: Schema.optional(Schema.String) }),\n ),\n})\ntype AnthropicEvent = Schema.Schema.Type<typeof AnthropicEvent>\n\ninterface ParserState {\n readonly tools: ToolStream.State<number>\n readonly reasoningSignatures: Readonly<Record<number, string>>\n readonly usage?: Usage\n readonly pendingFinish?: {\n readonly reason: FinishReasonDetails\n readonly providerMetadata?: ProviderMetadata\n }\n readonly lifecycle: Lifecycle.State\n}\n\nconst invalid = ProviderShared.invalidRequest\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\n// Anthropic accepts at most 4 explicit cache_control breakpoints per request,\n// across `tools`, `system`, and `messages`. Beyond the cap the API returns a\n// 400 — so the lowering layer counts emitted markers and silently drops any\n// that exceed it.\nconst ANTHROPIC_BREAKPOINT_CAP = 4\n\nconst EPHEMERAL_5M = { type: \"ephemeral\" as const }\nconst EPHEMERAL_1H = { type: \"ephemeral\" as const, ttl: \"1h\" as const }\n\nconst cacheControl = (breakpoints: Cache.Breakpoints, cache: CacheHint | undefined) => {\n if (cache?.type !== \"ephemeral\" && cache?.type !== \"persistent\") return undefined\n if (breakpoints.remaining <= 0) {\n breakpoints.dropped += 1\n return undefined\n }\n breakpoints.remaining -= 1\n return Cache.ttlBucket(cache.ttlSeconds) === \"1h\" ? EPHEMERAL_1H : EPHEMERAL_5M\n}\n\nconst anthropicMetadata = (metadata: Record<string, unknown>): ProviderMetadata => ({ anthropic: metadata })\n\nconst signatureFromMetadata = (metadata: ProviderMetadata | undefined): string | undefined => {\n const anthropic = metadata?.anthropic\n if (!ProviderShared.isRecord(anthropic)) return undefined\n return typeof anthropic.signature === \"string\" ? anthropic.signature : undefined\n}\n\nconst redactedDataFromMetadata = (metadata: ProviderMetadata | undefined): string | undefined => {\n const anthropic = metadata?.anthropic\n if (!ProviderShared.isRecord(anthropic)) return undefined\n return typeof anthropic.redactedData === \"string\" ? anthropic.redactedData : undefined\n}\n\nconst lowerTool = (breakpoints: Cache.Breakpoints, tool: ToolDefinition, inputSchema: JsonSchema): AnthropicTool => ({\n name: tool.name,\n description: tool.description,\n input_schema: inputSchema,\n cache_control: cacheControl(breakpoints, tool.cache),\n})\n\nconst lowerToolChoice = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"Anthropic Messages\", toolChoice, {\n auto: () => ({ type: \"auto\" as const }),\n none: () => ({ type: \"none\" as const }),\n required: () => ({ type: \"any\" as const }),\n tool: (name) => ({ type: \"tool\" as const, name }),\n })\n\nconst lowerToolCall = (part: ToolCallPart): AnthropicToolUseBlock => ({\n type: \"tool_use\",\n id: part.id,\n name: part.name,\n input: part.input,\n})\n\nconst lowerServerToolCall = (part: ToolCallPart): AnthropicServerToolUseBlock => ({\n type: \"server_tool_use\",\n id: part.id,\n name: part.name,\n input: part.input,\n})\n\n// Server tool result blocks are typed by name. Anthropic ships three today;\n// extend this list when new server tools land. The block content is the\n// structured payload returned by the provider, which we round-trip as-is.\nconst serverToolResultType = (name: string): AnthropicServerToolResultType | undefined => {\n if (name === \"web_search\") return \"web_search_tool_result\"\n if (name === \"code_execution\") return \"code_execution_tool_result\"\n if (name === \"web_fetch\") return \"web_fetch_tool_result\"\n return undefined\n}\n\nconst lowerServerToolResult = Effect.fn(\"AnthropicMessages.lowerServerToolResult\")(function* (part: ToolResultPart) {\n const wireType = serverToolResultType(part.name)\n if (!wireType)\n return yield* invalid(`Anthropic Messages does not know how to round-trip server tool result for ${part.name}`)\n // Prefer the provider-owned replay payload; fall back to the result value for\n // histories constructed directly from provider events.\n const payload = part.providerMetadata?.anthropic?.[\"result\"] ?? part.result.value\n return { type: wireType, tool_use_id: part.id, content: payload } satisfies AnthropicServerToolResultBlock\n})\n\nconst lowerMedia = Effect.fn(\"AnthropicMessages.lowerMedia\")(function* (part: MediaPart) {\n const media = yield* ProviderShared.validateMedia(\"Anthropic Messages\", part, MEDIA_MIMES)\n if (media.mime === \"application/pdf\")\n return {\n type: \"document\" as const,\n source: {\n type: \"base64\" as const,\n media_type: \"application/pdf\" as const,\n data: media.base64,\n },\n } satisfies AnthropicDocumentBlock\n return {\n type: \"image\" as const,\n source: {\n type: \"base64\" as const,\n media_type: media.mime,\n data: media.base64,\n },\n } satisfies AnthropicImageBlock\n})\n\n// Tool results may carry structured text, images, and documents. Keep media as provider-native\n// content instead of JSON-stringifying base64 into a prompt string.\nconst lowerToolResultContentItem = Effect.fn(\"AnthropicMessages.lowerToolResultContentItem\")(function* (\n item: Tool.Content,\n) {\n if (item.type === \"text\") return { type: \"text\" as const, text: item.text } satisfies AnthropicTextBlock\n return yield* lowerMedia({ type: \"media\", mediaType: item.mime, data: item.uri, filename: item.name })\n})\n\nconst lowerToolResultContent = Effect.fn(\"AnthropicMessages.lowerToolResultContent\")(function* (part: ToolResultPart) {\n // Text / json / error results stay as a string for backward compatibility\n // with existing cassettes and provider expectations.\n if (part.result.type !== \"content\") return ProviderShared.toolResultText(part)\n // Preserve the narrowed array element type when compiled through a consumer package.\n const content: ReadonlyArray<Tool.Content> = part.result.value\n return yield* Effect.forEach(content, lowerToolResultContentItem)\n})\n\n// Mid-conversation system messages are a native Claude API feature only for\n// Opus 4.8. Other Anthropic models intentionally use the same visible wrapped-\n// user fallback as non-Anthropic routes rather than sending a role they reject.\nconst supportsNativeSystemUpdates = (request: LLMRequest) => String(request.model.id) === \"claude-opus-4-8\"\n\nconst endsInServerToolUse = (message: LLMRequest[\"messages\"][number]) => {\n const last = message.content.at(-1)\n return message.role === \"assistant\" && last?.type === \"tool-call\" && last.providerExecuted === true\n}\n\nconst canUseNativeSystemUpdate = (messages: LLMRequest[\"messages\"], index: number) => {\n const previous = messages[index - 1]\n const next = messages[index + 1]\n return (\n previous !== undefined &&\n previous.role !== \"system\" &&\n (previous.role === \"user\" || previous.role === \"tool\" || endsInServerToolUse(previous)) &&\n next?.role !== \"system\" &&\n (next === undefined || next.role === \"assistant\")\n )\n}\n\nconst splitsLocalToolResults = (messages: LLMRequest[\"messages\"], index: number) => {\n const pending = new Set<string>()\n for (const message of messages.slice(0, index)) {\n for (const part of message.content) {\n if (message.role === \"assistant\" && part.type === \"tool-call\" && part.providerExecuted !== true)\n pending.add(part.id)\n if (message.role === \"tool\" && part.type === \"tool-result\") pending.delete(part.id)\n }\n }\n return pending.size > 0\n}\n\nconst lowerNativeSystemUpdate = Effect.fn(\"AnthropicMessages.lowerNativeSystemUpdate\")(function* (\n message: LLMRequest[\"messages\"][number],\n breakpoints: Cache.Breakpoints,\n) {\n const content = yield* ProviderShared.systemUpdateText(\"Anthropic Messages\", message)\n return {\n role: \"system\" as const,\n content: content.map((part) => ({\n type: \"text\" as const,\n text: part.text,\n cache_control: cacheControl(breakpoints, part.cache),\n })),\n }\n})\n\nconst lowerMessages = Effect.fn(\"AnthropicMessages.lowerMessages\")(function* (\n request: LLMRequest,\n breakpoints: Cache.Breakpoints,\n) {\n const messages: AnthropicMessage[] = []\n\n for (const [index, message] of request.messages.entries()) {\n if (message.role === \"system\") {\n if (splitsLocalToolResults(request.messages, index))\n return yield* invalid(\"Anthropic Messages system updates cannot split a local tool call from its tool result\")\n if (supportsNativeSystemUpdates(request) && canUseNativeSystemUpdate(request.messages, index)) {\n messages.push(yield* lowerNativeSystemUpdate(message, breakpoints))\n continue\n }\n const part = yield* ProviderShared.wrappedSystemUpdate(\"Anthropic Messages\", message)\n const block = { type: \"text\" as const, text: part.text, cache_control: cacheControl(breakpoints, part.cache) }\n const previous = messages.at(-1)\n if (previous?.role === \"user\")\n messages[messages.length - 1] = { role: \"user\", content: [...previous.content, block] }\n else messages.push({ role: \"user\", content: [block] })\n continue\n }\n\n if (message.role === \"user\") {\n const content: AnthropicUserBlock[] = []\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text, cache_control: cacheControl(breakpoints, part.cache) })\n continue\n }\n if (part.type === \"media\") {\n content.push(yield* lowerMedia(part))\n continue\n }\n return yield* ProviderShared.unsupportedContent(\"Anthropic Messages\", \"user\", [\"text\", \"media\"])\n }\n messages.push({ role: \"user\", content })\n continue\n }\n\n if (message.role === \"assistant\") {\n const content: AnthropicAssistantBlock[] = []\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text, cache_control: cacheControl(breakpoints, part.cache) })\n continue\n }\n if (part.type === \"reasoning\") {\n // Mirrors Vercel's @ai-sdk/anthropic: a signature marks visible\n // thinking; only signature-less parts carrying redactedData\n // round-trip as opaque redacted_thinking blocks.\n const signature = part.encrypted ?? signatureFromMetadata(part.providerMetadata)\n const redactedData = redactedDataFromMetadata(part.providerMetadata)\n if (signature === undefined && redactedData !== undefined) {\n content.push({ type: \"redacted_thinking\", data: redactedData })\n continue\n }\n content.push({ type: \"thinking\", thinking: part.text, signature })\n continue\n }\n if (part.type === \"tool-call\") {\n content.push(part.providerExecuted ? lowerServerToolCall(part) : lowerToolCall(part))\n continue\n }\n if (part.type === \"tool-result\" && part.providerExecuted) {\n content.push(yield* lowerServerToolResult(part))\n continue\n }\n return yield* invalid(\n `Anthropic Messages assistant messages only support text, reasoning, and tool-call content for now`,\n )\n }\n messages.push({ role: \"assistant\", content })\n continue\n }\n\n const content: AnthropicToolResultBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"Anthropic Messages\", \"tool\", [\"tool-result\"])\n content.push({\n type: \"tool_result\",\n tool_use_id: part.id,\n content: yield* lowerToolResultContent(part),\n is_error: part.result.type === \"error\" ? true : undefined,\n cache_control: cacheControl(breakpoints, part.cache),\n })\n }\n messages.push({ role: \"user\", content })\n }\n\n return messages\n})\n\nconst resolveOptions = Effect.fn(\"AnthropicMessages.resolveOptions\")(function* (request: LLMRequest) {\n const input = request.providerOptions?.anthropic\n return {\n thinking: yield* resolveThinking(input?.thinking),\n effort: typeof input?.effort === \"string\" ? input.effort : undefined,\n }\n})\n\nconst resolveThinking = Effect.fn(\"AnthropicMessages.resolveThinking\")(function* (input: unknown) {\n if (!ProviderShared.isRecord(input)) return undefined\n if (input.type === \"adaptive\") {\n const display =\n input.display === \"summarized\"\n ? (\"summarized\" as const)\n : input.display === \"omitted\"\n ? (\"omitted\" as const)\n : undefined\n return { type: \"adaptive\" as const, ...(display === undefined ? {} : { display }) }\n }\n if (input.type === \"disabled\") return { type: \"disabled\" as const }\n if (input.type !== \"enabled\") return undefined\n const budget =\n typeof input.budgetTokens === \"number\"\n ? input.budgetTokens\n : typeof input.budget_tokens === \"number\"\n ? input.budget_tokens\n : undefined\n if (budget === undefined)\n return yield* ProviderShared.invalidRequest(\"Anthropic thinking provider option requires budgetTokens\")\n return { type: \"enabled\" as const, budget_tokens: budget }\n})\n\nconst fromRequest = Effect.fn(\"AnthropicMessages.fromRequest\")(function* (request: LLMRequest) {\n const generation = request.generation\n const toolSchemaCompatibility = request.model.compatibility?.toolSchema\n const outputLimit = request.model.defaults?.limits?.output ?? request.model.route.defaults.limits?.output ?? 4096\n // Allocate the 4-breakpoint budget in invalidation order: tools → system →\n // messages. Tools live highest in the cache hierarchy, so when callers\n // over-mark we keep their tool hints and shed the message-tail ones first.\n const breakpoints = Cache.newBreakpoints(ANTHROPIC_BREAKPOINT_CAP)\n const tools =\n request.tools.length === 0\n ? undefined\n : request.tools.map((tool) =>\n lowerTool(\n breakpoints,\n tool,\n ToolSchemaProjection.modelCompatibility(tool.inputSchema, toolSchemaCompatibility),\n ),\n )\n // Anthropic rejects tool_choice when tools are absent; \"none\" is only meaningful with tools present.\n const toolChoice = tools === undefined || !request.toolChoice ? undefined : yield* lowerToolChoice(request.toolChoice)\n const system =\n request.system.length === 0\n ? undefined\n : request.system.map((part) => ({\n type: \"text\" as const,\n text: part.text,\n cache_control: cacheControl(breakpoints, part.cache),\n }))\n const messages = yield* lowerMessages(request, breakpoints)\n if (breakpoints.dropped > 0) {\n yield* Effect.logWarning(\n `Anthropic Messages: dropped ${breakpoints.dropped} cache breakpoint(s); the API allows at most ${ANTHROPIC_BREAKPOINT_CAP} per request.`,\n )\n }\n const options = yield* resolveOptions(request)\n return {\n model: request.model.id,\n system,\n messages,\n tools,\n tool_choice: toolChoice,\n stream: true as const,\n max_tokens: generation?.maxTokens ?? outputLimit,\n temperature: generation?.temperature,\n top_p: generation?.topP,\n top_k: generation?.topK,\n stop_sequences: generation?.stop,\n thinking: options.thinking,\n output_config: options.effort === undefined ? undefined : { effort: options.effort },\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\nconst mapFinishReason = (reason: string | null | undefined): FinishReason => {\n if (reason === \"end_turn\" || reason === \"stop_sequence\" || reason === \"pause_turn\") return \"stop\"\n if (reason === \"max_tokens\" || reason === \"model_context_window_exceeded\") return \"length\"\n if (reason === \"tool_use\") return \"tool-calls\"\n if (reason === \"refusal\") return \"content-filter\"\n return \"unknown\"\n}\n\n// Anthropic reports the non-overlapping breakdown natively — its\n// `input_tokens` is the *non-cached* count per the Messages API docs, with\n// cache reads and writes as separate fields. We sum them to derive the\n// inclusive `inputTokens` the rest of the contract expects. Extended\n// thinking tokens are included in `output_tokens`; newer responses also\n// expose that subset through `output_tokens_details.thinking_tokens`.\nconst mapUsage = (usage: AnthropicUsage | undefined): Usage | undefined => {\n if (!usage) return undefined\n const nonCached = usage.input_tokens\n const cacheRead = usage.cache_read_input_tokens ?? undefined\n const cacheWrite = usage.cache_creation_input_tokens ?? undefined\n const inputTokens = ProviderShared.sumTokens(nonCached, cacheRead, cacheWrite)\n return new Usage({\n inputTokens,\n outputTokens: usage.output_tokens,\n nonCachedInputTokens: nonCached,\n cacheReadInputTokens: cacheRead,\n cacheWriteInputTokens: cacheWrite,\n reasoningTokens: usage.output_tokens_details?.thinking_tokens,\n totalTokens: ProviderShared.totalTokens(inputTokens, usage.output_tokens, undefined),\n providerMetadata: { anthropic: usage },\n })\n}\n\n// Anthropic emits usage on `message_start` and again on `message_delta` — the\n// final delta carries the authoritative totals. Right-biased merge: each\n// field prefers `right` when defined, falls back to `left`. `inputTokens` is\n// recomputed from the merged breakdown so the inclusive total stays\n// consistent with `nonCached + cacheRead + cacheWrite`.\nconst mergeUsage = (left: Usage | undefined, right: Usage | undefined) => {\n if (!left) return right\n if (!right) return left\n const nonCachedInputTokens = right.nonCachedInputTokens ?? left.nonCachedInputTokens\n const cacheReadInputTokens = right.cacheReadInputTokens ?? left.cacheReadInputTokens\n const cacheWriteInputTokens = right.cacheWriteInputTokens ?? left.cacheWriteInputTokens\n const inputTokens = ProviderShared.sumTokens(nonCachedInputTokens, cacheReadInputTokens, cacheWriteInputTokens)\n const outputTokens = right.outputTokens ?? left.outputTokens\n const reasoningTokens = right.reasoningTokens ?? left.reasoningTokens\n return new Usage({\n inputTokens,\n outputTokens,\n nonCachedInputTokens,\n cacheReadInputTokens,\n cacheWriteInputTokens,\n reasoningTokens,\n totalTokens: ProviderShared.totalTokens(inputTokens, outputTokens, undefined),\n providerMetadata: {\n anthropic:\n mergeJsonRecords(left.providerMetadata?.[\"anthropic\"], right.providerMetadata?.[\"anthropic\"]) ?? {},\n },\n })\n}\n\n// Server tool result blocks come whole in `content_block_start` (no streaming\n// delta sequence). We convert the payload to a `tool-result` event with\n// `providerExecuted: true`. The runtime appends it to the assistant message\n// for round-trip; downstream consumers can inspect `result.value` for the\n// structured payload.\nconst SERVER_TOOL_RESULT_NAMES: Record<AnthropicServerToolResultType, string> = {\n web_search_tool_result: \"web_search\",\n code_execution_tool_result: \"code_execution\",\n web_fetch_tool_result: \"web_fetch\",\n}\n\nconst isServerToolResultType = (type: string): type is AnthropicServerToolResultType => type in SERVER_TOOL_RESULT_NAMES\n\nconst serverToolResultEvent = (block: NonNullable<AnthropicEvent[\"content_block\"]>): LLMEvent | undefined => {\n if (!block.type || !isServerToolResultType(block.type)) return undefined\n const errorPayload =\n typeof block.content === \"object\" && block.content !== null && \"type\" in block.content\n ? String((block.content as Record<string, unknown>).type)\n : \"\"\n const isError = errorPayload.endsWith(\"_tool_result_error\")\n return LLMEvent.toolResult({\n id: block.tool_use_id ?? \"\",\n name: SERVER_TOOL_RESULT_NAMES[block.type],\n result: isError ? { type: \"error\", value: block.content } : { type: \"json\", value: block.content },\n providerExecuted: true,\n // The complete payload is irreducible provider replay state: subsequent\n // stateless requests must round-trip the typed result block verbatim.\n providerMetadata: anthropicMetadata({ blockType: block.type, result: block.content }),\n })\n}\n\ntype StepResult = readonly [ParserState, ReadonlyArray<LLMEvent>]\n\nconst NO_EVENTS: StepResult[\"1\"] = []\n\nconst onMessageStart = (state: ParserState, event: AnthropicEvent): StepResult => {\n const usage = mapUsage(event.message?.usage)\n return [usage ? { ...state, usage: mergeUsage(state.usage, usage) } : state, NO_EVENTS]\n}\n\nconst onContentBlockStart = (state: ParserState, event: AnthropicEvent): StepResult => {\n const block = event.content_block\n if (!block) return [state, NO_EVENTS]\n\n if ((block.type === \"tool_use\" || block.type === \"server_tool_use\") && event.index !== undefined) {\n const events: LLMEvent[] = []\n const lifecycle = Lifecycle.stepStart(state.lifecycle, events)\n return [\n {\n ...state,\n lifecycle,\n tools: ToolStream.start(state.tools, event.index, {\n id: block.id ?? String(event.index),\n name: block.name ?? \"\",\n input:\n block.input !== undefined && (!ProviderShared.isRecord(block.input) || Object.keys(block.input).length > 0)\n ? ProviderShared.encodeJson(block.input)\n : undefined,\n providerExecuted: block.type === \"server_tool_use\",\n }),\n },\n [\n ...events,\n LLMEvent.toolInputStart({\n id: block.id ?? String(event.index),\n name: block.name ?? \"\",\n providerExecuted: block.type === \"server_tool_use\" ? true : undefined,\n }),\n ],\n ]\n }\n\n if (block.type === \"text\" && block.text !== undefined) {\n const events: LLMEvent[] = []\n const id = `text-${event.index ?? 0}`\n const lifecycle = Lifecycle.textStart(state.lifecycle, events, id)\n return [\n { ...state, lifecycle: block.text ? Lifecycle.textDelta(lifecycle, events, id, block.text) : lifecycle },\n events,\n ]\n }\n\n if (block.type === \"thinking\" && block.thinking !== undefined) {\n const events: LLMEvent[] = []\n const id = `reasoning-${event.index ?? 0}`\n const providerMetadata = block.signature === undefined ? undefined : anthropicMetadata({ signature: block.signature })\n const lifecycle = Lifecycle.reasoningStart(state.lifecycle, events, id, providerMetadata)\n return [\n {\n ...state,\n lifecycle: block.thinking\n ? Lifecycle.reasoningDelta(lifecycle, events, id, block.thinking, providerMetadata)\n : lifecycle,\n reasoningSignatures:\n event.index === undefined || block.signature === undefined\n ? state.reasoningSignatures\n : { ...state.reasoningSignatures, [event.index]: block.signature },\n },\n events,\n ]\n }\n\n // Redacted thinking surfaces as an empty reasoning part carrying the opaque\n // payload as `redactedData` metadata (same model as Vercel's\n // @ai-sdk/anthropic). The existing content_block_stop closes the part.\n if (block.type === \"redacted_thinking\" && block.data !== undefined) {\n const events: LLMEvent[] = []\n return [\n {\n ...state,\n lifecycle: Lifecycle.reasoningStart(\n state.lifecycle,\n events,\n `reasoning-${event.index ?? 0}`,\n anthropicMetadata({ redactedData: block.data }),\n ),\n },\n events,\n ]\n }\n\n const result = serverToolResultEvent(block)\n if (!result) return [state, NO_EVENTS]\n const events: LLMEvent[] = []\n return [{ ...state, lifecycle: Lifecycle.stepStart(state.lifecycle, events) }, [...events, result]]\n}\n\nconst onContentBlockDelta = Effect.fn(\"AnthropicMessages.onContentBlockDelta\")(function* (\n state: ParserState,\n event: AnthropicEvent,\n) {\n const delta = event.delta\n\n if (delta?.type === \"text_delta\" && delta.text) {\n const events: LLMEvent[] = []\n return [\n { ...state, lifecycle: Lifecycle.textDelta(state.lifecycle, events, `text-${event.index ?? 0}`, delta.text) },\n events,\n ] satisfies StepResult\n }\n\n if (delta?.type === \"thinking_delta\" && delta.thinking) {\n const events: LLMEvent[] = []\n return [\n {\n ...state,\n lifecycle: Lifecycle.reasoningDelta(state.lifecycle, events, `reasoning-${event.index ?? 0}`, delta.thinking),\n },\n events,\n ] satisfies StepResult\n }\n\n if (delta?.type === \"signature_delta\" && delta.signature) {\n const index = event.index ?? 0\n return [\n {\n ...state,\n reasoningSignatures: { ...state.reasoningSignatures, [index]: delta.signature },\n },\n NO_EVENTS,\n ] satisfies StepResult\n }\n\n if (delta?.type === \"input_json_delta\" && event.index !== undefined) {\n if (!delta.partial_json) return [state, NO_EVENTS] satisfies StepResult\n const result = ToolStream.appendExisting(\n ADAPTER,\n state.tools,\n event.index,\n delta.partial_json,\n \"Anthropic Messages tool argument delta is missing its tool call\",\n )\n if (ToolStream.isError(result)) return yield* result\n const events: LLMEvent[] = []\n const lifecycle = result.events.length ? Lifecycle.stepStart(state.lifecycle, events) : state.lifecycle\n events.push(...result.events)\n return [{ ...state, lifecycle, tools: result.tools }, events] satisfies StepResult\n }\n\n return [state, NO_EVENTS] satisfies StepResult\n})\n\nconst onContentBlockStop = Effect.fn(\"AnthropicMessages.onContentBlockStop\")(function* (\n state: ParserState,\n event: AnthropicEvent,\n) {\n if (event.index === undefined) return [state, NO_EVENTS] satisfies StepResult\n const result = yield* ToolStream.finish(ADAPTER, state.tools, event.index)\n const events: LLMEvent[] = []\n const resultEvents = result.events ?? []\n const signature = state.reasoningSignatures[event.index]\n const lifecycle = resultEvents.length\n ? Lifecycle.stepStart(state.lifecycle, events)\n : Lifecycle.reasoningEnd(\n Lifecycle.textEnd(state.lifecycle, events, `text-${event.index}`),\n events,\n `reasoning-${event.index}`,\n signature === undefined ? undefined : anthropicMetadata({ signature }),\n )\n events.push(...resultEvents)\n const reasoningSignatures = { ...state.reasoningSignatures }\n delete reasoningSignatures[event.index]\n return [{ ...state, lifecycle, tools: result.tools, reasoningSignatures }, events] satisfies StepResult\n})\n\nconst onMessageDelta = (state: ParserState, event: AnthropicEvent): StepResult => {\n const usage = mergeUsage(state.usage, mapUsage(event.usage))\n return [\n {\n ...state,\n usage,\n pendingFinish: {\n reason: {\n normalized: mapFinishReason(event.delta?.stop_reason),\n raw: event.delta?.stop_reason ?? undefined,\n },\n providerMetadata:\n event.delta?.stop_sequence === null || event.delta?.stop_sequence === undefined\n ? undefined\n : anthropicMetadata({ stopSequence: event.delta.stop_sequence }),\n },\n },\n NO_EVENTS,\n ]\n}\n\nconst onMessageStop = (state: ParserState): StepResult => {\n const events: LLMEvent[] = []\n const lifecycle = Lifecycle.finish(state.lifecycle, events, {\n reason: state.pendingFinish?.reason ?? {\n normalized: \"unknown\",\n raw: undefined,\n },\n usage: state.usage,\n providerMetadata: state.pendingFinish?.providerMetadata,\n })\n return [{ ...state, lifecycle }, events]\n}\n\n// Prefix `error.type` so overloads, rate limits, and quota errors are visible\n// even when the provider message is generic or empty.\nconst providerErrorMessage = (event: AnthropicEvent): string => {\n const type = event.error?.type\n const message = event.error?.message\n if (type && message) return `${type}: ${message}`\n return message || type || \"Anthropic Messages stream error\"\n}\n\nconst onError = (event: AnthropicEvent) =>\n new LLMError({\n module: ADAPTER,\n method: \"stream\",\n reason: classifyProviderFailure({ message: providerErrorMessage(event), code: event.error?.type }),\n })\n\nconst step = (state: ParserState, event: AnthropicEvent) => {\n if (event.type === \"message_start\") return Effect.succeed(onMessageStart(state, event))\n if (event.type === \"content_block_start\") return Effect.succeed(onContentBlockStart(state, event))\n if (event.type === \"content_block_delta\") return onContentBlockDelta(state, event)\n if (event.type === \"content_block_stop\") return onContentBlockStop(state, event)\n if (event.type === \"message_delta\") return Effect.succeed(onMessageDelta(state, event))\n if (event.type === \"message_stop\") return Effect.succeed(onMessageStop(state))\n if (event.type === \"error\") return onError(event)\n return Effect.succeed<StepResult>([state, NO_EVENTS])\n}\n\n// =============================================================================\n// Protocol And Anthropic Route\n// =============================================================================\n/**\n * The Anthropic Messages protocol — request body construction, body schema,\n * and the streaming-event state machine. Used by native Anthropic Cloud and\n * (once registered) Vertex Anthropic / Bedrock-hosted Anthropic passthrough.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: AnthropicMessagesBody,\n from: fromRequest,\n },\n stream: {\n event: Protocol.jsonEvent(AnthropicEvent),\n initial: () => ({\n tools: ToolStream.empty<number>(),\n reasoningSignatures: {},\n lifecycle: Lifecycle.initial(),\n }),\n step,\n },\n})\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"anthropic\",\n providerMetadataKey: \"anthropic\",\n protocol,\n endpoint: Endpoint.path(PATH, { baseURL: DEFAULT_BASE_URL }),\n auth: Auth.none,\n framing: Framing.sse,\n headers: () => ({ \"anthropic-version\": \"2023-06-01\" }),\n})\n\nexport * as AnthropicMessages from \"./anthropic-messages\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "C738C672D5A5945E64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/util/slug.ts"], | ||
| "sourcesContent": [ | ||
| "export namespace Slug {\n const ADJECTIVES = [\n \"brave\",\n \"calm\",\n \"clever\",\n \"cosmic\",\n \"crisp\",\n \"curious\",\n \"eager\",\n \"gentle\",\n \"glowing\",\n \"happy\",\n \"hidden\",\n \"jolly\",\n \"kind\",\n \"lucky\",\n \"mighty\",\n \"misty\",\n \"neon\",\n \"nimble\",\n \"playful\",\n \"proud\",\n \"quick\",\n \"quiet\",\n \"shiny\",\n \"silent\",\n \"stellar\",\n \"sunny\",\n \"swift\",\n \"tidy\",\n \"witty\",\n ] as const\n\n const NOUNS = [\n \"cabin\",\n \"cactus\",\n \"canyon\",\n \"circuit\",\n \"comet\",\n \"eagle\",\n \"engine\",\n \"falcon\",\n \"forest\",\n \"garden\",\n \"harbor\",\n \"island\",\n \"knight\",\n \"lagoon\",\n \"meadow\",\n \"moon\",\n \"mountain\",\n \"nebula\",\n \"orchid\",\n \"otter\",\n \"panda\",\n \"pixel\",\n \"planet\",\n \"river\",\n \"rocket\",\n \"sailor\",\n \"squid\",\n \"star\",\n \"tiger\",\n \"wizard\",\n \"wolf\",\n ] as const\n\n export function create() {\n return [\n ADJECTIVES[Math.floor(Math.random() * ADJECTIVES.length)],\n NOUNS[Math.floor(Math.random() * NOUNS.length)],\n ].join(\"-\")\n }\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,IAAU,GAAV,CAAU,IAAV,CACL,IAAM,EAAa,CACjB,QACA,OACA,SACA,SACA,QACA,UACA,QACA,SACA,UACA,QACA,SACA,QACA,OACA,QACA,SACA,QACA,OACA,SACA,UACA,QACA,QACA,QACA,QACA,SACA,UACA,QACA,QACA,OACA,OACF,EAEM,EAAQ,CACZ,QACA,SACA,SACA,UACA,QACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,OACA,WACA,SACA,SACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,QACA,OACA,QACA,SACA,MACF,EAEO,SAAS,CAAM,EAAG,CACvB,MAAO,CACL,EAAW,KAAK,MAAM,KAAK,OAAO,EAAI,EAAW,MAAM,GACvD,EAAM,KAAK,MAAM,KAAK,OAAO,EAAI,EAAM,MAAM,EAC/C,EAAE,KAAK,GAAG,EAJL,EAAS,WAnED", | ||
| "debugId": "4CC4B86BFFC0C24A64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/services/service-config.ts"], | ||
| "sourcesContent": [ | ||
| "import { Global } from \"@opencode-ai/util/global\"\nimport { OPENCODE_CHANNEL, OPENCODE_VERSION } from \"../version\"\nimport { Hash } from \"@opencode-ai/util/hash\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Effect, FileSystem, Option, Schema } from \"effect\"\nimport { randomBytes } from \"crypto\"\nimport path from \"path\"\nimport { selfCommand } from \"../util/process\"\n\n// The CLI's service configuration file, plus the Service.EnsureOptions binding that\n// points the client package's service operations at this CLI: which\n// registration file (by channel), which version, and how to spawn opencode.\n\nexport const Info = Schema.Struct({\n hostname: Schema.optional(Schema.String),\n port: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1), Schema.isLessThanOrEqualTo(65_535))),\n password: Schema.optional(Schema.String),\n})\nexport type Info = typeof Info.Type\n\nconst keys = [\"hostname\", \"port\", \"password\"] as const\ntype Key = (typeof keys)[number]\n\nconst decodeInfo = Schema.decodeUnknownEffect(Schema.fromJsonString(Info))\nconst decodeRegistration = Schema.decodeUnknownEffect(Schema.fromJsonString(Service.Info))\n\nexport function filename(channel = OPENCODE_CHANNEL) {\n if (channel === \"latest\" || channel === \"next\") return \"service.json\"\n return `service-${channel.replace(/[^a-zA-Z0-9._-]/g, \"-\")}.json`\n}\n\nexport function defaultPort(channel = OPENCODE_CHANNEL) {\n if (channel === \"latest\" || channel === \"next\") return 0xc0de\n if (channel === \"local\") return 0xc0df\n return 10_000 + (Number.parseInt(Hash.fast(channel).slice(0, 8), 16) % 50_000)\n}\n\nexport function legacyFilename(channel = OPENCODE_CHANNEL) {\n if (channel === \"latest\" || channel === \"local\") return\n return `service-${Hash.fast(channel)}.json`\n}\n\nexport function versionBelongsToChannel(\n version: string | undefined,\n channel = OPENCODE_CHANNEL,\n installedVersion = OPENCODE_VERSION,\n) {\n if (version === undefined) return false\n if (version === installedVersion) return true\n const prefix = `0.0.0-${channel}-`\n if (!version.startsWith(prefix)) return false\n return /^\\d+(?:\\.\\d+)?$/.test(version.slice(prefix.length))\n}\n\nexport const migrateRegistration = Effect.fnUntraced(function* (\n legacy: string,\n file: string,\n channel = OPENCODE_CHANNEL,\n installedVersion = OPENCODE_VERSION,\n) {\n const fs = yield* FileSystem.FileSystem\n const text = yield* fs.readFileString(legacy).pipe(Effect.option)\n if (Option.isNone(text)) return\n const registration = yield* decodeRegistration(text.value).pipe(Effect.option)\n if (Option.isNone(registration)) return\n if (!versionBelongsToChannel(registration.value.version, channel, installedVersion)) return\n yield* fs.writeFileString(file, text.value, { flag: \"wx\", mode: 0o600 }).pipe(Effect.ignore)\n})\n\nexport const migrateConfig = Effect.fnUntraced(function* (legacy: string, file: string) {\n const fs = yield* FileSystem.FileSystem\n const text = yield* fs.readFileString(legacy).pipe(Effect.option)\n if (Option.isNone(text)) return\n if (Option.isNone(yield* decodeInfo(text.value).pipe(Effect.option))) return\n yield* fs.writeFileString(file, text.value, { flag: \"wx\", mode: 0o600 }).pipe(Effect.ignore)\n})\n\nfunction configKey(key: string): Key {\n if (key === \"hostname\" || key === \"port\" || key === \"password\") return key\n throw new Error(`Unknown service config key: ${key}`)\n}\n\nconst paths = Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem\n const global = yield* Global.Service\n const name = filename()\n const legacy = legacyFilename()\n const file = path.join(global.state, name)\n return {\n fs,\n file,\n legacyConfigFile: legacy ? path.join(global.config, legacy) : undefined,\n legacyRegistrationFiles: [\n ...(legacy ? [path.join(global.state, legacy)] : []),\n ...(name !== \"service.json\" && OPENCODE_CHANNEL !== \"local\" ? [path.join(global.state, \"service.json\")] : []),\n ],\n configFile: path.join(global.config, name),\n }\n})\n\nexport const options = Effect.fnUntraced(function* () {\n const { file, legacyRegistrationFiles } = yield* paths\n yield* Effect.forEach(legacyRegistrationFiles, (legacy) => migrateRegistration(legacy, file))\n return {\n file,\n version: OPENCODE_VERSION,\n command: [...selfCommand(), \"serve\", \"--service\"],\n }\n})\n\nexport const read = Effect.fn(\"cli.service-config.read\")(function* () {\n const { fs, configFile, legacyConfigFile } = yield* paths\n if (legacyConfigFile) yield* migrateConfig(legacyConfigFile, configFile)\n return yield* fs.readFileString(configFile).pipe(\n Effect.flatMap(decodeInfo),\n Effect.catch(() => Effect.succeed({} as Info)),\n )\n})\n\nconst write = Effect.fn(\"cli.service-config.write\")(function* (value: Info) {\n const { fs, configFile } = yield* paths\n const temp = configFile + \".tmp\"\n yield* fs.makeDirectory(path.dirname(configFile), { recursive: true })\n yield* fs.writeFileString(temp, JSON.stringify(value, null, 2) + \"\\n\", { mode: 0o600 })\n yield* fs.rename(temp, configFile)\n})\n\nexport const password = Effect.fn(\"cli.service-config.password\")(function* (value?: string) {\n const existing = yield* read()\n if (value === undefined && existing.password) return existing.password\n const next = value ?? randomBytes(32).toString(\"base64url\")\n\n // Keep one private credential across server restarts so discovered clients\n // can reconnect without exposing a password flag or environment variable.\n yield* write({ ...existing, password: next })\n return next\n})\n\nexport const get = Effect.fn(\"cli.service-config.get\")(function* (key?: string) {\n if (key === undefined) {\n const { password: _password, ...safe } = yield* read()\n return JSON.stringify(safe, null, 2)\n }\n switch (configKey(key)) {\n case \"hostname\": {\n return (yield* read()).hostname ?? \"\"\n }\n case \"port\": {\n const port = (yield* read()).port\n return port === undefined ? \"\" : String(port)\n }\n case \"password\": {\n return yield* password()\n }\n }\n throw new Error(`Unknown service config key: ${key}`)\n})\n\nexport const set = Effect.fn(\"cli.service-config.set\")(function* (key: string, value: string) {\n switch (configKey(key)) {\n case \"hostname\": {\n yield* Service.stop(yield* options())\n yield* write({ ...(yield* read()), hostname: value })\n return\n }\n case \"port\": {\n const port = Number(value)\n if (!Number.isInteger(port) || port < 1 || port > 65_535) throw new Error(\"Port must be between 1 and 65535\")\n yield* Service.stop(yield* options())\n yield* write({ ...(yield* read()), port })\n return\n }\n case \"password\": {\n yield* Service.stop(yield* options())\n yield* password(value)\n return\n }\n }\n})\n\nexport const unset = Effect.fn(\"cli.service-config.unset\")(function* (key: string) {\n switch (configKey(key)) {\n case \"hostname\": {\n yield* Service.stop(yield* options())\n const { hostname: _hostname, ...next } = yield* read()\n yield* write(next)\n return\n }\n case \"port\": {\n yield* Service.stop(yield* options())\n const { port: _port, ...next } = yield* read()\n yield* write(next)\n return\n }\n case \"password\": {\n yield* Service.stop(yield* options())\n const { password: _password, ...next } = yield* read()\n yield* write(next)\n return\n }\n }\n})\n\nexport * as ServiceConfig from \"./service-config\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "2D13A0CE1C270A6364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/api.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { Service, type Endpoint } from \"@opencode-ai/client/effect/service\"\nimport { ServerConnection } from \"../../services/server-connection\"\n\nconst methods = new Set([\"delete\", \"get\", \"head\", \"options\", \"patch\", \"post\", \"put\"])\n\ntype Operation = {\n operationId?: string\n}\n\ntype OpenApi = {\n paths?: Record<string, Record<string, Operation>>\n}\n\nexport default Runtime.handler(\n Commands.commands.api,\n Effect.fn(\"cli.api\")(function* (input) {\n const server = yield* ServerConnection.resolve({\n server: Option.getOrUndefined(input.server),\n standalone: input.standalone,\n mismatch: \"ignore\",\n })\n const endpoint = server.endpoint\n const params = Option.getOrElse(input.param, () => ({}))\n const request = yield* resolveRequest(endpoint, input.request, params)\n const headers = new Headers(Service.headers(endpoint))\n for (const header of input.header) {\n const index = header.indexOf(\":\")\n if (index < 1) return yield* Effect.fail(new Error(`Invalid header, expected name:value: ${header}`))\n headers.set(header.slice(0, index).trim(), header.slice(index + 1).trim())\n }\n const body = Option.getOrUndefined(input.data)\n if (body !== undefined && !headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\")\n\n const response = yield* Effect.tryPromise(() =>\n fetch(new URL(request.path, endpoint.url), {\n method: request.method,\n headers,\n body,\n }),\n )\n const output = yield* Effect.promise(() => response.text())\n if (output) process.stdout.write(output + (output.endsWith(EOL) ? \"\" : EOL))\n }),\n)\n\nexport function resolveOperation(spec: OpenApi, operationID: string, params: Record<string, string>) {\n for (const [path, operations] of Object.entries(spec.paths ?? {})) {\n for (const [method, operation] of Object.entries(operations)) {\n if (!methods.has(method) || operation.operationId !== operationID) continue\n return { method: method.toUpperCase(), path: interpolate(path, params) }\n }\n }\n throw new Error(`Operation not found: ${operationID}`)\n}\n\nexport function rawRequest(input: readonly string[]) {\n if (input.length !== 2 || !methods.has(input[0].toLowerCase()) || !input[1].startsWith(\"/\")) return\n return { method: input[0].toUpperCase(), path: input[1] }\n}\n\nfunction resolveRequest(endpoint: Endpoint, input: readonly string[], params: Record<string, string>) {\n const raw = rawRequest(input)\n if (raw) return Effect.succeed(raw)\n if (input.length !== 1) return Effect.fail(new Error(\"Expected an operation name or an HTTP method and path\"))\n return Effect.tryPromise(async () => {\n const response = await fetch(new URL(\"/openapi.json\", endpoint.url), { headers: Service.headers(endpoint) })\n if (!response.ok) throw new Error(`Failed to load OpenAPI document: HTTP ${response.status}`)\n return resolveOperation((await response.json()) as OpenApi, input[0], params)\n })\n}\n\nfunction interpolate(path: string, params: Record<string, string>) {\n const used = new Set<string>()\n const pathname = path.replaceAll(/\\{([^}]+)\\}/g, (_, name: string) => {\n const value = params[name]\n if (value === undefined) throw new Error(`Missing path parameter: ${name}`)\n used.add(name)\n return encodeURIComponent(value)\n })\n const query = new URLSearchParams(Object.entries(params).filter(([name]) => !used.has(name))).toString()\n return query ? `${pathname}?${query}` : pathname\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "F2D6BCD4F0E4487164756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/pair.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode } from \"@opencode-ai/client/promise\"\nimport { renderUnicodeCompact } from \"uqr\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServiceConfig } from \"../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.pair,\n Effect.fn(\"cli.pair\")(function* () {\n const endpoint = yield* Service.ensure(yield* ServiceConfig.options())\n const password = yield* ServiceConfig.password()\n const server = yield* Effect.tryPromise(() =>\n OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) }).server.get(),\n )\n const info = { urls: server.urls, username: \"opencode\", password }\n process.stdout.write(\n [\n \"\",\n ` URLs ${info.urls[0] ?? \"(none)\"}`,\n ...info.urls.slice(1).map((url) => ` ${url}`),\n ` Username ${info.username}`,\n ` Password ${info.password}`,\n \"\",\n \" Scan to pair\",\n \"\",\n renderUnicodeCompact(JSON.stringify(info), { border: 2 })\n .split(EOL)\n .map((line) => \" \" + line)\n .join(EOL),\n \"\",\n ].join(EOL) + EOL,\n )\n\n const hostname = new URL(endpoint.url).hostname\n if (![\"localhost\", \"127.0.0.1\", \"[::1]\"].includes(hostname)) return\n process.stderr.write(\n ` Run \\`opencode service set hostname 0.0.0.0\\` to access the service remotely.${EOL}${EOL}`,\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";66BAAA,mBAAS,gBAST,SAAe,SAAQ,aACrB,OAAS,cAAS,UAClB,OAAO,QAAG,eAAU,OAAE,cAAU,OAAG,MACjC,SAAM,OAAW,WAAO,OAAQ,YAAO,WAAO,OAAc,aAAQ,MAAC,EAC/D,EAAW,MAAO,EAAc,SAAS,EAIzC,EAAO,CAAE,MAHA,MAAO,EAAO,WAAW,IACtC,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAAE,OAAO,IAAI,CAC1F,GAC4B,KAAM,SAAU,WAAY,UAAS,EACjE,QAAQ,OAAO,MACb,CACE,GACA,eAAe,EAAK,KAAK,IAAM,WAC/B,GAAG,EAAK,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAQ,eAAe,GAAK,EACvD,eAAe,EAAK,WACpB,eAAe,EAAK,WACpB,GACA,iBACA,GACA,EAAqB,KAAK,UAAU,CAAI,EAAG,CAAE,OAAQ,CAAE,CAAC,EACrD,MAAM,CAAG,EACT,IAAI,CAAC,IAAS,KAAO,CAAI,EACzB,KAAK,CAAG,EACX,EACF,EAAE,KAAK,CAAG,EAAI,CAChB,EAEA,IAAM,EAAW,IAAI,IAAI,EAAS,GAAG,EAAE,SACvC,GAAI,CAAC,CAAC,YAAa,YAAa,OAAO,EAAE,SAAS,CAAQ,EAAG,OAC7D,QAAQ,OAAO,MACb,kFAAkF,IAAM,GAC1F,EACD,CACH", | ||
| "debugId": "21B029045883004064756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/editor.ts", "../tui/src/editor-zed-sqlite.bun.ts", "../tui/src/editor-zed.ts"], | ||
| "sourcesContent": [ | ||
| "import type { CliRenderer } from \"@opentui/core\"\nimport { existsSync, readdirSync, readFileSync, statSync } from \"node:fs\"\nimport { readFile, rm, writeFile } from \"node:fs/promises\"\nimport os from \"node:os\"\nimport path from \"node:path\"\nimport { spawn } from \"node:child_process\"\nimport type { Stream } from \"node:stream\"\nimport { resolveZedDbPath, resolveZedSelection } from \"./editor-zed\"\n\nexport { normalizePromptContent } from \"./prompt/content\"\n\ntype EditorStdio = \"inherit\" | \"pipe\" | \"ignore\" | number | Stream\n\nexport async function openEditor(input: { value: string; renderer: CliRenderer; cwd?: string; stdin?: EditorStdio }) {\n const editor = process.env.VISUAL || process.env.EDITOR\n if (!editor) return\n const file = path.join(os.tmpdir(), `${Date.now()}.md`)\n await writeFile(file, input.value)\n input.renderer.suspend()\n input.renderer.currentRenderBuffer.clear()\n try {\n await new Promise<void>((resolve, reject) => {\n const parts = editor.split(\" \")\n const child = spawn(parts[0]!, [...parts.slice(1), file], {\n cwd: input.cwd && existsSync(input.cwd) ? input.cwd : process.cwd(),\n stdio: [input.stdin ?? \"inherit\", \"inherit\", \"inherit\"],\n shell: process.platform === \"win32\",\n })\n child.on(\"error\", reject)\n child.on(\"exit\", (code, signal) => {\n if (code === 0) return resolve()\n reject(new Error(`Editor exited with ${signal ? `signal ${signal}` : `code ${code}`}`))\n })\n })\n return (await readFile(file, \"utf8\")) || undefined\n } finally {\n await rm(file, { force: true }).catch(() => {})\n input.renderer.currentRenderBuffer.clear()\n input.renderer.resume()\n input.renderer.requestRender()\n }\n}\n\nexport function discoverEditorConnection(directory: string) {\n const root = path.join(os.homedir(), \".claude\", \"ide\")\n const contains = (parent: string) => {\n const resolved = path.resolve(parent)\n const relative = path.relative(resolved, path.resolve(directory))\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative)) ? resolved.length : 0\n }\n try {\n return readdirSync(root)\n .filter((entry) => entry.endsWith(\".lock\"))\n .flatMap((entry) => {\n const file = path.join(root, entry)\n const port = Number.parseInt(path.basename(file, \".lock\"), 10)\n if (!Number.isInteger(port) || port <= 0 || port > 65535) return []\n try {\n const value = JSON.parse(readFileSync(file, \"utf8\")) as Record<string, unknown>\n if (value.transport !== undefined && value.transport !== \"ws\") return []\n const folders = Array.isArray(value.workspaceFolders)\n ? value.workspaceFolders.filter((item): item is string => typeof item === \"string\")\n : []\n const score = Math.max(0, ...folders.map(contains))\n if (!score) return []\n return [\n {\n url: `ws://127.0.0.1:${port}`,\n authToken: typeof value.authToken === \"string\" ? value.authToken : undefined,\n source: `lock:${port}`,\n score,\n mtime: statSync(file).mtimeMs,\n },\n ]\n } catch {\n return []\n }\n })\n .sort((left, right) => right.score - left.score || right.mtime - left.mtime)\n .map(({ url, authToken, source }) => ({ url, authToken, source }))[0]\n } catch {\n return undefined\n }\n}\n\nexport const editorIntegration = {\n connection: discoverEditorConnection,\n selection: (directory: string) => resolveZedSelection(resolveZedDbPath() ?? \"\", directory),\n}\n", | ||
| "export { Database } from \"bun:sqlite\"\n", | ||
| "import { Database } from \"#zed-sqlite\"\nimport { statSync } from \"node:fs\"\nimport { readFile as readFileAsync } from \"node:fs/promises\"\nimport os from \"node:os\"\nimport path from \"node:path\"\nimport { Option, Schema } from \"effect\"\nimport type { EditorSelection } from \"./context/editor\"\n\nconst ZedEditorRowSchema = Schema.Struct({\n item_kind: Schema.String,\n editor_id: Schema.NullOr(Schema.Number),\n workspace_id: Schema.Number,\n workspace_paths: Schema.NullOr(Schema.String),\n timestamp: Schema.String,\n buffer_path: Schema.NullOr(Schema.String),\n})\n\nconst ZedSelectionRowSchema = Schema.Struct({\n selection_start: Schema.NullOr(Schema.Number),\n selection_end: Schema.NullOr(Schema.Number),\n})\n\nconst ZedEditorContentsSchema = Schema.Struct({\n contents: Schema.NullOr(Schema.String),\n})\n\nconst decodeZedEditorRow = Schema.decodeUnknownOption(ZedEditorRowSchema)\nconst decodeZedSelectionRow = Schema.decodeUnknownOption(ZedSelectionRowSchema)\nconst decodeZedEditorContents = Schema.decodeUnknownOption(ZedEditorContentsSchema)\n\nconst utf8 = new TextEncoder()\n\ntype ZedEditorRow = Schema.Schema.Type<typeof ZedEditorRowSchema>\ntype ZedActiveEditorRow = ZedEditorRow & { item_kind: \"Editor\"; editor_id: number }\n\nexport type ZedSelectionResult =\n | { type: \"selection\"; selection: EditorSelection }\n | { type: \"empty\" }\n | { type: \"unavailable\" }\n\nexport async function resolveZedSelection(dbPath: string, cwd = process.cwd()): Promise<ZedSelectionResult> {\n const active = queryZedActiveEditor(dbPath, cwd)\n if (active.type !== \"row\") return active\n\n const row = active.row\n if (!row.buffer_path) return { type: \"empty\" }\n\n const selections = queryZedEditorSelections(dbPath, row)\n if (selections.type !== \"selections\") return selections\n const byteRanges = selections.selections\n .flatMap((selection) => {\n if (selection.selection_start == null || selection.selection_end == null) return []\n return [\n {\n start: Math.min(selection.selection_start, selection.selection_end),\n end: Math.max(selection.selection_start, selection.selection_end),\n },\n ]\n })\n .sort((left, right) => left.start - right.start || left.end - right.end)\n if (byteRanges.length === 0) return { type: \"unavailable\" }\n\n const contents = queryZedEditorContents(dbPath, row)\n const text =\n contents.type === \"contents\" && contents.contents != null\n ? contents.contents\n : await readFileAsync(row.buffer_path, \"utf8\").catch(() => undefined)\n if (text == null) return { type: \"unavailable\" }\n\n const ranges = byteRanges.map((range) => {\n const startOffset = utf8ByteOffsetToStringIndex(text, range.start)\n const endOffset = utf8ByteOffsetToStringIndex(text, range.end)\n return {\n text: text.slice(startOffset, endOffset),\n selection: offsetsToSelection(text, startOffset, endOffset),\n }\n })\n\n return {\n type: \"selection\",\n selection: {\n filePath: row.buffer_path,\n source: \"zed\",\n ranges,\n },\n }\n}\n\nfunction queryZedActiveEditor(dbPath: string, cwd: string) {\n let db: Database | undefined\n try {\n db = new Database(dbPath, { readonly: true })\n const raw = db\n .query(\n `select\n i.kind as item_kind,\n e.item_id as editor_id,\n i.workspace_id as workspace_id,\n w.paths as workspace_paths,\n w.timestamp as timestamp,\n e.buffer_path as buffer_path\n from items i\n join panes p on p.pane_id = i.pane_id and p.workspace_id = i.workspace_id\n join workspaces w on w.workspace_id = i.workspace_id\n left join editors e on e.item_id = i.item_id and e.workspace_id = i.workspace_id\n where i.active = 1 and p.active = 1\n order by w.timestamp desc`,\n )\n .all()\n\n const rows = raw.flatMap((row) => {\n const parsed = decodeZedEditorRow(row)\n return Option.isSome(parsed) ? [parsed.value] : []\n })\n\n if (raw.length > 0 && rows.length === 0) return { type: \"unavailable\" as const }\n\n const row = rows\n .map((row) => ({ row, score: scoreZedWorkspace(row.workspace_paths, cwd) }))\n .filter((entry) => entry.score > 0)\n .sort((left, right) => right.score - left.score || right.row.timestamp.localeCompare(left.row.timestamp))[0]?.row\n if (!row) return { type: \"empty\" as const }\n if (row.item_kind !== \"Editor\") return { type: \"unavailable\" as const }\n if (!isZedActiveEditorRow(row)) return { type: \"empty\" as const }\n return { type: \"row\" as const, row }\n } catch {\n return { type: \"unavailable\" as const }\n } finally {\n db?.close()\n }\n}\n\nfunction queryZedEditorSelections(dbPath: string, row: ZedActiveEditorRow) {\n let db: Database | undefined\n try {\n db = new Database(dbPath, { readonly: true })\n const raw = db\n .query(\n `select\n start as selection_start,\n end as selection_end\n from editor_selections\n where editor_id = $editorID and workspace_id = $workspaceID`,\n )\n .all({ $editorID: row.editor_id, $workspaceID: row.workspace_id })\n\n const selections = raw.flatMap((selection) => {\n const parsed = decodeZedSelectionRow(selection)\n return Option.isSome(parsed) ? [parsed.value] : []\n })\n\n if (raw.length > 0 && selections.length === 0) return { type: \"unavailable\" as const }\n return { type: \"selections\" as const, selections }\n } catch {\n return { type: \"unavailable\" as const }\n } finally {\n db?.close()\n }\n}\n\nfunction queryZedEditorContents(dbPath: string, row: ZedActiveEditorRow) {\n let db: Database | undefined\n try {\n db = new Database(dbPath, { readonly: true })\n const parsed = decodeZedEditorContents(\n db\n .query(\n `select contents\n from editors\n where item_id = $editorID and workspace_id = $workspaceID`,\n )\n .get({ $editorID: row.editor_id, $workspaceID: row.workspace_id }),\n )\n if (Option.isNone(parsed)) return { type: \"unavailable\" as const }\n return { type: \"contents\" as const, contents: parsed.value.contents }\n } catch {\n return { type: \"unavailable\" as const }\n } finally {\n db?.close()\n }\n}\n\nfunction isZedActiveEditorRow(row: ZedEditorRow): row is ZedActiveEditorRow {\n return row.item_kind === \"Editor\" && row.editor_id != null\n}\n\nexport function resolveZedDbPath() {\n const candidates = [\n process.env.OPENCODE_ZED_DB,\n path.join(os.homedir(), \"Library\", \"Application Support\", \"Zed\", \"db\", \"0-stable\", \"db.sqlite\"),\n path.join(os.homedir(), \".local\", \"share\", \"zed\", \"db\", \"0-stable\", \"db.sqlite\"),\n ].filter((item): item is string => Boolean(item))\n\n return candidates.find((item) => isFile(item))\n}\n\nfunction isFile(item: string) {\n try {\n return statSync(item).isFile()\n } catch {\n return false\n }\n}\n\nfunction scoreZedWorkspace(workspacePaths: string | null, cwd: string) {\n return zedWorkspacePaths(workspacePaths).reduce((score, item) => {\n if (pathContains(item, cwd)) return Math.max(score, path.resolve(item).length)\n return score\n }, 0)\n}\n\nfunction zedWorkspacePaths(value: string | null) {\n if (!value) return []\n const parsed = parseJson(value)\n if (Array.isArray(parsed)) return parsed.filter((item): item is string => typeof item === \"string\")\n return value.split(/\\r?\\n/).filter(Boolean)\n}\n\nfunction utf8ByteOffsetToStringIndex(text: string, byteOffset: number) {\n if (byteOffset <= 0) return 0\n\n let bytes = 0\n for (let index = 0; index < text.length; ) {\n const codePoint = text.codePointAt(index)\n if (codePoint === undefined) return text.length\n\n const nextIndex = index + (codePoint > 0xffff ? 2 : 1)\n bytes += utf8.encode(text.slice(index, nextIndex)).length\n if (bytes >= byteOffset) return nextIndex\n index = nextIndex\n }\n\n return text.length\n}\n\nfunction offsetsToSelection(text: string, startOffset: number, endOffset: number) {\n const start = Math.max(0, Math.min(startOffset, text.length))\n const end = Math.max(0, Math.min(endOffset, text.length))\n let line = 1\n let lineStart = 0\n let startPosition = position(line, lineStart, start)\n let endPosition = position(line, lineStart, end)\n\n for (let index = 0; index <= end; index++) {\n if (index === start) startPosition = position(line, lineStart, index)\n if (index === end) {\n endPosition = position(line, lineStart, index)\n break\n }\n if (text[index] === \"\\n\") {\n line += 1\n lineStart = index + 1\n }\n }\n\n return { start: startPosition, end: endPosition }\n}\n\nfunction position(line: number, lineStart: number, offset: number) {\n return {\n line,\n character: offset - lineStart + 1,\n }\n}\n\nfunction pathContains(parent: string, child: string) {\n const relative = path.relative(path.resolve(parent), path.resolve(child))\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative))\n}\n\nfunction parseJson(value: string) {\n try {\n return JSON.parse(value) as unknown\n } catch {\n return\n }\n}\n" | ||
| ], | ||
| "mappings": ";4DACA,qBAAS,iBAAY,kBAAa,cAAc,WAChD,mBAAS,QAAU,eAAI,oBACvB,kBACA,oBACA,gBAAS,sBCLT,mBAAS,mBCCT,mBAAS,WACT,mBAAS,oBACT,kBACA,oBAIA,IAAM,EAAqB,EAAO,OAAO,CACvC,UAAW,EAAO,OAClB,UAAW,EAAO,OAAO,EAAO,MAAM,EACtC,aAAc,EAAO,OACrB,gBAAiB,EAAO,OAAO,EAAO,MAAM,EAC5C,UAAW,EAAO,OAClB,YAAa,EAAO,OAAO,EAAO,MAAM,CAC1C,CAAC,EAEK,EAAwB,EAAO,OAAO,CAC1C,gBAAiB,EAAO,OAAO,EAAO,MAAM,EAC5C,cAAe,EAAO,OAAO,EAAO,MAAM,CAC5C,CAAC,EAEK,EAA0B,EAAO,OAAO,CAC5C,SAAU,EAAO,OAAO,EAAO,MAAM,CACvC,CAAC,EAEK,EAAqB,EAAO,oBAAoB,CAAkB,EAClE,EAAwB,EAAO,oBAAoB,CAAqB,EACxE,EAA0B,EAAO,oBAAoB,CAAuB,EAE5E,EAAO,IAAI,YAUjB,eAAsB,CAAmB,CAAC,EAAgB,EAAM,QAAQ,IAAI,EAAgC,CAC1G,IAAM,EAAS,EAAqB,EAAQ,CAAG,EAC/C,GAAI,EAAO,OAAS,MAAO,OAAO,EAElC,IAAM,EAAM,EAAO,IACnB,GAAI,CAAC,EAAI,YAAa,MAAO,CAAE,KAAM,OAAQ,EAE7C,IAAM,EAAa,EAAyB,EAAQ,CAAG,EACvD,GAAI,EAAW,OAAS,aAAc,OAAO,EAC7C,IAAM,EAAa,EAAW,WAC3B,QAAQ,CAAC,IAAc,CACtB,GAAI,EAAU,iBAAmB,MAAQ,EAAU,eAAiB,KAAM,MAAO,CAAC,EAClF,MAAO,CACL,CACE,MAAO,KAAK,IAAI,EAAU,gBAAiB,EAAU,aAAa,EAClE,IAAK,KAAK,IAAI,EAAU,gBAAiB,EAAU,aAAa,CAClE,CACF,EACD,EACA,KAAK,CAAC,EAAM,IAAU,EAAK,MAAQ,EAAM,OAAS,EAAK,IAAM,EAAM,GAAG,EACzE,GAAI,EAAW,SAAW,EAAG,MAAO,CAAE,KAAM,aAAc,EAE1D,IAAM,EAAW,EAAuB,EAAQ,CAAG,EAC7C,EACJ,EAAS,OAAS,YAAc,EAAS,UAAY,KACjD,EAAS,SACT,MAAM,EAAc,EAAI,YAAa,MAAM,EAAE,MAAM,IAAG,CAAG,OAAS,EACxE,GAAI,GAAQ,KAAM,MAAO,CAAE,KAAM,aAAc,EAE/C,IAAM,EAAS,EAAW,IAAI,CAAC,IAAU,CACvC,IAAM,EAAc,EAA4B,EAAM,EAAM,KAAK,EAC3D,EAAY,EAA4B,EAAM,EAAM,GAAG,EAC7D,MAAO,CACL,KAAM,EAAK,MAAM,EAAa,CAAS,EACvC,UAAW,EAAmB,EAAM,EAAa,CAAS,CAC5D,EACD,EAED,MAAO,CACL,KAAM,YACN,UAAW,CACT,SAAU,EAAI,YACd,OAAQ,MACR,QACF,CACF,EAGF,SAAS,CAAoB,CAAC,EAAgB,EAAa,CACzD,IAAI,EACJ,GAAI,CACF,EAAK,IAAI,EAAS,EAAQ,CAAE,SAAU,EAAK,CAAC,EAC5C,IAAM,EAAM,EACT,MACC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kCAaF,EACC,IAAI,EAED,EAAO,EAAI,QAAQ,CAAC,IAAQ,CAChC,IAAM,EAAS,EAAmB,CAAG,EACrC,OAAO,EAAO,OAAO,CAAM,EAAI,CAAC,EAAO,KAAK,EAAI,CAAC,EAClD,EAED,GAAI,EAAI,OAAS,GAAK,EAAK,SAAW,EAAG,MAAO,CAAE,KAAM,aAAuB,EAE/E,IAAM,EAAM,EACT,IAAI,CAAC,KAAS,CAAE,MAAK,MAAO,EAAkB,EAAI,gBAAiB,CAAG,CAAE,EAAE,EAC1E,OAAO,CAAC,IAAU,EAAM,MAAQ,CAAC,EACjC,KAAK,CAAC,EAAM,IAAU,EAAM,MAAQ,EAAK,OAAS,EAAM,IAAI,UAAU,cAAc,EAAK,IAAI,SAAS,CAAC,EAAE,IAAI,IAChH,GAAI,CAAC,EAAK,MAAO,CAAE,KAAM,OAAiB,EAC1C,GAAI,EAAI,YAAc,SAAU,MAAO,CAAE,KAAM,aAAuB,EACtE,GAAI,CAAC,EAAqB,CAAG,EAAG,MAAO,CAAE,KAAM,OAAiB,EAChE,MAAO,CAAE,KAAM,MAAgB,KAAI,EACnC,KAAM,CACN,MAAO,CAAE,KAAM,aAAuB,SACtC,CACA,GAAI,MAAM,GAId,SAAS,CAAwB,CAAC,EAAgB,EAAyB,CACzE,IAAI,EACJ,GAAI,CACF,EAAK,IAAI,EAAS,EAAQ,CAAE,SAAU,EAAK,CAAC,EAC5C,IAAM,EAAM,EACT,MACC;AAAA;AAAA;AAAA;AAAA,oEAKF,EACC,IAAI,CAAE,UAAW,EAAI,UAAW,aAAc,EAAI,YAAa,CAAC,EAE7D,EAAa,EAAI,QAAQ,CAAC,IAAc,CAC5C,IAAM,EAAS,EAAsB,CAAS,EAC9C,OAAO,EAAO,OAAO,CAAM,EAAI,CAAC,EAAO,KAAK,EAAI,CAAC,EAClD,EAED,GAAI,EAAI,OAAS,GAAK,EAAW,SAAW,EAAG,MAAO,CAAE,KAAM,aAAuB,EACrF,MAAO,CAAE,KAAM,aAAuB,YAAW,EACjD,KAAM,CACN,MAAO,CAAE,KAAM,aAAuB,SACtC,CACA,GAAI,MAAM,GAId,SAAS,CAAsB,CAAC,EAAgB,EAAyB,CACvE,IAAI,EACJ,GAAI,CACF,EAAK,IAAI,EAAS,EAAQ,CAAE,SAAU,EAAK,CAAC,EAC5C,IAAM,EAAS,EACb,EACG,MACC;AAAA;AAAA,kEAGF,EACC,IAAI,CAAE,UAAW,EAAI,UAAW,aAAc,EAAI,YAAa,CAAC,CACrE,EACA,GAAI,EAAO,OAAO,CAAM,EAAG,MAAO,CAAE,KAAM,aAAuB,EACjE,MAAO,CAAE,KAAM,WAAqB,SAAU,EAAO,MAAM,QAAS,EACpE,KAAM,CACN,MAAO,CAAE,KAAM,aAAuB,SACtC,CACA,GAAI,MAAM,GAId,SAAS,CAAoB,CAAC,EAA8C,CAC1E,OAAO,EAAI,YAAc,UAAY,EAAI,WAAa,KAGjD,SAAS,CAAgB,EAAG,CAOjC,MANmB,CACjB,QAAQ,IAAI,gBACZ,EAAK,KAAK,EAAG,QAAQ,EAAG,UAAW,sBAAuB,MAAO,KAAM,WAAY,WAAW,EAC9F,EAAK,KAAK,EAAG,QAAQ,EAAG,SAAU,QAAS,MAAO,KAAM,WAAY,WAAW,CACjF,EAAE,OAAO,CAAC,IAAyB,QAAQ,CAAI,CAAC,EAE9B,KAAK,CAAC,IAAS,EAAO,CAAI,CAAC,EAG/C,SAAS,CAAM,CAAC,EAAc,CAC5B,GAAI,CACF,OAAO,EAAS,CAAI,EAAE,OAAO,EAC7B,KAAM,CACN,MAAO,IAIX,SAAS,CAAiB,CAAC,EAA+B,EAAa,CACrE,OAAO,EAAkB,CAAc,EAAE,OAAO,CAAC,EAAO,IAAS,CAC/D,GAAI,EAAa,EAAM,CAAG,EAAG,OAAO,KAAK,IAAI,EAAO,EAAK,QAAQ,CAAI,EAAE,MAAM,EAC7E,OAAO,GACN,CAAC,EAGN,SAAS,CAAiB,CAAC,EAAsB,CAC/C,GAAI,CAAC,EAAO,MAAO,CAAC,EACpB,IAAM,EAAS,EAAU,CAAK,EAC9B,GAAI,MAAM,QAAQ,CAAM,EAAG,OAAO,EAAO,OAAO,CAAC,IAAyB,OAAO,IAAS,QAAQ,EAClG,OAAO,EAAM,MAAM,OAAO,EAAE,OAAO,OAAO,EAG5C,SAAS,CAA2B,CAAC,EAAc,EAAoB,CACrE,GAAI,GAAc,EAAG,MAAO,GAE5B,IAAI,EAAQ,EACZ,QAAS,EAAQ,EAAG,EAAQ,EAAK,QAAU,CACzC,IAAM,EAAY,EAAK,YAAY,CAAK,EACxC,GAAI,IAAc,OAAW,OAAO,EAAK,OAEzC,IAAM,EAAY,GAAS,EAAY,MAAS,EAAI,GAEpD,GADA,GAAS,EAAK,OAAO,EAAK,MAAM,EAAO,CAAS,CAAC,EAAE,OAC/C,GAAS,EAAY,OAAO,EAChC,EAAQ,EAGV,OAAO,EAAK,OAGd,SAAS,CAAkB,CAAC,EAAc,EAAqB,EAAmB,CAChF,IAAM,EAAQ,KAAK,IAAI,EAAG,KAAK,IAAI,EAAa,EAAK,MAAM,CAAC,EACtD,EAAM,KAAK,IAAI,EAAG,KAAK,IAAI,EAAW,EAAK,MAAM,CAAC,EACpD,EAAO,EACP,EAAY,EACZ,EAAgB,EAAS,EAAM,EAAW,CAAK,EAC/C,EAAc,EAAS,EAAM,EAAW,CAAG,EAE/C,QAAS,EAAQ,EAAG,GAAS,EAAK,IAAS,CACzC,GAAI,IAAU,EAAO,EAAgB,EAAS,EAAM,EAAW,CAAK,EACpE,GAAI,IAAU,EAAK,CACjB,EAAc,EAAS,EAAM,EAAW,CAAK,EAC7C,MAEF,GAAI,EAAK,KAAW;AAAA,EAClB,GAAQ,EACR,EAAY,EAAQ,EAIxB,MAAO,CAAE,MAAO,EAAe,IAAK,CAAY,EAGlD,SAAS,CAAQ,CAAC,EAAc,EAAmB,EAAgB,CACjE,MAAO,CACL,OACA,UAAW,EAAS,EAAY,CAClC,EAGF,SAAS,CAAY,CAAC,EAAgB,EAAe,CACnD,IAAM,EAAW,EAAK,SAAS,EAAK,QAAQ,CAAM,EAAG,EAAK,QAAQ,CAAK,CAAC,EACxE,OAAO,IAAa,IAAO,CAAC,EAAS,WAAW,IAAI,GAAK,CAAC,EAAK,WAAW,CAAQ,EAGpF,SAAS,CAAS,CAAC,EAAe,CAChC,GAAI,CACF,OAAO,KAAK,MAAM,CAAK,EACvB,KAAM,CACN,QFrQJ,eAAsB,EAAU,CAAC,EAAoF,CACnH,IAAM,EAAS,QAAQ,IAAI,QAAU,QAAQ,IAAI,OACjD,GAAI,CAAC,EAAQ,OACb,IAAM,EAAO,EAAK,KAAK,EAAG,OAAO,EAAG,GAAG,KAAK,IAAI,MAAM,EACtD,MAAM,EAAU,EAAM,EAAM,KAAK,EACjC,EAAM,SAAS,QAAQ,EACvB,EAAM,SAAS,oBAAoB,MAAM,EACzC,GAAI,CAcF,OAbA,MAAM,IAAI,QAAc,CAAC,EAAS,IAAW,CAC3C,IAAM,EAAQ,EAAO,MAAM,GAAG,EACxB,EAAQ,EAAM,EAAM,GAAK,CAAC,GAAG,EAAM,MAAM,CAAC,EAAG,CAAI,EAAG,CACxD,IAAK,EAAM,KAAO,EAAW,EAAM,GAAG,EAAI,EAAM,IAAM,QAAQ,IAAI,EAClE,MAAO,CAAC,EAAM,OAAS,UAAW,UAAW,SAAS,EACtD,MAAO,EACT,CAAC,EACD,EAAM,GAAG,QAAS,CAAM,EACxB,EAAM,GAAG,OAAQ,CAAC,EAAM,IAAW,CACjC,GAAI,IAAS,EAAG,OAAO,EAAQ,EAC/B,EAAW,MAAM,sBAAsB,EAAS,UAAU,IAAW,QAAQ,KAAQ,CAAC,EACvF,EACF,EACO,MAAM,EAAS,EAAM,MAAM,GAAM,cACzC,CACA,MAAM,EAAG,EAAM,CAAE,MAAO,EAAK,CAAC,EAAE,MAAM,IAAM,EAAE,EAC9C,EAAM,SAAS,oBAAoB,MAAM,EACzC,EAAM,SAAS,OAAO,EACtB,EAAM,SAAS,cAAc,GAI1B,SAAS,CAAwB,CAAC,EAAmB,CAC1D,IAAM,EAAO,EAAK,KAAK,EAAG,QAAQ,EAAG,UAAW,KAAK,EAC/C,EAAW,CAAC,IAAmB,CACnC,IAAM,EAAW,EAAK,QAAQ,CAAM,EAC9B,EAAW,EAAK,SAAS,EAAU,EAAK,QAAQ,CAAS,CAAC,EAChE,OAAO,IAAa,IAAO,CAAC,EAAS,WAAW,IAAI,GAAK,CAAC,EAAK,WAAW,CAAQ,EAAK,EAAS,OAAS,GAE3G,GAAI,CACF,OAAO,EAAY,CAAI,EACpB,OAAO,CAAC,IAAU,EAAM,SAAS,OAAO,CAAC,EACzC,QAAQ,CAAC,IAAU,CAClB,IAAM,EAAO,EAAK,KAAK,EAAM,CAAK,EAC5B,EAAO,OAAO,SAAS,EAAK,SAAS,EAAM,OAAO,EAAG,EAAE,EAC7D,GAAI,CAAC,OAAO,UAAU,CAAI,GAAK,GAAQ,GAAK,EAAO,MAAO,MAAO,CAAC,EAClE,GAAI,CACF,IAAM,EAAQ,KAAK,MAAM,EAAa,EAAM,MAAM,CAAC,EACnD,GAAI,EAAM,YAAc,QAAa,EAAM,YAAc,KAAM,MAAO,CAAC,EACvE,IAAM,EAAU,MAAM,QAAQ,EAAM,gBAAgB,EAChD,EAAM,iBAAiB,OAAO,CAAC,IAAyB,OAAO,IAAS,QAAQ,EAChF,CAAC,EACC,EAAQ,KAAK,IAAI,EAAG,GAAG,EAAQ,IAAI,CAAQ,CAAC,EAClD,GAAI,CAAC,EAAO,MAAO,CAAC,EACpB,MAAO,CACL,CACE,IAAK,kBAAkB,IACvB,UAAW,OAAO,EAAM,YAAc,SAAW,EAAM,UAAY,OACnE,OAAQ,QAAQ,IAChB,QACA,MAAO,EAAS,CAAI,EAAE,OACxB,CACF,EACA,KAAM,CACN,MAAO,CAAC,GAEX,EACA,KAAK,CAAC,EAAM,IAAU,EAAM,MAAQ,EAAK,OAAS,EAAM,MAAQ,EAAK,KAAK,EAC1E,IAAI,EAAG,MAAK,YAAW,aAAc,CAAE,MAAK,YAAW,QAAO,EAAE,EAAE,GACrE,KAAM,CACN,QAIG,IAAM,GAAoB,CAC/B,WAAY,EACZ,UAAW,CAAC,IAAsB,EAAoB,EAAiB,GAAK,GAAI,CAAS,CAC3F", | ||
| "debugId": "015F5CE773E6D51164756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../simulation/src/frontend/actions.ts", "../simulation/src/recording.ts", "../simulation/src/frontend/renderer.ts", "../simulation/src/frontend/semantics.ts", "../simulation/src/frontend/server.ts", "../simulation/src/frontend/simulation.ts"], | ||
| "sourcesContent": [ | ||
| "import { tmpdir } from \"node:os\"\nimport { extname, join, resolve } from \"node:path\"\nimport type { CliRenderer, Renderable } from \"@opentui/core\"\nimport {\n createMockKeys,\n createMockMouse,\n KeyCodes,\n type KeyInput,\n type MockInput,\n type MockMouse,\n} from \"@opentui/core/testing\"\nimport { Config, Effect, FileSystem, Schema } from \"effect\"\nimport { SimulationProtocol } from \"../protocol\"\nimport { SimulationRenderer } from \"./renderer\"\nimport { SimulationSemantics } from \"./semantics\"\n\nexport type Action = SimulationProtocol.Frontend.Action\nexport type Element = SimulationProtocol.Frontend.Element\n\nexport interface Harness {\n readonly renderer: CliRenderer\n readonly mockInput: MockInput\n readonly mockMouse: MockMouse\n readonly resize: (cols: number, rows: number) => void\n readonly renderOnce: () => Promise<void>\n readonly screen: () => string\n}\n\ntype RenderBuffer = {\n readonly width: number\n readonly height: number\n getRealCharBytes(includeAnsi?: boolean): Uint8Array\n}\n\nconst decoder = new TextDecoder()\n\nfunction isKeyCode(key: string): key is keyof typeof KeyCodes {\n return Object.hasOwn(KeyCodes, key)\n}\n\nfunction keyInput(key: string): KeyInput {\n const named = key.toUpperCase()\n return isKeyCode(named) ? named : key\n}\n\nfunction children(renderable: Renderable) {\n return renderable.getChildren().filter((child): child is Renderable => \"num\" in child)\n}\n\nfunction all(renderable: Renderable): Renderable[] {\n return [renderable, ...children(renderable).flatMap(all)]\n}\n\nfunction mouseListeners(renderable: Renderable) {\n const general = Reflect.get(renderable, \"_mouseListener\")\n const specific = Reflect.get(renderable, \"_mouseListeners\")\n return Boolean(general) || (specific && typeof specific === \"object\" && Object.keys(specific).length > 0)\n}\n\nfunction hit(renderer: CliRenderer, renderable: Renderable) {\n if (renderable.width <= 0 || renderable.height <= 0) return false\n const x = Math.floor(renderable.screenX + renderable.width / 2)\n const y = Math.floor(renderable.screenY + renderable.height / 2)\n const target = renderer.hitTest(x, y)\n return all(renderable).some((item) => item.num === target)\n}\n\n/**\n * Builds the harness the simulation server drives.\n *\n * When the renderer is the headless simulation renderer, its TestRendererSetup\n * provides the supported testing APIs. For the visible terminal renderer the\n * harness falls back to `requestRender` + `idle` and reading the private\n * `currentRenderBuffer`.\n */\nexport function createHarness(renderer: CliRenderer): Harness {\n const setup = SimulationRenderer.setupFor(renderer)\n return {\n renderer,\n mockInput: setup?.mockInput ?? createMockKeys(renderer),\n mockMouse: setup?.mockMouse ?? createMockMouse(renderer),\n resize: setup?.resize ?? ((cols, rows) => renderer.resize(cols, rows)),\n renderOnce:\n setup?.renderOnce ??\n (async () => {\n renderer.requestRender()\n await renderer.idle()\n }),\n // captureCharFrame follows the test renderer's output sink. Recording\n // redirects that sink to the timeline, so read the live render buffer\n // instead; it is also the source used by screenshots.\n screen: () => decoder.decode((Reflect.get(renderer, \"currentRenderBuffer\") as RenderBuffer).getRealCharBytes()),\n }\n}\n\nexport function elements(renderer: CliRenderer): Element[] {\n return all(renderer.root)\n .filter((renderable) => renderable.visible && !renderable.isDestroyed)\n .map((renderable) => {\n const clickable = mouseListeners(renderable) && hit(renderer, renderable)\n return {\n id: renderable.id,\n num: renderable.num,\n x: renderable.screenX,\n y: renderable.screenY,\n width: renderable.width,\n height: renderable.height,\n focusable: renderable.focusable,\n focused: renderable.focused,\n clickable,\n editor: renderer.currentFocusedEditor === renderable,\n } satisfies Element\n })\n .filter((element) => element.focusable || element.clickable || element.editor)\n}\n\nexport function state(harness: Harness) {\n return {\n focused: {\n renderable: harness.renderer.currentFocusedRenderable?.num,\n editor: Boolean(harness.renderer.currentFocusedEditor),\n },\n elements: elements(harness.renderer),\n }\n}\n\nexport function snapshot(harness: Harness): SimulationProtocol.Frontend.SemanticSnapshot {\n const ids = new Set<string>()\n const visit = (renderable: Renderable, parent?: string): SimulationProtocol.Frontend.SemanticNode[] => {\n if (!renderable.visible || renderable.isDestroyed) return []\n const definition = SimulationSemantics.read(renderable)?.()\n if (definition && ids.has(renderable.id)) throw new Error(`duplicate semantic UI id: ${renderable.id}`)\n if (definition) ids.add(renderable.id)\n const node = definition\n ? [{ id: renderable.id, ...definition, ...(parent === undefined ? {} : { parent }), element: renderable.num }]\n : []\n const ancestor = definition ? renderable.id : parent\n return [...node, ...children(renderable).flatMap((child) => visit(child, ancestor))]\n }\n return Schema.decodeUnknownSync(SimulationProtocol.Frontend.SemanticSnapshot)({\n format: \"opencode-ui-snapshot-v1\",\n nodes: visit(harness.renderer.root),\n })\n}\n\nexport function matches(harness: Pick<Harness, \"screen\">, text: string) {\n return harness.screen().includes(text)\n}\n\nexport const capture = Effect.fn(\"SimulationActions.capture\")(function* (harness: Harness) {\n yield* Effect.tryPromise(() => harness.renderOnce())\n const buffer = harness.renderer.currentRenderBuffer\n return {\n cols: buffer.width,\n rows: buffer.height,\n cursor: [0, 0] as const,\n lines: buffer.getSpanLines().map((line) => ({\n spans: line.spans.map((span) => ({\n text: span.text,\n fg: span.fg.toInts(),\n bg: span.bg.toInts(),\n attributes: span.attributes,\n width: span.width,\n })),\n })),\n } satisfies SimulationProtocol.Frontend.CapturedFrame\n})\n\nexport const screenshot = Effect.fn(\"SimulationActions.screenshot\")(function* (harness: Harness, name?: string) {\n const filename = name ?? `screenshot-${crypto.randomUUID()}`\n if (!filename || filename.includes(\"/\") || filename.includes(\"\\\\\") || extname(filename))\n return yield* Effect.fail(new Error(\"screenshot name must not contain a path or extension\"))\n yield* Effect.tryPromise(() => harness.renderOnce())\n const { SimulationPng } = yield* Effect.promise(() => import(\"./png\"))\n const image = SimulationPng.screenshot(harness.renderer)\n const directory = resolve(\n yield* Config.string(\"OPENCODE_DRIVE_MEDIA_DIR\").pipe(\n Config.withDefault(join(tmpdir(), \"opencode-drive\", \"output\")),\n ),\n )\n const fs = yield* FileSystem.FileSystem\n yield* fs.makeDirectory(directory, { recursive: true })\n const path = join(directory, `${filename}.png`)\n yield* fs.writeFile(path, image.data)\n return path\n})\n\nexport const execute = Effect.fn(\"SimulationActions.execute\")(function* (harness: Harness, action: Action) {\n switch (action.type) {\n case \"ui.type\":\n yield* Effect.tryPromise(() => harness.mockInput.typeText(action.text))\n break\n case \"ui.press\":\n harness.mockInput.pressKey(keyInput(action.key), action.modifiers)\n break\n case \"ui.enter\":\n harness.mockInput.pressEnter()\n break\n case \"ui.arrow\":\n harness.mockInput.pressArrow(action.direction)\n break\n case \"ui.focus\":\n all(harness.renderer.root)\n .find((item) => item.num === action.target)\n ?.focus()\n break\n case \"ui.click\": {\n const target = all(harness.renderer.root).find((item) => item.num === action.target)\n if (!target || !target.visible || target.isDestroyed)\n return yield* Effect.fail(new Error(`click target is stale or unavailable: ${action.target}`))\n if (action.semantic) {\n const current = snapshot(harness).nodes.find((node) => node.element === action.target)\n if (\n current?.id !== action.semantic.id ||\n current.instance !== action.semantic.instance ||\n current.element !== action.semantic.element\n )\n return yield* Effect.fail(new Error(`semantic click target is stale or unavailable: ${action.semantic.id}`))\n }\n if (\n !Number.isFinite(action.x) ||\n action.x < 0 ||\n action.x >= target.width ||\n !Number.isFinite(action.y) ||\n action.y < 0 ||\n action.y >= target.height\n )\n return yield* Effect.fail(new Error(\"click position must be within the target element\"))\n yield* Effect.tryPromise(() => harness.mockMouse.click(target.screenX + action.x, target.screenY + action.y))\n break\n }\n case \"ui.resize\":\n if (\n !Number.isSafeInteger(action.cols) ||\n action.cols <= 0 ||\n !Number.isSafeInteger(action.rows) ||\n action.rows <= 0\n ) {\n return yield* Effect.fail(new Error(\"resize cols and rows must be positive integers\"))\n }\n harness.resize(action.cols, action.rows)\n SimulationRenderer.recordResize(harness.renderer, action.cols, action.rows)\n break\n }\n yield* Effect.tryPromise(() => harness.renderOnce())\n return state(harness)\n})\n\nexport * as SimulationActions from \"./actions\"\n", | ||
| "import { createWriteStream, type WriteStream } from \"node:fs\"\nimport { mkdir } from \"node:fs/promises\"\nimport { dirname } from \"node:path\"\nimport { Writable } from \"node:stream\"\nimport { finished } from \"node:stream/promises\"\nimport { Schema } from \"effect\"\n\nexport const Header = Schema.Struct({\n type: Schema.Literal(\"header\"),\n version: Schema.Literal(1),\n cols: Schema.Number,\n rows: Schema.Number,\n encoding: Schema.Literal(\"base64\"),\n})\nexport interface Header extends Schema.Schema.Type<typeof Header> {}\n\nexport const Output = Schema.Struct({\n type: Schema.Literal(\"output\"),\n at_ms: Schema.Number,\n data: Schema.String,\n})\nexport interface Output extends Schema.Schema.Type<typeof Output> {}\n\nexport const Resize = Schema.Struct({\n type: Schema.Literal(\"resize\"),\n at_ms: Schema.Number,\n cols: Schema.Number,\n rows: Schema.Number,\n})\nexport interface Resize extends Schema.Schema.Type<typeof Resize> {}\n\nexport const Event = Schema.Union([Header, Output, Resize])\nexport type Event = Schema.Schema.Type<typeof Event>\n\nexport class Timeline extends Writable {\n readonly isTTY = true\n readonly path: string\n readonly columns: number\n readonly rows: number\n private readonly output: WriteStream\n private readonly started = performance.now()\n private readonly timestamps: number[] = []\n private done?: Promise<string>\n\n private constructor(path: string, cols: number, rows: number, output: WriteStream) {\n super()\n this.path = path\n this.columns = cols\n this.rows = rows\n this.output = output\n // finish() reports stream failures; keep Writable from also throwing them process-wide.\n this.on(\"error\", () => {})\n output.on(\"error\", (error) => this.destroy(error))\n }\n\n static async create(path: string, cols: number, rows: number) {\n await mkdir(dirname(path), { recursive: true })\n const output = createWriteStream(path)\n const timeline = new Timeline(path, cols, rows, output)\n await new Promise<void>((resolve, reject) => {\n output.write(\n `${JSON.stringify({ type: \"header\", version: 1, cols, rows, encoding: \"base64\" } satisfies Header)}\\n`,\n (error) => (error ? reject(error) : resolve()),\n )\n })\n return timeline\n }\n\n getColorDepth() {\n return 24\n }\n\n override write(chunk: unknown, callback?: (error?: Error | null) => void): boolean\n override write(chunk: unknown, encoding: BufferEncoding, callback?: (error?: Error | null) => void): boolean\n override write(\n chunk: unknown,\n encoding?: BufferEncoding | ((error?: Error | null) => void),\n callback?: (error?: Error | null) => void,\n ) {\n if (!this.writableEnded) {\n this.timestamps.push(this.elapsed())\n if (typeof encoding === \"function\") return super.write(chunk, encoding)\n if (encoding === undefined) return super.write(chunk, callback)\n return super.write(chunk, encoding, callback)\n }\n const done = typeof encoding === \"function\" ? encoding : callback\n queueMicrotask(() => done?.(null))\n return true\n }\n\n override _write(chunk: Buffer, _encoding: BufferEncoding, callback: (error?: Error | null) => void) {\n this.writeOutput(chunk, this.timestamps.shift() ?? this.elapsed(), callback)\n }\n\n override _final(callback: (error?: Error | null) => void) {\n this.writeOutput(Buffer.alloc(0), this.elapsed(), (error) => {\n if (error) return callback(error)\n this.output.end(callback)\n })\n }\n\n finish() {\n if (this.done) return this.done\n this.end()\n this.done = finished(this).then(() => this.path)\n return this.done\n }\n\n resize(cols: number, rows: number) {\n if (this.writableEnded) return\n const event = { type: \"resize\", at_ms: this.elapsed(), cols, rows } satisfies Resize\n this.output.write(`${JSON.stringify(event)}\\n`)\n }\n\n private elapsed() {\n return Math.max(0, Math.round(performance.now() - this.started))\n }\n\n private writeOutput(data: Buffer, at_ms: number, callback: (error?: Error | null) => void) {\n const event = {\n type: \"output\",\n at_ms,\n data: data.toString(\"base64\"),\n } satisfies Output\n this.output.write(`${JSON.stringify(event)}\\n`, callback)\n }\n}\n\nexport * as SimulationRecording from \"./recording\"\n", | ||
| "import type { CliRenderer, CliRendererConfig } from \"@opentui/core\"\nimport { createTestRenderer, type TestRendererSetup } from \"@opentui/core/testing\"\nimport { Effect } from \"effect\"\nimport { Timeline } from \"../recording\"\n\nconst setups = new WeakMap<CliRenderer, TestRendererSetup>()\nconst recordings = new WeakMap<CliRenderer, Timeline>()\n\n/**\n * Creates a headless renderer with optional recording: a real CliRenderer\n * backed by an in-memory screen buffer. The TestRendererSetup is kept\n * module-side so the harness can use supported testing APIs without app\n * code carrying it around.\n */\nexport interface Viewport {\n readonly cols: number\n readonly rows: number\n}\n\nexport const create = Effect.fn(\"SimulationRenderer.create\")(function* (\n options: CliRendererConfig,\n path?: string,\n viewport?: Viewport,\n) {\n const cols = viewport?.cols ?? 100\n const rows = viewport?.rows ?? 40\n const recording = path\n ? yield* Effect.acquireRelease(\n Effect.tryPromise(() => Timeline.create(path, cols, rows)),\n (recording) =>\n Effect.tryPromise(() => recording.finish()).pipe(\n Effect.catch((error) =>\n Effect.sync(() => process.stderr.write(`Failed to finish UI recording: ${error}\\n`)),\n ),\n ),\n )\n : undefined\n const setup = yield* Effect.acquireRelease(\n Effect.tryPromise(() =>\n createTestRenderer({\n ...options,\n width: cols,\n height: rows,\n kittyKeyboard: Boolean(options.useKittyKeyboard),\n ...(recording\n ? {\n stdout: recording as unknown as NodeJS.WriteStream,\n bufferedOutput: \"stdout\" as const,\n }\n : {}),\n }),\n ),\n (setup) =>\n Effect.sync(() => {\n if (!setup.renderer.isDestroyed) setup.renderer.destroy()\n }),\n )\n setups.set(setup.renderer, setup)\n if (recording) recordings.set(setup.renderer, recording)\n return setup.renderer\n})\n\nexport function recordResize(renderer: CliRenderer, cols: number, rows: number) {\n recordings.get(renderer)?.resize(cols, rows)\n}\n\nexport function setupFor(renderer: CliRenderer): TestRendererSetup | undefined {\n return setups.get(renderer)\n}\n\nexport function finish(renderer: CliRenderer) {\n const recording = recordings.get(renderer)\n if (!recording) return Effect.fail(new Error(\"UI recording is not available\"))\n return Effect.tryPromise(() => recording.finish())\n}\n\nexport * as SimulationRenderer from \"./renderer\"\n", | ||
| "import type { Renderable } from \"@opentui/core\"\nimport type { SimulationProtocol } from \"../protocol\"\n\n// Semantic renderables set an explicit stable OpenTUI id so ui.state and\n// ui.snapshot expose the same identity. Hierarchy and element handles come\n// from the live render tree.\nexport type Definition = Omit<SimulationProtocol.Frontend.SemanticNode, \"id\" | \"element\" | \"parent\">\n\nconst key = Symbol.for(\"opencode.simulation.semantics\")\n\nconst bind = (definition: () => Definition) => (renderable: Renderable) => {\n Object.defineProperty(renderable, key, { value: definition, configurable: true })\n}\n\nexport const read = (renderable: Renderable) => {\n const definition: unknown = Reflect.get(renderable, key)\n return typeof definition === \"function\" ? (definition as () => Definition) : undefined\n}\n\nexport const SimulationSemantics = { bind, read }\n", | ||
| "import { Effect } from \"effect\"\nimport { SimulationControlServer } from \"../control-server\"\nimport { SimulationProtocol } from \"../protocol\"\nimport { SimulationActions, type Harness } from \"./actions\"\nimport { SimulationRenderer } from \"./renderer\"\n\nfunction handle(harness: Harness, request: SimulationProtocol.Frontend.Request, version: string) {\n switch (request.method) {\n case \"simulation.handshake\":\n return SimulationProtocol.Handshake.dispatch(\n {\n role: \"ui\",\n server: { name: \"opencode\", version },\n capabilities: SimulationProtocol.Frontend.Capabilities,\n },\n request.params,\n )\n case \"ui.capture\":\n return SimulationActions.capture(harness)\n case \"ui.screenshot\":\n return SimulationActions.screenshot(harness, request.params?.name)\n case \"ui.state\":\n return Effect.sync(() => SimulationActions.state(harness))\n case \"ui.snapshot\":\n return Effect.sync(() => SimulationActions.snapshot(harness))\n case \"ui.matches\":\n return Effect.sync(() => SimulationActions.matches(harness, request.params.text))\n case \"ui.recording.finish\":\n return SimulationRenderer.finish(harness.renderer)\n case \"ui.type\":\n return SimulationActions.execute(harness, { type: \"ui.type\", text: request.params.text })\n case \"ui.enter\":\n return SimulationActions.execute(harness, { type: \"ui.enter\" })\n case \"ui.press\":\n return SimulationActions.execute(harness, {\n type: \"ui.press\",\n key: request.params.key,\n modifiers: request.params.modifiers,\n })\n case \"ui.arrow\":\n return SimulationActions.execute(harness, { type: \"ui.arrow\", direction: request.params.direction })\n case \"ui.focus\":\n return SimulationActions.execute(harness, { type: \"ui.focus\", target: request.params.target })\n case \"ui.click\":\n return SimulationActions.execute(harness, {\n type: \"ui.click\",\n target: request.params.target,\n x: request.params.x,\n y: request.params.y,\n semantic: request.params.semantic,\n })\n case \"ui.resize\":\n return SimulationActions.execute(harness, {\n type: \"ui.resize\",\n cols: request.params.cols,\n rows: request.params.rows,\n })\n }\n}\n\nexport const start = Effect.fn(\"SimulationServer.start\")(function* (\n harness: Harness,\n endpoint: string,\n version = \"unknown\",\n) {\n return yield* SimulationControlServer.start({\n endpoint,\n label: \"opencode drive ui websocket\",\n data: () => ({ drive: true as const }),\n decode: SimulationProtocol.Frontend.decodeRequestEffect,\n handle: (_socket, request) => handle(harness, request, version),\n })\n})\n\nexport * as SimulationServer from \"./server\"\n", | ||
| "import { createCliRenderer, type CliRendererConfig } from \"@opentui/core\"\nimport { Config, Effect } from \"effect\"\nimport { DriveManifest } from \"../manifest\"\nimport { SimulationActions } from \"./actions\"\nimport { SimulationRenderer } from \"./renderer\"\nimport { SimulationServer } from \"./server\"\n\n/** Drive-mode renderer and control-server acquisition. */\nexport const create = Effect.fn(\"Drive.create\")(function* (options: CliRendererConfig, version: string) {\n const headless = (yield* Config.string(\"OPENCODE_DRIVE_RENDERER\").pipe(Config.withDefault(\"visible\"))) === \"headless\"\n const manifest = yield* DriveManifest.resolve()\n const renderer = headless\n ? yield* SimulationRenderer.create(options, manifest.recording?.timeline, manifest.viewport)\n : yield* Effect.acquireRelease(\n Effect.tryPromise(() => createCliRenderer(options)),\n (renderer) =>\n Effect.sync(() => {\n if (!renderer.isDestroyed) renderer.destroy()\n }),\n )\n if (!headless && manifest.viewport) renderer.resize(manifest.viewport.cols, manifest.viewport.rows)\n const server = yield* SimulationServer.start(SimulationActions.createHarness(renderer), manifest.endpoints.ui, version)\n yield* Effect.sync(() => process.stderr.write(`opencode drive ui websocket: ${server.url}\\n`))\n return renderer\n})\n\nexport * as Drive from \"./simulation\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "A12CCA3FE861218164756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/gemini.ts", "../ai/src/protocols/google-images.ts", "../ai/src/providers/google.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Schema } from \"effect\"\nimport { Tool } from \"@opencode-ai/schema/tool\"\nimport { Route } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n LLMEvent,\n Usage,\n type FinishReason,\n type JsonSchema,\n type LLMRequest,\n type MediaPart,\n type ProviderOptions,\n type ProviderMetadata,\n type TextPart,\n type ToolCallPart,\n type ToolDefinition,\n} from \"../schema\"\nimport { JsonObject, optionalArray, ProviderShared } from \"./shared\"\nimport { GeminiToolSchema } from \"./utils/gemini-tool-schema\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\n\nconst ADAPTER = \"gemini\"\nconst MEDIA_MIMES = new Set<string>(ProviderShared.MEDIA_MIMES)\nexport const DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com/v1beta\"\n\nexport interface OptionsInput {\n readonly [key: string]: unknown\n readonly cachedContent?: string\n readonly safetySettings?: ReadonlyArray<{\n readonly category:\n | \"HARM_CATEGORY_UNSPECIFIED\"\n | \"HARM_CATEGORY_HATE_SPEECH\"\n | \"HARM_CATEGORY_DANGEROUS_CONTENT\"\n | \"HARM_CATEGORY_HARASSMENT\"\n | \"HARM_CATEGORY_SEXUALLY_EXPLICIT\"\n | \"HARM_CATEGORY_CIVIC_INTEGRITY\"\n | (string & {})\n readonly threshold:\n | \"HARM_BLOCK_THRESHOLD_UNSPECIFIED\"\n | \"BLOCK_LOW_AND_ABOVE\"\n | \"BLOCK_MEDIUM_AND_ABOVE\"\n | \"BLOCK_ONLY_HIGH\"\n | \"BLOCK_NONE\"\n | \"OFF\"\n | (string & {})\n }>\n readonly serviceTier?: \"standard\" | \"flex\" | \"priority\" | (string & {})\n readonly thinkingConfig?: {\n readonly thinkingBudget?: number\n readonly includeThoughts?: boolean\n readonly thinkingLevel?: \"minimal\" | \"low\" | \"medium\" | \"high\" | (string & {})\n }\n}\n\nexport type ProviderOptionsInput = ProviderOptions & {\n readonly gemini?: OptionsInput\n}\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\nconst GeminiTextPart = Schema.Struct({\n text: Schema.String,\n thought: Schema.optional(Schema.Boolean),\n thoughtSignature: Schema.optional(Schema.String),\n})\n\nconst GeminiInlineDataPart = Schema.Struct({\n inlineData: Schema.Struct({\n mimeType: Schema.String,\n data: Schema.String,\n }),\n})\ntype GeminiInlineDataPart = Schema.Schema.Type<typeof GeminiInlineDataPart>\n\nconst GeminiFunctionCallPart = Schema.Struct({\n functionCall: Schema.Struct({\n id: Schema.optional(Schema.String),\n name: Schema.String,\n args: Schema.Unknown,\n }),\n thoughtSignature: Schema.optional(Schema.String),\n})\n\nconst GeminiFunctionResponsePart = Schema.Struct({\n functionResponse: Schema.Struct({\n id: Schema.optional(Schema.String),\n name: Schema.String,\n response: Schema.Unknown,\n parts: Schema.optional(Schema.Array(GeminiInlineDataPart)),\n }),\n})\n\nconst GeminiContentPart = Schema.Union([\n GeminiTextPart,\n GeminiInlineDataPart,\n GeminiFunctionCallPart,\n GeminiFunctionResponsePart,\n])\n\nconst GeminiContent = Schema.Struct({\n role: Schema.Literals([\"user\", \"model\"]),\n parts: Schema.Array(GeminiContentPart),\n})\ntype GeminiContent = Schema.Schema.Type<typeof GeminiContent>\n\nconst GeminiSystemInstruction = Schema.Struct({\n parts: Schema.Array(Schema.Struct({ text: Schema.String })),\n})\n\nconst GeminiFunctionDeclaration = Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n parameters: Schema.optional(JsonObject),\n})\n\nconst GeminiTool = Schema.Struct({\n functionDeclarations: Schema.Array(GeminiFunctionDeclaration),\n})\n\nconst GeminiToolConfig = Schema.Struct({\n functionCallingConfig: Schema.Struct({\n mode: Schema.Literals([\"AUTO\", \"NONE\", \"ANY\"]),\n allowedFunctionNames: optionalArray(Schema.String),\n }),\n})\n\nconst GeminiThinkingConfig = Schema.Struct({\n thinkingBudget: Schema.optional(Schema.Number),\n includeThoughts: Schema.optional(Schema.Boolean),\n thinkingLevel: Schema.optional(Schema.String),\n})\n\nconst GeminiSafetySetting = Schema.Struct({\n category: Schema.String,\n threshold: Schema.String,\n})\n\nconst GeminiGenerationConfig = Schema.Struct({\n maxOutputTokens: Schema.optional(Schema.Number),\n temperature: Schema.optional(Schema.Number),\n topP: Schema.optional(Schema.Number),\n topK: Schema.optional(Schema.Number),\n stopSequences: optionalArray(Schema.String),\n thinkingConfig: Schema.optional(GeminiThinkingConfig),\n})\n\nconst GeminiBodyFields = {\n cachedContent: Schema.optional(Schema.String),\n contents: Schema.Array(GeminiContent),\n safetySettings: optionalArray(GeminiSafetySetting),\n serviceTier: Schema.optional(Schema.String),\n systemInstruction: Schema.optional(GeminiSystemInstruction),\n tools: optionalArray(GeminiTool),\n toolConfig: Schema.optional(GeminiToolConfig),\n generationConfig: Schema.optional(GeminiGenerationConfig),\n}\nconst GeminiBody = Schema.Struct(GeminiBodyFields)\nexport type GeminiBody = Schema.Schema.Type<typeof GeminiBody>\n\nconst GeminiUsage = Schema.Struct({\n cachedContentTokenCount: Schema.optional(Schema.Number),\n thoughtsTokenCount: Schema.optional(Schema.Number),\n promptTokenCount: Schema.optional(Schema.Number),\n candidatesTokenCount: Schema.optional(Schema.Number),\n totalTokenCount: Schema.optional(Schema.Number),\n})\ntype GeminiUsage = Schema.Schema.Type<typeof GeminiUsage>\n\nconst GeminiCandidate = Schema.Struct({\n content: Schema.optional(GeminiContent),\n finishReason: Schema.optional(Schema.String),\n})\n\nconst GeminiEvent = Schema.Struct({\n candidates: optionalArray(GeminiCandidate),\n usageMetadata: Schema.optional(GeminiUsage),\n})\ntype GeminiEvent = Schema.Schema.Type<typeof GeminiEvent>\n\ninterface ParserState {\n readonly finishReason?: string\n readonly hasToolCalls: boolean\n readonly nextToolCallId: number\n readonly usage?: Usage\n readonly lifecycle: Lifecycle.State\n readonly reasoningSignature?: string\n}\n\n// =============================================================================\n// Tool Schema Conversion\n// =============================================================================\n// Tool-schema conversion has two distinct concerns:\n//\n// 1. Sanitize — fix common authoring mistakes Gemini rejects: integer/number\n// enums (must be strings), `required` entries that don't match a property,\n// untyped arrays (`items` must be present), and `properties`/`required`\n// keys on non-object scalars. Mirrors OpenCode's historical Gemini rules.\n//\n// 2. Project — lossy mapping from JSON Schema to Gemini's schema dialect:\n// drop empty objects, derive `nullable: true` from `type: [..., \"null\"]`,\n// coerce `const` to `[const]` enum, recurse properties/items, propagate\n// only an allowlisted set of keys (description, required, format, type,\n// properties, items, allOf, anyOf, oneOf, minLength). Anything outside the\n// allowlist (e.g. `additionalProperties`, `$ref`) is silently dropped.\n//\n// Sanitize runs first, then project. The implementation lives in\n// `utils/gemini-tool-schema` so this protocol keeps the same shape as the other\n// provider protocols.\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\nconst lowerTool = (tool: ToolDefinition, inputSchema: JsonSchema) => ({\n name: tool.name,\n description: tool.description,\n parameters: GeminiToolSchema.convert(inputSchema),\n})\n\nconst lowerToolConfig = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"Gemini\", toolChoice, {\n auto: () => ({ functionCallingConfig: { mode: \"AUTO\" as const } }),\n none: () => ({ functionCallingConfig: { mode: \"NONE\" as const } }),\n required: () => ({ functionCallingConfig: { mode: \"ANY\" as const } }),\n tool: (name) => ({ functionCallingConfig: { mode: \"ANY\" as const, allowedFunctionNames: [name] } }),\n })\n\nconst lowerUserPart = Effect.fn(\"Gemini.lowerUserPart\")(function* (part: TextPart | MediaPart) {\n if (part.type === \"text\") return { text: part.text }\n const media = yield* ProviderShared.validateMedia(\"Gemini\", part, MEDIA_MIMES)\n return { inlineData: { mimeType: media.mime, data: media.base64 } }\n})\n\nconst googleMetadata = (metadata: Record<string, unknown>): ProviderMetadata => ({ google: metadata })\n\nconst thoughtSignature = (providerMetadata: ProviderMetadata | undefined) => {\n const google = providerMetadata?.google\n return ProviderShared.isRecord(google) && typeof google.thoughtSignature === \"string\"\n ? google.thoughtSignature\n : undefined\n}\n\nconst functionCallId = (providerMetadata: ProviderMetadata | undefined) => {\n const google = providerMetadata?.google\n return ProviderShared.isRecord(google) && typeof google.functionCallId === \"string\"\n ? google.functionCallId\n : undefined\n}\n\nconst lowerToolCall = (part: ToolCallPart) => ({\n functionCall: { id: functionCallId(part.providerMetadata), name: part.name, args: part.input },\n thoughtSignature: thoughtSignature(part.providerMetadata),\n})\n\nconst lowerMessages = Effect.fn(\"Gemini.lowerMessages\")(function* (request: LLMRequest) {\n const contents: GeminiContent[] = []\n\n for (const message of request.messages) {\n if (message.role === \"system\") {\n const part = yield* ProviderShared.wrappedSystemUpdate(\"Gemini\", message)\n const previous = contents.at(-1)\n if (previous?.role === \"user\")\n contents[contents.length - 1] = { role: \"user\", parts: [...previous.parts, { text: part.text }] }\n else contents.push({ role: \"user\", parts: [{ text: part.text }] })\n continue\n }\n\n if (message.role === \"user\") {\n const parts: Array<Schema.Schema.Type<typeof GeminiContentPart>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"media\"]))\n return yield* ProviderShared.unsupportedContent(\"Gemini\", \"user\", [\"text\", \"media\"])\n parts.push(yield* lowerUserPart(part))\n }\n contents.push({ role: \"user\", parts })\n continue\n }\n\n if (message.role === \"assistant\") {\n const parts: Array<Schema.Schema.Type<typeof GeminiContentPart>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"reasoning\", \"tool-call\"]))\n return yield* ProviderShared.unsupportedContent(\"Gemini\", \"assistant\", [\"text\", \"reasoning\", \"tool-call\"])\n if (part.type === \"text\") {\n parts.push({ text: part.text })\n continue\n }\n if (part.type === \"reasoning\") {\n parts.push({ text: part.text, thought: true, thoughtSignature: thoughtSignature(part.providerMetadata) })\n continue\n }\n if (part.type === \"tool-call\") {\n parts.push(lowerToolCall(part))\n continue\n }\n }\n contents.push({ role: \"model\", parts })\n continue\n }\n\n const parts: Array<Schema.Schema.Type<typeof GeminiContentPart>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"Gemini\", \"tool\", [\"tool-result\"])\n if (part.result.type !== \"content\") {\n parts.push({\n functionResponse: {\n id: functionCallId(part.providerMetadata),\n name: part.name,\n response: {\n name: part.name,\n content: ProviderShared.toolResultText(part),\n },\n },\n })\n continue\n }\n const content: ReadonlyArray<Tool.Content> = part.result.value\n const text = content.filter((item) => item.type === \"text\").map((item) => item.text)\n const media: GeminiInlineDataPart[] = []\n for (const item of content) {\n if (item.type === \"text\") continue\n const value = yield* ProviderShared.validateToolFile(\"Gemini\", item, MEDIA_MIMES)\n media.push({ inlineData: { mimeType: value.mime, data: value.base64 } })\n }\n parts.push({\n functionResponse: {\n id: functionCallId(part.providerMetadata),\n name: part.name,\n response: {\n name: part.name,\n content: text.join(\"\\n\"),\n },\n parts: media.length > 0 ? media : undefined,\n },\n })\n }\n contents.push({ role: \"user\", parts })\n }\n\n return contents\n})\n\nconst resolveOptions = (request: LLMRequest) => {\n const input = request.providerOptions?.gemini\n const value = input?.thinkingConfig\n const thinkingConfig = {\n thinkingBudget:\n ProviderShared.isRecord(value) && typeof value.thinkingBudget === \"number\" ? value.thinkingBudget : undefined,\n includeThoughts:\n ProviderShared.isRecord(value) && typeof value.includeThoughts === \"boolean\"\n ? value.includeThoughts\n : ProviderShared.isRecord(value)\n ? true\n : undefined,\n thinkingLevel:\n ProviderShared.isRecord(value) && typeof value.thinkingLevel === \"string\" ? value.thinkingLevel : undefined,\n }\n return {\n cachedContent: typeof input?.cachedContent === \"string\" ? input.cachedContent : undefined,\n safetySettings: mapSafetySettings(input?.safetySettings),\n serviceTier: typeof input?.serviceTier === \"string\" ? input.serviceTier : undefined,\n thinkingConfig: Object.values(thinkingConfig).some((item) => item !== undefined) ? thinkingConfig : undefined,\n }\n}\n\nfunction mapSafetySettings(value: unknown) {\n if (!Array.isArray(value)) return undefined\n const settings = value.flatMap((item) =>\n ProviderShared.isRecord(item) && typeof item.category === \"string\" && typeof item.threshold === \"string\"\n ? [{ category: item.category, threshold: item.threshold }]\n : [],\n )\n return settings\n}\n\nconst fromRequest = Effect.fn(\"Gemini.fromRequest\")(function* (request: LLMRequest) {\n const hasTools = request.tools.length > 0\n const generation = request.generation\n const options = resolveOptions(request)\n const toolSchemaCompatibility = request.model.compatibility?.toolSchema\n const generationConfig = {\n maxOutputTokens: generation?.maxTokens,\n temperature: generation?.temperature,\n topP: generation?.topP,\n topK: generation?.topK,\n stopSequences: generation?.stop,\n thinkingConfig: options.thinkingConfig,\n }\n\n return {\n cachedContent: options.cachedContent,\n contents: yield* lowerMessages(request),\n safetySettings: options.safetySettings,\n serviceTier: options.serviceTier,\n systemInstruction:\n request.system.length === 0 ? undefined : { parts: [{ text: ProviderShared.joinText(request.system) }] },\n tools: hasTools\n ? [\n {\n functionDeclarations: request.tools.map((tool) =>\n lowerTool(tool, ToolSchemaProjection.modelCompatibility(tool.inputSchema, toolSchemaCompatibility)),\n ),\n },\n ]\n : undefined,\n toolConfig: hasTools && request.toolChoice ? yield* lowerToolConfig(request.toolChoice) : undefined,\n generationConfig: Object.values(generationConfig).some((value) => value !== undefined)\n ? generationConfig\n : undefined,\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\n// Gemini reports `promptTokenCount` (inclusive total) with a\n// `cachedContentTokenCount` subset. `candidatesTokenCount` is *exclusive*\n// of `thoughtsTokenCount` — visible-only, not a total — so we sum the two\n// to produce the inclusive `outputTokens` the rest of the contract expects.\nconst mapUsage = (usage: GeminiUsage | undefined) => {\n if (!usage) return undefined\n const cached = usage.cachedContentTokenCount\n const nonCached = ProviderShared.subtractTokens(usage.promptTokenCount, cached)\n // `candidatesTokenCount` is visible-only; sum with thoughts to produce the\n // inclusive `outputTokens` the contract expects. Only compute the total\n // when the visible component is reported — otherwise we'd fabricate an\n // inclusive number from a partial breakdown.\n const outputTokens =\n usage.candidatesTokenCount !== undefined ? usage.candidatesTokenCount + (usage.thoughtsTokenCount ?? 0) : undefined\n return new Usage({\n inputTokens: usage.promptTokenCount,\n outputTokens,\n nonCachedInputTokens: nonCached,\n cacheReadInputTokens: cached,\n reasoningTokens: usage.thoughtsTokenCount,\n totalTokens: ProviderShared.totalTokens(usage.promptTokenCount, outputTokens, usage.totalTokenCount),\n providerMetadata: { google: usage },\n })\n}\n\nconst mapFinishReason = (finishReason: string | undefined, hasToolCalls: boolean): FinishReason => {\n if (finishReason === \"STOP\") return hasToolCalls ? \"tool-calls\" : \"stop\"\n if (finishReason === \"MAX_TOKENS\") return \"length\"\n if (\n finishReason === \"IMAGE_SAFETY\" ||\n finishReason === \"RECITATION\" ||\n finishReason === \"SAFETY\" ||\n finishReason === \"BLOCKLIST\" ||\n finishReason === \"PROHIBITED_CONTENT\" ||\n finishReason === \"SPII\" ||\n finishReason === \"MODEL_ARMOR\" ||\n finishReason === \"IMAGE_PROHIBITED_CONTENT\" ||\n finishReason === \"IMAGE_RECITATION\" ||\n finishReason === \"LANGUAGE\"\n )\n return \"content-filter\"\n if (\n finishReason === \"MALFORMED_FUNCTION_CALL\" ||\n finishReason === \"UNEXPECTED_TOOL_CALL\" ||\n finishReason === \"NO_IMAGE\" ||\n finishReason === \"TOO_MANY_TOOL_CALLS\" ||\n finishReason === \"MISSING_THOUGHT_SIGNATURE\" ||\n finishReason === \"MALFORMED_RESPONSE\"\n )\n return \"error\"\n return \"unknown\"\n}\n\nconst finish = (state: ParserState): ReadonlyArray<LLMEvent> =>\n state.finishReason || state.usage\n ? (() => {\n const events: LLMEvent[] = []\n const lifecycle = state.reasoningSignature\n ? Lifecycle.reasoningEnd(\n state.lifecycle,\n events,\n \"reasoning-0\",\n googleMetadata({ thoughtSignature: state.reasoningSignature }),\n )\n : state.lifecycle\n Lifecycle.finish(lifecycle, events, {\n reason: {\n normalized: mapFinishReason(state.finishReason, state.hasToolCalls),\n raw: state.finishReason,\n },\n usage: state.usage,\n })\n return events\n })()\n : []\n\nconst step = (state: ParserState, event: GeminiEvent) => {\n const nextState = {\n ...state,\n usage: event.usageMetadata ? (mapUsage(event.usageMetadata) ?? state.usage) : state.usage,\n }\n const candidate = event.candidates?.[0]\n if (!candidate?.content)\n return Effect.succeed([\n { ...nextState, finishReason: candidate?.finishReason ?? nextState.finishReason },\n [],\n ] as const)\n\n const events: LLMEvent[] = []\n let hasToolCalls = nextState.hasToolCalls\n let lifecycle = nextState.lifecycle\n let nextToolCallId = nextState.nextToolCallId\n let reasoningSignature = nextState.reasoningSignature\n\n for (const part of candidate.content.parts) {\n if (\"thoughtSignature\" in part && part.thoughtSignature && \"thought\" in part && part.thought)\n reasoningSignature = part.thoughtSignature\n if (\"text\" in part && part.text.length > 0) {\n if (part.thought) {\n lifecycle = Lifecycle.reasoningDelta(\n lifecycle,\n events,\n \"reasoning-0\",\n part.text,\n part.thoughtSignature ? googleMetadata({ thoughtSignature: part.thoughtSignature }) : undefined,\n )\n continue\n }\n lifecycle = Lifecycle.reasoningEnd(\n lifecycle,\n events,\n \"reasoning-0\",\n reasoningSignature ? googleMetadata({ thoughtSignature: reasoningSignature }) : undefined,\n )\n lifecycle = Lifecycle.textDelta(lifecycle, events, \"text-0\", part.text)\n continue\n }\n\n if (\"functionCall\" in part) {\n const input = part.functionCall.args\n const id = `tool_${nextToolCallId++}`\n const metadata = {\n ...(part.functionCall.id === undefined ? {} : { functionCallId: part.functionCall.id }),\n ...(part.thoughtSignature === undefined ? {} : { thoughtSignature: part.thoughtSignature }),\n }\n lifecycle = Lifecycle.reasoningEnd(\n lifecycle,\n events,\n \"reasoning-0\",\n reasoningSignature ? googleMetadata({ thoughtSignature: reasoningSignature }) : undefined,\n )\n lifecycle = Lifecycle.stepStart(lifecycle, events)\n events.push(\n LLMEvent.toolCall({\n id,\n name: part.functionCall.name,\n input,\n providerMetadata: Object.keys(metadata).length > 0 ? googleMetadata(metadata) : undefined,\n }),\n )\n hasToolCalls = true\n }\n }\n\n return Effect.succeed([\n {\n ...nextState,\n hasToolCalls,\n lifecycle,\n nextToolCallId,\n reasoningSignature,\n finishReason: candidate.finishReason ?? nextState.finishReason,\n },\n events,\n ] as const)\n}\n\n// =============================================================================\n// Protocol And Gemini Route\n// =============================================================================\n/**\n * The Gemini protocol — request body construction, body schema, and the\n * streaming-event state machine. Used by Google AI Studio Gemini and (once\n * registered) Vertex Gemini.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: GeminiBody,\n from: fromRequest,\n },\n stream: {\n event: Protocol.jsonEvent(GeminiEvent),\n initial: () => ({ hasToolCalls: false, nextToolCallId: 0, lifecycle: Lifecycle.initial() }),\n step,\n onHalt: finish,\n },\n})\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"google\",\n providerMetadataKey: \"google\",\n protocol,\n // Gemini's path embeds the model id and pins SSE framing at the URL level.\n endpoint: Endpoint.path(({ request }) => `/models/${request.model.id}:streamGenerateContent?alt=sse`, {\n baseURL: DEFAULT_BASE_URL,\n }),\n auth: Auth.none,\n framing: Framing.sse,\n})\n\nexport * as Gemini from \"./gemini\"\n", | ||
| "import { Effect, Encoding, Schema } from \"effect\"\nimport { Headers, HttpClientRequest } from \"effect/unstable/http\"\nimport {\n GeneratedImage,\n ImageModel,\n ImageResponse,\n type ImageInput,\n type ImageRequestFor,\n type ImageRoute,\n} from \"../image\"\nimport { Auth, type Definition as AuthDefinition } from \"../route/auth\"\nimport {\n InvalidProviderOutputReason,\n LLMError,\n Usage,\n mergeHttpOptions,\n mergeJsonRecords,\n type HttpOptions,\n type ProviderMetadata,\n} from \"../schema\"\nimport { ProviderShared } from \"./shared\"\nimport { ImageInputs } from \"./utils/image-input\"\n\nconst ADAPTER = \"google-images\"\nexport const DEFAULT_BASE_URL = \"https://generativelanguage.googleapis.com/v1beta\"\n\nexport type GoogleImageString<Known extends string> = Known | (string & {})\n\nexport type GoogleImageOptions = {\n readonly aspectRatio?: GoogleImageString<\n \"1:1\" | \"2:3\" | \"3:2\" | \"3:4\" | \"4:3\" | \"4:5\" | \"5:4\" | \"9:16\" | \"16:9\" | \"21:9\"\n >\n readonly imageSize?: GoogleImageString<\"1K\" | \"2K\" | \"4K\">\n readonly seed?: number\n readonly thinkingLevel?: GoogleImageString<\"MINIMAL\" | \"LOW\" | \"MEDIUM\" | \"HIGH\">\n readonly includeThoughts?: boolean\n} & Record<string, unknown>\n\nexport type GoogleImageBody = Record<string, unknown> & {\n readonly contents: ReadonlyArray<{\n readonly role: \"user\"\n readonly parts: ReadonlyArray<Record<string, unknown>>\n }>\n readonly generationConfig: Record<string, unknown>\n}\n\nconst GoogleUsage = Schema.StructWithRest(\n Schema.Struct({\n cachedContentTokenCount: Schema.optional(Schema.Number),\n thoughtsTokenCount: Schema.optional(Schema.Number),\n promptTokenCount: Schema.optional(Schema.Number),\n candidatesTokenCount: Schema.optional(Schema.Number),\n totalTokenCount: Schema.optional(Schema.Number),\n promptTokensDetails: Schema.optional(Schema.Unknown),\n candidatesTokensDetails: Schema.optional(Schema.Unknown),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n)\n\nconst GoogleImageResponse = Schema.Struct({\n candidates: Schema.optional(\n Schema.Array(\n Schema.Struct({\n index: Schema.optional(Schema.Number),\n content: Schema.optional(\n Schema.Struct({\n parts: Schema.Array(\n Schema.Struct({\n text: Schema.optional(Schema.String),\n thought: Schema.optional(Schema.Boolean),\n thoughtSignature: Schema.optional(Schema.String),\n inlineData: Schema.optional(\n Schema.Struct({\n mimeType: Schema.String,\n data: Schema.String,\n }),\n ),\n }),\n ),\n }),\n ),\n finishReason: Schema.optional(Schema.String),\n finishMessage: Schema.optional(Schema.String),\n safetyRatings: Schema.optional(Schema.Unknown),\n citationMetadata: Schema.optional(Schema.Unknown),\n groundingMetadata: Schema.optional(Schema.Unknown),\n }),\n ),\n ),\n usageMetadata: Schema.optional(GoogleUsage),\n modelVersion: Schema.optional(Schema.String),\n responseId: Schema.optional(Schema.String),\n promptFeedback: Schema.optional(Schema.Unknown),\n})\n\nexport interface ModelInput {\n readonly id: string\n readonly auth: AuthDefinition\n readonly baseURL?: string\n readonly headers?: Record<string, string>\n readonly http?: HttpOptions\n}\n\nconst nativeOptions = (options: GoogleImageOptions | undefined) => {\n const { aspectRatio, imageSize, seed, thinkingLevel, includeThoughts, ...native } = options ?? {}\n const image = {\n aspectRatio,\n imageSize,\n }\n const thinkingConfig = {\n thinkingLevel,\n includeThoughts,\n }\n return (\n mergeJsonRecords(\n {\n responseModalities: [\"IMAGE\"],\n imageConfig: Object.values(image).some((value) => value !== undefined) ? image : undefined,\n seed,\n thinkingConfig: Object.values(thinkingConfig).some((value) => value !== undefined) ? thinkingConfig : undefined,\n },\n native,\n ) ?? { responseModalities: [\"IMAGE\"] }\n )\n}\n\nconst invalidOutput = (message: string, providerMetadata?: ProviderMetadata) =>\n new LLMError({\n module: ADAPTER,\n method: \"generate\",\n reason: new InvalidProviderOutputReason({ message, route: ADAPTER, providerMetadata }),\n })\n\nconst applyQuery = (url: string, query: Record<string, string> | undefined) => {\n if (!query) return url\n const next = new URL(url)\n Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value))\n return next.toString()\n}\n\nexport const model = (input: ModelInput) => {\n const route: ImageRoute<GoogleImageOptions> = {\n id: ADAPTER,\n generate: Effect.fn(\"GoogleImages.generate\")(function* (request: ImageRequestFor<GoogleImageOptions>, execute) {\n const imageParts = yield* Effect.forEach(request.images ?? [], googleImagePart)\n const http = mergeHttpOptions(request.model.http, request.http)\n const requestBody = mergeJsonRecords(\n {\n contents: [{ role: \"user\", parts: [{ text: request.prompt }, ...imageParts] }],\n generationConfig: nativeOptions(request.options),\n },\n http?.body,\n ) as GoogleImageBody\n const text = ProviderShared.encodeJson(requestBody)\n const url = applyQuery(\n `${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\")}/models/${request.model.id}:generateContent`,\n http?.query,\n )\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: text,\n headers: Headers.fromInput({ ...input.headers, ...http?.headers }),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(\n HttpClientRequest.setHeaders(headers),\n HttpClientRequest.bodyText(text, \"application/json\"),\n ),\n )\n const payload = yield* response.json.pipe(\n Effect.mapError(() => invalidOutput(\"Failed to read the Google Images response\")),\n )\n const decoded = yield* Schema.decodeUnknownEffect(GoogleImageResponse)(payload).pipe(\n Effect.mapError(() => invalidOutput(\"Google Images returned an invalid response\")),\n )\n const candidates = decoded.candidates ?? []\n const candidateMetadata = candidates.map((candidate, candidateIndex) => ({\n index: candidate.index ?? candidateIndex,\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n safetyRatings: candidate.safetyRatings,\n citationMetadata: candidate.citationMetadata,\n groundingMetadata: candidate.groundingMetadata,\n parts: (candidate.content?.parts ?? []).map((part) =>\n part.inlineData === undefined\n ? {\n type: \"text\",\n text: part.text,\n thought: part.thought,\n thoughtSignature: part.thoughtSignature,\n }\n : {\n type: \"inlineData\",\n mediaType: part.inlineData.mimeType,\n thought: part.thought,\n thoughtSignature: part.thoughtSignature,\n },\n ),\n }))\n const encoded = candidates.flatMap((candidate, candidateIndex) =>\n (candidate.content?.parts ?? []).flatMap((part, partIndex) =>\n part.inlineData === undefined || part.thought === true\n ? []\n : [{ candidate, candidateIndex, partIndex, inlineData: part.inlineData }],\n ),\n )\n const images = yield* Effect.forEach(encoded, (item) =>\n Effect.fromResult(Encoding.decodeBase64(item.inlineData.data)).pipe(\n Effect.mapError(() =>\n invalidOutput(\n `Google Images candidate ${item.candidateIndex} part ${item.partIndex} contains invalid base64 data`,\n ),\n ),\n Effect.map(\n (data) =>\n new GeneratedImage({\n mediaType: item.inlineData.mimeType,\n data,\n providerMetadata: {\n google: {\n candidateIndex: item.candidate.index ?? item.candidateIndex,\n partIndex: item.partIndex,\n finishReason: item.candidate.finishReason,\n safetyRatings: item.candidate.safetyRatings,\n citationMetadata: item.candidate.citationMetadata,\n groundingMetadata: item.candidate.groundingMetadata,\n thoughtSignature: item.candidate.content?.parts[item.partIndex]?.thoughtSignature,\n },\n },\n }),\n ),\n ),\n )\n if (images.length === 0) {\n const finishReasons = candidates.flatMap((candidate) =>\n candidate.finishReason === undefined ? [] : [candidate.finishReason],\n )\n return yield* invalidOutput(\n `Google Images returned no final images${\n finishReasons.length === 0 ? \"\" : ` (finish reasons: ${finishReasons.join(\", \")})`\n }; inspect reason.providerMetadata.google for prompt feedback and candidate details`,\n {\n google: {\n promptFeedback: decoded.promptFeedback,\n candidates: candidateMetadata,\n },\n },\n )\n }\n const usage = decoded.usageMetadata\n const outputTokens =\n usage?.candidatesTokenCount === undefined\n ? undefined\n : usage.candidatesTokenCount + (usage.thoughtsTokenCount ?? 0)\n return new ImageResponse({\n images,\n usage:\n usage === undefined\n ? undefined\n : new Usage({\n inputTokens: usage.promptTokenCount,\n outputTokens,\n nonCachedInputTokens: ProviderShared.subtractTokens(\n usage.promptTokenCount,\n usage.cachedContentTokenCount,\n ),\n cacheReadInputTokens: usage.cachedContentTokenCount,\n reasoningTokens: usage.thoughtsTokenCount,\n totalTokens: ProviderShared.totalTokens(usage.promptTokenCount, outputTokens, usage.totalTokenCount),\n providerMetadata: { google: usage },\n }),\n providerMetadata: {\n google: {\n modelVersion: decoded.modelVersion,\n responseId: decoded.responseId,\n promptFeedback: decoded.promptFeedback,\n candidates: candidateMetadata,\n },\n },\n })\n }),\n }\n return ImageModel.make<GoogleImageOptions>({ id: input.id, provider: \"google\", route, http: input.http })\n}\n\nconst googleImagePart = (image: ImageInput): Effect.Effect<Record<string, unknown>, LLMError> => {\n if (image.type === \"bytes\")\n return Effect.succeed({ inlineData: { mimeType: image.mediaType, data: Encoding.encodeBase64(image.data) } })\n if (image.type === \"file-uri\") return Effect.succeed({ fileData: { mimeType: image.mediaType, fileUri: image.uri } })\n if (image.type === \"url\")\n return ImageInputs.decodeDataUrl(image.url, ADAPTER).pipe(\n Effect.flatMap((decoded) => {\n if (decoded === undefined)\n return Effect.fail(\n ImageInputs.invalid(\n ADAPTER,\n \"Google generateContent does not fetch public image URLs; use bytes, a data URL, or a Gemini file URI\",\n ),\n )\n return Effect.succeed({\n inlineData: { mimeType: decoded.mediaType, data: Encoding.encodeBase64(decoded.data) },\n })\n }),\n )\n return Effect.fail(\n ImageInputs.invalid(ADAPTER, \"Google generateContent requires Gemini file URIs rather than provider file IDs\"),\n )\n}\n\nexport const GoogleImages = {\n model,\n} as const\n", | ||
| "import type { RouteDefaultsInput } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderAuthOption } from \"../route/auth-options\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { HttpOptions, ProviderID, mergeHttpOptions, type ModelID } from \"../schema\"\nimport { Gemini } from \"../protocols/gemini\"\nimport { GoogleImages } from \"../protocols/google-images\"\n\nexport type { GoogleImageOptions } from \"../protocols/google-images\"\nexport type GeminiOptionsInput = Gemini.OptionsInput\nexport type GeminiProviderOptionsInput = Gemini.ProviderOptionsInput\n\nexport const id = ProviderID.make(\"google\")\n\nexport const routes = [Gemini.route]\n\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: Gemini.ProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly providerOptions?: Gemini.ProviderOptionsInput\n}\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => {\n if (\"auth\" in options && options.auth) return options.auth\n return Auth.optional(\"apiKey\" in options ? options.apiKey : undefined, \"apiKey\")\n .orElse(Auth.config(\"GOOGLE_GENERATIVE_AI_API_KEY\"))\n .pipe(Auth.header(\"x-goog-api-key\"))\n}\n\nconst configuredRoute = (input: Config) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return Gemini.route.with({ ...rest, endpoint: { baseURL }, auth: auth(input) })\n}\n\nexport const configure = (input: Config = {}) => {\n const route = configuredRoute(input)\n const image = (modelID: string | ModelID) =>\n GoogleImages.model({\n id: modelID,\n auth: auth(input),\n baseURL: input.baseURL,\n headers: input.headers,\n http: mergeHttpOptions(input.http === undefined ? undefined : HttpOptions.make(input.http)),\n })\n return {\n id,\n model: (modelID: string | ModelID) => route.model<Gemini.ProviderOptionsInput>({ id: modelID }),\n image,\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, Gemini.ProviderOptionsInput>[\"model\"] = (modelID, settings) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n\nexport const image = provider.image\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "ED7A4D483AE414B564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/logout.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { OpenCode } from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\nimport { resolveIntegration } from \"./resolve\"\n\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.logout,\n Effect.fn(\"cli.mcp.logout\")(function* (input) {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n\n const integration = yield* resolveIntegration(client, input.name, location)\n if (!integration) {\n process.stdout.write(`No stored credentials for ${input.name}` + EOL)\n return\n }\n\n const credentials = integration.connections.filter((connection) => connection.type === \"credential\")\n if (credentials.length === 0) {\n process.stdout.write(`No stored credentials for ${input.name}` + EOL)\n return\n }\n\n yield* Effect.forEach(\n credentials,\n (connection) => Effect.promise(() => client.credential.remove({ credentialID: connection.id, location })),\n { discard: true },\n )\n process.stdout.write(`Removed OAuth credentials for ${input.name}` + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";66BAAA,mBAAS,gBAST,SAAM,OAAW,MAAE,eAAW,aAAQ,SAAI,MAAE,OAE7B,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,YAC/B,OAAO,QAAG,qBAAgB,OAAE,cAAU,MAAC,OAAO,CAC5C,IAAM,EAAU,MAAO,EAAc,QAAQ,EAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,EAAc,MAAO,EAAmB,EAAQ,EAAM,KAAM,CAAQ,EAC1E,GAAI,CAAC,EAAa,CAChB,QAAQ,OAAO,MAAM,6BAA6B,EAAM,OAAS,CAAG,EACpE,OAGF,IAAM,EAAc,EAAY,YAAY,OAAO,CAAC,IAAe,EAAW,OAAS,YAAY,EACnG,GAAI,EAAY,SAAW,EAAG,CAC5B,QAAQ,OAAO,MAAM,6BAA6B,EAAM,OAAS,CAAG,EACpE,OAGF,MAAO,EAAO,QACZ,EACA,CAAC,IAAe,EAAO,QAAQ,IAAM,EAAO,WAAW,OAAO,CAAE,aAAc,EAAW,GAAI,UAAS,CAAC,CAAC,EACxG,CAAE,QAAS,EAAK,CAClB,EACA,QAAQ,OAAO,MAAM,iCAAiC,EAAM,OAAS,CAAG,EACzE,CACH", | ||
| "debugId": "EF38F0A07AFE247464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/theme/system.ts"], | ||
| "sourcesContent": [ | ||
| "import { RGBA, type TerminalColors } from \"@opentui/core\"\nimport { ansiToRgba, tint } from \"./color\"\n\nexport function terminalMode(colors: TerminalColors): \"dark\" | \"light\" | undefined {\n const bg = colors.defaultBackground\n if (!bg) return\n const { r, g, b } = RGBA.fromHex(bg)\n return 0.299 * r + 0.587 * g + 0.114 * b > 0.5 ? \"light\" : \"dark\"\n}\n\nexport function generateSystem(colors: TerminalColors, mode: \"dark\" | \"light\") {\n const bg = RGBA.fromHex(colors.defaultBackground ?? colors.palette[0]!)\n const fg = RGBA.fromHex(colors.defaultForeground ?? colors.palette[7]!)\n const transparent = RGBA.fromValues(bg.r, bg.g, bg.b, 0)\n const isDark = mode === \"dark\"\n\n const col = (index: number) => {\n const value = colors.palette[index]\n if (value) return RGBA.fromHex(value)\n return ansiToRgba(index)\n }\n\n const grays = generateGrayScale(bg, isDark)\n const textMuted = generateMutedTextColor(bg, isDark)\n const ansiColors = {\n red: col(1),\n green: col(2),\n yellow: col(3),\n blue: col(4),\n magenta: col(5),\n cyan: col(6),\n redBright: col(9),\n greenBright: col(10),\n }\n\n const diffAlpha = isDark ? 0.22 : 0.14\n const diffAddedBg = tint(bg, ansiColors.green, diffAlpha)\n const diffRemovedBg = tint(bg, ansiColors.red, diffAlpha)\n const diffContextBg = grays[2]\n const diffAddedLineNumberBg = tint(diffContextBg, ansiColors.green, diffAlpha)\n const diffRemovedLineNumberBg = tint(diffContextBg, ansiColors.red, diffAlpha)\n\n return {\n theme: {\n primary: ansiColors.cyan,\n secondary: ansiColors.magenta,\n accent: ansiColors.cyan,\n error: ansiColors.red,\n warning: ansiColors.yellow,\n success: ansiColors.green,\n info: ansiColors.cyan,\n text: fg,\n textMuted,\n selectedListItemText: bg,\n background: transparent,\n backgroundPanel: grays[2],\n backgroundElement: grays[3],\n backgroundMenu: grays[3],\n borderSubtle: grays[6],\n border: grays[7],\n borderActive: grays[8],\n diffAdded: ansiColors.green,\n diffRemoved: ansiColors.red,\n diffContext: grays[7],\n diffHunkHeader: grays[7],\n diffHighlightAdded: ansiColors.greenBright,\n diffHighlightRemoved: ansiColors.redBright,\n diffAddedBg,\n diffRemovedBg,\n diffContextBg,\n diffLineNumber: textMuted,\n diffAddedLineNumberBg,\n diffRemovedLineNumberBg,\n markdownText: fg,\n markdownHeading: fg,\n markdownLink: ansiColors.blue,\n markdownLinkText: ansiColors.cyan,\n markdownCode: ansiColors.green,\n markdownBlockQuote: ansiColors.yellow,\n markdownEmph: ansiColors.yellow,\n markdownStrong: fg,\n markdownHorizontalRule: grays[7],\n markdownListItem: ansiColors.blue,\n markdownListEnumeration: ansiColors.cyan,\n markdownImage: ansiColors.blue,\n markdownImageText: ansiColors.cyan,\n markdownCodeBlock: fg,\n syntaxComment: textMuted,\n syntaxKeyword: ansiColors.magenta,\n syntaxFunction: ansiColors.blue,\n syntaxVariable: fg,\n syntaxString: ansiColors.green,\n syntaxNumber: ansiColors.yellow,\n syntaxType: ansiColors.cyan,\n syntaxOperator: ansiColors.cyan,\n syntaxPunctuation: fg,\n },\n }\n}\n\nfunction generateGrayScale(bg: RGBA, isDark: boolean): Record<number, RGBA> {\n const grays: Record<number, RGBA> = {}\n const bgR = bg.r * 255\n const bgG = bg.g * 255\n const bgB = bg.b * 255\n const luminance = 0.299 * bgR + 0.587 * bgG + 0.114 * bgB\n\n for (let i = 1; i <= 12; i++) {\n const factor = i / 12\n\n if (isDark && luminance < 10) {\n const gray = Math.floor(factor * 0.4 * 255)\n grays[i] = RGBA.fromInts(gray, gray, gray)\n continue\n }\n\n if (!isDark && luminance > 245) {\n const gray = Math.floor(255 - factor * 0.4 * 255)\n grays[i] = RGBA.fromInts(gray, gray, gray)\n continue\n }\n\n const next = isDark ? luminance + (255 - luminance) * factor * 0.4 : luminance * (1 - factor * 0.4)\n const ratio = next / luminance\n grays[i] = RGBA.fromInts(\n Math.floor(Math.min(Math.max(bgR * ratio, 0), 255)),\n Math.floor(Math.min(Math.max(bgG * ratio, 0), 255)),\n Math.floor(Math.min(Math.max(bgB * ratio, 0), 255)),\n )\n }\n\n return grays\n}\n\nfunction generateMutedTextColor(bg: RGBA, isDark: boolean): RGBA {\n const luminance = 0.299 * bg.r * 255 + 0.587 * bg.g * 255 + 0.114 * bg.b * 255\n if (isDark) {\n const gray = luminance < 10 ? 180 : Math.min(Math.floor(160 + luminance * 0.3), 200)\n return RGBA.fromInts(gray, gray, gray)\n }\n\n const gray = luminance > 245 ? 75 : Math.max(Math.floor(100 - (255 - luminance) * 0.2), 60)\n return RGBA.fromInts(gray, gray, gray)\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "E590005611908AE064756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "E03CF4AEE78CF15064756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/xai-images.ts", "../ai/src/providers/xai.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Encoding, Schema } from \"effect\"\nimport { Headers, HttpClientRequest } from \"effect/unstable/http\"\nimport { GeneratedImage, ImageModel, ImageResponse, type ImageRequestFor, type ImageRoute } from \"../image\"\nimport { Auth, type Definition as AuthDefinition } from \"../route/auth\"\nimport {\n InvalidProviderOutputReason,\n LLMError,\n Usage,\n mergeHttpOptions,\n mergeJsonRecords,\n type HttpOptions,\n} from \"../schema\"\nimport { ProviderShared, optionalNull } from \"./shared\"\nimport { ImageInputs } from \"./utils/image-input\"\n\nconst ADAPTER = \"xai-images\"\nexport const DEFAULT_BASE_URL = \"https://api.x.ai/v1\"\nexport const PATH = \"/images/generations\"\nexport const EDIT_PATH = \"/images/edits\"\n\nexport type XAIImageString<Known extends string> = Known | (string & {})\n\nexport type XAIImageOptions = {\n readonly n?: number\n readonly aspectRatio?: XAIImageString<\n | \"1:1\"\n | \"3:4\"\n | \"4:3\"\n | \"9:16\"\n | \"16:9\"\n | \"2:3\"\n | \"3:2\"\n | \"9:19.5\"\n | \"19.5:9\"\n | \"9:20\"\n | \"20:9\"\n | \"1:2\"\n | \"2:1\"\n | \"auto\"\n >\n readonly aspect_ratio?: XAIImageString<\n | \"1:1\"\n | \"3:4\"\n | \"4:3\"\n | \"9:16\"\n | \"16:9\"\n | \"2:3\"\n | \"3:2\"\n | \"9:19.5\"\n | \"19.5:9\"\n | \"9:20\"\n | \"20:9\"\n | \"1:2\"\n | \"2:1\"\n | \"auto\"\n >\n readonly resolution?: XAIImageString<\"1k\" | \"2k\">\n readonly responseFormat?: XAIImageString<\"url\" | \"b64_json\">\n readonly response_format?: XAIImageString<\"url\" | \"b64_json\">\n} & Record<string, unknown>\n\ntype XAIImageBody = Record<string, unknown> & {\n readonly model: string\n readonly prompt: string\n}\n\nconst XAIImageResponse = Schema.Struct({\n data: Schema.Array(\n Schema.Struct({\n b64_json: optionalNull(Schema.String),\n url: optionalNull(Schema.String),\n revised_prompt: optionalNull(Schema.String),\n mime_type: optionalNull(Schema.String),\n }),\n ),\n usage: Schema.optional(Schema.Unknown),\n})\n\nexport interface ModelInput {\n readonly id: string\n readonly auth: AuthDefinition\n readonly baseURL?: string\n readonly headers?: Record<string, string>\n readonly http?: HttpOptions\n}\n\nconst nativeOptions = (options: XAIImageOptions | undefined) => {\n if (!options) return undefined\n const { aspectRatio, responseFormat, ...native } = options\n return {\n aspect_ratio: aspectRatio,\n response_format: responseFormat,\n ...native,\n }\n}\n\nconst invalidOutput = (message: string) =>\n new LLMError({\n module: ADAPTER,\n method: \"generate\",\n reason: new InvalidProviderOutputReason({ message, route: ADAPTER }),\n })\n\nconst applyQuery = (url: string, query: Record<string, string> | undefined) => {\n if (!query) return url\n const next = new URL(url)\n Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value))\n return next.toString()\n}\n\nexport const model = (input: ModelInput) => {\n const route: ImageRoute<XAIImageOptions> = {\n id: ADAPTER,\n generate: Effect.fn(\"XAIImages.generate\")(function* (request: ImageRequestFor<XAIImageOptions>, execute) {\n const http = mergeHttpOptions(request.model.http, request.http)\n const imageReferences = (request.images ?? []).map((image) => {\n if (image.type === \"bytes\") return { url: ImageInputs.dataUrl(image), type: \"image_url\" as const }\n if (image.type === \"url\") return { url: image.url, type: \"image_url\" as const }\n if (image.type === \"file-id\") return { file_id: image.id }\n return undefined\n })\n if (imageReferences.some((image) => image === undefined))\n return yield* ImageInputs.invalid(ADAPTER, \"xAI Images accepts image URLs, data URLs, bytes, and file IDs\")\n const requestBody = mergeJsonRecords(\n {\n model: request.model.id,\n prompt: request.prompt,\n image: imageReferences.length === 1 ? imageReferences[0] : undefined,\n images: imageReferences.length > 1 ? imageReferences : undefined,\n },\n nativeOptions(request.options),\n http?.body,\n ) as XAIImageBody\n const text = ProviderShared.encodeJson(requestBody)\n const url = applyQuery(\n `${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\")}${imageReferences.length === 0 ? PATH : EDIT_PATH}`,\n http?.query,\n )\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: text,\n headers: Headers.fromInput({ ...input.headers, ...http?.headers }),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(\n HttpClientRequest.setHeaders(headers),\n HttpClientRequest.bodyText(text, \"application/json\"),\n ),\n )\n const payload = yield* response.json.pipe(\n Effect.mapError(() => invalidOutput(\"Failed to read the xAI Images response\")),\n )\n const decoded = yield* Schema.decodeUnknownEffect(XAIImageResponse)(payload).pipe(\n Effect.mapError(() => invalidOutput(\"xAI Images returned an invalid response\")),\n )\n const images = yield* Effect.forEach(decoded.data, (item, index) => {\n const mediaType = item.mime_type ?? \"application/octet-stream\"\n if (item.b64_json)\n return Effect.fromResult(Encoding.decodeBase64(item.b64_json)).pipe(\n Effect.mapError(() => invalidOutput(`xAI Images result ${index} contains invalid base64 data`)),\n Effect.map(\n (data) =>\n new GeneratedImage({\n mediaType,\n data,\n providerMetadata:\n item.revised_prompt === undefined || item.revised_prompt === null\n ? undefined\n : { xai: { revisedPrompt: item.revised_prompt } },\n }),\n ),\n )\n if (item.url)\n return Effect.succeed(\n new GeneratedImage({\n mediaType,\n data: item.url,\n providerMetadata:\n item.revised_prompt === undefined || item.revised_prompt === null\n ? undefined\n : { xai: { revisedPrompt: item.revised_prompt } },\n }),\n )\n return Effect.fail(invalidOutput(`xAI Images result ${index} has neither image data nor a URL`))\n })\n if (images.length === 0) return yield* invalidOutput(\"xAI Images returned no images\")\n const usage = ProviderShared.isRecord(decoded.usage) ? decoded.usage : undefined\n return new ImageResponse({\n images,\n usage: usage === undefined ? undefined : new Usage({ providerMetadata: { xai: usage } }),\n providerMetadata: usage === undefined ? undefined : { xai: { usage } },\n })\n }),\n }\n return ImageModel.make<XAIImageOptions>({ id: input.id, provider: \"xai\", route, http: input.http })\n}\n\nexport const XAIImages = {\n model,\n} as const\n", | ||
| "import { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport { Route, type RouteDefaultsInput } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { HttpOptions, ProviderID, type ModelID, type ProviderOptions } from \"../schema\"\nimport * as OpenAICompatibleProfiles from \"./openai-compatible-profile\"\nimport * as OpenAICompatibleChat from \"../protocols/openai-compatible-chat\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport * as OpenAIResponses from \"../protocols/openai-responses\"\nimport { XAIImages } from \"../protocols/xai-images\"\nimport type { OpenAIOptionsInput } from \"./openai-options\"\nimport type { ProviderPackage } from \"../provider-package\"\n\nexport const id = ProviderID.make(\"xai\")\n\nexport type XAIProviderOptionsInput = ProviderOptions & {\n readonly xai?: OpenAIOptionsInput\n}\n\nexport type ModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: XAIProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly providerOptions?: XAIProviderOptionsInput\n}\n\nexport type { XAIImageOptions } from \"../protocols/xai-images\"\n\nconst responsesRoute = Route.make({\n id: \"openai-responses\",\n provider: id,\n providerMetadataKey: \"xai\",\n protocol: OpenAIResponses.protocol,\n endpoint: Endpoint.path(\"/responses\", { baseURL: OpenAICompatibleProfiles.profiles.xai.baseURL }),\n transport: OpenAIResponses.httpTransport,\n defaults: { providerOptions: { xai: { store: false } } },\n})\n\nconst chatRoute = Route.make({\n id: \"openai-compatible-chat\",\n provider: id,\n providerMetadataKey: \"xai\",\n protocol: OpenAIChat.protocol,\n endpoint: Endpoint.path(\"/chat/completions\", { baseURL: OpenAICompatibleProfiles.profiles.xai.baseURL }),\n transport: OpenAICompatibleChat.route.transport,\n})\n\nexport const routes = [responsesRoute, chatRoute]\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => AuthOptions.bearer(options, \"XAI_API_KEY\")\n\nconst configuredResponsesRoute = (input: ModelOptions) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return responsesRoute.with({\n ...rest,\n endpoint: { baseURL: baseURL ?? OpenAICompatibleProfiles.profiles.xai.baseURL },\n auth: auth(input),\n })\n}\n\nconst configuredChatRoute = (input: ModelOptions) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return chatRoute.with({\n ...rest,\n endpoint: { baseURL: baseURL ?? OpenAICompatibleProfiles.profiles.xai.baseURL },\n auth: auth(input),\n })\n}\n\nexport const configure = (input: ModelOptions = {}) => {\n const responsesRoute = configuredResponsesRoute(input)\n const chatRoute = configuredChatRoute(input)\n const responses = (modelID: string | ModelID) => responsesRoute.model<XAIProviderOptionsInput>({ id: modelID })\n const chat = (modelID: string | ModelID) => chatRoute.model<XAIProviderOptionsInput>({ id: modelID })\n const image = (modelID: string | ModelID) =>\n XAIImages.model({\n id: modelID,\n auth: auth(input),\n baseURL: input.baseURL ?? OpenAICompatibleProfiles.profiles.xai.baseURL,\n headers: input.headers,\n http: input.http === undefined ? undefined : HttpOptions.make(input.http),\n })\n return {\n id,\n model: responses,\n responses,\n chat,\n image,\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, XAIProviderOptionsInput>[\"model\"] = (modelID, settings) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers,\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\nexport const responses = provider.responses\nexport const chat = provider.chat\nexport const image = provider.image\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "3B604D3A1FAAAE9964756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "67343726A627BF8564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/resolve.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport type { OpenCodeClient } from \"@opencode-ai/client\"\n\n// Resolve through the MCP-owned integrationID rather than matching integration names: the shared\n// integration registry also holds provider/plugin integrations, whose names could collide with a server.\n// Fails when the server is unknown; returns undefined when the server has no integration (e.g. a local\n// or anonymous server), leaving that case for the caller to interpret.\nexport const resolveIntegration = (client: OpenCodeClient, name: string, location: { directory: string }) =>\n Effect.gen(function* () {\n const servers = yield* Effect.promise(() => client.mcp.list({ location }))\n const server = servers.data.find((entry) => entry.name === name)\n if (!server) return yield* Effect.fail(new Error(`MCP server not found: ${name}`))\n const integrationID = server.integrationID\n if (!integrationID) return undefined\n return yield* Effect.promise(() => client.integration.get({ integrationID, location })).pipe(\n Effect.map((result) => result.data ?? undefined),\n )\n })\n" | ||
| ], | ||
| "mappings": ";oDAOO,IAAM,EAAqB,CAAC,EAAwB,EAAc,IACvE,EAAO,IAAI,SAAU,EAAG,CAEtB,IAAM,GADU,MAAO,EAAO,QAAQ,IAAM,EAAO,IAAI,KAAK,CAAE,UAAS,CAAC,CAAC,GAClD,KAAK,KAAK,CAAC,IAAU,EAAM,OAAS,CAAI,EAC/D,GAAI,CAAC,EAAQ,OAAO,MAAO,EAAO,KAAS,MAAM,yBAAyB,GAAM,CAAC,EACjF,IAAM,EAAgB,EAAO,cAC7B,GAAI,CAAC,EAAe,OACpB,OAAO,MAAO,EAAO,QAAQ,IAAM,EAAO,YAAY,IAAI,CAAE,gBAAe,UAAS,CAAC,CAAC,EAAE,KACtF,EAAO,IAAI,CAAC,IAAW,EAAO,MAAQ,MAAS,CACjD,EACD", | ||
| "debugId": "7524C77BA36F0FE664756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/theme/color.ts", "../tui/src/theme/resolve.ts"], | ||
| "sourcesContent": [ | ||
| "import { RGBA } from \"@opentui/core\"\n\nexport function ansiToRgba(code: number): RGBA {\n if (code < 16) {\n const ansiColors = [\n \"#000000\",\n \"#800000\",\n \"#008000\",\n \"#808000\",\n \"#000080\",\n \"#800080\",\n \"#008080\",\n \"#c0c0c0\",\n \"#808080\",\n \"#ff0000\",\n \"#00ff00\",\n \"#ffff00\",\n \"#0000ff\",\n \"#ff00ff\",\n \"#00ffff\",\n \"#ffffff\",\n ]\n return RGBA.fromHex(ansiColors[code] ?? \"#000000\")\n }\n\n if (code < 232) {\n const index = code - 16\n const b = index % 6\n const g = Math.floor(index / 6) % 6\n const r = Math.floor(index / 36)\n const val = (x: number) => (x === 0 ? 0 : x * 40 + 55)\n return RGBA.fromInts(val(r), val(g), val(b))\n }\n\n if (code < 256) {\n const gray = (code - 232) * 10 + 8\n return RGBA.fromInts(gray, gray, gray)\n }\n\n return RGBA.fromInts(0, 0, 0)\n}\n\nexport function tint(base: RGBA, overlay: RGBA, alpha: number): RGBA {\n const r = base.r + (overlay.r - base.r) * alpha\n const g = base.g + (overlay.g - base.g) * alpha\n const b = base.b + (overlay.b - base.b) * alpha\n return RGBA.fromInts(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255))\n}\n", | ||
| "import { RGBA } from \"@opentui/core\"\nimport { ansiToRgba } from \"./color\"\nimport type { ColorValue, Theme, ThemeColor, ThemeV1Json } from \"./v1\"\n\nexport function resolveThemeColors(\n theme: ThemeV1Json,\n mode: \"dark\" | \"light\",\n resolveAnsi: (code: number) => RGBA = ansiToRgba,\n) {\n const defs = theme.defs ?? {}\n function resolveColor(color: ColorValue, chain: string[] = []): RGBA {\n if (color instanceof RGBA) return color\n if (typeof color === \"string\") {\n if (color === \"transparent\" || color === \"none\") return RGBA.fromInts(0, 0, 0, 0)\n\n if (color.startsWith(\"#\")) return RGBA.fromHex(color)\n\n if (chain.includes(color)) {\n throw new Error(`Circular color reference: ${[...chain, color].join(\" -> \")}`)\n }\n\n const next = defs[color] ?? theme.theme[color as ThemeColor]\n if (next === undefined) {\n throw new Error(`Color reference \"${color}\" not found in defs or theme`)\n }\n return resolveColor(next, [...chain, color])\n }\n if (typeof color === \"number\") return resolveAnsi(color)\n return resolveColor(color[mode], chain)\n }\n\n const resolved = Object.fromEntries(\n Object.entries(theme.theme)\n .filter(([key]) => key !== \"selectedListItemText\" && key !== \"backgroundMenu\" && key !== \"thinkingOpacity\")\n .map(([key, value]) => [key, resolveColor(value as ColorValue)]),\n ) as Partial<Record<ThemeColor, RGBA>>\n\n const hasSelectedListItemText = theme.theme.selectedListItemText !== undefined\n return {\n theme: {\n ...(resolved as Record<ThemeColor, RGBA>),\n selectedListItemText: hasSelectedListItemText\n ? resolveColor(theme.theme.selectedListItemText!)\n : resolved.background!,\n backgroundMenu:\n theme.theme.backgroundMenu === undefined\n ? resolved.backgroundElement!\n : resolveColor(theme.theme.backgroundMenu),\n } satisfies Omit<Theme, \"_hasSelectedListItemText\" | \"thinkingOpacity\">,\n hasSelectedListItemText,\n thinkingOpacity: theme.theme.thinkingOpacity ?? 0.6,\n }\n}\n" | ||
| ], | ||
| "mappings": ";oDAEO,SAAS,CAAU,CAAC,EAAoB,CAC7C,GAAI,EAAO,GAAI,CACb,IAAM,EAAa,CACjB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACF,EACA,OAAO,EAAK,QAAQ,EAAW,IAAS,SAAS,EAGnD,GAAI,EAAO,IAAK,CACd,IAAM,EAAQ,EAAO,GACf,EAAI,EAAQ,EACZ,EAAI,KAAK,MAAM,EAAQ,CAAC,EAAI,EAC5B,EAAI,KAAK,MAAM,EAAQ,EAAE,EACzB,EAAM,CAAC,IAAe,IAAM,EAAI,EAAI,EAAI,GAAK,GACnD,OAAO,EAAK,SAAS,EAAI,CAAC,EAAG,EAAI,CAAC,EAAG,EAAI,CAAC,CAAC,EAG7C,GAAI,EAAO,IAAK,CACd,IAAM,GAAQ,EAAO,KAAO,GAAK,EACjC,OAAO,EAAK,SAAS,EAAM,EAAM,CAAI,EAGvC,OAAO,EAAK,SAAS,EAAG,EAAG,CAAC,EAGvB,SAAS,CAAI,CAAC,EAAY,EAAe,EAAqB,CACnE,IAAM,EAAI,EAAK,GAAK,EAAQ,EAAI,EAAK,GAAK,EACpC,EAAI,EAAK,GAAK,EAAQ,EAAI,EAAK,GAAK,EACpC,EAAI,EAAK,GAAK,EAAQ,EAAI,EAAK,GAAK,EAC1C,OAAO,EAAK,SAAS,KAAK,MAAM,EAAI,GAAG,EAAG,KAAK,MAAM,EAAI,GAAG,EAAG,KAAK,MAAM,EAAI,GAAG,CAAC,EC1C7E,SAAS,CAAkB,CAChC,EACA,EACA,EAAsC,EACtC,CACA,IAAM,EAAO,EAAM,MAAQ,CAAC,EAC5B,SAAS,CAAY,CAAC,EAAmB,EAAkB,CAAC,EAAS,CACnE,GAAI,aAAiB,EAAM,OAAO,EAClC,GAAI,OAAO,IAAU,SAAU,CAC7B,GAAI,IAAU,eAAiB,IAAU,OAAQ,OAAO,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EAEhF,GAAI,EAAM,WAAW,GAAG,EAAG,OAAO,EAAK,QAAQ,CAAK,EAEpD,GAAI,EAAM,SAAS,CAAK,EACtB,MAAU,MAAM,6BAA6B,CAAC,GAAG,EAAO,CAAK,EAAE,KAAK,MAAM,GAAG,EAG/E,IAAM,EAAO,EAAK,IAAU,EAAM,MAAM,GACxC,GAAI,IAAS,OACX,MAAU,MAAM,oBAAoB,+BAAmC,EAEzE,OAAO,EAAa,EAAM,CAAC,GAAG,EAAO,CAAK,CAAC,EAE7C,GAAI,OAAO,IAAU,SAAU,OAAO,EAAY,CAAK,EACvD,OAAO,EAAa,EAAM,GAAO,CAAK,EAGxC,IAAM,EAAW,OAAO,YACtB,OAAO,QAAQ,EAAM,KAAK,EACvB,OAAO,EAAE,KAAS,IAAQ,wBAA0B,IAAQ,kBAAoB,IAAQ,iBAAiB,EACzG,IAAI,EAAE,EAAK,KAAW,CAAC,EAAK,EAAa,CAAmB,CAAC,CAAC,CACnE,EAEM,EAA0B,EAAM,MAAM,uBAAyB,OACrE,MAAO,CACL,MAAO,IACD,EACJ,qBAAsB,EAClB,EAAa,EAAM,MAAM,oBAAqB,EAC9C,EAAS,WACb,eACE,EAAM,MAAM,iBAAmB,OAC3B,EAAS,kBACT,EAAa,EAAM,MAAM,cAAc,CAC/C,EACA,0BACA,gBAAiB,EAAM,MAAM,iBAAmB,GAClD", | ||
| "debugId": "8571AA8BC20AACE864756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/run.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServerConnection } from \"../../services/server-connection\"\n\nexport default Runtime.handler(Commands.commands.run, (input) =>\n Effect.gen(function* () {\n const { runNonInteractive } = yield* Effect.promise(() => import(\"../../run/run\"))\n const separator = process.argv.indexOf(\"--\", 2)\n const server = yield* ServerConnection.resolve({\n server: Option.getOrUndefined(input.server),\n standalone: input.standalone,\n })\n yield* Effect.promise(() =>\n runNonInteractive({\n server,\n message: [...input.message, ...(separator === -1 ? [] : process.argv.slice(separator + 1))],\n continue: input.continue,\n session: Option.getOrUndefined(input.session),\n fork: input.fork,\n model: Option.getOrUndefined(input.model),\n agent: Option.getOrUndefined(input.agent),\n format: input.format,\n file: [...input.file],\n title: Option.getOrUndefined(input.title),\n thinking: input.thinking,\n auto: input.auto || input.yolo || input.dangerouslySkipPermissions,\n }),\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+9BAKA,SAAe,SAAQ,aAAQ,OAAS,cAAS,SAAK,MAAC,SACrD,OAAO,SAAI,cAAU,OAAG,MACtB,SAAQ,0BAAsB,WAAO,OAAO,aAAQ,SAAa,wCAAgB,OAC3E,OAAY,aAAQ,UAAK,aAAQ,UAAM,MAAC,EACxC,EAAS,MAAO,EAAiB,QAAQ,CAC7C,OAAQ,EAAO,eAAe,EAAM,MAAM,EAC1C,WAAY,EAAM,UACpB,CAAC,EACD,MAAO,EAAO,QAAQ,IACpB,EAAkB,CAChB,SACA,QAAS,CAAC,GAAG,EAAM,QAAS,GAAI,IAAc,GAAK,CAAC,EAAI,QAAQ,KAAK,MAAM,EAAY,CAAC,CAAE,EAC1F,SAAU,EAAM,SAChB,QAAS,EAAO,eAAe,EAAM,OAAO,EAC5C,KAAM,EAAM,KACZ,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,OAAQ,EAAM,OACd,KAAM,CAAC,GAAG,EAAM,IAAI,EACpB,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,SAAU,EAAM,SAChB,KAAM,EAAM,MAAQ,EAAM,MAAQ,EAAM,0BAC1C,CAAC,CACH,EACD,CACH", | ||
| "debugId": "E82495525A356EED64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+deepinfra@2.0.41+d6123d32214422cb/node_modules/@ai-sdk/deepinfra/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/deepinfra-provider.ts\nimport {\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel\n} from \"@ai-sdk/openai-compatible\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/deepinfra-image-model.ts\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n convertToFormData,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n downloadBlob,\n postFormDataToApi,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\nvar DeepInfraImageModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n this.maxImagesPerCall = 1;\n }\n get provider() {\n return this.config.provider;\n }\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask\n }) {\n var _a, _b, _c, _d, _e;\n const warnings = [];\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n if (files != null && files.length > 0) {\n const { value: response2, responseHeaders: responseHeaders2 } = await postFormDataToApi({\n url: this.getEditUrl(),\n headers: combineHeaders(this.config.headers(), headers),\n formData: convertToFormData(\n {\n model: this.modelId,\n prompt,\n image: await Promise.all(files.map((file) => fileToBlob(file))),\n mask: mask != null ? await fileToBlob(mask) : void 0,\n n,\n size,\n ...(_d = providerOptions.deepinfra) != null ? _d : {}\n },\n { useArrayBrackets: false }\n ),\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraEditErrorSchema,\n errorToMessage: (error) => {\n var _a2, _b2;\n return (_b2 = (_a2 = error.error) == null ? void 0 : _a2.message) != null ? _b2 : \"Unknown error\";\n }\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraEditResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n images: response2.data.map((item) => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders2\n }\n };\n }\n const splitSize = size == null ? void 0 : size.split(\"x\");\n const { value: response, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n prompt,\n num_images: n,\n ...aspectRatio && { aspect_ratio: aspectRatio },\n ...splitSize && { width: splitSize[0], height: splitSize[1] },\n ...seed != null && { seed },\n ...(_e = providerOptions.deepinfra) != null ? _e : {}\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: deepInfraErrorSchema,\n errorToMessage: (error) => error.detail.error\n }),\n successfulResponseHandler: createJsonResponseHandler(\n deepInfraImageResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n images: response.images.map(\n (image) => image.replace(/^data:image\\/\\w+;base64,/, \"\")\n ),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders\n }\n };\n }\n getEditUrl() {\n const baseUrl = this.config.baseURL.replace(\"/inference\", \"/openai\");\n return `${baseUrl}/images/edits`;\n }\n};\nvar deepInfraErrorSchema = z.object({\n detail: z.object({\n error: z.string()\n })\n});\nvar deepInfraImageResponseSchema = z.object({\n images: z.array(z.string())\n});\nvar deepInfraEditErrorSchema = z.object({\n error: z.object({\n message: z.string()\n }).optional()\n});\nvar deepInfraEditResponseSchema = z.object({\n data: z.array(z.object({ b64_json: z.string() }))\n});\nasync function fileToBlob(file) {\n if (file.type === \"url\") {\n return downloadBlob(file.url);\n }\n const data = file.data instanceof Uint8Array ? file.data : convertBase64ToUint8Array(file.data);\n return new Blob([data], { type: file.mediaType });\n}\n\n// src/deepinfra-chat-language-model.ts\nimport { OpenAICompatibleChatLanguageModel } from \"@ai-sdk/openai-compatible\";\nvar DeepInfraChatLanguageModel = class extends OpenAICompatibleChatLanguageModel {\n constructor(modelId, config) {\n super(modelId, config);\n }\n /**\n * Fixes incorrect token usage for Gemini/Gemma models from DeepInfra.\n *\n * DeepInfra's API returns completion_tokens that don't include reasoning_tokens\n * for Gemini/Gemma models, which violates the OpenAI-compatible spec.\n * According to the spec, completion_tokens should include reasoning_tokens.\n *\n * Example of incorrect data from DeepInfra:\n * {\n * \"completion_tokens\": 84, // text-only tokens\n * \"completion_tokens_details\": {\n * \"reasoning_tokens\": 1081 // reasoning tokens not included above\n * }\n * }\n *\n * This would result in negative text tokens: 84 - 1081 = -997\n *\n * The fix: If reasoning_tokens > completion_tokens, add reasoning_tokens\n * to completion_tokens: 84 + 1081 = 1165\n */\n fixUsageForGeminiModels(usage) {\n var _a, _b;\n if (!usage || !((_a = usage.completion_tokens_details) == null ? void 0 : _a.reasoning_tokens)) {\n return usage;\n }\n const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;\n const reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n if (reasoningTokens > completionTokens) {\n const correctedCompletionTokens = completionTokens + reasoningTokens;\n return {\n ...usage,\n // Add reasoning_tokens to completion_tokens to get the correct total\n completion_tokens: correctedCompletionTokens,\n // Update total_tokens if present\n total_tokens: usage.total_tokens != null ? usage.total_tokens + reasoningTokens : void 0\n };\n }\n return usage;\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g;\n const result = await super.doGenerate(options);\n if ((_a = result.usage) == null ? void 0 : _a.raw) {\n const fixedRawUsage = this.fixUsageForGeminiModels(result.usage.raw);\n if (fixedRawUsage !== result.usage.raw) {\n const promptTokens = (_b = fixedRawUsage.prompt_tokens) != null ? _b : 0;\n const completionTokens = (_c = fixedRawUsage.completion_tokens) != null ? _c : 0;\n const cacheReadTokens = (_e = (_d = fixedRawUsage.prompt_tokens_details) == null ? void 0 : _d.cached_tokens) != null ? _e : 0;\n const reasoningTokens = (_g = (_f = fixedRawUsage.completion_tokens_details) == null ? void 0 : _f.reasoning_tokens) != null ? _g : 0;\n return {\n ...result,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens\n },\n raw: fixedRawUsage\n }\n };\n }\n }\n return result;\n }\n async doStream(options) {\n const result = await super.doStream(options);\n const originalStream = result.stream;\n const fixUsage = this.fixUsageForGeminiModels.bind(this);\n const transformedStream = new ReadableStream({\n async start(controller) {\n var _a, _b, _c, _d, _e, _f, _g;\n const reader = originalStream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value.type === \"finish\" && ((_a = value.usage) == null ? void 0 : _a.raw)) {\n const fixedRawUsage = fixUsage(value.usage.raw);\n if (fixedRawUsage !== value.usage.raw) {\n const promptTokens = (_b = fixedRawUsage.prompt_tokens) != null ? _b : 0;\n const completionTokens = (_c = fixedRawUsage.completion_tokens) != null ? _c : 0;\n const cacheReadTokens = (_e = (_d = fixedRawUsage.prompt_tokens_details) == null ? void 0 : _d.cached_tokens) != null ? _e : 0;\n const reasoningTokens = (_g = (_f = fixedRawUsage.completion_tokens_details) == null ? void 0 : _f.reasoning_tokens) != null ? _g : 0;\n controller.enqueue({\n ...value,\n usage: {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens\n },\n raw: fixedRawUsage\n }\n });\n } else {\n controller.enqueue(value);\n }\n } else {\n controller.enqueue(value);\n }\n }\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n }\n });\n return {\n ...result,\n stream: transformedStream\n };\n }\n};\n\n// src/version.ts\nvar VERSION = true ? \"2.0.41\" : \"0.0.0-test\";\n\n// src/deepinfra-provider.ts\nfunction createDeepInfra(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.deepinfra.com/v1\"\n );\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"DEEPINFRA_API_KEY\",\n description: \"DeepInfra's API key\"\n })}`,\n ...options.headers\n },\n `ai-sdk/deepinfra/${VERSION}`\n );\n const getCommonModelConfig = (modelType) => ({\n provider: `deepinfra.${modelType}`,\n url: ({ path }) => `${baseURL}/openai${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createChatModel = (modelId) => {\n return new DeepInfraChatLanguageModel(\n modelId,\n getCommonModelConfig(\"chat\")\n );\n };\n const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(\n modelId,\n getCommonModelConfig(\"completion\")\n );\n const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig(\"embedding\")\n );\n const createImageModel = (modelId) => new DeepInfraImageModel(modelId, {\n ...getCommonModelConfig(\"image\"),\n baseURL: baseURL ? `${baseURL}/inference` : \"https://api.deepinfra.com/v1/inference\"\n });\n const provider = (modelId) => createChatModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.languageModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n return provider;\n}\nvar deepinfra = createDeepInfra();\nexport {\n VERSION,\n createDeepInfra,\n deepinfra\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "3D6BB8293835903D64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/anthropic-compatible.ts", "../ai/src/providers/anthropic.ts"], | ||
| "sourcesContent": [ | ||
| "import type { ProviderPackage } from \"../provider-package\"\nimport { AnthropicMessages } from \"../protocols/anthropic-messages\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderAuthOption } from \"../route/auth-options\"\nimport type { RouteDefaultsInput } from \"../route/client\"\nimport { ProviderID, type ModelID } from \"../schema\"\n\nexport type AnthropicOptionsInput = AnthropicMessages.OptionsInput\nexport type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput\nexport type AnthropicThinkingInput = AnthropicMessages.ThinkingInput\n\nexport const id = ProviderID.make(\"anthropic-compatible\")\n\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly provider?: string\n readonly baseURL: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nexport type Settings = ProviderPackage.Settings &\n (\n | { readonly apiKey?: string; readonly authToken?: never }\n | { readonly apiKey?: never; readonly authToken?: string }\n ) & {\n readonly baseURL: string\n readonly provider?: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nexport const routes = [AnthropicMessages.route]\n\nconst auth = (input: ProviderAuthOption<\"optional\">) => {\n if (\"auth\" in input && input.auth) return input.auth\n return Auth.optional(\"apiKey\" in input ? input.apiKey : undefined, \"apiKey\").pipe(Auth.header(\"x-api-key\"))\n}\n\nexport const configure = (input: Config) => {\n if (!input.baseURL) throw new Error(\"Anthropic-compatible providers require a baseURL\")\n const provider = input.provider ?? \"anthropic-compatible\"\n const { provider: _, baseURL, apiKey: _apiKey, auth: _auth, ...rest } = input\n const route = AnthropicMessages.route.with({\n ...rest,\n provider,\n endpoint: { baseURL },\n auth: auth(input),\n })\n return {\n id: ProviderID.make(provider),\n model: (modelID: string | ModelID) => route.model<AnthropicMessages.ProviderOptionsInput>({ id: modelID }),\n configure,\n }\n}\n\nexport const provider = {\n id,\n configure,\n}\n\nexport const model: ProviderPackage.Definition<Settings, AnthropicMessages.ProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => {\n if (settings.apiKey !== undefined && settings.authToken !== undefined)\n throw new Error(\"Anthropic-compatible apiKey cannot be combined with authToken\")\n return configure({\n ...(settings.authToken === undefined ? { apiKey: settings.apiKey } : { auth: Auth.bearer(settings.authToken) }),\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n provider: settings.provider,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n}\n\nexport * as AnthropicCompatible from \"./anthropic-compatible\"\n", | ||
| "import type { RouteDefaultsInput } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderAuthOption } from \"../route/auth-options\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { ProviderID, type ModelID } from \"../schema\"\nimport { AnthropicMessages } from \"../protocols/anthropic-messages\"\nimport { AnthropicCompatible } from \"./anthropic-compatible\"\n\nexport type AnthropicOptionsInput = AnthropicMessages.OptionsInput\nexport type AnthropicProviderOptionsInput = AnthropicMessages.ProviderOptionsInput\nexport type AnthropicThinkingInput = AnthropicMessages.ThinkingInput\n\nexport const id = ProviderID.make(\"anthropic\")\n\nexport const routes = [AnthropicMessages.route]\n\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nexport type Settings = ProviderPackage.Settings &\n (\n | { readonly apiKey?: string; readonly authToken?: never }\n | { readonly apiKey?: never; readonly authToken?: string }\n ) & {\n readonly baseURL?: string\n readonly providerOptions?: AnthropicMessages.ProviderOptionsInput\n }\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => {\n if (\"auth\" in options && options.auth) return options.auth\n return Auth.optional(\"apiKey\" in options ? options.apiKey : undefined, \"apiKey\")\n .orElse(Auth.config(\"ANTHROPIC_API_KEY\"))\n .pipe(Auth.header(\"x-api-key\"))\n}\n\nexport const configure = (input: Config = {}) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n const compatible = AnthropicCompatible.configure({\n ...rest,\n auth: auth(input),\n baseURL: baseURL ?? AnthropicMessages.DEFAULT_BASE_URL,\n provider: id,\n })\n return {\n id,\n model: (modelID: string | ModelID) => compatible.model(modelID),\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, AnthropicMessages.ProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => {\n if (settings.apiKey !== undefined && settings.authToken !== undefined)\n throw new Error(\"Anthropic apiKey cannot be combined with authToken\")\n return configure({\n ...(settings.authToken === undefined ? { apiKey: settings.apiKey } : { auth: Auth.bearer(settings.authToken) }),\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n}\n" | ||
| ], | ||
| "mappings": ";ujBAWO,SAAM,OAAK,OAAW,UAAK,2BAAsB,OAmB3C,OAAS,MAAC,OAAkB,UAAK,OAExC,EAAO,CAAC,IAA0C,CACtD,GAAI,SAAU,GAAS,EAAM,KAAM,OAAO,EAAM,KAChD,OAAO,EAAK,SAAS,WAAY,EAAQ,EAAM,OAAS,OAAW,QAAQ,EAAE,KAAK,EAAK,OAAO,WAAW,CAAC,GAG/F,EAAY,CAAC,IAAkB,CAC1C,GAAI,CAAC,EAAM,QAAS,MAAU,MAAM,kDAAkD,EACtF,IAAM,EAAW,EAAM,UAAY,wBAC3B,SAAU,EAAG,UAAS,OAAQ,EAAS,KAAM,KAAU,GAAS,EAClE,EAAQ,EAAkB,MAAM,KAAK,IACtC,EACH,WACA,SAAU,CAAE,SAAQ,EACpB,KAAM,EAAK,CAAK,CAClB,CAAC,EACD,MAAO,CACL,GAAI,EAAW,KAAK,CAAQ,EAC5B,MAAO,CAAC,IAA8B,EAAM,MAA8C,CAAE,GAAI,CAAQ,CAAC,EACzG,WACF,GAGW,EAAW,CACtB,KACA,WACF,EAEa,EAA+F,CAC1G,EACA,IACG,CACH,GAAI,EAAS,SAAW,QAAa,EAAS,YAAc,OAC1D,MAAU,MAAM,+DAA+D,EACjF,OAAO,EAAU,IACX,EAAS,YAAc,OAAY,CAAE,OAAQ,EAAS,MAAO,EAAI,CAAE,KAAM,EAAK,OAAO,EAAS,SAAS,CAAE,EAC7G,QAAS,EAAS,QAClB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,SAAU,EAAS,SACnB,gBAAiB,EAAS,eAC5B,CAAC,EAAE,MAAM,CAAO,GC7DX,IAAM,EAAK,EAAW,KAAK,WAAW,EAEhC,EAAS,CAAC,EAAkB,KAAK,EAiBxC,EAAO,CAAC,IAA4C,CACxD,GAAI,SAAU,GAAW,EAAQ,KAAM,OAAO,EAAQ,KACtD,OAAO,EAAK,SAAS,WAAY,EAAU,EAAQ,OAAS,OAAW,QAAQ,EAC5E,OAAO,EAAK,OAAO,mBAAmB,CAAC,EACvC,KAAK,EAAK,OAAO,WAAW,CAAC,GAGrB,EAAY,CAAC,EAAgB,CAAC,IAAM,CAC/C,IAAQ,OAAQ,EAAG,KAAM,EAAO,aAAY,GAAS,EAC/C,EAAa,EAAoB,UAAU,IAC5C,EACH,KAAM,EAAK,CAAK,EAChB,QAAS,GAAW,EAAkB,iBACtC,SAAU,CACZ,CAAC,EACD,MAAO,CACL,KACA,MAAO,CAAC,IAA8B,EAAW,MAAM,CAAO,EAC9D,WACF,GAGW,EAAW,EAAU,EACrB,EAA+F,CAC1G,EACA,IACG,CACH,GAAI,EAAS,SAAW,QAAa,EAAS,YAAc,OAC1D,MAAU,MAAM,oDAAoD,EACtE,OAAO,EAAU,IACX,EAAS,YAAc,OAAY,CAAE,OAAQ,EAAS,MAAO,EAAI,CAAE,KAAM,EAAK,OAAO,EAAS,SAAS,CAAE,EAC7G,QAAS,EAAS,QAClB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,gBAAiB,EAAS,eAC5B,CAAC,EAAE,MAAM,CAAO", | ||
| "debugId": "8D31B91E5BB62D5564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/services/server-connection.ts"], | ||
| "sourcesContent": [ | ||
| "import { Service, type Endpoint, type EnsureOptions } from \"@opencode-ai/client/effect/service\"\nimport { ClientError, isUnauthorizedError, OpenCode } from \"@opencode-ai/client/promise\"\nimport { OPENCODE_VERSION } from \"../version\"\nimport { Effect, Redacted } from \"effect\"\nimport { Env } from \"../env\"\nimport { ServiceConfig } from \"./service-config\"\nimport { Standalone } from \"./standalone\"\n\nexport type Args = {\n readonly server?: string\n readonly standalone?: boolean\n readonly mismatch?: \"replace\" | \"ignore\" | \"error\"\n readonly onStart?: EnsureOptions[\"onStart\"]\n}\n\nexport type Resolved = {\n readonly endpoint: Endpoint\n readonly service?: ReturnType<typeof managedService>\n}\n\nexport const resolve = Effect.fn(\"cli.server-connection.resolve\")(function* (args: Args) {\n if (args.server !== undefined && args.standalone)\n return yield* Effect.fail(new Error(\"--server and --standalone cannot be combined\"))\n if (args.server !== undefined) {\n const password = yield* Env.password\n const endpoint = {\n url: args.server,\n auth: password ? { type: \"basic\" as const, username: \"opencode\", password: Redacted.value(password) } : undefined,\n } satisfies Endpoint\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const health = yield* Effect.tryPromise({\n try: () => client.health.get({ signal: AbortSignal.timeout(5_000) }),\n catch: (cause) => connectError(endpoint, cause),\n })\n if (health.version !== OPENCODE_VERSION)\n process.stderr.write(\n `Warning: Server at ${endpoint.url} has version ${health.version}; this client is ${OPENCODE_VERSION}. Continuing anyway.\\n`,\n )\n return { endpoint } satisfies Resolved\n }\n if (args.standalone) {\n return { endpoint: yield* Standalone.start() } satisfies Resolved\n }\n\n const options = yield* ServiceConfig.options()\n return {\n endpoint: yield* resolveManaged({ ...options, onStart: args.onStart }, args.mismatch ?? \"replace\"),\n service: managedService(options),\n } satisfies Resolved\n})\n\nfunction managedService(options: EnsureOptions) {\n const reconnectOptions = { ...options, version: undefined }\n return {\n reconnect: () => Service.ensure(reconnectOptions),\n restart: () =>\n Effect.gen(function* () {\n yield* Service.stop(options)\n yield* Service.ensure(reconnectOptions)\n }),\n }\n}\n\nconst resolveManaged = Effect.fnUntraced(function* (\n options: EnsureOptions,\n mismatch: NonNullable<Args[\"mismatch\"]>,\n) {\n if (mismatch === \"replace\") return yield* Service.ensure(options)\n if (mismatch === \"ignore\") return yield* Service.ensure({ ...options, version: undefined })\n\n const compatible = yield* Service.discover(options)\n if (compatible !== undefined) return compatible\n const existing = yield* Service.discover({ ...options, version: undefined })\n if (existing !== undefined)\n return yield* Effect.fail(new Error(\"Background server version does not match this client\"))\n return yield* Service.ensure(options)\n})\n\nfunction connectError(endpoint: Endpoint, cause: unknown) {\n if (isUnauthorizedError(cause)) {\n return new Error(\n endpoint.auth === undefined\n ? `Server at ${endpoint.url} requires a password; set OPENCODE_PASSWORD`\n : `Server at ${endpoint.url} rejected the password`,\n { cause },\n )\n }\n if (cause instanceof ClientError && cause.reason === \"Transport\")\n return new Error(`Could not reach server at ${endpoint.url}`, { cause })\n return new Error(`Server at ${endpoint.url} did not provide a compatible V2 health response`, { cause })\n}\n\nexport * as ServerConnection from \"./server-connection\"\n" | ||
| ], | ||
| "mappings": ";0cAoBO,SAAM,OAAU,OAAO,QAAG,oCAA+B,OAAE,cAAU,CAAC,EAAY,CACvF,GAAI,EAAK,SAAW,QAAa,EAAK,WACpC,OAAO,MAAO,EAAO,KAAS,MAAM,8CAA8C,CAAC,EACrF,GAAI,EAAK,SAAW,OAAW,CAC7B,IAAM,EAAW,MAAO,EAAI,SACtB,EAAW,CACf,IAAK,EAAK,OACV,KAAM,EAAW,CAAE,KAAM,QAAkB,SAAU,WAAY,SAAU,EAAS,MAAM,CAAQ,CAAE,EAAI,MAC1G,EACM,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EACpF,EAAS,MAAO,EAAO,WAAW,CACtC,IAAK,IAAM,EAAO,OAAO,IAAI,CAAE,OAAQ,YAAY,QAAQ,IAAK,CAAE,CAAC,EACnE,MAAO,CAAC,IAAU,EAAa,EAAU,CAAK,CAChD,CAAC,EACD,GAAI,EAAO,UAAY,EACrB,QAAQ,OAAO,MACb,sBAAsB,EAAS,mBAAmB,EAAO,2BAA2B;AAAA,CACtF,EACF,MAAO,CAAE,UAAS,EAEpB,GAAI,EAAK,WACP,MAAO,CAAE,SAAU,MAAO,EAAW,MAAM,CAAE,EAG/C,IAAM,EAAU,MAAO,EAAc,QAAQ,EAC7C,MAAO,CACL,SAAU,MAAO,EAAe,IAAK,EAAS,QAAS,EAAK,OAAQ,EAAG,EAAK,UAAY,SAAS,EACjG,QAAS,EAAe,CAAO,CACjC,EACD,EAED,SAAS,CAAc,CAAC,EAAwB,CAC9C,IAAM,EAAmB,IAAK,EAAS,QAAS,MAAU,EAC1D,MAAO,CACL,UAAW,IAAM,EAAQ,OAAO,CAAgB,EAChD,QAAS,IACP,EAAO,IAAI,SAAU,EAAG,CACtB,MAAO,EAAQ,KAAK,CAAO,EAC3B,MAAO,EAAQ,OAAO,CAAgB,EACvC,CACL,EAGF,IAAM,EAAiB,EAAO,WAAW,SAAU,CACjD,EACA,EACA,CACA,GAAI,IAAa,UAAW,OAAO,MAAO,EAAQ,OAAO,CAAO,EAChE,GAAI,IAAa,SAAU,OAAO,MAAO,EAAQ,OAAO,IAAK,EAAS,QAAS,MAAU,CAAC,EAE1F,IAAM,EAAa,MAAO,EAAQ,SAAS,CAAO,EAClD,GAAI,IAAe,OAAW,OAAO,EAErC,IADiB,MAAO,EAAQ,SAAS,IAAK,EAAS,QAAS,MAAU,CAAC,KAC1D,OACf,OAAO,MAAO,EAAO,KAAS,MAAM,sDAAsD,CAAC,EAC7F,OAAO,MAAO,EAAQ,OAAO,CAAO,EACrC,EAED,SAAS,CAAY,CAAC,EAAoB,EAAgB,CACxD,GAAI,EAAoB,CAAK,EAC3B,OAAW,MACT,EAAS,OAAS,OACd,aAAa,EAAS,iDACtB,aAAa,EAAS,4BAC1B,CAAE,OAAM,CACV,EAEF,GAAI,aAAiB,GAAe,EAAM,SAAW,YACnD,OAAW,MAAM,6BAA6B,EAAS,MAAO,CAAE,OAAM,CAAC,EACzE,OAAW,MAAM,aAAa,EAAS,sDAAuD,CAAE,OAAM,CAAC", | ||
| "debugId": "653078340988C5EE64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/database/migration/20260722170000_canonical_tool_results.ts"], | ||
| "sourcesContent": [ | ||
| "import { sql } from \"drizzle-orm\"\nimport { Effect, Schema } from \"effect\"\nimport type { DatabaseMigration } from \"../migration\"\n\nconst decodeJson = Schema.decodeUnknownOption(Schema.UnknownFromJsonString)\nconst isObject = Schema.is(Schema.Record(Schema.String, Schema.Unknown))\nconst isJsonObject = Schema.is(Schema.Record(Schema.String, Schema.Json))\n\nconst object = (value: unknown): Record<string, unknown> => (isObject(value) ? value : {})\n\nconst stringify = (value: unknown) => {\n try {\n return JSON.stringify(value, null, 2) ?? String(value)\n } catch {\n return String(value)\n }\n}\n\nconst contentOf = (state: Record<string, unknown>) => (Array.isArray(state.content) ? state.content : [])\nconst resultOf = (state: Record<string, unknown>) =>\n isObject(state.result) && \"value\" in state.result ? state.result.value : state.result\nconst metadataOf = (state: Record<string, unknown>) => {\n if (isJsonObject(state.structured) && Object.keys(state.structured).length > 0)\n return { metadata: state.structured }\n return isJsonObject(state.metadata) ? { metadata: state.metadata } : {}\n}\nconst completedContent = (state: Record<string, unknown>) => {\n const preserved = contentOf(state)\n if (preserved.length > 0) return preserved\n return [{ type: \"text\", text: stringify(Object.keys(object(state.structured)).length ? state.structured : resultOf(state)) }]\n}\n\n/**\n * One-time rewrite of projected tool rows into the canonical result shape:\n * terminal states store model content plus optional metadata; the generic\n * `structured` and `result` fields disappear. Provider-hosted result payloads\n * move into provider-owned result state so hosted continuation survives.\n * Pre-release durable event versions are intentionally left untouched.\n */\nexport default {\n id: \"20260722170000_canonical_tool_results\",\n up(tx) {\n return Effect.gen(function* () {\n // Keyset-paginated batches keep memory bounded: production databases hold\n // gigabytes of assistant rows, and materializing them all at once was\n // measured at a ~5GB RSS spike.\n let cursor = \"\"\n while (true) {\n const messages = yield* tx.all<{ id: string; data: string }>(\n sql`SELECT id, data FROM session_message WHERE type = 'assistant' AND id > ${cursor} ORDER BY id LIMIT 1000`,\n )\n if (messages.length === 0) break\n cursor = messages[messages.length - 1].id\n yield* rewrite(tx, messages)\n }\n })\n },\n} satisfies DatabaseMigration.Migration\n\nfunction rewrite(tx: Parameters<DatabaseMigration.Migration[\"up\"]>[0], messages: { id: string; data: string }[]) {\n return Effect.gen(function* () {\n for (const row of messages) {\n // A row that never decoded is skipped rather than failing the whole\n // migration on every startup; it was equally unreadable before.\n const decoded = decodeJson(row.data)\n if (decoded._tag === \"None\") {\n yield* Effect.logWarning(\"skipping undecodable session_message row\").pipe(Effect.annotateLogs({ id: row.id }))\n continue\n }\n const data = object(decoded.value)\n if (!Array.isArray(data.content)) continue\n let changed = false\n const content = data.content.map((part) => {\n const tool = object(part)\n if (tool.type !== \"tool\" || !isObject(tool.state)) return part\n const state = tool.state\n if (state.status !== \"completed\" && state.status !== \"error\" && state.status !== \"running\") return part\n if (!(\"structured\" in state) && !(\"result\" in state)) return part\n changed = true\n if (state.status === \"running\")\n return {\n ...tool,\n state: {\n status: \"running\",\n input: object(state.input),\n metadata: object(state.structured),\n },\n }\n // Hosted payloads are irreducible provider replay state; keep them under\n // the provider-owned result state instead of a generic result field.\n const hosted =\n tool.executed === true && isObject(state.result) && \"value\" in state.result\n ? { providerResultState: { ...object(tool.providerResultState), result: state.result.value } }\n : {}\n const preserved = contentOf(state)\n if (state.status === \"completed\")\n return {\n ...tool,\n ...hosted,\n state: {\n status: \"completed\",\n input: object(state.input),\n content: completedContent(state),\n ...metadataOf(state),\n },\n }\n return {\n ...tool,\n ...hosted,\n state: {\n status: \"error\",\n input: object(state.input),\n error: state.error,\n ...(preserved.length > 0 ? { content: preserved } : {}),\n ...metadataOf(state),\n },\n }\n })\n if (!changed) continue\n yield* tx.run(sql`UPDATE session_message SET data = ${JSON.stringify({ ...data, content })} WHERE id = ${row.id}`)\n }\n })\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "8B59B25559D8241464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/list.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { OpenCode, type McpServer } from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.list,\n Effect.fn(\"cli.mcp.list\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const response = yield* Effect.promise(() => client.mcp.list({ location: { directory: process.cwd() } }))\n const servers = response.data.toSorted((a, b) => a.name.localeCompare(b.name))\n if (servers.length === 0) {\n process.stdout.write(\"No MCP servers configured\" + EOL)\n return\n }\n const width = Math.max(...servers.map((server) => server.name.length))\n const lines = servers.map(\n (server) => `${icon(server.status)} ${server.name.padEnd(width)} ${describe(server.status)}`,\n )\n process.stdout.write(lines.join(EOL) + EOL)\n }),\n)\n\nfunction icon(status: McpServer[\"status\"]) {\n switch (status.status) {\n case \"connected\":\n return \"✓\"\n case \"needs_auth\":\n return \"⚠\"\n case \"failed\":\n case \"needs_client_registration\":\n return \"✗\"\n default:\n return \"○\"\n }\n}\n\nfunction describe(status: McpServer[\"status\"]) {\n switch (status.status) {\n case \"needs_auth\":\n return \"needs authentication\"\n case \"needs_client_registration\":\n return `needs client registration: ${status.error}`\n case \"failed\":\n return `failed: ${status.error}`\n default:\n return status.status\n }\n}\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAe,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,UAC/B,OAAO,QAAG,mBAAc,OAAE,cAAU,OAAG,MACrC,SAAM,OAAU,WAAO,OAAc,aAAQ,OAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,GADW,MAAO,EAAO,QAAQ,IAAM,EAAO,IAAI,KAAK,CAAE,SAAU,CAAE,UAAW,QAAQ,IAAI,CAAE,CAAE,CAAC,CAAC,GAC/E,KAAK,SAAS,CAAC,EAAG,IAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC,EAC7E,GAAI,EAAQ,SAAW,EAAG,CACxB,QAAQ,OAAO,MAAM,4BAA8B,CAAG,EACtD,OAEF,IAAM,EAAQ,KAAK,IAAI,GAAG,EAAQ,IAAI,CAAC,IAAW,EAAO,KAAK,MAAM,CAAC,EAC/D,EAAQ,EAAQ,IACpB,CAAC,IAAW,GAAG,EAAK,EAAO,MAAM,KAAK,EAAO,KAAK,OAAO,CAAK,MAAM,EAAS,EAAO,MAAM,GAC5F,EACA,QAAQ,OAAO,MAAM,EAAM,KAAK,CAAG,EAAI,CAAG,EAC3C,CACH,EAEA,SAAS,CAAI,CAAC,EAA6B,CACzC,OAAQ,EAAO,YACR,YACH,MAAO,aACJ,aACH,MAAO,aACJ,aACA,4BACH,MAAO,iBAEP,MAAO,UAIb,SAAS,CAAQ,CAAC,EAA6B,CAC7C,OAAQ,EAAO,YACR,aACH,MAAO,2BACJ,4BACH,MAAO,8BAA8B,EAAO,YACzC,SACH,MAAO,WAAW,EAAO,gBAEzB,OAAO,EAAO", | ||
| "debugId": "91AF7D85D72F531B64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/openrouter.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Schema } from \"effect\"\nimport { Route, type RouteDefaultsInput } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport { Protocol } from \"../route/protocol\"\nimport { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport { ProviderID, type CacheHint, type ModelID, type ProviderOptions } from \"../schema\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport * as OpenAICompatibleProfiles from \"./openai-compatible-profile\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport { newBreakpoints, ttlBucket } from \"../protocols/utils/cache\"\nimport { isRecord } from \"../protocols/shared\"\n\nexport const profile = OpenAICompatibleProfiles.profiles.openrouter\nexport const id = ProviderID.make(profile.provider)\nconst ADAPTER = \"openrouter\"\n\ntype OpenRouterString<Known extends string> = Known | (string & {})\n\nexport interface OpenRouterProviderRouting {\n readonly [key: string]: unknown\n readonly order?: ReadonlyArray<string>\n readonly allow_fallbacks?: boolean\n readonly require_parameters?: boolean\n readonly data_collection?: OpenRouterString<\"allow\" | \"deny\">\n readonly only?: ReadonlyArray<string>\n readonly ignore?: ReadonlyArray<string>\n readonly quantizations?: ReadonlyArray<string>\n readonly sort?: OpenRouterString<\"price\" | \"throughput\" | \"latency\">\n readonly max_price?: Readonly<{\n prompt?: number | string\n completion?: number | string\n image?: number | string\n audio?: number | string\n request?: number | string\n }>\n readonly zdr?: boolean\n}\n\nexport type OpenRouterPlugin =\n | Readonly<{\n id: \"web\"\n max_results?: number\n search_prompt?: string\n engine?: OpenRouterString<\"native\" | \"exa\">\n }>\n | Readonly<{ id: \"file-parser\"; max_files?: number; pdf?: { engine?: string } }>\n | Readonly<{ id: \"moderation\" }>\n | Readonly<{ id: \"response-healing\" }>\n | Readonly<{ id: \"auto-router\"; allowed_models?: ReadonlyArray<string> }>\n | Readonly<{ id: string & {}; [key: string]: unknown }>\n\nexport interface OpenRouterOptions {\n readonly [key: string]: unknown\n readonly debug?: Readonly<{ echo_upstream_body?: boolean }>\n readonly models?: ReadonlyArray<string>\n readonly plugins?: ReadonlyArray<OpenRouterPlugin>\n readonly promptCacheKey?: string\n readonly provider?: OpenRouterProviderRouting\n readonly reasoning?: Readonly<{\n enabled?: boolean\n exclude?: boolean\n effort?: OpenRouterString<\"none\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">\n max_tokens?: number\n }>\n readonly usage?: boolean | Readonly<{ include: boolean }>\n readonly user?: string\n readonly web_search_options?: Readonly<{\n max_results?: number\n search_prompt?: string\n engine?: OpenRouterString<\"native\" | \"exa\">\n }>\n}\n\nexport type OpenRouterProviderOptionsInput = ProviderOptions & {\n readonly openrouter?: OpenRouterOptions\n}\n\nexport type ModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: OpenRouterProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly providerOptions?: OpenRouterProviderOptionsInput\n}\n\nconst OpenRouterBody = Schema.StructWithRest(Schema.Struct(OpenAIChat.bodyFields), [\n Schema.Record(Schema.String, Schema.Any),\n])\nexport type OpenRouterBody = Schema.Schema.Type<typeof OpenRouterBody>\n\nexport const protocol = Protocol.make({\n id: \"openrouter-chat\",\n body: {\n schema: OpenRouterBody,\n from: (request) =>\n OpenAIChat.fromRequest(request, { cacheControl: cacheControl() }).pipe(\n Effect.map((body) => {\n const sourceAssistants = request.messages.filter((message) => message.role === \"assistant\")\n let assistantIndex = 0\n const messages = body.messages.map((message) => {\n if (message.role !== \"assistant\") return message\n const source = sourceAssistants[assistantIndex++]\n const reasoning = source?.content\n .filter((part) => part.type === \"reasoning\")\n .map((part) => part.text)\n .join(\"\")\n const reasoningDetails = Array.isArray(message.reasoning_details) ? message.reasoning_details : undefined\n return {\n ...message,\n reasoning_content: undefined,\n reasoning_text: undefined,\n reasoning: reasoning && reasoningDetails && reasoningDetails.length > 0 ? reasoning : undefined,\n reasoning_details: reasoningDetails,\n }\n })\n return {\n ...body,\n messages,\n ...bodyOptions(request.providerOptions?.openrouter),\n } as OpenRouterBody\n }),\n ),\n },\n stream: OpenAIChat.protocol.stream,\n})\n\nconst cacheControl = () => {\n const breakpoints = newBreakpoints(4)\n return (cache: CacheHint | undefined) => {\n if (cache === undefined || breakpoints.remaining === 0) return undefined\n breakpoints.remaining -= 1\n return {\n type: \"ephemeral\" as const,\n ...(ttlBucket(cache.ttlSeconds) === \"1h\" ? { ttl: \"1h\" } : {}),\n }\n }\n}\n\nconst bodyOptions = (input: unknown) => {\n const openrouter = isRecord(input) ? input : {}\n const { usage, models, provider, plugins, web_search_options, debug, user, reasoning, promptCacheKey, ...options } =\n openrouter\n return {\n ...options,\n ...(usage === undefined || usage === true\n ? { usage: { include: true } }\n : usage === false\n ? { usage: { include: false } }\n : isRecord(usage)\n ? { usage }\n : {}),\n ...(Array.isArray(models) ? { models } : {}),\n ...(isRecord(provider) ? { provider } : {}),\n ...(Array.isArray(plugins) ? { plugins } : {}),\n ...(isRecord(web_search_options) ? { web_search_options } : {}),\n ...(isRecord(debug) ? { debug } : {}),\n ...(typeof user === \"string\" ? { user } : {}),\n ...(isRecord(reasoning) ? { reasoning } : {}),\n ...(typeof promptCacheKey === \"string\" ? { prompt_cache_key: promptCacheKey } : {}),\n }\n}\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: profile.provider,\n protocol,\n endpoint: Endpoint.path(\"/chat/completions\", { baseURL: profile.baseURL }),\n framing: Framing.sse,\n})\n\nexport const routes = [route]\n\nconst configuredRoute = (input: ModelOptions) => {\n const { apiKey: _, auth: _auth, baseURL, ...rest } = input\n return route.with({\n ...rest,\n endpoint: { baseURL: baseURL ?? profile.baseURL },\n auth: AuthOptions.bearer(input, \"OPENROUTER_API_KEY\"),\n })\n}\n\nexport const configure = (input: ModelOptions = {}) => {\n const route = configuredRoute(input)\n return {\n id,\n model: (modelID: string | ModelID) => route.model<OpenRouterProviderOptionsInput>({ id: modelID }),\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings, OpenRouterProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers,\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n }).model(modelID)\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "98AC27881DBC8BE364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/demo.ts"], | ||
| "sourcesContent": [ | ||
| "// Demo mode for testing direct interactive mode without a real SDK.\n//\n// Enabled with `--demo`. Intercepts prompt submissions and drives the same\n// presentation commits and footer actions as the live transport. This\n// lets you test scrollback formatting, permission UI, canonical Form UI, and tool\n// snapshots without making actual model calls. Pass a demo slash command as\n// the initial interactive message to trigger a preview immediately.\n//\n// Slash commands:\n// /permission [kind] → triggers a permission request variant\n// /form [kind] → triggers a canonical Form request variant\n// /fmt <kind> → emits a specific tool/text type (text, reasoning, shell,\n// write, edit, patch, subagent, question, error, mix)\n//\n// Demo mode handles permission and Form replies locally, completing or failing\n// the synthetic tool parts through the same callbacks used by the live footer.\nimport path from \"path\"\nimport type { JsonValue, SessionMessageAssistantTool } from \"@opencode-ai/client/promise\"\nimport { parseSlashHead } from \"../prompt/parse\"\nimport { writeSessionOutput } from \"./stream\"\nimport { toolCommit, toolFinalPhase } from \"./stream-v2.subagent\"\nimport type {\n FooterApi,\n FooterView,\n FormCancel,\n FormReply,\n MiniFormRequest,\n MiniPermissionRequest,\n PermissionReply,\n RunPrompt,\n StreamCommit,\n} from \"./types\"\n\nconst KINDS = [\n \"markdown\",\n \"table\",\n \"text\",\n \"reasoning\",\n \"shell\",\n \"write\",\n \"edit\",\n \"patch\",\n \"subagent\",\n \"question\",\n \"error\",\n \"mix\",\n]\nconst PERMISSIONS = [\"edit\", \"shell\", \"read\", \"subagent\", \"external\", \"doom\"] as const\nconst FORMS = [\"question\", \"external\"] as const\n\ntype PermissionKind = (typeof PERMISSIONS)[number]\ntype FormKind = (typeof FORMS)[number]\n\nfunction permissionKind(value: string | undefined): PermissionKind | undefined {\n const next = (value || \"edit\").toLowerCase()\n return PERMISSIONS.find((item) => item === next)\n}\n\nfunction formKind(value: string | undefined): FormKind | undefined {\n const next = (value || \"question\").toLowerCase()\n return FORMS.find((item) => item === next)\n}\n\nconst SAMPLE_MARKDOWN = [\n \"# Direct Mode Demo\",\n \"\",\n \"This is a realistic assistant response for direct-mode formatting checks.\",\n \"It mixes **bold**, _italic_, `inline code`, links, code fences, and tables in one streamed reply.\",\n \"\",\n \"## Summary\",\n \"\",\n \"- Restored the final markdown flush so the last block is committed on idle.\",\n \"- Switched markdown scrollback commits back to top-level block boundaries.\",\n \"- Added footer-level regression coverage for split-footer rendering.\",\n \"\",\n \"## Status\",\n \"\",\n \"| Area | Before | After | Notes |\",\n \"| --- | --- | --- | --- |\",\n \"| Direct mode | Missing final rows | Stable | Final markdown block now flushes on idle |\",\n \"| Tables | Dropped in streaming mode | Visible | Block-based commits match the working OpenTUI demo |\",\n \"| Tests | Partial coverage | Broader coverage | Includes a footer-level split render capture |\",\n \"\",\n \"> This sample intentionally includes a wide table so you can spot wrapping and commit bugs quickly.\",\n \"\",\n \"```ts\",\n \"const result = { markdown: true, tables: 2, stable: true }\",\n \"```\",\n \"\",\n \"## Files\",\n \"\",\n \"| File | Change |\",\n \"| --- | --- |\",\n \"| `scrollback.surface.ts` | Align markdown commit logic with the split-footer demo |\",\n \"| `footer.ts` | Keep active surfaces across footer-height-only resizes |\",\n \"| `footer.test.ts` | Capture real split-footer markdown payloads during idle completion |\",\n \"\",\n \"Next step: run `/fmt table` if you want a tighter table-only sample.\",\n].join(\"\\n\")\n\nconst SAMPLE_TABLE = [\n \"# Table Sample\",\n \"\",\n \"| Kind | Example | Notes |\",\n \"| --- | --- | --- |\",\n \"| Pipe | `A\\\\|B` | Escaped pipes should stay in one cell |\",\n \"| Unicode | `漢字` | Wide characters should remain aligned |\",\n \"| Wrap | `LongTokenWithoutNaturalBreaks_1234567890` | Useful for width stress |\",\n \"| Status | done | Final row should still appear after idle |\",\n].join(\"\\n\")\n\ntype Ref = {\n msg: string\n call: string\n tool: string\n input: Record<string, JsonValue>\n start: number\n}\n\ntype FormRequest = {\n ref: Ref\n kind: FormKind\n request: MiniFormRequest\n}\n\ntype Perm = {\n ref: Ref\n done: {\n output: string\n metadata?: Record<string, JsonValue>\n }\n}\n\ntype Permit = {\n ref: Ref\n permission: string\n patterns: string[]\n metadata?: MiniPermissionRequest[\"metadata\"]\n always: string[]\n done: Perm[\"done\"]\n}\n\ntype State = {\n id: string\n thinking: boolean\n footer: FooterApi\n msg: number\n part: number\n call: number\n perm: number\n form: number\n perms: Map<string, Perm>\n forms: Map<string, FormRequest>\n started: Set<string>\n}\n\ntype Input = {\n sessionID: string\n thinking: boolean\n footer: FooterApi\n}\n\nfunction note(footer: FooterApi, text: string): void {\n footer.append({\n kind: \"system\",\n text,\n phase: \"start\",\n source: \"system\",\n })\n}\n\nfunction clearSubagent(footer: FooterApi): void {\n footer.event({\n type: \"stream.subagent\",\n state: {\n tabs: [],\n details: {},\n permissions: [],\n forms: [],\n },\n })\n}\n\nfunction showSubagent(\n state: State,\n input: {\n sessionID: string\n label: string\n description: string\n status: \"running\" | \"completed\" | \"cancelled\" | \"error\"\n title?: string\n commits: StreamCommit[]\n },\n) {\n state.footer.event({\n type: \"stream.subagent\",\n state: {\n tabs: [\n {\n sessionID: input.sessionID,\n label: input.label,\n description: input.description,\n status: input.status,\n title: input.title,\n },\n ],\n details: {\n [input.sessionID]: {\n commits: input.commits,\n },\n },\n permissions: [],\n forms: [],\n },\n })\n}\n\nfunction wait(ms: number, signal?: AbortSignal): Promise<void> {\n return new Promise((resolve) => {\n if (!signal) {\n setTimeout(resolve, ms)\n return\n }\n\n if (signal.aborted) {\n resolve()\n return\n }\n\n const done = () => {\n clearTimeout(timer)\n signal.removeEventListener(\"abort\", done)\n resolve()\n }\n\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", done)\n resolve()\n }, ms)\n\n signal.addEventListener(\"abort\", done, { once: true })\n })\n}\n\nfunction split(text: string): string[] {\n if (text.length <= 48) {\n return [text]\n }\n\n const size = Math.ceil(text.length / 3)\n return [text.slice(0, size), text.slice(size, size * 2), text.slice(size * 2)]\n}\n\nfunction take(state: State, key: \"msg\" | \"part\" | \"call\" | \"perm\", prefix: string): string {\n state[key] += 1\n return `demo_${prefix}_${state[key]}`\n}\n\nfunction present(state: State, commits: StreamCommit[], view?: FooterView): void {\n writeSessionOutput(\n { footer: state.footer },\n {\n commits,\n updates: view\n ? [\n {\n type: \"stream.patch\" as const,\n patch: { status: view.type === \"permission\" ? \"awaiting permission\" : \"awaiting form\" },\n },\n { type: \"stream.view\" as const, view },\n ]\n : undefined,\n },\n )\n}\n\nfunction clearBlocker(state: State): void {\n writeSessionOutput(\n { footer: state.footer },\n {\n commits: [],\n updates: [\n { type: \"stream.patch\", patch: { status: \"\" } },\n { type: \"stream.view\", view: { type: \"prompt\" } },\n ],\n },\n )\n}\n\nfunction open(state: State): string {\n return take(state, \"msg\", \"msg\")\n}\n\nasync function emitText(state: State, body: string, signal?: AbortSignal): Promise<void> {\n const msg = open(state)\n const part = take(state, \"part\", \"part\")\n for (const item of split(body)) {\n if (signal?.aborted) {\n return\n }\n\n present(state, [\n { kind: \"assistant\", source: \"assistant\", text: item, phase: \"progress\", messageID: msg, partID: part },\n ])\n await wait(45, signal)\n }\n}\n\nasync function emitReasoning(state: State, body: string, signal?: AbortSignal): Promise<void> {\n const msg = open(state)\n const part = take(state, \"part\", \"part\")\n let first = true\n for (const item of split(body)) {\n if (signal?.aborted) {\n return\n }\n\n if (state.thinking) {\n present(state, [\n {\n kind: \"reasoning\",\n source: \"reasoning\",\n text: first ? `Thinking: ${item.replace(/\\[REDACTED\\]/g, \"\")}` : item.replace(/\\[REDACTED\\]/g, \"\"),\n phase: \"progress\",\n messageID: msg,\n partID: part,\n },\n ])\n first = false\n }\n await wait(45, signal)\n }\n}\n\nfunction make(state: State, tool: string, input: Record<string, JsonValue>): Ref {\n return {\n msg: open(state),\n call: take(state, \"call\", \"call\"),\n tool,\n input,\n start: Date.now(),\n }\n}\n\nfunction startTool(state: State, ref: Ref, metadata: Record<string, JsonValue> = {}): SessionMessageAssistantTool {\n state.started.add(ref.call)\n const part = {\n type: \"tool\" as const,\n id: ref.call,\n name: ref.tool,\n state: { status: \"running\" as const, input: ref.input, metadata },\n time: { created: ref.start, ran: ref.start },\n }\n present(state, [toolCommit(part, ref.msg, \"start\")])\n return part\n}\n\nfunction askPermission(state: State, item: Permit): void {\n const tool = startTool(state, item.ref)\n\n const id = take(state, \"perm\", \"perm\")\n state.perms.set(id, {\n ref: item.ref,\n done: item.done,\n })\n\n present(state, [], {\n type: \"permission\",\n request: {\n id,\n sessionID: state.id,\n action: item.permission,\n resources: item.patterns,\n metadata: item.metadata ?? {},\n save: item.always,\n source: { type: \"tool\", messageID: item.ref.msg, callID: item.ref.call },\n tool,\n },\n })\n}\n\nfunction doneTool(\n state: State,\n ref: Ref,\n output: {\n output: string\n metadata?: Record<string, JsonValue>\n },\n): void {\n if (!state.started.has(ref.call)) startTool(state, ref)\n const part: SessionMessageAssistantTool = {\n type: \"tool\",\n id: ref.call,\n name: ref.tool,\n state: {\n status: \"completed\",\n input: ref.input,\n content: [{ type: \"text\", text: output.output }],\n metadata: output.metadata,\n },\n time: { created: ref.start, ran: ref.start, completed: Date.now() },\n }\n present(state, [toolCommit(part, ref.msg, toolFinalPhase(part))])\n}\n\nfunction failTool(state: State, ref: Ref, error: string): void {\n if (!state.started.has(ref.call)) startTool(state, ref)\n present(state, [\n toolCommit(\n {\n type: \"tool\",\n id: ref.call,\n name: ref.tool,\n state: {\n status: \"error\",\n input: ref.input,\n error: { type: \"unknown\", message: error },\n },\n time: { created: ref.start, ran: ref.start, completed: Date.now() },\n },\n ref.msg,\n \"final\",\n ),\n ])\n}\n\nfunction emitError(state: State, text: string): void {\n present(state, [{ kind: \"error\", source: \"system\", text, phase: \"start\" }])\n}\n\nasync function emitBash(state: State, signal?: AbortSignal): Promise<void> {\n const ref = make(state, \"shell\", {\n command: \"git status\",\n workdir: process.cwd(),\n description: \"Show git status\",\n })\n startTool(state, ref)\n await wait(70, signal)\n doneTool(state, ref, {\n output: `${process.cwd()}\\ngit status\\nOn branch demo\\nnothing to commit, working tree clean\\n`,\n metadata: {\n exit: 0,\n },\n })\n}\n\nfunction emitWrite(state: State): void {\n const file = path.join(process.cwd(), \"src\", \"demo-format.ts\")\n const ref = make(state, \"write\", {\n path: file,\n content: \"export const demo = 42\\n\",\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {},\n })\n}\n\nfunction emitEdit(state: State): void {\n const file = path.join(process.cwd(), \"src\", \"demo-format.ts\")\n const ref = make(state, \"edit\", {\n path: file,\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n files: [\n {\n file,\n status: \"modified\",\n patch: \"@@ -1 +1 @@\\n-export const demo = 1\\n+export const demo = 42\\n\",\n },\n ],\n },\n })\n}\n\nfunction emitPatch(state: State): void {\n const file = path.join(process.cwd(), \"src\", \"demo-format.ts\")\n const ref = make(state, \"patch\", {\n patchText: \"*** Begin Patch\\n*** End Patch\",\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n files: [\n {\n status: \"modified\",\n file,\n patch: \"@@ -1 +1 @@\\n-export const demo = 1\\n+export const demo = 42\\n\",\n deletions: 1,\n },\n {\n status: \"added\",\n file: path.join(process.cwd(), \"README-demo.md\"),\n patch: \"@@ -0,0 +1,4 @@\\n+# Demo\\n+This is a generated preview file.\\n\",\n deletions: 0,\n },\n ],\n },\n })\n}\n\nfunction emitTask(state: State): void {\n const ref = make(state, \"subagent\", {\n description: \"Scan run/* for reducer touchpoints\",\n agent: \"explore\",\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n sessionID: \"ses_demo_child\",\n status: \"completed\",\n output: \"\",\n },\n })\n const part = {\n type: \"tool\",\n id: \"sub_demo_call_1\",\n name: \"read\",\n state: {\n status: \"running\",\n input: {\n path: \"packages/tui/src/mini/stream.ts\",\n offset: 1,\n limit: 200,\n },\n metadata: {},\n },\n time: { created: Date.now(), ran: Date.now() },\n } satisfies SessionMessageAssistantTool\n showSubagent(state, {\n sessionID: \"ses_demo_child\",\n label: \"Explore\",\n description: \"Scan run/* for reducer touchpoints\",\n status: \"completed\",\n title: \"Reducer touchpoints found\",\n commits: [\n {\n kind: \"user\",\n text: \"Scan run/* for reducer touchpoints\",\n phase: \"start\",\n source: \"system\",\n },\n {\n kind: \"reasoning\",\n text: \"Thinking: tracing reducer and footer boundaries\",\n phase: \"progress\",\n source: \"reasoning\",\n messageID: \"sub_demo_msg_reasoning\",\n partID: \"sub_demo_reasoning_1\",\n },\n toolCommit(part, \"sub_demo_msg_tool\", \"start\"),\n {\n kind: \"assistant\",\n text: \"Footer updates flow through stream.ts into RunFooter\",\n phase: \"progress\",\n source: \"assistant\",\n messageID: \"sub_demo_msg_text\",\n partID: \"sub_demo_text_1\",\n },\n ],\n })\n}\n\nfunction emitQuestionTool(state: State): void {\n const ref = make(state, \"question\", {\n questions: [\n {\n header: \"Style\",\n question: \"Which output style do you want to inspect?\",\n options: [\n { label: \"Diff\", description: \"Show diff block\" },\n { label: \"Code\", description: \"Show code block\" },\n ],\n multiple: false,\n custom: false,\n },\n {\n header: \"Extras\",\n question: \"Pick extra rows\",\n options: [\n { label: \"Usage\", description: \"Add usage row\" },\n { label: \"Duration\", description: \"Add duration row\" },\n ],\n multiple: true,\n custom: true,\n },\n ],\n })\n doneTool(state, ref, {\n output: \"\",\n metadata: {\n answers: [[\"Diff\"], [\"Usage\", \"custom-note\"]],\n },\n })\n}\n\nfunction emitPermission(state: State, kind: PermissionKind = \"edit\"): void {\n const root = process.cwd()\n const file = path.join(root, \"src\", \"demo-format.ts\")\n\n if (kind === \"shell\") {\n const command = \"git status --short\"\n const ref = make(state, \"shell\", {\n command,\n workdir: root,\n description: \"Inspect worktree changes\",\n })\n askPermission(state, {\n ref,\n permission: \"shell\",\n patterns: [command],\n always: [\"*\"],\n done: {\n output: `${root}\\ngit status --short\\n M src/demo-format.ts\\n?? src/demo-permission.ts\\n`,\n metadata: {\n exit: 0,\n },\n },\n })\n return\n }\n\n if (kind === \"read\") {\n const target = path.join(root, \"package.json\")\n const ref = make(state, \"read\", {\n path: target,\n offset: 1,\n limit: 80,\n })\n askPermission(state, {\n ref,\n permission: \"read\",\n patterns: [target],\n always: [target],\n done: {\n output: [\"1: {\", '2: \"name\": \"opencode\",', '3: \"private\": true', \"4: }\"].join(\"\\n\"),\n metadata: {},\n },\n })\n return\n }\n\n if (kind === \"subagent\") {\n const ref = make(state, \"subagent\", {\n description: \"Inspect footer spacing across direct-mode prompts\",\n agent: \"explore\",\n })\n askPermission(state, {\n ref,\n permission: \"subagent\",\n patterns: [\"explore\"],\n always: [\"*\"],\n done: {\n output: \"\",\n metadata: {\n sessionID: \"sub_demo_perm_1\",\n status: \"completed\",\n output: \"\",\n },\n },\n })\n return\n }\n\n if (kind === \"external\") {\n const dir = path.join(path.dirname(root), \"demo-shared\")\n const target = path.join(dir, \"README.md\")\n const ref = make(state, \"read\", {\n path: target,\n offset: 1,\n limit: 40,\n })\n askPermission(state, {\n ref,\n permission: \"external_directory\",\n patterns: [`${dir}/**`],\n metadata: {\n parentDir: dir,\n filepath: target,\n },\n always: [`${dir}/**`],\n done: {\n output: `1: # External demo\\n2: Shared preview file\\nPath: ${target}`,\n metadata: {},\n },\n })\n return\n }\n\n if (kind === \"doom\") {\n const ref = make(state, \"subagent\", {\n description: \"Retry the formatter after repeated failures\",\n agent: \"general\",\n })\n askPermission(state, {\n ref,\n permission: \"doom_loop\",\n patterns: [\"*\"],\n always: [\"*\"],\n done: {\n output: \"Continuing after repeated failures.\\n\",\n metadata: {},\n },\n })\n return\n }\n\n const diff = \"@@ -1 +1 @@\\n-export const demo = 1\\n+export const demo = 42\\n\"\n const ref = make(state, \"edit\", {\n path: file,\n })\n askPermission(state, {\n ref,\n permission: \"edit\",\n patterns: [file],\n always: [file],\n done: {\n output: \"\",\n metadata: {\n files: [{ file, status: \"modified\", patch: diff }],\n },\n },\n })\n}\n\nfunction demoForm(kind: FormKind): { title: string; fields: MiniFormRequest[\"fields\"]; questions?: JsonValue[] } {\n if (kind === \"question\") {\n const questions: JsonValue[] = [\n {\n header: \"Layout\",\n question: \"Which footer view should be the reference for spacing checks?\",\n options: [\n { label: \"Form\", description: \"Inspect the canonical Form footer\" },\n { label: \"Prompt\", description: \"Return to the normal composer\" },\n ],\n multiple: false,\n custom: true,\n },\n {\n header: \"Checks\",\n question: \"Pick formatting previews\",\n options: [\n { label: \"Diff\", description: \"Emit an edit diff\" },\n { label: \"Subagent\", description: \"Emit a subagent card\" },\n ],\n multiple: true,\n custom: true,\n },\n ]\n return {\n title: \"Questions\",\n questions,\n fields: [\n {\n key: \"q0\",\n title: \"Layout\",\n description: \"Which footer view should be the reference for spacing checks?\",\n type: \"string\",\n options: [\n { value: \"Form\", label: \"Form\", description: \"Inspect the canonical Form footer\" },\n { value: \"Prompt\", label: \"Prompt\", description: \"Return to the normal composer\" },\n ],\n custom: true,\n },\n {\n key: \"q1\",\n title: \"Checks\",\n description: \"Pick formatting previews\",\n type: \"multiselect\",\n options: [\n { value: \"Diff\", label: \"Diff\", description: \"Emit an edit diff\" },\n { value: \"Subagent\", label: \"Subagent\", description: \"Emit a subagent card\" },\n ],\n custom: true,\n },\n ],\n }\n }\n return {\n title: \"MCP authorization\",\n fields: [\n {\n key: \"authorization\",\n type: \"external\",\n url: \"https://example.com/opencode-demo\",\n title: \"Authorize demo MCP server\",\n description: \"Complete authorization in your browser\",\n },\n ],\n }\n}\n\nfunction emitForm(state: State, kind: FormKind = \"question\"): void {\n const form = demoForm(kind)\n const ref = make(state, kind === \"question\" ? \"question\" : \"mcp_demo\", {\n ...(form.questions ? { questions: form.questions } : { form: kind }),\n })\n startTool(state, ref)\n state.form++\n const request: MiniFormRequest = {\n id: `frm_demo_${state.form}`,\n sessionID: state.id,\n title: form.title,\n metadata:\n kind === \"question\"\n ? { kind: \"question\", tool: { messageID: ref.msg, callID: ref.call } }\n : { kind: \"mcp\", message: `Synthetic ${kind} MCP elicitation` },\n fields: form.fields,\n }\n state.forms.set(request.id, { ref, kind, request })\n present(state, [], { type: \"form\", request })\n}\n\nasync function emitFmt(state: State, kind: string, body: string, signal?: AbortSignal): Promise<boolean> {\n if (kind === \"text\") {\n await emitText(state, body || SAMPLE_MARKDOWN, signal)\n return true\n }\n\n if (kind === \"markdown\" || kind === \"md\") {\n await emitText(state, body || SAMPLE_MARKDOWN, signal)\n return true\n }\n\n if (kind === \"table\") {\n await emitText(state, body || SAMPLE_TABLE, signal)\n return true\n }\n\n if (kind === \"reasoning\") {\n await emitReasoning(state, body || \"Planning next steps [REDACTED] while preserving reducer ordering.\", signal)\n return true\n }\n\n if (kind === \"shell\") {\n await emitBash(state, signal)\n return true\n }\n\n if (kind === \"write\") {\n emitWrite(state)\n return true\n }\n\n if (kind === \"edit\") {\n emitEdit(state)\n return true\n }\n\n if (kind === \"patch\") {\n emitPatch(state)\n return true\n }\n\n if (kind === \"subagent\") {\n emitTask(state)\n return true\n }\n\n if (kind === \"question\") {\n emitQuestionTool(state)\n return true\n }\n\n if (kind === \"error\") {\n emitError(state, body || \"demo error event\")\n return true\n }\n\n if (kind === \"mix\") {\n await emitText(state, SAMPLE_MARKDOWN, signal)\n await wait(50, signal)\n await emitReasoning(state, \"Thinking through formatter edge cases [REDACTED].\", signal)\n await wait(50, signal)\n await emitBash(state, signal)\n emitWrite(state)\n emitEdit(state)\n emitPatch(state)\n emitTask(state)\n emitQuestionTool(state)\n emitError(state, \"demo mixed scenario error\")\n return true\n }\n\n return false\n}\n\nfunction intro(state: State): void {\n note(\n state.footer,\n [\n \"Demo slash commands enabled for interactive mode.\",\n `- /permission [kind] (${PERMISSIONS.join(\", \")})`,\n `- /form [kind] (${FORMS.join(\", \")})`,\n `- /fmt <kind> (${KINDS.join(\", \")})`,\n \"Examples:\",\n \"- /permission shell\",\n \"- /form question\",\n \"- /form external\",\n \"- /fmt markdown\",\n \"- /fmt table\",\n \"- /fmt text your custom text\",\n ].join(\"\\n\"),\n )\n}\n\nexport function createRunDemo(input: Input) {\n const state: State = {\n id: input.sessionID,\n thinking: input.thinking,\n footer: input.footer,\n msg: 0,\n part: 0,\n call: 0,\n perm: 0,\n form: 0,\n perms: new Map(),\n forms: new Map(),\n started: new Set(),\n }\n\n const start = async (): Promise<void> => {\n intro(state)\n }\n\n const prompt = async (line: RunPrompt, signal?: AbortSignal): Promise<boolean> => {\n const text = line.text.trim()\n const head = parseSlashHead(text)\n const list = head?.arguments.split(/\\s+/).filter(Boolean) ?? []\n const cmd = head ? `/${head.name}` : \"\"\n\n clearSubagent(state.footer)\n\n if (cmd === \"/help\") {\n intro(state)\n return true\n }\n\n if (cmd === \"/permission\") {\n const kind = permissionKind(list[0])\n if (!kind) {\n note(state.footer, `Pick a permission kind: ${PERMISSIONS.join(\", \")}`)\n return true\n }\n\n emitPermission(state, kind)\n return true\n }\n\n if (cmd === \"/form\") {\n const kind = formKind(list[0])\n if (!kind) {\n note(state.footer, `Pick a form kind: ${FORMS.join(\", \")}`)\n return true\n }\n\n emitForm(state, kind)\n return true\n }\n\n if (cmd === \"/fmt\") {\n const kind = (list[0] || \"\").toLowerCase()\n const body = list.slice(1).join(\" \")\n if (!kind) {\n note(state.footer, `Pick a kind: ${KINDS.join(\", \")}`)\n return true\n }\n\n const ok = await emitFmt(state, kind, body, signal)\n if (ok) {\n return true\n }\n\n note(state.footer, `Unknown kind \"${kind}\". Use: ${KINDS.join(\", \")}`)\n return true\n }\n\n return false\n }\n\n const permission = (input: PermissionReply): boolean => {\n const item = state.perms.get(input.requestID)\n if (!item || !input.reply) {\n return false\n }\n\n state.perms.delete(input.requestID)\n clearBlocker(state)\n\n if (input.reply === \"reject\") {\n failTool(state, item.ref, input.message || \"permission rejected\")\n return true\n }\n\n doneTool(state, item.ref, item.done)\n return true\n }\n\n const formReply = (input: FormReply): boolean => {\n const form = state.forms.get(input.formID)\n if (!form || input.sessionID !== form.request.sessionID) return false\n state.forms.delete(input.formID)\n clearBlocker(state)\n if (form.kind === \"question\") {\n doneTool(state, form.ref, {\n output: \"\",\n metadata: {\n answers: form.request.fields.map((field) => {\n const value = input.answer[field.key]\n if (value === undefined) return []\n return Array.isArray(value) ? [...value] : [String(value)]\n }),\n },\n })\n return true\n }\n doneTool(state, form.ref, {\n output: `Form submitted: ${Object.entries(input.answer)\n .map(([key, value]) => `${key}=${Array.isArray(value) ? value.join(\", \") : String(value)}`)\n .join(\"; \")}\\n`,\n metadata: { answer: input.answer },\n })\n return true\n }\n\n const formCancel = (input: FormCancel): boolean => {\n const form = state.forms.get(input.formID)\n if (!form || input.sessionID !== form.request.sessionID) return false\n state.forms.delete(input.formID)\n clearBlocker(state)\n failTool(state, form.ref, \"form cancelled\")\n return true\n }\n\n return {\n start,\n prompt,\n permission,\n formReply,\n formCancel,\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "BFE66730EEA0CE9364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../util/src/bom.ts", "../util/src/patch.ts"], | ||
| "sourcesContent": [ | ||
| "export * as Bom from \"./bom.js\"\n\nimport { Effect } from \"effect\"\nimport { FSUtil } from \"./fs-util.js\"\n\nconst code = 0xfeff\nconst value = String.fromCharCode(code)\n\nexport function split(text: string) {\n const stripped = text.replace(/^\\uFEFF+/, \"\")\n return { bom: stripped.length !== text.length, text: stripped }\n}\n\nexport function join(text: string, bom: boolean) {\n const stripped = split(text).text\n return bom ? value + stripped : stripped\n}\n\nexport function has(content: Uint8Array) {\n return content[0] === 0xef && content[1] === 0xbb && content[2] === 0xbf\n}\n\nexport const readFile = Effect.fn(\"Bom.readFile\")(function* (fs: FSUtil.Interface, filepath: string) {\n return split(decode(yield* fs.readFile(filepath)))\n})\n\nexport const syncFile = Effect.fn(\"Bom.syncFile\")(function* (fs: FSUtil.Interface, filepath: string, bom: boolean) {\n const decoded = decode(yield* fs.readFile(filepath))\n const current = split(decoded)\n const canonical = join(current.text, bom)\n if (decoded === canonical) return current.text\n yield* fs.writeWithDirs(filepath, canonical)\n return current.text\n})\n\nfunction decode(content: Uint8Array) {\n return new TextDecoder(\"utf-8\", { ignoreBOM: true }).decode(content)\n}\n", | ||
| "export * as Patch from \"./patch.js\"\n\nimport { Result, Schema } from \"effect\"\nimport { Bom } from \"./bom.js\"\n\nexport class BoundaryError extends Schema.TaggedErrorClass<BoundaryError>()(\"Patch.BoundaryError\", {\n boundary: Schema.Literals([\"first\", \"last\"]),\n}) {\n override get message() {\n return `The ${this.boundary} line of the patch must be '${this.boundary === \"first\" ? \"*** Begin Patch\" : \"*** End Patch\"}'`\n }\n}\n\nexport class InvalidHunkError extends Schema.TaggedErrorClass<InvalidHunkError>()(\"Patch.InvalidHunkError\", {\n line: Schema.String,\n lineNumber: Schema.Number,\n reason: Schema.optional(Schema.String),\n}) {\n override get message() {\n if (this.reason) return `Invalid hunk at line ${this.lineNumber}: ${this.reason}`\n return `Invalid hunk at line ${this.lineNumber}: '${this.line}' is not a valid hunk header. Valid hunk headers: '*** Add File: {path}', '*** Delete File: {path}', '*** Update File: {path}'`\n }\n}\n\nexport type ParseError = BoundaryError | InvalidHunkError\n\nexport type Hunk =\n | { readonly type: \"add\"; readonly path: string; readonly contents: string }\n | { readonly type: \"delete\"; readonly path: string }\n | {\n readonly type: \"update\"\n readonly path: string\n readonly movePath?: string\n readonly chunks: ReadonlyArray<UpdateFileChunk>\n }\n\nexport interface UpdateFileChunk {\n readonly oldLines: ReadonlyArray<string>\n readonly newLines: ReadonlyArray<string>\n readonly changeContext?: string\n readonly endOfFile?: boolean\n}\n\nexport interface FileUpdate {\n readonly content: string\n readonly bom: boolean\n}\n\nexport function parse(patchText: string): Result.Result<ReadonlyArray<Hunk>, ParseError> {\n const lines = stripHeredoc(patchText.trim())\n .split(\"\\n\")\n .map((line) => (line.endsWith(\"\\r\") ? line.slice(0, -1) : line))\n const begin = lines[0]?.trim() === \"*** Begin Patch\" ? 0 : -1\n const end = lines.at(-1)?.trim() === \"*** End Patch\" ? lines.length - 1 : -1\n if (begin === -1) return Result.fail(new BoundaryError({ boundary: \"first\" }))\n if (end === -1 || begin >= end) return Result.fail(new BoundaryError({ boundary: \"last\" }))\n\n const hunks: Hunk[] = []\n let index = begin + 1\n while (index < end) {\n const line = lines[index]!\n const header = line.trim()\n if (\n index === begin + 1 &&\n header.startsWith(\"*** Environment ID:\") &&\n header.slice(\"*** Environment ID:\".length).trim()\n ) {\n index++\n continue\n }\n if (header.startsWith(\"*** Add File: \")) {\n const path = header.slice(\"*** Add File: \".length).trim()\n const parsed = parseAdd(lines, index + 1, end, path)\n if (\"error\" in parsed) return Result.fail(parsed.error)\n hunks.push({ type: \"add\", path, contents: parsed.content })\n index = parsed.next\n continue\n }\n if (header.startsWith(\"*** Delete File: \")) {\n const path = header.slice(\"*** Delete File: \".length).trim()\n const next = lines[index + 1]?.trim()\n if (index + 1 < end && next !== undefined && !isBoundary(next)) {\n if (next.startsWith(\"*** \")) {\n return Result.fail(new InvalidHunkError({ line: next, lineNumber: index + 2 }))\n }\n return Result.fail(\n new InvalidHunkError({\n line: next,\n lineNumber: index + 2,\n reason: `Unexpected line after Delete File '${path}': '${next}'. Delete hunks do not contain body lines`,\n }),\n )\n }\n hunks.push({ type: \"delete\", path })\n index++\n continue\n }\n if (header.startsWith(\"*** Update File: \")) {\n const path = header.slice(\"*** Update File: \".length).trim()\n let next = index + 1\n let movePath: string | undefined\n while (lines[next]?.trimEnd() === \"*** End of File\") next++\n const move = lines[next]?.trimEnd()\n if (move === \"*** Move to:\" || move?.startsWith(\"*** Move to: \")) {\n movePath = move.slice(\"*** Move to: \".length).trim()\n if (!movePath) {\n return Result.fail(\n new InvalidHunkError({\n line: lines[next]!.trim(),\n lineNumber: next + 1,\n reason: `Move destination for '${path}' must not be empty`,\n }),\n )\n }\n next++\n }\n const parsed = parseUpdate(lines, next, end, path, index)\n if (\"error\" in parsed) return Result.fail(parsed.error)\n hunks.push({ type: \"update\", path, movePath, chunks: parsed.chunks })\n index = parsed.next\n continue\n }\n return Result.fail(new InvalidHunkError({ line: header, lineNumber: index + 1 }))\n }\n return Result.succeed(hunks)\n}\n\nexport function derive(path: string, chunks: ReadonlyArray<UpdateFileChunk>, original: string): FileUpdate {\n const source = Bom.split(original)\n const lines = source.text.split(\"\\n\")\n if (lines.at(-1) === \"\") lines.pop()\n const replacements = computeReplacements(lines, path, chunks)\n const updated = [...lines]\n for (const [start, remove, insert] of replacements.toReversed()) updated.splice(start, remove, ...insert)\n if (updated.at(-1) !== \"\") updated.push(\"\")\n const next = Bom.split(updated.join(\"\\n\"))\n return { content: next.text, bom: source.bom || next.bom }\n}\n\nexport function joinBom(text: string, bom: boolean) {\n return Bom.join(text, bom)\n}\n\nfunction parseAdd(\n lines: ReadonlyArray<string>,\n start: number,\n end: number,\n path: string,\n): { content: string; next: number } | { error: InvalidHunkError } {\n const content: string[] = []\n let index = start\n while (index < end && !isBoundary(lines[index]!.trim())) {\n if (!lines[index]!.startsWith(\"+\")) {\n const line = lines[index]!.trim()\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: `Invalid Add File line for '${path}': expected a line starting with '+', got '${line}'`,\n }),\n }\n }\n content.push(lines[index]!.slice(1))\n index++\n }\n return { content: content.join(\"\\n\"), next: index }\n}\n\nfunction parseUpdate(\n lines: ReadonlyArray<string>,\n start: number,\n end: number,\n path: string,\n hunk: number,\n): { chunks: ReadonlyArray<UpdateFileChunk>; next: number } | { error: InvalidHunkError } {\n const chunks: Array<{\n oldLines: string[]\n newLines: string[]\n changeContext?: string\n endOfFile?: boolean\n }> = []\n let index = start\n let afterEndOfFile = false\n while (index < end) {\n const line = lines[index]!\n const updateLine = line.trimEnd()\n if (afterEndOfFile) {\n if (updateLine === \"\") {\n index++\n continue\n }\n if (updateLine === \"@@\" || updateLine.startsWith(\"@@ \")) afterEndOfFile = false\n else if (isBoundary(updateLine)) break\n else {\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: `Expected update hunk to start with a @@ context marker, got: '${line}'`,\n }),\n }\n }\n }\n if (updateLine === \"*** End of File\") {\n const chunk = chunks.at(-1)\n if (chunk && chunk.oldLines.length === 0 && chunk.newLines.length === 0) {\n return {\n error: new InvalidHunkError({\n line: updateLine,\n lineNumber: index + 1,\n reason: \"Update hunk does not contain any lines\",\n }),\n }\n }\n if (chunk) {\n chunk.endOfFile = true\n afterEndOfFile = true\n }\n index++\n continue\n }\n if (isBoundary(updateLine)) break\n if (updateLine === \"@@\" || updateLine.startsWith(\"@@ \")) {\n const previous = chunks.at(-1)\n if (previous && previous.oldLines.length === 0 && previous.newLines.length === 0) {\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: `Unexpected line found in update hunk: '${line}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n }),\n }\n }\n chunks.push({\n oldLines: [],\n newLines: [],\n changeContext: updateLine === \"@@\" ? undefined : updateLine.slice(\"@@ \".length),\n })\n index++\n continue\n }\n if (chunks.length === 0) chunks.push({ oldLines: [], newLines: [] })\n const chunk = chunks.at(-1)!\n if (line === \"\") {\n chunk.oldLines.push(\"\")\n chunk.newLines.push(\"\")\n index++\n continue\n }\n if (line.startsWith(\" \")) {\n chunk.oldLines.push(line.slice(1))\n chunk.newLines.push(line.slice(1))\n index++\n continue\n }\n if (line.startsWith(\"-\")) {\n chunk.oldLines.push(line.slice(1))\n index++\n continue\n }\n if (line.startsWith(\"+\")) {\n chunk.newLines.push(line.slice(1))\n index++\n continue\n }\n const populated = chunk.oldLines.length > 0 || chunk.newLines.length > 0\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason: populated\n ? `Expected update hunk to start with a @@ context marker, got: '${line}'`\n : `Unexpected line found in update hunk: '${line}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n }),\n }\n }\n if (chunks.length === 0) {\n return {\n error: new InvalidHunkError({\n line: lines[hunk]!.trim(),\n lineNumber: hunk + 1,\n reason: `Update file hunk for path '${path}' is empty`,\n }),\n }\n }\n const last = chunks.at(-1)!\n if (last.oldLines.length === 0 && last.newLines.length === 0) {\n const line = lines[index]!.trim()\n return {\n error: new InvalidHunkError({\n line,\n lineNumber: index + 1,\n reason:\n line === \"*** End Patch\"\n ? \"Update hunk does not contain any lines\"\n : `Unexpected line found in update hunk: '${line}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n }),\n }\n }\n return { chunks, next: index }\n}\n\nfunction isBoundary(line: string) {\n return (\n line === \"*** End Patch\" ||\n line.startsWith(\"*** Add File: \") ||\n line.startsWith(\"*** Delete File: \") ||\n line.startsWith(\"*** Update File: \")\n )\n}\n\nfunction computeReplacements(lines: ReadonlyArray<string>, path: string, chunks: ReadonlyArray<UpdateFileChunk>) {\n const replacements: Array<readonly [start: number, remove: number, insert: ReadonlyArray<string>]> = []\n let lineIndex = 0\n for (const chunk of chunks) {\n if (chunk.changeContext) {\n const context = seek(lines, [chunk.changeContext], lineIndex)\n if (context === -1) throw new Error(`Failed to find context '${chunk.changeContext}' in ${path}`)\n lineIndex = context + 1\n }\n if (chunk.oldLines.length === 0) {\n replacements.push([lines.length, 0, chunk.newLines])\n continue\n }\n let oldLines = chunk.oldLines\n let newLines = chunk.newLines\n let found = seek(lines, oldLines, lineIndex, chunk.endOfFile)\n if (found === -1 && oldLines.at(-1) === \"\") {\n oldLines = oldLines.slice(0, -1)\n if (newLines.at(-1) === \"\") newLines = newLines.slice(0, -1)\n found = seek(lines, oldLines, lineIndex, chunk.endOfFile)\n }\n if (found === -1 && chunk.oldLines.every((line) => line === \"\")) {\n const expected =\n chunk.oldLines.length === 1 ? \"an expected blank line\" : `${chunk.oldLines.length} consecutive blank lines`\n throw new Error(`Failed to find ${expected} in ${path}`)\n }\n if (found === -1) throw new Error(`Failed to find expected lines in ${path}:\\n${chunk.oldLines.join(\"\\n\")}`)\n replacements.push([found, oldLines.length, newLines])\n lineIndex = found + oldLines.length\n }\n return replacements.toSorted((left, right) => left[0] - right[0])\n}\n\nfunction seek(lines: ReadonlyArray<string>, pattern: ReadonlyArray<string>, start: number, eof = false) {\n if (pattern.length === 0) return -1\n if (eof) {\n const offset = lines.length - pattern.length\n if (offset < start) return -1\n for (const compare of [exact, rstrip, trim, normalized]) {\n if (matches(lines, pattern, offset, compare)) return offset\n }\n return -1\n }\n for (const compare of [exact, rstrip, trim, normalized]) {\n for (let offset = start; offset <= lines.length - pattern.length; offset++) {\n if (matches(lines, pattern, offset, compare)) return offset\n }\n }\n return -1\n}\n\nfunction matches(\n lines: ReadonlyArray<string>,\n pattern: ReadonlyArray<string>,\n offset: number,\n compare: (left: string, right: string) => boolean,\n) {\n return pattern.every((line, index) => compare(lines[offset + index]!, line))\n}\n\nconst exact = (left: string, right: string) => left === right\nconst rstrip = (left: string, right: string) => left.trimEnd() === right.trimEnd()\nconst trim = (left: string, right: string) => left.trim() === right.trim()\nconst normalized = (left: string, right: string) => normalize(left.trim()) === normalize(right.trim())\nconst normalize = (value: string) =>\n value\n .replace(/[‘’‚‛]/g, \"'\")\n .replace(/[“”„‟]/g, '\"')\n .replace(/[‐‑‒–—―−]/g, \"-\")\n .replace(/[\\u00A0\\u2002-\\u200A\\u202F\\u205F\\u3000]/g, \" \")\nconst stripHeredoc = (input: string) => input.match(/^(?:cat\\s+)?<<(['\"]?)(\\w+)\\1\\s*\\n([\\s\\S]*?)\\n\\2\\s*$/)?.[3] ?? input\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "0491C0ECAE14F94064756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/start.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.start,\n Effect.fn(\"cli.service.start\")(function* () {\n const transport = yield* Service.ensure(yield* ServiceConfig.options())\n process.stdout.write(transport.url + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAAA,mBAAS,gBAOT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,WACnC,OAAO,QAAG,wBAAmB,OAAE,cAAU,OAAG,MAC1C,SAAM,OAAY,WAAO,OAAQ,YAAO,MAAO,EAAc,QAAQ,CAAC,EACtE,QAAQ,OAAO,MAAM,EAAU,IAAM,CAAG,EACzC,CACH", | ||
| "debugId": "C4DA16569FB9E0C364756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/entity.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/column-common.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/column.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/table.utils.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/table.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/subquery.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/tracing-utils.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/tracing.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/view-common.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/sql/sql.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/sql/expressions/conditions.js", "../../node_modules/.bun/drizzle-orm@1.0.0-rc.2+fa6decbc53b38090/node_modules/drizzle-orm/sql/expressions/select.js"], | ||
| "sourcesContent": [ | ||
| "//#region src/entity.ts\nconst entityKind = Symbol.for(\"drizzle:entityKind\");\nconst hasOwnEntityKind = Symbol.for(\"drizzle:hasOwnEntityKind\");\nfunction is(value, type) {\n\tif (!value || typeof value !== \"object\") return false;\n\tif (value instanceof type) return true;\n\tif (!Object.prototype.hasOwnProperty.call(type, entityKind)) throw new Error(`Class \"${type.name ?? \"<unknown>\"}\" doesn't look like a Drizzle entity. If this is incorrect and the class is provided by Drizzle, please report this as a bug.`);\n\tlet cls = Object.getPrototypeOf(value)?.constructor;\n\tif (cls) while (cls) {\n\t\tif (entityKind in cls && cls[entityKind] === type[entityKind]) return true;\n\t\tcls = Object.getPrototypeOf(cls);\n\t}\n\treturn false;\n}\n\n//#endregion\nexport { entityKind, hasOwnEntityKind, is };\n//# sourceMappingURL=entity.js.map", | ||
| "//#region src/column-common.ts\nconst OriginalColumn = Symbol.for(\"drizzle:OriginalColumn\");\n\n//#endregion\nexport { OriginalColumn };\n//# sourceMappingURL=column-common.js.map", | ||
| "import { entityKind } from \"./entity.js\";\nimport { OriginalColumn } from \"./column-common.js\";\n\n//#region src/column.ts\nconst noop = (v) => v;\nnoop.isNoop = true;\nvar Column = class {\n\tstatic [entityKind] = \"Column\";\n\t/** @internal */\n\tcodec;\n\tname;\n\tkeyAsName;\n\tprimary;\n\tnotNull;\n\tdefault;\n\tdefaultFn;\n\tonUpdateFn;\n\thasDefault;\n\tisUnique;\n\tuniqueName;\n\tuniqueType;\n\tdataType;\n\tcolumnType;\n\tenumValues = void 0;\n\tgenerated = void 0;\n\tgeneratedIdentity = void 0;\n\tlength;\n\tisLengthExact;\n\tisAlias;\n\t/** @internal */\n\tconfig;\n\t/** @internal */\n\ttable;\n\t/** @internal */\n\tonInit() {}\n\tconstructor(table, config) {\n\t\tthis.config = config;\n\t\tthis.onInit();\n\t\tthis.table = table;\n\t\tthis.name = config.name;\n\t\tthis.isAlias = false;\n\t\tthis.keyAsName = config.keyAsName;\n\t\tthis.notNull = config.notNull;\n\t\tthis.default = config.default;\n\t\tthis.defaultFn = config.defaultFn;\n\t\tthis.onUpdateFn = config.onUpdateFn;\n\t\tthis.hasDefault = config.hasDefault;\n\t\tthis.primary = config.primaryKey;\n\t\tthis.isUnique = config.isUnique;\n\t\tthis.uniqueName = config.uniqueName;\n\t\tthis.uniqueType = config.uniqueType;\n\t\tthis.dataType = config.dataType;\n\t\tthis.columnType = config.columnType;\n\t\tthis.generated = config.generated;\n\t\tthis.generatedIdentity = config.generatedIdentity;\n\t\tthis.length = config[\"length\"];\n\t\tthis.isLengthExact = config[\"isLengthExact\"];\n\t}\n\tmapFromDriverValue = noop;\n\tmapToDriverValue = noop;\n\t/** @internal */\n\tpostBuild() {\n\t\treturn this;\n\t}\n\t/** @internal */\n\tshouldDisableInsert() {\n\t\treturn this.config.generated !== void 0 && this.config.generated.type !== \"byDefault\";\n\t}\n\t/** @internal */\n\t[OriginalColumn]() {\n\t\treturn this;\n\t}\n};\nfunction getColumnTable(column) {\n\treturn column.table;\n}\n\n//#endregion\nexport { Column, getColumnTable };\n//# sourceMappingURL=column.js.map", | ||
| "//#region src/table.utils.ts\n/** @internal */\nconst TableName = Symbol.for(\"drizzle:Name\");\n\n//#endregion\nexport { TableName };\n//# sourceMappingURL=table.utils.js.map", | ||
| "import { entityKind } from \"./entity.js\";\nimport { TableName } from \"./table.utils.js\";\n\n//#region src/table.ts\n/** @internal */\nconst TableSchema = Symbol.for(\"drizzle:Schema\");\n/** @internal */\nconst TableColumns = Symbol.for(\"drizzle:Columns\");\n/** @internal */\nconst ExtraConfigColumns = Symbol.for(\"drizzle:ExtraConfigColumns\");\n/** @internal */\nconst OriginalName = Symbol.for(\"drizzle:OriginalName\");\n/** @internal */\nconst BaseName = Symbol.for(\"drizzle:BaseName\");\n/** @internal */\nconst IsAlias = Symbol.for(\"drizzle:IsAlias\");\n/** @internal */\nconst ExtraConfigBuilder = Symbol.for(\"drizzle:ExtraConfigBuilder\");\nconst IsDrizzleTable = Symbol.for(\"drizzle:IsDrizzleTable\");\nvar Table = class {\n\tstatic [entityKind] = \"Table\";\n\t/** @internal */\n\tstatic Symbol = {\n\t\tName: TableName,\n\t\tSchema: TableSchema,\n\t\tOriginalName,\n\t\tColumns: TableColumns,\n\t\tExtraConfigColumns,\n\t\tBaseName,\n\t\tIsAlias,\n\t\tExtraConfigBuilder\n\t};\n\t/**\n\t* @internal\n\t* Can be changed if the table is aliased.\n\t*/\n\t[TableName];\n\t/**\n\t* @internal\n\t* Used to store the original name of the table, before any aliasing.\n\t*/\n\t[OriginalName];\n\t/** @internal */\n\t[TableSchema];\n\t/** @internal */\n\t[TableColumns];\n\t/** @internal */\n\t[ExtraConfigColumns];\n\t/**\n\t* @internal\n\t* Used to store the table name before the transformation via the `tableCreator` functions.\n\t*/\n\t[BaseName];\n\t/** @internal */\n\t[IsAlias] = false;\n\t/** @internal */\n\t[IsDrizzleTable] = true;\n\t/** @internal */\n\t[ExtraConfigBuilder] = void 0;\n\tconstructor(name, schema, baseName) {\n\t\tthis[TableName] = this[OriginalName] = name;\n\t\tthis[TableSchema] = schema;\n\t\tthis[BaseName] = baseName;\n\t}\n};\nfunction isTable(table) {\n\treturn typeof table === \"object\" && table !== null && IsDrizzleTable in table;\n}\nfunction getTableName(table) {\n\treturn table[TableName];\n}\nfunction getTableUniqueName(table) {\n\treturn `${table[TableSchema] ?? \"public\"}.${table[TableName]}`;\n}\n\n//#endregion\nexport { BaseName, ExtraConfigBuilder, ExtraConfigColumns, IsAlias, OriginalName, Table, TableColumns, TableSchema, getTableName, getTableUniqueName, isTable };\n//# sourceMappingURL=table.js.map", | ||
| "import { entityKind } from \"./entity.js\";\n\n//#region src/subquery.ts\nvar Subquery = class {\n\tstatic [entityKind] = \"Subquery\";\n\tconstructor(sql, fields, alias, isWith = false, usedTables = []) {\n\t\tthis._ = {\n\t\t\tbrand: \"Subquery\",\n\t\t\tsql,\n\t\t\tselectedFields: fields,\n\t\t\talias,\n\t\t\tisWith,\n\t\t\tusedTables\n\t\t};\n\t}\n};\nvar WithSubquery = class extends Subquery {\n\tstatic [entityKind] = \"WithSubquery\";\n};\n\n//#endregion\nexport { Subquery, WithSubquery };\n//# sourceMappingURL=subquery.js.map", | ||
| "//#region src/tracing-utils.ts\nfunction iife(fn, ...args) {\n\treturn fn(...args);\n}\n\n//#endregion\nexport { iife };\n//# sourceMappingURL=tracing-utils.js.map", | ||
| "import { iife } from \"./tracing-utils.js\";\nimport { npmVersion } from \"./version.js\";\n\n//#region src/tracing.ts\nconst hasTelemetry = false;\n/** @internal */\nconst tracer = { startActiveSpan(name, fn) {\n\treturn fn();\n} };\n\n//#endregion\nexport { hasTelemetry, tracer };\n//# sourceMappingURL=tracing.js.map", | ||
| "//#region src/view-common.ts\nconst ViewBaseConfig = Symbol.for(\"drizzle:ViewBaseConfig\");\n\n//#endregion\nexport { ViewBaseConfig };\n//# sourceMappingURL=view-common.js.map", | ||
| "import { Column } from \"../column.js\";\nimport { IsAlias, OriginalName, Table, TableColumns, TableSchema } from \"../table.js\";\nimport { entityKind, is } from \"../entity.js\";\nimport { Subquery } from \"../subquery.js\";\nimport { TableName } from \"../table.utils.js\";\nimport { tracer } from \"../tracing.js\";\nimport { ViewBaseConfig } from \"../view-common.js\";\n\n//#region src/sql/sql.ts\n/**\n* This class is used to indicate a primitive param value that is used in `sql` tag.\n* It is only used on type level and is never instantiated at runtime.\n* If you see a value of this type in the code, its runtime value is actually the primitive param value.\n*/\nvar FakePrimitiveParam = class {\n\tstatic [entityKind] = \"FakePrimitiveParam\";\n};\nfunction isSQLWrapper(value) {\n\treturn value !== null && value !== void 0 && typeof value.getSQL === \"function\";\n}\nfunction mergeQueries(queries) {\n\tconst result = {\n\t\tsql: \"\",\n\t\tparams: []\n\t};\n\tfor (const query of queries) {\n\t\tresult.sql += query.sql;\n\t\tresult.params.push(...query.params);\n\t}\n\treturn result;\n}\nfunction _mergeQueries(queries) {\n\tconst result = {\n\t\tsql: \"\",\n\t\tparams: []\n\t};\n\tconst sqls = [];\n\tfor (const query of queries) {\n\t\tsqls.push(query.sql);\n\t\tresult.params.push(...query.params);\n\t}\n\tresult._sql = Object.assign(sqls, { raw: sqls });\n\treturn result;\n}\nvar StringChunk = class {\n\tstatic [entityKind] = \"StringChunk\";\n\tvalue;\n\tconstructor(value) {\n\t\tthis.value = Array.isArray(value) ? value : [value];\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\nvar SQL = class SQL {\n\tstatic [entityKind] = \"SQL\";\n\t/** @internal */\n\tdecoder = noopDecoder;\n\t/** @internal */\n\tshouldInlineParams = false;\n\t/** @internal */\n\tusedTables = [];\n\tconstructor(queryChunks) {\n\t\tthis.queryChunks = queryChunks;\n\t\tfor (const chunk of queryChunks) if (is(chunk, Table)) {\n\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\tthis.usedTables.push(schemaName === void 0 ? chunk[Table.Symbol.Name] : schemaName + \".\" + chunk[Table.Symbol.Name]);\n\t\t}\n\t}\n\tappend(query) {\n\t\tthis.queryChunks.push(...query.queryChunks);\n\t\treturn this;\n\t}\n\ttoQuery(config) {\n\t\treturn tracer.startActiveSpan(\"drizzle.buildSQL\", (span) => {\n\t\t\tconst query = this.buildQueryFromSourceParams(this.queryChunks, config);\n\t\t\tspan?.setAttributes({\n\t\t\t\t\"drizzle.query.text\": query.sql,\n\t\t\t\t\"drizzle.query.params\": JSON.stringify(query.params)\n\t\t\t});\n\t\t\treturn query;\n\t\t});\n\t}\n\tbuildQueryFromSourceParams(chunks, _config) {\n\t\tconst config = Object.assign({}, _config, {\n\t\t\tinlineParams: _config.inlineParams || this.shouldInlineParams,\n\t\t\tparamStartIndex: _config.paramStartIndex || { value: 0 }\n\t\t});\n\t\tconst { escapeName, escapeParam, codecs, inlineParams, paramStartIndex, invokeSource } = config;\n\t\tconst mappedChunks = chunks.map((chunk) => {\n\t\t\tif (is(chunk, StringChunk)) return {\n\t\t\t\tsql: chunk.value.join(\"\"),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (is(chunk, Name)) return {\n\t\t\t\tsql: escapeName(chunk.value),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (chunk === void 0) return {\n\t\t\t\tsql: \"\",\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (Array.isArray(chunk)) {\n\t\t\t\tconst result = [new StringChunk(\"(\")];\n\t\t\t\tfor (const [i, p] of chunk.entries()) {\n\t\t\t\t\tresult.push(p);\n\t\t\t\t\tif (i < chunk.length - 1) result.push(new StringChunk(\", \"));\n\t\t\t\t}\n\t\t\t\tresult.push(new StringChunk(\")\"));\n\t\t\t\treturn this.buildQueryFromSourceParams(result, config);\n\t\t\t}\n\t\t\tif (is(chunk, SQL)) return this.buildQueryFromSourceParams(chunk.queryChunks, {\n\t\t\t\t...config,\n\t\t\t\tinlineParams: inlineParams || chunk.shouldInlineParams\n\t\t\t});\n\t\t\tif (is(chunk, Table)) {\n\t\t\t\tconst schemaName = chunk[Table.Symbol.Schema];\n\t\t\t\tconst tableName = chunk[Table.Symbol.Name];\n\t\t\t\tif (invokeSource === \"mssql-view-with-schemabinding\") return {\n\t\t\t\t\tsql: (schemaName === void 0 ? escapeName(\"dbo\") : escapeName(schemaName)) + \".\" + escapeName(tableName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === void 0 || chunk[IsAlias] ? escapeName(tableName) : escapeName(schemaName) + \".\" + escapeName(tableName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, Column)) {\n\t\t\t\tconst columnName = chunk.name;\n\t\t\t\tif (_config.invokeSource === \"indexes\") return {\n\t\t\t\t\tsql: escapeName(columnName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\tconst schemaName = invokeSource === \"mssql-check\" ? void 0 : chunk.table[Table.Symbol.Schema];\n\t\t\t\treturn {\n\t\t\t\t\tsql: chunk.isAlias ? escapeName(chunk.name) : chunk.table[IsAlias] || schemaName === void 0 ? escapeName(chunk.table[Table.Symbol.Name]) + \".\" + escapeName(columnName) : escapeName(schemaName) + \".\" + escapeName(chunk.table[Table.Symbol.Name]) + \".\" + escapeName(columnName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, View)) {\n\t\t\t\tconst schemaName = chunk[ViewBaseConfig].schema;\n\t\t\t\tconst viewName = chunk[ViewBaseConfig].name;\n\t\t\t\treturn {\n\t\t\t\t\tsql: schemaName === void 0 || chunk[ViewBaseConfig].isAlias ? escapeName(viewName) : escapeName(schemaName) + \".\" + escapeName(viewName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, Param)) {\n\t\t\t\tif (is(chunk.value, SQL)) return this.buildQueryFromSourceParams([chunk.value], config);\n\t\t\t\tconst useCodecs = codecs && is(chunk.encoder, Column);\n\t\t\t\tif (is(chunk.value, Placeholder)) {\n\t\t\t\t\tconst escaped = escapeParam(paramStartIndex.value++, chunk);\n\t\t\t\t\tchunk.codec = useCodecs ? (value) => codecs.apply(chunk.encoder, \"normalizeParam\", value) : void 0;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsql: useCodecs ? codecs.apply(chunk.encoder, \"castParam\", escaped) : escaped,\n\t\t\t\t\t\tparams: [chunk]\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tlet mappedValue;\n\t\t\t\tif (chunk.value === null) mappedValue = chunk.value;\n\t\t\t\telse {\n\t\t\t\t\tmappedValue = chunk.encoder.mapToDriverValue.isNoop ? chunk.value : chunk.encoder.mapToDriverValue(chunk.value);\n\t\t\t\t\tif (is(mappedValue, SQL)) return this.buildQueryFromSourceParams([mappedValue], config);\n\t\t\t\t\tif (useCodecs) mappedValue = codecs.apply(chunk.encoder, \"normalizeParam\", mappedValue);\n\t\t\t\t}\n\t\t\t\tif (inlineParams) return {\n\t\t\t\t\tsql: this.mapInlineParam(mappedValue, config),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\tconst escaped = escapeParam(paramStartIndex.value++, mappedValue);\n\t\t\t\treturn {\n\t\t\t\t\tsql: useCodecs ? codecs.apply(chunk.encoder, \"castParam\", escaped) : escaped,\n\t\t\t\t\tparams: [mappedValue]\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (is(chunk, Placeholder)) return {\n\t\t\t\tsql: escapeParam(paramStartIndex.value++, chunk),\n\t\t\t\tparams: [chunk]\n\t\t\t};\n\t\t\tif (is(chunk, SQL.Aliased) && chunk.fieldAlias !== void 0) return {\n\t\t\t\tsql: (chunk.origin !== void 0 ? escapeName(chunk.origin) + \".\" : \"\") + escapeName(chunk.fieldAlias),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\tif (is(chunk, Subquery)) {\n\t\t\t\tif (chunk._.isWith) return {\n\t\t\t\t\tsql: escapeName(chunk._.alias),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk(\"(\"),\n\t\t\t\t\tchunk._.sql,\n\t\t\t\t\tnew StringChunk(\") \"),\n\t\t\t\t\tnew Name(chunk._.alias)\n\t\t\t\t], config);\n\t\t\t}\n\t\t\tif (typeof chunk === \"function\" && \"enumName\" in chunk) {\n\t\t\t\tif (\"schema\" in chunk && chunk.schema) return {\n\t\t\t\t\tsql: escapeName(chunk.schema) + \".\" + escapeName(chunk.enumName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t\treturn {\n\t\t\t\t\tsql: escapeName(chunk.enumName),\n\t\t\t\t\tparams: []\n\t\t\t\t};\n\t\t\t}\n\t\t\tif (isSQLWrapper(chunk)) {\n\t\t\t\tif (chunk.shouldOmitSQLParens?.()) return this.buildQueryFromSourceParams([chunk.getSQL()], config);\n\t\t\t\treturn this.buildQueryFromSourceParams([\n\t\t\t\t\tnew StringChunk(\"(\"),\n\t\t\t\t\tchunk.getSQL(),\n\t\t\t\t\tnew StringChunk(\")\")\n\t\t\t\t], config);\n\t\t\t}\n\t\t\tif (inlineParams) return {\n\t\t\t\tsql: this.mapInlineParam(chunk, config),\n\t\t\t\tparams: []\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tsql: escapeParam(paramStartIndex.value++, chunk),\n\t\t\t\tparams: [chunk]\n\t\t\t};\n\t\t});\n\t\tif (_config.tagged) return _mergeQueries(mappedChunks);\n\t\treturn mergeQueries(mappedChunks);\n\t}\n\tmapInlineParam(chunk, { escapeString }) {\n\t\tif (chunk === null) return \"null\";\n\t\tif (typeof chunk === \"number\" || typeof chunk === \"boolean\" || typeof chunk === \"bigint\") return chunk.toString();\n\t\tif (typeof chunk === \"string\") return escapeString(chunk);\n\t\tif (typeof chunk === \"object\") {\n\t\t\tconst mappedValueAsString = chunk.toString();\n\t\t\tif (mappedValueAsString === \"[object Object]\") return escapeString(JSON.stringify(chunk));\n\t\t\treturn escapeString(mappedValueAsString);\n\t\t}\n\t\tthrow new Error(\"Unexpected param value: \" + chunk);\n\t}\n\tgetSQL() {\n\t\treturn this;\n\t}\n\tas(alias) {\n\t\tif (alias === void 0) return this;\n\t\treturn new SQL.Aliased(this, alias);\n\t}\n\tmapWith(decoder) {\n\t\tthis.decoder = typeof decoder === \"function\" ? { mapFromDriverValue: decoder } : decoder;\n\t\treturn this;\n\t}\n\tinlineParams() {\n\t\tthis.shouldInlineParams = true;\n\t\treturn this;\n\t}\n\t/**\n\t* This method is used to conditionally include a part of the query.\n\t*\n\t* @param condition - Condition to check\n\t* @returns itself if the condition is `true`, otherwise `undefined`\n\t*/\n\tif(condition) {\n\t\treturn condition ? this : void 0;\n\t}\n};\n/**\n* Any DB name (table, column, index etc.)\n*/\nvar Name = class {\n\tstatic [entityKind] = \"Name\";\n\tbrand;\n\tconstructor(value) {\n\t\tthis.value = value;\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\n/**\n* Any DB name (table, column, index etc.)\n* @deprecated Use `sql.identifier` instead.\n*/\nfunction name(value) {\n\treturn new Name(value);\n}\nfunction isDriverValueEncoder(value) {\n\treturn typeof value === \"object\" && value !== null && \"mapToDriverValue\" in value && typeof value.mapToDriverValue === \"function\";\n}\nconst noopDecoder = { mapFromDriverValue: (value) => value };\nnoopDecoder.mapFromDriverValue.isNoop = true;\nconst noopEncoder = { mapToDriverValue: (value) => value };\nnoopEncoder.mapToDriverValue.isNoop = true;\nfunction isNoop(mapper) {\n\treturn mapper.isNoop;\n}\nconst noopMapper = {\n\t...noopDecoder,\n\t...noopEncoder\n};\n/** Parameter value that is optionally bound to an encoder (for example, a column). */\nvar Param = class {\n\tstatic [entityKind] = \"Param\";\n\tbrand;\n\t/**\n\t* @param value - Parameter value\n\t* @param encoder - Encoder to convert the value to a driver parameter\n\t*/\n\tconstructor(value, encoder = noopEncoder, codec) {\n\t\tthis.value = value;\n\t\tthis.encoder = encoder;\n\t\tthis.codec = codec;\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\n/** @deprecated Use `sql.param` instead. */\nfunction param(value, encoder) {\n\treturn new Param(value, encoder);\n}\nfunction sql(strings, ...params) {\n\tconst queryChunks = [];\n\tif (params.length > 0 || strings.length > 0 && strings[0] !== \"\") queryChunks.push(new StringChunk(strings[0]));\n\tfor (const [paramIndex, param] of params.entries()) queryChunks.push(param, new StringChunk(strings[paramIndex + 1]));\n\treturn new SQL(queryChunks);\n}\n(function(_sql) {\n\tfunction empty() {\n\t\treturn new SQL([]);\n\t}\n\t_sql.empty = empty;\n\tfunction fromList(list) {\n\t\treturn new SQL(list);\n\t}\n\t_sql.fromList = fromList;\n\tfunction raw(str) {\n\t\treturn new SQL([new StringChunk(str)]);\n\t}\n\t_sql.raw = raw;\n\tfunction join(chunks, separator) {\n\t\tconst result = [];\n\t\tfor (const [i, chunk] of chunks.entries()) {\n\t\t\tif (i > 0 && separator !== void 0) result.push(separator);\n\t\t\tresult.push(chunk);\n\t\t}\n\t\treturn new SQL(result);\n\t}\n\t_sql.join = join;\n\tfunction identifier(value) {\n\t\treturn new Name(value);\n\t}\n\t_sql.identifier = identifier;\n\tfunction placeholder(name) {\n\t\treturn new Placeholder(name);\n\t}\n\t_sql.placeholder = placeholder;\n\tfunction param(value, encoder) {\n\t\treturn new Param(value, encoder);\n\t}\n\t_sql.param = param;\n\tfunction comment(input) {\n\t\tconst encoded = sqlCommenter(input);\n\t\tif (!encoded.length) return void 0;\n\t\treturn sql.raw(encoded);\n\t}\n\t_sql.comment = comment;\n})(sql || (sql = {}));\nfunction sqlCommenter(input) {\n\tconst encoded = sqlCommenter.encodeInput(input);\n\tif (!encoded.length) return \"\";\n\treturn `/*${encoded}*/`;\n}\n(function(_sqlCommenter) {\n\tfunction merge(input1, input2) {\n\t\tlet encoded;\n\t\tif (typeof input1 === \"object\" && typeof input2 === \"object\") encoded = encodeInput({\n\t\t\t...input1,\n\t\t\t...input2\n\t\t});\n\t\telse if (input1 && input2) encoded = [encodeInput(input1), encodeInput(input2)].filter((i) => i.length).join(\",\");\n\t\telse if (input2) encoded = encodeInput(input2);\n\t\telse if (input1) encoded = encodeInput(input1);\n\t\telse return \"\";\n\t\tif (!encoded.length) return \"\";\n\t\treturn `/*${encoded}*/`;\n\t}\n\t_sqlCommenter.merge = merge;\n\tfunction encodeInput(input) {\n\t\tif (typeof input === \"string\") {\n\t\t\tif (!input.length) return input;\n\t\t\treturn sanitizeStringInput(input);\n\t\t}\n\t\tconst parts = [];\n\t\tfor (const [key, value] of Object.entries(input)) {\n\t\t\tif (value === null || value === void 0 || value === \"\") continue;\n\t\t\tconst encodedKey = sanitizeObjectElement(key);\n\t\t\tconst encodedValue = sanitizeObjectElement(String(value));\n\t\t\tparts.push(`${encodedKey}='${encodedValue}'`);\n\t\t}\n\t\tif (!parts.length) return \"\";\n\t\treturn parts.sort().join(\",\");\n\t}\n\t_sqlCommenter.encodeInput = encodeInput;\n\tfunction sanitizeObjectElement(key) {\n\t\treturn encodeURIComponent(key).replace(/'/g, `\\\\'`);\n\t}\n\t_sqlCommenter.sanitizeObjectElement = sanitizeObjectElement;\n\tfunction sanitizeStringInput(input) {\n\t\treturn input.replace(/\\/\\*/g, \"/ *\").replace(/\\*\\//g, \"* /\");\n\t}\n\t_sqlCommenter.sanitizeStringInput = sanitizeStringInput;\n})(sqlCommenter || (sqlCommenter = {}));\n(function(_SQL) {\n\tclass Aliased {\n\t\tstatic [entityKind] = \"SQL.Aliased\";\n\t\t/** @internal */\n\t\tisSelectionField = false;\n\t\t/** @internal */\n\t\torigin;\n\t\tconstructor(sql, fieldAlias) {\n\t\t\tthis.sql = sql;\n\t\t\tthis.fieldAlias = fieldAlias;\n\t\t}\n\t\tgetSQL() {\n\t\t\treturn this.sql;\n\t\t}\n\t\t/** @internal */\n\t\tclone() {\n\t\t\treturn new Aliased(this.sql, this.fieldAlias);\n\t\t}\n\t}\n\t_SQL.Aliased = Aliased;\n})(SQL || (SQL = {}));\nvar Placeholder = class {\n\tstatic [entityKind] = \"Placeholder\";\n\tconstructor(name) {\n\t\tthis.name = name;\n\t}\n\tgetSQL() {\n\t\treturn new SQL([this]);\n\t}\n};\n/** @deprecated Use `sql.placeholder` instead. */\nfunction placeholder(name) {\n\treturn new Placeholder(name);\n}\nfunction fillPlaceholders(params, values) {\n\treturn params.map((p) => {\n\t\tif (is(p, Placeholder)) {\n\t\t\tif (!(p.name in values)) throw new Error(`No value for placeholder \"${p.name}\" was provided`);\n\t\t\treturn values[p.name];\n\t\t}\n\t\tif (is(p, Param) && is(p.value, Placeholder)) {\n\t\t\tif (!(p.value.name in values)) throw new Error(`No value for placeholder \"${p.value.name}\" was provided`);\n\t\t\tif (values[p.value.name] === null) return values[p.value.name];\n\t\t\tconst mapped = p.encoder.mapToDriverValue.isNoop ? values[p.value.name] : p.encoder.mapToDriverValue(values[p.value.name]);\n\t\t\treturn p.codec ? p.codec(mapped) : mapped;\n\t\t}\n\t\treturn p;\n\t});\n}\nconst IsDrizzleView = Symbol.for(\"drizzle:IsDrizzleView\");\nvar View = class {\n\tstatic [entityKind] = \"View\";\n\t/** @internal */\n\t[ViewBaseConfig];\n\t/** @internal */\n\t[IsDrizzleView] = true;\n\t/** @internal */\n\tget [TableName]() {\n\t\treturn this[ViewBaseConfig].name;\n\t}\n\t/** @internal */\n\tget [TableSchema]() {\n\t\treturn this[ViewBaseConfig].schema;\n\t}\n\t/** @internal */\n\tget [IsAlias]() {\n\t\treturn this[ViewBaseConfig].isAlias;\n\t}\n\t/** @internal */\n\tget [OriginalName]() {\n\t\treturn this[ViewBaseConfig].originalName;\n\t}\n\t/** @internal */\n\tget [TableColumns]() {\n\t\treturn this[ViewBaseConfig].selectedFields;\n\t}\n\tconstructor({ name, schema, selectedFields, query }) {\n\t\tthis[ViewBaseConfig] = {\n\t\t\tname,\n\t\t\toriginalName: name,\n\t\t\tschema,\n\t\t\tselectedFields,\n\t\t\tquery,\n\t\t\tisExisting: !query,\n\t\t\tisAlias: false\n\t\t};\n\t}\n};\nfunction isView(view) {\n\treturn typeof view === \"object\" && view !== null && IsDrizzleView in view;\n}\nfunction getViewName(view) {\n\treturn view[ViewBaseConfig].name;\n}\nColumn.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\nSubquery.prototype.getSQL = function() {\n\treturn new SQL([this]);\n};\n\n//#endregion\nexport { FakePrimitiveParam, Name, Param, Placeholder, SQL, StringChunk, View, fillPlaceholders, getViewName, isDriverValueEncoder, isNoop, isSQLWrapper, isView, name, noopDecoder, noopEncoder, noopMapper, param, placeholder, sql, sqlCommenter };\n//# sourceMappingURL=sql.js.map", | ||
| "import { Param, Placeholder, SQL, StringChunk, View, isDriverValueEncoder, isSQLWrapper, sql } from \"../sql.js\";\nimport { is } from \"../../entity.js\";\nimport { Table } from \"../../table.js\";\nimport { Column } from \"../../column.js\";\n\n//#region src/sql/expressions/conditions.ts\nfunction bindIfParam(value, column) {\n\tif (isDriverValueEncoder(column) && !isSQLWrapper(value) && !is(value, Param) && !is(value, Placeholder) && !is(value, Column) && !is(value, Table) && !is(value, View)) return new Param(value, column);\n\treturn value;\n}\n/**\n* Test that two values are equal.\n*\n* Remember that the SQL standard dictates that\n* two NULL values are not equal, so if you want to test\n* whether a value is null, you may want to use\n* `isNull` instead.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made by Ford\n* db.select().from(cars)\n* .where(eq(cars.make, 'Ford'))\n* ```\n*\n* @see isNull for a way to test equality to NULL.\n*/\nconst eq = (left, right) => {\n\treturn sql`${left} = ${bindIfParam(right, left)}`;\n};\n/**\n* Test that two values are not equal.\n*\n* Remember that the SQL standard dictates that\n* two NULL values are not equal, so if you want to test\n* whether a value is not null, you may want to use\n* `isNotNull` instead.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars not made by Ford\n* db.select().from(cars)\n* .where(ne(cars.make, 'Ford'))\n* ```\n*\n* @see isNotNull for a way to test whether a value is not null.\n*/\nconst ne = (left, right) => {\n\treturn sql`${left} <> ${bindIfParam(right, left)}`;\n};\nfunction and(...unfilteredConditions) {\n\tconst conditions = unfilteredConditions.filter((c) => c !== void 0);\n\tif (conditions.length === 0) return;\n\tif (conditions.length === 1) return new SQL(conditions);\n\treturn new SQL([\n\t\tnew StringChunk(\"(\"),\n\t\tsql.join(conditions.map((c) => sql`(${c})`), new StringChunk(\" and \")),\n\t\tnew StringChunk(\")\")\n\t]);\n}\nfunction or(...unfilteredConditions) {\n\tconst conditions = unfilteredConditions.filter((c) => c !== void 0);\n\tif (conditions.length === 0) return;\n\tif (conditions.length === 1) return new SQL(conditions);\n\treturn new SQL([\n\t\tnew StringChunk(\"(\"),\n\t\tsql.join(conditions.map((c) => sql`(${c})`), new StringChunk(\" or \")),\n\t\tnew StringChunk(\")\")\n\t]);\n}\n/**\n* Negate the meaning of an expression using the `not` keyword.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars _not_ made by GM or Ford.\n* db.select().from(cars)\n* .where(not(inArray(cars.make, ['GM', 'Ford'])))\n* ```\n*/\nfunction not(condition) {\n\treturn is(condition, SQL) ? sql`not (${condition})` : sql`not ${condition}`;\n}\n/**\n* Test that the first expression passed is greater than\n* the second expression.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made after 2000.\n* db.select().from(cars)\n* .where(gt(cars.year, 2000))\n* ```\n*\n* @see gte for greater-than-or-equal\n*/\nconst gt = (left, right) => {\n\treturn sql`${left} > ${bindIfParam(right, left)}`;\n};\n/**\n* Test that the first expression passed is greater than\n* or equal to the second expression. Use `gt` to\n* test whether an expression is strictly greater\n* than another.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made on or after 2000.\n* db.select().from(cars)\n* .where(gte(cars.year, 2000))\n* ```\n*\n* @see gt for a strictly greater-than condition\n*/\nconst gte = (left, right) => {\n\treturn sql`${left} >= ${bindIfParam(right, left)}`;\n};\n/**\n* Test that the first expression passed is less than\n* the second expression.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made before 2000.\n* db.select().from(cars)\n* .where(lt(cars.year, 2000))\n* ```\n*\n* @see lte for less-than-or-equal\n*/\nconst lt = (left, right) => {\n\treturn sql`${left} < ${bindIfParam(right, left)}`;\n};\n/**\n* Test that the first expression passed is less than\n* or equal to the second expression.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars made before 2000.\n* db.select().from(cars)\n* .where(lte(cars.year, 2000))\n* ```\n*\n* @see lt for a strictly less-than condition\n*/\nconst lte = (left, right) => {\n\treturn sql`${left} <= ${bindIfParam(right, left)}`;\n};\nfunction inArray(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) return sql`false`;\n\t\treturn sql`${column} in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\treturn sql`${column} in ${bindIfParam(values, column)}`;\n}\nfunction notInArray(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) return sql`true`;\n\t\treturn sql`${column} not in ${values.map((v) => bindIfParam(v, column))}`;\n\t}\n\treturn sql`${column} not in ${bindIfParam(values, column)}`;\n}\n/**\n* Test whether an expression is NULL. By the SQL standard,\n* NULL is neither equal nor not equal to itself, so\n* it's recommended to use `isNull` and `notIsNull` for\n* comparisons to NULL.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars that have no discontinuedAt date.\n* db.select().from(cars)\n* .where(isNull(cars.discontinuedAt))\n* ```\n*\n* @see isNotNull for the inverse of this test\n*/\nfunction isNull(value) {\n\treturn sql`(${value} is null)`;\n}\n/**\n* Test whether an expression is not NULL. By the SQL standard,\n* NULL is neither equal nor not equal to itself, so\n* it's recommended to use `isNull` and `notIsNull` for\n* comparisons to NULL.\n*\n* ## Examples\n*\n* ```ts\n* // Select cars that have been discontinued.\n* db.select().from(cars)\n* .where(isNotNull(cars.discontinuedAt))\n* ```\n*\n* @see isNull for the inverse of this test\n*/\nfunction isNotNull(value) {\n\treturn sql`(${value} is not null)`;\n}\n/**\n* Test whether a subquery evaluates to have any rows.\n*\n* ## Examples\n*\n* ```ts\n* // Users whose `homeCity` column has a match in a cities\n* // table.\n* db\n* .select()\n* .from(users)\n* .where(\n* exists(db.select()\n* .from(cities)\n* .where(eq(users.homeCity, cities.id))),\n* );\n* ```\n*\n* @see notExists for the inverse of this test\n*/\nfunction exists(subquery) {\n\treturn sql`exists ${subquery}`;\n}\n/**\n* Test whether a subquery doesn't include any result\n* rows.\n*\n* ## Examples\n*\n* ```ts\n* // Users whose `homeCity` column doesn't match\n* // a row in the cities table.\n* db\n* .select()\n* .from(users)\n* .where(\n* notExists(db.select()\n* .from(cities)\n* .where(eq(users.homeCity, cities.id))),\n* );\n* ```\n*\n* @see exists for the inverse of this test\n*/\nfunction notExists(subquery) {\n\treturn sql`not exists ${subquery}`;\n}\nfunction between(column, min, max) {\n\treturn sql`${column} between ${bindIfParam(min, column)} and ${bindIfParam(max, column)}`;\n}\nfunction notBetween(column, min, max) {\n\treturn sql`${column} not between ${bindIfParam(min, column)} and ${bindIfParam(max, column)}`;\n}\n/**\n* Compare a column to a pattern, which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars with 'Turbo' in their names.\n* db.select().from(cars)\n* .where(like(cars.name, '%Turbo%'))\n* ```\n*\n* @see ilike for a case-insensitive version of this condition\n*/\nfunction like(column, value) {\n\treturn sql`${column} like ${value}`;\n}\n/**\n* The inverse of like - this tests that a given column\n* does not match a pattern, which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars that don't have \"ROver\" in their name.\n* db.select().from(cars)\n* .where(notLike(cars.name, '%Rover%'))\n* ```\n*\n* @see like for the inverse condition\n* @see notIlike for a case-insensitive version of this condition\n*/\nfunction notLike(column, value) {\n\treturn sql`${column} not like ${value}`;\n}\n/**\n* Case-insensitively compare a column to a pattern,\n* which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* Unlike like, this performs a case-insensitive comparison.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars with 'Turbo' in their names.\n* db.select().from(cars)\n* .where(ilike(cars.name, '%Turbo%'))\n* ```\n*\n* @see like for a case-sensitive version of this condition\n*/\nfunction ilike(column, value) {\n\treturn sql`${column} ilike ${value}`;\n}\n/**\n* The inverse of ilike - this case-insensitively tests that a given column\n* does not match a pattern, which can include `%` and `_`\n* characters to match multiple variations. Including `%`\n* in the pattern matches zero or more characters, and including\n* `_` will match a single character.\n*\n* ## Examples\n*\n* ```ts\n* // Select all cars that don't have \"Rover\" in their name.\n* db.select().from(cars)\n* .where(notLike(cars.name, '%Rover%'))\n* ```\n*\n* @see ilike for the inverse condition\n* @see notLike for a case-sensitive version of this condition\n*/\nfunction notIlike(column, value) {\n\treturn sql`${column} not ilike ${value}`;\n}\nfunction arrayContains(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) throw new Error(\"arrayContains requires at least one value\");\n\t\tconst par = bindIfParam(values, column);\n\t\treturn sql`${column} @> ${sql`${Array.isArray(par) ? new Param(par) : par}`}`;\n\t}\n\treturn sql`${column} @> ${bindIfParam(values, column)}`;\n}\nfunction arrayContained(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) throw new Error(\"arrayContained requires at least one value\");\n\t\tconst par = bindIfParam(values, column);\n\t\treturn sql`${column} <@ ${sql`${Array.isArray(par) ? new Param(par) : par}`}`;\n\t}\n\treturn sql`${column} <@ ${bindIfParam(values, column)}`;\n}\nfunction arrayOverlaps(column, values) {\n\tif (Array.isArray(values)) {\n\t\tif (values.length === 0) throw new Error(\"arrayOverlaps requires at least one value\");\n\t\tconst par = bindIfParam(values, column);\n\t\treturn sql`${column} && ${sql`${Array.isArray(par) ? new Param(par) : par}`}`;\n\t}\n\treturn sql`${column} && ${bindIfParam(values, column)}`;\n}\n\n//#endregion\nexport { and, arrayContained, arrayContains, arrayOverlaps, between, bindIfParam, eq, exists, gt, gte, ilike, inArray, isNotNull, isNull, like, lt, lte, ne, not, notBetween, notExists, notIlike, notInArray, notLike, or };\n//# sourceMappingURL=conditions.js.map", | ||
| "import { sql } from \"../sql.js\";\n\n//#region src/sql/expressions/select.ts\n/**\n* Used in sorting, this specifies that the given\n* column or expression should be sorted in ascending\n* order. By the SQL standard, ascending order is the\n* default, so it is not usually necessary to specify\n* ascending sort order.\n*\n* ## Examples\n*\n* ```ts\n* // Return cars, starting with the oldest models\n* // and going in ascending order to the newest.\n* db.select().from(cars)\n* .orderBy(asc(cars.year));\n* ```\n*\n* @see desc to sort in descending order\n*/\nfunction asc(column) {\n\treturn sql`${column} asc`;\n}\n/**\n* Used in sorting, this specifies that the given\n* column or expression should be sorted in descending\n* order.\n*\n* ## Examples\n*\n* ```ts\n* // Select users, with the most recently created\n* // records coming first.\n* db.select().from(users)\n* .orderBy(desc(users.createdAt));\n* ```\n*\n* @see asc to sort in ascending order\n*/\nfunction desc(column) {\n\treturn sql`${column} desc`;\n}\n\n//#endregion\nexport { asc, desc };\n//# sourceMappingURL=select.js.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "59545B8F74390DC964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/image/photon-wasm.bun.ts", "../core/src/image/photon.ts"], | ||
| "sourcesContent": [ | ||
| "// @ts-ignore Bun embeds static file imports when compiling the CLI.\nimport photonWasm from \"@silvia-odwyer/photon-node/photon_rs_bg.wasm\" with { type: \"file\" }\n\nexport default photonWasm\n", | ||
| "import photonWasm from \"#photon-wasm\"\nimport { Effect } from \"effect\"\nimport path from \"node:path\"\nimport { fileURLToPath } from \"node:url\"\nimport { FileSystem } from \"../filesystem\"\nimport { DecodeError, ResizerUnavailableError, SizeError } from \"../image\"\n\nconst JPEG_QUALITIES = [80, 85, 70, 55, 40]\n\nexport const make = Effect.gen(function* () {\n ;(globalThis as typeof globalThis & { __OPENCODE_PHOTON_WASM_PATH?: string }).__OPENCODE_PHOTON_WASM_PATH =\n path.isAbsolute(photonWasm) ? photonWasm : fileURLToPath(new URL(photonWasm, import.meta.url))\n const loadPhoton = yield* Effect.cached(\n Effect.tryPromise({\n try: () => import(\"@silvia-odwyer/photon-node\"),\n catch: () => new ResizerUnavailableError(),\n }),\n )\n return Effect.fn(\"Image.Photon.normalize\")(function* (\n resource: string,\n content: FileSystem.Content & { readonly encoding: \"base64\" },\n limits: {\n readonly autoResize: boolean\n readonly maxWidth: number\n readonly maxHeight: number\n readonly maxBase64Bytes: number\n },\n ) {\n const photon = yield* loadPhoton\n const decoded = yield* Effect.try({\n try: () => photon.PhotonImage.new_from_byteslice(Buffer.from(content.content, \"base64\")),\n catch: () => new DecodeError({ resource }),\n })\n try {\n const width = decoded.get_width()\n const height = decoded.get_height()\n const bytes = Buffer.byteLength(content.content, \"utf-8\")\n if (width <= limits.maxWidth && height <= limits.maxHeight && bytes <= limits.maxBase64Bytes) return content\n if (!limits.autoResize)\n return yield* new SizeError({\n resource,\n width,\n height,\n bytes,\n maxWidth: limits.maxWidth,\n maxHeight: limits.maxHeight,\n maxBytes: limits.maxBase64Bytes,\n })\n const scale = Math.min(1, limits.maxWidth / width, limits.maxHeight / height)\n const sizes = Array.from({ length: 32 }).reduce<Array<{ width: number; height: number }>>((acc) => {\n const previous = acc.at(-1) ?? {\n width: Math.max(1, Math.round(width * scale)),\n height: Math.max(1, Math.round(height * scale)),\n }\n const next =\n acc.length === 0\n ? previous\n : {\n width: previous.width === 1 ? 1 : Math.max(1, Math.floor(previous.width * 0.75)),\n height: previous.height === 1 ? 1 : Math.max(1, Math.floor(previous.height * 0.75)),\n }\n return acc.some((item) => item.width === next.width && item.height === next.height) ? acc : [...acc, next]\n }, [])\n for (const size of sizes) {\n const resized = photon.resize(decoded, size.width, size.height, photon.SamplingFilter.Lanczos3)\n try {\n const encoders: Array<readonly [mime: string, encode: () => Uint8Array]> = [\n [\"image/png\", () => resized.get_bytes()],\n ...JPEG_QUALITIES.map((quality) => [\"image/jpeg\", () => resized.get_bytes_jpeg(quality)] as const),\n ]\n for (const [mime, encode] of encoders) {\n const candidate = Buffer.from(encode()).toString(\"base64\")\n if (Buffer.byteLength(candidate, \"utf-8\") <= limits.maxBase64Bytes)\n return { ...content, content: candidate, encoding: \"base64\" as const, mime }\n }\n } finally {\n resized.free()\n }\n }\n return yield* new SizeError({\n resource,\n width,\n height,\n bytes,\n maxWidth: limits.maxWidth,\n maxHeight: limits.maxHeight,\n maxBytes: limits.maxBase64Bytes,\n })\n } finally {\n decoded.free()\n }\n })\n})\n" | ||
| ], | ||
| "mappings": ";yvBAGA,SAAe,SCDf,yBACA,6BAAS,iBAIT,SAAM,OAAiB,MAAC,QAAI,QAAI,QAAI,QAAI,OAAE,OAE7B,OAAO,OAAO,SAAI,cAAU,OAAG,eACxC,WAA4E,4BAC5E,EAAK,WAAW,CAAU,EAAI,EAAa,EAAc,IAAI,IAAI,EAAY,YAAY,GAAG,CAAC,EAC/F,IAAM,EAAa,MAAO,EAAO,OAC/B,EAAO,WAAW,CAChB,IAAK,IAAa,yCAClB,MAAO,IAAM,IAAI,CACnB,CAAC,CACH,EACA,OAAO,EAAO,GAAG,wBAAwB,EAAE,SAAU,CACnD,EACA,EACA,EAMA,CACA,IAAM,EAAS,MAAO,EAChB,EAAU,MAAO,EAAO,IAAI,CAChC,IAAK,IAAM,EAAO,YAAY,mBAAmB,OAAO,KAAK,EAAQ,QAAS,QAAQ,CAAC,EACvF,MAAO,IAAM,IAAI,EAAY,CAAE,UAAS,CAAC,CAC3C,CAAC,EACD,GAAI,CACF,IAAM,EAAQ,EAAQ,UAAU,EAC1B,EAAS,EAAQ,WAAW,EAC5B,EAAQ,OAAO,WAAW,EAAQ,QAAS,OAAO,EACxD,GAAI,GAAS,EAAO,UAAY,GAAU,EAAO,WAAa,GAAS,EAAO,eAAgB,OAAO,EACrG,GAAI,CAAC,EAAO,WACV,OAAO,MAAO,IAAI,EAAU,CAC1B,WACA,QACA,SACA,QACA,SAAU,EAAO,SACjB,UAAW,EAAO,UAClB,SAAU,EAAO,cACnB,CAAC,EACH,IAAM,EAAQ,KAAK,IAAI,EAAG,EAAO,SAAW,EAAO,EAAO,UAAY,CAAM,EACtE,EAAQ,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,EAAE,OAAiD,CAAC,IAAQ,CACjG,IAAM,EAAW,EAAI,GAAG,EAAE,GAAK,CAC7B,MAAO,KAAK,IAAI,EAAG,KAAK,MAAM,EAAQ,CAAK,CAAC,EAC5C,OAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,CAAK,CAAC,CAChD,EACM,EACJ,EAAI,SAAW,EACX,EACA,CACE,MAAO,EAAS,QAAU,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,MAAQ,IAAI,CAAC,EAC/E,OAAQ,EAAS,SAAW,EAAI,EAAI,KAAK,IAAI,EAAG,KAAK,MAAM,EAAS,OAAS,IAAI,CAAC,CACpF,EACN,OAAO,EAAI,KAAK,CAAC,IAAS,EAAK,QAAU,EAAK,OAAS,EAAK,SAAW,EAAK,MAAM,EAAI,EAAM,CAAC,GAAG,EAAK,CAAI,GACxG,CAAC,CAAC,EACL,QAAW,KAAQ,EAAO,CACxB,IAAM,EAAU,EAAO,OAAO,EAAS,EAAK,MAAO,EAAK,OAAQ,EAAO,eAAe,QAAQ,EAC9F,GAAI,CACF,IAAM,EAAqE,CACzE,CAAC,YAAa,IAAM,EAAQ,UAAU,CAAC,EACvC,GAAG,EAAe,IAAI,CAAC,IAAY,CAAC,aAAc,IAAM,EAAQ,eAAe,CAAO,CAAC,CAAU,CACnG,EACA,QAAY,EAAM,KAAW,EAAU,CACrC,IAAM,EAAY,OAAO,KAAK,EAAO,CAAC,EAAE,SAAS,QAAQ,EACzD,GAAI,OAAO,WAAW,EAAW,OAAO,GAAK,EAAO,eAClD,MAAO,IAAK,EAAS,QAAS,EAAW,SAAU,SAAmB,MAAK,UAE/E,CACA,EAAQ,KAAK,GAGjB,OAAO,MAAO,IAAI,EAAU,CAC1B,WACA,QACA,SACA,QACA,SAAU,EAAO,SACjB,UAAW,EAAO,UAClB,SAAU,EAAO,cACnB,CAAC,SACD,CACA,EAAQ,KAAK,GAEhB,EACF", | ||
| "debugId": "B1B0131A7932A83C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/bedrock-event-stream.ts", "../ai/src/protocols/utils/bedrock-auth.ts", "../ai/src/protocols/utils/bedrock-cache.ts", "../ai/src/protocols/utils/bedrock-media.ts", "../ai/src/protocols/bedrock-converse.ts", "../ai/src/providers/amazon-bedrock.ts"], | ||
| "sourcesContent": [ | ||
| "import { EventStreamCodec } from \"@smithy/eventstream-codec\"\nimport { fromUtf8, toUtf8 } from \"@smithy/util-utf8\"\nimport { Effect, Stream } from \"effect\"\nimport { Framing } from \"../route/framing\"\nimport { ProviderShared } from \"./shared\"\n\n// Bedrock streams responses using the AWS event stream binary protocol — each\n// frame is `[length:4][headers-length:4][prelude-crc:4][headers][payload][crc:4]`.\n// We use `@smithy/eventstream-codec` to validate framing and CRCs, then\n// reconstruct the JSON wrapping by `:event-type` so the chunk schema can match.\nconst eventCodec = new EventStreamCodec(toUtf8, fromUtf8)\nconst utf8 = new TextDecoder()\n\n// Cursor-tracking buffer state. Bytes accumulate in `buffer`; `offset` is the\n// read position. Reading by `subarray` is zero-copy. We only allocate a fresh\n// buffer when a new network chunk arrives and we need to append.\ninterface FrameBufferState {\n readonly buffer: Uint8Array\n readonly offset: number\n}\n\nconst initialFrameBuffer: FrameBufferState = { buffer: new Uint8Array(0), offset: 0 }\n\nconst appendChunk = (state: FrameBufferState, chunk: Uint8Array): FrameBufferState => {\n const remaining = state.buffer.length - state.offset\n // Compact: drop the consumed prefix and append the new chunk in one alloc.\n // This bounds buffer growth to at most one network chunk past the live\n // window, regardless of stream length.\n const next = new Uint8Array(remaining + chunk.length)\n next.set(state.buffer.subarray(state.offset), 0)\n next.set(chunk, remaining)\n return { buffer: next, offset: 0 }\n}\n\nconst consumeFrames = (route: string) => (state: FrameBufferState, chunk: Uint8Array) =>\n Effect.gen(function* () {\n let cursor = appendChunk(state, chunk)\n const out: object[] = []\n while (cursor.buffer.length - cursor.offset >= 4) {\n const view = cursor.buffer.subarray(cursor.offset)\n const totalLength = new DataView(view.buffer, view.byteOffset, view.byteLength).getUint32(0, false)\n if (view.length < totalLength) break\n\n const decoded = yield* Effect.try({\n try: () => eventCodec.decode(view.subarray(0, totalLength)),\n catch: (error) =>\n ProviderShared.eventError(\n route,\n `Failed to decode Bedrock Converse event-stream frame: ${\n error instanceof Error ? error.message : String(error)\n }`,\n ),\n })\n cursor = { buffer: cursor.buffer, offset: cursor.offset + totalLength }\n\n const messageType = decoded.headers[\":message-type\"]?.value\n if (messageType === \"error\") {\n const code = decoded.headers[\":error-code\"]?.value\n const message = decoded.headers[\":error-message\"]?.value\n return yield* ProviderShared.eventError(\n route,\n [code, message].filter((value): value is string => typeof value === \"string\").join(\": \") ||\n \"Bedrock Converse event-stream error\",\n )\n }\n const eventType =\n messageType === \"event\"\n ? decoded.headers[\":event-type\"]?.value\n : messageType === \"exception\"\n ? decoded.headers[\":exception-type\"]?.value\n : undefined\n if (typeof eventType !== \"string\") continue\n const payload = utf8.decode(decoded.body)\n if (!payload) continue\n // The AWS event stream pads short payloads with a `p` field. Drop it\n // before handing the object to the chunk schema. JSON decode goes\n // through the shared Schema-driven codec to satisfy the package rule\n // against ad-hoc `JSON.parse` calls.\n const parsed = (yield* ProviderShared.parseJson(\n route,\n payload,\n \"Failed to parse Bedrock Converse event-stream payload\",\n )) as Record<string, unknown>\n delete parsed.p\n out.push({ [eventType]: parsed })\n }\n return [cursor, out] as const\n })\n\n/**\n * AWS event-stream framing for Bedrock Converse. Each frame is decoded by\n * `@smithy/eventstream-codec` (length + header + payload + CRC) and rewrapped\n * under its `:event-type` header so the chunk schema can match the JSON\n * payload directly.\n */\nexport const framing = (route: string): Framing.Definition<object> => ({\n id: \"aws-event-stream\",\n frame: (bytes) => bytes.pipe(Stream.mapAccumEffect(() => initialFrameBuffer, consumeFrames(route))),\n})\n\nexport * as BedrockEventStream from \"./bedrock-event-stream\"\n", | ||
| "import { AwsV4Signer } from \"aws4fetch\"\nimport { Effect } from \"effect\"\nimport { Headers } from \"effect/unstable/http\"\nimport { Auth, type AuthInput } from \"../../route/auth\"\nimport { ProviderShared } from \"../shared\"\n\n/**\n * AWS credentials for SigV4 signing. Bedrock also supports Bearer API key auth,\n * which provider facades configure as route auth instead of SigV4. STS-vended\n * credentials should be refreshed by the consumer (rebuild the model) before\n * they expire; the route does not refresh.\n */\nexport interface Credentials {\n readonly region: string\n readonly accessKeyId: string\n readonly secretAccessKey: string\n readonly sessionToken?: string\n}\n\nconst signRequest = (input: {\n readonly url: string\n readonly body: string\n readonly headers: Headers.Headers\n readonly credentials: Credentials\n}) =>\n Effect.tryPromise({\n try: async () => {\n const signed = await new AwsV4Signer({\n url: input.url,\n method: \"POST\",\n headers: Object.entries(input.headers),\n body: input.body,\n region: input.credentials.region,\n accessKeyId: input.credentials.accessKeyId,\n secretAccessKey: input.credentials.secretAccessKey,\n sessionToken: input.credentials.sessionToken,\n service: \"bedrock\",\n }).sign()\n return Object.fromEntries(signed.headers.entries())\n },\n catch: (error) =>\n ProviderShared.invalidRequest(\n `Bedrock Converse SigV4 signing failed: ${error instanceof Error ? error.message : String(error)}`,\n ),\n })\n\n/** Sign the exact JSON bytes with SigV4 using credentials configured on the route. */\nexport const sigV4 = (credentials: Credentials | undefined) =>\n Auth.custom((input: AuthInput) => {\n return Effect.gen(function* () {\n if (!credentials) {\n return yield* ProviderShared.invalidRequest(\n \"Bedrock Converse requires either route bearer auth or AWS credentials configured on the route\",\n )\n }\n const headersForSigning = Headers.set(input.headers, \"content-type\", \"application/json\")\n const signed = yield* signRequest({\n url: input.url,\n body: input.body,\n headers: headersForSigning,\n credentials,\n })\n return Headers.setAll(headersForSigning, signed)\n })\n })\n\n/** Bedrock route auth defaults to SigV4 and expects credentials from route configuration. */\nexport const auth = sigV4(undefined)\n\nexport * as BedrockAuth from \"./bedrock-auth\"\n", | ||
| "import { Schema } from \"effect\"\nimport type { CacheHint } from \"../../schema\"\nimport { newBreakpoints, ttlBucket, type Breakpoints } from \"./cache\"\n\n// Bedrock cache markers are positional: emit a `cachePoint` block immediately\n// after the content the caller wants treated as a cacheable prefix. Bedrock\n// accepts optional `ttl: \"5m\" | \"1h\"` on cachePoint, mirroring Anthropic.\nexport const CachePointBlock = Schema.Struct({\n cachePoint: Schema.Struct({\n type: Schema.tag(\"default\"),\n ttl: Schema.optional(Schema.Literals([\"5m\", \"1h\"])),\n }),\n})\nexport type CachePointBlock = Schema.Schema.Type<typeof CachePointBlock>\n\n// Bedrock-Claude enforces the same 4-breakpoint cap as the Anthropic Messages\n// API. Callers pass a shared counter through every `block()` call site so the\n// budget is respected across `system`, `messages`, and `tools`.\nexport const BEDROCK_BREAKPOINT_CAP = 4\n\nexport type { Breakpoints } from \"./cache\"\nexport const breakpoints = () => newBreakpoints(BEDROCK_BREAKPOINT_CAP)\n\nconst DEFAULT_5M: CachePointBlock = { cachePoint: { type: \"default\" } }\nconst DEFAULT_1H: CachePointBlock = { cachePoint: { type: \"default\", ttl: \"1h\" } }\n\nexport const block = (breakpoints: Breakpoints, cache: CacheHint | undefined): CachePointBlock | undefined => {\n if (cache?.type !== \"ephemeral\" && cache?.type !== \"persistent\") return undefined\n if (breakpoints.remaining <= 0) {\n breakpoints.dropped += 1\n return undefined\n }\n breakpoints.remaining -= 1\n return ttlBucket(cache.ttlSeconds) === \"1h\" ? DEFAULT_1H : DEFAULT_5M\n}\n\nexport * as BedrockCache from \"./bedrock-cache\"\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport type { MediaPart } from \"../../schema\"\nimport { ProviderShared } from \"../shared\"\n\n// Bedrock Converse accepts image `format` as the file extension and\n// `source.bytes` as base64 in the JSON wire format.\nexport const ImageFormat = Schema.Literals([\"png\", \"jpeg\", \"gif\", \"webp\"])\nexport type ImageFormat = Schema.Schema.Type<typeof ImageFormat>\n\nexport const ImageBlock = Schema.Struct({\n image: Schema.Struct({\n format: ImageFormat,\n source: Schema.Struct({ bytes: Schema.String }),\n }),\n})\nexport type ImageBlock = Schema.Schema.Type<typeof ImageBlock>\n\n// Bedrock document blocks require a user-facing name so the model can refer to\n// the uploaded document.\nexport const DocumentFormat = Schema.Literals([\"pdf\", \"csv\", \"doc\", \"docx\", \"xls\", \"xlsx\", \"html\", \"txt\", \"md\"])\nexport type DocumentFormat = Schema.Schema.Type<typeof DocumentFormat>\n\nexport const DocumentBlock = Schema.Struct({\n document: Schema.Struct({\n format: DocumentFormat,\n name: Schema.String,\n source: Schema.Struct({ bytes: Schema.String }),\n }),\n})\nexport type DocumentBlock = Schema.Schema.Type<typeof DocumentBlock>\n\nconst IMAGE_FORMATS = {\n \"image/png\": \"png\",\n \"image/jpeg\": \"jpeg\",\n \"image/jpg\": \"jpeg\",\n \"image/gif\": \"gif\",\n \"image/webp\": \"webp\",\n} as const satisfies Record<string, ImageFormat>\n\nconst DOCUMENT_FORMATS = {\n \"application/pdf\": \"pdf\",\n \"text/csv\": \"csv\",\n \"application/msword\": \"doc\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\": \"docx\",\n \"application/vnd.ms-excel\": \"xls\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\": \"xlsx\",\n \"text/html\": \"html\",\n \"text/plain\": \"txt\",\n \"text/markdown\": \"md\",\n} as const satisfies Record<string, DocumentFormat>\n\nconst documentBlock = (name: string, format: DocumentFormat, bytes: string): DocumentBlock => ({\n document: {\n format,\n name,\n source: { bytes },\n },\n})\n\n// Route by MIME. Known image/document formats lower into a typed block; anything\n// else fails with a clear error instead of silently degrading to a malformed\n// document block. Image MIME types not in `IMAGE_FORMATS` (e.g. `image/svg+xml`)\n// get an image-specific error so the caller knows it's a format-support issue,\n// not a kind-detection issue.\nexport const lower = Effect.fn(\"BedrockMedia.lower\")(function* (part: MediaPart) {\n const mime = part.mediaType.toLowerCase()\n const imageFormat = IMAGE_FORMATS[mime as keyof typeof IMAGE_FORMATS]\n if (imageFormat) {\n const media = yield* ProviderShared.validateMedia(\n \"Bedrock Converse\",\n part,\n new Set<string>(Object.keys(IMAGE_FORMATS)),\n )\n return { image: { format: imageFormat, source: { bytes: media.base64 } } } satisfies ImageBlock\n }\n if (mime.startsWith(\"image/\"))\n return yield* ProviderShared.invalidRequest(`Bedrock Converse does not support image media type ${part.mediaType}`)\n const documentFormat = DOCUMENT_FORMATS[mime as keyof typeof DOCUMENT_FORMATS]\n if (documentFormat) {\n if (!part.filename)\n return yield* ProviderShared.invalidRequest(\"Bedrock Converse document media requires a filename\")\n const media = yield* ProviderShared.validateMedia(\n \"Bedrock Converse\",\n part,\n new Set<string>(Object.keys(DOCUMENT_FORMATS)),\n )\n return documentBlock(part.filename, documentFormat, media.base64)\n }\n return yield* ProviderShared.invalidRequest(`Bedrock Converse does not support media type ${part.mediaType}`)\n})\n\nexport * as BedrockMedia from \"./bedrock-media\"\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport { Route } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n LLMError,\n LLMEvent,\n Usage,\n type CacheHint,\n type FinishReason,\n type FinishReasonDetails,\n type JsonSchema,\n type LLMRequest,\n type ModelToolSchemaCompatibility,\n type ProviderMetadata,\n type ReasoningPart,\n type ToolCallPart,\n type ToolDefinition,\n type ToolResultPart,\n} from \"../schema\"\nimport { BedrockEventStream } from \"./bedrock-event-stream\"\nimport { classifyProviderFailure } from \"../provider-error\"\nimport { JsonObject, optionalArray, ProviderShared } from \"./shared\"\nimport { BedrockAuth } from \"./utils/bedrock-auth\"\nimport { BedrockCache } from \"./utils/bedrock-cache\"\nimport { BedrockMedia } from \"./utils/bedrock-media\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\nimport { ToolStream } from \"./utils/tool-stream\"\n\nconst ADAPTER = \"bedrock-converse\"\n\nexport type { Credentials as BedrockCredentials } from \"./utils/bedrock-auth\"\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\nconst BedrockTextBlock = Schema.Struct({\n text: Schema.String,\n})\ntype BedrockTextBlock = Schema.Schema.Type<typeof BedrockTextBlock>\n\nconst BedrockToolUseBlock = Schema.Struct({\n toolUse: Schema.Struct({\n toolUseId: Schema.String,\n name: Schema.String,\n input: Schema.Unknown,\n }),\n})\ntype BedrockToolUseBlock = Schema.Schema.Type<typeof BedrockToolUseBlock>\n\nconst BedrockToolResultContentItem = Schema.Union([\n Schema.Struct({ text: Schema.String }),\n Schema.Struct({ json: Schema.Unknown }),\n BedrockMedia.ImageBlock,\n BedrockMedia.DocumentBlock,\n])\n\nconst BedrockToolResultBlock = Schema.Struct({\n toolResult: Schema.Struct({\n toolUseId: Schema.String,\n content: Schema.Array(BedrockToolResultContentItem),\n status: Schema.optional(Schema.Literals([\"success\", \"error\"])),\n }),\n})\ntype BedrockToolResultBlock = Schema.Schema.Type<typeof BedrockToolResultBlock>\n\nconst BedrockReasoningBlock = Schema.Struct({\n reasoningContent: Schema.Union([\n Schema.Struct({\n reasoningText: Schema.Struct({\n text: Schema.String,\n signature: Schema.optional(Schema.String),\n }),\n }),\n Schema.Struct({ redactedContent: Schema.String }),\n ]),\n})\n\nconst BedrockUserBlock = Schema.Union([\n BedrockTextBlock,\n BedrockMedia.ImageBlock,\n BedrockMedia.DocumentBlock,\n BedrockToolResultBlock,\n BedrockCache.CachePointBlock,\n])\ntype BedrockUserBlock = Schema.Schema.Type<typeof BedrockUserBlock>\n\nconst BedrockAssistantBlock = Schema.Union([\n BedrockTextBlock,\n BedrockReasoningBlock,\n BedrockToolUseBlock,\n BedrockCache.CachePointBlock,\n])\ntype BedrockAssistantBlock = Schema.Schema.Type<typeof BedrockAssistantBlock>\n\nconst BedrockMessage = Schema.Union([\n Schema.Struct({ role: Schema.Literal(\"user\"), content: Schema.Array(BedrockUserBlock) }),\n Schema.Struct({ role: Schema.Literal(\"assistant\"), content: Schema.Array(BedrockAssistantBlock) }),\n]).pipe(Schema.toTaggedUnion(\"role\"))\ntype BedrockMessage = Schema.Schema.Type<typeof BedrockMessage>\n\nconst BedrockSystemBlock = Schema.Union([BedrockTextBlock, BedrockCache.CachePointBlock])\ntype BedrockSystemBlock = Schema.Schema.Type<typeof BedrockSystemBlock>\n\nconst BedrockToolSpec = Schema.Struct({\n toolSpec: Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n inputSchema: Schema.Struct({\n json: JsonObject,\n }),\n }),\n})\ntype BedrockToolSpec = Schema.Schema.Type<typeof BedrockToolSpec>\n\nconst BedrockTool = Schema.Union([BedrockToolSpec, BedrockCache.CachePointBlock])\ntype BedrockTool = Schema.Schema.Type<typeof BedrockTool>\n\nconst BedrockToolChoice = Schema.Union([\n Schema.Struct({ auto: Schema.Struct({}) }),\n Schema.Struct({ any: Schema.Struct({}) }),\n Schema.Struct({ tool: Schema.Struct({ name: Schema.String }) }),\n])\n\nconst BedrockBodyFields = {\n modelId: Schema.String,\n messages: Schema.Array(BedrockMessage),\n system: optionalArray(BedrockSystemBlock),\n inferenceConfig: Schema.optional(\n Schema.Struct({\n maxTokens: Schema.optional(Schema.Number),\n temperature: Schema.optional(Schema.Number),\n topP: Schema.optional(Schema.Number),\n stopSequences: optionalArray(Schema.String),\n }),\n ),\n toolConfig: Schema.optional(\n Schema.Struct({\n tools: Schema.Array(BedrockTool),\n toolChoice: Schema.optional(BedrockToolChoice),\n }),\n ),\n additionalModelRequestFields: Schema.optional(JsonObject),\n}\nconst BedrockConverseBody = Schema.Struct(BedrockBodyFields)\nexport type BedrockConverseBody = Schema.Schema.Type<typeof BedrockConverseBody>\n\nconst BedrockUsageSchema = Schema.Struct({\n inputTokens: Schema.optional(Schema.Number),\n outputTokens: Schema.optional(Schema.Number),\n totalTokens: Schema.optional(Schema.Number),\n cacheReadInputTokens: Schema.optional(Schema.Number),\n cacheWriteInputTokens: Schema.optional(Schema.Number),\n})\ntype BedrockUsageSchema = Schema.Schema.Type<typeof BedrockUsageSchema>\n\nconst BedrockStreamException = Schema.Struct({\n message: Schema.optional(Schema.String),\n originalMessage: Schema.optional(Schema.String),\n originalStatusCode: Schema.optional(Schema.Number),\n})\n\n// Streaming event shape — the AWS event stream wraps each JSON payload by its\n// `:event-type` header (e.g. `messageStart`, `contentBlockDelta`). We\n// reconstruct that wrapping in `decodeFrames` below so the event schema can\n// stay a plain discriminated record.\nconst BedrockEvent = Schema.Struct({\n messageStart: Schema.optional(Schema.Struct({ role: Schema.String })),\n contentBlockStart: Schema.optional(\n Schema.Struct({\n contentBlockIndex: Schema.Number,\n start: Schema.optional(\n Schema.Struct({\n toolUse: Schema.optional(Schema.Struct({ toolUseId: Schema.String, name: Schema.String })),\n }),\n ),\n }),\n ),\n contentBlockDelta: Schema.optional(\n Schema.Struct({\n contentBlockIndex: Schema.Number,\n delta: Schema.optional(\n Schema.Struct({\n text: Schema.optional(Schema.String),\n toolUse: Schema.optional(Schema.Struct({ input: Schema.String })),\n reasoningContent: Schema.optional(\n Schema.Struct({\n text: Schema.optional(Schema.String),\n signature: Schema.optional(Schema.String),\n // Blob fields in Bedrock's JSON event stream are base64 strings.\n redactedContent: Schema.optional(Schema.String),\n // Vercel's Bedrock provider exposes the same delta under\n // Anthropic's shorter `data` spelling.\n data: Schema.optional(Schema.String),\n }),\n ),\n }),\n ),\n }),\n ),\n contentBlockStop: Schema.optional(Schema.Struct({ contentBlockIndex: Schema.Number })),\n messageStop: Schema.optional(\n Schema.Struct({\n stopReason: Schema.String,\n additionalModelResponseFields: Schema.optional(Schema.Unknown),\n }),\n ),\n metadata: Schema.optional(\n Schema.Struct({\n usage: Schema.optional(BedrockUsageSchema),\n metrics: Schema.optional(Schema.Unknown),\n }),\n ),\n internalServerException: Schema.optional(BedrockStreamException),\n modelStreamErrorException: Schema.optional(BedrockStreamException),\n validationException: Schema.optional(BedrockStreamException),\n throttlingException: Schema.optional(BedrockStreamException),\n serviceUnavailableException: Schema.optional(BedrockStreamException),\n})\ntype BedrockEvent = Schema.Schema.Type<typeof BedrockEvent>\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\nconst lowerToolSpec = (tool: ToolDefinition, inputSchema: JsonSchema): BedrockToolSpec => ({\n toolSpec: {\n name: tool.name,\n description: tool.description,\n inputSchema: { json: inputSchema },\n },\n})\n\nconst lowerTools = (\n compatibility: ModelToolSchemaCompatibility | undefined,\n breakpoints: BedrockCache.Breakpoints,\n tools: ReadonlyArray<ToolDefinition>,\n): BedrockTool[] => {\n const result: BedrockTool[] = []\n for (const tool of tools) {\n result.push(lowerToolSpec(tool, ToolSchemaProjection.modelCompatibility(tool.inputSchema, compatibility)))\n const cachePoint = BedrockCache.block(breakpoints, tool.cache)\n if (cachePoint) result.push(cachePoint)\n }\n return result\n}\n\nconst textWithCache = (\n breakpoints: BedrockCache.Breakpoints,\n text: string,\n cache: CacheHint | undefined,\n): Array<BedrockTextBlock | BedrockCache.CachePointBlock> => {\n const cachePoint = BedrockCache.block(breakpoints, cache)\n return cachePoint ? [{ text }, cachePoint] : [{ text }]\n}\n\nconst lowerToolChoice = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"Bedrock Converse\", toolChoice, {\n auto: () => ({ auto: {} }) as const,\n none: () => undefined,\n required: () => ({ any: {} }) as const,\n tool: (name) => ({ tool: { name } }) as const,\n })\n\nconst bedrockMetadata = (metadata: Record<string, unknown>): ProviderMetadata => ({ bedrock: metadata })\n\nconst reasoningSignature = (part: ReasoningPart) => {\n const bedrock = part.providerMetadata?.bedrock\n return (\n part.encrypted ??\n (ProviderShared.isRecord(bedrock) && typeof bedrock.signature === \"string\" ? bedrock.signature : undefined)\n )\n}\n\nconst reasoningRedactedData = (part: ReasoningPart) => {\n const bedrock = part.providerMetadata?.bedrock\n return ProviderShared.isRecord(bedrock) && typeof bedrock.redactedData === \"string\"\n ? bedrock.redactedData\n : undefined\n}\n\nconst lowerToolCall = (part: ToolCallPart): BedrockToolUseBlock => ({\n toolUse: {\n toolUseId: part.id,\n name: part.name,\n input: part.input,\n },\n})\n\nconst lowerToolResultContent = Effect.fn(\"BedrockConverse.lowerToolResultContent\")(function* (part: ToolResultPart) {\n if (part.result.type === \"text\" || part.result.type === \"error\")\n return [{ text: ProviderShared.toolResultText(part) }]\n if (part.result.type === \"json\") return [{ json: part.result.value }]\n\n const content: Array<Schema.Schema.Type<typeof BedrockToolResultContentItem>> = []\n for (const item of part.result.value) {\n if (item.type === \"text\") {\n content.push({ text: item.text })\n continue\n }\n const media = yield* BedrockMedia.lower({\n type: \"media\",\n mediaType: item.mime,\n data: item.uri,\n filename: item.name,\n })\n content.push(media)\n }\n return content\n})\n\nconst lowerToolResult = Effect.fn(\"BedrockConverse.lowerToolResult\")(function* (part: ToolResultPart) {\n return {\n toolResult: {\n toolUseId: part.id,\n content: yield* lowerToolResultContent(part),\n status: part.result.type === \"error\" ? \"error\" : \"success\",\n },\n } satisfies BedrockToolResultBlock\n})\n\nconst lowerMessages = Effect.fn(\"BedrockConverse.lowerMessages\")(function* (\n request: LLMRequest,\n breakpoints: BedrockCache.Breakpoints,\n) {\n const messages: BedrockMessage[] = []\n\n for (const message of request.messages) {\n if (message.role === \"system\") {\n const part = yield* ProviderShared.wrappedSystemUpdate(\"Bedrock Converse\", message)\n const content = textWithCache(breakpoints, part.text, part.cache)\n const previous = messages.at(-1)\n if (previous?.role === \"user\")\n messages[messages.length - 1] = { role: \"user\", content: [...previous.content, ...content] }\n else messages.push({ role: \"user\", content })\n continue\n }\n\n if (message.role === \"user\") {\n const content: BedrockUserBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"media\"]))\n return yield* ProviderShared.unsupportedContent(\"Bedrock Converse\", \"user\", [\"text\", \"media\"])\n if (part.type === \"text\") {\n content.push(...textWithCache(breakpoints, part.text, part.cache))\n continue\n }\n if (part.type === \"media\") {\n content.push(yield* BedrockMedia.lower(part))\n continue\n }\n }\n messages.push({ role: \"user\", content })\n continue\n }\n\n if (message.role === \"assistant\") {\n const content: BedrockAssistantBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"reasoning\", \"tool-call\"]))\n return yield* ProviderShared.unsupportedContent(\"Bedrock Converse\", \"assistant\", [\n \"text\",\n \"reasoning\",\n \"tool-call\",\n ])\n if (part.type === \"text\") {\n content.push(...textWithCache(breakpoints, part.text, part.cache))\n continue\n }\n if (part.type === \"reasoning\") {\n const signature = reasoningSignature(part)\n const redactedData = reasoningRedactedData(part)\n if (signature === undefined && redactedData !== undefined) {\n content.push({ reasoningContent: { redactedContent: redactedData } })\n continue\n }\n content.push({ reasoningContent: { reasoningText: { text: part.text, signature } } })\n continue\n }\n if (part.type === \"tool-call\") {\n content.push(lowerToolCall(part))\n continue\n }\n }\n messages.push({ role: \"assistant\", content })\n continue\n }\n\n const content: BedrockUserBlock[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"Bedrock Converse\", \"tool\", [\"tool-result\"])\n content.push(yield* lowerToolResult(part))\n const cachePoint = BedrockCache.block(breakpoints, part.cache)\n if (cachePoint) content.push(cachePoint)\n }\n messages.push({ role: \"user\", content })\n }\n\n return messages\n})\n\n// System prompts share the cache-point convention: emit the text block, then\n// optionally a positional `cachePoint` marker.\nconst lowerSystem = (\n breakpoints: BedrockCache.Breakpoints,\n system: ReadonlyArray<LLMRequest[\"system\"][number]>,\n): BedrockSystemBlock[] => system.flatMap((part) => textWithCache(breakpoints, part.text, part.cache))\n\nconst fromRequest = Effect.fn(\"BedrockConverse.fromRequest\")(function* (request: LLMRequest) {\n const toolChoice = request.toolChoice ? yield* lowerToolChoice(request.toolChoice) : undefined\n const generation = request.generation\n // Bedrock-Claude shares Anthropic's 4-breakpoint cap. Spend the budget in\n // tools → system → messages order to favour the highest-impact prefixes.\n const breakpoints = BedrockCache.breakpoints()\n const toolConfig =\n request.tools.length > 0\n ? {\n tools: lowerTools(request.model.compatibility?.toolSchema, breakpoints, request.tools),\n // Converse has no native \"none\". Keep definitions stable for prompt\n // caching and omit only the unsupported choice.\n toolChoice,\n }\n : undefined\n const system = request.system.length === 0 ? undefined : lowerSystem(breakpoints, request.system)\n const messages = yield* lowerMessages(request, breakpoints)\n if (breakpoints.dropped > 0) {\n yield* Effect.logWarning(\n `Bedrock Converse: dropped ${breakpoints.dropped} cache breakpoint(s); the API allows at most ${BedrockCache.BEDROCK_BREAKPOINT_CAP} per request.`,\n )\n }\n return {\n modelId: request.model.id,\n messages,\n system,\n inferenceConfig:\n generation?.maxTokens === undefined &&\n generation?.temperature === undefined &&\n generation?.topP === undefined &&\n (generation?.stop === undefined || generation.stop.length === 0)\n ? undefined\n : {\n maxTokens: generation?.maxTokens,\n temperature: generation?.temperature,\n topP: generation?.topP,\n stopSequences: generation?.stop,\n },\n toolConfig,\n // Converse's base inferenceConfig has no topK; Anthropic/Nova accept it\n // as a model-specific field, so it goes through additionalModelRequestFields.\n additionalModelRequestFields: generation?.topK === undefined ? undefined : { top_k: generation.topK },\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\nconst mapFinishReason = (reason: string): FinishReason => {\n if (reason === \"end_turn\" || reason === \"stop_sequence\") return \"stop\"\n if (reason === \"max_tokens\" || reason === \"model_context_window_exceeded\") return \"length\"\n if (reason === \"tool_use\") return \"tool-calls\"\n if (reason === \"content_filtered\" || reason === \"guardrail_intervened\") return \"content-filter\"\n if (reason === \"malformed_model_output\" || reason === \"malformed_tool_use\") return \"error\"\n return \"unknown\"\n}\n\n// AWS reports inputTokens separately from cache reads and writes.\n// Bedrock does not break reasoning out of outputTokens for current models.\nconst mapUsage = (usage: BedrockUsageSchema | undefined): Usage | undefined => {\n if (!usage) return undefined\n const inputTokens = ProviderShared.sumTokens(\n usage.inputTokens,\n usage.cacheReadInputTokens,\n usage.cacheWriteInputTokens,\n )\n return new Usage({\n inputTokens,\n outputTokens: usage.outputTokens,\n nonCachedInputTokens: usage.inputTokens,\n cacheReadInputTokens: usage.cacheReadInputTokens,\n cacheWriteInputTokens: usage.cacheWriteInputTokens,\n totalTokens: ProviderShared.totalTokens(inputTokens, usage.outputTokens, usage.totalTokens),\n providerMetadata: { bedrock: usage },\n })\n}\n\ninterface ParserState {\n readonly tools: ToolStream.State<number>\n // Bedrock splits the finish into `messageStop` (carries `stopReason`) and\n // `metadata` (carries usage). Hold the terminal event in state so `onHalt`\n // can emit exactly one finish after both chunks have had a chance to arrive.\n readonly pendingFinish: { readonly reason: FinishReasonDetails; readonly usage?: Usage } | undefined\n readonly hasToolCalls: boolean\n readonly lifecycle: Lifecycle.State\n readonly reasoningSignatures: Readonly<Record<number, string>>\n}\n\nconst step = (state: ParserState, event: BedrockEvent) =>\n Effect.gen(function* () {\n if (event.contentBlockStart?.start?.toolUse) {\n const index = event.contentBlockStart.contentBlockIndex\n const events: LLMEvent[] = []\n const lifecycle = Lifecycle.stepStart(state.lifecycle, events)\n return [\n {\n ...state,\n lifecycle,\n tools: ToolStream.start(state.tools, index, {\n id: event.contentBlockStart.start.toolUse.toolUseId,\n name: event.contentBlockStart.start.toolUse.name,\n }),\n },\n [\n ...events,\n LLMEvent.toolInputStart({\n id: event.contentBlockStart.start.toolUse.toolUseId,\n name: event.contentBlockStart.start.toolUse.name,\n }),\n ],\n ] as const\n }\n\n if (event.contentBlockDelta?.delta?.text) {\n const events: LLMEvent[] = []\n return [\n {\n ...state,\n lifecycle: Lifecycle.textDelta(\n state.lifecycle,\n events,\n `text-${event.contentBlockDelta.contentBlockIndex}`,\n event.contentBlockDelta.delta.text,\n ),\n },\n events,\n ] as const\n }\n\n if (event.contentBlockDelta?.delta?.reasoningContent) {\n const index = event.contentBlockDelta.contentBlockIndex\n const reasoning = event.contentBlockDelta.delta.reasoningContent\n const events: LLMEvent[] = []\n const redactedData = reasoning.redactedContent ?? reasoning.data\n const providerMetadata = reasoning.signature\n ? bedrockMetadata({ signature: reasoning.signature })\n : redactedData !== undefined\n ? bedrockMetadata({ redactedData })\n : undefined\n const lifecycle =\n reasoning.text !== undefined || providerMetadata !== undefined\n ? Lifecycle.reasoningDelta(\n state.lifecycle,\n events,\n `reasoning-${index}`,\n reasoning.text ?? \"\",\n providerMetadata,\n )\n : state.lifecycle\n return [\n {\n ...state,\n lifecycle,\n reasoningSignatures: reasoning.signature\n ? { ...state.reasoningSignatures, [index]: reasoning.signature }\n : state.reasoningSignatures,\n },\n events,\n ] as const\n }\n\n if (event.contentBlockDelta?.delta?.toolUse) {\n const index = event.contentBlockDelta.contentBlockIndex\n const result = ToolStream.appendExisting(\n ADAPTER,\n state.tools,\n index,\n event.contentBlockDelta.delta.toolUse.input,\n \"Bedrock Converse tool delta is missing its tool call\",\n )\n if (ToolStream.isError(result)) return yield* result\n const events: LLMEvent[] = []\n const lifecycle = result.events.length ? Lifecycle.stepStart(state.lifecycle, events) : state.lifecycle\n events.push(...result.events)\n return [{ ...state, lifecycle, tools: result.tools }, events] as const\n }\n\n if (event.contentBlockStop) {\n const index = event.contentBlockStop.contentBlockIndex\n const result = yield* ToolStream.finish(ADAPTER, state.tools, index)\n const events: LLMEvent[] = []\n const resultEvents = result.events ?? []\n const lifecycle = resultEvents.length\n ? Lifecycle.stepStart(state.lifecycle, events)\n : Lifecycle.reasoningEnd(\n Lifecycle.textEnd(state.lifecycle, events, `text-${index}`),\n events,\n `reasoning-${index}`,\n state.reasoningSignatures[index]\n ? bedrockMetadata({ signature: state.reasoningSignatures[index] })\n : undefined,\n )\n events.push(...resultEvents)\n return [\n {\n ...state,\n hasToolCalls:\n resultEvents.some((event) => LLMEvent.is.toolCall(event) || LLMEvent.is.toolInputError(event)) ||\n state.hasToolCalls,\n lifecycle,\n tools: result.tools,\n reasoningSignatures: Object.fromEntries(\n Object.entries(state.reasoningSignatures).filter(([key]) => key !== String(index)),\n ),\n },\n events,\n ] as const\n }\n\n if (event.messageStop) {\n return [\n {\n ...state,\n pendingFinish: {\n reason: {\n normalized: mapFinishReason(event.messageStop.stopReason),\n raw: event.messageStop.stopReason,\n },\n usage: state.pendingFinish?.usage,\n },\n },\n [],\n ] as const\n }\n\n if (event.metadata) {\n const usage = mapUsage(event.metadata.usage) ?? state.pendingFinish?.usage\n return [\n {\n ...state,\n pendingFinish: {\n reason: state.pendingFinish?.reason ?? { normalized: \"stop\" },\n usage,\n },\n },\n [],\n ] as const\n }\n\n const exception = (\n [\n [\"internalServerException\", event.internalServerException],\n [\"modelStreamErrorException\", event.modelStreamErrorException],\n [\"serviceUnavailableException\", event.serviceUnavailableException],\n [\"throttlingException\", event.throttlingException],\n [\"validationException\", event.validationException],\n ] as const\n ).find((entry) => entry[1] !== undefined)\n if (exception) {\n return yield* new LLMError({\n module: ADAPTER,\n method: \"stream\",\n reason: classifyProviderFailure({\n message: exception[1]?.message ?? exception[1]?.originalMessage ?? \"Bedrock Converse stream error\",\n code: exception[0],\n }),\n })\n }\n\n return [state, []] as const\n })\n\nconst framing = BedrockEventStream.framing(ADAPTER)\n\nconst onHalt = (state: ParserState): ReadonlyArray<LLMEvent> =>\n state.pendingFinish\n ? (() => {\n const events: LLMEvent[] = []\n Lifecycle.finish(state.lifecycle, events, {\n reason: {\n ...state.pendingFinish.reason,\n normalized:\n state.pendingFinish.reason.normalized === \"stop\" && state.hasToolCalls\n ? \"tool-calls\"\n : state.pendingFinish.reason.normalized,\n },\n usage: state.pendingFinish.usage,\n })\n return events\n })()\n : []\n\n// =============================================================================\n// Protocol And Bedrock Route\n// =============================================================================\n/**\n * The Bedrock Converse protocol — request body construction, body schema, and\n * the streaming-event state machine.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: BedrockConverseBody,\n from: fromRequest,\n },\n stream: {\n event: BedrockEvent,\n initial: () => ({\n tools: ToolStream.empty<number>(),\n pendingFinish: undefined,\n hasToolCalls: false,\n lifecycle: Lifecycle.initial(),\n reasoningSignatures: {},\n }),\n step,\n onHalt,\n },\n})\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"bedrock\",\n providerMetadataKey: \"bedrock\",\n protocol,\n // Bedrock's URL embeds the region in the route endpoint host and the\n // validated modelId in the path. We read the validated body so the URL\n // matches the body that gets signed.\n endpoint: Endpoint.path<BedrockConverseBody>(\n ({ body }) => `/model/${encodeURIComponent(body.modelId)}/converse-stream`,\n ),\n auth: BedrockAuth.auth,\n framing,\n})\n\nexport const sigV4Auth = BedrockAuth.sigV4\n\nexport * as BedrockConverse from \"./bedrock-converse\"\n", | ||
| "import type { RouteDefaultsInput } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { ProviderID, type ModelID } from \"../schema\"\nimport * as BedrockConverse from \"../protocols/bedrock-converse\"\nimport type { BedrockCredentials } from \"../protocols/bedrock-converse\"\n\nexport const id = ProviderID.make(\"amazon-bedrock\")\n\nexport type Config = RouteDefaultsInput & {\n readonly apiKey?: string\n readonly headers?: Record<string, string>\n readonly credentials?: BedrockCredentials\n /** AWS region. Defaults to `us-east-1` when neither this nor `credentials.region` is set. */\n readonly region?: string\n /** Override the computed `https://bedrock-runtime.<region>.amazonaws.com` URL. */\n readonly baseURL?: string\n}\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly auth?: \"bearer\" | \"sigv4\"\n readonly baseURL?: string\n readonly credentials?: BedrockCredentials\n readonly region?: string\n readonly topP?: number\n}\nexport const routes = [BedrockConverse.route]\n\nconst bedrockBaseURL = (region: string) => `https://bedrock-runtime.${region}.amazonaws.com`\n\nconst configuredRoute = (input: Config) => {\n const { apiKey, credentials, region, baseURL, ...rest } = input\n const resolvedRegion = region ?? credentials?.region ?? \"us-east-1\"\n return BedrockConverse.route.with({\n ...rest,\n provider: id,\n endpoint: { baseURL: baseURL ?? bedrockBaseURL(resolvedRegion) },\n auth: apiKey === undefined ? BedrockConverse.sigV4Auth(credentials) : Auth.bearer(apiKey),\n })\n}\n\nexport const configure = (input: Config = {}) => {\n const route = configuredRoute(input)\n return {\n id,\n model: (modelID: string | ModelID) => route.model({ id: modelID }),\n configure,\n }\n}\n\nexport const provider = configure()\nexport const model: ProviderPackage.Definition<Settings>[\"model\"] = (modelID, settings) => {\n if (settings.auth === \"bearer\" && settings.apiKey === undefined)\n throw new Error(\"Amazon Bedrock bearer auth requires apiKey\")\n if (settings.auth === \"sigv4\" && settings.apiKey !== undefined)\n throw new Error(\"Amazon Bedrock SigV4 auth does not accept apiKey\")\n return configure({\n apiKey: settings.auth === \"sigv4\" ? undefined : settings.apiKey,\n baseURL: settings.baseURL,\n credentials: settings.credentials,\n generation: settings.topP === undefined ? undefined : { topP: settings.topP },\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n region: settings.region,\n }).model(modelID)\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "1EF276A33B4B8DDA64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+cohere@3.0.27+d6123d32214422cb/node_modules/@ai-sdk/cohere/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/cohere-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/cohere-chat-language-model.ts\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\n\n// src/cohere-chat-options.ts\nimport { z } from \"zod/v4\";\nvar cohereLanguageModelOptions = z.object({\n /**\n * Configuration for reasoning features (optional)\n *\n * Can be set to an object with the two properties `type` and `tokenBudget`. `type` can be set to `'enabled'` or `'disabled'` (defaults to `'enabled'`).\n * `tokenBudget` is the maximum number of tokens the model can use for thinking, which must be set to a positive integer. The model will stop thinking if it reaches the thinking token budget and will proceed with the response\n *\n * @see https://docs.cohere.com/reference/chat#request.body.thinking\n */\n thinking: z.object({\n type: z.enum([\"enabled\", \"disabled\"]).optional(),\n tokenBudget: z.number().optional()\n }).optional()\n});\n\n// src/cohere-error.ts\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z as z2 } from \"zod/v4\";\nvar cohereErrorDataSchema = z2.object({\n message: z2.string()\n});\nvar cohereFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: cohereErrorDataSchema,\n errorToMessage: (data) => data.message\n});\n\n// src/cohere-prepare-tools.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nfunction prepareTools({\n tools,\n toolChoice\n}) {\n tools = (tools == null ? void 0 : tools.length) ? tools : void 0;\n const toolWarnings = [];\n if (tools == null) {\n return { tools: void 0, toolChoice: void 0, toolWarnings };\n }\n const cohereTools = [];\n for (const tool of tools) {\n if (tool.type === \"provider\") {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`\n });\n } else {\n cohereTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema\n }\n });\n }\n }\n if (toolChoice == null) {\n return { tools: cohereTools, toolChoice: void 0, toolWarnings };\n }\n const type = toolChoice.type;\n switch (type) {\n case \"auto\":\n return { tools: cohereTools, toolChoice: void 0, toolWarnings };\n case \"none\":\n return { tools: cohereTools, toolChoice: \"NONE\", toolWarnings };\n case \"required\":\n return { tools: cohereTools, toolChoice: \"REQUIRED\", toolWarnings };\n case \"tool\":\n return {\n tools: cohereTools.filter(\n (tool) => tool.function.name === toolChoice.toolName\n ),\n toolChoice: \"REQUIRED\",\n toolWarnings\n };\n default: {\n const _exhaustiveCheck = type;\n throw new UnsupportedFunctionalityError({\n functionality: `tool choice type: ${_exhaustiveCheck}`\n });\n }\n }\n}\n\n// src/convert-cohere-usage.ts\nfunction convertCohereUsage(tokens) {\n if (tokens == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const inputTokens = tokens.input_tokens;\n const outputTokens = tokens.output_tokens;\n return {\n inputTokens: {\n total: inputTokens,\n noCache: inputTokens,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: outputTokens,\n text: outputTokens,\n reasoning: void 0\n },\n raw: tokens\n };\n}\n\n// src/convert-to-cohere-chat-prompt.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\nfunction convertToCohereChatPrompt(prompt) {\n const messages = [];\n const documents = [];\n const warnings = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n var _a;\n switch (part.type) {\n case \"text\": {\n return part.text;\n }\n case \"file\": {\n let textContent;\n if (typeof part.data === \"string\") {\n textContent = part.data;\n } else if (part.data instanceof Uint8Array) {\n if (!(((_a = part.mediaType) == null ? void 0 : _a.startsWith(\"text/\")) || part.mediaType === \"application/json\")) {\n throw new UnsupportedFunctionalityError2({\n functionality: `document media type: ${part.mediaType}`,\n message: `Media type '${part.mediaType}' is not supported. Supported media types are: text/* and application/json.`\n });\n }\n textContent = new TextDecoder().decode(part.data);\n } else {\n throw new UnsupportedFunctionalityError2({\n functionality: \"File URL data\",\n message: \"URLs should be downloaded by the AI SDK and not reach this point. This indicates a configuration issue.\"\n });\n }\n documents.push({\n data: {\n text: textContent,\n title: part.filename\n }\n });\n return \"\";\n }\n }\n }).join(\"\")\n });\n break;\n }\n case \"assistant\": {\n let text = \"\";\n const toolCalls = [];\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input)\n }\n });\n break;\n }\n }\n }\n messages.push({\n role: \"assistant\",\n content: toolCalls.length > 0 ? void 0 : text,\n tool_calls: toolCalls.length > 0 ? toolCalls : void 0,\n tool_plan: void 0\n });\n break;\n }\n case \"tool\": {\n messages.push(\n ...content.filter((toolResult) => toolResult.type !== \"tool-approval-response\").map((toolResult) => {\n var _a;\n const output = toolResult.output;\n let contentValue;\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n contentValue = output.value;\n break;\n case \"execution-denied\":\n contentValue = (_a = output.reason) != null ? _a : \"Tool execution denied.\";\n break;\n case \"content\":\n case \"json\":\n case \"error-json\":\n contentValue = JSON.stringify(output.value);\n break;\n }\n return {\n role: \"tool\",\n content: contentValue,\n tool_call_id: toolResult.toolCallId\n };\n })\n );\n break;\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return { messages, documents, warnings };\n}\n\n// src/map-cohere-finish-reason.ts\nfunction mapCohereFinishReason(finishReason) {\n switch (finishReason) {\n case \"COMPLETE\":\n case \"STOP_SEQUENCE\":\n return \"stop\";\n case \"MAX_TOKENS\":\n return \"length\";\n case \"ERROR\":\n return \"error\";\n case \"TOOL_CALL\":\n return \"tool-calls\";\n default:\n return \"other\";\n }\n}\n\n// src/cohere-chat-language-model.ts\nvar CohereChatLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.supportedUrls = {\n // No URLs are supported.\n };\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n tools,\n toolChoice,\n providerOptions\n }) {\n var _a, _b;\n const cohereOptions = (_a = await parseProviderOptions({\n provider: \"cohere\",\n providerOptions,\n schema: cohereLanguageModelOptions\n })) != null ? _a : {};\n const {\n messages: chatPrompt,\n documents: cohereDocuments,\n warnings: promptWarnings\n } = convertToCohereChatPrompt(prompt);\n const {\n tools: cohereTools,\n toolChoice: cohereToolChoice,\n toolWarnings\n } = prepareTools({ tools, toolChoice });\n return {\n args: {\n // model id:\n model: this.modelId,\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n max_tokens: maxOutputTokens,\n temperature,\n p: topP,\n k: topK,\n seed,\n stop_sequences: stopSequences,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? { type: \"json_object\", json_schema: responseFormat.schema } : void 0,\n // messages:\n messages: chatPrompt,\n // tools:\n tools: cohereTools,\n tool_choice: cohereToolChoice,\n // documents for RAG:\n ...cohereDocuments.length > 0 && { documents: cohereDocuments },\n // reasoning\n ...cohereOptions.thinking && {\n thinking: {\n type: (_b = cohereOptions.thinking.type) != null ? _b : \"enabled\",\n token_budget: cohereOptions.thinking.tokenBudget\n }\n }\n },\n warnings: [...toolWarnings, ...promptWarnings]\n };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g;\n const { args, warnings } = await this.getArgs(options);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: args,\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n cohereChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const content = [];\n for (const item of (_a = response.message.content) != null ? _a : []) {\n if (item.type === \"text\" && item.text.length > 0) {\n content.push({ type: \"text\", text: item.text });\n continue;\n }\n if (item.type === \"thinking\" && item.thinking.length > 0) {\n content.push({ type: \"reasoning\", text: item.thinking });\n continue;\n }\n }\n for (const citation of (_b = response.message.citations) != null ? _b : []) {\n content.push({\n type: \"source\",\n sourceType: \"document\",\n id: this.config.generateId(),\n mediaType: \"text/plain\",\n title: ((_d = (_c = citation.sources[0]) == null ? void 0 : _c.document) == null ? void 0 : _d.title) || \"Document\",\n providerMetadata: {\n cohere: {\n start: citation.start,\n end: citation.end,\n text: citation.text,\n sources: citation.sources,\n ...citation.type && { citationType: citation.type }\n }\n }\n });\n }\n for (const toolCall of (_e = response.message.tool_calls) != null ? _e : []) {\n content.push({\n type: \"tool-call\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n // Cohere sometimes returns `null` for tool call arguments for tools\n // defined as having no arguments.\n input: toolCall.function.arguments.replace(/^null$/, \"{}\")\n });\n }\n return {\n content,\n finishReason: {\n unified: mapCohereFinishReason(response.finish_reason),\n raw: (_f = response.finish_reason) != null ? _f : void 0\n },\n usage: convertCohereUsage(response.usage.tokens),\n request: { body: args },\n response: {\n // TODO timestamp, model id\n id: (_g = response.generation_id) != null ? _g : void 0,\n headers: responseHeaders,\n body: rawResponse\n },\n warnings\n };\n }\n async doStream(options) {\n const { args, warnings } = await this.getArgs(options);\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body: { ...args, stream: true },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n cohereChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n let pendingToolCall = null;\n let isActiveReasoning = false;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n var _a, _b;\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n finishReason = { unified: \"error\", raw: void 0 };\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n const type = value.type;\n switch (type) {\n case \"content-start\": {\n if (value.delta.message.content.type === \"thinking\") {\n controller.enqueue({\n type: \"reasoning-start\",\n id: String(value.index)\n });\n isActiveReasoning = true;\n return;\n }\n controller.enqueue({\n type: \"text-start\",\n id: String(value.index)\n });\n return;\n }\n case \"content-delta\": {\n if (\"thinking\" in value.delta.message.content) {\n controller.enqueue({\n type: \"reasoning-delta\",\n id: String(value.index),\n delta: value.delta.message.content.thinking\n });\n return;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: String(value.index),\n delta: value.delta.message.content.text\n });\n return;\n }\n case \"content-end\": {\n if (isActiveReasoning) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: String(value.index)\n });\n isActiveReasoning = false;\n return;\n }\n controller.enqueue({\n type: \"text-end\",\n id: String(value.index)\n });\n return;\n }\n case \"tool-call-start\": {\n const toolId = value.delta.message.tool_calls.id;\n const toolName = value.delta.message.tool_calls.function.name;\n const initialArgs = value.delta.message.tool_calls.function.arguments;\n pendingToolCall = {\n id: toolId,\n name: toolName,\n arguments: initialArgs,\n hasFinished: false\n };\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolId,\n toolName\n });\n if (initialArgs.length > 0) {\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolId,\n delta: initialArgs\n });\n }\n return;\n }\n case \"tool-call-delta\": {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n const argsDelta = value.delta.message.tool_calls.function.arguments;\n pendingToolCall.arguments += argsDelta;\n controller.enqueue({\n type: \"tool-input-delta\",\n id: pendingToolCall.id,\n delta: argsDelta\n });\n }\n return;\n }\n case \"tool-call-end\": {\n if (pendingToolCall && !pendingToolCall.hasFinished) {\n controller.enqueue({\n type: \"tool-input-end\",\n id: pendingToolCall.id\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId: pendingToolCall.id,\n toolName: pendingToolCall.name,\n input: JSON.stringify(\n JSON.parse(((_a = pendingToolCall.arguments) == null ? void 0 : _a.trim()) || \"{}\")\n )\n });\n pendingToolCall.hasFinished = true;\n pendingToolCall = null;\n }\n return;\n }\n case \"message-start\": {\n controller.enqueue({\n type: \"response-metadata\",\n id: (_b = value.id) != null ? _b : void 0\n });\n return;\n }\n case \"message-end\": {\n finishReason = {\n unified: mapCohereFinishReason(value.delta.finish_reason),\n raw: value.delta.finish_reason\n };\n usage = value.delta.usage.tokens;\n return;\n }\n default: {\n return;\n }\n }\n },\n flush(controller) {\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertCohereUsage(usage)\n });\n }\n })\n ),\n request: { body: { ...args, stream: true } },\n response: { headers: responseHeaders }\n };\n }\n};\nvar cohereChatResponseSchema = z3.object({\n generation_id: z3.string().nullish(),\n message: z3.object({\n role: z3.string(),\n content: z3.array(\n z3.union([\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"thinking\"),\n thinking: z3.string()\n })\n ])\n ).nullish(),\n tool_plan: z3.string().nullish(),\n tool_calls: z3.array(\n z3.object({\n id: z3.string(),\n type: z3.literal(\"function\"),\n function: z3.object({\n name: z3.string(),\n arguments: z3.string()\n })\n })\n ).nullish(),\n citations: z3.array(\n z3.object({\n start: z3.number(),\n end: z3.number(),\n text: z3.string(),\n sources: z3.array(\n z3.object({\n type: z3.string().optional(),\n id: z3.string().optional(),\n document: z3.object({\n id: z3.string().optional(),\n text: z3.string(),\n title: z3.string()\n })\n })\n ),\n type: z3.string().optional()\n })\n ).nullish()\n }),\n finish_reason: z3.string(),\n usage: z3.object({\n billed_units: z3.object({\n input_tokens: z3.number(),\n output_tokens: z3.number()\n }),\n tokens: z3.object({\n input_tokens: z3.number(),\n output_tokens: z3.number()\n })\n })\n});\nvar cohereChatChunkSchema = z3.discriminatedUnion(\"type\", [\n z3.object({\n type: z3.literal(\"citation-start\")\n }),\n z3.object({\n type: z3.literal(\"citation-end\")\n }),\n z3.object({\n type: z3.literal(\"content-start\"),\n index: z3.number(),\n delta: z3.object({\n message: z3.object({\n content: z3.union([\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"thinking\"),\n thinking: z3.string()\n })\n ])\n })\n })\n }),\n z3.object({\n type: z3.literal(\"content-delta\"),\n index: z3.number(),\n delta: z3.object({\n message: z3.object({\n content: z3.union([\n z3.object({\n text: z3.string()\n }),\n z3.object({\n thinking: z3.string()\n })\n ])\n })\n })\n }),\n z3.object({\n type: z3.literal(\"content-end\"),\n index: z3.number()\n }),\n z3.object({\n type: z3.literal(\"message-start\"),\n id: z3.string().nullish()\n }),\n z3.object({\n type: z3.literal(\"message-end\"),\n delta: z3.object({\n finish_reason: z3.string(),\n usage: z3.object({\n tokens: z3.object({\n input_tokens: z3.number(),\n output_tokens: z3.number()\n })\n })\n })\n }),\n // https://docs.cohere.com/v2/docs/streaming#tool-use-stream-events-for-tool-calling\n z3.object({\n type: z3.literal(\"tool-plan-delta\"),\n delta: z3.object({\n message: z3.object({\n tool_plan: z3.string()\n })\n })\n }),\n z3.object({\n type: z3.literal(\"tool-call-start\"),\n delta: z3.object({\n message: z3.object({\n tool_calls: z3.object({\n id: z3.string(),\n type: z3.literal(\"function\"),\n function: z3.object({\n name: z3.string(),\n arguments: z3.string()\n })\n })\n })\n })\n }),\n // A single tool call's `arguments` stream in chunks and must be accumulated\n // in a string and so the full tool object info can only be parsed once we see\n // `tool-call-end`.\n z3.object({\n type: z3.literal(\"tool-call-delta\"),\n delta: z3.object({\n message: z3.object({\n tool_calls: z3.object({\n function: z3.object({\n arguments: z3.string()\n })\n })\n })\n })\n }),\n z3.object({\n type: z3.literal(\"tool-call-end\")\n })\n]);\n\n// src/cohere-embedding-model.ts\nimport {\n TooManyEmbeddingValuesForCallError\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders as combineHeaders2,\n createJsonResponseHandler as createJsonResponseHandler2,\n parseProviderOptions as parseProviderOptions2,\n postJsonToApi as postJsonToApi2\n} from \"@ai-sdk/provider-utils\";\nimport { z as z5 } from \"zod/v4\";\n\n// src/cohere-embedding-options.ts\nimport { z as z4 } from \"zod/v4\";\nvar cohereEmbeddingModelOptions = z4.object({\n /**\n * Specifies the type of input passed to the model. Default is `search_query`.\n *\n * - \"search_document\": Used for embeddings stored in a vector database for search use-cases.\n * - \"search_query\": Used for embeddings of search queries run against a vector DB to find relevant documents.\n * - \"classification\": Used for embeddings passed through a text classifier.\n * - \"clustering\": Used for embeddings run through a clustering algorithm.\n */\n inputType: z4.enum([\"search_document\", \"search_query\", \"classification\", \"clustering\"]).optional(),\n /**\n * Specifies how the API will handle inputs longer than the maximum token length.\n * Default is `END`.\n *\n * - \"NONE\": If selected, when the input exceeds the maximum input token length will return an error.\n * - \"START\": Will discard the start of the input until the remaining input is exactly the maximum input token length for the model.\n * - \"END\": Will discard the end of the input until the remaining input is exactly the maximum input token length for the model.\n */\n truncate: z4.enum([\"NONE\", \"START\", \"END\"]).optional(),\n /**\n * The number of dimensions of the output embedding.\n * Only available for `embed-v4.0` and newer models.\n *\n * Possible values are `256`, `512`, `1024`, and `1536`.\n * The default is `1536`.\n */\n outputDimension: z4.union([z4.literal(256), z4.literal(512), z4.literal(1024), z4.literal(1536)]).optional()\n});\n\n// src/cohere-embedding-model.ts\nvar CohereEmbeddingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.maxEmbeddingsPerCall = 96;\n this.supportsParallelCalls = true;\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async doEmbed({\n values,\n headers,\n abortSignal,\n providerOptions\n }) {\n var _a;\n const embeddingOptions = await parseProviderOptions2({\n provider: \"cohere\",\n providerOptions,\n schema: cohereEmbeddingModelOptions\n });\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values\n });\n }\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi2({\n url: `${this.config.baseURL}/embed`,\n headers: combineHeaders2(this.config.headers(), headers),\n body: {\n model: this.modelId,\n // The AI SDK only supports 'float' embeddings. Note that the Cohere API\n // supports other embedding types, but they are not currently supported by the AI SDK.\n // https://docs.cohere.com/v2/reference/embed#request.body.embedding_types\n embedding_types: [\"float\"],\n texts: values,\n input_type: (_a = embeddingOptions == null ? void 0 : embeddingOptions.inputType) != null ? _a : \"search_query\",\n truncate: embeddingOptions == null ? void 0 : embeddingOptions.truncate,\n output_dimension: embeddingOptions == null ? void 0 : embeddingOptions.outputDimension\n },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler2(\n cohereTextEmbeddingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n warnings: [],\n embeddings: response.embeddings.float,\n usage: { tokens: response.meta.billed_units.input_tokens },\n response: { headers: responseHeaders, body: rawValue }\n };\n }\n};\nvar cohereTextEmbeddingResponseSchema = z5.object({\n embeddings: z5.object({\n float: z5.array(z5.array(z5.number()))\n }),\n meta: z5.object({\n billed_units: z5.object({\n input_tokens: z5.number()\n })\n })\n});\n\n// src/reranking/cohere-reranking-model.ts\nimport {\n combineHeaders as combineHeaders3,\n createJsonResponseHandler as createJsonResponseHandler3,\n parseProviderOptions as parseProviderOptions3,\n postJsonToApi as postJsonToApi3\n} from \"@ai-sdk/provider-utils\";\n\n// src/reranking/cohere-reranking-api.ts\nimport { lazySchema, zodSchema } from \"@ai-sdk/provider-utils\";\nimport { z as z6 } from \"zod/v4\";\nvar cohereRerankingResponseSchema = lazySchema(\n () => zodSchema(\n z6.object({\n id: z6.string().nullish(),\n results: z6.array(\n z6.object({\n index: z6.number(),\n relevance_score: z6.number()\n })\n ),\n meta: z6.any()\n })\n )\n);\n\n// src/reranking/cohere-reranking-options.ts\nimport { lazySchema as lazySchema2, zodSchema as zodSchema2 } from \"@ai-sdk/provider-utils\";\nimport { z as z7 } from \"zod/v4\";\nvar cohereRerankingModelOptionsSchema = lazySchema2(\n () => zodSchema2(\n z7.object({\n maxTokensPerDoc: z7.number().optional(),\n priority: z7.number().optional()\n })\n )\n);\n\n// src/reranking/cohere-reranking-model.ts\nvar CohereRerankingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n // current implementation is based on v2 of the API: https://docs.cohere.com/v2/reference/rerank\n async doRerank({\n documents,\n headers,\n query,\n topN,\n abortSignal,\n providerOptions\n }) {\n var _a;\n const rerankingOptions = await parseProviderOptions3({\n provider: \"cohere\",\n providerOptions,\n schema: cohereRerankingModelOptionsSchema\n });\n const warnings = [];\n if (documents.type === \"object\") {\n warnings.push({\n type: \"compatibility\",\n feature: \"object documents\",\n details: \"Object documents are converted to strings.\"\n });\n }\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi3({\n url: `${this.config.baseURL}/rerank`,\n headers: combineHeaders3(this.config.headers(), headers),\n body: {\n model: this.modelId,\n query,\n documents: documents.type === \"text\" ? documents.values : documents.values.map((value) => JSON.stringify(value)),\n top_n: topN,\n max_tokens_per_doc: rerankingOptions == null ? void 0 : rerankingOptions.maxTokensPerDoc,\n priority: rerankingOptions == null ? void 0 : rerankingOptions.priority\n },\n failedResponseHandler: cohereFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler3(\n cohereRerankingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n ranking: response.results.map((result) => ({\n index: result.index,\n relevanceScore: result.relevance_score\n })),\n warnings,\n response: {\n id: (_a = response.id) != null ? _a : void 0,\n headers: responseHeaders,\n body: rawValue\n }\n };\n }\n};\n\n// src/version.ts\nvar VERSION = true ? \"3.0.27\" : \"0.0.0-test\";\n\n// src/cohere-provider.ts\nfunction createCohere(options = {}) {\n var _a;\n const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : \"https://api.cohere.com/v2\";\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"COHERE_API_KEY\",\n description: \"Cohere\"\n })}`,\n ...options.headers\n },\n `ai-sdk/cohere/${VERSION}`\n );\n const createChatModel = (modelId) => {\n var _a2;\n return new CohereChatLanguageModel(modelId, {\n provider: \"cohere.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: (_a2 = options.generateId) != null ? _a2 : generateId\n });\n };\n const createEmbeddingModel = (modelId) => new CohereEmbeddingModel(modelId, {\n provider: \"cohere.textEmbedding\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createRerankingModel = (modelId) => new CohereRerankingModel(modelId, {\n provider: \"cohere.reranking\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const provider = function(modelId) {\n if (new.target) {\n throw new Error(\n \"The Cohere model function cannot be called with the new keyword.\"\n );\n }\n return createChatModel(modelId);\n };\n provider.specificationVersion = \"v3\";\n provider.languageModel = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar cohere = createCohere();\nexport {\n VERSION,\n cohere,\n createCohere\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "2B9A5E524B26D01C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/openai-images.ts", "../ai/src/providers/openai.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Encoding, Schema } from \"effect\"\nimport { Headers, HttpClientRequest, HttpClientResponse } from \"effect/unstable/http\"\nimport {\n ImageModel,\n GeneratedImage,\n ImageResponse,\n type ImageInput,\n type ImageRequestFor,\n type ImageRoute,\n} from \"../image\"\nimport { Auth, type Definition as AuthDefinition } from \"../route/auth\"\nimport {\n InvalidProviderOutputReason,\n LLMError,\n Usage,\n mergeHttpOptions,\n mergeJsonRecords,\n type HttpOptions,\n} from \"../schema\"\nimport { ProviderShared } from \"./shared\"\nimport { ImageInputs } from \"./utils/image-input\"\nimport { OpenAIImage } from \"./utils/openai-image\"\n\nconst ADAPTER = \"openai-images\"\nexport const DEFAULT_BASE_URL = \"https://api.openai.com/v1\"\nexport const PATH = \"/images/generations\"\nexport const EDIT_PATH = \"/images/edits\"\n\nexport type OpenAIImageString<Known extends string> = Known | (string & {})\n\nexport type OpenAIImageOptions = {\n readonly mask?: ImageInput\n readonly n?: number\n readonly size?: OpenAIImageString<\n \"auto\" | \"256x256\" | \"512x512\" | \"1024x1024\" | \"1536x1024\" | \"1024x1536\" | \"1792x1024\" | \"1024x1792\"\n >\n readonly quality?: OpenAIImageString<\"auto\" | \"low\" | \"medium\" | \"high\" | \"standard\" | \"hd\">\n readonly background?: OpenAIImageString<\"auto\" | \"opaque\" | \"transparent\">\n readonly moderation?: OpenAIImageString<\"auto\" | \"low\">\n readonly outputFormat?: OpenAIImageString<\"png\" | \"jpeg\" | \"webp\">\n readonly outputCompression?: number\n} & Record<string, unknown>\n\nexport type OpenAIImageBody = Record<string, unknown> & {\n readonly model: string\n readonly prompt: string\n}\n\nconst OpenAIImageResponse = Schema.Struct({\n data: Schema.Array(\n Schema.Struct({\n b64_json: Schema.optional(Schema.String),\n url: Schema.optional(Schema.String),\n revised_prompt: Schema.optional(Schema.String),\n }),\n ),\n output_format: Schema.optional(Schema.String),\n usage: Schema.optional(\n Schema.Struct({\n input_tokens: Schema.optional(Schema.Number),\n output_tokens: Schema.optional(Schema.Number),\n total_tokens: Schema.optional(Schema.Number),\n input_tokens_details: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n output_tokens_details: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n }),\n ),\n})\n\nexport interface ModelInput {\n readonly id: string\n readonly auth: AuthDefinition\n readonly baseURL?: string\n readonly headers?: Record<string, string>\n readonly http?: HttpOptions\n}\n\nconst nativeOptions = (options: OpenAIImageOptions | undefined) => {\n if (!options) return undefined\n const { mask: _, outputFormat, outputCompression, ...native } = options\n return {\n output_format: outputFormat,\n output_compression: outputCompression,\n ...native,\n }\n}\n\nconst invalidOutput = (message: string) =>\n new LLMError({\n module: ADAPTER,\n method: \"generate\",\n reason: new InvalidProviderOutputReason({ message, route: ADAPTER }),\n })\n\nconst applyQuery = (url: string, query: Record<string, string> | undefined) => {\n if (!query) return url\n const next = new URL(url)\n Object.entries(query).forEach(([key, value]) => next.searchParams.set(key, value))\n return next.toString()\n}\n\nexport const model = (input: ModelInput) => {\n const route: ImageRoute<OpenAIImageOptions> = {\n id: ADAPTER,\n generate: Effect.fn(\"OpenAIImages.generate\")(function* (request: ImageRequestFor<OpenAIImageOptions>, execute) {\n const mask = request.options?.mask\n if (mask !== undefined && (request.images?.length ?? 0) === 0)\n return yield* ImageInputs.invalid(ADAPTER, \"An OpenAI image mask requires at least one input image\")\n const http = mergeHttpOptions(request.model.http, request.http)\n const sourceImages = request.images ?? []\n const multipartImages = yield* Effect.forEach(sourceImages, (image) => {\n if (image.type === \"bytes\") return Effect.succeed({ data: image.data, mediaType: image.mediaType })\n if (image.type === \"url\") return ImageInputs.decodeDataUrl(image.url, ADAPTER)\n return Effect.succeed(undefined)\n })\n const multipartMask =\n mask === undefined\n ? undefined\n : mask.type === \"bytes\"\n ? { data: mask.data, mediaType: mask.mediaType }\n : mask.type === \"url\"\n ? yield* ImageInputs.decodeDataUrl(mask.url, ADAPTER)\n : undefined\n const useMultipart =\n sourceImages.length > 0 &&\n multipartImages.every((image) => image !== undefined) &&\n (mask === undefined || multipartMask !== undefined)\n const path = sourceImages.length === 0 ? PATH : EDIT_PATH\n const url = applyQuery(`${(input.baseURL ?? DEFAULT_BASE_URL).replace(/\\/$/, \"\")}${path}`, http?.query)\n\n if (useMultipart) {\n const form = new FormData()\n form.append(\"model\", request.model.id)\n form.append(\"prompt\", request.prompt)\n Object.entries(mergeJsonRecords(nativeOptions(request.options), http?.body) ?? {}).forEach(([key, value]) => {\n if ([\"model\", \"prompt\", \"image\", \"image[]\", \"images\", \"mask\"].includes(key)) return\n form.append(key, typeof value === \"string\" ? value : ProviderShared.encodeJson(value))\n })\n multipartImages.forEach((image, index) => {\n if (image === undefined) return\n form.append(\"image[]\", imageBlob(image.data, image.mediaType), `image-${index}`)\n })\n if (multipartMask !== undefined)\n form.append(\"mask\", imageBlob(multipartMask.data, multipartMask.mediaType), \"mask\")\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: \"[multipart/form-data]\",\n headers: Headers.remove(Headers.fromInput({ ...input.headers, ...http?.headers }), \"content-type\"),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(HttpClientRequest.setHeaders(headers), HttpClientRequest.bodyFormData(form)),\n )\n return yield* parseResponse(response, request.options, http?.body)\n }\n\n const references = sourceImages.map((image) => {\n if (image.type === \"bytes\") return { image_url: ImageInputs.dataUrl(image) }\n if (image.type === \"url\") return { image_url: image.url }\n if (image.type === \"file-id\") return { file_id: image.id }\n return undefined\n })\n if (references.some((image) => image === undefined))\n return yield* ImageInputs.invalid(ADAPTER, \"OpenAI Images accepts image URLs, data URLs, bytes, and file IDs\")\n const maskReference =\n mask === undefined\n ? undefined\n : mask.type === \"bytes\"\n ? { image_url: ImageInputs.dataUrl(mask) }\n : mask.type === \"url\"\n ? { image_url: mask.url }\n : mask.type === \"file-id\"\n ? { file_id: mask.id }\n : undefined\n if (mask !== undefined && maskReference === undefined)\n return yield* ImageInputs.invalid(ADAPTER, \"OpenAI Images accepts masks as URLs, data URLs, bytes, or file IDs\")\n const requestBody = mergeJsonRecords(\n {\n model: request.model.id,\n prompt: request.prompt,\n images: references.length === 0 ? undefined : references,\n mask: maskReference,\n },\n nativeOptions(request.options),\n http?.body,\n ) as OpenAIImageBody\n const text = ProviderShared.encodeJson(requestBody)\n const headers = yield* Auth.toEffect(input.auth)({\n request,\n method: \"POST\",\n url,\n body: text,\n headers: Headers.fromInput({ ...input.headers, ...http?.headers }),\n })\n const response = yield* execute(\n HttpClientRequest.post(url).pipe(\n HttpClientRequest.setHeaders(headers),\n HttpClientRequest.bodyText(text, \"application/json\"),\n ),\n )\n return yield* parseResponse(response, request.options, http?.body)\n }),\n }\n return ImageModel.make<OpenAIImageOptions>({ id: input.id, provider: \"openai\", route, http: input.http })\n}\n\nconst parseResponse = Effect.fn(\"OpenAIImages.parseResponse\")(function* (\n response: HttpClientResponse.HttpClientResponse,\n options: OpenAIImageOptions | undefined,\n overlay: Record<string, unknown> | undefined,\n) {\n const payload = yield* response.json.pipe(\n Effect.mapError(() => invalidOutput(\"Failed to read the OpenAI Images response\")),\n )\n const decoded = yield* Schema.decodeUnknownEffect(OpenAIImageResponse)(payload).pipe(\n Effect.mapError(() => invalidOutput(\"OpenAI Images returned an invalid response\")),\n )\n const requestBody = mergeJsonRecords(nativeOptions(options), overlay)\n const format =\n decoded.output_format ?? (typeof requestBody?.output_format === \"string\" ? requestBody.output_format : \"png\")\n const images = yield* Effect.forEach(decoded.data, (item, index) => {\n if (item.b64_json)\n return Effect.fromResult(Encoding.decodeBase64(item.b64_json)).pipe(\n Effect.mapError(() => invalidOutput(`OpenAI Images result ${index} contains invalid base64 data`)),\n Effect.map(\n (data) =>\n new GeneratedImage({\n mediaType: `image/${format}`,\n data,\n providerMetadata:\n item.revised_prompt === undefined ? undefined : { openai: { revisedPrompt: item.revised_prompt } },\n }),\n ),\n )\n if (item.url)\n return Effect.succeed(\n new GeneratedImage({\n mediaType: `image/${format}`,\n data: item.url,\n providerMetadata:\n item.revised_prompt === undefined ? undefined : { openai: { revisedPrompt: item.revised_prompt } },\n }),\n )\n return Effect.fail(invalidOutput(`OpenAI Images result ${index} has neither image data nor a URL`))\n })\n if (images.length === 0) return yield* invalidOutput(\"OpenAI Images returned no images\")\n return new ImageResponse({\n images,\n usage:\n decoded.usage === undefined\n ? undefined\n : new Usage({\n inputTokens: decoded.usage.input_tokens,\n outputTokens: decoded.usage.output_tokens,\n totalTokens: decoded.usage.total_tokens,\n providerMetadata: { openai: decoded.usage },\n }),\n providerMetadata: { openai: { outputFormat: format } },\n })\n})\n\nconst imageBlob = (data: Uint8Array, mediaType: string) => {\n const buffer = new ArrayBuffer(data.byteLength)\n new Uint8Array(buffer).set(data)\n return new Blob([buffer], { type: mediaType })\n}\n\nexport const OpenAIImages = {\n model,\n} as const\n", | ||
| "import { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport type { Route, RouteDefaultsInput } from \"../route/client\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { HttpOptions, ProviderID, ToolDefinition, mergeHttpOptions, type ModelID } from \"../schema\"\nimport * as OpenAIChat from \"../protocols/openai-chat\"\nimport * as OpenAIResponses from \"../protocols/openai-responses\"\nimport { withOpenAIOptions, type OpenAIProviderOptionsInput } from \"./openai-options\"\nimport { OpenAIImages, type OpenAIImageString } from \"../protocols/openai-images\"\n\nexport type { OpenAIOptionsInput, OpenAIResponseIncludable } from \"./openai-options\"\nexport type { OpenAIImageOptions } from \"../protocols/openai-images\"\n\nexport const id = ProviderID.make(\"openai\")\n\nexport const routes = [OpenAIResponses.route, OpenAIResponses.webSocketRoute, OpenAIChat.route]\n\n// This provider facade wraps the lower-level Responses and Chat model factories\n// with OpenAI-specific conveniences: typed options, API-key sugar, env fallback,\n// and default option normalization.\nexport type Config = RouteDefaultsInput &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly queryParams?: Record<string, string>\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nexport interface ImageGenerationOptions {\n readonly action?: OpenAIImageString<\"auto\" | \"generate\" | \"edit\">\n readonly background?: OpenAIImageString<\"auto\" | \"opaque\" | \"transparent\">\n readonly inputFidelity?: OpenAIImageString<\"low\" | \"high\">\n readonly outputCompression?: number\n readonly outputFormat?: OpenAIImageString<\"png\" | \"jpeg\" | \"webp\">\n readonly partialImages?: number\n readonly quality?: OpenAIImageString<\"auto\" | \"low\" | \"medium\" | \"high\" | \"standard\" | \"hd\">\n readonly size?: OpenAIImageString<\n \"auto\" | \"256x256\" | \"512x512\" | \"1024x1024\" | \"1536x1024\" | \"1024x1536\" | \"1792x1024\" | \"1024x1792\"\n >\n}\n\nexport const imageGeneration = (options: ImageGenerationOptions = {}) =>\n ToolDefinition.make({\n name: \"image_generation\",\n description: \"Generate or edit an image using OpenAI's hosted image generation tool.\",\n inputSchema: { type: \"object\", properties: {}, additionalProperties: false },\n native: {\n openai: {\n type: \"image_generation\",\n action: options.action,\n background: options.background,\n input_fidelity: options.inputFidelity,\n output_compression: options.outputCompression,\n output_format: options.outputFormat,\n partial_images: options.partialImages,\n quality: options.quality,\n size: options.size,\n },\n },\n })\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL?: string\n readonly organization?: string\n readonly project?: string\n readonly queryParams?: Readonly<Record<string, string>>\n readonly transport?: \"http\" | \"websocket\"\n readonly providerOptions?: OpenAIProviderOptionsInput\n}\n\nconst auth = (options: ProviderAuthOption<\"optional\">) => AuthOptions.bearer(options, \"OPENAI_API_KEY\")\n\nconst defaults = (input: Config) => {\n const { apiKey: _, auth: _auth, baseURL: _baseURL, queryParams: _queryParams, ...rest } = input\n return rest\n}\n\nconst configuredRoute = <Body, Prepared>(route: Route<Body, Prepared>, input: Config) =>\n route.with({\n auth: auth(input),\n endpoint: { baseURL: input.baseURL, query: input.queryParams },\n })\n\nexport const configure = (input: Config = {}) => {\n const responsesRoute = configuredRoute(OpenAIResponses.route, input)\n const responsesWebSocketRoute = configuredRoute(OpenAIResponses.webSocketRoute, input)\n const chatRoute = configuredRoute(OpenAIChat.route, input)\n const modelDefaults = defaults(input)\n const responses = (id: string | ModelID) =>\n responsesRoute\n .with(withOpenAIOptions(id, modelDefaults, { textVerbosity: true }))\n .model<OpenAIProviderOptionsInput>({ id })\n const responsesWebSocket = (id: string | ModelID) =>\n responsesWebSocketRoute\n .with(withOpenAIOptions(id, modelDefaults, { textVerbosity: true }))\n .model<OpenAIProviderOptionsInput>({ id })\n const chat = (id: string | ModelID) =>\n chatRoute.with(withOpenAIOptions(id, modelDefaults)).model<OpenAIProviderOptionsInput>({ id })\n const image = (modelID: string | ModelID) =>\n OpenAIImages.model({\n id: modelID,\n auth: auth(input),\n baseURL: input.baseURL,\n headers: input.headers,\n http: mergeHttpOptions(\n input.http === undefined ? undefined : HttpOptions.make(input.http),\n input.queryParams === undefined ? undefined : new HttpOptions({ query: input.queryParams }),\n ),\n })\n\n return {\n id,\n model: responses,\n responses,\n responsesWebSocket,\n chat,\n image,\n configure,\n }\n}\n\nexport const provider = configure()\n\nconst config = (settings: Settings): Config => {\n const headers = {\n ...(settings.organization === undefined ? {} : { \"OpenAI-Organization\": settings.organization }),\n ...(settings.project === undefined ? {} : { \"OpenAI-Project\": settings.project }),\n ...settings.headers,\n }\n return {\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: Object.keys(headers).length === 0 ? undefined : headers,\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n providerOptions: settings.providerOptions,\n queryParams: settings.queryParams === undefined ? undefined : { ...settings.queryParams },\n }\n}\n\nexport const model: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (modelID, settings) => {\n const configured = configure(config(settings))\n if (settings.transport === undefined || settings.transport === \"http\") return configured.responses(modelID)\n if (settings.transport === \"websocket\") return configured.responsesWebSocket(modelID)\n throw new Error(`Unsupported OpenAI Responses transport: ${String(settings.transport)}`)\n}\n\nexport const chatModel: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (\n modelID,\n settings,\n) => configure(config(settings)).chat(modelID)\nexport const responses = provider.responses\nexport const responsesWebSocket = provider.responsesWebSocket\nexport const chat = provider.chat\nexport const image = provider.image\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "D45855893E34270164756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/ai-gateway-provider@3.1.2+a6631614dda8d488/node_modules/ai-gateway-provider/dist/providers/unified.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/providers/unified.ts\nimport { createOpenAICompatible } from \"@ai-sdk/openai-compatible\";\nvar createUnified = (arg) => {\n return createOpenAICompatible({\n baseURL: \"https://gateway.ai.cloudflare.com/v1/compat\",\n // intercepted and replaced with actual base URL later\n name: \"Unified\",\n ...arg || {}\n });\n};\nvar unified = createUnified();\nexport {\n createUnified,\n unified\n};\n//# sourceMappingURL=unified.mjs.map" | ||
| ], | ||
| "mappings": ";kSAEA,SAAI,OAAgB,MAAC,SAAQ,MAC3B,YAAO,OAAuB,CAC5B,QAAS,8CAET,KAAM,aACH,GAAO,CAAC,CACb,CAAC,GAEC,EAAU,EAAc", | ||
| "debugId": "363B5338273CE39364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/prompt/parse.ts"], | ||
| "sourcesContent": [ | ||
| "export function parseFileLineRange(input: string) {\n const hash = input.lastIndexOf(\"#\")\n if (hash === -1) return { base: input }\n\n const base = input.slice(0, hash)\n const match = input.slice(hash + 1).match(/^(\\d+)(?:-(\\d*))?$/)\n if (!match) return { base }\n\n const startLine = Number(match[1])\n const endLine = match[2] && startLine < Number(match[2]) ? Number(match[2]) : undefined\n return { base, lineRange: { startLine, endLine } }\n}\n\nexport function stripFileLineRange(input: string) {\n return parseFileLineRange(input).base\n}\n\nexport function parseSlashHead(text: string, separator = /[ \\t\\n]/) {\n if (!text.startsWith(\"/\")) return\n\n const end = text.slice(1).search(separator)\n if (end === -1) return { name: text.slice(1), arguments: \"\", end: text.length }\n\n const split = end + 1\n return { name: text.slice(1, split), arguments: text.slice(split + 1), end: split }\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,SAAS,CAAkB,CAAC,EAAe,CAChD,IAAM,EAAO,EAAM,YAAY,GAAG,EAClC,GAAI,IAAS,GAAI,MAAO,CAAE,KAAM,CAAM,EAEtC,IAAM,EAAO,EAAM,MAAM,EAAG,CAAI,EAC1B,EAAQ,EAAM,MAAM,EAAO,CAAC,EAAE,MAAM,oBAAoB,EAC9D,GAAI,CAAC,EAAO,MAAO,CAAE,MAAK,EAE1B,IAAM,EAAY,OAAO,EAAM,EAAE,EAC3B,EAAU,EAAM,IAAM,EAAY,OAAO,EAAM,EAAE,EAAI,OAAO,EAAM,EAAE,EAAI,OAC9E,MAAO,CAAE,OAAM,UAAW,CAAE,YAAW,SAAQ,CAAE,EAG5C,SAAS,CAAkB,CAAC,EAAe,CAChD,OAAO,EAAmB,CAAK,EAAE,KAG5B,SAAS,CAAc,CAAC,EAAc,EAAY,UAAW,CAClE,GAAI,CAAC,EAAK,WAAW,GAAG,EAAG,OAE3B,IAAM,EAAM,EAAK,MAAM,CAAC,EAAE,OAAO,CAAS,EAC1C,GAAI,IAAQ,GAAI,MAAO,CAAE,KAAM,EAAK,MAAM,CAAC,EAAG,UAAW,GAAI,IAAK,EAAK,MAAO,EAE9E,IAAM,EAAQ,EAAM,EACpB,MAAO,CAAE,KAAM,EAAK,MAAM,EAAG,CAAK,EAAG,UAAW,EAAK,MAAM,EAAQ,CAAC,EAAG,IAAK,CAAM", | ||
| "debugId": "F3AD533C38056B6A64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mini.ts"], | ||
| "sourcesContent": [ | ||
| "import { Context, Effect, FileSystem, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServerConnection } from \"../../services/server-connection\"\nimport { Config } from \"../../config\"\nimport { resolve } from \"@opencode-ai/tui/config\"\n\nexport default Runtime.handler(Commands.commands.mini, (input) =>\n Effect.gen(function* () {\n const { runMini, validateMiniTerminal } = yield* Effect.promise(() => import(\"../../mini\"))\n yield* Effect.promise(async () => validateMiniTerminal())\n const serverURL = Option.getOrUndefined(input.server)\n const server = yield* ServerConnection.resolve({ server: serverURL, standalone: input.standalone })\n const config = yield* Config.Service\n const resolved = resolve(yield* config.get(), { terminalSuspend: process.platform !== \"win32\" })\n const fileSystem = yield* FileSystem.FileSystem\n const runServicePromise = Effect.runPromiseWith(Context.make(FileSystem.FileSystem, fileSystem))\n const service = server.service\n yield* Effect.promise(() =>\n runMini({\n server: {\n endpoint: server.endpoint,\n reconnect: service ? (signal) => runServicePromise(service.reconnect(), { signal }) : undefined,\n },\n continue: input.continue,\n session: Option.getOrUndefined(input.session),\n fork: input.fork,\n model: Option.getOrUndefined(input.model),\n agent: Option.getOrUndefined(input.agent),\n prompt: Option.getOrUndefined(input.prompt),\n replay: Option.getOrUndefined(input.replay) ?? resolved.mini?.replay ?? true,\n replayLimit: Option.getOrUndefined(input.replayLimit) ?? resolved.mini?.replay_limit,\n demo: input.demo,\n tuiConfig: resolved,\n config: {\n update: (update) => runServicePromise(config.update(update)),\n },\n }),\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";ogCAOA,SAAe,SAAQ,aAAQ,OAAS,cAAS,UAAM,MAAC,SACtD,OAAO,SAAI,cAAU,OAAG,MACtB,SAAQ,eAAS,6BAAyB,WAAO,OAAO,aAAQ,SAAa,wCAAa,OAC1F,WAAO,OAAO,aAAQ,cAAY,OAAqB,CAAC,EACxD,IAAM,EAAY,EAAO,eAAe,EAAM,MAAM,EAC9C,EAAS,MAAO,EAAiB,QAAQ,CAAE,OAAQ,EAAW,WAAY,EAAM,UAAW,CAAC,EAC5F,EAAS,MAAO,EAAO,QACvB,EAAW,EAAQ,MAAO,EAAO,IAAI,EAAG,CAAE,gBAAiB,EAA6B,CAAC,EACzF,EAAa,MAAO,EAAW,WAC/B,EAAoB,EAAO,eAAe,EAAQ,KAAK,EAAW,WAAY,CAAU,CAAC,EACzF,EAAU,EAAO,QACvB,MAAO,EAAO,QAAQ,IACpB,EAAQ,CACN,OAAQ,CACN,SAAU,EAAO,SACjB,UAAW,EAAU,CAAC,IAAW,EAAkB,EAAQ,UAAU,EAAG,CAAE,QAAO,CAAC,EAAI,MACxF,EACA,SAAU,EAAM,SAChB,QAAS,EAAO,eAAe,EAAM,OAAO,EAC5C,KAAM,EAAM,KACZ,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,MAAO,EAAO,eAAe,EAAM,KAAK,EACxC,OAAQ,EAAO,eAAe,EAAM,MAAM,EAC1C,OAAQ,EAAO,eAAe,EAAM,MAAM,GAAK,EAAS,MAAM,QAAU,GACxE,YAAa,EAAO,eAAe,EAAM,WAAW,GAAK,EAAS,MAAM,aACxE,KAAM,EAAM,KACZ,UAAW,EACX,OAAQ,CACN,OAAQ,CAAC,IAAW,EAAkB,EAAO,OAAO,CAAM,CAAC,CAC7D,CACF,CAAC,CACH,EACD,CACH", | ||
| "debugId": "EDD4B8518F7D63FE64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/openai-compatible-chat.ts"], | ||
| "sourcesContent": [ | ||
| "import { Route, type RouteRoutedModelInput } from \"../route/client\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { Framing } from \"../route/framing\"\nimport * as OpenAIChat from \"./openai-chat\"\n\nconst ADAPTER = \"openai-compatible-chat\"\n\nexport type OpenAICompatibleChatModelInput = RouteRoutedModelInput\n\n/**\n * Route for non-OpenAI providers that expose an OpenAI Chat-compatible\n * `/chat/completions` endpoint. Reuses `OpenAIChat.protocol` end-to-end and\n * overrides only the route id so providers can be resolved per-family without\n * colliding with native OpenAI. Provider helpers configure the route endpoint\n * before model selection.\n */\nexport const route = Route.make({\n id: ADAPTER,\n providerMetadataKey: \"openai\",\n protocol: OpenAIChat.protocol,\n endpoint: Endpoint.path(\"/chat/completions\"),\n framing: Framing.sse,\n})\n\nexport * as OpenAICompatibleChat from \"./openai-compatible-chat\"\n" | ||
| ], | ||
| "mappings": ";mHAKA,SAAM,EAAU,yBAWH,EAAQ,EAAM,KAAK,CAC9B,GAAI,EACJ,oBAAqB,SACrB,SAAqB,EACrB,SAAU,EAAS,KAAK,mBAAmB,EAC3C,QAAS,EAAQ,GACnB,CAAC", | ||
| "debugId": "2BA607588522735C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/openai-options.ts"], | ||
| "sourcesContent": [ | ||
| "import type { ProviderOptions } from \"../schema\"\nimport { mergeProviderOptions } from \"../schema\"\nimport type { OpenResponsesOptionsInput } from \"./open-responses-options\"\n\nexport type { OpenAIResponseIncludable, OpenAIServiceTier } from \"../protocols/utils/openai-options\"\n\nexport type OpenAIOptionsInput = OpenResponsesOptionsInput\n\nexport type OpenAIProviderOptionsInput = ProviderOptions & {\n readonly openai?: OpenAIOptionsInput\n}\n\nconst definedEntries = (input: Record<string, unknown>) =>\n Object.entries(input).filter((entry) => entry[1] !== undefined)\n\nconst openAIProviderOptions = (options: OpenAIOptionsInput | undefined): ProviderOptions | undefined => {\n const openai = Object.fromEntries(\n definedEntries({\n store: options?.store,\n promptCacheKey: options?.promptCacheKey,\n reasoningEffort: options?.reasoningEffort,\n reasoningSummary: options?.reasoningSummary,\n include: options?.include,\n textVerbosity: options?.textVerbosity,\n serviceTier: options?.serviceTier,\n }),\n )\n if (Object.keys(openai).length === 0) return undefined\n return { openai }\n}\n\nexport const gpt5DefaultOptions = (\n modelID: string,\n options: { readonly textVerbosity?: boolean } = {},\n): ProviderOptions | undefined => {\n const id = modelID.toLowerCase()\n if (!id.includes(\"gpt-5\") || id.includes(\"gpt-5-chat\") || id.includes(\"gpt-5-pro\")) return undefined\n return openAIProviderOptions({\n reasoningEffort: \"medium\",\n reasoningSummary: \"auto\",\n // GPT-5 reasoning models are configured stateless (`store: false`) by\n // `openAIDefaultOptions` below, so the only way a follow-up turn can\n // carry reasoning state is via the encrypted reasoning include. Without\n // this, callers using the default model facade get reasoning summaries\n // they cannot replay statelessly.\n include: [\"reasoning.encrypted_content\"],\n textVerbosity:\n options.textVerbosity === true && id.includes(\"gpt-5.\") && !id.includes(\"codex\") && !id.includes(\"-chat\")\n ? \"low\"\n : undefined,\n })\n}\n\nexport const openAIDefaultOptions = (\n modelID: string,\n options: { readonly textVerbosity?: boolean } = {},\n): ProviderOptions | undefined =>\n mergeProviderOptions(openAIProviderOptions({ store: false }), gpt5DefaultOptions(modelID, options))\n\nexport const withOpenAIOptions = <Options extends { readonly providerOptions?: OpenAIProviderOptionsInput }>(\n modelID: string,\n options: Options,\n defaults: { readonly textVerbosity?: boolean } = {},\n): Omit<Options, \"providerOptions\"> & { readonly providerOptions?: ProviderOptions } => {\n return {\n ...options,\n providerOptions: mergeProviderOptions(openAIDefaultOptions(modelID, defaults), options.providerOptions),\n }\n}\n\nexport * as OpenAIProviderOptions from \"./openai-options\"\n" | ||
| ], | ||
| "mappings": ";oDAYA,IAAM,EAAiB,CAAC,IACtB,OAAO,QAAQ,CAAK,EAAE,OAAO,CAAC,IAAU,EAAM,KAAO,MAAS,EAE1D,EAAwB,CAAC,IAAyE,CACtG,IAAM,EAAS,OAAO,YACpB,EAAe,CACb,MAAO,GAAS,MAChB,eAAgB,GAAS,eACzB,gBAAiB,GAAS,gBAC1B,iBAAkB,GAAS,iBAC3B,QAAS,GAAS,QAClB,cAAe,GAAS,cACxB,YAAa,GAAS,WACxB,CAAC,CACH,EACA,GAAI,OAAO,KAAK,CAAM,EAAE,SAAW,EAAG,OACtC,MAAO,CAAE,QAAO,GAGL,EAAqB,CAChC,EACA,EAAgD,CAAC,IACjB,CAChC,IAAM,EAAK,EAAQ,YAAY,EAC/B,GAAI,CAAC,EAAG,SAAS,OAAO,GAAK,EAAG,SAAS,YAAY,GAAK,EAAG,SAAS,WAAW,EAAG,OACpF,OAAO,EAAsB,CAC3B,gBAAiB,SACjB,iBAAkB,OAMlB,QAAS,CAAC,6BAA6B,EACvC,cACE,EAAQ,gBAAkB,IAAQ,EAAG,SAAS,QAAQ,GAAK,CAAC,EAAG,SAAS,OAAO,GAAK,CAAC,EAAG,SAAS,OAAO,EACpG,MACA,MACR,CAAC,GAGU,EAAuB,CAClC,EACA,EAAgD,CAAC,IAEjD,EAAqB,EAAsB,CAAE,MAAO,EAAM,CAAC,EAAG,EAAmB,EAAS,CAAO,CAAC,EAEvF,EAAoB,CAC/B,EACA,EACA,EAAiD,CAAC,IACoC,CACtF,MAAO,IACF,EACH,gBAAiB,EAAqB,EAAqB,EAAS,CAAQ,EAAG,EAAQ,eAAe,CACxG", | ||
| "debugId": "488A8877107285C964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "27E068782867374A64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/utils/tool-stream.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { LLMError, LLMEvent, type ProviderMetadata, type ToolCall, type ToolInputError } from \"../../schema\"\nimport { eventError, parseToolInput, type ToolAccumulator } from \"../shared\"\n\ntype StreamKey = string | number\n\n/**\n * One pending streamed tool call. Providers emit the tool identity and JSON\n * argument text across separate chunks; `input` is the raw JSON string collected\n * so far, not the parsed object.\n */\nexport interface PendingTool extends ToolAccumulator {\n readonly providerExecuted?: boolean\n readonly providerMetadata?: ProviderMetadata\n}\n\n/**\n * Sparse parser state keyed by the provider's stream-local tool identifier.\n *\n * This key is not the final tool-call id (`call_...`). It is the id/index the\n * provider uses while streaming a partial call: OpenAI Chat / Anthropic /\n * Bedrock use numeric content indexes, while OpenAI Responses uses string\n * `item_id`s. The generic keeps each protocol internally consistent.\n */\nexport type State<K extends StreamKey> = Partial<Record<K, PendingTool>>\n\n/**\n * Result of adding argument text to one pending tool call. It returns both the\n * next `tools` state and the updated `tool` because parsers often need the\n * current id/name immediately. `events` contains lifecycle and delta events\n * produced by the append; metadata-only deltas update identity without output.\n */\nexport interface AppendOutcome<K extends StreamKey> {\n readonly tools: State<K>\n readonly tool: PendingTool\n readonly events: ReadonlyArray<LLMEvent>\n}\n\n/** Create empty accumulator state for one provider stream. */\nexport const empty = <K extends StreamKey>(): State<K> => ({})\n\nconst withTool = <K extends StreamKey>(tools: State<K>, key: K, tool: PendingTool): State<K> => {\n return { ...tools, [key]: tool }\n}\n\nconst withoutTool = <K extends StreamKey>(tools: State<K>, key: K): State<K> => {\n const next = { ...tools }\n delete next[key]\n return next\n}\n\nconst inputStart = (tool: PendingTool) =>\n LLMEvent.toolInputStart({\n id: tool.id,\n name: tool.name,\n providerExecuted: tool.providerExecuted ? true : undefined,\n providerMetadata: tool.providerMetadata,\n })\n\nconst inputDelta = (tool: PendingTool, text: string) =>\n LLMEvent.toolInputDelta({\n id: tool.id,\n name: tool.name,\n text,\n })\n\nconst toolCall = (route: string, tool: PendingTool, inputOverride?: string) => {\n const raw = inputOverride ?? tool.input\n return parseToolInput(route, tool.name, raw).pipe(\n Effect.map((input): ToolCall | ToolInputError =>\n LLMEvent.toolCall({\n id: tool.id,\n name: tool.name,\n input,\n providerExecuted: tool.providerExecuted ? true : undefined,\n providerMetadata: tool.providerMetadata,\n }),\n ),\n Effect.catch((error) =>\n tool.providerExecuted\n ? Effect.fail(error)\n : Effect.succeed(\n LLMEvent.toolInputError({\n id: tool.id,\n name: tool.name,\n raw,\n }),\n ),\n ),\n )\n}\n\nconst finishEvents = (tool: PendingTool, event: ToolCall | ToolInputError): ReadonlyArray<LLMEvent> =>\n event.type === \"tool-input-error\"\n ? [event]\n : [LLMEvent.toolInputEnd({ id: tool.id, name: tool.name, providerMetadata: tool.providerMetadata }), event]\n\n/** Store the updated tool and produce the optional public delta event. */\nconst appendTool = <K extends StreamKey>(\n tools: State<K>,\n key: K,\n tool: PendingTool,\n text: string,\n): AppendOutcome<K> => {\n const events: LLMEvent[] = []\n if (!tools[key]) events.push(inputStart(tool))\n if (text.length > 0) events.push(inputDelta(tool, text))\n return {\n tools: withTool(tools, key, tool),\n tool,\n events,\n }\n}\n\nexport const isError = <K extends StreamKey>(result: AppendOutcome<K> | LLMError): result is LLMError =>\n result instanceof LLMError\n\n/**\n * Register a tool call whose start event arrived before any argument deltas.\n * Used by Anthropic `content_block_start`, Bedrock `contentBlockStart`, and\n * OpenAI Responses `response.output_item.added`.\n */\nexport const start = <K extends StreamKey>(\n tools: State<K>,\n key: K,\n tool: Omit<PendingTool, \"input\"> & { readonly input?: string },\n) => withTool(tools, key, { ...tool, input: tool.input ?? \"\" })\n\n/**\n * Append a streamed argument delta, starting the tool if this provider encodes\n * identity on the first delta instead of a separate start event. OpenAI Chat has\n * this shape: `tool_calls[].index` is the stream key, and `id` / `name` may only\n * appear on the first delta for that index.\n */\nexport const appendOrStart = <K extends StreamKey>(\n route: string,\n tools: State<K>,\n key: K,\n delta: { readonly id?: string; readonly name?: string; readonly text: string },\n missingToolMessage: string,\n): AppendOutcome<K> | LLMError => {\n const current = tools[key]\n const id = current?.id ?? delta.id\n const name = current?.name ?? delta.name\n if (!id || !name) return eventError(route, missingToolMessage)\n\n const tool = {\n id,\n name,\n input: `${current?.input ?? \"\"}${delta.text}`,\n providerExecuted: current?.providerExecuted,\n providerMetadata: current?.providerMetadata,\n }\n if (current && delta.text.length === 0 && current.id === id && current.name === name)\n return { tools, tool: current, events: [] }\n return appendTool(tools, key, tool, delta.text)\n}\n\n/**\n * Append argument text to a tool that must already have been started. This keeps\n * protocols honest when their stream grammar promises a start event before any\n * argument delta.\n */\nexport const appendExisting = <K extends StreamKey>(\n route: string,\n tools: State<K>,\n key: K,\n text: string,\n missingToolMessage: string,\n): AppendOutcome<K> | LLMError => {\n const current = tools[key]\n if (!current) return eventError(route, missingToolMessage)\n if (text.length === 0) return { tools, tool: current, events: [] }\n return appendTool(tools, key, { ...current, input: `${current.input}${text}` }, text)\n}\n\n/**\n * Finalize one pending tool call: parse the accumulated raw JSON, remove it\n * from state, and return either a call or a non-executable local input error.\n * Missing keys are a no-op because some providers emit stop events for\n * non-tool content blocks.\n */\nexport const finish = <K extends StreamKey>(route: string, tools: State<K>, key: K) =>\n Effect.gen(function* () {\n const tool = tools[key]\n if (!tool) return { tools }\n return {\n tools: withoutTool(tools, key),\n events: finishEvents(tool, yield* toolCall(route, tool)),\n }\n })\n\n/**\n * Finalize one pending tool call with an authoritative final input string.\n * OpenAI Responses can send accumulated deltas and then repeat the completed\n * arguments on `response.output_item.done`; the final value wins.\n */\nexport const finishWithInput = <K extends StreamKey>(route: string, tools: State<K>, key: K, input: string) =>\n Effect.gen(function* () {\n const tool = tools[key]\n if (!tool) return { tools }\n return {\n tools: withoutTool(tools, key),\n events: finishEvents(tool, yield* toolCall(route, tool, input)),\n }\n })\n\n/**\n * Finalize every pending tool call at once. OpenAI Chat has this shape: it does\n * not emit per-tool stop events, so all accumulated calls finish independently\n * when the choice receives a terminal `finish_reason`.\n */\nexport const finishAll = <K extends StreamKey>(route: string, tools: State<K>) =>\n Effect.gen(function* () {\n const pending = Object.values<PendingTool | undefined>(tools).filter(\n (tool): tool is PendingTool => tool !== undefined,\n )\n return {\n tools: empty<K>(),\n events: yield* Effect.forEach(pending, (tool) =>\n toolCall(route, tool).pipe(Effect.map((event) => finishEvents(tool, event))),\n ).pipe(Effect.map((events) => events.flat())),\n }\n })\n\nexport * as ToolStream from \"./tool-stream\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "CC54CB8843855D8464756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../schema/src/tool.ts", "../schema/src/llm.ts"], | ||
| "sourcesContent": [ | ||
| "export * as Tool from \"./tool.js\"\n\nimport { Effect, JsonSchema, Schema } from \"effect\"\nimport type { StandardJSONSchemaV1, StandardSchemaV1 } from \"@standard-schema/spec\"\nimport type { Agent } from \"./agent.js\"\nimport type { Session } from \"./session.js\"\nimport type { SessionMessage } from \"./session-message.js\"\n\nexport type Metadata = Readonly<Record<string, any>>\n\nexport const CallID = Schema.String.pipe(Schema.brand(\"Tool.CallID\"))\nexport type CallID = typeof CallID.Type\n\nexport interface Context {\n readonly sessionID: Session.ID\n readonly agent: Agent.ID\n readonly messageID: SessionMessage.ID\n readonly callID: CallID\n readonly progress: (update: Metadata) => Effect.Effect<void>\n}\n\ninterface BaseOptions {\n readonly namespace?: string\n readonly permission?: string\n}\n\nexport type Options = BaseOptions &\n (\n | {\n readonly codemode?: true\n readonly pinned?: boolean\n }\n | {\n readonly codemode: boolean\n readonly pinned?: never\n }\n )\n\nexport type ValueSchema<A = unknown> =\n | Schema.Codec<A, any>\n | (StandardSchemaV1<any, A> & StandardJSONSchemaV1<any, A>)\n | JsonSchema.JsonSchema\n\ntype InputValue<S> = 0 extends 1 & S\n ? any\n : S extends Schema.Codec<infer A, any>\n ? A\n : S extends StandardSchemaV1<any, infer A>\n ? A\n : unknown\ntype OutputValue<S> = S extends undefined\n ? never\n : S extends Schema.Codec<infer A, any>\n ? A\n : S extends StandardSchemaV1<infer A, any>\n ? A\n : any\n\nexport class Error extends Schema.TaggedErrorClass<Error>()(\"Tool.Error\", {\n message: Schema.String,\n error: Schema.optional(Schema.Defect()),\n metadata: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n}) {}\n\nexport interface TextContent extends Schema.Schema.Type<typeof TextContent> {}\nexport const TextContent = Schema.Struct({\n type: Schema.Literal(\"text\"),\n text: Schema.String,\n}).annotate({ identifier: \"Tool.TextContent\" })\n\nexport interface FileContent extends Schema.Schema.Type<typeof FileContent> {}\nexport const FileContent = Schema.Struct({\n type: Schema.Literal(\"file\"),\n uri: Schema.String,\n mime: Schema.String,\n name: Schema.optional(Schema.String),\n}).annotate({ identifier: \"Tool.FileContent\" })\n\nexport const Content = Schema.Union([TextContent, FileContent])\n .pipe(Schema.toTaggedUnion(\"type\"))\n .annotate({ identifier: \"Tool.Content\" })\nexport type Content = Schema.Schema.Type<typeof Content>\n\nexport interface Result<Output extends ValueSchema<any> | undefined = ValueSchema<any> | undefined> {\n readonly output?: OutputValue<Output>\n readonly content?: string | ReadonlyArray<Content>\n readonly metadata?: Metadata\n}\n\nexport type Info<\n Input extends ValueSchema<any> = ValueSchema<any>,\n Output extends ValueSchema<any> | undefined = ValueSchema<any> | undefined,\n> = {\n readonly name: string\n readonly input: Input\n readonly description: string\n readonly execute: (input: InputValue<Input>, context: Context) => Effect.Effect<Result<Output>, Error>\n readonly output?: Output\n readonly options?: Options\n}\n", | ||
| "export * as LLM from \"./llm.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\n\nexport const ProviderMetadata = Schema.Record(Schema.String, Schema.Record(Schema.String, Schema.Unknown)).annotate({\n identifier: \"LLM.ProviderMetadata\",\n})\nexport type ProviderMetadata = Schema.Schema.Type<typeof ProviderMetadata>\n\nexport const FinishReason = Schema.Literals([\"stop\", \"length\", \"tool-calls\", \"content-filter\", \"error\", \"unknown\"])\nexport type FinishReason = typeof FinishReason.Type\n" | ||
| ], | ||
| "mappings": ";yMAUO,SAAM,EAAS,EAAO,OAAO,KAAK,EAAO,MAAM,aAAa,CAAC,EAgD7D,MAAM,UAAc,EAAO,iBAAwB,EAAE,aAAc,CACxE,QAAS,EAAO,OAChB,MAAO,EAAO,SAAS,EAAO,OAAO,CAAC,EACtC,SAAU,EAAO,SAAS,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,CACxE,CAAC,CAAE,CAAC,CAGG,IAAM,EAAc,EAAO,OAAO,CACvC,KAAM,EAAO,QAAQ,MAAM,EAC3B,KAAM,EAAO,MACf,CAAC,EAAE,SAAS,CAAE,WAAY,kBAAmB,CAAC,EAGjC,EAAc,EAAO,OAAO,CACvC,KAAM,EAAO,QAAQ,MAAM,EAC3B,IAAK,EAAO,OACZ,KAAM,EAAO,OACb,KAAM,EAAO,SAAS,EAAO,MAAM,CACrC,CAAC,EAAE,SAAS,CAAE,WAAY,kBAAmB,CAAC,EAEjC,EAAU,EAAO,MAAM,CAAC,EAAa,CAAW,CAAC,EAC3D,KAAK,EAAO,cAAc,MAAM,CAAC,EACjC,SAAS,CAAE,WAAY,cAAe,CAAC,sEC3EnC,IAAM,EAAmB,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,EAAE,SAAS,CAClH,WAAY,sBACd,CAAC,EAGY,EAAe,EAAO,SAAS,CAAC,OAAQ,SAAU,aAAc,iBAAkB,QAAS,SAAS,CAAC", | ||
| "debugId": "5825BF6D35A6DCE564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/image-client.ts", "../ai/src/image.ts"], | ||
| "sourcesContent": [ | ||
| "import { Context, Effect, Layer } from \"effect\"\nimport { RequestExecutor } from \"./route/executor\"\nimport type { ImageOptions, ImageRequest, ImageRequestFor, ImageResponse } from \"./image\"\nimport type { LLMError } from \"./schema\"\n\nexport type Execute = RequestExecutor.Interface[\"execute\"]\n\nexport interface Interface {\n readonly generate: <Options extends ImageOptions>(\n request: ImageRequestFor<Options>,\n ) => Effect.Effect<ImageResponse, LLMError>\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@opencode/ImageClient\") {}\n\nexport const generate = <Options extends ImageOptions>(\n request: ImageRequestFor<Options>,\n): Effect.Effect<ImageResponse, LLMError> =>\n Effect.gen(function* () {\n const client = yield* Service\n return yield* client.generate(request)\n }) as Effect.Effect<ImageResponse, LLMError>\n\nexport const layer: Layer.Layer<Service, never, RequestExecutor.Service> = Layer.effect(\n Service,\n Effect.gen(function* () {\n const executor = yield* RequestExecutor.Service\n return Service.of({\n generate: (request) => request.model.route.generate(request, executor.execute),\n })\n }),\n)\n\nexport const ImageClient = {\n Service,\n layer,\n generate,\n} as const\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport { HttpOptions, InvalidRequestReason, LLMError, ModelID, ProviderID, ProviderMetadata, Usage } from \"./schema\"\nimport { ImageClient, Service, type Execute as ImageExecute } from \"./image-client\"\n\nexport interface ImageRoute<Options extends ImageOptions = ImageOptions> {\n readonly id: string\n readonly generate: (\n request: ImageRequestFor<Options>,\n execute: ImageExecute,\n ) => Effect.Effect<ImageResponse, LLMError>\n}\n\nexport type ImageOptions = Record<string, unknown>\n\nexport class ImageModel<Options extends ImageOptions = ImageOptions> {\n declare protected readonly _Options: (options: Options) => Options\n readonly id: ModelID\n readonly provider: ProviderID\n readonly route: ImageRoute<Options>\n readonly http?: HttpOptions\n\n constructor(input: ImageModel.Input<Options>) {\n this.id = input.id\n this.provider = input.provider\n this.route = input.route\n this.http = input.http\n }\n\n static make<Options extends ImageOptions = ImageOptions>(input: ImageModel.MakeInput<Options>) {\n return new ImageModel<Options>({\n id: ModelID.make(input.id),\n provider: ProviderID.make(input.provider),\n route: input.route,\n http: input.http,\n })\n }\n}\n\nexport namespace ImageModel {\n export interface Input<Options extends ImageOptions = ImageOptions> {\n readonly id: ModelID\n readonly provider: ProviderID\n readonly route: ImageRoute<Options>\n readonly http?: HttpOptions\n }\n\n export interface MakeInput<Options extends ImageOptions = ImageOptions>\n extends Omit<Input<Options>, \"id\" | \"provider\"> {\n readonly id: string | ModelID\n readonly provider: string | ProviderID\n }\n}\n\nexport const ImageModelSchema = Schema.declare((value): value is ImageModel => value instanceof ImageModel, {\n expected: \"Image.Model\",\n})\n\nconst ImageBytesInput = Schema.Struct({\n type: Schema.Literal(\"bytes\"),\n data: Schema.Uint8Array,\n mediaType: Schema.String,\n})\nconst ImageUrlInput = Schema.Struct({\n type: Schema.Literal(\"url\"),\n url: Schema.String,\n})\nconst ImageFileIDInput = Schema.Struct({\n type: Schema.Literal(\"file-id\"),\n id: Schema.String,\n})\nconst ImageFileURIInput = Schema.Struct({\n type: Schema.Literal(\"file-uri\"),\n uri: Schema.String,\n mediaType: Schema.String,\n})\n\nexport const ImageInputSchema = Schema.Union([\n ImageBytesInput,\n ImageUrlInput,\n ImageFileIDInput,\n ImageFileURIInput,\n]).pipe(Schema.toTaggedUnion(\"type\"))\nexport type ImageInput = Schema.Schema.Type<typeof ImageInputSchema>\n\nexport const ImageInput = {\n bytes: (data: Uint8Array, mediaType: string): ImageInput => ({ type: \"bytes\", data, mediaType }),\n url: (url: string): ImageInput => ({ type: \"url\", url }),\n file: (id: string): ImageInput => ({ type: \"file-id\", id }),\n fileUri: (uri: string, mediaType: string): ImageInput => ({ type: \"file-uri\", uri, mediaType }),\n} as const\n\nexport class ImageRequest extends Schema.Class<ImageRequest>(\"Image.Request\")({\n model: ImageModelSchema,\n prompt: Schema.String,\n images: Schema.optional(Schema.Array(ImageInputSchema)),\n options: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),\n http: Schema.optional(HttpOptions),\n}) {\n declare protected readonly _ImageRequest: void\n}\n\nexport type ImageRequestFor<Options extends ImageOptions = ImageOptions> = Omit<ImageRequest, \"model\" | \"options\"> & {\n readonly model: ImageModel<Options>\n readonly options?: Options\n}\n\nexport type ImageModelOptions<Model> = Model extends ImageModel<infer Options> ? Options : never\n\nexport type ImageRequestInput<Model extends object = ImageModel> = Omit<\n ConstructorParameters<typeof ImageRequest>[0],\n \"model\" | \"options\" | \"http\"\n> & {\n readonly model: Model\n readonly options?: NoInfer<ImageModelOptions<Model>>\n readonly http?: HttpOptions.Input\n} & (Model extends ImageModel<ImageModelOptions<Model>> ? unknown : never)\n\nexport class GeneratedImage extends Schema.Class<GeneratedImage>(\"Image.Generated\")({\n mediaType: Schema.String,\n data: Schema.Union([Schema.String, Schema.Uint8Array]),\n providerMetadata: Schema.optional(ProviderMetadata),\n}) {}\n\nexport class ImageResponse extends Schema.Class<ImageResponse>(\"Image.Response\")({\n images: Schema.Array(GeneratedImage),\n usage: Schema.optional(Usage),\n providerMetadata: Schema.optional(ProviderMetadata),\n}) {\n get image() {\n return this.images[0]\n }\n}\n\nexport function request<const Model extends object>(\n input: ImageRequestInput<Model>,\n): ImageRequestFor<ImageModelOptions<Model>>\nexport function request(input: ImageRequest): ImageRequest\nexport function request(input: ImageRequest | ImageRequestInput) {\n if (input instanceof ImageRequest) return input\n return new ImageRequest({\n ...input,\n model: input.model as unknown as ImageModel,\n http: input.http === undefined ? undefined : HttpOptions.make(input.http),\n })\n}\n\nexport function generate<const Model extends object>(\n input: ImageRequestInput<Model>,\n): Effect.Effect<ImageResponse, LLMError, Service>\nexport function generate(input: ImageRequest): Effect.Effect<ImageResponse, LLMError, Service>\nexport function generate(input: ImageRequest | ImageRequestInput) {\n return Effect.try({\n try: () => (input instanceof ImageRequest ? input : request(input)),\n catch: (error) =>\n new LLMError({\n module: \"Image\",\n method: \"generate\",\n reason: new InvalidRequestReason({ message: error instanceof Error ? error.message : String(error) }),\n }),\n }).pipe(Effect.flatMap((request) => ImageClient.generate(request as unknown as ImageRequestFor<ImageOptions>)))\n}\n\nexport const Image = {\n request,\n generate,\n} as const\n" | ||
| ], | ||
| "mappings": ";0MAaO,WAAM,eAAgB,EAAQ,QAA4B,EAAE,uBAAuB,CAAE,CAAC,CAUtF,IAAM,EAA8D,EAAM,OAC/E,EACA,EAAO,IAAI,SAAU,EAAG,CACtB,IAAM,EAAW,MAAO,EAAgB,QACxC,OAAO,EAAQ,GAAG,CAChB,SAAU,CAAC,IAAY,EAAQ,MAAM,MAAM,SAAS,EAAS,EAAS,OAAO,CAC/E,CAAC,EACF,CACH,ECjBO,MAAM,CAAwD,CAE1D,GACA,SACA,MACA,KAET,WAAW,CAAC,EAAkC,CAC5C,KAAK,GAAK,EAAM,GAChB,KAAK,SAAW,EAAM,SACtB,KAAK,MAAQ,EAAM,MACnB,KAAK,KAAO,EAAM,WAGb,KAAiD,CAAC,EAAsC,CAC7F,OAAO,IAAI,EAAoB,CAC7B,GAAI,EAAQ,KAAK,EAAM,EAAE,EACzB,SAAU,EAAW,KAAK,EAAM,QAAQ,EACxC,MAAO,EAAM,MACb,KAAM,EAAM,IACd,CAAC,EAEL,CAiBO,IAAM,EAAmB,EAAO,QAAQ,CAAC,IAA+B,aAAiB,EAAY,CAC1G,SAAU,aACZ,CAAC,EAEK,EAAkB,EAAO,OAAO,CACpC,KAAM,EAAO,QAAQ,OAAO,EAC5B,KAAM,EAAO,WACb,UAAW,EAAO,MACpB,CAAC,EACK,EAAgB,EAAO,OAAO,CAClC,KAAM,EAAO,QAAQ,KAAK,EAC1B,IAAK,EAAO,MACd,CAAC,EACK,EAAmB,EAAO,OAAO,CACrC,KAAM,EAAO,QAAQ,SAAS,EAC9B,GAAI,EAAO,MACb,CAAC,EACK,EAAoB,EAAO,OAAO,CACtC,KAAM,EAAO,QAAQ,UAAU,EAC/B,IAAK,EAAO,OACZ,UAAW,EAAO,MACpB,CAAC,EAEY,EAAmB,EAAO,MAAM,CAC3C,EACA,EACA,EACA,CACF,CAAC,EAAE,KAAK,EAAO,cAAc,MAAM,CAAC,EAU7B,MAAM,UAAqB,EAAO,MAAoB,eAAe,EAAE,CAC5E,MAAO,EACP,OAAQ,EAAO,OACf,OAAQ,EAAO,SAAS,EAAO,MAAM,CAAgB,CAAC,EACtD,QAAS,EAAO,SAAS,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,EACrE,KAAM,EAAO,SAAS,CAAW,CACnC,CAAC,CAAE,CAEH,CAkBO,MAAM,UAAuB,EAAO,MAAsB,iBAAiB,EAAE,CAClF,UAAW,EAAO,OAClB,KAAM,EAAO,MAAM,CAAC,EAAO,OAAQ,EAAO,UAAU,CAAC,EACrD,iBAAkB,EAAO,SAAS,CAAgB,CACpD,CAAC,CAAE,CAAC,CAEG,MAAM,UAAsB,EAAO,MAAqB,gBAAgB,EAAE,CAC/E,OAAQ,EAAO,MAAM,CAAc,EACnC,MAAO,EAAO,SAAS,CAAK,EAC5B,iBAAkB,EAAO,SAAS,CAAgB,CACpD,CAAC,CAAE,IACG,MAAK,EAAG,CACV,OAAO,KAAK,OAAO,GAEvB", | ||
| "debugId": "3EF33A861AB705ED64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/prompt/content.ts"], | ||
| "sourcesContent": [ | ||
| "export function normalizePromptContent(content: string) {\n if (content.endsWith(\"\\r\\n\")) {\n const body = content.slice(0, -2)\n return !body.includes(\"\\n\") && !body.includes(\"\\r\") ? body : content\n }\n\n if (content.endsWith(\"\\n\")) {\n const body = content.slice(0, -1)\n return !body.includes(\"\\n\") && !body.includes(\"\\r\") ? body : content\n }\n\n return content\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,SAAS,CAAsB,CAAC,EAAiB,CACtD,GAAI,EAAQ,SAAS;AAAA,CAAM,EAAG,CAC5B,IAAM,EAAO,EAAQ,MAAM,EAAG,EAAE,EAChC,MAAO,CAAC,EAAK,SAAS;AAAA,CAAI,GAAK,CAAC,EAAK,SAAS,IAAI,EAAI,EAAO,EAG/D,GAAI,EAAQ,SAAS;AAAA,CAAI,EAAG,CAC1B,IAAM,EAAO,EAAQ,MAAM,EAAG,EAAE,EAChC,MAAO,CAAC,EAAK,SAAS;AAAA,CAAI,GAAK,CAAC,EAAK,SAAS,IAAI,EAAI,EAAO,EAG/D,OAAO", | ||
| "debugId": "72D946C215899C3464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+mistral@3.0.51+d6123d32214422cb/node_modules/@ai-sdk/mistral/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/mistral-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/mistral-chat-language-model.ts\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonResponseHandler,\n generateId,\n injectJsonInstructionIntoMessages,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\n\n// src/convert-mistral-usage.ts\nfunction convertMistralUsage(usage) {\n var _a, _b, _c, _d, _e;\n if (usage == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const promptTokens = usage.prompt_tokens;\n const completionTokens = usage.completion_tokens;\n const cacheReadTokens = (_e = (_d = (_b = usage.num_cached_tokens) != null ? _b : (_a = usage.prompt_tokens_details) == null ? void 0 : _a.cached_tokens) != null ? _d : (_c = usage.prompt_token_details) == null ? void 0 : _c.cached_tokens) != null ? _e : 0;\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens - cacheReadTokens,\n cacheRead: cacheReadTokens || void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens,\n reasoning: void 0\n },\n raw: usage\n };\n}\n\n// src/convert-to-mistral-chat-messages.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nimport { convertToBase64 } from \"@ai-sdk/provider-utils\";\nfunction formatFileUrl({\n data,\n mediaType\n}) {\n return data instanceof URL ? data.toString() : `data:${mediaType};base64,${convertToBase64(data)}`;\n}\nfunction convertToMistralChatMessages(prompt) {\n var _a;\n const messages = [];\n for (let i = 0; i < prompt.length; i++) {\n const { role, content } = prompt[i];\n const isLastMessage = i === prompt.length - 1;\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\": {\n messages.push({\n role: \"user\",\n content: content.map((part) => {\n switch (part.type) {\n case \"text\": {\n return { type: \"text\", text: part.text };\n }\n case \"file\": {\n if (part.mediaType.startsWith(\"image/\")) {\n const mediaType = part.mediaType === \"image/*\" ? \"image/jpeg\" : part.mediaType;\n return {\n type: \"image_url\",\n image_url: formatFileUrl({ data: part.data, mediaType })\n };\n } else if (part.mediaType === \"application/pdf\") {\n return {\n type: \"document_url\",\n document_url: formatFileUrl({\n data: part.data,\n mediaType: \"application/pdf\"\n })\n };\n } else {\n throw new UnsupportedFunctionalityError({\n functionality: \"Only images and PDF file parts are supported\"\n });\n }\n }\n }\n })\n });\n break;\n }\n case \"assistant\": {\n let text = \"\";\n const structuredContent = [];\n let hasNativeReasoning = false;\n const toolCalls = [];\n for (const part of content) {\n switch (part.type) {\n case \"text\": {\n text += part.text;\n structuredContent.push({ type: \"text\", text: part.text });\n break;\n }\n case \"tool-call\": {\n toolCalls.push({\n id: part.toolCallId,\n type: \"function\",\n function: {\n name: part.toolName,\n arguments: JSON.stringify(part.input)\n }\n });\n break;\n }\n case \"reasoning\": {\n text += part.text;\n const native = part.providerOptions?.mistral?.thinking;\n if (native?.type === \"thinking\") {\n hasNativeReasoning = true;\n structuredContent.push(native);\n break;\n }\n structuredContent.push({ type: \"text\", text: part.text });\n break;\n }\n default: {\n throw new Error(\n `Unsupported content type in assistant message: ${part.type}`\n );\n }\n }\n }\n messages.push({\n role: \"assistant\",\n content: hasNativeReasoning ? structuredContent : text,\n prefix: isLastMessage ? true : void 0,\n tool_calls: toolCalls.length > 0 ? toolCalls : void 0\n });\n break;\n }\n case \"tool\": {\n for (const toolResponse of content) {\n if (toolResponse.type === \"tool-approval-response\") {\n continue;\n }\n const output = toolResponse.output;\n let contentValue;\n switch (output.type) {\n case \"text\":\n case \"error-text\":\n contentValue = output.value;\n break;\n case \"execution-denied\":\n contentValue = (_a = output.reason) != null ? _a : \"Tool call execution denied.\";\n break;\n case \"content\":\n case \"json\":\n case \"error-json\":\n contentValue = JSON.stringify(output.value);\n break;\n }\n messages.push({\n role: \"tool\",\n name: toolResponse.toolName,\n tool_call_id: toolResponse.toolCallId,\n content: contentValue\n });\n }\n break;\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return messages;\n}\n\n// src/get-response-metadata.ts\nfunction getResponseMetadata({\n id,\n model,\n created\n}) {\n return {\n id: id != null ? id : void 0,\n modelId: model != null ? model : void 0,\n timestamp: created != null ? new Date(created * 1e3) : void 0\n };\n}\n\n// src/map-mistral-finish-reason.ts\nfunction mapMistralFinishReason(finishReason) {\n switch (finishReason) {\n case \"stop\":\n return \"stop\";\n case \"length\":\n case \"model_length\":\n return \"length\";\n case \"tool_calls\":\n return \"tool-calls\";\n default:\n return \"other\";\n }\n}\n\n// src/mistral-chat-options.ts\nimport { z } from \"zod/v4\";\nvar mistralLanguageModelOptions = z.object({\n /**\n * Whether to inject a safety prompt before all conversations.\n *\n * Defaults to `false`.\n */\n safePrompt: z.boolean().optional(),\n documentImageLimit: z.number().optional(),\n documentPageLimit: z.number().optional(),\n /**\n * Whether to use structured outputs.\n *\n * @default true\n */\n structuredOutputs: z.boolean().optional(),\n /**\n * Whether to use strict JSON schema validation.\n *\n * @default false\n */\n strictJsonSchema: z.boolean().optional(),\n /**\n * Whether to enable parallel function calling during tool use.\n * When set to false, the model will use at most one tool per response.\n *\n * @default true\n */\n parallelToolCalls: z.boolean().optional(),\n /**\n * Controls the reasoning effort for models that support adjustable reasoning.\n *\n * - `'high'`: Enable reasoning\n * - `'none'`: Disable reasoning\n */\n reasoningEffort: z.enum([\"high\", \"none\"]).optional(),\n promptCacheKey: z.string().optional()\n});\n\n// src/mistral-error.ts\nimport { createJsonErrorResponseHandler } from \"@ai-sdk/provider-utils\";\nimport { z as z2 } from \"zod/v4\";\nvar mistralErrorDataSchema = z2.object({\n object: z2.literal(\"error\"),\n message: z2.string(),\n type: z2.string(),\n param: z2.string().nullable(),\n code: z2.string().nullable()\n});\nvar mistralFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: mistralErrorDataSchema,\n errorToMessage: (data) => data.message\n});\n\n// src/mistral-prepare-tools.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\nfunction prepareTools({\n tools,\n toolChoice\n}) {\n tools = (tools == null ? void 0 : tools.length) ? tools : void 0;\n const toolWarnings = [];\n if (tools == null) {\n return { tools: void 0, toolChoice: void 0, toolWarnings };\n }\n const mistralTools = [];\n for (const tool of tools) {\n if (tool.type === \"provider\") {\n toolWarnings.push({\n type: \"unsupported\",\n feature: `provider-defined tool ${tool.id}`\n });\n } else {\n mistralTools.push({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: tool.inputSchema,\n ...tool.strict != null ? { strict: tool.strict } : {}\n }\n });\n }\n }\n if (toolChoice == null) {\n return { tools: mistralTools, toolChoice: void 0, toolWarnings };\n }\n const type = toolChoice.type;\n switch (type) {\n case \"auto\":\n case \"none\":\n return { tools: mistralTools, toolChoice: type, toolWarnings };\n case \"required\":\n return { tools: mistralTools, toolChoice: \"any\", toolWarnings };\n // mistral does not support tool mode directly,\n // so we filter the tools and force the tool choice through 'any'\n case \"tool\":\n return {\n tools: mistralTools.filter(\n (tool) => tool.function.name === toolChoice.toolName\n ),\n toolChoice: \"any\",\n toolWarnings\n };\n default: {\n const _exhaustiveCheck = type;\n throw new UnsupportedFunctionalityError2({\n functionality: `tool choice type: ${_exhaustiveCheck}`\n });\n }\n }\n}\n\n// src/mistral-chat-language-model.ts\nvar MistralChatLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.supportedUrls = {\n \"application/pdf\": [/^https:\\/\\/.*$/]\n };\n var _a;\n this.modelId = modelId;\n this.config = config;\n this.generateId = (_a = config.generateId) != null ? _a : generateId;\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions,\n tools,\n toolChoice\n }) {\n var _a, _b, _c, _d;\n const warnings = [];\n const options = (_a = await parseProviderOptions({\n provider: \"mistral\",\n providerOptions,\n schema: mistralLanguageModelOptions\n })) != null ? _a : {};\n if (topK != null) {\n warnings.push({ type: \"unsupported\", feature: \"topK\" });\n }\n const structuredOutputs = (_b = options.structuredOutputs) != null ? _b : true;\n const strictJsonSchema = (_c = options.strictJsonSchema) != null ? _c : false;\n if ((responseFormat == null ? void 0 : responseFormat.type) === \"json\" && !(responseFormat == null ? void 0 : responseFormat.schema)) {\n prompt = injectJsonInstructionIntoMessages({\n messages: prompt,\n schema: responseFormat.schema\n });\n }\n const baseArgs = {\n // model id:\n model: this.modelId,\n // model specific settings:\n safe_prompt: options.safePrompt,\n // standardized settings:\n max_tokens: maxOutputTokens,\n temperature,\n top_p: topP,\n ...frequencyPenalty != null ? { frequency_penalty: frequencyPenalty } : {},\n ...presencePenalty != null ? { presence_penalty: presencePenalty } : {},\n stop: stopSequences,\n random_seed: seed,\n reasoning_effort: options.reasoningEffort,\n prompt_cache_key: options.promptCacheKey,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? structuredOutputs && (responseFormat == null ? void 0 : responseFormat.schema) != null ? {\n type: \"json_schema\",\n json_schema: {\n schema: responseFormat.schema,\n strict: strictJsonSchema,\n name: (_d = responseFormat.name) != null ? _d : \"response\",\n description: responseFormat.description\n }\n } : { type: \"json_object\" } : void 0,\n // mistral-specific provider options:\n document_image_limit: options.documentImageLimit,\n document_page_limit: options.documentPageLimit,\n // messages:\n messages: convertToMistralChatMessages(prompt)\n };\n const {\n tools: mistralTools,\n toolChoice: mistralToolChoice,\n toolWarnings\n } = prepareTools({\n tools,\n toolChoice\n });\n return {\n args: {\n ...baseArgs,\n tools: mistralTools,\n tool_choice: mistralToolChoice,\n ...mistralTools != null && options.parallelToolCalls !== void 0 ? { parallel_tool_calls: options.parallelToolCalls } : {}\n },\n warnings: [...warnings, ...toolWarnings]\n };\n }\n async doGenerate(options) {\n var _a;\n const { args: body, warnings } = await this.getArgs(options);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n mistralChatResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const choice = response.choices[0];\n const content = [];\n if (choice.message.content != null && Array.isArray(choice.message.content)) {\n for (const part of choice.message.content) {\n if (part.type === \"thinking\") {\n const reasoningText = extractReasoningContent(part.thinking);\n content.push({\n type: \"reasoning\",\n text: reasoningText,\n providerMetadata: { mistral: { thinking: part } }\n });\n } else if (part.type === \"text\") {\n if (part.text.length > 0) {\n content.push({ type: \"text\", text: part.text });\n }\n }\n }\n } else {\n const text = extractTextContent(choice.message.content);\n if (text != null && text.length > 0) {\n content.push({ type: \"text\", text });\n }\n }\n if (choice.message.tool_calls != null) {\n for (const toolCall of choice.message.tool_calls) {\n content.push({\n type: \"tool-call\",\n toolCallId: toolCall.id,\n toolName: toolCall.function.name,\n input: toolCall.function.arguments\n });\n }\n }\n return {\n content,\n finishReason: {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: (_a = choice.finish_reason) != null ? _a : void 0\n },\n usage: convertMistralUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse\n },\n warnings\n };\n }\n async doStream(options) {\n const { args, warnings } = await this.getArgs(options);\n const body = { ...args, stream: true };\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createEventSourceResponseHandler(\n mistralChatChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n let isFirstChunk = true;\n let activeText = false;\n let activeReasoningId = null;\n let activeThinking = null;\n const generateId2 = this.generateId;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n if (isFirstChunk) {\n isFirstChunk = false;\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value)\n });\n }\n if (value.usage != null) {\n usage = value.usage;\n }\n const choice = value.choices[0];\n const delta = choice.delta;\n const textContent = extractTextContent(delta.content);\n if (delta.content != null && Array.isArray(delta.content)) {\n for (const part of delta.content) {\n if (part.type === \"thinking\") {\n const reasoningDelta = extractReasoningContent(part.thinking);\n activeThinking = mergeThinking(activeThinking, part);\n if (activeReasoningId == null) {\n if (activeText) {\n controller.enqueue({ type: \"text-end\", id: \"0\" });\n activeText = false;\n }\n activeReasoningId = generateId2();\n controller.enqueue({\n type: \"reasoning-start\",\n id: activeReasoningId\n });\n }\n if (reasoningDelta.length > 0) {\n controller.enqueue({\n type: \"reasoning-delta\",\n id: activeReasoningId,\n delta: reasoningDelta\n });\n }\n }\n }\n }\n if (textContent != null && textContent.length > 0) {\n if (!activeText) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: activeReasoningId,\n providerMetadata: { mistral: { thinking: activeThinking } }\n });\n activeReasoningId = null;\n activeThinking = null;\n }\n controller.enqueue({ type: \"text-start\", id: \"0\" });\n activeText = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: \"0\",\n delta: textContent\n });\n }\n if ((delta == null ? void 0 : delta.tool_calls) != null) {\n for (const toolCall of delta.tool_calls) {\n const toolCallId = toolCall.id;\n const toolName = toolCall.function.name;\n const input = toolCall.function.arguments;\n controller.enqueue({\n type: \"tool-input-start\",\n id: toolCallId,\n toolName\n });\n controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCallId,\n delta: input\n });\n controller.enqueue({\n type: \"tool-input-end\",\n id: toolCallId\n });\n controller.enqueue({\n type: \"tool-call\",\n toolCallId,\n toolName,\n input\n });\n }\n }\n if (choice.finish_reason != null) {\n finishReason = {\n unified: mapMistralFinishReason(choice.finish_reason),\n raw: choice.finish_reason\n };\n }\n },\n flush(controller) {\n if (activeReasoningId != null) {\n controller.enqueue({\n type: \"reasoning-end\",\n id: activeReasoningId,\n providerMetadata: { mistral: { thinking: activeThinking } }\n });\n }\n if (activeText) {\n controller.enqueue({ type: \"text-end\", id: \"0\" });\n }\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertMistralUsage(usage)\n });\n }\n })\n ),\n request: { body },\n response: { headers: responseHeaders }\n };\n }\n};\nfunction extractReasoningContent(thinking) {\n return thinking.filter((chunk) => chunk.type === \"text\").map((chunk) => chunk.text).join(\"\");\n}\nfunction mergeThinking(current, next) {\n if (current === null) return { ...next, thinking: [...next.thinking] };\n current.thinking.push(...next.thinking);\n if (next.closed !== void 0) current.closed = next.closed;\n if (next.signature !== void 0) current.signature = next.signature;\n return current;\n}\nfunction extractTextContent(content) {\n if (typeof content === \"string\") {\n return content;\n }\n if (content == null) {\n return void 0;\n }\n const textContent = [];\n for (const chunk of content) {\n const { type } = chunk;\n switch (type) {\n case \"text\":\n textContent.push(chunk.text);\n break;\n case \"thinking\":\n case \"image_url\":\n case \"reference\":\n break;\n default: {\n const _exhaustiveCheck = type;\n throw new Error(`Unsupported type: ${_exhaustiveCheck}`);\n }\n }\n }\n return textContent.length ? textContent.join(\"\") : void 0;\n}\nvar mistralThinkingContentSchema = z3.discriminatedUnion(\"type\", [\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"tool_reference\"),\n tool: z3.string(),\n title: z3.string(),\n url: z3.string().nullish(),\n favicon: z3.string().nullish(),\n description: z3.string().nullish()\n }),\n z3.object({\n type: z3.literal(\"reference\"),\n reference_ids: z3.array(z3.union([z3.string(), z3.number().int()]))\n })\n]);\nvar mistralThinkChunkSchema = z3.object({\n type: z3.literal(\"thinking\"),\n thinking: z3.array(mistralThinkingContentSchema),\n closed: z3.boolean().optional(),\n signature: z3.string().nullish()\n});\nvar mistralContentSchema = z3.union([\n z3.string(),\n z3.array(\n z3.discriminatedUnion(\"type\", [\n z3.object({\n type: z3.literal(\"text\"),\n text: z3.string()\n }),\n z3.object({\n type: z3.literal(\"image_url\"),\n image_url: z3.union([\n z3.string(),\n z3.object({\n url: z3.string(),\n detail: z3.string().nullable()\n })\n ])\n }),\n z3.object({\n type: z3.literal(\"reference\"),\n reference_ids: z3.array(z3.union([z3.string(), z3.number()]))\n }),\n mistralThinkChunkSchema\n ])\n )\n]).nullish();\nvar mistralUsageSchema = z3.object({\n prompt_tokens: z3.number(),\n completion_tokens: z3.number(),\n total_tokens: z3.number(),\n num_cached_tokens: z3.number().nullish(),\n prompt_tokens_details: z3.object({ cached_tokens: z3.number().nullish() }).nullish(),\n prompt_token_details: z3.object({ cached_tokens: z3.number().nullish() }).nullish()\n});\nvar mistralChatResponseSchema = z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n message: z3.object({\n role: z3.literal(\"assistant\"),\n content: mistralContentSchema,\n tool_calls: z3.array(\n z3.object({\n id: z3.string(),\n function: z3.object({ name: z3.string(), arguments: z3.string() })\n })\n ).nullish()\n }),\n index: z3.number(),\n finish_reason: z3.string().nullish()\n })\n ),\n object: z3.literal(\"chat.completion\"),\n usage: mistralUsageSchema\n});\nvar mistralChatChunkSchema = z3.object({\n id: z3.string().nullish(),\n created: z3.number().nullish(),\n model: z3.string().nullish(),\n choices: z3.array(\n z3.object({\n delta: z3.object({\n role: z3.enum([\"assistant\"]).optional(),\n content: mistralContentSchema,\n tool_calls: z3.array(\n z3.object({\n id: z3.string(),\n function: z3.object({ name: z3.string(), arguments: z3.string() })\n })\n ).nullish()\n }),\n finish_reason: z3.string().nullish(),\n index: z3.number()\n })\n ),\n usage: mistralUsageSchema.nullish()\n});\n\n// src/mistral-embedding-model.ts\nimport {\n TooManyEmbeddingValuesForCallError\n} from \"@ai-sdk/provider\";\nimport {\n combineHeaders as combineHeaders2,\n createJsonResponseHandler as createJsonResponseHandler2,\n postJsonToApi as postJsonToApi2\n} from \"@ai-sdk/provider-utils\";\nimport { z as z4 } from \"zod/v4\";\nvar MistralEmbeddingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.maxEmbeddingsPerCall = 32;\n this.supportsParallelCalls = false;\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n async doEmbed({\n values,\n abortSignal,\n headers\n }) {\n if (values.length > this.maxEmbeddingsPerCall) {\n throw new TooManyEmbeddingValuesForCallError({\n provider: this.provider,\n modelId: this.modelId,\n maxEmbeddingsPerCall: this.maxEmbeddingsPerCall,\n values\n });\n }\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi2({\n url: `${this.config.baseURL}/embeddings`,\n headers: combineHeaders2(this.config.headers(), headers),\n body: {\n model: this.modelId,\n input: values,\n encoding_format: \"float\"\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler2(\n MistralTextEmbeddingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n warnings: [],\n embeddings: response.data.map((item) => item.embedding),\n usage: response.usage ? { tokens: response.usage.prompt_tokens } : void 0,\n response: { headers: responseHeaders, body: rawValue }\n };\n }\n};\nvar MistralTextEmbeddingResponseSchema = z4.object({\n data: z4.array(z4.object({ embedding: z4.array(z4.number()) })),\n usage: z4.object({ prompt_tokens: z4.number() }).nullish()\n});\n\n// src/mistral-speech-model.ts\nimport {\n combineHeaders as combineHeaders3,\n createJsonResponseHandler as createJsonResponseHandler3,\n parseProviderOptions as parseProviderOptions2,\n postToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z as z6 } from \"zod/v4\";\n\n// src/mistral-speech-model-options.ts\nimport { z as z5 } from \"zod/v4\";\nvar mistralSpeechModelOptions = z5.object({\n /**\n * Base64-encoded reference audio for one-off voice cloning.\n *\n * When provided, this takes precedence over the standard `voice` option.\n */\n refAudio: z5.string().min(1).optional()\n});\n\n// src/mistral-speech-model.ts\nvar MistralSpeechModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n }\n get provider() {\n return this.config.provider;\n }\n async getArgs({\n text,\n voice,\n outputFormat = \"mp3\",\n instructions,\n speed,\n language,\n providerOptions\n }) {\n const warnings = [];\n const mistralOptions = await parseProviderOptions2({\n provider: \"mistral\",\n providerOptions,\n schema: mistralSpeechModelOptions\n });\n let responseFormat = \"mp3\";\n if ([\"pcm\", \"wav\", \"mp3\", \"flac\", \"opus\"].includes(outputFormat)) {\n responseFormat = outputFormat;\n } else {\n warnings.push({\n type: \"unsupported\",\n feature: \"outputFormat\",\n details: `Unsupported output format: ${outputFormat}. Using mp3 instead.`\n });\n }\n if (instructions != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"instructions\",\n details: \"Mistral speech models do not support the `instructions` option. Use a reference audio clip to guide delivery.\"\n });\n }\n if (speed != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"speed\",\n details: \"Mistral speech models do not support the `speed` option. It was ignored.\"\n });\n }\n if (language != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"language\",\n details: \"Mistral speech models do not support the `language` option. Language is inferred from the input text and voice.\"\n });\n }\n const refAudio = mistralOptions == null ? void 0 : mistralOptions.refAudio;\n const requestBody = {\n model: this.modelId,\n input: text,\n voice_id: refAudio == null ? voice : void 0,\n ref_audio: refAudio,\n response_format: responseFormat,\n stream: false\n };\n const requestBodyValues = {\n ...requestBody,\n ref_audio: refAudio == null ? void 0 : \"[redacted]\"\n };\n return { requestBody, requestBodyValues, warnings };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e;\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n const { requestBody, requestBodyValues, warnings } = await this.getArgs(options);\n const {\n value: response,\n responseHeaders,\n rawValue: rawResponse\n } = await postToApi({\n url: `${this.config.baseURL}/audio/speech`,\n headers: combineHeaders3(\n { \"Content-Type\": \"application/json\" },\n (_e = (_d = this.config).headers) == null ? void 0 : _e.call(_d),\n options.headers\n ),\n body: {\n content: JSON.stringify(requestBody),\n values: requestBodyValues\n },\n failedResponseHandler: mistralFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler3(\n mistralSpeechResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n return {\n audio: response.audio_data,\n warnings,\n request: {\n body: JSON.stringify(requestBodyValues)\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse\n }\n };\n }\n};\nvar mistralSpeechResponseSchema = z6.object({\n audio_data: z6.string()\n});\n\n// src/version.ts\nvar VERSION = true ? \"3.0.51\" : \"0.0.0-test\";\n\n// src/mistral-provider.ts\nfunction createMistral(options = {}) {\n var _a;\n const baseURL = (_a = withoutTrailingSlash(options.baseURL)) != null ? _a : \"https://api.mistral.ai/v1\";\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"MISTRAL_API_KEY\",\n description: \"Mistral\"\n })}`,\n ...options.headers\n },\n `ai-sdk/mistral/${VERSION}`\n );\n const createChatModel = (modelId) => new MistralChatLanguageModel(modelId, {\n provider: \"mistral.chat\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch,\n generateId: options.generateId\n });\n const createEmbeddingModel = (modelId) => new MistralEmbeddingModel(modelId, {\n provider: \"mistral.embedding\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createSpeechModel = (modelId) => new MistralSpeechModel(modelId, {\n provider: \"mistral.speech\",\n baseURL,\n headers: getHeaders,\n fetch: options.fetch\n });\n const provider = function(modelId) {\n if (new.target) {\n throw new Error(\n \"The Mistral model function cannot be called with the new keyword.\"\n );\n }\n return createChatModel(modelId);\n };\n provider.specificationVersion = \"v3\";\n provider.languageModel = createChatModel;\n provider.chat = createChatModel;\n provider.embedding = createEmbeddingModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbedding = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.speech = createSpeechModel;\n provider.speechModel = createSpeechModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar mistral = createMistral();\nexport {\n VERSION,\n createMistral,\n mistral\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": ";0YAuBA,cAAS,MAAmB,MAAC,OAAO,MAClC,SAAI,EAAI,EAAI,EAAI,EAAI,EACpB,GAAI,GAAS,KACX,MAAO,CACL,YAAa,CACX,MAAY,OACZ,QAAc,OACd,UAAgB,OAChB,WAAiB,MACnB,EACA,aAAc,CACZ,MAAY,OACZ,KAAW,OACX,UAAgB,MAClB,EACA,IAAU,MACZ,EAEF,IAA2B,cAArB,EACyB,kBAAzB,GAAmB,EACnB,GAAmB,GAAM,GAAM,EAAK,EAAM,oBAAsB,KAAO,GAAM,EAAK,EAAM,wBAA0B,KAAY,OAAI,EAAG,gBAAkB,KAAO,GAAM,EAAK,EAAM,uBAAyB,KAAY,OAAI,EAAG,gBAAkB,KAAO,EAAK,EAC/P,MAAO,CACL,YAAa,CACX,MAAO,EACP,QAAS,EAAe,EACxB,UAAW,GAAwB,OACnC,WAAiB,MACnB,EACA,aAAc,CACZ,MAAO,EACP,KAAM,EACN,UAAgB,MAClB,EACA,IAAK,CACP,EAQF,SAAS,CAAa,EACpB,OACA,aACC,CACD,OAAO,aAAgB,IAAM,EAAK,SAAS,EAAI,QAAQ,YAAoB,EAAgB,CAAI,IAEjG,SAAS,CAA4B,CAAC,EAAQ,CAC5C,IAAI,EACJ,IAAM,EAAW,CAAC,EAClB,QAAS,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,CACtC,IAAQ,OAAM,WAAY,EAAO,GAC3B,EAAgB,IAAM,EAAO,OAAS,EAC5C,OAAQ,OACD,SAAU,CACb,EAAS,KAAK,CAAE,KAAM,SAAU,SAAQ,CAAC,EACzC,KACF,KACK,OAAQ,CACX,EAAS,KAAK,CACZ,KAAM,OACN,QAAS,EAAQ,IAAI,CAAC,IAAS,CAC7B,OAAQ,EAAK,UACN,OACH,MAAO,CAAE,KAAM,OAAQ,KAAM,EAAK,IAAK,MAEpC,OACH,GAAI,EAAK,UAAU,WAAW,QAAQ,EAAG,CACvC,IAAM,EAAY,EAAK,YAAc,UAAY,aAAe,EAAK,UACrE,MAAO,CACL,KAAM,YACN,UAAW,EAAc,CAAE,KAAM,EAAK,KAAM,WAAU,CAAC,CACzD,EACK,QAAI,EAAK,YAAc,kBAC5B,MAAO,CACL,KAAM,eACN,aAAc,EAAc,CAC1B,KAAM,EAAK,KACX,UAAW,iBACb,CAAC,CACH,EAEA,WAAM,IAAI,EAA8B,CACtC,cAAe,8CACjB,CAAC,GAIR,CACH,CAAC,EACD,KACF,KACK,YAAa,CAChB,IAAI,EAAO,GACL,EAAoB,CAAC,EACvB,EAAqB,GACnB,EAAY,CAAC,EACnB,QAAW,KAAQ,EACjB,OAAQ,EAAK,UACN,OAAQ,CACX,GAAQ,EAAK,KACb,EAAkB,KAAK,CAAE,KAAM,OAAQ,KAAM,EAAK,IAAK,CAAC,EACxD,KACF,KACK,YAAa,CAChB,EAAU,KAAK,CACb,GAAI,EAAK,WACT,KAAM,WACN,SAAU,CACR,KAAM,EAAK,SACX,UAAW,KAAK,UAAU,EAAK,KAAK,CACtC,CACF,CAAC,EACD,KACF,KACK,YAAa,CAChB,GAAQ,EAAK,KACb,IAAM,EAAS,EAAK,iBAAiB,SAAS,SAC9C,GAAI,GAAQ,OAAS,WAAY,CAC/B,EAAqB,GACrB,EAAkB,KAAK,CAAM,EAC7B,MAEF,EAAkB,KAAK,CAAE,KAAM,OAAQ,KAAM,EAAK,IAAK,CAAC,EACxD,KACF,SAEE,MAAU,MACR,kDAAkD,EAAK,MACzD,EAIN,EAAS,KAAK,CACZ,KAAM,YACN,QAAS,EAAqB,EAAoB,EAClD,OAAQ,EAAgB,GAAY,OACpC,WAAY,EAAU,OAAS,EAAI,EAAiB,MACtD,CAAC,EACD,KACF,KACK,OAAQ,CACX,QAAW,KAAgB,EAAS,CAClC,GAAI,EAAa,OAAS,yBACxB,SAEF,IAAM,EAAS,EAAa,OACxB,EACJ,OAAQ,EAAO,UACR,WACA,aACH,EAAe,EAAO,MACtB,UACG,mBACH,GAAgB,EAAK,EAAO,SAAW,KAAO,EAAK,8BACnD,UACG,cACA,WACA,aACH,EAAe,KAAK,UAAU,EAAO,KAAK,EAC1C,MAEJ,EAAS,KAAK,CACZ,KAAM,OACN,KAAM,EAAa,SACnB,aAAc,EAAa,WAC3B,QAAS,CACX,CAAC,EAEH,KACF,SAGE,MAAU,MAAM,qBADS,GAC8B,GAI7D,OAAO,EAIT,SAAS,CAAmB,EAC1B,KACA,QACA,WACC,CACD,MAAO,CACL,GAAI,GAAM,KAAO,EAAU,OAC3B,QAAS,GAAS,KAAO,EAAa,OACtC,UAAW,GAAW,KAAO,IAAI,KAAK,EAAU,IAAG,EAAS,MAC9D,EAIF,SAAS,CAAsB,CAAC,EAAc,CAC5C,OAAQ,OACD,OACH,MAAO,WACJ,aACA,eACH,MAAO,aACJ,aACH,MAAO,qBAEP,MAAO,SAMb,IAAI,EAA8B,EAAE,OAAO,CAMzC,WAAY,EAAE,QAAQ,EAAE,SAAS,EACjC,mBAAoB,EAAE,OAAO,EAAE,SAAS,EACxC,kBAAmB,EAAE,OAAO,EAAE,SAAS,EAMvC,kBAAmB,EAAE,QAAQ,EAAE,SAAS,EAMxC,iBAAkB,EAAE,QAAQ,EAAE,SAAS,EAOvC,kBAAmB,EAAE,QAAQ,EAAE,SAAS,EAOxC,gBAAiB,EAAE,KAAK,CAAC,OAAQ,MAAM,CAAC,EAAE,SAAS,EACnD,eAAgB,EAAE,OAAO,EAAE,SAAS,CACtC,CAAC,EAKG,EAAyB,EAAG,OAAO,CACrC,OAAQ,EAAG,QAAQ,OAAO,EAC1B,QAAS,EAAG,OAAO,EACnB,KAAM,EAAG,OAAO,EAChB,MAAO,EAAG,OAAO,EAAE,SAAS,EAC5B,KAAM,EAAG,OAAO,EAAE,SAAS,CAC7B,CAAC,EACG,EAA+B,EAA+B,CAChE,YAAa,EACb,eAAgB,CAAC,IAAS,EAAK,OACjC,CAAC,EAMD,SAAS,EAAY,EACnB,QACA,cACC,CACD,GAAS,GAAS,KAAY,OAAI,EAAM,QAAU,EAAa,OAC/D,IAAM,EAAe,CAAC,EACtB,GAAI,GAAS,KACX,MAAO,CAAE,MAAY,OAAG,WAAiB,OAAG,cAAa,EAE3D,IAAM,EAAe,CAAC,EACtB,QAAW,KAAQ,EACjB,GAAI,EAAK,OAAS,WAChB,EAAa,KAAK,CAChB,KAAM,cACN,QAAS,yBAAyB,EAAK,IACzC,CAAC,EAED,OAAa,KAAK,CAChB,KAAM,WACN,SAAU,CACR,KAAM,EAAK,KACX,YAAa,EAAK,YAClB,WAAY,EAAK,eACd,EAAK,QAAU,KAAO,CAAE,OAAQ,EAAK,MAAO,EAAI,CAAC,CACtD,CACF,CAAC,EAGL,GAAI,GAAc,KAChB,MAAO,CAAE,MAAO,EAAc,WAAiB,OAAG,cAAa,EAEjE,IAAM,EAAO,EAAW,KACxB,OAAQ,OACD,WACA,OACH,MAAO,CAAE,MAAO,EAAc,WAAY,EAAM,cAAa,MAC1D,WACH,MAAO,CAAE,MAAO,EAAc,WAAY,MAAO,cAAa,MAG3D,OACH,MAAO,CACL,MAAO,EAAa,OAClB,CAAC,IAAS,EAAK,SAAS,OAAS,EAAW,QAC9C,EACA,WAAY,MACZ,cACF,UAGA,MAAM,IAAI,EAA+B,CACvC,cAAe,qBAFQ,GAGzB,CAAC,GAMP,IAAI,GAA2B,KAAM,CACnC,WAAW,CAAC,EAAS,EAAQ,CAC3B,KAAK,qBAAuB,KAC5B,KAAK,cAAgB,CACnB,kBAAmB,CAAC,gBAAgB,CACtC,EACA,IAAI,EACJ,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,YAAc,EAAK,EAAO,aAAe,KAAO,EAAK,KAExD,SAAQ,EAAG,CACb,OAAO,KAAK,OAAO,cAEf,QAAO,EACX,SACA,kBACA,cACA,OACA,OACA,mBACA,kBACA,gBACA,iBACA,OACA,kBACA,QACA,cACC,CACD,IAAI,EAAI,EAAI,EAAI,EAChB,IAAM,EAAW,CAAC,EACZ,GAAW,EAAK,MAAM,EAAqB,CAC/C,SAAU,UACV,kBACA,OAAQ,CACV,CAAC,IAAM,KAAO,EAAK,CAAC,EACpB,GAAI,GAAQ,KACV,EAAS,KAAK,CAAE,KAAM,cAAe,QAAS,MAAO,CAAC,EAExD,IAAM,GAAqB,EAAK,EAAQ,oBAAsB,KAAO,EAAK,GACpE,GAAoB,EAAK,EAAQ,mBAAqB,KAAO,EAAK,GACxE,IAAK,GAAkB,KAAY,OAAI,EAAe,QAAU,QAAU,EAAE,GAAkB,KAAY,OAAI,EAAe,QAC3H,EAAS,EAAkC,CACzC,SAAU,EACV,OAAQ,EAAe,MACzB,CAAC,EAEH,IAAM,EAAW,CAEf,MAAO,KAAK,QAEZ,YAAa,EAAQ,WAErB,WAAY,EACZ,cACA,MAAO,KACJ,GAAoB,KAAO,CAAE,kBAAmB,CAAiB,EAAI,CAAC,KACtE,GAAmB,KAAO,CAAE,iBAAkB,CAAgB,EAAI,CAAC,EACtE,KAAM,EACN,YAAa,EACb,iBAAkB,EAAQ,gBAC1B,iBAAkB,EAAQ,eAE1B,iBAAkB,GAAkB,KAAY,OAAI,EAAe,QAAU,OAAS,IAAsB,GAAkB,KAAY,OAAI,EAAe,SAAW,KAAO,CAC7K,KAAM,cACN,YAAa,CACX,OAAQ,EAAe,OACvB,OAAQ,EACR,MAAO,EAAK,EAAe,OAAS,KAAO,EAAK,WAChD,YAAa,EAAe,WAC9B,CACF,EAAI,CAAE,KAAM,aAAc,EAAS,OAEnC,qBAAsB,EAAQ,mBAC9B,oBAAqB,EAAQ,kBAE7B,SAAU,EAA6B,CAAM,CAC/C,GAEE,MAAO,EACP,WAAY,EACZ,gBACE,GAAa,CACf,QACA,YACF,CAAC,EACD,MAAO,CACL,KAAM,IACD,EACH,MAAO,EACP,YAAa,KACV,GAAgB,MAAQ,EAAQ,oBAA2B,OAAI,CAAE,oBAAqB,EAAQ,iBAAkB,EAAI,CAAC,CAC1H,EACA,SAAU,CAAC,GAAG,EAAU,GAAG,CAAY,CACzC,OAEI,WAAU,CAAC,EAAS,CACxB,IAAI,EACJ,IAAQ,KAAM,EAAM,YAAa,MAAM,KAAK,QAAQ,CAAO,GAEzD,kBACA,MAAO,EACP,SAAU,GACR,MAAM,EAAc,CACtB,IAAK,GAAG,KAAK,OAAO,2BACpB,QAAS,EAAe,KAAK,OAAO,QAAQ,EAAG,EAAQ,OAAO,EAC9D,OACA,sBAAuB,EACvB,0BAA2B,EACzB,EACF,EACA,YAAa,EAAQ,YACrB,MAAO,KAAK,OAAO,KACrB,CAAC,EACK,EAAS,EAAS,QAAQ,GAC1B,EAAU,CAAC,EACjB,GAAI,EAAO,QAAQ,SAAW,MAAQ,MAAM,QAAQ,EAAO,QAAQ,OAAO,GACxE,QAAW,KAAQ,EAAO,QAAQ,QAChC,GAAI,EAAK,OAAS,WAAY,CAC5B,IAAM,EAAgB,EAAwB,EAAK,QAAQ,EAC3D,EAAQ,KAAK,CACX,KAAM,YACN,KAAM,EACN,iBAAkB,CAAE,QAAS,CAAE,SAAU,CAAK,CAAE,CAClD,CAAC,EACI,QAAI,EAAK,OAAS,QACvB,GAAI,EAAK,KAAK,OAAS,EACrB,EAAQ,KAAK,CAAE,KAAM,OAAQ,KAAM,EAAK,IAAK,CAAC,GAI/C,KACL,IAAM,EAAO,EAAmB,EAAO,QAAQ,OAAO,EACtD,GAAI,GAAQ,MAAQ,EAAK,OAAS,EAChC,EAAQ,KAAK,CAAE,KAAM,OAAQ,MAAK,CAAC,EAGvC,GAAI,EAAO,QAAQ,YAAc,KAC/B,QAAW,KAAY,EAAO,QAAQ,WACpC,EAAQ,KAAK,CACX,KAAM,YACN,WAAY,EAAS,GACrB,SAAU,EAAS,SAAS,KAC5B,MAAO,EAAS,SAAS,SAC3B,CAAC,EAGL,MAAO,CACL,UACA,aAAc,CACZ,QAAS,EAAuB,EAAO,aAAa,EACpD,KAAM,EAAK,EAAO,gBAAkB,KAAO,EAAU,MACvD,EACA,MAAO,EAAoB,EAAS,KAAK,EACzC,QAAS,CAAE,MAAK,EAChB,SAAU,IACL,EAAoB,CAAQ,EAC/B,QAAS,EACT,KAAM,CACR,EACA,UACF,OAEI,SAAQ,CAAC,EAAS,CACtB,IAAQ,OAAM,YAAa,MAAM,KAAK,QAAQ,CAAO,EAC/C,EAAO,IAAK,EAAM,OAAQ,EAAK,GAC7B,kBAAiB,MAAO,GAAa,MAAM,EAAc,CAC/D,IAAK,GAAG,KAAK,OAAO,2BACpB,QAAS,EAAe,KAAK,OAAO,QAAQ,EAAG,EAAQ,OAAO,EAC9D,OACA,sBAAuB,EACvB,0BAA2B,EACzB,EACF,EACA,YAAa,EAAQ,YACrB,MAAO,KAAK,OAAO,KACrB,CAAC,EACG,EAAe,CACjB,QAAS,QACT,IAAU,MACZ,EACI,EAAa,OACb,EAAe,GACf,EAAa,GACb,EAAoB,KACpB,EAAiB,KACf,EAAc,KAAK,WACzB,MAAO,CACL,OAAQ,EAAS,YACf,IAAI,gBAAgB,CAClB,KAAK,CAAC,EAAY,CAChB,EAAW,QAAQ,CAAE,KAAM,eAAgB,UAAS,CAAC,GAEvD,SAAS,CAAC,EAAO,EAAY,CAC3B,GAAI,EAAQ,iBACV,EAAW,QAAQ,CAAE,KAAM,MAAO,SAAU,EAAM,QAAS,CAAC,EAE9D,GAAI,CAAC,EAAM,QAAS,CAClB,EAAW,QAAQ,CAAE,KAAM,QAAS,MAAO,EAAM,KAAM,CAAC,EACxD,OAEF,IAAM,EAAQ,EAAM,MACpB,GAAI,EACF,EAAe,GACf,EAAW,QAAQ,CACjB,KAAM,uBACH,EAAoB,CAAK,CAC9B,CAAC,EAEH,GAAI,EAAM,OAAS,KACjB,EAAQ,EAAM,MAEhB,IAAM,EAAS,EAAM,QAAQ,GACvB,EAAQ,EAAO,MACf,EAAc,EAAmB,EAAM,OAAO,EACpD,GAAI,EAAM,SAAW,MAAQ,MAAM,QAAQ,EAAM,OAAO,GACtD,QAAW,KAAQ,EAAM,QACvB,GAAI,EAAK,OAAS,WAAY,CAC5B,IAAM,EAAiB,EAAwB,EAAK,QAAQ,EAE5D,GADA,EAAiB,GAAc,EAAgB,CAAI,EAC/C,GAAqB,KAAM,CAC7B,GAAI,EACF,EAAW,QAAQ,CAAE,KAAM,WAAY,GAAI,GAAI,CAAC,EAChD,EAAa,GAEf,EAAoB,EAAY,EAChC,EAAW,QAAQ,CACjB,KAAM,kBACN,GAAI,CACN,CAAC,EAEH,GAAI,EAAe,OAAS,EAC1B,EAAW,QAAQ,CACjB,KAAM,kBACN,GAAI,EACJ,MAAO,CACT,CAAC,GAKT,GAAI,GAAe,MAAQ,EAAY,OAAS,EAAG,CACjD,GAAI,CAAC,EAAY,CACf,GAAI,GAAqB,KACvB,EAAW,QAAQ,CACjB,KAAM,gBACN,GAAI,EACJ,iBAAkB,CAAE,QAAS,CAAE,SAAU,CAAe,CAAE,CAC5D,CAAC,EACD,EAAoB,KACpB,EAAiB,KAEnB,EAAW,QAAQ,CAAE,KAAM,aAAc,GAAI,GAAI,CAAC,EAClD,EAAa,GAEf,EAAW,QAAQ,CACjB,KAAM,aACN,GAAI,IACJ,MAAO,CACT,CAAC,EAEH,IAAK,GAAS,KAAY,OAAI,EAAM,aAAe,KACjD,QAAW,KAAY,EAAM,WAAY,CACvC,IAAM,EAAa,EAAS,GACtB,EAAW,EAAS,SAAS,KAC7B,EAAQ,EAAS,SAAS,UAChC,EAAW,QAAQ,CACjB,KAAM,mBACN,GAAI,EACJ,UACF,CAAC,EACD,EAAW,QAAQ,CACjB,KAAM,mBACN,GAAI,EACJ,MAAO,CACT,CAAC,EACD,EAAW,QAAQ,CACjB,KAAM,iBACN,GAAI,CACN,CAAC,EACD,EAAW,QAAQ,CACjB,KAAM,YACN,aACA,WACA,OACF,CAAC,EAGL,GAAI,EAAO,eAAiB,KAC1B,EAAe,CACb,QAAS,EAAuB,EAAO,aAAa,EACpD,IAAK,EAAO,aACd,GAGJ,KAAK,CAAC,EAAY,CAChB,GAAI,GAAqB,KACvB,EAAW,QAAQ,CACjB,KAAM,gBACN,GAAI,EACJ,iBAAkB,CAAE,QAAS,CAAE,SAAU,CAAe,CAAE,CAC5D,CAAC,EAEH,GAAI,EACF,EAAW,QAAQ,CAAE,KAAM,WAAY,GAAI,GAAI,CAAC,EAElD,EAAW,QAAQ,CACjB,KAAM,SACN,eACA,MAAO,EAAoB,CAAK,CAClC,CAAC,EAEL,CAAC,CACH,EACA,QAAS,CAAE,MAAK,EAChB,SAAU,CAAE,QAAS,CAAgB,CACvC,EAEJ,EACA,SAAS,CAAuB,CAAC,EAAU,CACzC,OAAO,EAAS,OAAO,CAAC,IAAU,EAAM,OAAS,MAAM,EAAE,IAAI,CAAC,IAAU,EAAM,IAAI,EAAE,KAAK,EAAE,EAE7F,SAAS,EAAa,CAAC,EAAS,EAAM,CACpC,GAAI,IAAY,KAAM,MAAO,IAAK,EAAM,SAAU,CAAC,GAAG,EAAK,QAAQ,CAAE,EAErE,GADA,EAAQ,SAAS,KAAK,GAAG,EAAK,QAAQ,EAClC,EAAK,SAAgB,OAAG,EAAQ,OAAS,EAAK,OAClD,GAAI,EAAK,YAAmB,OAAG,EAAQ,UAAY,EAAK,UACxD,OAAO,EAET,SAAS,CAAkB,CAAC,EAAS,CACnC,GAAI,OAAO,IAAY,SACrB,OAAO,EAET,GAAI,GAAW,KACb,OAEF,IAAM,EAAc,CAAC,EACrB,QAAW,KAAS,EAAS,CAC3B,IAAQ,QAAS,EACjB,OAAQ,OACD,OACH,EAAY,KAAK,EAAM,IAAI,EAC3B,UACG,eACA,gBACA,YACH,cAGA,MAAU,MAAM,qBADS,GAC8B,GAI7D,OAAO,EAAY,OAAS,EAAY,KAAK,EAAE,EAAS,OAE1D,IAAI,GAA+B,EAAG,mBAAmB,OAAQ,CAC/D,EAAG,OAAO,CACR,KAAM,EAAG,QAAQ,MAAM,EACvB,KAAM,EAAG,OAAO,CAClB,CAAC,EACD,EAAG,OAAO,CACR,KAAM,EAAG,QAAQ,gBAAgB,EACjC,KAAM,EAAG,OAAO,EAChB,MAAO,EAAG,OAAO,EACjB,IAAK,EAAG,OAAO,EAAE,QAAQ,EACzB,QAAS,EAAG,OAAO,EAAE,QAAQ,EAC7B,YAAa,EAAG,OAAO,EAAE,QAAQ,CACnC,CAAC,EACD,EAAG,OAAO,CACR,KAAM,EAAG,QAAQ,WAAW,EAC5B,cAAe,EAAG,MAAM,EAAG,MAAM,CAAC,EAAG,OAAO,EAAG,EAAG,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CACpE,CAAC,CACH,CAAC,EACG,GAA0B,EAAG,OAAO,CACtC,KAAM,EAAG,QAAQ,UAAU,EAC3B,SAAU,EAAG,MAAM,EAA4B,EAC/C,OAAQ,EAAG,QAAQ,EAAE,SAAS,EAC9B,UAAW,EAAG,OAAO,EAAE,QAAQ,CACjC,CAAC,EACG,EAAuB,EAAG,MAAM,CAClC,EAAG,OAAO,EACV,EAAG,MACD,EAAG,mBAAmB,OAAQ,CAC5B,EAAG,OAAO,CACR,KAAM,EAAG,QAAQ,MAAM,EACvB,KAAM,EAAG,OAAO,CAClB,CAAC,EACD,EAAG,OAAO,CACR,KAAM,EAAG,QAAQ,WAAW,EAC5B,UAAW,EAAG,MAAM,CAClB,EAAG,OAAO,EACV,EAAG,OAAO,CACR,IAAK,EAAG,OAAO,EACf,OAAQ,EAAG,OAAO,EAAE,SAAS,CAC/B,CAAC,CACH,CAAC,CACH,CAAC,EACD,EAAG,OAAO,CACR,KAAM,EAAG,QAAQ,WAAW,EAC5B,cAAe,EAAG,MAAM,EAAG,MAAM,CAAC,EAAG,OAAO,EAAG,EAAG,OAAO,CAAC,CAAC,CAAC,CAC9D,CAAC,EACD,EACF,CAAC,CACH,CACF,CAAC,EAAE,QAAQ,EACP,EAAqB,EAAG,OAAO,CACjC,cAAe,EAAG,OAAO,EACzB,kBAAmB,EAAG,OAAO,EAC7B,aAAc,EAAG,OAAO,EACxB,kBAAmB,EAAG,OAAO,EAAE,QAAQ,EACvC,sBAAuB,EAAG,OAAO,CAAE,cAAe,EAAG,OAAO,EAAE,QAAQ,CAAE,CAAC,EAAE,QAAQ,EACnF,qBAAsB,EAAG,OAAO,CAAE,cAAe,EAAG,OAAO,EAAE,QAAQ,CAAE,CAAC,EAAE,QAAQ,CACpF,CAAC,EACG,GAA4B,EAAG,OAAO,CACxC,GAAI,EAAG,OAAO,EAAE,QAAQ,EACxB,QAAS,EAAG,OAAO,EAAE,QAAQ,EAC7B,MAAO,EAAG,OAAO,EAAE,QAAQ,EAC3B,QAAS,EAAG,MACV,EAAG,OAAO,CACR,QAAS,EAAG,OAAO,CACjB,KAAM,EAAG,QAAQ,WAAW,EAC5B,QAAS,EACT,WAAY,EAAG,MACb,EAAG,OAAO,CACR,GAAI,EAAG,OAAO,EACd,SAAU,EAAG,OAAO,CAAE,KAAM,EAAG,OAAO,EAAG,UAAW,EAAG,OAAO,CAAE,CAAC,CACnE,CAAC,CACH,EAAE,QAAQ,CACZ,CAAC,EACD,MAAO,EAAG,OAAO,EACjB,cAAe,EAAG,OAAO,EAAE,QAAQ,CACrC,CAAC,CACH,EACA,OAAQ,EAAG,QAAQ,iBAAiB,EACpC,MAAO,CACT,CAAC,EACG,GAAyB,EAAG,OAAO,CACrC,GAAI,EAAG,OAAO,EAAE,QAAQ,EACxB,QAAS,EAAG,OAAO,EAAE,QAAQ,EAC7B,MAAO,EAAG,OAAO,EAAE,QAAQ,EAC3B,QAAS,EAAG,MACV,EAAG,OAAO,CACR,MAAO,EAAG,OAAO,CACf,KAAM,EAAG,KAAK,CAAC,WAAW,CAAC,EAAE,SAAS,EACtC,QAAS,EACT,WAAY,EAAG,MACb,EAAG,OAAO,CACR,GAAI,EAAG,OAAO,EACd,SAAU,EAAG,OAAO,CAAE,KAAM,EAAG,OAAO,EAAG,UAAW,EAAG,OAAO,CAAE,CAAC,CACnE,CAAC,CACH,EAAE,QAAQ,CACZ,CAAC,EACD,cAAe,EAAG,OAAO,EAAE,QAAQ,EACnC,MAAO,EAAG,OAAO,CACnB,CAAC,CACH,EACA,MAAO,EAAmB,QAAQ,CACpC,CAAC,EAYG,GAAwB,KAAM,CAChC,WAAW,CAAC,EAAS,EAAQ,CAC3B,KAAK,qBAAuB,KAC5B,KAAK,qBAAuB,GAC5B,KAAK,sBAAwB,GAC7B,KAAK,QAAU,EACf,KAAK,OAAS,KAEZ,SAAQ,EAAG,CACb,OAAO,KAAK,OAAO,cAEf,QAAO,EACX,SACA,cACA,WACC,CACD,GAAI,EAAO,OAAS,KAAK,qBACvB,MAAM,IAAI,EAAmC,CAC3C,SAAU,KAAK,SACf,QAAS,KAAK,QACd,qBAAsB,KAAK,qBAC3B,QACF,CAAC,EAEH,IACE,kBACA,MAAO,EACP,YACE,MAAM,EAAe,CACvB,IAAK,GAAG,KAAK,OAAO,qBACpB,QAAS,EAAgB,KAAK,OAAO,QAAQ,EAAG,CAAO,EACvD,KAAM,CACJ,MAAO,KAAK,QACZ,MAAO,EACP,gBAAiB,OACnB,EACA,sBAAuB,EACvB,0BAA2B,EACzB,EACF,EACA,cACA,MAAO,KAAK,OAAO,KACrB,CAAC,EACD,MAAO,CACL,SAAU,CAAC,EACX,WAAY,EAAS,KAAK,IAAI,CAAC,IAAS,EAAK,SAAS,EACtD,MAAO,EAAS,MAAQ,CAAE,OAAQ,EAAS,MAAM,aAAc,EAAS,OACxE,SAAU,CAAE,QAAS,EAAiB,KAAM,CAAS,CACvD,EAEJ,EACI,GAAqC,EAAG,OAAO,CACjD,KAAM,EAAG,MAAM,EAAG,OAAO,CAAE,UAAW,EAAG,MAAM,EAAG,OAAO,CAAC,CAAE,CAAC,CAAC,EAC9D,MAAO,EAAG,OAAO,CAAE,cAAe,EAAG,OAAO,CAAE,CAAC,EAAE,QAAQ,CAC3D,CAAC,EAaG,GAA4B,EAAG,OAAO,CAMxC,SAAU,EAAG,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,CACxC,CAAC,EAGG,GAAqB,KAAM,CAC7B,WAAW,CAAC,EAAS,EAAQ,CAC3B,KAAK,QAAU,EACf,KAAK,OAAS,EACd,KAAK,qBAAuB,QAE1B,SAAQ,EAAG,CACb,OAAO,KAAK,OAAO,cAEf,QAAO,EACX,OACA,QACA,eAAe,MACf,eACA,QACA,WACA,mBACC,CACD,IAAM,EAAW,CAAC,EACZ,EAAiB,MAAM,EAAsB,CACjD,SAAU,UACV,kBACA,OAAQ,EACV,CAAC,EACG,EAAiB,MACrB,GAAI,CAAC,MAAO,MAAO,MAAO,OAAQ,MAAM,EAAE,SAAS,CAAY,EAC7D,EAAiB,EAEjB,OAAS,KAAK,CACZ,KAAM,cACN,QAAS,eACT,QAAS,8BAA8B,uBACzC,CAAC,EAEH,GAAI,GAAgB,KAClB,EAAS,KAAK,CACZ,KAAM,cACN,QAAS,eACT,QAAS,+GACX,CAAC,EAEH,GAAI,GAAS,KACX,EAAS,KAAK,CACZ,KAAM,cACN,QAAS,QACT,QAAS,0EACX,CAAC,EAEH,GAAI,GAAY,KACd,EAAS,KAAK,CACZ,KAAM,cACN,QAAS,WACT,QAAS,iHACX,CAAC,EAEH,IAAM,EAAW,GAAkB,KAAY,OAAI,EAAe,SAC5D,EAAc,CAClB,MAAO,KAAK,QACZ,MAAO,EACP,SAAU,GAAY,KAAO,EAAa,OAC1C,UAAW,EACX,gBAAiB,EACjB,OAAQ,EACV,EACM,EAAoB,IACrB,EACH,UAAW,GAAY,KAAY,OAAI,YACzC,EACA,MAAO,CAAE,cAAa,oBAAmB,UAAS,OAE9C,WAAU,CAAC,EAAS,CACxB,IAAI,EAAI,EAAI,EAAI,EAAI,EACpB,IAAM,GAAe,GAAM,GAAM,EAAK,KAAK,OAAO,YAAc,KAAY,OAAI,EAAG,cAAgB,KAAY,OAAI,EAAG,KAAK,CAAE,IAAM,KAAO,EAAqB,IAAI,MAC3J,cAAa,oBAAmB,YAAa,MAAM,KAAK,QAAQ,CAAO,GAE7E,MAAO,EACP,kBACA,SAAU,GACR,MAAM,EAAU,CAClB,IAAK,GAAG,KAAK,OAAO,uBACpB,QAAS,EACP,CAAE,eAAgB,kBAAmB,GACpC,GAAM,EAAK,KAAK,QAAQ,UAAY,KAAY,OAAI,EAAG,KAAK,CAAE,EAC/D,EAAQ,OACV,EACA,KAAM,CACJ,QAAS,KAAK,UAAU,CAAW,EACnC,OAAQ,CACV,EACA,sBAAuB,EACvB,0BAA2B,EACzB,EACF,EACA,YAAa,EAAQ,YACrB,MAAO,KAAK,OAAO,KACrB,CAAC,EACD,MAAO,CACL,MAAO,EAAS,WAChB,WACA,QAAS,CACP,KAAM,KAAK,UAAU,CAAiB,CACxC,EACA,SAAU,CACR,UAAW,EACX,QAAS,KAAK,QACd,QAAS,EACT,KAAM,CACR,CACF,EAEJ,EACI,GAA8B,EAAG,OAAO,CAC1C,WAAY,EAAG,OAAO,CACxB,CAAC,EAGG,GAAiB,SAGrB,SAAS,EAAa,CAAC,EAAU,CAAC,EAAG,CACnC,IAAI,EACJ,IAAM,GAAW,EAAK,EAAqB,EAAQ,OAAO,IAAM,KAAO,EAAK,4BACtE,EAAa,IAAM,EACvB,CACE,cAAe,UAAU,EAAW,CAClC,OAAQ,EAAQ,OAChB,wBAAyB,kBACzB,YAAa,SACf,CAAC,OACE,EAAQ,OACb,EACA,kBAAkB,IACpB,EACM,EAAkB,CAAC,IAAY,IAAI,GAAyB,EAAS,CACzE,SAAU,eACV,UACA,QAAS,EACT,MAAO,EAAQ,MACf,WAAY,EAAQ,UACtB,CAAC,EACK,EAAuB,CAAC,IAAY,IAAI,GAAsB,EAAS,CAC3E,SAAU,oBACV,UACA,QAAS,EACT,MAAO,EAAQ,KACjB,CAAC,EACK,EAAoB,CAAC,IAAY,IAAI,GAAmB,EAAS,CACrE,SAAU,iBACV,UACA,QAAS,EACT,MAAO,EAAQ,KACjB,CAAC,EACK,EAAW,QAAQ,CAAC,EAAS,CACjC,GAAI,WACF,MAAU,MACR,mEACF,EAEF,OAAO,EAAgB,CAAO,GAchC,OAZA,EAAS,qBAAuB,KAChC,EAAS,cAAgB,EACzB,EAAS,KAAO,EAChB,EAAS,UAAY,EACrB,EAAS,eAAiB,EAC1B,EAAS,cAAgB,EACzB,EAAS,mBAAqB,EAC9B,EAAS,OAAS,EAClB,EAAS,YAAc,EACvB,EAAS,WAAa,CAAC,IAAY,CACjC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,YAAa,CAAC,GAE1D,EAET,IAAI,GAAU,GAAc", | ||
| "debugId": "59AF47D33D3113B264756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/debug/agents.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { OpenCode } from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.debug.commands.agents,\n Effect.fn(\"cli.debug.agents\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const response = yield* Effect.promise(() => client.agent.list({ location: { directory: process.cwd() } }))\n process.stdout.write(\n JSON.stringify(\n response.data.toSorted((a, b) => a.id.localeCompare(b.id)),\n null,\n 2,\n ) + EOL,\n )\n }),\n)\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAe,SAAQ,aACrB,OAAS,cAAS,WAAM,cAAS,YACjC,OAAO,QAAG,uBAAkB,OAAE,cAAU,OAAG,MACzC,SAAM,OAAU,WAAO,OAAc,aAAQ,OAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EACpF,EAAW,MAAO,EAAO,QAAQ,IAAM,EAAO,MAAM,KAAK,CAAE,SAAU,CAAE,UAAW,QAAQ,IAAI,CAAE,CAAE,CAAC,CAAC,EAC1G,QAAQ,OAAO,MACb,KAAK,UACH,EAAS,KAAK,SAAS,CAAC,EAAG,IAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC,EACzD,KACA,CACF,EAAI,CACN,EACD,CACH", | ||
| "debugId": "DC1E8E4F50442EE464756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/runtime.queue.ts"], | ||
| "sourcesContent": [ | ||
| "// Serial prompt queue for direct interactive mode.\n//\n// Prompts arrive from the footer (user types and hits enter) and local\n// operations drain one at a time. Ordinary prompts submitted during an active\n// ordinary turn are admitted immediately to the server's durable queue.\n//\n// The queue also handles local session commands, empty-prompt rejection,\n// and tracks per-turn wall-clock duration for the footer status line.\n//\n// Resolves when the footer closes and all in-flight work finishes.\nimport { SessionMessage } from \"@opencode-ai/schema/session-message\"\nimport { Locale } from \"../util/locale\"\nimport { isCompactCommand, isExitCommand, isNewCommand } from \"./prompt.shared\"\nimport type { FooterApi, FooterEvent, RunPrompt } from \"./types\"\n\ntype Trace = {\n write(type: string, data?: unknown): void\n}\n\nexport type QueueInput = {\n footer: FooterApi\n initialInput?: string\n trace?: Trace\n onSend?: (prompt: RunPrompt, delivery: \"steer\" | \"queue\") => void\n onAdmissionError?: (prompt: RunPrompt, error: unknown) => void | Promise<void>\n onNewSession?: () => void | Promise<void>\n onCompact?: () => void | Promise<void>\n admit: (prompt: RunPrompt, signal: AbortSignal) => Promise<void>\n settle: () => Promise<void>\n run: (prompt: RunPrompt, signal: AbortSignal, admitted: () => void) => Promise<void>\n}\n\ntype State = {\n queue: RunPrompt[]\n active?: RunPrompt\n admission?: Promise<void>\n ctrl?: AbortController\n closed: boolean\n}\n\n// Runs the prompt queue until the footer closes.\n//\n// Subscribes to footer prompt events and drains operations through input.run().\n// Ordinary prompts submitted during an ordinary active turn are admitted as\n// durable queued work instead of remaining editable process-local state.\nexport async function runPromptQueue(input: QueueInput): Promise<void> {\n const stop = Promise.withResolvers<{ type: \"closed\" }>()\n const done = Promise.withResolvers<void>()\n const state: State = {\n queue: [],\n closed: input.footer.isClosed,\n }\n let draining: Promise<void> | undefined\n let admissions = Promise.resolve()\n let admissionVersion = 0\n const admissionController = new AbortController()\n\n const emit = (next: FooterEvent, row: Record<string, unknown>) => {\n input.trace?.write(\"ui.patch\", row)\n input.footer.event(next)\n }\n\n const finish = () => {\n if (!state.closed || draining) {\n return\n }\n\n done.resolve()\n }\n\n const close = () => {\n if (state.closed) {\n return\n }\n\n state.closed = true\n state.queue.length = 0\n // Ordinary turn signals map to session.interrupt; exiting should only detach the TUI.\n if (state.active?.mode === \"shell\") state.ctrl?.abort()\n admissionController.abort()\n stop.resolve({ type: \"closed\" })\n finish()\n }\n\n const drain = () => {\n if (draining || state.closed || state.queue.length === 0) {\n return\n }\n\n draining = (async () => {\n try {\n while (!state.closed && state.queue.length > 0) {\n const prompt = state.queue.shift()!\n\n if (prompt.mode !== \"shell\" && isNewCommand(prompt.text)) {\n if (!input.onNewSession) {\n emit(\n {\n type: \"stream.patch\",\n patch: {\n status: \"new sessions unavailable\",\n },\n },\n {\n status: \"new sessions unavailable\",\n },\n )\n continue\n }\n\n emit(\n {\n type: \"stream.patch\",\n patch: {\n phase: \"running\",\n status: \"starting new session\",\n },\n },\n {\n phase: \"running\",\n status: \"starting new session\",\n },\n )\n await input.onNewSession()\n continue\n }\n\n if (prompt.mode !== \"shell\" && isCompactCommand(prompt.text)) {\n emit(\n {\n type: \"stream.patch\",\n patch: {\n phase: \"running\",\n status: \"compacting session\",\n },\n },\n {\n phase: \"running\",\n status: \"compacting session\",\n },\n )\n await input.onCompact?.()\n continue\n }\n\n const sent =\n prompt.mode === \"shell\"\n ? prompt\n : {\n ...prompt,\n messageID: prompt.messageID ?? SessionMessage.ID.create(),\n }\n state.active = sent\n\n emit(\n { type: \"turn.send\" },\n {\n phase: \"running\",\n status: \"sending prompt\",\n },\n )\n const start = Date.now()\n const ctrl = new AbortController()\n const admission = Promise.withResolvers<void>()\n const version = admissionVersion\n state.ctrl = ctrl\n state.admission = admission.promise\n\n try {\n await input.footer.idle()\n if (state.closed) {\n break\n }\n\n if (sent.mode !== \"shell\") {\n const commit = {\n kind: \"user\",\n text: sent.text,\n phase: \"start\",\n source: \"system\",\n messageID: sent.messageID,\n } as const\n input.trace?.write(\"ui.commit\", commit)\n input.footer.append(commit)\n }\n input.onSend?.(sent, \"steer\")\n\n if (state.closed) {\n break\n }\n\n const task = input.run(sent, ctrl.signal, admission.resolve).then(\n () => ({ type: \"done\" as const }),\n (error) => ({ type: \"error\" as const, error }),\n )\n\n const next = await Promise.race([task, stop.promise])\n if (next.type === \"closed\") {\n break\n }\n\n if (next.type === \"error\") {\n throw next.error\n }\n if (sent.mode !== \"shell\" && admissionVersion !== version) {\n do {\n const current = admissionVersion\n await admissions\n if (state.closed) break\n await input.settle()\n if (current === admissionVersion) break\n } while (!state.closed)\n }\n } finally {\n admission.resolve()\n if (state.ctrl === ctrl) {\n state.ctrl = undefined\n }\n if (state.admission === admission.promise) state.admission = undefined\n\n if (sent.mode !== \"shell\") {\n const duration = Locale.duration(Math.max(0, Date.now() - start))\n emit(\n {\n type: \"turn.duration\",\n duration,\n },\n {\n duration,\n },\n )\n }\n state.active = undefined\n }\n }\n } catch (error) {\n done.reject(error)\n return\n } finally {\n draining = undefined\n emit(\n { type: \"turn.idle\" },\n {\n phase: \"idle\",\n status: \"\",\n },\n )\n }\n\n finish()\n })()\n }\n\n const submit = (prompt: RunPrompt) => {\n if (!prompt.text.trim() || state.closed) {\n return\n }\n\n if (prompt.mode !== \"shell\" && isExitCommand(prompt.text)) {\n input.footer.close()\n return\n }\n\n const active = state.active\n if (\n active &&\n active.mode !== \"shell\" &&\n prompt.mode !== \"shell\" &&\n prompt.command?.source !== \"skill\" &&\n !isNewCommand(prompt.text) &&\n !isCompactCommand(prompt.text) &&\n !state.queue.some(\n (item) => item.mode !== \"shell\" && (isNewCommand(item.text) || isCompactCommand(item.text)),\n )\n ) {\n const sent = { ...prompt, messageID: SessionMessage.ID.create() }\n const admission = state.admission\n admissionVersion += 1\n input.onSend?.(sent, \"queue\")\n admissions = admissions\n .then(() => admission)\n .then(() => input.admit(sent, admissionController.signal))\n .catch((error) => (state.closed ? undefined : input.onAdmissionError?.(sent, error)))\n return\n }\n\n state.queue.push(prompt)\n if (prompt.mode !== \"shell\" && (isNewCommand(prompt.text) || isCompactCommand(prompt.text))) {\n drain()\n return\n }\n\n emit(\n {\n type: \"first\",\n first: false,\n },\n {\n first: false,\n },\n )\n drain()\n }\n\n const offPrompt = input.footer.onPrompt((prompt) => {\n submit(prompt)\n })\n const offClose = input.footer.onClose(() => {\n close()\n })\n try {\n if (state.closed) {\n return\n }\n\n submit({\n text: input.initialInput ?? \"\",\n parts: [],\n })\n finish()\n await done.promise\n } finally {\n offPrompt()\n offClose()\n close()\n await draining?.catch(() => {})\n await admissions\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "BD60D005B34AABD664756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+cerebras@2.0.41+d6123d32214422cb/node_modules/@ai-sdk/cerebras/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/cerebras-provider.ts\nimport { OpenAICompatibleChatLanguageModel } from \"@ai-sdk/openai-compatible\";\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\n\n// src/version.ts\nvar VERSION = true ? \"2.0.41\" : \"0.0.0-test\";\n\n// src/cerebras-provider.ts\nvar cerebrasErrorSchema = z.object({\n message: z.string(),\n type: z.string(),\n param: z.string(),\n code: z.string()\n});\nvar cerebrasErrorStructure = {\n errorSchema: cerebrasErrorSchema,\n errorToMessage: (data) => data.message\n};\nfunction createCerebras(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.cerebras.ai/v1\"\n );\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"CEREBRAS_API_KEY\",\n description: \"Cerebras API key\"\n })}`,\n ...options.headers\n },\n `ai-sdk/cerebras/${VERSION}`\n );\n const createLanguageModel = (modelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n provider: `cerebras.chat`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: cerebrasErrorStructure,\n supportsStructuredOutputs: true\n });\n };\n const provider = (modelId) => createLanguageModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.languageModel = createLanguageModel;\n provider.chat = createLanguageModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar cerebras = createCerebras();\nexport {\n VERSION,\n cerebras,\n createCerebras\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": ";yVAaA,SAAI,OAAiB,cAGjB,OAAsB,OAAE,YAAO,MACjC,QAAS,EAAE,OAAO,EAClB,KAAM,EAAE,OAAO,EACf,MAAO,EAAE,OAAO,EAChB,KAAM,EAAE,OAAO,CACjB,CAAC,EACG,EAAyB,CAC3B,YAAa,EACb,eAAgB,CAAC,IAAS,EAAK,OACjC,EACA,SAAS,CAAc,CAAC,EAAU,CAAC,EAAG,CACpC,IAAI,EACJ,IAAM,EAAU,GACb,EAAK,EAAQ,UAAY,KAAO,EAAK,4BACxC,EACM,EAAa,IAAM,EACvB,CACE,cAAe,UAAU,EAAW,CAClC,OAAQ,EAAQ,OAChB,wBAAyB,mBACzB,YAAa,kBACf,CAAC,OACE,EAAQ,OACb,EACA,mBAAmB,GACrB,EACM,EAAsB,CAAC,IAAY,CACvC,OAAO,IAAI,EAAkC,EAAS,CACpD,SAAU,gBACV,IAAK,EAAG,UAAW,GAAG,IAAU,IAChC,QAAS,EACT,MAAO,EAAQ,MACf,eAAgB,EAChB,0BAA2B,EAC7B,CAAC,GAEG,EAAW,CAAC,IAAY,EAAoB,CAAO,EAWzD,OAVA,EAAS,qBAAuB,KAChC,EAAS,cAAgB,EACzB,EAAS,KAAO,EAChB,EAAS,eAAiB,CAAC,IAAY,CACrC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,gBAAiB,CAAC,GAErE,EAAS,mBAAqB,EAAS,eACvC,EAAS,WAAa,CAAC,IAAY,CACjC,MAAM,IAAI,EAAiB,CAAE,UAAS,UAAW,YAAa,CAAC,GAE1D,EAET,IAAI,EAAW,EAAe", | ||
| "debugId": "455839D7AE13278C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/status.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.status,\n Effect.fn(\"cli.service.status\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover({ ...options, version: undefined })\n process.stdout.write((found?.url ?? \"stopped\") + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAAA,mBAAS,gBAOT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,YACnC,OAAO,QAAG,yBAAoB,OAAE,cAAU,OAAG,MAC3C,SAAM,OAAU,WAAO,OAAc,aAAQ,EACvC,EAAQ,MAAO,EAAQ,SAAS,IAAK,EAAS,QAAS,MAAU,CAAC,EACxE,QAAQ,OAAO,OAAO,GAAO,KAAO,WAAa,CAAG,EACrD,CACH", | ||
| "debugId": "B4A84081252F027A64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/mini/prompt.shared.ts"], | ||
| "sourcesContent": [ | ||
| "// Pure state machine for the prompt input.\n//\n// Handles history ring navigation and prompt text helpers. All functions are\n// pure -- they take state in and return new state out, with no side effects.\n//\n// The history ring (PromptHistoryState) stores past prompts and tracks\n// the current browse position. When the user arrows up at cursor offset 0,\n// the current draft is saved and history begins. Arrowing past the end\n// restores the draft.\nexport { displayCharAt, displaySlice, mentionTriggerIndex } from \"../prompt/display\"\nimport { stringWidth } from \"../util/string-width\"\nimport type { RunPrompt } from \"./types\"\n\nconst HISTORY_LIMIT = 200\n\nexport type PromptHistoryState = {\n items: RunPrompt[]\n index: number | null\n draft: string\n}\n\nexport type PromptMove = {\n state: PromptHistoryState\n text?: string\n cursor?: number\n apply: boolean\n}\n\nexport function promptCopy(prompt: RunPrompt): RunPrompt {\n return {\n text: prompt.text,\n parts: structuredClone(prompt.parts),\n ...(prompt.mode ? { mode: prompt.mode } : {}),\n ...(prompt.command ? { command: prompt.command } : {}),\n }\n}\n\nexport function promptSame(a: RunPrompt, b: RunPrompt): boolean {\n return (\n a.mode === b.mode &&\n a.text === b.text &&\n JSON.stringify(a.parts) === JSON.stringify(b.parts) &&\n JSON.stringify(a.command) === JSON.stringify(b.command)\n )\n}\n\nexport function isExitCommand(input: string): boolean {\n const text = input.trim().toLowerCase()\n return text === \"/exit\" || text === \"/quit\" || text === \":q\"\n}\n\nexport function isNewCommand(input: string): boolean {\n return input.trim().toLowerCase() === \"/new\"\n}\n\nexport function isCompactCommand(input: string): boolean {\n const text = input.trim().toLowerCase()\n return text === \"/compact\" || text === \"/summarize\"\n}\n\nexport function createPromptHistory(items?: RunPrompt[]): PromptHistoryState {\n const list = (items ?? []).filter((item) => item.text.trim().length > 0).map(promptCopy)\n const next: RunPrompt[] = []\n for (const item of list) {\n if (next.length > 0 && promptSame(next[next.length - 1], item)) {\n continue\n }\n\n next.push(item)\n }\n\n return {\n items: next.slice(-HISTORY_LIMIT),\n index: null,\n draft: \"\",\n }\n}\n\nexport function pushPromptHistory(state: PromptHistoryState, prompt: RunPrompt): PromptHistoryState {\n if (!prompt.text.trim()) {\n return state\n }\n\n const next = promptCopy(prompt)\n if (state.items[state.items.length - 1] && promptSame(state.items[state.items.length - 1], next)) {\n return {\n ...state,\n index: null,\n draft: \"\",\n }\n }\n\n const items = [...state.items, next].slice(-HISTORY_LIMIT)\n return {\n ...state,\n items,\n index: null,\n draft: \"\",\n }\n}\n\nexport function movePromptHistory(state: PromptHistoryState, dir: -1 | 1, text: string, cursor: number): PromptMove {\n if (state.items.length === 0) {\n return { state, apply: false }\n }\n\n if (dir === -1 && cursor !== 0) {\n return { state, apply: false }\n }\n\n if (dir === 1 && cursor !== stringWidth(text)) {\n return { state, apply: false }\n }\n\n if (state.index === null) {\n if (dir === 1) {\n return { state, apply: false }\n }\n\n const idx = state.items.length - 1\n return {\n state: {\n ...state,\n index: idx,\n draft: text,\n },\n text: state.items[idx].text,\n cursor: 0,\n apply: true,\n }\n }\n\n const idx = state.index + dir\n if (idx < 0) {\n return { state, apply: false }\n }\n\n if (idx >= state.items.length) {\n return {\n state: {\n ...state,\n index: null,\n },\n text: state.draft,\n cursor: stringWidth(state.draft),\n apply: true,\n }\n }\n\n return {\n state: {\n ...state,\n index: idx,\n },\n text: state.items[idx].text,\n cursor: dir === -1 ? 0 : stringWidth(state.items[idx].text),\n apply: true,\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "13257437DF3A55DB64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/utils/open-responses-options.ts", "../ai/src/protocols/utils/openai-options.ts", "../ai/src/protocols/openai-chat.ts"], | ||
| "sourcesContent": [ | ||
| "import { Schema } from \"effect\"\nimport { TextVerbosity, type LLMRequest } from \"../../schema\"\n\nexport const ResponseIncludables = [\n \"file_search_call.results\",\n \"web_search_call.results\",\n \"web_search_call.action.sources\",\n \"message.input_image.image_url\",\n \"computer_call_output.output.image_url\",\n \"code_interpreter_call.outputs\",\n \"reasoning.encrypted_content\",\n \"message.output_text.logprobs\",\n] as const\nexport type ResponseIncludable = (typeof ResponseIncludables)[number]\n\nexport const ServiceTiers = [\"auto\", \"default\", \"flex\", \"priority\"] as const\nexport type ServiceTier = (typeof ServiceTiers)[number]\n\nconst TEXT_VERBOSITY = new Set<string>([\"low\", \"medium\", \"high\"])\nconst INCLUDABLES = new Set<string>(ResponseIncludables)\nconst SERVICE_TIERS = new Set<string>(ServiceTiers)\n\nconst isTextVerbosity = (value: unknown): value is Schema.Schema.Type<typeof TextVerbosity> =>\n typeof value === \"string\" && TEXT_VERBOSITY.has(value)\n\nconst isServiceTier = (value: unknown): value is ServiceTier => typeof value === \"string\" && SERVICE_TIERS.has(value)\n\nexport const ReasoningEffort = Schema.String\nexport const TextVerbositySchema = TextVerbosity\nexport const ResponseIncludableSchema = Schema.Literals(ResponseIncludables)\nexport const ServiceTierSchema = Schema.Literals(ServiceTiers)\n\nexport interface Resolved {\n readonly instructions?: string\n readonly store?: boolean\n readonly promptCacheKey?: string\n readonly reasoningEffort?: string\n readonly reasoningSummary?: \"auto\" | \"concise\" | \"detailed\"\n readonly include?: ReadonlyArray<ResponseIncludable>\n readonly textVerbosity?: Schema.Schema.Type<typeof TextVerbosity>\n readonly serviceTier?: ServiceTier\n}\n\nexport const resolve = (request: LLMRequest): Resolved => {\n const input = request.providerOptions?.[request.model.route.providerMetadataKey ?? \"openresponses\"]\n const include = Array.isArray(input?.include)\n ? input.include.filter((entry): entry is ResponseIncludable => INCLUDABLES.has(entry))\n : []\n const reasoningSummary = input?.reasoningSummary\n return {\n instructions: typeof input?.instructions === \"string\" ? input.instructions : undefined,\n store: typeof input?.store === \"boolean\" ? input.store : undefined,\n promptCacheKey: typeof input?.promptCacheKey === \"string\" ? input.promptCacheKey : undefined,\n reasoningEffort: typeof input?.reasoningEffort === \"string\" ? input.reasoningEffort : undefined,\n reasoningSummary:\n reasoningSummary === \"auto\" || reasoningSummary === \"concise\" || reasoningSummary === \"detailed\"\n ? reasoningSummary\n : undefined,\n include: include.length > 0 ? include : undefined,\n textVerbosity: isTextVerbosity(input?.textVerbosity) ? input.textVerbosity : undefined,\n serviceTier: isServiceTier(input?.serviceTier) ? input.serviceTier : undefined,\n }\n}\n\nexport * as OpenResponsesOptions from \"./open-responses-options\"\n", | ||
| "import { ReasoningEfforts } from \"../../schema\"\nimport { OpenResponsesOptions } from \"./open-responses-options\"\n\nexport const OpenAIReasoningEfforts = ReasoningEfforts\nexport type OpenAIReasoningEffort = string\n\n// Mirrors OpenAI's `ResponseIncludable` union from the official SDK. Keep this\n// in lockstep with `openai-node/src/resources/responses/responses.ts`.\nexport const OpenAIResponseIncludables = OpenResponsesOptions.ResponseIncludables\nexport type OpenAIResponseIncludable = OpenResponsesOptions.ResponseIncludable\nexport const OpenAIServiceTiers = OpenResponsesOptions.ServiceTiers\nexport type OpenAIServiceTier = OpenResponsesOptions.ServiceTier\n\nexport const OpenAIReasoningEffort = OpenResponsesOptions.ReasoningEffort\nexport const OpenAITextVerbosity = OpenResponsesOptions.TextVerbositySchema\nexport const OpenAIResponseIncludable = OpenResponsesOptions.ResponseIncludableSchema\nexport const OpenAIServiceTier = OpenResponsesOptions.ServiceTierSchema\n\nexport const isReasoningEffort = (effort: unknown): effort is OpenAIReasoningEffort => typeof effort === \"string\"\n\nexport const resolve = OpenResponsesOptions.resolve\n\nexport * as OpenAIOptions from \"./openai-options\"\n", | ||
| "import { Effect, Schema } from \"effect\"\nimport { Tool } from \"@opencode-ai/schema/tool\"\nimport { Route } from \"../route/client\"\nimport { Auth } from \"../route/auth\"\nimport { Endpoint } from \"../route/endpoint\"\nimport { HttpTransport } from \"../route/transport\"\nimport { Protocol } from \"../route/protocol\"\nimport {\n LLMError,\n LLMEvent,\n Usage,\n type FinishReason,\n type FinishReasonDetails,\n type CacheHint,\n type JsonSchema,\n type LLMRequest,\n type MediaPart,\n type ReasoningPart,\n type TextPart,\n type ToolCallPart,\n type ToolDefinition,\n} from \"../schema\"\nimport { classifyProviderFailure } from \"../provider-error\"\nimport { isRecord, JsonObject, optionalArray, optionalNull, ProviderShared } from \"./shared\"\nimport { OpenAIOptions } from \"./utils/openai-options\"\nimport { Lifecycle } from \"./utils/lifecycle\"\nimport { ToolSchemaProjection } from \"./utils/tool-schema\"\nimport { ToolStream } from \"./utils/tool-stream\"\n\nconst ADAPTER = \"openai-chat\"\nconst IMAGE_MIMES = new Set<string>(ProviderShared.IMAGE_MIMES)\nconst RESERVED_REASONING_FIELDS = new Set([\"role\", \"content\", \"tool_calls\"])\nexport const DEFAULT_BASE_URL = \"https://api.openai.com/v1\"\nexport const PATH = \"/chat/completions\"\n\n// =============================================================================\n// Request Body Schema\n// =============================================================================\n// The body schema is the provider-native JSON body. `fromRequest` below builds\n// this shape from the common `LLMRequest`, then `Route.make` validates and\n// JSON-encodes it before transport.\nconst OpenAIChatCacheControl = Schema.Struct({\n type: Schema.Literal(\"ephemeral\"),\n ttl: Schema.optional(Schema.String),\n})\n\nconst OpenAIChatFunction = Schema.Struct({\n name: Schema.String,\n description: Schema.String,\n parameters: JsonObject,\n})\n\nconst OpenAIChatTool = Schema.Struct({\n type: Schema.tag(\"function\"),\n function: OpenAIChatFunction,\n cache_control: Schema.optional(OpenAIChatCacheControl),\n})\ntype OpenAIChatTool = Schema.Schema.Type<typeof OpenAIChatTool>\n\nconst OpenAIChatAssistantToolCall = Schema.Struct({\n id: Schema.String,\n type: Schema.tag(\"function\"),\n function: Schema.Struct({\n name: Schema.String,\n arguments: Schema.String,\n }),\n})\ntype OpenAIChatAssistantToolCall = Schema.Schema.Type<typeof OpenAIChatAssistantToolCall>\n\nconst OpenAIChatUserContent = Schema.Union([\n Schema.Struct({\n type: Schema.Literal(\"text\"),\n text: Schema.String,\n cache_control: Schema.optional(OpenAIChatCacheControl),\n }),\n Schema.Struct({\n type: Schema.Literal(\"image_url\"),\n image_url: Schema.Struct({ url: Schema.String }),\n }),\n])\n\nconst OpenAIChatMessage = Schema.Union([\n Schema.Struct({\n role: Schema.Literal(\"system\"),\n content: Schema.Union([Schema.String, Schema.Array(OpenAIChatUserContent)]),\n }),\n Schema.Struct({\n role: Schema.Literal(\"user\"),\n content: Schema.Union([Schema.String, Schema.Array(OpenAIChatUserContent)]),\n }),\n Schema.StructWithRest(\n Schema.Struct({\n role: Schema.Literal(\"assistant\"),\n content: Schema.NullOr(Schema.String),\n tool_calls: optionalArray(OpenAIChatAssistantToolCall),\n reasoning_content: Schema.optional(Schema.String),\n reasoning: Schema.optional(Schema.String),\n reasoning_text: Schema.optional(Schema.String),\n reasoning_details: Schema.optional(Schema.Unknown),\n cache_control: Schema.optional(OpenAIChatCacheControl),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n ),\n Schema.Struct({\n role: Schema.Literal(\"tool\"),\n tool_call_id: Schema.String,\n content: Schema.String,\n cache_control: Schema.optional(OpenAIChatCacheControl),\n }),\n]).pipe(Schema.toTaggedUnion(\"role\"))\ntype OpenAIChatMessage = Schema.Schema.Type<typeof OpenAIChatMessage>\n\nconst OpenAIChatToolChoice = Schema.Union([\n Schema.Literals([\"auto\", \"none\", \"required\"]),\n Schema.Struct({\n type: Schema.tag(\"function\"),\n function: Schema.Struct({ name: Schema.String }),\n }),\n])\n\nexport const bodyFields = {\n model: Schema.String,\n messages: Schema.Array(OpenAIChatMessage),\n tools: optionalArray(OpenAIChatTool),\n tool_choice: Schema.optional(OpenAIChatToolChoice),\n stream: Schema.Literal(true),\n stream_options: Schema.optional(Schema.Struct({ include_usage: Schema.Boolean })),\n store: Schema.optional(Schema.Boolean),\n reasoning_effort: Schema.optional(OpenAIOptions.OpenAIReasoningEffort),\n max_completion_tokens: Schema.optional(Schema.Number),\n max_tokens: Schema.optional(Schema.Number),\n temperature: Schema.optional(Schema.Number),\n top_p: Schema.optional(Schema.Number),\n frequency_penalty: Schema.optional(Schema.Number),\n presence_penalty: Schema.optional(Schema.Number),\n seed: Schema.optional(Schema.Number),\n stop: optionalArray(Schema.String),\n}\nconst OpenAIChatBody = Schema.Struct(bodyFields)\nexport type OpenAIChatBody = Schema.Schema.Type<typeof OpenAIChatBody>\n\n// =============================================================================\n// Streaming Event Schema\n// =============================================================================\n// The event schema is one decoded SSE `data:` payload. `Framing.sse` splits the\n// byte stream into strings, then `Protocol.jsonEvent` decodes each string into\n// this provider-native event shape.\nconst OpenAIChatUsage = Schema.Struct({\n prompt_tokens: Schema.optional(Schema.Number),\n completion_tokens: Schema.optional(Schema.Number),\n total_tokens: Schema.optional(Schema.Number),\n prompt_tokens_details: optionalNull(\n Schema.Struct({\n cached_tokens: Schema.optional(Schema.Number),\n cache_write_tokens: Schema.optional(Schema.Number),\n }),\n ),\n completion_tokens_details: optionalNull(\n Schema.Struct({\n reasoning_tokens: Schema.optional(Schema.Number),\n }),\n ),\n})\n\nconst OpenAIChatToolCallDeltaFunction = Schema.Struct({\n name: optionalNull(Schema.String),\n arguments: optionalNull(Schema.String),\n})\n\nconst OpenAIChatToolCallDelta = Schema.Struct({\n index: Schema.Number,\n id: optionalNull(Schema.String),\n function: optionalNull(OpenAIChatToolCallDeltaFunction),\n})\ntype OpenAIChatToolCallDelta = Schema.Schema.Type<typeof OpenAIChatToolCallDelta>\n\nconst OpenAIChatDelta = Schema.StructWithRest(\n Schema.Struct({\n content: optionalNull(Schema.String),\n reasoning_content: optionalNull(Schema.String),\n reasoning: optionalNull(Schema.String),\n reasoning_text: optionalNull(Schema.String),\n reasoning_details: optionalNull(Schema.Unknown),\n tool_calls: optionalNull(Schema.Array(OpenAIChatToolCallDelta)),\n }),\n [Schema.Record(Schema.String, Schema.Unknown)],\n)\n\nconst OpenAIChatChoice = Schema.Struct({\n delta: optionalNull(OpenAIChatDelta),\n finish_reason: optionalNull(Schema.String),\n native_finish_reason: optionalNull(Schema.String),\n})\n\nconst OpenAIChatError = Schema.Struct({\n code: optionalNull(Schema.Union([Schema.String, Schema.Number])),\n message: Schema.String,\n})\n\nexport const OpenAIChatEvent = Schema.Struct({\n choices: optionalNull(Schema.Array(OpenAIChatChoice)),\n usage: optionalNull(OpenAIChatUsage),\n error: optionalNull(OpenAIChatError),\n})\nexport type OpenAIChatEvent = Schema.Schema.Type<typeof OpenAIChatEvent>\ntype OpenAIChatRequestMessage = LLMRequest[\"messages\"][number]\n\ninterface PendingToolDelta {\n readonly id?: string\n readonly name?: string\n readonly input: string\n}\n\nexport interface ParserState {\n readonly tools: ToolStream.State<number>\n readonly pendingTools: Partial<Record<number, PendingToolDelta>>\n readonly toolCallEvents: ReadonlyArray<LLMEvent>\n readonly usage?: Usage\n readonly finishReason?: FinishReasonDetails\n readonly lifecycle: Lifecycle.State\n readonly reasoningField?: string\n readonly reasoningDetails: Array<unknown>\n readonly reasoningDetailsObserved: boolean\n readonly reasoningEmitted: boolean\n}\n\n// =============================================================================\n// Request Lowering\n// =============================================================================\n// Lowering is the only place that knows how common LLM messages map onto the\n// OpenAI Chat wire format. Keep provider quirks here instead of leaking native\n// fields into `LLMRequest`.\ninterface LoweringOptions {\n readonly cacheControl?: (\n cache: CacheHint | undefined,\n ) => Schema.Schema.Type<typeof OpenAIChatCacheControl> | undefined\n}\n\nconst lowerTool = (tool: ToolDefinition, inputSchema: JsonSchema, options: LoweringOptions): OpenAIChatTool => ({\n type: \"function\",\n function: {\n name: tool.name,\n description: tool.description,\n parameters: ToolSchemaProjection.openAI(inputSchema),\n },\n cache_control: options.cacheControl?.(tool.cache),\n})\n\nconst lowerToolChoice = (toolChoice: NonNullable<LLMRequest[\"toolChoice\"]>) =>\n ProviderShared.matchToolChoice(\"OpenAI Chat\", toolChoice, {\n auto: () => \"auto\" as const,\n none: () => \"none\" as const,\n required: () => \"required\" as const,\n tool: (name) => ({ type: \"function\" as const, function: { name } }),\n })\n\nconst lowerToolCall = (part: ToolCallPart): OpenAIChatAssistantToolCall => ({\n id: part.id,\n type: \"function\",\n function: {\n name: part.name,\n arguments: ProviderShared.encodeJson(part.input),\n },\n})\n\nconst lowerMedia = Effect.fn(\"OpenAIChat.lowerMedia\")(function* (part: MediaPart) {\n const media = yield* ProviderShared.validateMedia(\"OpenAI Chat\", part, IMAGE_MIMES)\n return { type: \"image_url\" as const, image_url: { url: media.dataUrl } }\n})\n\nconst openAICompatibleReasoningContent = (native: unknown) =>\n isRecord(native) && typeof native.reasoning_content === \"string\" ? native.reasoning_content : undefined\n\nconst reasoningField = (part: ReasoningPart) => {\n const field = part.providerMetadata?.openai?.reasoningField\n return typeof field === \"string\" ? field : undefined\n}\n\nconst reasoningDetails = (parts: ReadonlyArray<ReasoningPart>, native: unknown) => {\n const observed = parts.flatMap((part) => {\n const details = part.providerMetadata?.openai?.reasoningDetails\n return Array.isArray(details) ? details : []\n })\n if (parts.some((part) => Array.isArray(part.providerMetadata?.openai?.reasoningDetails))) return observed\n if (isRecord(native) && Array.isArray(native.reasoning_details)) return native.reasoning_details\n}\n\nconst lowerUserMessage = Effect.fn(\"OpenAIChat.lowerUserMessage\")(function* (\n message: OpenAIChatRequestMessage,\n options: LoweringOptions,\n) {\n const content: Array<Schema.Schema.Type<typeof OpenAIChatUserContent>> = []\n for (const part of message.content) {\n if (part.type === \"text\") {\n content.push({ type: \"text\", text: part.text, cache_control: options.cacheControl?.(part.cache) })\n continue\n }\n if (part.type === \"media\") {\n content.push(yield* lowerMedia(part))\n continue\n }\n return yield* ProviderShared.unsupportedContent(\"OpenAI Chat\", \"user\", [\"text\", \"media\"])\n }\n if (content.every((part) => part.type === \"text\" && part.cache_control === undefined))\n return {\n role: \"user\" as const,\n content: content.map((part) => (part.type === \"text\" ? part.text : \"\")).join(\"\"),\n }\n return { role: \"user\" as const, content }\n})\n\nconst lowerAssistantMessage = Effect.fn(\"OpenAIChat.lowerAssistantMessage\")(function* (\n message: OpenAIChatRequestMessage,\n configuredField?: string,\n options: LoweringOptions = {},\n) {\n const content: TextPart[] = []\n const reasoning: ReasoningPart[] = []\n const toolCalls: OpenAIChatAssistantToolCall[] = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"text\", \"reasoning\", \"tool-call\"]))\n return yield* ProviderShared.unsupportedContent(\"OpenAI Chat\", \"assistant\", [\"text\", \"reasoning\", \"tool-call\"])\n if (part.type === \"text\") {\n content.push(part)\n continue\n }\n if (part.type === \"reasoning\") {\n reasoning.push(part)\n continue\n }\n if (part.type === \"tool-call\") {\n toolCalls.push(lowerToolCall(part))\n continue\n }\n }\n const text = reasoning.map((part) => part.text).join(\"\")\n const details = reasoningDetails(reasoning, message.native?.openaiCompatible)\n const observedField = reasoning.map(reasoningField).find((value) => value !== undefined)\n const nativeReasoning = openAICompatibleReasoningContent(message.native?.openaiCompatible)\n const fullyStructured = reasoning.every((part) => Array.isArray(part.providerMetadata?.openai?.reasoningDetails))\n const field = (() => {\n if (configuredField !== undefined) return configuredField\n if (reasoning.length === 0) return undefined\n if (observedField !== undefined) return observedField\n if (nativeReasoning !== undefined) return \"reasoning_content\"\n if (!fullyStructured) return \"reasoning_content\"\n })()\n const reasoningText = (() => {\n if (configuredField !== undefined) return reasoning.length === 0 ? (nativeReasoning ?? \"\") : text\n if (reasoning.length === 0) return nativeReasoning\n return text\n })()\n const cached = message.content.findLast((part) => \"cache\" in part && part.cache !== undefined)\n const result = {\n role: \"assistant\" as const,\n content: content.length === 0 ? null : ProviderShared.joinText(content),\n tool_calls: toolCalls.length === 0 ? undefined : toolCalls,\n reasoning_details: details,\n cache_control: options.cacheControl?.(cached && \"cache\" in cached ? cached.cache : undefined),\n }\n if (field === undefined || reasoningText === undefined) return result\n return { ...result, [field]: reasoningText }\n})\n\nconst lowerToolMessages = Effect.fn(\"OpenAIChat.lowerToolMessages\")(function* (\n message: OpenAIChatRequestMessage,\n options: LoweringOptions,\n) {\n const messages: OpenAIChatMessage[] = []\n const images: Array<Schema.Schema.Type<typeof OpenAIChatUserContent>> = []\n for (const part of message.content) {\n if (!ProviderShared.supportsContent(part, [\"tool-result\"]))\n return yield* ProviderShared.unsupportedContent(\"OpenAI Chat\", \"tool\", [\"tool-result\"])\n if (part.result.type !== \"content\") {\n messages.push({\n role: \"tool\",\n tool_call_id: part.id,\n content: ProviderShared.toolResultText(part),\n cache_control: options.cacheControl?.(part.cache),\n })\n continue\n }\n const content: ReadonlyArray<Tool.Content> = part.result.value\n const text = content.filter((item) => item.type === \"text\").map((item) => item.text)\n messages.push({\n role: \"tool\",\n tool_call_id: part.id,\n content: text.join(\"\\n\"),\n cache_control: options.cacheControl?.(part.cache),\n })\n const files = content.filter((item) => item.type === \"file\")\n images.push(\n ...(yield* Effect.forEach(files, (item) =>\n lowerMedia({ type: \"media\", mediaType: item.mime, data: item.uri, filename: item.name }),\n )),\n )\n }\n return { messages, images }\n})\n\nconst lowerMessage = Effect.fn(\"OpenAIChat.lowerMessage\")(function* (\n message: OpenAIChatRequestMessage,\n reasoningField?: string,\n options: LoweringOptions = {},\n) {\n if (message.role === \"user\") return [yield* lowerUserMessage(message, options)]\n if (message.role === \"assistant\") return [yield* lowerAssistantMessage(message, reasoningField, options)]\n return (yield* lowerToolMessages(message, options)).messages\n})\n\nconst lowerMessages = Effect.fn(\"OpenAIChat.lowerMessages\")(function* (request: LLMRequest, options: LoweringOptions) {\n const system: OpenAIChatMessage[] =\n request.system.length === 0\n ? []\n : request.system.some((part) => part.cache !== undefined) && options.cacheControl !== undefined\n ? [\n {\n role: \"system\",\n content: request.system.map((part) => ({\n type: \"text\",\n text: part.text,\n cache_control: options.cacheControl?.(part.cache),\n })),\n },\n ]\n : [{ role: \"system\", content: ProviderShared.joinText(request.system) }]\n const messages = [...system]\n const pendingImages: Array<Schema.Schema.Type<typeof OpenAIChatUserContent>> = []\n const flushImages = () => {\n if (pendingImages.length === 0) return\n messages.push({ role: \"user\", content: pendingImages.splice(0) })\n }\n for (const message of request.messages) {\n if (message.role === \"system\") {\n const part = yield* ProviderShared.wrappedSystemUpdate(\"OpenAI Chat\", message)\n if (pendingImages.length > 0) {\n messages.push({\n role: \"user\",\n content: [\n ...pendingImages.splice(0),\n { type: \"text\", text: part.text, cache_control: options.cacheControl?.(part.cache) },\n ],\n })\n continue\n }\n const previous = messages.at(-1)\n if (previous?.role === \"user\" && typeof previous.content === \"string\")\n messages[messages.length - 1] = options.cacheControl?.(part.cache)\n ? {\n role: \"user\",\n content: [\n { type: \"text\", text: previous.content },\n { type: \"text\", text: part.text, cache_control: options.cacheControl(part.cache) },\n ],\n }\n : { role: \"user\", content: `${previous.content}\\n${part.text}` }\n else if (previous?.role === \"user\" && Array.isArray(previous.content))\n messages[messages.length - 1] = {\n role: \"user\",\n content: [\n ...previous.content,\n { type: \"text\", text: part.text, cache_control: options.cacheControl?.(part.cache) },\n ],\n }\n else\n messages.push(\n options.cacheControl?.(part.cache)\n ? {\n role: \"user\",\n content: [{ type: \"text\", text: part.text, cache_control: options.cacheControl(part.cache) }],\n }\n : { role: \"user\", content: part.text },\n )\n continue\n }\n if (message.role === \"tool\") {\n const lowered = yield* lowerToolMessages(message, options)\n messages.push(...lowered.messages)\n pendingImages.push(...lowered.images)\n continue\n }\n flushImages()\n messages.push(...(yield* lowerMessage(message, request.model.compatibility?.reasoningField, options)))\n }\n flushImages()\n return messages\n})\n\nconst lowerOptions = (request: LLMRequest) => {\n const options = OpenAIOptions.resolve(request)\n return {\n ...(options.store !== undefined ? { store: options.store } : {}),\n ...(options.reasoningEffort ? { reasoning_effort: options.reasoningEffort } : {}),\n }\n}\n\nexport const fromRequest = Effect.fn(\"OpenAIChat.fromRequest\")(function* (\n request: LLMRequest,\n options: LoweringOptions = {},\n) {\n // `fromRequest` returns the provider body only. Endpoint, auth, framing,\n // validation, and HTTP execution are composed by `Route.make`.\n const reasoningField = request.model.compatibility?.reasoningField\n if (reasoningField && RESERVED_REASONING_FIELDS.has(reasoningField))\n return yield* ProviderShared.invalidRequest(\n `OpenAI Chat reasoning field conflicts with reserved field ${reasoningField}`,\n )\n const generation = request.generation\n const toolSchemaCompatibility = request.model.compatibility?.toolSchema\n const maxTokensField = request.model.compatibility?.maxTokensField ?? \"max_tokens\"\n return {\n model: request.model.id,\n messages: yield* lowerMessages(request, options),\n tools:\n request.tools.length === 0\n ? undefined\n : request.tools.map((tool) =>\n lowerTool(\n tool,\n ToolSchemaProjection.modelCompatibility(tool.inputSchema, toolSchemaCompatibility),\n options,\n ),\n ),\n tool_choice: request.toolChoice ? yield* lowerToolChoice(request.toolChoice) : undefined,\n stream: true as const,\n stream_options: { include_usage: true },\n ...(maxTokensField === \"max_completion_tokens\"\n ? { max_completion_tokens: generation?.maxTokens }\n : { max_tokens: generation?.maxTokens }),\n temperature: generation?.temperature,\n top_p: generation?.topP,\n frequency_penalty: generation?.frequencyPenalty,\n presence_penalty: generation?.presencePenalty,\n seed: generation?.seed,\n stop: generation?.stop,\n ...lowerOptions(request),\n }\n})\n\n// =============================================================================\n// Stream Parsing\n// =============================================================================\n// Streaming parsers are small state machines: every event returns a new state\n// plus the common `LLMEvent`s produced by that event. Tool calls are accumulated\n// because OpenAI streams JSON arguments across multiple deltas.\nconst mapFinishReason = (reason: string | null | undefined): FinishReason => {\n if (reason === \"stop\") return \"stop\"\n if (reason === \"length\") return \"length\"\n if (reason === \"content_filter\") return \"content-filter\"\n if (reason === \"function_call\" || reason === \"tool_calls\") return \"tool-calls\"\n if (reason === \"error\") return \"error\"\n return \"unknown\"\n}\n\n// OpenAI Chat reports `prompt_tokens` (inclusive total) with a\n// cached-read and cache-write subsets, and `completion_tokens` (inclusive\n// total) with a `reasoning_tokens` subset. We pass the inclusive totals\n// through and derive the non-cached breakdown so the `LLM.Usage` contract is\n// satisfied on both sides.\nconst mapUsage = (usage: OpenAIChatEvent[\"usage\"]): Usage | undefined => {\n if (!usage) return undefined\n const cached = usage.prompt_tokens_details?.cached_tokens\n const cacheWrite = usage.prompt_tokens_details?.cache_write_tokens\n const reasoning = usage.completion_tokens_details?.reasoning_tokens\n const nonCached = ProviderShared.subtractTokens(usage.prompt_tokens, ProviderShared.sumTokens(cached, cacheWrite))\n return new Usage({\n inputTokens: usage.prompt_tokens,\n outputTokens: usage.completion_tokens,\n nonCachedInputTokens: nonCached,\n cacheReadInputTokens: cached,\n cacheWriteInputTokens: cacheWrite,\n reasoningTokens: reasoning,\n totalTokens: ProviderShared.totalTokens(usage.prompt_tokens, usage.completion_tokens, usage.total_tokens),\n providerMetadata: { openai: usage },\n })\n}\n\nconst reasoningDelta = (\n delta: Schema.Schema.Type<typeof OpenAIChatDelta> | null | undefined,\n configuredField?: string,\n) => {\n if (!delta) return undefined\n const fields = new Set([configuredField, \"reasoning_content\", \"reasoning\", \"reasoning_text\"])\n for (const field of fields) {\n if (field === undefined) continue\n const text = delta[field]\n if (typeof text === \"string\" && text.length > 0) return { field, text }\n }\n return undefined\n}\n\nconst detailText = (details: ReadonlyArray<unknown>) => {\n const text = details.flatMap((detail) => {\n if (!isRecord(detail)) return []\n if (detail.type === \"reasoning.text\" && typeof detail.text === \"string\" && detail.text) return [detail.text]\n if (detail.type === \"reasoning.summary\" && typeof detail.summary === \"string\" && detail.summary)\n return [detail.summary]\n return []\n })\n if (text.length > 0) return text.join(\"\")\n}\n\nconst appendReasoningDetails = (result: Array<unknown>, details: ReadonlyArray<unknown>) => {\n for (const detail of details) {\n const previous = result.at(-1)\n if (\n !isRecord(previous) ||\n previous.type !== \"reasoning.text\" ||\n !isRecord(detail) ||\n detail.type !== \"reasoning.text\" ||\n conflictingReasoningTextDetails(previous, detail)\n ) {\n result.push(detail)\n continue\n }\n result[result.length - 1] = {\n ...previous,\n ...Object.fromEntries(Object.entries(detail).filter((entry) => entry[1] !== undefined)),\n text: `${typeof previous.text === \"string\" ? previous.text : \"\"}${typeof detail.text === \"string\" ? detail.text : \"\"}`,\n signature: mergeDetailValue(previous.signature, detail.signature),\n format: mergeDetailValue(previous.format, detail.format),\n }\n }\n}\n\nconst mergeDetailValue = (previous: unknown, current: unknown) =>\n previous || current || (previous !== undefined ? previous : current)\n\nconst conflictingReasoningTextDetails = (previous: Record<string, unknown>, current: Record<string, unknown>) =>\n conflictingDetailValue(previous.id, current.id) ||\n conflictingDetailValue(previous.index, current.index) ||\n conflictingDetailValue(previous.format, current.format) ||\n (Boolean(previous.signature) && Boolean(current.signature) && previous.signature !== current.signature)\n\nconst conflictingDetailValue = (previous: unknown, current: unknown) =>\n previous !== undefined && previous !== null && current !== undefined && current !== null && previous !== current\n\nconst reasoningMetadata = (field: ParserState[\"reasoningField\"], details?: ReadonlyArray<unknown>) => ({\n openai: {\n ...(field ? { reasoningField: field } : {}),\n ...(details ? { reasoningDetails: details } : {}),\n },\n})\n\nconst step = (state: ParserState, event: OpenAIChatEvent) =>\n Effect.gen(function* () {\n if (event.error)\n return yield* new LLMError({\n module: ADAPTER,\n method: \"stream\",\n reason: classifyProviderFailure({\n message: event.error.message,\n code: event.error.code === undefined || event.error.code === null ? undefined : String(event.error.code),\n status: typeof event.error.code === \"number\" ? event.error.code : undefined,\n }),\n })\n const events: LLMEvent[] = []\n const usage = mapUsage(event.usage) ?? state.usage\n const choice = event.choices?.[0]\n const finishReason = choice?.finish_reason\n ? { normalized: mapFinishReason(choice.finish_reason), raw: choice.native_finish_reason ?? choice.finish_reason }\n : state.finishReason\n const delta = choice?.delta\n const toolDeltas = delta?.tool_calls ?? []\n let tools = state.tools\n let pendingTools = state.pendingTools\n\n let lifecycle = state.lifecycle\n\n const reasoning = reasoningDelta(delta, state.reasoningField)\n const reasoningField = state.reasoningField ?? (!state.lifecycle.text.has(\"text-0\") ? reasoning?.field : undefined)\n const detailDelta = Array.isArray(delta?.reasoning_details) ? delta.reasoning_details : undefined\n if (detailDelta !== undefined) appendReasoningDetails(state.reasoningDetails, detailDelta)\n const reasoningDetailsObserved = state.reasoningDetailsObserved || detailDelta !== undefined\n const deltaMetadata = reasoningMetadata(reasoningField)\n const text = detailDelta?.length ? (detailText(detailDelta) ?? reasoning?.text) : reasoning?.text\n if (!state.lifecycle.text.has(\"text-0\") && text !== undefined)\n lifecycle = Lifecycle.reasoningDelta(lifecycle, events, \"reasoning-0\", text, deltaMetadata)\n else if (\n reasoningDetailsObserved &&\n !lifecycle.reasoning.has(\"reasoning-0\") &&\n (Boolean(delta?.content) || toolDeltas.length > 0)\n )\n lifecycle = Lifecycle.reasoningStart(lifecycle, events, \"reasoning-0\", deltaMetadata)\n const reasoningEmitted = state.reasoningEmitted || lifecycle.reasoning.has(\"reasoning-0\")\n\n if (delta?.content) {\n lifecycle = Lifecycle.reasoningEnd(\n lifecycle,\n events,\n \"reasoning-0\",\n reasoningMetadata(reasoningField, reasoningDetailsObserved ? state.reasoningDetails : undefined),\n )\n lifecycle = Lifecycle.textDelta(lifecycle, events, \"text-0\", delta.content)\n }\n\n for (const tool of toolDeltas) {\n const current = tools[tool.index]\n const pending = pendingTools[tool.index]\n const id = current?.id ?? pending?.id ?? (tool.id || undefined)\n const name = current?.name ?? pending?.name ?? (tool.function?.name || undefined)\n const text = `${pending?.input ?? \"\"}${tool.function?.arguments ?? \"\"}`\n if (!current && (!id || !name)) {\n pendingTools = { ...pendingTools, [tool.index]: { id: id || undefined, name: name || undefined, input: text } }\n continue\n }\n if (pending) {\n pendingTools = { ...pendingTools }\n delete pendingTools[tool.index]\n }\n const result = ToolStream.appendOrStart(\n ADAPTER,\n tools,\n tool.index,\n { id: id || undefined, name: name || undefined, text },\n \"OpenAI Chat tool call delta is missing id or name\",\n )\n if (ToolStream.isError(result)) return yield* result\n tools = result.tools\n if (result.events.length) lifecycle = Lifecycle.stepStart(lifecycle, events)\n events.push(...result.events)\n }\n\n if (finishReason !== undefined && state.finishReason === undefined && Object.keys(pendingTools).length > 0)\n return yield* ProviderShared.eventError(ADAPTER, \"OpenAI Chat tool call delta is missing id or name\")\n\n // Finalize accumulated tool inputs eagerly when finish_reason arrives so\n // valid calls and malformed local calls settle independently.\n const finished =\n finishReason !== undefined && state.finishReason === undefined && Object.keys(tools).length > 0\n ? yield* ToolStream.finishAll(ADAPTER, tools)\n : undefined\n\n return [\n {\n tools: finished?.tools ?? tools,\n pendingTools,\n toolCallEvents: finished?.events ?? state.toolCallEvents,\n usage,\n finishReason,\n lifecycle,\n reasoningField,\n reasoningDetails: state.reasoningDetails,\n reasoningDetailsObserved,\n reasoningEmitted,\n },\n events,\n ] as const\n })\n\nconst finishEvents = (state: ParserState): ReadonlyArray<LLMEvent> => {\n const events: LLMEvent[] = []\n const hasToolCalls = state.toolCallEvents.length > 0\n const reason = state.finishReason\n ? {\n ...state.finishReason,\n normalized:\n state.finishReason.normalized === \"stop\" && hasToolCalls ? \"tool-calls\" : state.finishReason.normalized,\n }\n : undefined\n const metadata = reasoningMetadata(\n state.reasoningField,\n state.reasoningDetailsObserved ? state.reasoningDetails : undefined,\n )\n const started =\n state.reasoningDetailsObserved && !state.reasoningEmitted\n ? Lifecycle.reasoningStart(state.lifecycle, events, \"reasoning-0\", reasoningMetadata(state.reasoningField))\n : state.lifecycle\n const ended = Lifecycle.reasoningEnd(started, events, \"reasoning-0\", metadata)\n const lifecycle = state.toolCallEvents.length ? Lifecycle.stepStart(ended, events) : ended\n events.push(...state.toolCallEvents)\n if (reason) Lifecycle.finish(lifecycle, events, { reason, usage: state.usage })\n return events\n}\n\n// =============================================================================\n// Protocol And OpenAI Route\n// =============================================================================\n/**\n * The OpenAI Chat protocol — request body construction, body schema, and the\n * streaming-event state machine. Reused by every route that speaks OpenAI Chat\n * over HTTP+SSE: native OpenAI, DeepSeek, TogetherAI, Cerebras, Baseten,\n * Fireworks, DeepInfra, and (once added) Azure OpenAI Chat.\n */\nexport const protocol = Protocol.make({\n id: ADAPTER,\n body: {\n schema: OpenAIChatBody,\n from: fromRequest,\n },\n stream: {\n event: Protocol.jsonEvent(OpenAIChatEvent),\n initial: (request) => ({\n tools: ToolStream.empty<number>(),\n pendingTools: {},\n toolCallEvents: [],\n lifecycle: Lifecycle.initial(),\n reasoningField: request.model.compatibility?.reasoningField,\n reasoningDetails: [],\n reasoningDetailsObserved: false,\n reasoningEmitted: false,\n }),\n step,\n onHalt: finishEvents,\n },\n})\n\nexport const httpTransport = HttpTransport.sseJson.with<OpenAIChatBody>()\n\nexport const route = Route.make({\n id: ADAPTER,\n provider: \"openai\",\n providerMetadataKey: \"openai\",\n protocol,\n endpoint: Endpoint.path(PATH, { baseURL: DEFAULT_BASE_URL }),\n auth: Auth.none,\n transport: httpTransport,\n})\n\nexport * as OpenAIChat from \"./openai-chat\"\n" | ||
| ], | ||
| "mappings": ";mzBAGO,SAAM,OAAsB,MACjC,2BACA,0BACA,iCACA,gCACA,wCACA,gCACA,8BACA,8BACF,EAGa,EAAe,CAAC,OAAQ,UAAW,OAAQ,UAAU,EAG5D,GAAiB,IAAI,IAAY,CAAC,MAAO,SAAU,MAAM,CAAC,EAC1D,GAAc,IAAI,IAAY,CAAmB,EACjD,GAAgB,IAAI,IAAY,CAAY,EAE5C,GAAkB,CAAC,IACvB,OAAO,IAAU,UAAY,GAAe,IAAI,CAAK,EAEjD,GAAgB,CAAC,IAAyC,OAAO,IAAU,UAAY,GAAc,IAAI,CAAK,EAEvG,GAAkB,EAAO,OACzB,GAAsB,EACtB,GAA2B,EAAO,SAAS,CAAmB,EAC9D,GAAoB,EAAO,SAAS,CAAY,EAahD,GAAU,CAAC,IAAkC,CACxD,IAAM,EAAQ,EAAQ,kBAAkB,EAAQ,MAAM,MAAM,qBAAuB,iBAC7E,EAAU,MAAM,QAAQ,GAAO,OAAO,EACxC,EAAM,QAAQ,OAAO,CAAC,IAAuC,GAAY,IAAI,CAAK,CAAC,EACnF,CAAC,EACC,EAAmB,GAAO,iBAChC,MAAO,CACL,aAAc,OAAO,GAAO,eAAiB,SAAW,EAAM,aAAe,OAC7E,MAAO,OAAO,GAAO,QAAU,UAAY,EAAM,MAAQ,OACzD,eAAgB,OAAO,GAAO,iBAAmB,SAAW,EAAM,eAAiB,OACnF,gBAAiB,OAAO,GAAO,kBAAoB,SAAW,EAAM,gBAAkB,OACtF,iBACE,IAAqB,QAAU,IAAqB,WAAa,IAAqB,WAClF,EACA,OACN,QAAS,EAAQ,OAAS,EAAI,EAAU,OACxC,cAAe,GAAgB,GAAO,aAAa,EAAI,EAAM,cAAgB,OAC7E,YAAa,GAAc,GAAO,WAAW,EAAI,EAAM,YAAc,MACvE,GC1DK,IAAM,GAAyB,EAKzB,GAA4B,EAAqB,oBAEjD,GAAqB,EAAqB,aAG1C,GAAwB,EAAqB,gBAC7C,GAAsB,EAAqB,oBAC3C,GAA2B,EAAqB,yBAChD,GAAoB,EAAqB,kBAEzC,GAAoB,CAAC,IAAqD,OAAO,IAAW,SAE5F,GAAU,EAAqB,QCS5C,IAAM,EAAU,cACV,GAAc,IAAI,IAAY,EAAe,WAAW,EACxD,GAA4B,IAAI,IAAI,CAAC,OAAQ,UAAW,YAAY,CAAC,EAC9D,GAAmB,4BACnB,GAAO,oBAQd,EAAyB,EAAO,OAAO,CAC3C,KAAM,EAAO,QAAQ,WAAW,EAChC,IAAK,EAAO,SAAS,EAAO,MAAM,CACpC,CAAC,EAEK,GAAqB,EAAO,OAAO,CACvC,KAAM,EAAO,OACb,YAAa,EAAO,OACpB,WAAY,CACd,CAAC,EAEK,GAAiB,EAAO,OAAO,CACnC,KAAM,EAAO,IAAI,UAAU,EAC3B,SAAU,GACV,cAAe,EAAO,SAAS,CAAsB,CACvD,CAAC,EAGK,GAA8B,EAAO,OAAO,CAChD,GAAI,EAAO,OACX,KAAM,EAAO,IAAI,UAAU,EAC3B,SAAU,EAAO,OAAO,CACtB,KAAM,EAAO,OACb,UAAW,EAAO,MACpB,CAAC,CACH,CAAC,EAGK,EAAwB,EAAO,MAAM,CACzC,EAAO,OAAO,CACZ,KAAM,EAAO,QAAQ,MAAM,EAC3B,KAAM,EAAO,OACb,cAAe,EAAO,SAAS,CAAsB,CACvD,CAAC,EACD,EAAO,OAAO,CACZ,KAAM,EAAO,QAAQ,WAAW,EAChC,UAAW,EAAO,OAAO,CAAE,IAAK,EAAO,MAAO,CAAC,CACjD,CAAC,CACH,CAAC,EAEK,GAAoB,EAAO,MAAM,CACrC,EAAO,OAAO,CACZ,KAAM,EAAO,QAAQ,QAAQ,EAC7B,QAAS,EAAO,MAAM,CAAC,EAAO,OAAQ,EAAO,MAAM,CAAqB,CAAC,CAAC,CAC5E,CAAC,EACD,EAAO,OAAO,CACZ,KAAM,EAAO,QAAQ,MAAM,EAC3B,QAAS,EAAO,MAAM,CAAC,EAAO,OAAQ,EAAO,MAAM,CAAqB,CAAC,CAAC,CAC5E,CAAC,EACD,EAAO,eACL,EAAO,OAAO,CACZ,KAAM,EAAO,QAAQ,WAAW,EAChC,QAAS,EAAO,OAAO,EAAO,MAAM,EACpC,WAAY,EAAc,EAA2B,EACrD,kBAAmB,EAAO,SAAS,EAAO,MAAM,EAChD,UAAW,EAAO,SAAS,EAAO,MAAM,EACxC,eAAgB,EAAO,SAAS,EAAO,MAAM,EAC7C,kBAAmB,EAAO,SAAS,EAAO,OAAO,EACjD,cAAe,EAAO,SAAS,CAAsB,CACvD,CAAC,EACD,CAAC,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,CAC/C,EACA,EAAO,OAAO,CACZ,KAAM,EAAO,QAAQ,MAAM,EAC3B,aAAc,EAAO,OACrB,QAAS,EAAO,OAChB,cAAe,EAAO,SAAS,CAAsB,CACvD,CAAC,CACH,CAAC,EAAE,KAAK,EAAO,cAAc,MAAM,CAAC,EAG9B,GAAuB,EAAO,MAAM,CACxC,EAAO,SAAS,CAAC,OAAQ,OAAQ,UAAU,CAAC,EAC5C,EAAO,OAAO,CACZ,KAAM,EAAO,IAAI,UAAU,EAC3B,SAAU,EAAO,OAAO,CAAE,KAAM,EAAO,MAAO,CAAC,CACjD,CAAC,CACH,CAAC,EAEY,GAAa,CACxB,MAAO,EAAO,OACd,SAAU,EAAO,MAAM,EAAiB,EACxC,MAAO,EAAc,EAAc,EACnC,YAAa,EAAO,SAAS,EAAoB,EACjD,OAAQ,EAAO,QAAQ,EAAI,EAC3B,eAAgB,EAAO,SAAS,EAAO,OAAO,CAAE,cAAe,EAAO,OAAQ,CAAC,CAAC,EAChF,MAAO,EAAO,SAAS,EAAO,OAAO,EACrC,iBAAkB,EAAO,SAAS,EAAc,qBAAqB,EACrE,sBAAuB,EAAO,SAAS,EAAO,MAAM,EACpD,WAAY,EAAO,SAAS,EAAO,MAAM,EACzC,YAAa,EAAO,SAAS,EAAO,MAAM,EAC1C,MAAO,EAAO,SAAS,EAAO,MAAM,EACpC,kBAAmB,EAAO,SAAS,EAAO,MAAM,EAChD,iBAAkB,EAAO,SAAS,EAAO,MAAM,EAC/C,KAAM,EAAO,SAAS,EAAO,MAAM,EACnC,KAAM,EAAc,EAAO,MAAM,CACnC,EACM,GAAiB,EAAO,OAAO,EAAU,EASzC,GAAkB,EAAO,OAAO,CACpC,cAAe,EAAO,SAAS,EAAO,MAAM,EAC5C,kBAAmB,EAAO,SAAS,EAAO,MAAM,EAChD,aAAc,EAAO,SAAS,EAAO,MAAM,EAC3C,sBAAuB,EACrB,EAAO,OAAO,CACZ,cAAe,EAAO,SAAS,EAAO,MAAM,EAC5C,mBAAoB,EAAO,SAAS,EAAO,MAAM,CACnD,CAAC,CACH,EACA,0BAA2B,EACzB,EAAO,OAAO,CACZ,iBAAkB,EAAO,SAAS,EAAO,MAAM,CACjD,CAAC,CACH,CACF,CAAC,EAEK,GAAkC,EAAO,OAAO,CACpD,KAAM,EAAa,EAAO,MAAM,EAChC,UAAW,EAAa,EAAO,MAAM,CACvC,CAAC,EAEK,GAA0B,EAAO,OAAO,CAC5C,MAAO,EAAO,OACd,GAAI,EAAa,EAAO,MAAM,EAC9B,SAAU,EAAa,EAA+B,CACxD,CAAC,EAGK,GAAkB,EAAO,eAC7B,EAAO,OAAO,CACZ,QAAS,EAAa,EAAO,MAAM,EACnC,kBAAmB,EAAa,EAAO,MAAM,EAC7C,UAAW,EAAa,EAAO,MAAM,EACrC,eAAgB,EAAa,EAAO,MAAM,EAC1C,kBAAmB,EAAa,EAAO,OAAO,EAC9C,WAAY,EAAa,EAAO,MAAM,EAAuB,CAAC,CAChE,CAAC,EACD,CAAC,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,CAC/C,EAEM,GAAmB,EAAO,OAAO,CACrC,MAAO,EAAa,EAAe,EACnC,cAAe,EAAa,EAAO,MAAM,EACzC,qBAAsB,EAAa,EAAO,MAAM,CAClD,CAAC,EAEK,GAAkB,EAAO,OAAO,CACpC,KAAM,EAAa,EAAO,MAAM,CAAC,EAAO,OAAQ,EAAO,MAAM,CAAC,CAAC,EAC/D,QAAS,EAAO,MAClB,CAAC,EAEY,GAAkB,EAAO,OAAO,CAC3C,QAAS,EAAa,EAAO,MAAM,EAAgB,CAAC,EACpD,MAAO,EAAa,EAAe,EACnC,MAAO,EAAa,EAAe,CACrC,CAAC,EAmCK,GAAY,CAAC,EAAsB,EAAyB,KAA8C,CAC9G,KAAM,WACN,SAAU,CACR,KAAM,EAAK,KACX,YAAa,EAAK,YAClB,WAAY,EAAqB,OAAO,CAAW,CACrD,EACA,cAAe,EAAQ,eAAe,EAAK,KAAK,CAClD,GAEM,GAAkB,CAAC,IACvB,EAAe,gBAAgB,cAAe,EAAY,CACxD,KAAM,IAAM,OACZ,KAAM,IAAM,OACZ,SAAU,IAAM,WAChB,KAAM,CAAC,KAAU,CAAE,KAAM,WAAqB,SAAU,CAAE,MAAK,CAAE,EACnE,CAAC,EAEG,GAAgB,CAAC,KAAqD,CAC1E,GAAI,EAAK,GACT,KAAM,WACN,SAAU,CACR,KAAM,EAAK,KACX,UAAW,EAAe,WAAW,EAAK,KAAK,CACjD,CACF,GAEM,GAAa,EAAO,GAAG,uBAAuB,EAAE,SAAU,CAAC,EAAiB,CAEhF,MAAO,CAAE,KAAM,YAAsB,UAAW,CAAE,KADpC,MAAO,EAAe,cAAc,cAAe,EAAM,EAAW,GACrB,OAAQ,CAAE,EACxE,EAEK,GAAmC,CAAC,IACxC,EAAS,CAAM,GAAK,OAAO,EAAO,oBAAsB,SAAW,EAAO,kBAAoB,OAE1F,GAAiB,CAAC,IAAwB,CAC9C,IAAM,EAAQ,EAAK,kBAAkB,QAAQ,eAC7C,OAAO,OAAO,IAAU,SAAW,EAAQ,QAGvC,GAAmB,CAAC,EAAqC,IAAoB,CACjF,IAAM,EAAW,EAAM,QAAQ,CAAC,IAAS,CACvC,IAAM,EAAU,EAAK,kBAAkB,QAAQ,iBAC/C,OAAO,MAAM,QAAQ,CAAO,EAAI,EAAU,CAAC,EAC5C,EACD,GAAI,EAAM,KAAK,CAAC,IAAS,MAAM,QAAQ,EAAK,kBAAkB,QAAQ,gBAAgB,CAAC,EAAG,OAAO,EACjG,GAAI,EAAS,CAAM,GAAK,MAAM,QAAQ,EAAO,iBAAiB,EAAG,OAAO,EAAO,mBAG3E,GAAmB,EAAO,GAAG,6BAA6B,EAAE,SAAU,CAC1E,EACA,EACA,CACA,IAAM,EAAmE,CAAC,EAC1E,QAAW,KAAQ,EAAQ,QAAS,CAClC,GAAI,EAAK,OAAS,OAAQ,CACxB,EAAQ,KAAK,CAAE,KAAM,OAAQ,KAAM,EAAK,KAAM,cAAe,EAAQ,eAAe,EAAK,KAAK,CAAE,CAAC,EACjG,SAEF,GAAI,EAAK,OAAS,QAAS,CACzB,EAAQ,KAAK,MAAO,GAAW,CAAI,CAAC,EACpC,SAEF,OAAO,MAAO,EAAe,mBAAmB,cAAe,OAAQ,CAAC,OAAQ,OAAO,CAAC,EAE1F,GAAI,EAAQ,MAAM,CAAC,IAAS,EAAK,OAAS,QAAU,EAAK,gBAAkB,MAAS,EAClF,MAAO,CACL,KAAM,OACN,QAAS,EAAQ,IAAI,CAAC,IAAU,EAAK,OAAS,OAAS,EAAK,KAAO,EAAG,EAAE,KAAK,EAAE,CACjF,EACF,MAAO,CAAE,KAAM,OAAiB,SAAQ,EACzC,EAEK,GAAwB,EAAO,GAAG,kCAAkC,EAAE,SAAU,CACpF,EACA,EACA,EAA2B,CAAC,EAC5B,CACA,IAAM,EAAsB,CAAC,EACvB,EAA6B,CAAC,EAC9B,EAA2C,CAAC,EAClD,QAAW,KAAQ,EAAQ,QAAS,CAClC,GAAI,CAAC,EAAe,gBAAgB,EAAM,CAAC,OAAQ,YAAa,WAAW,CAAC,EAC1E,OAAO,MAAO,EAAe,mBAAmB,cAAe,YAAa,CAAC,OAAQ,YAAa,WAAW,CAAC,EAChH,GAAI,EAAK,OAAS,OAAQ,CACxB,EAAQ,KAAK,CAAI,EACjB,SAEF,GAAI,EAAK,OAAS,YAAa,CAC7B,EAAU,KAAK,CAAI,EACnB,SAEF,GAAI,EAAK,OAAS,YAAa,CAC7B,EAAU,KAAK,GAAc,CAAI,CAAC,EAClC,UAGJ,IAAM,EAAO,EAAU,IAAI,CAAC,IAAS,EAAK,IAAI,EAAE,KAAK,EAAE,EACjD,EAAU,GAAiB,EAAW,EAAQ,QAAQ,gBAAgB,EACtE,EAAgB,EAAU,IAAI,EAAc,EAAE,KAAK,CAAC,IAAU,IAAU,MAAS,EACjF,EAAkB,GAAiC,EAAQ,QAAQ,gBAAgB,EACnF,EAAkB,EAAU,MAAM,CAAC,IAAS,MAAM,QAAQ,EAAK,kBAAkB,QAAQ,gBAAgB,CAAC,EAC1G,GAAS,IAAM,CACnB,GAAI,IAAoB,OAAW,OAAO,EAC1C,GAAI,EAAU,SAAW,EAAG,OAC5B,GAAI,IAAkB,OAAW,OAAO,EACxC,GAAI,IAAoB,OAAW,MAAO,oBAC1C,GAAI,CAAC,EAAiB,MAAO,sBAC5B,EACG,GAAiB,IAAM,CAC3B,GAAI,IAAoB,OAAW,OAAO,EAAU,SAAW,EAAK,GAAmB,GAAM,EAC7F,GAAI,EAAU,SAAW,EAAG,OAAO,EACnC,OAAO,IACN,EACG,EAAS,EAAQ,QAAQ,SAAS,CAAC,KAAS,UAAW,IAAQ,EAAK,QAAU,MAAS,EACvF,EAAS,CACb,KAAM,YACN,QAAS,EAAQ,SAAW,EAAI,KAAO,EAAe,SAAS,CAAO,EACtE,WAAY,EAAU,SAAW,EAAI,OAAY,EACjD,kBAAmB,EACnB,cAAe,EAAQ,eAAe,GAAU,UAAW,EAAS,EAAO,MAAQ,MAAS,CAC9F,EACA,GAAI,IAAU,QAAa,IAAkB,OAAW,OAAO,EAC/D,MAAO,IAAK,GAAS,GAAQ,CAAc,EAC5C,EAEK,GAAoB,EAAO,GAAG,8BAA8B,EAAE,SAAU,CAC5E,EACA,EACA,CACA,IAAM,EAAgC,CAAC,EACjC,EAAkE,CAAC,EACzE,QAAW,KAAQ,EAAQ,QAAS,CAClC,GAAI,CAAC,EAAe,gBAAgB,EAAM,CAAC,aAAa,CAAC,EACvD,OAAO,MAAO,EAAe,mBAAmB,cAAe,OAAQ,CAAC,aAAa,CAAC,EACxF,GAAI,EAAK,OAAO,OAAS,UAAW,CAClC,EAAS,KAAK,CACZ,KAAM,OACN,aAAc,EAAK,GACnB,QAAS,EAAe,eAAe,CAAI,EAC3C,cAAe,EAAQ,eAAe,EAAK,KAAK,CAClD,CAAC,EACD,SAEF,IAAM,EAAuC,EAAK,OAAO,MACnD,EAAO,EAAQ,OAAO,CAAC,IAAS,EAAK,OAAS,MAAM,EAAE,IAAI,CAAC,IAAS,EAAK,IAAI,EACnF,EAAS,KAAK,CACZ,KAAM,OACN,aAAc,EAAK,GACnB,QAAS,EAAK,KAAK;AAAA,CAAI,EACvB,cAAe,EAAQ,eAAe,EAAK,KAAK,CAClD,CAAC,EACD,IAAM,EAAQ,EAAQ,OAAO,CAAC,IAAS,EAAK,OAAS,MAAM,EAC3D,EAAO,KACL,GAAI,MAAO,EAAO,QAAQ,EAAO,CAAC,IAChC,GAAW,CAAE,KAAM,QAAS,UAAW,EAAK,KAAM,KAAM,EAAK,IAAK,SAAU,EAAK,IAAK,CAAC,CACzF,CACF,EAEF,MAAO,CAAE,WAAU,QAAO,EAC3B,EAEK,GAAe,EAAO,GAAG,yBAAyB,EAAE,SAAU,CAClE,EACA,EACA,EAA2B,CAAC,EAC5B,CACA,GAAI,EAAQ,OAAS,OAAQ,MAAO,CAAC,MAAO,GAAiB,EAAS,CAAO,CAAC,EAC9E,GAAI,EAAQ,OAAS,YAAa,MAAO,CAAC,MAAO,GAAsB,EAAS,EAAgB,CAAO,CAAC,EACxG,OAAQ,MAAO,GAAkB,EAAS,CAAO,GAAG,SACrD,EAEK,GAAgB,EAAO,GAAG,0BAA0B,EAAE,SAAU,CAAC,EAAqB,EAA0B,CAgBpH,IAAM,EAAW,CAAC,GAdhB,EAAQ,OAAO,SAAW,EACtB,CAAC,EACD,EAAQ,OAAO,KAAK,CAAC,IAAS,EAAK,QAAU,MAAS,GAAK,EAAQ,eAAiB,OAClF,CACE,CACE,KAAM,SACN,QAAS,EAAQ,OAAO,IAAI,CAAC,KAAU,CACrC,KAAM,OACN,KAAM,EAAK,KACX,cAAe,EAAQ,eAAe,EAAK,KAAK,CAClD,EAAE,CACJ,CACF,EACA,CAAC,CAAE,KAAM,SAAU,QAAS,EAAe,SAAS,EAAQ,MAAM,CAAE,CAAC,CAClD,EACrB,EAAyE,CAAC,EAC1E,EAAc,IAAM,CACxB,GAAI,EAAc,SAAW,EAAG,OAChC,EAAS,KAAK,CAAE,KAAM,OAAQ,QAAS,EAAc,OAAO,CAAC,CAAE,CAAC,GAElE,QAAW,KAAW,EAAQ,SAAU,CACtC,GAAI,EAAQ,OAAS,SAAU,CAC7B,IAAM,EAAO,MAAO,EAAe,oBAAoB,cAAe,CAAO,EAC7E,GAAI,EAAc,OAAS,EAAG,CAC5B,EAAS,KAAK,CACZ,KAAM,OACN,QAAS,CACP,GAAG,EAAc,OAAO,CAAC,EACzB,CAAE,KAAM,OAAQ,KAAM,EAAK,KAAM,cAAe,EAAQ,eAAe,EAAK,KAAK,CAAE,CACrF,CACF,CAAC,EACD,SAEF,IAAM,EAAW,EAAS,GAAG,EAAE,EAC/B,GAAI,GAAU,OAAS,QAAU,OAAO,EAAS,UAAY,SAC3D,EAAS,EAAS,OAAS,GAAK,EAAQ,eAAe,EAAK,KAAK,EAC7D,CACE,KAAM,OACN,QAAS,CACP,CAAE,KAAM,OAAQ,KAAM,EAAS,OAAQ,EACvC,CAAE,KAAM,OAAQ,KAAM,EAAK,KAAM,cAAe,EAAQ,aAAa,EAAK,KAAK,CAAE,CACnF,CACF,EACA,CAAE,KAAM,OAAQ,QAAS,GAAG,EAAS;AAAA,EAAY,EAAK,MAAO,EAC9D,QAAI,GAAU,OAAS,QAAU,MAAM,QAAQ,EAAS,OAAO,EAClE,EAAS,EAAS,OAAS,GAAK,CAC9B,KAAM,OACN,QAAS,CACP,GAAG,EAAS,QACZ,CAAE,KAAM,OAAQ,KAAM,EAAK,KAAM,cAAe,EAAQ,eAAe,EAAK,KAAK,CAAE,CACrF,CACF,EAEA,OAAS,KACP,EAAQ,eAAe,EAAK,KAAK,EAC7B,CACE,KAAM,OACN,QAAS,CAAC,CAAE,KAAM,OAAQ,KAAM,EAAK,KAAM,cAAe,EAAQ,aAAa,EAAK,KAAK,CAAE,CAAC,CAC9F,EACA,CAAE,KAAM,OAAQ,QAAS,EAAK,IAAK,CACzC,EACF,SAEF,GAAI,EAAQ,OAAS,OAAQ,CAC3B,IAAM,EAAU,MAAO,GAAkB,EAAS,CAAO,EACzD,EAAS,KAAK,GAAG,EAAQ,QAAQ,EACjC,EAAc,KAAK,GAAG,EAAQ,MAAM,EACpC,SAEF,EAAY,EACZ,EAAS,KAAK,GAAI,MAAO,GAAa,EAAS,EAAQ,MAAM,eAAe,eAAgB,CAAO,CAAE,EAGvG,OADA,EAAY,EACL,EACR,EAEK,GAAe,CAAC,IAAwB,CAC5C,IAAM,EAAU,EAAc,QAAQ,CAAO,EAC7C,MAAO,IACD,EAAQ,QAAU,OAAY,CAAE,MAAO,EAAQ,KAAM,EAAI,CAAC,KAC1D,EAAQ,gBAAkB,CAAE,iBAAkB,EAAQ,eAAgB,EAAI,CAAC,CACjF,GAGW,GAAc,EAAO,GAAG,wBAAwB,EAAE,SAAU,CACvE,EACA,EAA2B,CAAC,EAC5B,CAGA,IAAM,EAAiB,EAAQ,MAAM,eAAe,eACpD,GAAI,GAAkB,GAA0B,IAAI,CAAc,EAChE,OAAO,MAAO,EAAe,eAC3B,6DAA6D,GAC/D,EACF,IAAM,EAAa,EAAQ,WACrB,EAA0B,EAAQ,MAAM,eAAe,WACvD,EAAiB,EAAQ,MAAM,eAAe,gBAAkB,aACtE,MAAO,CACL,MAAO,EAAQ,MAAM,GACrB,SAAU,MAAO,GAAc,EAAS,CAAO,EAC/C,MACE,EAAQ,MAAM,SAAW,EACrB,OACA,EAAQ,MAAM,IAAI,CAAC,IACjB,GACE,EACA,EAAqB,mBAAmB,EAAK,YAAa,CAAuB,EACjF,CACF,CACF,EACN,YAAa,EAAQ,WAAa,MAAO,GAAgB,EAAQ,UAAU,EAAI,OAC/E,OAAQ,GACR,eAAgB,CAAE,cAAe,EAAK,KAClC,IAAmB,wBACnB,CAAE,sBAAuB,GAAY,SAAU,EAC/C,CAAE,WAAY,GAAY,SAAU,EACxC,YAAa,GAAY,YACzB,MAAO,GAAY,KACnB,kBAAmB,GAAY,iBAC/B,iBAAkB,GAAY,gBAC9B,KAAM,GAAY,KAClB,KAAM,GAAY,QACf,GAAa,CAAO,CACzB,EACD,EAQK,GAAkB,CAAC,IAAoD,CAC3E,GAAI,IAAW,OAAQ,MAAO,OAC9B,GAAI,IAAW,SAAU,MAAO,SAChC,GAAI,IAAW,iBAAkB,MAAO,iBACxC,GAAI,IAAW,iBAAmB,IAAW,aAAc,MAAO,aAClE,GAAI,IAAW,QAAS,MAAO,QAC/B,MAAO,WAQH,GAAW,CAAC,IAAuD,CACvE,GAAI,CAAC,EAAO,OACZ,IAAM,EAAS,EAAM,uBAAuB,cACtC,EAAa,EAAM,uBAAuB,mBAC1C,EAAY,EAAM,2BAA2B,iBAC7C,EAAY,EAAe,eAAe,EAAM,cAAe,EAAe,UAAU,EAAQ,CAAU,CAAC,EACjH,OAAO,IAAI,EAAM,CACf,YAAa,EAAM,cACnB,aAAc,EAAM,kBACpB,qBAAsB,EACtB,qBAAsB,EACtB,sBAAuB,EACvB,gBAAiB,EACjB,YAAa,EAAe,YAAY,EAAM,cAAe,EAAM,kBAAmB,EAAM,YAAY,EACxG,iBAAkB,CAAE,OAAQ,CAAM,CACpC,CAAC,GAGG,GAAiB,CACrB,EACA,IACG,CACH,GAAI,CAAC,EAAO,OACZ,IAAM,EAAS,IAAI,IAAI,CAAC,EAAiB,oBAAqB,YAAa,gBAAgB,CAAC,EAC5F,QAAW,KAAS,EAAQ,CAC1B,GAAI,IAAU,OAAW,SACzB,IAAM,EAAO,EAAM,GACnB,GAAI,OAAO,IAAS,UAAY,EAAK,OAAS,EAAG,MAAO,CAAE,QAAO,MAAK,EAExE,QAGI,GAAa,CAAC,IAAoC,CACtD,IAAM,EAAO,EAAQ,QAAQ,CAAC,IAAW,CACvC,GAAI,CAAC,EAAS,CAAM,EAAG,MAAO,CAAC,EAC/B,GAAI,EAAO,OAAS,kBAAoB,OAAO,EAAO,OAAS,UAAY,EAAO,KAAM,MAAO,CAAC,EAAO,IAAI,EAC3G,GAAI,EAAO,OAAS,qBAAuB,OAAO,EAAO,UAAY,UAAY,EAAO,QACtF,MAAO,CAAC,EAAO,OAAO,EACxB,MAAO,CAAC,EACT,EACD,GAAI,EAAK,OAAS,EAAG,OAAO,EAAK,KAAK,EAAE,GAGpC,GAAyB,CAAC,EAAwB,IAAoC,CAC1F,QAAW,KAAU,EAAS,CAC5B,IAAM,EAAW,EAAO,GAAG,EAAE,EAC7B,GACE,CAAC,EAAS,CAAQ,GAClB,EAAS,OAAS,kBAClB,CAAC,EAAS,CAAM,GAChB,EAAO,OAAS,kBAChB,GAAgC,EAAU,CAAM,EAChD,CACA,EAAO,KAAK,CAAM,EAClB,SAEF,EAAO,EAAO,OAAS,GAAK,IACvB,KACA,OAAO,YAAY,OAAO,QAAQ,CAAM,EAAE,OAAO,CAAC,IAAU,EAAM,KAAO,MAAS,CAAC,EACtF,KAAM,GAAG,OAAO,EAAS,OAAS,SAAW,EAAS,KAAO,KAAK,OAAO,EAAO,OAAS,SAAW,EAAO,KAAO,KAClH,UAAW,EAAiB,EAAS,UAAW,EAAO,SAAS,EAChE,OAAQ,EAAiB,EAAS,OAAQ,EAAO,MAAM,CACzD,IAIE,EAAmB,CAAC,EAAmB,IAC3C,GAAY,IAAY,IAAa,OAAY,EAAW,GAExD,GAAkC,CAAC,EAAmC,IAC1E,EAAuB,EAAS,GAAI,EAAQ,EAAE,GAC9C,EAAuB,EAAS,MAAO,EAAQ,KAAK,GACpD,EAAuB,EAAS,OAAQ,EAAQ,MAAM,GACrD,QAAQ,EAAS,SAAS,GAAK,QAAQ,EAAQ,SAAS,GAAK,EAAS,YAAc,EAAQ,UAEzF,EAAyB,CAAC,EAAmB,IACjD,IAAa,QAAa,IAAa,MAAQ,IAAY,QAAa,IAAY,MAAQ,IAAa,EAErG,EAAoB,CAAC,EAAsC,KAAsC,CACrG,OAAQ,IACF,EAAQ,CAAE,eAAgB,CAAM,EAAI,CAAC,KACrC,EAAU,CAAE,iBAAkB,CAAQ,EAAI,CAAC,CACjD,CACF,GAEM,GAAO,CAAC,EAAoB,IAChC,EAAO,IAAI,SAAU,EAAG,CACtB,GAAI,EAAM,MACR,OAAO,MAAO,IAAI,EAAS,CACzB,OAAQ,EACR,OAAQ,SACR,OAAQ,EAAwB,CAC9B,QAAS,EAAM,MAAM,QACrB,KAAM,EAAM,MAAM,OAAS,QAAa,EAAM,MAAM,OAAS,KAAO,OAAY,OAAO,EAAM,MAAM,IAAI,EACvG,OAAQ,OAAO,EAAM,MAAM,OAAS,SAAW,EAAM,MAAM,KAAO,MACpE,CAAC,CACH,CAAC,EACH,IAAM,EAAqB,CAAC,EACtB,EAAQ,GAAS,EAAM,KAAK,GAAK,EAAM,MACvC,EAAS,EAAM,UAAU,GACzB,EAAe,GAAQ,cACzB,CAAE,WAAY,GAAgB,EAAO,aAAa,EAAG,IAAK,EAAO,sBAAwB,EAAO,aAAc,EAC9G,EAAM,aACJ,EAAQ,GAAQ,MAChB,EAAa,GAAO,YAAc,CAAC,EACrC,EAAQ,EAAM,MACd,EAAe,EAAM,aAErB,EAAY,EAAM,UAEhB,EAAY,GAAe,EAAO,EAAM,cAAc,EACtD,EAAiB,EAAM,iBAAmB,CAAC,EAAM,UAAU,KAAK,IAAI,QAAQ,EAAI,GAAW,MAAQ,QACnG,EAAc,MAAM,QAAQ,GAAO,iBAAiB,EAAI,EAAM,kBAAoB,OACxF,GAAI,IAAgB,OAAW,GAAuB,EAAM,iBAAkB,CAAW,EACzF,IAAM,EAA2B,EAAM,0BAA4B,IAAgB,OAC7E,EAAgB,EAAkB,CAAc,EAChD,EAAO,GAAa,OAAU,GAAW,CAAW,GAAK,GAAW,KAAQ,GAAW,KAC7F,GAAI,CAAC,EAAM,UAAU,KAAK,IAAI,QAAQ,GAAK,IAAS,OAClD,EAAY,EAAU,eAAe,EAAW,EAAQ,cAAe,EAAM,CAAa,EACvF,QACH,GACA,CAAC,EAAU,UAAU,IAAI,aAAa,IACrC,QAAQ,GAAO,OAAO,GAAK,EAAW,OAAS,GAEhD,EAAY,EAAU,eAAe,EAAW,EAAQ,cAAe,CAAa,EACtF,IAAM,GAAmB,EAAM,kBAAoB,EAAU,UAAU,IAAI,aAAa,EAExF,GAAI,GAAO,QACT,EAAY,EAAU,aACpB,EACA,EACA,cACA,EAAkB,EAAgB,EAA2B,EAAM,iBAAmB,MAAS,CACjG,EACA,EAAY,EAAU,UAAU,EAAW,EAAQ,SAAU,EAAM,OAAO,EAG5E,QAAW,KAAQ,EAAY,CAC7B,IAAM,EAAU,EAAM,EAAK,OACrB,EAAU,EAAa,EAAK,OAC5B,EAAK,GAAS,IAAM,GAAS,KAAO,EAAK,IAAM,QAC/C,EAAO,GAAS,MAAQ,GAAS,OAAS,EAAK,UAAU,MAAQ,QACjE,EAAO,GAAG,GAAS,OAAS,KAAK,EAAK,UAAU,WAAa,KACnE,GAAI,CAAC,IAAY,CAAC,GAAM,CAAC,GAAO,CAC9B,EAAe,IAAK,GAAe,EAAK,OAAQ,CAAE,GAAI,GAAM,OAAW,KAAM,GAAQ,OAAW,MAAO,CAAK,CAAE,EAC9G,SAEF,GAAI,EACF,EAAe,IAAK,CAAa,EACjC,OAAO,EAAa,EAAK,OAE3B,IAAM,EAAS,EAAW,cACxB,EACA,EACA,EAAK,MACL,CAAE,GAAI,GAAM,OAAW,KAAM,GAAQ,OAAW,MAAK,EACrD,mDACF,EACA,GAAI,EAAW,QAAQ,CAAM,EAAG,OAAO,MAAO,EAE9C,GADA,EAAQ,EAAO,MACX,EAAO,OAAO,OAAQ,EAAY,EAAU,UAAU,EAAW,CAAM,EAC3E,EAAO,KAAK,GAAG,EAAO,MAAM,EAG9B,GAAI,IAAiB,QAAa,EAAM,eAAiB,QAAa,OAAO,KAAK,CAAY,EAAE,OAAS,EACvG,OAAO,MAAO,EAAe,WAAW,EAAS,mDAAmD,EAItG,IAAM,EACJ,IAAiB,QAAa,EAAM,eAAiB,QAAa,OAAO,KAAK,CAAK,EAAE,OAAS,EAC1F,MAAO,EAAW,UAAU,EAAS,CAAK,EAC1C,OAEN,MAAO,CACL,CACE,MAAO,GAAU,OAAS,EAC1B,eACA,eAAgB,GAAU,QAAU,EAAM,eAC1C,QACA,eACA,YACA,iBACA,iBAAkB,EAAM,iBACxB,2BACA,mBACF,EACA,CACF,EACD,EAEG,GAAe,CAAC,IAAgD,CACpE,IAAM,EAAqB,CAAC,EACtB,EAAe,EAAM,eAAe,OAAS,EAC7C,EAAS,EAAM,aACjB,IACK,EAAM,aACT,WACE,EAAM,aAAa,aAAe,QAAU,EAAe,aAAe,EAAM,aAAa,UACjG,EACA,OACE,EAAW,EACf,EAAM,eACN,EAAM,yBAA2B,EAAM,iBAAmB,MAC5D,EACM,EACJ,EAAM,0BAA4B,CAAC,EAAM,iBACrC,EAAU,eAAe,EAAM,UAAW,EAAQ,cAAe,EAAkB,EAAM,cAAc,CAAC,EACxG,EAAM,UACN,EAAQ,EAAU,aAAa,EAAS,EAAQ,cAAe,CAAQ,EACvE,EAAY,EAAM,eAAe,OAAS,EAAU,UAAU,EAAO,CAAM,EAAI,EAErF,GADA,EAAO,KAAK,GAAG,EAAM,cAAc,EAC/B,EAAQ,EAAU,OAAO,EAAW,EAAQ,CAAE,SAAQ,MAAO,EAAM,KAAM,CAAC,EAC9E,OAAO,GAYI,GAAW,EAAS,KAAK,CACpC,GAAI,EACJ,KAAM,CACJ,OAAQ,GACR,KAAM,EACR,EACA,OAAQ,CACN,MAAO,EAAS,UAAU,EAAe,EACzC,QAAS,CAAC,KAAa,CACrB,MAAO,EAAW,MAAc,EAChC,aAAc,CAAC,EACf,eAAgB,CAAC,EACjB,UAAW,EAAU,QAAQ,EAC7B,eAAgB,EAAQ,MAAM,eAAe,eAC7C,iBAAkB,CAAC,EACnB,yBAA0B,GAC1B,iBAAkB,EACpB,GACA,QACA,OAAQ,EACV,CACF,CAAC,EAEY,GAAgB,GAAc,QAAQ,KAAqB,EAE3D,GAAQ,GAAM,KAAK,CAC9B,GAAI,EACJ,SAAU,SACV,oBAAqB,SACrB,YACA,SAAU,EAAS,KAAK,GAAM,CAAE,QAAS,EAAiB,CAAC,EAC3D,KAAM,EAAK,KACX,UAAW,EACb,CAAC", | ||
| "debugId": "1880328BCFC6565C64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/providers/openai-compatible.ts"], | ||
| "sourcesContent": [ | ||
| "import { ProviderID, type ModelID } from \"../schema\"\nimport * as OpenAICompatibleChat from \"../protocols/openai-compatible-chat\"\nimport type { RouteDefaultsInput } from \"../route/client\"\nimport { AuthOptions, type ProviderAuthOption } from \"../route/auth-options\"\nimport type { ProviderPackage } from \"../provider-package\"\nimport { profiles, type OpenAICompatibleProfile } from \"./openai-compatible-profile\"\nimport type { OpenAIProviderOptionsInput } from \"./openai-options\"\n\nexport const id = ProviderID.make(\"openai-compatible\")\n\ntype GenericModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly provider?: string\n readonly baseURL: string\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nexport interface Settings extends ProviderPackage.Settings {\n readonly apiKey?: string\n readonly baseURL: string\n readonly provider?: string\n}\n\nexport type FamilyModelOptions = Omit<RouteDefaultsInput, \"providerOptions\"> &\n ProviderAuthOption<\"optional\"> & {\n readonly baseURL?: string\n readonly providerOptions?: OpenAIProviderOptionsInput\n }\n\nexport const routes = [OpenAICompatibleChat.route]\n\nexport const configure = (input: GenericModelOptions) => {\n const provider = input.provider ?? \"openai-compatible\"\n const { provider: _, baseURL, apiKey: _apiKey, auth: _auth, ...rest } = input\n const route = OpenAICompatibleChat.route.with({\n ...rest,\n provider,\n endpoint: { baseURL },\n auth: AuthOptions.bearer(input, []),\n })\n return {\n id: ProviderID.make(provider),\n model: (modelID: string | ModelID) =>\n route.model<OpenAIProviderOptionsInput>({ id: modelID, provider: ProviderID.make(provider) }),\n configure,\n }\n}\n\nconst define = (profile: OpenAICompatibleProfile) => {\n const configureProfile = (input: FamilyModelOptions = {}) => {\n const facade = configure({\n ...input,\n baseURL: input.baseURL ?? profile.baseURL,\n provider: profile.provider,\n })\n return {\n id: ProviderID.make(profile.provider),\n model: facade.model,\n configure: configureProfile,\n }\n }\n return configureProfile()\n}\n\nexport const provider = {\n id,\n configure,\n}\n\nexport const model: ProviderPackage.Definition<Settings, OpenAIProviderOptionsInput>[\"model\"] = (modelID, settings) =>\n configure({\n apiKey: settings.apiKey,\n baseURL: settings.baseURL,\n headers: settings.headers === undefined ? undefined : { ...settings.headers },\n http: settings.body === undefined ? undefined : { body: { ...settings.body } },\n limits: settings.limits,\n provider: settings.provider,\n }).model(modelID)\n\nexport const baseten = define(profiles.baseten)\nexport const cerebras = define(profiles.cerebras)\nexport const deepinfra = define(profiles.deepinfra)\nexport const deepseek = define(profiles.deepseek)\nexport const fireworks = define(profiles.fireworks)\nexport const groq = define(profiles.groq)\nexport const togetherai = define(profiles.togetherai)\n" | ||
| ], | ||
| "mappings": ";qhBAQO,SAAM,OAAK,OAAW,UAAK,wBAAmB,OAqBxC,OAAS,MAAsB,MAAK,OAEpC,OAAY,MAAC,SAA+B,CACvD,IAAM,EAAW,EAAM,UAAY,qBAC3B,SAAU,EAAG,UAAS,OAAQ,EAAS,KAAM,KAAU,GAAS,EAClE,EAA6B,EAAM,KAAK,IACzC,EACH,WACA,SAAU,CAAE,SAAQ,EACpB,KAAM,EAAY,OAAO,EAAO,CAAC,CAAC,CACpC,CAAC,EACD,MAAO,CACL,GAAI,EAAW,KAAK,CAAQ,EAC5B,MAAO,CAAC,IACN,EAAM,MAAkC,CAAE,GAAI,EAAS,SAAU,EAAW,KAAK,CAAQ,CAAE,CAAC,EAC9F,WACF,GAGI,EAAS,CAAC,IAAqC,CACnD,IAAM,EAAmB,CAAC,EAA4B,CAAC,IAAM,CAC3D,IAAM,EAAS,EAAU,IACpB,EACH,QAAS,EAAM,SAAW,EAAQ,QAClC,SAAU,EAAQ,QACpB,CAAC,EACD,MAAO,CACL,GAAI,EAAW,KAAK,EAAQ,QAAQ,EACpC,MAAO,EAAO,MACd,UAAW,CACb,GAEF,OAAO,EAAiB,GAGb,EAAW,CACtB,KACA,WACF,EAEa,EAAmF,CAAC,EAAS,IACxG,EAAU,CACR,OAAQ,EAAS,OACjB,QAAS,EAAS,QAClB,QAAS,EAAS,UAAY,OAAY,OAAY,IAAK,EAAS,OAAQ,EAC5E,KAAM,EAAS,OAAS,OAAY,OAAY,CAAE,KAAM,IAAK,EAAS,IAAK,CAAE,EAC7E,OAAQ,EAAS,OACjB,SAAU,EAAS,QACrB,CAAC,EAAE,MAAM,CAAO,EAEL,EAAU,EAAO,EAAS,OAAO,EACjC,EAAW,EAAO,EAAS,QAAQ,EACnC,EAAY,EAAO,EAAS,SAAS,EACrC,EAAW,EAAO,EAAS,QAAQ,EACnC,EAAY,EAAO,EAAS,SAAS,EACrC,EAAO,EAAO,EAAS,IAAI,EAC3B,EAAa,EAAO,EAAS,UAAU", | ||
| "debugId": "7F85CA50A1BEBE4A64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/unset.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.unset,\n Effect.fn(\"cli.service.unset\")(function* (input) {\n yield* ServiceConfig.unset(input.key)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";k0BAKA,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,WACnC,OAAO,QAAG,wBAAmB,OAAE,cAAU,MAAC,OAAO,MAC/C,WAAO,OAAc,WAAM,OAAM,QAAG,OACrC,CACH", | ||
| "debugId": "009ABB7F32AEB70264756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/server-process.ts", "src/commands/handlers/serve.ts"], | ||
| "sourcesContent": [ | ||
| "export * as ServerProcess from \"./server-process\"\n\nimport { NodeServices } from \"@effect/platform-node\"\nimport { Service, type DiscoverOptions, type Info } from \"@opencode-ai/client/effect/service\"\nimport { LayerNode } from \"@opencode-ai/util/effect/layer-node\"\nimport { Global } from \"@opencode-ai/util/global\"\nimport { OPENCODE_CHANNEL, OPENCODE_VERSION } from \"./version\"\nimport { AppProcess } from \"@opencode-ai/util/process\"\nimport { randomBytes, randomUUID } from \"node:crypto\"\nimport path from \"node:path\"\nimport { Effect, FileSystem, Logger, Option, Redacted, Schedule, Schema } from \"effect\"\nimport { HttpServer } from \"effect/unstable/http\"\nimport { Env } from \"./env\"\nimport { ServiceConfig } from \"./services/service-config\"\nimport { Updater } from \"./services/updater\"\n\nexport type Mode = \"default\" | \"service\" | \"stdio\"\n\nexport type Options = {\n readonly mode: Mode\n readonly hostname?: string\n readonly port?: number\n}\n\n// The process effect lives until server shutdown; tracing it would parent every request to one process-lifetime trace.\nexport const run = Effect.fnUntraced(function* (options: Options) {\n return yield* processEffect(options).pipe(\n Effect.provide(Updater.layer),\n Effect.provide(\n LayerNode.compile(LayerNode.group([Global.node, AppProcess.node]), [\n [\n Global.node,\n Global.layerWith(process.env.OPENCODE_CONFIG_DIR ? { config: process.env.OPENCODE_CONFIG_DIR } : {}),\n ],\n ]),\n ),\n Effect.provide(NodeServices.layer),\n )\n})\n\nconst processEffect = Effect.fnUntraced(function* (options: Options) {\n if (options.mode === \"service\") yield* Effect.sync(() => process.chdir(Global.Path.home))\n return yield* Effect.scoped(\n Effect.gen(function* () {\n const serviceOptions = options.mode === \"service\" ? yield* ServiceConfig.options() : undefined\n const config = options.mode === \"service\" ? yield* ServiceConfig.read() : {}\n const hostname = options.hostname ?? config.hostname ?? \"127.0.0.1\"\n const port = options.port ?? config.port ?? (options.mode === \"service\" ? ServiceConfig.defaultPort() : undefined)\n if (\n serviceOptions !== undefined &&\n port !== undefined &&\n (yield* Service.incumbent({ ...serviceOptions, url: serviceURL(hostname, port) })) !== undefined\n )\n return\n const { start } = yield* Effect.promise(() => import(\"@opencode-ai/server/process\"))\n const environmentPassword = yield* Env.password\n // Keep the lease credential out of the environment inherited by tools.\n if (options.mode === \"stdio\") {\n delete process.env.OPENCODE_PASSWORD\n delete process.env.OPENCODE_SERVER_PASSWORD\n }\n const password =\n options.mode === \"service\"\n ? config.password || randomBytes(32).toString(\"base64url\")\n : environmentPassword\n ? Redacted.value(environmentPassword)\n : randomBytes(32).toString(\"base64url\")\n if (!password) return yield* Effect.fail(new Error(\"Missing server password\"))\n const instanceID = randomUUID()\n const server = yield* start(\n {\n app: {\n name: process.env.OPENCODE_CLIENT ?? \"cli\",\n version: OPENCODE_VERSION,\n channel: OPENCODE_CHANNEL,\n },\n hostname,\n port,\n password,\n simulation: truthy(process.env.OPENCODE_SIMULATE),\n database: {\n path:\n process.env.OPENCODE_DB ??\n ([\"latest\", \"beta\", \"prod\"].includes(OPENCODE_CHANNEL) ||\n process.env.OPENCODE_DISABLE_CHANNEL_DB === \"1\" ||\n process.env.OPENCODE_DISABLE_CHANNEL_DB === \"true\"\n ? \"opencode.db\"\n : `opencode-${OPENCODE_CHANNEL.replace(/[^a-zA-Z0-9._-]/g, \"-\")}.db`),\n },\n models: {\n url: process.env.OPENCODE_MODELS_URL,\n file: process.env.OPENCODE_MODELS_PATH,\n fetch: !truthy(process.env.OPENCODE_DISABLE_MODELS_FETCH),\n },\n observability: {\n endpoint: process.env.OTEL_EXPORTER_OTLP_ENDPOINT,\n headers: process.env.OTEL_EXPORTER_OTLP_HEADERS,\n },\n config: {\n directory: process.env.OPENCODE_CONFIG_DIR,\n project: !truthy(\n process.env.OPENCODE_CONFIG_PROJECT_DISABLE ?? process.env.OPENCODE_DISABLE_PROJECT_CONFIG,\n ),\n file: process.env.OPENCODE_CONFIG,\n content: process.env.OPENCODE_CONFIG_CONTENT,\n },\n windows: {\n gitbash: process.env.OPENCODE_GIT_BASH_PATH,\n },\n fs: {\n filewatcher: !truthy(\n process.env.OPENCODE_FILEWATCHER_DISABLE ?? process.env.OPENCODE_DISABLE_FILEWATCHER,\n ),\n fff:\n process.env.OPENCODE_DISABLE_FFF === undefined\n ? process.platform !== \"win32\"\n : !truthy(process.env.OPENCODE_DISABLE_FFF),\n },\n },\n serviceOptions === undefined\n ? undefined\n : {\n instanceID,\n onListen: (address, shutdown) =>\n Effect.gen(function* () {\n if (!config.password) yield* ServiceConfig.password(password)\n return yield* register(address, password, instanceID, serviceOptions.file, shutdown)\n }),\n },\n ).pipe(\n Effect.provide(Logger.layer([], { mergeWithExisting: false })),\n Effect.catch((error) => {\n if (serviceOptions === undefined || port === undefined || !addressInUse(error)) return Effect.fail(error)\n return recognizeIncumbent(serviceOptions, hostname, port).pipe(\n Effect.flatMap((found) =>\n found\n ? Effect.void\n : Effect.fail(\n new Error(\n `Managed service port ${port} on ${hostname} is already in use by another process. ` +\n \"Configure another port with `opencode service set port <port>` and start the service again.\",\n { cause: error },\n ),\n ),\n ),\n )\n }),\n )\n if (server === undefined) return\n const url = HttpServer.formatAddress(server.address)\n console.log(options.mode === \"stdio\" ? JSON.stringify({ url }) : `server listening on ${url}`)\n if (options.mode === \"default\" && !environmentPassword) console.log(`server password ${password}`)\n const updater = yield* Updater.Service\n yield* updater.check().pipe(Effect.schedule(Schedule.spaced(\"10 minutes\")), Effect.forkScoped)\n return yield* options.mode === \"service\"\n ? server.shutdown\n : options.mode === \"stdio\"\n ? waitForStdinClose()\n : Effect.never\n }).pipe(Effect.annotateLogs({ role: \"server\" })),\n )\n})\n\nconst infoJson = Schema.fromJsonString(Service.Info)\nconst encodeInfo = Schema.encodeEffect(infoJson)\nconst decodeInfo = Schema.decodeUnknownEffect(infoJson)\n\nconst register = Effect.fnUntraced(function* (\n address: HttpServer.Address,\n password: string,\n id: string,\n file: string,\n shutdown: Effect.Effect<void>,\n) {\n const fs = yield* FileSystem.FileSystem\n const temp = file + \".\" + id + \".tmp\"\n yield* fs.makeDirectory(path.dirname(file), { recursive: true })\n const info = {\n id,\n version: OPENCODE_VERSION,\n url: HttpServer.formatAddress(address),\n pid: process.pid,\n password,\n }\n const encoded = yield* encodeInfo(info)\n const current = fs.readFileString(file).pipe(\n Effect.flatMap(decodeInfo),\n Effect.orElseSucceed(() => undefined),\n )\n const owns = (found: Info | undefined) =>\n found?.id === info.id &&\n found.version === info.version &&\n found.url === info.url &&\n found.pid === info.pid &&\n found.password === info.password\n yield* fs.writeFileString(temp, encoded, { mode: 0o600 }).pipe(Effect.andThen(fs.rename(temp, file)))\n yield* current.pipe(\n Effect.filterOrFail(owns),\n Effect.repeat(Schedule.spaced(\"5 seconds\")),\n Effect.ignore,\n Effect.andThen(shutdown),\n Effect.forkScoped,\n )\n return current.pipe(\n Effect.flatMap((found) => (owns(found) ? fs.remove(file) : Effect.void)),\n Effect.ignore,\n )\n})\n\nconst recognizeIncumbent = Effect.fnUntraced(function* (options: DiscoverOptions, hostname: string, port: number) {\n const found = yield* Service.incumbent({ ...options, url: serviceURL(hostname, port) }).pipe(\n Effect.filterOrFail((value) => value !== undefined),\n Effect.retry(Schedule.spaced(\"100 millis\")),\n Effect.timeoutOption(\"15 seconds\"),\n )\n return Option.isSome(found)\n})\n\nfunction serviceURL(hostname: string, port: number) {\n return `http://${hostname.includes(\":\") ? `[${hostname}]` : hostname}:${port}`\n}\n\nfunction truthy(value?: string) {\n return value === \"1\" || value?.toLowerCase() === \"true\"\n}\n\nfunction addressInUse(error: unknown): boolean {\n if (typeof error !== \"object\" || error === null) return false\n if (\"code\" in error && error.code === \"EADDRINUSE\") return true\n return \"cause\" in error && addressInUse(error.cause)\n}\n\nfunction waitForStdinClose() {\n return Effect.callback<void>((resume) => {\n const close = () => resume(Effect.void)\n process.stdin.once(\"end\", close)\n process.stdin.once(\"close\", close)\n process.stdin.resume()\n if (process.stdin.readableEnded || process.stdin.destroyed) close()\n return Effect.sync(() => {\n process.stdin.off(\"end\", close)\n process.stdin.off(\"close\", close)\n process.stdin.pause()\n })\n })\n}\n", | ||
| "import { Effect, Option } from \"effect\"\nimport { Commands } from \"../commands\"\nimport { Runtime } from \"../../framework/runtime\"\nimport { ServerProcess } from \"../../server-process\"\n\nexport default Runtime.handler(\n Commands.commands.serve,\n Effect.fnUntraced(function* (input) {\n if (input.service && input.stdio) return yield* Effect.fail(new Error(\"--service and --stdio cannot be combined\"))\n return yield* ServerProcess.run({\n mode: input.service ? \"service\" : input.stdio ? \"stdio\" : \"default\",\n hostname: Option.getOrUndefined(input.hostname),\n port: Option.getOrUndefined(input.port),\n })\n }),\n)\n" | ||
| ], | ||
| "mappings": ";0kCAQA,2BAAS,qBAAa,oBACtB,yBAgBO,SAAM,OAAM,OAAO,gBAAW,cAAU,MAAC,OAAkB,MAChE,YAAO,WAAO,OAAc,MAAO,OAAE,UACnC,OAAO,aAAQ,OAAQ,UAAK,OAC5B,EAAO,QACL,EAAU,QAAQ,EAAU,MAAM,CAAC,EAAO,KAAM,EAAW,IAAI,CAAC,EAAG,CACjE,CACE,EAAO,KACP,EAAO,UAAU,QAAQ,IAAI,oBAAsB,CAAE,OAAQ,QAAQ,IAAI,mBAAoB,EAAI,CAAC,CAAC,CACrG,CACF,CAAC,CACH,EACA,EAAO,QAAQ,EAAa,KAAK,CACnC,EACD,EAEK,EAAgB,EAAO,WAAW,SAAU,CAAC,EAAkB,CACnE,GAAI,EAAQ,OAAS,UAAW,MAAO,EAAO,KAAK,IAAM,QAAQ,MAAM,EAAO,KAAK,IAAI,CAAC,EACxF,OAAO,MAAO,EAAO,OACnB,EAAO,IAAI,SAAU,EAAG,CACtB,IAAM,EAAiB,EAAQ,OAAS,UAAY,MAAO,EAAc,QAAQ,EAAI,OAC/E,EAAS,EAAQ,OAAS,UAAY,MAAO,EAAc,KAAK,EAAI,CAAC,EACrE,EAAW,EAAQ,UAAY,EAAO,UAAY,YAClD,EAAO,EAAQ,MAAQ,EAAO,OAAS,EAAQ,OAAS,UAAY,EAAc,YAAY,EAAI,QACxG,GACE,IAAmB,QACnB,IAAS,SACR,MAAO,EAAQ,UAAU,IAAK,EAAgB,IAAK,EAAW,EAAU,CAAI,CAAE,CAAC,KAAO,OAEvF,OACF,IAAQ,SAAU,MAAO,EAAO,QAAQ,IAAa,wCAA8B,EAC7E,EAAsB,MAAO,EAAI,SAEvC,GAAI,EAAQ,OAAS,QACnB,OAAO,QAAQ,IAAI,kBACnB,OAAO,QAAQ,IAAI,yBAErB,IAAM,EACJ,EAAQ,OAAS,UACb,EAAO,UAAY,EAAY,EAAE,EAAE,SAAS,WAAW,EACvD,EACE,EAAS,MAAM,CAAmB,EAClC,EAAY,EAAE,EAAE,SAAS,WAAW,EAC5C,GAAI,CAAC,EAAU,OAAO,MAAO,EAAO,KAAS,MAAM,yBAAyB,CAAC,EAC7E,IAAM,EAAa,EAAW,EACxB,EAAS,MAAO,EACpB,CACE,IAAK,CACH,KAAM,QAAQ,IAAI,iBAAmB,MACrC,QAAS,EACT,QAAS,CACX,EACA,WACA,OACA,WACA,WAAY,EAAO,QAAQ,IAAI,iBAAiB,EAChD,SAAU,CACR,KACE,QAAQ,IAAI,cACX,CAAC,SAAU,OAAQ,MAAM,EAAE,SAAS,CAAgB,GACrD,QAAQ,IAAI,8BAAgC,KAC5C,QAAQ,IAAI,8BAAgC,OACxC,cACA,YAAY,EAAiB,QAAQ,mBAAoB,GAAG,OACpE,EACA,OAAQ,CACN,IAAK,QAAQ,IAAI,oBACjB,KAAM,QAAQ,IAAI,qBAClB,MAAO,CAAC,EAAO,QAAQ,IAAI,6BAA6B,CAC1D,EACA,cAAe,CACb,SAAU,QAAQ,IAAI,4BACtB,QAAS,QAAQ,IAAI,0BACvB,EACA,OAAQ,CACN,UAAW,QAAQ,IAAI,oBACvB,QAAS,CAAC,EACR,QAAQ,IAAI,iCAAmC,QAAQ,IAAI,+BAC7D,EACA,KAAM,QAAQ,IAAI,gBAClB,QAAS,QAAQ,IAAI,uBACvB,EACA,QAAS,CACP,QAAS,QAAQ,IAAI,sBACvB,EACA,GAAI,CACF,YAAa,CAAC,EACZ,QAAQ,IAAI,8BAAgC,QAAQ,IAAI,4BAC1D,EACA,IACE,QAAQ,IAAI,uBAAyB,OACjC,GACA,CAAC,EAAO,QAAQ,IAAI,oBAAoB,CAChD,CACF,EACA,IAAmB,OACf,OACA,CACE,aACA,SAAU,CAAC,EAAS,IAClB,EAAO,IAAI,SAAU,EAAG,CACtB,GAAI,CAAC,EAAO,SAAU,MAAO,EAAc,SAAS,CAAQ,EAC5D,OAAO,MAAO,EAAS,EAAS,EAAU,EAAY,EAAe,KAAM,CAAQ,EACpF,CACL,CACN,EAAE,KACA,EAAO,QAAQ,EAAO,MAAM,CAAC,EAAG,CAAE,kBAAmB,EAAM,CAAC,CAAC,EAC7D,EAAO,MAAM,CAAC,IAAU,CACtB,GAAI,IAAmB,QAAa,IAAS,QAAa,CAAC,EAAa,CAAK,EAAG,OAAO,EAAO,KAAK,CAAK,EACxG,OAAO,EAAmB,EAAgB,EAAU,CAAI,EAAE,KACxD,EAAO,QAAQ,CAAC,IACd,EACI,EAAO,KACP,EAAO,KACD,MACF,wBAAwB,QAAW,wIAEnC,CAAE,MAAO,CAAM,CACjB,CACF,CACN,CACF,EACD,CACH,EACA,GAAI,IAAW,OAAW,OAC1B,IAAM,EAAM,EAAW,cAAc,EAAO,OAAO,EAEnD,GADA,QAAQ,IAAI,EAAQ,OAAS,QAAU,KAAK,UAAU,CAAE,KAAI,CAAC,EAAI,uBAAuB,GAAK,EACzF,EAAQ,OAAS,WAAa,CAAC,EAAqB,QAAQ,IAAI,mBAAmB,GAAU,EAGjG,OADA,OADgB,MAAO,EAAQ,SAChB,MAAM,EAAE,KAAK,EAAO,SAAS,EAAS,OAAO,YAAY,CAAC,EAAG,EAAO,UAAU,EACtF,MAAO,EAAQ,OAAS,UAC3B,EAAO,SACP,EAAQ,OAAS,QACf,EAAkB,EAClB,EAAO,MACd,EAAE,KAAK,EAAO,aAAa,CAAE,KAAM,QAAS,CAAC,CAAC,CACjD,EACD,EAEK,EAAW,EAAO,eAAe,EAAQ,IAAI,EAC7C,EAAa,EAAO,aAAa,CAAQ,EACzC,EAAa,EAAO,oBAAoB,CAAQ,EAEhD,EAAW,EAAO,WAAW,SAAU,CAC3C,EACA,EACA,EACA,EACA,EACA,CACA,IAAM,EAAK,MAAO,EAAW,WACvB,EAAO,EAAO,IAAM,EAAK,OAC/B,MAAO,EAAG,cAAc,EAAK,QAAQ,CAAI,EAAG,CAAE,UAAW,EAAK,CAAC,EAC/D,IAAM,EAAO,CACX,KACA,QAAS,EACT,IAAK,EAAW,cAAc,CAAO,EACrC,IAAK,QAAQ,IACb,UACF,EACM,EAAU,MAAO,EAAW,CAAI,EAChC,EAAU,EAAG,eAAe,CAAI,EAAE,KACtC,EAAO,QAAQ,CAAU,EACzB,EAAO,cAAc,IAAG,CAAG,OAAS,CACtC,EACM,EAAO,CAAC,IACZ,GAAO,KAAO,EAAK,IACnB,EAAM,UAAY,EAAK,SACvB,EAAM,MAAQ,EAAK,KACnB,EAAM,MAAQ,EAAK,KACnB,EAAM,WAAa,EAAK,SAS1B,OARA,MAAO,EAAG,gBAAgB,EAAM,EAAS,CAAE,KAAM,GAAM,CAAC,EAAE,KAAK,EAAO,QAAQ,EAAG,OAAO,EAAM,CAAI,CAAC,CAAC,EACpG,MAAO,EAAQ,KACb,EAAO,aAAa,CAAI,EACxB,EAAO,OAAO,EAAS,OAAO,WAAW,CAAC,EAC1C,EAAO,OACP,EAAO,QAAQ,CAAQ,EACvB,EAAO,UACT,EACO,EAAQ,KACb,EAAO,QAAQ,CAAC,IAAW,EAAK,CAAK,EAAI,EAAG,OAAO,CAAI,EAAI,EAAO,IAAK,EACvE,EAAO,MACT,EACD,EAEK,EAAqB,EAAO,WAAW,SAAU,CAAC,EAA0B,EAAkB,EAAc,CAChH,IAAM,EAAQ,MAAO,EAAQ,UAAU,IAAK,EAAS,IAAK,EAAW,EAAU,CAAI,CAAE,CAAC,EAAE,KACtF,EAAO,aAAa,CAAC,IAAU,IAAU,MAAS,EAClD,EAAO,MAAM,EAAS,OAAO,YAAY,CAAC,EAC1C,EAAO,cAAc,YAAY,CACnC,EACA,OAAO,EAAO,OAAO,CAAK,EAC3B,EAED,SAAS,CAAU,CAAC,EAAkB,EAAc,CAClD,MAAO,UAAU,EAAS,SAAS,GAAG,EAAI,IAAI,KAAc,KAAY,IAG1E,SAAS,CAAM,CAAC,EAAgB,CAC9B,OAAO,IAAU,KAAO,GAAO,YAAY,IAAM,OAGnD,SAAS,CAAY,CAAC,EAAyB,CAC7C,GAAI,OAAO,IAAU,UAAY,IAAU,KAAM,MAAO,GACxD,GAAI,SAAU,GAAS,EAAM,OAAS,aAAc,MAAO,GAC3D,MAAO,UAAW,GAAS,EAAa,EAAM,KAAK,EAGrD,SAAS,CAAiB,EAAG,CAC3B,OAAO,EAAO,SAAe,CAAC,IAAW,CACvC,IAAM,EAAQ,IAAM,EAAO,EAAO,IAAI,EAItC,GAHA,QAAQ,MAAM,KAAK,MAAO,CAAK,EAC/B,QAAQ,MAAM,KAAK,QAAS,CAAK,EACjC,QAAQ,MAAM,OAAO,EACjB,QAAQ,MAAM,eAAiB,QAAQ,MAAM,UAAW,EAAM,EAClE,OAAO,EAAO,KAAK,IAAM,CACvB,QAAQ,MAAM,IAAI,MAAO,CAAK,EAC9B,QAAQ,MAAM,IAAI,QAAS,CAAK,EAChC,QAAQ,MAAM,MAAM,EACrB,EACF,EC/OH,IAAe,KAAQ,QACrB,EAAS,SAAS,MAClB,EAAO,WAAW,SAAU,CAAC,EAAO,CAClC,GAAI,EAAM,SAAW,EAAM,MAAO,OAAO,MAAO,EAAO,KAAS,MAAM,0CAA0C,CAAC,EACjH,OAAO,MAAO,EAAc,IAAI,CAC9B,KAAM,EAAM,QAAU,UAAY,EAAM,MAAQ,QAAU,UAC1D,SAAU,EAAO,eAAe,EAAM,QAAQ,EAC9C,KAAM,EAAO,eAAe,EAAM,IAAI,CACxC,CAAC,EACF,CACH", | ||
| "debugId": "7ECE1B7370817BF964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/logo.ts"], | ||
| "sourcesContent": [ | ||
| "export const logo = {\n left: [\" \", \"█▀▀█ █▀▀█ █▀▀█ █▀▀▄\", \"█__█ █__█ █^^^ █__█\", \"▀▀▀▀ █▀▀▀ ▀▀▀▀ ▀~~▀\"],\n right: [\" ▄ \", \"█▀▀▀ █▀▀█ █▀▀█ █▀▀█\", \"█___ █__█ █__█ █^^^\", \"▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀\"],\n}\n\nexport const go = {\n left: [\" \", \"█▀▀▀\", \"█_^█\", \"▀▀▀▀\"],\n right: [\" \", \"█▀▀█\", \"█__█\", \"▀▀▀▀\"],\n}\n" | ||
| ], | ||
| "mappings": ";AAAO,IAAM,EAAO,CAClB,KAAM,CAAC,sBAAuB,sGAAsB,yDAAuB,2FAAqB,EAChG,MAAO,CAAC,2BAAsB,sGAAuB,oDAAuB,qGAAqB,CACnG,EAEa,EAAK,CAChB,KAAM,CAAC,OAAQ,2BAAO,iBAAQ,0BAAM,EACpC,MAAO,CAAC,OAAQ,2BAAO,iBAAQ,0BAAM,CACvC", | ||
| "debugId": "2D97B4EFAC178E7864756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/mini.ts", "src/mini-host.ts"], | ||
| "sourcesContent": [ | ||
| "import { Service, type Endpoint } from \"@opencode-ai/client/effect/service\"\nimport { ClientError, OpenCode, type OpenCodeClient } from \"@opencode-ai/client/promise\"\nimport type { MiniFrontendInput } from \"@opencode-ai/tui/mini\"\nimport { setTimeout } from \"node:timers/promises\"\nimport { readStdin } from \"./util/io\"\nimport { createMiniHost, INTERACTIVE_INPUT_ERROR, usingInteractiveStdin } from \"./mini-host\"\nimport { parseSessionTargetModel, resolveSessionTarget, type SessionTargetPreparation } from \"./session-target\"\n\nexport type MiniCommandInput = {\n server: {\n endpoint: Endpoint\n reconnect?: (signal: AbortSignal) => Promise<Endpoint>\n }\n continue?: boolean\n session?: string\n fork?: boolean\n model?: string\n agent?: string\n prompt?: string\n replay?: boolean\n replayLimit?: number\n demo?: boolean\n tuiConfig?: MiniFrontendInput[\"tuiConfig\"]\n config?: MiniFrontendInput[\"config\"]\n}\n\ntype Model = MiniFrontendInput[\"model\"]\n\nclass MiniInputError extends Error {}\n\nexport async function runMini(input: MiniCommandInput) {\n try {\n validate(input)\n const result = await usingInteractiveStdin(async (terminal) => {\n const initialInput = mergeInput(process.stdin.isTTY ? undefined : await readStdin(), input.prompt)\n const frontendTask = import(\"@opencode-ai/tui/mini\")\n const directory = localDirectory()\n const connection = createMiniConnection(input.server)\n const sdk = connection.sdk\n const requested = parseModel(input.model)\n const model = requested ? { providerID: requested.providerID, modelID: requested.id } : undefined\n const prepare = prepareTarget(input.agent)\n const resolveTarget = async (initial: OpenCodeClient, signal: AbortSignal) => {\n const resolved = await resolveMiniTarget({\n sdk: initial,\n reconnect: connection.reconnect,\n signal,\n resolve: (client) =>\n resolveSessionTarget({\n client,\n location: { directory },\n continue: input.continue,\n session: input.session,\n fork: input.fork,\n model: requested,\n agent: input.agent,\n prepare,\n signal,\n }).catch((error) => {\n if (error instanceof Error && error.message === \"Session not found\")\n throw new MiniInputError(error.message)\n throw error\n }),\n })\n const target = resolved.value\n return {\n sdk: resolved.sdk,\n sessionID: target.session.id,\n sessionTitle: target.session.title,\n location: target.location,\n model: target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined,\n variant: target.model?.variant,\n agent: target.agent,\n resume: target.resume,\n }\n }\n const create = (\n client: OpenCodeClient,\n next: {\n location: { directory: string; workspaceID?: string }\n agent: string | undefined\n model: Model\n variant: string | undefined\n },\n signal?: AbortSignal,\n ) =>\n resolveSessionTarget({\n client,\n location: { directory: next.location.directory, workspace: next.location.workspaceID },\n agent: next.agent,\n model: next.model\n ? { providerID: next.model.providerID, id: next.model.modelID, variant: next.variant }\n : undefined,\n prepare,\n signal,\n }).then((target) => ({\n sessionID: target.session.id,\n sessionTitle: target.session.title,\n location: target.location,\n model: target.model ? { providerID: target.model.providerID, modelID: target.model.id } : undefined,\n variant: target.model?.variant,\n agent: target.agent,\n resume: false,\n }))\n const frontend = await frontendTask\n return frontend.runMiniFrontend({\n host: createMiniHost({ terminal, directory }),\n sdk,\n directory,\n target: resolveTarget,\n reconnect: connection.reconnect,\n createSession: create,\n agent: input.agent,\n model,\n variant: requested?.variant,\n files: [],\n initialInput,\n replay: input.replay ?? true,\n replayLimit: input.replayLimit,\n demo: input.demo,\n tuiConfig: input.tuiConfig,\n config: input.config,\n })\n })\n if (result.exitCode !== 0) process.exit(result.exitCode)\n } catch (error) {\n if (error instanceof MiniInputError || (error instanceof Error && error.message === INTERACTIVE_INPUT_ERROR))\n fail(error.message)\n throw error\n }\n}\n\n/** @internal Exported for CLI boundary tests. */\nexport function createMiniConnection(input: MiniCommandInput[\"server\"]) {\n const make = (endpoint: Endpoint) =>\n OpenCode.make({\n baseUrl: endpoint.url,\n headers: Service.headers(endpoint),\n })\n const reconnect = input.reconnect\n return {\n sdk: make(input.endpoint),\n reconnect: reconnect\n ? async (signal: AbortSignal) => {\n const endpoint = await reconnect(signal)\n return make(endpoint)\n }\n : undefined,\n }\n}\n\n/** @internal Exported for reconnect lifecycle tests. */\nexport async function resolveMiniTarget<A>(input: {\n sdk: OpenCodeClient\n reconnect?: (signal: AbortSignal) => Promise<OpenCodeClient>\n signal: AbortSignal\n resolve: (sdk: OpenCodeClient) => Promise<A>\n}) {\n let sdk = input.sdk\n while (true) {\n try {\n return { sdk, value: await input.resolve(sdk) }\n } catch (error) {\n if (!input.reconnect || !(error instanceof ClientError) || error.reason !== \"Transport\") throw error\n while (true) {\n try {\n sdk = await input.reconnect(input.signal)\n break\n } catch (resolveError) {\n if (input.signal.aborted) throw resolveError\n await setTimeout(250, undefined, { signal: input.signal })\n }\n }\n }\n }\n}\n\nexport function validateMiniTerminal() {\n if (!process.stdout.isTTY) fail(\"opencode mini requires a TTY stdout\")\n}\n\n/** @internal Exported for testing. */\nexport function mergeInput(piped: string | undefined, prompt: string | undefined) {\n if (!prompt) return piped || undefined\n if (!piped) return prompt\n return piped + \"\\n\" + prompt\n}\n\nfunction validate(input: MiniCommandInput) {\n validateMiniTerminal()\n if (input.replayLimit !== undefined && (!Number.isInteger(input.replayLimit) || input.replayLimit <= 0)) {\n fail(\"--replay-limit must be a positive integer\")\n }\n if (input.fork && !input.continue && !input.session) fail(\"--fork requires --continue or --session\")\n}\n\nfunction localDirectory(): string {\n const root = process.env.PWD ?? process.cwd()\n try {\n process.chdir(root)\n return process.cwd()\n } catch {\n throw new MiniInputError(`Failed to change directory to ${root}`)\n }\n}\n\nfunction parseModel(value?: string) {\n try {\n return parseSessionTargetModel(value)\n } catch {\n throw new MiniInputError(\"--model must use the format provider/model[#variant]\")\n }\n}\n\nfunction prepareTarget(requestedAgent?: string): SessionTargetPreparation {\n return async (input) => ({ model: input.model, agent: requestedAgent ?? input.agent })\n}\n\nfunction fail(message: string): never {\n process.stderr.write(`\\x1b[91m\\x1b[1mError: \\x1b[0m${message}\\n`)\n process.exit(1)\n}\n", | ||
| "import type { MiniFrontendInput } from \"@opencode-ai/tui/mini\"\nimport { createModelPreferenceRepository } from \"@opencode-ai/tui/model-preference\"\nimport { Global } from \"@opencode-ai/util/global\"\nimport fs from \"node:fs\"\nimport { readFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { ReadStream } from \"node:tty\"\n\nexport const INTERACTIVE_INPUT_ERROR = \"opencode mini requires a controlling terminal for input\"\n\nexport type InteractiveStdin = {\n stdin: NodeJS.ReadStream\n cleanup(): void\n}\n\ntype MiniHost = MiniFrontendInput[\"host\"]\n\nfunction preferences(statePath: string): MiniHost[\"preferences\"] {\n const repository = createModelPreferenceRepository(path.join(statePath, \"model.json\"))\n return {\n async resolveVariant(model) {\n if (!model) return\n return repository.resolveVariant(model)\n },\n async saveVariant(model, variant) {\n if (!model) return\n await repository.saveVariant(model, variant).catch(() => undefined)\n },\n }\n}\n\nfunction signal(name: \"SIGINT\" | \"SIGUSR2\"): MiniHost[\"signals\"][\"sigint\"] {\n return {\n subscribe(listener) {\n let subscribed = true\n process.on(name, listener)\n return () => {\n if (!subscribed) return\n subscribed = false\n process.off(name, listener)\n }\n },\n }\n}\n\nfunction createTrace(\n logPath: string,\n diagnostics: { pid: number; cwd: string; argv: string[] },\n): MiniHost[\"diagnostics\"][\"trace\"] {\n if (!process.env.OPENCODE_DIRECT_TRACE) return\n const stamp = new Date()\n .toISOString()\n .replace(/[-:]/g, \"\")\n .replace(/\\.\\d+Z$/, \"Z\")\n const target = path.join(logPath, \"direct\", `${stamp}-${diagnostics.pid}.jsonl`)\n const text = (data: unknown) =>\n JSON.stringify(data, (_key, value) => (typeof value === \"bigint\" ? String(value) : value), 0)\n fs.mkdirSync(path.dirname(target), { recursive: true })\n fs.writeFileSync(\n path.join(logPath, \"direct\", \"latest.json\"),\n text({\n time: new Date().toISOString(),\n ...diagnostics,\n path: target,\n }) + \"\\n\",\n )\n const trace = {\n write(type: string, data?: unknown) {\n fs.appendFileSync(\n target,\n text({\n time: new Date().toISOString(),\n pid: diagnostics.pid,\n type,\n data,\n }) + \"\\n\",\n )\n },\n }\n trace.write(\"trace.start\", {\n argv: diagnostics.argv,\n cwd: diagnostics.cwd,\n path: target,\n })\n return trace\n}\n\nfunction openTerminalStdin(target: string): NodeJS.ReadStream {\n return new ReadStream(fs.openSync(target, \"r\"))\n}\n\nexport function resolveInteractiveStdin(\n stdin: NodeJS.ReadStream = process.stdin,\n open: (target: string) => NodeJS.ReadStream = openTerminalStdin,\n platform: NodeJS.Platform = process.platform,\n): InteractiveStdin {\n if (stdin.isTTY) return { stdin, cleanup() {} }\n const target = platform === \"win32\" ? \"CONIN$\" : \"/dev/tty\"\n try {\n const source = open(target)\n let cleaned = false\n return {\n stdin: source,\n cleanup() {\n if (cleaned) return\n cleaned = true\n source.destroy()\n },\n }\n } catch (error) {\n throw new Error(INTERACTIVE_INPUT_ERROR, { cause: error })\n }\n}\n\n/** @internal Exported for owner-local resource cleanup tests. */\nexport async function usingInteractiveStdin<T>(\n run: (terminal: InteractiveStdin) => Promise<T>,\n resolve: () => InteractiveStdin = resolveInteractiveStdin,\n) {\n const terminal = resolve()\n try {\n return await run(terminal)\n } finally {\n terminal.cleanup()\n }\n}\n\n/** @internal Exported for owner-local host capability tests. */\nexport function createMiniHost(input: {\n terminal: InteractiveStdin\n directory: string\n paths?: { home: string; state: string; log: string }\n}): MiniHost {\n const paths = input.paths ?? {\n home: Global.Path.home,\n state: Global.Path.state,\n log: Global.Path.log,\n }\n const diagnostics = {\n pid: process.pid,\n cwd: input.directory,\n argv: process.argv.slice(2),\n }\n return {\n terminal: { stdin: input.terminal.stdin },\n platform: process.platform,\n stdout: {\n write(value) {\n process.stdout.write(value)\n },\n },\n files: {\n readText: (url) => readFile(new URL(url), \"utf8\"),\n },\n editor: {\n async open(options) {\n const { openEditor } = await import(\"@opencode-ai/tui/editor\")\n return openEditor(options)\n },\n },\n paths: { home: paths.home },\n signals: {\n sigint: signal(\"SIGINT\"),\n sigusr2: signal(\"SIGUSR2\"),\n },\n startup: {\n showTiming: [\"1\", \"true\"].includes(process.env.OPENCODE_SHOW_TTFD?.toLowerCase() ?? \"\"),\n now: () => performance.now(),\n },\n diagnostics: {\n trace: createTrace(paths.log, diagnostics),\n },\n preferences: preferences(paths.state),\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "BB4DEB44CA1AB34164756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/restart.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.restart,\n Effect.fn(\"cli.service.restart\")(function* () {\n const options = yield* ServiceConfig.options()\n yield* Service.stop(options)\n const transport = yield* Service.ensure(options)\n process.stdout.write(transport.url + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";+0BAAA,mBAAS,gBAOT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,aACnC,OAAO,QAAG,0BAAqB,OAAE,cAAU,OAAG,MAC5C,SAAM,OAAU,WAAO,OAAc,aAAQ,EAC7C,MAAO,EAAQ,KAAK,CAAO,EAC3B,IAAM,EAAY,MAAO,EAAQ,OAAO,CAAO,EAC/C,QAAQ,OAAO,MAAM,EAAU,IAAM,CAAG,EACzC,CACH", | ||
| "debugId": "61E35DEFF7072DF464756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/util/persistence.ts", "../tui/src/util/record.ts", "../tui/src/model-preference.ts"], | ||
| "sourcesContent": [ | ||
| "import path from \"path\"\nimport { appendFile, mkdir, readFile, rename, rm, writeFile } from \"fs/promises\"\n\nexport function readText(filePath: string) {\n return readFile(filePath, \"utf8\")\n}\n\nexport async function readJson<T>(filePath: string) {\n return JSON.parse(await readFile(filePath, \"utf8\")) as T\n}\n\nexport async function writeText(filePath: string, content: string) {\n await mkdir(path.dirname(filePath), { recursive: true })\n await writeFile(filePath, content)\n}\n\nexport async function appendText(filePath: string, content: string) {\n await mkdir(path.dirname(filePath), { recursive: true })\n await appendFile(filePath, content)\n}\n\nexport async function writeJsonAtomic(filePath: string, value: unknown) {\n await mkdir(path.dirname(filePath), { recursive: true })\n const temporary = `${filePath}.${process.pid}.${crypto.randomUUID()}.tmp`\n await writeFile(temporary, JSON.stringify(value)).catch(async (error) => {\n await rm(temporary, { force: true }).catch(() => undefined)\n throw error\n })\n await rename(temporary, filePath).catch(async (error) => {\n await rm(temporary, { force: true }).catch(() => undefined)\n throw error\n })\n}\n", | ||
| "export function isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value)\n}\n", | ||
| "import { readJson, writeJsonAtomic } from \"./util/persistence\"\nimport { isRecord } from \"./util/record\"\n\nexport type ModelPreferenceModel = {\n providerID: string\n modelID: string\n}\n\nexport type ModelPreference = {\n recent: ModelPreferenceModel[]\n favorite: ModelPreferenceModel[]\n variant: Record<string, string | undefined>\n}\n\nexport type ModelPreferenceDocument = Record<string, unknown> & ModelPreference\n\nfunction models(value: unknown) {\n if (!Array.isArray(value)) return []\n return value.flatMap((item): ModelPreferenceModel[] => {\n if (!isRecord(item)) return []\n if (typeof item.providerID !== \"string\" || item.providerID.length === 0) return []\n if (typeof item.modelID !== \"string\" || item.modelID.length === 0) return []\n return [{ providerID: item.providerID, modelID: item.modelID }]\n })\n}\n\nfunction variants(value: unknown) {\n if (!isRecord(value)) return {}\n return Object.fromEntries(\n Object.entries(value).flatMap(([key, item]) => {\n if (key.length === 0 || typeof item !== \"string\" || item.length === 0) return []\n const variant = normalizeModelVariant(item)\n return variant === undefined ? [] : ([[key, variant]] as const)\n }),\n )\n}\n\nexport function normalizeModelVariant(value: string | undefined) {\n return value === \"default\" ? undefined : value\n}\n\nexport function modelPreferenceKey(model: ModelPreferenceModel) {\n return `${model.providerID}/${model.modelID}`\n}\n\nexport function cycleModelVariant(current: string | undefined, variants: string[]) {\n const named = variants.filter((variant) => variant !== \"default\")\n if (named.length === 0) return undefined\n const value = normalizeModelVariant(current)\n if (value === undefined) return named[0]\n const index = named.indexOf(value)\n if (index === -1 || index === named.length - 1) return undefined\n return named[index + 1]\n}\n\nexport function decodeModelPreference(value: unknown): ModelPreferenceDocument {\n const root = isRecord(value) ? value : {}\n return {\n ...root,\n recent: models(root.recent),\n favorite: models(root.favorite),\n variant: variants(root.variant),\n }\n}\n\nfunction preference(value: ModelPreferenceDocument): ModelPreference {\n return {\n recent: value.recent,\n favorite: value.favorite,\n variant: value.variant,\n }\n}\n\nfunction patch(value: Partial<ModelPreference>) {\n return {\n ...(value.recent === undefined ? {} : { recent: models(value.recent) }),\n ...(value.favorite === undefined ? {} : { favorite: models(value.favorite) }),\n ...(value.variant === undefined ? {} : { variant: variants(value.variant) }),\n }\n}\n\nexport function createModelPreferenceRepository(filePath: string) {\n const state = {\n pending: Promise.resolve(),\n }\n const read = () =>\n readJson<unknown>(filePath)\n .then(decodeModelPreference)\n .catch(() => decodeModelPreference(undefined))\n\n function update(change: (current: ModelPreference) => Partial<ModelPreference>) {\n const result = state.pending.then(async () => {\n const current = await read()\n const next = { ...current, ...patch(change(preference(current))) }\n await writeJsonAtomic(filePath, next)\n })\n state.pending = result.catch(() => undefined)\n return result\n }\n\n function load() {\n return state.pending.then(read).then(preference)\n }\n\n return {\n load,\n patch(value: Partial<ModelPreference>) {\n return update(() => value)\n },\n async resolveVariant(model: ModelPreferenceModel) {\n return (await load()).variant[modelPreferenceKey(model)]\n },\n saveVariant(model: ModelPreferenceModel, value: string | undefined) {\n const key = modelPreferenceKey(model)\n const next = normalizeModelVariant(value)\n return update((current) => {\n const variant = { ...current.variant }\n if (next === undefined) delete variant[key]\n if (next !== undefined) variant[key] = next\n return { variant }\n })\n },\n }\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "9747D1C2D66C049164756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/ui/timeline.tsx", "src/commands/handlers/console/login.ts"], | ||
| "sourcesContent": [ | ||
| "import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n/** @jsxImportSource @opentui/solid */\nimport { createCliRenderer, RGBA } from \"@opentui/core\";\nimport { createScrollbackWriter, render, useKeyboard } from \"@opentui/solid\";\nimport { registerOpencodeSpinner } from \"@opencode-ai/tui/component/register-spinner\";\nimport { Show, createSignal } from \"solid-js\";\nregisterOpencodeSpinner();\nconst SPINNER_FRAMES = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\nconst IDLE_TIMEOUT = 1_000;\nconst COLORS = {\n accent: RGBA.fromIndex(6),\n error: RGBA.fromIndex(1),\n foreground: RGBA.defaultForeground(),\n muted: RGBA.fromIndex(8),\n success: RGBA.fromIndex(2)\n};\nconst ROWS = {\n intro: {\n marker: \"┌\",\n color: COLORS.muted,\n connector: true\n },\n item: {\n marker: \"●\",\n color: COLORS.accent,\n connector: true\n },\n success: {\n marker: \"◇\",\n color: COLORS.success,\n connector: true\n },\n failure: {\n marker: \"■\",\n color: COLORS.error,\n connector: false\n },\n outro: {\n marker: \"└\",\n color: COLORS.muted,\n connector: false\n }\n};\nfunction row(kind, value) {\n const style = ROWS[kind];\n return createScrollbackWriter(() => (() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"minHeight\", 1);\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$insertNode(_el$2, _el$3);\n _$insertNode(_el$2, _el$4);\n _$setProp(_el$2, \"width\", \"100%\");\n _$setProp(_el$2, \"minHeight\", 1);\n _$setProp(_el$2, \"flexDirection\", \"row\");\n _$setProp(_el$2, \"gap\", 1);\n _$setProp(_el$3, \"flexShrink\", 0);\n _$insert(_el$3, () => style.marker);\n _$setProp(_el$4, \"wrapMode\", \"word\");\n _$insert(_el$4, value);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return style.connector;\n },\n get children() {\n var _el$5 = _$createElement(\"text\");\n _$insertNode(_el$5, _$createTextNode(`│`));\n _$effect(_$p => _$setProp(_el$5, \"fg\", COLORS.muted, _$p));\n return _el$5;\n }\n }), null);\n _$effect(_p$ => {\n var _v$ = style.color,\n _v$2 = COLORS.foreground;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$3, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, \"fg\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n })(), {\n startOnNewLine: true,\n trailingNewline: !style.connector\n });\n}\nfunction TimelineFooter(props) {\n useKeyboard(event => {\n if (event.name !== \"escape\" && !(event.ctrl && event.name === \"c\")) return;\n event.preventDefault();\n props.cancel();\n });\n return (() => {\n var _el$7 = _$createElement(\"box\");\n _$setProp(_el$7, \"width\", \"100%\");\n _$setProp(_el$7, \"height\", 1);\n _$setProp(_el$7, \"flexDirection\", \"row\");\n _$setProp(_el$7, \"gap\", 1);\n _$insert(_el$7, _$createComponent(Show, {\n get when() {\n return props.pending();\n },\n children: text => [(() => {\n var _el$8 = _$createElement(\"spinner\");\n _$setProp(_el$8, \"frames\", SPINNER_FRAMES);\n _$setProp(_el$8, \"interval\", 80);\n _$effect(_$p => _$setProp(_el$8, \"color\", COLORS.accent, _$p));\n return _el$8;\n })(), (() => {\n var _el$9 = _$createElement(\"text\");\n _$setProp(_el$9, \"wrapMode\", \"none\");\n _$setProp(_el$9, \"truncate\", true);\n _$insert(_el$9, text);\n _$effect(_$p => _$setProp(_el$9, \"fg\", COLORS.foreground, _$p));\n return _el$9;\n })()]\n }));\n return _el$7;\n })();\n}\nfunction bounded(task) {\n return new Promise(resolve => {\n const timer = setTimeout(resolve, IDLE_TIMEOUT);\n timer.unref();\n const finish = () => {\n clearTimeout(timer);\n resolve();\n };\n void task.then(finish, finish);\n });\n}\nasync function shutdown(renderer) {\n await bounded(renderer.idle());\n try {\n renderer.externalOutputMode = \"passthrough\";\n } finally {\n try {\n renderer.screenMode = \"main-screen\";\n } finally {\n if (!renderer.isDestroyed) renderer.destroy();\n }\n }\n}\nexport async function createTimelineHost() {\n const stdout = process.stdout;\n const controller = new AbortController();\n const signals = [\"SIGINT\", \"SIGHUP\", \"SIGQUIT\"];\n const cancel = () => {\n if (!controller.signal.aborted) controller.abort();\n };\n signals.forEach(signal => process.on(signal, cancel));\n if (!stdout.isTTY || !process.stdin.isTTY) {\n let closed = false;\n let writing = false;\n let active;\n let closeTask;\n const write = async (kind, text) => {\n if (closed) throw new Error(\"timeline closed\");\n if (writing) throw new Error(\"timeline write already in progress\");\n writing = true;\n try {\n const style = kind === \"pending\" ? undefined : ROWS[kind];\n const marker = kind === \"pending\" ? \".\" : ROWS[kind].marker;\n const connector = style?.connector ? \"│\\n\" : \"\";\n active = new Promise((resolve, reject) => {\n stdout.write(`${marker} ${text}\\n${connector}`, error => error ? reject(error) : resolve());\n });\n await active;\n } finally {\n writing = false;\n active = undefined;\n }\n };\n const close = () => {\n if (closeTask) return closeTask;\n closed = true;\n closeTask = (async () => {\n await active?.catch(() => {});\n signals.forEach(signal => process.off(signal, cancel));\n })();\n return closeTask;\n };\n return {\n signal: controller.signal,\n intro: text => write(\"intro\", text),\n item: text => write(\"item\", text),\n pending: text => write(\"pending\", text),\n success: text => write(\"success\", text),\n failure: text => write(\"failure\", text),\n outro: text => write(\"outro\", text),\n close\n };\n }\n let renderer;\n try {\n // Start on a fresh row so delayed SSH cursor reports cannot make\n // split-footer overwrite the shell command.\n process.stdout.write(\"\\n\");\n renderer = await createCliRenderer({\n stdin: process.stdin,\n useMouse: false,\n autoFocus: false,\n openConsoleOnError: false,\n exitOnCtrlC: false,\n exitSignals: [],\n screenMode: \"split-footer\",\n footerHeight: 1,\n externalOutputMode: \"capture-stdout\",\n consoleMode: \"disabled\",\n clearOnShutdown: false\n });\n const activeRenderer = renderer;\n const [pending, setPending] = createSignal();\n const renderTask = render(() => _$createComponent(TimelineFooter, {\n pending: pending,\n cancel: cancel\n }), activeRenderer);\n void renderTask.catch(cancel);\n await bounded(activeRenderer.idle());\n let closed = false;\n let writing = false;\n let active;\n let closeTask;\n const write = (kind, text) => {\n if (closed) return Promise.reject(new Error(\"timeline closed\"));\n if (writing) return Promise.reject(new Error(\"timeline write already in progress\"));\n writing = true;\n active = (async () => {\n if (kind === \"pending\") {\n setPending(text);\n activeRenderer.requestRender();\n } else {\n if (kind === \"success\" || kind === \"failure\" || kind === \"outro\") setPending(undefined);\n activeRenderer.writeToScrollback(row(kind, text));\n activeRenderer.requestRender();\n }\n await bounded(activeRenderer.idle());\n })().finally(() => {\n writing = false;\n active = undefined;\n });\n return active;\n };\n const close = () => {\n if (closeTask) return closeTask;\n closed = true;\n closeTask = (async () => {\n await active?.catch(() => {});\n try {\n await shutdown(activeRenderer);\n await bounded(renderTask);\n } finally {\n signals.forEach(signal => process.off(signal, cancel));\n }\n })();\n return closeTask;\n };\n return {\n signal: controller.signal,\n intro: text => write(\"intro\", text),\n item: text => write(\"item\", text),\n pending: text => write(\"pending\", text),\n success: text => write(\"success\", text),\n failure: text => write(\"failure\", text),\n outro: text => write(\"outro\", text),\n close\n };\n } catch (error) {\n try {\n if (renderer) await shutdown(renderer);\n } finally {\n signals.forEach(signal => process.off(signal, cancel));\n }\n throw error;\n }\n}", | ||
| "import { Cause, Effect, Exit, Option } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode, type OpenCodeClient } from \"@opencode-ai/client/promise\"\nimport { AppProcess } from \"@opencode-ai/util/process\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\nimport { createTimelineHost, type TimelineHost } from \"../../../ui/timeline\"\n\nconst integrationID = \"opencode\"\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.console.commands.login,\n Effect.fn(\"cli.console.login\")(function* (input) {\n const timeline = yield* Effect.acquireRelease(\n Effect.promise(() => createTimelineHost()),\n (value) => request(() => value.close()).pipe(Effect.ignore),\n )\n const exit = yield* login(timeline, Option.getOrUndefined(input.url)).pipe(\n Effect.raceFirst(AppProcess.waitForAbort(timeline.signal)),\n Effect.exit,\n )\n if (Exit.isSuccess(exit)) return\n\n const cancelled = timeline.signal.aborted\n yield* request(() => timeline.failure(cancelled ? \"Authorization cancelled\" : errorMessage(exit.cause))).pipe(\n Effect.ignore,\n )\n process.exitCode = cancelled ? 130 : 1\n }),\n)\n\nconst login = Effect.fn(\"cli.console.login.run\")(function* (timeline: TimelineHost, server?: string) {\n yield* request(() => timeline.intro(\"Log in\"))\n yield* request(() => timeline.pending(\"Connecting to OpenCode...\"))\n\n const endpoint = yield* Service.ensure(yield* ServiceConfig.options())\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const found = yield* request((signal) => client.integration.get({ integrationID, location }, { signal }))\n const integration = yield* required(found.data, \"OpenCode Console integration is unavailable\")\n const method = yield* required(\n integration.methods.find((candidate) => candidate.type === \"oauth\"),\n \"OpenCode Console login is unavailable\",\n )\n\n yield* request(() => timeline.pending(\"Starting authorization...\"))\n const started = yield* request((signal) =>\n client.integration.oauth.connect(\n {\n integrationID,\n methodID: method.id,\n inputs: server ? { server } : {},\n location,\n },\n { signal },\n ),\n )\n const attempt = started.data\n yield* Effect.addFinalizer(() =>\n request(() =>\n client.integration.oauth.cancel(\n { integrationID, attemptID: attempt.attemptID, location },\n { signal: AbortSignal.timeout(5_000) },\n ),\n ).pipe(Effect.ignore),\n )\n if (attempt.mode !== \"auto\") yield* Effect.fail(new Error(\"OpenCode Console requires a device login\"))\n\n yield* request(() => timeline.item(`Go to: ${attempt.url}`))\n yield* request(() => timeline.item(attempt.instructions))\n yield* request(async () => {\n const { default: open } = await import(\"open\")\n await open(attempt.url)\n }).pipe(Effect.ignore)\n yield* request(() => timeline.pending(\"Waiting for authorization...\"))\n\n const status = yield* waitForConsoleLogin(client, integrationID, attempt.attemptID)\n if (status.status === \"failed\") yield* Effect.fail(new Error(status.message))\n if (status.status === \"expired\") yield* Effect.fail(new Error(\"Device code expired\"))\n\n yield* request(() => timeline.success(\"Connected to OpenCode Console\"))\n yield* request(() => timeline.outro(\"Done\"))\n})\n\nconst waitForConsoleLogin = Effect.fn(\"cli.console.login.wait\")(function* (\n client: OpenCodeClient,\n integrationID: string,\n attemptID: string,\n) {\n while (true) {\n const response = yield* request((signal) =>\n client.integration.oauth.status({ integrationID, attemptID, location }, { signal }),\n )\n if (response.data.status !== \"pending\") return response.data\n yield* Effect.sleep(500)\n }\n})\n\nfunction request<A>(task: (signal: AbortSignal) => Promise<A>) {\n return Effect.tryPromise({\n try: task,\n catch: (cause) => cause,\n })\n}\n\nfunction required<A>(value: A | null | undefined, message: string) {\n return value === null || value === undefined ? Effect.fail(new Error(message)) : Effect.succeed(value)\n}\n\nfunction errorMessage(cause: Cause.Cause<unknown>) {\n const error = Cause.squash(cause)\n if (error instanceof Error) return error.message\n if (typeof error === \"object\" && error !== null && \"message\" in error && typeof error.message === \"string\") {\n return error.message\n }\n return String(error)\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "D3FDE3CD20549AA364756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/auth/connect.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { OpenCode, type IntegrationCommandStatusOutput, type OpenCodeClient } from \"@opencode-ai/client/promise\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.auth.commands.connect,\n Effect.fn(\"cli.auth.connect\")(function* (input) {\n process.stdout.write(\"Connecting...\" + EOL + EOL)\n const endpoint = yield* Service.ensure(yield* ServiceConfig.options())\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n yield* request(() => client.integration.wellknown.add({ url: input.url, location }))\n const integrationID = input.url.replace(/\\/+$/, \"\")\n const started = yield* request(() =>\n client.integration.command.connect({ integrationID, methodID: \"login\", location }),\n )\n yield* Effect.addFinalizer(() =>\n request(() =>\n client.integration.command.cancel({ integrationID, attemptID: started.data.attemptID, location }),\n ).pipe(Effect.ignore),\n )\n\n const status = yield* wait(client, integrationID, started.data.attemptID)\n if (status.status === \"failed\") return yield* Effect.fail(new Error(status.message))\n if (status.status === \"expired\") return yield* Effect.fail(new Error(\"Authentication expired\"))\n process.stdout.write(\"Connected\" + EOL)\n }),\n)\n\nconst wait = (\n client: OpenCodeClient,\n integrationID: string,\n attemptID: string,\n shown = false,\n): Effect.Effect<Exclude<IntegrationCommandStatusOutput[\"data\"], { status: \"pending\" }>, unknown> =>\n Effect.gen(function* () {\n const response = yield* request(() => client.integration.command.status({ integrationID, attemptID, location }))\n if (response.data.status !== \"pending\") return response.data\n const output = response.data.message?.trim()\n if (!shown && output) process.stdout.write(output + EOL + EOL)\n yield* Effect.sleep(500)\n return yield* wait(client, integrationID, attemptID, shown || !!output)\n })\n\nfunction request<A>(task: () => Promise<A>) {\n return Effect.tryPromise({ try: task, catch: (cause) => cause })\n}\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAM,OAAW,MAAE,eAAW,aAAQ,SAAI,MAAE,OAE7B,SAAQ,aACrB,OAAS,cAAS,UAAK,cAAS,aAChC,OAAO,QAAG,uBAAkB,OAAE,cAAU,MAAC,EAAO,CAC9C,QAAQ,OAAO,MAAM,gBAAkB,EAAM,CAAG,EAChD,IAAM,EAAW,MAAO,EAAQ,OAAO,MAAO,EAAc,QAAQ,CAAC,EAC/D,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAC1F,MAAO,EAAQ,IAAM,EAAO,YAAY,UAAU,IAAI,CAAE,IAAK,EAAM,IAAK,UAAS,CAAC,CAAC,EACnF,IAAM,EAAgB,EAAM,IAAI,QAAQ,OAAQ,EAAE,EAC5C,EAAU,MAAO,EAAQ,IAC7B,EAAO,YAAY,QAAQ,QAAQ,CAAE,gBAAe,SAAU,QAAS,UAAS,CAAC,CACnF,EACA,MAAO,EAAO,aAAa,IACzB,EAAQ,IACN,EAAO,YAAY,QAAQ,OAAO,CAAE,gBAAe,UAAW,EAAQ,KAAK,UAAW,UAAS,CAAC,CAClG,EAAE,KAAK,EAAO,MAAM,CACtB,EAEA,IAAM,EAAS,MAAO,EAAK,EAAQ,EAAe,EAAQ,KAAK,SAAS,EACxE,GAAI,EAAO,SAAW,SAAU,OAAO,MAAO,EAAO,KAAS,MAAM,EAAO,OAAO,CAAC,EACnF,GAAI,EAAO,SAAW,UAAW,OAAO,MAAO,EAAO,KAAS,MAAM,wBAAwB,CAAC,EAC9F,QAAQ,OAAO,MAAM,YAAc,CAAG,EACvC,CACH,EAEM,EAAO,CACX,EACA,EACA,EACA,EAAQ,KAER,EAAO,IAAI,SAAU,EAAG,CACtB,IAAM,EAAW,MAAO,EAAQ,IAAM,EAAO,YAAY,QAAQ,OAAO,CAAE,gBAAe,YAAW,UAAS,CAAC,CAAC,EAC/G,GAAI,EAAS,KAAK,SAAW,UAAW,OAAO,EAAS,KACxD,IAAM,EAAS,EAAS,KAAK,SAAS,KAAK,EAC3C,GAAI,CAAC,GAAS,EAAQ,QAAQ,OAAO,MAAM,EAAS,EAAM,CAAG,EAE7D,OADA,MAAO,EAAO,MAAM,GAAG,EAChB,MAAO,EAAK,EAAQ,EAAe,EAAW,GAAS,CAAC,CAAC,CAAM,EACvE,EAEH,SAAS,CAAU,CAAC,EAAwB,CAC1C,OAAO,EAAO,WAAW,CAAE,IAAK,EAAM,MAAO,CAAC,IAAU,CAAM,CAAC", | ||
| "debugId": "769047624CB0754164756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/set.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect } from \"effect\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.set,\n Effect.fn(\"cli.service.set\")(function* (input) {\n yield* ServiceConfig.set(input.key, input.value)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";k0BAKA,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,SACnC,OAAO,QAAG,sBAAiB,OAAE,cAAU,MAAC,OAAO,MAC7C,WAAO,OAAc,SAAI,OAAM,SAAK,OAAM,KAAK,EAChD,CACH", | ||
| "debugId": "EEB42227360BEA1964756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "25DC116D1AE56AAF64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../schema/src/prompt.ts", "../schema/src/shell.ts", "../schema/src/session-error.ts", "../schema/src/session-id.ts", "../schema/src/permission.ts", "../schema/src/agent.ts", "../schema/src/skill.ts", "../schema/src/snapshot.ts", "../schema/src/token-usage.ts", "../schema/src/session-message.ts"], | ||
| "sourcesContent": [ | ||
| "import { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { statics } from \"./schema.js\"\n\nexport interface PromptMention extends Schema.Schema.Type<typeof PromptMention> {}\nexport const PromptMention = Schema.Struct({\n start: Schema.Finite,\n end: Schema.Finite,\n text: Schema.String,\n}).annotate({ identifier: \"Prompt.Mention\" })\n\nexport const FileSource = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"inline\") }),\n Schema.Struct({ type: Schema.Literal(\"uri\"), uri: Schema.String }),\n])\n .pipe(Schema.toTaggedUnion(\"type\"))\n .annotate({ identifier: \"Prompt.FileSource\" })\nexport type FileSource = typeof FileSource.Type\n\nexport const Base64 = Schema.String.check(\n Schema.isPattern(/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/),\n).annotate({ identifier: \"Prompt.Base64\" })\nexport type Base64 = typeof Base64.Type\n\nexport interface FileAttachment extends Schema.Schema.Type<typeof FileAttachment> {}\nexport const FileAttachment = Schema.Struct({\n data: Base64,\n mime: Schema.String,\n source: FileSource,\n name: Schema.String.pipe(optional),\n description: Schema.String.pipe(optional),\n mention: PromptMention.pipe(optional),\n})\n .annotate({ identifier: \"Prompt.FileAttachment\" })\n .pipe(\n statics((schema) => ({\n create: (input: FileAttachment) =>\n schema.make({\n data: input.data,\n mime: input.mime,\n source: input.source,\n name: input.name,\n description: input.description,\n mention: input.mention,\n }),\n })),\n )\n\nexport interface AgentAttachment extends Schema.Schema.Type<typeof AgentAttachment> {}\nexport const AgentAttachment = Schema.Struct({\n name: Schema.String,\n mention: PromptMention.pipe(optional),\n}).annotate({ identifier: \"Prompt.AgentAttachment\" })\n\nexport interface Prompt extends Schema.Schema.Type<typeof Prompt> {}\nexport const Prompt = Schema.Struct({\n text: Schema.String,\n files: Schema.Array(FileAttachment).pipe(optional),\n agents: Schema.Array(AgentAttachment).pipe(optional),\n})\n .annotate({ identifier: \"Prompt\" })\n .pipe(\n statics((schema) => ({\n equivalence: Schema.toEquivalence(schema),\n fromUserMessage: (input: Pick<Prompt, \"text\" | \"files\" | \"agents\">) =>\n schema.make({\n text: input.text,\n ...(input.files === undefined ? {} : { files: input.files }),\n ...(input.agents === undefined ? {} : { agents: input.agents }),\n }),\n })),\n )\n", | ||
| "export * as Shell from \"./shell.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { ephemeral, inventory } from \"./event.js\"\nimport { ascending } from \"./identifier.js\"\nimport { NonNegativeInt, statics } from \"./schema.js\"\n\nconst IDSchema = Schema.String.check(Schema.isStartsWith(\"sh_\")).pipe(Schema.brand(\"Shell.ID\"))\n\nexport const ID = IDSchema.pipe(\n statics((schema: typeof IDSchema) => {\n const create = () => schema.make(\"sh_\" + ascending())\n return {\n create,\n ascending: (id?: string) => (id === undefined ? create() : schema.make(id)),\n }\n }),\n)\nexport type ID = typeof ID.Type\n\nexport const Status = Schema.Literals([\"running\", \"exited\", \"timeout\", \"killed\"])\nexport type Status = typeof Status.Type\n\nexport const Time = Schema.Struct({\n started: Schema.Finite,\n completed: optional(Schema.Finite),\n})\nexport interface Time extends Schema.Schema.Type<typeof Time> {}\n\n// Opaque caller-supplied tags echoed back on Info and events. The Shell service never interprets\n// these; callers (e.g. ShellTool stores the originating session ID) use them to filter or correlate.\nexport const Metadata = Schema.Record(Schema.String, Schema.Unknown)\nexport type Metadata = typeof Metadata.Type\n\nexport const Info = Schema.Struct({\n id: ID,\n status: Status,\n command: Schema.String,\n cwd: Schema.String,\n shell: Schema.String,\n // Absolute path of the file capturing combined stdout/stderr. Page through it via `output`.\n file: Schema.String,\n pid: optional(NonNegativeInt),\n exit: optional(Schema.Finite),\n // Always present; defaults to an empty object when the creator supplies no metadata.\n metadata: Metadata,\n time: Time,\n}).annotate({ identifier: \"Shell.Info\" })\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\n\nconst Created = ephemeral({ type: \"shell.created\", schema: { info: Info } })\nconst Exited = ephemeral({ type: \"shell.exited\", schema: { id: ID, exit: optional(Schema.Finite), status: Status } })\nconst Deleted = ephemeral({ type: \"shell.deleted\", schema: { id: ID } })\nexport const Event = { Created, Exited, Deleted, Definitions: inventory(Created, Exited, Deleted) }\n\nexport const CreateInput = Schema.Struct({\n command: Schema.String,\n cwd: optional(Schema.String),\n timeout: NonNegativeInt,\n metadata: optional(Metadata),\n})\nexport interface CreateInput extends Schema.Schema.Type<typeof CreateInput> {}\n\nexport const OutputInput = Schema.Struct({\n cursor: optional(NonNegativeInt),\n limit: optional(NonNegativeInt),\n})\nexport interface OutputInput extends Schema.Schema.Type<typeof OutputInput> {}\n\nexport const Output = Schema.Struct({\n output: Schema.String,\n // Absolute cursor after this page. Equals `size` once fully caught up.\n cursor: NonNegativeInt,\n // Total bytes captured so far. A consumer has more to page while `cursor < size`.\n size: NonNegativeInt,\n truncated: Schema.Boolean,\n})\nexport interface Output extends Schema.Schema.Type<typeof Output> {}\n", | ||
| "export * as SessionError from \"./session-error.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\n\nexport interface Error extends Schema.Schema.Type<typeof Error> {}\nexport const Error = Schema.Struct({\n type: Schema.String,\n message: Schema.String,\n status: Schema.Int.check(Schema.isBetween({ minimum: 100, maximum: 599 })).pipe(optional),\n}).annotate({ identifier: \"Session.StructuredError\" })\n", | ||
| "import { Schema } from \"effect\"\nimport { descending } from \"./identifier.js\"\nimport { statics } from \"./schema.js\"\n\nexport const SessionID = Schema.String.check(Schema.isStartsWith(\"ses\")).pipe(\n Schema.brand(\"SessionID\"),\n statics((schema) => {\n const create = () => schema.make(\"ses_\" + descending())\n return {\n create,\n descending: (id?: string) => (id === undefined ? create() : schema.make(id)),\n }\n }),\n)\nexport type SessionID = typeof SessionID.Type\n", | ||
| "export * as Permission from \"./permission.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { ephemeral, inventory } from \"./event.js\"\nimport { ascending } from \"./identifier.js\"\nimport { SessionID } from \"./session-id.js\"\nimport { statics } from \"./schema.js\"\n\nexport const ID = Schema.String.check(Schema.isStartsWith(\"per\")).pipe(\n Schema.brand(\"Permission.ID\"),\n statics((schema) => ({ create: (id?: string) => schema.make(id ?? \"per_\" + ascending()) })),\n)\nexport type ID = typeof ID.Type\n\nexport const Source = Schema.Union([\n Schema.Struct({\n type: Schema.Literal(\"tool\"),\n messageID: Schema.String,\n callID: Schema.String,\n }),\n]).annotate({ identifier: \"Permission.Source\" })\nexport type Source = typeof Source.Type\n\nconst RequestFields = {\n sessionID: SessionID,\n action: Schema.String,\n resources: Schema.Array(Schema.String),\n save: Schema.Array(Schema.String).pipe(optional),\n metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(optional),\n source: Source.pipe(optional),\n}\n\nexport const Request = Schema.Struct({\n id: ID,\n ...RequestFields,\n}).annotate({ identifier: \"Permission.Request\" })\nexport interface Request extends Schema.Schema.Type<typeof Request> {}\n\nexport const Reply = Schema.Literals([\"once\", \"always\", \"reject\"]).annotate({ identifier: \"Permission.Reply\" })\nexport type Reply = typeof Reply.Type\n\nconst Asked = ephemeral({ type: \"permission.asked\", schema: Request.fields })\nconst Replied = ephemeral({\n type: \"permission.replied\",\n schema: {\n sessionID: SessionID,\n requestID: ID,\n reply: Reply,\n },\n})\nexport const Event = { Asked, Replied, Definitions: inventory(Asked, Replied) }\n\nexport const Effect = Schema.Literals([\"allow\", \"deny\", \"ask\"]).annotate({ identifier: \"Permission.Effect\" })\nexport type Effect = typeof Effect.Type\n\nexport interface Rule extends Schema.Schema.Type<typeof Rule> {}\nexport const Rule = Schema.Struct({\n action: Schema.String,\n resource: Schema.String,\n effect: Effect,\n}).annotate({ identifier: \"Permission.Rule\" })\n\nexport const Ruleset = Schema.Array(Rule).annotate({ identifier: \"Permission.Ruleset\" })\nexport type Ruleset = typeof Ruleset.Type\n", | ||
| "export * as Agent from \"./agent.js\"\n\nimport { Schema } from \"effect\"\nimport { ephemeral, inventory } from \"./event.js\"\nimport { optional } from \"./schema.js\"\nimport { Model } from \"./model.js\"\nimport { Permission } from \"./permission.js\"\nimport { Provider } from \"./provider.js\"\nimport { PositiveInt, statics } from \"./schema.js\"\n\nconst Updated = ephemeral({ type: \"agent.updated\", schema: {} })\n\nexport const ID = Schema.String.pipe(Schema.brand(\"Agent.ID\"))\nexport type ID = typeof ID.Type\n\nexport const Name = Schema.String.pipe(Schema.brand(\"Agent.Name\"))\nexport type Name = typeof Name.Type\n\nexport const Color = Schema.String.annotate({ identifier: \"Agent.Color\" })\nexport type Color = typeof Color.Type\n\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\nexport const Info = Schema.Struct({\n id: ID,\n name: Name,\n model: Model.Ref.pipe(optional),\n request: Provider.Request,\n system: Schema.String.pipe(optional),\n description: Schema.String.pipe(optional),\n mode: Schema.Literals([\"subagent\", \"primary\", \"all\"]),\n hidden: Schema.Boolean,\n color: Color.pipe(optional),\n steps: PositiveInt.pipe(optional),\n permissions: Permission.Ruleset,\n})\n .annotate({ identifier: \"Agent.Info\" })\n .pipe(\n statics(() => ({\n empty: (id: ID) =>\n ({\n id,\n name: Name.make(id),\n request: { settings: {}, headers: {}, body: {} },\n mode: \"all\",\n hidden: false,\n permissions: [\n { action: \"*\", resource: \"*\", effect: \"allow\" },\n { action: \"external_directory\", resource: \"*\", effect: \"ask\" },\n ],\n }) satisfies Info,\n })),\n )\n\nexport const Event = {\n Updated,\n Definitions: inventory(Updated),\n}\n", | ||
| "export * as Skill from \"./skill.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { AbsolutePath } from \"./schema.js\"\nimport { ephemeral, inventory } from \"./event.js\"\n\nexport const ID = Schema.String.pipe(Schema.brand(\"Skill.ID\"))\nexport type ID = typeof ID.Type\n\nexport const Name = Schema.String.pipe(Schema.brand(\"Skill.Name\"))\nexport type Name = typeof Name.Type\n\nexport interface DirectorySource extends Schema.Schema.Type<typeof DirectorySource> {}\nexport const DirectorySource = Schema.Struct({\n type: Schema.tag(\"directory\"),\n path: AbsolutePath,\n}).annotate({ identifier: \"Skill.DirectorySource\" })\n\nexport interface UrlSource extends Schema.Schema.Type<typeof UrlSource> {}\nexport const UrlSource = Schema.Struct({\n type: Schema.tag(\"url\"),\n url: Schema.String,\n}).annotate({ identifier: \"Skill.UrlSource\" })\n\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\nexport const Info = Schema.Struct({\n id: ID,\n name: Name,\n description: Schema.String.pipe(optional),\n slash: Schema.Boolean.pipe(optional),\n autoinvoke: Schema.Boolean.pipe(optional),\n location: AbsolutePath,\n content: Schema.String,\n}).annotate({ identifier: \"Skill.Info\" })\n\nconst Updated = ephemeral({ type: \"skill.updated\", schema: {} })\nexport const Event = { Updated, Definitions: inventory(Updated) }\n\nexport interface EmbeddedSource extends Schema.Schema.Type<typeof EmbeddedSource> {}\nexport const EmbeddedSource = Schema.Struct({\n type: Schema.tag(\"embedded\"),\n skill: Schema.suspend(() => Info),\n}).annotate({ identifier: \"Skill.EmbeddedSource\" })\n\nexport type Source = DirectorySource | UrlSource | EmbeddedSource\nexport const Source = Object.assign(\n Schema.Union([DirectorySource, UrlSource, EmbeddedSource]).pipe(\n Schema.toTaggedUnion(\"type\"),\n Schema.annotate({ identifier: \"Skill.Source\" }),\n ),\n {\n equals: (a: Source, b: Source) => {\n if (a.type !== b.type) return false\n if (a.type === \"directory\" && b.type === \"directory\") return a.path === b.path\n if (a.type === \"url\" && b.type === \"url\") return a.url === b.url\n if (a.type === \"embedded\" && b.type === \"embedded\") return a.skill.id === b.skill.id\n return false\n },\n key: (source: Source) =>\n source.type === \"directory\"\n ? `directory:${source.path}`\n : source.type === \"url\"\n ? `url:${source.url}`\n : `embedded:${source.skill.id}`,\n },\n)\n", | ||
| "export * as Snapshot from \"./snapshot.js\"\n\nimport { Schema } from \"effect\"\n\nexport const ID = Schema.String.pipe(Schema.brand(\"Snapshot.ID\"))\nexport type ID = typeof ID.Type\n", | ||
| "export * as TokenUsage from \"./token-usage.js\"\n\nimport { Schema } from \"effect\"\n\nexport interface Info extends Schema.Schema.Type<typeof Info> {}\nexport const Info = Schema.Struct({\n input: Schema.Finite,\n output: Schema.Finite,\n reasoning: Schema.Finite,\n cache: Schema.Struct({\n read: Schema.Finite,\n write: Schema.Finite,\n }),\n}).annotate({ identifier: \"TokenUsage.Info\" })\n", | ||
| "export * as SessionMessage from \"./session-message.js\"\n\nimport { Schema } from \"effect\"\nimport { optional } from \"./schema.js\"\nimport { Content } from \"./tool.js\"\nimport { Model } from \"./model.js\"\nimport { Prompt } from \"./prompt.js\"\nimport { DateTimeUtcFromMillis, PositiveInt, RelativePath, statics } from \"./schema.js\"\nimport { ascending } from \"./identifier.js\"\nimport { Event } from \"./event.js\"\nimport { Shell as ShellSchema } from \"./shell.js\"\nimport { FinishReason } from \"./llm.js\"\nimport { SessionError } from \"./session-error.js\"\nimport { Agent } from \"./agent.js\"\nimport { Skill as SkillSchema } from \"./skill.js\"\nimport { Money } from \"./money.js\"\nimport { Snapshot } from \"./snapshot.js\"\nimport { TokenUsage } from \"./token-usage.js\"\n\nexport const ID = Schema.String.check(Schema.isStartsWith(\"msg_\")).pipe(\n Schema.brand(\"Session.Message.ID\"),\n statics((schema) => ({\n create: () => schema.make(\"msg_\" + ascending()),\n fromEvent: (eventID: Event.ID) => schema.make(eventID.replace(/^evt_/, \"msg_\")),\n })),\n)\nexport type ID = typeof ID.Type\n\nconst Base = {\n id: ID,\n metadata: Schema.Record(Schema.String, Schema.Unknown).pipe(optional),\n time: Schema.Struct({ created: DateTimeUtcFromMillis }),\n}\n\nexport const ProviderState = Schema.Record(Schema.String, Schema.Unknown).annotate({\n identifier: \"Session.Message.ProviderState\",\n})\nexport type ProviderState = typeof ProviderState.Type\n\nexport interface AgentSelected extends Schema.Schema.Type<typeof AgentSelected> {}\nexport const AgentSelected = Schema.Struct({\n ...Base,\n type: Schema.tag(\"agent-switched\"),\n agent: Agent.ID,\n}).annotate({ identifier: \"Session.Message.AgentSelected\" })\n\nexport interface ModelSelected extends Schema.Schema.Type<typeof ModelSelected> {}\nexport const ModelSelected = Schema.Struct({\n ...Base,\n type: Schema.tag(\"model-switched\"),\n model: Model.Ref,\n previous: Model.Ref.pipe(optional),\n}).annotate({ identifier: \"Session.Message.ModelSelected\" })\n\nexport interface User extends Schema.Schema.Type<typeof User> {}\nexport const User = Schema.Struct({\n ...Base,\n text: Prompt.fields.text,\n files: Prompt.fields.files,\n agents: Prompt.fields.agents,\n type: Schema.tag(\"user\"),\n}).annotate({ identifier: \"Session.Message.User\" })\n\nexport interface Synthetic extends Schema.Schema.Type<typeof Synthetic> {}\nexport const Synthetic = Schema.Struct({\n ...Base,\n text: Schema.String,\n description: Schema.String.pipe(optional),\n type: Schema.tag(\"synthetic\"),\n}).annotate({ identifier: \"Session.Message.Synthetic\" })\n\nexport interface System extends Schema.Schema.Type<typeof System> {}\nexport const System = Schema.Struct({\n ...Base,\n type: Schema.tag(\"system\"),\n text: Schema.String,\n}).annotate({ identifier: \"Session.Message.System\" })\n\nexport interface Skill extends Schema.Schema.Type<typeof Skill> {}\nexport const Skill = Schema.Struct({\n ...Base,\n type: Schema.tag(\"skill\"),\n skill: SkillSchema.ID,\n name: SkillSchema.Name,\n text: Schema.String,\n}).annotate({ identifier: \"Session.Message.Skill\" })\n\nexport interface Shell extends Schema.Schema.Type<typeof Shell> {}\nexport const Shell = Schema.Struct({\n ...Base,\n type: Schema.tag(\"shell\"),\n shellID: ShellSchema.ID,\n command: Schema.String,\n status: ShellSchema.Status,\n exit: Schema.Number.pipe(optional),\n output: ShellSchema.Output.pipe(optional),\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n completed: DateTimeUtcFromMillis.pipe(optional),\n }),\n}).annotate({ identifier: \"Session.Message.Shell\" })\n\nexport interface ToolStateStreaming extends Schema.Schema.Type<typeof ToolStateStreaming> {}\nexport const ToolStateStreaming = Schema.Struct({\n status: Schema.tag(\"streaming\"),\n input: Schema.String,\n}).annotate({ identifier: \"Session.Message.ToolState.Streaming\" })\n\nexport interface ToolStateRunning extends Schema.Schema.Type<typeof ToolStateRunning> {}\nexport const ToolStateRunning = Schema.Struct({\n status: Schema.tag(\"running\"),\n input: Schema.Record(Schema.String, Schema.Unknown),\n metadata: Schema.Record(Schema.String, Schema.Json),\n}).annotate({ identifier: \"Session.Message.ToolState.Running\" })\n\nexport interface ToolStateCompleted extends Schema.Schema.Type<typeof ToolStateCompleted> {}\nexport const ToolStateCompleted = Schema.Struct({\n status: Schema.tag(\"completed\"),\n input: Schema.Record(Schema.String, Schema.Unknown),\n content: Schema.NonEmptyArray(Content),\n metadata: Schema.Record(Schema.String, Schema.Json).pipe(optional),\n}).annotate({ identifier: \"Session.Message.ToolState.Completed\" })\n\nexport interface ToolStateError extends Schema.Schema.Type<typeof ToolStateError> {}\nexport const ToolStateError = Schema.Struct({\n status: Schema.tag(\"error\"),\n input: Schema.Record(Schema.String, Schema.Unknown),\n error: SessionError.Error,\n content: Schema.NonEmptyArray(Content).pipe(optional),\n metadata: Schema.Record(Schema.String, Schema.Json).pipe(optional),\n}).annotate({ identifier: \"Session.Message.ToolState.Error\" })\n\nexport const ToolState = Schema.Union([ToolStateStreaming, ToolStateRunning, ToolStateCompleted, ToolStateError]).pipe(\n Schema.toTaggedUnion(\"status\"),\n)\nexport type ToolState = ToolStateStreaming | ToolStateRunning | ToolStateCompleted | ToolStateError\n\nexport interface AssistantTool extends Schema.Schema.Type<typeof AssistantTool> {}\nexport const AssistantTool = Schema.Struct({\n type: Schema.tag(\"tool\"),\n id: Schema.String,\n name: Schema.String,\n executed: Schema.Boolean.pipe(optional),\n providerState: ProviderState.pipe(optional),\n providerResultState: ProviderState.pipe(optional),\n state: ToolState,\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n ran: DateTimeUtcFromMillis.pipe(optional),\n completed: DateTimeUtcFromMillis.pipe(optional),\n }),\n}).annotate({ identifier: \"Session.Message.Assistant.Tool\" })\n\nexport interface AssistantText extends Schema.Schema.Type<typeof AssistantText> {}\nexport const AssistantText = Schema.Struct({\n type: Schema.tag(\"text\"),\n text: Schema.String,\n state: ProviderState.pipe(optional),\n}).annotate({ identifier: \"Session.Message.Assistant.Text\" })\n\nexport interface AssistantReasoning extends Schema.Schema.Type<typeof AssistantReasoning> {}\nexport const AssistantReasoning = Schema.Struct({\n type: Schema.tag(\"reasoning\"),\n text: Schema.String,\n state: ProviderState.pipe(optional),\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n completed: DateTimeUtcFromMillis.pipe(optional),\n }).pipe(optional),\n}).annotate({ identifier: \"Session.Message.Assistant.Reasoning\" })\n\nexport const AssistantContent = Schema.Union([AssistantText, AssistantReasoning, AssistantTool]).pipe(\n Schema.toTaggedUnion(\"type\"),\n)\nexport type AssistantContent = AssistantText | AssistantReasoning | AssistantTool\n\nexport interface AssistantRetry extends Schema.Schema.Type<typeof AssistantRetry> {}\nexport const AssistantRetry = Schema.Struct({\n attempt: PositiveInt,\n at: DateTimeUtcFromMillis,\n error: SessionError.Error,\n}).annotate({ identifier: \"Session.Message.Assistant.Retry\" })\n\nexport interface Assistant extends Schema.Schema.Type<typeof Assistant> {}\nexport const Assistant = Schema.Struct({\n ...Base,\n type: Schema.tag(\"assistant\"),\n agent: Agent.ID,\n model: Model.Ref,\n content: AssistantContent.pipe(Schema.Array),\n snapshot: Schema.Struct({\n start: Snapshot.ID.pipe(optional),\n end: Snapshot.ID.pipe(optional),\n files: Schema.Array(RelativePath).pipe(optional),\n }).pipe(optional),\n finish: FinishReason.pipe(optional),\n cost: Money.USD.pipe(optional),\n tokens: TokenUsage.Info.pipe(optional),\n error: SessionError.Error.pipe(optional),\n retry: AssistantRetry.pipe(optional),\n time: Schema.Struct({\n created: DateTimeUtcFromMillis,\n completed: DateTimeUtcFromMillis.pipe(optional),\n }),\n}).annotate({ identifier: \"Session.Message.Assistant\" })\n\nconst CompactionBase = { type: Schema.tag(\"compaction\"), ...Base }\n\nexport interface CompactionRunning extends Schema.Schema.Type<typeof CompactionRunning> {}\nexport const CompactionRunning = Schema.Struct({\n ...CompactionBase,\n status: Schema.tag(\"running\"),\n reason: Schema.Literals([\"auto\", \"manual\"]),\n summary: Schema.String,\n recent: Schema.String,\n}).annotate({ identifier: \"Session.Message.Compaction.Running\" })\n\nexport interface CompactionCompleted extends Schema.Schema.Type<typeof CompactionCompleted> {}\nexport const CompactionCompleted = Schema.Struct({\n ...CompactionBase,\n status: Schema.tag(\"completed\"),\n reason: Schema.Literals([\"auto\", \"manual\"]),\n summary: Schema.String,\n recent: Schema.String,\n}).annotate({ identifier: \"Session.Message.Compaction.Completed\" })\n\nexport interface CompactionFailed extends Schema.Schema.Type<typeof CompactionFailed> {}\nexport const CompactionFailed = Schema.Struct({\n ...CompactionBase,\n status: Schema.tag(\"failed\"),\n reason: Schema.Literals([\"auto\", \"manual\"]),\n error: SessionError.Error,\n}).annotate({ identifier: \"Session.Message.Compaction.Failed\" })\n\nexport const Compaction = Schema.Union([CompactionRunning, CompactionCompleted, CompactionFailed]).pipe(\n Schema.toTaggedUnion(\"status\"),\n Schema.annotate({ identifier: \"Session.Message.Compaction\" }),\n)\nexport type Compaction = CompactionRunning | CompactionCompleted | CompactionFailed\n\nexport const Info = Schema.Union([\n AgentSelected,\n ModelSelected,\n User,\n Synthetic,\n System,\n Skill,\n Shell,\n Assistant,\n Compaction,\n]).annotate({ identifier: \"Session.Message.Info\" })\nexport type Info = AgentSelected | ModelSelected | User | Synthetic | System | Skill | Shell | Assistant | Compaction\nexport type Type = Info[\"type\"]\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "066B12B294B37F2964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "805D1AB4BF58B2E364756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "862B7AE8B55172CD64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/util/io.ts", "src/session-target.ts"], | ||
| "sourcesContent": [ | ||
| "import { text } from \"node:stream/consumers\"\n\nexport function readStdin() {\n return text(process.stdin)\n}\n", | ||
| "import type { LocationGetOutput, ModelRef, OpenCodeClient, SessionInfo } from \"@opencode-ai/client/promise\"\nimport { Model } from \"@opencode-ai/schema/model\"\n\nconst SESSION_PAGE_LIMIT = 50\n\nexport type SessionTarget = {\n session: SessionInfo\n location: LocationGetOutput\n model: ModelRef | undefined\n agent: string | undefined\n resume: boolean\n}\n\nexport type SessionTargetPreparation = (input: {\n client: OpenCodeClient\n location: LocationGetOutput\n session: SessionInfo | undefined\n model: ModelRef | undefined\n agent: string | undefined\n signal?: AbortSignal\n}) => Promise<{ model: ModelRef | undefined; agent: string | undefined }>\n\nexport class SessionTargetMutationError extends Error {\n override readonly name = \"SessionTargetMutationError\"\n\n constructor(cause: unknown) {\n super(cause instanceof Error ? cause.message : \"Session target mutation failed\", { cause })\n }\n}\n\nexport async function resolveSessionTarget(input: {\n client: OpenCodeClient\n location?: { directory?: string; workspace?: string }\n continue?: boolean\n session?: string\n fork?: boolean\n model?: ModelRef\n agent?: string\n prepare: SessionTargetPreparation\n signal?: AbortSignal\n}): Promise<SessionTarget> {\n const selection = await selectSession(input)\n const selected = selection.session\n const location =\n selection.location ??\n (await resolveLocation(\n input.client,\n selected ? { directory: selected.location.directory, workspace: selected.location.workspaceID } : input.location,\n input.signal,\n ))\n const prepared = await input.prepare({\n client: input.client,\n location,\n session: selected,\n model: input.model ?? selected?.model,\n agent: input.agent ?? selected?.agent,\n signal: input.signal,\n })\n const session =\n selected ??\n (await input.client.session\n .create(\n {\n agent: prepared.agent,\n model: prepared.model,\n location: { directory: location.directory, workspaceID: location.workspaceID },\n },\n ...requestOptions(input.signal),\n )\n .catch((error) => {\n throw new SessionTargetMutationError(error)\n }))\n return {\n session,\n location,\n model: prepared.model,\n agent: prepared.agent ?? session.agent,\n resume: selected !== undefined,\n }\n}\n\nexport function parseSessionTargetModel(value?: string): ModelRef | undefined {\n if (!value) return\n const model = Model.Ref.parse(value)\n return { providerID: model.providerID, id: model.id, variant: model.variant }\n}\n\nasync function selectSession(input: {\n client: OpenCodeClient\n location?: { directory?: string; workspace?: string }\n continue?: boolean\n session?: string\n fork?: boolean\n signal?: AbortSignal\n}) {\n const explicit = input.session\n ? await input.client.session.get({ sessionID: input.session }, ...requestOptions(input.signal)).catch((error) => {\n if (error && typeof error === \"object\" && Reflect.get(error, \"_tag\") === \"SessionNotFoundError\")\n return undefined\n throw error\n })\n : undefined\n if (input.session && !explicit) throw new Error(\"Session not found\")\n if (explicit)\n return {\n session: input.fork\n ? await input.client.session\n .fork({ sessionID: explicit.id, boundary: { type: \"through\" } }, ...requestOptions(input.signal))\n .catch((error) => {\n throw new SessionTargetMutationError(error)\n })\n : explicit,\n }\n if (!input.continue) return { session: undefined }\n\n const location = await resolveLocation(input.client, input.location, input.signal)\n const selected = await latestSession(input.client, location, undefined, input.signal)\n if (!selected) return { session: undefined, location }\n return {\n session: input.fork\n ? await input.client.session\n .fork({ sessionID: selected.id, boundary: { type: \"through\" } }, ...requestOptions(input.signal))\n .catch((error) => {\n throw new SessionTargetMutationError(error)\n })\n : selected,\n }\n}\n\nasync function latestSession(\n client: OpenCodeClient,\n location: LocationGetOutput,\n cursor?: string,\n signal?: AbortSignal,\n): Promise<SessionInfo | undefined> {\n const page = await client.session.list(\n {\n directory: location.directory,\n workspace: location.workspaceID,\n parentID: null,\n limit: SESSION_PAGE_LIMIT,\n order: \"desc\",\n ...(cursor ? { cursor } : {}),\n },\n ...requestOptions(signal),\n )\n const selected = page.data.find(\n (session) =>\n session.location.directory === location.directory && session.location.workspaceID === location.workspaceID,\n )\n if (selected) return selected\n if (!page.cursor.next || page.data.length === 0) return\n return latestSession(client, location, page.cursor.next, signal)\n}\n\nfunction resolveLocation(\n client: OpenCodeClient,\n location?: { directory?: string; workspace?: string },\n signal?: AbortSignal,\n) {\n if (!location && !signal) return client.location.get()\n if (!location) return client.location.get(undefined, { signal })\n return client.location.get({ location }, ...requestOptions(signal))\n}\n\nfunction requestOptions(signal?: AbortSignal): [] | [{ signal: AbortSignal }] {\n return signal ? [{ signal }] : []\n}\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "F18E555B9EA8850964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/uqr@0.1.3/node_modules/uqr/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "var QrCodeDataType = /* @__PURE__ */ ((QrCodeDataType2) => {\n QrCodeDataType2[QrCodeDataType2[\"Border\"] = -1] = \"Border\";\n QrCodeDataType2[QrCodeDataType2[\"Data\"] = 0] = \"Data\";\n QrCodeDataType2[QrCodeDataType2[\"Function\"] = 1] = \"Function\";\n QrCodeDataType2[QrCodeDataType2[\"Position\"] = 2] = \"Position\";\n QrCodeDataType2[QrCodeDataType2[\"Timing\"] = 3] = \"Timing\";\n QrCodeDataType2[QrCodeDataType2[\"Alignment\"] = 4] = \"Alignment\";\n return QrCodeDataType2;\n})(QrCodeDataType || {});\n\nconst LOW = [0, 1];\nconst MEDIUM = [1, 0];\nconst QUARTILE = [2, 3];\nconst HIGH = [3, 2];\nconst EccMap = {\n L: LOW,\n M: MEDIUM,\n Q: QUARTILE,\n H: HIGH\n};\nconst NUMERIC_REGEX = /^\\d*$/;\nconst ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+./:-]*$/;\nconst ALPHANUMERIC_CHARSET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:\";\nconst MIN_VERSION = 1;\nconst MAX_VERSION = 40;\nconst PENALTY_N1 = 3;\nconst PENALTY_N2 = 3;\nconst PENALTY_N3 = 40;\nconst PENALTY_N4 = 10;\nconst ECC_CODEWORDS_PER_BLOCK = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Low\n [-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n // Medium\n [-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n // Quartile\n [-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30]\n // High\n];\nconst NUM_ERROR_CORRECTION_BLOCKS = [\n // Version: (note that index 0 is for padding, and is set to an illegal value)\n // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level\n [-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n // Low\n [-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n // Medium\n [-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n // Quartile\n [-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81]\n // High\n];\nclass QrCode {\n /* -- Constructor (low level) and fields -- */\n // Creates a new QR Code with the given version number,\n // error correction level, data codeword bytes, and mask number.\n // This is a low-level API that most users should not use directly.\n // A mid-level API is the encodeSegments() function.\n constructor(version, ecc, dataCodewords, msk) {\n this.version = version;\n this.ecc = ecc;\n if (version < MIN_VERSION || version > MAX_VERSION)\n throw new RangeError(\"Version value out of range\");\n if (msk < -1 || msk > 7)\n throw new RangeError(\"Mask value out of range\");\n this.size = version * 4 + 17;\n const row = Array.from({ length: this.size }).fill(false);\n for (let i = 0; i < this.size; i++) {\n this.modules.push(row.slice());\n this.types.push(row.map(() => 0));\n }\n this.drawFunctionPatterns();\n const allCodewords = this.addEccAndInterleave(dataCodewords);\n this.drawCodewords(allCodewords);\n if (msk === -1) {\n let minPenalty = 1e9;\n for (let i = 0; i < 8; i++) {\n this.applyMask(i);\n this.drawFormatBits(i);\n const penalty = this.getPenaltyScore();\n if (penalty < minPenalty) {\n msk = i;\n minPenalty = penalty;\n }\n this.applyMask(i);\n }\n }\n this.mask = msk;\n this.applyMask(msk);\n this.drawFormatBits(msk);\n }\n /* -- Fields -- */\n // The width and height of this QR Code, measured in modules, between\n // 21 and 177 (inclusive). This is equal to version * 4 + 17.\n size;\n // The index of the mask pattern used in this QR Code, which is between 0 and 7 (inclusive).\n // Even if a QR Code is created with automatic masking requested (mask = -1),\n // the resulting object still has a mask value between 0 and 7.\n mask;\n // The modules of this QR Code (false = light, true = dark).\n // Immutable after constructor finishes. Accessed through getModule().\n modules = [];\n types = [];\n /* -- Accessor methods -- */\n // Returns the color of the module (pixel) at the given coordinates, which is false\n // for light or true for dark. The top left corner has the coordinates (x=0, y=0).\n // If the given coordinates are out of bounds, then false (light) is returned.\n getModule(x, y) {\n return x >= 0 && x < this.size && y >= 0 && y < this.size && this.modules[y][x];\n }\n /* -- Private helper methods for constructor: Drawing function modules -- */\n // Reads this object's version field, and draws and marks all function modules.\n drawFunctionPatterns() {\n for (let i = 0; i < this.size; i++) {\n this.setFunctionModule(6, i, i % 2 === 0, QrCodeDataType.Timing);\n this.setFunctionModule(i, 6, i % 2 === 0, QrCodeDataType.Timing);\n }\n this.drawFinderPattern(3, 3);\n this.drawFinderPattern(this.size - 4, 3);\n this.drawFinderPattern(3, this.size - 4);\n const alignPatPos = this.getAlignmentPatternPositions();\n const numAlign = alignPatPos.length;\n for (let i = 0; i < numAlign; i++) {\n for (let j = 0; j < numAlign; j++) {\n if (!(i === 0 && j === 0 || i === 0 && j === numAlign - 1 || i === numAlign - 1 && j === 0))\n this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);\n }\n }\n this.drawFormatBits(0);\n this.drawVersion();\n }\n // Draws two copies of the format bits (with its own error correction code)\n // based on the given mask and this object's error correction level field.\n drawFormatBits(mask) {\n const data = this.ecc[1] << 3 | mask;\n let rem = data;\n for (let i = 0; i < 10; i++)\n rem = rem << 1 ^ (rem >>> 9) * 1335;\n const bits = (data << 10 | rem) ^ 21522;\n for (let i = 0; i <= 5; i++)\n this.setFunctionModule(8, i, getBit(bits, i));\n this.setFunctionModule(8, 7, getBit(bits, 6));\n this.setFunctionModule(8, 8, getBit(bits, 7));\n this.setFunctionModule(7, 8, getBit(bits, 8));\n for (let i = 9; i < 15; i++)\n this.setFunctionModule(14 - i, 8, getBit(bits, i));\n for (let i = 0; i < 8; i++)\n this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));\n for (let i = 8; i < 15; i++)\n this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));\n this.setFunctionModule(8, this.size - 8, true);\n }\n // Draws two copies of the version bits (with its own error correction code),\n // based on this object's version field, iff 7 <= version <= 40.\n drawVersion() {\n if (this.version < 7)\n return;\n let rem = this.version;\n for (let i = 0; i < 12; i++)\n rem = rem << 1 ^ (rem >>> 11) * 7973;\n const bits = this.version << 12 | rem;\n for (let i = 0; i < 18; i++) {\n const color = getBit(bits, i);\n const a = this.size - 11 + i % 3;\n const b = Math.floor(i / 3);\n this.setFunctionModule(a, b, color);\n this.setFunctionModule(b, a, color);\n }\n }\n // Draws a 9*9 finder pattern including the border separator,\n // with the center module at (x, y). Modules can be out of bounds.\n drawFinderPattern(x, y) {\n for (let dy = -4; dy <= 4; dy++) {\n for (let dx = -4; dx <= 4; dx++) {\n const dist = Math.max(Math.abs(dx), Math.abs(dy));\n const xx = x + dx;\n const yy = y + dy;\n if (xx >= 0 && xx < this.size && yy >= 0 && yy < this.size)\n this.setFunctionModule(xx, yy, dist !== 2 && dist !== 4, QrCodeDataType.Position);\n }\n }\n }\n // Draws a 5*5 alignment pattern, with the center module\n // at (x, y). All modules must be in bounds.\n drawAlignmentPattern(x, y) {\n for (let dy = -2; dy <= 2; dy++) {\n for (let dx = -2; dx <= 2; dx++) {\n this.setFunctionModule(\n x + dx,\n y + dy,\n Math.max(Math.abs(dx), Math.abs(dy)) !== 1,\n QrCodeDataType.Alignment\n );\n }\n }\n }\n // Sets the color of a module and marks it as a function module.\n // Only used by the constructor. Coordinates must be in bounds.\n setFunctionModule(x, y, isDark, type = QrCodeDataType.Function) {\n this.modules[y][x] = isDark;\n this.types[y][x] = type;\n }\n /* -- Private helper methods for constructor: Codewords and masking -- */\n // Returns a new byte string representing the given data with the appropriate error correction\n // codewords appended to it, based on this object's version and error correction level.\n addEccAndInterleave(data) {\n const ver = this.version;\n const ecl = this.ecc;\n if (data.length !== getNumDataCodewords(ver, ecl))\n throw new RangeError(\"Invalid argument\");\n const numBlocks = NUM_ERROR_CORRECTION_BLOCKS[ecl[0]][ver];\n const blockEccLen = ECC_CODEWORDS_PER_BLOCK[ecl[0]][ver];\n const rawCodewords = Math.floor(getNumRawDataModules(ver) / 8);\n const numShortBlocks = numBlocks - rawCodewords % numBlocks;\n const shortBlockLen = Math.floor(rawCodewords / numBlocks);\n const blocks = [];\n const rsDiv = reedSolomonComputeDivisor(blockEccLen);\n for (let i = 0, k = 0; i < numBlocks; i++) {\n const dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));\n k += dat.length;\n const ecc = reedSolomonComputeRemainder(dat, rsDiv);\n if (i < numShortBlocks)\n dat.push(0);\n blocks.push(dat.concat(ecc));\n }\n const result = [];\n for (let i = 0; i < blocks[0].length; i++) {\n blocks.forEach((block, j) => {\n if (i !== shortBlockLen - blockEccLen || j >= numShortBlocks)\n result.push(block[i]);\n });\n }\n return result;\n }\n // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire\n // data area of this QR Code. Function modules need to be marked off before this is called.\n drawCodewords(data) {\n if (data.length !== Math.floor(getNumRawDataModules(this.version) / 8))\n throw new RangeError(\"Invalid argument\");\n let i = 0;\n for (let right = this.size - 1; right >= 1; right -= 2) {\n if (right === 6)\n right = 5;\n for (let vert = 0; vert < this.size; vert++) {\n for (let j = 0; j < 2; j++) {\n const x = right - j;\n const upward = (right + 1 & 2) === 0;\n const y = upward ? this.size - 1 - vert : vert;\n if (!this.types[y][x] && i < data.length * 8) {\n this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));\n i++;\n }\n }\n }\n }\n }\n // XORs the codeword modules in this QR Code with the given mask pattern.\n // The function modules must be marked and the codeword bits must be drawn\n // before masking. Due to the arithmetic of XOR, calling applyMask() with\n // the same mask value a second time will undo the mask. A final well-formed\n // QR Code needs exactly one (not zero, two, etc.) mask applied.\n applyMask(mask) {\n if (mask < 0 || mask > 7)\n throw new RangeError(\"Mask value out of range\");\n for (let y = 0; y < this.size; y++) {\n for (let x = 0; x < this.size; x++) {\n let invert;\n switch (mask) {\n case 0:\n invert = (x + y) % 2 === 0;\n break;\n case 1:\n invert = y % 2 === 0;\n break;\n case 2:\n invert = x % 3 === 0;\n break;\n case 3:\n invert = (x + y) % 3 === 0;\n break;\n case 4:\n invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 === 0;\n break;\n case 5:\n invert = x * y % 2 + x * y % 3 === 0;\n break;\n case 6:\n invert = (x * y % 2 + x * y % 3) % 2 === 0;\n break;\n case 7:\n invert = ((x + y) % 2 + x * y % 3) % 2 === 0;\n break;\n default:\n throw new Error(\"Unreachable\");\n }\n if (!this.types[y][x] && invert)\n this.modules[y][x] = !this.modules[y][x];\n }\n }\n }\n // Calculates and returns the penalty score based on state of this QR Code's current modules.\n // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score.\n getPenaltyScore() {\n let result = 0;\n for (let y = 0; y < this.size; y++) {\n let runColor = false;\n let runX = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let x = 0; x < this.size; x++) {\n if (this.modules[y][x] === runColor) {\n runX++;\n if (runX === 5)\n result += PENALTY_N1;\n else if (runX > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runX, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * PENALTY_N3;\n runColor = this.modules[y][x];\n runX = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * PENALTY_N3;\n }\n for (let x = 0; x < this.size; x++) {\n let runColor = false;\n let runY = 0;\n const runHistory = [0, 0, 0, 0, 0, 0, 0];\n for (let y = 0; y < this.size; y++) {\n if (this.modules[y][x] === runColor) {\n runY++;\n if (runY === 5)\n result += PENALTY_N1;\n else if (runY > 5)\n result++;\n } else {\n this.finderPenaltyAddHistory(runY, runHistory);\n if (!runColor)\n result += this.finderPenaltyCountPatterns(runHistory) * PENALTY_N3;\n runColor = this.modules[y][x];\n runY = 1;\n }\n }\n result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * PENALTY_N3;\n }\n for (let y = 0; y < this.size - 1; y++) {\n for (let x = 0; x < this.size - 1; x++) {\n const color = this.modules[y][x];\n if (color === this.modules[y][x + 1] && color === this.modules[y + 1][x] && color === this.modules[y + 1][x + 1]) {\n result += PENALTY_N2;\n }\n }\n }\n let dark = 0;\n for (const row of this.modules)\n dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);\n const total = this.size * this.size;\n const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;\n result += k * PENALTY_N4;\n return result;\n }\n /* -- Private helper functions -- */\n // Returns an ascending list of positions of alignment patterns for this version number.\n // Each position is in the range [0,177), and are used on both the x and y axes.\n // This could be implemented as lookup table of 40 variable-length lists of integers.\n getAlignmentPatternPositions() {\n if (this.version === 1) {\n return [];\n } else {\n const numAlign = Math.floor(this.version / 7) + 2;\n const step = this.version === 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;\n const result = [6];\n for (let pos = this.size - 7; result.length < numAlign; pos -= step)\n result.splice(1, 0, pos);\n return result;\n }\n }\n // Can only be called immediately after a light run is added, and\n // returns either 0, 1, or 2. A helper function for getPenaltyScore().\n finderPenaltyCountPatterns(runHistory) {\n const n = runHistory[1];\n const core = n > 0 && runHistory[2] === n && runHistory[3] === n * 3 && runHistory[4] === n && runHistory[5] === n;\n return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);\n }\n // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore().\n finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {\n if (currentRunColor) {\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n currentRunLength = 0;\n }\n currentRunLength += this.size;\n this.finderPenaltyAddHistory(currentRunLength, runHistory);\n return this.finderPenaltyCountPatterns(runHistory);\n }\n // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore().\n finderPenaltyAddHistory(currentRunLength, runHistory) {\n if (runHistory[0] === 0)\n currentRunLength += this.size;\n runHistory.pop();\n runHistory.unshift(currentRunLength);\n }\n}\nfunction appendBits(val, len, bb) {\n if (len < 0 || len > 31 || val >>> len !== 0)\n throw new RangeError(\"Value out of range\");\n for (let i = len - 1; i >= 0; i--)\n bb.push(val >>> i & 1);\n}\nfunction getBit(x, i) {\n return (x >>> i & 1) !== 0;\n}\nclass QrSegment {\n // Creates a new QR Code segment with the given attributes and data.\n // The character count (numChars) must agree with the mode and the bit buffer length,\n // but the constraint isn't checked. The given bit buffer is cloned and stored.\n constructor(mode, numChars, bitData) {\n this.mode = mode;\n this.numChars = numChars;\n this.bitData = bitData;\n if (numChars < 0)\n throw new RangeError(\"Invalid argument\");\n this.bitData = bitData.slice();\n }\n /* -- Methods -- */\n // Returns a new copy of the data bits of this segment.\n getData() {\n return this.bitData.slice();\n }\n}\nconst MODE_NUMERIC = [1, 10, 12, 14];\nconst MODE_ALPHANUMERIC = [2, 9, 11, 13];\nconst MODE_BYTE = [4, 8, 16, 16];\nfunction numCharCountBits(mode, ver) {\n return mode[Math.floor((ver + 7) / 17) + 1];\n}\nfunction makeBytes(data) {\n const bb = [];\n for (const b of data)\n appendBits(b, 8, bb);\n return new QrSegment(MODE_BYTE, data.length, bb);\n}\nfunction makeNumeric(digits) {\n if (!isNumeric(digits))\n throw new RangeError(\"String contains non-numeric characters\");\n const bb = [];\n for (let i = 0; i < digits.length; ) {\n const n = Math.min(digits.length - i, 3);\n appendBits(Number.parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);\n i += n;\n }\n return new QrSegment(MODE_NUMERIC, digits.length, bb);\n}\nfunction makeAlphanumeric(text) {\n if (!isAlphanumeric(text))\n throw new RangeError(\"String contains unencodable characters in alphanumeric mode\");\n const bb = [];\n let i;\n for (i = 0; i + 2 <= text.length; i += 2) {\n let temp = ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;\n temp += ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));\n appendBits(temp, 11, bb);\n }\n if (i < text.length)\n appendBits(ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);\n return new QrSegment(MODE_ALPHANUMERIC, text.length, bb);\n}\nfunction makeSegments(text) {\n if (text === \"\")\n return [];\n else if (isNumeric(text))\n return [makeNumeric(text)];\n else if (isAlphanumeric(text))\n return [makeAlphanumeric(text)];\n else\n return [makeBytes(toUtf8ByteArray(text))];\n}\nfunction isNumeric(text) {\n return NUMERIC_REGEX.test(text);\n}\nfunction isAlphanumeric(text) {\n return ALPHANUMERIC_REGEX.test(text);\n}\nfunction getTotalBits(segs, version) {\n let result = 0;\n for (const seg of segs) {\n const ccbits = numCharCountBits(seg.mode, version);\n if (seg.numChars >= 1 << ccbits)\n return Number.POSITIVE_INFINITY;\n result += 4 + ccbits + seg.bitData.length;\n }\n return result;\n}\nfunction toUtf8ByteArray(str) {\n str = encodeURI(str);\n const result = [];\n for (let i = 0; i < str.length; i++) {\n if (str.charAt(i) !== \"%\") {\n result.push(str.charCodeAt(i));\n } else {\n result.push(Number.parseInt(str.substring(i + 1, i + 3), 16));\n i += 2;\n }\n }\n return result;\n}\nfunction getNumRawDataModules(ver) {\n if (ver < MIN_VERSION || ver > MAX_VERSION)\n throw new RangeError(\"Version number out of range\");\n let result = (16 * ver + 128) * ver + 64;\n if (ver >= 2) {\n const numAlign = Math.floor(ver / 7) + 2;\n result -= (25 * numAlign - 10) * numAlign - 55;\n if (ver >= 7)\n result -= 36;\n }\n return result;\n}\nfunction getNumDataCodewords(ver, ecl) {\n return Math.floor(getNumRawDataModules(ver) / 8) - ECC_CODEWORDS_PER_BLOCK[ecl[0]][ver] * NUM_ERROR_CORRECTION_BLOCKS[ecl[0]][ver];\n}\nfunction reedSolomonComputeDivisor(degree) {\n if (degree < 1 || degree > 255)\n throw new RangeError(\"Degree out of range\");\n const result = [];\n for (let i = 0; i < degree - 1; i++)\n result.push(0);\n result.push(1);\n let root = 1;\n for (let i = 0; i < degree; i++) {\n for (let j = 0; j < result.length; j++) {\n result[j] = reedSolomonMultiply(result[j], root);\n if (j + 1 < result.length)\n result[j] ^= result[j + 1];\n }\n root = reedSolomonMultiply(root, 2);\n }\n return result;\n}\nfunction reedSolomonComputeRemainder(data, divisor) {\n const result = divisor.map((_) => 0);\n for (const b of data) {\n const factor = b ^ result.shift();\n result.push(0);\n divisor.forEach((coef, i) => result[i] ^= reedSolomonMultiply(coef, factor));\n }\n return result;\n}\nfunction reedSolomonMultiply(x, y) {\n if (x >>> 8 !== 0 || y >>> 8 !== 0)\n throw new RangeError(\"Byte out of range\");\n let z = 0;\n for (let i = 7; i >= 0; i--) {\n z = z << 1 ^ (z >>> 7) * 285;\n z ^= (y >>> i & 1) * x;\n }\n return z;\n}\nfunction encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {\n if (!(MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= MAX_VERSION) || mask < -1 || mask > 7) {\n throw new RangeError(\"Invalid value\");\n }\n let version;\n let dataUsedBits;\n for (version = minVersion; ; version++) {\n const dataCapacityBits2 = getNumDataCodewords(version, ecl) * 8;\n const usedBits = getTotalBits(segs, version);\n if (usedBits <= dataCapacityBits2) {\n dataUsedBits = usedBits;\n break;\n }\n if (version >= maxVersion)\n throw new RangeError(\"Data too long\");\n }\n for (const newEcl of [MEDIUM, QUARTILE, HIGH]) {\n if (boostEcl && dataUsedBits <= getNumDataCodewords(version, newEcl) * 8)\n ecl = newEcl;\n }\n const bb = [];\n for (const seg of segs) {\n appendBits(seg.mode[0], 4, bb);\n appendBits(seg.numChars, numCharCountBits(seg.mode, version), bb);\n for (const b of seg.getData())\n bb.push(b);\n }\n const dataCapacityBits = getNumDataCodewords(version, ecl) * 8;\n appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);\n appendBits(0, (8 - bb.length % 8) % 8, bb);\n for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 236 ^ 17)\n appendBits(padByte, 8, bb);\n const dataCodewords = Array.from({ length: Math.ceil(bb.length / 8) }, () => 0);\n bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));\n return new QrCode(version, ecl, dataCodewords, mask);\n}\n\nfunction encode(data, options) {\n const {\n ecc = \"L\",\n boostEcc = false,\n minVersion = 1,\n maxVersion = 40,\n maskPattern = -1,\n border = 1\n } = options || {};\n const segment = typeof data === \"string\" ? makeSegments(data) : Array.isArray(data) ? [makeBytes(data)] : void 0;\n if (!segment)\n throw new Error(`uqr only supports encoding string and binary data, but got: ${typeof data}`);\n const qr = encodeSegments(\n segment,\n EccMap[ecc],\n minVersion,\n maxVersion,\n maskPattern,\n boostEcc\n );\n const result = addBorder({\n version: qr.version,\n maskPattern: qr.mask,\n size: qr.size,\n data: qr.modules,\n types: qr.types\n }, border);\n if (options?.invert)\n result.data = result.data.map((row) => row.map((mod) => !mod));\n options?.onEncoded?.(result);\n return result;\n}\nfunction addBorder(input, border = 1) {\n if (!border)\n return input;\n const { size } = input;\n const newSize = size + border * 2;\n input.size = newSize;\n input.data.forEach((row) => {\n for (let i = 0; i < border; i++) {\n row.unshift(false);\n row.push(false);\n }\n });\n for (let i = 0; i < border; i++) {\n input.data.unshift(Array.from({ length: newSize }, (_) => false));\n input.data.push(Array.from({ length: newSize }, (_) => false));\n }\n const b = QrCodeDataType.Border;\n input.types.forEach((row) => {\n for (let i = 0; i < border; i++) {\n row.unshift(b);\n row.push(b);\n }\n });\n for (let i = 0; i < border; i++) {\n input.types.unshift(Array.from({ length: newSize }, (_) => b));\n input.types.push(Array.from({ length: newSize }, (_) => b));\n }\n return input;\n}\nfunction getDataAt(data, x, y, defaults = false) {\n if (x < 0 || y < 0 || x >= data.length || y >= data.length)\n return defaults;\n return data[y][x];\n}\n\nfunction renderUnicode(data, options = {}) {\n const {\n whiteChar = \"\\u2588\",\n blackChar = \"\\u2591\"\n } = options;\n const result = encode(data, options);\n return result.data.map((row) => {\n return row.map((mod) => mod ? blackChar : whiteChar).join(\"\");\n }).join(\"\\n\");\n}\nfunction renderANSI(data, options = {}) {\n return renderUnicode(data, {\n ...options,\n blackChar: \"\\x1B[40m\\u3000\\x1B[0m\",\n whiteChar: \"\\x1B[47m\\u3000\\x1B[0m\"\n });\n}\nfunction renderUnicodeCompact(data, options = {}) {\n const palette = {\n WHITE_ALL: \"\\u2588\",\n WHITE_BLACK: \"\\u2580\",\n BLACK_WHITE: \"\\u2584\",\n BLACK_ALL: \" \"\n };\n const result = encode(data, options);\n const WHITE = false;\n const BLACK = true;\n const at = (x, y) => getDataAt(result.data, x, y, true);\n const lines = [];\n let line = \"\";\n for (let row = 0; row < result.size; row += 2) {\n for (let col = 0; col < result.size; col++) {\n if (at(col, row) === WHITE && at(col, row + 1) === WHITE)\n line += palette.WHITE_ALL;\n else if (at(col, row) === WHITE && at(col, row + 1) === BLACK)\n line += palette.WHITE_BLACK;\n else if (at(col, row) === BLACK && at(col, row + 1) === WHITE)\n line += palette.BLACK_WHITE;\n else\n line += palette.BLACK_ALL;\n }\n lines.push(line);\n line = \"\";\n }\n return lines.join(\"\\n\");\n}\n\nfunction escapeAttr(value) {\n return value.replace(/&/g, \"&\").replace(/\"/g, \""\").replace(/</g, \"<\").replace(/>/g, \">\");\n}\nfunction renderSVG(data, options = {}) {\n const result = encode(data, options);\n const {\n pixelSize = 10,\n whiteColor = \"white\",\n blackColor = \"black\"\n } = options;\n const height = result.size * pixelSize;\n const width = result.size * pixelSize;\n let svg = `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${width} ${height}\">`;\n const paths = [];\n for (let row = 0; row < result.size; row++) {\n for (let col = 0; col < result.size; col++) {\n const x = col * pixelSize;\n const y = row * pixelSize;\n if (result.data[row][col])\n paths.push(`M${x},${y}h${pixelSize}v${pixelSize}h-${pixelSize}z`);\n }\n }\n svg += `<rect fill=\"${escapeAttr(whiteColor)}\" width=\"${width}\" height=\"${height}\"/>`;\n svg += `<path fill=\"${escapeAttr(blackColor)}\" d=\"${paths.join(\"\")}\"/>`;\n svg += \"</svg>\";\n return svg;\n}\n\nexport { QrCodeDataType, encode, renderANSI, renderSVG, renderUnicode, renderUnicodeCompact };\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "E279E1BEF0FE8A6564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/plugin/list.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport { OpenCode } from \"@opencode-ai/client\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.plugin.commands.list,\n Effect.fn(\"cli.plugin.list\")(function* () {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n const response = yield* Effect.promise(() => client.plugin.list({ location: { directory: process.cwd() } }))\n const plugins = response.data.toSorted((a, b) => a.id.localeCompare(b.id))\n if (plugins.length === 0) {\n process.stdout.write(\"No plugins loaded\" + EOL)\n return\n }\n process.stdout.write(plugins.map((plugin) => plugin.id).join(EOL) + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";83BAAA,mBAAS,gBAQT,SAAe,SAAQ,aACrB,OAAS,cAAS,YAAO,cAAS,UAClC,OAAO,QAAG,sBAAiB,OAAE,cAAU,OAAG,MACxC,SAAM,OAAU,WAAO,OAAc,aAAQ,OAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,GADW,MAAO,EAAO,QAAQ,IAAM,EAAO,OAAO,KAAK,CAAE,SAAU,CAAE,UAAW,QAAQ,IAAI,CAAE,CAAE,CAAC,CAAC,GAClF,KAAK,SAAS,CAAC,EAAG,IAAM,EAAE,GAAG,cAAc,EAAE,EAAE,CAAC,EACzE,GAAI,EAAQ,SAAW,EAAG,CACxB,QAAQ,OAAO,MAAM,oBAAsB,CAAG,EAC9C,OAEF,QAAQ,OAAO,MAAM,EAAQ,IAAI,CAAC,IAAW,EAAO,EAAE,EAAE,KAAK,CAAG,EAAI,CAAG,EACxE,CACH", | ||
| "debugId": "5977C78B899EE8DD64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/util/session.ts"], | ||
| "sourcesContent": [ | ||
| "import type { ModelInfo, SessionMessageAssistant, SessionMessageInfo } from \"@opencode-ai/client\"\nimport { Locale } from \"./locale\"\n\nexport function lastAssistantWithUsage(messages: ReadonlyArray<SessionMessageInfo>, boundary?: string) {\n const boundaryIndex = boundary ? messages.findIndex((message) => message.id === boundary) : -1\n if (boundary && boundaryIndex === -1) return undefined\n const end = boundaryIndex === -1 ? messages.length : boundaryIndex\n const compactionIndex = messages.findLastIndex(\n (message, index) => message.type === \"compaction\" && message.status === \"completed\" && index < end,\n )\n return messages.findLast(\n (message, index): message is SessionMessageAssistant & { tokens: NonNullable<SessionMessageAssistant[\"tokens\"]> } =>\n message.type === \"assistant\" && message.tokens !== undefined && index > compactionIndex && index < end,\n )\n}\n\nexport function contextUsage(\n messages: ReadonlyArray<SessionMessageInfo>,\n models: ReadonlyArray<ModelInfo> | undefined,\n boundary?: string,\n) {\n const last = lastAssistantWithUsage(messages, boundary)\n if (!last) return\n const tokens =\n last.tokens.input + last.tokens.output + last.tokens.reasoning + last.tokens.cache.read + last.tokens.cache.write\n if (tokens <= 0) return\n const model = models?.find((model) => model.providerID === last.model.providerID && model.id === last.model.id)\n return {\n tokens,\n percent: model?.limit.context ? Math.round((tokens / model.limit.context) * 100) : undefined,\n }\n}\n\nexport function formatContextUsage(tokens: number, percent?: number) {\n const value = Locale.number(tokens)\n return percent === undefined ? value : `${value} (${percent}%)`\n}\n" | ||
| ], | ||
| "mappings": ";oDAGO,SAAS,CAAsB,CAAC,EAA6C,EAAmB,CACrG,IAAM,EAAgB,EAAW,EAAS,UAAU,CAAC,IAAY,EAAQ,KAAO,CAAQ,EAAI,GAC5F,GAAI,GAAY,IAAkB,GAAI,OACtC,IAAM,EAAM,IAAkB,GAAK,EAAS,OAAS,EAC/C,EAAkB,EAAS,cAC/B,CAAC,EAAS,IAAU,EAAQ,OAAS,cAAgB,EAAQ,SAAW,aAAe,EAAQ,CACjG,EACA,OAAO,EAAS,SACd,CAAC,EAAS,IACR,EAAQ,OAAS,aAAe,EAAQ,SAAW,QAAa,EAAQ,GAAmB,EAAQ,CACvG,EAGK,SAAS,CAAY,CAC1B,EACA,EACA,EACA,CACA,IAAM,EAAO,EAAuB,EAAU,CAAQ,EACtD,GAAI,CAAC,EAAM,OACX,IAAM,EACJ,EAAK,OAAO,MAAQ,EAAK,OAAO,OAAS,EAAK,OAAO,UAAY,EAAK,OAAO,MAAM,KAAO,EAAK,OAAO,MAAM,MAC9G,GAAI,GAAU,EAAG,OACjB,IAAM,EAAQ,GAAQ,KAAK,CAAC,IAAU,EAAM,aAAe,EAAK,MAAM,YAAc,EAAM,KAAO,EAAK,MAAM,EAAE,EAC9G,MAAO,CACL,SACA,QAAS,GAAO,MAAM,QAAU,KAAK,MAAO,EAAS,EAAM,MAAM,QAAW,GAAG,EAAI,MACrF,EAGK,SAAS,CAAkB,CAAC,EAAgB,EAAkB,CACnE,IAAM,EAAQ,EAAO,OAAO,CAAM,EAClC,OAAO,IAAY,OAAY,EAAQ,GAAG,MAAU", | ||
| "debugId": "26C1BBDCE5FDDD5F64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../simulation/src/manifest.ts", "../simulation/src/protocol/index.ts", "../simulation/src/control-server.ts"], | ||
| "sourcesContent": [ | ||
| "import { homedir } from \"node:os\"\nimport { isAbsolute, join } from \"node:path\"\nimport { Config, Effect, FileSystem, Schema } from \"effect\"\nimport { PositiveInt } from \"@opencode-ai/core/schema\"\n\nconst InstanceName = Schema.String.check(\n Schema.makeFilter((value) =>\n /^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(value) ? undefined : \"a valid Drive instance name\",\n ),\n)\n\nconst Endpoint = Schema.String.check(\n Schema.makeFilter((value) => {\n if (!URL.canParse(value)) return \"a loopback WebSocket endpoint with an explicit port\"\n const endpoint = new URL(value)\n const port = Number(endpoint.port)\n return endpoint.protocol === \"ws:\" && endpoint.hostname === \"127.0.0.1\" && Number.isInteger(port) && port >= 1\n ? undefined\n : \"a loopback WebSocket endpoint with an explicit port\"\n }),\n)\n\nconst AbsolutePath = Schema.String.check(\n Schema.makeFilter((value) => (isAbsolute(value) ? undefined : \"an absolute path\")),\n)\n\nexport const Manifest = Schema.Struct({\n endpoints: Schema.Struct({\n ui: Endpoint,\n backend: Endpoint,\n }),\n viewport: Schema.optionalKey(\n Schema.Struct({\n cols: PositiveInt,\n rows: PositiveInt,\n }),\n ),\n recording: Schema.optionalKey(\n Schema.Struct({\n timeline: AbsolutePath,\n }),\n ),\n})\nexport interface Manifest extends Schema.Schema.Type<typeof Manifest> {}\n\nexport class ResolveError extends Schema.TaggedErrorClass<ResolveError>()(\"DriveManifest.ResolveError\", {\n reason: Schema.Literals([\"config\", \"not-found\", \"read\", \"decode\"]),\n path: Schema.optionalKey(Schema.String),\n message: Schema.String,\n cause: Schema.Defect(),\n}) {}\n\nexport const defaults: Manifest = {\n endpoints: {\n ui: \"ws://127.0.0.1:40900\",\n backend: \"ws://127.0.0.1:40950\",\n },\n}\n\nconst decode = Schema.decodeUnknownEffect(Schema.fromJsonString(Manifest))\n\nconst configError = (cause: unknown) =>\n new ResolveError({\n reason: \"config\",\n message: `Invalid Drive configuration: ${String(cause)}`,\n cause,\n })\n\nexport const resolve = Effect.fn(\"DriveManifest.resolve\")(function* () {\n const name = yield* Config.schema(InstanceName, \"OPENCODE_DRIVE\").pipe(Effect.mapError(configError))\n if (name === \"1\") return defaults\n\n const state = yield* Config.string(\"XDG_STATE_HOME\").pipe(\n Config.withDefault(join(homedir(), \".local\", \"state\")),\n Effect.mapError(configError),\n )\n const directory = yield* Config.string(\"DRIVE_REGISTRY_DIR\").pipe(\n Config.withDefault(join(state, \"opencode-drive\", \"instances\")),\n Effect.mapError(configError),\n )\n const file = join(directory, `${name}.json`)\n const fs = yield* FileSystem.FileSystem\n const contents = yield* fs.readFileString(file).pipe(\n Effect.mapError(\n (cause) =>\n new ResolveError({\n reason: cause.reason._tag === \"NotFound\" ? \"not-found\" : \"read\",\n path: file,\n message:\n cause.reason._tag === \"NotFound\"\n ? `Drive manifest not found: ${file}`\n : `Failed to read Drive manifest: ${file}: ${cause.message}`,\n cause,\n }),\n ),\n )\n return yield* decode(contents).pipe(\n Effect.mapError(\n (cause) =>\n new ResolveError({\n reason: \"decode\",\n path: file,\n message: `Invalid Drive manifest: ${file}: ${cause.message}`,\n cause,\n }),\n ),\n )\n})\n\nexport * as DriveManifest from \"./manifest\"\n", | ||
| "import { Effect, Schema } from \"effect\"\n\nconst JsonRpcID = Schema.Union([Schema.String, Schema.Number, Schema.Null])\ntype Json = Schema.Schema.Type<typeof Schema.Json>\n\nexport namespace JsonRpc {\n export const RequestFields = {\n jsonrpc: Schema.Literal(\"2.0\"),\n id: Schema.optional(JsonRpcID),\n }\n export const Request = Schema.Struct({\n ...RequestFields,\n method: Schema.String,\n params: Schema.optional(Schema.Json),\n })\n export interface Request extends Schema.Schema.Type<typeof Request> {}\n\n export const ErrorObject = Schema.Struct({\n code: Schema.Number,\n message: Schema.String,\n data: Schema.optional(Schema.Json),\n })\n\n export const Response = Schema.Struct({\n jsonrpc: Schema.Literal(\"2.0\"),\n id: JsonRpcID,\n result: Schema.optional(Schema.Json),\n error: Schema.optional(ErrorObject),\n })\n export interface Response extends Schema.Schema.Type<typeof Response> {}\n\n export const decodeRequest = Schema.decodeUnknownSync(Request)\n\n export function success(id: Request[\"id\"], result: unknown): Response | undefined {\n if (id === undefined) return undefined\n return { jsonrpc: \"2.0\", id, result: result as Json }\n }\n\n export function failure(id: Request[\"id\"], error: unknown): Response {\n return {\n jsonrpc: \"2.0\",\n id: id ?? null,\n error: {\n code: -32000,\n message: error instanceof Error ? error.message : String(error),\n },\n }\n }\n}\n\nexport namespace Handshake {\n export const ProtocolVersion = Schema.Literal(1)\n export type ProtocolVersion = Schema.Schema.Type<typeof ProtocolVersion>\n\n export const Capability = Schema.NonEmptyString\n export type Capability = Schema.Schema.Type<typeof Capability>\n\n export const EndpointRole = Schema.Literals([\"ui\", \"backend\"])\n export type EndpointRole = Schema.Schema.Type<typeof EndpointRole>\n\n export const Identity = Schema.Struct({\n name: Schema.NonEmptyString,\n version: Schema.NonEmptyString,\n })\n export interface Identity extends Schema.Schema.Type<typeof Identity> {}\n\n export const Params = Schema.Struct({\n client: Identity,\n expectedRole: EndpointRole,\n offeredVersions: Schema.Array(Schema.Int.check(Schema.isGreaterThan(0))).check(\n Schema.isMinLength(1),\n Schema.isUnique(),\n ),\n requiredCapabilities: Schema.Array(Capability).check(Schema.isUnique()),\n optionalCapabilities: Schema.Array(Capability).check(Schema.isUnique()),\n })\n export interface Params extends Schema.Schema.Type<typeof Params> {}\n\n export const Response = Schema.Struct({\n protocolVersion: ProtocolVersion,\n role: EndpointRole,\n server: Identity,\n capabilities: Schema.Array(Capability),\n })\n export interface Response extends Schema.Schema.Type<typeof Response> {}\n\n export const Request = Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literal(\"simulation.handshake\"),\n params: Params,\n })\n export interface Request extends Schema.Schema.Type<typeof Request> {}\n\n export interface DispatchAction {\n readonly role: EndpointRole\n readonly server: Identity\n readonly capabilities: ReadonlyArray<Capability>\n }\n\n export class RoleMismatchError extends Schema.TaggedErrorClass<RoleMismatchError>()(\n \"SimulationHandshake.RoleMismatchError\",\n {\n expected: EndpointRole,\n actual: EndpointRole,\n message: Schema.String,\n },\n ) {}\n\n export class UnsupportedProtocolError extends Schema.TaggedErrorClass<UnsupportedProtocolError>()(\n \"SimulationHandshake.UnsupportedProtocolError\",\n {\n offered: Schema.Array(Schema.Number),\n supported: Schema.Array(ProtocolVersion),\n message: Schema.String,\n },\n ) {}\n\n export class MissingCapabilityError extends Schema.TaggedErrorClass<MissingCapabilityError>()(\n \"SimulationHandshake.MissingCapabilityError\",\n {\n missing: Schema.Array(Capability),\n message: Schema.String,\n },\n ) {}\n\n export function dispatch(action: DispatchAction, params: Params) {\n return Effect.gen(function* () {\n if (params.expectedRole !== action.role) {\n return yield* Effect.fail(\n new RoleMismatchError({\n expected: params.expectedRole,\n actual: action.role,\n message: `Expected simulation endpoint role ${params.expectedRole}, received ${action.role}`,\n }),\n )\n }\n if (!params.offeredVersions.includes(1)) {\n return yield* Effect.fail(\n new UnsupportedProtocolError({\n offered: params.offeredVersions,\n supported: [1],\n message: \"No mutually supported simulation protocol version\",\n }),\n )\n }\n const installed = new Set(action.capabilities)\n const missing = params.requiredCapabilities.filter((capability) => !installed.has(capability))\n if (missing.length > 0) {\n return yield* Effect.fail(\n new MissingCapabilityError({\n missing,\n message: `Simulation endpoint is missing required capabilities: ${missing.join(\", \")}`,\n }),\n )\n }\n return {\n protocolVersion: 1,\n role: action.role,\n server: action.server,\n capabilities: Array.from(installed),\n } satisfies Response\n })\n }\n}\n\nexport namespace Frontend {\n export const Capabilities = [\n \"ui.type\",\n \"ui.press\",\n \"ui.enter\",\n \"ui.arrow\",\n \"ui.focus\",\n \"ui.click\",\n \"ui.click.semantic\",\n \"ui.resize\",\n \"ui.matches\",\n \"ui.screenshot\",\n \"ui.state\",\n \"ui.snapshot\",\n \"ui.capture\",\n \"ui.recording.finish\",\n ] as const satisfies ReadonlyArray<Handshake.Capability>\n\n export const KeyModifiers = Schema.Struct({\n ctrl: Schema.optional(Schema.Boolean),\n shift: Schema.optional(Schema.Boolean),\n meta: Schema.optional(Schema.Boolean),\n super: Schema.optional(Schema.Boolean),\n hyper: Schema.optional(Schema.Boolean),\n })\n export interface KeyModifiers extends Schema.Schema.Type<typeof KeyModifiers> {}\n\n export const SemanticClickTarget = Schema.Struct({\n id: Schema.NonEmptyString,\n instance: Schema.optionalKey(Schema.NonEmptyString),\n element: Schema.Number.check(Schema.isInt(), Schema.isGreaterThan(0)),\n })\n export interface SemanticClickTarget extends Schema.Schema.Type<typeof SemanticClickTarget> {}\n\n export const Action = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"ui.type\"), text: Schema.String }),\n Schema.Struct({ type: Schema.Literal(\"ui.press\"), key: Schema.String, modifiers: Schema.optional(KeyModifiers) }),\n Schema.Struct({ type: Schema.Literal(\"ui.enter\") }),\n Schema.Struct({ type: Schema.Literal(\"ui.arrow\"), direction: Schema.Literals([\"up\", \"down\", \"left\", \"right\"]) }),\n Schema.Struct({ type: Schema.Literal(\"ui.focus\"), target: Schema.Number }),\n Schema.Struct({\n type: Schema.Literal(\"ui.click\"),\n target: Schema.Number,\n x: Schema.Number,\n y: Schema.Number,\n semantic: Schema.optionalKey(SemanticClickTarget),\n }),\n Schema.Struct({ type: Schema.Literal(\"ui.resize\"), cols: Schema.Number, rows: Schema.Number }),\n ])\n export type Action = Schema.Schema.Type<typeof Action>\n\n export const Element = Schema.Struct({\n id: Schema.String,\n num: Schema.Number,\n x: Schema.Number,\n y: Schema.Number,\n width: Schema.Number,\n height: Schema.Number,\n focusable: Schema.Boolean,\n focused: Schema.Boolean,\n clickable: Schema.Boolean,\n editor: Schema.Boolean,\n })\n export interface Element extends Schema.Schema.Type<typeof Element> {}\n\n export const State = Schema.Struct({\n focused: Schema.Struct({\n renderable: Schema.optional(Schema.Number),\n editor: Schema.Boolean,\n }),\n elements: Schema.Array(Element),\n })\n export interface State extends Schema.Schema.Type<typeof State> {}\n\n export const SemanticNode = Schema.Struct({\n id: Schema.NonEmptyString,\n instance: Schema.optionalKey(Schema.NonEmptyString),\n parent: Schema.optionalKey(Schema.NonEmptyString),\n role: Schema.NonEmptyString,\n label: Schema.optionalKey(Schema.NonEmptyString),\n element: Schema.Number.check(Schema.isInt(), Schema.isGreaterThan(0)),\n focused: Schema.optionalKey(Schema.Boolean),\n selected: Schema.optionalKey(Schema.Boolean),\n expanded: Schema.optionalKey(Schema.Boolean),\n disabled: Schema.optionalKey(Schema.Boolean),\n })\n export interface SemanticNode extends Schema.Schema.Type<typeof SemanticNode> {}\n\n export const SemanticSnapshot = Schema.Struct({\n format: Schema.Literal(\"opencode-ui-snapshot-v1\"),\n nodes: Schema.Array(SemanticNode).check(\n Schema.makeFilter((nodes) => {\n const ids = new Set(nodes.map((node) => node.id))\n if (ids.size !== nodes.length) return \"semantic node ids must be unique\"\n if (new Set(nodes.map((node) => node.element)).size !== nodes.length)\n return \"semantic node elements must be unique\"\n if (nodes.some((node) => node.parent !== undefined && !ids.has(node.parent)))\n return \"semantic node parents must reference another node\"\n const parents = new Map(nodes.map((node) => [node.id, node.parent]))\n for (const node of nodes) {\n const visited = new Set<string>()\n let current: string | undefined = node.id\n while (current !== undefined) {\n if (visited.has(current)) return \"semantic node hierarchy must be acyclic\"\n visited.add(current)\n current = parents.get(current)\n }\n }\n return undefined\n }),\n ),\n })\n export interface SemanticSnapshot extends Schema.Schema.Type<typeof SemanticSnapshot> {}\n\n export const Screenshot = Schema.String\n export type Screenshot = Schema.Schema.Type<typeof Screenshot>\n\n export const Color = Schema.Tuple([Schema.Number, Schema.Number, Schema.Number, Schema.Number])\n export type Color = Schema.Schema.Type<typeof Color>\n\n export const CapturedFrame = Schema.Struct({\n cols: Schema.Number,\n rows: Schema.Number,\n cursor: Schema.Tuple([Schema.Number, Schema.Number]),\n lines: Schema.Array(\n Schema.Struct({\n spans: Schema.Array(\n Schema.Struct({\n text: Schema.String,\n fg: Color,\n bg: Color,\n attributes: Schema.Number,\n width: Schema.Number,\n }),\n ),\n }),\n ),\n })\n export interface CapturedFrame extends Schema.Schema.Type<typeof CapturedFrame> {}\n\n export const RecordingFinish = Schema.String\n export type RecordingFinish = Schema.Schema.Type<typeof RecordingFinish>\n\n export const Matches = Schema.Boolean\n export type Matches = Schema.Schema.Type<typeof Matches>\n\n export const ScreenshotParams = Schema.Struct({ name: Schema.optional(Schema.String) })\n export interface ScreenshotParams extends Schema.Schema.Type<typeof ScreenshotParams> {}\n\n export const TypeParams = Schema.Struct({ text: Schema.String })\n export interface TypeParams extends Schema.Schema.Type<typeof TypeParams> {}\n\n export const MatchesParams = Schema.Struct({ text: Schema.String })\n export interface MatchesParams extends Schema.Schema.Type<typeof MatchesParams> {}\n\n export const PressParams = Schema.Struct({ key: Schema.String, modifiers: Schema.optional(KeyModifiers) })\n export interface PressParams extends Schema.Schema.Type<typeof PressParams> {}\n\n export const ArrowParams = Schema.Struct({ direction: Schema.Literals([\"up\", \"down\", \"left\", \"right\"]) })\n export interface ArrowParams extends Schema.Schema.Type<typeof ArrowParams> {}\n\n export const FocusParams = Schema.Struct({ target: Schema.Number })\n export interface FocusParams extends Schema.Schema.Type<typeof FocusParams> {}\n\n export const ClickParams = Schema.Struct({\n target: Schema.Number,\n x: Schema.Number,\n y: Schema.Number,\n semantic: Schema.optionalKey(SemanticClickTarget),\n })\n export interface ClickParams extends Schema.Schema.Type<typeof ClickParams> {}\n\n export const ResizeParams = Schema.Struct({ cols: Schema.Number, rows: Schema.Number })\n export interface ResizeParams extends Schema.Schema.Type<typeof ResizeParams> {}\n\n export const Request = Schema.Union([\n Handshake.Request,\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.type\"), params: TypeParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.press\"), params: PressParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.arrow\"), params: ArrowParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.focus\"), params: FocusParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.click\"), params: ClickParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.resize\"), params: ResizeParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.matches\"), params: MatchesParams }),\n Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literal(\"ui.screenshot\"),\n params: Schema.optional(ScreenshotParams),\n }),\n Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literals([\"ui.enter\", \"ui.state\", \"ui.snapshot\", \"ui.recording.finish\"]),\n }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"ui.capture\") }),\n ])\n export type Request = Schema.Schema.Type<typeof Request>\n export const decodeRequest = Schema.decodeUnknownSync(Request)\n export const decodeRequestEffect = Schema.decodeUnknownEffect(Schema.fromJsonString(Request))\n}\n\nexport namespace Backend {\n export const Capabilities = [\n \"llm.attach\",\n \"llm.chunk\",\n \"llm.finish\",\n \"llm.disconnect\",\n \"llm.pending\",\n \"llm.request\",\n \"llm.tool-input-delta\",\n \"tool.attach\",\n \"tool.update\",\n \"tool.finish\",\n \"tool.fail\",\n \"tool.invocation\",\n \"tool.cancel\",\n ] as const satisfies ReadonlyArray<Handshake.Capability>\n\n export const Item = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"textDelta\"), text: Schema.String }),\n Schema.Struct({ type: Schema.Literal(\"reasoningDelta\"), text: Schema.String }),\n Schema.Struct({\n type: Schema.Literal(\"toolInputStart\"),\n index: Schema.Number,\n id: Schema.String,\n name: Schema.String,\n }),\n Schema.Struct({\n type: Schema.Literal(\"toolInputDelta\"),\n index: Schema.Number,\n text: Schema.String,\n }),\n Schema.Struct({\n type: Schema.Literal(\"toolCall\"),\n index: Schema.Number,\n id: Schema.String,\n name: Schema.String,\n input: Schema.Json,\n }),\n Schema.Struct({ type: Schema.Literal(\"raw\"), chunk: Schema.Json }),\n ])\n export type Item = Schema.Schema.Type<typeof Item>\n\n export const FinishReason = Schema.Literals([\"stop\", \"tool-calls\", \"length\", \"content-filter\"])\n export type FinishReason = Schema.Schema.Type<typeof FinishReason>\n\n export const ToolContent = Schema.Union([\n Schema.Struct({ type: Schema.Literal(\"text\"), text: Schema.String }),\n Schema.Struct({\n type: Schema.Literal(\"file\"),\n data: Schema.String,\n mime: Schema.NonEmptyString,\n name: Schema.optionalKey(Schema.String),\n }),\n ])\n export type ToolContent = Schema.Schema.Type<typeof ToolContent>\n\n const ToolName = Schema.NonEmptyString.check(\n Schema.makeFilter((name) =>\n /^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(name) ? undefined : \"simulated tool names must be provider-safe\",\n ),\n )\n const ToolNamespace = Schema.NonEmptyString.check(\n Schema.makeFilter((namespace) =>\n namespace.split(\".\").every((segment) => /^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(segment))\n ? undefined\n : \"simulated tool namespaces must contain provider-safe segments\",\n ),\n )\n\n export const ToolRegistration = Schema.Struct({\n name: ToolName,\n description: Schema.String,\n inputSchema: Schema.Record(Schema.String, Schema.Json),\n outputSchema: Schema.optionalKey(Schema.Record(Schema.String, Schema.Json)),\n permission: Schema.optionalKey(Schema.NonEmptyString),\n options: Schema.optionalKey(\n Schema.Struct({\n namespace: Schema.optionalKey(ToolNamespace),\n codemode: Schema.optionalKey(Schema.Boolean),\n }),\n ),\n })\n export interface ToolRegistration extends Schema.Schema.Type<typeof ToolRegistration> {}\n\n export const ToolAttachParams = Schema.Struct({\n tools: Schema.Array(ToolRegistration).check(\n Schema.makeFilter((tools) => {\n const names = tools.map(exposedToolName)\n if (names.some((name) => !/^[A-Za-z][A-Za-z0-9_-]{0,63}$/.test(name)))\n return \"simulated tool names including namespaces must be provider-safe\"\n if (new Set(names).size !== names.length) return \"simulated tool registrations must have unique exposed names\"\n if (\n tools.some(\n (tool) =>\n tool.name === \"execute\" && tool.options?.namespace === undefined && tool.options?.codemode === false,\n )\n )\n return 'direct simulated tool name \"execute\" is reserved'\n return undefined\n }),\n ),\n })\n export interface ToolAttachParams extends Schema.Schema.Type<typeof ToolAttachParams> {}\n\n export function exposedToolName(registration: ToolRegistration) {\n return registration.options?.namespace === undefined\n ? registration.name\n : `${registration.options.namespace.replaceAll(\".\", \"_\")}_${registration.name}`\n }\n\n export const ToolProgress = Schema.Record(Schema.String, Schema.Json)\n export interface ToolProgress extends Schema.Schema.Type<typeof ToolProgress> {}\n\n export const ToolOutput = Schema.Struct({\n structured: Schema.Json,\n content: Schema.Array(ToolContent),\n })\n export interface ToolOutput extends Schema.Schema.Type<typeof ToolOutput> {}\n\n export const ToolUpdateParams = Schema.Struct({\n id: Schema.String,\n sequence: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),\n update: ToolProgress,\n })\n export interface ToolUpdateParams extends Schema.Schema.Type<typeof ToolUpdateParams> {}\n\n export const ToolFinishParams = Schema.Struct({ id: Schema.String, output: ToolOutput })\n export interface ToolFinishParams extends Schema.Schema.Type<typeof ToolFinishParams> {}\n\n export const ToolFailParams = Schema.Struct({ id: Schema.String, message: Schema.String })\n export interface ToolFailParams extends Schema.Schema.Type<typeof ToolFailParams> {}\n\n export const ToolInvocation = Schema.Struct({\n id: Schema.String,\n name: Schema.String,\n input: Schema.Json,\n context: Schema.Struct({\n sessionID: Schema.String,\n agent: Schema.String,\n messageID: Schema.String,\n callID: Schema.String,\n }),\n })\n export interface ToolInvocation extends Schema.Schema.Type<typeof ToolInvocation> {}\n\n export const ToolCancellation = Schema.Struct({\n id: Schema.String,\n reason: Schema.Literal(\"interrupted\"),\n })\n export interface ToolCancellation extends Schema.Schema.Type<typeof ToolCancellation> {}\n\n export const ChunkParams = Schema.Struct({ id: Schema.String, items: Schema.Array(Item) })\n export interface ChunkParams extends Schema.Schema.Type<typeof ChunkParams> {}\n\n export const FinishParams = Schema.Struct({\n id: Schema.String,\n reason: FinishReason.pipe(Schema.withDecodingDefault(Effect.succeed(\"stop\" as const))),\n })\n export interface FinishParams extends Schema.Schema.Type<typeof FinishParams> {}\n\n export const DisconnectParams = Schema.Struct({ id: Schema.String })\n export interface DisconnectParams extends Schema.Schema.Type<typeof DisconnectParams> {}\n\n export const Request = Schema.Union([\n Handshake.Request,\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"llm.chunk\"), params: ChunkParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"llm.finish\"), params: FinishParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"llm.disconnect\"), params: DisconnectParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.attach\"), params: ToolAttachParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.update\"), params: ToolUpdateParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.finish\"), params: ToolFinishParams }),\n Schema.Struct({ ...JsonRpc.RequestFields, method: Schema.Literal(\"tool.fail\"), params: ToolFailParams }),\n Schema.Struct({\n ...JsonRpc.RequestFields,\n method: Schema.Literals([\"llm.attach\", \"llm.pending\"]),\n }),\n ])\n export type Request = Schema.Schema.Type<typeof Request>\n export const decodeRequest = Schema.decodeUnknownSync(Request)\n export const decodeRequestEffect = Schema.decodeUnknownEffect(Schema.fromJsonString(Request))\n\n export const ProviderInvocation = Schema.Struct({ id: Schema.String, url: Schema.String, body: Schema.Json })\n export interface ProviderInvocation extends Schema.Schema.Type<typeof ProviderInvocation> {}\n\n export const NetworkLogEntry = Schema.Struct({\n time: Schema.Number,\n method: Schema.String,\n url: Schema.String,\n matched: Schema.Boolean,\n })\n export interface NetworkLogEntry extends Schema.Schema.Type<typeof NetworkLogEntry> {}\n}\n\nexport * as SimulationProtocol from \"./index\"\n", | ||
| "import { Effect, Fiber, Queue, Stream } from \"effect\"\nimport { SimulationProtocol } from \"./protocol\"\n\nexport interface Server {\n readonly url: string\n}\n\ninterface Request {\n readonly id?: string | number | null\n}\n\nexport interface SocketData {\n readonly drive?: true\n attachment?: Fiber.Fiber<void>\n closed?: true\n}\n\nexport type Socket = Bun.ServerWebSocket<SocketData>\n\nexport function start<RequestType extends Request, Error, Services>(options: {\n readonly endpoint: string\n readonly label: string\n readonly data: () => SocketData\n readonly decode: (input: string) => Effect.Effect<RequestType, Error>\n readonly handle: (socket: Socket, request: RequestType) => Effect.Effect<unknown, unknown, Services>\n readonly close?: (socket: Socket) => Effect.Effect<void, never, Services>\n}) {\n return Effect.gen(function* () {\n const messages = yield* Queue.bounded<{ readonly socket: Socket; readonly input: string }>(256)\n const closures = yield* Queue.unbounded<Socket>()\n yield* Stream.fromQueue(messages).pipe(\n Stream.runForEach((message) =>\n options.decode(message.input).pipe(\n Effect.flatMap((request) =>\n options.handle(message.socket, request).pipe(\n Effect.matchEffect({\n onFailure: (error) => send(message.socket, SimulationProtocol.JsonRpc.failure(request.id, error)),\n onSuccess: (result) => send(message.socket, SimulationProtocol.JsonRpc.success(request.id, result)),\n }),\n ),\n ),\n Effect.catch((error) => send(message.socket, SimulationProtocol.JsonRpc.failure(undefined, error))),\n ),\n ),\n Effect.forkScoped,\n )\n yield* Stream.fromQueue(closures).pipe(\n Stream.runForEach((socket) => options.close?.(socket) ?? Effect.void),\n Effect.forkScoped,\n )\n const url = yield* Effect.try({ try: () => new URL(options.endpoint), catch: (cause) => cause })\n yield* Effect.acquireRelease(\n Effect.sync(() =>\n Bun.serve<SocketData>({\n hostname: url.hostname,\n port: Number(url.port),\n fetch(request, server) {\n if (server.upgrade(request, { data: options.data() })) return undefined\n return new Response(options.label, { status: 426 })\n },\n websocket: {\n close(socket) {\n socket.data.closed = true\n Queue.offerUnsafe(closures, socket)\n },\n message(socket, message) {\n const input = typeof message === \"string\" ? message : message.toString()\n if (Queue.offerUnsafe(messages, { socket, input })) return\n socket.send(\n JSON.stringify(\n SimulationProtocol.JsonRpc.failure(undefined, new Error(\"Simulation control queue is full\")),\n ),\n )\n },\n },\n }),\n ),\n (server) => Effect.promise(() => server.stop(true)),\n )\n return { url: options.endpoint } satisfies Server\n })\n}\n\nfunction send(socket: Socket, response: SimulationProtocol.JsonRpc.Response | undefined) {\n if (!response) return Effect.void\n return Effect.sync(() => {\n socket.send(JSON.stringify(response))\n })\n}\n\nexport * as SimulationControlServer from \"./control-server\"\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "9EFB98BE53694DEC64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+togetherai@2.0.41+d6123d32214422cb/node_modules/@ai-sdk/togetherai/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/togetherai-provider.ts\nimport {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel\n} from \"@ai-sdk/openai-compatible\";\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/reranking/togetherai-reranking-model.ts\nimport {\n combineHeaders,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n parseProviderOptions,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\n\n// src/reranking/togetherai-reranking-api.ts\nimport { lazySchema, zodSchema } from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\nvar togetheraiErrorSchema = lazySchema(\n () => zodSchema(\n z.object({\n error: z.object({\n message: z.string()\n })\n })\n )\n);\nvar togetheraiRerankingResponseSchema = lazySchema(\n () => zodSchema(\n z.object({\n id: z.string().nullish(),\n model: z.string().nullish(),\n results: z.array(\n z.object({\n index: z.number(),\n relevance_score: z.number()\n })\n ),\n usage: z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number()\n })\n })\n )\n);\n\n// src/reranking/togetherai-reranking-options.ts\nimport { lazySchema as lazySchema2, zodSchema as zodSchema2 } from \"@ai-sdk/provider-utils\";\nimport { z as z2 } from \"zod/v4\";\nvar togetheraiRerankingModelOptionsSchema = lazySchema2(\n () => zodSchema2(\n z2.object({\n rankFields: z2.array(z2.string()).optional()\n })\n )\n);\n\n// src/reranking/togetherai-reranking-model.ts\nvar TogetherAIRerankingModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.modelId = modelId;\n this.config = config;\n }\n get provider() {\n return this.config.provider;\n }\n // see https://docs.together.ai/reference/rerank-1\n async doRerank({\n documents,\n headers,\n query,\n topN,\n abortSignal,\n providerOptions\n }) {\n var _a, _b;\n const rerankingOptions = await parseProviderOptions({\n provider: \"togetherai\",\n providerOptions,\n schema: togetheraiRerankingModelOptionsSchema\n });\n const {\n responseHeaders,\n value: response,\n rawValue\n } = await postJsonToApi({\n url: `${this.config.baseURL}/rerank`,\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n model: this.modelId,\n documents: documents.values,\n query,\n top_n: topN,\n rank_fields: rerankingOptions == null ? void 0 : rerankingOptions.rankFields,\n return_documents: false\n // reduce response size\n },\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: togetheraiErrorSchema,\n errorToMessage: (data) => data.error.message\n }),\n successfulResponseHandler: createJsonResponseHandler(\n togetheraiRerankingResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n ranking: response.results.map((result) => ({\n index: result.index,\n relevanceScore: result.relevance_score\n })),\n response: {\n id: (_a = response.id) != null ? _a : void 0,\n modelId: (_b = response.model) != null ? _b : void 0,\n headers: responseHeaders,\n body: rawValue\n }\n };\n }\n};\n\n// src/togetherai-image-model.ts\nimport {\n combineHeaders as combineHeaders2,\n convertImageModelFileToDataUri,\n createJsonResponseHandler as createJsonResponseHandler2,\n createJsonErrorResponseHandler as createJsonErrorResponseHandler2,\n lazySchema as lazySchema3,\n parseProviderOptions as parseProviderOptions2,\n postJsonToApi as postJsonToApi2,\n zodSchema as zodSchema3\n} from \"@ai-sdk/provider-utils\";\nimport { z as z3 } from \"zod/v4\";\nvar TogetherAIImageModel = class {\n constructor(modelId, config) {\n this.modelId = modelId;\n this.config = config;\n this.specificationVersion = \"v3\";\n this.maxImagesPerCall = 1;\n }\n get provider() {\n return this.config.provider;\n }\n async doGenerate({\n prompt,\n n,\n size,\n seed,\n providerOptions,\n headers,\n abortSignal,\n files,\n mask\n }) {\n var _a, _b, _c;\n const warnings = [];\n if (mask != null) {\n throw new Error(\n \"Together AI does not support mask-based image editing. Use FLUX Kontext models (e.g., black-forest-labs/FLUX.1-kontext-pro) with a reference image and descriptive prompt instead.\"\n );\n }\n if (size != null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"aspectRatio\",\n details: \"This model does not support the `aspectRatio` option. Use `size` instead.\"\n });\n }\n const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();\n const togetheraiOptions = await parseProviderOptions2({\n provider: \"togetherai\",\n providerOptions,\n schema: togetheraiImageModelOptionsSchema\n });\n let imageUrl;\n if (files != null && files.length > 0) {\n imageUrl = convertImageModelFileToDataUri(files[0]);\n if (files.length > 1) {\n warnings.push({\n type: \"other\",\n message: \"Together AI only supports a single input image. Additional images are ignored.\"\n });\n }\n }\n const splitSize = size == null ? void 0 : size.split(\"x\");\n const { value: response, responseHeaders } = await postJsonToApi2({\n url: `${this.config.baseURL}/images/generations`,\n headers: combineHeaders2(this.config.headers(), headers),\n body: {\n model: this.modelId,\n prompt,\n seed,\n ...n > 1 ? { n } : {},\n ...splitSize && {\n width: parseInt(splitSize[0]),\n height: parseInt(splitSize[1])\n },\n ...imageUrl != null ? { image_url: imageUrl } : {},\n response_format: \"base64\",\n ...togetheraiOptions != null ? togetheraiOptions : {}\n },\n failedResponseHandler: createJsonErrorResponseHandler2({\n errorSchema: togetheraiErrorSchema2,\n errorToMessage: (data) => data.error.message\n }),\n successfulResponseHandler: createJsonResponseHandler2(\n togetheraiImageResponseSchema\n ),\n abortSignal,\n fetch: this.config.fetch\n });\n return {\n images: response.data.map((item) => item.b64_json),\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders\n }\n };\n }\n};\nvar togetheraiImageResponseSchema = z3.object({\n data: z3.array(\n z3.object({\n b64_json: z3.string()\n })\n )\n});\nvar togetheraiErrorSchema2 = z3.object({\n error: z3.object({\n message: z3.string()\n })\n});\nvar togetheraiImageModelOptionsSchema = lazySchema3(\n () => zodSchema3(\n z3.object({\n /**\n * Number of generation steps. Higher values can improve quality.\n */\n steps: z3.number().nullish(),\n /**\n * Guidance scale for image generation.\n */\n guidance: z3.number().nullish(),\n /**\n * Negative prompt to guide what to avoid.\n */\n negative_prompt: z3.string().nullish(),\n /**\n * Disable the safety checker for image generation.\n * When true, the API will not reject images flagged as potentially NSFW.\n * Not available for Flux Schnell Free and Flux Pro models.\n */\n disable_safety_checker: z3.boolean().nullish()\n }).passthrough()\n )\n);\n\n// src/version.ts\nvar VERSION = true ? \"2.0.41\" : \"0.0.0-test\";\n\n// src/togetherai-provider.ts\nfunction loadDeprecatedApiKey() {\n if (typeof process === \"undefined\") {\n return void 0;\n }\n if (typeof process.env.TOGETHER_API_KEY === \"string\") {\n return void 0;\n }\n const key = process.env.TOGETHER_AI_API_KEY;\n if (typeof key === \"string\") {\n console.warn(\n \"TOGETHER_AI_API_KEY is deprecated and will be removed in a future release. Please use TOGETHER_API_KEY instead.\"\n );\n }\n return key;\n}\nfunction createTogetherAI(options = {}) {\n var _a;\n const baseURL = withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.together.xyz/v1/\"\n );\n const getHeaders = () => {\n var _a2;\n return withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: (_a2 = options.apiKey) != null ? _a2 : loadDeprecatedApiKey(),\n environmentVariableName: \"TOGETHER_API_KEY\",\n description: \"TogetherAI\"\n })}`,\n ...options.headers\n },\n `ai-sdk/togetherai/${VERSION}`\n );\n };\n const getCommonModelConfig = (modelType) => ({\n provider: `togetherai.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch\n });\n const createChatModel = (modelId) => {\n return new OpenAICompatibleChatLanguageModel(\n modelId,\n getCommonModelConfig(\"chat\")\n );\n };\n const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(\n modelId,\n getCommonModelConfig(\"completion\")\n );\n const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(\n modelId,\n getCommonModelConfig(\"embedding\")\n );\n const createImageModel = (modelId) => new TogetherAIImageModel(modelId, {\n ...getCommonModelConfig(\"image\"),\n baseURL: baseURL != null ? baseURL : \"https://api.together.xyz/v1/\"\n });\n const createRerankingModel = (modelId) => new TogetherAIRerankingModel(modelId, {\n ...getCommonModelConfig(\"reranking\"),\n baseURL: baseURL != null ? baseURL : \"https://api.together.xyz/v1/\"\n });\n const provider = (modelId) => createChatModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.completionModel = createCompletionModel;\n provider.languageModel = createChatModel;\n provider.chatModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n provider.reranking = createRerankingModel;\n provider.rerankingModel = createRerankingModel;\n return provider;\n}\nvar togetherai = createTogetherAI();\nexport {\n VERSION,\n createTogetherAI,\n togetherai\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "2DCE879E7B1CEE0964756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/@ai-sdk+perplexity@3.0.26+d6123d32214422cb/node_modules/@ai-sdk/perplexity/dist/index.mjs"], | ||
| "sourcesContent": [ | ||
| "// src/perplexity-provider.ts\nimport {\n NoSuchModelError\n} from \"@ai-sdk/provider\";\nimport {\n generateId,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix\n} from \"@ai-sdk/provider-utils\";\n\n// src/perplexity-language-model.ts\nimport {\n combineHeaders,\n createEventSourceResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n postJsonToApi\n} from \"@ai-sdk/provider-utils\";\nimport { z } from \"zod/v4\";\n\n// src/convert-perplexity-usage.ts\nfunction convertPerplexityUsage(usage) {\n var _a, _b, _c;\n if (usage == null) {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n }\n const promptTokens = (_a = usage.prompt_tokens) != null ? _a : 0;\n const completionTokens = (_b = usage.completion_tokens) != null ? _b : 0;\n const reasoningTokens = (_c = usage.reasoning_tokens) != null ? _c : 0;\n return {\n inputTokens: {\n total: promptTokens,\n noCache: promptTokens,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: completionTokens,\n text: completionTokens - reasoningTokens,\n reasoning: reasoningTokens\n },\n raw: usage\n };\n}\n\n// src/convert-to-perplexity-messages.ts\nimport {\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\nimport { convertUint8ArrayToBase64 } from \"@ai-sdk/provider-utils\";\nfunction convertToPerplexityMessages(prompt) {\n const messages = [];\n for (const { role, content } of prompt) {\n switch (role) {\n case \"system\": {\n messages.push({ role: \"system\", content });\n break;\n }\n case \"user\":\n case \"assistant\": {\n const hasMultipartContent = content.some(\n (part) => part.type === \"file\" && part.mediaType.startsWith(\"image/\") || part.type === \"file\" && part.mediaType === \"application/pdf\"\n );\n const messageContent = content.map((part, index) => {\n var _a;\n switch (part.type) {\n case \"text\": {\n return {\n type: \"text\",\n text: part.text\n };\n }\n case \"file\": {\n if (part.mediaType === \"application/pdf\") {\n return part.data instanceof URL ? {\n type: \"file_url\",\n file_url: {\n url: part.data.toString()\n },\n file_name: part.filename\n } : {\n type: \"file_url\",\n file_url: {\n url: typeof part.data === \"string\" ? part.data : convertUint8ArrayToBase64(part.data)\n },\n file_name: part.filename || `document-${index}.pdf`\n };\n } else if (part.mediaType.startsWith(\"image/\")) {\n return part.data instanceof URL ? {\n type: \"image_url\",\n image_url: {\n url: part.data.toString()\n }\n } : {\n type: \"image_url\",\n image_url: {\n url: `data:${(_a = part.mediaType) != null ? _a : \"image/jpeg\"};base64,${typeof part.data === \"string\" ? part.data : convertUint8ArrayToBase64(part.data)}`\n }\n };\n }\n }\n }\n }).filter(Boolean);\n messages.push({\n role,\n content: hasMultipartContent ? messageContent : messageContent.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\")\n });\n break;\n }\n case \"tool\": {\n throw new UnsupportedFunctionalityError({\n functionality: \"Tool messages\"\n });\n }\n default: {\n const _exhaustiveCheck = role;\n throw new Error(`Unsupported role: ${_exhaustiveCheck}`);\n }\n }\n }\n return messages;\n}\n\n// src/map-perplexity-finish-reason.ts\nfunction mapPerplexityFinishReason(finishReason) {\n switch (finishReason) {\n case \"stop\":\n case \"length\":\n return finishReason;\n default:\n return \"other\";\n }\n}\n\n// src/perplexity-language-model.ts\nvar PerplexityLanguageModel = class {\n constructor(modelId, config) {\n this.specificationVersion = \"v3\";\n this.provider = \"perplexity\";\n this.supportedUrls = {\n // No URLs are supported.\n };\n this.modelId = modelId;\n this.config = config;\n }\n getArgs({\n prompt,\n maxOutputTokens,\n temperature,\n topP,\n topK,\n frequencyPenalty,\n presencePenalty,\n stopSequences,\n responseFormat,\n seed,\n providerOptions\n }) {\n var _a;\n const warnings = [];\n if (topK != null) {\n warnings.push({ type: \"unsupported\", feature: \"topK\" });\n }\n if (stopSequences != null) {\n warnings.push({ type: \"unsupported\", feature: \"stopSequences\" });\n }\n if (seed != null) {\n warnings.push({ type: \"unsupported\", feature: \"seed\" });\n }\n return {\n args: {\n // model id:\n model: this.modelId,\n // standardized settings:\n frequency_penalty: frequencyPenalty,\n max_tokens: maxOutputTokens,\n presence_penalty: presencePenalty,\n temperature,\n top_k: topK,\n top_p: topP,\n // response format:\n response_format: (responseFormat == null ? void 0 : responseFormat.type) === \"json\" ? {\n type: \"json_schema\",\n json_schema: { schema: responseFormat.schema }\n } : void 0,\n // provider extensions\n ...(_a = providerOptions == null ? void 0 : providerOptions.perplexity) != null ? _a : {},\n // messages:\n messages: convertToPerplexityMessages(prompt)\n },\n warnings\n };\n }\n async doGenerate(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;\n const { args: body, warnings } = this.getArgs(options);\n const {\n responseHeaders,\n value: response,\n rawValue: rawResponse\n } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage\n }),\n successfulResponseHandler: createJsonResponseHandler(\n perplexityResponseSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n const choice = response.choices[0];\n const content = [];\n const text = choice.message.content;\n if (text.length > 0) {\n content.push({ type: \"text\", text });\n }\n if (response.citations != null) {\n for (const url of response.citations) {\n content.push({\n type: \"source\",\n sourceType: \"url\",\n id: this.config.generateId(),\n url\n });\n }\n }\n return {\n content,\n finishReason: {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: (_a = choice.finish_reason) != null ? _a : void 0\n },\n usage: convertPerplexityUsage(response.usage),\n request: { body },\n response: {\n ...getResponseMetadata(response),\n headers: responseHeaders,\n body: rawResponse\n },\n warnings,\n providerMetadata: {\n perplexity: {\n images: (_c = (_b = response.images) == null ? void 0 : _b.map((image) => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width\n }))) != null ? _c : null,\n usage: {\n citationTokens: (_e = (_d = response.usage) == null ? void 0 : _d.citation_tokens) != null ? _e : null,\n numSearchQueries: (_g = (_f = response.usage) == null ? void 0 : _f.num_search_queries) != null ? _g : null\n },\n cost: ((_h = response.usage) == null ? void 0 : _h.cost) ? {\n inputTokensCost: (_i = response.usage.cost.input_tokens_cost) != null ? _i : null,\n outputTokensCost: (_j = response.usage.cost.output_tokens_cost) != null ? _j : null,\n requestCost: (_k = response.usage.cost.request_cost) != null ? _k : null,\n totalCost: (_l = response.usage.cost.total_cost) != null ? _l : null\n } : null\n }\n }\n };\n }\n async doStream(options) {\n const { args, warnings } = this.getArgs(options);\n const body = { ...args, stream: true };\n const { responseHeaders, value: response } = await postJsonToApi({\n url: `${this.config.baseURL}/chat/completions`,\n headers: combineHeaders(this.config.headers(), options.headers),\n body,\n failedResponseHandler: createJsonErrorResponseHandler({\n errorSchema: perplexityErrorSchema,\n errorToMessage\n }),\n successfulResponseHandler: createEventSourceResponseHandler(\n perplexityChunkSchema\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch\n });\n let finishReason = {\n unified: \"other\",\n raw: void 0\n };\n let usage = void 0;\n const providerMetadata = {\n perplexity: {\n usage: {\n citationTokens: null,\n numSearchQueries: null\n },\n cost: null,\n images: null\n }\n };\n let isFirstChunk = true;\n let isActive = false;\n const self = this;\n return {\n stream: response.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"stream-start\", warnings });\n },\n transform(chunk, controller) {\n var _a, _b, _c, _d, _e, _f, _g;\n if (options.includeRawChunks) {\n controller.enqueue({ type: \"raw\", rawValue: chunk.rawValue });\n }\n if (!chunk.success) {\n controller.enqueue({ type: \"error\", error: chunk.error });\n return;\n }\n const value = chunk.value;\n if (isFirstChunk) {\n controller.enqueue({\n type: \"response-metadata\",\n ...getResponseMetadata(value)\n });\n (_a = value.citations) == null ? void 0 : _a.forEach((url) => {\n controller.enqueue({\n type: \"source\",\n sourceType: \"url\",\n id: self.config.generateId(),\n url\n });\n });\n isFirstChunk = false;\n }\n if (value.usage != null) {\n usage = value.usage;\n providerMetadata.perplexity.usage = {\n citationTokens: (_b = value.usage.citation_tokens) != null ? _b : null,\n numSearchQueries: (_c = value.usage.num_search_queries) != null ? _c : null\n };\n providerMetadata.perplexity.cost = value.usage.cost ? {\n inputTokensCost: (_d = value.usage.cost.input_tokens_cost) != null ? _d : null,\n outputTokensCost: (_e = value.usage.cost.output_tokens_cost) != null ? _e : null,\n requestCost: (_f = value.usage.cost.request_cost) != null ? _f : null,\n totalCost: (_g = value.usage.cost.total_cost) != null ? _g : null\n } : null;\n }\n if (value.images != null) {\n providerMetadata.perplexity.images = value.images.map((image) => ({\n imageUrl: image.image_url,\n originUrl: image.origin_url,\n height: image.height,\n width: image.width\n }));\n }\n const choice = value.choices[0];\n if ((choice == null ? void 0 : choice.finish_reason) != null) {\n finishReason = {\n unified: mapPerplexityFinishReason(choice.finish_reason),\n raw: choice.finish_reason\n };\n }\n if ((choice == null ? void 0 : choice.delta) == null) {\n return;\n }\n const delta = choice.delta;\n const textContent = delta.content;\n if (textContent != null) {\n if (!isActive) {\n controller.enqueue({ type: \"text-start\", id: \"0\" });\n isActive = true;\n }\n controller.enqueue({\n type: \"text-delta\",\n id: \"0\",\n delta: textContent\n });\n }\n },\n flush(controller) {\n if (isActive) {\n controller.enqueue({ type: \"text-end\", id: \"0\" });\n }\n controller.enqueue({\n type: \"finish\",\n finishReason,\n usage: convertPerplexityUsage(usage),\n providerMetadata\n });\n }\n })\n ),\n request: { body },\n response: { headers: responseHeaders }\n };\n }\n};\nfunction getResponseMetadata({\n id,\n model,\n created\n}) {\n return {\n id,\n modelId: model,\n timestamp: new Date(created * 1e3)\n };\n}\nvar perplexityCostSchema = z.object({\n input_tokens_cost: z.number().nullish(),\n output_tokens_cost: z.number().nullish(),\n request_cost: z.number().nullish(),\n total_cost: z.number().nullish()\n});\nvar perplexityUsageSchema = z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number().nullish(),\n citation_tokens: z.number().nullish(),\n num_search_queries: z.number().nullish(),\n reasoning_tokens: z.number().nullish(),\n cost: perplexityCostSchema.nullish()\n});\nvar perplexityImageSchema = z.object({\n image_url: z.string(),\n origin_url: z.string(),\n height: z.number(),\n width: z.number()\n});\nvar perplexityResponseSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n message: z.object({\n role: z.literal(\"assistant\"),\n content: z.string()\n }),\n finish_reason: z.string().nullish()\n })\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish()\n});\nvar perplexityChunkSchema = z.object({\n id: z.string(),\n created: z.number(),\n model: z.string(),\n choices: z.array(\n z.object({\n delta: z.object({\n role: z.literal(\"assistant\"),\n content: z.string()\n }),\n finish_reason: z.string().nullish()\n })\n ),\n citations: z.array(z.string()).nullish(),\n images: z.array(perplexityImageSchema).nullish(),\n usage: perplexityUsageSchema.nullish()\n});\nvar perplexityErrorSchema = z.object({\n error: z.object({\n code: z.number(),\n message: z.string().nullish(),\n type: z.string().nullish()\n })\n});\nvar errorToMessage = (data) => {\n var _a, _b;\n return (_b = (_a = data.error.message) != null ? _a : data.error.type) != null ? _b : \"unknown error\";\n};\n\n// src/version.ts\nvar VERSION = true ? \"3.0.26\" : \"0.0.0-test\";\n\n// src/perplexity-provider.ts\nfunction createPerplexity(options = {}) {\n const getHeaders = () => withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: \"PERPLEXITY_API_KEY\",\n description: \"Perplexity\"\n })}`,\n ...options.headers\n },\n `ai-sdk/perplexity/${VERSION}`\n );\n const createLanguageModel = (modelId) => {\n var _a;\n return new PerplexityLanguageModel(modelId, {\n baseURL: withoutTrailingSlash(\n (_a = options.baseURL) != null ? _a : \"https://api.perplexity.ai\"\n ),\n headers: getHeaders,\n generateId,\n fetch: options.fetch\n });\n };\n const provider = (modelId) => createLanguageModel(modelId);\n provider.specificationVersion = \"v3\";\n provider.languageModel = createLanguageModel;\n provider.embeddingModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"embeddingModel\" });\n };\n provider.textEmbeddingModel = provider.embeddingModel;\n provider.imageModel = (modelId) => {\n throw new NoSuchModelError({ modelId, modelType: \"imageModel\" });\n };\n return provider;\n}\nvar perplexity = createPerplexity();\nexport {\n VERSION,\n createPerplexity,\n perplexity\n};\n//# sourceMappingURL=index.mjs.map" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "9DF2C95073FF321B64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../ai/src/protocols/utils/image-input.ts"], | ||
| "sourcesContent": [ | ||
| "import { Effect, Encoding } from \"effect\"\nimport type { ImageInput } from \"../../image\"\nimport { InvalidRequestReason, LLMError } from \"../../schema\"\n\nconst invalid = (module: string, message: string) =>\n new LLMError({\n module,\n method: \"generate\",\n reason: new InvalidRequestReason({ message }),\n })\n\nexport const dataUrl = (input: Extract<ImageInput, { readonly type: \"bytes\" }>) =>\n `data:${input.mediaType};base64,${Encoding.encodeBase64(input.data)}`\n\nexport const decodeDataUrl = (\n url: string,\n module: string,\n): Effect.Effect<{ readonly mediaType: string; readonly data: Uint8Array } | undefined, LLMError> => {\n if (!url.startsWith(\"data:\")) return Effect.succeed(undefined)\n const match = /^data:([^;,]+);base64,(.*)$/s.exec(url)\n if (!match) return Effect.fail(invalid(module, \"Image data URLs must contain a MIME type and base64 data\"))\n return Effect.fromResult(Encoding.decodeBase64(match[2])).pipe(\n Effect.mapError(() => invalid(module, \"Image data URL contains invalid base64 data\")),\n Effect.map((data) => ({ mediaType: match[1], data })),\n )\n}\n\nexport const invalidImageInput = invalid\n\nexport const ImageInputs = {\n dataUrl,\n decodeDataUrl,\n invalid: invalidImageInput,\n} as const\n" | ||
| ], | ||
| "mappings": ";mHAIA,SAAM,EAAU,CAAC,EAAgB,IAC/B,IAAI,EAAS,CACX,SACA,OAAQ,WACR,OAAQ,IAAI,EAAqB,CAAE,SAAQ,CAAC,CAC9C,CAAC,EAEU,EAAU,CAAC,IACtB,QAAQ,EAAM,oBAAoB,EAAS,aAAa,EAAM,IAAI,IAEvD,EAAgB,CAC3B,EACA,IACmG,CACnG,GAAI,CAAC,EAAI,WAAW,OAAO,EAAG,OAAO,EAAO,QAAQ,MAAS,EAC7D,IAAM,EAAQ,+BAA+B,KAAK,CAAG,EACrD,GAAI,CAAC,EAAO,OAAO,EAAO,KAAK,EAAQ,EAAQ,0DAA0D,CAAC,EAC1G,OAAO,EAAO,WAAW,EAAS,aAAa,EAAM,EAAE,CAAC,EAAE,KACxD,EAAO,SAAS,IAAM,EAAQ,EAAQ,6CAA6C,CAAC,EACpF,EAAO,IAAI,CAAC,KAAU,CAAE,UAAW,EAAM,GAAI,MAAK,EAAE,CACtD,GAGW,EAAoB,EAEpB,EAAc,CACzB,UACA,gBACA,QAAS,CACX", | ||
| "debugId": "C69587ED6A41C60564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["../core/src/database/migration/20260707120000_migrate_prelaunch_v2_state.ts"], | ||
| "sourcesContent": [ | ||
| "import { sql } from \"drizzle-orm\"\nimport { Effect, Schema } from \"effect\"\nimport type { DatabaseMigration } from \"../migration\"\n\nconst decodeJson = Schema.decodeUnknownSync(Schema.UnknownFromJsonString)\nconst isObject = Schema.is(Schema.Record(Schema.String, Schema.Unknown))\n\nexport default {\n id: \"20260707120000_migrate_prelaunch_v2_state\",\n up(tx) {\n return Effect.gen(function* () {\n yield* tx.run(\n sql`DELETE FROM session_message WHERE type = 'compaction' AND json_extract(data, '$.status') = 'queued'`,\n )\n const messages = yield* tx.all<{ id: string; type: string; data: string }>(\n sql`SELECT id, type, data FROM session_message WHERE type IN ('skill', 'shell', 'assistant', 'compaction', 'synthetic')`,\n )\n for (const row of messages) {\n const data = object(decodeJson(row.data))\n yield* tx.run(\n sql`UPDATE session_message SET data = ${JSON.stringify(messageData(row.type, data))} WHERE id = ${row.id}`,\n )\n }\n\n yield* tx.run(sql`DELETE FROM event WHERE type = 'session.compaction.delta.1'`)\n const events = yield* tx.all<{ id: string; aggregateID: string; seq: number; type: string; data: string }>(sql`\n SELECT id, aggregate_id as aggregateID, seq, type, data\n FROM event\n WHERE type IN (\n 'session.skill.activated.1',\n 'session.skill.activated.2',\n 'session.compaction.started.1',\n 'session.compaction.started.2',\n 'session.compaction.ended.1',\n 'session.compaction.failed.1',\n 'session.compaction.failed.2',\n 'session.revert.staged.1',\n 'session.revert.staged.2'\n )\n ORDER BY aggregate_id, seq\n `)\n const compactionReasons = new Map<string, \"auto\" | \"manual\">()\n for (const row of events) {\n const data = object(decodeJson(row.data))\n if (row.type.startsWith(\"session.compaction.ended.\")) {\n compactionReasons.delete(row.aggregateID)\n continue\n }\n const event = eventData(row.type, data, compactionReasons.get(row.aggregateID))\n if (row.type.startsWith(\"session.compaction.started.\"))\n compactionReasons.set(row.aggregateID, event.data.reason === \"auto\" ? \"auto\" : \"manual\")\n if (row.type.startsWith(\"session.compaction.failed.\")) compactionReasons.delete(row.aggregateID)\n yield* tx.run(\n sql`UPDATE event SET type = ${event.type}, data = ${JSON.stringify(event.data)} WHERE id = ${row.id}`,\n )\n }\n })\n },\n} satisfies DatabaseMigration.Migration\n\nfunction messageData(type: string, data: Record<string, unknown>) {\n if (type === \"skill\")\n return defined({\n metadata: data.metadata,\n time: data.time,\n skill: data.skill ?? data.id ?? data.name,\n name: data.name,\n text: data.text,\n })\n if (type === \"shell\") {\n const shell = object(data.shell)\n return defined({\n metadata: data.metadata,\n time: data.time,\n shellID: data.shellID ?? shell.id,\n command: data.command ?? shell.command,\n status: data.status ?? shell.status,\n exit: data.exit ?? shell.exit,\n output: data.output,\n })\n }\n if (type === \"assistant\")\n return defined({\n metadata: data.metadata,\n time: data.time,\n agent: data.agent,\n model: data.model,\n content: Array.isArray(data.content) ? data.content.map(assistantContent) : data.content,\n snapshot: data.snapshot,\n finish: data.finish,\n cost: data.cost,\n tokens: data.tokens,\n error: data.error,\n retry: data.retry,\n })\n if (type === \"compaction\") {\n if (data.status === \"failed\")\n return defined({\n metadata: data.metadata,\n time: data.time,\n status: data.status,\n reason: data.reason,\n error: data.error ?? genericCompactionError,\n })\n return defined({\n metadata: data.metadata,\n time: data.time,\n status: data.status,\n reason: data.reason,\n summary: data.summary,\n recent: data.recent,\n })\n }\n if (type === \"synthetic\")\n return defined({ metadata: data.metadata, time: data.time, text: data.text, description: data.description })\n const { sessionID: _, ...current } = data\n return current\n}\n\nfunction assistantContent(value: unknown) {\n const content = object(value)\n if (content.type === \"text\") return defined({ type: content.type, text: content.text })\n if (content.type === \"reasoning\")\n return defined({ type: content.type, text: content.text, state: content.state, time: content.time })\n if (content.type !== \"tool\") return content\n return defined({\n type: content.type,\n id: content.id,\n name: content.name,\n executed: content.executed,\n providerState: content.providerState,\n providerResultState: content.providerResultState,\n state: toolState(content.state),\n time: content.time,\n })\n}\n\nfunction toolState(value: unknown) {\n const state = object(value)\n if (state.status === \"pending\" || state.status === \"streaming\")\n return defined({ status: \"streaming\", input: state.input })\n if (state.status === \"running\")\n return defined({ status: state.status, input: state.input, structured: state.structured, content: state.content })\n if (state.status === \"completed\")\n return defined({\n status: state.status,\n input: state.input,\n structured: state.structured,\n content: state.content,\n result: state.result,\n })\n if (state.status === \"error\")\n return defined({\n status: state.status,\n input: state.input,\n structured: state.structured,\n content: state.content,\n error: state.error,\n result: state.result,\n })\n return state\n}\n\nfunction eventData(type: string, data: Record<string, unknown>, compactionReason?: \"auto\" | \"manual\") {\n if (type.startsWith(\"session.skill.activated.\"))\n return {\n type: \"session.skill.activated.1\",\n data: defined({ sessionID: data.sessionID, id: data.id ?? data.name, name: data.name, text: data.text }),\n }\n if (type.startsWith(\"session.compaction.started.\"))\n return {\n type: \"session.compaction.started.1\",\n data: defined({\n sessionID: data.sessionID,\n reason: data.reason,\n recent: data.recent ?? \"\",\n inputID: data.inputID,\n }),\n }\n if (type.startsWith(\"session.compaction.failed.\"))\n return {\n type: \"session.compaction.failed.1\",\n data: defined({\n sessionID: data.sessionID,\n reason: data.reason ?? compactionReason ?? \"manual\",\n error: data.error ?? genericCompactionError,\n inputID: data.inputID,\n }),\n }\n const revert = object(data.revert)\n return {\n type: \"session.revert.staged.1\",\n data: defined({\n sessionID: data.sessionID,\n revert: defined({\n messageID: revert.messageID,\n partID: revert.partID,\n snapshot: revert.snapshot,\n files: Array.isArray(revert.files)\n ? revert.files.map((value) => {\n const file = object(value)\n return defined({\n file: file.file ?? file.path,\n patch: file.patch,\n additions: file.additions,\n deletions: file.deletions,\n status: file.status,\n })\n })\n : undefined,\n }),\n }),\n }\n}\n\nconst genericCompactionError = {\n type: \"compaction.failed\",\n message: \"Compaction failed before recording an error\",\n}\n\nfunction object(value: unknown): Record<string, unknown> {\n return isObject(value) ? value : {}\n}\n\nfunction defined(value: Record<string, unknown>) {\n return Object.fromEntries(Object.entries(value).filter((entry) => entry[1] !== undefined))\n}\n" | ||
| ], | ||
| "mappings": ";+KAIA,SAAM,OAAa,OAAO,kBAAkB,EAAO,qBAAqB,EAClE,EAAW,EAAO,GAAG,EAAO,OAAO,EAAO,OAAQ,EAAO,OAAO,CAAC,EAExD,GACb,GAAI,4CACJ,EAAE,CAAC,EAAI,CACL,OAAO,EAAO,IAAI,SAAU,EAAG,CAC7B,MAAO,EAAG,IACR,sGACF,EACA,IAAM,EAAW,MAAO,EAAG,IACzB,sHACF,EACA,QAAW,KAAO,EAAU,CAC1B,IAAM,EAAO,EAAO,EAAW,EAAI,IAAI,CAAC,EACxC,MAAO,EAAG,IACR,sCAAwC,KAAK,UAAU,EAAY,EAAI,KAAM,CAAI,CAAC,gBAAgB,EAAI,IACxG,EAGF,MAAO,EAAG,IAAI,8DAAgE,EAC9E,IAAM,EAAS,MAAO,EAAG,IAAkF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAe1G,EACK,EAAoB,IAAI,IAC9B,QAAW,KAAO,EAAQ,CACxB,IAAM,EAAO,EAAO,EAAW,EAAI,IAAI,CAAC,EACxC,GAAI,EAAI,KAAK,WAAW,2BAA2B,EAAG,CACpD,EAAkB,OAAO,EAAI,WAAW,EACxC,SAEF,IAAM,EAAQ,EAAU,EAAI,KAAM,EAAM,EAAkB,IAAI,EAAI,WAAW,CAAC,EAC9E,GAAI,EAAI,KAAK,WAAW,6BAA6B,EACnD,EAAkB,IAAI,EAAI,YAAa,EAAM,KAAK,SAAW,OAAS,OAAS,QAAQ,EACzF,GAAI,EAAI,KAAK,WAAW,4BAA4B,EAAG,EAAkB,OAAO,EAAI,WAAW,EAC/F,MAAO,EAAG,IACR,4BAA8B,EAAM,gBAAgB,KAAK,UAAU,EAAM,IAAI,gBAAgB,EAAI,IACnG,GAEH,EAEL,EAEA,SAAS,CAAW,CAAC,EAAc,EAA+B,CAChE,GAAI,IAAS,QACX,OAAO,EAAQ,CACb,SAAU,EAAK,SACf,KAAM,EAAK,KACX,MAAO,EAAK,OAAS,EAAK,IAAM,EAAK,KACrC,KAAM,EAAK,KACX,KAAM,EAAK,IACb,CAAC,EACH,GAAI,IAAS,QAAS,CACpB,IAAM,EAAQ,EAAO,EAAK,KAAK,EAC/B,OAAO,EAAQ,CACb,SAAU,EAAK,SACf,KAAM,EAAK,KACX,QAAS,EAAK,SAAW,EAAM,GAC/B,QAAS,EAAK,SAAW,EAAM,QAC/B,OAAQ,EAAK,QAAU,EAAM,OAC7B,KAAM,EAAK,MAAQ,EAAM,KACzB,OAAQ,EAAK,MACf,CAAC,EAEH,GAAI,IAAS,YACX,OAAO,EAAQ,CACb,SAAU,EAAK,SACf,KAAM,EAAK,KACX,MAAO,EAAK,MACZ,MAAO,EAAK,MACZ,QAAS,MAAM,QAAQ,EAAK,OAAO,EAAI,EAAK,QAAQ,IAAI,CAAgB,EAAI,EAAK,QACjF,SAAU,EAAK,SACf,OAAQ,EAAK,OACb,KAAM,EAAK,KACX,OAAQ,EAAK,OACb,MAAO,EAAK,MACZ,MAAO,EAAK,KACd,CAAC,EACH,GAAI,IAAS,aAAc,CACzB,GAAI,EAAK,SAAW,SAClB,OAAO,EAAQ,CACb,SAAU,EAAK,SACf,KAAM,EAAK,KACX,OAAQ,EAAK,OACb,OAAQ,EAAK,OACb,MAAO,EAAK,OAAS,CACvB,CAAC,EACH,OAAO,EAAQ,CACb,SAAU,EAAK,SACf,KAAM,EAAK,KACX,OAAQ,EAAK,OACb,OAAQ,EAAK,OACb,QAAS,EAAK,QACd,OAAQ,EAAK,MACf,CAAC,EAEH,GAAI,IAAS,YACX,OAAO,EAAQ,CAAE,SAAU,EAAK,SAAU,KAAM,EAAK,KAAM,KAAM,EAAK,KAAM,YAAa,EAAK,WAAY,CAAC,EAC7G,IAAQ,UAAW,KAAM,GAAY,EACrC,OAAO,EAGT,SAAS,CAAgB,CAAC,EAAgB,CACxC,IAAM,EAAU,EAAO,CAAK,EAC5B,GAAI,EAAQ,OAAS,OAAQ,OAAO,EAAQ,CAAE,KAAM,EAAQ,KAAM,KAAM,EAAQ,IAAK,CAAC,EACtF,GAAI,EAAQ,OAAS,YACnB,OAAO,EAAQ,CAAE,KAAM,EAAQ,KAAM,KAAM,EAAQ,KAAM,MAAO,EAAQ,MAAO,KAAM,EAAQ,IAAK,CAAC,EACrG,GAAI,EAAQ,OAAS,OAAQ,OAAO,EACpC,OAAO,EAAQ,CACb,KAAM,EAAQ,KACd,GAAI,EAAQ,GACZ,KAAM,EAAQ,KACd,SAAU,EAAQ,SAClB,cAAe,EAAQ,cACvB,oBAAqB,EAAQ,oBAC7B,MAAO,EAAU,EAAQ,KAAK,EAC9B,KAAM,EAAQ,IAChB,CAAC,EAGH,SAAS,CAAS,CAAC,EAAgB,CACjC,IAAM,EAAQ,EAAO,CAAK,EAC1B,GAAI,EAAM,SAAW,WAAa,EAAM,SAAW,YACjD,OAAO,EAAQ,CAAE,OAAQ,YAAa,MAAO,EAAM,KAAM,CAAC,EAC5D,GAAI,EAAM,SAAW,UACnB,OAAO,EAAQ,CAAE,OAAQ,EAAM,OAAQ,MAAO,EAAM,MAAO,WAAY,EAAM,WAAY,QAAS,EAAM,OAAQ,CAAC,EACnH,GAAI,EAAM,SAAW,YACnB,OAAO,EAAQ,CACb,OAAQ,EAAM,OACd,MAAO,EAAM,MACb,WAAY,EAAM,WAClB,QAAS,EAAM,QACf,OAAQ,EAAM,MAChB,CAAC,EACH,GAAI,EAAM,SAAW,QACnB,OAAO,EAAQ,CACb,OAAQ,EAAM,OACd,MAAO,EAAM,MACb,WAAY,EAAM,WAClB,QAAS,EAAM,QACf,MAAO,EAAM,MACb,OAAQ,EAAM,MAChB,CAAC,EACH,OAAO,EAGT,SAAS,CAAS,CAAC,EAAc,EAA+B,EAAsC,CACpG,GAAI,EAAK,WAAW,0BAA0B,EAC5C,MAAO,CACL,KAAM,4BACN,KAAM,EAAQ,CAAE,UAAW,EAAK,UAAW,GAAI,EAAK,IAAM,EAAK,KAAM,KAAM,EAAK,KAAM,KAAM,EAAK,IAAK,CAAC,CACzG,EACF,GAAI,EAAK,WAAW,6BAA6B,EAC/C,MAAO,CACL,KAAM,+BACN,KAAM,EAAQ,CACZ,UAAW,EAAK,UAChB,OAAQ,EAAK,OACb,OAAQ,EAAK,QAAU,GACvB,QAAS,EAAK,OAChB,CAAC,CACH,EACF,GAAI,EAAK,WAAW,4BAA4B,EAC9C,MAAO,CACL,KAAM,8BACN,KAAM,EAAQ,CACZ,UAAW,EAAK,UAChB,OAAQ,EAAK,QAAU,GAAoB,SAC3C,MAAO,EAAK,OAAS,EACrB,QAAS,EAAK,OAChB,CAAC,CACH,EACF,IAAM,EAAS,EAAO,EAAK,MAAM,EACjC,MAAO,CACL,KAAM,0BACN,KAAM,EAAQ,CACZ,UAAW,EAAK,UAChB,OAAQ,EAAQ,CACd,UAAW,EAAO,UAClB,OAAQ,EAAO,OACf,SAAU,EAAO,SACjB,MAAO,MAAM,QAAQ,EAAO,KAAK,EAC7B,EAAO,MAAM,IAAI,CAAC,IAAU,CAC1B,IAAM,EAAO,EAAO,CAAK,EACzB,OAAO,EAAQ,CACb,KAAM,EAAK,MAAQ,EAAK,KACxB,MAAO,EAAK,MACZ,UAAW,EAAK,UAChB,UAAW,EAAK,UAChB,OAAQ,EAAK,MACf,CAAC,EACF,EACD,MACN,CAAC,CACH,CAAC,CACH,EAGF,IAAM,EAAyB,CAC7B,KAAM,oBACN,QAAS,6CACX,EAEA,SAAS,CAAM,CAAC,EAAyC,CACvD,OAAO,EAAS,CAAK,EAAI,EAAQ,CAAC,EAGpC,SAAS,CAAO,CAAC,EAAgC,CAC/C,OAAO,OAAO,YAAY,OAAO,QAAQ,CAAK,EAAE,OAAO,CAAC,IAAU,EAAM,KAAO,MAAS,CAAC", | ||
| "debugId": "69C4A4DC5E09546F64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "570C86F3055AC8BA64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/auth.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport { Effect } from \"effect\"\nimport {\n OpenCode,\n type IntegrationAttemptStatus,\n type IntegrationOAuthMethod,\n type OpenCodeClient,\n} from \"@opencode-ai/client\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { Service } from \"@opencode-ai/client/effect/service\"\nimport { ServiceConfig } from \"../../../services/service-config\"\nimport { resolveIntegration } from \"./resolve\"\n\nconst location = { directory: process.cwd() }\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.auth,\n Effect.fn(\"cli.mcp.auth\")(function* (input) {\n const options = yield* ServiceConfig.options()\n const found = yield* Service.discover(options)\n const endpoint = found ?? (yield* Service.ensure(options))\n const client = OpenCode.make({ baseUrl: endpoint.url, headers: Service.headers(endpoint) })\n\n const integration = yield* resolveIntegration(client, input.name, location)\n if (!integration)\n return yield* Effect.fail(new Error(`MCP server \"${input.name}\" is not an OAuth-capable remote server`))\n const method = integration.methods.find(\n (candidate): candidate is IntegrationOAuthMethod => candidate.type === \"oauth\",\n )\n if (!method)\n return yield* Effect.fail(new Error(`MCP server \"${input.name}\" is not an OAuth-capable remote server`))\n\n const started = yield* Effect.promise(() =>\n client.integration.oauth.connect({ integrationID: integration.id, methodID: method.id, inputs: {}, location }),\n )\n const attempt = started.data\n if (attempt.mode === \"code\")\n return yield* Effect.fail(new Error(\"This server requires manual code entry, which the CLI does not support\"))\n\n process.stdout.write(attempt.instructions + EOL + attempt.url + EOL)\n\n const result = yield* poll(client, integration.id, attempt.attemptID)\n if (result.status === \"complete\") {\n process.stdout.write(`Authenticated with ${input.name}` + EOL)\n return\n }\n const reason = result.status === \"failed\" ? `: ${result.message}` : \"\"\n return yield* Effect.fail(new Error(`Authentication ${result.status}${reason}`))\n }),\n)\n\nconst poll = (\n client: OpenCodeClient,\n integrationID: string,\n attemptID: string,\n): Effect.Effect<Exclude<IntegrationAttemptStatus, { status: \"pending\" }>> =>\n Effect.gen(function* () {\n const status = yield* Effect.promise(() =>\n client.integration.oauth.status({ integrationID, attemptID, location }),\n ).pipe(Effect.map((result) => result.data))\n if (status.status === \"pending\") {\n yield* Effect.sleep(\"1 second\")\n return yield* poll(client, integrationID, attemptID)\n }\n return status\n })\n" | ||
| ], | ||
| "mappings": ";66BAAA,mBAAS,gBAcT,SAAM,OAAW,MAAE,eAAW,aAAQ,SAAI,MAAE,OAE7B,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,UAC/B,OAAO,QAAG,mBAAc,OAAE,cAAU,MAAC,OAAO,CAC1C,IAAM,EAAU,MAAO,EAAc,QAAQ,EAEvC,GADQ,MAAO,EAAQ,SAAS,CAAO,KAClB,MAAO,EAAQ,OAAO,CAAO,GAClD,EAAS,EAAS,KAAK,CAAE,QAAS,EAAS,IAAK,QAAS,EAAQ,QAAQ,CAAQ,CAAE,CAAC,EAEpF,EAAc,MAAO,EAAmB,EAAQ,EAAM,KAAM,CAAQ,EAC1E,GAAI,CAAC,EACH,OAAO,MAAO,EAAO,KAAS,MAAM,eAAe,EAAM,6CAA6C,CAAC,EACzG,IAAM,EAAS,EAAY,QAAQ,KACjC,CAAC,IAAmD,EAAU,OAAS,OACzE,EACA,GAAI,CAAC,EACH,OAAO,MAAO,EAAO,KAAS,MAAM,eAAe,EAAM,6CAA6C,CAAC,EAKzG,IAAM,GAHU,MAAO,EAAO,QAAQ,IACpC,EAAO,YAAY,MAAM,QAAQ,CAAE,cAAe,EAAY,GAAI,SAAU,EAAO,GAAI,OAAQ,CAAC,EAAG,UAAS,CAAC,CAC/G,GACwB,KACxB,GAAI,EAAQ,OAAS,OACnB,OAAO,MAAO,EAAO,KAAS,MAAM,wEAAwE,CAAC,EAE/G,QAAQ,OAAO,MAAM,EAAQ,aAAe,EAAM,EAAQ,IAAM,CAAG,EAEnE,IAAM,EAAS,MAAO,EAAK,EAAQ,EAAY,GAAI,EAAQ,SAAS,EACpE,GAAI,EAAO,SAAW,WAAY,CAChC,QAAQ,OAAO,MAAM,sBAAsB,EAAM,OAAS,CAAG,EAC7D,OAEF,IAAM,EAAS,EAAO,SAAW,SAAW,KAAK,EAAO,UAAY,GACpE,OAAO,MAAO,EAAO,KAAS,MAAM,kBAAkB,EAAO,SAAS,GAAQ,CAAC,EAChF,CACH,EAEM,EAAO,CACX,EACA,EACA,IAEA,EAAO,IAAI,SAAU,EAAG,CACtB,IAAM,EAAS,MAAO,EAAO,QAAQ,IACnC,EAAO,YAAY,MAAM,OAAO,CAAE,gBAAe,YAAW,UAAS,CAAC,CACxE,EAAE,KAAK,EAAO,IAAI,CAAC,IAAW,EAAO,IAAI,CAAC,EAC1C,GAAI,EAAO,SAAW,UAEpB,OADA,MAAO,EAAO,MAAM,UAAU,EACvB,MAAO,EAAK,EAAQ,EAAe,CAAS,EAErD,OAAO,EACR", | ||
| "debugId": "4AFAC33AFBC7621364756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../tui/src/prompt/display.ts"], | ||
| "sourcesContent": [ | ||
| "import { stringWidth } from \"../util/string-width\"\n\nconst graphemes = new Intl.Segmenter(undefined, { granularity: \"grapheme\" })\n\nexport function promptOffsetWidth(value: string) {\n let width = 0\n for (const part of graphemes.segment(value)) {\n // Textarea offsets count newlines as one position; terminal width counts them as zero.\n width += part.segment === \"\\n\" ? 1 : stringWidth(part.segment)\n }\n return width\n}\n\nfunction displayOffsetIndex(value: string, offset: number) {\n if (offset <= 0) return 0\n\n let width = 0\n for (const part of graphemes.segment(value)) {\n const next = width + promptOffsetWidth(part.segment)\n if (next > offset) return part.index\n width = next\n }\n\n return value.length\n}\n\nexport function displaySlice(value: string, start = 0, end = promptOffsetWidth(value)) {\n return value.slice(displayOffsetIndex(value, start), displayOffsetIndex(value, end))\n}\n\nexport function displayCharAt(value: string, offset: number) {\n let width = 0\n for (const part of graphemes.segment(value)) {\n const next = width + promptOffsetWidth(part.segment)\n if (offset === width || offset < next) return part.segment\n width = next\n }\n}\n\nexport function mentionTriggerIndex(value: string, offset = promptOffsetWidth(value)) {\n const text = displaySlice(value, 0, offset)\n const index = text.lastIndexOf(\"@\")\n if (index === -1) return\n\n const before = index === 0 ? undefined : text[index - 1]\n const query = text.slice(index)\n if ((before === undefined || /\\s/.test(before)) && !/\\s/.test(query)) {\n return promptOffsetWidth(text.slice(0, index))\n }\n}\n" | ||
| ], | ||
| "mappings": ";oDAEA,IAAM,EAAY,IAAI,KAAK,UAAU,OAAW,CAAE,YAAa,UAAW,CAAC,EAEpE,SAAS,CAAiB,CAAC,EAAe,CAC/C,IAAI,EAAQ,EACZ,QAAW,KAAQ,EAAU,QAAQ,CAAK,EAExC,GAAS,EAAK,UAAY;AAAA,EAAO,EAAI,EAAY,EAAK,OAAO,EAE/D,OAAO,EAGT,SAAS,CAAkB,CAAC,EAAe,EAAgB,CACzD,GAAI,GAAU,EAAG,MAAO,GAExB,IAAI,EAAQ,EACZ,QAAW,KAAQ,EAAU,QAAQ,CAAK,EAAG,CAC3C,IAAM,EAAO,EAAQ,EAAkB,EAAK,OAAO,EACnD,GAAI,EAAO,EAAQ,OAAO,EAAK,MAC/B,EAAQ,EAGV,OAAO,EAAM,OAGR,SAAS,CAAY,CAAC,EAAe,EAAQ,EAAG,EAAM,EAAkB,CAAK,EAAG,CACrF,OAAO,EAAM,MAAM,EAAmB,EAAO,CAAK,EAAG,EAAmB,EAAO,CAAG,CAAC,EAG9E,SAAS,CAAa,CAAC,EAAe,EAAgB,CAC3D,IAAI,EAAQ,EACZ,QAAW,KAAQ,EAAU,QAAQ,CAAK,EAAG,CAC3C,IAAM,EAAO,EAAQ,EAAkB,EAAK,OAAO,EACnD,GAAI,IAAW,GAAS,EAAS,EAAM,OAAO,EAAK,QACnD,EAAQ,GAIL,SAAS,CAAmB,CAAC,EAAe,EAAS,EAAkB,CAAK,EAAG,CACpF,IAAM,EAAO,EAAa,EAAO,EAAG,CAAM,EACpC,EAAQ,EAAK,YAAY,GAAG,EAClC,GAAI,IAAU,GAAI,OAElB,IAAM,EAAS,IAAU,EAAI,OAAY,EAAK,EAAQ,GAChD,EAAQ,EAAK,MAAM,CAAK,EAC9B,IAAK,IAAW,QAAa,KAAK,KAAK,CAAM,IAAM,CAAC,KAAK,KAAK,CAAK,EACjE,OAAO,EAAkB,EAAK,MAAM,EAAG,CAAK,CAAC", | ||
| "debugId": "8136F6B8BBCBD30E64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "B09FDC594B6B0A6664756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/service/get.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"os\"\nimport { Effect, Option } from \"effect\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\nimport { ServiceConfig } from \"../../../services/service-config\"\n\nexport default Runtime.handler(\n Commands.commands.service.commands.get,\n Effect.fn(\"cli.service.get\")(function* (input) {\n process.stdout.write((yield* ServiceConfig.get(Option.getOrUndefined(input.key))) + EOL)\n }),\n)\n" | ||
| ], | ||
| "mappings": ";00BAAA,mBAAS,gBAMT,SAAe,SAAQ,aACrB,OAAS,cAAS,aAAQ,cAAS,SACnC,OAAO,QAAG,sBAAiB,OAAE,cAAU,MAAC,OAAO,MAC7C,aAAQ,YAAO,YAAO,WAAO,EAAc,IAAI,EAAO,eAAe,EAAM,GAAG,CAAC,GAAK,CAAG,EACxF,CACH", | ||
| "debugId": "7304B14AAA300C5564756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/commands/handlers/mcp/add.ts"], | ||
| "sourcesContent": [ | ||
| "import { EOL } from \"node:os\"\nimport path from \"node:path\"\nimport { readFile, stat, writeFile } from \"node:fs/promises\"\nimport { Effect, Option } from \"effect\"\nimport { applyEdits, modify } from \"jsonc-parser\"\nimport { Global } from \"@opencode-ai/util/global\"\nimport { Commands } from \"../../commands\"\nimport { Runtime } from \"../../../framework/runtime\"\n\nexport default Runtime.handler(\n Commands.commands.mcp.commands.add,\n Effect.fn(\"cli.mcp.add\")(function* (input) {\n const url = Option.getOrUndefined(input.url)\n const headers = Option.getOrUndefined(input.header)\n const environment = Option.getOrUndefined(input.env)\n // The CLI framework strands `--` operands on the root command, so read the local server command\n // straight from argv after `--`. This also lets the command carry its own flags (e.g. `npx -y`).\n const dash = process.argv.indexOf(\"--\")\n const command = dash === -1 ? [...input.command] : process.argv.slice(dash + 1)\n\n const hasCommand = command.length > 0\n if (url && hasCommand)\n return yield* Effect.fail(new Error(\"Provide either --url <url> or a command after --, not both\"))\n if (!url && !hasCommand) return yield* Effect.fail(new Error(\"Provide either --url <url> or a command after --\"))\n if (url && !URL.canParse(url)) return yield* Effect.fail(new Error(`Invalid URL: ${url}`))\n if (url && environment) return yield* Effect.fail(new Error(\"--env is only valid for local MCP servers\"))\n if (hasCommand && headers) return yield* Effect.fail(new Error(\"--header is only valid for remote MCP servers\"))\n\n const server = url\n ? { type: \"remote\" as const, url, ...(headers ? { headers } : {}) }\n : { type: \"local\" as const, command, ...(environment ? { environment } : {}) }\n\n const global = yield* Global.Service\n const configPath = yield* Effect.promise(() => resolveConfigPath(input.global ? global.config : process.cwd()))\n yield* Effect.promise(() => write(configPath, input.name, server))\n process.stdout.write(`MCP server \"${input.name}\" added to ${configPath}` + EOL)\n }),\n)\n\nexport async function resolveConfigPath(directory: string) {\n const candidates = [\n path.join(directory, \"opencode.json\"),\n path.join(directory, \"opencode.jsonc\"),\n path.join(directory, \".opencode\", \"opencode.json\"),\n path.join(directory, \".opencode\", \"opencode.jsonc\"),\n ]\n for (const candidate of candidates) {\n if (\n await stat(candidate).then(\n (info) => info.isFile(),\n () => false,\n )\n )\n return candidate\n }\n return candidates[0]\n}\n\nasync function write(configPath: string, name: string, server: unknown) {\n const text = await readFile(configPath, \"utf8\").catch((error) => {\n if (typeof error === \"object\" && error !== null && \"code\" in error && error.code === \"ENOENT\") return \"{}\"\n throw error\n })\n const edits = modify(text, [\"mcp\", \"servers\", name], server, {\n formattingOptions: { tabSize: 2, insertSpaces: true },\n })\n await writeFile(configPath, applyEdits(text, edits))\n}\n" | ||
| ], | ||
| "mappings": ";qrBAAA,mBAAS,gBACT,yBACA,wBAAS,eAAU,oBAAM,yBAOzB,SAAe,SAAQ,aACrB,OAAS,cAAS,SAAI,cAAS,SAC/B,OAAO,QAAG,aAAa,EAAE,SAAU,CAAC,EAAO,CACzC,IAAM,EAAM,EAAO,eAAe,EAAM,GAAG,EACrC,EAAU,EAAO,eAAe,EAAM,MAAM,EAC5C,EAAc,EAAO,eAAe,EAAM,GAAG,EAG7C,EAAO,QAAQ,KAAK,QAAQ,IAAI,EAChC,EAAU,IAAS,GAAK,CAAC,GAAG,EAAM,OAAO,EAAI,QAAQ,KAAK,MAAM,EAAO,CAAC,EAExE,EAAa,EAAQ,OAAS,EACpC,GAAI,GAAO,EACT,OAAO,MAAO,EAAO,KAAS,MAAM,4DAA4D,CAAC,EACnG,GAAI,CAAC,GAAO,CAAC,EAAY,OAAO,MAAO,EAAO,KAAS,MAAM,kDAAkD,CAAC,EAChH,GAAI,GAAO,CAAC,IAAI,SAAS,CAAG,EAAG,OAAO,MAAO,EAAO,KAAS,MAAM,gBAAgB,GAAK,CAAC,EACzF,GAAI,GAAO,EAAa,OAAO,MAAO,EAAO,KAAS,MAAM,2CAA2C,CAAC,EACxG,GAAI,GAAc,EAAS,OAAO,MAAO,EAAO,KAAS,MAAM,+CAA+C,CAAC,EAE/G,IAAM,EAAS,EACX,CAAE,KAAM,SAAmB,SAAS,EAAU,CAAE,SAAQ,EAAI,CAAC,CAAG,EAChE,CAAE,KAAM,QAAkB,aAAa,EAAc,CAAE,aAAY,EAAI,CAAC,CAAG,EAEzE,EAAS,MAAO,EAAO,QACvB,EAAa,MAAO,EAAO,QAAQ,IAAM,EAAkB,EAAM,OAAS,EAAO,OAAS,QAAQ,IAAI,CAAC,CAAC,EAC9G,MAAO,EAAO,QAAQ,IAAM,EAAM,EAAY,EAAM,KAAM,CAAM,CAAC,EACjE,QAAQ,OAAO,MAAM,eAAe,EAAM,kBAAkB,IAAe,CAAG,EAC/E,CACH,EAEA,eAAsB,CAAiB,CAAC,EAAmB,CACzD,IAAM,EAAa,CACjB,EAAK,KAAK,EAAW,eAAe,EACpC,EAAK,KAAK,EAAW,gBAAgB,EACrC,EAAK,KAAK,EAAW,YAAa,eAAe,EACjD,EAAK,KAAK,EAAW,YAAa,gBAAgB,CACpD,EACA,QAAW,KAAa,EACtB,GACE,MAAM,EAAK,CAAS,EAAE,KACpB,CAAC,IAAS,EAAK,OAAO,EACtB,IAAM,EACR,EAEA,OAAO,EAEX,OAAO,EAAW,GAGpB,eAAe,CAAK,CAAC,EAAoB,EAAc,EAAiB,CACtE,IAAM,EAAO,MAAM,EAAS,EAAY,MAAM,EAAE,MAAM,CAAC,IAAU,CAC/D,GAAI,OAAO,IAAU,UAAY,IAAU,MAAQ,SAAU,GAAS,EAAM,OAAS,SAAU,MAAO,KACtG,MAAM,EACP,EACK,EAAQ,EAAO,EAAM,CAAC,MAAO,UAAW,CAAI,EAAG,EAAQ,CAC3D,kBAAmB,CAAE,QAAS,EAAG,aAAc,EAAK,CACtD,CAAC,EACD,MAAM,EAAU,EAAY,EAAW,EAAM,CAAK,CAAC", | ||
| "debugId": "79D99B8EA88E111C64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
| { | ||
| "version": 3, | ||
| "sources": ["../../node_modules/.bun/fuzzysort@3.1.0/node_modules/fuzzysort/fuzzysort.js"], | ||
| "sourcesContent": [ | ||
| "// https://github.com/farzher/fuzzysort v3.0.2\r\n\r\n// UMD (Universal Module Definition) for fuzzysort\r\n;((root, UMD) => {\r\n if(typeof define === 'function' && define.amd) define([], UMD)\r\n else if(typeof module === 'object' && module.exports) module.exports = UMD()\r\n else root['fuzzysort'] = UMD()\r\n})(this, _ => {\r\n 'use strict'\r\n\r\n var single = (search, target) => {\r\n if(!search || !target) return NULL\r\n\r\n var preparedSearch = getPreparedSearch(search)\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n var searchBitflags = preparedSearch.bitflags\r\n if((searchBitflags & target._bitflags) !== searchBitflags) return NULL\r\n\r\n return algorithm(preparedSearch, target)\r\n }\r\n\r\n var go = (search, targets, options) => {\r\n if(!search) return options?.all ? all(targets, options) : noResults\r\n\r\n var preparedSearch = getPreparedSearch(search)\r\n var searchBitflags = preparedSearch.bitflags\r\n var containsSpace = preparedSearch.containsSpace\r\n\r\n var threshold = denormalizeScore( options?.threshold || 0 )\r\n var limit = options?.limit || INFINITY\r\n\r\n var resultsLen = 0; var limitedCount = 0\r\n var targetsLen = targets.length\r\n\r\n function push_result(result) {\r\n if(resultsLen < limit) { q.add(result); ++resultsLen }\r\n else {\r\n ++limitedCount\r\n if(result._score > q.peek()._score) q.replaceTop(result)\r\n }\r\n }\r\n\r\n // This code is copy/pasted 3 times for performance reasons [options.key, options.keys, no keys]\r\n\r\n // options.key\r\n if(options?.key) {\r\n var key = options.key\r\n for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n var target = getValue(obj, key)\r\n if(!target) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n var result = algorithm(preparedSearch, target)\r\n if(result === NULL) continue\r\n if(result._score < threshold) continue\r\n\r\n result.obj = obj\r\n push_result(result)\r\n }\r\n\r\n // options.keys\r\n } else if(options?.keys) {\r\n var keys = options.keys\r\n var keysLen = keys.length\r\n\r\n outer: for(var i = 0; i < targetsLen; ++i) { var obj = targets[i]\r\n\r\n { // early out based on bitflags\r\n var keysBitflags = 0\r\n for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n var key = keys[keyI]\r\n var target = getValue(obj, key)\r\n if(!target) { tmpTargets[keyI] = noTarget; continue }\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n tmpTargets[keyI] = target\r\n\r\n keysBitflags |= target._bitflags\r\n }\r\n\r\n if((searchBitflags & keysBitflags) !== searchBitflags) continue\r\n }\r\n\r\n if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) keysSpacesBestScores[i] = NEGATIVE_INFINITY\r\n\r\n for (var keyI = 0; keyI < keysLen; ++keyI) {\r\n target = tmpTargets[keyI]\r\n if(target === noTarget) { tmpResults[keyI] = noTarget; continue }\r\n\r\n tmpResults[keyI] = algorithm(preparedSearch, target, /*allowSpaces=*/false, /*allowPartialMatch=*/containsSpace)\r\n if(tmpResults[keyI] === NULL) { tmpResults[keyI] = noTarget; continue }\r\n\r\n // todo: this seems weird and wrong. like what if our first match wasn't good. this should just replace it instead of averaging with it\r\n // if our second match isn't good we ignore it instead of averaging with it\r\n if(containsSpace) for(let i=0; i<preparedSearch.spaceSearches.length; i++) {\r\n if(allowPartialMatchScores[i] > -1000) {\r\n if(keysSpacesBestScores[i] > NEGATIVE_INFINITY) {\r\n var tmp = (keysSpacesBestScores[i] + allowPartialMatchScores[i]) / 4/*bonus score for having multiple matches*/\r\n if(tmp > keysSpacesBestScores[i]) keysSpacesBestScores[i] = tmp\r\n }\r\n }\r\n if(allowPartialMatchScores[i] > keysSpacesBestScores[i]) keysSpacesBestScores[i] = allowPartialMatchScores[i]\r\n }\r\n }\r\n\r\n if(containsSpace) {\r\n for(let i=0; i<preparedSearch.spaceSearches.length; i++) { if(keysSpacesBestScores[i] === NEGATIVE_INFINITY) continue outer }\r\n } else {\r\n var hasAtLeast1Match = false\r\n for(let i=0; i < keysLen; i++) { if(tmpResults[i]._score !== NEGATIVE_INFINITY) { hasAtLeast1Match = true; break } }\r\n if(!hasAtLeast1Match) continue\r\n }\r\n\r\n var objResults = new KeysResult(keysLen)\r\n for(let i=0; i < keysLen; i++) { objResults[i] = tmpResults[i] }\r\n\r\n if(containsSpace) {\r\n var score = 0\r\n for(let i=0; i<preparedSearch.spaceSearches.length; i++) score += keysSpacesBestScores[i]\r\n } else {\r\n // todo could rewrite this scoring to be more similar to when there's spaces\r\n // if we match multiple keys give us bonus points\r\n var score = NEGATIVE_INFINITY\r\n for(let i=0; i<keysLen; i++) {\r\n var result = objResults[i]\r\n if(result._score > -1000) {\r\n if(score > NEGATIVE_INFINITY) {\r\n var tmp = (score + result._score) / 4/*bonus score for having multiple matches*/\r\n if(tmp > score) score = tmp\r\n }\r\n }\r\n if(result._score > score) score = result._score\r\n }\r\n }\r\n\r\n objResults.obj = obj\r\n objResults._score = score\r\n if(options?.scoreFn) {\r\n score = options.scoreFn(objResults)\r\n if(!score) continue\r\n score = denormalizeScore(score)\r\n objResults._score = score\r\n }\r\n\r\n if(score < threshold) continue\r\n push_result(objResults)\r\n }\r\n\r\n // no keys\r\n } else {\r\n for(var i = 0; i < targetsLen; ++i) { var target = targets[i]\r\n if(!target) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n\r\n if((searchBitflags & target._bitflags) !== searchBitflags) continue\r\n var result = algorithm(preparedSearch, target)\r\n if(result === NULL) continue\r\n if(result._score < threshold) continue\r\n\r\n push_result(result)\r\n }\r\n }\r\n\r\n if(resultsLen === 0) return noResults\r\n var results = new Array(resultsLen)\r\n for(var i = resultsLen - 1; i >= 0; --i) results[i] = q.poll()\r\n results.total = resultsLen + limitedCount\r\n return results\r\n }\r\n\r\n\r\n // this is written as 1 function instead of 2 for minification. perf seems fine ...\r\n // except when minified. the perf is very slow\r\n var highlight = (result, open='<b>', close='</b>') => {\r\n var callback = typeof open === 'function' ? open : undefined\r\n\r\n var target = result.target\r\n var targetLen = target.length\r\n var indexes = result.indexes\r\n var highlighted = ''\r\n var matchI = 0\r\n var indexesI = 0\r\n var opened = false\r\n var parts = []\r\n\r\n for(var i = 0; i < targetLen; ++i) { var char = target[i]\r\n if(indexes[indexesI] === i) {\r\n ++indexesI\r\n if(!opened) { opened = true\r\n if(callback) {\r\n parts.push(highlighted); highlighted = ''\r\n } else {\r\n highlighted += open\r\n }\r\n }\r\n\r\n if(indexesI === indexes.length) {\r\n if(callback) {\r\n highlighted += char\r\n parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n parts.push(target.substr(i+1))\r\n } else {\r\n highlighted += char + close + target.substr(i+1)\r\n }\r\n break\r\n }\r\n } else {\r\n if(opened) { opened = false\r\n if(callback) {\r\n parts.push(callback(highlighted, matchI++)); highlighted = ''\r\n } else {\r\n highlighted += close\r\n }\r\n }\r\n }\r\n highlighted += char\r\n }\r\n\r\n return callback ? parts : highlighted\r\n }\r\n\r\n\r\n var prepare = (target) => {\r\n if(typeof target === 'number') target = ''+target\r\n else if(typeof target !== 'string') target = ''\r\n var info = prepareLowerInfo(target)\r\n return new_result(target, {_targetLower:info._lower, _targetLowerCodes:info.lowerCodes, _bitflags:info.bitflags})\r\n }\r\n\r\n var cleanup = () => { preparedCache.clear(); preparedSearchCache.clear() }\r\n\r\n\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n // Below this point is only internal code\r\n\r\n\r\n class Result {\r\n get ['indexes']() { return this._indexes.slice(0, this._indexes.len).sort((a,b)=>a-b) }\r\n set ['indexes'](indexes) { return this._indexes = indexes }\r\n ['highlight'](open, close) { return highlight(this, open, close) }\r\n get ['score']() { return normalizeScore(this._score) }\r\n set ['score'](score) { this._score = denormalizeScore(score) }\r\n }\r\n\r\n class KeysResult extends Array {\r\n get ['score']() { return normalizeScore(this._score) }\r\n set ['score'](score) { this._score = denormalizeScore(score) }\r\n }\r\n\r\n var new_result = (target, options) => {\r\n const result = new Result()\r\n result['target'] = target\r\n result['obj'] = options.obj ?? NULL\r\n result._score = options._score ?? NEGATIVE_INFINITY\r\n result._indexes = options._indexes ?? []\r\n result._targetLower = options._targetLower ?? ''\r\n result._targetLowerCodes = options._targetLowerCodes ?? NULL\r\n result._nextBeginningIndexes = options._nextBeginningIndexes ?? NULL\r\n result._bitflags = options._bitflags ?? 0\r\n return result\r\n }\r\n\r\n\r\n var normalizeScore = score => {\r\n if(score === NEGATIVE_INFINITY) return 0\r\n if(score > 1) return score\r\n return Math.E ** ( ((-score + 1)**.04307 - 1) * -2)\r\n }\r\n var denormalizeScore = normalizedScore => {\r\n if(normalizedScore === 0) return NEGATIVE_INFINITY\r\n if(normalizedScore > 1) return normalizedScore\r\n return 1 - Math.pow((Math.log(normalizedScore) / -2 + 1), 1 / 0.04307)\r\n }\r\n\r\n\r\n var prepareSearch = (search) => {\r\n if(typeof search === 'number') search = ''+search\r\n else if(typeof search !== 'string') search = ''\r\n search = search.trim()\r\n var info = prepareLowerInfo(search)\r\n\r\n var spaceSearches = []\r\n if(info.containsSpace) {\r\n var searches = search.split(/\\s+/)\r\n searches = [...new Set(searches)] // distinct\r\n for(var i=0; i<searches.length; i++) {\r\n if(searches[i] === '') continue\r\n var _info = prepareLowerInfo(searches[i])\r\n spaceSearches.push({lowerCodes:_info.lowerCodes, _lower:searches[i].toLowerCase(), containsSpace:false})\r\n }\r\n }\r\n\r\n return {lowerCodes: info.lowerCodes, _lower: info._lower, containsSpace: info.containsSpace, bitflags: info.bitflags, spaceSearches: spaceSearches}\r\n }\r\n\r\n\r\n\r\n var getPrepared = (target) => {\r\n if(target.length > 999) return prepare(target) // don't cache huge targets\r\n var targetPrepared = preparedCache.get(target)\r\n if(targetPrepared !== undefined) return targetPrepared\r\n targetPrepared = prepare(target)\r\n preparedCache.set(target, targetPrepared)\r\n return targetPrepared\r\n }\r\n var getPreparedSearch = (search) => {\r\n if(search.length > 999) return prepareSearch(search) // don't cache huge searches\r\n var searchPrepared = preparedSearchCache.get(search)\r\n if(searchPrepared !== undefined) return searchPrepared\r\n searchPrepared = prepareSearch(search)\r\n preparedSearchCache.set(search, searchPrepared)\r\n return searchPrepared\r\n }\r\n\r\n\r\n var all = (targets, options) => {\r\n var results = []; results.total = targets.length // this total can be wrong if some targets are skipped\r\n\r\n var limit = options?.limit || INFINITY\r\n\r\n if(options?.key) {\r\n for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n var target = getValue(obj, options.key)\r\n if(target == NULL) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n var result = new_result(target.target, {_score: target._score, obj: obj})\r\n results.push(result); if(results.length >= limit) return results\r\n }\r\n } else if(options?.keys) {\r\n for(var i=0;i<targets.length;i++) { var obj = targets[i]\r\n var objResults = new KeysResult(options.keys.length)\r\n for (var keyI = options.keys.length - 1; keyI >= 0; --keyI) {\r\n var target = getValue(obj, options.keys[keyI])\r\n if(!target) { objResults[keyI] = noTarget; continue }\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n target._score = NEGATIVE_INFINITY\r\n target._indexes.len = 0\r\n objResults[keyI] = target\r\n }\r\n objResults.obj = obj\r\n objResults._score = NEGATIVE_INFINITY\r\n results.push(objResults); if(results.length >= limit) return results\r\n }\r\n } else {\r\n for(var i=0;i<targets.length;i++) { var target = targets[i]\r\n if(target == NULL) continue\r\n if(!isPrepared(target)) target = getPrepared(target)\r\n target._score = NEGATIVE_INFINITY\r\n target._indexes.len = 0\r\n results.push(target); if(results.length >= limit) return results\r\n }\r\n }\r\n\r\n return results\r\n }\r\n\r\n\r\n var algorithm = (preparedSearch, prepared, allowSpaces=false, allowPartialMatch=false) => {\r\n if(allowSpaces===false && preparedSearch.containsSpace) return algorithmSpaces(preparedSearch, prepared, allowPartialMatch)\r\n\r\n var searchLower = preparedSearch._lower\r\n var searchLowerCodes = preparedSearch.lowerCodes\r\n var searchLowerCode = searchLowerCodes[0]\r\n var targetLowerCodes = prepared._targetLowerCodes\r\n var searchLen = searchLowerCodes.length\r\n var targetLen = targetLowerCodes.length\r\n var searchI = 0 // where we at\r\n var targetI = 0 // where you at\r\n var matchesSimpleLen = 0\r\n\r\n // very basic fuzzy match; to remove non-matching targets ASAP!\r\n // walk through target. find sequential matches.\r\n // if all chars aren't found then exit\r\n for(;;) {\r\n var isMatch = searchLowerCode === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesSimple[matchesSimpleLen++] = targetI\r\n ++searchI; if(searchI === searchLen) break\r\n searchLowerCode = searchLowerCodes[searchI]\r\n }\r\n ++targetI; if(targetI >= targetLen) return NULL // Failed to find searchI\r\n }\r\n\r\n var searchI = 0\r\n var successStrict = false\r\n var matchesStrictLen = 0\r\n\r\n var nextBeginningIndexes = prepared._nextBeginningIndexes\r\n if(nextBeginningIndexes === NULL) nextBeginningIndexes = prepared._nextBeginningIndexes = prepareNextBeginningIndexes(prepared.target)\r\n targetI = matchesSimple[0]===0 ? 0 : nextBeginningIndexes[matchesSimple[0]-1]\r\n\r\n // Our target string successfully matched all characters in sequence!\r\n // Let's try a more advanced and strict test to improve the score\r\n // only count it as a match if it's consecutive or a beginning character!\r\n var backtrackCount = 0\r\n if(targetI !== targetLen) for(;;) {\r\n if(targetI >= targetLen) {\r\n // We failed to find a good spot for this search char, go back to the previous search char and force it forward\r\n if(searchI <= 0) break // We failed to push chars forward for a better match\r\n\r\n ++backtrackCount; if(backtrackCount > 200) break // exponential backtracking is taking too long, just give up and return a bad match\r\n\r\n --searchI\r\n var lastMatch = matchesStrict[--matchesStrictLen]\r\n targetI = nextBeginningIndexes[lastMatch]\r\n\r\n } else {\r\n var isMatch = searchLowerCodes[searchI] === targetLowerCodes[targetI]\r\n if(isMatch) {\r\n matchesStrict[matchesStrictLen++] = targetI\r\n ++searchI; if(searchI === searchLen) { successStrict = true; break }\r\n ++targetI\r\n } else {\r\n targetI = nextBeginningIndexes[targetI]\r\n }\r\n }\r\n }\r\n\r\n // check if it's a substring match\r\n var substringIndex = searchLen <= 1 ? -1 : prepared._targetLower.indexOf(searchLower, matchesSimple[0]) // perf: this is slow\r\n var isSubstring = !!~substringIndex\r\n var isSubstringBeginning = !isSubstring ? false : substringIndex===0 || prepared._nextBeginningIndexes[substringIndex-1] === substringIndex\r\n\r\n // if it's a substring match but not at a beginning index, let's try to find a substring starting at a beginning index for a better score\r\n if(isSubstring && !isSubstringBeginning) {\r\n for(var i=0; i<nextBeginningIndexes.length; i=nextBeginningIndexes[i]) {\r\n if(i <= substringIndex) continue\r\n\r\n for(var s=0; s<searchLen; s++) if(searchLowerCodes[s] !== prepared._targetLowerCodes[i+s]) break\r\n if(s === searchLen) { substringIndex = i; isSubstringBeginning = true; break }\r\n }\r\n }\r\n\r\n // tally up the score & keep track of matches for highlighting later\r\n // if it's a simple match, we'll switch to a substring match if a substring exists\r\n // if it's a strict match, we'll switch to a substring match only if that's a better score\r\n\r\n var calculateScore = matches => {\r\n var score = 0\r\n\r\n var extraMatchGroupCount = 0\r\n for(var i = 1; i < searchLen; ++i) {\r\n if(matches[i] - matches[i-1] !== 1) {score -= matches[i]; ++extraMatchGroupCount}\r\n }\r\n var unmatchedDistance = matches[searchLen-1] - matches[0] - (searchLen-1)\r\n\r\n score -= (12+unmatchedDistance) * extraMatchGroupCount // penality for more groups\r\n\r\n if(matches[0] !== 0) score -= matches[0]*matches[0]*.2 // penality for not starting near the beginning\r\n\r\n if(!successStrict) {\r\n score *= 1000\r\n } else {\r\n // successStrict on a target with too many beginning indexes loses points for being a bad target\r\n var uniqueBeginningIndexes = 1\r\n for(var i = nextBeginningIndexes[0]; i < targetLen; i=nextBeginningIndexes[i]) ++uniqueBeginningIndexes\r\n\r\n if(uniqueBeginningIndexes > 24) score *= (uniqueBeginningIndexes-24)*10 // quite arbitrary numbers here ...\r\n }\r\n\r\n score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n if(isSubstring) score /= 1+searchLen*searchLen*1 // bonus for being a full substring\r\n if(isSubstringBeginning) score /= 1+searchLen*searchLen*1 // bonus for substring starting on a beginningIndex\r\n\r\n score -= (targetLen - searchLen)/2 // penality for longer targets\r\n\r\n return score\r\n }\r\n\r\n if(!successStrict) {\r\n if(isSubstring) for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n var matchesBest = matchesSimple\r\n var score = calculateScore(matchesBest)\r\n } else {\r\n if(isSubstringBeginning) {\r\n for(var i=0; i<searchLen; ++i) matchesSimple[i] = substringIndex+i // at this point it's safe to overwrite matchehsSimple with substr matches\r\n var matchesBest = matchesSimple\r\n var score = calculateScore(matchesSimple)\r\n } else {\r\n var matchesBest = matchesStrict\r\n var score = calculateScore(matchesStrict)\r\n }\r\n }\r\n\r\n prepared._score = score\r\n\r\n for(var i = 0; i < searchLen; ++i) prepared._indexes[i] = matchesBest[i]\r\n prepared._indexes.len = searchLen\r\n\r\n const result = new Result()\r\n result.target = prepared.target\r\n result._score = prepared._score\r\n result._indexes = prepared._indexes\r\n return result\r\n }\r\n var algorithmSpaces = (preparedSearch, target, allowPartialMatch) => {\r\n var seen_indexes = new Set()\r\n var score = 0\r\n var result = NULL\r\n\r\n var first_seen_index_last_search = 0\r\n var searches = preparedSearch.spaceSearches\r\n var searchesLen = searches.length\r\n var changeslen = 0\r\n\r\n // Return _nextBeginningIndexes back to its normal state\r\n var resetNextBeginningIndexes = () => {\r\n for(let i=changeslen-1; i>=0; i--) target._nextBeginningIndexes[nextBeginningIndexesChanges[i*2 + 0]] = nextBeginningIndexesChanges[i*2 + 1]\r\n }\r\n\r\n var hasAtLeast1Match = false\r\n for(var i=0; i<searchesLen; ++i) {\r\n allowPartialMatchScores[i] = NEGATIVE_INFINITY\r\n var search = searches[i]\r\n\r\n result = algorithm(search, target)\r\n if(allowPartialMatch) {\r\n if(result === NULL) continue\r\n hasAtLeast1Match = true\r\n } else {\r\n if(result === NULL) {resetNextBeginningIndexes(); return NULL}\r\n }\r\n\r\n // if not the last search, we need to mutate _nextBeginningIndexes for the next search\r\n var isTheLastSearch = i === searchesLen - 1\r\n if(!isTheLastSearch) {\r\n var indexes = result._indexes\r\n\r\n var indexesIsConsecutiveSubstring = true\r\n for(let i=0; i<indexes.len-1; i++) {\r\n if(indexes[i+1] - indexes[i] !== 1) {\r\n indexesIsConsecutiveSubstring = false; break;\r\n }\r\n }\r\n\r\n if(indexesIsConsecutiveSubstring) {\r\n var newBeginningIndex = indexes[indexes.len-1] + 1\r\n var toReplace = target._nextBeginningIndexes[newBeginningIndex-1]\r\n for(let i=newBeginningIndex-1; i>=0; i--) {\r\n if(toReplace !== target._nextBeginningIndexes[i]) break\r\n target._nextBeginningIndexes[i] = newBeginningIndex\r\n nextBeginningIndexesChanges[changeslen*2 + 0] = i\r\n nextBeginningIndexesChanges[changeslen*2 + 1] = toReplace\r\n changeslen++\r\n }\r\n }\r\n }\r\n\r\n score += result._score / searchesLen\r\n allowPartialMatchScores[i] = result._score / searchesLen\r\n\r\n // dock points based on order otherwise \"c man\" returns Manifest.cpp instead of CheatManager.h\r\n if(result._indexes[0] < first_seen_index_last_search) {\r\n score -= (first_seen_index_last_search - result._indexes[0]) * 2\r\n }\r\n first_seen_index_last_search = result._indexes[0]\r\n\r\n for(var j=0; j<result._indexes.len; ++j) seen_indexes.add(result._indexes[j])\r\n }\r\n\r\n if(allowPartialMatch && !hasAtLeast1Match) return NULL\r\n\r\n resetNextBeginningIndexes()\r\n\r\n // allows a search with spaces that's an exact substring to score well\r\n var allowSpacesResult = algorithm(preparedSearch, target, /*allowSpaces=*/true)\r\n if(allowSpacesResult !== NULL && allowSpacesResult._score > score) {\r\n if(allowPartialMatch) {\r\n for(var i=0; i<searchesLen; ++i) {\r\n allowPartialMatchScores[i] = allowSpacesResult._score / searchesLen\r\n }\r\n }\r\n return allowSpacesResult\r\n }\r\n\r\n if(allowPartialMatch) result = target\r\n result._score = score\r\n\r\n var i = 0\r\n for (let index of seen_indexes) result._indexes[i++] = index\r\n result._indexes.len = i\r\n\r\n return result\r\n }\r\n\r\n // we use this instead of just .normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') because that screws with japanese characters\r\n var remove_accents = (str) => str.replace(/\\p{Script=Latin}+/gu, match => match.normalize('NFD')).replace(/[\\u0300-\\u036f]/g, '')\r\n\r\n var prepareLowerInfo = (str) => {\r\n str = remove_accents(str)\r\n var strLen = str.length\r\n var lower = str.toLowerCase()\r\n var lowerCodes = [] // new Array(strLen) sparse array is too slow\r\n var bitflags = 0\r\n var containsSpace = false // space isn't stored in bitflags because of how searching with a space works\r\n\r\n for(var i = 0; i < strLen; ++i) {\r\n var lowerCode = lowerCodes[i] = lower.charCodeAt(i)\r\n\r\n if(lowerCode === 32) {\r\n containsSpace = true\r\n continue // it's important that we don't set any bitflags for space\r\n }\r\n\r\n var bit = lowerCode>=97&&lowerCode<=122 ? lowerCode-97 // alphabet\r\n : lowerCode>=48&&lowerCode<=57 ? 26 // numbers\r\n // 3 bits available\r\n : lowerCode<=127 ? 30 // other ascii\r\n : 31 // other utf8\r\n bitflags |= 1<<bit\r\n }\r\n\r\n return {lowerCodes:lowerCodes, bitflags:bitflags, containsSpace:containsSpace, _lower:lower}\r\n }\r\n var prepareBeginningIndexes = (target) => {\r\n var targetLen = target.length\r\n var beginningIndexes = []; var beginningIndexesLen = 0\r\n var wasUpper = false\r\n var wasAlphanum = false\r\n for(var i = 0; i < targetLen; ++i) {\r\n var targetCode = target.charCodeAt(i)\r\n var isUpper = targetCode>=65&&targetCode<=90\r\n var isAlphanum = isUpper || targetCode>=97&&targetCode<=122 || targetCode>=48&&targetCode<=57\r\n var isBeginning = isUpper && !wasUpper || !wasAlphanum || !isAlphanum\r\n wasUpper = isUpper\r\n wasAlphanum = isAlphanum\r\n if(isBeginning) beginningIndexes[beginningIndexesLen++] = i\r\n }\r\n return beginningIndexes\r\n }\r\n var prepareNextBeginningIndexes = (target) => {\r\n target = remove_accents(target)\r\n var targetLen = target.length\r\n var beginningIndexes = prepareBeginningIndexes(target)\r\n var nextBeginningIndexes = [] // new Array(targetLen) sparse array is too slow\r\n var lastIsBeginning = beginningIndexes[0]\r\n var lastIsBeginningI = 0\r\n for(var i = 0; i < targetLen; ++i) {\r\n if(lastIsBeginning > i) {\r\n nextBeginningIndexes[i] = lastIsBeginning\r\n } else {\r\n lastIsBeginning = beginningIndexes[++lastIsBeginningI]\r\n nextBeginningIndexes[i] = lastIsBeginning===undefined ? targetLen : lastIsBeginning\r\n }\r\n }\r\n return nextBeginningIndexes\r\n }\r\n\r\n var preparedCache = new Map()\r\n var preparedSearchCache = new Map()\r\n\r\n // the theory behind these being globals is to reduce garbage collection by not making new arrays\r\n var matchesSimple = []; var matchesStrict = []\r\n var nextBeginningIndexesChanges = [] // allows straw berry to match strawberry well, by modifying the end of a substring to be considered a beginning index for the rest of the search\r\n var keysSpacesBestScores = []; var allowPartialMatchScores = []\r\n var tmpTargets = []; var tmpResults = []\r\n\r\n // prop = 'key' 2.5ms optimized for this case, seems to be about as fast as direct obj[prop]\r\n // prop = 'key1.key2' 10ms\r\n // prop = ['key1', 'key2'] 27ms\r\n // prop = obj => obj.tags.join() ??ms\r\n var getValue = (obj, prop) => {\r\n var tmp = obj[prop]; if(tmp !== undefined) return tmp\r\n if(typeof prop === 'function') return prop(obj) // this should run first. but that makes string props slower\r\n var segs = prop\r\n if(!Array.isArray(prop)) segs = prop.split('.')\r\n var len = segs.length\r\n var i = -1\r\n while (obj && (++i < len)) obj = obj[segs[i]]\r\n return obj\r\n }\r\n\r\n var isPrepared = (x) => { return typeof x === 'object' && typeof x._bitflags === 'number' }\r\n var INFINITY = Infinity; var NEGATIVE_INFINITY = -INFINITY\r\n var noResults = []; noResults.total = 0\r\n var NULL = null\r\n\r\n var noTarget = prepare('')\r\n\r\n // Hacked version of https://github.com/lemire/FastPriorityQueue.js\r\n var fastpriorityqueue=r=>{var e=[],o=0,a={},v=r=>{for(var a=0,v=e[a],c=1;c<o;){var s=c+1;a=c,s<o&&e[s]._score<e[c]._score&&(a=s),e[a-1>>1]=e[a],c=1+(a<<1)}for(var f=a-1>>1;a>0&&v._score<e[f]._score;f=(a=f)-1>>1)e[a]=e[f];e[a]=v};return a.add=(r=>{var a=o;e[o++]=r;for(var v=a-1>>1;a>0&&r._score<e[v]._score;v=(a=v)-1>>1)e[a]=e[v];e[a]=r}),a.poll=(r=>{if(0!==o){var a=e[0];return e[0]=e[--o],v(),a}}),a.peek=(r=>{if(0!==o)return e[0]}),a.replaceTop=(r=>{e[0]=r,v()}),a}\r\n var q = fastpriorityqueue() // reuse this\r\n\r\n // fuzzysort is written this way for minification. all names are mangeled unless quoted\r\n return {'single':single, 'go':go, 'prepare':prepare, 'cleanup':cleanup}\r\n}) // UMD\r\n" | ||
| ], | ||
| "mappings": "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", | ||
| "debugId": "6961AC2ACDE7081B64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": ["src/version.ts"], | ||
| "sourcesContent": [ | ||
| "declare const OPENCODE_VERSION: string\ndeclare const OPENCODE_CHANNEL: string\n\nconst version = typeof OPENCODE_VERSION === \"string\" ? OPENCODE_VERSION : \"local\"\nconst channel = typeof OPENCODE_CHANNEL === \"string\" ? OPENCODE_CHANNEL : \"local\"\n\nexport { version as OPENCODE_VERSION, channel as OPENCODE_CHANNEL }\nexport const OPENCODE_LOCAL = channel === \"local\"\n" | ||
| ], | ||
| "mappings": ";AAGA,IAAM,EAAiD,mBACjD,EAAiD,OAGhD,IAAM,EAAiB", | ||
| "debugId": "8CC12C8C7908776A64756E2164756E21", | ||
| "names": [] | ||
| } |
| { | ||
| "version": 3, | ||
| "sources": [], | ||
| "sourcesContent": [ | ||
| ], | ||
| "mappings": "", | ||
| "debugId": "E7D7F2D3D51A69CC64756E2164756E21", | ||
| "names": [] | ||
| } |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
276043324
0