@voyager-0x/agent-mcp
Version:
Voyager MCP Agent - A powerful Model Context Protocol agent
84 lines (83 loc) • 2.42 kB
JavaScript
import { McpAgent } from "./agent.js";
import { aiConfigManager } from "./config.js";
import { mcpModulesManager } from "./module.js";
import { StreamBuffer } from "./streamBuffer.js";
import { z } from "zod";
export class WebMcpAgent {
constructor(config) {
this.streamBuffer = new StreamBuffer();
this.onmessage = () => { };
this.onfinish = () => { };
aiConfigManager.setConfig(config);
}
updateConfig(config) {
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 聊天消息列表
*/
getChatMessages() {
return this.agent?.session.list();
}
/**
* 获取当前聊天会话
* @returns 聊天会话
*/
getAgent() {
if (!this.agent) {
this.createChat();
}
return this.agent;
}
/**
* 发送消息
* @param message 消息内容
*/
chat(message) {
if (!this.agent) {
this.createChat();
}
return this.agent.chat(message);
}
/**
* 取消当前聊天
*/
cancelChat() {
if (this.agent) {
this.agent.cancelChat();
}
}
/**
* 注册回复事件
* @param onmessage 回复事件
* @param onfinish 完成事件
*/
onReply(onmessage, onfinish) {
this.onmessage = onmessage;
this.onfinish = onfinish;
}
}
export const createMcpDslModule = mcpModulesManager.createMcpDslModule.bind(mcpModulesManager);
export const createMcpServerModule = mcpModulesManager.createMcpServerModule.bind(mcpModulesManager);
export { mcpModulesManager, z };