50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
import { createErrorResponse } from '@/common/tool-handler';
|
|
import { ERROR_MESSAGES } from '@/common/constants';
|
|
import * as browserTools from './browser';
|
|
|
|
const tools = { ...browserTools };
|
|
const toolsMap = new Map(Object.values(tools).map((tool) => [tool.name, tool]));
|
|
|
|
/**
|
|
* Tool call parameter interface
|
|
*/
|
|
export interface ToolCallParam {
|
|
name: string;
|
|
args: any;
|
|
}
|
|
|
|
/**
|
|
* Handle tool execution
|
|
*/
|
|
export const handleCallTool = async (param: ToolCallParam) => {
|
|
console.log('🛠️ [Tool Handler] Executing tool:', {
|
|
toolName: param.name,
|
|
hasArgs: !!param.args,
|
|
availableTools: Array.from(toolsMap.keys()),
|
|
args: param.args,
|
|
});
|
|
|
|
const tool = toolsMap.get(param.name);
|
|
if (!tool) {
|
|
console.error('🛠️ [Tool Handler] Tool not found:', param.name);
|
|
return createErrorResponse(`Tool ${param.name} not found`);
|
|
}
|
|
|
|
try {
|
|
console.log('🛠️ [Tool Handler] Starting tool execution for:', param.name);
|
|
const result = await tool.execute(param.args);
|
|
console.log('🛠️ [Tool Handler] Tool execution completed:', {
|
|
toolName: param.name,
|
|
hasResult: !!result,
|
|
isError: result?.isError,
|
|
result,
|
|
});
|
|
return result;
|
|
} catch (error) {
|
|
console.error(`🛠️ [Tool Handler] Tool execution failed for ${param.name}:`, error);
|
|
return createErrorResponse(
|
|
error instanceof Error ? error.message : ERROR_MESSAGES.TOOL_EXECUTION_FAILED,
|
|
);
|
|
}
|
|
};
|