@mozaik-ai/core 0.7.0 → 0.7.2

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 CHANGED
@@ -9,7 +9,7 @@ Mozaik is a TypeScript library for orchestrating AI agents, supporting both manu
9
9
  ## 📦 Installation
10
10
 
11
11
  ```bash
12
- yarn add @jigjoy-ai/mosaic
12
+ yarn add @mozaik-ai/core
13
13
  ```
14
14
 
15
15
  ## API Key Configuration
@@ -30,22 +30,22 @@ The system supports OpenAI models (gpt-5, gpt-5-mini, gpt-5-nano, gpt-5.1) and A
30
30
 
31
31
  ---
32
32
 
33
- ## Features
33
+ ## Features
34
34
 
35
35
  ### AI Agents
36
36
 
37
37
  This feature lets developers create AI agents through a single unified request definition, making it easy to compose tasks and leverage multiple models. You can mix providers, choose the best model for each task, and build agents that work across different capabilities.
38
38
 
39
39
  ```typescript
40
- import 'dotenv/config'
41
- import { Agent, Command } from '@jigjoy-ai/mosaic'
40
+ import "dotenv/config"
41
+ import { Agent, Command } from "@mozaik-ai/core"
42
42
 
43
43
  const command: Command = {
44
- model: 'claude-sonnet-4.5'
44
+ model: "claude-sonnet-4.5",
45
45
  }
46
46
 
47
47
  const agent = new Agent(command)
48
- const codingResponse = await agent.act('Write a React component for a todo list')
48
+ const codingResponse = await agent.act("Write a React component for a todo list")
49
49
  ```
50
50
 
51
51
  ### Structured Output
@@ -53,25 +53,27 @@ const codingResponse = await agent.act('Write a React component for a todo list'
53
53
  Structured output lets you enforce exact response formats—using schemas like Zod—so AI returns predictable, validated data every time.
54
54
 
55
55
  ```typescript
56
- import { z } from 'zod'
57
- import { Agent, Command } from '@jigjoy-ai/mosaic'
56
+ import { z } from "zod"
57
+ import { Agent, Command } from "@mozaik-ai/core"
58
58
 
59
59
  const mealPlanSchema = z.object({
60
- calories: z.number(),
61
- meals: z.array(
62
- z.object({
63
- name: z.string(),
64
- description: z.string(),
65
- ingredients: z.array(z.string()).min(3)
66
- })
67
- ).length(3),
68
- shoppingList: z.array(z.string())
60
+ calories: z.number(),
61
+ meals: z
62
+ .array(
63
+ z.object({
64
+ name: z.string(),
65
+ description: z.string(),
66
+ ingredients: z.array(z.string()).min(3),
67
+ }),
68
+ )
69
+ .length(3),
70
+ shoppingList: z.array(z.string()),
69
71
  })
70
72
 
71
73
  const command: Command = {
72
- model: 'gpt-5-mini',
73
- task: 'Create a 1-day vegetarian meal plan with breakfast, lunch, and dinner.',
74
- structuredOutput: mealPlanSchema
74
+ model: "gpt-5-mini",
75
+ task: "Create a 1-day vegetarian meal plan with breakfast, lunch, and dinner.",
76
+ structuredOutput: mealPlanSchema,
75
77
  }
76
78
 
77
79
  const agent = new Agent(command)
@@ -83,19 +85,19 @@ const response = await agent.act()
83
85
  Multi-turn conversation allows developers to provide chat history so the AI agent can maintain context and generate more relevant, continuous responses.
84
86
 
85
87
  ```typescript
86
- import { Agent, Command } from '@jigjoy-ai/mosaic'
88
+ import { Agent, Command } from "@mozaik-ai/core"
87
89
 
88
90
  const command: Command = {
89
- messages: [
90
- { role: 'system', content: 'You are a coding assistant' },
91
- { role: 'user', content: 'How do I sort an array in TypeScript?' },
92
- { role: 'assistant', content: 'You can use the .sort() method...' }
93
- ],
94
- model: 'claude-haiku-4.5'
91
+ messages: [
92
+ { role: "system", content: "You are a coding assistant" },
93
+ { role: "user", content: "How do I sort an array in TypeScript?" },
94
+ { role: "assistant", content: "You can use the .sort() method..." },
95
+ ],
96
+ model: "claude-haiku-4.5",
95
97
  }
96
98
 
97
99
  const agent = new Agent(command)
98
- const response = await agent.act('Can you show me an example?')
100
+ const response = await agent.act("Can you show me an example?")
99
101
  ```
100
102
 
101
103
  ### Tool Calling
@@ -103,38 +105,38 @@ const response = await agent.act('Can you show me an example?')
103
105
  Tool calling allows the agent to invoke real functions in your environment—letting it perform actual actions (like writing files, calling APIs, or modifying state) instead of merely generating text.
104
106
 
105
107
  ```typescript
106
- import { promises as fs } from 'fs'
107
- import { Agent, Command, Tool } from '@jigjoy-ai/mosaic'
108
+ import { promises as fs } from "fs"
109
+ import { Agent, Command, Tool } from "@mozaik-ai/core"
108
110
 
109
111
  const tools: Tool[] = [
110
- {
111
- name: 'write_file',
112
- description: 'Write text to a file.',
113
- schema: {
114
- type: 'object',
115
- properties: {
116
- filename: { type: 'string' },
117
- content: { type: 'string' }
118
- },
119
- required: ['filename', 'content']
120
- },
121
- async invoke({ filename, content }) {
122
- await fs.writeFile(filename, content, 'utf8')
123
- return { ok: true }
124
- }
125
- }
112
+ {
113
+ name: "write_file",
114
+ description: "Write text to a file.",
115
+ schema: {
116
+ type: "object",
117
+ properties: {
118
+ filename: { type: "string" },
119
+ content: { type: "string" },
120
+ },
121
+ required: ["filename", "content"],
122
+ },
123
+ async invoke({ filename, content }) {
124
+ await fs.writeFile(filename, content, "utf8")
125
+ return { ok: true }
126
+ },
127
+ },
126
128
  ]
127
129
 
128
130
  const command: Command = {
129
- model: 'gpt-5.1',
130
- tools,
131
- messages: [
132
- {
133
- role: 'system',
134
- content: 'Save notes to disk using the tool, then confirm where the file was written.'
135
- }
136
- ],
137
- task: 'Create a two-bullet trip prep checklist for Belgrade and save it as trip-checklist.txt.'
131
+ model: "gpt-5.1",
132
+ tools,
133
+ messages: [
134
+ {
135
+ role: "system",
136
+ content: "Save notes to disk using the tool, then confirm where the file was written.",
137
+ },
138
+ ],
139
+ task: "Create a two-bullet trip prep checklist for Belgrade and save it as trip-checklist.txt.",
138
140
  }
139
141
 
140
142
  const agent = new Agent(command)
@@ -146,23 +148,25 @@ await agent.act()
146
148
  Vision support allows AI agents to interpret images alongside text, enabling richer understanding and multimodal interactions.
147
149
 
148
150
  ```typescript
149
- import { Agent, Command } from '@jigjoy-ai/mosaic'
151
+ import { Agent, Command } from "@mozaik-ai/core"
150
152
 
151
153
  const command: Command = {
152
- messages: [{
153
- role: 'user',
154
- content: [
155
- {
156
- type: 'image_url',
157
- url: 'data:image/jpeg;base64,/9j/4AAQSkZJRg...'
158
- },
159
- {
160
- type: 'text',
161
- text: 'What is in this image?'
162
- }
163
- ]
164
- }],
165
- model: 'claude-opus-4.5'
154
+ messages: [
155
+ {
156
+ role: "user",
157
+ content: [
158
+ {
159
+ type: "image_url",
160
+ url: "data:image/jpeg;base64,/9j/4AAQSkZJRg...",
161
+ },
162
+ {
163
+ type: "text",
164
+ text: "What is in this image?",
165
+ },
166
+ ],
167
+ },
168
+ ],
169
+ model: "claude-opus-4.5",
166
170
  }
167
171
 
168
172
  const agent = new Agent(command)
@@ -174,27 +178,24 @@ const response = await agent.act()
174
178
  This example demonstrates how to use standard JavaScript/TypeScript concurrency (Promise.all) to run multiple AI agents in parallel and compare or combine their responses.
175
179
 
176
180
  ```typescript
177
- import 'dotenv/config'
178
- import { Agent, Command } from '@jigjoy-ai/mosaic'
181
+ import "dotenv/config"
182
+ import { Agent, Command } from "@mozaik-ai/core"
179
183
 
180
184
  const openaiCommand: Command = {
181
- model: 'gpt-5'
185
+ model: "gpt-5",
182
186
  }
183
187
 
184
188
  const anthropicCommand: Command = {
185
- model: 'claude-sonnet-4.5'
189
+ model: "claude-sonnet-4.5",
186
190
  }
187
191
 
188
192
  const openaiAgent = new Agent(openaiCommand)
189
193
  const anthropicAgent = new Agent(anthropicCommand)
190
194
 
191
- const task = 'What are the key differences between TypeScript and JavaScript?'
195
+ const task = "What are the key differences between TypeScript and JavaScript?"
192
196
 
193
197
  // Execute both agents in parallel using Promise.all()
194
- const [openaiResponse, anthropicResponse] = await Promise.all([
195
- openaiAgent.act(task),
196
- anthropicAgent.act(task)
197
- ])
198
+ const [openaiResponse, anthropicResponse] = await Promise.all([openaiAgent.act(task), anthropicAgent.act(task)])
198
199
  ```
199
200
 
200
201
  ### Workflow
@@ -203,12 +204,12 @@ A workflow defines how tasks are executed together, either sequentially (one aft
203
204
 
204
205
  ```typescript
205
206
  const workflow = new Workflow("sequential", [
206
- new Task("Analyze requirements", "gpt-5"),
207
- new Workflow("parallel", [
208
- new Task("Generate API schema", "gpt-5-mini"),
209
- new Task("Draft documentation", "gpt-5-nano")
210
- ]),
211
- new Task("Review and finalize", "gpt-5")
207
+ new Task("Analyze requirements", "gpt-5"),
208
+ new Workflow("parallel", [
209
+ new Task("Generate API schema", "gpt-5-mini"),
210
+ new Task("Draft documentation", "gpt-5-nano"),
211
+ ]),
212
+ new Task("Review and finalize", "gpt-5"),
212
213
  ])
213
214
 
214
215
  await workflow.execute()
@@ -222,13 +223,10 @@ For example, given the goal `"Implement login functionality"`, the planner can g
222
223
 
223
224
  ```typescript
224
225
  Workflow(sequential, [
225
- Task("Design login form UI", "gpt-5"),
226
- Task("Implement authentication logic", "claude-sonnet-4.5"),
227
- Workflow(parallel, [
228
- Task("Add input validation", "gpt-5-mini"),
229
- Task("Style the login form", "gpt-5-nano")
230
- ]),
231
- Task("Write unit tests", "gpt-5")
226
+ Task("Design login form UI", "gpt-5"),
227
+ Task("Implement authentication logic", "claude-sonnet-4.5"),
228
+ Workflow(parallel, [Task("Add input validation", "gpt-5-mini"), Task("Style the login form", "gpt-5-nano")]),
229
+ Task("Write unit tests", "gpt-5"),
232
230
  ])
233
231
  ```
234
232
 
@@ -257,10 +255,7 @@ import { ClusterHook } from "@core/workflow/hooks/cluster"
257
255
  import { DEFAULT_CLUSTER_HOOK } from "@core/workflow/hooks"
258
256
  import { MetricsHook } from "./metrics-hook"
259
257
 
260
- const extendedHook = new ClusterHook([
261
- DEFAULT_CLUSTER_HOOK,
262
- new MetricsHook()
263
- ])
258
+ const extendedHook = new ClusterHook([DEFAULT_CLUSTER_HOOK, new MetricsHook()])
264
259
 
265
260
  await workflow.execute(extendedHook)
266
261
  ```
package/dist/index.js CHANGED
@@ -438,6 +438,12 @@ var ResponseContext = class {
438
438
  this.response = response;
439
439
  return this;
440
440
  }
441
+ getResponse() {
442
+ return this.response;
443
+ }
444
+ getUsageEntries() {
445
+ return this.usageEntries;
446
+ }
441
447
  };
442
448
 
443
449
  // src/providers/openai/response-handler/usage.ts
@@ -477,7 +483,16 @@ var OpenAIResponses = class extends Endpoint {
477
483
  const contentHandler = new ContentHandler();
478
484
  usageHandler.setNextHandler(functionCallsHandler).setNextHandler(outputParsedHandler).setNextHandler(outputTextHandler).setNextHandler(contentHandler);
479
485
  const responseHandler = usageHandler;
480
- return await responseHandler.handle(responseContext);
486
+ const result = await responseHandler.handle(responseContext);
487
+ const usageEntries = result.getUsageEntries().map((e) => ({
488
+ inputTokens: e.inputTokens,
489
+ outputTokens: e.outputTokens,
490
+ model: e.model
491
+ }));
492
+ return {
493
+ data: result.getResponse(),
494
+ usageEntries
495
+ };
481
496
  } catch (error) {
482
497
  console.warn("[OpenAIProvider] Responses API request failed:", error);
483
498
  throw error;
@@ -802,7 +817,16 @@ var AnthropicEndpoint = class extends Endpoint {
802
817
  const unhandledResponseHandler = new UnhandledResponseHandler();
803
818
  usageHandler.setNextHandler(toolUseHandler).setNextHandler(parsedOutputHandler).setNextHandler(contentHandler).setNextHandler(unhandledResponseHandler);
804
819
  const responseHandler = usageHandler;
805
- return await responseHandler.handle(responseContext);
820
+ const result = await responseHandler.handle(responseContext);
821
+ const usageEntries = result.getUsageEntries().map((e) => ({
822
+ inputTokens: e.inputTokens,
823
+ outputTokens: e.outputTokens,
824
+ model: e.model
825
+ }));
826
+ return {
827
+ data: result.getResponse(),
828
+ usageEntries
829
+ };
806
830
  }
807
831
  };
808
832
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/workflow/work-unit.ts","../src/core/endpoint/request-gateway.ts","../src/core/endpoint/endpoint-resolver.ts","../src/types/model.ts","../src/core/command-handler/capability.ts","../src/core/command-handler/messages.ts","../src/core/command-handler/task.ts","../src/core/command-handler/model.ts","../src/core/command-handler/structured-output.ts","../src/core/command-handler/tools.ts","../src/core/endpoint/endpoint.ts","../src/core/endpoint/request-builder.ts","../src/providers/openai/mapper.ts","../src/providers/openai/builder.ts","../src/providers/openai/client/default.ts","../src/providers/openai/client/parser.ts","../src/providers/openai/client/resolver.ts","../src/core/endpoint/response-handler.ts","../src/providers/openai/response-handler/output-parsed.ts","../src/providers/openai/response-handler/content.ts","../src/providers/openai/response-handler/output-text.ts","../src/core/endpoint/usage.ts","../src/providers/openai/response-handler/function-calls.ts","../src/core/endpoint/response-context.ts","../src/providers/openai/response-handler/usage.ts","../src/providers/openai/endpoint.ts","../src/providers/anthropic/mapper.ts","../src/providers/anthropic/builder.ts","../src/providers/anthropic/client/default.ts","../src/providers/anthropic/client/parser.ts","../src/providers/anthropic/client/resolver.ts","../src/providers/anthropic/response-handler/parsed-output.ts","../src/providers/anthropic/response-handler/content.ts","../src/providers/anthropic/response-handler/tool-use.ts","../src/providers/anthropic/response-handler/usage.ts","../src/providers/anthropic/response-handler/undhandled.ts","../src/providers/anthropic/endpoint.ts","../src/providers/endpoint-resolver.ts","../src/core/agents/agent.ts","../src/core/workflow/schema/plan.ts","../src/core/workflow/execution/parallel.ts","../src/core/workflow/execution/sequential.ts","../src/core/workflow/execution/strategy-factory.ts","../src/core/workflow/hooks/cluster.ts","../src/core/workflow/hooks/logger.ts","../src/core/workflow/hooks/index.ts","../src/core/workflow/workflow.ts","../src/core/workflow/task.ts","../src/core/workflow/mapper.ts","../src/core/agents/planner.ts"],"sourcesContent":["import { WorkUnit } from \"@core/workflow/work-unit\"\nimport { PlanningAgent } from \"@/core/agents/planner\"\nimport { Task } from \"@core/workflow/task\"\nimport { Workflow } from \"@core/workflow/workflow\"\nimport { Agent } from \"@core/agents/agent\"\nimport { Message } from \"@/types/message\"\nimport { Model } from \"@/types/model\"\nimport { Tool } from \"@/types/tool\"\nimport { Command } from \"@/types/command\"\n\nexport { Model, Message, Tool, Workflow, Task, WorkUnit, PlanningAgent, Agent, Command }\n","import { ExecutionHook } from \"./hooks/execution-hook\"\n\nexport abstract class WorkUnit {\n\tconstructor() {}\n\n\tabstract execute(hook: ExecutionHook): Promise<any>\n}\n","import { Command } from \"@/types/command\"\nimport { Endpoint } from \"./endpoint\"\nimport { EndpointResolver } from \"./endpoint-resolver\"\n\nexport class RequestGateway {\n\tendpoint!: Endpoint\n\n\tconstructor(readonly endpointResolver: EndpointResolver) {}\n\n\tasync invoke(command: Command): Promise<any> {\n\t\tthis.endpoint = this.endpointResolver.resolve(command.model)\n\t\treturn await this.endpoint.sendRequest(command)\n\t}\n}\n","import { Endpoint } from \"./endpoint\"\n\nexport abstract class EndpointResolver {\n\tabstract resolve(model: string): Endpoint\n}\n","export const OPENAI_MODELS = [\"gpt-5\", \"gpt-5-mini\", \"gpt-5-nano\", \"gpt-5.1\"] as const\n\nexport type OpenAIModel = (typeof OPENAI_MODELS)[number]\n\nconst latest_sonnet = \"claude-sonnet-4-5-20250929\"\nconst latest_haiku = \"claude-haiku-4-5-20251001\"\nconst latest_opus = \"claude-opus-4-5-20251101\"\n\nexport const ANTHROPIC_MODELS = [\"claude-sonnet-4.5\", \"claude-haiku-4.5\", \"claude-opus-4.5\"] as const\n\nexport const ANTHROPIC_MODEL_MAP = {\n\t\"claude-sonnet-4.5\": latest_sonnet,\n\t\"claude-haiku-4.5\": latest_haiku,\n\t\"claude-opus-4.5\": latest_opus,\n} as const\n\nexport type AnthropicModel = (typeof ANTHROPIC_MODELS)[number]\n\nexport type Model = OpenAIModel | AnthropicModel\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\n\nexport abstract class CapabilityHandler {\n\tabstract nextHandler: CapabilityHandler\n\n\tsetNextHandler(capability: CapabilityHandler): CapabilityHandler {\n\t\tthis.nextHandler = capability\n\t\treturn this.nextHandler\n\t}\n\n\tabstract apply(command: Command, requestBuilder: RequestBuilder): any\n\n\thandle(command: Command, builder: RequestBuilder) {\n\t\tthis.apply(command, builder)\n\n\t\tif (this.nextHandler) {\n\t\t\tthis.nextHandler.handle(command, builder)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class MessagesHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.messages) {\n\t\t\tbuilder.addMessages(command.messages)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class TaskHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.task) {\n\t\t\tbuilder.addTask(command.task)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class ModelHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.model) {\n\t\t\tbuilder.addModel(command.model)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { CapabilityHandler } from \"./capability\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\n\nexport class StructuredOutputlHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.structuredOutput) {\n\t\t\tbuilder.addStructuredOutput(command.structuredOutput)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\n\nexport class ToolsHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, requestBuilder: RequestBuilder) {\n\t\tif (command.tools && command.tools.length > 0) {\n\t\t\trequestBuilder.addTools(command.tools)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"./request-builder\"\nimport { CapabilityHandler } from \"../command-handler/capability\"\nimport { MessagesHandler } from \"../command-handler/messages\"\nimport { TaskHandler } from \"../command-handler/task\"\nimport { ModelHandler } from \"../command-handler/model\"\nimport { StructuredOutputlHandler } from \"../command-handler/structured-output\"\nimport { Command } from \"@/types/command\"\nimport { ToolsHandler } from \"../command-handler/tools\"\n\nexport abstract class Endpoint {\n\tabstract requestBuilder: RequestBuilder\n\tcommand: Command | null = null\n\n\tbuildRequest(command: Command): any {\n\t\tthis.command = command\n\n\t\tthis.requestBuilder.initialize()\n\n\t\tconst messagesHandler: CapabilityHandler = new MessagesHandler()\n\t\tconst taskHandler: CapabilityHandler = new TaskHandler()\n\t\tconst modelHandler: CapabilityHandler = new ModelHandler()\n\t\tconst structuredOutputHandler: CapabilityHandler = new StructuredOutputlHandler()\n\t\tconst toolsHandler: CapabilityHandler = new ToolsHandler()\n\n\t\tmessagesHandler\n\t\t\t.setNextHandler(taskHandler)\n\t\t\t.setNextHandler(modelHandler)\n\t\t\t.setNextHandler(structuredOutputHandler)\n\t\t\t.setNextHandler(toolsHandler)\n\n\t\tmessagesHandler.handle(command, this.requestBuilder)\n\n\t\treturn this.requestBuilder.build()\n\t}\n\n\tabstract sendRequest(providerRequest: any): any\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\nimport { ZodObject } from \"zod\"\n\nexport abstract class RequestBuilder {\n\trequest: any\n\n\tinitialize() {\n\t\tthis.request = {}\n\t}\n\n\tabstract addModel(model: string): RequestBuilder\n\tabstract addTask(task: string): RequestBuilder\n\tabstract addMessages(messages: Message[]): RequestBuilder\n\tabstract addStructuredOutput(schema: ZodObject<any>): RequestBuilder\n\tabstract addTools(tools: Tool[]): RequestBuilder\n\n\tbuild() {\n\t\treturn this.request\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\n\nexport interface ToolDefinition {\n\ttype: \"function\"\n\tname: string\n\tdescription: string\n\tparameters: any\n\tstrict?: boolean\n}\n\nexport class OpenAIResponsesMapper {\n\t/**\n\t * Convert domain Messages to Responses API instructions format\n\t *\n\t * The Responses API uses 'instructions' (system prompt) rather than messages array.\n\t * For multi-turn conversations, use conversation.id or previous_response_id parameters.\n\t */\n\ttoInstructions(messages: Message[]): string {\n\t\tif (messages.length === 0) {\n\t\t\tthrow new Error(\"[ResponsesMapper] Cannot create instructions from empty messages\")\n\t\t}\n\n\t\t// Find system message if exists, otherwise use first user message as context\n\t\tconst systemMessage = messages.find((m) => m.role === \"system\")\n\n\t\tif (systemMessage) {\n\t\t\treturn typeof systemMessage.content === \"string\"\n\t\t\t\t? systemMessage.content\n\t\t\t\t: this.extractTextFromContent(systemMessage.content)\n\t\t}\n\n\t\t// Fallback: create instructions from context\n\t\treturn \"You are a helpful assistant.\"\n\t}\n\n\t/**\n\t * Extract the user's input from messages\n\t * Returns the last user message content for use in prompt variables.\n\t * In Responses API, the actual user query is typically passed via prompt variables\n\t * or handled through conversation continuation.\n\t */\n\textractUserInput(messages: Message[]): string {\n\t\tconst userMessages = messages.filter((m) => m.role === \"user\")\n\n\t\tif (userMessages.length === 0) {\n\t\t\treturn \"\"\n\t\t}\n\n\t\tconst lastUserMessage = userMessages[userMessages.length - 1]\n\t\treturn typeof lastUserMessage.content === \"string\"\n\t\t\t? lastUserMessage.content\n\t\t\t: this.extractTextFromContent(lastUserMessage.content)\n\t}\n\n\tprivate extractTextFromContent(content: any[]): string {\n\t\treturn content\n\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t.map((part) => part.text)\n\t\t\t.join(\" \")\n\t}\n\n\t/**\n\t * Map tools to Responses API format\n\t */\n\ttoTools(tools: Tool[]): ToolDefinition[] {\n\t\treturn tools.map((t) => ({\n\t\t\ttype: \"function\",\n\t\t\tname: t.name,\n\t\t\tdescription: t.description,\n\t\t\tparameters: t.schema,\n\t\t\tstrict: true, // Enable strict mode by default for better validation\n\t\t}))\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesMapper } from \"./mapper\"\nimport { zodTextFormat } from \"openai/helpers/zod\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class OpenAIResponsesBuilder extends RequestBuilder {\n\tconstructor(private mapper = new OpenAIResponsesMapper()) {\n\t\tsuper()\n\t}\n\n\taddModel(model: string): RequestBuilder {\n\t\tthis.request.model = model\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\tthis.request.input = task\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst instructions = this.mapper.toInstructions(messages)\n\t\t// Set optional instructions if there's a system message\n\t\tif (instructions && instructions !== \"You are a helpful assistant.\") {\n\t\t\tthis.request.instructions = instructions\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.text = {\n\t\t\tformat: zodTextFormat(schema, \"outputSchema\"),\n\t\t}\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\ttype: \"function\" as const,\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIDefaultClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.create(request)\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIParserClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { OpenAIDefaultClient } from \"./default\"\nimport { OpenAIParserClient } from \"./parser\"\n\nexport class OpenAIClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\tif (request.text && request.text.format) {\n\t\t\treturn new OpenAIParserClient()\n\t\t} else {\n\t\t\treturn new OpenAIDefaultClient()\n\t\t}\n\t}\n}\n","import { ResponseContext } from \"./response-context\"\n\nexport abstract class ResponseHandler {\n\tabstract nextHandler: ResponseHandler\n\n\tsetNextHandler(responseHandler: ResponseHandler): ResponseHandler {\n\t\tthis.nextHandler = responseHandler\n\t\treturn this.nextHandler\n\t}\n\n\tabstract handle(responseContext: ResponseContext): Promise<ResponseContext>\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputParsedHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_parsed) {\n\t\t\tresponseContext.setResponse(providerResponse.output_parsed)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst firstOutput = providerResponse.output?.[0]\n\t\tif (firstOutput && \"content\" in firstOutput) {\n\t\t\tconst firstContent = firstOutput.content?.[0]\n\t\t\tif (firstContent && \"text\" in firstContent) {\n\t\t\t\tresponseContext.setResponse(firstContent.text)\n\t\t\t\treturn responseContext\n\t\t\t}\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputTextHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_text) {\n\t\t\tresponseContext.setResponse(providerResponse.output_text)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","export class UsageEntry {\n\tinputTokens: number\n\toutputTokens: number\n\tmodel: string\n\ttotalTokens: number\n\n\tconstructor(inputTokens: number, outputTokens: number, model: string) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.model = model\n\t\tthis.totalTokens = inputTokens + outputTokens\n\t}\n}\n","import { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OpenAIDefaultClient } from \"../client/default\"\nimport { Tool } from \"@/types/tool\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport interface ToolCall {\n\tcall_id: string\n\tname: string\n\targuments: string | Record<string, any>\n}\n\nexport interface ToolResult {\n\ttype: \"function_call_output\"\n\tcall_id: string\n\toutput: string\n}\n\nexport class FunctionCallsHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: OpenAIDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.request = request\n\t\tthis.tools = tools\n\t\tthis.client = new OpenAIDefaultClient()\n\t}\n\n\tprivate hasToolCalls(response: any): boolean {\n\t\treturn response.output?.some((item: any) => item.type === \"function_call\")\n\t}\n\n\tprivate extractToolCalls(response: any): any[] {\n\t\treturn response.output?.filter((item: any) => item.type === \"function_call\") || []\n\t}\n\n\tprivate resolveTool(call: ToolCall, tools: Tool[]): Tool | null {\n\t\treturn tools.find((t) => t.name === call.name) ?? null\n\t}\n\n\tprivate async executeTool(tool: Tool, rawArgs: ToolCall[\"arguments\"]): Promise<any> {\n\t\tconst args = typeof rawArgs === \"string\" ? JSON.parse(rawArgs) : rawArgs\n\n\t\treturn await tool.invoke(args)\n\t}\n\n\tprivate formatToolResult(callId: string, payload: any): ToolResult {\n\t\treturn {\n\t\t\ttype: \"function_call_output\",\n\t\t\tcall_id: callId,\n\t\t\toutput: JSON.stringify(payload),\n\t\t}\n\t}\n\n\tprivate async executeToolCalls(toolCalls: ToolCall[], tools: Tool[]): Promise<ToolResult[]> {\n\t\tconst results: ToolResult[] = []\n\n\t\tfor (const call of toolCalls) {\n\t\t\tconst tool = this.resolveTool(call, tools)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: `Unknown tool: ${call.name}`,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await this.executeTool(tool, call.arguments)\n\t\t\t\tresults.push(this.formatToolResult(call.call_id, result))\n\t\t\t} catch (err: any) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: err.message ?? \"Tool execution failed\",\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tlet providerResponse = responseContext.providerResponse\n\t\tlet toolCallingResponse: any\n\t\twhile (this.hasToolCalls(providerResponse)) {\n\t\t\tconst toolCalls = this.extractToolCalls(providerResponse)\n\n\t\t\tconst toolResults = await this.executeToolCalls(toolCalls, this.tools)\n\n\t\t\t// Continue the conversation with tool results\n\t\t\tthis.request.input = toolResults\n\t\t\tthis.request.previous_response_id = providerResponse.id\n\n\t\t\ttoolCallingResponse = await this.client.send(this.request)\n\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tresponseContext.setResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { UsageEntry } from \"./usage\"\n\nexport class ResponseContext {\n\tproviderResponse: any\n\tresponse?: any\n\tusageEntries: UsageEntry[] = []\n\n\tsetProviderResponse(providerResponse: any): ResponseContext {\n\t\tthis.providerResponse = providerResponse\n\t\treturn this\n\t}\n\n\taddUsageEntry(usageEntry: UsageEntry): ResponseContext {\n\t\tthis.usageEntries.push(usageEntry)\n\t\treturn this\n\t}\n\n\tsetResponse(response: any): ResponseContext {\n\t\tthis.response = response\n\t\treturn this\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesBuilder } from \"./builder\"\nimport { OpenAIClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OutputParsedHandler } from \"./response-handler/output-parsed\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { OutputTextHandler } from \"./response-handler/output-text\"\nimport { FunctionCallsHandler } from \"./response-handler/function-calls\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\n\nexport class OpenAIResponses extends Endpoint {\n\trequestBuilder: RequestBuilder = new OpenAIResponsesBuilder()\n\n\tconstructor() {\n\t\tsuper()\n\t}\n\n\tasync sendRequest(command: Command) {\n\t\ttry {\n\t\t\tconst request = this.buildRequest(command)\n\t\t\tconst client = OpenAIClientResolver.resolve(request)\n\t\t\tconst response = await client.send(request)\n\n\t\t\tconst responseContext = new ResponseContext()\n\t\t\tresponseContext.setProviderResponse(response)\n\n\t\t\t// response handler (chain of responsibilities)\n\t\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\t\tconst functionCallsHandler: ResponseHandler = new FunctionCallsHandler(\n\t\t\t\trequest,\n\t\t\t\tcommand.tools ? command.tools : [],\n\t\t\t)\n\t\t\tconst outputParsedHandler: ResponseHandler = new OutputParsedHandler()\n\t\t\tconst outputTextHandler: ResponseHandler = new OutputTextHandler()\n\t\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\n\t\t\tusageHandler\n\t\t\t\t.setNextHandler(functionCallsHandler)\n\t\t\t\t.setNextHandler(outputParsedHandler)\n\t\t\t\t.setNextHandler(outputTextHandler)\n\t\t\t\t.setNextHandler(contentHandler)\n\n\t\t\tconst responseHandler = usageHandler\n\n\t\t\treturn await responseHandler.handle(responseContext)\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[OpenAIProvider] Responses API request failed:\", error)\n\t\t\tthrow error\n\t\t}\n\t}\n}\n","import { Message, TextPart, ImagePart } from \"@/types/message\"\nimport type { MessageParam, TextBlockParam, ImageBlockParam } from \"@anthropic-ai/sdk/resources/messages\"\n\nexport class AnthropicMapper {\n\t/**\n\t * Transforms domain messages to Anthropic API format.\n\t * Separates system messages from conversation messages.\n\t */\n\ttoMessages(messages: Message[]): { messages: MessageParam[]; system?: string } {\n\t\tconst anthropicMessages: MessageParam[] = []\n\t\tlet systemPrompt: string | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// Extract system messages separately (Anthropic uses dedicated system parameter)\n\t\t\tif (msg.role === \"system\") {\n\t\t\t\tconst content =\n\t\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: (msg.content as TextPart[]).map((p) => p.text).join(\"\\n\")\n\n\t\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${content}` : content\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Skip tool role messages (not directly supported in basic implementation)\n\t\t\tif (msg.role === \"tool\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Map user and assistant messages\n\t\t\tif (msg.role === \"user\" || msg.role === \"assistant\") {\n\t\t\t\tif (typeof msg.content === \"string\") {\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: msg.content,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// Handle multimodal content (text + images)\n\t\t\t\t\tconst contentBlocks = (msg.content as Array<TextPart | ImagePart>).map((part) => {\n\t\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\ttext: part.text,\n\t\t\t\t\t\t\t} as TextBlockParam\n\t\t\t\t\t\t} else if (part.type === \"image_url\") {\n\t\t\t\t\t\t\t// Note: Anthropic requires base64-encoded images\n\t\t\t\t\t\t\t// This is a simplified version - production code should handle URL->base64 conversion\n\t\t\t\t\t\t\tconst imageUrl = part.url\n\n\t\t\t\t\t\t\t// Check if it's already base64 data\n\t\t\t\t\t\t\tif (imageUrl.startsWith(\"data:image\")) {\n\t\t\t\t\t\t\t\tconst matches = imageUrl.match(/data:image\\/(\\w+);base64,(.+)/)\n\t\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\t\tconst [, mediaType, data] = matches\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\ttype: \"image\" as const,\n\t\t\t\t\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"base64\" as const,\n\t\t\t\t\t\t\t\t\t\t\tmedia_type: `image/${mediaType}` as\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/jpeg\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/png\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/gif\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/webp\",\n\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} as ImageBlockParam\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// For non-base64 URLs, throw error (or you could fetch and convert)\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"[AnthropicMapper] Image URLs must be base64-encoded. \" +\n\t\t\t\t\t\t\t\t\t\"Convert to data:image/[type];base64,[data] format.\",\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { type: \"text\" as const, text: \"\" } as TextBlockParam\n\t\t\t\t\t})\n\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: contentBlocks,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Anthropic requires alternating user/assistant roles\n\t\t// Validate and fix if needed\n\t\tconst validated = this.ensureAlternatingRoles(anthropicMessages)\n\n\t\treturn {\n\t\t\tmessages: validated,\n\t\t\tsystem: systemPrompt,\n\t\t}\n\t}\n\n\t/**\n\t * Ensures messages alternate between user and assistant roles.\n\t * Anthropic API requires this constraint.\n\t */\n\tprivate ensureAlternatingRoles(messages: MessageParam[]): MessageParam[] {\n\t\tif (messages.length === 0) return messages\n\n\t\tconst result: MessageParam[] = []\n\t\tlet lastRole: \"user\" | \"assistant\" | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// If same role appears consecutively, merge the messages\n\t\t\tif (lastRole === msg.role && result.length > 0) {\n\t\t\t\tconst lastMsg = result[result.length - 1]\n\n\t\t\t\t// Merge content\n\t\t\t\tif (typeof lastMsg.content === \"string\" && typeof msg.content === \"string\") {\n\t\t\t\t\tlastMsg.content = `${lastMsg.content}\\n${msg.content}`\n\t\t\t\t} else {\n\t\t\t\t\t// For array content, concatenate\n\t\t\t\t\tconst lastContent = Array.isArray(lastMsg.content)\n\t\t\t\t\t\t? lastMsg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: lastMsg.content as string }]\n\t\t\t\t\tconst newContent = Array.isArray(msg.content)\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: msg.content as string }]\n\t\t\t\t\tlastMsg.content = [...lastContent, ...newContent]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult.push(msg)\n\t\t\t\tlastRole = msg.role\n\t\t\t}\n\t\t}\n\n\t\t// Ensure first message is from user (Anthropic requirement)\n\t\tif (result.length > 0 && result[0].role !== \"user\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"[AnthropicMapper] First message must be from user. Anthropic API requires conversations to start with a user message.\",\n\t\t\t)\n\t\t}\n\n\t\treturn result\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicMapper } from \"./mapper\"\nimport { betaZodOutputFormat } from \"@anthropic-ai/sdk/helpers/beta/zod\"\nimport { ANTHROPIC_MODEL_MAP, AnthropicModel } from \"@/types/model\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class AnthropicRequestBuilder extends RequestBuilder {\n\tprivate mapper = new AnthropicMapper()\n\n\taddModel(model: AnthropicModel): RequestBuilder {\n\t\tthis.request.model = ANTHROPIC_MODEL_MAP[model]\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\t// Add task as a user message\n\t\tconst message = {\n\t\t\trole: \"user\" as const,\n\t\t\tcontent: task,\n\t\t}\n\n\t\tif (!this.request.messages) {\n\t\t\tthis.request.messages = []\n\t\t}\n\n\t\tthis.request.messages.push(message)\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst { messages: anthropicMessages, system } = this.mapper.toMessages(messages)\n\n\t\tthis.request.messages = anthropicMessages\n\n\t\tif (system) {\n\t\t\tthis.request.system = system\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.betas = [\"structured-outputs-2025-11-13\"]\n\t\tthis.request.output_format = betaZodOutputFormat(schema)\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tinput_schema: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n\n\tbuild() {\n\t\t// Anthropic requires max_tokens parameter\n\t\tif (!this.request.max_tokens) {\n\t\t\tthis.request.max_tokens = 1024\n\t\t}\n\n\t\treturn this.request\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicDefaultClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.messages.create(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicParserClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.beta.messages.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { AnthropicDefaultClient } from \"./default\"\nimport { AnthropicParserClient } from \"./parser\"\n\nexport class AnthropicClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\treturn request.output_format ? new AnthropicParserClient() : new AnthropicDefaultClient()\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ParsedOutputHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.parsed_output) {\n\t\t\tresponseContext.setResponse(providerResponse.parsed_output)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst content = providerResponse.content\n\t\t\t.filter((block: any) => block.type === \"text\")\n\t\t\t.map((block: any) => (block.type === \"text\" ? block.text : \"\"))\n\t\t\t.join(\"\")\n\n\t\tif (content) {\n\t\t\tresponseContext.setResponse(content)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Tool } from \"@/types/tool\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { AnthropicDefaultClient } from \"../client/default\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class ToolUseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: AnthropicDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.tools = tools\n\t\tthis.request = request\n\t\tthis.client = new AnthropicDefaultClient()\n\t}\n\n\tprivate async executeToolCalls(tools: Tool[], toolUseBlocks: Anthropic.ToolUseBlock[]): Promise<any[]> {\n\t\tconst results: any[] = []\n\n\t\tfor (const toolUse of toolUseBlocks) {\n\t\t\tconst tool = tools?.find((t) => t.name === toolUse.name)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: `Unknown tool: ${toolUse.name}` }),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await tool.invoke(toolUse.input)\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify(result),\n\t\t\t\t})\n\t\t\t} catch (error: any) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: error.message }),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tlet providerResponse = responseContext.providerResponse\n\n\t\twhile (providerResponse.stop_reason === \"tool_use\") {\n\t\t\tconst toolUseBlocks = providerResponse.content.filter(\n\t\t\t\t(block: any): block is Anthropic.ToolUseBlock => block.type === \"tool_use\",\n\t\t\t)\n\n\t\t\t// Add assistant's response to messages\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: providerResponse.content,\n\t\t\t})\n\n\t\t\tconst toolResults = await this.executeToolCalls(this.tools, toolUseBlocks)\n\n\t\t\t// Add tool results as user message\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: toolResults,\n\t\t\t})\n\n\t\t\t// Call model again\n\t\t\tconst toolCallingResponse = await this.client.send(this.request)\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class UnhandledResponseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst id = providerResponse?.id ?? \"unknown\"\n\t\tconst model = providerResponse?.model ?? \"unknown\"\n\n\t\tthrow new Error(`No response handler matched. response_id=${id} model=${model}`)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicRequestBuilder } from \"./builder\"\nimport { AnthropicClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { ParsedOutputHandler } from \"./response-handler/parsed-output\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { ToolUseHandler } from \"./response-handler/tool-use\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\nimport { UnhandledResponseHandler } from \"./response-handler/undhandled\"\n\nexport class AnthropicEndpoint extends Endpoint {\n\trequestBuilder: RequestBuilder = new AnthropicRequestBuilder()\n\n\tasync sendRequest(command: Command) {\n\t\tconst request = this.buildRequest(command)\n\t\tconst client = AnthropicClientResolver.resolve(request)\n\t\tconst response = await client.send(request)\n\n\t\tconst responseContext = new ResponseContext()\n\t\tresponseContext.setProviderResponse(response)\n\n\t\t// response handler (chain of responsibilities)\n\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\tconst toolUseHandler: ResponseHandler = new ToolUseHandler(request, command.tools ? command.tools : [])\n\t\tconst parsedOutputHandler: ResponseHandler = new ParsedOutputHandler()\n\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\t\tconst unhandledResponseHandler: ResponseHandler = new UnhandledResponseHandler()\n\n\t\tusageHandler\n\t\t\t.setNextHandler(toolUseHandler)\n\t\t\t.setNextHandler(parsedOutputHandler)\n\t\t\t.setNextHandler(contentHandler)\n\t\t\t.setNextHandler(unhandledResponseHandler)\n\n\t\tconst responseHandler = usageHandler\n\n\t\treturn await responseHandler.handle(responseContext)\n\t}\n}\n","import { EndpointResolver } from \"@core/endpoint/endpoint-resolver\"\nimport { Endpoint } from \"@core/endpoint/endpoint\"\nimport { OPENAI_MODELS, ANTHROPIC_MODELS } from \"@/types/model\"\nimport { OpenAIResponses } from \"./openai/endpoint\"\nimport { AnthropicEndpoint } from \"./anthropic/endpoint\"\n\nexport class DefaultEndpointResolver extends EndpointResolver {\n\tisOpenAIModel(value: string): boolean {\n\t\treturn (OPENAI_MODELS as readonly string[]).includes(value)\n\t}\n\n\tisAnthropicModel(value: string): boolean {\n\t\treturn (ANTHROPIC_MODELS as readonly string[]).includes(value)\n\t}\n\n\tresolve(model: string): Endpoint {\n\t\tif (this.isOpenAIModel(model)) {\n\t\t\treturn new OpenAIResponses()\n\t\t} else if (this.isAnthropicModel(model)) {\n\t\t\treturn new AnthropicEndpoint()\n\t\t}\n\n\t\tthrow new Error(\"Provider not found\")\n\t}\n}\n","import { RequestGateway } from \"@core/endpoint/request-gateway\"\nimport { Command } from \"@/types/command\"\nimport { DefaultEndpointResolver } from \"@providers/endpoint-resolver\"\nimport { ZodObject } from \"zod\"\nimport { Model } from \"@/types/model\"\nimport { Message } from \"@/types/message\"\n\nexport class Agent {\n\tprivate command: Command\n\tgateway: RequestGateway = new RequestGateway(new DefaultEndpointResolver())\n\n\tconstructor(command: Command) {\n\t\tthis.command = command\n\t}\n\n\tsetModel(model: Model) {\n\t\tthis.command.model = model\n\t}\n\n\tsetMessages(messages: Message[]) {\n\t\tthis.command.messages = messages\n\t}\n\n\tsetTask(task: string) {\n\t\tthis.command.task = task\n\t}\n\n\tsetStructuredOutput(schema: ZodObject<any>) {\n\t\tthis.command.structuredOutput = schema\n\t}\n\n\tasync act(task?: string) {\n\t\tif (task) {\n\t\t\tthis.command.task = task\n\t\t}\n\t\treturn await this.gateway.invoke(this.command)\n\t}\n}\n","import z from \"zod\"\nimport { ANTHROPIC_MODELS, OPENAI_MODELS } from \"@/types/model\"\nimport { PlanNode } from \"@/types/plan\"\n\nconst ModelSchema = z.enum([...OPENAI_MODELS, ...ANTHROPIC_MODELS])\n\nconst TaskPlanNodeSchema = z.object({\n\tkind: z.literal(\"task\"),\n\ttask: z.string(),\n\tmodel: ModelSchema,\n})\n\nconst WorkflowPlanNodeSchema: z.ZodType<Extract<PlanNode, { kind: \"workflow\" }>> = z.lazy(() =>\n\tz.object({\n\t\tkind: z.literal(\"workflow\"),\n\t\tmode: z.enum([\"sequential\", \"parallel\"]),\n\t\tunits: z.array(PlanNodeSchema),\n\t}),\n)\n\nconst PlanNodeSchema: z.ZodType<PlanNode> = TaskPlanNodeSchema.or(WorkflowPlanNodeSchema)\n\nexport const PlanSchema = z.object({\n\troot: PlanNodeSchema,\n})\n","import { Workflow } from \"@core/workflow/workflow\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"../hooks/execution-hook\"\n\nexport class ParallelExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst promises = []\n\t\tfor (const u of workflow.units) {\n\t\t\tpromises.push(u.execute(hook))\n\t\t}\n\n\t\tconst results = await Promise.all(promises)\n\n\t\treturn results\n\t}\n}\n","import { ExecutionHook } from \"../hooks/execution-hook\"\nimport { Workflow } from \"../workflow\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class SequentalExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst results = []\n\t\tfor (const u of workflow.units) {\n\t\t\tresults.push(await u.execute(hook))\n\t\t}\n\n\t\treturn results\n\t}\n}\n","import { ParallelExecution } from \"./parallel\"\nimport { SequentalExecution } from \"./sequential\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class ExecutionStrategyFactory {\n\tstatic create(mode: string): WorkflowExecutionStrategy {\n\t\tlet strategy: WorkflowExecutionStrategy\n\t\tif (mode == \"parallel\") {\n\t\t\tstrategy = new ParallelExecution()\n\t\t} else {\n\t\t\tstrategy = new SequentalExecution()\n\t\t}\n\n\t\treturn strategy\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class ClusterHook implements ExecutionHook {\n\tconstructor(private hooks: ExecutionHook[]) {}\n\n\tbeforeTask(task: Task): void {\n\t\tthis.hooks.forEach((h) => h.beforeTask(task))\n\t}\n\n\tafterTask(task: Task, result: any): void {\n\t\tthis.hooks.forEach((h) => h.afterTask(task, result))\n\t}\n\n\tbeforeWorkflow(wf: Workflow) {\n\t\tthis.hooks.forEach((h) => h.beforeWorkflow(wf))\n\t}\n\n\tafterWorkflow(wf: Workflow, result: any) {\n\t\tthis.hooks.forEach((h) => h.afterWorkflow(wf, result))\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class Logger implements ExecutionHook {\n\tbeforeWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:start], Mode: ${workflow.mode}`)\n\t}\n\n\tafterWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:end], Mode: ${workflow.mode}`)\n\t}\n\n\tbeforeTask(task: Task) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n\n\tafterTask(task: Task, result: any) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n}\n","import { ClusterHook } from \"./cluster\"\nimport { ExecutionHook } from \"./execution-hook\"\nimport { Logger } from \"./logger\"\n\nconst loggingHook: ExecutionHook = new Logger()\n\nconst defaultHooks = [loggingHook]\nconst clusterHook: ExecutionHook = new ClusterHook(defaultHooks)\n\nexport const DEFAULT_CLUSTER_HOOK = clusterHook\n","import { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionStrategyFactory } from \"@core/workflow/execution/strategy-factory\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Workflow extends WorkUnit {\n\tconstructor(\n\t\treadonly mode: \"parallel\" | \"sequential\",\n\t\treadonly units: WorkUnit[],\n\t) {\n\t\tsuper()\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeWorkflow(this)\n\n\t\tconst executionStrategy: WorkflowExecutionStrategy = ExecutionStrategyFactory.create(this.mode)\n\t\tconst result = await executionStrategy.execute(this, hook)\n\n\t\thook.afterWorkflow(this, result)\n\t\treturn result\n\t}\n}\n","import { Model, Command, Agent } from \"@/index\"\nimport { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Task extends WorkUnit {\n\tconstructor(\n\t\tprivate task: string,\n\t\tprivate model: Model,\n\t) {\n\t\tsuper()\n\t}\n\n\tgetTask() {\n\t\treturn this.task\n\t}\n\n\tgetModel() {\n\t\treturn this.model\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeTask(this)\n\n\t\tconst command: Command = {\n\t\t\tmodel: this.model,\n\t\t\ttask: this.task,\n\t\t}\n\n\t\tconst agent = new Agent(command)\n\t\tconst result = await agent.act(this.task)\n\n\t\thook.afterTask(this, result)\n\t\treturn result\n\t}\n}\n","import { Plan, PlanNode } from \"@/types/plan\"\nimport { Workflow } from \"./workflow\"\nimport { WorkUnit } from \"./work-unit\"\nimport { Task } from \"./task\"\n\nexport class PlanWorkflowMapper {\n\tstatic fromPlan(plan: Plan): Workflow {\n\t\treturn this.fromNode(plan.root)\n\t}\n\n\tprivate static fromNode(node: PlanNode): Workflow {\n\t\tif (node.kind !== \"workflow\") {\n\t\t\tthrow new Error(\"Root must be workflow\")\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n\n\tprivate static mapNode(node: PlanNode): WorkUnit {\n\t\tif (node.kind === \"task\") {\n\t\t\treturn new Task(node.task, node.model)\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n}\n","import { Plan } from \"@/types/plan\"\nimport { Workflow } from \"@core/workflow/workflow\"\nimport { Agent } from \"./agent\"\nimport { Command } from \"@/types/command\"\nimport { PlanSchema } from \"@core/workflow/schema/plan\"\nimport { PlanWorkflowMapper } from \"@core/workflow/mapper\"\n\nconst PROMPT = `You are a planner.\n\nRules:\n- Use 'parallel' for the task that can be run in parallel.\n- Pick model based on the task complexity\n- Keep prompts actionable.\n- Don't ask user for any input, just do the thing with available data you have.\n`\n\nexport class PlanningAgent extends Agent {\n\tconstructor(command: Command) {\n\t\tsuper(command)\n\t}\n\n\tasync planFromGoal(goal: string): Promise<Workflow> {\n\t\tthis.setStructuredOutput(PlanSchema)\n\t\tconst plan: Plan = await this.act(`${PROMPT}\\nGoal: ${goal}`)\n\t\treturn PlanWorkflowMapper.fromPlan(plan)\n\t}\n}\n"],"mappings":"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","names":["OpenAI","import_openai","OpenAI","import_zod","Anthropic","import_sdk","Anthropic","ContentHandler","UsageHandler","UsageHandler","ContentHandler","import_zod","z"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/workflow/work-unit.ts","../src/core/endpoint/request-gateway.ts","../src/core/endpoint/endpoint-resolver.ts","../src/types/model.ts","../src/core/command-handler/capability.ts","../src/core/command-handler/messages.ts","../src/core/command-handler/task.ts","../src/core/command-handler/model.ts","../src/core/command-handler/structured-output.ts","../src/core/command-handler/tools.ts","../src/core/endpoint/endpoint.ts","../src/core/endpoint/request-builder.ts","../src/providers/openai/mapper.ts","../src/providers/openai/builder.ts","../src/providers/openai/client/default.ts","../src/providers/openai/client/parser.ts","../src/providers/openai/client/resolver.ts","../src/core/endpoint/response-handler.ts","../src/providers/openai/response-handler/output-parsed.ts","../src/providers/openai/response-handler/content.ts","../src/providers/openai/response-handler/output-text.ts","../src/core/endpoint/usage.ts","../src/providers/openai/response-handler/function-calls.ts","../src/core/endpoint/response-context.ts","../src/providers/openai/response-handler/usage.ts","../src/providers/openai/endpoint.ts","../src/providers/anthropic/mapper.ts","../src/providers/anthropic/builder.ts","../src/providers/anthropic/client/default.ts","../src/providers/anthropic/client/parser.ts","../src/providers/anthropic/client/resolver.ts","../src/providers/anthropic/response-handler/parsed-output.ts","../src/providers/anthropic/response-handler/content.ts","../src/providers/anthropic/response-handler/tool-use.ts","../src/providers/anthropic/response-handler/usage.ts","../src/providers/anthropic/response-handler/undhandled.ts","../src/providers/anthropic/endpoint.ts","../src/providers/endpoint-resolver.ts","../src/core/agents/agent.ts","../src/core/workflow/schema/plan.ts","../src/core/workflow/execution/parallel.ts","../src/core/workflow/execution/sequential.ts","../src/core/workflow/execution/strategy-factory.ts","../src/core/workflow/hooks/cluster.ts","../src/core/workflow/hooks/logger.ts","../src/core/workflow/hooks/index.ts","../src/core/workflow/workflow.ts","../src/core/workflow/task.ts","../src/core/workflow/mapper.ts","../src/core/agents/planner.ts"],"sourcesContent":["import { WorkUnit } from \"@core/workflow/work-unit\"\nimport { PlanningAgent } from \"@/core/agents/planner\"\nimport { Task } from \"@core/workflow/task\"\nimport { Workflow } from \"@core/workflow/workflow\"\nimport { Agent } from \"@core/agents/agent\"\nimport { Message } from \"@/types/message\"\nimport { Model } from \"@/types/model\"\nimport { Tool } from \"@/types/tool\"\nimport { Command } from \"@/types/command\"\n\nexport { Model, Message, Tool, Workflow, Task, WorkUnit, PlanningAgent, Agent, Command }\n","import { ExecutionHook } from \"./hooks/execution-hook\"\n\nexport abstract class WorkUnit {\n\tconstructor() {}\n\n\tabstract execute(hook: ExecutionHook): Promise<any>\n}\n","import { Command } from \"@/types/command\"\nimport { Endpoint } from \"./endpoint\"\nimport { EndpointResolver } from \"./endpoint-resolver\"\n\nexport class RequestGateway {\n\tendpoint!: Endpoint\n\n\tconstructor(readonly endpointResolver: EndpointResolver) {}\n\n\tasync invoke(command: Command): Promise<any> {\n\t\tthis.endpoint = this.endpointResolver.resolve(command.model)\n\t\treturn await this.endpoint.sendRequest(command)\n\t}\n}\n","import { Endpoint } from \"./endpoint\"\n\nexport abstract class EndpointResolver {\n\tabstract resolve(model: string): Endpoint\n}\n","export const OPENAI_MODELS = [\"gpt-5\", \"gpt-5-mini\", \"gpt-5-nano\", \"gpt-5.1\"] as const\n\nexport type OpenAIModel = (typeof OPENAI_MODELS)[number]\n\nconst latest_sonnet = \"claude-sonnet-4-5-20250929\"\nconst latest_haiku = \"claude-haiku-4-5-20251001\"\nconst latest_opus = \"claude-opus-4-5-20251101\"\n\nexport const ANTHROPIC_MODELS = [\"claude-sonnet-4.5\", \"claude-haiku-4.5\", \"claude-opus-4.5\"] as const\n\nexport const ANTHROPIC_MODEL_MAP = {\n\t\"claude-sonnet-4.5\": latest_sonnet,\n\t\"claude-haiku-4.5\": latest_haiku,\n\t\"claude-opus-4.5\": latest_opus,\n} as const\n\nexport type AnthropicModel = (typeof ANTHROPIC_MODELS)[number]\n\nexport type Model = OpenAIModel | AnthropicModel\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\n\nexport abstract class CapabilityHandler {\n\tabstract nextHandler: CapabilityHandler\n\n\tsetNextHandler(capability: CapabilityHandler): CapabilityHandler {\n\t\tthis.nextHandler = capability\n\t\treturn this.nextHandler\n\t}\n\n\tabstract apply(command: Command, requestBuilder: RequestBuilder): any\n\n\thandle(command: Command, builder: RequestBuilder) {\n\t\tthis.apply(command, builder)\n\n\t\tif (this.nextHandler) {\n\t\t\tthis.nextHandler.handle(command, builder)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class MessagesHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.messages) {\n\t\t\tbuilder.addMessages(command.messages)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class TaskHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.task) {\n\t\t\tbuilder.addTask(command.task)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class ModelHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.model) {\n\t\t\tbuilder.addModel(command.model)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { CapabilityHandler } from \"./capability\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\n\nexport class StructuredOutputlHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.structuredOutput) {\n\t\t\tbuilder.addStructuredOutput(command.structuredOutput)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\n\nexport class ToolsHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, requestBuilder: RequestBuilder) {\n\t\tif (command.tools && command.tools.length > 0) {\n\t\t\trequestBuilder.addTools(command.tools)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"./request-builder\"\nimport { CapabilityHandler } from \"../command-handler/capability\"\nimport { MessagesHandler } from \"../command-handler/messages\"\nimport { TaskHandler } from \"../command-handler/task\"\nimport { ModelHandler } from \"../command-handler/model\"\nimport { StructuredOutputlHandler } from \"../command-handler/structured-output\"\nimport { Command } from \"@/types/command\"\nimport { ToolsHandler } from \"../command-handler/tools\"\n\nexport abstract class Endpoint {\n\tabstract requestBuilder: RequestBuilder\n\tcommand: Command | null = null\n\n\tbuildRequest(command: Command): any {\n\t\tthis.command = command\n\n\t\tthis.requestBuilder.initialize()\n\n\t\tconst messagesHandler: CapabilityHandler = new MessagesHandler()\n\t\tconst taskHandler: CapabilityHandler = new TaskHandler()\n\t\tconst modelHandler: CapabilityHandler = new ModelHandler()\n\t\tconst structuredOutputHandler: CapabilityHandler = new StructuredOutputlHandler()\n\t\tconst toolsHandler: CapabilityHandler = new ToolsHandler()\n\n\t\tmessagesHandler\n\t\t\t.setNextHandler(taskHandler)\n\t\t\t.setNextHandler(modelHandler)\n\t\t\t.setNextHandler(structuredOutputHandler)\n\t\t\t.setNextHandler(toolsHandler)\n\n\t\tmessagesHandler.handle(command, this.requestBuilder)\n\n\t\treturn this.requestBuilder.build()\n\t}\n\n\tabstract sendRequest(providerRequest: any): any\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\nimport { ZodObject } from \"zod\"\n\nexport abstract class RequestBuilder {\n\trequest: any\n\n\tinitialize() {\n\t\tthis.request = {}\n\t}\n\n\tabstract addModel(model: string): RequestBuilder\n\tabstract addTask(task: string): RequestBuilder\n\tabstract addMessages(messages: Message[]): RequestBuilder\n\tabstract addStructuredOutput(schema: ZodObject<any>): RequestBuilder\n\tabstract addTools(tools: Tool[]): RequestBuilder\n\n\tbuild() {\n\t\treturn this.request\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\n\nexport interface ToolDefinition {\n\ttype: \"function\"\n\tname: string\n\tdescription: string\n\tparameters: any\n\tstrict?: boolean\n}\n\nexport class OpenAIResponsesMapper {\n\t/**\n\t * Convert domain Messages to Responses API instructions format\n\t *\n\t * The Responses API uses 'instructions' (system prompt) rather than messages array.\n\t * For multi-turn conversations, use conversation.id or previous_response_id parameters.\n\t */\n\ttoInstructions(messages: Message[]): string {\n\t\tif (messages.length === 0) {\n\t\t\tthrow new Error(\"[ResponsesMapper] Cannot create instructions from empty messages\")\n\t\t}\n\n\t\t// Find system message if exists, otherwise use first user message as context\n\t\tconst systemMessage = messages.find((m) => m.role === \"system\")\n\n\t\tif (systemMessage) {\n\t\t\treturn typeof systemMessage.content === \"string\"\n\t\t\t\t? systemMessage.content\n\t\t\t\t: this.extractTextFromContent(systemMessage.content)\n\t\t}\n\n\t\t// Fallback: create instructions from context\n\t\treturn \"You are a helpful assistant.\"\n\t}\n\n\t/**\n\t * Extract the user's input from messages\n\t * Returns the last user message content for use in prompt variables.\n\t * In Responses API, the actual user query is typically passed via prompt variables\n\t * or handled through conversation continuation.\n\t */\n\textractUserInput(messages: Message[]): string {\n\t\tconst userMessages = messages.filter((m) => m.role === \"user\")\n\n\t\tif (userMessages.length === 0) {\n\t\t\treturn \"\"\n\t\t}\n\n\t\tconst lastUserMessage = userMessages[userMessages.length - 1]\n\t\treturn typeof lastUserMessage.content === \"string\"\n\t\t\t? lastUserMessage.content\n\t\t\t: this.extractTextFromContent(lastUserMessage.content)\n\t}\n\n\tprivate extractTextFromContent(content: any[]): string {\n\t\treturn content\n\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t.map((part) => part.text)\n\t\t\t.join(\" \")\n\t}\n\n\t/**\n\t * Map tools to Responses API format\n\t */\n\ttoTools(tools: Tool[]): ToolDefinition[] {\n\t\treturn tools.map((t) => ({\n\t\t\ttype: \"function\",\n\t\t\tname: t.name,\n\t\t\tdescription: t.description,\n\t\t\tparameters: t.schema,\n\t\t\tstrict: true, // Enable strict mode by default for better validation\n\t\t}))\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesMapper } from \"./mapper\"\nimport { zodTextFormat } from \"openai/helpers/zod\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class OpenAIResponsesBuilder extends RequestBuilder {\n\tconstructor(private mapper = new OpenAIResponsesMapper()) {\n\t\tsuper()\n\t}\n\n\taddModel(model: string): RequestBuilder {\n\t\tthis.request.model = model\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\tthis.request.input = task\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst instructions = this.mapper.toInstructions(messages)\n\t\t// Set optional instructions if there's a system message\n\t\tif (instructions && instructions !== \"You are a helpful assistant.\") {\n\t\t\tthis.request.instructions = instructions\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.text = {\n\t\t\tformat: zodTextFormat(schema, \"outputSchema\"),\n\t\t}\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\ttype: \"function\" as const,\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIDefaultClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.create(request)\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIParserClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { OpenAIDefaultClient } from \"./default\"\nimport { OpenAIParserClient } from \"./parser\"\n\nexport class OpenAIClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\tif (request.text && request.text.format) {\n\t\t\treturn new OpenAIParserClient()\n\t\t} else {\n\t\t\treturn new OpenAIDefaultClient()\n\t\t}\n\t}\n}\n","import { ResponseContext } from \"./response-context\"\n\nexport abstract class ResponseHandler {\n\tabstract nextHandler: ResponseHandler\n\n\tsetNextHandler(responseHandler: ResponseHandler): ResponseHandler {\n\t\tthis.nextHandler = responseHandler\n\t\treturn this.nextHandler\n\t}\n\n\tabstract handle(responseContext: ResponseContext): Promise<ResponseContext>\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputParsedHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_parsed) {\n\t\t\tresponseContext.setResponse(providerResponse.output_parsed)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst firstOutput = providerResponse.output?.[0]\n\t\tif (firstOutput && \"content\" in firstOutput) {\n\t\t\tconst firstContent = firstOutput.content?.[0]\n\t\t\tif (firstContent && \"text\" in firstContent) {\n\t\t\t\tresponseContext.setResponse(firstContent.text)\n\t\t\t\treturn responseContext\n\t\t\t}\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputTextHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_text) {\n\t\t\tresponseContext.setResponse(providerResponse.output_text)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","export class UsageEntry {\n\tinputTokens: number\n\toutputTokens: number\n\tmodel: string\n\ttotalTokens: number\n\n\tconstructor(inputTokens: number, outputTokens: number, model: string) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.model = model\n\t\tthis.totalTokens = inputTokens + outputTokens\n\t}\n}\n","import { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OpenAIDefaultClient } from \"../client/default\"\nimport { Tool } from \"@/types/tool\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport interface ToolCall {\n\tcall_id: string\n\tname: string\n\targuments: string | Record<string, any>\n}\n\nexport interface ToolResult {\n\ttype: \"function_call_output\"\n\tcall_id: string\n\toutput: string\n}\n\nexport class FunctionCallsHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: OpenAIDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.request = request\n\t\tthis.tools = tools\n\t\tthis.client = new OpenAIDefaultClient()\n\t}\n\n\tprivate hasToolCalls(response: any): boolean {\n\t\treturn response.output?.some((item: any) => item.type === \"function_call\")\n\t}\n\n\tprivate extractToolCalls(response: any): any[] {\n\t\treturn response.output?.filter((item: any) => item.type === \"function_call\") || []\n\t}\n\n\tprivate resolveTool(call: ToolCall, tools: Tool[]): Tool | null {\n\t\treturn tools.find((t) => t.name === call.name) ?? null\n\t}\n\n\tprivate async executeTool(tool: Tool, rawArgs: ToolCall[\"arguments\"]): Promise<any> {\n\t\tconst args = typeof rawArgs === \"string\" ? JSON.parse(rawArgs) : rawArgs\n\n\t\treturn await tool.invoke(args)\n\t}\n\n\tprivate formatToolResult(callId: string, payload: any): ToolResult {\n\t\treturn {\n\t\t\ttype: \"function_call_output\",\n\t\t\tcall_id: callId,\n\t\t\toutput: JSON.stringify(payload),\n\t\t}\n\t}\n\n\tprivate async executeToolCalls(toolCalls: ToolCall[], tools: Tool[]): Promise<ToolResult[]> {\n\t\tconst results: ToolResult[] = []\n\n\t\tfor (const call of toolCalls) {\n\t\t\tconst tool = this.resolveTool(call, tools)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: `Unknown tool: ${call.name}`,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await this.executeTool(tool, call.arguments)\n\t\t\t\tresults.push(this.formatToolResult(call.call_id, result))\n\t\t\t} catch (err: any) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: err.message ?? \"Tool execution failed\",\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tlet providerResponse = responseContext.providerResponse\n\t\tlet toolCallingResponse: any\n\t\twhile (this.hasToolCalls(providerResponse)) {\n\t\t\tconst toolCalls = this.extractToolCalls(providerResponse)\n\n\t\t\tconst toolResults = await this.executeToolCalls(toolCalls, this.tools)\n\n\t\t\t// Continue the conversation with tool results\n\t\t\tthis.request.input = toolResults\n\t\t\tthis.request.previous_response_id = providerResponse.id\n\n\t\t\ttoolCallingResponse = await this.client.send(this.request)\n\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tresponseContext.setResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { UsageEntry } from \"./usage\"\n\nexport class ResponseContext {\n\tproviderResponse: any\n\tresponse?: any\n\tusageEntries: UsageEntry[] = []\n\n\tsetProviderResponse(providerResponse: any): ResponseContext {\n\t\tthis.providerResponse = providerResponse\n\t\treturn this\n\t}\n\n\taddUsageEntry(usageEntry: UsageEntry): ResponseContext {\n\t\tthis.usageEntries.push(usageEntry)\n\t\treturn this\n\t}\n\n\tsetResponse(response: any): ResponseContext {\n\t\tthis.response = response\n\t\treturn this\n\t}\n\n\tgetResponse(): any {\n\t\treturn this.response\n\t}\n\n\tgetUsageEntries(): UsageEntry [] {\n\t\treturn this.usageEntries\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesBuilder } from \"./builder\"\nimport { OpenAIClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OutputParsedHandler } from \"./response-handler/output-parsed\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { OutputTextHandler } from \"./response-handler/output-text\"\nimport { FunctionCallsHandler } from \"./response-handler/function-calls\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\nimport { MozaikResponse } from \"@/types/response\"\n\nexport class OpenAIResponses extends Endpoint {\n\trequestBuilder: RequestBuilder = new OpenAIResponsesBuilder()\n\n\tconstructor() {\n\t\tsuper()\n\t}\n\n\tasync sendRequest(command: Command): Promise<MozaikResponse> {\n\t\ttry {\n\t\t\tconst request = this.buildRequest(command)\n\t\t\tconst client = OpenAIClientResolver.resolve(request)\n\t\t\tconst response = await client.send(request)\n\n\t\t\tconst responseContext = new ResponseContext()\n\t\t\tresponseContext.setProviderResponse(response)\n\n\t\t\t// response handler (chain of responsibilities)\n\t\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\t\tconst functionCallsHandler: ResponseHandler = new FunctionCallsHandler(\n\t\t\t\trequest,\n\t\t\t\tcommand.tools ? command.tools : [],\n\t\t\t)\n\t\t\tconst outputParsedHandler: ResponseHandler = new OutputParsedHandler()\n\t\t\tconst outputTextHandler: ResponseHandler = new OutputTextHandler()\n\t\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\n\t\t\tusageHandler\n\t\t\t\t.setNextHandler(functionCallsHandler)\n\t\t\t\t.setNextHandler(outputParsedHandler)\n\t\t\t\t.setNextHandler(outputTextHandler)\n\t\t\t\t.setNextHandler(contentHandler)\n\n\t\t\tconst responseHandler = usageHandler\n\n\t\t\tconst result = await responseHandler.handle(responseContext)\n\n\t\t\tconst usageEntries = result.getUsageEntries().map(e => ({\n\t\t\t\tinputTokens: e.inputTokens,\n\t\t\t\toutputTokens: e.outputTokens,\n\t\t\t\tmodel: e.model\n\t\t\t}))\n\n\t\t\treturn {\n\t\t\t\tdata: result.getResponse(),\n\t\t\t\tusageEntries: usageEntries\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[OpenAIProvider] Responses API request failed:\", error)\n\t\t\tthrow error\n\t\t}\n\t}\n}\n","import { Message, TextPart, ImagePart } from \"@/types/message\"\nimport type { MessageParam, TextBlockParam, ImageBlockParam } from \"@anthropic-ai/sdk/resources/messages\"\n\nexport class AnthropicMapper {\n\t/**\n\t * Transforms domain messages to Anthropic API format.\n\t * Separates system messages from conversation messages.\n\t */\n\ttoMessages(messages: Message[]): { messages: MessageParam[]; system?: string } {\n\t\tconst anthropicMessages: MessageParam[] = []\n\t\tlet systemPrompt: string | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// Extract system messages separately (Anthropic uses dedicated system parameter)\n\t\t\tif (msg.role === \"system\") {\n\t\t\t\tconst content =\n\t\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: (msg.content as TextPart[]).map((p) => p.text).join(\"\\n\")\n\n\t\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${content}` : content\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Skip tool role messages (not directly supported in basic implementation)\n\t\t\tif (msg.role === \"tool\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Map user and assistant messages\n\t\t\tif (msg.role === \"user\" || msg.role === \"assistant\") {\n\t\t\t\tif (typeof msg.content === \"string\") {\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: msg.content,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// Handle multimodal content (text + images)\n\t\t\t\t\tconst contentBlocks = (msg.content as Array<TextPart | ImagePart>).map((part) => {\n\t\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\ttext: part.text,\n\t\t\t\t\t\t\t} as TextBlockParam\n\t\t\t\t\t\t} else if (part.type === \"image_url\") {\n\t\t\t\t\t\t\t// Note: Anthropic requires base64-encoded images\n\t\t\t\t\t\t\t// This is a simplified version - production code should handle URL->base64 conversion\n\t\t\t\t\t\t\tconst imageUrl = part.url\n\n\t\t\t\t\t\t\t// Check if it's already base64 data\n\t\t\t\t\t\t\tif (imageUrl.startsWith(\"data:image\")) {\n\t\t\t\t\t\t\t\tconst matches = imageUrl.match(/data:image\\/(\\w+);base64,(.+)/)\n\t\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\t\tconst [, mediaType, data] = matches\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\ttype: \"image\" as const,\n\t\t\t\t\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"base64\" as const,\n\t\t\t\t\t\t\t\t\t\t\tmedia_type: `image/${mediaType}` as\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/jpeg\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/png\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/gif\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/webp\",\n\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} as ImageBlockParam\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// For non-base64 URLs, throw error (or you could fetch and convert)\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"[AnthropicMapper] Image URLs must be base64-encoded. \" +\n\t\t\t\t\t\t\t\t\t\"Convert to data:image/[type];base64,[data] format.\",\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { type: \"text\" as const, text: \"\" } as TextBlockParam\n\t\t\t\t\t})\n\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: contentBlocks,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Anthropic requires alternating user/assistant roles\n\t\t// Validate and fix if needed\n\t\tconst validated = this.ensureAlternatingRoles(anthropicMessages)\n\n\t\treturn {\n\t\t\tmessages: validated,\n\t\t\tsystem: systemPrompt,\n\t\t}\n\t}\n\n\t/**\n\t * Ensures messages alternate between user and assistant roles.\n\t * Anthropic API requires this constraint.\n\t */\n\tprivate ensureAlternatingRoles(messages: MessageParam[]): MessageParam[] {\n\t\tif (messages.length === 0) return messages\n\n\t\tconst result: MessageParam[] = []\n\t\tlet lastRole: \"user\" | \"assistant\" | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// If same role appears consecutively, merge the messages\n\t\t\tif (lastRole === msg.role && result.length > 0) {\n\t\t\t\tconst lastMsg = result[result.length - 1]\n\n\t\t\t\t// Merge content\n\t\t\t\tif (typeof lastMsg.content === \"string\" && typeof msg.content === \"string\") {\n\t\t\t\t\tlastMsg.content = `${lastMsg.content}\\n${msg.content}`\n\t\t\t\t} else {\n\t\t\t\t\t// For array content, concatenate\n\t\t\t\t\tconst lastContent = Array.isArray(lastMsg.content)\n\t\t\t\t\t\t? lastMsg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: lastMsg.content as string }]\n\t\t\t\t\tconst newContent = Array.isArray(msg.content)\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: msg.content as string }]\n\t\t\t\t\tlastMsg.content = [...lastContent, ...newContent]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult.push(msg)\n\t\t\t\tlastRole = msg.role\n\t\t\t}\n\t\t}\n\n\t\t// Ensure first message is from user (Anthropic requirement)\n\t\tif (result.length > 0 && result[0].role !== \"user\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"[AnthropicMapper] First message must be from user. Anthropic API requires conversations to start with a user message.\",\n\t\t\t)\n\t\t}\n\n\t\treturn result\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicMapper } from \"./mapper\"\nimport { betaZodOutputFormat } from \"@anthropic-ai/sdk/helpers/beta/zod\"\nimport { ANTHROPIC_MODEL_MAP, AnthropicModel } from \"@/types/model\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class AnthropicRequestBuilder extends RequestBuilder {\n\tprivate mapper = new AnthropicMapper()\n\n\taddModel(model: AnthropicModel): RequestBuilder {\n\t\tthis.request.model = ANTHROPIC_MODEL_MAP[model]\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\t// Add task as a user message\n\t\tconst message = {\n\t\t\trole: \"user\" as const,\n\t\t\tcontent: task,\n\t\t}\n\n\t\tif (!this.request.messages) {\n\t\t\tthis.request.messages = []\n\t\t}\n\n\t\tthis.request.messages.push(message)\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst { messages: anthropicMessages, system } = this.mapper.toMessages(messages)\n\n\t\tthis.request.messages = anthropicMessages\n\n\t\tif (system) {\n\t\t\tthis.request.system = system\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.betas = [\"structured-outputs-2025-11-13\"]\n\t\tthis.request.output_format = betaZodOutputFormat(schema)\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tinput_schema: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n\n\tbuild() {\n\t\t// Anthropic requires max_tokens parameter\n\t\tif (!this.request.max_tokens) {\n\t\t\tthis.request.max_tokens = 1024\n\t\t}\n\n\t\treturn this.request\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicDefaultClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.messages.create(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicParserClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.beta.messages.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { AnthropicDefaultClient } from \"./default\"\nimport { AnthropicParserClient } from \"./parser\"\n\nexport class AnthropicClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\treturn request.output_format ? new AnthropicParserClient() : new AnthropicDefaultClient()\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ParsedOutputHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.parsed_output) {\n\t\t\tresponseContext.setResponse(providerResponse.parsed_output)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst content = providerResponse.content\n\t\t\t.filter((block: any) => block.type === \"text\")\n\t\t\t.map((block: any) => (block.type === \"text\" ? block.text : \"\"))\n\t\t\t.join(\"\")\n\n\t\tif (content) {\n\t\t\tresponseContext.setResponse(content)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Tool } from \"@/types/tool\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { AnthropicDefaultClient } from \"../client/default\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class ToolUseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: AnthropicDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.tools = tools\n\t\tthis.request = request\n\t\tthis.client = new AnthropicDefaultClient()\n\t}\n\n\tprivate async executeToolCalls(tools: Tool[], toolUseBlocks: Anthropic.ToolUseBlock[]): Promise<any[]> {\n\t\tconst results: any[] = []\n\n\t\tfor (const toolUse of toolUseBlocks) {\n\t\t\tconst tool = tools?.find((t) => t.name === toolUse.name)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: `Unknown tool: ${toolUse.name}` }),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await tool.invoke(toolUse.input)\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify(result),\n\t\t\t\t})\n\t\t\t} catch (error: any) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: error.message }),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tlet providerResponse = responseContext.providerResponse\n\n\t\twhile (providerResponse.stop_reason === \"tool_use\") {\n\t\t\tconst toolUseBlocks = providerResponse.content.filter(\n\t\t\t\t(block: any): block is Anthropic.ToolUseBlock => block.type === \"tool_use\",\n\t\t\t)\n\n\t\t\t// Add assistant's response to messages\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: providerResponse.content,\n\t\t\t})\n\n\t\t\tconst toolResults = await this.executeToolCalls(this.tools, toolUseBlocks)\n\n\t\t\t// Add tool results as user message\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: toolResults,\n\t\t\t})\n\n\t\t\t// Call model again\n\t\t\tconst toolCallingResponse = await this.client.send(this.request)\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class UnhandledResponseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst id = providerResponse?.id ?? \"unknown\"\n\t\tconst model = providerResponse?.model ?? \"unknown\"\n\n\t\tthrow new Error(`No response handler matched. response_id=${id} model=${model}`)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicRequestBuilder } from \"./builder\"\nimport { AnthropicClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { ParsedOutputHandler } from \"./response-handler/parsed-output\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { ToolUseHandler } from \"./response-handler/tool-use\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\nimport { UnhandledResponseHandler } from \"./response-handler/undhandled\"\nimport { MozaikResponse } from \"@/types/response\"\n\nexport class AnthropicEndpoint extends Endpoint {\n\trequestBuilder: RequestBuilder = new AnthropicRequestBuilder()\n\n\tasync sendRequest(command: Command): Promise<MozaikResponse> {\n\t\tconst request = this.buildRequest(command)\n\t\tconst client = AnthropicClientResolver.resolve(request)\n\t\tconst response = await client.send(request)\n\n\t\tconst responseContext = new ResponseContext()\n\t\tresponseContext.setProviderResponse(response)\n\n\t\t// response handler (chain of responsibilities)\n\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\tconst toolUseHandler: ResponseHandler = new ToolUseHandler(request, command.tools ? command.tools : [])\n\t\tconst parsedOutputHandler: ResponseHandler = new ParsedOutputHandler()\n\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\t\tconst unhandledResponseHandler: ResponseHandler = new UnhandledResponseHandler()\n\n\t\tusageHandler\n\t\t\t.setNextHandler(toolUseHandler)\n\t\t\t.setNextHandler(parsedOutputHandler)\n\t\t\t.setNextHandler(contentHandler)\n\t\t\t.setNextHandler(unhandledResponseHandler)\n\n\t\tconst responseHandler = usageHandler\n\n\t\tconst result = await responseHandler.handle(responseContext)\n\n\t\tconst usageEntries = result.getUsageEntries().map(e => ({\n\t\t\tinputTokens: e.inputTokens,\n\t\t\toutputTokens: e.outputTokens,\n\t\t\tmodel: e.model\n\t\t}))\n\n\t\treturn {\n\t\t\tdata: result.getResponse(),\n\t\t\tusageEntries: usageEntries\n\t\t}\n\t}\n}\n","import { EndpointResolver } from \"@core/endpoint/endpoint-resolver\"\nimport { Endpoint } from \"@core/endpoint/endpoint\"\nimport { OPENAI_MODELS, ANTHROPIC_MODELS } from \"@/types/model\"\nimport { OpenAIResponses } from \"./openai/endpoint\"\nimport { AnthropicEndpoint } from \"./anthropic/endpoint\"\n\nexport class DefaultEndpointResolver extends EndpointResolver {\n\tisOpenAIModel(value: string): boolean {\n\t\treturn (OPENAI_MODELS as readonly string[]).includes(value)\n\t}\n\n\tisAnthropicModel(value: string): boolean {\n\t\treturn (ANTHROPIC_MODELS as readonly string[]).includes(value)\n\t}\n\n\tresolve(model: string): Endpoint {\n\t\tif (this.isOpenAIModel(model)) {\n\t\t\treturn new OpenAIResponses()\n\t\t} else if (this.isAnthropicModel(model)) {\n\t\t\treturn new AnthropicEndpoint()\n\t\t}\n\n\t\tthrow new Error(\"Provider not found\")\n\t}\n}\n","import { RequestGateway } from \"@core/endpoint/request-gateway\"\nimport { Command } from \"@/types/command\"\nimport { DefaultEndpointResolver } from \"@providers/endpoint-resolver\"\nimport { ZodObject } from \"zod\"\nimport { Model } from \"@/types/model\"\nimport { Message } from \"@/types/message\"\n\nexport class Agent {\n\tprivate command: Command\n\tgateway: RequestGateway = new RequestGateway(new DefaultEndpointResolver())\n\n\tconstructor(command: Command) {\n\t\tthis.command = command\n\t}\n\n\tsetModel(model: Model) {\n\t\tthis.command.model = model\n\t}\n\n\tsetMessages(messages: Message[]) {\n\t\tthis.command.messages = messages\n\t}\n\n\tsetTask(task: string) {\n\t\tthis.command.task = task\n\t}\n\n\tsetStructuredOutput(schema: ZodObject<any>) {\n\t\tthis.command.structuredOutput = schema\n\t}\n\n\tasync act(task?: string) {\n\t\tif (task) {\n\t\t\tthis.command.task = task\n\t\t}\n\t\treturn await this.gateway.invoke(this.command)\n\t}\n}\n","import z from \"zod\"\nimport { ANTHROPIC_MODELS, OPENAI_MODELS } from \"@/types/model\"\nimport { PlanNode } from \"@/types/plan\"\n\nconst ModelSchema = z.enum([...OPENAI_MODELS, ...ANTHROPIC_MODELS])\n\nconst TaskPlanNodeSchema = z.object({\n\tkind: z.literal(\"task\"),\n\ttask: z.string(),\n\tmodel: ModelSchema,\n})\n\nconst WorkflowPlanNodeSchema: z.ZodType<Extract<PlanNode, { kind: \"workflow\" }>> = z.lazy(() =>\n\tz.object({\n\t\tkind: z.literal(\"workflow\"),\n\t\tmode: z.enum([\"sequential\", \"parallel\"]),\n\t\tunits: z.array(PlanNodeSchema),\n\t}),\n)\n\nconst PlanNodeSchema: z.ZodType<PlanNode> = TaskPlanNodeSchema.or(WorkflowPlanNodeSchema)\n\nexport const PlanSchema = z.object({\n\troot: PlanNodeSchema,\n})\n","import { Workflow } from \"@core/workflow/workflow\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"../hooks/execution-hook\"\n\nexport class ParallelExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst promises = []\n\t\tfor (const u of workflow.units) {\n\t\t\tpromises.push(u.execute(hook))\n\t\t}\n\n\t\tconst results = await Promise.all(promises)\n\n\t\treturn results\n\t}\n}\n","import { ExecutionHook } from \"../hooks/execution-hook\"\nimport { Workflow } from \"../workflow\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class SequentalExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst results = []\n\t\tfor (const u of workflow.units) {\n\t\t\tresults.push(await u.execute(hook))\n\t\t}\n\n\t\treturn results\n\t}\n}\n","import { ParallelExecution } from \"./parallel\"\nimport { SequentalExecution } from \"./sequential\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class ExecutionStrategyFactory {\n\tstatic create(mode: string): WorkflowExecutionStrategy {\n\t\tlet strategy: WorkflowExecutionStrategy\n\t\tif (mode == \"parallel\") {\n\t\t\tstrategy = new ParallelExecution()\n\t\t} else {\n\t\t\tstrategy = new SequentalExecution()\n\t\t}\n\n\t\treturn strategy\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class ClusterHook implements ExecutionHook {\n\tconstructor(private hooks: ExecutionHook[]) {}\n\n\tbeforeTask(task: Task): void {\n\t\tthis.hooks.forEach((h) => h.beforeTask(task))\n\t}\n\n\tafterTask(task: Task, result: any): void {\n\t\tthis.hooks.forEach((h) => h.afterTask(task, result))\n\t}\n\n\tbeforeWorkflow(wf: Workflow) {\n\t\tthis.hooks.forEach((h) => h.beforeWorkflow(wf))\n\t}\n\n\tafterWorkflow(wf: Workflow, result: any) {\n\t\tthis.hooks.forEach((h) => h.afterWorkflow(wf, result))\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class Logger implements ExecutionHook {\n\tbeforeWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:start], Mode: ${workflow.mode}`)\n\t}\n\n\tafterWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:end], Mode: ${workflow.mode}`)\n\t}\n\n\tbeforeTask(task: Task) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n\n\tafterTask(task: Task, result: any) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n}\n","import { ClusterHook } from \"./cluster\"\nimport { ExecutionHook } from \"./execution-hook\"\nimport { Logger } from \"./logger\"\n\nconst loggingHook: ExecutionHook = new Logger()\n\nconst defaultHooks = [loggingHook]\nconst clusterHook: ExecutionHook = new ClusterHook(defaultHooks)\n\nexport const DEFAULT_CLUSTER_HOOK = clusterHook\n","import { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionStrategyFactory } from \"@core/workflow/execution/strategy-factory\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Workflow extends WorkUnit {\n\tconstructor(\n\t\treadonly mode: \"parallel\" | \"sequential\",\n\t\treadonly units: WorkUnit[],\n\t) {\n\t\tsuper()\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeWorkflow(this)\n\n\t\tconst executionStrategy: WorkflowExecutionStrategy = ExecutionStrategyFactory.create(this.mode)\n\t\tconst result = await executionStrategy.execute(this, hook)\n\n\t\thook.afterWorkflow(this, result)\n\t\treturn result\n\t}\n}\n","import { Model, Command, Agent } from \"@/index\"\nimport { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Task extends WorkUnit {\n\tconstructor(\n\t\tprivate task: string,\n\t\tprivate model: Model,\n\t) {\n\t\tsuper()\n\t}\n\n\tgetTask() {\n\t\treturn this.task\n\t}\n\n\tgetModel() {\n\t\treturn this.model\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeTask(this)\n\n\t\tconst command: Command = {\n\t\t\tmodel: this.model,\n\t\t\ttask: this.task,\n\t\t}\n\n\t\tconst agent = new Agent(command)\n\t\tconst result = await agent.act(this.task)\n\n\t\thook.afterTask(this, result)\n\t\treturn result\n\t}\n}\n","import { Plan, PlanNode } from \"@/types/plan\"\nimport { Workflow } from \"./workflow\"\nimport { WorkUnit } from \"./work-unit\"\nimport { Task } from \"./task\"\n\nexport class PlanWorkflowMapper {\n\tstatic fromPlan(plan: Plan): Workflow {\n\t\treturn this.fromNode(plan.root)\n\t}\n\n\tprivate static fromNode(node: PlanNode): Workflow {\n\t\tif (node.kind !== \"workflow\") {\n\t\t\tthrow new Error(\"Root must be workflow\")\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n\n\tprivate static mapNode(node: PlanNode): WorkUnit {\n\t\tif (node.kind === \"task\") {\n\t\t\treturn new Task(node.task, node.model)\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n}\n","import { Plan } from \"@/types/plan\"\nimport { Workflow } from \"@core/workflow/workflow\"\nimport { Agent } from \"./agent\"\nimport { Command } from \"@/types/command\"\nimport { PlanSchema } from \"@core/workflow/schema/plan\"\nimport { PlanWorkflowMapper } from \"@core/workflow/mapper\"\n\nconst PROMPT = `You are a planner.\n\nRules:\n- Use 'parallel' for the task that can be run in parallel.\n- Pick model based on the task complexity\n- Keep prompts actionable.\n- Don't ask user for any input, just do the thing with available data you have.\n`\n\nexport class PlanningAgent extends Agent {\n\tconstructor(command: Command) {\n\t\tsuper(command)\n\t}\n\n\tasync planFromGoal(goal: string): Promise<Workflow> {\n\t\tthis.setStructuredOutput(PlanSchema)\n\t\tconst plan: Plan = await this.act(`${PROMPT}\\nGoal: ${goal}`)\n\t\treturn PlanWorkflowMapper.fromPlan(plan)\n\t}\n}\n"],"mappings":"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","names":["OpenAI","import_openai","OpenAI","import_zod","Anthropic","import_sdk","Anthropic","ContentHandler","UsageHandler","UsageHandler","ContentHandler","import_zod","z"]}
package/dist/index.mjs CHANGED
@@ -398,6 +398,12 @@ var ResponseContext = class {
398
398
  this.response = response;
399
399
  return this;
400
400
  }
401
+ getResponse() {
402
+ return this.response;
403
+ }
404
+ getUsageEntries() {
405
+ return this.usageEntries;
406
+ }
401
407
  };
402
408
 
403
409
  // src/providers/openai/response-handler/usage.ts
@@ -437,7 +443,16 @@ var OpenAIResponses = class extends Endpoint {
437
443
  const contentHandler = new ContentHandler();
438
444
  usageHandler.setNextHandler(functionCallsHandler).setNextHandler(outputParsedHandler).setNextHandler(outputTextHandler).setNextHandler(contentHandler);
439
445
  const responseHandler = usageHandler;
440
- return await responseHandler.handle(responseContext);
446
+ const result = await responseHandler.handle(responseContext);
447
+ const usageEntries = result.getUsageEntries().map((e) => ({
448
+ inputTokens: e.inputTokens,
449
+ outputTokens: e.outputTokens,
450
+ model: e.model
451
+ }));
452
+ return {
453
+ data: result.getResponse(),
454
+ usageEntries
455
+ };
441
456
  } catch (error) {
442
457
  console.warn("[OpenAIProvider] Responses API request failed:", error);
443
458
  throw error;
@@ -762,7 +777,16 @@ var AnthropicEndpoint = class extends Endpoint {
762
777
  const unhandledResponseHandler = new UnhandledResponseHandler();
763
778
  usageHandler.setNextHandler(toolUseHandler).setNextHandler(parsedOutputHandler).setNextHandler(contentHandler).setNextHandler(unhandledResponseHandler);
764
779
  const responseHandler = usageHandler;
765
- return await responseHandler.handle(responseContext);
780
+ const result = await responseHandler.handle(responseContext);
781
+ const usageEntries = result.getUsageEntries().map((e) => ({
782
+ inputTokens: e.inputTokens,
783
+ outputTokens: e.outputTokens,
784
+ model: e.model
785
+ }));
786
+ return {
787
+ data: result.getResponse(),
788
+ usageEntries
789
+ };
766
790
  }
767
791
  };
768
792
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/workflow/work-unit.ts","../src/core/endpoint/request-gateway.ts","../src/core/endpoint/endpoint-resolver.ts","../src/types/model.ts","../src/core/command-handler/capability.ts","../src/core/command-handler/messages.ts","../src/core/command-handler/task.ts","../src/core/command-handler/model.ts","../src/core/command-handler/structured-output.ts","../src/core/command-handler/tools.ts","../src/core/endpoint/endpoint.ts","../src/core/endpoint/request-builder.ts","../src/providers/openai/mapper.ts","../src/providers/openai/builder.ts","../src/providers/openai/client/default.ts","../src/providers/openai/client/parser.ts","../src/providers/openai/client/resolver.ts","../src/core/endpoint/response-handler.ts","../src/providers/openai/response-handler/output-parsed.ts","../src/providers/openai/response-handler/content.ts","../src/providers/openai/response-handler/output-text.ts","../src/core/endpoint/usage.ts","../src/providers/openai/response-handler/function-calls.ts","../src/core/endpoint/response-context.ts","../src/providers/openai/response-handler/usage.ts","../src/providers/openai/endpoint.ts","../src/providers/anthropic/mapper.ts","../src/providers/anthropic/builder.ts","../src/providers/anthropic/client/default.ts","../src/providers/anthropic/client/parser.ts","../src/providers/anthropic/client/resolver.ts","../src/providers/anthropic/response-handler/parsed-output.ts","../src/providers/anthropic/response-handler/content.ts","../src/providers/anthropic/response-handler/tool-use.ts","../src/providers/anthropic/response-handler/usage.ts","../src/providers/anthropic/response-handler/undhandled.ts","../src/providers/anthropic/endpoint.ts","../src/providers/endpoint-resolver.ts","../src/core/agents/agent.ts","../src/core/workflow/schema/plan.ts","../src/core/workflow/execution/parallel.ts","../src/core/workflow/execution/sequential.ts","../src/core/workflow/execution/strategy-factory.ts","../src/core/workflow/hooks/cluster.ts","../src/core/workflow/hooks/logger.ts","../src/core/workflow/hooks/index.ts","../src/core/workflow/workflow.ts","../src/core/workflow/task.ts","../src/core/workflow/mapper.ts","../src/core/agents/planner.ts"],"sourcesContent":["import { ExecutionHook } from \"./hooks/execution-hook\"\n\nexport abstract class WorkUnit {\n\tconstructor() {}\n\n\tabstract execute(hook: ExecutionHook): Promise<any>\n}\n","import { Command } from \"@/types/command\"\nimport { Endpoint } from \"./endpoint\"\nimport { EndpointResolver } from \"./endpoint-resolver\"\n\nexport class RequestGateway {\n\tendpoint!: Endpoint\n\n\tconstructor(readonly endpointResolver: EndpointResolver) {}\n\n\tasync invoke(command: Command): Promise<any> {\n\t\tthis.endpoint = this.endpointResolver.resolve(command.model)\n\t\treturn await this.endpoint.sendRequest(command)\n\t}\n}\n","import { Endpoint } from \"./endpoint\"\n\nexport abstract class EndpointResolver {\n\tabstract resolve(model: string): Endpoint\n}\n","export const OPENAI_MODELS = [\"gpt-5\", \"gpt-5-mini\", \"gpt-5-nano\", \"gpt-5.1\"] as const\n\nexport type OpenAIModel = (typeof OPENAI_MODELS)[number]\n\nconst latest_sonnet = \"claude-sonnet-4-5-20250929\"\nconst latest_haiku = \"claude-haiku-4-5-20251001\"\nconst latest_opus = \"claude-opus-4-5-20251101\"\n\nexport const ANTHROPIC_MODELS = [\"claude-sonnet-4.5\", \"claude-haiku-4.5\", \"claude-opus-4.5\"] as const\n\nexport const ANTHROPIC_MODEL_MAP = {\n\t\"claude-sonnet-4.5\": latest_sonnet,\n\t\"claude-haiku-4.5\": latest_haiku,\n\t\"claude-opus-4.5\": latest_opus,\n} as const\n\nexport type AnthropicModel = (typeof ANTHROPIC_MODELS)[number]\n\nexport type Model = OpenAIModel | AnthropicModel\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\n\nexport abstract class CapabilityHandler {\n\tabstract nextHandler: CapabilityHandler\n\n\tsetNextHandler(capability: CapabilityHandler): CapabilityHandler {\n\t\tthis.nextHandler = capability\n\t\treturn this.nextHandler\n\t}\n\n\tabstract apply(command: Command, requestBuilder: RequestBuilder): any\n\n\thandle(command: Command, builder: RequestBuilder) {\n\t\tthis.apply(command, builder)\n\n\t\tif (this.nextHandler) {\n\t\t\tthis.nextHandler.handle(command, builder)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class MessagesHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.messages) {\n\t\t\tbuilder.addMessages(command.messages)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class TaskHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.task) {\n\t\t\tbuilder.addTask(command.task)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class ModelHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.model) {\n\t\t\tbuilder.addModel(command.model)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { CapabilityHandler } from \"./capability\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\n\nexport class StructuredOutputlHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.structuredOutput) {\n\t\t\tbuilder.addStructuredOutput(command.structuredOutput)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\n\nexport class ToolsHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, requestBuilder: RequestBuilder) {\n\t\tif (command.tools && command.tools.length > 0) {\n\t\t\trequestBuilder.addTools(command.tools)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"./request-builder\"\nimport { CapabilityHandler } from \"../command-handler/capability\"\nimport { MessagesHandler } from \"../command-handler/messages\"\nimport { TaskHandler } from \"../command-handler/task\"\nimport { ModelHandler } from \"../command-handler/model\"\nimport { StructuredOutputlHandler } from \"../command-handler/structured-output\"\nimport { Command } from \"@/types/command\"\nimport { ToolsHandler } from \"../command-handler/tools\"\n\nexport abstract class Endpoint {\n\tabstract requestBuilder: RequestBuilder\n\tcommand: Command | null = null\n\n\tbuildRequest(command: Command): any {\n\t\tthis.command = command\n\n\t\tthis.requestBuilder.initialize()\n\n\t\tconst messagesHandler: CapabilityHandler = new MessagesHandler()\n\t\tconst taskHandler: CapabilityHandler = new TaskHandler()\n\t\tconst modelHandler: CapabilityHandler = new ModelHandler()\n\t\tconst structuredOutputHandler: CapabilityHandler = new StructuredOutputlHandler()\n\t\tconst toolsHandler: CapabilityHandler = new ToolsHandler()\n\n\t\tmessagesHandler\n\t\t\t.setNextHandler(taskHandler)\n\t\t\t.setNextHandler(modelHandler)\n\t\t\t.setNextHandler(structuredOutputHandler)\n\t\t\t.setNextHandler(toolsHandler)\n\n\t\tmessagesHandler.handle(command, this.requestBuilder)\n\n\t\treturn this.requestBuilder.build()\n\t}\n\n\tabstract sendRequest(providerRequest: any): any\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\nimport { ZodObject } from \"zod\"\n\nexport abstract class RequestBuilder {\n\trequest: any\n\n\tinitialize() {\n\t\tthis.request = {}\n\t}\n\n\tabstract addModel(model: string): RequestBuilder\n\tabstract addTask(task: string): RequestBuilder\n\tabstract addMessages(messages: Message[]): RequestBuilder\n\tabstract addStructuredOutput(schema: ZodObject<any>): RequestBuilder\n\tabstract addTools(tools: Tool[]): RequestBuilder\n\n\tbuild() {\n\t\treturn this.request\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\n\nexport interface ToolDefinition {\n\ttype: \"function\"\n\tname: string\n\tdescription: string\n\tparameters: any\n\tstrict?: boolean\n}\n\nexport class OpenAIResponsesMapper {\n\t/**\n\t * Convert domain Messages to Responses API instructions format\n\t *\n\t * The Responses API uses 'instructions' (system prompt) rather than messages array.\n\t * For multi-turn conversations, use conversation.id or previous_response_id parameters.\n\t */\n\ttoInstructions(messages: Message[]): string {\n\t\tif (messages.length === 0) {\n\t\t\tthrow new Error(\"[ResponsesMapper] Cannot create instructions from empty messages\")\n\t\t}\n\n\t\t// Find system message if exists, otherwise use first user message as context\n\t\tconst systemMessage = messages.find((m) => m.role === \"system\")\n\n\t\tif (systemMessage) {\n\t\t\treturn typeof systemMessage.content === \"string\"\n\t\t\t\t? systemMessage.content\n\t\t\t\t: this.extractTextFromContent(systemMessage.content)\n\t\t}\n\n\t\t// Fallback: create instructions from context\n\t\treturn \"You are a helpful assistant.\"\n\t}\n\n\t/**\n\t * Extract the user's input from messages\n\t * Returns the last user message content for use in prompt variables.\n\t * In Responses API, the actual user query is typically passed via prompt variables\n\t * or handled through conversation continuation.\n\t */\n\textractUserInput(messages: Message[]): string {\n\t\tconst userMessages = messages.filter((m) => m.role === \"user\")\n\n\t\tif (userMessages.length === 0) {\n\t\t\treturn \"\"\n\t\t}\n\n\t\tconst lastUserMessage = userMessages[userMessages.length - 1]\n\t\treturn typeof lastUserMessage.content === \"string\"\n\t\t\t? lastUserMessage.content\n\t\t\t: this.extractTextFromContent(lastUserMessage.content)\n\t}\n\n\tprivate extractTextFromContent(content: any[]): string {\n\t\treturn content\n\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t.map((part) => part.text)\n\t\t\t.join(\" \")\n\t}\n\n\t/**\n\t * Map tools to Responses API format\n\t */\n\ttoTools(tools: Tool[]): ToolDefinition[] {\n\t\treturn tools.map((t) => ({\n\t\t\ttype: \"function\",\n\t\t\tname: t.name,\n\t\t\tdescription: t.description,\n\t\t\tparameters: t.schema,\n\t\t\tstrict: true, // Enable strict mode by default for better validation\n\t\t}))\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesMapper } from \"./mapper\"\nimport { zodTextFormat } from \"openai/helpers/zod\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class OpenAIResponsesBuilder extends RequestBuilder {\n\tconstructor(private mapper = new OpenAIResponsesMapper()) {\n\t\tsuper()\n\t}\n\n\taddModel(model: string): RequestBuilder {\n\t\tthis.request.model = model\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\tthis.request.input = task\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst instructions = this.mapper.toInstructions(messages)\n\t\t// Set optional instructions if there's a system message\n\t\tif (instructions && instructions !== \"You are a helpful assistant.\") {\n\t\t\tthis.request.instructions = instructions\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.text = {\n\t\t\tformat: zodTextFormat(schema, \"outputSchema\"),\n\t\t}\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\ttype: \"function\" as const,\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIDefaultClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.create(request)\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIParserClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { OpenAIDefaultClient } from \"./default\"\nimport { OpenAIParserClient } from \"./parser\"\n\nexport class OpenAIClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\tif (request.text && request.text.format) {\n\t\t\treturn new OpenAIParserClient()\n\t\t} else {\n\t\t\treturn new OpenAIDefaultClient()\n\t\t}\n\t}\n}\n","import { ResponseContext } from \"./response-context\"\n\nexport abstract class ResponseHandler {\n\tabstract nextHandler: ResponseHandler\n\n\tsetNextHandler(responseHandler: ResponseHandler): ResponseHandler {\n\t\tthis.nextHandler = responseHandler\n\t\treturn this.nextHandler\n\t}\n\n\tabstract handle(responseContext: ResponseContext): Promise<ResponseContext>\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputParsedHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_parsed) {\n\t\t\tresponseContext.setResponse(providerResponse.output_parsed)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst firstOutput = providerResponse.output?.[0]\n\t\tif (firstOutput && \"content\" in firstOutput) {\n\t\t\tconst firstContent = firstOutput.content?.[0]\n\t\t\tif (firstContent && \"text\" in firstContent) {\n\t\t\t\tresponseContext.setResponse(firstContent.text)\n\t\t\t\treturn responseContext\n\t\t\t}\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputTextHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_text) {\n\t\t\tresponseContext.setResponse(providerResponse.output_text)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","export class UsageEntry {\n\tinputTokens: number\n\toutputTokens: number\n\tmodel: string\n\ttotalTokens: number\n\n\tconstructor(inputTokens: number, outputTokens: number, model: string) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.model = model\n\t\tthis.totalTokens = inputTokens + outputTokens\n\t}\n}\n","import { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OpenAIDefaultClient } from \"../client/default\"\nimport { Tool } from \"@/types/tool\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport interface ToolCall {\n\tcall_id: string\n\tname: string\n\targuments: string | Record<string, any>\n}\n\nexport interface ToolResult {\n\ttype: \"function_call_output\"\n\tcall_id: string\n\toutput: string\n}\n\nexport class FunctionCallsHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: OpenAIDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.request = request\n\t\tthis.tools = tools\n\t\tthis.client = new OpenAIDefaultClient()\n\t}\n\n\tprivate hasToolCalls(response: any): boolean {\n\t\treturn response.output?.some((item: any) => item.type === \"function_call\")\n\t}\n\n\tprivate extractToolCalls(response: any): any[] {\n\t\treturn response.output?.filter((item: any) => item.type === \"function_call\") || []\n\t}\n\n\tprivate resolveTool(call: ToolCall, tools: Tool[]): Tool | null {\n\t\treturn tools.find((t) => t.name === call.name) ?? null\n\t}\n\n\tprivate async executeTool(tool: Tool, rawArgs: ToolCall[\"arguments\"]): Promise<any> {\n\t\tconst args = typeof rawArgs === \"string\" ? JSON.parse(rawArgs) : rawArgs\n\n\t\treturn await tool.invoke(args)\n\t}\n\n\tprivate formatToolResult(callId: string, payload: any): ToolResult {\n\t\treturn {\n\t\t\ttype: \"function_call_output\",\n\t\t\tcall_id: callId,\n\t\t\toutput: JSON.stringify(payload),\n\t\t}\n\t}\n\n\tprivate async executeToolCalls(toolCalls: ToolCall[], tools: Tool[]): Promise<ToolResult[]> {\n\t\tconst results: ToolResult[] = []\n\n\t\tfor (const call of toolCalls) {\n\t\t\tconst tool = this.resolveTool(call, tools)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: `Unknown tool: ${call.name}`,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await this.executeTool(tool, call.arguments)\n\t\t\t\tresults.push(this.formatToolResult(call.call_id, result))\n\t\t\t} catch (err: any) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: err.message ?? \"Tool execution failed\",\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tlet providerResponse = responseContext.providerResponse\n\t\tlet toolCallingResponse: any\n\t\twhile (this.hasToolCalls(providerResponse)) {\n\t\t\tconst toolCalls = this.extractToolCalls(providerResponse)\n\n\t\t\tconst toolResults = await this.executeToolCalls(toolCalls, this.tools)\n\n\t\t\t// Continue the conversation with tool results\n\t\t\tthis.request.input = toolResults\n\t\t\tthis.request.previous_response_id = providerResponse.id\n\n\t\t\ttoolCallingResponse = await this.client.send(this.request)\n\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tresponseContext.setResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { UsageEntry } from \"./usage\"\n\nexport class ResponseContext {\n\tproviderResponse: any\n\tresponse?: any\n\tusageEntries: UsageEntry[] = []\n\n\tsetProviderResponse(providerResponse: any): ResponseContext {\n\t\tthis.providerResponse = providerResponse\n\t\treturn this\n\t}\n\n\taddUsageEntry(usageEntry: UsageEntry): ResponseContext {\n\t\tthis.usageEntries.push(usageEntry)\n\t\treturn this\n\t}\n\n\tsetResponse(response: any): ResponseContext {\n\t\tthis.response = response\n\t\treturn this\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesBuilder } from \"./builder\"\nimport { OpenAIClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OutputParsedHandler } from \"./response-handler/output-parsed\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { OutputTextHandler } from \"./response-handler/output-text\"\nimport { FunctionCallsHandler } from \"./response-handler/function-calls\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\n\nexport class OpenAIResponses extends Endpoint {\n\trequestBuilder: RequestBuilder = new OpenAIResponsesBuilder()\n\n\tconstructor() {\n\t\tsuper()\n\t}\n\n\tasync sendRequest(command: Command) {\n\t\ttry {\n\t\t\tconst request = this.buildRequest(command)\n\t\t\tconst client = OpenAIClientResolver.resolve(request)\n\t\t\tconst response = await client.send(request)\n\n\t\t\tconst responseContext = new ResponseContext()\n\t\t\tresponseContext.setProviderResponse(response)\n\n\t\t\t// response handler (chain of responsibilities)\n\t\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\t\tconst functionCallsHandler: ResponseHandler = new FunctionCallsHandler(\n\t\t\t\trequest,\n\t\t\t\tcommand.tools ? command.tools : [],\n\t\t\t)\n\t\t\tconst outputParsedHandler: ResponseHandler = new OutputParsedHandler()\n\t\t\tconst outputTextHandler: ResponseHandler = new OutputTextHandler()\n\t\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\n\t\t\tusageHandler\n\t\t\t\t.setNextHandler(functionCallsHandler)\n\t\t\t\t.setNextHandler(outputParsedHandler)\n\t\t\t\t.setNextHandler(outputTextHandler)\n\t\t\t\t.setNextHandler(contentHandler)\n\n\t\t\tconst responseHandler = usageHandler\n\n\t\t\treturn await responseHandler.handle(responseContext)\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[OpenAIProvider] Responses API request failed:\", error)\n\t\t\tthrow error\n\t\t}\n\t}\n}\n","import { Message, TextPart, ImagePart } from \"@/types/message\"\nimport type { MessageParam, TextBlockParam, ImageBlockParam } from \"@anthropic-ai/sdk/resources/messages\"\n\nexport class AnthropicMapper {\n\t/**\n\t * Transforms domain messages to Anthropic API format.\n\t * Separates system messages from conversation messages.\n\t */\n\ttoMessages(messages: Message[]): { messages: MessageParam[]; system?: string } {\n\t\tconst anthropicMessages: MessageParam[] = []\n\t\tlet systemPrompt: string | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// Extract system messages separately (Anthropic uses dedicated system parameter)\n\t\t\tif (msg.role === \"system\") {\n\t\t\t\tconst content =\n\t\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: (msg.content as TextPart[]).map((p) => p.text).join(\"\\n\")\n\n\t\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${content}` : content\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Skip tool role messages (not directly supported in basic implementation)\n\t\t\tif (msg.role === \"tool\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Map user and assistant messages\n\t\t\tif (msg.role === \"user\" || msg.role === \"assistant\") {\n\t\t\t\tif (typeof msg.content === \"string\") {\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: msg.content,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// Handle multimodal content (text + images)\n\t\t\t\t\tconst contentBlocks = (msg.content as Array<TextPart | ImagePart>).map((part) => {\n\t\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\ttext: part.text,\n\t\t\t\t\t\t\t} as TextBlockParam\n\t\t\t\t\t\t} else if (part.type === \"image_url\") {\n\t\t\t\t\t\t\t// Note: Anthropic requires base64-encoded images\n\t\t\t\t\t\t\t// This is a simplified version - production code should handle URL->base64 conversion\n\t\t\t\t\t\t\tconst imageUrl = part.url\n\n\t\t\t\t\t\t\t// Check if it's already base64 data\n\t\t\t\t\t\t\tif (imageUrl.startsWith(\"data:image\")) {\n\t\t\t\t\t\t\t\tconst matches = imageUrl.match(/data:image\\/(\\w+);base64,(.+)/)\n\t\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\t\tconst [, mediaType, data] = matches\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\ttype: \"image\" as const,\n\t\t\t\t\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"base64\" as const,\n\t\t\t\t\t\t\t\t\t\t\tmedia_type: `image/${mediaType}` as\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/jpeg\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/png\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/gif\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/webp\",\n\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} as ImageBlockParam\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// For non-base64 URLs, throw error (or you could fetch and convert)\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"[AnthropicMapper] Image URLs must be base64-encoded. \" +\n\t\t\t\t\t\t\t\t\t\"Convert to data:image/[type];base64,[data] format.\",\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { type: \"text\" as const, text: \"\" } as TextBlockParam\n\t\t\t\t\t})\n\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: contentBlocks,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Anthropic requires alternating user/assistant roles\n\t\t// Validate and fix if needed\n\t\tconst validated = this.ensureAlternatingRoles(anthropicMessages)\n\n\t\treturn {\n\t\t\tmessages: validated,\n\t\t\tsystem: systemPrompt,\n\t\t}\n\t}\n\n\t/**\n\t * Ensures messages alternate between user and assistant roles.\n\t * Anthropic API requires this constraint.\n\t */\n\tprivate ensureAlternatingRoles(messages: MessageParam[]): MessageParam[] {\n\t\tif (messages.length === 0) return messages\n\n\t\tconst result: MessageParam[] = []\n\t\tlet lastRole: \"user\" | \"assistant\" | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// If same role appears consecutively, merge the messages\n\t\t\tif (lastRole === msg.role && result.length > 0) {\n\t\t\t\tconst lastMsg = result[result.length - 1]\n\n\t\t\t\t// Merge content\n\t\t\t\tif (typeof lastMsg.content === \"string\" && typeof msg.content === \"string\") {\n\t\t\t\t\tlastMsg.content = `${lastMsg.content}\\n${msg.content}`\n\t\t\t\t} else {\n\t\t\t\t\t// For array content, concatenate\n\t\t\t\t\tconst lastContent = Array.isArray(lastMsg.content)\n\t\t\t\t\t\t? lastMsg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: lastMsg.content as string }]\n\t\t\t\t\tconst newContent = Array.isArray(msg.content)\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: msg.content as string }]\n\t\t\t\t\tlastMsg.content = [...lastContent, ...newContent]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult.push(msg)\n\t\t\t\tlastRole = msg.role\n\t\t\t}\n\t\t}\n\n\t\t// Ensure first message is from user (Anthropic requirement)\n\t\tif (result.length > 0 && result[0].role !== \"user\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"[AnthropicMapper] First message must be from user. Anthropic API requires conversations to start with a user message.\",\n\t\t\t)\n\t\t}\n\n\t\treturn result\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicMapper } from \"./mapper\"\nimport { betaZodOutputFormat } from \"@anthropic-ai/sdk/helpers/beta/zod\"\nimport { ANTHROPIC_MODEL_MAP, AnthropicModel } from \"@/types/model\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class AnthropicRequestBuilder extends RequestBuilder {\n\tprivate mapper = new AnthropicMapper()\n\n\taddModel(model: AnthropicModel): RequestBuilder {\n\t\tthis.request.model = ANTHROPIC_MODEL_MAP[model]\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\t// Add task as a user message\n\t\tconst message = {\n\t\t\trole: \"user\" as const,\n\t\t\tcontent: task,\n\t\t}\n\n\t\tif (!this.request.messages) {\n\t\t\tthis.request.messages = []\n\t\t}\n\n\t\tthis.request.messages.push(message)\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst { messages: anthropicMessages, system } = this.mapper.toMessages(messages)\n\n\t\tthis.request.messages = anthropicMessages\n\n\t\tif (system) {\n\t\t\tthis.request.system = system\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.betas = [\"structured-outputs-2025-11-13\"]\n\t\tthis.request.output_format = betaZodOutputFormat(schema)\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tinput_schema: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n\n\tbuild() {\n\t\t// Anthropic requires max_tokens parameter\n\t\tif (!this.request.max_tokens) {\n\t\t\tthis.request.max_tokens = 1024\n\t\t}\n\n\t\treturn this.request\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicDefaultClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.messages.create(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicParserClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.beta.messages.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { AnthropicDefaultClient } from \"./default\"\nimport { AnthropicParserClient } from \"./parser\"\n\nexport class AnthropicClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\treturn request.output_format ? new AnthropicParserClient() : new AnthropicDefaultClient()\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ParsedOutputHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.parsed_output) {\n\t\t\tresponseContext.setResponse(providerResponse.parsed_output)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst content = providerResponse.content\n\t\t\t.filter((block: any) => block.type === \"text\")\n\t\t\t.map((block: any) => (block.type === \"text\" ? block.text : \"\"))\n\t\t\t.join(\"\")\n\n\t\tif (content) {\n\t\t\tresponseContext.setResponse(content)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Tool } from \"@/types/tool\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { AnthropicDefaultClient } from \"../client/default\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class ToolUseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: AnthropicDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.tools = tools\n\t\tthis.request = request\n\t\tthis.client = new AnthropicDefaultClient()\n\t}\n\n\tprivate async executeToolCalls(tools: Tool[], toolUseBlocks: Anthropic.ToolUseBlock[]): Promise<any[]> {\n\t\tconst results: any[] = []\n\n\t\tfor (const toolUse of toolUseBlocks) {\n\t\t\tconst tool = tools?.find((t) => t.name === toolUse.name)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: `Unknown tool: ${toolUse.name}` }),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await tool.invoke(toolUse.input)\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify(result),\n\t\t\t\t})\n\t\t\t} catch (error: any) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: error.message }),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tlet providerResponse = responseContext.providerResponse\n\n\t\twhile (providerResponse.stop_reason === \"tool_use\") {\n\t\t\tconst toolUseBlocks = providerResponse.content.filter(\n\t\t\t\t(block: any): block is Anthropic.ToolUseBlock => block.type === \"tool_use\",\n\t\t\t)\n\n\t\t\t// Add assistant's response to messages\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: providerResponse.content,\n\t\t\t})\n\n\t\t\tconst toolResults = await this.executeToolCalls(this.tools, toolUseBlocks)\n\n\t\t\t// Add tool results as user message\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: toolResults,\n\t\t\t})\n\n\t\t\t// Call model again\n\t\t\tconst toolCallingResponse = await this.client.send(this.request)\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class UnhandledResponseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst id = providerResponse?.id ?? \"unknown\"\n\t\tconst model = providerResponse?.model ?? \"unknown\"\n\n\t\tthrow new Error(`No response handler matched. response_id=${id} model=${model}`)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicRequestBuilder } from \"./builder\"\nimport { AnthropicClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { ParsedOutputHandler } from \"./response-handler/parsed-output\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { ToolUseHandler } from \"./response-handler/tool-use\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\nimport { UnhandledResponseHandler } from \"./response-handler/undhandled\"\n\nexport class AnthropicEndpoint extends Endpoint {\n\trequestBuilder: RequestBuilder = new AnthropicRequestBuilder()\n\n\tasync sendRequest(command: Command) {\n\t\tconst request = this.buildRequest(command)\n\t\tconst client = AnthropicClientResolver.resolve(request)\n\t\tconst response = await client.send(request)\n\n\t\tconst responseContext = new ResponseContext()\n\t\tresponseContext.setProviderResponse(response)\n\n\t\t// response handler (chain of responsibilities)\n\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\tconst toolUseHandler: ResponseHandler = new ToolUseHandler(request, command.tools ? command.tools : [])\n\t\tconst parsedOutputHandler: ResponseHandler = new ParsedOutputHandler()\n\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\t\tconst unhandledResponseHandler: ResponseHandler = new UnhandledResponseHandler()\n\n\t\tusageHandler\n\t\t\t.setNextHandler(toolUseHandler)\n\t\t\t.setNextHandler(parsedOutputHandler)\n\t\t\t.setNextHandler(contentHandler)\n\t\t\t.setNextHandler(unhandledResponseHandler)\n\n\t\tconst responseHandler = usageHandler\n\n\t\treturn await responseHandler.handle(responseContext)\n\t}\n}\n","import { EndpointResolver } from \"@core/endpoint/endpoint-resolver\"\nimport { Endpoint } from \"@core/endpoint/endpoint\"\nimport { OPENAI_MODELS, ANTHROPIC_MODELS } from \"@/types/model\"\nimport { OpenAIResponses } from \"./openai/endpoint\"\nimport { AnthropicEndpoint } from \"./anthropic/endpoint\"\n\nexport class DefaultEndpointResolver extends EndpointResolver {\n\tisOpenAIModel(value: string): boolean {\n\t\treturn (OPENAI_MODELS as readonly string[]).includes(value)\n\t}\n\n\tisAnthropicModel(value: string): boolean {\n\t\treturn (ANTHROPIC_MODELS as readonly string[]).includes(value)\n\t}\n\n\tresolve(model: string): Endpoint {\n\t\tif (this.isOpenAIModel(model)) {\n\t\t\treturn new OpenAIResponses()\n\t\t} else if (this.isAnthropicModel(model)) {\n\t\t\treturn new AnthropicEndpoint()\n\t\t}\n\n\t\tthrow new Error(\"Provider not found\")\n\t}\n}\n","import { RequestGateway } from \"@core/endpoint/request-gateway\"\nimport { Command } from \"@/types/command\"\nimport { DefaultEndpointResolver } from \"@providers/endpoint-resolver\"\nimport { ZodObject } from \"zod\"\nimport { Model } from \"@/types/model\"\nimport { Message } from \"@/types/message\"\n\nexport class Agent {\n\tprivate command: Command\n\tgateway: RequestGateway = new RequestGateway(new DefaultEndpointResolver())\n\n\tconstructor(command: Command) {\n\t\tthis.command = command\n\t}\n\n\tsetModel(model: Model) {\n\t\tthis.command.model = model\n\t}\n\n\tsetMessages(messages: Message[]) {\n\t\tthis.command.messages = messages\n\t}\n\n\tsetTask(task: string) {\n\t\tthis.command.task = task\n\t}\n\n\tsetStructuredOutput(schema: ZodObject<any>) {\n\t\tthis.command.structuredOutput = schema\n\t}\n\n\tasync act(task?: string) {\n\t\tif (task) {\n\t\t\tthis.command.task = task\n\t\t}\n\t\treturn await this.gateway.invoke(this.command)\n\t}\n}\n","import z from \"zod\"\nimport { ANTHROPIC_MODELS, OPENAI_MODELS } from \"@/types/model\"\nimport { PlanNode } from \"@/types/plan\"\n\nconst ModelSchema = z.enum([...OPENAI_MODELS, ...ANTHROPIC_MODELS])\n\nconst TaskPlanNodeSchema = z.object({\n\tkind: z.literal(\"task\"),\n\ttask: z.string(),\n\tmodel: ModelSchema,\n})\n\nconst WorkflowPlanNodeSchema: z.ZodType<Extract<PlanNode, { kind: \"workflow\" }>> = z.lazy(() =>\n\tz.object({\n\t\tkind: z.literal(\"workflow\"),\n\t\tmode: z.enum([\"sequential\", \"parallel\"]),\n\t\tunits: z.array(PlanNodeSchema),\n\t}),\n)\n\nconst PlanNodeSchema: z.ZodType<PlanNode> = TaskPlanNodeSchema.or(WorkflowPlanNodeSchema)\n\nexport const PlanSchema = z.object({\n\troot: PlanNodeSchema,\n})\n","import { Workflow } from \"@core/workflow/workflow\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"../hooks/execution-hook\"\n\nexport class ParallelExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst promises = []\n\t\tfor (const u of workflow.units) {\n\t\t\tpromises.push(u.execute(hook))\n\t\t}\n\n\t\tconst results = await Promise.all(promises)\n\n\t\treturn results\n\t}\n}\n","import { ExecutionHook } from \"../hooks/execution-hook\"\nimport { Workflow } from \"../workflow\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class SequentalExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst results = []\n\t\tfor (const u of workflow.units) {\n\t\t\tresults.push(await u.execute(hook))\n\t\t}\n\n\t\treturn results\n\t}\n}\n","import { ParallelExecution } from \"./parallel\"\nimport { SequentalExecution } from \"./sequential\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class ExecutionStrategyFactory {\n\tstatic create(mode: string): WorkflowExecutionStrategy {\n\t\tlet strategy: WorkflowExecutionStrategy\n\t\tif (mode == \"parallel\") {\n\t\t\tstrategy = new ParallelExecution()\n\t\t} else {\n\t\t\tstrategy = new SequentalExecution()\n\t\t}\n\n\t\treturn strategy\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class ClusterHook implements ExecutionHook {\n\tconstructor(private hooks: ExecutionHook[]) {}\n\n\tbeforeTask(task: Task): void {\n\t\tthis.hooks.forEach((h) => h.beforeTask(task))\n\t}\n\n\tafterTask(task: Task, result: any): void {\n\t\tthis.hooks.forEach((h) => h.afterTask(task, result))\n\t}\n\n\tbeforeWorkflow(wf: Workflow) {\n\t\tthis.hooks.forEach((h) => h.beforeWorkflow(wf))\n\t}\n\n\tafterWorkflow(wf: Workflow, result: any) {\n\t\tthis.hooks.forEach((h) => h.afterWorkflow(wf, result))\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class Logger implements ExecutionHook {\n\tbeforeWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:start], Mode: ${workflow.mode}`)\n\t}\n\n\tafterWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:end], Mode: ${workflow.mode}`)\n\t}\n\n\tbeforeTask(task: Task) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n\n\tafterTask(task: Task, result: any) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n}\n","import { ClusterHook } from \"./cluster\"\nimport { ExecutionHook } from \"./execution-hook\"\nimport { Logger } from \"./logger\"\n\nconst loggingHook: ExecutionHook = new Logger()\n\nconst defaultHooks = [loggingHook]\nconst clusterHook: ExecutionHook = new ClusterHook(defaultHooks)\n\nexport const DEFAULT_CLUSTER_HOOK = clusterHook\n","import { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionStrategyFactory } from \"@core/workflow/execution/strategy-factory\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Workflow extends WorkUnit {\n\tconstructor(\n\t\treadonly mode: \"parallel\" | \"sequential\",\n\t\treadonly units: WorkUnit[],\n\t) {\n\t\tsuper()\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeWorkflow(this)\n\n\t\tconst executionStrategy: WorkflowExecutionStrategy = ExecutionStrategyFactory.create(this.mode)\n\t\tconst result = await executionStrategy.execute(this, hook)\n\n\t\thook.afterWorkflow(this, result)\n\t\treturn result\n\t}\n}\n","import { Model, Command, Agent } from \"@/index\"\nimport { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Task extends WorkUnit {\n\tconstructor(\n\t\tprivate task: string,\n\t\tprivate model: Model,\n\t) {\n\t\tsuper()\n\t}\n\n\tgetTask() {\n\t\treturn this.task\n\t}\n\n\tgetModel() {\n\t\treturn this.model\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeTask(this)\n\n\t\tconst command: Command = {\n\t\t\tmodel: this.model,\n\t\t\ttask: this.task,\n\t\t}\n\n\t\tconst agent = new Agent(command)\n\t\tconst result = await agent.act(this.task)\n\n\t\thook.afterTask(this, result)\n\t\treturn result\n\t}\n}\n","import { Plan, PlanNode } from \"@/types/plan\"\nimport { Workflow } from \"./workflow\"\nimport { WorkUnit } from \"./work-unit\"\nimport { Task } from \"./task\"\n\nexport class PlanWorkflowMapper {\n\tstatic fromPlan(plan: Plan): Workflow {\n\t\treturn this.fromNode(plan.root)\n\t}\n\n\tprivate static fromNode(node: PlanNode): Workflow {\n\t\tif (node.kind !== \"workflow\") {\n\t\t\tthrow new Error(\"Root must be workflow\")\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n\n\tprivate static mapNode(node: PlanNode): WorkUnit {\n\t\tif (node.kind === \"task\") {\n\t\t\treturn new Task(node.task, node.model)\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n}\n","import { Plan } from \"@/types/plan\"\nimport { Workflow } from \"@core/workflow/workflow\"\nimport { Agent } from \"./agent\"\nimport { Command } from \"@/types/command\"\nimport { PlanSchema } from \"@core/workflow/schema/plan\"\nimport { PlanWorkflowMapper } from \"@core/workflow/mapper\"\n\nconst PROMPT = `You are a planner.\n\nRules:\n- Use 'parallel' for the task that can be run in parallel.\n- Pick model based on the task complexity\n- Keep prompts actionable.\n- Don't ask user for any input, just do the thing with available data you have.\n`\n\nexport class PlanningAgent extends Agent {\n\tconstructor(command: Command) {\n\t\tsuper(command)\n\t}\n\n\tasync planFromGoal(goal: string): Promise<Workflow> {\n\t\tthis.setStructuredOutput(PlanSchema)\n\t\tconst plan: Plan = await this.act(`${PROMPT}\\nGoal: ${goal}`)\n\t\treturn PlanWorkflowMapper.fromPlan(plan)\n\t}\n}\n"],"mappings":"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","names":["OpenAI","Anthropic","ContentHandler","UsageHandler","UsageHandler","ContentHandler"]}
1
+ {"version":3,"sources":["../src/core/workflow/work-unit.ts","../src/core/endpoint/request-gateway.ts","../src/core/endpoint/endpoint-resolver.ts","../src/types/model.ts","../src/core/command-handler/capability.ts","../src/core/command-handler/messages.ts","../src/core/command-handler/task.ts","../src/core/command-handler/model.ts","../src/core/command-handler/structured-output.ts","../src/core/command-handler/tools.ts","../src/core/endpoint/endpoint.ts","../src/core/endpoint/request-builder.ts","../src/providers/openai/mapper.ts","../src/providers/openai/builder.ts","../src/providers/openai/client/default.ts","../src/providers/openai/client/parser.ts","../src/providers/openai/client/resolver.ts","../src/core/endpoint/response-handler.ts","../src/providers/openai/response-handler/output-parsed.ts","../src/providers/openai/response-handler/content.ts","../src/providers/openai/response-handler/output-text.ts","../src/core/endpoint/usage.ts","../src/providers/openai/response-handler/function-calls.ts","../src/core/endpoint/response-context.ts","../src/providers/openai/response-handler/usage.ts","../src/providers/openai/endpoint.ts","../src/providers/anthropic/mapper.ts","../src/providers/anthropic/builder.ts","../src/providers/anthropic/client/default.ts","../src/providers/anthropic/client/parser.ts","../src/providers/anthropic/client/resolver.ts","../src/providers/anthropic/response-handler/parsed-output.ts","../src/providers/anthropic/response-handler/content.ts","../src/providers/anthropic/response-handler/tool-use.ts","../src/providers/anthropic/response-handler/usage.ts","../src/providers/anthropic/response-handler/undhandled.ts","../src/providers/anthropic/endpoint.ts","../src/providers/endpoint-resolver.ts","../src/core/agents/agent.ts","../src/core/workflow/schema/plan.ts","../src/core/workflow/execution/parallel.ts","../src/core/workflow/execution/sequential.ts","../src/core/workflow/execution/strategy-factory.ts","../src/core/workflow/hooks/cluster.ts","../src/core/workflow/hooks/logger.ts","../src/core/workflow/hooks/index.ts","../src/core/workflow/workflow.ts","../src/core/workflow/task.ts","../src/core/workflow/mapper.ts","../src/core/agents/planner.ts"],"sourcesContent":["import { ExecutionHook } from \"./hooks/execution-hook\"\n\nexport abstract class WorkUnit {\n\tconstructor() {}\n\n\tabstract execute(hook: ExecutionHook): Promise<any>\n}\n","import { Command } from \"@/types/command\"\nimport { Endpoint } from \"./endpoint\"\nimport { EndpointResolver } from \"./endpoint-resolver\"\n\nexport class RequestGateway {\n\tendpoint!: Endpoint\n\n\tconstructor(readonly endpointResolver: EndpointResolver) {}\n\n\tasync invoke(command: Command): Promise<any> {\n\t\tthis.endpoint = this.endpointResolver.resolve(command.model)\n\t\treturn await this.endpoint.sendRequest(command)\n\t}\n}\n","import { Endpoint } from \"./endpoint\"\n\nexport abstract class EndpointResolver {\n\tabstract resolve(model: string): Endpoint\n}\n","export const OPENAI_MODELS = [\"gpt-5\", \"gpt-5-mini\", \"gpt-5-nano\", \"gpt-5.1\"] as const\n\nexport type OpenAIModel = (typeof OPENAI_MODELS)[number]\n\nconst latest_sonnet = \"claude-sonnet-4-5-20250929\"\nconst latest_haiku = \"claude-haiku-4-5-20251001\"\nconst latest_opus = \"claude-opus-4-5-20251101\"\n\nexport const ANTHROPIC_MODELS = [\"claude-sonnet-4.5\", \"claude-haiku-4.5\", \"claude-opus-4.5\"] as const\n\nexport const ANTHROPIC_MODEL_MAP = {\n\t\"claude-sonnet-4.5\": latest_sonnet,\n\t\"claude-haiku-4.5\": latest_haiku,\n\t\"claude-opus-4.5\": latest_opus,\n} as const\n\nexport type AnthropicModel = (typeof ANTHROPIC_MODELS)[number]\n\nexport type Model = OpenAIModel | AnthropicModel\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\n\nexport abstract class CapabilityHandler {\n\tabstract nextHandler: CapabilityHandler\n\n\tsetNextHandler(capability: CapabilityHandler): CapabilityHandler {\n\t\tthis.nextHandler = capability\n\t\treturn this.nextHandler\n\t}\n\n\tabstract apply(command: Command, requestBuilder: RequestBuilder): any\n\n\thandle(command: Command, builder: RequestBuilder) {\n\t\tthis.apply(command, builder)\n\n\t\tif (this.nextHandler) {\n\t\t\tthis.nextHandler.handle(command, builder)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class MessagesHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.messages) {\n\t\t\tbuilder.addMessages(command.messages)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class TaskHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.task) {\n\t\t\tbuilder.addTask(command.task)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\nimport { Command } from \"@/types/command\"\n\nexport class ModelHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.model) {\n\t\t\tbuilder.addModel(command.model)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { CapabilityHandler } from \"./capability\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\n\nexport class StructuredOutputlHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, builder: RequestBuilder) {\n\t\tif (command.structuredOutput) {\n\t\t\tbuilder.addStructuredOutput(command.structuredOutput)\n\t\t}\n\t}\n}\n","import { Command } from \"@/types/command\"\nimport { RequestBuilder } from \"../endpoint/request-builder\"\nimport { CapabilityHandler } from \"./capability\"\n\nexport class ToolsHandler extends CapabilityHandler {\n\tnextHandler!: CapabilityHandler\n\n\tapply(command: Command, requestBuilder: RequestBuilder) {\n\t\tif (command.tools && command.tools.length > 0) {\n\t\t\trequestBuilder.addTools(command.tools)\n\t\t}\n\t}\n}\n","import { RequestBuilder } from \"./request-builder\"\nimport { CapabilityHandler } from \"../command-handler/capability\"\nimport { MessagesHandler } from \"../command-handler/messages\"\nimport { TaskHandler } from \"../command-handler/task\"\nimport { ModelHandler } from \"../command-handler/model\"\nimport { StructuredOutputlHandler } from \"../command-handler/structured-output\"\nimport { Command } from \"@/types/command\"\nimport { ToolsHandler } from \"../command-handler/tools\"\n\nexport abstract class Endpoint {\n\tabstract requestBuilder: RequestBuilder\n\tcommand: Command | null = null\n\n\tbuildRequest(command: Command): any {\n\t\tthis.command = command\n\n\t\tthis.requestBuilder.initialize()\n\n\t\tconst messagesHandler: CapabilityHandler = new MessagesHandler()\n\t\tconst taskHandler: CapabilityHandler = new TaskHandler()\n\t\tconst modelHandler: CapabilityHandler = new ModelHandler()\n\t\tconst structuredOutputHandler: CapabilityHandler = new StructuredOutputlHandler()\n\t\tconst toolsHandler: CapabilityHandler = new ToolsHandler()\n\n\t\tmessagesHandler\n\t\t\t.setNextHandler(taskHandler)\n\t\t\t.setNextHandler(modelHandler)\n\t\t\t.setNextHandler(structuredOutputHandler)\n\t\t\t.setNextHandler(toolsHandler)\n\n\t\tmessagesHandler.handle(command, this.requestBuilder)\n\n\t\treturn this.requestBuilder.build()\n\t}\n\n\tabstract sendRequest(providerRequest: any): any\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\nimport { ZodObject } from \"zod\"\n\nexport abstract class RequestBuilder {\n\trequest: any\n\n\tinitialize() {\n\t\tthis.request = {}\n\t}\n\n\tabstract addModel(model: string): RequestBuilder\n\tabstract addTask(task: string): RequestBuilder\n\tabstract addMessages(messages: Message[]): RequestBuilder\n\tabstract addStructuredOutput(schema: ZodObject<any>): RequestBuilder\n\tabstract addTools(tools: Tool[]): RequestBuilder\n\n\tbuild() {\n\t\treturn this.request\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { Tool } from \"@/types/tool\"\n\nexport interface ToolDefinition {\n\ttype: \"function\"\n\tname: string\n\tdescription: string\n\tparameters: any\n\tstrict?: boolean\n}\n\nexport class OpenAIResponsesMapper {\n\t/**\n\t * Convert domain Messages to Responses API instructions format\n\t *\n\t * The Responses API uses 'instructions' (system prompt) rather than messages array.\n\t * For multi-turn conversations, use conversation.id or previous_response_id parameters.\n\t */\n\ttoInstructions(messages: Message[]): string {\n\t\tif (messages.length === 0) {\n\t\t\tthrow new Error(\"[ResponsesMapper] Cannot create instructions from empty messages\")\n\t\t}\n\n\t\t// Find system message if exists, otherwise use first user message as context\n\t\tconst systemMessage = messages.find((m) => m.role === \"system\")\n\n\t\tif (systemMessage) {\n\t\t\treturn typeof systemMessage.content === \"string\"\n\t\t\t\t? systemMessage.content\n\t\t\t\t: this.extractTextFromContent(systemMessage.content)\n\t\t}\n\n\t\t// Fallback: create instructions from context\n\t\treturn \"You are a helpful assistant.\"\n\t}\n\n\t/**\n\t * Extract the user's input from messages\n\t * Returns the last user message content for use in prompt variables.\n\t * In Responses API, the actual user query is typically passed via prompt variables\n\t * or handled through conversation continuation.\n\t */\n\textractUserInput(messages: Message[]): string {\n\t\tconst userMessages = messages.filter((m) => m.role === \"user\")\n\n\t\tif (userMessages.length === 0) {\n\t\t\treturn \"\"\n\t\t}\n\n\t\tconst lastUserMessage = userMessages[userMessages.length - 1]\n\t\treturn typeof lastUserMessage.content === \"string\"\n\t\t\t? lastUserMessage.content\n\t\t\t: this.extractTextFromContent(lastUserMessage.content)\n\t}\n\n\tprivate extractTextFromContent(content: any[]): string {\n\t\treturn content\n\t\t\t.filter((part) => part.type === \"text\")\n\t\t\t.map((part) => part.text)\n\t\t\t.join(\" \")\n\t}\n\n\t/**\n\t * Map tools to Responses API format\n\t */\n\ttoTools(tools: Tool[]): ToolDefinition[] {\n\t\treturn tools.map((t) => ({\n\t\t\ttype: \"function\",\n\t\t\tname: t.name,\n\t\t\tdescription: t.description,\n\t\t\tparameters: t.schema,\n\t\t\tstrict: true, // Enable strict mode by default for better validation\n\t\t}))\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesMapper } from \"./mapper\"\nimport { zodTextFormat } from \"openai/helpers/zod\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class OpenAIResponsesBuilder extends RequestBuilder {\n\tconstructor(private mapper = new OpenAIResponsesMapper()) {\n\t\tsuper()\n\t}\n\n\taddModel(model: string): RequestBuilder {\n\t\tthis.request.model = model\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\tthis.request.input = task\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst instructions = this.mapper.toInstructions(messages)\n\t\t// Set optional instructions if there's a system message\n\t\tif (instructions && instructions !== \"You are a helpful assistant.\") {\n\t\t\tthis.request.instructions = instructions\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.text = {\n\t\t\tformat: zodTextFormat(schema, \"outputSchema\"),\n\t\t}\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\ttype: \"function\" as const,\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tparameters: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIDefaultClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.create(request)\n\t}\n}\n","import OpenAI from \"openai\"\nimport { SendingClient } from \"@core/endpoint/client\"\n\nexport class OpenAIParserClient implements SendingClient {\n\tconstructor(private client = new OpenAI()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.responses.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { OpenAIDefaultClient } from \"./default\"\nimport { OpenAIParserClient } from \"./parser\"\n\nexport class OpenAIClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\tif (request.text && request.text.format) {\n\t\t\treturn new OpenAIParserClient()\n\t\t} else {\n\t\t\treturn new OpenAIDefaultClient()\n\t\t}\n\t}\n}\n","import { ResponseContext } from \"./response-context\"\n\nexport abstract class ResponseHandler {\n\tabstract nextHandler: ResponseHandler\n\n\tsetNextHandler(responseHandler: ResponseHandler): ResponseHandler {\n\t\tthis.nextHandler = responseHandler\n\t\treturn this.nextHandler\n\t}\n\n\tabstract handle(responseContext: ResponseContext): Promise<ResponseContext>\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputParsedHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_parsed) {\n\t\t\tresponseContext.setResponse(providerResponse.output_parsed)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst firstOutput = providerResponse.output?.[0]\n\t\tif (firstOutput && \"content\" in firstOutput) {\n\t\t\tconst firstContent = firstOutput.content?.[0]\n\t\t\tif (firstContent && \"text\" in firstContent) {\n\t\t\t\tresponseContext.setResponse(firstContent.text)\n\t\t\t\treturn responseContext\n\t\t\t}\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class OutputTextHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.output_text) {\n\t\t\tresponseContext.setResponse(providerResponse.output_text)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","export class UsageEntry {\n\tinputTokens: number\n\toutputTokens: number\n\tmodel: string\n\ttotalTokens: number\n\n\tconstructor(inputTokens: number, outputTokens: number, model: string) {\n\t\tthis.inputTokens = inputTokens\n\t\tthis.outputTokens = outputTokens\n\t\tthis.model = model\n\t\tthis.totalTokens = inputTokens + outputTokens\n\t}\n}\n","import { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OpenAIDefaultClient } from \"../client/default\"\nimport { Tool } from \"@/types/tool\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport interface ToolCall {\n\tcall_id: string\n\tname: string\n\targuments: string | Record<string, any>\n}\n\nexport interface ToolResult {\n\ttype: \"function_call_output\"\n\tcall_id: string\n\toutput: string\n}\n\nexport class FunctionCallsHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: OpenAIDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.request = request\n\t\tthis.tools = tools\n\t\tthis.client = new OpenAIDefaultClient()\n\t}\n\n\tprivate hasToolCalls(response: any): boolean {\n\t\treturn response.output?.some((item: any) => item.type === \"function_call\")\n\t}\n\n\tprivate extractToolCalls(response: any): any[] {\n\t\treturn response.output?.filter((item: any) => item.type === \"function_call\") || []\n\t}\n\n\tprivate resolveTool(call: ToolCall, tools: Tool[]): Tool | null {\n\t\treturn tools.find((t) => t.name === call.name) ?? null\n\t}\n\n\tprivate async executeTool(tool: Tool, rawArgs: ToolCall[\"arguments\"]): Promise<any> {\n\t\tconst args = typeof rawArgs === \"string\" ? JSON.parse(rawArgs) : rawArgs\n\n\t\treturn await tool.invoke(args)\n\t}\n\n\tprivate formatToolResult(callId: string, payload: any): ToolResult {\n\t\treturn {\n\t\t\ttype: \"function_call_output\",\n\t\t\tcall_id: callId,\n\t\t\toutput: JSON.stringify(payload),\n\t\t}\n\t}\n\n\tprivate async executeToolCalls(toolCalls: ToolCall[], tools: Tool[]): Promise<ToolResult[]> {\n\t\tconst results: ToolResult[] = []\n\n\t\tfor (const call of toolCalls) {\n\t\t\tconst tool = this.resolveTool(call, tools)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: `Unknown tool: ${call.name}`,\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await this.executeTool(tool, call.arguments)\n\t\t\t\tresults.push(this.formatToolResult(call.call_id, result))\n\t\t\t} catch (err: any) {\n\t\t\t\tresults.push(\n\t\t\t\t\tthis.formatToolResult(call.call_id, {\n\t\t\t\t\t\terror: err.message ?? \"Tool execution failed\",\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext) {\n\t\tlet providerResponse = responseContext.providerResponse\n\t\tlet toolCallingResponse: any\n\t\twhile (this.hasToolCalls(providerResponse)) {\n\t\t\tconst toolCalls = this.extractToolCalls(providerResponse)\n\n\t\t\tconst toolResults = await this.executeToolCalls(toolCalls, this.tools)\n\n\t\t\t// Continue the conversation with tool results\n\t\t\tthis.request.input = toolResults\n\t\t\tthis.request.previous_response_id = providerResponse.id\n\n\t\t\ttoolCallingResponse = await this.client.send(this.request)\n\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tresponseContext.setResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { UsageEntry } from \"./usage\"\n\nexport class ResponseContext {\n\tproviderResponse: any\n\tresponse?: any\n\tusageEntries: UsageEntry[] = []\n\n\tsetProviderResponse(providerResponse: any): ResponseContext {\n\t\tthis.providerResponse = providerResponse\n\t\treturn this\n\t}\n\n\taddUsageEntry(usageEntry: UsageEntry): ResponseContext {\n\t\tthis.usageEntries.push(usageEntry)\n\t\treturn this\n\t}\n\n\tsetResponse(response: any): ResponseContext {\n\t\tthis.response = response\n\t\treturn this\n\t}\n\n\tgetResponse(): any {\n\t\treturn this.response\n\t}\n\n\tgetUsageEntries(): UsageEntry [] {\n\t\treturn this.usageEntries\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { OpenAIResponsesBuilder } from \"./builder\"\nimport { OpenAIClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { OutputParsedHandler } from \"./response-handler/output-parsed\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { OutputTextHandler } from \"./response-handler/output-text\"\nimport { FunctionCallsHandler } from \"./response-handler/function-calls\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\nimport { MozaikResponse } from \"@/types/response\"\n\nexport class OpenAIResponses extends Endpoint {\n\trequestBuilder: RequestBuilder = new OpenAIResponsesBuilder()\n\n\tconstructor() {\n\t\tsuper()\n\t}\n\n\tasync sendRequest(command: Command): Promise<MozaikResponse> {\n\t\ttry {\n\t\t\tconst request = this.buildRequest(command)\n\t\t\tconst client = OpenAIClientResolver.resolve(request)\n\t\t\tconst response = await client.send(request)\n\n\t\t\tconst responseContext = new ResponseContext()\n\t\t\tresponseContext.setProviderResponse(response)\n\n\t\t\t// response handler (chain of responsibilities)\n\t\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\t\tconst functionCallsHandler: ResponseHandler = new FunctionCallsHandler(\n\t\t\t\trequest,\n\t\t\t\tcommand.tools ? command.tools : [],\n\t\t\t)\n\t\t\tconst outputParsedHandler: ResponseHandler = new OutputParsedHandler()\n\t\t\tconst outputTextHandler: ResponseHandler = new OutputTextHandler()\n\t\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\n\t\t\tusageHandler\n\t\t\t\t.setNextHandler(functionCallsHandler)\n\t\t\t\t.setNextHandler(outputParsedHandler)\n\t\t\t\t.setNextHandler(outputTextHandler)\n\t\t\t\t.setNextHandler(contentHandler)\n\n\t\t\tconst responseHandler = usageHandler\n\n\t\t\tconst result = await responseHandler.handle(responseContext)\n\n\t\t\tconst usageEntries = result.getUsageEntries().map(e => ({\n\t\t\t\tinputTokens: e.inputTokens,\n\t\t\t\toutputTokens: e.outputTokens,\n\t\t\t\tmodel: e.model\n\t\t\t}))\n\n\t\t\treturn {\n\t\t\t\tdata: result.getResponse(),\n\t\t\t\tusageEntries: usageEntries\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn(\"[OpenAIProvider] Responses API request failed:\", error)\n\t\t\tthrow error\n\t\t}\n\t}\n}\n","import { Message, TextPart, ImagePart } from \"@/types/message\"\nimport type { MessageParam, TextBlockParam, ImageBlockParam } from \"@anthropic-ai/sdk/resources/messages\"\n\nexport class AnthropicMapper {\n\t/**\n\t * Transforms domain messages to Anthropic API format.\n\t * Separates system messages from conversation messages.\n\t */\n\ttoMessages(messages: Message[]): { messages: MessageParam[]; system?: string } {\n\t\tconst anthropicMessages: MessageParam[] = []\n\t\tlet systemPrompt: string | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// Extract system messages separately (Anthropic uses dedicated system parameter)\n\t\t\tif (msg.role === \"system\") {\n\t\t\t\tconst content =\n\t\t\t\t\ttypeof msg.content === \"string\"\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: (msg.content as TextPart[]).map((p) => p.text).join(\"\\n\")\n\n\t\t\t\tsystemPrompt = systemPrompt ? `${systemPrompt}\\n\\n${content}` : content\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Skip tool role messages (not directly supported in basic implementation)\n\t\t\tif (msg.role === \"tool\") {\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// Map user and assistant messages\n\t\t\tif (msg.role === \"user\" || msg.role === \"assistant\") {\n\t\t\t\tif (typeof msg.content === \"string\") {\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: msg.content,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\t// Handle multimodal content (text + images)\n\t\t\t\t\tconst contentBlocks = (msg.content as Array<TextPart | ImagePart>).map((part) => {\n\t\t\t\t\t\tif (part.type === \"text\") {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\ttype: \"text\" as const,\n\t\t\t\t\t\t\t\ttext: part.text,\n\t\t\t\t\t\t\t} as TextBlockParam\n\t\t\t\t\t\t} else if (part.type === \"image_url\") {\n\t\t\t\t\t\t\t// Note: Anthropic requires base64-encoded images\n\t\t\t\t\t\t\t// This is a simplified version - production code should handle URL->base64 conversion\n\t\t\t\t\t\t\tconst imageUrl = part.url\n\n\t\t\t\t\t\t\t// Check if it's already base64 data\n\t\t\t\t\t\t\tif (imageUrl.startsWith(\"data:image\")) {\n\t\t\t\t\t\t\t\tconst matches = imageUrl.match(/data:image\\/(\\w+);base64,(.+)/)\n\t\t\t\t\t\t\t\tif (matches) {\n\t\t\t\t\t\t\t\t\tconst [, mediaType, data] = matches\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\ttype: \"image\" as const,\n\t\t\t\t\t\t\t\t\t\tsource: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"base64\" as const,\n\t\t\t\t\t\t\t\t\t\t\tmedia_type: `image/${mediaType}` as\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/jpeg\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/png\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/gif\"\n\t\t\t\t\t\t\t\t\t\t\t\t| \"image/webp\",\n\t\t\t\t\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t} as ImageBlockParam\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// For non-base64 URLs, throw error (or you could fetch and convert)\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\"[AnthropicMapper] Image URLs must be base64-encoded. \" +\n\t\t\t\t\t\t\t\t\t\"Convert to data:image/[type];base64,[data] format.\",\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn { type: \"text\" as const, text: \"\" } as TextBlockParam\n\t\t\t\t\t})\n\n\t\t\t\t\tanthropicMessages.push({\n\t\t\t\t\t\trole: msg.role,\n\t\t\t\t\t\tcontent: contentBlocks,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Anthropic requires alternating user/assistant roles\n\t\t// Validate and fix if needed\n\t\tconst validated = this.ensureAlternatingRoles(anthropicMessages)\n\n\t\treturn {\n\t\t\tmessages: validated,\n\t\t\tsystem: systemPrompt,\n\t\t}\n\t}\n\n\t/**\n\t * Ensures messages alternate between user and assistant roles.\n\t * Anthropic API requires this constraint.\n\t */\n\tprivate ensureAlternatingRoles(messages: MessageParam[]): MessageParam[] {\n\t\tif (messages.length === 0) return messages\n\n\t\tconst result: MessageParam[] = []\n\t\tlet lastRole: \"user\" | \"assistant\" | undefined\n\n\t\tfor (const msg of messages) {\n\t\t\t// If same role appears consecutively, merge the messages\n\t\t\tif (lastRole === msg.role && result.length > 0) {\n\t\t\t\tconst lastMsg = result[result.length - 1]\n\n\t\t\t\t// Merge content\n\t\t\t\tif (typeof lastMsg.content === \"string\" && typeof msg.content === \"string\") {\n\t\t\t\t\tlastMsg.content = `${lastMsg.content}\\n${msg.content}`\n\t\t\t\t} else {\n\t\t\t\t\t// For array content, concatenate\n\t\t\t\t\tconst lastContent = Array.isArray(lastMsg.content)\n\t\t\t\t\t\t? lastMsg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: lastMsg.content as string }]\n\t\t\t\t\tconst newContent = Array.isArray(msg.content)\n\t\t\t\t\t\t? msg.content\n\t\t\t\t\t\t: [{ type: \"text\" as const, text: msg.content as string }]\n\t\t\t\t\tlastMsg.content = [...lastContent, ...newContent]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult.push(msg)\n\t\t\t\tlastRole = msg.role\n\t\t\t}\n\t\t}\n\n\t\t// Ensure first message is from user (Anthropic requirement)\n\t\tif (result.length > 0 && result[0].role !== \"user\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"[AnthropicMapper] First message must be from user. Anthropic API requires conversations to start with a user message.\",\n\t\t\t)\n\t\t}\n\n\t\treturn result\n\t}\n}\n","import { Message } from \"@/types/message\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicMapper } from \"./mapper\"\nimport { betaZodOutputFormat } from \"@anthropic-ai/sdk/helpers/beta/zod\"\nimport { ANTHROPIC_MODEL_MAP, AnthropicModel } from \"@/types/model\"\nimport { ZodObject } from \"zod\"\nimport { Tool } from \"@/types/tool\"\n\nexport class AnthropicRequestBuilder extends RequestBuilder {\n\tprivate mapper = new AnthropicMapper()\n\n\taddModel(model: AnthropicModel): RequestBuilder {\n\t\tthis.request.model = ANTHROPIC_MODEL_MAP[model]\n\t\treturn this\n\t}\n\n\taddTask(task: string): RequestBuilder {\n\t\t// Add task as a user message\n\t\tconst message = {\n\t\t\trole: \"user\" as const,\n\t\t\tcontent: task,\n\t\t}\n\n\t\tif (!this.request.messages) {\n\t\t\tthis.request.messages = []\n\t\t}\n\n\t\tthis.request.messages.push(message)\n\t\treturn this\n\t}\n\n\taddMessages(messages: Message[]): RequestBuilder {\n\t\tconst { messages: anthropicMessages, system } = this.mapper.toMessages(messages)\n\n\t\tthis.request.messages = anthropicMessages\n\n\t\tif (system) {\n\t\t\tthis.request.system = system\n\t\t}\n\n\t\treturn this\n\t}\n\n\taddStructuredOutput(schema: ZodObject): RequestBuilder {\n\t\tthis.request.betas = [\"structured-outputs-2025-11-13\"]\n\t\tthis.request.output_format = betaZodOutputFormat(schema)\n\t\treturn this\n\t}\n\n\taddTools(tools: Tool[]): RequestBuilder {\n\t\tthis.request.tools = tools.map((tool) => ({\n\t\t\tname: tool.name,\n\t\t\tdescription: tool.description,\n\t\t\tinput_schema: tool.schema,\n\t\t}))\n\t\treturn this\n\t}\n\n\tbuild() {\n\t\t// Anthropic requires max_tokens parameter\n\t\tif (!this.request.max_tokens) {\n\t\t\tthis.request.max_tokens = 1024\n\t\t}\n\n\t\treturn this.request\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicDefaultClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.messages.create(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport Anthropic from \"@anthropic-ai/sdk\"\n\nexport class AnthropicParserClient implements SendingClient {\n\tconstructor(private client = new Anthropic()) {}\n\n\tasync send(request: any): Promise<any> {\n\t\treturn await this.client.beta.messages.parse(request)\n\t}\n}\n","import { SendingClient } from \"@core/endpoint/client\"\nimport { AnthropicDefaultClient } from \"./default\"\nimport { AnthropicParserClient } from \"./parser\"\n\nexport class AnthropicClientResolver {\n\tstatic resolve(request: any): SendingClient {\n\t\treturn request.output_format ? new AnthropicParserClient() : new AnthropicDefaultClient()\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ParsedOutputHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tif (providerResponse.parsed_output) {\n\t\t\tresponseContext.setResponse(providerResponse.parsed_output)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class ContentHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst content = providerResponse.content\n\t\t\t.filter((block: any) => block.type === \"text\")\n\t\t\t.map((block: any) => (block.type === \"text\" ? block.text : \"\"))\n\t\t\t.join(\"\")\n\n\t\tif (content) {\n\t\t\tresponseContext.setResponse(content)\n\t\t\treturn responseContext\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { Tool } from \"@/types/tool\"\nimport Anthropic from \"@anthropic-ai/sdk\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { AnthropicDefaultClient } from \"../client/default\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class ToolUseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\tclient: AnthropicDefaultClient\n\ttools: Tool[]\n\trequest: any\n\n\tconstructor(request: any, tools: Tool[]) {\n\t\tsuper()\n\t\tthis.tools = tools\n\t\tthis.request = request\n\t\tthis.client = new AnthropicDefaultClient()\n\t}\n\n\tprivate async executeToolCalls(tools: Tool[], toolUseBlocks: Anthropic.ToolUseBlock[]): Promise<any[]> {\n\t\tconst results: any[] = []\n\n\t\tfor (const toolUse of toolUseBlocks) {\n\t\t\tconst tool = tools?.find((t) => t.name === toolUse.name)\n\n\t\t\tif (!tool) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: `Unknown tool: ${toolUse.name}` }),\n\t\t\t\t})\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst result = await tool.invoke(toolUse.input)\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify(result),\n\t\t\t\t})\n\t\t\t} catch (error: any) {\n\t\t\t\tresults.push({\n\t\t\t\t\ttype: \"tool_result\",\n\t\t\t\t\ttool_use_id: toolUse.id,\n\t\t\t\t\tcontent: JSON.stringify({ error: error.message }),\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\treturn results\n\t}\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tlet providerResponse = responseContext.providerResponse\n\n\t\twhile (providerResponse.stop_reason === \"tool_use\") {\n\t\t\tconst toolUseBlocks = providerResponse.content.filter(\n\t\t\t\t(block: any): block is Anthropic.ToolUseBlock => block.type === \"tool_use\",\n\t\t\t)\n\n\t\t\t// Add assistant's response to messages\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"assistant\",\n\t\t\t\tcontent: providerResponse.content,\n\t\t\t})\n\n\t\t\tconst toolResults = await this.executeToolCalls(this.tools, toolUseBlocks)\n\n\t\t\t// Add tool results as user message\n\t\t\tthis.request.messages.push({\n\t\t\t\trole: \"user\",\n\t\t\t\tcontent: toolResults,\n\t\t\t})\n\n\t\t\t// Call model again\n\t\t\tconst toolCallingResponse = await this.client.send(this.request)\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(\n\t\t\t\t\ttoolCallingResponse.usage.input_tokens,\n\t\t\t\t\ttoolCallingResponse.usage.output_tokens,\n\t\t\t\t\ttoolCallingResponse.model,\n\t\t\t\t),\n\t\t\t)\n\t\t\tresponseContext.setProviderResponse(toolCallingResponse)\n\t\t\tproviderResponse = toolCallingResponse\n\t\t}\n\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { UsageEntry } from \"@core/endpoint/usage\"\n\nexport class UsageHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst usage = providerResponse.usage\n\t\tif (usage) {\n\t\t\tresponseContext.addUsageEntry(\n\t\t\t\tnew UsageEntry(usage.input_tokens, usage.output_tokens, providerResponse.model),\n\t\t\t)\n\t\t}\n\t\treturn await this.nextHandler.handle(responseContext)\n\t}\n}\n","import { ResponseContext } from \"@core/endpoint/response-context\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\n\nexport class UnhandledResponseHandler extends ResponseHandler {\n\tnextHandler!: ResponseHandler\n\n\tasync handle(responseContext: ResponseContext): Promise<ResponseContext> {\n\t\tconst providerResponse = responseContext.providerResponse\n\t\tconst id = providerResponse?.id ?? \"unknown\"\n\t\tconst model = providerResponse?.model ?? \"unknown\"\n\n\t\tthrow new Error(`No response handler matched. response_id=${id} model=${model}`)\n\t}\n}\n","import { Endpoint } from \"@core/endpoint/endpoint\"\nimport { RequestBuilder } from \"@core/endpoint/request-builder\"\nimport { AnthropicRequestBuilder } from \"./builder\"\nimport { AnthropicClientResolver } from \"./client/resolver\"\nimport { ResponseHandler } from \"@core/endpoint/response-handler\"\nimport { ParsedOutputHandler } from \"./response-handler/parsed-output\"\nimport { ContentHandler } from \"./response-handler/content\"\nimport { ToolUseHandler } from \"./response-handler/tool-use\"\nimport { Command } from \"@/types/command\"\nimport { ResponseContext } from \"@core/endpoint/response-context\"\nimport { UsageHandler } from \"./response-handler/usage\"\nimport { UnhandledResponseHandler } from \"./response-handler/undhandled\"\nimport { MozaikResponse } from \"@/types/response\"\n\nexport class AnthropicEndpoint extends Endpoint {\n\trequestBuilder: RequestBuilder = new AnthropicRequestBuilder()\n\n\tasync sendRequest(command: Command): Promise<MozaikResponse> {\n\t\tconst request = this.buildRequest(command)\n\t\tconst client = AnthropicClientResolver.resolve(request)\n\t\tconst response = await client.send(request)\n\n\t\tconst responseContext = new ResponseContext()\n\t\tresponseContext.setProviderResponse(response)\n\n\t\t// response handler (chain of responsibilities)\n\t\tconst usageHandler: ResponseHandler = new UsageHandler()\n\t\tconst toolUseHandler: ResponseHandler = new ToolUseHandler(request, command.tools ? command.tools : [])\n\t\tconst parsedOutputHandler: ResponseHandler = new ParsedOutputHandler()\n\t\tconst contentHandler: ResponseHandler = new ContentHandler()\n\t\tconst unhandledResponseHandler: ResponseHandler = new UnhandledResponseHandler()\n\n\t\tusageHandler\n\t\t\t.setNextHandler(toolUseHandler)\n\t\t\t.setNextHandler(parsedOutputHandler)\n\t\t\t.setNextHandler(contentHandler)\n\t\t\t.setNextHandler(unhandledResponseHandler)\n\n\t\tconst responseHandler = usageHandler\n\n\t\tconst result = await responseHandler.handle(responseContext)\n\n\t\tconst usageEntries = result.getUsageEntries().map(e => ({\n\t\t\tinputTokens: e.inputTokens,\n\t\t\toutputTokens: e.outputTokens,\n\t\t\tmodel: e.model\n\t\t}))\n\n\t\treturn {\n\t\t\tdata: result.getResponse(),\n\t\t\tusageEntries: usageEntries\n\t\t}\n\t}\n}\n","import { EndpointResolver } from \"@core/endpoint/endpoint-resolver\"\nimport { Endpoint } from \"@core/endpoint/endpoint\"\nimport { OPENAI_MODELS, ANTHROPIC_MODELS } from \"@/types/model\"\nimport { OpenAIResponses } from \"./openai/endpoint\"\nimport { AnthropicEndpoint } from \"./anthropic/endpoint\"\n\nexport class DefaultEndpointResolver extends EndpointResolver {\n\tisOpenAIModel(value: string): boolean {\n\t\treturn (OPENAI_MODELS as readonly string[]).includes(value)\n\t}\n\n\tisAnthropicModel(value: string): boolean {\n\t\treturn (ANTHROPIC_MODELS as readonly string[]).includes(value)\n\t}\n\n\tresolve(model: string): Endpoint {\n\t\tif (this.isOpenAIModel(model)) {\n\t\t\treturn new OpenAIResponses()\n\t\t} else if (this.isAnthropicModel(model)) {\n\t\t\treturn new AnthropicEndpoint()\n\t\t}\n\n\t\tthrow new Error(\"Provider not found\")\n\t}\n}\n","import { RequestGateway } from \"@core/endpoint/request-gateway\"\nimport { Command } from \"@/types/command\"\nimport { DefaultEndpointResolver } from \"@providers/endpoint-resolver\"\nimport { ZodObject } from \"zod\"\nimport { Model } from \"@/types/model\"\nimport { Message } from \"@/types/message\"\n\nexport class Agent {\n\tprivate command: Command\n\tgateway: RequestGateway = new RequestGateway(new DefaultEndpointResolver())\n\n\tconstructor(command: Command) {\n\t\tthis.command = command\n\t}\n\n\tsetModel(model: Model) {\n\t\tthis.command.model = model\n\t}\n\n\tsetMessages(messages: Message[]) {\n\t\tthis.command.messages = messages\n\t}\n\n\tsetTask(task: string) {\n\t\tthis.command.task = task\n\t}\n\n\tsetStructuredOutput(schema: ZodObject<any>) {\n\t\tthis.command.structuredOutput = schema\n\t}\n\n\tasync act(task?: string) {\n\t\tif (task) {\n\t\t\tthis.command.task = task\n\t\t}\n\t\treturn await this.gateway.invoke(this.command)\n\t}\n}\n","import z from \"zod\"\nimport { ANTHROPIC_MODELS, OPENAI_MODELS } from \"@/types/model\"\nimport { PlanNode } from \"@/types/plan\"\n\nconst ModelSchema = z.enum([...OPENAI_MODELS, ...ANTHROPIC_MODELS])\n\nconst TaskPlanNodeSchema = z.object({\n\tkind: z.literal(\"task\"),\n\ttask: z.string(),\n\tmodel: ModelSchema,\n})\n\nconst WorkflowPlanNodeSchema: z.ZodType<Extract<PlanNode, { kind: \"workflow\" }>> = z.lazy(() =>\n\tz.object({\n\t\tkind: z.literal(\"workflow\"),\n\t\tmode: z.enum([\"sequential\", \"parallel\"]),\n\t\tunits: z.array(PlanNodeSchema),\n\t}),\n)\n\nconst PlanNodeSchema: z.ZodType<PlanNode> = TaskPlanNodeSchema.or(WorkflowPlanNodeSchema)\n\nexport const PlanSchema = z.object({\n\troot: PlanNodeSchema,\n})\n","import { Workflow } from \"@core/workflow/workflow\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"../hooks/execution-hook\"\n\nexport class ParallelExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst promises = []\n\t\tfor (const u of workflow.units) {\n\t\t\tpromises.push(u.execute(hook))\n\t\t}\n\n\t\tconst results = await Promise.all(promises)\n\n\t\treturn results\n\t}\n}\n","import { ExecutionHook } from \"../hooks/execution-hook\"\nimport { Workflow } from \"../workflow\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class SequentalExecution implements WorkflowExecutionStrategy {\n\tasync execute(workflow: Workflow, hook: ExecutionHook): Promise<any> {\n\t\tconst results = []\n\t\tfor (const u of workflow.units) {\n\t\t\tresults.push(await u.execute(hook))\n\t\t}\n\n\t\treturn results\n\t}\n}\n","import { ParallelExecution } from \"./parallel\"\nimport { SequentalExecution } from \"./sequential\"\nimport { WorkflowExecutionStrategy } from \"./strategy\"\n\nexport class ExecutionStrategyFactory {\n\tstatic create(mode: string): WorkflowExecutionStrategy {\n\t\tlet strategy: WorkflowExecutionStrategy\n\t\tif (mode == \"parallel\") {\n\t\t\tstrategy = new ParallelExecution()\n\t\t} else {\n\t\t\tstrategy = new SequentalExecution()\n\t\t}\n\n\t\treturn strategy\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class ClusterHook implements ExecutionHook {\n\tconstructor(private hooks: ExecutionHook[]) {}\n\n\tbeforeTask(task: Task): void {\n\t\tthis.hooks.forEach((h) => h.beforeTask(task))\n\t}\n\n\tafterTask(task: Task, result: any): void {\n\t\tthis.hooks.forEach((h) => h.afterTask(task, result))\n\t}\n\n\tbeforeWorkflow(wf: Workflow) {\n\t\tthis.hooks.forEach((h) => h.beforeWorkflow(wf))\n\t}\n\n\tafterWorkflow(wf: Workflow, result: any) {\n\t\tthis.hooks.forEach((h) => h.afterWorkflow(wf, result))\n\t}\n}\n","import { Task } from \"../task\"\nimport { Workflow } from \"../workflow\"\nimport { ExecutionHook } from \"./execution-hook\"\n\nexport class Logger implements ExecutionHook {\n\tbeforeWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:start], Mode: ${workflow.mode}`)\n\t}\n\n\tafterWorkflow(workflow: Workflow) {\n\t\tconsole.log(`[Workflow:end], Mode: ${workflow.mode}`)\n\t}\n\n\tbeforeTask(task: Task) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n\n\tafterTask(task: Task, result: any) {\n\t\tconsole.log(`[Task:end]: Model: ${task.getModel()} Task: ${task.getTask()}`)\n\t}\n}\n","import { ClusterHook } from \"./cluster\"\nimport { ExecutionHook } from \"./execution-hook\"\nimport { Logger } from \"./logger\"\n\nconst loggingHook: ExecutionHook = new Logger()\n\nconst defaultHooks = [loggingHook]\nconst clusterHook: ExecutionHook = new ClusterHook(defaultHooks)\n\nexport const DEFAULT_CLUSTER_HOOK = clusterHook\n","import { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionStrategyFactory } from \"@core/workflow/execution/strategy-factory\"\nimport { WorkflowExecutionStrategy } from \"@core/workflow/execution/strategy\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Workflow extends WorkUnit {\n\tconstructor(\n\t\treadonly mode: \"parallel\" | \"sequential\",\n\t\treadonly units: WorkUnit[],\n\t) {\n\t\tsuper()\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeWorkflow(this)\n\n\t\tconst executionStrategy: WorkflowExecutionStrategy = ExecutionStrategyFactory.create(this.mode)\n\t\tconst result = await executionStrategy.execute(this, hook)\n\n\t\thook.afterWorkflow(this, result)\n\t\treturn result\n\t}\n}\n","import { Model, Command, Agent } from \"@/index\"\nimport { WorkUnit } from \"@core/workflow/work-unit\"\nimport { ExecutionHook } from \"./hooks/execution-hook\"\nimport { DEFAULT_CLUSTER_HOOK } from \"./hooks\"\n\nexport class Task extends WorkUnit {\n\tconstructor(\n\t\tprivate task: string,\n\t\tprivate model: Model,\n\t) {\n\t\tsuper()\n\t}\n\n\tgetTask() {\n\t\treturn this.task\n\t}\n\n\tgetModel() {\n\t\treturn this.model\n\t}\n\n\tasync execute(hook: ExecutionHook = DEFAULT_CLUSTER_HOOK): Promise<any> {\n\t\thook.beforeTask(this)\n\n\t\tconst command: Command = {\n\t\t\tmodel: this.model,\n\t\t\ttask: this.task,\n\t\t}\n\n\t\tconst agent = new Agent(command)\n\t\tconst result = await agent.act(this.task)\n\n\t\thook.afterTask(this, result)\n\t\treturn result\n\t}\n}\n","import { Plan, PlanNode } from \"@/types/plan\"\nimport { Workflow } from \"./workflow\"\nimport { WorkUnit } from \"./work-unit\"\nimport { Task } from \"./task\"\n\nexport class PlanWorkflowMapper {\n\tstatic fromPlan(plan: Plan): Workflow {\n\t\treturn this.fromNode(plan.root)\n\t}\n\n\tprivate static fromNode(node: PlanNode): Workflow {\n\t\tif (node.kind !== \"workflow\") {\n\t\t\tthrow new Error(\"Root must be workflow\")\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n\n\tprivate static mapNode(node: PlanNode): WorkUnit {\n\t\tif (node.kind === \"task\") {\n\t\t\treturn new Task(node.task, node.model)\n\t\t}\n\n\t\treturn new Workflow(node.mode, node.units.map(this.mapNode))\n\t}\n}\n","import { Plan } from \"@/types/plan\"\nimport { Workflow } from \"@core/workflow/workflow\"\nimport { Agent } from \"./agent\"\nimport { Command } from \"@/types/command\"\nimport { PlanSchema } from \"@core/workflow/schema/plan\"\nimport { PlanWorkflowMapper } from \"@core/workflow/mapper\"\n\nconst PROMPT = `You are a planner.\n\nRules:\n- Use 'parallel' for the task that can be run in parallel.\n- Pick model based on the task complexity\n- Keep prompts actionable.\n- Don't ask user for any input, just do the thing with available data you have.\n`\n\nexport class PlanningAgent extends Agent {\n\tconstructor(command: Command) {\n\t\tsuper(command)\n\t}\n\n\tasync planFromGoal(goal: string): Promise<Workflow> {\n\t\tthis.setStructuredOutput(PlanSchema)\n\t\tconst plan: Plan = await this.act(`${PROMPT}\\nGoal: ${goal}`)\n\t\treturn PlanWorkflowMapper.fromPlan(plan)\n\t}\n}\n"],"mappings":";AAEO,IAAe,WAAf,MAAwB;AAAA,EAC9B,cAAc;AAAA,EAAC;AAGhB;;;ACFO,IAAM,iBAAN,MAAqB;AAAA,EAG3B,YAAqB,kBAAoC;AAApC;AAAA,EAAqC;AAAA,EAE1D,MAAM,OAAO,SAAgC;AAC5C,SAAK,WAAW,KAAK,iBAAiB,QAAQ,QAAQ,KAAK;AAC3D,WAAO,MAAM,KAAK,SAAS,YAAY,OAAO;AAAA,EAC/C;AACD;;;ACXO,IAAe,mBAAf,MAAgC;AAEvC;;;ACJO,IAAM,gBAAgB,CAAC,SAAS,cAAc,cAAc,SAAS;AAI5E,IAAM,gBAAgB;AACtB,IAAM,eAAe;AACrB,IAAM,cAAc;AAEb,IAAM,mBAAmB,CAAC,qBAAqB,oBAAoB,iBAAiB;AAEpF,IAAM,sBAAsB;AAAA,EAClC,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,mBAAmB;AACpB;;;ACXO,IAAe,oBAAf,MAAiC;AAAA,EAGvC,eAAe,YAAkD;AAChE,SAAK,cAAc;AACnB,WAAO,KAAK;AAAA,EACb;AAAA,EAIA,OAAO,SAAkB,SAAyB;AACjD,SAAK,MAAM,SAAS,OAAO;AAE3B,QAAI,KAAK,aAAa;AACrB,WAAK,YAAY,OAAO,SAAS,OAAO;AAAA,IACzC;AAAA,EACD;AACD;;;AChBO,IAAM,kBAAN,cAA8B,kBAAkB;AAAA,EAGtD,MAAM,SAAkB,SAAyB;AAChD,QAAI,QAAQ,UAAU;AACrB,cAAQ,YAAY,QAAQ,QAAQ;AAAA,IACrC;AAAA,EACD;AACD;;;ACRO,IAAM,cAAN,cAA0B,kBAAkB;AAAA,EAGlD,MAAM,SAAkB,SAAyB;AAChD,QAAI,QAAQ,MAAM;AACjB,cAAQ,QAAQ,QAAQ,IAAI;AAAA,IAC7B;AAAA,EACD;AACD;;;ACRO,IAAM,eAAN,cAA2B,kBAAkB;AAAA,EAGnD,MAAM,SAAkB,SAAyB;AAChD,QAAI,QAAQ,OAAO;AAClB,cAAQ,SAAS,QAAQ,KAAK;AAAA,IAC/B;AAAA,EACD;AACD;;;ACRO,IAAM,2BAAN,cAAuC,kBAAkB;AAAA,EAG/D,MAAM,SAAkB,SAAyB;AAChD,QAAI,QAAQ,kBAAkB;AAC7B,cAAQ,oBAAoB,QAAQ,gBAAgB;AAAA,IACrD;AAAA,EACD;AACD;;;ACRO,IAAM,eAAN,cAA2B,kBAAkB;AAAA,EAGnD,MAAM,SAAkB,gBAAgC;AACvD,QAAI,QAAQ,SAAS,QAAQ,MAAM,SAAS,GAAG;AAC9C,qBAAe,SAAS,QAAQ,KAAK;AAAA,IACtC;AAAA,EACD;AACD;;;ACHO,IAAe,WAAf,MAAwB;AAAA,EAAxB;AAEN,mBAA0B;AAAA;AAAA,EAE1B,aAAa,SAAuB;AACnC,SAAK,UAAU;AAEf,SAAK,eAAe,WAAW;AAE/B,UAAM,kBAAqC,IAAI,gBAAgB;AAC/D,UAAM,cAAiC,IAAI,YAAY;AACvD,UAAM,eAAkC,IAAI,aAAa;AACzD,UAAM,0BAA6C,IAAI,yBAAyB;AAChF,UAAM,eAAkC,IAAI,aAAa;AAEzD,oBACE,eAAe,WAAW,EAC1B,eAAe,YAAY,EAC3B,eAAe,uBAAuB,EACtC,eAAe,YAAY;AAE7B,oBAAgB,OAAO,SAAS,KAAK,cAAc;AAEnD,WAAO,KAAK,eAAe,MAAM;AAAA,EAClC;AAGD;;;AChCO,IAAe,iBAAf,MAA8B;AAAA,EAGpC,aAAa;AACZ,SAAK,UAAU,CAAC;AAAA,EACjB;AAAA,EAQA,QAAQ;AACP,WAAO,KAAK;AAAA,EACb;AACD;;;ACTO,IAAM,wBAAN,MAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlC,eAAe,UAA6B;AAC3C,QAAI,SAAS,WAAW,GAAG;AAC1B,YAAM,IAAI,MAAM,kEAAkE;AAAA,IACnF;AAGA,UAAM,gBAAgB,SAAS,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ;AAE9D,QAAI,eAAe;AAClB,aAAO,OAAO,cAAc,YAAY,WACrC,cAAc,UACd,KAAK,uBAAuB,cAAc,OAAO;AAAA,IACrD;AAGA,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,iBAAiB,UAA6B;AAC7C,UAAM,eAAe,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM;AAE7D,QAAI,aAAa,WAAW,GAAG;AAC9B,aAAO;AAAA,IACR;AAEA,UAAM,kBAAkB,aAAa,aAAa,SAAS,CAAC;AAC5D,WAAO,OAAO,gBAAgB,YAAY,WACvC,gBAAgB,UAChB,KAAK,uBAAuB,gBAAgB,OAAO;AAAA,EACvD;AAAA,EAEQ,uBAAuB,SAAwB;AACtD,WAAO,QACL,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,EACrC,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,GAAG;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,OAAiC;AACxC,WAAO,MAAM,IAAI,CAAC,OAAO;AAAA,MACxB,MAAM;AAAA,MACN,MAAM,EAAE;AAAA,MACR,aAAa,EAAE;AAAA,MACf,YAAY,EAAE;AAAA,MACd,QAAQ;AAAA;AAAA,IACT,EAAE;AAAA,EACH;AACD;;;ACvEA,SAAS,qBAAqB;AAIvB,IAAM,yBAAN,cAAqC,eAAe;AAAA,EAC1D,YAAoB,SAAS,IAAI,sBAAsB,GAAG;AACzD,UAAM;AADa;AAAA,EAEpB;AAAA,EAEA,SAAS,OAA+B;AACvC,SAAK,QAAQ,QAAQ;AACrB,WAAO;AAAA,EACR;AAAA,EAEA,QAAQ,MAA8B;AACrC,SAAK,QAAQ,QAAQ;AACrB,WAAO;AAAA,EACR;AAAA,EAEA,YAAY,UAAqC;AAChD,UAAM,eAAe,KAAK,OAAO,eAAe,QAAQ;AAExD,QAAI,gBAAgB,iBAAiB,gCAAgC;AACpE,WAAK,QAAQ,eAAe;AAAA,IAC7B;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,oBAAoB,QAAmC;AACtD,SAAK,QAAQ,OAAO;AAAA,MACnB,QAAQ,cAAc,QAAQ,cAAc;AAAA,IAC7C;AACA,WAAO;AAAA,EACR;AAAA,EAEA,SAAS,OAA+B;AACvC,SAAK,QAAQ,QAAQ,MAAM,IAAI,CAAC,UAAU;AAAA,MACzC,MAAM;AAAA,MACN,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,YAAY,KAAK;AAAA,IAClB,EAAE;AACF,WAAO;AAAA,EACR;AACD;;;AChDA,OAAO,YAAY;AAGZ,IAAM,sBAAN,MAAmD;AAAA,EACzD,YAAoB,SAAS,IAAI,OAAO,GAAG;AAAvB;AAAA,EAAwB;AAAA,EAE5C,MAAM,KAAK,SAA4B;AACtC,WAAO,MAAM,KAAK,OAAO,UAAU,OAAO,OAAO;AAAA,EAClD;AACD;;;ACTA,OAAOA,aAAY;AAGZ,IAAM,qBAAN,MAAkD;AAAA,EACxD,YAAoB,SAAS,IAAIA,QAAO,GAAG;AAAvB;AAAA,EAAwB;AAAA,EAE5C,MAAM,KAAK,SAA4B;AACtC,WAAO,MAAM,KAAK,OAAO,UAAU,MAAM,OAAO;AAAA,EACjD;AACD;;;ACLO,IAAM,uBAAN,MAA2B;AAAA,EACjC,OAAO,QAAQ,SAA6B;AAC3C,QAAI,QAAQ,QAAQ,QAAQ,KAAK,QAAQ;AACxC,aAAO,IAAI,mBAAmB;AAAA,IAC/B,OAAO;AACN,aAAO,IAAI,oBAAoB;AAAA,IAChC;AAAA,EACD;AACD;;;ACVO,IAAe,kBAAf,MAA+B;AAAA,EAGrC,eAAe,iBAAmD;AACjE,SAAK,cAAc;AACnB,WAAO,KAAK;AAAA,EACb;AAGD;;;ACRO,IAAM,sBAAN,cAAkC,gBAAgB;AAAA,EAGxD,MAAM,OAAO,iBAAkC;AAC9C,UAAM,mBAAmB,gBAAgB;AACzC,QAAI,iBAAiB,eAAe;AACnC,sBAAgB,YAAY,iBAAiB,aAAa;AAC1D,aAAO;AAAA,IACR;AAEA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACZO,IAAM,iBAAN,cAA6B,gBAAgB;AAAA,EAGnD,MAAM,OAAO,iBAA4D;AAN1E;AAOE,UAAM,mBAAmB,gBAAgB;AACzC,UAAM,eAAc,sBAAiB,WAAjB,mBAA0B;AAC9C,QAAI,eAAe,aAAa,aAAa;AAC5C,YAAM,gBAAe,iBAAY,YAAZ,mBAAsB;AAC3C,UAAI,gBAAgB,UAAU,cAAc;AAC3C,wBAAgB,YAAY,aAAa,IAAI;AAC7C,eAAO;AAAA,MACR;AAAA,IACD;AAEA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;AChBO,IAAM,oBAAN,cAAgC,gBAAgB;AAAA,EAGtD,MAAM,OAAO,iBAAkC;AAC9C,UAAM,mBAAmB,gBAAgB;AACzC,QAAI,iBAAiB,aAAa;AACjC,sBAAgB,YAAY,iBAAiB,WAAW;AACxD,aAAO;AAAA,IACR;AAEA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACfO,IAAM,aAAN,MAAiB;AAAA,EAMvB,YAAY,aAAqB,cAAsB,OAAe;AACrE,SAAK,cAAc;AACnB,SAAK,eAAe;AACpB,SAAK,QAAQ;AACb,SAAK,cAAc,cAAc;AAAA,EAClC;AACD;;;ACMO,IAAM,uBAAN,cAAmC,gBAAgB;AAAA,EAMzD,YAAY,SAAc,OAAe;AACxC,UAAM;AACN,SAAK,UAAU;AACf,SAAK,QAAQ;AACb,SAAK,SAAS,IAAI,oBAAoB;AAAA,EACvC;AAAA,EAEQ,aAAa,UAAwB;AA/B9C;AAgCE,YAAO,cAAS,WAAT,mBAAiB,KAAK,CAAC,SAAc,KAAK,SAAS;AAAA,EAC3D;AAAA,EAEQ,iBAAiB,UAAsB;AAnChD;AAoCE,aAAO,cAAS,WAAT,mBAAiB,OAAO,CAAC,SAAc,KAAK,SAAS,qBAAoB,CAAC;AAAA,EAClF;AAAA,EAEQ,YAAY,MAAgB,OAA4B;AAvCjE;AAwCE,YAAO,WAAM,KAAK,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,MAAtC,YAA2C;AAAA,EACnD;AAAA,EAEA,MAAc,YAAY,MAAY,SAA8C;AACnF,UAAM,OAAO,OAAO,YAAY,WAAW,KAAK,MAAM,OAAO,IAAI;AAEjE,WAAO,MAAM,KAAK,OAAO,IAAI;AAAA,EAC9B;AAAA,EAEQ,iBAAiB,QAAgB,SAA0B;AAClE,WAAO;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ,KAAK,UAAU,OAAO;AAAA,IAC/B;AAAA,EACD;AAAA,EAEA,MAAc,iBAAiB,WAAuB,OAAsC;AAzD7F;AA0DE,UAAM,UAAwB,CAAC;AAE/B,eAAW,QAAQ,WAAW;AAC7B,YAAM,OAAO,KAAK,YAAY,MAAM,KAAK;AAEzC,UAAI,CAAC,MAAM;AACV,gBAAQ;AAAA,UACP,KAAK,iBAAiB,KAAK,SAAS;AAAA,YACnC,OAAO,iBAAiB,KAAK,IAAI;AAAA,UAClC,CAAC;AAAA,QACF;AACA;AAAA,MACD;AAEA,UAAI;AACH,cAAM,SAAS,MAAM,KAAK,YAAY,MAAM,KAAK,SAAS;AAC1D,gBAAQ,KAAK,KAAK,iBAAiB,KAAK,SAAS,MAAM,CAAC;AAAA,MACzD,SAAS,KAAU;AAClB,gBAAQ;AAAA,UACP,KAAK,iBAAiB,KAAK,SAAS;AAAA,YACnC,QAAO,SAAI,YAAJ,YAAe;AAAA,UACvB,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,OAAO,iBAAkC;AAC9C,QAAI,mBAAmB,gBAAgB;AACvC,QAAI;AACJ,WAAO,KAAK,aAAa,gBAAgB,GAAG;AAC3C,YAAM,YAAY,KAAK,iBAAiB,gBAAgB;AAExD,YAAM,cAAc,MAAM,KAAK,iBAAiB,WAAW,KAAK,KAAK;AAGrE,WAAK,QAAQ,QAAQ;AACrB,WAAK,QAAQ,uBAAuB,iBAAiB;AAErD,4BAAsB,MAAM,KAAK,OAAO,KAAK,KAAK,OAAO;AAEzD,sBAAgB;AAAA,QACf,IAAI;AAAA,UACH,oBAAoB,MAAM;AAAA,UAC1B,oBAAoB,MAAM;AAAA,UAC1B,oBAAoB;AAAA,QACrB;AAAA,MACD;AACA,sBAAgB,oBAAoB,mBAAmB;AACvD,sBAAgB,YAAY,mBAAmB;AAC/C,yBAAmB;AAAA,IACpB;AAEA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACjHO,IAAM,kBAAN,MAAsB;AAAA,EAAtB;AAGN,wBAA6B,CAAC;AAAA;AAAA,EAE9B,oBAAoB,kBAAwC;AAC3D,SAAK,mBAAmB;AACxB,WAAO;AAAA,EACR;AAAA,EAEA,cAAc,YAAyC;AACtD,SAAK,aAAa,KAAK,UAAU;AACjC,WAAO;AAAA,EACR;AAAA,EAEA,YAAY,UAAgC;AAC3C,SAAK,WAAW;AAChB,WAAO;AAAA,EACR;AAAA,EAEA,cAAmB;AAClB,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,kBAAiC;AAChC,WAAO,KAAK;AAAA,EACb;AACD;;;ACzBO,IAAM,eAAN,cAA2B,gBAAgB;AAAA,EAGjD,MAAM,OAAO,iBAA4D;AACxE,UAAM,mBAAmB,gBAAgB;AACzC,UAAM,QAAQ,iBAAiB;AAC/B,QAAI,OAAO;AACV,sBAAgB;AAAA,QACf,IAAI,WAAW,MAAM,cAAc,MAAM,eAAe,iBAAiB,KAAK;AAAA,MAC/E;AAAA,IACD;AACA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACHO,IAAM,kBAAN,cAA8B,SAAS;AAAA,EAG7C,cAAc;AACb,UAAM;AAHP,0BAAiC,IAAI,uBAAuB;AAAA,EAI5D;AAAA,EAEA,MAAM,YAAY,SAA2C;AAC5D,QAAI;AACH,YAAM,UAAU,KAAK,aAAa,OAAO;AACzC,YAAM,SAAS,qBAAqB,QAAQ,OAAO;AACnD,YAAM,WAAW,MAAM,OAAO,KAAK,OAAO;AAE1C,YAAM,kBAAkB,IAAI,gBAAgB;AAC5C,sBAAgB,oBAAoB,QAAQ;AAG5C,YAAM,eAAgC,IAAI,aAAa;AACvD,YAAM,uBAAwC,IAAI;AAAA,QACjD;AAAA,QACA,QAAQ,QAAQ,QAAQ,QAAQ,CAAC;AAAA,MAClC;AACA,YAAM,sBAAuC,IAAI,oBAAoB;AACrE,YAAM,oBAAqC,IAAI,kBAAkB;AACjE,YAAM,iBAAkC,IAAI,eAAe;AAE3D,mBACE,eAAe,oBAAoB,EACnC,eAAe,mBAAmB,EAClC,eAAe,iBAAiB,EAChC,eAAe,cAAc;AAE/B,YAAM,kBAAkB;AAExB,YAAM,SAAS,MAAM,gBAAgB,OAAO,eAAe;AAE3D,YAAM,eAAe,OAAO,gBAAgB,EAAE,IAAI,QAAM;AAAA,QACvD,aAAa,EAAE;AAAA,QACf,cAAc,EAAE;AAAA,QAChB,OAAO,EAAE;AAAA,MACV,EAAE;AAEF,aAAO;AAAA,QACN,MAAM,OAAO,YAAY;AAAA,QACzB;AAAA,MACD;AAAA,IACD,SAAS,OAAO;AACf,cAAQ,KAAK,kDAAkD,KAAK;AACpE,YAAM;AAAA,IACP;AAAA,EACD;AACD;;;AC9DO,IAAM,kBAAN,MAAsB;AAAA;AAAA;AAAA;AAAA;AAAA,EAK5B,WAAW,UAAoE;AAC9E,UAAM,oBAAoC,CAAC;AAC3C,QAAI;AAEJ,eAAW,OAAO,UAAU;AAE3B,UAAI,IAAI,SAAS,UAAU;AAC1B,cAAM,UACL,OAAO,IAAI,YAAY,WACpB,IAAI,UACH,IAAI,QAAuB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI;AAE5D,uBAAe,eAAe,GAAG,YAAY;AAAA;AAAA,EAAO,OAAO,KAAK;AAChE;AAAA,MACD;AAGA,UAAI,IAAI,SAAS,QAAQ;AACxB;AAAA,MACD;AAGA,UAAI,IAAI,SAAS,UAAU,IAAI,SAAS,aAAa;AACpD,YAAI,OAAO,IAAI,YAAY,UAAU;AACpC,4BAAkB,KAAK;AAAA,YACtB,MAAM,IAAI;AAAA,YACV,SAAS,IAAI;AAAA,UACd,CAAC;AAAA,QACF,OAAO;AAEN,gBAAM,gBAAiB,IAAI,QAAwC,IAAI,CAAC,SAAS;AAChF,gBAAI,KAAK,SAAS,QAAQ;AACzB,qBAAO;AAAA,gBACN,MAAM;AAAA,gBACN,MAAM,KAAK;AAAA,cACZ;AAAA,YACD,WAAW,KAAK,SAAS,aAAa;AAGrC,oBAAM,WAAW,KAAK;AAGtB,kBAAI,SAAS,WAAW,YAAY,GAAG;AACtC,sBAAM,UAAU,SAAS,MAAM,+BAA+B;AAC9D,oBAAI,SAAS;AACZ,wBAAM,CAAC,EAAE,WAAW,IAAI,IAAI;AAC5B,yBAAO;AAAA,oBACN,MAAM;AAAA,oBACN,QAAQ;AAAA,sBACP,MAAM;AAAA,sBACN,YAAY,SAAS,SAAS;AAAA,sBAK9B;AAAA,oBACD;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AAGA,oBAAM,IAAI;AAAA,gBACT;AAAA,cAED;AAAA,YACD;AAEA,mBAAO,EAAE,MAAM,QAAiB,MAAM,GAAG;AAAA,UAC1C,CAAC;AAED,4BAAkB,KAAK;AAAA,YACtB,MAAM,IAAI;AAAA,YACV,SAAS;AAAA,UACV,CAAC;AAAA,QACF;AAAA,MACD;AAAA,IACD;AAIA,UAAM,YAAY,KAAK,uBAAuB,iBAAiB;AAE/D,WAAO;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,uBAAuB,UAA0C;AACxE,QAAI,SAAS,WAAW,EAAG,QAAO;AAElC,UAAM,SAAyB,CAAC;AAChC,QAAI;AAEJ,eAAW,OAAO,UAAU;AAE3B,UAAI,aAAa,IAAI,QAAQ,OAAO,SAAS,GAAG;AAC/C,cAAM,UAAU,OAAO,OAAO,SAAS,CAAC;AAGxC,YAAI,OAAO,QAAQ,YAAY,YAAY,OAAO,IAAI,YAAY,UAAU;AAC3E,kBAAQ,UAAU,GAAG,QAAQ,OAAO;AAAA,EAAK,IAAI,OAAO;AAAA,QACrD,OAAO;AAEN,gBAAM,cAAc,MAAM,QAAQ,QAAQ,OAAO,IAC9C,QAAQ,UACR,CAAC,EAAE,MAAM,QAAiB,MAAM,QAAQ,QAAkB,CAAC;AAC9D,gBAAM,aAAa,MAAM,QAAQ,IAAI,OAAO,IACzC,IAAI,UACJ,CAAC,EAAE,MAAM,QAAiB,MAAM,IAAI,QAAkB,CAAC;AAC1D,kBAAQ,UAAU,CAAC,GAAG,aAAa,GAAG,UAAU;AAAA,QACjD;AAAA,MACD,OAAO;AACN,eAAO,KAAK,GAAG;AACf,mBAAW,IAAI;AAAA,MAChB;AAAA,IACD;AAGA,QAAI,OAAO,SAAS,KAAK,OAAO,CAAC,EAAE,SAAS,QAAQ;AACnD,YAAM,IAAI;AAAA,QACT;AAAA,MACD;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AACD;;;ACzIA,SAAS,2BAA2B;AAK7B,IAAM,0BAAN,cAAsC,eAAe;AAAA,EAArD;AAAA;AACN,SAAQ,SAAS,IAAI,gBAAgB;AAAA;AAAA,EAErC,SAAS,OAAuC;AAC/C,SAAK,QAAQ,QAAQ,oBAAoB,KAAK;AAC9C,WAAO;AAAA,EACR;AAAA,EAEA,QAAQ,MAA8B;AAErC,UAAM,UAAU;AAAA,MACf,MAAM;AAAA,MACN,SAAS;AAAA,IACV;AAEA,QAAI,CAAC,KAAK,QAAQ,UAAU;AAC3B,WAAK,QAAQ,WAAW,CAAC;AAAA,IAC1B;AAEA,SAAK,QAAQ,SAAS,KAAK,OAAO;AAClC,WAAO;AAAA,EACR;AAAA,EAEA,YAAY,UAAqC;AAChD,UAAM,EAAE,UAAU,mBAAmB,OAAO,IAAI,KAAK,OAAO,WAAW,QAAQ;AAE/E,SAAK,QAAQ,WAAW;AAExB,QAAI,QAAQ;AACX,WAAK,QAAQ,SAAS;AAAA,IACvB;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,oBAAoB,QAAmC;AACtD,SAAK,QAAQ,QAAQ,CAAC,+BAA+B;AACrD,SAAK,QAAQ,gBAAgB,oBAAoB,MAAM;AACvD,WAAO;AAAA,EACR;AAAA,EAEA,SAAS,OAA+B;AACvC,SAAK,QAAQ,QAAQ,MAAM,IAAI,CAAC,UAAU;AAAA,MACzC,MAAM,KAAK;AAAA,MACX,aAAa,KAAK;AAAA,MAClB,cAAc,KAAK;AAAA,IACpB,EAAE;AACF,WAAO;AAAA,EACR;AAAA,EAEA,QAAQ;AAEP,QAAI,CAAC,KAAK,QAAQ,YAAY;AAC7B,WAAK,QAAQ,aAAa;AAAA,IAC3B;AAEA,WAAO,KAAK;AAAA,EACb;AACD;;;ACjEA,OAAO,eAAe;AAEf,IAAM,yBAAN,MAAsD;AAAA,EAC5D,YAAoB,SAAS,IAAI,UAAU,GAAG;AAA1B;AAAA,EAA2B;AAAA,EAE/C,MAAM,KAAK,SAA4B;AACtC,WAAO,MAAM,KAAK,OAAO,SAAS,OAAO,OAAO;AAAA,EACjD;AACD;;;ACRA,OAAOC,gBAAe;AAEf,IAAM,wBAAN,MAAqD;AAAA,EAC3D,YAAoB,SAAS,IAAIA,WAAU,GAAG;AAA1B;AAAA,EAA2B;AAAA,EAE/C,MAAM,KAAK,SAA4B;AACtC,WAAO,MAAM,KAAK,OAAO,KAAK,SAAS,MAAM,OAAO;AAAA,EACrD;AACD;;;ACLO,IAAM,0BAAN,MAA8B;AAAA,EACpC,OAAO,QAAQ,SAA6B;AAC3C,WAAO,QAAQ,gBAAgB,IAAI,sBAAsB,IAAI,IAAI,uBAAuB;AAAA,EACzF;AACD;;;ACLO,IAAM,sBAAN,cAAkC,gBAAgB;AAAA,EAGxD,MAAM,OAAO,iBAA4D;AACxE,UAAM,mBAAmB,gBAAgB;AACzC,QAAI,iBAAiB,eAAe;AACnC,sBAAgB,YAAY,iBAAiB,aAAa;AAC1D,aAAO;AAAA,IACR;AAEA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACZO,IAAMC,kBAAN,cAA6B,gBAAgB;AAAA,EAGnD,MAAM,OAAO,iBAA4D;AACxE,UAAM,mBAAmB,gBAAgB;AACzC,UAAM,UAAU,iBAAiB,QAC/B,OAAO,CAAC,UAAe,MAAM,SAAS,MAAM,EAC5C,IAAI,CAAC,UAAgB,MAAM,SAAS,SAAS,MAAM,OAAO,EAAG,EAC7D,KAAK,EAAE;AAET,QAAI,SAAS;AACZ,sBAAgB,YAAY,OAAO;AACnC,aAAO;AAAA,IACR;AAEA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACbO,IAAM,iBAAN,cAA6B,gBAAgB;AAAA,EAMnD,YAAY,SAAc,OAAe;AACxC,UAAM;AACN,SAAK,QAAQ;AACb,SAAK,UAAU;AACf,SAAK,SAAS,IAAI,uBAAuB;AAAA,EAC1C;AAAA,EAEA,MAAc,iBAAiB,OAAe,eAAyD;AACtG,UAAM,UAAiB,CAAC;AAExB,eAAW,WAAW,eAAe;AACpC,YAAM,OAAO,+BAAO,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ;AAEnD,UAAI,CAAC,MAAM;AACV,gBAAQ,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,aAAa,QAAQ;AAAA,UACrB,SAAS,KAAK,UAAU,EAAE,OAAO,iBAAiB,QAAQ,IAAI,GAAG,CAAC;AAAA,QACnE,CAAC;AACD;AAAA,MACD;AAEA,UAAI;AACH,cAAM,SAAS,MAAM,KAAK,OAAO,QAAQ,KAAK;AAC9C,gBAAQ,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,aAAa,QAAQ;AAAA,UACrB,SAAS,KAAK,UAAU,MAAM;AAAA,QAC/B,CAAC;AAAA,MACF,SAAS,OAAY;AACpB,gBAAQ,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,aAAa,QAAQ;AAAA,UACrB,SAAS,KAAK,UAAU,EAAE,OAAO,MAAM,QAAQ,CAAC;AAAA,QACjD,CAAC;AAAA,MACF;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,OAAO,iBAA4D;AACxE,QAAI,mBAAmB,gBAAgB;AAEvC,WAAO,iBAAiB,gBAAgB,YAAY;AACnD,YAAM,gBAAgB,iBAAiB,QAAQ;AAAA,QAC9C,CAAC,UAAgD,MAAM,SAAS;AAAA,MACjE;AAGA,WAAK,QAAQ,SAAS,KAAK;AAAA,QAC1B,MAAM;AAAA,QACN,SAAS,iBAAiB;AAAA,MAC3B,CAAC;AAED,YAAM,cAAc,MAAM,KAAK,iBAAiB,KAAK,OAAO,aAAa;AAGzE,WAAK,QAAQ,SAAS,KAAK;AAAA,QAC1B,MAAM;AAAA,QACN,SAAS;AAAA,MACV,CAAC;AAGD,YAAM,sBAAsB,MAAM,KAAK,OAAO,KAAK,KAAK,OAAO;AAC/D,sBAAgB;AAAA,QACf,IAAI;AAAA,UACH,oBAAoB,MAAM;AAAA,UAC1B,oBAAoB,MAAM;AAAA,UAC1B,oBAAoB;AAAA,QACrB;AAAA,MACD;AACA,sBAAgB,oBAAoB,mBAAmB;AACvD,yBAAmB;AAAA,IACpB;AAEA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACvFO,IAAMC,gBAAN,cAA2B,gBAAgB;AAAA,EAGjD,MAAM,OAAO,iBAA4D;AACxE,UAAM,mBAAmB,gBAAgB;AACzC,UAAM,QAAQ,iBAAiB;AAC/B,QAAI,OAAO;AACV,sBAAgB;AAAA,QACf,IAAI,WAAW,MAAM,cAAc,MAAM,eAAe,iBAAiB,KAAK;AAAA,MAC/E;AAAA,IACD;AACA,WAAO,MAAM,KAAK,YAAY,OAAO,eAAe;AAAA,EACrD;AACD;;;ACdO,IAAM,2BAAN,cAAuC,gBAAgB;AAAA,EAG7D,MAAM,OAAO,iBAA4D;AAN1E;AAOE,UAAM,mBAAmB,gBAAgB;AACzC,UAAM,MAAK,0DAAkB,OAAlB,YAAwB;AACnC,UAAM,SAAQ,0DAAkB,UAAlB,YAA2B;AAEzC,UAAM,IAAI,MAAM,4CAA4C,EAAE,UAAU,KAAK,EAAE;AAAA,EAChF;AACD;;;ACCO,IAAM,oBAAN,cAAgC,SAAS;AAAA,EAAzC;AAAA;AACN,0BAAiC,IAAI,wBAAwB;AAAA;AAAA,EAE7D,MAAM,YAAY,SAA2C;AAC5D,UAAM,UAAU,KAAK,aAAa,OAAO;AACzC,UAAM,SAAS,wBAAwB,QAAQ,OAAO;AACtD,UAAM,WAAW,MAAM,OAAO,KAAK,OAAO;AAE1C,UAAM,kBAAkB,IAAI,gBAAgB;AAC5C,oBAAgB,oBAAoB,QAAQ;AAG5C,UAAM,eAAgC,IAAIC,cAAa;AACvD,UAAM,iBAAkC,IAAI,eAAe,SAAS,QAAQ,QAAQ,QAAQ,QAAQ,CAAC,CAAC;AACtG,UAAM,sBAAuC,IAAI,oBAAoB;AACrE,UAAM,iBAAkC,IAAIC,gBAAe;AAC3D,UAAM,2BAA4C,IAAI,yBAAyB;AAE/E,iBACE,eAAe,cAAc,EAC7B,eAAe,mBAAmB,EAClC,eAAe,cAAc,EAC7B,eAAe,wBAAwB;AAEzC,UAAM,kBAAkB;AAExB,UAAM,SAAS,MAAM,gBAAgB,OAAO,eAAe;AAE3D,UAAM,eAAe,OAAO,gBAAgB,EAAE,IAAI,QAAM;AAAA,MACvD,aAAa,EAAE;AAAA,MACf,cAAc,EAAE;AAAA,MAChB,OAAO,EAAE;AAAA,IACV,EAAE;AAEF,WAAO;AAAA,MACN,MAAM,OAAO,YAAY;AAAA,MACzB;AAAA,IACD;AAAA,EACD;AACD;;;AC/CO,IAAM,0BAAN,cAAsC,iBAAiB;AAAA,EAC7D,cAAc,OAAwB;AACrC,WAAQ,cAAoC,SAAS,KAAK;AAAA,EAC3D;AAAA,EAEA,iBAAiB,OAAwB;AACxC,WAAQ,iBAAuC,SAAS,KAAK;AAAA,EAC9D;AAAA,EAEA,QAAQ,OAAyB;AAChC,QAAI,KAAK,cAAc,KAAK,GAAG;AAC9B,aAAO,IAAI,gBAAgB;AAAA,IAC5B,WAAW,KAAK,iBAAiB,KAAK,GAAG;AACxC,aAAO,IAAI,kBAAkB;AAAA,IAC9B;AAEA,UAAM,IAAI,MAAM,oBAAoB;AAAA,EACrC;AACD;;;ACjBO,IAAM,QAAN,MAAY;AAAA,EAIlB,YAAY,SAAkB;AAF9B,mBAA0B,IAAI,eAAe,IAAI,wBAAwB,CAAC;AAGzE,SAAK,UAAU;AAAA,EAChB;AAAA,EAEA,SAAS,OAAc;AACtB,SAAK,QAAQ,QAAQ;AAAA,EACtB;AAAA,EAEA,YAAY,UAAqB;AAChC,SAAK,QAAQ,WAAW;AAAA,EACzB;AAAA,EAEA,QAAQ,MAAc;AACrB,SAAK,QAAQ,OAAO;AAAA,EACrB;AAAA,EAEA,oBAAoB,QAAwB;AAC3C,SAAK,QAAQ,mBAAmB;AAAA,EACjC;AAAA,EAEA,MAAM,IAAI,MAAe;AACxB,QAAI,MAAM;AACT,WAAK,QAAQ,OAAO;AAAA,IACrB;AACA,WAAO,MAAM,KAAK,QAAQ,OAAO,KAAK,OAAO;AAAA,EAC9C;AACD;;;ACrCA,OAAO,OAAO;AAId,IAAM,cAAc,EAAE,KAAK,CAAC,GAAG,eAAe,GAAG,gBAAgB,CAAC;AAElE,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACnC,MAAM,EAAE,QAAQ,MAAM;AAAA,EACtB,MAAM,EAAE,OAAO;AAAA,EACf,OAAO;AACR,CAAC;AAED,IAAM,yBAA6E,EAAE;AAAA,EAAK,MACzF,EAAE,OAAO;AAAA,IACR,MAAM,EAAE,QAAQ,UAAU;AAAA,IAC1B,MAAM,EAAE,KAAK,CAAC,cAAc,UAAU,CAAC;AAAA,IACvC,OAAO,EAAE,MAAM,cAAc;AAAA,EAC9B,CAAC;AACF;AAEA,IAAM,iBAAsC,mBAAmB,GAAG,sBAAsB;AAEjF,IAAM,aAAa,EAAE,OAAO;AAAA,EAClC,MAAM;AACP,CAAC;;;ACpBM,IAAM,oBAAN,MAA6D;AAAA,EACnE,MAAM,QAAQ,UAAoB,MAAmC;AACpE,UAAM,WAAW,CAAC;AAClB,eAAW,KAAK,SAAS,OAAO;AAC/B,eAAS,KAAK,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC9B;AAEA,UAAM,UAAU,MAAM,QAAQ,IAAI,QAAQ;AAE1C,WAAO;AAAA,EACR;AACD;;;ACXO,IAAM,qBAAN,MAA8D;AAAA,EACpE,MAAM,QAAQ,UAAoB,MAAmC;AACpE,UAAM,UAAU,CAAC;AACjB,eAAW,KAAK,SAAS,OAAO;AAC/B,cAAQ,KAAK,MAAM,EAAE,QAAQ,IAAI,CAAC;AAAA,IACnC;AAEA,WAAO;AAAA,EACR;AACD;;;ACTO,IAAM,2BAAN,MAA+B;AAAA,EACrC,OAAO,OAAO,MAAyC;AACtD,QAAI;AACJ,QAAI,QAAQ,YAAY;AACvB,iBAAW,IAAI,kBAAkB;AAAA,IAClC,OAAO;AACN,iBAAW,IAAI,mBAAmB;AAAA,IACnC;AAEA,WAAO;AAAA,EACR;AACD;;;ACXO,IAAM,cAAN,MAA2C;AAAA,EACjD,YAAoB,OAAwB;AAAxB;AAAA,EAAyB;AAAA,EAE7C,WAAW,MAAkB;AAC5B,SAAK,MAAM,QAAQ,CAAC,MAAM,EAAE,WAAW,IAAI,CAAC;AAAA,EAC7C;AAAA,EAEA,UAAU,MAAY,QAAmB;AACxC,SAAK,MAAM,QAAQ,CAAC,MAAM,EAAE,UAAU,MAAM,MAAM,CAAC;AAAA,EACpD;AAAA,EAEA,eAAe,IAAc;AAC5B,SAAK,MAAM,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;AAAA,EAC/C;AAAA,EAEA,cAAc,IAAc,QAAa;AACxC,SAAK,MAAM,QAAQ,CAAC,MAAM,EAAE,cAAc,IAAI,MAAM,CAAC;AAAA,EACtD;AACD;;;AClBO,IAAM,SAAN,MAAsC;AAAA,EAC5C,eAAe,UAAoB;AAClC,YAAQ,IAAI,2BAA2B,SAAS,IAAI,EAAE;AAAA,EACvD;AAAA,EAEA,cAAc,UAAoB;AACjC,YAAQ,IAAI,yBAAyB,SAAS,IAAI,EAAE;AAAA,EACrD;AAAA,EAEA,WAAW,MAAY;AACtB,YAAQ,IAAI,sBAAsB,KAAK,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,EAAE;AAAA,EAC5E;AAAA,EAEA,UAAU,MAAY,QAAa;AAClC,YAAQ,IAAI,sBAAsB,KAAK,SAAS,CAAC,UAAU,KAAK,QAAQ,CAAC,EAAE;AAAA,EAC5E;AACD;;;AChBA,IAAM,cAA6B,IAAI,OAAO;AAE9C,IAAM,eAAe,CAAC,WAAW;AACjC,IAAM,cAA6B,IAAI,YAAY,YAAY;AAExD,IAAM,uBAAuB;;;ACH7B,IAAM,WAAN,cAAuB,SAAS;AAAA,EACtC,YACU,MACA,OACR;AACD,UAAM;AAHG;AACA;AAAA,EAGV;AAAA,EAEA,MAAM,QAAQ,OAAsB,sBAAoC;AACvE,SAAK,eAAe,IAAI;AAExB,UAAM,oBAA+C,yBAAyB,OAAO,KAAK,IAAI;AAC9F,UAAM,SAAS,MAAM,kBAAkB,QAAQ,MAAM,IAAI;AAEzD,SAAK,cAAc,MAAM,MAAM;AAC/B,WAAO;AAAA,EACR;AACD;;;AClBO,IAAM,OAAN,cAAmB,SAAS;AAAA,EAClC,YACS,MACA,OACP;AACD,UAAM;AAHE;AACA;AAAA,EAGT;AAAA,EAEA,UAAU;AACT,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,WAAW;AACV,WAAO,KAAK;AAAA,EACb;AAAA,EAEA,MAAM,QAAQ,OAAsB,sBAAoC;AACvE,SAAK,WAAW,IAAI;AAEpB,UAAM,UAAmB;AAAA,MACxB,OAAO,KAAK;AAAA,MACZ,MAAM,KAAK;AAAA,IACZ;AAEA,UAAM,QAAQ,IAAI,MAAM,OAAO;AAC/B,UAAM,SAAS,MAAM,MAAM,IAAI,KAAK,IAAI;AAExC,SAAK,UAAU,MAAM,MAAM;AAC3B,WAAO;AAAA,EACR;AACD;;;AC9BO,IAAM,qBAAN,MAAyB;AAAA,EAC/B,OAAO,SAAS,MAAsB;AACrC,WAAO,KAAK,SAAS,KAAK,IAAI;AAAA,EAC/B;AAAA,EAEA,OAAe,SAAS,MAA0B;AACjD,QAAI,KAAK,SAAS,YAAY;AAC7B,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACxC;AAEA,WAAO,IAAI,SAAS,KAAK,MAAM,KAAK,MAAM,IAAI,KAAK,OAAO,CAAC;AAAA,EAC5D;AAAA,EAEA,OAAe,QAAQ,MAA0B;AAChD,QAAI,KAAK,SAAS,QAAQ;AACzB,aAAO,IAAI,KAAK,KAAK,MAAM,KAAK,KAAK;AAAA,IACtC;AAEA,WAAO,IAAI,SAAS,KAAK,MAAM,KAAK,MAAM,IAAI,KAAK,OAAO,CAAC;AAAA,EAC5D;AACD;;;AClBA,IAAM,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASR,IAAM,gBAAN,cAA4B,MAAM;AAAA,EACxC,YAAY,SAAkB;AAC7B,UAAM,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,aAAa,MAAiC;AACnD,SAAK,oBAAoB,UAAU;AACnC,UAAM,OAAa,MAAM,KAAK,IAAI,GAAG,MAAM;AAAA,QAAW,IAAI,EAAE;AAC5D,WAAO,mBAAmB,SAAS,IAAI;AAAA,EACxC;AACD;","names":["OpenAI","Anthropic","ContentHandler","UsageHandler","UsageHandler","ContentHandler"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mozaik-ai/core",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "description": "A TypeScript library for building multi-agent AI workflows",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",