/** * 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;}
/**
* 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;
}