@xopcai/xopc 0.0.424 → 0.0.425

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 (234) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/telegram/xopc.extension.json +1 -1
  3. package/dist/gateway/static/root/assets/{activity-store-AI081rxe.js → activity-store-CMw8qBuC.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DupnTbL7.js → agent-avatar-dicebear-JI0YWOIm.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-display-CmEj6Uqy.js → agent-avatar-display-YqmwzOSa.js} +2 -2
  6. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-IEV5yKuu.js → agent-defaults-settings-panel-DlvjxWg6.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agent-plugin-dialog-D_njOuFA.js → agent-plugin-dialog-OBueuQSc.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agents-B_yg9nA3.js → agents-Cp6_5OOQ.js} +3 -3
  9. package/dist/gateway/static/root/assets/{agents-admin-api-CUZUolwG.js → agents-admin-api-DLnmdC1h.js} +1 -1
  10. package/dist/gateway/static/root/assets/{api-bpQ7yR10.js → api-Boc-CVh7.js} +1 -1
  11. package/dist/gateway/static/root/assets/{api-CWWEVThO.js → api-bL7sxjAF.js} +1 -1
  12. package/dist/gateway/static/root/assets/{app-management-settings-panel-C0_hxwgg.js → app-management-settings-panel-jIG5i7KE.js} +1 -1
  13. package/dist/gateway/static/root/assets/{appearance-settings-CLh-qnCC.js → appearance-settings-BnaQW9Xd.js} +1 -1
  14. package/dist/gateway/static/root/assets/{apps-page-Bjtm3Rgi.js → apps-page-C2WKUwtN.js} +1 -1
  15. package/dist/gateway/static/root/assets/{archive-plugin-dGnstkhB.js → archive-plugin-DjboG3kA.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automation-api-MB2xCoFF.js → automation-api-CZqL9l_d.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automation-result-state-DJQflY78.js → automation-result-state-DRd-X_Ai.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automation-task-card-DXgBxVE2.js → automation-task-card-wbnR5i6N.js} +1 -1
  19. package/dist/gateway/static/root/assets/{automations-page-D3O7M2FH.js → automations-page-HyBQIfmn.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automations-workspace-Dk3FVWoX.js → automations-workspace-D6cTOKr7.js} +2 -2
  21. package/dist/gateway/static/root/assets/{binary-plugins-BrVJXmYf.js → binary-plugins-Bg8ARZUH.js} +1 -1
  22. package/dist/gateway/static/root/assets/{block-editor-Dok4sfT3.js → block-editor-DKohqFAW.js} +1 -1
  23. package/dist/gateway/static/root/assets/{browser-automation-inputs-PJbT3CxW.js → browser-automation-inputs-YeibTzw4.js} +1 -1
  24. package/dist/gateway/static/root/assets/{browser-automations-page-kkpX1Q7K.js → browser-automations-page-BWNcbuz2.js} +1 -1
  25. package/dist/gateway/static/root/assets/{browser-control-api-Bg4wnkeA.js → browser-control-api-CDeuxy2x.js} +1 -1
  26. package/dist/gateway/static/root/assets/{browser-settings-page-BrgX_Yb2.js → browser-settings-page-L0nBjfhG.js} +1 -1
  27. package/dist/gateway/static/root/assets/{capabilities-Cs6Jt5Gl.js → capabilities-BcQa8c9n.js} +1 -1
  28. package/dist/gateway/static/root/assets/{capabilities-BMaJizw4.js → capabilities-aT-QjNTl.js} +1 -1
  29. package/dist/gateway/static/root/assets/{capabilities-page-D5hvAG6D.js → capabilities-page-DlpuHdHi.js} +2 -2
  30. package/dist/gateway/static/root/assets/{capabilities-settings-panel-BrEvm4IH.js → capabilities-settings-panel-pvqkN2-2.js} +1 -1
  31. package/dist/gateway/static/root/assets/{channels-1jQgGVc9.js → channels-BUPtawh6.js} +1 -1
  32. package/dist/gateway/static/root/assets/{chat-agents-api-BAOWaUJf.js → chat-agents-api-B8JO6Tcj.js} +1 -1
  33. package/dist/gateway/static/root/assets/{chat-chart-block-DeWrb9XR.js → chat-chart-block-DRtuFfF1.js} +1 -1
  34. package/dist/gateway/static/root/assets/{chat-page-CafkCKOj.js → chat-page-BP0huA-W.js} +31 -31
  35. package/dist/gateway/static/root/assets/{chat-terminal-dock-C544n0-R.js → chat-terminal-dock-Dkqq5FSL.js} +1 -1
  36. package/dist/gateway/static/root/assets/{command-palette-api-D9PXzY8b.js → command-palette-api-qujvNqkK.js} +1 -1
  37. package/dist/gateway/static/root/assets/{composer-payload-handoff-CYXfjpem.js → composer-payload-handoff-CYIhcczq.js} +1 -1
  38. package/dist/gateway/static/root/assets/{computer-settings-page-DJmod8-w.js → computer-settings-page-8q4hRmoo.js} +1 -1
  39. package/dist/gateway/static/root/assets/{connected-providers-grid-b46VH4uy.js → connected-providers-grid-CKZfhHSD.js} +1 -1
  40. package/dist/gateway/static/root/assets/{connector-service-page-BqDbTOTp.js → connector-service-page-DQaTI21R.js} +1 -1
  41. package/dist/gateway/static/root/assets/{connectors-api-CwRuUnH4.js → connectors-api-BjypBp2g.js} +1 -1
  42. package/dist/gateway/static/root/assets/{connectors-page-Mq9Bvoax.js → connectors-page-Lf1ZzaVn.js} +1 -1
  43. package/dist/gateway/static/root/assets/{date-picker-DWaT0IC0.js → date-picker-D_PSHGpe.js} +1 -1
  44. package/dist/gateway/static/root/assets/{dependency-picker-DV9XAt6F.js → dependency-picker-UqKVJ9dv.js} +1 -1
  45. package/dist/gateway/static/root/assets/{desktop-pet-Dffq2NxL.js → desktop-pet-1Et9VqkM.js} +1 -1
  46. package/dist/gateway/static/root/assets/{desktop-pet-narrative-CS8qJpNO.js → desktop-pet-narrative-rADKU0FX.js} +1 -1
  47. package/dist/gateway/static/root/assets/{desktop-pet-settings-CrB1ICax.js → desktop-pet-settings-0fCGgaG7.js} +1 -1
  48. package/dist/gateway/static/root/assets/{dev-view-store-liRgSkcT.js → dev-view-store-TTj_djD8.js} +1 -1
  49. package/dist/gateway/static/root/assets/device-pairing-wizard-ByEL5lvM.js +1 -0
  50. package/dist/gateway/static/root/assets/{directory-picker-path-field-EKqQLQrE.js → directory-picker-path-field-C07a7wYX.js} +1 -1
  51. package/dist/gateway/static/root/assets/{discussion-annotation-sync-D-b1X6ro.js → discussion-annotation-sync-BFqKm9ky.js} +1 -1
  52. package/dist/gateway/static/root/assets/{extension-debug-page-wD97GeG0.js → extension-debug-page-DFaVlqas.js} +1 -1
  53. package/dist/gateway/static/root/assets/{extension-iframe-host-B4Q1CjvW.js → extension-iframe-host-BfzPfXBq.js} +1 -1
  54. package/dist/gateway/static/root/assets/{extension-marketplace-api-ak1_K3u8.js → extension-marketplace-api-ow0K1Y4_.js} +1 -1
  55. package/dist/gateway/static/root/assets/{extension-page-DWFI4iIh.js → extension-page-CrDADV5W.js} +1 -1
  56. package/dist/gateway/static/root/assets/{extension-provider-BZwcaU5Y.js → extension-provider-mnRoa63o.js} +1 -1
  57. package/dist/gateway/static/root/assets/{extension-settings-page-cn4KS42C.js → extension-settings-page-BLl02GFY.js} +1 -1
  58. package/dist/gateway/static/root/assets/{file-preview-surface-c3gDD9sM.js → file-preview-surface-TGdKqhCf.js} +1 -1
  59. package/dist/gateway/static/root/assets/{gateway-config-swr-Dmt5JhZU.js → gateway-config-swr-DfPQIHOL.js} +1 -1
  60. package/dist/gateway/static/root/assets/{gateway-realtime-CJtDXQCt.js → gateway-realtime-67vWg_M2.js} +1 -1
  61. package/dist/gateway/static/root/assets/gateway-realtime-store-Bkt1z-xo.js +1 -0
  62. package/dist/gateway/static/root/assets/{gateway-restart-DInvvT5u.js → gateway-restart-CLtR2wkL.js} +1 -1
  63. package/dist/gateway/static/root/assets/{gateway-settings-BZXdv2FE.js → gateway-settings-COvC3r-l.js} +1 -1
  64. package/dist/gateway/static/root/assets/{gateway-startup-retry-s2KcWekp.js → gateway-startup-retry-9YQllbw2.js} +1 -1
  65. package/dist/gateway/static/root/assets/{global-defaults-api-DtnmDd87.js → global-defaults-api-DYMRjGvd.js} +1 -1
  66. package/dist/gateway/static/root/assets/{home-page-CAVjA5rO.js → home-page-k9LFXcVa.js} +2 -2
  67. package/dist/gateway/static/root/assets/{image-generation-api-RQQokgE9.js → image-generation-api-Dzydfvy8.js} +1 -1
  68. package/dist/gateway/static/root/assets/{imports-page-BP_4TubV.js → imports-page-Csd_YZXZ.js} +1 -1
  69. package/dist/gateway/static/root/assets/index-CpwPxKQ8.css +1 -0
  70. package/dist/gateway/static/root/assets/index-DKW7BeT_.js +11 -0
  71. package/dist/gateway/static/root/assets/{install-connector-dialog-BNzNuXJ8.js → install-connector-dialog-CTQAKTPv.js} +1 -1
  72. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DNRQFepg.js → keyboard-shortcuts-settings-B201bMIa.js} +1 -1
  73. package/dist/gateway/static/root/assets/{local-app-workbench-page-CvY5XxbX.js → local-app-workbench-page-CD_8_gd_.js} +1 -1
  74. package/dist/gateway/static/root/assets/{local-apps-page-DfwEvd8G.js → local-apps-page-BOwqNH0L.js} +1 -1
  75. package/dist/gateway/static/root/assets/{local-session-drafts-CuDdIyxR.js → local-session-drafts-DjmK-SM9.js} +1 -1
  76. package/dist/gateway/static/root/assets/{locale-store-TQcz_Vjt.js → locale-store-Bg_XR36n.js} +1 -1
  77. package/dist/gateway/static/root/assets/{logs-page-eq49F1Rt.js → logs-page-gw3E9CMQ.js} +1 -1
  78. package/dist/gateway/static/root/assets/{management-settings-BaYXDMOJ.js → management-settings-t_Z2mCyw.js} +1 -1
  79. package/dist/gateway/static/root/assets/{markdown-view-D4nII6Zv.js → markdown-view-BUpXJUPv.js} +1 -1
  80. package/dist/gateway/static/root/assets/{media-plugins-MvlAY405.js → media-plugins-_shnaEMY.js} +1 -1
  81. package/dist/gateway/static/root/assets/messages-DG4HLOER.js +3 -0
  82. package/dist/gateway/static/root/assets/{model-selector-nsoNHqif.js → model-selector-a7PIT1Lk.js} +1 -1
  83. package/dist/gateway/static/root/assets/{models-hub-cache-CFIazNIF.js → models-hub-cache-KOJC3z6Q.js} +1 -1
  84. package/dist/gateway/static/root/assets/{note-detail-panel-KPzbHiEW.js → note-detail-panel-BsHYUFgk.js} +3 -3
  85. package/dist/gateway/static/root/assets/note-image-lightbox-B-bEtjhj.js +1 -0
  86. package/dist/gateway/static/root/assets/{notes-api-HVxR5bRD.js → notes-api-BSmikUKI.js} +1 -1
  87. package/dist/gateway/static/root/assets/{notes-page-yShJeR3i.js → notes-page-CA0NRL8O.js} +1 -1
  88. package/dist/gateway/static/root/assets/{oauth-api-CfKjRVnb.js → oauth-api-D2t9HXoC.js} +1 -1
  89. package/dist/gateway/static/root/assets/{oauth-provider-connect-D4uqONWr.js → oauth-provider-connect-DGGGGtcB.js} +1 -1
  90. package/dist/gateway/static/root/assets/{page-context-capture-button-B98nlKTc.js → page-context-capture-button-BH54VO0V.js} +1 -1
  91. package/dist/gateway/static/root/assets/{page-context-draft-HcuK45iu.js → page-context-draft-BS5y8Cx9.js} +1 -1
  92. package/dist/gateway/static/root/assets/page-header-store-BdZnUh-D.js +1 -0
  93. package/dist/gateway/static/root/assets/{personal-avatar-_d72UP_d.js → personal-avatar-D8DtpDTa.js} +1 -1
  94. package/dist/gateway/static/root/assets/{personal-page-B19h_3WQ.js → personal-page-KJezmTKP.js} +1 -1
  95. package/dist/gateway/static/root/assets/{personal-settings-panel-CfwtGyue.js → personal-settings-panel-9uDaNJy5.js} +1 -1
  96. package/dist/gateway/static/root/assets/{phone-dependencies-card-D8bqsDk_.js → phone-dependencies-card-DLYrI0C4.js} +1 -1
  97. package/dist/gateway/static/root/assets/{phone-model-picker-CL_Zn6Xd.js → phone-model-picker-BbA2iI-3.js} +1 -1
  98. package/dist/gateway/static/root/assets/{phone-settings-page-C5Jia8eQ.js → phone-settings-page-Cg_BPss4.js} +1 -1
  99. package/dist/gateway/static/root/assets/{phone-workspace-store-FBfrfkYq.js → phone-workspace-store-CVDk80Bf.js} +1 -1
  100. package/dist/gateway/static/root/assets/{plugin-details-dialog-gAq2KPzK.js → plugin-details-dialog-DgibLkc3.js} +1 -1
  101. package/dist/gateway/static/root/assets/{preference-select-fields-Ck8GAX_y.js → preference-select-fields-BVoN-lAv.js} +1 -1
  102. package/dist/gateway/static/root/assets/{product-automation-feedback-BJ9oTnNs.js → product-automation-feedback-DCo90zGh.js} +1 -1
  103. package/dist/gateway/static/root/assets/{product-open-page-Dw9hUdxP.js → product-open-page-OWl8IAoY.js} +1 -1
  104. package/dist/gateway/static/root/assets/{product-preview-content-C0iPzmSm.js → product-preview-content-Cjas7UNe.js} +1 -1
  105. package/dist/gateway/static/root/assets/{product-preview-modal-COFtHoh6.js → product-preview-modal-CPWRvBI9.js} +2 -2
  106. package/dist/gateway/static/root/assets/{project-detail-page-C5Amjah-.js → project-detail-page-B_HlZux_.js} +1 -1
  107. package/dist/gateway/static/root/assets/{project-understanding-DpL9ADQU.js → project-understanding-Ba02SFzB.js} +1 -1
  108. package/dist/gateway/static/root/assets/{projects-page-gGg9nM2t.js → projects-page-CdfKjp95.js} +1 -1
  109. package/dist/gateway/static/root/assets/{providers-api-D6JJRlJb.js → providers-api-rwQ4LWzr.js} +1 -1
  110. package/dist/gateway/static/root/assets/{recording-upload-DxX1xKyt.js → recording-upload-BSmvRrZQ.js} +1 -1
  111. package/dist/gateway/static/root/assets/{registry-api-BfXzBR1D.js → registry-api-Vy7LfH6E.js} +1 -1
  112. package/dist/gateway/static/root/assets/{remote-access-hub-BZA4StwC.js → remote-access-hub-UXrnpGev.js} +1 -1
  113. package/dist/gateway/static/root/assets/{resource-unavailable-X-SIrZYI.js → resource-unavailable-f9OzSi4W.js} +1 -1
  114. package/dist/gateway/static/root/assets/{route-preload-CWRb0UCt.js → route-preload-BtObM-co.js} +2 -2
  115. package/dist/gateway/static/root/assets/{runtime-tools-api-1DjsPyQ5.js → runtime-tools-api-Bt8t37z5.js} +1 -1
  116. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BnCtyORj.js → runtime-tools-settings-panel-DU4UXnBm.js} +1 -1
  117. package/dist/gateway/static/root/assets/{service-recommendation-list-ChSOfHHh.js → service-recommendation-list-CuYsRcBB.js} +1 -1
  118. package/dist/gateway/static/root/assets/{session-api-rvY5aWw8.js → session-api-DJI9eSgw.js} +1 -1
  119. package/dist/gateway/static/root/assets/session-manager-CtKgACGl.js +23 -0
  120. package/dist/gateway/static/root/assets/{sessions-page-DAS2IUGT.js → sessions-page-BAsKzRHt.js} +1 -1
  121. package/dist/gateway/static/root/assets/settings-advanced-gate-CjAFqg2U.js +1 -0
  122. package/dist/gateway/static/root/assets/{settings-advanced-section-ZKRIuk7h.js → settings-advanced-section-BxUuF_yi.js} +1 -1
  123. package/dist/gateway/static/root/assets/{settings-mode-store-CtJ8pEfm.js → settings-mode-store-CaoRh2gt.js} +1 -1
  124. package/dist/gateway/static/root/assets/{settings-page-header-DuNCn8i-.js → settings-page-header-CyUHrn7c.js} +1 -1
  125. package/dist/gateway/static/root/assets/{settings-page-layout-DeNC8YHJ.js → settings-page-layout-DGVqXrlp.js} +1 -1
  126. package/dist/gateway/static/root/assets/{settings-page-B3pUce-_.js → settings-page-qQ8-6dJ_.js} +1 -1
  127. package/dist/gateway/static/root/assets/{setup-status-panel-Fc3vuz_h.js → setup-status-panel-BpaPb625.js} +1 -1
  128. package/dist/gateway/static/root/assets/{share-link-dialog-B3hwjVAx.js → share-link-dialog-CQJ6Ykm2.js} +1 -1
  129. package/dist/gateway/static/root/assets/{share-preview-page-D_9oFzGS.js → share-preview-page-Cem96FbB.js} +1 -1
  130. package/dist/gateway/static/root/assets/{shares-api-BoUpXmxq.js → shares-api-Dowes16l.js} +1 -1
  131. package/dist/gateway/static/root/assets/{shares-settings-Drfuvepz.js → shares-settings-DZEkZDR0.js} +1 -1
  132. package/dist/gateway/static/root/assets/{skill-api-By2HhJ9O.js → skill-api-D8ZwFEVe.js} +1 -1
  133. package/dist/gateway/static/root/assets/{skill-list-api-TaUCzS8Y.js → skill-list-api-B4gp00-f.js} +1 -1
  134. package/dist/gateway/static/root/assets/{skill-reload-api-CN2fpS1n.js → skill-reload-api-ClmaaDXo.js} +1 -1
  135. package/dist/gateway/static/root/assets/{skills-page-LzGLique.js → skills-page-CV0X9rvG.js} +1 -1
  136. package/dist/gateway/static/root/assets/{system-settings-panel-Cuyg8Ml3.js → system-settings-panel-D095uacX.js} +1 -1
  137. package/dist/gateway/static/root/assets/task-detail-page-CY2C4AM2.js +2 -0
  138. package/dist/gateway/static/root/assets/{task-result-evidence-DDubAU_5.js → task-result-evidence-LUrJlUhb.js} +1 -1
  139. package/dist/gateway/static/root/assets/{terminal-panel-store-BNs75Wdr.js → terminal-panel-store-BqEDB1Vl.js} +1 -1
  140. package/dist/gateway/static/root/assets/{theme-store-DB1ZfBUm.js → theme-store-gAcojLgP.js} +1 -1
  141. package/dist/gateway/static/root/assets/tool-friendly-title-o6sxGVUu.js +1 -0
  142. package/dist/gateway/static/root/assets/{tracing-settings-page-TvtX4Goh.js → tracing-settings-page-B1ZRh-Is.js} +1 -1
  143. package/dist/gateway/static/root/assets/{tunnel-api-COoVEdV9.js → tunnel-api-C9u9E3UQ.js} +1 -1
  144. package/dist/gateway/static/root/assets/{understanding-activity-store-Dr_MLgYe.js → understanding-activity-store-BTrzsR6_.js} +1 -1
  145. package/dist/gateway/static/root/assets/{understanding-refresh-store-DGmLGEqw.js → understanding-refresh-store-5Qava3jh.js} +1 -1
  146. package/dist/gateway/static/root/assets/{usage-page-DP6eb6ed.js → usage-page-DFMLYKAc.js} +1 -1
  147. package/dist/gateway/static/root/assets/{use-autosave-itwjDYUb.js → use-autosave-3O-X7x15.js} +1 -1
  148. package/dist/gateway/static/root/assets/{use-composer-attachments-hjIGlI_2.js → use-composer-attachments-BLc4dBfe.js} +1 -1
  149. package/dist/gateway/static/root/assets/{use-file-preview-expanded-ClLa0g8D.js → use-file-preview-expanded-BaOmTXsT.js} +2 -2
  150. package/dist/gateway/static/root/assets/{use-personal-profile-vhWk6tTU.js → use-personal-profile-MusPgljM.js} +1 -1
  151. package/dist/gateway/static/root/assets/{use-workspace-tree-dfXXjA2-.js → use-workspace-tree-Ck_U2yTw.js} +1 -1
  152. package/dist/gateway/static/root/assets/{user-model-page-D8dswPWd.js → user-model-page-Den5Lg-k.js} +1 -1
  153. package/dist/gateway/static/root/assets/{voice-api-key-field-BIfBySnN.js → voice-api-key-field-C5zJApoa.js} +1 -1
  154. package/dist/gateway/static/root/assets/{voice-config-api-J4o59ICE.js → voice-config-api-DC1bYDt1.js} +1 -1
  155. package/dist/gateway/static/root/assets/{voice-input-shortcut-events-B1mlpUdC.js → voice-input-shortcut-events-0SZjJdVV.js} +1 -1
  156. package/dist/gateway/static/root/assets/{voice-transcribe-api-xxaSOOmq.js → voice-transcribe-api-CxVeANPX.js} +1 -1
  157. package/dist/gateway/static/root/assets/{work-discovery-overlay-DqwT1E5u.js → work-discovery-overlay-DAQ8McVe.js} +1 -1
  158. package/dist/gateway/static/root/assets/{work-discovery-page-BzYQmPLT.js → work-discovery-page-DUQysEyb.js} +1 -1
  159. package/dist/gateway/static/root/assets/{working-directory-picker-modal-D2Zf3GOG.js → working-directory-picker-modal-BO9qdJyZ.js} +1 -1
  160. package/dist/gateway/static/root/assets/{workspace-api-Bnx3eS2M.js → workspace-api-ZrN6yUER.js} +2 -2
  161. package/dist/gateway/static/root/assets/workspace-editor-agent-store-Bo5dwoWP.js +1 -0
  162. package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-D13qHzVr.js → workspace-file-preview-dialog-Yj_kBWSb.js} +1 -1
  163. package/dist/gateway/static/root/assets/{workspace-open-location-menu-Cou-ig1H.js → workspace-open-location-menu-yxT7wajO.js} +1 -1
  164. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-DQGPKxHA.js → xopc-cloud-account-card-IcH9KDzx.js} +1 -1
  165. package/dist/gateway/static/root/index.html +81 -81
  166. package/dist/package.js +1 -1
  167. package/dist/packages/computer-control-contract/src/index.js +33 -3
  168. package/dist/src/agent/embedded/run-turn.js +64 -4
  169. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  170. package/dist/src/agent/tool-manuals/computer.js +6 -0
  171. package/dist/src/agent/tools/computer-use-tool.js +18 -5
  172. package/dist/src/agent/tools/phone-use-tool.js +12 -2
  173. package/dist/src/cli/commands/backup.js +1 -1
  174. package/dist/src/computer/agent-context.d.ts +21 -0
  175. package/dist/src/computer/agent-context.js +107 -0
  176. package/dist/src/computer/broker.d.ts +4 -2
  177. package/dist/src/computer/broker.js +26 -11
  178. package/dist/src/computer/diagnostics.d.ts +60 -6
  179. package/dist/src/computer/diagnostics.js +45 -4
  180. package/dist/src/computer/errors.d.ts +1 -1
  181. package/dist/src/computer/errors.js +4 -0
  182. package/dist/src/computer/evaluation.d.ts +2 -2
  183. package/dist/src/computer/native-timing.d.ts +15 -0
  184. package/dist/src/computer/native-timing.js +49 -0
  185. package/dist/src/computer/program-runtime.d.ts +22 -0
  186. package/dist/src/computer/program-runtime.js +105 -0
  187. package/dist/src/computer/runtime.d.ts +36 -2
  188. package/dist/src/computer/runtime.js +269 -58
  189. package/dist/src/config/schema.d.ts +18 -0
  190. package/dist/src/gateway/global-defaults-admin.js +1 -1
  191. package/dist/src/gateway/service/config-coordinator.d.ts +6 -0
  192. package/dist/src/phone/adb-driver.d.ts +15 -1
  193. package/dist/src/phone/adb-driver.js +104 -41
  194. package/dist/src/phone/autoglm-protocol.d.ts +36 -0
  195. package/dist/src/phone/autoglm-protocol.js +88 -0
  196. package/dist/src/phone/autoglm-upstream-prompt.d.ts +2 -0
  197. package/dist/src/phone/autoglm-upstream-prompt.js +5 -0
  198. package/dist/src/phone/autoglm-upstream.LICENSE +201 -0
  199. package/dist/src/phone/cloud-adb-connection.d.ts +3 -0
  200. package/dist/src/phone/cloud-adb-connection.js +102 -31
  201. package/dist/src/phone/cloud-adb.js +18 -6
  202. package/dist/src/phone/completion-recovery.d.ts +6 -0
  203. package/dist/src/phone/completion-recovery.js +30 -0
  204. package/dist/src/phone/contracts.d.ts +20 -0
  205. package/dist/src/phone/contracts.js +6 -0
  206. package/dist/src/phone/execution-trace.d.ts +51 -0
  207. package/dist/src/phone/execution-trace.js +78 -0
  208. package/dist/src/phone/model-adapter.d.ts +9 -1
  209. package/dist/src/phone/model-adapter.js +132 -61
  210. package/dist/src/phone/model-response.d.ts +5 -0
  211. package/dist/src/phone/model-response.js +118 -0
  212. package/dist/src/phone/runtime.d.ts +4 -0
  213. package/dist/src/phone/runtime.js +146 -16
  214. package/dist/src/phone/text-session.d.ts +14 -0
  215. package/dist/src/phone/text-session.js +39 -0
  216. package/dist/src/phone/ui-dump-binary.d.ts +1 -1
  217. package/dist/src/phone/ui-dump-binary.js +1 -1
  218. package/dist/src/phone/ui-session.d.ts +22 -0
  219. package/dist/src/phone/ui-session.js +191 -0
  220. package/dist/src/process/phone-process.d.ts +1 -0
  221. package/dist/src/process/phone-process.js +11 -1
  222. package/package.json +2 -1
  223. package/dist/gateway/static/root/assets/device-pairing-wizard-1du1hfi5.js +0 -1
  224. package/dist/gateway/static/root/assets/gateway-realtime-store-DcsZyYEa.js +0 -1
  225. package/dist/gateway/static/root/assets/index-BS9mjvSL.js +0 -11
  226. package/dist/gateway/static/root/assets/index-pT-m6l6b.css +0 -1
  227. package/dist/gateway/static/root/assets/messages-DaLmc4W1.js +0 -3
  228. package/dist/gateway/static/root/assets/note-image-lightbox-DticJxxh.js +0 -1
  229. package/dist/gateway/static/root/assets/page-header-store-D6SzJ9Ch.js +0 -1
  230. package/dist/gateway/static/root/assets/session-manager-D2rbRfX3.js +0 -23
  231. package/dist/gateway/static/root/assets/settings-advanced-gate-CYDQybNF.js +0 -1
  232. package/dist/gateway/static/root/assets/task-detail-page-6A9337pK.js +0 -2
  233. package/dist/gateway/static/root/assets/tool-friendly-title-DGmi7rCQ.js +0 -1
  234. package/dist/gateway/static/root/assets/workspace-editor-agent-store-COUVwj-p.js +0 -1
@@ -1,16 +1,18 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
4
- import { COMPUTER_CONTROL_TOOL, ComputerAppSchema, ComputerObservationSchema, ComputerWindowSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
4
+ import { COMPUTER_CONTROL_TOOL, ComputerActionSchema, ComputerAppSchema, ComputerObservationSchema, ComputerTransportTimingSchema, ComputerWindowSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
5
5
  import { ComputerServiceLimitsSchema, computerModelProfile, init_model_policy } from "./model-policy.js";
6
6
  import { getApiKey, init_providers, resolveModel } from "../providers/index.js";
7
7
  import { rejectUnbudgetedCloudTransport } from "../providers/xopc-cloud-credit-budget.js";
8
8
  import { enterComputerControl, leaveComputerControl } from "./control-guard.js";
9
+ import { clearComputerFrames, computerAgentTurn, retainComputerFrame } from "./agent-context.js";
9
10
  import { ComputerDiagnosticSchema, ComputerOperationError, computerDiagnostic, computerRecovery } from "./errors.js";
10
11
  import { createComputerModelAdapter, predictComputerStep, readComputerJson } from "./model-adapter.js";
11
12
  import { groundComputerAction } from "./semantic-actions.js";
12
13
  import { ComputerFlowCapture, ComputerFlowStore, computerFlowHint, computerFlowMetadata } from "./flows.js";
13
14
  import { ComputerNativeTimingSchema, ComputerSessionDiagnostics } from "./diagnostics.js";
15
+ import { executeComputerProgram } from "./program-runtime.js";
14
16
  import { ComputerExpectationSchema, ComputerTaskState, verifyComputerExpectation } from "./task-state.js";
15
17
  import { randomUUID } from "node:crypto";
16
18
  import { z } from "zod";
@@ -36,6 +38,7 @@ const Reply = z.object({
36
38
  grantId: z.string().optional(),
37
39
  observation: ComputerObservationSchema.optional(),
38
40
  nativeMs: ComputerNativeTimingSchema.optional(),
41
+ transportTiming: ComputerTransportTimingSchema.optional(),
39
42
  errorCode: z.string().optional(),
40
43
  diagnostic: ComputerDiagnosticSchema.optional(),
41
44
  apps: z.array(ComputerAppSchema).max(100).optional(),
@@ -72,7 +75,8 @@ const ComputerUseInputSchema = z.discriminatedUnion("op", [
72
75
  appRef: z.string().min(1).max(200),
73
76
  windowRef: z.string().min(1).max(200).optional(),
74
77
  mode: z.enum(["observe", "control"]),
75
- prepare: z.boolean()
78
+ prepare: z.boolean(),
79
+ planner: z.enum(["gui", "agent"]).optional()
76
80
  }).strict(),
77
81
  z.object({
78
82
  op: z.literal("observe"),
@@ -85,6 +89,12 @@ const ComputerUseInputSchema = z.discriminatedUnion("op", [
85
89
  expect: ComputerExpectationSchema.optional(),
86
90
  flowId: z.uuid().optional()
87
91
  }).strict(),
92
+ z.object({
93
+ op: z.literal("exec"),
94
+ code: z.string().max(65536),
95
+ maxActions: z.number().int().min(1).max(12).optional(),
96
+ timeoutMs: z.number().int().min(100).max(12e4).optional()
97
+ }).strict(),
88
98
  z.object({
89
99
  op: z.literal("run"),
90
100
  goal: z.string().min(1).max(4e3),
@@ -113,7 +123,7 @@ var ComputerRuntime = class {
113
123
  this.getTurnEndpoint = getTurnEndpoint;
114
124
  this.flowStore = flowStore;
115
125
  }
116
- async execute(owner, input, signal) {
126
+ async execute(owner, input, signal, execution) {
117
127
  input = ComputerUseInputSchema.parse(input);
118
128
  if (!owner) throw new Error("COMPUTER_CONVERSATION_REQUIRED");
119
129
  if (input.op === "flows" || input.op === "forget_flow") {
@@ -207,7 +217,7 @@ var ComputerRuntime = class {
207
217
  if (diagnostics) this.openingReports.set(owner, diagnostics);
208
218
  try {
209
219
  const operationSignal = signal ? AbortSignal.any([signal, operation.signal]) : operation.signal;
210
- const result = input.op === "run" ? await this.executeGoal(owner, input, operationSignal, diagnostics) : await this.executeInput(owner, input, operationSignal, diagnostics);
220
+ const result = input.op === "exec" ? await this.executeProgram(owner, input, operationSignal, execution) : input.op === "run" ? await this.executeGoal(owner, input, operationSignal, diagnostics) : await this.executeInput(owner, input, operationSignal, diagnostics);
211
221
  if (result.errorCode) diagnostics?.fail(new Error(result.errorCode), diagnostics.phase, result.receipt?.dispatch ?? "notStarted");
212
222
  if (diagnostics && !this.sessions.has(owner)) this.retainReport(owner, diagnostics);
213
223
  return {
@@ -242,6 +252,182 @@ var ComputerRuntime = class {
242
252
  const effective = resolveEffectiveAgentConfigForSession(owner).config;
243
253
  return JSON.stringify([effective.id, effective.workspace]);
244
254
  }
255
+ async executeProgram(owner, input, signal, execution) {
256
+ const s = this.sessions.get(owner);
257
+ if (!s) throw new Error("COMPUTER_OPEN_REQUIRED");
258
+ if (!("planner" in s.binding) || s.binding.planner !== "agent" || !execution) throw new Error("COMPUTER_PLANNER_MISMATCH");
259
+ const turn = computerAgentTurn(owner);
260
+ if (JSON.stringify(turn.binding) !== JSON.stringify(s.binding)) {
261
+ await this.close(owner);
262
+ throw new Error("COMPUTER_AGENT_MODEL_CHANGED");
263
+ }
264
+ const combined = AbortSignal.any([signal, s.controller.signal]);
265
+ let current;
266
+ let actions = 0;
267
+ let imageRef;
268
+ const observe = async (observationSignal = combined) => {
269
+ current?.frame?.fill(0);
270
+ current = await this.send(s, {
271
+ op: "observe",
272
+ sessionId: s.id,
273
+ owner
274
+ }, observationSignal);
275
+ if (current.value.status !== "ready" || current.value.errorCode || !current.value.observation) throw new Error(current.value.errorCode ?? "COMPUTER_NOT_READY");
276
+ const observation = current.value.observation;
277
+ let data;
278
+ try {
279
+ data = JSON.parse(observation.summary);
280
+ } catch {
281
+ data = {
282
+ text: observation.summary,
283
+ elements: [],
284
+ truncated: true
285
+ };
286
+ }
287
+ return {
288
+ snapshotId: observation.id,
289
+ ...data
290
+ };
291
+ };
292
+ const snapshot = (id) => {
293
+ const observation = current?.value.observation;
294
+ if (!observation || observation.id !== id || Date.now() - observation.capturedAt > 5e3) throw new Error("COMPUTER_STALE_OBSERVATION");
295
+ return observation;
296
+ };
297
+ try {
298
+ const result = await executeComputerProgram(input.code, async (method, args, callSignal) => {
299
+ callSignal.throwIfAborted();
300
+ if (!this.getConfig().computer.enabled || Date.now() - s.createdAt >= this.getConfig().computer.maxSessionDurationMs) throw new Error("COMPUTER_SESSION_BUDGET");
301
+ if (JSON.stringify(computerAgentTurn(owner).binding) !== JSON.stringify(s.binding)) throw new Error("COMPUTER_AGENT_MODEL_CHANGED");
302
+ await turn.authorize?.(method, args);
303
+ const hostResult = await (async () => {
304
+ if (method === "observe") {
305
+ const options = z.object({ visual: z.boolean().optional() }).strict().parse(args ?? {});
306
+ const state = await observe(callSignal);
307
+ if (options.visual && current?.frame && current.mimeType) imageRef = retainComputerFrame(owner, execution.toolCallId, current.frame, current.mimeType);
308
+ return state;
309
+ }
310
+ if (method === "emitScreenshot") {
311
+ snapshot(z.object({ snapshotId: z.string() }).strict().parse(args).snapshotId);
312
+ if (!current?.frame || !current.mimeType) throw new Error("COMPUTER_FRAME_REQUIRED");
313
+ imageRef = retainComputerFrame(owner, execution.toolCallId, current.frame, current.mimeType);
314
+ return { imageRef };
315
+ }
316
+ if (method === "resolve") {
317
+ const value = z.object({
318
+ snapshotId: z.string(),
319
+ role: z.string().max(100),
320
+ label: z.string().max(300)
321
+ }).strict().parse(args);
322
+ const data = JSON.parse(snapshot(value.snapshotId).summary);
323
+ if (data.truncated || !Array.isArray(data.elements)) throw new Error("COMPUTER_ELEMENT_REF_REQUIRED");
324
+ const candidates = data.elements.filter((e) => e.role === value.role && e.label === value.label && e.in_web_content !== true);
325
+ if (candidates.length !== 1 || typeof candidates[0].ref !== "string") throw new Error("COMPUTER_ELEMENT_REF_REQUIRED");
326
+ return candidates[0];
327
+ }
328
+ if (method === "verify" || method === "waitFor") {
329
+ const value = z.object({
330
+ expect: ComputerExpectationSchema,
331
+ timeoutMs: z.number().int().min(0).max(5e3).optional()
332
+ }).strict().parse(args);
333
+ const deadline = Date.now() + (method === "waitFor" ? value.timeoutMs ?? 2e3 : 0);
334
+ for (let sample = 0; sample < 20; sample++) {
335
+ const state = await observe(callSignal);
336
+ const verification = verifyComputerExpectation(value.expect, current.value.observation);
337
+ s.diagnostics.verify(verification);
338
+ if (verification?.status === "satisfied" || Date.now() >= deadline || sample === 19) return {
339
+ ...state,
340
+ verification
341
+ };
342
+ await setTimeout(100, void 0, { signal: callSignal });
343
+ }
344
+ }
345
+ if (method === "act") {
346
+ if (s.mode === "observe") throw new Error("COMPUTER_READ_ONLY");
347
+ const value = z.object({
348
+ snapshotId: z.string(),
349
+ action: ComputerActionSchema,
350
+ expect: ComputerExpectationSchema.optional()
351
+ }).strict().parse(args);
352
+ const before = snapshot(value.snapshotId);
353
+ if (++actions > (input.maxActions ?? 6)) throw new Error("COMPUTER_ACTION_BUDGET");
354
+ const action = groundComputerAction(value.action, before);
355
+ s.task.assertProgress(action, before);
356
+ s.pendingContext = {
357
+ goal: "Authorized main-agent UI program",
358
+ before,
359
+ expectation: value.expect
360
+ };
361
+ const envelope = {
362
+ actionId: randomUUID(),
363
+ sessionId: s.id,
364
+ observationId: before.id,
365
+ brokerEpoch: before.brokerEpoch,
366
+ generation: before.generation,
367
+ grantId: current.value.grantId,
368
+ deadlineAt: Date.now() + 12e4,
369
+ action
370
+ };
371
+ const context = {
372
+ observationsReused: 0,
373
+ stabilityObservations: 0,
374
+ actionsRemaining: 1,
375
+ nativeMs: {
376
+ precheckMs: 0,
377
+ inputMs: 0,
378
+ postObserveMs: 0
379
+ }
380
+ };
381
+ clearComputerFrames(owner);
382
+ imageRef = void 0;
383
+ current?.frame?.fill(0);
384
+ current = void 0;
385
+ const authorizationDeadline = Date.now() + 6e4;
386
+ let reply = await this.dispatchAction(s, envelope, callSignal, context);
387
+ while (reply.status === "pending_action") {
388
+ if (Date.now() >= authorizationDeadline) throw new Error("COMPUTER_AUTHORIZATION_TIMEOUT");
389
+ await setTimeout(250, void 0, { signal: callSignal });
390
+ reply = await this.dispatchAction(s, envelope, callSignal, context);
391
+ }
392
+ current = context.observation;
393
+ if (reply.errorCode || reply.receipt?.dispatch !== "completed") throw new Error(reply.errorCode ?? "COMPUTER_NATIVE_ACTION_FAILED");
394
+ let state = {};
395
+ try {
396
+ state = JSON.parse(current?.value.observation?.summary ?? "{}");
397
+ } catch {
398
+ state = { truncated: true };
399
+ }
400
+ return {
401
+ ...state,
402
+ receipt: reply.receipt,
403
+ verification: reply.verification,
404
+ snapshotId: current?.value.observation?.id
405
+ };
406
+ }
407
+ throw new Error("COMPUTER_INVALID_INPUT");
408
+ })();
409
+ return await turn.complete?.(method, hostResult) ?? hostResult;
410
+ }, s.programStore ??= Object.create(null), combined, input.timeoutMs);
411
+ if (result.status === "program_error") {
412
+ await this.close(owner);
413
+ return {
414
+ ...result,
415
+ sessionId: s.id
416
+ };
417
+ }
418
+ return {
419
+ ...result,
420
+ sessionId: s.id,
421
+ ...imageRef ? { imageRef } : {},
422
+ budget: this.budget(s)
423
+ };
424
+ } catch (error) {
425
+ await this.close(owner);
426
+ throw error;
427
+ } finally {
428
+ current?.frame?.fill(0);
429
+ }
430
+ }
245
431
  async executeGoal(owner, input, signal, diagnostics) {
246
432
  const startedAt = Date.now();
247
433
  const phasesBefore = diagnostics?.snapshot().phaseMs;
@@ -310,7 +496,7 @@ var ComputerRuntime = class {
310
496
  } finally {
311
497
  context.observation?.frame?.fill(0);
312
498
  context.observation = void 0;
313
- this.sessions.get(owner)?.adapter.reset?.();
499
+ this.sessions.get(owner)?.adapter?.reset?.();
314
500
  }
315
501
  }
316
502
  async executeInput(owner, input, signal, diagnostics, goalContext) {
@@ -321,7 +507,7 @@ var ComputerRuntime = class {
321
507
  throw new Error("COMPUTER_DISABLED");
322
508
  }
323
509
  let s = this.sessions.get(owner);
324
- if (s?.binding.modelRef.startsWith("xopc-cloud/")) rejectUnbudgetedCloudTransport("computer use");
510
+ if (s && !("planner" in s.binding) && s.binding.modelRef.startsWith("xopc-cloud/")) rejectUnbudgetedCloudTransport("computer use");
325
511
  if (input.op === "discover") {
326
512
  const endpoint = this.resolveEndpoint(owner);
327
513
  const id = randomUUID();
@@ -340,49 +526,66 @@ var ComputerRuntime = class {
340
526
  if (input.op === "open" && !s) {
341
527
  const endpoint = this.resolveEndpoint(owner);
342
528
  const effective = resolveEffectiveAgentConfigForSession(owner).config;
343
- const ref = effective.models.computerUse?.primary;
344
- if (!ref) throw new Error("COMPUTER_MODEL_REQUIRED");
345
- const model = resolveModel(ref);
346
- const profile = computerModelProfile(model);
347
- if (!profile) throw new Error("COMPUTER_MODEL_CAPABILITY_REQUIRED");
348
- const apiKey = await getApiKey(model.provider, {
349
- agentId: effective.id,
350
- appConfig: config
351
- });
352
- if (!apiKey) throw new Error("COMPUTER_MODEL_KEY_MISSING");
353
- let deployment;
529
+ let adapter;
530
+ let binding;
354
531
  let serviceLimits;
355
- if (model.provider === "xopc-cloud") {
356
- rejectUnbudgetedCloudTransport("computer use");
357
- const response = await fetch(`${model.baseUrl.replace(/\/$/, "")}/models`, {
358
- headers: { Authorization: `Bearer ${apiKey}` },
359
- redirect: "error",
360
- signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(15e3)
532
+ if (input.planner === "agent") {
533
+ const turn = computerAgentTurn(owner);
534
+ binding = turn.binding;
535
+ turn.cleanup = async () => {
536
+ await this.close(owner);
537
+ };
538
+ } else {
539
+ const ref = effective.models.computerUse?.primary;
540
+ if (!ref) throw new Error("COMPUTER_MODEL_REQUIRED");
541
+ const model = resolveModel(ref);
542
+ const profile = computerModelProfile(model);
543
+ if (!profile) throw new Error("COMPUTER_MODEL_CAPABILITY_REQUIRED");
544
+ const apiKey = await getApiKey(model.provider, {
545
+ agentId: effective.id,
546
+ appConfig: config
361
547
  });
362
- if (!response.ok) {
363
- await response.body?.cancel();
364
- throw new Error("COMPUTER_DEPLOYMENT_UNAVAILABLE");
548
+ if (!apiKey) throw new Error("COMPUTER_MODEL_KEY_MISSING");
549
+ let deployment;
550
+ if (model.provider === "xopc-cloud") {
551
+ rejectUnbudgetedCloudTransport("computer use");
552
+ const response = await fetch(`${model.baseUrl.replace(/\/$/, "")}/models`, {
553
+ headers: { Authorization: `Bearer ${apiKey}` },
554
+ redirect: "error",
555
+ signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(15e3)
556
+ });
557
+ if (!response.ok) {
558
+ await response.body?.cancel();
559
+ throw new Error("COMPUTER_DEPLOYMENT_UNAVAILABLE");
560
+ }
561
+ const metadata = (await readComputerJson(response, 2 * 1024 * 1024)).data?.find((item) => item.id === model.id)?.xopc;
562
+ const parsedDeployment = z.object({
563
+ revision: z.string().regex(/^[a-f0-9]{64}$/),
564
+ origin: z.string().url().optional()
565
+ }).safeParse(metadata?.computerDeployment);
566
+ const parsedLimits = ComputerServiceLimitsSchema.optional().safeParse(metadata?.computerLimits);
567
+ if (!parsedDeployment.success || !parsedLimits.success) throw new Error("COMPUTER_DEPLOYMENT_UNAVAILABLE");
568
+ deployment = parsedDeployment.data;
569
+ serviceLimits = parsedLimits.data;
365
570
  }
366
- const metadata = (await readComputerJson(response, 2 * 1024 * 1024)).data?.find((item) => item.id === model.id)?.xopc;
367
- const parsedDeployment = z.object({
368
- revision: z.string().regex(/^[a-f0-9]{64}$/),
369
- origin: z.string().url().optional()
370
- }).safeParse(metadata?.computerDeployment);
371
- const parsedLimits = ComputerServiceLimitsSchema.optional().safeParse(metadata?.computerLimits);
372
- if (!parsedDeployment.success || !parsedLimits.success) throw new Error("COMPUTER_DEPLOYMENT_UNAVAILABLE");
373
- deployment = parsedDeployment.data;
374
- serviceLimits = parsedLimits.data;
571
+ adapter = createComputerModelAdapter({
572
+ modelId: model.id,
573
+ baseUrl: model.baseUrl,
574
+ api: model.api,
575
+ apiKey,
576
+ profile,
577
+ headers: model.headers,
578
+ deploymentRevision: deployment?.revision,
579
+ maxOutputTokens: Math.min(2048, model.maxTokens ?? 2048, serviceLimits?.maxOutputTokens ?? 2048)
580
+ });
581
+ binding = {
582
+ modelRef: ref,
583
+ profile,
584
+ origin: new URL(model.baseUrl).origin,
585
+ runtimeLocation: "unknown",
586
+ ...deployment?.origin ? { upstreamOrigin: deployment.origin } : {}
587
+ };
375
588
  }
376
- const adapter = createComputerModelAdapter({
377
- modelId: model.id,
378
- baseUrl: model.baseUrl,
379
- api: model.api,
380
- apiKey,
381
- profile,
382
- headers: model.headers,
383
- deploymentRevision: deployment?.revision,
384
- maxOutputTokens: Math.min(2048, model.maxTokens ?? 2048, serviceLimits?.maxOutputTokens ?? 2048)
385
- });
386
589
  signal.throwIfAborted();
387
590
  s = {
388
591
  id: randomUUID(),
@@ -393,13 +596,7 @@ var ComputerRuntime = class {
393
596
  windowRef: input.windowRef,
394
597
  endpointId: endpoint.endpointId,
395
598
  adapter,
396
- binding: {
397
- modelRef: ref,
398
- profile,
399
- origin: new URL(model.baseUrl).origin,
400
- runtimeLocation: "unknown",
401
- ...deployment?.origin ? { upstreamOrigin: deployment.origin } : {}
402
- },
599
+ binding,
403
600
  createdAt: Date.now(),
404
601
  actions: 0,
405
602
  modelRequests: 0,
@@ -430,7 +627,7 @@ var ComputerRuntime = class {
430
627
  s.diagnostics.phase = "observe";
431
628
  try {
432
629
  if (input.op === "open") {
433
- if (input.appRef !== s.appRef || input.windowRef !== s.windowRef || input.mode !== s.mode || input.prepare !== s.prepare) throw new Error("COMPUTER_CLOSE_BEFORE_TARGET_CHANGE");
630
+ if (input.planner === "agent" !== "planner" in s.binding || input.appRef !== s.appRef || input.windowRef !== s.windowRef || input.mode !== s.mode || input.prepare !== s.prepare) throw new Error("COMPUTER_CLOSE_BEFORE_TARGET_CHANGE");
434
631
  const reply = await this.send(s, {
435
632
  op: "open",
436
633
  sessionId: s.id,
@@ -474,7 +671,7 @@ var ComputerRuntime = class {
474
671
  this.reserveRescue(s, signal);
475
672
  } else if (status.value.status !== "ready") return this.present(status.value);
476
673
  if (input.op === "step") {
477
- if (input.flowId || s.lastFlowId) s.adapter.reset?.();
674
+ if (input.flowId || s.lastFlowId) s.adapter?.reset?.();
478
675
  s.lastFlowId = input.flowId;
479
676
  }
480
677
  while (true) {
@@ -513,7 +710,7 @@ var ComputerRuntime = class {
513
710
  };
514
711
  if (input.op === "step" && input.expect?.kind !== "text" && verification?.status === "satisfied") {
515
712
  s.diagnostics.verify(verification);
516
- s.adapter.reset?.();
713
+ s.adapter?.reset?.();
517
714
  return {
518
715
  status: "condition_satisfied",
519
716
  sessionId: s.id,
@@ -536,6 +733,7 @@ var ComputerRuntime = class {
536
733
  }
537
734
  phase = "model";
538
735
  const predictionInput = input;
736
+ if (!s.adapter) throw new Error("COMPUTER_PLANNER_MISMATCH");
539
737
  const proposal = await s.diagnostics.measure("model", () => predictComputerStep(s.adapter, {
540
738
  goal: predictionInput.op === "observe" ? predictionInput.question : predictionInput.goal,
541
739
  readOnly: predictionInput.op === "observe",
@@ -636,7 +834,7 @@ var ComputerRuntime = class {
636
834
  }
637
835
  s.rescues++;
638
836
  s.diagnostics.count("rescueAttempts");
639
- s.adapter.reset?.();
837
+ s.adapter?.reset?.();
640
838
  }
641
839
  async dispatchAction(s, envelope, signal, goalContext) {
642
840
  if (!s.pending) {
@@ -655,7 +853,7 @@ var ComputerRuntime = class {
655
853
  reply.frame?.fill(0);
656
854
  throw new Error("COMPUTER_RECEIPT_MISMATCH");
657
855
  }
658
- if (goalContext && s.adapter.hasPendingPlan && reply.value.status === "ready" && !reply.value.errorCode && reply.value.receipt?.dispatch === "completed" && reply.value.observation) {
856
+ if (goalContext && s.adapter?.hasPendingPlan && reply.value.status === "ready" && !reply.value.errorCode && reply.value.receipt?.dispatch === "completed" && reply.value.observation) {
659
857
  const receipt = reply.value.receipt;
660
858
  const nativeMs = reply.value.nativeMs;
661
859
  let stable = false;
@@ -686,7 +884,7 @@ var ComputerRuntime = class {
686
884
  if (stable || next.value.status !== "ready" || next.value.errorCode) break;
687
885
  }
688
886
  if (!stable && !reply.value.errorCode) reply.value.errorCode = "COMPUTER_UI_UNSTABLE";
689
- } catch (error) {
887
+ } catch {
690
888
  reply.frame?.fill(0);
691
889
  reply = { value: {
692
890
  ...reply.value,
@@ -800,7 +998,9 @@ var ComputerRuntime = class {
800
998
  });
801
999
  const phase = command.op === "open" ? "open" : command.op === "act" ? "dispatch" : command.op === "observe" ? "observe" : command.op === "release" ? "release" : void 0;
802
1000
  if (command.op === "observe") s.diagnostics?.count("observations");
1001
+ const startedAt = performance.now();
803
1002
  const reply = s.diagnostics && phase ? await s.diagnostics.measure(phase, invoke) : await invoke();
1003
+ const endpointRoundTripMs = performance.now() - startedAt;
804
1004
  const file = reply.content.find((item) => item.type === "file");
805
1005
  let frame;
806
1006
  if (file?.type === "file" && reply.invocationId) frame = this.endpoints.uploads.takeComputerFrame(file.fileId, reply.invocationId);
@@ -809,6 +1009,13 @@ var ComputerRuntime = class {
809
1009
  const json = reply.content.find((item) => item.type === "json");
810
1010
  const value = Reply.parse(json?.type === "json" ? json.value : void 0);
811
1011
  if (value.sessionId !== s.id) throw new Error("COMPUTER_SESSION_MISMATCH");
1012
+ if (command.op === "act" && value.receipt?.actionId === command.envelope.actionId && (value.nativeMs || value.transportTiming)) s.diagnostics?.timing({
1013
+ actionId: value.receipt.actionId,
1014
+ kind: command.envelope.action.kind,
1015
+ nativeMs: value.nativeMs,
1016
+ transport: value.transportTiming,
1017
+ endpointRoundTripMs
1018
+ });
812
1019
  if (file && !frame || value.observation && !frame && !value.errorCode) throw new Error("COMPUTER_FRAME_HANDOFF_FAILED");
813
1020
  if (frame && (!value.observation || !["observe", "act"].includes(command.op))) throw new Error("COMPUTER_UNEXPECTED_FRAME");
814
1021
  return {
@@ -827,14 +1034,18 @@ var ComputerRuntime = class {
827
1034
  leaveComputerControl(s.owner);
828
1035
  s.diagnostics.finish(true);
829
1036
  this.retainReport(s.owner, s.diagnostics);
1037
+ clearComputerFrames(s.owner);
1038
+ s.programStore = void 0;
830
1039
  s.task.clear();
831
1040
  s.pendingContext = void 0;
832
1041
  s.controller.abort();
833
1042
  }
834
1043
  async close(owner) {
835
1044
  this.operations.get(owner)?.abort();
1045
+ clearComputerFrames(owner);
836
1046
  const s = this.sessions.get(owner);
837
1047
  if (!s) return true;
1048
+ s.programStore = void 0;
838
1049
  s.task.clear();
839
1050
  s.pendingContext = void 0;
840
1051
  s.controller.abort();
@@ -1785,6 +1785,24 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
1785
1785
  direct: "direct";
1786
1786
  }>>;
1787
1787
  adbPath: z.ZodOptional<z.ZodString>;
1788
+ autoGlmPrompt: z.ZodDefault<z.ZodEnum<{
1789
+ current: "current";
1790
+ upstream: "upstream";
1791
+ }>>;
1792
+ autoGlmProtocol: z.ZodDefault<z.ZodEnum<{
1793
+ current: "current";
1794
+ upstream: "upstream";
1795
+ }>>;
1796
+ autoGlmSampling: z.ZodDefault<z.ZodEnum<{
1797
+ current: "current";
1798
+ upstream: "upstream";
1799
+ }>>;
1800
+ modelResponseMode: z.ZodDefault<z.ZodEnum<{
1801
+ json: "json";
1802
+ stream: "stream";
1803
+ }>>;
1804
+ batchReadings: z.ZodDefault<z.ZodBoolean>;
1805
+ modelRepetitionGuard: z.ZodDefault<z.ZodBoolean>;
1788
1806
  semanticControls: z.ZodDefault<z.ZodBoolean>;
1789
1807
  hierarchicalPlanning: z.ZodDefault<z.ZodBoolean>;
1790
1808
  maxActionsPerSession: z.ZodDefault<z.ZodNumber>;
@@ -3,8 +3,8 @@ import { init_agent_config } from "../agent-config/index.js";
3
3
  import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
4
4
  import { validatePhoneModelChange } from "../phone/model-adapter.js";
5
5
  import { AgentCatalogService } from "../agent-catalog/service.js";
6
- import { validateComputerModelChange } from "../computer/model-config.js";
7
6
  import { GATEWAY_BUILTIN_TOOLS } from "./agent-builtin-tools.js";
7
+ import { validateComputerModelChange } from "../computer/model-config.js";
8
8
  import { isDeepStrictEqual } from "node:util";
9
9
  //#region src/gateway/global-defaults-admin.ts
10
10
  init_agent_config();
@@ -326,6 +326,12 @@ export declare class GatewayConfigCoordinator {
326
326
  phone: {
327
327
  enabled: boolean;
328
328
  executionMode: "collaborative" | "direct";
329
+ autoGlmPrompt: "current" | "upstream";
330
+ autoGlmProtocol: "current" | "upstream";
331
+ autoGlmSampling: "current" | "upstream";
332
+ modelResponseMode: "json" | "stream";
333
+ batchReadings: boolean;
334
+ modelRepetitionGuard: boolean;
329
335
  semanticControls: boolean;
330
336
  hierarchicalPlanning: boolean;
331
337
  maxActionsPerSession: number;
@@ -1,3 +1,5 @@
1
+ import { PhoneUiSession } from './ui-session.js';
2
+ import { type PhoneTextProvider } from './text-session.js';
1
3
  import { type PhoneApplication, type PhoneTextInputStatus, type DiscoveredPhone, type PhoneAction, type PhoneElement, type PhoneObservation } from './contracts.js';
2
4
  import { runAdb } from './adb-command.js';
3
5
  export { runAdb } from './adb-command.js';
@@ -10,6 +12,7 @@ export interface PhoneDriver {
10
12
  applications?(serial: string, signal: AbortSignal): Promise<PhoneApplication[]>;
11
13
  textInputStatus?(serial: string, signal: AbortSignal): Promise<PhoneTextInputStatus>;
12
14
  observe(serial: string, signal: AbortSignal): Promise<PhoneObservation>;
15
+ releaseInput?(): Promise<void>;
13
16
  capture?(serial: string, signal: AbortSignal): Promise<PhoneObservation>;
14
17
  observeForText?(serial: string, signal: AbortSignal): Promise<PhoneObservation>;
15
18
  execute(serial: string, action: PhoneAction, observation: PhoneObservation, signal: AbortSignal, options?: {
@@ -27,16 +30,27 @@ export declare class AdbPhoneDriver implements PhoneDriver {
27
30
  private readonly readApplications?;
28
31
  private readonly pasteText?;
29
32
  private readonly readHierarchy?;
30
- constructor(adbPath?: string, command?: typeof runAdb, useAndroidCli?: boolean, readApplications?: (signal: AbortSignal) => Promise<PhoneApplication[]>, pasteText?: (text: string, signal: AbortSignal) => Promise<void>, readHierarchy?: (signal: AbortSignal) => Promise<string>);
33
+ private readonly createTextProvider?;
34
+ private readonly createObserver?;
35
+ private observers;
36
+ private openingObservers;
37
+ private observerEpoch;
38
+ private observer;
39
+ private textSessions;
40
+ releaseInput(): Promise<void>;
41
+ private paste;
42
+ constructor(adbPath?: string, command?: typeof runAdb, useAndroidCli?: boolean, readApplications?: (signal: AbortSignal) => Promise<PhoneApplication[]>, pasteText?: (text: string, signal: AbortSignal) => Promise<void>, readHierarchy?: (signal: AbortSignal) => Promise<string>, createTextProvider?: (serial: string, failed: () => void) => Promise<PhoneTextProvider>, createObserver?: (signal: AbortSignal) => Promise<PhoneUiSession>);
31
43
  textInputStatus(serial: string, signal: AbortSignal): Promise<PhoneTextInputStatus>;
32
44
  discover(signal?: AbortSignal): Promise<DiscoveredPhone[]>;
33
45
  applications(serial: string, signal: AbortSignal): Promise<PhoneApplication[]>;
34
46
  foreground(serial: string, signal: AbortSignal): Promise<string>;
35
47
  private shell;
36
48
  observe(serial: string, signal: AbortSignal): Promise<PhoneObservation>;
49
+ private hierarchy;
37
50
  observeForText(serial: string, signal: AbortSignal): Promise<PhoneObservation>;
38
51
  /** Pixel capture avoids accessibility dumps on the human interaction path. */
39
52
  capture(serial: string, signal: AbortSignal): Promise<PhoneObservation>;
53
+ private captureRaw;
40
54
  private confirmText;
41
55
  execute(serial: string, action: PhoneAction, observation: PhoneObservation, signal: AbortSignal, options?: {
42
56
  settleMs: number;