agent-ecosystem/src/main/utils/toolExtraction.ts

63 lines
1.5 KiB
TypeScript

/**
* Tool extraction utilities for parsing tool calls and results from JSONL content blocks.
*/
import type { ContentBlock, ToolCall, ToolResult } from '../types';
/**
* Extract tool calls from content blocks.
*/
export function extractToolCalls(content: ContentBlock[] | string): ToolCall[] {
if (typeof content === 'string') {
return [];
}
const toolCalls: ToolCall[] = [];
for (const block of content) {
if (block.type === 'tool_use' && block.id && block.name) {
const input = block.input ?? {};
const isTask = block.name === 'Task';
const toolCall: ToolCall = {
id: block.id,
name: block.name,
input,
isTask,
};
// Extract Task-specific info
if (isTask) {
toolCall.taskDescription = input.description as string | undefined;
toolCall.taskSubagentType = input.subagent_type as string | undefined;
}
toolCalls.push(toolCall);
}
}
return toolCalls;
}
/**
* Extract tool results from content blocks.
*/
export function extractToolResults(content: ContentBlock[] | string): ToolResult[] {
if (typeof content === 'string') {
return [];
}
const toolResults: ToolResult[] = [];
for (const block of content) {
if (block.type === 'tool_result' && block.tool_use_id) {
toolResults.push({
toolUseId: block.tool_use_id,
content: block.content ?? '',
isError: block.is_error ?? false,
});
}
}
return toolResults;
}