import { tool } from '@ag-kit/tools';
import { z } from 'zod';
// Wrap agent as tool
function createAgentTool(agent: Agent, toolName: string) {
return tool(
async ({ url, content, targetLanguage, pageResults }) => {
let prompt = '';
switch (toolName) {
case 'process_page':
prompt = `Process this page: ${url}\n\nTarget language: ${targetLanguage || 'en'}`;
break;
case 'generate_report':
prompt = `Generate comprehensive report from these page results:\n\n${JSON.stringify(pageResults)}\n\nTarget language: ${targetLanguage || 'en'}`;
break;
default:
prompt = content || url;
}
const result = await agent.run(prompt);
return result.data;
},
{
name: toolName,
description: agent.config.description || `Agent: ${agent.config.name}`,
schema: z.object({
url: z.string().optional(),
content: z.string().optional(),
targetLanguage: z.string().optional(),
pageResults: z.array(z.any()).optional()
})
}
);
}
const orchestrator = new Agent({
name: 'multi-agent-orchestrator',
description: 'Orchestrates multi-page web reading and summarization workflow',
model: new OpenAIProvider({
apiKey: process.env.OPENAI_API_KEY!,
defaultModel: process.env.OPENAI_MODEL || 'gpt-4o'
}),
instructions: `You are the orchestrator for multi-page web reading. When given URLs:
1. Use todo_write to plan tasks for each page
2. Coordinate page processing using process_page
3. Coordinate report generation using generate_report
4. Generate comprehensive report in user's language`,
tools: [
createAgentTool(pageProcessorAgent, 'process_page'),
createAgentTool(reportGeneratorAgent, 'generate_report')
]
});