@fifthrevision/axle 0.6.5 → 0.7.0
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/README.md +285 -11
- package/dist/cli.js +6 -6
- package/dist/index.d.ts +592 -1014
- package/dist/index.js +1 -3
- package/dist/simple-Bu-04pw1.js +28 -0
- package/package.json +13 -12
- package/dist/consoleWriter-Bg94CpP2.js +0 -31
package/dist/index.js
CHANGED
|
@@ -1,3 +1 @@
|
|
|
1
|
-
var
|
|
2
|
-
|
|
3
|
-
`)}finalize(t,e={}){const r=super.finalize(t,e),a=this.parseTaggedSections(t);let s="thinking";return"thinking"in a.tags||("think"in a.tags?(s="think",e.recorder?.warn?.log("No <thinking> section found in the response but found <think> instead. This may be a limitation of the model or prompt.")):e.recorder?.warn?.log("No <thinking> section found in the response. Please ensure your response includes a <thinking> tag.")),{...r,thinking:a.tags[s]||""}}}var U=Object.freeze({__proto__:null,DEFAULT_MODEL:E,Models:v,NAME:y,Provider:P}),z=Object.freeze({__proto__:null,DEFAULT_MODEL:b,Models:L,NAME:A,Provider:T}),W=Object.freeze({__proto__:null,DEFAULT_OLLAMA_URL:S,NAME:M,Provider:_}),G=Object.freeze({__proto__:null,DEFAULT_MODEL:O,Models:D,NAME:R,Provider:C});export{U as Anthropic,j as Axle,at as AxleStopReason,l as ChainOfThought,it as ConsoleWriter,ot as Conversation,z as Gemini,nt as Instruct,lt as LogLevel,W as Ollama,G as OpenAI,ct as WriteToDisk,ht as braveSearchTool,ut as calculatorTool,dt as concurrentWorkflow,p as dagWorkflow,pt as generate,d as serialWorkflow,N as stream};
|
|
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-Bu-04pw1.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-Bu-04pw1.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 Oe=Object.defineProperty;var i=(t,e)=>Oe(t,"name",{value:e,configurable:!0});import*as L from"zod";import V,{z as k}from"zod";import"glob";import Re from"mime";import{readFile as H,access as Pe,stat as Ue,writeFile as re,mkdir as Ge}from"node:fs/promises";import{resolve as Y,extname as oe,dirname as De}from"node:path";import Fe from"@anthropic-ai/sdk";import{FinishReason as C,GoogleGenAI as ve}from"@google/genai";import He from"openai";import{exec as je}from"node:child_process";import{promisify as Be}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,s=[];if(e&&s.push({type:"text",text:e}),n)for(const r of n)s.push({type:"file",file:r});return s}i(qe,"toContentParts");function v(t){return typeof t=="string"?t:t.filter(e=>e.type==="text").map(e=>e.text).join(`
|
|
2
|
+
|
|
3
|
+
`)}i(v,"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 s;for(const r of t){let a;try{a=await e(r.name,r.parameters)}catch(o){a={type:"error",error:{type:"exception",message:o instanceof Error?o.message:String(o)}}}if(a==null){s={name:r.name,message:`Tool not found: ${r.name}`},n.push({id:r.id,name:r.name,content:ie({type:"not-found",message:s.message})});break}a.type==="success"?n.push({id:r.id,name:r.name,content:a.content}):n.push({id:r.id,name:r.name,content:ie(a.error)})}return{results:n,missingTool:s}}i(ce,"executeToolCalls");function le(t){const e=[],n=[],s=[],r=[],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,s,r,a).then(c,u)),{onPartStart(f){e.push(f)},onPartUpdate(f){n.push(f)},onPartEnd(f){s.push(f)},onInternalTool(f){r.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 s of t)s(e,n)}i(ue,"emitPartStart");function Q(t,e,n,s,r){for(const a of t)a(e,n,s,r)}i(Q,"emitPartUpdate");function Je(t,e,n,s){for(const r of t)r(e,n,s)}i(Je,"emitPartEnd");function Ke(t,e){for(const n of t)n(e)}i(Ke,"emitError");async function ze(t,e,n,s,r,a,o){const{provider:l,model:c,messages:u,system:d,tools:f,onToolCall:p,maxIterations:m,tracer:_,options:h}=t,x=[...u],A=[],b={in:0,out:0};let U=0,G=0;const j=i(E=>{x.push(E),A.push(E)},"addMessage"),O=i(E=>{E.result==="error"&&Ke(o,E.error);const R=E.result==="success"?E.final?.content:E.result==="cancelled"?E.partial?.content:null,T=E.result==="success"?E.final?.finishReason:E.result==="cancelled"?S.Cancelled:void 0;return _?.setResult({kind:"llm",model:c,request:{messages:u},response:{content:R??null},usage:E.usage?{inputTokens:E.usage.in,outputTokens:E.usage.out}:void 0,finishReason:T}),_?.end(E.result==="error"?"error":"ok"),E},"endWithResult"),W=i((E,R,T,D)=>{D();const P=E.length>0?{role:"assistant",id:R,model:T,content:E,finishReason:S.Cancelled}:void 0;return P&&j(P),_?.end("ok"),{result:"cancelled",messages:A,partial:P,usage:b}},"buildCancelledResult");for(;;){if(e.aborted)return W([],"","",()=>{});if(m!==void 0&&G>=m)return O({result:"error",messages:A,error:{type:"model",error:{type:"error",error:{type:"MaxIterations",message:`Exceeded max iterations (${m})`}}},usage:b});G+=1;const E=_?.startSpan(`turn-${G}`,{type:"llm"});E?.startLLMStream();const R=l.createStreamingRequest?.(c,{messages:x,system:d,tools:f,context:{tracer:E},signal:e,options:h});if(!R)throw E?.end("error"),new Error("Provider does not support streaming. Use generate() instead.");const T=[];let D="",F="",P=null,B={in:0,out:0},N=-1,q=null,M="";const $=i(()=>{q!==null&&N>=0&&(Je(r,N,q,M),q=null,M="",N=-1)},"closePart");for await(const g of R){switch(g.type){case"start":D=g.id,F=g.data.model;break;case"text-start":{$(),T.push({type:"text",text:""}),N=U++,q="text",M="",ue(n,N,"text");break}case"text-delta":{const w=T[g.data.index];w.text+=g.data.text,M=w.text,E?.appendLLMStream(g.data.text),Q(s,N,"text",g.data.text,M);break}case"text-complete":{$();break}case"thinking-start":{$(),T.push({type:"thinking",text:""}),N=U++,q="thinking",M="",ue(n,N,"thinking");break}case"thinking-delta":{const w=T[g.data.index];w.text+=g.data.text,M=w.text,Q(s,N,"thinking",g.data.text,M);break}case"thinking-summary-delta":{const w=T[g.data.index];w.text+=g.data.text,M=w.text,Q(s,N,"thinking",g.data.text,M);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 w=T[g.data.index];g.data.id&&(w.id=g.data.id),g.data.name&&(w.name=g.data.name),w.parameters=g.data.arguments;break}case"internal-tool-start":{$();const w=U++;T.push({type:"internal-tool",id:g.data.id,name:g.data.name});for(const Z of a)Z({type:"start",index:w,id:g.data.id,name:g.data.name});break}case"internal-tool-complete":{const w=T[g.data.index];g.data.output!=null&&(w.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":{$(),P=g.data.finishReason,B=g.data.usage;break}case"error":{$();const w=g.data.usage??{in:0,out:0};return b.in+=w.in??0,b.out+=w.out??0,E?.end("error"),O({result:"error",messages:A,error:{type:"model",error:{type:"error",error:{type:g.data.type,message:g.data.message}}},usage:b})}default:console.warn("[WARN] Unhandled chunk type. Should never happen")}if(e.aborted)break}if(e.aborted)return E?.end("ok"),W(T,D,F,$);if(P===null)return $(),E?.end("error"),O({result:"error",messages:A,error:{type:"model",error:{type:"error",error:{type:"IncompleteStream",message:"Stream ended without a completion signal"}}},usage:b});b.in+=B.in??0,b.out+=B.out??0;const Me={kind:"llm",model:F,request:{messages:x},response:{content:T},usage:{inputTokens:B.in,outputTokens:B.out},finishReason:P};E?.endLLMStream(Me),E?.end();const z={role:"assistant",id:D,model:F,content:T,finishReason:P};if(j(z),P!==S.FunctionCall)return O({result:"success",messages:A,final:z,usage:b});const X=T.filter(g=>g.type==="tool-call");if(X.length===0)return O({result:"success",messages:A,final:z,usage:b});if(e.aborted)return _?.end("ok"),{result:"cancelled",messages:A,usage:b};const $e=p?async(g,w)=>p(g,w):async()=>null;for(const g of X)_?.info(`tool call: ${g.name}`,{parameters:g.parameters});const{results:ne,missingTool:se}=await ce(X,$e);if(ne.length>0&&j({role:"tool",content:ne}),se)return O({result:"error",messages:A,error:{type:"tool",error:se},usage:b})}}i(ze,"run");function Xe(t,e,n="{{}}"){const s=n==="{{}}"?/\{\{(.*?)\}\}/g:/\{(.*?)\}/g;return t=t.replace(s,(r,a)=>{if(a=a.trim(),Object.prototype.hasOwnProperty.call(e,a)){const o=e[a];return o==null?"":String(o)}return r}),t}i(Xe,"replaceVariables");function J(t){if(t instanceof L.ZodString)return["string","Your answer"];if(t instanceof L.ZodNumber)return["number",42];if(t instanceof L.ZodBoolean)return["boolean",!0];if(t instanceof L.ZodArray){const e=t.element;if(e instanceof L.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(e instanceof L.ZodNumber)return["number array",[42,59,3.14]];if(e instanceof L.ZodBoolean)return["boolean array",[!0,!1,!1]];if(e instanceof L.ZodObject){const[n,s]=J(e);return["object array",[s,s]]}return["array",[]]}if(t instanceof L.ZodObject){const e=t.shape,n={};for(const[s,r]of Object.entries(e)){const[a,o]=J(r);n[s]=o}return["JSON object",n]}if(t instanceof L.ZodOptional){const e=t.unwrap(),[n,s]=J(e);return[`${n} | undefined`,s]}}i(J,"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 s=Ze(t),r={};for(const[a,o]of Object.entries(e)){const l=s.tags[a];if(l!==void 0)r[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 r&&(a[o]=l.parse(r[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 s=n.trim();try{return JSON.parse(s)}catch{return s}}).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 s=t;s=s.replace(e,(a,o,l)=>(n[o]=l,""));const r=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return s=s.replace(r,(a,o,l)=>(n[o]=l,"")),{tags:n,remaining:s.trim()}}i(Ze,"parseTaggedSections");function fe(t,e={}){const n={...e,...t.inputs};let s=Xe(t.prompt,n);if(t.textReferences.length>0)for(const[o,l]of t.textReferences.entries()){const c=l.name?`: ${l.name}`:"";s+=`
|
|
4
|
+
|
|
5
|
+
## Reference ${o+1}${c}
|
|
6
|
+
|
|
7
|
+
\`\`\`${l.content}'''`}let r=`# Instructions
|
|
8
|
+
|
|
9
|
+
`;if((t.schema?Object.keys(t.schema):[]).length>0){r+=`## Output Format Instructions
|
|
10
|
+
`,r+=`
|
|
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]=J(l);r+=`
|
|
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){r+=`
|
|
16
|
+
## Additional Instructions
|
|
17
|
+
|
|
18
|
+
`;for(const o of t.instructions)r+=`- ${o}
|
|
19
|
+
`}return r+s}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 s;if(typeof e=="string")this.history.addUser(e);else{const r=fe(e,n),a=e.files;this.history.addUser(qe({text:r,files:a})),s=e.schema}return this.execute(s)}execute(e){const n=this.tools,s=Object.values(n).map(o=>({name:o.name,description:o.description,schema:o.schema})),r=le({provider:this.provider,model:this.model,messages:this.history.messages,system:this.system,tools:s.length>0?s: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&&r.onPartStart(this.partStartCallback),this.partUpdateCallback&&r.onPartUpdate(this.partUpdateCallback),this.partEndCallback&&r.onPartEnd(this.partEndCallback),this.internalToolCallback&&r.onInternalTool(this.internalToolCallback),this.errorCallback&&r.onError(this.errorCallback);const a=r.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=v(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(()=>r.cancel(),"cancel"),get final(){return a}}}}async function Qe(t,e){const{defaults:n,tag:s}=e;let r=null,a="";if(t)try{a=Y(t),r=await H(a,{encoding:"utf-8"})}catch{throw new Error(`${s} not found, see --help for details`)}else{for(const o of n.formats)try{a=Y(n.name+"."+o),r=await H(a,{encoding:"utf-8"});break}catch{continue}if(r===null)throw new Error(`${s} not found, see --help for details`)}return{content:r,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 st(t){return t.startsWith("text/")||nt.has(t)}i(st,"isTextLikeMimeType");function rt(t){const e=Re.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(st(e))return{type:"text",mimeType:e};{const n=oe(t).toLowerCase();throw new Error(`Unsupported file type: ${n} (${e})`)}}i(rt,"getFileCategory");async function ot(t,e){const n=Y(t);try{await Pe(n)}catch{throw new Error(`File not found: ${t}`)}const s=await Ue(n);if(s.size>me)throw new Error(`File too large: ${s.size} bytes. Maximum allowed: ${me} bytes`);const r=n.split("/").pop()||"",a=rt(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:s.size,name:r,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:s.size,name:r,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 I={CLAUDE_OPUS_4_6:"claude-opus-4-6",CLAUDE_OPUS_4_5_20251101:"claude-opus-4-5-20251101",CLAUDE_OPUS_4_5_LATEST:"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_LATEST:"claude-sonnet-4-5-20250929",CLAUDE_OPUS_4_1_20250805:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_1_LATEST:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_20250514:"claude-opus-4-20250514",CLAUDE_OPUS_4_LATEST:"claude-opus-4-20250514",CLAUDE_SONNET_4_20250514:"claude-sonnet-4-20250514",CLAUDE_SONNET_4_LATEST:"claude-sonnet-4-20250514",CLAUDE_3_7_SONNET_20250219:"claude-3-7-sonnet-20250219",CLAUDE_3_7_SONNET_LATEST:"claude-3-7-sonnet-20250219",CLAUDE_3_5_HAIKU_20241022:"claude-3-5-haiku-20241022",CLAUDE_3_5_HAIKU_LATEST:"claude-3-5-haiku-20241022",CLAUDE_3_HAIKU_20240307:"claude-3-haiku-20240307"};I.CLAUDE_OPUS_4_6,I.CLAUDE_OPUS_4_5_20251101,I.CLAUDE_OPUS_4_5_LATEST,I.CLAUDE_HAIKU_4_5_20251001,I.CLAUDE_HAIKU_4_5,I.CLAUDE_SONNET_4_5_20250929,I.CLAUDE_SONNET_4_5_LATEST,I.CLAUDE_OPUS_4_1_20250805,I.CLAUDE_OPUS_4_1_LATEST,I.CLAUDE_OPUS_4_20250514,I.CLAUDE_OPUS_4_LATEST,I.CLAUDE_SONNET_4_20250514,I.CLAUDE_SONNET_4_LATEST,I.CLAUDE_3_7_SONNET_20250219,I.CLAUDE_3_7_SONNET_LATEST,I.CLAUDE_3_5_HAIKU_20241022,I.CLAUDE_3_5_HAIKU_LATEST,I.CLAUDE_3_HAIKU_20240307;const it=I.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 K(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",s=e?.error?.error?.message||e?.error?.message||e?.message||e?.error||"Unexpected error";return{type:"error",error:{type:String(n),message:String(s)},usage:{in:0,out:0},raw:t}}return{type:"error",error:{type:"Undetermined",message:String(t)},usage:{in:0,out:0},raw:t}}i(K,"getUndefinedError");function he(t){return t.map(e=>{if(e.role==="assistant"){const n=[];for(const s of e.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(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 s of e.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}}})}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:s,system:r,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(s),...r&&{system:r},...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=K(_)}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:v(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:v(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 s(r){const a=[];switch(r.type){case"message_start":a.push({type:"start",id:r.message.id,data:{model:r.message.model,timestamp:Date.now()}});break;case"message_delta":r.delta.stop_reason&&a.push({type:"complete",data:{finishReason:Ee(r.delta.stop_reason),usage:r.usage?{in:r.usage.input_tokens||0,out:r.usage.output_tokens||0}:void 0}});case"message_stop":break;case"content_block_start":if(r.content_block.type==="text")t.set(r.index,"text"),a.push({type:"text-start",data:{index:r.index}});else if(r.content_block.type==="tool_use"){t.set(r.index,"tool");const o=r.content_block;n.set(r.index,{id:o.id,name:o.name,argumentsBuffer:""}),a.push({type:"tool-call-start",data:{index:r.index,id:o.id,name:o.name}})}else if(r.content_block.type==="thinking")t.set(r.index,"thinking"),a.push({type:"thinking-start",data:{index:r.index,redacted:!1}});else if(r.content_block.type==="redacted_thinking")t.set(r.index,"thinking"),a.push({type:"thinking-start",data:{index:r.index,redacted:!0}});else if(r.content_block.type==="server_tool_use"){t.set(r.index,"internal-tool");const o=r.content_block;e.set(o.id,{index:r.index,name:o.name}),a.push({type:"internal-tool-start",data:{index:r.index,id:o.id,name:o.name}})}else if(r.content_block.type==="web_search_tool_result"){const o=r.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(r.delta.type==="text_delta")a.push({type:"text-delta",data:{text:r.delta.text,index:r.index}});else if(r.delta.type==="input_json_delta"){const o=n.get(r.index);o&&(o.argumentsBuffer+=r.delta.partial_json)}else r.delta.type==="thinking_delta"?a.push({type:"thinking-delta",data:{text:r.delta.thinking,index:r.index}}):r.delta.type==="signature_delta"||r.delta.type;break;case"content_block_stop":{const o=t.get(r.index);if(o==="text")a.push({type:"text-complete",data:{index:r.index}});else if(o==="thinking")a.push({type:"thinking-complete",data:{index:r.index}});else if(o!=="internal-tool"){if(o==="tool"){const l=n.get(r.index);if(l){try{const c=JSON.parse(l.argumentsBuffer);a.push({type:"tool-call-complete",data:{index:r.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(r.index)}}}t.delete(r.index);break}}return a}return i(s,"handleEvent"),{handleEvent:s}}i(dt,"createAnthropicStreamingAdapter");async function*ft(t){const{client:e,model:n,messages:s,system:r,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(s),...r&&{system:r},...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 x of h){const A=_.handleEvent(x);for(const b of A)yield b}}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 Ie={[I.CLAUDE_OPUS_4_6]:128e3,[I.CLAUDE_OPUS_4_5_20251101]:64e3,[I.CLAUDE_HAIKU_4_5_20251001]:64e3,[I.CLAUDE_SONNET_4_5_20250929]:64e3,[I.CLAUDE_SONNET_4_20250514]:64e3,[I.CLAUDE_3_7_SONNET_20250219]:64e3,[I.CLAUDE_OPUS_4_1_20250805]:32e3,[I.CLAUDE_OPUS_4_20250514]:32e3,[I.CLAUDE_3_5_HAIKU_20241022]:8192,[I.CLAUDE_3_HAIKU_20240307]:4096};function mt(t){return t in Ie?Ie[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 Fe({apiKey:t});return{name:_t,async createGenerationRequest(n,s){return await ut({client:e,model:n,...s})},createStreamingRequest(n,s){const{messages:r,system:a,tools:o,context:l,signal:c,options:u}=s;return ft({client:e,model:n,messages:r,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(ht,"anthropic");function xe(t,e){const n=t.map(gt).flat(1);return e?[{role:"system",content:e},...n]:n}i(xe,"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 It(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(r=>r.type==="tool-call"),n=t.content.filter(r=>r.type==="text"),s=e.length>0?e.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:JSON.stringify(r.parameters)}})):void 0;return{role:"assistant",content:n.map(r=>r.text).join(""),...s&&{tool_calls:s}}}i(Et,"convertAssistantMessage$2");function It(t){if(typeof t.content=="string")return{role:"user",content:t.content};const e=t.content.map(xt).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(It,"convertUserMessage$2");function xt(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(xt,"convertContentPart$2");async function St(t){const{baseUrl:e,model:n,messages:s,system:r,tools:a,context:o,apiKey:l,options:c}=t,u=o?.tracer,d=xe(s,r),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 A=await h.text().catch(()=>"");throw new Error(`HTTP error! status: ${h.status}${A?` - ${A}`:""}`)}const x=await h.json();m=Tt(x)}catch(_){u?.error("Error fetching ChatCompletions response",{error:_ instanceof Error?_.message:String(_)}),m=K(_)}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 s=n.some(a=>a.type==="tool-call"),r=ee(s?"tool_calls":e.finish_reason);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:r,content:n,text:v(n)??"",usage:{in:t.usage?.prompt_tokens||0,out:t.usage?.completion_tokens||0},raw:t}}i(Tt,"fromModelResponse$2");function At(){const t=new Map;let e=0,n=-1,s="",r="",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;s||(s=c.id,r=c.model,u.push({type:"start",id:s,data:{model:r,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++,x=p.id||`tool-${h}`;t.set(m,{id:x,name:p.function?.name||"",argumentsBuffer:"",partIdx:h}),u.push({type:"tool-call-start",data:{index:h,id:x,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(At,"createStreamingAdapter$1");async function*wt(t){const{baseUrl:e,model:n,messages:s,system:r,tools:a,context:o,signal:l,apiKey:c,options:u}=t,d=o?.tracer,f=xe(s,r),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 _=At();try{const h={"Content-Type":"application/json"};c&&(h.Authorization=`Bearer ${c}`);const x=await fetch(`${e}/chat/completions`,{method:"POST",headers:h,body:JSON.stringify(m),signal:l});if(!x.ok){const G=await x.text().catch(()=>"");throw new Error(`HTTP error! status: ${x.status}${G?` - ${G}`:""}`)}if(!x.body)throw new Error("Response body is null");const A=x.body.getReader(),b=new TextDecoder;let U="";for(;;){const{done:G,value:j}=await A.read();if(G)break;U+=b.decode(j,{stream:!0});const O=U.split(`
|
|
20
|
+
`);U=O.pop()||"";for(const W of O){const E=W.trim();if(!E||E.startsWith(":")||!E.startsWith("data: "))continue;const R=E.slice(6);if(R!=="[DONE]")try{const T=JSON.parse(R),D=_.handleChunk(T);for(const F of D)yield F}catch(T){d?.error("Error parsing ChatCompletions stream chunk",{error:T instanceof Error?T.message:String(T),line:E})}}}}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(wt,"createStreamingRequest$2");function bt(t,e){return{name:"ChatCompletions",async createGenerationRequest(n,s){return await St({baseUrl:t,model:n,apiKey:e,...s})},createStreamingRequest(n,s){return wt({baseUrl:t,model:n,apiKey:e,...s})}}}i(bt,"chatCompletions");const y={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_PRO_PREVIEW_TTS:"gemini-2.5-pro-preview-tts",GEMINI_2_5_FLASH:"gemini-2.5-flash",GEMINI_2_5_FLASH_LATEST:"gemini-2.5-flash",GEMINI_2_5_FLASH_PREVIEW_09_2025:"gemini-2.5-flash-preview-09-2025",GEMINI_2_5_FLASH_PREVIEW_TTS:"gemini-2.5-flash-preview-tts",GEMINI_2_5_FLASH_NATIVE_AUDIO_LATEST:"gemini-2.5-flash-native-audio-latest",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_FLASH_IMAGE:"gemini-2.5-flash-image",GEMINI_2_5_FLASH_LITE:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_LATEST:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025:"gemini-2.5-flash-lite-preview-09-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_LATEST:"gemini-2.0-flash",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_2_0_FLASH_LITE_LATEST:"gemini-2.0-flash-lite",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"};y.GEMINI_3_PRO_PREVIEW,y.GEMINI_3_FLASH_PREVIEW,y.GEMINI_3_PRO_IMAGE_PREVIEW,y.GEMINI_2_5_PRO,y.GEMINI_2_5_PRO_PREVIEW_TTS,y.GEMINI_2_5_FLASH,y.GEMINI_2_5_FLASH_LATEST,y.GEMINI_2_5_FLASH_PREVIEW_09_2025,y.GEMINI_2_5_FLASH_PREVIEW_TTS,y.GEMINI_2_5_FLASH_NATIVE_AUDIO_LATEST,y.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025,y.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025,y.GEMINI_2_5_FLASH_IMAGE,y.GEMINI_2_5_FLASH_LITE,y.GEMINI_2_5_FLASH_LITE_LATEST,y.GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,y.GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025,y.GEMINI_2_0_FLASH,y.GEMINI_2_0_FLASH_001,y.GEMINI_2_0_FLASH_LATEST,y.GEMINI_2_0_FLASH_EXP_IMAGE_GENERATION,y.GEMINI_2_0_FLASH_LITE,y.GEMINI_2_0_FLASH_LITE_001,y.GEMINI_2_0_FLASH_LITE_LATEST,y.GEMINI_EXP_1206,y.GEMINI_FLASH_LATEST,y.GEMINI_FLASH_LITE_LATEST,y.GEMINI_PRO_LATEST,y.GEMMA_3_27B_IT,y.GEMMA_3_12B_IT,y.GEMMA_3_4B_IT,y.GEMMA_3_1B_IT,y.GEMMA_3N_E4B_IT,y.GEMMA_3N_E2B_IT,y.DEEP_RESEARCH_PRO_PREVIEW_12_2025,y.GEMINI_ROBOTICS_ER_1_5_PREVIEW,y.NANO_BANANA_PRO_PREVIEW;const kt=y.GEMINI_2_5_FLASH;function Te(t,e,n){const s={};return e&&(s.systemInstruction=e),t&&t.length>0&&(s.tools=t.map(r=>({functionDeclarations:[{name:r.name,description:r.description,parametersJsonSchema:V.toJSONSchema(r.schema)}]}))),n&&Object.assign(s,n),s}i(Te,"prepareConfig");function Ae(t){return t.map(Lt).filter(e=>e!==void 0)}i(Ae,"convertAxleMessagesToGemini");function Lt(t){switch(t.role){case"tool":return Ct(t);case"assistant":return Nt(t);case"user":return Mt(t)}}i(Lt,"convertMessage$1");function Ct(t){return{role:"user",parts:t.content.map(e=>({functionResponse:{id:e.id??void 0,name:e.name,response:{output:e.content}}}))}}i(Ct,"convertToolMessage$1");function Nt(t){const e=[],n=t.content.filter(r=>r.type==="text");if(n.length>0){const r=n.map(a=>a.text).join("");r&&e.push({text:r})}const s=t.content.filter(r=>r.type==="tool-call");return s.length>0&&e.push(...s.map(r=>({functionCall:{id:r.id??void 0,name:r.name,args:r.parameters}}))),{role:"model",parts:e}}i(Nt,"convertAssistantMessage$1");function Mt(t){return typeof t.content=="string"?{role:"user",parts:[{text:t.content}]}:{role:"user",parts:t.content.map($t).filter(n=>n!==null)}}i(Mt,"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 we(t){switch(t){case C.STOP:return[!0,S.Stop];case C.MAX_TOKENS:return[!0,S.Length];case C.FINISH_REASON_UNSPECIFIED:case C.SAFETY:case C.RECITATION:case C.LANGUAGE:case C.OTHER:case C.BLOCKLIST:case C.PROHIBITED_CONTENT:case C.SPII:case C.MALFORMED_FUNCTION_CALL:case C.IMAGE_SAFETY:return[!1,S.Error]}}i(we,"convertStopReason");async function Ot(t){const{client:e,model:n,messages:s,system:r,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:Ae(s),config:Te(a,r,u)};c?.debug("Gemini request",{request:d});let f;try{const p=await e.models.generateContent({model:n,...d});f=Rt(p,{tracer:c})}catch(p){c?.error(p instanceof Error?p.message:String(p)),f=K(p)}return c?.debug("Gemini response",{result:f}),f}i(Ot,"createGenerationRequest$1");function Rt(t,e){const{tracer:n}=e,s=t.usageMetadata.promptTokenCount,r=t.usageMetadata.totalTokenCount-s,a={in:s,out:r};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]=we(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:v(f)??"",usage:a,raw:t}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${d}`},usage:a,raw:t}}i(Rt,"fromModelResponse$1");function Pt(){let t=0,e=-1,n=!1,s="",r="",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=[];s||(s=d.responseId||`gemini-${Date.now()}`,r=d.modelVersion||"gemini",f.push({type:"start",id:s,data:{model:r,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 x=t++,A=_.functionCall.id||`tool-${x}`;f.push({type:"tool-call-start",data:{index:x,id:A,name:_.functionCall.name}}),f.push({type:"tool-call-complete",data:{index:x,id:A,name:_.functionCall.name,arguments:_.functionCall.args}})}}if(p.finishReason&&p.finishReason!==C.FINISH_REASON_UNSPECIFIED){c(f);const[_,h]=we(p.finishReason),x=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:x,usage:{in:a,out:o}}})}return f}return i(u,"handleChunk"),{handleChunk:u}}i(Pt,"createGeminiStreamingAdapter");async function*Ut(t){const{client:e,model:n,messages:s,system:r,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:Ae(s),config:Te(a,r,d)};u?.debug("Gemini streaming request",{request:f});const p=Pt();try{const m=await e.models.generateContentStream({model:n,...f});for await(const _ of m){const h=p.handleChunk(_);for(const x of h)yield x}}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 ve({apiKey:t});return{name:Gt,async createGenerationRequest(n,s){return await Ot({client:e,model:n,...s})},createStreamingRequest(n,s){const{messages:r,system:a,tools:o,context:l,signal:c,options:u}=s;return Ut({client:e,model:n,messages:r,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(Dt,"gemini");const be={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_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",O4_MINI:"o4-mini",O4_MINI_2025_04_16:"o4-mini-2025-04-16",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",O1_PRO:"o1-pro",O1_PRO_2025_03_19:"o1-pro-2025-03-19",O1:"o1",O1_2024_12_17:"o1-2024-12-17"},Ft=be.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 Le(t){return t.map(vt).flat(1)}i(Le,"convertAxleMessageToResponseInput");function vt(t){switch(t.role){case"tool":return Ht(t);case"assistant":return jt(t);default:return Bt(t)}}i(vt,"convertMessage");function Ht(t){return t.content.map(e=>({type:"function_call_output",call_id:e.id,output:e.content}))}i(Ht,"convertToolMessage");function jt(t){const e=[],n=v(t.content);n&&e.push({role:t.role,content:n});const s=t.content.filter(r=>r.type==="tool-call");for(const r of s)e.push({type:"function_call",call_id:r.id,name:r.name,arguments:JSON.stringify(r.parameters)});return e}i(jt,"convertAssistantMessage");function Bt(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(Bt,"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:s,system:r,tools:a,context:o,options:l}=t,c=o?.tracer,u=ke(a),d={model:n,input:Le(s),...r&&{instructions:r},...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=K(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(r=>r.type==="reasoning")?.map(r=>r),n=[];if(e&&e.length>0)for(const r of e){const a=r.summary?.[0]?.text||r.content?.[0]?.text||"";(a||r.encrypted_content)&&n.push({type:"thinking",text:a,...r.encrypted_content&&{encrypted:r.encrypted_content}})}t.output_text&&n.push({type:"text",text:t.output_text});const s=t.output?.filter(r=>r.type==="function_call");if(s&&s.length>0)for(const r of s){const a=r;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:v(n)??"",usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t}}i(Vt,"fromModelResponse");function Jt(){let t="",e="",n=0,s=-1,r=!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":{s===-1&&(s=n++,f.push({type:"text-start",data:{index:s}})),f.push({type:"text-delta",data:{text:d.delta,index:s}});break}case"response.output_text.done":{s>=0&&(f.push({type:"text-complete",data:{index:s}}),s=-1);break}case"response.function_call_arguments.delta":{const p=d.item_id;if(!c.has(p)){const _=a.get(p),h=_?.name||"",x=_?.callId||p,A=n++;c.set(p,{id:p,callId:x,name:h,argumentsBuffer:"",partIdx:A}),f.push({type:"tool-call-start",data:{index:A,id:x,name:h}})}const m=c.get(p);m.argumentsBuffer+=d.delta;break}case"response.function_call_arguments.done":{r=!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:r?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")s=n++,f.push({type:"thinking-start",data:{index:s}});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"&&s>=0)f.push({type:"thinking-complete",data:{index:s}}),s=-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:s,text:d.delta}});break}case"response.reasoning_summary_text.delta":{d.delta&&f.push({type:"thinking-summary-delta",data:{index:s,text:d.delta}});break}default:console.log(`[OpenAI] unhandled stream event: ${d.type}`)}return f}return i(u,"handleEvent"),{handleEvent:u}}i(Jt,"createStreamingAdapter");async function*Kt(t){const{client:e,model:n,messages:s,system:r,tools:a,runtime:o,signal:l,options:c}=t,u=o?.tracer,d=ke(a),f={model:n,input:Le(s),...r&&{instructions:r},stream:!0,...d?{tools:d}:{},...c};u?.debug("OpenAI ResponsesAPI streaming request",{request:f});const p=Jt();try{const m=e.responses.stream(f,...l?[{signal:l}]:[]);for await(const _ of m){const h=p.handleEvent(_);for(const x of h)yield x}}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(Kt,"createStreamingRequest");const zt="OpenAI";function Xt(t){const e=new He({apiKey:t});return{name:zt,async createGenerationRequest(n,s){return await Wt({client:e,model:n,...s})},createStreamingRequest(n,s){const{messages:r,system:a,tools:o,context:l,signal:c,options:u}=s;return Kt({client:e,model:n,messages:r,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(Xt,"openai");const Zt=L.object({searchTerm:L.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 s=this.apiKey,r="https://api.search.brave.com/res/v1/web/search",a=new URL(r);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":s}});if(!o.ok)throw new Error(`[Brave] HTTP error ${o.status}: ${o.statusText}`);const l=await o.json();return JSON.stringify(l)}catch(s){throw s instanceof Error?new Error(`[Brave] Error fetching search results: ${s.message}`):s}}}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=Be(je),sn=3e4,rn=1024*1024;async function on(t,e={}){const{stdout:n,stderr:s}=await nn(t,{cwd:e.cwd,timeout:e.timeout??sn,maxBuffer:e.maxBuffer??rn});return{stdout:n,stderr:s}}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=L.object({command:L.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 s=await on(n,{timeout:this.timeout,maxBuffer:this.maxBuffer,cwd:this.cwd});return cn(s.stdout,s.stderr)}catch(s){return an(s)}}}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:s,end_line:r})=>{if(r<s)throw new Error(`end_line (${r}) must be >= start_line (${s})`);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(s>o.length)throw new Error(`start_line (${s}) exceeds file length (${o.length} lines)`);if(r>o.length)throw new Error(`end_line (${r}) exceeds file length (${o.length} lines)`);const c=o.slice(s-1,r).join(`
|
|
25
|
+
`),u=c.indexOf(e);if(u===-1)throw new Error(`old_string not found within lines ${s}-${r} of "${t}"`);if(c.indexOf(e,u+1)!==-1)throw new Error(`old_string matches multiple times within lines ${s}-${r} of "${t}"`);const f=c.replace(e,n),m=[...o.slice(0,s-1),...f.split(`
|
|
26
|
+
`),...o.slice(r)].join(`
|
|
27
|
+
`);try{await re(t,m,"utf-8")}catch(_){throw _ instanceof Error?new Error(`Failed to write file "${t}": ${_.message}`):_}return`Successfully patched "${t}" (lines ${s}-${r})`},"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 re(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")},Ce={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 s={traceId:crypto.randomUUID(),spanId:crypto.randomUUID(),name:e,type:n?.type,startTime:performance.now(),status:"ok",attributes:{},events:[]};return this.writers.forEach(r=>r.onSpanStart(s)),new te(s,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(s=>s.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(s=>s.onLLMStreamChunk?.(e,n))}_notifyLLMStreamEnd(e,n){this.writers.forEach(s=>s.onLLMStreamEnd?.(e,n))}_shouldLog(e){return Ce[e]>=Ce[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 s={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(s),new te(s,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,s){if(this.ended||!this.tracer._shouldLog(n))return;const r={name:e,timestamp:performance.now(),level:n,attributes:s};this.data.events.push(r),this.tracer._notifyEvent(this.data,r)}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 Ne={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 Ne[e]>=Ne[this.minLevel]}isSpanVisible(e){return!(e.type==="internal"&&!this.showInternal)}findVisibleAncestor(e){let n=e.parentSpanId;for(;n;){const s=this.spans.get(n);if(!s)break;if(this.isSpanVisible(s))return s;n=s.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),s=e.getMilliseconds().toString().padStart(3,"0");return`[${n}.${s}] `}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 s=this.calculateVisibleDepth(e);this.visibleDepths.set(e.spanId,s);const r=this.formatIndent(s),a=this.formatTimestamp(),o=this.formatSpanName(e);this.output(`${a}${r}START ${o}`)}onSpanEnd(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const s=this.visibleDepths.get(e.spanId)??0,r=this.formatIndent(s),a=this.formatTimestamp(),o=this.formatDuration(e),l=this.formatSpanName(e),c=e.status==="error"?" [ERROR]":"";this.output(`${a}${r}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 s;if(this.isSpanVisible(e))s=this.visibleDepths.get(e.spanId)??0;else{const c=this.findVisibleAncestor(e);c?s=this.visibleDepths.get(c.spanId)??0:s=0}const r=this.formatIndent(s+1),a=this.formatTimestamp(),o=n.level.toUpperCase().padEnd(5);let l=`${a}${r}${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,s=this.formatIndent(n+1),r=this.formatTimestamp();this.output(`${r}${s}INFO LLM streaming started`)}onLLMStreamChunk(e,n){}onLLMStreamEnd(e,n){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const s=this.visibleDepths.get(e.spanId)??0,r=this.formatIndent(s+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}${r}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}${r}DEBUG ${u}`)}}}export{S as A,it as D,ae as H,at as I,I as M,En as S,yn as T,kt as a,y as b,Ve as c,Ft as d,ce as e,be as f,We as g,Ye as h,ht as i,Qt as j,tn as k,bt 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.
|
|
3
|
+
"version": "0.7.0",
|
|
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.
|
|
40
|
+
"@anthropic-ai/sdk": "^0.74.0",
|
|
41
41
|
"@commander-js/extra-typings": "^14.0.0",
|
|
42
|
-
"@google/genai": "^1.
|
|
42
|
+
"@google/genai": "^1.40.0",
|
|
43
43
|
"chalk": "^5.6.2",
|
|
44
|
-
"commander": "^14.0.
|
|
45
|
-
"glob": "^13.0.
|
|
46
|
-
"
|
|
47
|
-
"
|
|
44
|
+
"commander": "^14.0.3",
|
|
45
|
+
"glob": "^13.0.1",
|
|
46
|
+
"mime": "^4.1.0",
|
|
47
|
+
"openai": "^6.19.0",
|
|
48
|
+
"serialize-error": "^13.0.1",
|
|
48
49
|
"yaml": "^2.8.2",
|
|
49
|
-
"zod": "^4.
|
|
50
|
+
"zod": "^4.3.6"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|
|
52
|
-
"dotenv": "^17.2.
|
|
53
|
-
"pkgroll": "^2.
|
|
54
|
-
"prettier": "^3.
|
|
53
|
+
"dotenv": "^17.2.4",
|
|
54
|
+
"pkgroll": "^2.23.1",
|
|
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.
|
|
59
|
+
"vitest": "^4.0.18"
|
|
59
60
|
}
|
|
60
61
|
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
var Je=Object.defineProperty;var l=(e,t)=>Je(e,"name",{value:t,configurable:!0});import Ke from"@anthropic-ai/sdk";import*as I from"zod";import F,{z as H}from"zod";import{FinishReason as R,GoogleGenAI as ze}from"@google/genai";import Xe from"openai";import{serializeError as Ze}from"serialize-error";import{readFile as Ye,access as Qe,constants as et}from"fs/promises";import{glob as ie}from"glob";import{readFile as U,access as tt,stat as nt,writeFile as st,mkdir as rt}from"node:fs/promises";import{resolve as ee,extname as ce,dirname as ot}from"node:path";import T from"chalk";import le from"node:readline";class S extends Error{static{l(this,"AxleError")}code;id;details;constructor(t,n){super(t,{cause:n?.cause}),this.name=this.constructor.name,this.code=n?.code||"AXLE_ERROR",this.id=n?.id,this.details=n?.details,Object.setPrototypeOf(this,S.prototype)}}function at(e){const{text:t,files:n}=e,s=[];if(t&&s.push({type:"text",text:t}),n)for(const r of n)s.push({type:"file",file:r});return s}l(at,"toContentParts");function $(e){return typeof e=="string"?e:e.filter(t=>t.type==="text").map(t=>t.text).join(`
|
|
2
|
-
|
|
3
|
-
`)}l($,"getTextContent");function it(e){return e.filter(t=>t.type==="tool-call")}l(it,"getToolCalls");var y=(e=>(e[e.Stop=0]="Stop",e[e.Length=1]="Length",e[e.FunctionCall=2]="FunctionCall",e[e.Error=3]="Error",e[e.Custom=4]="Custom",e))(y||{});function j(e){if(e==null)return{type:"error",error:{type:"Undetermined",message:"Unknown error occurred"},usage:{in:0,out:0},raw:e};if(e instanceof Error)return{type:"error",error:{type:e.name||"Error",message:e.message||"Unexpected error"},usage:{in:0,out:0},raw:e};if(typeof e=="object"){const t=e,n=t?.error?.error?.type||t?.error?.type||t?.type||t?.code||t?.status||"Undetermined",s=t?.error?.error?.message||t?.error?.message||t?.message||t?.error||"Unexpected error";return{type:"error",error:{type:String(n),message:String(s)},usage:{in:0,out:0},raw:e}}return{type:"error",error:{type:"Undetermined",message:String(e)},usage:{in:0,out:0},raw:e}}l(j,"getUndefinedError");function ue(e){return e.map(t=>{if(t.role==="assistant"){const n=[];for(const s of t.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="thinking"?s.redacted?n.push({type:"redacted_thinking",data:s.text}):n.push({type:"thinking",thinking:s.text,signature:s.signature}):s.type==="tool-call"&&n.push({type:"tool_use",id:s.id,name:s.name,input:s.parameters});return{role:"assistant",content:n}}if(t.role==="tool")return{role:"user",content:t.content.map(n=>({type:"tool_result",tool_use_id:n.id,content:n.content}))};if(typeof t.content=="string")return{role:"user",content:t.content};{const n=[];for(const s of t.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="file"&&(s.file.type==="image"?n.push({type:"image",source:{type:"base64",media_type:s.file.mimeType,data:s.file.base64}}):s.file.type==="document"&&s.file.mimeType==="application/pdf"&&n.push({type:"document",source:{type:"base64",media_type:"application/pdf",data:s.file.base64}}));return{role:"user",content:n}}})}l(ue,"convertToProviderMessages");function pe(e){return e.map(t=>{const n=F.toJSONSchema(t.schema);if(!ct(n))throw new Error(`Schema for tool ${t.name} must be an object type`);return{name:t.name,description:t.description,input_schema:n}})}l(pe,"convertToProviderTools");function fe(e){const t=[];for(const n of e)if(n.type==="text")t.push({type:"text",text:n.text});else if(n.type==="thinking")t.push({type:"thinking",text:n.text||"",redacted:!1});else if(n.type==="redacted_thinking")t.push({type:"thinking",text:n.text||"",redacted:!0});else if(n.type==="tool_use"){if(typeof n.input!="object"||n.input===null||Array.isArray(n.input))throw new Error(`Invalid tool call input for ${n.name}: expected object, got ${typeof n.input}`);t.push({type:"tool-call",id:n.id,name:n.name,parameters:n.input})}return t}l(fe,"convertToAxleContentParts");function te(e){switch(e){case"max_tokens":return y.Length;case"end_turn":return y.Stop;case"stop_sequence":return y.Stop;case"tool_use":return y.FunctionCall;case"pause_turn":case"refusal":default:return y.Error}}l(te,"convertStopReason$2");function ct(e){return e&&typeof e=="object"&&e.type==="object"}l(ct,"isObjectSchema");async function lt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.stop&&(c.stop_sequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop);const d={model:n,max_tokens:4096,messages:ue(s),...r&&{system:r},...o&&{tools:pe(o)},...c};i?.debug?.log(d);let f;try{const p=await t.messages.create(d);f=ut(p)}catch(p){f=j(p)}return i?.debug?.log(f),f}l(lt,"createGenerationRequest$2");function ut(e){const t=te(e.stop_reason);if(t===y.Error)return{type:"error",error:{type:"Uncaught error",message:`Stop reason is not recognized or unhandled: ${e.stop_reason}`},usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e};if(t===y.FunctionCall){const n=fe(e.content);return{type:"success",id:e.id,model:e.model,role:e.role,finishReason:y.FunctionCall,content:n,text:$(n)??"",usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e}}if(e.type=="message"){const n=fe(e.content);return{type:"success",id:e.id,model:e.model,role:"assistant",finishReason:t,content:n,text:$(n)??"",usage:{in:e.usage.input_tokens,out:e.usage.output_tokens},raw:e}}}l(ut,"convertToAIResponse");function pt(){const e=new Map;function t(n){const s=[];switch(n.type){case"message_start":s.push({type:"start",id:n.message.id,data:{model:n.message.model,timestamp:Date.now()}});break;case"message_delta":n.delta.stop_reason&&s.push({type:"complete",data:{finishReason:te(n.delta.stop_reason),usage:n.usage?{in:n.usage.input_tokens||0,out:n.usage.output_tokens||0}:void 0}});case"message_stop":break;case"content_block_start":if(n.content_block.type==="text")n.index;else if(n.content_block.type==="tool_use"){const o=n.content_block;e.set(n.index,{id:o.id,name:o.name,argumentsBuffer:""}),s.push({type:"tool-call-start",data:{index:n.index,id:o.id,name:o.name}})}else n.content_block.type==="thinking"?s.push({type:"thinking-start",data:{index:n.index,redacted:!1}}):n.content_block.type==="redacted_thinking"?s.push({type:"thinking-start",data:{index:n.index,redacted:!0}}):n.content_block.type==="server_tool_use"||n.content_block.type;break;case"content_block_delta":if(n.delta.type==="text_delta")s.push({type:"text",data:{text:n.delta.text,index:n.index}});else if(n.delta.type==="input_json_delta"){const o=e.get(n.index);o&&(o.argumentsBuffer+=n.delta.partial_json)}else n.delta.type==="thinking_delta"?s.push({type:"thinking-delta",data:{text:n.delta.thinking,index:n.index}}):n.delta.type==="signature_delta"||n.delta.type;break;case"content_block_stop":const r=e.get(n.index);if(r){try{const o=JSON.parse(r.argumentsBuffer);s.push({type:"tool-call-complete",data:{index:n.index,id:r.id,name:r.name,arguments:o}})}catch(o){throw new Error(`Failed to parse tool call arguments for ${r.name}: ${o instanceof Error?o.message:String(o)}`)}e.delete(n.index)}break;default:console.warn("Unknown Anthropic stream event type")}return s}return l(t,"handleEvent"),{handleEvent:t}}l(pt,"createAnthropicStreamingAdapter");async function*ft(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.stop&&(c.stop_sequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop);const d={model:n,max_tokens:4096,messages:ue(s),...r&&{system:r},...o&&{tools:pe(o)},...c};i?.debug?.log(d);const f=pt();try{const p=await t.messages.create({...d,stream:!0});for await(const _ of p){const h=f.handleEvent(_);for(const w of h)yield w}}catch(p){yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(ft,"createStreamingRequest$3");const A={CLAUDE_SONNET_4_5_20250929:"claude-sonnet-4-5-20250929",CLAUDE_SONNET_4_5_LATEST:"claude-sonnet-4-5",CLAUDE_HAIKU_4_5:"claude-haiku-4-5",CLAUDE_OPUS_4_1_20250805:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_1_LATEST:"claude-opus-4-1",CLAUDE_OPUS_4_20250514:"claude-opus-4-20250514",CLAUDE_OPUS_4_LATEST:"claude-opus-4-0",CLAUDE_SONNET_4_20250514:"claude-sonnet-4-20250514",CLAUDE_SONNET_4_LATEST:"claude-sonnet-4-0",CLAUDE_3_7_SONNET_20250219:"claude-3-7-sonnet-20250219",CLAUDE_3_7_SONNET_LATEST:"claude-3-7-sonnet-latest",CLAUDE_3_5_SONNET_20241022:"claude-3-5-sonnet-20241022",CLAUDE_3_5_HAIKU_20241022:"claude-3-5-haiku-20241022",CLAUDE_3_5_HAIKU_LATEST:"claude-3-5-haiku-latest",CLAUDE_3_5_SONNET_20240620:"claude-3-5-sonnet-20240620"};A.CLAUDE_SONNET_4_5_20250929,A.CLAUDE_SONNET_4_5_LATEST,A.CLAUDE_HAIKU_4_5,A.CLAUDE_OPUS_4_1_20250805,A.CLAUDE_OPUS_4_1_LATEST,A.CLAUDE_OPUS_4_20250514,A.CLAUDE_OPUS_4_LATEST,A.CLAUDE_SONNET_4_20250514,A.CLAUDE_SONNET_4_LATEST,A.CLAUDE_3_7_SONNET_20250219,A.CLAUDE_3_7_SONNET_LATEST,A.CLAUDE_3_5_SONNET_20241022,A.CLAUDE_3_5_HAIKU_20241022,A.CLAUDE_3_5_HAIKU_LATEST,A.CLAUDE_3_5_SONNET_20240620;const de=A.CLAUDE_HAIKU_4_5,_e="anthropic";class me{static{l(this,"AnthropicProvider")}name=_e;client;model;constructor(t,n){this.model=n??de,this.client=new Ke({apiKey:t})}async createGenerationRequest(t){return await lt({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return ft({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function ge(e,t,n){const s={};return t&&(s.systemInstruction=t),e&&e.length>0&&(s.tools=e.map(r=>({functionDeclarations:[{name:r.name,description:r.description,parametersJsonSchema:F.toJSONSchema(r.schema)}]}))),n&&Object.assign(s,n),s}l(ge,"prepareConfig");function he(e){return e.map(dt).filter(t=>t!==void 0)}l(he,"convertAxleMessagesToGemini");function dt(e){switch(e.role){case"tool":return _t(e);case"assistant":return mt(e);case"user":return gt(e)}}l(dt,"convertMessage$3");function _t(e){return{role:"user",parts:e.content.map(t=>({functionResponse:{id:t.id??void 0,name:t.name,response:{output:t.content}}}))}}l(_t,"convertToolMessage$3");function mt(e){const t=[],n=e.content.filter(r=>r.type==="text");if(n.length>0){const r=n.map(o=>o.text).join("");r&&t.push({text:r})}const s=e.content.filter(r=>r.type==="tool-call");return s.length>0&&t.push(...s.map(r=>({functionCall:{id:r.id??void 0,name:r.name,args:r.parameters}}))),{role:"assistant",parts:t}}l(mt,"convertAssistantMessage$3");function gt(e){return typeof e.content=="string"?{role:"user",parts:[{text:e.content}]}:{role:"user",parts:e.content.map(ht).filter(n=>n!==null)}}l(gt,"convertUserMessage$3");function ht(e){return e.type==="text"||e.type==="instructions"?{text:e.type==="text"?e.text:e.instructions}:e.type==="file"&&(e.file.type==="image"||e.file.type==="document")?{inlineData:{mimeType:e.file.mimeType,data:e.file.base64}}:null}l(ht,"convertContentPart$3");function ye(e){switch(e){case R.STOP:return[!0,y.Stop];case R.MAX_TOKENS:return[!0,y.Length];case R.FINISH_REASON_UNSPECIFIED:case R.SAFETY:case R.RECITATION:case R.LANGUAGE:case R.OTHER:case R.BLOCKLIST:case R.PROHIBITED_CONTENT:case R.SPII:case R.MALFORMED_FUNCTION_CALL:case R.IMAGE_SAFETY:return[!1,y.Error]}}l(ye,"convertStopReason$1");async function yt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.max_tokens&&(c.maxOutputTokens=c.max_tokens,delete c.max_tokens),c.stop&&(c.stopSequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop),c.top_p!==void 0&&(c.topP=c.top_p,delete c.top_p);const d={contents:he(s),config:ge(o,r,c)};i?.debug?.log(d);let f;try{const p=await t.models.generateContent({model:n,...d});f=Et(p,{recorder:i})}catch(p){i?.error?.log(p),f=j(p)}return i?.debug?.log(f),f}l(yt,"createGenerationRequest$1");function Et(e,t){const{recorder:n}=t,s=e.usageMetadata.promptTokenCount,r=e.usageMetadata.totalTokenCount-s,o={in:s,out:r};if(!e)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:e};if(e.promptFeedback&&e.promptFeedback.blockReason)return{type:"error",error:{type:"Blocked",message:`Response blocked by Google AI: ${e.promptFeedback.blockReason}, ${e.promptFeedback.blockReasonMessage}`},usage:o,raw:e};if(!e.candidates||e.candidates.length===0)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:e};e.candidates.length>1&&n?.warn?.log(`We received ${e.candidates.length} response candidates`);const a=e.candidates[0],i=(a.content?.parts||[]).map(f=>f.text).filter(f=>f!==void 0).join(""),[c,d]=ye(a.finishReason);if(c){const f=[];if(i&&f.push({type:"text",text:i}),e.functionCalls)for(const p of e.functionCalls){if(typeof p.args!="object"||p.args===null||Array.isArray(p.args))throw new Error(`Invalid tool call arguments for ${p.name}: expected object, got ${typeof p.args}`);f.push({type:"tool-call",id:p.id,name:p.name,parameters:p.args})}return{type:"success",id:e.responseId,model:e.modelVersion,role:"assistant",finishReason:e.functionCalls?y.FunctionCall:d,content:f,text:$(f)??"",usage:o,raw:e}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${d}`},usage:o,raw:e}}l(Et,"fromModelResponse$3");function It(){let e=0,t=-1,n="",s="",r=0,o=0;function a(u){const i=[];n||(n=u.responseId||`gemini-${Date.now()}`,s=u.modelVersion||"gemini",i.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}})),u.usageMetadata&&(r=u.usageMetadata.promptTokenCount||0,o=(u.usageMetadata.totalTokenCount||0)-r);const c=u.candidates?.[0];if(!c)return i;const d=c.content?.parts||[];for(const f of d){const p="thought"in f&&f.thought===!0;if(p&&f.text?(t===-1&&(t=e+1,i.push({type:"thinking-start",data:{index:t}})),i.push({type:"thinking-delta",data:{index:t,text:f.text}})):f.text&&!p&&i.push({type:"text",data:{text:f.text,index:e}}),f.functionCall){e++;const _=`tool-${e}`;i.push({type:"tool-call-start",data:{index:e,id:_,name:f.functionCall.name}}),i.push({type:"tool-call-complete",data:{index:e,id:_,name:f.functionCall.name,arguments:f.functionCall.args}})}}if(c.finishReason){const[f,p]=ye(c.finishReason);f?i.push({type:"complete",data:{finishReason:p,usage:{in:r,out:o}}}):i.push({type:"error",data:{type:"FinishReasonError",message:`Unexpected finish reason: ${c.finishReason}`,usage:{in:r,out:o},raw:u}})}return i}return l(a,"handleChunk"),{handleChunk:a}}l(It,"createGeminiStreamingAdapter");async function*wt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=u?{...u}:{};c.max_tokens&&(c.maxOutputTokens=c.max_tokens,delete c.max_tokens),c.stop&&(c.stopSequences=Array.isArray(c.stop)?c.stop:[c.stop],delete c.stop),c.top_p!==void 0&&(c.topP=c.top_p,delete c.top_p);const d={contents:he(s),config:ge(o,r,c)};i?.debug?.log(d);const f=It();try{const p=await t.models.generateContentStream({model:n,...d});for await(const _ of p){const h=f.handleChunk(_);for(const w of h)yield w}}catch(p){i?.error?.log(p),yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(wt,"createStreamingRequest$2");const g={GEMINI_2_5_PRO:"gemini-2.5-pro",GEMINI_2_5_FLASH:"gemini-2.5-flash",GEMINI_2_5_FLASH_PREVIEW_05_20:"gemini-2.5-flash-preview-05-20",GEMINI_2_5_FLASH_LITE:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_PREVIEW_06_17:"gemini-2.5-flash-lite-preview-06-17",GEMINI_2_5_FLASH_LIVE_PREVIEW:"gemini-live-2.5-flash-preview",GEMINI_2_5_FLASH_PREVIEW_NATIVE_AUDIO_DIALOG:"gemini-2.5-flash-preview-native-audio-dialog",GEMINI_2_5_FLASH_EXP_NATIVE_AUDIO_THINKING_DIALOG:"gemini-2.5-flash-exp-native-audio-thinking-dialog",GEMINI_2_5_FLASH_IMAGE_PREVIEW:"gemini-2.5-flash-image-preview",GEMINI_2_5_FLASH_PREVIEW_TTS:"gemini-2.5-flash-preview-tts",GEMINI_2_5_PRO_PREVIEW_TTS:"gemini-2.5-pro-preview-tts",GEMINI_2_0_FLASH:"gemini-2.0-flash",GEMINI_2_0_FLASH_001:"gemini-2.0-flash-001",GEMINI_2_0_FLASH_EXP:"gemini-2.0-flash-exp",GEMINI_2_0_FLASH_PREVIEW_IMAGE_GENERATION:"gemini-2.0-flash-preview-image-generation",GEMINI_2_0_FLASH_LITE:"gemini-2.0-flash-lite",GEMINI_2_0_FLASH_LITE_001:"gemini-2.0-flash-lite-001",GEMINI_2_0_FLASH_LIVE_001:"gemini-2.0-flash-live-001",GEMINI_1_5_PRO:"gemini-1.5-pro",GEMINI_1_5_PRO_LATEST:"gemini-1.5-pro-latest",GEMINI_1_5_PRO_001:"gemini-1.5-pro-001",GEMINI_1_5_PRO_002:"gemini-1.5-pro-002",GEMINI_1_5_FLASH:"gemini-1.5-flash",GEMINI_1_5_FLASH_LATEST:"gemini-1.5-flash-latest",GEMINI_1_5_FLASH_001:"gemini-1.5-flash-001",GEMINI_1_5_FLASH_002:"gemini-1.5-flash-002",GEMINI_1_5_FLASH_8B:"gemini-1.5-flash-8b",GEMINI_1_5_FLASH_8B_LATEST:"gemini-1.5-flash-8b-latest",GEMINI_1_5_FLASH_8B_001:"gemini-1.5-flash-8b-001",GEMMA_3N_E4B_IT:"gemma-3n-e4b-it",GEMMA_3_1B_IT:"gemma-3-1b-it",GEMMA_3_4B_IT:"gemma-3-4b-it",GEMMA_3_12B_IT:"gemma-3-12b-it",GEMMA_3_27B_IT:"gemma-3-27b-it",LEARNLM_2_0_FLASH_EXPERIMENTAL:"learnlm-2.0-flash-experimental",EMBEDDING_001:"embedding-001",TEXT_EMBEDDING_004:"text-embedding-004"};g.GEMINI_2_5_PRO,g.GEMINI_2_5_FLASH,g.GEMINI_2_5_FLASH_PREVIEW_05_20,g.GEMINI_2_5_FLASH_LITE,g.GEMINI_2_5_FLASH_LITE_PREVIEW_06_17,g.GEMINI_2_5_FLASH_LIVE_PREVIEW,g.GEMINI_2_5_FLASH_PREVIEW_NATIVE_AUDIO_DIALOG,g.GEMINI_2_5_FLASH_EXP_NATIVE_AUDIO_THINKING_DIALOG,g.GEMINI_2_5_FLASH_IMAGE_PREVIEW,g.GEMINI_2_0_FLASH,g.GEMINI_2_0_FLASH_001,g.GEMINI_2_0_FLASH_EXP,g.GEMINI_2_0_FLASH_PREVIEW_IMAGE_GENERATION,g.GEMINI_2_0_FLASH_LITE,g.GEMINI_2_0_FLASH_LITE_001,g.GEMINI_2_0_FLASH_LIVE_001,g.GEMINI_1_5_PRO,g.GEMINI_1_5_PRO_LATEST,g.GEMINI_1_5_PRO_001,g.GEMINI_1_5_PRO_002,g.GEMINI_1_5_FLASH,g.GEMINI_1_5_FLASH_LATEST,g.GEMINI_1_5_FLASH_001,g.GEMINI_1_5_FLASH_002,g.GEMINI_1_5_FLASH_8B,g.GEMINI_1_5_FLASH_8B_LATEST,g.GEMINI_1_5_FLASH_8B_001,g.GEMMA_3N_E4B_IT,g.GEMMA_3_1B_IT,g.GEMMA_3_4B_IT,g.GEMMA_3_12B_IT,g.GEMMA_3_27B_IT,g.LEARNLM_2_0_FLASH_EXPERIMENTAL;const Ee=g.GEMINI_2_5_FLASH,Ie="Gemini";class we{static{l(this,"GeminiProvider")}name=Ie;client;model;constructor(t,n){this.model=n??Ee,this.client=new ze({apiKey:t})}async createGenerationRequest(t){return await yt({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return wt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function Te(e){return e.map(Tt).flat(1)}l(Te,"convertAxleMessagesToOllama");function xe(e){return e&&e.length>0?e.map(t=>({type:"function",function:{name:t.name,description:t.description,parameters:F.toJSONSchema(t.schema)}})):void 0}l(xe,"convertToolDefToOllama");function Tt(e){switch(e.role){case"tool":return xt(e);case"assistant":return St(e);default:return At(e)}}l(Tt,"convertMessage$2");function xt(e){return e.content.map(t=>({role:"tool",tool_call_id:t.id,content:t.content}))}l(xt,"convertToolMessage$2");function St(e){const t=e.content.filter(r=>r.type==="tool-call"),n=e.content.filter(r=>r.type==="text"),s=t.length>0?t.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:r.parameters}})):void 0;return{role:e.role,content:n.map(r=>r.text).join(""),...s&&{toolCalls:s}}}l(St,"convertAssistantMessage$2");function At(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=[],n=[];for(const s of e.content){const r=bt(s);r.text!==null&&t.push(r.text),r.image!==null&&n.push(r.image)}return{role:e.role,content:t.join(""),...n.length>0&&{images:n}}}}l(At,"convertUserMessage$2");function bt(e){return e.type==="text"||e.type==="instructions"?{text:e.type==="text"?e.text:e.instructions,image:null}:e.type==="file"&&e.file.type==="image"?{text:null,image:e.file.base64}:{text:null,image:null}}l(bt,"convertContentPart$2");async function Ot(e){const{url:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=xe(o),d=u?{...u}:{temperature:.7};d.max_tokens&&(d.num_predict=d.max_tokens,delete d.max_tokens);const f={model:n,messages:Te(s),stream:!1,options:d,...r&&{system:r},...c&&{tools:c}};i?.debug?.log(f);let p;try{const _=await fetch(`${t}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);const h=await _.json();p=Rt(h)}catch(_){i?.error?.log("Error fetching Ollama response:",_),p=j(_)}return i?.debug?.log(p),p}l(Ot,"createGenerationRequest");function Rt(e){if(e.done_reason==="stop"&&e.message){const t=[];if(e.message.content!==void 0&&t.push({type:"text",text:e.message.content}),e.message.tool_calls)for(const s of e.message.tool_calls){if(typeof s.function.arguments!="object"||s.function.arguments===null||Array.isArray(s.function.arguments))throw new Error(`Invalid tool call arguments for ${s.function.name}: expected object, got ${typeof s.function.arguments}`);t.push({type:"tool-call",id:s.id,name:s.function.name,parameters:s.function.arguments})}const n=t.some(s=>s.type==="tool-call");return{type:"success",id:`ollama-${Date.now()}`,model:e.model,role:"assistant",finishReason:n?y.FunctionCall:y.Stop,content:t,text:$(t)??"",usage:{in:e.prompt_eval_count||0,out:e.eval_count||0},raw:e}}return{type:"error",error:{type:"OllamaError",message:"Unexpected error from Ollama"},usage:{in:0,out:0},raw:e}}l(Rt,"fromModelResponse$2");function Pt(){let e="",t=0,n=-1,s=0;function r(o){const a=[];if(e||(e=`ollama-${Date.now()}`,a.push({type:"start",id:e,data:{model:o.model,timestamp:Date.now()}})),o.message?.thinking&&(n===-1&&(n=t+1,a.push({type:"thinking-start",data:{index:n}})),a.push({type:"thinking-delta",data:{index:n,text:o.message.thinking}})),o.message?.content&&a.push({type:"text",data:{text:o.message.content,index:t}}),o.message?.tool_calls)for(const u of o.message.tool_calls){s++;const i=u.id||`tool-${s}`;if(typeof u.function.arguments!="object"||u.function.arguments===null||Array.isArray(u.function.arguments))throw new Error(`Invalid tool call arguments for ${u.function.name}: expected object, got ${typeof u.function.arguments}`);a.push({type:"tool-call-start",data:{index:s,id:i,name:u.function.name}}),a.push({type:"tool-call-complete",data:{index:s,id:i,name:u.function.name,arguments:u.function.arguments}})}if(o.done){const u=kt(o.done_reason);a.push({type:"complete",data:{finishReason:u,usage:{in:o.prompt_eval_count||0,out:o.eval_count||0}}})}return a}return l(r,"handleChunk"),{handleChunk:r}}l(Pt,"createOllamaStreamingAdapter");function kt(e){switch(e){case"stop":return y.Stop;case"length":return y.Length;default:return y.Stop}}l(kt,"convertStopReason");async function*Nt(e){const{url:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=xe(o),d=u?{...u}:{temperature:.7};d.max_tokens&&(d.num_predict=d.max_tokens,delete d.max_tokens);const f={model:n,messages:Te(s),stream:!0,options:d,...r&&{system:r},...c&&{tools:c}};i?.debug?.log(f);const p=Pt();try{const _=await fetch(`${t}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(f)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);if(!_.body)throw new Error("Response body is null");const h=_.body.getReader(),w=new TextDecoder;let b="";for(;;){const{done:C,value:L}=await h.read();if(C)break;b+=w.decode(L,{stream:!0});const k=b.split(`
|
|
4
|
-
`);b=k.pop()||"";for(const M of k)if(M.trim())try{const O=JSON.parse(M),D=p.handleChunk(O);for(const N of D)yield N}catch(O){i?.error?.log("Error parsing Ollama stream chunk:",O,M)}}}catch(_){i?.error?.log("Error in Ollama streaming request:",_),yield{type:"error",data:{type:"STREAMING_ERROR",message:_ instanceof Error?_.message:String(_),raw:_}}}}l(Nt,"createStreamingRequest$1");const Se="http://localhost:11434",Mt="Ollama";class Ae{static{l(this,"OllamaProvider")}name="Ollama";url;model;recorder;constructor(t,n){this.url=n||Se,this.model=t}async createGenerationRequest(t){return await Ot({url:this.url,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return Nt({url:this.url,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}function be(e){if(e&&e.length>0)return e.map(t=>{const n=F.toJSONSchema(t.schema);return{type:"function",function:{name:t.name,description:t.description,parameters:n}}})}l(be,"toModelTools");function Oe(e,t){const n=e.map($t).flat(1);return t?[{role:"system",content:t},...n]:n}l(Oe,"convertAxleMessagesToChatCompletion");function $t(e){switch(e.role){case"tool":return Gt(e);case"assistant":return Ct(e);default:return Lt(e)}}l($t,"convertMessage$1");function Gt(e){return e.content.map(t=>({role:"tool",tool_call_id:t.id,content:t.content}))}l(Gt,"convertToolMessage$1");function Ct(e){const t=e.content.filter(r=>r.type==="tool-call"),n=e.content.filter(r=>r.type==="text"),s=t.length>0?t.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:JSON.stringify(r.parameters)}})):void 0;return{role:e.role,content:n.map(r=>r.text).join(""),...s&&{tool_calls:s}}}l(Ct,"convertAssistantMessage$1");function Lt(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=e.content.map(vt).filter(n=>n!==null);return{role:e.role,content:t}}}l(Lt,"convertUserMessage$1");function vt(e){if(e.type==="text"||e.type==="instructions")return{type:"text",text:e.type==="text"?e.text:e.instructions};if(e.type==="file"){if(e.file.type==="image")return{type:"image_url",image_url:{url:`data:${e.file.mimeType};base64,${e.file.base64}`}};if(e.file.type==="document")return{type:"file",file:{filename:e.file.name,file_data:`data:${e.file.mimeType};base64,${e.file.base64}`}}}return null}l(vt,"convertContentPart$1");async function Dt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a;let c=be(o);const d={model:n,messages:Oe(s,r),...c&&{tools:c},...u};i?.debug?.log(d);let f;try{const p=await t.chat.completions.create(d);f=Ft(p)}catch(p){i?.error?.log(p),f=j(p)}return i?.debug?.log(f),f}l(Dt,"createGenerationRequestWithChatCompletion");function Ft(e){if(e.choices.length>0){const t=e.choices[0],n=[];if(t.message.content&&n.push({type:"text",text:t.message.content}),t.message.tool_calls){for(const s of t.message.tool_calls)if(s.type==="function")try{n.push({type:"tool-call",id:s.id,name:s.function.name,parameters:JSON.parse(s.function.arguments)})}catch(r){throw new Error(`Failed to parse tool call arguments for ${s.function.name}: ${r instanceof Error?r.message:String(r)}`)}}return{type:"success",id:e.id,model:e.model,role:t.message.role,finishReason:te(t.finish_reason),content:n,text:$(n)??"",usage:{in:e.usage?.prompt_tokens??0,out:e.usage?.completion_tokens??0},raw:e}}return{type:"error",error:{type:"undetermined",message:"Unexpected response from OpenAI"},usage:{in:e.usage?.prompt_tokens??0,out:e.usage?.completion_tokens??0},raw:e}}l(Ft,"fromModelResponse$1");function Ut(){const e=new Map;let t=0,n="",s="";function r(o){const a=[],u=o.choices[0];if(!u)return a;n||(n=o.id,s=o.model,a.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}}));const i=u.delta;if(i.content&&a.push({type:"text",data:{text:i.content,index:t}}),i.tool_calls)for(const c of i.tool_calls){const d=c.index;if(!e.has(d)){const p=t+d+1,_=c.id||`tool-${p}`;e.set(d,{id:_,name:c.function?.name||"",argumentsBuffer:""}),a.push({type:"tool-call-start",data:{index:p,id:_,name:c.function?.name||""}})}const f=e.get(d);c.id&&(f.id=c.id),c.function?.name&&(f.name=c.function.name),c.function?.arguments&&(f.argumentsBuffer+=c.function.arguments)}if(u.finish_reason){for(const[d,f]of e){const p=t+d+1;try{const _=JSON.parse(f.argumentsBuffer);a.push({type:"tool-call-complete",data:{index:p,id:f.id,name:f.name,arguments:_}})}catch(_){throw new Error(`Failed to parse tool call arguments for ${f.name}: ${_ instanceof Error?_.message:String(_)}`)}}const c=jt(u.finish_reason);a.push({type:"complete",data:{finishReason:c,usage:o.usage?{in:o.usage.prompt_tokens,out:o.usage.completion_tokens}:{in:0,out:0}}})}return a}return l(r,"handleChunk"),{handleChunk:r}}l(Ut,"createChatCompletionStreamingAdapter");function jt(e){switch(e){case"stop":return y.Stop;case"length":return y.Length;case"tool_calls":case"function_call":return y.FunctionCall;case"content_filter":return y.Error;default:return y.Stop}}l(jt,"convertFinishReason");function Wt(){let e="",t="",n=0,s=0,r=0;const o=new Map,a=new Set;function u(i){const c=[];switch(i.type){case"response.created":{e=i.response.id||`openai-${Date.now()}`,t=i.response.model,c.push({type:"start",id:e,data:{model:t,timestamp:Date.now()}});break}case"response.output_text.delta":{c.push({type:"text",data:{text:i.delta,index:n}});break}case"response.function_call_arguments.delta":{const d=i.item_id;o.has(d)||(s++,o.set(d,{id:d,name:"",argumentsBuffer:""}),c.push({type:"tool-call-start",data:{index:s,id:d,name:""}}));const f=o.get(d);f.argumentsBuffer+=i.delta;break}case"response.function_call_arguments.done":{const d=i.item_id;if(o.get(d)){try{const p=JSON.parse(i.arguments);c.push({type:"tool-call-complete",data:{index:s,id:d,name:i.name,arguments:p}})}catch(p){throw new Error(`Failed to parse function call arguments for ${i.name}: ${p instanceof Error?p.message:String(p)}`)}o.delete(d)}break}case"response.completed":{const d=i.response.usage;c.push({type:"complete",data:{finishReason:i.response.incomplete_details?y.Error:y.Stop,usage:{in:d?.input_tokens||0,out:d?.output_tokens||0}}});break}case"response.failed":{c.push({type:"error",data:{type:"RESPONSES_API_ERROR",message:`Response failed: ${i.response.status}`,raw:i}});break}case"response.output_item.added":{if(i.item?.type==="reasoning"){const d=i.item.id;a.add(d),r++,c.push({type:"thinking-start",data:{index:r}})}break}case"response.reasoning_text.delta":{i.delta&&c.push({type:"thinking-delta",data:{index:r,text:i.delta}});break}case"response.reasoning_summary_text.delta":{i.delta&&c.push({type:"thinking-delta",data:{index:r,text:i.delta}});break}case"response.output_item.done":{if(i.item?.type==="reasoning"){const d=i.item.id;a.delete(d)}break}}return c}return l(u,"handleEvent"),{handleEvent:u}}l(Wt,"createResponsesAPIStreamingAdapter");const m={GPT_5:"gpt-5",GPT_5_MINI:"gpt-5-mini",GPT_5_NANO:"gpt-5-nano",GPT_5_CHAT_LATEST:"gpt-5-chat-latest",GPT_5_PRO:"gpt-5-pro",GPT_5_CODEX:"gpt-5-codex",GPT_4_5_PREVIEW:"gpt-4.5-preview",GPT_4_5_PREVIEW_2025_02_27:"gpt-4.5-preview-2025-02-27",GPT_4_1:"gpt-4.1",GPT_4_1_2025_04_14:"gpt-4.1-2025-04-14",GPT_4_1_MINI:"gpt-4.1-mini",GPT_4_1_MINI_2025_04_14:"gpt-4.1-mini-2025-04-14",GPT_4_1_NANO:"gpt-4.1-nano",GPT_4_1_NANO_2025_04_14:"gpt-4.1-nano-2025-04-14",GPT_4O:"gpt-4o",GPT_4O_2024_05_13:"gpt-4o-2024-05-13",GPT_4O_2024_08_06:"gpt-4o-2024-08-06",GPT_4O_2024_11_20:"gpt-4o-2024-11-20",GPT_4O_MINI:"gpt-4o-mini",GPT_4O_MINI_2024_07_18:"gpt-4o-mini-2024-07-18",GPT_4O_AUDIO_PREVIEW:"gpt-4o-audio-preview",GPT_4O_AUDIO_PREVIEW_2024_10_01:"gpt-4o-audio-preview-2024-10-01",GPT_4O_AUDIO_PREVIEW_2024_12_17:"gpt-4o-audio-preview-2024-12-17",GPT_4O_AUDIO_PREVIEW_2025_06_03:"gpt-4o-audio-preview-2025-06-03",GPT_4O_MINI_AUDIO_PREVIEW:"gpt-4o-mini-audio-preview",GPT_4O_MINI_AUDIO_PREVIEW_2024_12_17:"gpt-4o-mini-audio-preview-2024-12-17",GPT_REALTIME:"gpt-realtime",GPT_REALTIME_MINI:"gpt-realtime-mini",GPT_4O_REALTIME_PREVIEW:"gpt-4o-realtime-preview",GPT_4O_REALTIME_PREVIEW_2024_10_01:"gpt-4o-realtime-preview-2024-10-01",GPT_4O_REALTIME_PREVIEW_2024_12_17:"gpt-4o-realtime-preview-2024-12-17",GPT_4O_REALTIME_PREVIEW_2025_06_03:"gpt-4o-realtime-preview-2025-06-03",GPT_4O_MINI_REALTIME_PREVIEW:"gpt-4o-mini-realtime-preview",GPT_4O_MINI_REALTIME_PREVIEW_2024_12_17:"gpt-4o-mini-realtime-preview-2024-12-17",GPT_4O_SEARCH_PREVIEW:"gpt-4o-search-preview",GPT_4O_SEARCH_PREVIEW_2025_03_11:"gpt-4o-search-preview-2025-03-11",GPT_4O_MINI_SEARCH_PREVIEW:"gpt-4o-mini-search-preview",GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11:"gpt-4o-mini-search-preview-2025-03-11",GPT_4O_TRANSCRIBE:"gpt-4o-transcribe",GPT_4O_MINI_TRANSCRIBE:"gpt-4o-mini-transcribe",GPT_4O_MINI_TTS:"gpt-4o-mini-tts",GPT_IMAGE_1:"gpt-image-1",GPT_IMAGE_1_MINI:"gpt-image-1-mini",O4_MINI:"o4-mini",O4_MINI_2025_04_16:"o4-mini-2025-04-16",O3:"o3",O3_PRO:"o3-pro",O3_MINI:"o3-mini",O3_MINI_2025_01_31:"o3-mini-2025-01-31",O1_PRO:"o1-pro",O1_PRO_2025_03_19:"o1-pro-2025-03-19",O1:"o1",O1_2024_12_17:"o1-2024-12-17",O1_MINI:"o1-mini",O1_MINI_2024_09_12:"o1-mini-2024-09-12",O1_PREVIEW:"o1-preview",O1_PREVIEW_2024_09_12:"o1-preview-2024-09-12",GPT_OSS_120B:"gpt-oss-120b",GPT_OSS_7B:"gpt-oss-7b",SORA_2:"sora-2",SORA_2025_05_02:"sora-2025-05-02",CODEX_MINI:"codex-mini",COMPUTER_USE_PREVIEW:"computer-use-preview"},Re=[m.GPT_5,m.GPT_5_MINI,m.GPT_5_NANO,m.GPT_5_CHAT_LATEST,m.GPT_5_PRO,m.GPT_5_CODEX,m.GPT_4_1,m.GPT_4_1_2025_04_14,m.GPT_4_1_MINI,m.GPT_4_1_MINI_2025_04_14,m.GPT_4_1_NANO,m.GPT_4_1_NANO_2025_04_14,m.GPT_4O,m.GPT_4O_2024_05_13,m.GPT_4O_2024_08_06,m.GPT_4O_2024_11_20,m.GPT_4O_MINI,m.GPT_4O_MINI_2024_07_18,m.GPT_4O_AUDIO_PREVIEW,m.GPT_4O_AUDIO_PREVIEW_2024_10_01,m.GPT_4O_AUDIO_PREVIEW_2024_12_17,m.GPT_4O_AUDIO_PREVIEW_2025_06_03,m.GPT_4O_MINI_AUDIO_PREVIEW,m.GPT_4O_MINI_AUDIO_PREVIEW_2024_12_17,m.GPT_REALTIME,m.GPT_REALTIME_MINI,m.GPT_4O_REALTIME_PREVIEW,m.GPT_4O_REALTIME_PREVIEW_2024_10_01,m.GPT_4O_REALTIME_PREVIEW_2024_12_17,m.GPT_4O_REALTIME_PREVIEW_2025_06_03,m.GPT_4O_MINI_REALTIME_PREVIEW,m.GPT_4O_MINI_REALTIME_PREVIEW_2024_12_17,m.GPT_4O_SEARCH_PREVIEW,m.GPT_4O_SEARCH_PREVIEW_2025_03_11,m.GPT_4O_MINI_SEARCH_PREVIEW,m.GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11,m.GPT_4O_TRANSCRIBE,m.GPT_4O_MINI_TRANSCRIBE,m.O4_MINI,m.O4_MINI_2025_04_16,m.O3,m.O3_PRO,m.O3_MINI,m.O3_MINI_2025_01_31],Pe=m.GPT_5;function ke(e){if(e&&e.length>0)return e.map(t=>{const n=F.toJSONSchema(t.schema);return{type:"function",strict:!0,name:t.name,description:t.description,parameters:n}})}l(ke,"prepareTools");function Ne(e){return e.map(Ht).flat(1)}l(Ne,"convertAxleMessageToResponseInput");function Ht(e){switch(e.role){case"tool":return Bt(e);case"assistant":return Vt(e);default:return qt(e)}}l(Ht,"convertMessage");function Bt(e){return e.content.map(t=>({type:"function_call_output",call_id:t.id,output:t.content}))}l(Bt,"convertToolMessage");function Vt(e){const t=[],n=e.content.filter(a=>a.type==="thinking");if(n.length>0)for(const a of n)t.push({type:"reasoning",id:`reasoning_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,summary:[{type:"summary_text",text:a.text}]});const s=$(e.content),r=e.content.filter(a=>a.type==="tool-call"),o=r.length>0?r.map(a=>({type:"function",id:a.id,function:{name:a.name,arguments:JSON.stringify(a.parameters)}})):void 0;return(s||o)&&t.push({role:e.role,content:s,...o&&{toolCalls:o}}),t}l(Vt,"convertAssistantMessage");function qt(e){if(typeof e.content=="string")return{role:e.role,content:e.content};{const t=e.content.map(Jt).filter(n=>n!==null);return{role:e.role,content:t}}}l(qt,"convertUserMessage");function Jt(e){if(e.type==="text")return{type:"input_text",text:e.text};if(e.type==="file"){if(e.file.type==="image")return{type:"input_image",image_url:`data:${e.file.mimeType};base64,${e.file.base64}`,detail:"auto"};if(e.file.type==="document")return{type:"input_file",filename:e.file.path,file_data:`data:${e.file.mimeType};base64,${e.file.base64}`}}return e.type==="thinking",null}l(Jt,"convertContentPart");async function*Kt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a;Re.includes(n)?yield*Xt({client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}):yield*zt({client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u})}l(Kt,"createStreamingRequest");async function*zt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a,c=be(o),d={model:n,messages:Oe(s,r),...c&&{tools:c},...u,stream:!0};i?.debug?.log(d);const f=Ut();try{const p=await t.chat.completions.create(d);for await(const _ of p){const h=f.handleChunk(_);for(const w of h)yield w}}catch(p){i?.error?.log(p),yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(zt,"createChatCompletionStream");async function*Xt(e){const{client:t,model:n,messages:s,system:r,tools:o,runtime:a,options:u}=e,{recorder:i}=a;console.log(u);const c=ke(o),d={model:n,input:Ne(s),...r&&{instructions:r},stream:!0,...c?{tools:c}:{},...u};i?.debug?.log(d);const f=Wt();try{const p=t.responses.stream(d);for await(const _ of p){const h=f.handleEvent(_);for(const w of h)yield w}}catch(p){i?.error?.log(p),yield{type:"error",data:{type:"STREAMING_ERROR",message:p instanceof Error?p.message:String(p),raw:p}}}}l(Xt,"createResponsesAPIStream");async function Zt(e){const{client:t,model:n,messages:s,system:r,tools:o,context:a,options:u}=e,{recorder:i}=a,c=ke(o),d={model:n,input:Ne(s),...r&&{instructions:r},...c?{tools:c}:{},...u};i?.debug?.log(d);let f;try{const p=await t.responses.create(d);f=Yt(p)}catch(p){i?.error?.log(p),f=j(p)}return i?.debug?.log(f),f}l(Zt,"createGenerationRequestWithResponsesAPI");function Yt(e){if(e.error)return{type:"error",error:{type:e.error.code||"undetermined",message:e.error.message||"Response generation failed"},usage:{in:e.usage?.input_tokens??0,out:e.usage?.output_tokens??0},raw:e};const t=e.output?.filter(r=>r.type==="reasoning")?.map(r=>r),n=[];if(t&&t.length>0)for(const r of t){const o=r.summary?.[0]?.text||r.content?.[0]?.text||"";(o||r.encrypted_content)&&n.push({type:"thinking",text:o,...r.encrypted_content&&{encrypted:r.encrypted_content}})}e.output_text&&n.push({type:"text",text:e.output_text});const s=e.output?.filter(r=>r.type==="function_call");if(s&&s.length>0)for(const r of s){const o=r;try{n.push({type:"tool-call",id:o.id||"",name:o.name||"",parameters:o.arguments?JSON.parse(o.arguments):{}})}catch(a){throw new Error(`Failed to parse tool call arguments for ${o.name}: ${a instanceof Error?a.message:String(a)}`)}}return{type:"success",id:e.id,model:e.model||"",role:"assistant",finishReason:e.incomplete_details?y.Error:y.Stop,content:n,text:$(n)??"",usage:{in:e.usage?.input_tokens??0,out:e.usage?.output_tokens??0},raw:e}}l(Yt,"fromModelResponse");const Me="OpenAI";class $e{static{l(this,"OpenAIProvider")}name=Me;client;model;constructor(t,n){this.model=n||Pe,this.client=new Xe({apiKey:t})}async createGenerationRequest(t){return Re.includes(this.model)?await Zt({client:this.client,model:this.model,...t}):await Dt({client:this.client,model:this.model,...t})}createStreamingRequest(t){const{messages:n,system:s,tools:r,context:o,options:a}=t;return Kt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:a})}}async function Ge(e){const{provider:t,messages:n,system:s,tools:r,recorder:o,options:a}=e;return t.createGenerationRequest({messages:n,system:s,tools:r,context:{recorder:o},options:a})}l(Ge,"generate");function Qt(e,t){if(!t||Object.keys(t).length===0)throw new S(`The provider ${e} is not configured. Please check your configuration.`);switch(e){case"openai":return new $e(t["api-key"],t.model);case"anthropic":return new me(t["api-key"],t.model);case"gemini":return new we(t["api-key"],t.model);case"ollama":{const n=t;return new Ae(n.model,n.url)}default:throw new S("The provider is unsupported")}}l(Qt,"getProvider");class oe extends S{static{l(this,"TaskError")}constructor(t,n){super(t,{code:"TASK_ERROR",id:n?.id,details:{taskType:n?.taskType,taskIndex:n?.taskIndex,...n?.details},cause:n?.cause}),Object.setPrototypeOf(this,oe.prototype)}}const E={Running:"running",Success:"success",PartialSuccess:"partialSuccess",Fail:"fail"};var x=(e=>(e[e.Trace=10]="Trace",e[e.Debug=20]="Debug",e[e.Info=30]="Info",e[e.Warn=40]="Warn",e[e.Error=50]="Error",e[e.Fatal=60]="Fatal",e))(x||{});class en{static{l(this,"Recorder")}instanceId=crypto.randomUUID();currentLevel=x.Info;logs=[];writers=[];_debug;_info;_warn;_error;constructor(){this.buildMethods()}buildMethods(){this._debug=x.Debug>=this.currentLevel?this.createLoggingFunction(x.Debug):null,this._info=x.Info>=this.currentLevel?this.createLoggingFunction(x.Info):null,this._warn=x.Warn>=this.currentLevel?this.createLoggingFunction(x.Warn):null,this._error=this.createLoggingFunction(x.Error)}set level(t){this.currentLevel=t,this.buildMethods()}get level(){return this.currentLevel}get info(){return this._info}get warn(){return this._warn}get error(){return this._error}get debug(){return this._debug}subscribe(t){this.writers.includes(t)||this.writers.push(t)}unsubscribe(t){const n=this.writers.indexOf(t);n!==-1&&this.writers.splice(n,1)}publish(t){this.logs.push(t);for(const n of this.writers)n.handleEvent(t)}logFunction(t,n,...s){let r=s.map(o=>typeof o=="string"?{message:o}:o instanceof Error?Ze(o):o);this.publish({level:t,time:Date.now(),kind:n,payload:r})}createLoggingFunction(t){return{log:this.logFunction.bind(this,t,"body"),heading:{log:this.logFunction.bind(this,t,"heading")}}}getLogs(t=x.Info){return this.logs.filter(n=>n.level>=t)}async shutdown(){for(const t of this.writers)typeof t.flush=="function"&&await t.flush()}}async function tn(e,t){const{defaults:n,tag:s}=t;let r=null,o="";if(e)try{o=ee(e),r=await U(o,{encoding:"utf-8"})}catch{throw new Error(`${s} not found, see --help for details`)}else{for(const a of n.formats)try{o=ee(n.name+"."+a),r=await U(o,{encoding:"utf-8"});break}catch{continue}if(r===null)throw new Error(`${s} not found, see --help for details`)}return{content:r,format:o.split(".").pop()??""}}l(tn,"searchAndLoadFile");async function nn(e,t){let n="";for(const s of e){const r=await ie(s);t?.debug?.log(`many-files parser. For glob "${s}", found ${r.length} files.`);const o=await Promise.all(r.map(async a=>{const u=await U(a,"utf-8");return a+`:
|
|
5
|
-
`+u}));n+=o.join(`
|
|
6
|
-
`)}return n}l(nn,"loadManyFiles");function sn(e,t){e=e.replace("**/*","**");const n=/(?<asterisks>\*{1,2})(?<extension>\.[^\\/]+)?/,s=e.match(n);if(s){let r="";return s.groups?.asterisks.length==1?r+=t.stem:r+=t.dir+t.stem,s.groups?.extension?r+=s.groups.extension:r+=t.ext,e.replace(s[0],r)}return e}l(sn,"replaceFilePattern");function rn(e){const t=/(?<name>[^\\/]+)(?<extension>\.[^\\/]+)$/,n=e.match(t);return n&&n.length>0&&n.groups?{abs:e,dir:e.replace(n[0],""),ext:n.groups.extension,stem:n.groups.name,name:n[0]}:null}l(rn,"pathToComponents");async function on(e){const t=ot(e);await rt(t,{recursive:!0})}l(on,"ensureDirectoryExistence");async function an({filePath:e,content:t}){await on(e),await st(e,t)}l(an,"writeFileWithDirectories");const B=[".jpg",".jpeg",".png",".gif",".webp",".bmp",".tiff"],V=[".pdf"],q=[".txt",".md",".markdown"],Ce=20*1024*1024;function cn(e){return e.type==="text"}l(cn,"isTextFileInfo");function ln(e){return e.type==="image"||e.type==="document"}l(ln,"isBase64FileInfo");function un(e){const t=ce(e).toLowerCase();if(q.includes(t))return"utf-8";if(B.includes(t)||V.includes(t))return"base64";{const n=[...q,...B,...V];throw new Error(`Unsupported file type: ${t}. Supported types: ${n.join(", ")}`)}}l(un,"getEncodingForFile");async function J(e,t){const n=ee(e);try{await tt(n)}catch{throw new Error(`File not found: ${e}`)}const s=await nt(n);if(s.size>Ce)throw new Error(`File too large: ${s.size} bytes. Maximum allowed: ${Ce} bytes`);const r=ce(n).toLowerCase(),o=n.split("/").pop()||"";if((t||un(n))==="utf-8"){if(!q.includes(r))throw new Error(`Unsupported text file type: ${r}. Supported types: ${q.join(", ")}`);let u;switch(r){case".txt":u="text/plain";break;case".md":case".markdown":u="text/markdown";break;default:u="text/plain"}const i=await U(n,"utf-8");return{path:n,content:i,mimeType:u,size:s.size,name:o,type:"text"}}else{let u,i;if(B.includes(r))switch(u="image",r){case".jpg":case".jpeg":i="image/jpeg";break;case".png":i="image/png";break;case".gif":i="image/gif";break;case".webp":i="image/webp";break;case".bmp":i="image/bmp";break;case".tiff":i="image/tiff";break;default:i="image/jpeg"}else if(V.includes(r))u="document",i="application/pdf";else throw new Error(`Unsupported file type: ${r}. Supported types: ${[...B,...V].join(", ")}`);const d=(await U(n)).toString("base64");return{path:n,base64:d,mimeType:i,size:s.size,name:o,type:u}}}l(J,"loadFileContent");class pn{static{l(this,"FileRunPlanner")}constructor(t,n,s=[]){this.source=t,this.bind=n,this.skipConditions=s}async plan(t){const n=[],s=await ie(this.source,{withFileTypes:!0});for(const r of s){const o=r.fullpath(),a=rn(o);let u=!1;for(const i of this.skipConditions)if(u=await i.eval({components:a}),u)break;if(!u){const i=await Ye(o,"utf-8"),c={variables:{[this.bind]:i,...a},steps:t};n.push(c)}}return n}}class fn{static{l(this,"MultiPlanner")}planners;constructor(t){this.planners=t}async plan(t){const n=this.planners.map(async r=>await r.plan(t));return(await Promise.all(n)).flat()}}function K(e,t,n="{{}}"){const s=n==="{{}}"?/\{\{(.*?)\}\}/g:/\{(.*?)\}/g;return e=e.replace(s,(r,o)=>{if(o=o.trim(),Object.prototype.hasOwnProperty.call(t,o)){const a=t[o];return a==null?"":String(a)}return r}),e}l(K,"replaceVariables");class dn{static{l(this,"FileExistSkipCondition")}constructor(t){this.pattern=t}type="file-exist";async eval(t){const n=K(this.pattern,t.components,"{{}}");try{return await Qe(n,et.F_OK),!0}catch{return!1}}}function z(e,t=0){const n={};for(const[s,r]of Object.entries(e))if(typeof r=="string")switch(r){case"string":n[s]=t===0?I.string():I.string().optional();break;case"number":n[s]=t===0?I.number():I.number().optional();break;case"boolean":n[s]=t===0?I.boolean():I.boolean().optional();break;case"string[]":n[s]=I.array(I.string());break;default:throw new Error(`Unsupported declarative type: ${r}`)}else if(Array.isArray(r))if(r.length===1&&typeof r[0]=="object"){const o=z(r[0],t+1);n[s]=I.array(I.object(o))}else throw new Error(`Unsupported array format for key ${s}. Expected [DeclarativeSchema].`);else n[s]=I.object(z(r,t+1));return n}l(z,"declarativeToOutputSchema");function X(e){if(e instanceof I.ZodString)return["string","Your answer"];if(e instanceof I.ZodNumber)return["number",42];if(e instanceof I.ZodBoolean)return["boolean",!0];if(e instanceof I.ZodArray){const t=e.element;if(t instanceof I.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(t instanceof I.ZodNumber)return["number array",[42,59,3.14]];if(t instanceof I.ZodBoolean)return["boolean array",[!0,!1,!1]];if(t instanceof I.ZodObject){const[n,s]=X(t);return["object array",[s,s]]}return["array",[]]}if(e instanceof I.ZodObject){const t=e.shape,n={};for(const[s,r]of Object.entries(t)){const[o,a]=X(r);n[s]=a}return["JSON object",n]}if(e instanceof I.ZodOptional){const t=e.unwrap(),[n,s]=X(t);return[`${n} | undefined`,s]}}l(X,"zodToExample");function Le(e){return typeof e=="object"&&Object.values(e).every(t=>t&&typeof t=="object"&&"_def"in t)}l(Le,"isOutputSchema");class ve{static{l(this,"AbstractInstruct")}name="instruct";prompt;system=null;inputs={};tools={};files=[];textReferences=[];instructions=[];schema;rawResponse;_taggedSections=void 0;_result=void 0;constructor(t,n){this.prompt=t,this.schema=n}setInputs(t){this.inputs=t}addInput(t,n){this.inputs[t]=n}addTools(t){for(const n of t)this.tools[n.name]=n}addTool(t){this.tools[t.name]=t}addImage(t){if(t.type!=="image")throw new Error(`Expected image file, got ${t.type}`);const n=t;this.files.push(n)}addDocument(t){if(t.type!=="document")throw new Error(`Expected document file, got ${t.type}`);const n=t;this.files.push(n)}addFile(t){if(!ln(t))throw new Error(`Expected image or document file, got ${t.type}`);this.files.push(t)}addReference(t,n){if(typeof t=="string"){this.textReferences.push({content:t,name:n?.name});return}if(cn(t))this.textReferences.push({content:t.content,name:n?.name??t.name});else throw new Error(`Expected text file, got ${t.type}`)}addInstructions(t){if(typeof t!="string"||t.trim()==="")throw new Error("Instruction must be a non-empty string");this.instructions.push(t)}hasTools(){return Object.keys(this.tools).length>0}hasFiles(){return this.files.length>0}get result(){return this._result}compile(t,n={}){const s=this.createUserMessage(t,n),r=this.createInstructions();return{message:s,instructions:r}}createUserMessage(t,n={}){const{recorder:s,options:r}=n,o={...t,...this.inputs};let a=K(this.prompt,o);if(this.textReferences.length>0)for(const[u,i]of this.textReferences.entries()){const c=i.name?`: ${i.name}`:"";a+=`
|
|
7
|
-
|
|
8
|
-
## Reference ${u+1}${c}
|
|
9
|
-
|
|
10
|
-
\`\`\`${i.content}'''`}if(r?.warnUnused){const u=a.match(/\{\{(.*?)\}\}/g);if(u)throw s?.error.log(`Warning unused variables ${u.join(", ")}`),new Error(`Unused variables: ${u.join(", ")}`)}return a}createInstructions(t=""){if(t=`# Instructions
|
|
11
|
-
|
|
12
|
-
`+t,Object.keys(this.schema).length>0){t+=`## Output Format Instructions
|
|
13
|
-
`,t+=`
|
|
14
|
-
Here is how you should format your output. Follow the instructions strictly.
|
|
15
|
-
`;for(const[s,r]of Object.entries(this.schema)){const o=this.generateFieldInstructions(s,r);t+=o}}if(this.instructions.length>0){t+=`
|
|
16
|
-
## Additional Instructions
|
|
17
|
-
|
|
18
|
-
`;for(const s of this.instructions)t+=`- ${s}
|
|
19
|
-
`}return t}generateFieldInstructions(t,n){const[s,r]=X(n);return`
|
|
20
|
-
- Use <${t}></${t}> tags to indicate the answer for ${t}. The answer must be a ${s}.
|
|
21
|
-
Example: <${t}>${JSON.stringify(r)}</${t}>
|
|
22
|
-
`}finalize(t,n={}){const{recorder:s}=n;if(this.rawResponse=t,Object.keys(this.schema).length===0){if(t.trim()==="{}"||t.trim()==="")return this._result={},this._result;throw new Error("Schema is empty, but rawValue is not an empty object representation or empty string.")}this._taggedSections=this._taggedSections||this.parseTaggedSections(t);const o={};for(const[a,u]of Object.entries(this.schema)){const i=this._taggedSections.tags[a];if(i!==void 0)o[a]=this.preprocessValue(u,i);else if(u.def.type!=="optional")throw new Error(`Expected results with tag ${a} but it does not exist`)}try{const a={};for(const[u,i]of Object.entries(this.schema))u in o&&(a[u]=i.parse(o[u]));return this._result=a,this._result}catch(a){if(a&&typeof a=="object"&&"issues"in a){const u=a.issues.map(i=>`${i.path.join(".")}: ${i.message}`).join(", ");throw new Error(`Validation failed: ${u}`)}throw a}}preprocessValue(t,n){switch(n=n.trim(),t.def.type){case"string":try{return JSON.parse(n)}catch{if(typeof n=="string")return n;throw new Error(`Cannot parse '${n}' as string. Ensure it is a valid JSON string or a plain string.`)}case"number":{const s=parseFloat(n);if(isNaN(s))throw new Error(`Cannot parse '${n}' as number`);return s}case"boolean":{const s=n.toLowerCase();if(s==="true")return!0;if(s==="false")return!1;throw new Error(`Cannot parse '${n}' as boolean. Expected 'true' or 'false'`)}case"array":{if(n==="")return[];try{const s=JSON.parse(n);if(Array.isArray(s))return s}catch{}if(n.includes(","))return n.split(",").map(s=>{const r=s.trim();try{return JSON.parse(r)}catch{return r}}).filter(s=>s!=="")}case"object":{n.includes("```json")&&(n=n.replace(/```json/g,"").replace(/```/g,""));try{return JSON.parse(n)}catch(s){throw new Error(`Cannot parse object as JSON: ${s.message}`)}}case"optional":{const s=t.def.innerType;return this.preprocessValue(s,n)}default:return n}}parseTaggedSections(t){t.trim().startsWith("```json")&&t.trim().endsWith("```")&&(t=t.trim().slice(7,-3).trim());const n=/<(\w+)>(.*?)<\/\1>/gs,s={};let r=t;r=r.replace(n,(a,u,i)=>(s[u]=i,""));const o=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return r=r.replace(o,(a,u,i)=>(s[u]=i,"")),{tags:s,remaining:r.trim()}}}class G extends ve{static{l(this,"Instruct")}constructor(t,n){super(t,n)}static with(t,n){if(!n)return new G(t,{response:I.string()});if(Le(n))return new G(t,n);{const s=z(n);return new G(t,s)}}}function W(e){return Array.isArray(e)?e:[e]}l(W,"arrayify");function P(e,t){return t?`${t}:${e.slice(0,8)}`:e.slice(0,8)}l(P,"friendly");function _n(e){return new Promise(t=>setTimeout(t,e))}l(_n,"delay");class De{static{l(this,"WriteToDisk")}constructor(t,n="{{response}}"){this.pathTemplate=t,this.contentTemplate=n}name="write-to-disk";async execute(t){const{variables:n,options:s,recorder:r}=t;if(s?.dryRun){r?.info?.log("[Dry run] WriteToDisk not executed.");return}let o;this.pathTemplate.includes("*")?o=sn(this.pathTemplate,n.file):o=K(this.pathTemplate,n,"{{}}");const a=K(this.contentTemplate,n,"{{}}");await an({filePath:o,content:a}),r?.info?.log(`Wrote to ${o}`)}}const mn=I.object({searchTerm:I.string().describe("The search term to query")});class gn{static{l(this,"BraveSearchTool")}name="brave";description="Perform a search using the Brave search engine";schema=mn;apiKey;throttle;lastExecTime=0;constructor(t){t&&this.configure(t)}configure(t){const{rateLimit:n}=t;this.apiKey=t["api-key"],this.throttle=n?1100/n:void 0}async execute(t){const{searchTerm:n}=t;if(this.throttle){for(;Date.now()-this.lastExecTime<this.throttle;)await _n(this.throttle-(Date.now()-this.lastExecTime));this.lastExecTime=Date.now()}try{const s=this.apiKey,r="https://api.search.brave.com/res/v1/web/search",o=new URL(r);o.searchParams.append("q",n),o.searchParams.append("format","json");const a=await fetch(o.toString(),{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":s}});if(!a.ok)throw new Error(`[Brave] HTTP error ${a.status}: ${a.statusText}`);const u=await a.json();return JSON.stringify(u)}catch(s){throw s instanceof Error?new Error(`[Brave] Error fetching search results: ${s.message}`):s}}}const ne=new gn,hn=H.object({operation:H.enum(["add","subtract","multiply","divide"]).describe("The operation to perform (add, subtract, multiply, divide)"),a:H.number().describe("First operand"),b:H.number().describe("Second operand")}),Fe={name:"calculator",description:"Performs basic arithmetic operations",schema:hn,execute:l(async({operation:e,a:t,b:n})=>{switch(e){case"add":return`${t} + ${n} = ${t+n}`;case"subtract":return`${t} - ${n} = ${t-n}`;case"multiply":return`${t} * ${n} = ${t*n}`;case"divide":if(n===0)throw new Error("Cannot divide by zero");return`${t} / ${n} = ${t/n}`;default:throw new Error(`Unknown operation: ${e}`)}},"execute")};function yn(e,t){const n=t?.[e];switch(e){case"brave":return n&&ne.configure(n),ne;case"calculator":return Fe;default:throw new Error(`Unknown tool: ${e}`)}}l(yn,"createTool");function En(e,t){return e.map(n=>yn(n,t))}l(En,"createTools");function In(e,t="{{response}}"){return new De(e,t)}l(In,"createWriteToDiskAction");const wn={async convert(e,t){const{recorder:n,toolNames:s,toolConfig:r}=t,{message:o,system:a,replace:u}=e;let i;e.output?i=G.with(o,e.output):i=G.with(o),a&&(i.system=a);const c=[...new Set([...s??[],...e.tools??[]])];if(c.length>0){const d=En(c,r);i.addTools(d)}if(u){for(const d of u)if(d.source==="file"){const f=W(d.files),p=await nn(f,n);i.addInput(d.pattern,p)}}if(e.images)for(const d of e.images)try{const f=await J(d.file,"base64");i.addFile(f)}catch(f){throw new Error(`Failed to load image '${d.file}': ${f.message}`)}if(e.documents)for(const d of e.documents)try{const f=await J(d.file,"base64");i.addFile(f)}catch(f){throw new Error(`Failed to load document '${d.file}': ${f.message}`)}if(e.references)for(const d of e.references)try{const f=await J(d.file,"utf-8");i.addReference(f)}catch(f){throw new Error(`Failed to load reference file '${d.file}': ${f.message}`)}return i}};class Tn{static{l(this,"StepToClassRegistry")}converters=new Map;get(t){const n=this.converters.get(t);if(!n)throw new Error(`No converter registered for step: ${t}`);return n}register(t,n){this.converters.set(t,n)}}const xn={async convert(e){const t=e.keys?W(e.keys).map(n=>`{{${n}}}`).join(`
|
|
23
|
-
`):"{{response}}";return In(e.output,t)}},se=new Tn;se.register("write-to-disk",xn),se.register("chat",wn);async function Z(e,t){const{recorder:n}=t,s=e.tools??void 0,r=e.toolConfig??void 0,o=e.steps.map(async a=>await se.get(a.uses).convert(a,{recorder:n,toolNames:s,toolConfig:r}));return Promise.all(o)}l(Z,"configToTasks");async function Ue(e,t){const{batch:n}=e;return n.length===1?je(n[0]):new fn(n.map(s=>je(s)))}l(Ue,"configToPlanner");function je(e){switch(e.type){case"files":let t;return e["skip-if"]&&(t=e["skip-if"].map(s=>Sn(s))),new pn(e.source,e.bind,t)}}l(je,"batchOptionsToPlanner");function Sn(e){switch(e.type){case"file-exist":return new dn(e.pattern)}}l(Sn,"skipOptionsToSkipConditions");function An(e){return e.success===!1&&e.error!==void 0}l(An,"isErrorResult");function Y(e,t){return{response:e,stats:t,success:!0}}l(Y,"createResult");function Q(e,t,n){return{response:t,stats:n,error:e,success:!1}}l(Q,"createErrorResult");class We{static{l(this,"Conversation")}system;_messages=[];constructor(t){t&&(this._messages=t)}get messages(){return[...this._messages]}addSystem(t){this.system=t}addUser(t){typeof t=="string"?this._messages.push({role:"user",content:[{type:"text",text:t}]}):this._messages.push({role:"user",content:t})}addAssistant(t){if(typeof t=="string"){const n=t;this._messages.push({role:"assistant",id:crypto.randomUUID(),content:[{type:"text",text:n}],model:"user",finishReason:y.Custom})}else this._messages.push({role:"assistant",...t})}addToolResults(t){this._messages.push({role:"tool",content:t})}latest(){return this._messages[this._messages.length-1]}toString(){return JSON.stringify({system:this.system,messages:this._messages})}}function bn(e,t,n){const{options:s,recorder:r}=n,o=s?.warnUnused??!0;for(const[a,u]of Object.entries(e))o&&t[a]&&r?.warn?.log(`Warning: Variable "${a}" is being overwritten. Previous value: ${t[a]}, new value: ${u}`),t[a]=u}l(bn,"setResultsIntoVariables");function On(e){return"steps"in e&&"type"in e&&e.type==="serial"}l(On,"isSerialJob");const re=l((e,...t)=>{const n=l(async r=>{const{recorder:o}=r;return On(e)?await Z(e,{recorder:o}):[e,...t]},"prepare");return{execute:l(async r=>{const{provider:o,variables:a,options:u,stats:i,recorder:c,name:d}=r,f=crypto.randomUUID();c?.info?.log({type:"task",id:f,status:E.Running,message:`[${P(f,d)}] Starting job`});try{const p=await n({recorder:c}),_=new We;for(const[h,w]of p.entries()){c?.info?.log({type:"task",id:f,status:E.Running,message:`[${P(f,d)}] Processing step ${h+1}: ${w.name}`});try{w instanceof G?await kn(w,{conversation:_,provider:o,stats:i,variables:a,options:u,recorder:c}):await Pn(w,{variables:a,options:u,recorder:c})}catch(b){throw b instanceof S?b:new oe(`Error executing step ${w.name}`,{id:f,taskType:w.name,taskIndex:h,cause:b instanceof Error?b:new Error(String(b))})}}return c?.info?.log({type:"task",status:E.Success,id:f,message:`[${P(f,d)}] Completed ${p.length} steps`}),Y(a.$previous,i)}catch(p){const _=p instanceof S?p:new S("Serial workflow execution failed",{id:f,cause:p instanceof Error?p:new Error(String(p))});return c?.info?.log({type:"task",status:E.Fail,id:f,message:`[${P(f,d)}] Failed: ${_.message}`}),c?.error.log(_),Q(_,a.$previous,i)}},"execute")}},"serialWorkflow");function Rn(e){return e?e.response!==void 0?String(e.response):JSON.stringify(e):""}l(Rn,"deriveInput");async function Pn(e,t){const{variables:n,options:s,recorder:r}=t,o=Rn(n.$previous),a=await e.execute({input:o,variables:n,options:s,recorder:r});a!==void 0?(n.output=a,n.$previous={output:a}):n.$previous={}}l(Pn,"executeAction");async function kn(e,t){const{conversation:n,provider:s,variables:r,options:o,stats:a,recorder:u}=t;e.system&&n.addSystem(e.system);const{message:i,instructions:c}=e.compile(r,{recorder:u,options:o}),d=e.files;if(n.addUser(at({text:c+i,files:d})),o?.dryRun){u?.debug?.log(n);return}let f=!0;for(;f;){const p=await Ge({provider:s,messages:n.messages,tools:Object.values(e.tools),recorder:u});if(a&&(a.in+=p.usage.in,a.out+=p.usage.out),p.type==="error")throw new Error(JSON.stringify(p.error));if(p.type==="success")switch(p.finishReason){case y.Stop:{if(p.content){n.addAssistant({id:p.id,model:p.model,content:p.content,finishReason:p.finishReason});const _=$(p.content),h=e.finalize(_,{recorder:u});bn(h,r,{options:o,recorder:u}),r.$previous=h}f=!1;break}case y.Length:throw new Error("Incomplete model output due to max_tokens or token limit");case y.FunctionCall:{p.content&&n.addAssistant({id:p.id,model:p.model,content:p.content,finishReason:p.finishReason});const _=it(p.content);if(_&&_.length>0){const h=await Nn(_,e,{recorder:u});u?.debug?.log(h),n.addToolResults(h),f=!0}else f=!1;break}}if(p.type!=="success")throw u?.debug?.log(p),new Error("Unexpected response type")}}l(kn,"executeInstruct");async function Nn(e,t,n){const{recorder:s}=n,r=e.map(async o=>{const a=t.tools[o.name];if(!a)throw new Error(`Tool not found: ${o.name}`);s?.debug?.heading.log(`Executing tool ${a.name}`);const u=await a.execute(o.parameters);return s?.debug?.log(`Complete tool ${a.name}: ${o.id}`),{id:o.id,name:o.name,content:JSON.stringify(u)}});return Promise.all(r)}l(Nn,"executeToolCalls");function Mn(e){return"type"in e&&e.type==="batch"}l(Mn,"isBatchJob");const He=l((e,...t)=>{const n=l(async r=>{const{recorder:o}=r;if(Mn(e)){const a=await Ue(e),u=await Z(e,{recorder:o});return[a,u]}else return[e,[...t]]},"prepare");return{execute:l(async r=>{const{provider:o,variables:a,options:u,stats:i,recorder:c,name:d}=r,f=crypto.randomUUID();try{const[p,_]=await n({recorder:c}),h=await p.plan(_);if(c?.debug?.heading.log("Runs",h),h.length===0)return c?.info?.log("No runs to execute"),Y([],i);let w=0;c?.info?.log({type:"task",status:E.Running,id:f,message:`[${P(f,"CRW")}] Working on 0/${h.length}`});const b=l(async(O,D)=>{try{return await re(...O.steps).execute({provider:o,variables:{...O.variables,...a},options:u,stats:i,recorder:c,name:`${d}-${D}`})}catch(N){const ae=N instanceof S?N:new S("Error executing run",{cause:N instanceof Error?N:new Error(String(N))});return c?.error?.log(ae),Q(ae,null,i)}finally{w++,c?.info?.log({type:"task",status:E.Running,id:f,message:`[${P(f,"CRW")}] Working on ${w}/${h.length}`})}},"executeRun"),C=5;let L=[];for(let O=0;O<h.length;O+=C){const D=h.slice(O,O+C),N=await Promise.all(D.map(b));L=L.concat(N)}const k=L.some(An);c?.info?.log({type:"task",status:k?E.PartialSuccess:E.Success,id:f,message:`[${P(f,"CRW")}] All jobs (${h.length}) completed${k?" with some errors":""}`});const M=L.map(O=>O.response);return Y(M,i)}catch(p){const _=p instanceof S?p:new S("Concurrent workflow execution failed",{id:f,cause:p instanceof Error?p:new Error(String(p))});return c?.error?.log(_),Q(_,null,i)}},"execute")}},"concurrentWorkflow");class $n{static{l(this,"DAGParser")}static parse(t){const n=new Map;for(const[r,o]of Object.entries(t)){const a=this.parseNodeDefinition(r,o);n.set(r,a)}return this.validateDependencies(n),this.checkForCycles(n),{stages:this.createExecutionStages(n),nodes:n}}static parseNodeDefinition(t,n){if(this.isSimpleStep(n))return{id:t,steps:Array.isArray(n)?n:[n],dependencies:[],executionType:"serial"};if(this.isConcurrentNodeDefinition(n)){const s=n.dependsOn?W(n.dependsOn):[];return{id:t,steps:n.steps,dependencies:s,planner:n.planner,executionType:"concurrent"}}if(this.isNodeDefinition(n)){const s=n.dependsOn?W(n.dependsOn):[],r=W(n.step);return{id:t,steps:r,dependencies:s,executionType:"serial"}}throw new Error(`Invalid DAG node definition for '${t}'`)}static isSimpleStep(t){return t.name||Array.isArray(t)}static isConcurrentNodeDefinition(t){return t&&typeof t=="object"&&"planner"in t}static isNodeDefinition(t){return t&&typeof t=="object"&&"step"in t}static validateDependencies(t){for(const n of t.values())for(const s of n.dependencies)if(!t.has(s))throw new S(`Node "${n.id}" depends on non-existent node "${s}"`)}static checkForCycles(t){const n=new Set,s=new Set,r=l(o=>{if(s.has(o))return!0;if(n.has(o))return!1;n.add(o),s.add(o);const a=t.get(o);for(const u of a.dependencies)if(r(u))return!0;return s.delete(o),!1},"hasCycle");for(const o of t.keys())if(r(o))throw new S(`Circular dependency detected involving node "${o}"`)}static createExecutionStages(t){const n=[],s=new Set,r=new Set(t.keys());for(;r.size>0;){const o=[];for(const a of r)t.get(a).dependencies.every(c=>s.has(c))&&o.push(a);if(o.length===0)throw new S("Unable to resolve DAG dependencies - possible circular reference");n.push(o),o.forEach(a=>{s.add(a),r.delete(a)})}return n}}class Gn{static{l(this,"DAGJobToDefinition")}static async convert(t,n){const{recorder:s}=n,r={};for(const[o,a]of Object.entries(t)){const{dependsOn:u,...i}=a;if(i.type==="batch"){const c=await Ue(i),d=await Z(i,{recorder:s}),f={planner:c,steps:d,...u?{dependsOn:u}:{}};r[o]=f}else{const c=await Z(i,{recorder:s});if(u){const d={step:c,dependsOn:u};r[o]=d}else r[o]=c}}return r}}async function Cn(e,t,n,s={}){const{variables:r}=n,o=t.nodes.get(e);try{let a;if(o.executionType==="concurrent"&&o.planner?a=await He(o.planner,...o.steps).execute({...n,variables:r,name:e}):a=await re(...o.steps).execute({...n,variables:r,name:e}),!a.success)throw new S(`Node "${e}" failed: ${a.error?.message}`);return a.response}catch(a){if(!s.continueOnError)throw a;return null}}l(Cn,"executeNode");function Ln(e){const t=Object.values(e)[0];return t&&typeof t=="object"&&"steps"in t}l(Ln,"isDAGJob");const vn=l((e,t={})=>{const n=l(async(r,o)=>Ln(r)?await Gn.convert(r,o):r,"prepare");return{execute:l(async r=>{const{stats:o,recorder:a}=r,{maxConcurrency:u=3}=t,i=crypto.randomUUID();try{const c=await n(e,{recorder:a});a?.debug?.log(c);const d=$n.parse(c),f=new Map;a?.info?.log({type:"task",id:i,status:E.Running,message:`[${P(i)}] Starting workflow execution with ${d.stages.length} stages`});for(const[_,h]of d.stages.entries()){a?.info?.log({type:"task",id:i,status:E.Running,message:`[${P(i)}] Stage ${_+1}/${d.stages.length}, executing ${h.length} nodes: ${h.join(", ")}`});const w=Math.min(h.length,u);for(let b=0;b<h.length;b+=w){const C=h.slice(b,b+w);(await Promise.all(C.map(async k=>{const M=await Cn(k,d,r,t);return{nodeId:k,result:M}}))).forEach(({nodeId:k,result:M})=>{f.set(k,M)})}}a?.info?.log({type:"task",status:E.Success,id:i,message:`[${P(i)}] Workflow execution completed successfully`});const p=Object.fromEntries(f);return Y(p,o)}catch(c){const d=c instanceof S?c:new S("DAG workflow execution failed",{id:i,cause:c instanceof Error?c:new Error(String(c))});return a?.info?.log({type:"task",status:E.Fail,id:i,message:`[${P(i)}] Workflow execution failed: ${d.message}`}),a?.error?.log(d),Q(d,null,o)}},"execute")}},"dagWorkflow"),Dn=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],v={success:"\u2713",fail:"\u2717",spinning:Dn};class Fn{static{l(this,"ConsoleWriter")}tasks=new Map;entries=[];truncate=0;intervalId=null;spinnerInterval=80;lastRender="";isRendering=!1;inline=!0;constructor(t={}){this.truncate=t.truncate??0,this.inline=t.inline??!0}startSpinner(){this.intervalId===null&&(this.intervalId=setInterval(()=>{[...this.tasks.values()].some(n=>n.status===E.Running)&&this.renderTasks()},this.spinnerInterval))}stopSpinner(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}renderTasks(){if(this.isRendering)return;if(this.isRendering=!0,this.inline&&this.lastRender){const o=this.lastRender.split(`
|
|
24
|
-
`).length;le.moveCursor(process.stdout,0,-o+1),le.clearScreenDown(process.stdout)}const t=[...this.tasks.values()],n=t.filter(o=>o.status===E.Running),s=t.filter(o=>o.status===E.Success||o.status===E.Fail);if(n.length===0&&s.length>0){let o="";for(const a of s){if(a.status===E.Success){const u=T.green(v.success);o+=`${u} ${a.text}
|
|
25
|
-
`}else if(a.status===E.Fail){const u=T.red(v.fail);o+=`${u} ${a.text}
|
|
26
|
-
`}this.tasks.delete(a.id)}console.log(o)}for(const o of this.entries){const{level:a,time:u,kind:i,payload:c}=o;i==="heading"?jn(a,c,{truncate:this.truncate}):Wn(a,c,{truncate:this.truncate})}this.entries=[];let r="";for(const o of this.tasks.values())if(o.status===E.Running){const a=T.cyan(v.spinning[o.frameIndex]);o.frameIndex=(o.frameIndex+1)%v.spinning.length,r+=`${a} ${o.text}
|
|
27
|
-
`}else if(o.status===E.Success){const a=T.green(v.success);r+=`${a} ${o.text}
|
|
28
|
-
`}else if(o.status===E.Fail){const a=T.red(v.fail);r+=`${a} ${o.text}
|
|
29
|
-
`}this.lastRender=r,process.stdout.write(r),this.isRendering=!1}handleEvent(t){const{level:n,time:s,payload:r}=t;if(r.length>0&&Un(r[0])){const a=r[0],{id:u,message:i,status:c}=a;if(c===E.Running)this.tasks.set(u,{id:u,text:i,status:c,frameIndex:0});else if((c===E.Success||c===E.Fail)&&this.tasks.has(u)){const d=this.tasks.get(u);d.status=c,d.text=i}}else this.entries.push(t);this.renderTasks();const o=[...this.tasks.values()].some(a=>a.status===E.Running);o&&this.intervalId===null?this.startSpinner():!o&&this.intervalId!==null&&this.stopSpinner()}destroy(){this.stopSpinner()}}function Un(e){if(typeof e!="object"||e===null)return!1;const t=e;if(t.type!=="task"||typeof t.id!="string"||typeof t.message!="string")return!1;switch(t.status){case E.Running:case E.Success:case E.PartialSuccess:case E.Fail:return!0;default:return!1}}l(Un,"isTask");function jn(e,t,n){let s,r;e===x.Error?(s=T.red,r=T.redBright.bold):e===x.Warn?(s=T.yellow,r=T.yellowBright.bold):e>=x.Info?(s=T.blue,r=T.whiteBright.bold):(s=T.gray,r=T.white);const{message:o,data:a}=qe(t);console.log(`${s("==>")} ${r(o)}`),Ve(e,a,n)}l(jn,"heading");function Wn(e,t,n){let s;e===x.Error?s=T.red:e===x.Warn?s=T.yellow:e>=x.Info?s=T.white:s=T.gray;const{message:r,data:o}=qe(t);r&&console.log(s(r)),Ve(e,o,n)}l(Wn,"body");const Be=" ";function Ve(e,t,n){let s;e===x.Error?(s=T.red,n.truncate=0):e==x.Warn?s=T.yellow:e>=x.Info?s=T.white:s=T.gray,t.forEach(r=>{if(typeof r=="string"){console.log(s(`${Be}${r}`));return}for(const[o,a]of Object.entries(r)){let u=JSON.stringify(a,Hn(n.truncate)," ");const i=`${o}: ${u}`.split(`
|
|
30
|
-
`).map(c=>Be+c).join(`
|
|
31
|
-
`);console.log(s(i))}})}l(Ve,"values");function qe(e){const[t,...n]=e;let s="",r=n;if(t){let{message:o,...a}=t;s=o&&typeof o=="string"?o:"",Object.keys(a).length>0&&(r=[a,...r])}return{message:s,data:r}}l(qe,"toMsgData");function Hn(e){return e===0?null:(t,n)=>typeof n=="string"&&n.length>e?n.slice(0,e)+"<...>":n}l(Hn,"truncator");export{S as A,We as C,de as D,we as G,G as I,x as L,A as M,_e as N,Ae as O,en as R,De as W,ve as a,z as b,me as c,vn as d,Ee as e,g as f,Qt as g,Ie as h,Le as i,Se as j,Mt as k,J as l,Pe as m,m as n,Me as o,$e as p,Ge as q,y as r,re as s,ne as t,Fe as u,He as v,Fn as w,tn as x};
|