@qodo/sdk 0.1.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 (303) hide show
  1. package/LICENSE +118 -0
  2. package/README.md +121 -0
  3. package/dist/api/agent.d.ts +69 -0
  4. package/dist/api/agent.d.ts.map +1 -0
  5. package/dist/api/agent.js +1034 -0
  6. package/dist/api/agent.js.map +1 -0
  7. package/dist/api/analytics.d.ts +43 -0
  8. package/dist/api/analytics.d.ts.map +1 -0
  9. package/dist/api/analytics.js +163 -0
  10. package/dist/api/analytics.js.map +1 -0
  11. package/dist/api/http.d.ts +5 -0
  12. package/dist/api/http.d.ts.map +1 -0
  13. package/dist/api/http.js +59 -0
  14. package/dist/api/http.js.map +1 -0
  15. package/dist/api/index.d.ts +12 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +17 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/api/taskTracking.d.ts +54 -0
  20. package/dist/api/taskTracking.d.ts.map +1 -0
  21. package/dist/api/taskTracking.js +208 -0
  22. package/dist/api/taskTracking.js.map +1 -0
  23. package/dist/api/types.d.ts +92 -0
  24. package/dist/api/types.d.ts.map +1 -0
  25. package/dist/api/types.js +2 -0
  26. package/dist/api/types.js.map +1 -0
  27. package/dist/api/utils.d.ts +8 -0
  28. package/dist/api/utils.d.ts.map +1 -0
  29. package/dist/api/utils.js +54 -0
  30. package/dist/api/utils.js.map +1 -0
  31. package/dist/api/websocket.d.ts +74 -0
  32. package/dist/api/websocket.d.ts.map +1 -0
  33. package/dist/api/websocket.js +685 -0
  34. package/dist/api/websocket.js.map +1 -0
  35. package/dist/auth/index.d.ts +25 -0
  36. package/dist/auth/index.d.ts.map +1 -0
  37. package/dist/auth/index.js +85 -0
  38. package/dist/auth/index.js.map +1 -0
  39. package/dist/clients/index.d.ts +8 -0
  40. package/dist/clients/index.d.ts.map +1 -0
  41. package/dist/clients/index.js +7 -0
  42. package/dist/clients/index.js.map +1 -0
  43. package/dist/clients/info/InfoClient.d.ts +37 -0
  44. package/dist/clients/info/InfoClient.d.ts.map +1 -0
  45. package/dist/clients/info/InfoClient.js +69 -0
  46. package/dist/clients/info/InfoClient.js.map +1 -0
  47. package/dist/clients/info/index.d.ts +4 -0
  48. package/dist/clients/info/index.d.ts.map +1 -0
  49. package/dist/clients/info/index.js +2 -0
  50. package/dist/clients/info/index.js.map +1 -0
  51. package/dist/clients/info/types.d.ts +21 -0
  52. package/dist/clients/info/types.d.ts.map +1 -0
  53. package/dist/clients/info/types.js +2 -0
  54. package/dist/clients/info/types.js.map +1 -0
  55. package/dist/clients/sessions/SessionsClient.d.ts +34 -0
  56. package/dist/clients/sessions/SessionsClient.d.ts.map +1 -0
  57. package/dist/clients/sessions/SessionsClient.js +71 -0
  58. package/dist/clients/sessions/SessionsClient.js.map +1 -0
  59. package/dist/clients/sessions/index.d.ts +4 -0
  60. package/dist/clients/sessions/index.d.ts.map +1 -0
  61. package/dist/clients/sessions/index.js +2 -0
  62. package/dist/clients/sessions/index.js.map +1 -0
  63. package/dist/clients/sessions/types.d.ts +20 -0
  64. package/dist/clients/sessions/types.d.ts.map +1 -0
  65. package/dist/clients/sessions/types.js +2 -0
  66. package/dist/clients/sessions/types.js.map +1 -0
  67. package/dist/config/ConfigManager.d.ts +43 -0
  68. package/dist/config/ConfigManager.d.ts.map +1 -0
  69. package/dist/config/ConfigManager.js +472 -0
  70. package/dist/config/ConfigManager.js.map +1 -0
  71. package/dist/config/index.d.ts +6 -0
  72. package/dist/config/index.d.ts.map +1 -0
  73. package/dist/config/index.js +7 -0
  74. package/dist/config/index.js.map +1 -0
  75. package/dist/config/urlConfig.d.ts +15 -0
  76. package/dist/config/urlConfig.d.ts.map +1 -0
  77. package/dist/config/urlConfig.js +75 -0
  78. package/dist/config/urlConfig.js.map +1 -0
  79. package/dist/constants/errors.d.ts +2 -0
  80. package/dist/constants/errors.d.ts.map +1 -0
  81. package/dist/constants/errors.js +2 -0
  82. package/dist/constants/errors.js.map +1 -0
  83. package/dist/constants/index.d.ts +7 -0
  84. package/dist/constants/index.d.ts.map +1 -0
  85. package/dist/constants/index.js +11 -0
  86. package/dist/constants/index.js.map +1 -0
  87. package/dist/constants/tools.d.ts +4 -0
  88. package/dist/constants/tools.d.ts.map +1 -0
  89. package/dist/constants/tools.js +4 -0
  90. package/dist/constants/tools.js.map +1 -0
  91. package/dist/constants/versions.d.ts +2 -0
  92. package/dist/constants/versions.d.ts.map +1 -0
  93. package/dist/constants/versions.js +2 -0
  94. package/dist/constants/versions.js.map +1 -0
  95. package/dist/context/buildUserContext.d.ts +18 -0
  96. package/dist/context/buildUserContext.d.ts.map +1 -0
  97. package/dist/context/buildUserContext.js +34 -0
  98. package/dist/context/buildUserContext.js.map +1 -0
  99. package/dist/context/index.d.ts +9 -0
  100. package/dist/context/index.d.ts.map +1 -0
  101. package/dist/context/index.js +9 -0
  102. package/dist/context/index.js.map +1 -0
  103. package/dist/context/messageManager.d.ts +42 -0
  104. package/dist/context/messageManager.d.ts.map +1 -0
  105. package/dist/context/messageManager.js +322 -0
  106. package/dist/context/messageManager.js.map +1 -0
  107. package/dist/context/taskFocus.d.ts +2 -0
  108. package/dist/context/taskFocus.d.ts.map +1 -0
  109. package/dist/context/taskFocus.js +26 -0
  110. package/dist/context/taskFocus.js.map +1 -0
  111. package/dist/context/userInput.d.ts +3 -0
  112. package/dist/context/userInput.d.ts.map +1 -0
  113. package/dist/context/userInput.js +20 -0
  114. package/dist/context/userInput.js.map +1 -0
  115. package/dist/index.d.ts +18 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +21 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/mcp/MCPManager.d.ts +125 -0
  120. package/dist/mcp/MCPManager.d.ts.map +1 -0
  121. package/dist/mcp/MCPManager.js +616 -0
  122. package/dist/mcp/MCPManager.js.map +1 -0
  123. package/dist/mcp/approvedTools.d.ts +4 -0
  124. package/dist/mcp/approvedTools.d.ts.map +1 -0
  125. package/dist/mcp/approvedTools.js +19 -0
  126. package/dist/mcp/approvedTools.js.map +1 -0
  127. package/dist/mcp/baseServer.d.ts +75 -0
  128. package/dist/mcp/baseServer.d.ts.map +1 -0
  129. package/dist/mcp/baseServer.js +107 -0
  130. package/dist/mcp/baseServer.js.map +1 -0
  131. package/dist/mcp/builtinServers.d.ts +15 -0
  132. package/dist/mcp/builtinServers.d.ts.map +1 -0
  133. package/dist/mcp/builtinServers.js +155 -0
  134. package/dist/mcp/builtinServers.js.map +1 -0
  135. package/dist/mcp/dynamicBEServer.d.ts +20 -0
  136. package/dist/mcp/dynamicBEServer.d.ts.map +1 -0
  137. package/dist/mcp/dynamicBEServer.js +52 -0
  138. package/dist/mcp/dynamicBEServer.js.map +1 -0
  139. package/dist/mcp/index.d.ts +19 -0
  140. package/dist/mcp/index.d.ts.map +1 -0
  141. package/dist/mcp/index.js +24 -0
  142. package/dist/mcp/index.js.map +1 -0
  143. package/dist/mcp/mcpInitialization.d.ts +2 -0
  144. package/dist/mcp/mcpInitialization.d.ts.map +1 -0
  145. package/dist/mcp/mcpInitialization.js +56 -0
  146. package/dist/mcp/mcpInitialization.js.map +1 -0
  147. package/dist/mcp/servers/filesystem.d.ts +75 -0
  148. package/dist/mcp/servers/filesystem.d.ts.map +1 -0
  149. package/dist/mcp/servers/filesystem.js +992 -0
  150. package/dist/mcp/servers/filesystem.js.map +1 -0
  151. package/dist/mcp/servers/gerrit.d.ts +19 -0
  152. package/dist/mcp/servers/gerrit.d.ts.map +1 -0
  153. package/dist/mcp/servers/gerrit.js +515 -0
  154. package/dist/mcp/servers/gerrit.js.map +1 -0
  155. package/dist/mcp/servers/git.d.ts +18 -0
  156. package/dist/mcp/servers/git.d.ts.map +1 -0
  157. package/dist/mcp/servers/git.js +441 -0
  158. package/dist/mcp/servers/git.js.map +1 -0
  159. package/dist/mcp/servers/ripgrep.d.ts +34 -0
  160. package/dist/mcp/servers/ripgrep.d.ts.map +1 -0
  161. package/dist/mcp/servers/ripgrep.js +517 -0
  162. package/dist/mcp/servers/ripgrep.js.map +1 -0
  163. package/dist/mcp/servers/shell.d.ts +20 -0
  164. package/dist/mcp/servers/shell.d.ts.map +1 -0
  165. package/dist/mcp/servers/shell.js +603 -0
  166. package/dist/mcp/servers/shell.js.map +1 -0
  167. package/dist/mcp/serversRegistry.d.ts +55 -0
  168. package/dist/mcp/serversRegistry.d.ts.map +1 -0
  169. package/dist/mcp/serversRegistry.js +410 -0
  170. package/dist/mcp/serversRegistry.js.map +1 -0
  171. package/dist/mcp/toolProcessor.d.ts +42 -0
  172. package/dist/mcp/toolProcessor.d.ts.map +1 -0
  173. package/dist/mcp/toolProcessor.js +200 -0
  174. package/dist/mcp/toolProcessor.js.map +1 -0
  175. package/dist/mcp/types.d.ts +29 -0
  176. package/dist/mcp/types.d.ts.map +1 -0
  177. package/dist/mcp/types.js +2 -0
  178. package/dist/mcp/types.js.map +1 -0
  179. package/dist/parser/index.d.ts +72 -0
  180. package/dist/parser/index.d.ts.map +1 -0
  181. package/dist/parser/index.js +967 -0
  182. package/dist/parser/index.js.map +1 -0
  183. package/dist/parser/types.d.ts +153 -0
  184. package/dist/parser/types.d.ts.map +1 -0
  185. package/dist/parser/types.js +6 -0
  186. package/dist/parser/types.js.map +1 -0
  187. package/dist/parser/utils.d.ts +18 -0
  188. package/dist/parser/utils.d.ts.map +1 -0
  189. package/dist/parser/utils.js +64 -0
  190. package/dist/parser/utils.js.map +1 -0
  191. package/dist/sdk/QodoSDK.d.ts +152 -0
  192. package/dist/sdk/QodoSDK.d.ts.map +1 -0
  193. package/dist/sdk/QodoSDK.js +786 -0
  194. package/dist/sdk/QodoSDK.js.map +1 -0
  195. package/dist/sdk/bootstrap.d.ts +16 -0
  196. package/dist/sdk/bootstrap.d.ts.map +1 -0
  197. package/dist/sdk/bootstrap.js +21 -0
  198. package/dist/sdk/bootstrap.js.map +1 -0
  199. package/dist/sdk/builders.d.ts +54 -0
  200. package/dist/sdk/builders.d.ts.map +1 -0
  201. package/dist/sdk/builders.js +117 -0
  202. package/dist/sdk/builders.js.map +1 -0
  203. package/dist/sdk/defaults.d.ts +11 -0
  204. package/dist/sdk/defaults.d.ts.map +1 -0
  205. package/dist/sdk/defaults.js +39 -0
  206. package/dist/sdk/defaults.js.map +1 -0
  207. package/dist/sdk/discovery.d.ts +2 -0
  208. package/dist/sdk/discovery.d.ts.map +1 -0
  209. package/dist/sdk/discovery.js +25 -0
  210. package/dist/sdk/discovery.js.map +1 -0
  211. package/dist/sdk/events.d.ts +168 -0
  212. package/dist/sdk/events.d.ts.map +1 -0
  213. package/dist/sdk/events.js +52 -0
  214. package/dist/sdk/events.js.map +1 -0
  215. package/dist/sdk/index.d.ts +17 -0
  216. package/dist/sdk/index.d.ts.map +1 -0
  217. package/dist/sdk/index.js +17 -0
  218. package/dist/sdk/index.js.map +1 -0
  219. package/dist/sdk/runner/AgentRunner.d.ts +22 -0
  220. package/dist/sdk/runner/AgentRunner.d.ts.map +1 -0
  221. package/dist/sdk/runner/AgentRunner.js +222 -0
  222. package/dist/sdk/runner/AgentRunner.js.map +1 -0
  223. package/dist/sdk/runner/finalize.d.ts +9 -0
  224. package/dist/sdk/runner/finalize.d.ts.map +1 -0
  225. package/dist/sdk/runner/finalize.js +115 -0
  226. package/dist/sdk/runner/finalize.js.map +1 -0
  227. package/dist/sdk/runner/formats.d.ts +7 -0
  228. package/dist/sdk/runner/formats.d.ts.map +1 -0
  229. package/dist/sdk/runner/formats.js +91 -0
  230. package/dist/sdk/runner/formats.js.map +1 -0
  231. package/dist/sdk/runner/index.d.ts +9 -0
  232. package/dist/sdk/runner/index.d.ts.map +1 -0
  233. package/dist/sdk/runner/index.js +9 -0
  234. package/dist/sdk/runner/index.js.map +1 -0
  235. package/dist/sdk/runner/progress.d.ts +3 -0
  236. package/dist/sdk/runner/progress.d.ts.map +1 -0
  237. package/dist/sdk/runner/progress.js +16 -0
  238. package/dist/sdk/runner/progress.js.map +1 -0
  239. package/dist/sdk/schemas.d.ts +50 -0
  240. package/dist/sdk/schemas.d.ts.map +1 -0
  241. package/dist/sdk/schemas.js +145 -0
  242. package/dist/sdk/schemas.js.map +1 -0
  243. package/dist/session/SessionContext.d.ts +86 -0
  244. package/dist/session/SessionContext.d.ts.map +1 -0
  245. package/dist/session/SessionContext.js +395 -0
  246. package/dist/session/SessionContext.js.map +1 -0
  247. package/dist/session/environment.d.ts +42 -0
  248. package/dist/session/environment.d.ts.map +1 -0
  249. package/dist/session/environment.js +27 -0
  250. package/dist/session/environment.js.map +1 -0
  251. package/dist/session/history.d.ts +3 -0
  252. package/dist/session/history.d.ts.map +1 -0
  253. package/dist/session/history.js +67 -0
  254. package/dist/session/history.js.map +1 -0
  255. package/dist/session/index.d.ts +10 -0
  256. package/dist/session/index.d.ts.map +1 -0
  257. package/dist/session/index.js +9 -0
  258. package/dist/session/index.js.map +1 -0
  259. package/dist/session/serverData.d.ts +38 -0
  260. package/dist/session/serverData.d.ts.map +1 -0
  261. package/dist/session/serverData.js +241 -0
  262. package/dist/session/serverData.js.map +1 -0
  263. package/dist/tracking/Tracker.d.ts +55 -0
  264. package/dist/tracking/Tracker.d.ts.map +1 -0
  265. package/dist/tracking/Tracker.js +217 -0
  266. package/dist/tracking/Tracker.js.map +1 -0
  267. package/dist/tracking/index.d.ts +8 -0
  268. package/dist/tracking/index.d.ts.map +1 -0
  269. package/dist/tracking/index.js +8 -0
  270. package/dist/tracking/index.js.map +1 -0
  271. package/dist/tracking/schemas.d.ts +292 -0
  272. package/dist/tracking/schemas.d.ts.map +1 -0
  273. package/dist/tracking/schemas.js +91 -0
  274. package/dist/tracking/schemas.js.map +1 -0
  275. package/dist/types.d.ts +4 -0
  276. package/dist/types.d.ts.map +1 -0
  277. package/dist/types.js +2 -0
  278. package/dist/types.js.map +1 -0
  279. package/dist/utils/extractSetFlags.d.ts +6 -0
  280. package/dist/utils/extractSetFlags.d.ts.map +1 -0
  281. package/dist/utils/extractSetFlags.js +16 -0
  282. package/dist/utils/extractSetFlags.js.map +1 -0
  283. package/dist/utils/formatTimeAgo.d.ts +2 -0
  284. package/dist/utils/formatTimeAgo.d.ts.map +1 -0
  285. package/dist/utils/formatTimeAgo.js +20 -0
  286. package/dist/utils/formatTimeAgo.js.map +1 -0
  287. package/dist/utils/index.d.ts +12 -0
  288. package/dist/utils/index.d.ts.map +1 -0
  289. package/dist/utils/index.js +12 -0
  290. package/dist/utils/index.js.map +1 -0
  291. package/dist/utils/machineId.d.ts +14 -0
  292. package/dist/utils/machineId.d.ts.map +1 -0
  293. package/dist/utils/machineId.js +66 -0
  294. package/dist/utils/machineId.js.map +1 -0
  295. package/dist/utils/pathUtils.d.ts +22 -0
  296. package/dist/utils/pathUtils.d.ts.map +1 -0
  297. package/dist/utils/pathUtils.js +54 -0
  298. package/dist/utils/pathUtils.js.map +1 -0
  299. package/dist/version.d.ts +2 -0
  300. package/dist/version.d.ts.map +1 -0
  301. package/dist/version.js +23 -0
  302. package/dist/version.js.map +1 -0
  303. package/package.json +93 -0
@@ -0,0 +1,616 @@
1
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
2
+ import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
3
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
4
+ import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
5
+ import { CallToolResultSchema, ListToolsResultSchema, } from "@modelcontextprotocol/sdk/types.js";
6
+ import { z } from "zod";
7
+ import { ServerRegistry, serverTypes } from "./serversRegistry.js";
8
+ import { InternalTransport } from "./baseServer.js";
9
+ import { getToolGroup, isUniqueServer, READ_ONLY_TOOLS } from "./approvedTools.js";
10
+ import { getCurrentEnvironment, getGlobalEnvironment } from "../session/index.js";
11
+ const MAX_RETRY_ATTEMPTS = 1;
12
+ const RETRY_DELAY_MS = 1000;
13
+ export class ClientInitializationError extends Error {
14
+ cause;
15
+ constructor(message, cause) {
16
+ super(message);
17
+ this.cause = cause;
18
+ this.name = "ClientInitializationError";
19
+ }
20
+ }
21
+ const qodoTools = ["qodo_structured_read_files"];
22
+ export class MCPManager {
23
+ // NOTE: The static instance is kept for backward compatibility, but
24
+ // environment-scoped instances are preferred for in-process SDK usage
25
+ // where multiple logical clients may coexist.
26
+ static instance;
27
+ clients = new Map();
28
+ tools = new Map();
29
+ connectionStates = new Map();
30
+ autoApprovedTools = new Map();
31
+ autoApprovedToolGroups;
32
+ autoApproveAllTools = false;
33
+ retryTimeouts = new Map();
34
+ serverRegistry;
35
+ progressToken = 0;
36
+ // Store command-specific approvals for shell tool: Map<command, approved>
37
+ autoApprovedShellCommands = new Map();
38
+ // Return current auto-approval snapshot (for IPC inheritance into sub-agents)
39
+ getAutoApprovedSnapshot() {
40
+ const tools = [];
41
+ for (const [clientId, toolMap] of this.autoApprovedTools.entries()) {
42
+ for (const [toolName, approved] of toolMap.entries()) {
43
+ if (approved)
44
+ tools.push({ clientId, toolName });
45
+ }
46
+ }
47
+ const shellCommands = Array.from(this.autoApprovedShellCommands.keys());
48
+ return { all: this.autoApproveAllTools === true, tools, shellCommands };
49
+ }
50
+ constructor(serverRegistry) {
51
+ this.serverRegistry = serverRegistry ?? ServerRegistry.getInstance();
52
+ this.autoApprovedToolGroups = [READ_ONLY_TOOLS];
53
+ }
54
+ static async init(force) {
55
+ const env = getCurrentEnvironment();
56
+ const globalEnv = getGlobalEnvironment();
57
+ // For non-global environments (e.g. in-process SDK clients), maintain an
58
+ // independent MCPManager instance per environment so that each QodoClient
59
+ // can have its own MCP connections and tool inventory.
60
+ if (env !== globalEnv) {
61
+ let instance = env.mcpManager;
62
+ if (!instance || force) {
63
+ const registry = ServerRegistry.getInstance();
64
+ instance = new MCPManager(registry);
65
+ env.mcpManager = instance;
66
+ }
67
+ await instance.initializeServers();
68
+ return instance;
69
+ }
70
+ // Global (CLI/webapp) path: preserve legacy singleton behavior
71
+ if (!MCPManager.instance || force) {
72
+ const registry = ServerRegistry.getInstance();
73
+ MCPManager.instance = new MCPManager(registry);
74
+ if (!globalEnv.mcpManager) {
75
+ globalEnv.mcpManager = MCPManager.instance;
76
+ }
77
+ }
78
+ await MCPManager.instance.initializeServers();
79
+ return MCPManager.instance;
80
+ }
81
+ static getInstance() {
82
+ const env = getCurrentEnvironment();
83
+ const globalEnv = getGlobalEnvironment();
84
+ if (env !== globalEnv) {
85
+ const instance = env.mcpManager;
86
+ if (!instance) {
87
+ throw new Error("MCPManager not initialized for this environment. Call MCPManager.init() first");
88
+ }
89
+ return instance;
90
+ }
91
+ if (!MCPManager.instance) {
92
+ throw new Error("MCPManager not initialized. Call MCPManager.init() first");
93
+ }
94
+ return MCPManager.instance;
95
+ }
96
+ getValidatedDirectories() {
97
+ return this.serverRegistry.getValidatedDirectories();
98
+ }
99
+ async initializeServers() {
100
+ await this.serverRegistry.loadAllServers();
101
+ let servers = this.serverRegistry.getAllServers();
102
+ const promises = servers.map((server) => this.initializeServerWithRetry(server));
103
+ await Promise.allSettled(promises);
104
+ }
105
+ async initializeServerWithRetry(config, attempt = 1) {
106
+ this.clearRetryTimeout(config.id);
107
+ this.connectionStates.set(config.id, { status: "connecting" });
108
+ try {
109
+ const client = await this.initializeServer(config);
110
+ this.connectionStates.set(config.id, { status: "connected" });
111
+ return client;
112
+ }
113
+ catch (error) {
114
+ const errorMessage = this.formatErrorMessage(error);
115
+ if (attempt < MAX_RETRY_ATTEMPTS) {
116
+ this.connectionStates.set(config.id, {
117
+ status: "failed",
118
+ errorMessage: `Retry ${attempt}/${MAX_RETRY_ATTEMPTS}: ${errorMessage}`,
119
+ });
120
+ return new Promise((resolve, reject) => {
121
+ const timeout = setTimeout(() => {
122
+ this.initializeServerWithRetry(config, attempt + 1)
123
+ .then(resolve)
124
+ .catch(reject);
125
+ }, RETRY_DELAY_MS * attempt);
126
+ this.retryTimeouts.set(config.id, timeout);
127
+ });
128
+ }
129
+ this.connectionStates.set(config.id, {
130
+ status: "failed",
131
+ errorMessage: errorMessage,
132
+ });
133
+ throw error;
134
+ }
135
+ }
136
+ async checkRemoteConnectionSupportsNewTransport(serverId, transporter) {
137
+ const client = new Client({
138
+ name: `mcp-${serverId}`,
139
+ version: "1.0.0",
140
+ }, {
141
+ capabilities: {},
142
+ });
143
+ try {
144
+ await client.connect(transporter);
145
+ await client.close();
146
+ }
147
+ catch (e) {
148
+ return false;
149
+ }
150
+ return true;
151
+ }
152
+ /**
153
+ * Process headers and replace environment variable placeholders with actual values.
154
+ * Supports patterns like ${ENV_VAR_NAME} or $ENV_VAR_NAME in header values.
155
+ * @param headers - The headers object to process
156
+ * @returns Processed headers with environment variables substituted
157
+ */
158
+ processHeadersWithEnvVars(headers) {
159
+ if (!headers) {
160
+ return headers;
161
+ }
162
+ const processedHeaders = {};
163
+ for (const [key, value] of Object.entries(headers)) {
164
+ // Replace ${ENV_VAR} and $ENV_VAR patterns with environment variable values
165
+ let processedValue = value;
166
+ // Handle ${ENV_VAR} pattern
167
+ processedValue = processedValue.replace(/\$\{([^}]+)\}/g, (match, envVarName) => {
168
+ const envValue = process.env[envVarName];
169
+ if (envValue === undefined) {
170
+ console.warn(`Environment variable '${envVarName}' not found, keeping original value: ${match}`);
171
+ return match;
172
+ }
173
+ return envValue;
174
+ });
175
+ // Handle $ENV_VAR pattern (word boundary to avoid partial matches)
176
+ processedValue = processedValue.replace(/\$([A-Za-z_][A-Za-z0-9_]*)\b/g, (match, envVarName) => {
177
+ const envValue = process.env[envVarName];
178
+ if (envValue === undefined) {
179
+ console.warn(`Environment variable '${envVarName}' not found, keeping original value: ${match}`);
180
+ return match;
181
+ }
182
+ return envValue;
183
+ });
184
+ processedHeaders[key] = processedValue;
185
+ }
186
+ return processedHeaders;
187
+ }
188
+ /**
189
+ * Process args array and replace environment variable placeholders with actual values.
190
+ * Supports patterns like ${ENV_VAR_NAME} or $ENV_VAR_NAME in argument values.
191
+ * @param args - The args array to process
192
+ * @returns Processed args with environment variables substituted
193
+ */
194
+ processArgsWithEnvVars(args) {
195
+ if (!args) {
196
+ return [];
197
+ }
198
+ return args.map(arg => {
199
+ // Replace ${ENV_VAR} and $ENV_VAR patterns with environment variable values
200
+ let processedArg = arg;
201
+ // Handle ${ENV_VAR} pattern
202
+ processedArg = processedArg.replace(/\$\{([^}]+)\}/g, (match, envVarName) => {
203
+ const envValue = process.env[envVarName];
204
+ if (envValue === undefined) {
205
+ console.warn(`Environment variable '${envVarName}' not found, keeping original value: ${match}`);
206
+ return match;
207
+ }
208
+ return envValue;
209
+ });
210
+ // Handle $ENV_VAR pattern (word boundary to avoid partial matches)
211
+ processedArg = processedArg.replace(/\$([A-Za-z_][A-Za-z0-9_]*)\b/g, (match, envVarName) => {
212
+ const envValue = process.env[envVarName];
213
+ if (envValue === undefined) {
214
+ console.warn(`Environment variable '${envVarName}' not found, keeping original value: ${match}`);
215
+ return match;
216
+ }
217
+ return envValue;
218
+ });
219
+ return processedArg;
220
+ });
221
+ }
222
+ async initializeTransport(config) {
223
+ const args = config.getArgs ? await config.getArgs() : [];
224
+ const processedArgs = this.processArgsWithEnvVars(args);
225
+ const env = config.getEnv ? await config.getEnv() : {};
226
+ if (config.type !== serverTypes.CUSTOM) {
227
+ if (!config.serverClass) {
228
+ throw new Error("Server class not provided");
229
+ }
230
+ return new InternalTransport(config.serverClass);
231
+ }
232
+ if (config.command) {
233
+ return new StdioClientTransport({
234
+ command: config.command,
235
+ args: processedArgs,
236
+ // @ts-ignore
237
+ env: {
238
+ ...process.env, // Include current environment
239
+ ...env, // Override with configured environment variables
240
+ },
241
+ stderr: "ignore"
242
+ });
243
+ }
244
+ if (config.url) {
245
+ const headers = this.processHeadersWithEnvVars(config.headers);
246
+ const eventSourceInit = headers ? {
247
+ fetch: async (url, init) => {
248
+ return fetch(url, {
249
+ ...init,
250
+ headers: {
251
+ ...init?.headers,
252
+ ...headers,
253
+ },
254
+ });
255
+ },
256
+ } : undefined;
257
+ const requestInit = headers ? { headers } : undefined;
258
+ const isSupportsNewTransport = await this.checkRemoteConnectionSupportsNewTransport(config.id, new StreamableHTTPClientTransport(new URL(config.url), { requestInit }));
259
+ return isSupportsNewTransport
260
+ ? new StreamableHTTPClientTransport(new URL(config.url), { requestInit })
261
+ : new SSEClientTransport(new URL(config.url), { requestInit, eventSourceInit });
262
+ }
263
+ throw new Error(`Invalid server configuration for ${config.id}`);
264
+ }
265
+ async initializeServer(config) {
266
+ if (this.clients.has(config.id)) {
267
+ await this.stopServer(config.id);
268
+ }
269
+ try {
270
+ if (config.type !== serverTypes.CUSTOM) {
271
+ if (!config.serverClass) {
272
+ throw new Error("Server class not provided");
273
+ }
274
+ }
275
+ const transport = await this.initializeTransport(config);
276
+ const client = new Client({
277
+ name: `mcp-${config.id}`,
278
+ version: "1.0.0",
279
+ }, {
280
+ capabilities: {},
281
+ });
282
+ try {
283
+ await client.connect(transport);
284
+ }
285
+ catch (e) {
286
+ // @ts-ignore
287
+ console.error(`Failed to connect to server ${config.id}:`, e.toString());
288
+ }
289
+ this.clients.set(config.id, client);
290
+ try {
291
+ const toolsResult = await this.listTools(config.id);
292
+ if (toolsResult?.tools.length === 0) {
293
+ throw new Error(`No tools found for server ${config.id}`);
294
+ }
295
+ // @ts-ignore
296
+ this.tools.set(config.id, toolsResult.tools);
297
+ }
298
+ catch (error) {
299
+ this.clients.delete(config.id);
300
+ throw error;
301
+ }
302
+ return client;
303
+ }
304
+ catch (error) {
305
+ throw new ClientInitializationError(`Failed to initialize client ${config.id}`, error instanceof Error ? error : undefined);
306
+ }
307
+ }
308
+ clearRetryTimeout(serverId) {
309
+ const timeout = this.retryTimeouts.get(serverId);
310
+ if (timeout) {
311
+ clearTimeout(timeout);
312
+ this.retryTimeouts.delete(serverId);
313
+ }
314
+ }
315
+ async dispose() {
316
+ // Close all clients and clear state
317
+ try {
318
+ for (const [id, client] of Array.from(this.clients.entries())) {
319
+ try {
320
+ await client.close();
321
+ }
322
+ catch { }
323
+ this.clients.delete(id);
324
+ this.tools.delete(id);
325
+ this.connectionStates.delete(id);
326
+ }
327
+ }
328
+ catch { }
329
+ // Clear any retry timers
330
+ for (const [id] of Array.from(this.retryTimeouts.entries())) {
331
+ this.clearRetryTimeout(id);
332
+ }
333
+ this.autoApprovedTools.clear();
334
+ this.autoApprovedShellCommands.clear();
335
+ }
336
+ async stopServer(serverId) {
337
+ this.clearRetryTimeout(serverId);
338
+ await this.disposeClient(serverId);
339
+ this.connectionStates.delete(serverId);
340
+ }
341
+ // Existing public methods with enhanced error handling
342
+ getAllTools() {
343
+ return this.tools;
344
+ }
345
+ getEnabledTools(availableTools, ignoreTools) {
346
+ const allTools = this.getAllTools();
347
+ const selections = new Map();
348
+ // Build selection map from availableTools (server or server.tool)
349
+ if (Array.isArray(availableTools) && availableTools.length > 0) {
350
+ for (const entry of availableTools) {
351
+ if (!entry || typeof entry !== 'string')
352
+ continue;
353
+ const [serverNameRaw, toolNameRaw] = entry.split('.');
354
+ const serverName = (serverNameRaw || '').trim();
355
+ const toolName = (toolNameRaw || '').trim();
356
+ if (!serverName)
357
+ continue;
358
+ if (!selections.has(serverName)) {
359
+ selections.set(serverName, { all: false, toolNames: new Set() });
360
+ }
361
+ const sel = selections.get(serverName);
362
+ // If specific tool provided, add it; otherwise mark server as "all tools"
363
+ if (toolName) {
364
+ sel.toolNames.add(toolName);
365
+ }
366
+ else {
367
+ sel.all = true;
368
+ }
369
+ }
370
+ }
371
+ const enabledTools = new Map();
372
+ // If no selections provided, enable all tools for all servers
373
+ if (selections.size === 0) {
374
+ for (const [serverName, tools] of allTools.entries()) {
375
+ enabledTools.set(serverName, tools);
376
+ }
377
+ }
378
+ else {
379
+ // Otherwise, filter per server according to selections
380
+ for (const [serverName, tools] of allTools.entries()) {
381
+ const sel = selections.get(serverName);
382
+ if (!sel) {
383
+ // Server not explicitly selected — skip it
384
+ continue;
385
+ }
386
+ if (sel.all || sel.toolNames.size === 0) {
387
+ // Server selected without specific tools means all tools from this server
388
+ enabledTools.set(serverName, tools);
389
+ }
390
+ else {
391
+ // Filter tools to the specified set
392
+ const filtered = tools.filter((t) => sel.toolNames.has(t.name));
393
+ enabledTools.set(serverName, filtered);
394
+ }
395
+ }
396
+ }
397
+ // Apply ignore filters if provided
398
+ if (Array.isArray(ignoreTools) && ignoreTools.length > 0) {
399
+ const ignoreMap = new Map();
400
+ for (const entry of ignoreTools) {
401
+ if (!entry || typeof entry !== 'string')
402
+ continue;
403
+ const [srvRaw, toolRaw] = entry.split('.');
404
+ const serverName = (srvRaw || '').trim();
405
+ const toolName = (toolRaw || '').trim();
406
+ if (!serverName)
407
+ continue;
408
+ if (!ignoreMap.has(serverName)) {
409
+ ignoreMap.set(serverName, { all: false, toolNames: new Set() });
410
+ }
411
+ const ig = ignoreMap.get(serverName);
412
+ if (toolName)
413
+ ig.toolNames.add(toolName);
414
+ else
415
+ ig.all = true;
416
+ }
417
+ for (const [serverName, tools] of Array.from(enabledTools.entries())) {
418
+ const ig = ignoreMap.get(serverName);
419
+ if (!ig)
420
+ continue;
421
+ if (ig.all) {
422
+ enabledTools.delete(serverName);
423
+ }
424
+ else if (ig.toolNames.size > 0) {
425
+ const filtered = tools.filter(t => !ig.toolNames.has(t.name));
426
+ if (filtered.length > 0) {
427
+ enabledTools.set(serverName, filtered);
428
+ }
429
+ else {
430
+ enabledTools.delete(serverName);
431
+ }
432
+ }
433
+ }
434
+ }
435
+ return enabledTools;
436
+ }
437
+ getTools(clientId) {
438
+ return [...(this.getAllTools().get(clientId) || [])];
439
+ }
440
+ getTool(clientId, toolName) {
441
+ return this.getAllTools()
442
+ .get(clientId)
443
+ ?.find((tool) => tool.name === toolName);
444
+ }
445
+ getConnectionStates() {
446
+ return new Map(this.connectionStates);
447
+ }
448
+ setAutoApprovedAllTools() {
449
+ this.autoApproveAllTools = true;
450
+ }
451
+ setAutoApprovedTool(clientId, toolName) {
452
+ if (!this.autoApprovedTools.has(clientId)) {
453
+ this.autoApprovedTools.set(clientId, new Map());
454
+ }
455
+ const autoApproved = this.autoApprovedTools.get(clientId);
456
+ if (autoApproved) {
457
+ autoApproved.set(toolName, true);
458
+ }
459
+ else {
460
+ throw new Error(`Client ${clientId} not found`);
461
+ }
462
+ }
463
+ setAutoApprovedShellCommand(command) {
464
+ this.autoApprovedShellCommands.set(command, true);
465
+ }
466
+ // Apply auto-approval snapshot (used by sub-agent subprocesses via IPC)
467
+ applyApprovalSnapshot(snapshot) {
468
+ try {
469
+ if (snapshot.all) {
470
+ this.setAutoApprovedAllTools();
471
+ }
472
+ if (Array.isArray(snapshot.tools)) {
473
+ for (const entry of snapshot.tools) {
474
+ if (entry?.clientId && entry?.toolName) {
475
+ this.setAutoApprovedTool(entry.clientId, entry.toolName);
476
+ }
477
+ }
478
+ }
479
+ if (Array.isArray(snapshot.shellCommands)) {
480
+ for (const cmd of snapshot.shellCommands) {
481
+ if (typeof cmd === 'string' && cmd.length > 0)
482
+ this.setAutoApprovedShellCommand(cmd);
483
+ }
484
+ }
485
+ }
486
+ catch (e) {
487
+ // Best-effort: do not throw from snapshot application
488
+ console.debug('[MCPManager] Failed to apply approval snapshot:', e instanceof Error ? e.message : String(e));
489
+ }
490
+ }
491
+ isAutoApprovedTool(clientId, toolName, args) {
492
+ if (this.autoApproveAllTools) {
493
+ return true;
494
+ }
495
+ if (this.serverRegistry.getServer(clientId)?.type === serverTypes.BACKEND || clientId === "sequential_thinking" || clientId === "reviewer_notes") {
496
+ return true;
497
+ }
498
+ // Auto-approve Gerrit tools to prevent hanging in webhook context
499
+ if (clientId === 'gerrit' && (toolName === 'gerrit_diff_files' || toolName === 'gerrit_comment')) {
500
+ return true;
501
+ }
502
+ // Check shell command-specific approval
503
+ if (clientId === 'shell' && toolName === 'shell_execute' && args?.command) {
504
+ const command = args.command;
505
+ if (this.autoApprovedShellCommands.has(command)) {
506
+ return true;
507
+ }
508
+ }
509
+ // Check individual tool approval first
510
+ const autoApproved = this.autoApprovedTools.get(clientId);
511
+ if (autoApproved && autoApproved.has(toolName)) {
512
+ return true;
513
+ }
514
+ // For Unique servers, check group approval
515
+ if (isUniqueServer(clientId)) {
516
+ const toolGroup = getToolGroup(toolName);
517
+ if (toolGroup && this.autoApprovedToolGroups.includes(toolGroup)) {
518
+ return true;
519
+ }
520
+ }
521
+ // Check argument-based approval for built-in servers
522
+ if (args && this.serverRegistry.getServer(clientId)?.type === serverTypes.BUILTIN) {
523
+ const builtInServer = this.serverRegistry.getBuiltInServer(clientId);
524
+ if (builtInServer && builtInServer.isToolAutoApprovedForArgs) {
525
+ return builtInServer.isToolAutoApprovedForArgs(toolName, args);
526
+ }
527
+ }
528
+ return false;
529
+ }
530
+ async listTools(clientId) {
531
+ const client = this.clients.get(clientId);
532
+ if (!client) {
533
+ throw new Error(`Client ${clientId} not found`);
534
+ }
535
+ return await client.request({ method: "tools/list" }, ListToolsResultSchema);
536
+ }
537
+ async callTool(clientId, name, args) {
538
+ const server = this.serverRegistry.getServer(clientId);
539
+ if (server?.type === serverTypes.BACKEND || clientId === "sequential_thinking" || clientId == "reviewer_notes") {
540
+ return undefined;
541
+ }
542
+ const client = this.clients.get(clientId);
543
+ if (!client) {
544
+ console.debug(`[MCPManager] Error: Client ${clientId} not found`);
545
+ throw new Error(`Client ${clientId} not found`);
546
+ }
547
+ if (!qodoTools.includes(name)) {
548
+ const tool = this.getTool(clientId, name);
549
+ if (!tool) {
550
+ throw new Error(`Tool ${name} not found for client ${clientId}`);
551
+ }
552
+ }
553
+ try {
554
+ this.progressToken += 1;
555
+ return await client.request({
556
+ method: "tools/call",
557
+ params: {
558
+ name,
559
+ arguments: args,
560
+ _meta: {
561
+ progressToken: `qodo-mcp-progress-token-${this.progressToken}`,
562
+ },
563
+ },
564
+ }, name.startsWith("qodo") ? z.any() : CallToolResultSchema, {
565
+ onprogress: (progress) => {
566
+ console.debug(`[MCPManager] ${clientId} progress: ${JSON.stringify(progress)}`);
567
+ },
568
+ timeout: 200000,
569
+ resetTimeoutOnProgress: true,
570
+ });
571
+ }
572
+ catch (error) {
573
+ console.debug(`[MCPManager] Tool call error for ${clientId}.${name}: ${error}`);
574
+ return {
575
+ content: [{ type: "text", text: error instanceof Error ? error.message : String(error) }],
576
+ isError: true,
577
+ };
578
+ }
579
+ }
580
+ async disposeClient(clientId) {
581
+ const client = this.clients.get(clientId);
582
+ if (client) {
583
+ try {
584
+ await client.close();
585
+ }
586
+ finally {
587
+ this.clients.delete(clientId);
588
+ this.tools.delete(clientId);
589
+ }
590
+ }
591
+ }
592
+ formatErrorMessage(error) {
593
+ if (error instanceof Error) {
594
+ // Common error patterns and their user-friendly messages
595
+ if (error.message.includes('ENOENT')) {
596
+ return 'Server executable not found. Please check the server path in your configuration.';
597
+ }
598
+ if (error.message.includes('ECONNREFUSED')) {
599
+ return 'Connection refused. The server may not be running or accessible.';
600
+ }
601
+ if (error.message.includes('ETIMEDOUT')) {
602
+ return 'Connection timed out. The server took too long to respond.';
603
+ }
604
+ if (error.message.includes('spawn')) {
605
+ return 'Failed to start the server process. Check if the command is valid.';
606
+ }
607
+ if (error.message.includes('permission denied') || error.message.includes('EACCES')) {
608
+ return 'Permission denied. Check file permissions for the server executable.';
609
+ }
610
+ // Return the first line of the error message for other cases
611
+ return error.message.split('\n')[0];
612
+ }
613
+ return String(error);
614
+ }
615
+ }
616
+ //# sourceMappingURL=MCPManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MCPManager.js","sourceRoot":"","sources":["../../src/mcp/MCPManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const READ_ONLY_TOOLS = "read_only_tools";
2
+ export declare function getToolGroup(toolName: string): string | void;
3
+ export declare function isUniqueServer(serverId: string): boolean;
4
+ //# sourceMappingURL=approvedTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approvedTools.d.ts","sourceRoot":"","sources":["../../src/mcp/approvedTools.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,eAAe,oBAAoB,CAAA;AAEhD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKxD"}