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