indusagi 0.12.13 → 0.12.16

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 (344) hide show
  1. package/dist/agent/agent-session.d.ts +352 -0
  2. package/dist/agent/agent-session.d.ts.map +1 -0
  3. package/dist/agent/agent-session.js +870 -0
  4. package/dist/agent/agent-session.js.map +1 -0
  5. package/dist/agent/agent-session.test.d.ts +5 -0
  6. package/dist/agent/agent-session.test.d.ts.map +1 -0
  7. package/dist/agent/agent-session.test.js +129 -0
  8. package/dist/agent/agent-session.test.js.map +1 -0
  9. package/dist/agent/agent.d.ts +108 -2
  10. package/dist/agent/agent.d.ts.map +1 -1
  11. package/dist/agent/agent.js +210 -17
  12. package/dist/agent/agent.js.map +1 -1
  13. package/dist/agent/bash-executor.d.ts +33 -0
  14. package/dist/agent/bash-executor.d.ts.map +1 -0
  15. package/dist/agent/bash-executor.js +197 -0
  16. package/dist/agent/bash-executor.js.map +1 -0
  17. package/dist/agent/compaction/compaction.d.ts +87 -0
  18. package/dist/agent/compaction/compaction.d.ts.map +1 -0
  19. package/dist/agent/compaction/compaction.js +598 -0
  20. package/dist/agent/compaction/compaction.js.map +1 -0
  21. package/dist/agent/compaction/index.d.ts +6 -0
  22. package/dist/agent/compaction/index.d.ts.map +1 -0
  23. package/dist/agent/compaction/index.js +6 -0
  24. package/dist/agent/compaction/index.js.map +1 -0
  25. package/dist/agent/compaction/utils.d.ts +41 -0
  26. package/dist/agent/compaction/utils.d.ts.map +1 -0
  27. package/dist/agent/compaction/utils.js +240 -0
  28. package/dist/agent/compaction/utils.js.map +1 -0
  29. package/dist/agent/event-bus.js +1 -3
  30. package/dist/agent/event-bus.js.map +1 -1
  31. package/dist/agent/index.d.ts +11 -5
  32. package/dist/agent/index.d.ts.map +1 -1
  33. package/dist/agent/index.js +19 -8
  34. package/dist/agent/index.js.map +1 -1
  35. package/dist/agent/messages.d.ts +2 -48
  36. package/dist/agent/messages.d.ts.map +1 -1
  37. package/dist/agent/messages.js.map +1 -1
  38. package/dist/agent/proxy.js.map +1 -1
  39. package/dist/agent/session-manager.d.ts +2 -3
  40. package/dist/agent/session-manager.d.ts.map +1 -1
  41. package/dist/agent/session-manager.js +10 -6
  42. package/dist/agent/session-manager.js.map +1 -1
  43. package/dist/agent/settings-manager.d.ts +204 -0
  44. package/dist/agent/settings-manager.d.ts.map +1 -0
  45. package/dist/agent/settings-manager.js +594 -0
  46. package/dist/agent/settings-manager.js.map +1 -0
  47. package/dist/agent/state-manager.js +1 -0
  48. package/dist/agent/state-manager.js.map +1 -1
  49. package/dist/agent/telemetry.js +1 -3
  50. package/dist/agent/telemetry.js.map +1 -1
  51. package/dist/agent/tools/bash.js +1 -0
  52. package/dist/agent/tools/bash.js.map +1 -1
  53. package/dist/agent/tools/edit.test.d.ts +6 -0
  54. package/dist/agent/tools/edit.test.d.ts.map +1 -0
  55. package/dist/agent/tools/edit.test.js +196 -0
  56. package/dist/agent/tools/edit.test.js.map +1 -0
  57. package/dist/agent/tools/index.d.ts +26 -26
  58. package/dist/agent/tools/registry.d.ts +1 -1
  59. package/dist/agent/tools/registry.d.ts.map +1 -1
  60. package/dist/agent/tools/registry.js +2 -4
  61. package/dist/agent/tools/registry.js.map +1 -1
  62. package/dist/agent/tools/todo-store.js +2 -1
  63. package/dist/agent/tools/todo-store.js.map +1 -1
  64. package/dist/agent/tools/utils/hook-runner.js +1 -3
  65. package/dist/agent/tools/utils/hook-runner.js.map +1 -1
  66. package/dist/agent/types.d.ts +139 -1
  67. package/dist/agent/types.d.ts.map +1 -1
  68. package/dist/agent/types.js.map +1 -1
  69. package/dist/ai/api-registry.js +1 -3
  70. package/dist/ai/api-registry.js.map +1 -1
  71. package/dist/ai/models.generated.d.ts +621 -53
  72. package/dist/ai/models.generated.d.ts.map +1 -1
  73. package/dist/ai/models.generated.js +548 -0
  74. package/dist/ai/models.generated.js.map +1 -1
  75. package/dist/ai/models.js +1 -0
  76. package/dist/ai/models.js.map +1 -1
  77. package/dist/ai/providers/amazon-bedrock.d.ts +6 -0
  78. package/dist/ai/providers/amazon-bedrock.d.ts.map +1 -1
  79. package/dist/ai/providers/amazon-bedrock.js +47 -9
  80. package/dist/ai/providers/amazon-bedrock.js.map +1 -1
  81. package/dist/ai/providers/anthropic.d.ts +8 -0
  82. package/dist/ai/providers/anthropic.d.ts.map +1 -1
  83. package/dist/ai/providers/anthropic.js +28 -12
  84. package/dist/ai/providers/anthropic.js.map +1 -1
  85. package/dist/ai/providers/azure-openai-responses.js +1 -0
  86. package/dist/ai/providers/azure-openai-responses.js.map +1 -1
  87. package/dist/ai/providers/github-copilot-headers.d.ts +33 -0
  88. package/dist/ai/providers/github-copilot-headers.d.ts.map +1 -0
  89. package/dist/ai/providers/github-copilot-headers.js +51 -0
  90. package/dist/ai/providers/github-copilot-headers.js.map +1 -0
  91. package/dist/ai/providers/google-shared.d.ts.map +1 -1
  92. package/dist/ai/providers/google-shared.js +16 -22
  93. package/dist/ai/providers/google-shared.js.map +1 -1
  94. package/dist/ai/providers/google-vertex.d.ts.map +1 -1
  95. package/dist/ai/providers/google-vertex.js +28 -5
  96. package/dist/ai/providers/google-vertex.js.map +1 -1
  97. package/dist/ai/providers/google.js +1 -0
  98. package/dist/ai/providers/google.js.map +1 -1
  99. package/dist/ai/providers/kimi.js +1 -0
  100. package/dist/ai/providers/kimi.js.map +1 -1
  101. package/dist/ai/providers/mistral.d.ts +22 -0
  102. package/dist/ai/providers/mistral.d.ts.map +1 -0
  103. package/dist/ai/providers/mistral.js +497 -0
  104. package/dist/ai/providers/mistral.js.map +1 -0
  105. package/dist/ai/providers/openai-codex-responses.js +1 -0
  106. package/dist/ai/providers/openai-codex-responses.js.map +1 -1
  107. package/dist/ai/providers/openai-completions.js +2 -0
  108. package/dist/ai/providers/openai-completions.js.map +1 -1
  109. package/dist/ai/providers/openai-responses.d.ts.map +1 -1
  110. package/dist/ai/providers/openai-responses.js +30 -0
  111. package/dist/ai/providers/openai-responses.js.map +1 -1
  112. package/dist/ai/providers/register-builtins.d.ts.map +1 -1
  113. package/dist/ai/providers/register-builtins.js +6 -0
  114. package/dist/ai/providers/register-builtins.js.map +1 -1
  115. package/dist/ai/providers/simple-options.js +2 -0
  116. package/dist/ai/providers/simple-options.js.map +1 -1
  117. package/dist/ai/providers/transform-messages.js +3 -9
  118. package/dist/ai/providers/transform-messages.js.map +1 -1
  119. package/dist/ai/stream.js +1 -3
  120. package/dist/ai/stream.js.map +1 -1
  121. package/dist/ai/types.d.ts +34 -0
  122. package/dist/ai/types.d.ts.map +1 -1
  123. package/dist/ai/types.js.map +1 -1
  124. package/dist/ai/utils/base-stream-handler.js +1 -0
  125. package/dist/ai/utils/base-stream-handler.js.map +1 -1
  126. package/dist/ai/utils/event-stream.js +9 -4
  127. package/dist/ai/utils/event-stream.js.map +1 -1
  128. package/dist/ai/utils/hash.d.ts +6 -0
  129. package/dist/ai/utils/hash.d.ts.map +1 -0
  130. package/dist/ai/utils/hash.js +17 -0
  131. package/dist/ai/utils/hash.js.map +1 -0
  132. package/dist/ai/utils/index.d.ts +1 -0
  133. package/dist/ai/utils/index.d.ts.map +1 -1
  134. package/dist/ai/utils/index.js +1 -0
  135. package/dist/ai/utils/index.js.map +1 -1
  136. package/dist/ai/utils/oauth/github-copilot.d.ts.map +1 -1
  137. package/dist/ai/utils/oauth/github-copilot.js +19 -8
  138. package/dist/ai/utils/oauth/github-copilot.js.map +1 -1
  139. package/dist/ai/utils/overflow.d.ts.map +1 -1
  140. package/dist/ai/utils/overflow.js +4 -0
  141. package/dist/ai/utils/overflow.js.map +1 -1
  142. package/dist/ai/utils/provider-adapter.js +9 -0
  143. package/dist/ai/utils/provider-adapter.js.map +1 -1
  144. package/dist/ai/utils/provider-client-builder.js +1 -1
  145. package/dist/ai/utils/provider-client-builder.js.map +1 -1
  146. package/dist/ai/utils/provider-errors.js +2 -0
  147. package/dist/ai/utils/provider-errors.js.map +1 -1
  148. package/dist/ai/utils/stream-event-helper.js +3 -0
  149. package/dist/ai/utils/stream-event-helper.js.map +1 -1
  150. package/dist/ai/utils/stream-handler-types.js +5 -0
  151. package/dist/ai/utils/stream-handler-types.js.map +1 -1
  152. package/dist/ai/utils/streaming-state-manager.js +4 -2
  153. package/dist/ai/utils/streaming-state-manager.js.map +1 -1
  154. package/dist/index.d.ts +1 -0
  155. package/dist/index.d.ts.map +1 -1
  156. package/dist/index.js +1 -0
  157. package/dist/index.js.map +1 -1
  158. package/dist/mcp/client-pool.d.ts +106 -0
  159. package/dist/mcp/client-pool.d.ts.map +1 -0
  160. package/dist/mcp/client-pool.js +234 -0
  161. package/dist/mcp/client-pool.js.map +1 -0
  162. package/dist/mcp/client.d.ts +158 -0
  163. package/dist/mcp/client.d.ts.map +1 -0
  164. package/dist/mcp/client.js +599 -0
  165. package/dist/mcp/client.js.map +1 -0
  166. package/dist/mcp/config.d.ts +61 -0
  167. package/dist/mcp/config.d.ts.map +1 -0
  168. package/dist/mcp/config.js +250 -0
  169. package/dist/mcp/config.js.map +1 -0
  170. package/dist/mcp/errors.d.ts +104 -0
  171. package/dist/mcp/errors.d.ts.map +1 -0
  172. package/dist/mcp/errors.js +146 -0
  173. package/dist/mcp/errors.js.map +1 -0
  174. package/dist/mcp/index.d.ts +56 -0
  175. package/dist/mcp/index.d.ts.map +1 -0
  176. package/dist/mcp/index.js +83 -0
  177. package/dist/mcp/index.js.map +1 -0
  178. package/dist/mcp/schema-converter.d.ts +68 -0
  179. package/dist/mcp/schema-converter.d.ts.map +1 -0
  180. package/dist/mcp/schema-converter.js +230 -0
  181. package/dist/mcp/schema-converter.js.map +1 -0
  182. package/dist/mcp/server.d.ts +111 -0
  183. package/dist/mcp/server.d.ts.map +1 -0
  184. package/dist/mcp/server.js +305 -0
  185. package/dist/mcp/server.js.map +1 -0
  186. package/dist/mcp/tool-factory.d.ts +63 -0
  187. package/dist/mcp/tool-factory.d.ts.map +1 -0
  188. package/dist/mcp/tool-factory.js +228 -0
  189. package/dist/mcp/tool-factory.js.map +1 -0
  190. package/dist/mcp/types.d.ts +289 -0
  191. package/dist/mcp/types.d.ts.map +1 -0
  192. package/dist/mcp/types.js +8 -0
  193. package/dist/mcp/types.js.map +1 -0
  194. package/dist/mcp.d.ts +6 -0
  195. package/dist/mcp.d.ts.map +1 -0
  196. package/dist/mcp.js +6 -0
  197. package/dist/mcp.js.map +1 -0
  198. package/dist/memory/embedder/base.d.ts +41 -0
  199. package/dist/memory/embedder/base.d.ts.map +1 -0
  200. package/dist/memory/embedder/base.js +10 -0
  201. package/dist/memory/embedder/base.js.map +1 -0
  202. package/dist/memory/embedder/index.d.ts +8 -0
  203. package/dist/memory/embedder/index.d.ts.map +1 -0
  204. package/dist/memory/embedder/index.js +6 -0
  205. package/dist/memory/embedder/index.js.map +1 -0
  206. package/dist/memory/embedder/openai.d.ts +35 -0
  207. package/dist/memory/embedder/openai.d.ts.map +1 -0
  208. package/dist/memory/embedder/openai.js +109 -0
  209. package/dist/memory/embedder/openai.js.map +1 -0
  210. package/dist/memory/index.d.ts +33 -0
  211. package/dist/memory/index.d.ts.map +1 -0
  212. package/dist/memory/index.js +31 -0
  213. package/dist/memory/index.js.map +1 -0
  214. package/dist/memory/memory.d.ts +126 -0
  215. package/dist/memory/memory.d.ts.map +1 -0
  216. package/dist/memory/memory.js +285 -0
  217. package/dist/memory/memory.js.map +1 -0
  218. package/dist/memory/processors/base.d.ts +42 -0
  219. package/dist/memory/processors/base.d.ts.map +1 -0
  220. package/dist/memory/processors/base.js +6 -0
  221. package/dist/memory/processors/base.js.map +1 -0
  222. package/dist/memory/processors/index.d.ts +16 -0
  223. package/dist/memory/processors/index.d.ts.map +1 -0
  224. package/dist/memory/processors/index.js +18 -0
  225. package/dist/memory/processors/index.js.map +1 -0
  226. package/dist/memory/processors/message-history.d.ts +35 -0
  227. package/dist/memory/processors/message-history.d.ts.map +1 -0
  228. package/dist/memory/processors/message-history.js +53 -0
  229. package/dist/memory/processors/message-history.js.map +1 -0
  230. package/dist/memory/processors/observational-memory/index.d.ts +82 -0
  231. package/dist/memory/processors/observational-memory/index.d.ts.map +1 -0
  232. package/dist/memory/processors/observational-memory/index.js +239 -0
  233. package/dist/memory/processors/observational-memory/index.js.map +1 -0
  234. package/dist/memory/processors/observational-memory/observer-agent.d.ts +64 -0
  235. package/dist/memory/processors/observational-memory/observer-agent.d.ts.map +1 -0
  236. package/dist/memory/processors/observational-memory/observer-agent.js +362 -0
  237. package/dist/memory/processors/observational-memory/observer-agent.js.map +1 -0
  238. package/dist/memory/processors/observational-memory/reflector-agent.d.ts +38 -0
  239. package/dist/memory/processors/observational-memory/reflector-agent.d.ts.map +1 -0
  240. package/dist/memory/processors/observational-memory/reflector-agent.js +213 -0
  241. package/dist/memory/processors/observational-memory/reflector-agent.js.map +1 -0
  242. package/dist/memory/processors/observational-memory/token-counter.d.ts +35 -0
  243. package/dist/memory/processors/observational-memory/token-counter.d.ts.map +1 -0
  244. package/dist/memory/processors/observational-memory/token-counter.js +90 -0
  245. package/dist/memory/processors/observational-memory/token-counter.js.map +1 -0
  246. package/dist/memory/processors/semantic-recall.d.ts +55 -0
  247. package/dist/memory/processors/semantic-recall.d.ts.map +1 -0
  248. package/dist/memory/processors/semantic-recall.js +152 -0
  249. package/dist/memory/processors/semantic-recall.js.map +1 -0
  250. package/dist/memory/processors/working-memory.d.ts +41 -0
  251. package/dist/memory/processors/working-memory.d.ts.map +1 -0
  252. package/dist/memory/processors/working-memory.js +87 -0
  253. package/dist/memory/processors/working-memory.js.map +1 -0
  254. package/dist/memory/storage/base.d.ts +288 -0
  255. package/dist/memory/storage/base.d.ts.map +1 -0
  256. package/dist/memory/storage/base.js +209 -0
  257. package/dist/memory/storage/base.js.map +1 -0
  258. package/dist/memory/storage/index.d.ts +9 -0
  259. package/dist/memory/storage/index.d.ts.map +1 -0
  260. package/dist/memory/storage/index.js +7 -0
  261. package/dist/memory/storage/index.js.map +1 -0
  262. package/dist/memory/storage/inmemory.d.ts +93 -0
  263. package/dist/memory/storage/inmemory.d.ts.map +1 -0
  264. package/dist/memory/storage/inmemory.js +647 -0
  265. package/dist/memory/storage/inmemory.js.map +1 -0
  266. package/dist/memory/tools/working-memory.d.ts +100 -0
  267. package/dist/memory/tools/working-memory.d.ts.map +1 -0
  268. package/dist/memory/tools/working-memory.js +237 -0
  269. package/dist/memory/tools/working-memory.js.map +1 -0
  270. package/dist/memory/types.d.ts +386 -0
  271. package/dist/memory/types.d.ts.map +1 -0
  272. package/dist/memory/types.js +58 -0
  273. package/dist/memory/types.js.map +1 -0
  274. package/dist/memory/vector/base.d.ts +145 -0
  275. package/dist/memory/vector/base.d.ts.map +1 -0
  276. package/dist/memory/vector/base.js +81 -0
  277. package/dist/memory/vector/base.js.map +1 -0
  278. package/dist/memory/vector/index.d.ts +8 -0
  279. package/dist/memory/vector/index.d.ts.map +1 -0
  280. package/dist/memory/vector/index.js +7 -0
  281. package/dist/memory/vector/index.js.map +1 -0
  282. package/dist/memory/vector/inmemory.d.ts +47 -0
  283. package/dist/memory/vector/inmemory.d.ts.map +1 -0
  284. package/dist/memory/vector/inmemory.js +231 -0
  285. package/dist/memory/vector/inmemory.js.map +1 -0
  286. package/dist/tui/autocomplete.js +5 -1
  287. package/dist/tui/autocomplete.js.map +1 -1
  288. package/dist/tui/components/box.js +9 -1
  289. package/dist/tui/components/box.js.map +1 -1
  290. package/dist/tui/components/cancellable-loader.js +3 -4
  291. package/dist/tui/components/cancellable-loader.js.map +1 -1
  292. package/dist/tui/components/editor.d.ts +39 -3
  293. package/dist/tui/components/editor.d.ts.map +1 -1
  294. package/dist/tui/components/editor.js +162 -133
  295. package/dist/tui/components/editor.js.map +1 -1
  296. package/dist/tui/components/image.js +8 -0
  297. package/dist/tui/components/image.js.map +1 -1
  298. package/dist/tui/components/input.js +10 -11
  299. package/dist/tui/components/input.js.map +1 -1
  300. package/dist/tui/components/loader.js +7 -4
  301. package/dist/tui/components/loader.js.map +1 -1
  302. package/dist/tui/components/markdown.js +10 -0
  303. package/dist/tui/components/markdown.js.map +1 -1
  304. package/dist/tui/components/select-list.js +8 -4
  305. package/dist/tui/components/select-list.js.map +1 -1
  306. package/dist/tui/components/settings-list.js +12 -4
  307. package/dist/tui/components/settings-list.js.map +1 -1
  308. package/dist/tui/components/spacer.js +1 -0
  309. package/dist/tui/components/spacer.js.map +1 -1
  310. package/dist/tui/components/text.js +5 -0
  311. package/dist/tui/components/text.js.map +1 -1
  312. package/dist/tui/components/truncated-text.js +3 -0
  313. package/dist/tui/components/truncated-text.js.map +1 -1
  314. package/dist/tui/fuzzy.js +4 -1
  315. package/dist/tui/fuzzy.js.map +1 -1
  316. package/dist/tui/keybindings.js +3 -2
  317. package/dist/tui/keybindings.js.map +1 -1
  318. package/dist/tui/keys.d.ts +17 -1
  319. package/dist/tui/keys.d.ts.map +1 -1
  320. package/dist/tui/keys.js +56 -0
  321. package/dist/tui/keys.js.map +1 -1
  322. package/dist/tui/kill-ring.d.ts +28 -0
  323. package/dist/tui/kill-ring.d.ts.map +1 -0
  324. package/dist/tui/kill-ring.js +44 -0
  325. package/dist/tui/kill-ring.js.map +1 -0
  326. package/dist/tui/stdin-buffer.js +6 -5
  327. package/dist/tui/stdin-buffer.js.map +1 -1
  328. package/dist/tui/terminal-image.js +1 -3
  329. package/dist/tui/terminal-image.js.map +1 -1
  330. package/dist/tui/terminal.d.ts +13 -0
  331. package/dist/tui/terminal.d.ts.map +1 -1
  332. package/dist/tui/terminal.js +70 -7
  333. package/dist/tui/terminal.js.map +1 -1
  334. package/dist/tui/tui.d.ts +36 -0
  335. package/dist/tui/tui.d.ts.map +1 -1
  336. package/dist/tui/tui.js +101 -29
  337. package/dist/tui/tui.js.map +1 -1
  338. package/dist/tui/undo-stack.d.ts +17 -0
  339. package/dist/tui/undo-stack.d.ts.map +1 -0
  340. package/dist/tui/undo-stack.js +25 -0
  341. package/dist/tui/undo-stack.js.map +1 -0
  342. package/dist/tui/utils.js +12 -16
  343. package/dist/tui/utils.js.map +1 -1
  344. package/package.json +32 -2
@@ -0,0 +1,599 @@
1
+ /**
2
+ * MCP Client - Single Server Connection
3
+ *
4
+ * Manages connection to one MCP server and provides
5
+ * methods to list/call tools, read resources, etc.
6
+ *
7
+ * Reference: @mastra/mcp packages/mcp/src/client/client.ts InternalMastraMCPClient
8
+ */
9
+ import { spawn } from "child_process";
10
+ import { MCPError, MCPErrorCode } from "./errors.js";
11
+ /** Default request timeout in milliseconds */
12
+ const DEFAULT_REQUEST_TIMEOUT = 60000;
13
+ /** Default server connect timeout in milliseconds (increased for npx downloads) */
14
+ const DEFAULT_CONNECT_TIMEOUT = 30000;
15
+ /**
16
+ * MCP Client - manages connection to a single MCP server.
17
+ *
18
+ * Supports stdio transport (subprocess communication).
19
+ * Provides methods to list tools, call tools, read resources, etc.
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const client = new MCPClient({
24
+ * name: "filesystem",
25
+ * config: {
26
+ * command: "npx",
27
+ * args: ["-y", "@modelcontextprotocol/server-filesystem", "."],
28
+ * },
29
+ * });
30
+ *
31
+ * await client.connect();
32
+ * const tools = await client.listTools();
33
+ * const result = await client.callTool("read_file", { path: "./test.txt" });
34
+ * await client.disconnect();
35
+ * ```
36
+ */
37
+ export class MCPClient {
38
+ options;
39
+ process;
40
+ buffer = "";
41
+ messageId = 0;
42
+ pendingRequests = new Map();
43
+ isConnected = false;
44
+ connectionPromise = null;
45
+ serverCapabilities;
46
+ logHandler;
47
+ enableServerLogs;
48
+ enableProgressTracking;
49
+ _roots;
50
+ /** Server name */
51
+ serverName;
52
+ /** Server config */
53
+ config;
54
+ /** Request timeout */
55
+ timeout;
56
+ constructor(options) {
57
+ this.options = options;
58
+ this.serverName = options.name;
59
+ this.config = options.config;
60
+ this.timeout = options.timeout ?? DEFAULT_REQUEST_TIMEOUT;
61
+ this.logHandler = options.logger;
62
+ this.enableServerLogs = options.enableServerLogs ?? true;
63
+ this.enableProgressTracking = options.enableProgressTracking ?? false;
64
+ this._roots = options.roots ?? [];
65
+ }
66
+ // ========================================================================
67
+ // Connection Lifecycle
68
+ // ========================================================================
69
+ /**
70
+ * Connect to the MCP server.
71
+ * Safe to call multiple times - returns existing connection if already connected.
72
+ */
73
+ async connect() {
74
+ if (this.isConnected)
75
+ return;
76
+ if (this.connectionPromise) {
77
+ return this.connectionPromise;
78
+ }
79
+ this.connectionPromise = this.doConnect();
80
+ try {
81
+ await this.connectionPromise;
82
+ }
83
+ finally {
84
+ this.connectionPromise = null;
85
+ }
86
+ }
87
+ async doConnect() {
88
+ if ("command" in this.config) {
89
+ await this.connectStdio(this.config);
90
+ }
91
+ else if ("url" in this.config) {
92
+ await this.connectHttp(this.config);
93
+ }
94
+ else {
95
+ throw new MCPError("Server configuration must include either a command or a url", MCPErrorCode.CONFIG_ERROR, undefined, { serverName: this.serverName });
96
+ }
97
+ // Send initialize request
98
+ const initResult = await this.sendRequest("initialize", {
99
+ protocolVersion: "2024-11-05",
100
+ capabilities: {
101
+ ...(this._roots.length > 0 ? { roots: { listChanged: true } } : {}),
102
+ elicitation: {},
103
+ },
104
+ clientInfo: {
105
+ name: "new_indusagi",
106
+ version: "1.0.0",
107
+ },
108
+ });
109
+ this.serverCapabilities = initResult.capabilities;
110
+ this.isConnected = true;
111
+ // Send initialized notification
112
+ await this.sendNotification("notifications/initialized", {});
113
+ this.log("info", `Connected to MCP server`);
114
+ }
115
+ async connectHttp(config) {
116
+ this.log("debug", `Starting HTTP transport: ${config.url.toString()}`);
117
+ // For HTTP, we just verify we can reach the server
118
+ // The actual connection happens per-request
119
+ this.isConnected = true;
120
+ }
121
+ async connectStdio(config) {
122
+ return new Promise((resolve, reject) => {
123
+ this.log("debug", `Starting stdio transport: ${config.command} ${(config.args ?? []).join(" ")}`);
124
+ this.process = spawn(config.command, config.args ?? [], {
125
+ env: { ...process.env, ...config.env },
126
+ cwd: config.cwd,
127
+ stdio: ["pipe", "pipe", "pipe"],
128
+ });
129
+ this.process.stdout?.on("data", (data) => {
130
+ this.buffer += data.toString("utf-8");
131
+ this.processBuffer();
132
+ });
133
+ this.process.stderr?.on("data", (data) => {
134
+ const message = data.toString("utf-8").trim();
135
+ if (message) {
136
+ this.log("debug", `[stderr] ${message}`);
137
+ }
138
+ });
139
+ this.process.on("error", (error) => {
140
+ const mcpError = new MCPError(`Failed to spawn MCP server: ${error.message}`, MCPErrorCode.CONNECTION_FAILED, { error: error.message }, { serverName: this.serverName, cause: error });
141
+ reject(mcpError);
142
+ });
143
+ this.process.on("close", (code) => {
144
+ this.isConnected = false;
145
+ if (code !== 0 && code !== null) {
146
+ this.log("warning", `Process exited with code ${code}`);
147
+ }
148
+ // Reject all pending requests
149
+ for (const [id, { reject: reqReject, timeout }] of this.pendingRequests) {
150
+ clearTimeout(timeout);
151
+ reqReject(new MCPError("Connection closed", MCPErrorCode.NOT_CONNECTED));
152
+ }
153
+ this.pendingRequests.clear();
154
+ });
155
+ // Give the process time to start up (especially for npx which may need to download)
156
+ setTimeout(resolve, 500);
157
+ });
158
+ }
159
+ /**
160
+ * Disconnect from the MCP server.
161
+ */
162
+ async disconnect() {
163
+ // For HTTP transport, just mark as disconnected
164
+ if ("url" in this.config) {
165
+ this.isConnected = false;
166
+ this.log("debug", "Disconnected from HTTP MCP server");
167
+ return;
168
+ }
169
+ // Stdio transport
170
+ if (!this.process) {
171
+ this.log("debug", "Disconnect called but no process was running");
172
+ return;
173
+ }
174
+ this.log("debug", "Disconnecting from MCP server");
175
+ try {
176
+ // Kill the process
177
+ this.process.kill();
178
+ this.process = undefined;
179
+ this.isConnected = false;
180
+ // Reject all pending requests
181
+ for (const [id, { reject, timeout }] of this.pendingRequests) {
182
+ clearTimeout(timeout);
183
+ reject(new MCPError("Connection closed", MCPErrorCode.NOT_CONNECTED));
184
+ }
185
+ this.pendingRequests.clear();
186
+ this.log("debug", "Successfully disconnected");
187
+ }
188
+ catch (error) {
189
+ this.log("error", `Error during disconnect: ${error}`);
190
+ throw error;
191
+ }
192
+ }
193
+ /**
194
+ * Whether the client is connected.
195
+ */
196
+ get connected() {
197
+ return this.isConnected;
198
+ }
199
+ // ========================================================================
200
+ // Tool Operations
201
+ // ========================================================================
202
+ /**
203
+ * List all tools available from the server.
204
+ */
205
+ async listTools() {
206
+ this.ensureConnected();
207
+ const result = await this.sendRequest("tools/list", {});
208
+ return result.tools;
209
+ }
210
+ /**
211
+ * Call a tool on the server.
212
+ */
213
+ async callTool(name, args) {
214
+ this.ensureConnected();
215
+ this.log("debug", `Calling tool: ${name}`);
216
+ try {
217
+ const result = await this.sendRequest("tools/call", {
218
+ name,
219
+ arguments: args,
220
+ });
221
+ this.log("debug", `Tool ${name} executed successfully`);
222
+ return result;
223
+ }
224
+ catch (error) {
225
+ this.log("error", `Tool ${name} failed: ${error}`);
226
+ throw error;
227
+ }
228
+ }
229
+ // ========================================================================
230
+ // Resource Operations
231
+ // ========================================================================
232
+ /**
233
+ * List all resources available from the server.
234
+ */
235
+ async listResources() {
236
+ this.ensureConnected();
237
+ if (!this.serverCapabilities?.resources) {
238
+ return [];
239
+ }
240
+ const result = await this.sendRequest("resources/list", {});
241
+ return result.resources;
242
+ }
243
+ /**
244
+ * Read a resource from the server.
245
+ */
246
+ async readResource(uri) {
247
+ this.ensureConnected();
248
+ return await this.sendRequest("resources/read", { uri });
249
+ }
250
+ /**
251
+ * Subscribe to resource updates.
252
+ */
253
+ async subscribeResource(uri) {
254
+ this.ensureConnected();
255
+ await this.sendRequest("resources/subscribe", { uri });
256
+ }
257
+ /**
258
+ * Unsubscribe from resource updates.
259
+ */
260
+ async unsubscribeResource(uri) {
261
+ this.ensureConnected();
262
+ await this.sendRequest("resources/unsubscribe", { uri });
263
+ }
264
+ // ========================================================================
265
+ // Prompt Operations
266
+ // ========================================================================
267
+ /**
268
+ * List all prompts available from the server.
269
+ */
270
+ async listPrompts() {
271
+ this.ensureConnected();
272
+ if (!this.serverCapabilities?.prompts) {
273
+ return [];
274
+ }
275
+ const result = await this.sendRequest("prompts/list", {});
276
+ return result.prompts;
277
+ }
278
+ /**
279
+ * Get a prompt from the server.
280
+ */
281
+ async getPrompt(name, args) {
282
+ this.ensureConnected();
283
+ return await this.sendRequest("prompts/get", { name, arguments: args });
284
+ }
285
+ // ========================================================================
286
+ // Roots Operations
287
+ // ========================================================================
288
+ /**
289
+ * Get the configured roots.
290
+ */
291
+ get roots() {
292
+ return [...this._roots];
293
+ }
294
+ /**
295
+ * Update the roots and notify the server.
296
+ */
297
+ async setRoots(roots) {
298
+ this.log("debug", `Updating roots to ${roots.length} entries`);
299
+ this._roots = [...roots];
300
+ if (this.isConnected) {
301
+ await this.sendNotification("notifications/roots/list_changed", {});
302
+ }
303
+ }
304
+ // ========================================================================
305
+ // Handler Registration
306
+ // ========================================================================
307
+ /**
308
+ * Set a handler for resource updated notifications.
309
+ */
310
+ setResourceUpdatedHandler(handler) {
311
+ // This would be implemented with notification handlers
312
+ // For now, this is a placeholder
313
+ this.log("debug", "Resource updated handler registered");
314
+ }
315
+ /**
316
+ * Set a handler for resource list changed notifications.
317
+ */
318
+ setResourceListChangedHandler(handler) {
319
+ this.log("debug", "Resource list changed handler registered");
320
+ }
321
+ /**
322
+ * Set a handler for prompt list changed notifications.
323
+ */
324
+ setPromptListChangedHandler(handler) {
325
+ this.log("debug", "Prompt list changed handler registered");
326
+ }
327
+ /**
328
+ * Set a handler for elicitation requests.
329
+ */
330
+ setElicitationHandler(handler) {
331
+ this.log("debug", "Elicitation handler registered");
332
+ }
333
+ /**
334
+ * Set a handler for progress notifications.
335
+ */
336
+ setProgressHandler(handler) {
337
+ this.log("debug", "Progress handler registered");
338
+ }
339
+ // ========================================================================
340
+ // Private Methods
341
+ // ========================================================================
342
+ ensureConnected() {
343
+ // For HTTP transport, we don't have a process
344
+ const isHttpTransport = "url" in this.config;
345
+ if (!this.isConnected || (!isHttpTransport && !this.process)) {
346
+ throw new MCPError("Not connected to MCP server", MCPErrorCode.NOT_CONNECTED, undefined, { serverName: this.serverName });
347
+ }
348
+ }
349
+ async sendRequest(method, params) {
350
+ // Allow requests during initialization (before isConnected is set)
351
+ // Only check connection for non-initialize requests
352
+ if (method !== "initialize") {
353
+ this.ensureConnected();
354
+ }
355
+ // Check if using HTTP transport
356
+ if ("url" in this.config) {
357
+ return this.sendHttpRequest(method, params);
358
+ }
359
+ // Stdio transport
360
+ if (!this.process) {
361
+ throw new MCPError("Not connected to MCP server", MCPErrorCode.NOT_CONNECTED, undefined, { serverName: this.serverName });
362
+ }
363
+ return new Promise((resolve, reject) => {
364
+ const id = ++this.messageId;
365
+ const timeout = setTimeout(() => {
366
+ this.pendingRequests.delete(id);
367
+ reject(new MCPError(`Request timeout: ${method}`, MCPErrorCode.TIMEOUT, { method, id }, { serverName: this.serverName }));
368
+ }, this.timeout);
369
+ this.pendingRequests.set(id, {
370
+ resolve: resolve,
371
+ reject,
372
+ timeout,
373
+ });
374
+ const message = {
375
+ jsonrpc: "2.0",
376
+ id,
377
+ method,
378
+ params,
379
+ };
380
+ this.log("debug", `Sending request: ${method} (id: ${id})`);
381
+ try {
382
+ const messageStr = JSON.stringify(message) + "\n";
383
+ this.process.stdin.write(messageStr);
384
+ }
385
+ catch (error) {
386
+ this.pendingRequests.delete(id);
387
+ clearTimeout(timeout);
388
+ reject(new MCPError(`Failed to send request: ${error}`, MCPErrorCode.TRANSPORT_ERROR, { error: String(error) }, { serverName: this.serverName }));
389
+ }
390
+ });
391
+ }
392
+ async sendHttpRequest(method, params) {
393
+ const config = this.config;
394
+ const id = ++this.messageId;
395
+ const message = {
396
+ jsonrpc: "2.0",
397
+ id,
398
+ method,
399
+ params,
400
+ };
401
+ this.log("debug", `Sending HTTP request: ${method} (id: ${id})`);
402
+ const controller = new AbortController();
403
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
404
+ try {
405
+ const response = await fetch(config.url.toString(), {
406
+ method: "POST",
407
+ headers: {
408
+ "Content-Type": "application/json",
409
+ "Accept": "application/json, text/event-stream",
410
+ ...config.headers,
411
+ },
412
+ body: JSON.stringify(message),
413
+ signal: controller.signal,
414
+ });
415
+ clearTimeout(timeoutId);
416
+ if (!response.ok) {
417
+ // Try to parse error body
418
+ const errorText = await response.text();
419
+ let errorMessage = `HTTP error: ${response.status} ${response.statusText}`;
420
+ try {
421
+ const errorJson = JSON.parse(errorText);
422
+ if (errorJson.error?.message) {
423
+ errorMessage = errorJson.error.message;
424
+ }
425
+ }
426
+ catch {
427
+ // Not JSON, use the text
428
+ if (errorText) {
429
+ errorMessage = errorText;
430
+ }
431
+ }
432
+ throw new MCPError(errorMessage, MCPErrorCode.TRANSPORT_ERROR, { status: response.status, body: errorText }, { serverName: this.serverName });
433
+ }
434
+ // Parse response - could be JSON or SSE format
435
+ const responseText = await response.text();
436
+ let result;
437
+ // Check if SSE format (starts with "event:" or "data:")
438
+ if (responseText.startsWith("event:") || responseText.startsWith("data:")) {
439
+ // Parse SSE format
440
+ const lines = responseText.split("\n");
441
+ let dataLine = "";
442
+ for (const line of lines) {
443
+ if (line.startsWith("data:")) {
444
+ dataLine = line.slice(5).trim();
445
+ break;
446
+ }
447
+ }
448
+ if (dataLine) {
449
+ result = JSON.parse(dataLine);
450
+ }
451
+ else {
452
+ throw new MCPError("Empty SSE response", MCPErrorCode.TRANSPORT_ERROR, { response: responseText }, { serverName: this.serverName });
453
+ }
454
+ }
455
+ else {
456
+ // Plain JSON
457
+ result = JSON.parse(responseText);
458
+ }
459
+ if (result.error) {
460
+ throw new MCPError(result.error.message || "MCP error", MCPErrorCode.SERVER_ERROR, result.error, { serverName: this.serverName });
461
+ }
462
+ this.log("debug", `HTTP request ${id} succeeded`);
463
+ return result.result;
464
+ }
465
+ catch (error) {
466
+ clearTimeout(timeoutId);
467
+ if (error instanceof MCPError)
468
+ throw error;
469
+ if (error instanceof Error && error.name === "AbortError") {
470
+ throw new MCPError(`Request timeout: ${method}`, MCPErrorCode.TIMEOUT, { method, id }, { serverName: this.serverName });
471
+ }
472
+ throw new MCPError(`HTTP request failed: ${error}`, MCPErrorCode.TRANSPORT_ERROR, { error: String(error) }, { serverName: this.serverName });
473
+ }
474
+ }
475
+ async sendNotification(method, params) {
476
+ const message = {
477
+ jsonrpc: "2.0",
478
+ method,
479
+ params,
480
+ };
481
+ this.log("debug", `Sending notification: ${method}`);
482
+ // For HTTP transport, notifications are sent as POST requests without expecting a response
483
+ if ("url" in this.config) {
484
+ const config = this.config;
485
+ try {
486
+ await fetch(config.url.toString(), {
487
+ method: "POST",
488
+ headers: {
489
+ "Content-Type": "application/json",
490
+ ...config.headers,
491
+ },
492
+ body: JSON.stringify(message),
493
+ });
494
+ }
495
+ catch (error) {
496
+ this.log("error", `Failed to send HTTP notification: ${error}`);
497
+ }
498
+ return;
499
+ }
500
+ // Stdio transport
501
+ if (!this.process) {
502
+ throw new MCPError("Not connected to MCP server", MCPErrorCode.NOT_CONNECTED, undefined, { serverName: this.serverName });
503
+ }
504
+ try {
505
+ const messageStr = JSON.stringify(message) + "\n";
506
+ this.process.stdin.write(messageStr);
507
+ }
508
+ catch (error) {
509
+ this.log("error", `Failed to send notification: ${error}`);
510
+ }
511
+ }
512
+ processBuffer() {
513
+ const lines = this.buffer.split("\n");
514
+ this.buffer = lines.pop() || ""; // Keep incomplete line
515
+ for (const line of lines) {
516
+ const trimmed = line.trim();
517
+ if (!trimmed)
518
+ continue;
519
+ try {
520
+ const message = JSON.parse(trimmed);
521
+ this.handleMessage(message);
522
+ }
523
+ catch (error) {
524
+ this.log("warning", `Failed to parse message: ${trimmed}`);
525
+ }
526
+ }
527
+ }
528
+ handleMessage(message) {
529
+ // Handle responses to our requests
530
+ if (message.id !== undefined && this.pendingRequests.has(message.id)) {
531
+ const { resolve, reject, timeout } = this.pendingRequests.get(message.id);
532
+ this.pendingRequests.delete(message.id);
533
+ clearTimeout(timeout);
534
+ if (message.error) {
535
+ this.log("debug", `Request ${message.id} failed: ${message.error.message}`);
536
+ reject(new MCPError(message.error.message || "Unknown error", MCPErrorCode.SERVER_ERROR, message.error, { serverName: this.serverName }));
537
+ }
538
+ else {
539
+ this.log("debug", `Request ${message.id} succeeded`);
540
+ resolve(message.result);
541
+ }
542
+ }
543
+ // Handle notifications (server-initiated messages)
544
+ if (message.method) {
545
+ this.handleNotification(message.method, message.params);
546
+ }
547
+ }
548
+ handleNotification(method, params) {
549
+ this.log("debug", `Received notification: ${method}`);
550
+ switch (method) {
551
+ case "notifications/message":
552
+ // Server log message
553
+ if (this.enableServerLogs && params) {
554
+ const { level, ...rest } = params;
555
+ this.log(level || "info", "[SERVER]", rest);
556
+ }
557
+ break;
558
+ case "notifications/progress":
559
+ // Progress notification
560
+ this.log("debug", `Progress: ${JSON.stringify(params)}`);
561
+ break;
562
+ case "notifications/resources/updated":
563
+ // Resource updated
564
+ this.log("debug", `Resource updated: ${JSON.stringify(params)}`);
565
+ break;
566
+ case "notifications/resources/list_changed":
567
+ // Resource list changed
568
+ this.log("debug", "Resource list changed");
569
+ break;
570
+ case "notifications/prompts/list_changed":
571
+ // Prompt list changed
572
+ this.log("debug", "Prompt list changed");
573
+ break;
574
+ }
575
+ }
576
+ log(level, message, details) {
577
+ const msg = `[${this.serverName}] ${message}`;
578
+ if (this.logHandler) {
579
+ this.logHandler({
580
+ level,
581
+ message: msg,
582
+ timestamp: new Date(),
583
+ serverName: this.serverName,
584
+ details,
585
+ });
586
+ }
587
+ else {
588
+ // Default console logging
589
+ const prefix = `[MCP:${level.toUpperCase()}]`;
590
+ if (details) {
591
+ console.log(prefix, msg, details);
592
+ }
593
+ else {
594
+ console.log(prefix, msg);
595
+ }
596
+ }
597
+ }
598
+ }
599
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/mcp/client.ts"],"names":[],"mappings":"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"}