43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
import { BaseSubagent, type SubagentConfig } from '../base-subagent.js';
|
|
import type { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
import type { FastifyBaseLogger } from 'fastify';
|
|
|
|
/**
|
|
* Web Explore Subagent
|
|
*
|
|
* Accepts a research instruction, searches the web (DuckDuckGo) or arXiv
|
|
* for academic queries, fetches relevant page/PDF content, and returns a
|
|
* markdown summary with cited sources.
|
|
*
|
|
* No MCP client needed — operates entirely through platform tools.
|
|
*/
|
|
export class WebExploreSubagent extends BaseSubagent {
|
|
constructor(
|
|
config: SubagentConfig,
|
|
model: BaseChatModel,
|
|
logger: FastifyBaseLogger,
|
|
tools?: any[]
|
|
) {
|
|
super(config, model, logger, undefined, tools);
|
|
}
|
|
|
|
protected getRecursionLimit() { return 15; }
|
|
protected getFallbackText() { return 'No results found.'; }
|
|
protected requiresMCPClient() { return false; }
|
|
}
|
|
|
|
/**
|
|
* Factory function to create and initialize WebExploreSubagent
|
|
*/
|
|
export async function createWebExploreSubagent(
|
|
model: BaseChatModel,
|
|
logger: FastifyBaseLogger,
|
|
basePath: string,
|
|
tools?: any[]
|
|
): Promise<WebExploreSubagent> {
|
|
const config = await BaseSubagent.loadConfig(basePath);
|
|
const subagent = new WebExploreSubagent(config, model, logger, tools);
|
|
await subagent.initialize(basePath);
|
|
return subagent;
|
|
}
|