@mcpilotx/intentorch 0.5.0

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 (101) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +545 -0
  3. package/dist/ai/ai.d.ts +205 -0
  4. package/dist/ai/ai.js +1200 -0
  5. package/dist/ai/cloud-intent-engine.d.ts +270 -0
  6. package/dist/ai/cloud-intent-engine.js +956 -0
  7. package/dist/ai/command.d.ts +59 -0
  8. package/dist/ai/command.js +285 -0
  9. package/dist/ai/config.d.ts +66 -0
  10. package/dist/ai/config.js +211 -0
  11. package/dist/ai/enhanced-intent.d.ts +17 -0
  12. package/dist/ai/enhanced-intent.js +32 -0
  13. package/dist/ai/index.d.ts +29 -0
  14. package/dist/ai/index.js +44 -0
  15. package/dist/ai/intent.d.ts +16 -0
  16. package/dist/ai/intent.js +30 -0
  17. package/dist/core/ai-config.d.ts +25 -0
  18. package/dist/core/ai-config.js +326 -0
  19. package/dist/core/config-manager.d.ts +36 -0
  20. package/dist/core/config-manager.js +400 -0
  21. package/dist/core/config-validator.d.ts +9 -0
  22. package/dist/core/config-validator.js +184 -0
  23. package/dist/core/constants.d.ts +34 -0
  24. package/dist/core/constants.js +37 -0
  25. package/dist/core/error-ai.d.ts +23 -0
  26. package/dist/core/error-ai.js +217 -0
  27. package/dist/core/error-handler.d.ts +197 -0
  28. package/dist/core/error-handler.js +467 -0
  29. package/dist/core/index.d.ts +13 -0
  30. package/dist/core/index.js +17 -0
  31. package/dist/core/logger.d.ts +27 -0
  32. package/dist/core/logger.js +108 -0
  33. package/dist/core/performance-monitor.d.ts +74 -0
  34. package/dist/core/performance-monitor.js +260 -0
  35. package/dist/core/providers.d.ts +36 -0
  36. package/dist/core/providers.js +304 -0
  37. package/dist/core/retry-manager.d.ts +41 -0
  38. package/dist/core/retry-manager.js +204 -0
  39. package/dist/core/types.d.ts +155 -0
  40. package/dist/core/types.js +2 -0
  41. package/dist/daemon/index.d.ts +10 -0
  42. package/dist/daemon/index.js +15 -0
  43. package/dist/daemon/intent-engine.d.ts +22 -0
  44. package/dist/daemon/intent-engine.js +50 -0
  45. package/dist/daemon/orchestrator.d.ts +24 -0
  46. package/dist/daemon/orchestrator.js +100 -0
  47. package/dist/daemon/pm.d.ts +33 -0
  48. package/dist/daemon/pm.js +127 -0
  49. package/dist/daemon/process.d.ts +11 -0
  50. package/dist/daemon/process.js +49 -0
  51. package/dist/daemon/server.d.ts +17 -0
  52. package/dist/daemon/server.js +435 -0
  53. package/dist/daemon/service.d.ts +36 -0
  54. package/dist/daemon/service.js +278 -0
  55. package/dist/index.d.ts +30 -0
  56. package/dist/index.js +36 -0
  57. package/dist/mcp/client.d.ts +51 -0
  58. package/dist/mcp/client.js +276 -0
  59. package/dist/mcp/index.d.ts +162 -0
  60. package/dist/mcp/index.js +199 -0
  61. package/dist/mcp/tool-registry.d.ts +71 -0
  62. package/dist/mcp/tool-registry.js +308 -0
  63. package/dist/mcp/transport.d.ts +83 -0
  64. package/dist/mcp/transport.js +515 -0
  65. package/dist/mcp/types.d.ts +136 -0
  66. package/dist/mcp/types.js +31 -0
  67. package/dist/runtime/adapter-advanced.d.ts +184 -0
  68. package/dist/runtime/adapter-advanced.js +160 -0
  69. package/dist/runtime/adapter.d.ts +9 -0
  70. package/dist/runtime/adapter.js +2 -0
  71. package/dist/runtime/detector-advanced.d.ts +59 -0
  72. package/dist/runtime/detector-advanced.js +487 -0
  73. package/dist/runtime/detector.d.ts +5 -0
  74. package/dist/runtime/detector.js +56 -0
  75. package/dist/runtime/docker-adapter.d.ts +18 -0
  76. package/dist/runtime/docker-adapter.js +170 -0
  77. package/dist/runtime/docker.d.ts +17 -0
  78. package/dist/runtime/docker.js +71 -0
  79. package/dist/runtime/executable-analyzer.d.ts +56 -0
  80. package/dist/runtime/executable-analyzer.js +391 -0
  81. package/dist/runtime/go-adapter.d.ts +19 -0
  82. package/dist/runtime/go-adapter.js +190 -0
  83. package/dist/runtime/index.d.ts +9 -0
  84. package/dist/runtime/index.js +10 -0
  85. package/dist/runtime/node-adapter.d.ts +10 -0
  86. package/dist/runtime/node-adapter.js +23 -0
  87. package/dist/runtime/node.d.ts +20 -0
  88. package/dist/runtime/node.js +86 -0
  89. package/dist/runtime/python-adapter.d.ts +11 -0
  90. package/dist/runtime/python-adapter.js +102 -0
  91. package/dist/runtime/python.d.ts +17 -0
  92. package/dist/runtime/python.js +72 -0
  93. package/dist/runtime/rust-adapter.d.ts +21 -0
  94. package/dist/runtime/rust-adapter.js +267 -0
  95. package/dist/sdk.d.ts +500 -0
  96. package/dist/sdk.js +904 -0
  97. package/docs/README.ZH_CN.md +545 -0
  98. package/docs/api.md +888 -0
  99. package/docs/architecture.md +731 -0
  100. package/docs/development.md +744 -0
  101. package/package.json +112 -0
package/docs/api.md ADDED
@@ -0,0 +1,888 @@
1
+ # API Reference
2
+
3
+ ## Overview
4
+
5
+ IntentOrch SDK Core provides a concise and elegant API for MCP (Model Context Protocol) service orchestration. This document details all public APIs of the SDK.
6
+
7
+ ## Core Classes
8
+
9
+ ### `IntentOrchSDK` (formerly `MCPilotSDK`)
10
+
11
+ The main SDK class that provides all functionality.
12
+
13
+ ```typescript
14
+ import { IntentOrchSDK } from '@mcpilotx/intentorch';
15
+
16
+ const sdk = new IntentOrchSDK(options);
17
+ ```
18
+
19
+ **Note:** For backward compatibility, `MCPilotSDK` is still available as an alias.
20
+
21
+ #### Constructor Options
22
+
23
+ ```typescript
24
+ interface SDKOptions {
25
+ // Configuration file path, defaults to ~/.mcpilot/config.json
26
+ configPath?: string;
27
+
28
+ // Whether to auto-initialize the SDK, defaults to true
29
+ autoInit?: boolean;
30
+
31
+ // Custom logger
32
+ logger?: {
33
+ info: (message: string) => void;
34
+ error: (message: string) => void;
35
+ debug: (message: string) => void;
36
+ };
37
+
38
+ // MCP related configuration
39
+ mcp?: {
40
+ // Whether to auto-discover local MCP servers, defaults to false
41
+ autoDiscover?: boolean;
42
+
43
+ // Array of MCP server configurations
44
+ servers?: MCPClientConfig[];
45
+ };
46
+ }
47
+ ```
48
+
49
+ #### Singleton Instance
50
+
51
+ The SDK also provides a pre-initialized singleton instance:
52
+
53
+ ```typescript
54
+ import { mcpilot } from '@mcpilotx/intentorch';
55
+
56
+ // 直接使用,无需初始化
57
+ await mcpilot.initMCP();
58
+ ```
59
+
60
+ ## MCP 功能
61
+
62
+ ### `initMCP()`
63
+
64
+ 初始化 MCP 功能。
65
+
66
+ ```typescript
67
+ async initMCP(): Promise<void>
68
+ ```
69
+
70
+ **示例:**
71
+ ```typescript
72
+ await sdk.initMCP();
73
+ ```
74
+
75
+ ### `connectMCPServer()`
76
+
77
+ 连接到 MCP 服务器。
78
+
79
+ ```typescript
80
+ async connectMCPServer(
81
+ config: MCPClientConfig,
82
+ name?: string
83
+ ): Promise<MCPClient>
84
+ ```
85
+
86
+ **参数:**
87
+ - `config`: MCP 客户端配置
88
+ - `name`: 可选的服务器名称标识符
89
+
90
+ **MCPClientConfig 类型:**
91
+ ```typescript
92
+ interface MCPClientConfig {
93
+ // 传输配置
94
+ transport: {
95
+ type: 'stdio' | 'http' | 'sse';
96
+
97
+ // stdio 传输的命令和参数
98
+ command?: string;
99
+ args?: string[];
100
+
101
+ // HTTP/SSE 传输的 URL
102
+ url?: string;
103
+
104
+ // HTTP/SSE 传输的请求头
105
+ headers?: Record<string, string>;
106
+
107
+ // stdio 传输的日志过滤配置
108
+ logFilter?: {
109
+ ignorePatterns?: string[];
110
+ keepPatterns?: string[];
111
+ verbose?: boolean;
112
+ bufferSize?: number;
113
+ timeout?: number;
114
+ };
115
+ };
116
+
117
+ // 是否自动连接(默认:false)
118
+ autoConnect?: boolean;
119
+
120
+ // 请求超时时间(毫秒,默认:30000)
121
+ timeout?: number;
122
+
123
+ // 最大重试次数(默认:3)
124
+ maxRetries?: number;
125
+ }
126
+ ```
127
+
128
+ **示例:**
129
+ ```typescript
130
+ // 连接到 stdio 传输的 MCP 服务器
131
+ await sdk.connectMCPServer({
132
+ transport: {
133
+ type: 'stdio',
134
+ command: 'npx',
135
+ args: ['@modelcontextprotocol/server-filesystem']
136
+ }
137
+ }, 'filesystem');
138
+
139
+ // 连接到 HTTP 传输的 MCP 服务器
140
+ await sdk.connectMCPServer({
141
+ transport: {
142
+ type: 'http',
143
+ url: 'http://localhost:8080'
144
+ }
145
+ }, 'http-server');
146
+ ```
147
+
148
+ ### `disconnectMCPServer()`
149
+
150
+ 断开与 MCP 服务器的连接。
151
+
152
+ ```typescript
153
+ async disconnectMCPServer(name: string): Promise<void>
154
+ ```
155
+
156
+ **参数:**
157
+ - `name`: 服务器名称标识符
158
+
159
+ **示例:**
160
+ ```typescript
161
+ await sdk.disconnectMCPServer('filesystem');
162
+ ```
163
+
164
+ ### `listMCPServers()`
165
+
166
+ 列出所有已连接的 MCP 服务器名称。
167
+
168
+ ```typescript
169
+ listMCPServers(): string[]
170
+ ```
171
+
172
+ **返回值:**
173
+ - 已连接的 MCP 服务器名称数组
174
+
175
+ **示例:**
176
+ ```typescript
177
+ const serverNames = sdk.listMCPServers();
178
+ console.log('Connected servers:', serverNames);
179
+
180
+ // 如果需要获取服务器状态,可以遍历名称并调用 getMCPServerStatus
181
+ serverNames.forEach(serverName => {
182
+ const status = sdk.getMCPServerStatus(serverName);
183
+ if (status) {
184
+ console.log(`Server ${serverName}: connected=${status.connected}, tools=${status.toolsCount}`);
185
+ }
186
+ });
187
+ ```
188
+
189
+ ### `getMCPServerStatus()`
190
+
191
+ 获取特定 MCP 服务器的状态。
192
+
193
+ ```typescript
194
+ getMCPServerStatus(name: string): {
195
+ connected: boolean;
196
+ toolsCount: number;
197
+ } | undefined
198
+ ```
199
+
200
+ **参数:**
201
+ - `name`: 服务器名称标识符
202
+
203
+ **返回值:**
204
+ - 如果服务器存在:返回包含连接状态和工具数量的对象
205
+ - 如果服务器不存在:返回 `undefined`
206
+
207
+ **示例:**
208
+ ```typescript
209
+ const status = sdk.getMCPServerStatus('filesystem');
210
+ if (status) {
211
+ console.log(`Server connected: ${status.connected}`);
212
+ console.log(`Available tools: ${status.toolsCount}`);
213
+ } else {
214
+ console.log('Server not found');
215
+ }
216
+ ```
217
+
218
+ ## 工具管理
219
+
220
+ ### `listTools()`
221
+
222
+ 列出所有可用工具(来自所有服务器)。
223
+
224
+ ```typescript
225
+ listTools(): Array<{
226
+ name: string;
227
+ description: string;
228
+ serverName?: string;
229
+ serverId?: string;
230
+ }>
231
+ ```
232
+
233
+ **返回值:**
234
+ - 工具名称
235
+ - 工具描述
236
+ - 服务器名称(如果来自特定服务器)
237
+ - 服务器ID(如果来自特定服务器)
238
+
239
+ **示例:**
240
+ ```typescript
241
+ const tools = sdk.listTools();
242
+ console.log('Available tools:', tools);
243
+
244
+ // 按服务器分组显示工具
245
+ const toolsByServer: Record<string, any[]> = {};
246
+ tools.forEach(tool => {
247
+ const server = tool.serverName || 'unknown';
248
+ if (!toolsByServer[server]) {
249
+ toolsByServer[server] = [];
250
+ }
251
+ toolsByServer[server].push(tool);
252
+ });
253
+
254
+ Object.entries(toolsByServer).forEach(([server, serverTools]) => {
255
+ console.log(`\nServer: ${server} (${serverTools.length} tools)`);
256
+ serverTools.forEach(tool => {
257
+ console.log(` - ${tool.name}: ${tool.description}`);
258
+ });
259
+ });
260
+ ```
261
+
262
+ ### `searchTools()`
263
+
264
+ 按名称或描述搜索工具。
265
+
266
+ ```typescript
267
+ searchTools(query: string): Array<{
268
+ name: string;
269
+ description: string;
270
+ serverName?: string;
271
+ serverId?: string;
272
+ }>
273
+ ```
274
+
275
+ **参数:**
276
+ - `query`: 搜索查询字符串(不区分大小写)
277
+
278
+ **返回值:**
279
+ - 匹配的工具列表,结构与 `listTools()` 相同
280
+
281
+ **示例:**
282
+ ```typescript
283
+ // 搜索文件相关工具
284
+ const fileTools = sdk.searchTools('file');
285
+ console.log(`Found ${fileTools.length} file-related tools:`);
286
+ fileTools.forEach(tool => {
287
+ console.log(` - ${tool.name} (from ${tool.serverName || 'unknown'}): ${tool.description}`);
288
+ });
289
+
290
+ // 搜索特定工具
291
+ const readTools = sdk.searchTools('read');
292
+ console.log(`Found ${readTools.length} read-related tools:`);
293
+ readTools.forEach(tool => {
294
+ console.log(` - ${tool.name}: ${tool.description}`);
295
+ });
296
+ ```
297
+
298
+ ### `executeTool()`
299
+
300
+ 执行工具。
301
+
302
+ ```typescript
303
+ async executeTool(
304
+ toolName: string,
305
+ args: Record<string, any>
306
+ ): Promise<ToolResult>
307
+ ```
308
+
309
+ **参数:**
310
+ - `toolName`: 工具名称
311
+ - `args`: 工具参数
312
+
313
+ **ToolResult 类型:**
314
+ ```typescript
315
+ interface ToolResult {
316
+ // 工具执行结果内容
317
+ content: Array<{
318
+ type: 'text' | 'image' | 'resource';
319
+ text?: string;
320
+ data?: any;
321
+ }>;
322
+
323
+ // 是否成功(可选)
324
+ isError?: boolean;
325
+ }
326
+ ```
327
+
328
+ **示例:**
329
+ ```typescript
330
+ const result = await sdk.executeTool('read_file', {
331
+ path: '/tmp/example.txt'
332
+ });
333
+ console.log('Execution result:', result.content[0].text);
334
+ ```
335
+
336
+ ### `getToolStatistics()`
337
+
338
+ 获取已注册工具的统计信息。
339
+
340
+ ```typescript
341
+ getToolStatistics(): {
342
+ totalTools: number;
343
+ byServer: Record<string, number>;
344
+ mostUsed: Array<{
345
+ name: string;
346
+ serverId?: string;
347
+ serverName?: string;
348
+ usageCount?: number;
349
+ lastUsed?: Date;
350
+ }>;
351
+ }
352
+ ```
353
+
354
+ **返回值:**
355
+ - `totalTools`: 总工具数量
356
+ - `byServer`: 按服务器分组的工具数量
357
+ - `mostUsed`: 最常使用的工具列表(最多10个)
358
+
359
+ **示例:**
360
+ ```typescript
361
+ const stats = sdk.getToolStatistics();
362
+ console.log(`Total tools: ${stats.totalTools}`);
363
+
364
+ // 显示按服务器分组的工具数量
365
+ console.log('Tools by server:');
366
+ Object.entries(stats.byServer).forEach(([server, count]) => {
367
+ console.log(` ${server}: ${count} tools`);
368
+ });
369
+
370
+ // 显示最常使用的工具
371
+ if (stats.mostUsed.length > 0) {
372
+ console.log('\nMost used tools:');
373
+ stats.mostUsed.forEach((tool, index) => {
374
+ console.log(` ${index + 1}. ${tool.name} (${tool.serverName || 'unknown'}) - used ${tool.usageCount || 0} times`);
375
+ });
376
+ }
377
+ ```
378
+
379
+ ## 服务管理
380
+
381
+ ### `addService()`
382
+
383
+ 添加新服务。
384
+
385
+ ```typescript
386
+ async addService(config: ServiceConfig): Promise<void>
387
+ ```
388
+
389
+ **ServiceConfig 类型:**
390
+ ```typescript
391
+ interface ServiceConfig {
392
+ // 服务名称(必需)
393
+ name: string;
394
+
395
+ // 服务路径(必需)
396
+ path: string;
397
+
398
+ // 运行时类型:node、python、docker、go、rust
399
+ runtime?: RuntimeType;
400
+
401
+ // 自动检测运行时(如果未指定 runtime)
402
+ autoDetectRuntime?: boolean;
403
+
404
+ // 启动命令(可选,覆盖默认值)
405
+ command?: string;
406
+
407
+ // 启动参数
408
+ args?: string[];
409
+
410
+ // 环境变量
411
+ env?: Record<string, string>;
412
+
413
+ // 工作目录
414
+ cwd?: string;
415
+
416
+ // 端口映射(Docker 服务)
417
+ ports?: Array<{
418
+ host: number;
419
+ container: number;
420
+ }>;
421
+
422
+ // 其他配置
423
+ [key: string]: any;
424
+ }
425
+ ```
426
+
427
+ **示例:**
428
+ ```typescript
429
+ // 添加 Node.js 服务
430
+ await sdk.addService({
431
+ name: 'my-node-app',
432
+ path: './my-app',
433
+ runtime: 'node'
434
+ });
435
+
436
+ // 添加 Python 服务(自动检测运行时)
437
+ await sdk.addService({
438
+ name: 'my-python-app',
439
+ path: './my-app',
440
+ autoDetectRuntime: true
441
+ });
442
+ ```
443
+
444
+ ### `startService()`
445
+
446
+ 启动服务。
447
+
448
+ ```typescript
449
+ async startService(name: string): Promise<void>
450
+ ```
451
+
452
+ **参数:**
453
+ - `name`: 服务名称
454
+
455
+ **示例:**
456
+ ```typescript
457
+ await sdk.startService('my-node-app');
458
+ ```
459
+
460
+ ### `stopService()`
461
+
462
+ 停止服务。
463
+
464
+ ```typescript
465
+ async stopService(name: string): Promise<void>
466
+ ```
467
+
468
+ **参数:**
469
+ - `name`: 服务名称
470
+
471
+ **示例:**
472
+ ```typescript
473
+ await sdk.stopService('my-node-app');
474
+ ```
475
+
476
+ ### `listServices()`
477
+
478
+ 列出所有服务。
479
+
480
+ ```typescript
481
+ listServices(): Array<{
482
+ name: string;
483
+ config: ServiceConfig;
484
+ status: 'running' | 'stopped' | 'error' | 'unknown';
485
+ }>
486
+ ```
487
+
488
+ **示例:**
489
+ ```typescript
490
+ const services = sdk.listServices();
491
+ console.log('Services:', services);
492
+ ```
493
+
494
+ ### `getServiceStatus()`
495
+
496
+ 获取服务状态。
497
+
498
+ ```typescript
499
+ async getServiceStatus(name: string): Promise<ServiceStatus>
500
+ ```
501
+
502
+ **ServiceStatus 类型:**
503
+ ```typescript
504
+ interface ServiceStatus {
505
+ name: string;
506
+ status: 'running' | 'stopped' | 'error' | 'unknown';
507
+ pid?: number;
508
+ uptime?: number;
509
+ memory?: number;
510
+ cpu?: number;
511
+ }
512
+ ```
513
+
514
+ **示例:**
515
+ ```typescript
516
+ const status = await sdk.getServiceStatus('my-node-app');
517
+ console.log('Service status:', status);
518
+ ```
519
+
520
+ ## 配置管理
521
+
522
+ ### `getConfig()`
523
+
524
+ 获取当前配置。
525
+
526
+ ```typescript
527
+ getConfig(): Config
528
+ ```
529
+
530
+ **Config 类型:**
531
+ ```typescript
532
+ interface Config {
533
+ // 全局配置
534
+ global?: {
535
+ logLevel?: 'info' | 'error' | 'debug' | 'warn';
536
+ maxRetries?: number;
537
+ timeout?: number;
538
+ };
539
+
540
+ // AI 配置
541
+ ai?: {
542
+ provider?: 'openai' | 'anthropic' | 'local' | 'none';
543
+ apiKey?: string;
544
+ model?: string;
545
+ temperature?: number;
546
+ };
547
+
548
+ // MCP 配置
549
+ mcp?: {
550
+ autoDiscover?: boolean;
551
+ defaultTransport?: 'stdio' | 'http' | 'sse';
552
+ };
553
+
554
+ // 服务配置
555
+ services?: Record<string, ServiceConfig>;
556
+ }
557
+ ```
558
+
559
+ **示例:**
560
+ ```typescript
561
+ const config = sdk.getConfig();
562
+ console.log('Current configuration:', config);
563
+ ```
564
+
565
+ ### `updateConfig()`
566
+
567
+ 更新配置。
568
+
569
+ ```typescript
570
+ async updateConfig(updates: Partial<Config>): Promise<void>
571
+ ```
572
+
573
+ **参数:**
574
+ - `updates`: 要更新的配置部分
575
+
576
+ **示例:**
577
+ ```typescript
578
+ await sdk.updateConfig({
579
+ global: {
580
+ logLevel: 'debug',
581
+ maxRetries: 3
582
+ }
583
+ });
584
+ ```
585
+
586
+ ## AI 功能
587
+
588
+ ### `ask()`
589
+
590
+ 使用 AI 提问。
591
+
592
+ ```typescript
593
+ async ask(query: string, options?: AskOptions): Promise<AskResult>
594
+ ```
595
+
596
+ **AskOptions 类型:**
597
+ ```typescript
598
+ interface AskOptions {
599
+ provider?: string;
600
+ model?: string;
601
+ temperature?: number;
602
+ maxTokens?: number;
603
+ }
604
+ ```
605
+
606
+ **AskResult 类型:**
607
+ ```typescript
608
+ interface AskResult {
609
+ answer: string;
610
+ toolCalls?: Array<{
611
+ service: string;
612
+ tool: string;
613
+ params: Record<string, any>;
614
+ }>;
615
+ confidence: number;
616
+ }
617
+ ```
618
+
619
+ **示例:**
620
+ ```typescript
621
+ const result = await sdk.ask('What files are in the current directory?');
622
+ console.log('AI response:', result.answer);
623
+
624
+ if (result.toolCalls && result.toolCalls.length > 0) {
625
+ for (const toolCall of result.toolCalls) {
626
+ const toolResult = await sdk.executeTool(toolCall.tool, toolCall.params);
627
+ console.log(`Tool ${toolCall.tool} result:`, toolResult);
628
+ }
629
+ }
630
+ ```
631
+
632
+ ### `configureAI()`
633
+
634
+ 配置 AI 设置。
635
+
636
+ ```typescript
637
+ async configureAI(config: Partial<Config['ai']>): Promise<void>
638
+ ```
639
+
640
+ **参数:**
641
+ - `config`: AI 配置
642
+
643
+ **示例:**
644
+ ```typescript
645
+ await sdk.configureAI({
646
+ provider: 'openai',
647
+ apiKey: 'your-api-key-here',
648
+ model: 'gpt-4'
649
+ });
650
+ ```
651
+
652
+ ## 错误处理
653
+
654
+ ### 错误类型
655
+
656
+ SDK 定义了以下错误类型:
657
+
658
+ ```typescript
659
+ class MCPilotError extends Error {
660
+ code: string;
661
+ shouldRetry: boolean;
662
+
663
+ constructor(message: string, code: string, shouldRetry: boolean = false) {
664
+ super(message);
665
+ this.code = code;
666
+ this.shouldRetry = shouldRetry;
667
+ }
668
+ }
669
+
670
+ // 特定错误类型
671
+ class ServiceNotFoundError extends MCPilotError {
672
+ constructor(serviceName: string) {
673
+ super(`Service '${serviceName}' not found`, 'SERVICE_NOT_FOUND');
674
+ }
675
+ }
676
+
677
+ class ToolNotFoundError extends MCPilotError {
678
+ constructor(toolName: string) {
679
+ super(`Tool '${toolName}' not found`, 'TOOL_NOT_FOUND');
680
+ }
681
+ }
682
+
683
+ class MCPConnectionError extends MCPilotError {
684
+ constructor(serverName: string, message: string) {
685
+ super(`Failed to connect to MCP server '${serverName}': ${message}`, 'MCP_CONNECTION_ERROR', true);
686
+ }
687
+ }
688
+ ```
689
+
690
+ ### 错误处理示例
691
+
692
+ ```typescript
693
+ try {
694
+ await sdk.executeTool('read_file', { path: '/nonexistent.txt' });
695
+ } catch (error) {
696
+ if (error instanceof MCPilotError) {
697
+ console.error(`MCPilot error: ${error.code} - ${error.message}`);
698
+ if (error.shouldRetry) {
699
+ // 实现重试逻辑
700
+ console.log('Retrying...');
701
+ }
702
+ } else {
703
+ console.error('Unexpected error:', error);
704
+ }
705
+ }
706
+ ```
707
+
708
+ ## 日志记录
709
+
710
+ ### 自定义日志记录器
711
+
712
+ ```typescript
713
+ const sdk = new MCPilotSDK({
714
+ logger: {
715
+ info: (msg) => console.log(`[INFO] ${msg}`),
716
+ error: (msg) => console.error(`[ERROR] ${msg}`),
717
+ debug: (msg) => console.debug(`[DEBUG] ${msg}`),
718
+ }
719
+ });
720
+ ```
721
+
722
+ ### 日志级别
723
+
724
+ 支持以下日志级别:
725
+ - `info`: 一般信息性消息
726
+ - `error`: 错误消息
727
+ - `debug`: 调试消息(仅在调试时启用)
728
+
729
+ ## 类型导出
730
+
731
+ SDK 导出以下 TypeScript 类型:
732
+
733
+ ```typescript
734
+ import {
735
+ // 核心类
736
+ MCPilotSDK,
737
+ mcpilot,
738
+
739
+ // 类型
740
+ type SDKOptions,
741
+ type ServiceConfig,
742
+ type ServiceStatus,
743
+ type Config,
744
+ type AskOptions,
745
+ type AskResult,
746
+
747
+ // MCP 相关
748
+ type MCPClientConfig,
749
+ type Tool,
750
+ type ToolResult,
751
+ type ToolCall,
752
+
753
+ // 错误类
754
+ MCPilotError,
755
+ ServiceNotFoundError,
756
+ ToolNotFoundError,
757
+ MCPConnectionError
758
+ } from '@mcpilotx/intentorch';
759
+ ```
760
+
761
+ ## 实用函数
762
+
763
+ ### `createSDK()`
764
+
765
+ 创建 SDK 实例的快捷函数。
766
+
767
+ ```typescript
768
+ import { createSDK } from '@mcpilotx/intentorch';
769
+
770
+ const sdk = createSDK(options);
771
+ ```
772
+
773
+ ### `discoverLocalMCPServers()`
774
+
775
+ 发现本地 MCP 服务器。
776
+
777
+ ```typescript
778
+ import { discoverLocalMCPServers } from '@mcpilotx/intentorch';
779
+
780
+ const servers = await discoverLocalMCPServers();
781
+ console.log('Discovered servers:', servers);
782
+ ```
783
+
784
+ ## 版本信息
785
+
786
+ ### 获取 SDK 版本
787
+
788
+ ```typescript
789
+ import { version } from '@mcpilotx/intentorch';
790
+
791
+ console.log(`MCPilot SDK version: ${version}`);
792
+ ```
793
+
794
+ ## 最佳实践
795
+
796
+ ### 1. 错误处理
797
+
798
+ 始终使用 try-catch 块包装 SDK 调用:
799
+
800
+ ```typescript
801
+ try {
802
+ await sdk.initMCP();
803
+ await sdk.connectMCPServer(config, 'my-server');
804
+ const result = await sdk.executeTool('some_tool', { param: 'value' });
805
+ } catch (error) {
806
+ console.error('Operation failed:', error);
807
+ // 适当的错误恢复逻辑
808
+ }
809
+ ```
810
+
811
+ ### 2. 资源清理
812
+
813
+ 使用后清理资源:
814
+
815
+ ```typescript
816
+ // 使用完成后断开连接
817
+ try {
818
+ await sdk.disconnectMCPServer('my-server');
819
+ await sdk.stopService('my-service');
820
+ } catch (error) {
821
+ console.error('Cleanup failed:', error);
822
+ }
823
+ ```
824
+
825
+ ### 3. 配置管理
826
+
827
+ 将配置存储在适当的位置:
828
+
829
+ ```typescript
830
+ // 从环境变量加载配置
831
+ const sdk = new MCPilotSDK({
832
+ configPath: process.env.MCPILOT_CONFIG_PATH || '~/.mcpilot/config.json',
833
+ mcp: {
834
+ autoDiscover: process.env.MCP_AUTO_DISCOVER === 'true',
835
+ servers: JSON.parse(process.env.MCP_SERVERS || '[]')
836
+ }
837
+ });
838
+ ```
839
+
840
+ ### 4. 性能监控
841
+
842
+ 监控工具执行性能:
843
+
844
+ ```typescript
845
+ const startTime = Date.now();
846
+ const result = await sdk.executeTool('expensive_tool', { /* params */ });
847
+ const executionTime = Date.now() - startTime;
848
+
849
+ console.log(`Tool executed in ${executionTime}ms`);
850
+
851
+ // 获取统计信息
852
+ const stats = sdk.getToolStatistics();
853
+ console.log('Average execution time:', stats.averageExecutionTime);
854
+ ```
855
+
856
+ ## 常见问题
857
+
858
+ ### Q: 如何连接到多个 MCP 服务器?
859
+
860
+ A: 在初始化时配置多个服务器,或使用多个 `connectMCPServer` 调用:
861
+
862
+ ```typescript
863
+ // 方法1:初始化时配置
864
+ const sdk = new MCPilotSDK({
865
+ mcp: {
866
+ servers: [
867
+ {
868
+ transport: { type: 'stdio', command: 'npx', args: ['@modelcontextprotocol/server-filesystem'] }
869
+ },
870
+ {
871
+ transport: { type: 'stdio', command: 'npx', args: ['@modelcontextprotocol/server-weather'] }
872
+ }
873
+ ]
874
+ }
875
+ });
876
+
877
+ // 方法2:动态连接
878
+ await sdk.connectMCPServer(filesystemConfig, 'filesystem');
879
+ await sdk.connectMCPServer(weatherConfig, 'weather');
880
+ ```
881
+
882
+ ### Q: 如何处理工具执行失败?
883
+
884
+ A: 使用错误处理和重试机制:
885
+
886
+ ```typescript
887
+ async function executeWithRetry(toolName: string, args: Record<string, any>, maxRetries = 3) {
888
+ for (let attempt = 1; attempt <= maxRetries; attempt