@fifthrevision/axle 0.7.1 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -8
- package/dist/cli.js +7 -6
- package/dist/index.d.ts +132 -55
- package/dist/index.js +1 -1
- package/dist/simple-DbMOgdiX.js +36 -0
- package/package.json +8 -5
- package/dist/simple-DFkTLK9N.js +0 -28
package/README.md
CHANGED
|
@@ -185,27 +185,71 @@ const agent = new Agent({
|
|
|
185
185
|
Axle includes several built-in tools: `braveSearchTool`, `calculatorTool`,
|
|
186
186
|
`execTool`, `readFileTool`, `writeFileTool`, and `patchFileTool`.
|
|
187
187
|
|
|
188
|
+
### MCP (Model Context Protocol)
|
|
189
|
+
|
|
190
|
+
Axle supports connecting to MCP servers via stdio or HTTP transport. Create an
|
|
191
|
+
MCP instance, connect it, and pass it to Agent.
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import { Agent, MCP } from "@fifthrevision/axle";
|
|
195
|
+
|
|
196
|
+
const mcp = new MCP({
|
|
197
|
+
transport: "stdio",
|
|
198
|
+
name: "wc",
|
|
199
|
+
command: "npx",
|
|
200
|
+
args: ["tsx", "path/to/wordcount-server.ts"],
|
|
201
|
+
});
|
|
202
|
+
await mcp.connect();
|
|
203
|
+
|
|
204
|
+
const agent = new Agent({ provider, model, mcps: [mcp] });
|
|
205
|
+
const result = await agent.send("Count the words in 'hello world'").final;
|
|
206
|
+
|
|
207
|
+
await mcp.close();
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
The optional `name` field prefixes all tool names from that server (e.g.
|
|
211
|
+
`wc_word_count`) to avoid collisions when using multiple MCPs. When omitted,
|
|
212
|
+
the server's self-reported name is used as the prefix if available.
|
|
213
|
+
|
|
214
|
+
HTTP transport works the same way:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
const mcp = new MCP({
|
|
218
|
+
transport: "http",
|
|
219
|
+
url: "http://localhost:3100/mcp",
|
|
220
|
+
});
|
|
221
|
+
```
|
|
222
|
+
|
|
188
223
|
### Streaming
|
|
189
224
|
|
|
190
|
-
Agent exposes
|
|
225
|
+
Agent exposes a single `on()` method for streaming events as they arrive.
|
|
191
226
|
|
|
192
227
|
```typescript
|
|
193
228
|
const agent = new Agent({ provider, model });
|
|
194
229
|
|
|
195
|
-
agent.
|
|
196
|
-
|
|
230
|
+
agent.on((event) => {
|
|
231
|
+
switch (event.type) {
|
|
232
|
+
case "text:delta":
|
|
233
|
+
process.stdout.write(event.delta);
|
|
234
|
+
break;
|
|
235
|
+
case "tool:execute":
|
|
236
|
+
console.log(`Running tool: ${event.name}`);
|
|
237
|
+
break;
|
|
238
|
+
case "error":
|
|
239
|
+
console.error(event.error);
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
197
242
|
});
|
|
198
|
-
agent.onPartUpdate((index, type, delta) => process.stdout.write(delta));
|
|
199
|
-
agent.onPartEnd((index, type) => {
|
|
200
|
-
/* part finished */
|
|
201
|
-
});
|
|
202
|
-
agent.onError((error) => console.error(error));
|
|
203
243
|
|
|
204
244
|
const handle = agent.send("Write me a poem.");
|
|
205
245
|
// handle.cancel() to abort mid-stream
|
|
206
246
|
const result = await handle.final;
|
|
207
247
|
```
|
|
208
248
|
|
|
249
|
+
Event types include `text:start`, `text:delta`, `text:end`, `thinking:start`,
|
|
250
|
+
`thinking:delta`, `thinking:end`, `tool:start`, `tool:execute`,
|
|
251
|
+
`tool:complete`, and `error`.
|
|
252
|
+
|
|
209
253
|
Callbacks are registered once and fire on every subsequent `send()`.
|
|
210
254
|
|
|
211
255
|
## Known Limitations
|
|
@@ -276,6 +320,34 @@ batch:
|
|
|
276
320
|
- `concurrency` — max parallel runs (default 3)
|
|
277
321
|
- `resume` — skip files already processed in a previous run
|
|
278
322
|
|
|
323
|
+
### MCP Servers
|
|
324
|
+
|
|
325
|
+
Add an `mcps` key to connect to MCP servers. Both stdio and HTTP transports
|
|
326
|
+
are supported.
|
|
327
|
+
|
|
328
|
+
```yaml
|
|
329
|
+
# axle.job.yaml
|
|
330
|
+
provider:
|
|
331
|
+
type: anthropic
|
|
332
|
+
|
|
333
|
+
mcps:
|
|
334
|
+
- name: wc
|
|
335
|
+
transport: stdio
|
|
336
|
+
command: npx
|
|
337
|
+
args: ["tsx", "examples/mcps/wordcount-server.ts"]
|
|
338
|
+
- transport: http
|
|
339
|
+
url: http://localhost:3100/mcp
|
|
340
|
+
|
|
341
|
+
task: |
|
|
342
|
+
Count the words in "hello world"
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
Each entry supports:
|
|
346
|
+
- `transport` — `"stdio"` or `"http"` (required)
|
|
347
|
+
- `name` — prefix for tool names from this server (optional)
|
|
348
|
+
- `command` / `args` / `env` — for stdio transport
|
|
349
|
+
- `url` / `headers` — for HTTP transport
|
|
350
|
+
|
|
279
351
|
### Configuration
|
|
280
352
|
|
|
281
353
|
For CLI use, create an `axle.config.yaml` in your working directory with API
|
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
3
|
-
${
|
|
4
|
-
${
|
|
5
|
-
`)}
|
|
6
|
-
`)){const s
|
|
7
|
-
`,"utf-8")}
|
|
2
|
+
var Z=Object.defineProperty;var l=(e,t)=>Z(e,"name",{value:t,configurable:!0});import{Command as K}from"@commander-js/extra-typings";import U from"yaml";import{t as D,m as Q,a as X,o as ee,D as te,j as oe,d as re,q as ne,u as J,i as ie,p as x,I as N,h as _,w as ae,v as se,x as ce,y as le,l as pe,k as ue,T as fe,S as B}from"./simple-DbMOgdiX.js";import{z as o}from"zod";import{glob as me}from"glob";import{readFile as G,mkdir as de,appendFile as ge}from"node:fs/promises";import{createInterface as he}from"node:readline";import{createHash as we}from"node:crypto";import{dirname as ye}from"node:path";import"mime";import"@anthropic-ai/sdk";import"@google/genai";import"openai";import"node:child_process";import"node:util";import"@modelcontextprotocol/sdk/client/index.js";import"@modelcontextprotocol/sdk/client/stdio.js";import"@modelcontextprotocol/sdk/client/streamableHttp.js";import"marked";import"marked-terminal";function ve(e,t){if(!t||Object.keys(t).length===0)throw new D(`The provider ${e} is not configured. Please check your configuration.`);switch(e){case"openai":return{provider:ne(t["api-key"]),model:t.model||re};case"anthropic":return{provider:oe(t["api-key"]),model:t.model||te};case"gemini":return{provider:ee(t["api-key"]),model:t.model||X};case"chatcompletions":{const r=t;return{provider:Q(r["base-url"],r["api-key"]),model:r.model}}default:throw new D("The provider is unsupported")}}l(ve,"getProvider");var be="0.8.0",Se={version:be};o.object({value:o.string()});const ke=o.object({"api-key":o.string(),rateLimit:o.number().optional()});o.object({timeout:o.number().optional(),maxBuffer:o.number().optional(),cwd:o.string().optional()});const Ee=o.object({type:o.literal("chatcompletions")}).loose(),Te=o.object({type:o.literal("anthropic")}).loose(),je=o.object({type:o.literal("openai")}).loose(),Ae=o.object({type:o.literal("gemini")}).loose(),Ce=o.discriminatedUnion("type",[Ee,Te,je,Ae]),Oe=o.object({chatcompletions:o.custom().optional(),anthropic:o.custom().optional(),openai:o.custom().optional(),gemini:o.custom().optional(),brave:ke.optional()}).loose(),xe=o.object({transport:o.literal("stdio"),name:o.string().optional(),command:o.string(),args:o.array(o.string()).optional(),env:o.record(o.string(),o.string()).optional()}),Fe=o.object({transport:o.literal("http"),name:o.string().optional(),url:o.string(),headers:o.record(o.string(),o.string()).optional()}),Le=o.discriminatedUnion("transport",[xe,Fe]),Ie=o.object({files:o.string(),resume:o.boolean().default(!1),concurrency:o.number().int().positive().default(3)}),Me=o.object({provider:Ce,task:o.string(),tools:o.array(o.string()).optional(),files:o.array(o.string()).optional(),mcps:o.array(Le).optional(),batch:Ie.optional()}),Pe="axle.job",$e=["yaml","yml","json"];async function Ue(e,t){const{tracer:r}=t,{content:s,format:c}=await J(e,{defaults:{name:Pe,formats:$e},tag:"Job File"});let i=null;if(c==="json")i=JSON.parse(s);else if(c==="yaml"||c==="yml")i=U.parse(s);else throw new Error("Invalid job file format");r?.debug("Job config: "+JSON.stringify(i,null,2));const a=Me.safeParse(i);if(!a.success)throw new Error(`The job file is not valid:
|
|
3
|
+
${H(a.error)}`);return a.data}l(Ue,"getJobConfig");const De="axle.config",Je=["yaml","yml","json"];async function Ne(e,t){const{tracer:r}=t,{content:s,format:c}=await J(e,{defaults:{name:De,formats:Je},tag:"Config File"});let i=null;if(c==="json")i=JSON.parse(s);else if(c==="yaml"||c==="yml")i=U.parse(s);else throw new Error("Invalid config file format");r?.debug("Service config: "+JSON.stringify(i,null,2));const a=Oe.safeParse(i);if(!a.success)throw new Error(`The config file is not valid:
|
|
4
|
+
${H(a.error)}`);return a.data}l(Ne,"getServiceConfig");function H(e){return e.issues.map(t=>` - ${t.path.join(".")||"root"}: ${t.message}`).join(`
|
|
5
|
+
`)}l(H,"formatZodError");async function _e(e,t){const r=[];for(const s of e){const c=new ie(s);await c.connect({tracer:t}),r.push(c)}return r}l(_e,"connectMcps");async function Be(e,t){for(const r of e)try{await r.close({tracer:t})}catch{}}l(Be,"closeMcps");const W=".axle/batch.jsonl";function Ge(e,t){const r=we("sha256");return r.update(e),r.update("\0"),r.update(t),r.digest("hex")}l(Ge,"computeHash");async function He(e=W){const t=new Map;let r;try{r=await G(e,"utf-8")}catch{return t}for(const s of r.split(`
|
|
6
|
+
`)){const c=s.trim();if(c)try{const i=JSON.parse(c);i.file&&i.hash&&t.set(i.file,i)}catch{}}return t}l(He,"loadLedger");async function We(e,t=W){await de(ye(t),{recursive:!0}),await ge(t,JSON.stringify(e)+`
|
|
7
|
+
`,"utf-8")}l(We,"appendLedgerEntry");async function Re(e,t,r,s,c,i,a,f,h){const m=new N(e.task);if(e.files)for(const p of e.files)m.addFile(await x(p));const w=h.startSpan("job",{type:"workflow"}),E=new _({provider:t,model:r,tools:s,mcps:c,tracer:w});try{const p=await E.send(m,i).final;if(f.in+=p.usage.in,f.out+=p.usage.out,p.response){const v=typeof p.response=="string"?p.response:JSON.stringify(p.response,null,2);h.info(v,{markdown:!0})}a.interactive&&await qe(E,f,h),w.end()}catch(p){const v=p instanceof Error?p.message:String(p);throw w.error(v),w.end("error"),p}}l(Re,"runSingle");async function qe(e,t,r){const s=he({input:process.stdin,output:process.stdout});s.on("SIGINT",()=>{s.close()});const c=l(i=>new Promise(a=>{s.question(i,a),s.once("close",()=>a(null))}),"prompt");try{for(;;){const i=await c(`
|
|
8
|
+
> `);if(i===null||i.trim()==="")break;try{const a=await e.send(i.trim()).final;if(t.in+=a.usage.in,t.out+=a.usage.out,a.response){const f=typeof a.response=="string"?a.response:JSON.stringify(a.response,null,2);r.info(f,{markdown:!0})}}catch(a){const f=a instanceof Error?a.message:String(a);r.error(f)}}}finally{s.close()}}l(qe,"runInteractiveLoop");async function ze(e,t,r,s,c,i,a,f,h){const m=e.batch,w=await me(m.files);if(w.length===0){h.warn(`No files matched pattern: ${m.files}`);return}h.info(`Batch: ${w.length} file(s) matched "${m.files}"`);const E=m.resume?await He():new Map,p=e.files?await Promise.all(e.files.map(y=>x(y))):[];let v=0,I=0,M=0;const z=m.concurrency??3;await Ve(z,w,async y=>{const b=h.startSpan(`batch:${y}`,{type:"workflow"});try{const S=await G(y),T=Ge(e.task,S),P=E.get(y);if(m.resume&&P&&P.hash===T){b.info("Skipped (already completed)"),b.end(),I++;return}const O=new N(e.task);for(const Y of p)O.addFile(Y);O.addFile(await x(y));const V={...i,file:y},$=await new _({provider:t,model:r,tools:s,mcps:c,tracer:b}).send(O,V).final;f.in+=$.usage.in,f.out+=$.usage.out,await We({file:y,hash:T,timestamp:Date.now()}),b.end(),v++}catch(S){const T=S instanceof Error?S.message:String(S);b.error(`Failed: ${T}`),b.end("error"),M++}}),h.info(`Batch complete: ${v} completed, ${I} skipped, ${M} failed`)}l(ze,"runBatch");async function Ve(e,t,r){let s=0;async function c(){for(;s<t.length;){const a=s++;await r(t[a])}}l(c,"worker");const i=Array.from({length:Math.min(e,t.length)},()=>c());await Promise.all(i)}l(Ve,"runWithConcurrency");function Ye(e,t){switch(e){case"brave":return ue;case"calculator":return pe;case"exec":return le;case"patch-file":return ce;case"read-file":return se;case"write-file":return ae;default:throw new Error(`Unknown tool: ${e}`)}}l(Ye,"createTool");function Ze(e,t){return e.map(r=>Ye(r))}l(Ze,"createTools");const j=new K().name("axle").description("Axle is a CLI tool for running AI workflows").version(Se.version).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("-d, --debug","Print additional debug information").option("-i, --interactive","Continue the conversation interactively after the initial task").option("--args <args...>","Additional arguments in the form key=value");j.parse(process.argv);const u=j.opts(),A={date:new Date().toISOString().split("T")[0],datetime:new Date().toISOString(),cwd:process.cwd()};u.args&&u.args.forEach(e=>{const[t,r]=e.split("=");t&&r&&(A[t.trim()]=r.trim())});const d=new fe;u.debug&&(d.minLevel="debug");const Ke=new B({minLevel:u.debug?"debug":"info",showInternal:u.debug,showTimestamp:!0,markdown:!0});if(d.addWriter(Ke),u.log){const e=new B({minLevel:"debug",showInternal:!0,showTimestamp:!0,output:l(t=>{},"output")});d.addWriter(e)}const n=d.startSpan("cli",{type:"root"});process.on("uncaughtException",async e=>{console.error("Uncaught exception:"),console.error(e),n.error("Uncaught exception:"),n.error(e.message),n.error(e.stack||""),n.end("error"),await d.flush(),process.exit(1)}),u.debug&&(n.debug("Options: "+JSON.stringify(u,null,2)),n.debug("Additional Arguments: "+JSON.stringify(A,null,2)));let R,g;try{R=await Ne(u.config??null,{tracer:n}),g=await Ue(u.job??null,{tracer:n})}catch(e){const t=e instanceof Error?e:new Error(String(e));n.error(t.message),n.debug(t.stack??""),n.end("error"),await d.flush(),j.outputHelp(),process.exit(1)}let F,L;try{const{type:e,...t}=g.provider,r={...R[e],...t};({provider:F,model:L}=ve(e,r))}catch(e){const t=e instanceof Error?e:new Error(String(e));n.error(t.message),n.error(t.stack??""),n.end("error"),await d.flush(),j.outputHelp(),process.exit(1)}n.info("All systems operational. Running job...");const q=g.tools?.length?Ze(g.tools):[];let k=[];if(g.mcps?.length)try{k=await _e(g.mcps,n)}catch(e){const t=e instanceof Error?e:new Error(String(e));n.error("Failed to connect MCP servers: "+t.message),n.end("error"),await d.flush(),process.exit(1)}const C={in:0,out:0},Qe=performance.now();try{g.batch?await ze(g,F,L,q,k,A,u,C,n):await Re(g,F,L,q,k,A,u,C,n)}catch(e){const t=e instanceof Error?e:new Error(String(e));n.error(t.message),n.debug(t.stack??"")}finally{k.length>0&&await Be(k,n)}const Xe=performance.now()-Qe;n.info(`Total run time: ${Math.round(Xe)}ms`),n.info(`Input tokens: ${C.in}`),n.info(`Output tokens: ${C.out}`),n.info("Complete. Goodbye"),n.end(),await d.flush();
|
package/dist/index.d.ts
CHANGED
|
@@ -98,6 +98,7 @@ interface StreamToolCallCompleteChunk extends StreamChunk {
|
|
|
98
98
|
id: string;
|
|
99
99
|
name: string;
|
|
100
100
|
arguments: any;
|
|
101
|
+
providerMetadata?: Record<string, unknown>;
|
|
101
102
|
};
|
|
102
103
|
}
|
|
103
104
|
interface StreamInternalToolStartChunk extends StreamChunk {
|
|
@@ -119,16 +120,6 @@ interface StreamInternalToolCompleteChunk extends StreamChunk {
|
|
|
119
120
|
}
|
|
120
121
|
type AnyStreamChunk = StreamStartChunk | StreamCompleteChunk | StreamErrorChunk | StreamTextStartChunk | StreamTextDeltaChunk | StreamTextCompleteChunk | StreamThinkingStartChunk | StreamThinkingDeltaChunk | StreamThinkingSummaryDeltaChunk | StreamThinkingCompleteChunk | StreamToolCallStartChunk | StreamToolCallCompleteChunk | StreamInternalToolStartChunk | StreamInternalToolCompleteChunk;
|
|
121
122
|
|
|
122
|
-
interface Tool<TSchema extends ZodObject<any> = ZodObject<any>> {
|
|
123
|
-
name: string;
|
|
124
|
-
description: string;
|
|
125
|
-
schema: TSchema;
|
|
126
|
-
execute(input: z$1.infer<TSchema>): Promise<string>;
|
|
127
|
-
configure?(config: Record<string, any>): void;
|
|
128
|
-
summarize?(input: z$1.infer<TSchema>): string;
|
|
129
|
-
}
|
|
130
|
-
type ToolDefinition = Pick<Tool, "name" | "description" | "schema">;
|
|
131
|
-
|
|
132
123
|
type SpanStatus = "ok" | "error";
|
|
133
124
|
type EventLevel = "debug" | "info" | "warn" | "error";
|
|
134
125
|
type SpanType = string;
|
|
@@ -327,10 +318,19 @@ interface AxleToolCallMessage {
|
|
|
327
318
|
role: "tool";
|
|
328
319
|
content: Array<AxleToolCallResult>;
|
|
329
320
|
}
|
|
321
|
+
type ToolResultPart = {
|
|
322
|
+
type: "text";
|
|
323
|
+
text: string;
|
|
324
|
+
} | {
|
|
325
|
+
type: "image";
|
|
326
|
+
data: string;
|
|
327
|
+
mimeType: string;
|
|
328
|
+
};
|
|
330
329
|
interface AxleToolCallResult {
|
|
331
330
|
id: string;
|
|
332
331
|
name: string;
|
|
333
|
-
content: string;
|
|
332
|
+
content: string | ToolResultPart[];
|
|
333
|
+
isError?: boolean;
|
|
334
334
|
}
|
|
335
335
|
type ContentPart = ContentPartText | ContentPartFile | ContentPartToolCall | ContentPartThinking | ContentPartInternalTool;
|
|
336
336
|
interface ContentPartText {
|
|
@@ -355,6 +355,7 @@ interface ContentPartToolCall {
|
|
|
355
355
|
id: string;
|
|
356
356
|
name: string;
|
|
357
357
|
parameters: Record<string, unknown>;
|
|
358
|
+
providerMetadata?: Record<string, unknown>;
|
|
358
359
|
}
|
|
359
360
|
interface ContentPartInternalTool {
|
|
360
361
|
type: "internal-tool";
|
|
@@ -364,6 +365,58 @@ interface ContentPartInternalTool {
|
|
|
364
365
|
output?: unknown;
|
|
365
366
|
}
|
|
366
367
|
|
|
368
|
+
interface Tool<TSchema extends ZodObject<any> = ZodObject<any>> {
|
|
369
|
+
name: string;
|
|
370
|
+
description: string;
|
|
371
|
+
schema: TSchema;
|
|
372
|
+
execute(input: z$1.infer<TSchema>): Promise<string | ToolResultPart[]>;
|
|
373
|
+
configure?(config: Record<string, any>): void;
|
|
374
|
+
summarize?(input: z$1.infer<TSchema>): string;
|
|
375
|
+
}
|
|
376
|
+
type ToolDefinition = Pick<Tool, "name" | "description" | "schema">;
|
|
377
|
+
|
|
378
|
+
interface MCPStdioConfig {
|
|
379
|
+
transport: "stdio";
|
|
380
|
+
name?: string;
|
|
381
|
+
command: string;
|
|
382
|
+
args?: string[];
|
|
383
|
+
env?: Record<string, string>;
|
|
384
|
+
}
|
|
385
|
+
interface MCPHttpConfig {
|
|
386
|
+
transport: "http";
|
|
387
|
+
name?: string;
|
|
388
|
+
url: string;
|
|
389
|
+
headers?: Record<string, string>;
|
|
390
|
+
}
|
|
391
|
+
type MCPConfig = MCPStdioConfig | MCPHttpConfig;
|
|
392
|
+
declare class MCP {
|
|
393
|
+
private config;
|
|
394
|
+
private client;
|
|
395
|
+
private transport;
|
|
396
|
+
private cachedMcpTools;
|
|
397
|
+
private _connected;
|
|
398
|
+
constructor(config: MCPConfig);
|
|
399
|
+
get name(): string | undefined;
|
|
400
|
+
get connected(): boolean;
|
|
401
|
+
connect(options?: {
|
|
402
|
+
tracer?: TracingContext;
|
|
403
|
+
}): Promise<void>;
|
|
404
|
+
listTools(options?: {
|
|
405
|
+
prefix?: string;
|
|
406
|
+
tracer?: TracingContext;
|
|
407
|
+
}): Promise<Tool[]>;
|
|
408
|
+
listToolDefinitions(options?: {
|
|
409
|
+
prefix?: string;
|
|
410
|
+
tracer?: TracingContext;
|
|
411
|
+
}): Promise<ToolDefinition[]>;
|
|
412
|
+
refreshTools(): Promise<Tool[]>;
|
|
413
|
+
close(options?: {
|
|
414
|
+
tracer?: TracingContext;
|
|
415
|
+
}): Promise<void>;
|
|
416
|
+
private fetchTools;
|
|
417
|
+
private assertConnected;
|
|
418
|
+
}
|
|
419
|
+
|
|
367
420
|
declare class History {
|
|
368
421
|
system: string;
|
|
369
422
|
private _messages;
|
|
@@ -402,7 +455,7 @@ declare function generateTurn(props: GenerateTurnProps): Promise<ModelResult>;
|
|
|
402
455
|
|
|
403
456
|
type ToolCallResult = {
|
|
404
457
|
type: "success";
|
|
405
|
-
content: string;
|
|
458
|
+
content: string | ToolResultPart[];
|
|
406
459
|
} | {
|
|
407
460
|
type: "error";
|
|
408
461
|
error: {
|
|
@@ -441,24 +494,63 @@ type StreamResult = GenerateResult | {
|
|
|
441
494
|
usage: Stats;
|
|
442
495
|
};
|
|
443
496
|
|
|
444
|
-
type
|
|
445
|
-
type
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
type
|
|
449
|
-
|
|
497
|
+
type StreamEvent = {
|
|
498
|
+
type: "text:start";
|
|
499
|
+
index: number;
|
|
500
|
+
} | {
|
|
501
|
+
type: "text:delta";
|
|
502
|
+
index: number;
|
|
503
|
+
delta: string;
|
|
504
|
+
accumulated: string;
|
|
505
|
+
} | {
|
|
506
|
+
type: "text:end";
|
|
507
|
+
index: number;
|
|
508
|
+
final: string;
|
|
509
|
+
} | {
|
|
510
|
+
type: "thinking:start";
|
|
511
|
+
index: number;
|
|
512
|
+
} | {
|
|
513
|
+
type: "thinking:delta";
|
|
514
|
+
index: number;
|
|
515
|
+
delta: string;
|
|
516
|
+
accumulated: string;
|
|
517
|
+
} | {
|
|
518
|
+
type: "thinking:end";
|
|
519
|
+
index: number;
|
|
520
|
+
final: string;
|
|
521
|
+
} | {
|
|
522
|
+
type: "tool:start";
|
|
450
523
|
index: number;
|
|
451
524
|
id: string;
|
|
452
525
|
name: string;
|
|
453
526
|
} | {
|
|
454
|
-
type: "
|
|
527
|
+
type: "tool:execute";
|
|
528
|
+
index: number;
|
|
529
|
+
id: string;
|
|
530
|
+
name: string;
|
|
531
|
+
parameters: Record<string, unknown>;
|
|
532
|
+
} | {
|
|
533
|
+
type: "tool:complete";
|
|
534
|
+
index: number;
|
|
535
|
+
id: string;
|
|
536
|
+
name: string;
|
|
537
|
+
result: ToolCallResult | null;
|
|
538
|
+
} | {
|
|
539
|
+
type: "internal-tool:start";
|
|
540
|
+
index: number;
|
|
541
|
+
id: string;
|
|
542
|
+
name: string;
|
|
543
|
+
} | {
|
|
544
|
+
type: "internal-tool:complete";
|
|
455
545
|
index: number;
|
|
456
546
|
id: string;
|
|
457
547
|
name: string;
|
|
458
548
|
output?: unknown;
|
|
549
|
+
} | {
|
|
550
|
+
type: "error";
|
|
551
|
+
error: GenerateError;
|
|
459
552
|
};
|
|
460
|
-
type
|
|
461
|
-
type ErrorCallback = (error: GenerateError) => void;
|
|
553
|
+
type StreamEventCallback = (event: StreamEvent) => void;
|
|
462
554
|
interface StreamOptions {
|
|
463
555
|
provider: AIProvider;
|
|
464
556
|
model: string;
|
|
@@ -471,11 +563,7 @@ interface StreamOptions {
|
|
|
471
563
|
options?: GenerateTurnOptions;
|
|
472
564
|
}
|
|
473
565
|
interface StreamHandle {
|
|
474
|
-
|
|
475
|
-
onPartUpdate(callback: PartUpdateCallback): void;
|
|
476
|
-
onPartEnd(callback: PartEndCallback): void;
|
|
477
|
-
onInternalTool(callback: InternalToolCallback): void;
|
|
478
|
-
onError(callback: ErrorCallback): void;
|
|
566
|
+
on(callback: StreamEventCallback): void;
|
|
479
567
|
cancel(): void;
|
|
480
568
|
readonly final: Promise<StreamResult>;
|
|
481
569
|
}
|
|
@@ -512,6 +600,7 @@ interface AgentConfig {
|
|
|
512
600
|
model: string;
|
|
513
601
|
system?: string;
|
|
514
602
|
tools?: Tool[];
|
|
603
|
+
mcps?: MCP[];
|
|
515
604
|
tracer?: TracingContext;
|
|
516
605
|
}
|
|
517
606
|
interface AgentResult<T = string> {
|
|
@@ -531,23 +620,20 @@ declare class Agent {
|
|
|
531
620
|
readonly tracer?: TracingContext;
|
|
532
621
|
system: string | undefined;
|
|
533
622
|
tools: Record<string, Tool>;
|
|
534
|
-
private
|
|
535
|
-
private
|
|
536
|
-
private
|
|
537
|
-
private internalToolCallback?;
|
|
538
|
-
private errorCallback?;
|
|
623
|
+
private mcps;
|
|
624
|
+
private mcpToolsResolved;
|
|
625
|
+
private eventCallbacks;
|
|
539
626
|
constructor(config: AgentConfig);
|
|
540
627
|
addTool(tool: Tool): void;
|
|
541
628
|
addTools(tools: Tool[]): void;
|
|
629
|
+
addMcp(mcp: MCP): void;
|
|
630
|
+
addMcps(mcps: MCP[]): void;
|
|
542
631
|
hasTools(): boolean;
|
|
543
|
-
|
|
544
|
-
onPartUpdate(callback: PartUpdateCallback): void;
|
|
545
|
-
onPartEnd(callback: PartEndCallback): void;
|
|
546
|
-
onInternalTool(callback: InternalToolCallback): void;
|
|
547
|
-
onError(callback: ErrorCallback): void;
|
|
632
|
+
on(callback: StreamEventCallback): void;
|
|
548
633
|
send(message: string): AgentHandle<string>;
|
|
549
634
|
send(instruct: Instruct<undefined>, variables?: Record<string, string>): AgentHandle<string>;
|
|
550
635
|
send<TSchema extends OutputSchema>(instruct: Instruct<TSchema>, variables?: Record<string, string>): AgentHandle<ParsedSchema<TSchema>>;
|
|
636
|
+
private resolveMcpTools;
|
|
551
637
|
private execute;
|
|
552
638
|
}
|
|
553
639
|
|
|
@@ -571,10 +657,6 @@ declare const Anthropic: {
|
|
|
571
657
|
readonly CLAUDE_OPUS_4: "claude-opus-4-20250514";
|
|
572
658
|
readonly CLAUDE_SONNET_4_20250514: "claude-sonnet-4-20250514";
|
|
573
659
|
readonly CLAUDE_SONNET_4: "claude-sonnet-4-20250514";
|
|
574
|
-
readonly CLAUDE_3_7_SONNET_20250219: "claude-3-7-sonnet-20250219";
|
|
575
|
-
readonly CLAUDE_3_7_SONNET: "claude-3-7-sonnet-20250219";
|
|
576
|
-
readonly CLAUDE_3_5_HAIKU_20241022: "claude-3-5-haiku-20241022";
|
|
577
|
-
readonly CLAUDE_3_5_HAIKU: "claude-3-5-haiku-20241022";
|
|
578
660
|
readonly CLAUDE_3_HAIKU_20240307: "claude-3-haiku-20240307";
|
|
579
661
|
readonly CLAUDE_3_HAIKU: "claude-3-haiku-20240307";
|
|
580
662
|
};
|
|
@@ -587,6 +669,8 @@ declare function gemini(apiKey: string): AIProvider;
|
|
|
587
669
|
|
|
588
670
|
declare const Gemini: {
|
|
589
671
|
readonly Models: {
|
|
672
|
+
readonly GEMINI_3_1_PRO_PREVIEW: "gemini-3.1-pro-preview";
|
|
673
|
+
readonly GEMINI_3_1_PRO_PREVIEW_CUSTOMTOOLS: "gemini-3.1-pro-preview-customtools";
|
|
590
674
|
readonly GEMINI_3_PRO_PREVIEW: "gemini-3-pro-preview";
|
|
591
675
|
readonly GEMINI_3_FLASH_PREVIEW: "gemini-3-flash-preview";
|
|
592
676
|
readonly GEMINI_3_PRO_IMAGE_PREVIEW: "gemini-3-pro-image-preview";
|
|
@@ -596,12 +680,12 @@ declare const Gemini: {
|
|
|
596
680
|
readonly GEMINI_2_5_FLASH_IMAGE: "gemini-2.5-flash-image";
|
|
597
681
|
readonly GEMINI_2_5_FLASH_LITE: "gemini-2.5-flash-lite";
|
|
598
682
|
readonly GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025: "gemini-2.5-flash-lite-preview-09-2025";
|
|
683
|
+
readonly GEMINI_2_5_FLASH_NATIVE_AUDIO_LATEST: "gemini-2.5-flash-native-audio-latest";
|
|
599
684
|
readonly GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025: "gemini-2.5-flash-native-audio-preview-09-2025";
|
|
600
685
|
readonly GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025: "gemini-2.5-flash-native-audio-preview-12-2025";
|
|
601
686
|
readonly GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025: "gemini-2.5-computer-use-preview-10-2025";
|
|
602
687
|
readonly GEMINI_2_0_FLASH: "gemini-2.0-flash";
|
|
603
688
|
readonly GEMINI_2_0_FLASH_001: "gemini-2.0-flash-001";
|
|
604
|
-
readonly GEMINI_2_0_FLASH_EXP_IMAGE_GENERATION: "gemini-2.0-flash-exp-image-generation";
|
|
605
689
|
readonly GEMINI_2_0_FLASH_LITE: "gemini-2.0-flash-lite";
|
|
606
690
|
readonly GEMINI_2_0_FLASH_LITE_001: "gemini-2.0-flash-lite-001";
|
|
607
691
|
readonly GEMINI_EXP_1206: "gemini-exp-1206";
|
|
@@ -619,7 +703,7 @@ declare const Gemini: {
|
|
|
619
703
|
readonly NANO_BANANA_PRO_PREVIEW: "nano-banana-pro-preview";
|
|
620
704
|
readonly AQA: "aqa";
|
|
621
705
|
};
|
|
622
|
-
readonly DefaultModel: "gemini-
|
|
706
|
+
readonly DefaultModel: "gemini-2.5-flash-lite";
|
|
623
707
|
};
|
|
624
708
|
|
|
625
709
|
interface GenerateOptions {
|
|
@@ -681,17 +765,6 @@ declare const OpenAI: {
|
|
|
681
765
|
readonly GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11: "gpt-4o-mini-search-preview-2025-03-11";
|
|
682
766
|
readonly GPT_4_TURBO: "gpt-4-turbo";
|
|
683
767
|
readonly GPT_4_TURBO_2024_04_09: "gpt-4-turbo-2024-04-09";
|
|
684
|
-
readonly GPT_4_TURBO_PREVIEW: "gpt-4-turbo-preview";
|
|
685
|
-
readonly GPT_4_0125_PREVIEW: "gpt-4-0125-preview";
|
|
686
|
-
readonly GPT_4_1106_PREVIEW: "gpt-4-1106-preview";
|
|
687
|
-
readonly GPT_4: "gpt-4";
|
|
688
|
-
readonly GPT_4_0613: "gpt-4-0613";
|
|
689
|
-
readonly GPT_3_5_TURBO: "gpt-3.5-turbo";
|
|
690
|
-
readonly GPT_3_5_TURBO_0125: "gpt-3.5-turbo-0125";
|
|
691
|
-
readonly GPT_3_5_TURBO_1106: "gpt-3.5-turbo-1106";
|
|
692
|
-
readonly GPT_3_5_TURBO_16K: "gpt-3.5-turbo-16k";
|
|
693
|
-
readonly GPT_3_5_TURBO_INSTRUCT: "gpt-3.5-turbo-instruct";
|
|
694
|
-
readonly GPT_3_5_TURBO_INSTRUCT_0914: "gpt-3.5-turbo-instruct-0914";
|
|
695
768
|
readonly O4_MINI: "o4-mini";
|
|
696
769
|
readonly O4_MINI_2025_04_16: "o4-mini-2025-04-16";
|
|
697
770
|
readonly O4_MINI_DEEP_RESEARCH: "o4-mini-deep-research";
|
|
@@ -792,6 +865,8 @@ interface SimpleWriterOptions {
|
|
|
792
865
|
showTimestamp?: boolean;
|
|
793
866
|
/** Show duration on span end (default: true) */
|
|
794
867
|
showDuration?: boolean;
|
|
868
|
+
/** Render markdown in event messages that have markdown: true attribute (default: false) */
|
|
869
|
+
markdown?: boolean;
|
|
795
870
|
/** Custom output function (default: console.log) */
|
|
796
871
|
output?: (line: string) => void;
|
|
797
872
|
}
|
|
@@ -800,6 +875,7 @@ declare class SimpleWriter implements TraceWriter {
|
|
|
800
875
|
private showInternal;
|
|
801
876
|
private showTimestamp;
|
|
802
877
|
private showDuration;
|
|
878
|
+
private markdown;
|
|
803
879
|
private output;
|
|
804
880
|
private spans;
|
|
805
881
|
private visibleDepths;
|
|
@@ -820,6 +896,7 @@ declare class SimpleWriter implements TraceWriter {
|
|
|
820
896
|
private formatDuration;
|
|
821
897
|
private formatIndent;
|
|
822
898
|
private formatSpanName;
|
|
899
|
+
private renderMarkdown;
|
|
823
900
|
onSpanStart(span: SpanData): void;
|
|
824
901
|
onSpanEnd(span: SpanData): void;
|
|
825
902
|
onSpanUpdate(span: SpanData): void;
|
|
@@ -829,5 +906,5 @@ declare class SimpleWriter implements TraceWriter {
|
|
|
829
906
|
onLLMStreamEnd(span: SpanData, result: LLMResult): void;
|
|
830
907
|
}
|
|
831
908
|
|
|
832
|
-
export { Agent, Anthropic, AxleStopReason, Gemini, History, Instruct, OpenAI, SimpleWriter, Tracer, anthropic, braveSearchTool, calculatorTool, chatCompletions, compileInstruct, gemini, generate, generateTurn, loadFileContent, openai, parseResponse, stream };
|
|
833
|
-
export type { AIProvider, AgentConfig, AgentHandle, AgentResult, AxleAssistantMessage, AxleMessage, AxleToolCallMessage, AxleToolCallResult, AxleUserMessage, ContentPart, ContentPartFile, ContentPartText, ContentPartThinking, ContentPartToolCall, EventLevel, FileInfo, SimpleWriterOptions, SpanData, SpanOptions, SpanType, Tool, ToolDefinition, TraceWriter, TracingContext };
|
|
909
|
+
export { Agent, Anthropic, AxleStopReason, Gemini, History, Instruct, MCP, OpenAI, SimpleWriter, Tracer, anthropic, braveSearchTool, calculatorTool, chatCompletions, compileInstruct, gemini, generate, generateTurn, loadFileContent, openai, parseResponse, stream };
|
|
910
|
+
export type { AIProvider, AgentConfig, AgentHandle, AgentResult, AxleAssistantMessage, AxleMessage, AxleToolCallMessage, AxleToolCallResult, AxleUserMessage, ContentPart, ContentPartFile, ContentPartText, ContentPartThinking, ContentPartToolCall, EventLevel, FileInfo, MCPConfig, MCPHttpConfig, MCPStdioConfig, SimpleWriterOptions, SpanData, SpanOptions, SpanType, StreamEvent, StreamEventCallback, Tool, ToolDefinition, ToolResultPart, TraceWriter, TracingContext };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var
|
|
1
|
+
var E=Object.defineProperty;var r=(n,a)=>E(n,"name",{value:a,configurable:!0});import{D as I,M as L,a as $,b as w,c as F,A as x,g as O,e as q,d as U,f as S}from"./simple-DbMOgdiX.js";import{h as ae,H as ie,I as le,i as ce,S as ue,T as me,j as pe,k as de,l as ge,m as fe,n as Me,o as he,p as Te,q as Re,r as ye,s as De}from"./simple-DbMOgdiX.js";import"@anthropic-ai/sdk";import"zod";import"@google/genai";import"openai";import"glob";import"mime";import"node:fs/promises";import"node:path";import"node:child_process";import"node:util";import"@modelcontextprotocol/sdk/client/index.js";import"@modelcontextprotocol/sdk/client/stdio.js";import"@modelcontextprotocol/sdk/client/streamableHttp.js";import"marked";import"marked-terminal";const _={Models:L,DefaultModel:I},b={Models:w,DefaultModel:$};async function A(n){const{provider:a,model:i,messages:u,system:p,tools:d,tracer:g,options:l}=n;return a.createGenerationRequest(i,{messages:u,system:p,tools:d,context:{tracer:g},options:l})}r(A,"generateTurn");async function G(n){const{provider:a,model:i,messages:u,system:p,tools:d,onToolCall:g,maxIterations:l,tracer:m,options:C}=n,f=[...u],o=[],t={in:0,out:0};let M=0,h;const T=r(e=>{f.push(e),o.push(e)},"addMessage"),c=r(e=>(m?.setResult({kind:"llm",model:i,request:{messages:u},response:{content:e.result==="success"?e.final?.content:null},usage:e.usage?{inputTokens:e.usage.in,outputTokens:e.usage.out}:void 0,finishReason:e.result==="success"?e.final?.finishReason:void 0}),m?.end(e.result==="error"?"error":"ok"),e),"endWithResult"),v=r((e,s)=>{if(!e||s.type==="error"){e?.end("error");return}e.setResult({kind:"llm",model:s.model??i,request:{messages:f},response:{content:s.content},usage:s.usage?{inputTokens:s.usage.in,outputTokens:s.usage.out}:void 0,finishReason:s.finishReason}),e.end()},"setTurnResult");for(;;){if(l!==void 0&&M>=l)return c({result:"error",messages:o,error:{type:"model",error:{type:"error",error:{type:"MaxIterations",message:`Exceeded max iterations (${l})`}}},usage:t});M+=1;const e=m?.startSpan(`turn-${M}`,{type:"llm"}),s=await A({provider:a,model:i,messages:f,system:p,tools:d,tracer:e,options:C});if(F(t,s),v(e,s),s.type==="error")return c({result:"error",messages:o,error:{type:"model",error:s},usage:t});const R={role:"assistant",id:s.id,model:s.model,content:s.content,finishReason:s.finishReason};if(T(R),h=R,s.finishReason!==x.FunctionCall)return c({result:"success",messages:o,final:h,usage:t});const y=O(s.content);if(y.length===0)return c({result:"success",messages:o,final:h,usage:t});const{results:D,missingTool:k}=await q(y,g,m);if(D.length>0&&T({role:"tool",content:D}),k)return c({result:"error",messages:o,error:{type:"tool",error:k},usage:t})}}r(G,"generate");const H={Models:S,DefaultModel:U};export{ae as Agent,_ as Anthropic,x as AxleStopReason,b as Gemini,ie as History,le as Instruct,ce as MCP,H as OpenAI,ue as SimpleWriter,me as Tracer,pe as anthropic,de as braveSearchTool,ge as calculatorTool,fe as chatCompletions,Me as compileInstruct,he as gemini,G as generate,A as generateTurn,Te as loadFileContent,Re as openai,ye as parseResponse,De as stream};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
var Ue=Object.defineProperty;var i=(t,e)=>Ue(t,"name",{value:e,configurable:!0});import*as R from"zod";import D,{z as k}from"zod";import"glob";import De from"mime";import{readFile as B,access as Fe,stat as je,writeFile as re,mkdir as He}from"node:fs/promises";import{resolve as X,extname as oe,dirname as Be}from"node:path";import qe from"@anthropic-ai/sdk";import{FinishReason as M,GoogleGenAI as We}from"@google/genai";import Ve from"openai";import{exec as Je}from"node:child_process";import{promisify as Ke}from"node:util";import{Client as ze}from"@modelcontextprotocol/sdk/client/index.js";import{StdioClientTransport as Xe}from"@modelcontextprotocol/sdk/client/stdio.js";import{StreamableHTTPClientTransport as Ze}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{marked as ae}from"marked";import{markedTerminal as Ye}from"marked-terminal";class V extends Error{static{i(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,V.prototype)}toJSON(){return{name:this.name,message:this.message,code:this.code,...this.id&&{id:this.id},...this.details&&{details:this.details},...this.cause&&{cause:ie(this.cause)}}}}function ie(t){return t instanceof Error?{name:t.name,message:t.message,...t.stack&&{stack:t.stack},..."cause"in t&&t.cause&&{cause:ie(t.cause)}}:t}i(ie,"serializeError");var I=(t=>(t.Stop="stop",t.Length="length",t.FunctionCall="function_call",t.Error="error",t.Custom="custom",t.Cancelled="cancelled",t))(I||{});class ce{static{i(this,"History")}system;_messages=[];constructor(e){e&&(this._messages=e)}get messages(){return[...this._messages]}addSystem(e){this.system=e}addUser(e){typeof e=="string"?this._messages.push({role:"user",content:[{type:"text",text:e}]}):this._messages.push({role:"user",content:e})}addAssistant(e){if(typeof e=="string"){const n=e;this._messages.push({role:"assistant",id:crypto.randomUUID(),content:[{type:"text",text:n}],model:"user",finishReason:I.Custom})}else this._messages.push({role:"assistant",...e})}addToolResults(e){this._messages.push({role:"tool",content:e})}add(e){Array.isArray(e)?this._messages.push(...e):this._messages.push(e)}latest(){return this._messages[this._messages.length-1]}toString(){return JSON.stringify({system:this.system,messages:this._messages})}}function Qe(t){const{text:e,files:n}=t,s=[];if(e&&s.push({type:"text",text:e}),n)for(const r of n)s.push({type:"file",file:r});return s}i(Qe,"toContentParts");function H(t){return typeof t=="string"?t:t.filter(e=>e.type==="text").map(e=>e.text).join(`
|
|
2
|
+
|
|
3
|
+
`)}i(H,"getTextContent");function et(t){return t.filter(e=>e.type==="tool-call")}i(et,"getToolCalls");function tt(t,e){const n=e.usage??{in:0,out:0};t.in+=n.in??0,t.out+=n.out??0}i(tt,"appendUsage");function le(t){return JSON.stringify({error:t})}i(le,"serializeToolError");async function ue(t,e,n){const s=[];let r;for(const o of t){const a=n?.startSpan(o.name,{type:"tool"});let c;try{c=await e(o.name,o.parameters)}catch(d){c={type:"error",error:{type:"exception",message:d instanceof Error?d.message:String(d)}}}if(c==null){r={name:o.name,message:`Tool not found: ${o.name}`},a?.setResult({kind:"tool",name:o.name,input:o.parameters,output:null}),a?.end("error"),s.push({id:o.id,name:o.name,content:le({type:"not-found",message:r.message}),isError:!0});break}c.type==="success"?(a?.setResult({kind:"tool",name:o.name,input:o.parameters,output:c.content}),a?.end("ok"),s.push({id:o.id,name:o.name,content:c.content})):(a?.setResult({kind:"tool",name:o.name,input:o.parameters,output:c.error}),a?.end("error"),s.push({id:o.id,name:o.name,content:le(c.error),isError:!0}))}return{results:s,missingTool:r}}i(ue,"executeToolCalls");function P(t,e){for(const n of t)n(e)}i(P,"emit");function pe(t){const e=[],n=new AbortController;let s=!1,r,o;const a=new Promise((c,d)=>{r=i(m=>{s=!0,c(m)},"resolveResult"),o=i(m=>{s=!0,d(m)},"rejectResult")});return Promise.resolve().then(()=>nt(t,n.signal,e).then(r,o)),{on(c){e.push(c)},cancel(){s||n.abort()},get final(){return a}}}i(pe,"stream");async function nt(t,e,n){const{provider:s,model:r,messages:o,system:a,tools:c,onToolCall:d,maxIterations:m,tracer:p,options:u}=t,l=[...o],f=[],h={in:0,out:0};let _=0,E=0;const w=i(y=>{l.push(y),f.push(y)},"addMessage"),b=i(y=>{y.result==="error"&&P(n,{type:"error",error:y.error});const U=y.result==="success"?y.final?.content:y.result==="cancelled"?y.partial?.content:null,A=y.result==="success"?y.final?.finishReason:y.result==="cancelled"?I.Cancelled:void 0;return p?.setResult({kind:"llm",model:r,request:{messages:o},response:{content:U??null},usage:y.usage?{inputTokens:y.usage.in,outputTokens:y.usage.out}:void 0,finishReason:A}),p?.end(y.result==="error"?"error":"ok"),y},"endWithResult"),O=i((y,U,A,F)=>{F();const $=y.length>0?{role:"assistant",id:U,model:A,content:y,finishReason:I.Cancelled}:void 0;return $&&w($),p?.end("ok"),{result:"cancelled",messages:f,partial:$,usage:h}},"buildCancelledResult");for(;;){if(e.aborted)return O([],"","",()=>{});if(m!==void 0&&E>=m)return b({result:"error",messages:f,error:{type:"model",error:{type:"error",error:{type:"MaxIterations",message:`Exceeded max iterations (${m})`}}},usage:h});E+=1;const y=p?.startSpan(`turn-${E}`,{type:"llm"});y?.startLLMStream();const U=s.createStreamingRequest?.(r,{messages:l,system:a,tools:c,context:{tracer:y},signal:e,options:u});if(!U)throw y?.end("error"),new Error("Provider does not support streaming. Use generate() instead.");const A=[];let F="",L="",$=null,N={in:0,out:0},C=-1,j=null,v="";const Q=new Map,G=i(()=>{j!==null&&C>=0&&(P(n,{type:j==="text"?"text:end":"thinking:end",index:C,final:v}),j=null,v="",C=-1)},"closePart");for await(const g of U){switch(g.type){case"start":F=g.id,L=g.data.model;break;case"text-start":{G(),A.push({type:"text",text:""}),C=_++,j="text",v="",P(n,{type:"text:start",index:C});break}case"text-delta":{const T=A[g.data.index];T.text+=g.data.text,v=T.text,y?.appendLLMStream(g.data.text),P(n,{type:"text:delta",index:C,delta:g.data.text,accumulated:v});break}case"text-complete":{G();break}case"thinking-start":{G(),A.push({type:"thinking",text:""}),C=_++,j="thinking",v="",P(n,{type:"thinking:start",index:C});break}case"thinking-delta":{const T=A[g.data.index];T.text+=g.data.text,v=T.text,P(n,{type:"thinking:delta",index:C,delta:g.data.text,accumulated:v});break}case"thinking-summary-delta":{const T=A[g.data.index];T.text+=g.data.text,v=T.text,P(n,{type:"thinking:delta",index:C,delta:g.data.text,accumulated:v});break}case"thinking-complete":{G();break}case"tool-call-start":{G();const T=_++;A.push({type:"tool-call",id:g.data.id,name:g.data.name,parameters:{}}),Q.set(g.data.id,T),P(n,{type:"tool:start",index:T,id:g.data.id,name:g.data.name});break}case"tool-call-complete":{const T=A[g.data.index];g.data.id&&(T.id=g.data.id),g.data.name&&(T.name=g.data.name),T.parameters=g.data.arguments,g.data.providerMetadata&&(T.providerMetadata=g.data.providerMetadata);break}case"internal-tool-start":{G();const T=_++;A.push({type:"internal-tool",id:g.data.id,name:g.data.name}),P(n,{type:"internal-tool:start",index:T,id:g.data.id,name:g.data.name});break}case"internal-tool-complete":{const T=A[g.data.index];g.data.output!=null&&(T.output=g.data.output),P(n,{type:"internal-tool:complete",index:g.data.index,id:g.data.id,name:g.data.name,output:g.data.output});break}case"complete":{G(),$=g.data.finishReason,N=g.data.usage;break}case"error":{G();const T=g.data.usage??{in:0,out:0};return h.in+=T.in??0,h.out+=T.out??0,y?.end("error"),b({result:"error",messages:f,error:{type:"model",error:{type:"error",error:{type:g.data.type,message:g.data.message}}},usage:h})}default:console.warn("[WARN] Unhandled chunk type. Should never happen")}if(e.aborted)break}if(e.aborted)return y?.end("ok"),O(A,F,L,G);if($===null)return G(),y?.end("error"),b({result:"error",messages:f,error:{type:"model",error:{type:"error",error:{type:"IncompleteStream",message:"Stream ended without a completion signal"}}},usage:h});h.in+=N.in??0,h.out+=N.out??0;const Le={kind:"llm",model:L,request:{messages:l},response:{content:A},usage:{inputTokens:N.in,outputTokens:N.out},finishReason:$};y?.endLLMStream(Le),y?.end();const J={role:"assistant",id:F,model:L,content:A,finishReason:$};if(w(J),$!==I.FunctionCall)return b({result:"success",messages:f,final:J,usage:h});const K=A.filter(g=>g.type==="tool-call");if(K.length===0)return b({result:"success",messages:f,final:J,usage:h});if(e.aborted)return p?.end("ok"),{result:"cancelled",messages:f,usage:h};const Ne=d?async(g,T)=>d(g,T):async()=>null;let ve=0;const Ge=i(async(g,T)=>{const z=K[ve++],ne=Q.get(z.id)??-1;P(n,{type:"tool:execute",index:ne,id:z.id,name:g,parameters:T});const se=await Ne(g,T);return P(n,{type:"tool:complete",index:ne,id:z.id,name:g,result:se??null}),se},"emittingToolCall"),{results:ee,missingTool:te}=await ue(K,Ge,p);if(ee.length>0&&w({role:"tool",content:ee}),te)return b({result:"error",messages:f,error:{type:"tool",error:te},usage:h})}}i(nt,"run");function st(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 a=e[o];return a==null?"":String(a)}return r}),t}i(st,"replaceVariables");function q(t){if(t instanceof R.ZodString)return["string","Your answer"];if(t instanceof R.ZodNumber)return["number",42];if(t instanceof R.ZodBoolean)return["boolean",!0];if(t instanceof R.ZodArray){const e=t.element;if(e instanceof R.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(e instanceof R.ZodNumber)return["number array",[42,59,3.14]];if(e instanceof R.ZodBoolean)return["boolean array",[!0,!1,!1]];if(e instanceof R.ZodObject){const[n,s]=q(e);return["object array",[s,s]]}return["array",[]]}if(t instanceof R.ZodObject){const e=t.shape,n={};for(const[s,r]of Object.entries(e)){const[o,a]=q(r);n[s]=a}return["JSON object",n]}if(t instanceof R.ZodOptional){const e=t.unwrap(),[n,s]=q(e);return[`${n} | undefined`,s]}}i(q,"zodToExample");function de(t,e){if(!e)return t;if(Object.keys(e).length===0){if(t.trim()==="{}"||t.trim()==="")return{};throw new Error("Schema is empty, but rawValue is not an empty object representation or empty string.")}const s=rt(t),r={};for(const[o,a]of Object.entries(e)){const c=s.tags[o];if(c!==void 0)r[o]=me(a,c);else if(a.def.type!=="optional")throw new Error(`Expected results with tag ${o} but it does not exist`)}try{const o={};for(const[a,c]of Object.entries(e))a in r&&(o[a]=c.parse(r[a]));return o}catch(o){if(o&&typeof o=="object"&&"issues"in o){const a=o.issues.map(c=>`${c.path.join(".")}: ${c.message}`).join(", ");throw new Error(`Validation failed: ${a}`)}throw o}}i(de,"parseResponse");function me(t,e){switch(e=e.trim(),t.def.type){case"string":try{return JSON.parse(e)}catch{if(typeof e=="string")return e;throw new Error(`Cannot parse '${e}' as string. Ensure it is a valid JSON string or a plain string.`)}case"number":{const n=parseFloat(e);if(isNaN(n))throw new Error(`Cannot parse '${e}' as number`);return n}case"boolean":{const n=e.toLowerCase();if(n==="true")return!0;if(n==="false")return!1;throw new Error(`Cannot parse '${e}' as boolean. Expected 'true' or 'false'`)}case"array":{if(e==="")return[];try{const n=JSON.parse(e);if(Array.isArray(n))return n}catch{}if(e.includes(","))return e.split(",").map(n=>{const s=n.trim();try{return JSON.parse(s)}catch{return s}}).filter(n=>n!=="")}case"object":{e.includes("```json")&&(e=e.replace(/```json/g,"").replace(/```/g,""));try{return JSON.parse(e)}catch(n){throw new Error(`Cannot parse object as JSON: ${n.message}`)}}case"optional":{const n=t.def.innerType;return me(n,e)}default:return e}}i(me,"preprocessValue");function rt(t){t.trim().startsWith("```json")&&t.trim().endsWith("```")&&(t=t.trim().slice(7,-3).trim());const e=/<(\w+)>(.*?)<\/\1>/gs,n={};let s=t;s=s.replace(e,(o,a,c)=>(n[a]=c,""));const r=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return s=s.replace(r,(o,a,c)=>(n[a]=c,"")),{tags:n,remaining:s.trim()}}i(rt,"parseTaggedSections");function fe(t,e={}){const n={...e,...t.inputs};let s=st(t.prompt,n);if(t.textReferences.length>0)for(const[a,c]of t.textReferences.entries()){const d=c.name?`: ${c.name}`:"";s+=`
|
|
4
|
+
|
|
5
|
+
## Reference ${a+1}${d}
|
|
6
|
+
|
|
7
|
+
\`\`\`${c.content}'''`}let r=`# Instructions
|
|
8
|
+
|
|
9
|
+
`;if((t.schema?Object.keys(t.schema):[]).length>0){r+=`## Output Format Instructions
|
|
10
|
+
`,r+=`
|
|
11
|
+
Here is how you should format your output. Follow the instructions strictly.
|
|
12
|
+
`;for(const[a,c]of Object.entries(t.schema)){const[d,m]=q(c);r+=`
|
|
13
|
+
- Use <${a}></${a}> tags to indicate the answer for ${a}. The answer must be a ${d}.
|
|
14
|
+
Example: <${a}>${JSON.stringify(m)}</${a}>
|
|
15
|
+
`}}if(t.instructions.length>0){r+=`
|
|
16
|
+
## Additional Instructions
|
|
17
|
+
|
|
18
|
+
`;for(const a of t.instructions)r+=`- ${a}
|
|
19
|
+
`}return r+s}i(fe,"compileInstruct");class ot{static{i(this,"Agent")}provider;model;history;tracer;system;tools={};mcps=[];mcpToolsResolved=!1;eventCallbacks=[];constructor(e){this.provider=e.provider,this.model=e.model,this.history=new ce,this.tracer=e.tracer,this.system=e.system,e.tools&&this.addTools(e.tools),e.mcps&&(this.mcps=[...e.mcps])}addTool(e){this.tools[e.name]=e}addTools(e){for(const n of e)this.tools[n.name]=n}addMcp(e){this.mcps.push(e),this.mcpToolsResolved=!1}addMcps(e){this.mcps.push(...e),this.mcpToolsResolved=!1}hasTools(){return Object.keys(this.tools).length>0||this.mcps.length>0}on(e){this.eventCallbacks.push(e)}send(e,n){let s;if(typeof e=="string")this.history.addUser(e);else{const r=fe(e,n),o=e.files;this.history.addUser(Qe({text:r,files:o})),s=e.schema}return this.execute(s)}async resolveMcpTools(){if(!this.mcpToolsResolved){this.tracer?.info("resolving MCP tools",{count:this.mcps.length});for(const e of this.mcps){const n=await e.listTools({prefix:e.name,tracer:this.tracer});this.addTools(n)}this.mcpToolsResolved=!0}}execute(e){let n=!1,s;const r=(async()=>{if(await this.resolveMcpTools(),n)return{response:null,messages:[],final:void 0,usage:{in:0,out:0}};const o=this.tools,a=Object.values(o).map(u=>({name:u.name,description:u.description,schema:u.schema}));s=pe({provider:this.provider,model:this.model,messages:this.history.messages,system:this.system,tools:a.length>0?a:void 0,tracer:this.tracer,onToolCall:i(async(u,l)=>{const f=o[u];if(!f)return null;try{return{type:"success",content:await f.execute(l)}}catch(h){return{type:"error",error:{type:"execution",message:h instanceof Error?h.message:String(h)}}}},"onToolCall")});for(const u of this.eventCallbacks)s.on(u);const c=await s.final;c.messages.length>0&&this.history.add(c.messages);let d=null,m;if(c.result==="error")throw new V(at(c.error),{code:c.error.type==="model"?"MODEL_ERROR":"TOOL_ERROR",details:{error:c.error}});if(c.result==="success"){if(m=c.final,m){const u=H(m.content);d=de(u,e)}}else c.result==="cancelled"&&(m=c.partial);const p=c.usage??{in:0,out:0};return{response:d,messages:c.messages,final:m,usage:p}})();return{cancel:i(()=>{n=!0,s?.cancel()},"cancel"),get final(){return r}}}}function at(t){return t.type==="model"?`Model error: ${t.error.error.message}`:`Tool error (${t.error.name}): ${t.error.message}`}i(at,"formatGenerateError");async function it(t,e){const{defaults:n,tag:s}=e;let r=null,o="";if(t)try{o=X(t),r=await B(o,{encoding:"utf-8"})}catch{throw new Error(`${s} not found, see --help for details`)}else{for(const a of n.formats)try{o=X(n.name+"."+a),r=await B(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()??""}}i(it,"searchAndLoadFile");const he=20*1024*1024;function ct(t){return t.type==="text"}i(ct,"isTextFileInfo");function lt(t){return t.type==="image"||t.type==="document"}i(lt,"isBase64FileInfo");const ut=new Set(["application/json","application/xml","application/yaml","application/x-yaml","application/toml"]);function pt(t){return t.startsWith("text/")||ut.has(t)}i(pt,"isTextLikeMimeType");function dt(t){const e=De.getType(t);if(!e){const n=oe(t).toLowerCase();throw new Error(`Unsupported file type: ${n||"(no extension)"}`)}if(e.startsWith("image/"))return{type:"image",mimeType:e};if(e==="application/pdf")return{type:"document",mimeType:e};if(pt(e))return{type:"text",mimeType:e};{const n=oe(t).toLowerCase();throw new Error(`Unsupported file type: ${n} (${e})`)}}i(dt,"getFileCategory");async function mt(t,e){const n=X(t);try{await Fe(n)}catch{throw new Error(`File not found: ${t}`)}const s=await je(n);if(s.size>he)throw new Error(`File too large: ${s.size} bytes. Maximum allowed: ${he} bytes`);const r=n.split("/").pop()||"",o=dt(n);if((e||(o.type==="text"?"utf-8":"base64"))==="utf-8"){if(o.type!=="text")throw new Error(`Cannot read ${o.type} file as text: ${t}`);const c=await B(n,"utf-8");return{path:n,content:c,mimeType:o.mimeType,size:s.size,name:r,type:"text"}}else{if(o.type==="text")throw new Error(`Cannot read text file as binary: ${t}`);const d=(await B(n)).toString("base64");return{path:n,base64:d,mimeType:o.mimeType,size:s.size,name:r,type:o.type}}}i(mt,"loadFileContent");class ft{static{i(this,"Instruct")}prompt;inputs={};files=[];textReferences=[];instructions=[];schema;constructor(e,n){this.prompt=e,this.schema=n}setInputs(e){this.inputs=e}addInput(e,n){this.inputs[e]=n}addFile(e,n){if(typeof e=="string"){this.textReferences.push({content:e,name:n?.name});return}lt(e)?this.files.push(e):ct(e)&&this.textReferences.push({content:e.content,name:n?.name??e.name})}addInstructions(e){if(typeof e!="string"||e.trim()==="")throw new Error("Instruction must be a non-empty string");this.instructions.push(e)}hasFiles(){return this.files.length>0}}const S={CLAUDE_SONNET_4_6:"claude-sonnet-4-6",CLAUDE_OPUS_4_6:"claude-opus-4-6",CLAUDE_OPUS_4_5_20251101:"claude-opus-4-5-20251101",CLAUDE_OPUS_4_5:"claude-opus-4-5-20251101",CLAUDE_HAIKU_4_5_20251001:"claude-haiku-4-5-20251001",CLAUDE_HAIKU_4_5:"claude-haiku-4-5-20251001",CLAUDE_SONNET_4_5_20250929:"claude-sonnet-4-5-20250929",CLAUDE_SONNET_4_5:"claude-sonnet-4-5-20250929",CLAUDE_OPUS_4_1_20250805:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_1:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_20250514:"claude-opus-4-20250514",CLAUDE_OPUS_4:"claude-opus-4-20250514",CLAUDE_SONNET_4_20250514:"claude-sonnet-4-20250514",CLAUDE_SONNET_4:"claude-sonnet-4-20250514",CLAUDE_3_HAIKU_20240307:"claude-3-haiku-20240307",CLAUDE_3_HAIKU:"claude-3-haiku-20240307"};S.CLAUDE_SONNET_4_6,S.CLAUDE_OPUS_4_6,S.CLAUDE_OPUS_4_5_20251101,S.CLAUDE_HAIKU_4_5_20251001,S.CLAUDE_SONNET_4_5_20250929,S.CLAUDE_OPUS_4_1_20250805,S.CLAUDE_OPUS_4_20250514,S.CLAUDE_SONNET_4_20250514,S.CLAUDE_3_HAIKU_20240307;const ht=S.CLAUDE_HAIKU_4_5;function _e(t){return Array.isArray(t)?t:[t]}i(_e,"arrayify");function _t(t){return new Promise(e=>setTimeout(e,t))}i(_t,"delay");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}}i(W,"getUndefinedError");function ge(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:typeof n.content=="string"?n.content:yt(n.content),...n.isError?{is_error:!0}:{}}))};if(typeof e.content=="string")return{role:"user",content:e.content};{const n=[];for(const s of e.content)s.type==="text"?n.push({type:"text",text:s.text}):s.type==="file"&&(s.file.type==="image"?n.push({type:"image",source:{type:"base64",media_type:s.file.mimeType,data:s.file.base64}}):s.file.type==="document"&&s.file.mimeType==="application/pdf"&&n.push({type:"document",source:{type:"base64",media_type:"application/pdf",data:s.file.base64}}));return{role:"user",content:n}}})}i(ge,"convertToProviderMessages");function ye(t){return t.map(e=>{const n=D.toJSONSchema(e.schema);if(!gt(n))throw new Error(`Schema for tool ${e.name} must be an object type`);return{name:e.name,description:e.description,input_schema:n}})}i(ye,"convertToProviderTools");function Ee(t){const e=[];for(const n of t)if(n.type==="text")e.push({type:"text",text:n.text});else if(n.type==="thinking")e.push({type:"thinking",text:n.text||"",redacted:!1});else if(n.type==="redacted_thinking")e.push({type:"thinking",text:n.text||"",redacted:!0});else if(n.type==="tool_use"){if(typeof n.input!="object"||n.input===null||Array.isArray(n.input))throw new Error(`Invalid tool call input for ${n.name}: expected object, got ${typeof n.input}`);e.push({type:"tool-call",id:n.id,name:n.name,parameters:n.input})}return e}i(Ee,"convertToAxleContentParts");function xe(t){switch(t){case"max_tokens":return I.Length;case"end_turn":return I.Stop;case"stop_sequence":return I.Stop;case"tool_use":return I.FunctionCall;case"pause_turn":case"refusal":default:return I.Error}}i(xe,"convertStopReason$1");function gt(t){return t&&typeof t=="object"&&t.type==="object"}i(gt,"isObjectSchema");function yt(t){return t.map(e=>e.type==="text"?{type:"text",text:e.text}:{type:"image",source:{type:"base64",media_type:e.mimeType,data:e.data}})}i(yt,"convertToolResultParts");async function Et(t){const{client:e,model:n,messages:s,system:r,tools:o,context:a,options:c}=t,d=a?.tracer,{stop:m,max_tokens:p,...u}=c??{},l={model:n,max_tokens:p??16e3,messages:ge(s),...r&&{system:r},...m&&{stop_sequences:_e(m)},...o&&{tools:ye(o)},...u};d?.debug("Anthropic request",{request:l});let f;try{const h=await e.messages.create(l);f=xt(h)}catch(h){f=W(h)}return d?.debug("Anthropic response",{result:f}),f}i(Et,"createGenerationRequest$3");function xt(t){const e=xe(t.stop_reason);if(e===I.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===I.FunctionCall){const n=Ee(t.content);return{type:"success",id:t.id,model:t.model,role:t.role,finishReason:I.FunctionCall,content:n,text:H(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}if(t.type=="message"){const n=Ee(t.content);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:e,content:n,text:H(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}}i(xt,"convertToAIResponse");function It(){const t=new Map,e=new Map,n=new Map;function s(r){const o=[];switch(r.type){case"message_start":o.push({type:"start",id:r.message.id,data:{model:r.message.model,timestamp:Date.now()}});break;case"message_delta":r.delta.stop_reason&&o.push({type:"complete",data:{finishReason:xe(r.delta.stop_reason),usage:r.usage?{in:r.usage.input_tokens||0,out:r.usage.output_tokens||0}:void 0}});case"message_stop":break;case"content_block_start":if(r.content_block.type==="text")t.set(r.index,"text"),o.push({type:"text-start",data:{index:r.index}});else if(r.content_block.type==="tool_use"){t.set(r.index,"tool");const a=r.content_block;n.set(r.index,{id:a.id,name:a.name,argumentsBuffer:""}),o.push({type:"tool-call-start",data:{index:r.index,id:a.id,name:a.name}})}else if(r.content_block.type==="thinking")t.set(r.index,"thinking"),o.push({type:"thinking-start",data:{index:r.index,redacted:!1}});else if(r.content_block.type==="redacted_thinking")t.set(r.index,"thinking"),o.push({type:"thinking-start",data:{index:r.index,redacted:!0}});else if(r.content_block.type==="server_tool_use"){t.set(r.index,"internal-tool");const a=r.content_block;e.set(a.id,{index:r.index,name:a.name}),o.push({type:"internal-tool-start",data:{index:r.index,id:a.id,name:a.name}})}else if(r.content_block.type==="web_search_tool_result"){const a=r.content_block,c=e.get(a.tool_use_id);c&&(o.push({type:"internal-tool-complete",data:{index:c.index,id:a.tool_use_id,name:c.name,output:a.content}}),e.delete(a.tool_use_id))}break;case"content_block_delta":if(r.delta.type==="text_delta")o.push({type:"text-delta",data:{text:r.delta.text,index:r.index}});else if(r.delta.type==="input_json_delta"){const a=n.get(r.index);a&&(a.argumentsBuffer+=r.delta.partial_json)}else r.delta.type==="thinking_delta"?o.push({type:"thinking-delta",data:{text:r.delta.thinking,index:r.index}}):r.delta.type==="signature_delta"||r.delta.type;break;case"content_block_stop":{const a=t.get(r.index);if(a==="text")o.push({type:"text-complete",data:{index:r.index}});else if(a==="thinking")o.push({type:"thinking-complete",data:{index:r.index}});else if(a!=="internal-tool"){if(a==="tool"){const c=n.get(r.index);if(c){try{const d=c.argumentsBuffer?JSON.parse(c.argumentsBuffer):{};o.push({type:"tool-call-complete",data:{index:r.index,id:c.id,name:c.name,arguments:d}})}catch(d){throw new Error(`Failed to parse tool call arguments for ${c.name}: ${d instanceof Error?d.message:String(d)}
|
|
20
|
+
Raw buffer: ${c.argumentsBuffer}`)}n.delete(r.index)}}}t.delete(r.index);break}}return o}return i(s,"handleEvent"),{handleEvent:s}}i(It,"createAnthropicStreamingAdapter");async function*Tt(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:a,signal:c,options:d}=t,m=a?.tracer,{stop:p,max_tokens:u,...l}=d??{},f={model:n,max_tokens:u??St(n),messages:ge(s),...r&&{system:r},...p&&{stop_sequences:_e(p)},...o&&{tools:ye(o)},...l};m?.debug("Anthropic streaming request",{request:f});const h=It();try{const _=await e.messages.create({...f,stream:!0},{signal:c});for await(const E of _){const w=h.handleEvent(E);for(const b of w)yield b}}catch(_){if(c?.aborted)return;yield{type:"error",data:{type:"STREAMING_ERROR",message:_ instanceof Error?_.message:String(_),raw:_}}}}i(Tt,"createStreamingRequest$3");const Ie={[S.CLAUDE_OPUS_4_6]:128e3,[S.CLAUDE_OPUS_4_5_20251101]:64e3,[S.CLAUDE_HAIKU_4_5_20251001]:64e3,[S.CLAUDE_SONNET_4_5_20250929]:64e3,[S.CLAUDE_SONNET_4_20250514]:64e3,[S.CLAUDE_3_7_SONNET_20250219]:64e3,[S.CLAUDE_OPUS_4_1_20250805]:32e3,[S.CLAUDE_OPUS_4_20250514]:32e3,[S.CLAUDE_3_5_HAIKU_20241022]:8192,[S.CLAUDE_3_HAIKU_20240307]:4096};function St(t){return t in Ie?Ie[t]:t.includes("opus")?t.match(/opus-4-[6-9]|opus-[5-9]/)?128e3:64e3:t.includes("sonnet")||t.includes("haiku")?t.match(/claude-3-[0-5]-/)?8192:64e3:16384}i(St,"getMaxTokens");const wt="anthropic";function At(t){const e=new qe({apiKey:t});return{name:wt,async createGenerationRequest(n,s){return await Et({client:e,model:n,...s})},createStreamingRequest(n,s){const{messages:r,system:o,tools:a,context:c,signal:d,options:m}=s;return Tt({client:e,model:n,messages:r,system:o,tools:a,runtime:c,signal:d,options:m})}}}i(At,"anthropic");function Te(t,e){const n=t.map(bt).flat(1);return e?[{role:"system",content:e},...n]:n}i(Te,"convertAxleMessages");function Se(t){if(t&&t.length>0)return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:D.toJSONSchema(e.schema)}}))}i(Se,"convertTools");function Z(t){switch(t){case"stop":return I.Stop;case"length":return I.Length;case"tool_calls":case"function_call":return I.FunctionCall;case"content_filter":return I.Error;default:return I.Stop}}i(Z,"convertFinishReason");function bt(t){switch(t.role){case"tool":return kt(t);case"assistant":return Rt(t);default:return Mt(t)}}i(bt,"convertMessage$2");function kt(t){return t.content.map(e=>({role:"tool",content:typeof e.content=="string"?e.content:e.content.filter(n=>n.type==="text").map(n=>n.text).join(`
|
|
21
|
+
`),tool_call_id:e.id}))}i(kt,"convertToolMessage$2");function Rt(t){const e=t.content.filter(r=>r.type==="tool-call"),n=t.content.filter(r=>r.type==="text"),s=e.length>0?e.map(r=>({type:"function",id:r.id,function:{name:r.name,arguments:JSON.stringify(r.parameters)}})):void 0;return{role:"assistant",content:n.map(r=>r.text).join(""),...s&&{tool_calls:s}}}i(Rt,"convertAssistantMessage$2");function Mt(t){if(typeof t.content=="string")return{role:"user",content:t.content};const e=t.content.map(Ot).filter(n=>n!==null);return e.every(n=>n.type==="text")?{role:"user",content:e.map(n=>n.text).join("")}:{role:"user",content:e}}i(Mt,"convertUserMessage$2");function Ot(t){return t.type==="text"?{type:"text",text:t.text}:t.type==="file"&&t.file.type==="image"?{type:"image_url",image_url:{url:`data:${t.file.mimeType};base64,${t.file.base64}`}}:null}i(Ot,"convertContentPart$2");async function $t(t){const{baseUrl:e,model:n,messages:s,system:r,tools:o,context:a,apiKey:c,options:d}=t,m=a?.tracer,p=Te(s,r),u=Se(o),l={model:n,messages:p,...u&&{tools:u}};d&&(d.temperature!==void 0&&(l.temperature=d.temperature),d.top_p!==void 0&&(l.top_p=d.top_p),d.max_tokens!==void 0&&(l.max_tokens=d.max_tokens),d.frequency_penalty!==void 0&&(l.frequency_penalty=d.frequency_penalty),d.presence_penalty!==void 0&&(l.presence_penalty=d.presence_penalty),d.stop!==void 0&&(l.stop=d.stop)),m?.debug("ChatCompletions request",{request:l});let f;try{const h={"Content-Type":"application/json"};c&&(h.Authorization=`Bearer ${c}`);const _=await fetch(`${e}/chat/completions`,{method:"POST",headers:h,body:JSON.stringify(l)});if(!_.ok){const w=await _.text().catch(()=>"");throw new Error(`HTTP error! status: ${_.status}${w?` - ${w}`:""}`)}const E=await _.json();f=Ct(E)}catch(h){m?.error("Error fetching ChatCompletions response",{error:h instanceof Error?h.message:String(h)}),f=W(h)}return m?.debug("ChatCompletions response",{result:f}),f}i($t,"createGenerationRequest$2");function Ct(t){const e=t.choices?.[0];if(!e)return{type:"error",error:{type:"ChatCompletionsError",message:"No choices in response"},usage:{in:0,out:0},raw:t};const n=[];if(e.message.reasoning_content&&n.push({type:"thinking",text:e.message.reasoning_content}),e.message.content&&n.push({type:"text",text:e.message.content}),e.message.tool_calls)for(const o of e.message.tool_calls){let a;try{a=JSON.parse(o.function.arguments)}catch(c){throw new Error(`Invalid tool call arguments for ${o.function.name}: ${c instanceof Error?c.message:String(c)}`)}if(typeof a!="object"||a===null||Array.isArray(a))throw new Error(`Invalid tool call arguments for ${o.function.name}: expected object, got ${typeof a}`);n.push({type:"tool-call",id:o.id,name:o.function.name,parameters:a})}const s=n.some(o=>o.type==="tool-call"),r=Z(s?"tool_calls":e.finish_reason);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:r,content:n,text:H(n)??"",usage:{in:t.usage?.prompt_tokens||0,out:t.usage?.completion_tokens||0},raw:t}}i(Ct,"fromModelResponse$2");function Pt(){const t=new Map;let e=0,n=-1,s="",r="",o=null,a,c;function d(u){n<0||(o==="text"?u.push({type:"text-complete",data:{index:n}}):o==="thinking"&&u.push({type:"thinking-complete",data:{index:n}}),o=null,n=-1)}i(d,"closeActivePart");function m(u){const l=[];u.usage&&(c={in:u.usage.prompt_tokens,out:u.usage.completion_tokens});const f=u.choices?.[0];if(!f)return l;s||(s=u.id,r=u.model,l.push({type:"start",id:s,data:{model:r,timestamp:Date.now()}}));const h=f.delta;if(h.reasoning_content&&(o!=="thinking"&&(d(l),n=e++,o="thinking",l.push({type:"thinking-start",data:{index:n}})),l.push({type:"thinking-delta",data:{index:n,text:h.reasoning_content}})),h.content&&(o!=="text"&&(d(l),n=e++,o="text",l.push({type:"text-start",data:{index:n}})),l.push({type:"text-delta",data:{text:h.content,index:n}})),h.tool_calls){d(l);for(const _ of h.tool_calls){const E=_.index;if(!t.has(E)){const b=e++,O=_.id||`tool-${b}`;t.set(E,{id:O,name:_.function?.name||"",argumentsBuffer:"",partIdx:b}),l.push({type:"tool-call-start",data:{index:b,id:O,name:_.function?.name||""}})}const w=t.get(E);_.id&&(w.id=_.id),_.function?.name&&(w.name=_.function.name),_.function?.arguments&&(w.argumentsBuffer+=_.function.arguments)}}if(f.finish_reason){d(l);for(const[,_]of t)try{const E=_.argumentsBuffer?JSON.parse(_.argumentsBuffer):{};l.push({type:"tool-call-complete",data:{index:_.partIdx,id:_.id,name:_.name,arguments:E}})}catch(E){throw new Error(`Failed to parse tool call arguments for ${_.name}: ${E instanceof Error?E.message:String(E)}
|
|
22
|
+
Raw buffer: ${_.argumentsBuffer}`)}a=Z(f.finish_reason)}return l}i(m,"handleChunk");function p(){return a===void 0?[]:[{type:"complete",data:{finishReason:a,usage:c??{in:0,out:0}}}]}return i(p,"finalize"),{handleChunk:m,finalize:p}}i(Pt,"createStreamingAdapter$1");async function*Lt(t){const{baseUrl:e,model:n,messages:s,system:r,tools:o,context:a,signal:c,apiKey:d,options:m}=t,p=a?.tracer,u=Te(s,r),l=Se(o),f={model:n,messages:u,stream:!0,stream_options:{include_usage:!0},...l&&{tools:l}};m&&(m.temperature!==void 0&&(f.temperature=m.temperature),m.top_p!==void 0&&(f.top_p=m.top_p),m.max_tokens!==void 0&&(f.max_tokens=m.max_tokens),m.frequency_penalty!==void 0&&(f.frequency_penalty=m.frequency_penalty),m.presence_penalty!==void 0&&(f.presence_penalty=m.presence_penalty),m.stop!==void 0&&(f.stop=m.stop)),p?.debug("ChatCompletions streaming request",{request:f});const h=Pt();try{const _={"Content-Type":"application/json"};d&&(_.Authorization=`Bearer ${d}`);const E=await fetch(`${e}/chat/completions`,{method:"POST",headers:_,body:JSON.stringify(f),signal:c});if(!E.ok){const y=await E.text().catch(()=>"");throw new Error(`HTTP error! status: ${E.status}${y?` - ${y}`:""}`)}if(!E.body)throw new Error("Response body is null");const w=E.body.getReader(),b=new TextDecoder;let O="";for(;;){const{done:y,value:U}=await w.read();if(y)break;O+=b.decode(U,{stream:!0});const A=O.split(`
|
|
23
|
+
`);O=A.pop()||"";for(const F of A){const L=F.trim();if(!L||L.startsWith(":")||!L.startsWith("data: "))continue;const $=L.slice(6);if($!=="[DONE]")try{const N=JSON.parse($),C=h.handleChunk(N);for(const j of C)yield j}catch(N){p?.error("Error parsing ChatCompletions stream chunk",{error:N instanceof Error?N.message:String(N),line:L})}}}for(const y of h.finalize())yield y}catch(_){if(c?.aborted)return;p?.error("Error in ChatCompletions streaming request",{error:_ instanceof Error?_.message:String(_)}),yield{type:"error",data:{type:"STREAMING_ERROR",message:_ instanceof Error?_.message:String(_),raw:_}}}}i(Lt,"createStreamingRequest$2");function Nt(t,e){return{name:"ChatCompletions",async createGenerationRequest(n,s){return await $t({baseUrl:t,model:n,apiKey:e,...s})},createStreamingRequest(n,s){return Lt({baseUrl:t,model:n,apiKey:e,...s})}}}i(Nt,"chatCompletions");const x={GEMINI_3_1_PRO_PREVIEW:"gemini-3.1-pro-preview",GEMINI_3_1_PRO_PREVIEW_CUSTOMTOOLS:"gemini-3.1-pro-preview-customtools",GEMINI_3_PRO_PREVIEW:"gemini-3-pro-preview",GEMINI_3_FLASH_PREVIEW:"gemini-3-flash-preview",GEMINI_3_PRO_IMAGE_PREVIEW:"gemini-3-pro-image-preview",GEMINI_2_5_PRO:"gemini-2.5-pro",GEMINI_2_5_FLASH:"gemini-2.5-flash",GEMINI_2_5_FLASH_PREVIEW_09_2025:"gemini-2.5-flash-preview-09-2025",GEMINI_2_5_FLASH_IMAGE:"gemini-2.5-flash-image",GEMINI_2_5_FLASH_LITE:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025:"gemini-2.5-flash-lite-preview-09-2025",GEMINI_2_5_FLASH_NATIVE_AUDIO_LATEST:"gemini-2.5-flash-native-audio-latest",GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025:"gemini-2.5-flash-native-audio-preview-09-2025",GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025:"gemini-2.5-flash-native-audio-preview-12-2025",GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025:"gemini-2.5-computer-use-preview-10-2025",GEMINI_2_0_FLASH:"gemini-2.0-flash",GEMINI_2_0_FLASH_001:"gemini-2.0-flash-001",GEMINI_2_0_FLASH_LITE:"gemini-2.0-flash-lite",GEMINI_2_0_FLASH_LITE_001:"gemini-2.0-flash-lite-001",GEMINI_EXP_1206:"gemini-exp-1206",GEMINI_FLASH_LATEST:"gemini-flash-latest",GEMINI_FLASH_LITE_LATEST:"gemini-flash-lite-latest",GEMINI_PRO_LATEST:"gemini-pro-latest",GEMMA_3_27B_IT:"gemma-3-27b-it",GEMMA_3_12B_IT:"gemma-3-12b-it",GEMMA_3_4B_IT:"gemma-3-4b-it",GEMMA_3_1B_IT:"gemma-3-1b-it",GEMMA_3N_E4B_IT:"gemma-3n-e4b-it",GEMMA_3N_E2B_IT:"gemma-3n-e2b-it",DEEP_RESEARCH_PRO_PREVIEW_12_2025:"deep-research-pro-preview-12-2025",GEMINI_ROBOTICS_ER_1_5_PREVIEW:"gemini-robotics-er-1.5-preview",NANO_BANANA_PRO_PREVIEW:"nano-banana-pro-preview",AQA:"aqa"};x.GEMINI_3_1_PRO_PREVIEW,x.GEMINI_3_1_PRO_PREVIEW_CUSTOMTOOLS,x.GEMINI_3_PRO_PREVIEW,x.GEMINI_3_FLASH_PREVIEW,x.GEMINI_3_PRO_IMAGE_PREVIEW,x.GEMINI_2_5_PRO,x.GEMINI_2_5_FLASH,x.GEMINI_2_5_FLASH_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_IMAGE,x.GEMINI_2_5_FLASH_LITE,x.GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_NATIVE_AUDIO_LATEST,x.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025,x.GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025,x.GEMINI_2_0_FLASH,x.GEMINI_2_0_FLASH_001,x.GEMINI_2_0_FLASH_LITE,x.GEMINI_2_0_FLASH_LITE_001,x.GEMINI_EXP_1206,x.GEMINI_FLASH_LATEST,x.GEMINI_FLASH_LITE_LATEST,x.GEMINI_PRO_LATEST,x.GEMMA_3_27B_IT,x.GEMMA_3_12B_IT,x.GEMMA_3_4B_IT,x.GEMMA_3_1B_IT,x.GEMMA_3N_E4B_IT,x.GEMMA_3N_E2B_IT,x.DEEP_RESEARCH_PRO_PREVIEW_12_2025,x.GEMINI_ROBOTICS_ER_1_5_PREVIEW,x.NANO_BANANA_PRO_PREVIEW;const vt=x.GEMINI_2_5_FLASH_LITE;function we(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:D.toJSONSchema(r.schema)}]}))),n&&Object.assign(s,n),s}i(we,"prepareConfig");function Ae(t){return t.map(Gt).filter(e=>e!==void 0)}i(Ae,"convertAxleMessagesToGemini");function Gt(t){switch(t.role){case"tool":return Ut(t);case"assistant":return Dt(t);case"user":return Ft(t)}}i(Gt,"convertMessage$1");function Ut(t){return{role:"user",parts:t.content.flatMap(e=>{const n={functionResponse:{id:e.id??void 0,name:e.name,response:{output:typeof e.content=="string"?e.content:e.content.filter(r=>r.type==="text").map(r=>r.text).join(`
|
|
24
|
+
`)}}};if(typeof e.content=="string")return[n];const s=e.content.filter(r=>r.type==="image").map(r=>({inlineData:{mimeType:r.mimeType,data:r.data}}));return[n,...s]})}}i(Ut,"convertToolMessage$1");function Dt(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=>{const o={functionCall:{id:r.id??void 0,name:r.name,args:r.parameters}};return r.providerMetadata?.thoughtSignature&&(o.thoughtSignature=r.providerMetadata.thoughtSignature),o})),{role:"model",parts:e}}i(Dt,"convertAssistantMessage$1");function Ft(t){return typeof t.content=="string"?{role:"user",parts:[{text:t.content}]}:{role:"user",parts:t.content.map(jt).filter(n=>n!==null)}}i(Ft,"convertUserMessage$1");function jt(t){return t.type==="text"?{text:t.text}:t.type==="file"&&(t.file.type==="image"||t.file.type==="document")?{inlineData:{mimeType:t.file.mimeType,data:t.file.base64}}:null}i(jt,"convertContentPart$1");function be(t){switch(t){case M.STOP:return[!0,I.Stop];case M.MAX_TOKENS:return[!0,I.Length];case M.FINISH_REASON_UNSPECIFIED:case M.SAFETY:case M.RECITATION:case M.LANGUAGE:case M.OTHER:case M.BLOCKLIST:case M.PROHIBITED_CONTENT:case M.SPII:case M.MALFORMED_FUNCTION_CALL:case M.IMAGE_SAFETY:return[!1,I.Error]}}i(be,"convertStopReason");async function Ht(t){const{client:e,model:n,messages:s,system:r,tools:o,context:a,options:c}=t,d=a?.tracer,m=c?{...c}:{};m.max_tokens&&(m.maxOutputTokens=m.max_tokens,delete m.max_tokens),m.stop&&(m.stopSequences=Array.isArray(m.stop)?m.stop:[m.stop],delete m.stop),m.top_p!==void 0&&(m.topP=m.top_p,delete m.top_p);const p={contents:Ae(s),config:we(o,r,m)};d?.debug("Gemini request",{request:p});let u;try{const l=await e.models.generateContent({model:n,...p});u=Bt(l,{tracer:d})}catch(l){d?.error(l instanceof Error?l.message:String(l)),u=W(l)}return d?.debug("Gemini response",{result:u}),u}i(Ht,"createGenerationRequest$1");function Bt(t,e){const{tracer: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(`We received ${t.candidates.length} response candidates`);const a=t.candidates[0],d=(a.content?.parts||[]).map(u=>u.text).filter(u=>u!==void 0).join(""),[m,p]=be(a.finishReason);if(m){const u=[];if(d&&u.push({type:"text",text:d}),t.functionCalls)for(const l of t.functionCalls)if(l.args==null)u.push({type:"tool-call",id:l.id,name:l.name,parameters:{}});else{if(typeof l.args!="object"||Array.isArray(l.args))throw new Error(`Invalid tool call arguments for ${l.name}: expected object, got ${typeof l.args}`);u.push({type:"tool-call",id:l.id,name:l.name,parameters:l.args})}return{type:"success",id:t.responseId,model:t.modelVersion,role:"assistant",finishReason:t.functionCalls?I.FunctionCall:p,content:u,text:H(u)??"",usage:o,raw:t}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${p}`},usage:o,raw:t}}i(Bt,"fromModelResponse$1");function qt(){let t=0,e=-1,n=!1,s="",r="",o=0,a=0,c=null;function d(p){e<0||(c==="text"?p.push({type:"text-complete",data:{index:e}}):c==="thinking"&&p.push({type:"thinking-complete",data:{index:e}}),c=null,e=-1)}i(d,"closeActivePart");function m(p){const u=[];s||(s=p.responseId||`gemini-${Date.now()}`,r=p.modelVersion||"gemini",u.push({type:"start",id:s,data:{model:r,timestamp:Date.now()}})),p.usageMetadata&&(o=p.usageMetadata.promptTokenCount||0,a=(p.usageMetadata.totalTokenCount||0)-o);const l=p.candidates?.[0];if(!l)return u;const f=l.content?.parts||[];for(const h of f){const _="thought"in h&&h.thought===!0;if(_&&h.text?(c!=="thinking"&&(d(u),e=t++,c="thinking",u.push({type:"thinking-start",data:{index:e}})),u.push({type:"thinking-delta",data:{index:e,text:h.text}})):h.text&&!_?(c!=="text"&&(d(u),e=t++,c="text",u.push({type:"text-start",data:{index:e}})),u.push({type:"text-delta",data:{text:h.text,index:e}})):h.functionCall||console.log(`[gemini] unhandled part type: ${JSON.stringify(Object.keys(h))}`),h.functionCall){d(u),n=!0;const E=t++,w=h.functionCall.id||`tool-${E}`;u.push({type:"tool-call-start",data:{index:E,id:w,name:h.functionCall.name}});const b={index:E,id:w,name:h.functionCall.name,arguments:h.functionCall.args??{}},O=h;O.thoughtSignature&&(b.providerMetadata={thoughtSignature:O.thoughtSignature}),u.push({type:"tool-call-complete",data:b})}}if(l.finishReason&&l.finishReason!==M.FINISH_REASON_UNSPECIFIED){d(u);const[h,_]=be(l.finishReason),E=n?I.FunctionCall:_;!h&&!n?u.push({type:"error",data:{type:"FinishReasonError",message:`Unexpected finish reason: ${l.finishReason}`,usage:{in:o,out:a},raw:p}}):u.push({type:"complete",data:{finishReason:E,usage:{in:o,out:a}}})}return u}return i(m,"handleChunk"),{handleChunk:m}}i(qt,"createGeminiStreamingAdapter");async function*Wt(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:a,signal:c,options:d}=t,m=a?.tracer,p=d?{...d}:{};p.max_tokens&&(p.maxOutputTokens=p.max_tokens,delete p.max_tokens),p.stop&&(p.stopSequences=Array.isArray(p.stop)?p.stop:[p.stop],delete p.stop),p.top_p!==void 0&&(p.topP=p.top_p,delete p.top_p);const u={contents:Ae(s),config:we(o,r,p)};m?.debug("Gemini streaming request",{request:u});const l=qt();try{const f=await e.models.generateContentStream({model:n,...u});for await(const h of f){const _=l.handleChunk(h);for(const E of _)yield E}}catch(f){if(c?.aborted)return;m?.error(f instanceof Error?f.message:String(f)),yield{type:"error",data:{type:"STREAMING_ERROR",message:f instanceof Error?f.message:String(f),raw:f}}}}i(Wt,"createStreamingRequest$1");const Vt="Gemini";function Jt(t){const e=new We({apiKey:t});return{name:Vt,async createGenerationRequest(n,s){return await Ht({client:e,model:n,...s})},createStreamingRequest(n,s){const{messages:r,system:o,tools:a,context:c,signal:d,options:m}=s;return Wt({client:e,model:n,messages:r,system:o,tools:a,runtime:c,signal:d,options:m})}}}i(Jt,"gemini");const ke={GPT_5_2:"gpt-5.2",GPT_5_2_2025_12_11:"gpt-5.2-2025-12-11",GPT_5_2_CHAT_LATEST:"gpt-5.2-chat-latest",GPT_5_2_PRO:"gpt-5.2-pro",GPT_5_2_PRO_2025_12_11:"gpt-5.2-pro-2025-12-11",GPT_5_2_CODEX:"gpt-5.2-codex",GPT_5_1:"gpt-5.1",GPT_5_1_2025_11_13:"gpt-5.1-2025-11-13",GPT_5_1_CHAT_LATEST:"gpt-5.1-chat-latest",GPT_5_1_CODEX:"gpt-5.1-codex",GPT_5_1_CODEX_MAX:"gpt-5.1-codex-max",GPT_5_1_CODEX_MINI:"gpt-5.1-codex-mini",GPT_5:"gpt-5",GPT_5_2025_08_07:"gpt-5-2025-08-07",GPT_5_CHAT_LATEST:"gpt-5-chat-latest",GPT_5_CODEX:"gpt-5-codex",GPT_5_MINI:"gpt-5-mini",GPT_5_MINI_2025_08_07:"gpt-5-mini-2025-08-07",GPT_5_NANO:"gpt-5-nano",GPT_5_NANO_2025_08_07:"gpt-5-nano-2025-08-07",GPT_5_PRO:"gpt-5-pro",GPT_5_PRO_2025_10_06:"gpt-5-pro-2025-10-06",GPT_5_SEARCH_API:"gpt-5-search-api",GPT_5_SEARCH_API_2025_10_14:"gpt-5-search-api-2025-10-14",GPT_4_1:"gpt-4.1",GPT_4_1_2025_04_14:"gpt-4.1-2025-04-14",GPT_4_1_MINI:"gpt-4.1-mini",GPT_4_1_MINI_2025_04_14:"gpt-4.1-mini-2025-04-14",GPT_4_1_NANO:"gpt-4.1-nano",GPT_4_1_NANO_2025_04_14:"gpt-4.1-nano-2025-04-14",GPT_4O:"gpt-4o",GPT_4O_2024_11_20:"gpt-4o-2024-11-20",GPT_4O_2024_08_06:"gpt-4o-2024-08-06",GPT_4O_2024_05_13:"gpt-4o-2024-05-13",GPT_4O_MINI:"gpt-4o-mini",GPT_4O_MINI_2024_07_18:"gpt-4o-mini-2024-07-18",GPT_4O_SEARCH_PREVIEW:"gpt-4o-search-preview",GPT_4O_SEARCH_PREVIEW_2025_03_11:"gpt-4o-search-preview-2025-03-11",GPT_4O_MINI_SEARCH_PREVIEW:"gpt-4o-mini-search-preview",GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11:"gpt-4o-mini-search-preview-2025-03-11",GPT_4_TURBO:"gpt-4-turbo",GPT_4_TURBO_2024_04_09:"gpt-4-turbo-2024-04-09",O4_MINI:"o4-mini",O4_MINI_2025_04_16:"o4-mini-2025-04-16",O4_MINI_DEEP_RESEARCH:"o4-mini-deep-research",O4_MINI_DEEP_RESEARCH_2025_06_26:"o4-mini-deep-research-2025-06-26",O3:"o3",O3_2025_04_16:"o3-2025-04-16",O3_PRO:"o3-pro",O3_PRO_2025_06_10:"o3-pro-2025-06-10",O3_MINI:"o3-mini",O3_MINI_2025_01_31:"o3-mini-2025-01-31",O3_DEEP_RESEARCH:"o3-deep-research",O3_DEEP_RESEARCH_2025_06_26:"o3-deep-research-2025-06-26",O1:"o1",O1_2024_12_17:"o1-2024-12-17",O1_PRO:"o1-pro",O1_PRO_2025_03_19:"o1-pro-2025-03-19",COMPUTER_USE_PREVIEW:"computer-use-preview",COMPUTER_USE_PREVIEW_2025_03_11:"computer-use-preview-2025-03-11",CHATGPT_IMAGE_LATEST:"chatgpt-image-latest"},Kt=ke.GPT_5_MINI;function Re(t){if(t&&t.length>0)return t.map(e=>({type:"function",strict:!0,name:e.name,description:e.description,parameters:D.toJSONSchema(e.schema)}))}i(Re,"prepareTools");function Me(t){return t.map(zt).flat(1)}i(Me,"convertAxleMessageToResponseInput");function zt(t){switch(t.role){case"tool":return Xt(t);case"assistant":return Zt(t);default:return Yt(t)}}i(zt,"convertMessage");function Xt(t){return t.content.map(e=>({type:"function_call_output",call_id:e.id,output:typeof e.content=="string"?e.content:e.content.map(n=>n.type==="text"?{type:"input_text",text:n.text}:{type:"input_image",image_url:`data:${n.mimeType};base64,${n.data}`})}))}i(Xt,"convertToolMessage");function Zt(t){const e=[],n=H(t.content);n&&e.push({role:t.role,content:n});const s=t.content.filter(r=>r.type==="tool-call");for(const r of s)e.push({type:"function_call",call_id:r.id,name:r.name,arguments:JSON.stringify(r.parameters)});return e}i(Zt,"convertAssistantMessage");function Yt(t){if(typeof t.content=="string")return{role:t.role,content:t.content};{const e=t.content.map(Qt).filter(n=>n!==null);return{role:t.role,content:e}}}i(Yt,"convertUserMessage");function Qt(t){if(t.type==="text")return{type:"input_text",text:t.text};if(t.type==="file"){if(t.file.type==="image")return{type:"input_image",image_url:`data:${t.file.mimeType};base64,${t.file.base64}`,detail:"auto"};if(t.file.type==="document")return{type:"input_file",filename:t.file.path,file_data:`data:${t.file.mimeType};base64,${t.file.base64}`}}return t.type==="thinking",null}i(Qt,"convertContentPart");async function en(t){const{client:e,model:n,messages:s,system:r,tools:o,context:a,options:c}=t,d=a?.tracer,m=Re(o),p={model:n,input:Me(s),...r&&{instructions:r},...m?{tools:m}:{},...c};d?.debug("OpenAI ResponsesAPI request",{request:p});let u;try{const l=await e.responses.create(p);u=tn(l)}catch(l){d?.error(l instanceof Error?l.message:String(l)),u=W(l)}return d?.debug("OpenAI ResponsesAPI response",{result:u}),u}i(en,"createGenerationRequest");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(a){throw new Error(`Failed to parse tool call arguments for ${o.name}: ${a instanceof Error?a.message:String(a)}
|
|
25
|
+
Raw value: ${o.arguments}`)}}return{type:"success",id:t.id,model:t.model||"",role:"assistant",finishReason:t.incomplete_details?I.Error:I.Stop,content:n,text:H(n)??"",usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t}}i(tn,"fromModelResponse");function nn(){let t="",e="",n=0,s=-1,r=!1;const o=new Map,a=new Map,c=new Set(["web_search_call","file_search_call","code_interpreter_call"]),d=new Map;function m(p){const u=[];switch(p.type){case"response.created":{t=p.response.id||`openai-${Date.now()}`,e=p.response.model,u.push({type:"start",id:t,data:{model:e,timestamp:Date.now()}});break}case"response.output_text.delta":{s===-1&&(s=n++,u.push({type:"text-start",data:{index:s}})),u.push({type:"text-delta",data:{text:p.delta,index:s}});break}case"response.output_text.done":{s>=0&&(u.push({type:"text-complete",data:{index:s}}),s=-1);break}case"response.function_call_arguments.delta":{const l=p.item_id;if(!d.has(l)){const h=o.get(l),_=h?.name||"",E=h?.callId||l,w=n++;d.set(l,{id:l,callId:E,name:_,argumentsBuffer:"",partIdx:w}),u.push({type:"tool-call-start",data:{index:w,id:E,name:_}})}const f=d.get(l);f.argumentsBuffer+=p.delta;break}case"response.function_call_arguments.done":{r=!0;const l=p.item_id,f=d.get(l),h=p.name||f?.name||"";if(f){try{const _=p.arguments?JSON.parse(p.arguments):{};u.push({type:"tool-call-complete",data:{index:f.partIdx,id:f.callId,name:h,arguments:_}})}catch(_){throw new Error(`Failed to parse function call arguments for ${h}: ${_ instanceof Error?_.message:String(_)}
|
|
26
|
+
Raw value: ${p.arguments}`)}d.delete(l)}break}case"response.completed":{const l=p.response.usage;u.push({type:"complete",data:{finishReason:p.response.incomplete_details?I.Error:r?I.FunctionCall:I.Stop,usage:{in:l?.input_tokens||0,out:l?.output_tokens||0}}});break}case"response.failed":{u.push({type:"error",data:{type:"RESPONSES_API_ERROR",message:`Response failed: ${p.response.status}`,raw:p}});break}case"response.output_item.added":{if(p.item?.type==="reasoning")s=n++,u.push({type:"thinking-start",data:{index:s}});else if(p.item?.type==="function_call"){const l=p.item,f=l.id||l.call_id;f&&o.set(f,{name:l.name||"",callId:l.call_id||f})}else if(p.item&&c.has(p.item.type)){const l=p.item,f=n++;a.set(l.id,f),u.push({type:"internal-tool-start",data:{index:f,id:l.id,name:l.type}})}break}case"response.output_item.done":{if(p.item?.type==="reasoning"&&s>=0)u.push({type:"thinking-complete",data:{index:s}}),s=-1;else if(p.item&&c.has(p.item.type)){const l=p.item,f=a.get(l.id);f!==void 0&&(u.push({type:"internal-tool-complete",data:{index:f,id:l.id,name:l.type,output:p.item}}),a.delete(l.id))}break}case"response.reasoning_text.delta":{p.delta&&u.push({type:"thinking-delta",data:{index:s,text:p.delta}});break}case"response.reasoning_summary_text.delta":{p.delta&&u.push({type:"thinking-summary-delta",data:{index:s,text:p.delta}});break}case"response.in_progress":case"response.content_part.added":case"response.content_part.done":case"response.reasoning_summary_part.added":case"response.reasoning_summary_part.done":case"response.reasoning_summary_text.done":case"response.reasoning_text.done":break;default:console.log(`[OpenAI] unhandled stream event: ${p.type}`)}return u}return i(m,"handleEvent"),{handleEvent:m}}i(nn,"createStreamingAdapter");async function*sn(t){const{client:e,model:n,messages:s,system:r,tools:o,runtime:a,signal:c,options:d}=t,m=a?.tracer,p=Re(o),u={model:n,input:Me(s),...r&&{instructions:r},stream:!0,...p?{tools:p}:{},...d};m?.debug("OpenAI ResponsesAPI streaming request",{request:u});const l=nn();try{const f=e.responses.stream(u,...c?[{signal:c}]:[]);for await(const h of f){const _=l.handleEvent(h);for(const E of _)yield E}}catch(f){if(c?.aborted)return;m?.error(f instanceof Error?f.message:String(f)),yield{type:"error",data:{type:"STREAMING_ERROR",message:f instanceof Error?f.message:String(f),raw:f}}}}i(sn,"createStreamingRequest");const rn="OpenAI";function on(t){const e=new Ve({apiKey:t});return{name:rn,async createGenerationRequest(n,s){return await en({client:e,model:n,...s})},createStreamingRequest(n,s){const{messages:r,system:o,tools:a,context:c,signal:d,options:m}=s;return sn({client:e,model:n,messages:r,system:o,tools:a,runtime:c,signal:d,options:m})}}}i(on,"openai");const an=R.object({searchTerm:R.string().describe("The search term to query")});class cn{static{i(this,"BraveSearchTool")}name="brave";description="Perform a search using the Brave search engine";schema=an;apiKey;throttle;lastExecTime=0;constructor(e){e&&this.configure(e)}configure(e){const{rateLimit:n}=e;this.apiKey=e["api-key"],this.throttle=n?1100/n:void 0}async execute(e){const{searchTerm:n}=e;if(this.throttle){for(;Date.now()-this.lastExecTime<this.throttle;)await _t(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 c=await a.json();return JSON.stringify(c)}catch(s){throw s instanceof Error?new Error(`[Brave] Error fetching search results: ${s.message}`):s}}}const ln=new cn,un=k.object({operation:k.enum(["add","subtract","multiply","divide"]).describe("The operation to perform (add, subtract, multiply, divide)"),a:k.number().describe("First operand"),b:k.number().describe("Second operand")}),pn={name:"calculator",description:"Performs basic arithmetic operations",schema:un,execute:i(async({operation:t,a:e,b:n})=>{switch(t){case"add":return`${e} + ${n} = ${e+n}`;case"subtract":return`${e} - ${n} = ${e-n}`;case"multiply":return`${e} * ${n} = ${e*n}`;case"divide":if(n===0)throw new Error("Cannot divide by zero");return`${e} / ${n} = ${e/n}`;default:throw new Error(`Unknown operation: ${t}`)}},"execute")},dn=Ke(Je),mn=3e4,fn=1024*1024;async function hn(t,e={}){const{stdout:n,stderr:s}=await dn(t,{cwd:e.cwd,timeout:e.timeout??mn,maxBuffer:e.maxBuffer??fn});return{stdout:n,stderr:s}}i(hn,"runCommand");function _n(t){if(t instanceof Error){const e=t;let n=`Error executing command: ${t.message}`;return e.stdout&&(n+=`
|
|
27
|
+
[stdout]: ${e.stdout}`),e.stderr&&(n+=`
|
|
28
|
+
[stderr]: ${e.stderr}`),n}return`Error executing command: ${String(t)}`}i(_n,"formatExecError");function gn(t,e){return e&&e.trim()?`${t}
|
|
29
|
+
[stderr]: ${e}`:t}i(gn,"formatOutput");const yn=R.object({command:R.string().describe("The shell command to execute")});class En{static{i(this,"ExecTool")}name="exec";description="Execute a shell command and return the output.";schema=yn;timeout=3e4;maxBuffer=1024*1024;cwd;constructor(e){e&&this.configure(e)}configure(e){this.timeout=e.timeout??3e4,this.maxBuffer=e.maxBuffer??1024*1024,this.cwd=e.cwd}summarize(e){return e.command}async execute(e){const{command:n}=e;try{const s=await hn(n,{timeout:this.timeout,maxBuffer:this.maxBuffer,cwd:this.cwd});return gn(s.stdout,s.stderr)}catch(s){return _n(s)}}}const xn=new En,In=k.object({path:k.string().describe("The file path to patch"),old_string:k.string().describe("The exact text to find and replace"),new_string:k.string().describe("The replacement text"),start_line:k.number().int().positive().describe("1-indexed start line of the region to match within"),end_line:k.number().int().positive().describe("1-indexed end line (inclusive) of the region to match within")}),Tn={name:"patch-file",description:"Patch a file by replacing an exact string match within a specified line range",schema:In,summarize:i(({path:t,start_line:e,end_line:n})=>`${t}:${e}:${n}`,"summarize"),execute:i(async({path:t,old_string:e,new_string:n,start_line:s,end_line:r})=>{if(r<s)throw new Error(`end_line (${r}) must be >= start_line (${s})`);let o;try{o=await B(t,"utf-8")}catch(h){throw h instanceof Error?new Error(`Failed to read file "${t}": ${h.message}`):h}const a=o.split(`
|
|
30
|
+
`);if(s>a.length)throw new Error(`start_line (${s}) exceeds file length (${a.length} lines)`);if(r>a.length)throw new Error(`end_line (${r}) exceeds file length (${a.length} lines)`);const d=a.slice(s-1,r).join(`
|
|
31
|
+
`),m=d.indexOf(e);if(m===-1)throw new Error(`old_string not found within lines ${s}-${r} of "${t}"`);if(d.indexOf(e,m+1)!==-1)throw new Error(`old_string matches multiple times within lines ${s}-${r} of "${t}"`);const u=d.replace(e,n),f=[...a.slice(0,s-1),...u.split(`
|
|
32
|
+
`),...a.slice(r)].join(`
|
|
33
|
+
`);try{await re(t,f,"utf-8")}catch(h){throw h instanceof Error?new Error(`Failed to write file "${t}": ${h.message}`):h}return`Successfully patched "${t}" (lines ${s}-${r})`},"execute")},Sn=k.object({path:k.string().describe("The file path to read from")}),wn={name:"read-file",description:"Read the contents of a file from disk",schema:Sn,summarize:i(({path:t})=>t,"summarize"),execute:i(async({path:t})=>{try{return await B(t,"utf-8")}catch(e){throw e instanceof Error?new Error(`Failed to read file "${t}": ${e.message}`):e}},"execute")},An=k.object({path:k.string().describe("The file path to write to"),content:k.string().describe("The content to write to the file")}),bn={name:"write-file",description:"Write content to a file on disk, creating directories if needed",schema:An,summarize:i(({path:t})=>t,"summarize"),execute:i(async({path:t,content:e})=>{try{return await He(Be(t),{recursive:!0}),await re(t,e,"utf-8"),`Successfully wrote ${e.length} characters to "${t}"`}catch(n){throw n instanceof Error?new Error(`Failed to write file "${t}": ${n.message}`):n}},"execute")};function Oe(t){try{const e=D.fromJSONSchema(t);return e instanceof D.ZodObject?e.strict():D.object({}).passthrough()}catch{return D.object({}).passthrough()}}i(Oe,"jsonSchemaToZod");function kn(t,e,n){return t.map(s=>Mn(s,e,n))}i(kn,"createMcpTools");function Rn(t,e){return t.map(n=>{const s=e?`${e}_${n.name}`:n.name,r=Oe(n.inputSchema);return{name:s,description:n.description??"",schema:r}})}i(Rn,"createMcpToolDefinitions");function Mn(t,e,n){const s=n?`${n}_${t.name}`:t.name,r=Oe(t.inputSchema);return{name:s,description:t.description??"",schema:r,async execute(o){const a=await e.callTool({name:t.name,arguments:o});if("isError"in a&&a.isError)throw new Error($n(a.content));return On(a.content)}}}i(Mn,"createMcpTool");function On(t){return t.some(n=>n.type==="image")?t.filter(n=>n.type==="text"||n.type==="image").map(n=>{if(n.type==="text")return{type:"text",text:n.text};const s=n;return{type:"image",data:s.data,mimeType:s.mimeType}}):t.filter(n=>n.type==="text").map(n=>n.text).join(`
|
|
34
|
+
`)}i(On,"formatToolResult");function $n(t){return t.filter(e=>e.type==="text").map(e=>e.text).join(`
|
|
35
|
+
`)||"MCP tool execution error"}i($n,"formatErrorContent");class Cn{static{i(this,"MCP")}config;client;transport;cachedMcpTools;_connected=!1;constructor(e){this.config=e}get name(){return this.config.name??this.client?.getServerVersion()?.name}get connected(){return this._connected}async connect(e){if(this._connected)return;const n=e?.tracer?.startSpan("mcp:connect",{type:"internal"});this.client=new ze({name:"axle",version:"1.0.0"}),this.config.transport==="stdio"?this.transport=new Xe({command:this.config.command,args:this.config.args,env:this.config.env}):this.transport=new Ze(new URL(this.config.url),{requestInit:this.config.headers?{headers:this.config.headers}:void 0});try{await this.client.connect(this.transport),this._connected=!0,n?.end("ok")}catch(s){throw n?.end("error"),s}}async listTools(e){const n=this.assertConnected(),s=await this.fetchTools(n,e?.tracer);return kn(s,n,e?.prefix)}async listToolDefinitions(e){const n=this.assertConnected(),s=await this.fetchTools(n,e?.tracer);return Rn(s,e?.prefix)}async refreshTools(){return this.assertConnected(),this.cachedMcpTools=void 0,this.listTools()}async close(e){this._connected&&(e?.tracer?.debug("mcp:close"),await this.client?.close(),this._connected=!1,this.client=void 0,this.transport=void 0,this.cachedMcpTools=void 0)}async fetchTools(e,n){if(this.cachedMcpTools)return this.cachedMcpTools;n?.debug("mcp:listTools");const s=await e.listTools();return this.cachedMcpTools=s.tools.map(r=>({name:r.name,description:r.description,inputSchema:r.inputSchema})),this.cachedMcpTools}assertConnected(){if(!this._connected||!this.client)throw new Error("MCP not connected. Call connect() first.");return this.client}}const $e={debug:0,info:1,warn:2,error:3};class Pn{static{i(this,"Tracer")}writers=[];_minLevel="info";get minLevel(){return this._minLevel}set minLevel(e){this._minLevel=e}addWriter(e){this.writers.includes(e)||this.writers.push(e)}removeWriter(e){const n=this.writers.indexOf(e);n!==-1&&this.writers.splice(n,1)}startSpan(e,n){const s={traceId:crypto.randomUUID(),spanId:crypto.randomUUID(),name:e,type:n?.type,startTime:performance.now(),status:"ok",attributes:{},events:[]};return this.writers.forEach(r=>r.onSpanStart(s)),new Y(s,this)}async flush(){for(const e of this.writers)e.flush&&await e.flush()}_notifySpanEnd(e){this.writers.forEach(n=>n.onSpanEnd(e))}_notifySpanUpdate(e){this.writers.forEach(n=>n.onSpanUpdate?.(e))}_notifyEvent(e,n){this.writers.forEach(s=>s.onEvent?.(e,n))}_notifySpanStart(e){this.writers.forEach(n=>n.onSpanStart(e))}_notifyLLMStreamStart(e){this.writers.forEach(n=>n.onLLMStreamStart?.(e))}_notifyLLMStreamChunk(e,n){this.writers.forEach(s=>s.onLLMStreamChunk?.(e,n))}_notifyLLMStreamEnd(e,n){this.writers.forEach(s=>s.onLLMStreamEnd?.(e,n))}_shouldLog(e){return $e[e]>=$e[this._minLevel]}}class Y{static{i(this,"Span")}data;tracer;ended=!1;llmStreamBuffer="";llmStreamActive=!1;constructor(e,n){this.data=e,this.tracer=n}startSpan(e,n){const s={traceId:this.data.traceId,spanId:crypto.randomUUID(),parentSpanId:this.data.spanId,name:e,type:n?.type,startTime:performance.now(),status:"ok",attributes:{},events:[]};return this.tracer._notifySpanStart(s),new Y(s,this.tracer)}end(e="ok"){this.ended||(this.ended=!0,this.data.endTime=performance.now(),this.data.status=e,this.tracer._notifySpanEnd(this.data))}addEvent(e,n,s){if(this.ended||!this.tracer._shouldLog(n))return;const r={name:e,timestamp:performance.now(),level:n,attributes:s};this.data.events.push(r),this.tracer._notifyEvent(this.data,r)}debug(e,n){this.addEvent(e,"debug",n)}info(e,n){this.addEvent(e,"info",n)}warn(e,n){this.addEvent(e,"warn",n)}error(e,n){this.addEvent(e,"error",n)}setAttribute(e,n){this.ended||(this.data.attributes[e]=n,this.tracer._notifySpanUpdate(this.data))}setAttributes(e){this.ended||(Object.assign(this.data.attributes,e),this.tracer._notifySpanUpdate(this.data))}setResult(e){this.ended||(this.data.result=e,this.tracer._notifySpanUpdate(this.data))}startLLMStream(){this.ended||(this.llmStreamActive=!0,this.llmStreamBuffer="",this.tracer._notifyLLMStreamStart(this.data))}appendLLMStream(e){this.ended||!this.llmStreamActive||(this.llmStreamBuffer+=e,this.tracer._notifyLLMStreamChunk(this.data,e))}endLLMStream(e){if(this.ended||!this.llmStreamActive)return;this.llmStreamActive=!1;const n={...e,response:{...e.response,content:e.response.content??this.llmStreamBuffer}};this.data.result=n,this.tracer._notifyLLMStreamEnd(this.data,n)}}const Ce={debug:0,info:1,warn:2,error:3};let Pe=!1;function Ln(){Pe||(ae.use(Ye()),Pe=!0)}i(Ln,"ensureMarkedInit");class Nn{static{i(this,"SimpleWriter")}minLevel;showInternal;showTimestamp;showDuration;markdown;output;spans=new Map;visibleDepths=new Map;constructor(e={}){this.minLevel=e.minLevel??"info",this.showInternal=e.showInternal??!1,this.showTimestamp=e.showTimestamp??!0,this.showDuration=e.showDuration??!0,this.markdown=e.markdown??!1,this.output=e.output??console.log}shouldShowEvent(e){return Ce[e]>=Ce[this.minLevel]}isSpanVisible(e){return!(e.type==="internal"&&!this.showInternal)}findVisibleAncestor(e){let n=e.parentSpanId;for(;n;){const s=this.spans.get(n);if(!s)break;if(this.isSpanVisible(s))return s;n=s.parentSpanId}return null}calculateVisibleDepth(e){if(!this.isSpanVisible(e))return-1;const n=this.findVisibleAncestor(e);return n?(this.visibleDepths.get(n.spanId)??0)+1:0}formatTimestamp(){if(!this.showTimestamp)return"";const e=new Date,n=e.toTimeString().slice(0,8),s=e.getMilliseconds().toString().padStart(3,"0");return`[${n}.${s}] `}formatDuration(e){if(!this.showDuration||!e.endTime)return"";const n=e.endTime-e.startTime;return n<1e3?` (${Math.round(n)}ms)`:` (${(n/1e3).toFixed(2)}s)`}formatIndent(e){return" ".repeat(e)}formatSpanName(e){return e.type?`[${e.type}] ${e.name}`:e.name}renderMarkdown(e){return Ln(),ae.parse(e).trimEnd()}onSpanStart(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const s=this.calculateVisibleDepth(e);this.visibleDepths.set(e.spanId,s);const r=this.formatIndent(s),o=this.formatTimestamp(),a=this.formatSpanName(e);this.output(`${o}${r}START ${a}`)}onSpanEnd(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const s=this.visibleDepths.get(e.spanId)??0,r=this.formatIndent(s),o=this.formatTimestamp(),a=this.formatDuration(e),c=this.formatSpanName(e),d=e.status==="error"?" [ERROR]":"";this.output(`${o}${r}END ${c}${a}${d}`)}onSpanUpdate(e){this.spans.set(e.spanId,e)}onEvent(e,n){if(!this.shouldShowEvent(n.level))return;this.spans.set(e.spanId,e);let s;if(this.isSpanVisible(e))s=this.visibleDepths.get(e.spanId)??0;else{const u=this.findVisibleAncestor(e);u?s=this.visibleDepths.get(u.spanId)??0:s=0}const r=this.formatIndent(s+1),o=this.formatTimestamp(),a=n.level.toUpperCase().padEnd(5),c=this.markdown&&n.attributes?.markdown===!0,d=n.attributes?Object.entries(n.attributes).filter(([u])=>u!=="markdown"):[];let m=n.name;c&&(m=this.renderMarkdown(m));let p=`${o}${r}${a} ${m}`;if(d.length>0){const u=d.map(([l,f])=>`${l}=${JSON.stringify(f)}`).join(" ");p+=` ${u}`}this.output(p)}onLLMStreamStart(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const n=this.visibleDepths.get(e.spanId)??0,s=this.formatIndent(n+1),r=this.formatTimestamp();this.output(`${r}${s}INFO LLM streaming started`)}onLLMStreamChunk(e,n){}onLLMStreamEnd(e,n){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const s=this.visibleDepths.get(e.spanId)??0,r=this.formatIndent(s+1),o=this.formatTimestamp(),a=[`model=${n.model}`];if(n.finishReason&&a.push(`finishReason=${n.finishReason}`),n.usage&&(n.usage.inputTokens!==void 0&&a.push(`inputTokens=${n.usage.inputTokens}`),n.usage.outputTokens!==void 0&&a.push(`outputTokens=${n.usage.outputTokens}`)),this.output(`${o}${r}INFO LLM complete ${a.join(" ")}`),this.shouldShowEvent("debug")&&n.response.content){const d=(typeof n.response.content=="string"?n.response.content:JSON.stringify(n.response.content,null,2)).split(`
|
|
36
|
+
`);for(const m of d)this.output(`${o}${r}DEBUG ${m}`)}}}export{I as A,ht as D,ce as H,ft as I,S as M,Nn as S,Pn as T,vt as a,x as b,tt as c,Kt as d,ue as e,ke as f,et as g,ot as h,Cn as i,At as j,ln as k,pn as l,Nt as m,fe as n,Jt as o,mt as p,on as q,de as r,pe as s,V as t,it as u,wn as v,bn as w,Tn as x,xn as y};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fifthrevision/axle",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "git+https://github.com/johncch/axle.git"
|
|
@@ -37,12 +37,15 @@
|
|
|
37
37
|
"author": "",
|
|
38
38
|
"license": "ISC",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@anthropic-ai/sdk": "^0.
|
|
40
|
+
"@anthropic-ai/sdk": "^0.78.0",
|
|
41
41
|
"@commander-js/extra-typings": "^14.0.0",
|
|
42
|
-
"@google/genai": "^1.
|
|
42
|
+
"@google/genai": "^1.42.0",
|
|
43
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
43
44
|
"chalk": "^5.6.2",
|
|
44
45
|
"commander": "^14.0.3",
|
|
45
|
-
"glob": "^13.0.
|
|
46
|
+
"glob": "^13.0.6",
|
|
47
|
+
"marked": "^15.0.12",
|
|
48
|
+
"marked-terminal": "^7.3.0",
|
|
46
49
|
"mime": "^4.1.0",
|
|
47
50
|
"openai": "^6.22.0",
|
|
48
51
|
"serialize-error": "^13.0.1",
|
|
@@ -51,7 +54,7 @@
|
|
|
51
54
|
},
|
|
52
55
|
"devDependencies": {
|
|
53
56
|
"dotenv": "^17.3.1",
|
|
54
|
-
"pkgroll": "^2.26.
|
|
57
|
+
"pkgroll": "^2.26.3",
|
|
55
58
|
"prettier": "^3.8.1",
|
|
56
59
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
57
60
|
"tsx": "^4.21.0",
|
package/dist/simple-DFkTLK9N.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
var Ne=Object.defineProperty;var i=(t,e)=>Ne(t,"name",{value:e,configurable:!0});import*as C from"zod";import V,{z as k}from"zod";import"glob";import Le from"mime";import{readFile as H,access as Me,stat as Ue,writeFile as se,mkdir as Ge}from"node:fs/promises";import{resolve as Y,extname as oe,dirname as De}from"node:path";import ve from"@anthropic-ai/sdk";import{FinishReason as O,GoogleGenAI as Fe}from"@google/genai";import He from"openai";import{exec as Be}from"node:child_process";import{promisify as je}from"node:util";var S=(t=>(t.Stop="stop",t.Length="length",t.FunctionCall="function_call",t.Error="error",t.Custom="custom",t.Cancelled="cancelled",t))(S||{});class ae{static{i(this,"History")}system;_messages=[];constructor(e){e&&(this._messages=e)}get messages(){return[...this._messages]}addSystem(e){this.system=e}addUser(e){typeof e=="string"?this._messages.push({role:"user",content:[{type:"text",text:e}]}):this._messages.push({role:"user",content:e})}addAssistant(e){if(typeof e=="string"){const n=e;this._messages.push({role:"assistant",id:crypto.randomUUID(),content:[{type:"text",text:n}],model:"user",finishReason:S.Custom})}else this._messages.push({role:"assistant",...e})}addToolResults(e){this._messages.push({role:"tool",content:e})}add(e){Array.isArray(e)?this._messages.push(...e):this._messages.push(e)}latest(){return this._messages[this._messages.length-1]}toString(){return JSON.stringify({system:this.system,messages:this._messages})}}function qe(t){const{text:e,files:n}=t,r=[];if(e&&r.push({type:"text",text:e}),n)for(const s of n)r.push({type:"file",file:s});return r}i(qe,"toContentParts");function F(t){return typeof t=="string"?t:t.filter(e=>e.type==="text").map(e=>e.text).join(`
|
|
2
|
-
|
|
3
|
-
`)}i(F,"getTextContent");function We(t){return t.filter(e=>e.type==="tool-call")}i(We,"getToolCalls");function Ve(t,e){const n=e.usage??{in:0,out:0};t.in+=n.in??0,t.out+=n.out??0}i(Ve,"appendUsage");function ie(t){return JSON.stringify({error:t})}i(ie,"serializeToolError");async function ce(t,e){const n=[];let r;for(const s of t){let a;try{a=await e(s.name,s.parameters)}catch(o){a={type:"error",error:{type:"exception",message:o instanceof Error?o.message:String(o)}}}if(a==null){r={name:s.name,message:`Tool not found: ${s.name}`},n.push({id:s.id,name:s.name,content:ie({type:"not-found",message:r.message})});break}a.type==="success"?n.push({id:s.id,name:s.name,content:a.content}):n.push({id:s.id,name:s.name,content:ie(a.error)})}return{results:n,missingTool:r}}i(ce,"executeToolCalls");function le(t){const e=[],n=[],r=[],s=[],a=[],o=new AbortController;let l=!1,c,u;const d=new Promise((f,p)=>{c=i(m=>{l=!0,f(m)},"resolveResult"),u=i(m=>{l=!0,p(m)},"rejectResult")});return Promise.resolve().then(()=>ze(t,o.signal,e,n,r,s,a).then(c,u)),{onPartStart(f){e.push(f)},onPartUpdate(f){n.push(f)},onPartEnd(f){r.push(f)},onInternalTool(f){s.push(f)},onError(f){a.push(f)},cancel(){l||o.abort()},get final(){return d}}}i(le,"stream");function ue(t,e,n){for(const r of t)r(e,n)}i(ue,"emitPartStart");function Q(t,e,n,r,s){for(const a of t)a(e,n,r,s)}i(Q,"emitPartUpdate");function Ke(t,e,n,r){for(const s of t)s(e,n,r)}i(Ke,"emitPartEnd");function Je(t,e){for(const n of t)n(e)}i(Je,"emitError");async function ze(t,e,n,r,s,a,o){const{provider:l,model:c,messages:u,system:d,tools:f,onToolCall:p,maxIterations:m,tracer:_,options:h}=t,I=[...u],w=[],A={in:0,out:0};let U=0,G=0;const B=i(y=>{I.push(y),w.push(y)},"addMessage"),N=i(y=>{y.result==="error"&&Je(o,y.error);const L=y.result==="success"?y.final?.content:y.result==="cancelled"?y.partial?.content:null,T=y.result==="success"?y.final?.finishReason:y.result==="cancelled"?S.Cancelled:void 0;return _?.setResult({kind:"llm",model:c,request:{messages:u},response:{content:L??null},usage:y.usage?{inputTokens:y.usage.in,outputTokens:y.usage.out}:void 0,finishReason:T}),_?.end(y.result==="error"?"error":"ok"),y},"endWithResult"),W=i((y,L,T,D)=>{D();const M=y.length>0?{role:"assistant",id:L,model:T,content:y,finishReason:S.Cancelled}:void 0;return M&&B(M),_?.end("ok"),{result:"cancelled",messages:w,partial:M,usage:A}},"buildCancelledResult");for(;;){if(e.aborted)return W([],"","",()=>{});if(m!==void 0&&G>=m)return N({result:"error",messages:w,error:{type:"model",error:{type:"error",error:{type:"MaxIterations",message:`Exceeded max iterations (${m})`}}},usage:A});G+=1;const y=_?.startSpan(`turn-${G}`,{type:"llm"});y?.startLLMStream();const L=l.createStreamingRequest?.(c,{messages:I,system:d,tools:f,context:{tracer:y},signal:e,options:h});if(!L)throw y?.end("error"),new Error("Provider does not support streaming. Use generate() instead.");const T=[];let D="",v="",M=null,j={in:0,out:0},P=-1,q=null,R="";const $=i(()=>{q!==null&&P>=0&&(Ke(s,P,q,R),q=null,R="",P=-1)},"closePart");for await(const g of L){switch(g.type){case"start":D=g.id,v=g.data.model;break;case"text-start":{$(),T.push({type:"text",text:""}),P=U++,q="text",R="",ue(n,P,"text");break}case"text-delta":{const b=T[g.data.index];b.text+=g.data.text,R=b.text,y?.appendLLMStream(g.data.text),Q(r,P,"text",g.data.text,R);break}case"text-complete":{$();break}case"thinking-start":{$(),T.push({type:"thinking",text:""}),P=U++,q="thinking",R="",ue(n,P,"thinking");break}case"thinking-delta":{const b=T[g.data.index];b.text+=g.data.text,R=b.text,Q(r,P,"thinking",g.data.text,R);break}case"thinking-summary-delta":{const b=T[g.data.index];b.text+=g.data.text,R=b.text,Q(r,P,"thinking",g.data.text,R);break}case"thinking-complete":{$();break}case"tool-call-start":{$(),T.push({type:"tool-call",id:g.data.id,name:g.data.name,parameters:{}}),U++;break}case"tool-call-complete":{const b=T[g.data.index];g.data.id&&(b.id=g.data.id),g.data.name&&(b.name=g.data.name),b.parameters=g.data.arguments;break}case"internal-tool-start":{$();const b=U++;T.push({type:"internal-tool",id:g.data.id,name:g.data.name});for(const Z of a)Z({type:"start",index:b,id:g.data.id,name:g.data.name});break}case"internal-tool-complete":{const b=T[g.data.index];g.data.output!=null&&(b.output=g.data.output);for(const Z of a)Z({type:"complete",index:g.data.index,id:g.data.id,name:g.data.name,output:g.data.output});break}case"complete":{$(),M=g.data.finishReason,j=g.data.usage;break}case"error":{$();const b=g.data.usage??{in:0,out:0};return A.in+=b.in??0,A.out+=b.out??0,y?.end("error"),N({result:"error",messages:w,error:{type:"model",error:{type:"error",error:{type:g.data.type,message:g.data.message}}},usage:A})}default:console.warn("[WARN] Unhandled chunk type. Should never happen")}if(e.aborted)break}if(e.aborted)return y?.end("ok"),W(T,D,v,$);if(M===null)return $(),y?.end("error"),N({result:"error",messages:w,error:{type:"model",error:{type:"error",error:{type:"IncompleteStream",message:"Stream ended without a completion signal"}}},usage:A});A.in+=j.in??0,A.out+=j.out??0;const Re={kind:"llm",model:v,request:{messages:I},response:{content:T},usage:{inputTokens:j.in,outputTokens:j.out},finishReason:M};y?.endLLMStream(Re),y?.end();const z={role:"assistant",id:D,model:v,content:T,finishReason:M};if(B(z),M!==S.FunctionCall)return N({result:"success",messages:w,final:z,usage:A});const X=T.filter(g=>g.type==="tool-call");if(X.length===0)return N({result:"success",messages:w,final:z,usage:A});if(e.aborted)return _?.end("ok"),{result:"cancelled",messages:w,usage:A};const $e=p?async(g,b)=>p(g,b):async()=>null;for(const g of X)_?.info(`tool call: ${g.name}`,{parameters:g.parameters});const{results:ne,missingTool:re}=await ce(X,$e);if(ne.length>0&&B({role:"tool",content:ne}),re)return N({result:"error",messages:w,error:{type:"tool",error:re},usage:A})}}i(ze,"run");function Xe(t,e,n="{{}}"){const r=n==="{{}}"?/\{\{(.*?)\}\}/g:/\{(.*?)\}/g;return t=t.replace(r,(s,a)=>{if(a=a.trim(),Object.prototype.hasOwnProperty.call(e,a)){const o=e[a];return o==null?"":String(o)}return s}),t}i(Xe,"replaceVariables");function K(t){if(t instanceof C.ZodString)return["string","Your answer"];if(t instanceof C.ZodNumber)return["number",42];if(t instanceof C.ZodBoolean)return["boolean",!0];if(t instanceof C.ZodArray){const e=t.element;if(e instanceof C.ZodString)return["string array",["answer 1","answer 2","third answer"]];if(e instanceof C.ZodNumber)return["number array",[42,59,3.14]];if(e instanceof C.ZodBoolean)return["boolean array",[!0,!1,!1]];if(e instanceof C.ZodObject){const[n,r]=K(e);return["object array",[r,r]]}return["array",[]]}if(t instanceof C.ZodObject){const e=t.shape,n={};for(const[r,s]of Object.entries(e)){const[a,o]=K(s);n[r]=o}return["JSON object",n]}if(t instanceof C.ZodOptional){const e=t.unwrap(),[n,r]=K(e);return[`${n} | undefined`,r]}}i(K,"zodToExample");function pe(t,e){if(!e)return t;if(Object.keys(e).length===0){if(t.trim()==="{}"||t.trim()==="")return{};throw new Error("Schema is empty, but rawValue is not an empty object representation or empty string.")}const r=Ze(t),s={};for(const[a,o]of Object.entries(e)){const l=r.tags[a];if(l!==void 0)s[a]=de(o,l);else if(o.def.type!=="optional")throw new Error(`Expected results with tag ${a} but it does not exist`)}try{const a={};for(const[o,l]of Object.entries(e))o in s&&(a[o]=l.parse(s[o]));return a}catch(a){if(a&&typeof a=="object"&&"issues"in a){const o=a.issues.map(l=>`${l.path.join(".")}: ${l.message}`).join(", ");throw new Error(`Validation failed: ${o}`)}throw a}}i(pe,"parseResponse");function de(t,e){switch(e=e.trim(),t.def.type){case"string":try{return JSON.parse(e)}catch{if(typeof e=="string")return e;throw new Error(`Cannot parse '${e}' as string. Ensure it is a valid JSON string or a plain string.`)}case"number":{const n=parseFloat(e);if(isNaN(n))throw new Error(`Cannot parse '${e}' as number`);return n}case"boolean":{const n=e.toLowerCase();if(n==="true")return!0;if(n==="false")return!1;throw new Error(`Cannot parse '${e}' as boolean. Expected 'true' or 'false'`)}case"array":{if(e==="")return[];try{const n=JSON.parse(e);if(Array.isArray(n))return n}catch{}if(e.includes(","))return e.split(",").map(n=>{const r=n.trim();try{return JSON.parse(r)}catch{return r}}).filter(n=>n!=="")}case"object":{e.includes("```json")&&(e=e.replace(/```json/g,"").replace(/```/g,""));try{return JSON.parse(e)}catch(n){throw new Error(`Cannot parse object as JSON: ${n.message}`)}}case"optional":{const n=t.def.innerType;return de(n,e)}default:return e}}i(de,"preprocessValue");function Ze(t){t.trim().startsWith("```json")&&t.trim().endsWith("```")&&(t=t.trim().slice(7,-3).trim());const e=/<(\w+)>(.*?)<\/\1>/gs,n={};let r=t;r=r.replace(e,(a,o,l)=>(n[o]=l,""));const s=/<(\w+)>(.*?)(?:<\/?\w+>|$)/gs;return r=r.replace(s,(a,o,l)=>(n[o]=l,"")),{tags:n,remaining:r.trim()}}i(Ze,"parseTaggedSections");function fe(t,e={}){const n={...e,...t.inputs};let r=Xe(t.prompt,n);if(t.textReferences.length>0)for(const[o,l]of t.textReferences.entries()){const c=l.name?`: ${l.name}`:"";r+=`
|
|
4
|
-
|
|
5
|
-
## Reference ${o+1}${c}
|
|
6
|
-
|
|
7
|
-
\`\`\`${l.content}'''`}let s=`# Instructions
|
|
8
|
-
|
|
9
|
-
`;if((t.schema?Object.keys(t.schema):[]).length>0){s+=`## Output Format Instructions
|
|
10
|
-
`,s+=`
|
|
11
|
-
Here is how you should format your output. Follow the instructions strictly.
|
|
12
|
-
`;for(const[o,l]of Object.entries(t.schema)){const[c,u]=K(l);s+=`
|
|
13
|
-
- Use <${o}></${o}> tags to indicate the answer for ${o}. The answer must be a ${c}.
|
|
14
|
-
Example: <${o}>${JSON.stringify(u)}</${o}>
|
|
15
|
-
`}}if(t.instructions.length>0){s+=`
|
|
16
|
-
## Additional Instructions
|
|
17
|
-
|
|
18
|
-
`;for(const o of t.instructions)s+=`- ${o}
|
|
19
|
-
`}return s+r}i(fe,"compileInstruct");class Ye{static{i(this,"Agent")}provider;model;history;tracer;system;tools={};partStartCallback;partUpdateCallback;partEndCallback;internalToolCallback;errorCallback;constructor(e){this.provider=e.provider,this.model=e.model,this.history=new ae,this.tracer=e.tracer,this.system=e.system,e.tools&&this.addTools(e.tools)}addTool(e){this.tools[e.name]=e}addTools(e){for(const n of e)this.tools[n.name]=n}hasTools(){return Object.keys(this.tools).length>0}onPartStart(e){this.partStartCallback=e}onPartUpdate(e){this.partUpdateCallback=e}onPartEnd(e){this.partEndCallback=e}onInternalTool(e){this.internalToolCallback=e}onError(e){this.errorCallback=e}send(e,n){let r;if(typeof e=="string")this.history.addUser(e);else{const s=fe(e,n),a=e.files;this.history.addUser(qe({text:s,files:a})),r=e.schema}return this.execute(r)}execute(e){const n=this.tools,r=Object.values(n).map(o=>({name:o.name,description:o.description,schema:o.schema})),s=le({provider:this.provider,model:this.model,messages:this.history.messages,system:this.system,tools:r.length>0?r:void 0,tracer:this.tracer,onToolCall:i(async(o,l)=>{const c=n[o];if(!c)return null;try{const u=await c.execute(l);return{type:"success",content:JSON.stringify(u)}}catch(u){return{type:"error",error:{type:"execution",message:u instanceof Error?u.message:String(u)}}}},"onToolCall")});this.partStartCallback&&s.onPartStart(this.partStartCallback),this.partUpdateCallback&&s.onPartUpdate(this.partUpdateCallback),this.partEndCallback&&s.onPartEnd(this.partEndCallback),this.internalToolCallback&&s.onInternalTool(this.internalToolCallback),this.errorCallback&&s.onError(this.errorCallback);const a=s.final.then(o=>{o.messages.length>0&&this.history.add(o.messages);let l=null,c;if(o.result==="success"){if(c=o.final,c){const d=F(c.content);l=pe(d,e)}}else o.result==="cancelled"&&(c=o.partial);const u=o.usage??{in:0,out:0};return{response:l,messages:o.messages,final:c,usage:u}});return{cancel:i(()=>s.cancel(),"cancel"),get final(){return a}}}}async function Qe(t,e){const{defaults:n,tag:r}=e;let s=null,a="";if(t)try{a=Y(t),s=await H(a,{encoding:"utf-8"})}catch{throw new Error(`${r} not found, see --help for details`)}else{for(const o of n.formats)try{a=Y(n.name+"."+o),s=await H(a,{encoding:"utf-8"});break}catch{continue}if(s===null)throw new Error(`${r} not found, see --help for details`)}return{content:s,format:a.split(".").pop()??""}}i(Qe,"searchAndLoadFile");const me=20*1024*1024;function et(t){return t.type==="text"}i(et,"isTextFileInfo");function tt(t){return t.type==="image"||t.type==="document"}i(tt,"isBase64FileInfo");const nt=new Set(["application/json","application/xml","application/yaml","application/x-yaml","application/toml"]);function rt(t){return t.startsWith("text/")||nt.has(t)}i(rt,"isTextLikeMimeType");function st(t){const e=Le.getType(t);if(!e){const n=oe(t).toLowerCase();throw new Error(`Unsupported file type: ${n||"(no extension)"}`)}if(e.startsWith("image/"))return{type:"image",mimeType:e};if(e==="application/pdf")return{type:"document",mimeType:e};if(rt(e))return{type:"text",mimeType:e};{const n=oe(t).toLowerCase();throw new Error(`Unsupported file type: ${n} (${e})`)}}i(st,"getFileCategory");async function ot(t,e){const n=Y(t);try{await Me(n)}catch{throw new Error(`File not found: ${t}`)}const r=await Ue(n);if(r.size>me)throw new Error(`File too large: ${r.size} bytes. Maximum allowed: ${me} bytes`);const s=n.split("/").pop()||"",a=st(n);if((e||(a.type==="text"?"utf-8":"base64"))==="utf-8"){if(a.type!=="text")throw new Error(`Cannot read ${a.type} file as text: ${t}`);const l=await H(n,"utf-8");return{path:n,content:l,mimeType:a.mimeType,size:r.size,name:s,type:"text"}}else{if(a.type==="text")throw new Error(`Cannot read text file as binary: ${t}`);const c=(await H(n)).toString("base64");return{path:n,base64:c,mimeType:a.mimeType,size:r.size,name:s,type:a.type}}}i(ot,"loadFileContent");class at{static{i(this,"Instruct")}prompt;inputs={};files=[];textReferences=[];instructions=[];schema;constructor(e,n){this.prompt=e,this.schema=n}setInputs(e){this.inputs=e}addInput(e,n){this.inputs[e]=n}addFile(e,n){if(typeof e=="string"){this.textReferences.push({content:e,name:n?.name});return}tt(e)?this.files.push(e):et(e)&&this.textReferences.push({content:e.content,name:n?.name??e.name})}addInstructions(e){if(typeof e!="string"||e.trim()==="")throw new Error("Instruction must be a non-empty string");this.instructions.push(e)}hasFiles(){return this.files.length>0}}const E={CLAUDE_SONNET_4_6:"claude-sonnet-4-6",CLAUDE_OPUS_4_6:"claude-opus-4-6",CLAUDE_OPUS_4_5_20251101:"claude-opus-4-5-20251101",CLAUDE_OPUS_4_5:"claude-opus-4-5-20251101",CLAUDE_HAIKU_4_5_20251001:"claude-haiku-4-5-20251001",CLAUDE_HAIKU_4_5:"claude-haiku-4-5-20251001",CLAUDE_SONNET_4_5_20250929:"claude-sonnet-4-5-20250929",CLAUDE_SONNET_4_5:"claude-sonnet-4-5-20250929",CLAUDE_OPUS_4_1_20250805:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_1:"claude-opus-4-1-20250805",CLAUDE_OPUS_4_20250514:"claude-opus-4-20250514",CLAUDE_OPUS_4:"claude-opus-4-20250514",CLAUDE_SONNET_4_20250514:"claude-sonnet-4-20250514",CLAUDE_SONNET_4:"claude-sonnet-4-20250514",CLAUDE_3_7_SONNET_20250219:"claude-3-7-sonnet-20250219",CLAUDE_3_7_SONNET:"claude-3-7-sonnet-20250219",CLAUDE_3_5_HAIKU_20241022:"claude-3-5-haiku-20241022",CLAUDE_3_5_HAIKU:"claude-3-5-haiku-20241022",CLAUDE_3_HAIKU_20240307:"claude-3-haiku-20240307",CLAUDE_3_HAIKU:"claude-3-haiku-20240307"};E.CLAUDE_SONNET_4_6,E.CLAUDE_OPUS_4_6,E.CLAUDE_OPUS_4_5_20251101,E.CLAUDE_OPUS_4_5,E.CLAUDE_HAIKU_4_5_20251001,E.CLAUDE_HAIKU_4_5,E.CLAUDE_SONNET_4_5_20250929,E.CLAUDE_SONNET_4_5,E.CLAUDE_OPUS_4_1_20250805,E.CLAUDE_OPUS_4_1,E.CLAUDE_OPUS_4_20250514,E.CLAUDE_OPUS_4,E.CLAUDE_SONNET_4_20250514,E.CLAUDE_SONNET_4,E.CLAUDE_3_7_SONNET_20250219,E.CLAUDE_3_7_SONNET,E.CLAUDE_3_5_HAIKU_20241022,E.CLAUDE_3_5_HAIKU,E.CLAUDE_3_HAIKU_20240307,E.CLAUDE_3_HAIKU;const it=E.CLAUDE_HAIKU_4_5;function _e(t){return Array.isArray(t)?t:[t]}i(_e,"arrayify");function ct(t){return new Promise(e=>setTimeout(e,t))}i(ct,"delay");function J(t){if(t==null)return{type:"error",error:{type:"Undetermined",message:"Unknown error occurred"},usage:{in:0,out:0},raw:t};if(t instanceof Error)return{type:"error",error:{type:t.name||"Error",message:t.message||"Unexpected error"},usage:{in:0,out:0},raw:t};if(typeof t=="object"){const e=t,n=e?.error?.error?.type||e?.error?.type||e?.type||e?.code||e?.status||"Undetermined",r=e?.error?.error?.message||e?.error?.message||e?.message||e?.error||"Unexpected error";return{type:"error",error:{type:String(n),message:String(r)},usage:{in:0,out:0},raw:t}}return{type:"error",error:{type:"Undetermined",message:String(t)},usage:{in:0,out:0},raw:t}}i(J,"getUndefinedError");function he(t){return t.map(e=>{if(e.role==="assistant"){const n=[];for(const r of e.content)r.type==="text"?n.push({type:"text",text:r.text}):r.type==="thinking"?r.redacted?n.push({type:"redacted_thinking",data:r.text}):n.push({type:"thinking",thinking:r.text,signature:r.signature}):r.type==="tool-call"&&n.push({type:"tool_use",id:r.id,name:r.name,input:r.parameters});return{role:"assistant",content:n}}if(e.role==="tool")return{role:"user",content:e.content.map(n=>({type:"tool_result",tool_use_id:n.id,content:n.content}))};if(typeof e.content=="string")return{role:"user",content:e.content};{const n=[];for(const r of e.content)r.type==="text"?n.push({type:"text",text:r.text}):r.type==="file"&&(r.file.type==="image"?n.push({type:"image",source:{type:"base64",media_type:r.file.mimeType,data:r.file.base64}}):r.file.type==="document"&&r.file.mimeType==="application/pdf"&&n.push({type:"document",source:{type:"base64",media_type:"application/pdf",data:r.file.base64}}));return{role:"user",content:n}}})}i(he,"convertToProviderMessages");function ge(t){return t.map(e=>{const n=V.toJSONSchema(e.schema);if(!lt(n))throw new Error(`Schema for tool ${e.name} must be an object type`);return{name:e.name,description:e.description,input_schema:n}})}i(ge,"convertToProviderTools");function ye(t){const e=[];for(const n of t)if(n.type==="text")e.push({type:"text",text:n.text});else if(n.type==="thinking")e.push({type:"thinking",text:n.text||"",redacted:!1});else if(n.type==="redacted_thinking")e.push({type:"thinking",text:n.text||"",redacted:!0});else if(n.type==="tool_use"){if(typeof n.input!="object"||n.input===null||Array.isArray(n.input))throw new Error(`Invalid tool call input for ${n.name}: expected object, got ${typeof n.input}`);e.push({type:"tool-call",id:n.id,name:n.name,parameters:n.input})}return e}i(ye,"convertToAxleContentParts");function Ee(t){switch(t){case"max_tokens":return S.Length;case"end_turn":return S.Stop;case"stop_sequence":return S.Stop;case"tool_use":return S.FunctionCall;case"pause_turn":case"refusal":default:return S.Error}}i(Ee,"convertStopReason$1");function lt(t){return t&&typeof t=="object"&&t.type==="object"}i(lt,"isObjectSchema");async function ut(t){const{client:e,model:n,messages:r,system:s,tools:a,context:o,options:l}=t,c=o?.tracer,{stop:u,max_tokens:d,...f}=l??{},p={model:n,max_tokens:d??16e3,messages:he(r),...s&&{system:s},...u&&{stop_sequences:_e(u)},...a&&{tools:ge(a)},...f};c?.debug("Anthropic request",{request:p});let m;try{const _=await e.messages.create(p);m=pt(_)}catch(_){m=J(_)}return c?.debug("Anthropic response",{result:m}),m}i(ut,"createGenerationRequest$3");function pt(t){const e=Ee(t.stop_reason);if(e===S.Error)return{type:"error",error:{type:"Uncaught error",message:`Stop reason is not recognized or unhandled: ${t.stop_reason}`},usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t};if(e===S.FunctionCall){const n=ye(t.content);return{type:"success",id:t.id,model:t.model,role:t.role,finishReason:S.FunctionCall,content:n,text:F(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}if(t.type=="message"){const n=ye(t.content);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:e,content:n,text:F(n)??"",usage:{in:t.usage.input_tokens,out:t.usage.output_tokens},raw:t}}}i(pt,"convertToAIResponse");function dt(){const t=new Map,e=new Map,n=new Map;function r(s){const a=[];switch(s.type){case"message_start":a.push({type:"start",id:s.message.id,data:{model:s.message.model,timestamp:Date.now()}});break;case"message_delta":s.delta.stop_reason&&a.push({type:"complete",data:{finishReason:Ee(s.delta.stop_reason),usage:s.usage?{in:s.usage.input_tokens||0,out:s.usage.output_tokens||0}:void 0}});case"message_stop":break;case"content_block_start":if(s.content_block.type==="text")t.set(s.index,"text"),a.push({type:"text-start",data:{index:s.index}});else if(s.content_block.type==="tool_use"){t.set(s.index,"tool");const o=s.content_block;n.set(s.index,{id:o.id,name:o.name,argumentsBuffer:""}),a.push({type:"tool-call-start",data:{index:s.index,id:o.id,name:o.name}})}else if(s.content_block.type==="thinking")t.set(s.index,"thinking"),a.push({type:"thinking-start",data:{index:s.index,redacted:!1}});else if(s.content_block.type==="redacted_thinking")t.set(s.index,"thinking"),a.push({type:"thinking-start",data:{index:s.index,redacted:!0}});else if(s.content_block.type==="server_tool_use"){t.set(s.index,"internal-tool");const o=s.content_block;e.set(o.id,{index:s.index,name:o.name}),a.push({type:"internal-tool-start",data:{index:s.index,id:o.id,name:o.name}})}else if(s.content_block.type==="web_search_tool_result"){const o=s.content_block,l=e.get(o.tool_use_id);l&&(a.push({type:"internal-tool-complete",data:{index:l.index,id:o.tool_use_id,name:l.name,output:o.content}}),e.delete(o.tool_use_id))}break;case"content_block_delta":if(s.delta.type==="text_delta")a.push({type:"text-delta",data:{text:s.delta.text,index:s.index}});else if(s.delta.type==="input_json_delta"){const o=n.get(s.index);o&&(o.argumentsBuffer+=s.delta.partial_json)}else s.delta.type==="thinking_delta"?a.push({type:"thinking-delta",data:{text:s.delta.thinking,index:s.index}}):s.delta.type==="signature_delta"||s.delta.type;break;case"content_block_stop":{const o=t.get(s.index);if(o==="text")a.push({type:"text-complete",data:{index:s.index}});else if(o==="thinking")a.push({type:"thinking-complete",data:{index:s.index}});else if(o!=="internal-tool"){if(o==="tool"){const l=n.get(s.index);if(l){try{const c=JSON.parse(l.argumentsBuffer);a.push({type:"tool-call-complete",data:{index:s.index,id:l.id,name:l.name,arguments:c}})}catch(c){throw new Error(`Failed to parse tool call arguments for ${l.name}: ${c instanceof Error?c.message:String(c)}`)}n.delete(s.index)}}}t.delete(s.index);break}}return a}return i(r,"handleEvent"),{handleEvent:r}}i(dt,"createAnthropicStreamingAdapter");async function*ft(t){const{client:e,model:n,messages:r,system:s,tools:a,runtime:o,signal:l,options:c}=t,u=o?.tracer,{stop:d,max_tokens:f,...p}=c??{},m={model:n,max_tokens:f??mt(n),messages:he(r),...s&&{system:s},...d&&{stop_sequences:_e(d)},...a&&{tools:ge(a)},...p};u?.debug("Anthropic streaming request",{request:m});const _=dt();try{const h=await e.messages.create({...m,stream:!0},{signal:l});for await(const I of h){const w=_.handleEvent(I);for(const A of w)yield A}}catch(h){if(l?.aborted)return;yield{type:"error",data:{type:"STREAMING_ERROR",message:h instanceof Error?h.message:String(h),raw:h}}}}i(ft,"createStreamingRequest$3");const xe={[E.CLAUDE_OPUS_4_6]:128e3,[E.CLAUDE_OPUS_4_5_20251101]:64e3,[E.CLAUDE_HAIKU_4_5_20251001]:64e3,[E.CLAUDE_SONNET_4_5_20250929]:64e3,[E.CLAUDE_SONNET_4_20250514]:64e3,[E.CLAUDE_3_7_SONNET_20250219]:64e3,[E.CLAUDE_OPUS_4_1_20250805]:32e3,[E.CLAUDE_OPUS_4_20250514]:32e3,[E.CLAUDE_3_5_HAIKU_20241022]:8192,[E.CLAUDE_3_HAIKU_20240307]:4096};function mt(t){return t in xe?xe[t]:t.includes("opus")?t.match(/opus-4-[6-9]|opus-[5-9]/)?128e3:64e3:t.includes("sonnet")||t.includes("haiku")?t.match(/claude-3-[0-5]-/)?8192:64e3:16384}i(mt,"getMaxTokens");const _t="anthropic";function ht(t){const e=new ve({apiKey:t});return{name:_t,async createGenerationRequest(n,r){return await ut({client:e,model:n,...r})},createStreamingRequest(n,r){const{messages:s,system:a,tools:o,context:l,signal:c,options:u}=r;return ft({client:e,model:n,messages:s,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(ht,"anthropic");function Ie(t,e){const n=t.map(gt).flat(1);return e?[{role:"system",content:e},...n]:n}i(Ie,"convertAxleMessages");function Se(t){if(t&&t.length>0)return t.map(e=>({type:"function",function:{name:e.name,description:e.description,parameters:V.toJSONSchema(e.schema)}}))}i(Se,"convertTools");function ee(t){switch(t){case"stop":return S.Stop;case"length":return S.Length;case"tool_calls":case"function_call":return S.FunctionCall;case"content_filter":return S.Error;default:return S.Stop}}i(ee,"convertFinishReason");function gt(t){switch(t.role){case"tool":return yt(t);case"assistant":return Et(t);default:return xt(t)}}i(gt,"convertMessage$2");function yt(t){return t.content.map(e=>({role:"tool",content:e.content,tool_call_id:e.id}))}i(yt,"convertToolMessage$2");function Et(t){const e=t.content.filter(s=>s.type==="tool-call"),n=t.content.filter(s=>s.type==="text"),r=e.length>0?e.map(s=>({type:"function",id:s.id,function:{name:s.name,arguments:JSON.stringify(s.parameters)}})):void 0;return{role:"assistant",content:n.map(s=>s.text).join(""),...r&&{tool_calls:r}}}i(Et,"convertAssistantMessage$2");function xt(t){if(typeof t.content=="string")return{role:"user",content:t.content};const e=t.content.map(It).filter(n=>n!==null);return e.every(n=>n.type==="text")?{role:"user",content:e.map(n=>n.text).join("")}:{role:"user",content:e}}i(xt,"convertUserMessage$2");function It(t){return t.type==="text"?{type:"text",text:t.text}:t.type==="file"&&t.file.type==="image"?{type:"image_url",image_url:{url:`data:${t.file.mimeType};base64,${t.file.base64}`}}:null}i(It,"convertContentPart$2");async function St(t){const{baseUrl:e,model:n,messages:r,system:s,tools:a,context:o,apiKey:l,options:c}=t,u=o?.tracer,d=Ie(r,s),f=Se(a),p={model:n,messages:d,...f&&{tools:f}};c&&(c.temperature!==void 0&&(p.temperature=c.temperature),c.top_p!==void 0&&(p.top_p=c.top_p),c.max_tokens!==void 0&&(p.max_tokens=c.max_tokens),c.frequency_penalty!==void 0&&(p.frequency_penalty=c.frequency_penalty),c.presence_penalty!==void 0&&(p.presence_penalty=c.presence_penalty),c.stop!==void 0&&(p.stop=c.stop)),u?.debug("ChatCompletions request",{request:p});let m;try{const _={"Content-Type":"application/json"};l&&(_.Authorization=`Bearer ${l}`);const h=await fetch(`${e}/chat/completions`,{method:"POST",headers:_,body:JSON.stringify(p)});if(!h.ok){const w=await h.text().catch(()=>"");throw new Error(`HTTP error! status: ${h.status}${w?` - ${w}`:""}`)}const I=await h.json();m=Tt(I)}catch(_){u?.error("Error fetching ChatCompletions response",{error:_ instanceof Error?_.message:String(_)}),m=J(_)}return u?.debug("ChatCompletions response",{result:m}),m}i(St,"createGenerationRequest$2");function Tt(t){const e=t.choices?.[0];if(!e)return{type:"error",error:{type:"ChatCompletionsError",message:"No choices in response"},usage:{in:0,out:0},raw:t};const n=[];if(e.message.reasoning_content&&n.push({type:"thinking",text:e.message.reasoning_content}),e.message.content&&n.push({type:"text",text:e.message.content}),e.message.tool_calls)for(const a of e.message.tool_calls){let o;try{o=JSON.parse(a.function.arguments)}catch(l){throw new Error(`Invalid tool call arguments for ${a.function.name}: ${l instanceof Error?l.message:String(l)}`)}if(typeof o!="object"||o===null||Array.isArray(o))throw new Error(`Invalid tool call arguments for ${a.function.name}: expected object, got ${typeof o}`);n.push({type:"tool-call",id:a.id,name:a.function.name,parameters:o})}const r=n.some(a=>a.type==="tool-call"),s=ee(r?"tool_calls":e.finish_reason);return{type:"success",id:t.id,model:t.model,role:"assistant",finishReason:s,content:n,text:F(n)??"",usage:{in:t.usage?.prompt_tokens||0,out:t.usage?.completion_tokens||0},raw:t}}i(Tt,"fromModelResponse$2");function wt(){const t=new Map;let e=0,n=-1,r="",s="",a=null;function o(c){n<0||(a==="text"?c.push({type:"text-complete",data:{index:n}}):a==="thinking"&&c.push({type:"thinking-complete",data:{index:n}}),a=null,n=-1)}i(o,"closeActivePart");function l(c){const u=[],d=c.choices[0];if(!d)return u;r||(r=c.id,s=c.model,u.push({type:"start",id:r,data:{model:s,timestamp:Date.now()}}));const f=d.delta;if(f.reasoning_content&&(a!=="thinking"&&(o(u),n=e++,a="thinking",u.push({type:"thinking-start",data:{index:n}})),u.push({type:"thinking-delta",data:{index:n,text:f.reasoning_content}})),f.content&&(a!=="text"&&(o(u),n=e++,a="text",u.push({type:"text-start",data:{index:n}})),u.push({type:"text-delta",data:{text:f.content,index:n}})),f.tool_calls){o(u);for(const p of f.tool_calls){const m=p.index;if(!t.has(m)){const h=e++,I=p.id||`tool-${h}`;t.set(m,{id:I,name:p.function?.name||"",argumentsBuffer:"",partIdx:h}),u.push({type:"tool-call-start",data:{index:h,id:I,name:p.function?.name||""}})}const _=t.get(m);p.id&&(_.id=p.id),p.function?.name&&(_.name=p.function.name),p.function?.arguments&&(_.argumentsBuffer+=p.function.arguments)}}if(d.finish_reason){o(u);for(const[,m]of t)try{const _=JSON.parse(m.argumentsBuffer);u.push({type:"tool-call-complete",data:{index:m.partIdx,id:m.id,name:m.name,arguments:_}})}catch(_){throw new Error(`Failed to parse tool call arguments for ${m.name}: ${_ instanceof Error?_.message:String(_)}`)}const p=ee(d.finish_reason);u.push({type:"complete",data:{finishReason:p,usage:c.usage?{in:c.usage.prompt_tokens,out:c.usage.completion_tokens}:{in:0,out:0}}})}return u}return i(l,"handleChunk"),{handleChunk:l}}i(wt,"createStreamingAdapter$1");async function*bt(t){const{baseUrl:e,model:n,messages:r,system:s,tools:a,context:o,signal:l,apiKey:c,options:u}=t,d=o?.tracer,f=Ie(r,s),p=Se(a),m={model:n,messages:f,stream:!0,stream_options:{include_usage:!0},...p&&{tools:p}};u&&(u.temperature!==void 0&&(m.temperature=u.temperature),u.top_p!==void 0&&(m.top_p=u.top_p),u.max_tokens!==void 0&&(m.max_tokens=u.max_tokens),u.frequency_penalty!==void 0&&(m.frequency_penalty=u.frequency_penalty),u.presence_penalty!==void 0&&(m.presence_penalty=u.presence_penalty),u.stop!==void 0&&(m.stop=u.stop)),d?.debug("ChatCompletions streaming request",{request:m});const _=wt();try{const h={"Content-Type":"application/json"};c&&(h.Authorization=`Bearer ${c}`);const I=await fetch(`${e}/chat/completions`,{method:"POST",headers:h,body:JSON.stringify(m),signal:l});if(!I.ok){const G=await I.text().catch(()=>"");throw new Error(`HTTP error! status: ${I.status}${G?` - ${G}`:""}`)}if(!I.body)throw new Error("Response body is null");const w=I.body.getReader(),A=new TextDecoder;let U="";for(;;){const{done:G,value:B}=await w.read();if(G)break;U+=A.decode(B,{stream:!0});const N=U.split(`
|
|
20
|
-
`);U=N.pop()||"";for(const W of N){const y=W.trim();if(!y||y.startsWith(":")||!y.startsWith("data: "))continue;const L=y.slice(6);if(L!=="[DONE]")try{const T=JSON.parse(L),D=_.handleChunk(T);for(const v of D)yield v}catch(T){d?.error("Error parsing ChatCompletions stream chunk",{error:T instanceof Error?T.message:String(T),line:y})}}}}catch(h){if(l?.aborted)return;d?.error("Error in ChatCompletions streaming request",{error:h instanceof Error?h.message:String(h)}),yield{type:"error",data:{type:"STREAMING_ERROR",message:h instanceof Error?h.message:String(h),raw:h}}}}i(bt,"createStreamingRequest$2");function At(t,e){return{name:"ChatCompletions",async createGenerationRequest(n,r){return await St({baseUrl:t,model:n,apiKey:e,...r})},createStreamingRequest(n,r){return bt({baseUrl:t,model:n,apiKey:e,...r})}}}i(At,"chatCompletions");const x={GEMINI_3_PRO_PREVIEW:"gemini-3-pro-preview",GEMINI_3_FLASH_PREVIEW:"gemini-3-flash-preview",GEMINI_3_PRO_IMAGE_PREVIEW:"gemini-3-pro-image-preview",GEMINI_2_5_PRO:"gemini-2.5-pro",GEMINI_2_5_FLASH:"gemini-2.5-flash",GEMINI_2_5_FLASH_PREVIEW_09_2025:"gemini-2.5-flash-preview-09-2025",GEMINI_2_5_FLASH_IMAGE:"gemini-2.5-flash-image",GEMINI_2_5_FLASH_LITE:"gemini-2.5-flash-lite",GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025:"gemini-2.5-flash-lite-preview-09-2025",GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025:"gemini-2.5-flash-native-audio-preview-09-2025",GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025:"gemini-2.5-flash-native-audio-preview-12-2025",GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025:"gemini-2.5-computer-use-preview-10-2025",GEMINI_2_0_FLASH:"gemini-2.0-flash",GEMINI_2_0_FLASH_001:"gemini-2.0-flash-001",GEMINI_2_0_FLASH_EXP_IMAGE_GENERATION:"gemini-2.0-flash-exp-image-generation",GEMINI_2_0_FLASH_LITE:"gemini-2.0-flash-lite",GEMINI_2_0_FLASH_LITE_001:"gemini-2.0-flash-lite-001",GEMINI_EXP_1206:"gemini-exp-1206",GEMINI_FLASH_LATEST:"gemini-flash-latest",GEMINI_FLASH_LITE_LATEST:"gemini-flash-lite-latest",GEMINI_PRO_LATEST:"gemini-pro-latest",GEMMA_3_27B_IT:"gemma-3-27b-it",GEMMA_3_12B_IT:"gemma-3-12b-it",GEMMA_3_4B_IT:"gemma-3-4b-it",GEMMA_3_1B_IT:"gemma-3-1b-it",GEMMA_3N_E4B_IT:"gemma-3n-e4b-it",GEMMA_3N_E2B_IT:"gemma-3n-e2b-it",DEEP_RESEARCH_PRO_PREVIEW_12_2025:"deep-research-pro-preview-12-2025",GEMINI_ROBOTICS_ER_1_5_PREVIEW:"gemini-robotics-er-1.5-preview",NANO_BANANA_PRO_PREVIEW:"nano-banana-pro-preview",AQA:"aqa"};x.GEMINI_3_PRO_PREVIEW,x.GEMINI_3_FLASH_PREVIEW,x.GEMINI_3_PRO_IMAGE_PREVIEW,x.GEMINI_2_5_PRO,x.GEMINI_2_5_FLASH,x.GEMINI_2_5_FLASH_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_IMAGE,x.GEMINI_2_5_FLASH_LITE,x.GEMINI_2_5_FLASH_LITE_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_09_2025,x.GEMINI_2_5_FLASH_NATIVE_AUDIO_PREVIEW_12_2025,x.GEMINI_2_5_COMPUTER_USE_PREVIEW_10_2025,x.GEMINI_2_0_FLASH,x.GEMINI_2_0_FLASH_001,x.GEMINI_2_0_FLASH_EXP_IMAGE_GENERATION,x.GEMINI_2_0_FLASH_LITE,x.GEMINI_2_0_FLASH_LITE_001,x.GEMINI_EXP_1206,x.GEMINI_FLASH_LATEST,x.GEMINI_FLASH_LITE_LATEST,x.GEMINI_PRO_LATEST,x.GEMMA_3_27B_IT,x.GEMMA_3_12B_IT,x.GEMMA_3_4B_IT,x.GEMMA_3_1B_IT,x.GEMMA_3N_E4B_IT,x.GEMMA_3N_E2B_IT,x.DEEP_RESEARCH_PRO_PREVIEW_12_2025,x.GEMINI_ROBOTICS_ER_1_5_PREVIEW,x.NANO_BANANA_PRO_PREVIEW;const kt=x.GEMINI_3_FLASH_PREVIEW;function Te(t,e,n){const r={};return e&&(r.systemInstruction=e),t&&t.length>0&&(r.tools=t.map(s=>({functionDeclarations:[{name:s.name,description:s.description,parametersJsonSchema:V.toJSONSchema(s.schema)}]}))),n&&Object.assign(r,n),r}i(Te,"prepareConfig");function we(t){return t.map(Ct).filter(e=>e!==void 0)}i(we,"convertAxleMessagesToGemini");function Ct(t){switch(t.role){case"tool":return Ot(t);case"assistant":return Pt(t);case"user":return Rt(t)}}i(Ct,"convertMessage$1");function Ot(t){return{role:"user",parts:t.content.map(e=>({functionResponse:{id:e.id??void 0,name:e.name,response:{output:e.content}}}))}}i(Ot,"convertToolMessage$1");function Pt(t){const e=[],n=t.content.filter(s=>s.type==="text");if(n.length>0){const s=n.map(a=>a.text).join("");s&&e.push({text:s})}const r=t.content.filter(s=>s.type==="tool-call");return r.length>0&&e.push(...r.map(s=>({functionCall:{id:s.id??void 0,name:s.name,args:s.parameters}}))),{role:"model",parts:e}}i(Pt,"convertAssistantMessage$1");function Rt(t){return typeof t.content=="string"?{role:"user",parts:[{text:t.content}]}:{role:"user",parts:t.content.map($t).filter(n=>n!==null)}}i(Rt,"convertUserMessage$1");function $t(t){return t.type==="text"?{text:t.text}:t.type==="file"&&(t.file.type==="image"||t.file.type==="document")?{inlineData:{mimeType:t.file.mimeType,data:t.file.base64}}:null}i($t,"convertContentPart$1");function be(t){switch(t){case O.STOP:return[!0,S.Stop];case O.MAX_TOKENS:return[!0,S.Length];case O.FINISH_REASON_UNSPECIFIED:case O.SAFETY:case O.RECITATION:case O.LANGUAGE:case O.OTHER:case O.BLOCKLIST:case O.PROHIBITED_CONTENT:case O.SPII:case O.MALFORMED_FUNCTION_CALL:case O.IMAGE_SAFETY:return[!1,S.Error]}}i(be,"convertStopReason");async function Nt(t){const{client:e,model:n,messages:r,system:s,tools:a,context:o,options:l}=t,c=o?.tracer,u=l?{...l}:{};u.max_tokens&&(u.maxOutputTokens=u.max_tokens,delete u.max_tokens),u.stop&&(u.stopSequences=Array.isArray(u.stop)?u.stop:[u.stop],delete u.stop),u.top_p!==void 0&&(u.topP=u.top_p,delete u.top_p);const d={contents:we(r),config:Te(a,s,u)};c?.debug("Gemini request",{request:d});let f;try{const p=await e.models.generateContent({model:n,...d});f=Lt(p,{tracer:c})}catch(p){c?.error(p instanceof Error?p.message:String(p)),f=J(p)}return c?.debug("Gemini response",{result:f}),f}i(Nt,"createGenerationRequest$1");function Lt(t,e){const{tracer:n}=e,r=t.usageMetadata.promptTokenCount,s=t.usageMetadata.totalTokenCount-r,a={in:r,out:s};if(!t)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:t};if(t.promptFeedback&&t.promptFeedback.blockReason)return{type:"error",error:{type:"Blocked",message:`Response blocked by Google AI: ${t.promptFeedback.blockReason}, ${t.promptFeedback.blockReasonMessage}`},usage:a,raw:t};if(!t.candidates||t.candidates.length===0)return{type:"error",error:{type:"InvalidResponse",message:"Invalid or empty response from Google AI"},usage:{in:0,out:0},raw:t};t.candidates.length>1&&n?.warn(`We received ${t.candidates.length} response candidates`);const o=t.candidates[0],c=(o.content?.parts||[]).map(f=>f.text).filter(f=>f!==void 0).join(""),[u,d]=be(o.finishReason);if(u){const f=[];if(c&&f.push({type:"text",text:c}),t.functionCalls)for(const p of t.functionCalls){if(typeof p.args!="object"||p.args===null||Array.isArray(p.args))throw new Error(`Invalid tool call arguments for ${p.name}: expected object, got ${typeof p.args}`);f.push({type:"tool-call",id:p.id,name:p.name,parameters:p.args})}return{type:"success",id:t.responseId,model:t.modelVersion,role:"assistant",finishReason:t.functionCalls?S.FunctionCall:d,content:f,text:F(f)??"",usage:a,raw:t}}else return{type:"error",error:{type:"Undetermined",message:`Unexpected stop reason: ${d}`},usage:a,raw:t}}i(Lt,"fromModelResponse$1");function Mt(){let t=0,e=-1,n=!1,r="",s="",a=0,o=0,l=null;function c(d){e<0||(l==="text"?d.push({type:"text-complete",data:{index:e}}):l==="thinking"&&d.push({type:"thinking-complete",data:{index:e}}),l=null,e=-1)}i(c,"closeActivePart");function u(d){const f=[];r||(r=d.responseId||`gemini-${Date.now()}`,s=d.modelVersion||"gemini",f.push({type:"start",id:r,data:{model:s,timestamp:Date.now()}})),d.usageMetadata&&(a=d.usageMetadata.promptTokenCount||0,o=(d.usageMetadata.totalTokenCount||0)-a);const p=d.candidates?.[0];if(!p)return f;const m=p.content?.parts||[];for(const _ of m){const h="thought"in _&&_.thought===!0;if(h&&_.text?(l!=="thinking"&&(c(f),e=t++,l="thinking",f.push({type:"thinking-start",data:{index:e}})),f.push({type:"thinking-delta",data:{index:e,text:_.text}})):_.text&&!h?(l!=="text"&&(c(f),e=t++,l="text",f.push({type:"text-start",data:{index:e}})),f.push({type:"text-delta",data:{text:_.text,index:e}})):_.functionCall||console.log(`[gemini] unhandled part type: ${JSON.stringify(Object.keys(_))}`),_.functionCall){c(f),n=!0;const I=t++,w=_.functionCall.id||`tool-${I}`;f.push({type:"tool-call-start",data:{index:I,id:w,name:_.functionCall.name}}),f.push({type:"tool-call-complete",data:{index:I,id:w,name:_.functionCall.name,arguments:_.functionCall.args}})}}if(p.finishReason&&p.finishReason!==O.FINISH_REASON_UNSPECIFIED){c(f);const[_,h]=be(p.finishReason),I=n?S.FunctionCall:h;!_&&!n?f.push({type:"error",data:{type:"FinishReasonError",message:`Unexpected finish reason: ${p.finishReason}`,usage:{in:a,out:o},raw:d}}):f.push({type:"complete",data:{finishReason:I,usage:{in:a,out:o}}})}return f}return i(u,"handleChunk"),{handleChunk:u}}i(Mt,"createGeminiStreamingAdapter");async function*Ut(t){const{client:e,model:n,messages:r,system:s,tools:a,runtime:o,signal:l,options:c}=t,u=o?.tracer,d=c?{...c}:{};d.max_tokens&&(d.maxOutputTokens=d.max_tokens,delete d.max_tokens),d.stop&&(d.stopSequences=Array.isArray(d.stop)?d.stop:[d.stop],delete d.stop),d.top_p!==void 0&&(d.topP=d.top_p,delete d.top_p);const f={contents:we(r),config:Te(a,s,d)};u?.debug("Gemini streaming request",{request:f});const p=Mt();try{const m=await e.models.generateContentStream({model:n,...f});for await(const _ of m){const h=p.handleChunk(_);for(const I of h)yield I}}catch(m){if(l?.aborted)return;u?.error(m instanceof Error?m.message:String(m)),yield{type:"error",data:{type:"STREAMING_ERROR",message:m instanceof Error?m.message:String(m),raw:m}}}}i(Ut,"createStreamingRequest$1");const Gt="Gemini";function Dt(t){const e=new Fe({apiKey:t});return{name:Gt,async createGenerationRequest(n,r){return await Nt({client:e,model:n,...r})},createStreamingRequest(n,r){const{messages:s,system:a,tools:o,context:l,signal:c,options:u}=r;return Ut({client:e,model:n,messages:s,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(Dt,"gemini");const Ae={GPT_5_2:"gpt-5.2",GPT_5_2_2025_12_11:"gpt-5.2-2025-12-11",GPT_5_2_CHAT_LATEST:"gpt-5.2-chat-latest",GPT_5_2_PRO:"gpt-5.2-pro",GPT_5_2_PRO_2025_12_11:"gpt-5.2-pro-2025-12-11",GPT_5_2_CODEX:"gpt-5.2-codex",GPT_5_1:"gpt-5.1",GPT_5_1_2025_11_13:"gpt-5.1-2025-11-13",GPT_5_1_CHAT_LATEST:"gpt-5.1-chat-latest",GPT_5_1_CODEX:"gpt-5.1-codex",GPT_5_1_CODEX_MAX:"gpt-5.1-codex-max",GPT_5_1_CODEX_MINI:"gpt-5.1-codex-mini",GPT_5:"gpt-5",GPT_5_2025_08_07:"gpt-5-2025-08-07",GPT_5_CHAT_LATEST:"gpt-5-chat-latest",GPT_5_CODEX:"gpt-5-codex",GPT_5_MINI:"gpt-5-mini",GPT_5_MINI_2025_08_07:"gpt-5-mini-2025-08-07",GPT_5_NANO:"gpt-5-nano",GPT_5_NANO_2025_08_07:"gpt-5-nano-2025-08-07",GPT_5_PRO:"gpt-5-pro",GPT_5_PRO_2025_10_06:"gpt-5-pro-2025-10-06",GPT_5_SEARCH_API:"gpt-5-search-api",GPT_5_SEARCH_API_2025_10_14:"gpt-5-search-api-2025-10-14",GPT_4_1:"gpt-4.1",GPT_4_1_2025_04_14:"gpt-4.1-2025-04-14",GPT_4_1_MINI:"gpt-4.1-mini",GPT_4_1_MINI_2025_04_14:"gpt-4.1-mini-2025-04-14",GPT_4_1_NANO:"gpt-4.1-nano",GPT_4_1_NANO_2025_04_14:"gpt-4.1-nano-2025-04-14",GPT_4O:"gpt-4o",GPT_4O_2024_11_20:"gpt-4o-2024-11-20",GPT_4O_2024_08_06:"gpt-4o-2024-08-06",GPT_4O_2024_05_13:"gpt-4o-2024-05-13",GPT_4O_MINI:"gpt-4o-mini",GPT_4O_MINI_2024_07_18:"gpt-4o-mini-2024-07-18",GPT_4O_SEARCH_PREVIEW:"gpt-4o-search-preview",GPT_4O_SEARCH_PREVIEW_2025_03_11:"gpt-4o-search-preview-2025-03-11",GPT_4O_MINI_SEARCH_PREVIEW:"gpt-4o-mini-search-preview",GPT_4O_MINI_SEARCH_PREVIEW_2025_03_11:"gpt-4o-mini-search-preview-2025-03-11",GPT_4_TURBO:"gpt-4-turbo",GPT_4_TURBO_2024_04_09:"gpt-4-turbo-2024-04-09",GPT_4_TURBO_PREVIEW:"gpt-4-turbo-preview",GPT_4_0125_PREVIEW:"gpt-4-0125-preview",GPT_4_1106_PREVIEW:"gpt-4-1106-preview",GPT_4:"gpt-4",GPT_4_0613:"gpt-4-0613",GPT_3_5_TURBO:"gpt-3.5-turbo",GPT_3_5_TURBO_0125:"gpt-3.5-turbo-0125",GPT_3_5_TURBO_1106:"gpt-3.5-turbo-1106",GPT_3_5_TURBO_16K:"gpt-3.5-turbo-16k",GPT_3_5_TURBO_INSTRUCT:"gpt-3.5-turbo-instruct",GPT_3_5_TURBO_INSTRUCT_0914:"gpt-3.5-turbo-instruct-0914",O4_MINI:"o4-mini",O4_MINI_2025_04_16:"o4-mini-2025-04-16",O4_MINI_DEEP_RESEARCH:"o4-mini-deep-research",O4_MINI_DEEP_RESEARCH_2025_06_26:"o4-mini-deep-research-2025-06-26",O3:"o3",O3_2025_04_16:"o3-2025-04-16",O3_PRO:"o3-pro",O3_PRO_2025_06_10:"o3-pro-2025-06-10",O3_MINI:"o3-mini",O3_MINI_2025_01_31:"o3-mini-2025-01-31",O3_DEEP_RESEARCH:"o3-deep-research",O3_DEEP_RESEARCH_2025_06_26:"o3-deep-research-2025-06-26",O1:"o1",O1_2024_12_17:"o1-2024-12-17",O1_PRO:"o1-pro",O1_PRO_2025_03_19:"o1-pro-2025-03-19",COMPUTER_USE_PREVIEW:"computer-use-preview",COMPUTER_USE_PREVIEW_2025_03_11:"computer-use-preview-2025-03-11",CHATGPT_IMAGE_LATEST:"chatgpt-image-latest"},vt=Ae.GPT_5_MINI;function ke(t){if(t&&t.length>0)return t.map(e=>{const n=V.toJSONSchema(e.schema);return{type:"function",strict:!0,name:e.name,description:e.description,parameters:n}})}i(ke,"prepareTools");function Ce(t){return t.map(Ft).flat(1)}i(Ce,"convertAxleMessageToResponseInput");function Ft(t){switch(t.role){case"tool":return Ht(t);case"assistant":return Bt(t);default:return jt(t)}}i(Ft,"convertMessage");function Ht(t){return t.content.map(e=>({type:"function_call_output",call_id:e.id,output:e.content}))}i(Ht,"convertToolMessage");function Bt(t){const e=[],n=F(t.content);n&&e.push({role:t.role,content:n});const r=t.content.filter(s=>s.type==="tool-call");for(const s of r)e.push({type:"function_call",call_id:s.id,name:s.name,arguments:JSON.stringify(s.parameters)});return e}i(Bt,"convertAssistantMessage");function jt(t){if(typeof t.content=="string")return{role:t.role,content:t.content};{const e=t.content.map(qt).filter(n=>n!==null);return{role:t.role,content:e}}}i(jt,"convertUserMessage");function qt(t){if(t.type==="text")return{type:"input_text",text:t.text};if(t.type==="file"){if(t.file.type==="image")return{type:"input_image",image_url:`data:${t.file.mimeType};base64,${t.file.base64}`,detail:"auto"};if(t.file.type==="document")return{type:"input_file",filename:t.file.path,file_data:`data:${t.file.mimeType};base64,${t.file.base64}`}}return t.type==="thinking",null}i(qt,"convertContentPart");async function Wt(t){const{client:e,model:n,messages:r,system:s,tools:a,context:o,options:l}=t,c=o?.tracer,u=ke(a),d={model:n,input:Ce(r),...s&&{instructions:s},...u?{tools:u}:{},...l};c?.debug("OpenAI ResponsesAPI request",{request:d});let f;try{const p=await e.responses.create(d);f=Vt(p)}catch(p){c?.error(p instanceof Error?p.message:String(p)),f=J(p)}return c?.debug("OpenAI ResponsesAPI response",{result:f}),f}i(Wt,"createGenerationRequest");function Vt(t){if(t.error)return{type:"error",error:{type:t.error.code||"undetermined",message:t.error.message||"Response generation failed"},usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t};const e=t.output?.filter(s=>s.type==="reasoning")?.map(s=>s),n=[];if(e&&e.length>0)for(const s of e){const a=s.summary?.[0]?.text||s.content?.[0]?.text||"";(a||s.encrypted_content)&&n.push({type:"thinking",text:a,...s.encrypted_content&&{encrypted:s.encrypted_content}})}t.output_text&&n.push({type:"text",text:t.output_text});const r=t.output?.filter(s=>s.type==="function_call");if(r&&r.length>0)for(const s of r){const a=s;try{n.push({type:"tool-call",id:a.id||"",name:a.name||"",parameters:a.arguments?JSON.parse(a.arguments):{}})}catch(o){throw new Error(`Failed to parse tool call arguments for ${a.name}: ${o instanceof Error?o.message:String(o)}`)}}return{type:"success",id:t.id,model:t.model||"",role:"assistant",finishReason:t.incomplete_details?S.Error:S.Stop,content:n,text:F(n)??"",usage:{in:t.usage?.input_tokens??0,out:t.usage?.output_tokens??0},raw:t}}i(Vt,"fromModelResponse");function Kt(){let t="",e="",n=0,r=-1,s=!1;const a=new Map,o=new Map,l=new Set(["web_search_call","file_search_call","code_interpreter_call"]),c=new Map;function u(d){const f=[];switch(d.type){case"response.created":{t=d.response.id||`openai-${Date.now()}`,e=d.response.model,f.push({type:"start",id:t,data:{model:e,timestamp:Date.now()}});break}case"response.output_text.delta":{r===-1&&(r=n++,f.push({type:"text-start",data:{index:r}})),f.push({type:"text-delta",data:{text:d.delta,index:r}});break}case"response.output_text.done":{r>=0&&(f.push({type:"text-complete",data:{index:r}}),r=-1);break}case"response.function_call_arguments.delta":{const p=d.item_id;if(!c.has(p)){const _=a.get(p),h=_?.name||"",I=_?.callId||p,w=n++;c.set(p,{id:p,callId:I,name:h,argumentsBuffer:"",partIdx:w}),f.push({type:"tool-call-start",data:{index:w,id:I,name:h}})}const m=c.get(p);m.argumentsBuffer+=d.delta;break}case"response.function_call_arguments.done":{s=!0;const p=d.item_id,m=c.get(p),_=d.name||m?.name||"";if(m){try{const h=JSON.parse(d.arguments);f.push({type:"tool-call-complete",data:{index:m.partIdx,id:m.callId,name:_,arguments:h}})}catch(h){throw new Error(`Failed to parse function call arguments for ${_}: ${h instanceof Error?h.message:String(h)}`)}c.delete(p)}break}case"response.completed":{const p=d.response.usage;f.push({type:"complete",data:{finishReason:d.response.incomplete_details?S.Error:s?S.FunctionCall:S.Stop,usage:{in:p?.input_tokens||0,out:p?.output_tokens||0}}});break}case"response.failed":{f.push({type:"error",data:{type:"RESPONSES_API_ERROR",message:`Response failed: ${d.response.status}`,raw:d}});break}case"response.output_item.added":{if(d.item?.type==="reasoning")r=n++,f.push({type:"thinking-start",data:{index:r}});else if(d.item?.type==="function_call"){const p=d.item,m=p.id||p.call_id;m&&a.set(m,{name:p.name||"",callId:p.call_id||m})}else if(d.item&&l.has(d.item.type)){const p=d.item,m=n++;o.set(p.id,m),f.push({type:"internal-tool-start",data:{index:m,id:p.id,name:p.type}})}break}case"response.output_item.done":{if(d.item?.type==="reasoning"&&r>=0)f.push({type:"thinking-complete",data:{index:r}}),r=-1;else if(d.item&&l.has(d.item.type)){const p=d.item,m=o.get(p.id);m!==void 0&&(f.push({type:"internal-tool-complete",data:{index:m,id:p.id,name:p.type,output:d.item}}),o.delete(p.id))}break}case"response.reasoning_text.delta":{d.delta&&f.push({type:"thinking-delta",data:{index:r,text:d.delta}});break}case"response.reasoning_summary_text.delta":{d.delta&&f.push({type:"thinking-summary-delta",data:{index:r,text:d.delta}});break}default:console.log(`[OpenAI] unhandled stream event: ${d.type}`)}return f}return i(u,"handleEvent"),{handleEvent:u}}i(Kt,"createStreamingAdapter");async function*Jt(t){const{client:e,model:n,messages:r,system:s,tools:a,runtime:o,signal:l,options:c}=t,u=o?.tracer,d=ke(a),f={model:n,input:Ce(r),...s&&{instructions:s},stream:!0,...d?{tools:d}:{},...c};u?.debug("OpenAI ResponsesAPI streaming request",{request:f});const p=Kt();try{const m=e.responses.stream(f,...l?[{signal:l}]:[]);for await(const _ of m){const h=p.handleEvent(_);for(const I of h)yield I}}catch(m){if(l?.aborted)return;u?.error(m instanceof Error?m.message:String(m)),yield{type:"error",data:{type:"STREAMING_ERROR",message:m instanceof Error?m.message:String(m),raw:m}}}}i(Jt,"createStreamingRequest");const zt="OpenAI";function Xt(t){const e=new He({apiKey:t});return{name:zt,async createGenerationRequest(n,r){return await Wt({client:e,model:n,...r})},createStreamingRequest(n,r){const{messages:s,system:a,tools:o,context:l,signal:c,options:u}=r;return Jt({client:e,model:n,messages:s,system:a,tools:o,runtime:l,signal:c,options:u})}}}i(Xt,"openai");const Zt=C.object({searchTerm:C.string().describe("The search term to query")});class Yt{static{i(this,"BraveSearchTool")}name="brave";description="Perform a search using the Brave search engine";schema=Zt;apiKey;throttle;lastExecTime=0;constructor(e){e&&this.configure(e)}configure(e){const{rateLimit:n}=e;this.apiKey=e["api-key"],this.throttle=n?1100/n:void 0}async execute(e){const{searchTerm:n}=e;if(this.throttle){for(;Date.now()-this.lastExecTime<this.throttle;)await ct(this.throttle-(Date.now()-this.lastExecTime));this.lastExecTime=Date.now()}try{const r=this.apiKey,s="https://api.search.brave.com/res/v1/web/search",a=new URL(s);a.searchParams.append("q",n),a.searchParams.append("format","json");const o=await fetch(a.toString(),{method:"GET",headers:{Accept:"application/json","X-Subscription-Token":r}});if(!o.ok)throw new Error(`[Brave] HTTP error ${o.status}: ${o.statusText}`);const l=await o.json();return JSON.stringify(l)}catch(r){throw r instanceof Error?new Error(`[Brave] Error fetching search results: ${r.message}`):r}}}const Qt=new Yt,en=k.object({operation:k.enum(["add","subtract","multiply","divide"]).describe("The operation to perform (add, subtract, multiply, divide)"),a:k.number().describe("First operand"),b:k.number().describe("Second operand")}),tn={name:"calculator",description:"Performs basic arithmetic operations",schema:en,execute:i(async({operation:t,a:e,b:n})=>{switch(t){case"add":return`${e} + ${n} = ${e+n}`;case"subtract":return`${e} - ${n} = ${e-n}`;case"multiply":return`${e} * ${n} = ${e*n}`;case"divide":if(n===0)throw new Error("Cannot divide by zero");return`${e} / ${n} = ${e/n}`;default:throw new Error(`Unknown operation: ${t}`)}},"execute")},nn=je(Be),rn=3e4,sn=1024*1024;async function on(t,e={}){const{stdout:n,stderr:r}=await nn(t,{cwd:e.cwd,timeout:e.timeout??rn,maxBuffer:e.maxBuffer??sn});return{stdout:n,stderr:r}}i(on,"runCommand");function an(t){if(t instanceof Error){const e=t;let n=`Error executing command: ${t.message}`;return e.stdout&&(n+=`
|
|
21
|
-
[stdout]: ${e.stdout}`),e.stderr&&(n+=`
|
|
22
|
-
[stderr]: ${e.stderr}`),n}return`Error executing command: ${String(t)}`}i(an,"formatExecError");function cn(t,e){return e&&e.trim()?`${t}
|
|
23
|
-
[stderr]: ${e}`:t}i(cn,"formatOutput");const ln=C.object({command:C.string().describe("The shell command to execute")});class un{static{i(this,"ExecTool")}name="exec";description="Execute a shell command and return the output.";schema=ln;timeout=3e4;maxBuffer=1024*1024;cwd;constructor(e){e&&this.configure(e)}configure(e){this.timeout=e.timeout??3e4,this.maxBuffer=e.maxBuffer??1024*1024,this.cwd=e.cwd}summarize(e){return e.command}async execute(e){const{command:n}=e;try{const r=await on(n,{timeout:this.timeout,maxBuffer:this.maxBuffer,cwd:this.cwd});return cn(r.stdout,r.stderr)}catch(r){return an(r)}}}const pn=new un,dn=k.object({path:k.string().describe("The file path to patch"),old_string:k.string().describe("The exact text to find and replace"),new_string:k.string().describe("The replacement text"),start_line:k.number().int().positive().describe("1-indexed start line of the region to match within"),end_line:k.number().int().positive().describe("1-indexed end line (inclusive) of the region to match within")}),fn={name:"patch-file",description:"Patch a file by replacing an exact string match within a specified line range",schema:dn,summarize:i(({path:t,start_line:e,end_line:n})=>`${t}:${e}:${n}`,"summarize"),execute:i(async({path:t,old_string:e,new_string:n,start_line:r,end_line:s})=>{if(s<r)throw new Error(`end_line (${s}) must be >= start_line (${r})`);let a;try{a=await H(t,"utf-8")}catch(_){throw _ instanceof Error?new Error(`Failed to read file "${t}": ${_.message}`):_}const o=a.split(`
|
|
24
|
-
`);if(r>o.length)throw new Error(`start_line (${r}) exceeds file length (${o.length} lines)`);if(s>o.length)throw new Error(`end_line (${s}) exceeds file length (${o.length} lines)`);const c=o.slice(r-1,s).join(`
|
|
25
|
-
`),u=c.indexOf(e);if(u===-1)throw new Error(`old_string not found within lines ${r}-${s} of "${t}"`);if(c.indexOf(e,u+1)!==-1)throw new Error(`old_string matches multiple times within lines ${r}-${s} of "${t}"`);const f=c.replace(e,n),m=[...o.slice(0,r-1),...f.split(`
|
|
26
|
-
`),...o.slice(s)].join(`
|
|
27
|
-
`);try{await se(t,m,"utf-8")}catch(_){throw _ instanceof Error?new Error(`Failed to write file "${t}": ${_.message}`):_}return`Successfully patched "${t}" (lines ${r}-${s})`},"execute")},mn=k.object({path:k.string().describe("The file path to read from")}),_n={name:"read-file",description:"Read the contents of a file from disk",schema:mn,summarize:i(({path:t})=>t,"summarize"),execute:i(async({path:t})=>{try{return await H(t,"utf-8")}catch(e){throw e instanceof Error?new Error(`Failed to read file "${t}": ${e.message}`):e}},"execute")},hn=k.object({path:k.string().describe("The file path to write to"),content:k.string().describe("The content to write to the file")}),gn={name:"write-file",description:"Write content to a file on disk, creating directories if needed",schema:hn,summarize:i(({path:t})=>t,"summarize"),execute:i(async({path:t,content:e})=>{try{return await Ge(De(t),{recursive:!0}),await se(t,e,"utf-8"),`Successfully wrote ${e.length} characters to "${t}"`}catch(n){throw n instanceof Error?new Error(`Failed to write file "${t}": ${n.message}`):n}},"execute")},Oe={debug:0,info:1,warn:2,error:3};class yn{static{i(this,"Tracer")}writers=[];_minLevel="info";get minLevel(){return this._minLevel}set minLevel(e){this._minLevel=e}addWriter(e){this.writers.includes(e)||this.writers.push(e)}removeWriter(e){const n=this.writers.indexOf(e);n!==-1&&this.writers.splice(n,1)}startSpan(e,n){const r={traceId:crypto.randomUUID(),spanId:crypto.randomUUID(),name:e,type:n?.type,startTime:performance.now(),status:"ok",attributes:{},events:[]};return this.writers.forEach(s=>s.onSpanStart(r)),new te(r,this)}async flush(){for(const e of this.writers)e.flush&&await e.flush()}_notifySpanEnd(e){this.writers.forEach(n=>n.onSpanEnd(e))}_notifySpanUpdate(e){this.writers.forEach(n=>n.onSpanUpdate?.(e))}_notifyEvent(e,n){this.writers.forEach(r=>r.onEvent?.(e,n))}_notifySpanStart(e){this.writers.forEach(n=>n.onSpanStart(e))}_notifyLLMStreamStart(e){this.writers.forEach(n=>n.onLLMStreamStart?.(e))}_notifyLLMStreamChunk(e,n){this.writers.forEach(r=>r.onLLMStreamChunk?.(e,n))}_notifyLLMStreamEnd(e,n){this.writers.forEach(r=>r.onLLMStreamEnd?.(e,n))}_shouldLog(e){return Oe[e]>=Oe[this._minLevel]}}class te{static{i(this,"Span")}data;tracer;ended=!1;llmStreamBuffer="";llmStreamActive=!1;constructor(e,n){this.data=e,this.tracer=n}startSpan(e,n){const r={traceId:this.data.traceId,spanId:crypto.randomUUID(),parentSpanId:this.data.spanId,name:e,type:n?.type,startTime:performance.now(),status:"ok",attributes:{},events:[]};return this.tracer._notifySpanStart(r),new te(r,this.tracer)}end(e="ok"){this.ended||(this.ended=!0,this.data.endTime=performance.now(),this.data.status=e,this.tracer._notifySpanEnd(this.data))}addEvent(e,n,r){if(this.ended||!this.tracer._shouldLog(n))return;const s={name:e,timestamp:performance.now(),level:n,attributes:r};this.data.events.push(s),this.tracer._notifyEvent(this.data,s)}debug(e,n){this.addEvent(e,"debug",n)}info(e,n){this.addEvent(e,"info",n)}warn(e,n){this.addEvent(e,"warn",n)}error(e,n){this.addEvent(e,"error",n)}setAttribute(e,n){this.ended||(this.data.attributes[e]=n,this.tracer._notifySpanUpdate(this.data))}setAttributes(e){this.ended||(Object.assign(this.data.attributes,e),this.tracer._notifySpanUpdate(this.data))}setResult(e){this.ended||(this.data.result=e,this.tracer._notifySpanUpdate(this.data))}startLLMStream(){this.ended||(this.llmStreamActive=!0,this.llmStreamBuffer="",this.tracer._notifyLLMStreamStart(this.data))}appendLLMStream(e){this.ended||!this.llmStreamActive||(this.llmStreamBuffer+=e,this.tracer._notifyLLMStreamChunk(this.data,e))}endLLMStream(e){if(this.ended||!this.llmStreamActive)return;this.llmStreamActive=!1;const n={...e,response:{...e.response,content:e.response.content??this.llmStreamBuffer}};this.data.result=n,this.tracer._notifyLLMStreamEnd(this.data,n)}}const Pe={debug:0,info:1,warn:2,error:3};class En{static{i(this,"SimpleWriter")}minLevel;showInternal;showTimestamp;showDuration;output;spans=new Map;visibleDepths=new Map;constructor(e={}){this.minLevel=e.minLevel??"info",this.showInternal=e.showInternal??!1,this.showTimestamp=e.showTimestamp??!0,this.showDuration=e.showDuration??!0,this.output=e.output??console.log}shouldShowEvent(e){return Pe[e]>=Pe[this.minLevel]}isSpanVisible(e){return!(e.type==="internal"&&!this.showInternal)}findVisibleAncestor(e){let n=e.parentSpanId;for(;n;){const r=this.spans.get(n);if(!r)break;if(this.isSpanVisible(r))return r;n=r.parentSpanId}return null}calculateVisibleDepth(e){if(!this.isSpanVisible(e))return-1;const n=this.findVisibleAncestor(e);return n?(this.visibleDepths.get(n.spanId)??0)+1:0}formatTimestamp(){if(!this.showTimestamp)return"";const e=new Date,n=e.toTimeString().slice(0,8),r=e.getMilliseconds().toString().padStart(3,"0");return`[${n}.${r}] `}formatDuration(e){if(!this.showDuration||!e.endTime)return"";const n=e.endTime-e.startTime;return n<1e3?` (${Math.round(n)}ms)`:` (${(n/1e3).toFixed(2)}s)`}formatIndent(e){return" ".repeat(e)}formatSpanName(e){return e.type?`[${e.type}] ${e.name}`:e.name}onSpanStart(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const r=this.calculateVisibleDepth(e);this.visibleDepths.set(e.spanId,r);const s=this.formatIndent(r),a=this.formatTimestamp(),o=this.formatSpanName(e);this.output(`${a}${s}START ${o}`)}onSpanEnd(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const r=this.visibleDepths.get(e.spanId)??0,s=this.formatIndent(r),a=this.formatTimestamp(),o=this.formatDuration(e),l=this.formatSpanName(e),c=e.status==="error"?" [ERROR]":"";this.output(`${a}${s}END ${l}${o}${c}`)}onSpanUpdate(e){this.spans.set(e.spanId,e)}onEvent(e,n){if(!this.shouldShowEvent(n.level))return;this.spans.set(e.spanId,e);let r;if(this.isSpanVisible(e))r=this.visibleDepths.get(e.spanId)??0;else{const c=this.findVisibleAncestor(e);c?r=this.visibleDepths.get(c.spanId)??0:r=0}const s=this.formatIndent(r+1),a=this.formatTimestamp(),o=n.level.toUpperCase().padEnd(5);let l=`${a}${s}${o} ${n.name}`;if(n.attributes&&Object.keys(n.attributes).length>0){const c=Object.entries(n.attributes).map(([u,d])=>`${u}=${JSON.stringify(d)}`).join(" ");l+=` ${c}`}this.output(l)}onLLMStreamStart(e){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const n=this.visibleDepths.get(e.spanId)??0,r=this.formatIndent(n+1),s=this.formatTimestamp();this.output(`${s}${r}INFO LLM streaming started`)}onLLMStreamChunk(e,n){}onLLMStreamEnd(e,n){if(this.spans.set(e.spanId,e),!this.isSpanVisible(e))return;const r=this.visibleDepths.get(e.spanId)??0,s=this.formatIndent(r+1),a=this.formatTimestamp(),o=[`model=${n.model}`];if(n.finishReason&&o.push(`finishReason=${n.finishReason}`),n.usage&&(n.usage.inputTokens!==void 0&&o.push(`inputTokens=${n.usage.inputTokens}`),n.usage.outputTokens!==void 0&&o.push(`outputTokens=${n.usage.outputTokens}`)),this.output(`${a}${s}INFO LLM complete ${o.join(" ")}`),this.shouldShowEvent("debug")&&n.response.content){const c=(typeof n.response.content=="string"?n.response.content:JSON.stringify(n.response.content,null,2)).split(`
|
|
28
|
-
`);for(const u of c)this.output(`${a}${s}DEBUG ${u}`)}}}export{S as A,it as D,ae as H,at as I,E as M,En as S,yn as T,kt as a,x as b,Ve as c,vt as d,ce as e,Ae as f,We as g,Ye as h,ht as i,Qt as j,tn as k,At as l,fe as m,Dt as n,ot as o,Xt as p,pe as q,Qe as r,le as s,_n as t,fn as u,pn as v,gn as w};
|