@huyooo/ai-chat-core 0.2.45 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/dist/adapter/index.d.ts +11 -0
  2. package/dist/adapter/index.d.ts.map +1 -0
  3. package/dist/adapter/model-adapter.d.ts +25 -0
  4. package/dist/adapter/model-adapter.d.ts.map +1 -0
  5. package/dist/adapter/model-options.d.ts +53 -0
  6. package/dist/adapter/model-options.d.ts.map +1 -0
  7. package/dist/adapter/types.d.ts +28 -0
  8. package/dist/adapter/types.d.ts.map +1 -0
  9. package/dist/chat-runtime.d.ts +96 -0
  10. package/dist/chat-runtime.d.ts.map +1 -0
  11. package/dist/constants.d.ts +12 -0
  12. package/dist/constants.d.ts.map +1 -0
  13. package/dist/events.d.ts +605 -1
  14. package/dist/events.d.ts.map +1 -0
  15. package/dist/events.js +1 -1
  16. package/dist/extension/index.d.ts +9 -0
  17. package/dist/extension/index.d.ts.map +1 -0
  18. package/dist/extension/types.d.ts +46 -0
  19. package/dist/extension/types.d.ts.map +1 -0
  20. package/dist/families/index.d.ts +11 -0
  21. package/dist/families/index.d.ts.map +1 -0
  22. package/dist/families/presets.d.ts +31 -0
  23. package/dist/families/presets.d.ts.map +1 -0
  24. package/dist/families/resolver.d.ts +11 -0
  25. package/dist/families/resolver.d.ts.map +1 -0
  26. package/dist/families/types.d.ts +29 -0
  27. package/dist/families/types.d.ts.map +1 -0
  28. package/dist/governance/command-safety.d.ts +34 -0
  29. package/dist/governance/command-safety.d.ts.map +1 -0
  30. package/dist/governance/governance.d.ts +19 -0
  31. package/dist/governance/governance.d.ts.map +1 -0
  32. package/dist/governance/index.d.ts +12 -0
  33. package/dist/governance/index.d.ts.map +1 -0
  34. package/dist/governance/types.d.ts +29 -0
  35. package/dist/governance/types.d.ts.map +1 -0
  36. package/dist/index.d.ts +72 -804
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +51 -1
  39. package/dist/internal/management-args.d.ts +13 -0
  40. package/dist/internal/management-args.d.ts.map +1 -0
  41. package/dist/internal/management-results.d.ts +21 -0
  42. package/dist/internal/management-results.d.ts.map +1 -0
  43. package/dist/llm-config.d.ts +108 -0
  44. package/dist/llm-config.d.ts.map +1 -0
  45. package/dist/logger/core.d.ts +31 -0
  46. package/dist/logger/core.d.ts.map +1 -0
  47. package/dist/logger/index.d.ts +9 -0
  48. package/dist/logger/index.d.ts.map +1 -0
  49. package/dist/orchestrator/compression-handler.d.ts +29 -0
  50. package/dist/orchestrator/compression-handler.d.ts.map +1 -0
  51. package/dist/orchestrator/context-compressor.d.ts +51 -0
  52. package/dist/orchestrator/context-compressor.d.ts.map +1 -0
  53. package/dist/orchestrator/context-summarizer.d.ts +41 -0
  54. package/dist/orchestrator/context-summarizer.d.ts.map +1 -0
  55. package/dist/orchestrator/index.d.ts +12 -0
  56. package/dist/orchestrator/index.d.ts.map +1 -0
  57. package/dist/orchestrator/orchestrator.d.ts +46 -0
  58. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  59. package/dist/orchestrator/types.d.ts +58 -0
  60. package/dist/orchestrator/types.d.ts.map +1 -0
  61. package/dist/parts/index.d.ts +13 -0
  62. package/dist/parts/index.d.ts.map +1 -0
  63. package/dist/parts/registry.d.ts +11 -0
  64. package/dist/parts/registry.d.ts.map +1 -0
  65. package/dist/parts/summaries.d.ts +9 -0
  66. package/dist/parts/summaries.d.ts.map +1 -0
  67. package/dist/parts/types.d.ts +61 -0
  68. package/dist/parts/types.d.ts.map +1 -0
  69. package/dist/platform.d.ts +17 -0
  70. package/dist/platform.d.ts.map +1 -0
  71. package/dist/platform.js +1 -0
  72. package/dist/protocols/anthropic.d.ts +20 -0
  73. package/dist/protocols/anthropic.d.ts.map +1 -0
  74. package/dist/protocols/ark.d.ts +36 -0
  75. package/dist/protocols/ark.d.ts.map +1 -0
  76. package/dist/protocols/deepseek.d.ts +24 -0
  77. package/dist/protocols/deepseek.d.ts.map +1 -0
  78. package/dist/protocols/error-utils.d.ts +14 -0
  79. package/dist/protocols/error-utils.d.ts.map +1 -0
  80. package/dist/protocols/gemini.d.ts +24 -0
  81. package/dist/protocols/gemini.d.ts.map +1 -0
  82. package/dist/protocols/glm.d.ts +20 -0
  83. package/dist/protocols/glm.d.ts.map +1 -0
  84. package/dist/protocols/grok.d.ts +20 -0
  85. package/dist/protocols/grok.d.ts.map +1 -0
  86. package/dist/protocols/index.d.ts +31 -0
  87. package/dist/protocols/index.d.ts.map +1 -0
  88. package/dist/protocols/minimax.d.ts +38 -0
  89. package/dist/protocols/minimax.d.ts.map +1 -0
  90. package/dist/protocols/moonshot.d.ts +20 -0
  91. package/dist/protocols/moonshot.d.ts.map +1 -0
  92. package/dist/protocols/openai-sse.d.ts +33 -0
  93. package/dist/protocols/openai-sse.d.ts.map +1 -0
  94. package/dist/protocols/openai.d.ts +19 -0
  95. package/dist/protocols/openai.d.ts.map +1 -0
  96. package/dist/protocols/qwen.d.ts +26 -0
  97. package/dist/protocols/qwen.d.ts.map +1 -0
  98. package/dist/protocols/responses-sse.d.ts +30 -0
  99. package/dist/protocols/responses-sse.d.ts.map +1 -0
  100. package/dist/protocols/sse-reader.d.ts +23 -0
  101. package/dist/protocols/sse-reader.d.ts.map +1 -0
  102. package/dist/protocols/tool-arguments.d.ts +8 -0
  103. package/dist/protocols/tool-arguments.d.ts.map +1 -0
  104. package/dist/protocols/types.d.ts +148 -0
  105. package/dist/protocols/types.d.ts.map +1 -0
  106. package/dist/protocols/vercel-gateway.d.ts +15 -0
  107. package/dist/protocols/vercel-gateway.d.ts.map +1 -0
  108. package/dist/runtime.d.ts +151 -0
  109. package/dist/runtime.d.ts.map +1 -0
  110. package/dist/runtime.js +1 -0
  111. package/dist/skills/index.d.ts +14 -0
  112. package/dist/skills/index.d.ts.map +1 -0
  113. package/dist/skills/management/admin.d.ts +10 -0
  114. package/dist/skills/management/admin.d.ts.map +1 -0
  115. package/dist/skills/management/index.d.ts +11 -0
  116. package/dist/skills/management/index.d.ts.map +1 -0
  117. package/dist/skills/management/inputs.d.ts +44 -0
  118. package/dist/skills/management/inputs.d.ts.map +1 -0
  119. package/dist/skills/management/operations.d.ts +78 -0
  120. package/dist/skills/management/operations.d.ts.map +1 -0
  121. package/dist/skills/management/types.d.ts +70 -0
  122. package/dist/skills/management/types.d.ts.map +1 -0
  123. package/dist/skills/registry.d.ts +37 -0
  124. package/dist/skills/registry.d.ts.map +1 -0
  125. package/dist/skills/summaries.d.ts +9 -0
  126. package/dist/skills/summaries.d.ts.map +1 -0
  127. package/dist/skills/types.d.ts +61 -0
  128. package/dist/skills/types.d.ts.map +1 -0
  129. package/dist/test-utils/mock-sse.d.ts +13 -0
  130. package/dist/test-utils/mock-sse.d.ts.map +1 -0
  131. package/dist/tool-manager/define-tool.d.ts +35 -0
  132. package/dist/tool-manager/define-tool.d.ts.map +1 -0
  133. package/dist/tool-manager/formats.d.ts +46 -0
  134. package/dist/tool-manager/formats.d.ts.map +1 -0
  135. package/dist/tool-manager/identity.d.ts +18 -0
  136. package/dist/tool-manager/identity.d.ts.map +1 -0
  137. package/dist/tool-manager/in-process-provider.d.ts +15 -0
  138. package/dist/tool-manager/in-process-provider.d.ts.map +1 -0
  139. package/dist/tool-manager/index.d.ts +18 -0
  140. package/dist/tool-manager/index.d.ts.map +1 -0
  141. package/dist/tool-manager/manager.d.ts +18 -0
  142. package/dist/tool-manager/manager.d.ts.map +1 -0
  143. package/dist/tool-manager/mcp-provider.d.ts +21 -0
  144. package/dist/tool-manager/mcp-provider.d.ts.map +1 -0
  145. package/dist/tool-manager/summaries.d.ts +39 -0
  146. package/dist/tool-manager/summaries.d.ts.map +1 -0
  147. package/dist/tool-manager/types.d.ts +314 -0
  148. package/dist/tool-manager/types.d.ts.map +1 -0
  149. package/dist/types.d.ts +663 -0
  150. package/dist/types.d.ts.map +1 -0
  151. package/package.json +26 -15
  152. package/src/adapter/index.ts +25 -0
  153. package/src/adapter/model-adapter.ts +196 -0
  154. package/src/adapter/model-options.ts +143 -0
  155. package/src/adapter/types.ts +41 -0
  156. package/src/chat-runtime.ts +515 -0
  157. package/src/constants.ts +9 -102
  158. package/src/events.ts +364 -150
  159. package/src/extension/index.ts +24 -0
  160. package/src/extension/types.ts +49 -0
  161. package/src/families/index.ts +28 -0
  162. package/src/families/presets.ts +124 -0
  163. package/src/families/resolver.ts +22 -0
  164. package/src/families/types.ts +55 -0
  165. package/src/governance/command-safety.ts +224 -0
  166. package/src/governance/governance.ts +125 -0
  167. package/src/governance/index.ts +38 -0
  168. package/src/governance/types.ts +44 -0
  169. package/src/index.ts +250 -145
  170. package/src/internal/management-args.ts +39 -0
  171. package/src/internal/management-results.ts +60 -0
  172. package/src/llm-config.ts +137 -0
  173. package/src/logger/core.ts +96 -0
  174. package/src/logger/index.ts +8 -0
  175. package/src/orchestrator/compression-handler.ts +137 -0
  176. package/src/{providers → orchestrator}/context-compressor.ts +79 -47
  177. package/src/orchestrator/context-summarizer.ts +123 -0
  178. package/src/orchestrator/index.ts +20 -0
  179. package/src/orchestrator/orchestrator.ts +1002 -0
  180. package/src/orchestrator/types.ts +70 -0
  181. package/src/parts/index.ts +20 -0
  182. package/src/parts/registry.ts +95 -0
  183. package/src/parts/summaries.ts +40 -0
  184. package/src/parts/types.ts +63 -0
  185. package/src/platform.ts +73 -0
  186. package/src/protocols/anthropic.ts +377 -0
  187. package/src/protocols/ark.ts +300 -0
  188. package/src/protocols/deepseek.ts +192 -0
  189. package/src/{providers/protocols → protocols}/error-utils.ts +17 -20
  190. package/src/protocols/gemini.ts +352 -0
  191. package/src/protocols/glm.ts +212 -0
  192. package/src/protocols/grok.ts +98 -0
  193. package/src/protocols/index.ts +48 -0
  194. package/src/protocols/minimax.ts +308 -0
  195. package/src/protocols/moonshot.ts +186 -0
  196. package/src/protocols/openai-sse.ts +156 -0
  197. package/src/protocols/openai.ts +97 -0
  198. package/src/protocols/qwen.ts +358 -0
  199. package/src/protocols/responses-sse.ts +224 -0
  200. package/src/protocols/sse-reader.ts +54 -0
  201. package/src/protocols/tool-arguments.ts +32 -0
  202. package/src/{providers/protocols → protocols}/types.ts +46 -37
  203. package/src/protocols/vercel-gateway.ts +391 -0
  204. package/src/runtime.ts +167 -0
  205. package/src/skills/index.ts +29 -0
  206. package/src/skills/management/admin.ts +170 -0
  207. package/src/skills/management/index.ts +27 -0
  208. package/src/skills/management/inputs.ts +79 -0
  209. package/src/skills/management/operations.ts +256 -0
  210. package/src/skills/management/types.ts +57 -0
  211. package/src/skills/registry.ts +120 -0
  212. package/src/skills/summaries.ts +48 -0
  213. package/src/skills/types.ts +65 -0
  214. package/src/test-utils/mock-sse.ts +3 -3
  215. package/src/tool-manager/define-tool.ts +201 -0
  216. package/src/tool-manager/formats.ts +146 -0
  217. package/src/tool-manager/identity.ts +80 -0
  218. package/src/tool-manager/in-process-provider.ts +164 -0
  219. package/src/tool-manager/index.ts +63 -0
  220. package/src/tool-manager/manager.ts +562 -0
  221. package/src/tool-manager/mcp-provider.ts +509 -0
  222. package/src/tool-manager/summaries.ts +136 -0
  223. package/src/tool-manager/types.ts +389 -0
  224. package/src/types.ts +750 -191
  225. package/dist/events-CU5D5ray.d.ts +0 -1128
  226. package/src/agent.ts +0 -409
  227. package/src/internal/update-plan.ts +0 -2
  228. package/src/internal/web-search.ts +0 -77
  229. package/src/mcp/client-manager.ts +0 -302
  230. package/src/mcp/index.ts +0 -2
  231. package/src/mcp/types.ts +0 -43
  232. package/src/providers/context-summarizer.ts +0 -70
  233. package/src/providers/index.ts +0 -125
  234. package/src/providers/model-registry.ts +0 -466
  235. package/src/providers/orchestrator.ts +0 -839
  236. package/src/providers/protocols/anthropic.ts +0 -406
  237. package/src/providers/protocols/ark.ts +0 -362
  238. package/src/providers/protocols/deepseek.ts +0 -344
  239. package/src/providers/protocols/gemini.ts +0 -350
  240. package/src/providers/protocols/index.ts +0 -36
  241. package/src/providers/protocols/openai.ts +0 -420
  242. package/src/providers/protocols/qwen.ts +0 -315
  243. package/src/providers/types.ts +0 -264
  244. package/src/providers/unified-adapter.ts +0 -367
  245. package/src/router.ts +0 -72
  246. package/src/tools.ts +0 -162
  247. package/src/utils.ts +0 -86
@@ -1,302 +0,0 @@
1
- /**
2
- * MCP Client Manager
3
- *
4
- * 管理多个 MCP Server 连接,自动发现工具并转换为 Tool 接口。
5
- *
6
- * 职责:
7
- * 1. 连接管理:根据配置连接/断开 MCP Server
8
- * 2. 工具发现:通过 MCP 协议自动发现 Server 提供的工具
9
- * 3. 工具适配:将 MCP 工具转换为我们的 Tool 接口
10
- * 4. 生命周期:优雅关闭所有连接
11
- */
12
-
13
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
14
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
15
- import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
16
- import type { Tool, JsonSchemaObject, JsonSchemaProperty } from '../types';
17
- import type { McpServerConfig, McpConnectionInfo, McpConnectionStatus } from './types';
18
- import { DebugLogger } from '../utils';
19
-
20
- const logger = DebugLogger.module('MCP');
21
-
22
- /** 单个 MCP Server 连接 */
23
- interface McpConnection {
24
- config: McpServerConfig;
25
- client: Client;
26
- transport: StdioClientTransport | SSEClientTransport;
27
- status: McpConnectionStatus;
28
- tools: Tool[];
29
- error?: string;
30
- }
31
-
32
- /**
33
- * MCP Client Manager
34
- *
35
- * 使用方式:
36
- * ```typescript
37
- * const manager = new McpClientManager();
38
- * await manager.connectAll(configs);
39
- * const tools = manager.getAllTools(); // 返回 Tool[] 直接注册到 Agent
40
- * // ... 使用完毕
41
- * await manager.disconnectAll();
42
- * ```
43
- */
44
- export class McpClientManager {
45
- private connections = new Map<string, McpConnection>();
46
-
47
- /**
48
- * 连接到所有配置的 MCP Server
49
- *
50
- * 并行连接,单个失败不影响其他。
51
- */
52
- async connectAll(configs: McpServerConfig[]): Promise<void> {
53
- const results = await Promise.allSettled(
54
- configs.map(config => this.connect(config))
55
- );
56
-
57
- // 记录连接结果
58
- for (let i = 0; i < results.length; i++) {
59
- const result = results[i];
60
- const name = configs[i].name;
61
- if (result.status === 'rejected') {
62
- logger.error(`[${name}] 连接失败:`, result.reason);
63
- }
64
- }
65
- }
66
-
67
- /**
68
- * 连接单个 MCP Server
69
- */
70
- async connect(config: McpServerConfig): Promise<void> {
71
- const { name } = config;
72
-
73
- // 如果已连接,先断开
74
- if (this.connections.has(name)) {
75
- await this.disconnect(name);
76
- }
77
-
78
- logger.info(`[${name}] 正在连接...`);
79
-
80
- const client = new Client(
81
- { name: 'ai-chat-mcp-client', version: '1.0.0' },
82
- );
83
-
84
- let transport: StdioClientTransport | SSEClientTransport;
85
-
86
- if (config.transport === 'stdio') {
87
- if (!config.command) {
88
- throw new Error(`[${name}] stdio 模式必须指定 command`);
89
- }
90
- transport = new StdioClientTransport({
91
- command: config.command,
92
- args: config.args,
93
- env: config.env,
94
- cwd: config.cwd,
95
- });
96
- } else if (config.transport === 'sse') {
97
- if (!config.url) {
98
- throw new Error(`[${name}] sse 模式必须指定 url`);
99
- }
100
- transport = new SSEClientTransport(new URL(config.url));
101
- } else {
102
- throw new Error(`[${name}] 不支持的传输方式: ${config.transport}`);
103
- }
104
-
105
- const connection: McpConnection = {
106
- config,
107
- client,
108
- transport,
109
- status: 'connecting',
110
- tools: [],
111
- };
112
-
113
- this.connections.set(name, connection);
114
-
115
- try {
116
- await client.connect(transport);
117
- connection.status = 'connected';
118
- logger.info(`[${name}] 已连接`);
119
-
120
- // 发现工具
121
- const tools = await this.discoverTools(connection);
122
- connection.tools = tools;
123
- logger.info(`[${name}] 发现 ${tools.length} 个工具:`, tools.map(t => t.name));
124
- } catch (error) {
125
- connection.status = 'error';
126
- connection.error = error instanceof Error ? error.message : String(error);
127
- logger.error(`[${name}] 连接失败:`, connection.error);
128
- throw error;
129
- }
130
- }
131
-
132
- /**
133
- * 从 MCP Server 发现工具并转换为 Tool 接口
134
- */
135
- private async discoverTools(connection: McpConnection): Promise<Tool[]> {
136
- const { client, config } = connection;
137
- const { tools: mcpTools } = await client.listTools();
138
-
139
- return mcpTools.map(mcpTool => this.adaptTool(mcpTool, config.name, client));
140
- }
141
-
142
- /**
143
- * 将 MCP 工具转换为我们的 Tool 接口
144
- *
145
- * 关键转换:
146
- * - MCP inputSchema → 我们的 parameters (JsonSchemaObject)
147
- * - MCP callTool() → 我们的 execute()
148
- */
149
- private adaptTool(
150
- mcpTool: { name: string; description?: string; inputSchema: Record<string, unknown> },
151
- serverName: string,
152
- client: Client
153
- ): Tool {
154
- // 转换 inputSchema 为我们的 JsonSchemaObject
155
- const parameters = this.convertSchema(mcpTool.inputSchema);
156
-
157
- return {
158
- name: mcpTool.name,
159
- description: mcpTool.description || `MCP tool from ${serverName}`,
160
- parameters,
161
- execute: async (args: Record<string, unknown>) => {
162
- const result = await client.callTool({
163
- name: mcpTool.name,
164
- arguments: args,
165
- });
166
-
167
- // MCP 返回 content 数组,拼接为字符串
168
- const texts: string[] = [];
169
- if (Array.isArray(result.content)) {
170
- for (const item of result.content) {
171
- if (typeof item === 'object' && item !== null) {
172
- const content = item as Record<string, unknown>;
173
- if (content.type === 'text' && typeof content.text === 'string') {
174
- texts.push(content.text);
175
- } else if (content.type === 'image') {
176
- texts.push(`[image: ${content.mimeType || 'unknown'}]`);
177
- } else if (content.type === 'resource') {
178
- texts.push(JSON.stringify(content));
179
- }
180
- }
181
- }
182
- }
183
-
184
- const text = texts.join('\n') || JSON.stringify(result.content);
185
- return { text };
186
- },
187
- };
188
- }
189
-
190
- /**
191
- * 将 MCP inputSchema 转换为 JsonSchemaObject
192
- */
193
- private convertSchema(inputSchema: Record<string, unknown>): JsonSchemaObject {
194
- const properties: Record<string, JsonSchemaProperty> = {};
195
- const required: string[] = [];
196
-
197
- const schemaProperties = inputSchema.properties as Record<string, Record<string, unknown>> | undefined;
198
- if (schemaProperties) {
199
- for (const [key, value] of Object.entries(schemaProperties)) {
200
- properties[key] = this.convertProperty(value);
201
- }
202
- }
203
-
204
- if (Array.isArray(inputSchema.required)) {
205
- required.push(...inputSchema.required.filter((r): r is string => typeof r === 'string'));
206
- }
207
-
208
- return {
209
- type: 'object',
210
- properties,
211
- required: required.length > 0 ? required : undefined,
212
- };
213
- }
214
-
215
- /**
216
- * 递归转换 JSON Schema 属性
217
- */
218
- private convertProperty(prop: Record<string, unknown>): JsonSchemaProperty {
219
- const result: JsonSchemaProperty = {
220
- type: typeof prop.type === 'string' ? prop.type : 'string',
221
- };
222
-
223
- if (typeof prop.description === 'string') {
224
- result.description = prop.description;
225
- }
226
-
227
- if (Array.isArray(prop.enum)) {
228
- result.enum = prop.enum;
229
- }
230
-
231
- // 递归处理 items(数组类型)
232
- if (prop.items && typeof prop.items === 'object') {
233
- result.items = this.convertProperty(prop.items as Record<string, unknown>);
234
- }
235
-
236
- // 递归处理 properties(对象类型)
237
- if (prop.properties && typeof prop.properties === 'object') {
238
- result.properties = {};
239
- for (const [key, value] of Object.entries(prop.properties as Record<string, Record<string, unknown>>)) {
240
- result.properties[key] = this.convertProperty(value);
241
- }
242
- }
243
-
244
- if (Array.isArray(prop.required)) {
245
- result.required = prop.required.filter((r): r is string => typeof r === 'string');
246
- }
247
-
248
- return result;
249
- }
250
-
251
- /**
252
- * 获取所有已连接 Server 的工具
253
- */
254
- getAllTools(): Tool[] {
255
- const tools: Tool[] = [];
256
- for (const connection of this.connections.values()) {
257
- if (connection.status === 'connected') {
258
- tools.push(...connection.tools);
259
- }
260
- }
261
- return tools;
262
- }
263
-
264
- /**
265
- * 获取所有连接状态
266
- */
267
- getConnectionInfos(): McpConnectionInfo[] {
268
- return Array.from(this.connections.values()).map(conn => ({
269
- name: conn.config.name,
270
- status: conn.status,
271
- toolCount: conn.tools.length,
272
- error: conn.error,
273
- }));
274
- }
275
-
276
- /**
277
- * 断开单个 Server
278
- */
279
- async disconnect(name: string): Promise<void> {
280
- const connection = this.connections.get(name);
281
- if (!connection) return;
282
-
283
- try {
284
- await connection.client.close();
285
- logger.info(`[${name}] 已断开`);
286
- } catch (error) {
287
- logger.error(`[${name}] 断开失败:`, error);
288
- } finally {
289
- connection.status = 'disconnected';
290
- connection.tools = [];
291
- this.connections.delete(name);
292
- }
293
- }
294
-
295
- /**
296
- * 断开所有连接
297
- */
298
- async disconnectAll(): Promise<void> {
299
- const names = Array.from(this.connections.keys());
300
- await Promise.allSettled(names.map(name => this.disconnect(name)));
301
- }
302
- }
package/src/mcp/index.ts DELETED
@@ -1,2 +0,0 @@
1
- export { McpClientManager } from './client-manager';
2
- export type { McpServerConfig, McpConnectionStatus, McpConnectionInfo } from './types';
package/src/mcp/types.ts DELETED
@@ -1,43 +0,0 @@
1
- /**
2
- * MCP (Model Context Protocol) 相关类型定义
3
- *
4
- * 支持两种传输方式:
5
- * - stdio: 启动本地子进程,通过 stdin/stdout 通信(操作本地文件、命令、应用)
6
- * - sse: 连接远程 HTTP 服务器(调用远程 API/服务)
7
- */
8
-
9
- /** MCP Server 配置 */
10
- export interface McpServerConfig {
11
- /** 服务器唯一标识(用于日志和工具命名空间) */
12
- name: string;
13
-
14
- /** 传输方式 */
15
- transport: 'stdio' | 'sse';
16
-
17
- /** stdio 模式:启动命令(如 "npx", "python3", "/usr/local/bin/my-server") */
18
- command?: string;
19
- /** stdio 模式:命令参数 */
20
- args?: string[];
21
- /** stdio 模式:环境变量 */
22
- env?: Record<string, string>;
23
- /** stdio 模式:工作目录 */
24
- cwd?: string;
25
-
26
- /** sse 模式:服务器 URL */
27
- url?: string;
28
- }
29
-
30
- /** MCP 连接状态 */
31
- export type McpConnectionStatus = 'connecting' | 'connected' | 'disconnected' | 'error';
32
-
33
- /** 单个 MCP 连接信息 */
34
- export interface McpConnectionInfo {
35
- /** 服务器名称 */
36
- name: string;
37
- /** 连接状态 */
38
- status: McpConnectionStatus;
39
- /** 提供的工具数量 */
40
- toolCount: number;
41
- /** 错误信息(status === 'error' 时) */
42
- error?: string;
43
- }
@@ -1,70 +0,0 @@
1
- /**
2
- * Context Summarizer — 专用上下文总结模块
3
- *
4
- * 当对话历史超过当前模型的 context window 时,通过外部注入的 summarize 回调执行 AI 总结。
5
- * 回调由宿主提供(如 smart-finder 走 ai-server 的 toolAI),ai-chat-core 不关心具体调用方式。
6
- */
7
-
8
- import type { StandardMessage } from './types';
9
- import {
10
- buildSummarizeRequest,
11
- applySummary,
12
- estimateTotalTokens,
13
- type CompactConfig,
14
- } from './context-compressor';
15
- import { DebugLogger } from '../utils';
16
-
17
- const logger = DebugLogger.module('ContextSummarizer');
18
-
19
- // ==================== 类型 ====================
20
-
21
- /** 外部注入的 AI 总结函数 */
22
- export type SummarizeFn = (systemPrompt: string, userPrompt: string) => Promise<string>;
23
-
24
- export interface SummarizeResult {
25
- messages: StandardMessage[];
26
- success: boolean;
27
- }
28
-
29
- // ==================== 核心函数 ====================
30
-
31
- /**
32
- * 使用 AI 总结对话历史
33
- *
34
- * 1. 用 buildSummarizeRequest 分离「待总结的中间历史」和「保留的最近消息」
35
- * 2. 调用外部注入的 summarizeFn 执行总结(走 ai-server 等)
36
- * 3. 用 applySummary 组装压缩后的消息列表
37
- */
38
- export async function summarizeHistory(
39
- summarizeFn: SummarizeFn,
40
- messages: StandardMessage[],
41
- config: CompactConfig,
42
- ): Promise<SummarizeResult> {
43
- const { summarizeMessages, keepMessages } = buildSummarizeRequest(messages, config);
44
-
45
- if (summarizeMessages.length === 0) {
46
- logger.info('中间历史太短,跳过 AI 总结');
47
- return { messages, success: true };
48
- }
49
-
50
- const systemPrompt = summarizeMessages[0].content;
51
- const userPrompt = summarizeMessages[1].content;
52
-
53
- logger.info(`开始 AI 总结: ~${estimateTotalTokens(summarizeMessages)} tokens, ${messages.length} 条消息`);
54
-
55
- try {
56
- const summary = await summarizeFn(systemPrompt, userPrompt);
57
-
58
- if (!summary.trim()) {
59
- logger.warn('AI 总结返回空内容');
60
- return { messages, success: false };
61
- }
62
-
63
- const compressed = applySummary(messages, summary, keepMessages);
64
- logger.info(`AI 总结完成: ${messages.length} → ${compressed.length} 条消息, ~${estimateTotalTokens(compressed)} tokens`);
65
- return { messages: compressed, success: true };
66
- } catch (err) {
67
- logger.error('AI 总结异常:', err);
68
- return { messages, success: false };
69
- }
70
- }
@@ -1,125 +0,0 @@
1
- /**
2
- * Provider 模块导出
3
- *
4
- * 新架构(v2):
5
- * - ModelRegistry: 模型注册表,管理所有模型配置(Protocol + Family)
6
- * - ChatOrchestrator: 统一处理工具调用循环、消息历史、事件发射
7
- * - ProviderAdapter: 只负责 API 格式转换,不处理业务逻辑
8
- *
9
- * 设计优势:
10
- * 1. Protocol + Family 分离:同协议不同行为的模型可复用协议层
11
- * 2. 所有 Provider 共享相同的工具调用逻辑
12
- * 3. 修改 Orchestrator = 修改所有 Provider 行为
13
- * 4. 每个 Adapter 只关心自己的 API 格式转换
14
- */
15
-
16
- // ==================== 模型注册表 ====================
17
-
18
- export {
19
- // 家族配置
20
- MODEL_FAMILIES,
21
- DOUBAO_FAMILY,
22
- DEEPSEEK_FAMILY,
23
- QWEN_FAMILY,
24
- GEMINI_FAMILY,
25
- GPT_FAMILY,
26
- CLAUDE_FAMILY,
27
-
28
- // 模型注册表
29
- MODEL_REGISTRY,
30
-
31
- // 查询函数
32
- getModelEntry,
33
- getModelFamily,
34
- getModelProtocol,
35
- getVisibleModels,
36
- getModelsByFamily,
37
- getModelsByProtocol,
38
- modelSupportsThinking,
39
- modelSupportsNativeSearch,
40
- getModelSearchStrategy,
41
- } from './model-registry';
42
-
43
- export type {
44
- ModelFamilyId,
45
- ProtocolId,
46
- ThinkingFormat,
47
- SearchStrategy,
48
- ToolCallFormat,
49
- ModelFamilyConfig,
50
- ModelRegistryEntry,
51
- } from './model-registry';
52
-
53
- // ==================== 核心类型 ====================
54
-
55
- export type {
56
- // 流式响应
57
- StreamChunk,
58
- StreamChunkType,
59
- ToolCallRequest,
60
- SearchResultItem,
61
-
62
- // 标准化消息
63
- StandardMessage,
64
-
65
- // Adapter 接口
66
- ProviderAdapter,
67
- AdapterConfig,
68
- StreamOnceOptions,
69
- SimpleToolDefinition,
70
-
71
- // Orchestrator 类型
72
- ToolExecutor,
73
- OrchestratorConfig,
74
- OrchestratorContext,
75
- OrchestratorOptions,
76
- } from './types';
77
-
78
- // ==================== Orchestrator ====================
79
-
80
- export { ChatOrchestrator, createOrchestrator } from './orchestrator';
81
-
82
- // ==================== Context 压缩与总结 ====================
83
-
84
- export { summarizeHistory } from './context-summarizer';
85
- export type { SummarizeFn, SummarizeResult } from './context-summarizer';
86
-
87
- // ==================== UnifiedAdapter(新架构) ====================
88
-
89
- export { UnifiedAdapter, createUnifiedAdapter } from './unified-adapter';
90
- export type { UnifiedAdapterConfig, StreamOptions } from './unified-adapter';
91
-
92
- // ==================== Protocol Layer ====================
93
-
94
- export {
95
- // Protocol 实现
96
- ArkProtocol,
97
- createArkProtocol,
98
- DeepSeekProtocol,
99
- createDeepSeekProtocol,
100
- QwenProtocol,
101
- createQwenProtocol,
102
- GeminiProtocol,
103
- createGeminiProtocol,
104
- OpenAIProtocol,
105
- createOpenAIProtocol,
106
- AnthropicProtocol,
107
- createAnthropicProtocol,
108
- } from './protocols';
109
-
110
- export type {
111
- // Protocol 类型
112
- Protocol,
113
- ProtocolConfig,
114
- ProtocolFactory,
115
- ProtocolMessage,
116
- ProtocolToolDefinition,
117
- ProtocolToolCall,
118
- ProtocolRequestOptions,
119
- RawEvent,
120
- RawEventType,
121
- RawToolCall,
122
- RawSearchResult,
123
- } from './protocols';
124
-
125
- // Legacy Adapters 已删除,使用 UnifiedAdapter + Protocol 新架构