@fifthrevision/axle 0.6.5 → 0.6.6

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/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var L=Object.defineProperty;var p=(t,i)=>L(t,"name",{value:i,configurable:!0});import{Command as k}from"@commander-js/extra-typings";import{x as w,L as j,R as E,w as I,g as T,d as P}from"./consoleWriter-Bg94CpP2.js";import S from"yaml";import{z as e}from"zod";import{access as v,mkdir as U,writeFile as F,appendFile as J}from"node:fs/promises";import{homedir as W}from"node:os";import"@anthropic-ai/sdk";import"@google/genai";import"openai";import"serialize-error";import"fs/promises";import"glob";import"node:path";import"chalk";import"node:readline";var R="0.6.5",$={version:R};e.object({value:e.string()});const _=e.object({"api-key":e.string(),rateLimit:e.number().optional()}),G=e.object({engine:e.literal("ollama")}).loose(),N=e.object({engine:e.literal("anthropic")}).loose(),z=e.object({engine:e.literal("openai")}).loose(),B=e.object({engine:e.literal("gemini")}).loose(),M=e.discriminatedUnion("engine",[G,N,z,B]),V=e.object({ollama:e.custom().optional(),anthropic:e.custom().optional(),openai:e.custom().optional(),gemini:e.custom().optional(),brave:_.optional()}).loose(),H=e.object({file:e.string()}),X=e.object({file:e.string()}),Y=e.object({file:e.string()}),Z=e.object({source:e.literal("file"),pattern:e.string(),files:e.union([e.string(),e.array(e.string())])}),q=e.object({type:e.literal("file-exist"),pattern:e.string()}),A=e.object({type:e.literal("files"),source:e.string(),bind:e.string(),"skip-if":e.array(q).optional()}),K=e.object({uses:e.literal("chat"),system:e.string().optional(),message:e.string(),output:e.record(e.string(),e.any()).optional(),replace:e.array(Z).optional(),tools:e.array(e.string()).optional(),images:e.array(H).optional(),documents:e.array(X).optional(),references:e.array(Y).optional()}),Q=e.object({uses:e.literal("write-to-disk"),output:e.string(),keys:e.union([e.string(),e.array(e.string())]).optional()}),m=e.discriminatedUnion("uses",[K,Q]),ee=e.object({type:e.literal("serial"),tools:e.array(e.string()).optional(),steps:e.array(m)}),te=e.object({type:e.literal("batch"),tools:e.array(e.string()).optional(),batch:e.array(A),steps:e.array(m)});e.preprocess(t=>t.batch&&t.batch.length>0?{...t,type:"batch"}:{...t,type:"serial"},e.discriminatedUnion("type",[ee,te]));const oe=e.object({type:e.literal("serial"),tools:e.array(e.string()).optional(),steps:e.array(m),dependsOn:e.union([e.string(),e.array(e.string())]).optional()}),ie=e.object({type:e.literal("batch"),tools:e.array(e.string()).optional(),batch:e.array(A),steps:e.array(m),dependsOn:e.union([e.string(),e.array(e.string())]).optional()}),ne=e.preprocess(t=>t.batch&&t.batch.length>0?{...t,type:"batch"}:{...t,type:"serial"},e.discriminatedUnion("type",[oe,ie])),re=e.record(e.string(),ne),ae=e.object({using:M,jobs:re}),se="ax.job",le=["yaml","yml","json"];async function ce(t,i){const{recorder:n}=i,{content:r,format:l}=await w(t,{defaults:{name:se,formats:le},tag:"Job File"});let a=null;if(l==="json")a=JSON.parse(r);else if(l==="yaml"||l==="yml")a=S.parse(r);else throw new Error("Invalid job file format");n?.debug?.heading.log("The Job Object"),n?.debug?.log(a);const c=ae.safeParse(a);if(!c.success)throw new Error(`The job file is not valid:
2
+ var L=Object.defineProperty;var p=(t,i)=>L(t,"name",{value:i,configurable:!0});import{Command as k}from"@commander-js/extra-typings";import{y as w,L as j,R as E,x as I,g as T,d as P}from"./consoleWriter-C6SvRPzi.js";import S from"yaml";import{z as e}from"zod";import{access as v,mkdir as U,writeFile as F,appendFile as J}from"node:fs/promises";import{homedir as W}from"node:os";import"@anthropic-ai/sdk";import"@google/genai";import"openai";import"serialize-error";import"fs/promises";import"glob";import"node:path";import"chalk";import"node:readline";var R="0.6.6",$={version:R};e.object({value:e.string()});const _=e.object({"api-key":e.string(),rateLimit:e.number().optional()}),G=e.object({engine:e.literal("ollama")}).loose(),N=e.object({engine:e.literal("anthropic")}).loose(),z=e.object({engine:e.literal("openai")}).loose(),B=e.object({engine:e.literal("gemini")}).loose(),M=e.discriminatedUnion("engine",[G,N,z,B]),V=e.object({ollama:e.custom().optional(),anthropic:e.custom().optional(),openai:e.custom().optional(),gemini:e.custom().optional(),brave:_.optional()}).loose(),H=e.object({file:e.string()}),X=e.object({file:e.string()}),Y=e.object({file:e.string()}),Z=e.object({source:e.literal("file"),pattern:e.string(),files:e.union([e.string(),e.array(e.string())])}),q=e.object({type:e.literal("file-exist"),pattern:e.string()}),A=e.object({type:e.literal("files"),source:e.string(),bind:e.string(),"skip-if":e.array(q).optional()}),K=e.object({uses:e.literal("chat"),system:e.string().optional(),message:e.string(),output:e.record(e.string(),e.any()).optional(),replace:e.array(Z).optional(),tools:e.array(e.string()).optional(),images:e.array(H).optional(),documents:e.array(X).optional(),references:e.array(Y).optional()}),Q=e.object({uses:e.literal("write-to-disk"),output:e.string(),keys:e.union([e.string(),e.array(e.string())]).optional()}),m=e.discriminatedUnion("uses",[K,Q]),ee=e.object({type:e.literal("serial"),tools:e.array(e.string()).optional(),steps:e.array(m)}),te=e.object({type:e.literal("batch"),tools:e.array(e.string()).optional(),batch:e.array(A),steps:e.array(m)});e.preprocess(t=>t.batch&&t.batch.length>0?{...t,type:"batch"}:{...t,type:"serial"},e.discriminatedUnion("type",[ee,te]));const oe=e.object({type:e.literal("serial"),tools:e.array(e.string()).optional(),steps:e.array(m),dependsOn:e.union([e.string(),e.array(e.string())]).optional()}),ie=e.object({type:e.literal("batch"),tools:e.array(e.string()).optional(),batch:e.array(A),steps:e.array(m),dependsOn:e.union([e.string(),e.array(e.string())]).optional()}),ne=e.preprocess(t=>t.batch&&t.batch.length>0?{...t,type:"batch"}:{...t,type:"serial"},e.discriminatedUnion("type",[oe,ie])),re=e.record(e.string(),ne),ae=e.object({using:M,jobs:re}),se="ax.job",le=["yaml","yml","json"];async function ce(t,i){const{recorder:n}=i,{content:r,format:l}=await w(t,{defaults:{name:se,formats:le},tag:"Job File"});let a=null;if(l==="json")a=JSON.parse(r);else if(l==="yaml"||l==="yml")a=S.parse(r);else throw new Error("Invalid job file format");n?.debug?.heading.log("The Job Object"),n?.debug?.log(a);const c=ae.safeParse(a);if(!c.success)throw new Error(`The job file is not valid:
3
3
  ${D(c.error)}`);return c.data}p(ce,"getJobConfig");const ge="ax.config",pe=["yaml","yml","json"];async function me(t,i){const{recorder:n}=i,{content:r,format:l}=await w(t,{defaults:{name:ge,formats:pe},tag:"Config File"});let a=null;if(l==="json")a=JSON.parse(r);else if(l==="yaml"||l==="yml")a=S.parse(r);else throw new Error("Invalid config file format");n?.debug?.heading.log("The Config Object"),n?.debug?.log(a);const c=V.safeParse(a);if(!c.success)throw new Error(`The config file is not valid:
4
4
  ${D(c.error)}`);return c.data}p(me,"getServiceConfig");function D(t){return t.issues.map(i=>` - ${i.path.join(".")||"root"}: ${i.message}`).join(`
5
5
  `)}p(D,"formatZodError");const d="./logs/",ue="~/.axle/logs/";class he{static{p(this,"LogWriter")}time;initialized=!1;logDir=d;pendingWrites=[];constructor(){this.time=new Date().toISOString()}get filename(){return`${this.logDir}${this.time}.log`}async initialize(){try{await v(d),this.logDir=d}catch{const r=ue.replace("~",W());try{await v(r),this.logDir=r}catch{await U(r,{recursive:!0}),this.logDir=r}}const i=F(this.filename,`AXLE: New run at ${this.time}
@@ -0,0 +1,31 @@
1
+ var ze=Object.defineProperty;var l=(e,t)=>ze(e,"name",{value:t,configurable:!0});import Xe from"@anthropic-ai/sdk";import*as T from"zod";import F,{z as H}from"zod";import{FinishReason as N,GoogleGenAI as Ze}from"@google/genai";import Ye from"openai";import{serializeError as Qe}from"serialize-error";import{readFile as et,access as tt,constants as nt}from"fs/promises";import{glob as ie}from"glob";import{readFile as U,access as st,stat as rt,writeFile as ot,mkdir as at}from"node:fs/promises";import{resolve as ee,extname as ce,dirname as it}from"node:path";import x from"chalk";import le from"node:readline";class A extends Error{static{l(this,"AxleError")}code;id;details;constructor(t,n){super(t,{cause:n?.cause}),this.name=this.constructor.name,this.code=n?.code||"AXLE_ERROR",this.id=n?.id,this.details=n?.details,Object.setPrototypeOf(this,A.prototype)}}function ct(e){const{text:t,files:n}=e,s=[];if(t&&s.push({type:"text",text:t}),n)for(const r of n)s.push({type:"file",file:r});return s}l(ct,"toContentParts");function C(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
2
+
3
+ `)}l(C,"getTextContent");function lt(e){return e.filter(t=>t.type==="tool-call")}l(lt,"getToolCalls");var E=(e=>(e[e.Stop=0]="Stop",e[e.Length=1]="Length",e[e.FunctionCall=2]="FunctionCall",e[e.Error=3]="Error",e[e.Custom=4]="Custom",e))(E||{});function j(e){if(e==null)return{type:"error",error:{type:"Undetermined",message:"Unknown error occurred"},usage:{in:0,out:0},raw:e};if(e instanceof Error)return{type:"error",error:{type:e.name||"Error",message:e.message||"Unexpected error"},usage:{in:0,out:0},raw:e};if(typeof e=="object"){const t=e,n=t?.error?.error?.type||t?.error?.type||t?.type||t?.code||t?.status||"Undetermined",s=t?.error?.error?.message||t?.error?.message||t?.message||t?.error||"Unexpected error";return{type:"error",error:{type:String(n),message:String(s)},usage:{in:0,out:0},raw:e}}return{type:"error",error:{type:"Undetermined",message:String(e)},usage:{in:0,out:0},raw:e}}l(j,"getUndefinedError");function ue(e){return e.map(t=>{if(t.role==="assistant"){const n=[];for(const s of t.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="thinking"?s.redacted?n.push({type:"redacted_thinking",data:s.text}):n.push({type:"thinking",thinking:s.text,signature:s.signature}):s.type==="tool-call"&&n.push({type:"tool_use",id:s.id,name:s.name,input:s.parameters});return{role:"assistant",content:n}}if(t.role==="tool")return{role:"user",content:t.content.map(n=>({type:"tool_result",tool_use_id:n.id,content:n.content}))};if(typeof t.content=="string")return{role:"user",content:t.content};{const n=[];for(const s of t.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="file"&&(s.file.type==="image"?n.push({type:"image",source:{type:"base64",media_type:s.file.mimeType,data:s.file.base64}}):s.file.type==="document"&&s.file.mimeType==="application/pdf"&&n.push({type:"document",source:{type:"base64",media_type:"application/pdf",data:s.file.base64}}));return{role:"user",content:n}}})}l(ue,"convertToProviderMessages");function pe(e){return e.map(t=>{const n=F.toJSONSchema(t.schema);if(!ut(n))throw new Error(`Schema for tool ${t.name} must be an object type`);return{name:t.name,description:t.description,input_schema:n}})}l(pe,"convertToProviderTools");function fe(e){const t=[];for(const n of e)if(n.type==="text")t.push({type:"text",text:n.text});else if(n.type==="thinking")t.push({type:"thinking",text:n.text||"",redacted:!1});else if(n.type==="redacted_thinking")t.push({type:"thinking",text:n.text||"",redacted:!0});else if(n.type==="tool_use"){if(typeof n.input!="object"||n.input===null||Array.isArray(n.input))throw new Error(`Invalid tool call input for ${n.name}: expected object, got ${typeof n.input}`);t.push({type:"tool-call",id:n.id,name:n.name,parameters:n.input})}return t}l(fe,"convertToAxleContentParts");function te(e){switch(e){case"max_tokens":return E.Length;case"end_turn":return E.Stop;case"stop_sequence":return E.Stop;case"tool_use":return E.FunctionCall;case"pause_turn":case"refusal":default:return E.Error}}l(te,"convertStopReason$2");function ut(e){return e&&typeof e=="object"&&e.type==="object"}l(ut,"isObjectSchema");async function pt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.stop&&(c.stop_sequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop);const f={model:n,max_tokens:4096,messages:ue(s),...r&&{system:r},...o&&{tools:pe(o)},...c};i?.debug?.log(f);let p;try{const d=await t.messages.create(f);p=ft(d)}catch(d){p=j(d)}return i?.debug?.log(p),p}l(pt,"createGenerationRequest$2");function ft(e){const t=te(e.stop_reason);if(t===E.Error)return{type:"error",error:{type:"Uncaught error",message:`Stop reason is not recognized or unhandled: ${e.stop_reason}`},usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e};if(t===E.FunctionCall){const n=fe(e.content);return{type:"success",id:e.id,model:e.model,role:e.role,finishReason:E.FunctionCall,content:n,text:C(n)??"",usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e}}if(e.type=="message"){const n=fe(e.content);return{type:"success",id:e.id,model:e.model,role:"assistant",finishReason:t,content:n,text:C(n)??"",usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e}}}l(ft,"convertToAIResponse");function dt(){const e=new Map;function t(n){const s=[];switch(n.type){case"message_start":s.push({type:"start",id:n.message.id,data:{model:n.message.model,timestamp:Date.now()}});break;case"message_delta":n.delta.stop_reason&&s.push({type:"complete",data:{finishReason:te(n.delta.stop_reason),usage:n.usage?{in:n.usage.input_tokens||0,out:n.usage.output_tokens||0}:void 0}});case"message_stop":break;case"content_block_start":if(n.content_block.type==="text")n.index;else if(n.content_block.type==="tool_use"){const o=n.content_block;e.set(n.index,{id:o.id,name:o.name,argumentsBuffer:""}),s.push({type:"tool-call-start",data:{index:n.index,id:o.id,name:o.name}})}else n.content_block.type==="thinking"?s.push({type:"thinking-start",data:{index:n.index,redacted:!1}}):n.content_block.type==="redacted_thinking"?s.push({type:"thinking-start",data:{index:n.index,redacted:!0}}):n.content_block.type==="server_tool_use"||n.content_block.type;break;case"content_block_delta":if(n.delta.type==="text_delta")s.push({type:"text",data:{text:n.delta.text,index:n.index}});else if(n.delta.type==="input_json_delta"){const o=e.get(n.index);o&&(o.argumentsBuffer+=n.delta.partial_json)}else n.delta.type==="thinking_delta"?s.push({type:"thinking-delta",data:{text:n.delta.thinking,index:n.index}}):n.delta.type==="signature_delta"||n.delta.type;break;case"content_block_stop":const r=e.get(n.index);if(r){try{const o=JSON.parse(r.argumentsBuffer);s.push({type:"tool-call-complete",data:{index:n.index,id:r.id,name:r.name,arguments:o}})}catch(o){throw new Error(`Failed to parse tool call arguments for ${r.name}: ${o instanceof Error?o.message:String(o)}`)}e.delete(n.index)}break;default:console.warn("Unknown Anthropic stream event type")}return s}return l(t,"handleEvent"),{handleEvent:t}}l(dt,"createAnthropicStreamingAdapter");async function*_t(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.stop&&(c.stop_sequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop);const f={model:n,max_tokens:4096,messages:ue(s),...r&&{system:r},...o&&{tools:pe(o)},...c};i?.debug?.log(f);const p=dt();try{const d=await t.messages.create({...f,stream:!0});for await(const _ of d){const h=p.handleEvent(_);for(const m of h)yield m}}catch(d){yield{type:"error",data:{type:"STREAMING_ERROR",message:d instanceof Error?d.message:String(d),raw:d}}}}l(_t,"createStreamingRequest$3");const O={CLAUDE_SONNET_4_5_20250929:"claude-sonnet-4-5-20250929",CLAUDE_SONNET_4_5_LATEST:"claude-sonnet-4-5",CLAUDE_HAIKU_4_5:"claude-haiku-4-5",CLAUDE_OPUS_4_1_20250805:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_1_LATEST:"claude-opus-4-1",CLAUDE_OPUS_4_20250514:"claude-opus-4-20250514",CLAUDE_OPUS_4_LATEST:"claude-opus-4-0",CLAUDE_SONNET_4_20250514:"claude-sonnet-4-20250514",CLAUDE_SONNET_4_LATEST:"claude-sonnet-4-0",CLAUDE_3_7_SONNET_20250219:"claude-3-7-sonnet-20250219",CLAUDE_3_7_SONNET_LATEST:"claude-3-7-sonnet-latest",CLAUDE_3_5_SONNET_20241022:"claude-3-5-sonnet-20241022",CLAUDE_3_5_HAIKU_20241022:"claude-3-5-haiku-20241022",CLAUDE_3_5_HAIKU_LATEST:"claude-3-5-haiku-latest",CLAUDE_3_5_SONNET_20240620:"claude-3-5-sonnet-20240620"};O.CLAUDE_SONNET_4_5_20250929,O.CLAUDE_SONNET_4_5_LATEST,O.CLAUDE_HAIKU_4_5,O.CLAUDE_OPUS_4_1_20250805,O.CLAUDE_OPUS_4_1_LATEST,O.CLAUDE_OPUS_4_20250514,O.CLAUDE_OPUS_4_LATEST,O.CLAUDE_SONNET_4_20250514,O.CLAUDE_SONNET_4_LATEST,O.CLAUDE_3_7_SONNET_20250219,O.CLAUDE_3_7_SONNET_LATEST,O.CLAUDE_3_5_SONNET_20241022,O.CLAUDE_3_5_HAIKU_20241022,O.CLAUDE_3_5_HAIKU_LATEST,O.CLAUDE_3_5_SONNET_20240620;const de=O.CLAUDE_HAIKU_4_5,_e="anthropic";class me{static{l(this,"AnthropicProvider")}name=_e;client;model;constructor(t,n){this.model=n??de,this.client=new Xe({apiKey:t})}async createGenerationRequest(t){return await pt({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return _t({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function ge(e,t,n){const s={};return t&&(s.systemInstruction=t),e&&e.length>0&&(s.tools=e.map(r=>({functionDeclarations:[{name:r.name,description:r.description,parametersJsonSchema:F.toJSONSchema(r.schema)}]}))),n&&Object.assign(s,n),s}l(ge,"prepareConfig");function he(e){return e.map(mt).filter(t=>t!==void 0)}l(he,"convertAxleMessagesToGemini");function mt(e){switch(e.role){case"tool":return gt(e);case"assistant":return ht(e);case"user":return yt(e)}}l(mt,"convertMessage$3");function gt(e){return{role:"user",parts:e.content.map(t=>({functionResponse:{id:t.id??void 0,name:t.name,response:{output:t.content}}}))}}l(gt,"convertToolMessage$3");function ht(e){const t=[],n=e.content.filter(r=>r.type==="text");if(n.length>0){const r=n.map(o=>o.text).join("");r&&t.push({text:r})}const s=e.content.filter(r=>r.type==="tool-call");return s.length>0&&t.push(...s.map(r=>({functionCall:{id:r.id??void 0,name:r.name,args:r.parameters}}))),{role:"assistant",parts:t}}l(ht,"convertAssistantMessage$3");function yt(e){return typeof e.content=="string"?{role:"user",parts:[{text:e.content}]}:{role:"user",parts:e.content.map(Et).filter(n=>n!==null)}}l(yt,"convertUserMessage$3");function Et(e){return e.type==="text"||e.type==="instructions"?{text:e.type==="text"?e.text:e.instructions}:e.type==="file"&&(e.file.type==="image"||e.file.type==="document")?{inlineData:{mimeType:e.file.mimeType,data:e.file.base64}}:null}l(Et,"convertContentPart$3");function ye(e){switch(e){case N.STOP:return[!0,E.Stop];case N.MAX_TOKENS:return[!0,E.Length];case N.FINISH_REASON_UNSPECIFIED:case N.SAFETY:case N.RECITATION:case N.LANGUAGE:case N.OTHER:case N.BLOCKLIST:case N.PROHIBITED_CONTENT:case N.SPII:case N.MALFORMED_FUNCTION_CALL:case N.IMAGE_SAFETY:return[!1,E.Error]}}l(ye,"convertStopReason$1");async function It(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.max_tokens&&(c.maxOutputTokens=c.max_tokens,delete c.max_tokens),c.stop&&(c.stopSequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop),c.top_p!==void 0&&(c.topP=c.top_p,delete c.top_p);const f={contents:he(s),config:ge(o,r,c)};i?.debug?.log(f);let p;try{const d=await t.models.generateContent({model:n,...f});p=wt(d,{recorder:i})}catch(d){i?.error?.log(d),p=j(d)}return i?.debug?.log(p),p}l(It,"createGenerationRequest$1");function wt(e,t){const{recorder:n}=t,s=e.usageMetadata.promptTokenCount,r=e.usageMetadata.totalTokenCount-s,o={in:s,out:r};if(!e)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:e};if(e.promptFeedback&&e.promptFeedback.blockReason)return{type:"error",error:{type:"Blocked",message:`Response blocked by Google AI: ${e.promptFeedback.blockReason}, ${e.promptFeedback.blockReasonMessage}`},usage:o,raw:e};if(!e.candidates||e.candidates.length===0)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:e};e.candidates.length>1&&n?.warn?.log(`We received ${e.candidates.length} response candidates`);const a=e.candidates[0],i=(a.content?.parts||[]).map(p=>p.text).filter(p=>p!==void 0).join(""),[c,f]=ye(a.finishReason);if(c){const p=[];if(i&&p.push({type:"text",text:i}),e.functionCalls)for(const d of e.functionCalls){if(typeof d.args!="object"||d.args===null||Array.isArray(d.args))throw new Error(`Invalid tool call arguments for ${d.name}: expected object, got ${typeof d.args}`);p.push({type:"tool-call",id:d.id,name:d.name,parameters:d.args})}return{type:"success",id:e.responseId,model:e.modelVersion,role:"assistant",finishReason:e.functionCalls?E.FunctionCall:f,content:p,text:C(p)??"",usage:o,raw:e}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${f}`},usage:o,raw:e}}l(wt,"fromModelResponse$3");function Tt(){let e=0,t=-1,n="",s="",r=0,o=0;function a(u){const i=[];n||(n=u.responseId||`gemini-${Date.now()}`,s=u.modelVersion||"gemini",i.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}})),u.usageMetadata&&(r=u.usageMetadata.promptTokenCount||0,o=(u.usageMetadata.totalTokenCount||0)-r);const c=u.candidates?.[0];if(!c)return i;const f=c.content?.parts||[];for(const p of f){const d="thought"in p&&p.thought===!0;if(d&&p.text?(t===-1&&(t=e+1,i.push({type:"thinking-start",data:{index:t}})),i.push({type:"thinking-delta",data:{index:t,text:p.text}})):p.text&&!d&&i.push({type:"text",data:{text:p.text,index:e}}),p.functionCall){e++;const _=`tool-${e}`;i.push({type:"tool-call-start",data:{index:e,id:_,name:p.functionCall.name}}),i.push({type:"tool-call-complete",data:{index:e,id:_,name:p.functionCall.name,arguments:p.functionCall.args}})}}if(c.finishReason){const[p,d]=ye(c.finishReason);p?i.push({type:"complete",data:{finishReason:d,usage:{in:r,out:o}}}):i.push({type:"error",data:{type:"FinishReasonError",message:`Unexpected finish reason: ${c.finishReason}`,usage:{in:r,out:o},raw:u}})}return i}return l(a,"handleChunk"),{handleChunk:a}}l(Tt,"createGeminiStreamingAdapter");async function*xt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.max_tokens&&(c.maxOutputTokens=c.max_tokens,delete c.max_tokens),c.stop&&(c.stopSequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop),c.top_p!==void 0&&(c.topP=c.top_p,delete c.top_p);const f={contents:he(s),config:ge(o,r,c)};i?.debug?.log(f);const p=Tt();try{const d=await t.models.generateContentStream({model:n,...f});for await(const _ of d){const h=p.handleChunk(_);for(const m of h)yield m}}catch(d){i?.error?.log(d),yield{type:"error",data:{type:"STREAMING_ERROR",message:d instanceof Error?d.message:String(d),raw:d}}}}l(xt,"createStreamingRequest$2");const y={GEMINI_2_5_PRO:"gemini-2.5-pro",GEMINI_2_5_FLASH:"gemini-2.5-flash",GEMINI_2_5_FLASH_PREVIEW_05_20:"gemini-2.5-flash-preview-05-20",GEMINI_2_5_FLASH_LITE:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_PREVIEW_06_17:"gemini-2.5-flash-lite-preview-06-17",GEMINI_2_5_FLASH_LIVE_PREVIEW:"gemini-live-2.5-flash-preview",GEMINI_2_5_FLASH_PREVIEW_NATIVE_AUDIO_DIALOG:"gemini-2.5-flash-preview-native-audio-dialog",GEMINI_2_5_FLASH_EXP_NATIVE_AUDIO_THINKING_DIALOG:"gemini-2.5-flash-exp-native-audio-thinking-dialog",GEMINI_2_5_FLASH_IMAGE_PREVIEW:"gemini-2.5-flash-image-preview",GEMINI_2_5_FLASH_PREVIEW_TTS:"gemini-2.5-flash-preview-tts",GEMINI_2_5_PRO_PREVIEW_TTS:"gemini-2.5-pro-preview-tts",GEMINI_2_0_FLASH:"gemini-2.0-flash",GEMINI_2_0_FLASH_001:"gemini-2.0-flash-001",GEMINI_2_0_FLASH_EXP:"gemini-2.0-flash-exp",GEMINI_2_0_FLASH_PREVIEW_IMAGE_GENERATION:"gemini-2.0-flash-preview-image-generation",GEMINI_2_0_FLASH_LITE:"gemini-2.0-flash-lite",GEMINI_2_0_FLASH_LITE_001:"gemini-2.0-flash-lite-001",GEMINI_2_0_FLASH_LIVE_001:"gemini-2.0-flash-live-001",GEMINI_1_5_PRO:"gemini-1.5-pro",GEMINI_1_5_PRO_LATEST:"gemini-1.5-pro-latest",GEMINI_1_5_PRO_001:"gemini-1.5-pro-001",GEMINI_1_5_PRO_002:"gemini-1.5-pro-002",GEMINI_1_5_FLASH:"gemini-1.5-flash",GEMINI_1_5_FLASH_LATEST:"gemini-1.5-flash-latest",GEMINI_1_5_FLASH_001:"gemini-1.5-flash-001",GEMINI_1_5_FLASH_002:"gemini-1.5-flash-002",GEMINI_1_5_FLASH_8B:"gemini-1.5-flash-8b",GEMINI_1_5_FLASH_8B_LATEST:"gemini-1.5-flash-8b-latest",GEMINI_1_5_FLASH_8B_001:"gemini-1.5-flash-8b-001",GEMMA_3N_E4B_IT:"gemma-3n-e4b-it",GEMMA_3_1B_IT:"gemma-3-1b-it",GEMMA_3_4B_IT:"gemma-3-4b-it",GEMMA_3_12B_IT:"gemma-3-12b-it",GEMMA_3_27B_IT:"gemma-3-27b-it",LEARNLM_2_0_FLASH_EXPERIMENTAL:"learnlm-2.0-flash-experimental",EMBEDDING_001:"embedding-001",TEXT_EMBEDDING_004:"text-embedding-004"};y.GEMINI_2_5_PRO,y.GEMINI_2_5_FLASH,y.GEMINI_2_5_FLASH_PREVIEW_05_20,y.GEMINI_2_5_FLASH_LITE,y.GEMINI_2_5_FLASH_LITE_PREVIEW_06_17,y.GEMINI_2_5_FLASH_LIVE_PREVIEW,y.GEMINI_2_5_FLASH_PREVIEW_NATIVE_AUDIO_DIALOG,y.GEMINI_2_5_FLASH_EXP_NATIVE_AUDIO_THINKING_DIALOG,y.GEMINI_2_5_FLASH_IMAGE_PREVIEW,y.GEMINI_2_0_FLASH,y.GEMINI_2_0_FLASH_001,y.GEMINI_2_0_FLASH_EXP,y.GEMINI_2_0_FLASH_PREVIEW_IMAGE_GENERATION,y.GEMINI_2_0_FLASH_LITE,y.GEMINI_2_0_FLASH_LITE_001,y.GEMINI_2_0_FLASH_LIVE_001,y.GEMINI_1_5_PRO,y.GEMINI_1_5_PRO_LATEST,y.GEMINI_1_5_PRO_001,y.GEMINI_1_5_PRO_002,y.GEMINI_1_5_FLASH,y.GEMINI_1_5_FLASH_LATEST,y.GEMINI_1_5_FLASH_001,y.GEMINI_1_5_FLASH_002,y.GEMINI_1_5_FLASH_8B,y.GEMINI_1_5_FLASH_8B_LATEST,y.GEMINI_1_5_FLASH_8B_001,y.GEMMA_3N_E4B_IT,y.GEMMA_3_1B_IT,y.GEMMA_3_4B_IT,y.GEMMA_3_12B_IT,y.GEMMA_3_27B_IT,y.LEARNLM_2_0_FLASH_EXPERIMENTAL;const Ee=y.GEMINI_2_5_FLASH,Ie="Gemini";class we{static{l(this,"GeminiProvider")}name=Ie;client;model;constructor(t,n){this.model=n??Ee,this.client=new Ze({apiKey:t})}async createGenerationRequest(t){return await It({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return xt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function Te(e){return e.map(St).flat(1)}l(Te,"convertAxleMessagesToOllama");function xe(e){return e&&e.length>0?e.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:F.toJSONSchema(t.schema)}})):void 0}l(xe,"convertToolDefToOllama");function St(e){switch(e.role){case"tool":return At(e);case"assistant":return Ot(e);default:return bt(e)}}l(St,"convertMessage$2");function At(e){return e.content.map(t=>({role:"tool",tool_call_id:t.id,content:t.content}))}l(At,"convertToolMessage$2");function Ot(e){const t=e.content.filter(r=>r.type==="tool-call"),n=e.content.filter(r=>r.type==="text"),s=t.length>0?t.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:r.parameters}})):void 0;return{role:e.role,content:n.map(r=>r.text).join(""),...s&&{toolCalls:s}}}l(Ot,"convertAssistantMessage$2");function bt(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=[],n=[];for(const s of e.content){const r=Rt(s);r.text!==null&&t.push(r.text),r.image!==null&&n.push(r.image)}return{role:e.role,content:t.join(""),...n.length>0&&{images:n}}}}l(bt,"convertUserMessage$2");function Rt(e){return e.type==="text"||e.type==="instructions"?{text:e.type==="text"?e.text:e.instructions,image:null}:e.type==="file"&&e.file.type==="image"?{text:null,image:e.file.base64}:{text:null,image:null}}l(Rt,"convertContentPart$2");async function kt(e){const{url:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=xe(o),f=u?{...u}:{temperature:.7};f.max_tokens&&(f.num_predict=f.max_tokens,delete f.max_tokens);const p={model:n,messages:Te(s),stream:!1,options:f,...r&&{system:r},...c&&{tools:c}};i?.debug?.log(p);let d;try{const _=await fetch(`${t}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);const h=await _.json();d=Pt(h)}catch(_){i?.error?.log("Error fetching Ollama response:",_),d=j(_)}return i?.debug?.log(d),d}l(kt,"createGenerationRequest");function Pt(e){if(e.done_reason==="stop"&&e.message){const t=[];if(e.message.content!==void 0&&t.push({type:"text",text:e.message.content}),e.message.tool_calls)for(const s of e.message.tool_calls){if(typeof s.function.arguments!="object"||s.function.arguments===null||Array.isArray(s.function.arguments))throw new Error(`Invalid tool call arguments for ${s.function.name}: expected object, got ${typeof s.function.arguments}`);t.push({type:"tool-call",id:s.id,name:s.function.name,parameters:s.function.arguments})}const n=t.some(s=>s.type==="tool-call");return{type:"success",id:`ollama-${Date.now()}`,model:e.model,role:"assistant",finishReason:n?E.FunctionCall:E.Stop,content:t,text:C(t)??"",usage:{in:e.prompt_eval_count||0,out:e.eval_count||0},raw:e}}return{type:"error",error:{type:"OllamaError",message:"Unexpected error from Ollama"},usage:{in:0,out:0},raw:e}}l(Pt,"fromModelResponse$2");function Nt(){let e="",t=0,n=-1,s=0;function r(o){const a=[];if(e||(e=`ollama-${Date.now()}`,a.push({type:"start",id:e,data:{model:o.model,timestamp:Date.now()}})),o.message?.thinking&&(n===-1&&(n=t+1,a.push({type:"thinking-start",data:{index:n}})),a.push({type:"thinking-delta",data:{index:n,text:o.message.thinking}})),o.message?.content&&a.push({type:"text",data:{text:o.message.content,index:t}}),o.message?.tool_calls)for(const u of o.message.tool_calls){s++;const i=u.id||`tool-${s}`;if(typeof u.function.arguments!="object"||u.function.arguments===null||Array.isArray(u.function.arguments))throw new Error(`Invalid tool call arguments for ${u.function.name}: expected object, got ${typeof u.function.arguments}`);a.push({type:"tool-call-start",data:{index:s,id:i,name:u.function.name}}),a.push({type:"tool-call-complete",data:{index:s,id:i,name:u.function.name,arguments:u.function.arguments}})}if(o.done){const u=Mt(o.done_reason);a.push({type:"complete",data:{finishReason:u,usage:{in:o.prompt_eval_count||0,out:o.eval_count||0}}})}return a}return l(r,"handleChunk"),{handleChunk:r}}l(Nt,"createOllamaStreamingAdapter");function Mt(e){switch(e){case"stop":return E.Stop;case"length":return E.Length;default:return E.Stop}}l(Mt,"convertStopReason");async function*$t(e){const{url:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=xe(o),f=u?{...u}:{temperature:.7};f.max_tokens&&(f.num_predict=f.max_tokens,delete f.max_tokens);const p={model:n,messages:Te(s),stream:!0,options:f,...r&&{system:r},...c&&{tools:c}};i?.debug?.log(p);const d=Nt();try{const _=await fetch(`${t}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);if(!_.body)throw new Error("Response body is null");const h=_.body.getReader(),m=new TextDecoder;let w="";for(;;){const{done:b,value:R}=await h.read();if(b)break;w+=m.decode(R,{stream:!0});const k=w.split(`
4
+ `);w=k.pop()||"";for(const G of k)if(G.trim())try{const P=JSON.parse(G),D=d.handleChunk(P);for(const $ of D)yield $}catch(P){i?.error?.log("Error parsing Ollama stream chunk:",P,G)}}}catch(_){i?.error?.log("Error in Ollama streaming request:",_),yield{type:"error",data:{type:"STREAMING_ERROR",message:_ instanceof Error?_.message:String(_),raw:_}}}}l($t,"createStreamingRequest$1");const Se="http://localhost:11434",Gt="Ollama";class Ae{static{l(this,"OllamaProvider")}name="Ollama";url;model;recorder;constructor(t,n){this.url=n||Se,this.model=t}async createGenerationRequest(t){return await kt({url:this.url,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return $t({url:this.url,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function Oe(e){if(e&&e.length>0)return e.map(t=>{const n=F.toJSONSchema(t.schema);return{type:"function",function:{name:t.name,description:t.description,parameters:n}}})}l(Oe,"toModelTools");function be(e,t){const n=e.map(Ct).flat(1);return t?[{role:"system",content:t},...n]:n}l(be,"convertAxleMessagesToChatCompletion");function Ct(e){switch(e.role){case"tool":return Lt(e);case"assistant":return vt(e);default:return Dt(e)}}l(Ct,"convertMessage$1");function Lt(e){return e.content.map(t=>({role:"tool",tool_call_id:t.id,content:t.content}))}l(Lt,"convertToolMessage$1");function vt(e){const t=e.content.filter(r=>r.type==="tool-call"),n=e.content.filter(r=>r.type==="text"),s=t.length>0?t.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:JSON.stringify(r.parameters)}})):void 0;return{role:e.role,content:n.map(r=>r.text).join(""),...s&&{tool_calls:s}}}l(vt,"convertAssistantMessage$1");function Dt(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=e.content.map(Ft).filter(n=>n!==null);return{role:e.role,content:t}}}l(Dt,"convertUserMessage$1");function Ft(e){if(e.type==="text"||e.type==="instructions")return{type:"text",text:e.type==="text"?e.text:e.instructions};if(e.type==="file"){if(e.file.type==="image")return{type:"image_url",image_url:{url:`data:${e.file.mimeType};base64,${e.file.base64}`}};if(e.file.type==="document")return{type:"file",file:{filename:e.file.name,file_data:`data:${e.file.mimeType};base64,${e.file.base64}`}}}return null}l(Ft,"convertContentPart$1");async function Ut(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a;let c=Oe(o);const f={model:n,messages:be(s,r),...c&&{tools:c},...u};i?.debug?.log(f);let p;try{const d=await t.chat.completions.create(f);p=jt(d)}catch(d){i?.error?.log(d),p=j(d)}return i?.debug?.log(p),p}l(Ut,"createGenerationRequestWithChatCompletion");function jt(e){if(e.choices.length>0){const t=e.choices[0],n=[];if(t.message.content&&n.push({type:"text",text:t.message.content}),t.message.tool_calls){for(const s of t.message.tool_calls)if(s.type==="function")try{n.push({type:"tool-call",id:s.id,name:s.function.name,parameters:JSON.parse(s.function.arguments)})}catch(r){throw new Error(`Failed to parse tool call arguments for ${s.function.name}: ${r instanceof Error?r.message:String(r)}`)}}return{type:"success",id:e.id,model:e.model,role:t.message.role,finishReason:te(t.finish_reason),content:n,text:C(n)??"",usage:{in:e.usage?.prompt_tokens??0,out:e.usage?.completion_tokens??0},raw:e}}return{type:"error",error:{type:"undetermined",message:"Unexpected response from OpenAI"},usage:{in:e.usage?.prompt_tokens??0,out:e.usage?.completion_tokens??0},raw:e}}l(jt,"fromModelResponse$1");function Wt(){const e=new Map;let t=0,n="",s="";function r(o){const a=[],u=o.choices[0];if(!u)return a;n||(n=o.id,s=o.model,a.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}}));const i=u.delta;if(i.content&&a.push({type:"text",data:{text:i.content,index:t}}),i.tool_calls)for(const c of i.tool_calls){const f=c.index;if(!e.has(f)){const d=t+f+1,_=c.id||`tool-${d}`;e.set(f,{id:_,name:c.function?.name||"",argumentsBuffer:""}),a.push({type:"tool-call-start",data:{index:d,id:_,name:c.function?.name||""}})}const p=e.get(f);c.id&&(p.id=c.id),c.function?.name&&(p.name=c.function.name),c.function?.arguments&&(p.argumentsBuffer+=c.function.arguments)}if(u.finish_reason){for(const[f,p]of e){const d=t+f+1;try{const _=JSON.parse(p.argumentsBuffer);a.push({type:"tool-call-complete",data:{index:d,id:p.id,name:p.name,arguments:_}})}catch(_){throw new Error(`Failed to parse tool call arguments for ${p.name}: ${_ instanceof Error?_.message:String(_)}`)}}const c=Ht(u.finish_reason);a.push({type:"complete",data:{finishReason:c,usage:o.usage?{in:o.usage.prompt_tokens,out:o.usage.completion_tokens}:{in:0,out:0}}})}return a}return l(r,"handleChunk"),{handleChunk:r}}l(Wt,"createChatCompletionStreamingAdapter");function Ht(e){switch(e){case"stop":return E.Stop;case"length":return E.Length;case"tool_calls":case"function_call":return E.FunctionCall;case"content_filter":return E.Error;default:return E.Stop}}l(Ht,"convertFinishReason");function Bt(){let e="",t="",n=0,s=0,r=0;const o=new Map,a=new Set;function u(i){const c=[];switch(i.type){case"response.created":{e=i.response.id||`openai-${Date.now()}`,t=i.response.model,c.push({type:"start",id:e,data:{model:t,timestamp:Date.now()}});break}case"response.output_text.delta":{c.push({type:"text",data:{text:i.delta,index:n}});break}case"response.function_call_arguments.delta":{const f=i.item_id;o.has(f)||(s++,o.set(f,{id:f,name:"",argumentsBuffer:""}),c.push({type:"tool-call-start",data:{index:s,id:f,name:""}}));const p=o.get(f);p.argumentsBuffer+=i.delta;break}case"response.function_call_arguments.done":{const f=i.item_id;if(o.get(f)){try{const d=JSON.parse(i.arguments);c.push({type:"tool-call-complete",data:{index:s,id:f,name:i.name,arguments:d}})}catch(d){throw new Error(`Failed to parse function call arguments for ${i.name}: ${d instanceof Error?d.message:String(d)}`)}o.delete(f)}break}case"response.completed":{const f=i.response.usage;c.push({type:"complete",data:{finishReason:i.response.incomplete_details?E.Error:E.Stop,usage:{in:f?.input_tokens||0,out:f?.output_tokens||0}}});break}case"response.failed":{c.push({type:"error",data:{type:"RESPONSES_API_ERROR",message:`Response failed: ${i.response.status}`,raw:i}});break}case"response.output_item.added":{if(i.item?.type==="reasoning"){const f=i.item.id;a.add(f),r++,c.push({type:"thinking-start",data:{index:r}})}break}case"response.reasoning_text.delta":{i.delta&&c.push({type:"thinking-delta",data:{index:r,text:i.delta}});break}case"response.reasoning_summary_text.delta":{i.delta&&c.push({type:"thinking-delta",data:{index:r,text:i.delta}});break}case"response.output_item.done":{if(i.item?.type==="reasoning"){const f=i.item.id;a.delete(f)}break}}return c}return l(u,"handleEvent"),{handleEvent:u}}l(Bt,"createResponsesAPIStreamingAdapter");const g={GPT_5:"gpt-5",GPT_5_MINI:"gpt-5-mini",GPT_5_NANO:"gpt-5-nano",GPT_5_CHAT_LATEST:"gpt-5-chat-latest",GPT_5_PRO:"gpt-5-pro",GPT_5_CODEX:"gpt-5-codex",GPT_4_5_PREVIEW:"gpt-4.5-preview",GPT_4_5_PREVIEW_2025_02_27:"gpt-4.5-preview-2025-02-27",GPT_4_1:"gpt-4.1",GPT_4_1_2025_04_14:"gpt-4.1-2025-04-14",GPT_4_1_MINI:"gpt-4.1-mini",GPT_4_1_MINI_2025_04_14:"gpt-4.1-mini-2025-04-14",GPT_4_1_NANO:"gpt-4.1-nano",GPT_4_1_NANO_2025_04_14:"gpt-4.1-nano-2025-04-14",GPT_4O:"gpt-4o",GPT_4O_2024_05_13:"gpt-4o-2024-05-13",GPT_4O_2024_08_06:"gpt-4o-2024-08-06",GPT_4O_2024_11_20:"gpt-4o-2024-11-20",GPT_4O_MINI:"gpt-4o-mini",GPT_4O_MINI_2024_07_18:"gpt-4o-mini-2024-07-18",GPT_4O_AUDIO_PREVIEW:"gpt-4o-audio-preview",GPT_4O_AUDIO_PREVIEW_2024_10_01:"gpt-4o-audio-preview-2024-10-01",GPT_4O_AUDIO_PREVIEW_2024_12_17:"gpt-4o-audio-preview-2024-12-17",GPT_4O_AUDIO_PREVIEW_2025_06_03:"gpt-4o-audio-preview-2025-06-03",GPT_4O_MINI_AUDIO_PREVIEW:"gpt-4o-mini-audio-preview",GPT_4O_MINI_AUDIO_PREVIEW_2024_12_17:"gpt-4o-mini-audio-preview-2024-12-17",GPT_REALTIME:"gpt-realtime",GPT_REALTIME_MINI:"gpt-realtime-mini",GPT_4O_REALTIME_PREVIEW:"gpt-4o-realtime-preview",GPT_4O_REALTIME_PREVIEW_2024_10_01:"gpt-4o-realtime-preview-2024-10-01",GPT_4O_REALTIME_PREVIEW_2024_12_17:"gpt-4o-realtime-preview-2024-12-17",GPT_4O_REALTIME_PREVIEW_2025_06_03:"gpt-4o-realtime-preview-2025-06-03",GPT_4O_MINI_REALTIME_PREVIEW:"gpt-4o-mini-realtime-preview",GPT_4O_MINI_REALTIME_PREVIEW_2024_12_17:"gpt-4o-mini-realtime-preview-2024-12-17",GPT_4O_SEARCH_PREVIEW:"gpt-4o-search-preview",GPT_4O_SEARCH_PREVIEW_2025_03_11:"gpt-4o-search-preview-2025-03-11",GPT_4O_MINI_SEARCH_PREVIEW:"gpt-4o-mini-search-preview",GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11:"gpt-4o-mini-search-preview-2025-03-11",GPT_4O_TRANSCRIBE:"gpt-4o-transcribe",GPT_4O_MINI_TRANSCRIBE:"gpt-4o-mini-transcribe",GPT_4O_MINI_TTS:"gpt-4o-mini-tts",GPT_IMAGE_1:"gpt-image-1",GPT_IMAGE_1_MINI:"gpt-image-1-mini",O4_MINI:"o4-mini",O4_MINI_2025_04_16:"o4-mini-2025-04-16",O3:"o3",O3_PRO:"o3-pro",O3_MINI:"o3-mini",O3_MINI_2025_01_31:"o3-mini-2025-01-31",O1_PRO:"o1-pro",O1_PRO_2025_03_19:"o1-pro-2025-03-19",O1:"o1",O1_2024_12_17:"o1-2024-12-17",O1_MINI:"o1-mini",O1_MINI_2024_09_12:"o1-mini-2024-09-12",O1_PREVIEW:"o1-preview",O1_PREVIEW_2024_09_12:"o1-preview-2024-09-12",GPT_OSS_120B:"gpt-oss-120b",GPT_OSS_7B:"gpt-oss-7b",SORA_2:"sora-2",SORA_2025_05_02:"sora-2025-05-02",CODEX_MINI:"codex-mini",COMPUTER_USE_PREVIEW:"computer-use-preview"},Re=[g.GPT_5,g.GPT_5_MINI,g.GPT_5_NANO,g.GPT_5_CHAT_LATEST,g.GPT_5_PRO,g.GPT_5_CODEX,g.GPT_4_1,g.GPT_4_1_2025_04_14,g.GPT_4_1_MINI,g.GPT_4_1_MINI_2025_04_14,g.GPT_4_1_NANO,g.GPT_4_1_NANO_2025_04_14,g.GPT_4O,g.GPT_4O_2024_05_13,g.GPT_4O_2024_08_06,g.GPT_4O_2024_11_20,g.GPT_4O_MINI,g.GPT_4O_MINI_2024_07_18,g.GPT_4O_AUDIO_PREVIEW,g.GPT_4O_AUDIO_PREVIEW_2024_10_01,g.GPT_4O_AUDIO_PREVIEW_2024_12_17,g.GPT_4O_AUDIO_PREVIEW_2025_06_03,g.GPT_4O_MINI_AUDIO_PREVIEW,g.GPT_4O_MINI_AUDIO_PREVIEW_2024_12_17,g.GPT_REALTIME,g.GPT_REALTIME_MINI,g.GPT_4O_REALTIME_PREVIEW,g.GPT_4O_REALTIME_PREVIEW_2024_10_01,g.GPT_4O_REALTIME_PREVIEW_2024_12_17,g.GPT_4O_REALTIME_PREVIEW_2025_06_03,g.GPT_4O_MINI_REALTIME_PREVIEW,g.GPT_4O_MINI_REALTIME_PREVIEW_2024_12_17,g.GPT_4O_SEARCH_PREVIEW,g.GPT_4O_SEARCH_PREVIEW_2025_03_11,g.GPT_4O_MINI_SEARCH_PREVIEW,g.GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11,g.GPT_4O_TRANSCRIBE,g.GPT_4O_MINI_TRANSCRIBE,g.O4_MINI,g.O4_MINI_2025_04_16,g.O3,g.O3_PRO,g.O3_MINI,g.O3_MINI_2025_01_31],ke=g.GPT_5;function Pe(e){if(e&&e.length>0)return e.map(t=>{const n=F.toJSONSchema(t.schema);return{type:"function",strict:!0,name:t.name,description:t.description,parameters:n}})}l(Pe,"prepareTools");function Ne(e){return e.map(Vt).flat(1)}l(Ne,"convertAxleMessageToResponseInput");function Vt(e){switch(e.role){case"tool":return qt(e);case"assistant":return Jt(e);default:return Kt(e)}}l(Vt,"convertMessage");function qt(e){return e.content.map(t=>({type:"function_call_output",call_id:t.id,output:t.content}))}l(qt,"convertToolMessage");function Jt(e){const t=[],n=e.content.filter(a=>a.type==="thinking");if(n.length>0)for(const a of n)t.push({type:"reasoning",id:`reasoning_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,summary:[{type:"summary_text",text:a.text}]});const s=C(e.content),r=e.content.filter(a=>a.type==="tool-call"),o=r.length>0?r.map(a=>({type:"function",id:a.id,function:{name:a.name,arguments:JSON.stringify(a.parameters)}})):void 0;return(s||o)&&t.push({role:e.role,content:s,...o&&{toolCalls:o}}),t}l(Jt,"convertAssistantMessage");function Kt(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=e.content.map(zt).filter(n=>n!==null);return{role:e.role,content:t}}}l(Kt,"convertUserMessage");function zt(e){if(e.type==="text")return{type:"input_text",text:e.text};if(e.type==="file"){if(e.file.type==="image")return{type:"input_image",image_url:`data:${e.file.mimeType};base64,${e.file.base64}`,detail:"auto"};if(e.file.type==="document")return{type:"input_file",filename:e.file.path,file_data:`data:${e.file.mimeType};base64,${e.file.base64}`}}return e.type==="thinking",null}l(zt,"convertContentPart");async function*Xt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a;Re.includes(n)?yield*Yt({client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}):yield*Zt({client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u})}l(Xt,"createStreamingRequest");async function*Zt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=Oe(o),f={model:n,messages:be(s,r),...c&&{tools:c},...u,stream:!0};i?.debug?.log(f);const p=Wt();try{const d=await t.chat.completions.create(f);for await(const _ of d){const h=p.handleChunk(_);for(const m of h)yield m}}catch(d){i?.error?.log(d),yield{type:"error",data:{type:"STREAMING_ERROR",message:d instanceof Error?d.message:String(d),raw:d}}}}l(Zt,"createChatCompletionStream");async function*Yt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a;console.log(u);const c=Pe(o),f={model:n,input:Ne(s),...r&&{instructions:r},stream:!0,...c?{tools:c}:{},...u};i?.debug?.log(f);const p=Bt();try{const d=t.responses.stream(f);for await(const _ of d){const h=p.handleEvent(_);for(const m of h)yield m}}catch(d){i?.error?.log(d),yield{type:"error",data:{type:"STREAMING_ERROR",message:d instanceof Error?d.message:String(d),raw:d}}}}l(Yt,"createResponsesAPIStream");async function Qt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=Pe(o),f={model:n,input:Ne(s),...r&&{instructions:r},...c?{tools:c}:{},...u};i?.debug?.log(f);let p;try{const d=await t.responses.create(f);p=en(d)}catch(d){i?.error?.log(d),p=j(d)}return i?.debug?.log(p),p}l(Qt,"createGenerationRequestWithResponsesAPI");function en(e){if(e.error)return{type:"error",error:{type:e.error.code||"undetermined",message:e.error.message||"Response generation failed"},usage:{in:e.usage?.input_tokens??0,out:e.usage?.output_tokens??0},raw:e};const t=e.output?.filter(r=>r.type==="reasoning")?.map(r=>r),n=[];if(t&&t.length>0)for(const r of t){const o=r.summary?.[0]?.text||r.content?.[0]?.text||"";(o||r.encrypted_content)&&n.push({type:"thinking",text:o,...r.encrypted_content&&{encrypted:r.encrypted_content}})}e.output_text&&n.push({type:"text",text:e.output_text});const s=e.output?.filter(r=>r.type==="function_call");if(s&&s.length>0)for(const r of s){const o=r;try{n.push({type:"tool-call",id:o.id||"",name:o.name||"",parameters:o.arguments?JSON.parse(o.arguments):{}})}catch(a){throw new Error(`Failed to parse tool call arguments for ${o.name}: ${a instanceof Error?a.message:String(a)}`)}}return{type:"success",id:e.id,model:e.model||"",role:"assistant",finishReason:e.incomplete_details?E.Error:E.Stop,content:n,text:C(n)??"",usage:{in:e.usage?.input_tokens??0,out:e.usage?.output_tokens??0},raw:e}}l(en,"fromModelResponse");const Me="OpenAI";class $e{static{l(this,"OpenAIProvider")}name=Me;client;model;constructor(t,n){this.model=n||ke,this.client=new Ye({apiKey:t})}async createGenerationRequest(t){return Re.includes(this.model)?await Qt({client:this.client,model:this.model,...t}):await Ut({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return Xt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}async function Ge(e){const{provider:t,messages:n,system:s,tools:r,recorder:o,options:a}=e;return t.createGenerationRequest({messages:n,system:s,tools:r,context:{recorder:o},options:a})}l(Ge,"generate");function tn(e,t){const n=t.usage??{in:0,out:0};e.in+=n.in??0,e.out+=n.out??0}l(tn,"appendUsage");function Ce(e){return JSON.stringify({error:e})}l(Ce,"serializeToolError");async function nn(e,t){const n=[];let s;for(const r of e){let o;try{o=await t(r.name,r.parameters)}catch(a){o={type:"error",error:{type:"exception",message:a instanceof Error?a.message:String(a)}}}if(o==null){s={name:r.name,message:`Tool not found: ${r.name}`},n.push({id:r.id,name:r.name,content:Ce({type:"not-found",message:s.message})});break}o.type==="success"?n.push({id:r.id,name:r.name,content:o.content}):n.push({id:r.id,name:r.name,content:Ce(o.error)})}return{results:n,missingTool:s}}l(nn,"executeToolCalls");async function Le(e){const{provider:t,messages:n,system:s,tools:r,onToolCall:o,maxIterations:a,recorder:u,options:i}=e,c=[...n],f=[],p={in:0,out:0};let d=0,_;const h=l(m=>{c.push(m),f.push(m)},"addMessage");for(;;){if(a!==void 0&&d>=a)return{result:"error",messages:f,error:{type:"model",error:{type:"error",error:{type:"MaxIterations",message:`Exceeded max iterations (${a})`}}},usage:p};d+=1;const m=await Ge({provider:t,messages:c,system:s,tools:r,recorder:u,options:i});if(tn(p,m),m.type==="error")return{result:"error",messages:f,error:{type:"model",error:m},usage:p};const w={role:"assistant",id:m.id,model:m.model,content:m.content,finishReason:m.finishReason};if(h(w),_=w,m.finishReason!==E.FunctionCall)return{result:"success",messages:f,final:_,usage:p};const b=lt(m.content);if(b.length===0)return{result:"success",messages:f,final:_,usage:p};const{results:R,missingTool:k}=await nn(b,o);if(R.length>0&&h({role:"tool",content:R}),k)return{result:"error",messages:f,error:{type:"tool",error:k},usage:p}}}l(Le,"generateWithTools");function sn(e,t){if(!t||Object.keys(t).length===0)throw new A(`The provider ${e} is not configured. Please check your configuration.`);switch(e){case"openai":return new $e(t["api-key"],t.model);case"anthropic":return new me(t["api-key"],t.model);case"gemini":return new we(t["api-key"],t.model);case"ollama":{const n=t;return new Ae(n.model,n.url)}default:throw new A("The provider is unsupported")}}l(sn,"getProvider");class oe extends A{static{l(this,"TaskError")}constructor(t,n){super(t,{code:"TASK_ERROR",id:n?.id,details:{taskType:n?.taskType,taskIndex:n?.taskIndex,...n?.details},cause:n?.cause}),Object.setPrototypeOf(this,oe.prototype)}}const I={Running:"running",Success:"success",PartialSuccess:"partialSuccess",Fail:"fail"};var S=(e=>(e[e.Trace=10]="Trace",e[e.Debug=20]="Debug",e[e.Info=30]="Info",e[e.Warn=40]="Warn",e[e.Error=50]="Error",e[e.Fatal=60]="Fatal",e))(S||{});class rn{static{l(this,"Recorder")}instanceId=crypto.randomUUID();currentLevel=S.Info;logs=[];writers=[];_debug;_info;_warn;_error;constructor(){this.buildMethods()}buildMethods(){this._debug=S.Debug>=this.currentLevel?this.createLoggingFunction(S.Debug):null,this._info=S.Info>=this.currentLevel?this.createLoggingFunction(S.Info):null,this._warn=S.Warn>=this.currentLevel?this.createLoggingFunction(S.Warn):null,this._error=this.createLoggingFunction(S.Error)}set level(t){this.currentLevel=t,this.buildMethods()}get level(){return this.currentLevel}get info(){return this._info}get warn(){return this._warn}get error(){return this._error}get debug(){return this._debug}subscribe(t){this.writers.includes(t)||this.writers.push(t)}unsubscribe(t){const n=this.writers.indexOf(t);n!==-1&&this.writers.splice(n,1)}publish(t){this.logs.push(t);for(const n of this.writers)n.handleEvent(t)}logFunction(t,n,...s){let r=s.map(o=>typeof o=="string"?{message:o}:o instanceof Error?Qe(o):o);this.publish({level:t,time:Date.now(),kind:n,payload:r})}createLoggingFunction(t){return{log:this.logFunction.bind(this,t,"body"),heading:{log:this.logFunction.bind(this,t,"heading")}}}getLogs(t=S.Info){return this.logs.filter(n=>n.level>=t)}async shutdown(){for(const t of this.writers)typeof t.flush=="function"&&await t.flush()}}async function on(e,t){const{defaults:n,tag:s}=t;let r=null,o="";if(e)try{o=ee(e),r=await U(o,{encoding:"utf-8"})}catch{throw new Error(`${s} not found, see --help for details`)}else{for(const a of n.formats)try{o=ee(n.name+"."+a),r=await U(o,{encoding:"utf-8"});break}catch{continue}if(r===null)throw new Error(`${s} not found, see --help for details`)}return{content:r,format:o.split(".").pop()??""}}l(on,"searchAndLoadFile");async function an(e,t){let n="";for(const s of e){const r=await ie(s);t?.debug?.log(`many-files parser. For glob "${s}", found ${r.length} files.`);const o=await Promise.all(r.map(async a=>{const u=await U(a,"utf-8");return a+`:
5
+ `+u}));n+=o.join(`
6
+ `)}return n}l(an,"loadManyFiles");function cn(e,t){e=e.replace("**/*","**");const n=/(?<asterisks>\*{1,2})(?<extension>\.[^\\/]+)?/,s=e.match(n);if(s){let r="";return s.groups?.asterisks.length==1?r+=t.stem:r+=t.dir+t.stem,s.groups?.extension?r+=s.groups.extension:r+=t.ext,e.replace(s[0],r)}return e}l(cn,"replaceFilePattern");function ln(e){const t=/(?<name>[^\\/]+)(?<extension>\.[^\\/]+)$/,n=e.match(t);return n&&n.length>0&&n.groups?{abs:e,dir:e.replace(n[0],""),ext:n.groups.extension,stem:n.groups.name,name:n[0]}:null}l(ln,"pathToComponents");async function un(e){const t=it(e);await at(t,{recursive:!0})}l(un,"ensureDirectoryExistence");async function pn({filePath:e,content:t}){await un(e),await ot(e,t)}l(pn,"writeFileWithDirectories");const B=[".jpg",".jpeg",".png",".gif",".webp",".bmp",".tiff"],V=[".pdf"],q=[".txt",".md",".markdown"],ve=20*1024*1024;function fn(e){return e.type==="text"}l(fn,"isTextFileInfo");function dn(e){return e.type==="image"||e.type==="document"}l(dn,"isBase64FileInfo");function _n(e){const t=ce(e).toLowerCase();if(q.includes(t))return"utf-8";if(B.includes(t)||V.includes(t))return"base64";{const n=[...q,...B,...V];throw new Error(`Unsupported file type: ${t}. Supported types: ${n.join(", ")}`)}}l(_n,"getEncodingForFile");async function J(e,t){const n=ee(e);try{await st(n)}catch{throw new Error(`File not found: ${e}`)}const s=await rt(n);if(s.size>ve)throw new Error(`File too large: ${s.size} bytes. Maximum allowed: ${ve} bytes`);const r=ce(n).toLowerCase(),o=n.split("/").pop()||"";if((t||_n(n))==="utf-8"){if(!q.includes(r))throw new Error(`Unsupported text file type: ${r}. Supported types: ${q.join(", ")}`);let u;switch(r){case".txt":u="text/plain";break;case".md":case".markdown":u="text/markdown";break;default:u="text/plain"}const i=await U(n,"utf-8");return{path:n,content:i,mimeType:u,size:s.size,name:o,type:"text"}}else{let u,i;if(B.includes(r))switch(u="image",r){case".jpg":case".jpeg":i="image/jpeg";break;case".png":i="image/png";break;case".gif":i="image/gif";break;case".webp":i="image/webp";break;case".bmp":i="image/bmp";break;case".tiff":i="image/tiff";break;default:i="image/jpeg"}else if(V.includes(r))u="document",i="application/pdf";else throw new Error(`Unsupported file type: ${r}. Supported types: ${[...B,...V].join(", ")}`);const f=(await U(n)).toString("base64");return{path:n,base64:f,mimeType:i,size:s.size,name:o,type:u}}}l(J,"loadFileContent");class mn{static{l(this,"FileRunPlanner")}constructor(t,n,s=[]){this.source=t,this.bind=n,this.skipConditions=s}async plan(t){const n=[],s=await ie(this.source,{withFileTypes:!0});for(const r of s){const o=r.fullpath(),a=ln(o);let u=!1;for(const i of this.skipConditions)if(u=await i.eval({components:a}),u)break;if(!u){const i=await et(o,"utf-8"),c={variables:{[this.bind]:i,...a},steps:t};n.push(c)}}return n}}class gn{static{l(this,"MultiPlanner")}planners;constructor(t){this.planners=t}async plan(t){const n=this.planners.map(async r=>await r.plan(t));return(await Promise.all(n)).flat()}}function K(e,t,n="{{}}"){const s=n==="{{}}"?/\{\{(.*?)\}\}/g:/\{(.*?)\}/g;return e=e.replace(s,(r,o)=>{if(o=o.trim(),Object.prototype.hasOwnProperty.call(t,o)){const a=t[o];return a==null?"":String(a)}return r}),e}l(K,"replaceVariables");class hn{static{l(this,"FileExistSkipCondition")}constructor(t){this.pattern=t}type="file-exist";async eval(t){const n=K(this.pattern,t.components,"{{}}");try{return await tt(n,nt.F_OK),!0}catch{return!1}}}function z(e,t=0){const n={};for(const[s,r]of Object.entries(e))if(typeof r=="string")switch(r){case"string":n[s]=t===0?T.string():T.string().optional();break;case"number":n[s]=t===0?T.number():T.number().optional();break;case"boolean":n[s]=t===0?T.boolean():T.boolean().optional();break;case"string[]":n[s]=T.array(T.string());break;default:throw new Error(`Unsupported declarative type: ${r}`)}else if(Array.isArray(r))if(r.length===1&&typeof r[0]=="object"){const o=z(r[0],t+1);n[s]=T.array(T.object(o))}else throw new Error(`Unsupported array format for key ${s}. Expected [DeclarativeSchema].`);else n[s]=T.object(z(r,t+1));return n}l(z,"declarativeToOutputSchema");function X(e){if(e instanceof T.ZodString)return["string","Your answer"];if(e instanceof T.ZodNumber)return["number",42];if(e instanceof T.ZodBoolean)return["boolean",!0];if(e instanceof T.ZodArray){const t=e.element;if(t instanceof T.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(t instanceof T.ZodNumber)return["number array",[42,59,3.14]];if(t instanceof T.ZodBoolean)return["boolean array",[!0,!1,!1]];if(t instanceof T.ZodObject){const[n,s]=X(t);return["object array",[s,s]]}return["array",[]]}if(e instanceof T.ZodObject){const t=e.shape,n={};for(const[s,r]of Object.entries(t)){const[o,a]=X(r);n[s]=a}return["JSON object",n]}if(e instanceof T.ZodOptional){const t=e.unwrap(),[n,s]=X(t);return[`${n} | undefined`,s]}}l(X,"zodToExample");function De(e){return typeof e=="object"&&Object.values(e).every(t=>t&&typeof t=="object"&&"_def"in t)}l(De,"isOutputSchema");class Fe{static{l(this,"AbstractInstruct")}name="instruct";prompt;system=null;inputs={};tools={};files=[];textReferences=[];instructions=[];schema;rawResponse;_taggedSections=void 0;_result=void 0;constructor(t,n){this.prompt=t,this.schema=n}setInputs(t){this.inputs=t}addInput(t,n){this.inputs[t]=n}addTools(t){for(const n of t)this.tools[n.name]=n}addTool(t){this.tools[t.name]=t}addImage(t){if(t.type!=="image")throw new Error(`Expected image file, got ${t.type}`);const n=t;this.files.push(n)}addDocument(t){if(t.type!=="document")throw new Error(`Expected document file, got ${t.type}`);const n=t;this.files.push(n)}addFile(t){if(!dn(t))throw new Error(`Expected image or document file, got ${t.type}`);this.files.push(t)}addReference(t,n){if(typeof t=="string"){this.textReferences.push({content:t,name:n?.name});return}if(fn(t))this.textReferences.push({content:t.content,name:n?.name??t.name});else throw new Error(`Expected text file, got ${t.type}`)}addInstructions(t){if(typeof t!="string"||t.trim()==="")throw new Error("Instruction must be a non-empty string");this.instructions.push(t)}hasTools(){return Object.keys(this.tools).length>0}hasFiles(){return this.files.length>0}get result(){return this._result}compile(t,n={}){const s=this.createUserMessage(t,n),r=this.createInstructions();return{message:s,instructions:r}}createUserMessage(t,n={}){const{recorder:s,options:r}=n,o={...t,...this.inputs};let a=K(this.prompt,o);if(this.textReferences.length>0)for(const[u,i]of this.textReferences.entries()){const c=i.name?`: ${i.name}`:"";a+=`
7
+
8
+ ## Reference ${u+1}${c}
9
+
10
+ \`\`\`${i.content}'''`}if(r?.warnUnused){const u=a.match(/\{\{(.*?)\}\}/g);if(u)throw s?.error.log(`Warning unused variables ${u.join(", ")}`),new Error(`Unused variables: ${u.join(", ")}`)}return a}createInstructions(t=""){if(t=`# Instructions
11
+
12
+ `+t,Object.keys(this.schema).length>0){t+=`## Output Format Instructions
13
+ `,t+=`
14
+ Here is how you should format your output. Follow the instructions strictly.
15
+ `;for(const[s,r]of Object.entries(this.schema)){const o=this.generateFieldInstructions(s,r);t+=o}}if(this.instructions.length>0){t+=`
16
+ ## Additional Instructions
17
+
18
+ `;for(const s of this.instructions)t+=`- ${s}
19
+ `}return t}generateFieldInstructions(t,n){const[s,r]=X(n);return`
20
+ - Use <${t}></${t}> tags to indicate the answer for ${t}. The answer must be a ${s}.
21
+ Example: <${t}>${JSON.stringify(r)}</${t}>
22
+ `}finalize(t,n={}){const{recorder:s}=n;if(this.rawResponse=t,Object.keys(this.schema).length===0){if(t.trim()==="{}"||t.trim()==="")return this._result={},this._result;throw new Error("Schema is empty, but rawValue is not an empty object representation or empty string.")}this._taggedSections=this._taggedSections||this.parseTaggedSections(t);const o={};for(const[a,u]of Object.entries(this.schema)){const i=this._taggedSections.tags[a];if(i!==void 0)o[a]=this.preprocessValue(u,i);else if(u.def.type!=="optional")throw new Error(`Expected results with tag ${a} but it does not exist`)}try{const a={};for(const[u,i]of Object.entries(this.schema))u in o&&(a[u]=i.parse(o[u]));return this._result=a,this._result}catch(a){if(a&&typeof a=="object"&&"issues"in a){const u=a.issues.map(i=>`${i.path.join(".")}: ${i.message}`).join(", ");throw new Error(`Validation failed: ${u}`)}throw a}}preprocessValue(t,n){switch(n=n.trim(),t.def.type){case"string":try{return JSON.parse(n)}catch{if(typeof n=="string")return n;throw new Error(`Cannot parse '${n}' as string. Ensure it is a valid JSON string or a plain string.`)}case"number":{const s=parseFloat(n);if(isNaN(s))throw new Error(`Cannot parse '${n}' as number`);return s}case"boolean":{const s=n.toLowerCase();if(s==="true")return!0;if(s==="false")return!1;throw new Error(`Cannot parse '${n}' as boolean. Expected 'true' or 'false'`)}case"array":{if(n==="")return[];try{const s=JSON.parse(n);if(Array.isArray(s))return s}catch{}if(n.includes(","))return n.split(",").map(s=>{const r=s.trim();try{return JSON.parse(r)}catch{return r}}).filter(s=>s!=="")}case"object":{n.includes("```json")&&(n=n.replace(/```json/g,"").replace(/```/g,""));try{return JSON.parse(n)}catch(s){throw new Error(`Cannot parse object as JSON: ${s.message}`)}}case"optional":{const s=t.def.innerType;return this.preprocessValue(s,n)}default:return n}}parseTaggedSections(t){t.trim().startsWith("```json")&&t.trim().endsWith("```")&&(t=t.trim().slice(7,-3).trim());const n=/<(\w+)>(.*?)<\/\1>/gs,s={};let r=t;r=r.replace(n,(a,u,i)=>(s[u]=i,""));const o=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return r=r.replace(o,(a,u,i)=>(s[u]=i,"")),{tags:s,remaining:r.trim()}}}class L extends Fe{static{l(this,"Instruct")}constructor(t,n){super(t,n)}static with(t,n){if(!n)return new L(t,{response:T.string()});if(De(n))return new L(t,n);{const s=z(n);return new L(t,s)}}}function W(e){return Array.isArray(e)?e:[e]}l(W,"arrayify");function M(e,t){return t?`${t}:${e.slice(0,8)}`:e.slice(0,8)}l(M,"friendly");function yn(e){return new Promise(t=>setTimeout(t,e))}l(yn,"delay");class Ue{static{l(this,"WriteToDisk")}constructor(t,n="{{response}}"){this.pathTemplate=t,this.contentTemplate=n}name="write-to-disk";async execute(t){const{variables:n,options:s,recorder:r}=t;if(s?.dryRun){r?.info?.log("[Dry run] WriteToDisk not executed.");return}let o;this.pathTemplate.includes("*")?o=cn(this.pathTemplate,n.file):o=K(this.pathTemplate,n,"{{}}");const a=K(this.contentTemplate,n,"{{}}");await pn({filePath:o,content:a}),r?.info?.log(`Wrote to ${o}`)}}const En=T.object({searchTerm:T.string().describe("The search term to query")});class In{static{l(this,"BraveSearchTool")}name="brave";description="Perform a search using the Brave search engine";schema=En;apiKey;throttle;lastExecTime=0;constructor(t){t&&this.configure(t)}configure(t){const{rateLimit:n}=t;this.apiKey=t["api-key"],this.throttle=n?1100/n:void 0}async execute(t){const{searchTerm:n}=t;if(this.throttle){for(;Date.now()-this.lastExecTime<this.throttle;)await yn(this.throttle-(Date.now()-this.lastExecTime));this.lastExecTime=Date.now()}try{const s=this.apiKey,r="https://api.search.brave.com/res/v1/web/search",o=new URL(r);o.searchParams.append("q",n),o.searchParams.append("format","json");const a=await fetch(o.toString(),{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":s}});if(!a.ok)throw new Error(`[Brave] HTTP error ${a.status}: ${a.statusText}`);const u=await a.json();return JSON.stringify(u)}catch(s){throw s instanceof Error?new Error(`[Brave] Error fetching search results: ${s.message}`):s}}}const ne=new In,wn=H.object({operation:H.enum(["add","subtract","multiply","divide"]).describe("The operation to perform (add, subtract, multiply, divide)"),a:H.number().describe("First operand"),b:H.number().describe("Second operand")}),je={name:"calculator",description:"Performs basic arithmetic operations",schema:wn,execute:l(async({operation:e,a:t,b:n})=>{switch(e){case"add":return`${t} + ${n} = ${t+n}`;case"subtract":return`${t} - ${n} = ${t-n}`;case"multiply":return`${t} * ${n} = ${t*n}`;case"divide":if(n===0)throw new Error("Cannot divide by zero");return`${t} / ${n} = ${t/n}`;default:throw new Error(`Unknown operation: ${e}`)}},"execute")};function Tn(e,t){const n=t?.[e];switch(e){case"brave":return n&&ne.configure(n),ne;case"calculator":return je;default:throw new Error(`Unknown tool: ${e}`)}}l(Tn,"createTool");function xn(e,t){return e.map(n=>Tn(n,t))}l(xn,"createTools");function Sn(e,t="{{response}}"){return new Ue(e,t)}l(Sn,"createWriteToDiskAction");const An={async convert(e,t){const{recorder:n,toolNames:s,toolConfig:r}=t,{message:o,system:a,replace:u}=e;let i;e.output?i=L.with(o,e.output):i=L.with(o),a&&(i.system=a);const c=[...new Set([...s??[],...e.tools??[]])];if(c.length>0){const f=xn(c,r);i.addTools(f)}if(u){for(const f of u)if(f.source==="file"){const p=W(f.files),d=await an(p,n);i.addInput(f.pattern,d)}}if(e.images)for(const f of e.images)try{const p=await J(f.file,"base64");i.addFile(p)}catch(p){throw new Error(`Failed to load image '${f.file}': ${p.message}`)}if(e.documents)for(const f of e.documents)try{const p=await J(f.file,"base64");i.addFile(p)}catch(p){throw new Error(`Failed to load document '${f.file}': ${p.message}`)}if(e.references)for(const f of e.references)try{const p=await J(f.file,"utf-8");i.addReference(p)}catch(p){throw new Error(`Failed to load reference file '${f.file}': ${p.message}`)}return i}};class On{static{l(this,"StepToClassRegistry")}converters=new Map;get(t){const n=this.converters.get(t);if(!n)throw new Error(`No converter registered for step: ${t}`);return n}register(t,n){this.converters.set(t,n)}}const bn={async convert(e){const t=e.keys?W(e.keys).map(n=>`{{${n}}}`).join(`
23
+ `):"{{response}}";return Sn(e.output,t)}},se=new On;se.register("write-to-disk",bn),se.register("chat",An);async function Z(e,t){const{recorder:n}=t,s=e.tools??void 0,r=e.toolConfig??void 0,o=e.steps.map(async a=>await se.get(a.uses).convert(a,{recorder:n,toolNames:s,toolConfig:r}));return Promise.all(o)}l(Z,"configToTasks");async function We(e,t){const{batch:n}=e;return n.length===1?He(n[0]):new gn(n.map(s=>He(s)))}l(We,"configToPlanner");function He(e){switch(e.type){case"files":let t;return e["skip-if"]&&(t=e["skip-if"].map(s=>Rn(s))),new mn(e.source,e.bind,t)}}l(He,"batchOptionsToPlanner");function Rn(e){switch(e.type){case"file-exist":return new hn(e.pattern)}}l(Rn,"skipOptionsToSkipConditions");function kn(e){return e.success===!1&&e.error!==void 0}l(kn,"isErrorResult");function Y(e,t){return{response:e,stats:t,success:!0}}l(Y,"createResult");function Q(e,t,n){return{response:t,stats:n,error:e,success:!1}}l(Q,"createErrorResult");class Be{static{l(this,"Conversation")}system;_messages=[];constructor(t){t&&(this._messages=t)}get messages(){return[...this._messages]}addSystem(t){this.system=t}addUser(t){typeof t=="string"?this._messages.push({role:"user",content:[{type:"text",text:t}]}):this._messages.push({role:"user",content:t})}addAssistant(t){if(typeof t=="string"){const n=t;this._messages.push({role:"assistant",id:crypto.randomUUID(),content:[{type:"text",text:n}],model:"user",finishReason:E.Custom})}else this._messages.push({role:"assistant",...t})}addToolResults(t){this._messages.push({role:"tool",content:t})}add(t){Array.isArray(t)?this._messages.push(...t):this._messages.push(t)}latest(){return this._messages[this._messages.length-1]}toString(){return JSON.stringify({system:this.system,messages:this._messages})}}function Pn(e,t,n){const{options:s,recorder:r}=n,o=s?.warnUnused??!0;for(const[a,u]of Object.entries(e))o&&t[a]&&r?.warn?.log(`Warning: Variable "${a}" is being overwritten. Previous value: ${t[a]}, new value: ${u}`),t[a]=u}l(Pn,"setResultsIntoVariables");function Nn(e){return"steps"in e&&"type"in e&&e.type==="serial"}l(Nn,"isSerialJob");const re=l((e,...t)=>{const n=l(async r=>{const{recorder:o}=r;return Nn(e)?await Z(e,{recorder:o}):[e,...t]},"prepare");return{execute:l(async r=>{const{provider:o,variables:a,options:u,stats:i,recorder:c,name:f}=r,p=crypto.randomUUID();c?.info?.log({type:"task",id:p,status:I.Running,message:`[${M(p,f)}] Starting job`});try{const d=await n({recorder:c}),_=new Be;for(const[h,m]of d.entries()){c?.info?.log({type:"task",id:p,status:I.Running,message:`[${M(p,f)}] Processing step ${h+1}: ${m.name}`});try{m instanceof L?await Gn(m,{conversation:_,provider:o,stats:i,variables:a,options:u,recorder:c}):await $n(m,{variables:a,options:u,recorder:c})}catch(w){throw w instanceof A?w:new oe(`Error executing step ${m.name}`,{id:p,taskType:m.name,taskIndex:h,cause:w instanceof Error?w:new Error(String(w))})}}return c?.info?.log({type:"task",status:I.Success,id:p,message:`[${M(p,f)}] Completed ${d.length} steps`}),Y(a.$previous,i)}catch(d){const _=d instanceof A?d:new A("Serial workflow execution failed",{id:p,cause:d instanceof Error?d:new Error(String(d))});return c?.info?.log({type:"task",status:I.Fail,id:p,message:`[${M(p,f)}] Failed: ${_.message}`}),c?.error.log(_),Q(_,a.$previous,i)}},"execute")}},"serialWorkflow");function Mn(e){return e?e.response!==void 0?String(e.response):JSON.stringify(e):""}l(Mn,"deriveInput");async function $n(e,t){const{variables:n,options:s,recorder:r}=t,o=Mn(n.$previous),a=await e.execute({input:o,variables:n,options:s,recorder:r});a!==void 0?(n.output=a,n.$previous={output:a}):n.$previous={}}l($n,"executeAction");async function Gn(e,t){const{conversation:n,provider:s,variables:r,options:o,stats:a,recorder:u}=t;e.system&&n.addSystem(e.system);const{message:i,instructions:c}=e.compile(r,{recorder:u,options:o}),f=e.files;if(n.addUser(ct({text:c+i,files:f})),o?.dryRun){u?.debug?.log(n);return}const p=Object.values(e.tools).map(m=>({name:m.name,description:m.description,schema:m.schema})),d=await Le({provider:s,messages:n.messages,tools:p,recorder:u,onToolCall:l(async(m,w)=>{const b=e.tools[m];if(!b)return null;u?.debug?.heading.log(`Executing tool ${b.name}`);try{const R=await b.execute(w);return u?.debug?.log(`Complete tool ${b.name}`),{type:"success",content:JSON.stringify(R)}}catch(R){const k=R instanceof Error?R.message:String(R);return u?.debug?.log(`Tool ${b.name} failed: ${k}`),{type:"error",error:{type:"execution",message:k}}}},"onToolCall")});a&&d.usage&&(a.in+=d.usage.in,a.out+=d.usage.out);const _=d.messages.filter(m=>!(m.role==="assistant"&&m.finishReason===E.Length));if(n.add(_),d.result==="error")throw new Error(JSON.stringify(d.error));const h=d.final;if(h)switch(h.finishReason){case E.Stop:{const m=C(h.content),w=e.finalize(m,{recorder:u});Pn(w,r,{options:o,recorder:u}),r.$previous=w;break}case E.Length:throw new Error("Incomplete model output due to max_tokens or token limit");case E.FunctionCall:break}}l(Gn,"executeInstruct");function Cn(e){return"type"in e&&e.type==="batch"}l(Cn,"isBatchJob");const Ve=l((e,...t)=>{const n=l(async r=>{const{recorder:o}=r;if(Cn(e)){const a=await We(e),u=await Z(e,{recorder:o});return[a,u]}else return[e,[...t]]},"prepare");return{execute:l(async r=>{const{provider:o,variables:a,options:u,stats:i,recorder:c,name:f}=r,p=crypto.randomUUID();try{const[d,_]=await n({recorder:c}),h=await d.plan(_);if(c?.debug?.heading.log("Runs",h),h.length===0)return c?.info?.log("No runs to execute"),Y([],i);let m=0;c?.info?.log({type:"task",status:I.Running,id:p,message:`[${M(p,"CRW")}] Working on 0/${h.length}`});const w=l(async(P,D)=>{try{return await re(...P.steps).execute({provider:o,variables:{...P.variables,...a},options:u,stats:i,recorder:c,name:`${f}-${D}`})}catch($){const ae=$ instanceof A?$:new A("Error executing run",{cause:$ instanceof Error?$:new Error(String($))});return c?.error?.log(ae),Q(ae,null,i)}finally{m++,c?.info?.log({type:"task",status:I.Running,id:p,message:`[${M(p,"CRW")}] Working on ${m}/${h.length}`})}},"executeRun"),b=5;let R=[];for(let P=0;P<h.length;P+=b){const D=h.slice(P,P+b),$=await Promise.all(D.map(w));R=R.concat($)}const k=R.some(kn);c?.info?.log({type:"task",status:k?I.PartialSuccess:I.Success,id:p,message:`[${M(p,"CRW")}] All jobs (${h.length}) completed${k?" with some errors":""}`});const G=R.map(P=>P.response);return Y(G,i)}catch(d){const _=d instanceof A?d:new A("Concurrent workflow execution failed",{id:p,cause:d instanceof Error?d:new Error(String(d))});return c?.error?.log(_),Q(_,null,i)}},"execute")}},"concurrentWorkflow");class Ln{static{l(this,"DAGParser")}static parse(t){const n=new Map;for(const[r,o]of Object.entries(t)){const a=this.parseNodeDefinition(r,o);n.set(r,a)}return this.validateDependencies(n),this.checkForCycles(n),{stages:this.createExecutionStages(n),nodes:n}}static parseNodeDefinition(t,n){if(this.isSimpleStep(n))return{id:t,steps:Array.isArray(n)?n:[n],dependencies:[],executionType:"serial"};if(this.isConcurrentNodeDefinition(n)){const s=n.dependsOn?W(n.dependsOn):[];return{id:t,steps:n.steps,dependencies:s,planner:n.planner,executionType:"concurrent"}}if(this.isNodeDefinition(n)){const s=n.dependsOn?W(n.dependsOn):[],r=W(n.step);return{id:t,steps:r,dependencies:s,executionType:"serial"}}throw new Error(`Invalid DAG node definition for '${t}'`)}static isSimpleStep(t){return t.name||Array.isArray(t)}static isConcurrentNodeDefinition(t){return t&&typeof t=="object"&&"planner"in t}static isNodeDefinition(t){return t&&typeof t=="object"&&"step"in t}static validateDependencies(t){for(const n of t.values())for(const s of n.dependencies)if(!t.has(s))throw new A(`Node "${n.id}" depends on non-existent node "${s}"`)}static checkForCycles(t){const n=new Set,s=new Set,r=l(o=>{if(s.has(o))return!0;if(n.has(o))return!1;n.add(o),s.add(o);const a=t.get(o);for(const u of a.dependencies)if(r(u))return!0;return s.delete(o),!1},"hasCycle");for(const o of t.keys())if(r(o))throw new A(`Circular dependency detected involving node "${o}"`)}static createExecutionStages(t){const n=[],s=new Set,r=new Set(t.keys());for(;r.size>0;){const o=[];for(const a of r)t.get(a).dependencies.every(c=>s.has(c))&&o.push(a);if(o.length===0)throw new A("Unable to resolve DAG dependencies - possible circular reference");n.push(o),o.forEach(a=>{s.add(a),r.delete(a)})}return n}}class vn{static{l(this,"DAGJobToDefinition")}static async convert(t,n){const{recorder:s}=n,r={};for(const[o,a]of Object.entries(t)){const{dependsOn:u,...i}=a;if(i.type==="batch"){const c=await We(i),f=await Z(i,{recorder:s}),p={planner:c,steps:f,...u?{dependsOn:u}:{}};r[o]=p}else{const c=await Z(i,{recorder:s});if(u){const f={step:c,dependsOn:u};r[o]=f}else r[o]=c}}return r}}async function Dn(e,t,n,s={}){const{variables:r}=n,o=t.nodes.get(e);try{let a;if(o.executionType==="concurrent"&&o.planner?a=await Ve(o.planner,...o.steps).execute({...n,variables:r,name:e}):a=await re(...o.steps).execute({...n,variables:r,name:e}),!a.success)throw new A(`Node "${e}" failed: ${a.error?.message}`);return a.response}catch(a){if(!s.continueOnError)throw a;return null}}l(Dn,"executeNode");function Fn(e){const t=Object.values(e)[0];return t&&typeof t=="object"&&"steps"in t}l(Fn,"isDAGJob");const Un=l((e,t={})=>{const n=l(async(r,o)=>Fn(r)?await vn.convert(r,o):r,"prepare");return{execute:l(async r=>{const{stats:o,recorder:a}=r,{maxConcurrency:u=3}=t,i=crypto.randomUUID();try{const c=await n(e,{recorder:a});a?.debug?.log(c);const f=Ln.parse(c),p=new Map;a?.info?.log({type:"task",id:i,status:I.Running,message:`[${M(i)}] Starting workflow execution with ${f.stages.length} stages`});for(const[_,h]of f.stages.entries()){a?.info?.log({type:"task",id:i,status:I.Running,message:`[${M(i)}] Stage ${_+1}/${f.stages.length}, executing ${h.length} nodes: ${h.join(", ")}`});const m=Math.min(h.length,u);for(let w=0;w<h.length;w+=m){const b=h.slice(w,w+m);(await Promise.all(b.map(async k=>{const G=await Dn(k,f,r,t);return{nodeId:k,result:G}}))).forEach(({nodeId:k,result:G})=>{p.set(k,G)})}}a?.info?.log({type:"task",status:I.Success,id:i,message:`[${M(i)}] Workflow execution completed successfully`});const d=Object.fromEntries(p);return Y(d,o)}catch(c){const f=c instanceof A?c:new A("DAG workflow execution failed",{id:i,cause:c instanceof Error?c:new Error(String(c))});return a?.info?.log({type:"task",status:I.Fail,id:i,message:`[${M(i)}] Workflow execution failed: ${f.message}`}),a?.error?.log(f),Q(f,null,o)}},"execute")}},"dagWorkflow"),jn=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],v={success:"\u2713",fail:"\u2717",spinning:jn};class Wn{static{l(this,"ConsoleWriter")}tasks=new Map;entries=[];truncate=0;intervalId=null;spinnerInterval=80;lastRender="";isRendering=!1;inline=!0;constructor(t={}){this.truncate=t.truncate??0,this.inline=t.inline??!0}startSpinner(){this.intervalId===null&&(this.intervalId=setInterval(()=>{[...this.tasks.values()].some(n=>n.status===I.Running)&&this.renderTasks()},this.spinnerInterval))}stopSpinner(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}renderTasks(){if(this.isRendering)return;if(this.isRendering=!0,this.inline&&this.lastRender){const o=this.lastRender.split(`
24
+ `).length;le.moveCursor(process.stdout,0,-o+1),le.clearScreenDown(process.stdout)}const t=[...this.tasks.values()],n=t.filter(o=>o.status===I.Running),s=t.filter(o=>o.status===I.Success||o.status===I.Fail);if(n.length===0&&s.length>0){let o="";for(const a of s){if(a.status===I.Success){const u=x.green(v.success);o+=`${u} ${a.text}
25
+ `}else if(a.status===I.Fail){const u=x.red(v.fail);o+=`${u} ${a.text}
26
+ `}this.tasks.delete(a.id)}console.log(o)}for(const o of this.entries){const{level:a,time:u,kind:i,payload:c}=o;i==="heading"?Bn(a,c,{truncate:this.truncate}):Vn(a,c,{truncate:this.truncate})}this.entries=[];let r="";for(const o of this.tasks.values())if(o.status===I.Running){const a=x.cyan(v.spinning[o.frameIndex]);o.frameIndex=(o.frameIndex+1)%v.spinning.length,r+=`${a} ${o.text}
27
+ `}else if(o.status===I.Success){const a=x.green(v.success);r+=`${a} ${o.text}
28
+ `}else if(o.status===I.Fail){const a=x.red(v.fail);r+=`${a} ${o.text}
29
+ `}this.lastRender=r,process.stdout.write(r),this.isRendering=!1}handleEvent(t){const{level:n,time:s,payload:r}=t;if(r.length>0&&Hn(r[0])){const a=r[0],{id:u,message:i,status:c}=a;if(c===I.Running)this.tasks.set(u,{id:u,text:i,status:c,frameIndex:0});else if((c===I.Success||c===I.Fail)&&this.tasks.has(u)){const f=this.tasks.get(u);f.status=c,f.text=i}}else this.entries.push(t);this.renderTasks();const o=[...this.tasks.values()].some(a=>a.status===I.Running);o&&this.intervalId===null?this.startSpinner():!o&&this.intervalId!==null&&this.stopSpinner()}destroy(){this.stopSpinner()}}function Hn(e){if(typeof e!="object"||e===null)return!1;const t=e;if(t.type!=="task"||typeof t.id!="string"||typeof t.message!="string")return!1;switch(t.status){case I.Running:case I.Success:case I.PartialSuccess:case I.Fail:return!0;default:return!1}}l(Hn,"isTask");function Bn(e,t,n){let s,r;e===S.Error?(s=x.red,r=x.redBright.bold):e===S.Warn?(s=x.yellow,r=x.yellowBright.bold):e>=S.Info?(s=x.blue,r=x.whiteBright.bold):(s=x.gray,r=x.white);const{message:o,data:a}=Ke(t);console.log(`${s("==>")} ${r(o)}`),Je(e,a,n)}l(Bn,"heading");function Vn(e,t,n){let s;e===S.Error?s=x.red:e===S.Warn?s=x.yellow:e>=S.Info?s=x.white:s=x.gray;const{message:r,data:o}=Ke(t);r&&console.log(s(r)),Je(e,o,n)}l(Vn,"body");const qe=" ";function Je(e,t,n){let s;e===S.Error?(s=x.red,n.truncate=0):e==S.Warn?s=x.yellow:e>=S.Info?s=x.white:s=x.gray,t.forEach(r=>{if(typeof r=="string"){console.log(s(`${qe}${r}`));return}for(const[o,a]of Object.entries(r)){let u=JSON.stringify(a,qn(n.truncate)," ");const i=`${o}: ${u}`.split(`
30
+ `).map(c=>qe+c).join(`
31
+ `);console.log(s(i))}})}l(Je,"values");function Ke(e){const[t,...n]=e;let s="",r=n;if(t){let{message:o,...a}=t;s=o&&typeof o=="string"?o:"",Object.keys(a).length>0&&(r=[a,...r])}return{message:s,data:r}}l(Ke,"toMsgData");function qn(e){return e===0?null:(t,n)=>typeof n=="string"&&n.length>e?n.slice(0,e)+"<...>":n}l(qn,"truncator");export{A,Be as C,de as D,we as G,L as I,S as L,O as M,_e as N,Ae as O,rn as R,Ue as W,Fe as a,z as b,me as c,Un as d,Ee as e,y as f,sn as g,Ie as h,De as i,Se as j,Gt as k,J as l,ke as m,g as n,Me as o,$e as p,Ge as q,Le as r,re as s,E as t,ne as u,je as v,Ve as w,Wn as x,on as y};
package/dist/index.d.ts CHANGED
@@ -776,6 +776,51 @@ interface GenerateProps {
776
776
  }
777
777
  declare function generate(props: GenerateProps): Promise<ModelResult>;
778
778
 
779
+ type ToolCallResult = {
780
+ type: "success";
781
+ content: string;
782
+ } | {
783
+ type: "error";
784
+ error: {
785
+ type: string;
786
+ message: string;
787
+ fatal?: boolean;
788
+ retryable?: boolean;
789
+ };
790
+ };
791
+ type GenerateWithToolsError = {
792
+ type: "model";
793
+ error: ModelError;
794
+ } | {
795
+ type: "tool";
796
+ error: {
797
+ name: string;
798
+ message: string;
799
+ };
800
+ };
801
+ type GenerateWithToolsResult = {
802
+ result: "success";
803
+ messages: AxleMessage[];
804
+ final?: AxleAssistantMessage;
805
+ usage?: Stats;
806
+ } | {
807
+ result: "error";
808
+ messages: AxleMessage[];
809
+ error: GenerateWithToolsError;
810
+ usage?: Stats;
811
+ };
812
+ interface GenerateWithToolsOptions {
813
+ provider: AIProvider;
814
+ messages: Array<AxleMessage>;
815
+ system?: string;
816
+ tools?: Array<ToolDefinition>;
817
+ onToolCall: (name: string, params: Record<string, unknown>) => Promise<ToolCallResult | null | undefined>;
818
+ maxIterations?: number;
819
+ recorder?: Recorder;
820
+ options?: GenerateOptions;
821
+ }
822
+ declare function generateWithTools(options: GenerateWithToolsOptions): Promise<GenerateWithToolsResult>;
823
+
779
824
  interface StreamProps {
780
825
  provider: AIProvider;
781
826
  messages: Array<AxleMessage>;
@@ -1200,6 +1245,7 @@ declare class Conversation {
1200
1245
  addAssistant(message: string): void;
1201
1246
  addAssistant(params: Omit<AxleAssistantMessage, "role">): void;
1202
1247
  addToolResults(input: Array<AxleToolCallResult>): void;
1248
+ add(messages: AxleMessage | AxleMessage[]): void;
1203
1249
  latest(): AxleMessage | undefined;
1204
1250
  toString(): string;
1205
1251
  }
@@ -1224,5 +1270,5 @@ declare class ConsoleWriter implements RecorderWriter {
1224
1270
  destroy(): void;
1225
1271
  }
1226
1272
 
1227
- export { index$3 as Anthropic, Axle, AxleStopReason, ChainOfThought, ConsoleWriter, Conversation, index$2 as Gemini, Instruct, LogLevel, index$1 as Ollama, index as OpenAI, WriteToDisk, braveSearchTool, calculatorTool, concurrentWorkflow, dagWorkflow, generate, serialWorkflow, stream };
1273
+ export { index$3 as Anthropic, Axle, AxleStopReason, ChainOfThought, ConsoleWriter, Conversation, index$2 as Gemini, Instruct, LogLevel, index$1 as Ollama, index as OpenAI, WriteToDisk, braveSearchTool, calculatorTool, concurrentWorkflow, dagWorkflow, generate, generateWithTools, serialWorkflow, stream };
1228
1274
  export type { AIProvider, Action, ActionContext, AxleAssistantMessage, AxleMessage, AxleToolCallMessage, AxleToolCallResult, AxleUserMessage, ContentPart, ContentPartFile, ContentPartText, ContentPartThinking, ContentPartToolCall, DAGDefinition, DAGWorkflowOptions, FileInfo, SerializedExecutionResponse, Tool, ToolDefinition, WorkflowStep };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- var m=Object.defineProperty;var i=(n,t)=>m(n,"name",{value:t,configurable:!0});import{R as g,A as o,g as f,s as d,d as p,l as h,a as w,i as x,b as k,D as E,M as v,N as y,c as P,e as b,f as L,h as A,G as T,j as S,k as M,O as _,m as O,n as D,o as R,p as C}from"./consoleWriter-Bg94CpP2.js";import{r as at,w as it,C as ot,I as nt,L as lt,W as ct,t as ht,u as ut,v as dt,q as pt}from"./consoleWriter-Bg94CpP2.js";import*as F from"zod";import"@anthropic-ai/sdk";import"@google/genai";import"openai";import"serialize-error";import"fs/promises";import"glob";import"node:fs/promises";import"node:path";import"chalk";import"node:readline";class I{static{i(this,"StreamParts")}listeners={start:new Set,text:new Set,thinking:new Set,"tool-call":new Set,"tool-call-complete":new Set,complete:new Set};isComplete=!1;on(t,e){return this.listeners[t].add(e),this}emit(t,...e){const r=this.listeners[t];if(r)for(const a of r)a(...e)}id="";model="";parts=[];finishReason;stats;get partsLength(){return this.parts.length}get currentId(){return this.id}start(t,e){this.id=t,this.model=e,this.emit("start",t)}complete(t,e){if(this.isComplete)return;this.finishReason=t,this.stats=e,this.isComplete=!0;const r=this.parts.filter(s=>s.type==="text").map(s=>s.text).join(""),a={type:"success",role:"assistant",id:this.id,model:this.model,content:this.parts,finishReason:t,usage:e,text:r,raw:{}};this.emit("complete",a)}error(t,e,r,a){if(this.isComplete)return;this.isComplete=!0;const s={type:"error",error:{type:t,message:e},usage:r,raw:a};this.emit("complete",s)}createText(t,e){if(t<this.parts.length)throw new Error(`Cannot create text at index ${t} because it already exists`);this.parts.push({type:"text",text:e}),this.emit("text",e)}updateText(t,e){const r=this.getPart(t,"text");r&&(r.text+=e,this.emit("text",r.text))}createToolCall(t,e,r){if(t<this.parts.length)throw new Error(`Cannot create tool-call at index ${t} because it already exists`);this.parts.push({type:"tool-call",id:e,name:r,parameters:{}}),this.emit("tool-call",e,r)}completeToolCall(t,e){const r=this.getPart(t,"tool-call");r&&(r.parameters=e,this.emit("tool-call-complete",r.id,r.name,e))}createThinking(t,e){if(t<this.parts.length)throw new Error(`Cannot create thinking at index ${t} because it already exists`);this.parts.push({type:"thinking",text:e}),this.emit("thinking",e)}updateThinking(t,e){const r=this.getPart(t,"thinking");r&&(r.text+=e,this.emit("thinking",e))}getPart(t,e){if(t<0||t>=this.parts.length)return null;const r=this.parts[t];return r.type===e?r:null}get currentMessage(){return{role:"assistant",content:[...this.parts],id:this.id,model:this.model,...this.finishReason?{finishReason:this.finishReason}:{}}}}function N(n){const{provider:t,messages:e,system:r,tools:a,recorder:s,options:c}=n,u=t.createStreamingRequest?.({messages:e,system:r,tools:a,context:{recorder:s},options:c});return console.log(u),new $(u)}i(N,"stream");class ${static{i(this,"StreamResultImpl")}constructor(t){this.streamSource=t,this.streamParts=new I,this.finalPromise=new Promise((e,r)=>{this.resolveFinal=e,this.rejectFinal=r}),this.streamParts.on("complete",e=>{this.resolveFinal?.(e)}),this.startProcessing()}streamParts;finalPromise;resolveFinal;rejectFinal;chunkListeners=new Set;processingStarted=!1;async*[Symbol.asyncIterator](){const t=[];let e=null,r=!1;const a=i(s=>{e?(e(s),e=null):t.push(s)},"listener");this.chunkListeners.add(a);try{for(;!r;){let s;t.length>0?s=t.shift():s=await new Promise(c=>{e=c}),s===null?r=!0:(yield s,(s.type==="complete"||s.type==="error")&&(r=!0))}}finally{this.chunkListeners.delete(a)}}async startProcessing(){if(!this.processingStarted){this.processingStarted=!0;try{for await(const t of this.streamSource)switch(this.chunkListeners.forEach(e=>e(t)),t.type){case"start":this.streamParts.start(t.id,t.data.model);break;case"text":const e=t.data.index;e>=this.streamParts.partsLength?this.streamParts.createText(e,t.data.text):this.streamParts.updateText(e,t.data.text);break;case"thinking-start":this.streamParts.createThinking(t.data.index,"");break;case"thinking-delta":this.streamParts.updateThinking(t.data.index,t.data.text);break;case"tool-call-start":this.streamParts.createToolCall(t.data.index,t.data.id,t.data.name);break;case"tool-call-complete":this.streamParts.completeToolCall(t.data.index,t.data.arguments);break;case"complete":this.streamParts.complete(t.data.finishReason,t.data.usage);break;case"error":this.streamParts.error(t.data.type,t.data.message,t.data.usage,t.data.raw);return}}catch(t){this.rejectFinal?.(t instanceof Error?t:new Error(String(t)))}finally{this.chunkListeners.forEach(t=>t(null))}}}get final(){return this.finalPromise}get current(){return this.streamParts.currentMessage}}class j{static{i(this,"Axle")}provider;stats={in:0,out:0};variables={};recorder=new g;constructor(t){if(Object.entries(t).length!==1)throw new o("Must have exactly one config");try{const e=Object.keys(t)[0],r=t[e];this.provider=f(e,r)}catch(e){throw e instanceof o?e:new o("Failed to initialize provider",{code:"PROVIDER_INIT_ERROR",cause:e instanceof Error?e:new Error(String(e))})}}addWriter(t){this.recorder.subscribe(t)}async execute(...t){try{let e;return e=await d(...t).execute({provider:this.provider,variables:this.variables,stats:this.stats,recorder:this.recorder}),e}catch(e){const r=e instanceof o?e:new o("Execution failed",{cause:e instanceof Error?e:new Error(String(e))});return this.recorder.error?.log(r),{response:null,error:r,success:!1}}}async executeDAG(t,e={},r){try{return await p(t,r).execute({provider:this.provider,variables:{...this.variables,...e},stats:this.stats,recorder:this.recorder})}catch(a){const s=a instanceof o?a:new o("DAG execution failed",{cause:a instanceof Error?a:new Error(String(a))});return this.recorder.error?.log(s),{response:null,error:s,success:!1}}}get logs(){return this.recorder.getLogs()}static async loadFileContent(t,e){return e==="utf-8"?h(t,"utf-8"):e==="base64"?h(t,"base64"):h(t)}}class l extends w{static{i(this,"ChainOfThought")}constructor(t,e){super(t,e)}static with(t,e){if(!e)return new l(t,{response:F.string()});if(x(e))return new l(t,e);{const r=k(e);return new l(t,r)}}createInstructions(t=""){return super.createInstructions(`Let's think step by step. Use <thinking></thinking> tags to show your reasoning and thought process.
1
+ var m=Object.defineProperty;var i=(n,t)=>m(n,"name",{value:t,configurable:!0});import{R as g,A as o,g as f,s as d,d as p,l as h,a as w,i as x,b as k,D as E,M as v,N as y,c as P,e as b,f as L,h as A,G as T,j as S,k as M,O as _,m as O,n as D,o as R,p as C}from"./consoleWriter-C6SvRPzi.js";import{t as at,x as it,C as ot,I as nt,L as lt,W as ct,u as ht,v as ut,w as dt,q as pt,r as mt}from"./consoleWriter-C6SvRPzi.js";import*as F from"zod";import"@anthropic-ai/sdk";import"@google/genai";import"openai";import"serialize-error";import"fs/promises";import"glob";import"node:fs/promises";import"node:path";import"chalk";import"node:readline";class I{static{i(this,"StreamParts")}listeners={start:new Set,text:new Set,thinking:new Set,"tool-call":new Set,"tool-call-complete":new Set,complete:new Set};isComplete=!1;on(t,e){return this.listeners[t].add(e),this}emit(t,...e){const r=this.listeners[t];if(r)for(const a of r)a(...e)}id="";model="";parts=[];finishReason;stats;get partsLength(){return this.parts.length}get currentId(){return this.id}start(t,e){this.id=t,this.model=e,this.emit("start",t)}complete(t,e){if(this.isComplete)return;this.finishReason=t,this.stats=e,this.isComplete=!0;const r=this.parts.filter(s=>s.type==="text").map(s=>s.text).join(""),a={type:"success",role:"assistant",id:this.id,model:this.model,content:this.parts,finishReason:t,usage:e,text:r,raw:{}};this.emit("complete",a)}error(t,e,r,a){if(this.isComplete)return;this.isComplete=!0;const s={type:"error",error:{type:t,message:e},usage:r,raw:a};this.emit("complete",s)}createText(t,e){if(t<this.parts.length)throw new Error(`Cannot create text at index ${t} because it already exists`);this.parts.push({type:"text",text:e}),this.emit("text",e)}updateText(t,e){const r=this.getPart(t,"text");r&&(r.text+=e,this.emit("text",r.text))}createToolCall(t,e,r){if(t<this.parts.length)throw new Error(`Cannot create tool-call at index ${t} because it already exists`);this.parts.push({type:"tool-call",id:e,name:r,parameters:{}}),this.emit("tool-call",e,r)}completeToolCall(t,e){const r=this.getPart(t,"tool-call");r&&(r.parameters=e,this.emit("tool-call-complete",r.id,r.name,e))}createThinking(t,e){if(t<this.parts.length)throw new Error(`Cannot create thinking at index ${t} because it already exists`);this.parts.push({type:"thinking",text:e}),this.emit("thinking",e)}updateThinking(t,e){const r=this.getPart(t,"thinking");r&&(r.text+=e,this.emit("thinking",e))}getPart(t,e){if(t<0||t>=this.parts.length)return null;const r=this.parts[t];return r.type===e?r:null}get currentMessage(){return{role:"assistant",content:[...this.parts],id:this.id,model:this.model,...this.finishReason?{finishReason:this.finishReason}:{}}}}function N(n){const{provider:t,messages:e,system:r,tools:a,recorder:s,options:c}=n,u=t.createStreamingRequest?.({messages:e,system:r,tools:a,context:{recorder:s},options:c});return console.log(u),new $(u)}i(N,"stream");class ${static{i(this,"StreamResultImpl")}constructor(t){this.streamSource=t,this.streamParts=new I,this.finalPromise=new Promise((e,r)=>{this.resolveFinal=e,this.rejectFinal=r}),this.streamParts.on("complete",e=>{this.resolveFinal?.(e)}),this.startProcessing()}streamParts;finalPromise;resolveFinal;rejectFinal;chunkListeners=new Set;processingStarted=!1;async*[Symbol.asyncIterator](){const t=[];let e=null,r=!1;const a=i(s=>{e?(e(s),e=null):t.push(s)},"listener");this.chunkListeners.add(a);try{for(;!r;){let s;t.length>0?s=t.shift():s=await new Promise(c=>{e=c}),s===null?r=!0:(yield s,(s.type==="complete"||s.type==="error")&&(r=!0))}}finally{this.chunkListeners.delete(a)}}async startProcessing(){if(!this.processingStarted){this.processingStarted=!0;try{for await(const t of this.streamSource)switch(this.chunkListeners.forEach(e=>e(t)),t.type){case"start":this.streamParts.start(t.id,t.data.model);break;case"text":const e=t.data.index;e>=this.streamParts.partsLength?this.streamParts.createText(e,t.data.text):this.streamParts.updateText(e,t.data.text);break;case"thinking-start":this.streamParts.createThinking(t.data.index,"");break;case"thinking-delta":this.streamParts.updateThinking(t.data.index,t.data.text);break;case"tool-call-start":this.streamParts.createToolCall(t.data.index,t.data.id,t.data.name);break;case"tool-call-complete":this.streamParts.completeToolCall(t.data.index,t.data.arguments);break;case"complete":this.streamParts.complete(t.data.finishReason,t.data.usage);break;case"error":this.streamParts.error(t.data.type,t.data.message,t.data.usage,t.data.raw);return}}catch(t){this.rejectFinal?.(t instanceof Error?t:new Error(String(t)))}finally{this.chunkListeners.forEach(t=>t(null))}}}get final(){return this.finalPromise}get current(){return this.streamParts.currentMessage}}class j{static{i(this,"Axle")}provider;stats={in:0,out:0};variables={};recorder=new g;constructor(t){if(Object.entries(t).length!==1)throw new o("Must have exactly one config");try{const e=Object.keys(t)[0],r=t[e];this.provider=f(e,r)}catch(e){throw e instanceof o?e:new o("Failed to initialize provider",{code:"PROVIDER_INIT_ERROR",cause:e instanceof Error?e:new Error(String(e))})}}addWriter(t){this.recorder.subscribe(t)}async execute(...t){try{let e;return e=await d(...t).execute({provider:this.provider,variables:this.variables,stats:this.stats,recorder:this.recorder}),e}catch(e){const r=e instanceof o?e:new o("Execution failed",{cause:e instanceof Error?e:new Error(String(e))});return this.recorder.error?.log(r),{response:null,error:r,success:!1}}}async executeDAG(t,e={},r){try{return await p(t,r).execute({provider:this.provider,variables:{...this.variables,...e},stats:this.stats,recorder:this.recorder})}catch(a){const s=a instanceof o?a:new o("DAG execution failed",{cause:a instanceof Error?a:new Error(String(a))});return this.recorder.error?.log(s),{response:null,error:s,success:!1}}}get logs(){return this.recorder.getLogs()}static async loadFileContent(t,e){return e==="utf-8"?h(t,"utf-8"):e==="base64"?h(t,"base64"):h(t)}}class l extends w{static{i(this,"ChainOfThought")}constructor(t,e){super(t,e)}static with(t,e){if(!e)return new l(t,{response:F.string()});if(x(e))return new l(t,e);{const r=k(e);return new l(t,r)}}createInstructions(t=""){return super.createInstructions(`Let's think step by step. Use <thinking></thinking> tags to show your reasoning and thought process.
2
2
 
3
- `)}finalize(t,e={}){const r=super.finalize(t,e),a=this.parseTaggedSections(t);let s="thinking";return"thinking"in a.tags||("think"in a.tags?(s="think",e.recorder?.warn?.log("No <thinking> section found in the response but found <think> instead. This may be a limitation of the model or prompt.")):e.recorder?.warn?.log("No <thinking> section found in the response. Please ensure your response includes a <thinking> tag.")),{...r,thinking:a.tags[s]||""}}}var U=Object.freeze({__proto__:null,DEFAULT_MODEL:E,Models:v,NAME:y,Provider:P}),z=Object.freeze({__proto__:null,DEFAULT_MODEL:b,Models:L,NAME:A,Provider:T}),W=Object.freeze({__proto__:null,DEFAULT_OLLAMA_URL:S,NAME:M,Provider:_}),G=Object.freeze({__proto__:null,DEFAULT_MODEL:O,Models:D,NAME:R,Provider:C});export{U as Anthropic,j as Axle,at as AxleStopReason,l as ChainOfThought,it as ConsoleWriter,ot as Conversation,z as Gemini,nt as Instruct,lt as LogLevel,W as Ollama,G as OpenAI,ct as WriteToDisk,ht as braveSearchTool,ut as calculatorTool,dt as concurrentWorkflow,p as dagWorkflow,pt as generate,d as serialWorkflow,N as stream};
3
+ `)}finalize(t,e={}){const r=super.finalize(t,e),a=this.parseTaggedSections(t);let s="thinking";return"thinking"in a.tags||("think"in a.tags?(s="think",e.recorder?.warn?.log("No <thinking> section found in the response but found <think> instead. This may be a limitation of the model or prompt.")):e.recorder?.warn?.log("No <thinking> section found in the response. Please ensure your response includes a <thinking> tag.")),{...r,thinking:a.tags[s]||""}}}var U=Object.freeze({__proto__:null,DEFAULT_MODEL:E,Models:v,NAME:y,Provider:P}),z=Object.freeze({__proto__:null,DEFAULT_MODEL:b,Models:L,NAME:A,Provider:T}),W=Object.freeze({__proto__:null,DEFAULT_OLLAMA_URL:S,NAME:M,Provider:_}),G=Object.freeze({__proto__:null,DEFAULT_MODEL:O,Models:D,NAME:R,Provider:C});export{U as Anthropic,j as Axle,at as AxleStopReason,l as ChainOfThought,it as ConsoleWriter,ot as Conversation,z as Gemini,nt as Instruct,lt as LogLevel,W as Ollama,G as OpenAI,ct as WriteToDisk,ht as braveSearchTool,ut as calculatorTool,dt as concurrentWorkflow,p as dagWorkflow,pt as generate,mt as generateWithTools,d as serialWorkflow,N as stream};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fifthrevision/axle",
3
- "version": "0.6.5",
3
+ "version": "0.6.6",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/johncch/axle.git"
@@ -1,31 +0,0 @@
1
- var Je=Object.defineProperty;var l=(e,t)=>Je(e,"name",{value:t,configurable:!0});import Ke from"@anthropic-ai/sdk";import*as I from"zod";import F,{z as H}from"zod";import{FinishReason as R,GoogleGenAI as ze}from"@google/genai";import Xe from"openai";import{serializeError as Ze}from"serialize-error";import{readFile as Ye,access as Qe,constants as et}from"fs/promises";import{glob as ie}from"glob";import{readFile as U,access as tt,stat as nt,writeFile as st,mkdir as rt}from"node:fs/promises";import{resolve as ee,extname as ce,dirname as ot}from"node:path";import T from"chalk";import le from"node:readline";class S extends Error{static{l(this,"AxleError")}code;id;details;constructor(t,n){super(t,{cause:n?.cause}),this.name=this.constructor.name,this.code=n?.code||"AXLE_ERROR",this.id=n?.id,this.details=n?.details,Object.setPrototypeOf(this,S.prototype)}}function at(e){const{text:t,files:n}=e,s=[];if(t&&s.push({type:"text",text:t}),n)for(const r of n)s.push({type:"file",file:r});return s}l(at,"toContentParts");function $(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
2
-
3
- `)}l($,"getTextContent");function it(e){return e.filter(t=>t.type==="tool-call")}l(it,"getToolCalls");var y=(e=>(e[e.Stop=0]="Stop",e[e.Length=1]="Length",e[e.FunctionCall=2]="FunctionCall",e[e.Error=3]="Error",e[e.Custom=4]="Custom",e))(y||{});function j(e){if(e==null)return{type:"error",error:{type:"Undetermined",message:"Unknown error occurred"},usage:{in:0,out:0},raw:e};if(e instanceof Error)return{type:"error",error:{type:e.name||"Error",message:e.message||"Unexpected error"},usage:{in:0,out:0},raw:e};if(typeof e=="object"){const t=e,n=t?.error?.error?.type||t?.error?.type||t?.type||t?.code||t?.status||"Undetermined",s=t?.error?.error?.message||t?.error?.message||t?.message||t?.error||"Unexpected error";return{type:"error",error:{type:String(n),message:String(s)},usage:{in:0,out:0},raw:e}}return{type:"error",error:{type:"Undetermined",message:String(e)},usage:{in:0,out:0},raw:e}}l(j,"getUndefinedError");function ue(e){return e.map(t=>{if(t.role==="assistant"){const n=[];for(const s of t.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="thinking"?s.redacted?n.push({type:"redacted_thinking",data:s.text}):n.push({type:"thinking",thinking:s.text,signature:s.signature}):s.type==="tool-call"&&n.push({type:"tool_use",id:s.id,name:s.name,input:s.parameters});return{role:"assistant",content:n}}if(t.role==="tool")return{role:"user",content:t.content.map(n=>({type:"tool_result",tool_use_id:n.id,content:n.content}))};if(typeof t.content=="string")return{role:"user",content:t.content};{const n=[];for(const s of t.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="file"&&(s.file.type==="image"?n.push({type:"image",source:{type:"base64",media_type:s.file.mimeType,data:s.file.base64}}):s.file.type==="document"&&s.file.mimeType==="application/pdf"&&n.push({type:"document",source:{type:"base64",media_type:"application/pdf",data:s.file.base64}}));return{role:"user",content:n}}})}l(ue,"convertToProviderMessages");function pe(e){return e.map(t=>{const n=F.toJSONSchema(t.schema);if(!ct(n))throw new Error(`Schema for tool ${t.name} must be an object type`);return{name:t.name,description:t.description,input_schema:n}})}l(pe,"convertToProviderTools");function fe(e){const t=[];for(const n of e)if(n.type==="text")t.push({type:"text",text:n.text});else if(n.type==="thinking")t.push({type:"thinking",text:n.text||"",redacted:!1});else if(n.type==="redacted_thinking")t.push({type:"thinking",text:n.text||"",redacted:!0});else if(n.type==="tool_use"){if(typeof n.input!="object"||n.input===null||Array.isArray(n.input))throw new Error(`Invalid tool call input for ${n.name}: expected object, got ${typeof n.input}`);t.push({type:"tool-call",id:n.id,name:n.name,parameters:n.input})}return t}l(fe,"convertToAxleContentParts");function te(e){switch(e){case"max_tokens":return y.Length;case"end_turn":return y.Stop;case"stop_sequence":return y.Stop;case"tool_use":return y.FunctionCall;case"pause_turn":case"refusal":default:return y.Error}}l(te,"convertStopReason$2");function ct(e){return e&&typeof e=="object"&&e.type==="object"}l(ct,"isObjectSchema");async function lt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.stop&&(c.stop_sequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop);const d={model:n,max_tokens:4096,messages:ue(s),...r&&{system:r},...o&&{tools:pe(o)},...c};i?.debug?.log(d);let f;try{const p=await t.messages.create(d);f=ut(p)}catch(p){f=j(p)}return i?.debug?.log(f),f}l(lt,"createGenerationRequest$2");function ut(e){const t=te(e.stop_reason);if(t===y.Error)return{type:"error",error:{type:"Uncaught error",message:`Stop reason is not recognized or unhandled: ${e.stop_reason}`},usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e};if(t===y.FunctionCall){const n=fe(e.content);return{type:"success",id:e.id,model:e.model,role:e.role,finishReason:y.FunctionCall,content:n,text:$(n)??"",usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e}}if(e.type=="message"){const n=fe(e.content);return{type:"success",id:e.id,model:e.model,role:"assistant",finishReason:t,content:n,text:$(n)??"",usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e}}}l(ut,"convertToAIResponse");function pt(){const e=new Map;function t(n){const s=[];switch(n.type){case"message_start":s.push({type:"start",id:n.message.id,data:{model:n.message.model,timestamp:Date.now()}});break;case"message_delta":n.delta.stop_reason&&s.push({type:"complete",data:{finishReason:te(n.delta.stop_reason),usage:n.usage?{in:n.usage.input_tokens||0,out:n.usage.output_tokens||0}:void 0}});case"message_stop":break;case"content_block_start":if(n.content_block.type==="text")n.index;else if(n.content_block.type==="tool_use"){const o=n.content_block;e.set(n.index,{id:o.id,name:o.name,argumentsBuffer:""}),s.push({type:"tool-call-start",data:{index:n.index,id:o.id,name:o.name}})}else n.content_block.type==="thinking"?s.push({type:"thinking-start",data:{index:n.index,redacted:!1}}):n.content_block.type==="redacted_thinking"?s.push({type:"thinking-start",data:{index:n.index,redacted:!0}}):n.content_block.type==="server_tool_use"||n.content_block.type;break;case"content_block_delta":if(n.delta.type==="text_delta")s.push({type:"text",data:{text:n.delta.text,index:n.index}});else if(n.delta.type==="input_json_delta"){const o=e.get(n.index);o&&(o.argumentsBuffer+=n.delta.partial_json)}else n.delta.type==="thinking_delta"?s.push({type:"thinking-delta",data:{text:n.delta.thinking,index:n.index}}):n.delta.type==="signature_delta"||n.delta.type;break;case"content_block_stop":const r=e.get(n.index);if(r){try{const o=JSON.parse(r.argumentsBuffer);s.push({type:"tool-call-complete",data:{index:n.index,id:r.id,name:r.name,arguments:o}})}catch(o){throw new Error(`Failed to parse tool call arguments for ${r.name}: ${o instanceof Error?o.message:String(o)}`)}e.delete(n.index)}break;default:console.warn("Unknown Anthropic stream event type")}return s}return l(t,"handleEvent"),{handleEvent:t}}l(pt,"createAnthropicStreamingAdapter");async function*ft(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.stop&&(c.stop_sequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop);const d={model:n,max_tokens:4096,messages:ue(s),...r&&{system:r},...o&&{tools:pe(o)},...c};i?.debug?.log(d);const f=pt();try{const p=await t.messages.create({...d,stream:!0});for await(const _ of p){const h=f.handleEvent(_);for(const w of h)yield w}}catch(p){yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(ft,"createStreamingRequest$3");const A={CLAUDE_SONNET_4_5_20250929:"claude-sonnet-4-5-20250929",CLAUDE_SONNET_4_5_LATEST:"claude-sonnet-4-5",CLAUDE_HAIKU_4_5:"claude-haiku-4-5",CLAUDE_OPUS_4_1_20250805:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_1_LATEST:"claude-opus-4-1",CLAUDE_OPUS_4_20250514:"claude-opus-4-20250514",CLAUDE_OPUS_4_LATEST:"claude-opus-4-0",CLAUDE_SONNET_4_20250514:"claude-sonnet-4-20250514",CLAUDE_SONNET_4_LATEST:"claude-sonnet-4-0",CLAUDE_3_7_SONNET_20250219:"claude-3-7-sonnet-20250219",CLAUDE_3_7_SONNET_LATEST:"claude-3-7-sonnet-latest",CLAUDE_3_5_SONNET_20241022:"claude-3-5-sonnet-20241022",CLAUDE_3_5_HAIKU_20241022:"claude-3-5-haiku-20241022",CLAUDE_3_5_HAIKU_LATEST:"claude-3-5-haiku-latest",CLAUDE_3_5_SONNET_20240620:"claude-3-5-sonnet-20240620"};A.CLAUDE_SONNET_4_5_20250929,A.CLAUDE_SONNET_4_5_LATEST,A.CLAUDE_HAIKU_4_5,A.CLAUDE_OPUS_4_1_20250805,A.CLAUDE_OPUS_4_1_LATEST,A.CLAUDE_OPUS_4_20250514,A.CLAUDE_OPUS_4_LATEST,A.CLAUDE_SONNET_4_20250514,A.CLAUDE_SONNET_4_LATEST,A.CLAUDE_3_7_SONNET_20250219,A.CLAUDE_3_7_SONNET_LATEST,A.CLAUDE_3_5_SONNET_20241022,A.CLAUDE_3_5_HAIKU_20241022,A.CLAUDE_3_5_HAIKU_LATEST,A.CLAUDE_3_5_SONNET_20240620;const de=A.CLAUDE_HAIKU_4_5,_e="anthropic";class me{static{l(this,"AnthropicProvider")}name=_e;client;model;constructor(t,n){this.model=n??de,this.client=new Ke({apiKey:t})}async createGenerationRequest(t){return await lt({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return ft({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function ge(e,t,n){const s={};return t&&(s.systemInstruction=t),e&&e.length>0&&(s.tools=e.map(r=>({functionDeclarations:[{name:r.name,description:r.description,parametersJsonSchema:F.toJSONSchema(r.schema)}]}))),n&&Object.assign(s,n),s}l(ge,"prepareConfig");function he(e){return e.map(dt).filter(t=>t!==void 0)}l(he,"convertAxleMessagesToGemini");function dt(e){switch(e.role){case"tool":return _t(e);case"assistant":return mt(e);case"user":return gt(e)}}l(dt,"convertMessage$3");function _t(e){return{role:"user",parts:e.content.map(t=>({functionResponse:{id:t.id??void 0,name:t.name,response:{output:t.content}}}))}}l(_t,"convertToolMessage$3");function mt(e){const t=[],n=e.content.filter(r=>r.type==="text");if(n.length>0){const r=n.map(o=>o.text).join("");r&&t.push({text:r})}const s=e.content.filter(r=>r.type==="tool-call");return s.length>0&&t.push(...s.map(r=>({functionCall:{id:r.id??void 0,name:r.name,args:r.parameters}}))),{role:"assistant",parts:t}}l(mt,"convertAssistantMessage$3");function gt(e){return typeof e.content=="string"?{role:"user",parts:[{text:e.content}]}:{role:"user",parts:e.content.map(ht).filter(n=>n!==null)}}l(gt,"convertUserMessage$3");function ht(e){return e.type==="text"||e.type==="instructions"?{text:e.type==="text"?e.text:e.instructions}:e.type==="file"&&(e.file.type==="image"||e.file.type==="document")?{inlineData:{mimeType:e.file.mimeType,data:e.file.base64}}:null}l(ht,"convertContentPart$3");function ye(e){switch(e){case R.STOP:return[!0,y.Stop];case R.MAX_TOKENS:return[!0,y.Length];case R.FINISH_REASON_UNSPECIFIED:case R.SAFETY:case R.RECITATION:case R.LANGUAGE:case R.OTHER:case R.BLOCKLIST:case R.PROHIBITED_CONTENT:case R.SPII:case R.MALFORMED_FUNCTION_CALL:case R.IMAGE_SAFETY:return[!1,y.Error]}}l(ye,"convertStopReason$1");async function yt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.max_tokens&&(c.maxOutputTokens=c.max_tokens,delete c.max_tokens),c.stop&&(c.stopSequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop),c.top_p!==void 0&&(c.topP=c.top_p,delete c.top_p);const d={contents:he(s),config:ge(o,r,c)};i?.debug?.log(d);let f;try{const p=await t.models.generateContent({model:n,...d});f=Et(p,{recorder:i})}catch(p){i?.error?.log(p),f=j(p)}return i?.debug?.log(f),f}l(yt,"createGenerationRequest$1");function Et(e,t){const{recorder:n}=t,s=e.usageMetadata.promptTokenCount,r=e.usageMetadata.totalTokenCount-s,o={in:s,out:r};if(!e)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:e};if(e.promptFeedback&&e.promptFeedback.blockReason)return{type:"error",error:{type:"Blocked",message:`Response blocked by Google AI: ${e.promptFeedback.blockReason}, ${e.promptFeedback.blockReasonMessage}`},usage:o,raw:e};if(!e.candidates||e.candidates.length===0)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:e};e.candidates.length>1&&n?.warn?.log(`We received ${e.candidates.length} response candidates`);const a=e.candidates[0],i=(a.content?.parts||[]).map(f=>f.text).filter(f=>f!==void 0).join(""),[c,d]=ye(a.finishReason);if(c){const f=[];if(i&&f.push({type:"text",text:i}),e.functionCalls)for(const p of e.functionCalls){if(typeof p.args!="object"||p.args===null||Array.isArray(p.args))throw new Error(`Invalid tool call arguments for ${p.name}: expected object, got ${typeof p.args}`);f.push({type:"tool-call",id:p.id,name:p.name,parameters:p.args})}return{type:"success",id:e.responseId,model:e.modelVersion,role:"assistant",finishReason:e.functionCalls?y.FunctionCall:d,content:f,text:$(f)??"",usage:o,raw:e}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${d}`},usage:o,raw:e}}l(Et,"fromModelResponse$3");function It(){let e=0,t=-1,n="",s="",r=0,o=0;function a(u){const i=[];n||(n=u.responseId||`gemini-${Date.now()}`,s=u.modelVersion||"gemini",i.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}})),u.usageMetadata&&(r=u.usageMetadata.promptTokenCount||0,o=(u.usageMetadata.totalTokenCount||0)-r);const c=u.candidates?.[0];if(!c)return i;const d=c.content?.parts||[];for(const f of d){const p="thought"in f&&f.thought===!0;if(p&&f.text?(t===-1&&(t=e+1,i.push({type:"thinking-start",data:{index:t}})),i.push({type:"thinking-delta",data:{index:t,text:f.text}})):f.text&&!p&&i.push({type:"text",data:{text:f.text,index:e}}),f.functionCall){e++;const _=`tool-${e}`;i.push({type:"tool-call-start",data:{index:e,id:_,name:f.functionCall.name}}),i.push({type:"tool-call-complete",data:{index:e,id:_,name:f.functionCall.name,arguments:f.functionCall.args}})}}if(c.finishReason){const[f,p]=ye(c.finishReason);f?i.push({type:"complete",data:{finishReason:p,usage:{in:r,out:o}}}):i.push({type:"error",data:{type:"FinishReasonError",message:`Unexpected finish reason: ${c.finishReason}`,usage:{in:r,out:o},raw:u}})}return i}return l(a,"handleChunk"),{handleChunk:a}}l(It,"createGeminiStreamingAdapter");async function*wt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.max_tokens&&(c.maxOutputTokens=c.max_tokens,delete c.max_tokens),c.stop&&(c.stopSequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop),c.top_p!==void 0&&(c.topP=c.top_p,delete c.top_p);const d={contents:he(s),config:ge(o,r,c)};i?.debug?.log(d);const f=It();try{const p=await t.models.generateContentStream({model:n,...d});for await(const _ of p){const h=f.handleChunk(_);for(const w of h)yield w}}catch(p){i?.error?.log(p),yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(wt,"createStreamingRequest$2");const g={GEMINI_2_5_PRO:"gemini-2.5-pro",GEMINI_2_5_FLASH:"gemini-2.5-flash",GEMINI_2_5_FLASH_PREVIEW_05_20:"gemini-2.5-flash-preview-05-20",GEMINI_2_5_FLASH_LITE:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_PREVIEW_06_17:"gemini-2.5-flash-lite-preview-06-17",GEMINI_2_5_FLASH_LIVE_PREVIEW:"gemini-live-2.5-flash-preview",GEMINI_2_5_FLASH_PREVIEW_NATIVE_AUDIO_DIALOG:"gemini-2.5-flash-preview-native-audio-dialog",GEMINI_2_5_FLASH_EXP_NATIVE_AUDIO_THINKING_DIALOG:"gemini-2.5-flash-exp-native-audio-thinking-dialog",GEMINI_2_5_FLASH_IMAGE_PREVIEW:"gemini-2.5-flash-image-preview",GEMINI_2_5_FLASH_PREVIEW_TTS:"gemini-2.5-flash-preview-tts",GEMINI_2_5_PRO_PREVIEW_TTS:"gemini-2.5-pro-preview-tts",GEMINI_2_0_FLASH:"gemini-2.0-flash",GEMINI_2_0_FLASH_001:"gemini-2.0-flash-001",GEMINI_2_0_FLASH_EXP:"gemini-2.0-flash-exp",GEMINI_2_0_FLASH_PREVIEW_IMAGE_GENERATION:"gemini-2.0-flash-preview-image-generation",GEMINI_2_0_FLASH_LITE:"gemini-2.0-flash-lite",GEMINI_2_0_FLASH_LITE_001:"gemini-2.0-flash-lite-001",GEMINI_2_0_FLASH_LIVE_001:"gemini-2.0-flash-live-001",GEMINI_1_5_PRO:"gemini-1.5-pro",GEMINI_1_5_PRO_LATEST:"gemini-1.5-pro-latest",GEMINI_1_5_PRO_001:"gemini-1.5-pro-001",GEMINI_1_5_PRO_002:"gemini-1.5-pro-002",GEMINI_1_5_FLASH:"gemini-1.5-flash",GEMINI_1_5_FLASH_LATEST:"gemini-1.5-flash-latest",GEMINI_1_5_FLASH_001:"gemini-1.5-flash-001",GEMINI_1_5_FLASH_002:"gemini-1.5-flash-002",GEMINI_1_5_FLASH_8B:"gemini-1.5-flash-8b",GEMINI_1_5_FLASH_8B_LATEST:"gemini-1.5-flash-8b-latest",GEMINI_1_5_FLASH_8B_001:"gemini-1.5-flash-8b-001",GEMMA_3N_E4B_IT:"gemma-3n-e4b-it",GEMMA_3_1B_IT:"gemma-3-1b-it",GEMMA_3_4B_IT:"gemma-3-4b-it",GEMMA_3_12B_IT:"gemma-3-12b-it",GEMMA_3_27B_IT:"gemma-3-27b-it",LEARNLM_2_0_FLASH_EXPERIMENTAL:"learnlm-2.0-flash-experimental",EMBEDDING_001:"embedding-001",TEXT_EMBEDDING_004:"text-embedding-004"};g.GEMINI_2_5_PRO,g.GEMINI_2_5_FLASH,g.GEMINI_2_5_FLASH_PREVIEW_05_20,g.GEMINI_2_5_FLASH_LITE,g.GEMINI_2_5_FLASH_LITE_PREVIEW_06_17,g.GEMINI_2_5_FLASH_LIVE_PREVIEW,g.GEMINI_2_5_FLASH_PREVIEW_NATIVE_AUDIO_DIALOG,g.GEMINI_2_5_FLASH_EXP_NATIVE_AUDIO_THINKING_DIALOG,g.GEMINI_2_5_FLASH_IMAGE_PREVIEW,g.GEMINI_2_0_FLASH,g.GEMINI_2_0_FLASH_001,g.GEMINI_2_0_FLASH_EXP,g.GEMINI_2_0_FLASH_PREVIEW_IMAGE_GENERATION,g.GEMINI_2_0_FLASH_LITE,g.GEMINI_2_0_FLASH_LITE_001,g.GEMINI_2_0_FLASH_LIVE_001,g.GEMINI_1_5_PRO,g.GEMINI_1_5_PRO_LATEST,g.GEMINI_1_5_PRO_001,g.GEMINI_1_5_PRO_002,g.GEMINI_1_5_FLASH,g.GEMINI_1_5_FLASH_LATEST,g.GEMINI_1_5_FLASH_001,g.GEMINI_1_5_FLASH_002,g.GEMINI_1_5_FLASH_8B,g.GEMINI_1_5_FLASH_8B_LATEST,g.GEMINI_1_5_FLASH_8B_001,g.GEMMA_3N_E4B_IT,g.GEMMA_3_1B_IT,g.GEMMA_3_4B_IT,g.GEMMA_3_12B_IT,g.GEMMA_3_27B_IT,g.LEARNLM_2_0_FLASH_EXPERIMENTAL;const Ee=g.GEMINI_2_5_FLASH,Ie="Gemini";class we{static{l(this,"GeminiProvider")}name=Ie;client;model;constructor(t,n){this.model=n??Ee,this.client=new ze({apiKey:t})}async createGenerationRequest(t){return await yt({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return wt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function Te(e){return e.map(Tt).flat(1)}l(Te,"convertAxleMessagesToOllama");function xe(e){return e&&e.length>0?e.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:F.toJSONSchema(t.schema)}})):void 0}l(xe,"convertToolDefToOllama");function Tt(e){switch(e.role){case"tool":return xt(e);case"assistant":return St(e);default:return At(e)}}l(Tt,"convertMessage$2");function xt(e){return e.content.map(t=>({role:"tool",tool_call_id:t.id,content:t.content}))}l(xt,"convertToolMessage$2");function St(e){const t=e.content.filter(r=>r.type==="tool-call"),n=e.content.filter(r=>r.type==="text"),s=t.length>0?t.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:r.parameters}})):void 0;return{role:e.role,content:n.map(r=>r.text).join(""),...s&&{toolCalls:s}}}l(St,"convertAssistantMessage$2");function At(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=[],n=[];for(const s of e.content){const r=bt(s);r.text!==null&&t.push(r.text),r.image!==null&&n.push(r.image)}return{role:e.role,content:t.join(""),...n.length>0&&{images:n}}}}l(At,"convertUserMessage$2");function bt(e){return e.type==="text"||e.type==="instructions"?{text:e.type==="text"?e.text:e.instructions,image:null}:e.type==="file"&&e.file.type==="image"?{text:null,image:e.file.base64}:{text:null,image:null}}l(bt,"convertContentPart$2");async function Ot(e){const{url:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=xe(o),d=u?{...u}:{temperature:.7};d.max_tokens&&(d.num_predict=d.max_tokens,delete d.max_tokens);const f={model:n,messages:Te(s),stream:!1,options:d,...r&&{system:r},...c&&{tools:c}};i?.debug?.log(f);let p;try{const _=await fetch(`${t}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);const h=await _.json();p=Rt(h)}catch(_){i?.error?.log("Error fetching Ollama response:",_),p=j(_)}return i?.debug?.log(p),p}l(Ot,"createGenerationRequest");function Rt(e){if(e.done_reason==="stop"&&e.message){const t=[];if(e.message.content!==void 0&&t.push({type:"text",text:e.message.content}),e.message.tool_calls)for(const s of e.message.tool_calls){if(typeof s.function.arguments!="object"||s.function.arguments===null||Array.isArray(s.function.arguments))throw new Error(`Invalid tool call arguments for ${s.function.name}: expected object, got ${typeof s.function.arguments}`);t.push({type:"tool-call",id:s.id,name:s.function.name,parameters:s.function.arguments})}const n=t.some(s=>s.type==="tool-call");return{type:"success",id:`ollama-${Date.now()}`,model:e.model,role:"assistant",finishReason:n?y.FunctionCall:y.Stop,content:t,text:$(t)??"",usage:{in:e.prompt_eval_count||0,out:e.eval_count||0},raw:e}}return{type:"error",error:{type:"OllamaError",message:"Unexpected error from Ollama"},usage:{in:0,out:0},raw:e}}l(Rt,"fromModelResponse$2");function Pt(){let e="",t=0,n=-1,s=0;function r(o){const a=[];if(e||(e=`ollama-${Date.now()}`,a.push({type:"start",id:e,data:{model:o.model,timestamp:Date.now()}})),o.message?.thinking&&(n===-1&&(n=t+1,a.push({type:"thinking-start",data:{index:n}})),a.push({type:"thinking-delta",data:{index:n,text:o.message.thinking}})),o.message?.content&&a.push({type:"text",data:{text:o.message.content,index:t}}),o.message?.tool_calls)for(const u of o.message.tool_calls){s++;const i=u.id||`tool-${s}`;if(typeof u.function.arguments!="object"||u.function.arguments===null||Array.isArray(u.function.arguments))throw new Error(`Invalid tool call arguments for ${u.function.name}: expected object, got ${typeof u.function.arguments}`);a.push({type:"tool-call-start",data:{index:s,id:i,name:u.function.name}}),a.push({type:"tool-call-complete",data:{index:s,id:i,name:u.function.name,arguments:u.function.arguments}})}if(o.done){const u=kt(o.done_reason);a.push({type:"complete",data:{finishReason:u,usage:{in:o.prompt_eval_count||0,out:o.eval_count||0}}})}return a}return l(r,"handleChunk"),{handleChunk:r}}l(Pt,"createOllamaStreamingAdapter");function kt(e){switch(e){case"stop":return y.Stop;case"length":return y.Length;default:return y.Stop}}l(kt,"convertStopReason");async function*Nt(e){const{url:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=xe(o),d=u?{...u}:{temperature:.7};d.max_tokens&&(d.num_predict=d.max_tokens,delete d.max_tokens);const f={model:n,messages:Te(s),stream:!0,options:d,...r&&{system:r},...c&&{tools:c}};i?.debug?.log(f);const p=Pt();try{const _=await fetch(`${t}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);if(!_.body)throw new Error("Response body is null");const h=_.body.getReader(),w=new TextDecoder;let b="";for(;;){const{done:C,value:L}=await h.read();if(C)break;b+=w.decode(L,{stream:!0});const k=b.split(`
4
- `);b=k.pop()||"";for(const M of k)if(M.trim())try{const O=JSON.parse(M),D=p.handleChunk(O);for(const N of D)yield N}catch(O){i?.error?.log("Error parsing Ollama stream chunk:",O,M)}}}catch(_){i?.error?.log("Error in Ollama streaming request:",_),yield{type:"error",data:{type:"STREAMING_ERROR",message:_ instanceof Error?_.message:String(_),raw:_}}}}l(Nt,"createStreamingRequest$1");const Se="http://localhost:11434",Mt="Ollama";class Ae{static{l(this,"OllamaProvider")}name="Ollama";url;model;recorder;constructor(t,n){this.url=n||Se,this.model=t}async createGenerationRequest(t){return await Ot({url:this.url,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return Nt({url:this.url,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function be(e){if(e&&e.length>0)return e.map(t=>{const n=F.toJSONSchema(t.schema);return{type:"function",function:{name:t.name,description:t.description,parameters:n}}})}l(be,"toModelTools");function Oe(e,t){const n=e.map($t).flat(1);return t?[{role:"system",content:t},...n]:n}l(Oe,"convertAxleMessagesToChatCompletion");function $t(e){switch(e.role){case"tool":return Gt(e);case"assistant":return Ct(e);default:return Lt(e)}}l($t,"convertMessage$1");function Gt(e){return e.content.map(t=>({role:"tool",tool_call_id:t.id,content:t.content}))}l(Gt,"convertToolMessage$1");function Ct(e){const t=e.content.filter(r=>r.type==="tool-call"),n=e.content.filter(r=>r.type==="text"),s=t.length>0?t.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:JSON.stringify(r.parameters)}})):void 0;return{role:e.role,content:n.map(r=>r.text).join(""),...s&&{tool_calls:s}}}l(Ct,"convertAssistantMessage$1");function Lt(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=e.content.map(vt).filter(n=>n!==null);return{role:e.role,content:t}}}l(Lt,"convertUserMessage$1");function vt(e){if(e.type==="text"||e.type==="instructions")return{type:"text",text:e.type==="text"?e.text:e.instructions};if(e.type==="file"){if(e.file.type==="image")return{type:"image_url",image_url:{url:`data:${e.file.mimeType};base64,${e.file.base64}`}};if(e.file.type==="document")return{type:"file",file:{filename:e.file.name,file_data:`data:${e.file.mimeType};base64,${e.file.base64}`}}}return null}l(vt,"convertContentPart$1");async function Dt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a;let c=be(o);const d={model:n,messages:Oe(s,r),...c&&{tools:c},...u};i?.debug?.log(d);let f;try{const p=await t.chat.completions.create(d);f=Ft(p)}catch(p){i?.error?.log(p),f=j(p)}return i?.debug?.log(f),f}l(Dt,"createGenerationRequestWithChatCompletion");function Ft(e){if(e.choices.length>0){const t=e.choices[0],n=[];if(t.message.content&&n.push({type:"text",text:t.message.content}),t.message.tool_calls){for(const s of t.message.tool_calls)if(s.type==="function")try{n.push({type:"tool-call",id:s.id,name:s.function.name,parameters:JSON.parse(s.function.arguments)})}catch(r){throw new Error(`Failed to parse tool call arguments for ${s.function.name}: ${r instanceof Error?r.message:String(r)}`)}}return{type:"success",id:e.id,model:e.model,role:t.message.role,finishReason:te(t.finish_reason),content:n,text:$(n)??"",usage:{in:e.usage?.prompt_tokens??0,out:e.usage?.completion_tokens??0},raw:e}}return{type:"error",error:{type:"undetermined",message:"Unexpected response from OpenAI"},usage:{in:e.usage?.prompt_tokens??0,out:e.usage?.completion_tokens??0},raw:e}}l(Ft,"fromModelResponse$1");function Ut(){const e=new Map;let t=0,n="",s="";function r(o){const a=[],u=o.choices[0];if(!u)return a;n||(n=o.id,s=o.model,a.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}}));const i=u.delta;if(i.content&&a.push({type:"text",data:{text:i.content,index:t}}),i.tool_calls)for(const c of i.tool_calls){const d=c.index;if(!e.has(d)){const p=t+d+1,_=c.id||`tool-${p}`;e.set(d,{id:_,name:c.function?.name||"",argumentsBuffer:""}),a.push({type:"tool-call-start",data:{index:p,id:_,name:c.function?.name||""}})}const f=e.get(d);c.id&&(f.id=c.id),c.function?.name&&(f.name=c.function.name),c.function?.arguments&&(f.argumentsBuffer+=c.function.arguments)}if(u.finish_reason){for(const[d,f]of e){const p=t+d+1;try{const _=JSON.parse(f.argumentsBuffer);a.push({type:"tool-call-complete",data:{index:p,id:f.id,name:f.name,arguments:_}})}catch(_){throw new Error(`Failed to parse tool call arguments for ${f.name}: ${_ instanceof Error?_.message:String(_)}`)}}const c=jt(u.finish_reason);a.push({type:"complete",data:{finishReason:c,usage:o.usage?{in:o.usage.prompt_tokens,out:o.usage.completion_tokens}:{in:0,out:0}}})}return a}return l(r,"handleChunk"),{handleChunk:r}}l(Ut,"createChatCompletionStreamingAdapter");function jt(e){switch(e){case"stop":return y.Stop;case"length":return y.Length;case"tool_calls":case"function_call":return y.FunctionCall;case"content_filter":return y.Error;default:return y.Stop}}l(jt,"convertFinishReason");function Wt(){let e="",t="",n=0,s=0,r=0;const o=new Map,a=new Set;function u(i){const c=[];switch(i.type){case"response.created":{e=i.response.id||`openai-${Date.now()}`,t=i.response.model,c.push({type:"start",id:e,data:{model:t,timestamp:Date.now()}});break}case"response.output_text.delta":{c.push({type:"text",data:{text:i.delta,index:n}});break}case"response.function_call_arguments.delta":{const d=i.item_id;o.has(d)||(s++,o.set(d,{id:d,name:"",argumentsBuffer:""}),c.push({type:"tool-call-start",data:{index:s,id:d,name:""}}));const f=o.get(d);f.argumentsBuffer+=i.delta;break}case"response.function_call_arguments.done":{const d=i.item_id;if(o.get(d)){try{const p=JSON.parse(i.arguments);c.push({type:"tool-call-complete",data:{index:s,id:d,name:i.name,arguments:p}})}catch(p){throw new Error(`Failed to parse function call arguments for ${i.name}: ${p instanceof Error?p.message:String(p)}`)}o.delete(d)}break}case"response.completed":{const d=i.response.usage;c.push({type:"complete",data:{finishReason:i.response.incomplete_details?y.Error:y.Stop,usage:{in:d?.input_tokens||0,out:d?.output_tokens||0}}});break}case"response.failed":{c.push({type:"error",data:{type:"RESPONSES_API_ERROR",message:`Response failed: ${i.response.status}`,raw:i}});break}case"response.output_item.added":{if(i.item?.type==="reasoning"){const d=i.item.id;a.add(d),r++,c.push({type:"thinking-start",data:{index:r}})}break}case"response.reasoning_text.delta":{i.delta&&c.push({type:"thinking-delta",data:{index:r,text:i.delta}});break}case"response.reasoning_summary_text.delta":{i.delta&&c.push({type:"thinking-delta",data:{index:r,text:i.delta}});break}case"response.output_item.done":{if(i.item?.type==="reasoning"){const d=i.item.id;a.delete(d)}break}}return c}return l(u,"handleEvent"),{handleEvent:u}}l(Wt,"createResponsesAPIStreamingAdapter");const m={GPT_5:"gpt-5",GPT_5_MINI:"gpt-5-mini",GPT_5_NANO:"gpt-5-nano",GPT_5_CHAT_LATEST:"gpt-5-chat-latest",GPT_5_PRO:"gpt-5-pro",GPT_5_CODEX:"gpt-5-codex",GPT_4_5_PREVIEW:"gpt-4.5-preview",GPT_4_5_PREVIEW_2025_02_27:"gpt-4.5-preview-2025-02-27",GPT_4_1:"gpt-4.1",GPT_4_1_2025_04_14:"gpt-4.1-2025-04-14",GPT_4_1_MINI:"gpt-4.1-mini",GPT_4_1_MINI_2025_04_14:"gpt-4.1-mini-2025-04-14",GPT_4_1_NANO:"gpt-4.1-nano",GPT_4_1_NANO_2025_04_14:"gpt-4.1-nano-2025-04-14",GPT_4O:"gpt-4o",GPT_4O_2024_05_13:"gpt-4o-2024-05-13",GPT_4O_2024_08_06:"gpt-4o-2024-08-06",GPT_4O_2024_11_20:"gpt-4o-2024-11-20",GPT_4O_MINI:"gpt-4o-mini",GPT_4O_MINI_2024_07_18:"gpt-4o-mini-2024-07-18",GPT_4O_AUDIO_PREVIEW:"gpt-4o-audio-preview",GPT_4O_AUDIO_PREVIEW_2024_10_01:"gpt-4o-audio-preview-2024-10-01",GPT_4O_AUDIO_PREVIEW_2024_12_17:"gpt-4o-audio-preview-2024-12-17",GPT_4O_AUDIO_PREVIEW_2025_06_03:"gpt-4o-audio-preview-2025-06-03",GPT_4O_MINI_AUDIO_PREVIEW:"gpt-4o-mini-audio-preview",GPT_4O_MINI_AUDIO_PREVIEW_2024_12_17:"gpt-4o-mini-audio-preview-2024-12-17",GPT_REALTIME:"gpt-realtime",GPT_REALTIME_MINI:"gpt-realtime-mini",GPT_4O_REALTIME_PREVIEW:"gpt-4o-realtime-preview",GPT_4O_REALTIME_PREVIEW_2024_10_01:"gpt-4o-realtime-preview-2024-10-01",GPT_4O_REALTIME_PREVIEW_2024_12_17:"gpt-4o-realtime-preview-2024-12-17",GPT_4O_REALTIME_PREVIEW_2025_06_03:"gpt-4o-realtime-preview-2025-06-03",GPT_4O_MINI_REALTIME_PREVIEW:"gpt-4o-mini-realtime-preview",GPT_4O_MINI_REALTIME_PREVIEW_2024_12_17:"gpt-4o-mini-realtime-preview-2024-12-17",GPT_4O_SEARCH_PREVIEW:"gpt-4o-search-preview",GPT_4O_SEARCH_PREVIEW_2025_03_11:"gpt-4o-search-preview-2025-03-11",GPT_4O_MINI_SEARCH_PREVIEW:"gpt-4o-mini-search-preview",GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11:"gpt-4o-mini-search-preview-2025-03-11",GPT_4O_TRANSCRIBE:"gpt-4o-transcribe",GPT_4O_MINI_TRANSCRIBE:"gpt-4o-mini-transcribe",GPT_4O_MINI_TTS:"gpt-4o-mini-tts",GPT_IMAGE_1:"gpt-image-1",GPT_IMAGE_1_MINI:"gpt-image-1-mini",O4_MINI:"o4-mini",O4_MINI_2025_04_16:"o4-mini-2025-04-16",O3:"o3",O3_PRO:"o3-pro",O3_MINI:"o3-mini",O3_MINI_2025_01_31:"o3-mini-2025-01-31",O1_PRO:"o1-pro",O1_PRO_2025_03_19:"o1-pro-2025-03-19",O1:"o1",O1_2024_12_17:"o1-2024-12-17",O1_MINI:"o1-mini",O1_MINI_2024_09_12:"o1-mini-2024-09-12",O1_PREVIEW:"o1-preview",O1_PREVIEW_2024_09_12:"o1-preview-2024-09-12",GPT_OSS_120B:"gpt-oss-120b",GPT_OSS_7B:"gpt-oss-7b",SORA_2:"sora-2",SORA_2025_05_02:"sora-2025-05-02",CODEX_MINI:"codex-mini",COMPUTER_USE_PREVIEW:"computer-use-preview"},Re=[m.GPT_5,m.GPT_5_MINI,m.GPT_5_NANO,m.GPT_5_CHAT_LATEST,m.GPT_5_PRO,m.GPT_5_CODEX,m.GPT_4_1,m.GPT_4_1_2025_04_14,m.GPT_4_1_MINI,m.GPT_4_1_MINI_2025_04_14,m.GPT_4_1_NANO,m.GPT_4_1_NANO_2025_04_14,m.GPT_4O,m.GPT_4O_2024_05_13,m.GPT_4O_2024_08_06,m.GPT_4O_2024_11_20,m.GPT_4O_MINI,m.GPT_4O_MINI_2024_07_18,m.GPT_4O_AUDIO_PREVIEW,m.GPT_4O_AUDIO_PREVIEW_2024_10_01,m.GPT_4O_AUDIO_PREVIEW_2024_12_17,m.GPT_4O_AUDIO_PREVIEW_2025_06_03,m.GPT_4O_MINI_AUDIO_PREVIEW,m.GPT_4O_MINI_AUDIO_PREVIEW_2024_12_17,m.GPT_REALTIME,m.GPT_REALTIME_MINI,m.GPT_4O_REALTIME_PREVIEW,m.GPT_4O_REALTIME_PREVIEW_2024_10_01,m.GPT_4O_REALTIME_PREVIEW_2024_12_17,m.GPT_4O_REALTIME_PREVIEW_2025_06_03,m.GPT_4O_MINI_REALTIME_PREVIEW,m.GPT_4O_MINI_REALTIME_PREVIEW_2024_12_17,m.GPT_4O_SEARCH_PREVIEW,m.GPT_4O_SEARCH_PREVIEW_2025_03_11,m.GPT_4O_MINI_SEARCH_PREVIEW,m.GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11,m.GPT_4O_TRANSCRIBE,m.GPT_4O_MINI_TRANSCRIBE,m.O4_MINI,m.O4_MINI_2025_04_16,m.O3,m.O3_PRO,m.O3_MINI,m.O3_MINI_2025_01_31],Pe=m.GPT_5;function ke(e){if(e&&e.length>0)return e.map(t=>{const n=F.toJSONSchema(t.schema);return{type:"function",strict:!0,name:t.name,description:t.description,parameters:n}})}l(ke,"prepareTools");function Ne(e){return e.map(Ht).flat(1)}l(Ne,"convertAxleMessageToResponseInput");function Ht(e){switch(e.role){case"tool":return Bt(e);case"assistant":return Vt(e);default:return qt(e)}}l(Ht,"convertMessage");function Bt(e){return e.content.map(t=>({type:"function_call_output",call_id:t.id,output:t.content}))}l(Bt,"convertToolMessage");function Vt(e){const t=[],n=e.content.filter(a=>a.type==="thinking");if(n.length>0)for(const a of n)t.push({type:"reasoning",id:`reasoning_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,summary:[{type:"summary_text",text:a.text}]});const s=$(e.content),r=e.content.filter(a=>a.type==="tool-call"),o=r.length>0?r.map(a=>({type:"function",id:a.id,function:{name:a.name,arguments:JSON.stringify(a.parameters)}})):void 0;return(s||o)&&t.push({role:e.role,content:s,...o&&{toolCalls:o}}),t}l(Vt,"convertAssistantMessage");function qt(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=e.content.map(Jt).filter(n=>n!==null);return{role:e.role,content:t}}}l(qt,"convertUserMessage");function Jt(e){if(e.type==="text")return{type:"input_text",text:e.text};if(e.type==="file"){if(e.file.type==="image")return{type:"input_image",image_url:`data:${e.file.mimeType};base64,${e.file.base64}`,detail:"auto"};if(e.file.type==="document")return{type:"input_file",filename:e.file.path,file_data:`data:${e.file.mimeType};base64,${e.file.base64}`}}return e.type==="thinking",null}l(Jt,"convertContentPart");async function*Kt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a;Re.includes(n)?yield*Xt({client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}):yield*zt({client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u})}l(Kt,"createStreamingRequest");async function*zt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=be(o),d={model:n,messages:Oe(s,r),...c&&{tools:c},...u,stream:!0};i?.debug?.log(d);const f=Ut();try{const p=await t.chat.completions.create(d);for await(const _ of p){const h=f.handleChunk(_);for(const w of h)yield w}}catch(p){i?.error?.log(p),yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(zt,"createChatCompletionStream");async function*Xt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a;console.log(u);const c=ke(o),d={model:n,input:Ne(s),...r&&{instructions:r},stream:!0,...c?{tools:c}:{},...u};i?.debug?.log(d);const f=Wt();try{const p=t.responses.stream(d);for await(const _ of p){const h=f.handleEvent(_);for(const w of h)yield w}}catch(p){i?.error?.log(p),yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(Xt,"createResponsesAPIStream");async function Zt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=ke(o),d={model:n,input:Ne(s),...r&&{instructions:r},...c?{tools:c}:{},...u};i?.debug?.log(d);let f;try{const p=await t.responses.create(d);f=Yt(p)}catch(p){i?.error?.log(p),f=j(p)}return i?.debug?.log(f),f}l(Zt,"createGenerationRequestWithResponsesAPI");function Yt(e){if(e.error)return{type:"error",error:{type:e.error.code||"undetermined",message:e.error.message||"Response generation failed"},usage:{in:e.usage?.input_tokens??0,out:e.usage?.output_tokens??0},raw:e};const t=e.output?.filter(r=>r.type==="reasoning")?.map(r=>r),n=[];if(t&&t.length>0)for(const r of t){const o=r.summary?.[0]?.text||r.content?.[0]?.text||"";(o||r.encrypted_content)&&n.push({type:"thinking",text:o,...r.encrypted_content&&{encrypted:r.encrypted_content}})}e.output_text&&n.push({type:"text",text:e.output_text});const s=e.output?.filter(r=>r.type==="function_call");if(s&&s.length>0)for(const r of s){const o=r;try{n.push({type:"tool-call",id:o.id||"",name:o.name||"",parameters:o.arguments?JSON.parse(o.arguments):{}})}catch(a){throw new Error(`Failed to parse tool call arguments for ${o.name}: ${a instanceof Error?a.message:String(a)}`)}}return{type:"success",id:e.id,model:e.model||"",role:"assistant",finishReason:e.incomplete_details?y.Error:y.Stop,content:n,text:$(n)??"",usage:{in:e.usage?.input_tokens??0,out:e.usage?.output_tokens??0},raw:e}}l(Yt,"fromModelResponse");const Me="OpenAI";class $e{static{l(this,"OpenAIProvider")}name=Me;client;model;constructor(t,n){this.model=n||Pe,this.client=new Xe({apiKey:t})}async createGenerationRequest(t){return Re.includes(this.model)?await Zt({client:this.client,model:this.model,...t}):await Dt({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return Kt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}async function Ge(e){const{provider:t,messages:n,system:s,tools:r,recorder:o,options:a}=e;return t.createGenerationRequest({messages:n,system:s,tools:r,context:{recorder:o},options:a})}l(Ge,"generate");function Qt(e,t){if(!t||Object.keys(t).length===0)throw new S(`The provider ${e} is not configured. Please check your configuration.`);switch(e){case"openai":return new $e(t["api-key"],t.model);case"anthropic":return new me(t["api-key"],t.model);case"gemini":return new we(t["api-key"],t.model);case"ollama":{const n=t;return new Ae(n.model,n.url)}default:throw new S("The provider is unsupported")}}l(Qt,"getProvider");class oe extends S{static{l(this,"TaskError")}constructor(t,n){super(t,{code:"TASK_ERROR",id:n?.id,details:{taskType:n?.taskType,taskIndex:n?.taskIndex,...n?.details},cause:n?.cause}),Object.setPrototypeOf(this,oe.prototype)}}const E={Running:"running",Success:"success",PartialSuccess:"partialSuccess",Fail:"fail"};var x=(e=>(e[e.Trace=10]="Trace",e[e.Debug=20]="Debug",e[e.Info=30]="Info",e[e.Warn=40]="Warn",e[e.Error=50]="Error",e[e.Fatal=60]="Fatal",e))(x||{});class en{static{l(this,"Recorder")}instanceId=crypto.randomUUID();currentLevel=x.Info;logs=[];writers=[];_debug;_info;_warn;_error;constructor(){this.buildMethods()}buildMethods(){this._debug=x.Debug>=this.currentLevel?this.createLoggingFunction(x.Debug):null,this._info=x.Info>=this.currentLevel?this.createLoggingFunction(x.Info):null,this._warn=x.Warn>=this.currentLevel?this.createLoggingFunction(x.Warn):null,this._error=this.createLoggingFunction(x.Error)}set level(t){this.currentLevel=t,this.buildMethods()}get level(){return this.currentLevel}get info(){return this._info}get warn(){return this._warn}get error(){return this._error}get debug(){return this._debug}subscribe(t){this.writers.includes(t)||this.writers.push(t)}unsubscribe(t){const n=this.writers.indexOf(t);n!==-1&&this.writers.splice(n,1)}publish(t){this.logs.push(t);for(const n of this.writers)n.handleEvent(t)}logFunction(t,n,...s){let r=s.map(o=>typeof o=="string"?{message:o}:o instanceof Error?Ze(o):o);this.publish({level:t,time:Date.now(),kind:n,payload:r})}createLoggingFunction(t){return{log:this.logFunction.bind(this,t,"body"),heading:{log:this.logFunction.bind(this,t,"heading")}}}getLogs(t=x.Info){return this.logs.filter(n=>n.level>=t)}async shutdown(){for(const t of this.writers)typeof t.flush=="function"&&await t.flush()}}async function tn(e,t){const{defaults:n,tag:s}=t;let r=null,o="";if(e)try{o=ee(e),r=await U(o,{encoding:"utf-8"})}catch{throw new Error(`${s} not found, see --help for details`)}else{for(const a of n.formats)try{o=ee(n.name+"."+a),r=await U(o,{encoding:"utf-8"});break}catch{continue}if(r===null)throw new Error(`${s} not found, see --help for details`)}return{content:r,format:o.split(".").pop()??""}}l(tn,"searchAndLoadFile");async function nn(e,t){let n="";for(const s of e){const r=await ie(s);t?.debug?.log(`many-files parser. For glob "${s}", found ${r.length} files.`);const o=await Promise.all(r.map(async a=>{const u=await U(a,"utf-8");return a+`:
5
- `+u}));n+=o.join(`
6
- `)}return n}l(nn,"loadManyFiles");function sn(e,t){e=e.replace("**/*","**");const n=/(?<asterisks>\*{1,2})(?<extension>\.[^\\/]+)?/,s=e.match(n);if(s){let r="";return s.groups?.asterisks.length==1?r+=t.stem:r+=t.dir+t.stem,s.groups?.extension?r+=s.groups.extension:r+=t.ext,e.replace(s[0],r)}return e}l(sn,"replaceFilePattern");function rn(e){const t=/(?<name>[^\\/]+)(?<extension>\.[^\\/]+)$/,n=e.match(t);return n&&n.length>0&&n.groups?{abs:e,dir:e.replace(n[0],""),ext:n.groups.extension,stem:n.groups.name,name:n[0]}:null}l(rn,"pathToComponents");async function on(e){const t=ot(e);await rt(t,{recursive:!0})}l(on,"ensureDirectoryExistence");async function an({filePath:e,content:t}){await on(e),await st(e,t)}l(an,"writeFileWithDirectories");const B=[".jpg",".jpeg",".png",".gif",".webp",".bmp",".tiff"],V=[".pdf"],q=[".txt",".md",".markdown"],Ce=20*1024*1024;function cn(e){return e.type==="text"}l(cn,"isTextFileInfo");function ln(e){return e.type==="image"||e.type==="document"}l(ln,"isBase64FileInfo");function un(e){const t=ce(e).toLowerCase();if(q.includes(t))return"utf-8";if(B.includes(t)||V.includes(t))return"base64";{const n=[...q,...B,...V];throw new Error(`Unsupported file type: ${t}. Supported types: ${n.join(", ")}`)}}l(un,"getEncodingForFile");async function J(e,t){const n=ee(e);try{await tt(n)}catch{throw new Error(`File not found: ${e}`)}const s=await nt(n);if(s.size>Ce)throw new Error(`File too large: ${s.size} bytes. Maximum allowed: ${Ce} bytes`);const r=ce(n).toLowerCase(),o=n.split("/").pop()||"";if((t||un(n))==="utf-8"){if(!q.includes(r))throw new Error(`Unsupported text file type: ${r}. Supported types: ${q.join(", ")}`);let u;switch(r){case".txt":u="text/plain";break;case".md":case".markdown":u="text/markdown";break;default:u="text/plain"}const i=await U(n,"utf-8");return{path:n,content:i,mimeType:u,size:s.size,name:o,type:"text"}}else{let u,i;if(B.includes(r))switch(u="image",r){case".jpg":case".jpeg":i="image/jpeg";break;case".png":i="image/png";break;case".gif":i="image/gif";break;case".webp":i="image/webp";break;case".bmp":i="image/bmp";break;case".tiff":i="image/tiff";break;default:i="image/jpeg"}else if(V.includes(r))u="document",i="application/pdf";else throw new Error(`Unsupported file type: ${r}. Supported types: ${[...B,...V].join(", ")}`);const d=(await U(n)).toString("base64");return{path:n,base64:d,mimeType:i,size:s.size,name:o,type:u}}}l(J,"loadFileContent");class pn{static{l(this,"FileRunPlanner")}constructor(t,n,s=[]){this.source=t,this.bind=n,this.skipConditions=s}async plan(t){const n=[],s=await ie(this.source,{withFileTypes:!0});for(const r of s){const o=r.fullpath(),a=rn(o);let u=!1;for(const i of this.skipConditions)if(u=await i.eval({components:a}),u)break;if(!u){const i=await Ye(o,"utf-8"),c={variables:{[this.bind]:i,...a},steps:t};n.push(c)}}return n}}class fn{static{l(this,"MultiPlanner")}planners;constructor(t){this.planners=t}async plan(t){const n=this.planners.map(async r=>await r.plan(t));return(await Promise.all(n)).flat()}}function K(e,t,n="{{}}"){const s=n==="{{}}"?/\{\{(.*?)\}\}/g:/\{(.*?)\}/g;return e=e.replace(s,(r,o)=>{if(o=o.trim(),Object.prototype.hasOwnProperty.call(t,o)){const a=t[o];return a==null?"":String(a)}return r}),e}l(K,"replaceVariables");class dn{static{l(this,"FileExistSkipCondition")}constructor(t){this.pattern=t}type="file-exist";async eval(t){const n=K(this.pattern,t.components,"{{}}");try{return await Qe(n,et.F_OK),!0}catch{return!1}}}function z(e,t=0){const n={};for(const[s,r]of Object.entries(e))if(typeof r=="string")switch(r){case"string":n[s]=t===0?I.string():I.string().optional();break;case"number":n[s]=t===0?I.number():I.number().optional();break;case"boolean":n[s]=t===0?I.boolean():I.boolean().optional();break;case"string[]":n[s]=I.array(I.string());break;default:throw new Error(`Unsupported declarative type: ${r}`)}else if(Array.isArray(r))if(r.length===1&&typeof r[0]=="object"){const o=z(r[0],t+1);n[s]=I.array(I.object(o))}else throw new Error(`Unsupported array format for key ${s}. Expected [DeclarativeSchema].`);else n[s]=I.object(z(r,t+1));return n}l(z,"declarativeToOutputSchema");function X(e){if(e instanceof I.ZodString)return["string","Your answer"];if(e instanceof I.ZodNumber)return["number",42];if(e instanceof I.ZodBoolean)return["boolean",!0];if(e instanceof I.ZodArray){const t=e.element;if(t instanceof I.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(t instanceof I.ZodNumber)return["number array",[42,59,3.14]];if(t instanceof I.ZodBoolean)return["boolean array",[!0,!1,!1]];if(t instanceof I.ZodObject){const[n,s]=X(t);return["object array",[s,s]]}return["array",[]]}if(e instanceof I.ZodObject){const t=e.shape,n={};for(const[s,r]of Object.entries(t)){const[o,a]=X(r);n[s]=a}return["JSON object",n]}if(e instanceof I.ZodOptional){const t=e.unwrap(),[n,s]=X(t);return[`${n} | undefined`,s]}}l(X,"zodToExample");function Le(e){return typeof e=="object"&&Object.values(e).every(t=>t&&typeof t=="object"&&"_def"in t)}l(Le,"isOutputSchema");class ve{static{l(this,"AbstractInstruct")}name="instruct";prompt;system=null;inputs={};tools={};files=[];textReferences=[];instructions=[];schema;rawResponse;_taggedSections=void 0;_result=void 0;constructor(t,n){this.prompt=t,this.schema=n}setInputs(t){this.inputs=t}addInput(t,n){this.inputs[t]=n}addTools(t){for(const n of t)this.tools[n.name]=n}addTool(t){this.tools[t.name]=t}addImage(t){if(t.type!=="image")throw new Error(`Expected image file, got ${t.type}`);const n=t;this.files.push(n)}addDocument(t){if(t.type!=="document")throw new Error(`Expected document file, got ${t.type}`);const n=t;this.files.push(n)}addFile(t){if(!ln(t))throw new Error(`Expected image or document file, got ${t.type}`);this.files.push(t)}addReference(t,n){if(typeof t=="string"){this.textReferences.push({content:t,name:n?.name});return}if(cn(t))this.textReferences.push({content:t.content,name:n?.name??t.name});else throw new Error(`Expected text file, got ${t.type}`)}addInstructions(t){if(typeof t!="string"||t.trim()==="")throw new Error("Instruction must be a non-empty string");this.instructions.push(t)}hasTools(){return Object.keys(this.tools).length>0}hasFiles(){return this.files.length>0}get result(){return this._result}compile(t,n={}){const s=this.createUserMessage(t,n),r=this.createInstructions();return{message:s,instructions:r}}createUserMessage(t,n={}){const{recorder:s,options:r}=n,o={...t,...this.inputs};let a=K(this.prompt,o);if(this.textReferences.length>0)for(const[u,i]of this.textReferences.entries()){const c=i.name?`: ${i.name}`:"";a+=`
7
-
8
- ## Reference ${u+1}${c}
9
-
10
- \`\`\`${i.content}'''`}if(r?.warnUnused){const u=a.match(/\{\{(.*?)\}\}/g);if(u)throw s?.error.log(`Warning unused variables ${u.join(", ")}`),new Error(`Unused variables: ${u.join(", ")}`)}return a}createInstructions(t=""){if(t=`# Instructions
11
-
12
- `+t,Object.keys(this.schema).length>0){t+=`## Output Format Instructions
13
- `,t+=`
14
- Here is how you should format your output. Follow the instructions strictly.
15
- `;for(const[s,r]of Object.entries(this.schema)){const o=this.generateFieldInstructions(s,r);t+=o}}if(this.instructions.length>0){t+=`
16
- ## Additional Instructions
17
-
18
- `;for(const s of this.instructions)t+=`- ${s}
19
- `}return t}generateFieldInstructions(t,n){const[s,r]=X(n);return`
20
- - Use <${t}></${t}> tags to indicate the answer for ${t}. The answer must be a ${s}.
21
- Example: <${t}>${JSON.stringify(r)}</${t}>
22
- `}finalize(t,n={}){const{recorder:s}=n;if(this.rawResponse=t,Object.keys(this.schema).length===0){if(t.trim()==="{}"||t.trim()==="")return this._result={},this._result;throw new Error("Schema is empty, but rawValue is not an empty object representation or empty string.")}this._taggedSections=this._taggedSections||this.parseTaggedSections(t);const o={};for(const[a,u]of Object.entries(this.schema)){const i=this._taggedSections.tags[a];if(i!==void 0)o[a]=this.preprocessValue(u,i);else if(u.def.type!=="optional")throw new Error(`Expected results with tag ${a} but it does not exist`)}try{const a={};for(const[u,i]of Object.entries(this.schema))u in o&&(a[u]=i.parse(o[u]));return this._result=a,this._result}catch(a){if(a&&typeof a=="object"&&"issues"in a){const u=a.issues.map(i=>`${i.path.join(".")}: ${i.message}`).join(", ");throw new Error(`Validation failed: ${u}`)}throw a}}preprocessValue(t,n){switch(n=n.trim(),t.def.type){case"string":try{return JSON.parse(n)}catch{if(typeof n=="string")return n;throw new Error(`Cannot parse '${n}' as string. Ensure it is a valid JSON string or a plain string.`)}case"number":{const s=parseFloat(n);if(isNaN(s))throw new Error(`Cannot parse '${n}' as number`);return s}case"boolean":{const s=n.toLowerCase();if(s==="true")return!0;if(s==="false")return!1;throw new Error(`Cannot parse '${n}' as boolean. Expected 'true' or 'false'`)}case"array":{if(n==="")return[];try{const s=JSON.parse(n);if(Array.isArray(s))return s}catch{}if(n.includes(","))return n.split(",").map(s=>{const r=s.trim();try{return JSON.parse(r)}catch{return r}}).filter(s=>s!=="")}case"object":{n.includes("```json")&&(n=n.replace(/```json/g,"").replace(/```/g,""));try{return JSON.parse(n)}catch(s){throw new Error(`Cannot parse object as JSON: ${s.message}`)}}case"optional":{const s=t.def.innerType;return this.preprocessValue(s,n)}default:return n}}parseTaggedSections(t){t.trim().startsWith("```json")&&t.trim().endsWith("```")&&(t=t.trim().slice(7,-3).trim());const n=/<(\w+)>(.*?)<\/\1>/gs,s={};let r=t;r=r.replace(n,(a,u,i)=>(s[u]=i,""));const o=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return r=r.replace(o,(a,u,i)=>(s[u]=i,"")),{tags:s,remaining:r.trim()}}}class G extends ve{static{l(this,"Instruct")}constructor(t,n){super(t,n)}static with(t,n){if(!n)return new G(t,{response:I.string()});if(Le(n))return new G(t,n);{const s=z(n);return new G(t,s)}}}function W(e){return Array.isArray(e)?e:[e]}l(W,"arrayify");function P(e,t){return t?`${t}:${e.slice(0,8)}`:e.slice(0,8)}l(P,"friendly");function _n(e){return new Promise(t=>setTimeout(t,e))}l(_n,"delay");class De{static{l(this,"WriteToDisk")}constructor(t,n="{{response}}"){this.pathTemplate=t,this.contentTemplate=n}name="write-to-disk";async execute(t){const{variables:n,options:s,recorder:r}=t;if(s?.dryRun){r?.info?.log("[Dry run] WriteToDisk not executed.");return}let o;this.pathTemplate.includes("*")?o=sn(this.pathTemplate,n.file):o=K(this.pathTemplate,n,"{{}}");const a=K(this.contentTemplate,n,"{{}}");await an({filePath:o,content:a}),r?.info?.log(`Wrote to ${o}`)}}const mn=I.object({searchTerm:I.string().describe("The search term to query")});class gn{static{l(this,"BraveSearchTool")}name="brave";description="Perform a search using the Brave search engine";schema=mn;apiKey;throttle;lastExecTime=0;constructor(t){t&&this.configure(t)}configure(t){const{rateLimit:n}=t;this.apiKey=t["api-key"],this.throttle=n?1100/n:void 0}async execute(t){const{searchTerm:n}=t;if(this.throttle){for(;Date.now()-this.lastExecTime<this.throttle;)await _n(this.throttle-(Date.now()-this.lastExecTime));this.lastExecTime=Date.now()}try{const s=this.apiKey,r="https://api.search.brave.com/res/v1/web/search",o=new URL(r);o.searchParams.append("q",n),o.searchParams.append("format","json");const a=await fetch(o.toString(),{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":s}});if(!a.ok)throw new Error(`[Brave] HTTP error ${a.status}: ${a.statusText}`);const u=await a.json();return JSON.stringify(u)}catch(s){throw s instanceof Error?new Error(`[Brave] Error fetching search results: ${s.message}`):s}}}const ne=new gn,hn=H.object({operation:H.enum(["add","subtract","multiply","divide"]).describe("The operation to perform (add, subtract, multiply, divide)"),a:H.number().describe("First operand"),b:H.number().describe("Second operand")}),Fe={name:"calculator",description:"Performs basic arithmetic operations",schema:hn,execute:l(async({operation:e,a:t,b:n})=>{switch(e){case"add":return`${t} + ${n} = ${t+n}`;case"subtract":return`${t} - ${n} = ${t-n}`;case"multiply":return`${t} * ${n} = ${t*n}`;case"divide":if(n===0)throw new Error("Cannot divide by zero");return`${t} / ${n} = ${t/n}`;default:throw new Error(`Unknown operation: ${e}`)}},"execute")};function yn(e,t){const n=t?.[e];switch(e){case"brave":return n&&ne.configure(n),ne;case"calculator":return Fe;default:throw new Error(`Unknown tool: ${e}`)}}l(yn,"createTool");function En(e,t){return e.map(n=>yn(n,t))}l(En,"createTools");function In(e,t="{{response}}"){return new De(e,t)}l(In,"createWriteToDiskAction");const wn={async convert(e,t){const{recorder:n,toolNames:s,toolConfig:r}=t,{message:o,system:a,replace:u}=e;let i;e.output?i=G.with(o,e.output):i=G.with(o),a&&(i.system=a);const c=[...new Set([...s??[],...e.tools??[]])];if(c.length>0){const d=En(c,r);i.addTools(d)}if(u){for(const d of u)if(d.source==="file"){const f=W(d.files),p=await nn(f,n);i.addInput(d.pattern,p)}}if(e.images)for(const d of e.images)try{const f=await J(d.file,"base64");i.addFile(f)}catch(f){throw new Error(`Failed to load image '${d.file}': ${f.message}`)}if(e.documents)for(const d of e.documents)try{const f=await J(d.file,"base64");i.addFile(f)}catch(f){throw new Error(`Failed to load document '${d.file}': ${f.message}`)}if(e.references)for(const d of e.references)try{const f=await J(d.file,"utf-8");i.addReference(f)}catch(f){throw new Error(`Failed to load reference file '${d.file}': ${f.message}`)}return i}};class Tn{static{l(this,"StepToClassRegistry")}converters=new Map;get(t){const n=this.converters.get(t);if(!n)throw new Error(`No converter registered for step: ${t}`);return n}register(t,n){this.converters.set(t,n)}}const xn={async convert(e){const t=e.keys?W(e.keys).map(n=>`{{${n}}}`).join(`
23
- `):"{{response}}";return In(e.output,t)}},se=new Tn;se.register("write-to-disk",xn),se.register("chat",wn);async function Z(e,t){const{recorder:n}=t,s=e.tools??void 0,r=e.toolConfig??void 0,o=e.steps.map(async a=>await se.get(a.uses).convert(a,{recorder:n,toolNames:s,toolConfig:r}));return Promise.all(o)}l(Z,"configToTasks");async function Ue(e,t){const{batch:n}=e;return n.length===1?je(n[0]):new fn(n.map(s=>je(s)))}l(Ue,"configToPlanner");function je(e){switch(e.type){case"files":let t;return e["skip-if"]&&(t=e["skip-if"].map(s=>Sn(s))),new pn(e.source,e.bind,t)}}l(je,"batchOptionsToPlanner");function Sn(e){switch(e.type){case"file-exist":return new dn(e.pattern)}}l(Sn,"skipOptionsToSkipConditions");function An(e){return e.success===!1&&e.error!==void 0}l(An,"isErrorResult");function Y(e,t){return{response:e,stats:t,success:!0}}l(Y,"createResult");function Q(e,t,n){return{response:t,stats:n,error:e,success:!1}}l(Q,"createErrorResult");class We{static{l(this,"Conversation")}system;_messages=[];constructor(t){t&&(this._messages=t)}get messages(){return[...this._messages]}addSystem(t){this.system=t}addUser(t){typeof t=="string"?this._messages.push({role:"user",content:[{type:"text",text:t}]}):this._messages.push({role:"user",content:t})}addAssistant(t){if(typeof t=="string"){const n=t;this._messages.push({role:"assistant",id:crypto.randomUUID(),content:[{type:"text",text:n}],model:"user",finishReason:y.Custom})}else this._messages.push({role:"assistant",...t})}addToolResults(t){this._messages.push({role:"tool",content:t})}latest(){return this._messages[this._messages.length-1]}toString(){return JSON.stringify({system:this.system,messages:this._messages})}}function bn(e,t,n){const{options:s,recorder:r}=n,o=s?.warnUnused??!0;for(const[a,u]of Object.entries(e))o&&t[a]&&r?.warn?.log(`Warning: Variable "${a}" is being overwritten. Previous value: ${t[a]}, new value: ${u}`),t[a]=u}l(bn,"setResultsIntoVariables");function On(e){return"steps"in e&&"type"in e&&e.type==="serial"}l(On,"isSerialJob");const re=l((e,...t)=>{const n=l(async r=>{const{recorder:o}=r;return On(e)?await Z(e,{recorder:o}):[e,...t]},"prepare");return{execute:l(async r=>{const{provider:o,variables:a,options:u,stats:i,recorder:c,name:d}=r,f=crypto.randomUUID();c?.info?.log({type:"task",id:f,status:E.Running,message:`[${P(f,d)}] Starting job`});try{const p=await n({recorder:c}),_=new We;for(const[h,w]of p.entries()){c?.info?.log({type:"task",id:f,status:E.Running,message:`[${P(f,d)}] Processing step ${h+1}: ${w.name}`});try{w instanceof G?await kn(w,{conversation:_,provider:o,stats:i,variables:a,options:u,recorder:c}):await Pn(w,{variables:a,options:u,recorder:c})}catch(b){throw b instanceof S?b:new oe(`Error executing step ${w.name}`,{id:f,taskType:w.name,taskIndex:h,cause:b instanceof Error?b:new Error(String(b))})}}return c?.info?.log({type:"task",status:E.Success,id:f,message:`[${P(f,d)}] Completed ${p.length} steps`}),Y(a.$previous,i)}catch(p){const _=p instanceof S?p:new S("Serial workflow execution failed",{id:f,cause:p instanceof Error?p:new Error(String(p))});return c?.info?.log({type:"task",status:E.Fail,id:f,message:`[${P(f,d)}] Failed: ${_.message}`}),c?.error.log(_),Q(_,a.$previous,i)}},"execute")}},"serialWorkflow");function Rn(e){return e?e.response!==void 0?String(e.response):JSON.stringify(e):""}l(Rn,"deriveInput");async function Pn(e,t){const{variables:n,options:s,recorder:r}=t,o=Rn(n.$previous),a=await e.execute({input:o,variables:n,options:s,recorder:r});a!==void 0?(n.output=a,n.$previous={output:a}):n.$previous={}}l(Pn,"executeAction");async function kn(e,t){const{conversation:n,provider:s,variables:r,options:o,stats:a,recorder:u}=t;e.system&&n.addSystem(e.system);const{message:i,instructions:c}=e.compile(r,{recorder:u,options:o}),d=e.files;if(n.addUser(at({text:c+i,files:d})),o?.dryRun){u?.debug?.log(n);return}let f=!0;for(;f;){const p=await Ge({provider:s,messages:n.messages,tools:Object.values(e.tools),recorder:u});if(a&&(a.in+=p.usage.in,a.out+=p.usage.out),p.type==="error")throw new Error(JSON.stringify(p.error));if(p.type==="success")switch(p.finishReason){case y.Stop:{if(p.content){n.addAssistant({id:p.id,model:p.model,content:p.content,finishReason:p.finishReason});const _=$(p.content),h=e.finalize(_,{recorder:u});bn(h,r,{options:o,recorder:u}),r.$previous=h}f=!1;break}case y.Length:throw new Error("Incomplete model output due to max_tokens or token limit");case y.FunctionCall:{p.content&&n.addAssistant({id:p.id,model:p.model,content:p.content,finishReason:p.finishReason});const _=it(p.content);if(_&&_.length>0){const h=await Nn(_,e,{recorder:u});u?.debug?.log(h),n.addToolResults(h),f=!0}else f=!1;break}}if(p.type!=="success")throw u?.debug?.log(p),new Error("Unexpected response type")}}l(kn,"executeInstruct");async function Nn(e,t,n){const{recorder:s}=n,r=e.map(async o=>{const a=t.tools[o.name];if(!a)throw new Error(`Tool not found: ${o.name}`);s?.debug?.heading.log(`Executing tool ${a.name}`);const u=await a.execute(o.parameters);return s?.debug?.log(`Complete tool ${a.name}: ${o.id}`),{id:o.id,name:o.name,content:JSON.stringify(u)}});return Promise.all(r)}l(Nn,"executeToolCalls");function Mn(e){return"type"in e&&e.type==="batch"}l(Mn,"isBatchJob");const He=l((e,...t)=>{const n=l(async r=>{const{recorder:o}=r;if(Mn(e)){const a=await Ue(e),u=await Z(e,{recorder:o});return[a,u]}else return[e,[...t]]},"prepare");return{execute:l(async r=>{const{provider:o,variables:a,options:u,stats:i,recorder:c,name:d}=r,f=crypto.randomUUID();try{const[p,_]=await n({recorder:c}),h=await p.plan(_);if(c?.debug?.heading.log("Runs",h),h.length===0)return c?.info?.log("No runs to execute"),Y([],i);let w=0;c?.info?.log({type:"task",status:E.Running,id:f,message:`[${P(f,"CRW")}] Working on 0/${h.length}`});const b=l(async(O,D)=>{try{return await re(...O.steps).execute({provider:o,variables:{...O.variables,...a},options:u,stats:i,recorder:c,name:`${d}-${D}`})}catch(N){const ae=N instanceof S?N:new S("Error executing run",{cause:N instanceof Error?N:new Error(String(N))});return c?.error?.log(ae),Q(ae,null,i)}finally{w++,c?.info?.log({type:"task",status:E.Running,id:f,message:`[${P(f,"CRW")}] Working on ${w}/${h.length}`})}},"executeRun"),C=5;let L=[];for(let O=0;O<h.length;O+=C){const D=h.slice(O,O+C),N=await Promise.all(D.map(b));L=L.concat(N)}const k=L.some(An);c?.info?.log({type:"task",status:k?E.PartialSuccess:E.Success,id:f,message:`[${P(f,"CRW")}] All jobs (${h.length}) completed${k?" with some errors":""}`});const M=L.map(O=>O.response);return Y(M,i)}catch(p){const _=p instanceof S?p:new S("Concurrent workflow execution failed",{id:f,cause:p instanceof Error?p:new Error(String(p))});return c?.error?.log(_),Q(_,null,i)}},"execute")}},"concurrentWorkflow");class $n{static{l(this,"DAGParser")}static parse(t){const n=new Map;for(const[r,o]of Object.entries(t)){const a=this.parseNodeDefinition(r,o);n.set(r,a)}return this.validateDependencies(n),this.checkForCycles(n),{stages:this.createExecutionStages(n),nodes:n}}static parseNodeDefinition(t,n){if(this.isSimpleStep(n))return{id:t,steps:Array.isArray(n)?n:[n],dependencies:[],executionType:"serial"};if(this.isConcurrentNodeDefinition(n)){const s=n.dependsOn?W(n.dependsOn):[];return{id:t,steps:n.steps,dependencies:s,planner:n.planner,executionType:"concurrent"}}if(this.isNodeDefinition(n)){const s=n.dependsOn?W(n.dependsOn):[],r=W(n.step);return{id:t,steps:r,dependencies:s,executionType:"serial"}}throw new Error(`Invalid DAG node definition for '${t}'`)}static isSimpleStep(t){return t.name||Array.isArray(t)}static isConcurrentNodeDefinition(t){return t&&typeof t=="object"&&"planner"in t}static isNodeDefinition(t){return t&&typeof t=="object"&&"step"in t}static validateDependencies(t){for(const n of t.values())for(const s of n.dependencies)if(!t.has(s))throw new S(`Node "${n.id}" depends on non-existent node "${s}"`)}static checkForCycles(t){const n=new Set,s=new Set,r=l(o=>{if(s.has(o))return!0;if(n.has(o))return!1;n.add(o),s.add(o);const a=t.get(o);for(const u of a.dependencies)if(r(u))return!0;return s.delete(o),!1},"hasCycle");for(const o of t.keys())if(r(o))throw new S(`Circular dependency detected involving node "${o}"`)}static createExecutionStages(t){const n=[],s=new Set,r=new Set(t.keys());for(;r.size>0;){const o=[];for(const a of r)t.get(a).dependencies.every(c=>s.has(c))&&o.push(a);if(o.length===0)throw new S("Unable to resolve DAG dependencies - possible circular reference");n.push(o),o.forEach(a=>{s.add(a),r.delete(a)})}return n}}class Gn{static{l(this,"DAGJobToDefinition")}static async convert(t,n){const{recorder:s}=n,r={};for(const[o,a]of Object.entries(t)){const{dependsOn:u,...i}=a;if(i.type==="batch"){const c=await Ue(i),d=await Z(i,{recorder:s}),f={planner:c,steps:d,...u?{dependsOn:u}:{}};r[o]=f}else{const c=await Z(i,{recorder:s});if(u){const d={step:c,dependsOn:u};r[o]=d}else r[o]=c}}return r}}async function Cn(e,t,n,s={}){const{variables:r}=n,o=t.nodes.get(e);try{let a;if(o.executionType==="concurrent"&&o.planner?a=await He(o.planner,...o.steps).execute({...n,variables:r,name:e}):a=await re(...o.steps).execute({...n,variables:r,name:e}),!a.success)throw new S(`Node "${e}" failed: ${a.error?.message}`);return a.response}catch(a){if(!s.continueOnError)throw a;return null}}l(Cn,"executeNode");function Ln(e){const t=Object.values(e)[0];return t&&typeof t=="object"&&"steps"in t}l(Ln,"isDAGJob");const vn=l((e,t={})=>{const n=l(async(r,o)=>Ln(r)?await Gn.convert(r,o):r,"prepare");return{execute:l(async r=>{const{stats:o,recorder:a}=r,{maxConcurrency:u=3}=t,i=crypto.randomUUID();try{const c=await n(e,{recorder:a});a?.debug?.log(c);const d=$n.parse(c),f=new Map;a?.info?.log({type:"task",id:i,status:E.Running,message:`[${P(i)}] Starting workflow execution with ${d.stages.length} stages`});for(const[_,h]of d.stages.entries()){a?.info?.log({type:"task",id:i,status:E.Running,message:`[${P(i)}] Stage ${_+1}/${d.stages.length}, executing ${h.length} nodes: ${h.join(", ")}`});const w=Math.min(h.length,u);for(let b=0;b<h.length;b+=w){const C=h.slice(b,b+w);(await Promise.all(C.map(async k=>{const M=await Cn(k,d,r,t);return{nodeId:k,result:M}}))).forEach(({nodeId:k,result:M})=>{f.set(k,M)})}}a?.info?.log({type:"task",status:E.Success,id:i,message:`[${P(i)}] Workflow execution completed successfully`});const p=Object.fromEntries(f);return Y(p,o)}catch(c){const d=c instanceof S?c:new S("DAG workflow execution failed",{id:i,cause:c instanceof Error?c:new Error(String(c))});return a?.info?.log({type:"task",status:E.Fail,id:i,message:`[${P(i)}] Workflow execution failed: ${d.message}`}),a?.error?.log(d),Q(d,null,o)}},"execute")}},"dagWorkflow"),Dn=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],v={success:"\u2713",fail:"\u2717",spinning:Dn};class Fn{static{l(this,"ConsoleWriter")}tasks=new Map;entries=[];truncate=0;intervalId=null;spinnerInterval=80;lastRender="";isRendering=!1;inline=!0;constructor(t={}){this.truncate=t.truncate??0,this.inline=t.inline??!0}startSpinner(){this.intervalId===null&&(this.intervalId=setInterval(()=>{[...this.tasks.values()].some(n=>n.status===E.Running)&&this.renderTasks()},this.spinnerInterval))}stopSpinner(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}renderTasks(){if(this.isRendering)return;if(this.isRendering=!0,this.inline&&this.lastRender){const o=this.lastRender.split(`
24
- `).length;le.moveCursor(process.stdout,0,-o+1),le.clearScreenDown(process.stdout)}const t=[...this.tasks.values()],n=t.filter(o=>o.status===E.Running),s=t.filter(o=>o.status===E.Success||o.status===E.Fail);if(n.length===0&&s.length>0){let o="";for(const a of s){if(a.status===E.Success){const u=T.green(v.success);o+=`${u} ${a.text}
25
- `}else if(a.status===E.Fail){const u=T.red(v.fail);o+=`${u} ${a.text}
26
- `}this.tasks.delete(a.id)}console.log(o)}for(const o of this.entries){const{level:a,time:u,kind:i,payload:c}=o;i==="heading"?jn(a,c,{truncate:this.truncate}):Wn(a,c,{truncate:this.truncate})}this.entries=[];let r="";for(const o of this.tasks.values())if(o.status===E.Running){const a=T.cyan(v.spinning[o.frameIndex]);o.frameIndex=(o.frameIndex+1)%v.spinning.length,r+=`${a} ${o.text}
27
- `}else if(o.status===E.Success){const a=T.green(v.success);r+=`${a} ${o.text}
28
- `}else if(o.status===E.Fail){const a=T.red(v.fail);r+=`${a} ${o.text}
29
- `}this.lastRender=r,process.stdout.write(r),this.isRendering=!1}handleEvent(t){const{level:n,time:s,payload:r}=t;if(r.length>0&&Un(r[0])){const a=r[0],{id:u,message:i,status:c}=a;if(c===E.Running)this.tasks.set(u,{id:u,text:i,status:c,frameIndex:0});else if((c===E.Success||c===E.Fail)&&this.tasks.has(u)){const d=this.tasks.get(u);d.status=c,d.text=i}}else this.entries.push(t);this.renderTasks();const o=[...this.tasks.values()].some(a=>a.status===E.Running);o&&this.intervalId===null?this.startSpinner():!o&&this.intervalId!==null&&this.stopSpinner()}destroy(){this.stopSpinner()}}function Un(e){if(typeof e!="object"||e===null)return!1;const t=e;if(t.type!=="task"||typeof t.id!="string"||typeof t.message!="string")return!1;switch(t.status){case E.Running:case E.Success:case E.PartialSuccess:case E.Fail:return!0;default:return!1}}l(Un,"isTask");function jn(e,t,n){let s,r;e===x.Error?(s=T.red,r=T.redBright.bold):e===x.Warn?(s=T.yellow,r=T.yellowBright.bold):e>=x.Info?(s=T.blue,r=T.whiteBright.bold):(s=T.gray,r=T.white);const{message:o,data:a}=qe(t);console.log(`${s("==>")} ${r(o)}`),Ve(e,a,n)}l(jn,"heading");function Wn(e,t,n){let s;e===x.Error?s=T.red:e===x.Warn?s=T.yellow:e>=x.Info?s=T.white:s=T.gray;const{message:r,data:o}=qe(t);r&&console.log(s(r)),Ve(e,o,n)}l(Wn,"body");const Be=" ";function Ve(e,t,n){let s;e===x.Error?(s=T.red,n.truncate=0):e==x.Warn?s=T.yellow:e>=x.Info?s=T.white:s=T.gray,t.forEach(r=>{if(typeof r=="string"){console.log(s(`${Be}${r}`));return}for(const[o,a]of Object.entries(r)){let u=JSON.stringify(a,Hn(n.truncate)," ");const i=`${o}: ${u}`.split(`
30
- `).map(c=>Be+c).join(`
31
- `);console.log(s(i))}})}l(Ve,"values");function qe(e){const[t,...n]=e;let s="",r=n;if(t){let{message:o,...a}=t;s=o&&typeof o=="string"?o:"",Object.keys(a).length>0&&(r=[a,...r])}return{message:s,data:r}}l(qe,"toMsgData");function Hn(e){return e===0?null:(t,n)=>typeof n=="string"&&n.length>e?n.slice(0,e)+"<...>":n}l(Hn,"truncator");export{S as A,We as C,de as D,we as G,G as I,x as L,A as M,_e as N,Ae as O,en as R,De as W,ve as a,z as b,me as c,vn as d,Ee as e,g as f,Qt as g,Ie as h,Le as i,Se as j,Mt as k,J as l,Pe as m,m as n,Me as o,$e as p,Ge as q,y as r,re as s,ne as t,Fe as u,He as v,Fn as w,tn as x};