@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,7 +1,7 @@
1
1
  import { BlockList, isIP } from "node:net";
2
2
  import { Agent, fetch } from "undici";
3
3
  import { lookup } from "node:dns";
4
- //#region src/agent/mcp/plugin-http-fetch.ts
4
+ //#region src/extensions/agent-plugins/source-http-fetch.ts
5
5
  const blocked = new BlockList();
6
6
  for (const [network, prefix] of [
7
7
  ["0.0.0.0", 8],
@@ -29,19 +29,19 @@ const publicDispatcher = new Agent({ connect: { lookup(host, options, callback)
29
29
  all: true
30
30
  }, (error, addresses) => {
31
31
  if (error) return callback(error, []);
32
- if (!addresses.length || addresses.some((entry) => isBlocked(entry.address))) return callback(/* @__PURE__ */ new Error("Plugin MCP cannot access private network addresses"), []);
32
+ if (!addresses.length || addresses.some((entry) => isBlocked(entry.address))) return callback(/* @__PURE__ */ new Error("Plugin download cannot access private network addresses"), []);
33
33
  if (options.all) callback(null, addresses);
34
34
  else callback(null, addresses[0].address, addresses[0].family);
35
35
  });
36
36
  } } });
37
- function createPluginHttpFetch(endpoint, configuredHeaders) {
37
+ function createPluginSourceFetch(endpoint, configuredHeaders) {
38
38
  return async (input, init) => {
39
39
  const url = new URL(input);
40
- if (!["https:", "http:"].includes(url.protocol) || url.username || url.password || url.hash) throw new Error("Invalid plugin MCP request URL");
40
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password || url.hash) throw new Error("Invalid plugin download request URL");
41
41
  const local = loopback(endpoint.hostname) && url.origin === endpoint.origin;
42
- if (!local && url.protocol !== "https:") throw new Error("Plugin MCP requires HTTPS");
42
+ if (!local && url.protocol !== "https:") throw new Error("Plugin download requires HTTPS");
43
43
  const address = url.hostname.replace(/^\[|\]$/g, "");
44
- if (!local && isIP(address) && isBlocked(address)) throw new Error("Plugin MCP cannot access private network addresses");
44
+ if (!local && isIP(address) && isBlocked(address)) throw new Error("Plugin download cannot access private network addresses");
45
45
  const headers = new Headers(url.origin === endpoint.origin ? configuredHeaders : void 0);
46
46
  new Headers(init?.headers).forEach((value, key) => headers.set(key, value));
47
47
  return await fetch(url, {
@@ -53,4 +53,4 @@ function createPluginHttpFetch(endpoint, configuredHeaders) {
53
53
  };
54
54
  }
55
55
  //#endregion
56
- export { createPluginHttpFetch };
56
+ export { createPluginSourceFetch };
@@ -1,4 +1,4 @@
1
- import { createPluginHttpFetch } from "../../agent/mcp/plugin-http-fetch.js";
1
+ import { createPluginSourceFetch } from "./source-http-fetch.js";
2
2
  import { tmpdir } from "node:os";
3
3
  import { join } from "node:path";
4
4
  import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
@@ -63,7 +63,7 @@ async function withAgentPluginSource(source, config, fn) {
63
63
  };
64
64
  } else {
65
65
  const url = new URL(source);
66
- const response = await createPluginHttpFetch(url, {})(url, { signal: AbortSignal.timeout(3e4) });
66
+ const response = await createPluginSourceFetch(url, {})(url, { signal: AbortSignal.timeout(3e4) });
67
67
  if (!response.ok || !response.body) throw new Error(`Plugin download failed (${response.status})`);
68
68
  const reader = response.body.getReader();
69
69
  const chunks = [];
@@ -4,7 +4,6 @@ import { init_logger } from "../../utils/logger.js";
4
4
  import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
5
5
  import { computeExtensionDirectoryIntegrity } from "../lockfile.js";
6
6
  import { containedPath, inspectAgentPlugin, pluginName } from "./validation.js";
7
- import { readPluginMcpHealth } from "./health.js";
8
7
  import { tmpdir } from "node:os";
9
8
  import { dirname, join, resolve } from "node:path";
10
9
  import { cpSync, existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, statSync, writeFileSync } from "node:fs";
@@ -104,8 +103,7 @@ var AgentPluginStore = class {
104
103
  component: "package",
105
104
  message: "Installed files differ from the reviewed package"
106
105
  });
107
- const health = Object.keys(inspection.servers).map((name) => readPluginMcpHealth(id, name, receipt.revision, this.stateDir));
108
- const readiness = !valid ? "blocked" : inspection.diagnostics.length || health.includes("error") ? "degraded" : health.some((status) => status !== "ready") ? "setup_required" : "ready";
106
+ const readiness = !valid ? "blocked" : inspection.diagnostics.length ? "degraded" : "ready";
109
107
  return {
110
108
  ...inspection,
111
109
  id,
@@ -28,10 +28,6 @@ declare const serverSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
28
28
  type: z.ZodLiteral<"streamable-http">;
29
29
  url: z.ZodString;
30
30
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
31
- }, z.core.$strict>, z.ZodObject<{
32
- type: z.ZodLiteral<"sse">;
33
- url: z.ZodString;
34
- headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
35
31
  }, z.core.$strict>], "type">;
36
32
  export type PluginManifest = z.infer<typeof manifestSchema>;
37
33
  export type PluginServer = z.infer<typeof serverSchema>;
@@ -1,8 +1,9 @@
1
1
  import { dirname, isAbsolute, join, relative, resolve } from "node:path";
2
2
  import { existsSync, lstatSync, readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
3
+ import { createHash } from "node:crypto";
3
4
  import { z } from "zod";
4
- import { validateHeaderName, validateHeaderValue } from "node:http";
5
5
  import yaml from "js-yaml";
6
+ import { validateHeaderName, validateHeaderValue } from "node:http";
6
7
  //#region src/extensions/agent-plugins/validation.ts
7
8
  const PLUGIN_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json";
8
9
  const MCP_SCHEMA = "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json";
@@ -24,25 +25,17 @@ const manifestSchema = z.object({
24
25
  extensions: z.record(z.string(), z.unknown()).optional()
25
26
  });
26
27
  const strings = z.record(z.string(), z.string());
27
- const serverSchema = z.discriminatedUnion("type", [
28
- z.strictObject({
29
- type: z.literal("stdio"),
30
- command: z.string().min(1),
31
- args: z.array(z.string()).optional(),
32
- env: strings.optional(),
33
- cwd: z.string().optional()
34
- }),
35
- z.strictObject({
36
- type: z.literal("streamable-http"),
37
- url: z.string().min(1),
38
- headers: strings.optional()
39
- }),
40
- z.strictObject({
41
- type: z.literal("sse"),
42
- url: z.string().min(1),
43
- headers: strings.optional()
44
- })
45
- ]);
28
+ const serverSchema = z.discriminatedUnion("type", [z.strictObject({
29
+ type: z.literal("stdio"),
30
+ command: z.string().min(1),
31
+ args: z.array(z.string()).optional(),
32
+ env: strings.optional(),
33
+ cwd: z.string().optional()
34
+ }), z.strictObject({
35
+ type: z.literal("streamable-http"),
36
+ url: z.string().min(1),
37
+ headers: strings.optional()
38
+ })]);
46
39
  function containedPath(root, path) {
47
40
  const base = resolve(root);
48
41
  const target = resolve(path);
@@ -205,7 +198,7 @@ function inspectAgentPlugin(rootDir, dataDir = join(rootDir, ".inspection-data")
205
198
  return result;
206
199
  }
207
200
  function pluginServerId(pluginId, serverName) {
208
- return `plugin/${encodeURIComponent(pluginId)}/${encodeURIComponent(serverName)}`;
201
+ return `plugin_${pluginId.replace(/[^a-zA-Z0-9_]/g, "_")}_${createHash("sha256").update(JSON.stringify([pluginId, serverName])).digest("hex").slice(0, 16)}`;
209
202
  }
210
203
  //#endregion
211
204
  export { MCP_SCHEMA, PLUGIN_SCHEMA, containedPath, expandPluginVariables, inspectAgentPlugin, pluginName, pluginServerId, resolvePluginCwd, validatePluginServer };
@@ -101,3 +101,8 @@ export declare function writeAgentAvatarFromBase64(agentId: string, base64: stri
101
101
  export declare function deleteAgentAvatarFile(agentId: string): Promise<AgentAdminResult<{
102
102
  agentId: string;
103
103
  }>>;
104
+ /** Rasterize configured generated avatars locally for native mobile clients. */
105
+ export declare function resolveAgentAvatarImage(agentId: string): Promise<AgentAdminResult<{
106
+ buffer: Buffer;
107
+ contentType: string;
108
+ }>>;
@@ -1,10 +1,10 @@
1
1
  import { normalizeAgentId, validateAgentIdForNewAgent } from "../agent-catalog/id.js";
2
2
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
3
3
  import { init_agent_scope, listAgentEntries, resolveAgentProfileDir, resolveAgentWorkspaceDir, resolveDefaultAgentId, resolveUserPath } from "../agent/agent-scope.js";
4
- import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
5
4
  import { AGENT_PROFILE_MARKDOWN_SYSTEM_FILES, REQUIRED_AGENT_PROFILE_MARKDOWN_FILE_SET } from "../agent/context/workspace.js";
6
- import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
7
5
  import { AgentCatalogService } from "../agent-catalog/service.js";
6
+ import { resolveEffectiveAgentProfile } from "../config/agent-profile.js";
7
+ import { isPathUnderWorkspace, resolveWorkspaceSafePath } from "./workspace-editor-path.js";
8
8
  import { GATEWAY_BUILTIN_TOOL_IDS } from "./agent-builtin-tools.js";
9
9
  import { resolve } from "node:path";
10
10
  import { mkdir, readFile, realpath, stat, unlink, writeFile } from "node:fs/promises";
@@ -434,5 +434,60 @@ async function deleteAgentAvatarFile(agentId) {
434
434
  data: { agentId: id }
435
435
  };
436
436
  }
437
+ const renderedAvatarCache = /* @__PURE__ */ new Map();
438
+ /** Rasterize configured generated avatars locally for native mobile clients. */
439
+ async function resolveAgentAvatarImage(agentId) {
440
+ const missing = assertAgentExistsForAvatar(agentId);
441
+ if (missing) return missing;
442
+ const id = normalizeAgentId(agentId);
443
+ const reference = listAgentEntries().find((entry) => normalizeAgentId(entry.id) === id)?.profile?.avatar?.trim() ?? "";
444
+ if (reference === "xopc:custom") return readAgentAvatarFile(id);
445
+ if (reference.startsWith("xopc:loopi:") || /^https?:\/\//i.test(reference)) return {
446
+ ok: false,
447
+ status: 404,
448
+ error: "Avatar is rendered by the client"
449
+ };
450
+ const match = /^xopc:dicebear:(adventurer|bottts|lorelei|thumbs|fun-emoji|pixel-art):(.+)$/.exec(reference);
451
+ const style = match?.[1] ?? "adventurer";
452
+ const seed = match?.[2] ?? id;
453
+ const key = JSON.stringify([style, seed]);
454
+ const cached = renderedAvatarCache.get(key);
455
+ if (cached) return {
456
+ ok: true,
457
+ data: {
458
+ buffer: cached,
459
+ contentType: "image/png"
460
+ }
461
+ };
462
+ const [{ createAvatar }, collection, { default: sharp }] = await Promise.all([
463
+ import("@dicebear/core"),
464
+ import("@dicebear/collection"),
465
+ import("sharp")
466
+ ]);
467
+ const options = {
468
+ seed,
469
+ size: 128
470
+ };
471
+ const svg = (() => {
472
+ switch (style) {
473
+ case "bottts": return createAvatar(collection.bottts, options).toString();
474
+ case "lorelei": return createAvatar(collection.lorelei, options).toString();
475
+ case "thumbs": return createAvatar(collection.thumbs, options).toString();
476
+ case "fun-emoji": return createAvatar(collection.funEmoji, options).toString();
477
+ case "pixel-art": return createAvatar(collection.pixelArt, options).toString();
478
+ default: return createAvatar(collection.adventurer, options).toString();
479
+ }
480
+ })();
481
+ const buffer = await sharp(Buffer.from(svg)).png().toBuffer();
482
+ if (renderedAvatarCache.size >= 64) renderedAvatarCache.delete(renderedAvatarCache.keys().next().value);
483
+ renderedAvatarCache.set(key, buffer);
484
+ return {
485
+ ok: true,
486
+ data: {
487
+ buffer,
488
+ contentType: "image/png"
489
+ }
490
+ };
491
+ }
437
492
  //#endregion
438
- export { createGatewayAgent, deleteAgentAvatarFile, deleteGatewayAgent, getGatewayAgentEffectiveConfig, listAgentProfileFiles, listGatewayAgents, readAgentAvatarFile, readAgentProfileFile, updateGatewayAgent, writeAgentAvatarFromBase64, writeAgentProfileFile };
493
+ export { createGatewayAgent, deleteAgentAvatarFile, deleteGatewayAgent, getGatewayAgentEffectiveConfig, listAgentProfileFiles, listGatewayAgents, readAgentAvatarFile, readAgentProfileFile, resolveAgentAvatarImage, updateGatewayAgent, writeAgentAvatarFromBase64, writeAgentProfileFile };
@@ -274,6 +274,7 @@ var ChatStreamMapper = class {
274
274
  const toolName = String(event.toolName ?? "unknown");
275
275
  this.toolCallToMessageId.set(toolCallId, messageId);
276
276
  const events = [this.make("tool_start", {
277
+ ...toolExecutionMetadata(event),
277
278
  messageId,
278
279
  toolCallId,
279
280
  toolName,
@@ -300,6 +301,7 @@ var ChatStreamMapper = class {
300
301
  const textDelta = extractText(partial);
301
302
  const toolName = String(event.toolName ?? "unknown");
302
303
  const events = [this.make("tool_update", {
304
+ ...toolExecutionMetadata(event),
303
305
  messageId,
304
306
  toolCallId,
305
307
  toolName,
@@ -329,6 +331,7 @@ var ChatStreamMapper = class {
329
331
  const result = boundRealtimeToolResult(fullResult);
330
332
  const toolName = String(event.toolName ?? "unknown");
331
333
  const events = [this.make("tool_end", {
334
+ ...toolExecutionMetadata(event),
332
335
  messageId,
333
336
  toolCallId,
334
337
  toolName,
@@ -541,6 +544,12 @@ function extractDetails(value) {
541
544
  function asRecord(value) {
542
545
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
543
546
  }
547
+ function toolExecutionMetadata(event) {
548
+ return {
549
+ ...typeof event.parentToolCallId === "string" ? { parentToolCallId: event.parentToolCallId } : {},
550
+ ...typeof event.durationMs === "number" ? { durationMs: event.durationMs } : {}
551
+ };
552
+ }
544
553
  function normalizeToolResult(value) {
545
554
  if (value == null) return void 0;
546
555
  if (typeof value === "string") return { text: value };
@@ -1,4 +1,4 @@
1
- import type { ToolActivity, TurnOutcome } from '@xopcai/gateway-contract';
1
+ import type { AgentStreamToolExecutionMetadata, ToolActivity, TurnOutcome } from '@xopcai/gateway-contract';
2
2
  import type { TaskUpdateTrigger } from '../../storage/sqlite/session-input-repository.js';
3
3
  export type ChatStreamStatus = 'success' | 'error' | 'cancelled' | 'suspended';
4
4
  export type PetFeedbackTaskState = 'working' | 'waiting' | 'success' | 'error';
@@ -63,14 +63,14 @@ export type ToolStartEvent = ChatStreamEnvelope<'tool_start', {
63
63
  toolName: string;
64
64
  args?: unknown;
65
65
  activity: ToolActivity;
66
- }>;
66
+ } & AgentStreamToolExecutionMetadata>;
67
67
  export type ToolUpdateEvent = ChatStreamEnvelope<'tool_update', {
68
68
  messageId: string;
69
69
  toolCallId: string;
70
70
  toolName: string;
71
71
  details?: unknown;
72
72
  textDelta?: string;
73
- }>;
73
+ } & AgentStreamToolExecutionMetadata>;
74
74
  export type ToolEndEvent = ChatStreamEnvelope<'tool_end', {
75
75
  messageId: string;
76
76
  toolCallId: string;
@@ -84,7 +84,7 @@ export type ToolEndEvent = ChatStreamEnvelope<'tool_end', {
84
84
  };
85
85
  deliveries?: import('@xopcai/gateway-contract').ProductDeliveryEnvelope[];
86
86
  errorMessage?: string;
87
- }>;
87
+ } & AgentStreamToolExecutionMetadata>;
88
88
  export type CommandStartedEvent = ChatStreamEnvelope<'command_started', {
89
89
  messageId: string;
90
90
  toolCallId: string;
@@ -2,8 +2,7 @@ import type { Config } from '../../../config/schema.js';
2
2
  import type { GatewayService } from '../../service.js';
3
3
  /** MCP block for GET/PATCH `/api/config` (authenticated console editing). */
4
4
  export declare function buildSafeMcpConfigForWeb(config: Config): {
5
- servers: import("../../../config/mcp-config-normalize.js").ConfigMcpServers;
6
- sessionIdleTtlMs?: number;
5
+ servers: Record<string, Record<string, unknown>>;
7
6
  };
8
7
  export declare function buildSafeBrowserConfigForWeb(browser: unknown): {
9
8
  security?: unknown;
@@ -109,6 +108,13 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
109
108
  allowed?: string[];
110
109
  };
111
110
  runtime: {
111
+ codemode?: {
112
+ enabled: boolean;
113
+ timeoutMs: number;
114
+ maxConcurrentCalls: number;
115
+ maxCalls: number;
116
+ maxOutputTokens: number;
117
+ };
112
118
  thinkingLevel?: "low" | "high" | "off" | "medium" | "minimal" | "xhigh" | "max";
113
119
  commandIsolation?: {
114
120
  mode: "host";
@@ -345,7 +351,6 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
345
351
  id?: string;
346
352
  }[];
347
353
  mcp: {
348
- servers: import("../../../config/mcp-config-normalize.js").ConfigMcpServers;
349
- sessionIdleTtlMs?: number;
354
+ servers: Record<string, Record<string, unknown>>;
350
355
  };
351
356
  }>;
@@ -7,9 +7,9 @@ import { ContextPlanningConfigSchema, KnowledgeMemoryConfigSchema, UserModelConf
7
7
  import { init_models_json, loadModelsJson } from "../../../config/models-json.js";
8
8
  import { getProviderRegistry, init_plugin_registry } from "../../../providers/plugin-registry.js";
9
9
  import { getAllProviders, init_providers, isProviderConfigured } from "../../../providers/index.js";
10
- import { normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
11
10
  import { resolveShareConfig } from "../../../share/share-config.js";
12
11
  import { maskTunnelSecretForWeb } from "../../../tunnel/env.js";
12
+ import { normalizeConfiguredMcpServers } from "../../../config/mcp-config-normalize.js";
13
13
  import { buildChannelCatalogForConfig, buildChannelCatalogFromSnapshot, getChannelSetupStatus } from "../../../channels/catalog/channel-catalog-service.js";
14
14
  import { resolveSessionConfigForWeb, resolveUpdateConfigForWeb } from "../../../config/web-patch.js";
15
15
  import { GENERIC_MASKED_SECRET, maskSecretLength } from "./mask-secret-length.js";
@@ -43,10 +43,7 @@ async function maskLlmProviderApiKeyForWeb(provider) {
43
43
  function buildSafeMcpConfigForWeb(config) {
44
44
  const mcp = config.mcp;
45
45
  if (!mcp) return { servers: {} };
46
- return {
47
- ...mcp.sessionIdleTtlMs !== void 0 ? { sessionIdleTtlMs: mcp.sessionIdleTtlMs } : {},
48
- servers: normalizeConfiguredMcpServers(mcp.servers)
49
- };
46
+ return { servers: normalizeConfiguredMcpServers(mcp.servers) };
50
47
  }
51
48
  function buildSafeBrowserConfigForWeb(browser) {
52
49
  if (!browser || typeof browser !== "object") return { enabled: false };
@@ -295,13 +295,20 @@ async function runOAuthFlow(session, oauthProvider, service) {
295
295
  session.deviceCode = prompt.deviceCode;
296
296
  session.verificationUri = prompt.verificationUri;
297
297
  session.message = prompt.message;
298
- manualCodePromise = new Promise((resolve, reject) => {
298
+ manualCodePromise ??= new Promise((resolve, reject) => {
299
299
  manualCodeResolve = resolve;
300
300
  manualCodeReject = reject;
301
301
  });
302
302
  session.manualCodeResolve = manualCodeResolve;
303
303
  session.manualCodeReject = manualCodeReject;
304
- return "";
304
+ const cancel = () => manualCodeReject?.(/* @__PURE__ */ new Error("OAuth prompt cancelled"));
305
+ prompt.signal?.addEventListener("abort", cancel, { once: true });
306
+ try {
307
+ if (prompt.signal?.aborted) cancel();
308
+ return await manualCodePromise;
309
+ } finally {
310
+ prompt.signal?.removeEventListener("abort", cancel);
311
+ }
305
312
  },
306
313
  onProgress: (message) => {
307
314
  log.debug({
@@ -1,6 +1,6 @@
1
1
  import { AgentPluginStore } from "../../../extensions/agent-plugins/store.js";
2
2
  import { savePluginAuthBinding } from "../../../extensions/agent-plugins/auth.js";
3
- import { disposeAllSessionMcpRuntimes } from "../../../agent/mcp/bundle-mcp-runtime.js";
3
+ import { evictAllEmbeddedSessionRunners } from "../../../agent/embedded/session-runner.js";
4
4
  import { withAgentPluginSource } from "../../../extensions/agent-plugins/sources.js";
5
5
  import { agentPluginInventoryRow } from "../../../extensions/agent-plugins/inventory.js";
6
6
  import { removePluginCredentials } from "../../../extensions/agent-plugins/credentials.js";
@@ -13,7 +13,7 @@ const sourceBody = z.strictObject({
13
13
  function registerAgentPluginRoutes(app, deps) {
14
14
  const store = new AgentPluginStore();
15
15
  const refresh = async () => {
16
- await disposeAllSessionMcpRuntimes();
16
+ evictAllEmbeddedSessionRunners();
17
17
  deps.service.marketplace.reloadSkills();
18
18
  };
19
19
  app.post("/api/extensions/inspect", deps.strictRateLimitMiddleware, async (c) => {
@@ -123,12 +123,7 @@ function registerAgentPluginRoutes(app, deps) {
123
123
  app.put("/api/extensions/agent-plugins/:id/mcp/:server/auth", deps.strictRateLimitMiddleware, async (c) => {
124
124
  try {
125
125
  const body = z.strictObject({
126
- mode: z.enum([
127
- "auto",
128
- "oauth",
129
- "api-key",
130
- "none"
131
- ]),
126
+ mode: z.enum(["auto", "api-key"]),
132
127
  secrets: z.array(z.strictObject({
133
128
  target: z.enum(["headers", "env"]),
134
129
  key: z.string(),
@@ -152,7 +147,7 @@ function registerAgentPluginRoutes(app, deps) {
152
147
  removeData: z.boolean().optional(),
153
148
  removeCredentials: z.boolean().optional()
154
149
  }).parse(await c.req.json());
155
- await disposeAllSessionMcpRuntimes();
150
+ evictAllEmbeddedSessionRunners();
156
151
  if (body.removeCredentials) await removePluginCredentials(store, c.req.param("id"));
157
152
  store.remove(c.req.param("id"), body.removeData);
158
153
  deps.service.marketplace.reloadSkills();
@@ -1,8 +1,8 @@
1
- import { normalizeAgentId } from "../../../agent-catalog/id.js";
2
1
  import { AgentEntrySchema, AgentModelsOverrideSchema, AgentProfileSchema, RuntimePolicySchema, SkillOverrideSchema, ToolPoliciesSchema, WorkflowPolicySchema } from "../../../agent-config/schema.js";
3
2
  import { init_agent_config } from "../../../agent-config/index.js";
3
+ import { normalizeAgentId } from "../../../agent-catalog/id.js";
4
4
  import { init_agent_scope } from "../../../agent/agent-scope.js";
5
- import { createGatewayAgent, deleteAgentAvatarFile, deleteGatewayAgent, getGatewayAgentEffectiveConfig, listAgentProfileFiles, listGatewayAgents, readAgentAvatarFile, readAgentProfileFile, updateGatewayAgent, writeAgentAvatarFromBase64, writeAgentProfileFile } from "../../agents-admin.js";
5
+ import { createGatewayAgent, deleteAgentAvatarFile, deleteGatewayAgent, getGatewayAgentEffectiveConfig, listAgentProfileFiles, listGatewayAgents, readAgentAvatarFile, readAgentProfileFile, resolveAgentAvatarImage, updateGatewayAgent, writeAgentAvatarFromBase64, writeAgentProfileFile } from "../../agents-admin.js";
6
6
  import { getVoiceModelsConfig } from "../../../config/voice.js";
7
7
  //#region src/gateway/hono/routes/agents.ts
8
8
  init_agent_config();
@@ -208,7 +208,8 @@ function registerAgentsRoutes(authenticated, deps) {
208
208
  });
209
209
  });
210
210
  authenticated.get("/api/agents/:id/avatar", async (c) => {
211
- const res = await readAgentAvatarFile(normalizeAgentId(c.req.param("id") ?? ""));
211
+ const id = normalizeAgentId(c.req.param("id") ?? "");
212
+ const res = c.req.query("resolve") === "1" ? await resolveAgentAvatarImage(id) : await readAgentAvatarFile(id);
212
213
  if (res.ok === false) return c.json({
213
214
  ok: false,
214
215
  error: { message: res.error }
@@ -217,7 +218,7 @@ function registerAgentsRoutes(authenticated, deps) {
217
218
  status: 200,
218
219
  headers: {
219
220
  "Content-Type": res.data.contentType,
220
- "Cache-Control": "private, max-age=3600"
221
+ "Cache-Control": c.req.query("resolve") === "1" ? "private, no-store" : "private, max-age=3600"
221
222
  }
222
223
  });
223
224
  });
@@ -1,10 +1,10 @@
1
1
  import { BindingsSchema, init_binding_schema } from "../../../../routing/binding-schema.js";
2
+ import { AgentCatalogService } from "../../../../agent-catalog/service.js";
2
3
  import { CredentialResolver, init_credentials } from "../../../../auth/credentials.js";
3
4
  import { ComputerConfigSchema, init_config } from "../../../../computer/config.js";
4
5
  import { ContextPlanningConfigSchema, HomeIntelligenceConfigSchema, KnowledgeMemoryConfigSchema, UserContextConfigSchema, UserModelConfigSchema, init_config as init_config$1 } from "../../../../user-context/config.js";
5
6
  import { BrowserConfigSchema, McpConfigSchema, VoiceConfigSchema, init_schema } from "../../../../config/schema.js";
6
7
  import { canonicalizeConfiguredMcpServer } from "../../../../config/mcp-config-normalize.js";
7
- import { AgentCatalogService } from "../../../../agent-catalog/service.js";
8
8
  import { mergeGatewaySkillsMarketplacePatch, mergeSessionConfigPatch, mergeUpdateConfigPatch } from "../../../../config/web-patch.js";
9
9
  import { assertGatewayAuthConfigured, resolveGatewayAuth } from "../../../auth.js";
10
10
  import { isMaskedSecretPatchValue } from "../../lib/mask-secret-length.js";
@@ -13,14 +13,11 @@ const actionSchema = z.object({
13
13
  "cancel",
14
14
  "select_account",
15
15
  "confirm_scope",
16
- "replace_source",
17
- "submit_callback"
16
+ "replace_source"
18
17
  ]),
19
18
  candidateRef: z.string().optional(),
20
19
  needKey: z.string().optional(),
21
- accountId: z.string().optional(),
22
- callbackUrl: z.string().max(16384).optional(),
23
- instanceId: z.string().optional()
20
+ accountId: z.string().optional()
24
21
  }).strict();
25
22
  function registerConnectionWaitRoutes(app, { service, strictRateLimitMiddleware }) {
26
23
  app.get("/api/sessions/:conversationId/connection-wait", (c) => {
@@ -22,14 +22,13 @@ import { getConnectorInstance, getInstalledConnectorDefinition, listConnectorIns
22
22
  import { installConnector, installConnectorDefinition, uninstallConnector, updateConnectorConfig } from "../../../connectors/install.js";
23
23
  import { ConfigPersistenceError, persistConfigMutation } from "../../../config/config-mutation.js";
24
24
  import { resumeApprovedConnectorAction } from "../../../connectors/approval-resume.js";
25
- import { getMcpOAuthManager } from "../../../agent/mcp/oauth/mcp-oauth-manager.js";
26
25
  import { startConnectorAuthorization } from "../../../connectors/auth-provider-registry.js";
27
26
  import { composioLogoResponse } from "../../../connectors/composio-logo.js";
28
27
  import { inspectManagedComposioStatus } from "../../../connectors/composio-managed-client.js";
29
28
  import { appendComposioTriggerEvent, listComposioTriggerEvents } from "../../../connectors/composio-triggers.js";
30
29
  import { ingestLocalFolderSource } from "../../../connectors/connected-source-ingestion.js";
31
30
  import { listUnderstandingSourceGrants, revokeUnderstandingSourceGrant } from "../../../user-context/sources/repository.js";
32
- import { previewConnectorDefinition, testConnectorInstance } from "../../../connectors/health.js";
31
+ import { testConnectorInstance } from "../../../connectors/health.js";
33
32
  import { setConnectorEnabled } from "../../../connectors/lifecycle.js";
34
33
  import { projectComposioConnectionStatus } from "../../../connectors/runtime-status.js";
35
34
  import { getGatewayPrincipal } from "../../security/gateway-principal.js";
@@ -82,35 +81,7 @@ function registerConnectorRoutes(authenticated, deps) {
82
81
  connectionStatus: connected ? "connected" : "disconnected"
83
82
  };
84
83
  }
85
- if (!instance.enabled || instance.materialized.type !== "mcp") return instance;
86
- const server = config.mcp?.servers?.[instance.materialized.serverId];
87
- if (!server) return instance;
88
- const oauth = await getMcpOAuthManager().status(instance.materialized.serverId, server);
89
- if (!oauth.configured) return instance;
90
- if (oauth.status === "connected") return {
91
- ...instance,
92
- authStatus: "connected",
93
- connectionStatus: "connected"
94
- };
95
- if (oauth.status === "authorizing") return {
96
- ...instance,
97
- status: "connecting",
98
- authStatus: "unknown",
99
- connectionStatus: "connecting"
100
- };
101
- if (oauth.status === "error") return {
102
- ...instance,
103
- status: "failed",
104
- authStatus: "unauthorized",
105
- connectionStatus: "error",
106
- lastError: oauth.session?.error ?? instance.lastError
107
- };
108
- return {
109
- ...instance,
110
- status: "unauthorized",
111
- authStatus: "missing",
112
- connectionStatus: "disconnected"
113
- };
84
+ return instance;
114
85
  }));
115
86
  const connections = listConnectorConnections({ principalId: "local-owner" });
116
87
  return c.json({
@@ -586,27 +557,6 @@ function registerConnectorRoutes(authenticated, deps) {
586
557
  }
587
558
  });
588
559
  });
589
- authenticated.post("/api/connectors/preview", strictRateLimitMiddleware, async (c) => {
590
- const body = await c.req.json().catch(() => ({}));
591
- const definition = body && typeof body === "object" && !Array.isArray(body) && body.definition && typeof body.definition === "object" && !Array.isArray(body.definition) ? body.definition : void 0;
592
- if (!definition) return c.json({
593
- ok: false,
594
- error: "Missing connector definition."
595
- }, 400);
596
- const input = body && typeof body === "object" && !Array.isArray(body) ? body : {};
597
- try {
598
- const preview = await previewConnectorDefinition(service.currentConfig, definition, input);
599
- return c.json({
600
- ok: true,
601
- payload: { preview }
602
- });
603
- } catch (error) {
604
- return c.json({
605
- ok: false,
606
- error: errorMessage(error)
607
- }, 400);
608
- }
609
- });
610
560
  authenticated.get("/api/connectors/composio/:toolkit/health", async (c) => {
611
561
  const health = await inspectComposioConnectorHealth(c.req.param("toolkit"));
612
562
  return c.json({
@@ -880,12 +830,12 @@ function registerConnectorRoutes(authenticated, deps) {
880
830
  ok: false,
881
831
  error: `Connector instance not found: ${instanceId}`
882
832
  }, 404);
883
- if (instance.materialized.type !== "mcp" && instance.materialized.type !== "cli") return c.json({
833
+ if (instance.materialized.type !== "cli") return c.json({
884
834
  ok: false,
885
- error: `Connector type "${instance.materialized.type}" does not support MCP health checks.`
835
+ error: `Connector type "${instance.materialized.type}" does not support CLI health checks. Use xopc mcp list for MCP diagnostics.`
886
836
  }, 400);
887
837
  try {
888
- const result = await testConnectorInstance(config, instance.materialized.type === "mcp" ? instance.materialized.serverId : instance.instanceId);
838
+ const result = await testConnectorInstance(config, instance.instanceId);
889
839
  await persistConfigMutation({
890
840
  config,
891
841
  mutate: () => recordConnectorHealthUsage(config, instance.instanceId, result),
@@ -987,11 +937,6 @@ function registerConnectorRoutes(authenticated, deps) {
987
937
  const instanceId = c.req.param("id");
988
938
  const config = service.currentConfig;
989
939
  try {
990
- const definition = getInstalledConnectorDefinition(config, instanceId);
991
- const installed = getConnectorInstance(config, instanceId);
992
- const serverId = installed?.materialized.type === "mcp" ? installed.materialized.serverId : void 0;
993
- const rawServer = serverId ? config.mcp?.servers?.[serverId] : void 0;
994
- if (definition?.auth.mode === "oauth" && definition.runtime.type === "mcp" && rawServer) await getMcpOAuthManager().disconnect(serverId, rawServer);
995
940
  const instance = await persistConfigMutation({
996
941
  config,
997
942
  mutate: () => uninstallConnector(config, instanceId),
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerDeviceAuthorizationRoutes(app: Hono, deps: AuthenticatedRouteDeps): void;