@xopcai/xopc 0.0.433 → 0.0.435

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 (362) hide show
  1. package/README.md +5 -5
  2. package/README.zh-CN.md +5 -5
  3. package/dist/browser-ext/dist/sidepanel.js +11 -0
  4. package/dist/browser-ext/manifest.json +1 -1
  5. package/dist/extensions/telegram/xopc.extension.json +1 -1
  6. package/dist/gateway/static/root/assets/{activity-store-BpYGrRXw.js → activity-store-Cwn_CNwl.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DTgOSv6G.js → agent-avatar-dicebear-Cd23LnJJ.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agent-avatar-display-BUH7ljEo.js → agent-avatar-display-ByzM7u9S.js} +2 -2
  9. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-B_FAikHA.js → agent-defaults-settings-panel-B0i37diS.js} +1 -1
  10. package/dist/gateway/static/root/assets/{agent-plugin-dialog-DPabZaSE.js → agent-plugin-dialog-XN-tZ-Ox.js} +1 -1
  11. package/dist/gateway/static/root/assets/{agents-BAPYP1Ka.js → agents-ZDA1OaLv.js} +3 -3
  12. package/dist/gateway/static/root/assets/{agents-admin-api-CXCAHNPj.js → agents-admin-api-B5lKH_ps.js} +1 -1
  13. package/dist/gateway/static/root/assets/{api-oIK4hYkJ.js → api-B9fZL-V8.js} +1 -1
  14. package/dist/gateway/static/root/assets/{api-DMbimMEi.js → api-Djju8qIR.js} +1 -1
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-BZ3Fy8ZR.js → app-management-settings-panel-IlyzDPJu.js} +1 -1
  16. package/dist/gateway/static/root/assets/{appearance-settings-DsRTj1by.js → appearance-settings-BxdFGob3.js} +1 -1
  17. package/dist/gateway/static/root/assets/apps-page-CxEKiOTA.js +1 -0
  18. package/dist/gateway/static/root/assets/{archive-plugin-Bg1VTieK.js → archive-plugin-4gEvotPr.js} +1 -1
  19. package/dist/gateway/static/root/assets/{automation-api-CLPsgcQN.js → automation-api-4fVKv9PJ.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automation-result-state-CKVnR4KG.js → automation-result-state-m7PeK2kl.js} +1 -1
  21. package/dist/gateway/static/root/assets/automation-run-list-CJOdy_R2.js +1 -0
  22. package/dist/gateway/static/root/assets/{automation-task-card-D27Mw66U.js → automation-task-card-DZWhCWJa.js} +3 -3
  23. package/dist/gateway/static/root/assets/{automations-page-DGNTJ8lN.js → automations-page-BjbM15eY.js} +1 -1
  24. package/dist/gateway/static/root/assets/automations-workspace-CqurzLYX.js +9 -0
  25. package/dist/gateway/static/root/assets/{binary-plugins-CuwSdCG5.js → binary-plugins-69WyJLNW.js} +1 -1
  26. package/dist/gateway/static/root/assets/{block-editor-Dtl2BG3t.js → block-editor-DUONDIZR.js} +1 -1
  27. package/dist/gateway/static/root/assets/{browser-automation-inputs-uGK086ag.js → browser-automation-inputs-DL4YPCuN.js} +1 -1
  28. package/dist/gateway/static/root/assets/{browser-automations-page-Da_edNNS.js → browser-automations-page-1Aq6XmRs.js} +1 -1
  29. package/dist/gateway/static/root/assets/{browser-control-api-k3OOX3bS.js → browser-control-api-yjru8E7R.js} +1 -1
  30. package/dist/gateway/static/root/assets/{browser-settings-page-C1bSw-Jq.js → browser-settings-page-CvwpT8Um.js} +1 -1
  31. package/dist/gateway/static/root/assets/{capabilities-DlHPLld_.js → capabilities-C7lnwKKm.js} +1 -1
  32. package/dist/gateway/static/root/assets/{capabilities-CoeuLRt6.js → capabilities-DaeQXJT4.js} +1 -1
  33. package/dist/gateway/static/root/assets/capabilities-page-B5avAOUM.js +2 -0
  34. package/dist/gateway/static/root/assets/{capabilities-settings-panel-CtY-bGIi.js → capabilities-settings-panel-_9yCS78i.js} +1 -1
  35. package/dist/gateway/static/root/assets/capability-links-DeO34GIF.js +1 -0
  36. package/dist/gateway/static/root/assets/{channels-Cn1MWBL_.js → channels-CoQb4HOF.js} +1 -1
  37. package/dist/gateway/static/root/assets/{chat-agents-api-BB0biwc7.js → chat-agents-api-BUi_7GRo.js} +1 -1
  38. package/dist/gateway/static/root/assets/{chat-chart-block-QSvjx4w6.js → chat-chart-block-CcVcKsDZ.js} +1 -1
  39. package/dist/gateway/static/root/assets/chat-page--wcFhTjW.js +72 -0
  40. package/dist/gateway/static/root/assets/{chat-terminal-dock-Cd51G9eG.js → chat-terminal-dock-BMXJpPuH.js} +1 -1
  41. package/dist/gateway/static/root/assets/{command-palette-api-CEG10uE-.js → command-palette-api-luUjQPsh.js} +1 -1
  42. package/dist/gateway/static/root/assets/{composer-payload-handoff-Bogdq9Hy.js → composer-payload-handoff-B5XNxNCb.js} +1 -1
  43. package/dist/gateway/static/root/assets/computer-settings-page-CWtdyEJH.js +1 -0
  44. package/dist/gateway/static/root/assets/connected-providers-grid-2idMtk65.js +1 -0
  45. package/dist/gateway/static/root/assets/connection-usage-Cm_McddI.js +1 -0
  46. package/dist/gateway/static/root/assets/connection-usage-guide-Ddh0bfkj.js +1 -0
  47. package/dist/gateway/static/root/assets/{connector-service-page-k2rjyjrp.js → connector-service-page-C3msXaBk.js} +1 -1
  48. package/dist/gateway/static/root/assets/{connectors-api-DtvB9Cjm.js → connectors-api-NcWECWKg.js} +1 -1
  49. package/dist/gateway/static/root/assets/connectors-page-Crb6DILX.js +1 -0
  50. package/dist/gateway/static/root/assets/{date-picker-CAankdQw.js → date-picker-Cfjq1hD_.js} +1 -1
  51. package/dist/gateway/static/root/assets/{desktop-pet-DjM73fir.js → desktop-pet-ChFn9v-3.js} +1 -1
  52. package/dist/gateway/static/root/assets/{desktop-pet-settings-Rmh-GxHl.js → desktop-pet-settings-DvnVIv25.js} +1 -1
  53. package/dist/gateway/static/root/assets/{dev-view-store-BgW2Riyk.js → dev-view-store-DQJ61P5L.js} +1 -1
  54. package/dist/gateway/static/root/assets/{device-pairing-wizard-UdzSpNa5.js → device-pairing-wizard-KxaIL-OX.js} +1 -1
  55. package/dist/gateway/static/root/assets/{directory-picker-path-field-Rkw3f7lG.js → directory-picker-path-field-Drv864uE.js} +1 -1
  56. package/dist/gateway/static/root/assets/{discussion-annotation-sync-Dudoj_Fz.js → discussion-annotation-sync-DfBRkWtw.js} +1 -1
  57. package/dist/gateway/static/root/assets/{extension-debug-page-DxIGAO23.js → extension-debug-page-DAlBIt_R.js} +1 -1
  58. package/dist/gateway/static/root/assets/{extension-iframe-host-63KpX6IP.js → extension-iframe-host-Bds-5kY_.js} +1 -1
  59. package/dist/gateway/static/root/assets/{extension-marketplace-api-yXNUkQDA.js → extension-marketplace-api-CZg8nBwW.js} +1 -1
  60. package/dist/gateway/static/root/assets/{extension-page-C811A_Ww.js → extension-page-ZTw-oucT.js} +1 -1
  61. package/dist/gateway/static/root/assets/{extension-provider-C4jLFIgh.js → extension-provider-NKWfjpdP.js} +1 -1
  62. package/dist/gateway/static/root/assets/{extension-settings-page-WJSw5MT0.js → extension-settings-page-CT7PPt_q.js} +1 -1
  63. package/dist/gateway/static/root/assets/{file-preview-surface-zE9AcaHM.js → file-preview-surface-BcLeaSNe.js} +1 -1
  64. package/dist/gateway/static/root/assets/{gateway-config-swr-D6cc6W6E.js → gateway-config-swr-Cq-ByXL4.js} +1 -1
  65. package/dist/gateway/static/root/assets/{gateway-realtime-BSRNLciy.js → gateway-realtime-DwMd2PCt.js} +1 -1
  66. package/dist/gateway/static/root/assets/gateway-realtime-store-CHrf6-nR.js +1 -0
  67. package/dist/gateway/static/root/assets/{gateway-restart-Unun5hRL.js → gateway-restart-DdiVzbkL.js} +1 -1
  68. package/dist/gateway/static/root/assets/{gateway-settings-DP-DV-e5.js → gateway-settings-1QUdNwrZ.js} +1 -1
  69. package/dist/gateway/static/root/assets/{gateway-startup-retry-C8g666Ja.js → gateway-startup-retry-PMJi5mX4.js} +1 -1
  70. package/dist/gateway/static/root/assets/{global-defaults-api-BObi-1ww.js → global-defaults-api-DgzZh3wX.js} +1 -1
  71. package/dist/gateway/static/root/assets/{home-page-CIcs7Mzy.js → home-page-Chn7YTiD.js} +2 -2
  72. package/dist/gateway/static/root/assets/{image-generation-api-C2SqYNyD.js → image-generation-api-CjVpsckq.js} +1 -1
  73. package/dist/gateway/static/root/assets/{imports-page-C8ezUkOJ.js → imports-page-CJCvZFaQ.js} +1 -1
  74. package/dist/gateway/static/root/assets/index-8xLWo0Tt.js +11 -0
  75. package/dist/gateway/static/root/assets/index-iukJWzxG.css +1 -0
  76. package/dist/gateway/static/root/assets/install-connector-dialog-Bo06Ry3H.js +1 -0
  77. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BRaY4-wA.js → keyboard-shortcuts-settings-BylFJeGu.js} +1 -1
  78. package/dist/gateway/static/root/assets/{local-app-workbench-page-BZtVcjF3.js → local-app-workbench-page-B3MSSFsr.js} +1 -1
  79. package/dist/gateway/static/root/assets/{local-apps-page-MqP4EnJm.js → local-apps-page-BeV86rMJ.js} +1 -1
  80. package/dist/gateway/static/root/assets/{local-session-drafts-DTq9776a.js → local-session-drafts-jgw8UGsO.js} +2 -2
  81. package/dist/gateway/static/root/assets/{locale-store-B6OrWgY1.js → locale-store-CAZaC05J.js} +1 -1
  82. package/dist/gateway/static/root/assets/{logs-page-hkHBjblX.js → logs-page-BMmSsUP5.js} +1 -1
  83. package/dist/gateway/static/root/assets/{management-settings-DoX4eTM3.js → management-settings-Bu7T8ewk.js} +1 -1
  84. package/dist/gateway/static/root/assets/{markdown-view-DrhYZSmg.js → markdown-view-BatP4qeK.js} +1 -1
  85. package/dist/gateway/static/root/assets/{mcp-conversation-setup-page-BEp5E6TD.js → mcp-conversation-setup-page-rROtr0UN.js} +1 -1
  86. package/dist/gateway/static/root/assets/{media-plugins-D987i9Gc.js → media-plugins-88OV72YE.js} +1 -1
  87. package/dist/gateway/static/root/assets/messages-C7fckbyG.js +3 -0
  88. package/dist/gateway/static/root/assets/{model-selector-DXm4NS1_.js → model-selector-raBRBkN_.js} +1 -1
  89. package/dist/gateway/static/root/assets/{models-hub-cache-BLcha5rx.js → models-hub-cache-CzC9y3D0.js} +1 -1
  90. package/dist/gateway/static/root/assets/{note-detail-panel-Cl851ivY.js → note-detail-panel-BvA8Vkbm.js} +3 -3
  91. package/dist/gateway/static/root/assets/note-image-lightbox-D6kUDDd5.js +1 -0
  92. package/dist/gateway/static/root/assets/{notes-api-Ddsf7FVg.js → notes-api-zXpV6UXu.js} +1 -1
  93. package/dist/gateway/static/root/assets/{notes-page-DSwA1MU1.js → notes-page-CjYH9Kle.js} +1 -1
  94. package/dist/gateway/static/root/assets/{oauth-api-CMmu4DzH.js → oauth-api-DmxSaxM1.js} +1 -1
  95. package/dist/gateway/static/root/assets/{oauth-provider-connect-BkhnftBq.js → oauth-provider-connect-D4Gfs-Ba.js} +1 -1
  96. package/dist/gateway/static/root/assets/{page-context-capture-button-urhQBRaN.js → page-context-capture-button-Mig3d0UX.js} +1 -1
  97. package/dist/gateway/static/root/assets/{page-context-draft-BuNUerth.js → page-context-draft-C4IIZaKd.js} +1 -1
  98. package/dist/gateway/static/root/assets/page-header-store-D7G5utVi.js +1 -0
  99. package/dist/gateway/static/root/assets/{personal-avatar-B49ueeZO.js → personal-avatar-DLa-CpaK.js} +1 -1
  100. package/dist/gateway/static/root/assets/{personal-page-f05ceuFn.js → personal-page-BhuT79Wd.js} +1 -1
  101. package/dist/gateway/static/root/assets/{personal-settings-panel-DLQxzPYr.js → personal-settings-panel-XSUkgcr2.js} +1 -1
  102. package/dist/gateway/static/root/assets/phone-dependencies-card-DYwnuVh3.js +1 -0
  103. package/dist/gateway/static/root/assets/phone-model-connection-2F32QTHA.js +1 -0
  104. package/dist/gateway/static/root/assets/phone-model-picker-DCVzIr0s.js +1 -0
  105. package/dist/gateway/static/root/assets/phone-settings-page-DJttE4id.js +1 -0
  106. package/dist/gateway/static/root/assets/{phone-workspace-store-DbqktZbO.js → phone-workspace-store-Dxp-KhFP.js} +1 -1
  107. package/dist/gateway/static/root/assets/plugin-details-dialog-tyjAjFjA.js +1 -0
  108. package/dist/gateway/static/root/assets/{preference-select-fields-BZWqG7pu.js → preference-select-fields-BVP3MhGK.js} +1 -1
  109. package/dist/gateway/static/root/assets/{product-automation-feedback-DDQUsag7.js → product-automation-feedback-DbJvv92z.js} +1 -1
  110. package/dist/gateway/static/root/assets/{product-open-page-BkRP_HmA.js → product-open-page-RImqlhCD.js} +1 -1
  111. package/dist/gateway/static/root/assets/{product-preview-content-o2Y3VNE7.js → product-preview-content-DxSqrKsg.js} +1 -1
  112. package/dist/gateway/static/root/assets/{product-preview-modal-7Ohx-7OR.js → product-preview-modal-Cw8Q8Uom.js} +2 -2
  113. package/dist/gateway/static/root/assets/{project-detail-page-B2RsSHya.js → project-detail-page-CuugOYfe.js} +1 -1
  114. package/dist/gateway/static/root/assets/{project-understanding-BIMouiYX.js → project-understanding-BMKcoUW5.js} +1 -1
  115. package/dist/gateway/static/root/assets/{projects-page-C9R5u3tF.js → projects-page-CFsABLvs.js} +1 -1
  116. package/dist/gateway/static/root/assets/{providers-api-BOCkRZ7X.js → providers-api-CAeXbJNF.js} +1 -1
  117. package/dist/gateway/static/root/assets/{recording-upload-C6muEHEO.js → recording-upload-CfpllTe5.js} +1 -1
  118. package/dist/gateway/static/root/assets/{registry-api-Bl2guMRg.js → registry-api-fLOqFyrz.js} +1 -1
  119. package/dist/gateway/static/root/assets/{remote-access-hub-BceSMbCs.js → remote-access-hub-BvKOxy0L.js} +1 -1
  120. package/dist/gateway/static/root/assets/{resource-unavailable-CUNbPkdj.js → resource-unavailable-D15jzjV_.js} +1 -1
  121. package/dist/gateway/static/root/assets/route-preload-BQapekpy.js +2 -0
  122. package/dist/gateway/static/root/assets/{runtime-tools-api-LopLjgvu.js → runtime-tools-api-D0Nrvuqv.js} +1 -1
  123. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-9HIPerDP.js → runtime-tools-settings-panel-CA27XgL2.js} +1 -1
  124. package/dist/gateway/static/root/assets/{service-recommendation-list-CoMI6MB1.js → service-recommendation-list-B0RoYLVT.js} +1 -1
  125. package/dist/gateway/static/root/assets/session-api-CHRP5Lwf.js +1 -0
  126. package/dist/gateway/static/root/assets/session-channel-icon-D1ktvt1P.js +1 -0
  127. package/dist/gateway/static/root/assets/session-identity-label-BP7OIYth.js +1 -0
  128. package/dist/gateway/static/root/assets/session-manager-DRRWwKE4.js +25 -0
  129. package/dist/gateway/static/root/assets/{sessions-page-BT0GdXdS.js → sessions-page-uJHS3-6F.js} +1 -1
  130. package/dist/gateway/static/root/assets/settings-advanced-gate-CZ4J3Kuy.js +1 -0
  131. package/dist/gateway/static/root/assets/{settings-advanced-section-CEorDLUp.js → settings-advanced-section-D-llwfSj.js} +1 -1
  132. package/dist/gateway/static/root/assets/{settings-mode-store-C2LZqBES.js → settings-mode-store-BspMKc9N.js} +1 -1
  133. package/dist/gateway/static/root/assets/{settings-page-C_Np_6qZ.js → settings-page-CedwaHM0.js} +1 -1
  134. package/dist/gateway/static/root/assets/{settings-page-header-BAN34UQi.js → settings-page-header-LuOJvqNa.js} +1 -1
  135. package/dist/gateway/static/root/assets/{settings-page-layout-B5TVFBV2.js → settings-page-layout-CduQ8w4a.js} +1 -1
  136. package/dist/gateway/static/root/assets/{setup-interaction-page-BYvTJW3_.js → setup-interaction-page-ujpPGl84.js} +1 -1
  137. package/dist/gateway/static/root/assets/{setup-status-panel-UY2dH-sK.js → setup-status-panel-BN2aCJUN.js} +1 -1
  138. package/dist/gateway/static/root/assets/{share-link-dialog-BMcXyzr2.js → share-link-dialog-CTATUaa4.js} +1 -1
  139. package/dist/gateway/static/root/assets/{share-preview-page-UQ6eUM2_.js → share-preview-page-Dq0J3VgS.js} +1 -1
  140. package/dist/gateway/static/root/assets/{shares-api-DOeDN6Tm.js → shares-api-zegE8pSE.js} +1 -1
  141. package/dist/gateway/static/root/assets/{shares-settings-W8XhuAoL.js → shares-settings-DXpvsRXq.js} +1 -1
  142. package/dist/gateway/static/root/assets/{skill-api-Do_c0d9n.js → skill-api-DCL1EN7f.js} +1 -1
  143. package/dist/gateway/static/root/assets/{skill-list-api-DpHaXI2l.js → skill-list-api-Bv0mmHbu.js} +1 -1
  144. package/dist/gateway/static/root/assets/{skill-reload-api-DDRd9IJ2.js → skill-reload-api-DPZbadiO.js} +1 -1
  145. package/dist/gateway/static/root/assets/{skills-page-CaeJVKhO.js → skills-page-DMC7Gaku.js} +1 -1
  146. package/dist/gateway/static/root/assets/{system-settings-panel-DYWlWPJL.js → system-settings-panel-BYFUhlqG.js} +1 -1
  147. package/dist/gateway/static/root/assets/{task-detail-page-De0qD7xw.js → task-detail-page-_Og3plZL.js} +3 -3
  148. package/dist/gateway/static/root/assets/{task-result-evidence-CICR5K1t.js → task-result-evidence-Bxm8-H0B.js} +1 -1
  149. package/dist/gateway/static/root/assets/{terminal-panel-store-BbWUcQe7.js → terminal-panel-store-Djf9l2qZ.js} +1 -1
  150. package/dist/gateway/static/root/assets/{theme-store-TkG5mo0p.js → theme-store-8GFVtotZ.js} +1 -1
  151. package/dist/gateway/static/root/assets/{tracing-settings-page-CYXEy4EG.js → tracing-settings-page-oWW3SBZ4.js} +1 -1
  152. package/dist/gateway/static/root/assets/{tunnel-api-DquDm6U2.js → tunnel-api-D-mEsSGF.js} +1 -1
  153. package/dist/gateway/static/root/assets/{understanding-activity-store-Ot3wZ3oQ.js → understanding-activity-store-CvDjsd0I.js} +1 -1
  154. package/dist/gateway/static/root/assets/{understanding-refresh-store-C5KYFMaC.js → understanding-refresh-store-DzOZJm7A.js} +1 -1
  155. package/dist/gateway/static/root/assets/{usage-page-1xFO4smo.js → usage-page-z-o6Uuev.js} +1 -1
  156. package/dist/gateway/static/root/assets/{use-autosave-HL8XRNR8.js → use-autosave-BVYS8UoK.js} +1 -1
  157. package/dist/gateway/static/root/assets/{use-composer-attachments-XRlQBdNF.js → use-composer-attachments-lecOV2q5.js} +1 -1
  158. package/dist/gateway/static/root/assets/{use-file-preview-expanded-CW956CXS.js → use-file-preview-expanded-nd_CuFsd.js} +2 -2
  159. package/dist/gateway/static/root/assets/{use-personal-profile-202s6tJt.js → use-personal-profile-CQi2ZCxV.js} +1 -1
  160. package/dist/gateway/static/root/assets/{use-workspace-tree-CjydkmH1.js → use-workspace-tree-BiaddkzX.js} +1 -1
  161. package/dist/gateway/static/root/assets/{user-model-page-OGPXx3pe.js → user-model-page-Bks1n0Nj.js} +1 -1
  162. package/dist/gateway/static/root/assets/{voice-api-key-field-CxFu4MEA.js → voice-api-key-field-BbW8NFeZ.js} +1 -1
  163. package/dist/gateway/static/root/assets/{voice-config-api-MHe5Pn-A.js → voice-config-api-jSMzZWWy.js} +1 -1
  164. package/dist/gateway/static/root/assets/{voice-input-shortcut-events-B9xc1oK8.js → voice-input-shortcut-events-_SgYmx7X.js} +1 -1
  165. package/dist/gateway/static/root/assets/{voice-transcribe-api-CVEcB6Pe.js → voice-transcribe-api-BJCfiRFU.js} +1 -1
  166. package/dist/gateway/static/root/assets/{work-discovery-overlay-C-JoAg2D.js → work-discovery-overlay-DSTSNyU7.js} +1 -1
  167. package/dist/gateway/static/root/assets/{work-discovery-page-B5Kx29Ru.js → work-discovery-page-Dd_QJJvb.js} +1 -1
  168. package/dist/gateway/static/root/assets/{working-directory-picker-modal-DGp9cNzH.js → working-directory-picker-modal-q39BUcJ6.js} +1 -1
  169. package/dist/gateway/static/root/assets/{workspace-api-HBXn8pL9.js → workspace-api-Di2OmCvz.js} +2 -2
  170. package/dist/gateway/static/root/assets/workspace-editor-agent-store-B2r9wlix.js +1 -0
  171. package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-3cpwSG2w.js → workspace-file-preview-dialog-BUGNT765.js} +1 -1
  172. package/dist/gateway/static/root/assets/{workspace-open-location-menu-D0VOFvuP.js → workspace-open-location-menu-bMSvmQW7.js} +1 -1
  173. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-BkdW2p3v.js → xopc-cloud-account-card-Bbe19Del.js} +1 -1
  174. package/dist/gateway/static/root/index.html +87 -85
  175. package/dist/package.js +1 -1
  176. package/dist/packages/computer-control-contract/src/index.js +33 -3
  177. package/dist/packages/gateway-contract/src/session-identity.js +2 -1
  178. package/dist/packages/gateway-contract/src/session-input-command.js +19 -2
  179. package/dist/packages/gateway-contract/src/specialists.js +1 -0
  180. package/dist/src/agent/embedded/execution-tool-policy.d.ts +1 -1
  181. package/dist/src/agent/embedded/execution-tool-policy.js +2 -2
  182. package/dist/src/agent/embedded/run-for-session.js +23 -8
  183. package/dist/src/agent/embedded/run-turn.js +30 -7
  184. package/dist/src/agent/embedded/runs.d.ts +2 -2
  185. package/dist/src/agent/embedded/runs.js +4 -4
  186. package/dist/src/agent/embedded/session-runner.js +26 -11
  187. package/dist/src/agent/embedded/tool-search-extension.d.ts +8 -2
  188. package/dist/src/agent/embedded/tool-search-extension.js +122 -30
  189. package/dist/src/agent/external-tools/cliProvider.d.ts +10 -9
  190. package/dist/src/agent/external-tools/cliProvider.js +24 -4
  191. package/dist/src/agent/external-tools/composio-provider.d.ts +3 -3
  192. package/dist/src/agent/external-tools/composio-provider.js +6 -3
  193. package/dist/src/agent/external-tools/discovery.d.ts +47 -0
  194. package/dist/src/agent/external-tools/discovery.js +56 -0
  195. package/dist/src/agent/external-tools/gateway-tools.js +26 -46
  196. package/dist/src/agent/external-tools/index.d.ts +1 -0
  197. package/dist/src/agent/external-tools/index.js +7 -0
  198. package/dist/src/agent/external-tools/personal-request-scope.d.ts +7 -0
  199. package/dist/src/agent/external-tools/personal-request-scope.js +83 -0
  200. package/dist/src/agent/external-tools/read-policy.js +5 -4
  201. package/dist/src/agent/external-tools/service.d.ts +2 -0
  202. package/dist/src/agent/external-tools/service.js +22 -3
  203. package/dist/src/agent/external-tools/tool-registry.d.ts +6 -0
  204. package/dist/src/agent/external-tools/types.d.ts +7 -2
  205. package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -1
  206. package/dist/src/agent/inbound/turn-dispatcher.js +3 -2
  207. package/dist/src/agent/orchestration/llm-turn-retry.d.ts +1 -1
  208. package/dist/src/agent/orchestration/llm-turn-retry.js +13 -8
  209. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +1 -0
  210. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +3 -1
  211. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  212. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  213. package/dist/src/agent/tool-manuals/computer.js +6 -4
  214. package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
  215. package/dist/src/agent/tool-manuals/phone.js +4 -4
  216. package/dist/src/agent/tool-manuals/xopc-configuration.d.ts +1 -1
  217. package/dist/src/agent/tool-manuals/xopc-configuration.js +4 -2
  218. package/dist/src/agent/tools/computer-use-tool.js +7 -6
  219. package/dist/src/agent/tools/delegation-policy.js +1 -0
  220. package/dist/src/agent/tools/factory.js +4 -2
  221. package/dist/src/agent/tools/phone-use-tool.js +2 -2
  222. package/dist/src/agent/tools/web.js +22 -3
  223. package/dist/src/agent-matching/service.js +2 -2
  224. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  225. package/dist/src/computer/batch.d.ts +108 -0
  226. package/dist/src/computer/batch.js +125 -0
  227. package/dist/src/computer/broker.d.ts +30 -2
  228. package/dist/src/computer/broker.js +109 -17
  229. package/dist/src/computer/diagnostics.d.ts +5 -1
  230. package/dist/src/computer/diagnostics.js +22 -3
  231. package/dist/src/computer/errors.d.ts +15 -0
  232. package/dist/src/computer/errors.js +59 -3
  233. package/dist/src/computer/model-adapter.d.ts +58 -0
  234. package/dist/src/computer/model-adapter.js +112 -66
  235. package/dist/src/computer/native-errors.d.ts +2 -0
  236. package/dist/src/computer/native-errors.js +13 -0
  237. package/dist/src/computer/program-runtime.d.ts +1 -1
  238. package/dist/src/computer/program-runtime.js +1 -0
  239. package/dist/src/computer/runtime.d.ts +11 -0
  240. package/dist/src/computer/runtime.js +102 -34
  241. package/dist/src/computer/semantic-actions.js +4 -0
  242. package/dist/src/config/schema.d.ts +6 -0
  243. package/dist/src/extensions/agent-plugins/formats.js +2 -1
  244. package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -0
  245. package/dist/src/extensions/agent-plugins/inventory.js +4 -1
  246. package/dist/src/extensions/agent-plugins/validation.d.ts +1 -0
  247. package/dist/src/extensions/agent-plugins/validation.js +2 -1
  248. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  249. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  250. package/dist/src/gateway/hono/routes/phone-dependencies.js +26 -5
  251. package/dist/src/gateway/hono/routes/phone-setup.js +42 -16
  252. package/dist/src/gateway/hono/routes/phone.js +22 -7
  253. package/dist/src/gateway/hono/routes/session-command-handler.js +9 -0
  254. package/dist/src/gateway/hono/routes/session-input-control.d.ts +3 -0
  255. package/dist/src/gateway/hono/routes/session-input-control.js +37 -0
  256. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +12 -0
  257. package/dist/src/gateway/hono/routes/session-input-handler.js +22 -0
  258. package/dist/src/gateway/hono/routes/sessions.js +4 -0
  259. package/dist/src/gateway/service/agent-runner.js +5 -4
  260. package/dist/src/gateway/service/config-coordinator.d.ts +6 -0
  261. package/dist/src/gateway/service/session-input-coordinator.d.ts +6 -3
  262. package/dist/src/gateway/service/session-input-coordinator.js +47 -6
  263. package/dist/src/gateway/service.d.ts +1 -0
  264. package/dist/src/gateway/service.js +8 -5
  265. package/dist/src/home-intelligence/host.js +2 -2
  266. package/dist/src/personal-agent/capability-service.js +1 -1
  267. package/dist/src/personal-agent/request-access.d.ts +2 -0
  268. package/dist/src/personal-agent/request-access.js +22 -2
  269. package/dist/src/personal-agent/request-service.js +2 -2
  270. package/dist/src/personal-agent/specialist-capabilities.d.ts +2 -0
  271. package/dist/src/personal-agent/specialist-capabilities.js +9 -3
  272. package/dist/src/phone/adb-driver.d.ts +3 -0
  273. package/dist/src/phone/adb-driver.js +29 -0
  274. package/dist/src/phone/contracts.d.ts +14 -2
  275. package/dist/src/phone/contracts.js +8 -1
  276. package/dist/src/phone/gui-protocol.js +1 -1
  277. package/dist/src/phone/hdc-driver.d.ts +30 -0
  278. package/dist/src/phone/hdc-driver.js +331 -0
  279. package/dist/src/phone/hdc-video-bridge.d.ts +2 -0
  280. package/dist/src/phone/hdc-video-bridge.js +91 -0
  281. package/dist/src/phone/hdc-video-tools.d.ts +15 -0
  282. package/dist/src/phone/hdc-video-tools.js +123 -0
  283. package/dist/src/phone/hdc-video.d.ts +69 -0
  284. package/dist/src/phone/hdc-video.js +350 -0
  285. package/dist/src/phone/interactive-session.js +1 -1
  286. package/dist/src/phone/live-provider.d.ts +6 -0
  287. package/dist/src/phone/live-provider.js +1 -0
  288. package/dist/src/phone/model-adapter.d.ts +3 -0
  289. package/dist/src/phone/model-adapter.js +5 -3
  290. package/dist/src/phone/repository.js +2 -1
  291. package/dist/src/phone/runtime.d.ts +10 -4
  292. package/dist/src/phone/runtime.js +151 -85
  293. package/dist/src/phone/setup/service.d.ts +8 -6
  294. package/dist/src/phone/setup/service.js +33 -16
  295. package/dist/src/platform/client.d.ts +1 -1
  296. package/dist/src/platform/contracts.d.ts +1 -1
  297. package/dist/src/process/phone-process.d.ts +1 -1
  298. package/dist/src/process/phone-process.js +2 -2
  299. package/dist/src/runtime-tools/downloader.d.ts +1 -0
  300. package/dist/src/runtime-tools/downloader.js +8 -4
  301. package/dist/src/runtime-tools/harmony-dependencies.d.ts +24 -0
  302. package/dist/src/runtime-tools/harmony-dependencies.js +272 -0
  303. package/dist/src/runtime-tools/harmony-dependency-catalog.d.ts +4 -0
  304. package/dist/src/runtime-tools/harmony-dependency-catalog.js +54 -0
  305. package/dist/src/runtime-tools/harmony-paths.d.ts +9 -0
  306. package/dist/src/runtime-tools/harmony-paths.js +15 -0
  307. package/dist/src/runtime-tools/hdc-dependency-catalog.d.ts +8 -0
  308. package/dist/src/runtime-tools/hdc-dependency-catalog.js +83 -0
  309. package/dist/src/runtime-tools/hdc-files.d.ts +14 -0
  310. package/dist/src/runtime-tools/hdc-files.js +87 -0
  311. package/dist/src/runtime-tools/phone-dependencies.d.ts +6 -1
  312. package/dist/src/runtime-tools/phone-dependencies.js +20 -2
  313. package/dist/src/runtime-tools/phone-dependency-catalog.d.ts +10 -1
  314. package/dist/src/runtime-tools/phone-dependency-catalog.js +2 -0
  315. package/dist/src/runtime-tools/types.d.ts +1 -1
  316. package/dist/src/storage/sqlite/schema.d.ts +2 -2
  317. package/dist/src/storage/sqlite/schema.js +7 -7
  318. package/dist/src/storage/sqlite/schema.sql +16 -0
  319. package/dist/src/storage/sqlite/session-creation-repository.js +3 -0
  320. package/dist/src/storage/sqlite/session-input-control-repository.d.ts +12 -0
  321. package/dist/src/storage/sqlite/session-input-control-repository.js +83 -0
  322. package/dist/src/storage/sqlite/session-input-repository.d.ts +2 -0
  323. package/dist/src/storage/sqlite/session-input-repository.js +17 -5
  324. package/dist/src/storage/sqlite/session-repository.js +1 -0
  325. package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +2 -0
  326. package/dist/src/storage/sqlite/session-turn-replace-repository.js +14 -2
  327. package/dist/src/storage/sqlite/upgrades/262_session_input_control.sql +15 -0
  328. package/package.json +2 -2
  329. package/skills/tools/configure-xopc/SKILL.md +2 -2
  330. package/skills/tools/configure-xopc/references/phone/acceptance.md +3 -2
  331. package/skills/tools/configure-xopc/references/phone/dependencies.md +18 -2
  332. package/skills/tools/configure-xopc/references/phone/harmonyos.md +16 -0
  333. package/skills/tools/configure-xopc/references/phone/overview.md +2 -2
  334. package/skills/tools/configure-xopc/references/scene-index.md +2 -2
  335. package/dist/gateway/static/root/assets/apps-page-D-n71lO1.js +0 -1
  336. package/dist/gateway/static/root/assets/automations-workspace-DWDWy-SG.js +0 -9
  337. package/dist/gateway/static/root/assets/capabilities-page-IcwojmJK.js +0 -2
  338. package/dist/gateway/static/root/assets/capability-links-DzQWK1Fh.js +0 -1
  339. package/dist/gateway/static/root/assets/chat-page-CwP4OMdW.js +0 -72
  340. package/dist/gateway/static/root/assets/computer-settings-page-DyAlOzqY.js +0 -1
  341. package/dist/gateway/static/root/assets/connected-providers-grid-D0lXg22c.js +0 -1
  342. package/dist/gateway/static/root/assets/connectors-page-DI_Q0CKz.js +0 -1
  343. package/dist/gateway/static/root/assets/gateway-realtime-store-BFeFfApQ.js +0 -1
  344. package/dist/gateway/static/root/assets/index-Cz-VjTNd.css +0 -1
  345. package/dist/gateway/static/root/assets/index-D1_PUrJf.js +0 -11
  346. package/dist/gateway/static/root/assets/install-connector-dialog-Cn4nRSyt.js +0 -1
  347. package/dist/gateway/static/root/assets/list-tree-B0OMswgM.js +0 -1
  348. package/dist/gateway/static/root/assets/messages-jwdBhfL9.js +0 -3
  349. package/dist/gateway/static/root/assets/note-image-lightbox-DGYRJS03.js +0 -1
  350. package/dist/gateway/static/root/assets/page-header-store-CEn_kPsn.js +0 -1
  351. package/dist/gateway/static/root/assets/phone-dependencies-card-DjmC1Z5j.js +0 -1
  352. package/dist/gateway/static/root/assets/phone-model-connection-BRjHSgYn.js +0 -1
  353. package/dist/gateway/static/root/assets/phone-model-picker-DgIiWLhR.js +0 -1
  354. package/dist/gateway/static/root/assets/phone-settings-page-DCZGCL_z.js +0 -1
  355. package/dist/gateway/static/root/assets/plugin-details-dialog-D4tGKip4.js +0 -1
  356. package/dist/gateway/static/root/assets/route-preload-C1BKDjnu.js +0 -2
  357. package/dist/gateway/static/root/assets/session-api-Bfmlmn9F.js +0 -1
  358. package/dist/gateway/static/root/assets/session-channel-icon-SsY70Z6t.js +0 -1
  359. package/dist/gateway/static/root/assets/session-identity-label-B7sgG1PE.js +0 -1
  360. package/dist/gateway/static/root/assets/session-manager-X4UHOjjO.js +0 -25
  361. package/dist/gateway/static/root/assets/settings-advanced-gate-Dk9c-Z5e.js +0 -1
  362. package/dist/gateway/static/root/assets/workspace-editor-agent-store-msZa42fU.js +0 -1
@@ -17,7 +17,7 @@ import { resolveAgentAbortReason } from "../orchestration/run-termination.js";
17
17
  import { isAgentTurnTimeoutError, isAgentTurnUnsettledError, resolveAgentTurnTimeoutMs, runAgentTurnWithTimeout } from "../orchestration/run-agent-turn-with-timeout.js";
18
18
  import { isContextOverflowError } from "../orchestration/context-overflow.js";
19
19
  import { ACCEPTANCE_REPAIR_READ_TOOLS, canResumeAfterModelFailure, completedRecoveryToolResult } from "../orchestration/turn-recovery.js";
20
- import { getAssistantTurnErrorMessage, isAssistantTurnAborted, isAssistantTurnFailed, maybeRetryTurnAfterTransientLlmFailure, stripTrailingErrorAssistantMessages } from "../orchestration/llm-turn-retry.js";
20
+ import { classifyLlmFailure, getAssistantTurnErrorMessage, isAssistantTurnAborted, isAssistantTurnFailed, maybeRetryTurnAfterTransientLlmFailure, stripTrailingErrorAssistantMessages } from "../orchestration/llm-turn-retry.js";
21
21
  import { allowsExecutionTool, filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
22
22
  import { isPhoneAssistanceSuspended, phoneAssistance, phoneResumeForRun } from "../../phone/assistance.js";
23
23
  import { runWithEmbeddedExecutionSession } from "./execution-context.js";
@@ -377,7 +377,12 @@ async function runXopcEmbeddedTurnInner(params) {
377
377
  const { session, reused } = runner;
378
378
  const configurationTurnStart = session.agent.state.messages.length;
379
379
  await runLease.attach(session, async () => session.abort());
380
- const runAbortSignal = params.abortSignal ? AbortSignal.any([runLease.signal, params.abortSignal]) : runLease.signal;
380
+ const turnDeadline = new AbortController();
381
+ const runAbortSignal = AbortSignal.any([
382
+ runLease.signal,
383
+ turnDeadline.signal,
384
+ ...params.abortSignal ? [params.abortSignal] : []
385
+ ]);
381
386
  if (runAbortSignal.aborted) {
382
387
  await session.abort();
383
388
  return {
@@ -917,7 +922,20 @@ async function runXopcEmbeddedTurnInner(params) {
917
922
  modelRequestNumber
918
923
  }, "Embedded first response text ready");
919
924
  }
920
- if (event.type === "message_end" && event.message.role === "assistant") recordPromptCacheTouch(conversationId, resolvedModel, event.message.usage);
925
+ if (event.type === "message_end" && event.message.role === "assistant") {
926
+ recordPromptCacheTouch(conversationId, resolvedModel, event.message.usage);
927
+ if (event.message.stopReason === "error" || event.message.stopReason === "aborted") log.warn({
928
+ conversationId,
929
+ runId,
930
+ modelRef: latencyModelRef,
931
+ modelRequestNumber,
932
+ phase: "model_request_end",
933
+ stopReason: event.message.stopReason,
934
+ errorMessage: event.message.errorMessage,
935
+ hostSignalAborted: runAbortSignal.aborted,
936
+ ...runAbortSignal.aborted ? { terminationReason: resolveAgentAbortReason(runAbortSignal.reason) } : {}
937
+ }, "Model request ended without completing the response");
938
+ }
921
939
  if (event.type === "tool_execution_end") {
922
940
  markTurnToolResult(conversationId, runId, event.toolName);
923
941
  if (event.toolName === "send_message" && !event.isError) sentVisibleMessage = true;
@@ -1055,7 +1073,10 @@ async function runXopcEmbeddedTurnInner(params) {
1055
1073
  await session.agent.waitForIdle();
1056
1074
  await recoverSettledTurn();
1057
1075
  }
1058
- }), timeoutMs, { timeoutExtensionMs: params.timeoutExtensionMs });
1076
+ }), timeoutMs, {
1077
+ timeoutExtensionMs: params.timeoutExtensionMs,
1078
+ onTimeout: (reason) => turnDeadline.abort(reason)
1079
+ });
1059
1080
  if (phoneStopped) {
1060
1081
  const wait = phoneAssistance(conversationId);
1061
1082
  const notice = {
@@ -1125,7 +1146,7 @@ async function runXopcEmbeddedTurnInner(params) {
1125
1146
  ok: false,
1126
1147
  retryable: false,
1127
1148
  terminationReason: "provider_error",
1128
- errorMessage: "aborted",
1149
+ errorMessage: `Model request was interrupted while the agent run was still active; automatic recovery could not complete. ${getAssistantTurnErrorMessage(session.agent) ?? "Provider returned an aborted stream."}`,
1129
1150
  lastAssistantText: lastAssistantPlainText(session)
1130
1151
  };
1131
1152
  if (policyStopped && !policyCompleted || lengthRecoveryExhausted || lastAssistantMessage(session.agent.state.messages)?.stopReason === "length") return {
@@ -1139,7 +1160,7 @@ async function runXopcEmbeddedTurnInner(params) {
1139
1160
  ok: false,
1140
1161
  retryable: canResumeAfterModelFailure(session.agent.state.messages, { allowFailedReadTools: ACCEPTANCE_REPAIR_READ_TOOLS }),
1141
1162
  terminationReason: "provider_error",
1142
- errorMessage: getAssistantTurnErrorMessage(session.agent) ?? "Assistant turn failed",
1163
+ errorMessage: classifyLlmFailure(getAssistantTurnErrorMessage(session.agent) ?? "") === "aborted" ? `Model request was interrupted while the agent run was still active; automatic recovery could not complete. ${getAssistantTurnErrorMessage(session.agent)}` : getAssistantTurnErrorMessage(session.agent) ?? "Assistant turn failed",
1143
1164
  lastAssistantText: lastAssistantPlainText(session)
1144
1165
  };
1145
1166
  if (params.requireVisibleReply && !sentVisibleMessage && lastAssistantPlainText(session).trim() === "NO_REPLY") return {
@@ -1191,7 +1212,9 @@ async function runXopcEmbeddedTurnInner(params) {
1191
1212
  log.error({
1192
1213
  err,
1193
1214
  conversationId,
1194
- runId
1215
+ runId,
1216
+ phase: "embedded_run_end",
1217
+ terminationReason: isAgentTurnTimeoutError(err) ? "deadline_exceeded" : params.abortSignal?.aborted ? resolveAgentAbortReason(params.abortSignal.reason) : "runtime_error"
1195
1218
  }, `Embedded run failed: ${em}`);
1196
1219
  onEvent?.({
1197
1220
  type: "error",
@@ -30,11 +30,11 @@ export declare class EmbeddedRunRegistry {
30
30
  acquire(identity: EmbeddedRunIdentity): EmbeddedRunLease;
31
31
  getByConversationId(conversationId: string): EmbeddedRunHandle | undefined;
32
32
  abortByConversationId(conversationId: string, reason?: 'user_cancelled' | 'parent_cancelled', expectedRunId?: string): Promise<boolean>;
33
- steerByConversationId(conversationId: string, text: string): Promise<boolean>;
33
+ steerByConversationId(conversationId: string, text: string, expectedRunId?: string): Promise<boolean>;
34
34
  size(): number;
35
35
  }
36
36
  export declare function acquireEmbeddedRunLease(identity: EmbeddedRunIdentity): EmbeddedRunLease;
37
37
  export declare function reserveEmbeddedRunCancellation(identity: Pick<EmbeddedRunIdentity, 'conversationId' | 'runId'>): EmbeddedRunCancellation;
38
38
  export declare function getEmbeddedRunByConversationId(conversationId: string): EmbeddedRunHandle | undefined;
39
39
  export declare function abortEmbeddedRun(conversationId: string, reason?: 'user_cancelled' | 'parent_cancelled', expectedRunId?: string): Promise<boolean>;
40
- export declare function queueEmbeddedSteer(conversationId: string, text: string): Promise<boolean>;
40
+ export declare function queueEmbeddedSteer(conversationId: string, text: string, expectedRunId?: string): Promise<boolean>;
@@ -63,9 +63,9 @@ var EmbeddedRunRegistry = class {
63
63
  if (entry.handle) await entry.handle.abort();
64
64
  return true;
65
65
  }
66
- async steerByConversationId(conversationId, text) {
66
+ async steerByConversationId(conversationId, text, expectedRunId) {
67
67
  const handle = this.getByConversationId(conversationId);
68
- if (!handle) return false;
68
+ if (!handle || expectedRunId !== void 0 && handle.runId !== expectedRunId || this.byConversationId.get(conversationId)?.abortController.signal.aborted) return false;
69
69
  await handle.session.steer(text);
70
70
  return true;
71
71
  }
@@ -86,8 +86,8 @@ function getEmbeddedRunByConversationId(conversationId) {
86
86
  function abortEmbeddedRun(conversationId, reason = "parent_cancelled", expectedRunId) {
87
87
  return embeddedRunRegistry.abortByConversationId(conversationId, reason, expectedRunId);
88
88
  }
89
- function queueEmbeddedSteer(conversationId, text) {
90
- return embeddedRunRegistry.steerByConversationId(conversationId, text);
89
+ function queueEmbeddedSteer(conversationId, text, expectedRunId) {
90
+ return embeddedRunRegistry.steerByConversationId(conversationId, text, expectedRunId);
91
91
  }
92
92
  //#endregion
93
93
  export { EmbeddedRunConflictError, EmbeddedRunRegistry, abortEmbeddedRun, acquireEmbeddedRunLease, getEmbeddedRunByConversationId, queueEmbeddedSteer, reserveEmbeddedRunCancellation };
@@ -3,6 +3,7 @@ import { init_logger } from "../../utils/logger.js";
3
3
  import { filterExecutionTools, resolveExecutionToolPolicy } from "./execution-tool-policy.js";
4
4
  import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
5
5
  import { isCodemodeCoreRead } from "../tools/codemode-permissions.js";
6
+ import { getExternalToolRegistry } from "../external-tools/tool-registry.js";
6
7
  import { createEmbeddedModelRuntime, resolveEmbeddedProviderApiKeySync } from "./model-runtime.js";
7
8
  import { getNativePiAgentDir } from "../mcp/native-mcp.js";
8
9
  import { createXopcMcpTransport } from "../mcp/transport.js";
@@ -21,13 +22,20 @@ import { createHash } from "node:crypto";
21
22
  import { DefaultResourceLoader, SettingsManager, createAgentSession, createMcpExtension } from "@earendil-works/pi-coding-agent";
22
23
  //#region src/agent/embedded/session-runner.ts
23
24
  init_logger();
24
- const toolContract = (tool) => JSON.stringify([
25
- tool.name,
26
- tool.parameters,
27
- tool.description,
28
- isCodemodeCoreRead(tool),
29
- getXopcToolMetadata(tool)
30
- ]);
25
+ const toolContract = (tool) => {
26
+ const registry = getExternalToolRegistry([tool]);
27
+ return JSON.stringify([
28
+ tool.name,
29
+ tool.parameters,
30
+ tool.description,
31
+ isCodemodeCoreRead(tool),
32
+ getXopcToolMetadata(tool),
33
+ registry ? {
34
+ discovery: registry.discovery,
35
+ nativeSources: registry.nativeSources
36
+ } : void 0
37
+ ]);
38
+ };
31
39
  const log = createLogger("EmbeddedSessionRunner");
32
40
  const DEFAULT_IDLE_TTL_MS = 5 * 6e4;
33
41
  function providerCredentialRevision(providerId) {
@@ -259,8 +267,8 @@ var EmbeddedSessionRunnerPool = class {
259
267
  contextWindowTokens: model.contextWindow ?? 128e3,
260
268
  transformMessageForPersistence: params.transcriptRuntime.persistent ? (message) => transformUserMessageForPersistence(runtimeId, message) : void 0
261
269
  });
262
- const toolDefs = xopcToolsToDefinitions(tools);
263
- const toolNames = tools.filter((tool) => getXopcToolMetadata(tool)?.exposure !== "deferred").map((tool) => tool.name);
270
+ const toolDefs = xopcToolsToDefinitions(tools.filter((tool) => tool.name !== "tool_search"));
271
+ const toolNames = tools.filter((tool) => !["deferred", "hidden"].includes(getXopcToolMetadata(tool)?.exposure ?? "") && tool.name !== "tool_search").map((tool) => tool.name);
264
272
  const discoveryState = piSm.getBranch().findLast((entry) => entry.type === "custom" && entry.customType === "xopc-tool-discovery");
265
273
  const saved = discoveryState?.type === "custom" ? discoveryState.data : void 0;
266
274
  const restored = new Map((saved?.loaded ?? []).map((tool) => [tool.name, tool.contract]));
@@ -277,7 +285,10 @@ var EmbeddedSessionRunnerPool = class {
277
285
  maxOutputTokens: 4e3
278
286
  } : void 0;
279
287
  if (codemode) toolNames.push("codemode");
280
- const discovery = params.executionToolPolicy?.discovery !== false && (hasMcp || tools.some((tool) => getXopcToolMetadata(tool)?.exposure === "deferred"));
288
+ const registry = getExternalToolRegistry(tools);
289
+ const nativeDiscovery = params.executionToolPolicy?.discovery !== false && registry?.discovery?.native !== false;
290
+ const externalDiscovery = registry?.discovery?.connectors !== false;
291
+ const discovery = nativeDiscovery && (hasMcp || externalDiscovery && Boolean(registry) || tools.some((tool) => getXopcToolMetadata(tool)?.exposure === "deferred")) || externalDiscovery && params.executionToolPolicy?.surface === "personal_request_worker";
281
292
  if (discovery) toolNames.push("tool_search");
282
293
  const modelRuntime = await createEmbeddedModelRuntime(model.provider);
283
294
  const resourceLoader = new DefaultResourceLoader({
@@ -291,7 +302,11 @@ var EmbeddedSessionRunnerPool = class {
291
302
  createMcpSetupContinuationGuard(runtimeId, tools.some((tool) => tool.name === "mcp_setup")),
292
303
  ...mcp?.automationSourceRunId ? [createAutomationMcpSourceGuard(mcp.automationSourceRunId)] : [],
293
304
  ...codemode ? [createXopcCodemodeExtension(codemode, tools, () => boundSession)] : [],
294
- ...discovery ? [createXopcToolSearchExtension(tools)] : [],
305
+ ...discovery ? [createXopcToolSearchExtension(tools, {
306
+ nativeDiscovery,
307
+ externalDiscovery,
308
+ registry
309
+ })] : [],
295
310
  ...mcp ? [createMcpExtension({
296
311
  createTransport: createXopcMcpTransport(),
297
312
  loadConfig: () => mcp,
@@ -1,5 +1,11 @@
1
1
  import type { AgentTool } from '@earendil-works/pi-agent-core';
2
2
  import { type ExtensionFactory } from '@earendil-works/pi-coding-agent';
3
+ import { type ExternalToolRegistry } from '../external-tools/tool-registry.js';
3
4
  export declare const TOOL_DISCOVERY_STATE = "xopc-tool-discovery";
4
- /** xopc deliberately excludes pi system declarations from SQLite; retain only discovery state. */
5
- export declare function createXopcToolSearchExtension(tools: readonly AgentTool[]): ExtensionFactory;
5
+ /** One model-facing discovery entry; execution and connection permissions remain host-owned. */
6
+ export declare function createXopcToolSearchExtension(tools: readonly AgentTool[], options?: {
7
+ nativeDiscovery?: boolean;
8
+ externalDiscovery?: boolean;
9
+ registry?: ExternalToolRegistry;
10
+ externalTimeoutMs?: number;
11
+ }): ExtensionFactory;
@@ -1,44 +1,136 @@
1
1
  import { deferredToolContract, getXopcToolMetadata } from "./tool-metadata.js";
2
+ import { getExternalToolRegistry } from "../external-tools/tool-registry.js";
2
3
  import { createToolSearchExtension } from "@earendil-works/pi-coding-agent";
3
4
  //#region src/agent/embedded/tool-search-extension.ts
4
5
  const TOOL_DISCOVERY_STATE = "xopc-tool-discovery";
5
- /** xopc deliberately excludes pi system declarations from SQLite; retain only discovery state. */
6
- function createXopcToolSearchExtension(tools) {
6
+ /** One model-facing discovery entry; execution and connection permissions remain host-owned. */
7
+ function createXopcToolSearchExtension(tools, options = {}) {
7
8
  const deferred = tools.filter((tool) => getXopcToolMetadata(tool)?.exposure === "deferred");
8
- return (pi) => createToolSearchExtension()({
9
- ...pi,
10
- registerTool(definition) {
11
- pi.registerTool({
12
- ...definition,
13
- async execute(id, params, signal, update, context) {
14
- const input = params;
15
- if ((input.limit ?? 8) > 20 || (input.query?.length ?? 0) > 2e3) throw new Error("Tool search permits at most 20 matches and 2000 query characters");
16
- const result = await definition.execute(id, params, signal, update, context);
17
- if ((result.details?.loaded)?.length === 0) {
18
- const queryNames = new Set((input.query ?? "").match(/[\w.:-]+/g));
19
- const active = new Set(pi.getActiveTools());
20
- const alreadyLoaded = deferred.filter((tool) => active.has(tool.name) && queryNames.has(tool.name)).map((tool) => tool.name);
21
- if (alreadyLoaded.length) return {
22
- ...result,
23
- content: [{
24
- type: "text",
25
- text: `Already loaded: ${alreadyLoaded.join(", ")}. These tools are declared and available now; call them directly. No new tools were loaded.`
26
- }]
27
- };
28
- }
29
- return result;
30
- }
31
- });
32
- },
33
- setActiveTools(names) {
9
+ const registry = options.externalDiscovery === false ? void 0 : options.registry ?? getExternalToolRegistry(tools);
10
+ const nativeDiscovery = options.nativeDiscovery !== false;
11
+ return (pi) => {
12
+ const setActiveTools = (names) => {
34
13
  pi.setActiveTools(names);
14
+ if (!nativeDiscovery) return;
35
15
  const active = new Set(pi.getActiveTools());
36
16
  pi.appendEntry(TOOL_DISCOVERY_STATE, { loaded: deferred.filter((tool) => active.has(tool.name)).map((tool) => ({
37
17
  name: tool.name,
38
18
  contract: deferredToolContract(tool)
39
19
  })) });
40
- }
41
- });
20
+ };
21
+ return createToolSearchExtension()({
22
+ ...pi,
23
+ registerTool(definition) {
24
+ pi.registerTool({
25
+ ...definition,
26
+ description: "Search for tools and connector capabilities using concise capability keywords. loadedTools are available by name from the next model call. externalTools require xopc_tool_describe, then xopc_tool_execute with the exact revision. Connection and install candidates are recovery options, not executable tools or proof of missing authorization. Use xopc_require_connection only when authorization, installation or account selection is actually required; Personal request workers use personal_request_connection. Source errors do not mean a capability is unavailable. Searches never grant permissions.",
27
+ executionMode: "sequential",
28
+ async execute(id, params, signal, update, context) {
29
+ const input = params;
30
+ const limit = input.limit ?? 8;
31
+ if (!Number.isInteger(limit) || limit < 1 || limit > 20 || !input.query?.trim() || input.query.length > 2e3) throw new Error("Tool search requires a nonempty query of at most 2000 characters and a limit from 1 to 20");
32
+ signal?.throwIfAborted();
33
+ const nativeLimit = nativeDiscovery ? registry ? Math.max(1, Math.floor(limit / 2)) : limit : 0;
34
+ const externalLimit = nativeDiscovery ? Math.max(1, limit - nativeLimit) : limit;
35
+ const externalSearch = registry ? boundedSearch(() => registry.search({
36
+ query: input.query,
37
+ limit: externalLimit,
38
+ signal,
39
+ timeoutMs: 4e3
40
+ }), options.externalTimeoutMs ?? 8e3, signal) : Promise.resolve(void 0);
41
+ const result = nativeDiscovery ? await definition.execute(id, {
42
+ ...params,
43
+ limit: nativeLimit
44
+ }, signal, update, context) : {
45
+ content: [],
46
+ details: { loaded: [] }
47
+ };
48
+ const external = await externalSearch;
49
+ signal?.throwIfAborted();
50
+ const loaded = result.details?.loaded ?? [];
51
+ const queryNames = new Set(input.query.match(/[\w.:-]+/g));
52
+ const active = new Set(pi.getActiveTools());
53
+ const alreadyLoaded = nativeDiscovery ? deferred.filter((tool) => active.has(tool.name) && !loaded.includes(tool.name) && queryNames.has(tool.name)).map((tool) => tool.name) : [];
54
+ const externalTools = (external?.result?.tools ?? []).slice(0, Math.max(0, limit - loaded.length));
55
+ if (externalTools.length) setActiveTools([
56
+ ...active,
57
+ "xopc_tool_describe",
58
+ "xopc_tool_execute"
59
+ ]);
60
+ const all = new Map(pi.getAllTools().map((tool) => [tool.name, tool]));
61
+ const payload = {
62
+ loadedTools: loaded.map((name) => ({
63
+ name,
64
+ description: all.get(name)?.description,
65
+ nextAction: "call"
66
+ })),
67
+ alreadyLoaded,
68
+ externalTools: externalTools.map((tool) => ({
69
+ ...tool,
70
+ nextAction: "describe"
71
+ })),
72
+ connectionCandidates: external?.result?.connectionCandidates ?? [],
73
+ installCandidates: external?.result?.installCandidates ?? [],
74
+ selectedConnections: external?.result?.selectedConnections ?? [],
75
+ selectedAccountId: external?.result?.selectedAccountId,
76
+ waitingObjective: external?.result?.waitingObjective,
77
+ sourceErrors: [
78
+ ...external?.result?.sourceErrors ?? [],
79
+ ...external?.error ? [{
80
+ source: "connectors",
81
+ message: external.error
82
+ }] : [],
83
+ ...external?.result?.installCatalogError ? [{
84
+ source: "store",
85
+ message: external.result.installCatalogError
86
+ }] : []
87
+ ],
88
+ unavailableSources: external?.result?.unavailableSources ?? [],
89
+ scope: {
90
+ native: nativeDiscovery,
91
+ connectors: Boolean(registry),
92
+ ...nativeDiscovery ? {} : { restriction: "Only the selected Personal request connector, account and curated reads are discoverable." }
93
+ },
94
+ instruction: [
95
+ nativeDiscovery ? result.content.filter((block) => block.type === "text").map((block) => block.text).join("\n") : "",
96
+ alreadyLoaded.length ? `Already loaded: ${alreadyLoaded.join(", ")}. Call these tools directly.` : "",
97
+ external?.result?.instruction ?? "",
98
+ "loadedTools are declared from the next model call; externalTools are references and must be described before execution. No matches alone do not prove missing authorization."
99
+ ].filter(Boolean).join("\n")
100
+ };
101
+ return {
102
+ content: [{
103
+ type: "text",
104
+ text: JSON.stringify(payload)
105
+ }],
106
+ details: {
107
+ ...payload,
108
+ loaded
109
+ }
110
+ };
111
+ }
112
+ });
113
+ },
114
+ setActiveTools
115
+ });
116
+ };
117
+ }
118
+ /** Bound directory latency without cancelling another source or executing any operation. */
119
+ async function boundedSearch(search, timeoutMs, signal) {
120
+ let timer;
121
+ let onAbort;
122
+ try {
123
+ return await Promise.race([Promise.resolve().then(search).then((result) => ({ result })), new Promise((_resolve, reject) => {
124
+ timer = setTimeout(() => reject(/* @__PURE__ */ new Error("Connector discovery timed out; retry before declaring the capability unavailable")), timeoutMs);
125
+ onAbort = () => reject(signal?.reason ?? /* @__PURE__ */ new Error("Tool search aborted"));
126
+ signal?.addEventListener("abort", onAbort, { once: true });
127
+ })]);
128
+ } catch (error) {
129
+ return { error: error instanceof Error ? error.message : String(error) };
130
+ } finally {
131
+ clearTimeout(timer);
132
+ if (onAbort) signal?.removeEventListener("abort", onAbort);
133
+ }
42
134
  }
43
135
  //#endregion
44
136
  export { TOOL_DISCOVERY_STATE, createXopcToolSearchExtension };
@@ -1,5 +1,5 @@
1
1
  import type { Config } from '../../config/schema.js';
2
- import type { ExternalToolProvider, ExternalToolExecutionContext, ExternalToolTurnContext } from './types.js';
2
+ import type { ExternalToolProvider, ExternalToolDiscoveryContext, ExternalToolExecutionContext, ExternalToolTurnContext } from './types.js';
3
3
  export declare class CliToolProvider implements ExternalToolProvider {
4
4
  private readonly deps;
5
5
  readonly source: "cli";
@@ -9,20 +9,14 @@ export declare class CliToolProvider implements ExternalToolProvider {
9
9
  agentId?: string;
10
10
  });
11
11
  private available;
12
- search(query: string): Promise<{
12
+ search(query: string, context?: ExternalToolDiscoveryContext): Promise<{
13
13
  toolRef: string;
14
14
  source: "cli";
15
15
  namespace: string;
16
16
  title: string;
17
17
  summary: string;
18
18
  }[]>;
19
- describe(toolRef: string): Promise<{
20
- toolRef: string;
21
- source: "cli";
22
- namespace: string;
23
- title: string;
24
- summary: string;
25
- description: string;
19
+ describe(toolRef: string, context?: ExternalToolDiscoveryContext): Promise<{
26
20
  readOnly: boolean;
27
21
  batchRead: boolean;
28
22
  inputSchema: {
@@ -37,6 +31,13 @@ export declare class CliToolProvider implements ExternalToolProvider {
37
31
  };
38
32
  };
39
33
  };
34
+ contractRevision?: string;
35
+ toolRef: string;
36
+ source: "cli";
37
+ namespace: string;
38
+ title: string;
39
+ summary: string;
40
+ description: string;
40
41
  }>;
41
42
  execute(toolRef: string, args: Record<string, unknown>, approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<{
42
43
  content: {
@@ -35,6 +35,16 @@ const result = (value) => ({
35
35
  }],
36
36
  details: {}
37
37
  });
38
+ function cliContractRevision(connection, action, adapter) {
39
+ return connectorArgumentsHash({
40
+ accountId: connection.accountId,
41
+ connectionId: connection.id,
42
+ connectionUpdatedAt: connection.updatedAt,
43
+ action,
44
+ adapterVersion: adapter.version,
45
+ binaryVersion: adapter.binaryVersion
46
+ });
47
+ }
38
48
  var CliToolProvider = class {
39
49
  source = "cli";
40
50
  constructor(deps) {
@@ -60,13 +70,14 @@ var CliToolProvider = class {
60
70
  }];
61
71
  });
62
72
  }
63
- async search(query) {
73
+ async search(query, context) {
64
74
  const words = query.toLowerCase().split(/\s+/).filter(Boolean);
65
75
  return this.available().flatMap((item) => {
76
+ if (context && item.instance.connectorId !== context.connectorId) return [];
66
77
  const accounts = selectConnectorAccount({
67
78
  installation: item.policy,
68
79
  agentId: item.agentId,
69
- accept: (c) => c.provider === "cli" && c.metadata.runtimeInstanceId === item.instance.instanceId
80
+ accept: (c) => c.provider === "cli" && c.metadata.runtimeInstanceId === item.instance.instanceId && (!context || c.accountId === context.accountId)
70
81
  }).candidates;
71
82
  if (!accounts.length) return [];
72
83
  return Object.entries(item.adapter.curatedActions).filter(([id, scope]) => {
@@ -90,16 +101,18 @@ var CliToolProvider = class {
90
101
  }));
91
102
  });
92
103
  }
93
- async describe(toolRef) {
104
+ async describe(toolRef, context) {
94
105
  const parsed = parseExternalToolRef(toolRef, this.source);
95
106
  const item = this.available().find((value) => value.instance.instanceId === parsed?.namespace);
96
107
  if (!item || !parsed) return void 0;
108
+ if (context && item.instance.connectorId !== context.connectorId) return void 0;
97
109
  const selected = selectConnectorAccount({
98
110
  installation: item.policy,
99
111
  agentId: item.agentId,
112
+ requestedAccountId: context?.accountId,
100
113
  accept: (c) => c.provider === "cli" && c.metadata.runtimeInstanceId === item.instance.instanceId
101
114
  });
102
- const connection = selected.connection ?? selected.candidates[0];
115
+ const connection = selected.connection ?? (context ? void 0 : selected.candidates[0]);
103
116
  if (!connection) return void 0;
104
117
  const action = await describeCliAction(item.config, item.instance.instanceId, connection, parsed.toolName);
105
118
  if (evaluateConnectorExecutionPolicy({
@@ -119,6 +132,7 @@ var CliToolProvider = class {
119
132
  title: action.id,
120
133
  summary: action.description,
121
134
  description: action.description,
135
+ ...context ? { contractRevision: cliContractRevision(connection, action, item.adapter) } : {},
122
136
  readOnly: action.scope === "read",
123
137
  batchRead: action.scope === "read",
124
138
  inputSchema: {
@@ -159,6 +173,9 @@ var CliToolProvider = class {
159
173
  instruction: "Select a connected account using xopcAccountId. Never substitute another account."
160
174
  });
161
175
  const action = await describeCliAction(item.config, item.instance.instanceId, connection, parsed.toolName);
176
+ context.authorize?.();
177
+ context.signal?.throwIfAborted();
178
+ if (context.contractRevision && context.contractRevision !== cliContractRevision(connection, action, item.adapter)) throw new CapabilityError("REVISION_CONFLICT", "Selected account or CLI action contract changed. Describe the tool again.");
162
179
  if (args.xopcExportResult !== void 0 && typeof args.xopcExportResult !== "boolean") throw new Error("Invalid export option.");
163
180
  const exportResult = args.xopcExportResult === true;
164
181
  const input = { ...args };
@@ -252,6 +269,8 @@ var CliToolProvider = class {
252
269
  }
253
270
  const acceptedArgumentsHash = argumentsHash();
254
271
  const authorizeCurrent = () => {
272
+ context.authorize?.();
273
+ context.signal?.throwIfAborted();
255
274
  const freshPolicy = getConnectorInstallation(item.policy.id);
256
275
  const freshConnection = getConnectorConnection(connection.id);
257
276
  const currentConfig = this.deps.getConfig();
@@ -273,6 +292,7 @@ var CliToolProvider = class {
273
292
  confirmed: Boolean(approvalId)
274
293
  }).decision !== "allowed") throw new CapabilityError("FORBIDDEN", "Connector permission changed.");
275
294
  if (argumentsHash() !== acceptedArgumentsHash) throw new CapabilityError("REVISION_CONFLICT", "Connector objective changed.");
295
+ if (context.contractRevision && context.contractRevision !== cliContractRevision(freshConnection, action, item.adapter)) throw new CapabilityError("REVISION_CONFLICT", "Selected account or CLI action contract changed.");
276
296
  };
277
297
  const execute = async (executionId) => {
278
298
  let authorized = false;
@@ -2,7 +2,7 @@ import type { AgentToolResult } from '@earendil-works/pi-agent-core';
2
2
  import type { Config } from '../../config/schema.js';
3
3
  import type { ExtensionHookRunner } from '../../extensions/index.js';
4
4
  import { ComposioSessionsAdapter } from '../../connectors/composio-sessions.js';
5
- import type { ExternalToolDescriptor, ExternalToolExecutionContext, ExternalToolProvider, ExternalToolSearchHit } from './types.js';
5
+ import type { ExternalToolDescriptor, ExternalToolDiscoveryContext, ExternalToolExecutionContext, ExternalToolProvider, ExternalToolSearchHit } from './types.js';
6
6
  type CurrentContext = {
7
7
  channel: string;
8
8
  chatId: string;
@@ -21,8 +21,8 @@ export declare class ComposioToolProvider implements ExternalToolProvider {
21
21
  private readonly adapter;
22
22
  private readonly unavailableToolkits;
23
23
  constructor(deps: ComposioToolProviderDeps);
24
- search(query: string): Promise<ExternalToolSearchHit[]>;
25
- describe(toolRef: string): Promise<ExternalToolDescriptor | undefined>;
24
+ search(query: string, context?: ExternalToolDiscoveryContext): Promise<ExternalToolSearchHit[]>;
25
+ describe(toolRef: string, context?: ExternalToolDiscoveryContext): Promise<ExternalToolDescriptor | undefined>;
26
26
  execute(toolRef: string, args: Record<string, unknown>, approvalId: string | undefined, context: ExternalToolExecutionContext): Promise<AgentToolResult<Record<string, unknown>>>;
27
27
  private availableInstallations;
28
28
  private resolve;
@@ -142,8 +142,9 @@ var ComposioToolProvider = class {
142
142
  this.deps = deps;
143
143
  this.adapter = deps.adapter ?? new ComposioSessionsAdapter();
144
144
  }
145
- async search(query) {
145
+ async search(query, context) {
146
146
  const available = this.availableInstallations();
147
+ if (context) available.installations = available.installations.filter((installation) => installation.connectorId === context.connectorId);
147
148
  if (available.installations.length === 0) return [];
148
149
  const settled = await Promise.allSettled(available.installations.map(async (installation) => {
149
150
  const toolkit = toolkitFromInstallation(installation);
@@ -207,9 +208,10 @@ var ComposioToolProvider = class {
207
208
  }
208
209
  return hits;
209
210
  }
210
- async describe(toolRef) {
211
+ async describe(toolRef, context) {
211
212
  const resolved = this.resolve(toolRef);
212
213
  if (!resolved) return void 0;
214
+ if (context && resolved.installation.connectorId !== context.connectorId) return void 0;
213
215
  const toolkit = toolkitFromInstallation(resolved.installation);
214
216
  const action = listConnectorActionMetadata(resolved.installation.connectorId).find((candidate) => candidate.actionId === resolved.actionId);
215
217
  if (!action || !isToolInputSchema(action.inputSchema) || !isComposioActionAllowedByCatalog(action.actionId)) return void 0;
@@ -218,11 +220,12 @@ var ComposioToolProvider = class {
218
220
  const accounts = currentAccountConnections(listConnectorConnections({
219
221
  principalId: available.principalId,
220
222
  connectorId: resolved.installation.connectorId
221
- }).filter((connection) => canAccessConnectorAccount(connection, resolved.installation, available.agentId))).map((connection) => ({
223
+ }).filter((connection) => canAccessConnectorAccount(connection, resolved.installation, available.agentId) && (!context || connection.accountId === context.accountId))).map((connection) => ({
222
224
  accountId: connection.accountId,
223
225
  label: getConnectorAccount(connection.accountId)?.label,
224
226
  identity: connectorIdentitySummary(connection.identity)
225
227
  }));
228
+ if (context && !accounts.length) return void 0;
226
229
  return {
227
230
  toolRef,
228
231
  source: this.source,
@@ -0,0 +1,47 @@
1
+ import type { Config } from '../../config/schema.js';
2
+ import type { ExternalToolService } from './service.js';
3
+ import { type ExternalToolSource, type ExternalToolTurnContext } from './types.js';
4
+ import type { PersonalRequest } from '../../personal-agent/request-repository.js';
5
+ export type ExternalDiscoveryParams = {
6
+ query: string;
7
+ limit?: number;
8
+ sources?: ExternalToolSource[];
9
+ signal?: AbortSignal;
10
+ timeoutMs?: number;
11
+ };
12
+ /** Discover capabilities without activating tools or granting execution permissions. */
13
+ export declare function discoverExternalTools(deps: {
14
+ service: ExternalToolService;
15
+ nativeSources: readonly ExternalToolSource[];
16
+ getContext?: () => ExternalToolTurnContext | null;
17
+ getConfig?: () => Config | undefined;
18
+ getRequest: () => PersonalRequest | undefined;
19
+ }, params: ExternalDiscoveryParams): Promise<{
20
+ tools: any[];
21
+ connectionCandidates: any[];
22
+ installCandidates: any[];
23
+ unavailableSources: any[];
24
+ instruction: string;
25
+ } | {
26
+ selectedAccountId?: string;
27
+ instruction?: string;
28
+ selectedConnections: import("@xopcai/gateway-contract/src/connection-waits.js").ConnectionNeed[];
29
+ waitingObjective: string;
30
+ searchScope?: {
31
+ excludedSources: ("cli" | "extension" | "memory" | "endpoint" | "composio")[];
32
+ instruction: string;
33
+ };
34
+ installCatalogError?: string;
35
+ connectionCandidates: {
36
+ candidateRef: string;
37
+ label: string;
38
+ capabilities: string[];
39
+ }[];
40
+ installCandidates: import("../../capabilities/store-connector.js").StoreConnectorInstallCandidate[];
41
+ tools: import("./types.js").ExternalToolSearchHit[];
42
+ unavailableSources: ExternalToolSource[];
43
+ sourceErrors?: Array<ReturnType<typeof import("./search-error.js").searchFailureDetails> & {
44
+ source: ExternalToolSource;
45
+ }>;
46
+ }>;
47
+ export type ExternalDiscoveryResult = Awaited<ReturnType<typeof discoverExternalTools>>;