diff --git "a/docs/08-\347\233\270\345\205\263\345\220\216\347\253\257\351\241\271\347\233\256.md" "b/docs/08-\347\233\270\345\205\263\345\220\216\347\253\257\351\241\271\347\233\256.md" index e4ae046..66ff45a 100644 --- "a/docs/08-\347\233\270\345\205\263\345\220\216\347\253\257\351\241\271\347\233\256.md" +++ "b/docs/08-\347\233\270\345\205\263\345\220\216\347\253\257\351\241\271\347\233\256.md" @@ -13,7 +13,7 @@ | `md-html-render` | Markdown/HTML 渲染为图片 | 37632 | 工具 → MCP服务器配置(md-html-render) | | `mcp-files-exec` | 本地文件读写/执行 | 3910 | 工具 → MCP服务器配置(mcp-files-exec) | -`web-read`、`md-html-render` 与 `mcp-files-exec` 均为 **MCP(Streamable HTTP)** 服务:插件通过「工具 → MCP服务器配置」中的 `mcpServers` 块按标准格式接入(默认 `http://127.0.0.1:46799/mcp`、`http://127.0.0.1:37632/mcp`、`http://127.0.0.1:3910`)。其中 `web-read` / `md-html-render` 由内置包装工具(`web_read` / `render_markdown` / `render_html`)调用,不重复注册为 AI 工具;`mcp-files-exec` 的工具(文件读写/执行)直接注册为 AI 工具。这些后端的 REST 接口已移除,仅提供 MCP。 +`web-read`、`md-html-render` 与 `mcp-files-exec` 均为 **MCP(Streamable HTTP)** 服务:插件通过「工具 → MCP服务器配置」中的 `mcpServers` 块按标准格式接入(默认 `http://127.0.0.1:46799/mcp`、`http://127.0.0.1:37632/mcp`、`http://127.0.0.1:3910/mcp`)。其中 `web-read` / `md-html-render` 由内置包装工具(`web_read` / `render_markdown` / `render_html`)调用,不重复注册为 AI 工具;`mcp-files-exec` 的工具(文件读写/执行)直接注册为 AI 工具。这些后端的 REST 接口已移除,仅提供 MCP。 ## 部署与一键管理 diff --git a/src/config/configs/tool.ts b/src/config/configs/tool.ts index 7ec0594..0b7d248 100644 --- a/src/config/configs/tool.ts +++ b/src/config/configs/tool.ts @@ -19,7 +19,7 @@ export default class ToolConfig { "mcpServers": { "mcp-files-exec": { "type": "http", - "url": "http://127.0.0.1:3910", + "url": "http://127.0.0.1:3910/mcp", "headers": { "Authorization": "Bearer token" } diff --git a/src/context/context.ts b/src/context/context.ts index d89fb06..5762da0 100644 --- a/src/context/context.ts +++ b/src/context/context.ts @@ -10,7 +10,7 @@ import User from "../session/user"; import { ToolCall } from "../tool/types"; import { getFriendList, getGroupList, getGroupMemberInfo, getGroupMemberList, getStrangerInfo, netExists } from "../utils/ob11"; import { levenshteinDistance, stripInternalTags } from "../utils/string"; -import { TypeDescriptor } from "../utils/utils"; +import { TypeDescriptor, withTimeout } from "../utils/utils"; import Message from "./message"; import { AssistantMessage, AssistantMessageItem, MessageType, SystemUserMessageItem, ToolCallbackMessage, ToolCallsMessage, UserMessage, UserMessageItem } from "./types"; @@ -406,11 +406,19 @@ export class Context { async updateName(epId: string, gid: string, uid: string) { switch (this.autoNameMod) { case 1: { - await this.setName(epId, gid, uid, 'nickname'); + try { + await withTimeout(() => this.setName(epId, gid, uid, 'nickname'), 5000); + } catch (e) { + Logger.warning(`自动改名(昵称)失败: ${e instanceof Error ? e.message : String(e)}`); + } break; } case 2: { - await this.setName(epId, gid, uid, 'card'); + try { + await withTimeout(() => this.setName(epId, gid, uid, 'card'), 5000); + } catch (e) { + Logger.warning(`自动改名(群名片)失败: ${e instanceof Error ? e.message : String(e)}`); + } break; } }