@fifthrevision/axle 0.6.3 → 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 +6 -3
- package/dist/consoleWriter-Bg94CpP2.js +31 -0
- package/dist/index.d.ts +701 -306
- package/dist/index.js +2 -2
- package/package.json +15 -17
- package/dist/consoleWriter-Cx-CPHU8.js +0 -33
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var m=Object.defineProperty;var i=(
|
|
1
|
+
var m=Object.defineProperty;var i=(n,t)=>m(n,"name",{value:t,configurable:!0});import{R as g,A as o,g as f,s as d,d as p,l as h,a as w,i as x,b as k,D as E,M as v,N as y,c as P,e as b,f as L,h as A,G as T,j as S,k as M,O as _,m as O,n as D,o as R,p as C}from"./consoleWriter-Bg94CpP2.js";import{r as at,w as it,C as ot,I as nt,L as lt,W as ct,t as ht,u as ut,v as dt,q as pt}from"./consoleWriter-Bg94CpP2.js";import*as F from"zod";import"@anthropic-ai/sdk";import"@google/genai";import"openai";import"serialize-error";import"fs/promises";import"glob";import"node:fs/promises";import"node:path";import"chalk";import"node:readline";class I{static{i(this,"StreamParts")}listeners={start:new Set,text:new Set,thinking:new Set,"tool-call":new Set,"tool-call-complete":new Set,complete:new Set};isComplete=!1;on(t,e){return this.listeners[t].add(e),this}emit(t,...e){const r=this.listeners[t];if(r)for(const a of r)a(...e)}id="";model="";parts=[];finishReason;stats;get partsLength(){return this.parts.length}get currentId(){return this.id}start(t,e){this.id=t,this.model=e,this.emit("start",t)}complete(t,e){if(this.isComplete)return;this.finishReason=t,this.stats=e,this.isComplete=!0;const r=this.parts.filter(s=>s.type==="text").map(s=>s.text).join(""),a={type:"success",role:"assistant",id:this.id,model:this.model,content:this.parts,finishReason:t,usage:e,text:r,raw:{}};this.emit("complete",a)}error(t,e,r,a){if(this.isComplete)return;this.isComplete=!0;const s={type:"error",error:{type:t,message:e},usage:r,raw:a};this.emit("complete",s)}createText(t,e){if(t<this.parts.length)throw new Error(`Cannot create text at index ${t} because it already exists`);this.parts.push({type:"text",text:e}),this.emit("text",e)}updateText(t,e){const r=this.getPart(t,"text");r&&(r.text+=e,this.emit("text",r.text))}createToolCall(t,e,r){if(t<this.parts.length)throw new Error(`Cannot create tool-call at index ${t} because it already exists`);this.parts.push({type:"tool-call",id:e,name:r,parameters:{}}),this.emit("tool-call",e,r)}completeToolCall(t,e){const r=this.getPart(t,"tool-call");r&&(r.parameters=e,this.emit("tool-call-complete",r.id,r.name,e))}createThinking(t,e){if(t<this.parts.length)throw new Error(`Cannot create thinking at index ${t} because it already exists`);this.parts.push({type:"thinking",text:e}),this.emit("thinking",e)}updateThinking(t,e){const r=this.getPart(t,"thinking");r&&(r.text+=e,this.emit("thinking",e))}getPart(t,e){if(t<0||t>=this.parts.length)return null;const r=this.parts[t];return r.type===e?r:null}get currentMessage(){return{role:"assistant",content:[...this.parts],id:this.id,model:this.model,...this.finishReason?{finishReason:this.finishReason}:{}}}}function N(n){const{provider:t,messages:e,system:r,tools:a,recorder:s,options:c}=n,u=t.createStreamingRequest?.({messages:e,system:r,tools:a,context:{recorder:s},options:c});return console.log(u),new $(u)}i(N,"stream");class ${static{i(this,"StreamResultImpl")}constructor(t){this.streamSource=t,this.streamParts=new I,this.finalPromise=new Promise((e,r)=>{this.resolveFinal=e,this.rejectFinal=r}),this.streamParts.on("complete",e=>{this.resolveFinal?.(e)}),this.startProcessing()}streamParts;finalPromise;resolveFinal;rejectFinal;chunkListeners=new Set;processingStarted=!1;async*[Symbol.asyncIterator](){const t=[];let e=null,r=!1;const a=i(s=>{e?(e(s),e=null):t.push(s)},"listener");this.chunkListeners.add(a);try{for(;!r;){let s;t.length>0?s=t.shift():s=await new Promise(c=>{e=c}),s===null?r=!0:(yield s,(s.type==="complete"||s.type==="error")&&(r=!0))}}finally{this.chunkListeners.delete(a)}}async startProcessing(){if(!this.processingStarted){this.processingStarted=!0;try{for await(const t of this.streamSource)switch(this.chunkListeners.forEach(e=>e(t)),t.type){case"start":this.streamParts.start(t.id,t.data.model);break;case"text":const e=t.data.index;e>=this.streamParts.partsLength?this.streamParts.createText(e,t.data.text):this.streamParts.updateText(e,t.data.text);break;case"thinking-start":this.streamParts.createThinking(t.data.index,"");break;case"thinking-delta":this.streamParts.updateThinking(t.data.index,t.data.text);break;case"tool-call-start":this.streamParts.createToolCall(t.data.index,t.data.id,t.data.name);break;case"tool-call-complete":this.streamParts.completeToolCall(t.data.index,t.data.arguments);break;case"complete":this.streamParts.complete(t.data.finishReason,t.data.usage);break;case"error":this.streamParts.error(t.data.type,t.data.message,t.data.usage,t.data.raw);return}}catch(t){this.rejectFinal?.(t instanceof Error?t:new Error(String(t)))}finally{this.chunkListeners.forEach(t=>t(null))}}}get final(){return this.finalPromise}get current(){return this.streamParts.currentMessage}}class j{static{i(this,"Axle")}provider;stats={in:0,out:0};variables={};recorder=new g;constructor(t){if(Object.entries(t).length!==1)throw new o("Must have exactly one config");try{const e=Object.keys(t)[0],r=t[e];this.provider=f(e,r)}catch(e){throw e instanceof o?e:new o("Failed to initialize provider",{code:"PROVIDER_INIT_ERROR",cause:e instanceof Error?e:new Error(String(e))})}}addWriter(t){this.recorder.subscribe(t)}async execute(...t){try{let e;return e=await d(...t).execute({provider:this.provider,variables:this.variables,stats:this.stats,recorder:this.recorder}),e}catch(e){const r=e instanceof o?e:new o("Execution failed",{cause:e instanceof Error?e:new Error(String(e))});return this.recorder.error?.log(r),{response:null,error:r,success:!1}}}async executeDAG(t,e={},r){try{return await p(t,r).execute({provider:this.provider,variables:{...this.variables,...e},stats:this.stats,recorder:this.recorder})}catch(a){const s=a instanceof o?a:new o("DAG execution failed",{cause:a instanceof Error?a:new Error(String(a))});return this.recorder.error?.log(s),{response:null,error:s,success:!1}}}get logs(){return this.recorder.getLogs()}static async loadFileContent(t,e){return e==="utf-8"?h(t,"utf-8"):e==="base64"?h(t,"base64"):h(t)}}class l extends w{static{i(this,"ChainOfThought")}constructor(t,e){super(t,e)}static with(t,e){if(!e)return new l(t,{response:F.string()});if(x(e))return new l(t,e);{const r=k(e);return new l(t,r)}}createInstructions(t=""){return super.createInstructions(`Let's think step by step. Use <thinking></thinking> tags to show your reasoning and thought process.
|
|
2
2
|
|
|
3
|
-
`)}finalize(t,e={}){const r=super.finalize(t,e),a=this.parseTaggedSections(t);let s="thinking";return"thinking"in a.tags||("think"in a.tags?(s="think",e.recorder?.warn?.log("No <thinking> section found in the response but found <think> instead. This may be a limitation of the model or prompt.")):e.recorder?.warn?.log("No <thinking> section found in the response. Please ensure your response includes a <thinking> tag.")),{...r,thinking:a.tags[s]||""}}}export{
|
|
3
|
+
`)}finalize(t,e={}){const r=super.finalize(t,e),a=this.parseTaggedSections(t);let s="thinking";return"thinking"in a.tags||("think"in a.tags?(s="think",e.recorder?.warn?.log("No <thinking> section found in the response but found <think> instead. This may be a limitation of the model or prompt.")):e.recorder?.warn?.log("No <thinking> section found in the response. Please ensure your response includes a <thinking> tag.")),{...r,thinking:a.tags[s]||""}}}var U=Object.freeze({__proto__:null,DEFAULT_MODEL:E,Models:v,NAME:y,Provider:P}),z=Object.freeze({__proto__:null,DEFAULT_MODEL:b,Models:L,NAME:A,Provider:T}),W=Object.freeze({__proto__:null,DEFAULT_OLLAMA_URL:S,NAME:M,Provider:_}),G=Object.freeze({__proto__:null,DEFAULT_MODEL:O,Models:D,NAME:R,Provider:C});export{U as Anthropic,j as Axle,at as AxleStopReason,l as ChainOfThought,it as ConsoleWriter,ot as Conversation,z as Gemini,nt as Instruct,lt as LogLevel,W as Ollama,G as OpenAI,ct as WriteToDisk,ht as braveSearchTool,ut as calculatorTool,dt as concurrentWorkflow,p as dagWorkflow,pt as generate,d as serialWorkflow,N as stream};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fifthrevision/axle",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.5",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/johncch/axle.git"
|
|
@@ -22,10 +22,12 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"scripts": {
|
|
25
|
+
"prepare": "npm run build",
|
|
25
26
|
"start": "tsx ./src/cli.ts",
|
|
26
27
|
"build": "pkgroll --clean-dist --minify",
|
|
28
|
+
"build:watch": "pkgroll --watch",
|
|
27
29
|
"build-dev": "pkgroll --clean-dist",
|
|
28
|
-
"test": "
|
|
30
|
+
"test": "vitest run",
|
|
29
31
|
"get-models": "npx tsx scripts/getModels.ts",
|
|
30
32
|
"prompt-scenarios": "npx tsx ./scripts/prompt.scenarios.ts",
|
|
31
33
|
"test-providers": "npx tsx ./scripts/testProviders.ts",
|
|
@@ -35,28 +37,24 @@
|
|
|
35
37
|
"author": "",
|
|
36
38
|
"license": "ISC",
|
|
37
39
|
"dependencies": {
|
|
38
|
-
"@anthropic-ai/sdk": "^0.
|
|
40
|
+
"@anthropic-ai/sdk": "^0.71.0",
|
|
39
41
|
"@commander-js/extra-typings": "^14.0.0",
|
|
40
|
-
"@google/genai": "^1.
|
|
42
|
+
"@google/genai": "^1.30.0",
|
|
41
43
|
"chalk": "^5.6.2",
|
|
42
44
|
"commander": "^14.0.2",
|
|
43
|
-
"glob": "^
|
|
44
|
-
"openai": "^6.
|
|
45
|
+
"glob": "^13.0.0",
|
|
46
|
+
"openai": "^6.9.1",
|
|
45
47
|
"serialize-error": "^12.0.0",
|
|
46
|
-
"yaml": "^2.8.
|
|
47
|
-
"zod": "^4.1.
|
|
48
|
+
"yaml": "^2.8.2",
|
|
49
|
+
"zod": "^4.1.13"
|
|
48
50
|
},
|
|
49
51
|
"devDependencies": {
|
|
50
|
-
"@jest/globals": "^29.7.0",
|
|
51
|
-
"@types/jest": "^29.5.14",
|
|
52
52
|
"dotenv": "^17.2.3",
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"pkgroll": "^2.20.1",
|
|
56
|
-
"prettier": "^3.6.2",
|
|
53
|
+
"pkgroll": "^2.21.4",
|
|
54
|
+
"prettier": "^3.7.3",
|
|
57
55
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
56
|
+
"tsx": "^4.21.0",
|
|
57
|
+
"typescript": "^5.9.3",
|
|
58
|
+
"vitest": "^4.0.14"
|
|
61
59
|
}
|
|
62
60
|
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
var ze=Object.defineProperty;var l=(t,e)=>ze(t,"name",{value:e,configurable:!0});import Xe from"@anthropic-ai/sdk";import*as I from"zod";import F,{z as q}from"zod";import{FinishReason as O,GoogleGenAI as Ze}from"@google/genai";import Ye from"openai";import{serializeError as Qe}from"serialize-error";import{readFile as Ve,access as et,constants as tt}from"fs/promises";import{glob as ue}from"glob";import{readFile as U,access as le,stat as nt,writeFile as st,mkdir as rt}from"node:fs/promises";import{resolve as te,extname as fe,dirname as ot}from"node:path";import T from"chalk";import pe from"node:readline";class A extends Error{static{l(this,"AxleError")}code;id;details;constructor(e,n){super(e,{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 it(t){const{text:e,files:n}=t,s=[];if(e&&s.push({type:"text",text:e}),n)for(const r of n)s.push({type:"file",file:r});return s}l(it,"toContentParts");function G(t){return typeof t=="string"?t:t.filter(e=>e.type==="text").map(e=>e.text).join(`
|
|
2
|
-
|
|
3
|
-
`)}l(G,"getTextContent");function at(t){return t.filter(e=>e.type==="tool-call")}l(at,"getToolCalls");var y=(t=>(t[t.Stop=0]="Stop",t[t.Length=1]="Length",t[t.FunctionCall=2]="FunctionCall",t[t.Error=3]="Error",t[t.Custom=4]="Custom",t))(y||{});function W(t){if(t==null)return{type:"error",error:{type:"Undetermined",message:"Unknown error occurred"},usage:{in:0,out:0},raw:t};if(t instanceof Error)return{type:"error",error:{type:t.name||"Error",message:t.message||"Unexpected error"},usage:{in:0,out:0},raw:t};if(typeof t=="object"){const e=t,n=e?.error?.error?.type||e?.error?.type||e?.type||e?.code||e?.status||"Undetermined",s=e?.error?.error?.message||e?.error?.message||e?.message||e?.error||"Unexpected error";return{type:"error",error:{type:String(n),message:String(s)},usage:{in:0,out:0},raw:t}}return{type:"error",error:{type:"Undetermined",message:String(t)},usage:{in:0,out:0},raw:t}}l(W,"getUndefinedError");function de(t){return t.map(e=>{if(e.role==="assistant"){const n=[];for(const s of e.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="thinking"?s.redacted?n.push({type:"redacted_thinking",data:s.text}):n.push({type:"thinking",thinking:s.text,signature:s.signature}):s.type==="tool-call"&&n.push({type:"tool_use",id:s.id,name:s.name,input:s.parameters});return{role:"assistant",content:n}}if(e.role==="tool")return{role:"user",content:e.content.map(n=>({type:"tool_result",tool_use_id:n.id,content:n.content}))};if(typeof e.content=="string")return{role:"user",content:e.content};{const n=[];for(const s of e.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="file"&&(s.file.type==="image"?n.push({type:"image",source:{type:"base64",media_type:s.file.mimeType,data:s.file.base64}}):s.file.type==="document"&&s.file.mimeType==="application/pdf"&&n.push({type:"document",source:{type:"base64",media_type:"application/pdf",data:s.file.base64}}));return{role:"user",content:n}}})}l(de,"convertToProviderMessages");function _e(t){return t.map(e=>{const n=F.toJSONSchema(e.schema);if(!ct(n))throw new Error(`Schema for tool ${e.name} must be an object type`);return{name:e.name,description:e.description,input_schema:n}})}l(_e,"convertToProviderTools");function ge(t){const e=[];for(const n of t)if(n.type==="text")e.push({type:"text",text:n.text});else if(n.type==="thinking")e.push({type:"thinking",text:n.text||"",redacted:!1});else if(n.type==="redacted_thinking")e.push({type:"thinking",text:n.text||"",redacted:!0});else if(n.type==="tool_use"){if(typeof n.input!="object"||n.input===null||Array.isArray(n.input))throw new Error(`Invalid tool call input for ${n.name}: expected object, got ${typeof n.input}`);e.push({type:"tool-call",id:n.id,name:n.name,parameters:n.input})}return e}l(ge,"convertToAxleContentParts");function ne(t){switch(t){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(ne,"convertStopReason$2");function ct(t){return t&&typeof t=="object"&&t.type==="object"}l(ct,"isObjectSchema");async function ut(t){const{client:e,model:n,messages:s,system:r,tools:o,context:i,options:c}=t,{recorder:u}=i,a=c?{...c}:{};a.stop&&(a.stop_sequences=Array.isArray(a.stop)?a.stop:[a.stop],delete a.stop);const p={model:n,max_tokens:4096,messages:de(s),...r&&{system:r},...o&&{tools:_e(o)},...a};u?.debug?.log(p);let d;try{const f=await e.messages.create(p);d=lt(f)}catch(f){d=W(f)}return u?.debug?.log(d),d}l(ut,"createGenerationRequest$2");function lt(t){const e=ne(t.stop_reason);if(e===y.Error)return{type:"error",error:{type:"Uncaught error",message:`Stop reason is not recognized or unhandled: ${t.stop_reason}`},usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t};if(e===y.FunctionCall){const n=ge(t.content);return{type:"success",id:t.id,model:t.model,role:t.role,finishReason:y.FunctionCall,content:n,text:G(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}if(t.type=="message"){const n=ge(t.content);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:e,content:n,text:G(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}}l(lt,"convertToAIResponse");function ft(){const t=new Map;function e(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:ne(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;t.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=t.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=t.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)}`)}t.delete(n.index)}break;default:console.warn("Unknown Anthropic stream event type")}return s}return l(e,"handleEvent"),{handleEvent:e}}l(ft,"createAnthropicStreamingAdapter");async function*pt(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c}=t,{recorder:u}=i,a=c?{...c}:{};a.stop&&(a.stop_sequences=Array.isArray(a.stop)?a.stop:[a.stop],delete a.stop);const p={model:n,max_tokens:4096,messages:de(s),...r&&{system:r},...o&&{tools:_e(o)},...a};u?.debug?.log(p);const d=ft();try{const f=await e.messages.create({...p,stream:!0});for await(const _ of f){const m=d.handleEvent(_);for(const w of m)yield w}}catch(f){yield{type:"error",data:{type:"STREAMING_ERROR",message:f instanceof Error?f.message:String(f),raw:f}}}}l(pt,"createStreamingRequest$3");const S={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"};S.CLAUDE_SONNET_4_5_20250929,S.CLAUDE_SONNET_4_5_LATEST,S.CLAUDE_HAIKU_4_5,S.CLAUDE_OPUS_4_1_20250805,S.CLAUDE_OPUS_4_1_LATEST,S.CLAUDE_OPUS_4_20250514,S.CLAUDE_OPUS_4_LATEST,S.CLAUDE_SONNET_4_20250514,S.CLAUDE_SONNET_4_LATEST,S.CLAUDE_3_7_SONNET_20250219,S.CLAUDE_3_7_SONNET_LATEST,S.CLAUDE_3_5_SONNET_20241022,S.CLAUDE_3_5_HAIKU_20241022,S.CLAUDE_3_5_HAIKU_LATEST,S.CLAUDE_3_5_SONNET_20240620;const me=S.CLAUDE_HAIKU_4_5,he="anthorpic";class dt{static{l(this,"AnthropicProvider")}name=he;client;model;constructor(e,n){this.model=n??me,this.client=new Xe({apiKey:e})}async createGenerationRequest(e){return await ut({client:this.client,model:this.model,...e})}createStreamingRequest(e){const{messages:n,system:s,tools:r,context:o,options:i}=e;return pt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:i})}}function ye(t,e,n){const s={};return e&&(s.systemInstruction=e),t&&t.length>0&&(s.tools=t.map(r=>({functionDeclarations:[{name:r.name,description:r.description,parametersJsonSchema:F.toJSONSchema(r.schema)}]}))),n&&Object.assign(s,n),s}l(ye,"prepareConfig");function Ee(t){return t.map(_t).filter(e=>e!==void 0)}l(Ee,"convertAxleMessagesToGemini");function _t(t){switch(t.role){case"tool":return gt(t);case"assistant":return mt(t);case"user":return ht(t)}}l(_t,"convertMessage$3");function gt(t){return{role:"user",parts:t.content.map(e=>({functionResponse:{id:e.id??void 0,name:e.name,response:{output:e.content}}}))}}l(gt,"convertToolMessage$3");function mt(t){const e=[],n=t.content.filter(r=>r.type==="text");if(n.length>0){const r=n.map(o=>o.text).join("");r&&e.push({text:r})}const s=t.content.filter(r=>r.type==="tool-call");return s.length>0&&e.push(...s.map(r=>({functionCall:{id:r.id??void 0,name:r.name,args:r.parameters}}))),{role:"assistant",parts:e}}l(mt,"convertAssistantMessage$3");function ht(t){return typeof t.content=="string"?{role:"user",parts:[{text:t.content}]}:{role:"user",parts:t.content.map(yt).filter(n=>n!==null)}}l(ht,"convertUserMessage$3");function yt(t){return t.type==="text"||t.type==="instructions"?{text:t.type==="text"?t.text:t.instructions}:t.type==="file"&&(t.file.type==="image"||t.file.type==="document")?{inlineData:{mimeType:t.file.mimeType,data:t.file.base64}}:null}l(yt,"convertContentPart$3");function Ie(t){switch(t){case O.STOP:return[!0,y.Stop];case O.MAX_TOKENS:return[!0,y.Length];case O.FINISH_REASON_UNSPECIFIED:case O.SAFETY:case O.RECITATION:case O.LANGUAGE:case O.OTHER:case O.BLOCKLIST:case O.PROHIBITED_CONTENT:case O.SPII:case O.MALFORMED_FUNCTION_CALL:case O.IMAGE_SAFETY:return[!1,y.Error]}}l(Ie,"convertStopReason$1");async function Et(t){const{client:e,model:n,messages:s,system:r,tools:o,context:i,options:c}=t,{recorder:u}=i,a=c?{...c}:{};a.max_tokens&&(a.maxOutputTokens=a.max_tokens,delete a.max_tokens),a.stop&&(a.stopSequences=Array.isArray(a.stop)?a.stop:[a.stop],delete a.stop),a.top_p!==void 0&&(a.topP=a.top_p,delete a.top_p);const p={contents:Ee(s),config:ye(o,r,a)};u?.debug?.log(p);let d;try{const f=await e.models.generateContent({model:n,...p});d=It(f,{recorder:u})}catch(f){u?.error?.log(f),d=W(f)}return u?.debug?.log(d),d}l(Et,"createGenerationRequest$1");function It(t,e){const{recorder:n}=e,s=t.usageMetadata.promptTokenCount,r=t.usageMetadata.totalTokenCount-s,o={in:s,out:r};if(!t)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:t};if(t.promptFeedback&&t.promptFeedback.blockReason)return{type:"error",error:{type:"Blocked",message:`Response blocked by Google AI: ${t.promptFeedback.blockReason}, ${t.promptFeedback.blockReasonMessage}`},usage:o,raw:t};if(!t.candidates||t.candidates.length===0)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:t};t.candidates.length>1&&n?.warn?.log(`We received ${t.candidates.length} response candidates`);const i=t.candidates[0],u=(i.content?.parts||[]).map(d=>d.text).filter(d=>d!==void 0).join(""),[a,p]=Ie(i.finishReason);if(a){const d=[];if(u&&d.push({type:"text",text:u}),t.functionCalls)for(const f of t.functionCalls){if(typeof f.args!="object"||f.args===null||Array.isArray(f.args))throw new Error(`Invalid tool call arguments for ${f.name}: expected object, got ${typeof f.args}`);d.push({type:"tool-call",id:f.id,name:f.name,parameters:f.args})}return{type:"success",id:t.responseId,model:t.modelVersion,role:"assistant",finishReason:t.functionCalls?y.FunctionCall:p,content:d,text:G(d)??"",usage:o,raw:t}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${p}`},usage:o,raw:t}}l(It,"fromModelResponse$3");function wt(){let t=0,e=-1,n="",s="",r=0,o=0;function i(c){const u=[];n||(n=c.responseId||`gemini-${Date.now()}`,s=c.modelVersion||"gemini",u.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}})),c.usageMetadata&&(r=c.usageMetadata.promptTokenCount||0,o=(c.usageMetadata.totalTokenCount||0)-r);const a=c.candidates?.[0];if(!a)return u;const p=a.content?.parts||[];for(const d of p){const f="thought"in d&&d.thought===!0;if(f&&d.text?(e===-1&&(e=t+1,u.push({type:"thinking-start",data:{index:e}})),u.push({type:"thinking-delta",data:{index:e,text:d.text}})):d.text&&!f&&u.push({type:"text",data:{text:d.text,index:t}}),d.functionCall){t++;const _=`tool-${t}`;u.push({type:"tool-call-start",data:{index:t,id:_,name:d.functionCall.name}}),u.push({type:"tool-call-complete",data:{index:t,id:_,name:d.functionCall.name,arguments:d.functionCall.args}})}}if(a.finishReason){const[d,f]=Ie(a.finishReason);d?u.push({type:"complete",data:{finishReason:f,usage:{in:r,out:o}}}):u.push({type:"error",data:{type:"FinishReasonError",message:`Unexpected finish reason: ${a.finishReason}`,usage:{in:r,out:o},raw:c}})}return u}return l(i,"handleChunk"),{handleChunk:i}}l(wt,"createGeminiStreamingAdapter");async function*Tt(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c}=t,{recorder:u}=i,a=c?{...c}:{};a.max_tokens&&(a.maxOutputTokens=a.max_tokens,delete a.max_tokens),a.stop&&(a.stopSequences=Array.isArray(a.stop)?a.stop:[a.stop],delete a.stop),a.top_p!==void 0&&(a.topP=a.top_p,delete a.top_p);const p={contents:Ee(s),config:ye(o,r,a)};u?.debug?.log(p);const d=wt();try{const f=await e.models.generateContentStream({model:n,...p});for await(const _ of f){const m=d.handleChunk(_);for(const w of m)yield w}}catch(f){u?.error?.log(f),yield{type:"error",data:{type:"STREAMING_ERROR",message:f instanceof Error?f.message:String(f),raw:f}}}}l(Tt,"createStreamingRequest$2");const h={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"};h.GEMINI_2_5_PRO,h.GEMINI_2_5_FLASH,h.GEMINI_2_5_FLASH_PREVIEW_05_20,h.GEMINI_2_5_FLASH_LITE,h.GEMINI_2_5_FLASH_LITE_PREVIEW_06_17,h.GEMINI_2_5_FLASH_LIVE_PREVIEW,h.GEMINI_2_5_FLASH_PREVIEW_NATIVE_AUDIO_DIALOG,h.GEMINI_2_5_FLASH_EXP_NATIVE_AUDIO_THINKING_DIALOG,h.GEMINI_2_5_FLASH_IMAGE_PREVIEW,h.GEMINI_2_0_FLASH,h.GEMINI_2_0_FLASH_001,h.GEMINI_2_0_FLASH_EXP,h.GEMINI_2_0_FLASH_PREVIEW_IMAGE_GENERATION,h.GEMINI_2_0_FLASH_LITE,h.GEMINI_2_0_FLASH_LITE_001,h.GEMINI_2_0_FLASH_LIVE_001,h.GEMINI_1_5_PRO,h.GEMINI_1_5_PRO_LATEST,h.GEMINI_1_5_PRO_001,h.GEMINI_1_5_PRO_002,h.GEMINI_1_5_FLASH,h.GEMINI_1_5_FLASH_LATEST,h.GEMINI_1_5_FLASH_001,h.GEMINI_1_5_FLASH_002,h.GEMINI_1_5_FLASH_8B,h.GEMINI_1_5_FLASH_8B_LATEST,h.GEMINI_1_5_FLASH_8B_001,h.GEMMA_3N_E4B_IT,h.GEMMA_3_1B_IT,h.GEMMA_3_4B_IT,h.GEMMA_3_12B_IT,h.GEMMA_3_27B_IT,h.LEARNLM_2_0_FLASH_EXPERIMENTAL;const we=h.GEMINI_2_5_FLASH,Te="Gemini";class xt{static{l(this,"GeminiProvider")}name=Te;client;model;constructor(e,n){this.model=n??we,this.client=new Ze({apiKey:e})}async createGenerationRequest(e){return await Et({client:this.client,model:this.model,...e})}createStreamingRequest(e){const{messages:n,system:s,tools:r,context:o,options:i}=e;return Tt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:i})}}function xe(t){return t.map(At).flat(1)}l(xe,"convertAxleMessagesToOllama");function Ae(t){return t&&t.length>0?t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:F.toJSONSchema(e.schema)}})):void 0}l(Ae,"convertToolDefToOllama");function At(t){switch(t.role){case"tool":return St(t);case"assistant":return kt(t);default:return Rt(t)}}l(At,"convertMessage$2");function St(t){return t.content.map(e=>({role:"tool",tool_call_id:e.id,content:e.content}))}l(St,"convertToolMessage$2");function kt(t){const e=t.content.filter(r=>r.type==="tool-call"),n=t.content.filter(r=>r.type==="text"),s=e.length>0?e.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:r.parameters}})):void 0;return{role:t.role,content:n.map(r=>r.text).join(""),...s&&{toolCalls:s}}}l(kt,"convertAssistantMessage$2");function Rt(t){if(typeof t.content=="string")return{role:t.role,content:t.content};{const e=[],n=[];for(const s of t.content){const r=Pt(s);r.text!==null&&e.push(r.text),r.image!==null&&n.push(r.image)}return{role:t.role,content:e.join(""),...n.length>0&&{images:n}}}}l(Rt,"convertUserMessage$2");function Pt(t){return t.type==="text"||t.type==="instructions"?{text:t.type==="text"?t.text:t.instructions,image:null}:t.type==="file"&&t.file.type==="image"?{text:null,image:t.file.base64}:{text:null,image:null}}l(Pt,"convertContentPart$2");async function Ot(t){const{url:e,model:n,messages:s,system:r,tools:o,context:i,options:c}=t,{recorder:u}=i,a=Ae(o),p=c?{...c}:{temperature:.7};p.max_tokens&&(p.num_predict=p.max_tokens,delete p.max_tokens);const d={model:n,messages:xe(s),stream:!1,options:p,...r&&{system:r},...a&&{tools:a}};u?.debug?.log(d);let f;try{const _=await fetch(`${e}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);const m=await _.json();f=bt(m)}catch(_){u?.error?.log("Error fetching Ollama response:",_),f=W(_)}return u?.debug?.log(f),f}l(Ot,"createGenerationRequest");function bt(t){if(t.done_reason==="stop"&&t.message){const e=[];if(t.message.content!==void 0&&e.push({type:"text",text:t.message.content}),t.message.tool_calls)for(const s of t.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}`);e.push({type:"tool-call",id:s.id,name:s.function.name,parameters:s.function.arguments})}const n=e.some(s=>s.type==="tool-call");return{type:"success",id:`ollama-${Date.now()}`,model:t.model,role:"assistant",finishReason:n?y.FunctionCall:y.Stop,content:e,text:G(e)??"",usage:{in:t.prompt_eval_count||0,out:t.eval_count||0},raw:t}}return{type:"error",error:{type:"OllamaError",message:"Unexpected error from Ollama"},usage:{in:0,out:0},raw:t}}l(bt,"fromModelResponse$2");function vt(){let t="",e=0,n=-1,s=0;function r(o){const i=[];if(t||(t=`ollama-${Date.now()}`,i.push({type:"start",id:t,data:{model:o.model,timestamp:Date.now()}})),o.message?.thinking&&(n===-1&&(n=e+1,i.push({type:"thinking-start",data:{index:n}})),i.push({type:"thinking-delta",data:{index:n,text:o.message.thinking}})),o.message?.content&&i.push({type:"text",data:{text:o.message.content,index:e}}),o.message?.tool_calls)for(const c of o.message.tool_calls){s++;const u=c.id||`tool-${s}`;if(typeof c.function.arguments!="object"||c.function.arguments===null||Array.isArray(c.function.arguments))throw new Error(`Invalid tool call arguments for ${c.function.name}: expected object, got ${typeof c.function.arguments}`);i.push({type:"tool-call-start",data:{index:s,id:u,name:c.function.name}}),i.push({type:"tool-call-complete",data:{index:s,id:u,name:c.function.name,arguments:c.function.arguments}})}if(o.done){const c=Nt(o.done_reason);i.push({type:"complete",data:{finishReason:c,usage:{in:o.prompt_eval_count||0,out:o.eval_count||0}}})}return i}return l(r,"handleChunk"),{handleChunk:r}}l(vt,"createOllamaStreamingAdapter");function Nt(t){switch(t){case"stop":return y.Stop;case"length":return y.Length;default:return y.Stop}}l(Nt,"convertStopReason");async function*$t(t){const{url:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c}=t,{recorder:u}=i,a=Ae(o),p=c?{...c}:{temperature:.7};p.max_tokens&&(p.num_predict=p.max_tokens,delete p.max_tokens);const d={model:n,messages:xe(s),stream:!0,options:p,...r&&{system:r},...a&&{tools:a}};u?.debug?.log(d);const f=vt();try{const _=await fetch(`${e}/api/chat`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(d)});if(!_.ok)throw new Error(`HTTP error! status: ${_.status}`);if(!_.body)throw new Error("Response body is null");const m=_.body.getReader(),w=new TextDecoder;let k="";for(;;){const{done:P,value:M}=await m.read();if(P)break;k+=w.decode(M,{stream:!0});const v=k.split(`
|
|
4
|
-
`);k=v.pop()||"";for(const $ of v)if($.trim())try{const R=JSON.parse($),D=f.handleChunk(R);for(const N of D)yield N}catch(R){u?.error?.log("Error parsing Ollama stream chunk:",R,$)}}}catch(_){u?.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",Mt="Ollama";class Gt{static{l(this,"OllamaProvider")}name="Ollama";url;model;recorder;constructor(e,n){this.url=n||Se,this.model=e}async createGenerationRequest(e){return await Ot({url:this.url,model:this.model,...e})}createStreamingRequest(e){const{messages:n,system:s,tools:r,context:o,options:i}=e;return $t({url:this.url,model:this.model,messages:n,system:s,tools:r,runtime:o,options:i})}}function ke(t){if(t&&t.length>0)return t.map(e=>{const n=F.toJSONSchema(e.schema);return{type:"function",function:{name:e.name,description:e.description,parameters:n}}})}l(ke,"toModelTools");function Re(t,e){const n=t.map(Ct).flat(1);return e?[{role:"system",content:e},...n]:n}l(Re,"convertAxleMessagesToChatCompletion");function Ct(t){switch(t.role){case"tool":return Lt(t);case"assistant":return Dt(t);default:return Ft(t)}}l(Ct,"convertMessage$1");function Lt(t){return t.content.map(e=>({role:"tool",tool_call_id:e.id,content:e.content}))}l(Lt,"convertToolMessage$1");function Dt(t){const e=t.content.filter(r=>r.type==="tool-call"),n=t.content.filter(r=>r.type==="text"),s=e.length>0?e.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:JSON.stringify(r.parameters)}})):void 0;return{role:t.role,content:n.map(r=>r.text).join(""),...s&&{tool_calls:s}}}l(Dt,"convertAssistantMessage$1");function Ft(t){if(typeof t.content=="string")return{role:t.role,content:t.content};{const e=t.content.map(Ut).filter(n=>n!==null);return{role:t.role,content:e}}}l(Ft,"convertUserMessage$1");function Ut(t){if(t.type==="text"||t.type==="instructions")return{type:"text",text:t.type==="text"?t.text:t.instructions};if(t.type==="file"){if(t.file.type==="image")return{type:"image_url",image_url:{url:`data:${t.file.mimeType};base64,${t.file.base64}`}};if(t.file.type==="document")return{type:"file",file:{filename:t.file.name,file_data:`data:${t.file.mimeType};base64,${t.file.base64}`}}}return null}l(Ut,"convertContentPart$1");async function Wt(t){const{client:e,model:n,messages:s,system:r,tools:o,context:i,options:c}=t,{recorder:u}=i;let a=ke(o);const p={model:n,messages:Re(s,r),...a&&{tools:a},...c};u?.debug?.log(p);let d;try{const f=await e.chat.completions.create(p);d=Ht(f)}catch(f){u?.error?.log(f),d=W(f)}return u?.debug?.log(d),d}l(Wt,"createGenerationRequestWithChatCompletion");function Ht(t){if(t.choices.length>0){const e=t.choices[0],n=[];if(e.message.content&&n.push({type:"text",text:e.message.content}),e.message.tool_calls){for(const s of e.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:t.id,model:t.model,role:e.message.role,finishReason:ne(e.finish_reason),content:n,text:G(n)??"",usage:{in:t.usage?.prompt_tokens??0,out:t.usage?.completion_tokens??0},raw:t}}return{type:"error",error:{type:"undetermined",message:"Unexpected response from OpenAI"},usage:{in:t.usage?.prompt_tokens??0,out:t.usage?.completion_tokens??0},raw:t}}l(Ht,"fromModelResponse$1");function Bt(){const t=new Map;let e=0,n="",s="";function r(o){const i=[],c=o.choices[0];if(!c)return i;n||(n=o.id,s=o.model,i.push({type:"start",id:n,data:{model:s,timestamp:Date.now()}}));const u=c.delta;if(u.content&&i.push({type:"text",data:{text:u.content,index:e}}),u.tool_calls)for(const a of u.tool_calls){const p=a.index;if(!t.has(p)){const f=e+p+1,_=a.id||`tool-${f}`;t.set(p,{id:_,name:a.function?.name||"",argumentsBuffer:""}),i.push({type:"tool-call-start",data:{index:f,id:_,name:a.function?.name||""}})}const d=t.get(p);a.id&&(d.id=a.id),a.function?.name&&(d.name=a.function.name),a.function?.arguments&&(d.argumentsBuffer+=a.function.arguments)}if(c.finish_reason){for(const[p,d]of t){const f=e+p+1;try{const _=JSON.parse(d.argumentsBuffer);i.push({type:"tool-call-complete",data:{index:f,id:d.id,name:d.name,arguments:_}})}catch(_){throw new Error(`Failed to parse tool call arguments for ${d.name}: ${_ instanceof Error?_.message:String(_)}`)}}const a=qt(c.finish_reason);i.push({type:"complete",data:{finishReason:a,usage:o.usage?{in:o.usage.prompt_tokens,out:o.usage.completion_tokens}:{in:0,out:0}}})}return i}return l(r,"handleChunk"),{handleChunk:r}}l(Bt,"createChatCompletionStreamingAdapter");function qt(t){switch(t){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(qt,"convertFinishReason");function Jt(){let t="",e="",n=0,s=0,r=0;const o=new Map,i=new Set;function c(u){const a=[];switch(u.type){case"response.created":{t=u.response.id||`openai-${Date.now()}`,e=u.response.model,a.push({type:"start",id:t,data:{model:e,timestamp:Date.now()}});break}case"response.output_text.delta":{a.push({type:"text",data:{text:u.delta,index:n}});break}case"response.function_call_arguments.delta":{const p=u.item_id;o.has(p)||(s++,o.set(p,{id:p,name:"",argumentsBuffer:""}),a.push({type:"tool-call-start",data:{index:s,id:p,name:""}}));const d=o.get(p);d.argumentsBuffer+=u.delta;break}case"response.function_call_arguments.done":{const p=u.item_id;if(o.get(p)){try{const f=JSON.parse(u.arguments);a.push({type:"tool-call-complete",data:{index:s,id:p,name:u.name,arguments:f}})}catch(f){throw new Error(`Failed to parse function call arguments for ${u.name}: ${f instanceof Error?f.message:String(f)}`)}o.delete(p)}break}case"response.completed":{const p=u.response.usage;a.push({type:"complete",data:{finishReason:u.response.incomplete_details?y.Error:y.Stop,usage:{in:p?.input_tokens||0,out:p?.output_tokens||0}}});break}case"response.failed":{a.push({type:"error",data:{type:"RESPONSES_API_ERROR",message:`Response failed: ${u.response.status}`,raw:u}});break}case"response.output_item.added":{if(u.item?.type==="reasoning"){const p=u.item.id;i.add(p),r++,a.push({type:"thinking-start",data:{index:r}})}break}case"response.reasoning_text.delta":{u.delta&&a.push({type:"thinking-delta",data:{index:r,text:u.delta}});break}case"response.reasoning_summary_text.delta":{u.delta&&a.push({type:"thinking-delta",data:{index:r,text:u.delta}});break}case"response.output_item.done":{if(u.item?.type==="reasoning"){const p=u.item.id;i.delete(p)}break}}return a}return l(c,"handleEvent"),{handleEvent:c}}l(Jt,"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"},Pe=[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],Oe=g.GPT_5;function be(t){if(t&&t.length>0)return t.map(e=>{const n=F.toJSONSchema(e.schema);return{type:"function",strict:!0,name:e.name,description:e.description,parameters:n}})}l(be,"prepareTools");function ve(t){return t.map(jt).flat(1)}l(ve,"convertAxleMessageToResponseInput");function jt(t){switch(t.role){case"tool":return Kt(t);case"assistant":return zt(t);default:return Xt(t)}}l(jt,"convertMessage");function Kt(t){return t.content.map(e=>({type:"function_call_output",call_id:e.id,output:e.content}))}l(Kt,"convertToolMessage");function zt(t){const e=[],n=t.content.filter(i=>i.type==="thinking");if(n.length>0)for(const i of n)e.push({type:"reasoning",id:`reasoning_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,summary:[{type:"summary_text",text:i.text}]});const s=G(t.content),r=t.content.filter(i=>i.type==="tool-call"),o=r.length>0?r.map(i=>({type:"function",id:i.id,function:{name:i.name,arguments:JSON.stringify(i.parameters)}})):void 0;return(s||o)&&e.push({role:t.role,content:s,...o&&{toolCalls:o}}),e}l(zt,"convertAssistantMessage");function Xt(t){if(typeof t.content=="string")return{role:t.role,content:t.content};{const e=t.content.map(Zt).filter(n=>n!==null);return{role:t.role,content:e}}}l(Xt,"convertUserMessage");function Zt(t){if(t.type==="text")return{type:"input_text",text:t.text};if(t.type==="file"){if(t.file.type==="image")return{type:"input_image",image_url:`data:${t.file.mimeType};base64,${t.file.base64}`,detail:"auto"};if(t.file.type==="document")return{type:"input_file",filename:t.file.path,file_data:`data:${t.file.mimeType};base64,${t.file.base64}`}}return t.type==="thinking",null}l(Zt,"convertContentPart");async function*Yt(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c}=t,{recorder:u}=i;Pe.includes(n)?yield*Vt({client:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c}):yield*Qt({client:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c})}l(Yt,"createStreamingRequest");async function*Qt(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c}=t,{recorder:u}=i,a=ke(o),p={model:n,messages:Re(s,r),...a&&{tools:a},...c,stream:!0};u?.debug?.log(p);const d=Bt();try{const f=await e.chat.completions.create(p);for await(const _ of f){const m=d.handleChunk(_);for(const w of m)yield w}}catch(f){u?.error?.log(f),yield{type:"error",data:{type:"STREAMING_ERROR",message:f instanceof Error?f.message:String(f),raw:f}}}}l(Qt,"createChatCompletionStream");async function*Vt(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:i,options:c}=t,{recorder:u}=i;console.log(c);const a=be(o),p={model:n,input:ve(s),...r&&{instructions:r},stream:!0,...a?{tools:a}:{},...c};u?.debug?.log(p);const d=Jt();try{const f=e.responses.stream(p);for await(const _ of f){const m=d.handleEvent(_);for(const w of m)yield w}}catch(f){u?.error?.log(f),yield{type:"error",data:{type:"STREAMING_ERROR",message:f instanceof Error?f.message:String(f),raw:f}}}}l(Vt,"createResponsesAPIStream");async function en(t){const{client:e,model:n,messages:s,system:r,tools:o,context:i,options:c}=t,{recorder:u}=i,a=be(o),p={model:n,input:ve(s),...r&&{instructions:r},...a?{tools:a}:{},...c};u?.debug?.log(p);let d;try{const f=await e.responses.create(p);d=tn(f)}catch(f){u?.error?.log(f),d=W(f)}return u?.debug?.log(d),d}l(en,"createGenerationRequestWithResponsesAPI");function tn(t){if(t.error)return{type:"error",error:{type:t.error.code||"undetermined",message:t.error.message||"Response generation failed"},usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t};const e=t.output?.filter(r=>r.type==="reasoning")?.map(r=>r),n=[];if(e&&e.length>0)for(const r of e){const 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}})}t.output_text&&n.push({type:"text",text:t.output_text});const s=t.output?.filter(r=>r.type==="function_call");if(s&&s.length>0)for(const r of s){const o=r;try{n.push({type:"tool-call",id:o.id||"",name:o.name||"",parameters:o.arguments?JSON.parse(o.arguments):{}})}catch(i){throw new Error(`Failed to parse tool call arguments for ${o.name}: ${i instanceof Error?i.message:String(i)}`)}}return{type:"success",id:t.id,model:t.model||"",role:"assistant",finishReason:t.incomplete_details?y.Error:y.Stop,content:n,text:G(n)??"",usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t}}l(tn,"fromModelResponse");const Ne="OpenAI";class nn{static{l(this,"OpenAIProvider")}name=Ne;client;model;constructor(e,n){this.model=n||Oe,this.client=new Ye({apiKey:e})}async createGenerationRequest(e){return Pe.includes(this.model)?await en({client:this.client,model:this.model,...e}):await Wt({client:this.client,model:this.model,...e})}createStreamingRequest(e){const{messages:n,system:s,tools:r,context:o,options:i}=e;return Yt({client:this.client,model:this.model,messages:n,system:s,tools:r,runtime:o,options:i})}}async function $e(t){const{provider:e,messages:n,system:s,tools:r,recorder:o,options:i}=t;return e.createGenerationRequest({messages:n,system:s,tools:r,context:{recorder:o},options:i})}l($e,"generate");function sn(t,e){if(!e||Object.keys(e).length===0)throw new A(`The provider ${t} is not configured. Please check your configuration.`);switch(t){case"openai":return new nn(e["api-key"],e.model);case"anthropic":return new dt(e["api-key"],e.model);case"gemini":return new xt(e["api-key"],e.model);case"ollama":{const n=e;return new Gt(n.model,n.url)}default:throw new A("The provider is unsupported")}}l(sn,"getProvider");class ae extends A{static{l(this,"TaskError")}constructor(e,n){super(e,{code:"TASK_ERROR",id:n?.id,details:{taskType:n?.taskType,taskIndex:n?.taskIndex,...n?.details},cause:n?.cause}),Object.setPrototypeOf(this,ae.prototype)}}const E={Running:"running",Success:"success",PartialSuccess:"partialSuccess",Fail:"fail"};var x=(t=>(t[t.Trace=10]="Trace",t[t.Debug=20]="Debug",t[t.Info=30]="Info",t[t.Warn=40]="Warn",t[t.Error=50]="Error",t[t.Fatal=60]="Fatal",t))(x||{});class rn{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(e){this.currentLevel=e,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(e){this.writers.includes(e)||this.writers.push(e)}unsubscribe(e){const n=this.writers.indexOf(e);n!==-1&&this.writers.splice(n,1)}publish(e){this.logs.push(e);for(const n of this.writers)n.handleEvent(e)}logFunction(e,n,...s){let r=s.map(o=>typeof o=="string"?{message:o}:o instanceof Error?Qe(o):o);this.publish({level:e,time:Date.now(),kind:n,payload:r})}createLoggingFunction(e){return{log:this.logFunction.bind(this,e,"body"),heading:{log:this.logFunction.bind(this,e,"heading")}}}getLogs(e=x.Info){return this.logs.filter(n=>n.level>=e)}async shutdown(){for(const e of this.writers)typeof e.flush=="function"&&await e.flush()}}async function on(t,e){const{defaults:n,tag:s}=e;let r=null,o="";if(t)try{o=te(t),r=await U(o,{encoding:"utf-8"})}catch{throw new Error(`${s} not found, see --help for details`)}else{for(const i of n.formats)try{o=te(n.name+"."+i),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(t,e){let n="";for(const s of t){const r=await ue(s);e?.debug?.log(`many-files parser. For glob "${s}", found ${r.length} files.`);const o=await Promise.all(r.map(async i=>{const c=await U(i,"utf-8");return i+`:
|
|
5
|
-
`+c}));n+=o.join(`
|
|
6
|
-
`)}return n}l(an,"loadManyFiles");function cn(t,e){t=t.replace("**/*","**");const n=/(?<asterisks>\*{1,2})(?<extension>\.[^\\/]+)?/,s=t.match(n);if(s){let r="";return s.groups?.asterisks.length==1?r+=e.stem:r+=e.dir+e.stem,s.groups?.extension?r+=s.groups.extension:r+=e.ext,t.replace(s[0],r)}return t}l(cn,"replaceFilePattern");function un(t){const e=/(?<name>[^\\/]+)(?<extension>\.[^\\/]+)$/,n=t.match(e);return n&&n.length>0&&n.groups?{abs:t,dir:t.replace(n[0],""),ext:n.groups.extension,stem:n.groups.name,name:n[0]}:null}l(un,"pathToComponents");async function Me(t){const e=ot(t);try{await le(e)}catch{await rt(e),await Me(e)}}l(Me,"ensureDirectoryExistence");async function ln({filePath:t,content:e}){await Me(t),await st(t,e)}l(ln,"writeFileWithDirectories");const J=[".jpg",".jpeg",".png",".gif",".webp",".bmp",".tiff"],j=[".pdf"],K=[".txt",".md",".markdown"],Ge=20*1024*1024;function fn(t){return t.type==="text"}l(fn,"isTextFileInfo");function pn(t){return t.type==="image"||t.type==="document"}l(pn,"isBase64FileInfo");function dn(t){const e=fe(t).toLowerCase();if(K.includes(e))return"utf-8";if(J.includes(e)||j.includes(e))return"base64";{const n=[...K,...J,...j];throw new Error(`Unsupported file type: ${e}. Supported types: ${n.join(", ")}`)}}l(dn,"getEncodingForFile");async function z(t,e){const n=te(t);try{await le(n)}catch{throw new Error(`File not found: ${t}`)}const s=await nt(n);if(s.size>Ge)throw new Error(`File too large: ${s.size} bytes. Maximum allowed: ${Ge} bytes`);const r=fe(n).toLowerCase(),o=n.split("/").pop()||"";if((e||dn(n))==="utf-8"){if(!K.includes(r))throw new Error(`Unsupported text file type: ${r}. Supported types: ${K.join(", ")}`);let c;switch(r){case".txt":c="text/plain";break;case".md":case".markdown":c="text/markdown";break;default:c="text/plain"}const u=await U(n,"utf-8");return{path:n,content:u,mimeType:c,size:s.size,name:o,type:"text"}}else{let c,u;if(J.includes(r))switch(c="image",r){case".jpg":case".jpeg":u="image/jpeg";break;case".png":u="image/png";break;case".gif":u="image/gif";break;case".webp":u="image/webp";break;case".bmp":u="image/bmp";break;case".tiff":u="image/tiff";break;default:u="image/jpeg"}else if(j.includes(r))c="document",u="application/pdf";else throw new Error(`Unsupported file type: ${r}. Supported types: ${[...J,...j].join(", ")}`);const p=(await U(n)).toString("base64");return{path:n,base64:p,mimeType:u,size:s.size,name:o,type:c}}}l(z,"loadFileContent");function _n(t,e){return!t||typeof t!="object"?(e&&(e.value="Not an object"),!1):gn(t.using,e)?!t.jobs||typeof t.jobs!="object"?(e&&(e.value="Missing or invalid 'jobs' property"),!1):Ce(t.jobs,e)?!0:(e&&(e.value=`Invalid 'jobs' property: ${e?.value}`),!1):(e&&(e.value=`Invalid 'using' property: ${e?.value}`),!1)}l(_n,"isJobConfig");function gn(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if(typeof t.engine!="string")return e&&(e.value="Missing or invalid 'engine' property"),!1;if(!["openai","anthropic","ollama","gemini"].includes(t.engine))return e&&(e.value="Invalid provider type. Must be 'openai', 'anthropic', 'gemini', or 'ollama'"),!1;switch(t.engine){case"ollama":if("model"in t&&typeof t.model!="string")return e&&(e.value="Property 'model' must be a string"),!1;if("url"in t&&typeof t.url!="string")return e&&(e.value="Property 'url' must be a string"),!1;break;case"gemini":case"anthropic":case"openai":if("api-key"in t&&typeof t["api-key"]!="string")return e&&(e.value="Property 'api-key' must be a string"),!1;if("model"in t&&typeof t.model!="string")return e&&(e.value="Property 'model' must be a string"),!1;break}return!0}l(gn,"isUsing");function Ce(t,e){for(const[n,s]of Object.entries(t))if(!mn(s,e))return e&&(e.value=`Invalid job '${n}': ${e?.value}`),!1;return!0}l(Ce,"isDAGJob");function mn(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if(!hn(t,e))return!1;if("dependsOn"in t&&t.dependsOn!==void 0){const n=t.dependsOn;if(typeof n!="string")if(Array.isArray(n)){for(let s=0;s<n.length;s++)if(typeof n[s]!="string")return e&&(e.value=`Dependency at index ${s} must be a string`),!1}else return e&&(e.value="Property 'dependsOn' must be a string or array of strings"),!1}return!0}l(mn,"isDAGJobValue");function hn(t,e){return!t||typeof t!="object"?(e&&(e.value="Not an object"),!1):"batch"in t?En(t,e):yn(t,e)}l(hn,"isJob");function yn(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if("batch"in t)return e&&(e.value="Serial job should not have a batch property"),!1;if(t.tools!==void 0){if(!Array.isArray(t.tools))return e&&(e.value="Property 'tools' must be an array"),!1;for(const n of t.tools)if(typeof n!="string")return e&&(e.value="All tools must be strings"),!1}if(!Array.isArray(t.steps))return e&&(e.value="Property 'steps' must be an array"),!1;for(let n=0;n<t.steps.length;n++)if(!Le(t.steps[n],e))return e&&(e.value=`Invalid step at index ${n}: ${e?.value}`),!1;return!0}l(yn,"isSerialJob");function En(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if(t.tools!==void 0){if(!Array.isArray(t.tools))return e&&(e.value="Property 'tools' must be an array"),!1;for(const n of t.tools)if(typeof n!="string")return e&&(e.value="All tools must be strings"),!1}if(!Array.isArray(t.batch))return e&&(e.value="Property 'batch' must be an array"),!1;for(let n=0;n<t.batch.length;n++)if(!In(t.batch[n],e))return e&&(e.value=`Invalid batch item at index ${n}: ${e?.value}`),!1;if(!Array.isArray(t.steps))return e&&(e.value="Property 'steps' must be an array"),!1;for(let n=0;n<t.steps.length;n++)if(!Le(t.steps[n],e))return e&&(e.value=`Invalid step at index ${n}: ${e?.value}`),!1;return!0}l(En,"isBatchJob");function In(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if(t.type!=="files")return e&&(e.value="Property 'type' must be 'files'"),!1;if(typeof t.source!="string")return e&&(e.value="Property 'source' must be a string"),!1;if(typeof t.bind!="string")return e&&(e.value="Property 'bind' must be a string"),!1;if(t["skip-if"]!==void 0){if(!Array.isArray(t["skip-if"]))return e&&(e.value="Property 'skip-if' must be an array"),!1;for(let n=0;n<t["skip-if"].length;n++)if(!wn(t["skip-if"][n],e))return e&&(e.value=`Invalid skip condition at index ${n}: ${e?.value}`),!1}return!0}l(In,"isBatchOptions");function wn(t,e){return!t||typeof t!="object"?(e&&(e.value="Not an object"),!1):t.type!=="file-exist"?(e&&(e.value="Property 'type' must be 'file-exist'"),!1):typeof t.pattern!="string"?(e&&(e.value="Property 'pattern' must be a string"),!1):!0}l(wn,"isSkipOptions");function Le(t,e){return!t||typeof t!="object"?(e&&(e.value="Not an object"),!1):!t.uses||typeof t.uses!="string"?(e&&(e.value="Step must have a string 'uses' property"),!1):t.uses==="chat"?Tn(t,e):t.uses==="write-to-disk"?xn(t,e):(e&&(e.value=`Unknown uses type: ${t.uses}`),!1)}l(Le,"isStep");function Tn(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if(t.uses!=="chat")return e&&(e.value="Uses must be 'chat'"),!1;if(typeof t.message!="string")return e&&(e.value="Property 'message' must be a string"),!1;if(t.output!==void 0){if(!t.output||typeof t.output!="object"||Array.isArray(t.output))return e&&(e.value="Property 'output' must be an object"),!1;const n=["string","string[]","number","boolean"];for(const[s,r]of Object.entries(t.output))if(typeof s!="string"||typeof r!="string"||!n.includes(r))return e&&(e.value="Property 'output' must be a Record<string, ResTypeStrings> where ResTypeStrings is 'string' | 'string[]' | 'number' | 'boolean'"),!1}if(t.system!==void 0&&typeof t.system!="string")return e&&(e.value="Property 'system' must be a string"),!1;if(t.replace!==void 0){if(!Array.isArray(t.replace))return e&&(e.value="Property 'replace' must be an array"),!1;for(let n=0;n<t.replace.length;n++)if(!An(t.replace[n],e))return e&&(e.value=`Invalid replace at index ${n}: ${e?.value}`),!1}if(t.tools!==void 0){if(!Array.isArray(t.tools))return e&&(e.value="Property 'tools' must be an array"),!1;for(const n of t.tools)if(typeof n!="string")return e&&(e.value="All tools must be strings"),!1}if(t.images!==void 0){if(!Array.isArray(t.images))return e&&(e.value="Property 'images' must be an array"),!1;for(let n=0;n<t.images.length;n++)if(!Sn(t.images[n],e))return e&&(e.value=`Invalid image at index ${n}: ${e?.value}`),!1}if(t.documents!==void 0){if(!Array.isArray(t.documents))return e&&(e.value="Property 'documents' must be an array"),!1;for(let n=0;n<t.documents.length;n++)if(!kn(t.documents[n],e))return e&&(e.value=`Invalid document at index ${n}: ${e?.value}`),!1}if(t.references!==void 0){if(!Array.isArray(t.references))return e&&(e.value="Property 'references' must be an array"),!1;for(let n=0;n<t.references.length;n++)if(!Rn(t.references[n],e))return e&&(e.value=`Invalid reference at index ${n}: ${e?.value}`),!1}return!0}l(Tn,"isChatStep");function xn(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if(t.uses!=="write-to-disk")return e&&(e.value="Uses must be 'write-to-disk'"),!1;if(typeof t.output!="string")return e&&(e.value="Property 'output' must be a string"),!1;if(t.keys!==void 0&&typeof t.keys!="string")if(Array.isArray(t.keys)){for(let n=0;n<t.keys.length;n++)if(typeof t.keys[n]!="string")return e&&(e.value=`Key at index ${n} must be a string`),!1}else return e&&(e.value="Property 'keys' must be a string or array of strings"),!1;return!0}l(xn,"isWriteToDiskStep");function An(t,e){if(!t||typeof t!="object")return e&&(e.value="Not an object"),!1;if(typeof t.pattern!="string")return e&&(e.value="Property 'pattern' must be a string"),!1;if(t.source!=="file")return e&&(e.value="Property 'source' must be 'file'"),!1;if(typeof t.files!="string"&&!Array.isArray(t.files))return e&&(e.value="Property 'files' must be a string or an array of strings"),!1;if(Array.isArray(t.files)){for(let n=0;n<t.files.length;n++)if(typeof t.files[n]!="string")return e&&(e.value=`Files entry at index ${n} must be a string`),!1}return!0}l(An,"isReplace");function Sn(t,e){return!t||typeof t!="object"?(e&&(e.value="Not an object"),!1):typeof t.file!="string"?(e&&(e.value="Property 'file' must be a string"),!1):!0}l(Sn,"isImageReference");function kn(t,e){return!t||typeof t!="object"?(e&&(e.value="Not an object"),!1):typeof t.file!="string"?(e&&(e.value="Property 'file' must be a string"),!1):!0}l(kn,"isDocumentReference");function Rn(t,e){return!t||typeof t!="object"?(e&&(e.value="Not an object"),!1):typeof t.file!="string"?(e&&(e.value="Property 'file' must be a string"),!1):!0}l(Rn,"isTextFileReference");class Pn{static{l(this,"FileRunPlanner")}constructor(e,n,s=[]){this.source=e,this.bind=n,this.skipConditions=s}async plan(e){const n=[],s=await ue(this.source,{withFileTypes:!0});for(const r of s){const o=r.fullpath(),i=un(o);let c=!1;for(const u of this.skipConditions)if(c=await u.eval({components:i}),c)break;if(!c){const u=await Ve(o,"utf-8"),a={variables:{[this.bind]:u,...i},tasks:e};n.push(a)}}return n}}class On{static{l(this,"MultiPlanner")}planners;constructor(e){this.planners=e}async plan(e){const n=this.planners.map(async r=>await r.plan(e));return(await Promise.all(n)).flat()}}function se(t,e,n="{{}}"){const s=n==="{{}}"?/\{\{(.*?)\}\}/g:/\{(.*?)\}/g;return t=t.replace(s,(r,o)=>{if(o=o.trim(),Object.prototype.hasOwnProperty.call(e,o)){const i=e[o];return i==null?"":String(i)}return r}),t}l(se,"replaceVariables");class bn{static{l(this,"FileExistSkipCondition")}constructor(e){this.pattern=e}type="file-exist";async eval(e){const n=se(this.pattern,e.components,"{}");try{return await et(n,tt.F_OK),!0}catch{return!1}}}function X(t,e=0){const n={};for(const[s,r]of Object.entries(t))if(typeof r=="string")switch(r){case"string":n[s]=e===0?I.string():I.string().optional();break;case"number":n[s]=e===0?I.number():I.number().optional();break;case"boolean":n[s]=e===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=X(r[0],e+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(X(r,e+1));return n}l(X,"declarativeToOutputSchema");function Z(t){if(t instanceof I.ZodString)return["string","Your answer"];if(t instanceof I.ZodNumber)return["number",42];if(t instanceof I.ZodBoolean)return["boolean",!0];if(t instanceof I.ZodArray){const e=t.element;if(e instanceof I.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(e instanceof I.ZodNumber)return["number array",[42,59,3.14]];if(e instanceof I.ZodBoolean)return["boolean array",[!0,!1,!1]];if(e instanceof I.ZodObject){const[n,s]=Z(e);return["object array",[s,s]]}return["array",[]]}if(t instanceof I.ZodObject){const e=t.shape,n={};for(const[s,r]of Object.entries(e)){const[o,i]=Z(r);n[s]=i}return["JSON object",n]}if(t instanceof I.ZodOptional){const e=t.unwrap(),[n,s]=Z(e);return[`${n} | undefined`,s]}}l(Z,"zodToExample");function De(t){return typeof t=="object"&&Object.values(t).every(e=>e&&typeof e=="object"&&"_def"in e)}l(De,"isOutputSchema");class Fe{static{l(this,"AbstractInstruct")}type="instruct";prompt;system=null;inputs={};tools={};files=[];textReferences=[];instructions=[];schema;rawResponse;_taggedSections=void 0;_result=void 0;constructor(e,n){this.prompt=e,this.schema=n}setInputs(e){this.inputs=e}addInput(e,n){this.inputs[e]=n}addTools(e){for(const n of e)this.tools[n.name]=n}addTool(e){this.tools[e.name]=e}addImage(e){if(e.type!=="image")throw new Error(`Expected image file, got ${e.type}`);const n=e;this.files.push(n)}addDocument(e){if(e.type!=="document")throw new Error(`Expected document file, got ${e.type}`);const n=e;this.files.push(n)}addFile(e){if(!pn(e))throw new Error(`Expected image or document file, got ${e.type}`);this.files.push(e)}addReference(e,n){if(typeof e=="string"){this.textReferences.push({content:e,name:n?.name});return}if(fn(e))this.textReferences.push({content:e.content,name:n?.name??e.name});else throw new Error(`Expected text file, got ${e.type}`)}addInstructions(e){if(typeof e!="string"||e.trim()==="")throw new Error("Instruction must be a non-empty string");this.instructions.push(e)}hasTools(){return Object.keys(this.tools).length>0}hasFiles(){return this.files.length>0}get result(){return this._result}compile(e,n={}){const s=this.createUserMessage(e,n),r=this.createInstructions();return{message:s,instructions:r}}createUserMessage(e,n={}){const{recorder:s,options:r}=n,o={...e,...this.inputs};let i=se(this.prompt,o);if(this.textReferences.length>0)for(const[c,u]of this.textReferences.entries()){const a=u.name?`: ${u.name}`:"";i+=`
|
|
7
|
-
|
|
8
|
-
## Reference ${c+1}${a}
|
|
9
|
-
|
|
10
|
-
\`\`\`${u.content}'''`}if(r?.warnUnused){const c=i.match(/\{\{(.*?)\}\}/g);if(c)throw s?.error.log(`Warning unused variables ${c.join(", ")}`),new Error(`Unused variables: ${c.join(", ")}`)}return i}createInstructions(e=""){if(e=`# Instructions
|
|
11
|
-
|
|
12
|
-
`+e,Object.keys(this.schema).length>0){e+=`## Output Format Instructions
|
|
13
|
-
`,e+=`
|
|
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);e+=o}}if(this.instructions.length>0){e+=`
|
|
16
|
-
## Additional Instructions
|
|
17
|
-
|
|
18
|
-
`;for(const s of this.instructions)e+=`- ${s}
|
|
19
|
-
`}return e}generateFieldInstructions(e,n){const[s,r]=Z(n);return`
|
|
20
|
-
- Use <${e}></${e}> tags to indicate the answer for ${e}. The answer must be a ${s}.
|
|
21
|
-
Example: <${e}>${JSON.stringify(r)}</${e}>
|
|
22
|
-
`}finalize(e,n={}){const{recorder:s}=n;if(this.rawResponse=e,Object.keys(this.schema).length===0){if(e.trim()==="{}"||e.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(e);const o={};for(const[i,c]of Object.entries(this.schema)){const u=this._taggedSections.tags[i];if(u!==void 0)o[i]=this.preprocessValue(c,u);else if(c.def.type!=="optional")throw new Error(`Expected results with tag ${i} but it does not exist`)}try{const i={};for(const[c,u]of Object.entries(this.schema))c in o&&(i[c]=u.parse(o[c]));return this._result=i,this._result}catch(i){if(i&&typeof i=="object"&&"issues"in i){const c=i.issues.map(u=>`${u.path.join(".")}: ${u.message}`).join(", ");throw new Error(`Validation failed: ${c}`)}throw i}}preprocessValue(e,n){switch(n=n.trim(),e.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=e.def.innerType;return this.preprocessValue(s,n)}default:return n}}parseTaggedSections(e){e.trim().startsWith("```json")&&e.trim().endsWith("```")&&(e=e.trim().slice(7,-3).trim());const n=/<(\w+)>(.*?)<\/\1>/gs,s={};let r=e;r=r.replace(n,(i,c,u)=>(s[c]=u,""));const o=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return r=r.replace(o,(i,c,u)=>(s[c]=u,"")),{tags:s,remaining:r.trim()}}}class C extends Fe{static{l(this,"Instruct")}constructor(e,n){super(e,n)}static with(e,n){if(!n)return new C(e,{response:I.string()});if(De(n))return new C(e,n);{const s=X(n);return new C(e,s)}}}function H(t){return Array.isArray(t)?t:[t]}l(H,"arrayify");function b(t,e){return e?`${e}:${t.slice(0,8)}`:t.slice(0,8)}l(b,"friendly");function vn(t){return new Promise(e=>setTimeout(e,t))}l(vn,"delay");const Nn=I.object({searchTerm:I.string().describe("The search term to query")});class $n{static{l(this,"BraveSearchTool")}name="brave";description="Perform a search using the Brave search engine";schema=Nn;apiKey;throttle;lastExecTime=0;constructor(e){e&&this.setConfig(e)}setConfig(e){const{rateLimit:n}=e;this.apiKey=e["api-key"],this.throttle=n?1100/n:void 0}async execute(e){const{searchTerm:n}=e;if(this.throttle){for(;Date.now()-this.lastExecTime<this.throttle;)await vn(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 i=await fetch(o.toString(),{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":s}});if(!i.ok)throw new Error(`[Brave] HTTP error ${i.status}: ${i.statusText}`);const c=await i.json();return JSON.stringify(c)}catch(s){throw s instanceof Error?new Error(`[Brave] Error fetching search results: ${s.message}`):s}}}const Mn=new $n,Gn=q.object({operation:q.enum(["add","subtract","multiply","divide"]).describe("The operation to perform (add, subtract, multiply, divide)"),a:q.number().describe("First operand"),b:q.number().describe("Second operand")}),Cn={name:"calculator",description:"Performs basic arithmetic operations",schema:Gn,execute:l(async({operation:t,a:e,b:n})=>{switch(t){case"add":return`${e} + ${n} = ${e+n}`;case"subtract":return`${e} - ${n} = ${e-n}`;case"multiply":return`${e} * ${n} = ${e*n}`;case"divide":if(n===0)throw new Error("Cannot divide by zero");return`${e} / ${n} = ${e/n}`;default:throw new Error(`Unknown operation: ${t}`)}},"execute")};class Ln{static{l(this,"ToolRegistry")}executables={};config;setConfig(e){this.config=e}register(e){if(this.executables[e.name])throw new Error(`Tool with name '${e.name}' is already registered`);this.executables[e.name]=e}get(e){const n=this.executables[e];if(!n)throw new Error(`Tool '${e}' is not registered`);return n.setConfig?.(this.config[e]),n}}let B;function Ue(){return B||(B=new Ln,B.register(Cn),B.register(Mn)),B}l(Ue,"getToolRegistry");const Dn={async convert(t,e){const{recorder:n,toolNames:s}=e,{message:r,system:o,replace:i}=t;let c;t.output?c=C.with(r,t.output):c=C.with(r),o&&(c.system=o);const u=[...new Set([...s??[],...t.tools??[]])];for(const a of u){const p=Ue().get(a);c.addTool(p)}if(i){for(const a of i)if(a.source==="file"){const p=H(a.files),d=await an(p,n);c.addInput(a.pattern,d)}}if(t.images)for(const a of t.images)try{const p=await z(a.file,"base64");c.addFile(p)}catch(p){throw new Error(`Failed to load image '${a.file}': ${p.message}`)}if(t.documents)for(const a of t.documents)try{const p=await z(a.file,"base64");c.addFile(p)}catch(p){throw new Error(`Failed to load document '${a.file}': ${p.message}`)}if(t.references)for(const a of t.references)try{const p=await z(a.file,"utf-8");c.addReference(p)}catch(p){throw new Error(`Failed to load reference file '${a.file}': ${p.message}`)}return c}};class Fn{static{l(this,"StepToClassRegistry")}converters=new Map;get(e){const n=this.converters.get(e);if(!n)throw new Error(`No converter registered for step: ${e}`);return n}register(e,n){this.converters.set(e,n)}}class re{static{l(this,"WriteOutputTask")}constructor(e,n=["response"]){this.output=e,this.keys=n}type="write-to-disk"}const Un={async convert(t){if(t.keys){const e=H(t.keys);return new re(t.output,e)}return new re(t.output)}},oe=new Fn;oe.register("write-to-disk",Un),oe.register("chat",Dn);async function Y(t,e){const{recorder:n}=e,s=t.tools??void 0,r=t.steps.map(async o=>(o.uses,await oe.get(o.uses).convert(o,{recorder:n,toolNames:s})));return Promise.all(r)}l(Y,"configToTasks");async function We(t,e){const{batch:n}=t;return n.length===1?He(n[0]):new On(n.map(s=>He(s)))}l(We,"configToPlanner");function He(t){switch(t.type){case"files":let e;return t["skip-if"]&&(e=t["skip-if"].map(s=>Wn(s))),new Pn(t.source,t.bind,e)}}l(He,"batchOptionsToPlanner");function Wn(t){switch(t.type){case"file-exist":return new bn(t.pattern)}}l(Wn,"skipOptionsToSkipConditions");function Hn(t){return t.success===!1&&t.error!==void 0}l(Hn,"isErrorResult");function Q(t,e){return{response:t,stats:e,success:!0}}l(Q,"createResult");function V(t,e,n){return{response:e,stats:n,error:t,success:!1}}l(V,"createErrorResult");class Be{static{l(this,"Conversation")}system;_messages=[];constructor(e){e&&(this._messages=e)}get messages(){return[...this._messages]}addSystem(e){this.system=e}addUser(e){typeof e=="string"?this._messages.push({role:"user",content:[{type:"text",text:e}]}):this._messages.push({role:"user",content:e})}addAssistant(e){if(typeof e=="string"){const n=e;this._messages.push({role:"assistant",id:crypto.randomUUID(),content:[{type:"text",text:n}],model:"user",finishReason:y.Custom})}else this._messages.push({role:"assistant",...e})}addToolResults(e){this._messages.push({role:"tool",content:e})}latest(){return this._messages[this._messages.length-1]}toString(){return JSON.stringify({system:this.system,messages:this._messages})}}class Bn{static{l(this,"WriteToDiskTaskHandler")}taskType="write-to-disk";canHandle(e){return e&&typeof e=="object"&&"type"in e&&e.type==="write-to-disk"}async execute(e){const{task:n,variables:s,options:r={},recorder:o}=e,i=n.output,c=n.keys??[];if(r?.warnUnused){const p=c.filter(d=>!(d in s));p.length>0&&o?.warn?.log(`[Write To Disk] The following keys were not found in the variables: ${p.join(", ")}`)}let u="";if(c.length===1?u=s[c[0]]??"<not found>":u=c.map(p=>`[${p}]:
|
|
23
|
-
${s[p]??"<not found>"}
|
|
24
|
-
`).join(`
|
|
25
|
-
`),r?.dryRun){o?.info?.log("[Dry run] Write to Disk is not executed.");return}let a="";i.includes("*")?a=cn(i,s.file):a=se(i,s,"{}"),await ln({filePath:a,content:u})}}var ee=(t=>(t.LastResult="lastResult",t))(ee||{});function qn(t,e,n){const{options:s,recorder:r}=n,o=s?.warnUnused??!0;for(const[i,c]of Object.entries(t))o&&e[i]&&r?.warn?.log(`Warning: Variable "${i}" is being overwritten. Previous value: ${e[i]}, new value: ${c}`),e[i]=c}l(qn,"setResultsIntoVariables");class Jn{static{l(this,"ChatTaskHandler")}taskType="instruct";canHandle(e){return e&&typeof e=="object"&&"type"in e&&e.type==="instruct"}async execute(e){const{task:n,...s}=e;await jn({instruct:n,...s})}}async function jn(t){const{instruct:e,chat:n,provider:s,stats:r,variables:o,options:i,recorder:c}=t;e.system&&n.addSystem(e.system);const{message:u,instructions:a}=e.compile(o,{recorder:c,options:i}),p=e.files;if(n.addUser(it({text:a+u,files:p})),i?.dryRun)return c?.debug?.log(n),{action:"complete"};let d=!0;for(;d;){const f=await $e({provider:s,messages:n.messages,tools:Object.values(e.tools),recorder:c});if(r.in+=f.usage.in,r.out+=f.usage.out,f.type==="error")throw new Error(JSON.stringify(f.error));if(f.type==="success")switch(f.finishReason){case y.Stop:{if(f.content){const _=f.content;n.addAssistant({id:f.id,model:f.model,content:f.content,finishReason:f.finishReason});const m=G(_),w=e.finalize(m,{recorder:c});qn(w,o,{options:i,recorder:c}),o[ee.LastResult]=w}return d=!1,{action:"continue"}}case y.Length:throw new Error("Incomplete model output due to `max_tokens` parameter or token limit");case y.FunctionCall:{f.content&&n.addAssistant({id:f.id,model:f.model,content:f.content,finishReason:f.finishReason});const _=at(f.content);if(_&&_.length>0){const m=await Kn(_,e,{recorder:c});c?.debug?.log(m),n.addToolResults(m),d=!0}else d=!1;break}}if(f.type!=="success")throw c?.debug?.log(f),new Error("Unexpected response type")}return{action:"continue"}}l(jn,"executeChatAction");async function Kn(t,e,n={}){const{recorder:s}=n,r=[];for(const o of t)r.push(new Promise((i,c)=>{const u=e.tools[o.name];if(!u){c(`Tool not found: ${o.name}`);return}s?.debug?.heading.log(`Executing tool ${u.name}`);const a=o.parameters;u.execute(a).then(p=>{s?.debug?.log(`Complete tool ${u.name}: ${o.id}`),i({id:o.id,name:o.name,content:JSON.stringify(p)})}).catch(c)}));return Promise.all(r)}l(Kn,"executeToolCalls");class zn{static{l(this,"TaskRegistry")}handlers=new Map;register(e){this.handlers.set(e.taskType,e)}getHandler(e){return this.handlers.get(e.type)}hasHandler(e){return this.handlers.has(e.type)}async executeTask(e){const{task:n}=e,s=n.type,r=this.getHandler(n);if(!r)throw new Error(`No handler registered for action type: ${s}`);if(!r.canHandle(n))throw new Error(`Handler found but action does not match expected format: ${s}`);await r.execute(e)}}function Xn(){const t=new zn;return t.register(new Jn),t}l(Xn,"createBaseRegistry");function Zn(){const t=Xn();return t.register(new Bn),t}l(Zn,"createNodeRegistry");const ie=l((t,...e)=>{const n=l(async r=>{const{recorder:o}=r;let i=[];return"steps"in t?i=await Y(t,{recorder:o}):i=[t,...e],i},"prepare");return{execute:l(async r=>{const{provider:o,variables:i,options:c,stats:u,recorder:a,name:p}=r,d=crypto.randomUUID(),f=Zn();a?.info?.log({type:"task",id:d,status:E.Running,message:`[${b(d,p)}] Starting job`});try{const _=await n({recorder:a}),m=new Be;for(const[w,k]of _.entries()){a?.info?.log({type:"task",id:d,status:E.Running,message:`[${b(d,p)}] Processing step ${w+1}: ${k.type}`});try{await f.executeTask({task:k,chat:m,provider:o,variables:i,options:c,stats:u,recorder:a})}catch(P){throw P instanceof A?P:new ae(`Error executing task ${k.type}`,{id:d,taskType:k.type,taskIndex:w,cause:P instanceof Error?P:new Error(String(P))})}}return a?.info?.log({type:"task",status:E.Success,id:d,message:`[${b(d,p)}] Completed ${_.length} steps`}),Q(i[ee.LastResult],u)}catch(_){const m=_ instanceof A?_:new A("Serial workflow execution failed",{id:d,cause:_ instanceof Error?_:new Error(String(_))});return a?.info?.log({type:"task",status:E.Fail,id:d,message:`[${b(d,p)}] Failed: ${m.message}`}),a?.error.log(m),V(m,i[ee.LastResult],u)}},"execute")}},"serialWorkflow"),qe=l((t,...e)=>{const n=l(async r=>{const{recorder:o}=r;let i=[],c=null;if("batch"in t){const u=t;c=await We(u),i=await Y(u,{recorder:o})}else c=t,i=[...e];return[c,i]},"prepare");return{execute:l(async r=>{const{provider:o,variables:i,options:c,stats:u,recorder:a,name:p}=r,d=crypto.randomUUID();try{const[f,_]=await n({recorder:a}),m=await f.plan(_);if(a?.debug?.heading.log("Runs",m),m.length===0)return a?.info?.log("No runs to execute"),Q([],u);let w=0;a?.info?.log({type:"task",status:E.Running,id:d,message:`[${b(d,"CRW")}] Working on 0/${m.length}`});const k=l(async(R,D)=>{try{return await ie(...R.tasks).execute({provider:o,variables:{...R.variables,...i},options:c,stats:u,recorder:a,name:`${p}-${D}`})}catch(N){const ce=N instanceof A?N:new A("Error executing run",{cause:N instanceof Error?N:new Error(String(N))});return a?.error?.log(ce),V(ce,null,u)}finally{w++,a?.info?.log({type:"task",status:E.Running,id:d,message:`[${b(d,"CRW")}] Working on ${w}/${m.length}`})}},"executeRun"),P=5;let M=[];for(let R=0;R<m.length;R+=P){const D=m.slice(R,R+P),N=await Promise.all(D.map(k));M=M.concat(N)}const v=M.some(Hn);a?.info?.log({type:"task",status:v?E.PartialSuccess:E.Success,id:d,message:`[${b(d,"CRW")}] All jobs (${m.length}) completed${v?" with some errors":""}`});const $=M.map(R=>R.response);return Q($,u)}catch(f){const _=f instanceof A?f:new A("Concurrent workflow execution failed",{id:d,cause:f instanceof Error?f:new Error(String(f))});return a?.error?.log(_),V(_,null,u)}},"execute")}},"concurrentWorkflow");class Yn{static{l(this,"DAGParser")}static parse(e){const n=new Map;for(const[r,o]of Object.entries(e)){const i=this.parseNodeDefinition(r,o);n.set(r,i)}return this.validateDependencies(n),this.checkForCycles(n),{stages:this.createExecutionStages(n),nodes:n}}static parseNodeDefinition(e,n){if(this.isSimpleTask(n))return{id:e,tasks:Array.isArray(n)?n:[n],dependencies:[],executionType:"serial"};if(this.isConcurrentNodeDefinition(n)){const i=n,c=i.dependsOn?H(i.dependsOn):[];return{id:e,tasks:i.tasks,dependencies:c,planner:i.planner,executionType:"concurrent"}}const s=n,r=s.dependsOn?H(s.dependsOn):[],o=H(s.task);return{id:e,tasks:o,dependencies:r,executionType:"serial"}}static isSimpleTask(e){return e.type||Array.isArray(e)}static isConcurrentNodeDefinition(e){return e&&typeof e=="object"&&"planner"in e}static validateDependencies(e){for(const n of e.values())for(const s of n.dependencies)if(!e.has(s))throw new A(`Node "${n.id}" depends on non-existent node "${s}"`)}static checkForCycles(e){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 i=e.get(o);for(const c of i.dependencies)if(r(c))return!0;return s.delete(o),!1},"hasCycle");for(const o of e.keys())if(r(o))throw new A(`Circular dependency detected involving node "${o}"`)}static createExecutionStages(e){const n=[],s=new Set,r=new Set(e.keys());for(;r.size>0;){const o=[];for(const i of r)e.get(i).dependencies.every(a=>s.has(a))&&o.push(i);if(o.length===0)throw new A("Unable to resolve DAG dependencies - possible circular reference");n.push(o),o.forEach(i=>{s.add(i),r.delete(i)})}return n}}class Qn{static{l(this,"DAGJobToDefinition")}static async convert(e,n){const{recorder:s}=n,r={};for(const[o,i]of Object.entries(e)){const{dependsOn:c,...u}=i;if("batch"in u){const a=u,p=await We(a),d=await Y(a,{recorder:s}),f={planner:p,tasks:d,...c?{dependsOn:c}:{}};r[o]=f}else{const a=await Y(u,{recorder:s});if(c){const p={task:a,dependsOn:c};r[o]=p}else r[o]=a}}return r}}async function Vn(t,e,n,s={}){const{variables:r}=n,o=e.nodes.get(t);try{let i;if(o.executionType==="concurrent"&&o.planner?i=await qe(o.planner,...o.tasks).execute({...n,variables:r,name:t}):i=await ie(...o.tasks).execute({...n,variables:r,name:t}),!i.success)throw new A(`Node "${t}" failed: ${i.error?.message}`);return i.response}catch(i){if(!s.continueOnError)throw i;return null}}l(Vn,"executeNode");const es=l((t,e={})=>{const n=l(async(r,o)=>{const{recorder:i}=o,c={value:""};return Ce(r,c)?await Qn.convert(r,o):(i?.warn?.log(c),r)},"prepare");return{execute:l(async r=>{const{stats:o,recorder:i}=r,{maxConcurrency:c=3}=e,u=crypto.randomUUID();try{const a=await n(t,{recorder:i});i?.debug?.log(a);const p=Yn.parse(a),d=new Map;i?.info?.log({type:"task",id:u,status:E.Running,message:`[${b(u)}] Starting workflow execution with ${p.stages.length} stages`});for(const[_,m]of p.stages.entries()){i?.info?.log({type:"task",id:u,status:E.Running,message:`[${b(u)}] Stage ${_+1}/${p.stages.length}, executing ${m.length} nodes: ${m.join(", ")}`});const w=Math.min(m.length,c);for(let k=0;k<m.length;k+=w){const P=m.slice(k,k+w);(await Promise.all(P.map(async v=>{const $=await Vn(v,p,r,e);return{nodeId:v,result:$}}))).forEach(({nodeId:v,result:$})=>{d.set(v,$)})}}i?.info?.log({type:"task",status:E.Success,id:u,message:`[${b(u)}] Workflow execution completed successfully`});const f=Object.fromEntries(d);return Q(f,o)}catch(a){const p=a instanceof A?a:new A("DAG workflow execution failed",{id:u,cause:a instanceof Error?a:new Error(String(a))});return i?.info?.log({type:"task",status:E.Fail,id:u,message:`[${b(u)}] Workflow execution failed: ${p.message}`}),i?.error?.log(p),V(p,null,o)}},"execute")}},"dagWorkflow"),ts=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],L={success:"\u2713",fail:"\u2717",spinning:ts};class ns{static{l(this,"ConsoleWriter")}tasks=new Map;entries=[];truncate=0;intervalId=null;spinnerInterval=80;lastRender="";isRendering=!1;inline=!0;constructor(e={}){this.truncate=e.truncate??0,this.inline=e.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(`
|
|
26
|
-
`).length;pe.moveCursor(process.stdout,0,-o+1),pe.clearScreenDown(process.stdout)}const e=[...this.tasks.values()],n=e.filter(o=>o.status===E.Running),s=e.filter(o=>o.status===E.Success||o.status===E.Fail);if(n.length===0&&s.length>0){let o="";for(const i of s){if(i.status===E.Success){const c=T.green(L.success);o+=`${c} ${i.text}
|
|
27
|
-
`}else if(i.status===E.Fail){const c=T.red(L.fail);o+=`${c} ${i.text}
|
|
28
|
-
`}this.tasks.delete(i.id)}console.log(o)}for(const o of this.entries){const{level:i,time:c,kind:u,payload:a}=o;u==="heading"?rs(i,a,{truncate:this.truncate}):os(i,a,{truncate:this.truncate})}this.entries=[];let r="";for(const o of this.tasks.values())if(o.status===E.Running){const i=T.cyan(L.spinning[o.frameIndex]);o.frameIndex=(o.frameIndex+1)%L.spinning.length,r+=`${i} ${o.text}
|
|
29
|
-
`}else if(o.status===E.Success){const i=T.green(L.success);r+=`${i} ${o.text}
|
|
30
|
-
`}else if(o.status===E.Fail){const i=T.red(L.fail);r+=`${i} ${o.text}
|
|
31
|
-
`}this.lastRender=r,process.stdout.write(r),this.isRendering=!1}handleEvent(e){const{level:n,time:s,payload:r}=e;if(r.length>0&&ss(r[0])){const i=r[0],{id:c,message:u,status:a}=i;if(a===E.Running)this.tasks.set(c,{id:c,text:u,status:a,frameIndex:0});else if((a===E.Success||a===E.Fail)&&this.tasks.has(c)){const p=this.tasks.get(c);p.status=a,p.text=u}}else this.entries.push(e);this.renderTasks();const o=[...this.tasks.values()].some(i=>i.status===E.Running);o&&this.intervalId===null?this.startSpinner():!o&&this.intervalId!==null&&this.stopSpinner()}destroy(){this.stopSpinner()}}function ss(t){if(typeof t!="object"||t===null)return!1;const e=t;if(e.type!=="task"||typeof e.id!="string"||typeof e.message!="string")return!1;switch(e.status){case E.Running:case E.Success:case E.PartialSuccess:case E.Fail:return!0;default:return!1}}l(ss,"isTask");function rs(t,e,n){let s,r;t===x.Error?(s=T.red,r=T.redBright.bold):t===x.Warn?(s=T.yellow,r=T.yellowBright.bold):t>=x.Info?(s=T.blue,r=T.whiteBright.bold):(s=T.gray,r=T.white);const{message:o,data:i}=Ke(e);console.log(`${s("==>")} ${r(o)}`),je(t,i,n)}l(rs,"heading");function os(t,e,n){let s;t===x.Error?s=T.red:t===x.Warn?s=T.yellow:t>=x.Info?s=T.white:s=T.gray;const{message:r,data:o}=Ke(e);r&&console.log(s(r)),je(t,o,n)}l(os,"body");const Je=" ";function je(t,e,n){let s;t===x.Error?(s=T.red,n.truncate=0):t==x.Warn?s=T.yellow:t>=x.Info?s=T.white:s=T.gray,e.forEach(r=>{if(typeof r=="string"){console.log(s(`${Je}${r}`));return}for(const[o,i]of Object.entries(r)){let c=JSON.stringify(i,is(n.truncate)," ");const u=`${o}: ${c}`.split(`
|
|
32
|
-
`).map(a=>Je+a).join(`
|
|
33
|
-
`);console.log(s(u))}})}l(je,"values");function Ke(t){const[e,...n]=t;let s="",r=n;if(e){let{message:o,...i}=e;s=o&&typeof o=="string"?o:"",Object.keys(i).length>0&&(r=[i,...r])}return{message:s,data:r}}l(Ke,"toMsgData");function is(t){return t===0?null:(e,n)=>typeof n=="string"&&n.length>t?n.slice(0,t)+"<...>":n}l(is,"truncator");export{A,ns as C,me as D,C as I,x as L,S as M,he as N,rn as R,re as W,we as a,h as b,Te as c,es as d,Se as e,Mt as f,sn as g,Oe as h,g as i,Ne as j,Fe as k,z as l,De as m,X as n,$e as o,qe as p,y as q,Be as r,ie as s,on as t,_n as u,Ue as v};
|