@xopcai/xopc 0.0.369 → 0.0.371

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 (418) hide show
  1. package/README.md +59 -174
  2. package/README.zh-CN.md +59 -174
  3. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_md.js +131 -0
  4. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/_u64.js +30 -0
  5. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha2.js +252 -0
  6. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/sha256.js +16 -0
  7. package/dist/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/esm/utils.js +66 -0
  8. package/dist/browser-ext/dist/sidepanel.js +21 -1
  9. package/dist/browser-ext/manifest.json +1 -1
  10. package/dist/extensions/telegram/xopc.extension.json +1 -1
  11. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Stj17S9u.js → agent-avatar-dicebear-C8MqXy6W.js} +1 -1
  12. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-BLaL4law.js +1 -0
  13. package/dist/gateway/static/root/assets/agent-plugin-dialog-BrysdA6F.js +1 -0
  14. package/dist/gateway/static/root/assets/agents-BJRyMNx2.js +66 -0
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-pJFe6M6c.js → app-management-settings-panel-Bi02swpZ.js} +1 -1
  16. package/dist/gateway/static/root/assets/{appearance-settings-BrxSpBWa.js → appearance-settings-rr0qirDm.js} +1 -1
  17. package/dist/gateway/static/root/assets/{apps-page-DegSl5Lh.js → apps-page-Sz3wl3lV.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-BZQ_VHjp.js → automations-page-DqdbP0hD.js} +1 -1
  19. package/dist/gateway/static/root/assets/automations-workspace-CxgKlA5d.js +6 -0
  20. package/dist/gateway/static/root/assets/{block-editor-3XjFv3kK.js → block-editor-CfVR1zGa.js} +3 -3
  21. package/dist/gateway/static/root/assets/browser-automations-page-DeYnh3mY.js +3 -0
  22. package/dist/gateway/static/root/assets/{browser-settings-page-ch2_bQF0.js → browser-settings-page-DDZvlGCD.js} +2 -2
  23. package/dist/gateway/static/root/assets/{capabilities-DO-vfNKI.js → capabilities-CY4SiHcP.js} +1 -1
  24. package/dist/gateway/static/root/assets/{capabilities-B48r0DDa.js → capabilities-gjQtMhKu.js} +1 -1
  25. package/dist/gateway/static/root/assets/capabilities-page-Bl6PZqx3.js +2 -0
  26. package/dist/gateway/static/root/assets/{capabilities-settings-panel-NckMsJ5N.js → capabilities-settings-panel-B-MM4LJA.js} +4 -4
  27. package/dist/gateway/static/root/assets/{capability-header-actions-CY8KCO9j.js → capability-header-actions-CAiY7HK1.js} +1 -1
  28. package/dist/gateway/static/root/assets/{channels-CHOS2CGa.js → channels-D1_fDkhu.js} +1 -1
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-Bwknnb4c.js → chat-terminal-dock-D6slpF2a.js} +2 -2
  30. package/dist/gateway/static/root/assets/{computer-settings-page-B2xeFCSt.js → computer-settings-page-D1n_uQHN.js} +1 -1
  31. package/dist/gateway/static/root/assets/{connector-service-page-C83DnAqK.js → connector-service-page-FvSCyJzn.js} +1 -1
  32. package/dist/gateway/static/root/assets/connectors-page-DroD-gQn.js +1 -0
  33. package/dist/gateway/static/root/assets/copy-text-row-C1gaJwlZ.js +1 -0
  34. package/dist/gateway/static/root/assets/{date-picker-Bq9GR-DU.js → date-picker-Bl-HqvGU.js} +1 -1
  35. package/dist/gateway/static/root/assets/dependency-picker-DY4nU-HL.js +1 -0
  36. package/dist/gateway/static/root/assets/{desktop-pet-BwsbQw8V.js → desktop-pet-_A89B2xw.js} +1 -1
  37. package/dist/gateway/static/root/assets/{desktop-pet-settings-sL9i44pP.js → desktop-pet-settings-BJWkGynu.js} +1 -1
  38. package/dist/gateway/static/root/assets/device-pairing-wizard-DJ_ITvkI.js +1 -0
  39. package/dist/gateway/static/root/assets/{directory-picker-path-field-BFlDmsS5.js → directory-picker-path-field-Bj2Cpmxs.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-debug-page-7Z1Tp7-w.js → extension-debug-page-BfAtjhoK.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-page-uGqvb8QX.js → extension-page-BFjc1zDp.js} +1 -1
  42. package/dist/gateway/static/root/assets/{extension-provider-xlSyz4Z6.js → extension-provider-Br6LXyIj.js} +1 -1
  43. package/dist/gateway/static/root/assets/{extension-settings-page-CKHgrjOs.js → extension-settings-page-oAwllsMb.js} +1 -1
  44. package/dist/gateway/static/root/assets/{fallback-models-BwQg0G1D.js → fallback-models-KHd6tw_t.js} +1 -1
  45. package/dist/gateway/static/root/assets/gateway-realtime-F6D4A7N5.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-settings-BAQnSEMJ.js → gateway-settings-BIyhyiOq.js} +1 -1
  47. package/dist/gateway/static/root/assets/home-page-CEjaIUTF.js +2 -0
  48. package/dist/gateway/static/root/assets/{imports-page-re1_Nh64.js → imports-page-ClFqRiGQ.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-BGBkIIzM.css +1 -0
  50. package/dist/gateway/static/root/assets/index-GBFmI8im.js +106 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B_xja9LN.js → keyboard-shortcuts-settings-Ca9_GJSQ.js} +1 -1
  52. package/dist/gateway/static/root/assets/{local-app-workbench-page-CErdCrPX.js → local-app-workbench-page-BaK9zX1-.js} +1 -1
  53. package/dist/gateway/static/root/assets/{local-apps-page-BPL2RXdK.js → local-apps-page-1CjSftZ3.js} +1 -1
  54. package/dist/gateway/static/root/assets/local-session-drafts-pox8evDV.js +1 -0
  55. package/dist/gateway/static/root/assets/logs-page-6joZBbcx.js +2 -0
  56. package/dist/gateway/static/root/assets/management-settings-Cnubkklb.js +1 -0
  57. package/dist/gateway/static/root/assets/note-detail-panel-B6DHbMzT.js +5 -0
  58. package/dist/gateway/static/root/assets/notes-page-CGZkIKdi.js +8 -0
  59. package/dist/gateway/static/root/assets/{page-context-capture-button-tf77xIz3.js → page-context-capture-button-y3QmhTu2.js} +1 -1
  60. package/dist/gateway/static/root/assets/personal-page-C_roXCJB.js +1 -0
  61. package/dist/gateway/static/root/assets/{product-open-page-Dc3Y-Y7J.js → product-open-page-CSRYWt0f.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-preview-content-MG_hmVA3.js → product-preview-content-DuOML6gs.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-v7xtnvha.js +1 -0
  64. package/dist/gateway/static/root/assets/{projects-page-MllfNLGA.js → projects-page-BuJCBT6n.js} +1 -1
  65. package/dist/gateway/static/root/assets/{remote-access-hub-Bs-C70el.js → remote-access-hub-DpHnyBnG.js} +1 -1
  66. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DpJ5jNzR.js → runtime-tools-settings-panel-DTMTL0hy.js} +1 -1
  67. package/dist/gateway/static/root/assets/{scenes-page-Dpxamkw6.js → scenes-page-B0JqO_fM.js} +2 -2
  68. package/dist/gateway/static/root/assets/{schema-form-DUeyQ1zh.js → schema-form-g4z7GH4W.js} +1 -1
  69. package/dist/gateway/static/root/assets/{send-session-input-Dgn4BRk_.js → send-session-input-BW40VHiL.js} +1 -1
  70. package/dist/gateway/static/root/assets/session-manager-BqlvrjPE.js +16 -0
  71. package/dist/gateway/static/root/assets/sessions-page-CftImbH7.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-BkvbSieZ.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-page-DouHuBXt.js → settings-page-YD-U8BVw.js} +1 -1
  74. package/dist/gateway/static/root/assets/setup-status-panel-q_X3kxw2.js +1 -0
  75. package/dist/gateway/static/root/assets/{share-link-dialog-DJTabLAM.js → share-link-dialog-HCHM8qnf.js} +1 -1
  76. package/dist/gateway/static/root/assets/{share-preview-page-jw7h4t_B.js → share-preview-page-Ce6FNWt1.js} +1 -1
  77. package/dist/gateway/static/root/assets/shares-settings-KHRg_-03.js +1 -0
  78. package/dist/gateway/static/root/assets/{skill-api-CfyX_0zN.js → skill-api-BpqDMkNB.js} +1 -1
  79. package/dist/gateway/static/root/assets/skills-page-Bnfn51ks.js +2 -0
  80. package/dist/gateway/static/root/assets/{system-settings-panel-DWf256TE.js → system-settings-panel-CncvC2CI.js} +1 -1
  81. package/dist/gateway/static/root/assets/{task-detail-page-DE6N1ZQe.js → task-detail-page-BVJKdnMC.js} +2 -2
  82. package/dist/gateway/static/root/assets/{tunnel-api-BBm9esrY.js → tunnel-api-g7etuoaT.js} +1 -1
  83. package/dist/gateway/static/root/assets/{usage-page-C93x89uW.js → usage-page-Dao1I-5F.js} +1 -1
  84. package/dist/gateway/static/root/assets/{use-composer-attachments-C7Gaaai1.js → use-composer-attachments-DJya1hIL.js} +1 -1
  85. package/dist/gateway/static/root/assets/use-file-preview-expanded-C5ONO7sF.js +2 -0
  86. package/dist/gateway/static/root/assets/user-model-page-jr986ucl.js +2 -0
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-Bs2MKiTv.js → work-discovery-overlay-CC3mr7tX.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BR_U_snV.js → workflow-run-setup-panel-CqpXZJxs.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-DOk6tBbK.js +6 -0
  90. package/dist/gateway/static/root/assets/{workspace-api-Si2o3inw.js → workspace-api-WhbMvdBE.js} +2 -2
  91. package/dist/gateway/static/root/index.html +18 -20
  92. package/dist/package.js +1 -1
  93. package/dist/packages/endpoint-tools-client/src/index.js +189 -0
  94. package/dist/packages/endpoint-tools-protocol/src/bridge.js +105 -0
  95. package/dist/packages/endpoint-tools-protocol/src/index.js +95 -2
  96. package/dist/packages/endpoint-tools-protocol/src/location.js +109 -0
  97. package/dist/packages/endpoint-tools-protocol/src/personal.js +149 -0
  98. package/dist/packages/gateway-contract/src/session-input-command.js +30 -5
  99. package/dist/src/agent/agent-manager.js +23 -27
  100. package/dist/src/agent/background-review/run-background-review.js +1 -1
  101. package/dist/src/agent/embedded/codemode-extension.d.ts +7 -0
  102. package/dist/src/agent/embedded/codemode-extension.js +232 -0
  103. package/dist/src/agent/embedded/codemode-output.d.ts +2 -0
  104. package/dist/src/agent/embedded/codemode-output.js +34 -0
  105. package/dist/src/agent/embedded/external-tool-discovery.d.ts +6 -0
  106. package/dist/src/agent/embedded/external-tool-discovery.js +60 -0
  107. package/dist/src/agent/embedded/model-runtime.js +5 -2
  108. package/dist/src/agent/embedded/run-for-session.js +10 -1
  109. package/dist/src/agent/embedded/run-turn.js +10 -3
  110. package/dist/src/agent/embedded/session-runner.d.ts +9 -1
  111. package/dist/src/agent/embedded/session-runner.js +111 -23
  112. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +2 -0
  113. package/dist/src/agent/embedded/session-tool-result-guard.js +17 -0
  114. package/dist/src/agent/embedded/subscribe-session.js +14 -4
  115. package/dist/src/agent/embedded/tool-metadata.d.ts +15 -0
  116. package/dist/src/agent/embedded/tool-metadata.js +38 -0
  117. package/dist/src/agent/embedded/tool-search-extension.d.ts +5 -0
  118. package/dist/src/agent/embedded/tool-search-extension.js +31 -0
  119. package/dist/src/agent/embedded/types.d.ts +7 -0
  120. package/dist/src/agent/embedded/xopc-tools-bridge.js +6 -0
  121. package/dist/src/agent/external-tools/endpoint-provider.d.ts +1 -1
  122. package/dist/src/agent/external-tools/endpoint-provider.js +174 -53
  123. package/dist/src/agent/external-tools/extension-provider.js +8 -1
  124. package/dist/src/agent/external-tools/gateway-tools.d.ts +1 -1
  125. package/dist/src/agent/external-tools/gateway-tools.js +45 -22
  126. package/dist/src/agent/external-tools/index.js +46 -14
  127. package/dist/src/agent/external-tools/memory-provider.js +8 -1
  128. package/dist/src/agent/external-tools/read-policy.js +2 -1
  129. package/dist/src/agent/external-tools/service.d.ts +2 -0
  130. package/dist/src/agent/external-tools/service.js +25 -3
  131. package/dist/src/agent/external-tools/tool-registry.d.ts +14 -0
  132. package/dist/src/agent/external-tools/tool-registry.js +14 -0
  133. package/dist/src/agent/external-tools/types.d.ts +8 -1
  134. package/dist/src/agent/external-tools/types.js +0 -1
  135. package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
  136. package/dist/src/agent/mcp/config.d.ts +18 -0
  137. package/dist/src/agent/mcp/{bundle-mcp-config.js → config.js} +8 -25
  138. package/dist/src/agent/mcp/native-mcp.d.ts +6 -0
  139. package/dist/src/agent/mcp/native-mcp.js +73 -0
  140. package/dist/src/agent/service.js +3 -6
  141. package/dist/src/agent/skills/index.js +1 -1
  142. package/dist/src/agent/skills/installer.js +1 -1
  143. package/dist/src/agent/skills/managed-store.js +1 -1
  144. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  145. package/dist/src/agent/skills/skill-manager.js +1 -1
  146. package/dist/src/agent/skills/skill-sources.js +1 -1
  147. package/dist/src/agent/source-context/index.d.ts +0 -1
  148. package/dist/src/agent/source-context/index.js +1 -2
  149. package/dist/src/agent/source-context/injector.js +1 -0
  150. package/dist/src/agent/source-context/types.d.ts +2 -2
  151. package/dist/src/agent/source-context/types.js +1 -1
  152. package/dist/src/agent/tools/cli-clarify.js +1 -1
  153. package/dist/src/agent/tools/codemode-permissions.d.ts +4 -0
  154. package/dist/src/agent/tools/codemode-permissions.js +23 -0
  155. package/dist/src/agent/tools/dataBatch.js +3 -1
  156. package/dist/src/agent/tools/delegation-parent-policy.js +1 -4
  157. package/dist/src/agent/tools/factory.js +4 -3
  158. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  159. package/dist/src/agent/transcript/provider-capabilities.js +0 -1
  160. package/dist/src/agent/transcript/transcript-policy.js +1 -2
  161. package/dist/src/agent-catalog/capabilities.js +2 -2
  162. package/dist/src/agent-catalog/migrations/legacy-config-cutover.js +1 -1
  163. package/dist/src/agent-catalog/repository.js +1 -1
  164. package/dist/src/agent-config/schema.d.ts +28 -0
  165. package/dist/src/agent-config/schema.js +7 -0
  166. package/dist/src/auth/credentials.js +7 -20
  167. package/dist/src/auth/model-credential-store.js +11 -4
  168. package/dist/src/auth/oauth/index.d.ts +1 -1
  169. package/dist/src/auth/oauth/index.js +3 -3
  170. package/dist/src/auth/oauth/openai.d.ts +2 -0
  171. package/dist/src/auth/oauth/openai.js +90 -0
  172. package/dist/src/auth/oauth/registry.js +3 -3
  173. package/dist/src/auth/oauth/types.d.ts +1 -0
  174. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  175. package/dist/src/auth/sync-provider-auth.js +5 -0
  176. package/dist/src/automations/capabilities/drafts.js +1 -1
  177. package/dist/src/bootstrap/application-state.js +1 -1
  178. package/dist/src/capabilities/runtime/dispatcher.js +1 -1
  179. package/dist/src/capabilities/runtime/product.js +1 -1
  180. package/dist/src/chat-commands/builtins/model.js +2 -2
  181. package/dist/src/cli/command-manifest.js +1 -1
  182. package/dist/src/cli/commands/agents.js +1 -1
  183. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  184. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  185. package/dist/src/cli/commands/extension-agent-plugin.js +0 -19
  186. package/dist/src/cli/commands/mcp.js +36 -2
  187. package/dist/src/cli/commands/models.js +2 -2
  188. package/dist/src/cli/commands/onboard/model.js +2 -2
  189. package/dist/src/cli/utils/init-workspace-core.js +1 -1
  190. package/dist/src/cli/utils/oauth-login.js +2 -2
  191. package/dist/src/config/agent-profile.js +1 -1
  192. package/dist/src/config/index.js +3 -3
  193. package/dist/src/config/mcp-config-normalize.d.ts +0 -3
  194. package/dist/src/config/mcp-config-normalize.js +2 -22
  195. package/dist/src/config/models-json.d.ts +0 -5
  196. package/dist/src/config/models-json.js +13 -4
  197. package/dist/src/config/paths.d.ts +0 -1
  198. package/dist/src/config/paths.js +1 -4
  199. package/dist/src/config/schema.d.ts +130 -36
  200. package/dist/src/config/schema.js +52 -35
  201. package/dist/src/connectors/auth-provider-registry.d.ts +1 -1
  202. package/dist/src/connectors/auth-provider-registry.js +1 -21
  203. package/dist/src/connectors/china-catalog.js +5 -5
  204. package/dist/src/connectors/connection-recovery-service.d.ts +1 -6
  205. package/dist/src/connectors/connection-recovery-service.js +3 -105
  206. package/dist/src/connectors/health.d.ts +1 -2
  207. package/dist/src/connectors/health.js +2 -101
  208. package/dist/src/connectors/types.d.ts +1 -1
  209. package/dist/src/endpoint-tools/binding-service.d.ts +2 -0
  210. package/dist/src/endpoint-tools/binding-service.js +14 -2
  211. package/dist/src/endpoint-tools/bridge-host.d.ts +15 -0
  212. package/dist/src/endpoint-tools/bridge-host.js +166 -0
  213. package/dist/src/endpoint-tools/bridge.d.ts +27 -0
  214. package/dist/src/endpoint-tools/bridge.js +88 -0
  215. package/dist/src/endpoint-tools/capability-catalog.d.ts +2 -0
  216. package/dist/src/endpoint-tools/capability-catalog.js +8 -0
  217. package/dist/src/endpoint-tools/grant-service.d.ts +69 -0
  218. package/dist/src/endpoint-tools/grant-service.js +113 -0
  219. package/dist/src/endpoint-tools/index.js +1 -1
  220. package/dist/src/endpoint-tools/invocation-service.js +21 -4
  221. package/dist/src/endpoint-tools/location-task.d.ts +22 -0
  222. package/dist/src/endpoint-tools/location-task.js +114 -0
  223. package/dist/src/endpoint-tools/policy.js +21 -1
  224. package/dist/src/endpoint-tools/registry.d.ts +2 -0
  225. package/dist/src/endpoint-tools/registry.js +9 -0
  226. package/dist/src/endpoint-tools/result-projector.d.ts +15 -0
  227. package/dist/src/endpoint-tools/result-projector.js +31 -0
  228. package/dist/src/endpoint-tools/runtime.d.ts +2 -0
  229. package/dist/src/endpoint-tools/runtime.js +15 -2
  230. package/dist/src/endpoint-tools/target-resolver.d.ts +12 -0
  231. package/dist/src/endpoint-tools/target-resolver.js +27 -0
  232. package/dist/src/endpoint-tools/turn-context.d.ts +6 -0
  233. package/dist/src/endpoint-tools/turn-context.js +29 -0
  234. package/dist/src/endpoint-tools/upload-service.d.ts +4 -2
  235. package/dist/src/endpoint-tools/upload-service.js +29 -4
  236. package/dist/src/extensions/agent-plugins/auth.d.ts +0 -2
  237. package/dist/src/extensions/agent-plugins/auth.js +2 -19
  238. package/dist/src/extensions/agent-plugins/credentials.js +3 -19
  239. package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -2
  240. package/dist/src/extensions/agent-plugins/mcp-adapter.js +1 -5
  241. package/dist/src/extensions/agent-plugins/source-http-fetch.d.ts +2 -0
  242. package/dist/src/{agent/mcp/plugin-http-fetch.js → extensions/agent-plugins/source-http-fetch.js} +7 -7
  243. package/dist/src/extensions/agent-plugins/sources.js +2 -2
  244. package/dist/src/extensions/agent-plugins/store.js +1 -3
  245. package/dist/src/extensions/agent-plugins/validation.d.ts +0 -4
  246. package/dist/src/extensions/agent-plugins/validation.js +14 -21
  247. package/dist/src/gateway/agents-admin.d.ts +5 -0
  248. package/dist/src/gateway/agents-admin.js +58 -3
  249. package/dist/src/gateway/chat-stream/mapper.js +9 -0
  250. package/dist/src/gateway/chat-stream/protocol.d.ts +4 -4
  251. package/dist/src/gateway/hono/lib/config-payload.d.ts +9 -4
  252. package/dist/src/gateway/hono/lib/config-payload.js +2 -5
  253. package/dist/src/gateway/hono/oauth-async.js +9 -2
  254. package/dist/src/gateway/hono/routes/agent-plugins.js +4 -9
  255. package/dist/src/gateway/hono/routes/agents.js +5 -4
  256. package/dist/src/gateway/hono/routes/config-patch/misc.js +1 -1
  257. package/dist/src/gateway/hono/routes/connection-waits.js +2 -5
  258. package/dist/src/gateway/hono/routes/connectors.js +5 -60
  259. package/dist/src/gateway/hono/routes/device-authorizations.d.ts +3 -0
  260. package/dist/src/gateway/hono/routes/device-authorizations.js +74 -0
  261. package/dist/src/gateway/hono/routes/endpoint-compatibility.js +8 -0
  262. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +1 -0
  263. package/dist/src/gateway/hono/routes/endpoint-tools.js +70 -3
  264. package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
  265. package/dist/src/gateway/hono/routes/mcp.d.ts +1 -1
  266. package/dist/src/gateway/hono/routes/mcp.js +11 -237
  267. package/dist/src/gateway/hono/routes/notes.js +2 -2
  268. package/dist/src/gateway/hono/routes/projects.js +2 -2
  269. package/dist/src/gateway/hono/routes/session-command-handler.js +11 -1
  270. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +8 -2
  271. package/dist/src/gateway/hono/routes/session-input-handler.js +26 -2
  272. package/dist/src/gateway/hono/routes/tasks.js +1 -1
  273. package/dist/src/gateway/image-generation-setup.js +1 -1
  274. package/dist/src/gateway/service/config-coordinator.js +2 -5
  275. package/dist/src/gateway/service/marketplace-service.js +2 -2
  276. package/dist/src/gateway/service/run-gateway-agent.js +13 -5
  277. package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -1
  278. package/dist/src/gateway/service/session-input-coordinator.js +29 -9
  279. package/dist/src/gateway/service/sessions-api.js +0 -6
  280. package/dist/src/gateway/service.js +7 -16
  281. package/dist/src/gateway/session-reset-service.js +0 -6
  282. package/dist/src/gateway/xopc-cloud-capability-setup.js +1 -1
  283. package/dist/src/home-intelligence/host.js +2 -2
  284. package/dist/src/imports/compatibility.js +12 -10
  285. package/dist/src/local-apps/service.js +1 -1
  286. package/dist/src/mcp/channel-bridge.js +1 -1
  287. package/dist/src/notes/agent-context.js +1 -1
  288. package/dist/src/personal-agent/service.js +1 -1
  289. package/dist/src/providers/env-keys.js +1 -1
  290. package/dist/src/providers/index.js +26 -24
  291. package/dist/src/providers/model-call.d.ts +0 -2
  292. package/dist/src/providers/model-call.js +2 -6
  293. package/dist/src/providers/model-registry.js +4 -2
  294. package/dist/src/providers/model-supplements.d.ts +3 -3
  295. package/dist/src/providers/model-supplements.js +6 -27
  296. package/dist/src/providers/presentation.js +3 -8
  297. package/dist/src/providers/prompt-cache-plan.js +1 -1
  298. package/dist/src/providers/provider-auth-service.d.ts +1 -1
  299. package/dist/src/providers/provider-auth-service.js +7 -2
  300. package/dist/src/providers/provider-policy.d.ts +3 -0
  301. package/dist/src/providers/provider-policy.js +14 -0
  302. package/dist/src/providers/register-runtime-providers.js +6 -1
  303. package/dist/src/realtime/runtime.js +1 -1
  304. package/dist/src/session/store.js +7 -1
  305. package/dist/src/session/transcript-events.d.ts +5 -0
  306. package/dist/src/session/transcript-events.js +1 -0
  307. package/dist/src/session/types.d.ts +2 -0
  308. package/dist/src/storage/sqlite/device-grant-audit-repository.d.ts +11 -0
  309. package/dist/src/storage/sqlite/device-grant-audit-repository.js +10 -0
  310. package/dist/src/storage/sqlite/endpoint-device-settings-repository.d.ts +7 -0
  311. package/dist/src/storage/sqlite/endpoint-device-settings-repository.js +17 -0
  312. package/dist/src/storage/sqlite/migrations/240_device_settings.sql +5 -0
  313. package/dist/src/storage/sqlite/migrations/241_device_grant_audit.sql +13 -0
  314. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  315. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  316. package/dist/src/storage/sqlite/schema.js +1 -1
  317. package/dist/src/storage/sqlite/session-input-repository.d.ts +1 -0
  318. package/dist/src/storage/sqlite/session-input-repository.js +5 -1
  319. package/dist/src/tasks/capabilities/read.js +2 -2
  320. package/dist/src/tui/backends/embedded-backend.js +1 -1
  321. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  322. package/dist/src/tui/xopc-tui-keybindings.d.ts +4 -4
  323. package/dist/src/voice/realtime/persona-context.js +1 -1
  324. package/package.json +20 -9
  325. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CCRfvuov.js +0 -1
  326. package/dist/gateway/static/root/assets/agent-plugin-dialog-CRlzd8El.js +0 -1
  327. package/dist/gateway/static/root/assets/agents-_ug2LCQb.js +0 -66
  328. package/dist/gateway/static/root/assets/automations-workspace-BQywN6nG.js +0 -6
  329. package/dist/gateway/static/root/assets/browser-automations-page-yiEuG1v7.js +0 -3
  330. package/dist/gateway/static/root/assets/capabilities-page-BEnFt_dj.js +0 -2
  331. package/dist/gateway/static/root/assets/connectors-page-D6wTmWA6.js +0 -2
  332. package/dist/gateway/static/root/assets/copy-text-row-BHDs3cBa.js +0 -1
  333. package/dist/gateway/static/root/assets/dependency-picker-BTERkA9X.js +0 -1
  334. package/dist/gateway/static/root/assets/device-pairing-wizard-DI2bqaKO.js +0 -1
  335. package/dist/gateway/static/root/assets/dist-Che_jiQF.js +0 -1
  336. package/dist/gateway/static/root/assets/gateway-realtime-DDWymi-o.js +0 -1
  337. package/dist/gateway/static/root/assets/home-page-BZDjvwet.js +0 -2
  338. package/dist/gateway/static/root/assets/index-BB1z8QxA.js +0 -106
  339. package/dist/gateway/static/root/assets/index-D9R6tU7r.css +0 -1
  340. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  341. package/dist/gateway/static/root/assets/local-session-drafts-DRPsDCj1.js +0 -1
  342. package/dist/gateway/static/root/assets/logs-page-DL-BM0xq.js +0 -2
  343. package/dist/gateway/static/root/assets/management-settings-BOVRHhXk.js +0 -1
  344. package/dist/gateway/static/root/assets/note-detail-panel-DJJK2yL4.js +0 -5
  345. package/dist/gateway/static/root/assets/notes-page-oCxO7ZTv.js +0 -8
  346. package/dist/gateway/static/root/assets/personal-page-DOk9gUK5.js +0 -1
  347. package/dist/gateway/static/root/assets/project-detail-page-3uAzbW4T.js +0 -1
  348. package/dist/gateway/static/root/assets/session-manager-LInoZ_Yi.js +0 -16
  349. package/dist/gateway/static/root/assets/sessions-page-BCVlNHtq.js +0 -1
  350. package/dist/gateway/static/root/assets/settings-advanced-gate-Bz-ue9fZ.js +0 -1
  351. package/dist/gateway/static/root/assets/setup-status-panel-B5BoZ-1y.js +0 -1
  352. package/dist/gateway/static/root/assets/shares-settings-BlnlzGjH.js +0 -1
  353. package/dist/gateway/static/root/assets/skills-page-DjdTeYzm.js +0 -2
  354. package/dist/gateway/static/root/assets/use-file-preview-expanded-Db2VYg1b.js +0 -2
  355. package/dist/gateway/static/root/assets/user-model-page-B74LkVbp.js +0 -2
  356. package/dist/gateway/static/root/assets/workflows-page-Crk4SxtC.js +0 -6
  357. package/dist/src/agent/embedded/system-prompt-override.d.ts +0 -2
  358. package/dist/src/agent/embedded/system-prompt-override.js +0 -21
  359. package/dist/src/agent/external-tools/mcp-provider.d.ts +0 -32
  360. package/dist/src/agent/external-tools/mcp-provider.js +0 -208
  361. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +0 -20
  362. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +0 -79
  363. package/dist/src/agent/mcp/bundle-mcp-gateway.js +0 -93
  364. package/dist/src/agent/mcp/bundle-mcp-names.d.ts +0 -1
  365. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -25
  366. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +0 -1
  367. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -6
  368. package/dist/src/agent/mcp/bundle-mcp-runtime.d.ts +0 -46
  369. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -571
  370. package/dist/src/agent/mcp/bundle-mcp-tools.d.ts +0 -2
  371. package/dist/src/agent/mcp/bundle-mcp-tools.js +0 -2
  372. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +0 -76
  373. package/dist/src/agent/mcp/bundle-mcp-types.js +0 -1
  374. package/dist/src/agent/mcp/embedded-mcp.d.ts +0 -10
  375. package/dist/src/agent/mcp/embedded-mcp.js +0 -14
  376. package/dist/src/agent/mcp/index.d.ts +0 -5
  377. package/dist/src/agent/mcp/index.js +0 -12
  378. package/dist/src/agent/mcp/mcp-config-shared.d.ts +0 -8
  379. package/dist/src/agent/mcp/mcp-config-shared.js +0 -39
  380. package/dist/src/agent/mcp/mcp-http.d.ts +0 -23
  381. package/dist/src/agent/mcp/mcp-http.js +0 -67
  382. package/dist/src/agent/mcp/mcp-resource-id.d.ts +0 -6
  383. package/dist/src/agent/mcp/mcp-resource-id.js +0 -19
  384. package/dist/src/agent/mcp/mcp-stdio-transport.d.ts +0 -26
  385. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -120
  386. package/dist/src/agent/mcp/mcp-stdio.d.ts +0 -18
  387. package/dist/src/agent/mcp/mcp-stdio.js +0 -35
  388. package/dist/src/agent/mcp/mcp-transport-config.d.ts +0 -28
  389. package/dist/src/agent/mcp/mcp-transport-config.js +0 -91
  390. package/dist/src/agent/mcp/mcp-transport.d.ts +0 -17
  391. package/dist/src/agent/mcp/mcp-transport.js +0 -141
  392. package/dist/src/agent/mcp/oauth/index.d.ts +0 -6
  393. package/dist/src/agent/mcp/oauth/index.js +0 -6
  394. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.d.ts +0 -5
  395. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.js +0 -14
  396. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +0 -30
  397. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +0 -276
  398. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.d.ts +0 -33
  399. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +0 -103
  400. package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +0 -31
  401. package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +0 -181
  402. package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +0 -12
  403. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +0 -91
  404. package/dist/src/agent/mcp/oauth/mcp-oauth-types.d.ts +0 -22
  405. package/dist/src/agent/mcp/oauth/mcp-oauth-types.js +0 -1
  406. package/dist/src/agent/mcp/plugin-http-fetch.d.ts +0 -2
  407. package/dist/src/agent/source-context/mcp-resource-context.d.ts +0 -8
  408. package/dist/src/agent/source-context/mcp-resource-context.js +0 -30
  409. package/dist/src/auth/oauth/openai-codex.d.ts +0 -9
  410. package/dist/src/auth/oauth/openai-codex.js +0 -414
  411. package/dist/src/connectors/plugin-mcp-recovery.d.ts +0 -28
  412. package/dist/src/connectors/plugin-mcp-recovery.js +0 -90
  413. package/dist/src/extensions/agent-plugins/connection.d.ts +0 -8
  414. package/dist/src/extensions/agent-plugins/connection.js +0 -41
  415. package/dist/src/extensions/agent-plugins/health.d.ts +0 -4
  416. package/dist/src/extensions/agent-plugins/health.js +0 -48
  417. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +0 -1
  418. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.js +0 -8
@@ -1,571 +0,0 @@
1
- import { createLogger } from "../../utils/logger/index.js";
2
- import { init_logger } from "../../utils/logger.js";
3
- import { init_global_singleton, resolveGlobalSingleton } from "../../utils/global-singleton.js";
4
- import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
5
- import { resolveConnectorSecretReferences } from "../../connectors/secret-store.js";
6
- import { recordPluginMcpHealth } from "../../extensions/agent-plugins/health.js";
7
- import { redactSensitiveUrlLikeString } from "../../utils/redact-sensitive-url.js";
8
- import { loadEmbeddedMcpConfig } from "./embedded-mcp.js";
9
- import { isMcpConfigRecord } from "./mcp-config-shared.js";
10
- import { isMcpAuthorizationError } from "./oauth/mcp-oauth-errors.js";
11
- import { resolveMcpTransport } from "./mcp-transport.js";
12
- import { sanitizeServerName } from "./bundle-mcp-names.js";
13
- import crypto from "node:crypto";
14
- import Ajv2020 from "ajv/dist/2020.js";
15
- import { Client } from "@modelcontextprotocol/sdk/client/index.js";
16
- import { AjvJsonSchemaValidator } from "@modelcontextprotocol/sdk/validation/ajv-provider.js";
17
- //#region src/agent/mcp/bundle-mcp-runtime.ts
18
- init_logger();
19
- init_global_singleton();
20
- init_string_coerce();
21
- const log = createLogger("Mcp:Bundle");
22
- const SESSION_MCP_RUNTIME_MANAGER_KEY = Symbol.for("xopc.sessionMcpRuntimeManager");
23
- const DRAFT_2020_12_SCHEMA = "https://json-schema.org/draft/2020-12/schema";
24
- const DEFAULT_SESSION_MCP_RUNTIME_IDLE_TTL_MS = 600 * 1e3;
25
- const SESSION_MCP_RUNTIME_SWEEP_INTERVAL_MS = 60 * 1e3;
26
- function isDraft202012Schema(schema) {
27
- return schema.$schema === DRAFT_2020_12_SCHEMA;
28
- }
29
- function createBundleMcpJsonSchemaValidator() {
30
- const defaultValidator = new AjvJsonSchemaValidator();
31
- const ajv2020 = new Ajv2020({
32
- strict: false,
33
- validateFormats: false,
34
- validateSchema: false,
35
- allErrors: true
36
- });
37
- return { getValidator(schema) {
38
- if (!isDraft202012Schema(schema)) return defaultValidator.getValidator(schema);
39
- const ajvValidator = ajv2020.compile(schema);
40
- return (input) => {
41
- if (ajvValidator(input)) return {
42
- valid: true,
43
- data: input,
44
- errorMessage: void 0
45
- };
46
- return {
47
- valid: false,
48
- data: void 0,
49
- errorMessage: ajv2020.errorsText(ajvValidator.errors)
50
- };
51
- };
52
- } };
53
- }
54
- function connectWithTimeout(client, transport, timeoutMs) {
55
- return new Promise((resolve, reject) => {
56
- const timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`MCP server connection timed out after ${timeoutMs}ms`)), timeoutMs);
57
- client.connect(transport).then((value) => {
58
- clearTimeout(timer);
59
- resolve(value);
60
- }, (error) => {
61
- clearTimeout(timer);
62
- reject(error);
63
- });
64
- });
65
- }
66
- function redactErrorUrls(error) {
67
- return redactSensitiveUrlLikeString(String(error));
68
- }
69
- async function listAllTools(client) {
70
- const tools = [];
71
- let cursor;
72
- do {
73
- const page = await client.listTools(cursor ? { cursor } : void 0);
74
- tools.push(...page.tools);
75
- cursor = page.nextCursor;
76
- } while (cursor);
77
- return tools;
78
- }
79
- async function listAllResources(client) {
80
- const resources = [];
81
- let cursor;
82
- do {
83
- const page = await client.listResources(cursor ? { cursor } : void 0);
84
- resources.push(...page.resources);
85
- cursor = page.nextCursor;
86
- } while (cursor);
87
- return resources;
88
- }
89
- async function listAllPrompts(client) {
90
- const prompts = [];
91
- let cursor;
92
- do {
93
- const page = await client.listPrompts(cursor ? { cursor } : void 0);
94
- prompts.push(...page.prompts);
95
- cursor = page.nextCursor;
96
- } while (cursor);
97
- return prompts;
98
- }
99
- async function listOptionalMcpCapability(params) {
100
- try {
101
- return await params.list();
102
- } catch (error) {
103
- log.debug({
104
- phase: "agent.mcp_connect",
105
- serverName: params.serverName,
106
- capability: params.capability,
107
- errorMessage: redactErrorUrls(error)
108
- }, `bundle-mcp: server "${params.serverName}" did not list ${params.capability}`);
109
- return [];
110
- }
111
- }
112
- async function disposeSession(session) {
113
- session.detachStderr?.();
114
- if (session.transportType === "streamable-http") await session.transport.terminateSession().catch(() => {});
115
- await session.transport.close().catch(() => {});
116
- await session.client.close().catch(() => {});
117
- }
118
- function createCatalogFingerprint(servers) {
119
- return crypto.createHash("sha1").update(JSON.stringify(servers)).digest("hex");
120
- }
121
- function loadSessionMcpConfig(params) {
122
- const loaded = loadEmbeddedMcpConfig({
123
- workspaceDir: params.workspaceDir,
124
- cfg: params.cfg
125
- });
126
- if (params.logDiagnostics !== false) for (const diagnostic of loaded.diagnostics) log.warn({
127
- phase: "agent.mcp_connect",
128
- extensionId: diagnostic.extensionId,
129
- message: diagnostic.message
130
- }, `bundle-mcp diagnostic: ${diagnostic.extensionId}: ${diagnostic.message}`);
131
- return {
132
- loaded,
133
- fingerprint: createCatalogFingerprint(loaded.mcpServers)
134
- };
135
- }
136
- function createDisposedError(sessionId) {
137
- return /* @__PURE__ */ new Error(`bundle-mcp runtime disposed for session ${sessionId}`);
138
- }
139
- function resolveSessionMcpRuntimeIdleTtlMs(cfg) {
140
- const raw = cfg?.mcp?.sessionIdleTtlMs;
141
- if (typeof raw === "number" && Number.isFinite(raw) && raw >= 0) return Math.floor(raw);
142
- return DEFAULT_SESSION_MCP_RUNTIME_IDLE_TTL_MS;
143
- }
144
- function createSessionMcpRuntime(params) {
145
- const { loaded, fingerprint: configFingerprint } = loadSessionMcpConfig({
146
- workspaceDir: params.workspaceDir,
147
- cfg: params.cfg,
148
- logDiagnostics: true
149
- });
150
- const createdAt = Date.now();
151
- let lastUsedAt = createdAt;
152
- let activeLeases = 0;
153
- let disposed = false;
154
- let catalog = null;
155
- let catalogInFlight;
156
- const sessions = /* @__PURE__ */ new Map();
157
- const failIfDisposed = () => {
158
- if (disposed) throw createDisposedError(params.sessionId);
159
- };
160
- const getCatalog = async () => {
161
- failIfDisposed();
162
- if (catalog) return catalog;
163
- if (catalogInFlight) return catalogInFlight;
164
- catalogInFlight = (async () => {
165
- if (Object.keys(loaded.mcpServers).length === 0) return {
166
- version: 1,
167
- generatedAt: Date.now(),
168
- servers: {},
169
- tools: [],
170
- resources: [],
171
- prompts: []
172
- };
173
- const servers = {};
174
- const tools = [];
175
- const resources = [];
176
- const prompts = [];
177
- const usedServerNames = /* @__PURE__ */ new Set();
178
- try {
179
- for (const [serverName, rawServer] of Object.entries(loaded.mcpServers)) {
180
- failIfDisposed();
181
- let resolved;
182
- try {
183
- resolved = await resolveMcpTransport(serverName, await resolveConnectorSecretReferences(rawServer), params.cfg);
184
- } catch (error) {
185
- recordPluginMcpHealth(rawServer, "error");
186
- servers[serverName] = {
187
- serverName,
188
- launchSummary: "",
189
- toolCount: 0,
190
- resourceCount: 0,
191
- promptCount: 0,
192
- error: {
193
- code: "MCP_CONNECTION_FAILED",
194
- message: redactErrorUrls(error)
195
- }
196
- };
197
- continue;
198
- }
199
- if (!resolved) continue;
200
- const safeServerName = sanitizeServerName(serverName, usedServerNames);
201
- if (safeServerName !== serverName) log.warn({
202
- phase: "agent.mcp_connect",
203
- serverName,
204
- safeServerName
205
- }, `bundle-mcp: server key "${serverName}" uses policy namespace "${safeServerName}"`);
206
- const client = new Client({
207
- name: "xopc-bundle-mcp",
208
- version: "0.0.0"
209
- }, { jsonSchemaValidator: createBundleMcpJsonSchemaValidator() });
210
- const session = {
211
- serverName,
212
- client,
213
- transport: resolved.transport,
214
- transportType: resolved.transportType,
215
- requestTimeoutMs: resolved.requestTimeoutMs,
216
- detachStderr: resolved.detachStderr
217
- };
218
- sessions.set(serverName, session);
219
- try {
220
- failIfDisposed();
221
- await connectWithTimeout(client, resolved.transport, resolved.connectionTimeoutMs);
222
- failIfDisposed();
223
- const listedTools = await listAllTools(client);
224
- recordPluginMcpHealth(rawServer, "ready");
225
- const listedResources = await listOptionalMcpCapability({
226
- serverName,
227
- capability: "resources",
228
- list: () => listAllResources(client)
229
- });
230
- const listedPrompts = await listOptionalMcpCapability({
231
- serverName,
232
- capability: "prompts",
233
- list: () => listAllPrompts(client)
234
- });
235
- failIfDisposed();
236
- servers[serverName] = {
237
- serverName,
238
- launchSummary: resolved.description,
239
- toolCount: listedTools.length,
240
- resourceCount: listedResources.length,
241
- promptCount: listedPrompts.length
242
- };
243
- for (const tool of listedTools) {
244
- const toolName = tool.name.trim();
245
- if (!toolName) continue;
246
- tools.push({
247
- serverName,
248
- safeServerName,
249
- toolName,
250
- title: tool.title,
251
- description: normalizeOptionalString(tool.description) ?? normalizeOptionalString(tool.title),
252
- inputSchema: tool.inputSchema,
253
- annotations: tool.annotations,
254
- fallbackDescription: `Provided by bundle MCP server "${serverName}" (${resolved.description}).`
255
- });
256
- }
257
- for (const resource of listedResources) {
258
- const uri = resource.uri.trim();
259
- const name = resource.name.trim();
260
- if (!uri || !name) continue;
261
- resources.push({
262
- serverName,
263
- uri,
264
- name,
265
- title: resource.title,
266
- description: normalizeOptionalString(resource.description),
267
- mimeType: normalizeOptionalString(resource.mimeType)
268
- });
269
- }
270
- for (const prompt of listedPrompts) {
271
- const name = prompt.name.trim();
272
- if (!name) continue;
273
- prompts.push({
274
- serverName,
275
- name,
276
- title: prompt.title,
277
- description: normalizeOptionalString(prompt.description),
278
- argumentCount: Array.isArray(prompt.arguments) ? prompt.arguments.length : 0
279
- });
280
- }
281
- } catch (error) {
282
- servers[serverName] = {
283
- serverName,
284
- launchSummary: resolved.description,
285
- toolCount: 0,
286
- resourceCount: 0,
287
- promptCount: 0,
288
- error: {
289
- code: isMcpAuthorizationError(error) || error?.code === 401 ? "MCP_AUTHORIZATION_REQUIRED" : "MCP_CONNECTION_FAILED",
290
- message: redactErrorUrls(error)
291
- }
292
- };
293
- recordPluginMcpHealth(rawServer, servers[serverName].error?.code === "MCP_AUTHORIZATION_REQUIRED" ? "authorization_required" : "error");
294
- if (!disposed) log.warn(`bundle-mcp: failed to start server "${serverName}" (${resolved.description}): ${redactErrorUrls(error)}`);
295
- await disposeSession(session);
296
- sessions.delete(serverName);
297
- failIfDisposed();
298
- }
299
- }
300
- failIfDisposed();
301
- return {
302
- version: 1,
303
- generatedAt: Date.now(),
304
- servers,
305
- tools,
306
- resources,
307
- prompts
308
- };
309
- } catch (error) {
310
- await Promise.allSettled(Array.from(sessions.values(), (session) => disposeSession(session)));
311
- sessions.clear();
312
- throw error;
313
- }
314
- })();
315
- try {
316
- const nextCatalog = await catalogInFlight;
317
- failIfDisposed();
318
- catalog = nextCatalog;
319
- return nextCatalog;
320
- } finally {
321
- catalogInFlight = void 0;
322
- }
323
- };
324
- return {
325
- sessionId: params.sessionId,
326
- conversationId: params.conversationId,
327
- workspaceDir: params.workspaceDir,
328
- configFingerprint,
329
- createdAt,
330
- get lastUsedAt() {
331
- return lastUsedAt;
332
- },
333
- get activeLeases() {
334
- return activeLeases;
335
- },
336
- acquireLease() {
337
- activeLeases += 1;
338
- let released = false;
339
- return () => {
340
- if (released) return;
341
- released = true;
342
- activeLeases = Math.max(0, activeLeases - 1);
343
- lastUsedAt = Date.now();
344
- };
345
- },
346
- getCatalog,
347
- markUsed() {
348
- lastUsedAt = Date.now();
349
- },
350
- async callTool(serverName, toolName, input, signal) {
351
- failIfDisposed();
352
- await getCatalog();
353
- const session = sessions.get(serverName);
354
- if (!session) throw new Error(`bundle-mcp server "${serverName}" is not connected`);
355
- return await session.client.callTool({
356
- name: toolName,
357
- arguments: isMcpConfigRecord(input) ? input : {}
358
- }, void 0, {
359
- signal,
360
- timeout: session.requestTimeoutMs,
361
- maxTotalTimeout: session.requestTimeoutMs
362
- });
363
- },
364
- async readResource(serverName, uri, signal) {
365
- failIfDisposed();
366
- if (!(await getCatalog()).resources.some((resource) => resource.serverName === serverName && resource.uri === uri)) throw new Error(`bundle-mcp resource "${uri}" is not available from server "${serverName}"`);
367
- const session = sessions.get(serverName);
368
- if (!session) throw new Error(`bundle-mcp server "${serverName}" is not connected`);
369
- return session.client.readResource({ uri }, {
370
- signal,
371
- timeout: session.requestTimeoutMs,
372
- maxTotalTimeout: session.requestTimeoutMs
373
- });
374
- },
375
- async dispose() {
376
- if (disposed) return;
377
- disposed = true;
378
- catalog = null;
379
- catalogInFlight = void 0;
380
- const sessionsToClose = Array.from(sessions.values());
381
- sessions.clear();
382
- await Promise.allSettled(sessionsToClose.map((session) => disposeSession(session)));
383
- }
384
- };
385
- }
386
- function createSessionMcpRuntimeManager(opts = {}) {
387
- const runtimesBySessionId = /* @__PURE__ */ new Map();
388
- const sessionIdByConversationId = /* @__PURE__ */ new Map();
389
- const idleTtlMsBySessionId = /* @__PURE__ */ new Map();
390
- const createRuntime = opts.createRuntime ?? createSessionMcpRuntime;
391
- const now = opts.now ?? Date.now;
392
- const createInFlight = /* @__PURE__ */ new Map();
393
- const idleSweepIntervalMs = opts.idleSweepIntervalMs ?? SESSION_MCP_RUNTIME_SWEEP_INTERVAL_MS;
394
- let idleSweepTimer;
395
- let idleSweepInFlight;
396
- const forgetConversationIdsForSessionId = (sessionId) => {
397
- for (const [conversationId, mappedSessionId] of sessionIdByConversationId.entries()) if (mappedSessionId === sessionId) sessionIdByConversationId.delete(conversationId);
398
- };
399
- const sweepIdleRuntimes = async () => {
400
- const nowMs = now();
401
- const expired = [];
402
- for (const [sessionId, runtime] of runtimesBySessionId.entries()) {
403
- const idleTtlMs = idleTtlMsBySessionId.get(sessionId) ?? DEFAULT_SESSION_MCP_RUNTIME_IDLE_TTL_MS;
404
- if (idleTtlMs <= 0 || (runtime.activeLeases ?? 0) > 0) continue;
405
- if (nowMs - runtime.lastUsedAt < idleTtlMs) continue;
406
- runtimesBySessionId.delete(sessionId);
407
- idleTtlMsBySessionId.delete(sessionId);
408
- forgetConversationIdsForSessionId(sessionId);
409
- expired.push(runtime);
410
- }
411
- await Promise.allSettled(expired.map((runtime) => runtime.dispose()));
412
- return expired.length;
413
- };
414
- const queueIdleSweep = () => {
415
- if (idleSweepInFlight) return;
416
- idleSweepInFlight = sweepIdleRuntimes().then(() => void 0).catch((error) => {
417
- const em = error instanceof Error ? error.message : String(error);
418
- log.warn({
419
- err: error,
420
- errorMessage: em,
421
- phase: "agent.mcp_connect"
422
- }, `bundle-mcp: idle runtime sweep failed: ${em}`);
423
- }).finally(() => {
424
- idleSweepInFlight = void 0;
425
- });
426
- };
427
- const ensureIdleSweepTimer = () => {
428
- if (opts.enableIdleSweepTimer === false || idleSweepIntervalMs <= 0 || idleSweepTimer) return;
429
- idleSweepTimer = setInterval(queueIdleSweep, idleSweepIntervalMs);
430
- idleSweepTimer.unref?.();
431
- };
432
- const clearIdleSweepTimer = () => {
433
- if (!idleSweepTimer) return;
434
- clearInterval(idleSweepTimer);
435
- idleSweepTimer = void 0;
436
- };
437
- return {
438
- async getOrCreate(params) {
439
- const idleTtlMs = resolveSessionMcpRuntimeIdleTtlMs(params.cfg);
440
- if (runtimesBySessionId.has(params.sessionId)) idleTtlMsBySessionId.set(params.sessionId, idleTtlMs);
441
- await sweepIdleRuntimes();
442
- if (idleTtlMs > 0) ensureIdleSweepTimer();
443
- if (params.conversationId) sessionIdByConversationId.set(params.conversationId, params.sessionId);
444
- const { fingerprint: nextFingerprint } = loadSessionMcpConfig({
445
- workspaceDir: params.workspaceDir,
446
- cfg: params.cfg,
447
- logDiagnostics: false
448
- });
449
- const existing = runtimesBySessionId.get(params.sessionId);
450
- if (existing) if (existing.workspaceDir !== params.workspaceDir || existing.configFingerprint !== nextFingerprint) {
451
- runtimesBySessionId.delete(params.sessionId);
452
- await existing.dispose();
453
- } else {
454
- existing.markUsed();
455
- idleTtlMsBySessionId.set(params.sessionId, idleTtlMs);
456
- return existing;
457
- }
458
- const inFlight = createInFlight.get(params.sessionId);
459
- if (inFlight) {
460
- if (inFlight.workspaceDir === params.workspaceDir && inFlight.configFingerprint === nextFingerprint) return inFlight.promise;
461
- createInFlight.delete(params.sessionId);
462
- const staleRuntime = await inFlight.promise.catch(() => void 0);
463
- runtimesBySessionId.delete(params.sessionId);
464
- idleTtlMsBySessionId.delete(params.sessionId);
465
- await staleRuntime?.dispose();
466
- }
467
- const created = Promise.resolve(createRuntime({
468
- sessionId: params.sessionId,
469
- conversationId: params.conversationId,
470
- workspaceDir: params.workspaceDir,
471
- cfg: params.cfg
472
- })).then((runtime) => {
473
- runtime.markUsed();
474
- runtimesBySessionId.set(params.sessionId, runtime);
475
- idleTtlMsBySessionId.set(params.sessionId, idleTtlMs);
476
- return runtime;
477
- });
478
- createInFlight.set(params.sessionId, {
479
- promise: created,
480
- workspaceDir: params.workspaceDir,
481
- configFingerprint: nextFingerprint
482
- });
483
- try {
484
- return await created;
485
- } finally {
486
- createInFlight.delete(params.sessionId);
487
- }
488
- },
489
- bindConversationId(conversationId, sessionId) {
490
- sessionIdByConversationId.set(conversationId, sessionId);
491
- },
492
- resolveSessionId(conversationId) {
493
- return sessionIdByConversationId.get(conversationId);
494
- },
495
- async disposeSession(sessionId) {
496
- const inFlight = createInFlight.get(sessionId);
497
- createInFlight.delete(sessionId);
498
- let runtime = runtimesBySessionId.get(sessionId);
499
- if (!runtime && inFlight) runtime = await inFlight.promise.catch(() => void 0);
500
- runtimesBySessionId.delete(sessionId);
501
- idleTtlMsBySessionId.delete(sessionId);
502
- if (!runtime) {
503
- forgetConversationIdsForSessionId(sessionId);
504
- return;
505
- }
506
- forgetConversationIdsForSessionId(sessionId);
507
- await runtime.dispose();
508
- },
509
- async disposeAll() {
510
- clearIdleSweepTimer();
511
- const inFlightRuntimes = Array.from(createInFlight.values());
512
- createInFlight.clear();
513
- const runtimes = Array.from(runtimesBySessionId.values());
514
- runtimesBySessionId.clear();
515
- sessionIdByConversationId.clear();
516
- idleTtlMsBySessionId.clear();
517
- const lateRuntimes = await Promise.all(inFlightRuntimes.map(async ({ promise }) => await promise.catch(() => void 0)));
518
- const allRuntimes = new Set(runtimes);
519
- for (const runtime of lateRuntimes) if (runtime) allRuntimes.add(runtime);
520
- await Promise.allSettled(Array.from(allRuntimes, (runtime) => runtime.dispose()));
521
- },
522
- sweepIdleRuntimes,
523
- listSessionIds() {
524
- return Array.from(runtimesBySessionId.keys());
525
- }
526
- };
527
- }
528
- function getSessionMcpRuntimeManager() {
529
- return resolveGlobalSingleton(SESSION_MCP_RUNTIME_MANAGER_KEY, createSessionMcpRuntimeManager);
530
- }
531
- async function getOrCreateSessionMcpRuntime(params) {
532
- return await getSessionMcpRuntimeManager().getOrCreate(params);
533
- }
534
- async function disposeSessionMcpRuntime(sessionId) {
535
- await getSessionMcpRuntimeManager().disposeSession(sessionId);
536
- }
537
- async function retireSessionMcpRuntime(params) {
538
- const sessionId = normalizeOptionalString(params.sessionId);
539
- if (!sessionId) return false;
540
- try {
541
- await disposeSessionMcpRuntime(sessionId);
542
- return true;
543
- } catch (error) {
544
- params.onError?.(error, sessionId, params.reason);
545
- return false;
546
- }
547
- }
548
- async function retireSessionMcpRuntimeForConversationId(params) {
549
- const conversationId = normalizeOptionalString(params.conversationId);
550
- if (!conversationId) return false;
551
- return await retireSessionMcpRuntime({
552
- sessionId: getSessionMcpRuntimeManager().resolveSessionId(conversationId),
553
- reason: params.reason,
554
- onError: params.onError
555
- });
556
- }
557
- async function disposeAllSessionMcpRuntimes() {
558
- await getSessionMcpRuntimeManager().disposeAll();
559
- }
560
- const __testing = {
561
- createSessionMcpRuntimeManager,
562
- async resetSessionMcpRuntimeManager() {
563
- await disposeAllSessionMcpRuntimes();
564
- },
565
- getCachedSessionIds() {
566
- return getSessionMcpRuntimeManager().listSessionIds();
567
- },
568
- resolveSessionMcpRuntimeIdleTtlMs
569
- };
570
- //#endregion
571
- export { __testing, createBundleMcpJsonSchemaValidator, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, retireSessionMcpRuntime, retireSessionMcpRuntimeForConversationId };
@@ -1,2 +0,0 @@
1
- export type { McpCatalogTool, McpServerCatalog, McpToolCatalog, SessionMcpRuntime, SessionMcpRuntimeManager, } from "./bundle-mcp-types.js";
2
- export { __testing, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, retireSessionMcpRuntime, retireSessionMcpRuntimeForConversationId, } from "./bundle-mcp-runtime.js";
@@ -1,2 +0,0 @@
1
- import { __testing, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, retireSessionMcpRuntime, retireSessionMcpRuntimeForConversationId } from "./bundle-mcp-runtime.js";
2
- export { __testing, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, retireSessionMcpRuntime, retireSessionMcpRuntimeForConversationId };
@@ -1,76 +0,0 @@
1
- import type { CallToolResult, ReadResourceResult, ToolAnnotations } from "@modelcontextprotocol/sdk/types.js";
2
- import type { JsonSchemaType } from "@modelcontextprotocol/sdk/validation/types.js";
3
- import type { Config } from "../../config/schema.js";
4
- export type McpServerCatalog = {
5
- serverName: string;
6
- launchSummary: string;
7
- toolCount: number;
8
- resourceCount: number;
9
- promptCount: number;
10
- error?: {
11
- code: 'MCP_AUTHORIZATION_REQUIRED' | 'MCP_CONNECTION_FAILED';
12
- message: string;
13
- };
14
- };
15
- export type McpCatalogTool = {
16
- serverName: string;
17
- safeServerName: string;
18
- toolName: string;
19
- title?: string;
20
- description?: string;
21
- inputSchema: JsonSchemaType;
22
- annotations?: ToolAnnotations;
23
- fallbackDescription: string;
24
- };
25
- export type McpCatalogResource = {
26
- serverName: string;
27
- uri: string;
28
- name: string;
29
- title?: string;
30
- description?: string;
31
- mimeType?: string;
32
- };
33
- export type McpCatalogPrompt = {
34
- serverName: string;
35
- name: string;
36
- title?: string;
37
- description?: string;
38
- argumentCount: number;
39
- };
40
- export type McpToolCatalog = {
41
- version: number;
42
- generatedAt: number;
43
- servers: Record<string, McpServerCatalog>;
44
- tools: McpCatalogTool[];
45
- resources: McpCatalogResource[];
46
- prompts: McpCatalogPrompt[];
47
- };
48
- export type SessionMcpRuntime = {
49
- sessionId: string;
50
- conversationId?: string;
51
- workspaceDir: string;
52
- configFingerprint: string;
53
- createdAt: number;
54
- lastUsedAt: number;
55
- activeLeases?: number;
56
- acquireLease?: () => () => void;
57
- getCatalog: () => Promise<McpToolCatalog>;
58
- markUsed: () => void;
59
- callTool: (serverName: string, toolName: string, input: unknown, signal?: AbortSignal) => Promise<CallToolResult>;
60
- readResource: (serverName: string, uri: string, signal?: AbortSignal) => Promise<ReadResourceResult>;
61
- dispose: () => Promise<void>;
62
- };
63
- export type SessionMcpRuntimeManager = {
64
- getOrCreate: (params: {
65
- sessionId: string;
66
- conversationId?: string;
67
- workspaceDir: string;
68
- cfg?: Config;
69
- }) => Promise<SessionMcpRuntime>;
70
- bindConversationId: (conversationId: string, sessionId: string) => void;
71
- resolveSessionId: (conversationId: string) => string | undefined;
72
- disposeSession: (sessionId: string) => Promise<void>;
73
- disposeAll: () => Promise<void>;
74
- sweepIdleRuntimes: () => Promise<number>;
75
- listSessionIds: () => string[];
76
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,10 +0,0 @@
1
- import type { Config } from "../../config/schema.js";
2
- import { type BundleMcpDiagnostic, type BundleMcpServerConfig } from "./bundle-mcp-config.js";
3
- export type EmbeddedMcpConfig = {
4
- mcpServers: Record<string, BundleMcpServerConfig>;
5
- diagnostics: BundleMcpDiagnostic[];
6
- };
7
- export declare function loadEmbeddedMcpConfig(params: {
8
- workspaceDir: string;
9
- cfg?: Config;
10
- }): EmbeddedMcpConfig;
@@ -1,14 +0,0 @@
1
- import { loadMergedBundleMcpConfig } from "./bundle-mcp-config.js";
2
- //#region src/agent/mcp/embedded-mcp.ts
3
- function loadEmbeddedMcpConfig(params) {
4
- const bundleMcp = loadMergedBundleMcpConfig({
5
- workspaceDir: params.workspaceDir,
6
- cfg: params.cfg
7
- });
8
- return {
9
- mcpServers: bundleMcp.config.mcpServers,
10
- diagnostics: bundleMcp.diagnostics
11
- };
12
- }
13
- //#endregion
14
- export { loadEmbeddedMcpConfig };
@@ -1,5 +0,0 @@
1
- export * from './bundle-mcp-tools.js';
2
- export * from './bundle-mcp-policy.js';
3
- export * from './bundle-mcp-config.js';
4
- export * from './embedded-mcp.js';
5
- export * from './oauth/index.js';