@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
@@ -2,6 +2,7 @@ import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
3
  import { MOCK_PHONE_MODEL, PhoneError, PhoneInputSchema, init_contracts } from "./contracts.js";
4
4
  import { resolveEffectiveAgentConfigForAgent } from "../config/agent-profile.js";
5
+ import { PhoneExecutionTrace, currentPhoneTrace, measurePhonePhase } from "./execution-trace.js";
5
6
  import { phoneAllowsApp, phoneAppAccess } from "./app-access.js";
6
7
  import { nativePhoneOutput, updatePhoneFeedback } from "./task-feedback.js";
7
8
  import { PhoneFrameCache, PhoneOperationBudget } from "./live-state.js";
@@ -17,6 +18,7 @@ import { canDispatchPhoneAction, observationSignature, phoneCompletionSatisfied
17
18
  import { groundPhoneCoordinateAction, resolvePhoneSemanticAction } from "./semantic-controls.js";
18
19
  import { createPhoneModel, isAboutScreen } from "./model-adapter.js";
19
20
  import { PhoneRepository } from "./repository.js";
21
+ import { phoneCompletionGuidance, phoneCompletionRecoveryHint } from "./completion-recovery.js";
20
22
  import { confirmPhoneFocusRecovery, phoneBackRecovery, phoneUnfocusedTypingHint, preparePhoneFocusRecovery } from "./recovery.js";
21
23
  import { createPhoneNumericEntry, nextPhoneNumericEntry } from "./numeric-entry.js";
22
24
  import { createHash, randomUUID } from "node:crypto";
@@ -324,6 +326,8 @@ var PhoneRuntime = class {
324
326
  ].includes(session.report.status)) await this.finishTask(owner);
325
327
  }
326
328
  publish(session) {
329
+ const trace = currentPhoneTrace();
330
+ if (trace) session.report.performance = trace.snapshot();
327
331
  session.report.nextExecutionMode = this.repository.executionMode(session.report.owner) ?? session.context.config.phone.executionMode;
328
332
  if (session.report.feedback && session.segmentUsage) session.report.feedback = updatePhoneFeedback(session.report, {
329
333
  actions: session.report.actions - session.segmentUsage.actions,
@@ -358,6 +362,35 @@ var PhoneRuntime = class {
358
362
  if (!phoneAllowsApp(session.device, observation.package)) throw new PhoneError("PHONE_APP_DENIED", "The foreground application is outside this phone session allowlist. Open an allowed app or reopen with appPackage.");
359
363
  }
360
364
  async execute(owner, raw, context, signal = new AbortController().signal) {
365
+ if (![
366
+ "open",
367
+ "run",
368
+ "step",
369
+ "observe"
370
+ ].includes(raw.op)) return this.executeInput(owner, raw, context, signal);
371
+ const trace = new PhoneExecutionTrace();
372
+ return trace.run(async () => {
373
+ try {
374
+ const result = await this.executeInput(owner, raw, context, signal);
375
+ const session = this.sessions.get(owner);
376
+ if (session?.report.performance?.operationId === trace.id) session.report.performance = trace.snapshot();
377
+ return result && typeof result === "object" && "sessionId" in result ? {
378
+ ...result,
379
+ performance: trace.snapshot()
380
+ } : result;
381
+ } finally {
382
+ trace.finish();
383
+ log.info({
384
+ conversationId: owner,
385
+ op: raw.op,
386
+ modelRef: context.modelRef,
387
+ phase: "execution_timing",
388
+ performance: trace.snapshot()
389
+ }, "Phone execution timing recorded");
390
+ }
391
+ });
392
+ }
393
+ async executeInput(owner, raw, context, signal) {
361
394
  const input = PhoneInputSchema.parse(raw);
362
395
  if (input.op === "request_user") {
363
396
  const session = this.sessions.get(owner);
@@ -664,6 +697,7 @@ var PhoneRuntime = class {
664
697
  const constraints = [...new Set([...continuing ? previous.constraints : [], ...input.constraints ?? []])];
665
698
  if (constraints.length > 12) throw new PhoneError("PHONE_CONSTRAINT_LIMIT", "A phone task supports at most 12 constraints; existing constraints cannot be removed");
666
699
  if (!continuing) {
700
+ session.adapter.reset?.();
667
701
  session.trajectory = [];
668
702
  session.trajectorySummary = [];
669
703
  session.taskActiveMs = 0;
@@ -755,7 +789,10 @@ var PhoneRuntime = class {
755
789
  session.report.stopReason = "completion_changed";
756
790
  }
757
791
  const epoch = session.report.controlEpoch;
792
+ const visualOutputs = session.report.task.requestedOutputs.filter((request) => !request.selector);
793
+ if (visualOutputs.length > 1 && context.config.phone.batchReadings && session.adapter.readFields) await this.readOutputFields(session, observation, visualOutputs, context, combined);
758
794
  for (const request of session.report.task.requestedOutputs) {
795
+ if (visualOutputs.length > 1 && context.config.phone.batchReadings && session.adapter.readFields) break;
759
796
  if (request.selector) continue;
760
797
  await this.readScreen(session, observation, request.description, context, combined);
761
798
  if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") break;
@@ -816,6 +853,7 @@ var PhoneRuntime = class {
816
853
  this.publish(session);
817
854
  throw error;
818
855
  } finally {
856
+ await this.releaseInput(session);
819
857
  session.active = void 0;
820
858
  const elapsed = session.budget?.elapsedMs ?? 0;
821
859
  session.taskActiveMs = (session.taskActiveMs ?? 0) + elapsed;
@@ -912,6 +950,7 @@ var PhoneRuntime = class {
912
950
  if (session.report.status !== "completed") session.report.status = "ready";
913
951
  session.report.stopReason = "task_finished";
914
952
  session.taskPending = false;
953
+ session.adapter.reset?.();
915
954
  session.report.goalPreview = void 0;
916
955
  session.report.facts = void 0;
917
956
  session.report.readings = void 0;
@@ -1131,7 +1170,7 @@ var PhoneRuntime = class {
1131
1170
  afterApp: entry.afterApp
1132
1171
  }).slice(0, 250))].slice(-12)
1133
1172
  }).slice(-1500),
1134
- recoveryHint,
1173
+ recoveryHint: recoveryHint ?? (completion ? phoneCompletionGuidance(completion, observation, changed) : void 0),
1135
1174
  protocolFeedback,
1136
1175
  scenario: input.scenario,
1137
1176
  enhancements,
@@ -1144,7 +1183,11 @@ var PhoneRuntime = class {
1144
1183
  observation = await this.observe(session, signal);
1145
1184
  continue;
1146
1185
  }
1147
- if (!signal.aborted && error instanceof PhoneError && ["PHONE_MODEL_PROTOCOL", "PHONE_MODEL_TRUNCATED"].includes(error.code) && repairs < 1 && session.report.modelRequests < this.modelRequestLimit(session, context)) {
1186
+ if (!signal.aborted && error instanceof PhoneError && [
1187
+ "PHONE_MODEL_PROTOCOL",
1188
+ "PHONE_MODEL_TRUNCATED",
1189
+ "PHONE_MODEL_REPETITION"
1190
+ ].includes(error.code) && repairs < 1 && session.report.modelRequests < this.modelRequestLimit(session, context)) {
1148
1191
  repairs++;
1149
1192
  session.report.diagnostics.protocolRepairs++;
1150
1193
  protocolFeedback = "Your previous output was invalid or truncated. Return exactly one complete action in the specified format with no extra prose.";
@@ -1172,21 +1215,38 @@ var PhoneRuntime = class {
1172
1215
  session.report.diagnostics.completedSubgoals = planning.verifiedSteps;
1173
1216
  }
1174
1217
  if (decision.kind !== "action") {
1175
- if (decision.kind === "complete" && !session.report.mock && (input.completion || input.expectText) && completionCorrections < 1 && session.report.modelRequests < this.modelRequestLimit(session, context)) {
1176
- completionCorrections++;
1177
- session.report.diagnostics.completionCorrections++;
1178
- recoveryHint = `Your completion claim is not verified. These required native UI conditions are not all satisfied: ${JSON.stringify({
1179
- expectText: input.expectText,
1180
- ...input.completion
1181
- })}. Recheck the fresh screen, preserve user constraints, and continue if a safe authorized action can satisfy the goal; otherwise report unfinished.`;
1218
+ if (decision.kind === "complete" && !session.report.mock && completion) {
1182
1219
  observation.frame.fill(0);
1183
1220
  observation = await this.observe(session, signal);
1184
- continue;
1221
+ signal.throwIfAborted();
1222
+ this.guard(session, context);
1223
+ this.allowedScreen(session, observation);
1224
+ if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") continue;
1225
+ const currentChanged = changed || observationSignature(observation) !== previousSignature;
1226
+ if (phoneCompletionSatisfied(completion, observation, currentChanged)) continue;
1227
+ this.recordObservation(session, observation);
1228
+ if (completionCorrections < 2 && session.report.modelRequests < this.modelRequestLimit(session, context)) {
1229
+ completionCorrections++;
1230
+ session.report.diagnostics.completionCorrections++;
1231
+ recoveryHint = phoneCompletionRecoveryHint(completion, observation, currentChanged, completionCorrections);
1232
+ continue;
1233
+ }
1234
+ session.report.status = "paused";
1235
+ session.report.verified = false;
1236
+ session.report.verificationLevel = "none";
1237
+ session.report.controlOwner = "none";
1238
+ session.report.controlEpoch++;
1239
+ session.report.stopReason = "completion_unmet";
1240
+ session.report.errorCode = "PHONE_COMPLETION_UNMET";
1241
+ session.report.message = "The required native UI conditions are still unmet. Inspect the current screen before resuming; no action was generated from the completion conditions.";
1242
+ session.budget?.pause();
1243
+ await session.stream?.revoke();
1244
+ return this.publish(session);
1185
1245
  }
1186
1246
  session.report.message = decision.kind === "needsUser" ? decision.reason : decision.summary;
1187
1247
  if (decision.kind === "complete") {
1188
1248
  this.recordObservation(session, observation);
1189
- await this.readScreen(session, observation, input.goal, context, signal);
1249
+ if (!context.config.phone.batchReadings || !session.adapter.readFields || !session.report.task?.requestedOutputs.some((request) => !request.selector)) await this.readScreen(session, observation, input.goal, context, signal);
1190
1250
  if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") return this.publish(session);
1191
1251
  }
1192
1252
  session.report.status = decision.kind === "needsUser" ? "needs_user" : "completed";
@@ -1411,6 +1471,58 @@ var PhoneRuntime = class {
1411
1471
  modelRequestLimit(session, context) {
1412
1472
  return Math.min(context.config.phone.maxModelRequests, (session.taskStart?.modelRequests ?? 0) + (session.report.task?.budget?.maxModelRequests ?? 120));
1413
1473
  }
1474
+ async readOutputFields(session, observation, fields, context, signal) {
1475
+ const epoch = session.report.controlEpoch;
1476
+ let reason;
1477
+ let values;
1478
+ this.guard(session, context);
1479
+ this.allowedScreen(session, observation);
1480
+ signal.throwIfAborted();
1481
+ if (observation.elements.some((node) => node.password)) reason = "password_field_visible";
1482
+ else if (session.report.modelRequests >= this.modelRequestLimit(session, context)) reason = "model_request_limit";
1483
+ else {
1484
+ session.report.modelRequests++;
1485
+ session.prediction = new AbortController();
1486
+ try {
1487
+ values = await measurePhonePhase("screen_reading", () => session.adapter.readFields({
1488
+ goal: session.report.task.goal,
1489
+ observation,
1490
+ allowedApps: session.device.allowedApps,
1491
+ appAccess: phoneAppAccess(session.device),
1492
+ history: []
1493
+ }, fields, AbortSignal.any([signal, session.prediction.signal])));
1494
+ } catch (error) {
1495
+ signal.throwIfAborted();
1496
+ reason = error instanceof PhoneError ? error.code : "screen_reading_failed";
1497
+ } finally {
1498
+ session.prediction = void 0;
1499
+ }
1500
+ }
1501
+ signal.throwIfAborted();
1502
+ this.guard(session, context);
1503
+ this.allowedScreen(session, observation);
1504
+ if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") return;
1505
+ for (const field of fields) {
1506
+ const raw = values?.[field.key];
1507
+ const value = raw?.trim() ? raw : void 0;
1508
+ const output = session.report.feedback.outputs.find((output) => output.key === field.key);
1509
+ Object.assign(output, {
1510
+ value: value || void 0,
1511
+ source: "screenshot",
1512
+ verification: value ? "unverified" : "unavailable",
1513
+ frameId: observation.frameId,
1514
+ capturedAt: observation.capturedAt,
1515
+ reason: value ? void 0 : reason ?? "screen_unreadable"
1516
+ });
1517
+ if (value) session.report.readings.push({
1518
+ source: "screenshot",
1519
+ verification: "unverified",
1520
+ text: [value],
1521
+ frameId: observation.frameId,
1522
+ capturedAt: observation.capturedAt
1523
+ });
1524
+ }
1525
+ }
1414
1526
  async readScreen(session, observation, goal, context, signal) {
1415
1527
  if (session.report.mock) return;
1416
1528
  const reading = {
@@ -1431,13 +1543,13 @@ var PhoneRuntime = class {
1431
1543
  session.report.modelRequests++;
1432
1544
  session.prediction = new AbortController();
1433
1545
  try {
1434
- const text = await session.adapter.readScreen({
1546
+ const text = await measurePhonePhase("screen_reading", () => session.adapter.readScreen({
1435
1547
  goal,
1436
1548
  observation,
1437
1549
  allowedApps: session.device.allowedApps,
1438
1550
  appAccess: phoneAppAccess(session.device),
1439
1551
  history: []
1440
- }, AbortSignal.any([signal, session.prediction.signal]));
1552
+ }, AbortSignal.any([signal, session.prediction.signal])));
1441
1553
  signal.throwIfAborted();
1442
1554
  this.guard(session, context);
1443
1555
  this.allowedScreen(session, observation);
@@ -1503,16 +1615,18 @@ var PhoneRuntime = class {
1503
1615
  session.trajectorySummary = session.trajectorySummary.slice(-12);
1504
1616
  }
1505
1617
  try {
1506
- await session.driver.execute(session.device.serial, action, observation, signal, settingsPage ? {
1618
+ await measurePhonePhase("dispatch", () => session.driver.execute(session.device.serial, action, observation, signal, settingsPage ? {
1507
1619
  settleMs: session.human ? 0 : 350,
1508
1620
  settingsPage
1509
1621
  } : session.human ? {
1510
1622
  settleMs: 0,
1511
1623
  ...resetTask ? { resetTask: true } : {}
1512
- } : void 0);
1624
+ } : void 0));
1513
1625
  step.dispatch = "completed";
1514
1626
  entry.dispatch = "completed";
1627
+ session.adapter.recordAction?.(action, entry.actor === "human" ? "human" : "completed");
1515
1628
  } catch (error) {
1629
+ session.adapter.reset?.();
1516
1630
  const textFailure = error instanceof PhoneError && ["PHONE_TEXT_INPUT_UNAVAILABLE", "PHONE_TEXT_INPUT_UNCONFIRMED"].includes(error.code);
1517
1631
  if (textFailure && error.code === "PHONE_TEXT_INPUT_UNAVAILABLE") {
1518
1632
  session.report.steps.pop();
@@ -1541,6 +1655,7 @@ var PhoneRuntime = class {
1541
1655
  this.openings.get(owner)?.abort();
1542
1656
  const session = this.sessions.get(owner);
1543
1657
  if (!session) return { status: "closed" };
1658
+ session.adapter.reset?.();
1544
1659
  session.controller.abort();
1545
1660
  session.prediction?.abort();
1546
1661
  session.human = void 0;
@@ -1570,6 +1685,8 @@ var PhoneRuntime = class {
1570
1685
  this.publish(session);
1571
1686
  await session.active?.catch(() => {});
1572
1687
  await session.io.catch(() => {});
1688
+ await this.releaseInput(session);
1689
+ session.adapter.reset?.();
1573
1690
  if (op === "close") this.repository.release(session.device.serial, session.lease);
1574
1691
  if (op !== "pause") await this.locationEnvironment?.releaseOwner(owner);
1575
1692
  if (op === "cancel") {
@@ -1584,6 +1701,12 @@ var PhoneRuntime = class {
1584
1701
  }
1585
1702
  return this.publish(session);
1586
1703
  }
1704
+ async releaseInput(session) {
1705
+ await session.driver.releaseInput?.().catch(() => log.warn({
1706
+ conversationId: session.report.owner,
1707
+ phase: "input_cleanup"
1708
+ }, "Phone input cleanup failed"));
1709
+ }
1587
1710
  async io(session, work) {
1588
1711
  const operation = session.io.catch(() => {}).then(async () => {
1589
1712
  session.ioBusy = true;
@@ -1599,7 +1722,8 @@ var PhoneRuntime = class {
1599
1722
  async observe(session, signal, forText = false) {
1600
1723
  return this.io(session, async () => {
1601
1724
  signal.throwIfAborted();
1602
- const observation = await (forText && session.driver.observeForText ? session.driver.observeForText : session.driver.observe).call(session.driver, session.device.serial, signal);
1725
+ const observe = forText && session.driver.observeForText ? session.driver.observeForText : session.driver.observe;
1726
+ const observation = await measurePhonePhase("observation", () => observe.call(session.driver, session.device.serial, signal));
1603
1727
  if (phoneAllowsApp(session.device, observation.package)) {
1604
1728
  if (Date.now() - session.viewedAt < 3e4 && !terminal.has(session.report.status)) session.frames.set(observation);
1605
1729
  } else session.frames.clear();
@@ -1647,6 +1771,7 @@ var PhoneRuntime = class {
1647
1771
  });
1648
1772
  }
1649
1773
  signal.throwIfAborted();
1774
+ if (waited) session.adapter.reset?.();
1650
1775
  return waited;
1651
1776
  }
1652
1777
  startMaintenance() {
@@ -1790,6 +1915,7 @@ var PhoneRuntime = class {
1790
1915
  this.publish(session);
1791
1916
  try {
1792
1917
  await session.stream?.revoke();
1918
+ await this.releaseInput(session);
1793
1919
  } catch (error) {
1794
1920
  await this.stop(session.report.owner, "cancel");
1795
1921
  throw error;
@@ -1870,6 +1996,7 @@ var PhoneRuntime = class {
1870
1996
  return this.liveStatus(owner, id, context, client);
1871
1997
  }
1872
1998
  if (input.op === "takeover" || input.op === "pause") {
1999
+ session.adapter.reset?.();
1873
2000
  if (input.op === "takeover" && session.report.mode !== "control") throw new PhoneError("PHONE_OBSERVE_ONLY", "This phone session only allows observation", 403);
1874
2001
  session.report.controlOwner = "none";
1875
2002
  session.report.controlEpoch++;
@@ -1880,6 +2007,7 @@ var PhoneRuntime = class {
1880
2007
  this.publish(session);
1881
2008
  await session.stream?.revoke();
1882
2009
  await session.io;
2010
+ await this.releaseInput(session);
1883
2011
  if (terminal.has(session.report.status) || session.report.steps.at(-1)?.dispatch === "unknown") {
1884
2012
  session.report.handoff = "idle";
1885
2013
  this.publish(session);
@@ -1902,6 +2030,7 @@ var PhoneRuntime = class {
1902
2030
  session.report.controlOwner = "none";
1903
2031
  session.report.controlEpoch++;
1904
2032
  await session.stream?.revoke();
2033
+ await this.releaseInput(session);
1905
2034
  session.report.status = "paused";
1906
2035
  session.report.stopReason = "user_paused";
1907
2036
  this.publish(session);
@@ -1914,6 +2043,7 @@ var PhoneRuntime = class {
1914
2043
  session.report.controlOwner = "none";
1915
2044
  this.publish(session);
1916
2045
  await session.stream?.revoke();
2046
+ await this.releaseInput(session);
1917
2047
  let observation;
1918
2048
  try {
1919
2049
  observation = await this.observe(session, session.controller.signal);
@@ -0,0 +1,14 @@
1
+ export interface PhoneTextProvider {
2
+ pasteText(text: string, signal: AbortSignal): Promise<void>;
3
+ close(): Promise<void>;
4
+ }
5
+ /** One operation owns the channel. A failed paste is never replayed on a replacement. */
6
+ export declare class PhoneTextSession {
7
+ private create;
8
+ private provider?;
9
+ private closing;
10
+ private busy;
11
+ constructor(create: (failed: () => void) => Promise<PhoneTextProvider>);
12
+ paste(text: string, signal: AbortSignal): Promise<void>;
13
+ close(): Promise<void>;
14
+ }
@@ -0,0 +1,39 @@
1
+ import { PhoneError, init_contracts } from "./contracts.js";
2
+ //#region src/phone/text-session.ts
3
+ init_contracts();
4
+ /** One operation owns the channel. A failed paste is never replayed on a replacement. */
5
+ var PhoneTextSession = class {
6
+ provider;
7
+ closing = Promise.resolve();
8
+ busy = false;
9
+ constructor(create) {
10
+ this.create = create;
11
+ }
12
+ async paste(text, signal) {
13
+ signal.throwIfAborted();
14
+ if (this.busy) throw new PhoneError("PHONE_INVALID_INPUT", "Concurrent phone text input is not allowed");
15
+ this.busy = true;
16
+ try {
17
+ await this.closing;
18
+ signal.throwIfAborted();
19
+ const provider = this.provider ??= await this.create(() => {
20
+ this.close().catch(() => {});
21
+ });
22
+ signal.throwIfAborted();
23
+ await provider.pasteText(text, signal);
24
+ } catch (error) {
25
+ await this.close().catch(() => {});
26
+ throw error;
27
+ } finally {
28
+ this.busy = false;
29
+ }
30
+ }
31
+ async close() {
32
+ const provider = this.provider;
33
+ this.provider = void 0;
34
+ if (provider) this.closing = this.closing.catch(() => {}).then(() => provider.close());
35
+ await this.closing;
36
+ }
37
+ };
38
+ //#endregion
39
+ export { PhoneTextSession };
@@ -1 +1 @@
1
- export declare const PHONE_UI_DEX = "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Q2hhclNlcXVlbmNlOwARTGphdmEvbGFuZy9DbGFzczsAFUxqYXZhL2xhbmcvRXhjZXB0aW9uOwAhTGphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb247ABNMamF2YS9sYW5nL0ludGVnZXI7ABBMamF2YS9sYW5nL01hdGg7ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwAZTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwASTGphdmEvbGFuZy9TeXN0ZW07ABJMamF2YS9sYW5nL1RocmVhZDsAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AB5Mb3JnL3htbHB1bGwvdjEvWG1sU2VyaWFsaXplcjsAHE5vIGFjdGl2ZSBhY2Nlc3NpYmlsaXR5IHJvb3QAEFBob25lVWlEdW1wLmphdmEABFRZUEUABVVURi04AAFWAAJWSgACVkwAA1ZMTAAEVkxMSQABWgABWwASW0xqYXZhL2xhbmcvQ2xhc3M7ABNbTGphdmEvbGFuZy9PYmplY3Q7ABNbTGphdmEvbGFuZy9TdHJpbmc7AAFdAAJdWwAjYW5kcm9pZC5hcHAuSVVpQXV0b21hdGlvbkNvbm5lY3Rpb24AImFuZHJvaWQuYXBwLlVpQXV0b21hdGlvbkNvbm5lY3Rpb24ABmFwcGVuZAAJYXR0cmlidXRlAAZib3R0b20ABmJvdW5kcwAFY2xhc3MACWNsaWNrYWJsZQAHY29ubmVjdAAMY29udGVudC1kZXNjAApkaXNjb25uZWN0AARkdW1wAAtlbmREb2N1bWVudAAGZW5kVGFnAAVmbGFncwAHZm9jdXNlZAAHZm9yTmFtZQARZ2V0Qm91bmRzSW5TY3JlZW4ACGdldENoaWxkAA1nZXRDaGlsZENvdW50AAxnZXRDbGFzc05hbWUAFWdldENvbnRlbnREZXNjcmlwdGlvbgAWZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcgAJZ2V0TG9vcGVyAAlnZXRNZXRob2QADmdldFBhY2thZ2VOYW1lABVnZXRSb290SW5BY3RpdmVXaW5kb3cADmdldFNlcnZpY2VJbmZvAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQAGaW52b2tlAAtpc0NsaWNrYWJsZQAJaXNGb2N1c2VkAAppc1Bhc3N3b3JkAA9pc1Zpc2libGVUb1VzZXIABGxlZnQABmxlbmd0aAAEbWFpbgADbWF4AANtaW4AC25ld0luc3RhbmNlAA1uZXdTZXJpYWxpemVyAARub2RlAAVub2RlcwADb3V0AAdwYWNrYWdlAAhwYXNzd29yZAAHcHJpbnRsbgAKcXVpdFNhZmVseQAHcmVjeWNsZQALcmVzb3VyY2UtaWQABXJpZ2h0AAlzZXRPdXRwdXQADnNldFNlcnZpY2VJbmZvAAVzbGVlcAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABHRleHQACHRvU3RyaW5nAAN0b3AABXZhbHVlAAd2YWx1ZU9mABZ4b3BjLXBob25lLW9ic2VydmF0aW9uAJ0Bfn5EOHsiYmFja2VuZCI6ImRleCIsImNvbXBpbGF0aW9uLW1vZGUiOiJkZWJ1ZyIsImhhcy1jaGVja3N1bXMiOmZhbHNlLCJtaW4tYXBpIjoyNCwic2hhLTEiOiJhN2FkMThhNzA0NjBiNzk5ZDA0ODJlNDk3YzEwOWE3NWJmN2Y5MWRlIiwidmVyc2lvbiI6IjguMTAuOS1kZXYifQACCgF4HAEYEQEABAAACgCBgATMDQEK5A0BCcQSAQqMDQAAAQAAAKYTAAAAAAAAAAAAAAIAAAAAAAAAAQAAAMgTAAACAAAAyBMAABAAAAAAAAAAAQAAAAAAAAABAAAAfAAAAHAAAAACAAAAIgAAAGACAAADAAAAIQAAAOgCAAAEAAAACAAAAHQEAAAFAAAANwAAALQEAAAGAAAAAQAAAGwGAAABIAAABAAAAIwGAAADIAAABAAAAFILAAABEAAAEgAAALwLAAACIAAAfAAAAFIMAAAEIAAAAQAAAKYTAAAAIAAAAQAAAK4TAAADEAAAAQAAAMgTAAAGIAAAAQAAANATAAAAEAAAAQAAAPATAAA=";
1
+ export declare const PHONE_UI_DEX = "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JwAAAAIAAAAbACkAAQAAACkAAAABAAAABAAAAAIAAAAUAAAAAQAAABsAAAABAAAAKAAAAAIAAAAcACgAAgAAABwAAAACAAAAHAAbAAIAAAAcACcAAgAAABwAHAADAAAAHAAcABwAAAABAAAAAQAAAAEAAAADAAAAAgAAAAQAJAABAAAABQAAAAIAAAANABwAAQAAABAAAAABAAAAEgAAAAIAAAAcABMAAgAAABwAFAADAAAAJQAKAAAAAAABAAAAKgAAAAIAAAAAAAYAAAABLAAKLS1yZXNpZGVudAAGPGluaXQ+ACVBQ1RJT05fQVJHVU1FTlRfU0VUX1RFWFRfQ0hBUlNFUVVFTkNFAAFJAANJSUkAAklMAAFKAAFMAAJMSQADTElJAAJMTAADTExJAANMTEwABExMTEwABExMTFoAA0xMWgACTFoAG0xhaS94b3BjL3Bob25lL1Bob25lVWlEdW1wOwA3TGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvOwAaTGFuZHJvaWQvYXBwL1VpQXV0b21hdGlvbjsAF0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7ABNMYW5kcm9pZC9vcy9CdW5kbGU7ABpMYW5kcm9pZC9vcy9IYW5kbGVyVGhyZWFkOwATTGFuZHJvaWQvb3MvTG9vcGVyOwASTGFuZHJvaWQvdXRpbC9YbWw7ADJMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOwAaTGRhbHZpay9hbm5vdGF0aW9uL1Rocm93czsAGExqYXZhL2lvL0J1ZmZlcmVkUmVhZGVyOwAVTGphdmEvaW8vSW5wdXRTdHJlYW07ABtMamF2YS9pby9JbnB1dFN0cmVhbVJlYWRlcjsAFUxqYXZhL2lvL1ByaW50U3RyZWFtOwAQTGphdmEvaW8vUmVhZGVyOwAWTGphdmEvaW8vU3RyaW5nV3JpdGVyOwAQTGphdmEvaW8vV3JpdGVyOwATTGphdmEvbGFuZy9Cb29sZWFuOwAYTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7ABFMamF2YS9sYW5nL0NsYXNzOwAVTGphdmEvbGFuZy9FeGNlcHRpb247ACFMamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsAE0xqYXZhL2xhbmcvSW50ZWdlcjsAEExqYXZhL2xhbmcvTWF0aDsAIUxqYXZhL2xhbmcvTm9TdWNoTWV0aG9kRXhjZXB0aW9uOwASTGphdmEvbGFuZy9PYmplY3Q7ABJMamF2YS9sYW5nL1N0cmluZzsAGUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsAEkxqYXZhL2xhbmcvU3lzdGVtOwASTGphdmEvbGFuZy9UaHJlYWQ7AB9MamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3I7ABpMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwASTGphdmEvdXRpbC9BcnJheXM7ABBMamF2YS91dGlsL0xpc3Q7ABVMb3JnL2pzb24vSlNPTk9iamVjdDsAHkxvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyOwAQUGhvbmVVaUR1bXAuamF2YQAEVFlQRQAFVVRGLTgAAVYAAlZKAAJWTAADVkxMAARWTExJAAFaAANaSUwAAlpMAAFbABJbTGphdmEvbGFuZy9DbGFzczsAE1tMamF2YS9sYW5nL09iamVjdDsAE1tMamF2YS9sYW5nL1N0cmluZzsAAV0AAl1bACNhbmRyb2lkLmFwcC5JVWlBdXRvbWF0aW9uQ29ubmVjdGlvbgAiYW5kcm9pZC5hcHAuVWlBdXRvbWF0aW9uQ29ubmVjdGlvbgA5YW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ2xpZW50AANhcHAABmFwcGVuZAAGYXNMaXN0AAlhdHRyaWJ1dGUABmJlZm9yZQAGYm90dG9tAAZib3VuZHMABWNsYXNzAApjbGVhckNhY2hlAAljbGlja2FibGUADGNvbmZpcm1hdGlvbgAHY29ubmVjdAAIY29udGFpbnMADGNvbnRlbnQtZGVzYwAKZGlzY29ubmVjdAAEZHVtcAAGZWRpdG9yAAtlbmREb2N1bWVudAAGZW5kVGFnAAZlcXVhbHMABWVycm9yAAlmaW5kRm9jdXMABWZsYWdzAAVmbHVzaAAFZm9jdXMAB2ZvY3VzZWQAB2Zvck5hbWUAEWdldEJvdW5kc0luU2NyZWVuAAhnZXRDaGlsZAANZ2V0Q2hpbGRDb3VudAAMZ2V0Q2xhc3NOYW1lABVnZXRDb250ZW50RGVzY3JpcHRpb24AFmdldERlY2xhcmVkQ29uc3RydWN0b3IAC2dldEluc3RhbmNlAAZnZXRJbnQACWdldExvb3BlcgANZ2V0TWFpbkxvb3BlcgAKZ2V0TWVzc2FnZQAJZ2V0TWV0aG9kAA5nZXRQYWNrYWdlTmFtZQAVZ2V0Um9vdEluQWN0aXZlV2luZG93AA5nZXRTZXJ2aWNlSW5mbwAJZ2V0U3RyaW5nAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQACaWQACGlkZW50aXR5AAJpbgAGaW52b2tlAAtpc0NsaWNrYWJsZQAKaXNFZGl0YWJsZQAJaXNFbmFibGVkAAlpc0ZvY3VzZWQACmlzUGFzc3dvcmQAD2lzVmlzaWJsZVRvVXNlcgAEbGVmdAAGbGVuZ3RoAARtYWluAANtYXgAA21pbgALbmV3SW5zdGFuY2UADW5ld1NlcmlhbGl6ZXIAB25vLXJvb3QABG5vZGUABW5vZGVzAAJvawACb3AAA291dAAHcGFja2FnZQAIcGFzc3dvcmQADXBlcmZvcm1BY3Rpb24AEXByZXBhcmVNYWluTG9vcGVyAAdwcmludGxuAANwdXQAD3B1dENoYXJTZXF1ZW5jZQAKcXVpdFNhZmVseQAIcmVhZExpbmUAB3JlY3ljbGUAC3Jlc291cmNlLWlkAApyZXNvdXJjZUlkAAVyaWdodAAJc2V0T3V0cHV0AA5zZXRTZXJ2aWNlSW5mbwAHc2V0VGV4dAAFc2xlZXAACHNuYXBzaG90AA5zdGFibGVTbmFwc2hvdAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABnRhcmdldAAEdGV4dAAIdG9TdHJpbmcAA3RvcAALdW5jb25maXJtZWQAC3Vuc3VwcG9ydGVkAAV2YWx1ZQAHdmFsdWVPZgAFd3JpdGUAA3htbAAWeG9wYy1waG9uZS1vYnNlcnZhdGlvbgCdAX5+RDh7ImJhY2tlbmQiOiJkZXgiLCJjb21waWxhdGlvbi1tb2RlIjoiZGVidWciLCJoYXMtY2hlY2tzdW1zIjpmYWxzZSwibWluLWFwaSI6MjQsInNoYS0xIjoiYTdhZDE4YTcwNDYwYjc5OWQwNDgyZTQ5N2MxMDlhNzViZjdmOTFkZSIsInZlcnNpb24iOiI4LjEwLjktZGV2In0AAgsBrQEcARgWAQAJAAAKAIGABIAZAQqYGQEKnBoBCswSAQn8HgEKjCUBCsAWAQr0FwEKwBgAAQAAAPIfAAAAAAAAAAAAAAcAAAAAAAAAAQAAACggAAACAAAAKCAAAAMAAAAoIAAABAAAACggAAAFAAAAKCAAAAYAAAAoIAAABwAAACggAAAQAAAAAAAAAAEAAAAAAAAAAQAAALMAAABwAAAAAgAAACsAAAA8AwAAAwAAADEAAADoAwAABAAAAAkAAAA0BgAABQAAAFYAAAB8BgAABgAAAAEAAAAsCQAAASAAAAkAAABMCQAAAyAAAAkAAAD6EwAAARAAAB0AAADwFAAAAiAAALMAAADkFQAABCAAAAEAAADyHwAAACAAAAEAAAD7HwAAAxAAAAEAAAAoIAAABiAAAAEAAAAwIAAAABAAAAEAAAB4IAAA";
@@ -1,4 +1,4 @@
1
1
  //#region src/phone/ui-dump-binary.ts
2
- const PHONE_UI_DEX = "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Q2hhclNlcXVlbmNlOwARTGphdmEvbGFuZy9DbGFzczsAFUxqYXZhL2xhbmcvRXhjZXB0aW9uOwAhTGphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb247ABNMamF2YS9sYW5nL0ludGVnZXI7ABBMamF2YS9sYW5nL01hdGg7ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwAZTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwASTGphdmEvbGFuZy9TeXN0ZW07ABJMamF2YS9sYW5nL1RocmVhZDsAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AB5Mb3JnL3htbHB1bGwvdjEvWG1sU2VyaWFsaXplcjsAHE5vIGFjdGl2ZSBhY2Nlc3NpYmlsaXR5IHJvb3QAEFBob25lVWlEdW1wLmphdmEABFRZUEUABVVURi04AAFWAAJWSgACVkwAA1ZMTAAEVkxMSQABWgABWwASW0xqYXZhL2xhbmcvQ2xhc3M7ABNbTGphdmEvbGFuZy9PYmplY3Q7ABNbTGphdmEvbGFuZy9TdHJpbmc7AAFdAAJdWwAjYW5kcm9pZC5hcHAuSVVpQXV0b21hdGlvbkNvbm5lY3Rpb24AImFuZHJvaWQuYXBwLlVpQXV0b21hdGlvbkNvbm5lY3Rpb24ABmFwcGVuZAAJYXR0cmlidXRlAAZib3R0b20ABmJvdW5kcwAFY2xhc3MACWNsaWNrYWJsZQAHY29ubmVjdAAMY29udGVudC1kZXNjAApkaXNjb25uZWN0AARkdW1wAAtlbmREb2N1bWVudAAGZW5kVGFnAAVmbGFncwAHZm9jdXNlZAAHZm9yTmFtZQARZ2V0Qm91bmRzSW5TY3JlZW4ACGdldENoaWxkAA1nZXRDaGlsZENvdW50AAxnZXRDbGFzc05hbWUAFWdldENvbnRlbnREZXNjcmlwdGlvbgAWZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcgAJZ2V0TG9vcGVyAAlnZXRNZXRob2QADmdldFBhY2thZ2VOYW1lABVnZXRSb290SW5BY3RpdmVXaW5kb3cADmdldFNlcnZpY2VJbmZvAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQAGaW52b2tlAAtpc0NsaWNrYWJsZQAJaXNGb2N1c2VkAAppc1Bhc3N3b3JkAA9pc1Zpc2libGVUb1VzZXIABGxlZnQABmxlbmd0aAAEbWFpbgADbWF4AANtaW4AC25ld0luc3RhbmNlAA1uZXdTZXJpYWxpemVyAARub2RlAAVub2RlcwADb3V0AAdwYWNrYWdlAAhwYXNzd29yZAAHcHJpbnRsbgAKcXVpdFNhZmVseQAHcmVjeWNsZQALcmVzb3VyY2UtaWQABXJpZ2h0AAlzZXRPdXRwdXQADnNldFNlcnZpY2VJbmZvAAVzbGVlcAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABHRleHQACHRvU3RyaW5nAAN0b3AABXZhbHVlAAd2YWx1ZU9mABZ4b3BjLXBob25lLW9ic2VydmF0aW9uAJ0Bfn5EOHsiYmFja2VuZCI6ImRleCIsImNvbXBpbGF0aW9uLW1vZGUiOiJkZWJ1ZyIsImhhcy1jaGVja3N1bXMiOmZhbHNlLCJtaW4tYXBpIjoyNCwic2hhLTEiOiJhN2FkMThhNzA0NjBiNzk5ZDA0ODJlNDk3YzEwOWE3NWJmN2Y5MWRlIiwidmVyc2lvbiI6IjguMTAuOS1kZXYifQACCgF4HAEYEQEABAAACgCBgATMDQEK5A0BCcQSAQqMDQAAAQAAAKYTAAAAAAAAAAAAAAIAAAAAAAAAAQAAAMgTAAACAAAAyBMAABAAAAAAAAAAAQAAAAAAAAABAAAAfAAAAHAAAAACAAAAIgAAAGACAAADAAAAIQAAAOgCAAAEAAAACAAAAHQEAAAFAAAANwAAALQEAAAGAAAAAQAAAGwGAAABIAAABAAAAIwGAAADIAAABAAAAFILAAABEAAAEgAAALwLAAACIAAAfAAAAFIMAAAEIAAAAQAAAKYTAAAAIAAAAQAAAK4TAAADEAAAAQAAAMgTAAAGIAAAAQAAANATAAAAEAAAAQAAAPATAAA=";
2
+ const PHONE_UI_DEX = "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JwAAAAIAAAAbACkAAQAAACkAAAABAAAABAAAAAIAAAAUAAAAAQAAABsAAAABAAAAKAAAAAIAAAAcACgAAgAAABwAAAACAAAAHAAbAAIAAAAcACcAAgAAABwAHAADAAAAHAAcABwAAAABAAAAAQAAAAEAAAADAAAAAgAAAAQAJAABAAAABQAAAAIAAAANABwAAQAAABAAAAABAAAAEgAAAAIAAAAcABMAAgAAABwAFAADAAAAJQAKAAAAAAABAAAAKgAAAAIAAAAAAAYAAAABLAAKLS1yZXNpZGVudAAGPGluaXQ+ACVBQ1RJT05fQVJHVU1FTlRfU0VUX1RFWFRfQ0hBUlNFUVVFTkNFAAFJAANJSUkAAklMAAFKAAFMAAJMSQADTElJAAJMTAADTExJAANMTEwABExMTEwABExMTFoAA0xMWgACTFoAG0xhaS94b3BjL3Bob25lL1Bob25lVWlEdW1wOwA3TGFuZHJvaWQvYWNjZXNzaWJpbGl0eXNlcnZpY2UvQWNjZXNzaWJpbGl0eVNlcnZpY2VJbmZvOwAaTGFuZHJvaWQvYXBwL1VpQXV0b21hdGlvbjsAF0xhbmRyb2lkL2dyYXBoaWNzL1JlY3Q7ABNMYW5kcm9pZC9vcy9CdW5kbGU7ABpMYW5kcm9pZC9vcy9IYW5kbGVyVGhyZWFkOwATTGFuZHJvaWQvb3MvTG9vcGVyOwASTGFuZHJvaWQvdXRpbC9YbWw7ADJMYW5kcm9pZC92aWV3L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU5vZGVJbmZvOwAaTGRhbHZpay9hbm5vdGF0aW9uL1Rocm93czsAGExqYXZhL2lvL0J1ZmZlcmVkUmVhZGVyOwAVTGphdmEvaW8vSW5wdXRTdHJlYW07ABtMamF2YS9pby9JbnB1dFN0cmVhbVJlYWRlcjsAFUxqYXZhL2lvL1ByaW50U3RyZWFtOwAQTGphdmEvaW8vUmVhZGVyOwAWTGphdmEvaW8vU3RyaW5nV3JpdGVyOwAQTGphdmEvaW8vV3JpdGVyOwATTGphdmEvbGFuZy9Cb29sZWFuOwAYTGphdmEvbGFuZy9DaGFyU2VxdWVuY2U7ABFMamF2YS9sYW5nL0NsYXNzOwAVTGphdmEvbGFuZy9FeGNlcHRpb247ACFMamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbjsAE0xqYXZhL2xhbmcvSW50ZWdlcjsAEExqYXZhL2xhbmcvTWF0aDsAIUxqYXZhL2xhbmcvTm9TdWNoTWV0aG9kRXhjZXB0aW9uOwASTGphdmEvbGFuZy9PYmplY3Q7ABJMamF2YS9sYW5nL1N0cmluZzsAGUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsAEkxqYXZhL2xhbmcvU3lzdGVtOwASTGphdmEvbGFuZy9UaHJlYWQ7AB9MamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3I7ABpMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwASTGphdmEvdXRpbC9BcnJheXM7ABBMamF2YS91dGlsL0xpc3Q7ABVMb3JnL2pzb24vSlNPTk9iamVjdDsAHkxvcmcveG1scHVsbC92MS9YbWxTZXJpYWxpemVyOwAQUGhvbmVVaUR1bXAuamF2YQAEVFlQRQAFVVRGLTgAAVYAAlZKAAJWTAADVkxMAARWTExJAAFaAANaSUwAAlpMAAFbABJbTGphdmEvbGFuZy9DbGFzczsAE1tMamF2YS9sYW5nL09iamVjdDsAE1tMamF2YS9sYW5nL1N0cmluZzsAAV0AAl1bACNhbmRyb2lkLmFwcC5JVWlBdXRvbWF0aW9uQ29ubmVjdGlvbgAiYW5kcm9pZC5hcHAuVWlBdXRvbWF0aW9uQ29ubmVjdGlvbgA5YW5kcm9pZC52aWV3LmFjY2Vzc2liaWxpdHkuQWNjZXNzaWJpbGl0eUludGVyYWN0aW9uQ2xpZW50AANhcHAABmFwcGVuZAAGYXNMaXN0AAlhdHRyaWJ1dGUABmJlZm9yZQAGYm90dG9tAAZib3VuZHMABWNsYXNzAApjbGVhckNhY2hlAAljbGlja2FibGUADGNvbmZpcm1hdGlvbgAHY29ubmVjdAAIY29udGFpbnMADGNvbnRlbnQtZGVzYwAKZGlzY29ubmVjdAAEZHVtcAAGZWRpdG9yAAtlbmREb2N1bWVudAAGZW5kVGFnAAZlcXVhbHMABWVycm9yAAlmaW5kRm9jdXMABWZsYWdzAAVmbHVzaAAFZm9jdXMAB2ZvY3VzZWQAB2Zvck5hbWUAEWdldEJvdW5kc0luU2NyZWVuAAhnZXRDaGlsZAANZ2V0Q2hpbGRDb3VudAAMZ2V0Q2xhc3NOYW1lABVnZXRDb250ZW50RGVzY3JpcHRpb24AFmdldERlY2xhcmVkQ29uc3RydWN0b3IAC2dldEluc3RhbmNlAAZnZXRJbnQACWdldExvb3BlcgANZ2V0TWFpbkxvb3BlcgAKZ2V0TWVzc2FnZQAJZ2V0TWV0aG9kAA5nZXRQYWNrYWdlTmFtZQAVZ2V0Um9vdEluQWN0aXZlV2luZG93AA5nZXRTZXJ2aWNlSW5mbwAJZ2V0U3RyaW5nAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQACaWQACGlkZW50aXR5AAJpbgAGaW52b2tlAAtpc0NsaWNrYWJsZQAKaXNFZGl0YWJsZQAJaXNFbmFibGVkAAlpc0ZvY3VzZWQACmlzUGFzc3dvcmQAD2lzVmlzaWJsZVRvVXNlcgAEbGVmdAAGbGVuZ3RoAARtYWluAANtYXgAA21pbgALbmV3SW5zdGFuY2UADW5ld1NlcmlhbGl6ZXIAB25vLXJvb3QABG5vZGUABW5vZGVzAAJvawACb3AAA291dAAHcGFja2FnZQAIcGFzc3dvcmQADXBlcmZvcm1BY3Rpb24AEXByZXBhcmVNYWluTG9vcGVyAAdwcmludGxuAANwdXQAD3B1dENoYXJTZXF1ZW5jZQAKcXVpdFNhZmVseQAIcmVhZExpbmUAB3JlY3ljbGUAC3Jlc291cmNlLWlkAApyZXNvdXJjZUlkAAVyaWdodAAJc2V0T3V0cHV0AA5zZXRTZXJ2aWNlSW5mbwAHc2V0VGV4dAAFc2xlZXAACHNuYXBzaG90AA5zdGFibGVTbmFwc2hvdAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABnRhcmdldAAEdGV4dAAIdG9TdHJpbmcAA3RvcAALdW5jb25maXJtZWQAC3Vuc3VwcG9ydGVkAAV2YWx1ZQAHdmFsdWVPZgAFd3JpdGUAA3htbAAWeG9wYy1waG9uZS1vYnNlcnZhdGlvbgCdAX5+RDh7ImJhY2tlbmQiOiJkZXgiLCJjb21waWxhdGlvbi1tb2RlIjoiZGVidWciLCJoYXMtY2hlY2tzdW1zIjpmYWxzZSwibWluLWFwaSI6MjQsInNoYS0xIjoiYTdhZDE4YTcwNDYwYjc5OWQwNDgyZTQ5N2MxMDlhNzViZjdmOTFkZSIsInZlcnNpb24iOiI4LjEwLjktZGV2In0AAgsBrQEcARgWAQAJAAAKAIGABIAZAQqYGQEKnBoBCswSAQn8HgEKjCUBCsAWAQr0FwEKwBgAAQAAAPIfAAAAAAAAAAAAAAcAAAAAAAAAAQAAACggAAACAAAAKCAAAAMAAAAoIAAABAAAACggAAAFAAAAKCAAAAYAAAAoIAAABwAAACggAAAQAAAAAAAAAAEAAAAAAAAAAQAAALMAAABwAAAAAgAAACsAAAA8AwAAAwAAADEAAADoAwAABAAAAAkAAAA0BgAABQAAAFYAAAB8BgAABgAAAAEAAAAsCQAAASAAAAkAAABMCQAAAyAAAAkAAAD6EwAAARAAAB0AAADwFAAAAiAAALMAAADkFQAABCAAAAEAAADyHwAAACAAAAEAAAD7HwAAAxAAAAEAAAAoIAAABiAAAAEAAAAwIAAAABAAAAEAAAB4IAAA";
3
3
  //#endregion
4
4
  export { PHONE_UI_DEX };
@@ -0,0 +1,22 @@
1
+ import { type PhoneElement } from './contracts.js';
2
+ export interface PhoneUiTransport {
3
+ readable: AsyncIterable<Uint8Array>;
4
+ write(data: Uint8Array): Promise<void>;
5
+ close(): Promise<void>;
6
+ }
7
+ /** One request in flight, bounded framing, no replay after transport or confirmation failure. */
8
+ export declare class PhoneUiSession {
9
+ private transport;
10
+ private sequence;
11
+ private busy;
12
+ private closed;
13
+ private closing?;
14
+ private buffer;
15
+ private iterator;
16
+ constructor(transport: PhoneUiTransport);
17
+ close(): Promise<void>;
18
+ private request;
19
+ snapshot(signal: AbortSignal): Promise<string>;
20
+ replace(app: string, target: PhoneElement, text: string, signal: AbortSignal): Promise<void>;
21
+ }
22
+ export declare function openLocalPhoneUi(adbPath: string, serial: string, signal: AbortSignal): Promise<PhoneUiSession>;