blink 0.1.61 → 0.1.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/index.cjs +5 -5
- package/dist/api/index.d.cts +2 -2
- package/dist/api/index.d.ts +2 -2
- package/dist/api/index.js +5 -5
- package/dist/cli/{dev-CxvqgMU6.js → dev-C03_iMLD.js} +3 -9
- package/dist/cli/index.js +2 -2
- package/dist/http/index.cjs +1 -1
- package/dist/http/index.d.cts +2 -2
- package/dist/http/index.d.ts +2 -2
- package/dist/http/index.js +1 -1
- package/dist/{http-blV4Uqlw.js → http-CU96NOdn.js} +1 -1
- package/dist/{http-B-lmj4yh.cjs → http-DXLJkJIR.cjs} +1 -1
- package/dist/{index-IWju3eNc.d.cts → index-BdS2C_9A.d.cts} +85 -14
- package/dist/{index-Cb6Pp96M.d.ts → index-DXNEroA1.d.cts} +8 -1
- package/dist/{index-CIUoZVwP.d.ts → index-E064W90j.d.ts} +85 -14
- package/dist/{index-CPab5qaJ.d.cts → index-y1u5VC2_.d.ts} +8 -1
- package/dist/test.d.cts +2 -2
- package/dist/test.d.ts +2 -2
- package/package.json +1 -1
|
@@ -277,7 +277,7 @@ ${assistantMessage}
|
|
|
277
277
|
|
|
278
278
|
`;break}case`tool`:throw new UnsupportedFunctionalityError({functionality:`tool messages`});default:{let _exhaustiveCheck=role;throw Error(`Unsupported role: ${_exhaustiveCheck}`)}}return text+=`${assistant}:
|
|
279
279
|
`,{prompt:text,stopSequences:[`
|
|
280
|
-
${user}:`]}}function getResponseMetadata2({id,model,created}){return{id:id==null?void 0:id,modelId:model==null?void 0:model,timestamp:created==null?void 0:new Date(created*1e3)}}function mapOpenAIFinishReason2(finishReason){switch(finishReason){case`stop`:return`stop`;case`length`:return`length`;case`content_filter`:return`content-filter`;case`function_call`:case`tool_calls`:return`tool-calls`;default:return`unknown`}}var openaiCompletionProviderOptions=z$2.object({echo:z$2.boolean().optional(),logitBias:z$2.record(z$2.string(),z$2.number()).optional(),suffix:z$2.string().optional(),user:z$2.string().optional(),logprobs:z$2.union([z$2.boolean(),z$2.number()]).optional()}),OpenAICompletionLanguageModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.supportedUrls={},this.modelId=modelId,this.config=config}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get provider(){return this.config.provider}async getArgs({prompt,maxOutputTokens,temperature,topP,topK,frequencyPenalty,presencePenalty,stopSequences:userStopSequences,responseFormat,tools,toolChoice,seed,providerOptions}){let warnings=[],openaiOptions={...await parseProviderOptions({provider:`openai`,providerOptions,schema:openaiCompletionProviderOptions}),...await parseProviderOptions({provider:this.providerOptionsName,providerOptions,schema:openaiCompletionProviderOptions})};topK!=null&&warnings.push({type:`unsupported-setting`,setting:`topK`}),tools!=null&&tools.length&&warnings.push({type:`unsupported-setting`,setting:`tools`}),toolChoice!=null&&warnings.push({type:`unsupported-setting`,setting:`toolChoice`}),responseFormat!=null&&responseFormat.type!==`text`&&warnings.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format is not supported.`});let{prompt:completionPrompt,stopSequences}=convertToOpenAICompletionPrompt({prompt}),stop=[...stopSequences==null?[]:stopSequences,...userStopSequences==null?[]:userStopSequences];return{args:{model:this.modelId,echo:openaiOptions.echo,logit_bias:openaiOptions.logitBias,logprobs:(openaiOptions==null?void 0:openaiOptions.logprobs)===!0?0:(openaiOptions==null?void 0:openaiOptions.logprobs)===!1||openaiOptions==null?void 0:openaiOptions.logprobs,suffix:openaiOptions.suffix,user:openaiOptions.user,max_tokens:maxOutputTokens,temperature,top_p:topP,frequency_penalty:frequencyPenalty,presence_penalty:presencePenalty,seed,prompt:completionPrompt,stop:stop.length>0?stop:void 0},warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2;let{args,warnings}=await this.getArgs(options$1),{responseHeaders,value:response,rawValue:rawResponse}=await postJsonToApi({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body:args,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiCompletionResponseSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),choice$1=response.choices[0],providerMetadata={openai:{}};return choice$1.logprobs!=null&&(providerMetadata.openai.logprobs=choice$1.logprobs),{content:[{type:`text`,text:choice$1.text}],usage:{inputTokens:(_a$10=response.usage)==null?void 0:_a$10.prompt_tokens,outputTokens:(_b$2=response.usage)==null?void 0:_b$2.completion_tokens,totalTokens:(_c$2=response.usage)==null?void 0:_c$2.total_tokens},finishReason:mapOpenAIFinishReason2(choice$1.finish_reason),request:{body:args},response:{...getResponseMetadata2(response),headers:responseHeaders,body:rawResponse},providerMetadata,warnings}}async doStream(options$1){let{args,warnings}=await this.getArgs(options$1),body={...args,stream:!0,stream_options:{include_usage:!0}},{responseHeaders,value:response}=await postJsonToApi({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createEventSourceResponseHandler(openaiCompletionChunkSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),finishReason=`unknown`,providerMetadata={openai:{}},usage={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},isFirstChunk=!0;return{stream:response.pipeThrough(new TransformStream({start(controller){controller.enqueue({type:`stream-start`,warnings})},transform(chunk$1,controller){if(options$1.includeRawChunks&&controller.enqueue({type:`raw`,rawValue:chunk$1.rawValue}),!chunk$1.success){finishReason=`error`,controller.enqueue({type:`error`,error:chunk$1.error});return}let value=chunk$1.value;if(`error`in value){finishReason=`error`,controller.enqueue({type:`error`,error:value.error});return}isFirstChunk&&(isFirstChunk=!1,controller.enqueue({type:`response-metadata`,...getResponseMetadata2(value)}),controller.enqueue({type:`text-start`,id:`0`})),value.usage!=null&&(usage.inputTokens=value.usage.prompt_tokens,usage.outputTokens=value.usage.completion_tokens,usage.totalTokens=value.usage.total_tokens);let choice$1=value.choices[0];(choice$1==null?void 0:choice$1.finish_reason)!=null&&(finishReason=mapOpenAIFinishReason2(choice$1.finish_reason)),(choice$1==null?void 0:choice$1.logprobs)!=null&&(providerMetadata.openai.logprobs=choice$1.logprobs),(choice$1==null?void 0:choice$1.text)!=null&&choice$1.text.length>0&&controller.enqueue({type:`text-delta`,id:`0`,delta:choice$1.text})},flush(controller){isFirstChunk||controller.enqueue({type:`text-end`,id:`0`}),controller.enqueue({type:`finish`,finishReason,providerMetadata,usage})}})),request:{body},response:{headers:responseHeaders}}}},usageSchema$1=z$2.object({prompt_tokens:z$2.number(),completion_tokens:z$2.number(),total_tokens:z$2.number()}),openaiCompletionResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({text:z$2.string(),finish_reason:z$2.string(),logprobs:z$2.object({tokens:z$2.array(z$2.string()),token_logprobs:z$2.array(z$2.number()),top_logprobs:z$2.array(z$2.record(z$2.string(),z$2.number())).nullish()}).nullish()})),usage:usageSchema$1.nullish()}),openaiCompletionChunkSchema=z$2.union([z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({text:z$2.string(),finish_reason:z$2.string().nullish(),index:z$2.number(),logprobs:z$2.object({tokens:z$2.array(z$2.string()),token_logprobs:z$2.array(z$2.number()),top_logprobs:z$2.array(z$2.record(z$2.string(),z$2.number())).nullish()}).nullish()})),usage:usageSchema$1.nullish()}),openaiErrorDataSchema]),openaiEmbeddingProviderOptions=z$2.object({dimensions:z$2.number().optional(),user:z$2.string().optional()}),OpenAIEmbeddingModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0,this.modelId=modelId,this.config=config}get provider(){return this.config.provider}async doEmbed({values,headers,abortSignal,providerOptions}){var _a$10;if(values.length>this.maxEmbeddingsPerCall)throw new TooManyEmbeddingValuesForCallError({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values});let openaiOptions=(_a$10=await parseProviderOptions({provider:`openai`,providerOptions,schema:openaiEmbeddingProviderOptions}))==null?{}:_a$10,{responseHeaders,value:response,rawValue}=await postJsonToApi({url:this.config.url({path:`/embeddings`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),headers),body:{model:this.modelId,input:values,encoding_format:`float`,dimensions:openaiOptions.dimensions,user:openaiOptions.user},failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiTextEmbeddingResponseSchema$1),abortSignal,fetch:this.config.fetch});return{embeddings:response.data.map(item=>item.embedding),usage:response.usage?{tokens:response.usage.prompt_tokens}:void 0,response:{headers:responseHeaders,body:rawValue}}}},openaiTextEmbeddingResponseSchema$1=z$2.object({data:z$2.array(z$2.object({embedding:z$2.array(z$2.number())})),usage:z$2.object({prompt_tokens:z$2.number()}).nullish()}),modelMaxImagesPerCall={"dall-e-3":1,"dall-e-2":10,"gpt-image-1":10},hasDefaultResponseFormat=new Set([`gpt-image-1`]),OpenAIImageModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`}get maxImagesPerCall(){var _a$10;return(_a$10=modelMaxImagesPerCall[this.modelId])==null?1:_a$10}get provider(){return this.config.provider}async doGenerate({prompt,n:n$2,size,aspectRatio,seed,providerOptions,headers,abortSignal}){var _a$10,_b$2,_c$2,_d$1;let warnings=[];aspectRatio!=null&&warnings.push({type:`unsupported-setting`,setting:`aspectRatio`,details:"This model does not support aspect ratio. Use `size` instead."}),seed!=null&&warnings.push({type:`unsupported-setting`,setting:`seed`});let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{value:response,responseHeaders}=await postJsonToApi({url:this.config.url({path:`/images/generations`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),headers),body:{model:this.modelId,prompt,n:n$2,size,...(_d$1=providerOptions.openai)==null?{}:_d$1,...hasDefaultResponseFormat.has(this.modelId)?{}:{response_format:`b64_json`}},failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiImageResponseSchema),abortSignal,fetch:this.config.fetch});return{images:response.data.map(item=>item.b64_json),warnings,response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders},providerMetadata:{openai:{images:response.data.map(item=>item.revised_prompt?{revisedPrompt:item.revised_prompt}:null)}}}}},openaiImageResponseSchema=z$2.object({data:z$2.array(z$2.object({b64_json:z$2.string(),revised_prompt:z$2.string().optional()}))}),codeInterpreterArgsSchema=z$2.object({container:z$2.union([z$2.string(),z$2.object({fileIds:z$2.array(z$2.string()).optional()})]).optional()}),codeInterpreterToolFactory=createProviderDefinedToolFactory({id:`openai.code_interpreter`,name:`code_interpreter`,inputSchema:z$2.object({})}),codeInterpreter=(args={})=>codeInterpreterToolFactory(args),webSearchArgsSchema=z$2.object({filters:z$2.object({allowedDomains:z$2.array(z$2.string()).optional()}).optional(),searchContextSize:z$2.enum([`low`,`medium`,`high`]).optional(),userLocation:z$2.object({type:z$2.literal(`approximate`),country:z$2.string().optional(),city:z$2.string().optional(),region:z$2.string().optional(),timezone:z$2.string().optional()}).optional()}),webSearchToolFactory=createProviderDefinedToolFactory({id:`openai.web_search`,name:`web_search`,inputSchema:z$2.object({action:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`search`),query:z$2.string().nullish()}),z$2.object({type:z$2.literal(`open_page`),url:z$2.string()}),z$2.object({type:z$2.literal(`find`),url:z$2.string(),pattern:z$2.string()})]).nullish()})}),webSearch=(args={})=>webSearchToolFactory(args),openaiTools={codeInterpreter,fileSearch,webSearchPreview,webSearch};function isFileId(data$2,prefixes){return prefixes?prefixes.some(prefix=>data$2.startsWith(prefix)):!1}async function convertToOpenAIResponsesMessages({prompt,systemMessageMode,fileIdPrefixes}){var _a$10,_b$2,_c$2,_d$1,_e$1,_f;let messages$1=[],warnings=[];for(let{role,content}of prompt)switch(role){case`system`:switch(systemMessageMode){case`system`:messages$1.push({role:`system`,content});break;case`developer`:messages$1.push({role:`developer`,content});break;case`remove`:warnings.push({type:`other`,message:`system messages are removed for this model`});break;default:{let _exhaustiveCheck=systemMessageMode;throw Error(`Unsupported system message mode: ${_exhaustiveCheck}`)}}break;case`user`:messages$1.push({role:`user`,content:content.map((part,index)=>{var _a2$1,_b2,_c2;switch(part.type){case`text`:return{type:`input_text`,text:part.text};case`file`:if(part.mediaType.startsWith(`image/`)){let mediaType=part.mediaType===`image/*`?`image/jpeg`:part.mediaType;return{type:`input_image`,...part.data instanceof URL?{image_url:part.data.toString()}:typeof part.data==`string`&&isFileId(part.data,fileIdPrefixes)?{file_id:part.data}:{image_url:`data:${mediaType};base64,${convertToBase64(part.data)}`},detail:(_b2=(_a2$1=part.providerOptions)==null?void 0:_a2$1.openai)==null?void 0:_b2.imageDetail}}else if(part.mediaType===`application/pdf`)return part.data instanceof URL?{type:`input_file`,file_url:part.data.toString()}:{type:`input_file`,...typeof part.data==`string`&&isFileId(part.data,fileIdPrefixes)?{file_id:part.data}:{filename:(_c2=part.filename)==null?`part-${index}.pdf`:_c2,file_data:`data:application/pdf;base64,${convertToBase64(part.data)}`}};else throw new UnsupportedFunctionalityError({functionality:`file part media type ${part.mediaType}`})}})});break;case`assistant`:{let reasoningMessages={};for(let part of content)switch(part.type){case`text`:messages$1.push({role:`assistant`,content:[{type:`output_text`,text:part.text}],id:(_c$2=(_b$2=(_a$10=part.providerOptions)==null?void 0:_a$10.openai)==null?void 0:_b$2.itemId)==null?void 0:_c$2});break;case`tool-call`:if(part.providerExecuted)break;messages$1.push({type:`function_call`,call_id:part.toolCallId,name:part.toolName,arguments:JSON.stringify(part.input),id:(_f=(_e$1=(_d$1=part.providerOptions)==null?void 0:_d$1.openai)==null?void 0:_e$1.itemId)==null?void 0:_f});break;case`tool-result`:warnings.push({type:`other`,message:`tool result parts in assistant messages are not supported for OpenAI responses`});break;case`reasoning`:{let providerOptions=await parseProviderOptions({provider:`openai`,providerOptions:part.providerOptions,schema:openaiResponsesReasoningProviderOptionsSchema}),reasoningId=providerOptions==null?void 0:providerOptions.itemId;if(reasoningId!=null){let existingReasoningMessage=reasoningMessages[reasoningId],summaryParts=[];part.text.length>0?summaryParts.push({type:`summary_text`,text:part.text}):existingReasoningMessage!==void 0&&warnings.push({type:`other`,message:`Cannot append empty reasoning part to existing reasoning sequence. Skipping reasoning part: ${JSON.stringify(part)}.`}),existingReasoningMessage===void 0?(reasoningMessages[reasoningId]={type:`reasoning`,id:reasoningId,encrypted_content:providerOptions==null?void 0:providerOptions.reasoningEncryptedContent,summary:summaryParts},messages$1.push(reasoningMessages[reasoningId])):existingReasoningMessage.summary.push(...summaryParts)}else warnings.push({type:`other`,message:`Non-OpenAI reasoning parts are not supported. Skipping reasoning part: ${JSON.stringify(part)}.`});break}}break}case`tool`:for(let part of content){let output=part.output,contentValue;switch(output.type){case`text`:case`error-text`:contentValue=output.value;break;case`content`:case`json`:case`error-json`:contentValue=JSON.stringify(output.value);break}messages$1.push({type:`function_call_output`,call_id:part.toolCallId,output:contentValue})}break;default:{let _exhaustiveCheck=role;throw Error(`Unsupported role: ${_exhaustiveCheck}`)}}return{messages:messages$1,warnings}}var openaiResponsesReasoningProviderOptionsSchema=z$2.object({itemId:z$2.string().nullish(),reasoningEncryptedContent:z$2.string().nullish()});function mapOpenAIResponseFinishReason({finishReason,hasFunctionCall}){switch(finishReason){case void 0:case null:return hasFunctionCall?`tool-calls`:`stop`;case`max_output_tokens`:return`length`;case`content_filter`:return`content-filter`;default:return hasFunctionCall?`tool-calls`:`unknown`}}function prepareResponsesTools({tools,toolChoice,strictJsonSchema}){tools=tools!=null&&tools.length?tools:void 0;let toolWarnings=[];if(tools==null)return{tools:void 0,toolChoice:void 0,toolWarnings};let openaiTools2=[];for(let tool$1 of tools)switch(tool$1.type){case`function`:openaiTools2.push({type:`function`,name:tool$1.name,description:tool$1.description,parameters:tool$1.inputSchema,strict:strictJsonSchema});break;case`provider-defined`:switch(tool$1.id){case`openai.file_search`:{let args=fileSearchArgsSchema.parse(tool$1.args);openaiTools2.push({type:`file_search`,vector_store_ids:args.vectorStoreIds,max_num_results:args.maxNumResults,ranking_options:args.ranking?{ranker:args.ranking.ranker}:void 0,filters:args.filters});break}case`openai.web_search_preview`:{let args=webSearchPreviewArgsSchema.parse(tool$1.args);openaiTools2.push({type:`web_search_preview`,search_context_size:args.searchContextSize,user_location:args.userLocation});break}case`openai.web_search`:{let args=webSearchArgsSchema.parse(tool$1.args);openaiTools2.push({type:`web_search`,filters:args.filters==null?void 0:{allowed_domains:args.filters.allowedDomains},search_context_size:args.searchContextSize,user_location:args.userLocation});break}case`openai.code_interpreter`:{let args=codeInterpreterArgsSchema.parse(tool$1.args);openaiTools2.push({type:`code_interpreter`,container:args.container==null?{type:`auto`,file_ids:void 0}:typeof args.container==`string`?args.container:{type:`auto`,file_ids:args.container.fileIds}});break}default:toolWarnings.push({type:`unsupported-tool`,tool:tool$1});break}break;default:toolWarnings.push({type:`unsupported-tool`,tool:tool$1});break}if(toolChoice==null)return{tools:openaiTools2,toolChoice:void 0,toolWarnings};let type=toolChoice.type;switch(type){case`auto`:case`none`:case`required`:return{tools:openaiTools2,toolChoice:type,toolWarnings};case`tool`:return{tools:openaiTools2,toolChoice:toolChoice.toolName===`code_interpreter`||toolChoice.toolName===`file_search`||toolChoice.toolName===`web_search_preview`||toolChoice.toolName===`web_search`?{type:toolChoice.toolName}:{type:`function`,name:toolChoice.toolName},toolWarnings};default:{let _exhaustiveCheck=type;throw new UnsupportedFunctionalityError({functionality:`tool choice type: ${_exhaustiveCheck}`})}}}var webSearchCallItem=z$2.object({type:z$2.literal(`web_search_call`),id:z$2.string(),status:z$2.string(),action:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`search`),query:z$2.string().nullish()}),z$2.object({type:z$2.literal(`open_page`),url:z$2.string()}),z$2.object({type:z$2.literal(`find`),url:z$2.string(),pattern:z$2.string()})]).nullish()}),TOP_LOGPROBS_MAX=20,LOGPROBS_SCHEMA=z$2.array(z$2.object({token:z$2.string(),logprob:z$2.number(),top_logprobs:z$2.array(z$2.object({token:z$2.string(),logprob:z$2.number()}))})),OpenAIResponsesLanguageModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.supportedUrls={"image/*":[/^https?:\/\/.*$/],"application/pdf":[/^https?:\/\/.*$/]},this.modelId=modelId,this.config=config}get provider(){return this.config.provider}async getArgs({maxOutputTokens,temperature,stopSequences,topP,topK,presencePenalty,frequencyPenalty,seed,prompt,providerOptions,tools,toolChoice,responseFormat}){var _a$10,_b$2,_c$2;let warnings=[],modelConfig=getResponsesModelConfig(this.modelId);topK!=null&&warnings.push({type:`unsupported-setting`,setting:`topK`}),seed!=null&&warnings.push({type:`unsupported-setting`,setting:`seed`}),presencePenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`presencePenalty`}),frequencyPenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`frequencyPenalty`}),stopSequences!=null&&warnings.push({type:`unsupported-setting`,setting:`stopSequences`});let{messages:messages$1,warnings:messageWarnings}=await convertToOpenAIResponsesMessages({prompt,systemMessageMode:modelConfig.systemMessageMode,fileIdPrefixes:this.config.fileIdPrefixes});warnings.push(...messageWarnings);let openaiOptions=await parseProviderOptions({provider:`openai`,providerOptions,schema:openaiResponsesProviderOptionsSchema}),strictJsonSchema=(_a$10=openaiOptions==null?void 0:openaiOptions.strictJsonSchema)==null?!1:_a$10,include=openaiOptions==null?void 0:openaiOptions.include,topLogprobs=typeof(openaiOptions==null?void 0:openaiOptions.logprobs)==`number`?openaiOptions==null?void 0:openaiOptions.logprobs:(openaiOptions==null?void 0:openaiOptions.logprobs)===!0?TOP_LOGPROBS_MAX:void 0;include=topLogprobs?Array.isArray(include)?[...include,`message.output_text.logprobs`]:[`message.output_text.logprobs`]:include;let webSearchToolName=(_b$2=tools==null?void 0:tools.find(tool$1=>tool$1.type===`provider-defined`&&(tool$1.id===`openai.web_search`||tool$1.id===`openai.web_search_preview`)))==null?void 0:_b$2.name;include=webSearchToolName?Array.isArray(include)?[...include,`web_search_call.action.sources`]:[`web_search_call.action.sources`]:include;let baseArgs={model:this.modelId,input:messages$1,temperature,top_p:topP,max_output_tokens:maxOutputTokens,...((responseFormat==null?void 0:responseFormat.type)===`json`||(openaiOptions==null?void 0:openaiOptions.textVerbosity))&&{text:{...(responseFormat==null?void 0:responseFormat.type)===`json`&&{format:responseFormat.schema==null?{type:`json_object`}:{type:`json_schema`,strict:strictJsonSchema,name:(_c$2=responseFormat.name)==null?`response`:_c$2,description:responseFormat.description,schema:responseFormat.schema}},...(openaiOptions==null?void 0:openaiOptions.textVerbosity)&&{verbosity:openaiOptions.textVerbosity}}},metadata:openaiOptions==null?void 0:openaiOptions.metadata,parallel_tool_calls:openaiOptions==null?void 0:openaiOptions.parallelToolCalls,previous_response_id:openaiOptions==null?void 0:openaiOptions.previousResponseId,store:openaiOptions==null?void 0:openaiOptions.store,user:openaiOptions==null?void 0:openaiOptions.user,instructions:openaiOptions==null?void 0:openaiOptions.instructions,service_tier:openaiOptions==null?void 0:openaiOptions.serviceTier,include,prompt_cache_key:openaiOptions==null?void 0:openaiOptions.promptCacheKey,safety_identifier:openaiOptions==null?void 0:openaiOptions.safetyIdentifier,top_logprobs:topLogprobs,...modelConfig.isReasoningModel&&((openaiOptions==null?void 0:openaiOptions.reasoningEffort)!=null||(openaiOptions==null?void 0:openaiOptions.reasoningSummary)!=null)&&{reasoning:{...(openaiOptions==null?void 0:openaiOptions.reasoningEffort)!=null&&{effort:openaiOptions.reasoningEffort},...(openaiOptions==null?void 0:openaiOptions.reasoningSummary)!=null&&{summary:openaiOptions.reasoningSummary}}},...modelConfig.requiredAutoTruncation&&{truncation:`auto`}};modelConfig.isReasoningModel?(baseArgs.temperature!=null&&(baseArgs.temperature=void 0,warnings.push({type:`unsupported-setting`,setting:`temperature`,details:`temperature is not supported for reasoning models`})),baseArgs.top_p!=null&&(baseArgs.top_p=void 0,warnings.push({type:`unsupported-setting`,setting:`topP`,details:`topP is not supported for reasoning models`}))):((openaiOptions==null?void 0:openaiOptions.reasoningEffort)!=null&&warnings.push({type:`unsupported-setting`,setting:`reasoningEffort`,details:`reasoningEffort is not supported for non-reasoning models`}),(openaiOptions==null?void 0:openaiOptions.reasoningSummary)!=null&&warnings.push({type:`unsupported-setting`,setting:`reasoningSummary`,details:`reasoningSummary is not supported for non-reasoning models`})),(openaiOptions==null?void 0:openaiOptions.serviceTier)===`flex`&&!modelConfig.supportsFlexProcessing&&(warnings.push({type:`unsupported-setting`,setting:`serviceTier`,details:`flex processing is only available for o3, o4-mini, and gpt-5 models`}),delete baseArgs.service_tier),(openaiOptions==null?void 0:openaiOptions.serviceTier)===`priority`&&!modelConfig.supportsPriorityProcessing&&(warnings.push({type:`unsupported-setting`,setting:`serviceTier`,details:`priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported`}),delete baseArgs.service_tier);let{tools:openaiTools2,toolChoice:openaiToolChoice,toolWarnings}=prepareResponsesTools({tools,toolChoice,strictJsonSchema});return{webSearchToolName,args:{...baseArgs,tools:openaiTools2,tool_choice:openaiToolChoice},warnings:[...warnings,...toolWarnings]}}async doGenerate(options$1){var _a$10,_b$2,_c$2,_d$1,_e$1,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q;let{args:body,warnings,webSearchToolName}=await this.getArgs(options$1),url$4=this.config.url({path:`/responses`,modelId:this.modelId}),{responseHeaders,value:response,rawValue:rawResponse}=await postJsonToApi({url:url$4,headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(z$2.object({id:z$2.string(),created_at:z$2.number(),error:z$2.object({code:z$2.string(),message:z$2.string()}).nullish(),model:z$2.string(),output:z$2.array(z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`message`),role:z$2.literal(`assistant`),id:z$2.string(),content:z$2.array(z$2.object({type:z$2.literal(`output_text`),text:z$2.string(),logprobs:LOGPROBS_SCHEMA.nullish(),annotations:z$2.array(z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`url_citation`),start_index:z$2.number(),end_index:z$2.number(),url:z$2.string(),title:z$2.string()}),z$2.object({type:z$2.literal(`file_citation`),file_id:z$2.string(),filename:z$2.string().nullish(),index:z$2.number().nullish(),start_index:z$2.number().nullish(),end_index:z$2.number().nullish(),quote:z$2.string().nullish()}),z$2.object({type:z$2.literal(`container_file_citation`)})]))}))}),z$2.object({type:z$2.literal(`code_interpreter_call`)}),z$2.object({type:z$2.literal(`function_call`),call_id:z$2.string(),name:z$2.string(),arguments:z$2.string(),id:z$2.string()}),webSearchCallItem,z$2.object({type:z$2.literal(`computer_call`),id:z$2.string(),status:z$2.string().optional()}),z$2.object({type:z$2.literal(`file_search_call`),id:z$2.string(),status:z$2.string().optional(),queries:z$2.array(z$2.string()).nullish(),results:z$2.array(z$2.object({attributes:z$2.object({file_id:z$2.string(),filename:z$2.string(),score:z$2.number(),text:z$2.string()})})).nullish()}),z$2.object({type:z$2.literal(`reasoning`),id:z$2.string(),encrypted_content:z$2.string().nullish(),summary:z$2.array(z$2.object({type:z$2.literal(`summary_text`),text:z$2.string()}))})])),service_tier:z$2.string().nullish(),incomplete_details:z$2.object({reason:z$2.string()}).nullable(),usage:usageSchema2})),abortSignal:options$1.abortSignal,fetch:this.config.fetch});if(response.error)throw new APICallError({message:response.error.message,url:url$4,requestBodyValues:body,statusCode:400,responseHeaders,responseBody:rawResponse,isRetryable:!1});let content=[],logprobs=[],hasFunctionCall=!1;for(let part of response.output)switch(part.type){case`reasoning`:part.summary.length===0&&part.summary.push({type:`summary_text`,text:``});for(let summary of part.summary)content.push({type:`reasoning`,text:summary.text,providerMetadata:{openai:{itemId:part.id,reasoningEncryptedContent:(_a$10=part.encrypted_content)==null?null:_a$10}}});break;case`message`:for(let contentPart of part.content){(_c$2=(_b$2=options$1.providerOptions)==null?void 0:_b$2.openai)!=null&&_c$2.logprobs&&contentPart.logprobs&&logprobs.push(contentPart.logprobs),content.push({type:`text`,text:contentPart.text,providerMetadata:{openai:{itemId:part.id}}});for(let annotation of contentPart.annotations)annotation.type===`url_citation`?content.push({type:`source`,sourceType:`url`,id:(_f=(_e$1=(_d$1=this.config).generateId)==null?void 0:_e$1.call(_d$1))==null?generateId():_f,url:annotation.url,title:annotation.title}):annotation.type===`file_citation`&&content.push({type:`source`,sourceType:`document`,id:(_i=(_h=(_g=this.config).generateId)==null?void 0:_h.call(_g))==null?generateId():_i,mediaType:`text/plain`,title:(_k=(_j=annotation.quote)==null?annotation.filename:_j)==null?`Document`:_k,filename:(_l=annotation.filename)==null?annotation.file_id:_l})}break;case`function_call`:hasFunctionCall=!0,content.push({type:`tool-call`,toolCallId:part.call_id,toolName:part.name,input:part.arguments,providerMetadata:{openai:{itemId:part.id}}});break;case`web_search_call`:content.push({type:`tool-call`,toolCallId:part.id,toolName:webSearchToolName==null?`web_search`:webSearchToolName,input:JSON.stringify({action:part.action}),providerExecuted:!0}),content.push({type:`tool-result`,toolCallId:part.id,toolName:webSearchToolName==null?`web_search`:webSearchToolName,result:{status:part.status},providerExecuted:!0});break;case`computer_call`:content.push({type:`tool-call`,toolCallId:part.id,toolName:`computer_use`,input:``,providerExecuted:!0}),content.push({type:`tool-result`,toolCallId:part.id,toolName:`computer_use`,result:{type:`computer_use_tool_result`,status:part.status||`completed`},providerExecuted:!0});break;case`file_search_call`:content.push({type:`tool-call`,toolCallId:part.id,toolName:`file_search`,input:``,providerExecuted:!0}),content.push({type:`tool-result`,toolCallId:part.id,toolName:`file_search`,result:{type:`file_search_tool_result`,status:part.status||`completed`,...part.queries&&{queries:part.queries},...part.results&&{results:part.results}},providerExecuted:!0});break}let providerMetadata={openai:{responseId:response.id}};return logprobs.length>0&&(providerMetadata.openai.logprobs=logprobs),typeof response.service_tier==`string`&&(providerMetadata.openai.serviceTier=response.service_tier),{content,finishReason:mapOpenAIResponseFinishReason({finishReason:(_m=response.incomplete_details)==null?void 0:_m.reason,hasFunctionCall}),usage:{inputTokens:response.usage.input_tokens,outputTokens:response.usage.output_tokens,totalTokens:response.usage.input_tokens+response.usage.output_tokens,reasoningTokens:(_o=(_n=response.usage.output_tokens_details)==null?void 0:_n.reasoning_tokens)==null?void 0:_o,cachedInputTokens:(_q=(_p=response.usage.input_tokens_details)==null?void 0:_p.cached_tokens)==null?void 0:_q},request:{body},response:{id:response.id,timestamp:new Date(response.created_at*1e3),modelId:response.model,headers:responseHeaders,body:rawResponse},providerMetadata,warnings}}async doStream(options$1){let{args:body,warnings,webSearchToolName}=await this.getArgs(options$1),{responseHeaders,value:response}=await postJsonToApi({url:this.config.url({path:`/responses`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body:{...body,stream:!0},failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createEventSourceResponseHandler(openaiResponsesChunkSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),self$1=this,finishReason=`unknown`,usage={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},logprobs=[],responseId=null,ongoingToolCalls={},hasFunctionCall=!1,activeReasoning={},serviceTier;return{stream:response.pipeThrough(new TransformStream({start(controller){controller.enqueue({type:`stream-start`,warnings})},transform(chunk$1,controller){var _a$10,_b$2,_c$2,_d$1,_e$1,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q,_r,_s,_t,_u;if(options$1.includeRawChunks&&controller.enqueue({type:`raw`,rawValue:chunk$1.rawValue}),!chunk$1.success){finishReason=`error`,controller.enqueue({type:`error`,error:chunk$1.error});return}let value=chunk$1.value;if(isResponseOutputItemAddedChunk(value))value.item.type===`function_call`?(ongoingToolCalls[value.output_index]={toolName:value.item.name,toolCallId:value.item.call_id},controller.enqueue({type:`tool-input-start`,id:value.item.call_id,toolName:value.item.name})):value.item.type===`web_search_call`?(ongoingToolCalls[value.output_index]={toolName:webSearchToolName==null?`web_search`:webSearchToolName,toolCallId:value.item.id},controller.enqueue({type:`tool-input-start`,id:value.item.id,toolName:webSearchToolName==null?`web_search`:webSearchToolName})):value.item.type===`computer_call`?(ongoingToolCalls[value.output_index]={toolName:`computer_use`,toolCallId:value.item.id},controller.enqueue({type:`tool-input-start`,id:value.item.id,toolName:`computer_use`})):value.item.type===`file_search_call`?(ongoingToolCalls[value.output_index]={toolName:`file_search`,toolCallId:value.item.id},controller.enqueue({type:`tool-input-start`,id:value.item.id,toolName:`file_search`})):value.item.type===`message`?controller.enqueue({type:`text-start`,id:value.item.id,providerMetadata:{openai:{itemId:value.item.id}}}):isResponseOutputItemAddedReasoningChunk(value)&&(activeReasoning[value.item.id]={encryptedContent:value.item.encrypted_content,summaryParts:[0]},controller.enqueue({type:`reasoning-start`,id:`${value.item.id}:0`,providerMetadata:{openai:{itemId:value.item.id,reasoningEncryptedContent:(_a$10=value.item.encrypted_content)==null?null:_a$10}}}));else if(isResponseOutputItemDoneChunk(value)){if(value.item.type===`function_call`)ongoingToolCalls[value.output_index]=void 0,hasFunctionCall=!0,controller.enqueue({type:`tool-input-end`,id:value.item.call_id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.call_id,toolName:value.item.name,input:value.item.arguments,providerMetadata:{openai:{itemId:value.item.id}}});else if(value.item.type===`web_search_call`)ongoingToolCalls[value.output_index]=void 0,controller.enqueue({type:`tool-input-end`,id:value.item.id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.id,toolName:`web_search`,input:JSON.stringify({action:value.item.action}),providerExecuted:!0}),controller.enqueue({type:`tool-result`,toolCallId:value.item.id,toolName:`web_search`,result:{status:value.item.status},providerExecuted:!0});else if(value.item.type===`computer_call`)ongoingToolCalls[value.output_index]=void 0,controller.enqueue({type:`tool-input-end`,id:value.item.id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.id,toolName:`computer_use`,input:``,providerExecuted:!0}),controller.enqueue({type:`tool-result`,toolCallId:value.item.id,toolName:`computer_use`,result:{type:`computer_use_tool_result`,status:value.item.status||`completed`},providerExecuted:!0});else if(value.item.type===`file_search_call`)ongoingToolCalls[value.output_index]=void 0,controller.enqueue({type:`tool-input-end`,id:value.item.id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.id,toolName:`file_search`,input:``,providerExecuted:!0}),controller.enqueue({type:`tool-result`,toolCallId:value.item.id,toolName:`file_search`,result:{type:`file_search_tool_result`,status:value.item.status||`completed`,...value.item.queries&&{queries:value.item.queries},...value.item.results&&{results:value.item.results}},providerExecuted:!0});else if(value.item.type===`message`)controller.enqueue({type:`text-end`,id:value.item.id});else if(isResponseOutputItemDoneReasoningChunk(value)){let activeReasoningPart=activeReasoning[value.item.id];for(let summaryIndex of activeReasoningPart.summaryParts)controller.enqueue({type:`reasoning-end`,id:`${value.item.id}:${summaryIndex}`,providerMetadata:{openai:{itemId:value.item.id,reasoningEncryptedContent:(_b$2=value.item.encrypted_content)==null?null:_b$2}}});delete activeReasoning[value.item.id]}}else if(isResponseFunctionCallArgumentsDeltaChunk(value)){let toolCall=ongoingToolCalls[value.output_index];toolCall!=null&&controller.enqueue({type:`tool-input-delta`,id:toolCall.toolCallId,delta:value.delta})}else isResponseCreatedChunk(value)?(responseId=value.response.id,controller.enqueue({type:`response-metadata`,id:value.response.id,timestamp:new Date(value.response.created_at*1e3),modelId:value.response.model})):isTextDeltaChunk(value)?(controller.enqueue({type:`text-delta`,id:value.item_id,delta:value.delta}),(_d$1=(_c$2=options$1.providerOptions)==null?void 0:_c$2.openai)!=null&&_d$1.logprobs&&value.logprobs&&logprobs.push(value.logprobs)):isResponseReasoningSummaryPartAddedChunk(value)?value.summary_index>0&&((_e$1=activeReasoning[value.item_id])==null||_e$1.summaryParts.push(value.summary_index),controller.enqueue({type:`reasoning-start`,id:`${value.item_id}:${value.summary_index}`,providerMetadata:{openai:{itemId:value.item_id,reasoningEncryptedContent:(_g=(_f=activeReasoning[value.item_id])==null?void 0:_f.encryptedContent)==null?null:_g}}})):isResponseReasoningSummaryTextDeltaChunk(value)?controller.enqueue({type:`reasoning-delta`,id:`${value.item_id}:${value.summary_index}`,delta:value.delta,providerMetadata:{openai:{itemId:value.item_id}}}):isResponseFinishedChunk(value)?(finishReason=mapOpenAIResponseFinishReason({finishReason:(_h=value.response.incomplete_details)==null?void 0:_h.reason,hasFunctionCall}),usage.inputTokens=value.response.usage.input_tokens,usage.outputTokens=value.response.usage.output_tokens,usage.totalTokens=value.response.usage.input_tokens+value.response.usage.output_tokens,usage.reasoningTokens=(_j=(_i=value.response.usage.output_tokens_details)==null?void 0:_i.reasoning_tokens)==null?void 0:_j,usage.cachedInputTokens=(_l=(_k=value.response.usage.input_tokens_details)==null?void 0:_k.cached_tokens)==null?void 0:_l,typeof value.response.service_tier==`string`&&(serviceTier=value.response.service_tier)):isResponseAnnotationAddedChunk(value)?value.annotation.type===`url_citation`?controller.enqueue({type:`source`,sourceType:`url`,id:(_o=(_n=(_m=self$1.config).generateId)==null?void 0:_n.call(_m))==null?generateId():_o,url:value.annotation.url,title:value.annotation.title}):value.annotation.type===`file_citation`&&controller.enqueue({type:`source`,sourceType:`document`,id:(_r=(_q=(_p=self$1.config).generateId)==null?void 0:_q.call(_p))==null?generateId():_r,mediaType:`text/plain`,title:(_t=(_s=value.annotation.quote)==null?value.annotation.filename:_s)==null?`Document`:_t,filename:(_u=value.annotation.filename)==null?value.annotation.file_id:_u}):isErrorChunk(value)&&controller.enqueue({type:`error`,error:value})},flush(controller){let providerMetadata={openai:{responseId}};logprobs.length>0&&(providerMetadata.openai.logprobs=logprobs),serviceTier!==void 0&&(providerMetadata.openai.serviceTier=serviceTier),controller.enqueue({type:`finish`,finishReason,usage,providerMetadata})}})),request:{body},response:{headers:responseHeaders}}}},usageSchema2=z$2.object({input_tokens:z$2.number(),input_tokens_details:z$2.object({cached_tokens:z$2.number().nullish()}).nullish(),output_tokens:z$2.number(),output_tokens_details:z$2.object({reasoning_tokens:z$2.number().nullish()}).nullish()}),textDeltaChunkSchema=z$2.object({type:z$2.literal(`response.output_text.delta`),item_id:z$2.string(),delta:z$2.string(),logprobs:LOGPROBS_SCHEMA.nullish()}),errorChunkSchema=z$2.object({type:z$2.literal(`error`),code:z$2.string(),message:z$2.string(),param:z$2.string().nullish(),sequence_number:z$2.number()}),responseFinishedChunkSchema=z$2.object({type:z$2.enum([`response.completed`,`response.incomplete`]),response:z$2.object({incomplete_details:z$2.object({reason:z$2.string()}).nullish(),usage:usageSchema2,service_tier:z$2.string().nullish()})}),responseCreatedChunkSchema=z$2.object({type:z$2.literal(`response.created`),response:z$2.object({id:z$2.string(),created_at:z$2.number(),model:z$2.string(),service_tier:z$2.string().nullish()})}),responseOutputItemAddedSchema=z$2.object({type:z$2.literal(`response.output_item.added`),output_index:z$2.number(),item:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`message`),id:z$2.string()}),z$2.object({type:z$2.literal(`reasoning`),id:z$2.string(),encrypted_content:z$2.string().nullish()}),z$2.object({type:z$2.literal(`function_call`),id:z$2.string(),call_id:z$2.string(),name:z$2.string(),arguments:z$2.string()}),z$2.object({type:z$2.literal(`web_search_call`),id:z$2.string(),status:z$2.string(),action:z$2.object({type:z$2.literal(`search`),query:z$2.string().optional()}).nullish()}),z$2.object({type:z$2.literal(`computer_call`),id:z$2.string(),status:z$2.string()}),z$2.object({type:z$2.literal(`file_search_call`),id:z$2.string(),status:z$2.string(),queries:z$2.array(z$2.string()).nullish(),results:z$2.array(z$2.object({attributes:z$2.object({file_id:z$2.string(),filename:z$2.string(),score:z$2.number(),text:z$2.string()})})).optional()})])}),responseOutputItemDoneSchema=z$2.object({type:z$2.literal(`response.output_item.done`),output_index:z$2.number(),item:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`message`),id:z$2.string()}),z$2.object({type:z$2.literal(`reasoning`),id:z$2.string(),encrypted_content:z$2.string().nullish()}),z$2.object({type:z$2.literal(`function_call`),id:z$2.string(),call_id:z$2.string(),name:z$2.string(),arguments:z$2.string(),status:z$2.literal(`completed`)}),webSearchCallItem,z$2.object({type:z$2.literal(`computer_call`),id:z$2.string(),status:z$2.literal(`completed`)}),z$2.object({type:z$2.literal(`file_search_call`),id:z$2.string(),status:z$2.literal(`completed`),queries:z$2.array(z$2.string()).nullish(),results:z$2.array(z$2.object({attributes:z$2.object({file_id:z$2.string(),filename:z$2.string(),score:z$2.number(),text:z$2.string()})})).nullish()})])}),responseFunctionCallArgumentsDeltaSchema=z$2.object({type:z$2.literal(`response.function_call_arguments.delta`),item_id:z$2.string(),output_index:z$2.number(),delta:z$2.string()}),responseAnnotationAddedSchema=z$2.object({type:z$2.literal(`response.output_text.annotation.added`),annotation:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`url_citation`),url:z$2.string(),title:z$2.string()}),z$2.object({type:z$2.literal(`file_citation`),file_id:z$2.string(),filename:z$2.string().nullish(),index:z$2.number().nullish(),start_index:z$2.number().nullish(),end_index:z$2.number().nullish(),quote:z$2.string().nullish()})])}),responseReasoningSummaryPartAddedSchema=z$2.object({type:z$2.literal(`response.reasoning_summary_part.added`),item_id:z$2.string(),summary_index:z$2.number()}),responseReasoningSummaryTextDeltaSchema=z$2.object({type:z$2.literal(`response.reasoning_summary_text.delta`),item_id:z$2.string(),summary_index:z$2.number(),delta:z$2.string()}),openaiResponsesChunkSchema=z$2.union([textDeltaChunkSchema,responseFinishedChunkSchema,responseCreatedChunkSchema,responseOutputItemAddedSchema,responseOutputItemDoneSchema,responseFunctionCallArgumentsDeltaSchema,responseAnnotationAddedSchema,responseReasoningSummaryPartAddedSchema,responseReasoningSummaryTextDeltaSchema,errorChunkSchema,z$2.object({type:z$2.string()}).loose()]);function isTextDeltaChunk(chunk$1){return chunk$1.type===`response.output_text.delta`}function isResponseOutputItemDoneChunk(chunk$1){return chunk$1.type===`response.output_item.done`}function isResponseOutputItemDoneReasoningChunk(chunk$1){return isResponseOutputItemDoneChunk(chunk$1)&&chunk$1.item.type===`reasoning`}function isResponseFinishedChunk(chunk$1){return chunk$1.type===`response.completed`||chunk$1.type===`response.incomplete`}function isResponseCreatedChunk(chunk$1){return chunk$1.type===`response.created`}function isResponseFunctionCallArgumentsDeltaChunk(chunk$1){return chunk$1.type===`response.function_call_arguments.delta`}function isResponseOutputItemAddedChunk(chunk$1){return chunk$1.type===`response.output_item.added`}function isResponseOutputItemAddedReasoningChunk(chunk$1){return isResponseOutputItemAddedChunk(chunk$1)&&chunk$1.item.type===`reasoning`}function isResponseAnnotationAddedChunk(chunk$1){return chunk$1.type===`response.output_text.annotation.added`}function isResponseReasoningSummaryPartAddedChunk(chunk$1){return chunk$1.type===`response.reasoning_summary_part.added`}function isResponseReasoningSummaryTextDeltaChunk(chunk$1){return chunk$1.type===`response.reasoning_summary_text.delta`}function isErrorChunk(chunk$1){return chunk$1.type===`error`}function getResponsesModelConfig(modelId){let supportsFlexProcessing2=modelId.startsWith(`o3`)||modelId.startsWith(`o4-mini`)||modelId.startsWith(`gpt-5`)&&!modelId.startsWith(`gpt-5-chat`),supportsPriorityProcessing2=modelId.startsWith(`gpt-4`)||modelId.startsWith(`gpt-5-mini`)||modelId.startsWith(`gpt-5`)&&!modelId.startsWith(`gpt-5-nano`)&&!modelId.startsWith(`gpt-5-chat`)||modelId.startsWith(`o3`)||modelId.startsWith(`o4-mini`),defaults$2={requiredAutoTruncation:!1,systemMessageMode:`system`,supportsFlexProcessing:supportsFlexProcessing2,supportsPriorityProcessing:supportsPriorityProcessing2};return modelId.startsWith(`gpt-5-chat`)?{...defaults$2,isReasoningModel:!1}:modelId.startsWith(`o`)||modelId.startsWith(`gpt-5`)||modelId.startsWith(`codex-`)||modelId.startsWith(`computer-use`)?modelId.startsWith(`o1-mini`)||modelId.startsWith(`o1-preview`)?{...defaults$2,isReasoningModel:!0,systemMessageMode:`remove`}:{...defaults$2,isReasoningModel:!0,systemMessageMode:`developer`}:{...defaults$2,isReasoningModel:!1}}var openaiResponsesProviderOptionsSchema=z$2.object({metadata:z$2.any().nullish(),parallelToolCalls:z$2.boolean().nullish(),previousResponseId:z$2.string().nullish(),store:z$2.boolean().nullish(),user:z$2.string().nullish(),reasoningEffort:z$2.string().nullish(),strictJsonSchema:z$2.boolean().nullish(),instructions:z$2.string().nullish(),reasoningSummary:z$2.string().nullish(),serviceTier:z$2.enum([`auto`,`flex`,`priority`]).nullish(),include:z$2.array(z$2.enum([`reasoning.encrypted_content`,`file_search_call.results`,`message.output_text.logprobs`])).nullish(),textVerbosity:z$2.enum([`low`,`medium`,`high`]).nullish(),promptCacheKey:z$2.string().nullish(),safetyIdentifier:z$2.string().nullish(),logprobs:z$2.union([z$2.boolean(),z$2.number().min(1).max(TOP_LOGPROBS_MAX)]).optional()}),OpenAIProviderOptionsSchema=z$2.object({instructions:z$2.string().nullish(),speed:z$2.number().min(.25).max(4).default(1).nullish()}),OpenAISpeechModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`}get provider(){return this.config.provider}async getArgs({text,voice=`alloy`,outputFormat=`mp3`,speed,instructions,language,providerOptions}){let warnings=[],openAIOptions=await parseProviderOptions({provider:`openai`,providerOptions,schema:OpenAIProviderOptionsSchema}),requestBody={model:this.modelId,input:text,voice,response_format:`mp3`,speed,instructions};if(outputFormat&&([`mp3`,`opus`,`aac`,`flac`,`wav`,`pcm`].includes(outputFormat)?requestBody.response_format=outputFormat:warnings.push({type:`unsupported-setting`,setting:`outputFormat`,details:`Unsupported output format: ${outputFormat}. Using mp3 instead.`})),openAIOptions){let speechModelOptions={};for(let key in speechModelOptions){let value=speechModelOptions[key];value!==void 0&&(requestBody[key]=value)}}return language&&warnings.push({type:`unsupported-setting`,setting:`language`,details:`OpenAI speech models do not support language selection. Language parameter "${language}" was ignored.`}),{requestBody,warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2;let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{requestBody,warnings}=await this.getArgs(options$1),{value:audio,responseHeaders,rawValue:rawResponse}=await postJsonToApi({url:this.config.url({path:`/audio/speech`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body:requestBody,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createBinaryResponseHandler(),abortSignal:options$1.abortSignal,fetch:this.config.fetch});return{audio,warnings,request:{body:JSON.stringify(requestBody)},response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders,body:rawResponse}}}},openAITranscriptionProviderOptions=z$2.object({include:z$2.array(z$2.string()).optional(),language:z$2.string().optional(),prompt:z$2.string().optional(),temperature:z$2.number().min(0).max(1).default(0).optional(),timestampGranularities:z$2.array(z$2.enum([`word`,`segment`])).default([`segment`]).optional()}),languageMap={afrikaans:`af`,arabic:`ar`,armenian:`hy`,azerbaijani:`az`,belarusian:`be`,bosnian:`bs`,bulgarian:`bg`,catalan:`ca`,chinese:`zh`,croatian:`hr`,czech:`cs`,danish:`da`,dutch:`nl`,english:`en`,estonian:`et`,finnish:`fi`,french:`fr`,galician:`gl`,german:`de`,greek:`el`,hebrew:`he`,hindi:`hi`,hungarian:`hu`,icelandic:`is`,indonesian:`id`,italian:`it`,japanese:`ja`,kannada:`kn`,kazakh:`kk`,korean:`ko`,latvian:`lv`,lithuanian:`lt`,macedonian:`mk`,malay:`ms`,marathi:`mr`,maori:`mi`,nepali:`ne`,norwegian:`no`,persian:`fa`,polish:`pl`,portuguese:`pt`,romanian:`ro`,russian:`ru`,serbian:`sr`,slovak:`sk`,slovenian:`sl`,spanish:`es`,swahili:`sw`,swedish:`sv`,tagalog:`tl`,tamil:`ta`,thai:`th`,turkish:`tr`,ukrainian:`uk`,urdu:`ur`,vietnamese:`vi`,welsh:`cy`},OpenAITranscriptionModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`}get provider(){return this.config.provider}async getArgs({audio,mediaType,providerOptions}){let warnings=[],openAIOptions=await parseProviderOptions({provider:`openai`,providerOptions,schema:openAITranscriptionProviderOptions}),formData=new FormData,blob=audio instanceof Uint8Array?new Blob([audio]):new Blob([convertBase64ToUint8Array(audio)]);formData.append(`model`,this.modelId);let fileExtension=mediaTypeToExtension(mediaType);if(formData.append(`file`,new File([blob],`audio`,{type:mediaType}),`audio.${fileExtension}`),openAIOptions){let transcriptionModelOptions={include:openAIOptions.include,language:openAIOptions.language,prompt:openAIOptions.prompt,response_format:[`gpt-4o-transcribe`,`gpt-4o-mini-transcribe`].includes(this.modelId)?`json`:`verbose_json`,temperature:openAIOptions.temperature,timestamp_granularities:openAIOptions.timestampGranularities};for(let[key,value]of Object.entries(transcriptionModelOptions))if(value!=null)if(Array.isArray(value))for(let item of value)formData.append(`${key}[]`,String(item));else formData.append(key,String(value))}return{formData,warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2,_d$1,_e$1,_f,_g,_h;let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{formData,warnings}=await this.getArgs(options$1),{value:response,responseHeaders,rawValue:rawResponse}=await postFormDataToApi({url:this.config.url({path:`/audio/transcriptions`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),formData,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiTranscriptionResponseSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),language=response.language!=null&&response.language in languageMap?languageMap[response.language]:void 0;return{text:response.text,segments:(_g=(_f=(_d$1=response.segments)==null?void 0:_d$1.map(segment=>({text:segment.text,startSecond:segment.start,endSecond:segment.end})))==null?(_e$1=response.words)==null?void 0:_e$1.map(word=>({text:word.word,startSecond:word.start,endSecond:word.end})):_f)==null?[]:_g,language,durationInSeconds:(_h=response.duration)==null?void 0:_h,warnings,response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders,body:rawResponse}}}},openaiTranscriptionResponseSchema=z$2.object({text:z$2.string(),language:z$2.string().nullish(),duration:z$2.number().nullish(),words:z$2.array(z$2.object({word:z$2.string(),start:z$2.number(),end:z$2.number()})).nullish(),segments:z$2.array(z$2.object({id:z$2.number(),seek:z$2.number(),start:z$2.number(),end:z$2.number(),text:z$2.string(),tokens:z$2.array(z$2.number()),temperature:z$2.number(),avg_logprob:z$2.number(),compression_ratio:z$2.number(),no_speech_prob:z$2.number()})).nullish()});function createOpenAI(options$1={}){var _a$10,_b$2;let baseURL=(_a$10=withoutTrailingSlash(options$1.baseURL))==null?`https://api.openai.com/v1`:_a$10,providerName=(_b$2=options$1.name)==null?`openai`:_b$2,getHeaders$1=()=>({Authorization:`Bearer ${loadApiKey({apiKey:options$1.apiKey,environmentVariableName:`OPENAI_API_KEY`,description:`OpenAI`})}`,"OpenAI-Organization":options$1.organization,"OpenAI-Project":options$1.project,...options$1.headers}),createChatModel=modelId=>new OpenAIChatLanguageModel(modelId,{provider:`${providerName}.chat`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createCompletionModel=modelId=>new OpenAICompletionLanguageModel(modelId,{provider:`${providerName}.completion`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createEmbeddingModel=modelId=>new OpenAIEmbeddingModel(modelId,{provider:`${providerName}.embedding`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createImageModel=modelId=>new OpenAIImageModel(modelId,{provider:`${providerName}.image`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createTranscriptionModel=modelId=>new OpenAITranscriptionModel(modelId,{provider:`${providerName}.transcription`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createSpeechModel=modelId=>new OpenAISpeechModel(modelId,{provider:`${providerName}.speech`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createLanguageModel=modelId=>{if(new.target)throw Error(`The OpenAI model function cannot be called with the new keyword.`);return createResponsesModel(modelId)},createResponsesModel=modelId=>new OpenAIResponsesLanguageModel(modelId,{provider:`${providerName}.responses`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch,fileIdPrefixes:[`file-`]}),provider=function(modelId){return createLanguageModel(modelId)};return provider.languageModel=createLanguageModel,provider.chat=createChatModel,provider.completion=createCompletionModel,provider.responses=createResponsesModel,provider.embedding=createEmbeddingModel,provider.textEmbedding=createEmbeddingModel,provider.textEmbeddingModel=createEmbeddingModel,provider.image=createImageModel,provider.imageModel=createImageModel,provider.transcription=createTranscriptionModel,provider.transcriptionModel=createTranscriptionModel,provider.speech=createSpeechModel,provider.speechModel=createSpeechModel,provider.tools=openaiTools,provider}var openai=createOpenAI(),openaiCompatibleProviderOptions=z$2.object({user:z$2.string().optional(),reasoningEffort:z$2.string().optional()}),openaiCompatibleErrorDataSchema=z$2.object({error:z$2.object({message:z$2.string(),type:z$2.string().nullish(),param:z$2.any().nullish(),code:z$2.union([z$2.string(),z$2.number()]).nullish()})}),defaultOpenAICompatibleErrorStructure={errorSchema:openaiCompatibleErrorDataSchema,errorToMessage:data$2=>data$2.error.message},openaiCompatibleTokenUsageSchema=z$2.object({prompt_tokens:z$2.number().nullish(),completion_tokens:z$2.number().nullish(),total_tokens:z$2.number().nullish(),prompt_tokens_details:z$2.object({cached_tokens:z$2.number().nullish()}).nullish(),completion_tokens_details:z$2.object({reasoning_tokens:z$2.number().nullish(),accepted_prediction_tokens:z$2.number().nullish(),rejected_prediction_tokens:z$2.number().nullish()}).nullish()}).nullish(),OpenAICompatibleChatResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({message:z$2.object({role:z$2.literal(`assistant`).nullish(),content:z$2.string().nullish(),reasoning_content:z$2.string().nullish(),reasoning:z$2.string().nullish(),tool_calls:z$2.array(z$2.object({id:z$2.string().nullish(),function:z$2.object({name:z$2.string(),arguments:z$2.string()})})).nullish()}),finish_reason:z$2.string().nullish()})),usage:openaiCompatibleTokenUsageSchema}),openaiCompatibleCompletionProviderOptions=z$2.object({echo:z$2.boolean().optional(),logitBias:z$2.record(z$2.string(),z$2.number()).optional(),suffix:z$2.string().optional(),user:z$2.string().optional()}),usageSchema=z$2.object({prompt_tokens:z$2.number(),completion_tokens:z$2.number(),total_tokens:z$2.number()}),openaiCompatibleCompletionResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({text:z$2.string(),finish_reason:z$2.string()})),usage:usageSchema.nullish()}),openaiCompatibleEmbeddingProviderOptions=z$2.object({dimensions:z$2.number().optional(),user:z$2.string().optional()}),openaiTextEmbeddingResponseSchema=z$2.object({data:z$2.array(z$2.object({embedding:z$2.array(z$2.number())})),usage:z$2.object({prompt_tokens:z$2.number()}).nullish(),providerMetadata:z$2.record(z$2.string(),z$2.record(z$2.string(),z$2.any())).optional()}),OpenAICompatibleImageModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`,this.maxImagesPerCall=10}get provider(){return this.config.provider}async doGenerate({prompt,n:n$2,size,aspectRatio,seed,providerOptions,headers,abortSignal}){var _a$10,_b$2,_c$2,_d$1,_e$1;let warnings=[];aspectRatio!=null&&warnings.push({type:`unsupported-setting`,setting:`aspectRatio`,details:"This model does not support aspect ratio. Use `size` instead."}),seed!=null&&warnings.push({type:`unsupported-setting`,setting:`seed`});let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{value:response,responseHeaders}=await postJsonToApi({url:this.config.url({path:`/images/generations`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),headers),body:{model:this.modelId,prompt,n:n$2,size,...(_d$1=providerOptions.openai)==null?{}:_d$1,response_format:`b64_json`},failedResponseHandler:createJsonErrorResponseHandler((_e$1=this.config.errorStructure)==null?defaultOpenAICompatibleErrorStructure:_e$1),successfulResponseHandler:createJsonResponseHandler(openaiCompatibleImageResponseSchema),abortSignal,fetch:this.config.fetch});return{images:response.data.map(item=>item.b64_json),warnings,response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders}}}},openaiCompatibleImageResponseSchema=z$2.object({data:z$2.array(z$2.object({b64_json:z$2.string()}))});function convertToXaiChatMessages(prompt){let messages$1=[],warnings=[];for(let{role,content}of prompt)switch(role){case`system`:messages$1.push({role:`system`,content});break;case`user`:if(content.length===1&&content[0].type===`text`){messages$1.push({role:`user`,content:content[0].text});break}messages$1.push({role:`user`,content:content.map(part=>{switch(part.type){case`text`:return{type:`text`,text:part.text};case`file`:if(part.mediaType.startsWith(`image/`)){let mediaType=part.mediaType===`image/*`?`image/jpeg`:part.mediaType;return{type:`image_url`,image_url:{url:part.data instanceof URL?part.data.toString():`data:${mediaType};base64,${convertToBase64(part.data)}`}}}else throw new UnsupportedFunctionalityError({functionality:`file part media type ${part.mediaType}`})}})});break;case`assistant`:{let text=``,toolCalls=[];for(let part of content)switch(part.type){case`text`:text+=part.text;break;case`tool-call`:toolCalls.push({id:part.toolCallId,type:`function`,function:{name:part.toolName,arguments:JSON.stringify(part.input)}});break}messages$1.push({role:`assistant`,content:text,tool_calls:toolCalls.length>0?toolCalls:void 0});break}case`tool`:for(let toolResponse of content){let output=toolResponse.output,contentValue;switch(output.type){case`text`:case`error-text`:contentValue=output.value;break;case`content`:case`json`:case`error-json`:contentValue=JSON.stringify(output.value);break}messages$1.push({role:`tool`,tool_call_id:toolResponse.toolCallId,content:contentValue})}break;default:{let _exhaustiveCheck=role;throw Error(`Unsupported role: ${_exhaustiveCheck}`)}}return{messages:messages$1,warnings}}function getResponseMetadata({id,model,created}){return{id:id==null?void 0:id,modelId:model==null?void 0:model,timestamp:created==null?void 0:new Date(created*1e3)}}function mapXaiFinishReason(finishReason){switch(finishReason){case`stop`:return`stop`;case`length`:return`length`;case`tool_calls`:case`function_call`:return`tool-calls`;case`content_filter`:return`content-filter`;default:return`unknown`}}var webSourceSchema=z$2.object({type:z$2.literal(`web`),country:z$2.string().length(2).optional(),excludedWebsites:z$2.array(z$2.string()).max(5).optional(),allowedWebsites:z$2.array(z$2.string()).max(5).optional(),safeSearch:z$2.boolean().optional()}),xSourceSchema=z$2.object({type:z$2.literal(`x`),xHandles:z$2.array(z$2.string()).optional()}),newsSourceSchema=z$2.object({type:z$2.literal(`news`),country:z$2.string().length(2).optional(),excludedWebsites:z$2.array(z$2.string()).max(5).optional(),safeSearch:z$2.boolean().optional()}),rssSourceSchema=z$2.object({type:z$2.literal(`rss`),links:z$2.array(z$2.string().url()).max(1)}),searchSourceSchema=z$2.discriminatedUnion(`type`,[webSourceSchema,xSourceSchema,newsSourceSchema,rssSourceSchema]),xaiProviderOptions=z$2.object({reasoningEffort:z$2.enum([`low`,`high`]).optional(),searchParameters:z$2.object({mode:z$2.enum([`off`,`auto`,`on`]),returnCitations:z$2.boolean().optional(),fromDate:z$2.string().optional(),toDate:z$2.string().optional(),maxSearchResults:z$2.number().min(1).max(50).optional(),sources:z$2.array(searchSourceSchema).optional()}).optional()}),xaiErrorDataSchema=z$2.object({error:z$2.object({message:z$2.string(),type:z$2.string().nullish(),param:z$2.any().nullish(),code:z$2.union([z$2.string(),z$2.number()]).nullish()})}),xaiFailedResponseHandler=createJsonErrorResponseHandler({errorSchema:xaiErrorDataSchema,errorToMessage:data$2=>data$2.error.message});function prepareTools({tools,toolChoice}){tools=tools!=null&&tools.length?tools:void 0;let toolWarnings=[];if(tools==null)return{tools:void 0,toolChoice:void 0,toolWarnings};let xaiTools=[];for(let tool$1 of tools)tool$1.type===`provider-defined`?toolWarnings.push({type:`unsupported-tool`,tool:tool$1}):xaiTools.push({type:`function`,function:{name:tool$1.name,description:tool$1.description,parameters:tool$1.inputSchema}});if(toolChoice==null)return{tools:xaiTools,toolChoice:void 0,toolWarnings};let type=toolChoice.type;switch(type){case`auto`:case`none`:return{tools:xaiTools,toolChoice:type,toolWarnings};case`required`:return{tools:xaiTools,toolChoice:`required`,toolWarnings};case`tool`:return{tools:xaiTools,toolChoice:{type:`function`,function:{name:toolChoice.toolName}},toolWarnings};default:{let _exhaustiveCheck=type;throw new UnsupportedFunctionalityError({functionality:`tool choice type: ${_exhaustiveCheck}`})}}}var XaiChatLanguageModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.supportedUrls={"image/*":[/^https?:\/\/.*$/]},this.modelId=modelId,this.config=config}get provider(){return this.config.provider}async getArgs({prompt,maxOutputTokens,temperature,topP,topK,frequencyPenalty,presencePenalty,stopSequences,seed,responseFormat,providerOptions,tools,toolChoice}){var _a$10,_b$2,_c$2;let warnings=[],options$1=(_a$10=await parseProviderOptions({provider:`xai`,providerOptions,schema:xaiProviderOptions}))==null?{}:_a$10;topK!=null&&warnings.push({type:`unsupported-setting`,setting:`topK`}),frequencyPenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`frequencyPenalty`}),presencePenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`presencePenalty`}),stopSequences!=null&&warnings.push({type:`unsupported-setting`,setting:`stopSequences`}),responseFormat!=null&&responseFormat.type===`json`&&responseFormat.schema!=null&&warnings.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is not supported`});let{messages:messages$1,warnings:messageWarnings}=convertToXaiChatMessages(prompt);warnings.push(...messageWarnings);let{tools:xaiTools,toolChoice:xaiToolChoice,toolWarnings}=prepareTools({tools,toolChoice});warnings.push(...toolWarnings);let baseArgs={model:this.modelId,max_tokens:maxOutputTokens,temperature,top_p:topP,seed,reasoning_effort:options$1.reasoningEffort,response_format:(responseFormat==null?void 0:responseFormat.type)===`json`?responseFormat.schema==null?{type:`json_object`}:{type:`json_schema`,json_schema:{name:(_b$2=responseFormat.name)==null?`response`:_b$2,schema:responseFormat.schema,strict:!0}}:void 0,search_parameters:options$1.searchParameters?{mode:options$1.searchParameters.mode,return_citations:options$1.searchParameters.returnCitations,from_date:options$1.searchParameters.fromDate,to_date:options$1.searchParameters.toDate,max_search_results:options$1.searchParameters.maxSearchResults,sources:(_c$2=options$1.searchParameters.sources)==null?void 0:_c$2.map(source$39=>({type:source$39.type,...source$39.type===`web`&&{country:source$39.country,excluded_websites:source$39.excludedWebsites,allowed_websites:source$39.allowedWebsites,safe_search:source$39.safeSearch},...source$39.type===`x`&&{x_handles:source$39.xHandles},...source$39.type===`news`&&{country:source$39.country,excluded_websites:source$39.excludedWebsites,safe_search:source$39.safeSearch},...source$39.type===`rss`&&{links:source$39.links}}))}:void 0,messages:messages$1,tools:xaiTools,tool_choice:xaiToolChoice};return{args:baseArgs,warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2;let{args:body,warnings}=await this.getArgs(options$1),{responseHeaders,value:response,rawValue:rawResponse}=await postJsonToApi({url:`${(_a$10=this.config.baseURL)==null?`https://api.x.ai/v1`:_a$10}/chat/completions`,headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:xaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(xaiChatResponseSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),choice$1=response.choices[0],content=[];if(choice$1.message.content!=null&&choice$1.message.content.length>0){let text=choice$1.message.content,lastMessage=body.messages[body.messages.length-1];(lastMessage==null?void 0:lastMessage.role)===`assistant`&&text===lastMessage.content&&(text=``),text.length>0&&content.push({type:`text`,text})}if(choice$1.message.reasoning_content!=null&&choice$1.message.reasoning_content.length>0&&content.push({type:`reasoning`,text:choice$1.message.reasoning_content}),choice$1.message.tool_calls!=null)for(let toolCall of choice$1.message.tool_calls)content.push({type:`tool-call`,toolCallId:toolCall.id,toolName:toolCall.function.name,input:toolCall.function.arguments});if(response.citations!=null)for(let url$4 of response.citations)content.push({type:`source`,sourceType:`url`,id:this.config.generateId(),url:url$4});return{content,finishReason:mapXaiFinishReason(choice$1.finish_reason),usage:{inputTokens:response.usage.prompt_tokens,outputTokens:response.usage.completion_tokens,totalTokens:response.usage.total_tokens,reasoningTokens:(_c$2=(_b$2=response.usage.completion_tokens_details)==null?void 0:_b$2.reasoning_tokens)==null?void 0:_c$2},request:{body},response:{...getResponseMetadata(response),headers:responseHeaders,body:rawResponse},warnings}}async doStream(options$1){var _a$10;let{args,warnings}=await this.getArgs(options$1),body={...args,stream:!0,stream_options:{include_usage:!0}},{responseHeaders,value:response}=await postJsonToApi({url:`${(_a$10=this.config.baseURL)==null?`https://api.x.ai/v1`:_a$10}/chat/completions`,headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:xaiFailedResponseHandler,successfulResponseHandler:createEventSourceResponseHandler(xaiChatChunkSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),finishReason=`unknown`,usage={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},isFirstChunk=!0,contentBlocks={},lastReasoningDeltas={},self$1=this;return{stream:response.pipeThrough(new TransformStream({start(controller){controller.enqueue({type:`stream-start`,warnings})},transform(chunk$1,controller){var _a2$1,_b$2;if(options$1.includeRawChunks&&controller.enqueue({type:`raw`,rawValue:chunk$1.rawValue}),!chunk$1.success){controller.enqueue({type:`error`,error:chunk$1.error});return}let value=chunk$1.value;if(isFirstChunk&&(controller.enqueue({type:`response-metadata`,...getResponseMetadata(value)}),isFirstChunk=!1),value.citations!=null)for(let url$4 of value.citations)controller.enqueue({type:`source`,sourceType:`url`,id:self$1.config.generateId(),url:url$4});value.usage!=null&&(usage.inputTokens=value.usage.prompt_tokens,usage.outputTokens=value.usage.completion_tokens,usage.totalTokens=value.usage.total_tokens,usage.reasoningTokens=(_b$2=(_a2$1=value.usage.completion_tokens_details)==null?void 0:_a2$1.reasoning_tokens)==null?void 0:_b$2);let choice$1=value.choices[0];if((choice$1==null?void 0:choice$1.finish_reason)!=null&&(finishReason=mapXaiFinishReason(choice$1.finish_reason)),(choice$1==null?void 0:choice$1.delta)==null)return;let delta=choice$1.delta,choiceIndex=choice$1.index;if(delta.content!=null&&delta.content.length>0){let textContent=delta.content,lastMessage=body.messages[body.messages.length-1];if((lastMessage==null?void 0:lastMessage.role)===`assistant`&&textContent===lastMessage.content)return;let blockId=`text-${value.id||choiceIndex}`;contentBlocks[blockId]==null&&(contentBlocks[blockId]={type:`text`},controller.enqueue({type:`text-start`,id:blockId})),controller.enqueue({type:`text-delta`,id:blockId,delta:textContent})}if(delta.reasoning_content!=null&&delta.reasoning_content.length>0){let blockId=`reasoning-${value.id||choiceIndex}`;if(lastReasoningDeltas[blockId]===delta.reasoning_content)return;lastReasoningDeltas[blockId]=delta.reasoning_content,contentBlocks[blockId]==null&&(contentBlocks[blockId]={type:`reasoning`},controller.enqueue({type:`reasoning-start`,id:blockId})),controller.enqueue({type:`reasoning-delta`,id:blockId,delta:delta.reasoning_content})}if(delta.tool_calls!=null)for(let toolCall of delta.tool_calls){let toolCallId=toolCall.id;controller.enqueue({type:`tool-input-start`,id:toolCallId,toolName:toolCall.function.name}),controller.enqueue({type:`tool-input-delta`,id:toolCallId,delta:toolCall.function.arguments}),controller.enqueue({type:`tool-input-end`,id:toolCallId}),controller.enqueue({type:`tool-call`,toolCallId,toolName:toolCall.function.name,input:toolCall.function.arguments})}},flush(controller){for(let[blockId,block$1]of Object.entries(contentBlocks))controller.enqueue({type:block$1.type===`text`?`text-end`:`reasoning-end`,id:blockId});controller.enqueue({type:`finish`,finishReason,usage})}})),request:{body},response:{headers:responseHeaders}}}},xaiUsageSchema=z$2.object({prompt_tokens:z$2.number(),completion_tokens:z$2.number(),total_tokens:z$2.number(),completion_tokens_details:z$2.object({reasoning_tokens:z$2.number().nullish()}).nullish()}),xaiChatResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({message:z$2.object({role:z$2.literal(`assistant`),content:z$2.string().nullish(),reasoning_content:z$2.string().nullish(),tool_calls:z$2.array(z$2.object({id:z$2.string(),type:z$2.literal(`function`),function:z$2.object({name:z$2.string(),arguments:z$2.string()})})).nullish()}),index:z$2.number(),finish_reason:z$2.string().nullish()})),object:z$2.literal(`chat.completion`),usage:xaiUsageSchema,citations:z$2.array(z$2.string().url()).nullish()}),xaiChatChunkSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({delta:z$2.object({role:z$2.enum([`assistant`]).optional(),content:z$2.string().nullish(),reasoning_content:z$2.string().nullish(),tool_calls:z$2.array(z$2.object({id:z$2.string(),type:z$2.literal(`function`),function:z$2.object({name:z$2.string(),arguments:z$2.string()})})).nullish()}),finish_reason:z$2.string().nullish(),index:z$2.number()})),usage:xaiUsageSchema.nullish(),citations:z$2.array(z$2.string().url()).nullish()}),xaiErrorStructure={errorSchema:xaiErrorDataSchema,errorToMessage:data$2=>data$2.error.message};function createXai(options$1={}){var _a$10;let baseURL=withoutTrailingSlash((_a$10=options$1.baseURL)==null?`https://api.x.ai/v1`:_a$10),getHeaders$1=()=>({Authorization:`Bearer ${loadApiKey({apiKey:options$1.apiKey,environmentVariableName:`XAI_API_KEY`,description:`xAI API key`})}`,...options$1.headers}),createLanguageModel=modelId=>new XaiChatLanguageModel(modelId,{provider:`xai.chat`,baseURL,headers:getHeaders$1,generateId,fetch:options$1.fetch}),createImageModel=modelId=>new OpenAICompatibleImageModel(modelId,{provider:`xai.image`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch,errorStructure:xaiErrorStructure}),provider=modelId=>createLanguageModel(modelId);return provider.languageModel=createLanguageModel,provider.chat=createLanguageModel,provider.textEmbeddingModel=modelId=>{throw new NoSuchModelError({modelId,modelType:`textEmbeddingModel`})},provider.imageModel=createImageModel,provider.image=createImageModel,provider}var xai=createXai();function convertResponseToUIMessageStream(response){if(!response.body)throw Error(`Response body is required`);let responseFormat=response.headers.get(StreamResponseFormatHeader);if(!responseFormat||responseFormat===`ui-message`)return response.body.pipeThrough(new TextDecoderStream).pipeThrough(new EventSourceParserStream).pipeThrough(new TransformStream({async transform(chunk$1,controller){if(chunk$1.data===`[DONE]`)return;let result=await safeParseJSON({text:chunk$1.data});result.success?controller.enqueue(result.value):controller.error(result.error)}}));let createStream=model=>streamText({model,prompt:[{role:`user`,content:[{type:`text`,text:`Hello, world!`}]}]}).toUIMessageStream();switch(responseFormat){case`openai-chat`:return createStream(createOpenAI({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));case`openai-response`:return createStream(createOpenAI({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).responses(`fake-model`));case`anthropic`:return createStream(createAnthropic({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));case`google`:return createStream(createGoogleGenerativeAI({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));case`xai`:return createStream(createXai({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));default:throw Error(`Unsupported response format: ${responseFormat}`)}}var splitPath=path$32=>{let paths=path$32.split(`/`);return paths[0]===``&&paths.shift(),paths},splitRoutingPath=routePath=>{let{groups,path:path$32}=extractGroupsFromPath(routePath),paths=splitPath(path$32);return replaceGroupMarks(paths,groups)},extractGroupsFromPath=path$32=>{let groups=[];return path$32=path$32.replace(/\{[^}]+\}/g,(match$1,index)=>{let mark=`@${index}`;return groups.push([mark,match$1]),mark}),{groups,path:path$32}},replaceGroupMarks=(paths,groups)=>{for(let i$4=groups.length-1;i$4>=0;i$4--){let[mark]=groups[i$4];for(let j$2=paths.length-1;j$2>=0;j$2--)if(paths[j$2].includes(mark)){paths[j$2]=paths[j$2].replace(mark,groups[i$4][1]);break}}return paths},patternCache={},getPattern=(label,next)=>{if(label===`*`)return`*`;let match$1=label.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(match$1){let cacheKey=`${label}#${next}`;return patternCache[cacheKey]||(match$1[2]?patternCache[cacheKey]=next&&next[0]!==`:`&&next[0]!==`*`?[cacheKey,match$1[1],RegExp(`^${match$1[2]}(?=/${next})`)]:[label,match$1[1],RegExp(`^${match$1[2]}$`)]:patternCache[cacheKey]=[label,match$1[1],!0]),patternCache[cacheKey]}return null},tryDecode=(str$1,decoder$2)=>{try{return decoder$2(str$1)}catch{return str$1.replace(/(?:%[0-9A-Fa-f]{2})+/g,match$1=>{try{return decoder$2(match$1)}catch{return match$1}})}},tryDecodeURI=str$1=>tryDecode(str$1,decodeURI),getPath$1=request$2=>{let url$4=request$2.url,start$1=url$4.indexOf(`/`,url$4.indexOf(`:`)+4),i$4=start$1;for(;i$4<url$4.length;i$4++){let charCode=url$4.charCodeAt(i$4);if(charCode===37){let queryIndex=url$4.indexOf(`?`,i$4),path$32=url$4.slice(start$1,queryIndex===-1?void 0:queryIndex);return tryDecodeURI(path$32.includes(`%25`)?path$32.replace(/%25/g,`%2525`):path$32)}else if(charCode===63)break}return url$4.slice(start$1,i$4)},getPathNoStrict=request$2=>{let result=getPath$1(request$2);return result.length>1&&result.at(-1)===`/`?result.slice(0,-1):result},mergePath=(base,sub,...rest)=>(rest.length&&(sub=mergePath(sub,...rest)),`${base?.[0]===`/`?``:`/`}${base}${sub===`/`?``:`${base?.at(-1)===`/`?``:`/`}${sub?.[0]===`/`?sub.slice(1):sub}`}`),checkOptionalParameter=path$32=>{if(path$32.charCodeAt(path$32.length-1)!==63||!path$32.includes(`:`))return null;let segments=path$32.split(`/`),results=[],basePath=``;return segments.forEach(segment=>{if(segment!==``&&!/\:/.test(segment))basePath+=`/`+segment;else if(/\:/.test(segment))if(/\?/.test(segment)){results.length===0&&basePath===``?results.push(`/`):results.push(basePath);let optionalSegment=segment.replace(`?`,``);basePath+=`/`+optionalSegment,results.push(basePath)}else basePath+=`/`+segment}),results.filter((v$1,i$4,a$3)=>a$3.indexOf(v$1)===i$4)},_decodeURI=value=>/[%+]/.test(value)?(value.indexOf(`+`)!==-1&&(value=value.replace(/\+/g,` `)),value.indexOf(`%`)===-1?value:tryDecode(value,decodeURIComponent_)):value,_getQueryParam=(url$4,key,multiple)=>{let encoded;if(!multiple&&key&&!/[%+]/.test(key)){let keyIndex2=url$4.indexOf(`?${key}`,8);for(keyIndex2===-1&&(keyIndex2=url$4.indexOf(`&${key}`,8));keyIndex2!==-1;){let trailingKeyCode=url$4.charCodeAt(keyIndex2+key.length+1);if(trailingKeyCode===61){let valueIndex=keyIndex2+key.length+2,endIndex=url$4.indexOf(`&`,valueIndex);return _decodeURI(url$4.slice(valueIndex,endIndex===-1?void 0:endIndex))}else if(trailingKeyCode==38||isNaN(trailingKeyCode))return``;keyIndex2=url$4.indexOf(`&${key}`,keyIndex2+1)}if(encoded=/[%+]/.test(url$4),!encoded)return}let results={};encoded??=/[%+]/.test(url$4);let keyIndex=url$4.indexOf(`?`,8);for(;keyIndex!==-1;){let nextKeyIndex=url$4.indexOf(`&`,keyIndex+1),valueIndex=url$4.indexOf(`=`,keyIndex);valueIndex>nextKeyIndex&&nextKeyIndex!==-1&&(valueIndex=-1);let name$2=url$4.slice(keyIndex+1,valueIndex===-1?nextKeyIndex===-1?void 0:nextKeyIndex:valueIndex);if(encoded&&(name$2=_decodeURI(name$2)),keyIndex=nextKeyIndex,name$2===``)continue;let value;valueIndex===-1?value=``:(value=url$4.slice(valueIndex+1,nextKeyIndex===-1?void 0:nextKeyIndex),encoded&&(value=_decodeURI(value))),multiple?(results[name$2]&&Array.isArray(results[name$2])||(results[name$2]=[]),results[name$2].push(value)):results[name$2]??=value}return key?results[key]:results},getQueryParam=_getQueryParam,getQueryParams=(url$4,key)=>_getQueryParam(url$4,key,!0),decodeURIComponent_=decodeURIComponent,validCookieNameRegEx=/^[\w!#$%&'*.^`|~+-]+$/,validCookieValueRegEx=/^[ !#-:<-[\]-~]*$/,parse$16=(cookie,name$2)=>{if(name$2&&cookie.indexOf(name$2)===-1)return{};let pairs=cookie.trim().split(`;`),parsedCookie={};for(let pairStr of pairs){pairStr=pairStr.trim();let valueStartPos=pairStr.indexOf(`=`);if(valueStartPos===-1)continue;let cookieName=pairStr.substring(0,valueStartPos).trim();if(name$2&&name$2!==cookieName||!validCookieNameRegEx.test(cookieName))continue;let cookieValue=pairStr.substring(valueStartPos+1).trim();if(cookieValue.startsWith(`"`)&&cookieValue.endsWith(`"`)&&(cookieValue=cookieValue.slice(1,-1)),validCookieValueRegEx.test(cookieValue)&&(parsedCookie[cookieName]=cookieValue.indexOf(`%`)===-1?cookieValue:tryDecode(cookieValue,decodeURIComponent_),name$2))break}return parsedCookie},_serialize=(name$2,value,opt={})=>{let cookie=`${name$2}=${value}`;if(name$2.startsWith(`__Secure-`)&&!opt.secure)throw Error(`__Secure- Cookie must have Secure attributes`);if(name$2.startsWith(`__Host-`)){if(!opt.secure)throw Error(`__Host- Cookie must have Secure attributes`);if(opt.path!==`/`)throw Error(`__Host- Cookie must have Path attributes with "/"`);if(opt.domain)throw Error(`__Host- Cookie must not have Domain attributes`)}if(opt&&typeof opt.maxAge==`number`&&opt.maxAge>=0){if(opt.maxAge>3456e4)throw Error(`Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.`);cookie+=`; Max-Age=${opt.maxAge|0}`}if(opt.domain&&opt.prefix!==`host`&&(cookie+=`; Domain=${opt.domain}`),opt.path&&(cookie+=`; Path=${opt.path}`),opt.expires){if(opt.expires.getTime()-Date.now()>3456e7)throw Error(`Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.`);cookie+=`; Expires=${opt.expires.toUTCString()}`}if(opt.httpOnly&&(cookie+=`; HttpOnly`),opt.secure&&(cookie+=`; Secure`),opt.sameSite&&(cookie+=`; SameSite=${opt.sameSite.charAt(0).toUpperCase()+opt.sameSite.slice(1)}`),opt.priority&&(cookie+=`; Priority=${opt.priority.charAt(0).toUpperCase()+opt.priority.slice(1)}`),opt.partitioned){if(!opt.secure)throw Error(`Partitioned Cookie must have Secure attributes`);cookie+=`; Partitioned`}return cookie},serialize$3=(name$2,value,opt)=>(value=encodeURIComponent(value),_serialize(name$2,value,opt)),mergePath$1=(base,path$32)=>(base=base.replace(/\/+$/,``),base+=`/`,path$32=path$32.replace(/^\/+/,``),base+path$32),replaceUrlParam=(urlString,params)=>{for(let[k,v$1]of Object.entries(params)){let reg=RegExp(`/:`+k+`(?:{[^/]+})?\\??`);urlString=urlString.replace(reg,v$1?`/${v$1}`:``)}return urlString},buildSearchParams=query=>{let searchParams=new URLSearchParams;for(let[k,v$1]of Object.entries(query)){if(v$1===void 0)continue;if(Array.isArray(v$1))for(let v2 of v$1)searchParams.append(k,v2);else searchParams.set(k,v$1)}return searchParams},replaceUrlProtocol=(urlString,protocol)=>{switch(protocol){case`ws`:return urlString.replace(/^http/,`ws`);case`http`:return urlString.replace(/^ws/,`http`)}},removeIndexString=urlString=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(urlString)?urlString.replace(/\/index(?=\?|$)/,`/`):urlString.replace(/\/index(?=\?|$)/,``);function isObject$5(item){return typeof item==`object`&&!!item&&!Array.isArray(item)}function deepMerge(target,source$39){if(!isObject$5(target)&&!isObject$5(source$39))return source$39;let merged={...target};for(let key in source$39){let value=source$39[key];isObject$5(merged[key])&&isObject$5(value)?merged[key]=deepMerge(merged[key],value):merged[key]=value}return merged}var createProxy=(callback$1,path$32)=>{let proxy=new Proxy(()=>{},{get(_obj,key){if(!(typeof key!=`string`||key===`then`))return createProxy(callback$1,[...path$32,key])},apply(_1,_2,args){return callback$1({path:path$32,args})}});return proxy},ClientRequestImpl=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(url$4,method){this.url=url$4,this.method=method}fetch=async(args,opt)=>{if(args){if(args.query&&(this.queryParams=buildSearchParams(args.query)),args.form){let form=new FormData;for(let[k,v$1]of Object.entries(args.form))if(Array.isArray(v$1))for(let v2 of v$1)form.append(k,v2);else form.append(k,v$1);this.rBody=form}args.json&&(this.rBody=JSON.stringify(args.json),this.cType=`application/json`),args.param&&(this.pathParams=args.param)}let methodUpperCase=this.method.toUpperCase(),headerValues={...args?.header,...typeof opt?.headers==`function`?await opt.headers():opt?.headers};if(args?.cookie){let cookies=[];for(let[key,value]of Object.entries(args.cookie))cookies.push(serialize$3(key,value,{path:`/`}));headerValues.Cookie=cookies.join(`,`)}this.cType&&(headerValues[`Content-Type`]=this.cType);let headers=new Headers(headerValues??void 0),url$4=this.url;url$4=removeIndexString(url$4),url$4=replaceUrlParam(url$4,this.pathParams),this.queryParams&&(url$4=url$4+`?`+this.queryParams.toString()),methodUpperCase=this.method.toUpperCase();let setBody=!(methodUpperCase===`GET`||methodUpperCase===`HEAD`);return(opt?.fetch||fetch)(url$4,{body:setBody?this.rBody:void 0,method:methodUpperCase,headers,...opt?.init})}},hc=(baseUrl,options$1)=>createProxy(function proxyCallback(opts){let parts=[...opts.path],lastParts=parts.slice(-3).reverse();if(lastParts[0]===`toString`)return lastParts[1]===`name`?lastParts[2]||``:proxyCallback.toString();if(lastParts[0]===`valueOf`)return lastParts[1]===`name`?lastParts[2]||``:proxyCallback;let method=``;if(/^\$/.test(lastParts[0])){let last$1=parts.pop();last$1&&(method=last$1.replace(/^\$/,``))}let path$32=parts.join(`/`),url$4=mergePath$1(baseUrl,path$32);if(method===`url`){let result=url$4;return opts.args[0]&&(opts.args[0].param&&(result=replaceUrlParam(url$4,opts.args[0].param)),opts.args[0].query&&(result=result+`?`+buildSearchParams(opts.args[0].query).toString())),result=removeIndexString(result),new URL(result)}if(method===`ws`){let webSocketUrl=replaceUrlProtocol(opts.args[0]&&opts.args[0].param?replaceUrlParam(url$4,opts.args[0].param):url$4,`ws`),targetUrl=new URL(webSocketUrl),queryParams=opts.args[0]?.query;queryParams&&Object.entries(queryParams).forEach(([key,value])=>{Array.isArray(value)?value.forEach(item=>targetUrl.searchParams.append(key,item)):targetUrl.searchParams.set(key,value)});let establishWebSocket=(...args)=>options$1?.webSocket!==void 0&&typeof options$1.webSocket==`function`?options$1.webSocket(...args):new WebSocket(...args);return establishWebSocket(targetUrl.toString())}let req$1=new ClientRequestImpl(url$4,method);if(method){options$1??={};let args=deepMerge(options$1,{...opts.args[1]});return req$1.fetch(opts.args[0],args)}return req$1},[]);const APIServerURLEnvironmentVariable=`BLINK_API_SERVER_URL`,url$3=process.env[APIServerURLEnvironmentVariable],client=hc(url$3??``,{fetch:url$3?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),StreamResponseFormatHeader=`x-blink-stream-response-format`;var Client$1=class{options;constructor(options$1){this.options=options$1}get baseUrl(){return this.options.baseUrl}async sendMessages(request$2,options$1){let response=await fetch(`${this.options.baseUrl}/_agent/send-messages`,{method:`POST`,body:JSON.stringify(request$2),headers:this.options.headers,signal:options$1?.signal});return response.ok||await this.handleError(response),convertResponseToUIMessageStream(response)}async experimental_provideCompletions(request$2){let response=await fetch(`${this.options.baseUrl}/_agent/completions`,{method:`POST`,body:JSON.stringify(request$2),headers:this.options.headers});if(response.ok||await this.handleError(response),response.headers.get(`content-type`)?.includes(`application/json`)){let body=await response.json();return new ReadableStream({start(controller){controller.enqueue(body),controller.close()}})}if(!response.body)throw Error(`Failed to provide completions (${response.status}): ${response.statusText}`);return streamSSE(response)}async capabilities(){let response=await fetch(`${this.options.baseUrl}/_agent/capabilities`,{headers:this.options.headers});response.ok||await this.handleError(response);let body=await response.json();return body}async health(){let response=await fetch(`${this.options.baseUrl}/_agent/health`,{headers:this.options.headers});response.ok||await this.handleError(response)}async handleError(response){let body;try{body=await response.text()}catch(err){}if(body){let parsed;try{parsed=JSON.parse(body)}catch(err){}throw parsed?Error(parsed.error):Error(`Failed to send messages (${response.status}): ${body}`)}throw Error(`Failed to send messages (${response.status}): ${response.statusText}`)}};const streamSSE=resp=>{let parser$2=new EventSourceParserStream;if(!resp.body)throw Error(`The stream endpoint did not return a body!`);return resp.body.pipeThrough(new TextDecoderStream).pipeTo(parser$2.writable).catch(err=>{}),createEventStreamFromReadable(parser$2.readable)},createEventStreamFromReadable=readable$1=>{let transformedStream=readable$1.pipeThrough(new TransformStream({async transform(chunk$1,controller){let result=await safeParseJSON({text:chunk$1.data});if(!result.success){controller.error(result.error);return}controller.enqueue(result.value)}}));return transformedStream},chat$1=Object.freeze({upsert:async id=>{let response=await client.chat[`:id`].$post({param:{id}});if(response.status!==200){let error$22=await response.json();throw Error(error$22.error)}return{id}},message:async(id,message,options$1)=>{let response=await client.chat[`:id`].sendMessages.$post({param:{id},json:{messages:[message],behavior:options$1?.behavior??`enqueue`}});if(response.status!==204){let error$22=await response.json();throw Error(error$22.error)}}}),storage$1=Object.freeze({kv:Object.freeze({get:async key=>{let res=await client.storage.kv[`:key`].$get({param:{key}});if(res.status!==200){let error$22=await res.json();throw Error(error$22.error)}let value=await res.json();return value.value},set:async(key,value)=>{let res=await client.storage.kv[`:key`].$post({param:{key},json:{value}});if(res.status!==204){let error$22=await res.json();throw Error(error$22.error)}},del:async key=>{let res=await client.storage.kv[`:key`].$delete({param:{key}});if(res.status!==204){let error$22=await res.json();throw Error(error$22.error)}}})});function isToolApprovalOutput(output){return typeof output==`object`&&!!output&&`type`in output&&output.type===`tool-approval`}var compose$1=(middleware,onError$1,onNotFound)=>(context,next)=>{let index=-1;return dispatch(0);async function dispatch(i$4){if(i$4<=index)throw Error(`next() called multiple times`);index=i$4;let res,isError$1=!1,handler;if(middleware[i$4]?(handler=middleware[i$4][0][0],context.req.routeIndex=i$4):handler=i$4===middleware.length&&next||void 0,handler)try{res=await handler(context,()=>dispatch(i$4+1))}catch(err){if(err instanceof Error&&onError$1)context.error=err,res=await onError$1(err,context),isError$1=!0;else throw err}else context.finalized===!1&&onNotFound&&(res=await onNotFound(context));return res&&(context.finalized===!1||isError$1)&&(context.res=res),context}},GET_MATCH_RESULT=Symbol(),parseBody$1=async(request$2,options$1=Object.create(null))=>{let{all:all$2=!1,dot=!1}=options$1,headers=request$2 instanceof HonoRequest?request$2.raw.headers:request$2.headers,contentType=headers.get(`Content-Type`);return contentType?.startsWith(`multipart/form-data`)||contentType?.startsWith(`application/x-www-form-urlencoded`)?parseFormData(request$2,{all:all$2,dot}):{}};async function parseFormData(request$2,options$1){let formData=await request$2.formData();return formData?convertFormDataToBodyData(formData,options$1):{}}function convertFormDataToBodyData(formData,options$1){let form=Object.create(null);return formData.forEach((value,key)=>{let shouldParseAllValues=options$1.all||key.endsWith(`[]`);shouldParseAllValues?handleParsingAllValues(form,key,value):form[key]=value}),options$1.dot&&Object.entries(form).forEach(([key,value])=>{let shouldParseDotValues=key.includes(`.`);shouldParseDotValues&&(handleParsingNestedValues(form,key,value),delete form[key])}),form}var handleParsingAllValues=(form,key,value)=>{form[key]===void 0?key.endsWith(`[]`)?form[key]=[value]:form[key]=value:Array.isArray(form[key])?form[key].push(value):form[key]=[form[key],value]},handleParsingNestedValues=(form,key,value)=>{let nestedForm=form,keys=key.split(`.`);keys.forEach((key2,index)=>{index===keys.length-1?nestedForm[key2]=value:((!nestedForm[key2]||typeof nestedForm[key2]!=`object`||Array.isArray(nestedForm[key2])||nestedForm[key2]instanceof File)&&(nestedForm[key2]=Object.create(null)),nestedForm=nestedForm[key2])})},tryDecodeURIComponent=str$1=>tryDecode(str$1,decodeURIComponent_),HonoRequest=class{raw;#validatedData;#matchResult;routeIndex=0;path;bodyCache={};constructor(request$2,path$32=`/`,matchResult=[[]]){this.raw=request$2,this.path=path$32,this.#matchResult=matchResult,this.#validatedData={}}param(key){return key?this.#getDecodedParam(key):this.#getAllDecodedParams()}#getDecodedParam(key){let paramKey=this.#matchResult[0][this.routeIndex][1][key],param=this.#getParamValue(paramKey);return param&&/\%/.test(param)?tryDecodeURIComponent(param):param}#getAllDecodedParams(){let decoded={},keys=Object.keys(this.#matchResult[0][this.routeIndex][1]);for(let key of keys){let value=this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);value!==void 0&&(decoded[key]=/\%/.test(value)?tryDecodeURIComponent(value):value)}return decoded}#getParamValue(paramKey){return this.#matchResult[1]?this.#matchResult[1][paramKey]:paramKey}query(key){return getQueryParam(this.url,key)}queries(key){return getQueryParams(this.url,key)}header(name$2){if(name$2)return this.raw.headers.get(name$2)??void 0;let headerData={};return this.raw.headers.forEach((value,key)=>{headerData[key]=value}),headerData}async parseBody(options$1){return this.bodyCache.parsedBody??=await parseBody$1(this,options$1)}#cachedBody=key=>{let{bodyCache,raw:raw$1}=this,cachedBody=bodyCache[key];if(cachedBody)return cachedBody;let anyCachedKey=Object.keys(bodyCache)[0];return anyCachedKey?bodyCache[anyCachedKey].then(body=>(anyCachedKey===`json`&&(body=JSON.stringify(body)),new Response(body)[key]())):bodyCache[key]=raw$1[key]()};json(){return this.#cachedBody(`text`).then(text=>JSON.parse(text))}text(){return this.#cachedBody(`text`)}arrayBuffer(){return this.#cachedBody(`arrayBuffer`)}blob(){return this.#cachedBody(`blob`)}formData(){return this.#cachedBody(`formData`)}addValidatedData(target,data$2){this.#validatedData[target]=data$2}valid(target){return this.#validatedData[target]}get url(){return this.raw.url}get method(){return this.raw.method}get[GET_MATCH_RESULT](){return this.#matchResult}get matchedRoutes(){return this.#matchResult[0].map(([[,route$1]])=>route$1)}get routePath(){return this.#matchResult[0].map(([[,route$1]])=>route$1)[this.routeIndex].path}},HtmlEscapedCallbackPhase={Stringify:1,BeforeStream:2,Stream:3},raw=(value,callbacks)=>{let escapedString=new String(value);return escapedString.isEscaped=!0,escapedString.callbacks=callbacks,escapedString},resolveCallback=async(str$1,phase,preserveCallbacks,context,buffer$1)=>{typeof str$1==`object`&&!(str$1 instanceof String)&&(str$1 instanceof Promise||(str$1=str$1.toString()),str$1 instanceof Promise&&(str$1=await str$1));let callbacks=str$1.callbacks;if(!callbacks?.length)return Promise.resolve(str$1);buffer$1?buffer$1[0]+=str$1:buffer$1=[str$1];let resStr=Promise.all(callbacks.map(c$3=>c$3({phase,buffer:buffer$1,context}))).then(res=>Promise.all(res.filter(Boolean).map(str2=>resolveCallback(str2,phase,!1,context,buffer$1))).then(()=>buffer$1[0]));return preserveCallbacks?raw(await resStr,callbacks):resStr},TEXT_PLAIN=`text/plain; charset=UTF-8`,setDefaultContentType=(contentType,headers)=>({"Content-Type":contentType,...headers}),Context=class{#rawRequest;#req;env={};#var;finalized=!1;error;#status;#executionCtx;#res;#layout;#renderer;#notFoundHandler;#preparedHeaders;#matchResult;#path;constructor(req$1,options$1){this.#rawRequest=req$1,options$1&&(this.#executionCtx=options$1.executionCtx,this.env=options$1.env,this.#notFoundHandler=options$1.notFoundHandler,this.#path=options$1.path,this.#matchResult=options$1.matchResult)}get req(){return this.#req??=new HonoRequest(this.#rawRequest,this.#path,this.#matchResult),this.#req}get event(){if(this.#executionCtx&&`respondWith`in this.#executionCtx)return this.#executionCtx;throw Error(`This context has no FetchEvent`)}get executionCtx(){if(this.#executionCtx)return this.#executionCtx;throw Error(`This context has no ExecutionContext`)}get res(){return this.#res||=new Response(null,{headers:this.#preparedHeaders??=new Headers})}set res(_res){if(this.#res&&_res){_res=new Response(_res.body,_res);for(let[k,v$1]of this.#res.headers.entries()){if(k===`content-type`)continue;if(k===`set-cookie`){let cookies=this.#res.headers.getSetCookie();_res.headers.delete(`set-cookie`);for(let cookie of cookies)_res.headers.append(`set-cookie`,cookie)}else _res.headers.set(k,v$1)}}this.#res=_res,this.finalized=!0}render=(...args)=>(this.#renderer??=content=>this.html(content),this.#renderer(...args));setLayout=layout=>this.#layout=layout;getLayout=()=>this.#layout;setRenderer=renderer$1=>{this.#renderer=renderer$1};header=(name$2,value,options$1)=>{this.finalized&&(this.#res=new Response(this.#res.body,this.#res));let headers=this.#res?this.#res.headers:this.#preparedHeaders??=new Headers;value===void 0?headers.delete(name$2):options$1?.append?headers.append(name$2,value):headers.set(name$2,value)};status=status=>{this.#status=status};set=(key,value)=>{this.#var??=new Map,this.#var.set(key,value)};get=key=>this.#var?this.#var.get(key):void 0;get var(){return this.#var?Object.fromEntries(this.#var):{}}#newResponse(data$2,arg,headers){let responseHeaders=this.#res?new Headers(this.#res.headers):this.#preparedHeaders??new Headers;if(typeof arg==`object`&&`headers`in arg){let argHeaders=arg.headers instanceof Headers?arg.headers:new Headers(arg.headers);for(let[key,value]of argHeaders)key.toLowerCase()===`set-cookie`?responseHeaders.append(key,value):responseHeaders.set(key,value)}if(headers)for(let[k,v$1]of Object.entries(headers))if(typeof v$1==`string`)responseHeaders.set(k,v$1);else{responseHeaders.delete(k);for(let v2 of v$1)responseHeaders.append(k,v2)}let status=typeof arg==`number`?arg:arg?.status??this.#status;return new Response(data$2,{status,headers:responseHeaders})}newResponse=(...args)=>this.#newResponse(...args);body=(data$2,arg,headers)=>this.#newResponse(data$2,arg,headers);text=(text,arg,headers)=>!this.#preparedHeaders&&!this.#status&&!arg&&!headers&&!this.finalized?new Response(text):this.#newResponse(text,arg,setDefaultContentType(TEXT_PLAIN,headers));json=(object,arg,headers)=>this.#newResponse(JSON.stringify(object),arg,setDefaultContentType(`application/json`,headers));html=(html$1,arg,headers)=>{let res=html2=>this.#newResponse(html2,arg,setDefaultContentType(`text/html; charset=UTF-8`,headers));return typeof html$1==`object`?resolveCallback(html$1,HtmlEscapedCallbackPhase.Stringify,!1,{}).then(res):res(html$1)};redirect=(location,status)=>{let locationString=String(location);return this.header(`Location`,/[^\x00-\xFF]/.test(locationString)?encodeURI(locationString):locationString),this.newResponse(null,status??302)};notFound=()=>(this.#notFoundHandler??=()=>new Response,this.#notFoundHandler(this))},METHOD_NAME_ALL=`ALL`,METHOD_NAME_ALL_LOWERCASE=`all`,METHODS=[`get`,`post`,`put`,`delete`,`options`,`patch`],MESSAGE_MATCHER_IS_ALREADY_BUILT=`Can not add a route since the matcher is already built.`,UnsupportedPathError=class extends Error{},COMPOSED_HANDLER=`__COMPOSED_HANDLER`,notFoundHandler=c$3=>c$3.text(`404 Not Found`,404),errorHandler=(err,c$3)=>{if(`getResponse`in err){let res=err.getResponse();return c$3.newResponse(res.body,res)}return console.error(err),c$3.text(`Internal Server Error`,500)},Hono$1=class{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath=`/`;#path=`/`;routes=[];constructor(options$1={}){let allMethods=[...METHODS,METHOD_NAME_ALL_LOWERCASE];allMethods.forEach(method=>{this[method]=(args1,...args)=>(typeof args1==`string`?this.#path=args1:this.#addRoute(method,this.#path,args1),args.forEach(handler=>{this.#addRoute(method,this.#path,handler)}),this)}),this.on=(method,path$32,...handlers)=>{for(let p of[path$32].flat()){this.#path=p;for(let m$2 of[method].flat())handlers.map(handler=>{this.#addRoute(m$2.toUpperCase(),this.#path,handler)})}return this},this.use=(arg1,...handlers)=>(typeof arg1==`string`?this.#path=arg1:(this.#path=`*`,handlers.unshift(arg1)),handlers.forEach(handler=>{this.#addRoute(METHOD_NAME_ALL,this.#path,handler)}),this);let{strict,...optionsWithoutStrict}=options$1;Object.assign(this,optionsWithoutStrict),this.getPath=strict??!0?options$1.getPath??getPath$1:getPathNoStrict}#clone(){let clone$3=new Hono$1({router:this.router,getPath:this.getPath});return clone$3.errorHandler=this.errorHandler,clone$3.#notFoundHandler=this.#notFoundHandler,clone$3.routes=this.routes,clone$3}#notFoundHandler=notFoundHandler;errorHandler=errorHandler;route(path$32,app){let subApp=this.basePath(path$32);return app.routes.map(r$2=>{let handler;app.errorHandler===errorHandler?handler=r$2.handler:(handler=async(c$3,next)=>(await compose$1([],app.errorHandler)(c$3,()=>r$2.handler(c$3,next))).res,handler[COMPOSED_HANDLER]=r$2.handler),subApp.#addRoute(r$2.method,r$2.path,handler)}),this}basePath(path$32){let subApp=this.#clone();return subApp._basePath=mergePath(this._basePath,path$32),subApp}onError=handler=>(this.errorHandler=handler,this);notFound=handler=>(this.#notFoundHandler=handler,this);mount(path$32,applicationHandler,options$1){let replaceRequest,optionHandler;options$1&&(typeof options$1==`function`?optionHandler=options$1:(optionHandler=options$1.optionHandler,replaceRequest=options$1.replaceRequest===!1?request$2=>request$2:options$1.replaceRequest));let getOptions$1=optionHandler?c$3=>{let options2=optionHandler(c$3);return Array.isArray(options2)?options2:[options2]}:c$3=>{let executionContext;try{executionContext=c$3.executionCtx}catch{}return[c$3.env,executionContext]};replaceRequest||=(()=>{let mergedPath=mergePath(this._basePath,path$32),pathPrefixLength=mergedPath===`/`?0:mergedPath.length;return request$2=>{let url$4=new URL(request$2.url);return url$4.pathname=url$4.pathname.slice(pathPrefixLength)||`/`,new Request(url$4,request$2)}})();let handler=async(c$3,next)=>{let res=await applicationHandler(replaceRequest(c$3.req.raw),...getOptions$1(c$3));if(res)return res;await next()};return this.#addRoute(METHOD_NAME_ALL,mergePath(path$32,`*`),handler),this}#addRoute(method,path$32,handler){method=method.toUpperCase(),path$32=mergePath(this._basePath,path$32);let r$2={basePath:this._basePath,path:path$32,method,handler};this.router.add(method,path$32,[handler,r$2]),this.routes.push(r$2)}#handleError(err,c$3){if(err instanceof Error)return this.errorHandler(err,c$3);throw err}#dispatch(request$2,executionCtx,env$4,method){if(method===`HEAD`)return(async()=>new Response(null,await this.#dispatch(request$2,executionCtx,env$4,`GET`)))();let path$32=this.getPath(request$2,{env:env$4}),matchResult=this.router.match(method,path$32),c$3=new Context(request$2,{path:path$32,matchResult,env:env$4,executionCtx,notFoundHandler:this.#notFoundHandler});if(matchResult[0].length===1){let res;try{res=matchResult[0][0][0][0](c$3,async()=>{c$3.res=await this.#notFoundHandler(c$3)})}catch(err){return this.#handleError(err,c$3)}return res instanceof Promise?res.then(resolved=>resolved||(c$3.finalized?c$3.res:this.#notFoundHandler(c$3))).catch(err=>this.#handleError(err,c$3)):res??this.#notFoundHandler(c$3)}let composed=compose$1(matchResult[0],this.errorHandler,this.#notFoundHandler);return(async()=>{try{let context=await composed(c$3);if(!context.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return context.res}catch(err){return this.#handleError(err,c$3)}})()}fetch=(request$2,...rest)=>this.#dispatch(request$2,rest[1],rest[0],request$2.method);request=(input,requestInit,Env,executionCtx)=>input instanceof Request?this.fetch(requestInit?new Request(input,requestInit):input,Env,executionCtx):(input=input.toString(),this.fetch(new Request(/^https?:\/\//.test(input)?input:`http://localhost${mergePath(`/`,input)}`,requestInit),Env,executionCtx));fire=()=>{addEventListener(`fetch`,event=>{event.respondWith(this.#dispatch(event.request,event,void 0,event.request.method))})}},LABEL_REG_EXP_STR=`[^/]+`,ONLY_WILDCARD_REG_EXP_STR=`.*`,TAIL_WILDCARD_REG_EXP_STR=`(?:|/.*)`,PATH_ERROR=Symbol(),regExpMetaChars=new Set(`.\\+*[^]$()`);function compareKey(a$3,b$2){return a$3.length===1?b$2.length===1?a$3<b$2?-1:1:-1:b$2.length===1||a$3===ONLY_WILDCARD_REG_EXP_STR||a$3===TAIL_WILDCARD_REG_EXP_STR?1:b$2===ONLY_WILDCARD_REG_EXP_STR||b$2===TAIL_WILDCARD_REG_EXP_STR?-1:a$3===LABEL_REG_EXP_STR?1:b$2===LABEL_REG_EXP_STR?-1:a$3.length===b$2.length?a$3<b$2?-1:1:b$2.length-a$3.length}var Node$4=class{#index;#varIndex;#children=Object.create(null);insert(tokens,index,paramMap,context,pathErrorCheckOnly){if(tokens.length===0){if(this.#index!==void 0)throw PATH_ERROR;if(pathErrorCheckOnly)return;this.#index=index;return}let[token$1,...restTokens]=tokens,pattern=token$1===`*`?restTokens.length===0?[``,``,ONLY_WILDCARD_REG_EXP_STR]:[``,``,LABEL_REG_EXP_STR]:token$1===`/*`?[``,``,TAIL_WILDCARD_REG_EXP_STR]:token$1.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),node;if(pattern){let name$2=pattern[1],regexpStr=pattern[2]||LABEL_REG_EXP_STR;if(name$2&&pattern[2]&&(regexpStr===`.*`||(regexpStr=regexpStr.replace(/^\((?!\?:)(?=[^)]+\)$)/,`(?:`),/\((?!\?:)/.test(regexpStr))))throw PATH_ERROR;if(node=this.#children[regexpStr],!node){if(Object.keys(this.#children).some(k=>k!==ONLY_WILDCARD_REG_EXP_STR&&k!==TAIL_WILDCARD_REG_EXP_STR))throw PATH_ERROR;if(pathErrorCheckOnly)return;node=this.#children[regexpStr]=new Node$4,name$2!==``&&(node.#varIndex=context.varIndex++)}!pathErrorCheckOnly&&name$2!==``&¶mMap.push([name$2,node.#varIndex])}else if(node=this.#children[token$1],!node){if(Object.keys(this.#children).some(k=>k.length>1&&k!==ONLY_WILDCARD_REG_EXP_STR&&k!==TAIL_WILDCARD_REG_EXP_STR))throw PATH_ERROR;if(pathErrorCheckOnly)return;node=this.#children[token$1]=new Node$4}node.insert(restTokens,index,paramMap,context,pathErrorCheckOnly)}buildRegExpStr(){let childKeys=Object.keys(this.#children).sort(compareKey),strList=childKeys.map(k=>{let c$3=this.#children[k];return(typeof c$3.#varIndex==`number`?`(${k})@${c$3.#varIndex}`:regExpMetaChars.has(k)?`\\${k}`:k)+c$3.buildRegExpStr()});return typeof this.#index==`number`&&strList.unshift(`#${this.#index}`),strList.length===0?``:strList.length===1?strList[0]:`(?:`+strList.join(`|`)+`)`}},Trie=class{#context={varIndex:0};#root=new Node$4;insert(path$32,index,pathErrorCheckOnly){let paramAssoc=[],groups=[];for(let i$4=0;;){let replaced=!1;if(path$32=path$32.replace(/\{[^}]+\}/g,m$2=>{let mark=`@\\${i$4}`;return groups[i$4]=[mark,m$2],i$4++,replaced=!0,mark}),!replaced)break}let tokens=path$32.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let i$4=groups.length-1;i$4>=0;i$4--){let[mark]=groups[i$4];for(let j$2=tokens.length-1;j$2>=0;j$2--)if(tokens[j$2].indexOf(mark)!==-1){tokens[j$2]=tokens[j$2].replace(mark,groups[i$4][1]);break}}return this.#root.insert(tokens,index,paramAssoc,this.#context,pathErrorCheckOnly),paramAssoc}buildRegExp(){let regexp=this.#root.buildRegExpStr();if(regexp===``)return[/^$/,[],[]];let captureIndex=0,indexReplacementMap=[],paramReplacementMap=[];return regexp=regexp.replace(/#(\d+)|@(\d+)|\.\*\$/g,(_$3,handlerIndex,paramIndex)=>handlerIndex===void 0?(paramIndex===void 0||(paramReplacementMap[Number(paramIndex)]=++captureIndex),``):(indexReplacementMap[++captureIndex]=Number(handlerIndex),`$()`)),[RegExp(`^${regexp}`),indexReplacementMap,paramReplacementMap]}},emptyParam=[],nullMatcher=[/^$/,[],Object.create(null)],wildcardRegExpCache=Object.create(null);function buildWildcardRegExp(path$32){return wildcardRegExpCache[path$32]??=RegExp(path$32===`*`?``:`^${path$32.replace(/\/\*$|([.\\+*[^\]$()])/g,(_$3,metaChar)=>metaChar?`\\${metaChar}`:`(?:|/.*)`)}$`)}function clearWildcardRegExpCache(){wildcardRegExpCache=Object.create(null)}function buildMatcherFromPreprocessedRoutes(routes){let trie=new Trie,handlerData=[];if(routes.length===0)return nullMatcher;let routesWithStaticPathFlag=routes.map(route$1=>[!/\*|\/:/.test(route$1[0]),...route$1]).sort(([isStaticA,pathA],[isStaticB,pathB])=>isStaticA?1:isStaticB?-1:pathA.length-pathB.length),staticMap=Object.create(null);for(let i$4=0,j$2=-1,len$1=routesWithStaticPathFlag.length;i$4<len$1;i$4++){let[pathErrorCheckOnly,path$32,handlers]=routesWithStaticPathFlag[i$4];pathErrorCheckOnly?staticMap[path$32]=[handlers.map(([h$3])=>[h$3,Object.create(null)]),emptyParam]:j$2++;let paramAssoc;try{paramAssoc=trie.insert(path$32,j$2,pathErrorCheckOnly)}catch(e$1){throw e$1===PATH_ERROR?new UnsupportedPathError(path$32):e$1}pathErrorCheckOnly||(handlerData[j$2]=handlers.map(([h$3,paramCount])=>{let paramIndexMap=Object.create(null);for(--paramCount;paramCount>=0;paramCount--){let[key,value]=paramAssoc[paramCount];paramIndexMap[key]=value}return[h$3,paramIndexMap]}))}let[regexp,indexReplacementMap,paramReplacementMap]=trie.buildRegExp();for(let i$4=0,len$1=handlerData.length;i$4<len$1;i$4++)for(let j$2=0,len2=handlerData[i$4].length;j$2<len2;j$2++){let map$2=handlerData[i$4][j$2]?.[1];if(!map$2)continue;let keys=Object.keys(map$2);for(let k=0,len3=keys.length;k<len3;k++)map$2[keys[k]]=paramReplacementMap[map$2[keys[k]]]}let handlerMap=[];for(let i$4 in indexReplacementMap)handlerMap[i$4]=handlerData[indexReplacementMap[i$4]];return[regexp,handlerMap,staticMap]}function findMiddleware(middleware,path$32){if(middleware){for(let k of Object.keys(middleware).sort((a$3,b$2)=>b$2.length-a$3.length))if(buildWildcardRegExp(k).test(path$32))return[...middleware[k]]}}var RegExpRouter=class{name=`RegExpRouter`;#middleware;#routes;constructor(){this.#middleware={[METHOD_NAME_ALL]:Object.create(null)},this.#routes={[METHOD_NAME_ALL]:Object.create(null)}}add(method,path$32,handler){let middleware=this.#middleware,routes=this.#routes;if(!middleware||!routes)throw Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);middleware[method]||[middleware,routes].forEach(handlerMap=>{handlerMap[method]=Object.create(null),Object.keys(handlerMap[METHOD_NAME_ALL]).forEach(p=>{handlerMap[method][p]=[...handlerMap[METHOD_NAME_ALL][p]]})}),path$32===`/*`&&(path$32=`*`);let paramCount=(path$32.match(/\/:/g)||[]).length;if(/\*$/.test(path$32)){let re$3=buildWildcardRegExp(path$32);method===METHOD_NAME_ALL?Object.keys(middleware).forEach(m$2=>{middleware[m$2][path$32]||=findMiddleware(middleware[m$2],path$32)||findMiddleware(middleware[METHOD_NAME_ALL],path$32)||[]}):middleware[method][path$32]||=findMiddleware(middleware[method],path$32)||findMiddleware(middleware[METHOD_NAME_ALL],path$32)||[],Object.keys(middleware).forEach(m$2=>{(method===METHOD_NAME_ALL||method===m$2)&&Object.keys(middleware[m$2]).forEach(p=>{re$3.test(p)&&middleware[m$2][p].push([handler,paramCount])})}),Object.keys(routes).forEach(m$2=>{(method===METHOD_NAME_ALL||method===m$2)&&Object.keys(routes[m$2]).forEach(p=>re$3.test(p)&&routes[m$2][p].push([handler,paramCount]))});return}let paths=checkOptionalParameter(path$32)||[path$32];for(let i$4=0,len$1=paths.length;i$4<len$1;i$4++){let path2=paths[i$4];Object.keys(routes).forEach(m$2=>{(method===METHOD_NAME_ALL||method===m$2)&&(routes[m$2][path2]||=[...findMiddleware(middleware[m$2],path2)||findMiddleware(middleware[METHOD_NAME_ALL],path2)||[]],routes[m$2][path2].push([handler,paramCount-len$1+i$4+1]))})}}match(method,path$32){clearWildcardRegExpCache();let matchers=this.#buildAllMatchers();return this.match=(method2,path2)=>{let matcher=matchers[method2]||matchers[METHOD_NAME_ALL],staticMatch=matcher[2][path2];if(staticMatch)return staticMatch;let match$1=path2.match(matcher[0]);if(!match$1)return[[],emptyParam];let index=match$1.indexOf(``,1);return[matcher[1][index],match$1]},this.match(method,path$32)}#buildAllMatchers(){let matchers=Object.create(null);return Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach(method=>{matchers[method]||=this.#buildMatcher(method)}),this.#middleware=this.#routes=void 0,matchers}#buildMatcher(method){let routes=[],hasOwnRoute=method===METHOD_NAME_ALL;return[this.#middleware,this.#routes].forEach(r$2=>{let ownRoute=r$2[method]?Object.keys(r$2[method]).map(path$32=>[path$32,r$2[method][path$32]]):[];ownRoute.length===0?method!==METHOD_NAME_ALL&&routes.push(...Object.keys(r$2[METHOD_NAME_ALL]).map(path$32=>[path$32,r$2[METHOD_NAME_ALL][path$32]])):(hasOwnRoute||=!0,routes.push(...ownRoute))}),hasOwnRoute?buildMatcherFromPreprocessedRoutes(routes):null}},SmartRouter=class{name=`SmartRouter`;#routers=[];#routes=[];constructor(init$7){this.#routers=init$7.routers}add(method,path$32,handler){if(!this.#routes)throw Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);this.#routes.push([method,path$32,handler])}match(method,path$32){if(!this.#routes)throw Error(`Fatal error`);let routers=this.#routers,routes=this.#routes,len$1=routers.length,i$4=0,res;for(;i$4<len$1;i$4++){let router=routers[i$4];try{for(let i2=0,len2=routes.length;i2<len2;i2++)router.add(...routes[i2]);res=router.match(method,path$32)}catch(e$1){if(e$1 instanceof UnsupportedPathError)continue;throw e$1}this.match=router.match.bind(router),this.#routers=[router],this.#routes=void 0;break}if(i$4===len$1)throw Error(`Fatal error`);return this.name=`SmartRouter + ${this.activeRouter.name}`,res}get activeRouter(){if(this.#routes||this.#routers.length!==1)throw Error(`No active router has been determined yet.`);return this.#routers[0]}},emptyParams=Object.create(null),Node$3=class{#methods;#children;#patterns;#order=0;#params=emptyParams;constructor(method,handler,children){if(this.#children=children||Object.create(null),this.#methods=[],method&&handler){let m$2=Object.create(null);m$2[method]={handler,possibleKeys:[],score:0},this.#methods=[m$2]}this.#patterns=[]}insert(method,path$32,handler){this.#order=++this.#order;let curNode=this,parts=splitRoutingPath(path$32),possibleKeys=[];for(let i$4=0,len$1=parts.length;i$4<len$1;i$4++){let p=parts[i$4],nextP=parts[i$4+1],pattern=getPattern(p,nextP),key=Array.isArray(pattern)?pattern[0]:p;if(key in curNode.#children){curNode=curNode.#children[key],pattern&&possibleKeys.push(pattern[1]);continue}curNode.#children[key]=new Node$3,pattern&&(curNode.#patterns.push(pattern),possibleKeys.push(pattern[1])),curNode=curNode.#children[key]}return curNode.#methods.push({[method]:{handler,possibleKeys:possibleKeys.filter((v$1,i$4,a$3)=>a$3.indexOf(v$1)===i$4),score:this.#order}}),curNode}#getHandlerSets(node,method,nodeParams,params){let handlerSets=[];for(let i$4=0,len$1=node.#methods.length;i$4<len$1;i$4++){let m$2=node.#methods[i$4],handlerSet=m$2[method]||m$2[METHOD_NAME_ALL],processedSet={};if(handlerSet!==void 0&&(handlerSet.params=Object.create(null),handlerSets.push(handlerSet),nodeParams!==emptyParams||params&¶ms!==emptyParams))for(let i2=0,len2=handlerSet.possibleKeys.length;i2<len2;i2++){let key=handlerSet.possibleKeys[i2],processed=processedSet[handlerSet.score];handlerSet.params[key]=params?.[key]&&!processed?params[key]:nodeParams[key]??params?.[key],processedSet[handlerSet.score]=!0}}return handlerSets}search(method,path$32){let handlerSets=[];this.#params=emptyParams;let curNode=this,curNodes=[curNode],parts=splitPath(path$32),curNodesQueue=[];for(let i$4=0,len$1=parts.length;i$4<len$1;i$4++){let part=parts[i$4],isLast=i$4===len$1-1,tempNodes=[];for(let j$2=0,len2=curNodes.length;j$2<len2;j$2++){let node=curNodes[j$2],nextNode=node.#children[part];nextNode&&(nextNode.#params=node.#params,isLast?(nextNode.#children[`*`]&&handlerSets.push(...this.#getHandlerSets(nextNode.#children[`*`],method,node.#params)),handlerSets.push(...this.#getHandlerSets(nextNode,method,node.#params))):tempNodes.push(nextNode));for(let k=0,len3=node.#patterns.length;k<len3;k++){let pattern=node.#patterns[k],params=node.#params===emptyParams?{}:{...node.#params};if(pattern===`*`){let astNode=node.#children[`*`];astNode&&(handlerSets.push(...this.#getHandlerSets(astNode,method,node.#params)),astNode.#params=params,tempNodes.push(astNode));continue}let[key,name$2,matcher]=pattern;if(!part&&!(matcher instanceof RegExp))continue;let child=node.#children[key],restPathString=parts.slice(i$4).join(`/`);if(matcher instanceof RegExp){let m$2=matcher.exec(restPathString);if(m$2){if(params[name$2]=m$2[0],handlerSets.push(...this.#getHandlerSets(child,method,node.#params,params)),Object.keys(child.#children).length){child.#params=params;let componentCount=m$2[0].match(/\//)?.length??0,targetCurNodes=curNodesQueue[componentCount]||=[];targetCurNodes.push(child)}continue}}(matcher===!0||matcher.test(part))&&(params[name$2]=part,isLast?(handlerSets.push(...this.#getHandlerSets(child,method,params,node.#params)),child.#children[`*`]&&handlerSets.push(...this.#getHandlerSets(child.#children[`*`],method,params,node.#params))):(child.#params=params,tempNodes.push(child)))}}curNodes=tempNodes.concat(curNodesQueue.shift()??[])}return handlerSets.length>1&&handlerSets.sort((a$3,b$2)=>a$3.score-b$2.score),[handlerSets.map(({handler,params})=>[handler,params])]}},TrieRouter=class{name=`TrieRouter`;#node;constructor(){this.#node=new Node$3}add(method,path$32,handler){let results=checkOptionalParameter(path$32);if(results){for(let i$4=0,len$1=results.length;i$4<len$1;i$4++)this.#node.insert(method,results[i$4],handler);return}this.#node.insert(method,path$32,handler)}match(method,path$32){return this.#node.search(method,path$32)}},Hono=class extends Hono$1{constructor(options$1={}){super(options$1),this.router=options$1.router??new SmartRouter({routers:[new RegExpRouter,new TrieRouter]})}},getCookie=(c$3,key,prefix)=>{let cookie=c$3.req.raw.headers.get(`Cookie`);if(typeof key==`string`){if(!cookie)return;let finalKey=key;prefix===`secure`?finalKey=`__Secure-`+key:prefix===`host`&&(finalKey=`__Host-`+key);let obj2=parse$16(cookie,finalKey);return obj2[finalKey]}if(!cookie)return{};let obj=parse$16(cookie);return obj},HTTPException=class extends Error{res;status;constructor(status=500,options$1){super(options$1?.message,{cause:options$1?.cause}),this.res=options$1?.res,this.status=status}getResponse(){if(this.res){let newResponse=new Response(this.res.body,{status:this.status,headers:this.res.headers});return newResponse}return new Response(this.message,{status:this.status})}},bufferToFormData=(arrayBuffer,contentType)=>{let response=new Response(arrayBuffer,{headers:{"Content-Type":contentType}});return response.formData()},jsonRegex=/^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,multipartRegex=/^multipart\/form-data(;\s?boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/,urlencodedRegex=/^application\/x-www-form-urlencoded(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,validator=(target,validationFunc)=>async(c$3,next)=>{let value={},contentType=c$3.req.header(`Content-Type`);switch(target){case`json`:if(!contentType||!jsonRegex.test(contentType))break;try{value=await c$3.req.json()}catch{let message=`Malformed JSON in request body`;throw new HTTPException(400,{message:`Malformed JSON in request body`})}break;case`form`:{if(!contentType||!(multipartRegex.test(contentType)||urlencodedRegex.test(contentType)))break;let formData;if(c$3.req.bodyCache.formData)formData=await c$3.req.bodyCache.formData;else try{let arrayBuffer=await c$3.req.arrayBuffer();formData=await bufferToFormData(arrayBuffer,contentType),c$3.req.bodyCache.formData=formData}catch(e$1){let message=`Malformed FormData request.`;throw message+=e$1 instanceof Error?` ${e$1.message}`:` ${String(e$1)}`,new HTTPException(400,{message})}let form={};formData.forEach((value2,key)=>{key.endsWith(`[]`)?(form[key]??=[]).push(value2):Array.isArray(form[key])?form[key].push(value2):key in form?form[key]=[form[key],value2]:form[key]=value2}),value=form;break}case`query`:value=Object.fromEntries(Object.entries(c$3.req.queries()).map(([k,v$1])=>v$1.length===1?[k,v$1[0]]:[k,v$1]));break;case`param`:value=c$3.req.param();break;case`header`:value=c$3.req.header();break;case`cookie`:value=getCookie(c$3);break}let res=await validationFunc(value,c$3);if(res instanceof Response)return res;c$3.req.addValidatedData(target,res),await next()};const error$21=(c$3,msg)=>c$3.json({error:msg},400),validateStorageKey=c$3=>{let key=c$3.req.param(`key`);return!key||key===``?{key,err:`Key is required`}:key.length>128?{key,err:`Key is too long. Max length is 128 characters.`}:{key}},createRouter=()=>new Hono,storage=createRouter().get(`/kv/:key`,async c$3=>{let{key,err}=validateStorageKey(c$3);if(err)return error$21(c$3,err);let value=await c$3.env.storage.kv.get(key);return c$3.json({value},200)}).post(`/kv/:key`,validator(`json`,(body,c$3)=>{let value=body.value;return value?typeof value==`string`?value.length>1024?error$21(c$3,`Value is too long. Max length is 1024 characters.`):{value}:error$21(c$3,`Value must be a string`):error$21(c$3,`Value is required`)}),async c$3=>{let{key,err}=validateStorageKey(c$3);if(err)return error$21(c$3,err);let{value}=c$3.req.valid(`json`);return await c$3.env.storage.kv.set(key,value),c$3.body(null,204)}).delete(`/kv/:key`,async c$3=>{let{key,err}=validateStorageKey(c$3);return err?error$21(c$3,err):(await c$3.env.storage.kv.del(key),c$3.body(null,204))}),validateChatID=c$3=>{let id=c$3.req.param(`id`);return id?id.length>128?{id,err:`ID is too long. Max length is 128 characters.`}:{id}:{id,err:`ID is required`}},chat=createRouter().basePath(`/:id`).post(`/`,async c$3=>{let{id,err}=validateChatID(c$3);if(err)return error$21(c$3,err);let chat$2=await c$3.env.chat.upsert(id);return c$3.json({id:chat$2.id},200)}).post(`/sendMessages`,validator(`json`,(body,c$3)=>{let messages$1=body.messages;if(!messages$1)return error$21(c$3,`Messages are required`);if(!Array.isArray(messages$1))return error$21(c$3,`Messages must be an array`);if(messages$1.length===0)return error$21(c$3,`Messages must not be empty`);let behavior=body.behavior;return behavior!==`enqueue`&&behavior!==`interrupt`&&behavior!==`append`?error$21(c$3,`Invalid behavior`):{messages:messages$1,behavior}}),async c$3=>{let{id,err}=validateChatID(c$3);if(err)return error$21(c$3,err);let{messages:messages$1,behavior}=c$3.req.valid(`json`);try{await c$3.env.chat.sendMessages(id,{messages:messages$1,behavior})}catch(err$1){return error$21(c$3,err$1 instanceof Error?err$1.message:`Unknown error`)}return c$3.body(null,204)}),api$8=new Hono().route(`/storage`,storage).route(`/chat`,chat);var api_default$1=api$8;const shouldContinueStreaming=lastMessage=>{if(lastMessage.role!==`assistant`)return!1;let lastStepStartIndex=lastMessage.parts.reduce((lastIndex,part,index)=>part.type===`step-start`?index:lastIndex,-1),lastStepToolInvocations=lastMessage.parts.slice(lastStepStartIndex+1).filter(isToolOrDynamicToolUIPart);if(lastStepToolInvocations.length===0)return!1;let hasPendingApprovals=lastStepToolInvocations.some(part=>isToolApprovalOutput(part.output)&&part.output.outcome===`pending`);return hasPendingApprovals?!1:lastStepToolInvocations.every(part=>part.state.startsWith(`output-`))};function filenameReservedRegex(){return/[<>:"/\\|?*\u0000-\u001F]|[. ]$/g}function windowsReservedNameRegex(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}const MAX_FILENAME_LENGTH=100,reRelativePath=/^\.+(\\|\/)|^\.+$/,reTrailingDotsAndSpaces=/[. ]+$/,reControlChars=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/gu,reControlCharsTest=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/u,isZeroWidthJoiner=char=>char===``,reRepeatedReservedCharacters=/([<>:"/\\|?*\u0000-\u001F]){2,}/g,reUnicodeWhitespace=/[\t\n\r\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+/g;let segmenter;function getSegmenter(){return segmenter??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),segmenter}function filenamify(string,options$1={}){if(typeof string!=`string`)throw TypeError(`Expected a string`);let replacement=options$1.replacement??`!`;if(filenameReservedRegex().test(replacement)||[...replacement].some(char=>reControlCharsTest.test(char)&&!isZeroWidthJoiner(char)))throw Error(`Replacement string cannot contain reserved filename characters`);string=string.normalize(`NFC`),string=string.replaceAll(reUnicodeWhitespace,` `),replacement.length>0&&(string=string.replaceAll(reRepeatedReservedCharacters,`$1`)),string=string.replace(reTrailingDotsAndSpaces,``),string=string.replace(reRelativePath,replacement),string=string.replace(filenameReservedRegex(),replacement),string=string.replaceAll(reControlChars,char=>isZeroWidthJoiner(char)?char:replacement),string.length===0&&(string=replacement),string=windowsReservedNameRegex().test(string)?string+replacement:string;let allowedLength=typeof options$1.maxLength==`number`?options$1.maxLength:100;if(string.length>allowedLength){let extensionIndex=string.lastIndexOf(`.`);if(extensionIndex===-1)string=truncateByGraphemeBudget(string,allowedLength);else{let filename=string.slice(0,extensionIndex),extension=string.slice(extensionIndex),baseBudget=Math.max(0,allowedLength-extension.length);string=truncateByGraphemeBudget(filename,baseBudget)+extension}}return string}function truncateByGraphemeBudget(input,budget){if(input.length<=budget)return input;let count$1=0,output=``;for(let{segment}of getSegmenter().segment(input)){let next=count$1+segment.length;if(next>budget)break;output+=segment,count$1=next}return output}const createDiskStore=(dataDirectory,idKey,opts)=>{let indexCache,valueCache=new Map,ensureDir=dir=>{fs$4.mkdirSync(dir,{recursive:!0})},readJSONIfExists=filePath=>{let stat$6=fs$4.statSync(filePath,{throwIfNoEntry:!1});if(stat$6)return JSON.parse(fs$4.readFileSync(filePath,`utf-8`))},fdatasyncAndClose=fd=>{try{fs$4.fdatasyncSync(fd)}catch{}try{fs$4.closeSync(fd)}catch{}},fsyncPath=p=>{try{let fd=fs$4.openSync(p,`r`);try{fs$4.fsyncSync(fd)}finally{fs$4.closeSync(fd)}}catch{}},writeAtomicJSON=(filePath,data$2)=>{let dir=path$2.dirname(filePath);ensureDir(dir);let tmp=path$2.join(dir,`.tmp-`+process.pid+`-`+Math.random().toString(36).slice(2)),json$2=JSON.stringify(data$2,null,2),fd;try{fd=fs$4.openSync(tmp,`w`),fs$4.writeFileSync(fd,json$2,`utf-8`),fdatasyncAndClose(fd),fd=void 0,fs$4.renameSync(tmp,filePath),fsyncPath(filePath),fsyncPath(dir)}catch(err){if(fd!==void 0)try{fs$4.closeSync(fd)}catch{}try{fs$4.rmSync(tmp,{force:!0})}catch{}throw err}},readIndex=()=>{if(indexCache)return indexCache;let indexPath=path$2.join(dataDirectory,`index.json`),read$1=readJSONIfExists(indexPath)??{ids:{}};return read$1.ids||(read$1.ids={}),indexCache=read$1,read$1},writeIndex=index=>{let indexPath=path$2.join(dataDirectory,`index.json`);writeAtomicJSON(indexPath,index),indexCache=index},readValueById=id=>{let cached=valueCache.get(id);if(cached)return cached;let idx=readIndex(),rel=idx.ids[id];if(!rel)return;let filePath=path$2.join(dataDirectory,rel),stat$6=fs$4.statSync(filePath,{throwIfNoEntry:!1});if(!stat$6)return;let value=JSON.parse(fs$4.readFileSync(filePath,`utf-8`));return valueCache.set(id,opts?.hydrate?opts.hydrate(value):value),value},writeValue=(key,value)=>{let current=valueCache.get(key);if(opts?.shouldWriteToDisk&¤t&&!opts.shouldWriteToDisk(current,value)){valueCache.set(key,value);return}let anyValue=value,idRaw=anyValue[idKey],idStr=String(idRaw),fileNameBase=filenamify(idStr,{replacement:`_`}),fileName=fileNameBase+`.json`,idx=readIndex();idx.ids[idStr]=fileName,idx.current=idStr;let valuePath=path$2.join(dataDirectory,fileName);writeAtomicJSON(valuePath,opts?.serialize?.(value)??value),writeIndex(idx),valueCache.set(key,value)};return{get(key){return readValueById(key)},set(key,value){writeValue(key,value)},update(key,value){let current=this.get(key);if(!current)throw Error(`Key ${key} not found`);writeValue(key,{...current,...value})},delete(key){let idx=readIndex(),rel=idx.ids[key];if(rel){let filePath=path$2.join(dataDirectory,rel);try{fs$4.rmSync(filePath,{force:!0}),fsyncPath(dataDirectory)}catch{}delete idx.ids[key],idx.current===key&&(idx.current=void 0),writeIndex(idx)}valueCache.delete(key)},list(){let stat$6=fs$4.statSync(dataDirectory,{throwIfNoEntry:!1});if(!stat$6)return[];let idx=readIndex();return Object.keys(idx.ids)}}};function createDevServer(options$1){options$1.dataDirectory||(options$1.dataDirectory=fs$1.mkdtempSync(tmpdir()));let chats=createDiskStore(join$1(options$1.dataDirectory,`chats`),`id`,{hydrate:chat$2=>({...chat$2,status:`idle`,queuedMessages:[],streamingMessage:void 0}),serialize:chat$2=>(options$1.serializeChat&&(chat$2=options$1.serializeChat(chat$2)),{id:chat$2.id,created_at:chat$2.created_at,updated_at:chat$2.updated_at,messages:chat$2.messages}),shouldWriteToDisk:(previous,next)=>previous.updated_at!==next.updated_at||previous.status!==next.status||previous.messages.length!==next.messages.length}),onChatChangedEmitter=new Emitter$1,originalSet=chats.set;chats.set=(key,value)=>{originalSet.call(chats,key,value),onChatChangedEmitter.emit(value)};let originalUpdate=chats.update;chats.update=(key,value)=>{originalUpdate.call(chats,key,value),onChatChangedEmitter.emit(chats.get(key))};let storage$2={},storagePath=join$1(options$1.dataDirectory,`storage.json`);fs$1.existsSync(storagePath)&&(storage$2=JSON.parse(fs$1.readFileSync(storagePath,`utf-8`)));let globalAbortController=new AbortController,chatAbortControllers=new Map,abortChat=id=>{let controller=chatAbortControllers.get(id);controller?.signal.aborted||controller?.abort()},lastDoStreamLoop,convertMessage=(message,id=crypto.randomUUID())=>({created_at:new Date().toISOString(),...message,id,metadata:message.metadata}),doStreamLoop=async(id,messages$1)=>{let chat$2=chats.get(id);if(!chat$2)return;let updated=messages$1?[...chat$2.messages,...messages$1.map(m$2=>convertMessage(m$2))]:chat$2.messages;chats.update(id,{status:`streaming`,updated_at:new Date().toISOString(),messages:updated});let controller=new AbortController;chatAbortControllers.set(id,controller);let stream$8;try{stream$8=await options$1.sendMessages({messages:[...updated],chat:{id}},AbortSignal.any([globalAbortController.signal,controller.signal]))}catch(error$22){chats.update(id,{status:`error`,error:error$22 instanceof Error?error$22:Error(String(error$22)),streamingMessage:void 0});return}let messageStream=readUIMessageStream({stream:stream$8}),messageId=crypto.randomUUID(),lastMessage;if(chat$2=chats.get(id),!chat$2)return;try{for await(let message of messageStream){if(controller.signal.aborted)break;lastMessage=message,chats.update(id,{streamingMessage:convertMessage(message,messageId)})}}catch(error$22){let silenceAndStore=!1;if(error$22 instanceof Error&&error$22.message.includes(`Controller is already closed`)&&(silenceAndStore=!0),error$22 instanceof Error&&error$22.name===`AbortError`&&(silenceAndStore=!0),silenceAndStore){if(lastMessage){if(chat$2=chats.get(id),!chat$2)return;chats.update(id,{status:`idle`,messages:[...chat$2.messages,convertMessage(lastMessage,messageId)],streamingMessage:void 0});return}throw error$22}}if(chat$2=chats.get(id),!chat$2)return;let updatedMessages=[...chat$2.messages];if(lastMessage&&updatedMessages.push(convertMessage(lastMessage,messageId)),chat$2?.queuedMessages?.length){chats.update(id,{messages:[...chat$2.messages,...chat$2.queuedMessages.map(m$2=>convertMessage(m$2))],queuedMessages:[]}),await doStreamLoop(id);return}if(lastMessage&&shouldContinueStreaming(lastMessage)){chats.update(id,{messages:updatedMessages,streamingMessage:void 0}),await doStreamLoop(id);return}chats.update(id,{status:`idle`,streamingMessage:void 0,messages:updatedMessages})},runtime={chat:{async upsert(id){let chat$2=await chats.get(id);return chat$2?await chats.set(id,{...chat$2,updated_at:new Date().toISOString(),status:`idle`}):await chats.set(id,{id,messages:[],created_at:new Date().toISOString(),updated_at:new Date().toISOString(),status:`idle`,streamingMessage:void 0,queuedMessages:[]}),{id}},async sendMessages(id,opts){let chat$2=chats.get(id);if(!chat$2)throw Error(`Chat not found`);if(opts.behavior===`append`){chats.set(id,{...chat$2,messages:[...chat$2.messages,...opts.messages.map(m$2=>convertMessage(m$2))]});return}if(chat$2.status===`streaming`){if(opts.behavior===`enqueue`){chats.set(id,{...chat$2,queuedMessages:[...chat$2.queuedMessages??[],...opts.messages]});return}abortChat(id),await lastDoStreamLoop}lastDoStreamLoop=doStreamLoop(id,opts.messages)}},storage:{kv:{get(key){return Promise.resolve(storage$2[key])},set(key,value){return storage$2[key]=value,fs$1.writeFileSync(storagePath,JSON.stringify(storage$2),`utf-8`),Promise.resolve()},del(key){return delete storage$2[key],fs$1.writeFileSync(storagePath,JSON.stringify(storage$2),`utf-8`),Promise.resolve()}}}},server=createServer(createServerAdapter(req$1=>api_default$1.fetch(req$1,runtime)));return server.listen(options$1.port),{url:`http://127.0.0.1:${server.address().port}`,runtime,onChatChanged:onChatChangedEmitter.event,listChats:()=>chats.list(),getChat:id=>chats.get(id),stopChat:id=>{abortChat(id)},upsertChatMessage:(id,message)=>{let chat$2=chats.get(id);if(!chat$2)throw Error(`Chat not found`);let lastMessage=chat$2.messages.length>0?chat$2.messages.at(-1):void 0;if(lastMessage&&JSON.stringify(lastMessage.parts)===JSON.stringify(message.parts))return;let newMessages=[...chat$2.messages,convertMessage(message)];chats.set(id,{...chat$2,messages:newMessages})},updateChatMessage:(id,message)=>{let chat$2=chats.get(id);if(!chat$2)throw Error(`Chat not found`);let newMessages=[...chat$2.messages];newMessages[newMessages.length-1]=convertMessage(message),chats.set(id,{...chat$2,messages:newMessages})},resetChat:id=>{chats.set(id,{id,messages:[],status:`idle`,queuedMessages:[],streamingMessage:void 0,created_at:new Date().toISOString(),updated_at:new Date().toISOString()}),abortChat(id)},upsertChat:id=>{let existing=chats.get(id);if(existing)return existing;let chat$2={id,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[],status:`idle`,queuedMessages:[],streamingMessage:void 0};return chats.set(id,chat$2),chat$2},dispose:()=>{server.close(),globalAbortController.abort()}}}function L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O$1=L();function H(l$1){O$1=l$1}var E$1={exec:()=>null};function h$2(l$1,e$1=``){let t$1=typeof l$1==`string`?l$1:l$1.source,n$2={replace:(r$2,i$4)=>{let s$3=typeof i$4==`string`?i$4:i$4.source;return s$3=s$3.replace(m$1.caret,`$1`),t$1=t$1.replace(r$2,s$3),n$2},getRegex:()=>new RegExp(t$1,e$1)};return n$2}var m$1={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:l$1=>RegExp(`^( {0,3}${l$1})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}#`),htmlBeginRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}<(?:[a-z].*>|!--)`,`i`)},xe=/^(?:[ \t]*(?:\n|$))+/,be=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,C=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,j=/(?:[*+-]|\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ie=h$2(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),Te=h$2(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),F=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,we=/^[^\n]+/,Q=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,ye=h$2(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,Q).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Pe=h$2(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,j).getRegex(),v=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,U=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Se=h$2(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,U).replace(`tag`,v).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),oe=h$2(F).replace(`hr`,C).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,v).getRegex(),$e=h$2(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E$1,text:we},re=h$2(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,C).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h$2(F).replace(`hr`,C).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,re).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,v).getRegex()},Le={...K,html:h$2(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,U).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:E$1,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:h$2(F).replace(`hr`,C).replace(`heading`,` *#{1,6} *[^
|
|
280
|
+
${user}:`]}}function getResponseMetadata2({id,model,created}){return{id:id==null?void 0:id,modelId:model==null?void 0:model,timestamp:created==null?void 0:new Date(created*1e3)}}function mapOpenAIFinishReason2(finishReason){switch(finishReason){case`stop`:return`stop`;case`length`:return`length`;case`content_filter`:return`content-filter`;case`function_call`:case`tool_calls`:return`tool-calls`;default:return`unknown`}}var openaiCompletionProviderOptions=z$2.object({echo:z$2.boolean().optional(),logitBias:z$2.record(z$2.string(),z$2.number()).optional(),suffix:z$2.string().optional(),user:z$2.string().optional(),logprobs:z$2.union([z$2.boolean(),z$2.number()]).optional()}),OpenAICompletionLanguageModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.supportedUrls={},this.modelId=modelId,this.config=config}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get provider(){return this.config.provider}async getArgs({prompt,maxOutputTokens,temperature,topP,topK,frequencyPenalty,presencePenalty,stopSequences:userStopSequences,responseFormat,tools,toolChoice,seed,providerOptions}){let warnings=[],openaiOptions={...await parseProviderOptions({provider:`openai`,providerOptions,schema:openaiCompletionProviderOptions}),...await parseProviderOptions({provider:this.providerOptionsName,providerOptions,schema:openaiCompletionProviderOptions})};topK!=null&&warnings.push({type:`unsupported-setting`,setting:`topK`}),tools!=null&&tools.length&&warnings.push({type:`unsupported-setting`,setting:`tools`}),toolChoice!=null&&warnings.push({type:`unsupported-setting`,setting:`toolChoice`}),responseFormat!=null&&responseFormat.type!==`text`&&warnings.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format is not supported.`});let{prompt:completionPrompt,stopSequences}=convertToOpenAICompletionPrompt({prompt}),stop=[...stopSequences==null?[]:stopSequences,...userStopSequences==null?[]:userStopSequences];return{args:{model:this.modelId,echo:openaiOptions.echo,logit_bias:openaiOptions.logitBias,logprobs:(openaiOptions==null?void 0:openaiOptions.logprobs)===!0?0:(openaiOptions==null?void 0:openaiOptions.logprobs)===!1||openaiOptions==null?void 0:openaiOptions.logprobs,suffix:openaiOptions.suffix,user:openaiOptions.user,max_tokens:maxOutputTokens,temperature,top_p:topP,frequency_penalty:frequencyPenalty,presence_penalty:presencePenalty,seed,prompt:completionPrompt,stop:stop.length>0?stop:void 0},warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2;let{args,warnings}=await this.getArgs(options$1),{responseHeaders,value:response,rawValue:rawResponse}=await postJsonToApi({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body:args,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiCompletionResponseSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),choice$1=response.choices[0],providerMetadata={openai:{}};return choice$1.logprobs!=null&&(providerMetadata.openai.logprobs=choice$1.logprobs),{content:[{type:`text`,text:choice$1.text}],usage:{inputTokens:(_a$10=response.usage)==null?void 0:_a$10.prompt_tokens,outputTokens:(_b$2=response.usage)==null?void 0:_b$2.completion_tokens,totalTokens:(_c$2=response.usage)==null?void 0:_c$2.total_tokens},finishReason:mapOpenAIFinishReason2(choice$1.finish_reason),request:{body:args},response:{...getResponseMetadata2(response),headers:responseHeaders,body:rawResponse},providerMetadata,warnings}}async doStream(options$1){let{args,warnings}=await this.getArgs(options$1),body={...args,stream:!0,stream_options:{include_usage:!0}},{responseHeaders,value:response}=await postJsonToApi({url:this.config.url({path:`/completions`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createEventSourceResponseHandler(openaiCompletionChunkSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),finishReason=`unknown`,providerMetadata={openai:{}},usage={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},isFirstChunk=!0;return{stream:response.pipeThrough(new TransformStream({start(controller){controller.enqueue({type:`stream-start`,warnings})},transform(chunk$1,controller){if(options$1.includeRawChunks&&controller.enqueue({type:`raw`,rawValue:chunk$1.rawValue}),!chunk$1.success){finishReason=`error`,controller.enqueue({type:`error`,error:chunk$1.error});return}let value=chunk$1.value;if(`error`in value){finishReason=`error`,controller.enqueue({type:`error`,error:value.error});return}isFirstChunk&&(isFirstChunk=!1,controller.enqueue({type:`response-metadata`,...getResponseMetadata2(value)}),controller.enqueue({type:`text-start`,id:`0`})),value.usage!=null&&(usage.inputTokens=value.usage.prompt_tokens,usage.outputTokens=value.usage.completion_tokens,usage.totalTokens=value.usage.total_tokens);let choice$1=value.choices[0];(choice$1==null?void 0:choice$1.finish_reason)!=null&&(finishReason=mapOpenAIFinishReason2(choice$1.finish_reason)),(choice$1==null?void 0:choice$1.logprobs)!=null&&(providerMetadata.openai.logprobs=choice$1.logprobs),(choice$1==null?void 0:choice$1.text)!=null&&choice$1.text.length>0&&controller.enqueue({type:`text-delta`,id:`0`,delta:choice$1.text})},flush(controller){isFirstChunk||controller.enqueue({type:`text-end`,id:`0`}),controller.enqueue({type:`finish`,finishReason,providerMetadata,usage})}})),request:{body},response:{headers:responseHeaders}}}},usageSchema$1=z$2.object({prompt_tokens:z$2.number(),completion_tokens:z$2.number(),total_tokens:z$2.number()}),openaiCompletionResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({text:z$2.string(),finish_reason:z$2.string(),logprobs:z$2.object({tokens:z$2.array(z$2.string()),token_logprobs:z$2.array(z$2.number()),top_logprobs:z$2.array(z$2.record(z$2.string(),z$2.number())).nullish()}).nullish()})),usage:usageSchema$1.nullish()}),openaiCompletionChunkSchema=z$2.union([z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({text:z$2.string(),finish_reason:z$2.string().nullish(),index:z$2.number(),logprobs:z$2.object({tokens:z$2.array(z$2.string()),token_logprobs:z$2.array(z$2.number()),top_logprobs:z$2.array(z$2.record(z$2.string(),z$2.number())).nullish()}).nullish()})),usage:usageSchema$1.nullish()}),openaiErrorDataSchema]),openaiEmbeddingProviderOptions=z$2.object({dimensions:z$2.number().optional(),user:z$2.string().optional()}),OpenAIEmbeddingModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.maxEmbeddingsPerCall=2048,this.supportsParallelCalls=!0,this.modelId=modelId,this.config=config}get provider(){return this.config.provider}async doEmbed({values,headers,abortSignal,providerOptions}){var _a$10;if(values.length>this.maxEmbeddingsPerCall)throw new TooManyEmbeddingValuesForCallError({provider:this.provider,modelId:this.modelId,maxEmbeddingsPerCall:this.maxEmbeddingsPerCall,values});let openaiOptions=(_a$10=await parseProviderOptions({provider:`openai`,providerOptions,schema:openaiEmbeddingProviderOptions}))==null?{}:_a$10,{responseHeaders,value:response,rawValue}=await postJsonToApi({url:this.config.url({path:`/embeddings`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),headers),body:{model:this.modelId,input:values,encoding_format:`float`,dimensions:openaiOptions.dimensions,user:openaiOptions.user},failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiTextEmbeddingResponseSchema$1),abortSignal,fetch:this.config.fetch});return{embeddings:response.data.map(item=>item.embedding),usage:response.usage?{tokens:response.usage.prompt_tokens}:void 0,response:{headers:responseHeaders,body:rawValue}}}},openaiTextEmbeddingResponseSchema$1=z$2.object({data:z$2.array(z$2.object({embedding:z$2.array(z$2.number())})),usage:z$2.object({prompt_tokens:z$2.number()}).nullish()}),modelMaxImagesPerCall={"dall-e-3":1,"dall-e-2":10,"gpt-image-1":10},hasDefaultResponseFormat=new Set([`gpt-image-1`]),OpenAIImageModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`}get maxImagesPerCall(){var _a$10;return(_a$10=modelMaxImagesPerCall[this.modelId])==null?1:_a$10}get provider(){return this.config.provider}async doGenerate({prompt,n:n$2,size,aspectRatio,seed,providerOptions,headers,abortSignal}){var _a$10,_b$2,_c$2,_d$1;let warnings=[];aspectRatio!=null&&warnings.push({type:`unsupported-setting`,setting:`aspectRatio`,details:"This model does not support aspect ratio. Use `size` instead."}),seed!=null&&warnings.push({type:`unsupported-setting`,setting:`seed`});let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{value:response,responseHeaders}=await postJsonToApi({url:this.config.url({path:`/images/generations`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),headers),body:{model:this.modelId,prompt,n:n$2,size,...(_d$1=providerOptions.openai)==null?{}:_d$1,...hasDefaultResponseFormat.has(this.modelId)?{}:{response_format:`b64_json`}},failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiImageResponseSchema),abortSignal,fetch:this.config.fetch});return{images:response.data.map(item=>item.b64_json),warnings,response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders},providerMetadata:{openai:{images:response.data.map(item=>item.revised_prompt?{revisedPrompt:item.revised_prompt}:null)}}}}},openaiImageResponseSchema=z$2.object({data:z$2.array(z$2.object({b64_json:z$2.string(),revised_prompt:z$2.string().optional()}))}),codeInterpreterArgsSchema=z$2.object({container:z$2.union([z$2.string(),z$2.object({fileIds:z$2.array(z$2.string()).optional()})]).optional()}),codeInterpreterToolFactory=createProviderDefinedToolFactory({id:`openai.code_interpreter`,name:`code_interpreter`,inputSchema:z$2.object({})}),codeInterpreter=(args={})=>codeInterpreterToolFactory(args),webSearchArgsSchema=z$2.object({filters:z$2.object({allowedDomains:z$2.array(z$2.string()).optional()}).optional(),searchContextSize:z$2.enum([`low`,`medium`,`high`]).optional(),userLocation:z$2.object({type:z$2.literal(`approximate`),country:z$2.string().optional(),city:z$2.string().optional(),region:z$2.string().optional(),timezone:z$2.string().optional()}).optional()}),webSearchToolFactory=createProviderDefinedToolFactory({id:`openai.web_search`,name:`web_search`,inputSchema:z$2.object({action:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`search`),query:z$2.string().nullish()}),z$2.object({type:z$2.literal(`open_page`),url:z$2.string()}),z$2.object({type:z$2.literal(`find`),url:z$2.string(),pattern:z$2.string()})]).nullish()})}),webSearch=(args={})=>webSearchToolFactory(args),openaiTools={codeInterpreter,fileSearch,webSearchPreview,webSearch};function isFileId(data$2,prefixes){return prefixes?prefixes.some(prefix=>data$2.startsWith(prefix)):!1}async function convertToOpenAIResponsesMessages({prompt,systemMessageMode,fileIdPrefixes}){var _a$10,_b$2,_c$2,_d$1,_e$1,_f;let messages$1=[],warnings=[];for(let{role,content}of prompt)switch(role){case`system`:switch(systemMessageMode){case`system`:messages$1.push({role:`system`,content});break;case`developer`:messages$1.push({role:`developer`,content});break;case`remove`:warnings.push({type:`other`,message:`system messages are removed for this model`});break;default:{let _exhaustiveCheck=systemMessageMode;throw Error(`Unsupported system message mode: ${_exhaustiveCheck}`)}}break;case`user`:messages$1.push({role:`user`,content:content.map((part,index)=>{var _a2$1,_b2,_c2;switch(part.type){case`text`:return{type:`input_text`,text:part.text};case`file`:if(part.mediaType.startsWith(`image/`)){let mediaType=part.mediaType===`image/*`?`image/jpeg`:part.mediaType;return{type:`input_image`,...part.data instanceof URL?{image_url:part.data.toString()}:typeof part.data==`string`&&isFileId(part.data,fileIdPrefixes)?{file_id:part.data}:{image_url:`data:${mediaType};base64,${convertToBase64(part.data)}`},detail:(_b2=(_a2$1=part.providerOptions)==null?void 0:_a2$1.openai)==null?void 0:_b2.imageDetail}}else if(part.mediaType===`application/pdf`)return part.data instanceof URL?{type:`input_file`,file_url:part.data.toString()}:{type:`input_file`,...typeof part.data==`string`&&isFileId(part.data,fileIdPrefixes)?{file_id:part.data}:{filename:(_c2=part.filename)==null?`part-${index}.pdf`:_c2,file_data:`data:application/pdf;base64,${convertToBase64(part.data)}`}};else throw new UnsupportedFunctionalityError({functionality:`file part media type ${part.mediaType}`})}})});break;case`assistant`:{let reasoningMessages={};for(let part of content)switch(part.type){case`text`:messages$1.push({role:`assistant`,content:[{type:`output_text`,text:part.text}],id:(_c$2=(_b$2=(_a$10=part.providerOptions)==null?void 0:_a$10.openai)==null?void 0:_b$2.itemId)==null?void 0:_c$2});break;case`tool-call`:if(part.providerExecuted)break;messages$1.push({type:`function_call`,call_id:part.toolCallId,name:part.toolName,arguments:JSON.stringify(part.input),id:(_f=(_e$1=(_d$1=part.providerOptions)==null?void 0:_d$1.openai)==null?void 0:_e$1.itemId)==null?void 0:_f});break;case`tool-result`:warnings.push({type:`other`,message:`tool result parts in assistant messages are not supported for OpenAI responses`});break;case`reasoning`:{let providerOptions=await parseProviderOptions({provider:`openai`,providerOptions:part.providerOptions,schema:openaiResponsesReasoningProviderOptionsSchema}),reasoningId=providerOptions==null?void 0:providerOptions.itemId;if(reasoningId!=null){let existingReasoningMessage=reasoningMessages[reasoningId],summaryParts=[];part.text.length>0?summaryParts.push({type:`summary_text`,text:part.text}):existingReasoningMessage!==void 0&&warnings.push({type:`other`,message:`Cannot append empty reasoning part to existing reasoning sequence. Skipping reasoning part: ${JSON.stringify(part)}.`}),existingReasoningMessage===void 0?(reasoningMessages[reasoningId]={type:`reasoning`,id:reasoningId,encrypted_content:providerOptions==null?void 0:providerOptions.reasoningEncryptedContent,summary:summaryParts},messages$1.push(reasoningMessages[reasoningId])):existingReasoningMessage.summary.push(...summaryParts)}else warnings.push({type:`other`,message:`Non-OpenAI reasoning parts are not supported. Skipping reasoning part: ${JSON.stringify(part)}.`});break}}break}case`tool`:for(let part of content){let output=part.output,contentValue;switch(output.type){case`text`:case`error-text`:contentValue=output.value;break;case`content`:case`json`:case`error-json`:contentValue=JSON.stringify(output.value);break}messages$1.push({type:`function_call_output`,call_id:part.toolCallId,output:contentValue})}break;default:{let _exhaustiveCheck=role;throw Error(`Unsupported role: ${_exhaustiveCheck}`)}}return{messages:messages$1,warnings}}var openaiResponsesReasoningProviderOptionsSchema=z$2.object({itemId:z$2.string().nullish(),reasoningEncryptedContent:z$2.string().nullish()});function mapOpenAIResponseFinishReason({finishReason,hasFunctionCall}){switch(finishReason){case void 0:case null:return hasFunctionCall?`tool-calls`:`stop`;case`max_output_tokens`:return`length`;case`content_filter`:return`content-filter`;default:return hasFunctionCall?`tool-calls`:`unknown`}}function prepareResponsesTools({tools,toolChoice,strictJsonSchema}){tools=tools!=null&&tools.length?tools:void 0;let toolWarnings=[];if(tools==null)return{tools:void 0,toolChoice:void 0,toolWarnings};let openaiTools2=[];for(let tool$1 of tools)switch(tool$1.type){case`function`:openaiTools2.push({type:`function`,name:tool$1.name,description:tool$1.description,parameters:tool$1.inputSchema,strict:strictJsonSchema});break;case`provider-defined`:switch(tool$1.id){case`openai.file_search`:{let args=fileSearchArgsSchema.parse(tool$1.args);openaiTools2.push({type:`file_search`,vector_store_ids:args.vectorStoreIds,max_num_results:args.maxNumResults,ranking_options:args.ranking?{ranker:args.ranking.ranker}:void 0,filters:args.filters});break}case`openai.web_search_preview`:{let args=webSearchPreviewArgsSchema.parse(tool$1.args);openaiTools2.push({type:`web_search_preview`,search_context_size:args.searchContextSize,user_location:args.userLocation});break}case`openai.web_search`:{let args=webSearchArgsSchema.parse(tool$1.args);openaiTools2.push({type:`web_search`,filters:args.filters==null?void 0:{allowed_domains:args.filters.allowedDomains},search_context_size:args.searchContextSize,user_location:args.userLocation});break}case`openai.code_interpreter`:{let args=codeInterpreterArgsSchema.parse(tool$1.args);openaiTools2.push({type:`code_interpreter`,container:args.container==null?{type:`auto`,file_ids:void 0}:typeof args.container==`string`?args.container:{type:`auto`,file_ids:args.container.fileIds}});break}default:toolWarnings.push({type:`unsupported-tool`,tool:tool$1});break}break;default:toolWarnings.push({type:`unsupported-tool`,tool:tool$1});break}if(toolChoice==null)return{tools:openaiTools2,toolChoice:void 0,toolWarnings};let type=toolChoice.type;switch(type){case`auto`:case`none`:case`required`:return{tools:openaiTools2,toolChoice:type,toolWarnings};case`tool`:return{tools:openaiTools2,toolChoice:toolChoice.toolName===`code_interpreter`||toolChoice.toolName===`file_search`||toolChoice.toolName===`web_search_preview`||toolChoice.toolName===`web_search`?{type:toolChoice.toolName}:{type:`function`,name:toolChoice.toolName},toolWarnings};default:{let _exhaustiveCheck=type;throw new UnsupportedFunctionalityError({functionality:`tool choice type: ${_exhaustiveCheck}`})}}}var webSearchCallItem=z$2.object({type:z$2.literal(`web_search_call`),id:z$2.string(),status:z$2.string(),action:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`search`),query:z$2.string().nullish()}),z$2.object({type:z$2.literal(`open_page`),url:z$2.string()}),z$2.object({type:z$2.literal(`find`),url:z$2.string(),pattern:z$2.string()})]).nullish()}),TOP_LOGPROBS_MAX=20,LOGPROBS_SCHEMA=z$2.array(z$2.object({token:z$2.string(),logprob:z$2.number(),top_logprobs:z$2.array(z$2.object({token:z$2.string(),logprob:z$2.number()}))})),OpenAIResponsesLanguageModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.supportedUrls={"image/*":[/^https?:\/\/.*$/],"application/pdf":[/^https?:\/\/.*$/]},this.modelId=modelId,this.config=config}get provider(){return this.config.provider}async getArgs({maxOutputTokens,temperature,stopSequences,topP,topK,presencePenalty,frequencyPenalty,seed,prompt,providerOptions,tools,toolChoice,responseFormat}){var _a$10,_b$2,_c$2;let warnings=[],modelConfig=getResponsesModelConfig(this.modelId);topK!=null&&warnings.push({type:`unsupported-setting`,setting:`topK`}),seed!=null&&warnings.push({type:`unsupported-setting`,setting:`seed`}),presencePenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`presencePenalty`}),frequencyPenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`frequencyPenalty`}),stopSequences!=null&&warnings.push({type:`unsupported-setting`,setting:`stopSequences`});let{messages:messages$1,warnings:messageWarnings}=await convertToOpenAIResponsesMessages({prompt,systemMessageMode:modelConfig.systemMessageMode,fileIdPrefixes:this.config.fileIdPrefixes});warnings.push(...messageWarnings);let openaiOptions=await parseProviderOptions({provider:`openai`,providerOptions,schema:openaiResponsesProviderOptionsSchema}),strictJsonSchema=(_a$10=openaiOptions==null?void 0:openaiOptions.strictJsonSchema)==null?!1:_a$10,include=openaiOptions==null?void 0:openaiOptions.include,topLogprobs=typeof(openaiOptions==null?void 0:openaiOptions.logprobs)==`number`?openaiOptions==null?void 0:openaiOptions.logprobs:(openaiOptions==null?void 0:openaiOptions.logprobs)===!0?TOP_LOGPROBS_MAX:void 0;include=topLogprobs?Array.isArray(include)?[...include,`message.output_text.logprobs`]:[`message.output_text.logprobs`]:include;let webSearchToolName=(_b$2=tools==null?void 0:tools.find(tool$1=>tool$1.type===`provider-defined`&&(tool$1.id===`openai.web_search`||tool$1.id===`openai.web_search_preview`)))==null?void 0:_b$2.name;include=webSearchToolName?Array.isArray(include)?[...include,`web_search_call.action.sources`]:[`web_search_call.action.sources`]:include;let baseArgs={model:this.modelId,input:messages$1,temperature,top_p:topP,max_output_tokens:maxOutputTokens,...((responseFormat==null?void 0:responseFormat.type)===`json`||(openaiOptions==null?void 0:openaiOptions.textVerbosity))&&{text:{...(responseFormat==null?void 0:responseFormat.type)===`json`&&{format:responseFormat.schema==null?{type:`json_object`}:{type:`json_schema`,strict:strictJsonSchema,name:(_c$2=responseFormat.name)==null?`response`:_c$2,description:responseFormat.description,schema:responseFormat.schema}},...(openaiOptions==null?void 0:openaiOptions.textVerbosity)&&{verbosity:openaiOptions.textVerbosity}}},metadata:openaiOptions==null?void 0:openaiOptions.metadata,parallel_tool_calls:openaiOptions==null?void 0:openaiOptions.parallelToolCalls,previous_response_id:openaiOptions==null?void 0:openaiOptions.previousResponseId,store:openaiOptions==null?void 0:openaiOptions.store,user:openaiOptions==null?void 0:openaiOptions.user,instructions:openaiOptions==null?void 0:openaiOptions.instructions,service_tier:openaiOptions==null?void 0:openaiOptions.serviceTier,include,prompt_cache_key:openaiOptions==null?void 0:openaiOptions.promptCacheKey,safety_identifier:openaiOptions==null?void 0:openaiOptions.safetyIdentifier,top_logprobs:topLogprobs,...modelConfig.isReasoningModel&&((openaiOptions==null?void 0:openaiOptions.reasoningEffort)!=null||(openaiOptions==null?void 0:openaiOptions.reasoningSummary)!=null)&&{reasoning:{...(openaiOptions==null?void 0:openaiOptions.reasoningEffort)!=null&&{effort:openaiOptions.reasoningEffort},...(openaiOptions==null?void 0:openaiOptions.reasoningSummary)!=null&&{summary:openaiOptions.reasoningSummary}}},...modelConfig.requiredAutoTruncation&&{truncation:`auto`}};modelConfig.isReasoningModel?(baseArgs.temperature!=null&&(baseArgs.temperature=void 0,warnings.push({type:`unsupported-setting`,setting:`temperature`,details:`temperature is not supported for reasoning models`})),baseArgs.top_p!=null&&(baseArgs.top_p=void 0,warnings.push({type:`unsupported-setting`,setting:`topP`,details:`topP is not supported for reasoning models`}))):((openaiOptions==null?void 0:openaiOptions.reasoningEffort)!=null&&warnings.push({type:`unsupported-setting`,setting:`reasoningEffort`,details:`reasoningEffort is not supported for non-reasoning models`}),(openaiOptions==null?void 0:openaiOptions.reasoningSummary)!=null&&warnings.push({type:`unsupported-setting`,setting:`reasoningSummary`,details:`reasoningSummary is not supported for non-reasoning models`})),(openaiOptions==null?void 0:openaiOptions.serviceTier)===`flex`&&!modelConfig.supportsFlexProcessing&&(warnings.push({type:`unsupported-setting`,setting:`serviceTier`,details:`flex processing is only available for o3, o4-mini, and gpt-5 models`}),delete baseArgs.service_tier),(openaiOptions==null?void 0:openaiOptions.serviceTier)===`priority`&&!modelConfig.supportsPriorityProcessing&&(warnings.push({type:`unsupported-setting`,setting:`serviceTier`,details:`priority processing is only available for supported models (gpt-4, gpt-5, gpt-5-mini, o3, o4-mini) and requires Enterprise access. gpt-5-nano is not supported`}),delete baseArgs.service_tier);let{tools:openaiTools2,toolChoice:openaiToolChoice,toolWarnings}=prepareResponsesTools({tools,toolChoice,strictJsonSchema});return{webSearchToolName,args:{...baseArgs,tools:openaiTools2,tool_choice:openaiToolChoice},warnings:[...warnings,...toolWarnings]}}async doGenerate(options$1){var _a$10,_b$2,_c$2,_d$1,_e$1,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q;let{args:body,warnings,webSearchToolName}=await this.getArgs(options$1),url$4=this.config.url({path:`/responses`,modelId:this.modelId}),{responseHeaders,value:response,rawValue:rawResponse}=await postJsonToApi({url:url$4,headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(z$2.object({id:z$2.string(),created_at:z$2.number(),error:z$2.object({code:z$2.string(),message:z$2.string()}).nullish(),model:z$2.string(),output:z$2.array(z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`message`),role:z$2.literal(`assistant`),id:z$2.string(),content:z$2.array(z$2.object({type:z$2.literal(`output_text`),text:z$2.string(),logprobs:LOGPROBS_SCHEMA.nullish(),annotations:z$2.array(z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`url_citation`),start_index:z$2.number(),end_index:z$2.number(),url:z$2.string(),title:z$2.string()}),z$2.object({type:z$2.literal(`file_citation`),file_id:z$2.string(),filename:z$2.string().nullish(),index:z$2.number().nullish(),start_index:z$2.number().nullish(),end_index:z$2.number().nullish(),quote:z$2.string().nullish()}),z$2.object({type:z$2.literal(`container_file_citation`)})]))}))}),z$2.object({type:z$2.literal(`code_interpreter_call`)}),z$2.object({type:z$2.literal(`function_call`),call_id:z$2.string(),name:z$2.string(),arguments:z$2.string(),id:z$2.string()}),webSearchCallItem,z$2.object({type:z$2.literal(`computer_call`),id:z$2.string(),status:z$2.string().optional()}),z$2.object({type:z$2.literal(`file_search_call`),id:z$2.string(),status:z$2.string().optional(),queries:z$2.array(z$2.string()).nullish(),results:z$2.array(z$2.object({attributes:z$2.object({file_id:z$2.string(),filename:z$2.string(),score:z$2.number(),text:z$2.string()})})).nullish()}),z$2.object({type:z$2.literal(`reasoning`),id:z$2.string(),encrypted_content:z$2.string().nullish(),summary:z$2.array(z$2.object({type:z$2.literal(`summary_text`),text:z$2.string()}))})])),service_tier:z$2.string().nullish(),incomplete_details:z$2.object({reason:z$2.string()}).nullable(),usage:usageSchema2})),abortSignal:options$1.abortSignal,fetch:this.config.fetch});if(response.error)throw new APICallError({message:response.error.message,url:url$4,requestBodyValues:body,statusCode:400,responseHeaders,responseBody:rawResponse,isRetryable:!1});let content=[],logprobs=[],hasFunctionCall=!1;for(let part of response.output)switch(part.type){case`reasoning`:part.summary.length===0&&part.summary.push({type:`summary_text`,text:``});for(let summary of part.summary)content.push({type:`reasoning`,text:summary.text,providerMetadata:{openai:{itemId:part.id,reasoningEncryptedContent:(_a$10=part.encrypted_content)==null?null:_a$10}}});break;case`message`:for(let contentPart of part.content){(_c$2=(_b$2=options$1.providerOptions)==null?void 0:_b$2.openai)!=null&&_c$2.logprobs&&contentPart.logprobs&&logprobs.push(contentPart.logprobs),content.push({type:`text`,text:contentPart.text,providerMetadata:{openai:{itemId:part.id}}});for(let annotation of contentPart.annotations)annotation.type===`url_citation`?content.push({type:`source`,sourceType:`url`,id:(_f=(_e$1=(_d$1=this.config).generateId)==null?void 0:_e$1.call(_d$1))==null?generateId():_f,url:annotation.url,title:annotation.title}):annotation.type===`file_citation`&&content.push({type:`source`,sourceType:`document`,id:(_i=(_h=(_g=this.config).generateId)==null?void 0:_h.call(_g))==null?generateId():_i,mediaType:`text/plain`,title:(_k=(_j=annotation.quote)==null?annotation.filename:_j)==null?`Document`:_k,filename:(_l=annotation.filename)==null?annotation.file_id:_l})}break;case`function_call`:hasFunctionCall=!0,content.push({type:`tool-call`,toolCallId:part.call_id,toolName:part.name,input:part.arguments,providerMetadata:{openai:{itemId:part.id}}});break;case`web_search_call`:content.push({type:`tool-call`,toolCallId:part.id,toolName:webSearchToolName==null?`web_search`:webSearchToolName,input:JSON.stringify({action:part.action}),providerExecuted:!0}),content.push({type:`tool-result`,toolCallId:part.id,toolName:webSearchToolName==null?`web_search`:webSearchToolName,result:{status:part.status},providerExecuted:!0});break;case`computer_call`:content.push({type:`tool-call`,toolCallId:part.id,toolName:`computer_use`,input:``,providerExecuted:!0}),content.push({type:`tool-result`,toolCallId:part.id,toolName:`computer_use`,result:{type:`computer_use_tool_result`,status:part.status||`completed`},providerExecuted:!0});break;case`file_search_call`:content.push({type:`tool-call`,toolCallId:part.id,toolName:`file_search`,input:``,providerExecuted:!0}),content.push({type:`tool-result`,toolCallId:part.id,toolName:`file_search`,result:{type:`file_search_tool_result`,status:part.status||`completed`,...part.queries&&{queries:part.queries},...part.results&&{results:part.results}},providerExecuted:!0});break}let providerMetadata={openai:{responseId:response.id}};return logprobs.length>0&&(providerMetadata.openai.logprobs=logprobs),typeof response.service_tier==`string`&&(providerMetadata.openai.serviceTier=response.service_tier),{content,finishReason:mapOpenAIResponseFinishReason({finishReason:(_m=response.incomplete_details)==null?void 0:_m.reason,hasFunctionCall}),usage:{inputTokens:response.usage.input_tokens,outputTokens:response.usage.output_tokens,totalTokens:response.usage.input_tokens+response.usage.output_tokens,reasoningTokens:(_o=(_n=response.usage.output_tokens_details)==null?void 0:_n.reasoning_tokens)==null?void 0:_o,cachedInputTokens:(_q=(_p=response.usage.input_tokens_details)==null?void 0:_p.cached_tokens)==null?void 0:_q},request:{body},response:{id:response.id,timestamp:new Date(response.created_at*1e3),modelId:response.model,headers:responseHeaders,body:rawResponse},providerMetadata,warnings}}async doStream(options$1){let{args:body,warnings,webSearchToolName}=await this.getArgs(options$1),{responseHeaders,value:response}=await postJsonToApi({url:this.config.url({path:`/responses`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body:{...body,stream:!0},failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createEventSourceResponseHandler(openaiResponsesChunkSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),self$1=this,finishReason=`unknown`,usage={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},logprobs=[],responseId=null,ongoingToolCalls={},hasFunctionCall=!1,activeReasoning={},serviceTier;return{stream:response.pipeThrough(new TransformStream({start(controller){controller.enqueue({type:`stream-start`,warnings})},transform(chunk$1,controller){var _a$10,_b$2,_c$2,_d$1,_e$1,_f,_g,_h,_i,_j,_k,_l,_m,_n,_o,_p,_q,_r,_s,_t,_u;if(options$1.includeRawChunks&&controller.enqueue({type:`raw`,rawValue:chunk$1.rawValue}),!chunk$1.success){finishReason=`error`,controller.enqueue({type:`error`,error:chunk$1.error});return}let value=chunk$1.value;if(isResponseOutputItemAddedChunk(value))value.item.type===`function_call`?(ongoingToolCalls[value.output_index]={toolName:value.item.name,toolCallId:value.item.call_id},controller.enqueue({type:`tool-input-start`,id:value.item.call_id,toolName:value.item.name})):value.item.type===`web_search_call`?(ongoingToolCalls[value.output_index]={toolName:webSearchToolName==null?`web_search`:webSearchToolName,toolCallId:value.item.id},controller.enqueue({type:`tool-input-start`,id:value.item.id,toolName:webSearchToolName==null?`web_search`:webSearchToolName})):value.item.type===`computer_call`?(ongoingToolCalls[value.output_index]={toolName:`computer_use`,toolCallId:value.item.id},controller.enqueue({type:`tool-input-start`,id:value.item.id,toolName:`computer_use`})):value.item.type===`file_search_call`?(ongoingToolCalls[value.output_index]={toolName:`file_search`,toolCallId:value.item.id},controller.enqueue({type:`tool-input-start`,id:value.item.id,toolName:`file_search`})):value.item.type===`message`?controller.enqueue({type:`text-start`,id:value.item.id,providerMetadata:{openai:{itemId:value.item.id}}}):isResponseOutputItemAddedReasoningChunk(value)&&(activeReasoning[value.item.id]={encryptedContent:value.item.encrypted_content,summaryParts:[0]},controller.enqueue({type:`reasoning-start`,id:`${value.item.id}:0`,providerMetadata:{openai:{itemId:value.item.id,reasoningEncryptedContent:(_a$10=value.item.encrypted_content)==null?null:_a$10}}}));else if(isResponseOutputItemDoneChunk(value)){if(value.item.type===`function_call`)ongoingToolCalls[value.output_index]=void 0,hasFunctionCall=!0,controller.enqueue({type:`tool-input-end`,id:value.item.call_id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.call_id,toolName:value.item.name,input:value.item.arguments,providerMetadata:{openai:{itemId:value.item.id}}});else if(value.item.type===`web_search_call`)ongoingToolCalls[value.output_index]=void 0,controller.enqueue({type:`tool-input-end`,id:value.item.id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.id,toolName:`web_search`,input:JSON.stringify({action:value.item.action}),providerExecuted:!0}),controller.enqueue({type:`tool-result`,toolCallId:value.item.id,toolName:`web_search`,result:{status:value.item.status},providerExecuted:!0});else if(value.item.type===`computer_call`)ongoingToolCalls[value.output_index]=void 0,controller.enqueue({type:`tool-input-end`,id:value.item.id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.id,toolName:`computer_use`,input:``,providerExecuted:!0}),controller.enqueue({type:`tool-result`,toolCallId:value.item.id,toolName:`computer_use`,result:{type:`computer_use_tool_result`,status:value.item.status||`completed`},providerExecuted:!0});else if(value.item.type===`file_search_call`)ongoingToolCalls[value.output_index]=void 0,controller.enqueue({type:`tool-input-end`,id:value.item.id}),controller.enqueue({type:`tool-call`,toolCallId:value.item.id,toolName:`file_search`,input:``,providerExecuted:!0}),controller.enqueue({type:`tool-result`,toolCallId:value.item.id,toolName:`file_search`,result:{type:`file_search_tool_result`,status:value.item.status||`completed`,...value.item.queries&&{queries:value.item.queries},...value.item.results&&{results:value.item.results}},providerExecuted:!0});else if(value.item.type===`message`)controller.enqueue({type:`text-end`,id:value.item.id});else if(isResponseOutputItemDoneReasoningChunk(value)){let activeReasoningPart=activeReasoning[value.item.id];for(let summaryIndex of activeReasoningPart.summaryParts)controller.enqueue({type:`reasoning-end`,id:`${value.item.id}:${summaryIndex}`,providerMetadata:{openai:{itemId:value.item.id,reasoningEncryptedContent:(_b$2=value.item.encrypted_content)==null?null:_b$2}}});delete activeReasoning[value.item.id]}}else if(isResponseFunctionCallArgumentsDeltaChunk(value)){let toolCall=ongoingToolCalls[value.output_index];toolCall!=null&&controller.enqueue({type:`tool-input-delta`,id:toolCall.toolCallId,delta:value.delta})}else isResponseCreatedChunk(value)?(responseId=value.response.id,controller.enqueue({type:`response-metadata`,id:value.response.id,timestamp:new Date(value.response.created_at*1e3),modelId:value.response.model})):isTextDeltaChunk(value)?(controller.enqueue({type:`text-delta`,id:value.item_id,delta:value.delta}),(_d$1=(_c$2=options$1.providerOptions)==null?void 0:_c$2.openai)!=null&&_d$1.logprobs&&value.logprobs&&logprobs.push(value.logprobs)):isResponseReasoningSummaryPartAddedChunk(value)?value.summary_index>0&&((_e$1=activeReasoning[value.item_id])==null||_e$1.summaryParts.push(value.summary_index),controller.enqueue({type:`reasoning-start`,id:`${value.item_id}:${value.summary_index}`,providerMetadata:{openai:{itemId:value.item_id,reasoningEncryptedContent:(_g=(_f=activeReasoning[value.item_id])==null?void 0:_f.encryptedContent)==null?null:_g}}})):isResponseReasoningSummaryTextDeltaChunk(value)?controller.enqueue({type:`reasoning-delta`,id:`${value.item_id}:${value.summary_index}`,delta:value.delta,providerMetadata:{openai:{itemId:value.item_id}}}):isResponseFinishedChunk(value)?(finishReason=mapOpenAIResponseFinishReason({finishReason:(_h=value.response.incomplete_details)==null?void 0:_h.reason,hasFunctionCall}),usage.inputTokens=value.response.usage.input_tokens,usage.outputTokens=value.response.usage.output_tokens,usage.totalTokens=value.response.usage.input_tokens+value.response.usage.output_tokens,usage.reasoningTokens=(_j=(_i=value.response.usage.output_tokens_details)==null?void 0:_i.reasoning_tokens)==null?void 0:_j,usage.cachedInputTokens=(_l=(_k=value.response.usage.input_tokens_details)==null?void 0:_k.cached_tokens)==null?void 0:_l,typeof value.response.service_tier==`string`&&(serviceTier=value.response.service_tier)):isResponseAnnotationAddedChunk(value)?value.annotation.type===`url_citation`?controller.enqueue({type:`source`,sourceType:`url`,id:(_o=(_n=(_m=self$1.config).generateId)==null?void 0:_n.call(_m))==null?generateId():_o,url:value.annotation.url,title:value.annotation.title}):value.annotation.type===`file_citation`&&controller.enqueue({type:`source`,sourceType:`document`,id:(_r=(_q=(_p=self$1.config).generateId)==null?void 0:_q.call(_p))==null?generateId():_r,mediaType:`text/plain`,title:(_t=(_s=value.annotation.quote)==null?value.annotation.filename:_s)==null?`Document`:_t,filename:(_u=value.annotation.filename)==null?value.annotation.file_id:_u}):isErrorChunk(value)&&controller.enqueue({type:`error`,error:value})},flush(controller){let providerMetadata={openai:{responseId}};logprobs.length>0&&(providerMetadata.openai.logprobs=logprobs),serviceTier!==void 0&&(providerMetadata.openai.serviceTier=serviceTier),controller.enqueue({type:`finish`,finishReason,usage,providerMetadata})}})),request:{body},response:{headers:responseHeaders}}}},usageSchema2=z$2.object({input_tokens:z$2.number(),input_tokens_details:z$2.object({cached_tokens:z$2.number().nullish()}).nullish(),output_tokens:z$2.number(),output_tokens_details:z$2.object({reasoning_tokens:z$2.number().nullish()}).nullish()}),textDeltaChunkSchema=z$2.object({type:z$2.literal(`response.output_text.delta`),item_id:z$2.string(),delta:z$2.string(),logprobs:LOGPROBS_SCHEMA.nullish()}),errorChunkSchema=z$2.object({type:z$2.literal(`error`),code:z$2.string(),message:z$2.string(),param:z$2.string().nullish(),sequence_number:z$2.number()}),responseFinishedChunkSchema=z$2.object({type:z$2.enum([`response.completed`,`response.incomplete`]),response:z$2.object({incomplete_details:z$2.object({reason:z$2.string()}).nullish(),usage:usageSchema2,service_tier:z$2.string().nullish()})}),responseCreatedChunkSchema=z$2.object({type:z$2.literal(`response.created`),response:z$2.object({id:z$2.string(),created_at:z$2.number(),model:z$2.string(),service_tier:z$2.string().nullish()})}),responseOutputItemAddedSchema=z$2.object({type:z$2.literal(`response.output_item.added`),output_index:z$2.number(),item:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`message`),id:z$2.string()}),z$2.object({type:z$2.literal(`reasoning`),id:z$2.string(),encrypted_content:z$2.string().nullish()}),z$2.object({type:z$2.literal(`function_call`),id:z$2.string(),call_id:z$2.string(),name:z$2.string(),arguments:z$2.string()}),z$2.object({type:z$2.literal(`web_search_call`),id:z$2.string(),status:z$2.string(),action:z$2.object({type:z$2.literal(`search`),query:z$2.string().optional()}).nullish()}),z$2.object({type:z$2.literal(`computer_call`),id:z$2.string(),status:z$2.string()}),z$2.object({type:z$2.literal(`file_search_call`),id:z$2.string(),status:z$2.string(),queries:z$2.array(z$2.string()).nullish(),results:z$2.array(z$2.object({attributes:z$2.object({file_id:z$2.string(),filename:z$2.string(),score:z$2.number(),text:z$2.string()})})).optional()})])}),responseOutputItemDoneSchema=z$2.object({type:z$2.literal(`response.output_item.done`),output_index:z$2.number(),item:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`message`),id:z$2.string()}),z$2.object({type:z$2.literal(`reasoning`),id:z$2.string(),encrypted_content:z$2.string().nullish()}),z$2.object({type:z$2.literal(`function_call`),id:z$2.string(),call_id:z$2.string(),name:z$2.string(),arguments:z$2.string(),status:z$2.literal(`completed`)}),webSearchCallItem,z$2.object({type:z$2.literal(`computer_call`),id:z$2.string(),status:z$2.literal(`completed`)}),z$2.object({type:z$2.literal(`file_search_call`),id:z$2.string(),status:z$2.literal(`completed`),queries:z$2.array(z$2.string()).nullish(),results:z$2.array(z$2.object({attributes:z$2.object({file_id:z$2.string(),filename:z$2.string(),score:z$2.number(),text:z$2.string()})})).nullish()})])}),responseFunctionCallArgumentsDeltaSchema=z$2.object({type:z$2.literal(`response.function_call_arguments.delta`),item_id:z$2.string(),output_index:z$2.number(),delta:z$2.string()}),responseAnnotationAddedSchema=z$2.object({type:z$2.literal(`response.output_text.annotation.added`),annotation:z$2.discriminatedUnion(`type`,[z$2.object({type:z$2.literal(`url_citation`),url:z$2.string(),title:z$2.string()}),z$2.object({type:z$2.literal(`file_citation`),file_id:z$2.string(),filename:z$2.string().nullish(),index:z$2.number().nullish(),start_index:z$2.number().nullish(),end_index:z$2.number().nullish(),quote:z$2.string().nullish()})])}),responseReasoningSummaryPartAddedSchema=z$2.object({type:z$2.literal(`response.reasoning_summary_part.added`),item_id:z$2.string(),summary_index:z$2.number()}),responseReasoningSummaryTextDeltaSchema=z$2.object({type:z$2.literal(`response.reasoning_summary_text.delta`),item_id:z$2.string(),summary_index:z$2.number(),delta:z$2.string()}),openaiResponsesChunkSchema=z$2.union([textDeltaChunkSchema,responseFinishedChunkSchema,responseCreatedChunkSchema,responseOutputItemAddedSchema,responseOutputItemDoneSchema,responseFunctionCallArgumentsDeltaSchema,responseAnnotationAddedSchema,responseReasoningSummaryPartAddedSchema,responseReasoningSummaryTextDeltaSchema,errorChunkSchema,z$2.object({type:z$2.string()}).loose()]);function isTextDeltaChunk(chunk$1){return chunk$1.type===`response.output_text.delta`}function isResponseOutputItemDoneChunk(chunk$1){return chunk$1.type===`response.output_item.done`}function isResponseOutputItemDoneReasoningChunk(chunk$1){return isResponseOutputItemDoneChunk(chunk$1)&&chunk$1.item.type===`reasoning`}function isResponseFinishedChunk(chunk$1){return chunk$1.type===`response.completed`||chunk$1.type===`response.incomplete`}function isResponseCreatedChunk(chunk$1){return chunk$1.type===`response.created`}function isResponseFunctionCallArgumentsDeltaChunk(chunk$1){return chunk$1.type===`response.function_call_arguments.delta`}function isResponseOutputItemAddedChunk(chunk$1){return chunk$1.type===`response.output_item.added`}function isResponseOutputItemAddedReasoningChunk(chunk$1){return isResponseOutputItemAddedChunk(chunk$1)&&chunk$1.item.type===`reasoning`}function isResponseAnnotationAddedChunk(chunk$1){return chunk$1.type===`response.output_text.annotation.added`}function isResponseReasoningSummaryPartAddedChunk(chunk$1){return chunk$1.type===`response.reasoning_summary_part.added`}function isResponseReasoningSummaryTextDeltaChunk(chunk$1){return chunk$1.type===`response.reasoning_summary_text.delta`}function isErrorChunk(chunk$1){return chunk$1.type===`error`}function getResponsesModelConfig(modelId){let supportsFlexProcessing2=modelId.startsWith(`o3`)||modelId.startsWith(`o4-mini`)||modelId.startsWith(`gpt-5`)&&!modelId.startsWith(`gpt-5-chat`),supportsPriorityProcessing2=modelId.startsWith(`gpt-4`)||modelId.startsWith(`gpt-5-mini`)||modelId.startsWith(`gpt-5`)&&!modelId.startsWith(`gpt-5-nano`)&&!modelId.startsWith(`gpt-5-chat`)||modelId.startsWith(`o3`)||modelId.startsWith(`o4-mini`),defaults$2={requiredAutoTruncation:!1,systemMessageMode:`system`,supportsFlexProcessing:supportsFlexProcessing2,supportsPriorityProcessing:supportsPriorityProcessing2};return modelId.startsWith(`gpt-5-chat`)?{...defaults$2,isReasoningModel:!1}:modelId.startsWith(`o`)||modelId.startsWith(`gpt-5`)||modelId.startsWith(`codex-`)||modelId.startsWith(`computer-use`)?modelId.startsWith(`o1-mini`)||modelId.startsWith(`o1-preview`)?{...defaults$2,isReasoningModel:!0,systemMessageMode:`remove`}:{...defaults$2,isReasoningModel:!0,systemMessageMode:`developer`}:{...defaults$2,isReasoningModel:!1}}var openaiResponsesProviderOptionsSchema=z$2.object({metadata:z$2.any().nullish(),parallelToolCalls:z$2.boolean().nullish(),previousResponseId:z$2.string().nullish(),store:z$2.boolean().nullish(),user:z$2.string().nullish(),reasoningEffort:z$2.string().nullish(),strictJsonSchema:z$2.boolean().nullish(),instructions:z$2.string().nullish(),reasoningSummary:z$2.string().nullish(),serviceTier:z$2.enum([`auto`,`flex`,`priority`]).nullish(),include:z$2.array(z$2.enum([`reasoning.encrypted_content`,`file_search_call.results`,`message.output_text.logprobs`])).nullish(),textVerbosity:z$2.enum([`low`,`medium`,`high`]).nullish(),promptCacheKey:z$2.string().nullish(),safetyIdentifier:z$2.string().nullish(),logprobs:z$2.union([z$2.boolean(),z$2.number().min(1).max(TOP_LOGPROBS_MAX)]).optional()}),OpenAIProviderOptionsSchema=z$2.object({instructions:z$2.string().nullish(),speed:z$2.number().min(.25).max(4).default(1).nullish()}),OpenAISpeechModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`}get provider(){return this.config.provider}async getArgs({text,voice=`alloy`,outputFormat=`mp3`,speed,instructions,language,providerOptions}){let warnings=[],openAIOptions=await parseProviderOptions({provider:`openai`,providerOptions,schema:OpenAIProviderOptionsSchema}),requestBody={model:this.modelId,input:text,voice,response_format:`mp3`,speed,instructions};if(outputFormat&&([`mp3`,`opus`,`aac`,`flac`,`wav`,`pcm`].includes(outputFormat)?requestBody.response_format=outputFormat:warnings.push({type:`unsupported-setting`,setting:`outputFormat`,details:`Unsupported output format: ${outputFormat}. Using mp3 instead.`})),openAIOptions){let speechModelOptions={};for(let key in speechModelOptions){let value=speechModelOptions[key];value!==void 0&&(requestBody[key]=value)}}return language&&warnings.push({type:`unsupported-setting`,setting:`language`,details:`OpenAI speech models do not support language selection. Language parameter "${language}" was ignored.`}),{requestBody,warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2;let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{requestBody,warnings}=await this.getArgs(options$1),{value:audio,responseHeaders,rawValue:rawResponse}=await postJsonToApi({url:this.config.url({path:`/audio/speech`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),body:requestBody,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createBinaryResponseHandler(),abortSignal:options$1.abortSignal,fetch:this.config.fetch});return{audio,warnings,request:{body:JSON.stringify(requestBody)},response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders,body:rawResponse}}}},openAITranscriptionProviderOptions=z$2.object({include:z$2.array(z$2.string()).optional(),language:z$2.string().optional(),prompt:z$2.string().optional(),temperature:z$2.number().min(0).max(1).default(0).optional(),timestampGranularities:z$2.array(z$2.enum([`word`,`segment`])).default([`segment`]).optional()}),languageMap={afrikaans:`af`,arabic:`ar`,armenian:`hy`,azerbaijani:`az`,belarusian:`be`,bosnian:`bs`,bulgarian:`bg`,catalan:`ca`,chinese:`zh`,croatian:`hr`,czech:`cs`,danish:`da`,dutch:`nl`,english:`en`,estonian:`et`,finnish:`fi`,french:`fr`,galician:`gl`,german:`de`,greek:`el`,hebrew:`he`,hindi:`hi`,hungarian:`hu`,icelandic:`is`,indonesian:`id`,italian:`it`,japanese:`ja`,kannada:`kn`,kazakh:`kk`,korean:`ko`,latvian:`lv`,lithuanian:`lt`,macedonian:`mk`,malay:`ms`,marathi:`mr`,maori:`mi`,nepali:`ne`,norwegian:`no`,persian:`fa`,polish:`pl`,portuguese:`pt`,romanian:`ro`,russian:`ru`,serbian:`sr`,slovak:`sk`,slovenian:`sl`,spanish:`es`,swahili:`sw`,swedish:`sv`,tagalog:`tl`,tamil:`ta`,thai:`th`,turkish:`tr`,ukrainian:`uk`,urdu:`ur`,vietnamese:`vi`,welsh:`cy`},OpenAITranscriptionModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`}get provider(){return this.config.provider}async getArgs({audio,mediaType,providerOptions}){let warnings=[],openAIOptions=await parseProviderOptions({provider:`openai`,providerOptions,schema:openAITranscriptionProviderOptions}),formData=new FormData,blob=audio instanceof Uint8Array?new Blob([audio]):new Blob([convertBase64ToUint8Array(audio)]);formData.append(`model`,this.modelId);let fileExtension=mediaTypeToExtension(mediaType);if(formData.append(`file`,new File([blob],`audio`,{type:mediaType}),`audio.${fileExtension}`),openAIOptions){let transcriptionModelOptions={include:openAIOptions.include,language:openAIOptions.language,prompt:openAIOptions.prompt,response_format:[`gpt-4o-transcribe`,`gpt-4o-mini-transcribe`].includes(this.modelId)?`json`:`verbose_json`,temperature:openAIOptions.temperature,timestamp_granularities:openAIOptions.timestampGranularities};for(let[key,value]of Object.entries(transcriptionModelOptions))if(value!=null)if(Array.isArray(value))for(let item of value)formData.append(`${key}[]`,String(item));else formData.append(key,String(value))}return{formData,warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2,_d$1,_e$1,_f,_g,_h;let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{formData,warnings}=await this.getArgs(options$1),{value:response,responseHeaders,rawValue:rawResponse}=await postFormDataToApi({url:this.config.url({path:`/audio/transcriptions`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),options$1.headers),formData,failedResponseHandler:openaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(openaiTranscriptionResponseSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),language=response.language!=null&&response.language in languageMap?languageMap[response.language]:void 0;return{text:response.text,segments:(_g=(_f=(_d$1=response.segments)==null?void 0:_d$1.map(segment=>({text:segment.text,startSecond:segment.start,endSecond:segment.end})))==null?(_e$1=response.words)==null?void 0:_e$1.map(word=>({text:word.word,startSecond:word.start,endSecond:word.end})):_f)==null?[]:_g,language,durationInSeconds:(_h=response.duration)==null?void 0:_h,warnings,response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders,body:rawResponse}}}},openaiTranscriptionResponseSchema=z$2.object({text:z$2.string(),language:z$2.string().nullish(),duration:z$2.number().nullish(),words:z$2.array(z$2.object({word:z$2.string(),start:z$2.number(),end:z$2.number()})).nullish(),segments:z$2.array(z$2.object({id:z$2.number(),seek:z$2.number(),start:z$2.number(),end:z$2.number(),text:z$2.string(),tokens:z$2.array(z$2.number()),temperature:z$2.number(),avg_logprob:z$2.number(),compression_ratio:z$2.number(),no_speech_prob:z$2.number()})).nullish()});function createOpenAI(options$1={}){var _a$10,_b$2;let baseURL=(_a$10=withoutTrailingSlash(options$1.baseURL))==null?`https://api.openai.com/v1`:_a$10,providerName=(_b$2=options$1.name)==null?`openai`:_b$2,getHeaders$1=()=>({Authorization:`Bearer ${loadApiKey({apiKey:options$1.apiKey,environmentVariableName:`OPENAI_API_KEY`,description:`OpenAI`})}`,"OpenAI-Organization":options$1.organization,"OpenAI-Project":options$1.project,...options$1.headers}),createChatModel=modelId=>new OpenAIChatLanguageModel(modelId,{provider:`${providerName}.chat`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createCompletionModel=modelId=>new OpenAICompletionLanguageModel(modelId,{provider:`${providerName}.completion`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createEmbeddingModel=modelId=>new OpenAIEmbeddingModel(modelId,{provider:`${providerName}.embedding`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createImageModel=modelId=>new OpenAIImageModel(modelId,{provider:`${providerName}.image`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createTranscriptionModel=modelId=>new OpenAITranscriptionModel(modelId,{provider:`${providerName}.transcription`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createSpeechModel=modelId=>new OpenAISpeechModel(modelId,{provider:`${providerName}.speech`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch}),createLanguageModel=modelId=>{if(new.target)throw Error(`The OpenAI model function cannot be called with the new keyword.`);return createResponsesModel(modelId)},createResponsesModel=modelId=>new OpenAIResponsesLanguageModel(modelId,{provider:`${providerName}.responses`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch,fileIdPrefixes:[`file-`]}),provider=function(modelId){return createLanguageModel(modelId)};return provider.languageModel=createLanguageModel,provider.chat=createChatModel,provider.completion=createCompletionModel,provider.responses=createResponsesModel,provider.embedding=createEmbeddingModel,provider.textEmbedding=createEmbeddingModel,provider.textEmbeddingModel=createEmbeddingModel,provider.image=createImageModel,provider.imageModel=createImageModel,provider.transcription=createTranscriptionModel,provider.transcriptionModel=createTranscriptionModel,provider.speech=createSpeechModel,provider.speechModel=createSpeechModel,provider.tools=openaiTools,provider}var openai=createOpenAI(),openaiCompatibleProviderOptions=z$2.object({user:z$2.string().optional(),reasoningEffort:z$2.string().optional()}),openaiCompatibleErrorDataSchema=z$2.object({error:z$2.object({message:z$2.string(),type:z$2.string().nullish(),param:z$2.any().nullish(),code:z$2.union([z$2.string(),z$2.number()]).nullish()})}),defaultOpenAICompatibleErrorStructure={errorSchema:openaiCompatibleErrorDataSchema,errorToMessage:data$2=>data$2.error.message},openaiCompatibleTokenUsageSchema=z$2.object({prompt_tokens:z$2.number().nullish(),completion_tokens:z$2.number().nullish(),total_tokens:z$2.number().nullish(),prompt_tokens_details:z$2.object({cached_tokens:z$2.number().nullish()}).nullish(),completion_tokens_details:z$2.object({reasoning_tokens:z$2.number().nullish(),accepted_prediction_tokens:z$2.number().nullish(),rejected_prediction_tokens:z$2.number().nullish()}).nullish()}).nullish(),OpenAICompatibleChatResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({message:z$2.object({role:z$2.literal(`assistant`).nullish(),content:z$2.string().nullish(),reasoning_content:z$2.string().nullish(),reasoning:z$2.string().nullish(),tool_calls:z$2.array(z$2.object({id:z$2.string().nullish(),function:z$2.object({name:z$2.string(),arguments:z$2.string()})})).nullish()}),finish_reason:z$2.string().nullish()})),usage:openaiCompatibleTokenUsageSchema}),openaiCompatibleCompletionProviderOptions=z$2.object({echo:z$2.boolean().optional(),logitBias:z$2.record(z$2.string(),z$2.number()).optional(),suffix:z$2.string().optional(),user:z$2.string().optional()}),usageSchema=z$2.object({prompt_tokens:z$2.number(),completion_tokens:z$2.number(),total_tokens:z$2.number()}),openaiCompatibleCompletionResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({text:z$2.string(),finish_reason:z$2.string()})),usage:usageSchema.nullish()}),openaiCompatibleEmbeddingProviderOptions=z$2.object({dimensions:z$2.number().optional(),user:z$2.string().optional()}),openaiTextEmbeddingResponseSchema=z$2.object({data:z$2.array(z$2.object({embedding:z$2.array(z$2.number())})),usage:z$2.object({prompt_tokens:z$2.number()}).nullish(),providerMetadata:z$2.record(z$2.string(),z$2.record(z$2.string(),z$2.any())).optional()}),OpenAICompatibleImageModel=class{constructor(modelId,config){this.modelId=modelId,this.config=config,this.specificationVersion=`v2`,this.maxImagesPerCall=10}get provider(){return this.config.provider}async doGenerate({prompt,n:n$2,size,aspectRatio,seed,providerOptions,headers,abortSignal}){var _a$10,_b$2,_c$2,_d$1,_e$1;let warnings=[];aspectRatio!=null&&warnings.push({type:`unsupported-setting`,setting:`aspectRatio`,details:"This model does not support aspect ratio. Use `size` instead."}),seed!=null&&warnings.push({type:`unsupported-setting`,setting:`seed`});let currentDate=(_c$2=(_b$2=(_a$10=this.config._internal)==null?void 0:_a$10.currentDate)==null?void 0:_b$2.call(_a$10))==null?new Date:_c$2,{value:response,responseHeaders}=await postJsonToApi({url:this.config.url({path:`/images/generations`,modelId:this.modelId}),headers:combineHeaders(this.config.headers(),headers),body:{model:this.modelId,prompt,n:n$2,size,...(_d$1=providerOptions.openai)==null?{}:_d$1,response_format:`b64_json`},failedResponseHandler:createJsonErrorResponseHandler((_e$1=this.config.errorStructure)==null?defaultOpenAICompatibleErrorStructure:_e$1),successfulResponseHandler:createJsonResponseHandler(openaiCompatibleImageResponseSchema),abortSignal,fetch:this.config.fetch});return{images:response.data.map(item=>item.b64_json),warnings,response:{timestamp:currentDate,modelId:this.modelId,headers:responseHeaders}}}},openaiCompatibleImageResponseSchema=z$2.object({data:z$2.array(z$2.object({b64_json:z$2.string()}))});function convertToXaiChatMessages(prompt){let messages$1=[],warnings=[];for(let{role,content}of prompt)switch(role){case`system`:messages$1.push({role:`system`,content});break;case`user`:if(content.length===1&&content[0].type===`text`){messages$1.push({role:`user`,content:content[0].text});break}messages$1.push({role:`user`,content:content.map(part=>{switch(part.type){case`text`:return{type:`text`,text:part.text};case`file`:if(part.mediaType.startsWith(`image/`)){let mediaType=part.mediaType===`image/*`?`image/jpeg`:part.mediaType;return{type:`image_url`,image_url:{url:part.data instanceof URL?part.data.toString():`data:${mediaType};base64,${convertToBase64(part.data)}`}}}else throw new UnsupportedFunctionalityError({functionality:`file part media type ${part.mediaType}`})}})});break;case`assistant`:{let text=``,toolCalls=[];for(let part of content)switch(part.type){case`text`:text+=part.text;break;case`tool-call`:toolCalls.push({id:part.toolCallId,type:`function`,function:{name:part.toolName,arguments:JSON.stringify(part.input)}});break}messages$1.push({role:`assistant`,content:text,tool_calls:toolCalls.length>0?toolCalls:void 0});break}case`tool`:for(let toolResponse of content){let output=toolResponse.output,contentValue;switch(output.type){case`text`:case`error-text`:contentValue=output.value;break;case`content`:case`json`:case`error-json`:contentValue=JSON.stringify(output.value);break}messages$1.push({role:`tool`,tool_call_id:toolResponse.toolCallId,content:contentValue})}break;default:{let _exhaustiveCheck=role;throw Error(`Unsupported role: ${_exhaustiveCheck}`)}}return{messages:messages$1,warnings}}function getResponseMetadata({id,model,created}){return{id:id==null?void 0:id,modelId:model==null?void 0:model,timestamp:created==null?void 0:new Date(created*1e3)}}function mapXaiFinishReason(finishReason){switch(finishReason){case`stop`:return`stop`;case`length`:return`length`;case`tool_calls`:case`function_call`:return`tool-calls`;case`content_filter`:return`content-filter`;default:return`unknown`}}var webSourceSchema=z$2.object({type:z$2.literal(`web`),country:z$2.string().length(2).optional(),excludedWebsites:z$2.array(z$2.string()).max(5).optional(),allowedWebsites:z$2.array(z$2.string()).max(5).optional(),safeSearch:z$2.boolean().optional()}),xSourceSchema=z$2.object({type:z$2.literal(`x`),xHandles:z$2.array(z$2.string()).optional()}),newsSourceSchema=z$2.object({type:z$2.literal(`news`),country:z$2.string().length(2).optional(),excludedWebsites:z$2.array(z$2.string()).max(5).optional(),safeSearch:z$2.boolean().optional()}),rssSourceSchema=z$2.object({type:z$2.literal(`rss`),links:z$2.array(z$2.string().url()).max(1)}),searchSourceSchema=z$2.discriminatedUnion(`type`,[webSourceSchema,xSourceSchema,newsSourceSchema,rssSourceSchema]),xaiProviderOptions=z$2.object({reasoningEffort:z$2.enum([`low`,`high`]).optional(),searchParameters:z$2.object({mode:z$2.enum([`off`,`auto`,`on`]),returnCitations:z$2.boolean().optional(),fromDate:z$2.string().optional(),toDate:z$2.string().optional(),maxSearchResults:z$2.number().min(1).max(50).optional(),sources:z$2.array(searchSourceSchema).optional()}).optional()}),xaiErrorDataSchema=z$2.object({error:z$2.object({message:z$2.string(),type:z$2.string().nullish(),param:z$2.any().nullish(),code:z$2.union([z$2.string(),z$2.number()]).nullish()})}),xaiFailedResponseHandler=createJsonErrorResponseHandler({errorSchema:xaiErrorDataSchema,errorToMessage:data$2=>data$2.error.message});function prepareTools({tools,toolChoice}){tools=tools!=null&&tools.length?tools:void 0;let toolWarnings=[];if(tools==null)return{tools:void 0,toolChoice:void 0,toolWarnings};let xaiTools=[];for(let tool$1 of tools)tool$1.type===`provider-defined`?toolWarnings.push({type:`unsupported-tool`,tool:tool$1}):xaiTools.push({type:`function`,function:{name:tool$1.name,description:tool$1.description,parameters:tool$1.inputSchema}});if(toolChoice==null)return{tools:xaiTools,toolChoice:void 0,toolWarnings};let type=toolChoice.type;switch(type){case`auto`:case`none`:return{tools:xaiTools,toolChoice:type,toolWarnings};case`required`:return{tools:xaiTools,toolChoice:`required`,toolWarnings};case`tool`:return{tools:xaiTools,toolChoice:{type:`function`,function:{name:toolChoice.toolName}},toolWarnings};default:{let _exhaustiveCheck=type;throw new UnsupportedFunctionalityError({functionality:`tool choice type: ${_exhaustiveCheck}`})}}}var XaiChatLanguageModel=class{constructor(modelId,config){this.specificationVersion=`v2`,this.supportedUrls={"image/*":[/^https?:\/\/.*$/]},this.modelId=modelId,this.config=config}get provider(){return this.config.provider}async getArgs({prompt,maxOutputTokens,temperature,topP,topK,frequencyPenalty,presencePenalty,stopSequences,seed,responseFormat,providerOptions,tools,toolChoice}){var _a$10,_b$2,_c$2;let warnings=[],options$1=(_a$10=await parseProviderOptions({provider:`xai`,providerOptions,schema:xaiProviderOptions}))==null?{}:_a$10;topK!=null&&warnings.push({type:`unsupported-setting`,setting:`topK`}),frequencyPenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`frequencyPenalty`}),presencePenalty!=null&&warnings.push({type:`unsupported-setting`,setting:`presencePenalty`}),stopSequences!=null&&warnings.push({type:`unsupported-setting`,setting:`stopSequences`}),responseFormat!=null&&responseFormat.type===`json`&&responseFormat.schema!=null&&warnings.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is not supported`});let{messages:messages$1,warnings:messageWarnings}=convertToXaiChatMessages(prompt);warnings.push(...messageWarnings);let{tools:xaiTools,toolChoice:xaiToolChoice,toolWarnings}=prepareTools({tools,toolChoice});warnings.push(...toolWarnings);let baseArgs={model:this.modelId,max_tokens:maxOutputTokens,temperature,top_p:topP,seed,reasoning_effort:options$1.reasoningEffort,response_format:(responseFormat==null?void 0:responseFormat.type)===`json`?responseFormat.schema==null?{type:`json_object`}:{type:`json_schema`,json_schema:{name:(_b$2=responseFormat.name)==null?`response`:_b$2,schema:responseFormat.schema,strict:!0}}:void 0,search_parameters:options$1.searchParameters?{mode:options$1.searchParameters.mode,return_citations:options$1.searchParameters.returnCitations,from_date:options$1.searchParameters.fromDate,to_date:options$1.searchParameters.toDate,max_search_results:options$1.searchParameters.maxSearchResults,sources:(_c$2=options$1.searchParameters.sources)==null?void 0:_c$2.map(source$39=>({type:source$39.type,...source$39.type===`web`&&{country:source$39.country,excluded_websites:source$39.excludedWebsites,allowed_websites:source$39.allowedWebsites,safe_search:source$39.safeSearch},...source$39.type===`x`&&{x_handles:source$39.xHandles},...source$39.type===`news`&&{country:source$39.country,excluded_websites:source$39.excludedWebsites,safe_search:source$39.safeSearch},...source$39.type===`rss`&&{links:source$39.links}}))}:void 0,messages:messages$1,tools:xaiTools,tool_choice:xaiToolChoice};return{args:baseArgs,warnings}}async doGenerate(options$1){var _a$10,_b$2,_c$2;let{args:body,warnings}=await this.getArgs(options$1),{responseHeaders,value:response,rawValue:rawResponse}=await postJsonToApi({url:`${(_a$10=this.config.baseURL)==null?`https://api.x.ai/v1`:_a$10}/chat/completions`,headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:xaiFailedResponseHandler,successfulResponseHandler:createJsonResponseHandler(xaiChatResponseSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),choice$1=response.choices[0],content=[];if(choice$1.message.content!=null&&choice$1.message.content.length>0){let text=choice$1.message.content,lastMessage=body.messages[body.messages.length-1];(lastMessage==null?void 0:lastMessage.role)===`assistant`&&text===lastMessage.content&&(text=``),text.length>0&&content.push({type:`text`,text})}if(choice$1.message.reasoning_content!=null&&choice$1.message.reasoning_content.length>0&&content.push({type:`reasoning`,text:choice$1.message.reasoning_content}),choice$1.message.tool_calls!=null)for(let toolCall of choice$1.message.tool_calls)content.push({type:`tool-call`,toolCallId:toolCall.id,toolName:toolCall.function.name,input:toolCall.function.arguments});if(response.citations!=null)for(let url$4 of response.citations)content.push({type:`source`,sourceType:`url`,id:this.config.generateId(),url:url$4});return{content,finishReason:mapXaiFinishReason(choice$1.finish_reason),usage:{inputTokens:response.usage.prompt_tokens,outputTokens:response.usage.completion_tokens,totalTokens:response.usage.total_tokens,reasoningTokens:(_c$2=(_b$2=response.usage.completion_tokens_details)==null?void 0:_b$2.reasoning_tokens)==null?void 0:_c$2},request:{body},response:{...getResponseMetadata(response),headers:responseHeaders,body:rawResponse},warnings}}async doStream(options$1){var _a$10;let{args,warnings}=await this.getArgs(options$1),body={...args,stream:!0,stream_options:{include_usage:!0}},{responseHeaders,value:response}=await postJsonToApi({url:`${(_a$10=this.config.baseURL)==null?`https://api.x.ai/v1`:_a$10}/chat/completions`,headers:combineHeaders(this.config.headers(),options$1.headers),body,failedResponseHandler:xaiFailedResponseHandler,successfulResponseHandler:createEventSourceResponseHandler(xaiChatChunkSchema),abortSignal:options$1.abortSignal,fetch:this.config.fetch}),finishReason=`unknown`,usage={inputTokens:void 0,outputTokens:void 0,totalTokens:void 0},isFirstChunk=!0,contentBlocks={},lastReasoningDeltas={},self$1=this;return{stream:response.pipeThrough(new TransformStream({start(controller){controller.enqueue({type:`stream-start`,warnings})},transform(chunk$1,controller){var _a2$1,_b$2;if(options$1.includeRawChunks&&controller.enqueue({type:`raw`,rawValue:chunk$1.rawValue}),!chunk$1.success){controller.enqueue({type:`error`,error:chunk$1.error});return}let value=chunk$1.value;if(isFirstChunk&&(controller.enqueue({type:`response-metadata`,...getResponseMetadata(value)}),isFirstChunk=!1),value.citations!=null)for(let url$4 of value.citations)controller.enqueue({type:`source`,sourceType:`url`,id:self$1.config.generateId(),url:url$4});value.usage!=null&&(usage.inputTokens=value.usage.prompt_tokens,usage.outputTokens=value.usage.completion_tokens,usage.totalTokens=value.usage.total_tokens,usage.reasoningTokens=(_b$2=(_a2$1=value.usage.completion_tokens_details)==null?void 0:_a2$1.reasoning_tokens)==null?void 0:_b$2);let choice$1=value.choices[0];if((choice$1==null?void 0:choice$1.finish_reason)!=null&&(finishReason=mapXaiFinishReason(choice$1.finish_reason)),(choice$1==null?void 0:choice$1.delta)==null)return;let delta=choice$1.delta,choiceIndex=choice$1.index;if(delta.content!=null&&delta.content.length>0){let textContent=delta.content,lastMessage=body.messages[body.messages.length-1];if((lastMessage==null?void 0:lastMessage.role)===`assistant`&&textContent===lastMessage.content)return;let blockId=`text-${value.id||choiceIndex}`;contentBlocks[blockId]==null&&(contentBlocks[blockId]={type:`text`},controller.enqueue({type:`text-start`,id:blockId})),controller.enqueue({type:`text-delta`,id:blockId,delta:textContent})}if(delta.reasoning_content!=null&&delta.reasoning_content.length>0){let blockId=`reasoning-${value.id||choiceIndex}`;if(lastReasoningDeltas[blockId]===delta.reasoning_content)return;lastReasoningDeltas[blockId]=delta.reasoning_content,contentBlocks[blockId]==null&&(contentBlocks[blockId]={type:`reasoning`},controller.enqueue({type:`reasoning-start`,id:blockId})),controller.enqueue({type:`reasoning-delta`,id:blockId,delta:delta.reasoning_content})}if(delta.tool_calls!=null)for(let toolCall of delta.tool_calls){let toolCallId=toolCall.id;controller.enqueue({type:`tool-input-start`,id:toolCallId,toolName:toolCall.function.name}),controller.enqueue({type:`tool-input-delta`,id:toolCallId,delta:toolCall.function.arguments}),controller.enqueue({type:`tool-input-end`,id:toolCallId}),controller.enqueue({type:`tool-call`,toolCallId,toolName:toolCall.function.name,input:toolCall.function.arguments})}},flush(controller){for(let[blockId,block$1]of Object.entries(contentBlocks))controller.enqueue({type:block$1.type===`text`?`text-end`:`reasoning-end`,id:blockId});controller.enqueue({type:`finish`,finishReason,usage})}})),request:{body},response:{headers:responseHeaders}}}},xaiUsageSchema=z$2.object({prompt_tokens:z$2.number(),completion_tokens:z$2.number(),total_tokens:z$2.number(),completion_tokens_details:z$2.object({reasoning_tokens:z$2.number().nullish()}).nullish()}),xaiChatResponseSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({message:z$2.object({role:z$2.literal(`assistant`),content:z$2.string().nullish(),reasoning_content:z$2.string().nullish(),tool_calls:z$2.array(z$2.object({id:z$2.string(),type:z$2.literal(`function`),function:z$2.object({name:z$2.string(),arguments:z$2.string()})})).nullish()}),index:z$2.number(),finish_reason:z$2.string().nullish()})),object:z$2.literal(`chat.completion`),usage:xaiUsageSchema,citations:z$2.array(z$2.string().url()).nullish()}),xaiChatChunkSchema=z$2.object({id:z$2.string().nullish(),created:z$2.number().nullish(),model:z$2.string().nullish(),choices:z$2.array(z$2.object({delta:z$2.object({role:z$2.enum([`assistant`]).optional(),content:z$2.string().nullish(),reasoning_content:z$2.string().nullish(),tool_calls:z$2.array(z$2.object({id:z$2.string(),type:z$2.literal(`function`),function:z$2.object({name:z$2.string(),arguments:z$2.string()})})).nullish()}),finish_reason:z$2.string().nullish(),index:z$2.number()})),usage:xaiUsageSchema.nullish(),citations:z$2.array(z$2.string().url()).nullish()}),xaiErrorStructure={errorSchema:xaiErrorDataSchema,errorToMessage:data$2=>data$2.error.message};function createXai(options$1={}){var _a$10;let baseURL=withoutTrailingSlash((_a$10=options$1.baseURL)==null?`https://api.x.ai/v1`:_a$10),getHeaders$1=()=>({Authorization:`Bearer ${loadApiKey({apiKey:options$1.apiKey,environmentVariableName:`XAI_API_KEY`,description:`xAI API key`})}`,...options$1.headers}),createLanguageModel=modelId=>new XaiChatLanguageModel(modelId,{provider:`xai.chat`,baseURL,headers:getHeaders$1,generateId,fetch:options$1.fetch}),createImageModel=modelId=>new OpenAICompatibleImageModel(modelId,{provider:`xai.image`,url:({path:path$32})=>`${baseURL}${path$32}`,headers:getHeaders$1,fetch:options$1.fetch,errorStructure:xaiErrorStructure}),provider=modelId=>createLanguageModel(modelId);return provider.languageModel=createLanguageModel,provider.chat=createLanguageModel,provider.textEmbeddingModel=modelId=>{throw new NoSuchModelError({modelId,modelType:`textEmbeddingModel`})},provider.imageModel=createImageModel,provider.image=createImageModel,provider}var xai=createXai();function convertResponseToUIMessageStream(response){if(!response.body)throw Error(`Response body is required`);let responseFormat=response.headers.get(StreamResponseFormatHeader);if(!responseFormat||responseFormat===`ui-message`)return response.body.pipeThrough(new TextDecoderStream).pipeThrough(new EventSourceParserStream).pipeThrough(new TransformStream({async transform(chunk$1,controller){if(chunk$1.data===`[DONE]`)return;let result=await safeParseJSON({text:chunk$1.data});result.success?controller.enqueue(result.value):controller.error(result.error)}}));let createStream=model=>streamText({model,prompt:[{role:`user`,content:[{type:`text`,text:`Hello, world!`}]}]}).toUIMessageStream();switch(responseFormat){case`openai-chat`:return createStream(createOpenAI({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));case`openai-response`:return createStream(createOpenAI({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).responses(`fake-model`));case`anthropic`:return createStream(createAnthropic({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));case`google`:return createStream(createGoogleGenerativeAI({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));case`xai`:return createStream(createXai({apiKey:`ignored`,fetch:(init$7,options$1)=>response}).chat(`fake-model`));default:throw Error(`Unsupported response format: ${responseFormat}`)}}var splitPath=path$32=>{let paths=path$32.split(`/`);return paths[0]===``&&paths.shift(),paths},splitRoutingPath=routePath=>{let{groups,path:path$32}=extractGroupsFromPath(routePath),paths=splitPath(path$32);return replaceGroupMarks(paths,groups)},extractGroupsFromPath=path$32=>{let groups=[];return path$32=path$32.replace(/\{[^}]+\}/g,(match$1,index)=>{let mark=`@${index}`;return groups.push([mark,match$1]),mark}),{groups,path:path$32}},replaceGroupMarks=(paths,groups)=>{for(let i$4=groups.length-1;i$4>=0;i$4--){let[mark]=groups[i$4];for(let j$2=paths.length-1;j$2>=0;j$2--)if(paths[j$2].includes(mark)){paths[j$2]=paths[j$2].replace(mark,groups[i$4][1]);break}}return paths},patternCache={},getPattern=(label,next)=>{if(label===`*`)return`*`;let match$1=label.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(match$1){let cacheKey=`${label}#${next}`;return patternCache[cacheKey]||(match$1[2]?patternCache[cacheKey]=next&&next[0]!==`:`&&next[0]!==`*`?[cacheKey,match$1[1],RegExp(`^${match$1[2]}(?=/${next})`)]:[label,match$1[1],RegExp(`^${match$1[2]}$`)]:patternCache[cacheKey]=[label,match$1[1],!0]),patternCache[cacheKey]}return null},tryDecode=(str$1,decoder$2)=>{try{return decoder$2(str$1)}catch{return str$1.replace(/(?:%[0-9A-Fa-f]{2})+/g,match$1=>{try{return decoder$2(match$1)}catch{return match$1}})}},tryDecodeURI=str$1=>tryDecode(str$1,decodeURI),getPath$1=request$2=>{let url$4=request$2.url,start$1=url$4.indexOf(`/`,url$4.indexOf(`:`)+4),i$4=start$1;for(;i$4<url$4.length;i$4++){let charCode=url$4.charCodeAt(i$4);if(charCode===37){let queryIndex=url$4.indexOf(`?`,i$4),path$32=url$4.slice(start$1,queryIndex===-1?void 0:queryIndex);return tryDecodeURI(path$32.includes(`%25`)?path$32.replace(/%25/g,`%2525`):path$32)}else if(charCode===63)break}return url$4.slice(start$1,i$4)},getPathNoStrict=request$2=>{let result=getPath$1(request$2);return result.length>1&&result.at(-1)===`/`?result.slice(0,-1):result},mergePath=(base,sub,...rest)=>(rest.length&&(sub=mergePath(sub,...rest)),`${base?.[0]===`/`?``:`/`}${base}${sub===`/`?``:`${base?.at(-1)===`/`?``:`/`}${sub?.[0]===`/`?sub.slice(1):sub}`}`),checkOptionalParameter=path$32=>{if(path$32.charCodeAt(path$32.length-1)!==63||!path$32.includes(`:`))return null;let segments=path$32.split(`/`),results=[],basePath=``;return segments.forEach(segment=>{if(segment!==``&&!/\:/.test(segment))basePath+=`/`+segment;else if(/\:/.test(segment))if(/\?/.test(segment)){results.length===0&&basePath===``?results.push(`/`):results.push(basePath);let optionalSegment=segment.replace(`?`,``);basePath+=`/`+optionalSegment,results.push(basePath)}else basePath+=`/`+segment}),results.filter((v$1,i$4,a$3)=>a$3.indexOf(v$1)===i$4)},_decodeURI=value=>/[%+]/.test(value)?(value.indexOf(`+`)!==-1&&(value=value.replace(/\+/g,` `)),value.indexOf(`%`)===-1?value:tryDecode(value,decodeURIComponent_)):value,_getQueryParam=(url$4,key,multiple)=>{let encoded;if(!multiple&&key&&!/[%+]/.test(key)){let keyIndex2=url$4.indexOf(`?${key}`,8);for(keyIndex2===-1&&(keyIndex2=url$4.indexOf(`&${key}`,8));keyIndex2!==-1;){let trailingKeyCode=url$4.charCodeAt(keyIndex2+key.length+1);if(trailingKeyCode===61){let valueIndex=keyIndex2+key.length+2,endIndex=url$4.indexOf(`&`,valueIndex);return _decodeURI(url$4.slice(valueIndex,endIndex===-1?void 0:endIndex))}else if(trailingKeyCode==38||isNaN(trailingKeyCode))return``;keyIndex2=url$4.indexOf(`&${key}`,keyIndex2+1)}if(encoded=/[%+]/.test(url$4),!encoded)return}let results={};encoded??=/[%+]/.test(url$4);let keyIndex=url$4.indexOf(`?`,8);for(;keyIndex!==-1;){let nextKeyIndex=url$4.indexOf(`&`,keyIndex+1),valueIndex=url$4.indexOf(`=`,keyIndex);valueIndex>nextKeyIndex&&nextKeyIndex!==-1&&(valueIndex=-1);let name$2=url$4.slice(keyIndex+1,valueIndex===-1?nextKeyIndex===-1?void 0:nextKeyIndex:valueIndex);if(encoded&&(name$2=_decodeURI(name$2)),keyIndex=nextKeyIndex,name$2===``)continue;let value;valueIndex===-1?value=``:(value=url$4.slice(valueIndex+1,nextKeyIndex===-1?void 0:nextKeyIndex),encoded&&(value=_decodeURI(value))),multiple?(results[name$2]&&Array.isArray(results[name$2])||(results[name$2]=[]),results[name$2].push(value)):results[name$2]??=value}return key?results[key]:results},getQueryParam=_getQueryParam,getQueryParams=(url$4,key)=>_getQueryParam(url$4,key,!0),decodeURIComponent_=decodeURIComponent,validCookieNameRegEx=/^[\w!#$%&'*.^`|~+-]+$/,validCookieValueRegEx=/^[ !#-:<-[\]-~]*$/,parse$16=(cookie,name$2)=>{if(name$2&&cookie.indexOf(name$2)===-1)return{};let pairs=cookie.trim().split(`;`),parsedCookie={};for(let pairStr of pairs){pairStr=pairStr.trim();let valueStartPos=pairStr.indexOf(`=`);if(valueStartPos===-1)continue;let cookieName=pairStr.substring(0,valueStartPos).trim();if(name$2&&name$2!==cookieName||!validCookieNameRegEx.test(cookieName))continue;let cookieValue=pairStr.substring(valueStartPos+1).trim();if(cookieValue.startsWith(`"`)&&cookieValue.endsWith(`"`)&&(cookieValue=cookieValue.slice(1,-1)),validCookieValueRegEx.test(cookieValue)&&(parsedCookie[cookieName]=cookieValue.indexOf(`%`)===-1?cookieValue:tryDecode(cookieValue,decodeURIComponent_),name$2))break}return parsedCookie},_serialize=(name$2,value,opt={})=>{let cookie=`${name$2}=${value}`;if(name$2.startsWith(`__Secure-`)&&!opt.secure)throw Error(`__Secure- Cookie must have Secure attributes`);if(name$2.startsWith(`__Host-`)){if(!opt.secure)throw Error(`__Host- Cookie must have Secure attributes`);if(opt.path!==`/`)throw Error(`__Host- Cookie must have Path attributes with "/"`);if(opt.domain)throw Error(`__Host- Cookie must not have Domain attributes`)}if(opt&&typeof opt.maxAge==`number`&&opt.maxAge>=0){if(opt.maxAge>3456e4)throw Error(`Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.`);cookie+=`; Max-Age=${opt.maxAge|0}`}if(opt.domain&&opt.prefix!==`host`&&(cookie+=`; Domain=${opt.domain}`),opt.path&&(cookie+=`; Path=${opt.path}`),opt.expires){if(opt.expires.getTime()-Date.now()>3456e7)throw Error(`Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.`);cookie+=`; Expires=${opt.expires.toUTCString()}`}if(opt.httpOnly&&(cookie+=`; HttpOnly`),opt.secure&&(cookie+=`; Secure`),opt.sameSite&&(cookie+=`; SameSite=${opt.sameSite.charAt(0).toUpperCase()+opt.sameSite.slice(1)}`),opt.priority&&(cookie+=`; Priority=${opt.priority.charAt(0).toUpperCase()+opt.priority.slice(1)}`),opt.partitioned){if(!opt.secure)throw Error(`Partitioned Cookie must have Secure attributes`);cookie+=`; Partitioned`}return cookie},serialize$3=(name$2,value,opt)=>(value=encodeURIComponent(value),_serialize(name$2,value,opt)),mergePath$1=(base,path$32)=>(base=base.replace(/\/+$/,``),base+=`/`,path$32=path$32.replace(/^\/+/,``),base+path$32),replaceUrlParam=(urlString,params)=>{for(let[k,v$1]of Object.entries(params)){let reg=RegExp(`/:`+k+`(?:{[^/]+})?\\??`);urlString=urlString.replace(reg,v$1?`/${v$1}`:``)}return urlString},buildSearchParams=query=>{let searchParams=new URLSearchParams;for(let[k,v$1]of Object.entries(query)){if(v$1===void 0)continue;if(Array.isArray(v$1))for(let v2 of v$1)searchParams.append(k,v2);else searchParams.set(k,v$1)}return searchParams},replaceUrlProtocol=(urlString,protocol)=>{switch(protocol){case`ws`:return urlString.replace(/^http/,`ws`);case`http`:return urlString.replace(/^ws/,`http`)}},removeIndexString=urlString=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(urlString)?urlString.replace(/\/index(?=\?|$)/,`/`):urlString.replace(/\/index(?=\?|$)/,``);function isObject$5(item){return typeof item==`object`&&!!item&&!Array.isArray(item)}function deepMerge(target,source$39){if(!isObject$5(target)&&!isObject$5(source$39))return source$39;let merged={...target};for(let key in source$39){let value=source$39[key];isObject$5(merged[key])&&isObject$5(value)?merged[key]=deepMerge(merged[key],value):merged[key]=value}return merged}var createProxy=(callback$1,path$32)=>{let proxy=new Proxy(()=>{},{get(_obj,key){if(!(typeof key!=`string`||key===`then`))return createProxy(callback$1,[...path$32,key])},apply(_1,_2,args){return callback$1({path:path$32,args})}});return proxy},ClientRequestImpl=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(url$4,method){this.url=url$4,this.method=method}fetch=async(args,opt)=>{if(args){if(args.query&&(this.queryParams=buildSearchParams(args.query)),args.form){let form=new FormData;for(let[k,v$1]of Object.entries(args.form))if(Array.isArray(v$1))for(let v2 of v$1)form.append(k,v2);else form.append(k,v$1);this.rBody=form}args.json&&(this.rBody=JSON.stringify(args.json),this.cType=`application/json`),args.param&&(this.pathParams=args.param)}let methodUpperCase=this.method.toUpperCase(),headerValues={...args?.header,...typeof opt?.headers==`function`?await opt.headers():opt?.headers};if(args?.cookie){let cookies=[];for(let[key,value]of Object.entries(args.cookie))cookies.push(serialize$3(key,value,{path:`/`}));headerValues.Cookie=cookies.join(`,`)}this.cType&&(headerValues[`Content-Type`]=this.cType);let headers=new Headers(headerValues??void 0),url$4=this.url;url$4=removeIndexString(url$4),url$4=replaceUrlParam(url$4,this.pathParams),this.queryParams&&(url$4=url$4+`?`+this.queryParams.toString()),methodUpperCase=this.method.toUpperCase();let setBody=!(methodUpperCase===`GET`||methodUpperCase===`HEAD`);return(opt?.fetch||fetch)(url$4,{body:setBody?this.rBody:void 0,method:methodUpperCase,headers,...opt?.init})}},hc=(baseUrl,options$1)=>createProxy(function proxyCallback(opts){let parts=[...opts.path],lastParts=parts.slice(-3).reverse();if(lastParts[0]===`toString`)return lastParts[1]===`name`?lastParts[2]||``:proxyCallback.toString();if(lastParts[0]===`valueOf`)return lastParts[1]===`name`?lastParts[2]||``:proxyCallback;let method=``;if(/^\$/.test(lastParts[0])){let last$1=parts.pop();last$1&&(method=last$1.replace(/^\$/,``))}let path$32=parts.join(`/`),url$4=mergePath$1(baseUrl,path$32);if(method===`url`){let result=url$4;return opts.args[0]&&(opts.args[0].param&&(result=replaceUrlParam(url$4,opts.args[0].param)),opts.args[0].query&&(result=result+`?`+buildSearchParams(opts.args[0].query).toString())),result=removeIndexString(result),new URL(result)}if(method===`ws`){let webSocketUrl=replaceUrlProtocol(opts.args[0]&&opts.args[0].param?replaceUrlParam(url$4,opts.args[0].param):url$4,`ws`),targetUrl=new URL(webSocketUrl),queryParams=opts.args[0]?.query;queryParams&&Object.entries(queryParams).forEach(([key,value])=>{Array.isArray(value)?value.forEach(item=>targetUrl.searchParams.append(key,item)):targetUrl.searchParams.set(key,value)});let establishWebSocket=(...args)=>options$1?.webSocket!==void 0&&typeof options$1.webSocket==`function`?options$1.webSocket(...args):new WebSocket(...args);return establishWebSocket(targetUrl.toString())}let req$1=new ClientRequestImpl(url$4,method);if(method){options$1??={};let args=deepMerge(options$1,{...opts.args[1]});return req$1.fetch(opts.args[0],args)}return req$1},[]);const APIServerURLEnvironmentVariable=`BLINK_API_SERVER_URL`,url$3=process.env[APIServerURLEnvironmentVariable],client=hc(url$3??``,{fetch:url$3?void 0:async()=>{throw console.warn(`Your code is attempting to use the Blink API server, but no API server is configured for this Blink agent.`),Error(`No API server is configured for this Blink agent. External APIs are not available.`)}}),StreamResponseFormatHeader=`x-blink-stream-response-format`;var Client$1=class{options;constructor(options$1){this.options=options$1}get baseUrl(){return this.options.baseUrl}async sendMessages(request$2,options$1){let response=await fetch(`${this.options.baseUrl}/_agent/send-messages`,{method:`POST`,body:JSON.stringify(request$2),headers:this.options.headers,signal:options$1?.signal});return response.ok||await this.handleError(response),convertResponseToUIMessageStream(response)}async experimental_provideCompletions(request$2){let response=await fetch(`${this.options.baseUrl}/_agent/completions`,{method:`POST`,body:JSON.stringify(request$2),headers:this.options.headers});if(response.ok||await this.handleError(response),response.headers.get(`content-type`)?.includes(`application/json`)){let body=await response.json();return new ReadableStream({start(controller){controller.enqueue(body),controller.close()}})}if(!response.body)throw Error(`Failed to provide completions (${response.status}): ${response.statusText}`);return streamSSE(response)}async capabilities(){let response=await fetch(`${this.options.baseUrl}/_agent/capabilities`,{headers:this.options.headers});response.ok||await this.handleError(response);let body=await response.json();return body}async provideUIOptions(request$2,options$1){let response=await fetch(`${this.options.baseUrl}/_agent/options`,{method:`POST`,body:JSON.stringify(request$2),headers:this.options.headers,signal:options$1?.signal});response.ok||await this.handleError(response);let body=await response.json();return body}async health(){let response=await fetch(`${this.options.baseUrl}/_agent/health`,{headers:this.options.headers});response.ok||await this.handleError(response)}async handleError(response){let body;try{body=await response.text()}catch(err){}if(body){let parsed;try{parsed=JSON.parse(body)}catch(err){}throw parsed?Error(parsed.error):Error(`Failed to send messages (${response.status}): ${body}`)}throw Error(`Failed to send messages (${response.status}): ${response.statusText}`)}};const streamSSE=resp=>{let parser$2=new EventSourceParserStream;if(!resp.body)throw Error(`The stream endpoint did not return a body!`);return resp.body.pipeThrough(new TextDecoderStream).pipeTo(parser$2.writable).catch(err=>{}),createEventStreamFromReadable(parser$2.readable)},createEventStreamFromReadable=readable$1=>{let transformedStream=readable$1.pipeThrough(new TransformStream({async transform(chunk$1,controller){let result=await safeParseJSON({text:chunk$1.data});if(!result.success){controller.error(result.error);return}controller.enqueue(result.value)}}));return transformedStream},chat$1=Object.freeze({upsert:async id=>{let response=await client.chat[`:id`].$post({param:{id}});if(response.status!==200){let error$22=await response.json();throw Error(error$22.error)}return{id}},message:async(id,message,options$1)=>{let response=await client.chat[`:id`].sendMessages.$post({param:{id},json:{messages:[message],behavior:options$1?.behavior??`enqueue`}});if(response.status!==204){let error$22=await response.json();throw Error(error$22.error)}}}),storage$1=Object.freeze({kv:Object.freeze({get:async key=>{let res=await client.storage.kv[`:key`].$get({param:{key}});if(res.status!==200){let error$22=await res.json();throw Error(error$22.error)}let value=await res.json();return value.value},set:async(key,value)=>{let res=await client.storage.kv[`:key`].$post({param:{key},json:{value}});if(res.status!==204){let error$22=await res.json();throw Error(error$22.error)}},del:async key=>{let res=await client.storage.kv[`:key`].$delete({param:{key}});if(res.status!==204){let error$22=await res.json();throw Error(error$22.error)}}})});function isToolApprovalOutput(output){return typeof output==`object`&&!!output&&`type`in output&&output.type===`tool-approval`}function lastUIOptions(messages$1){for(let i$4=messages$1.length-1;i$4>=0;i$4--){let message=messages$1[i$4];if(message!==void 0&&message.role===`user`&&!(typeof message.metadata!=`object`||message.metadata===null)&&`options`in message.metadata)return message.metadata.options}}var compose$1=(middleware,onError$1,onNotFound)=>(context,next)=>{let index=-1;return dispatch(0);async function dispatch(i$4){if(i$4<=index)throw Error(`next() called multiple times`);index=i$4;let res,isError$1=!1,handler;if(middleware[i$4]?(handler=middleware[i$4][0][0],context.req.routeIndex=i$4):handler=i$4===middleware.length&&next||void 0,handler)try{res=await handler(context,()=>dispatch(i$4+1))}catch(err){if(err instanceof Error&&onError$1)context.error=err,res=await onError$1(err,context),isError$1=!0;else throw err}else context.finalized===!1&&onNotFound&&(res=await onNotFound(context));return res&&(context.finalized===!1||isError$1)&&(context.res=res),context}},GET_MATCH_RESULT=Symbol(),parseBody$1=async(request$2,options$1=Object.create(null))=>{let{all:all$2=!1,dot=!1}=options$1,headers=request$2 instanceof HonoRequest?request$2.raw.headers:request$2.headers,contentType=headers.get(`Content-Type`);return contentType?.startsWith(`multipart/form-data`)||contentType?.startsWith(`application/x-www-form-urlencoded`)?parseFormData(request$2,{all:all$2,dot}):{}};async function parseFormData(request$2,options$1){let formData=await request$2.formData();return formData?convertFormDataToBodyData(formData,options$1):{}}function convertFormDataToBodyData(formData,options$1){let form=Object.create(null);return formData.forEach((value,key)=>{let shouldParseAllValues=options$1.all||key.endsWith(`[]`);shouldParseAllValues?handleParsingAllValues(form,key,value):form[key]=value}),options$1.dot&&Object.entries(form).forEach(([key,value])=>{let shouldParseDotValues=key.includes(`.`);shouldParseDotValues&&(handleParsingNestedValues(form,key,value),delete form[key])}),form}var handleParsingAllValues=(form,key,value)=>{form[key]===void 0?key.endsWith(`[]`)?form[key]=[value]:form[key]=value:Array.isArray(form[key])?form[key].push(value):form[key]=[form[key],value]},handleParsingNestedValues=(form,key,value)=>{let nestedForm=form,keys=key.split(`.`);keys.forEach((key2,index)=>{index===keys.length-1?nestedForm[key2]=value:((!nestedForm[key2]||typeof nestedForm[key2]!=`object`||Array.isArray(nestedForm[key2])||nestedForm[key2]instanceof File)&&(nestedForm[key2]=Object.create(null)),nestedForm=nestedForm[key2])})},tryDecodeURIComponent=str$1=>tryDecode(str$1,decodeURIComponent_),HonoRequest=class{raw;#validatedData;#matchResult;routeIndex=0;path;bodyCache={};constructor(request$2,path$32=`/`,matchResult=[[]]){this.raw=request$2,this.path=path$32,this.#matchResult=matchResult,this.#validatedData={}}param(key){return key?this.#getDecodedParam(key):this.#getAllDecodedParams()}#getDecodedParam(key){let paramKey=this.#matchResult[0][this.routeIndex][1][key],param=this.#getParamValue(paramKey);return param&&/\%/.test(param)?tryDecodeURIComponent(param):param}#getAllDecodedParams(){let decoded={},keys=Object.keys(this.#matchResult[0][this.routeIndex][1]);for(let key of keys){let value=this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);value!==void 0&&(decoded[key]=/\%/.test(value)?tryDecodeURIComponent(value):value)}return decoded}#getParamValue(paramKey){return this.#matchResult[1]?this.#matchResult[1][paramKey]:paramKey}query(key){return getQueryParam(this.url,key)}queries(key){return getQueryParams(this.url,key)}header(name$2){if(name$2)return this.raw.headers.get(name$2)??void 0;let headerData={};return this.raw.headers.forEach((value,key)=>{headerData[key]=value}),headerData}async parseBody(options$1){return this.bodyCache.parsedBody??=await parseBody$1(this,options$1)}#cachedBody=key=>{let{bodyCache,raw:raw$1}=this,cachedBody=bodyCache[key];if(cachedBody)return cachedBody;let anyCachedKey=Object.keys(bodyCache)[0];return anyCachedKey?bodyCache[anyCachedKey].then(body=>(anyCachedKey===`json`&&(body=JSON.stringify(body)),new Response(body)[key]())):bodyCache[key]=raw$1[key]()};json(){return this.#cachedBody(`text`).then(text=>JSON.parse(text))}text(){return this.#cachedBody(`text`)}arrayBuffer(){return this.#cachedBody(`arrayBuffer`)}blob(){return this.#cachedBody(`blob`)}formData(){return this.#cachedBody(`formData`)}addValidatedData(target,data$2){this.#validatedData[target]=data$2}valid(target){return this.#validatedData[target]}get url(){return this.raw.url}get method(){return this.raw.method}get[GET_MATCH_RESULT](){return this.#matchResult}get matchedRoutes(){return this.#matchResult[0].map(([[,route$1]])=>route$1)}get routePath(){return this.#matchResult[0].map(([[,route$1]])=>route$1)[this.routeIndex].path}},HtmlEscapedCallbackPhase={Stringify:1,BeforeStream:2,Stream:3},raw=(value,callbacks)=>{let escapedString=new String(value);return escapedString.isEscaped=!0,escapedString.callbacks=callbacks,escapedString},resolveCallback=async(str$1,phase,preserveCallbacks,context,buffer$1)=>{typeof str$1==`object`&&!(str$1 instanceof String)&&(str$1 instanceof Promise||(str$1=str$1.toString()),str$1 instanceof Promise&&(str$1=await str$1));let callbacks=str$1.callbacks;if(!callbacks?.length)return Promise.resolve(str$1);buffer$1?buffer$1[0]+=str$1:buffer$1=[str$1];let resStr=Promise.all(callbacks.map(c$3=>c$3({phase,buffer:buffer$1,context}))).then(res=>Promise.all(res.filter(Boolean).map(str2=>resolveCallback(str2,phase,!1,context,buffer$1))).then(()=>buffer$1[0]));return preserveCallbacks?raw(await resStr,callbacks):resStr},TEXT_PLAIN=`text/plain; charset=UTF-8`,setDefaultContentType=(contentType,headers)=>({"Content-Type":contentType,...headers}),Context=class{#rawRequest;#req;env={};#var;finalized=!1;error;#status;#executionCtx;#res;#layout;#renderer;#notFoundHandler;#preparedHeaders;#matchResult;#path;constructor(req$1,options$1){this.#rawRequest=req$1,options$1&&(this.#executionCtx=options$1.executionCtx,this.env=options$1.env,this.#notFoundHandler=options$1.notFoundHandler,this.#path=options$1.path,this.#matchResult=options$1.matchResult)}get req(){return this.#req??=new HonoRequest(this.#rawRequest,this.#path,this.#matchResult),this.#req}get event(){if(this.#executionCtx&&`respondWith`in this.#executionCtx)return this.#executionCtx;throw Error(`This context has no FetchEvent`)}get executionCtx(){if(this.#executionCtx)return this.#executionCtx;throw Error(`This context has no ExecutionContext`)}get res(){return this.#res||=new Response(null,{headers:this.#preparedHeaders??=new Headers})}set res(_res){if(this.#res&&_res){_res=new Response(_res.body,_res);for(let[k,v$1]of this.#res.headers.entries()){if(k===`content-type`)continue;if(k===`set-cookie`){let cookies=this.#res.headers.getSetCookie();_res.headers.delete(`set-cookie`);for(let cookie of cookies)_res.headers.append(`set-cookie`,cookie)}else _res.headers.set(k,v$1)}}this.#res=_res,this.finalized=!0}render=(...args)=>(this.#renderer??=content=>this.html(content),this.#renderer(...args));setLayout=layout=>this.#layout=layout;getLayout=()=>this.#layout;setRenderer=renderer$1=>{this.#renderer=renderer$1};header=(name$2,value,options$1)=>{this.finalized&&(this.#res=new Response(this.#res.body,this.#res));let headers=this.#res?this.#res.headers:this.#preparedHeaders??=new Headers;value===void 0?headers.delete(name$2):options$1?.append?headers.append(name$2,value):headers.set(name$2,value)};status=status=>{this.#status=status};set=(key,value)=>{this.#var??=new Map,this.#var.set(key,value)};get=key=>this.#var?this.#var.get(key):void 0;get var(){return this.#var?Object.fromEntries(this.#var):{}}#newResponse(data$2,arg,headers){let responseHeaders=this.#res?new Headers(this.#res.headers):this.#preparedHeaders??new Headers;if(typeof arg==`object`&&`headers`in arg){let argHeaders=arg.headers instanceof Headers?arg.headers:new Headers(arg.headers);for(let[key,value]of argHeaders)key.toLowerCase()===`set-cookie`?responseHeaders.append(key,value):responseHeaders.set(key,value)}if(headers)for(let[k,v$1]of Object.entries(headers))if(typeof v$1==`string`)responseHeaders.set(k,v$1);else{responseHeaders.delete(k);for(let v2 of v$1)responseHeaders.append(k,v2)}let status=typeof arg==`number`?arg:arg?.status??this.#status;return new Response(data$2,{status,headers:responseHeaders})}newResponse=(...args)=>this.#newResponse(...args);body=(data$2,arg,headers)=>this.#newResponse(data$2,arg,headers);text=(text,arg,headers)=>!this.#preparedHeaders&&!this.#status&&!arg&&!headers&&!this.finalized?new Response(text):this.#newResponse(text,arg,setDefaultContentType(TEXT_PLAIN,headers));json=(object,arg,headers)=>this.#newResponse(JSON.stringify(object),arg,setDefaultContentType(`application/json`,headers));html=(html$1,arg,headers)=>{let res=html2=>this.#newResponse(html2,arg,setDefaultContentType(`text/html; charset=UTF-8`,headers));return typeof html$1==`object`?resolveCallback(html$1,HtmlEscapedCallbackPhase.Stringify,!1,{}).then(res):res(html$1)};redirect=(location,status)=>{let locationString=String(location);return this.header(`Location`,/[^\x00-\xFF]/.test(locationString)?encodeURI(locationString):locationString),this.newResponse(null,status??302)};notFound=()=>(this.#notFoundHandler??=()=>new Response,this.#notFoundHandler(this))},METHOD_NAME_ALL=`ALL`,METHOD_NAME_ALL_LOWERCASE=`all`,METHODS=[`get`,`post`,`put`,`delete`,`options`,`patch`],MESSAGE_MATCHER_IS_ALREADY_BUILT=`Can not add a route since the matcher is already built.`,UnsupportedPathError=class extends Error{},COMPOSED_HANDLER=`__COMPOSED_HANDLER`,notFoundHandler=c$3=>c$3.text(`404 Not Found`,404),errorHandler=(err,c$3)=>{if(`getResponse`in err){let res=err.getResponse();return c$3.newResponse(res.body,res)}return console.error(err),c$3.text(`Internal Server Error`,500)},Hono$1=class{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath=`/`;#path=`/`;routes=[];constructor(options$1={}){let allMethods=[...METHODS,METHOD_NAME_ALL_LOWERCASE];allMethods.forEach(method=>{this[method]=(args1,...args)=>(typeof args1==`string`?this.#path=args1:this.#addRoute(method,this.#path,args1),args.forEach(handler=>{this.#addRoute(method,this.#path,handler)}),this)}),this.on=(method,path$32,...handlers)=>{for(let p of[path$32].flat()){this.#path=p;for(let m$2 of[method].flat())handlers.map(handler=>{this.#addRoute(m$2.toUpperCase(),this.#path,handler)})}return this},this.use=(arg1,...handlers)=>(typeof arg1==`string`?this.#path=arg1:(this.#path=`*`,handlers.unshift(arg1)),handlers.forEach(handler=>{this.#addRoute(METHOD_NAME_ALL,this.#path,handler)}),this);let{strict,...optionsWithoutStrict}=options$1;Object.assign(this,optionsWithoutStrict),this.getPath=strict??!0?options$1.getPath??getPath$1:getPathNoStrict}#clone(){let clone$3=new Hono$1({router:this.router,getPath:this.getPath});return clone$3.errorHandler=this.errorHandler,clone$3.#notFoundHandler=this.#notFoundHandler,clone$3.routes=this.routes,clone$3}#notFoundHandler=notFoundHandler;errorHandler=errorHandler;route(path$32,app){let subApp=this.basePath(path$32);return app.routes.map(r$2=>{let handler;app.errorHandler===errorHandler?handler=r$2.handler:(handler=async(c$3,next)=>(await compose$1([],app.errorHandler)(c$3,()=>r$2.handler(c$3,next))).res,handler[COMPOSED_HANDLER]=r$2.handler),subApp.#addRoute(r$2.method,r$2.path,handler)}),this}basePath(path$32){let subApp=this.#clone();return subApp._basePath=mergePath(this._basePath,path$32),subApp}onError=handler=>(this.errorHandler=handler,this);notFound=handler=>(this.#notFoundHandler=handler,this);mount(path$32,applicationHandler,options$1){let replaceRequest,optionHandler;options$1&&(typeof options$1==`function`?optionHandler=options$1:(optionHandler=options$1.optionHandler,replaceRequest=options$1.replaceRequest===!1?request$2=>request$2:options$1.replaceRequest));let getOptions$1=optionHandler?c$3=>{let options2=optionHandler(c$3);return Array.isArray(options2)?options2:[options2]}:c$3=>{let executionContext;try{executionContext=c$3.executionCtx}catch{}return[c$3.env,executionContext]};replaceRequest||=(()=>{let mergedPath=mergePath(this._basePath,path$32),pathPrefixLength=mergedPath===`/`?0:mergedPath.length;return request$2=>{let url$4=new URL(request$2.url);return url$4.pathname=url$4.pathname.slice(pathPrefixLength)||`/`,new Request(url$4,request$2)}})();let handler=async(c$3,next)=>{let res=await applicationHandler(replaceRequest(c$3.req.raw),...getOptions$1(c$3));if(res)return res;await next()};return this.#addRoute(METHOD_NAME_ALL,mergePath(path$32,`*`),handler),this}#addRoute(method,path$32,handler){method=method.toUpperCase(),path$32=mergePath(this._basePath,path$32);let r$2={basePath:this._basePath,path:path$32,method,handler};this.router.add(method,path$32,[handler,r$2]),this.routes.push(r$2)}#handleError(err,c$3){if(err instanceof Error)return this.errorHandler(err,c$3);throw err}#dispatch(request$2,executionCtx,env$4,method){if(method===`HEAD`)return(async()=>new Response(null,await this.#dispatch(request$2,executionCtx,env$4,`GET`)))();let path$32=this.getPath(request$2,{env:env$4}),matchResult=this.router.match(method,path$32),c$3=new Context(request$2,{path:path$32,matchResult,env:env$4,executionCtx,notFoundHandler:this.#notFoundHandler});if(matchResult[0].length===1){let res;try{res=matchResult[0][0][0][0](c$3,async()=>{c$3.res=await this.#notFoundHandler(c$3)})}catch(err){return this.#handleError(err,c$3)}return res instanceof Promise?res.then(resolved=>resolved||(c$3.finalized?c$3.res:this.#notFoundHandler(c$3))).catch(err=>this.#handleError(err,c$3)):res??this.#notFoundHandler(c$3)}let composed=compose$1(matchResult[0],this.errorHandler,this.#notFoundHandler);return(async()=>{try{let context=await composed(c$3);if(!context.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return context.res}catch(err){return this.#handleError(err,c$3)}})()}fetch=(request$2,...rest)=>this.#dispatch(request$2,rest[1],rest[0],request$2.method);request=(input,requestInit,Env,executionCtx)=>input instanceof Request?this.fetch(requestInit?new Request(input,requestInit):input,Env,executionCtx):(input=input.toString(),this.fetch(new Request(/^https?:\/\//.test(input)?input:`http://localhost${mergePath(`/`,input)}`,requestInit),Env,executionCtx));fire=()=>{addEventListener(`fetch`,event=>{event.respondWith(this.#dispatch(event.request,event,void 0,event.request.method))})}},LABEL_REG_EXP_STR=`[^/]+`,ONLY_WILDCARD_REG_EXP_STR=`.*`,TAIL_WILDCARD_REG_EXP_STR=`(?:|/.*)`,PATH_ERROR=Symbol(),regExpMetaChars=new Set(`.\\+*[^]$()`);function compareKey(a$3,b$2){return a$3.length===1?b$2.length===1?a$3<b$2?-1:1:-1:b$2.length===1||a$3===ONLY_WILDCARD_REG_EXP_STR||a$3===TAIL_WILDCARD_REG_EXP_STR?1:b$2===ONLY_WILDCARD_REG_EXP_STR||b$2===TAIL_WILDCARD_REG_EXP_STR?-1:a$3===LABEL_REG_EXP_STR?1:b$2===LABEL_REG_EXP_STR?-1:a$3.length===b$2.length?a$3<b$2?-1:1:b$2.length-a$3.length}var Node$4=class{#index;#varIndex;#children=Object.create(null);insert(tokens,index,paramMap,context,pathErrorCheckOnly){if(tokens.length===0){if(this.#index!==void 0)throw PATH_ERROR;if(pathErrorCheckOnly)return;this.#index=index;return}let[token$1,...restTokens]=tokens,pattern=token$1===`*`?restTokens.length===0?[``,``,ONLY_WILDCARD_REG_EXP_STR]:[``,``,LABEL_REG_EXP_STR]:token$1===`/*`?[``,``,TAIL_WILDCARD_REG_EXP_STR]:token$1.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),node;if(pattern){let name$2=pattern[1],regexpStr=pattern[2]||LABEL_REG_EXP_STR;if(name$2&&pattern[2]&&(regexpStr===`.*`||(regexpStr=regexpStr.replace(/^\((?!\?:)(?=[^)]+\)$)/,`(?:`),/\((?!\?:)/.test(regexpStr))))throw PATH_ERROR;if(node=this.#children[regexpStr],!node){if(Object.keys(this.#children).some(k=>k!==ONLY_WILDCARD_REG_EXP_STR&&k!==TAIL_WILDCARD_REG_EXP_STR))throw PATH_ERROR;if(pathErrorCheckOnly)return;node=this.#children[regexpStr]=new Node$4,name$2!==``&&(node.#varIndex=context.varIndex++)}!pathErrorCheckOnly&&name$2!==``&¶mMap.push([name$2,node.#varIndex])}else if(node=this.#children[token$1],!node){if(Object.keys(this.#children).some(k=>k.length>1&&k!==ONLY_WILDCARD_REG_EXP_STR&&k!==TAIL_WILDCARD_REG_EXP_STR))throw PATH_ERROR;if(pathErrorCheckOnly)return;node=this.#children[token$1]=new Node$4}node.insert(restTokens,index,paramMap,context,pathErrorCheckOnly)}buildRegExpStr(){let childKeys=Object.keys(this.#children).sort(compareKey),strList=childKeys.map(k=>{let c$3=this.#children[k];return(typeof c$3.#varIndex==`number`?`(${k})@${c$3.#varIndex}`:regExpMetaChars.has(k)?`\\${k}`:k)+c$3.buildRegExpStr()});return typeof this.#index==`number`&&strList.unshift(`#${this.#index}`),strList.length===0?``:strList.length===1?strList[0]:`(?:`+strList.join(`|`)+`)`}},Trie=class{#context={varIndex:0};#root=new Node$4;insert(path$32,index,pathErrorCheckOnly){let paramAssoc=[],groups=[];for(let i$4=0;;){let replaced=!1;if(path$32=path$32.replace(/\{[^}]+\}/g,m$2=>{let mark=`@\\${i$4}`;return groups[i$4]=[mark,m$2],i$4++,replaced=!0,mark}),!replaced)break}let tokens=path$32.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let i$4=groups.length-1;i$4>=0;i$4--){let[mark]=groups[i$4];for(let j$2=tokens.length-1;j$2>=0;j$2--)if(tokens[j$2].indexOf(mark)!==-1){tokens[j$2]=tokens[j$2].replace(mark,groups[i$4][1]);break}}return this.#root.insert(tokens,index,paramAssoc,this.#context,pathErrorCheckOnly),paramAssoc}buildRegExp(){let regexp=this.#root.buildRegExpStr();if(regexp===``)return[/^$/,[],[]];let captureIndex=0,indexReplacementMap=[],paramReplacementMap=[];return regexp=regexp.replace(/#(\d+)|@(\d+)|\.\*\$/g,(_$3,handlerIndex,paramIndex)=>handlerIndex===void 0?(paramIndex===void 0||(paramReplacementMap[Number(paramIndex)]=++captureIndex),``):(indexReplacementMap[++captureIndex]=Number(handlerIndex),`$()`)),[RegExp(`^${regexp}`),indexReplacementMap,paramReplacementMap]}},emptyParam=[],nullMatcher=[/^$/,[],Object.create(null)],wildcardRegExpCache=Object.create(null);function buildWildcardRegExp(path$32){return wildcardRegExpCache[path$32]??=RegExp(path$32===`*`?``:`^${path$32.replace(/\/\*$|([.\\+*[^\]$()])/g,(_$3,metaChar)=>metaChar?`\\${metaChar}`:`(?:|/.*)`)}$`)}function clearWildcardRegExpCache(){wildcardRegExpCache=Object.create(null)}function buildMatcherFromPreprocessedRoutes(routes){let trie=new Trie,handlerData=[];if(routes.length===0)return nullMatcher;let routesWithStaticPathFlag=routes.map(route$1=>[!/\*|\/:/.test(route$1[0]),...route$1]).sort(([isStaticA,pathA],[isStaticB,pathB])=>isStaticA?1:isStaticB?-1:pathA.length-pathB.length),staticMap=Object.create(null);for(let i$4=0,j$2=-1,len$1=routesWithStaticPathFlag.length;i$4<len$1;i$4++){let[pathErrorCheckOnly,path$32,handlers]=routesWithStaticPathFlag[i$4];pathErrorCheckOnly?staticMap[path$32]=[handlers.map(([h$3])=>[h$3,Object.create(null)]),emptyParam]:j$2++;let paramAssoc;try{paramAssoc=trie.insert(path$32,j$2,pathErrorCheckOnly)}catch(e$1){throw e$1===PATH_ERROR?new UnsupportedPathError(path$32):e$1}pathErrorCheckOnly||(handlerData[j$2]=handlers.map(([h$3,paramCount])=>{let paramIndexMap=Object.create(null);for(--paramCount;paramCount>=0;paramCount--){let[key,value]=paramAssoc[paramCount];paramIndexMap[key]=value}return[h$3,paramIndexMap]}))}let[regexp,indexReplacementMap,paramReplacementMap]=trie.buildRegExp();for(let i$4=0,len$1=handlerData.length;i$4<len$1;i$4++)for(let j$2=0,len2=handlerData[i$4].length;j$2<len2;j$2++){let map$2=handlerData[i$4][j$2]?.[1];if(!map$2)continue;let keys=Object.keys(map$2);for(let k=0,len3=keys.length;k<len3;k++)map$2[keys[k]]=paramReplacementMap[map$2[keys[k]]]}let handlerMap=[];for(let i$4 in indexReplacementMap)handlerMap[i$4]=handlerData[indexReplacementMap[i$4]];return[regexp,handlerMap,staticMap]}function findMiddleware(middleware,path$32){if(middleware){for(let k of Object.keys(middleware).sort((a$3,b$2)=>b$2.length-a$3.length))if(buildWildcardRegExp(k).test(path$32))return[...middleware[k]]}}var RegExpRouter=class{name=`RegExpRouter`;#middleware;#routes;constructor(){this.#middleware={[METHOD_NAME_ALL]:Object.create(null)},this.#routes={[METHOD_NAME_ALL]:Object.create(null)}}add(method,path$32,handler){let middleware=this.#middleware,routes=this.#routes;if(!middleware||!routes)throw Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);middleware[method]||[middleware,routes].forEach(handlerMap=>{handlerMap[method]=Object.create(null),Object.keys(handlerMap[METHOD_NAME_ALL]).forEach(p=>{handlerMap[method][p]=[...handlerMap[METHOD_NAME_ALL][p]]})}),path$32===`/*`&&(path$32=`*`);let paramCount=(path$32.match(/\/:/g)||[]).length;if(/\*$/.test(path$32)){let re$3=buildWildcardRegExp(path$32);method===METHOD_NAME_ALL?Object.keys(middleware).forEach(m$2=>{middleware[m$2][path$32]||=findMiddleware(middleware[m$2],path$32)||findMiddleware(middleware[METHOD_NAME_ALL],path$32)||[]}):middleware[method][path$32]||=findMiddleware(middleware[method],path$32)||findMiddleware(middleware[METHOD_NAME_ALL],path$32)||[],Object.keys(middleware).forEach(m$2=>{(method===METHOD_NAME_ALL||method===m$2)&&Object.keys(middleware[m$2]).forEach(p=>{re$3.test(p)&&middleware[m$2][p].push([handler,paramCount])})}),Object.keys(routes).forEach(m$2=>{(method===METHOD_NAME_ALL||method===m$2)&&Object.keys(routes[m$2]).forEach(p=>re$3.test(p)&&routes[m$2][p].push([handler,paramCount]))});return}let paths=checkOptionalParameter(path$32)||[path$32];for(let i$4=0,len$1=paths.length;i$4<len$1;i$4++){let path2=paths[i$4];Object.keys(routes).forEach(m$2=>{(method===METHOD_NAME_ALL||method===m$2)&&(routes[m$2][path2]||=[...findMiddleware(middleware[m$2],path2)||findMiddleware(middleware[METHOD_NAME_ALL],path2)||[]],routes[m$2][path2].push([handler,paramCount-len$1+i$4+1]))})}}match(method,path$32){clearWildcardRegExpCache();let matchers=this.#buildAllMatchers();return this.match=(method2,path2)=>{let matcher=matchers[method2]||matchers[METHOD_NAME_ALL],staticMatch=matcher[2][path2];if(staticMatch)return staticMatch;let match$1=path2.match(matcher[0]);if(!match$1)return[[],emptyParam];let index=match$1.indexOf(``,1);return[matcher[1][index],match$1]},this.match(method,path$32)}#buildAllMatchers(){let matchers=Object.create(null);return Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach(method=>{matchers[method]||=this.#buildMatcher(method)}),this.#middleware=this.#routes=void 0,matchers}#buildMatcher(method){let routes=[],hasOwnRoute=method===METHOD_NAME_ALL;return[this.#middleware,this.#routes].forEach(r$2=>{let ownRoute=r$2[method]?Object.keys(r$2[method]).map(path$32=>[path$32,r$2[method][path$32]]):[];ownRoute.length===0?method!==METHOD_NAME_ALL&&routes.push(...Object.keys(r$2[METHOD_NAME_ALL]).map(path$32=>[path$32,r$2[METHOD_NAME_ALL][path$32]])):(hasOwnRoute||=!0,routes.push(...ownRoute))}),hasOwnRoute?buildMatcherFromPreprocessedRoutes(routes):null}},SmartRouter=class{name=`SmartRouter`;#routers=[];#routes=[];constructor(init$7){this.#routers=init$7.routers}add(method,path$32,handler){if(!this.#routes)throw Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);this.#routes.push([method,path$32,handler])}match(method,path$32){if(!this.#routes)throw Error(`Fatal error`);let routers=this.#routers,routes=this.#routes,len$1=routers.length,i$4=0,res;for(;i$4<len$1;i$4++){let router=routers[i$4];try{for(let i2=0,len2=routes.length;i2<len2;i2++)router.add(...routes[i2]);res=router.match(method,path$32)}catch(e$1){if(e$1 instanceof UnsupportedPathError)continue;throw e$1}this.match=router.match.bind(router),this.#routers=[router],this.#routes=void 0;break}if(i$4===len$1)throw Error(`Fatal error`);return this.name=`SmartRouter + ${this.activeRouter.name}`,res}get activeRouter(){if(this.#routes||this.#routers.length!==1)throw Error(`No active router has been determined yet.`);return this.#routers[0]}},emptyParams=Object.create(null),Node$3=class{#methods;#children;#patterns;#order=0;#params=emptyParams;constructor(method,handler,children){if(this.#children=children||Object.create(null),this.#methods=[],method&&handler){let m$2=Object.create(null);m$2[method]={handler,possibleKeys:[],score:0},this.#methods=[m$2]}this.#patterns=[]}insert(method,path$32,handler){this.#order=++this.#order;let curNode=this,parts=splitRoutingPath(path$32),possibleKeys=[];for(let i$4=0,len$1=parts.length;i$4<len$1;i$4++){let p=parts[i$4],nextP=parts[i$4+1],pattern=getPattern(p,nextP),key=Array.isArray(pattern)?pattern[0]:p;if(key in curNode.#children){curNode=curNode.#children[key],pattern&&possibleKeys.push(pattern[1]);continue}curNode.#children[key]=new Node$3,pattern&&(curNode.#patterns.push(pattern),possibleKeys.push(pattern[1])),curNode=curNode.#children[key]}return curNode.#methods.push({[method]:{handler,possibleKeys:possibleKeys.filter((v$1,i$4,a$3)=>a$3.indexOf(v$1)===i$4),score:this.#order}}),curNode}#getHandlerSets(node,method,nodeParams,params){let handlerSets=[];for(let i$4=0,len$1=node.#methods.length;i$4<len$1;i$4++){let m$2=node.#methods[i$4],handlerSet=m$2[method]||m$2[METHOD_NAME_ALL],processedSet={};if(handlerSet!==void 0&&(handlerSet.params=Object.create(null),handlerSets.push(handlerSet),nodeParams!==emptyParams||params&¶ms!==emptyParams))for(let i2=0,len2=handlerSet.possibleKeys.length;i2<len2;i2++){let key=handlerSet.possibleKeys[i2],processed=processedSet[handlerSet.score];handlerSet.params[key]=params?.[key]&&!processed?params[key]:nodeParams[key]??params?.[key],processedSet[handlerSet.score]=!0}}return handlerSets}search(method,path$32){let handlerSets=[];this.#params=emptyParams;let curNode=this,curNodes=[curNode],parts=splitPath(path$32),curNodesQueue=[];for(let i$4=0,len$1=parts.length;i$4<len$1;i$4++){let part=parts[i$4],isLast=i$4===len$1-1,tempNodes=[];for(let j$2=0,len2=curNodes.length;j$2<len2;j$2++){let node=curNodes[j$2],nextNode=node.#children[part];nextNode&&(nextNode.#params=node.#params,isLast?(nextNode.#children[`*`]&&handlerSets.push(...this.#getHandlerSets(nextNode.#children[`*`],method,node.#params)),handlerSets.push(...this.#getHandlerSets(nextNode,method,node.#params))):tempNodes.push(nextNode));for(let k=0,len3=node.#patterns.length;k<len3;k++){let pattern=node.#patterns[k],params=node.#params===emptyParams?{}:{...node.#params};if(pattern===`*`){let astNode=node.#children[`*`];astNode&&(handlerSets.push(...this.#getHandlerSets(astNode,method,node.#params)),astNode.#params=params,tempNodes.push(astNode));continue}let[key,name$2,matcher]=pattern;if(!part&&!(matcher instanceof RegExp))continue;let child=node.#children[key],restPathString=parts.slice(i$4).join(`/`);if(matcher instanceof RegExp){let m$2=matcher.exec(restPathString);if(m$2){if(params[name$2]=m$2[0],handlerSets.push(...this.#getHandlerSets(child,method,node.#params,params)),Object.keys(child.#children).length){child.#params=params;let componentCount=m$2[0].match(/\//)?.length??0,targetCurNodes=curNodesQueue[componentCount]||=[];targetCurNodes.push(child)}continue}}(matcher===!0||matcher.test(part))&&(params[name$2]=part,isLast?(handlerSets.push(...this.#getHandlerSets(child,method,params,node.#params)),child.#children[`*`]&&handlerSets.push(...this.#getHandlerSets(child.#children[`*`],method,params,node.#params))):(child.#params=params,tempNodes.push(child)))}}curNodes=tempNodes.concat(curNodesQueue.shift()??[])}return handlerSets.length>1&&handlerSets.sort((a$3,b$2)=>a$3.score-b$2.score),[handlerSets.map(({handler,params})=>[handler,params])]}},TrieRouter=class{name=`TrieRouter`;#node;constructor(){this.#node=new Node$3}add(method,path$32,handler){let results=checkOptionalParameter(path$32);if(results){for(let i$4=0,len$1=results.length;i$4<len$1;i$4++)this.#node.insert(method,results[i$4],handler);return}this.#node.insert(method,path$32,handler)}match(method,path$32){return this.#node.search(method,path$32)}},Hono=class extends Hono$1{constructor(options$1={}){super(options$1),this.router=options$1.router??new SmartRouter({routers:[new RegExpRouter,new TrieRouter]})}},getCookie=(c$3,key,prefix)=>{let cookie=c$3.req.raw.headers.get(`Cookie`);if(typeof key==`string`){if(!cookie)return;let finalKey=key;prefix===`secure`?finalKey=`__Secure-`+key:prefix===`host`&&(finalKey=`__Host-`+key);let obj2=parse$16(cookie,finalKey);return obj2[finalKey]}if(!cookie)return{};let obj=parse$16(cookie);return obj},HTTPException=class extends Error{res;status;constructor(status=500,options$1){super(options$1?.message,{cause:options$1?.cause}),this.res=options$1?.res,this.status=status}getResponse(){if(this.res){let newResponse=new Response(this.res.body,{status:this.status,headers:this.res.headers});return newResponse}return new Response(this.message,{status:this.status})}},bufferToFormData=(arrayBuffer,contentType)=>{let response=new Response(arrayBuffer,{headers:{"Content-Type":contentType}});return response.formData()},jsonRegex=/^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,multipartRegex=/^multipart\/form-data(;\s?boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/,urlencodedRegex=/^application\/x-www-form-urlencoded(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,validator=(target,validationFunc)=>async(c$3,next)=>{let value={},contentType=c$3.req.header(`Content-Type`);switch(target){case`json`:if(!contentType||!jsonRegex.test(contentType))break;try{value=await c$3.req.json()}catch{let message=`Malformed JSON in request body`;throw new HTTPException(400,{message:`Malformed JSON in request body`})}break;case`form`:{if(!contentType||!(multipartRegex.test(contentType)||urlencodedRegex.test(contentType)))break;let formData;if(c$3.req.bodyCache.formData)formData=await c$3.req.bodyCache.formData;else try{let arrayBuffer=await c$3.req.arrayBuffer();formData=await bufferToFormData(arrayBuffer,contentType),c$3.req.bodyCache.formData=formData}catch(e$1){let message=`Malformed FormData request.`;throw message+=e$1 instanceof Error?` ${e$1.message}`:` ${String(e$1)}`,new HTTPException(400,{message})}let form={};formData.forEach((value2,key)=>{key.endsWith(`[]`)?(form[key]??=[]).push(value2):Array.isArray(form[key])?form[key].push(value2):key in form?form[key]=[form[key],value2]:form[key]=value2}),value=form;break}case`query`:value=Object.fromEntries(Object.entries(c$3.req.queries()).map(([k,v$1])=>v$1.length===1?[k,v$1[0]]:[k,v$1]));break;case`param`:value=c$3.req.param();break;case`header`:value=c$3.req.header();break;case`cookie`:value=getCookie(c$3);break}let res=await validationFunc(value,c$3);if(res instanceof Response)return res;c$3.req.addValidatedData(target,res),await next()};const error$21=(c$3,msg)=>c$3.json({error:msg},400),validateStorageKey=c$3=>{let key=c$3.req.param(`key`);return!key||key===``?{key,err:`Key is required`}:key.length>128?{key,err:`Key is too long. Max length is 128 characters.`}:{key}},createRouter=()=>new Hono,storage=createRouter().get(`/kv/:key`,async c$3=>{let{key,err}=validateStorageKey(c$3);if(err)return error$21(c$3,err);let value=await c$3.env.storage.kv.get(key);return c$3.json({value},200)}).post(`/kv/:key`,validator(`json`,(body,c$3)=>{let value=body.value;return value?typeof value==`string`?value.length>1024?error$21(c$3,`Value is too long. Max length is 1024 characters.`):{value}:error$21(c$3,`Value must be a string`):error$21(c$3,`Value is required`)}),async c$3=>{let{key,err}=validateStorageKey(c$3);if(err)return error$21(c$3,err);let{value}=c$3.req.valid(`json`);return await c$3.env.storage.kv.set(key,value),c$3.body(null,204)}).delete(`/kv/:key`,async c$3=>{let{key,err}=validateStorageKey(c$3);return err?error$21(c$3,err):(await c$3.env.storage.kv.del(key),c$3.body(null,204))}),validateChatID=c$3=>{let id=c$3.req.param(`id`);return id?id.length>128?{id,err:`ID is too long. Max length is 128 characters.`}:{id}:{id,err:`ID is required`}},chat=createRouter().basePath(`/:id`).post(`/`,async c$3=>{let{id,err}=validateChatID(c$3);if(err)return error$21(c$3,err);let chat$2=await c$3.env.chat.upsert(id);return c$3.json({id:chat$2.id},200)}).post(`/sendMessages`,validator(`json`,(body,c$3)=>{let messages$1=body.messages;if(!messages$1)return error$21(c$3,`Messages are required`);if(!Array.isArray(messages$1))return error$21(c$3,`Messages must be an array`);if(messages$1.length===0)return error$21(c$3,`Messages must not be empty`);let behavior=body.behavior;return behavior!==`enqueue`&&behavior!==`interrupt`&&behavior!==`append`?error$21(c$3,`Invalid behavior`):{messages:messages$1,behavior}}),async c$3=>{let{id,err}=validateChatID(c$3);if(err)return error$21(c$3,err);let{messages:messages$1,behavior}=c$3.req.valid(`json`);try{await c$3.env.chat.sendMessages(id,{messages:messages$1,behavior})}catch(err$1){return error$21(c$3,err$1 instanceof Error?err$1.message:`Unknown error`)}return c$3.body(null,204)}),api$8=new Hono().route(`/storage`,storage).route(`/chat`,chat);var api_default$1=api$8;const shouldContinueStreaming=lastMessage=>{if(lastMessage.role!==`assistant`)return!1;let lastStepStartIndex=lastMessage.parts.reduce((lastIndex,part,index)=>part.type===`step-start`?index:lastIndex,-1),lastStepToolInvocations=lastMessage.parts.slice(lastStepStartIndex+1).filter(isToolOrDynamicToolUIPart);if(lastStepToolInvocations.length===0)return!1;let hasPendingApprovals=lastStepToolInvocations.some(part=>isToolApprovalOutput(part.output)&&part.output.outcome===`pending`);return hasPendingApprovals?!1:lastStepToolInvocations.every(part=>part.state.startsWith(`output-`))};function filenameReservedRegex(){return/[<>:"/\\|?*\u0000-\u001F]|[. ]$/g}function windowsReservedNameRegex(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}const MAX_FILENAME_LENGTH=100,reRelativePath=/^\.+(\\|\/)|^\.+$/,reTrailingDotsAndSpaces=/[. ]+$/,reControlChars=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/gu,reControlCharsTest=/[\p{Control}\p{Format}\p{Zl}\p{Zp}\uFFF0-\uFFFF]/u,isZeroWidthJoiner=char=>char===``,reRepeatedReservedCharacters=/([<>:"/\\|?*\u0000-\u001F]){2,}/g,reUnicodeWhitespace=/[\t\n\r\u00A0\u1680\u2000-\u200A\u202F\u205F\u3000]+/g;let segmenter;function getSegmenter(){return segmenter??=new Intl.Segmenter(void 0,{granularity:`grapheme`}),segmenter}function filenamify(string,options$1={}){if(typeof string!=`string`)throw TypeError(`Expected a string`);let replacement=options$1.replacement??`!`;if(filenameReservedRegex().test(replacement)||[...replacement].some(char=>reControlCharsTest.test(char)&&!isZeroWidthJoiner(char)))throw Error(`Replacement string cannot contain reserved filename characters`);string=string.normalize(`NFC`),string=string.replaceAll(reUnicodeWhitespace,` `),replacement.length>0&&(string=string.replaceAll(reRepeatedReservedCharacters,`$1`)),string=string.replace(reTrailingDotsAndSpaces,``),string=string.replace(reRelativePath,replacement),string=string.replace(filenameReservedRegex(),replacement),string=string.replaceAll(reControlChars,char=>isZeroWidthJoiner(char)?char:replacement),string.length===0&&(string=replacement),string=windowsReservedNameRegex().test(string)?string+replacement:string;let allowedLength=typeof options$1.maxLength==`number`?options$1.maxLength:100;if(string.length>allowedLength){let extensionIndex=string.lastIndexOf(`.`);if(extensionIndex===-1)string=truncateByGraphemeBudget(string,allowedLength);else{let filename=string.slice(0,extensionIndex),extension=string.slice(extensionIndex),baseBudget=Math.max(0,allowedLength-extension.length);string=truncateByGraphemeBudget(filename,baseBudget)+extension}}return string}function truncateByGraphemeBudget(input,budget){if(input.length<=budget)return input;let count$1=0,output=``;for(let{segment}of getSegmenter().segment(input)){let next=count$1+segment.length;if(next>budget)break;output+=segment,count$1=next}return output}const createDiskStore=(dataDirectory,idKey,opts)=>{let indexCache,valueCache=new Map,ensureDir=dir=>{fs$4.mkdirSync(dir,{recursive:!0})},readJSONIfExists=filePath=>{let stat$6=fs$4.statSync(filePath,{throwIfNoEntry:!1});if(stat$6)return JSON.parse(fs$4.readFileSync(filePath,`utf-8`))},fdatasyncAndClose=fd=>{try{fs$4.fdatasyncSync(fd)}catch{}try{fs$4.closeSync(fd)}catch{}},fsyncPath=p=>{try{let fd=fs$4.openSync(p,`r`);try{fs$4.fsyncSync(fd)}finally{fs$4.closeSync(fd)}}catch{}},writeAtomicJSON=(filePath,data$2)=>{let dir=path$2.dirname(filePath);ensureDir(dir);let tmp=path$2.join(dir,`.tmp-`+process.pid+`-`+Math.random().toString(36).slice(2)),json$2=JSON.stringify(data$2,null,2),fd;try{fd=fs$4.openSync(tmp,`w`),fs$4.writeFileSync(fd,json$2,`utf-8`),fdatasyncAndClose(fd),fd=void 0,fs$4.renameSync(tmp,filePath),fsyncPath(filePath),fsyncPath(dir)}catch(err){if(fd!==void 0)try{fs$4.closeSync(fd)}catch{}try{fs$4.rmSync(tmp,{force:!0})}catch{}throw err}},readIndex=()=>{if(indexCache)return indexCache;let indexPath=path$2.join(dataDirectory,`index.json`),read$1=readJSONIfExists(indexPath)??{ids:{}};return read$1.ids||(read$1.ids={}),indexCache=read$1,read$1},writeIndex=index=>{let indexPath=path$2.join(dataDirectory,`index.json`);writeAtomicJSON(indexPath,index),indexCache=index},readValueById=id=>{let cached=valueCache.get(id);if(cached)return cached;let idx=readIndex(),rel=idx.ids[id];if(!rel)return;let filePath=path$2.join(dataDirectory,rel),stat$6=fs$4.statSync(filePath,{throwIfNoEntry:!1});if(!stat$6)return;let value=JSON.parse(fs$4.readFileSync(filePath,`utf-8`));return valueCache.set(id,opts?.hydrate?opts.hydrate(value):value),value},writeValue=(key,value)=>{let current=valueCache.get(key);if(opts?.shouldWriteToDisk&¤t&&!opts.shouldWriteToDisk(current,value)){valueCache.set(key,value);return}let anyValue=value,idRaw=anyValue[idKey],idStr=String(idRaw),fileNameBase=filenamify(idStr,{replacement:`_`}),fileName=fileNameBase+`.json`,idx=readIndex();idx.ids[idStr]=fileName,idx.current=idStr;let valuePath=path$2.join(dataDirectory,fileName);writeAtomicJSON(valuePath,opts?.serialize?.(value)??value),writeIndex(idx),valueCache.set(key,value)};return{get(key){return readValueById(key)},set(key,value){writeValue(key,value)},update(key,value){let current=this.get(key);if(!current)throw Error(`Key ${key} not found`);writeValue(key,{...current,...value})},delete(key){let idx=readIndex(),rel=idx.ids[key];if(rel){let filePath=path$2.join(dataDirectory,rel);try{fs$4.rmSync(filePath,{force:!0}),fsyncPath(dataDirectory)}catch{}delete idx.ids[key],idx.current===key&&(idx.current=void 0),writeIndex(idx)}valueCache.delete(key)},list(){let stat$6=fs$4.statSync(dataDirectory,{throwIfNoEntry:!1});if(!stat$6)return[];let idx=readIndex();return Object.keys(idx.ids)}}};function createDevServer(options$1){options$1.dataDirectory||(options$1.dataDirectory=fs$1.mkdtempSync(tmpdir()));let chats=createDiskStore(join$1(options$1.dataDirectory,`chats`),`id`,{hydrate:chat$2=>({...chat$2,status:`idle`,queuedMessages:[],streamingMessage:void 0}),serialize:chat$2=>(options$1.serializeChat&&(chat$2=options$1.serializeChat(chat$2)),{id:chat$2.id,created_at:chat$2.created_at,updated_at:chat$2.updated_at,messages:chat$2.messages}),shouldWriteToDisk:(previous,next)=>previous.updated_at!==next.updated_at||previous.status!==next.status||previous.messages.length!==next.messages.length}),onChatChangedEmitter=new Emitter$1,originalSet=chats.set;chats.set=(key,value)=>{originalSet.call(chats,key,value),onChatChangedEmitter.emit(value)};let originalUpdate=chats.update;chats.update=(key,value)=>{originalUpdate.call(chats,key,value),onChatChangedEmitter.emit(chats.get(key))};let storage$2={},storagePath=join$1(options$1.dataDirectory,`storage.json`);fs$1.existsSync(storagePath)&&(storage$2=JSON.parse(fs$1.readFileSync(storagePath,`utf-8`)));let globalAbortController=new AbortController,chatAbortControllers=new Map,abortChat=id=>{let controller=chatAbortControllers.get(id);controller?.signal.aborted||controller?.abort()},lastDoStreamLoop,convertMessage=(message,id=crypto.randomUUID())=>({created_at:new Date().toISOString(),...message,id,metadata:message.metadata}),doStreamLoop=async(id,messages$1)=>{let chat$2=chats.get(id);if(!chat$2)return;let updated=messages$1?[...chat$2.messages,...messages$1.map(m$2=>convertMessage(m$2))]:chat$2.messages;chats.update(id,{status:`streaming`,updated_at:new Date().toISOString(),messages:updated});let controller=new AbortController;chatAbortControllers.set(id,controller);let stream$8;try{stream$8=await options$1.sendMessages({messages:[...updated],chat:{id}},AbortSignal.any([globalAbortController.signal,controller.signal]))}catch(error$22){chats.update(id,{status:`error`,error:error$22 instanceof Error?error$22:Error(String(error$22)),streamingMessage:void 0});return}let messageStream=readUIMessageStream({stream:stream$8}),messageId=crypto.randomUUID(),lastMessage;if(chat$2=chats.get(id),!chat$2)return;try{for await(let message of messageStream){if(controller.signal.aborted)break;lastMessage=message,chats.update(id,{streamingMessage:convertMessage(message,messageId)})}}catch(error$22){let silenceAndStore=!1;if(error$22 instanceof Error&&error$22.message.includes(`Controller is already closed`)&&(silenceAndStore=!0),error$22 instanceof Error&&error$22.name===`AbortError`&&(silenceAndStore=!0),silenceAndStore){if(lastMessage){if(chat$2=chats.get(id),!chat$2)return;chats.update(id,{status:`idle`,messages:[...chat$2.messages,convertMessage(lastMessage,messageId)],streamingMessage:void 0});return}throw error$22}}if(chat$2=chats.get(id),!chat$2)return;let updatedMessages=[...chat$2.messages];if(lastMessage&&updatedMessages.push(convertMessage(lastMessage,messageId)),chat$2?.queuedMessages?.length){chats.update(id,{messages:[...chat$2.messages,...chat$2.queuedMessages.map(m$2=>convertMessage(m$2))],queuedMessages:[]}),await doStreamLoop(id);return}if(lastMessage&&shouldContinueStreaming(lastMessage)){chats.update(id,{messages:updatedMessages,streamingMessage:void 0}),await doStreamLoop(id);return}chats.update(id,{status:`idle`,streamingMessage:void 0,messages:updatedMessages})},runtime={chat:{async upsert(id){let chat$2=await chats.get(id);return chat$2?await chats.set(id,{...chat$2,updated_at:new Date().toISOString(),status:`idle`}):await chats.set(id,{id,messages:[],created_at:new Date().toISOString(),updated_at:new Date().toISOString(),status:`idle`,streamingMessage:void 0,queuedMessages:[]}),{id}},async sendMessages(id,opts){let chat$2=chats.get(id);if(!chat$2)throw Error(`Chat not found`);if(opts.behavior===`append`){chats.set(id,{...chat$2,messages:[...chat$2.messages,...opts.messages.map(m$2=>convertMessage(m$2))]});return}if(chat$2.status===`streaming`){if(opts.behavior===`enqueue`){chats.set(id,{...chat$2,queuedMessages:[...chat$2.queuedMessages??[],...opts.messages]});return}abortChat(id),await lastDoStreamLoop}lastDoStreamLoop=doStreamLoop(id,opts.messages)}},storage:{kv:{get(key){return Promise.resolve(storage$2[key])},set(key,value){return storage$2[key]=value,fs$1.writeFileSync(storagePath,JSON.stringify(storage$2),`utf-8`),Promise.resolve()},del(key){return delete storage$2[key],fs$1.writeFileSync(storagePath,JSON.stringify(storage$2),`utf-8`),Promise.resolve()}}}},server=createServer(createServerAdapter(req$1=>api_default$1.fetch(req$1,runtime)));return server.listen(options$1.port),{url:`http://127.0.0.1:${server.address().port}`,runtime,onChatChanged:onChatChangedEmitter.event,listChats:()=>chats.list(),getChat:id=>chats.get(id),stopChat:id=>{abortChat(id)},upsertChatMessage:(id,message)=>{let chat$2=chats.get(id);if(!chat$2)throw Error(`Chat not found`);let lastMessage=chat$2.messages.length>0?chat$2.messages.at(-1):void 0;if(lastMessage&&JSON.stringify(lastMessage.parts)===JSON.stringify(message.parts))return;let newMessages=[...chat$2.messages,convertMessage(message)];chats.set(id,{...chat$2,messages:newMessages})},updateChatMessage:(id,message)=>{let chat$2=chats.get(id);if(!chat$2)throw Error(`Chat not found`);let newMessages=[...chat$2.messages];newMessages[newMessages.length-1]=convertMessage(message),chats.set(id,{...chat$2,messages:newMessages})},resetChat:id=>{chats.set(id,{id,messages:[],status:`idle`,queuedMessages:[],streamingMessage:void 0,created_at:new Date().toISOString(),updated_at:new Date().toISOString()}),abortChat(id)},upsertChat:id=>{let existing=chats.get(id);if(existing)return existing;let chat$2={id,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),messages:[],status:`idle`,queuedMessages:[],streamingMessage:void 0};return chats.set(id,chat$2),chat$2},dispose:()=>{server.close(),globalAbortController.abort()}}}function L(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var O$1=L();function H(l$1){O$1=l$1}var E$1={exec:()=>null};function h$2(l$1,e$1=``){let t$1=typeof l$1==`string`?l$1:l$1.source,n$2={replace:(r$2,i$4)=>{let s$3=typeof i$4==`string`?i$4:i$4.source;return s$3=s$3.replace(m$1.caret,`$1`),t$1=t$1.replace(r$2,s$3),n$2},getRegex:()=>new RegExp(t$1,e$1)};return n$2}var m$1={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceTabs:/^\t+/,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] /,listReplaceTask:/^\[[ xX]\] +/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,unescapeTest:/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:l$1=>RegExp(`^( {0,3}${l$1})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`),hrRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),fencesBeginRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}(?:\`\`\`|~~~)`),headingBeginRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}#`),htmlBeginRegex:l$1=>RegExp(`^ {0,${Math.min(3,l$1-1)}}<(?:[a-z].*>|!--)`,`i`)},xe=/^(?:[ \t]*(?:\n|$))+/,be=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Re=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,C=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Oe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,j=/(?:[*+-]|\d{1,9}[.)])/,se=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,ie=h$2(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,``).getRegex(),Te=h$2(se).replace(/bull/g,j).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),F=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,we=/^[^\n]+/,Q=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,ye=h$2(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace(`label`,Q).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Pe=h$2(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,j).getRegex(),v=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,U=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Se=h$2(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))`,`i`).replace(`comment`,U).replace(`tag`,v).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),oe=h$2(F).replace(`hr`,C).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,v).getRegex(),$e=h$2(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,oe).getRegex(),K={blockquote:$e,code:be,def:ye,fences:Re,heading:Oe,hr:C,html:Se,lheading:ie,list:Pe,newline:xe,paragraph:oe,table:E$1,text:we},re=h$2(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,C).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,`(?: {4}| {0,3} )[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,v).getRegex(),_e={...K,lheading:Te,table:re,paragraph:h$2(F).replace(`hr`,C).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,re).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,v).getRegex()},Le={...K,html:h$2(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,U).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:E$1,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:h$2(F).replace(`hr`,C).replace(`heading`,` *#{1,6} *[^
|
|
281
281
|
]`).replace(`lheading`,ie).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},Me=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,ze=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,ae=/^( {2,}|\\)\n(?!\s*$)/,Ae=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,D=/[\p{P}\p{S}]/u,W=/[\s\p{P}\p{S}]/u,le=/[^\s\p{P}\p{S}]/u,Ee=h$2(/^((?![*_])punctSpace)/,`u`).replace(/punctSpace/g,W).getRegex(),ue=/(?!~)[\p{P}\p{S}]/u,Ce=/(?!~)[\s\p{P}\p{S}]/u,Ie=/(?:[^\s\p{P}\p{S}]|~)/u,Be=/\[[^\[\]]*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)|`[^`]*?`|<(?! )[^<>]*?>/g,pe=/^(?:\*+(?:((?!\*)punct)|[^\s*]))|^_+(?:((?!_)punct)|([^\s_]))/,qe=h$2(pe,`u`).replace(/punct/g,D).getRegex(),ve=h$2(pe,`u`).replace(/punct/g,ue).getRegex(),ce=`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)`,De=h$2(ce,`gu`).replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),Ze=h$2(ce,`gu`).replace(/notPunctSpace/g,Ie).replace(/punctSpace/g,Ce).replace(/punct/g,ue).getRegex(),Ge=h$2(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)`,`gu`).replace(/notPunctSpace/g,le).replace(/punctSpace/g,W).replace(/punct/g,D).getRegex(),He=h$2(/\\(punct)/,`gu`).replace(/punct/g,D).getRegex(),Ne=h$2(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),je=h$2(U).replace(`(?:-->|$)`,`-->`).getRegex(),Fe=h$2(`^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>`).replace(`comment`,je).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),q$1=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`[^`]*`|[^\[\]\\`])*?/,Qe=h$2(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]*(?:\n[ \t]*)?)(title))?\s*\)/).replace(`label`,q$1).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),he=h$2(/^!?\[(label)\]\[(ref)\]/).replace(`label`,q$1).replace(`ref`,Q).getRegex(),de=h$2(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,Q).getRegex(),Ue=h$2(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,he).replace(`nolink`,de).getRegex(),X={_backpedal:E$1,anyPunctuation:He,autolink:Ne,blockSkip:Be,br:ae,code:ze,del:E$1,emStrongLDelim:qe,emStrongRDelimAst:De,emStrongRDelimUnd:Ge,escape:Me,link:Qe,nolink:de,punctuation:Ee,reflink:he,reflinkSearch:Ue,tag:Fe,text:Ae,url:E$1},Ke={...X,link:h$2(/^!?\[(label)\]\((.*?)\)/).replace(`label`,q$1).getRegex(),reflink:h$2(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,q$1).getRegex()},N={...X,emStrongRDelimAst:Ze,emStrongLDelim:ve,url:h$2(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,`i`).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/},We={...N,br:h$2(ae).replace(`{2,}`,`*`).getRegex(),text:h$2(N.text).replace(`\\b_`,`\\b_| {2,}\\n`).replace(/\{2,\}/g,`*`).getRegex()},I$1={normal:K,gfm:_e,pedantic:Le},M={normal:X,gfm:N,breaks:We,pedantic:Ke},Xe={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},ke=l$1=>Xe[l$1];function w$1(l$1,e$1){if(e$1){if(m$1.escapeTest.test(l$1))return l$1.replace(m$1.escapeReplace,ke)}else if(m$1.escapeTestNoEncode.test(l$1))return l$1.replace(m$1.escapeReplaceNoEncode,ke);return l$1}function J(l$1){try{l$1=encodeURI(l$1).replace(m$1.percentDecode,`%`)}catch{return null}return l$1}function V$1(l$1,e$1){let t$1=l$1.replace(m$1.findPipe,(i$4,s$3,o$2)=>{let a$3=!1,u$17=s$3;for(;--u$17>=0&&o$2[u$17]===`\\`;)a$3=!a$3;return a$3?`|`:` |`}),n$2=t$1.split(m$1.splitPipe),r$2=0;if(n$2[0].trim()||n$2.shift(),n$2.length>0&&!n$2.at(-1)?.trim()&&n$2.pop(),e$1)if(n$2.length>e$1)n$2.splice(e$1);else for(;n$2.length<e$1;)n$2.push(``);for(;r$2<n$2.length;r$2++)n$2[r$2]=n$2[r$2].trim().replace(m$1.slashPipe,`|`);return n$2}function z$3(l$1,e$1,t$1){let n$2=l$1.length;if(n$2===0)return``;let r$2=0;for(;r$2<n$2;){let i$4=l$1.charAt(n$2-r$2-1);if(i$4===e$1&&!t$1)r$2++;else if(i$4!==e$1&&t$1)r$2++;else break}return l$1.slice(0,n$2-r$2)}function ge(l$1,e$1){if(l$1.indexOf(e$1[1])===-1)return-1;let t$1=0;for(let n$2=0;n$2<l$1.length;n$2++)if(l$1[n$2]===`\\`)n$2++;else if(l$1[n$2]===e$1[0])t$1++;else if(l$1[n$2]===e$1[1]&&(t$1--,t$1<0))return n$2;return t$1>0?-2:-1}function fe(l$1,e$1,t$1,n$2,r$2){let i$4=e$1.href,s$3=e$1.title||null,o$2=l$1[1].replace(r$2.other.outputLinkReplace,`$1`);n$2.state.inLink=!0;let a$3={type:l$1[0].charAt(0)===`!`?`image`:`link`,raw:t$1,href:i$4,title:s$3,text:o$2,tokens:n$2.inlineTokens(o$2)};return n$2.state.inLink=!1,a$3}function Je(l$1,e$1,t$1){let n$2=l$1.match(t$1.other.indentCodeCompensation);if(n$2===null)return e$1;let r$2=n$2[1];return e$1.split(`
|
|
282
282
|
`).map(i$4=>{let s$3=i$4.match(t$1.other.beginningSpace);if(s$3===null)return i$4;let[o$2]=s$3;return o$2.length>=r$2.length?i$4.slice(r$2.length):i$4}).join(`
|
|
283
283
|
`)}var y$1=class{options;rules;lexer;constructor(e$1){this.options=e$1||O$1}space(e$1){let t$1=this.rules.block.newline.exec(e$1);if(t$1&&t$1[0].length>0)return{type:`space`,raw:t$1[0]}}code(e$1){let t$1=this.rules.block.code.exec(e$1);if(t$1){let n$2=t$1[0].replace(this.rules.other.codeRemoveIndent,``);return{type:`code`,raw:t$1[0],codeBlockStyle:`indented`,text:this.options.pedantic?n$2:z$3(n$2,`
|
|
@@ -1481,13 +1481,7 @@ The structure MUST be as follows:
|
|
|
1481
1481
|
**Decision Rules (apply in order):**
|
|
1482
1482
|
1. **Model Continues:** If your last response explicitly states an immediate next action *you* intend to take (e.g., "Next, I will...", "Now I'll process...", "Moving on to analyze...", indicates an intended tool call that didn't execute), OR if the response seems clearly incomplete (cut off mid-thought without a natural conclusion), then the **'model'** should speak next.
|
|
1483
1483
|
2. **Question to User:** If your last response ends with a direct question specifically addressed *to the user*, then the **'user'** should speak next.
|
|
1484
|
-
3. **Waiting for User:** If your last response completed a thought, statement, or task *and* does not meet the criteria for Rule 1 (Model Continues) or Rule 2 (Question to User), it implies a pause expecting user input or reaction. In this case, the **'user'** should speak next.`}]}];try{let parsedResponse=await geminiClient.generateJson(contents,RESPONSE_SCHEMA,abortSignal,DEFAULT_GEMINI_FLASH_MODEL);return parsedResponse&&parsedResponse.next_speaker&&[`user`,`model`].includes(parsedResponse.next_speaker)?parsedResponse:null}catch(error$22){return console.warn(`Failed to talk to Gemini endpoint when seeing if conversation should continue.`,error$22),null}}var require_levenshtein=__commonJSMin(((exports,module)=>{(function(){var collator;try{collator=typeof Intl<`u`&&Intl.Collator!==void 0?Intl.Collator(`generic`,{sensitivity:`base`}):null}catch(err){console.log(`Collator could not be initialized and wouldn't be used`)}var prevRow=[],str2Char=[],Levenshtein={get:function(str1,str2,options$1){var useCollator=options$1&&collator&&options$1.useCollator,str1Len=str1.length,str2Len=str2.length;if(str1Len===0)return str2Len;if(str2Len===0)return str1Len;var curCol,nextCol,i$4,j$2,tmp;for(i$4=0;i$4<str2Len;++i$4)prevRow[i$4]=i$4,str2Char[i$4]=str2.charCodeAt(i$4);prevRow[str2Len]=str2Len;var strCmp;if(useCollator)for(i$4=0;i$4<str1Len;++i$4){for(nextCol=i$4+1,j$2=0;j$2<str2Len;++j$2)curCol=nextCol,strCmp=collator.compare(str1.charAt(i$4),String.fromCharCode(str2Char[j$2]))===0,nextCol=prevRow[j$2]+(strCmp?0:1),tmp=curCol+1,nextCol>tmp&&(nextCol=tmp),tmp=prevRow[j$2+1]+1,nextCol>tmp&&(nextCol=tmp),prevRow[j$2]=curCol;prevRow[j$2]=nextCol}else for(i$4=0;i$4<str1Len;++i$4){for(nextCol=i$4+1,j$2=0;j$2<str2Len;++j$2)curCol=nextCol,strCmp=str1.charCodeAt(i$4)===str2Char[j$2],nextCol=prevRow[j$2]+(strCmp?0:1),tmp=curCol+1,nextCol>tmp&&(nextCol=tmp),tmp=prevRow[j$2+1]+1,nextCol>tmp&&(nextCol=tmp),prevRow[j$2]=curCol;prevRow[j$2]=nextCol}return nextCol}};typeof define<`u`&&define!==null&&define.amd?define(function(){return Levenshtein}):module!=null&&exports!==void 0&&module.exports===exports?module.exports=Levenshtein:typeof self<`u`&&typeof self.postMessage==`function`&&typeof self.importScripts==`function`?self.Levenshtein=Levenshtein:typeof window<`u`&&window!==null&&(window.Levenshtein=Levenshtein)})()})),import_levenshtein=__toESM(require_levenshtein(),1),ChatRecordingService=class{conversationFile=null;cachedLastConvData=null;sessionId;projectHash;queuedThoughts=[];queuedTokens=null;config;constructor(config){this.config=config,this.sessionId=config.getSessionId(),this.projectHash=getProjectHash(config.getProjectRoot())}initialize(resumedSessionData){try{if(resumedSessionData)this.conversationFile=resumedSessionData.filePath,this.sessionId=resumedSessionData.conversation.sessionId,this.updateConversation(conversation=>{conversation.sessionId=this.sessionId}),this.cachedLastConvData=null;else{let chatsDir=path.join(this.config.storage.getProjectTempDir(),`chats`);fs.mkdirSync(chatsDir,{recursive:!0});let timestamp=new Date().toISOString().slice(0,16).replace(/:/g,`-`),filename=`session-${timestamp}-${this.sessionId.slice(0,8)}.json`;this.conversationFile=path.join(chatsDir,filename),this.writeConversation({sessionId:this.sessionId,projectHash:this.projectHash,startTime:new Date().toISOString(),lastUpdated:new Date().toISOString(),messages:[]})}this.queuedThoughts=[],this.queuedTokens=null}catch(error$22){throw console.error(`Error initializing chat recording service:`,error$22),error$22}}getLastMessage(conversation){return conversation.messages.at(-1)}newMessage(type,content){return{id:randomUUID$1(),timestamp:new Date().toISOString(),type,content}}recordMessage(message){if(this.conversationFile)try{this.updateConversation(conversation=>{let msg=this.newMessage(message.type,message.content);msg.type===`gemini`?(conversation.messages.push({...msg,thoughts:this.queuedThoughts,tokens:this.queuedTokens,model:this.config.getModel()}),this.queuedThoughts=[],this.queuedTokens=null):conversation.messages.push(msg)})}catch(error$22){throw console.error(`Error saving message:`,error$22),error$22}}recordThought(thought){if(this.conversationFile)try{this.queuedThoughts.push({...thought,timestamp:new Date().toISOString()})}catch(error$22){throw console.error(`Error saving thought:`,error$22),error$22}}recordMessageTokens(respUsageMetadata){if(this.conversationFile)try{let tokens={input:respUsageMetadata.promptTokenCount??0,output:respUsageMetadata.candidatesTokenCount??0,cached:respUsageMetadata.cachedContentTokenCount??0,thoughts:respUsageMetadata.thoughtsTokenCount??0,tool:respUsageMetadata.toolUsePromptTokenCount??0,total:respUsageMetadata.totalTokenCount??0};this.updateConversation(conversation=>{let lastMsg=this.getLastMessage(conversation);lastMsg&&lastMsg.type===`gemini`&&!lastMsg.tokens?(lastMsg.tokens=tokens,this.queuedTokens=null):this.queuedTokens=tokens})}catch(error$22){throw console.error(`Error updating message tokens:`,error$22),error$22}}recordToolCalls(toolCalls){if(!this.conversationFile)return;let toolRegistry=this.config.getToolRegistry(),enrichedToolCalls=toolCalls.map(toolCall=>{let toolInstance=toolRegistry.getTool(toolCall.name);return{...toolCall,displayName:toolInstance?.displayName||toolCall.name,description:toolInstance?.description||``,renderOutputAsMarkdown:toolInstance?.isOutputMarkdown||!1}});try{this.updateConversation(conversation=>{let lastMsg=this.getLastMessage(conversation);if(!lastMsg||lastMsg.type!==`gemini`||this.queuedThoughts.length>0){let newMsg={...this.newMessage(`gemini`,``),type:`gemini`,toolCalls:enrichedToolCalls,thoughts:this.queuedThoughts,model:this.config.getModel()};this.queuedThoughts.length>0&&(newMsg.thoughts=this.queuedThoughts,this.queuedThoughts=[]),this.queuedTokens&&(newMsg.tokens=this.queuedTokens,this.queuedTokens=null),conversation.messages.push(newMsg)}else{lastMsg.toolCalls||(lastMsg.toolCalls=[]),lastMsg.toolCalls=lastMsg.toolCalls.map(toolCall=>{let incomingToolCall=toolCalls.find(tc=>tc.id===toolCall.id);return incomingToolCall?{...toolCall,...incomingToolCall}:toolCall});for(let toolCall of enrichedToolCalls){let existingToolCall=lastMsg.toolCalls.find(tc=>tc.id===toolCall.id);existingToolCall||lastMsg.toolCalls.push(toolCall)}}})}catch(error$22){throw console.error(`Error adding tool call to message:`,error$22),error$22}}readConversation(){try{return this.cachedLastConvData=fs.readFileSync(this.conversationFile,`utf8`),JSON.parse(this.cachedLastConvData)}catch(error$22){if(error$22.code!==`ENOENT`)throw console.error(`Error reading conversation file:`,error$22),error$22;return{sessionId:this.sessionId,projectHash:this.projectHash,startTime:new Date().toISOString(),lastUpdated:new Date().toISOString(),messages:[]}}}writeConversation(conversation){try{if(!this.conversationFile||conversation.messages.length===0)return;if(this.cachedLastConvData!==JSON.stringify(conversation,null,2)){conversation.lastUpdated=new Date().toISOString();let newContent=JSON.stringify(conversation,null,2);this.cachedLastConvData=newContent,fs.writeFileSync(this.conversationFile,newContent)}}catch(error$22){throw console.error(`Error writing conversation file:`,error$22),error$22}}updateConversation(updateFn){let conversation=this.readConversation();updateFn(conversation),this.writeConversation(conversation)}deleteSession(sessionId$1){try{let chatsDir=path.join(this.config.storage.getProjectTempDir(),`chats`),sessionPath=path.join(chatsDir,`${sessionId$1}.json`);fs.unlinkSync(sessionPath)}catch(error$22){throw console.error(`Error deleting session:`,error$22),error$22}}};init_esm$1();
|
|
1485
|
-
/**
|
|
1486
|
-
* @license
|
|
1487
|
-
* Copyright 2025 Google LLC
|
|
1488
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
1489
|
-
*/
|
|
1490
|
-
var TelemetryTarget;(function(TelemetryTarget$1){TelemetryTarget$1.GCP=`gcp`,TelemetryTarget$1.LOCAL=`local`})(TelemetryTarget||(TelemetryTarget={}));const DEFAULT_TELEMETRY_TARGET=TelemetryTarget.LOCAL,DEFAULT_OTLP_ENDPOINT=`http://localhost:4317`;async function handleFallback(config,failedModel,authType,error$22){if(authType!==AuthType.LOGIN_WITH_GOOGLE)return null;let fallbackModel=DEFAULT_GEMINI_FLASH_MODEL;if(failedModel===fallbackModel)return null;let fallbackModelHandler=config.fallbackModelHandler;if(typeof fallbackModelHandler!=`function`)return null;try{let intent=await fallbackModelHandler(failedModel,fallbackModel,error$22);switch(intent){case`retry`:return activateFallbackMode(config,authType),!0;case`stop`:return activateFallbackMode(config,authType),!1;case`auth`:return!1;default:throw Error(`Unexpected fallback intent received from fallbackModelHandler: "${intent}"`)}}catch(handlerError){return console.error(`Fallback UI handler failed:`,handlerError),null}}function activateFallbackMode(config,authType){config.isInFallbackMode()||(config.setFallbackMode(!0),authType&&logFlashFallback(config,new FlashFallbackEvent(authType)))}function partListUnionToString(value){return partToString(value,{verbose:!0})}var StreamEventType;(function(StreamEventType$1){StreamEventType$1.CHUNK=`chunk`,StreamEventType$1.RETRY=`retry`})(StreamEventType||(StreamEventType={}));const INVALID_CONTENT_RETRY_OPTIONS={maxAttempts:3,initialDelayMs:500};function isValidResponse(response){if(response.candidates===void 0||response.candidates.length===0)return!1;let content=response.candidates[0]?.content;return content===void 0?!1:isValidContent(content)}function isValidContent(content){if(content.parts===void 0||content.parts.length===0)return!1;for(let part of content.parts)if(part===void 0||Object.keys(part).length===0||!part.thought&&part.text!==void 0&&part.text===``)return!1;return!0}function validateHistory(history){for(let content of history)if(content.role!==`user`&&content.role!==`model`)throw Error(`Role must be user or model, but got ${content.role}.`)}function extractCuratedHistory(comprehensiveHistory){if(comprehensiveHistory===void 0||comprehensiveHistory.length===0)return[];let curatedHistory=[],length=comprehensiveHistory.length,i$4=0;for(;i$4<length;)if(comprehensiveHistory[i$4].role===`user`)curatedHistory.push(comprehensiveHistory[i$4]),i$4++;else{let modelOutput=[],isValid=!0;for(;i$4<length&&comprehensiveHistory[i$4].role===`model`;)modelOutput.push(comprehensiveHistory[i$4]),isValid&&!isValidContent(comprehensiveHistory[i$4])&&(isValid=!1),i$4++;isValid&&curatedHistory.push(...modelOutput)}return curatedHistory}var EmptyStreamError=class extends Error{constructor(message){super(message),this.name=`EmptyStreamError`}},GeminiChat=class{config;generationConfig;history;sendPromise=Promise.resolve();chatRecordingService;constructor(config,generationConfig={},history=[]){this.config=config,this.generationConfig=generationConfig,this.history=history,validateHistory(history),this.chatRecordingService=new ChatRecordingService(config),this.chatRecordingService.initialize()}setSystemInstruction(sysInstr){this.generationConfig.systemInstruction=sysInstr}async sendMessageStream(params,prompt_id){await this.sendPromise;let streamDoneResolver,streamDonePromise=new Promise(resolve$9=>{streamDoneResolver=resolve$9});this.sendPromise=streamDonePromise;let userContent=createUserContent(params.message);if(!isFunctionResponse(userContent)){let userMessage=Array.isArray(params.message)?params.message:[params.message],userMessageContent=partListUnionToString(toParts(userMessage));this.chatRecordingService.recordMessage({type:`user`,content:userMessageContent})}this.history.push(userContent);let requestContents=this.getHistory(!0),self$1=this;return(async function*(){try{let lastError=Error(`Request failed after all retries.`);for(let attempt=0;attempt<INVALID_CONTENT_RETRY_OPTIONS.maxAttempts;attempt++)try{attempt>0&&(yield{type:StreamEventType.RETRY});let stream$8=await self$1.makeApiCallAndProcessStream(requestContents,params,prompt_id,userContent);for await(let chunk$1 of stream$8)yield{type:StreamEventType.CHUNK,value:chunk$1};lastError=null;break}catch(error$22){lastError=error$22;let isContentError=error$22 instanceof EmptyStreamError;if(isContentError&&attempt<INVALID_CONTENT_RETRY_OPTIONS.maxAttempts-1){logContentRetry(self$1.config,new ContentRetryEvent(attempt,`EmptyStreamError`,INVALID_CONTENT_RETRY_OPTIONS.initialDelayMs)),await new Promise(res=>setTimeout(res,INVALID_CONTENT_RETRY_OPTIONS.initialDelayMs*(attempt+1)));continue}break}if(lastError)throw lastError instanceof EmptyStreamError&&logContentRetryFailure(self$1.config,new ContentRetryFailureEvent(INVALID_CONTENT_RETRY_OPTIONS.maxAttempts,`EmptyStreamError`)),self$1.history[self$1.history.length-1]===userContent&&self$1.history.pop(),lastError}finally{streamDoneResolver()}})()}async makeApiCallAndProcessStream(requestContents,params,prompt_id,userContent){let currentAttemptModel,apiCall=()=>{let modelToUse=this.config.isInFallbackMode()?DEFAULT_GEMINI_FLASH_MODEL:this.config.getModel();if(currentAttemptModel=modelToUse,this.config.getQuotaErrorOccurred()&&modelToUse===DEFAULT_GEMINI_FLASH_MODEL)throw Error(`Please submit a new query to continue with the Flash model.`);return this.config.getContentGenerator().generateContentStream({model:modelToUse,contents:requestContents,config:{...this.generationConfig,...params.config}},prompt_id)},onPersistent429Callback=async(authType,error$22)=>currentAttemptModel?await handleFallback(this.config,currentAttemptModel,authType,error$22):null,streamResponse=await retryWithBackoff(apiCall,{shouldRetry:error$22=>{if(error$22 instanceof Error&&error$22.message){if(isSchemaDepthError(error$22.message))return!1;if(error$22.message.includes(`429`)||error$22.message.match(/5\d{2}/))return!0}return!1},onPersistent429:onPersistent429Callback,authType:this.config.getContentGeneratorConfig()?.authType});return this.processStreamResponse(streamResponse,userContent)}getHistory(curated=!1){let history=curated?extractCuratedHistory(this.history):this.history;return structuredClone(history)}clearHistory(){this.history=[]}addHistory(content){this.history.push(content)}setHistory(history){this.history=history}stripThoughtsFromHistory(){this.history=this.history.map(content=>{let newContent={...content};return newContent.parts&&(newContent.parts=newContent.parts.map(part=>{if(part&&typeof part==`object`&&`thoughtSignature`in part){let newPart={...part};return delete newPart.thoughtSignature,newPart}return part})),newContent})}setTools(tools){this.generationConfig.tools=tools}async maybeIncludeSchemaDepthContext(error$22){if(isSchemaDepthError(error$22.message)||isInvalidArgumentError(error$22.message)){let tools=this.config.getToolRegistry().getAllTools(),cyclicSchemaTools=[];for(let tool$1 of tools)(tool$1.schema.parametersJsonSchema&&hasCycleInSchema(tool$1.schema.parametersJsonSchema)||tool$1.schema.parameters&&hasCycleInSchema(tool$1.schema.parameters))&&cyclicSchemaTools.push(tool$1.displayName);if(cyclicSchemaTools.length>0){let extraDetails=`
|
|
1484
|
+
3. **Waiting for User:** If your last response completed a thought, statement, or task *and* does not meet the criteria for Rule 1 (Model Continues) or Rule 2 (Question to User), it implies a pause expecting user input or reaction. In this case, the **'user'** should speak next.`}]}];try{let parsedResponse=await geminiClient.generateJson(contents,RESPONSE_SCHEMA,abortSignal,DEFAULT_GEMINI_FLASH_MODEL);return parsedResponse&&parsedResponse.next_speaker&&[`user`,`model`].includes(parsedResponse.next_speaker)?parsedResponse:null}catch(error$22){return console.warn(`Failed to talk to Gemini endpoint when seeing if conversation should continue.`,error$22),null}}var require_levenshtein=__commonJSMin(((exports,module)=>{(function(){var collator;try{collator=typeof Intl<`u`&&Intl.Collator!==void 0?Intl.Collator(`generic`,{sensitivity:`base`}):null}catch(err){console.log(`Collator could not be initialized and wouldn't be used`)}var prevRow=[],str2Char=[],Levenshtein={get:function(str1,str2,options$1){var useCollator=options$1&&collator&&options$1.useCollator,str1Len=str1.length,str2Len=str2.length;if(str1Len===0)return str2Len;if(str2Len===0)return str1Len;var curCol,nextCol,i$4,j$2,tmp;for(i$4=0;i$4<str2Len;++i$4)prevRow[i$4]=i$4,str2Char[i$4]=str2.charCodeAt(i$4);prevRow[str2Len]=str2Len;var strCmp;if(useCollator)for(i$4=0;i$4<str1Len;++i$4){for(nextCol=i$4+1,j$2=0;j$2<str2Len;++j$2)curCol=nextCol,strCmp=collator.compare(str1.charAt(i$4),String.fromCharCode(str2Char[j$2]))===0,nextCol=prevRow[j$2]+(strCmp?0:1),tmp=curCol+1,nextCol>tmp&&(nextCol=tmp),tmp=prevRow[j$2+1]+1,nextCol>tmp&&(nextCol=tmp),prevRow[j$2]=curCol;prevRow[j$2]=nextCol}else for(i$4=0;i$4<str1Len;++i$4){for(nextCol=i$4+1,j$2=0;j$2<str2Len;++j$2)curCol=nextCol,strCmp=str1.charCodeAt(i$4)===str2Char[j$2],nextCol=prevRow[j$2]+(strCmp?0:1),tmp=curCol+1,nextCol>tmp&&(nextCol=tmp),tmp=prevRow[j$2+1]+1,nextCol>tmp&&(nextCol=tmp),prevRow[j$2]=curCol;prevRow[j$2]=nextCol}return nextCol}};typeof define<`u`&&define!==null&&define.amd?define(function(){return Levenshtein}):module!=null&&exports!==void 0&&module.exports===exports?module.exports=Levenshtein:typeof self<`u`&&typeof self.postMessage==`function`&&typeof self.importScripts==`function`?self.Levenshtein=Levenshtein:typeof window<`u`&&window!==null&&(window.Levenshtein=Levenshtein)})()})),import_levenshtein=__toESM(require_levenshtein(),1),ChatRecordingService=class{conversationFile=null;cachedLastConvData=null;sessionId;projectHash;queuedThoughts=[];queuedTokens=null;config;constructor(config){this.config=config,this.sessionId=config.getSessionId(),this.projectHash=getProjectHash(config.getProjectRoot())}initialize(resumedSessionData){try{if(resumedSessionData)this.conversationFile=resumedSessionData.filePath,this.sessionId=resumedSessionData.conversation.sessionId,this.updateConversation(conversation=>{conversation.sessionId=this.sessionId}),this.cachedLastConvData=null;else{let chatsDir=path.join(this.config.storage.getProjectTempDir(),`chats`);fs.mkdirSync(chatsDir,{recursive:!0});let timestamp=new Date().toISOString().slice(0,16).replace(/:/g,`-`),filename=`session-${timestamp}-${this.sessionId.slice(0,8)}.json`;this.conversationFile=path.join(chatsDir,filename),this.writeConversation({sessionId:this.sessionId,projectHash:this.projectHash,startTime:new Date().toISOString(),lastUpdated:new Date().toISOString(),messages:[]})}this.queuedThoughts=[],this.queuedTokens=null}catch(error$22){throw console.error(`Error initializing chat recording service:`,error$22),error$22}}getLastMessage(conversation){return conversation.messages.at(-1)}newMessage(type,content){return{id:randomUUID$1(),timestamp:new Date().toISOString(),type,content}}recordMessage(message){if(this.conversationFile)try{this.updateConversation(conversation=>{let msg=this.newMessage(message.type,message.content);msg.type===`gemini`?(conversation.messages.push({...msg,thoughts:this.queuedThoughts,tokens:this.queuedTokens,model:this.config.getModel()}),this.queuedThoughts=[],this.queuedTokens=null):conversation.messages.push(msg)})}catch(error$22){throw console.error(`Error saving message:`,error$22),error$22}}recordThought(thought){if(this.conversationFile)try{this.queuedThoughts.push({...thought,timestamp:new Date().toISOString()})}catch(error$22){throw console.error(`Error saving thought:`,error$22),error$22}}recordMessageTokens(respUsageMetadata){if(this.conversationFile)try{let tokens={input:respUsageMetadata.promptTokenCount??0,output:respUsageMetadata.candidatesTokenCount??0,cached:respUsageMetadata.cachedContentTokenCount??0,thoughts:respUsageMetadata.thoughtsTokenCount??0,tool:respUsageMetadata.toolUsePromptTokenCount??0,total:respUsageMetadata.totalTokenCount??0};this.updateConversation(conversation=>{let lastMsg=this.getLastMessage(conversation);lastMsg&&lastMsg.type===`gemini`&&!lastMsg.tokens?(lastMsg.tokens=tokens,this.queuedTokens=null):this.queuedTokens=tokens})}catch(error$22){throw console.error(`Error updating message tokens:`,error$22),error$22}}recordToolCalls(toolCalls){if(!this.conversationFile)return;let toolRegistry=this.config.getToolRegistry(),enrichedToolCalls=toolCalls.map(toolCall=>{let toolInstance=toolRegistry.getTool(toolCall.name);return{...toolCall,displayName:toolInstance?.displayName||toolCall.name,description:toolInstance?.description||``,renderOutputAsMarkdown:toolInstance?.isOutputMarkdown||!1}});try{this.updateConversation(conversation=>{let lastMsg=this.getLastMessage(conversation);if(!lastMsg||lastMsg.type!==`gemini`||this.queuedThoughts.length>0){let newMsg={...this.newMessage(`gemini`,``),type:`gemini`,toolCalls:enrichedToolCalls,thoughts:this.queuedThoughts,model:this.config.getModel()};this.queuedThoughts.length>0&&(newMsg.thoughts=this.queuedThoughts,this.queuedThoughts=[]),this.queuedTokens&&(newMsg.tokens=this.queuedTokens,this.queuedTokens=null),conversation.messages.push(newMsg)}else{lastMsg.toolCalls||(lastMsg.toolCalls=[]),lastMsg.toolCalls=lastMsg.toolCalls.map(toolCall=>{let incomingToolCall=toolCalls.find(tc=>tc.id===toolCall.id);return incomingToolCall?{...toolCall,...incomingToolCall}:toolCall});for(let toolCall of enrichedToolCalls){let existingToolCall=lastMsg.toolCalls.find(tc=>tc.id===toolCall.id);existingToolCall||lastMsg.toolCalls.push(toolCall)}}})}catch(error$22){throw console.error(`Error adding tool call to message:`,error$22),error$22}}readConversation(){try{return this.cachedLastConvData=fs.readFileSync(this.conversationFile,`utf8`),JSON.parse(this.cachedLastConvData)}catch(error$22){if(error$22.code!==`ENOENT`)throw console.error(`Error reading conversation file:`,error$22),error$22;return{sessionId:this.sessionId,projectHash:this.projectHash,startTime:new Date().toISOString(),lastUpdated:new Date().toISOString(),messages:[]}}}writeConversation(conversation){try{if(!this.conversationFile||conversation.messages.length===0)return;if(this.cachedLastConvData!==JSON.stringify(conversation,null,2)){conversation.lastUpdated=new Date().toISOString();let newContent=JSON.stringify(conversation,null,2);this.cachedLastConvData=newContent,fs.writeFileSync(this.conversationFile,newContent)}}catch(error$22){throw console.error(`Error writing conversation file:`,error$22),error$22}}updateConversation(updateFn){let conversation=this.readConversation();updateFn(conversation),this.writeConversation(conversation)}deleteSession(sessionId$1){try{let chatsDir=path.join(this.config.storage.getProjectTempDir(),`chats`),sessionPath=path.join(chatsDir,`${sessionId$1}.json`);fs.unlinkSync(sessionPath)}catch(error$22){throw console.error(`Error deleting session:`,error$22),error$22}}},TelemetryTarget;(function(TelemetryTarget$1){TelemetryTarget$1.GCP=`gcp`,TelemetryTarget$1.LOCAL=`local`})(TelemetryTarget||(TelemetryTarget={}));const DEFAULT_TELEMETRY_TARGET=TelemetryTarget.LOCAL,DEFAULT_OTLP_ENDPOINT=`http://localhost:4317`;async function handleFallback(config,failedModel,authType,error$22){if(authType!==AuthType.LOGIN_WITH_GOOGLE)return null;let fallbackModel=DEFAULT_GEMINI_FLASH_MODEL;if(failedModel===fallbackModel)return null;let fallbackModelHandler=config.fallbackModelHandler;if(typeof fallbackModelHandler!=`function`)return null;try{let intent=await fallbackModelHandler(failedModel,fallbackModel,error$22);switch(intent){case`retry`:return activateFallbackMode(config,authType),!0;case`stop`:return activateFallbackMode(config,authType),!1;case`auth`:return!1;default:throw Error(`Unexpected fallback intent received from fallbackModelHandler: "${intent}"`)}}catch(handlerError){return console.error(`Fallback UI handler failed:`,handlerError),null}}function activateFallbackMode(config,authType){config.isInFallbackMode()||(config.setFallbackMode(!0),authType&&logFlashFallback(config,new FlashFallbackEvent(authType)))}function partListUnionToString(value){return partToString(value,{verbose:!0})}var StreamEventType;(function(StreamEventType$1){StreamEventType$1.CHUNK=`chunk`,StreamEventType$1.RETRY=`retry`})(StreamEventType||(StreamEventType={}));const INVALID_CONTENT_RETRY_OPTIONS={maxAttempts:3,initialDelayMs:500};function isValidResponse(response){if(response.candidates===void 0||response.candidates.length===0)return!1;let content=response.candidates[0]?.content;return content===void 0?!1:isValidContent(content)}function isValidContent(content){if(content.parts===void 0||content.parts.length===0)return!1;for(let part of content.parts)if(part===void 0||Object.keys(part).length===0||!part.thought&&part.text!==void 0&&part.text===``)return!1;return!0}function validateHistory(history){for(let content of history)if(content.role!==`user`&&content.role!==`model`)throw Error(`Role must be user or model, but got ${content.role}.`)}function extractCuratedHistory(comprehensiveHistory){if(comprehensiveHistory===void 0||comprehensiveHistory.length===0)return[];let curatedHistory=[],length=comprehensiveHistory.length,i$4=0;for(;i$4<length;)if(comprehensiveHistory[i$4].role===`user`)curatedHistory.push(comprehensiveHistory[i$4]),i$4++;else{let modelOutput=[],isValid=!0;for(;i$4<length&&comprehensiveHistory[i$4].role===`model`;)modelOutput.push(comprehensiveHistory[i$4]),isValid&&!isValidContent(comprehensiveHistory[i$4])&&(isValid=!1),i$4++;isValid&&curatedHistory.push(...modelOutput)}return curatedHistory}var EmptyStreamError=class extends Error{constructor(message){super(message),this.name=`EmptyStreamError`}},GeminiChat=class{config;generationConfig;history;sendPromise=Promise.resolve();chatRecordingService;constructor(config,generationConfig={},history=[]){this.config=config,this.generationConfig=generationConfig,this.history=history,validateHistory(history),this.chatRecordingService=new ChatRecordingService(config),this.chatRecordingService.initialize()}setSystemInstruction(sysInstr){this.generationConfig.systemInstruction=sysInstr}async sendMessageStream(params,prompt_id){await this.sendPromise;let streamDoneResolver,streamDonePromise=new Promise(resolve$9=>{streamDoneResolver=resolve$9});this.sendPromise=streamDonePromise;let userContent=createUserContent(params.message);if(!isFunctionResponse(userContent)){let userMessage=Array.isArray(params.message)?params.message:[params.message],userMessageContent=partListUnionToString(toParts(userMessage));this.chatRecordingService.recordMessage({type:`user`,content:userMessageContent})}this.history.push(userContent);let requestContents=this.getHistory(!0),self$1=this;return(async function*(){try{let lastError=Error(`Request failed after all retries.`);for(let attempt=0;attempt<INVALID_CONTENT_RETRY_OPTIONS.maxAttempts;attempt++)try{attempt>0&&(yield{type:StreamEventType.RETRY});let stream$8=await self$1.makeApiCallAndProcessStream(requestContents,params,prompt_id,userContent);for await(let chunk$1 of stream$8)yield{type:StreamEventType.CHUNK,value:chunk$1};lastError=null;break}catch(error$22){lastError=error$22;let isContentError=error$22 instanceof EmptyStreamError;if(isContentError&&attempt<INVALID_CONTENT_RETRY_OPTIONS.maxAttempts-1){logContentRetry(self$1.config,new ContentRetryEvent(attempt,`EmptyStreamError`,INVALID_CONTENT_RETRY_OPTIONS.initialDelayMs)),await new Promise(res=>setTimeout(res,INVALID_CONTENT_RETRY_OPTIONS.initialDelayMs*(attempt+1)));continue}break}if(lastError)throw lastError instanceof EmptyStreamError&&logContentRetryFailure(self$1.config,new ContentRetryFailureEvent(INVALID_CONTENT_RETRY_OPTIONS.maxAttempts,`EmptyStreamError`)),self$1.history[self$1.history.length-1]===userContent&&self$1.history.pop(),lastError}finally{streamDoneResolver()}})()}async makeApiCallAndProcessStream(requestContents,params,prompt_id,userContent){let currentAttemptModel,apiCall=()=>{let modelToUse=this.config.isInFallbackMode()?DEFAULT_GEMINI_FLASH_MODEL:this.config.getModel();if(currentAttemptModel=modelToUse,this.config.getQuotaErrorOccurred()&&modelToUse===DEFAULT_GEMINI_FLASH_MODEL)throw Error(`Please submit a new query to continue with the Flash model.`);return this.config.getContentGenerator().generateContentStream({model:modelToUse,contents:requestContents,config:{...this.generationConfig,...params.config}},prompt_id)},onPersistent429Callback=async(authType,error$22)=>currentAttemptModel?await handleFallback(this.config,currentAttemptModel,authType,error$22):null,streamResponse=await retryWithBackoff(apiCall,{shouldRetry:error$22=>{if(error$22 instanceof Error&&error$22.message){if(isSchemaDepthError(error$22.message))return!1;if(error$22.message.includes(`429`)||error$22.message.match(/5\d{2}/))return!0}return!1},onPersistent429:onPersistent429Callback,authType:this.config.getContentGeneratorConfig()?.authType});return this.processStreamResponse(streamResponse,userContent)}getHistory(curated=!1){let history=curated?extractCuratedHistory(this.history):this.history;return structuredClone(history)}clearHistory(){this.history=[]}addHistory(content){this.history.push(content)}setHistory(history){this.history=history}stripThoughtsFromHistory(){this.history=this.history.map(content=>{let newContent={...content};return newContent.parts&&(newContent.parts=newContent.parts.map(part=>{if(part&&typeof part==`object`&&`thoughtSignature`in part){let newPart={...part};return delete newPart.thoughtSignature,newPart}return part})),newContent})}setTools(tools){this.generationConfig.tools=tools}async maybeIncludeSchemaDepthContext(error$22){if(isSchemaDepthError(error$22.message)||isInvalidArgumentError(error$22.message)){let tools=this.config.getToolRegistry().getAllTools(),cyclicSchemaTools=[];for(let tool$1 of tools)(tool$1.schema.parametersJsonSchema&&hasCycleInSchema(tool$1.schema.parametersJsonSchema)||tool$1.schema.parameters&&hasCycleInSchema(tool$1.schema.parameters))&&cyclicSchemaTools.push(tool$1.displayName);if(cyclicSchemaTools.length>0){let extraDetails=`
|
|
1491
1485
|
|
|
1492
1486
|
This error was probably caused by cyclic schema references in one of the following tools, try disabling them with excludeTools:
|
|
1493
1487
|
|
|
@@ -1671,4 +1665,4 @@ const SCREEN_READER_USER_PREFIX=`User: `,InputPrompt=({buffer:buffer$1,onSubmit,
|
|
|
1671
1665
|
`)&&(textToInsert+=` `),buffer$1.replaceRangeByOffset(offset,offset,textToInsert)}}}catch(error$22){console.error(`Error handling clipboard image:`,error$22)}},[buffer$1,config]),handleInput=(0,import_react.useCallback)(key=>{if(!(!focus&&!key.paste)){if(key.paste){setRecentPasteTime(Date.now()),pasteTimeoutRef.current&&clearTimeout(pasteTimeoutRef.current),pasteTimeoutRef.current=setTimeout(()=>{setRecentPasteTime(null),pasteTimeoutRef.current=null},500),buffer$1.handleInput(key);return}if(!(vimHandleInput&&vimHandleInput(key))){if(key.name!==`escape`&&(escPressCount>0||showEscapePrompt)&&resetEscapeState(),key.sequence===`!`&&buffer$1.text===``&&!completion.showSuggestions){setShellModeActive(!shellModeActive),buffer$1.setText(``);return}if(keyMatchers[Command.ESCAPE](key)){if(reverseSearchActive){setReverseSearchActive(!1),reverseSearchCompletion.resetCompletionState(),buffer$1.setText(textBeforeReverseSearch);let offset=logicalPosToOffset(buffer$1.lines,cursorPosition[0],cursorPosition[1]);buffer$1.moveToOffset(offset);return}if(shellModeActive){setShellModeActive(!1),resetEscapeState();return}if(completion.showSuggestions){completion.resetCompletionState(),resetEscapeState();return}if(escPressCount===0){if(buffer$1.text===``)return;setEscPressCount(1),setShowEscapePrompt(!0),escapeTimerRef.current&&clearTimeout(escapeTimerRef.current),escapeTimerRef.current=setTimeout(()=>{resetEscapeState()},500)}else buffer$1.setText(``),resetCompletionState(),resetEscapeState();return}if(shellModeActive&&keyMatchers[Command.REVERSE_SEARCH](key)){setReverseSearchActive(!0),setTextBeforeReverseSearch(buffer$1.text),setCursorPosition(buffer$1.cursor);return}if(keyMatchers[Command.CLEAR_SCREEN](key)){onClearScreen();return}if(reverseSearchActive){let{activeSuggestionIndex,navigateUp,navigateDown,showSuggestions,suggestions}=reverseSearchCompletion;if(showSuggestions){if(keyMatchers[Command.NAVIGATION_UP](key)){navigateUp();return}if(keyMatchers[Command.NAVIGATION_DOWN](key)){navigateDown();return}if(keyMatchers[Command.ACCEPT_SUGGESTION_REVERSE_SEARCH](key)){reverseSearchCompletion.handleAutocomplete(activeSuggestionIndex),reverseSearchCompletion.resetCompletionState(),setReverseSearchActive(!1);return}}if(keyMatchers[Command.SUBMIT_REVERSE_SEARCH](key)){let textToSubmit=showSuggestions&&activeSuggestionIndex>-1?suggestions[activeSuggestionIndex].value:buffer$1.text;handleSubmitAndClear(textToSubmit),reverseSearchCompletion.resetCompletionState(),setReverseSearchActive(!1);return}if(keyMatchers[Command.NAVIGATION_UP](key)||keyMatchers[Command.NAVIGATION_DOWN](key))return}if(completion.isPerfectMatch&&keyMatchers[Command.RETURN](key)){handleSubmitAndClear(buffer$1.text);return}if(completion.showSuggestions){if(completion.suggestions.length>1){if(keyMatchers[Command.COMPLETION_UP](key)){completion.navigateUp();return}if(keyMatchers[Command.COMPLETION_DOWN](key)){completion.navigateDown();return}}if(keyMatchers[Command.ACCEPT_SUGGESTION](key)){if(completion.suggestions.length>0){let targetIndex=completion.activeSuggestionIndex===-1?0:completion.activeSuggestionIndex;targetIndex<completion.suggestions.length&&completion.handleAutocomplete(targetIndex)}return}}if(key.name===`tab`&&!completion.showSuggestions&&completion.promptCompletion.text){completion.promptCompletion.accept();return}if(shellModeActive){if(keyMatchers[Command.NAVIGATION_UP](key)){let prevCommand=shellHistory.getPreviousCommand();prevCommand!==null&&buffer$1.setText(prevCommand);return}if(keyMatchers[Command.NAVIGATION_DOWN](key)){let nextCommand=shellHistory.getNextCommand();nextCommand!==null&&buffer$1.setText(nextCommand);return}}else{if(keyMatchers[Command.HISTORY_UP](key)){inputHistory.navigateUp();return}if(keyMatchers[Command.HISTORY_DOWN](key)){inputHistory.navigateDown();return}if(keyMatchers[Command.NAVIGATION_UP](key)&&(buffer$1.allVisualLines.length===1||buffer$1.visualCursor[0]===0&&buffer$1.visualScrollRow===0)){inputHistory.navigateUp();return}if(keyMatchers[Command.NAVIGATION_DOWN](key)&&(buffer$1.allVisualLines.length===1||buffer$1.visualCursor[0]===buffer$1.allVisualLines.length-1)){inputHistory.navigateDown();return}}if(keyMatchers[Command.SUBMIT](key)){if(buffer$1.text.trim()){if(recentPasteTime!==null)return;let[row,col]=buffer$1.cursor,line$1=buffer$1.lines[row],charBefore=col>0?cpSlice(line$1,col-1,col):``;charBefore===`\\`?(buffer$1.backspace(),buffer$1.newline()):handleSubmitAndClear(buffer$1.text)}return}if(keyMatchers[Command.NEWLINE](key)){buffer$1.newline();return}if(keyMatchers[Command.HOME](key)){buffer$1.move(`home`);return}if(keyMatchers[Command.END](key)){buffer$1.move(`end`);return}if(keyMatchers[Command.CLEAR_INPUT](key)){buffer$1.text.length>0&&(buffer$1.setText(``),resetCompletionState());return}if(keyMatchers[Command.KILL_LINE_RIGHT](key)){buffer$1.killLineRight();return}if(keyMatchers[Command.KILL_LINE_LEFT](key)){buffer$1.killLineLeft();return}if(keyMatchers[Command.DELETE_WORD_BACKWARD](key)){buffer$1.deleteWordLeft();return}if(keyMatchers[Command.OPEN_EXTERNAL_EDITOR](key)){buffer$1.openInExternalEditor();return}if(keyMatchers[Command.PASTE_CLIPBOARD_IMAGE](key)){handleClipboardImage();return}buffer$1.handleInput(key),completion.promptCompletion.text&&key.sequence&&key.sequence.length===1&&!key.ctrl&&!key.meta&&completion.promptCompletion.clear()}}},[focus,buffer$1,completion,shellModeActive,setShellModeActive,onClearScreen,inputHistory,handleSubmitAndClear,shellHistory,reverseSearchCompletion,handleClipboardImage,resetCompletionState,escPressCount,showEscapePrompt,resetEscapeState,vimHandleInput,reverseSearchActive,textBeforeReverseSearch,cursorPosition,recentPasteTime]);useKeypress(handleInput,{isActive:!0});let linesToRender=buffer$1.viewportVisualLines,[cursorVisualRowAbsolute,cursorVisualColAbsolute]=buffer$1.visualCursor,scrollVisualRow=buffer$1.visualScrollRow,getGhostTextLines=(0,import_react.useCallback)(()=>{if(!completion.promptCompletion.text||!buffer$1.text||!completion.promptCompletion.text.startsWith(buffer$1.text))return{inlineGhost:``,additionalLines:[]};let ghostSuffix=completion.promptCompletion.text.slice(buffer$1.text.length);if(!ghostSuffix)return{inlineGhost:``,additionalLines:[]};let currentLogicalLine=buffer$1.lines[buffer$1.cursor[0]]||``,cursorCol=buffer$1.cursor[1],textBeforeCursor=cpSlice(currentLogicalLine,0,cursorCol),usedWidth=stringWidth(textBeforeCursor),remainingWidth=Math.max(0,inputWidth-usedWidth),ghostTextLinesRaw=ghostSuffix.split(`
|
|
1672
1666
|
`),firstLineRaw=ghostTextLinesRaw.shift()||``,inlineGhost$1=``,remainingFirstLine=``;if(stringWidth(firstLineRaw)<=remainingWidth)inlineGhost$1=firstLineRaw;else{let words$1=firstLineRaw.split(` `),currentLine=``,wordIdx=0;for(let word of words$1){let prospectiveLine=currentLine?`${currentLine} ${word}`:word;if(stringWidth(prospectiveLine)>remainingWidth)break;currentLine=prospectiveLine,wordIdx++}inlineGhost$1=currentLine,words$1.length>wordIdx&&(remainingFirstLine=words$1.slice(wordIdx).join(` `))}let linesToWrap=[];remainingFirstLine&&linesToWrap.push(remainingFirstLine),linesToWrap.push(...ghostTextLinesRaw);let remainingGhostText=linesToWrap.join(`
|
|
1673
1667
|
`),additionalLines$1=[];if(remainingGhostText){let textLines=remainingGhostText.split(`
|
|
1674
|
-
`);for(let textLine of textLines){let words$1=textLine.split(` `),currentLine=``;for(let word of words$1){let prospectiveLine=currentLine?`${currentLine} ${word}`:word,prospectiveWidth=stringWidth(prospectiveLine);if(prospectiveWidth>inputWidth){currentLine&&additionalLines$1.push(currentLine);let wordToProcess=word;for(;stringWidth(wordToProcess)>inputWidth;){let part=``,wordCP=toCodePoints(wordToProcess),partWidth=0,splitIndex=0;for(let i$4=0;i$4<wordCP.length;i$4++){let char=wordCP[i$4],charWidth=stringWidth(char);if(partWidth+charWidth>inputWidth)break;part+=char,partWidth+=charWidth,splitIndex=i$4+1}additionalLines$1.push(part),wordToProcess=cpSlice(wordToProcess,splitIndex)}currentLine=wordToProcess}else currentLine=prospectiveLine}currentLine&&additionalLines$1.push(currentLine)}}return{inlineGhost:inlineGhost$1,additionalLines:additionalLines$1}},[completion.promptCompletion.text,buffer$1.text,buffer$1.lines,buffer$1.cursor,inputWidth]),{inlineGhost,additionalLines}=getGhostTextLines();return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(Box_default,{borderStyle:`round`,borderColor:shellModeActive?theme.status.warning:focus?theme.border.focused:theme.border.default,paddingX:1,children:[(0,import_jsx_runtime.jsx)(Text,{color:shellModeActive?theme.status.warning:theme.text.accent,children:shellModeActive?reverseSearchActive?(0,import_jsx_runtime.jsxs)(Text,{color:theme.text.link,"aria-label":`User: `,children:[`(r:)`,` `]}):`! `:`> `}),(0,import_jsx_runtime.jsx)(Box_default,{flexGrow:1,flexDirection:`column`,children:buffer$1.text.length===0&&placeholder?focus?(0,import_jsx_runtime.jsxs)(Text,{children:[source_default.inverse(placeholder.slice(0,1)),(0,import_jsx_runtime.jsx)(Text,{color:theme.text.secondary,children:placeholder.slice(1)})]}):(0,import_jsx_runtime.jsx)(Text,{color:theme.text.secondary,children:placeholder}):linesToRender.map((lineText,visualIdxInRenderedSet)=>{let tokens=parseInputForHighlighting(lineText,visualIdxInRenderedSet),cursorVisualRow=cursorVisualRowAbsolute-scrollVisualRow,isOnCursorLine=focus&&visualIdxInRenderedSet===cursorVisualRow,renderedLine=[],charCount=0;tokens.forEach((token$1,tokenIdx)=>{let display=token$1.text;if(isOnCursorLine){let relativeVisualColForHighlight=cursorVisualColAbsolute,tokenStart=charCount,tokenEnd=tokenStart+cpLen(token$1.text);if(relativeVisualColForHighlight>=tokenStart&&relativeVisualColForHighlight<tokenEnd){let charToHighlight=cpSlice(token$1.text,relativeVisualColForHighlight-tokenStart,relativeVisualColForHighlight-tokenStart+1),highlighted=source_default.inverse(charToHighlight);display=cpSlice(token$1.text,0,relativeVisualColForHighlight-tokenStart)+highlighted+cpSlice(token$1.text,relativeVisualColForHighlight-tokenStart+1)}charCount=tokenEnd}let color=token$1.type===`command`||token$1.type===`file`?theme.text.accent:theme.text.primary;renderedLine.push((0,import_jsx_runtime.jsx)(Text,{color,children:display},`token-${tokenIdx}`))});let currentLineGhost=isOnCursorLine?inlineGhost:``;isOnCursorLine&&cursorVisualColAbsolute===cpLen(lineText)&&(currentLineGhost||renderedLine.push((0,import_jsx_runtime.jsx)(Text,{children:source_default.inverse(` `)},`cursor-end-${cursorVisualColAbsolute}`)));let showCursorBeforeGhost=focus&&isOnCursorLine&&cursorVisualColAbsolute===cpLen(lineText)&¤tLineGhost;return(0,import_jsx_runtime.jsx)(Box_default,{height:1,children:(0,import_jsx_runtime.jsxs)(Text,{children:[renderedLine,showCursorBeforeGhost&&source_default.inverse(` `),currentLineGhost&&(0,import_jsx_runtime.jsx)(Text,{color:theme.text.secondary,children:currentLineGhost})]})},`line-${visualIdxInRenderedSet}`)}).concat(additionalLines.map((ghostLine,index)=>{let padding=Math.max(0,inputWidth-stringWidth(ghostLine));return(0,import_jsx_runtime.jsxs)(Text,{color:theme.text.secondary,children:[ghostLine,` `.repeat(padding)]},`ghost-line-${index}`)}))})]}),completion.showSuggestions&&(0,import_jsx_runtime.jsx)(Box_default,{paddingRight:2,children:(0,import_jsx_runtime.jsx)(SuggestionsDisplay,{suggestions:completion.suggestions,activeIndex:completion.activeSuggestionIndex,isLoading:completion.isLoadingSuggestions,width:suggestionsWidth,scrollOffset:completion.visibleStartIndex,userInput:buffer$1.text})}),reverseSearchActive&&(0,import_jsx_runtime.jsx)(Box_default,{paddingRight:2,children:(0,import_jsx_runtime.jsx)(SuggestionsDisplay,{suggestions:reverseSearchCompletion.suggestions,activeIndex:reverseSearchCompletion.activeSuggestionIndex,isLoading:reverseSearchCompletion.isLoadingSuggestions,width:suggestionsWidth,scrollOffset:reverseSearchCompletion.visibleStartIndex,userInput:buffer$1.text})})]})};function createMinimalConfig(){return new Config({sessionId:`blink`,targetDir:process.cwd(),cwd:process.cwd(),debugMode:!1,model:`gemini-1.5-flash`,telemetry:{enabled:!1}})}function TextInput({onSubmit,placeholder,slashCommands}){let config=(0,import_react.useMemo)(()=>createMinimalConfig(),[]),[userMessages,setUserMessages]=(0,import_react.useState)([]),{stdout:stdout$1}=use_stdout_default(),buffer$1=useTextBuffer({viewport:{width:stdout$1.columns,height:Math.min(stdout$1.rows,15)},isValidPath:filePath=>fs$1.existsSync(filePath)}),commands=(0,import_react.useMemo)(()=>slashCommands?.map(s$3=>s$3.name)??[],[slashCommands]);return(0,import_jsx_runtime.jsx)(KeypressProvider,{kittyProtocolEnabled:!0,config,children:(0,import_jsx_runtime.jsx)(Box_default,{flexDirection:`column`,children:(0,import_jsx_runtime.jsx)(InputPrompt,{buffer:buffer$1,onSubmit:value=>{let args=value.trim().split(` `),first$1=args[0];if(first$1&&first$1.startsWith(`/`)){let command=commands.findIndex(c$3=>c$3===first$1.slice(1));if(command!==-1)return slashCommands?.[command]?.action(args.slice(1).join(` `))}setUserMessages(prev=>[value,...prev]),onSubmit(value)},placeholder,userMessages,onClearScreen:()=>{},config,slashCommands:slashCommands?.map(cmd=>({name:cmd.name,altNames:cmd.altNames,description:cmd.description,kind:`built-in`,completion:async(context,partialArg)=>cmd.completion?.(partialArg)??[]}))??[],commandContext:{services:{config,settings:{},git:void 0,logger:console},ui:{addItem:()=>{},clear:()=>{},setDebugMessage:()=>{},pendingItem:null,setPendingItem:()=>{},loadHistory:()=>{},toggleCorgiMode:()=>{},toggleVimEnabled:async()=>!1,setGeminiMdFileCount:()=>{},reloadCommands:()=>{}},session:{stats:{},sessionShellAllowlist:new Set}},inputWidth:stdout$1.columns,suggestionsWidth:stdout$1.columns,shellModeActive:!1,setShellModeActive:()=>{}})})})}var text_input_default=TextInput;function useAgent(options$1){let[agent,setAgent]=(0,import_react.useState)(void 0),[logs$1,setLogs]=(0,import_react.useState)([]),[error$22,setError]=(0,import_react.useState)(void 0),[buildResult,setBuildResult]=(0,import_react.useState)(options$1.buildResult),[env$4,setEnv]=(0,import_react.useState)(options$1.env),[apiServerUrl,setApiServerUrl]=(0,import_react.useState)(options$1.apiServerUrl),[supportsRequests,setSupportsRequests]=(0,import_react.useState)(!1);return(0,import_react.useEffect)(()=>{setEnv(options$1.env),setBuildResult(options$1.buildResult),setApiServerUrl(options$1.apiServerUrl)},[options$1.env,options$1.buildResult,options$1.apiServerUrl]),(0,import_react.useEffect)(()=>{if(!buildResult||`error`in buildResult){setAgent(void 0),setLogs([]),setError(void 0);return}let controller=new AbortController;return(async()=>{let port$1=await getRandomPort(),proc$1=spawn$1(`node`,[buildResult.entry],{stdio:`pipe`,env:{...process.env,...env$4,[APIServerURLEnvironmentVariable]:apiServerUrl,PORT:port$1.toString(),HOST:`127.0.0.1`}});controller.signal.addEventListener(`abort`,()=>{proc$1.kill()});let ready=!1;proc$1.stdout.on(`data`,data$2=>{let msg=Buffer.from(data$2).toString(`utf-8`).trim();!ready&&msg.startsWith(`Agent server listening on`)||setLogs(prev=>[...prev,{level:`log`,message:msg}])}),proc$1.stderr.on(`data`,data$2=>{setLogs(prev=>[...prev,{level:`error`,message:Buffer.from(data$2).toString(`utf-8`).trim()}])}),proc$1.on(`exit`,()=>{controller.abort()});let client$1=new Client$1({baseUrl:`http://127.0.0.1:${port$1}`});for(;!controller.signal.aborted;){try{await client$1.health();break}catch(err){}await new Promise(resolve$9=>setTimeout(resolve$9,100))}if(controller.signal.aborted)return;ready=!0;let capabilities=await client$1.capabilities();setSupportsRequests(capabilities.requests),setAgent(client$1)})().catch(err=>{controller.signal.aborted||setError(err)}),()=>controller.abort()},[buildResult,env$4,apiServerUrl]),(0,import_react.useMemo)(()=>({agent,logs:logs$1,error:error$22,supportsRequests}),[agent,logs$1,error$22,supportsRequests])}async function getRandomPort(){let server=createServer();return new Promise((resolve$9,reject)=>{server.listen(0,()=>{let port$1=server.address().port;resolve$9(port$1)}).on(`error`,err=>{reject(err)})}).finally(()=>{server.close()})}function useBundler(directory){let config=(0,import_react.useMemo)(()=>resolveConfig(directory),[directory]),[error$22,setError]=(0,import_react.useState)(void 0),[result,setResult]=(0,import_react.useState)(void 0),[status,setStatus]=(0,import_react.useState)(`building`);return(0,import_react.useEffect)(()=>{let controller=new AbortController;return config.build({cwd:directory,entry:config.entry,outdir:config.outdir,watch:!0,dev:!0,signal:controller.signal,onStart:()=>{setStatus(`building`),setError(void 0),setResult(void 0)},onResult:result$1=>{`error`in result$1?(setError(result$1.error),setStatus(`error`)):(setResult(result$1),setStatus(`success`))}}).catch(err=>{console.log(`error`,err),setStatus(`error`),setError(err)}),()=>{controller.abort()}},[directory]),(0,import_react.useMemo)(()=>({error:error$22,status,result,entry:config.entry,outdir:config.outdir}),[error$22,status,result,config.entry,config.outdir])}function useDevhook(options$1){let onRequestRef=(0,import_react.useRef)(options$1.onRequest);(0,import_react.useEffect)(()=>{onRequestRef.current=options$1.onRequest},[options$1.onRequest]);let id=(0,import_react.useRef)(options$1.id??crypto.randomUUID()),[status,setStatus]=(0,import_react.useState)(`disconnected`);return(0,import_react.useEffect)(()=>{if(options$1.disabled){setStatus(`disconnected`);return}let client$1=new Client,listener=client$1.devhook.listen({id:id.current,onRequest:async request$2=>options$1.onRequest(request$2),onConnect:()=>{setStatus(`connected`)},onDisconnect:()=>{setStatus(`disconnected`)},onError:error$22=>{setStatus(`error`)}});return()=>{listener.dispose()}},[options$1.disabled]),{id:id.current,status}}var import_main=__toESM(require_main$1(),1);function useDotenv(directory,name$2=`.env.local`){let[env$4,setEnv]=(0,import_react.useState)({});return(0,import_react.useEffect)(()=>{let watcher,readEnvFile=path$32=>{try{setEnv((0,import_main.parse)(readFileSync$1(path$32,`utf-8`)))}catch(error$22){console.error(error$22),setEnv({})}};return findNearestEntry(directory,name$2).then(nearest=>{if(!nearest){setEnv({});return}readEnvFile(nearest),watcher=watch(nearest,{persistent:!1},()=>{readEnvFile(nearest)})}),()=>{watcher&&watcher.close()}},[directory,name$2]),env$4}function useServerChat(server,id){let[chat$2,setChat]=(0,import_react.useState)(()=>server.upsertChat(id));return(0,import_react.useEffect)(()=>{setChat(server.upsertChat(id));let disposable=server.onChatChanged(chat$3=>{if(chat$3.id===id)return setChat(chat$3)});return()=>disposable.dispose()},[server,id]),chat$2}function useTerminalSize(){let{stdout:stdout$1}=use_stdout_default(),[size,setSize]=(0,import_react.useState)({columns:process.stdout.columns,rows:process.stdout.rows});return(0,import_react.useEffect)(()=>{if(!stdout$1||!stdout$1.isTTY)return;let handleResize=()=>{setSize({columns:stdout$1.columns,rows:stdout$1.rows})};return process.stdout.on(`resize`,handleResize),()=>{process.stdout.off(`resize`,handleResize)}},[stdout$1]),{columns:size.columns,rows:size.rows?size.rows-1:void 0}}async function start(element){let instance$1=render_default(element,{exitOnCtrlC:!1});await instance$1.waitUntilExit()}function startDev({directory}){return start((0,import_jsx_runtime.jsx)(Root,{directory}))}const Root=({directory})=>{let size=useTerminalSize(),{error:buildError,status:buildStatus,result:buildResult,entry:entrypoint}=useBundler(directory),dotenv=useDotenv(directory),env$4=(0,import_react.useMemo)(()=>{let blinkToken=getAuthToken();return blinkToken?{...dotenv,BLINK_TOKEN:blinkToken}:dotenv},[dotenv]),server=(0,import_react.useMemo)(()=>createDevServer({port:0,dataDirectory:join$1(directory,`.blink`,`data`),sendMessages:async(request$2,signal)=>{if(!currentAgentRef.current)throw Error(`The agent has not been compiled yet.`);if(!currentChatIDRef.current)throw Error(`No chat selected.`);let messages$1=request$2.messages;return await currentAgentRef.current.sendMessages({messages:messages$1.filter(m$2=>m$2.metadata?.ephemeral!==!0),chat:{id:currentChatIDRef.current}},{signal})},serializeChat:chat$3=>({...chat$3,messages:chat$3.messages.filter(m$2=>m$2.metadata?.ephemeral!==!0)})}),[]),{agent,logs:logs$1,error:agentError,supportsRequests}=useAgent({buildResult,env:env$4,apiServerUrl:server.url}),currentAgentRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{agent?currentAgentRef.current=agent:server.stopChat(chat$2.id)},[agent]);let devhookID=(0,import_react.useMemo)(()=>{let storagePath=join$1(directory,`.blink`,`devhook.txt`);if(mkdirSync(dirname$1(storagePath),{recursive:!0}),existsSync$1(storagePath))return readFileSync$1(storagePath,`utf-8`);let id=crypto.randomUUID();return writeFileSync$1(storagePath,id),id},[]),devhook=useDevhook({id:devhookID,disabled:!supportsRequests,onRequest:async request$2=>{if(!currentAgentRef.current)throw Error(`No agent`);let requestURL=new URL(request$2.url),agentURL=new URL(currentAgentRef.current.baseUrl);agentURL.pathname=requestURL.pathname,agentURL.search=requestURL.search;let response=await fetch(agentURL.toString(),request$2);return server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`webhook`,ephemeral:!0},parts:[{type:`text`,text:`method=${request$2.method} status=${response.status}`}]}),response}}),[chatID,setChatID]=(0,import_react.useState)(`default`),currentChatIDRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{currentChatIDRef.current=chatID},[chatID]);let chat$2=useServerChat(server,chatID),[chatIDs,setChatIDs]=(0,import_react.useState)(()=>server.listChats()),currentChatIDsRef=(0,import_react.useRef)(chatIDs);(0,import_react.useEffect)(()=>{currentChatIDsRef.current=chatIDs},[chatIDs]),(0,import_react.useEffect)(()=>{let disposable=server.onChatChanged(chat$3=>{!currentChatIDsRef.current.includes(chat$3.id)&¤tChatIDRef.current&&(setChatID(chat$3.id),server.upsertChatMessage(chat$3.id,{role:`assistant`,metadata:{type:`chat-created`,ephemeral:!0},parts:[{type:`text`,text:`This chat has just been created: ${chat$3.id}. We automatically switched you to it!`}]})),setChatIDs(prev=>{let newChats=[...prev];return newChats.includes(chat$3.id)?prev:(newChats.push(chat$3.id),newChats)})});return()=>{disposable.dispose()}},[server]);let{exit}=use_app_default(),[exitArmed,setExitArmed]=(0,import_react.useState)(!1),exitTimerRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>()=>{exitTimerRef.current&&clearTimeout(exitTimerRef.current)},[]),use_input_default((input,key)=>{if(key.ctrl&&input.toLowerCase()===`c`){if(exitArmed){exit();return}setExitArmed(!0),exitTimerRef.current&&clearTimeout(exitTimerRef.current),exitTimerRef.current=setTimeout(()=>setExitArmed(!1),2e3)}}),(0,import_react.useEffect)(()=>{if(buildError||agentError||chat$2.error){let errors=[];buildError&&errors.push({type:`text`,text:`${buildError.message}`+(buildError.file?` (${buildError.file})`:``)}),agentError&&errors.push({type:`text`,text:agentError.message}),chat$2.error&&errors.push({type:`text`,text:`Chat error: ${chat$2.error.message}, ${chat$2.error.stack}`}),server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`error`,ephemeral:!0},parts:errors});return}if(buildStatus===`building`||!agent){server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`info`,ephemeral:!0},parts:[{type:`text`,text:`Compiling...`}]});return}if(buildStatus===`success`&&agent){server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`success`,ephemeral:!0},parts:[{type:`text`,text:`Compiled in 100ms`}]});return}},[buildError,chat$2.error,agentError,buildStatus,agent]);let lastReportedKeys=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{let keys=Object.keys(env$4);if(keys.length===lastReportedKeys.current||lastReportedKeys.current===void 0)return;lastReportedKeys.current=keys.length;let keysText=keys.map(key=>source_default.dim(key)).join(`, `);keysText.length===0&&(keysText=source_default.dim(`(none)`));let text=`Loaded .env.local: `+keysText;server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`info`,ephemeral:!0},parts:[{type:`text`,text}]})},[env$4]),(0,import_react.useEffect)(()=>{!supportsRequests||devhook.status!==`connected`||server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`info`,ephemeral:!0},parts:[{type:`text`,text:`Send webhooks from anywhere: https://${devhook.id}.dev.blink.host`}]})},[supportsRequests,devhook.status]);let lastLogsLength=(0,import_react.useRef)(0);(0,import_react.useEffect)(()=>{if(logs$1.length===lastLogsLength.current)return;let currentLength=lastLogsLength.current;for(let log$9 of logs$1.slice(currentLength))server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`runtime-log`,level:log$9.level,ephemeral:!0},parts:[{type:`text`,text:log$9.message}]});lastLogsLength.current=logs$1.length},[logs$1]);let keymaps=(0,import_react.useMemo)(()=>({"⏎":`send`,"Ctrl+R":`reset chat`,"Ctrl+C":`quit`,"[Escape]":`stop streaming`}),[]),keybindSuggestion=(0,import_react.useMemo)(()=>{if(exitArmed)return`Ctrl+C again to quit`;if(chat$2.status===`streaming`)return`Press [Escape] to stop the agent!`},[exitArmed,chat$2.status]),needsApproval=(0,import_react.useMemo)(()=>{let lastMessage=chat$2.messages.findLast(message=>!(message.role!==`assistant`||message.metadata&&message.metadata.ephemeral));if(!lastMessage||lastMessage.role!==`assistant`)return;let parts=lastMessage.parts.filter(isToolOrDynamicToolUIPart);if(parts.length===0)return;let should=parts.some(part=>isToolApprovalOutput(part.output)&&part.output.outcome===`pending`);if(should)return lastMessage},[chat$2.messages]),{write:write$1}=use_stdout_default(),[epoch,setEpoch]=(0,import_react.useState)(0),resetTerminal=(0,import_react.useCallback)(()=>{write$1(`\x1Bc`),setEpoch(prev=>prev+1)},[write$1]),lastChatIDRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{lastChatIDRef.current!==chat$2.id&&(lastChatIDRef.current&&resetTerminal(),lastChatIDRef.current=chat$2.id)},[chat$2.id,resetTerminal]);let initialSizeRef=(0,import_react.useRef)(size);return(0,import_react.useEffect)(()=>{(initialSizeRef.current.columns!==size.columns||initialSizeRef.current.rows!==size.rows)&&(resetTerminal(),initialSizeRef.current=size)},[size.columns,size.rows]),(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Keybinds,{resetChat:()=>{server.resetChat(chat$2.id),resetTerminal()},stopStreaming:()=>{server.stopChat(chat$2.id)}}),chat$2.error?(0,import_jsx_runtime.jsx)(Box_default,{marginTop:1,children:(0,import_jsx_runtime.jsx)(Text,{color:`red`,children:chat$2.error.message})}):null,(0,import_jsx_runtime.jsxs)(Box_default,{flexDirection:`column`,children:[(0,import_jsx_runtime.jsx)(Static,{items:[{},...chat$2.messages],children:(message,index)=>index===0?(0,import_jsx_runtime.jsxs)(Box_default,{flexDirection:`column`,children:[(0,import_jsx_runtime.jsxs)(Box_default,{children:[(0,import_jsx_runtime.jsx)(Text,{bold:!0,children:`blink■`}),(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:` agent development mode`})]}),(0,import_jsx_runtime.jsxs)(Box_default,{marginTop:1,flexDirection:`column`,children:[(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`Edit `,entrypoint,` to hot-reload your agent.`]}),(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`Run `,(0,import_jsx_runtime.jsx)(Text,{color:`blue`,children:`blink deploy`}),` to use your agent in the cloud.`]})]})]},`banner`):(0,import_jsx_runtime.jsx)(Message,{message,previousMessage:index>0?chat$2.messages.at(index-2):void 0,nextMessage:index<chat$2.messages.length-1?chat$2.messages.at(index+1):void 0,maxWidth:size.columns-2},message.id)},`messages-${chat$2.id}-${epoch}`),chat$2.streamingMessage?(0,import_jsx_runtime.jsx)(Message,{message:chat$2.streamingMessage,nextMessage:void 0,previousMessage:chat$2.messages.length>0?chat$2.messages.at(chat$2.messages.length-1):void 0,streaming:!0,maxWidth:size.columns-2},chat$2.streamingMessage.id):null,chat$2.status===`streaming`&&!chat$2.streamingMessage?(0,import_jsx_runtime.jsx)(AssistantWaitingPlaceholder,{maxWidth:size.columns-2}):null]}),(0,import_jsx_runtime.jsx)(Box_default,{flexDirection:`column`,marginTop:1,children:needsApproval?(0,import_jsx_runtime.jsx)(ApprovalInput,{onConfirm:approved=>{server.updateChatMessage(chat$2.id,{...needsApproval,parts:needsApproval.parts.map(part=>isToolUIPart(part)&&isToolApprovalOutput(part.output)?{...part,state:`output-available`,output:{...part.output,outcome:approved?`approved`:`rejected`},errorText:void 0}:part)}),server.runtime.chat.sendMessages(chat$2.id,{messages:[],behavior:`interrupt`})},onCancel:()=>{}}):(0,import_jsx_runtime.jsx)(text_input_default,{slashCommands:[{name:`reset`,altNames:[`clear`],description:`Reset the chat`,action:()=>{server.resetChat(chat$2.id)}},{name:`switch`,description:`Switch to a different chat`,action:args=>{setChatID(args)},completion:async partialArg=>{let chats=server.listChats();return chats.map(chat$3=>chat$3)}},{name:`new`,description:`Create a new chat`,action:args=>{setChatID(args)}}],onSubmit:value=>(server.runtime.chat.sendMessages(chat$2.id,{messages:[{role:`user`,parts:[{type:`text`,text:value}]}],behavior:`interrupt`}),!0)})}),(0,import_jsx_runtime.jsx)(Box_default,{children:keybindSuggestion?(0,import_jsx_runtime.jsx)(Text,{color:`yellow`,children:` `+keybindSuggestion}):(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Box_default,{marginLeft:2,children:(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`chat: `,(0,import_jsx_runtime.jsx)(Text,{children:chat$2.id})]})}),(0,import_jsx_runtime.jsx)(Spacer,{}),(0,import_jsx_runtime.jsx)(Box_default,{gap:3,marginRight:2,children:Object.entries(keymaps).map(([key,value])=>(0,import_jsx_runtime.jsx)(Text,{children:source_default.gray.dim(key+` `+value)},key))})]})})]})},ApprovalInput=({onConfirm,onCancel})=>{let[selected,setSelected]=(0,import_react.useState)(`yes`),handleConfirm=import_react.useCallback(approved=>{onConfirm(approved)},[onConfirm]),handleCancel=import_react.useCallback(()=>{onCancel()},[onCancel]);return use_input_default((input,key)=>{let lower=input.toLowerCase();if(key.escape){handleCancel();return}if(lower===`y`){handleConfirm(!0);return}if(lower===`n`){handleConfirm(!1);return}if(key.leftArrow||key.rightArrow||key.tab){setSelected(prev=>prev===`yes`?`no`:`yes`);return}key.return&&handleConfirm(selected===`yes`)}),(0,import_jsx_runtime.jsxs)(Box_default,{gap:2,flexDirection:`row`,children:[(0,import_jsx_runtime.jsx)(Text,{children:`Approve?`}),(0,import_jsx_runtime.jsx)(Box_default,{children:(0,import_jsx_runtime.jsxs)(Text,{children:[`[`,(0,import_jsx_runtime.jsx)(Text,{color:selected===`yes`?`green`:`gray`,bold:selected===`yes`,children:`Yes`}),`/`,(0,import_jsx_runtime.jsx)(Text,{color:selected===`no`?`red`:`gray`,bold:selected===`no`,children:`No`}),`]`]})}),(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:`(y/n, ←/→ then ⏎)`})]})},Keybinds=({resetChat,stopStreaming})=>(use_input_default((input,key)=>{key.ctrl&&input===`r`&&resetChat(),key.escape&&stopStreaming()}),null),MessageComponent=({message,previousMessage,maxWidth,streaming})=>{let prefix,contentColor,marginTop=1;switch(message.role){case`system`:prefix=(0,import_jsx_runtime.jsx)(Text,{children:`t `}),contentColor=`gray`;break;case`user`:prefix=(0,import_jsx_runtime.jsx)(Text,{color:`magenta`,bold:!0,children:`▎`}),contentColor=`gray`;break;case`assistant`:prefix=(0,import_jsx_runtime.jsx)(Text,{color:`white`,children:`> `}),contentColor=`white`;break}if(message.metadata?.type===`build-log`){let color=`gray`;switch(message.metadata.level){case`success`:color=`green`;break;case`info`:color=`gray`;break;case`error`:color=`red`;break}prefix=(0,import_jsx_runtime.jsx)(Text,{color,children:`⚙ `}),contentColor=`gray`,previousMessage?.metadata?.type===`build-log`&&(marginTop=0)}if(message.metadata?.type===`runtime-log`){let color=`white`;switch(message.metadata.level){case`log`:color=`white`;break;case`error`:color=`red`;break}prefix=(0,import_jsx_runtime.jsx)(Text,{color,children:`@ `}),previousMessage?.metadata?.type===`runtime-log`&&(marginTop=0)}message.metadata?.type===`webhook`&&(prefix=(0,import_jsx_runtime.jsx)(Text,{color:`blue`,children:`↩ `}),contentColor=`gray`,previousMessage?.metadata?.type===`webhook`&&(marginTop=0));let content=(0,import_jsx_runtime.jsx)(Box_default,{gap:1,flexDirection:`column`,width:maxWidth,children:message.parts.map((part,index)=>{if(part.type===`text`)return(0,import_jsx_runtime.jsx)(markdown_default,{id:message.id,maxWidth,children:part.text},index);if(part.type===`reasoning`)return(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`Reasoning: `,part.text]},index);if(isToolOrDynamicToolUIPart(part))return(0,import_jsx_runtime.jsx)(ToolCall,{part,maxWidth,streaming},index)}).filter(Boolean)});return(0,import_jsx_runtime.jsxs)(Box_default,{marginTop,flexDirection:`row`,children:[(0,import_jsx_runtime.jsx)(Box_default,{children:(0,import_jsx_runtime.jsx)(Text,{color:contentColor,children:prefix})}),content]})},Message=import_react.memo(MessageComponent,(prev,next)=>prev.maxWidth===next.maxWidth?!!(prev.nextMessage&&next.nextMessage&&prev.nextMessage.id===next.nextMessage.id):!1),AssistantWaitingPlaceholder=({maxWidth})=>(0,import_jsx_runtime.jsxs)(Box_default,{marginTop:1,flexDirection:`row`,children:[(0,import_jsx_runtime.jsx)(Box_default,{children:(0,import_jsx_runtime.jsx)(Text,{color:`white`,children:null})}),(0,import_jsx_runtime.jsx)(Box_default,{width:maxWidth,children:(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[(0,import_jsx_runtime.jsx)(build_default,{}),` Waiting for response...`]})})]}),ToolCall=({part,maxWidth,streaming})=>{let name$2=getToolOrDynamicToolName(part),input=(0,import_react.useMemo)(()=>{let labels={};return typeof part.input!=`object`||part.input===null||Object.entries(part.input).forEach(([key,value])=>{labels[key]=JSON.stringify(value)}),labels},[part]),state=(0,import_react.useMemo)(()=>{switch(part.state){case`input-available`:case`input-streaming`:return streaming?`streaming`:`error`;case`output-available`:return isToolApprovalOutput(part.output)&&part.output.outcome===`pending`?`pending-approval`:`done`;case`output-error`:return`error`}},[part,streaming]),output=(0,import_react.useMemo)(()=>{if(isToolApprovalOutput(part.output))return{state:part.output.outcome};if(!part.output)return;if(typeof part.output==`string`)return part.output;let labels={};return Array.isArray(part.output)?part.output.forEach((item,index)=>{labels[`${index}`]=JSON.stringify(item)}):typeof part.output==`object`&&Object.entries(part.output).forEach(([key,value])=>{labels[key]=JSON.stringify(value)}),labels},[part,state]),error$22=(0,import_react.useMemo)(()=>{if(part.state===`output-error`)return part.errorText},[part]),icon=(0,import_react.useMemo)(()=>{switch(state){case`done`:case`error`:return`⚒`;case`pending-approval`:return`⧗`}return(0,import_jsx_runtime.jsx)(build_default,{type:`dots`})},[state]);return(0,import_jsx_runtime.jsxs)(Box_default,{flexDirection:`column`,children:[(0,import_jsx_runtime.jsxs)(Box_default,{gap:1,children:[(0,import_jsx_runtime.jsx)(Text,{color:state===`error`?`red`:`gray`,bold:!0,children:icon}),(0,import_jsx_runtime.jsx)(Text,{children:name$2})]}),(0,import_jsx_runtime.jsxs)(Box_default,{marginLeft:2,flexDirection:`column`,overflowX:`hidden`,width:maxWidth?maxWidth-4:void 0,gap:0,children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,bold:!0,children:`Input:`}),Object.entries(input).map(([key,value])=>(0,import_jsx_runtime.jsxs)(Box_default,{marginLeft:2,children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:key}),(0,import_jsx_runtime.jsx)(Text,{color:`blackBright`,children:`=`}),(0,import_jsx_runtime.jsx)(Box_default,{width:maxWidth?maxWidth-6-1-2-key.length:void 0,children:(0,import_jsx_runtime.jsx)(Text,{wrap:`truncate-middle`,children:value})})]},key)),output&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,bold:!0,children:`Output:`}),typeof output==`string`?(0,import_jsx_runtime.jsx)(Box_default,{marginLeft:2,children:(0,import_jsx_runtime.jsx)(Text,{children:output})}):(0,import_jsx_runtime.jsx)(Box_default,{flexDirection:`column`,children:Object.entries(output).map(([key,value])=>(0,import_jsx_runtime.jsxs)(Box_default,{marginLeft:2,children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:key}),(0,import_jsx_runtime.jsx)(Text,{color:`blackBright`,children:`=`}),(0,import_jsx_runtime.jsx)(Box_default,{width:maxWidth?maxWidth-6-1-key.length:void 0,children:(0,import_jsx_runtime.jsx)(Text,{wrap:`truncate-middle`,children:value})})]},key))})]}),error$22&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,bold:!0,children:`Error:`}),(0,import_jsx_runtime.jsx)(Text,{color:`red`,children:error$22})]})]})]})};async function dev(directory){directory||(directory=process.cwd());let exitWithDump=error$22=>{writeFileSync$1(`error.dump`,inspect$1(error$22,{depth:null})),process.exit(1)};process.addListener(`uncaughtException`,error$22=>{exitWithDump(error$22)}),process.addListener(`unhandledRejection`,error$22=>{exitWithDump(error$22)});try{await startDev({directory})}catch(err){console.error(err),process.exit(1)}finally{process.exit(0)}}export{dev as default};
|
|
1668
|
+
`);for(let textLine of textLines){let words$1=textLine.split(` `),currentLine=``;for(let word of words$1){let prospectiveLine=currentLine?`${currentLine} ${word}`:word,prospectiveWidth=stringWidth(prospectiveLine);if(prospectiveWidth>inputWidth){currentLine&&additionalLines$1.push(currentLine);let wordToProcess=word;for(;stringWidth(wordToProcess)>inputWidth;){let part=``,wordCP=toCodePoints(wordToProcess),partWidth=0,splitIndex=0;for(let i$4=0;i$4<wordCP.length;i$4++){let char=wordCP[i$4],charWidth=stringWidth(char);if(partWidth+charWidth>inputWidth)break;part+=char,partWidth+=charWidth,splitIndex=i$4+1}additionalLines$1.push(part),wordToProcess=cpSlice(wordToProcess,splitIndex)}currentLine=wordToProcess}else currentLine=prospectiveLine}currentLine&&additionalLines$1.push(currentLine)}}return{inlineGhost:inlineGhost$1,additionalLines:additionalLines$1}},[completion.promptCompletion.text,buffer$1.text,buffer$1.lines,buffer$1.cursor,inputWidth]),{inlineGhost,additionalLines}=getGhostTextLines();return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsxs)(Box_default,{borderStyle:`round`,borderColor:shellModeActive?theme.status.warning:focus?theme.border.focused:theme.border.default,paddingX:1,children:[(0,import_jsx_runtime.jsx)(Text,{color:shellModeActive?theme.status.warning:theme.text.accent,children:shellModeActive?reverseSearchActive?(0,import_jsx_runtime.jsxs)(Text,{color:theme.text.link,"aria-label":`User: `,children:[`(r:)`,` `]}):`! `:`> `}),(0,import_jsx_runtime.jsx)(Box_default,{flexGrow:1,flexDirection:`column`,children:buffer$1.text.length===0&&placeholder?focus?(0,import_jsx_runtime.jsxs)(Text,{children:[source_default.inverse(placeholder.slice(0,1)),(0,import_jsx_runtime.jsx)(Text,{color:theme.text.secondary,children:placeholder.slice(1)})]}):(0,import_jsx_runtime.jsx)(Text,{color:theme.text.secondary,children:placeholder}):linesToRender.map((lineText,visualIdxInRenderedSet)=>{let tokens=parseInputForHighlighting(lineText,visualIdxInRenderedSet),cursorVisualRow=cursorVisualRowAbsolute-scrollVisualRow,isOnCursorLine=focus&&visualIdxInRenderedSet===cursorVisualRow,renderedLine=[],charCount=0;tokens.forEach((token$1,tokenIdx)=>{let display=token$1.text;if(isOnCursorLine){let relativeVisualColForHighlight=cursorVisualColAbsolute,tokenStart=charCount,tokenEnd=tokenStart+cpLen(token$1.text);if(relativeVisualColForHighlight>=tokenStart&&relativeVisualColForHighlight<tokenEnd){let charToHighlight=cpSlice(token$1.text,relativeVisualColForHighlight-tokenStart,relativeVisualColForHighlight-tokenStart+1),highlighted=source_default.inverse(charToHighlight);display=cpSlice(token$1.text,0,relativeVisualColForHighlight-tokenStart)+highlighted+cpSlice(token$1.text,relativeVisualColForHighlight-tokenStart+1)}charCount=tokenEnd}let color=token$1.type===`command`||token$1.type===`file`?theme.text.accent:theme.text.primary;renderedLine.push((0,import_jsx_runtime.jsx)(Text,{color,children:display},`token-${tokenIdx}`))});let currentLineGhost=isOnCursorLine?inlineGhost:``;isOnCursorLine&&cursorVisualColAbsolute===cpLen(lineText)&&(currentLineGhost||renderedLine.push((0,import_jsx_runtime.jsx)(Text,{children:source_default.inverse(` `)},`cursor-end-${cursorVisualColAbsolute}`)));let showCursorBeforeGhost=focus&&isOnCursorLine&&cursorVisualColAbsolute===cpLen(lineText)&¤tLineGhost;return(0,import_jsx_runtime.jsx)(Box_default,{height:1,children:(0,import_jsx_runtime.jsxs)(Text,{children:[renderedLine,showCursorBeforeGhost&&source_default.inverse(` `),currentLineGhost&&(0,import_jsx_runtime.jsx)(Text,{color:theme.text.secondary,children:currentLineGhost})]})},`line-${visualIdxInRenderedSet}`)}).concat(additionalLines.map((ghostLine,index)=>{let padding=Math.max(0,inputWidth-stringWidth(ghostLine));return(0,import_jsx_runtime.jsxs)(Text,{color:theme.text.secondary,children:[ghostLine,` `.repeat(padding)]},`ghost-line-${index}`)}))})]}),completion.showSuggestions&&(0,import_jsx_runtime.jsx)(Box_default,{paddingRight:2,children:(0,import_jsx_runtime.jsx)(SuggestionsDisplay,{suggestions:completion.suggestions,activeIndex:completion.activeSuggestionIndex,isLoading:completion.isLoadingSuggestions,width:suggestionsWidth,scrollOffset:completion.visibleStartIndex,userInput:buffer$1.text})}),reverseSearchActive&&(0,import_jsx_runtime.jsx)(Box_default,{paddingRight:2,children:(0,import_jsx_runtime.jsx)(SuggestionsDisplay,{suggestions:reverseSearchCompletion.suggestions,activeIndex:reverseSearchCompletion.activeSuggestionIndex,isLoading:reverseSearchCompletion.isLoadingSuggestions,width:suggestionsWidth,scrollOffset:reverseSearchCompletion.visibleStartIndex,userInput:buffer$1.text})})]})};function createMinimalConfig(){return new Config({sessionId:`blink`,targetDir:process.cwd(),cwd:process.cwd(),debugMode:!1,model:`gemini-1.5-flash`,telemetry:{enabled:!1}})}const convertToCommands=slashCommands=>slashCommands.map(cmd=>({name:cmd.name,altNames:cmd.altNames,description:cmd.description,kind:`built-in`,completion:async(context,partialArg)=>cmd.completion?.(partialArg)??[],subCommands:cmd.subcommands?convertToCommands(cmd.subcommands):void 0}));function TextInput({onSubmit,placeholder,slashCommands}){let config=(0,import_react.useMemo)(()=>createMinimalConfig(),[]),[userMessages,setUserMessages]=(0,import_react.useState)([]),{stdout:stdout$1}=use_stdout_default(),buffer$1=useTextBuffer({viewport:{width:stdout$1.columns,height:Math.min(stdout$1.rows,15)},isValidPath:filePath=>fs$1.existsSync(filePath)});return(0,import_react.useMemo)(()=>slashCommands?.map(s$3=>s$3.name)??[],[slashCommands]),(0,import_jsx_runtime.jsx)(KeypressProvider,{kittyProtocolEnabled:!0,config,children:(0,import_jsx_runtime.jsx)(Box_default,{flexDirection:`column`,children:(0,import_jsx_runtime.jsx)(InputPrompt,{buffer:buffer$1,onSubmit:value=>{let args=value.trim().split(` `),first$1=args[0];if(first$1&&first$1.startsWith(`/`)){let commandName=first$1.slice(1),commandIndex=slashCommands?.findIndex(c$3=>c$3.name===commandName||(c$3.altNames?c$3.altNames.includes(commandName):!1))??-1;if(commandIndex!==-1&&slashCommands){let root$4=slashCommands[commandIndex],rest=args.slice(1),execute=(cmd,remaining)=>{if(remaining.length>0&&cmd.subcommands&&cmd.subcommands.length>0){let subName=remaining[0],next=cmd.subcommands.find(sc=>sc.name===subName||(sc.altNames?sc.altNames.includes(subName):!1));if(next)return execute(next,remaining.slice(1))}return cmd.action(remaining.join(` `))};return execute(root$4,rest)}}setUserMessages(prev=>[value,...prev]),onSubmit(value)},placeholder,userMessages,onClearScreen:()=>{},config,slashCommands:slashCommands?convertToCommands(slashCommands):[],commandContext:{services:{config,settings:{},git:void 0,logger:console},ui:{addItem:()=>{},clear:()=>{},setDebugMessage:()=>{},pendingItem:null,setPendingItem:()=>{},loadHistory:()=>{},toggleCorgiMode:()=>{},toggleVimEnabled:async()=>!1,setGeminiMdFileCount:()=>{},reloadCommands:()=>{}},session:{stats:{},sessionShellAllowlist:new Set}},inputWidth:stdout$1.columns,suggestionsWidth:stdout$1.columns,shellModeActive:!1,setShellModeActive:()=>{}})})})}var text_input_default=TextInput;function useAgent(options$1){let[agent,setAgent]=(0,import_react.useState)(void 0),[logs$1,setLogs]=(0,import_react.useState)([]),[error$22,setError]=(0,import_react.useState)(void 0),[buildResult,setBuildResult]=(0,import_react.useState)(options$1.buildResult),[env$4,setEnv]=(0,import_react.useState)(options$1.env),[apiServerUrl,setApiServerUrl]=(0,import_react.useState)(options$1.apiServerUrl),[capabilities,setCapabilities]=(0,import_react.useState)(void 0);return(0,import_react.useEffect)(()=>{setEnv(options$1.env),setBuildResult(options$1.buildResult),setApiServerUrl(options$1.apiServerUrl)},[options$1.env,options$1.buildResult,options$1.apiServerUrl]),(0,import_react.useEffect)(()=>{if(!buildResult||`error`in buildResult){setAgent(void 0),setLogs([]),setError(void 0);return}let controller=new AbortController;return(async()=>{let port$1=await getRandomPort(),proc$1=spawn$1(`node`,[buildResult.entry],{stdio:`pipe`,env:{...process.env,...env$4,[APIServerURLEnvironmentVariable]:apiServerUrl,PORT:port$1.toString(),HOST:`127.0.0.1`}});controller.signal.addEventListener(`abort`,()=>{proc$1.kill()});let ready=!1;proc$1.stdout.on(`data`,data$2=>{let msg=Buffer.from(data$2).toString(`utf-8`).trim();!ready&&msg.startsWith(`Agent server listening on`)||setLogs(prev=>[...prev,{level:`log`,message:msg}])}),proc$1.stderr.on(`data`,data$2=>{setLogs(prev=>[...prev,{level:`error`,message:Buffer.from(data$2).toString(`utf-8`).trim()}])}),proc$1.on(`exit`,()=>{controller.abort()});let client$1=new Client$1({baseUrl:`http://127.0.0.1:${port$1}`});for(;!controller.signal.aborted;){try{await client$1.health();break}catch(err){}await new Promise(resolve$9=>setTimeout(resolve$9,100))}if(controller.signal.aborted)return;ready=!0;let capabilities$1=await client$1.capabilities();setCapabilities(capabilities$1),setAgent(client$1)})().catch(err=>{controller.signal.aborted||setError(err)}),()=>controller.abort()},[buildResult,env$4,apiServerUrl]),(0,import_react.useMemo)(()=>({agent,logs:logs$1,error:error$22,capabilities}),[agent,logs$1,error$22,capabilities])}async function getRandomPort(){let server=createServer();return new Promise((resolve$9,reject)=>{server.listen(0,()=>{let port$1=server.address().port;resolve$9(port$1)}).on(`error`,err=>{reject(err)})}).finally(()=>{server.close()})}function useBundler(directory){let config=(0,import_react.useMemo)(()=>resolveConfig(directory),[directory]),[error$22,setError]=(0,import_react.useState)(void 0),[result,setResult]=(0,import_react.useState)(void 0),[status,setStatus]=(0,import_react.useState)(`building`);return(0,import_react.useEffect)(()=>{let controller=new AbortController;return config.build({cwd:directory,entry:config.entry,outdir:config.outdir,watch:!0,dev:!0,signal:controller.signal,onStart:()=>{setStatus(`building`),setError(void 0),setResult(void 0)},onResult:result$1=>{`error`in result$1?(setError(result$1.error),setStatus(`error`)):(setResult(result$1),setStatus(`success`))}}).catch(err=>{console.log(`error`,err),setStatus(`error`),setError(err)}),()=>{controller.abort()}},[directory]),(0,import_react.useMemo)(()=>({error:error$22,status,result,entry:config.entry,outdir:config.outdir}),[error$22,status,result,config.entry,config.outdir])}function useDevhook(options$1){let onRequestRef=(0,import_react.useRef)(options$1.onRequest);(0,import_react.useEffect)(()=>{onRequestRef.current=options$1.onRequest},[options$1.onRequest]);let id=(0,import_react.useRef)(options$1.id??crypto.randomUUID()),[status,setStatus]=(0,import_react.useState)(`disconnected`);return(0,import_react.useEffect)(()=>{if(options$1.disabled){setStatus(`disconnected`);return}let client$1=new Client,listener=client$1.devhook.listen({id:id.current,onRequest:async request$2=>options$1.onRequest(request$2),onConnect:()=>{setStatus(`connected`)},onDisconnect:()=>{setStatus(`disconnected`)},onError:error$22=>{setStatus(`error`)}});return()=>{listener.dispose()}},[options$1.disabled]),{id:id.current,status}}var import_main=__toESM(require_main$1(),1);function useDotenv(directory,name$2=`.env.local`){let[env$4,setEnv]=(0,import_react.useState)({});return(0,import_react.useEffect)(()=>{let watcher,readEnvFile=path$32=>{try{setEnv((0,import_main.parse)(readFileSync$1(path$32,`utf-8`)))}catch(error$22){console.error(error$22),setEnv({})}};return findNearestEntry(directory,name$2).then(nearest=>{if(!nearest){setEnv({});return}readEnvFile(nearest),watcher=watch(nearest,{persistent:!1},()=>{readEnvFile(nearest)})}),()=>{watcher&&watcher.close()}},[directory,name$2]),env$4}function useServerChat(server,id){let[chat$2,setChat]=(0,import_react.useState)(()=>server.upsertChat(id));return(0,import_react.useEffect)(()=>{setChat(server.upsertChat(id));let disposable=server.onChatChanged(chat$3=>{if(chat$3.id===id)return setChat(chat$3)});return()=>disposable.dispose()},[server,id]),chat$2}function useTerminalSize(){let{stdout:stdout$1}=use_stdout_default(),[size,setSize]=(0,import_react.useState)({columns:process.stdout.columns,rows:process.stdout.rows});return(0,import_react.useEffect)(()=>{if(!stdout$1||!stdout$1.isTTY)return;let handleResize=()=>{setSize({columns:stdout$1.columns,rows:stdout$1.rows})};return process.stdout.on(`resize`,handleResize),()=>{process.stdout.off(`resize`,handleResize)}},[stdout$1]),{columns:size.columns,rows:size.rows?size.rows-1:void 0}}async function start(element){let instance$1=render_default(element,{exitOnCtrlC:!1});await instance$1.waitUntilExit()}function startDev({directory}){return start((0,import_jsx_runtime.jsx)(Root,{directory}))}const Root=({directory})=>{let size=useTerminalSize(),{error:buildError,status:buildStatus,result:buildResult,entry:entrypoint}=useBundler(directory),dotenv=useDotenv(directory),env$4=(0,import_react.useMemo)(()=>{let blinkToken=getAuthToken();return blinkToken?{...dotenv,BLINK_TOKEN:blinkToken}:dotenv},[dotenv]),server=(0,import_react.useMemo)(()=>createDevServer({port:0,dataDirectory:join$1(directory,`.blink`,`data`),sendMessages:async(request$2,signal)=>{if(!currentAgentRef.current)throw Error(`The agent has not been compiled yet.`);if(!currentChatIDRef.current)throw Error(`No chat selected.`);let messages$1=request$2.messages;return await currentAgentRef.current.sendMessages({messages:messages$1.filter(m$2=>m$2.metadata?.ephemeral!==!0),chat:{id:currentChatIDRef.current}},{signal})},serializeChat:chat$3=>({...chat$3,messages:chat$3.messages.filter(m$2=>m$2.metadata?.ephemeral!==!0)})}),[]),{agent,logs:logs$1,error:agentError,capabilities}=useAgent({buildResult,env:env$4,apiServerUrl:server.url}),currentAgentRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{agent?currentAgentRef.current=agent:server.stopChat(chat$2.id)},[agent]);let devhookID=(0,import_react.useMemo)(()=>{let storagePath=join$1(directory,`.blink`,`devhook.txt`);if(mkdirSync(dirname$1(storagePath),{recursive:!0}),existsSync$1(storagePath))return readFileSync$1(storagePath,`utf-8`);let id=crypto.randomUUID();return writeFileSync$1(storagePath,id),id},[]),devhook=useDevhook({id:devhookID,disabled:!capabilities?.requests,onRequest:async request$2=>{if(!currentAgentRef.current)throw Error(`No agent`);let requestURL=new URL(request$2.url),agentURL=new URL(currentAgentRef.current.baseUrl);agentURL.pathname=requestURL.pathname,agentURL.search=requestURL.search;let response=await fetch(agentURL.toString(),request$2);return server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`webhook`,ephemeral:!0},parts:[{type:`text`,text:`method=${request$2.method} status=${response.status}`}]}),response}}),[chatID,setChatID]=(0,import_react.useState)(`default`),currentChatIDRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{currentChatIDRef.current=chatID},[chatID]);let chat$2=useServerChat(server,chatID),[chatIDs,setChatIDs]=(0,import_react.useState)(()=>server.listChats()),currentChatIDsRef=(0,import_react.useRef)(chatIDs);(0,import_react.useEffect)(()=>{currentChatIDsRef.current=chatIDs},[chatIDs]),(0,import_react.useEffect)(()=>{let disposable=server.onChatChanged(chat$3=>{!currentChatIDsRef.current.includes(chat$3.id)&¤tChatIDRef.current&&(setChatID(chat$3.id),server.upsertChatMessage(chat$3.id,{role:`assistant`,metadata:{type:`chat-created`,ephemeral:!0},parts:[{type:`text`,text:`This chat has just been created: ${chat$3.id}. We automatically switched you to it!`}]})),setChatIDs(prev=>{let newChats=[...prev];return newChats.includes(chat$3.id)?prev:(newChats.push(chat$3.id),newChats)})});return()=>{disposable.dispose()}},[server]);let{exit}=use_app_default(),[exitArmed,setExitArmed]=(0,import_react.useState)(!1),exitTimerRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>()=>{exitTimerRef.current&&clearTimeout(exitTimerRef.current)},[]),use_input_default((input,key)=>{if(key.ctrl&&input.toLowerCase()===`c`){if(exitArmed){exit();return}setExitArmed(!0),exitTimerRef.current&&clearTimeout(exitTimerRef.current),exitTimerRef.current=setTimeout(()=>setExitArmed(!1),2e3)}}),(0,import_react.useEffect)(()=>{if(buildError||agentError||chat$2.error){let errors=[];buildError&&errors.push({type:`text`,text:`${buildError.message}`+(buildError.file?` (${buildError.file})`:``)}),agentError&&errors.push({type:`text`,text:agentError.message}),chat$2.error&&errors.push({type:`text`,text:`Chat error: ${chat$2.error.message}, ${chat$2.error.stack}`}),server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`error`,ephemeral:!0},parts:errors});return}if(buildStatus===`building`||!agent){server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`info`,ephemeral:!0},parts:[{type:`text`,text:`Compiling...`}]});return}if(buildStatus===`success`&&agent){server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`success`,ephemeral:!0},parts:[{type:`text`,text:`Compiled in 100ms`}]});return}},[buildError,chat$2.error,agentError,buildStatus,agent]);let lastReportedKeys=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{let keys=Object.keys(env$4);if(keys.length===lastReportedKeys.current||lastReportedKeys.current===void 0)return;lastReportedKeys.current=keys.length;let keysText=keys.map(key=>source_default.dim(key)).join(`, `);keysText.length===0&&(keysText=source_default.dim(`(none)`));let text=`Loaded .env.local: `+keysText;server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`info`,ephemeral:!0},parts:[{type:`text`,text}]})},[env$4]),(0,import_react.useEffect)(()=>{!capabilities?.requests||devhook.status!==`connected`||server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`build-log`,level:`info`,ephemeral:!0},parts:[{type:`text`,text:`Send webhooks from anywhere: https://${devhook.id}.dev.blink.host`}]})},[capabilities?.requests,devhook.status]);let lastLogsLength=(0,import_react.useRef)(0);(0,import_react.useEffect)(()=>{if(logs$1.length===lastLogsLength.current)return;let currentLength=lastLogsLength.current;for(let log$9 of logs$1.slice(currentLength))server.upsertChatMessage(chat$2.id,{role:`assistant`,metadata:{type:`runtime-log`,level:log$9.level,ephemeral:!0},parts:[{type:`text`,text:log$9.message}]});lastLogsLength.current=logs$1.length},[logs$1]);let keymaps=(0,import_react.useMemo)(()=>({"⏎":`send`,"Ctrl+R":`reset chat`,"Ctrl+C":`quit`,"[Escape]":`stop streaming`}),[]),keybindSuggestion=(0,import_react.useMemo)(()=>{if(exitArmed)return`Ctrl+C again to quit`;if(chat$2.status===`streaming`)return`Press [Escape] to stop the agent!`},[exitArmed,chat$2.status]),needsApproval=(0,import_react.useMemo)(()=>{let lastMessage=chat$2.messages.findLast(message=>!(message.role!==`assistant`||message.metadata&&message.metadata.ephemeral));if(!lastMessage||lastMessage.role!==`assistant`)return;let parts=lastMessage.parts.filter(isToolOrDynamicToolUIPart);if(parts.length===0)return;let should=parts.some(part=>isToolApprovalOutput(part.output)&&part.output.outcome===`pending`);if(should)return lastMessage},[chat$2.messages]),{write:write$1}=use_stdout_default(),[epoch,setEpoch]=(0,import_react.useState)(0),resetTerminal=(0,import_react.useCallback)(()=>{write$1(`\x1Bc`),setEpoch(prev=>prev+1)},[write$1]),lastChatIDRef=(0,import_react.useRef)(void 0);(0,import_react.useEffect)(()=>{lastChatIDRef.current!==chat$2.id&&(lastChatIDRef.current&&resetTerminal(),lastChatIDRef.current=chat$2.id)},[chat$2.id,resetTerminal]);let initialSizeRef=(0,import_react.useRef)(size);(0,import_react.useEffect)(()=>{(initialSizeRef.current.columns!==size.columns||initialSizeRef.current.rows!==size.rows)&&(resetTerminal(),initialSizeRef.current=size)},[size.columns,size.rows]);let lastOptions=(0,import_react.useMemo)(()=>{let options$1=lastUIOptions(chat$2.messages);if(options$1)return options$1},[chat$2.messages]),[selectedOptions,setSelectedOptions]=(0,import_react.useState)(lastOptions),[optionsSchema,setOptionsSchema]=(0,import_react.useState)(void 0),activeOptions=(0,import_react.useMemo)(()=>{if(!optionsSchema)return;let defaultOptions$4=Object.fromEntries(Object.entries(optionsSchema).map(([key,value])=>[key,value.defaultValue]));return{...defaultOptions$4,...lastOptions,...selectedOptions}},[selectedOptions,lastOptions,optionsSchema]),validActiveOptions=(0,import_react.useMemo)(()=>{if(activeOptions)return Object.fromEntries(Object.entries(activeOptions).filter(([key,value])=>optionsSchema?.[key]?.values.some(v$1=>v$1.id===value)))},[activeOptions,optionsSchema]);(0,import_react.useEffect)(()=>{if(!capabilities?.options||!agent){setOptionsSchema(void 0);return}let controller=new AbortController;agent.provideUIOptions({selectedOptions:activeOptions},{signal:controller.signal}).then(options$1=>{setOptionsSchema(prev=>JSON.stringify(prev)===JSON.stringify(options$1)?prev:options$1)}).catch(err=>{}).finally(()=>{controller.abort()})},[capabilities?.options,agent,activeOptions]);let optionCommand=(0,import_react.useMemo)(()=>{if(optionsSchema)return{name:`option`,description:`Adjust your agent's options.`,action:()=>{},completion:async()=>Object.keys(optionsSchema),subcommands:Object.entries(optionsSchema).map(([key,value])=>({name:key,description:value.label,action:args=>{setSelectedOptions(prev=>({...prev,[key]:value.values.find(v$1=>v$1.label===args)?.id}))},completion:async partialArg=>value.values.map(v$1=>v$1.label)}))}},[optionsSchema]);return(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Keybinds,{resetChat:()=>{server.resetChat(chat$2.id),resetTerminal()},stopStreaming:()=>{server.stopChat(chat$2.id)}}),chat$2.error?(0,import_jsx_runtime.jsx)(Box_default,{marginTop:1,children:(0,import_jsx_runtime.jsx)(Text,{color:`red`,children:chat$2.error.message})}):null,(0,import_jsx_runtime.jsxs)(Box_default,{flexDirection:`column`,children:[(0,import_jsx_runtime.jsx)(Static,{items:[{},...chat$2.messages],children:(message,index)=>index===0?(0,import_jsx_runtime.jsxs)(Box_default,{flexDirection:`column`,children:[(0,import_jsx_runtime.jsxs)(Box_default,{children:[(0,import_jsx_runtime.jsx)(Text,{bold:!0,children:`blink■`}),(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:` agent development mode`})]}),(0,import_jsx_runtime.jsxs)(Box_default,{marginTop:1,flexDirection:`column`,children:[(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`Edit `,entrypoint,` to hot-reload your agent.`]}),(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`Run `,(0,import_jsx_runtime.jsx)(Text,{color:`blue`,children:`blink deploy`}),` to use your agent in the cloud.`]})]})]},`banner`):(0,import_jsx_runtime.jsx)(Message,{message,previousMessage:index>0?chat$2.messages.at(index-2):void 0,nextMessage:index<chat$2.messages.length-1?chat$2.messages.at(index+1):void 0,maxWidth:size.columns-2},message.id)},`messages-${chat$2.id}-${epoch}`),chat$2.streamingMessage?(0,import_jsx_runtime.jsx)(Message,{message:chat$2.streamingMessage,nextMessage:void 0,previousMessage:chat$2.messages.length>0?chat$2.messages.at(chat$2.messages.length-1):void 0,streaming:!0,maxWidth:size.columns-2},chat$2.streamingMessage.id):null,chat$2.status===`streaming`&&!chat$2.streamingMessage?(0,import_jsx_runtime.jsx)(AssistantWaitingPlaceholder,{maxWidth:size.columns-2}):null]}),(0,import_jsx_runtime.jsx)(Box_default,{flexDirection:`column`,marginTop:1,children:needsApproval?(0,import_jsx_runtime.jsx)(ApprovalInput,{onConfirm:approved=>{server.updateChatMessage(chat$2.id,{...needsApproval,parts:needsApproval.parts.map(part=>isToolUIPart(part)&&isToolApprovalOutput(part.output)?{...part,state:`output-available`,output:{...part.output,outcome:approved?`approved`:`rejected`},errorText:void 0}:part)}),server.runtime.chat.sendMessages(chat$2.id,{messages:[],behavior:`interrupt`})},onCancel:()=>{}}):(0,import_jsx_runtime.jsx)(text_input_default,{slashCommands:[{name:`reset`,altNames:[`clear`],description:`Reset the chat`,action:()=>{server.resetChat(chat$2.id)}},{name:`switch`,description:`Switch to a different chat`,action:args=>{setChatID(args)},completion:async partialArg=>{let chats=server.listChats();return chats.map(chat$3=>chat$3)}},{name:`new`,description:`Create a new chat`,action:args=>{setChatID(args)}},...optionCommand?[optionCommand]:[]],onSubmit:value=>(server.runtime.chat.sendMessages(chat$2.id,{messages:[{role:`user`,parts:[{type:`text`,text:value}]}],behavior:`interrupt`}),!0)})}),(0,import_jsx_runtime.jsx)(Box_default,{children:keybindSuggestion?(0,import_jsx_runtime.jsx)(Text,{color:`yellow`,children:` `+keybindSuggestion}):(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Box_default,{marginLeft:2,children:(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`chat: `,(0,import_jsx_runtime.jsx)(Text,{children:chat$2.id})]})}),(0,import_jsx_runtime.jsx)(Spacer,{}),(0,import_jsx_runtime.jsx)(Box_default,{gap:3,marginRight:2,children:Object.entries(keymaps).map(([key,value])=>(0,import_jsx_runtime.jsx)(Text,{children:source_default.gray.dim(key+` `+value)},key))})]})}),optionsSchema&&validActiveOptions?(0,import_jsx_runtime.jsxs)(Box_default,{marginLeft:2,gap:3,children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:`options:`}),Object.entries(validActiveOptions).map(([key,value])=>{let option$1=optionsSchema[key];return option$1?(0,import_jsx_runtime.jsxs)(Box_default,{flexDirection:`row`,children:[(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[option$1.label,`=`]}),(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:option$1.values.find(v$1=>v$1.id===value)?.label})]},key):null})]}):null]})},ApprovalInput=({onConfirm,onCancel})=>{let[selected,setSelected]=(0,import_react.useState)(`yes`),handleConfirm=import_react.useCallback(approved=>{onConfirm(approved)},[onConfirm]),handleCancel=import_react.useCallback(()=>{onCancel()},[onCancel]);return use_input_default((input,key)=>{let lower=input.toLowerCase();if(key.escape){handleCancel();return}if(lower===`y`){handleConfirm(!0);return}if(lower===`n`){handleConfirm(!1);return}if(key.leftArrow||key.rightArrow||key.tab){setSelected(prev=>prev===`yes`?`no`:`yes`);return}key.return&&handleConfirm(selected===`yes`)}),(0,import_jsx_runtime.jsxs)(Box_default,{gap:2,flexDirection:`row`,children:[(0,import_jsx_runtime.jsx)(Text,{children:`Approve?`}),(0,import_jsx_runtime.jsx)(Box_default,{children:(0,import_jsx_runtime.jsxs)(Text,{children:[`[`,(0,import_jsx_runtime.jsx)(Text,{color:selected===`yes`?`green`:`gray`,bold:selected===`yes`,children:`Yes`}),`/`,(0,import_jsx_runtime.jsx)(Text,{color:selected===`no`?`red`:`gray`,bold:selected===`no`,children:`No`}),`]`]})}),(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:`(y/n, ←/→ then ⏎)`})]})},Keybinds=({resetChat,stopStreaming})=>(use_input_default((input,key)=>{key.ctrl&&input===`r`&&resetChat(),key.escape&&stopStreaming()}),null),MessageComponent=({message,previousMessage,maxWidth,streaming})=>{let prefix,contentColor,marginTop=1;switch(message.role){case`system`:prefix=(0,import_jsx_runtime.jsx)(Text,{children:`t `}),contentColor=`gray`;break;case`user`:prefix=(0,import_jsx_runtime.jsx)(Text,{color:`magenta`,bold:!0,children:`▎`}),contentColor=`gray`;break;case`assistant`:prefix=(0,import_jsx_runtime.jsx)(Text,{color:`white`,children:`> `}),contentColor=`white`;break}if(message.metadata?.type===`build-log`){let color=`gray`;switch(message.metadata.level){case`success`:color=`green`;break;case`info`:color=`gray`;break;case`error`:color=`red`;break}prefix=(0,import_jsx_runtime.jsx)(Text,{color,children:`⚙ `}),contentColor=`gray`,previousMessage?.metadata?.type===`build-log`&&(marginTop=0)}if(message.metadata?.type===`runtime-log`){let color=`white`;switch(message.metadata.level){case`log`:color=`white`;break;case`error`:color=`red`;break}prefix=(0,import_jsx_runtime.jsx)(Text,{color,children:`@ `}),previousMessage?.metadata?.type===`runtime-log`&&(marginTop=0)}message.metadata?.type===`webhook`&&(prefix=(0,import_jsx_runtime.jsx)(Text,{color:`blue`,children:`↩ `}),contentColor=`gray`,previousMessage?.metadata?.type===`webhook`&&(marginTop=0));let content=(0,import_jsx_runtime.jsx)(Box_default,{gap:1,flexDirection:`column`,width:maxWidth,children:message.parts.map((part,index)=>{if(part.type===`text`)return(0,import_jsx_runtime.jsx)(markdown_default,{id:message.id,maxWidth,children:part.text},index);if(part.type===`reasoning`)return(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[`Reasoning: `,part.text]},index);if(isToolOrDynamicToolUIPart(part))return(0,import_jsx_runtime.jsx)(ToolCall,{part,maxWidth,streaming},index)}).filter(Boolean)});return(0,import_jsx_runtime.jsxs)(Box_default,{marginTop,flexDirection:`row`,children:[(0,import_jsx_runtime.jsx)(Box_default,{children:(0,import_jsx_runtime.jsx)(Text,{color:contentColor,children:prefix})}),content]})},Message=import_react.memo(MessageComponent,(prev,next)=>prev.maxWidth===next.maxWidth?!!(prev.nextMessage&&next.nextMessage&&prev.nextMessage.id===next.nextMessage.id):!1),AssistantWaitingPlaceholder=({maxWidth})=>(0,import_jsx_runtime.jsxs)(Box_default,{marginTop:1,flexDirection:`row`,children:[(0,import_jsx_runtime.jsx)(Box_default,{children:(0,import_jsx_runtime.jsx)(Text,{color:`white`,children:null})}),(0,import_jsx_runtime.jsx)(Box_default,{width:maxWidth,children:(0,import_jsx_runtime.jsxs)(Text,{color:`gray`,children:[(0,import_jsx_runtime.jsx)(build_default,{}),` Waiting for response...`]})})]}),ToolCall=({part,maxWidth,streaming})=>{let name$2=getToolOrDynamicToolName(part),input=(0,import_react.useMemo)(()=>{let labels={};return typeof part.input!=`object`||part.input===null||Object.entries(part.input).forEach(([key,value])=>{labels[key]=JSON.stringify(value)}),labels},[part]),state=(0,import_react.useMemo)(()=>{switch(part.state){case`input-available`:case`input-streaming`:return streaming?`streaming`:`error`;case`output-available`:return isToolApprovalOutput(part.output)&&part.output.outcome===`pending`?`pending-approval`:`done`;case`output-error`:return`error`}},[part,streaming]),output=(0,import_react.useMemo)(()=>{if(isToolApprovalOutput(part.output))return{state:part.output.outcome};if(!part.output)return;if(typeof part.output==`string`)return part.output;let labels={};return Array.isArray(part.output)?part.output.forEach((item,index)=>{labels[`${index}`]=JSON.stringify(item)}):typeof part.output==`object`&&Object.entries(part.output).forEach(([key,value])=>{labels[key]=JSON.stringify(value)}),labels},[part,state]),error$22=(0,import_react.useMemo)(()=>{if(part.state===`output-error`)return part.errorText},[part]),icon=(0,import_react.useMemo)(()=>{switch(state){case`done`:case`error`:return`⚒`;case`pending-approval`:return`⧗`}return(0,import_jsx_runtime.jsx)(build_default,{type:`dots`})},[state]);return(0,import_jsx_runtime.jsxs)(Box_default,{flexDirection:`column`,children:[(0,import_jsx_runtime.jsxs)(Box_default,{gap:1,children:[(0,import_jsx_runtime.jsx)(Text,{color:state===`error`?`red`:`gray`,bold:!0,children:icon}),(0,import_jsx_runtime.jsx)(Text,{children:name$2})]}),(0,import_jsx_runtime.jsxs)(Box_default,{marginLeft:2,flexDirection:`column`,overflowX:`hidden`,width:maxWidth?maxWidth-4:void 0,gap:0,children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,bold:!0,children:`Input:`}),Object.entries(input).map(([key,value])=>(0,import_jsx_runtime.jsxs)(Box_default,{marginLeft:2,children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:key}),(0,import_jsx_runtime.jsx)(Text,{color:`blackBright`,children:`=`}),(0,import_jsx_runtime.jsx)(Box_default,{width:maxWidth?maxWidth-6-1-2-key.length:void 0,children:(0,import_jsx_runtime.jsx)(Text,{wrap:`truncate-middle`,children:value})})]},key)),output&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,bold:!0,children:`Output:`}),typeof output==`string`?(0,import_jsx_runtime.jsx)(Box_default,{marginLeft:2,children:(0,import_jsx_runtime.jsx)(Text,{children:output})}):(0,import_jsx_runtime.jsx)(Box_default,{flexDirection:`column`,children:Object.entries(output).map(([key,value])=>(0,import_jsx_runtime.jsxs)(Box_default,{marginLeft:2,children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,children:key}),(0,import_jsx_runtime.jsx)(Text,{color:`blackBright`,children:`=`}),(0,import_jsx_runtime.jsx)(Box_default,{width:maxWidth?maxWidth-6-1-key.length:void 0,children:(0,import_jsx_runtime.jsx)(Text,{wrap:`truncate-middle`,children:value})})]},key))})]}),error$22&&(0,import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment,{children:[(0,import_jsx_runtime.jsx)(Text,{color:`gray`,bold:!0,children:`Error:`}),(0,import_jsx_runtime.jsx)(Text,{color:`red`,children:error$22})]})]})]})};async function dev(directory){directory||(directory=process.cwd());let exitWithDump=error$22=>{writeFileSync$1(`error.dump`,inspect$1(error$22,{depth:null})),process.exit(1)};process.addListener(`uncaughtException`,error$22=>{exitWithDump(error$22)}),process.addListener(`unhandledRejection`,error$22=>{exitWithDump(error$22)});try{await startDev({directory})}catch(err){console.error(err),process.exit(1)}finally{process.exit(0)}}export{dev as default};
|