@fifthrevision/axle 0.6.4 → 0.6.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
- var D=Object.defineProperty;var u=(i,e)=>D(i,"name",{value:e,configurable:!0});import{Command as L}from"@commander-js/extra-typings";import{v as y,w as x,L as v,R as k,C as O,g as E,x as T,d as F}from"./consoleWriter-B2HBs48c.js";import w from"yaml";import{access as C,mkdir as I,writeFile as W,appendFile as R}from"node:fs/promises";import{homedir as S}from"node:os";import"@anthropic-ai/sdk";import"zod";import"@google/genai";import"openai";import"serialize-error";import"fs/promises";import"glob";import"node:path";import"chalk";import"node:readline";var _="0.6.4",$={version:_};function J(i,e){if(typeof i!="object"||i===null)return e&&(e.value="Config: must be a non-null object"),!1;if("openai"in i){const t=i.openai;if(typeof t!="object"||t===null)return e&&(e.value="Config: openai must be an object"),!1;if(typeof t["api-key"]!="string")return e&&(e.value="Config: openai.api-key must be a string"),!1;if("model"in t&&typeof t.model!="string")return e&&(e.value="Config: openai.model must be a string"),!1}if("anthropic"in i){const t=i.anthropic;if(typeof t!="object"||t===null)return e&&(e.value="Config: anthropic must be an object"),!1;if(typeof t["api-key"]!="string")return e&&(e.value="Config: anthropic.api-key must be a string"),!1;if("model"in t&&typeof t.model!="string")return e&&(e.value="Config: anthropic.model must be a string"),!1}if("ollama"in i){const t=i.ollama;if(typeof t!="object"||t===null)return e&&(e.value="Config: ollama must be an object"),!1;if("url"in t&&typeof t.url!="string")return e&&(e.value="Config: ollama.url must be a string"),!1;if("model"in t&&typeof t.model!="string")return e&&(e.value="Config: ollama.model must be a string"),!1}if("gemini"in i){const t=i.gemini;if(typeof t!="object"||t===null)return e&&(e.value="Config: gemini must be an object"),!1;if(typeof t["api-key"]!="string")return e&&(e.value="Config: gemini.api-key must be a string"),!1;if("model"in t&&typeof t.model!="string")return e&&(e.value="Config: gemini.model must be a string"),!1}if("brave"in i){const t=i.brave;if(typeof t!="object"||t===null)return e&&(e.value="Config: brave must be an object"),!1;if(typeof t["api-key"]!="string")return e&&(e.value="Config: brave.api-key must be a string"),!1;if("rateLimit"in t&&typeof t.rateLimit!="number")return e&&(e.value="Config: brave.rateLimit must be a number"),!1}return!0}u(J,"isServiceConfig");const N="ax.job",P=["yaml","yml","json"];async function U(i,e){const{recorder:t}=e,{content:a,format:l}=await y(i,{defaults:{name:N,formats:P},tag:"Job File"});let o=null;if(l==="json")o=JSON.parse(a);else if(l==="yaml"||l==="yml")o=w.parse(a);else throw new Error("Invalid job file format");t?.debug?.heading.log("The Job Object"),t?.debug?.log(o);const g={value:""};if(x(o,g))return o;throw new Error(`The job file is not valid: ${g.value}`)}u(U,"getJobConfig");const z="ax.config",M=["yaml","yml","json"];async function G(i,e){const{recorder:t}=e,{content:a,format:l}=await y(i,{defaults:{name:z,formats:M},tag:"Config File"});let o=null;if(l==="json")o=JSON.parse(a);else if(l==="yaml"||l==="yml")o=w.parse(a);else throw new Error("Invalid config file format");t?.debug?.heading.log("The Config Object"),t?.debug?.log(o);const g={value:""};if(J(o,g))return o;throw new Error(g.value)}u(G,"getServiceConfig");const p="./logs/",B="~/.axle/logs/";class H{static{u(this,"LogWriter")}time;initialized=!1;logDir=p;pendingWrites=[];constructor(){this.time=new Date().toISOString()}get filename(){return`${this.logDir}${this.time}.log`}async initialize(){try{await C(p),this.logDir=p}catch{const a=B.replace("~",S());try{await C(a),this.logDir=a}catch{await I(a,{recursive:!0}),this.logDir=a}}const e=W(this.filename,`AXLE: New run at ${this.time}
3
- `);this.pendingWrites.push(e);try{await e,this.initialized=!0}finally{const t=this.pendingWrites.indexOf(e);t!==-1&&this.pendingWrites.splice(t,1)}}async writeToLog(e){const{time:t,level:a,payload:l}=e;this.initialized||await this.initialize();const o=l.map(r=>typeof r=="string"?r:JSON.stringify(r)),g=`${v[a]} ${new Date(t).toISOString()} > ${o.join(" >> ")}
4
- `,c=R(this.filename,g).catch(r=>{console.error(`Failed to write to log file: ${r}`)});this.pendingWrites.push(c);try{await c}finally{const r=this.pendingWrites.indexOf(c);r!==-1&&this.pendingWrites.splice(r,1)}}async handleEvent(e){await this.writeToLog(e)}async flush(){this.pendingWrites.length>0&&await Promise.all(this.pendingWrites)}}const f=new L().name("axle").description("Axle is a CLI tool for running AI workflows").version($.version).option("--dry-run","Run the application without executing against the AI providers").option("-c, --config <path>","Path to the config file").option("-j, --job <path>","Path to the job file").option("--no-log","Do not write the output to a log file").option("--no-warn-unused","Do not warn about unused variables").option("--no-inline","Do not inline the console output").option("-d, --debug","Print additional debug information").option("--truncate <num>","Truncate printed strings to a certain number of characters, 0 to disable",parseInt,100).option("--args <args...>","Additional arguments in the form key=value");f.parse(process.argv);const s=f.opts(),m={};s.args&&s.args.forEach(i=>{const[e,t]=i.split("=");e&&t&&(m[e.trim()]=t.trim())}),process.on("uncaughtException",async i=>{console.error("Uncaught exception:"),console.error(i),n&&(n.error?.log("Uncaught exception:"),n.error?.log(i.message),n.error?.log(i.stack||""),await n.shutdown()),process.exit(1)});const n=new k;s.debug&&(n.level=v.Debug);const X=new O(s);if(n.subscribe(X),s.log){const i=new H;await i.initialize(),n.subscribe(i)}s.debug&&(n.debug?.heading.log("Options"),n.debug?.log(s),n.debug?.heading.log("Additional Arguments:"),n.debug?.log(m));let d,b;try{d=await G(s.config??null,{recorder:n}),b=await U(s.job??null,{recorder:n})}catch(i){n.error.log(i.message),n.debug?.log(i.stack),await n.shutdown(),f.outputHelp(),process.exit(1)}let j;try{const{engine:i,...e}=b.using,t={...d[i],...e};j=E(i,t)}catch(i){n.error.log(i.message),n.error.log(i.stack),await n.shutdown(),f.outputHelp(),process.exit(1)}T().setConfig(d),n.info?.heading.log("All systems operational. Running job...");const K=Date.now();s.dryRun&&n.info?.log("Dry run mode enabled. No API calls will be made.");const h={in:0,out:0},A=await F(b.jobs).execute({provider:j,variables:m,options:s,stats:h,recorder:n});A&&(n.info?.heading.log("Response"),n.info.log(A)),n.info?.heading.log("Usage"),n.info?.log(`Total run time: ${Date.now()-K}ms`),n.info?.log(`Input tokens: ${h.in} `),n.info?.log(`Output tokens: ${h.out} `),n.info?.heading.log("Complete. Goodbye"),await n.shutdown();
2
+ var L=Object.defineProperty;var p=(t,i)=>L(t,"name",{value:i,configurable:!0});import{Command as k}from"@commander-js/extra-typings";import{x as w,L as j,R as E,w as I,g as T,d as P}from"./consoleWriter-Bg94CpP2.js";import S from"yaml";import{z as e}from"zod";import{access as v,mkdir as U,writeFile as F,appendFile as J}from"node:fs/promises";import{homedir as W}from"node:os";import"@anthropic-ai/sdk";import"@google/genai";import"openai";import"serialize-error";import"fs/promises";import"glob";import"node:path";import"chalk";import"node:readline";var R="0.6.5",$={version:R};e.object({value:e.string()});const _=e.object({"api-key":e.string(),rateLimit:e.number().optional()}),G=e.object({engine:e.literal("ollama")}).loose(),N=e.object({engine:e.literal("anthropic")}).loose(),z=e.object({engine:e.literal("openai")}).loose(),B=e.object({engine:e.literal("gemini")}).loose(),M=e.discriminatedUnion("engine",[G,N,z,B]),V=e.object({ollama:e.custom().optional(),anthropic:e.custom().optional(),openai:e.custom().optional(),gemini:e.custom().optional(),brave:_.optional()}).loose(),H=e.object({file:e.string()}),X=e.object({file:e.string()}),Y=e.object({file:e.string()}),Z=e.object({source:e.literal("file"),pattern:e.string(),files:e.union([e.string(),e.array(e.string())])}),q=e.object({type:e.literal("file-exist"),pattern:e.string()}),A=e.object({type:e.literal("files"),source:e.string(),bind:e.string(),"skip-if":e.array(q).optional()}),K=e.object({uses:e.literal("chat"),system:e.string().optional(),message:e.string(),output:e.record(e.string(),e.any()).optional(),replace:e.array(Z).optional(),tools:e.array(e.string()).optional(),images:e.array(H).optional(),documents:e.array(X).optional(),references:e.array(Y).optional()}),Q=e.object({uses:e.literal("write-to-disk"),output:e.string(),keys:e.union([e.string(),e.array(e.string())]).optional()}),m=e.discriminatedUnion("uses",[K,Q]),ee=e.object({type:e.literal("serial"),tools:e.array(e.string()).optional(),steps:e.array(m)}),te=e.object({type:e.literal("batch"),tools:e.array(e.string()).optional(),batch:e.array(A),steps:e.array(m)});e.preprocess(t=>t.batch&&t.batch.length>0?{...t,type:"batch"}:{...t,type:"serial"},e.discriminatedUnion("type",[ee,te]));const oe=e.object({type:e.literal("serial"),tools:e.array(e.string()).optional(),steps:e.array(m),dependsOn:e.union([e.string(),e.array(e.string())]).optional()}),ie=e.object({type:e.literal("batch"),tools:e.array(e.string()).optional(),batch:e.array(A),steps:e.array(m),dependsOn:e.union([e.string(),e.array(e.string())]).optional()}),ne=e.preprocess(t=>t.batch&&t.batch.length>0?{...t,type:"batch"}:{...t,type:"serial"},e.discriminatedUnion("type",[oe,ie])),re=e.record(e.string(),ne),ae=e.object({using:M,jobs:re}),se="ax.job",le=["yaml","yml","json"];async function ce(t,i){const{recorder:n}=i,{content:r,format:l}=await w(t,{defaults:{name:se,formats:le},tag:"Job File"});let a=null;if(l==="json")a=JSON.parse(r);else if(l==="yaml"||l==="yml")a=S.parse(r);else throw new Error("Invalid job file format");n?.debug?.heading.log("The Job Object"),n?.debug?.log(a);const c=ae.safeParse(a);if(!c.success)throw new Error(`The job file is not valid:
3
+ ${D(c.error)}`);return c.data}p(ce,"getJobConfig");const ge="ax.config",pe=["yaml","yml","json"];async function me(t,i){const{recorder:n}=i,{content:r,format:l}=await w(t,{defaults:{name:ge,formats:pe},tag:"Config File"});let a=null;if(l==="json")a=JSON.parse(r);else if(l==="yaml"||l==="yml")a=S.parse(r);else throw new Error("Invalid config file format");n?.debug?.heading.log("The Config Object"),n?.debug?.log(a);const c=V.safeParse(a);if(!c.success)throw new Error(`The config file is not valid:
4
+ ${D(c.error)}`);return c.data}p(me,"getServiceConfig");function D(t){return t.issues.map(i=>` - ${i.path.join(".")||"root"}: ${i.message}`).join(`
5
+ `)}p(D,"formatZodError");const d="./logs/",ue="~/.axle/logs/";class he{static{p(this,"LogWriter")}time;initialized=!1;logDir=d;pendingWrites=[];constructor(){this.time=new Date().toISOString()}get filename(){return`${this.logDir}${this.time}.log`}async initialize(){try{await v(d),this.logDir=d}catch{const r=ue.replace("~",W());try{await v(r),this.logDir=r}catch{await U(r,{recursive:!0}),this.logDir=r}}const i=F(this.filename,`AXLE: New run at ${this.time}
6
+ `);this.pendingWrites.push(i);try{await i,this.initialized=!0}finally{const n=this.pendingWrites.indexOf(i);n!==-1&&this.pendingWrites.splice(n,1)}}async writeToLog(i){const{time:n,level:r,payload:l}=i;this.initialized||await this.initialize();const a=l.map(g=>typeof g=="string"?g:JSON.stringify(g)),c=`${j[r]} ${new Date(n).toISOString()} > ${a.join(" >> ")}
7
+ `,h=J(this.filename,c).catch(g=>{console.error(`Failed to write to log file: ${g}`)});this.pendingWrites.push(h);try{await h}finally{const g=this.pendingWrites.indexOf(h);g!==-1&&this.pendingWrites.splice(g,1)}}async handleEvent(i){await this.writeToLog(i)}async flush(){this.pendingWrites.length>0&&await Promise.all(this.pendingWrites)}}const u=new k().name("axle").description("Axle is a CLI tool for running AI workflows").version($.version).option("--dry-run","Run the application without executing against the AI providers").option("-c, --config <path>","Path to the config file").option("-j, --job <path>","Path to the job file").option("--no-log","Do not write the output to a log file").option("--no-warn-unused","Do not warn about unused variables").option("--no-inline","Do not inline the console output").option("-d, --debug","Print additional debug information").option("--truncate <num>","Truncate printed strings to a certain number of characters, 0 to disable",parseInt,100).option("--args <args...>","Additional arguments in the form key=value");u.parse(process.argv);const s=u.opts(),f={};s.args&&s.args.forEach(t=>{const[i,n]=t.split("=");i&&n&&(f[i.trim()]=n.trim())}),process.on("uncaughtException",async t=>{console.error("Uncaught exception:"),console.error(t),o&&(o.error?.log("Uncaught exception:"),o.error?.log(t.message),o.error?.log(t.stack||""),await o.shutdown()),process.exit(1)});const o=new E;s.debug&&(o.level=j.Debug);const de=new I(s);if(o.subscribe(de),s.log){const t=new he;await t.initialize(),o.subscribe(t)}s.debug&&(o.debug?.heading.log("Options"),o.debug?.log(s),o.debug?.heading.log("Additional Arguments:"),o.debug?.log(f));let O,b;try{O=await me(s.config??null,{recorder:o}),b=await ce(s.job??null,{recorder:o})}catch(t){o.error.log(t.message),o.debug?.log(t.stack),await o.shutdown(),u.outputHelp(),process.exit(1)}let x;try{const{engine:t,...i}=b.using,n={...O[t],...i};x=T(t,n)}catch(t){o.error.log(t.message),o.error.log(t.stack),await o.shutdown(),u.outputHelp(),process.exit(1)}o.info?.heading.log("All systems operational. Running job...");const fe=Date.now();s.dryRun&&o.info?.log("Dry run mode enabled. No API calls will be made.");const y={in:0,out:0},C=await P(b.jobs).execute({provider:x,variables:f,options:s,stats:y,recorder:o});C&&(o.info?.heading.log("Response"),o.info.log(C)),o.info?.heading.log("Usage"),o.info?.log(`Total run time: ${Date.now()-fe}ms`),o.info?.log(`Input tokens: ${y.in} `),o.info?.log(`Output tokens: ${y.out} `),o.info?.heading.log("Complete. Goodbye"),await o.shutdown();
@@ -0,0 +1,31 @@
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};