blink 0.1.56 → 0.1.58
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 +1 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.js +1 -1
- package/dist/cli/{dev-DEnRzFLe.js → dev-Duxv_J6v.js} +7 -1
- package/dist/cli/index.js +2 -2
- package/dist/http/api.cjs +1 -1
- package/dist/http/api.d.cts +21 -3
- package/dist/http/api.d.ts +21 -3
- package/dist/http/api.js +1 -1
- package/dist/http/index.cjs +1 -1
- package/dist/http/index.d.ts +2 -2
- package/dist/http/index.js +1 -1
- package/dist/http-BAfeJhFm.js +53 -0
- package/dist/http-DS8vmbQx.cjs +53 -0
- package/dist/{index-DxJfaHIB.d.ts → index-auvvMWNH.d.ts} +1 -1
- package/dist/test.d.ts +2 -2
- package/package.json +1 -1
- package/dist/cookie-C9-j7DLy.cjs +0 -1
- package/dist/cookie-vgkq7-5W.js +0 -1
- package/dist/http-DGkzwMDO.js +0 -53
- package/dist/http-DVkCunru.cjs +0 -53
- /package/dist/{index-BUiNoSbu.d.ts → index-tvf1rglX.d.ts} +0 -0
package/dist/api/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`../chunk-hhQzssFb.cjs`),t=require(`../http-DVkCunru.cjs`);require(`../cookie-C9-j7DLy.cjs`);let n=require(`util`);n=e.__toESM(n);let r=require(`zod/v4`);r=e.__toESM(r);let i=require(`zod/v3`);i=e.__toESM(i);let a=require(`http`);a=e.__toESM(a);function o(...e){return e.reduce((e,t)=>({...e,...t??{}}),{})}function s(e){return Object.fromEntries([...e.headers])}function c(e=globalThis){var t,n,r;return e.window?`runtime/browser`:(t=e.navigator)?.userAgent?`runtime/${e.navigator.userAgent.toLowerCase()}`:(r=(n=e.process)?.versions)?.node?`runtime/node.js/${e.process.version.substring(0)}`:e.EdgeRuntime?`runtime/vercel-edge`:`runtime/unknown`}function l(e){return Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null))}function u(e,...t){let n=l(e??{}),r=new Headers(n),i=r.get(`user-agent`)||``;return r.set(`user-agent`,[i,...t].filter(Boolean).join(` `)),Object.fromEntries(r)}var d=({prefix:e,size:n=16,alphabet:r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`,separator:i=`-`}={})=>{let a=()=>{let e=r.length,t=Array(n);for(let i=0;i<n;i++)t[i]=r[Math.random()*e|0];return t.join(``)};if(e==null)return a;if(r.includes(i))throw new t.InvalidArgumentError({argument:`separator`,message:`The separator "${i}" must not be part of the alphabet "${r}".`});return()=>`${e}${i}${a()}`},f=d();function p(e){return(e instanceof Error||e instanceof DOMException)&&(e.name===`AbortError`||e.name===`ResponseAborted`||e.name===`TimeoutError`)}var m=[`fetch failed`,`failed to fetch`];function h({error:e,url:n,requestBodyValues:r}){if(p(e))return e;if(e instanceof TypeError&&m.includes(e.message.toLowerCase())){let i=e.cause;if(i!=null)return new t.APICallError({message:`Cannot connect to API: ${i.message}`,cause:i,url:n,requestBodyValues:r,isRetryable:!0})}return e}var g=`3.0.10`,_=/"__proto__"\s*:/,v=/"constructor"\s*:/;function y(e){let t=JSON.parse(e);return typeof t!=`object`||!t||_.test(e)===!1&&v.test(e)===!1?t:b(t)}function b(e){let t=[e];for(;t.length;){let e=t;t=[];for(let n of e){if(Object.prototype.hasOwnProperty.call(n,`__proto__`)||Object.prototype.hasOwnProperty.call(n,`constructor`)&&Object.prototype.hasOwnProperty.call(n.constructor,`prototype`))throw SyntaxError(`Object contains forbidden prototype property`);for(let e in n){let r=n[e];r&&typeof r==`object`&&t.push(r)}}}return e}function x(e){let{stackTraceLimit:t}=Error;Error.stackTraceLimit=0;try{return y(e)}finally{Error.stackTraceLimit=t}}var S=Symbol.for(`vercel.ai.validator`);function C(e){return{[S]:!0,validate:e}}function w(e){return typeof e==`object`&&!!e&&S in e&&e[S]===!0&&`validate`in e}function T(e){return w(e)?e:E(e)}function E(e){return C(async n=>{let r=await e[`~standard`].validate(n);return r.issues==null?{success:!0,value:r.value}:{success:!1,error:new t.TypeValidationError({value:n,cause:r.issues})}})}async function D({value:e,schema:n}){let r=await O({value:e,schema:n});if(!r.success)throw t.TypeValidationError.wrap({value:e,cause:r.error});return r.value}async function O({value:e,schema:n}){let r=T(n);try{if(r.validate==null)return{success:!0,value:e,rawValue:e};let n=await r.validate(e);return n.success?{success:!0,value:n.value,rawValue:e}:{success:!1,error:t.TypeValidationError.wrap({value:e,cause:n.error}),rawValue:e}}catch(n){return{success:!1,error:t.TypeValidationError.wrap({value:e,cause:n}),rawValue:e}}}async function k({text:e,schema:n}){try{let t=x(e);return n==null?t:D({value:t,schema:n})}catch(n){throw t.JSONParseError.isInstance(n)||t.TypeValidationError.isInstance(n)?n:new t.JSONParseError({text:e,cause:n})}}async function A({text:e,schema:n}){try{let t=x(e);return n==null?{success:!0,value:t,rawValue:t}:await O({value:t,schema:n})}catch(n){return{success:!1,error:t.JSONParseError.isInstance(n)?n:new t.JSONParseError({text:e,cause:n}),rawValue:void 0}}}function j(e){try{return x(e),!0}catch{return!1}}function ee({stream:e,schema:n}){return e.pipeThrough(new TextDecoderStream).pipeThrough(new t.EventSourceParserStream).pipeThrough(new TransformStream({async transform({data:e},t){e!==`[DONE]`&&t.enqueue(await A({text:e,schema:n}))}}))}async function M({provider:e,providerOptions:n,schema:r}){if(n?.[e]==null)return;let i=await O({value:n[e],schema:r});if(!i.success)throw new t.InvalidArgumentError({argument:`providerOptions`,message:`invalid ${e} provider options`,cause:i.error});return i.value}var N=()=>globalThis.fetch,P=async({url:e,headers:t,body:n,failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o})=>F({url:e,headers:{"Content-Type":`application/json`,...t},body:{content:JSON.stringify(n),values:n},failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o}),F=async({url:e,headers:n={},body:r,successfulResponseHandler:i,failedResponseHandler:a,abortSignal:o,fetch:l=N()})=>{try{let d=await l(e,{method:`POST`,headers:u(n,`ai-sdk/provider-utils/${g}`,c()),body:r.content,signal:o}),f=s(d);if(!d.ok){let n;try{n=await a({response:d,url:e,requestBodyValues:r.values})}catch(n){throw p(n)||t.APICallError.isInstance(n)?n:new t.APICallError({message:`Failed to process error response`,cause:n,statusCode:d.status,url:e,responseHeaders:f,requestBodyValues:r.values})}throw n.value}try{return await i({response:d,url:e,requestBodyValues:r.values})}catch(n){throw n instanceof Error&&(p(n)||t.APICallError.isInstance(n))?n:new t.APICallError({message:`Failed to process successful response`,cause:n,statusCode:d.status,url:e,responseHeaders:f,requestBodyValues:r.values})}}catch(t){throw h({error:t,url:e,requestBodyValues:r.values})}},I=({errorSchema:e,errorToMessage:n,isRetryable:r})=>async({response:i,url:a,requestBodyValues:o})=>{let c=await i.text(),l=s(i);if(c.trim()===``)return{responseHeaders:l,value:new t.APICallError({message:i.statusText,url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:l,responseBody:c,isRetryable:r?.(i)})};try{let s=await k({text:c,schema:e});return{responseHeaders:l,value:new t.APICallError({message:n(s),url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:l,responseBody:c,data:s,isRetryable:r?.(i,s)})}}catch{return{responseHeaders:l,value:new t.APICallError({message:i.statusText,url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:l,responseBody:c,isRetryable:r?.(i)})}}},te=e=>async({response:n})=>{let r=s(n);if(n.body==null)throw new t.EmptyResponseBodyError({});return{responseHeaders:r,value:ee({stream:n.body,schema:e})}},L=e=>async({response:n,url:r,requestBodyValues:i})=>{let a=await n.text(),o=await A({text:a,schema:e}),c=s(n);if(!o.success)throw new t.APICallError({message:`Invalid JSON response`,cause:o.error,statusCode:n.status,responseHeaders:c,responseBody:a,url:r,requestBodyValues:i});return{responseHeaders:c,value:o.value,rawValue:o.rawValue}},ne=Symbol(`Let zodToJsonSchema decide on which parser to use`),re=Symbol.for(`vercel.ai.schema`),{btoa:ie,atob:ae}=globalThis;function oe(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCodePoint(e[n]);return ie(t)}function se(e){return e instanceof Uint8Array?oe(e):e}function ce(e){return e?.replace(/\/$/,``)}function R(e){var t,n;return(n=(t=e?.providerOptions)?.openaiCompatible)??{}}function le(e){let n=[];for(let{role:r,content:i,...a}of e){let e=R({...a});switch(r){case`system`:n.push({role:`system`,content:i,...e});break;case`user`:if(i.length===1&&i[0].type===`text`){n.push({role:`user`,content:i[0].text,...R(i[0])});break}n.push({role:`user`,content:i.map(e=>{let n=R(e);switch(e.type){case`text`:return{type:`text`,text:e.text,...n};case`file`:if(e.mediaType.startsWith(`image/`)){let t=e.mediaType===`image/*`?`image/jpeg`:e.mediaType;return{type:`image_url`,image_url:{url:e.data instanceof URL?e.data.toString():`data:${t};base64,${se(e.data)}`},...n}}else throw new t.UnsupportedFunctionalityError({functionality:`file part media type ${e.mediaType}`})}}),...e});break;case`assistant`:{let t=``,r=[];for(let e of i){let n=R(e);switch(e.type){case`text`:t+=e.text;break;case`tool-call`:r.push({id:e.toolCallId,type:`function`,function:{name:e.toolName,arguments:JSON.stringify(e.input)},...n});break}}n.push({role:`assistant`,content:t,tool_calls:r.length>0?r:void 0,...e});break}case`tool`:for(let e of i){let t=e.output,r;switch(t.type){case`text`:case`error-text`:r=t.value;break;case`content`:case`json`:case`error-json`:r=JSON.stringify(t.value);break}let i=R(e);n.push({role:`tool`,tool_call_id:e.toolCallId,content:r,...i})}break;default:{let e=r;throw Error(`Unsupported role: ${e}`)}}}return n}function ue({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function de(e){switch(e){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 fe=r.z.object({user:r.z.string().optional(),reasoningEffort:r.z.string().optional()}),pe=r.z.object({error:r.z.object({message:r.z.string(),type:r.z.string().nullish(),param:r.z.any().nullish(),code:r.z.union([r.z.string(),r.z.number()]).nullish()})}),z={errorSchema:pe,errorToMessage:e=>e.error.message};function me({tools:e,toolChoice:n}){e=e?.length?e:void 0;let r=[];if(e==null)return{tools:void 0,toolChoice:void 0,toolWarnings:r};let i=[];for(let t of e)t.type===`provider-defined`?r.push({type:`unsupported-tool`,tool:t}):i.push({type:`function`,function:{name:t.name,description:t.description,parameters:t.inputSchema}});if(n==null)return{tools:i,toolChoice:void 0,toolWarnings:r};let a=n.type;switch(a){case`auto`:case`none`:case`required`:return{tools:i,toolChoice:a,toolWarnings:r};case`tool`:return{tools:i,toolChoice:{type:`function`,function:{name:n.toolName}},toolWarnings:r};default:{let e=a;throw new t.UnsupportedFunctionalityError({functionality:`tool choice type: ${e}`})}}}var B=class{constructor(e,t){this.specificationVersion=`v2`;var n,r;this.modelId=e,this.config=t;let i=(n=t.errorStructure)??z;this.chunkSchema=he(i.errorSchema),this.failedResponseHandler=I(i),this.supportsStructuredOutputs=(r=t.supportsStructuredOutputs)??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,providerOptions:s,stopSequences:c,responseFormat:l,seed:u,toolChoice:d,tools:f}){var p,m,h,g;let _=[],v=Object.assign((p=await M({provider:`openai-compatible`,providerOptions:s,schema:fe}))??{},(m=await M({provider:this.providerOptionsName,providerOptions:s,schema:fe}))??{});i!=null&&_.push({type:`unsupported-setting`,setting:`topK`}),l?.type===`json`&&l.schema!=null&&!this.supportsStructuredOutputs&&_.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is only supported with structuredOutputs`});let{tools:y,toolChoice:b,toolWarnings:x}=me({tools:f,toolChoice:d});return{args:{model:this.modelId,user:v.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,response_format:l?.type===`json`?this.supportsStructuredOutputs===!0&&l.schema!=null?{type:`json_schema`,json_schema:{schema:l.schema,name:(h=l.name)??`response`,description:l.description}}:{type:`json_object`}:void 0,stop:c,seed:u,...Object.fromEntries(Object.entries((g=s?.[this.providerOptionsName])??{}).filter(([e])=>!Object.keys(fe.shape).includes(e))),reasoning_effort:v.reasoningEffort,messages:le(e),tools:y,tool_choice:b},warnings:[..._,...x]}}async doGenerate(e){var t,n,r,i,a,s,c,l,u,d,p,m,h,g,_,v,y;let{args:b,warnings:x}=await this.getArgs({...e}),S=JSON.stringify(b),{responseHeaders:C,value:w,rawValue:T}=await P({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:o(this.config.headers(),e.headers),body:b,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:L(H),abortSignal:e.abortSignal,fetch:this.config.fetch}),E=w.choices[0],D=[],O=E.message.content;O!=null&&O.length>0&&D.push({type:`text`,text:O});let k=(t=E.message.reasoning_content)??E.message.reasoning;if(k!=null&&k.length>0&&D.push({type:`reasoning`,text:k}),E.message.tool_calls!=null)for(let e of E.message.tool_calls)D.push({type:`tool-call`,toolCallId:(n=e.id)??f(),toolName:e.function.name,input:e.function.arguments});let A={[this.providerOptionsName]:{},...await(i=(r=this.config.metadataExtractor)?.extractMetadata)?.call(r,{parsedBody:T})},j=(a=w.usage)?.completion_tokens_details;return j?.accepted_prediction_tokens!=null&&(A[this.providerOptionsName].acceptedPredictionTokens=j?.accepted_prediction_tokens),j?.rejected_prediction_tokens!=null&&(A[this.providerOptionsName].rejectedPredictionTokens=j?.rejected_prediction_tokens),{content:D,finishReason:de(E.finish_reason),usage:{inputTokens:(c=(s=w.usage)?.prompt_tokens)??void 0,outputTokens:(u=(l=w.usage)?.completion_tokens)??void 0,totalTokens:(p=(d=w.usage)?.total_tokens)??void 0,reasoningTokens:(g=(h=(m=w.usage)?.completion_tokens_details)?.reasoning_tokens)??void 0,cachedInputTokens:(y=(v=(_=w.usage)?.prompt_tokens_details)?.cached_tokens)??void 0},providerMetadata:A,request:{body:S},response:{...ue(w),headers:C,body:T},warnings:x}}async doStream(e){var n;let{args:r,warnings:i}=await this.getArgs({...e}),a={...r,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},s=(n=this.config.metadataExtractor)?.createStreamExtractor(),{responseHeaders:c,value:l}=await P({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:o(this.config.headers(),e.headers),body:a,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:te(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),u=[],d=`unknown`,p={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},m=!0,h=this.providerOptionsName,g=!1,_=!1;return{stream:l.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:i})},transform(n,r){var i,a,o,c,l,h,v,y,b,x,S,C,w;if(e.includeRawChunks&&r.enqueue({type:`raw`,rawValue:n.rawValue}),!n.success){d=`error`,r.enqueue({type:`error`,error:n.error});return}let T=n.value;if(s?.processChunk(n.rawValue),`error`in T){d=`error`,r.enqueue({type:`error`,error:T.error.message});return}if(m&&(m=!1,r.enqueue({type:`response-metadata`,...ue(T)})),T.usage!=null){let{prompt_tokens:e,completion_tokens:t,total_tokens:n,prompt_tokens_details:r,completion_tokens_details:i}=T.usage;p.promptTokens=e??void 0,p.completionTokens=t??void 0,p.totalTokens=n??void 0,i?.reasoning_tokens!=null&&(p.completionTokensDetails.reasoningTokens=i?.reasoning_tokens),i?.accepted_prediction_tokens!=null&&(p.completionTokensDetails.acceptedPredictionTokens=i?.accepted_prediction_tokens),i?.rejected_prediction_tokens!=null&&(p.completionTokensDetails.rejectedPredictionTokens=i?.rejected_prediction_tokens),r?.cached_tokens!=null&&(p.promptTokensDetails.cachedTokens=r?.cached_tokens)}let E=T.choices[0];if(E?.finish_reason!=null&&(d=de(E.finish_reason)),E?.delta==null)return;let D=E.delta,O=(i=D.reasoning_content)??D.reasoning;if(O&&(g||=(r.enqueue({type:`reasoning-start`,id:`reasoning-0`}),!0),r.enqueue({type:`reasoning-delta`,id:`reasoning-0`,delta:O})),D.content&&(_||=(r.enqueue({type:`text-start`,id:`txt-0`}),!0),r.enqueue({type:`text-delta`,id:`txt-0`,delta:D.content})),D.tool_calls!=null)for(let e of D.tool_calls){let n=e.index;if(u[n]==null){if(e.id==null)throw new t.InvalidResponseDataError({data:e,message:`Expected 'id' to be a string.`});if((a=e.function)?.name==null)throw new t.InvalidResponseDataError({data:e,message:`Expected 'function.name' to be a string.`});r.enqueue({type:`tool-input-start`,id:e.id,toolName:e.function.name}),u[n]={id:e.id,type:`function`,function:{name:e.function.name,arguments:(o=e.function.arguments)??``},hasFinished:!1};let i=u[n];(c=i.function)?.name!=null&&(l=i.function)?.arguments!=null&&(i.function.arguments.length>0&&r.enqueue({type:`tool-input-delta`,id:i.id,delta:i.function.arguments}),j(i.function.arguments)&&(r.enqueue({type:`tool-input-end`,id:i.id}),r.enqueue({type:`tool-call`,toolCallId:(h=i.id)??f(),toolName:i.function.name,input:i.function.arguments}),i.hasFinished=!0));continue}let i=u[n];if(i.hasFinished)continue;(v=e.function)?.arguments!=null&&(i.function.arguments+=(b=(y=e.function)?.arguments)??``),r.enqueue({type:`tool-input-delta`,id:i.id,delta:(x=e.function.arguments)??``}),(S=i.function)?.name!=null&&(C=i.function)?.arguments!=null&&j(i.function.arguments)&&(r.enqueue({type:`tool-input-end`,id:i.id}),r.enqueue({type:`tool-call`,toolCallId:(w=i.id)??f(),toolName:i.function.name,input:i.function.arguments}),i.hasFinished=!0)}},flush(e){var t,n,r,i,a,o;g&&e.enqueue({type:`reasoning-end`,id:`reasoning-0`}),_&&e.enqueue({type:`text-end`,id:`txt-0`});for(let n of u.filter(e=>!e.hasFinished))e.enqueue({type:`tool-input-end`,id:n.id}),e.enqueue({type:`tool-call`,toolCallId:(t=n.id)??f(),toolName:n.function.name,input:n.function.arguments});let c={[h]:{},...s?.buildMetadata()};p.completionTokensDetails.acceptedPredictionTokens!=null&&(c[h].acceptedPredictionTokens=p.completionTokensDetails.acceptedPredictionTokens),p.completionTokensDetails.rejectedPredictionTokens!=null&&(c[h].rejectedPredictionTokens=p.completionTokensDetails.rejectedPredictionTokens),e.enqueue({type:`finish`,finishReason:d,usage:{inputTokens:(n=p.promptTokens)??void 0,outputTokens:(r=p.completionTokens)??void 0,totalTokens:(i=p.totalTokens)??void 0,reasoningTokens:(a=p.completionTokensDetails.reasoningTokens)??void 0,cachedInputTokens:(o=p.promptTokensDetails.cachedTokens)??void 0},providerMetadata:c})}})),request:{body:a},response:{headers:c}}}},V=r.z.object({prompt_tokens:r.z.number().nullish(),completion_tokens:r.z.number().nullish(),total_tokens:r.z.number().nullish(),prompt_tokens_details:r.z.object({cached_tokens:r.z.number().nullish()}).nullish(),completion_tokens_details:r.z.object({reasoning_tokens:r.z.number().nullish(),accepted_prediction_tokens:r.z.number().nullish(),rejected_prediction_tokens:r.z.number().nullish()}).nullish()}).nullish(),H=r.z.object({id:r.z.string().nullish(),created:r.z.number().nullish(),model:r.z.string().nullish(),choices:r.z.array(r.z.object({message:r.z.object({role:r.z.literal(`assistant`).nullish(),content:r.z.string().nullish(),reasoning_content:r.z.string().nullish(),reasoning:r.z.string().nullish(),tool_calls:r.z.array(r.z.object({id:r.z.string().nullish(),function:r.z.object({name:r.z.string(),arguments:r.z.string()})})).nullish()}),finish_reason:r.z.string().nullish()})),usage:V}),he=e=>r.z.union([r.z.object({id:r.z.string().nullish(),created:r.z.number().nullish(),model:r.z.string().nullish(),choices:r.z.array(r.z.object({delta:r.z.object({role:r.z.enum([`assistant`]).nullish(),content:r.z.string().nullish(),reasoning_content:r.z.string().nullish(),reasoning:r.z.string().nullish(),tool_calls:r.z.array(r.z.object({index:r.z.number(),id:r.z.string().nullish(),function:r.z.object({name:r.z.string().nullish(),arguments:r.z.string().nullish()})})).nullish()}).nullish(),finish_reason:r.z.string().nullish()})),usage:V}),e]);function ge({prompt:e,user:n=`user`,assistant:r=`assistant`}){let i=``;e[0].role===`system`&&(i+=`${e[0].content}
|
|
1
|
+
Object.defineProperty(exports,`__esModule`,{value:!0});const e=require(`../chunk-hhQzssFb.cjs`),t=require(`../http-DS8vmbQx.cjs`);let n=require(`util`);n=e.__toESM(n);let r=require(`zod/v4`);r=e.__toESM(r);let i=require(`zod/v3`);i=e.__toESM(i);let a=require(`http`);a=e.__toESM(a);function o(...e){return e.reduce((e,t)=>({...e,...t??{}}),{})}function s(e){return Object.fromEntries([...e.headers])}function c(e=globalThis){var t,n,r;return e.window?`runtime/browser`:(t=e.navigator)?.userAgent?`runtime/${e.navigator.userAgent.toLowerCase()}`:(r=(n=e.process)?.versions)?.node?`runtime/node.js/${e.process.version.substring(0)}`:e.EdgeRuntime?`runtime/vercel-edge`:`runtime/unknown`}function l(e){return Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null))}function u(e,...t){let n=l(e??{}),r=new Headers(n),i=r.get(`user-agent`)||``;return r.set(`user-agent`,[i,...t].filter(Boolean).join(` `)),Object.fromEntries(r)}var d=({prefix:e,size:n=16,alphabet:r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`,separator:i=`-`}={})=>{let a=()=>{let e=r.length,t=Array(n);for(let i=0;i<n;i++)t[i]=r[Math.random()*e|0];return t.join(``)};if(e==null)return a;if(r.includes(i))throw new t.InvalidArgumentError({argument:`separator`,message:`The separator "${i}" must not be part of the alphabet "${r}".`});return()=>`${e}${i}${a()}`},f=d();function p(e){return(e instanceof Error||e instanceof DOMException)&&(e.name===`AbortError`||e.name===`ResponseAborted`||e.name===`TimeoutError`)}var m=[`fetch failed`,`failed to fetch`];function h({error:e,url:n,requestBodyValues:r}){if(p(e))return e;if(e instanceof TypeError&&m.includes(e.message.toLowerCase())){let i=e.cause;if(i!=null)return new t.APICallError({message:`Cannot connect to API: ${i.message}`,cause:i,url:n,requestBodyValues:r,isRetryable:!0})}return e}var g=`3.0.10`,_=/"__proto__"\s*:/,v=/"constructor"\s*:/;function y(e){let t=JSON.parse(e);return typeof t!=`object`||!t||_.test(e)===!1&&v.test(e)===!1?t:b(t)}function b(e){let t=[e];for(;t.length;){let e=t;t=[];for(let n of e){if(Object.prototype.hasOwnProperty.call(n,`__proto__`)||Object.prototype.hasOwnProperty.call(n,`constructor`)&&Object.prototype.hasOwnProperty.call(n.constructor,`prototype`))throw SyntaxError(`Object contains forbidden prototype property`);for(let e in n){let r=n[e];r&&typeof r==`object`&&t.push(r)}}}return e}function x(e){let{stackTraceLimit:t}=Error;Error.stackTraceLimit=0;try{return y(e)}finally{Error.stackTraceLimit=t}}var S=Symbol.for(`vercel.ai.validator`);function C(e){return{[S]:!0,validate:e}}function w(e){return typeof e==`object`&&!!e&&S in e&&e[S]===!0&&`validate`in e}function T(e){return w(e)?e:E(e)}function E(e){return C(async n=>{let r=await e[`~standard`].validate(n);return r.issues==null?{success:!0,value:r.value}:{success:!1,error:new t.TypeValidationError({value:n,cause:r.issues})}})}async function D({value:e,schema:n}){let r=await O({value:e,schema:n});if(!r.success)throw t.TypeValidationError.wrap({value:e,cause:r.error});return r.value}async function O({value:e,schema:n}){let r=T(n);try{if(r.validate==null)return{success:!0,value:e,rawValue:e};let n=await r.validate(e);return n.success?{success:!0,value:n.value,rawValue:e}:{success:!1,error:t.TypeValidationError.wrap({value:e,cause:n.error}),rawValue:e}}catch(n){return{success:!1,error:t.TypeValidationError.wrap({value:e,cause:n}),rawValue:e}}}async function k({text:e,schema:n}){try{let t=x(e);return n==null?t:D({value:t,schema:n})}catch(n){throw t.JSONParseError.isInstance(n)||t.TypeValidationError.isInstance(n)?n:new t.JSONParseError({text:e,cause:n})}}async function A({text:e,schema:n}){try{let t=x(e);return n==null?{success:!0,value:t,rawValue:t}:await O({value:t,schema:n})}catch(n){return{success:!1,error:t.JSONParseError.isInstance(n)?n:new t.JSONParseError({text:e,cause:n}),rawValue:void 0}}}function j(e){try{return x(e),!0}catch{return!1}}function ee({stream:e,schema:n}){return e.pipeThrough(new TextDecoderStream).pipeThrough(new t.EventSourceParserStream).pipeThrough(new TransformStream({async transform({data:e},t){e!==`[DONE]`&&t.enqueue(await A({text:e,schema:n}))}}))}async function M({provider:e,providerOptions:n,schema:r}){if(n?.[e]==null)return;let i=await O({value:n[e],schema:r});if(!i.success)throw new t.InvalidArgumentError({argument:`providerOptions`,message:`invalid ${e} provider options`,cause:i.error});return i.value}var N=()=>globalThis.fetch,P=async({url:e,headers:t,body:n,failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o})=>F({url:e,headers:{"Content-Type":`application/json`,...t},body:{content:JSON.stringify(n),values:n},failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o}),F=async({url:e,headers:n={},body:r,successfulResponseHandler:i,failedResponseHandler:a,abortSignal:o,fetch:l=N()})=>{try{let d=await l(e,{method:`POST`,headers:u(n,`ai-sdk/provider-utils/${g}`,c()),body:r.content,signal:o}),f=s(d);if(!d.ok){let n;try{n=await a({response:d,url:e,requestBodyValues:r.values})}catch(n){throw p(n)||t.APICallError.isInstance(n)?n:new t.APICallError({message:`Failed to process error response`,cause:n,statusCode:d.status,url:e,responseHeaders:f,requestBodyValues:r.values})}throw n.value}try{return await i({response:d,url:e,requestBodyValues:r.values})}catch(n){throw n instanceof Error&&(p(n)||t.APICallError.isInstance(n))?n:new t.APICallError({message:`Failed to process successful response`,cause:n,statusCode:d.status,url:e,responseHeaders:f,requestBodyValues:r.values})}}catch(t){throw h({error:t,url:e,requestBodyValues:r.values})}},I=({errorSchema:e,errorToMessage:n,isRetryable:r})=>async({response:i,url:a,requestBodyValues:o})=>{let c=await i.text(),l=s(i);if(c.trim()===``)return{responseHeaders:l,value:new t.APICallError({message:i.statusText,url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:l,responseBody:c,isRetryable:r?.(i)})};try{let s=await k({text:c,schema:e});return{responseHeaders:l,value:new t.APICallError({message:n(s),url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:l,responseBody:c,data:s,isRetryable:r?.(i,s)})}}catch{return{responseHeaders:l,value:new t.APICallError({message:i.statusText,url:a,requestBodyValues:o,statusCode:i.status,responseHeaders:l,responseBody:c,isRetryable:r?.(i)})}}},te=e=>async({response:n})=>{let r=s(n);if(n.body==null)throw new t.EmptyResponseBodyError({});return{responseHeaders:r,value:ee({stream:n.body,schema:e})}},L=e=>async({response:n,url:r,requestBodyValues:i})=>{let a=await n.text(),o=await A({text:a,schema:e}),c=s(n);if(!o.success)throw new t.APICallError({message:`Invalid JSON response`,cause:o.error,statusCode:n.status,responseHeaders:c,responseBody:a,url:r,requestBodyValues:i});return{responseHeaders:c,value:o.value,rawValue:o.rawValue}},ne=Symbol(`Let zodToJsonSchema decide on which parser to use`),re=Symbol.for(`vercel.ai.schema`),{btoa:ie,atob:ae}=globalThis;function oe(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCodePoint(e[n]);return ie(t)}function se(e){return e instanceof Uint8Array?oe(e):e}function ce(e){return e?.replace(/\/$/,``)}function R(e){var t,n;return(n=(t=e?.providerOptions)?.openaiCompatible)??{}}function le(e){let n=[];for(let{role:r,content:i,...a}of e){let e=R({...a});switch(r){case`system`:n.push({role:`system`,content:i,...e});break;case`user`:if(i.length===1&&i[0].type===`text`){n.push({role:`user`,content:i[0].text,...R(i[0])});break}n.push({role:`user`,content:i.map(e=>{let n=R(e);switch(e.type){case`text`:return{type:`text`,text:e.text,...n};case`file`:if(e.mediaType.startsWith(`image/`)){let t=e.mediaType===`image/*`?`image/jpeg`:e.mediaType;return{type:`image_url`,image_url:{url:e.data instanceof URL?e.data.toString():`data:${t};base64,${se(e.data)}`},...n}}else throw new t.UnsupportedFunctionalityError({functionality:`file part media type ${e.mediaType}`})}}),...e});break;case`assistant`:{let t=``,r=[];for(let e of i){let n=R(e);switch(e.type){case`text`:t+=e.text;break;case`tool-call`:r.push({id:e.toolCallId,type:`function`,function:{name:e.toolName,arguments:JSON.stringify(e.input)},...n});break}}n.push({role:`assistant`,content:t,tool_calls:r.length>0?r:void 0,...e});break}case`tool`:for(let e of i){let t=e.output,r;switch(t.type){case`text`:case`error-text`:r=t.value;break;case`content`:case`json`:case`error-json`:r=JSON.stringify(t.value);break}let i=R(e);n.push({role:`tool`,tool_call_id:e.toolCallId,content:r,...i})}break;default:{let e=r;throw Error(`Unsupported role: ${e}`)}}}return n}function ue({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function de(e){switch(e){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 fe=r.z.object({user:r.z.string().optional(),reasoningEffort:r.z.string().optional()}),pe=r.z.object({error:r.z.object({message:r.z.string(),type:r.z.string().nullish(),param:r.z.any().nullish(),code:r.z.union([r.z.string(),r.z.number()]).nullish()})}),z={errorSchema:pe,errorToMessage:e=>e.error.message};function me({tools:e,toolChoice:n}){e=e?.length?e:void 0;let r=[];if(e==null)return{tools:void 0,toolChoice:void 0,toolWarnings:r};let i=[];for(let t of e)t.type===`provider-defined`?r.push({type:`unsupported-tool`,tool:t}):i.push({type:`function`,function:{name:t.name,description:t.description,parameters:t.inputSchema}});if(n==null)return{tools:i,toolChoice:void 0,toolWarnings:r};let a=n.type;switch(a){case`auto`:case`none`:case`required`:return{tools:i,toolChoice:a,toolWarnings:r};case`tool`:return{tools:i,toolChoice:{type:`function`,function:{name:n.toolName}},toolWarnings:r};default:{let e=a;throw new t.UnsupportedFunctionalityError({functionality:`tool choice type: ${e}`})}}}var B=class{constructor(e,t){this.specificationVersion=`v2`;var n,r;this.modelId=e,this.config=t;let i=(n=t.errorStructure)??z;this.chunkSchema=he(i.errorSchema),this.failedResponseHandler=I(i),this.supportsStructuredOutputs=(r=t.supportsStructuredOutputs)??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,providerOptions:s,stopSequences:c,responseFormat:l,seed:u,toolChoice:d,tools:f}){var p,m,h,g;let _=[],v=Object.assign((p=await M({provider:`openai-compatible`,providerOptions:s,schema:fe}))??{},(m=await M({provider:this.providerOptionsName,providerOptions:s,schema:fe}))??{});i!=null&&_.push({type:`unsupported-setting`,setting:`topK`}),l?.type===`json`&&l.schema!=null&&!this.supportsStructuredOutputs&&_.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is only supported with structuredOutputs`});let{tools:y,toolChoice:b,toolWarnings:x}=me({tools:f,toolChoice:d});return{args:{model:this.modelId,user:v.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,response_format:l?.type===`json`?this.supportsStructuredOutputs===!0&&l.schema!=null?{type:`json_schema`,json_schema:{schema:l.schema,name:(h=l.name)??`response`,description:l.description}}:{type:`json_object`}:void 0,stop:c,seed:u,...Object.fromEntries(Object.entries((g=s?.[this.providerOptionsName])??{}).filter(([e])=>!Object.keys(fe.shape).includes(e))),reasoning_effort:v.reasoningEffort,messages:le(e),tools:y,tool_choice:b},warnings:[..._,...x]}}async doGenerate(e){var t,n,r,i,a,s,c,l,u,d,p,m,h,g,_,v,y;let{args:b,warnings:x}=await this.getArgs({...e}),S=JSON.stringify(b),{responseHeaders:C,value:w,rawValue:T}=await P({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:o(this.config.headers(),e.headers),body:b,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:L(H),abortSignal:e.abortSignal,fetch:this.config.fetch}),E=w.choices[0],D=[],O=E.message.content;O!=null&&O.length>0&&D.push({type:`text`,text:O});let k=(t=E.message.reasoning_content)??E.message.reasoning;if(k!=null&&k.length>0&&D.push({type:`reasoning`,text:k}),E.message.tool_calls!=null)for(let e of E.message.tool_calls)D.push({type:`tool-call`,toolCallId:(n=e.id)??f(),toolName:e.function.name,input:e.function.arguments});let A={[this.providerOptionsName]:{},...await(i=(r=this.config.metadataExtractor)?.extractMetadata)?.call(r,{parsedBody:T})},j=(a=w.usage)?.completion_tokens_details;return j?.accepted_prediction_tokens!=null&&(A[this.providerOptionsName].acceptedPredictionTokens=j?.accepted_prediction_tokens),j?.rejected_prediction_tokens!=null&&(A[this.providerOptionsName].rejectedPredictionTokens=j?.rejected_prediction_tokens),{content:D,finishReason:de(E.finish_reason),usage:{inputTokens:(c=(s=w.usage)?.prompt_tokens)??void 0,outputTokens:(u=(l=w.usage)?.completion_tokens)??void 0,totalTokens:(p=(d=w.usage)?.total_tokens)??void 0,reasoningTokens:(g=(h=(m=w.usage)?.completion_tokens_details)?.reasoning_tokens)??void 0,cachedInputTokens:(y=(v=(_=w.usage)?.prompt_tokens_details)?.cached_tokens)??void 0},providerMetadata:A,request:{body:S},response:{...ue(w),headers:C,body:T},warnings:x}}async doStream(e){var n;let{args:r,warnings:i}=await this.getArgs({...e}),a={...r,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},s=(n=this.config.metadataExtractor)?.createStreamExtractor(),{responseHeaders:c,value:l}=await P({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:o(this.config.headers(),e.headers),body:a,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:te(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),u=[],d=`unknown`,p={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},m=!0,h=this.providerOptionsName,g=!1,_=!1;return{stream:l.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:i})},transform(n,r){var i,a,o,c,l,h,v,y,b,x,S,C,w;if(e.includeRawChunks&&r.enqueue({type:`raw`,rawValue:n.rawValue}),!n.success){d=`error`,r.enqueue({type:`error`,error:n.error});return}let T=n.value;if(s?.processChunk(n.rawValue),`error`in T){d=`error`,r.enqueue({type:`error`,error:T.error.message});return}if(m&&(m=!1,r.enqueue({type:`response-metadata`,...ue(T)})),T.usage!=null){let{prompt_tokens:e,completion_tokens:t,total_tokens:n,prompt_tokens_details:r,completion_tokens_details:i}=T.usage;p.promptTokens=e??void 0,p.completionTokens=t??void 0,p.totalTokens=n??void 0,i?.reasoning_tokens!=null&&(p.completionTokensDetails.reasoningTokens=i?.reasoning_tokens),i?.accepted_prediction_tokens!=null&&(p.completionTokensDetails.acceptedPredictionTokens=i?.accepted_prediction_tokens),i?.rejected_prediction_tokens!=null&&(p.completionTokensDetails.rejectedPredictionTokens=i?.rejected_prediction_tokens),r?.cached_tokens!=null&&(p.promptTokensDetails.cachedTokens=r?.cached_tokens)}let E=T.choices[0];if(E?.finish_reason!=null&&(d=de(E.finish_reason)),E?.delta==null)return;let D=E.delta,O=(i=D.reasoning_content)??D.reasoning;if(O&&(g||=(r.enqueue({type:`reasoning-start`,id:`reasoning-0`}),!0),r.enqueue({type:`reasoning-delta`,id:`reasoning-0`,delta:O})),D.content&&(_||=(r.enqueue({type:`text-start`,id:`txt-0`}),!0),r.enqueue({type:`text-delta`,id:`txt-0`,delta:D.content})),D.tool_calls!=null)for(let e of D.tool_calls){let n=e.index;if(u[n]==null){if(e.id==null)throw new t.InvalidResponseDataError({data:e,message:`Expected 'id' to be a string.`});if((a=e.function)?.name==null)throw new t.InvalidResponseDataError({data:e,message:`Expected 'function.name' to be a string.`});r.enqueue({type:`tool-input-start`,id:e.id,toolName:e.function.name}),u[n]={id:e.id,type:`function`,function:{name:e.function.name,arguments:(o=e.function.arguments)??``},hasFinished:!1};let i=u[n];(c=i.function)?.name!=null&&(l=i.function)?.arguments!=null&&(i.function.arguments.length>0&&r.enqueue({type:`tool-input-delta`,id:i.id,delta:i.function.arguments}),j(i.function.arguments)&&(r.enqueue({type:`tool-input-end`,id:i.id}),r.enqueue({type:`tool-call`,toolCallId:(h=i.id)??f(),toolName:i.function.name,input:i.function.arguments}),i.hasFinished=!0));continue}let i=u[n];if(i.hasFinished)continue;(v=e.function)?.arguments!=null&&(i.function.arguments+=(b=(y=e.function)?.arguments)??``),r.enqueue({type:`tool-input-delta`,id:i.id,delta:(x=e.function.arguments)??``}),(S=i.function)?.name!=null&&(C=i.function)?.arguments!=null&&j(i.function.arguments)&&(r.enqueue({type:`tool-input-end`,id:i.id}),r.enqueue({type:`tool-call`,toolCallId:(w=i.id)??f(),toolName:i.function.name,input:i.function.arguments}),i.hasFinished=!0)}},flush(e){var t,n,r,i,a,o;g&&e.enqueue({type:`reasoning-end`,id:`reasoning-0`}),_&&e.enqueue({type:`text-end`,id:`txt-0`});for(let n of u.filter(e=>!e.hasFinished))e.enqueue({type:`tool-input-end`,id:n.id}),e.enqueue({type:`tool-call`,toolCallId:(t=n.id)??f(),toolName:n.function.name,input:n.function.arguments});let c={[h]:{},...s?.buildMetadata()};p.completionTokensDetails.acceptedPredictionTokens!=null&&(c[h].acceptedPredictionTokens=p.completionTokensDetails.acceptedPredictionTokens),p.completionTokensDetails.rejectedPredictionTokens!=null&&(c[h].rejectedPredictionTokens=p.completionTokensDetails.rejectedPredictionTokens),e.enqueue({type:`finish`,finishReason:d,usage:{inputTokens:(n=p.promptTokens)??void 0,outputTokens:(r=p.completionTokens)??void 0,totalTokens:(i=p.totalTokens)??void 0,reasoningTokens:(a=p.completionTokensDetails.reasoningTokens)??void 0,cachedInputTokens:(o=p.promptTokensDetails.cachedTokens)??void 0},providerMetadata:c})}})),request:{body:a},response:{headers:c}}}},V=r.z.object({prompt_tokens:r.z.number().nullish(),completion_tokens:r.z.number().nullish(),total_tokens:r.z.number().nullish(),prompt_tokens_details:r.z.object({cached_tokens:r.z.number().nullish()}).nullish(),completion_tokens_details:r.z.object({reasoning_tokens:r.z.number().nullish(),accepted_prediction_tokens:r.z.number().nullish(),rejected_prediction_tokens:r.z.number().nullish()}).nullish()}).nullish(),H=r.z.object({id:r.z.string().nullish(),created:r.z.number().nullish(),model:r.z.string().nullish(),choices:r.z.array(r.z.object({message:r.z.object({role:r.z.literal(`assistant`).nullish(),content:r.z.string().nullish(),reasoning_content:r.z.string().nullish(),reasoning:r.z.string().nullish(),tool_calls:r.z.array(r.z.object({id:r.z.string().nullish(),function:r.z.object({name:r.z.string(),arguments:r.z.string()})})).nullish()}),finish_reason:r.z.string().nullish()})),usage:V}),he=e=>r.z.union([r.z.object({id:r.z.string().nullish(),created:r.z.number().nullish(),model:r.z.string().nullish(),choices:r.z.array(r.z.object({delta:r.z.object({role:r.z.enum([`assistant`]).nullish(),content:r.z.string().nullish(),reasoning_content:r.z.string().nullish(),reasoning:r.z.string().nullish(),tool_calls:r.z.array(r.z.object({index:r.z.number(),id:r.z.string().nullish(),function:r.z.object({name:r.z.string().nullish(),arguments:r.z.string().nullish()})})).nullish()}).nullish(),finish_reason:r.z.string().nullish()})),usage:V}),e]);function ge({prompt:e,user:n=`user`,assistant:r=`assistant`}){let i=``;e[0].role===`system`&&(i+=`${e[0].content}
|
|
2
2
|
|
|
3
3
|
`,e=e.slice(1));for(let{role:a,content:o}of e)switch(a){case`system`:throw new t.InvalidPromptError({message:"Unexpected system message in prompt: ${content}",prompt:e});case`user`:{let e=o.map(e=>{switch(e.type){case`text`:return e.text}}).filter(Boolean).join(``);i+=`${n}:
|
|
4
4
|
${e}
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Agent, AgentOptions, Chat, ChatBehavior, ContextFromTools, ExperimentalCompletion, ExperimentalProvideCompletionsOptions, ExperimentalProvideCompletionsResponse, Message, MessageOptions, SendMessagesOptions, SendMessagesResponse, ServeOptions, StreamResponseFormat, ToolApprovalOutput, ToolWithContext, _default, agent, chat, isToolApprovalOutput, model, storage, tools, withResponseFormat } from "../index-
|
|
1
|
+
import { Agent, AgentOptions, Chat, ChatBehavior, ContextFromTools, ExperimentalCompletion, ExperimentalProvideCompletionsOptions, ExperimentalProvideCompletionsResponse, Message, MessageOptions, SendMessagesOptions, SendMessagesResponse, ServeOptions, StreamResponseFormat, ToolApprovalOutput, ToolWithContext, _default, agent, chat, isToolApprovalOutput, model, storage, tools, withResponseFormat } from "../index-tvf1rglX.js";
|
|
2
2
|
export { Agent, AgentOptions, Chat, ChatBehavior, ContextFromTools, ExperimentalCompletion, ExperimentalProvideCompletionsOptions, ExperimentalProvideCompletionsResponse, Message, MessageOptions, SendMessagesOptions, SendMessagesResponse, ServeOptions, StreamResponseFormat, ToolApprovalOutput, ToolWithContext, agent, chat, _default as default, isToolApprovalOutput, model, storage, tools, withResponseFormat };
|
package/dist/api/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{__commonJSMin as e,__esmMin as t,__export as n,__require as r,__toCommonJS as i,__toESM as a}from"../chunk-___ucjiX.js";import{APICallError as o,EmptyResponseBodyError as s,EventSourceParserStream as c,InvalidArgumentError as l,InvalidPromptError as u,InvalidResponseDataError as d,JSONParseError as f,StreamResponseFormatHeader as p,TooManyEmbeddingValuesForCallError as m,TypeValidationError as h,UnsupportedFunctionalityError as g,client as _,convertToModelMessages as v,createUIMessageStream as y,getToolName as b,isToolUIPart as x}from"../http-DGkzwMDO.js";import"../cookie-vgkq7-5W.js";import S from"util";import{z as C}from"zod/v4";import{ZodFirstPartyTypeKind as w}from"zod/v3";import T from"http";function E(...e){return e.reduce((e,t)=>({...e,...t??{}}),{})}function D(e){return Object.fromEntries([...e.headers])}function O(e=globalThis){var t,n,r;return e.window?`runtime/browser`:(t=e.navigator)?.userAgent?`runtime/${e.navigator.userAgent.toLowerCase()}`:(r=(n=e.process)?.versions)?.node?`runtime/node.js/${e.process.version.substring(0)}`:e.EdgeRuntime?`runtime/vercel-edge`:`runtime/unknown`}function k(e){return Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null))}function A(e,...t){let n=k(e??{}),r=new Headers(n),i=r.get(`user-agent`)||``;return r.set(`user-agent`,[i,...t].filter(Boolean).join(` `)),Object.fromEntries(r)}var j=({prefix:e,size:t=16,alphabet:n=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`,separator:r=`-`}={})=>{let i=()=>{let e=n.length,r=Array(t);for(let i=0;i<t;i++)r[i]=n[Math.random()*e|0];return r.join(``)};if(e==null)return i;if(n.includes(r))throw new l({argument:`separator`,message:`The separator "${r}" must not be part of the alphabet "${n}".`});return()=>`${e}${r}${i()}`},M=j();function N(e){return(e instanceof Error||e instanceof DOMException)&&(e.name===`AbortError`||e.name===`ResponseAborted`||e.name===`TimeoutError`)}var P=[`fetch failed`,`failed to fetch`];function F({error:e,url:t,requestBodyValues:n}){if(N(e))return e;if(e instanceof TypeError&&P.includes(e.message.toLowerCase())){let r=e.cause;if(r!=null)return new o({message:`Cannot connect to API: ${r.message}`,cause:r,url:t,requestBodyValues:n,isRetryable:!0})}return e}var I=`3.0.10`,L=/"__proto__"\s*:/,ee=/"constructor"\s*:/;function te(e){let t=JSON.parse(e);return typeof t!=`object`||!t||L.test(e)===!1&&ee.test(e)===!1?t:ne(t)}function ne(e){let t=[e];for(;t.length;){let e=t;t=[];for(let n of e){if(Object.prototype.hasOwnProperty.call(n,`__proto__`)||Object.prototype.hasOwnProperty.call(n,`constructor`)&&Object.prototype.hasOwnProperty.call(n.constructor,`prototype`))throw SyntaxError(`Object contains forbidden prototype property`);for(let e in n){let r=n[e];r&&typeof r==`object`&&t.push(r)}}}return e}function R(e){let{stackTraceLimit:t}=Error;Error.stackTraceLimit=0;try{return te(e)}finally{Error.stackTraceLimit=t}}var z=Symbol.for(`vercel.ai.validator`);function re(e){return{[z]:!0,validate:e}}function ie(e){return typeof e==`object`&&!!e&&z in e&&e[z]===!0&&`validate`in e}function ae(e){return ie(e)?e:oe(e)}function oe(e){return re(async t=>{let n=await e[`~standard`].validate(t);return n.issues==null?{success:!0,value:n.value}:{success:!1,error:new h({value:t,cause:n.issues})}})}async function se({value:e,schema:t}){let n=await ce({value:e,schema:t});if(!n.success)throw h.wrap({value:e,cause:n.error});return n.value}async function ce({value:e,schema:t}){let n=ae(t);try{if(n.validate==null)return{success:!0,value:e,rawValue:e};let t=await n.validate(e);return t.success?{success:!0,value:t.value,rawValue:e}:{success:!1,error:h.wrap({value:e,cause:t.error}),rawValue:e}}catch(t){return{success:!1,error:h.wrap({value:e,cause:t}),rawValue:e}}}async function le({text:e,schema:t}){try{let n=R(e);return t==null?n:se({value:n,schema:t})}catch(t){throw f.isInstance(t)||h.isInstance(t)?t:new f({text:e,cause:t})}}async function ue({text:e,schema:t}){try{let n=R(e);return t==null?{success:!0,value:n,rawValue:n}:await ce({value:n,schema:t})}catch(t){return{success:!1,error:f.isInstance(t)?t:new f({text:e,cause:t}),rawValue:void 0}}}function de(e){try{return R(e),!0}catch{return!1}}function fe({stream:e,schema:t}){return e.pipeThrough(new TextDecoderStream).pipeThrough(new c).pipeThrough(new TransformStream({async transform({data:e},n){e!==`[DONE]`&&n.enqueue(await ue({text:e,schema:t}))}}))}async function B({provider:e,providerOptions:t,schema:n}){if(t?.[e]==null)return;let r=await ce({value:t[e],schema:n});if(!r.success)throw new l({argument:`providerOptions`,message:`invalid ${e} provider options`,cause:r.error});return r.value}var pe=()=>globalThis.fetch,V=async({url:e,headers:t,body:n,failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o})=>H({url:e,headers:{"Content-Type":`application/json`,...t},body:{content:JSON.stringify(n),values:n},failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o}),H=async({url:e,headers:t={},body:n,successfulResponseHandler:r,failedResponseHandler:i,abortSignal:a,fetch:s=pe()})=>{try{let c=await s(e,{method:`POST`,headers:A(t,`ai-sdk/provider-utils/${I}`,O()),body:n.content,signal:a}),l=D(c);if(!c.ok){let t;try{t=await i({response:c,url:e,requestBodyValues:n.values})}catch(t){throw N(t)||o.isInstance(t)?t:new o({message:`Failed to process error response`,cause:t,statusCode:c.status,url:e,responseHeaders:l,requestBodyValues:n.values})}throw t.value}try{return await r({response:c,url:e,requestBodyValues:n.values})}catch(t){throw t instanceof Error&&(N(t)||o.isInstance(t))?t:new o({message:`Failed to process successful response`,cause:t,statusCode:c.status,url:e,responseHeaders:l,requestBodyValues:n.values})}}catch(t){throw F({error:t,url:e,requestBodyValues:n.values})}},U=({errorSchema:e,errorToMessage:t,isRetryable:n})=>async({response:r,url:i,requestBodyValues:a})=>{let s=await r.text(),c=D(r);if(s.trim()===``)return{responseHeaders:c,value:new o({message:r.statusText,url:i,requestBodyValues:a,statusCode:r.status,responseHeaders:c,responseBody:s,isRetryable:n?.(r)})};try{let l=await le({text:s,schema:e});return{responseHeaders:c,value:new o({message:t(l),url:i,requestBodyValues:a,statusCode:r.status,responseHeaders:c,responseBody:s,data:l,isRetryable:n?.(r,l)})}}catch{return{responseHeaders:c,value:new o({message:r.statusText,url:i,requestBodyValues:a,statusCode:r.status,responseHeaders:c,responseBody:s,isRetryable:n?.(r)})}}},me=e=>async({response:t})=>{let n=D(t);if(t.body==null)throw new s({});return{responseHeaders:n,value:fe({stream:t.body,schema:e})}},W=e=>async({response:t,url:n,requestBodyValues:r})=>{let i=await t.text(),a=await ue({text:i,schema:e}),s=D(t);if(!a.success)throw new o({message:`Invalid JSON response`,cause:a.error,statusCode:t.status,responseHeaders:s,responseBody:i,url:n,requestBodyValues:r});return{responseHeaders:s,value:a.value,rawValue:a.rawValue}},{btoa:he,atob:ge}=globalThis;function _e(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCodePoint(e[n]);return he(t)}function ve(e){return e instanceof Uint8Array?_e(e):e}function ye(e){return e?.replace(/\/$/,``)}function be(e){var t,n;return(n=(t=e?.providerOptions)?.openaiCompatible)??{}}function xe(e){let t=[];for(let{role:n,content:r,...i}of e){let e=be({...i});switch(n){case`system`:t.push({role:`system`,content:r,...e});break;case`user`:if(r.length===1&&r[0].type===`text`){t.push({role:`user`,content:r[0].text,...be(r[0])});break}t.push({role:`user`,content:r.map(e=>{let t=be(e);switch(e.type){case`text`:return{type:`text`,text:e.text,...t};case`file`:if(e.mediaType.startsWith(`image/`)){let n=e.mediaType===`image/*`?`image/jpeg`:e.mediaType;return{type:`image_url`,image_url:{url:e.data instanceof URL?e.data.toString():`data:${n};base64,${ve(e.data)}`},...t}}else throw new g({functionality:`file part media type ${e.mediaType}`})}}),...e});break;case`assistant`:{let n=``,i=[];for(let e of r){let t=be(e);switch(e.type){case`text`:n+=e.text;break;case`tool-call`:i.push({id:e.toolCallId,type:`function`,function:{name:e.toolName,arguments:JSON.stringify(e.input)},...t});break}}t.push({role:`assistant`,content:n,tool_calls:i.length>0?i:void 0,...e});break}case`tool`:for(let e of r){let n=e.output,r;switch(n.type){case`text`:case`error-text`:r=n.value;break;case`content`:case`json`:case`error-json`:r=JSON.stringify(n.value);break}let i=be(e);t.push({role:`tool`,tool_call_id:e.toolCallId,content:r,...i})}break;default:{let e=n;throw Error(`Unsupported role: ${e}`)}}}return t}function Se({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function Ce(e){switch(e){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 we=C.object({user:C.string().optional(),reasoningEffort:C.string().optional()}),Te=C.object({error:C.object({message:C.string(),type:C.string().nullish(),param:C.any().nullish(),code:C.union([C.string(),C.number()]).nullish()})}),Ee={errorSchema:Te,errorToMessage:e=>e.error.message};function De({tools:e,toolChoice:t}){e=e?.length?e:void 0;let n=[];if(e==null)return{tools:void 0,toolChoice:void 0,toolWarnings:n};let r=[];for(let t of e)t.type===`provider-defined`?n.push({type:`unsupported-tool`,tool:t}):r.push({type:`function`,function:{name:t.name,description:t.description,parameters:t.inputSchema}});if(t==null)return{tools:r,toolChoice:void 0,toolWarnings:n};let i=t.type;switch(i){case`auto`:case`none`:case`required`:return{tools:r,toolChoice:i,toolWarnings:n};case`tool`:return{tools:r,toolChoice:{type:`function`,function:{name:t.toolName}},toolWarnings:n};default:{let e=i;throw new g({functionality:`tool choice type: ${e}`})}}}var Oe=class{constructor(e,t){this.specificationVersion=`v2`;var n,r;this.modelId=e,this.config=t;let i=(n=t.errorStructure)??Ee;this.chunkSchema=je(i.errorSchema),this.failedResponseHandler=U(i),this.supportsStructuredOutputs=(r=t.supportsStructuredOutputs)??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,providerOptions:s,stopSequences:c,responseFormat:l,seed:u,toolChoice:d,tools:f}){var p,m,h,g;let _=[],v=Object.assign((p=await B({provider:`openai-compatible`,providerOptions:s,schema:we}))??{},(m=await B({provider:this.providerOptionsName,providerOptions:s,schema:we}))??{});i!=null&&_.push({type:`unsupported-setting`,setting:`topK`}),l?.type===`json`&&l.schema!=null&&!this.supportsStructuredOutputs&&_.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is only supported with structuredOutputs`});let{tools:y,toolChoice:b,toolWarnings:x}=De({tools:f,toolChoice:d});return{args:{model:this.modelId,user:v.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,response_format:l?.type===`json`?this.supportsStructuredOutputs===!0&&l.schema!=null?{type:`json_schema`,json_schema:{schema:l.schema,name:(h=l.name)??`response`,description:l.description}}:{type:`json_object`}:void 0,stop:c,seed:u,...Object.fromEntries(Object.entries((g=s?.[this.providerOptionsName])??{}).filter(([e])=>!Object.keys(we.shape).includes(e))),reasoning_effort:v.reasoningEffort,messages:xe(e),tools:y,tool_choice:b},warnings:[..._,...x]}}async doGenerate(e){var t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_;let{args:v,warnings:y}=await this.getArgs({...e}),b=JSON.stringify(v),{responseHeaders:x,value:S,rawValue:C}=await V({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:E(this.config.headers(),e.headers),body:v,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:W(Ae),abortSignal:e.abortSignal,fetch:this.config.fetch}),w=S.choices[0],T=[],D=w.message.content;D!=null&&D.length>0&&T.push({type:`text`,text:D});let O=(t=w.message.reasoning_content)??w.message.reasoning;if(O!=null&&O.length>0&&T.push({type:`reasoning`,text:O}),w.message.tool_calls!=null)for(let e of w.message.tool_calls)T.push({type:`tool-call`,toolCallId:(n=e.id)??M(),toolName:e.function.name,input:e.function.arguments});let k={[this.providerOptionsName]:{},...await(i=(r=this.config.metadataExtractor)?.extractMetadata)?.call(r,{parsedBody:C})},A=(a=S.usage)?.completion_tokens_details;return A?.accepted_prediction_tokens!=null&&(k[this.providerOptionsName].acceptedPredictionTokens=A?.accepted_prediction_tokens),A?.rejected_prediction_tokens!=null&&(k[this.providerOptionsName].rejectedPredictionTokens=A?.rejected_prediction_tokens),{content:T,finishReason:Ce(w.finish_reason),usage:{inputTokens:(s=(o=S.usage)?.prompt_tokens)??void 0,outputTokens:(l=(c=S.usage)?.completion_tokens)??void 0,totalTokens:(d=(u=S.usage)?.total_tokens)??void 0,reasoningTokens:(m=(p=(f=S.usage)?.completion_tokens_details)?.reasoning_tokens)??void 0,cachedInputTokens:(_=(g=(h=S.usage)?.prompt_tokens_details)?.cached_tokens)??void 0},providerMetadata:k,request:{body:b},response:{...Se(S),headers:x,body:C},warnings:y}}async doStream(e){var t;let{args:n,warnings:r}=await this.getArgs({...e}),i={...n,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},a=(t=this.config.metadataExtractor)?.createStreamExtractor(),{responseHeaders:o,value:s}=await V({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:E(this.config.headers(),e.headers),body:i,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:me(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),c=[],l=`unknown`,u={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},f=!0,p=this.providerOptionsName,m=!1,h=!1;return{stream:s.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:r})},transform(t,n){var r,i,o,s,p,g,_,v,y,b,x,S,C;if(e.includeRawChunks&&n.enqueue({type:`raw`,rawValue:t.rawValue}),!t.success){l=`error`,n.enqueue({type:`error`,error:t.error});return}let w=t.value;if(a?.processChunk(t.rawValue),`error`in w){l=`error`,n.enqueue({type:`error`,error:w.error.message});return}if(f&&(f=!1,n.enqueue({type:`response-metadata`,...Se(w)})),w.usage!=null){let{prompt_tokens:e,completion_tokens:t,total_tokens:n,prompt_tokens_details:r,completion_tokens_details:i}=w.usage;u.promptTokens=e??void 0,u.completionTokens=t??void 0,u.totalTokens=n??void 0,i?.reasoning_tokens!=null&&(u.completionTokensDetails.reasoningTokens=i?.reasoning_tokens),i?.accepted_prediction_tokens!=null&&(u.completionTokensDetails.acceptedPredictionTokens=i?.accepted_prediction_tokens),i?.rejected_prediction_tokens!=null&&(u.completionTokensDetails.rejectedPredictionTokens=i?.rejected_prediction_tokens),r?.cached_tokens!=null&&(u.promptTokensDetails.cachedTokens=r?.cached_tokens)}let T=w.choices[0];if(T?.finish_reason!=null&&(l=Ce(T.finish_reason)),T?.delta==null)return;let E=T.delta,D=(r=E.reasoning_content)??E.reasoning;if(D&&(m||=(n.enqueue({type:`reasoning-start`,id:`reasoning-0`}),!0),n.enqueue({type:`reasoning-delta`,id:`reasoning-0`,delta:D})),E.content&&(h||=(n.enqueue({type:`text-start`,id:`txt-0`}),!0),n.enqueue({type:`text-delta`,id:`txt-0`,delta:E.content})),E.tool_calls!=null)for(let e of E.tool_calls){let t=e.index;if(c[t]==null){if(e.id==null)throw new d({data:e,message:`Expected 'id' to be a string.`});if((i=e.function)?.name==null)throw new d({data:e,message:`Expected 'function.name' to be a string.`});n.enqueue({type:`tool-input-start`,id:e.id,toolName:e.function.name}),c[t]={id:e.id,type:`function`,function:{name:e.function.name,arguments:(o=e.function.arguments)??``},hasFinished:!1};let r=c[t];(s=r.function)?.name!=null&&(p=r.function)?.arguments!=null&&(r.function.arguments.length>0&&n.enqueue({type:`tool-input-delta`,id:r.id,delta:r.function.arguments}),de(r.function.arguments)&&(n.enqueue({type:`tool-input-end`,id:r.id}),n.enqueue({type:`tool-call`,toolCallId:(g=r.id)??M(),toolName:r.function.name,input:r.function.arguments}),r.hasFinished=!0));continue}let r=c[t];if(r.hasFinished)continue;(_=e.function)?.arguments!=null&&(r.function.arguments+=(y=(v=e.function)?.arguments)??``),n.enqueue({type:`tool-input-delta`,id:r.id,delta:(b=e.function.arguments)??``}),(x=r.function)?.name!=null&&(S=r.function)?.arguments!=null&&de(r.function.arguments)&&(n.enqueue({type:`tool-input-end`,id:r.id}),n.enqueue({type:`tool-call`,toolCallId:(C=r.id)??M(),toolName:r.function.name,input:r.function.arguments}),r.hasFinished=!0)}},flush(e){var t,n,r,i,o,s;m&&e.enqueue({type:`reasoning-end`,id:`reasoning-0`}),h&&e.enqueue({type:`text-end`,id:`txt-0`});for(let n of c.filter(e=>!e.hasFinished))e.enqueue({type:`tool-input-end`,id:n.id}),e.enqueue({type:`tool-call`,toolCallId:(t=n.id)??M(),toolName:n.function.name,input:n.function.arguments});let d={[p]:{},...a?.buildMetadata()};u.completionTokensDetails.acceptedPredictionTokens!=null&&(d[p].acceptedPredictionTokens=u.completionTokensDetails.acceptedPredictionTokens),u.completionTokensDetails.rejectedPredictionTokens!=null&&(d[p].rejectedPredictionTokens=u.completionTokensDetails.rejectedPredictionTokens),e.enqueue({type:`finish`,finishReason:l,usage:{inputTokens:(n=u.promptTokens)??void 0,outputTokens:(r=u.completionTokens)??void 0,totalTokens:(i=u.totalTokens)??void 0,reasoningTokens:(o=u.completionTokensDetails.reasoningTokens)??void 0,cachedInputTokens:(s=u.promptTokensDetails.cachedTokens)??void 0},providerMetadata:d})}})),request:{body:i},response:{headers:o}}}},ke=C.object({prompt_tokens:C.number().nullish(),completion_tokens:C.number().nullish(),total_tokens:C.number().nullish(),prompt_tokens_details:C.object({cached_tokens:C.number().nullish()}).nullish(),completion_tokens_details:C.object({reasoning_tokens:C.number().nullish(),accepted_prediction_tokens:C.number().nullish(),rejected_prediction_tokens:C.number().nullish()}).nullish()}).nullish(),Ae=C.object({id:C.string().nullish(),created:C.number().nullish(),model:C.string().nullish(),choices:C.array(C.object({message:C.object({role:C.literal(`assistant`).nullish(),content:C.string().nullish(),reasoning_content:C.string().nullish(),reasoning:C.string().nullish(),tool_calls:C.array(C.object({id:C.string().nullish(),function:C.object({name:C.string(),arguments:C.string()})})).nullish()}),finish_reason:C.string().nullish()})),usage:ke}),je=e=>C.union([C.object({id:C.string().nullish(),created:C.number().nullish(),model:C.string().nullish(),choices:C.array(C.object({delta:C.object({role:C.enum([`assistant`]).nullish(),content:C.string().nullish(),reasoning_content:C.string().nullish(),reasoning:C.string().nullish(),tool_calls:C.array(C.object({index:C.number(),id:C.string().nullish(),function:C.object({name:C.string().nullish(),arguments:C.string().nullish()})})).nullish()}).nullish(),finish_reason:C.string().nullish()})),usage:ke}),e]);function Me({prompt:e,user:t=`user`,assistant:n=`assistant`}){let r=``;e[0].role===`system`&&(r+=`${e[0].content}
|
|
1
|
+
import{__commonJSMin as e,__esmMin as t,__export as n,__require as r,__toCommonJS as i,__toESM as a}from"../chunk-___ucjiX.js";import{APICallError as o,EmptyResponseBodyError as s,EventSourceParserStream as c,InvalidArgumentError as l,InvalidPromptError as u,InvalidResponseDataError as d,JSONParseError as f,StreamResponseFormatHeader as p,TooManyEmbeddingValuesForCallError as m,TypeValidationError as h,UnsupportedFunctionalityError as g,client as _,convertToModelMessages as v,createUIMessageStream as y,getToolName as b,isToolUIPart as x}from"../http-BAfeJhFm.js";import S from"util";import{z as C}from"zod/v4";import{ZodFirstPartyTypeKind as w}from"zod/v3";import T from"http";function E(...e){return e.reduce((e,t)=>({...e,...t??{}}),{})}function D(e){return Object.fromEntries([...e.headers])}function O(e=globalThis){var t,n,r;return e.window?`runtime/browser`:(t=e.navigator)?.userAgent?`runtime/${e.navigator.userAgent.toLowerCase()}`:(r=(n=e.process)?.versions)?.node?`runtime/node.js/${e.process.version.substring(0)}`:e.EdgeRuntime?`runtime/vercel-edge`:`runtime/unknown`}function k(e){return Object.fromEntries(Object.entries(e).filter(([e,t])=>t!=null))}function A(e,...t){let n=k(e??{}),r=new Headers(n),i=r.get(`user-agent`)||``;return r.set(`user-agent`,[i,...t].filter(Boolean).join(` `)),Object.fromEntries(r)}var j=({prefix:e,size:t=16,alphabet:n=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz`,separator:r=`-`}={})=>{let i=()=>{let e=n.length,r=Array(t);for(let i=0;i<t;i++)r[i]=n[Math.random()*e|0];return r.join(``)};if(e==null)return i;if(n.includes(r))throw new l({argument:`separator`,message:`The separator "${r}" must not be part of the alphabet "${n}".`});return()=>`${e}${r}${i()}`},M=j();function N(e){return(e instanceof Error||e instanceof DOMException)&&(e.name===`AbortError`||e.name===`ResponseAborted`||e.name===`TimeoutError`)}var P=[`fetch failed`,`failed to fetch`];function F({error:e,url:t,requestBodyValues:n}){if(N(e))return e;if(e instanceof TypeError&&P.includes(e.message.toLowerCase())){let r=e.cause;if(r!=null)return new o({message:`Cannot connect to API: ${r.message}`,cause:r,url:t,requestBodyValues:n,isRetryable:!0})}return e}var I=`3.0.10`,L=/"__proto__"\s*:/,ee=/"constructor"\s*:/;function te(e){let t=JSON.parse(e);return typeof t!=`object`||!t||L.test(e)===!1&&ee.test(e)===!1?t:ne(t)}function ne(e){let t=[e];for(;t.length;){let e=t;t=[];for(let n of e){if(Object.prototype.hasOwnProperty.call(n,`__proto__`)||Object.prototype.hasOwnProperty.call(n,`constructor`)&&Object.prototype.hasOwnProperty.call(n.constructor,`prototype`))throw SyntaxError(`Object contains forbidden prototype property`);for(let e in n){let r=n[e];r&&typeof r==`object`&&t.push(r)}}}return e}function R(e){let{stackTraceLimit:t}=Error;Error.stackTraceLimit=0;try{return te(e)}finally{Error.stackTraceLimit=t}}var z=Symbol.for(`vercel.ai.validator`);function re(e){return{[z]:!0,validate:e}}function ie(e){return typeof e==`object`&&!!e&&z in e&&e[z]===!0&&`validate`in e}function ae(e){return ie(e)?e:oe(e)}function oe(e){return re(async t=>{let n=await e[`~standard`].validate(t);return n.issues==null?{success:!0,value:n.value}:{success:!1,error:new h({value:t,cause:n.issues})}})}async function se({value:e,schema:t}){let n=await ce({value:e,schema:t});if(!n.success)throw h.wrap({value:e,cause:n.error});return n.value}async function ce({value:e,schema:t}){let n=ae(t);try{if(n.validate==null)return{success:!0,value:e,rawValue:e};let t=await n.validate(e);return t.success?{success:!0,value:t.value,rawValue:e}:{success:!1,error:h.wrap({value:e,cause:t.error}),rawValue:e}}catch(t){return{success:!1,error:h.wrap({value:e,cause:t}),rawValue:e}}}async function le({text:e,schema:t}){try{let n=R(e);return t==null?n:se({value:n,schema:t})}catch(t){throw f.isInstance(t)||h.isInstance(t)?t:new f({text:e,cause:t})}}async function ue({text:e,schema:t}){try{let n=R(e);return t==null?{success:!0,value:n,rawValue:n}:await ce({value:n,schema:t})}catch(t){return{success:!1,error:f.isInstance(t)?t:new f({text:e,cause:t}),rawValue:void 0}}}function de(e){try{return R(e),!0}catch{return!1}}function fe({stream:e,schema:t}){return e.pipeThrough(new TextDecoderStream).pipeThrough(new c).pipeThrough(new TransformStream({async transform({data:e},n){e!==`[DONE]`&&n.enqueue(await ue({text:e,schema:t}))}}))}async function B({provider:e,providerOptions:t,schema:n}){if(t?.[e]==null)return;let r=await ce({value:t[e],schema:n});if(!r.success)throw new l({argument:`providerOptions`,message:`invalid ${e} provider options`,cause:r.error});return r.value}var pe=()=>globalThis.fetch,V=async({url:e,headers:t,body:n,failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o})=>H({url:e,headers:{"Content-Type":`application/json`,...t},body:{content:JSON.stringify(n),values:n},failedResponseHandler:r,successfulResponseHandler:i,abortSignal:a,fetch:o}),H=async({url:e,headers:t={},body:n,successfulResponseHandler:r,failedResponseHandler:i,abortSignal:a,fetch:s=pe()})=>{try{let c=await s(e,{method:`POST`,headers:A(t,`ai-sdk/provider-utils/${I}`,O()),body:n.content,signal:a}),l=D(c);if(!c.ok){let t;try{t=await i({response:c,url:e,requestBodyValues:n.values})}catch(t){throw N(t)||o.isInstance(t)?t:new o({message:`Failed to process error response`,cause:t,statusCode:c.status,url:e,responseHeaders:l,requestBodyValues:n.values})}throw t.value}try{return await r({response:c,url:e,requestBodyValues:n.values})}catch(t){throw t instanceof Error&&(N(t)||o.isInstance(t))?t:new o({message:`Failed to process successful response`,cause:t,statusCode:c.status,url:e,responseHeaders:l,requestBodyValues:n.values})}}catch(t){throw F({error:t,url:e,requestBodyValues:n.values})}},U=({errorSchema:e,errorToMessage:t,isRetryable:n})=>async({response:r,url:i,requestBodyValues:a})=>{let s=await r.text(),c=D(r);if(s.trim()===``)return{responseHeaders:c,value:new o({message:r.statusText,url:i,requestBodyValues:a,statusCode:r.status,responseHeaders:c,responseBody:s,isRetryable:n?.(r)})};try{let l=await le({text:s,schema:e});return{responseHeaders:c,value:new o({message:t(l),url:i,requestBodyValues:a,statusCode:r.status,responseHeaders:c,responseBody:s,data:l,isRetryable:n?.(r,l)})}}catch{return{responseHeaders:c,value:new o({message:r.statusText,url:i,requestBodyValues:a,statusCode:r.status,responseHeaders:c,responseBody:s,isRetryable:n?.(r)})}}},me=e=>async({response:t})=>{let n=D(t);if(t.body==null)throw new s({});return{responseHeaders:n,value:fe({stream:t.body,schema:e})}},W=e=>async({response:t,url:n,requestBodyValues:r})=>{let i=await t.text(),a=await ue({text:i,schema:e}),s=D(t);if(!a.success)throw new o({message:`Invalid JSON response`,cause:a.error,statusCode:t.status,responseHeaders:s,responseBody:i,url:n,requestBodyValues:r});return{responseHeaders:s,value:a.value,rawValue:a.rawValue}},{btoa:he,atob:ge}=globalThis;function _e(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCodePoint(e[n]);return he(t)}function ve(e){return e instanceof Uint8Array?_e(e):e}function ye(e){return e?.replace(/\/$/,``)}function be(e){var t,n;return(n=(t=e?.providerOptions)?.openaiCompatible)??{}}function xe(e){let t=[];for(let{role:n,content:r,...i}of e){let e=be({...i});switch(n){case`system`:t.push({role:`system`,content:r,...e});break;case`user`:if(r.length===1&&r[0].type===`text`){t.push({role:`user`,content:r[0].text,...be(r[0])});break}t.push({role:`user`,content:r.map(e=>{let t=be(e);switch(e.type){case`text`:return{type:`text`,text:e.text,...t};case`file`:if(e.mediaType.startsWith(`image/`)){let n=e.mediaType===`image/*`?`image/jpeg`:e.mediaType;return{type:`image_url`,image_url:{url:e.data instanceof URL?e.data.toString():`data:${n};base64,${ve(e.data)}`},...t}}else throw new g({functionality:`file part media type ${e.mediaType}`})}}),...e});break;case`assistant`:{let n=``,i=[];for(let e of r){let t=be(e);switch(e.type){case`text`:n+=e.text;break;case`tool-call`:i.push({id:e.toolCallId,type:`function`,function:{name:e.toolName,arguments:JSON.stringify(e.input)},...t});break}}t.push({role:`assistant`,content:n,tool_calls:i.length>0?i:void 0,...e});break}case`tool`:for(let e of r){let n=e.output,r;switch(n.type){case`text`:case`error-text`:r=n.value;break;case`content`:case`json`:case`error-json`:r=JSON.stringify(n.value);break}let i=be(e);t.push({role:`tool`,tool_call_id:e.toolCallId,content:r,...i})}break;default:{let e=n;throw Error(`Unsupported role: ${e}`)}}}return t}function Se({id:e,model:t,created:n}){return{id:e??void 0,modelId:t??void 0,timestamp:n==null?void 0:new Date(n*1e3)}}function Ce(e){switch(e){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 we=C.object({user:C.string().optional(),reasoningEffort:C.string().optional()}),Te=C.object({error:C.object({message:C.string(),type:C.string().nullish(),param:C.any().nullish(),code:C.union([C.string(),C.number()]).nullish()})}),Ee={errorSchema:Te,errorToMessage:e=>e.error.message};function De({tools:e,toolChoice:t}){e=e?.length?e:void 0;let n=[];if(e==null)return{tools:void 0,toolChoice:void 0,toolWarnings:n};let r=[];for(let t of e)t.type===`provider-defined`?n.push({type:`unsupported-tool`,tool:t}):r.push({type:`function`,function:{name:t.name,description:t.description,parameters:t.inputSchema}});if(t==null)return{tools:r,toolChoice:void 0,toolWarnings:n};let i=t.type;switch(i){case`auto`:case`none`:case`required`:return{tools:r,toolChoice:i,toolWarnings:n};case`tool`:return{tools:r,toolChoice:{type:`function`,function:{name:t.toolName}},toolWarnings:n};default:{let e=i;throw new g({functionality:`tool choice type: ${e}`})}}}var Oe=class{constructor(e,t){this.specificationVersion=`v2`;var n,r;this.modelId=e,this.config=t;let i=(n=t.errorStructure)??Ee;this.chunkSchema=je(i.errorSchema),this.failedResponseHandler=U(i),this.supportsStructuredOutputs=(r=t.supportsStructuredOutputs)??!1}get provider(){return this.config.provider}get providerOptionsName(){return this.config.provider.split(`.`)[0].trim()}get supportedUrls(){var e,t,n;return(n=(t=(e=this.config).supportedUrls)?.call(e))??{}}async getArgs({prompt:e,maxOutputTokens:t,temperature:n,topP:r,topK:i,frequencyPenalty:a,presencePenalty:o,providerOptions:s,stopSequences:c,responseFormat:l,seed:u,toolChoice:d,tools:f}){var p,m,h,g;let _=[],v=Object.assign((p=await B({provider:`openai-compatible`,providerOptions:s,schema:we}))??{},(m=await B({provider:this.providerOptionsName,providerOptions:s,schema:we}))??{});i!=null&&_.push({type:`unsupported-setting`,setting:`topK`}),l?.type===`json`&&l.schema!=null&&!this.supportsStructuredOutputs&&_.push({type:`unsupported-setting`,setting:`responseFormat`,details:`JSON response format schema is only supported with structuredOutputs`});let{tools:y,toolChoice:b,toolWarnings:x}=De({tools:f,toolChoice:d});return{args:{model:this.modelId,user:v.user,max_tokens:t,temperature:n,top_p:r,frequency_penalty:a,presence_penalty:o,response_format:l?.type===`json`?this.supportsStructuredOutputs===!0&&l.schema!=null?{type:`json_schema`,json_schema:{schema:l.schema,name:(h=l.name)??`response`,description:l.description}}:{type:`json_object`}:void 0,stop:c,seed:u,...Object.fromEntries(Object.entries((g=s?.[this.providerOptionsName])??{}).filter(([e])=>!Object.keys(we.shape).includes(e))),reasoning_effort:v.reasoningEffort,messages:xe(e),tools:y,tool_choice:b},warnings:[..._,...x]}}async doGenerate(e){var t,n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_;let{args:v,warnings:y}=await this.getArgs({...e}),b=JSON.stringify(v),{responseHeaders:x,value:S,rawValue:C}=await V({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:E(this.config.headers(),e.headers),body:v,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:W(Ae),abortSignal:e.abortSignal,fetch:this.config.fetch}),w=S.choices[0],T=[],D=w.message.content;D!=null&&D.length>0&&T.push({type:`text`,text:D});let O=(t=w.message.reasoning_content)??w.message.reasoning;if(O!=null&&O.length>0&&T.push({type:`reasoning`,text:O}),w.message.tool_calls!=null)for(let e of w.message.tool_calls)T.push({type:`tool-call`,toolCallId:(n=e.id)??M(),toolName:e.function.name,input:e.function.arguments});let k={[this.providerOptionsName]:{},...await(i=(r=this.config.metadataExtractor)?.extractMetadata)?.call(r,{parsedBody:C})},A=(a=S.usage)?.completion_tokens_details;return A?.accepted_prediction_tokens!=null&&(k[this.providerOptionsName].acceptedPredictionTokens=A?.accepted_prediction_tokens),A?.rejected_prediction_tokens!=null&&(k[this.providerOptionsName].rejectedPredictionTokens=A?.rejected_prediction_tokens),{content:T,finishReason:Ce(w.finish_reason),usage:{inputTokens:(s=(o=S.usage)?.prompt_tokens)??void 0,outputTokens:(l=(c=S.usage)?.completion_tokens)??void 0,totalTokens:(d=(u=S.usage)?.total_tokens)??void 0,reasoningTokens:(m=(p=(f=S.usage)?.completion_tokens_details)?.reasoning_tokens)??void 0,cachedInputTokens:(_=(g=(h=S.usage)?.prompt_tokens_details)?.cached_tokens)??void 0},providerMetadata:k,request:{body:b},response:{...Se(S),headers:x,body:C},warnings:y}}async doStream(e){var t;let{args:n,warnings:r}=await this.getArgs({...e}),i={...n,stream:!0,stream_options:this.config.includeUsage?{include_usage:!0}:void 0},a=(t=this.config.metadataExtractor)?.createStreamExtractor(),{responseHeaders:o,value:s}=await V({url:this.config.url({path:`/chat/completions`,modelId:this.modelId}),headers:E(this.config.headers(),e.headers),body:i,failedResponseHandler:this.failedResponseHandler,successfulResponseHandler:me(this.chunkSchema),abortSignal:e.abortSignal,fetch:this.config.fetch}),c=[],l=`unknown`,u={completionTokens:void 0,completionTokensDetails:{reasoningTokens:void 0,acceptedPredictionTokens:void 0,rejectedPredictionTokens:void 0},promptTokens:void 0,promptTokensDetails:{cachedTokens:void 0},totalTokens:void 0},f=!0,p=this.providerOptionsName,m=!1,h=!1;return{stream:s.pipeThrough(new TransformStream({start(e){e.enqueue({type:`stream-start`,warnings:r})},transform(t,n){var r,i,o,s,p,g,_,v,y,b,x,S,C;if(e.includeRawChunks&&n.enqueue({type:`raw`,rawValue:t.rawValue}),!t.success){l=`error`,n.enqueue({type:`error`,error:t.error});return}let w=t.value;if(a?.processChunk(t.rawValue),`error`in w){l=`error`,n.enqueue({type:`error`,error:w.error.message});return}if(f&&(f=!1,n.enqueue({type:`response-metadata`,...Se(w)})),w.usage!=null){let{prompt_tokens:e,completion_tokens:t,total_tokens:n,prompt_tokens_details:r,completion_tokens_details:i}=w.usage;u.promptTokens=e??void 0,u.completionTokens=t??void 0,u.totalTokens=n??void 0,i?.reasoning_tokens!=null&&(u.completionTokensDetails.reasoningTokens=i?.reasoning_tokens),i?.accepted_prediction_tokens!=null&&(u.completionTokensDetails.acceptedPredictionTokens=i?.accepted_prediction_tokens),i?.rejected_prediction_tokens!=null&&(u.completionTokensDetails.rejectedPredictionTokens=i?.rejected_prediction_tokens),r?.cached_tokens!=null&&(u.promptTokensDetails.cachedTokens=r?.cached_tokens)}let T=w.choices[0];if(T?.finish_reason!=null&&(l=Ce(T.finish_reason)),T?.delta==null)return;let E=T.delta,D=(r=E.reasoning_content)??E.reasoning;if(D&&(m||=(n.enqueue({type:`reasoning-start`,id:`reasoning-0`}),!0),n.enqueue({type:`reasoning-delta`,id:`reasoning-0`,delta:D})),E.content&&(h||=(n.enqueue({type:`text-start`,id:`txt-0`}),!0),n.enqueue({type:`text-delta`,id:`txt-0`,delta:E.content})),E.tool_calls!=null)for(let e of E.tool_calls){let t=e.index;if(c[t]==null){if(e.id==null)throw new d({data:e,message:`Expected 'id' to be a string.`});if((i=e.function)?.name==null)throw new d({data:e,message:`Expected 'function.name' to be a string.`});n.enqueue({type:`tool-input-start`,id:e.id,toolName:e.function.name}),c[t]={id:e.id,type:`function`,function:{name:e.function.name,arguments:(o=e.function.arguments)??``},hasFinished:!1};let r=c[t];(s=r.function)?.name!=null&&(p=r.function)?.arguments!=null&&(r.function.arguments.length>0&&n.enqueue({type:`tool-input-delta`,id:r.id,delta:r.function.arguments}),de(r.function.arguments)&&(n.enqueue({type:`tool-input-end`,id:r.id}),n.enqueue({type:`tool-call`,toolCallId:(g=r.id)??M(),toolName:r.function.name,input:r.function.arguments}),r.hasFinished=!0));continue}let r=c[t];if(r.hasFinished)continue;(_=e.function)?.arguments!=null&&(r.function.arguments+=(y=(v=e.function)?.arguments)??``),n.enqueue({type:`tool-input-delta`,id:r.id,delta:(b=e.function.arguments)??``}),(x=r.function)?.name!=null&&(S=r.function)?.arguments!=null&&de(r.function.arguments)&&(n.enqueue({type:`tool-input-end`,id:r.id}),n.enqueue({type:`tool-call`,toolCallId:(C=r.id)??M(),toolName:r.function.name,input:r.function.arguments}),r.hasFinished=!0)}},flush(e){var t,n,r,i,o,s;m&&e.enqueue({type:`reasoning-end`,id:`reasoning-0`}),h&&e.enqueue({type:`text-end`,id:`txt-0`});for(let n of c.filter(e=>!e.hasFinished))e.enqueue({type:`tool-input-end`,id:n.id}),e.enqueue({type:`tool-call`,toolCallId:(t=n.id)??M(),toolName:n.function.name,input:n.function.arguments});let d={[p]:{},...a?.buildMetadata()};u.completionTokensDetails.acceptedPredictionTokens!=null&&(d[p].acceptedPredictionTokens=u.completionTokensDetails.acceptedPredictionTokens),u.completionTokensDetails.rejectedPredictionTokens!=null&&(d[p].rejectedPredictionTokens=u.completionTokensDetails.rejectedPredictionTokens),e.enqueue({type:`finish`,finishReason:l,usage:{inputTokens:(n=u.promptTokens)??void 0,outputTokens:(r=u.completionTokens)??void 0,totalTokens:(i=u.totalTokens)??void 0,reasoningTokens:(o=u.completionTokensDetails.reasoningTokens)??void 0,cachedInputTokens:(s=u.promptTokensDetails.cachedTokens)??void 0},providerMetadata:d})}})),request:{body:i},response:{headers:o}}}},ke=C.object({prompt_tokens:C.number().nullish(),completion_tokens:C.number().nullish(),total_tokens:C.number().nullish(),prompt_tokens_details:C.object({cached_tokens:C.number().nullish()}).nullish(),completion_tokens_details:C.object({reasoning_tokens:C.number().nullish(),accepted_prediction_tokens:C.number().nullish(),rejected_prediction_tokens:C.number().nullish()}).nullish()}).nullish(),Ae=C.object({id:C.string().nullish(),created:C.number().nullish(),model:C.string().nullish(),choices:C.array(C.object({message:C.object({role:C.literal(`assistant`).nullish(),content:C.string().nullish(),reasoning_content:C.string().nullish(),reasoning:C.string().nullish(),tool_calls:C.array(C.object({id:C.string().nullish(),function:C.object({name:C.string(),arguments:C.string()})})).nullish()}),finish_reason:C.string().nullish()})),usage:ke}),je=e=>C.union([C.object({id:C.string().nullish(),created:C.number().nullish(),model:C.string().nullish(),choices:C.array(C.object({delta:C.object({role:C.enum([`assistant`]).nullish(),content:C.string().nullish(),reasoning_content:C.string().nullish(),reasoning:C.string().nullish(),tool_calls:C.array(C.object({index:C.number(),id:C.string().nullish(),function:C.object({name:C.string().nullish(),arguments:C.string().nullish()})})).nullish()}).nullish(),finish_reason:C.string().nullish()})),usage:ke}),e]);function Me({prompt:e,user:t=`user`,assistant:n=`assistant`}){let r=``;e[0].role===`system`&&(r+=`${e[0].content}
|
|
2
2
|
|
|
3
3
|
`,e=e.slice(1));for(let{role:i,content:a}of e)switch(i){case`system`:throw new u({message:"Unexpected system message in prompt: ${content}",prompt:e});case`user`:{let e=a.map(e=>{switch(e.type){case`text`:return e.text}}).filter(Boolean).join(``);r+=`${t}:
|
|
4
4
|
${e}
|
|
@@ -1513,7 +1513,13 @@ The structure MUST be as follows:
|
|
|
1513
1513
|
**Decision Rules (apply in order):**
|
|
1514
1514
|
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.
|
|
1515
1515
|
2. **Question to User:** If your last response ends with a direct question specifically addressed *to the user*, then the **'user'** should speak next.
|
|
1516
|
-
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=`
|
|
1516
|
+
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();
|
|
1517
|
+
/**
|
|
1518
|
+
* @license
|
|
1519
|
+
* Copyright 2025 Google LLC
|
|
1520
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
1521
|
+
*/
|
|
1522
|
+
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=`
|
|
1517
1523
|
|
|
1518
1524
|
This error was probably caused by cyclic schema references in one of the following tools, try disabling them with excludeTools:
|
|
1519
1525
|
|
package/dist/cli/index.js
CHANGED
|
@@ -17,6 +17,6 @@ Expecting one of '${n.join(`', '`)}'`);return this._lifeCycleHooks[e]?this._life
|
|
|
17
17
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
18
18
|
- ${r}`;throw Error(i)}_executeSubCommand(e,t){t=t.slice();let n=!1,s=[`.js`,`.ts`,`.tsx`,`.mjs`,`.cjs`];function c(e,t){let n=i.resolve(e,t);if(a.existsSync(n))return n;if(s.includes(i.extname(t)))return;let r=s.find(e=>a.existsSync(`${n}${e}`));if(r)return`${n}${r}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let u=e._executableFile||`${this._name}-${e._name}`,d=this._executableDir||``;if(this._scriptPath){let e;try{e=a.realpathSync(this._scriptPath)}catch{e=this._scriptPath}d=i.resolve(i.dirname(e),d)}if(d){let t=c(d,u);if(!t&&!e._executableFile&&this._scriptPath){let n=i.basename(this._scriptPath,i.extname(this._scriptPath));n!==this._name&&(t=c(d,`${n}-${e._name}`))}u=t||u}n=s.includes(i.extname(u));let f;if(o.platform===`win32`?(this._checkForMissingExecutable(u,d,e._name),t.unshift(u),t=g(o.execArgv).concat(t),f=r.spawn(o.execPath,t,{stdio:`inherit`})):n?(t.unshift(u),t=g(o.execArgv).concat(t),f=r.spawn(o.argv[0],t,{stdio:`inherit`})):f=r.spawn(u,t,{stdio:`inherit`}),!f.killed){let e=[`SIGUSR1`,`SIGUSR2`,`SIGTERM`,`SIGINT`,`SIGHUP`];e.forEach(e=>{o.on(e,()=>{f.killed===!1&&f.exitCode===null&&f.kill(e)})})}let p=this._exitCallback;f.on(`close`,e=>{e=e??1,p?p(new l(e,`commander.executeSubCommandAsync`,`(close)`)):o.exit(e)}),f.on(`error`,t=>{if(t.code===`ENOENT`)this._checkForMissingExecutable(u,d,e._name);else if(t.code===`EACCES`)throw Error(`'${u}' not executable`);if(!p)o.exit(1);else{let e=new l(1,`commander.executeSubCommandAsync`,`(error)`);e.nestedError=t,p(e)}}),this.runningCommand=f}_dispatchSubcommand(e,t,n){let r=this._findCommand(e);r||this.help({error:!0}),r._prepareForParse();let i;return i=this._chainOrCallSubCommandHook(i,r,`preSubcommand`),i=this._chainOrCall(i,()=>{if(r._executableHandler)this._executeSubCommand(r,t.concat(n));else return r._parseCommand(t,n)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??`--help`])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(e,t,n)=>{let r=t;if(t!==null&&e.parseArg){let i=`error: command-argument value '${t}' is invalid for argument '${e.name()}'.`;r=this._callParseArg(e,t,n,i)}return r};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,r)=>{let i=n.defaultValue;n.variadic?r<this.args.length?(i=this.args.slice(r),n.parseArg&&(i=i.reduce((t,r)=>e(n,r,t),n.defaultValue))):i===void 0&&(i=[]):r<this.args.length&&(i=this.args[r],n.parseArg&&(i=e(n,i,n.defaultValue))),t[r]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then==`function`?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,r=[];return this._getCommandAndAncestors().reverse().filter(e=>e._lifeCycleHooks[t]!==void 0).forEach(e=>{e._lifeCycleHooks[t].forEach(t=>{r.push({hookedCommand:e,callback:t})})}),t===`postAction`&&r.reverse(),r.forEach(e=>{n=this._chainOrCall(n,()=>e.callback(e.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let r=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(e=>{r=this._chainOrCall(r,()=>e(this,t))}),r}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let r=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){r(),this._processArguments();let n;return n=this._chainOrCallHooks(n,`preAction`),n=this._chainOrCall(n,()=>this._actionHandler(this.processedArgs)),this.parent&&(n=this._chainOrCall(n,()=>{this.parent.emit(i,e,t)})),n=this._chainOrCallHooks(n,`postAction`),n}if(this.parent&&this.parent.listenerCount(i))r(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand(`*`))return this._dispatchSubcommand(`*`,e,t);this.listenerCount(`command:*`)?this.emit(`command:*`,e,t):this.commands.length?this.unknownCommand():(r(),this._processArguments())}else this.commands.length?(r(),this.help({error:!0})):(r(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(e=>{let t=e.attributeName();return this.getOptionValue(t)===void 0?!1:this.getOptionValueSource(t)!==`default`}),t=e.filter(e=>e.conflictsWith.length>0);t.forEach(t=>{let n=e.find(e=>t.conflictsWith.includes(e.attributeName()));n&&this._conflictingOption(t,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],r=t,i=e.slice();function a(e){return e.length>1&&e[0]===`-`}let o=e=>/^-\d*\.?\d+(e[+-]?\d+)?$/.test(e)?!this._getCommandAndAncestors().some(e=>e.options.map(e=>e.short).some(e=>/^-\d$/.test(e))):!1,s=null;for(;i.length;){let e=i.shift();if(e===`--`){r===n&&r.push(e),r.push(...i);break}if(s&&(!a(e)||o(e))){this.emit(`option:${s.name()}`,e);continue}if(s=null,a(e)){let t=this._findOption(e);if(t){if(t.required){let e=i.shift();e===void 0&&this.optionMissingArgument(t),this.emit(`option:${t.name()}`,e)}else if(t.optional){let e=null;i.length>0&&(!a(i[0])||o(i[0]))&&(e=i.shift()),this.emit(`option:${t.name()}`,e)}else this.emit(`option:${t.name()}`);s=t.variadic?t:null;continue}}if(e.length>2&&e[0]===`-`&&e[1]!==`-`){let t=this._findOption(`-${e[1]}`);if(t){t.required||t.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${t.name()}`,e.slice(2)):(this.emit(`option:${t.name()}`),i.unshift(`-${e.slice(2)}`));continue}}if(/^--[^=]+=/.test(e)){let t=e.indexOf(`=`),n=this._findOption(e.slice(0,t));if(n&&(n.required||n.optional)){this.emit(`option:${n.name()}`,e.slice(t+1));continue}}if(r===t&&a(e)&&!(this.commands.length===0&&o(e))&&(r=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(e)){t.push(e),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&e===this._getHelpCommand().name()){t.push(e),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(e),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){r.push(e),i.length>0&&r.push(...i);break}r.push(e)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let t=this.options[n].attributeName();e[t]=t===this._versionOptionName?this._version:this[t]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}\n`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==`string`?this._outputConfiguration.writeErr(`${this._showHelpAfterError}\n`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
19
19
|
`),this.outputHelp({error:!0}));let n=t||{},r=n.exitCode||1,i=n.code||`commander.error`;this._exit(r,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in o.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||[`default`,`config`,`env`].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,o.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new p(this.options),t=e=>this.getOptionValue(e)!==void 0&&![`default`,`implied`].includes(this.getOptionValueSource(e));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(e=>{Object.keys(e.implied).filter(e=>!t(e)).forEach(t=>{this.setOptionValueWithSource(t,e.implied[t],`implied`)})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:`commander.missingArgument`})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:`commander.optionMissingArgument`})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:`commander.missingMandatoryOptionValue`})}_conflictingOption(e,t){let n=e=>{let t=e.attributeName(),n=this.getOptionValue(t),r=this.options.find(e=>e.negate&&t===e.attributeName()),i=this.options.find(e=>!e.negate&&t===e.attributeName());return r&&(r.presetArg===void 0&&n===!1||r.presetArg!==void 0&&n===r.presetArg)?r:i||e},r=e=>{let t=n(e),r=t.attributeName(),i=this.getOptionValueSource(r);return i===`env`?`environment variable '${t.envVar}'`:`option '${t.flags}'`},i=`error: ${r(e)} cannot be used with ${r(t)}`;this.error(i,{code:`commander.conflictingOption`})}unknownOption(e){if(this._allowUnknownOption)return;let t=``;if(e.startsWith(`--`)&&this._showSuggestionAfterError){let n=[],r=this;do{let e=r.createHelp().visibleOptions(r).filter(e=>e.long).map(e=>e.long);n=n.concat(e),r=r.parent}while(r&&!r._enablePositionalOptions);t=m(e,n)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:`commander.unknownOption`})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?``:`s`,r=this.parent?` for '${this.name()}'`:``,i=`error: too many arguments${r}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:`commander.excessArguments`})}unknownCommand(){let e=this.args[0],t=``;if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(e=>{n.push(e.name()),e.alias()&&n.push(e.alias())}),t=m(e,n)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:`commander.unknownCommand`})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||`-V, --version`,n=n||`output the version number`;let r=this.createOption(t,n);return this._versionOptionName=r.attributeName(),this._registerOption(r),this.on(`option:`+r.name(),()=>{this._outputConfiguration.writeOut(`${e}\n`),this._exit(0,`commander.version`,e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw Error(`Command alias can't be the same as its name`);let n=this.parent?._findCommand(e);if(n){let t=[n.name()].concat(n.aliases()).join(`|`);throw Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${t}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(e=>this.alias(e)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let e=this.registeredArguments.map(e=>c(e));return[].concat(this.options.length||this._helpOption!==null?`[options]`:[],this.commands.length?`[command]`:[],this.registeredArguments.length?e:[]).join(` `)}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}helpGroup(e){return e===void 0?this._helpGroupHeading??``:(this._helpGroupHeading=e,this)}commandsGroup(e){return e===void 0?this._defaultCommandGroup??``:(this._defaultCommandGroup=e,this)}optionsGroup(e){return e===void 0?this._defaultOptionGroup??``:(this._defaultOptionGroup=e,this)}_initOptionGroup(e){this._defaultOptionGroup&&!e.helpGroupHeading&&e.helpGroup(this._defaultOptionGroup)}_initCommandGroup(e){this._defaultCommandGroup&&!e.helpGroup()&&e.helpGroup(this._defaultCommandGroup)}nameFromFilename(e){return this._name=i.basename(e,i.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp(),n=this._getOutputContext(e);t.prepareContext({error:n.error,helpWidth:n.helpWidth,outputHasColors:n.hasColors});let r=t.formatHelp(this,t);return n.hasColors?r:this._outputConfiguration.stripColor(r)}_getOutputContext(e){e=e||{};let t=!!e.error,n,r,i;t?(n=e=>this._outputConfiguration.writeErr(e),r=this._outputConfiguration.getErrHasColors(),i=this._outputConfiguration.getErrHelpWidth()):(n=e=>this._outputConfiguration.writeOut(e),r=this._outputConfiguration.getOutHasColors(),i=this._outputConfiguration.getOutHelpWidth());let a=e=>(r||(e=this._outputConfiguration.stripColor(e)),n(e));return{error:t,write:a,hasColors:r,helpWidth:i}}outputHelp(e){let t;typeof e==`function`&&(t=e,e=void 0);let n=this._getOutputContext(e),r={error:n.error,write:n.write,command:this};this._getCommandAndAncestors().reverse().forEach(e=>e.emit(`beforeAllHelp`,r)),this.emit(`beforeHelp`,r);let i=this.helpInformation({error:n.error});if(t&&(i=t(i),typeof i!=`string`&&!Buffer.isBuffer(i)))throw Error(`outputHelp callback must return a string or a Buffer`);n.write(i),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit(`afterHelp`,r),this._getCommandAndAncestors().forEach(e=>e.emit(`afterAllHelp`,r))}helpOption(e,t){return typeof e==`boolean`?(e?(this._helpOption===null&&(this._helpOption=void 0),this._defaultOptionGroup&&this._initOptionGroup(this._getHelpOption())):this._helpOption=null,this):(this._helpOption=this.createOption(e??`-h, --help`,t??`display help for command`),(e||t)&&this._initOptionGroup(this._helpOption),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this._initOptionGroup(e),this}help(e){this.outputHelp(e);let t=Number(o.exitCode??0);t===0&&e&&typeof e!=`function`&&e.error&&(t=1),this._exit(t,`commander.help`,`(outputHelp)`)}addHelpText(e,t){let n=[`beforeAll`,`before`,`after`,`afterAll`];if(!n.includes(e))throw Error(`Unexpected value for position to addHelpText.
|
|
20
|
-
Expecting one of '${n.join(`', '`)}'`);let r=`${e}Help`;return this.on(r,e=>{let n;n=typeof t==`function`?t({error:e.error,command:e.command}):t,n&&e.write(`${n}\n`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption(),n=t&&e.find(e=>t.is(e));n&&(this.outputHelp(),this._exit(0,`commander.helpDisplayed`,`(outputHelp)`))}};function g(e){return e.map(e=>{if(!e.startsWith(`--inspect`))return e;let t,n=`127.0.0.1`,r=`9229`,i;return(i=e.match(/^(--inspect(-brk)?)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],r=i[4]):(t=i[1],/^\d+$/.test(i[3])?r=i[3]:n=i[3]):t=i[1],t&&r!==`0`?`${t}=${n}:${parseInt(r)+1}`:e})}function _(){if(o.env.NO_COLOR||o.env.FORCE_COLOR===`0`||o.env.FORCE_COLOR===`false`)return!1;if(o.env.FORCE_COLOR||o.env.CLICOLOR_FORCE!==void 0)return!0}exports.Command=h,exports.useColor=_})),A=e((exports=>{let{Argument:t}=T(),{Command:n}=k(),{CommanderError:r,InvalidArgumentError:i}=w(),{Help:a}=E(),{Option:o}=D();exports.program=new n,exports.createCommand=e=>new n(e),exports.createOption=(e,t)=>new o(e,t),exports.createArgument=(e,n)=>new t(e,n),exports.Command=n,exports.Option=o,exports.Argument=t,exports.Help=a,exports.CommanderError=r,exports.InvalidArgumentError=i,exports.InvalidOptionArgumentError=i})),j=n(A(),1);const{program:M,createCommand:N,createArgument:P,createOption:F,CommanderError:I,InvalidArgumentError:L,InvalidOptionArgumentError:R,Command:z,Argument:B,Option:V,Help:H}=j.default;var U=`0.1.
|
|
20
|
+
Expecting one of '${n.join(`', '`)}'`);let r=`${e}Help`;return this.on(r,e=>{let n;n=typeof t==`function`?t({error:e.error,command:e.command}):t,n&&e.write(`${n}\n`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption(),n=t&&e.find(e=>t.is(e));n&&(this.outputHelp(),this._exit(0,`commander.helpDisplayed`,`(outputHelp)`))}};function g(e){return e.map(e=>{if(!e.startsWith(`--inspect`))return e;let t,n=`127.0.0.1`,r=`9229`,i;return(i=e.match(/^(--inspect(-brk)?)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))===null?(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],r=i[4]):(t=i[1],/^\d+$/.test(i[3])?r=i[3]:n=i[3]):t=i[1],t&&r!==`0`?`${t}=${n}:${parseInt(r)+1}`:e})}function _(){if(o.env.NO_COLOR||o.env.FORCE_COLOR===`0`||o.env.FORCE_COLOR===`false`)return!1;if(o.env.FORCE_COLOR||o.env.CLICOLOR_FORCE!==void 0)return!0}exports.Command=h,exports.useColor=_})),A=e((exports=>{let{Argument:t}=T(),{Command:n}=k(),{CommanderError:r,InvalidArgumentError:i}=w(),{Help:a}=E(),{Option:o}=D();exports.program=new n,exports.createCommand=e=>new n(e),exports.createOption=(e,t)=>new o(e,t),exports.createArgument=(e,n)=>new t(e,n),exports.Command=n,exports.Option=o,exports.Argument=t,exports.Help=a,exports.CommanderError=r,exports.InvalidArgumentError=i,exports.InvalidOptionArgumentError=i})),j=n(A(),1);const{program:M,createCommand:N,createArgument:P,createOption:F,CommanderError:I,InvalidArgumentError:L,InvalidOptionArgumentError:R,Command:z,Argument:B,Option:V,Help:H}=j.default;var U=`0.1.57`;async function W(e){e||(e=process.cwd());let t=o(e);await t.build({cwd:e,entry:t.entry,outdir:t.outdir,watch:!1,onStart:()=>{console.log(`Building agent...`)},onResult:e=>{`error`in e&&(console.error(e.error),process.exit(1));for(let t of e.warnings)console.warn(t.message);console.log(`Built agent to ${e.entry}`)}})}var G=n(a(),1);async function K(e,t){e||(e=process.cwd());let n=await c(),r=new s({authToken:n}),a=await i(e,`package.json`);if(!a)throw Error(`package.json not found`);let m=await S(a,`utf-8`),w=JSON.parse(m),T=g(a),E=_(T,`.blink`,`config.json`),D={};if(v(E)){let e=await S(E,`utf-8`);D=JSON.parse(e)}let O;if(D?.organizationId)try{let e=await r.organizations.get(D.organizationId);O=e.name}catch(e){D.organizationId=void 0}if(!D?.organizationId){let e=await r.organizations.list();if(e.length===1){let t=e[0];D.organizationId=t.id,O=t.name}else{let t=await f({message:`Which organization should contain this agent?`,options:e.map(e=>({value:e.id,label:e.name}))});if(d(t))return;D.organizationId=t,O=e.find(e=>e.id===t).name}}if(!D.organizationId)throw Error(`Developer error: No organization ID found.`);let k;if(D?.agentId)try{let e=await r.agents.get(D.agentId);k=e.name}catch(e){D.agentId=void 0}if(!D?.agentId)try{let e=await r.organizations.agents.get({organization_id:D.organizationId,agent_name:w.name});D.agentId=e.id,k=e.name}catch(e){let t=await r.agents.create({name:w.name,organization_id:D.organizationId});D.agentId=t.id,k=t.name}if(!D.agentId)throw Error(`Developer error: No agent ID found.`);await y(g(E),{recursive:!0}),await x(E,JSON.stringify({_:`This file can be source controlled. It contains no secrets.`,...D},null,2),`utf-8`);let A=o(T),j=await new Promise((e,t)=>{A.build({cwd:T,entry:A.entry,outdir:A.outdir,watch:!1,onStart:()=>{},onResult:t=>{e(t)}}).catch(t)});if(!j)throw Error(`Failed to build agent`);if(`error`in j)throw Error(j.error.message);let M={},N=await b(j.outdir);for(let e of N)M[_(j.outdir,e)]=e;let P=_(e,`README.md`);await q(P)&&(M[P]=`README.md`);let F=[],I=Object.keys(M).length,L=0,R=0;for(let[e,t]of Object.entries(M)){let n=await C(e),i=n.size;Y(`${l.dim(`[${L+1}/${I}]`)} Uploading ${t} (${J(i)})...`);let a=await S(e),o=await r.files.upload(new File([a],t));F.push({path:t,id:o.id}),L+=1,R+=i}Y(`${l.dim(`[${L}/${I}]`)} Uploaded files (${J(R)}).`),process.stdout.write(`
|
|
21
21
|
`);let z=_(e,`.env.local`),B=[];if(await q(z)){let e=(0,G.parse)(await S(z,`utf-8`));B=Object.keys(e)}let V=[],H=await r.agents.env.list({agent_id:D.agentId});V=H.map(e=>e.key);let U=_(e,`.env.production`);if(await q(U)){let e=(0,G.parse)(await S(U,`utf-8`)),t=Object.entries(e),n=t.length,i=0;for(let[e,a]of t){let t=await r.agents.env.create({agent_id:D.agentId,key:e,value:a,target:[`production`,`preview`],secret:!0,upsert:!0});V.push(t.key),i+=1,Y(`${l.dim(`[${i}/${n}]`)} Updating environment variable: ${e} ${l.dim(`(.env.production)`)}`)}Y(`${l.dim(`[${i}/${n}]`)} Updated environment variables! ${l.dim(`(.env.production)`)}`),process.stdout.write(`
|
|
22
|
-
`)}let W=B.filter(e=>!V.includes(e));if(W.length>0){console.log(`Warning: The following environment variables are set in .env.local but not in .env.production:`);for(let e of W)console.log(`- ${e}`);let e=await p({message:`Do you want to deploy anyway?`});if(e===!1||d(e))return}let K=await r.agents.deployments.create({agent_id:D.agentId,target:`production`,entrypoint:h(j.entry),files:F,message:t?.message}),X=`https://blink.so/${O}/${k}/deployments/${K.number}`;console.log(`Deployed:`,X);let Z=u();Z.start(`Waiting for deployment to be live...`);try{for(;;){let e=await r.agents.deployments.get({agent_id:D.agentId,deployment_id:K.id});if(e.status===`success`){let t=`Deployment successful.`;e.target===`production`&&(t+=` All chats will use this deployment!`),Z.stop(t);break}if(e.status===`failed`){let t=`Deployment failed.`;e.error_message&&(t+=` ${e.error_message}`),Z.stop(t),console.log(`Read logs for details:`,X);return}await new Promise(e=>setTimeout(e,500))}}catch(e){Z.stop(`Failed to poll for deployment status.`),console.log(`Read logs for details:`,X);return}}const q=async e=>{try{return await C(e),!0}catch(e){return!1}};function J(e){if(e===0)return`0B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`,`TB`],r=Math.floor(Math.log(e)/Math.log(t)),i=e/Math.pow(t,r);return`${i.toFixed(i>=100?0:i>=10?1:2)}${n[r]}`}function Y(e){if(process.stdout.isTTY)try{process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e);return}catch{}console.log(e)}globalThis.WebSocket||(globalThis.WebSocket=r.default),globalThis.crypto||(globalThis.crypto={}),globalThis.crypto.randomUUID||(globalThis.crypto.randomUUID=()=>m()),M.name(`blink`).description(`Blink is a runtime for building and deploying AI agents.`).version(U).action(()=>{M.outputHelp()});const X=e=>async(...t)=>{let{default:n}=await e();return n(...t)};M.command(`init [directory]`).description(`Initialize a new Blink agent.`).action(X(()=>import(`./init-B61NlodJ.js`))),M.command(`dev [directory] [options]`).description(`Start a development server for your agent.`).action(X(()=>import(`./dev-
|
|
22
|
+
`)}let W=B.filter(e=>!V.includes(e));if(W.length>0){console.log(`Warning: The following environment variables are set in .env.local but not in .env.production:`);for(let e of W)console.log(`- ${e}`);let e=await p({message:`Do you want to deploy anyway?`});if(e===!1||d(e))return}let K=await r.agents.deployments.create({agent_id:D.agentId,target:`production`,entrypoint:h(j.entry),files:F,message:t?.message}),X=`https://blink.so/${O}/${k}/deployments/${K.number}`;console.log(`Deployed:`,X);let Z=u();Z.start(`Waiting for deployment to be live...`);try{for(;;){let e=await r.agents.deployments.get({agent_id:D.agentId,deployment_id:K.id});if(e.status===`success`){let t=`Deployment successful.`;e.target===`production`&&(t+=` All chats will use this deployment!`),Z.stop(t);break}if(e.status===`failed`){let t=`Deployment failed.`;e.error_message&&(t+=` ${e.error_message}`),Z.stop(t),console.log(`Read logs for details:`,X);return}await new Promise(e=>setTimeout(e,500))}}catch(e){Z.stop(`Failed to poll for deployment status.`),console.log(`Read logs for details:`,X);return}}const q=async e=>{try{return await C(e),!0}catch(e){return!1}};function J(e){if(e===0)return`0B`;let t=1024,n=[`B`,`KB`,`MB`,`GB`,`TB`],r=Math.floor(Math.log(e)/Math.log(t)),i=e/Math.pow(t,r);return`${i.toFixed(i>=100?0:i>=10?1:2)}${n[r]}`}function Y(e){if(process.stdout.isTTY)try{process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(e);return}catch{}console.log(e)}globalThis.WebSocket||(globalThis.WebSocket=r.default),globalThis.crypto||(globalThis.crypto={}),globalThis.crypto.randomUUID||(globalThis.crypto.randomUUID=()=>m()),M.name(`blink`).description(`Blink is a runtime for building and deploying AI agents.`).version(U).action(()=>{M.outputHelp()});const X=e=>async(...t)=>{let{default:n}=await e();return n(...t)};M.command(`init [directory]`).description(`Initialize a new Blink agent.`).action(X(()=>import(`./init-B61NlodJ.js`))),M.command(`dev [directory] [options]`).description(`Start a development server for your agent.`).action(X(()=>import(`./dev-Duxv_J6v.js`))),M.command(`deploy [directory]`).description(`Deploy your agent to the Blink Cloud.`).option(`-m, --message <message>`,`Message for this deployment`).action(K),M.command(`build [directory]`).description(`Build your agent for production.`).action(W),M.command(`telemetry [boolean]`).description(`Enable or disable telemetry.`),M.command(`start [directory]`).description("Starts the Blink runtime in production mode. The agent must be compiled with `blink build` first."),M.command(`connect`,{hidden:!0}).description(`Connect compute to the Blink Cloud.`).action(X(()=>import(`./connect-BHyGYU8L.js`))),M.command(`chat`,{hidden:!0}).description(`Start a Blink chat connected to your machine.`).action(X(()=>import(`./chat-L0VBV1Zr.js`))),M.command(`login`,{hidden:!0}).description(`Log in to the Blink Cloud.`).action(X(()=>import(`./login-DKW_KVCA.js`))),M.parse(process.argv);export{};
|
package/dist/http/api.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../chunk-hhQzssFb.cjs`),t=require(`../cookie-C9-j7DLy.cjs`);var n=(e,t,n)=>(r,i)=>{let a=-1;return o(0);async function o(s){if(s<=a)throw Error(`next() called multiple times`);a=s;let c,l=!1,u;if(e[s]?(u=e[s][0][0],r.req.routeIndex=s):u=s===e.length&&i||void 0,u)try{c=await u(r,()=>o(s+1))}catch(e){if(e instanceof Error&&t)r.error=e,c=await t(e,r),l=!0;else throw e}else r.finalized===!1&&n&&(c=await n(r));return c&&(r.finalized===!1||l)&&(r.res=c),r}},r=Symbol(),i=async(e,t=Object.create(null))=>{let{all:n=!1,dot:r=!1}=t,i=e instanceof u?e.raw.headers:e.headers,o=i.get(`Content-Type`);return o?.startsWith(`multipart/form-data`)||o?.startsWith(`application/x-www-form-urlencoded`)?a(e,{all:n,dot:r}):{}};async function a(e,t){let n=await e.formData();return n?o(n,t):{}}function o(e,t){let n=Object.create(null);return e.forEach((e,r)=>{let i=t.all||r.endsWith(`[]`);i?s(n,r,e):n[r]=e}),t.dot&&Object.entries(n).forEach(([e,t])=>{let r=e.includes(`.`);r&&(c(n,e,t),delete n[e])}),n}var s=(e,t,n)=>{e[t]===void 0?t.endsWith(`[]`)?e[t]=[n]:e[t]=n:Array.isArray(e[t])?e[t].push(n):e[t]=[e[t],n]},c=(e,t,n)=>{let r=e,i=t.split(`.`);i.forEach((e,t)=>{t===i.length-1?r[e]=n:((!r[e]||typeof r[e]!=`object`||Array.isArray(r[e])||r[e]instanceof File)&&(r[e]=Object.create(null)),r=r[e])})},l=e=>t.tryDecode(e,t.decodeURIComponent_),u=class{raw;#validatedData;#matchResult;routeIndex=0;path;bodyCache={};constructor(e,t=`/`,n=[[]]){this.raw=e,this.path=t,this.#matchResult=n,this.#validatedData={}}param(e){return e?this.#getDecodedParam(e):this.#getAllDecodedParams()}#getDecodedParam(e){let t=this.#matchResult[0][this.routeIndex][1][e],n=this.#getParamValue(t);return n&&/\%/.test(n)?l(n):n}#getAllDecodedParams(){let e={},t=Object.keys(this.#matchResult[0][this.routeIndex][1]);for(let n of t){let t=this.#getParamValue(this.#matchResult[0][this.routeIndex][1][n]);t!==void 0&&(e[n]=/\%/.test(t)?l(t):t)}return e}#getParamValue(e){return this.#matchResult[1]?this.#matchResult[1][e]:e}query(e){return t.getQueryParam(this.url,e)}queries(e){return t.getQueryParams(this.url,e)}header(e){if(e)return this.raw.headers.get(e)??void 0;let t={};return this.raw.headers.forEach((e,n)=>{t[n]=e}),t}async parseBody(e){return this.bodyCache.parsedBody??=await i(this,e)}#cachedBody=e=>{let{bodyCache:t,raw:n}=this,r=t[e];if(r)return r;let i=Object.keys(t)[0];return i?t[i].then(t=>(i===`json`&&(t=JSON.stringify(t)),new Response(t)[e]())):t[e]=n[e]()};json(){return this.#cachedBody(`text`).then(e=>JSON.parse(e))}text(){return this.#cachedBody(`text`)}arrayBuffer(){return this.#cachedBody(`arrayBuffer`)}blob(){return this.#cachedBody(`blob`)}formData(){return this.#cachedBody(`formData`)}addValidatedData(e,t){this.#validatedData[e]=t}valid(e){return this.#validatedData[e]}get url(){return this.raw.url}get method(){return this.raw.method}get[r](){return this.#matchResult}get matchedRoutes(){return this.#matchResult[0].map(([[,e]])=>e)}get routePath(){return this.#matchResult[0].map(([[,e]])=>e)[this.routeIndex].path}},d={Stringify:1,BeforeStream:2,Stream:3},f=(e,t)=>{let n=new String(e);return n.isEscaped=!0,n.callbacks=t,n},p=async(e,t,n,r,i)=>{typeof e==`object`&&!(e instanceof String)&&(e instanceof Promise||(e=e.toString()),e instanceof Promise&&(e=await e));let a=e.callbacks;if(!a?.length)return Promise.resolve(e);i?i[0]+=e:i=[e];let o=Promise.all(a.map(e=>e({phase:t,buffer:i,context:r}))).then(e=>Promise.all(e.filter(Boolean).map(e=>p(e,t,!1,r,i))).then(()=>i[0]));return n?f(await o,a):o},m=`text/plain; charset=UTF-8`,h=(e,t)=>({"Content-Type":e,...t}),g=class{#rawRequest;#req;env={};#var;finalized=!1;error;#status;#executionCtx;#res;#layout;#renderer;#notFoundHandler;#preparedHeaders;#matchResult;#path;constructor(e,t){this.#rawRequest=e,t&&(this.#executionCtx=t.executionCtx,this.env=t.env,this.#notFoundHandler=t.notFoundHandler,this.#path=t.path,this.#matchResult=t.matchResult)}get req(){return this.#req??=new u(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(e){if(this.#res&&e){e=new Response(e.body,e);for(let[t,n]of this.#res.headers.entries()){if(t===`content-type`)continue;if(t===`set-cookie`){let t=this.#res.headers.getSetCookie();e.headers.delete(`set-cookie`);for(let n of t)e.headers.append(`set-cookie`,n)}else e.headers.set(t,n)}}this.#res=e,this.finalized=!0}render=(...e)=>(this.#renderer??=e=>this.html(e),this.#renderer(...e));setLayout=e=>this.#layout=e;getLayout=()=>this.#layout;setRenderer=e=>{this.#renderer=e};header=(e,t,n)=>{this.finalized&&(this.#res=new Response(this.#res.body,this.#res));let r=this.#res?this.#res.headers:this.#preparedHeaders??=new Headers;t===void 0?r.delete(e):n?.append?r.append(e,t):r.set(e,t)};status=e=>{this.#status=e};set=(e,t)=>{this.#var??=new Map,this.#var.set(e,t)};get=e=>this.#var?this.#var.get(e):void 0;get var(){return this.#var?Object.fromEntries(this.#var):{}}#newResponse(e,t,n){let r=this.#res?new Headers(this.#res.headers):this.#preparedHeaders??new Headers;if(typeof t==`object`&&`headers`in t){let e=t.headers instanceof Headers?t.headers:new Headers(t.headers);for(let[t,n]of e)t.toLowerCase()===`set-cookie`?r.append(t,n):r.set(t,n)}if(n)for(let[e,t]of Object.entries(n))if(typeof t==`string`)r.set(e,t);else{r.delete(e);for(let n of t)r.append(e,n)}let i=typeof t==`number`?t:t?.status??this.#status;return new Response(e,{status:i,headers:r})}newResponse=(...e)=>this.#newResponse(...e);body=(e,t,n)=>this.#newResponse(e,t,n);text=(e,t,n)=>!this.#preparedHeaders&&!this.#status&&!t&&!n&&!this.finalized?new Response(e):this.#newResponse(e,t,h(m,n));json=(e,t,n)=>this.#newResponse(JSON.stringify(e),t,h(`application/json`,n));html=(e,t,n)=>{let r=e=>this.#newResponse(e,t,h(`text/html; charset=UTF-8`,n));return typeof e==`object`?p(e,d.Stringify,!1,{}).then(r):r(e)};redirect=(e,t)=>{let n=String(e);return this.header(`Location`,/[^\x00-\xFF]/.test(n)?encodeURI(n):n),this.newResponse(null,t??302)};notFound=()=>(this.#notFoundHandler??=()=>new Response,this.#notFoundHandler(this))},_=`ALL`,ee=`all`,v=[`get`,`post`,`put`,`delete`,`options`,`patch`],y=`Can not add a route since the matcher is already built.`,b=class extends Error{},te=`__COMPOSED_HANDLER`,x=e=>e.text(`404 Not Found`,404),S=(e,t)=>{if(`getResponse`in e){let n=e.getResponse();return t.newResponse(n.body,n)}return console.error(e),t.text(`Internal Server Error`,500)},C=class{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath=`/`;#path=`/`;routes=[];constructor(e={}){let n=[...v,ee];n.forEach(e=>{this[e]=(t,...n)=>(typeof t==`string`?this.#path=t:this.#addRoute(e,this.#path,t),n.forEach(t=>{this.#addRoute(e,this.#path,t)}),this)}),this.on=(e,t,...n)=>{for(let r of[t].flat()){this.#path=r;for(let t of[e].flat())n.map(e=>{this.#addRoute(t.toUpperCase(),this.#path,e)})}return this},this.use=(e,...t)=>(typeof e==`string`?this.#path=e:(this.#path=`*`,t.unshift(e)),t.forEach(e=>{this.#addRoute(_,this.#path,e)}),this);let{strict:r,...i}=e;Object.assign(this,i),this.getPath=r??!0?e.getPath??t.getPath:t.getPathNoStrict}#clone(){let e=new C({router:this.router,getPath:this.getPath});return e.errorHandler=this.errorHandler,e.#notFoundHandler=this.#notFoundHandler,e.routes=this.routes,e}#notFoundHandler=x;errorHandler=S;route(e,t){let r=this.basePath(e);return t.routes.map(e=>{let i;t.errorHandler===S?i=e.handler:(i=async(r,i)=>(await n([],t.errorHandler)(r,()=>e.handler(r,i))).res,i[te]=e.handler),r.#addRoute(e.method,e.path,i)}),this}basePath(e){let n=this.#clone();return n._basePath=t.mergePath(this._basePath,e),n}onError=e=>(this.errorHandler=e,this);notFound=e=>(this.#notFoundHandler=e,this);mount(e,n,r){let i,a;r&&(typeof r==`function`?a=r:(a=r.optionHandler,i=r.replaceRequest===!1?e=>e:r.replaceRequest));let o=a?e=>{let t=a(e);return Array.isArray(t)?t:[t]}:e=>{let t;try{t=e.executionCtx}catch{}return[e.env,t]};i||=(()=>{let n=t.mergePath(this._basePath,e),r=n===`/`?0:n.length;return e=>{let t=new URL(e.url);return t.pathname=t.pathname.slice(r)||`/`,new Request(t,e)}})();let s=async(e,t)=>{let r=await n(i(e.req.raw),...o(e));if(r)return r;await t()};return this.#addRoute(_,t.mergePath(e,`*`),s),this}#addRoute(e,n,r){e=e.toUpperCase(),n=t.mergePath(this._basePath,n);let i={basePath:this._basePath,path:n,method:e,handler:r};this.router.add(e,n,[r,i]),this.routes.push(i)}#handleError(e,t){if(e instanceof Error)return this.errorHandler(e,t);throw e}#dispatch(e,t,r,i){if(i===`HEAD`)return(async()=>new Response(null,await this.#dispatch(e,t,r,`GET`)))();let a=this.getPath(e,{env:r}),o=this.router.match(i,a),s=new g(e,{path:a,matchResult:o,env:r,executionCtx:t,notFoundHandler:this.#notFoundHandler});if(o[0].length===1){let e;try{e=o[0][0][0][0](s,async()=>{s.res=await this.#notFoundHandler(s)})}catch(e){return this.#handleError(e,s)}return e instanceof Promise?e.then(e=>e||(s.finalized?s.res:this.#notFoundHandler(s))).catch(e=>this.#handleError(e,s)):e??this.#notFoundHandler(s)}let c=n(o[0],this.errorHandler,this.#notFoundHandler);return(async()=>{try{let e=await c(s);if(!e.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return e.res}catch(e){return this.#handleError(e,s)}})()}fetch=(e,...t)=>this.#dispatch(e,t[1],t[0],e.method);request=(e,n,r,i)=>e instanceof Request?this.fetch(n?new Request(e,n):e,r,i):(e=e.toString(),this.fetch(new Request(/^https?:\/\//.test(e)?e:`http://localhost${t.mergePath(`/`,e)}`,n),r,i));fire=()=>{addEventListener(`fetch`,e=>{e.respondWith(this.#dispatch(e.request,e,void 0,e.request.method))})}},w=`[^/]+`,T=`.*`,E=`(?:|/.*)`,D=Symbol(),O=new Set(`.\\+*[^]$()`);function k(e,t){return e.length===1?t.length===1?e<t?-1:1:-1:t.length===1||e===T||e===E?1:t===T||t===E?-1:e===w?1:t===w?-1:e.length===t.length?e<t?-1:1:t.length-e.length}var A=class{#index;#varIndex;#children=Object.create(null);insert(e,t,n,r,i){if(e.length===0){if(this.#index!==void 0)throw D;if(i)return;this.#index=t;return}let[a,...o]=e,s=a===`*`?o.length===0?[``,``,T]:[``,``,w]:a===`/*`?[``,``,E]:a.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),c;if(s){let e=s[1],t=s[2]||w;if(e&&s[2]&&(t===`.*`||(t=t.replace(/^\((?!\?:)(?=[^)]+\)$)/,`(?:`),/\((?!\?:)/.test(t))))throw D;if(c=this.#children[t],!c){if(Object.keys(this.#children).some(e=>e!==T&&e!==E))throw D;if(i)return;c=this.#children[t]=new A,e!==``&&(c.#varIndex=r.varIndex++)}!i&&e!==``&&n.push([e,c.#varIndex])}else if(c=this.#children[a],!c){if(Object.keys(this.#children).some(e=>e.length>1&&e!==T&&e!==E))throw D;if(i)return;c=this.#children[a]=new A}c.insert(o,t,n,r,i)}buildRegExpStr(){let e=Object.keys(this.#children).sort(k),t=e.map(e=>{let t=this.#children[e];return(typeof t.#varIndex==`number`?`(${e})@${t.#varIndex}`:O.has(e)?`\\${e}`:e)+t.buildRegExpStr()});return typeof this.#index==`number`&&t.unshift(`#${this.#index}`),t.length===0?``:t.length===1?t[0]:`(?:`+t.join(`|`)+`)`}},j=class{#context={varIndex:0};#root=new A;insert(e,t,n){let r=[],i=[];for(let t=0;;){let n=!1;if(e=e.replace(/\{[^}]+\}/g,e=>{let r=`@\\${t}`;return i[t]=[r,e],t++,n=!0,r}),!n)break}let a=e.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let e=i.length-1;e>=0;e--){let[t]=i[e];for(let n=a.length-1;n>=0;n--)if(a[n].indexOf(t)!==-1){a[n]=a[n].replace(t,i[e][1]);break}}return this.#root.insert(a,t,r,this.#context,n),r}buildRegExp(){let e=this.#root.buildRegExpStr();if(e===``)return[/^$/,[],[]];let t=0,n=[],r=[];return e=e.replace(/#(\d+)|@(\d+)|\.\*\$/g,(e,i,a)=>i===void 0?(a===void 0||(r[Number(a)]=++t),``):(n[++t]=Number(i),`$()`)),[RegExp(`^${e}`),n,r]}},M=[],N=[/^$/,[],Object.create(null)],P=Object.create(null);function F(e){return P[e]??=RegExp(e===`*`?``:`^${e.replace(/\/\*$|([.\\+*[^\]$()])/g,(e,t)=>t?`\\${t}`:`(?:|/.*)`)}$`)}function I(){P=Object.create(null)}function ne(e){let t=new j,n=[];if(e.length===0)return N;let r=e.map(e=>[!/\*|\/:/.test(e[0]),...e]).sort(([e,t],[n,r])=>e?1:n?-1:t.length-r.length),i=Object.create(null);for(let e=0,a=-1,o=r.length;e<o;e++){let[o,s,c]=r[e];o?i[s]=[c.map(([e])=>[e,Object.create(null)]),M]:a++;let l;try{l=t.insert(s,a,o)}catch(e){throw e===D?new b(s):e}o||(n[a]=c.map(([e,t])=>{let n=Object.create(null);for(--t;t>=0;t--){let[e,r]=l[t];n[e]=r}return[e,n]}))}let[a,o,s]=t.buildRegExp();for(let e=0,t=n.length;e<t;e++)for(let t=0,r=n[e].length;t<r;t++){let r=n[e][t]?.[1];if(!r)continue;let i=Object.keys(r);for(let e=0,t=i.length;e<t;e++)r[i[e]]=s[r[i[e]]]}let c=[];for(let e in o)c[e]=n[o[e]];return[a,c,i]}function L(e,t){if(e){for(let n of Object.keys(e).sort((e,t)=>t.length-e.length))if(F(n).test(t))return[...e[n]]}}var re=class{name=`RegExpRouter`;#middleware;#routes;constructor(){this.#middleware={[_]:Object.create(null)},this.#routes={[_]:Object.create(null)}}add(e,n,r){let i=this.#middleware,a=this.#routes;if(!i||!a)throw Error(y);i[e]||[i,a].forEach(t=>{t[e]=Object.create(null),Object.keys(t[_]).forEach(n=>{t[e][n]=[...t[_][n]]})}),n===`/*`&&(n=`*`);let o=(n.match(/\/:/g)||[]).length;if(/\*$/.test(n)){let t=F(n);e===_?Object.keys(i).forEach(e=>{i[e][n]||=L(i[e],n)||L(i[_],n)||[]}):i[e][n]||=L(i[e],n)||L(i[_],n)||[],Object.keys(i).forEach(n=>{(e===_||e===n)&&Object.keys(i[n]).forEach(e=>{t.test(e)&&i[n][e].push([r,o])})}),Object.keys(a).forEach(n=>{(e===_||e===n)&&Object.keys(a[n]).forEach(e=>t.test(e)&&a[n][e].push([r,o]))});return}let s=t.checkOptionalParameter(n)||[n];for(let t=0,n=s.length;t<n;t++){let c=s[t];Object.keys(a).forEach(s=>{(e===_||e===s)&&(a[s][c]||=[...L(i[s],c)||L(i[_],c)||[]],a[s][c].push([r,o-n+t+1]))})}}match(e,t){I();let n=this.#buildAllMatchers();return this.match=(e,t)=>{let r=n[e]||n[_],i=r[2][t];if(i)return i;let a=t.match(r[0]);if(!a)return[[],M];let o=a.indexOf(``,1);return[r[1][o],a]},this.match(e,t)}#buildAllMatchers(){let e=Object.create(null);return Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach(t=>{e[t]||=this.#buildMatcher(t)}),this.#middleware=this.#routes=void 0,e}#buildMatcher(e){let t=[],n=e===_;return[this.#middleware,this.#routes].forEach(r=>{let i=r[e]?Object.keys(r[e]).map(t=>[t,r[e][t]]):[];i.length===0?e!==_&&t.push(...Object.keys(r[_]).map(e=>[e,r[_][e]])):(n||=!0,t.push(...i))}),n?ne(t):null}},R=class{name=`SmartRouter`;#routers=[];#routes=[];constructor(e){this.#routers=e.routers}add(e,t,n){if(!this.#routes)throw Error(y);this.#routes.push([e,t,n])}match(e,t){if(!this.#routes)throw Error(`Fatal error`);let n=this.#routers,r=this.#routes,i=n.length,a=0,o;for(;a<i;a++){let i=n[a];try{for(let e=0,t=r.length;e<t;e++)i.add(...r[e]);o=i.match(e,t)}catch(e){if(e instanceof b)continue;throw e}this.match=i.match.bind(i),this.#routers=[i],this.#routes=void 0;break}if(a===i)throw Error(`Fatal error`);return this.name=`SmartRouter + ${this.activeRouter.name}`,o}get activeRouter(){if(this.#routes||this.#routers.length!==1)throw Error(`No active router has been determined yet.`);return this.#routers[0]}},z=Object.create(null),B=class{#methods;#children;#patterns;#order=0;#params=z;constructor(e,t,n){if(this.#children=n||Object.create(null),this.#methods=[],e&&t){let n=Object.create(null);n[e]={handler:t,possibleKeys:[],score:0},this.#methods=[n]}this.#patterns=[]}insert(e,n,r){this.#order=++this.#order;let i=this,a=t.splitRoutingPath(n),o=[];for(let e=0,n=a.length;e<n;e++){let n=a[e],r=a[e+1],s=t.getPattern(n,r),c=Array.isArray(s)?s[0]:n;if(c in i.#children){i=i.#children[c],s&&o.push(s[1]);continue}i.#children[c]=new B,s&&(i.#patterns.push(s),o.push(s[1])),i=i.#children[c]}return i.#methods.push({[e]:{handler:r,possibleKeys:o.filter((e,t,n)=>n.indexOf(e)===t),score:this.#order}}),i}#getHandlerSets(e,t,n,r){let i=[];for(let a=0,o=e.#methods.length;a<o;a++){let o=e.#methods[a],s=o[t]||o[_],c={};if(s!==void 0&&(s.params=Object.create(null),i.push(s),n!==z||r&&r!==z))for(let e=0,t=s.possibleKeys.length;e<t;e++){let t=s.possibleKeys[e],i=c[s.score];s.params[t]=r?.[t]&&!i?r[t]:n[t]??r?.[t],c[s.score]=!0}}return i}search(e,n){let r=[];this.#params=z;let i=this,a=[i],o=t.splitPath(n),s=[];for(let t=0,n=o.length;t<n;t++){let i=o[t],c=t===n-1,l=[];for(let n=0,u=a.length;n<u;n++){let u=a[n],d=u.#children[i];d&&(d.#params=u.#params,c?(d.#children[`*`]&&r.push(...this.#getHandlerSets(d.#children[`*`],e,u.#params)),r.push(...this.#getHandlerSets(d,e,u.#params))):l.push(d));for(let n=0,a=u.#patterns.length;n<a;n++){let a=u.#patterns[n],d=u.#params===z?{}:{...u.#params};if(a===`*`){let t=u.#children[`*`];t&&(r.push(...this.#getHandlerSets(t,e,u.#params)),t.#params=d,l.push(t));continue}let[f,p,m]=a;if(!i&&!(m instanceof RegExp))continue;let h=u.#children[f],g=o.slice(t).join(`/`);if(m instanceof RegExp){let t=m.exec(g);if(t){if(d[p]=t[0],r.push(...this.#getHandlerSets(h,e,u.#params,d)),Object.keys(h.#children).length){h.#params=d;let e=t[0].match(/\//)?.length??0,n=s[e]||=[];n.push(h)}continue}}(m===!0||m.test(i))&&(d[p]=i,c?(r.push(...this.#getHandlerSets(h,e,d,u.#params)),h.#children[`*`]&&r.push(...this.#getHandlerSets(h.#children[`*`],e,d,u.#params))):(h.#params=d,l.push(h)))}}a=l.concat(s.shift()??[])}return r.length>1&&r.sort((e,t)=>e.score-t.score),[r.map(({handler:e,params:t})=>[e,t])]}},V=class{name=`TrieRouter`;#node;constructor(){this.#node=new B}add(e,n,r){let i=t.checkOptionalParameter(n);if(i){for(let t=0,n=i.length;t<n;t++)this.#node.insert(e,i[t],r);return}this.#node.insert(e,n,r)}match(e,t){return this.#node.search(e,t)}},H=class extends C{constructor(e={}){super(e),this.router=e.router??new R({routers:[new re,new V]})}},U=(e,n,r)=>{let i=e.req.raw.headers.get(`Cookie`);if(typeof n==`string`){if(!i)return;let e=n;r===`secure`?e=`__Secure-`+n:r===`host`&&(e=`__Host-`+n);let a=t.parse(i,e);return a[e]}if(!i)return{};let a=t.parse(i);return a},W=class extends Error{res;status;constructor(e=500,t){super(t?.message,{cause:t?.cause}),this.res=t?.res,this.status=e}getResponse(){if(this.res){let e=new Response(this.res.body,{status:this.status,headers:this.res.headers});return e}return new Response(this.message,{status:this.status})}},G=(e,t)=>{let n=new Response(e,{headers:{"Content-Type":t}});return n.formData()},K=/^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,q=/^multipart\/form-data(;\s?boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/,J=/^application\/x-www-form-urlencoded(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,Y=(e,t)=>async(n,r)=>{let i={},a=n.req.header(`Content-Type`);switch(e){case`json`:if(!a||!K.test(a))break;try{i=await n.req.json()}catch{throw new W(400,{message:`Malformed JSON in request body`})}break;case`form`:{if(!a||!(q.test(a)||J.test(a)))break;let e;if(n.req.bodyCache.formData)e=await n.req.bodyCache.formData;else try{let t=await n.req.arrayBuffer();e=await G(t,a),n.req.bodyCache.formData=e}catch(e){let t=`Malformed FormData request.`;throw t+=e instanceof Error?` ${e.message}`:` ${String(e)}`,new W(400,{message:t})}let t={};e.forEach((e,n)=>{n.endsWith(`[]`)?(t[n]??=[]).push(e):Array.isArray(t[n])?t[n].push(e):n in t?t[n]=[t[n],e]:t[n]=e}),i=t;break}case`query`:i=Object.fromEntries(Object.entries(n.req.queries()).map(([e,t])=>t.length===1?[e,t[0]]:[e,t]));break;case`param`:i=n.req.param();break;case`header`:i=n.req.header();break;case`cookie`:i=U(n);break}let o=await t(i,n);if(o instanceof Response)return o;n.req.addValidatedData(e,o),await r()};const X=(e,t)=>e.json({error:t},400),Z=e=>{let t=e.req.param(`key`);return!t||t===``?{key:t,err:`Key is required`}:t.length>128?{key:t,err:`Key is too long. Max length is 128 characters.`}:{key:t}},Q=()=>new H,ie=Q().get(`/kv/:key`,async e=>{let{key:t,err:n}=Z(e);if(n)return X(e,n);let r=await e.env.storage.kv.get(t);return e.json({value:r},200)}).post(`/kv/:key`,Y(`json`,(e,t)=>{let n=e.value;return n?typeof n==`string`?n.length>1024?X(t,`Value is too long. Max length is 1024 characters.`):{value:n}:X(t,`Value must be a string`):X(t,`Value is required`)}),async e=>{let{key:t,err:n}=Z(e);if(n)return X(e,n);let{value:r}=e.req.valid(`json`);return await e.env.storage.kv.set(t,r),e.body(null,204)}).delete(`/kv/:key`,async e=>{let{key:t,err:n}=Z(e);return n?X(e,n):(await e.env.storage.kv.del(t),e.body(null,204))}),$=e=>{let t=e.req.param(`id`);return t?t.length>128?{id:t,err:`ID is too long. Max length is 128 characters.`}:{id:t}:{id:t,err:`ID is required`}},ae=Q().basePath(`/:id`).post(`/`,async e=>{let{id:t,err:n}=$(e);if(n)return X(e,n);let r=await e.env.chat.upsert(t);return e.json({id:r.id},200)}).post(`/sendMessages`,Y(`json`,(e,t)=>{let n=e.messages;if(!n)return X(t,`Messages are required`);if(!Array.isArray(n))return X(t,`Messages must be an array`);if(n.length===0)return X(t,`Messages must not be empty`);let r=e.behavior;return r!==`enqueue`&&r!==`interrupt`&&r!==`append`?X(t,`Invalid behavior`):{messages:n,behavior:r}}),async e=>{let{id:t,err:n}=$(e);if(n)return X(e,n);let{messages:r,behavior:i}=e.req.valid(`json`);try{await e.env.chat.sendMessages(t,{messages:r,behavior:i})}catch(t){return X(e,t instanceof Error?t.message:`Unknown error`)}return e.body(null,204)}),oe=new H().route(`/storage`,ie).route(`/chat`,ae);var se=oe;module.exports=se;
|
|
1
|
+
Object.defineProperty(exports,`__esModule`,{value:!0});var e=(e,t,n)=>(r,i)=>{let a=-1;return o(0);async function o(s){if(s<=a)throw Error(`next() called multiple times`);a=s;let c,l=!1,u;if(e[s]?(u=e[s][0][0],r.req.routeIndex=s):u=s===e.length&&i||void 0,u)try{c=await u(r,()=>o(s+1))}catch(e){if(e instanceof Error&&t)r.error=e,c=await t(e,r),l=!0;else throw e}else r.finalized===!1&&n&&(c=await n(r));return c&&(r.finalized===!1||l)&&(r.res=c),r}},t=Symbol(),n=async(e,t=Object.create(null))=>{let{all:n=!1,dot:i=!1}=t,a=e instanceof S?e.raw.headers:e.headers,o=a.get(`Content-Type`);return o?.startsWith(`multipart/form-data`)||o?.startsWith(`application/x-www-form-urlencoded`)?r(e,{all:n,dot:i}):{}};async function r(e,t){let n=await e.formData();return n?i(n,t):{}}function i(e,t){let n=Object.create(null);return e.forEach((e,r)=>{let i=t.all||r.endsWith(`[]`);i?a(n,r,e):n[r]=e}),t.dot&&Object.entries(n).forEach(([e,t])=>{let r=e.includes(`.`);r&&(o(n,e,t),delete n[e])}),n}var a=(e,t,n)=>{e[t]===void 0?t.endsWith(`[]`)?e[t]=[n]:e[t]=n:Array.isArray(e[t])?e[t].push(n):e[t]=[e[t],n]},o=(e,t,n)=>{let r=e,i=t.split(`.`);i.forEach((e,t)=>{t===i.length-1?r[e]=n:((!r[e]||typeof r[e]!=`object`||Array.isArray(r[e])||r[e]instanceof File)&&(r[e]=Object.create(null)),r=r[e])})},s=e=>{let t=e.split(`/`);return t[0]===``&&t.shift(),t},c=e=>{let{groups:t,path:n}=l(e),r=s(n);return u(r,t)},l=e=>{let t=[];return e=e.replace(/\{[^}]+\}/g,(e,n)=>{let r=`@${n}`;return t.push([r,e]),r}),{groups:t,path:e}},u=(e,t)=>{for(let n=t.length-1;n>=0;n--){let[r]=t[n];for(let i=e.length-1;i>=0;i--)if(e[i].includes(r)){e[i]=e[i].replace(r,t[n][1]);break}}return e},d={},f=(e,t)=>{if(e===`*`)return`*`;let n=e.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/);if(n){let r=`${e}#${t}`;return d[r]||(n[2]?d[r]=t&&t[0]!==`:`&&t[0]!==`*`?[r,n[1],RegExp(`^${n[2]}(?=/${t})`)]:[e,n[1],RegExp(`^${n[2]}$`)]:d[r]=[e,n[1],!0]),d[r]}return null},p=(e,t)=>{try{return t(e)}catch{return e.replace(/(?:%[0-9A-Fa-f]{2})+/g,e=>{try{return t(e)}catch{return e}})}},m=e=>p(e,decodeURI),h=e=>{let t=e.url,n=t.indexOf(`/`,t.indexOf(`:`)+4),r=n;for(;r<t.length;r++){let e=t.charCodeAt(r);if(e===37){let e=t.indexOf(`?`,r),i=t.slice(n,e===-1?void 0:e);return m(i.includes(`%25`)?i.replace(/%25/g,`%2525`):i)}else if(e===63)break}return t.slice(n,r)},g=e=>{let t=h(e);return t.length>1&&t.at(-1)===`/`?t.slice(0,-1):t},_=(e,t,...n)=>(n.length&&(t=_(t,...n)),`${e?.[0]===`/`?``:`/`}${e}${t===`/`?``:`${e?.at(-1)===`/`?``:`/`}${t?.[0]===`/`?t.slice(1):t}`}`),ee=e=>{if(e.charCodeAt(e.length-1)!==63||!e.includes(`:`))return null;let t=e.split(`/`),n=[],r=``;return t.forEach(e=>{if(e!==``&&!/\:/.test(e))r+=`/`+e;else if(/\:/.test(e))if(/\?/.test(e)){n.length===0&&r===``?n.push(`/`):n.push(r);let t=e.replace(`?`,``);r+=`/`+t,n.push(r)}else r+=`/`+e}),n.filter((e,t,n)=>n.indexOf(e)===t)},v=e=>/[%+]/.test(e)?(e.indexOf(`+`)!==-1&&(e=e.replace(/\+/g,` `)),e.indexOf(`%`)===-1?e:p(e,b)):e,y=(e,t,n)=>{let r;if(!n&&t&&!/[%+]/.test(t)){let n=e.indexOf(`?${t}`,8);for(n===-1&&(n=e.indexOf(`&${t}`,8));n!==-1;){let r=e.charCodeAt(n+t.length+1);if(r===61){let r=n+t.length+2,i=e.indexOf(`&`,r);return v(e.slice(r,i===-1?void 0:i))}else if(r==38||isNaN(r))return``;n=e.indexOf(`&${t}`,n+1)}if(r=/[%+]/.test(e),!r)return}let i={};r??=/[%+]/.test(e);let a=e.indexOf(`?`,8);for(;a!==-1;){let t=e.indexOf(`&`,a+1),o=e.indexOf(`=`,a);o>t&&t!==-1&&(o=-1);let s=e.slice(a+1,o===-1?t===-1?void 0:t:o);if(r&&(s=v(s)),a=t,s===``)continue;let c;o===-1?c=``:(c=e.slice(o+1,t===-1?void 0:t),r&&(c=v(c))),n?(i[s]&&Array.isArray(i[s])||(i[s]=[]),i[s].push(c)):i[s]??=c}return t?i[t]:i},te=y,ne=(e,t)=>y(e,t,!0),b=decodeURIComponent,x=e=>p(e,b),S=class{raw;#validatedData;#matchResult;routeIndex=0;path;bodyCache={};constructor(e,t=`/`,n=[[]]){this.raw=e,this.path=t,this.#matchResult=n,this.#validatedData={}}param(e){return e?this.#getDecodedParam(e):this.#getAllDecodedParams()}#getDecodedParam(e){let t=this.#matchResult[0][this.routeIndex][1][e],n=this.#getParamValue(t);return n&&/\%/.test(n)?x(n):n}#getAllDecodedParams(){let e={},t=Object.keys(this.#matchResult[0][this.routeIndex][1]);for(let n of t){let t=this.#getParamValue(this.#matchResult[0][this.routeIndex][1][n]);t!==void 0&&(e[n]=/\%/.test(t)?x(t):t)}return e}#getParamValue(e){return this.#matchResult[1]?this.#matchResult[1][e]:e}query(e){return te(this.url,e)}queries(e){return ne(this.url,e)}header(e){if(e)return this.raw.headers.get(e)??void 0;let t={};return this.raw.headers.forEach((e,n)=>{t[n]=e}),t}async parseBody(e){return this.bodyCache.parsedBody??=await n(this,e)}#cachedBody=e=>{let{bodyCache:t,raw:n}=this,r=t[e];if(r)return r;let i=Object.keys(t)[0];return i?t[i].then(t=>(i===`json`&&(t=JSON.stringify(t)),new Response(t)[e]())):t[e]=n[e]()};json(){return this.#cachedBody(`text`).then(e=>JSON.parse(e))}text(){return this.#cachedBody(`text`)}arrayBuffer(){return this.#cachedBody(`arrayBuffer`)}blob(){return this.#cachedBody(`blob`)}formData(){return this.#cachedBody(`formData`)}addValidatedData(e,t){this.#validatedData[e]=t}valid(e){return this.#validatedData[e]}get url(){return this.raw.url}get method(){return this.raw.method}get[t](){return this.#matchResult}get matchedRoutes(){return this.#matchResult[0].map(([[,e]])=>e)}get routePath(){return this.#matchResult[0].map(([[,e]])=>e)[this.routeIndex].path}},re={Stringify:1,BeforeStream:2,Stream:3},ie=(e,t)=>{let n=new String(e);return n.isEscaped=!0,n.callbacks=t,n},C=async(e,t,n,r,i)=>{typeof e==`object`&&!(e instanceof String)&&(e instanceof Promise||(e=e.toString()),e instanceof Promise&&(e=await e));let a=e.callbacks;if(!a?.length)return Promise.resolve(e);i?i[0]+=e:i=[e];let o=Promise.all(a.map(e=>e({phase:t,buffer:i,context:r}))).then(e=>Promise.all(e.filter(Boolean).map(e=>C(e,t,!1,r,i))).then(()=>i[0]));return n?ie(await o,a):o},ae=`text/plain; charset=UTF-8`,w=(e,t)=>({"Content-Type":e,...t}),oe=class{#rawRequest;#req;env={};#var;finalized=!1;error;#status;#executionCtx;#res;#layout;#renderer;#notFoundHandler;#preparedHeaders;#matchResult;#path;constructor(e,t){this.#rawRequest=e,t&&(this.#executionCtx=t.executionCtx,this.env=t.env,this.#notFoundHandler=t.notFoundHandler,this.#path=t.path,this.#matchResult=t.matchResult)}get req(){return this.#req??=new S(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(e){if(this.#res&&e){e=new Response(e.body,e);for(let[t,n]of this.#res.headers.entries()){if(t===`content-type`)continue;if(t===`set-cookie`){let t=this.#res.headers.getSetCookie();e.headers.delete(`set-cookie`);for(let n of t)e.headers.append(`set-cookie`,n)}else e.headers.set(t,n)}}this.#res=e,this.finalized=!0}render=(...e)=>(this.#renderer??=e=>this.html(e),this.#renderer(...e));setLayout=e=>this.#layout=e;getLayout=()=>this.#layout;setRenderer=e=>{this.#renderer=e};header=(e,t,n)=>{this.finalized&&(this.#res=new Response(this.#res.body,this.#res));let r=this.#res?this.#res.headers:this.#preparedHeaders??=new Headers;t===void 0?r.delete(e):n?.append?r.append(e,t):r.set(e,t)};status=e=>{this.#status=e};set=(e,t)=>{this.#var??=new Map,this.#var.set(e,t)};get=e=>this.#var?this.#var.get(e):void 0;get var(){return this.#var?Object.fromEntries(this.#var):{}}#newResponse(e,t,n){let r=this.#res?new Headers(this.#res.headers):this.#preparedHeaders??new Headers;if(typeof t==`object`&&`headers`in t){let e=t.headers instanceof Headers?t.headers:new Headers(t.headers);for(let[t,n]of e)t.toLowerCase()===`set-cookie`?r.append(t,n):r.set(t,n)}if(n)for(let[e,t]of Object.entries(n))if(typeof t==`string`)r.set(e,t);else{r.delete(e);for(let n of t)r.append(e,n)}let i=typeof t==`number`?t:t?.status??this.#status;return new Response(e,{status:i,headers:r})}newResponse=(...e)=>this.#newResponse(...e);body=(e,t,n)=>this.#newResponse(e,t,n);text=(e,t,n)=>!this.#preparedHeaders&&!this.#status&&!t&&!n&&!this.finalized?new Response(e):this.#newResponse(e,t,w(ae,n));json=(e,t,n)=>this.#newResponse(JSON.stringify(e),t,w(`application/json`,n));html=(e,t,n)=>{let r=e=>this.#newResponse(e,t,w(`text/html; charset=UTF-8`,n));return typeof e==`object`?C(e,re.Stringify,!1,{}).then(r):r(e)};redirect=(e,t)=>{let n=String(e);return this.header(`Location`,/[^\x00-\xFF]/.test(n)?encodeURI(n):n),this.newResponse(null,t??302)};notFound=()=>(this.#notFoundHandler??=()=>new Response,this.#notFoundHandler(this))},T=`ALL`,se=`all`,ce=[`get`,`post`,`put`,`delete`,`options`,`patch`],E=`Can not add a route since the matcher is already built.`,D=class extends Error{},le=`__COMPOSED_HANDLER`,ue=e=>e.text(`404 Not Found`,404),O=(e,t)=>{if(`getResponse`in e){let n=e.getResponse();return t.newResponse(n.body,n)}return console.error(e),t.text(`Internal Server Error`,500)},k=class{get;post;put;delete;options;patch;all;on;use;router;getPath;_basePath=`/`;#path=`/`;routes=[];constructor(e={}){let t=[...ce,se];t.forEach(e=>{this[e]=(t,...n)=>(typeof t==`string`?this.#path=t:this.#addRoute(e,this.#path,t),n.forEach(t=>{this.#addRoute(e,this.#path,t)}),this)}),this.on=(e,t,...n)=>{for(let r of[t].flat()){this.#path=r;for(let t of[e].flat())n.map(e=>{this.#addRoute(t.toUpperCase(),this.#path,e)})}return this},this.use=(e,...t)=>(typeof e==`string`?this.#path=e:(this.#path=`*`,t.unshift(e)),t.forEach(e=>{this.#addRoute(T,this.#path,e)}),this);let{strict:n,...r}=e;Object.assign(this,r),this.getPath=n??!0?e.getPath??h:g}#clone(){let e=new k({router:this.router,getPath:this.getPath});return e.errorHandler=this.errorHandler,e.#notFoundHandler=this.#notFoundHandler,e.routes=this.routes,e}#notFoundHandler=ue;errorHandler=O;route(t,n){let r=this.basePath(t);return n.routes.map(t=>{let i;n.errorHandler===O?i=t.handler:(i=async(r,i)=>(await e([],n.errorHandler)(r,()=>t.handler(r,i))).res,i[le]=t.handler),r.#addRoute(t.method,t.path,i)}),this}basePath(e){let t=this.#clone();return t._basePath=_(this._basePath,e),t}onError=e=>(this.errorHandler=e,this);notFound=e=>(this.#notFoundHandler=e,this);mount(e,t,n){let r,i;n&&(typeof n==`function`?i=n:(i=n.optionHandler,r=n.replaceRequest===!1?e=>e:n.replaceRequest));let a=i?e=>{let t=i(e);return Array.isArray(t)?t:[t]}:e=>{let t;try{t=e.executionCtx}catch{}return[e.env,t]};r||=(()=>{let t=_(this._basePath,e),n=t===`/`?0:t.length;return e=>{let t=new URL(e.url);return t.pathname=t.pathname.slice(n)||`/`,new Request(t,e)}})();let o=async(e,n)=>{let i=await t(r(e.req.raw),...a(e));if(i)return i;await n()};return this.#addRoute(T,_(e,`*`),o),this}#addRoute(e,t,n){e=e.toUpperCase(),t=_(this._basePath,t);let r={basePath:this._basePath,path:t,method:e,handler:n};this.router.add(e,t,[n,r]),this.routes.push(r)}#handleError(e,t){if(e instanceof Error)return this.errorHandler(e,t);throw e}#dispatch(t,n,r,i){if(i===`HEAD`)return(async()=>new Response(null,await this.#dispatch(t,n,r,`GET`)))();let a=this.getPath(t,{env:r}),o=this.router.match(i,a),s=new oe(t,{path:a,matchResult:o,env:r,executionCtx:n,notFoundHandler:this.#notFoundHandler});if(o[0].length===1){let e;try{e=o[0][0][0][0](s,async()=>{s.res=await this.#notFoundHandler(s)})}catch(e){return this.#handleError(e,s)}return e instanceof Promise?e.then(e=>e||(s.finalized?s.res:this.#notFoundHandler(s))).catch(e=>this.#handleError(e,s)):e??this.#notFoundHandler(s)}let c=e(o[0],this.errorHandler,this.#notFoundHandler);return(async()=>{try{let e=await c(s);if(!e.finalized)throw Error("Context is not finalized. Did you forget to return a Response object or `await next()`?");return e.res}catch(e){return this.#handleError(e,s)}})()}fetch=(e,...t)=>this.#dispatch(e,t[1],t[0],e.method);request=(e,t,n,r)=>e instanceof Request?this.fetch(t?new Request(e,t):e,n,r):(e=e.toString(),this.fetch(new Request(/^https?:\/\//.test(e)?e:`http://localhost${_(`/`,e)}`,t),n,r));fire=()=>{addEventListener(`fetch`,e=>{e.respondWith(this.#dispatch(e.request,e,void 0,e.request.method))})}},A=`[^/]+`,j=`.*`,M=`(?:|/.*)`,N=Symbol(),de=new Set(`.\\+*[^]$()`);function fe(e,t){return e.length===1?t.length===1?e<t?-1:1:-1:t.length===1||e===j||e===M?1:t===j||t===M?-1:e===A?1:t===A?-1:e.length===t.length?e<t?-1:1:t.length-e.length}var P=class{#index;#varIndex;#children=Object.create(null);insert(e,t,n,r,i){if(e.length===0){if(this.#index!==void 0)throw N;if(i)return;this.#index=t;return}let[a,...o]=e,s=a===`*`?o.length===0?[``,``,j]:[``,``,A]:a===`/*`?[``,``,M]:a.match(/^\:([^\{\}]+)(?:\{(.+)\})?$/),c;if(s){let e=s[1],t=s[2]||A;if(e&&s[2]&&(t===`.*`||(t=t.replace(/^\((?!\?:)(?=[^)]+\)$)/,`(?:`),/\((?!\?:)/.test(t))))throw N;if(c=this.#children[t],!c){if(Object.keys(this.#children).some(e=>e!==j&&e!==M))throw N;if(i)return;c=this.#children[t]=new P,e!==``&&(c.#varIndex=r.varIndex++)}!i&&e!==``&&n.push([e,c.#varIndex])}else if(c=this.#children[a],!c){if(Object.keys(this.#children).some(e=>e.length>1&&e!==j&&e!==M))throw N;if(i)return;c=this.#children[a]=new P}c.insert(o,t,n,r,i)}buildRegExpStr(){let e=Object.keys(this.#children).sort(fe),t=e.map(e=>{let t=this.#children[e];return(typeof t.#varIndex==`number`?`(${e})@${t.#varIndex}`:de.has(e)?`\\${e}`:e)+t.buildRegExpStr()});return typeof this.#index==`number`&&t.unshift(`#${this.#index}`),t.length===0?``:t.length===1?t[0]:`(?:`+t.join(`|`)+`)`}},pe=class{#context={varIndex:0};#root=new P;insert(e,t,n){let r=[],i=[];for(let t=0;;){let n=!1;if(e=e.replace(/\{[^}]+\}/g,e=>{let r=`@\\${t}`;return i[t]=[r,e],t++,n=!0,r}),!n)break}let a=e.match(/(?::[^\/]+)|(?:\/\*$)|./g)||[];for(let e=i.length-1;e>=0;e--){let[t]=i[e];for(let n=a.length-1;n>=0;n--)if(a[n].indexOf(t)!==-1){a[n]=a[n].replace(t,i[e][1]);break}}return this.#root.insert(a,t,r,this.#context,n),r}buildRegExp(){let e=this.#root.buildRegExpStr();if(e===``)return[/^$/,[],[]];let t=0,n=[],r=[];return e=e.replace(/#(\d+)|@(\d+)|\.\*\$/g,(e,i,a)=>i===void 0?(a===void 0||(r[Number(a)]=++t),``):(n[++t]=Number(i),`$()`)),[RegExp(`^${e}`),n,r]}},F=[],me=[/^$/,[],Object.create(null)],I=Object.create(null);function L(e){return I[e]??=RegExp(e===`*`?``:`^${e.replace(/\/\*$|([.\\+*[^\]$()])/g,(e,t)=>t?`\\${t}`:`(?:|/.*)`)}$`)}function he(){I=Object.create(null)}function ge(e){let t=new pe,n=[];if(e.length===0)return me;let r=e.map(e=>[!/\*|\/:/.test(e[0]),...e]).sort(([e,t],[n,r])=>e?1:n?-1:t.length-r.length),i=Object.create(null);for(let e=0,a=-1,o=r.length;e<o;e++){let[o,s,c]=r[e];o?i[s]=[c.map(([e])=>[e,Object.create(null)]),F]:a++;let l;try{l=t.insert(s,a,o)}catch(e){throw e===N?new D(s):e}o||(n[a]=c.map(([e,t])=>{let n=Object.create(null);for(--t;t>=0;t--){let[e,r]=l[t];n[e]=r}return[e,n]}))}let[a,o,s]=t.buildRegExp();for(let e=0,t=n.length;e<t;e++)for(let t=0,r=n[e].length;t<r;t++){let r=n[e][t]?.[1];if(!r)continue;let i=Object.keys(r);for(let e=0,t=i.length;e<t;e++)r[i[e]]=s[r[i[e]]]}let c=[];for(let e in o)c[e]=n[o[e]];return[a,c,i]}function R(e,t){if(e){for(let n of Object.keys(e).sort((e,t)=>t.length-e.length))if(L(n).test(t))return[...e[n]]}}var _e=class{name=`RegExpRouter`;#middleware;#routes;constructor(){this.#middleware={[T]:Object.create(null)},this.#routes={[T]:Object.create(null)}}add(e,t,n){let r=this.#middleware,i=this.#routes;if(!r||!i)throw Error(E);r[e]||[r,i].forEach(t=>{t[e]=Object.create(null),Object.keys(t[T]).forEach(n=>{t[e][n]=[...t[T][n]]})}),t===`/*`&&(t=`*`);let a=(t.match(/\/:/g)||[]).length;if(/\*$/.test(t)){let o=L(t);e===T?Object.keys(r).forEach(e=>{r[e][t]||=R(r[e],t)||R(r[T],t)||[]}):r[e][t]||=R(r[e],t)||R(r[T],t)||[],Object.keys(r).forEach(t=>{(e===T||e===t)&&Object.keys(r[t]).forEach(e=>{o.test(e)&&r[t][e].push([n,a])})}),Object.keys(i).forEach(t=>{(e===T||e===t)&&Object.keys(i[t]).forEach(e=>o.test(e)&&i[t][e].push([n,a]))});return}let o=ee(t)||[t];for(let t=0,s=o.length;t<s;t++){let c=o[t];Object.keys(i).forEach(o=>{(e===T||e===o)&&(i[o][c]||=[...R(r[o],c)||R(r[T],c)||[]],i[o][c].push([n,a-s+t+1]))})}}match(e,t){he();let n=this.#buildAllMatchers();return this.match=(e,t)=>{let r=n[e]||n[T],i=r[2][t];if(i)return i;let a=t.match(r[0]);if(!a)return[[],F];let o=a.indexOf(``,1);return[r[1][o],a]},this.match(e,t)}#buildAllMatchers(){let e=Object.create(null);return Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach(t=>{e[t]||=this.#buildMatcher(t)}),this.#middleware=this.#routes=void 0,e}#buildMatcher(e){let t=[],n=e===T;return[this.#middleware,this.#routes].forEach(r=>{let i=r[e]?Object.keys(r[e]).map(t=>[t,r[e][t]]):[];i.length===0?e!==T&&t.push(...Object.keys(r[T]).map(e=>[e,r[T][e]])):(n||=!0,t.push(...i))}),n?ge(t):null}},ve=class{name=`SmartRouter`;#routers=[];#routes=[];constructor(e){this.#routers=e.routers}add(e,t,n){if(!this.#routes)throw Error(E);this.#routes.push([e,t,n])}match(e,t){if(!this.#routes)throw Error(`Fatal error`);let n=this.#routers,r=this.#routes,i=n.length,a=0,o;for(;a<i;a++){let i=n[a];try{for(let e=0,t=r.length;e<t;e++)i.add(...r[e]);o=i.match(e,t)}catch(e){if(e instanceof D)continue;throw e}this.match=i.match.bind(i),this.#routers=[i],this.#routes=void 0;break}if(a===i)throw Error(`Fatal error`);return this.name=`SmartRouter + ${this.activeRouter.name}`,o}get activeRouter(){if(this.#routes||this.#routers.length!==1)throw Error(`No active router has been determined yet.`);return this.#routers[0]}},z=Object.create(null),B=class{#methods;#children;#patterns;#order=0;#params=z;constructor(e,t,n){if(this.#children=n||Object.create(null),this.#methods=[],e&&t){let n=Object.create(null);n[e]={handler:t,possibleKeys:[],score:0},this.#methods=[n]}this.#patterns=[]}insert(e,t,n){this.#order=++this.#order;let r=this,i=c(t),a=[];for(let e=0,t=i.length;e<t;e++){let t=i[e],n=i[e+1],o=f(t,n),s=Array.isArray(o)?o[0]:t;if(s in r.#children){r=r.#children[s],o&&a.push(o[1]);continue}r.#children[s]=new B,o&&(r.#patterns.push(o),a.push(o[1])),r=r.#children[s]}return r.#methods.push({[e]:{handler:n,possibleKeys:a.filter((e,t,n)=>n.indexOf(e)===t),score:this.#order}}),r}#getHandlerSets(e,t,n,r){let i=[];for(let a=0,o=e.#methods.length;a<o;a++){let o=e.#methods[a],s=o[t]||o[T],c={};if(s!==void 0&&(s.params=Object.create(null),i.push(s),n!==z||r&&r!==z))for(let e=0,t=s.possibleKeys.length;e<t;e++){let t=s.possibleKeys[e],i=c[s.score];s.params[t]=r?.[t]&&!i?r[t]:n[t]??r?.[t],c[s.score]=!0}}return i}search(e,t){let n=[];this.#params=z;let r=this,i=[r],a=s(t),o=[];for(let t=0,r=a.length;t<r;t++){let s=a[t],c=t===r-1,l=[];for(let r=0,u=i.length;r<u;r++){let u=i[r],d=u.#children[s];d&&(d.#params=u.#params,c?(d.#children[`*`]&&n.push(...this.#getHandlerSets(d.#children[`*`],e,u.#params)),n.push(...this.#getHandlerSets(d,e,u.#params))):l.push(d));for(let r=0,i=u.#patterns.length;r<i;r++){let i=u.#patterns[r],d=u.#params===z?{}:{...u.#params};if(i===`*`){let t=u.#children[`*`];t&&(n.push(...this.#getHandlerSets(t,e,u.#params)),t.#params=d,l.push(t));continue}let[f,p,m]=i;if(!s&&!(m instanceof RegExp))continue;let h=u.#children[f],g=a.slice(t).join(`/`);if(m instanceof RegExp){let t=m.exec(g);if(t){if(d[p]=t[0],n.push(...this.#getHandlerSets(h,e,u.#params,d)),Object.keys(h.#children).length){h.#params=d;let e=t[0].match(/\//)?.length??0,n=o[e]||=[];n.push(h)}continue}}(m===!0||m.test(s))&&(d[p]=s,c?(n.push(...this.#getHandlerSets(h,e,d,u.#params)),h.#children[`*`]&&n.push(...this.#getHandlerSets(h.#children[`*`],e,d,u.#params))):(h.#params=d,l.push(h)))}}i=l.concat(o.shift()??[])}return n.length>1&&n.sort((e,t)=>e.score-t.score),[n.map(({handler:e,params:t})=>[e,t])]}},ye=class{name=`TrieRouter`;#node;constructor(){this.#node=new B}add(e,t,n){let r=ee(t);if(r){for(let t=0,i=r.length;t<i;t++)this.#node.insert(e,r[t],n);return}this.#node.insert(e,t,n)}match(e,t){return this.#node.search(e,t)}},V=class extends k{constructor(e={}){super(e),this.router=e.router??new ve({routers:[new _e,new ye]})}},be=/^[\w!#$%&'*.^`|~+-]+$/,xe=/^[ !#-:<-[\]-~]*$/,H=(e,t)=>{if(t&&e.indexOf(t)===-1)return{};let n=e.trim().split(`;`),r={};for(let e of n){e=e.trim();let n=e.indexOf(`=`);if(n===-1)continue;let i=e.substring(0,n).trim();if(t&&t!==i||!be.test(i))continue;let a=e.substring(n+1).trim();if(a.startsWith(`"`)&&a.endsWith(`"`)&&(a=a.slice(1,-1)),xe.test(a)&&(r[i]=a.indexOf(`%`)===-1?a:p(a,b),t))break}return r},Se=(e,t,n={})=>{let r=`${e}=${t}`;if(e.startsWith(`__Secure-`)&&!n.secure)throw Error(`__Secure- Cookie must have Secure attributes`);if(e.startsWith(`__Host-`)){if(!n.secure)throw Error(`__Host- Cookie must have Secure attributes`);if(n.path!==`/`)throw Error(`__Host- Cookie must have Path attributes with "/"`);if(n.domain)throw Error(`__Host- Cookie must not have Domain attributes`)}if(n&&typeof n.maxAge==`number`&&n.maxAge>=0){if(n.maxAge>3456e4)throw Error(`Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.`);r+=`; Max-Age=${n.maxAge|0}`}if(n.domain&&n.prefix!==`host`&&(r+=`; Domain=${n.domain}`),n.path&&(r+=`; Path=${n.path}`),n.expires){if(n.expires.getTime()-Date.now()>3456e7)throw Error(`Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.`);r+=`; Expires=${n.expires.toUTCString()}`}if(n.httpOnly&&(r+=`; HttpOnly`),n.secure&&(r+=`; Secure`),n.sameSite&&(r+=`; SameSite=${n.sameSite.charAt(0).toUpperCase()+n.sameSite.slice(1)}`),n.priority&&(r+=`; Priority=${n.priority.charAt(0).toUpperCase()+n.priority.slice(1)}`),n.partitioned){if(!n.secure)throw Error(`Partitioned Cookie must have Secure attributes`);r+=`; Partitioned`}return r},Ce=(e,t,n)=>(t=encodeURIComponent(t),Se(e,t,n)),we=(e,t,n)=>{let r=e.req.raw.headers.get(`Cookie`);if(typeof t==`string`){if(!r)return;let e=t;n===`secure`?e=`__Secure-`+t:n===`host`&&(e=`__Host-`+t);let i=H(r,e);return i[e]}if(!r)return{};let i=H(r);return i},U=class extends Error{res;status;constructor(e=500,t){super(t?.message,{cause:t?.cause}),this.res=t?.res,this.status=e}getResponse(){if(this.res){let e=new Response(this.res.body,{status:this.status,headers:this.res.headers});return e}return new Response(this.message,{status:this.status})}},Te=(e,t)=>{let n=new Response(e,{headers:{"Content-Type":t}});return n.formData()},Ee=/^application\/([a-z-\.]+\+)?json(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,De=/^multipart\/form-data(;\s?boundary=[a-zA-Z0-9'"()+_,\-./:=?]+)?$/,Oe=/^application\/x-www-form-urlencoded(;\s*[a-zA-Z0-9\-]+\=([^;]+))*$/,W=(e,t)=>async(n,r)=>{let i={},a=n.req.header(`Content-Type`);switch(e){case`json`:if(!a||!Ee.test(a))break;try{i=await n.req.json()}catch{throw new U(400,{message:`Malformed JSON in request body`})}break;case`form`:{if(!a||!(De.test(a)||Oe.test(a)))break;let e;if(n.req.bodyCache.formData)e=await n.req.bodyCache.formData;else try{let t=await n.req.arrayBuffer();e=await Te(t,a),n.req.bodyCache.formData=e}catch(e){let t=`Malformed FormData request.`;throw t+=e instanceof Error?` ${e.message}`:` ${String(e)}`,new U(400,{message:t})}let t={};e.forEach((e,n)=>{n.endsWith(`[]`)?(t[n]??=[]).push(e):Array.isArray(t[n])?t[n].push(e):n in t?t[n]=[t[n],e]:t[n]=e}),i=t;break}case`query`:i=Object.fromEntries(Object.entries(n.req.queries()).map(([e,t])=>t.length===1?[e,t[0]]:[e,t]));break;case`param`:i=n.req.param();break;case`header`:i=n.req.header();break;case`cookie`:i=we(n);break}let o=await t(i,n);if(o instanceof Response)return o;n.req.addValidatedData(e,o),await r()},ke=(e,t)=>(e=e.replace(/\/+$/,``),e+=`/`,t=t.replace(/^\/+/,``),e+t),G=(e,t)=>{for(let[n,r]of Object.entries(t)){let t=RegExp(`/:`+n+`(?:{[^/]+})?\\??`);e=e.replace(t,r?`/${r}`:``)}return e},K=e=>{let t=new URLSearchParams;for(let[n,r]of Object.entries(e)){if(r===void 0)continue;if(Array.isArray(r))for(let e of r)t.append(n,e);else t.set(n,r)}return t},Ae=(e,t)=>{switch(t){case`ws`:return e.replace(/^http/,`ws`);case`http`:return e.replace(/^ws/,`http`)}},q=e=>/^https?:\/\/[^\/]+?\/index(?=\?|$)/.test(e)?e.replace(/\/index(?=\?|$)/,`/`):e.replace(/\/index(?=\?|$)/,``);function J(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Y(e,t){if(!J(e)&&!J(t))return t;let n={...e};for(let e in t){let r=t[e];J(n[e])&&J(r)?n[e]=Y(n[e],r):n[e]=r}return n}var X=(e,t)=>{let n=new Proxy(()=>{},{get(n,r){if(!(typeof r!=`string`||r===`then`))return X(e,[...t,r])},apply(n,r,i){return e({path:t,args:i})}});return n},je=class{url;method;queryParams=void 0;pathParams={};rBody;cType=void 0;constructor(e,t){this.url=e,this.method=t}fetch=async(e,t)=>{if(e){if(e.query&&(this.queryParams=K(e.query)),e.form){let t=new FormData;for(let[n,r]of Object.entries(e.form))if(Array.isArray(r))for(let e of r)t.append(n,e);else t.append(n,r);this.rBody=t}e.json&&(this.rBody=JSON.stringify(e.json),this.cType=`application/json`),e.param&&(this.pathParams=e.param)}let n=this.method.toUpperCase(),r={...e?.header,...typeof t?.headers==`function`?await t.headers():t?.headers};if(e?.cookie){let t=[];for(let[n,r]of Object.entries(e.cookie))t.push(Ce(n,r,{path:`/`}));r.Cookie=t.join(`,`)}this.cType&&(r[`Content-Type`]=this.cType);let i=new Headers(r??void 0),a=this.url;a=q(a),a=G(a,this.pathParams),this.queryParams&&(a=a+`?`+this.queryParams.toString()),n=this.method.toUpperCase();let o=!(n===`GET`||n===`HEAD`);return(t?.fetch||fetch)(a,{body:o?this.rBody:void 0,method:n,headers:i,...t?.init})}},Me=(e,t)=>X(function n(r){let i=[...r.path],a=i.slice(-3).reverse();if(a[0]===`toString`)return a[1]===`name`?a[2]||``:n.toString();if(a[0]===`valueOf`)return a[1]===`name`?a[2]||``:n;let o=``;if(/^\$/.test(a[0])){let e=i.pop();e&&(o=e.replace(/^\$/,``))}let s=i.join(`/`),c=ke(e,s);if(o===`url`){let e=c;return r.args[0]&&(r.args[0].param&&(e=G(c,r.args[0].param)),r.args[0].query&&(e=e+`?`+K(r.args[0].query).toString())),e=q(e),new URL(e)}if(o===`ws`){let e=Ae(r.args[0]&&r.args[0].param?G(c,r.args[0].param):c,`ws`),n=new URL(e),i=r.args[0]?.query;i&&Object.entries(i).forEach(([e,t])=>{Array.isArray(t)?t.forEach(t=>n.searchParams.append(e,t)):n.searchParams.set(e,t)});let a=(...e)=>t?.webSocket!==void 0&&typeof t.webSocket==`function`?t.webSocket(...e):new WebSocket(...e);return a(n.toString())}let l=new je(c,o);if(o){t??={};let e=Y(t,{...r.args[1]});return l.fetch(r.args[0],e)}return l},[]);const Ne=`BLINK_API_SERVER_URL`,Pe=process.env[Ne],Fe=Me(Pe??``,{fetch:Pe?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.`)}}),Z=(e,t)=>e.json({error:t},400),Q=e=>{let t=e.req.param(`key`);return!t||t===``?{key:t,err:`Key is required`}:t.length>128?{key:t,err:`Key is too long. Max length is 128 characters.`}:{key:t}},Ie=()=>new V,Le=Ie().get(`/kv/:key`,async e=>{let{key:t,err:n}=Q(e);if(n)return Z(e,n);let r=await e.env.storage.kv.get(t);return e.json({value:r},200)}).post(`/kv/:key`,W(`json`,(e,t)=>{let n=e.value;return n?typeof n==`string`?n.length>1024?Z(t,`Value is too long. Max length is 1024 characters.`):{value:n}:Z(t,`Value must be a string`):Z(t,`Value is required`)}),async e=>{let{key:t,err:n}=Q(e);if(n)return Z(e,n);let{value:r}=e.req.valid(`json`);return await e.env.storage.kv.set(t,r),e.body(null,204)}).delete(`/kv/:key`,async e=>{let{key:t,err:n}=Q(e);return n?Z(e,n):(await e.env.storage.kv.del(t),e.body(null,204))}),$=e=>{let t=e.req.param(`id`);return t?t.length>128?{id:t,err:`ID is too long. Max length is 128 characters.`}:{id:t}:{id:t,err:`ID is required`}},Re=Ie().basePath(`/:id`).post(`/`,async e=>{let{id:t,err:n}=$(e);if(n)return Z(e,n);let r=await e.env.chat.upsert(t);return e.json({id:r.id},200)}).post(`/sendMessages`,W(`json`,(e,t)=>{let n=e.messages;if(!n)return Z(t,`Messages are required`);if(!Array.isArray(n))return Z(t,`Messages must be an array`);if(n.length===0)return Z(t,`Messages must not be empty`);let r=e.behavior;return r!==`enqueue`&&r!==`interrupt`&&r!==`append`?Z(t,`Invalid behavior`):{messages:n,behavior:r}}),async e=>{let{id:t,err:n}=$(e);if(n)return Z(e,n);let{messages:r,behavior:i}=e.req.valid(`json`);try{await e.env.chat.sendMessages(t,{messages:r,behavior:i})}catch(t){return Z(e,t instanceof Error?t.message:`Unknown error`)}return e.body(null,204)}),ze=new V().route(`/storage`,Le).route(`/chat`,Re);var Be=ze;exports.APIServerURLEnvironmentVariable=Ne,exports.default=Be;
|
package/dist/http/api.d.cts
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
-
import { Chat, ChatBehavior, Message } from "../index-IWju3eNc.cjs";
|
|
2
1
|
import * as hono_types0 from "hono/types";
|
|
3
2
|
import * as hono_hono_base0 from "hono/hono-base";
|
|
3
|
+
import { UIDataTypes, UIMessage, UIMessagePart, UITools } from "ai";
|
|
4
4
|
|
|
5
|
+
//#region src/api/chat.d.ts
|
|
6
|
+
interface Chat {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
}
|
|
9
|
+
type ChatBehavior = "enqueue" | "interrupt" | "append";
|
|
10
|
+
interface Message<METADATA = unknown, DATA_TYPES extends UIDataTypes = UIDataTypes, TOOLS extends UITools = UITools> {
|
|
11
|
+
readonly role: UIMessage["role"];
|
|
12
|
+
readonly parts: UIMessagePart<DATA_TYPES, TOOLS>[];
|
|
13
|
+
readonly metadata?: METADATA;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/api/internal/client.d.ts
|
|
17
|
+
/**
|
|
18
|
+
* APIServerURLEnvironmentVariable is the environment variable that
|
|
19
|
+
* the Blink agent uses for executions to the `blink.*` API.
|
|
20
|
+
* (e.g. blink.chat.upsert).
|
|
21
|
+
*/
|
|
22
|
+
declare const APIServerURLEnvironmentVariable = "BLINK_API_SERVER_URL";
|
|
23
|
+
//#endregion
|
|
5
24
|
//#region src/http/api.d.ts
|
|
6
|
-
|
|
7
25
|
/**
|
|
8
26
|
* APIBindings are functions that will be invoked by the agent.
|
|
9
27
|
*/
|
|
@@ -183,4 +201,4 @@ declare const api: hono_hono_base0.HonoBase<{
|
|
|
183
201
|
};
|
|
184
202
|
}, "/chat">, "/">;
|
|
185
203
|
//#endregion
|
|
186
|
-
export { APIBindings, api as default };
|
|
204
|
+
export { APIBindings, APIServerURLEnvironmentVariable, api as default };
|
package/dist/http/api.d.ts
CHANGED
|
@@ -1,9 +1,27 @@
|
|
|
1
|
-
import { Chat, ChatBehavior, Message } from "../index-BUiNoSbu.js";
|
|
2
1
|
import * as hono_types0 from "hono/types";
|
|
3
2
|
import * as hono_hono_base0 from "hono/hono-base";
|
|
3
|
+
import { UIDataTypes, UIMessage, UIMessagePart, UITools } from "ai";
|
|
4
4
|
|
|
5
|
+
//#region src/api/chat.d.ts
|
|
6
|
+
interface Chat {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
}
|
|
9
|
+
type ChatBehavior = "enqueue" | "interrupt" | "append";
|
|
10
|
+
interface Message<METADATA = unknown, DATA_TYPES extends UIDataTypes = UIDataTypes, TOOLS extends UITools = UITools> {
|
|
11
|
+
readonly role: UIMessage["role"];
|
|
12
|
+
readonly parts: UIMessagePart<DATA_TYPES, TOOLS>[];
|
|
13
|
+
readonly metadata?: METADATA;
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
//#region src/api/internal/client.d.ts
|
|
17
|
+
/**
|
|
18
|
+
* APIServerURLEnvironmentVariable is the environment variable that
|
|
19
|
+
* the Blink agent uses for executions to the `blink.*` API.
|
|
20
|
+
* (e.g. blink.chat.upsert).
|
|
21
|
+
*/
|
|
22
|
+
declare const APIServerURLEnvironmentVariable = "BLINK_API_SERVER_URL";
|
|
23
|
+
//#endregion
|
|
5
24
|
//#region src/http/api.d.ts
|
|
6
|
-
|
|
7
25
|
/**
|
|
8
26
|
* APIBindings are functions that will be invoked by the agent.
|
|
9
27
|
*/
|
|
@@ -183,4 +201,4 @@ declare const api: hono_hono_base0.HonoBase<{
|
|
|
183
201
|
};
|
|
184
202
|
}, "/chat">, "/">;
|
|
185
203
|
//#endregion
|
|
186
|
-
export { APIBindings, api as default };
|
|
204
|
+
export { APIBindings, APIServerURLEnvironmentVariable, api as default };
|