@inspectr/mcplab-core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,78 @@
1
+ import type {
2
+ AgentConfig,
3
+ ExecutableScenario,
4
+ LlmMessage,
5
+ LlmResponse,
6
+ ToolDef,
7
+ TraceMessage
8
+ } from './types.js';
9
+ import type { McpClientManager } from './mcp.js';
10
+ export interface AgentRunResult {
11
+ finalText: string;
12
+ toolSequence: string[];
13
+ toolDurationsMs: number[];
14
+ traceMessages: TraceMessage[];
15
+ traceStartedAt: string;
16
+ traceEndedAt: string;
17
+ traceProvider: string;
18
+ traceModel: string;
19
+ }
20
+ export type AgentRunProgressEvent =
21
+ | {
22
+ type: 'llm_request_started';
23
+ scenarioId: string;
24
+ agentName: string;
25
+ provider: string;
26
+ model: string;
27
+ turn: number;
28
+ }
29
+ | {
30
+ type: 'llm_response_received';
31
+ scenarioId: string;
32
+ agentName: string;
33
+ provider: string;
34
+ model: string;
35
+ turn: number;
36
+ hasText: boolean;
37
+ toolCallCount: number;
38
+ }
39
+ | {
40
+ type: 'tool_call_started';
41
+ scenarioId: string;
42
+ agentName: string;
43
+ server: string;
44
+ tool: string;
45
+ turn: number;
46
+ }
47
+ | {
48
+ type: 'tool_call_finished';
49
+ scenarioId: string;
50
+ agentName: string;
51
+ server: string;
52
+ tool: string;
53
+ turn: number;
54
+ ok: boolean;
55
+ durationMs: number;
56
+ }
57
+ | {
58
+ type: 'final_answer';
59
+ scenarioId: string;
60
+ agentName: string;
61
+ turn: number;
62
+ hasText: boolean;
63
+ };
64
+ export declare function runAgentScenario(params: {
65
+ scenario: ExecutableScenario;
66
+ agent: AgentConfig;
67
+ mcp: McpClientManager;
68
+ maxTurns?: number;
69
+ signal?: AbortSignal;
70
+ onProgress?: (event: AgentRunProgressEvent) => void | Promise<void>;
71
+ }): Promise<AgentRunResult>;
72
+ export declare function chatWithAgent(params: {
73
+ agent: AgentConfig;
74
+ messages: LlmMessage[];
75
+ tools?: ToolDef[];
76
+ system?: string;
77
+ }): Promise<LlmResponse>;
78
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EAClB,UAAU,EACV,WAAW,EAEX,OAAO,EACP,YAAY,EAGb,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,qBAAqB,GAC7B;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAaN,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,gBAAgB,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE,GAAG,OAAO,CAAC,cAAc,CAAC,CAqM1B;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE;IAC1C,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,WAAW,CAAC,CAUvB"}
package/dist/agent.js ADDED
@@ -0,0 +1,565 @@
1
+ import OpenAI from 'openai';
2
+ import Anthropic from '@anthropic-ai/sdk';
3
+ export async function runAgentScenario(params) {
4
+ const { scenario, agent, mcp } = params;
5
+ const toolsByName = new Map();
6
+ for (const serverName of scenario.servers) {
7
+ const tools = await mcp.listTools(serverName);
8
+ for (const tool of tools) {
9
+ if (toolsByName.has(tool.name)) {
10
+ throw new Error(`Duplicate tool name across servers: ${tool.name}`);
11
+ }
12
+ toolsByName.set(tool.name, { server: serverName, tool });
13
+ }
14
+ }
15
+ const tools = Array.from(toolsByName.values()).map((entry) => entry.tool);
16
+ const adapter = createAdapter(agent);
17
+ const messages = [];
18
+ if (agent.system) {
19
+ messages.push({ role: 'system', content: agent.system });
20
+ }
21
+ messages.push({ role: 'user', content: scenario.prompt });
22
+ const traceMessages = [
23
+ {
24
+ role: 'user',
25
+ ts: new Date().toISOString(),
26
+ content: [{ type: 'text', text: scenario.prompt }]
27
+ }
28
+ ];
29
+ const traceStartedAt = new Date().toISOString();
30
+ const toolSequence = [];
31
+ const toolDurationsMs = [];
32
+ let finalText = '';
33
+ const maxTurns = params.maxTurns ?? 8;
34
+ const emitProgress = async (event) => {
35
+ if (!params.onProgress)
36
+ return;
37
+ await params.onProgress(event);
38
+ };
39
+ let finalAnswerTurn = 0;
40
+ for (let turn = 0; turn < maxTurns; turn += 1) {
41
+ await emitProgress({
42
+ type: 'llm_request_started',
43
+ scenarioId: scenario.id,
44
+ agentName: scenario.agent,
45
+ provider: agent.provider,
46
+ model: agent.model,
47
+ turn
48
+ });
49
+ const response = await adapter.chat(messages, tools, {
50
+ model: agent.model,
51
+ temperature: agent.temperature,
52
+ max_tokens: agent.max_tokens,
53
+ system: agent.system
54
+ });
55
+ const responseText = truncate((response.content ?? '').trim(), 4000);
56
+ const toolCallNames = response.tool_calls?.map((call) => call.name) ?? [];
57
+ await emitProgress({
58
+ type: 'llm_response_received',
59
+ scenarioId: scenario.id,
60
+ agentName: scenario.agent,
61
+ provider: agent.provider,
62
+ model: agent.model,
63
+ turn,
64
+ hasText: responseText.length > 0,
65
+ toolCallCount: toolCallNames.length
66
+ });
67
+ if (response.tool_calls && response.tool_calls.length > 0) {
68
+ const assistantBlocks = [];
69
+ if (responseText)
70
+ assistantBlocks.push({ type: 'text', text: responseText });
71
+ const resolvedToolCalls = response.tool_calls.map((toolCall, index) => {
72
+ const resolved = toolsByName.get(toolCall.name);
73
+ if (!resolved) {
74
+ throw new Error(`Tool not found: ${toolCall.name}`);
75
+ }
76
+ const toolUseId = toolCall.id ?? `tool_use_${turn}_${index}`;
77
+ assistantBlocks.push({
78
+ type: 'tool_use',
79
+ id: toolUseId,
80
+ name: toolCall.name,
81
+ input: toolCall.arguments,
82
+ server: resolved.server
83
+ });
84
+ return { toolCall, resolved, toolUseId };
85
+ });
86
+ traceMessages.push({
87
+ role: 'assistant',
88
+ ts: new Date().toISOString(),
89
+ usage: toTraceUsage(response.usage),
90
+ content: assistantBlocks
91
+ });
92
+ messages.push({
93
+ role: 'assistant',
94
+ content: response.content ?? '',
95
+ tool_calls: response.tool_calls
96
+ });
97
+ const toolResultBlocks = [];
98
+ for (const { toolCall, resolved, toolUseId } of resolvedToolCalls) {
99
+ await emitProgress({
100
+ type: 'tool_call_started',
101
+ scenarioId: scenario.id,
102
+ agentName: scenario.agent,
103
+ server: resolved.server,
104
+ tool: toolCall.name,
105
+ turn
106
+ });
107
+ const tsStart = new Date();
108
+ let ok = true;
109
+ let result;
110
+ try {
111
+ result = await mcp.callTool(resolved.server, toolCall.name, toolCall.arguments);
112
+ }
113
+ catch (err) {
114
+ ok = false;
115
+ result = { error: String(err?.message ?? err) };
116
+ }
117
+ const tsEnd = new Date();
118
+ const durationMs = tsEnd.getTime() - tsStart.getTime();
119
+ toolResultBlocks.push({
120
+ type: 'tool_result',
121
+ tool_use_id: toolUseId,
122
+ name: toolCall.name,
123
+ server: resolved.server,
124
+ is_error: !ok,
125
+ duration_ms: durationMs,
126
+ ts_start: tsStart.toISOString(),
127
+ ts_end: tsEnd.toISOString(),
128
+ content: [
129
+ {
130
+ type: 'text',
131
+ text: truncateToolResultContent(stringifySafe(result))
132
+ }
133
+ ]
134
+ });
135
+ await emitProgress({
136
+ type: 'tool_call_finished',
137
+ scenarioId: scenario.id,
138
+ agentName: scenario.agent,
139
+ server: resolved.server,
140
+ tool: toolCall.name,
141
+ turn,
142
+ ok,
143
+ durationMs
144
+ });
145
+ toolSequence.push(toolCall.name);
146
+ toolDurationsMs.push(durationMs);
147
+ messages.push({
148
+ role: 'tool',
149
+ content: stringifySafe(result),
150
+ tool_call_id: toolCall.id ?? toolUseId,
151
+ name: toolCall.name
152
+ });
153
+ }
154
+ if (toolResultBlocks.length > 0) {
155
+ traceMessages.push({
156
+ role: 'tool',
157
+ ts: new Date().toISOString(),
158
+ content: toolResultBlocks
159
+ });
160
+ }
161
+ continue;
162
+ }
163
+ if (response.content) {
164
+ finalText = response.content;
165
+ finalAnswerTurn = turn;
166
+ traceMessages.push({
167
+ role: 'assistant',
168
+ ts: new Date().toISOString(),
169
+ usage: toTraceUsage(response.usage),
170
+ content: [{ type: 'text', text: truncate(finalText, 4000) }]
171
+ });
172
+ }
173
+ break;
174
+ }
175
+ await emitProgress({
176
+ type: 'final_answer',
177
+ scenarioId: scenario.id,
178
+ agentName: scenario.agent,
179
+ turn: finalAnswerTurn,
180
+ hasText: finalText.trim().length > 0
181
+ });
182
+ return {
183
+ finalText,
184
+ toolSequence,
185
+ toolDurationsMs,
186
+ traceMessages,
187
+ traceStartedAt,
188
+ traceEndedAt: new Date().toISOString(),
189
+ traceProvider: agent.provider,
190
+ traceModel: agent.model
191
+ };
192
+ }
193
+ export async function chatWithAgent(params) {
194
+ const { agent, messages } = params;
195
+ const tools = params.tools ?? [];
196
+ const adapter = createAdapter(agent);
197
+ return adapter.chat(messages, tools, {
198
+ model: agent.model,
199
+ temperature: agent.temperature,
200
+ max_tokens: agent.max_tokens,
201
+ system: params.system ?? agent.system
202
+ });
203
+ }
204
+ function createAdapter(agent) {
205
+ if (agent.provider === 'openai') {
206
+ return new OpenAiAdapter(process.env.OPENAI_API_KEY);
207
+ }
208
+ if (agent.provider === 'anthropic') {
209
+ return new AnthropicAdapter(process.env.ANTHROPIC_API_KEY);
210
+ }
211
+ if (agent.provider === 'azure_openai') {
212
+ return new AzureOpenAiAdapter({
213
+ apiKey: process.env.AZURE_OPENAI_API_KEY,
214
+ endpoint: process.env.AZURE_OPENAI_ENDPOINT,
215
+ deployment: process.env.AZURE_OPENAI_DEPLOYMENT,
216
+ apiVersion: process.env.AZURE_OPENAI_API_VERSION
217
+ });
218
+ }
219
+ throw new Error(`Unsupported provider: ${agent.provider}`);
220
+ }
221
+ class OpenAiAdapter {
222
+ client;
223
+ constructor(apiKey) {
224
+ if (!apiKey)
225
+ throw new Error('Missing OPENAI_API_KEY');
226
+ this.client = new OpenAI({ apiKey });
227
+ }
228
+ async chat(messages, tools, options) {
229
+ const response = await this.client.chat.completions.create({
230
+ model: options.model,
231
+ messages: messages.map(toOpenAiMessage),
232
+ tools: tools.length > 0 ? tools.map(toOpenAiTool) : undefined,
233
+ temperature: options.temperature,
234
+ max_tokens: options.max_tokens
235
+ });
236
+ const message = response.choices[0]?.message;
237
+ const toolCalls = (message?.tool_calls ?? []).map((call) => ({
238
+ id: call.id,
239
+ name: call.function.name,
240
+ arguments: safeJsonParse(call.function.arguments)
241
+ }));
242
+ return {
243
+ content: message?.content ?? '',
244
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
245
+ raw: response,
246
+ usage: response.usage
247
+ ? {
248
+ input_tokens: response.usage.prompt_tokens,
249
+ output_tokens: response.usage.completion_tokens,
250
+ total_tokens: response.usage.total_tokens
251
+ }
252
+ : undefined
253
+ };
254
+ }
255
+ }
256
+ class AzureOpenAiAdapter {
257
+ client;
258
+ deployment;
259
+ apiVersion;
260
+ constructor(params) {
261
+ const { apiKey, endpoint, deployment, apiVersion } = params;
262
+ if (!apiKey)
263
+ throw new Error('Missing AZURE_OPENAI_API_KEY');
264
+ if (!endpoint)
265
+ throw new Error('Missing AZURE_OPENAI_ENDPOINT');
266
+ if (!deployment)
267
+ throw new Error('Missing AZURE_OPENAI_DEPLOYMENT');
268
+ this.deployment = deployment;
269
+ this.apiVersion = apiVersion ?? '2024-02-15-preview';
270
+ this.client = new OpenAI({
271
+ apiKey,
272
+ baseURL: `${endpoint}/openai/deployments/${deployment}`,
273
+ defaultQuery: { 'api-version': this.apiVersion }
274
+ });
275
+ }
276
+ async chat(messages, tools, options) {
277
+ const baseRequest = {
278
+ model: this.deployment,
279
+ messages: messages.map(toOpenAiMessage),
280
+ tools: tools.length > 0 ? tools.map(toOpenAiTool) : undefined
281
+ };
282
+ if (typeof options.temperature === 'number') {
283
+ baseRequest.temperature = options.temperature;
284
+ }
285
+ const createWithTemperatureFallback = async (request) => {
286
+ try {
287
+ return await this.client.chat.completions.create(request);
288
+ }
289
+ catch (err) {
290
+ const message = String(err?.message ?? '');
291
+ const unsupportedTemperature = message.includes('temperature') &&
292
+ (message.includes('not supported') || message.includes('Only the default'));
293
+ if (!unsupportedTemperature || !('temperature' in request))
294
+ throw err;
295
+ const { temperature: _ignored, ...withoutTemperature } = request;
296
+ return this.client.chat.completions.create(withoutTemperature);
297
+ }
298
+ };
299
+ let response;
300
+ if (typeof options.max_tokens === 'number') {
301
+ try {
302
+ response = await createWithTemperatureFallback({
303
+ ...baseRequest,
304
+ max_completion_tokens: options.max_tokens
305
+ });
306
+ }
307
+ catch (err) {
308
+ const message = String(err?.message ?? '');
309
+ const unsupportedMaxCompletionTokens = message.includes('max_completion_tokens') && message.includes('not supported');
310
+ if (!unsupportedMaxCompletionTokens)
311
+ throw err;
312
+ response = await createWithTemperatureFallback({
313
+ ...baseRequest,
314
+ max_tokens: options.max_tokens
315
+ });
316
+ }
317
+ }
318
+ else {
319
+ response = await createWithTemperatureFallback(baseRequest);
320
+ }
321
+ const message = response.choices[0]?.message;
322
+ const toolCalls = (message?.tool_calls ?? []).map((call) => ({
323
+ id: call.id,
324
+ name: call.function.name,
325
+ arguments: safeJsonParse(call.function.arguments)
326
+ }));
327
+ return {
328
+ content: message?.content ?? '',
329
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
330
+ raw: response,
331
+ usage: response.usage
332
+ ? {
333
+ input_tokens: response.usage.prompt_tokens,
334
+ output_tokens: response.usage.completion_tokens,
335
+ total_tokens: response.usage.total_tokens
336
+ }
337
+ : undefined
338
+ };
339
+ }
340
+ }
341
+ class AnthropicAdapter {
342
+ client;
343
+ constructor(apiKey) {
344
+ if (!apiKey)
345
+ throw new Error('Missing ANTHROPIC_API_KEY');
346
+ this.client = new Anthropic({ apiKey });
347
+ }
348
+ async chat(messages, tools, options) {
349
+ const system = messages.find((msg) => msg.role === 'system')?.content ?? options.system;
350
+ const anthroMessages = toAnthropicMessages(messages);
351
+ const response = await this.createWithModelFallback(options.model, {
352
+ temperature: options.temperature,
353
+ max_tokens: options.max_tokens ?? 1024,
354
+ system,
355
+ messages: anthroMessages,
356
+ tools: tools.length > 0 ? tools.map(toAnthropicTool) : undefined
357
+ });
358
+ const toolCalls = [];
359
+ let textContent = '';
360
+ for (const block of response.content) {
361
+ if (block.type === 'text') {
362
+ textContent += block.text;
363
+ }
364
+ if (block.type === 'tool_use') {
365
+ toolCalls.push({
366
+ id: block.id,
367
+ name: block.name,
368
+ arguments: block.input
369
+ });
370
+ }
371
+ }
372
+ return {
373
+ content: textContent,
374
+ tool_calls: toolCalls.length > 0 ? toolCalls : undefined,
375
+ raw: response,
376
+ usage: response.usage
377
+ ? {
378
+ input_tokens: response.usage.input_tokens,
379
+ output_tokens: response.usage.output_tokens,
380
+ total_tokens: typeof response.usage.input_tokens === 'number' &&
381
+ typeof response.usage.output_tokens === 'number'
382
+ ? response.usage.input_tokens + response.usage.output_tokens
383
+ : undefined
384
+ }
385
+ : undefined
386
+ };
387
+ }
388
+ async createWithModelFallback(model, payload) {
389
+ const candidates = anthropicModelCandidates(model);
390
+ let lastError;
391
+ for (const candidate of candidates) {
392
+ try {
393
+ return await this.client.messages.create({
394
+ model: candidate,
395
+ stream: false,
396
+ ...payload
397
+ });
398
+ }
399
+ catch (error) {
400
+ lastError = error;
401
+ if (!isModelNotFound(error) || candidate === candidates[candidates.length - 1]) {
402
+ break;
403
+ }
404
+ }
405
+ }
406
+ if (isModelNotFound(lastError)) {
407
+ const tried = candidates.join(', ');
408
+ throw new Error(`Anthropic model not found: '${model}' (tried: ${tried}). Your API key is authenticated, but this model is not enabled/available for that Anthropic account. Update the agent model in Manage Agents/Config Editor to one your account can access.`);
409
+ }
410
+ throw lastError;
411
+ }
412
+ }
413
+ function anthropicModelCandidates(model) {
414
+ const trimmed = model.trim();
415
+ const out = [trimmed];
416
+ const legacyWithDate = /^(claude-[\w.-]+)-\d{8}$/;
417
+ const match = trimmed.match(legacyWithDate);
418
+ if (match) {
419
+ out.push(`${match[1]}-latest`);
420
+ }
421
+ return Array.from(new Set(out));
422
+ }
423
+ function isModelNotFound(error) {
424
+ if (!error)
425
+ return false;
426
+ const anyErr = error;
427
+ const statusNotFound = anyErr.status === 404;
428
+ const typeNotFound = anyErr.error?.type === 'not_found_error';
429
+ const msg = `${anyErr.message ?? ''} ${anyErr.error?.message ?? ''}`.toLowerCase();
430
+ return (statusNotFound || typeNotFound || (msg.includes('not_found_error') && msg.includes('model')));
431
+ }
432
+ function toOpenAiTool(tool) {
433
+ return {
434
+ type: 'function',
435
+ function: {
436
+ name: tool.name,
437
+ description: tool.description ?? '',
438
+ parameters: ensureJsonSchema(tool.inputSchema)
439
+ }
440
+ };
441
+ }
442
+ function ensureJsonSchema(schema) {
443
+ if (schema && typeof schema === 'object') {
444
+ const hasType = Object.prototype.hasOwnProperty.call(schema, 'type');
445
+ return hasType ? schema : { ...schema, type: 'object' };
446
+ }
447
+ return { type: 'object', properties: {} };
448
+ }
449
+ function toOpenAiMessage(message) {
450
+ if (message.role === 'tool') {
451
+ return {
452
+ role: 'tool',
453
+ content: message.content,
454
+ tool_call_id: message.tool_call_id ?? ''
455
+ };
456
+ }
457
+ if (message.role === 'assistant' && message.tool_calls && message.tool_calls.length > 0) {
458
+ return {
459
+ role: 'assistant',
460
+ content: message.content ?? '',
461
+ tool_calls: message.tool_calls.map((call) => ({
462
+ id: call.id ?? '',
463
+ type: 'function',
464
+ function: {
465
+ name: call.name,
466
+ arguments: JSON.stringify(call.arguments ?? {})
467
+ }
468
+ }))
469
+ };
470
+ }
471
+ return {
472
+ role: message.role,
473
+ content: message.content
474
+ };
475
+ }
476
+ function toAnthropicTool(tool) {
477
+ return {
478
+ name: tool.name,
479
+ description: tool.description ?? '',
480
+ input_schema: ensureJsonSchema(tool.inputSchema)
481
+ };
482
+ }
483
+ function toAnthropicMessages(messages) {
484
+ const result = [];
485
+ for (const message of messages) {
486
+ if (message.role === 'system')
487
+ continue;
488
+ if (message.role === 'tool') {
489
+ result.push({
490
+ role: 'user',
491
+ content: [
492
+ {
493
+ type: 'tool_result',
494
+ tool_use_id: message.tool_call_id ?? 'unknown',
495
+ content: message.content
496
+ }
497
+ ]
498
+ });
499
+ continue;
500
+ }
501
+ if (message.role === 'assistant' && message.tool_calls && message.tool_calls.length > 0) {
502
+ const contentBlocks = [];
503
+ if (message.content) {
504
+ contentBlocks.push({ type: 'text', text: message.content });
505
+ }
506
+ message.tool_calls.forEach((call, index) => {
507
+ contentBlocks.push({
508
+ type: 'tool_use',
509
+ id: call.id ?? `tool_use_${index}`,
510
+ name: call.name,
511
+ input: call.arguments ?? {}
512
+ });
513
+ });
514
+ result.push({
515
+ role: 'assistant',
516
+ content: contentBlocks.length > 0 ? contentBlocks : [{ type: 'text', text: '' }]
517
+ });
518
+ continue;
519
+ }
520
+ result.push({
521
+ role: message.role === 'assistant' ? 'assistant' : 'user',
522
+ content: [{ type: 'text', text: message.content }]
523
+ });
524
+ }
525
+ return result;
526
+ }
527
+ function safeJsonParse(value) {
528
+ try {
529
+ return JSON.parse(value);
530
+ }
531
+ catch {
532
+ return value;
533
+ }
534
+ }
535
+ function truncateToolResultContent(value) {
536
+ return truncate(value, 12000);
537
+ }
538
+ function toTraceUsage(usage) {
539
+ if (!usage)
540
+ return undefined;
541
+ if (typeof usage.input_tokens !== 'number' &&
542
+ typeof usage.output_tokens !== 'number' &&
543
+ typeof usage.total_tokens !== 'number') {
544
+ return undefined;
545
+ }
546
+ return {
547
+ input_tokens: usage.input_tokens,
548
+ output_tokens: usage.output_tokens,
549
+ total_tokens: usage.total_tokens
550
+ };
551
+ }
552
+ function stringifySafe(value) {
553
+ try {
554
+ return JSON.stringify(value);
555
+ }
556
+ catch {
557
+ return String(value);
558
+ }
559
+ }
560
+ function truncate(value, length) {
561
+ if (value.length <= length)
562
+ return value;
563
+ return `${value.slice(0, length)}...`;
564
+ }
565
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}