@bowenqt/qiniu-ai-sdk 0.10.0 → 0.14.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 (149) hide show
  1. package/README.md +225 -0
  2. package/dist/ai/agent-graph.d.ts +101 -0
  3. package/dist/ai/agent-graph.d.ts.map +1 -0
  4. package/dist/ai/agent-graph.js +322 -0
  5. package/dist/ai/agent-graph.js.map +1 -0
  6. package/dist/ai/agent-graph.mjs +318 -0
  7. package/dist/ai/generate-text.d.ts +58 -0
  8. package/dist/ai/generate-text.d.ts.map +1 -1
  9. package/dist/ai/generate-text.js +157 -0
  10. package/dist/ai/generate-text.js.map +1 -1
  11. package/dist/ai/generate-text.mjs +156 -0
  12. package/dist/ai/graph/checkpointer.d.ts +112 -0
  13. package/dist/ai/graph/checkpointer.d.ts.map +1 -0
  14. package/dist/ai/graph/checkpointer.js +131 -0
  15. package/dist/ai/graph/checkpointer.js.map +1 -0
  16. package/dist/ai/graph/checkpointer.mjs +126 -0
  17. package/dist/ai/graph/index.d.ts +13 -0
  18. package/dist/ai/graph/index.d.ts.map +1 -0
  19. package/dist/ai/graph/index.js +22 -0
  20. package/dist/ai/graph/index.js.map +1 -0
  21. package/dist/ai/graph/index.mjs +12 -0
  22. package/dist/ai/graph/postgres-checkpointer.d.ts +54 -0
  23. package/dist/ai/graph/postgres-checkpointer.d.ts.map +1 -0
  24. package/dist/ai/graph/postgres-checkpointer.js +134 -0
  25. package/dist/ai/graph/postgres-checkpointer.js.map +1 -0
  26. package/dist/ai/graph/postgres-checkpointer.mjs +130 -0
  27. package/dist/ai/graph/redis-checkpointer.d.ts +51 -0
  28. package/dist/ai/graph/redis-checkpointer.d.ts.map +1 -0
  29. package/dist/ai/graph/redis-checkpointer.js +124 -0
  30. package/dist/ai/graph/redis-checkpointer.js.map +1 -0
  31. package/dist/ai/graph/redis-checkpointer.mjs +120 -0
  32. package/dist/ai/graph/state-graph.d.ts +41 -0
  33. package/dist/ai/graph/state-graph.d.ts.map +1 -0
  34. package/dist/ai/graph/state-graph.js +149 -0
  35. package/dist/ai/graph/state-graph.js.map +1 -0
  36. package/dist/ai/graph/state-graph.mjs +144 -0
  37. package/dist/ai/graph/types.d.ts +41 -0
  38. package/dist/ai/graph/types.d.ts.map +1 -0
  39. package/dist/ai/graph/types.js +10 -0
  40. package/dist/ai/graph/types.js.map +1 -0
  41. package/dist/ai/graph/types.mjs +7 -0
  42. package/dist/ai/internal-types.d.ts +109 -0
  43. package/dist/ai/internal-types.d.ts.map +1 -0
  44. package/dist/ai/internal-types.js +28 -0
  45. package/dist/ai/internal-types.js.map +1 -0
  46. package/dist/ai/internal-types.mjs +23 -0
  47. package/dist/ai/nodes/execute-node.d.ts +27 -0
  48. package/dist/ai/nodes/execute-node.d.ts.map +1 -0
  49. package/dist/ai/nodes/execute-node.js +118 -0
  50. package/dist/ai/nodes/execute-node.js.map +1 -0
  51. package/dist/ai/nodes/execute-node.mjs +114 -0
  52. package/dist/ai/nodes/index.d.ts +8 -0
  53. package/dist/ai/nodes/index.d.ts.map +1 -0
  54. package/dist/ai/nodes/index.js +16 -0
  55. package/dist/ai/nodes/index.js.map +1 -0
  56. package/dist/ai/nodes/index.mjs +7 -0
  57. package/dist/ai/nodes/memory-node.d.ts +34 -0
  58. package/dist/ai/nodes/memory-node.d.ts.map +1 -0
  59. package/dist/ai/nodes/memory-node.js +164 -0
  60. package/dist/ai/nodes/memory-node.js.map +1 -0
  61. package/dist/ai/nodes/memory-node.mjs +158 -0
  62. package/dist/ai/nodes/predict-node.d.ts +42 -0
  63. package/dist/ai/nodes/predict-node.d.ts.map +1 -0
  64. package/dist/ai/nodes/predict-node.js +89 -0
  65. package/dist/ai/nodes/predict-node.js.map +1 -0
  66. package/dist/ai/nodes/predict-node.mjs +86 -0
  67. package/dist/ai/nodes/types.d.ts +44 -0
  68. package/dist/ai/nodes/types.d.ts.map +1 -0
  69. package/dist/ai/nodes/types.js +6 -0
  70. package/dist/ai/nodes/types.js.map +1 -0
  71. package/dist/ai/nodes/types.mjs +5 -0
  72. package/dist/index.d.ts +23 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +80 -1
  75. package/dist/index.js.map +1 -1
  76. package/dist/index.mjs +34 -0
  77. package/dist/lib/otel-tracer.d.ts +47 -0
  78. package/dist/lib/otel-tracer.d.ts.map +1 -0
  79. package/dist/lib/otel-tracer.js +79 -0
  80. package/dist/lib/otel-tracer.js.map +1 -0
  81. package/dist/lib/otel-tracer.mjs +75 -0
  82. package/dist/lib/token-estimator.d.ts +62 -0
  83. package/dist/lib/token-estimator.d.ts.map +1 -0
  84. package/dist/lib/token-estimator.js +106 -0
  85. package/dist/lib/token-estimator.js.map +1 -0
  86. package/dist/lib/token-estimator.mjs +100 -0
  87. package/dist/lib/tool-registry.d.ts +103 -0
  88. package/dist/lib/tool-registry.d.ts.map +1 -0
  89. package/dist/lib/tool-registry.js +159 -0
  90. package/dist/lib/tool-registry.js.map +1 -0
  91. package/dist/lib/tool-registry.mjs +154 -0
  92. package/dist/lib/tracer.d.ts +85 -0
  93. package/dist/lib/tracer.d.ts.map +1 -0
  94. package/dist/lib/tracer.js +170 -0
  95. package/dist/lib/tracer.js.map +1 -0
  96. package/dist/lib/tracer.mjs +161 -0
  97. package/dist/lib/types.d.ts +11 -0
  98. package/dist/lib/types.d.ts.map +1 -1
  99. package/dist/modules/mcp/adapter.d.ts +23 -0
  100. package/dist/modules/mcp/adapter.d.ts.map +1 -0
  101. package/dist/modules/mcp/adapter.js +63 -0
  102. package/dist/modules/mcp/adapter.js.map +1 -0
  103. package/dist/modules/mcp/adapter.mjs +58 -0
  104. package/dist/modules/mcp/client.d.ts +75 -0
  105. package/dist/modules/mcp/client.d.ts.map +1 -0
  106. package/dist/modules/mcp/client.js +300 -0
  107. package/dist/modules/mcp/client.js.map +1 -0
  108. package/dist/modules/mcp/client.mjs +295 -0
  109. package/dist/modules/mcp/http-transport.d.ts +51 -0
  110. package/dist/modules/mcp/http-transport.d.ts.map +1 -0
  111. package/dist/modules/mcp/http-transport.js +146 -0
  112. package/dist/modules/mcp/http-transport.js.map +1 -0
  113. package/dist/modules/mcp/http-transport.mjs +141 -0
  114. package/dist/modules/mcp/index.d.ts +11 -0
  115. package/dist/modules/mcp/index.d.ts.map +1 -0
  116. package/dist/modules/mcp/index.js +34 -0
  117. package/dist/modules/mcp/index.js.map +1 -0
  118. package/dist/modules/mcp/index.mjs +14 -0
  119. package/dist/modules/mcp/oauth.d.ts +101 -0
  120. package/dist/modules/mcp/oauth.d.ts.map +1 -0
  121. package/dist/modules/mcp/oauth.js +347 -0
  122. package/dist/modules/mcp/oauth.js.map +1 -0
  123. package/dist/modules/mcp/oauth.mjs +304 -0
  124. package/dist/modules/mcp/token-store.d.ts +69 -0
  125. package/dist/modules/mcp/token-store.d.ts.map +1 -0
  126. package/dist/modules/mcp/token-store.js +174 -0
  127. package/dist/modules/mcp/token-store.js.map +1 -0
  128. package/dist/modules/mcp/token-store.mjs +135 -0
  129. package/dist/modules/mcp/types.d.ts +91 -0
  130. package/dist/modules/mcp/types.d.ts.map +1 -0
  131. package/dist/modules/mcp/types.js +14 -0
  132. package/dist/modules/mcp/types.js.map +1 -0
  133. package/dist/modules/mcp/types.mjs +11 -0
  134. package/dist/modules/skills/index.d.ts +7 -0
  135. package/dist/modules/skills/index.d.ts.map +1 -0
  136. package/dist/modules/skills/index.js +14 -0
  137. package/dist/modules/skills/index.js.map +1 -0
  138. package/dist/modules/skills/index.mjs +6 -0
  139. package/dist/modules/skills/loader.d.ts +51 -0
  140. package/dist/modules/skills/loader.d.ts.map +1 -0
  141. package/dist/modules/skills/loader.js +237 -0
  142. package/dist/modules/skills/loader.js.map +1 -0
  143. package/dist/modules/skills/loader.mjs +198 -0
  144. package/dist/modules/skills/types.d.ts +60 -0
  145. package/dist/modules/skills/types.d.ts.map +1 -0
  146. package/dist/modules/skills/types.js +20 -0
  147. package/dist/modules/skills/types.js.map +1 -0
  148. package/dist/modules/skills/types.mjs +17 -0
  149. package/package.json +4 -1
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Tool Adapter - converts MCP tools to SDK RegisteredTool format.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.adaptMCPToolsToRegistry = adaptMCPToolsToRegistry;
7
+ exports.getServerTools = getServerTools;
8
+ exports.getAllMCPToolsAsRegistered = getAllMCPToolsAsRegistered;
9
+ /**
10
+ * Convert MCP tools to SDK RegisteredTool format.
11
+ * Sorted by name for deterministic registration order.
12
+ */
13
+ function adaptMCPToolsToRegistry(tools, serverName, client) {
14
+ const source = {
15
+ type: 'mcp',
16
+ namespace: serverName,
17
+ };
18
+ return tools
19
+ .map(tool => ({
20
+ name: tool.name,
21
+ description: tool.description,
22
+ parameters: tool.inputSchema,
23
+ source,
24
+ execute: async (args) => {
25
+ const result = await client.executeTool(serverName, tool.name, args);
26
+ // Extract text content
27
+ const textContents = result.content
28
+ .filter(c => c.type === 'text' && c.text)
29
+ .map(c => c.text)
30
+ .join('\n');
31
+ if (result.isError) {
32
+ throw new Error(textContents || 'Tool execution failed');
33
+ }
34
+ return textContents || result;
35
+ },
36
+ }))
37
+ .sort((a, b) => a.name.localeCompare(b.name));
38
+ }
39
+ /**
40
+ * Get all tools from a specific MCP server.
41
+ * Each server maintains its own tool list.
42
+ */
43
+ function getServerTools(client, serverName) {
44
+ const tools = client.getServerTools(serverName);
45
+ return adaptMCPToolsToRegistry(tools, serverName, client);
46
+ }
47
+ /**
48
+ * Get all tools from all connected MCP servers.
49
+ * Tools are collected per-server and concatenated; actual deduplication
50
+ * happens in ToolRegistry via priority/conflict resolution.
51
+ */
52
+ function getAllMCPToolsAsRegistered(client) {
53
+ const allTools = [];
54
+ const serverNames = client.getConnectedServerNames();
55
+ // Sort server names for deterministic order
56
+ const sorted = [...serverNames].sort();
57
+ for (const serverName of sorted) {
58
+ const serverTools = getServerTools(client, serverName);
59
+ allTools.push(...serverTools);
60
+ }
61
+ return allTools;
62
+ }
63
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/modules/mcp/adapter.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAUH,0DAiCC;AAMD,wCAMC;AAOD,gEAeC;AAvED;;;GAGG;AACH,SAAgB,uBAAuB,CACnC,KAA0B,EAC1B,UAAkB,EAClB,MAAiB;IAEjB,MAAM,MAAM,GAAe;QACvB,IAAI,EAAE,KAAK;QACX,SAAS,EAAE,UAAU;KACxB,CAAC;IAEF,OAAO,KAAK;SACP,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACV,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,WAAW;QAC5B,MAAM;QACN,OAAO,EAAE,KAAK,EAAE,IAA6B,EAAE,EAAE;YAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAErE,uBAAuB;YACvB,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO;iBAC9B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;iBACxC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAChB,IAAI,CAAC,IAAI,CAAC,CAAC;YAEhB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,uBAAuB,CAAC,CAAC;YAC7D,CAAC;YAED,OAAO,YAAY,IAAI,MAAM,CAAC;QAClC,CAAC;KACJ,CAAC,CAAC;SACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,SAAgB,cAAc,CAC1B,MAAiB,EACjB,UAAkB;IAElB,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAChD,OAAO,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,SAAgB,0BAA0B,CACtC,MAAiB;IAEjB,MAAM,QAAQ,GAAqB,EAAE,CAAC;IACtC,MAAM,WAAW,GAAG,MAAM,CAAC,uBAAuB,EAAE,CAAC;IAErD,4CAA4C;IAC5C,MAAM,MAAM,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvC,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACvD,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * MCP Tool Adapter - converts MCP tools to SDK RegisteredTool format.
3
+ */
4
+ /**
5
+ * Convert MCP tools to SDK RegisteredTool format.
6
+ * Sorted by name for deterministic registration order.
7
+ */
8
+ export function adaptMCPToolsToRegistry(tools, serverName, client) {
9
+ const source = {
10
+ type: 'mcp',
11
+ namespace: serverName,
12
+ };
13
+ return tools
14
+ .map(tool => ({
15
+ name: tool.name,
16
+ description: tool.description,
17
+ parameters: tool.inputSchema,
18
+ source,
19
+ execute: async (args) => {
20
+ const result = await client.executeTool(serverName, tool.name, args);
21
+ // Extract text content
22
+ const textContents = result.content
23
+ .filter(c => c.type === 'text' && c.text)
24
+ .map(c => c.text)
25
+ .join('\n');
26
+ if (result.isError) {
27
+ throw new Error(textContents || 'Tool execution failed');
28
+ }
29
+ return textContents || result;
30
+ },
31
+ }))
32
+ .sort((a, b) => a.name.localeCompare(b.name));
33
+ }
34
+ /**
35
+ * Get all tools from a specific MCP server.
36
+ * Each server maintains its own tool list.
37
+ */
38
+ export function getServerTools(client, serverName) {
39
+ const tools = client.getServerTools(serverName);
40
+ return adaptMCPToolsToRegistry(tools, serverName, client);
41
+ }
42
+ /**
43
+ * Get all tools from all connected MCP servers.
44
+ * Tools are collected per-server and concatenated; actual deduplication
45
+ * happens in ToolRegistry via priority/conflict resolution.
46
+ */
47
+ export function getAllMCPToolsAsRegistered(client) {
48
+ const allTools = [];
49
+ const serverNames = client.getConnectedServerNames();
50
+ // Sort server names for deterministic order
51
+ const sorted = [...serverNames].sort();
52
+ for (const serverName of sorted) {
53
+ const serverTools = getServerTools(client, serverName);
54
+ allTools.push(...serverTools);
55
+ }
56
+ return allTools;
57
+ }
58
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1,75 @@
1
+ /**
2
+ * MCP Client with stdio and HTTP transport support.
3
+ * Phase 1: Bearer token, Phase 3: OAuth 2.0
4
+ */
5
+ import type { MCPClientConfig, MCPToolDefinition, MCPToolResult, MCPConnectionState } from './types';
6
+ import type { Logger } from '../../lib/logger';
7
+ /** MCP Client error */
8
+ export declare class MCPClientError extends Error {
9
+ readonly serverName?: string | undefined;
10
+ constructor(message: string, serverName?: string | undefined);
11
+ }
12
+ /**
13
+ * MCP Client manages connections to MCP servers.
14
+ */
15
+ export declare class MCPClient {
16
+ private readonly config;
17
+ private readonly logger;
18
+ private readonly connections;
19
+ constructor(config: MCPClientConfig, logger?: Logger);
20
+ /**
21
+ * Connect to all configured servers.
22
+ */
23
+ connect(): Promise<void>;
24
+ /**
25
+ * Connect to a specific server.
26
+ */
27
+ connectServer(serverName: string): Promise<void>;
28
+ /**
29
+ * Disconnect from all servers.
30
+ */
31
+ disconnect(): Promise<void>;
32
+ /**
33
+ * Get all tools from all connected servers.
34
+ * Sorted by server name, then tool name for deterministic order.
35
+ * Only returns tools from servers with state 'connected'.
36
+ */
37
+ getAllTools(): MCPToolDefinition[];
38
+ /**
39
+ * Execute a tool.
40
+ */
41
+ executeTool(serverName: string, toolName: string, args: Record<string, unknown>): Promise<MCPToolResult>;
42
+ /**
43
+ * Get connection state.
44
+ */
45
+ getState(serverName: string): MCPConnectionState;
46
+ /**
47
+ * Get tools for a specific server.
48
+ */
49
+ getServerTools(serverName: string): MCPToolDefinition[];
50
+ /**
51
+ * Get names of all connected servers.
52
+ */
53
+ getConnectedServerNames(): string[];
54
+ /**
55
+ * Initialize connection (MCP handshake).
56
+ */
57
+ private initialize;
58
+ /**
59
+ * List tools from server.
60
+ */
61
+ private listToolsInternal;
62
+ /**
63
+ * Send JSON-RPC request.
64
+ */
65
+ private sendRequest;
66
+ /**
67
+ * Send JSON-RPC notification.
68
+ */
69
+ private sendNotification;
70
+ /**
71
+ * Handle incoming data.
72
+ */
73
+ private handleData;
74
+ }
75
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/modules/mcp/client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACR,eAAe,EAGf,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EACrB,MAAM,SAAS,CAAC;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI/C,uBAAuB;AACvB,qBAAa,cAAe,SAAQ,KAAK;aACQ,UAAU,CAAC,EAAE,MAAM;gBAApD,OAAO,EAAE,MAAM,EAAkB,UAAU,CAAC,EAAE,MAAM,YAAA;CAInE;AAmBD;;GAEG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuC;gBAEvD,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM;IAsBpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmGtD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC;;;;OAIG;IACH,WAAW,IAAI,iBAAiB,EAAE;IAiBlC;;OAEG;IACG,WAAW,CACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,aAAa,CAAC;IAkBzB;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB;IAIhD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAQvD;;OAEG;IACH,uBAAuB,IAAI,MAAM,EAAE;IAUnC;;OAEG;YACW,UAAU;IAaxB;;OAEG;YACW,iBAAiB;IAO/B;;OAEG;IACH,OAAO,CAAC,WAAW;IAiBnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAUxB;;OAEG;IACH,OAAO,CAAC,UAAU;CA6BrB"}
@@ -0,0 +1,300 @@
1
+ "use strict";
2
+ /**
3
+ * MCP Client with stdio and HTTP transport support.
4
+ * Phase 1: Bearer token, Phase 3: OAuth 2.0
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.MCPClient = exports.MCPClientError = void 0;
8
+ const child_process_1 = require("child_process");
9
+ const types_1 = require("./types");
10
+ const logger_1 = require("../../lib/logger");
11
+ const http_transport_1 = require("./http-transport");
12
+ /** MCP Client error */
13
+ class MCPClientError extends Error {
14
+ constructor(message, serverName) {
15
+ super(message);
16
+ this.serverName = serverName;
17
+ this.name = 'MCPClientError';
18
+ }
19
+ }
20
+ exports.MCPClientError = MCPClientError;
21
+ /**
22
+ * MCP Client manages connections to MCP servers.
23
+ */
24
+ class MCPClient {
25
+ constructor(config, logger) {
26
+ this.connections = new Map();
27
+ this.config = {
28
+ servers: config.servers,
29
+ connectionTimeout: config.connectionTimeout ?? types_1.DEFAULT_MCP_CONFIG.connectionTimeout,
30
+ };
31
+ this.logger = logger ?? logger_1.noopLogger;
32
+ // Initialize connections (not started)
33
+ for (const server of this.config.servers) {
34
+ this.connections.set(server.name, {
35
+ config: server,
36
+ process: null,
37
+ httpTransport: null,
38
+ state: 'disconnected',
39
+ tools: [],
40
+ requestId: 0,
41
+ pendingRequests: new Map(),
42
+ buffer: '',
43
+ });
44
+ }
45
+ }
46
+ /**
47
+ * Connect to all configured servers.
48
+ */
49
+ async connect() {
50
+ const promises = Array.from(this.connections.keys()).map(name => this.connectServer(name));
51
+ await Promise.all(promises);
52
+ }
53
+ /**
54
+ * Connect to a specific server.
55
+ */
56
+ async connectServer(serverName) {
57
+ const conn = this.connections.get(serverName);
58
+ if (!conn) {
59
+ throw new MCPClientError(`Server not found: ${serverName}`, serverName);
60
+ }
61
+ if (conn.state === 'connected') {
62
+ return;
63
+ }
64
+ conn.state = 'connecting';
65
+ try {
66
+ if (conn.config.transport === 'http') {
67
+ // HTTP transport (Phase 3)
68
+ const httpConfig = conn.config;
69
+ // Validate authentication configuration
70
+ if (httpConfig.oauth && !httpConfig.token && !httpConfig.tokenProvider) {
71
+ throw new MCPClientError(`OAuth configured for '${serverName}' but no token or tokenProvider provided. ` +
72
+ 'Use PKCEFlow/DeviceCodeFlow to obtain tokens first, then provide via token or tokenProvider.', serverName);
73
+ }
74
+ conn.httpTransport = new http_transport_1.MCPHttpTransport(httpConfig);
75
+ // Connect with timeout
76
+ await Promise.race([
77
+ conn.httpTransport.connect(),
78
+ new Promise((_, reject) => setTimeout(() => reject(new MCPClientError('Connection timeout', serverName)), this.config.connectionTimeout)),
79
+ ]);
80
+ // List tools via HTTP transport
81
+ conn.tools = await conn.httpTransport.listTools();
82
+ conn.state = 'connected';
83
+ this.logger.info('MCP HTTP server connected', {
84
+ server: serverName,
85
+ tools: conn.tools.length,
86
+ });
87
+ }
88
+ else {
89
+ // Stdio transport (Phase 1)
90
+ const { command, args = [], env = {}, token } = conn.config;
91
+ // Inject bearer token via env if configured
92
+ const processEnv = { ...process.env, ...env };
93
+ if (token) {
94
+ processEnv.MCP_BEARER_TOKEN = token;
95
+ }
96
+ conn.process = (0, child_process_1.spawn)(command, args, {
97
+ stdio: ['pipe', 'pipe', 'pipe'],
98
+ env: processEnv,
99
+ });
100
+ // Handle stdout (JSON-RPC responses)
101
+ conn.process.stdout?.on('data', (data) => {
102
+ this.handleData(serverName, data.toString());
103
+ });
104
+ // Handle stderr (logs)
105
+ conn.process.stderr?.on('data', (data) => {
106
+ this.logger.debug('MCP server stderr', { server: serverName, data: data.toString() });
107
+ });
108
+ // Handle exit
109
+ conn.process.on('exit', (code) => {
110
+ this.logger.info('MCP server exited', { server: serverName, code });
111
+ conn.state = 'disconnected';
112
+ conn.process = null;
113
+ });
114
+ // Wait for connection with timeout
115
+ await Promise.race([
116
+ this.initialize(serverName),
117
+ new Promise((_, reject) => setTimeout(() => reject(new MCPClientError('Connection timeout', serverName)), this.config.connectionTimeout)),
118
+ ]);
119
+ // List tools
120
+ conn.tools = await this.listToolsInternal(serverName);
121
+ conn.state = 'connected';
122
+ this.logger.info('MCP server connected', {
123
+ server: serverName,
124
+ tools: conn.tools.length,
125
+ });
126
+ }
127
+ }
128
+ catch (error) {
129
+ conn.state = 'error';
130
+ throw error;
131
+ }
132
+ }
133
+ /**
134
+ * Disconnect from all servers.
135
+ */
136
+ async disconnect() {
137
+ for (const [name, conn] of this.connections) {
138
+ if (conn.httpTransport) {
139
+ await conn.httpTransport.disconnect();
140
+ conn.httpTransport = null;
141
+ conn.state = 'disconnected';
142
+ this.logger.info('MCP HTTP server disconnected', { server: name });
143
+ }
144
+ else if (conn.process) {
145
+ conn.process.kill();
146
+ conn.process = null;
147
+ conn.state = 'disconnected';
148
+ this.logger.info('MCP server disconnected', { server: name });
149
+ }
150
+ }
151
+ }
152
+ /**
153
+ * Get all tools from all connected servers.
154
+ * Sorted by server name, then tool name for deterministic order.
155
+ * Only returns tools from servers with state 'connected'.
156
+ */
157
+ getAllTools() {
158
+ const allTools = [];
159
+ const serverNames = Array.from(this.connections.keys()).sort();
160
+ for (const serverName of serverNames) {
161
+ const conn = this.connections.get(serverName);
162
+ // Only include tools from connected servers
163
+ if (conn.state !== 'connected')
164
+ continue;
165
+ for (const tool of conn.tools) {
166
+ allTools.push({ ...tool, server: serverName });
167
+ }
168
+ }
169
+ // Sort by tool name
170
+ return allTools.sort((a, b) => a.name.localeCompare(b.name));
171
+ }
172
+ /**
173
+ * Execute a tool.
174
+ */
175
+ async executeTool(serverName, toolName, args) {
176
+ const conn = this.connections.get(serverName);
177
+ if (!conn || conn.state !== 'connected') {
178
+ throw new MCPClientError(`Server not connected: ${serverName}`, serverName);
179
+ }
180
+ // HTTP transport uses MCPHttpTransport
181
+ if (conn.httpTransport) {
182
+ return conn.httpTransport.executeTool(toolName, args);
183
+ }
184
+ // Stdio transport uses JSON-RPC
185
+ return this.sendRequest(serverName, 'tools/call', {
186
+ name: toolName,
187
+ arguments: args,
188
+ });
189
+ }
190
+ /**
191
+ * Get connection state.
192
+ */
193
+ getState(serverName) {
194
+ return this.connections.get(serverName)?.state ?? 'disconnected';
195
+ }
196
+ /**
197
+ * Get tools for a specific server.
198
+ */
199
+ getServerTools(serverName) {
200
+ const conn = this.connections.get(serverName);
201
+ if (!conn || conn.state !== 'connected') {
202
+ return [];
203
+ }
204
+ return conn.tools;
205
+ }
206
+ /**
207
+ * Get names of all connected servers.
208
+ */
209
+ getConnectedServerNames() {
210
+ const names = [];
211
+ for (const [name, conn] of this.connections) {
212
+ if (conn.state === 'connected') {
213
+ names.push(name);
214
+ }
215
+ }
216
+ return names.sort();
217
+ }
218
+ /**
219
+ * Initialize connection (MCP handshake).
220
+ */
221
+ async initialize(serverName) {
222
+ await this.sendRequest(serverName, 'initialize', {
223
+ protocolVersion: '2024-11-05',
224
+ capabilities: {},
225
+ clientInfo: {
226
+ name: 'qiniu-ai-sdk',
227
+ version: '0.11.0',
228
+ },
229
+ });
230
+ await this.sendNotification(serverName, 'notifications/initialized', {});
231
+ }
232
+ /**
233
+ * List tools from server.
234
+ */
235
+ async listToolsInternal(serverName) {
236
+ const result = await this.sendRequest(serverName, 'tools/list', {});
237
+ return result.tools ?? [];
238
+ }
239
+ /**
240
+ * Send JSON-RPC request.
241
+ */
242
+ sendRequest(serverName, method, params) {
243
+ const conn = this.connections.get(serverName);
244
+ const id = ++conn.requestId;
245
+ const message = JSON.stringify({
246
+ jsonrpc: '2.0',
247
+ id,
248
+ method,
249
+ params,
250
+ }) + '\n';
251
+ return new Promise((resolve, reject) => {
252
+ conn.pendingRequests.set(id, { resolve, reject });
253
+ conn.process?.stdin?.write(message);
254
+ });
255
+ }
256
+ /**
257
+ * Send JSON-RPC notification.
258
+ */
259
+ sendNotification(serverName, method, params) {
260
+ const conn = this.connections.get(serverName);
261
+ const message = JSON.stringify({
262
+ jsonrpc: '2.0',
263
+ method,
264
+ params,
265
+ }) + '\n';
266
+ conn.process?.stdin?.write(message);
267
+ }
268
+ /**
269
+ * Handle incoming data.
270
+ */
271
+ handleData(serverName, data) {
272
+ const conn = this.connections.get(serverName);
273
+ conn.buffer += data;
274
+ // Process complete messages
275
+ const lines = conn.buffer.split('\n');
276
+ conn.buffer = lines.pop() ?? '';
277
+ for (const line of lines) {
278
+ if (!line.trim())
279
+ continue;
280
+ try {
281
+ const message = JSON.parse(line);
282
+ if (message.id !== undefined && conn.pendingRequests.has(message.id)) {
283
+ const { resolve, reject } = conn.pendingRequests.get(message.id);
284
+ conn.pendingRequests.delete(message.id);
285
+ if (message.error) {
286
+ reject(new MCPClientError(message.error.message, serverName));
287
+ }
288
+ else {
289
+ resolve(message.result);
290
+ }
291
+ }
292
+ }
293
+ catch {
294
+ this.logger.warn('Failed to parse MCP message', { server: serverName, line });
295
+ }
296
+ }
297
+ }
298
+ }
299
+ exports.MCPClient = MCPClient;
300
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/modules/mcp/client.ts"],"names":[],"mappings":"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"}