UNPKG

@voyager-0x/agent-mcp

Version:

Voyager MCP Agent - A powerful Model Context Protocol agent

101 lines (87 loc) 2.43 kB
import { McpAgent } from "./agent.js"; import { aiConfigManager, AIModelConfig } from "./config.js"; import { mcpModulesManager } from "./module.js"; import { StreamBuffer } from "./streamBuffer.js"; import { z } from "zod"; export class WebMcpAgent { private agent: McpAgent | undefined; private streamBuffer: StreamBuffer = new StreamBuffer(); private onmessage: (message: string) => void = () => {}; private onfinish: () => void = () => {}; constructor(config: AIModelConfig) { aiConfigManager.setConfig(config); } updateConfig(config: AIModelConfig) { aiConfigManager.setConfig(config); } createChat() { this.agent = new McpAgent(); this.streamBuffer.reset(); // 重置流式缓存器 this.agent?.session.on("reply", (deltaMessage) => { // 使用智能缓存器处理流式内容 const readyToSend = this.streamBuffer.processChunk(deltaMessage); if (readyToSend) { this.onmessage(readyToSend); } }); this.agent?.session.on("finish", () => { // 会话结束时,刷新缓存器中剩余的内容 const remainingContent = this.streamBuffer.flush(); if (remainingContent) { this.onmessage(remainingContent); } this.onfinish(); }); return this.agent; } /** * 获取聊天消息 * @returns 聊天消息列表 */ public getChatMessages() { return this.agent?.session.list(); } /** * 获取当前聊天会话 * @returns 聊天会话 */ getAgent() { if (!this.agent) { this.createChat(); } return this.agent; } /** * 发送消息 * @param message 消息内容 */ chat(message: string) { if (!this.agent) { this.createChat(); } return this.agent!.chat(message); } /** * 取消当前聊天 */ cancelChat() { if (this.agent) { this.agent.cancelChat(); } } /** * 注册回复事件 * @param onmessage 回复事件 * @param onfinish 完成事件 */ onReply(onmessage: (message: string) => void, onfinish: () => void) { this.onmessage = onmessage; this.onfinish = onfinish; } } export const createMcpDslModule = mcpModulesManager.createMcpDslModule.bind(mcpModulesManager); export const createMcpServerModule = mcpModulesManager.createMcpServerModule.bind(mcpModulesManager); export { mcpModulesManager, z }; export type { McpServerConfig } from "./mcp.js";