@xopcai/xopc 0.0.369 → 0.0.370

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 (384) 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-C61i1QbX.js} +1 -1
  12. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-0fCR1DHx.js +1 -0
  13. package/dist/gateway/static/root/assets/agent-plugin-dialog-Di99mUTT.js +1 -0
  14. package/dist/gateway/static/root/assets/agents-BRZZmYH_.js +66 -0
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-pJFe6M6c.js → app-management-settings-panel-noqqxkds.js} +1 -1
  16. package/dist/gateway/static/root/assets/{appearance-settings-BrxSpBWa.js → appearance-settings-DG8QN0gR.js} +1 -1
  17. package/dist/gateway/static/root/assets/{apps-page-DegSl5Lh.js → apps-page-CgiyzFYo.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-BZQ_VHjp.js → automations-page-CgAcRFDS.js} +1 -1
  19. package/dist/gateway/static/root/assets/automations-workspace-BIkxIpab.js +6 -0
  20. package/dist/gateway/static/root/assets/{block-editor-3XjFv3kK.js → block-editor-B1VE-jAe.js} +3 -3
  21. package/dist/gateway/static/root/assets/browser-automations-page-CIjyMS6f.js +3 -0
  22. package/dist/gateway/static/root/assets/{browser-settings-page-ch2_bQF0.js → browser-settings-page-BMAivBfp.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-DRdcfo68.js +2 -0
  26. package/dist/gateway/static/root/assets/{capabilities-settings-panel-NckMsJ5N.js → capabilities-settings-panel-ZuL6pWjM.js} +4 -4
  27. package/dist/gateway/static/root/assets/{capability-header-actions-CY8KCO9j.js → capability-header-actions-D0GC1FEv.js} +1 -1
  28. package/dist/gateway/static/root/assets/{channels-CHOS2CGa.js → channels-CgE22Pzd.js} +1 -1
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-Bwknnb4c.js → chat-terminal-dock-CEjh1utz.js} +2 -2
  30. package/dist/gateway/static/root/assets/{computer-settings-page-B2xeFCSt.js → computer-settings-page-vFHJAmQr.js} +1 -1
  31. package/dist/gateway/static/root/assets/{connector-service-page-C83DnAqK.js → connector-service-page-DTrwZ4kV.js} +1 -1
  32. package/dist/gateway/static/root/assets/connectors-page-DRcMiTWu.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-NfGIPSYY.js} +1 -1
  35. package/dist/gateway/static/root/assets/dependency-picker-CqguveUi.js +1 -0
  36. package/dist/gateway/static/root/assets/{desktop-pet-BwsbQw8V.js → desktop-pet-CTx1zkJm.js} +1 -1
  37. package/dist/gateway/static/root/assets/{desktop-pet-settings-sL9i44pP.js → desktop-pet-settings-BRDS3EGc.js} +1 -1
  38. package/dist/gateway/static/root/assets/device-pairing-wizard-Du4Ciuyw.js +1 -0
  39. package/dist/gateway/static/root/assets/{directory-picker-path-field-BFlDmsS5.js → directory-picker-path-field-CjstlxFl.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-BJmudejr.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-UvmHniyz.js} +1 -1
  44. package/dist/gateway/static/root/assets/{fallback-models-BwQg0G1D.js → fallback-models-euw9MGdt.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-C7roPHh1.js} +1 -1
  47. package/dist/gateway/static/root/assets/home-page-BGNCTtM3.js +2 -0
  48. package/dist/gateway/static/root/assets/{imports-page-re1_Nh64.js → imports-page-DxCoT0VV.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-BGBkIIzM.css +1 -0
  50. package/dist/gateway/static/root/assets/index-FCEE325-.js +106 -0
  51. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-B_xja9LN.js → keyboard-shortcuts-settings-CnLln9Ds.js} +1 -1
  52. package/dist/gateway/static/root/assets/{local-app-workbench-page-CErdCrPX.js → local-app-workbench-page-yXRkSrEj.js} +1 -1
  53. package/dist/gateway/static/root/assets/{local-apps-page-BPL2RXdK.js → local-apps-page-D46buzTk.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-DmcCHnH0.js +2 -0
  56. package/dist/gateway/static/root/assets/management-settings-khN1ThNL.js +1 -0
  57. package/dist/gateway/static/root/assets/note-detail-panel-C_t58yha.js +5 -0
  58. package/dist/gateway/static/root/assets/notes-page-BJ0QS6xx.js +8 -0
  59. package/dist/gateway/static/root/assets/{page-context-capture-button-tf77xIz3.js → page-context-capture-button-DfRODHv1.js} +1 -1
  60. package/dist/gateway/static/root/assets/personal-page-CiiXwwQE.js +1 -0
  61. package/dist/gateway/static/root/assets/{product-open-page-Dc3Y-Y7J.js → product-open-page-_Bp6HRmm.js} +1 -1
  62. package/dist/gateway/static/root/assets/{product-preview-content-MG_hmVA3.js → product-preview-content-BUdiO0Ct.js} +1 -1
  63. package/dist/gateway/static/root/assets/project-detail-page-Clb-fXYk.js +1 -0
  64. package/dist/gateway/static/root/assets/{projects-page-MllfNLGA.js → projects-page-D9JEEqhh.js} +1 -1
  65. package/dist/gateway/static/root/assets/{remote-access-hub-Bs-C70el.js → remote-access-hub-CmyTq3_l.js} +1 -1
  66. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-DpJ5jNzR.js → runtime-tools-settings-panel-B1_inj8L.js} +1 -1
  67. package/dist/gateway/static/root/assets/{scenes-page-Dpxamkw6.js → scenes-page-CUNAZN2_.js} +2 -2
  68. package/dist/gateway/static/root/assets/{schema-form-DUeyQ1zh.js → schema-form-CfT-9UVw.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-CXZKScvu.js +1 -0
  72. package/dist/gateway/static/root/assets/settings-advanced-gate-B2vKXmzg.js +1 -0
  73. package/dist/gateway/static/root/assets/{settings-page-DouHuBXt.js → settings-page-1h3vyueg.js} +1 -1
  74. package/dist/gateway/static/root/assets/setup-status-panel-Cqc7UlZy.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-Dh5jisCK.js +1 -0
  78. package/dist/gateway/static/root/assets/{skill-api-CfyX_0zN.js → skill-api-deDZeQS8.js} +1 -1
  79. package/dist/gateway/static/root/assets/skills-page-DZozl9U_.js +2 -0
  80. package/dist/gateway/static/root/assets/{system-settings-panel-DWf256TE.js → system-settings-panel-CtzyMxqq.js} +1 -1
  81. package/dist/gateway/static/root/assets/{task-detail-page-DE6N1ZQe.js → task-detail-page-5f_V0h-p.js} +2 -2
  82. package/dist/gateway/static/root/assets/{tunnel-api-BBm9esrY.js → tunnel-api-vMtlbJ-m.js} +1 -1
  83. package/dist/gateway/static/root/assets/{usage-page-C93x89uW.js → usage-page-B1-BCW8U.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-D4BSq9HJ.js +2 -0
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-Bs2MKiTv.js → work-discovery-overlay-CjiNYJV5.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-BR_U_snV.js → workflow-run-setup-panel-DJOetXvm.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-CcAPFh2R.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 +93 -2
  96. package/dist/packages/endpoint-tools-protocol/src/location.js +109 -0
  97. package/dist/packages/gateway-contract/src/session-input-command.js +30 -5
  98. package/dist/src/agent/agent-manager.js +22 -26
  99. package/dist/src/agent/embedded/codemode-extension.d.ts +7 -0
  100. package/dist/src/agent/embedded/codemode-extension.js +232 -0
  101. package/dist/src/agent/embedded/codemode-output.d.ts +2 -0
  102. package/dist/src/agent/embedded/codemode-output.js +34 -0
  103. package/dist/src/agent/embedded/external-tool-discovery.d.ts +6 -0
  104. package/dist/src/agent/embedded/external-tool-discovery.js +60 -0
  105. package/dist/src/agent/embedded/model-runtime.js +5 -2
  106. package/dist/src/agent/embedded/run-for-session.js +10 -1
  107. package/dist/src/agent/embedded/run-turn.js +10 -3
  108. package/dist/src/agent/embedded/session-runner.d.ts +9 -1
  109. package/dist/src/agent/embedded/session-runner.js +111 -23
  110. package/dist/src/agent/embedded/session-tool-result-guard.d.ts +2 -0
  111. package/dist/src/agent/embedded/session-tool-result-guard.js +17 -0
  112. package/dist/src/agent/embedded/subscribe-session.js +14 -4
  113. package/dist/src/agent/embedded/tool-metadata.d.ts +15 -0
  114. package/dist/src/agent/embedded/tool-metadata.js +38 -0
  115. package/dist/src/agent/embedded/tool-search-extension.d.ts +5 -0
  116. package/dist/src/agent/embedded/tool-search-extension.js +31 -0
  117. package/dist/src/agent/embedded/types.d.ts +7 -0
  118. package/dist/src/agent/embedded/xopc-tools-bridge.js +6 -0
  119. package/dist/src/agent/external-tools/endpoint-provider.d.ts +1 -1
  120. package/dist/src/agent/external-tools/endpoint-provider.js +148 -56
  121. package/dist/src/agent/external-tools/extension-provider.js +8 -1
  122. package/dist/src/agent/external-tools/gateway-tools.d.ts +1 -1
  123. package/dist/src/agent/external-tools/gateway-tools.js +45 -22
  124. package/dist/src/agent/external-tools/index.js +46 -14
  125. package/dist/src/agent/external-tools/memory-provider.js +8 -1
  126. package/dist/src/agent/external-tools/read-policy.js +2 -1
  127. package/dist/src/agent/external-tools/service.d.ts +2 -0
  128. package/dist/src/agent/external-tools/service.js +25 -3
  129. package/dist/src/agent/external-tools/tool-registry.d.ts +14 -0
  130. package/dist/src/agent/external-tools/tool-registry.js +14 -0
  131. package/dist/src/agent/external-tools/types.d.ts +8 -1
  132. package/dist/src/agent/external-tools/types.js +0 -1
  133. package/dist/src/agent/mcp/config.d.ts +18 -0
  134. package/dist/src/agent/mcp/{bundle-mcp-config.js → config.js} +8 -25
  135. package/dist/src/agent/mcp/native-mcp.d.ts +6 -0
  136. package/dist/src/agent/mcp/native-mcp.js +73 -0
  137. package/dist/src/agent/service.js +2 -5
  138. package/dist/src/agent/skills/installer.js +1 -1
  139. package/dist/src/agent/skills/skill-manager.js +1 -1
  140. package/dist/src/agent/skills/skill-sources.js +1 -1
  141. package/dist/src/agent/source-context/index.d.ts +0 -1
  142. package/dist/src/agent/source-context/index.js +1 -2
  143. package/dist/src/agent/source-context/injector.js +1 -0
  144. package/dist/src/agent/source-context/types.d.ts +2 -2
  145. package/dist/src/agent/source-context/types.js +1 -1
  146. package/dist/src/agent/tools/cli-clarify.js +1 -1
  147. package/dist/src/agent/tools/codemode-permissions.d.ts +4 -0
  148. package/dist/src/agent/tools/codemode-permissions.js +23 -0
  149. package/dist/src/agent/tools/dataBatch.js +3 -1
  150. package/dist/src/agent/tools/delegation-parent-policy.js +1 -4
  151. package/dist/src/agent/tools/factory.js +4 -3
  152. package/dist/src/agent/transcript/provider-capabilities.js +0 -1
  153. package/dist/src/agent/transcript/transcript-policy.js +1 -2
  154. package/dist/src/agent-config/schema.d.ts +28 -0
  155. package/dist/src/agent-config/schema.js +7 -0
  156. package/dist/src/auth/credentials.js +7 -20
  157. package/dist/src/auth/model-credential-store.js +11 -4
  158. package/dist/src/auth/oauth/index.d.ts +1 -1
  159. package/dist/src/auth/oauth/index.js +3 -3
  160. package/dist/src/auth/oauth/openai.d.ts +2 -0
  161. package/dist/src/auth/oauth/openai.js +90 -0
  162. package/dist/src/auth/oauth/registry.js +3 -3
  163. package/dist/src/auth/oauth/types.d.ts +1 -0
  164. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  165. package/dist/src/auth/sync-provider-auth.js +5 -0
  166. package/dist/src/chat-commands/builtins/model.js +2 -2
  167. package/dist/src/cli/command-manifest.js +1 -1
  168. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  169. package/dist/src/cli/commands/extension-agent-plugin.js +0 -19
  170. package/dist/src/cli/commands/mcp.js +36 -2
  171. package/dist/src/cli/commands/models.js +1 -1
  172. package/dist/src/cli/utils/oauth-login.js +2 -2
  173. package/dist/src/config/index.js +3 -3
  174. package/dist/src/config/mcp-config-normalize.d.ts +0 -3
  175. package/dist/src/config/mcp-config-normalize.js +2 -22
  176. package/dist/src/config/models-json.d.ts +0 -5
  177. package/dist/src/config/models-json.js +13 -4
  178. package/dist/src/config/paths.d.ts +0 -1
  179. package/dist/src/config/paths.js +1 -4
  180. package/dist/src/config/schema.d.ts +130 -36
  181. package/dist/src/config/schema.js +52 -35
  182. package/dist/src/connectors/auth-provider-registry.d.ts +1 -1
  183. package/dist/src/connectors/auth-provider-registry.js +1 -21
  184. package/dist/src/connectors/china-catalog.js +5 -5
  185. package/dist/src/connectors/connection-recovery-service.d.ts +1 -6
  186. package/dist/src/connectors/connection-recovery-service.js +3 -105
  187. package/dist/src/connectors/health.d.ts +1 -2
  188. package/dist/src/connectors/health.js +2 -101
  189. package/dist/src/connectors/types.d.ts +1 -1
  190. package/dist/src/endpoint-tools/binding-service.d.ts +2 -0
  191. package/dist/src/endpoint-tools/binding-service.js +14 -2
  192. package/dist/src/endpoint-tools/bridge-host.d.ts +15 -0
  193. package/dist/src/endpoint-tools/bridge-host.js +166 -0
  194. package/dist/src/endpoint-tools/bridge.d.ts +27 -0
  195. package/dist/src/endpoint-tools/bridge.js +88 -0
  196. package/dist/src/endpoint-tools/capability-catalog.d.ts +2 -0
  197. package/dist/src/endpoint-tools/capability-catalog.js +8 -0
  198. package/dist/src/endpoint-tools/grant-service.d.ts +69 -0
  199. package/dist/src/endpoint-tools/grant-service.js +113 -0
  200. package/dist/src/endpoint-tools/index.js +1 -1
  201. package/dist/src/endpoint-tools/invocation-service.js +6 -2
  202. package/dist/src/endpoint-tools/location-task.d.ts +22 -0
  203. package/dist/src/endpoint-tools/location-task.js +114 -0
  204. package/dist/src/endpoint-tools/policy.js +16 -1
  205. package/dist/src/endpoint-tools/registry.d.ts +2 -0
  206. package/dist/src/endpoint-tools/registry.js +9 -0
  207. package/dist/src/endpoint-tools/result-projector.d.ts +15 -0
  208. package/dist/src/endpoint-tools/result-projector.js +31 -0
  209. package/dist/src/endpoint-tools/runtime.d.ts +2 -0
  210. package/dist/src/endpoint-tools/runtime.js +15 -2
  211. package/dist/src/endpoint-tools/target-resolver.d.ts +12 -0
  212. package/dist/src/endpoint-tools/target-resolver.js +27 -0
  213. package/dist/src/endpoint-tools/turn-context.d.ts +6 -0
  214. package/dist/src/endpoint-tools/turn-context.js +29 -0
  215. package/dist/src/extensions/agent-plugins/auth.d.ts +0 -2
  216. package/dist/src/extensions/agent-plugins/auth.js +2 -19
  217. package/dist/src/extensions/agent-plugins/credentials.js +3 -19
  218. package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -2
  219. package/dist/src/extensions/agent-plugins/mcp-adapter.js +1 -5
  220. package/dist/src/extensions/agent-plugins/source-http-fetch.d.ts +2 -0
  221. package/dist/src/{agent/mcp/plugin-http-fetch.js → extensions/agent-plugins/source-http-fetch.js} +7 -7
  222. package/dist/src/extensions/agent-plugins/sources.js +2 -2
  223. package/dist/src/extensions/agent-plugins/store.js +1 -3
  224. package/dist/src/extensions/agent-plugins/validation.d.ts +0 -4
  225. package/dist/src/extensions/agent-plugins/validation.js +13 -20
  226. package/dist/src/gateway/agents-admin.d.ts +5 -0
  227. package/dist/src/gateway/agents-admin.js +56 -1
  228. package/dist/src/gateway/chat-stream/mapper.js +9 -0
  229. package/dist/src/gateway/chat-stream/protocol.d.ts +4 -4
  230. package/dist/src/gateway/hono/lib/config-payload.d.ts +9 -4
  231. package/dist/src/gateway/hono/lib/config-payload.js +2 -5
  232. package/dist/src/gateway/hono/oauth-async.js +9 -2
  233. package/dist/src/gateway/hono/routes/agent-plugins.js +4 -9
  234. package/dist/src/gateway/hono/routes/agents.js +4 -3
  235. package/dist/src/gateway/hono/routes/connection-waits.js +2 -5
  236. package/dist/src/gateway/hono/routes/connectors.js +5 -60
  237. package/dist/src/gateway/hono/routes/device-authorizations.d.ts +3 -0
  238. package/dist/src/gateway/hono/routes/device-authorizations.js +74 -0
  239. package/dist/src/gateway/hono/routes/endpoint-compatibility.js +7 -0
  240. package/dist/src/gateway/hono/routes/endpoint-tools.d.ts +1 -0
  241. package/dist/src/gateway/hono/routes/endpoint-tools.js +53 -3
  242. package/dist/src/gateway/hono/routes/lazy-bundles.js +17 -1
  243. package/dist/src/gateway/hono/routes/mcp.d.ts +1 -1
  244. package/dist/src/gateway/hono/routes/mcp.js +11 -237
  245. package/dist/src/gateway/hono/routes/session-command-handler.js +11 -1
  246. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +8 -2
  247. package/dist/src/gateway/hono/routes/session-input-handler.js +25 -1
  248. package/dist/src/gateway/service/config-coordinator.js +2 -5
  249. package/dist/src/gateway/service/marketplace-service.js +2 -2
  250. package/dist/src/gateway/service/run-gateway-agent.js +13 -5
  251. package/dist/src/gateway/service/session-input-coordinator.d.ts +1 -1
  252. package/dist/src/gateway/service/session-input-coordinator.js +29 -9
  253. package/dist/src/gateway/service/sessions-api.js +0 -6
  254. package/dist/src/gateway/service.js +3 -12
  255. package/dist/src/gateway/session-reset-service.js +0 -6
  256. package/dist/src/imports/compatibility.js +12 -10
  257. package/dist/src/mcp/channel-bridge.js +1 -1
  258. package/dist/src/providers/env-keys.js +1 -1
  259. package/dist/src/providers/index.js +26 -24
  260. package/dist/src/providers/model-call.d.ts +0 -2
  261. package/dist/src/providers/model-call.js +2 -6
  262. package/dist/src/providers/model-registry.js +4 -2
  263. package/dist/src/providers/model-supplements.d.ts +3 -3
  264. package/dist/src/providers/model-supplements.js +6 -27
  265. package/dist/src/providers/presentation.js +3 -8
  266. package/dist/src/providers/prompt-cache-plan.js +1 -1
  267. package/dist/src/providers/provider-auth-service.d.ts +1 -1
  268. package/dist/src/providers/provider-auth-service.js +7 -2
  269. package/dist/src/providers/provider-policy.d.ts +3 -0
  270. package/dist/src/providers/provider-policy.js +14 -0
  271. package/dist/src/providers/register-runtime-providers.js +6 -1
  272. package/dist/src/realtime/runtime.js +1 -1
  273. package/dist/src/session/store.js +7 -1
  274. package/dist/src/session/transcript-events.d.ts +5 -0
  275. package/dist/src/session/transcript-events.js +1 -0
  276. package/dist/src/session/types.d.ts +2 -0
  277. package/dist/src/storage/sqlite/device-grant-audit-repository.d.ts +11 -0
  278. package/dist/src/storage/sqlite/device-grant-audit-repository.js +10 -0
  279. package/dist/src/storage/sqlite/endpoint-device-settings-repository.d.ts +7 -0
  280. package/dist/src/storage/sqlite/endpoint-device-settings-repository.js +17 -0
  281. package/dist/src/storage/sqlite/migrations/240_device_settings.sql +5 -0
  282. package/dist/src/storage/sqlite/migrations/241_device_grant_audit.sql +13 -0
  283. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  284. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  285. package/dist/src/storage/sqlite/schema.js +1 -1
  286. package/dist/src/storage/sqlite/session-input-repository.d.ts +1 -0
  287. package/dist/src/storage/sqlite/session-input-repository.js +5 -1
  288. package/dist/src/tui/backends/gateway-realtime-backend.js +1 -1
  289. package/dist/src/tui/xopc-tui-keybindings.d.ts +4 -4
  290. package/package.json +19 -8
  291. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CCRfvuov.js +0 -1
  292. package/dist/gateway/static/root/assets/agent-plugin-dialog-CRlzd8El.js +0 -1
  293. package/dist/gateway/static/root/assets/agents-_ug2LCQb.js +0 -66
  294. package/dist/gateway/static/root/assets/automations-workspace-BQywN6nG.js +0 -6
  295. package/dist/gateway/static/root/assets/browser-automations-page-yiEuG1v7.js +0 -3
  296. package/dist/gateway/static/root/assets/capabilities-page-BEnFt_dj.js +0 -2
  297. package/dist/gateway/static/root/assets/connectors-page-D6wTmWA6.js +0 -2
  298. package/dist/gateway/static/root/assets/copy-text-row-BHDs3cBa.js +0 -1
  299. package/dist/gateway/static/root/assets/dependency-picker-BTERkA9X.js +0 -1
  300. package/dist/gateway/static/root/assets/device-pairing-wizard-DI2bqaKO.js +0 -1
  301. package/dist/gateway/static/root/assets/dist-Che_jiQF.js +0 -1
  302. package/dist/gateway/static/root/assets/gateway-realtime-DDWymi-o.js +0 -1
  303. package/dist/gateway/static/root/assets/home-page-BZDjvwet.js +0 -2
  304. package/dist/gateway/static/root/assets/index-BB1z8QxA.js +0 -106
  305. package/dist/gateway/static/root/assets/index-D9R6tU7r.css +0 -1
  306. package/dist/gateway/static/root/assets/link-2-D_ZKYUW7.js +0 -1
  307. package/dist/gateway/static/root/assets/local-session-drafts-DRPsDCj1.js +0 -1
  308. package/dist/gateway/static/root/assets/logs-page-DL-BM0xq.js +0 -2
  309. package/dist/gateway/static/root/assets/management-settings-BOVRHhXk.js +0 -1
  310. package/dist/gateway/static/root/assets/note-detail-panel-DJJK2yL4.js +0 -5
  311. package/dist/gateway/static/root/assets/notes-page-oCxO7ZTv.js +0 -8
  312. package/dist/gateway/static/root/assets/personal-page-DOk9gUK5.js +0 -1
  313. package/dist/gateway/static/root/assets/project-detail-page-3uAzbW4T.js +0 -1
  314. package/dist/gateway/static/root/assets/session-manager-LInoZ_Yi.js +0 -16
  315. package/dist/gateway/static/root/assets/sessions-page-BCVlNHtq.js +0 -1
  316. package/dist/gateway/static/root/assets/settings-advanced-gate-Bz-ue9fZ.js +0 -1
  317. package/dist/gateway/static/root/assets/setup-status-panel-B5BoZ-1y.js +0 -1
  318. package/dist/gateway/static/root/assets/shares-settings-BlnlzGjH.js +0 -1
  319. package/dist/gateway/static/root/assets/skills-page-DjdTeYzm.js +0 -2
  320. package/dist/gateway/static/root/assets/use-file-preview-expanded-Db2VYg1b.js +0 -2
  321. package/dist/gateway/static/root/assets/user-model-page-B74LkVbp.js +0 -2
  322. package/dist/gateway/static/root/assets/workflows-page-Crk4SxtC.js +0 -6
  323. package/dist/src/agent/embedded/system-prompt-override.d.ts +0 -2
  324. package/dist/src/agent/embedded/system-prompt-override.js +0 -21
  325. package/dist/src/agent/external-tools/mcp-provider.d.ts +0 -32
  326. package/dist/src/agent/external-tools/mcp-provider.js +0 -208
  327. package/dist/src/agent/mcp/bundle-mcp-config.d.ts +0 -20
  328. package/dist/src/agent/mcp/bundle-mcp-gateway.d.ts +0 -79
  329. package/dist/src/agent/mcp/bundle-mcp-gateway.js +0 -93
  330. package/dist/src/agent/mcp/bundle-mcp-names.d.ts +0 -1
  331. package/dist/src/agent/mcp/bundle-mcp-names.js +0 -25
  332. package/dist/src/agent/mcp/bundle-mcp-policy.d.ts +0 -1
  333. package/dist/src/agent/mcp/bundle-mcp-policy.js +0 -6
  334. package/dist/src/agent/mcp/bundle-mcp-runtime.d.ts +0 -46
  335. package/dist/src/agent/mcp/bundle-mcp-runtime.js +0 -571
  336. package/dist/src/agent/mcp/bundle-mcp-tools.d.ts +0 -2
  337. package/dist/src/agent/mcp/bundle-mcp-tools.js +0 -2
  338. package/dist/src/agent/mcp/bundle-mcp-types.d.ts +0 -76
  339. package/dist/src/agent/mcp/bundle-mcp-types.js +0 -1
  340. package/dist/src/agent/mcp/embedded-mcp.d.ts +0 -10
  341. package/dist/src/agent/mcp/embedded-mcp.js +0 -14
  342. package/dist/src/agent/mcp/index.d.ts +0 -5
  343. package/dist/src/agent/mcp/index.js +0 -12
  344. package/dist/src/agent/mcp/mcp-config-shared.d.ts +0 -8
  345. package/dist/src/agent/mcp/mcp-config-shared.js +0 -39
  346. package/dist/src/agent/mcp/mcp-http.d.ts +0 -23
  347. package/dist/src/agent/mcp/mcp-http.js +0 -67
  348. package/dist/src/agent/mcp/mcp-resource-id.d.ts +0 -6
  349. package/dist/src/agent/mcp/mcp-resource-id.js +0 -19
  350. package/dist/src/agent/mcp/mcp-stdio-transport.d.ts +0 -26
  351. package/dist/src/agent/mcp/mcp-stdio-transport.js +0 -120
  352. package/dist/src/agent/mcp/mcp-stdio.d.ts +0 -18
  353. package/dist/src/agent/mcp/mcp-stdio.js +0 -35
  354. package/dist/src/agent/mcp/mcp-transport-config.d.ts +0 -28
  355. package/dist/src/agent/mcp/mcp-transport-config.js +0 -91
  356. package/dist/src/agent/mcp/mcp-transport.d.ts +0 -17
  357. package/dist/src/agent/mcp/mcp-transport.js +0 -141
  358. package/dist/src/agent/mcp/oauth/index.d.ts +0 -6
  359. package/dist/src/agent/mcp/oauth/index.js +0 -6
  360. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.d.ts +0 -5
  361. package/dist/src/agent/mcp/oauth/mcp-oauth-errors.js +0 -14
  362. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.d.ts +0 -30
  363. package/dist/src/agent/mcp/oauth/mcp-oauth-manager.js +0 -276
  364. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.d.ts +0 -33
  365. package/dist/src/agent/mcp/oauth/mcp-oauth-provider.js +0 -103
  366. package/dist/src/agent/mcp/oauth/mcp-oauth-session.d.ts +0 -31
  367. package/dist/src/agent/mcp/oauth/mcp-oauth-session.js +0 -181
  368. package/dist/src/agent/mcp/oauth/mcp-oauth-store.d.ts +0 -12
  369. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +0 -91
  370. package/dist/src/agent/mcp/oauth/mcp-oauth-types.d.ts +0 -22
  371. package/dist/src/agent/mcp/oauth/mcp-oauth-types.js +0 -1
  372. package/dist/src/agent/mcp/plugin-http-fetch.d.ts +0 -2
  373. package/dist/src/agent/source-context/mcp-resource-context.d.ts +0 -8
  374. package/dist/src/agent/source-context/mcp-resource-context.js +0 -30
  375. package/dist/src/auth/oauth/openai-codex.d.ts +0 -9
  376. package/dist/src/auth/oauth/openai-codex.js +0 -414
  377. package/dist/src/connectors/plugin-mcp-recovery.d.ts +0 -28
  378. package/dist/src/connectors/plugin-mcp-recovery.js +0 -90
  379. package/dist/src/extensions/agent-plugins/connection.d.ts +0 -8
  380. package/dist/src/extensions/agent-plugins/connection.js +0 -41
  381. package/dist/src/extensions/agent-plugins/health.d.ts +0 -4
  382. package/dist/src/extensions/agent-plugins/health.js +0 -48
  383. package/dist/src/extensions/agent-plugins/plugin-oauth-scope.d.ts +0 -1
  384. 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';