@fifthrevision/axle 0.6.6 → 0.7.1

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/index.js CHANGED
@@ -1,3 +1 @@
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
-
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};
1
+ var $=Object.defineProperty;var r=(n,a)=>$(n,"name",{value:a,configurable:!0});import{D as I,M as L,a as w,b as F,c as O,A,g as q,e as U,d as S,f as _}from"./simple-DFkTLK9N.js";import{h as oe,H as te,I as re,S as ne,T as ae,i as ie,j as le,k as ce,l as ue,m as me,n as pe,o as de,p as ge,q as fe,s as Me}from"./simple-DFkTLK9N.js";import"@anthropic-ai/sdk";import"zod";import"@google/genai";import"openai";import"glob";import"mime";import"node:fs/promises";import"node:path";import"node:child_process";import"node:util";const b={Models:L,DefaultModel:I},G={Models:F,DefaultModel:w};async function v(n){const{provider:a,model:i,messages:u,system:p,tools:d,tracer:g,options:l}=n;return a.createGenerationRequest(i,{messages:u,system:p,tools:d,context:{tracer:g},options:l})}r(v,"generateTurn");async function H(n){const{provider:a,model:i,messages:u,system:p,tools:d,onToolCall:g,maxIterations:l,tracer:m,options:C}=n,f=[...u],o=[],t={in:0,out:0};let M=0,h;const R=r(e=>{f.push(e),o.push(e)},"addMessage"),c=r(e=>(m?.setResult({kind:"llm",model:i,request:{messages:u},response:{content:e.result==="success"?e.final?.content:null},usage:e.usage?{inputTokens:e.usage.in,outputTokens:e.usage.out}:void 0,finishReason:e.result==="success"?e.final?.finishReason:void 0}),m?.end(e.result==="error"?"error":"ok"),e),"endWithResult"),E=r((e,s)=>{if(!e||s.type==="error"){e?.end("error");return}e.setResult({kind:"llm",model:s.model??i,request:{messages:f},response:{content:s.content},usage:s.usage?{inputTokens:s.usage.in,outputTokens:s.usage.out}:void 0,finishReason:s.finishReason}),e.end()},"setTurnResult");for(;;){if(l!==void 0&&M>=l)return c({result:"error",messages:o,error:{type:"model",error:{type:"error",error:{type:"MaxIterations",message:`Exceeded max iterations (${l})`}}},usage:t});M+=1;const e=m?.startSpan(`turn-${M}`,{type:"llm"}),s=await v({provider:a,model:i,messages:f,system:p,tools:d,tracer:e,options:C});if(O(t,s),E(e,s),s.type==="error")return c({result:"error",messages:o,error:{type:"model",error:s},usage:t});const y={role:"assistant",id:s.id,model:s.model,content:s.content,finishReason:s.finishReason};if(R(y),h=y,s.finishReason!==A.FunctionCall)return c({result:"success",messages:o,final:h,usage:t});const T=q(s.content);if(T.length===0)return c({result:"success",messages:o,final:h,usage:t});for(const x of T)m?.info(`tool call: ${x.name}`,{parameters:x.parameters});const{results:D,missingTool:k}=await U(T,g);if(D.length>0&&R({role:"tool",content:D}),k)return c({result:"error",messages:o,error:{type:"tool",error:k},usage:t})}}r(H,"generate");const W={Models:_,DefaultModel:S};export{oe as Agent,b as Anthropic,A as AxleStopReason,G as Gemini,te as History,re as Instruct,W as OpenAI,ne as SimpleWriter,ae as Tracer,ie as anthropic,le as braveSearchTool,ce as calculatorTool,ue as chatCompletions,me as compileInstruct,pe as gemini,H as generate,v as generateTurn,de as loadFileContent,ge as openai,fe as parseResponse,Me as stream};
@@ -0,0 +1,28 @@
1
+ var Ne=Object.defineProperty;var i=(t,e)=>Ne(t,"name",{value:e,configurable:!0});import*as C from"zod";import V,{z as k}from"zod";import"glob";import Le from"mime";import{readFile as H,access as Me,stat as Ue,writeFile as se,mkdir as Ge}from"node:fs/promises";import{resolve as Y,extname as oe,dirname as De}from"node:path";import ve from"@anthropic-ai/sdk";import{FinishReason as O,GoogleGenAI as Fe}from"@google/genai";import He from"openai";import{exec as Be}from"node:child_process";import{promisify as je}from"node:util";var S=(t=>(t.Stop="stop",t.Length="length",t.FunctionCall="function_call",t.Error="error",t.Custom="custom",t.Cancelled="cancelled",t))(S||{});class ae{static{i(this,"History")}system;_messages=[];constructor(e){e&&(this._messages=e)}get messages(){return[...this._messages]}addSystem(e){this.system=e}addUser(e){typeof e=="string"?this._messages.push({role:"user",content:[{type:"text",text:e}]}):this._messages.push({role:"user",content:e})}addAssistant(e){if(typeof e=="string"){const n=e;this._messages.push({role:"assistant",id:crypto.randomUUID(),content:[{type:"text",text:n}],model:"user",finishReason:S.Custom})}else this._messages.push({role:"assistant",...e})}addToolResults(e){this._messages.push({role:"tool",content:e})}add(e){Array.isArray(e)?this._messages.push(...e):this._messages.push(e)}latest(){return this._messages[this._messages.length-1]}toString(){return JSON.stringify({system:this.system,messages:this._messages})}}function qe(t){const{text:e,files:n}=t,r=[];if(e&&r.push({type:"text",text:e}),n)for(const s of n)r.push({type:"file",file:s});return r}i(qe,"toContentParts");function F(t){return typeof t=="string"?t:t.filter(e=>e.type==="text").map(e=>e.text).join(`
2
+
3
+ `)}i(F,"getTextContent");function We(t){return t.filter(e=>e.type==="tool-call")}i(We,"getToolCalls");function Ve(t,e){const n=e.usage??{in:0,out:0};t.in+=n.in??0,t.out+=n.out??0}i(Ve,"appendUsage");function ie(t){return JSON.stringify({error:t})}i(ie,"serializeToolError");async function ce(t,e){const n=[];let r;for(const s of t){let a;try{a=await e(s.name,s.parameters)}catch(o){a={type:"error",error:{type:"exception",message:o instanceof Error?o.message:String(o)}}}if(a==null){r={name:s.name,message:`Tool not found: ${s.name}`},n.push({id:s.id,name:s.name,content:ie({type:"not-found",message:r.message})});break}a.type==="success"?n.push({id:s.id,name:s.name,content:a.content}):n.push({id:s.id,name:s.name,content:ie(a.error)})}return{results:n,missingTool:r}}i(ce,"executeToolCalls");function le(t){const e=[],n=[],r=[],s=[],a=[],o=new AbortController;let l=!1,c,u;const d=new Promise((f,p)=>{c=i(m=>{l=!0,f(m)},"resolveResult"),u=i(m=>{l=!0,p(m)},"rejectResult")});return Promise.resolve().then(()=>ze(t,o.signal,e,n,r,s,a).then(c,u)),{onPartStart(f){e.push(f)},onPartUpdate(f){n.push(f)},onPartEnd(f){r.push(f)},onInternalTool(f){s.push(f)},onError(f){a.push(f)},cancel(){l||o.abort()},get final(){return d}}}i(le,"stream");function ue(t,e,n){for(const r of t)r(e,n)}i(ue,"emitPartStart");function Q(t,e,n,r,s){for(const a of t)a(e,n,r,s)}i(Q,"emitPartUpdate");function Ke(t,e,n,r){for(const s of t)s(e,n,r)}i(Ke,"emitPartEnd");function Je(t,e){for(const n of t)n(e)}i(Je,"emitError");async function ze(t,e,n,r,s,a,o){const{provider:l,model:c,messages:u,system:d,tools:f,onToolCall:p,maxIterations:m,tracer:_,options:h}=t,I=[...u],w=[],A={in:0,out:0};let U=0,G=0;const B=i(y=>{I.push(y),w.push(y)},"addMessage"),N=i(y=>{y.result==="error"&&Je(o,y.error);const L=y.result==="success"?y.final?.content:y.result==="cancelled"?y.partial?.content:null,T=y.result==="success"?y.final?.finishReason:y.result==="cancelled"?S.Cancelled:void 0;return _?.setResult({kind:"llm",model:c,request:{messages:u},response:{content:L??null},usage:y.usage?{inputTokens:y.usage.in,outputTokens:y.usage.out}:void 0,finishReason:T}),_?.end(y.result==="error"?"error":"ok"),y},"endWithResult"),W=i((y,L,T,D)=>{D();const M=y.length>0?{role:"assistant",id:L,model:T,content:y,finishReason:S.Cancelled}:void 0;return M&&B(M),_?.end("ok"),{result:"cancelled",messages:w,partial:M,usage:A}},"buildCancelledResult");for(;;){if(e.aborted)return W([],"","",()=>{});if(m!==void 0&&G>=m)return N({result:"error",messages:w,error:{type:"model",error:{type:"error",error:{type:"MaxIterations",message:`Exceeded max iterations (${m})`}}},usage:A});G+=1;const y=_?.startSpan(`turn-${G}`,{type:"llm"});y?.startLLMStream();const L=l.createStreamingRequest?.(c,{messages:I,system:d,tools:f,context:{tracer:y},signal:e,options:h});if(!L)throw y?.end("error"),new Error("Provider does not support streaming. Use generate() instead.");const T=[];let D="",v="",M=null,j={in:0,out:0},P=-1,q=null,R="";const $=i(()=>{q!==null&&P>=0&&(Ke(s,P,q,R),q=null,R="",P=-1)},"closePart");for await(const g of L){switch(g.type){case"start":D=g.id,v=g.data.model;break;case"text-start":{$(),T.push({type:"text",text:""}),P=U++,q="text",R="",ue(n,P,"text");break}case"text-delta":{const b=T[g.data.index];b.text+=g.data.text,R=b.text,y?.appendLLMStream(g.data.text),Q(r,P,"text",g.data.text,R);break}case"text-complete":{$();break}case"thinking-start":{$(),T.push({type:"thinking",text:""}),P=U++,q="thinking",R="",ue(n,P,"thinking");break}case"thinking-delta":{const b=T[g.data.index];b.text+=g.data.text,R=b.text,Q(r,P,"thinking",g.data.text,R);break}case"thinking-summary-delta":{const b=T[g.data.index];b.text+=g.data.text,R=b.text,Q(r,P,"thinking",g.data.text,R);break}case"thinking-complete":{$();break}case"tool-call-start":{$(),T.push({type:"tool-call",id:g.data.id,name:g.data.name,parameters:{}}),U++;break}case"tool-call-complete":{const b=T[g.data.index];g.data.id&&(b.id=g.data.id),g.data.name&&(b.name=g.data.name),b.parameters=g.data.arguments;break}case"internal-tool-start":{$();const b=U++;T.push({type:"internal-tool",id:g.data.id,name:g.data.name});for(const Z of a)Z({type:"start",index:b,id:g.data.id,name:g.data.name});break}case"internal-tool-complete":{const b=T[g.data.index];g.data.output!=null&&(b.output=g.data.output);for(const Z of a)Z({type:"complete",index:g.data.index,id:g.data.id,name:g.data.name,output:g.data.output});break}case"complete":{$(),M=g.data.finishReason,j=g.data.usage;break}case"error":{$();const b=g.data.usage??{in:0,out:0};return A.in+=b.in??0,A.out+=b.out??0,y?.end("error"),N({result:"error",messages:w,error:{type:"model",error:{type:"error",error:{type:g.data.type,message:g.data.message}}},usage:A})}default:console.warn("[WARN] Unhandled chunk type. Should never happen")}if(e.aborted)break}if(e.aborted)return y?.end("ok"),W(T,D,v,$);if(M===null)return $(),y?.end("error"),N({result:"error",messages:w,error:{type:"model",error:{type:"error",error:{type:"IncompleteStream",message:"Stream ended without a completion signal"}}},usage:A});A.in+=j.in??0,A.out+=j.out??0;const Re={kind:"llm",model:v,request:{messages:I},response:{content:T},usage:{inputTokens:j.in,outputTokens:j.out},finishReason:M};y?.endLLMStream(Re),y?.end();const z={role:"assistant",id:D,model:v,content:T,finishReason:M};if(B(z),M!==S.FunctionCall)return N({result:"success",messages:w,final:z,usage:A});const X=T.filter(g=>g.type==="tool-call");if(X.length===0)return N({result:"success",messages:w,final:z,usage:A});if(e.aborted)return _?.end("ok"),{result:"cancelled",messages:w,usage:A};const $e=p?async(g,b)=>p(g,b):async()=>null;for(const g of X)_?.info(`tool call: ${g.name}`,{parameters:g.parameters});const{results:ne,missingTool:re}=await ce(X,$e);if(ne.length>0&&B({role:"tool",content:ne}),re)return N({result:"error",messages:w,error:{type:"tool",error:re},usage:A})}}i(ze,"run");function Xe(t,e,n="{{}}"){const r=n==="{{}}"?/\{\{(.*?)\}\}/g:/\{(.*?)\}/g;return t=t.replace(r,(s,a)=>{if(a=a.trim(),Object.prototype.hasOwnProperty.call(e,a)){const o=e[a];return o==null?"":String(o)}return s}),t}i(Xe,"replaceVariables");function K(t){if(t instanceof C.ZodString)return["string","Your answer"];if(t instanceof C.ZodNumber)return["number",42];if(t instanceof C.ZodBoolean)return["boolean",!0];if(t instanceof C.ZodArray){const e=t.element;if(e instanceof C.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(e instanceof C.ZodNumber)return["number array",[42,59,3.14]];if(e instanceof C.ZodBoolean)return["boolean array",[!0,!1,!1]];if(e instanceof C.ZodObject){const[n,r]=K(e);return["object array",[r,r]]}return["array",[]]}if(t instanceof C.ZodObject){const e=t.shape,n={};for(const[r,s]of Object.entries(e)){const[a,o]=K(s);n[r]=o}return["JSON object",n]}if(t instanceof C.ZodOptional){const e=t.unwrap(),[n,r]=K(e);return[`${n} | undefined`,r]}}i(K,"zodToExample");function pe(t,e){if(!e)return t;if(Object.keys(e).length===0){if(t.trim()==="{}"||t.trim()==="")return{};throw new Error("Schema is empty, but rawValue is not an empty object representation or empty string.")}const r=Ze(t),s={};for(const[a,o]of Object.entries(e)){const l=r.tags[a];if(l!==void 0)s[a]=de(o,l);else if(o.def.type!=="optional")throw new Error(`Expected results with tag ${a} but it does not exist`)}try{const a={};for(const[o,l]of Object.entries(e))o in s&&(a[o]=l.parse(s[o]));return a}catch(a){if(a&&typeof a=="object"&&"issues"in a){const o=a.issues.map(l=>`${l.path.join(".")}: ${l.message}`).join(", ");throw new Error(`Validation failed: ${o}`)}throw a}}i(pe,"parseResponse");function de(t,e){switch(e=e.trim(),t.def.type){case"string":try{return JSON.parse(e)}catch{if(typeof e=="string")return e;throw new Error(`Cannot parse '${e}' as string. Ensure it is a valid JSON string or a plain string.`)}case"number":{const n=parseFloat(e);if(isNaN(n))throw new Error(`Cannot parse '${e}' as number`);return n}case"boolean":{const n=e.toLowerCase();if(n==="true")return!0;if(n==="false")return!1;throw new Error(`Cannot parse '${e}' as boolean. Expected 'true' or 'false'`)}case"array":{if(e==="")return[];try{const n=JSON.parse(e);if(Array.isArray(n))return n}catch{}if(e.includes(","))return e.split(",").map(n=>{const r=n.trim();try{return JSON.parse(r)}catch{return r}}).filter(n=>n!=="")}case"object":{e.includes("```json")&&(e=e.replace(/```json/g,"").replace(/```/g,""));try{return JSON.parse(e)}catch(n){throw new Error(`Cannot parse object as JSON: ${n.message}`)}}case"optional":{const n=t.def.innerType;return de(n,e)}default:return e}}i(de,"preprocessValue");function Ze(t){t.trim().startsWith("```json")&&t.trim().endsWith("```")&&(t=t.trim().slice(7,-3).trim());const e=/<(\w+)>(.*?)<\/\1>/gs,n={};let r=t;r=r.replace(e,(a,o,l)=>(n[o]=l,""));const s=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return r=r.replace(s,(a,o,l)=>(n[o]=l,"")),{tags:n,remaining:r.trim()}}i(Ze,"parseTaggedSections");function fe(t,e={}){const n={...e,...t.inputs};let r=Xe(t.prompt,n);if(t.textReferences.length>0)for(const[o,l]of t.textReferences.entries()){const c=l.name?`: ${l.name}`:"";r+=`
4
+
5
+ ## Reference ${o+1}${c}
6
+
7
+ \`\`\`${l.content}'''`}let s=`# Instructions
8
+
9
+ `;if((t.schema?Object.keys(t.schema):[]).length>0){s+=`## Output Format Instructions
10
+ `,s+=`
11
+ Here is how you should format your output. Follow the instructions strictly.
12
+ `;for(const[o,l]of Object.entries(t.schema)){const[c,u]=K(l);s+=`
13
+ - Use <${o}></${o}> tags to indicate the answer for ${o}. The answer must be a ${c}.
14
+ Example: <${o}>${JSON.stringify(u)}</${o}>
15
+ `}}if(t.instructions.length>0){s+=`
16
+ ## Additional Instructions
17
+
18
+ `;for(const o of t.instructions)s+=`- ${o}
19
+ `}return s+r}i(fe,"compileInstruct");class Ye{static{i(this,"Agent")}provider;model;history;tracer;system;tools={};partStartCallback;partUpdateCallback;partEndCallback;internalToolCallback;errorCallback;constructor(e){this.provider=e.provider,this.model=e.model,this.history=new ae,this.tracer=e.tracer,this.system=e.system,e.tools&&this.addTools(e.tools)}addTool(e){this.tools[e.name]=e}addTools(e){for(const n of e)this.tools[n.name]=n}hasTools(){return Object.keys(this.tools).length>0}onPartStart(e){this.partStartCallback=e}onPartUpdate(e){this.partUpdateCallback=e}onPartEnd(e){this.partEndCallback=e}onInternalTool(e){this.internalToolCallback=e}onError(e){this.errorCallback=e}send(e,n){let r;if(typeof e=="string")this.history.addUser(e);else{const s=fe(e,n),a=e.files;this.history.addUser(qe({text:s,files:a})),r=e.schema}return this.execute(r)}execute(e){const n=this.tools,r=Object.values(n).map(o=>({name:o.name,description:o.description,schema:o.schema})),s=le({provider:this.provider,model:this.model,messages:this.history.messages,system:this.system,tools:r.length>0?r:void 0,tracer:this.tracer,onToolCall:i(async(o,l)=>{const c=n[o];if(!c)return null;try{const u=await c.execute(l);return{type:"success",content:JSON.stringify(u)}}catch(u){return{type:"error",error:{type:"execution",message:u instanceof Error?u.message:String(u)}}}},"onToolCall")});this.partStartCallback&&s.onPartStart(this.partStartCallback),this.partUpdateCallback&&s.onPartUpdate(this.partUpdateCallback),this.partEndCallback&&s.onPartEnd(this.partEndCallback),this.internalToolCallback&&s.onInternalTool(this.internalToolCallback),this.errorCallback&&s.onError(this.errorCallback);const a=s.final.then(o=>{o.messages.length>0&&this.history.add(o.messages);let l=null,c;if(o.result==="success"){if(c=o.final,c){const d=F(c.content);l=pe(d,e)}}else o.result==="cancelled"&&(c=o.partial);const u=o.usage??{in:0,out:0};return{response:l,messages:o.messages,final:c,usage:u}});return{cancel:i(()=>s.cancel(),"cancel"),get final(){return a}}}}async function Qe(t,e){const{defaults:n,tag:r}=e;let s=null,a="";if(t)try{a=Y(t),s=await H(a,{encoding:"utf-8"})}catch{throw new Error(`${r} not found, see --help for details`)}else{for(const o of n.formats)try{a=Y(n.name+"."+o),s=await H(a,{encoding:"utf-8"});break}catch{continue}if(s===null)throw new Error(`${r} not found, see --help for details`)}return{content:s,format:a.split(".").pop()??""}}i(Qe,"searchAndLoadFile");const me=20*1024*1024;function et(t){return t.type==="text"}i(et,"isTextFileInfo");function tt(t){return t.type==="image"||t.type==="document"}i(tt,"isBase64FileInfo");const nt=new Set(["application/json","application/xml","application/yaml","application/x-yaml","application/toml"]);function rt(t){return t.startsWith("text/")||nt.has(t)}i(rt,"isTextLikeMimeType");function st(t){const e=Le.getType(t);if(!e){const n=oe(t).toLowerCase();throw new Error(`Unsupported file type: ${n||"(no extension)"}`)}if(e.startsWith("image/"))return{type:"image",mimeType:e};if(e==="application/pdf")return{type:"document",mimeType:e};if(rt(e))return{type:"text",mimeType:e};{const n=oe(t).toLowerCase();throw new Error(`Unsupported file type: ${n} (${e})`)}}i(st,"getFileCategory");async function ot(t,e){const n=Y(t);try{await Me(n)}catch{throw new Error(`File not found: ${t}`)}const r=await Ue(n);if(r.size>me)throw new Error(`File too large: ${r.size} bytes. Maximum allowed: ${me} bytes`);const s=n.split("/").pop()||"",a=st(n);if((e||(a.type==="text"?"utf-8":"base64"))==="utf-8"){if(a.type!=="text")throw new Error(`Cannot read ${a.type} file as text: ${t}`);const l=await H(n,"utf-8");return{path:n,content:l,mimeType:a.mimeType,size:r.size,name:s,type:"text"}}else{if(a.type==="text")throw new Error(`Cannot read text file as binary: ${t}`);const c=(await H(n)).toString("base64");return{path:n,base64:c,mimeType:a.mimeType,size:r.size,name:s,type:a.type}}}i(ot,"loadFileContent");class at{static{i(this,"Instruct")}prompt;inputs={};files=[];textReferences=[];instructions=[];schema;constructor(e,n){this.prompt=e,this.schema=n}setInputs(e){this.inputs=e}addInput(e,n){this.inputs[e]=n}addFile(e,n){if(typeof e=="string"){this.textReferences.push({content:e,name:n?.name});return}tt(e)?this.files.push(e):et(e)&&this.textReferences.push({content:e.content,name:n?.name??e.name})}addInstructions(e){if(typeof e!="string"||e.trim()==="")throw new Error("Instruction must be a non-empty string");this.instructions.push(e)}hasFiles(){return this.files.length>0}}const E={CLAUDE_SONNET_4_6:"claude-sonnet-4-6",CLAUDE_OPUS_4_6:"claude-opus-4-6",CLAUDE_OPUS_4_5_20251101:"claude-opus-4-5-20251101",CLAUDE_OPUS_4_5:"claude-opus-4-5-20251101",CLAUDE_HAIKU_4_5_20251001:"claude-haiku-4-5-20251001",CLAUDE_HAIKU_4_5:"claude-haiku-4-5-20251001",CLAUDE_SONNET_4_5_20250929:"claude-sonnet-4-5-20250929",CLAUDE_SONNET_4_5:"claude-sonnet-4-5-20250929",CLAUDE_OPUS_4_1_20250805:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_1:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_20250514:"claude-opus-4-20250514",CLAUDE_OPUS_4:"claude-opus-4-20250514",CLAUDE_SONNET_4_20250514:"claude-sonnet-4-20250514",CLAUDE_SONNET_4:"claude-sonnet-4-20250514",CLAUDE_3_7_SONNET_20250219:"claude-3-7-sonnet-20250219",CLAUDE_3_7_SONNET:"claude-3-7-sonnet-20250219",CLAUDE_3_5_HAIKU_20241022:"claude-3-5-haiku-20241022",CLAUDE_3_5_HAIKU:"claude-3-5-haiku-20241022",CLAUDE_3_HAIKU_20240307:"claude-3-haiku-20240307",CLAUDE_3_HAIKU:"claude-3-haiku-20240307"};E.CLAUDE_SONNET_4_6,E.CLAUDE_OPUS_4_6,E.CLAUDE_OPUS_4_5_20251101,E.CLAUDE_OPUS_4_5,E.CLAUDE_HAIKU_4_5_20251001,E.CLAUDE_HAIKU_4_5,E.CLAUDE_SONNET_4_5_20250929,E.CLAUDE_SONNET_4_5,E.CLAUDE_OPUS_4_1_20250805,E.CLAUDE_OPUS_4_1,E.CLAUDE_OPUS_4_20250514,E.CLAUDE_OPUS_4,E.CLAUDE_SONNET_4_20250514,E.CLAUDE_SONNET_4,E.CLAUDE_3_7_SONNET_20250219,E.CLAUDE_3_7_SONNET,E.CLAUDE_3_5_HAIKU_20241022,E.CLAUDE_3_5_HAIKU,E.CLAUDE_3_HAIKU_20240307,E.CLAUDE_3_HAIKU;const it=E.CLAUDE_HAIKU_4_5;function _e(t){return Array.isArray(t)?t:[t]}i(_e,"arrayify");function ct(t){return new Promise(e=>setTimeout(e,t))}i(ct,"delay");function J(t){if(t==null)return{type:"error",error:{type:"Undetermined",message:"Unknown error occurred"},usage:{in:0,out:0},raw:t};if(t instanceof Error)return{type:"error",error:{type:t.name||"Error",message:t.message||"Unexpected error"},usage:{in:0,out:0},raw:t};if(typeof t=="object"){const e=t,n=e?.error?.error?.type||e?.error?.type||e?.type||e?.code||e?.status||"Undetermined",r=e?.error?.error?.message||e?.error?.message||e?.message||e?.error||"Unexpected error";return{type:"error",error:{type:String(n),message:String(r)},usage:{in:0,out:0},raw:t}}return{type:"error",error:{type:"Undetermined",message:String(t)},usage:{in:0,out:0},raw:t}}i(J,"getUndefinedError");function he(t){return t.map(e=>{if(e.role==="assistant"){const n=[];for(const r of e.content)r.type==="text"?n.push({type:"text",text:r.text}):r.type==="thinking"?r.redacted?n.push({type:"redacted_thinking",data:r.text}):n.push({type:"thinking",thinking:r.text,signature:r.signature}):r.type==="tool-call"&&n.push({type:"tool_use",id:r.id,name:r.name,input:r.parameters});return{role:"assistant",content:n}}if(e.role==="tool")return{role:"user",content:e.content.map(n=>({type:"tool_result",tool_use_id:n.id,content:n.content}))};if(typeof e.content=="string")return{role:"user",content:e.content};{const n=[];for(const r of e.content)r.type==="text"?n.push({type:"text",text:r.text}):r.type==="file"&&(r.file.type==="image"?n.push({type:"image",source:{type:"base64",media_type:r.file.mimeType,data:r.file.base64}}):r.file.type==="document"&&r.file.mimeType==="application/pdf"&&n.push({type:"document",source:{type:"base64",media_type:"application/pdf",data:r.file.base64}}));return{role:"user",content:n}}})}i(he,"convertToProviderMessages");function ge(t){return t.map(e=>{const n=V.toJSONSchema(e.schema);if(!lt(n))throw new Error(`Schema for tool ${e.name} must be an object type`);return{name:e.name,description:e.description,input_schema:n}})}i(ge,"convertToProviderTools");function ye(t){const e=[];for(const n of t)if(n.type==="text")e.push({type:"text",text:n.text});else if(n.type==="thinking")e.push({type:"thinking",text:n.text||"",redacted:!1});else if(n.type==="redacted_thinking")e.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}`);e.push({type:"tool-call",id:n.id,name:n.name,parameters:n.input})}return e}i(ye,"convertToAxleContentParts");function Ee(t){switch(t){case"max_tokens":return S.Length;case"end_turn":return S.Stop;case"stop_sequence":return S.Stop;case"tool_use":return S.FunctionCall;case"pause_turn":case"refusal":default:return S.Error}}i(Ee,"convertStopReason$1");function lt(t){return t&&typeof t=="object"&&t.type==="object"}i(lt,"isObjectSchema");async function ut(t){const{client:e,model:n,messages:r,system:s,tools:a,context:o,options:l}=t,c=o?.tracer,{stop:u,max_tokens:d,...f}=l??{},p={model:n,max_tokens:d??16e3,messages:he(r),...s&&{system:s},...u&&{stop_sequences:_e(u)},...a&&{tools:ge(a)},...f};c?.debug("Anthropic request",{request:p});let m;try{const _=await e.messages.create(p);m=pt(_)}catch(_){m=J(_)}return c?.debug("Anthropic response",{result:m}),m}i(ut,"createGenerationRequest$3");function pt(t){const e=Ee(t.stop_reason);if(e===S.Error)return{type:"error",error:{type:"Uncaught error",message:`Stop reason is not recognized or unhandled: ${t.stop_reason}`},usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t};if(e===S.FunctionCall){const n=ye(t.content);return{type:"success",id:t.id,model:t.model,role:t.role,finishReason:S.FunctionCall,content:n,text:F(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}if(t.type=="message"){const n=ye(t.content);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:e,content:n,text:F(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}}i(pt,"convertToAIResponse");function dt(){const t=new Map,e=new Map,n=new Map;function r(s){const a=[];switch(s.type){case"message_start":a.push({type:"start",id:s.message.id,data:{model:s.message.model,timestamp:Date.now()}});break;case"message_delta":s.delta.stop_reason&&a.push({type:"complete",data:{finishReason:Ee(s.delta.stop_reason),usage:s.usage?{in:s.usage.input_tokens||0,out:s.usage.output_tokens||0}:void 0}});case"message_stop":break;case"content_block_start":if(s.content_block.type==="text")t.set(s.index,"text"),a.push({type:"text-start",data:{index:s.index}});else if(s.content_block.type==="tool_use"){t.set(s.index,"tool");const o=s.content_block;n.set(s.index,{id:o.id,name:o.name,argumentsBuffer:""}),a.push({type:"tool-call-start",data:{index:s.index,id:o.id,name:o.name}})}else if(s.content_block.type==="thinking")t.set(s.index,"thinking"),a.push({type:"thinking-start",data:{index:s.index,redacted:!1}});else if(s.content_block.type==="redacted_thinking")t.set(s.index,"thinking"),a.push({type:"thinking-start",data:{index:s.index,redacted:!0}});else if(s.content_block.type==="server_tool_use"){t.set(s.index,"internal-tool");const o=s.content_block;e.set(o.id,{index:s.index,name:o.name}),a.push({type:"internal-tool-start",data:{index:s.index,id:o.id,name:o.name}})}else if(s.content_block.type==="web_search_tool_result"){const o=s.content_block,l=e.get(o.tool_use_id);l&&(a.push({type:"internal-tool-complete",data:{index:l.index,id:o.tool_use_id,name:l.name,output:o.content}}),e.delete(o.tool_use_id))}break;case"content_block_delta":if(s.delta.type==="text_delta")a.push({type:"text-delta",data:{text:s.delta.text,index:s.index}});else if(s.delta.type==="input_json_delta"){const o=n.get(s.index);o&&(o.argumentsBuffer+=s.delta.partial_json)}else s.delta.type==="thinking_delta"?a.push({type:"thinking-delta",data:{text:s.delta.thinking,index:s.index}}):s.delta.type==="signature_delta"||s.delta.type;break;case"content_block_stop":{const o=t.get(s.index);if(o==="text")a.push({type:"text-complete",data:{index:s.index}});else if(o==="thinking")a.push({type:"thinking-complete",data:{index:s.index}});else if(o!=="internal-tool"){if(o==="tool"){const l=n.get(s.index);if(l){try{const c=JSON.parse(l.argumentsBuffer);a.push({type:"tool-call-complete",data:{index:s.index,id:l.id,name:l.name,arguments:c}})}catch(c){throw new Error(`Failed to parse tool call arguments for ${l.name}: ${c instanceof Error?c.message:String(c)}`)}n.delete(s.index)}}}t.delete(s.index);break}}return a}return i(r,"handleEvent"),{handleEvent:r}}i(dt,"createAnthropicStreamingAdapter");async function*ft(t){const{client:e,model:n,messages:r,system:s,tools:a,runtime:o,signal:l,options:c}=t,u=o?.tracer,{stop:d,max_tokens:f,...p}=c??{},m={model:n,max_tokens:f??mt(n),messages:he(r),...s&&{system:s},...d&&{stop_sequences:_e(d)},...a&&{tools:ge(a)},...p};u?.debug("Anthropic streaming request",{request:m});const _=dt();try{const h=await e.messages.create({...m,stream:!0},{signal:l});for await(const I of h){const w=_.handleEvent(I);for(const A of w)yield A}}catch(h){if(l?.aborted)return;yield{type:"error",data:{type:"STREAMING_ERROR",message:h instanceof Error?h.message:String(h),raw:h}}}}i(ft,"createStreamingRequest$3");const xe={[E.CLAUDE_OPUS_4_6]:128e3,[E.CLAUDE_OPUS_4_5_20251101]:64e3,[E.CLAUDE_HAIKU_4_5_20251001]:64e3,[E.CLAUDE_SONNET_4_5_20250929]:64e3,[E.CLAUDE_SONNET_4_20250514]:64e3,[E.CLAUDE_3_7_SONNET_20250219]:64e3,[E.CLAUDE_OPUS_4_1_20250805]:32e3,[E.CLAUDE_OPUS_4_20250514]:32e3,[E.CLAUDE_3_5_HAIKU_20241022]:8192,[E.CLAUDE_3_HAIKU_20240307]:4096};function mt(t){return t in xe?xe[t]:t.includes("opus")?t.match(/opus-4-[6-9]|opus-[5-9]/)?128e3:64e3:t.includes("sonnet")||t.includes("haiku")?t.match(/claude-3-[0-5]-/)?8192:64e3:16384}i(mt,"getMaxTokens");const _t="anthropic";function ht(t){const e=new ve({apiKey:t});return{name:_t,async createGenerationRequest(n,r){return await ut({client:e,model:n,...r})},createStreamingRequest(n,r){const{messages:s,system:a,tools:o,context:l,signal:c,options:u}=r;return ft({client:e,model:n,messages:s,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(ht,"anthropic");function Ie(t,e){const n=t.map(gt).flat(1);return e?[{role:"system",content:e},...n]:n}i(Ie,"convertAxleMessages");function Se(t){if(t&&t.length>0)return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:V.toJSONSchema(e.schema)}}))}i(Se,"convertTools");function ee(t){switch(t){case"stop":return S.Stop;case"length":return S.Length;case"tool_calls":case"function_call":return S.FunctionCall;case"content_filter":return S.Error;default:return S.Stop}}i(ee,"convertFinishReason");function gt(t){switch(t.role){case"tool":return yt(t);case"assistant":return Et(t);default:return xt(t)}}i(gt,"convertMessage$2");function yt(t){return t.content.map(e=>({role:"tool",content:e.content,tool_call_id:e.id}))}i(yt,"convertToolMessage$2");function Et(t){const e=t.content.filter(s=>s.type==="tool-call"),n=t.content.filter(s=>s.type==="text"),r=e.length>0?e.map(s=>({type:"function",id:s.id,function:{name:s.name,arguments:JSON.stringify(s.parameters)}})):void 0;return{role:"assistant",content:n.map(s=>s.text).join(""),...r&&{tool_calls:r}}}i(Et,"convertAssistantMessage$2");function xt(t){if(typeof t.content=="string")return{role:"user",content:t.content};const e=t.content.map(It).filter(n=>n!==null);return e.every(n=>n.type==="text")?{role:"user",content:e.map(n=>n.text).join("")}:{role:"user",content:e}}i(xt,"convertUserMessage$2");function It(t){return t.type==="text"?{type:"text",text:t.text}:t.type==="file"&&t.file.type==="image"?{type:"image_url",image_url:{url:`data:${t.file.mimeType};base64,${t.file.base64}`}}:null}i(It,"convertContentPart$2");async function St(t){const{baseUrl:e,model:n,messages:r,system:s,tools:a,context:o,apiKey:l,options:c}=t,u=o?.tracer,d=Ie(r,s),f=Se(a),p={model:n,messages:d,...f&&{tools:f}};c&&(c.temperature!==void 0&&(p.temperature=c.temperature),c.top_p!==void 0&&(p.top_p=c.top_p),c.max_tokens!==void 0&&(p.max_tokens=c.max_tokens),c.frequency_penalty!==void 0&&(p.frequency_penalty=c.frequency_penalty),c.presence_penalty!==void 0&&(p.presence_penalty=c.presence_penalty),c.stop!==void 0&&(p.stop=c.stop)),u?.debug("ChatCompletions request",{request:p});let m;try{const _={"Content-Type":"application/json"};l&&(_.Authorization=`Bearer ${l}`);const h=await fetch(`${e}/chat/completions`,{method:"POST",headers:_,body:JSON.stringify(p)});if(!h.ok){const w=await h.text().catch(()=>"");throw new Error(`HTTP error! status: ${h.status}${w?` - ${w}`:""}`)}const I=await h.json();m=Tt(I)}catch(_){u?.error("Error fetching ChatCompletions response",{error:_ instanceof Error?_.message:String(_)}),m=J(_)}return u?.debug("ChatCompletions response",{result:m}),m}i(St,"createGenerationRequest$2");function Tt(t){const e=t.choices?.[0];if(!e)return{type:"error",error:{type:"ChatCompletionsError",message:"No choices in response"},usage:{in:0,out:0},raw:t};const n=[];if(e.message.reasoning_content&&n.push({type:"thinking",text:e.message.reasoning_content}),e.message.content&&n.push({type:"text",text:e.message.content}),e.message.tool_calls)for(const a of e.message.tool_calls){let o;try{o=JSON.parse(a.function.arguments)}catch(l){throw new Error(`Invalid tool call arguments for ${a.function.name}: ${l instanceof Error?l.message:String(l)}`)}if(typeof o!="object"||o===null||Array.isArray(o))throw new Error(`Invalid tool call arguments for ${a.function.name}: expected object, got ${typeof o}`);n.push({type:"tool-call",id:a.id,name:a.function.name,parameters:o})}const r=n.some(a=>a.type==="tool-call"),s=ee(r?"tool_calls":e.finish_reason);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:s,content:n,text:F(n)??"",usage:{in:t.usage?.prompt_tokens||0,out:t.usage?.completion_tokens||0},raw:t}}i(Tt,"fromModelResponse$2");function wt(){const t=new Map;let e=0,n=-1,r="",s="",a=null;function o(c){n<0||(a==="text"?c.push({type:"text-complete",data:{index:n}}):a==="thinking"&&c.push({type:"thinking-complete",data:{index:n}}),a=null,n=-1)}i(o,"closeActivePart");function l(c){const u=[],d=c.choices[0];if(!d)return u;r||(r=c.id,s=c.model,u.push({type:"start",id:r,data:{model:s,timestamp:Date.now()}}));const f=d.delta;if(f.reasoning_content&&(a!=="thinking"&&(o(u),n=e++,a="thinking",u.push({type:"thinking-start",data:{index:n}})),u.push({type:"thinking-delta",data:{index:n,text:f.reasoning_content}})),f.content&&(a!=="text"&&(o(u),n=e++,a="text",u.push({type:"text-start",data:{index:n}})),u.push({type:"text-delta",data:{text:f.content,index:n}})),f.tool_calls){o(u);for(const p of f.tool_calls){const m=p.index;if(!t.has(m)){const h=e++,I=p.id||`tool-${h}`;t.set(m,{id:I,name:p.function?.name||"",argumentsBuffer:"",partIdx:h}),u.push({type:"tool-call-start",data:{index:h,id:I,name:p.function?.name||""}})}const _=t.get(m);p.id&&(_.id=p.id),p.function?.name&&(_.name=p.function.name),p.function?.arguments&&(_.argumentsBuffer+=p.function.arguments)}}if(d.finish_reason){o(u);for(const[,m]of t)try{const _=JSON.parse(m.argumentsBuffer);u.push({type:"tool-call-complete",data:{index:m.partIdx,id:m.id,name:m.name,arguments:_}})}catch(_){throw new Error(`Failed to parse tool call arguments for ${m.name}: ${_ instanceof Error?_.message:String(_)}`)}const p=ee(d.finish_reason);u.push({type:"complete",data:{finishReason:p,usage:c.usage?{in:c.usage.prompt_tokens,out:c.usage.completion_tokens}:{in:0,out:0}}})}return u}return i(l,"handleChunk"),{handleChunk:l}}i(wt,"createStreamingAdapter$1");async function*bt(t){const{baseUrl:e,model:n,messages:r,system:s,tools:a,context:o,signal:l,apiKey:c,options:u}=t,d=o?.tracer,f=Ie(r,s),p=Se(a),m={model:n,messages:f,stream:!0,stream_options:{include_usage:!0},...p&&{tools:p}};u&&(u.temperature!==void 0&&(m.temperature=u.temperature),u.top_p!==void 0&&(m.top_p=u.top_p),u.max_tokens!==void 0&&(m.max_tokens=u.max_tokens),u.frequency_penalty!==void 0&&(m.frequency_penalty=u.frequency_penalty),u.presence_penalty!==void 0&&(m.presence_penalty=u.presence_penalty),u.stop!==void 0&&(m.stop=u.stop)),d?.debug("ChatCompletions streaming request",{request:m});const _=wt();try{const h={"Content-Type":"application/json"};c&&(h.Authorization=`Bearer ${c}`);const I=await fetch(`${e}/chat/completions`,{method:"POST",headers:h,body:JSON.stringify(m),signal:l});if(!I.ok){const G=await I.text().catch(()=>"");throw new Error(`HTTP error! status: ${I.status}${G?` - ${G}`:""}`)}if(!I.body)throw new Error("Response body is null");const w=I.body.getReader(),A=new TextDecoder;let U="";for(;;){const{done:G,value:B}=await w.read();if(G)break;U+=A.decode(B,{stream:!0});const N=U.split(`
20
+ `);U=N.pop()||"";for(const W of N){const y=W.trim();if(!y||y.startsWith(":")||!y.startsWith("data: "))continue;const L=y.slice(6);if(L!=="[DONE]")try{const T=JSON.parse(L),D=_.handleChunk(T);for(const v of D)yield v}catch(T){d?.error("Error parsing ChatCompletions stream chunk",{error:T instanceof Error?T.message:String(T),line:y})}}}}catch(h){if(l?.aborted)return;d?.error("Error in ChatCompletions streaming request",{error:h instanceof Error?h.message:String(h)}),yield{type:"error",data:{type:"STREAMING_ERROR",message:h instanceof Error?h.message:String(h),raw:h}}}}i(bt,"createStreamingRequest$2");function At(t,e){return{name:"ChatCompletions",async createGenerationRequest(n,r){return await St({baseUrl:t,model:n,apiKey:e,...r})},createStreamingRequest(n,r){return bt({baseUrl:t,model:n,apiKey:e,...r})}}}i(At,"chatCompletions");const x={GEMINI_3_PRO_PREVIEW:"gemini-3-pro-preview",GEMINI_3_FLASH_PREVIEW:"gemini-3-flash-preview",GEMINI_3_PRO_IMAGE_PREVIEW:"gemini-3-pro-image-preview",GEMINI_2_5_PRO:"gemini-2.5-pro",GEMINI_2_5_FLASH:"gemini-2.5-flash",GEMINI_2_5_FLASH_PREVIEW_09_2025:"gemini-2.5-flash-preview-09-2025",GEMINI_2_5_FLASH_IMAGE:"gemini-2.5-flash-image",GEMINI_2_5_FLASH_LITE:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025:"gemini-2.5-flash-lite-preview-09-2025",GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025:"gemini-2.5-flash-native-audio-preview-09-2025",GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025:"gemini-2.5-flash-native-audio-preview-12-2025",GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025:"gemini-2.5-computer-use-preview-10-2025",GEMINI_2_0_FLASH:"gemini-2.0-flash",GEMINI_2_0_FLASH_001:"gemini-2.0-flash-001",GEMINI_2_0_FLASH_EXP_IMAGE_GENERATION:"gemini-2.0-flash-exp-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_EXP_1206:"gemini-exp-1206",GEMINI_FLASH_LATEST:"gemini-flash-latest",GEMINI_FLASH_LITE_LATEST:"gemini-flash-lite-latest",GEMINI_PRO_LATEST:"gemini-pro-latest",GEMMA_3_27B_IT:"gemma-3-27b-it",GEMMA_3_12B_IT:"gemma-3-12b-it",GEMMA_3_4B_IT:"gemma-3-4b-it",GEMMA_3_1B_IT:"gemma-3-1b-it",GEMMA_3N_E4B_IT:"gemma-3n-e4b-it",GEMMA_3N_E2B_IT:"gemma-3n-e2b-it",DEEP_RESEARCH_PRO_PREVIEW_12_2025:"deep-research-pro-preview-12-2025",GEMINI_ROBOTICS_ER_1_5_PREVIEW:"gemini-robotics-er-1.5-preview",NANO_BANANA_PRO_PREVIEW:"nano-banana-pro-preview",AQA:"aqa"};x.GEMINI_3_PRO_PREVIEW,x.GEMINI_3_FLASH_PREVIEW,x.GEMINI_3_PRO_IMAGE_PREVIEW,x.GEMINI_2_5_PRO,x.GEMINI_2_5_FLASH,x.GEMINI_2_5_FLASH_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_IMAGE,x.GEMINI_2_5_FLASH_LITE,x.GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025,x.GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025,x.GEMINI_2_0_FLASH,x.GEMINI_2_0_FLASH_001,x.GEMINI_2_0_FLASH_EXP_IMAGE_GENERATION,x.GEMINI_2_0_FLASH_LITE,x.GEMINI_2_0_FLASH_LITE_001,x.GEMINI_EXP_1206,x.GEMINI_FLASH_LATEST,x.GEMINI_FLASH_LITE_LATEST,x.GEMINI_PRO_LATEST,x.GEMMA_3_27B_IT,x.GEMMA_3_12B_IT,x.GEMMA_3_4B_IT,x.GEMMA_3_1B_IT,x.GEMMA_3N_E4B_IT,x.GEMMA_3N_E2B_IT,x.DEEP_RESEARCH_PRO_PREVIEW_12_2025,x.GEMINI_ROBOTICS_ER_1_5_PREVIEW,x.NANO_BANANA_PRO_PREVIEW;const kt=x.GEMINI_3_FLASH_PREVIEW;function Te(t,e,n){const r={};return e&&(r.systemInstruction=e),t&&t.length>0&&(r.tools=t.map(s=>({functionDeclarations:[{name:s.name,description:s.description,parametersJsonSchema:V.toJSONSchema(s.schema)}]}))),n&&Object.assign(r,n),r}i(Te,"prepareConfig");function we(t){return t.map(Ct).filter(e=>e!==void 0)}i(we,"convertAxleMessagesToGemini");function Ct(t){switch(t.role){case"tool":return Ot(t);case"assistant":return Pt(t);case"user":return Rt(t)}}i(Ct,"convertMessage$1");function Ot(t){return{role:"user",parts:t.content.map(e=>({functionResponse:{id:e.id??void 0,name:e.name,response:{output:e.content}}}))}}i(Ot,"convertToolMessage$1");function Pt(t){const e=[],n=t.content.filter(s=>s.type==="text");if(n.length>0){const s=n.map(a=>a.text).join("");s&&e.push({text:s})}const r=t.content.filter(s=>s.type==="tool-call");return r.length>0&&e.push(...r.map(s=>({functionCall:{id:s.id??void 0,name:s.name,args:s.parameters}}))),{role:"model",parts:e}}i(Pt,"convertAssistantMessage$1");function Rt(t){return typeof t.content=="string"?{role:"user",parts:[{text:t.content}]}:{role:"user",parts:t.content.map($t).filter(n=>n!==null)}}i(Rt,"convertUserMessage$1");function $t(t){return t.type==="text"?{text:t.text}:t.type==="file"&&(t.file.type==="image"||t.file.type==="document")?{inlineData:{mimeType:t.file.mimeType,data:t.file.base64}}:null}i($t,"convertContentPart$1");function be(t){switch(t){case O.STOP:return[!0,S.Stop];case O.MAX_TOKENS:return[!0,S.Length];case O.FINISH_REASON_UNSPECIFIED:case O.SAFETY:case O.RECITATION:case O.LANGUAGE:case O.OTHER:case O.BLOCKLIST:case O.PROHIBITED_CONTENT:case O.SPII:case O.MALFORMED_FUNCTION_CALL:case O.IMAGE_SAFETY:return[!1,S.Error]}}i(be,"convertStopReason");async function Nt(t){const{client:e,model:n,messages:r,system:s,tools:a,context:o,options:l}=t,c=o?.tracer,u=l?{...l}:{};u.max_tokens&&(u.maxOutputTokens=u.max_tokens,delete u.max_tokens),u.stop&&(u.stopSequences=Array.isArray(u.stop)?u.stop:[u.stop],delete u.stop),u.top_p!==void 0&&(u.topP=u.top_p,delete u.top_p);const d={contents:we(r),config:Te(a,s,u)};c?.debug("Gemini request",{request:d});let f;try{const p=await e.models.generateContent({model:n,...d});f=Lt(p,{tracer:c})}catch(p){c?.error(p instanceof Error?p.message:String(p)),f=J(p)}return c?.debug("Gemini response",{result:f}),f}i(Nt,"createGenerationRequest$1");function Lt(t,e){const{tracer:n}=e,r=t.usageMetadata.promptTokenCount,s=t.usageMetadata.totalTokenCount-r,a={in:r,out:s};if(!t)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:t};if(t.promptFeedback&&t.promptFeedback.blockReason)return{type:"error",error:{type:"Blocked",message:`Response blocked by Google AI: ${t.promptFeedback.blockReason}, ${t.promptFeedback.blockReasonMessage}`},usage:a,raw:t};if(!t.candidates||t.candidates.length===0)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:t};t.candidates.length>1&&n?.warn(`We received ${t.candidates.length} response candidates`);const o=t.candidates[0],c=(o.content?.parts||[]).map(f=>f.text).filter(f=>f!==void 0).join(""),[u,d]=be(o.finishReason);if(u){const f=[];if(c&&f.push({type:"text",text:c}),t.functionCalls)for(const p of t.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:t.responseId,model:t.modelVersion,role:"assistant",finishReason:t.functionCalls?S.FunctionCall:d,content:f,text:F(f)??"",usage:a,raw:t}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${d}`},usage:a,raw:t}}i(Lt,"fromModelResponse$1");function Mt(){let t=0,e=-1,n=!1,r="",s="",a=0,o=0,l=null;function c(d){e<0||(l==="text"?d.push({type:"text-complete",data:{index:e}}):l==="thinking"&&d.push({type:"thinking-complete",data:{index:e}}),l=null,e=-1)}i(c,"closeActivePart");function u(d){const f=[];r||(r=d.responseId||`gemini-${Date.now()}`,s=d.modelVersion||"gemini",f.push({type:"start",id:r,data:{model:s,timestamp:Date.now()}})),d.usageMetadata&&(a=d.usageMetadata.promptTokenCount||0,o=(d.usageMetadata.totalTokenCount||0)-a);const p=d.candidates?.[0];if(!p)return f;const m=p.content?.parts||[];for(const _ of m){const h="thought"in _&&_.thought===!0;if(h&&_.text?(l!=="thinking"&&(c(f),e=t++,l="thinking",f.push({type:"thinking-start",data:{index:e}})),f.push({type:"thinking-delta",data:{index:e,text:_.text}})):_.text&&!h?(l!=="text"&&(c(f),e=t++,l="text",f.push({type:"text-start",data:{index:e}})),f.push({type:"text-delta",data:{text:_.text,index:e}})):_.functionCall||console.log(`[gemini] unhandled part type: ${JSON.stringify(Object.keys(_))}`),_.functionCall){c(f),n=!0;const I=t++,w=_.functionCall.id||`tool-${I}`;f.push({type:"tool-call-start",data:{index:I,id:w,name:_.functionCall.name}}),f.push({type:"tool-call-complete",data:{index:I,id:w,name:_.functionCall.name,arguments:_.functionCall.args}})}}if(p.finishReason&&p.finishReason!==O.FINISH_REASON_UNSPECIFIED){c(f);const[_,h]=be(p.finishReason),I=n?S.FunctionCall:h;!_&&!n?f.push({type:"error",data:{type:"FinishReasonError",message:`Unexpected finish reason: ${p.finishReason}`,usage:{in:a,out:o},raw:d}}):f.push({type:"complete",data:{finishReason:I,usage:{in:a,out:o}}})}return f}return i(u,"handleChunk"),{handleChunk:u}}i(Mt,"createGeminiStreamingAdapter");async function*Ut(t){const{client:e,model:n,messages:r,system:s,tools:a,runtime:o,signal:l,options:c}=t,u=o?.tracer,d=c?{...c}:{};d.max_tokens&&(d.maxOutputTokens=d.max_tokens,delete d.max_tokens),d.stop&&(d.stopSequences=Array.isArray(d.stop)?d.stop:[d.stop],delete d.stop),d.top_p!==void 0&&(d.topP=d.top_p,delete d.top_p);const f={contents:we(r),config:Te(a,s,d)};u?.debug("Gemini streaming request",{request:f});const p=Mt();try{const m=await e.models.generateContentStream({model:n,...f});for await(const _ of m){const h=p.handleChunk(_);for(const I of h)yield I}}catch(m){if(l?.aborted)return;u?.error(m instanceof Error?m.message:String(m)),yield{type:"error",data:{type:"STREAMING_ERROR",message:m instanceof Error?m.message:String(m),raw:m}}}}i(Ut,"createStreamingRequest$1");const Gt="Gemini";function Dt(t){const e=new Fe({apiKey:t});return{name:Gt,async createGenerationRequest(n,r){return await Nt({client:e,model:n,...r})},createStreamingRequest(n,r){const{messages:s,system:a,tools:o,context:l,signal:c,options:u}=r;return Ut({client:e,model:n,messages:s,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(Dt,"gemini");const Ae={GPT_5_2:"gpt-5.2",GPT_5_2_2025_12_11:"gpt-5.2-2025-12-11",GPT_5_2_CHAT_LATEST:"gpt-5.2-chat-latest",GPT_5_2_PRO:"gpt-5.2-pro",GPT_5_2_PRO_2025_12_11:"gpt-5.2-pro-2025-12-11",GPT_5_2_CODEX:"gpt-5.2-codex",GPT_5_1:"gpt-5.1",GPT_5_1_2025_11_13:"gpt-5.1-2025-11-13",GPT_5_1_CHAT_LATEST:"gpt-5.1-chat-latest",GPT_5_1_CODEX:"gpt-5.1-codex",GPT_5_1_CODEX_MAX:"gpt-5.1-codex-max",GPT_5_1_CODEX_MINI:"gpt-5.1-codex-mini",GPT_5:"gpt-5",GPT_5_2025_08_07:"gpt-5-2025-08-07",GPT_5_CHAT_LATEST:"gpt-5-chat-latest",GPT_5_CODEX:"gpt-5-codex",GPT_5_MINI:"gpt-5-mini",GPT_5_MINI_2025_08_07:"gpt-5-mini-2025-08-07",GPT_5_NANO:"gpt-5-nano",GPT_5_NANO_2025_08_07:"gpt-5-nano-2025-08-07",GPT_5_PRO:"gpt-5-pro",GPT_5_PRO_2025_10_06:"gpt-5-pro-2025-10-06",GPT_5_SEARCH_API:"gpt-5-search-api",GPT_5_SEARCH_API_2025_10_14:"gpt-5-search-api-2025-10-14",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_11_20:"gpt-4o-2024-11-20",GPT_4O_2024_08_06:"gpt-4o-2024-08-06",GPT_4O_2024_05_13:"gpt-4o-2024-05-13",GPT_4O_MINI:"gpt-4o-mini",GPT_4O_MINI_2024_07_18:"gpt-4o-mini-2024-07-18",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_4_TURBO:"gpt-4-turbo",GPT_4_TURBO_2024_04_09:"gpt-4-turbo-2024-04-09",GPT_4_TURBO_PREVIEW:"gpt-4-turbo-preview",GPT_4_0125_PREVIEW:"gpt-4-0125-preview",GPT_4_1106_PREVIEW:"gpt-4-1106-preview",GPT_4:"gpt-4",GPT_4_0613:"gpt-4-0613",GPT_3_5_TURBO:"gpt-3.5-turbo",GPT_3_5_TURBO_0125:"gpt-3.5-turbo-0125",GPT_3_5_TURBO_1106:"gpt-3.5-turbo-1106",GPT_3_5_TURBO_16K:"gpt-3.5-turbo-16k",GPT_3_5_TURBO_INSTRUCT:"gpt-3.5-turbo-instruct",GPT_3_5_TURBO_INSTRUCT_0914:"gpt-3.5-turbo-instruct-0914",O4_MINI:"o4-mini",O4_MINI_2025_04_16:"o4-mini-2025-04-16",O4_MINI_DEEP_RESEARCH:"o4-mini-deep-research",O4_MINI_DEEP_RESEARCH_2025_06_26:"o4-mini-deep-research-2025-06-26",O3:"o3",O3_2025_04_16:"o3-2025-04-16",O3_PRO:"o3-pro",O3_PRO_2025_06_10:"o3-pro-2025-06-10",O3_MINI:"o3-mini",O3_MINI_2025_01_31:"o3-mini-2025-01-31",O3_DEEP_RESEARCH:"o3-deep-research",O3_DEEP_RESEARCH_2025_06_26:"o3-deep-research-2025-06-26",O1:"o1",O1_2024_12_17:"o1-2024-12-17",O1_PRO:"o1-pro",O1_PRO_2025_03_19:"o1-pro-2025-03-19",COMPUTER_USE_PREVIEW:"computer-use-preview",COMPUTER_USE_PREVIEW_2025_03_11:"computer-use-preview-2025-03-11",CHATGPT_IMAGE_LATEST:"chatgpt-image-latest"},vt=Ae.GPT_5_MINI;function ke(t){if(t&&t.length>0)return t.map(e=>{const n=V.toJSONSchema(e.schema);return{type:"function",strict:!0,name:e.name,description:e.description,parameters:n}})}i(ke,"prepareTools");function Ce(t){return t.map(Ft).flat(1)}i(Ce,"convertAxleMessageToResponseInput");function Ft(t){switch(t.role){case"tool":return Ht(t);case"assistant":return Bt(t);default:return jt(t)}}i(Ft,"convertMessage");function Ht(t){return t.content.map(e=>({type:"function_call_output",call_id:e.id,output:e.content}))}i(Ht,"convertToolMessage");function Bt(t){const e=[],n=F(t.content);n&&e.push({role:t.role,content:n});const r=t.content.filter(s=>s.type==="tool-call");for(const s of r)e.push({type:"function_call",call_id:s.id,name:s.name,arguments:JSON.stringify(s.parameters)});return e}i(Bt,"convertAssistantMessage");function jt(t){if(typeof t.content=="string")return{role:t.role,content:t.content};{const e=t.content.map(qt).filter(n=>n!==null);return{role:t.role,content:e}}}i(jt,"convertUserMessage");function qt(t){if(t.type==="text")return{type:"input_text",text:t.text};if(t.type==="file"){if(t.file.type==="image")return{type:"input_image",image_url:`data:${t.file.mimeType};base64,${t.file.base64}`,detail:"auto"};if(t.file.type==="document")return{type:"input_file",filename:t.file.path,file_data:`data:${t.file.mimeType};base64,${t.file.base64}`}}return t.type==="thinking",null}i(qt,"convertContentPart");async function Wt(t){const{client:e,model:n,messages:r,system:s,tools:a,context:o,options:l}=t,c=o?.tracer,u=ke(a),d={model:n,input:Ce(r),...s&&{instructions:s},...u?{tools:u}:{},...l};c?.debug("OpenAI ResponsesAPI request",{request:d});let f;try{const p=await e.responses.create(d);f=Vt(p)}catch(p){c?.error(p instanceof Error?p.message:String(p)),f=J(p)}return c?.debug("OpenAI ResponsesAPI response",{result:f}),f}i(Wt,"createGenerationRequest");function Vt(t){if(t.error)return{type:"error",error:{type:t.error.code||"undetermined",message:t.error.message||"Response generation failed"},usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t};const e=t.output?.filter(s=>s.type==="reasoning")?.map(s=>s),n=[];if(e&&e.length>0)for(const s of e){const a=s.summary?.[0]?.text||s.content?.[0]?.text||"";(a||s.encrypted_content)&&n.push({type:"thinking",text:a,...s.encrypted_content&&{encrypted:s.encrypted_content}})}t.output_text&&n.push({type:"text",text:t.output_text});const r=t.output?.filter(s=>s.type==="function_call");if(r&&r.length>0)for(const s of r){const a=s;try{n.push({type:"tool-call",id:a.id||"",name:a.name||"",parameters:a.arguments?JSON.parse(a.arguments):{}})}catch(o){throw new Error(`Failed to parse tool call arguments for ${a.name}: ${o instanceof Error?o.message:String(o)}`)}}return{type:"success",id:t.id,model:t.model||"",role:"assistant",finishReason:t.incomplete_details?S.Error:S.Stop,content:n,text:F(n)??"",usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t}}i(Vt,"fromModelResponse");function Kt(){let t="",e="",n=0,r=-1,s=!1;const a=new Map,o=new Map,l=new Set(["web_search_call","file_search_call","code_interpreter_call"]),c=new Map;function u(d){const f=[];switch(d.type){case"response.created":{t=d.response.id||`openai-${Date.now()}`,e=d.response.model,f.push({type:"start",id:t,data:{model:e,timestamp:Date.now()}});break}case"response.output_text.delta":{r===-1&&(r=n++,f.push({type:"text-start",data:{index:r}})),f.push({type:"text-delta",data:{text:d.delta,index:r}});break}case"response.output_text.done":{r>=0&&(f.push({type:"text-complete",data:{index:r}}),r=-1);break}case"response.function_call_arguments.delta":{const p=d.item_id;if(!c.has(p)){const _=a.get(p),h=_?.name||"",I=_?.callId||p,w=n++;c.set(p,{id:p,callId:I,name:h,argumentsBuffer:"",partIdx:w}),f.push({type:"tool-call-start",data:{index:w,id:I,name:h}})}const m=c.get(p);m.argumentsBuffer+=d.delta;break}case"response.function_call_arguments.done":{s=!0;const p=d.item_id,m=c.get(p),_=d.name||m?.name||"";if(m){try{const h=JSON.parse(d.arguments);f.push({type:"tool-call-complete",data:{index:m.partIdx,id:m.callId,name:_,arguments:h}})}catch(h){throw new Error(`Failed to parse function call arguments for ${_}: ${h instanceof Error?h.message:String(h)}`)}c.delete(p)}break}case"response.completed":{const p=d.response.usage;f.push({type:"complete",data:{finishReason:d.response.incomplete_details?S.Error:s?S.FunctionCall:S.Stop,usage:{in:p?.input_tokens||0,out:p?.output_tokens||0}}});break}case"response.failed":{f.push({type:"error",data:{type:"RESPONSES_API_ERROR",message:`Response failed: ${d.response.status}`,raw:d}});break}case"response.output_item.added":{if(d.item?.type==="reasoning")r=n++,f.push({type:"thinking-start",data:{index:r}});else if(d.item?.type==="function_call"){const p=d.item,m=p.id||p.call_id;m&&a.set(m,{name:p.name||"",callId:p.call_id||m})}else if(d.item&&l.has(d.item.type)){const p=d.item,m=n++;o.set(p.id,m),f.push({type:"internal-tool-start",data:{index:m,id:p.id,name:p.type}})}break}case"response.output_item.done":{if(d.item?.type==="reasoning"&&r>=0)f.push({type:"thinking-complete",data:{index:r}}),r=-1;else if(d.item&&l.has(d.item.type)){const p=d.item,m=o.get(p.id);m!==void 0&&(f.push({type:"internal-tool-complete",data:{index:m,id:p.id,name:p.type,output:d.item}}),o.delete(p.id))}break}case"response.reasoning_text.delta":{d.delta&&f.push({type:"thinking-delta",data:{index:r,text:d.delta}});break}case"response.reasoning_summary_text.delta":{d.delta&&f.push({type:"thinking-summary-delta",data:{index:r,text:d.delta}});break}default:console.log(`[OpenAI] unhandled stream event: ${d.type}`)}return f}return i(u,"handleEvent"),{handleEvent:u}}i(Kt,"createStreamingAdapter");async function*Jt(t){const{client:e,model:n,messages:r,system:s,tools:a,runtime:o,signal:l,options:c}=t,u=o?.tracer,d=ke(a),f={model:n,input:Ce(r),...s&&{instructions:s},stream:!0,...d?{tools:d}:{},...c};u?.debug("OpenAI ResponsesAPI streaming request",{request:f});const p=Kt();try{const m=e.responses.stream(f,...l?[{signal:l}]:[]);for await(const _ of m){const h=p.handleEvent(_);for(const I of h)yield I}}catch(m){if(l?.aborted)return;u?.error(m instanceof Error?m.message:String(m)),yield{type:"error",data:{type:"STREAMING_ERROR",message:m instanceof Error?m.message:String(m),raw:m}}}}i(Jt,"createStreamingRequest");const zt="OpenAI";function Xt(t){const e=new He({apiKey:t});return{name:zt,async createGenerationRequest(n,r){return await Wt({client:e,model:n,...r})},createStreamingRequest(n,r){const{messages:s,system:a,tools:o,context:l,signal:c,options:u}=r;return Jt({client:e,model:n,messages:s,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(Xt,"openai");const Zt=C.object({searchTerm:C.string().describe("The search term to query")});class Yt{static{i(this,"BraveSearchTool")}name="brave";description="Perform a search using the Brave search engine";schema=Zt;apiKey;throttle;lastExecTime=0;constructor(e){e&&this.configure(e)}configure(e){const{rateLimit:n}=e;this.apiKey=e["api-key"],this.throttle=n?1100/n:void 0}async execute(e){const{searchTerm:n}=e;if(this.throttle){for(;Date.now()-this.lastExecTime<this.throttle;)await ct(this.throttle-(Date.now()-this.lastExecTime));this.lastExecTime=Date.now()}try{const r=this.apiKey,s="https://api.search.brave.com/res/v1/web/search",a=new URL(s);a.searchParams.append("q",n),a.searchParams.append("format","json");const o=await fetch(a.toString(),{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":r}});if(!o.ok)throw new Error(`[Brave] HTTP error ${o.status}: ${o.statusText}`);const l=await o.json();return JSON.stringify(l)}catch(r){throw r instanceof Error?new Error(`[Brave] Error fetching search results: ${r.message}`):r}}}const Qt=new Yt,en=k.object({operation:k.enum(["add","subtract","multiply","divide"]).describe("The operation to perform (add, subtract, multiply, divide)"),a:k.number().describe("First operand"),b:k.number().describe("Second operand")}),tn={name:"calculator",description:"Performs basic arithmetic operations",schema:en,execute:i(async({operation:t,a:e,b:n})=>{switch(t){case"add":return`${e} + ${n} = ${e+n}`;case"subtract":return`${e} - ${n} = ${e-n}`;case"multiply":return`${e} * ${n} = ${e*n}`;case"divide":if(n===0)throw new Error("Cannot divide by zero");return`${e} / ${n} = ${e/n}`;default:throw new Error(`Unknown operation: ${t}`)}},"execute")},nn=je(Be),rn=3e4,sn=1024*1024;async function on(t,e={}){const{stdout:n,stderr:r}=await nn(t,{cwd:e.cwd,timeout:e.timeout??rn,maxBuffer:e.maxBuffer??sn});return{stdout:n,stderr:r}}i(on,"runCommand");function an(t){if(t instanceof Error){const e=t;let n=`Error executing command: ${t.message}`;return e.stdout&&(n+=`
21
+ [stdout]: ${e.stdout}`),e.stderr&&(n+=`
22
+ [stderr]: ${e.stderr}`),n}return`Error executing command: ${String(t)}`}i(an,"formatExecError");function cn(t,e){return e&&e.trim()?`${t}
23
+ [stderr]: ${e}`:t}i(cn,"formatOutput");const ln=C.object({command:C.string().describe("The shell command to execute")});class un{static{i(this,"ExecTool")}name="exec";description="Execute a shell command and return the output.";schema=ln;timeout=3e4;maxBuffer=1024*1024;cwd;constructor(e){e&&this.configure(e)}configure(e){this.timeout=e.timeout??3e4,this.maxBuffer=e.maxBuffer??1024*1024,this.cwd=e.cwd}summarize(e){return e.command}async execute(e){const{command:n}=e;try{const r=await on(n,{timeout:this.timeout,maxBuffer:this.maxBuffer,cwd:this.cwd});return cn(r.stdout,r.stderr)}catch(r){return an(r)}}}const pn=new un,dn=k.object({path:k.string().describe("The file path to patch"),old_string:k.string().describe("The exact text to find and replace"),new_string:k.string().describe("The replacement text"),start_line:k.number().int().positive().describe("1-indexed start line of the region to match within"),end_line:k.number().int().positive().describe("1-indexed end line (inclusive) of the region to match within")}),fn={name:"patch-file",description:"Patch a file by replacing an exact string match within a specified line range",schema:dn,summarize:i(({path:t,start_line:e,end_line:n})=>`${t}:${e}:${n}`,"summarize"),execute:i(async({path:t,old_string:e,new_string:n,start_line:r,end_line:s})=>{if(s<r)throw new Error(`end_line (${s}) must be >= start_line (${r})`);let a;try{a=await H(t,"utf-8")}catch(_){throw _ instanceof Error?new Error(`Failed to read file "${t}": ${_.message}`):_}const o=a.split(`
24
+ `);if(r>o.length)throw new Error(`start_line (${r}) exceeds file length (${o.length} lines)`);if(s>o.length)throw new Error(`end_line (${s}) exceeds file length (${o.length} lines)`);const c=o.slice(r-1,s).join(`
25
+ `),u=c.indexOf(e);if(u===-1)throw new Error(`old_string not found within lines ${r}-${s} of "${t}"`);if(c.indexOf(e,u+1)!==-1)throw new Error(`old_string matches multiple times within lines ${r}-${s} of "${t}"`);const f=c.replace(e,n),m=[...o.slice(0,r-1),...f.split(`
26
+ `),...o.slice(s)].join(`
27
+ `);try{await se(t,m,"utf-8")}catch(_){throw _ instanceof Error?new Error(`Failed to write file "${t}": ${_.message}`):_}return`Successfully patched "${t}" (lines ${r}-${s})`},"execute")},mn=k.object({path:k.string().describe("The file path to read from")}),_n={name:"read-file",description:"Read the contents of a file from disk",schema:mn,summarize:i(({path:t})=>t,"summarize"),execute:i(async({path:t})=>{try{return await H(t,"utf-8")}catch(e){throw e instanceof Error?new Error(`Failed to read file "${t}": ${e.message}`):e}},"execute")},hn=k.object({path:k.string().describe("The file path to write to"),content:k.string().describe("The content to write to the file")}),gn={name:"write-file",description:"Write content to a file on disk, creating directories if needed",schema:hn,summarize:i(({path:t})=>t,"summarize"),execute:i(async({path:t,content:e})=>{try{return await Ge(De(t),{recursive:!0}),await se(t,e,"utf-8"),`Successfully wrote ${e.length} characters to "${t}"`}catch(n){throw n instanceof Error?new Error(`Failed to write file "${t}": ${n.message}`):n}},"execute")},Oe={debug:0,info:1,warn:2,error:3};class yn{static{i(this,"Tracer")}writers=[];_minLevel="info";get minLevel(){return this._minLevel}set minLevel(e){this._minLevel=e}addWriter(e){this.writers.includes(e)||this.writers.push(e)}removeWriter(e){const n=this.writers.indexOf(e);n!==-1&&this.writers.splice(n,1)}startSpan(e,n){const r={traceId:crypto.randomUUID(),spanId:crypto.randomUUID(),name:e,type:n?.type,startTime:performance.now(),status:"ok",attributes:{},events:[]};return this.writers.forEach(s=>s.onSpanStart(r)),new te(r,this)}async flush(){for(const e of this.writers)e.flush&&await e.flush()}_notifySpanEnd(e){this.writers.forEach(n=>n.onSpanEnd(e))}_notifySpanUpdate(e){this.writers.forEach(n=>n.onSpanUpdate?.(e))}_notifyEvent(e,n){this.writers.forEach(r=>r.onEvent?.(e,n))}_notifySpanStart(e){this.writers.forEach(n=>n.onSpanStart(e))}_notifyLLMStreamStart(e){this.writers.forEach(n=>n.onLLMStreamStart?.(e))}_notifyLLMStreamChunk(e,n){this.writers.forEach(r=>r.onLLMStreamChunk?.(e,n))}_notifyLLMStreamEnd(e,n){this.writers.forEach(r=>r.onLLMStreamEnd?.(e,n))}_shouldLog(e){return Oe[e]>=Oe[this._minLevel]}}class te{static{i(this,"Span")}data;tracer;ended=!1;llmStreamBuffer="";llmStreamActive=!1;constructor(e,n){this.data=e,this.tracer=n}startSpan(e,n){const r={traceId:this.data.traceId,spanId:crypto.randomUUID(),parentSpanId:this.data.spanId,name:e,type:n?.type,startTime:performance.now(),status:"ok",attributes:{},events:[]};return this.tracer._notifySpanStart(r),new te(r,this.tracer)}end(e="ok"){this.ended||(this.ended=!0,this.data.endTime=performance.now(),this.data.status=e,this.tracer._notifySpanEnd(this.data))}addEvent(e,n,r){if(this.ended||!this.tracer._shouldLog(n))return;const s={name:e,timestamp:performance.now(),level:n,attributes:r};this.data.events.push(s),this.tracer._notifyEvent(this.data,s)}debug(e,n){this.addEvent(e,"debug",n)}info(e,n){this.addEvent(e,"info",n)}warn(e,n){this.addEvent(e,"warn",n)}error(e,n){this.addEvent(e,"error",n)}setAttribute(e,n){this.ended||(this.data.attributes[e]=n,this.tracer._notifySpanUpdate(this.data))}setAttributes(e){this.ended||(Object.assign(this.data.attributes,e),this.tracer._notifySpanUpdate(this.data))}setResult(e){this.ended||(this.data.result=e,this.tracer._notifySpanUpdate(this.data))}startLLMStream(){this.ended||(this.llmStreamActive=!0,this.llmStreamBuffer="",this.tracer._notifyLLMStreamStart(this.data))}appendLLMStream(e){this.ended||!this.llmStreamActive||(this.llmStreamBuffer+=e,this.tracer._notifyLLMStreamChunk(this.data,e))}endLLMStream(e){if(this.ended||!this.llmStreamActive)return;this.llmStreamActive=!1;const n={...e,response:{...e.response,content:e.response.content??this.llmStreamBuffer}};this.data.result=n,this.tracer._notifyLLMStreamEnd(this.data,n)}}const Pe={debug:0,info:1,warn:2,error:3};class En{static{i(this,"SimpleWriter")}minLevel;showInternal;showTimestamp;showDuration;output;spans=new Map;visibleDepths=new Map;constructor(e={}){this.minLevel=e.minLevel??"info",this.showInternal=e.showInternal??!1,this.showTimestamp=e.showTimestamp??!0,this.showDuration=e.showDuration??!0,this.output=e.output??console.log}shouldShowEvent(e){return Pe[e]>=Pe[this.minLevel]}isSpanVisible(e){return!(e.type==="internal"&&!this.showInternal)}findVisibleAncestor(e){let n=e.parentSpanId;for(;n;){const r=this.spans.get(n);if(!r)break;if(this.isSpanVisible(r))return r;n=r.parentSpanId}return null}calculateVisibleDepth(e){if(!this.isSpanVisible(e))return-1;const n=this.findVisibleAncestor(e);return n?(this.visibleDepths.get(n.spanId)??0)+1:0}formatTimestamp(){if(!this.showTimestamp)return"";const e=new Date,n=e.toTimeString().slice(0,8),r=e.getMilliseconds().toString().padStart(3,"0");return`[${n}.${r}] `}formatDuration(e){if(!this.showDuration||!e.endTime)return"";const n=e.endTime-e.startTime;return n<1e3?` (${Math.round(n)}ms)`:` (${(n/1e3).toFixed(2)}s)`}formatIndent(e){return" ".repeat(e)}formatSpanName(e){return e.type?`[${e.type}] ${e.name}`:e.name}onSpanStart(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const r=this.calculateVisibleDepth(e);this.visibleDepths.set(e.spanId,r);const s=this.formatIndent(r),a=this.formatTimestamp(),o=this.formatSpanName(e);this.output(`${a}${s}START ${o}`)}onSpanEnd(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const r=this.visibleDepths.get(e.spanId)??0,s=this.formatIndent(r),a=this.formatTimestamp(),o=this.formatDuration(e),l=this.formatSpanName(e),c=e.status==="error"?" [ERROR]":"";this.output(`${a}${s}END ${l}${o}${c}`)}onSpanUpdate(e){this.spans.set(e.spanId,e)}onEvent(e,n){if(!this.shouldShowEvent(n.level))return;this.spans.set(e.spanId,e);let r;if(this.isSpanVisible(e))r=this.visibleDepths.get(e.spanId)??0;else{const c=this.findVisibleAncestor(e);c?r=this.visibleDepths.get(c.spanId)??0:r=0}const s=this.formatIndent(r+1),a=this.formatTimestamp(),o=n.level.toUpperCase().padEnd(5);let l=`${a}${s}${o} ${n.name}`;if(n.attributes&&Object.keys(n.attributes).length>0){const c=Object.entries(n.attributes).map(([u,d])=>`${u}=${JSON.stringify(d)}`).join(" ");l+=` ${c}`}this.output(l)}onLLMStreamStart(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const n=this.visibleDepths.get(e.spanId)??0,r=this.formatIndent(n+1),s=this.formatTimestamp();this.output(`${s}${r}INFO LLM streaming started`)}onLLMStreamChunk(e,n){}onLLMStreamEnd(e,n){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const r=this.visibleDepths.get(e.spanId)??0,s=this.formatIndent(r+1),a=this.formatTimestamp(),o=[`model=${n.model}`];if(n.finishReason&&o.push(`finishReason=${n.finishReason}`),n.usage&&(n.usage.inputTokens!==void 0&&o.push(`inputTokens=${n.usage.inputTokens}`),n.usage.outputTokens!==void 0&&o.push(`outputTokens=${n.usage.outputTokens}`)),this.output(`${a}${s}INFO LLM complete ${o.join(" ")}`),this.shouldShowEvent("debug")&&n.response.content){const c=(typeof n.response.content=="string"?n.response.content:JSON.stringify(n.response.content,null,2)).split(`
28
+ `);for(const u of c)this.output(`${a}${s}DEBUG ${u}`)}}}export{S as A,it as D,ae as H,at as I,E as M,En as S,yn as T,kt as a,x as b,Ve as c,vt as d,ce as e,Ae as f,We as g,Ye as h,ht as i,Qt as j,tn as k,At as l,fe as m,Dt as n,ot as o,Xt as p,pe as q,Qe as r,le as s,_n as t,fn as u,pn as v,gn as w};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fifthrevision/axle",
3
- "version": "0.6.6",
3
+ "version": "0.7.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/johncch/axle.git"
@@ -37,24 +37,25 @@
37
37
  "author": "",
38
38
  "license": "ISC",
39
39
  "dependencies": {
40
- "@anthropic-ai/sdk": "^0.71.0",
40
+ "@anthropic-ai/sdk": "^0.76.0",
41
41
  "@commander-js/extra-typings": "^14.0.0",
42
- "@google/genai": "^1.30.0",
42
+ "@google/genai": "^1.41.0",
43
43
  "chalk": "^5.6.2",
44
- "commander": "^14.0.2",
45
- "glob": "^13.0.0",
46
- "openai": "^6.9.1",
47
- "serialize-error": "^12.0.0",
44
+ "commander": "^14.0.3",
45
+ "glob": "^13.0.5",
46
+ "mime": "^4.1.0",
47
+ "openai": "^6.22.0",
48
+ "serialize-error": "^13.0.1",
48
49
  "yaml": "^2.8.2",
49
- "zod": "^4.1.13"
50
+ "zod": "^4.3.6"
50
51
  },
51
52
  "devDependencies": {
52
- "dotenv": "^17.2.3",
53
- "pkgroll": "^2.21.4",
54
- "prettier": "^3.7.3",
53
+ "dotenv": "^17.3.1",
54
+ "pkgroll": "^2.26.0",
55
+ "prettier": "^3.8.1",
55
56
  "prettier-plugin-organize-imports": "^4.3.0",
56
57
  "tsx": "^4.21.0",
57
58
  "typescript": "^5.9.3",
58
- "vitest": "^4.0.14"
59
+ "vitest": "^4.0.18"
59
60
  }
60
61
  }
@@ -1,31 +0,0 @@
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};