@voyager-0x/agent-mcp
Version:
Voyager MCP Agent - A powerful Model Context Protocol agent
101 lines (87 loc) • 2.43 kB
text/typescript
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";