@agnt-sdk/studio 0.0.1

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.
Files changed (78) hide show
  1. package/README.md +162 -0
  2. package/dist/AgntExecutor.d.ts +56 -0
  3. package/dist/AgntExecutor.d.ts.map +1 -0
  4. package/dist/AgntExecutor.js +117 -0
  5. package/dist/AgntExecutor.js.map +1 -0
  6. package/dist/BaseExecutor.d.ts +69 -0
  7. package/dist/BaseExecutor.d.ts.map +1 -0
  8. package/dist/BaseExecutor.js +528 -0
  9. package/dist/BaseExecutor.js.map +1 -0
  10. package/dist/ImageCache.d.ts +94 -0
  11. package/dist/ImageCache.d.ts.map +1 -0
  12. package/dist/ImageCache.js +232 -0
  13. package/dist/ImageCache.js.map +1 -0
  14. package/dist/cli/commands/init.d.ts +5 -0
  15. package/dist/cli/commands/init.d.ts.map +1 -0
  16. package/dist/cli/commands/init.js +47 -0
  17. package/dist/cli/commands/init.js.map +1 -0
  18. package/dist/cli/commands/pull.d.ts +10 -0
  19. package/dist/cli/commands/pull.d.ts.map +1 -0
  20. package/dist/cli/commands/pull.js +82 -0
  21. package/dist/cli/commands/pull.js.map +1 -0
  22. package/dist/cli/index.d.ts +6 -0
  23. package/dist/cli/index.d.ts.map +1 -0
  24. package/dist/cli/index.js +28 -0
  25. package/dist/cli/index.js.map +1 -0
  26. package/dist/cli/utils/api.d.ts +38 -0
  27. package/dist/cli/utils/api.d.ts.map +1 -0
  28. package/dist/cli/utils/api.js +44 -0
  29. package/dist/cli/utils/api.js.map +1 -0
  30. package/dist/cli/utils/config.d.ts +5 -0
  31. package/dist/cli/utils/config.d.ts.map +1 -0
  32. package/dist/cli/utils/config.js +5 -0
  33. package/dist/cli/utils/config.js.map +1 -0
  34. package/dist/conditions.d.ts +14 -0
  35. package/dist/conditions.d.ts.map +1 -0
  36. package/dist/conditions.js +59 -0
  37. package/dist/conditions.js.map +1 -0
  38. package/dist/executorFactory.d.ts +10 -0
  39. package/dist/executorFactory.d.ts.map +1 -0
  40. package/dist/executorFactory.js +45 -0
  41. package/dist/executorFactory.js.map +1 -0
  42. package/dist/index.d.ts +21 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +26 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/providers/anthropic.d.ts +22 -0
  47. package/dist/providers/anthropic.d.ts.map +1 -0
  48. package/dist/providers/anthropic.js +280 -0
  49. package/dist/providers/anthropic.js.map +1 -0
  50. package/dist/providers/bedrock.d.ts +23 -0
  51. package/dist/providers/bedrock.d.ts.map +1 -0
  52. package/dist/providers/bedrock.js +281 -0
  53. package/dist/providers/bedrock.js.map +1 -0
  54. package/dist/providers/deepseek.d.ts +22 -0
  55. package/dist/providers/deepseek.d.ts.map +1 -0
  56. package/dist/providers/deepseek.js +193 -0
  57. package/dist/providers/deepseek.js.map +1 -0
  58. package/dist/providers/google.d.ts +22 -0
  59. package/dist/providers/google.d.ts.map +1 -0
  60. package/dist/providers/google.js +357 -0
  61. package/dist/providers/google.js.map +1 -0
  62. package/dist/providers/openai.d.ts +22 -0
  63. package/dist/providers/openai.d.ts.map +1 -0
  64. package/dist/providers/openai.js +194 -0
  65. package/dist/providers/openai.js.map +1 -0
  66. package/dist/systemTools.d.ts +6 -0
  67. package/dist/systemTools.d.ts.map +1 -0
  68. package/dist/systemTools.js +15 -0
  69. package/dist/systemTools.js.map +1 -0
  70. package/dist/tracing.d.ts +32 -0
  71. package/dist/tracing.d.ts.map +1 -0
  72. package/dist/tracing.js +38 -0
  73. package/dist/tracing.js.map +1 -0
  74. package/dist/types.d.ts +280 -0
  75. package/dist/types.d.ts.map +1 -0
  76. package/dist/types.js +5 -0
  77. package/dist/types.js.map +1 -0
  78. package/package.json +76 -0
@@ -0,0 +1,528 @@
1
+ /**
2
+ * BaseExecutor — V2 PromptManifest native executor
3
+ *
4
+ * Operates directly on the v2 manifest spec:
5
+ * - Renders files/blocks from spec.files[] (no pre-compiled system/user strings)
6
+ * - Evaluates conditions on files, blocks, tools, and models at runtime
7
+ * - Respects enableToolCalls: false (skips tool loop, returns raw LLM text)
8
+ * - Routes models via routingStrategy (fallback | random | conditional)
9
+ */
10
+ import { evaluateCondition } from './conditions.js';
11
+ import { sendTrace } from './tracing.js';
12
+ import { SYSTEM_TOOL_NAMES } from './systemTools.js';
13
+ export default class BaseExecutor {
14
+ manifest;
15
+ variables;
16
+ toolRouter;
17
+ credentials;
18
+ log;
19
+ debug;
20
+ messages;
21
+ onToolCall;
22
+ cancelled;
23
+ toolErrorCount;
24
+ forceNextTool;
25
+ executorFactory;
26
+ instructions;
27
+ primaryModelConfig;
28
+ provider;
29
+ model;
30
+ allToolDefs;
31
+ tracing;
32
+ files;
33
+ maxMessages;
34
+ modelPricing;
35
+ initialToolChoice;
36
+ constructor({ manifest, variables = {}, toolRouter, credentials, messages = [], onToolCall, log = console.log, logLevel = 'info', tracing, files, maxMessages = 50, initialToolChoice, executorFactory }) {
37
+ this.manifest = manifest;
38
+ if (!this.manifest)
39
+ throw new Error('[BaseExecutor] manifest is required');
40
+ this.validateManifest();
41
+ this.variables = variables;
42
+ this.toolRouter = toolRouter || {};
43
+ this.credentials = credentials || {};
44
+ this.log = logLevel === 'silent' ? () => { } : log;
45
+ this.debug = logLevel === 'debug' ? log : () => { };
46
+ this.files = files;
47
+ this.maxMessages = maxMessages;
48
+ this.messages = messages;
49
+ this.onToolCall = onToolCall;
50
+ this.cancelled = false;
51
+ this.toolErrorCount = {};
52
+ this.forceNextTool = undefined;
53
+ this.tracing = tracing;
54
+ this.executorFactory = executorFactory;
55
+ // Select primary model from spec (respects routing strategy + conditions)
56
+ const primaryModel = this.selectPrimaryModel();
57
+ // Normalize: expose .name for provider adapter compatibility
58
+ this.primaryModelConfig = { ...primaryModel, name: primaryModel.model };
59
+ this.provider = primaryModel.provider;
60
+ this.model = primaryModel.model;
61
+ // Determine initialToolChoice
62
+ const enableToolCalls = this.manifest.spec.enableToolCalls !== false;
63
+ this.initialToolChoice = initialToolChoice ?? (enableToolCalls ? 'required' : 'none');
64
+ // Build active tool definitions (filtered by condition)
65
+ this.allToolDefs = this.buildToolDefinitions();
66
+ // Build system instructions from spec.files[section=system]
67
+ this.instructions = this.buildInstructions();
68
+ }
69
+ // ─────────────────────────────────────────────────────────────────────────────
70
+ // Manifest validation
71
+ // ─────────────────────────────────────────────────────────────────────────────
72
+ validateManifest() {
73
+ if (this.manifest.kind !== 'PromptManifest') {
74
+ throw new Error('[BaseExecutor] manifest.kind must be "PromptManifest"');
75
+ }
76
+ if (this.manifest.apiVersion !== 'v2') {
77
+ throw new Error('[BaseExecutor] manifest.apiVersion must be "v2"');
78
+ }
79
+ const spec = this.manifest.spec;
80
+ if (!spec)
81
+ throw new Error('[BaseExecutor] manifest.spec is required');
82
+ if (!spec.models || spec.models.length === 0) {
83
+ throw new Error('[BaseExecutor] manifest.spec.models is required and must not be empty');
84
+ }
85
+ }
86
+ // ─────────────────────────────────────────────────────────────────────────────
87
+ // Model selection
88
+ // ─────────────────────────────────────────────────────────────────────────────
89
+ selectPrimaryModel() {
90
+ const models = this.manifest.spec.models;
91
+ const strategy = this.manifest.spec.routingStrategy ?? 'fallback';
92
+ if (strategy === 'random') {
93
+ const idx = Math.floor(Math.random() * models.length);
94
+ return models[idx];
95
+ }
96
+ if (strategy === 'conditional' || strategy === 'conditional_with_fallback') {
97
+ const passing = models.filter(m => evaluateCondition(m.condition, this.variables));
98
+ if (passing.length > 0)
99
+ return passing[0];
100
+ if (strategy === 'conditional_with_fallback') {
101
+ // Fall through to fallback logic below
102
+ }
103
+ else {
104
+ throw new Error('[BaseExecutor] No model condition passed and strategy is "conditional"');
105
+ }
106
+ }
107
+ // fallback: pick lowest fallbackOrder, then array order
108
+ const sorted = [...models].sort((a, b) => (a.fallbackOrder ?? 0) - (b.fallbackOrder ?? 0));
109
+ return sorted[0];
110
+ }
111
+ // ─────────────────────────────────────────────────────────────────────────────
112
+ // Tool definitions
113
+ // ─────────────────────────────────────────────────────────────────────────────
114
+ buildToolDefinitions() {
115
+ if (this.manifest.spec.enableToolCalls === false)
116
+ return [];
117
+ const tools = this.manifest.spec.tools ?? [];
118
+ return tools
119
+ .filter(t => evaluateCondition(t.condition, this.variables))
120
+ .map(t => this.processToolDefinition({
121
+ type: 'function',
122
+ function: {
123
+ name: t.name,
124
+ description: t.description ?? '',
125
+ parameters: t.parameters ?? { type: 'object', properties: {} }
126
+ }
127
+ }));
128
+ }
129
+ /**
130
+ * Reorder tool schema properties so reasoning fields appear first.
131
+ * Ensures LLM generates reason before action when strict: true.
132
+ */
133
+ processToolDefinition(tool) {
134
+ const processed = JSON.parse(JSON.stringify(tool));
135
+ if (processed.function?.parameters) {
136
+ processed.function.parameters = this.reorderReasoningFields(processed.function.parameters);
137
+ }
138
+ return processed;
139
+ }
140
+ reorderReasoningFields(schema) {
141
+ if (!schema?.properties)
142
+ return schema;
143
+ const processed = { ...schema };
144
+ const reasoningField = ['reason', 'reasoning'].find(f => f in schema.properties);
145
+ if (reasoningField) {
146
+ const { [reasoningField]: rf, ...rest } = processed.properties;
147
+ processed.properties = { [reasoningField]: rf, ...rest };
148
+ if (Array.isArray(processed.required) && processed.required.includes(reasoningField)) {
149
+ processed.required = [
150
+ reasoningField,
151
+ ...processed.required.filter((f) => f !== reasoningField)
152
+ ];
153
+ }
154
+ }
155
+ return processed;
156
+ }
157
+ // ─────────────────────────────────────────────────────────────────────────────
158
+ // Block rendering
159
+ // ─────────────────────────────────────────────────────────────────────────────
160
+ /**
161
+ * Render all files for a given section into a single string.
162
+ */
163
+ renderSection(section) {
164
+ const files = (this.manifest.spec.files ?? [])
165
+ .filter(f => f.section === section)
166
+ .sort((a, b) => a.order - b.order);
167
+ const parts = [];
168
+ for (const file of files) {
169
+ if (!evaluateCondition(file.condition, this.variables))
170
+ continue;
171
+ const content = this.renderBlocks(file.blocks ?? []);
172
+ if (content)
173
+ parts.push(content);
174
+ }
175
+ return parts.join('\n\n');
176
+ }
177
+ renderBlocks(blocks) {
178
+ const sorted = [...blocks].sort((a, b) => a.order - b.order);
179
+ const parts = [];
180
+ for (const block of sorted) {
181
+ if (!evaluateCondition(block.condition, this.variables))
182
+ continue;
183
+ const rendered = this.renderBlock(block);
184
+ if (rendered)
185
+ parts.push(rendered);
186
+ }
187
+ return parts.join('\n\n');
188
+ }
189
+ renderBlock(block) {
190
+ switch (block.type) {
191
+ case 'text':
192
+ return this.populateTemplate(block.content ?? '', this.variables);
193
+ case 'heading': {
194
+ const level = Math.min(Math.max(block.headingLevel ?? 2, 1), 6);
195
+ return `${'#'.repeat(level)} ${block.content ?? ''}`;
196
+ }
197
+ case 'divider':
198
+ return '---';
199
+ case 'variable': {
200
+ const val = this.variables[block.variableKey ?? ''];
201
+ return val !== undefined && val !== null ? String(val) : '';
202
+ }
203
+ case 'component_ref': {
204
+ const comp = this.manifest.resolvedDependencies?.components?.find(c => c.name === block.componentName);
205
+ return comp?.content ? this.populateTemplate(comp.content, this.variables) : '';
206
+ }
207
+ case 'assistant_ref': {
208
+ const assistant = this.manifest.resolvedDependencies?.assistants?.find(a => a.name === block.assistantName);
209
+ if (!assistant)
210
+ return '';
211
+ if (assistant.blocks)
212
+ return this.renderBlocks(assistant.blocks);
213
+ return assistant.content ? this.populateTemplate(assistant.content, this.variables) : '';
214
+ }
215
+ case 'skill_ref': {
216
+ const skill = this.manifest.resolvedDependencies?.skills?.find(s => s.name === block.skillName);
217
+ if (!skill)
218
+ return '';
219
+ if (block.scenarioName) {
220
+ const scenario = skill.scenarios?.find(sc => sc.name === block.scenarioName);
221
+ return scenario?.content ? this.populateTemplate(scenario.content, this.variables) : '';
222
+ }
223
+ return skill.content ? this.populateTemplate(skill.content, this.variables) : '';
224
+ }
225
+ default:
226
+ return '';
227
+ }
228
+ }
229
+ buildInstructions() {
230
+ return this.renderSection('system');
231
+ }
232
+ populateTemplate(template, variables) {
233
+ if (!template)
234
+ return '';
235
+ return template.replace(/\{([^}]+)\}/g, (match, key) => {
236
+ if (key.startsWith('component.')) {
237
+ const compName = key.slice('component.'.length);
238
+ const comp = this.manifest.resolvedDependencies?.components?.find(c => c.name === compName);
239
+ return comp?.content ? this.populateTemplate(comp.content, variables) : match;
240
+ }
241
+ return variables[key] !== undefined ? String(variables[key]) : match;
242
+ });
243
+ }
244
+ // ─────────────────────────────────────────────────────────────────────────────
245
+ // Tool choice normalization
246
+ // ─────────────────────────────────────────────────────────────────────────────
247
+ normalizeToolChoice(toolChoice) {
248
+ if (toolChoice === 'auto' || toolChoice === 'required' || toolChoice === 'none') {
249
+ return toolChoice;
250
+ }
251
+ return { type: 'function', function: { name: toolChoice } };
252
+ }
253
+ cancel() {
254
+ this.cancelled = true;
255
+ return true;
256
+ }
257
+ // ─────────────────────────────────────────────────────────────────────────────
258
+ // Variable validation
259
+ // ─────────────────────────────────────────────────────────────────────────────
260
+ validateVariables() {
261
+ const schema = this.manifest.spec.variables ?? [];
262
+ for (const varDef of schema) {
263
+ if (!varDef.required)
264
+ continue;
265
+ // Skip if the variable's own condition doesn't pass
266
+ if (!evaluateCondition(varDef.condition, this.variables))
267
+ continue;
268
+ if (this.variables[varDef.key] === undefined) {
269
+ throw new Error(`[BaseExecutor] Required variable missing: ${varDef.key}`);
270
+ }
271
+ }
272
+ }
273
+ // ─────────────────────────────────────────────────────────────────────────────
274
+ // Message building
275
+ // ─────────────────────────────────────────────────────────────────────────────
276
+ buildInitialMessages() {
277
+ const messages = [];
278
+ messages.push({ role: 'system', content: this.instructions });
279
+ const userContent = this.renderSection('messages');
280
+ let finalUserContent;
281
+ if (this.files && this.files.length > 0) {
282
+ finalUserContent = [{ type: 'text', text: userContent }, ...this.files];
283
+ }
284
+ else {
285
+ finalUserContent = userContent;
286
+ }
287
+ messages.push({ role: 'user', content: finalUserContent });
288
+ return messages;
289
+ }
290
+ // ─────────────────────────────────────────────────────────────────────────────
291
+ // Pricing
292
+ // ─────────────────────────────────────────────────────────────────────────────
293
+ calculateCost(inputTokens, outputTokens) {
294
+ if (this.modelPricing) {
295
+ return (inputTokens / 1_000_000) * this.modelPricing.inputTokensPer1M +
296
+ (outputTokens / 1_000_000) * this.modelPricing.outputTokensPer1M;
297
+ }
298
+ // Default: Claude Sonnet pricing
299
+ return (inputTokens / 1_000_000) * 3 + (outputTokens / 1_000_000) * 15;
300
+ }
301
+ // ─────────────────────────────────────────────────────────────────────────────
302
+ // Main execution
303
+ // ─────────────────────────────────────────────────────────────────────────────
304
+ async execute() {
305
+ try {
306
+ this.validateVariables();
307
+ if (this.messages.length === 0) {
308
+ this.messages = this.buildInitialMessages();
309
+ }
310
+ const enableToolCalls = this.manifest.spec.enableToolCalls !== false;
311
+ const toolChoice = this.normalizeToolChoice(this.initialToolChoice);
312
+ const turnStart = Date.now();
313
+ const result = await this.invoke(this.messages, {
314
+ tools: enableToolCalls ? this.allToolDefs : [],
315
+ tool_choice: enableToolCalls ? toolChoice : 'none'
316
+ });
317
+ const turnDuration = Date.now() - turnStart;
318
+ const usage = {
319
+ inputTokens: result.usage?.input_tokens || 0,
320
+ outputTokens: result.usage?.output_tokens || 0,
321
+ totalCostUSD: 0
322
+ };
323
+ usage.totalCostUSD = this.calculateCost(usage.inputTokens, usage.outputTokens);
324
+ this.messages.push(result.message);
325
+ await this.sendTurnTrace(result.usage || { input_tokens: 0, output_tokens: 0 }, turnDuration, usage.totalCostUSD);
326
+ // No tools → return message content directly
327
+ if (!enableToolCalls || this.allToolDefs.length === 0) {
328
+ const content = result.message.content;
329
+ return {
330
+ ok: !this.cancelled,
331
+ usage,
332
+ result: typeof content === 'string' ? content : content,
333
+ messages: this.messages
334
+ };
335
+ }
336
+ // Tool loop
337
+ let output;
338
+ const hasToolRouter = Object.keys(this.toolRouter).length > 0;
339
+ if (hasToolRouter) {
340
+ output = await this.runToolLoop(result.message, usage);
341
+ // Handle pause signal from runToolLoop
342
+ if (output && typeof output === 'object' && output.__paused) {
343
+ return {
344
+ ok: true,
345
+ paused: true,
346
+ pendingToolCall: output.pendingToolCall,
347
+ usage,
348
+ result: null,
349
+ messages: this.messages
350
+ };
351
+ }
352
+ }
353
+ else if (result.message.tool_calls && result.message.tool_calls.length > 0) {
354
+ output = result.message.tool_calls[0].args;
355
+ }
356
+ else {
357
+ output = result.message.content;
358
+ }
359
+ return { ok: !this.cancelled, usage, result: output, messages: this.messages };
360
+ }
361
+ catch (error) {
362
+ return {
363
+ ok: false,
364
+ usage: { inputTokens: 0, outputTokens: 0, totalCostUSD: 0 },
365
+ result: null,
366
+ messages: this.messages,
367
+ error: error.message
368
+ };
369
+ }
370
+ }
371
+ // ─────────────────────────────────────────────────────────────────────────────
372
+ // Tool loop
373
+ // ─────────────────────────────────────────────────────────────────────────────
374
+ async runToolLoop(message, usage) {
375
+ const terminatingTools = ['finish_agent_run', 'output'];
376
+ while (this.hasToolCalls(message)) {
377
+ if (this.cancelled)
378
+ break;
379
+ if (this.messages.length >= this.maxMessages) {
380
+ throw new Error(`[BaseExecutor] Message stack exceeded ${this.maxMessages} messages. ` +
381
+ 'Agent must call finish_agent_run to complete.');
382
+ }
383
+ // Tag each tool call with source before routing
384
+ const taggedToolCalls = message.tool_calls.map(tc => ({
385
+ ...tc,
386
+ source: (SYSTEM_TOOL_NAMES.has(tc.name) ? 'system' : 'custom')
387
+ }));
388
+ // Check for custom tools not in the router — these trigger pause
389
+ if (this.onToolCall) {
390
+ for (const tc of taggedToolCalls) {
391
+ if (tc.source === 'custom' && !this.toolRouter[tc.name] && !terminatingTools.includes(tc.name)) {
392
+ this.log(`[BaseExecutor] Custom tool '${tc.name}' not in router — pausing execution`);
393
+ const cbResult = await this.onToolCall({ toolCall: tc, toolResponse: undefined });
394
+ if (cbResult?.pause) {
395
+ return { __paused: true, pendingToolCall: tc };
396
+ }
397
+ }
398
+ }
399
+ }
400
+ const toolResults = await this.handleToolCalls(taggedToolCalls);
401
+ this.forceNextTool = toolResults.find(r => r.forceNextTool)?.forceNextTool;
402
+ for (const r of toolResults) {
403
+ this.messages.push({ role: 'tool', tool_call_id: r.tool_call_id, content: JSON.stringify(r.content) });
404
+ }
405
+ if (this.onToolCall) {
406
+ for (let i = 0; i < taggedToolCalls.length; i++) {
407
+ const tc = taggedToolCalls[i];
408
+ if (terminatingTools.includes(tc.name))
409
+ continue;
410
+ if (tc.source === 'custom' && !this.toolRouter[tc.name])
411
+ continue; // already handled above
412
+ const cbResult = await this.onToolCall({ toolCall: tc, toolResponse: toolResults[i]?.content });
413
+ if (cbResult?.abort) {
414
+ this.cancelled = true;
415
+ break;
416
+ }
417
+ }
418
+ }
419
+ if (this.cancelled)
420
+ break;
421
+ const termCall = taggedToolCalls.find(c => terminatingTools.includes(c.name));
422
+ if (termCall) {
423
+ const termResult = toolResults.find(r => r.tool_call_id === termCall.id);
424
+ if (termResult && (termResult.content.completed === false || termResult.content.error)) {
425
+ this.log('[BaseExecutor] Terminating tool rejected, continuing');
426
+ }
427
+ else {
428
+ return termCall.args;
429
+ }
430
+ }
431
+ const toolChoiceStr = this.forceNextTool ?? 'required';
432
+ const toolChoice = this.normalizeToolChoice(toolChoiceStr);
433
+ const turnStart = Date.now();
434
+ const result = await this.invoke(this.messages, { tools: this.allToolDefs, tool_choice: toolChoice });
435
+ const turnDuration = Date.now() - turnStart;
436
+ usage.inputTokens += result.usage?.input_tokens || 0;
437
+ usage.outputTokens += result.usage?.output_tokens || 0;
438
+ usage.totalCostUSD = this.calculateCost(usage.inputTokens, usage.outputTokens);
439
+ message = result.message;
440
+ this.messages.push(message);
441
+ const turnCost = this.calculateCost(result.usage?.input_tokens || 0, result.usage?.output_tokens || 0);
442
+ await this.sendTurnTrace(result.usage || { input_tokens: 0, output_tokens: 0 }, turnDuration, turnCost);
443
+ }
444
+ if (this.cancelled)
445
+ return { ok: false, status: 'cancelled' };
446
+ throw new Error('[BaseExecutor] Agent ended without calling terminating tool');
447
+ }
448
+ async handleToolCalls(toolCalls) {
449
+ const results = [];
450
+ for (const tc of toolCalls) {
451
+ this.log(`[BaseExecutor] Executing tool: ${tc.name}`);
452
+ let toolResult;
453
+ if (tc.name === 'finish_agent_run') {
454
+ const handler = this.toolRouter[tc.name];
455
+ if (handler) {
456
+ try {
457
+ toolResult = await handler.execute(tc.args);
458
+ }
459
+ catch (err) {
460
+ toolResult = { completed: false, error: true, message: err.message };
461
+ }
462
+ }
463
+ else {
464
+ toolResult = tc.args;
465
+ }
466
+ }
467
+ else {
468
+ const handler = this.toolRouter[tc.name];
469
+ if (!handler) {
470
+ toolResult = { completed: false, error: true, message: `Tool '${tc.name}' not found` };
471
+ }
472
+ else {
473
+ try {
474
+ toolResult = await handler.execute(tc.args);
475
+ this.toolErrorCount[tc.name] = 0;
476
+ }
477
+ catch (err) {
478
+ this.toolErrorCount[tc.name] = (this.toolErrorCount[tc.name] || 0) + 1;
479
+ if (this.toolErrorCount[tc.name] >= 3)
480
+ throw err;
481
+ toolResult = { completed: false, error: true, message: 'Tool error. Please try a different approach.' };
482
+ }
483
+ }
484
+ }
485
+ results.push({ tool_call_id: tc.id, content: toolResult, forceNextTool: toolResult?.forceNextTool });
486
+ }
487
+ return results;
488
+ }
489
+ // ─────────────────────────────────────────────────────────────────────────────
490
+ // Tracing
491
+ // ─────────────────────────────────────────────────────────────────────────────
492
+ async sendTurnTrace(turnUsage, turnDuration, cost) {
493
+ if (!this.tracing)
494
+ return;
495
+ const lastAssistant = [...this.messages].reverse().find(m => m.role === 'assistant');
496
+ const lastIdx = lastAssistant ? this.messages.lastIndexOf(lastAssistant) : -1;
497
+ const messagesWithoutOutput = lastIdx >= 0
498
+ ? [...this.messages.slice(0, lastIdx), ...this.messages.slice(lastIdx + 1)]
499
+ : this.messages;
500
+ await sendTrace(this.tracing, {
501
+ promptName: this.manifest.metadata.name,
502
+ manifest: this.manifest,
503
+ etag: this.manifest.metadata.etag || null,
504
+ variables: this.variables,
505
+ messages: messagesWithoutOutput.slice(2),
506
+ output: lastAssistant || null,
507
+ inputTokens: turnUsage.input_tokens,
508
+ outputTokens: turnUsage.output_tokens,
509
+ totalTokens: turnUsage.input_tokens + turnUsage.output_tokens,
510
+ cost,
511
+ duration: turnDuration,
512
+ model: { provider: this.provider, name: this.model, metadata: this.primaryModelConfig.metadata || {} },
513
+ status: 'completed',
514
+ metadata: { turnNumber: this.messages.filter(m => m.role === 'assistant').length },
515
+ tags: this.tracing.tags || []
516
+ }, this.log);
517
+ }
518
+ // ─────────────────────────────────────────────────────────────────────────────
519
+ // Abstract — implemented by provider adapters
520
+ // ─────────────────────────────────────────────────────────────────────────────
521
+ async invoke(_messages, _options) {
522
+ throw new Error('invoke() must be implemented by provider adapter');
523
+ }
524
+ hasToolCalls(_message) {
525
+ throw new Error('hasToolCalls() must be implemented by provider adapter');
526
+ }
527
+ }
528
+ //# sourceMappingURL=BaseExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseExecutor.js","sourceRoot":"","sources":["../src/BaseExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ interface ImageCacheConfig {
2
+ log?: (message: string, ...args: any[]) => void;
3
+ maxCacheSize?: number;
4
+ }
5
+ interface CacheStats {
6
+ hits: number;
7
+ misses: number;
8
+ stores: number;
9
+ evictions: number;
10
+ }
11
+ interface CacheStatsWithRates extends CacheStats {
12
+ hitRate: string;
13
+ cacheSize: number;
14
+ maxSize: number;
15
+ }
16
+ interface ProviderStats {
17
+ anthropic: number;
18
+ openai: number;
19
+ bedrock: number;
20
+ deepseek: number;
21
+ }
22
+ interface MemorySize {
23
+ bytes: number;
24
+ kb: string;
25
+ mb: string;
26
+ }
27
+ /**
28
+ * ImageCache - Caches processed images per provider format
29
+ *
30
+ * Prevents reprocessing the same image when switching providers multiple times.
31
+ * Stores images in multiple formats (anthropic, openai, bedrock) keyed by source URL.
32
+ *
33
+ * Example:
34
+ * - Original: https://example.com/image.jpg
35
+ * - Cache stores:
36
+ * - anthropic: "data:image/jpeg;base64,..."
37
+ * - openai: "data:image/jpeg;base64,..." (or original URL)
38
+ * - bedrock: { type: "image", image: { format: "jpeg", source: { bytes: Uint8Array } } }
39
+ *
40
+ * Cache key: SHA256 hash of source URL for consistent lookup
41
+ */
42
+ export default class ImageCache {
43
+ #private;
44
+ private log;
45
+ private maxCacheSize;
46
+ private cache;
47
+ private stats;
48
+ constructor({ log, maxCacheSize }?: ImageCacheConfig);
49
+ /**
50
+ * Get cached image for specific provider
51
+ * Returns null if not found
52
+ */
53
+ get(imageSource: any, provider: string): any | null;
54
+ /**
55
+ * Store processed image for specific provider
56
+ */
57
+ set(imageSource: any, provider: string, processedImage: any): void;
58
+ /**
59
+ * Check if image is cached for specific provider
60
+ */
61
+ has(imageSource: any, provider: string): boolean;
62
+ /**
63
+ * Get all cached formats for an image
64
+ * Returns object with available providers
65
+ */
66
+ getAll(imageSource: any): Record<string, any> | null;
67
+ /**
68
+ * Clear entire cache
69
+ */
70
+ clear(): void;
71
+ /**
72
+ * Get cache statistics
73
+ */
74
+ getStats(): CacheStatsWithRates;
75
+ /**
76
+ * Reset statistics
77
+ */
78
+ resetStats(): void;
79
+ /**
80
+ * Get cache size in bytes (approximate)
81
+ * Useful for monitoring memory usage
82
+ */
83
+ getMemorySize(): MemorySize;
84
+ /**
85
+ * Log cache status
86
+ */
87
+ logStatus(): void;
88
+ /**
89
+ * Estimate provider-specific memory usage
90
+ */
91
+ getProviderStats(): ProviderStats;
92
+ }
93
+ export {};
94
+ //# sourceMappingURL=ImageCache.d.ts.map