@xopcai/xopc 0.0.424 → 0.0.426

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 (252) 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-D_DXNHba.js} +1 -1
  4. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DupnTbL7.js → agent-avatar-dicebear-CjaQxFQt.js} +1 -1
  5. package/dist/gateway/static/root/assets/{agent-avatar-display-CmEj6Uqy.js → agent-avatar-display-6Z4m31Fz.js} +2 -2
  6. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-IEV5yKuu.js → agent-defaults-settings-panel-Dne9A10p.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agent-plugin-dialog-D_njOuFA.js → agent-plugin-dialog-BoHL-b1o.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agents-B_yg9nA3.js → agents-CIiIlVBp.js} +3 -3
  9. package/dist/gateway/static/root/assets/{agents-admin-api-CUZUolwG.js → agents-admin-api-u5c3GREg.js} +1 -1
  10. package/dist/gateway/static/root/assets/{api-bpQ7yR10.js → api-C3Tp9MkF.js} +1 -1
  11. package/dist/gateway/static/root/assets/{api-CWWEVThO.js → api-CRT9ZyH0.js} +1 -1
  12. package/dist/gateway/static/root/assets/{app-management-settings-panel-C0_hxwgg.js → app-management-settings-panel-C8yc3yHG.js} +1 -1
  13. package/dist/gateway/static/root/assets/{appearance-settings-CLh-qnCC.js → appearance-settings-BELgtR3O.js} +1 -1
  14. package/dist/gateway/static/root/assets/{apps-page-Bjtm3Rgi.js → apps-page-vgS1CHDj.js} +1 -1
  15. package/dist/gateway/static/root/assets/{archive-plugin-dGnstkhB.js → archive-plugin-BCQnOkV8.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automation-api-MB2xCoFF.js → automation-api-hRsGx-qe.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automation-result-state-DJQflY78.js → automation-result-state-CMfVTv_i.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automation-task-card-DXgBxVE2.js → automation-task-card-MnzgyTVA.js} +1 -1
  19. package/dist/gateway/static/root/assets/{automations-page-D3O7M2FH.js → automations-page-CdIPdwF0.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automations-workspace-Dk3FVWoX.js → automations-workspace-C3xZLafX.js} +2 -2
  21. package/dist/gateway/static/root/assets/{binary-plugins-BrVJXmYf.js → binary-plugins-CIB5cbvQ.js} +1 -1
  22. package/dist/gateway/static/root/assets/{block-editor-Dok4sfT3.js → block-editor-BQtTLe6Q.js} +1 -1
  23. package/dist/gateway/static/root/assets/{browser-automation-inputs-PJbT3CxW.js → browser-automation-inputs-DeraGZ1y.js} +1 -1
  24. package/dist/gateway/static/root/assets/{browser-automations-page-kkpX1Q7K.js → browser-automations-page-SpPzRNqU.js} +1 -1
  25. package/dist/gateway/static/root/assets/{browser-control-api-Bg4wnkeA.js → browser-control-api-CbbPvhHR.js} +1 -1
  26. package/dist/gateway/static/root/assets/{browser-settings-page-BrgX_Yb2.js → browser-settings-page-BD1uF_Nb.js} +1 -1
  27. package/dist/gateway/static/root/assets/{capabilities-BMaJizw4.js → capabilities-BGE6hiUE.js} +1 -1
  28. package/dist/gateway/static/root/assets/{capabilities-Cs6Jt5Gl.js → capabilities-DLMuj21P.js} +1 -1
  29. package/dist/gateway/static/root/assets/{capabilities-page-D5hvAG6D.js → capabilities-page-Bda4mSdf.js} +2 -2
  30. package/dist/gateway/static/root/assets/{capabilities-settings-panel-BrEvm4IH.js → capabilities-settings-panel-B2B7no22.js} +2 -2
  31. package/dist/gateway/static/root/assets/{channels-1jQgGVc9.js → channels-NtsjZThx.js} +1 -1
  32. package/dist/gateway/static/root/assets/{chat-agents-api-BAOWaUJf.js → chat-agents-api-D8YS5amE.js} +1 -1
  33. package/dist/gateway/static/root/assets/{chat-chart-block-DeWrb9XR.js → chat-chart-block-DCzUECct.js} +1 -1
  34. package/dist/gateway/static/root/assets/chat-page-BnOCCAXG.js +72 -0
  35. package/dist/gateway/static/root/assets/{chat-terminal-dock-C544n0-R.js → chat-terminal-dock-Dl-OTkJI.js} +1 -1
  36. package/dist/gateway/static/root/assets/{command-palette-api-D9PXzY8b.js → command-palette-api-Dijix7V6.js} +1 -1
  37. package/dist/gateway/static/root/assets/{composer-payload-handoff-CYXfjpem.js → composer-payload-handoff-CQc-VTaL.js} +1 -1
  38. package/dist/gateway/static/root/assets/{computer-settings-page-DJmod8-w.js → computer-settings-page-B-lGMimW.js} +1 -1
  39. package/dist/gateway/static/root/assets/connected-providers-grid-CcXe9kz5.js +1 -0
  40. package/dist/gateway/static/root/assets/{connector-service-page-BqDbTOTp.js → connector-service-page-C8InhrMt.js} +1 -1
  41. package/dist/gateway/static/root/assets/{connectors-api-CwRuUnH4.js → connectors-api-DEJU8mgn.js} +1 -1
  42. package/dist/gateway/static/root/assets/{connectors-page-Mq9Bvoax.js → connectors-page-Ci0L2How.js} +1 -1
  43. package/dist/gateway/static/root/assets/{date-picker-DWaT0IC0.js → date-picker-kqic8j73.js} +1 -1
  44. package/dist/gateway/static/root/assets/{dependency-picker-DV9XAt6F.js → dependency-picker-cbC6-2Ya.js} +1 -1
  45. package/dist/gateway/static/root/assets/{desktop-pet-Dffq2NxL.js → desktop-pet-DFNehTtd.js} +1 -1
  46. package/dist/gateway/static/root/assets/{desktop-pet-narrative-CS8qJpNO.js → desktop-pet-narrative-ChwjpnsG.js} +1 -1
  47. package/dist/gateway/static/root/assets/{desktop-pet-settings-CrB1ICax.js → desktop-pet-settings-BDS7_tQ_.js} +1 -1
  48. package/dist/gateway/static/root/assets/{dev-view-store-liRgSkcT.js → dev-view-store-CeZZLOc6.js} +1 -1
  49. package/dist/gateway/static/root/assets/device-pairing-wizard-_3BJFWVQ.js +1 -0
  50. package/dist/gateway/static/root/assets/{directory-picker-path-field-EKqQLQrE.js → directory-picker-path-field-Di0h3ws4.js} +1 -1
  51. package/dist/gateway/static/root/assets/{discussion-annotation-sync-D-b1X6ro.js → discussion-annotation-sync-ClKEyXmN.js} +1 -1
  52. package/dist/gateway/static/root/assets/{extension-debug-page-wD97GeG0.js → extension-debug-page-DwB5KMGk.js} +1 -1
  53. package/dist/gateway/static/root/assets/{extension-iframe-host-B4Q1CjvW.js → extension-iframe-host-Cqg1K70e.js} +1 -1
  54. package/dist/gateway/static/root/assets/{extension-marketplace-api-ak1_K3u8.js → extension-marketplace-api-DRBszrCR.js} +1 -1
  55. package/dist/gateway/static/root/assets/{extension-page-DWFI4iIh.js → extension-page-DyrQtG82.js} +1 -1
  56. package/dist/gateway/static/root/assets/{extension-provider-BZwcaU5Y.js → extension-provider-C_uKqJxP.js} +1 -1
  57. package/dist/gateway/static/root/assets/{extension-settings-page-cn4KS42C.js → extension-settings-page-BAMQHzkX.js} +1 -1
  58. package/dist/gateway/static/root/assets/{file-preview-surface-c3gDD9sM.js → file-preview-surface-DfkXvFnc.js} +1 -1
  59. package/dist/gateway/static/root/assets/{gateway-config-swr-Dmt5JhZU.js → gateway-config-swr-BOCt_zOo.js} +1 -1
  60. package/dist/gateway/static/root/assets/{gateway-realtime-CJtDXQCt.js → gateway-realtime-BL_Cf0OQ.js} +1 -1
  61. package/dist/gateway/static/root/assets/gateway-realtime-store-BHBOPF_q.js +1 -0
  62. package/dist/gateway/static/root/assets/{gateway-restart-DInvvT5u.js → gateway-restart-CHf8qY7H.js} +1 -1
  63. package/dist/gateway/static/root/assets/{gateway-settings-BZXdv2FE.js → gateway-settings-uAboiElC.js} +1 -1
  64. package/dist/gateway/static/root/assets/{gateway-startup-retry-s2KcWekp.js → gateway-startup-retry-CvkJYurV.js} +1 -1
  65. package/dist/gateway/static/root/assets/{global-defaults-api-DtnmDd87.js → global-defaults-api-BWMbKu72.js} +1 -1
  66. package/dist/gateway/static/root/assets/{home-page-CAVjA5rO.js → home-page-D6pCBY1V.js} +2 -2
  67. package/dist/gateway/static/root/assets/{image-generation-api-RQQokgE9.js → image-generation-api-CQxZSTWA.js} +1 -1
  68. package/dist/gateway/static/root/assets/{imports-page-BP_4TubV.js → imports-page-C90644id.js} +1 -1
  69. package/dist/gateway/static/root/assets/index-Cc41XQid.css +1 -0
  70. package/dist/gateway/static/root/assets/index-CnOYR6jq.js +11 -0
  71. package/dist/gateway/static/root/assets/{install-connector-dialog-BNzNuXJ8.js → install-connector-dialog-BuNXON0P.js} +1 -1
  72. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-DNRQFepg.js → keyboard-shortcuts-settings-CbeubKe1.js} +1 -1
  73. package/dist/gateway/static/root/assets/{local-app-workbench-page-CvY5XxbX.js → local-app-workbench-page-CP-BkbB6.js} +1 -1
  74. package/dist/gateway/static/root/assets/{local-apps-page-DfwEvd8G.js → local-apps-page-C6zFgwkr.js} +1 -1
  75. package/dist/gateway/static/root/assets/{local-session-drafts-CuDdIyxR.js → local-session-drafts-BJ1B1dQ7.js} +1 -1
  76. package/dist/gateway/static/root/assets/{locale-store-TQcz_Vjt.js → locale-store-Br7IfbXK.js} +1 -1
  77. package/dist/gateway/static/root/assets/{logs-page-eq49F1Rt.js → logs-page-CpVCvAWE.js} +1 -1
  78. package/dist/gateway/static/root/assets/{management-settings-BaYXDMOJ.js → management-settings-I-pXv4ML.js} +1 -1
  79. package/dist/gateway/static/root/assets/{markdown-view-D4nII6Zv.js → markdown-view-DrVAMlwc.js} +1 -1
  80. package/dist/gateway/static/root/assets/{media-plugins-MvlAY405.js → media-plugins-Ba6vUE4J.js} +1 -1
  81. package/dist/gateway/static/root/assets/messages-ByFlEbsu.js +3 -0
  82. package/dist/gateway/static/root/assets/{model-selector-nsoNHqif.js → model-selector-CXcxc30J.js} +1 -1
  83. package/dist/gateway/static/root/assets/{models-hub-cache-CFIazNIF.js → models-hub-cache-Bd-fYUrV.js} +1 -1
  84. package/dist/gateway/static/root/assets/{note-detail-panel-KPzbHiEW.js → note-detail-panel-CbpLXAVh.js} +3 -3
  85. package/dist/gateway/static/root/assets/note-image-lightbox-cLGiF8oU.js +1 -0
  86. package/dist/gateway/static/root/assets/{notes-api-HVxR5bRD.js → notes-api-CUlhTRv0.js} +1 -1
  87. package/dist/gateway/static/root/assets/{notes-page-yShJeR3i.js → notes-page-eoKX85K5.js} +1 -1
  88. package/dist/gateway/static/root/assets/{oauth-api-CfKjRVnb.js → oauth-api-DMMdeaNd.js} +1 -1
  89. package/dist/gateway/static/root/assets/{oauth-provider-connect-D4uqONWr.js → oauth-provider-connect-C8BXow79.js} +1 -1
  90. package/dist/gateway/static/root/assets/{page-context-capture-button-B98nlKTc.js → page-context-capture-button-CBFK41OS.js} +1 -1
  91. package/dist/gateway/static/root/assets/{page-context-draft-HcuK45iu.js → page-context-draft-LF33STHC.js} +1 -1
  92. package/dist/gateway/static/root/assets/page-header-store-Du44NIEJ.js +1 -0
  93. package/dist/gateway/static/root/assets/{personal-avatar-_d72UP_d.js → personal-avatar-D6CzIIfo.js} +1 -1
  94. package/dist/gateway/static/root/assets/{personal-page-B19h_3WQ.js → personal-page-CXR1Gy0x.js} +1 -1
  95. package/dist/gateway/static/root/assets/{personal-settings-panel-CfwtGyue.js → personal-settings-panel-DnYapLo7.js} +1 -1
  96. package/dist/gateway/static/root/assets/{phone-dependencies-card-D8bqsDk_.js → phone-dependencies-card-DBiKtzwz.js} +1 -1
  97. package/dist/gateway/static/root/assets/{phone-model-picker-CL_Zn6Xd.js → phone-model-picker-BmSxEr7M.js} +1 -1
  98. package/dist/gateway/static/root/assets/{phone-settings-page-C5Jia8eQ.js → phone-settings-page-vg65qilc.js} +1 -1
  99. package/dist/gateway/static/root/assets/{phone-workspace-store-FBfrfkYq.js → phone-workspace-store-SN7hfddU.js} +1 -1
  100. package/dist/gateway/static/root/assets/{plugin-details-dialog-gAq2KPzK.js → plugin-details-dialog-B3Hn2cbx.js} +1 -1
  101. package/dist/gateway/static/root/assets/{preference-select-fields-Ck8GAX_y.js → preference-select-fields-Cu_ZC9Up.js} +1 -1
  102. package/dist/gateway/static/root/assets/{product-automation-feedback-BJ9oTnNs.js → product-automation-feedback-Tn2dUJWM.js} +1 -1
  103. package/dist/gateway/static/root/assets/{product-open-page-Dw9hUdxP.js → product-open-page-Nf-Oqf1h.js} +1 -1
  104. package/dist/gateway/static/root/assets/{product-preview-content-C0iPzmSm.js → product-preview-content-D6NwUm3A.js} +1 -1
  105. package/dist/gateway/static/root/assets/{product-preview-modal-COFtHoh6.js → product-preview-modal-BfNcGgXA.js} +2 -2
  106. package/dist/gateway/static/root/assets/{project-detail-page-C5Amjah-.js → project-detail-page-Ch-ZMyTu.js} +1 -1
  107. package/dist/gateway/static/root/assets/{project-understanding-DpL9ADQU.js → project-understanding-B1BK7Ixi.js} +1 -1
  108. package/dist/gateway/static/root/assets/{projects-page-gGg9nM2t.js → projects-page-B7cetxao.js} +1 -1
  109. package/dist/gateway/static/root/assets/{providers-api-D6JJRlJb.js → providers-api-DOnNfkwQ.js} +1 -1
  110. package/dist/gateway/static/root/assets/{recording-upload-DxX1xKyt.js → recording-upload-RAhaLUcQ.js} +1 -1
  111. package/dist/gateway/static/root/assets/{registry-api-BfXzBR1D.js → registry-api-DFDvOTg4.js} +1 -1
  112. package/dist/gateway/static/root/assets/{remote-access-hub-BZA4StwC.js → remote-access-hub-DWsOWetc.js} +1 -1
  113. package/dist/gateway/static/root/assets/{resource-unavailable-X-SIrZYI.js → resource-unavailable-TQcRCpAg.js} +1 -1
  114. package/dist/gateway/static/root/assets/{route-preload-CWRb0UCt.js → route-preload-Zc5Z3fNv.js} +2 -2
  115. package/dist/gateway/static/root/assets/{runtime-tools-api-1DjsPyQ5.js → runtime-tools-api-9o3Wfji1.js} +1 -1
  116. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-BnCtyORj.js → runtime-tools-settings-panel-BGiXeHF5.js} +1 -1
  117. package/dist/gateway/static/root/assets/{service-recommendation-list-ChSOfHHh.js → service-recommendation-list-BEnNx0u7.js} +1 -1
  118. package/dist/gateway/static/root/assets/{session-api-rvY5aWw8.js → session-api-Bs3r_d2_.js} +1 -1
  119. package/dist/gateway/static/root/assets/session-manager-ChUtTAoG.js +23 -0
  120. package/dist/gateway/static/root/assets/{sessions-page-DAS2IUGT.js → sessions-page-Bt52kBvJ.js} +1 -1
  121. package/dist/gateway/static/root/assets/settings-advanced-gate-BI4DMz4_.js +1 -0
  122. package/dist/gateway/static/root/assets/{settings-advanced-section-ZKRIuk7h.js → settings-advanced-section-CURRjsLK.js} +1 -1
  123. package/dist/gateway/static/root/assets/{settings-mode-store-CtJ8pEfm.js → settings-mode-store-CiRpsdTJ.js} +1 -1
  124. package/dist/gateway/static/root/assets/{settings-page-B3pUce-_.js → settings-page-GtsbT6as.js} +1 -1
  125. package/dist/gateway/static/root/assets/{settings-page-header-DuNCn8i-.js → settings-page-header-DBL0_u0Z.js} +1 -1
  126. package/dist/gateway/static/root/assets/{settings-page-layout-DeNC8YHJ.js → settings-page-layout-IAvpbz4A.js} +1 -1
  127. package/dist/gateway/static/root/assets/{setup-status-panel-Fc3vuz_h.js → setup-status-panel-A6uMpGRy.js} +1 -1
  128. package/dist/gateway/static/root/assets/{share-link-dialog-B3hwjVAx.js → share-link-dialog-D1otGSXD.js} +1 -1
  129. package/dist/gateway/static/root/assets/{share-preview-page-D_9oFzGS.js → share-preview-page-L9KYu8M7.js} +1 -1
  130. package/dist/gateway/static/root/assets/{shares-api-BoUpXmxq.js → shares-api-D8Q-m46d.js} +1 -1
  131. package/dist/gateway/static/root/assets/{shares-settings-Drfuvepz.js → shares-settings-Bmfadz8A.js} +1 -1
  132. package/dist/gateway/static/root/assets/{skill-api-By2HhJ9O.js → skill-api-uKU4sRiv.js} +1 -1
  133. package/dist/gateway/static/root/assets/{skill-list-api-TaUCzS8Y.js → skill-list-api-BzKzG-xG.js} +1 -1
  134. package/dist/gateway/static/root/assets/{skill-reload-api-CN2fpS1n.js → skill-reload-api-DkUXekcd.js} +1 -1
  135. package/dist/gateway/static/root/assets/{skills-page-LzGLique.js → skills-page-BZklXTX9.js} +1 -1
  136. package/dist/gateway/static/root/assets/{system-settings-panel-Cuyg8Ml3.js → system-settings-panel-CsvcFoaJ.js} +1 -1
  137. package/dist/gateway/static/root/assets/task-detail-page-SjZGW1Dx.js +2 -0
  138. package/dist/gateway/static/root/assets/{task-result-evidence-DDubAU_5.js → task-result-evidence-B8xUiwW3.js} +1 -1
  139. package/dist/gateway/static/root/assets/{terminal-panel-store-BNs75Wdr.js → terminal-panel-store-DJVC7HqA.js} +1 -1
  140. package/dist/gateway/static/root/assets/{theme-store-DB1ZfBUm.js → theme-store-Dlnmgryi.js} +1 -1
  141. package/dist/gateway/static/root/assets/tool-friendly-title-DcCc6g7o.js +1 -0
  142. package/dist/gateway/static/root/assets/{tracing-settings-page-TvtX4Goh.js → tracing-settings-page-MvG4SH64.js} +1 -1
  143. package/dist/gateway/static/root/assets/{tunnel-api-COoVEdV9.js → tunnel-api-BB7u79ID.js} +1 -1
  144. package/dist/gateway/static/root/assets/{understanding-activity-store-Dr_MLgYe.js → understanding-activity-store-C4bblRnQ.js} +1 -1
  145. package/dist/gateway/static/root/assets/{understanding-refresh-store-DGmLGEqw.js → understanding-refresh-store-BvCj9-Ue.js} +1 -1
  146. package/dist/gateway/static/root/assets/{usage-page-DP6eb6ed.js → usage-page-Cv4Je5XJ.js} +1 -1
  147. package/dist/gateway/static/root/assets/{use-autosave-itwjDYUb.js → use-autosave-YHxQ-UZg.js} +1 -1
  148. package/dist/gateway/static/root/assets/{use-composer-attachments-hjIGlI_2.js → use-composer-attachments-vDdxHtUb.js} +1 -1
  149. package/dist/gateway/static/root/assets/{use-file-preview-expanded-ClLa0g8D.js → use-file-preview-expanded-Ce2mgYme.js} +2 -2
  150. package/dist/gateway/static/root/assets/{use-personal-profile-vhWk6tTU.js → use-personal-profile-D2Un8G1L.js} +1 -1
  151. package/dist/gateway/static/root/assets/{use-workspace-tree-dfXXjA2-.js → use-workspace-tree-BQEiJzK7.js} +1 -1
  152. package/dist/gateway/static/root/assets/{user-model-page-D8dswPWd.js → user-model-page-DRSsn4EV.js} +1 -1
  153. package/dist/gateway/static/root/assets/{voice-api-key-field-BIfBySnN.js → voice-api-key-field-DCM69u8Y.js} +1 -1
  154. package/dist/gateway/static/root/assets/{voice-config-api-J4o59ICE.js → voice-config-api-CrULrSKC.js} +1 -1
  155. package/dist/gateway/static/root/assets/{voice-input-shortcut-events-B1mlpUdC.js → voice-input-shortcut-events-DFMNIyy4.js} +1 -1
  156. package/dist/gateway/static/root/assets/{voice-transcribe-api-xxaSOOmq.js → voice-transcribe-api-Bbyj0yGR.js} +1 -1
  157. package/dist/gateway/static/root/assets/{work-discovery-overlay-DqwT1E5u.js → work-discovery-overlay-CVe9UmFl.js} +1 -1
  158. package/dist/gateway/static/root/assets/{work-discovery-page-BzYQmPLT.js → work-discovery-page-CtqkRMN5.js} +1 -1
  159. package/dist/gateway/static/root/assets/{working-directory-picker-modal-D2Zf3GOG.js → working-directory-picker-modal-CDZ1xh3o.js} +1 -1
  160. package/dist/gateway/static/root/assets/{workspace-api-Bnx3eS2M.js → workspace-api-tbifz2zY.js} +2 -2
  161. package/dist/gateway/static/root/assets/workspace-editor-agent-store-4cZ26iaD.js +1 -0
  162. package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-D13qHzVr.js → workspace-file-preview-dialog-BubQwQwU.js} +1 -1
  163. package/dist/gateway/static/root/assets/{workspace-open-location-menu-Cou-ig1H.js → workspace-open-location-menu-DZk3MBSa.js} +1 -1
  164. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-DQGPKxHA.js → xopc-cloud-account-card-CIavPUr3.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/computer/agent-context.d.ts +21 -0
  174. package/dist/src/computer/agent-context.js +107 -0
  175. package/dist/src/computer/broker.d.ts +4 -2
  176. package/dist/src/computer/broker.js +26 -11
  177. package/dist/src/computer/diagnostics.d.ts +60 -6
  178. package/dist/src/computer/diagnostics.js +45 -4
  179. package/dist/src/computer/errors.d.ts +1 -1
  180. package/dist/src/computer/errors.js +4 -0
  181. package/dist/src/computer/evaluation.d.ts +2 -2
  182. package/dist/src/computer/native-timing.d.ts +15 -0
  183. package/dist/src/computer/native-timing.js +49 -0
  184. package/dist/src/computer/program-runtime.d.ts +22 -0
  185. package/dist/src/computer/program-runtime.js +105 -0
  186. package/dist/src/computer/runtime.d.ts +36 -2
  187. package/dist/src/computer/runtime.js +269 -58
  188. package/dist/src/config/models-json.d.ts +12 -0
  189. package/dist/src/config/schema.d.ts +18 -0
  190. package/dist/src/gateway/hono/routes/phone-setup.js +12 -7
  191. package/dist/src/gateway/hono/routes/phone.js +2 -4
  192. package/dist/src/gateway/service/config-coordinator.d.ts +6 -0
  193. package/dist/src/gateway/service.js +4 -4
  194. package/dist/src/gateway/xopc-cloud-capability-setup.js +9 -1
  195. package/dist/src/home-intelligence/host.js +2 -2
  196. package/dist/src/phone/adb-driver.d.ts +15 -1
  197. package/dist/src/phone/adb-driver.js +104 -41
  198. package/dist/src/phone/autoglm-protocol.d.ts +36 -0
  199. package/dist/src/phone/autoglm-protocol.js +88 -0
  200. package/dist/src/phone/autoglm-upstream-prompt.d.ts +2 -0
  201. package/dist/src/phone/autoglm-upstream-prompt.js +5 -0
  202. package/dist/src/phone/autoglm-upstream.LICENSE +201 -0
  203. package/dist/src/phone/cloud-adb-connection.d.ts +3 -0
  204. package/dist/src/phone/cloud-adb-connection.js +105 -31
  205. package/dist/src/phone/cloud-adb.js +18 -6
  206. package/dist/src/phone/completion-recovery.d.ts +6 -0
  207. package/dist/src/phone/completion-recovery.js +30 -0
  208. package/dist/src/phone/contracts.d.ts +24 -0
  209. package/dist/src/phone/contracts.js +12 -1
  210. package/dist/src/phone/execution-trace.d.ts +51 -0
  211. package/dist/src/phone/execution-trace.js +78 -0
  212. package/dist/src/phone/gui-protocol.d.ts +7 -0
  213. package/dist/src/phone/gui-protocol.js +302 -0
  214. package/dist/src/phone/model-adapter.d.ts +10 -2
  215. package/dist/src/phone/model-adapter.js +136 -62
  216. package/dist/src/phone/model-response.d.ts +5 -0
  217. package/dist/src/phone/model-response.js +118 -0
  218. package/dist/src/phone/runtime.d.ts +4 -0
  219. package/dist/src/phone/runtime.js +154 -18
  220. package/dist/src/phone/text-session.d.ts +14 -0
  221. package/dist/src/phone/text-session.js +39 -0
  222. package/dist/src/phone/ui-dump-binary.d.ts +1 -1
  223. package/dist/src/phone/ui-dump-binary.js +1 -1
  224. package/dist/src/phone/ui-session.d.ts +24 -0
  225. package/dist/src/phone/ui-session.js +210 -0
  226. package/dist/src/process/phone-process.d.ts +1 -0
  227. package/dist/src/process/phone-process.js +11 -1
  228. package/dist/src/providers/env-keys.js +2 -0
  229. package/dist/src/providers/index.js +11 -0
  230. package/dist/src/providers/model-catalog-types.d.ts +1 -1
  231. package/dist/src/providers/model-supplements.d.ts +1 -1
  232. package/dist/src/providers/model-supplements.js +6 -3
  233. package/dist/src/providers/phone-models.d.ts +3 -0
  234. package/dist/src/providers/phone-models.js +33 -0
  235. package/dist/src/providers/presentation.js +0 -1
  236. package/dist/src/tui/tui.js +1 -1
  237. package/dist/src/voice/platform-catalog.d.ts +1 -1
  238. package/package.json +2 -1
  239. package/dist/gateway/static/root/assets/chat-page-CafkCKOj.js +0 -72
  240. package/dist/gateway/static/root/assets/connected-providers-grid-b46VH4uy.js +0 -1
  241. package/dist/gateway/static/root/assets/device-pairing-wizard-1du1hfi5.js +0 -1
  242. package/dist/gateway/static/root/assets/gateway-realtime-store-DcsZyYEa.js +0 -1
  243. package/dist/gateway/static/root/assets/index-BS9mjvSL.js +0 -11
  244. package/dist/gateway/static/root/assets/index-pT-m6l6b.css +0 -1
  245. package/dist/gateway/static/root/assets/messages-DaLmc4W1.js +0 -3
  246. package/dist/gateway/static/root/assets/note-image-lightbox-DticJxxh.js +0 -1
  247. package/dist/gateway/static/root/assets/page-header-store-D6SzJ9Ch.js +0 -1
  248. package/dist/gateway/static/root/assets/session-manager-D2rbRfX3.js +0 -23
  249. package/dist/gateway/static/root/assets/settings-advanced-gate-CYDQybNF.js +0 -1
  250. package/dist/gateway/static/root/assets/task-detail-page-6A9337pK.js +0 -2
  251. package/dist/gateway/static/root/assets/tool-friendly-title-DGmi7rCQ.js +0 -1
  252. package/dist/gateway/static/root/assets/workspace-editor-agent-store-COUVwj-p.js +0 -1
@@ -0,0 +1,118 @@
1
+ import { PhoneError, init_contracts } from "./contracts.js";
2
+ import { performance } from "node:perf_hooks";
3
+ //#region src/phone/model-response.ts
4
+ init_contracts();
5
+ function usage(value, metric) {
6
+ if (!value || typeof value !== "object") return;
7
+ for (const [source, target] of [
8
+ ["prompt_tokens", "promptTokens"],
9
+ ["completion_tokens", "completionTokens"],
10
+ ["total_tokens", "totalTokens"]
11
+ ]) {
12
+ const count = value[source];
13
+ if (typeof count === "number" && Number.isSafeInteger(count) && count >= 0) metric[target] = count;
14
+ }
15
+ }
16
+ /** Require substantial exact repetition; ordinary short repeated labels do not trigger it. */
17
+ function repeatedPhoneOutput(text) {
18
+ if (text.length < 1200) return false;
19
+ const tail = text.slice(-12e3).trim();
20
+ for (let size = 100; size <= Math.min(1500, Math.floor(tail.length / 4)); size++) {
21
+ const unit = tail.slice(-size);
22
+ if (tail.endsWith(unit.repeat(4))) return true;
23
+ }
24
+ return false;
25
+ }
26
+ /** Read complete decisions only. Streaming chunks are never executable actions. */
27
+ async function readPhoneModelResponse(response, metric, started, repetitionGuard = false) {
28
+ const reader = response.body?.getReader();
29
+ if (!reader) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model returned an empty response");
30
+ const streaming = response.headers.get("content-type")?.includes("text/event-stream");
31
+ const decoder = new TextDecoder();
32
+ let bytes = 0;
33
+ let pending = "";
34
+ let content = "";
35
+ let finish = null;
36
+ let done = false;
37
+ let checkedAt = 0;
38
+ const event = (raw) => {
39
+ const data = raw.split("\n").filter((line) => line.startsWith("data:")).map((line) => line.slice(5).trimStart()).join("\n").trim();
40
+ if (!data) return;
41
+ if (data === "[DONE]") {
42
+ done = true;
43
+ return;
44
+ }
45
+ if (done) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model sent data after stream completion");
46
+ let value;
47
+ try {
48
+ value = JSON.parse(data);
49
+ } catch {
50
+ throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model returned invalid stream data");
51
+ }
52
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model returned invalid stream data");
53
+ if (value.error) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model stream reported an error");
54
+ usage(value.usage, metric);
55
+ const choice = (Array.isArray(value.choices) ? value.choices : []).find((item) => (item.index ?? 0) === 0);
56
+ if (!choice) return;
57
+ const token = choice.delta?.content;
58
+ if (choice.delta?.reasoning_content || token) metric.firstTokenMs ??= Math.round(performance.now() - started);
59
+ if (typeof token === "string" && token.length) {
60
+ if (finish) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model sent content after its final decision");
61
+ metric.firstTokenMs ??= Math.round(performance.now() - started);
62
+ content += token;
63
+ if (content.length > 64e3) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model output exceeds limit");
64
+ if (repetitionGuard && content.length - checkedAt >= 256) {
65
+ checkedAt = content.length;
66
+ if (repeatedPhoneOutput(content)) throw new PhoneError("PHONE_MODEL_REPETITION", "Phone model repeated its output without completing a decision; no action was dispatched");
67
+ }
68
+ }
69
+ if (choice.finish_reason) {
70
+ finish = String(choice.finish_reason);
71
+ metric.finishReason = finish.slice(0, 80);
72
+ }
73
+ };
74
+ try {
75
+ while (true) {
76
+ const next = await reader.read();
77
+ if (next.done) break;
78
+ if (next.value.length) metric.firstByteMs ??= Math.round(performance.now() - started);
79
+ bytes += next.value.length;
80
+ metric.responseBytes = bytes;
81
+ if (bytes > (streaming ? 2 * 1024 * 1024 : 256 * 1024)) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model response exceeds limit");
82
+ pending += decoder.decode(next.value, { stream: true });
83
+ if (streaming) {
84
+ pending = pending.replaceAll("\r\n", "\n");
85
+ let boundary;
86
+ while ((boundary = pending.indexOf("\n\n")) >= 0) {
87
+ event(pending.slice(0, boundary));
88
+ pending = pending.slice(boundary + 2);
89
+ }
90
+ if (pending.length > 256 * 1024) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model stream event exceeds limit");
91
+ }
92
+ }
93
+ pending += decoder.decode();
94
+ if (streaming) {
95
+ if (pending.trim()) event(pending);
96
+ if (!done || !finish) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model stream ended without a completed decision");
97
+ return { choices: [{
98
+ message: { content },
99
+ finish_reason: finish
100
+ }] };
101
+ }
102
+ let value;
103
+ try {
104
+ value = JSON.parse(pending);
105
+ } catch {
106
+ throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model returned invalid JSON");
107
+ }
108
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new PhoneError("PHONE_MODEL_PROTOCOL", "Phone model returned invalid JSON");
109
+ usage(value.usage, metric);
110
+ const reason = value.choices?.[0]?.finish_reason;
111
+ if (typeof reason === "string") metric.finishReason = reason.slice(0, 80);
112
+ return value;
113
+ } finally {
114
+ await reader.cancel().catch(() => {});
115
+ }
116
+ }
117
+ //#endregion
118
+ export { readPhoneModelResponse, repeatedPhoneOutput };
@@ -71,17 +71,20 @@ export declare class PhoneRuntime {
71
71
  private guard;
72
72
  private allowedScreen;
73
73
  execute(owner: string, raw: PhoneInput, context: ExecutionContext, signal?: AbortSignal): Promise<unknown>;
74
+ private executeInput;
74
75
  setExecutionMode(owner: string, executionMode: PhoneExecutionMode, context: ExecutionContext, applyCurrent?: boolean, expectedEpoch?: number): Promise<PhoneReport | undefined>;
75
76
  private busy;
76
77
  private finishTask;
77
78
  private perform;
78
79
  private recordObservation;
79
80
  private modelRequestLimit;
81
+ private readOutputFields;
80
82
  private readScreen;
81
83
  private dispatch;
82
84
  stop(owner: string, op: 'pause' | 'cancel' | 'close'): Promise<PhoneReport | {
83
85
  status: 'closed';
84
86
  }>;
87
+ private releaseInput;
85
88
  private io;
86
89
  private observe;
87
90
  private capture;
@@ -124,6 +127,7 @@ export declare class PhoneRuntime {
124
127
  feedback?: import("./contracts.js").PhoneTaskFeedback;
125
128
  sourceConversationId?: string;
126
129
  readings?: import("./contracts.js").PhoneReading[];
130
+ performance?: import("./execution-trace.js").PhonePerformance;
127
131
  steps: Array<{
128
132
  action: PhoneAction["type"];
129
133
  at: number;
@@ -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";
@@ -167,15 +169,21 @@ var PhoneRuntime = class {
167
169
  }
168
170
  }
169
171
  const lease = this.repository.acquire(device.serial);
172
+ let driver;
170
173
  try {
171
- const observation = await (await this.driverFor(device, config)).observe(device.serial, signal);
174
+ driver = await this.driverFor(device, config);
175
+ const observation = await driver.observe(device.serial, signal);
172
176
  if (!phoneAllowsApp(device, observation.package)) {
173
177
  observation.frame.fill(0);
174
178
  throw new PhoneError("PHONE_APP_DENIED", "Open an allowed app before previewing the screen");
175
179
  }
176
180
  return observation;
177
181
  } finally {
178
- this.repository.release(device.serial, lease);
182
+ try {
183
+ await driver?.releaseInput?.();
184
+ } finally {
185
+ this.repository.release(device.serial, lease);
186
+ }
179
187
  }
180
188
  }
181
189
  async previewSession(owner, context, signal) {
@@ -324,6 +332,8 @@ var PhoneRuntime = class {
324
332
  ].includes(session.report.status)) await this.finishTask(owner);
325
333
  }
326
334
  publish(session) {
335
+ const trace = currentPhoneTrace();
336
+ if (trace) session.report.performance = trace.snapshot();
327
337
  session.report.nextExecutionMode = this.repository.executionMode(session.report.owner) ?? session.context.config.phone.executionMode;
328
338
  if (session.report.feedback && session.segmentUsage) session.report.feedback = updatePhoneFeedback(session.report, {
329
339
  actions: session.report.actions - session.segmentUsage.actions,
@@ -358,6 +368,35 @@ var PhoneRuntime = class {
358
368
  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
369
  }
360
370
  async execute(owner, raw, context, signal = new AbortController().signal) {
371
+ if (![
372
+ "open",
373
+ "run",
374
+ "step",
375
+ "observe"
376
+ ].includes(raw.op)) return this.executeInput(owner, raw, context, signal);
377
+ const trace = new PhoneExecutionTrace();
378
+ return trace.run(async () => {
379
+ try {
380
+ const result = await this.executeInput(owner, raw, context, signal);
381
+ const session = this.sessions.get(owner);
382
+ if (session?.report.performance?.operationId === trace.id) session.report.performance = trace.snapshot();
383
+ return result && typeof result === "object" && "sessionId" in result ? {
384
+ ...result,
385
+ performance: trace.snapshot()
386
+ } : result;
387
+ } finally {
388
+ trace.finish();
389
+ log.info({
390
+ conversationId: owner,
391
+ op: raw.op,
392
+ modelRef: context.modelRef,
393
+ phase: "execution_timing",
394
+ performance: trace.snapshot()
395
+ }, "Phone execution timing recorded");
396
+ }
397
+ });
398
+ }
399
+ async executeInput(owner, raw, context, signal) {
361
400
  const input = PhoneInputSchema.parse(raw);
362
401
  if (input.op === "request_user") {
363
402
  const session = this.sessions.get(owner);
@@ -664,6 +703,7 @@ var PhoneRuntime = class {
664
703
  const constraints = [...new Set([...continuing ? previous.constraints : [], ...input.constraints ?? []])];
665
704
  if (constraints.length > 12) throw new PhoneError("PHONE_CONSTRAINT_LIMIT", "A phone task supports at most 12 constraints; existing constraints cannot be removed");
666
705
  if (!continuing) {
706
+ session.adapter.reset?.();
667
707
  session.trajectory = [];
668
708
  session.trajectorySummary = [];
669
709
  session.taskActiveMs = 0;
@@ -755,7 +795,10 @@ var PhoneRuntime = class {
755
795
  session.report.stopReason = "completion_changed";
756
796
  }
757
797
  const epoch = session.report.controlEpoch;
798
+ const visualOutputs = session.report.task.requestedOutputs.filter((request) => !request.selector);
799
+ if (visualOutputs.length > 1 && context.config.phone.batchReadings && session.adapter.readFields) await this.readOutputFields(session, observation, visualOutputs, context, combined);
758
800
  for (const request of session.report.task.requestedOutputs) {
801
+ if (visualOutputs.length > 1 && context.config.phone.batchReadings && session.adapter.readFields) break;
759
802
  if (request.selector) continue;
760
803
  await this.readScreen(session, observation, request.description, context, combined);
761
804
  if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") break;
@@ -816,6 +859,7 @@ var PhoneRuntime = class {
816
859
  this.publish(session);
817
860
  throw error;
818
861
  } finally {
862
+ await this.releaseInput(session);
819
863
  session.active = void 0;
820
864
  const elapsed = session.budget?.elapsedMs ?? 0;
821
865
  session.taskActiveMs = (session.taskActiveMs ?? 0) + elapsed;
@@ -912,6 +956,7 @@ var PhoneRuntime = class {
912
956
  if (session.report.status !== "completed") session.report.status = "ready";
913
957
  session.report.stopReason = "task_finished";
914
958
  session.taskPending = false;
959
+ session.adapter.reset?.();
915
960
  session.report.goalPreview = void 0;
916
961
  session.report.facts = void 0;
917
962
  session.report.readings = void 0;
@@ -1131,7 +1176,7 @@ var PhoneRuntime = class {
1131
1176
  afterApp: entry.afterApp
1132
1177
  }).slice(0, 250))].slice(-12)
1133
1178
  }).slice(-1500),
1134
- recoveryHint,
1179
+ recoveryHint: recoveryHint ?? (completion ? phoneCompletionGuidance(completion, observation, changed) : void 0),
1135
1180
  protocolFeedback,
1136
1181
  scenario: input.scenario,
1137
1182
  enhancements,
@@ -1144,7 +1189,11 @@ var PhoneRuntime = class {
1144
1189
  observation = await this.observe(session, signal);
1145
1190
  continue;
1146
1191
  }
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)) {
1192
+ if (!signal.aborted && error instanceof PhoneError && [
1193
+ "PHONE_MODEL_PROTOCOL",
1194
+ "PHONE_MODEL_TRUNCATED",
1195
+ "PHONE_MODEL_REPETITION"
1196
+ ].includes(error.code) && repairs < 1 && session.report.modelRequests < this.modelRequestLimit(session, context)) {
1148
1197
  repairs++;
1149
1198
  session.report.diagnostics.protocolRepairs++;
1150
1199
  protocolFeedback = "Your previous output was invalid or truncated. Return exactly one complete action in the specified format with no extra prose.";
@@ -1172,21 +1221,38 @@ var PhoneRuntime = class {
1172
1221
  session.report.diagnostics.completedSubgoals = planning.verifiedSteps;
1173
1222
  }
1174
1223
  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.`;
1224
+ if (decision.kind === "complete" && !session.report.mock && completion) {
1182
1225
  observation.frame.fill(0);
1183
1226
  observation = await this.observe(session, signal);
1184
- continue;
1227
+ signal.throwIfAborted();
1228
+ this.guard(session, context);
1229
+ this.allowedScreen(session, observation);
1230
+ if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") continue;
1231
+ const currentChanged = changed || observationSignature(observation) !== previousSignature;
1232
+ if (phoneCompletionSatisfied(completion, observation, currentChanged)) continue;
1233
+ this.recordObservation(session, observation);
1234
+ if (completionCorrections < 2 && session.report.modelRequests < this.modelRequestLimit(session, context)) {
1235
+ completionCorrections++;
1236
+ session.report.diagnostics.completionCorrections++;
1237
+ recoveryHint = phoneCompletionRecoveryHint(completion, observation, currentChanged, completionCorrections);
1238
+ continue;
1239
+ }
1240
+ session.report.status = "paused";
1241
+ session.report.verified = false;
1242
+ session.report.verificationLevel = "none";
1243
+ session.report.controlOwner = "none";
1244
+ session.report.controlEpoch++;
1245
+ session.report.stopReason = "completion_unmet";
1246
+ session.report.errorCode = "PHONE_COMPLETION_UNMET";
1247
+ 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.";
1248
+ session.budget?.pause();
1249
+ await session.stream?.revoke();
1250
+ return this.publish(session);
1185
1251
  }
1186
1252
  session.report.message = decision.kind === "needsUser" ? decision.reason : decision.summary;
1187
1253
  if (decision.kind === "complete") {
1188
1254
  this.recordObservation(session, observation);
1189
- await this.readScreen(session, observation, input.goal, context, signal);
1255
+ 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
1256
  if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") return this.publish(session);
1191
1257
  }
1192
1258
  session.report.status = decision.kind === "needsUser" ? "needs_user" : "completed";
@@ -1411,6 +1477,58 @@ var PhoneRuntime = class {
1411
1477
  modelRequestLimit(session, context) {
1412
1478
  return Math.min(context.config.phone.maxModelRequests, (session.taskStart?.modelRequests ?? 0) + (session.report.task?.budget?.maxModelRequests ?? 120));
1413
1479
  }
1480
+ async readOutputFields(session, observation, fields, context, signal) {
1481
+ const epoch = session.report.controlEpoch;
1482
+ let reason;
1483
+ let values;
1484
+ this.guard(session, context);
1485
+ this.allowedScreen(session, observation);
1486
+ signal.throwIfAborted();
1487
+ if (observation.elements.some((node) => node.password)) reason = "password_field_visible";
1488
+ else if (session.report.modelRequests >= this.modelRequestLimit(session, context)) reason = "model_request_limit";
1489
+ else {
1490
+ session.report.modelRequests++;
1491
+ session.prediction = new AbortController();
1492
+ try {
1493
+ values = await measurePhonePhase("screen_reading", () => session.adapter.readFields({
1494
+ goal: session.report.task.goal,
1495
+ observation,
1496
+ allowedApps: session.device.allowedApps,
1497
+ appAccess: phoneAppAccess(session.device),
1498
+ history: []
1499
+ }, fields, AbortSignal.any([signal, session.prediction.signal])));
1500
+ } catch (error) {
1501
+ signal.throwIfAborted();
1502
+ reason = error instanceof PhoneError ? error.code : "screen_reading_failed";
1503
+ } finally {
1504
+ session.prediction = void 0;
1505
+ }
1506
+ }
1507
+ signal.throwIfAborted();
1508
+ this.guard(session, context);
1509
+ this.allowedScreen(session, observation);
1510
+ if (epoch !== session.report.controlEpoch || session.report.controlOwner !== "agent") return;
1511
+ for (const field of fields) {
1512
+ const raw = values?.[field.key];
1513
+ const value = raw?.trim() ? raw : void 0;
1514
+ const output = session.report.feedback.outputs.find((output) => output.key === field.key);
1515
+ Object.assign(output, {
1516
+ value: value || void 0,
1517
+ source: "screenshot",
1518
+ verification: value ? "unverified" : "unavailable",
1519
+ frameId: observation.frameId,
1520
+ capturedAt: observation.capturedAt,
1521
+ reason: value ? void 0 : reason ?? "screen_unreadable"
1522
+ });
1523
+ if (value) session.report.readings.push({
1524
+ source: "screenshot",
1525
+ verification: "unverified",
1526
+ text: [value],
1527
+ frameId: observation.frameId,
1528
+ capturedAt: observation.capturedAt
1529
+ });
1530
+ }
1531
+ }
1414
1532
  async readScreen(session, observation, goal, context, signal) {
1415
1533
  if (session.report.mock) return;
1416
1534
  const reading = {
@@ -1431,13 +1549,13 @@ var PhoneRuntime = class {
1431
1549
  session.report.modelRequests++;
1432
1550
  session.prediction = new AbortController();
1433
1551
  try {
1434
- const text = await session.adapter.readScreen({
1552
+ const text = await measurePhonePhase("screen_reading", () => session.adapter.readScreen({
1435
1553
  goal,
1436
1554
  observation,
1437
1555
  allowedApps: session.device.allowedApps,
1438
1556
  appAccess: phoneAppAccess(session.device),
1439
1557
  history: []
1440
- }, AbortSignal.any([signal, session.prediction.signal]));
1558
+ }, AbortSignal.any([signal, session.prediction.signal])));
1441
1559
  signal.throwIfAborted();
1442
1560
  this.guard(session, context);
1443
1561
  this.allowedScreen(session, observation);
@@ -1503,16 +1621,18 @@ var PhoneRuntime = class {
1503
1621
  session.trajectorySummary = session.trajectorySummary.slice(-12);
1504
1622
  }
1505
1623
  try {
1506
- await session.driver.execute(session.device.serial, action, observation, signal, settingsPage ? {
1624
+ await measurePhonePhase("dispatch", () => session.driver.execute(session.device.serial, action, observation, signal, settingsPage ? {
1507
1625
  settleMs: session.human ? 0 : 350,
1508
1626
  settingsPage
1509
1627
  } : session.human ? {
1510
1628
  settleMs: 0,
1511
1629
  ...resetTask ? { resetTask: true } : {}
1512
- } : void 0);
1630
+ } : void 0));
1513
1631
  step.dispatch = "completed";
1514
1632
  entry.dispatch = "completed";
1633
+ session.adapter.recordAction?.(action, entry.actor === "human" ? "human" : "completed");
1515
1634
  } catch (error) {
1635
+ session.adapter.reset?.();
1516
1636
  const textFailure = error instanceof PhoneError && ["PHONE_TEXT_INPUT_UNAVAILABLE", "PHONE_TEXT_INPUT_UNCONFIRMED"].includes(error.code);
1517
1637
  if (textFailure && error.code === "PHONE_TEXT_INPUT_UNAVAILABLE") {
1518
1638
  session.report.steps.pop();
@@ -1541,6 +1661,7 @@ var PhoneRuntime = class {
1541
1661
  this.openings.get(owner)?.abort();
1542
1662
  const session = this.sessions.get(owner);
1543
1663
  if (!session) return { status: "closed" };
1664
+ session.adapter.reset?.();
1544
1665
  session.controller.abort();
1545
1666
  session.prediction?.abort();
1546
1667
  session.human = void 0;
@@ -1570,6 +1691,8 @@ var PhoneRuntime = class {
1570
1691
  this.publish(session);
1571
1692
  await session.active?.catch(() => {});
1572
1693
  await session.io.catch(() => {});
1694
+ await this.releaseInput(session);
1695
+ session.adapter.reset?.();
1573
1696
  if (op === "close") this.repository.release(session.device.serial, session.lease);
1574
1697
  if (op !== "pause") await this.locationEnvironment?.releaseOwner(owner);
1575
1698
  if (op === "cancel") {
@@ -1584,6 +1707,12 @@ var PhoneRuntime = class {
1584
1707
  }
1585
1708
  return this.publish(session);
1586
1709
  }
1710
+ async releaseInput(session) {
1711
+ await session.driver.releaseInput?.().catch(() => log.warn({
1712
+ conversationId: session.report.owner,
1713
+ phase: "input_cleanup"
1714
+ }, "Phone input cleanup failed"));
1715
+ }
1587
1716
  async io(session, work) {
1588
1717
  const operation = session.io.catch(() => {}).then(async () => {
1589
1718
  session.ioBusy = true;
@@ -1599,7 +1728,8 @@ var PhoneRuntime = class {
1599
1728
  async observe(session, signal, forText = false) {
1600
1729
  return this.io(session, async () => {
1601
1730
  signal.throwIfAborted();
1602
- const observation = await (forText && session.driver.observeForText ? session.driver.observeForText : session.driver.observe).call(session.driver, session.device.serial, signal);
1731
+ const observe = forText && session.driver.observeForText ? session.driver.observeForText : session.driver.observe;
1732
+ const observation = await measurePhonePhase("observation", () => observe.call(session.driver, session.device.serial, signal));
1603
1733
  if (phoneAllowsApp(session.device, observation.package)) {
1604
1734
  if (Date.now() - session.viewedAt < 3e4 && !terminal.has(session.report.status)) session.frames.set(observation);
1605
1735
  } else session.frames.clear();
@@ -1647,6 +1777,7 @@ var PhoneRuntime = class {
1647
1777
  });
1648
1778
  }
1649
1779
  signal.throwIfAborted();
1780
+ if (waited) session.adapter.reset?.();
1650
1781
  return waited;
1651
1782
  }
1652
1783
  startMaintenance() {
@@ -1790,6 +1921,7 @@ var PhoneRuntime = class {
1790
1921
  this.publish(session);
1791
1922
  try {
1792
1923
  await session.stream?.revoke();
1924
+ await this.releaseInput(session);
1793
1925
  } catch (error) {
1794
1926
  await this.stop(session.report.owner, "cancel");
1795
1927
  throw error;
@@ -1870,6 +2002,7 @@ var PhoneRuntime = class {
1870
2002
  return this.liveStatus(owner, id, context, client);
1871
2003
  }
1872
2004
  if (input.op === "takeover" || input.op === "pause") {
2005
+ session.adapter.reset?.();
1873
2006
  if (input.op === "takeover" && session.report.mode !== "control") throw new PhoneError("PHONE_OBSERVE_ONLY", "This phone session only allows observation", 403);
1874
2007
  session.report.controlOwner = "none";
1875
2008
  session.report.controlEpoch++;
@@ -1880,6 +2013,7 @@ var PhoneRuntime = class {
1880
2013
  this.publish(session);
1881
2014
  await session.stream?.revoke();
1882
2015
  await session.io;
2016
+ await this.releaseInput(session);
1883
2017
  if (terminal.has(session.report.status) || session.report.steps.at(-1)?.dispatch === "unknown") {
1884
2018
  session.report.handoff = "idle";
1885
2019
  this.publish(session);
@@ -1902,6 +2036,7 @@ var PhoneRuntime = class {
1902
2036
  session.report.controlOwner = "none";
1903
2037
  session.report.controlEpoch++;
1904
2038
  await session.stream?.revoke();
2039
+ await this.releaseInput(session);
1905
2040
  session.report.status = "paused";
1906
2041
  session.report.stopReason = "user_paused";
1907
2042
  this.publish(session);
@@ -1914,6 +2049,7 @@ var PhoneRuntime = class {
1914
2049
  session.report.controlOwner = "none";
1915
2050
  this.publish(session);
1916
2051
  await session.stream?.revoke();
2052
+ await this.releaseInput(session);
1917
2053
  let observation;
1918
2054
  try {
1919
2055
  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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AQAAABwAAAABAAAAAAAAAAMAAAAEACQAJwAAAAEAAAAnAAAAAgAAABsAKQABAAAAKQAAAAEAAAAEAAAAAgAAABQAAAABAAAAGwAAAAEAAAAoAAAAAgAAABwAKAACAAAAHAAAAAIAAAAcABsAAgAAABwAJwACAAAAHAAcAAMAAAAcABwAHAAAAAEAAAABAAAAAQAAAAMAAAACAAAABAAkAAEAAAAFAAAAAgAAAA0AHAABAAAAEAAAAAEAAAASAAAAAgAAABwAEwACAAAAHAAUAAMAAAAlAAoAAAAAAAEAAAAqAAAAAgAAAAAABgAAAAEsAAotLXJlc2lkZW50AAY8aW5pdD4AJUFDVElPTl9BUkdVTUVOVF9TRVRfVEVYVF9DSEFSU0VRVUVOQ0UAAUkAA0lJSQACSUwAAUoAAUwAAkxJAANMSUkAAkxMAANMTEkAA0xMTAAETExMTAAETExMWgADTExaAAJMWgAbTGFpL3hvcGMvcGhvbmUvUGhvbmVVaUR1bXA7ADdMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZUluZm87ABpMYW5kcm9pZC9hcHAvVWlBdXRvbWF0aW9uOwAXTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsAE0xhbmRyb2lkL29zL0J1bmRsZTsAGkxhbmRyb2lkL29zL0hhbmRsZXJUaHJlYWQ7ABNMYW5kcm9pZC9vcy9Mb29wZXI7ABJMYW5kcm9pZC91dGlsL1htbDsAMkxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87ABpMZGFsdmlrL2Fubm90YXRpb24vVGhyb3dzOwAYTGphdmEvaW8vQnVmZmVyZWRSZWFkZXI7ABVMamF2YS9pby9JbnB1dFN0cmVhbTsAG0xqYXZhL2lvL0lucHV0U3RyZWFtUmVhZGVyOwAVTGphdmEvaW8vUHJpbnRTdHJlYW07ABBMamF2YS9pby9SZWFkZXI7ABZMamF2YS9pby9TdHJpbmdXcml0ZXI7ABBMamF2YS9pby9Xcml0ZXI7ABNMamF2YS9sYW5nL0Jvb2xlYW47ABhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsAEUxqYXZhL2xhbmcvQ2xhc3M7ABVMamF2YS9sYW5nL0V4Y2VwdGlvbjsAIUxqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwATTGphdmEvbGFuZy9JbnRlZ2VyOwAQTGphdmEvbGFuZy9NYXRoOwAhTGphdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb247ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwAZTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwASTGphdmEvbGFuZy9TeXN0ZW07ABJMamF2YS9sYW5nL1RocmVhZDsAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7ABJMamF2YS91dGlsL0FycmF5czsAEExqYXZhL3V0aWwvTGlzdDsAFUxvcmcvanNvbi9KU09OT2JqZWN0OwAeTG9yZy94bWxwdWxsL3YxL1htbFNlcmlhbGl6ZXI7ABBQaG9uZVVpRHVtcC5qYXZhAARUWVBFAAVVVEYtOAABVgACVkoAAlZMAANWTEwABFZMTEkAAVoAA1pJTAACWkwAAVsAEltMamF2YS9sYW5nL0NsYXNzOwATW0xqYXZhL2xhbmcvT2JqZWN0OwATW0xqYXZhL2xhbmcvU3RyaW5nOwABXQACXVsAI2FuZHJvaWQuYXBwLklVaUF1dG9tYXRpb25Db25uZWN0aW9uACJhbmRyb2lkLmFwcC5VaUF1dG9tYXRpb25Db25uZWN0aW9uADlhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25DbGllbnQAA2FwcAAGYXBwZW5kAAZhc0xpc3QACWF0dHJpYnV0ZQAGYmVmb3JlAAZib3R0b20ABmJvdW5kcwAFY2xhc3MACmNsZWFyQ2FjaGUACWNsaWNrYWJsZQAFY2xvc2UADGNvbmZpcm1hdGlvbgAHY29ubmVjdAAIY29udGFpbnMADGNvbnRlbnQtZGVzYwAKZGlzY29ubmVjdAAEZHVtcAAGZWRpdG9yAAtlbmREb2N1bWVudAAGZW5kVGFnAAZlcXVhbHMABWVycm9yAAlmaW5kRm9jdXMABWZsYWdzAAVmbHVzaAAFZm9jdXMAB2ZvY3VzZWQAB2Zvck5hbWUAEWdldEJvdW5kc0luU2NyZWVuAAhnZXRDaGlsZAANZ2V0Q2hpbGRDb3VudAAMZ2V0Q2xhc3NOYW1lABVnZXRDb250ZW50RGVzY3JpcHRpb24AFmdldERlY2xhcmVkQ29uc3RydWN0b3IAC2dldEluc3RhbmNlAAZnZXRJbnQACWdldExvb3BlcgANZ2V0TWFpbkxvb3BlcgAKZ2V0TWVzc2FnZQAJZ2V0TWV0aG9kAA5nZXRQYWNrYWdlTmFtZQAVZ2V0Um9vdEluQWN0aXZlV2luZG93AA5nZXRTZXJ2aWNlSW5mbwAJZ2V0U3RyaW5nAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQACaWQACGlkZW50aXR5AAJpbgAGaW52b2tlAAtpc0NsaWNrYWJsZQAKaXNFZGl0YWJsZQAJaXNFbmFibGVkAAlpc0ZvY3VzZWQACmlzUGFzc3dvcmQAD2lzVmlzaWJsZVRvVXNlcgAEbGVmdAAGbGVuZ3RoAARtYWluAANtYXgAA21pbgALbmV3SW5zdGFuY2UADW5ld1NlcmlhbGl6ZXIAB25vLXJvb3QABG5vZGUABW5vZGVzAAJvawACb3AAA291dAAHcGFja2FnZQAIcGFzc3dvcmQADXBlcmZvcm1BY3Rpb24AEXByZXBhcmVNYWluTG9vcGVyAAdwcmludGxuAANwdXQAD3B1dENoYXJTZXF1ZW5jZQAKcXVpdFNhZmVseQAIcmVhZExpbmUAB3JlY3ljbGUAC3Jlc291cmNlLWlkAApyZXNvdXJjZUlkAAVyaWdodAAJc2V0T3V0cHV0AA5zZXRTZXJ2aWNlSW5mbwAHc2V0VGV4dAAFc2xlZXAACHNuYXBzaG90AA5zdGFibGVTbmFwc2hvdAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABnRhcmdldAAEdGV4dAAIdG9TdHJpbmcAA3RvcAALdW5jb25maXJtZWQAC3Vuc3VwcG9ydGVkAAV2YWx1ZQAHdmFsdWVPZgAFd3JpdGUAA3htbAAWeG9wYy1waG9uZS1vYnNlcnZhdGlvbgCdAX5+RDh7ImJhY2tlbmQiOiJkZXgiLCJjb21waWxhdGlvbi1tb2RlIjoiZGVidWciLCJoYXMtY2hlY2tzdW1zIjpmYWxzZSwibWluLWFwaSI6MjQsInNoYS0xIjoiYTdhZDE4YTcwNDYwYjc5OWQwNDgyZTQ5N2MxMDlhNzViZjdmOTFkZSIsInZlcnNpb24iOiI4LjEwLjktZGV2In0AAgsBrgEcARgWAQAJAAAKAIGABIQZAQqcGQEKoBoBCtASAQmAHwEKrCUBCsQWAQr4FwEKxBgAAAEAAAAZIAAAAAAAAAAAAAAHAAAAAAAAAAEAAABQIAAAAgAAAFAgAAADAAAAUCAAAAQAAABQIAAABQAAAFAgAAAGAAAAUCAAAAcAAABQIAAAEAAAAAAAAAABAAAAAAAAAAEAAAC0AAAAcAAAAAIAAAArAAAAQAMAAAMAAAAxAAAA7AMAAAQAAAAJAAAAOAYAAAUAAABWAAAAgAYAAAYAAAABAAAAMAkAAAEgAAAJAAAAUAkAAAMgAAAJAAAAGhQAAAEQAAAdAAAAEBUAAAIgAAC0AAAABBYAAAQgAAABAAAAGSAAAAAgAAABAAAAIiAAAAMQAAABAAAAUCAAAAYgAAABAAAAWCAAAAAQAAABAAAAoCAAAA==";
@@ -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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AQAAABwAAAABAAAAAAAAAAMAAAAEACQAJwAAAAEAAAAnAAAAAgAAABsAKQABAAAAKQAAAAEAAAAEAAAAAgAAABQAAAABAAAAGwAAAAEAAAAoAAAAAgAAABwAKAACAAAAHAAAAAIAAAAcABsAAgAAABwAJwACAAAAHAAcAAMAAAAcABwAHAAAAAEAAAABAAAAAQAAAAMAAAACAAAABAAkAAEAAAAFAAAAAgAAAA0AHAABAAAAEAAAAAEAAAASAAAAAgAAABwAEwACAAAAHAAUAAMAAAAlAAoAAAAAAAEAAAAqAAAAAgAAAAAABgAAAAEsAAotLXJlc2lkZW50AAY8aW5pdD4AJUFDVElPTl9BUkdVTUVOVF9TRVRfVEVYVF9DSEFSU0VRVUVOQ0UAAUkAA0lJSQACSUwAAUoAAUwAAkxJAANMSUkAAkxMAANMTEkAA0xMTAAETExMTAAETExMWgADTExaAAJMWgAbTGFpL3hvcGMvcGhvbmUvUGhvbmVVaUR1bXA7ADdMYW5kcm9pZC9hY2Nlc3NpYmlsaXR5c2VydmljZS9BY2Nlc3NpYmlsaXR5U2VydmljZUluZm87ABpMYW5kcm9pZC9hcHAvVWlBdXRvbWF0aW9uOwAXTGFuZHJvaWQvZ3JhcGhpY3MvUmVjdDsAE0xhbmRyb2lkL29zL0J1bmRsZTsAGkxhbmRyb2lkL29zL0hhbmRsZXJUaHJlYWQ7ABNMYW5kcm9pZC9vcy9Mb29wZXI7ABJMYW5kcm9pZC91dGlsL1htbDsAMkxhbmRyb2lkL3ZpZXcvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZUluZm87ABpMZGFsdmlrL2Fubm90YXRpb24vVGhyb3dzOwAYTGphdmEvaW8vQnVmZmVyZWRSZWFkZXI7ABVMamF2YS9pby9JbnB1dFN0cmVhbTsAG0xqYXZhL2lvL0lucHV0U3RyZWFtUmVhZGVyOwAVTGphdmEvaW8vUHJpbnRTdHJlYW07ABBMamF2YS9pby9SZWFkZXI7ABZMamF2YS9pby9TdHJpbmdXcml0ZXI7ABBMamF2YS9pby9Xcml0ZXI7ABNMamF2YS9sYW5nL0Jvb2xlYW47ABhMamF2YS9sYW5nL0NoYXJTZXF1ZW5jZTsAEUxqYXZhL2xhbmcvQ2xhc3M7ABVMamF2YS9sYW5nL0V4Y2VwdGlvbjsAIUxqYXZhL2xhbmcvSWxsZWdhbFN0YXRlRXhjZXB0aW9uOwATTGphdmEvbGFuZy9JbnRlZ2VyOwAQTGphdmEvbGFuZy9NYXRoOwAhTGphdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb247ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwAZTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwASTGphdmEvbGFuZy9TeXN0ZW07ABJMamF2YS9sYW5nL1RocmVhZDsAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7ABJMamF2YS91dGlsL0FycmF5czsAEExqYXZhL3V0aWwvTGlzdDsAFUxvcmcvanNvbi9KU09OT2JqZWN0OwAeTG9yZy94bWxwdWxsL3YxL1htbFNlcmlhbGl6ZXI7ABBQaG9uZVVpRHVtcC5qYXZhAARUWVBFAAVVVEYtOAABVgACVkoAAlZMAANWTEwABFZMTEkAAVoAA1pJTAACWkwAAVsAEltMamF2YS9sYW5nL0NsYXNzOwATW0xqYXZhL2xhbmcvT2JqZWN0OwATW0xqYXZhL2xhbmcvU3RyaW5nOwABXQACXVsAI2FuZHJvaWQuYXBwLklVaUF1dG9tYXRpb25Db25uZWN0aW9uACJhbmRyb2lkLmFwcC5VaUF1dG9tYXRpb25Db25uZWN0aW9uADlhbmRyb2lkLnZpZXcuYWNjZXNzaWJpbGl0eS5BY2Nlc3NpYmlsaXR5SW50ZXJhY3Rpb25DbGllbnQAA2FwcAAGYXBwZW5kAAZhc0xpc3QACWF0dHJpYnV0ZQAGYmVmb3JlAAZib3R0b20ABmJvdW5kcwAFY2xhc3MACmNsZWFyQ2FjaGUACWNsaWNrYWJsZQAFY2xvc2UADGNvbmZpcm1hdGlvbgAHY29ubmVjdAAIY29udGFpbnMADGNvbnRlbnQtZGVzYwAKZGlzY29ubmVjdAAEZHVtcAAGZWRpdG9yAAtlbmREb2N1bWVudAAGZW5kVGFnAAZlcXVhbHMABWVycm9yAAlmaW5kRm9jdXMABWZsYWdzAAVmbHVzaAAFZm9jdXMAB2ZvY3VzZWQAB2Zvck5hbWUAEWdldEJvdW5kc0luU2NyZWVuAAhnZXRDaGlsZAANZ2V0Q2hpbGRDb3VudAAMZ2V0Q2xhc3NOYW1lABVnZXRDb250ZW50RGVzY3JpcHRpb24AFmdldERlY2xhcmVkQ29uc3RydWN0b3IAC2dldEluc3RhbmNlAAZnZXRJbnQACWdldExvb3BlcgANZ2V0TWFpbkxvb3BlcgAKZ2V0TWVzc2FnZQAJZ2V0TWV0aG9kAA5nZXRQYWNrYWdlTmFtZQAVZ2V0Um9vdEluQWN0aXZlV2luZG93AA5nZXRTZXJ2aWNlSW5mbwAJZ2V0U3RyaW5nAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQACaWQACGlkZW50aXR5AAJpbgAGaW52b2tlAAtpc0NsaWNrYWJsZQAKaXNFZGl0YWJsZQAJaXNFbmFibGVkAAlpc0ZvY3VzZWQACmlzUGFzc3dvcmQAD2lzVmlzaWJsZVRvVXNlcgAEbGVmdAAGbGVuZ3RoAARtYWluAANtYXgAA21pbgALbmV3SW5zdGFuY2UADW5ld1NlcmlhbGl6ZXIAB25vLXJvb3QABG5vZGUABW5vZGVzAAJvawACb3AAA291dAAHcGFja2FnZQAIcGFzc3dvcmQADXBlcmZvcm1BY3Rpb24AEXByZXBhcmVNYWluTG9vcGVyAAdwcmludGxuAANwdXQAD3B1dENoYXJTZXF1ZW5jZQAKcXVpdFNhZmVseQAIcmVhZExpbmUAB3JlY3ljbGUAC3Jlc291cmNlLWlkAApyZXNvdXJjZUlkAAVyaWdodAAJc2V0T3V0cHV0AA5zZXRTZXJ2aWNlSW5mbwAHc2V0VGV4dAAFc2xlZXAACHNuYXBzaG90AA5zdGFibGVTbmFwc2hvdAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABnRhcmdldAAEdGV4dAAIdG9TdHJpbmcAA3RvcAALdW5jb25maXJtZWQAC3Vuc3VwcG9ydGVkAAV2YWx1ZQAHdmFsdWVPZgAFd3JpdGUAA3htbAAWeG9wYy1waG9uZS1vYnNlcnZhdGlvbgCdAX5+RDh7ImJhY2tlbmQiOiJkZXgiLCJjb21waWxhdGlvbi1tb2RlIjoiZGVidWciLCJoYXMtY2hlY2tzdW1zIjpmYWxzZSwibWluLWFwaSI6MjQsInNoYS0xIjoiYTdhZDE4YTcwNDYwYjc5OWQwNDgyZTQ5N2MxMDlhNzViZjdmOTFkZSIsInZlcnNpb24iOiI4LjEwLjktZGV2In0AAgsBrgEcARgWAQAJAAAKAIGABIQZAQqcGQEKoBoBCtASAQmAHwEKrCUBCsQWAQr4FwEKxBgAAAEAAAAZIAAAAAAAAAAAAAAHAAAAAAAAAAEAAABQIAAAAgAAAFAgAAADAAAAUCAAAAQAAABQIAAABQAAAFAgAAAGAAAAUCAAAAcAAABQIAAAEAAAAAAAAAABAAAAAAAAAAEAAAC0AAAAcAAAAAIAAAArAAAAQAMAAAMAAAAxAAAA7AMAAAQAAAAJAAAAOAYAAAUAAABWAAAAgAYAAAYAAAABAAAAMAkAAAEgAAAJAAAAUAkAAAMgAAAJAAAAGhQAAAEQAAAdAAAAEBUAAAIgAAC0AAAABBYAAAQgAAABAAAAGSAAAAAgAAABAAAAIiAAAAMQAAABAAAAUCAAAAYgAAABAAAAWCAAAAAQAAABAAAAoCAAAA==";
3
3
  //#endregion
4
4
  export { PHONE_UI_DEX };