@agent-native/core 0.7.2 → 0.7.6

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 (352) hide show
  1. package/README.md +6 -5
  2. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  3. package/dist/agent/engine/anthropic-engine.js +8 -4
  4. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  5. package/dist/agent/engine/types.d.ts +1 -1
  6. package/dist/agent/engine/types.d.ts.map +1 -1
  7. package/dist/agent/production-agent.d.ts +7 -0
  8. package/dist/agent/production-agent.d.ts.map +1 -1
  9. package/dist/agent/production-agent.js +153 -118
  10. package/dist/agent/production-agent.js.map +1 -1
  11. package/dist/cli/create.d.ts.map +1 -1
  12. package/dist/cli/create.js +8 -1
  13. package/dist/cli/create.js.map +1 -1
  14. package/dist/cli/index.js +8 -0
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/info.d.ts +2 -0
  17. package/dist/cli/info.d.ts.map +1 -0
  18. package/dist/cli/info.js +103 -0
  19. package/dist/cli/info.js.map +1 -0
  20. package/dist/client/AssistantChat.d.ts.map +1 -1
  21. package/dist/client/AssistantChat.js +171 -68
  22. package/dist/client/AssistantChat.js.map +1 -1
  23. package/dist/client/FeedbackButton.d.ts +3 -1
  24. package/dist/client/FeedbackButton.d.ts.map +1 -1
  25. package/dist/client/FeedbackButton.js +115 -40
  26. package/dist/client/FeedbackButton.js.map +1 -1
  27. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  28. package/dist/client/agent-chat-adapter.js +12 -1
  29. package/dist/client/agent-chat-adapter.js.map +1 -1
  30. package/dist/client/composer/TiptapComposer.d.ts +3 -1
  31. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  32. package/dist/client/composer/TiptapComposer.js +46 -2
  33. package/dist/client/composer/TiptapComposer.js.map +1 -1
  34. package/dist/client/composer/VoiceButton.d.ts +21 -0
  35. package/dist/client/composer/VoiceButton.d.ts.map +1 -0
  36. package/dist/client/composer/VoiceButton.js +51 -0
  37. package/dist/client/composer/VoiceButton.js.map +1 -0
  38. package/dist/client/composer/useVoiceDictation.d.ts +38 -0
  39. package/dist/client/composer/useVoiceDictation.d.ts.map +1 -0
  40. package/dist/client/composer/useVoiceDictation.js +398 -0
  41. package/dist/client/composer/useVoiceDictation.js.map +1 -0
  42. package/dist/client/index.d.ts +1 -0
  43. package/dist/client/index.d.ts.map +1 -1
  44. package/dist/client/index.js +1 -0
  45. package/dist/client/index.js.map +1 -1
  46. package/dist/client/onboarding/OnboardingPanel.js +2 -2
  47. package/dist/client/onboarding/OnboardingPanel.js.map +1 -1
  48. package/dist/client/org/OrgSwitcher.d.ts +5 -4
  49. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  50. package/dist/client/org/OrgSwitcher.js +90 -24
  51. package/dist/client/org/OrgSwitcher.js.map +1 -1
  52. package/dist/client/resources/McpServerDetail.d.ts +15 -0
  53. package/dist/client/resources/McpServerDetail.d.ts.map +1 -0
  54. package/dist/client/resources/McpServerDetail.js +65 -0
  55. package/dist/client/resources/McpServerDetail.js.map +1 -0
  56. package/dist/client/resources/ResourceEditor.js +1 -1
  57. package/dist/client/resources/ResourceEditor.js.map +1 -1
  58. package/dist/client/resources/ResourceTree.d.ts +6 -1
  59. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  60. package/dist/client/resources/ResourceTree.js +18 -7
  61. package/dist/client/resources/ResourceTree.js.map +1 -1
  62. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  63. package/dist/client/resources/ResourcesPanel.js +191 -20
  64. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  65. package/dist/client/resources/use-mcp-servers.d.ts +68 -0
  66. package/dist/client/resources/use-mcp-servers.d.ts.map +1 -0
  67. package/dist/client/resources/use-mcp-servers.js +83 -0
  68. package/dist/client/resources/use-mcp-servers.js.map +1 -0
  69. package/dist/client/resources/use-resources.d.ts +27 -1
  70. package/dist/client/resources/use-resources.d.ts.map +1 -1
  71. package/dist/client/resources/use-resources.js +63 -0
  72. package/dist/client/resources/use-resources.js.map +1 -1
  73. package/dist/client/settings/SecretsSection.d.ts +12 -0
  74. package/dist/client/settings/SecretsSection.d.ts.map +1 -0
  75. package/dist/client/settings/SecretsSection.js +148 -0
  76. package/dist/client/settings/SecretsSection.js.map +1 -0
  77. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  78. package/dist/client/settings/SettingsPanel.js +101 -2
  79. package/dist/client/settings/SettingsPanel.js.map +1 -1
  80. package/dist/client/settings/VoiceTranscriptionSection.d.ts +14 -0
  81. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -0
  82. package/dist/client/settings/VoiceTranscriptionSection.js +111 -0
  83. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -0
  84. package/dist/client/settings/index.d.ts +1 -0
  85. package/dist/client/settings/index.d.ts.map +1 -1
  86. package/dist/client/settings/index.js +1 -0
  87. package/dist/client/settings/index.js.map +1 -1
  88. package/dist/client/sharing/ShareButton.d.ts +16 -0
  89. package/dist/client/sharing/ShareButton.d.ts.map +1 -0
  90. package/dist/client/sharing/ShareButton.js +308 -0
  91. package/dist/client/sharing/ShareButton.js.map +1 -0
  92. package/dist/client/sharing/ShareDialog.d.ts +33 -0
  93. package/dist/client/sharing/ShareDialog.d.ts.map +1 -0
  94. package/dist/client/sharing/ShareDialog.js +231 -0
  95. package/dist/client/sharing/ShareDialog.js.map +1 -0
  96. package/dist/client/sharing/VisibilityBadge.d.ts +11 -0
  97. package/dist/client/sharing/VisibilityBadge.d.ts.map +1 -0
  98. package/dist/client/sharing/VisibilityBadge.js +19 -0
  99. package/dist/client/sharing/VisibilityBadge.js.map +1 -0
  100. package/dist/client/sharing/index.d.ts +4 -0
  101. package/dist/client/sharing/index.d.ts.map +1 -0
  102. package/dist/client/sharing/index.js +4 -0
  103. package/dist/client/sharing/index.js.map +1 -0
  104. package/dist/client/use-action.d.ts.map +1 -1
  105. package/dist/client/use-action.js +27 -3
  106. package/dist/client/use-action.js.map +1 -1
  107. package/dist/db/migrations.d.ts +18 -3
  108. package/dist/db/migrations.d.ts.map +1 -1
  109. package/dist/db/migrations.js +25 -3
  110. package/dist/db/migrations.js.map +1 -1
  111. package/dist/db/schema.d.ts +1 -0
  112. package/dist/db/schema.d.ts.map +1 -1
  113. package/dist/db/schema.js +4 -0
  114. package/dist/db/schema.js.map +1 -1
  115. package/dist/deploy/build.js +22 -3
  116. package/dist/deploy/build.js.map +1 -1
  117. package/dist/deploy/workspace-core.js +2 -2
  118. package/dist/index.d.ts +1 -0
  119. package/dist/index.d.ts.map +1 -1
  120. package/dist/index.js +4 -0
  121. package/dist/index.js.map +1 -1
  122. package/dist/mcp-client/config.d.ts +20 -1
  123. package/dist/mcp-client/config.d.ts.map +1 -1
  124. package/dist/mcp-client/config.js +28 -11
  125. package/dist/mcp-client/config.js.map +1 -1
  126. package/dist/mcp-client/hub-client.d.ts +38 -0
  127. package/dist/mcp-client/hub-client.d.ts.map +1 -0
  128. package/dist/mcp-client/hub-client.js +147 -0
  129. package/dist/mcp-client/hub-client.js.map +1 -0
  130. package/dist/mcp-client/hub-routes.d.ts +42 -0
  131. package/dist/mcp-client/hub-routes.d.ts.map +1 -0
  132. package/dist/mcp-client/hub-routes.js +114 -0
  133. package/dist/mcp-client/hub-routes.js.map +1 -0
  134. package/dist/mcp-client/index.d.ts +15 -0
  135. package/dist/mcp-client/index.d.ts.map +1 -1
  136. package/dist/mcp-client/index.js +35 -0
  137. package/dist/mcp-client/index.js.map +1 -1
  138. package/dist/mcp-client/manager.d.ts +54 -8
  139. package/dist/mcp-client/manager.d.ts.map +1 -1
  140. package/dist/mcp-client/manager.js +276 -59
  141. package/dist/mcp-client/manager.js.map +1 -1
  142. package/dist/mcp-client/remote-store.d.ts +102 -0
  143. package/dist/mcp-client/remote-store.d.ts.map +1 -0
  144. package/dist/mcp-client/remote-store.js +200 -0
  145. package/dist/mcp-client/remote-store.js.map +1 -0
  146. package/dist/mcp-client/routes.d.ts +55 -0
  147. package/dist/mcp-client/routes.d.ts.map +1 -0
  148. package/dist/mcp-client/routes.js +384 -0
  149. package/dist/mcp-client/routes.js.map +1 -0
  150. package/dist/mcp-client/visibility.d.ts +16 -0
  151. package/dist/mcp-client/visibility.d.ts.map +1 -0
  152. package/dist/mcp-client/visibility.js +45 -0
  153. package/dist/mcp-client/visibility.js.map +1 -0
  154. package/dist/onboarding/default-steps.d.ts.map +1 -1
  155. package/dist/onboarding/default-steps.js +5 -0
  156. package/dist/onboarding/default-steps.js.map +1 -1
  157. package/dist/org/accept-pending.d.ts +22 -0
  158. package/dist/org/accept-pending.d.ts.map +1 -0
  159. package/dist/org/accept-pending.js +75 -0
  160. package/dist/org/accept-pending.js.map +1 -0
  161. package/dist/org/context.js +2 -2
  162. package/dist/org/context.js.map +1 -1
  163. package/dist/org/handlers.d.ts +2 -0
  164. package/dist/org/handlers.d.ts.map +1 -1
  165. package/dist/org/handlers.js +54 -3
  166. package/dist/org/handlers.js.map +1 -1
  167. package/dist/org/index.d.ts +2 -0
  168. package/dist/org/index.d.ts.map +1 -1
  169. package/dist/org/index.js +1 -0
  170. package/dist/org/index.js.map +1 -1
  171. package/dist/resources/handlers.d.ts.map +1 -1
  172. package/dist/resources/handlers.js +30 -0
  173. package/dist/resources/handlers.js.map +1 -1
  174. package/dist/secrets/index.d.ts +15 -0
  175. package/dist/secrets/index.d.ts.map +1 -0
  176. package/dist/secrets/index.js +15 -0
  177. package/dist/secrets/index.js.map +1 -0
  178. package/dist/secrets/onboarding.d.ts +18 -0
  179. package/dist/secrets/onboarding.d.ts.map +1 -0
  180. package/dist/secrets/onboarding.js +87 -0
  181. package/dist/secrets/onboarding.js.map +1 -0
  182. package/dist/secrets/register-framework-secrets.d.ts +13 -0
  183. package/dist/secrets/register-framework-secrets.d.ts.map +1 -0
  184. package/dist/secrets/register-framework-secrets.js +59 -0
  185. package/dist/secrets/register-framework-secrets.js.map +1 -0
  186. package/dist/secrets/register.d.ts +63 -0
  187. package/dist/secrets/register.d.ts.map +1 -0
  188. package/dist/secrets/register.js +62 -0
  189. package/dist/secrets/register.js.map +1 -0
  190. package/dist/secrets/routes.d.ts +67 -0
  191. package/dist/secrets/routes.d.ts.map +1 -0
  192. package/dist/secrets/routes.js +275 -0
  193. package/dist/secrets/routes.js.map +1 -0
  194. package/dist/secrets/schema.d.ts +154 -0
  195. package/dist/secrets/schema.d.ts.map +1 -0
  196. package/dist/secrets/schema.js +41 -0
  197. package/dist/secrets/schema.js.map +1 -0
  198. package/dist/secrets/storage.d.ts +54 -0
  199. package/dist/secrets/storage.d.ts.map +1 -0
  200. package/dist/secrets/storage.js +181 -0
  201. package/dist/secrets/storage.js.map +1 -0
  202. package/dist/server/action-discovery.d.ts +18 -0
  203. package/dist/server/action-discovery.d.ts.map +1 -1
  204. package/dist/server/action-discovery.js +95 -0
  205. package/dist/server/action-discovery.js.map +1 -1
  206. package/dist/server/action-routes.d.ts.map +1 -1
  207. package/dist/server/action-routes.js +22 -2
  208. package/dist/server/action-routes.js.map +1 -1
  209. package/dist/server/agent-chat-plugin.d.ts +16 -0
  210. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  211. package/dist/server/agent-chat-plugin.js +120 -25
  212. package/dist/server/agent-chat-plugin.js.map +1 -1
  213. package/dist/server/app-name.d.ts +13 -0
  214. package/dist/server/app-name.d.ts.map +1 -0
  215. package/dist/server/app-name.js +41 -0
  216. package/dist/server/app-name.js.map +1 -0
  217. package/dist/server/app-url.d.ts +24 -0
  218. package/dist/server/app-url.d.ts.map +1 -0
  219. package/dist/server/app-url.js +76 -0
  220. package/dist/server/app-url.js.map +1 -0
  221. package/dist/server/auth.d.ts.map +1 -1
  222. package/dist/server/auth.js +50 -0
  223. package/dist/server/auth.js.map +1 -1
  224. package/dist/server/better-auth-instance.d.ts.map +1 -1
  225. package/dist/server/better-auth-instance.js +137 -13
  226. package/dist/server/better-auth-instance.js.map +1 -1
  227. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  228. package/dist/server/core-routes-plugin.js +73 -0
  229. package/dist/server/core-routes-plugin.js.map +1 -1
  230. package/dist/server/create-server.d.ts.map +1 -1
  231. package/dist/server/create-server.js +6 -0
  232. package/dist/server/create-server.js.map +1 -1
  233. package/dist/server/date-utils.d.ts +15 -0
  234. package/dist/server/date-utils.d.ts.map +1 -0
  235. package/dist/server/date-utils.js +41 -0
  236. package/dist/server/date-utils.js.map +1 -0
  237. package/dist/server/email-template.d.ts +51 -0
  238. package/dist/server/email-template.d.ts.map +1 -0
  239. package/dist/server/email-template.js +146 -0
  240. package/dist/server/email-template.js.map +1 -0
  241. package/dist/server/index.d.ts +6 -1
  242. package/dist/server/index.d.ts.map +1 -1
  243. package/dist/server/index.js +6 -1
  244. package/dist/server/index.js.map +1 -1
  245. package/dist/server/onboarding-html.d.ts +3 -0
  246. package/dist/server/onboarding-html.d.ts.map +1 -1
  247. package/dist/server/onboarding-html.js +13 -3
  248. package/dist/server/onboarding-html.js.map +1 -1
  249. package/dist/server/request-context.d.ts +9 -0
  250. package/dist/server/request-context.d.ts.map +1 -1
  251. package/dist/server/request-context.js +10 -0
  252. package/dist/server/request-context.js.map +1 -1
  253. package/dist/server/transcribe-voice.d.ts +26 -0
  254. package/dist/server/transcribe-voice.d.ts.map +1 -0
  255. package/dist/server/transcribe-voice.js +143 -0
  256. package/dist/server/transcribe-voice.js.map +1 -0
  257. package/dist/sharing/access.d.ts +56 -0
  258. package/dist/sharing/access.d.ts.map +1 -0
  259. package/dist/sharing/access.js +149 -0
  260. package/dist/sharing/access.js.map +1 -0
  261. package/dist/sharing/actions/list-resource-shares.d.ts +3 -0
  262. package/dist/sharing/actions/list-resource-shares.d.ts.map +1 -0
  263. package/dist/sharing/actions/list-resource-shares.js +38 -0
  264. package/dist/sharing/actions/list-resource-shares.js.map +1 -0
  265. package/dist/sharing/actions/set-resource-visibility.d.ts +3 -0
  266. package/dist/sharing/actions/set-resource-visibility.d.ts.map +1 -0
  267. package/dist/sharing/actions/set-resource-visibility.js +24 -0
  268. package/dist/sharing/actions/set-resource-visibility.js.map +1 -0
  269. package/dist/sharing/actions/share-resource.d.ts +3 -0
  270. package/dist/sharing/actions/share-resource.d.ts.map +1 -0
  271. package/dist/sharing/actions/share-resource.js +64 -0
  272. package/dist/sharing/actions/share-resource.js.map +1 -0
  273. package/dist/sharing/actions/unshare-resource.d.ts +3 -0
  274. package/dist/sharing/actions/unshare-resource.d.ts.map +1 -0
  275. package/dist/sharing/actions/unshare-resource.js +24 -0
  276. package/dist/sharing/actions/unshare-resource.js.map +1 -0
  277. package/dist/sharing/index.d.ts +11 -0
  278. package/dist/sharing/index.d.ts.map +1 -0
  279. package/dist/sharing/index.js +11 -0
  280. package/dist/sharing/index.js.map +1 -0
  281. package/dist/sharing/registry.d.ts +44 -0
  282. package/dist/sharing/registry.d.ts.map +1 -0
  283. package/dist/sharing/registry.js +54 -0
  284. package/dist/sharing/registry.js.map +1 -0
  285. package/dist/sharing/schema.d.ts +202 -0
  286. package/dist/sharing/schema.d.ts.map +1 -0
  287. package/dist/sharing/schema.js +88 -0
  288. package/dist/sharing/schema.js.map +1 -0
  289. package/dist/styles/agent-native.css +111 -0
  290. package/dist/tailwind.preset.d.ts +2 -2
  291. package/dist/tailwind.preset.d.ts.map +1 -1
  292. package/dist/tailwind.preset.js +27 -7
  293. package/dist/tailwind.preset.js.map +1 -1
  294. package/dist/templates/default/app/global.css +65 -68
  295. package/dist/templates/default/components.json +1 -1
  296. package/dist/templates/default/package.json +2 -4
  297. package/dist/templates/default/vite.config.ts +3 -0
  298. package/dist/templates/workspace-core/package.json +1 -4
  299. package/dist/templates/workspace-core/src/index.ts +1 -1
  300. package/dist/templates/workspace-core/styles/tokens.css +22 -0
  301. package/dist/templates/workspace-core/tsconfig.json +1 -1
  302. package/dist/vite/action-types-plugin.d.ts +5 -0
  303. package/dist/vite/action-types-plugin.d.ts.map +1 -1
  304. package/dist/vite/action-types-plugin.js +129 -28
  305. package/dist/vite/action-types-plugin.js.map +1 -1
  306. package/dist/vite/client.d.ts +6 -0
  307. package/dist/vite/client.d.ts.map +1 -1
  308. package/dist/vite/client.js +18 -1
  309. package/dist/vite/client.js.map +1 -1
  310. package/docs/content/actions.md +169 -74
  311. package/docs/content/agent-teams.md +139 -0
  312. package/docs/content/cloneable-saas.md +98 -0
  313. package/docs/content/creating-templates.md +9 -11
  314. package/docs/content/deployment.md +2 -9
  315. package/docs/content/drop-in-agent.md +200 -0
  316. package/docs/content/enterprise-workspace.md +22 -10
  317. package/docs/content/getting-started.md +34 -19
  318. package/docs/content/integrations.md +3 -3
  319. package/docs/content/key-concepts.md +50 -23
  320. package/docs/content/mcp-clients.md +71 -0
  321. package/docs/content/pure-agent-apps.md +69 -0
  322. package/docs/content/recurring-jobs.md +123 -0
  323. package/docs/content/skills-guide.md +8 -0
  324. package/docs/content/template-analytics.md +190 -0
  325. package/docs/content/template-calendar.md +151 -0
  326. package/docs/content/template-clips.md +55 -0
  327. package/docs/content/template-content.md +141 -0
  328. package/docs/content/template-dispatch.md +58 -0
  329. package/docs/content/template-forms.md +51 -0
  330. package/docs/content/template-mail.md +169 -0
  331. package/docs/content/template-slides.md +218 -0
  332. package/docs/content/template-starter.md +68 -0
  333. package/docs/content/template-video.md +162 -0
  334. package/docs/content/voice-input.md +59 -0
  335. package/docs/content/what-is-agent-native.md +142 -45
  336. package/docs/content/workspace-management.md +1 -0
  337. package/docs/content/{resources.md → workspace.md} +94 -42
  338. package/package.json +20 -19
  339. package/src/templates/default/app/global.css +65 -68
  340. package/src/templates/default/components.json +1 -1
  341. package/src/templates/default/package.json +2 -4
  342. package/src/templates/default/vite.config.ts +3 -0
  343. package/src/templates/workspace-core/package.json +1 -4
  344. package/src/templates/workspace-core/src/index.ts +1 -1
  345. package/src/templates/workspace-core/styles/tokens.css +22 -0
  346. package/src/templates/workspace-core/tsconfig.json +1 -1
  347. package/dist/templates/default/postcss.config.js +0 -6
  348. package/dist/templates/default/tailwind.config.ts +0 -7
  349. package/dist/templates/workspace-core/tailwind.preset.ts +0 -34
  350. package/src/templates/default/postcss.config.js +0 -6
  351. package/src/templates/default/tailwind.config.ts +0 -7
  352. package/src/templates/workspace-core/tailwind.preset.ts +0 -34
@@ -1,10 +1,11 @@
1
1
  /**
2
- * McpClientManager — spawns configured MCP servers over stdio, enumerates
3
- * their tools, and exposes a flat tool registry prefixed with
4
- * `mcp__<server-id>__` so the agent's tool-use loop can call them.
2
+ * McpClientManager — connects to configured MCP servers (stdio or remote
3
+ * Streamable HTTP), enumerates their tools, and exposes a flat tool registry
4
+ * prefixed with `mcp__<server-id>__` so the agent's tool-use loop can call them.
5
5
  *
6
- * The manager is a strict no-op in non-Node runtimes (Cloudflare Workers,
7
- * browsers) `start()` resolves immediately, `getTools()` returns `[]`.
6
+ * Stdio servers are a strict no-op in non-Node runtimes (Cloudflare Workers,
7
+ * browsers). HTTP servers work in any runtime with `fetch`; `reconfigure()`
8
+ * lets callers add or remove servers at runtime without restarting the process.
8
9
  */
9
10
  export const MCP_TOOL_PREFIX = "mcp__";
10
11
  function isNode() {
@@ -31,18 +32,40 @@ export function parseMcpToolName(prefixedName) {
31
32
  toolName: rest.slice(idx + 2),
32
33
  };
33
34
  }
35
+ function sameServerConfig(a, b) {
36
+ const typeA = a.type ?? "stdio";
37
+ const typeB = b.type ?? "stdio";
38
+ if (typeA !== typeB)
39
+ return false;
40
+ if (typeA === "http" && b.type === "http" && a.type === "http") {
41
+ return (a.url === b.url &&
42
+ JSON.stringify(a.headers ?? {}) === JSON.stringify(b.headers ?? {}));
43
+ }
44
+ if (a.type !== "http" && b.type !== "http") {
45
+ return (a.command === b.command &&
46
+ JSON.stringify(a.args ?? []) === JSON.stringify(b.args ?? []) &&
47
+ JSON.stringify(a.env ?? {}) === JSON.stringify(b.env ?? {}) &&
48
+ (a.cwd ?? "") === (b.cwd ?? ""));
49
+ }
50
+ return false;
51
+ }
34
52
  export class McpClientManager {
35
- config;
36
53
  servers = new Map();
37
54
  debug;
38
55
  started = false;
56
+ config;
57
+ sdk = null;
58
+ listeners = new Set();
59
+ /** Serialises reconfigure()/start() — two concurrent callers would
60
+ * otherwise race on `this.config` and on connect/disconnect ordering. */
61
+ reconfigureQueue = Promise.resolve();
39
62
  constructor(config, options = {}) {
40
63
  this.config = config;
41
64
  this.debug = !!options.debug;
42
65
  }
43
- /** True when MCP client support is active (Node runtime + non-empty config). */
66
+ /** True when the manager has any configured servers. */
44
67
  get enabled() {
45
- return (isNode() && !!this.config && Object.keys(this.config.servers).length > 0);
68
+ return !!this.config && Object.keys(this.config.servers).length > 0;
46
69
  }
47
70
  /** List of configured server ids (whether or not they're connected). */
48
71
  get configuredServers() {
@@ -57,76 +80,270 @@ export class McpClientManager {
57
80
  .map((s) => s.id);
58
81
  }
59
82
  /**
60
- * Connect to each configured MCP server over stdio and enumerate tools.
83
+ * Load MCP SDK modules lazily so non-Node bundles don't pull them in.
84
+ * Stdio transport is only loaded when a stdio server is actually configured.
85
+ */
86
+ async loadSdk(needStdio) {
87
+ if (this.sdk) {
88
+ // If we previously loaded without stdio and now need it, top up.
89
+ if (needStdio && !this.sdk.StdioClientTransport && isNode()) {
90
+ try {
91
+ const stdioMod = await import("@modelcontextprotocol/sdk/client/stdio.js");
92
+ this.sdk.StdioClientTransport = stdioMod.StdioClientTransport;
93
+ }
94
+ catch (err) {
95
+ console.warn(`[mcp-client] Failed to load stdio transport: ${err?.message ?? err}.`);
96
+ }
97
+ }
98
+ return this.sdk;
99
+ }
100
+ try {
101
+ const clientMod = await import("@modelcontextprotocol/sdk/client/index.js");
102
+ const httpMod = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
103
+ let StdioClientTransport = null;
104
+ if (needStdio && isNode()) {
105
+ try {
106
+ const stdioMod = await import("@modelcontextprotocol/sdk/client/stdio.js");
107
+ StdioClientTransport = stdioMod.StdioClientTransport;
108
+ }
109
+ catch (err) {
110
+ console.warn(`[mcp-client] Failed to load stdio transport: ${err?.message ?? err}.`);
111
+ }
112
+ }
113
+ this.sdk = {
114
+ Client: clientMod.Client,
115
+ StdioClientTransport,
116
+ StreamableHTTPClientTransport: httpMod.StreamableHTTPClientTransport,
117
+ };
118
+ return this.sdk;
119
+ }
120
+ catch (err) {
121
+ console.warn(`[mcp-client] Failed to load MCP SDK: ${err?.message ?? err}. MCP tools disabled.`);
122
+ return null;
123
+ }
124
+ }
125
+ /**
126
+ * Subscribe to tool-set changes (e.g. after `reconfigure()` adds/removes
127
+ * servers). The listener is called *after* connect/disconnect completes.
128
+ * Returns an unsubscribe function.
129
+ */
130
+ onChange(listener) {
131
+ this.listeners.add(listener);
132
+ return () => {
133
+ this.listeners.delete(listener);
134
+ };
135
+ }
136
+ emitChange() {
137
+ for (const l of this.listeners) {
138
+ try {
139
+ l();
140
+ }
141
+ catch (err) {
142
+ console.warn(`[mcp-client] onChange listener threw: ${err?.message ?? err}`);
143
+ }
144
+ }
145
+ }
146
+ /**
147
+ * Connect to each configured MCP server (stdio or http) and enumerate tools.
61
148
  * Individual server failures are logged and skipped — the manager stays
62
149
  * usable with whichever servers did come up.
150
+ *
151
+ * Queued against `reconfigure()` so a `reconfigure` that lands before
152
+ * `start()` finishes can't race on `this.started` / `this.servers`.
63
153
  */
64
154
  async start() {
155
+ const task = this.reconfigureQueue.then(() => this.startInternal());
156
+ this.reconfigureQueue = task.catch(() => {
157
+ /* failures surface on the caller, not on the queue */
158
+ });
159
+ return task;
160
+ }
161
+ async startInternal() {
65
162
  if (this.started)
66
163
  return;
67
164
  this.started = true;
68
165
  if (!this.enabled)
69
166
  return;
70
- // Dynamic imports so non-Node bundles don't pull in the SDK or node:child_process
71
- let Client;
72
- let StdioClientTransport;
167
+ const needStdio = Object.values(this.config.servers).some((cfg) => (cfg.type ?? "stdio") === "stdio");
168
+ const sdk = await this.loadSdk(needStdio);
169
+ if (!sdk)
170
+ return;
171
+ const entries = Object.entries(this.config.servers);
172
+ await Promise.all(entries.map(async ([id, cfg]) => this.addServer(id, cfg, sdk)));
173
+ this.emitChange();
174
+ }
175
+ /**
176
+ * Create a new ServerEntry and attempt to connect. Logs and records errors
177
+ * on the entry rather than throwing — callers iterate many servers.
178
+ */
179
+ async addServer(id, cfg, sdk) {
180
+ const entry = {
181
+ id,
182
+ config: cfg,
183
+ client: null,
184
+ transport: null,
185
+ tools: [],
186
+ };
187
+ this.servers.set(id, entry);
73
188
  try {
74
- const clientMod = await import("@modelcontextprotocol/sdk/client/index.js");
75
- const stdioMod = await import("@modelcontextprotocol/sdk/client/stdio.js");
76
- Client = clientMod.Client;
77
- StdioClientTransport = stdioMod.StdioClientTransport;
189
+ await this.connectServer(entry, sdk);
190
+ console.log(`[mcp-client] connected to ${id}: ${entry.tools.length} tools`);
78
191
  }
79
192
  catch (err) {
80
- console.warn(`[mcp-client] Failed to load MCP SDK: ${err?.message ?? err}. MCP tools disabled.`);
81
- return;
193
+ entry.error = err?.message ?? String(err);
194
+ console.warn(`[mcp-client] failed to connect to ${id}: ${entry.error}`);
82
195
  }
83
- const entries = Object.entries(this.config.servers);
84
- await Promise.all(entries.map(async ([id, cfg]) => {
85
- const entry = {
86
- id,
87
- config: cfg,
88
- client: null,
89
- transport: null,
90
- tools: [],
91
- };
92
- this.servers.set(id, entry);
196
+ }
197
+ async connectServer(entry, sdk) {
198
+ const cfg = entry.config;
199
+ const { Client } = sdk;
200
+ let transport;
201
+ if (cfg.type === "http") {
202
+ if (!sdk.StreamableHTTPClientTransport) {
203
+ throw new Error("HTTP transport not available");
204
+ }
205
+ const requestInit = {};
206
+ if (cfg.headers && Object.keys(cfg.headers).length > 0) {
207
+ requestInit.headers = cfg.headers;
208
+ }
209
+ transport = new sdk.StreamableHTTPClientTransport(new URL(cfg.url), {
210
+ requestInit,
211
+ });
212
+ }
213
+ else {
214
+ if (!sdk.StdioClientTransport) {
215
+ throw new Error("Stdio transport not available (needs Node runtime with MCP SDK)");
216
+ }
217
+ const { command, args = [], env, cwd } = cfg;
218
+ // Merge env — spawn receives only the keys we pass, so include process.env
219
+ // by default to preserve PATH, HOME, etc.
220
+ const mergedEnv = env ? { ...process.env, ...env } : { ...process.env };
221
+ transport = new sdk.StdioClientTransport({
222
+ command,
223
+ args,
224
+ env: mergedEnv,
225
+ cwd,
226
+ });
227
+ }
228
+ const client = new Client({ name: "agent-native-mcp-client", version: "1.0.0" }, { capabilities: {} });
229
+ // If connect or listTools throws, we still need to release the child
230
+ // process (stdio) or pending HTTP session — otherwise repeated failures
231
+ // leak transports. Assign to the entry only after the handshake succeeds.
232
+ try {
233
+ await client.connect(transport);
234
+ const listed = await client.listTools();
235
+ const rawTools = (listed?.tools ?? []);
236
+ entry.client = client;
237
+ entry.transport = transport;
238
+ entry.tools = rawTools.map((t) => ({
239
+ source: entry.id,
240
+ name: buildPrefixedName(entry.id, t.name),
241
+ originalName: t.name,
242
+ description: t.description ?? t.name,
243
+ inputSchema: (t.inputSchema ?? {
244
+ type: "object",
245
+ properties: {},
246
+ }),
247
+ }));
248
+ }
249
+ catch (err) {
93
250
  try {
94
- await this.connectServer(entry, Client, StdioClientTransport);
95
- console.log(`[mcp-client] connected to ${id}: ${entry.tools.length} tools`);
251
+ if (client?.close)
252
+ await client.close();
96
253
  }
97
- catch (err) {
98
- entry.error = err?.message ?? String(err);
99
- console.warn(`[mcp-client] failed to connect to ${id}: ${entry.error}`);
254
+ catch {
255
+ // ignore
100
256
  }
101
- }));
257
+ try {
258
+ if (transport?.close)
259
+ await transport.close();
260
+ }
261
+ catch {
262
+ // ignore
263
+ }
264
+ throw err;
265
+ }
102
266
  }
103
- async connectServer(entry, Client, StdioClientTransport) {
104
- const { command, args = [], env, cwd } = entry.config;
105
- // Merge env spawn receives only the keys we pass, so include process.env
106
- // by default to preserve PATH, HOME, etc.
107
- const mergedEnv = env ? { ...process.env, ...env } : { ...process.env };
108
- const transport = new StdioClientTransport({
109
- command,
110
- args,
111
- env: mergedEnv,
112
- cwd,
267
+ /**
268
+ * Replace the configured server set. Servers that appear in the new config
269
+ * under a different shape are reconnected; unchanged entries stay live;
270
+ * removed entries are disconnected. Safe to call while `start()` is in
271
+ * flight or after it has completed.
272
+ *
273
+ * Serialised against `start()` and any other `reconfigure()` call via the
274
+ * internal queue — two concurrent mutations would otherwise interleave on
275
+ * `this.config` and on connect/disconnect ordering.
276
+ *
277
+ * Returns a summary describing what happened for logging / UI feedback.
278
+ */
279
+ async reconfigure(newConfig) {
280
+ const task = this.reconfigureQueue.then(() => this.reconfigureInternal(newConfig));
281
+ this.reconfigureQueue = task.catch(() => {
282
+ /* failures surface on the caller, not on the queue */
113
283
  });
114
- const client = new Client({ name: "agent-native-mcp-client", version: "1.0.0" }, { capabilities: {} });
115
- await client.connect(transport);
116
- const listed = await client.listTools();
117
- const rawTools = (listed?.tools ?? []);
118
- entry.client = client;
119
- entry.transport = transport;
120
- entry.tools = rawTools.map((t) => ({
121
- source: entry.id,
122
- name: buildPrefixedName(entry.id, t.name),
123
- originalName: t.name,
124
- description: t.description ?? t.name,
125
- inputSchema: (t.inputSchema ?? {
126
- type: "object",
127
- properties: {},
128
- }),
284
+ return task;
285
+ }
286
+ async reconfigureInternal(newConfig) {
287
+ const prev = this.config;
288
+ this.config = newConfig;
289
+ const prevServers = prev?.servers ?? {};
290
+ const nextServers = newConfig?.servers ?? {};
291
+ const added = [];
292
+ const removed = [];
293
+ const unchanged = [];
294
+ const reconnected = [];
295
+ // Remove entries that vanished or changed shape.
296
+ for (const id of Object.keys(prevServers)) {
297
+ if (!(id in nextServers)) {
298
+ removed.push(id);
299
+ }
300
+ else if (!sameServerConfig(prevServers[id], nextServers[id])) {
301
+ reconnected.push(id);
302
+ }
303
+ else {
304
+ unchanged.push(id);
305
+ }
306
+ }
307
+ for (const id of Object.keys(nextServers)) {
308
+ if (!(id in prevServers))
309
+ added.push(id);
310
+ }
311
+ const toDisconnect = [...removed, ...reconnected];
312
+ await Promise.all(toDisconnect.map(async (id) => {
313
+ const entry = this.servers.get(id);
314
+ if (!entry)
315
+ return;
316
+ this.servers.delete(id);
317
+ try {
318
+ if (entry.client?.close)
319
+ await entry.client.close();
320
+ }
321
+ catch {
322
+ // ignore
323
+ }
324
+ try {
325
+ if (entry.transport?.close)
326
+ await entry.transport.close();
327
+ }
328
+ catch {
329
+ // ignore
330
+ }
129
331
  }));
332
+ const toConnect = [...added, ...reconnected];
333
+ if (toConnect.length > 0) {
334
+ const needStdio = toConnect.some((id) => (nextServers[id].type ?? "stdio") === "stdio");
335
+ const sdk = await this.loadSdk(needStdio);
336
+ if (sdk) {
337
+ await Promise.all(toConnect.map((id) => this.addServer(id, nextServers[id], sdk)));
338
+ }
339
+ }
340
+ // If the manager was never started (e.g. empty initial config) but now has
341
+ // servers, mark it started so subsequent start() calls don't duplicate work.
342
+ if (!this.started && Object.keys(nextServers).length > 0) {
343
+ this.started = true;
344
+ }
345
+ this.emitChange();
346
+ return { added, removed, unchanged, reconnected };
130
347
  }
131
348
  /** Flattened tool list across all connected servers. */
132
349
  getTools() {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp-client/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/mcp-client/manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,CAAC,MAAM,eAAe,GAAG,OAAO,CAAC;AAwBvC,SAAS,MAAM;IACb,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,CAAC,CAAE,OAAe,CAAC,QAAQ,EAAE,IAAI;QACjC,OAAQ,OAAe,CAAC,QAAQ,CAAC,IAAI,KAAK,QAAQ,CACnD,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,QAAgB;IAC3D,OAAO,GAAG,eAAe,GAAG,QAAQ,KAAK,QAAQ,EAAE,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,YAAoB;IAEpB,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QAC5B,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;KAC9B,CAAC;AACJ,CAAC;AAOD,SAAS,gBAAgB,CAAC,CAAkB,EAAE,CAAkB;IAC9D,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;IAChC,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;IAChC,IAAI,KAAK,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/D,OAAO,CACL,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG;YACf,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,CACpE,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3C,OAAO,CACL,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO;YACvB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC7D,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;YAC3D,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAChC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAQD,MAAM,OAAO,gBAAgB;IACV,OAAO,GAA6B,IAAI,GAAG,EAAE,CAAC;IAC9C,KAAK,CAAU;IACxB,OAAO,GAAG,KAAK,CAAC;IAChB,MAAM,CAAmB;IACzB,GAAG,GAAsB,IAAI,CAAC;IACrB,SAAS,GAAoB,IAAI,GAAG,EAAE,CAAC;IACxD;6EACyE;IACjE,gBAAgB,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAE/D,YAAY,MAAwB,EAAE,UAAmC,EAAE;QACzE,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAC/B,CAAC;IAED,wDAAwD;IACxD,IAAI,OAAO;QACT,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,wEAAwE;IACxE,IAAI,iBAAiB;QACnB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,2EAA2E;IAC3E,IAAI,gBAAgB;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aACrC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,OAAO,CAAC,SAAkB;QACtC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,iEAAiE;YACjE,IAAI,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,EAAE,EAAE,CAAC;gBAC5D,IAAI,CAAC;oBACH,MAAM,QAAQ,GACZ,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;oBAC5D,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;gBAChE,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,OAAO,CAAC,IAAI,CACV,gDAAgD,GAAG,EAAE,OAAO,IAAI,GAAG,GAAG,CACvE,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO,IAAI,CAAC,GAAG,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,SAAS,GACb,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;YAC5D,MAAM,OAAO,GACX,MAAM,MAAM,CAAC,oDAAoD,CAAC,CAAC;YACrE,IAAI,oBAAoB,GAAQ,IAAI,CAAC;YACrC,IAAI,SAAS,IAAI,MAAM,EAAE,EAAE,CAAC;gBAC1B,IAAI,CAAC;oBACH,MAAM,QAAQ,GACZ,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;oBAC5D,oBAAoB,GAAG,QAAQ,CAAC,oBAAoB,CAAC;gBACvD,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,OAAO,CAAC,IAAI,CACV,gDAAgD,GAAG,EAAE,OAAO,IAAI,GAAG,GAAG,CACvE,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,IAAI,CAAC,GAAG,GAAG;gBACT,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,oBAAoB;gBACpB,6BAA6B,EAAE,OAAO,CAAC,6BAA6B;aACrE,CAAC;YACF,OAAO,IAAI,CAAC,GAAG,CAAC;QAClB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CACV,wCAAwC,GAAG,EAAE,OAAO,IAAI,GAAG,uBAAuB,CACnF,CAAC;YACF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,QAAoB;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAEO,UAAU;QAChB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,CAAC,EAAE,CAAC;YACN,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CACV,yCAAyC,GAAG,EAAE,OAAO,IAAI,GAAG,EAAE,CAC/D,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACtC,sDAAsD;QACxD,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,aAAa;QACzB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO;QAE1B,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CACxD,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,OAAO,CAC3C,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,GAAG;YAAE,OAAO;QAEjB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAC/D,CAAC;QACF,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,SAAS,CACrB,EAAU,EACV,GAAoB,EACpB,GAAe;QAEf,MAAM,KAAK,GAAgB;YACzB,EAAE;YACF,MAAM,EAAE,GAAG;YACX,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI;YACf,KAAK,EAAE,EAAE;SACV,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CACT,6BAA6B,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CAC/D,CAAC;QACJ,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,KAAK,GAAG,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,KAAkB,EAClB,GAAe;QAEf,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;QAEvB,IAAI,SAAc,CAAC;QACnB,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,6BAA6B,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,WAAW,GAA4B,EAAE,CAAC;YAChD,IAAI,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvD,WAAW,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;YACpC,CAAC;YACD,SAAS,GAAG,IAAI,GAAG,CAAC,6BAA6B,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;gBAClE,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;gBAC9B,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YAC7C,2EAA2E;YAC3E,0CAA0C;YAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YACxE,SAAS,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC;gBACvC,OAAO;gBACP,IAAI;gBACJ,GAAG,EAAE,SAAmC;gBACxC,GAAG;aACJ,CAAC,CAAC;QACL,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,OAAO,EAAE,EACrD,EAAE,YAAY,EAAE,EAAE,EAAE,CACrB,CAAC;QAEF,qEAAqE;QACrE,wEAAwE;QACxE,0EAA0E;QAC1E,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;YACxC,MAAM,QAAQ,GAIT,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAU,CAAC;YAEpC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YACtB,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;YAC5B,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,MAAM,EAAE,KAAK,CAAC,EAAE;gBAChB,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;gBACzC,YAAY,EAAE,CAAC,CAAC,IAAI;gBACpB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI;gBACpC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI;oBAC7B,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf,CAA4B;aAC9B,CAAC,CAAC,CAAC;QACN,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,IAAI,MAAM,EAAE,KAAK;oBAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,SAAS,EAAE,KAAK;oBAAE,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,WAAW,CAAC,SAA2B;QAM3C,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,CAC3C,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CACpC,CAAC;QACF,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;YACtC,sDAAsD;QACxD,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,SAA2B;QAM3D,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAExB,MAAM,WAAW,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,WAAW,GAAa,EAAE,CAAC;QAEjC,iDAAiD;QACjD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACnB,CAAC;iBAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC/D,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,EAAE,IAAI,WAAW,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,MAAM,YAAY,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,WAAW,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,GAAG,CACf,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK;oBAAE,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK;oBAAE,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,EAAE,GAAG,WAAW,CAAC,CAAC;QAC7C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAC9B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,OAAO,CACtD,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1C,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,OAAO,CAAC,GAAG,CACf,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2EAA2E;QAC3E,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IACpD,CAAC;IAED,wDAAwD;IACxD,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAc,EAAE,CAAC;QAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,YAAoB,EAAE,IAAa;QAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,cAAc,YAAY,mEAAmE,CAC9F,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CACb,eAAe,MAAM,CAAC,QAAQ,qBAC5B,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EACtC,EAAE,CACH,CAAC;QACJ,CAAC;QACD,2EAA2E;QAC3E,iCAAiC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAC/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,eAAe,MAAM,CAAC,QAAQ,2BAA2B,MAAM,CAAC,QAAQ,GAAG,CAC5E,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YACzC,IAAI,EAAE,MAAM,CAAC,QAAQ;YACrB,SAAS,EACP,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAC9B,CAAC,CAAE,IAAgC;gBACnC,CAAC,CAAC,EAAE;SACT,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yDAAyD;IACzD,KAAK,CAAC,IAAI;QACR,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,MAAM,OAAO,CAAC,GAAG,CACf,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK;oBAAE,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtD,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK;oBAAE,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,SAAS;QAOP,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxC,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,WAAW,EAAE,CAAC,CAAC,WAAW;SAC3B,CAAC,CAAC,CAAC;QACJ,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QAClD,CAAC;QACD,OAAO;YACL,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,KAAK;YACL,MAAM;SACP,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Persistent store for user-added remote MCP servers.
3
+ *
4
+ * Servers added through the settings UI live in the framework's `settings`
5
+ * table, keyed by scope:
6
+ * - User scope: `u:<email>:mcp-servers-remote`
7
+ * - Org scope: `o:<orgId>:mcp-servers-remote`
8
+ *
9
+ * Both scopes store the same shape — a list of `StoredRemoteMcpServer`
10
+ * records. The running MCP manager merges this list with the file-based
11
+ * `mcp.config.json` on startup and after every mutation.
12
+ */
13
+ import type { McpHttpServerConfig } from "./config.js";
14
+ export type RemoteMcpScope = "user" | "org";
15
+ export interface StoredRemoteMcpServer {
16
+ /** Stable unique id — used for removal / URLs. */
17
+ id: string;
18
+ /** Human-readable name. Also used as the MCP server id (prefixed with scope). */
19
+ name: string;
20
+ /** Streamable HTTP MCP server URL. */
21
+ url: string;
22
+ /** Optional headers to pass (e.g. `Authorization: Bearer …`). */
23
+ headers?: Record<string, string>;
24
+ /** Optional description shown in the UI. */
25
+ description?: string;
26
+ /** ms since epoch. */
27
+ createdAt: number;
28
+ }
29
+ /**
30
+ * Validate a candidate MCP server name — used as a key in the merged config
31
+ * and as part of the prefixed tool name (`mcp__<merged-key>__<tool>`).
32
+ *
33
+ * Allowed: letters, digits, hyphen; 1–40 chars. Lowercased. Underscores are
34
+ * excluded on purpose — the merged-key format uses `_` as a separator between
35
+ * `<scope>`, `<owner>`, and `<name>`, so allowing `_` in names would make the
36
+ * parse ambiguous.
37
+ */
38
+ export declare function normalizeServerName(input: string): string;
39
+ /**
40
+ * Short, deterministic, URL-safe hash of an email. Used as the owner
41
+ * discriminator in user-scope merged keys so two users with the same server
42
+ * name don't collide in the global MCP manager.
43
+ */
44
+ export declare function hashEmail(email: string): string;
45
+ /** Reject obviously-wrong URLs. Allows http only for localhost. */
46
+ export declare function validateRemoteUrl(raw: string): {
47
+ ok: boolean;
48
+ url?: URL;
49
+ error?: string;
50
+ };
51
+ export declare function listRemoteServers(scope: RemoteMcpScope, scopeId: string): Promise<StoredRemoteMcpServer[]>;
52
+ export declare function addRemoteServer(scope: RemoteMcpScope, scopeId: string, input: {
53
+ name: string;
54
+ url: string;
55
+ headers?: Record<string, string>;
56
+ description?: string;
57
+ }): Promise<{
58
+ ok: true;
59
+ server: StoredRemoteMcpServer;
60
+ } | {
61
+ ok: false;
62
+ error: string;
63
+ }>;
64
+ export declare function removeRemoteServer(scope: RemoteMcpScope, scopeId: string, id: string): Promise<boolean>;
65
+ /**
66
+ * Project a stored server into the runtime `McpHttpServerConfig` shape that
67
+ * `McpClientManager` consumes. The merged-config key is the scope + name
68
+ * so a user-scope and org-scope server can both share a readable name
69
+ * without clobbering each other.
70
+ */
71
+ export declare function toHttpServerConfig(stored: StoredRemoteMcpServer): McpHttpServerConfig;
72
+ /**
73
+ * Build the merged-config key for a stored server.
74
+ *
75
+ * The key encodes the owning scope + owner identity so two users adding a
76
+ * server called `zapier` produce distinct ids (`user_ab12cd34ef_zapier` vs
77
+ * `user_99aa88bb77_zapier`) and Alice's tool calls never route through Bob's
78
+ * credentials in a shared-process deployment.
79
+ *
80
+ * - User scope: `user_<emailhash>_<name>`
81
+ * - Org scope: `org_<orgId>_<name>`
82
+ *
83
+ * `ownerId` is the raw email for user scope, and the org id for org scope.
84
+ */
85
+ export declare function mergedConfigKey(scope: RemoteMcpScope, stored: StoredRemoteMcpServer, ownerId: string): string;
86
+ /**
87
+ * Parse a merged key (or a full prefixed tool name like
88
+ * `mcp__user_abcd1234ef_zapier__run-task`) back into its scope + owner + name
89
+ * components. Returns null for non-merged keys (e.g. stdio file-config servers
90
+ * like `claude-in-chrome`) so callers can treat them as always-visible.
91
+ *
92
+ * `hub_<orgId>_<name>` entries (pulled from a remote hub via
93
+ * `hub-client.ts`) project to `scope: "org"` so they pass through the same
94
+ * per-request visibility gate as locally-stored org servers — the tool is
95
+ * only visible to requests whose active org matches the hub entry's org.
96
+ */
97
+ export declare function parseMergedKey(keyOrToolName: string): {
98
+ scope: RemoteMcpScope;
99
+ owner: string;
100
+ name: string;
101
+ } | null;
102
+ //# sourceMappingURL=remote-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-store.d.ts","sourceRoot":"","sources":["../../src/mcp-client/remote-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAaH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAIvD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,CAAC;AAE5C,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAUD;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMzD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK/C;AAUD,mEAAmE;AACnE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG;IAC9C,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAgBA;AA4BD,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAElC;AAED,wBAAsB,eAAe,CACnC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;IACL,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA,OAAO,CACR;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,qBAAqB,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAC3E,CAwBA;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,MAAM,EACf,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,qBAAqB,GAC5B,mBAAmB,CAOrB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,MAAM,GACd,MAAM,CAGR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,aAAa,EAAE,MAAM,GACpB;IAAE,KAAK,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAkB/D"}