@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,12 +0,0 @@
1
- import { mcpToolPolicyId } from "./bundle-mcp-policy.js";
2
- import { loadMergedBundleMcpConfig } from "./bundle-mcp-config.js";
3
- import { loadEmbeddedMcpConfig } from "./embedded-mcp.js";
4
- import { McpAuthorizationRequiredError, isMcpAuthorizationError } from "./oauth/mcp-oauth-errors.js";
5
- import { McpOAuthStore, canonicalMcpServerUrl, mcpOAuthServerKey } from "./oauth/mcp-oauth-store.js";
6
- import { XopcMcpOAuthClientProvider } from "./oauth/mcp-oauth-provider.js";
7
- import { __testing, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, retireSessionMcpRuntime, retireSessionMcpRuntimeForConversationId } from "./bundle-mcp-runtime.js";
8
- import "./bundle-mcp-tools.js";
9
- import { McpOAuthSession } from "./oauth/mcp-oauth-session.js";
10
- import { McpOAuthManager, getMcpOAuthManager } from "./oauth/mcp-oauth-manager.js";
11
- import "./oauth/index.js";
12
- export { McpAuthorizationRequiredError, McpOAuthManager, McpOAuthSession, McpOAuthStore, XopcMcpOAuthClientProvider, __testing, canonicalMcpServerUrl, createSessionMcpRuntime, disposeAllSessionMcpRuntimes, disposeSessionMcpRuntime, getMcpOAuthManager, getOrCreateSessionMcpRuntime, getSessionMcpRuntimeManager, isMcpAuthorizationError, loadEmbeddedMcpConfig, loadMergedBundleMcpConfig, mcpOAuthServerKey, mcpToolPolicyId, retireSessionMcpRuntime, retireSessionMcpRuntimeForConversationId };
@@ -1,8 +0,0 @@
1
- export declare function isMcpConfigRecord(value: unknown): value is Record<string, unknown>;
2
- export declare function toMcpStringRecord(value: unknown, options?: {
3
- onDroppedEntry?: (key: string, value: unknown) => void;
4
- }): Record<string, string> | undefined;
5
- export declare function toMcpEnvRecord(value: unknown, options?: {
6
- onDroppedEntry?: (key: string, value: unknown) => void;
7
- }): Record<string, string> | undefined;
8
- export declare function toMcpStringArray(value: unknown): string[] | undefined;
@@ -1,39 +0,0 @@
1
- import { isDangerousHostEnvVarName } from "../../infra/host-env-security.js";
2
- //#region src/agent/mcp/mcp-config-shared.ts
3
- function isMcpConfigRecord(value) {
4
- return value !== null && typeof value === "object" && !Array.isArray(value);
5
- }
6
- function toMcpFilteredStringRecord(value, options) {
7
- if (!isMcpConfigRecord(value)) return;
8
- let droppedByKey = false;
9
- const entries = Object.entries(value).map(([key, entry]) => {
10
- if (options?.shouldDropKey?.(key)) {
11
- droppedByKey = true;
12
- options?.onDroppedEntry?.(key, entry);
13
- return null;
14
- }
15
- if (typeof entry === "string") return [key, entry];
16
- if (typeof entry === "number" || typeof entry === "boolean") return [key, String(entry)];
17
- options?.onDroppedEntry?.(key, entry);
18
- return null;
19
- }).filter((entry) => entry !== null);
20
- if (entries.length === 0 && droppedByKey && options?.preserveEmptyWhenKeysDropped) return {};
21
- return entries.length > 0 ? Object.fromEntries(entries) : void 0;
22
- }
23
- function toMcpStringRecord(value, options) {
24
- return toMcpFilteredStringRecord(value, options);
25
- }
26
- function toMcpEnvRecord(value, options) {
27
- return toMcpFilteredStringRecord(value, {
28
- ...options,
29
- preserveEmptyWhenKeysDropped: true,
30
- shouldDropKey: (key) => isDangerousHostEnvVarName(key)
31
- });
32
- }
33
- function toMcpStringArray(value) {
34
- if (!Array.isArray(value)) return;
35
- const entries = value.filter((entry) => typeof entry === "string");
36
- return entries.length > 0 ? entries : [];
37
- }
38
- //#endregion
39
- export { isMcpConfigRecord, toMcpEnvRecord, toMcpStringArray, toMcpStringRecord };
@@ -1,23 +0,0 @@
1
- export type HttpMcpTransportType = "sse" | "streamable-http";
2
- export type HttpMcpServerLaunchConfig = {
3
- transportType: HttpMcpTransportType;
4
- url: string;
5
- headers?: Record<string, string>;
6
- auth?: {
7
- type: "oauth";
8
- clientId?: string;
9
- };
10
- };
11
- export type HttpMcpServerLaunchResult = {
12
- ok: true;
13
- config: HttpMcpServerLaunchConfig;
14
- } | {
15
- ok: false;
16
- reason: string;
17
- };
18
- export declare function resolveHttpMcpServerLaunchConfig(raw: unknown, options?: {
19
- transportType?: HttpMcpTransportType;
20
- onDroppedHeader?: (key: string, value: unknown) => void;
21
- onMalformedHeaders?: (value: unknown) => void;
22
- }): HttpMcpServerLaunchResult;
23
- export declare function describeHttpMcpServerLaunchConfig(config: HttpMcpServerLaunchConfig): string;
@@ -1,67 +0,0 @@
1
- import { redactSensitiveUrl, redactSensitiveUrlLikeString } from "../../utils/redact-sensitive-url.js";
2
- import { isMcpConfigRecord, toMcpStringRecord } from "./mcp-config-shared.js";
3
- //#region src/agent/mcp/mcp-http.ts
4
- function resolveHttpMcpServerLaunchConfig(raw, options) {
5
- if (!isMcpConfigRecord(raw)) return {
6
- ok: false,
7
- reason: "server config must be an object"
8
- };
9
- if (typeof raw.url !== "string" || raw.url.trim().length === 0) return {
10
- ok: false,
11
- reason: "its url is missing"
12
- };
13
- const url = raw.url.trim();
14
- let parsed;
15
- try {
16
- parsed = new URL(url);
17
- } catch {
18
- return {
19
- ok: false,
20
- reason: `its url is not a valid URL: ${redactSensitiveUrlLikeString(url)}`
21
- };
22
- }
23
- if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return {
24
- ok: false,
25
- reason: `only http and https URLs are supported, got ${parsed.protocol}`
26
- };
27
- let headers;
28
- if (raw.headers !== void 0 && raw.headers !== null) if (!isMcpConfigRecord(raw.headers)) options?.onMalformedHeaders?.(raw.headers);
29
- else headers = toMcpStringRecord(raw.headers, { onDroppedEntry: options?.onDroppedHeader });
30
- let auth;
31
- if (raw.auth !== void 0) {
32
- if (!isMcpConfigRecord(raw.auth) || raw.auth.type !== "oauth") return {
33
- ok: false,
34
- reason: "its auth must be { \"type\": \"oauth\" }"
35
- };
36
- if (raw.auth.clientId !== void 0 && (typeof raw.auth.clientId !== "string" || !raw.auth.clientId.trim())) return {
37
- ok: false,
38
- reason: "its OAuth clientId must be a non-empty string"
39
- };
40
- if ((options?.transportType ?? "streamable-http") !== "streamable-http") return {
41
- ok: false,
42
- reason: "OAuth supports streamable HTTP only"
43
- };
44
- if (headers && Object.keys(headers).some((key) => key.toLowerCase() === "authorization")) return {
45
- ok: false,
46
- reason: "OAuth cannot be combined with a static Authorization header"
47
- };
48
- auth = {
49
- type: "oauth",
50
- ...typeof raw.auth.clientId === "string" ? { clientId: raw.auth.clientId.trim() } : {}
51
- };
52
- }
53
- return {
54
- ok: true,
55
- config: {
56
- transportType: options?.transportType ?? "streamable-http",
57
- url,
58
- headers,
59
- auth
60
- }
61
- };
62
- }
63
- function describeHttpMcpServerLaunchConfig(config) {
64
- return redactSensitiveUrl(config.url);
65
- }
66
- //#endregion
67
- export { describeHttpMcpServerLaunchConfig, resolveHttpMcpServerLaunchConfig };
@@ -1,6 +0,0 @@
1
- export interface McpResourceIdentity {
2
- serverId: string;
3
- uri: string;
4
- }
5
- export declare function encodeMcpResourceId(identity: McpResourceIdentity): string;
6
- export declare function decodeMcpResourceId(sourceId: string): McpResourceIdentity | null;
@@ -1,19 +0,0 @@
1
- //#region src/agent/mcp/mcp-resource-id.ts
2
- function encodeMcpResourceId(identity) {
3
- return Buffer.from(JSON.stringify(identity), "utf8").toString("base64url");
4
- }
5
- function decodeMcpResourceId(sourceId) {
6
- try {
7
- const value = JSON.parse(Buffer.from(sourceId, "base64url").toString("utf8"));
8
- if (typeof value.serverId !== "string" || !value.serverId.trim()) return null;
9
- if (typeof value.uri !== "string" || !value.uri.trim()) return null;
10
- return {
11
- serverId: value.serverId,
12
- uri: value.uri
13
- };
14
- } catch {
15
- return null;
16
- }
17
- }
18
- //#endregion
19
- export { decodeMcpResourceId, encodeMcpResourceId };
@@ -1,26 +0,0 @@
1
- import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
2
- import type { JSONRPCMessage } from "@modelcontextprotocol/sdk/types.js";
3
- export type XopcStdioServerParameters = {
4
- command: string;
5
- args?: string[];
6
- env?: Record<string, string>;
7
- cwd?: string;
8
- stderr?: "pipe" | "overlapped" | "inherit" | "ignore";
9
- pluginDataDir?: string;
10
- };
11
- export declare class XopcStdioClientTransport implements Transport {
12
- private readonly serverParams;
13
- onclose?: () => void;
14
- onerror?: (error: Error) => void;
15
- onmessage?: (message: JSONRPCMessage) => void;
16
- private readonly readBuffer;
17
- private readonly stderrStream;
18
- private process?;
19
- constructor(serverParams: XopcStdioServerParameters);
20
- start(): Promise<void>;
21
- get stderr(): import("node:stream").Readable;
22
- get pid(): number;
23
- private processReadBuffer;
24
- close(): Promise<void>;
25
- send(message: JSONRPCMessage): Promise<void>;
26
- }
@@ -1,120 +0,0 @@
1
- import { terminateProcess } from "../../process/kill-tree.js";
2
- import { containedPath } from "../../extensions/agent-plugins/validation.js";
3
- import { spawn } from "node:child_process";
4
- import { mkdir } from "node:fs/promises";
5
- import { getDefaultEnvironment } from "@modelcontextprotocol/sdk/client/stdio.js";
6
- import process from "node:process";
7
- import { PassThrough } from "node:stream";
8
- import { ReadBuffer, serializeMessage } from "@modelcontextprotocol/sdk/shared/stdio.js";
9
- //#region src/agent/mcp/mcp-stdio-transport.ts
10
- const CLOSE_TIMEOUT_MS = 2e3;
11
- function delay(ms) {
12
- return new Promise((resolve) => {
13
- setTimeout(resolve, ms).unref();
14
- });
15
- }
16
- var XopcStdioClientTransport = class {
17
- onclose;
18
- onerror;
19
- onmessage;
20
- readBuffer = new ReadBuffer();
21
- stderrStream = null;
22
- process;
23
- constructor(serverParams) {
24
- this.serverParams = serverParams;
25
- if (serverParams.stderr === "pipe" || serverParams.stderr === "overlapped") this.stderrStream = new PassThrough();
26
- }
27
- async start() {
28
- if (this.process) throw new Error("XopcStdioClientTransport already started; Client.connect() starts transports automatically.");
29
- if (this.serverParams.pluginDataDir) {
30
- const data = this.serverParams.pluginDataDir;
31
- await mkdir(data, {
32
- recursive: true,
33
- mode: 448
34
- });
35
- if (this.serverParams.cwd) containedPath(this.serverParams.cwd.startsWith(data) ? data : this.serverParams.env?.PLUGIN_ROOT ?? data, this.serverParams.cwd);
36
- }
37
- await new Promise((resolve, reject) => {
38
- const baseEnv = {
39
- ...getDefaultEnvironment(),
40
- ...this.serverParams.env
41
- };
42
- const child = spawn(this.serverParams.command, this.serverParams.args ?? [], {
43
- cwd: this.serverParams.cwd,
44
- detached: process.platform !== "win32",
45
- env: baseEnv,
46
- shell: false,
47
- stdio: [
48
- "pipe",
49
- "pipe",
50
- this.serverParams.stderr ?? "inherit"
51
- ],
52
- windowsHide: process.platform === "win32"
53
- });
54
- this.process = child;
55
- child.on("error", (error) => {
56
- reject(error);
57
- this.onerror?.(error);
58
- });
59
- child.on("spawn", () => resolve());
60
- child.on("close", () => {
61
- this.process = void 0;
62
- this.onclose?.();
63
- });
64
- child.stdin?.on("error", (error) => this.onerror?.(error));
65
- child.stdout?.on("data", (chunk) => {
66
- this.readBuffer.append(chunk);
67
- this.processReadBuffer();
68
- });
69
- child.stdout?.on("error", (error) => this.onerror?.(error));
70
- if (this.stderrStream && child.stderr) child.stderr.pipe(this.stderrStream);
71
- });
72
- }
73
- get stderr() {
74
- return this.stderrStream ?? this.process?.stderr ?? null;
75
- }
76
- get pid() {
77
- return this.process?.pid ?? null;
78
- }
79
- processReadBuffer() {
80
- while (true) try {
81
- const message = this.readBuffer.readMessage();
82
- if (message === null) break;
83
- this.onmessage?.(message);
84
- } catch (error) {
85
- this.onerror?.(error instanceof Error ? error : new Error(String(error)));
86
- }
87
- }
88
- async close() {
89
- const processToClose = this.process;
90
- this.process = void 0;
91
- if (processToClose) {
92
- const closePromise = new Promise((resolve) => {
93
- processToClose.once("close", () => resolve());
94
- });
95
- try {
96
- processToClose.stdin?.end();
97
- } catch {}
98
- await Promise.race([closePromise, delay(CLOSE_TIMEOUT_MS)]);
99
- if (processToClose.exitCode === null && processToClose.pid) {
100
- await terminateProcess(processToClose, {
101
- tree: true,
102
- detached: process.platform !== "win32"
103
- });
104
- await Promise.race([closePromise, delay(CLOSE_TIMEOUT_MS)]);
105
- }
106
- }
107
- this.readBuffer.clear();
108
- }
109
- send(message) {
110
- return new Promise((resolve) => {
111
- const stdin = this.process?.stdin;
112
- if (!stdin) throw new Error("Not connected");
113
- const json = serializeMessage(message);
114
- if (stdin.write(json)) resolve();
115
- else stdin.once("drain", resolve);
116
- });
117
- }
118
- };
119
- //#endregion
120
- export { XopcStdioClientTransport };
@@ -1,18 +0,0 @@
1
- type StdioMcpServerLaunchConfig = {
2
- command: string;
3
- args?: string[];
4
- env?: Record<string, string>;
5
- cwd?: string;
6
- };
7
- type StdioMcpServerLaunchResult = {
8
- ok: true;
9
- config: StdioMcpServerLaunchConfig;
10
- } | {
11
- ok: false;
12
- reason: string;
13
- };
14
- export declare function resolveStdioMcpServerLaunchConfig(raw: unknown, options?: {
15
- onDroppedEnv?: (key: string, value: unknown) => void;
16
- }): StdioMcpServerLaunchResult;
17
- export declare function describeStdioMcpServerLaunchConfig(config: StdioMcpServerLaunchConfig): string;
18
- export type { StdioMcpServerLaunchConfig, StdioMcpServerLaunchResult };
@@ -1,35 +0,0 @@
1
- import { isMcpConfigRecord, toMcpEnvRecord, toMcpStringArray } from "./mcp-config-shared.js";
2
- //#region src/agent/mcp/mcp-stdio.ts
3
- function resolveStdioMcpServerLaunchConfig(raw, options) {
4
- if (!isMcpConfigRecord(raw)) return {
5
- ok: false,
6
- reason: "server config must be an object"
7
- };
8
- if (typeof raw.command !== "string" || raw.command.trim().length === 0) {
9
- if (typeof raw.url === "string" && raw.url.trim().length > 0) return {
10
- ok: false,
11
- reason: "not a stdio server (has url)"
12
- };
13
- return {
14
- ok: false,
15
- reason: "its command is missing"
16
- };
17
- }
18
- const cwd = typeof raw.cwd === "string" && raw.cwd.trim().length > 0 ? raw.cwd : typeof raw.workingDirectory === "string" && raw.workingDirectory.trim().length > 0 ? raw.workingDirectory : void 0;
19
- return {
20
- ok: true,
21
- config: {
22
- command: raw.command,
23
- args: toMcpStringArray(raw.args),
24
- env: toMcpEnvRecord(raw.env, { onDroppedEntry: options?.onDroppedEnv }),
25
- cwd
26
- }
27
- };
28
- }
29
- function describeStdioMcpServerLaunchConfig(config) {
30
- const args = Array.isArray(config.args) && config.args.length > 0 ? ` ${config.args.join(" ")}` : "";
31
- const cwd = config.cwd ? ` (cwd=${config.cwd})` : "";
32
- return `${config.command}${args}${cwd}`;
33
- }
34
- //#endregion
35
- export { describeStdioMcpServerLaunchConfig, resolveStdioMcpServerLaunchConfig };
@@ -1,28 +0,0 @@
1
- import { type HttpMcpTransportType } from "./mcp-http.js";
2
- type ResolvedBaseMcpTransportConfig = {
3
- description: string;
4
- connectionTimeoutMs: number;
5
- requestTimeoutMs: number;
6
- };
7
- export type ResolvedStdioMcpTransportConfig = ResolvedBaseMcpTransportConfig & {
8
- kind: "stdio";
9
- transportType: "stdio";
10
- command: string;
11
- args?: string[];
12
- env?: Record<string, string>;
13
- cwd?: string;
14
- };
15
- export type ResolvedHttpMcpTransportConfig = ResolvedBaseMcpTransportConfig & {
16
- kind: "http";
17
- transportType: HttpMcpTransportType;
18
- url: string;
19
- headers?: Record<string, string>;
20
- auth?: {
21
- type: "oauth";
22
- clientId?: string;
23
- };
24
- };
25
- export type ResolvedMcpTransportConfig = ResolvedStdioMcpTransportConfig | ResolvedHttpMcpTransportConfig;
26
- export declare const DEFAULT_MCP_REQUEST_TIMEOUT_MS: number;
27
- export declare function resolveMcpTransportConfig(serverName: string, rawServer: unknown): ResolvedMcpTransportConfig | null;
28
- export {};
@@ -1,91 +0,0 @@
1
- import { createLogger } from "../../utils/logger/index.js";
2
- import { init_logger } from "../../utils/logger.js";
3
- import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
4
- import { resolveXopcMcpTransportAlias } from "../../config/mcp-config-normalize.js";
5
- import { sanitizeForLog } from "../../utils/sanitize-log.js";
6
- import { describeHttpMcpServerLaunchConfig, resolveHttpMcpServerLaunchConfig } from "./mcp-http.js";
7
- import { describeStdioMcpServerLaunchConfig, resolveStdioMcpServerLaunchConfig } from "./mcp-stdio.js";
8
- //#region src/agent/mcp/mcp-transport-config.ts
9
- init_logger();
10
- init_string_coerce();
11
- const log = createLogger("Mcp:Bundle");
12
- const DEFAULT_CONNECTION_TIMEOUT_MS = 3e4;
13
- const DEFAULT_MCP_REQUEST_TIMEOUT_MS = 1800 * 1e3;
14
- function getConnectionTimeoutMs(rawServer) {
15
- if (rawServer && typeof rawServer === "object" && typeof rawServer.connectionTimeoutMs === "number" && rawServer.connectionTimeoutMs > 0) return rawServer.connectionTimeoutMs;
16
- return DEFAULT_CONNECTION_TIMEOUT_MS;
17
- }
18
- function getRequestTimeoutMs(rawServer) {
19
- if (rawServer && typeof rawServer === "object" && typeof rawServer.requestTimeoutMs === "number" && rawServer.requestTimeoutMs > 0) return rawServer.requestTimeoutMs;
20
- return DEFAULT_MCP_REQUEST_TIMEOUT_MS;
21
- }
22
- function getRequestedTransport(rawServer) {
23
- if (!rawServer || typeof rawServer !== "object" || typeof rawServer.transport !== "string") return "";
24
- return normalizeLowercaseStringOrEmpty(rawServer.transport);
25
- }
26
- function getRequestedTransportAlias(rawServer) {
27
- if (!rawServer || typeof rawServer !== "object" || typeof rawServer.type !== "string") return "";
28
- return resolveXopcMcpTransportAlias(rawServer.type) ?? "";
29
- }
30
- function resolveHttpTransportConfig(serverName, rawServer, transportType) {
31
- const launch = resolveHttpMcpServerLaunchConfig(rawServer, {
32
- transportType,
33
- onDroppedHeader: (key) => {
34
- log.warn({
35
- phase: "agent.mcp_connect",
36
- serverName,
37
- header: key
38
- }, `bundle-mcp: server "${serverName}": header "${key}" has an unsupported value type and was ignored`);
39
- },
40
- onMalformedHeaders: () => {
41
- log.warn({
42
- phase: "agent.mcp_connect",
43
- serverName
44
- }, `bundle-mcp: server "${serverName}": "headers" must be a JSON object; the value was ignored`);
45
- }
46
- });
47
- if (!launch.ok) return null;
48
- return {
49
- kind: "http",
50
- transportType: launch.config.transportType,
51
- url: launch.config.url,
52
- headers: launch.config.headers,
53
- auth: launch.config.auth,
54
- description: describeHttpMcpServerLaunchConfig(launch.config),
55
- connectionTimeoutMs: getConnectionTimeoutMs(rawServer),
56
- requestTimeoutMs: getRequestTimeoutMs(rawServer)
57
- };
58
- }
59
- function resolveMcpTransportConfig(serverName, rawServer) {
60
- const logServerName = sanitizeForLog(serverName);
61
- const requestedTransport = getRequestedTransport(rawServer);
62
- const requestedTransportAlias = requestedTransport ? "" : getRequestedTransportAlias(rawServer);
63
- const effectiveTransport = requestedTransport || requestedTransportAlias;
64
- const stdioLaunch = resolveStdioMcpServerLaunchConfig(rawServer, { onDroppedEnv: (key) => {
65
- log.warn(`bundle-mcp: server "${logServerName}": env "${sanitizeForLog(key)}" is blocked for stdio startup safety and was ignored.`);
66
- } });
67
- if (stdioLaunch.ok) return {
68
- kind: "stdio",
69
- transportType: "stdio",
70
- command: stdioLaunch.config.command,
71
- args: stdioLaunch.config.args,
72
- env: stdioLaunch.config.env,
73
- cwd: stdioLaunch.config.cwd,
74
- description: describeStdioMcpServerLaunchConfig(stdioLaunch.config),
75
- connectionTimeoutMs: getConnectionTimeoutMs(rawServer),
76
- requestTimeoutMs: getRequestTimeoutMs(rawServer)
77
- };
78
- if (effectiveTransport && effectiveTransport !== "sse" && effectiveTransport !== "streamable-http") {
79
- log.warn(`bundle-mcp: skipped server "${logServerName}" because transport "${sanitizeForLog(effectiveTransport)}" is not supported.`);
80
- return null;
81
- }
82
- const httpTransport = resolveHttpTransportConfig(serverName, rawServer, effectiveTransport === "sse" ? "sse" : "streamable-http");
83
- if (httpTransport) return httpTransport;
84
- const stdioReason = stdioLaunch.ok === false ? stdioLaunch.reason : "not a stdio server";
85
- const httpLaunch = resolveHttpMcpServerLaunchConfig(rawServer);
86
- const httpReason = httpLaunch.ok === false ? httpLaunch.reason : "not an HTTP MCP server";
87
- log.warn(`bundle-mcp: skipped server "${logServerName}" because ${stdioReason} and ${httpReason}.`);
88
- return null;
89
- }
90
- //#endregion
91
- export { DEFAULT_MCP_REQUEST_TIMEOUT_MS, resolveMcpTransportConfig };
@@ -1,17 +0,0 @@
1
- import type { OAuthClientProvider } from "@modelcontextprotocol/sdk/client/auth.js";
2
- import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
3
- import type { Config } from "../../config/schema.js";
4
- import { McpOAuthStore } from "./oauth/mcp-oauth-store.js";
5
- export type ResolvedMcpTransport = {
6
- transport: Transport;
7
- description: string;
8
- transportType: "stdio" | "sse" | "streamable-http";
9
- connectionTimeoutMs: number;
10
- requestTimeoutMs: number;
11
- detachStderr?: () => void;
12
- };
13
- export type ResolveMcpTransportOptions = {
14
- oauthProvider?: OAuthClientProvider;
15
- oauthStore?: McpOAuthStore;
16
- };
17
- export declare function resolveMcpTransport(serverName: string, rawServer: unknown, config?: Config, options?: ResolveMcpTransportOptions): Promise<ResolvedMcpTransport | null>;
@@ -1,141 +0,0 @@
1
- import { init_paths_state, resolveStateDir } from "../../config/paths-state.js";
2
- import { createLogger } from "../../utils/logger/index.js";
3
- import { init_logger } from "../../utils/logger.js";
4
- import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
5
- import { buildRuntimeEnvironment, resolveRuntimeCommand } from "../../runtime-tools/environment.js";
6
- import { XopcStdioClientTransport } from "./mcp-stdio-transport.js";
7
- import { resolveMcpTransportConfig } from "./mcp-transport-config.js";
8
- import { McpOAuthStore } from "./oauth/mcp-oauth-store.js";
9
- import { XopcMcpOAuthClientProvider } from "./oauth/mcp-oauth-provider.js";
10
- import { createPluginHttpFetch } from "./plugin-http-fetch.js";
11
- import { pluginOAuthScope } from "../../extensions/agent-plugins/plugin-oauth-scope.js";
12
- import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
13
- import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
14
- import { getDefaultEnvironment } from "@modelcontextprotocol/sdk/client/stdio.js";
15
- import { fetch } from "undici";
16
- //#region src/agent/mcp/mcp-transport.ts
17
- init_paths_state();
18
- init_logger();
19
- init_string_coerce();
20
- const log = createLogger("Mcp:Transport");
21
- function attachStderrLogging(serverName, transport) {
22
- const stderr = transport.stderr;
23
- if (!stderr || typeof stderr.on !== "function") return;
24
- const onData = (chunk) => {
25
- const message = normalizeOptionalString(typeof chunk === "string" ? chunk : String(chunk)) ?? "";
26
- if (!message) return;
27
- for (const line of message.split(/\r?\n/)) {
28
- const trimmed = line.trim();
29
- if (trimmed) log.debug(`bundle-mcp:${serverName}: ${trimmed}`);
30
- }
31
- };
32
- stderr.on("data", onData);
33
- return () => {
34
- if (typeof stderr.off === "function") stderr.off("data", onData);
35
- else if (typeof stderr.removeListener === "function") stderr.removeListener("data", onData);
36
- };
37
- }
38
- const fetchWithUndici = async (url, init) => await fetch(url, init);
39
- function buildSseEventSourceFetch(headers) {
40
- return (url, init) => {
41
- const sdkHeaders = {};
42
- if (init?.headers) if (init.headers instanceof Headers) init.headers.forEach((value, key) => {
43
- sdkHeaders[key] = value;
44
- });
45
- else Object.assign(sdkHeaders, init.headers);
46
- return fetchWithUndici(url, {
47
- ...init,
48
- headers: {
49
- ...sdkHeaders,
50
- ...headers
51
- }
52
- });
53
- };
54
- }
55
- function buildScopedHttpFetch(serverUrl, headers) {
56
- return async (url, init) => {
57
- const mergedHeaders = new Headers();
58
- if (new URL(url).origin === serverUrl.origin) for (const [key, value] of Object.entries(headers)) mergedHeaders.set(key, value);
59
- if (init?.headers) new Headers(init.headers).forEach((value, key) => mergedHeaders.set(key, value));
60
- return fetchWithUndici(url, {
61
- ...init,
62
- headers: mergedHeaders
63
- });
64
- };
65
- }
66
- async function resolveMcpTransport(serverName, rawServer, config, options = {}) {
67
- const resolved = resolveMcpTransportConfig(serverName, rawServer);
68
- if (!resolved) return null;
69
- const plugin = rawServer && typeof rawServer === "object" ? rawServer.xopcPlugin : void 0;
70
- if (resolved.kind === "stdio") {
71
- const command = config ? await resolveRuntimeCommand({
72
- command: resolved.command,
73
- stateDir: resolveStateDir(),
74
- config: config.runtimeTools,
75
- allowProvision: true
76
- }) : resolved.command;
77
- const env = config ? (await buildRuntimeEnvironment({
78
- stateDir: resolveStateDir(),
79
- config: config.runtimeTools,
80
- baseEnv: {
81
- ...getDefaultEnvironment(),
82
- ...resolved.env
83
- }
84
- })).env : resolved.env;
85
- const transport = new XopcStdioClientTransport({
86
- command,
87
- args: resolved.args,
88
- env,
89
- cwd: resolved.cwd,
90
- stderr: "pipe",
91
- pluginDataDir: plugin?.dataDir
92
- });
93
- return {
94
- transport,
95
- description: command === resolved.command ? resolved.description : `${command}${resolved.args?.length ? ` ${resolved.args.join(" ")}` : ""}`,
96
- transportType: "stdio",
97
- connectionTimeoutMs: resolved.connectionTimeoutMs,
98
- requestTimeoutMs: resolved.requestTimeoutMs,
99
- detachStderr: attachStderrLogging(serverName, transport)
100
- };
101
- }
102
- if (resolved.transportType === "streamable-http") {
103
- const serverUrl = new URL(resolved.url);
104
- const oauthEnabled = Boolean(resolved.auth);
105
- let oauthProvider = options.oauthProvider;
106
- if (resolved.auth && !oauthProvider) {
107
- const store = options.oauthStore ?? new McpOAuthStore(pluginOAuthScope(rawServer));
108
- if ((await store.load(serverUrl))?.tokens) oauthProvider = new XopcMcpOAuthClientProvider({
109
- serverUrl,
110
- clientId: resolved.auth.clientId,
111
- store
112
- });
113
- }
114
- return {
115
- transport: new StreamableHTTPClientTransport(serverUrl, {
116
- authProvider: oauthProvider,
117
- requestInit: !plugin && !oauthEnabled && resolved.headers ? { headers: resolved.headers } : void 0,
118
- fetch: plugin ? createPluginHttpFetch(serverUrl, resolved.headers ?? {}) : oauthEnabled ? buildScopedHttpFetch(serverUrl, resolved.headers ?? {}) : fetchWithUndici
119
- }),
120
- description: resolved.description,
121
- transportType: "streamable-http",
122
- connectionTimeoutMs: resolved.connectionTimeoutMs,
123
- requestTimeoutMs: resolved.requestTimeoutMs
124
- };
125
- }
126
- const headers = { ...resolved.headers };
127
- const hasHeaders = Object.keys(headers).length > 0;
128
- return {
129
- transport: new SSEClientTransport(new URL(resolved.url), {
130
- requestInit: !plugin && hasHeaders ? { headers } : void 0,
131
- fetch: plugin ? createPluginHttpFetch(new URL(resolved.url), headers) : fetchWithUndici,
132
- eventSourceInit: { fetch: plugin ? createPluginHttpFetch(new URL(resolved.url), headers) : buildSseEventSourceFetch(headers) }
133
- }),
134
- description: resolved.description,
135
- transportType: "sse",
136
- connectionTimeoutMs: resolved.connectionTimeoutMs,
137
- requestTimeoutMs: resolved.requestTimeoutMs
138
- };
139
- }
140
- //#endregion
141
- export { resolveMcpTransport };
@@ -1,6 +0,0 @@
1
- export * from './mcp-oauth-errors.js';
2
- export * from './mcp-oauth-manager.js';
3
- export * from './mcp-oauth-provider.js';
4
- export * from './mcp-oauth-session.js';
5
- export * from './mcp-oauth-store.js';
6
- export type * from './mcp-oauth-types.js';