@xopcai/xopc 0.0.416 → 0.0.418

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 (807) hide show
  1. package/README.md +2 -2
  2. package/README.zh-CN.md +2 -2
  3. package/dist/browser-ext/dist/assets/{page-context-CVvmTWZb.js → page-context-BKnEwsOO.js} +2881 -1372
  4. package/dist/browser-ext/dist/background.js +1 -1
  5. package/dist/browser-ext/dist/sidepanel.html +1 -1
  6. package/dist/browser-ext/dist/sidepanel.js +481 -346
  7. package/dist/browser-ext/manifest.json +1 -1
  8. package/dist/extensions/telegram/xopc.extension.json +1 -1
  9. package/dist/gateway/static/root/assets/activity-YogQEteU.js +1 -0
  10. package/dist/gateway/static/root/assets/activity-store-DnqOM8GN.js +1 -0
  11. package/dist/gateway/static/root/assets/agent-avatar-dicebear-1UABT2KS.js +1 -0
  12. package/dist/gateway/static/root/assets/agent-avatar-display-Cy50vjbq.js +2 -0
  13. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-V4NX_cWz.js +1 -0
  14. package/dist/gateway/static/root/assets/agent-display-names-Bje7vfSn.js +1 -0
  15. package/dist/gateway/static/root/assets/agent-plugin-dialog-CQ5LLDMO.js +1 -0
  16. package/dist/gateway/static/root/assets/agents-O7mago-m.js +77 -0
  17. package/dist/gateway/static/root/assets/{agents-admin-api-B1p-ghg9.js → agents-admin-api-CyjykMEh.js} +2 -2
  18. package/dist/gateway/static/root/assets/agents-app-path-ciChvpCS.js +1 -0
  19. package/dist/gateway/static/root/assets/api-C1dxxDZx.js +1 -0
  20. package/dist/gateway/static/root/assets/api-Ddrs70xV.js +1 -0
  21. package/dist/gateway/static/root/assets/app-chrome-BeB4KgOf.js +1 -0
  22. package/dist/gateway/static/root/assets/app-link-CytZ5zkp.js +1 -0
  23. package/dist/gateway/static/root/assets/app-management-settings-panel-C1Zs-eha.js +1 -0
  24. package/dist/gateway/static/root/assets/appearance-settings-lIfGokbz.js +1 -0
  25. package/dist/gateway/static/root/assets/apps-page-CUvtsRYD.js +1 -0
  26. package/dist/gateway/static/root/assets/archive-Dz0hferG.js +1 -0
  27. package/dist/gateway/static/root/assets/{archive-plugin-B4btCsiV.js → archive-plugin-n5lPr79c.js} +1 -1
  28. package/dist/gateway/static/root/assets/arrow-left-D880xG-P.js +1 -0
  29. package/dist/gateway/static/root/assets/arrow-right-DSSvoX71.js +1 -0
  30. package/dist/gateway/static/root/assets/arrow-up-D5ZtR1QT.js +1 -0
  31. package/dist/gateway/static/root/assets/arrow-up-right-T72JbQ1Q.js +1 -0
  32. package/dist/gateway/static/root/assets/{attachment-preview-renderer-wzIchDSv.js → attachment-preview-renderer-DdOEgexg.js} +3 -3
  33. package/dist/gateway/static/root/assets/{attachment-process-heavy-Db4nTY5N.js → attachment-process-heavy-DGZZ-M85.js} +2 -2
  34. package/dist/gateway/static/root/assets/automation-api-Bld8blNl.js +1 -0
  35. package/dist/gateway/static/root/assets/automation-display-BcfZOQTC.js +2 -0
  36. package/dist/gateway/static/root/assets/{automations-page-yb1EL_3N.js → automations-page-oLsNzu_6.js} +1 -1
  37. package/dist/gateway/static/root/assets/automations-workspace-BgtYY2Mm.js +8 -0
  38. package/dist/gateway/static/root/assets/beta-badge-BnzdzIEl.js +1 -0
  39. package/dist/gateway/static/root/assets/{binary-plugins-DQT9e258.js → binary-plugins-D9VW7dWP.js} +2 -2
  40. package/dist/gateway/static/root/assets/{block-editor-B50rU9tL.js → block-editor-C477bTtO.js} +23 -23
  41. package/dist/gateway/static/root/assets/book-open-CCGtrT3R.js +1 -0
  42. package/dist/gateway/static/root/assets/bot-DjLkhyZL.js +1 -0
  43. package/dist/gateway/static/root/assets/box-DvYoGszj.js +1 -0
  44. package/dist/gateway/static/root/assets/braces-Cfmtagno.js +1 -0
  45. package/dist/gateway/static/root/assets/brand-logo-CgT9zQfr.js +1 -0
  46. package/dist/gateway/static/root/assets/briefcase-business-BsoCaI_t.js +1 -0
  47. package/dist/gateway/static/root/assets/browser-BLJWD7WI.js +8 -0
  48. package/dist/gateway/static/root/assets/{browser-automation-inputs-D6AccXaA.js → browser-automation-inputs-CCiYXxmh.js} +1 -1
  49. package/dist/gateway/static/root/assets/browser-automations-page-DIUNY94X.js +3 -0
  50. package/dist/gateway/static/root/assets/browser-control-api-Y3fvmeBk.js +6 -0
  51. package/dist/gateway/static/root/assets/browser-notification-delivery-DmE2FgGc.js +1 -0
  52. package/dist/gateway/static/root/assets/browser-settings-page-DjkGahlz.js +3 -0
  53. package/dist/gateway/static/root/assets/{button-aIC072nz.js → button-CnRSIP6m.js} +1 -1
  54. package/dist/gateway/static/root/assets/calendar-clock-D-quYVPe.js +1 -0
  55. package/dist/gateway/static/root/assets/calendar-days-hw_Y-g-s.js +1 -0
  56. package/dist/gateway/static/root/assets/capabilities-DAyA681v.js +1 -0
  57. package/dist/gateway/static/root/assets/capabilities-DRVXLssH.js +1 -0
  58. package/dist/gateway/static/root/assets/capabilities-page-DFW4Y0x8.js +2 -0
  59. package/dist/gateway/static/root/assets/capabilities-settings-panel-uOHSMQPZ.js +8 -0
  60. package/dist/gateway/static/root/assets/capability-header-actions-CTUCuBlW.js +1 -0
  61. package/dist/gateway/static/root/assets/capability-icon-DVoZxEgW.js +1 -0
  62. package/dist/gateway/static/root/assets/capability-links-DzQWK1Fh.js +1 -0
  63. package/dist/gateway/static/root/assets/channels-D2a69dSt.js +1 -0
  64. package/dist/gateway/static/root/assets/channels-routes-r2g-9DdC.js +1 -0
  65. package/dist/gateway/static/root/assets/chat-agents-api-D5nR_JVe.js +1 -0
  66. package/dist/gateway/static/root/assets/chat-chart-block-K2t333qv.js +2 -0
  67. package/dist/gateway/static/root/assets/chat-page-CG38tCHE.js +71 -0
  68. package/dist/gateway/static/root/assets/chat-page-zQeUaawJ.css +1 -0
  69. package/dist/gateway/static/root/assets/chat-terminal-dock-CkFG6mA3.js +35 -0
  70. package/dist/gateway/static/root/assets/chevron-left-DqFhpbvK.js +1 -0
  71. package/dist/gateway/static/root/assets/chevron-right-BweFrslA.js +1 -0
  72. package/dist/gateway/static/root/assets/chunk-D32TOXHM-DQIy-Baq.js +156 -0
  73. package/dist/gateway/static/root/assets/chunk-KS7C4IRE-CiwuuyV8.js +4 -0
  74. package/dist/gateway/static/root/assets/circle-BoO4YvTx.js +1 -0
  75. package/dist/gateway/static/root/assets/circle-alert-BEjgurr2.js +1 -0
  76. package/dist/gateway/static/root/assets/circle-pause-CN9jYH2s.js +1 -0
  77. package/dist/gateway/static/root/assets/circle-x-DFsCKeya.js +1 -0
  78. package/dist/gateway/static/root/assets/clock-3-DnrAnuyZ.js +1 -0
  79. package/dist/gateway/static/root/assets/cloud-C4-yfnnk.js +1 -0
  80. package/dist/gateway/static/root/assets/cloud-credits-B-nbtkqv.js +1 -0
  81. package/dist/gateway/static/root/assets/code-xml-DJtYhZUF.js +1 -0
  82. package/dist/gateway/static/root/assets/coins-DjP27vUx.js +1 -0
  83. package/dist/gateway/static/root/assets/command-palette-api-Do_66X1B.js +1 -0
  84. package/dist/gateway/static/root/assets/composer-payload-handoff-BU3B-C26.js +1 -0
  85. package/dist/gateway/static/root/assets/computer-settings-page-DBxOcMko.js +1 -0
  86. package/dist/gateway/static/root/assets/confirm-dialog-XGclfBqe.js +1 -0
  87. package/dist/gateway/static/root/assets/connected-providers-grid-Dmnu2zle.js +1 -0
  88. package/dist/gateway/static/root/assets/connector-filters-Cfcx9EA2.js +1 -0
  89. package/dist/gateway/static/root/assets/connector-service-page-rWpnchb3.js +1 -0
  90. package/dist/gateway/static/root/assets/connectors-api-DIBG72k4.js +1 -0
  91. package/dist/gateway/static/root/assets/connectors-page-DT_WrC1y.js +1 -0
  92. package/dist/gateway/static/root/assets/constants-DBtMsXdW.js +1 -0
  93. package/dist/gateway/static/root/assets/copy-text-row-CYIv7RfP.js +1 -0
  94. package/dist/gateway/static/root/assets/cpu-B247669f.js +1 -0
  95. package/dist/gateway/static/root/assets/database-CjjeZfRG.js +1 -0
  96. package/dist/gateway/static/root/assets/date-picker-CE-cZFCU.js +1 -0
  97. package/dist/gateway/static/root/assets/dependency-picker-7SpSfDSg.js +1 -0
  98. package/dist/gateway/static/root/assets/desktop-pet-lorocS9j.js +1 -0
  99. package/dist/gateway/static/root/assets/desktop-pet-narrative-CS8qJpNO.js +1 -0
  100. package/dist/gateway/static/root/assets/desktop-pet-settings-CEcohlZq.js +1 -0
  101. package/dist/gateway/static/root/assets/{desktop-pet-sprite-Bd-aOI7N.js → desktop-pet-sprite-D5YYq2zC.js} +1 -1
  102. package/dist/gateway/static/root/assets/dev-view-store-57HgVuZ6.js +1 -0
  103. package/dist/gateway/static/root/assets/device-pairing-wizard-CLCPuf4R.js +1 -0
  104. package/dist/gateway/static/root/assets/directory-picker-path-field-D4jMhpka.js +1 -0
  105. package/dist/gateway/static/root/assets/discussion-annotation-sync-BKjf9gWe.js +1 -0
  106. package/dist/gateway/static/root/assets/dist-CaUuvp8-.js +1 -0
  107. package/dist/gateway/static/root/assets/dist-DNCdG_qB.js +1 -0
  108. package/dist/gateway/static/root/assets/dist-DfWfZ9iu.js +1 -0
  109. package/dist/gateway/static/root/assets/dist-DusecO_p.js +1 -0
  110. package/dist/gateway/static/root/assets/docx-preview-CnIClbYi.js +20 -0
  111. package/dist/gateway/static/root/assets/earth-BMhZtzcj.js +1 -0
  112. package/dist/gateway/static/root/assets/echarts-runtime-QSmTlXOu.js +18 -0
  113. package/dist/gateway/static/root/assets/electron-env-DHOGevH3.js +1 -0
  114. package/dist/gateway/static/root/assets/extension-debug-page-BsK2LMXQ.js +1 -0
  115. package/dist/gateway/static/root/assets/extension-iframe-host-Dhkk5JV2.js +1 -0
  116. package/dist/gateway/static/root/assets/extension-marketplace-api-CVJPqJOB.js +1 -0
  117. package/dist/gateway/static/root/assets/extension-page-Brps2XDP.js +1 -0
  118. package/dist/gateway/static/root/assets/extension-paths-DvuaZJuy.js +1 -0
  119. package/dist/gateway/static/root/assets/extension-provider-Byrd8Sor.js +1 -0
  120. package/dist/gateway/static/root/assets/extension-settings-page-CHY68DpG.js +1 -0
  121. package/dist/gateway/static/root/assets/file-BqMS_3DT.js +1 -0
  122. package/dist/gateway/static/root/assets/file-archive-DanfQJNe.js +1 -0
  123. package/dist/gateway/static/root/assets/file-preview-surface-BlprUrIs.js +1 -0
  124. package/dist/gateway/static/root/assets/file-text-D12HbeVy.js +1 -0
  125. package/dist/gateway/static/root/assets/file-tree-CFlZnV3Y.js +1 -0
  126. package/dist/gateway/static/root/assets/file-tree-utils-DJs1faGv.js +1 -0
  127. package/dist/gateway/static/root/assets/files-BNL4kkSB.js +1 -0
  128. package/dist/gateway/static/root/assets/floating-ui.dom-seOukHzT.js +1 -0
  129. package/dist/gateway/static/root/assets/folder-CN-pC3XL.js +1 -0
  130. package/dist/gateway/static/root/assets/folder-kanban-CpLlFI1o.js +1 -0
  131. package/dist/gateway/static/root/assets/form-field-width-DJw_jULe.js +1 -0
  132. package/dist/gateway/static/root/assets/{gateway-config-swr-fQKBHBi1.js → gateway-config-swr-BAmUhiP1.js} +1 -1
  133. package/dist/gateway/static/root/assets/gateway-realtime-CsykKL4l.js +1 -0
  134. package/dist/gateway/static/root/assets/gateway-realtime-store-DQqMBruB.js +1 -0
  135. package/dist/gateway/static/root/assets/gateway-restart-Ch128Lrr.js +1 -0
  136. package/dist/gateway/static/root/assets/gateway-settings-BA5-Uuwx.js +1 -0
  137. package/dist/gateway/static/root/assets/{gateway-startup-retry-Cfwxof4k.js → gateway-startup-retry-CtUB3g6N.js} +1 -1
  138. package/dist/gateway/static/root/assets/gauge-C78eD2BA.js +1 -0
  139. package/dist/gateway/static/root/assets/git-branch-Dh9uxTot.js +1 -0
  140. package/dist/gateway/static/root/assets/global-defaults-api-CINf-C6a.js +2 -0
  141. package/dist/gateway/static/root/assets/heart-Cp4rgrqn.js +1 -0
  142. package/dist/gateway/static/root/assets/highlight-code-BH65IIbJ.js +1 -0
  143. package/dist/gateway/static/root/assets/highlighted-body-KQOG7T2V-DKGma5wI.js +1 -0
  144. package/dist/gateway/static/root/assets/history-DXH_9jsE.js +1 -0
  145. package/dist/gateway/static/root/assets/home-page-DaMFBYo1.js +2 -0
  146. package/dist/gateway/static/root/assets/image-Cwyalflz.js +1 -0
  147. package/dist/gateway/static/root/assets/image-generation-api-I_JgLL_m.js +1 -0
  148. package/dist/gateway/static/root/assets/imports-page-BWShtGRQ.js +1 -0
  149. package/dist/gateway/static/root/assets/index-DY2Y83b9.css +1 -0
  150. package/dist/gateway/static/root/assets/index-fKpEKELX.js +11 -0
  151. package/dist/gateway/static/root/assets/index.module-Cd9ENXfk.js +1 -0
  152. package/dist/gateway/static/root/assets/info-CDrmIZhb.js +1 -0
  153. package/dist/gateway/static/root/assets/install-connector-dialog-DU1Tz7B3.js +1 -0
  154. package/dist/gateway/static/root/assets/interaction-BdhHBbYa.js +1 -0
  155. package/dist/gateway/static/root/assets/is-masked-secret-DOkL5b_X.js +1 -0
  156. package/dist/gateway/static/root/assets/{jszip.min-DT31yWkU.js → jszip.min-Dj17eJqX.js} +1 -1
  157. package/dist/gateway/static/root/assets/key-round-DWbpyU2U.js +1 -0
  158. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-CdM4BQwp.js +1 -0
  159. package/dist/gateway/static/root/assets/languages-zXtNocoy.js +2 -0
  160. package/dist/gateway/static/root/assets/laptop-CI3hBVrl.js +1 -0
  161. package/dist/gateway/static/root/assets/layers-mJW7JJKm.js +1 -0
  162. package/dist/gateway/static/root/assets/layout-grid-CEVZdVFU.js +1 -0
  163. package/dist/gateway/static/root/assets/list-checks-BbsExAoq.js +1 -0
  164. package/dist/gateway/static/root/assets/list-filter-COkzTdOz.js +1 -0
  165. package/dist/gateway/static/root/assets/list-todo-CTVRto8O.js +1 -0
  166. package/dist/gateway/static/root/assets/list-tree-B0OMswgM.js +1 -0
  167. package/dist/gateway/static/root/assets/local-app-workbench-page-qPflPuQD.js +1 -0
  168. package/dist/gateway/static/root/assets/local-apps-Ck6kACsY.js +1 -0
  169. package/dist/gateway/static/root/assets/local-apps-page-CxyRVfjD.js +1 -0
  170. package/dist/gateway/static/root/assets/local-session-drafts-B9ZPwotC.js +1 -0
  171. package/dist/gateway/static/root/assets/{locale-store-B7s2Hb35.js → locale-store-lIXD1FMw.js} +1 -1
  172. package/dist/gateway/static/root/assets/lock-keyhole-DEK5kH0u.js +1 -0
  173. package/dist/gateway/static/root/assets/logs-page-CbY1N-zi.js +2 -0
  174. package/dist/gateway/static/root/assets/loopi-C09I2mNj.css +1 -0
  175. package/dist/gateway/static/root/assets/loopi-CNtmi9FU.js +1 -0
  176. package/dist/gateway/static/root/assets/management-settings-Diy12JfQ.js +1 -0
  177. package/dist/gateway/static/root/assets/{markdown-editor-phTQ0mox.js → markdown-editor-BuuGlcfG.js} +1 -1
  178. package/dist/gateway/static/root/assets/markdown-view-C-DHb3Io.css +1 -0
  179. package/dist/gateway/static/root/assets/markdown-view-CJt-i2Dp.js +324 -0
  180. package/dist/gateway/static/root/assets/{media-plugins-CIx1koXw.js → media-plugins-D_bR23mA.js} +1 -1
  181. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-Ur99GwOg.js +1 -0
  182. package/dist/gateway/static/root/assets/mermaid-render-oOellPHt.js +134 -0
  183. package/dist/gateway/static/root/assets/message-circle-Badhj-4D.js +1 -0
  184. package/dist/gateway/static/root/assets/message-square-fVE7Ghj1.js +1 -0
  185. package/dist/gateway/static/root/assets/message-square-plus-XP0tGdlV.js +1 -0
  186. package/dist/gateway/static/root/assets/{messages-BYq0cPbn.js → messages-DRR9N3HC.js} +1 -1
  187. package/dist/gateway/static/root/assets/messages-square-BckAJrEW.js +1 -0
  188. package/dist/gateway/static/root/assets/mic-CuUb7zc-.js +1 -0
  189. package/dist/gateway/static/root/assets/minimize-2-DtOGrlpo.js +1 -0
  190. package/dist/gateway/static/root/assets/mobile-pair-qr-CuIbmw5x.js +1 -0
  191. package/dist/gateway/static/root/assets/model-selector-DCYA_ntf.js +1 -0
  192. package/dist/gateway/static/root/assets/models-hub-cache-za2fWJLg.js +1 -0
  193. package/dist/gateway/static/root/assets/monitor-Af5eAvF7.js +1 -0
  194. package/dist/gateway/static/root/assets/mouse-pointer-2-DZ51Onvj.js +1 -0
  195. package/dist/gateway/static/root/assets/navigation-BkjnOw30.js +1 -0
  196. package/dist/gateway/static/root/assets/network-BUQLY1BV.js +1 -0
  197. package/dist/gateway/static/root/assets/new-session-preferences-gb411vZP.js +1 -0
  198. package/dist/gateway/static/root/assets/note-detail-panel-DBs1yHLy.js +5 -0
  199. package/dist/gateway/static/root/assets/note-image-lightbox-CivkB6LB.js +1 -0
  200. package/dist/gateway/static/root/assets/notes-api-C_458rv5.js +1 -0
  201. package/dist/gateway/static/root/assets/notes-page-DL3c-41a.js +8 -0
  202. package/dist/gateway/static/root/assets/number-input-El7Szeln.js +1 -0
  203. package/dist/gateway/static/root/assets/oauth-api-C3X9FLYw.js +1 -0
  204. package/dist/gateway/static/root/assets/oauth-authorization-window-o6URRos4.js +1 -0
  205. package/dist/gateway/static/root/assets/oauth-provider-connect-H81se_3n.js +1 -0
  206. package/dist/gateway/static/root/assets/package-wATCyihJ.js +1 -0
  207. package/dist/gateway/static/root/assets/page-context-capture-button-BkAlQ7cB.js +1 -0
  208. package/dist/gateway/static/root/assets/page-context-draft-ClLgaOaD.js +1 -0
  209. package/dist/gateway/static/root/assets/page-header-store-DH8K0xii.js +1 -0
  210. package/dist/gateway/static/root/assets/page-tabs-oeTY7z3_.js +1 -0
  211. package/dist/gateway/static/root/assets/panel-left-C8MqSXRZ.js +1 -0
  212. package/dist/gateway/static/root/assets/panel-right-CFGrHTsD.js +1 -0
  213. package/dist/gateway/static/root/assets/paperclip-f1HujQY1.js +1 -0
  214. package/dist/gateway/static/root/assets/pause-DuPxgSxk.js +1 -0
  215. package/dist/gateway/static/root/assets/{pdf-D4PI9qAw.js → pdf-EQHMWEbX.js} +3 -3
  216. package/dist/gateway/static/root/assets/pdf-runtime-JnUAvfIa.js +2 -0
  217. package/dist/gateway/static/root/assets/{pdf.worker.min-B4E34YdZ.js → pdf.worker.min-bpyjgR8v.js} +7 -7
  218. package/dist/gateway/static/root/assets/pencil-DmIY3Oa-.js +1 -0
  219. package/dist/gateway/static/root/assets/personal-avatar-BLtHt8fV.js +1 -0
  220. package/dist/gateway/static/root/assets/personal-avatar-BUCb7OiW.css +1 -0
  221. package/dist/gateway/static/root/assets/personal-page-B5DP3lO-.js +1 -0
  222. package/dist/gateway/static/root/assets/personal-proactivity-DaRnbB1f.js +1 -0
  223. package/dist/gateway/static/root/assets/personal-settings-panel-DjDc5Kaz.js +1 -0
  224. package/dist/gateway/static/root/assets/phone-dependencies-card-DISHarj8.js +1 -0
  225. package/dist/gateway/static/root/assets/phone-model-picker-u8YIQCgo.js +1 -0
  226. package/dist/gateway/static/root/assets/phone-settings-page-el3pT0PD.js +1 -0
  227. package/dist/gateway/static/root/assets/phone-workspace-store-fhnZrgy_.js +1 -0
  228. package/dist/gateway/static/root/assets/pin-off-BMRv-Kxr.js +1 -0
  229. package/dist/gateway/static/root/assets/play-kxZvpBg8.js +1 -0
  230. package/dist/gateway/static/root/assets/plug-DKYPEgkR.js +1 -0
  231. package/dist/gateway/static/root/assets/plug-zap-L8NMe3Sv.js +1 -0
  232. package/dist/gateway/static/root/assets/plugin-details-dialog-CTBs1Jde.js +1 -0
  233. package/dist/gateway/static/root/assets/plus-Q2yW6OE7.js +1 -0
  234. package/dist/gateway/static/root/assets/popover-select-DniHw2dy.js +1 -0
  235. package/dist/gateway/static/root/assets/power-ZI-pBczI.js +1 -0
  236. package/dist/gateway/static/root/assets/power-off-CwwQ7Gp7.js +1 -0
  237. package/dist/gateway/static/root/assets/preference-select-fields-D7oluyHN.js +1 -0
  238. package/dist/gateway/static/root/assets/preload-helper-Czpn1I53.js +1 -0
  239. package/dist/gateway/static/root/assets/preview-open-alternatives-CY_hjK4b.js +1 -0
  240. package/dist/gateway/static/root/assets/product-automation-feedback-DsUSqCOX.js +7 -0
  241. package/dist/gateway/static/root/assets/product-delivery-BU_H84jL.js +1 -0
  242. package/dist/gateway/static/root/assets/product-navigation-Co8pLbDP.js +1 -0
  243. package/dist/gateway/static/root/assets/product-open-page-xn9G4hSI.js +1 -0
  244. package/dist/gateway/static/root/assets/product-preview-content-DcoK-iZe.js +1 -0
  245. package/dist/gateway/static/root/assets/product-preview-modal-Ruw9WSKK.js +2 -0
  246. package/dist/gateway/static/root/assets/project-detail-page-BKvWLiMw.js +7 -0
  247. package/dist/gateway/static/root/assets/project-understanding-BCQr0AZ_.js +1 -0
  248. package/dist/gateway/static/root/assets/projects-page-D4g7bB7X.js +1 -0
  249. package/dist/gateway/static/root/assets/providers-api-CzVkFKFg.js +1 -0
  250. package/dist/gateway/static/root/assets/puzzle-BptcPjKI.js +1 -0
  251. package/dist/gateway/static/root/assets/recording-upload-0jxahBMo.js +1 -0
  252. package/dist/gateway/static/root/assets/refresh-button-bU_0NarN.js +1 -0
  253. package/dist/gateway/static/root/assets/{registry-api-BcfoLEna.js → registry-api-n8TwtJ_j.js} +2 -2
  254. package/dist/gateway/static/root/assets/remote-access-hub-cZpBi4Rk.js +1 -0
  255. package/dist/gateway/static/root/assets/rotate-ccw-JM1TBLpp.js +1 -0
  256. package/dist/gateway/static/root/assets/rotate-cw-LIg3Am9S.js +1 -0
  257. package/dist/gateway/static/root/assets/route-preload-B5UiReO7.js +2 -0
  258. package/dist/gateway/static/root/assets/runtime-health-D2TDFLLq.js +1 -0
  259. package/dist/gateway/static/root/assets/{runtime-tools-api-DesqGCnE.js → runtime-tools-api-D-8KjYK6.js} +1 -1
  260. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-MKlLFuow.js +1 -0
  261. package/dist/gateway/static/root/assets/save-DRDABU--.js +1 -0
  262. package/dist/gateway/static/root/assets/schema-form-v4N4lawq.js +1 -0
  263. package/dist/gateway/static/root/assets/schemas-CCWMleym.js +55 -0
  264. package/dist/gateway/static/root/assets/search-DA7gz22f.js +1 -0
  265. package/dist/gateway/static/root/assets/secret-input-BQvFXqzz.js +1 -0
  266. package/dist/gateway/static/root/assets/secret-input-labels-B5Jl5HqK.js +1 -0
  267. package/dist/gateway/static/root/assets/segmented-styles-Cqb91xsn.js +1 -0
  268. package/dist/gateway/static/root/assets/send-1f1Ntw6E.js +1 -0
  269. package/dist/gateway/static/root/assets/server-BlHCBjiE.js +1 -0
  270. package/dist/gateway/static/root/assets/service-recommendation-list-B1xuVT3N.js +1 -0
  271. package/dist/gateway/static/root/assets/{session-api-DdQnMwkl.js → session-api-CsCoI2im.js} +1 -1
  272. package/dist/gateway/static/root/assets/session-channel-icon-SsY70Z6t.js +1 -0
  273. package/dist/gateway/static/root/assets/session-identity-label-B7sgG1PE.js +1 -0
  274. package/dist/gateway/static/root/assets/session-manager-5l9q0cd5.js +16 -0
  275. package/dist/gateway/static/root/assets/sessions-page-DsLw2aMD.js +1 -0
  276. package/dist/gateway/static/root/assets/settings-2-D-csvaET.js +1 -0
  277. package/dist/gateway/static/root/assets/settings-advanced-gate-B5lQeVNi.js +1 -0
  278. package/dist/gateway/static/root/assets/settings-advanced-section-BqoVSko2.js +1 -0
  279. package/dist/gateway/static/root/assets/settings-form-draft-Dy10ldo8.js +1 -0
  280. package/dist/gateway/static/root/assets/settings-form-section-num14vSv.js +1 -0
  281. package/dist/gateway/static/root/assets/settings-loading-skeleton-BTqvr_Fw.js +1 -0
  282. package/dist/gateway/static/root/assets/settings-mode-store-CBsJ-Qg2.js +1 -0
  283. package/dist/gateway/static/root/assets/settings-page-DROUGyJl.js +1 -0
  284. package/dist/gateway/static/root/assets/settings-page-header-Bv-kQFTm.js +1 -0
  285. package/dist/gateway/static/root/assets/settings-page-layout-DHP6MrrL.js +1 -0
  286. package/dist/gateway/static/root/assets/settings-uiTATseT.js +1 -0
  287. package/dist/gateway/static/root/assets/setup-status-panel-MJE3B_LX.js +1 -0
  288. package/dist/gateway/static/root/assets/share-link-dialog-BJHRQVKC.js +1 -0
  289. package/dist/gateway/static/root/assets/share-preview-page-Bsrv_zOQ.js +2 -0
  290. package/dist/gateway/static/root/assets/shares-api-rtWVHA_d.js +1 -0
  291. package/dist/gateway/static/root/assets/shares-settings-CfIRv4uX.js +1 -0
  292. package/dist/gateway/static/root/assets/shield-B1sI_cxl.js +1 -0
  293. package/dist/gateway/static/root/assets/shield-check-BU58siTV.js +1 -0
  294. package/dist/gateway/static/root/assets/shield-off-2jsucUds.js +1 -0
  295. package/dist/gateway/static/root/assets/side-chat-shortcut-BIw-1TTD.js +1 -0
  296. package/dist/gateway/static/root/assets/skill-api-B_W1K3sv.js +1 -0
  297. package/dist/gateway/static/root/assets/skill-api-utils-C7V4JVXM.js +1 -0
  298. package/dist/gateway/static/root/assets/skill-list-api-BzlKXPsE.js +1 -0
  299. package/dist/gateway/static/root/assets/skill-reload-api-Cff2GgZb.js +1 -0
  300. package/dist/gateway/static/root/assets/skill-wire-pattern-BPpeIcCi.js +1 -0
  301. package/dist/gateway/static/root/assets/skills-page-DtBloYeU.js +2 -0
  302. package/dist/gateway/static/root/assets/sliders-horizontal-DqsYor6I.js +1 -0
  303. package/dist/gateway/static/root/assets/sliding-tab-list-DuQyViqe.js +1 -0
  304. package/dist/gateway/static/root/assets/smartphone-DSSsQFqA.js +1 -0
  305. package/dist/gateway/static/root/assets/{source-workspace-editor-BIvi89Zx.js → source-workspace-editor-kxosllTu.js} +1 -1
  306. package/dist/gateway/static/root/assets/sparkles-DHlfQFAF.js +1 -0
  307. package/dist/gateway/static/root/assets/specialists-xbB3xL9e.js +1 -0
  308. package/dist/gateway/static/root/assets/square-DMK_fB-3.js +1 -0
  309. package/dist/gateway/static/root/assets/square-pen-B8FsvqNu.js +1 -0
  310. package/dist/gateway/static/root/assets/square-terminal-K87bylpZ.js +1 -0
  311. package/dist/gateway/static/root/assets/star-BUWJqJ5c.js +1 -0
  312. package/dist/gateway/static/root/assets/stethoscope-DRqTAtjD.js +1 -0
  313. package/dist/gateway/static/root/assets/sticky-note-fzP7NAJq.js +1 -0
  314. package/dist/gateway/static/root/assets/store-SzD1Jvgm.js +1 -0
  315. package/dist/gateway/static/root/assets/system-settings-panel-BeQeUUMH.js +1 -0
  316. package/dist/gateway/static/root/assets/task-detail-page-Drrv-Hp0.js +2 -0
  317. package/dist/gateway/static/root/assets/task-result-evidence-D1Kyskm_.js +1 -0
  318. package/dist/gateway/static/root/assets/tasks-DRmd6sWt.js +1 -0
  319. package/dist/gateway/static/root/assets/terminal-oKqqZdiG.js +1 -0
  320. package/dist/gateway/static/root/assets/terminal-panel-store-5Fzctajw.js +1 -0
  321. package/dist/gateway/static/root/assets/theme-store-DW45fWYQ.js +1 -0
  322. package/dist/gateway/static/root/assets/timer-rCwGHjuO.js +1 -0
  323. package/dist/gateway/static/root/assets/tool-friendly-title-DGmi7rCQ.js +1 -0
  324. package/dist/gateway/static/root/assets/tracing-settings-page-B12u5D9A.js +1 -0
  325. package/dist/gateway/static/root/assets/trash-2-DusmjVPV.js +1 -0
  326. package/dist/gateway/static/root/assets/triangle-alert-2JXFNNKU.js +1 -0
  327. package/dist/gateway/static/root/assets/tunnel-api-DGO56LQU.js +1 -0
  328. package/dist/gateway/static/root/assets/understanding-activity-store-CTe6TFB0.js +1 -0
  329. package/dist/gateway/static/root/assets/understanding-refresh-store-mE9OKG6q.js +1 -0
  330. package/dist/gateway/static/root/assets/unlink-BEuthaaq.js +1 -0
  331. package/dist/gateway/static/root/assets/upload-rrb46c3c.js +1 -0
  332. package/dist/gateway/static/root/assets/usage-page-Ud2U9UG1.js +1 -0
  333. package/dist/gateway/static/root/assets/use-async-resource-BHFGZCY2.js +1 -0
  334. package/dist/gateway/static/root/assets/use-autosave-Cs2Ga_Y_.js +1 -0
  335. package/dist/gateway/static/root/assets/use-composer-attachments-BCbMj-MN.js +2 -0
  336. package/dist/gateway/static/root/assets/use-directory-picker-C4p7AgWY.js +1 -0
  337. package/dist/gateway/static/root/assets/use-file-preview-expanded-DSpCRXUW.js +2 -0
  338. package/dist/gateway/static/root/assets/use-media-query-ady-FgjK.js +1 -0
  339. package/dist/gateway/static/root/assets/use-personal-profile-BHL2AxWU.js +1 -0
  340. package/dist/gateway/static/root/assets/use-workspace-tree-CnmPZrpx.js +1 -0
  341. package/dist/gateway/static/root/assets/user-model-page-p5iPfnwl.js +2 -0
  342. package/dist/gateway/static/root/assets/user-round-C9jxPhMR.js +1 -0
  343. package/dist/gateway/static/root/assets/{vendor-codemirror-Qdcjid65.js → vendor-codemirror-aCQ0FcJT.js} +8 -8
  344. package/dist/gateway/static/root/assets/{vendor-swr-BIWyz7Rc.js → vendor-swr-CdRzEUwF.js} +1 -1
  345. package/dist/gateway/static/root/assets/video-B6V0GFss.js +1 -0
  346. package/dist/gateway/static/root/assets/voice-api-key-field-3gyc2UV3.js +1 -0
  347. package/dist/gateway/static/root/assets/voice-call-context-BM2A4bLz.js +1 -0
  348. package/dist/gateway/static/root/assets/{voice-config-api-BkUlN7GH.js → voice-config-api-Cda2uBIC.js} +1 -1
  349. package/dist/gateway/static/root/assets/voice-input-shortcut-events-DtYHsPLF.js +1 -0
  350. package/dist/gateway/static/root/assets/voice-transcribe-api-TInEfIYo.js +1 -0
  351. package/dist/gateway/static/root/assets/volume-2-BSJhAY97.js +1 -0
  352. package/dist/gateway/static/root/assets/wand-sparkles-CkSL-3Fy.js +1 -0
  353. package/dist/gateway/static/root/assets/{with-selector-aYPsXwdl.js → with-selector-xonYxPoM.js} +1 -1
  354. package/dist/gateway/static/root/assets/work-discovery-overlay-Dqu5CQCS.js +1 -0
  355. package/dist/gateway/static/root/assets/work-discovery-page-p-8ciZ0i.js +1 -0
  356. package/dist/gateway/static/root/assets/working-directory-picker-modal-DHl2cZY1.js +1 -0
  357. package/dist/gateway/static/root/assets/workspace-api-CtDbI6T7.js +2 -0
  358. package/dist/gateway/static/root/assets/workspace-editor-agent-store-B94Q2nN8.js +1 -0
  359. package/dist/gateway/static/root/assets/workspace-file-preview-dialog-CTIbUfKb.js +1 -0
  360. package/dist/gateway/static/root/assets/workspace-open-location-menu-BwxouqdZ.js +1 -0
  361. package/dist/gateway/static/root/assets/x-B_N4OPjy.js +1 -0
  362. package/dist/gateway/static/root/assets/{xlsx-CKkngM-o.js → xlsx-Cl_0CZaL.js} +11 -11
  363. package/dist/gateway/static/root/assets/xml-_d7dTN2Q.js +3 -0
  364. package/dist/gateway/static/root/assets/xopc-cloud-account-card-CFb-23rS.js +1 -0
  365. package/dist/gateway/static/root/assets/zap-dximCGjy.js +1 -0
  366. package/dist/gateway/static/root/index.html +266 -48
  367. package/dist/package.js +1 -1
  368. package/dist/src/activity/emitter.js +1 -2
  369. package/dist/src/activity/service.js +1 -2
  370. package/dist/src/agent/agent-manager.d.ts +1 -0
  371. package/dist/src/agent/agent-manager.js +3 -4
  372. package/dist/src/agent/background-review/run-background-review.js +1 -2
  373. package/dist/src/agent/context/execution-context.js +1 -2
  374. package/dist/src/agent/context/execution-scope.js +1 -2
  375. package/dist/src/agent/context/project-context.js +1 -2
  376. package/dist/src/agent/embedded/agent-profile-context.js +1 -2
  377. package/dist/src/agent/embedded/run-turn.js +2 -4
  378. package/dist/src/agent/embedded/sqlite-hydrating-session-manager.js +1 -2
  379. package/dist/src/agent/external-tools/cliProvider.js +1 -2
  380. package/dist/src/agent/external-tools/composio-provider.js +1 -2
  381. package/dist/src/agent/memory/compaction-promotion.js +1 -2
  382. package/dist/src/agent/orchestration/research-checkpoint.js +26 -31
  383. package/dist/src/agent/prompt/response-language.js +1 -2
  384. package/dist/src/agent/prompt/service-prompt-builder.js +3 -6
  385. package/dist/src/agent/prompt/system-prompt.js +1 -2
  386. package/dist/src/agent/service/direct-turn-helpers.js +1 -2
  387. package/dist/src/agent/service/process-direct-streaming.js +1 -2
  388. package/dist/src/agent/service/webchat-tts.js +1 -2
  389. package/dist/src/agent/service.js +2 -2
  390. package/dist/src/agent/service.types.d.ts +1 -0
  391. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  392. package/dist/src/agent/tool-manuals/computer.js +2 -0
  393. package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
  394. package/dist/src/agent/tool-manuals/phone.js +14 -4
  395. package/dist/src/agent/tool-manuals/xopc-configuration.d.ts +2 -2
  396. package/dist/src/agent/tool-manuals/xopc-configuration.js +27 -23
  397. package/dist/src/agent/tools/delegate-tool.js +2 -4
  398. package/dist/src/agent/tools/factory.d.ts +1 -0
  399. package/dist/src/agent/tools/factory.js +12 -8
  400. package/dist/src/agent/tools/personal-task-tool.js +1 -2
  401. package/dist/src/agent/tools/phone-use-tool.d.ts +1 -0
  402. package/dist/src/agent/tools/phone-use-tool.js +71 -4
  403. package/dist/src/agent/tools/research-checkpoint-tool.js +1 -2
  404. package/dist/src/agent/tools/xopc-use-tool.d.ts +1 -0
  405. package/dist/src/agent/tools/xopc-use-tool.js +7 -4
  406. package/dist/src/agent-catalog/repository.js +2 -3
  407. package/dist/src/agent-catalog/test-support.js +1 -2
  408. package/dist/src/agent-matching/selection-repository.js +1 -2
  409. package/dist/src/automations/capabilities/drafts.js +2 -4
  410. package/dist/src/bootstrap/application-state.js +1 -2
  411. package/dist/src/browser/automations/repository.js +1 -2
  412. package/dist/src/browser/native-messaging-host.js +2 -4
  413. package/dist/src/browser/providers/realtime-extension.js +1 -2
  414. package/dist/src/browser/recordings/service.js +1 -2
  415. package/dist/src/browser/setup/service.d.ts +9 -4
  416. package/dist/src/browser/setup/service.js +48 -19
  417. package/dist/src/chat-previews/store.js +1 -2
  418. package/dist/src/cli/commands/doctor/checks/automation-integrity.js +1 -2
  419. package/dist/src/cli/commands/doctor/checks/database-relations.js +1 -2
  420. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -2
  421. package/dist/src/cli/commands/doctor/checks/node-version.js +6 -6
  422. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -2
  423. package/dist/src/cli/commands/gateway/shared.js +1 -2
  424. package/dist/src/cli/commands/history.js +1 -2
  425. package/dist/src/cli/commands/project.js +1 -2
  426. package/dist/src/computer/diagnostics.d.ts +7 -7
  427. package/dist/src/computer/diagnostics.js +8 -2
  428. package/dist/src/computer/errors.js +9 -1
  429. package/dist/src/computer/evaluation.d.ts +4 -4
  430. package/dist/src/computer/keyboard.d.ts +1 -1
  431. package/dist/src/computer/keyboard.js +10 -2
  432. package/dist/src/computer/model-adapter.js +27 -7
  433. package/dist/src/config/gateway-bind.js +1 -2
  434. package/dist/src/config/schema.d.ts +5 -0
  435. package/dist/src/connectors/cli/lifecycle.js +1 -2
  436. package/dist/src/connectors/composio-managed-events.js +1 -2
  437. package/dist/src/connectors/connected-source-ingestion.js +1 -2
  438. package/dist/src/connectors/connected-source-understanding.js +2 -4
  439. package/dist/src/connectors/content-enrichment.js +1 -2
  440. package/dist/src/connectors/learning-coordinator.js +1 -2
  441. package/dist/src/connectors/runtime-adapter-registry.js +1 -2
  442. package/dist/src/daemon/constants.js +9 -14
  443. package/dist/src/daemon/index.js +1 -4
  444. package/dist/src/daemon/install-plan.js +1 -2
  445. package/dist/src/daemon/launchd.js +1 -2
  446. package/dist/src/daemon/schtasks.js +1 -2
  447. package/dist/src/daemon/service-audit.js +1 -2
  448. package/dist/src/daemon/service.js +1 -2
  449. package/dist/src/daemon/systemd.js +1 -2
  450. package/dist/src/discussions/analyzer.d.ts +3 -3
  451. package/dist/src/endpoint-tools/runtime.js +1 -2
  452. package/dist/src/execution-environments/subject.js +1 -2
  453. package/dist/src/extensions/agent-plugins/branding.js +2 -1
  454. package/dist/src/extensions/agent-plugins/cli-authorization.js +2 -1
  455. package/dist/src/extensions/agent-plugins/contained-path.d.ts +1 -0
  456. package/dist/src/extensions/agent-plugins/contained-path.js +29 -0
  457. package/dist/src/extensions/agent-plugins/mcp-adapter.js +2 -1
  458. package/dist/src/extensions/agent-plugins/resources.js +1 -1
  459. package/dist/src/extensions/agent-plugins/skill-catalog.js +2 -1
  460. package/dist/src/extensions/agent-plugins/source-catalog.js +1 -1
  461. package/dist/src/extensions/agent-plugins/store.js +2 -1
  462. package/dist/src/extensions/agent-plugins/validation.d.ts +1 -2
  463. package/dist/src/extensions/agent-plugins/validation.js +2 -25
  464. package/dist/src/gateway/client-ip.js +1 -2
  465. package/dist/src/gateway/file-space-service.js +1 -2
  466. package/dist/src/gateway/hono/app.js +2 -4
  467. package/dist/src/gateway/hono/middleware/auth.js +3 -6
  468. package/dist/src/gateway/hono/middleware/logger.js +1 -2
  469. package/dist/src/gateway/hono/middleware/public-device-rate-limit.js +1 -2
  470. package/dist/src/gateway/hono/middleware/scopes.js +1 -2
  471. package/dist/src/gateway/hono/middleware/strict-rate-limit.js +1 -2
  472. package/dist/src/gateway/hono/oauth-async.js +1 -2
  473. package/dist/src/gateway/hono/routes/browser-session.js +1 -2
  474. package/dist/src/gateway/hono/routes/browser.js +3 -6
  475. package/dist/src/gateway/hono/routes/cli-connectors.js +1 -2
  476. package/dist/src/gateway/hono/routes/composer-history.js +1 -2
  477. package/dist/src/gateway/hono/routes/config.js +1 -2
  478. package/dist/src/gateway/hono/routes/connectors.js +2 -4
  479. package/dist/src/gateway/hono/routes/context-sources.js +1 -2
  480. package/dist/src/gateway/hono/routes/device-pairing-approval.js +2 -4
  481. package/dist/src/gateway/hono/routes/device-push.js +1 -2
  482. package/dist/src/gateway/hono/routes/devices.js +4 -8
  483. package/dist/src/gateway/hono/routes/discussions.js +1 -2
  484. package/dist/src/gateway/hono/routes/endpoint-tools.js +1 -2
  485. package/dist/src/gateway/hono/routes/home.js +1 -2
  486. package/dist/src/gateway/hono/routes/interaction-state.js +1 -2
  487. package/dist/src/gateway/hono/routes/memory-learning.js +1 -2
  488. package/dist/src/gateway/hono/routes/personal-agent.js +1 -2
  489. package/dist/src/gateway/hono/routes/phone-dependencies.js +1 -6
  490. package/dist/src/gateway/hono/routes/phone-setup.js +71 -2
  491. package/dist/src/gateway/hono/routes/phone-wireless.d.ts +4 -0
  492. package/dist/src/gateway/hono/routes/phone-wireless.js +63 -0
  493. package/dist/src/gateway/hono/routes/phone.js +116 -21
  494. package/dist/src/gateway/hono/routes/projects.js +1 -2
  495. package/dist/src/gateway/hono/routes/public-gateway.js +1 -2
  496. package/dist/src/gateway/hono/routes/sessions.js +2 -4
  497. package/dist/src/gateway/hono/routes/shares.js +2 -4
  498. package/dist/src/gateway/hono/routes/tasks.js +1 -2
  499. package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -2
  500. package/dist/src/gateway/hono/routes/user-model.js +1 -2
  501. package/dist/src/gateway/host.js +4 -9
  502. package/dist/src/gateway/index.js +2 -6
  503. package/dist/src/gateway/listen.js +1 -2
  504. package/dist/src/gateway/next-turn-suggestions/service.js +1 -2
  505. package/dist/src/gateway/next-turn-suggestions/snapshot.js +1 -2
  506. package/dist/src/gateway/rate-limit/auth-policy.js +11 -7
  507. package/dist/src/gateway/rate-limit/buckets.js +220 -211
  508. package/dist/src/gateway/rate-limit/env-flags.js +1 -4
  509. package/dist/src/gateway/rate-limit/index.js +4 -13
  510. package/dist/src/gateway/runtime-config.js +2 -4
  511. package/dist/src/gateway/security/audit.js +1 -2
  512. package/dist/src/gateway/security/browser-session.js +1 -2
  513. package/dist/src/gateway/security/device-request-proof.d.ts +1 -2
  514. package/dist/src/gateway/security/device-request-proof.js +2 -4
  515. package/dist/src/gateway/security/gateway-scopes.js +2 -6
  516. package/dist/src/gateway/security/index.js +1 -4
  517. package/dist/src/gateway/security/loopback.js +6 -7
  518. package/dist/src/gateway/service/agent-runner.js +2 -4
  519. package/dist/src/gateway/service/app-context-access.js +1 -2
  520. package/dist/src/gateway/service/config-coordinator.d.ts +2 -0
  521. package/dist/src/gateway/service/run-gateway-agent.js +2 -4
  522. package/dist/src/gateway/service/session-input-coordinator.js +3 -6
  523. package/dist/src/gateway/service.js +16 -19
  524. package/dist/src/gateway/session-context-summary.js +2 -4
  525. package/dist/src/gateway/tailscale-auth.js +1 -2
  526. package/dist/src/gateway/ws-security.js +1 -2
  527. package/dist/src/infra/rate-limit/failure-limiter.js +90 -78
  528. package/dist/src/infra/rate-limit/index.js +3 -11
  529. package/dist/src/infra/rate-limit/keyed-store.js +47 -52
  530. package/dist/src/infra/rate-limit/rate-limiter.js +58 -55
  531. package/dist/src/infra/update-service-refresh.js +1 -2
  532. package/dist/src/knowledge/chunks.js +1 -4
  533. package/dist/src/knowledge/connected-knowledge-pipeline.js +3 -6
  534. package/dist/src/knowledge/ingestion-service.js +1 -2
  535. package/dist/src/knowledge-memory/repository.js +1 -2
  536. package/dist/src/local-apps/store.js +1 -2
  537. package/dist/src/media/session-references.js +1 -2
  538. package/dist/src/memory-learning/forget-capture.js +1 -2
  539. package/dist/src/memory-learning/forgotten-history.js +3 -6
  540. package/dist/src/memory-learning/service.js +1 -2
  541. package/dist/src/memory-learning/source-learning.js +3 -3
  542. package/dist/src/memory-learning/task-receipts.js +1 -2
  543. package/dist/src/memory-learning/work-candidate.d.ts +29 -0
  544. package/dist/src/memory-learning/work-candidate.js +31 -0
  545. package/dist/src/memory-learning/work-capture.d.ts +2 -29
  546. package/dist/src/memory-learning/work-capture.js +2 -30
  547. package/dist/src/memory-maintenance/service.js +1 -2
  548. package/dist/src/notes/agent-context.js +1 -2
  549. package/dist/src/notes/attachment-ref.js +4 -8
  550. package/dist/src/notes/note-attachment-sync.js +1 -2
  551. package/dist/src/notes/note-index-meta.js +7 -14
  552. package/dist/src/notes/note-markdown.js +7 -13
  553. package/dist/src/notes/service.js +3 -6
  554. package/dist/src/notes/store.js +2 -4
  555. package/dist/src/notifications/clarification.js +1 -2
  556. package/dist/src/notifications/service.js +1 -2
  557. package/dist/src/personal-agent/proactivity/repository.js +1 -2
  558. package/dist/src/personal-agent/proactivity/service.js +1 -2
  559. package/dist/src/personal-agent/prompt-context.js +1 -2
  560. package/dist/src/personal-agent/reply-composer.js +4 -5
  561. package/dist/src/personal-agent/repository.js +1 -2
  562. package/dist/src/personal-agent/request-delivery.js +1 -2
  563. package/dist/src/personal-agent/result-extraction.js +71 -71
  564. package/dist/src/personal-agent/service.js +1 -2
  565. package/dist/src/phone/adb-command.d.ts +1 -0
  566. package/dist/src/phone/adb-command.js +12 -0
  567. package/dist/src/phone/adb-driver.d.ts +4 -2
  568. package/dist/src/phone/adb-driver.js +44 -38
  569. package/dist/src/phone/cloud-adb-connection.d.ts +34 -0
  570. package/dist/src/phone/cloud-adb-connection.js +324 -0
  571. package/dist/src/phone/cloud-adb-writable.d.ts +3 -0
  572. package/dist/src/phone/cloud-adb-writable.js +21 -0
  573. package/dist/src/phone/cloud-adb.d.ts +3 -32
  574. package/dist/src/phone/cloud-adb.js +3 -259
  575. package/dist/src/phone/cloud-key-permissions.d.ts +2 -0
  576. package/dist/src/phone/cloud-key-permissions.js +66 -0
  577. package/dist/src/phone/cloud-phones.js +2 -1
  578. package/dist/src/phone/cloud-scrcpy.d.ts +1 -1
  579. package/dist/src/phone/cloud-scrcpy.js +3 -2
  580. package/dist/src/phone/contracts.d.ts +157 -1
  581. package/dist/src/phone/contracts.js +41 -5
  582. package/dist/src/phone/foreground.d.ts +1 -0
  583. package/dist/src/phone/foreground.js +18 -0
  584. package/dist/src/phone/live-state.d.ts +2 -0
  585. package/dist/src/phone/live-state.js +5 -0
  586. package/dist/src/phone/model-adapter.d.ts +6 -2
  587. package/dist/src/phone/model-adapter.js +79 -64
  588. package/dist/src/phone/reliability.d.ts +2 -2
  589. package/dist/src/phone/reliability.js +19 -6
  590. package/dist/src/phone/repository.d.ts +3 -1
  591. package/dist/src/phone/repository.js +9 -1
  592. package/dist/src/phone/runtime.d.ts +79 -3
  593. package/dist/src/phone/runtime.js +631 -41
  594. package/dist/src/phone/scrcpy.js +3 -2
  595. package/dist/src/phone/setup/service.d.ts +20 -67
  596. package/dist/src/phone/setup/service.js +52 -7
  597. package/dist/src/phone/task-feedback.d.ts +4 -0
  598. package/dist/src/phone/task-feedback.js +47 -0
  599. package/dist/src/phone/ui-dump-binary.d.ts +1 -0
  600. package/dist/src/phone/ui-dump-binary.js +4 -0
  601. package/dist/src/phone/wireless.d.ts +80 -0
  602. package/dist/src/phone/wireless.js +244 -0
  603. package/dist/src/projects/capabilities/write.js +1 -2
  604. package/dist/src/projects/project-service.js +1 -2
  605. package/dist/src/projects/workspace.js +1 -2
  606. package/dist/src/realtime/runtime.d.ts +3 -0
  607. package/dist/src/realtime/runtime.js +15 -2
  608. package/dist/src/remote-access/exposure-guards.js +1 -2
  609. package/dist/src/runtime-tools/catalog.d.ts +1 -1
  610. package/dist/src/runtime-tools/catalog.js +2 -2
  611. package/dist/src/session/config-store.js +1 -2
  612. package/dist/src/session/init-session-turn.js +1 -2
  613. package/dist/src/session/resolve-session.js +1 -2
  614. package/dist/src/session/store.js +2 -4
  615. package/dist/src/share/share-rate-limit.js +1 -2
  616. package/dist/src/share/share-url.js +1 -2
  617. package/dist/src/share/site-share-router.js +1 -2
  618. package/dist/src/storage/sqlite/activity-repository.js +2 -6
  619. package/dist/src/storage/sqlite/browser-tab-binding-repository.js +2 -6
  620. package/dist/src/storage/sqlite/clarification-wait-repository.js +9 -14
  621. package/dist/src/storage/sqlite/collaboration-rule-repository.js +3 -8
  622. package/dist/src/storage/sqlite/composer-input-history-repository.js +3 -8
  623. package/dist/src/storage/sqlite/config-repository.js +5 -9
  624. package/dist/src/storage/sqlite/connector-learning-repository.js +2 -6
  625. package/dist/src/storage/sqlite/connector-sync-policy-repository.js +2 -6
  626. package/dist/src/storage/sqlite/context-evidence-repository.js +3 -8
  627. package/dist/src/storage/sqlite/context-extraction-repository.js +3 -8
  628. package/dist/src/storage/sqlite/device-access-repository.js +16 -23
  629. package/dist/src/storage/sqlite/device-pairing-approval.js +2 -6
  630. package/dist/src/storage/sqlite/device-pairing-repository.js +5 -10
  631. package/dist/src/storage/sqlite/endpoint-principal-repository.js +2 -6
  632. package/dist/src/storage/sqlite/endpoint-session-binding-repository.js +2 -6
  633. package/dist/src/storage/sqlite/endpoint-tool-invocation-repository.js +2 -6
  634. package/dist/src/storage/sqlite/gateway-identity-repository.js +2 -6
  635. package/dist/src/storage/sqlite/home-attention-repository.js +2 -6
  636. package/dist/src/storage/sqlite/index.js +40 -72
  637. package/dist/src/storage/sqlite/interaction-state-repository.js +4 -10
  638. package/dist/src/storage/sqlite/knowledge-repository.js +3 -8
  639. package/dist/src/storage/sqlite/note-agent-context-repository.js +2 -6
  640. package/dist/src/storage/sqlite/notes-repository.js +4 -9
  641. package/dist/src/storage/sqlite/research-checkpoint-repository.js +3 -8
  642. package/dist/src/storage/sqlite/session-creation-repository.js +2 -4
  643. package/dist/src/storage/sqlite/session-task-plan-repository.js +9 -14
  644. package/dist/src/storage/sqlite/session-turn-replace-repository.js +5 -9
  645. package/dist/src/storage/sqlite/sidebar-layout-repository.js +9 -14
  646. package/dist/src/storage/sqlite/transcript-repository.js +6 -10
  647. package/dist/src/storage/sqlite/user-people-repository.js +3 -8
  648. package/dist/src/storage/sqlite/user-trust-repository.js +4 -9
  649. package/dist/src/tasks/execution-context.js +1 -2
  650. package/dist/src/tasks/home-query-service.js +1 -2
  651. package/dist/src/tasks/task-allocation-repository.js +1 -2
  652. package/dist/src/tasks/task-context-assembler.js +1 -2
  653. package/dist/src/tasks/task-handoff.js +2 -4
  654. package/dist/src/tasks/task-instruction-sequence.d.ts +1 -0
  655. package/dist/src/tasks/task-instruction-sequence.js +7 -0
  656. package/dist/src/tasks/task-language.js +1 -2
  657. package/dist/src/tasks/task-research-result.d.ts +1 -2
  658. package/dist/src/tasks/task-research-result.js +1 -3
  659. package/dist/src/tasks/task-result-delivery-repository.js +1 -1
  660. package/dist/src/tasks/task-result-delivery-service.js +3 -3
  661. package/dist/src/tasks/task-run-coordinator.js +3 -3
  662. package/dist/src/tasks/task-run-dispatcher.js +1 -2
  663. package/dist/src/tasks/task-value-metrics-service.js +1 -2
  664. package/dist/src/tui/backends/embedded-backend.js +1 -2
  665. package/dist/src/tui/tui-commands.js +1 -2
  666. package/dist/src/tunnel/registration-proof.js +1 -2
  667. package/dist/src/tunnel/tunnel-rate-limit.js +1 -2
  668. package/dist/src/user-context/access-policy.js +1 -2
  669. package/dist/src/user-context/domain.js +13 -18
  670. package/dist/src/user-context/extraction/registry.js +1 -2
  671. package/dist/src/user-context/interaction-state.js +1 -4
  672. package/dist/src/user-context/relationship-continuity.js +1 -2
  673. package/dist/src/user-context/sources/consent-repository.js +1 -2
  674. package/dist/src/user-context/trust-policy.js +8 -13
  675. package/dist/src/user-model/action-rule-suggestions.js +1 -2
  676. package/dist/src/user-model/bootstrap.js +1 -2
  677. package/dist/src/user-model/capture/executor.js +2 -4
  678. package/dist/src/user-model/capture/semantic.d.ts +1 -1
  679. package/dist/src/user-model/capture/semantic.js +1 -1
  680. package/dist/src/user-model/domain.js +30 -35
  681. package/dist/src/user-model/goals.js +1 -2
  682. package/dist/src/user-model/index.js +1 -4
  683. package/dist/src/user-model/observation-repository.js +1 -2
  684. package/dist/src/user-model/repository.js +1 -2
  685. package/dist/src/user-model/usage-policy.js +1 -2
  686. package/dist/src/voice/realtime/memory-context.js +1 -2
  687. package/dist/src/work-discovery/service.js +2 -4
  688. package/package.json +5 -5
  689. package/skills/tools/configure-xopc/SKILL.md +10 -3
  690. package/skills/tools/configure-xopc/references/browser/acceptance.md +4 -3
  691. package/skills/tools/configure-xopc/references/browser/chrome-extension.md +19 -15
  692. package/skills/tools/configure-xopc/references/browser/overview.md +14 -17
  693. package/skills/tools/configure-xopc/references/browser/permissions.md +3 -5
  694. package/skills/tools/configure-xopc/references/browser/troubleshooting.md +2 -2
  695. package/skills/tools/configure-xopc/references/phone/acceptance.md +5 -3
  696. package/skills/tools/configure-xopc/references/phone/dependencies.md +4 -4
  697. package/skills/tools/configure-xopc/references/phone/local.md +5 -5
  698. package/skills/tools/configure-xopc/references/phone/models.md +17 -14
  699. package/skills/tools/configure-xopc/references/phone/overview.md +20 -25
  700. package/skills/tools/configure-xopc/references/phone/troubleshooting.md +3 -0
  701. package/dist/gateway/static/root/assets/agent-avatar-dicebear-CufU7cqe.js +0 -1
  702. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DHDAcss8.js +0 -1
  703. package/dist/gateway/static/root/assets/agents-BV3dAoa0.js +0 -77
  704. package/dist/gateway/static/root/assets/app-management-settings-panel-D4-n1uBg.js +0 -1
  705. package/dist/gateway/static/root/assets/appearance-settings-Cgn4eNsX.js +0 -1
  706. package/dist/gateway/static/root/assets/apps-page-BOYzD7Zz.js +0 -1
  707. package/dist/gateway/static/root/assets/automation-display-BFN7zWBg.js +0 -2
  708. package/dist/gateway/static/root/assets/automations-workspace-J7LJ4RuV.js +0 -8
  709. package/dist/gateway/static/root/assets/browser-automations-page-BiQz6lJA.js +0 -3
  710. package/dist/gateway/static/root/assets/browser-settings-page-W9kuxBbE.js +0 -3
  711. package/dist/gateway/static/root/assets/capabilities-BlxF36t-.js +0 -1
  712. package/dist/gateway/static/root/assets/capabilities-page-iXe87MdG.js +0 -2
  713. package/dist/gateway/static/root/assets/capabilities-settings-panel-CRLSXe7Z.js +0 -8
  714. package/dist/gateway/static/root/assets/capability-header-actions-BMnbzHms.js +0 -1
  715. package/dist/gateway/static/root/assets/channels-CrRJkOKX.js +0 -1
  716. package/dist/gateway/static/root/assets/chat-terminal-dock-Bd3af4gL.js +0 -36
  717. package/dist/gateway/static/root/assets/chunk-KS7C4IRE-BvcCCgTW.js +0 -4
  718. package/dist/gateway/static/root/assets/cloud-credits-BMYMiiNn.js +0 -1
  719. package/dist/gateway/static/root/assets/computer-settings-page-DXfqy7xh.js +0 -1
  720. package/dist/gateway/static/root/assets/connector-service-page-B-cw0CPU.js +0 -1
  721. package/dist/gateway/static/root/assets/connectors-page-DbFxc0Fd.js +0 -1
  722. package/dist/gateway/static/root/assets/constants-DeXt1mV-.js +0 -1
  723. package/dist/gateway/static/root/assets/date-picker-CqzXevH6.js +0 -1
  724. package/dist/gateway/static/root/assets/dependency-picker-pgT4Gyaf.js +0 -1
  725. package/dist/gateway/static/root/assets/desktop-pet-settings-Dy_-i2L8.js +0 -1
  726. package/dist/gateway/static/root/assets/desktop-pet-zICeqw9c.js +0 -1
  727. package/dist/gateway/static/root/assets/device-pairing-wizard-ByGbxqkg.js +0 -1
  728. package/dist/gateway/static/root/assets/directory-picker-path-field-C-aQ7qoM.js +0 -1
  729. package/dist/gateway/static/root/assets/dist-C3DSFZCi.js +0 -1
  730. package/dist/gateway/static/root/assets/dist-CI_fqRk-.js +0 -1
  731. package/dist/gateway/static/root/assets/docx-preview-CajIk2FR.js +0 -20
  732. package/dist/gateway/static/root/assets/echarts-runtime-tcHc9TOS.js +0 -18
  733. package/dist/gateway/static/root/assets/electron-env-Dit0bHgy.js +0 -1
  734. package/dist/gateway/static/root/assets/extension-debug-page-2NwpYkS5.js +0 -1
  735. package/dist/gateway/static/root/assets/extension-page-y9J0z7_Q.js +0 -1
  736. package/dist/gateway/static/root/assets/extension-settings-page-BtowusUh.js +0 -1
  737. package/dist/gateway/static/root/assets/files-Bw4SBGdM.js +0 -1
  738. package/dist/gateway/static/root/assets/floating-ui.dom-B7uQOZZW.js +0 -1
  739. package/dist/gateway/static/root/assets/gateway-realtime-C52ghnBK.js +0 -1
  740. package/dist/gateway/static/root/assets/gateway-realtime-store-Bx9KCID-.js +0 -1
  741. package/dist/gateway/static/root/assets/gateway-settings-BYSKzUMR.js +0 -1
  742. package/dist/gateway/static/root/assets/highlight-code-Cz6eeDH5.js +0 -1
  743. package/dist/gateway/static/root/assets/highlighted-body-KQOG7T2V-BiAa8HKC.js +0 -1
  744. package/dist/gateway/static/root/assets/home-page-Cd1BjYHj.js +0 -2
  745. package/dist/gateway/static/root/assets/image-generation-api-gBFro48x.js +0 -1
  746. package/dist/gateway/static/root/assets/imports-page-BZQpXgjj.js +0 -1
  747. package/dist/gateway/static/root/assets/index-Cy16gQST.css +0 -1
  748. package/dist/gateway/static/root/assets/index-DRyGCING.js +0 -710
  749. package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-CYunR34k.js +0 -1
  750. package/dist/gateway/static/root/assets/languages-byq_L2Ae.js +0 -2
  751. package/dist/gateway/static/root/assets/local-app-workbench-page-B_Ac1lly.js +0 -1
  752. package/dist/gateway/static/root/assets/local-apps-page-w-J5bY02.js +0 -1
  753. package/dist/gateway/static/root/assets/local-apps-yys1VChX.js +0 -1
  754. package/dist/gateway/static/root/assets/local-session-drafts-iGX_6O0O.js +0 -1
  755. package/dist/gateway/static/root/assets/logs-page-Dnjvvx2i.js +0 -2
  756. package/dist/gateway/static/root/assets/management-settings-w1EDwgLW.js +0 -1
  757. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DISkHmEC.js +0 -1
  758. package/dist/gateway/static/root/assets/note-detail-panel-CNkxMTFU.js +0 -5
  759. package/dist/gateway/static/root/assets/note-image-lightbox-D5GH2wuC.js +0 -1
  760. package/dist/gateway/static/root/assets/notes-page-DZgKqFBG.js +0 -8
  761. package/dist/gateway/static/root/assets/number-input-DDeqHK-G.js +0 -1
  762. package/dist/gateway/static/root/assets/page-context-capture-button-DusR2Itk.js +0 -1
  763. package/dist/gateway/static/root/assets/pdf-runtime-DU_sMPjG.js +0 -2
  764. package/dist/gateway/static/root/assets/personal-page-CR5JFkQ9.js +0 -1
  765. package/dist/gateway/static/root/assets/personal-proactivity-BJcZ3Yhi.js +0 -1
  766. package/dist/gateway/static/root/assets/personal-settings-panel-B7undvlr.js +0 -1
  767. package/dist/gateway/static/root/assets/phone-model-picker-fWDltRUJ.js +0 -1
  768. package/dist/gateway/static/root/assets/phone-settings-page-CsOirAiy.js +0 -1
  769. package/dist/gateway/static/root/assets/plugin-details-dialog-BOBVIB3j.js +0 -1
  770. package/dist/gateway/static/root/assets/popover-select-DGKUpVsz.js +0 -1
  771. package/dist/gateway/static/root/assets/preload-helper-zJ_50EbN.js +0 -1
  772. package/dist/gateway/static/root/assets/preview-open-alternatives-CMxjsKSw.js +0 -1
  773. package/dist/gateway/static/root/assets/product-delivery-BqNm-8S5.js +0 -1
  774. package/dist/gateway/static/root/assets/product-open-page-CrlyJx5M.js +0 -1
  775. package/dist/gateway/static/root/assets/product-preview-content-B-Jhzi7W.js +0 -1
  776. package/dist/gateway/static/root/assets/project-detail-page-DoYUbtcI.js +0 -7
  777. package/dist/gateway/static/root/assets/projects-page-xGQd9oAZ.js +0 -1
  778. package/dist/gateway/static/root/assets/remote-access-hub-Gs0Xkws9.js +0 -1
  779. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bwg7U7TR.js +0 -1
  780. package/dist/gateway/static/root/assets/schema-form-ByzTNR_C.js +0 -1
  781. package/dist/gateway/static/root/assets/schemas-CObaziC7.js +0 -64
  782. package/dist/gateway/static/root/assets/session-manager-B_h0jlLb.js +0 -16
  783. package/dist/gateway/static/root/assets/sessions-page-XzK1ftbR.js +0 -1
  784. package/dist/gateway/static/root/assets/settings-advanced-gate-D_8Mvnog.js +0 -1
  785. package/dist/gateway/static/root/assets/settings-form-section-Brgd8IOV.js +0 -1
  786. package/dist/gateway/static/root/assets/settings-page-B6Mv02eg.js +0 -1
  787. package/dist/gateway/static/root/assets/settings-page-header-BWyxJKOG.js +0 -1
  788. package/dist/gateway/static/root/assets/settings-page-layout-DLHcS-0T.js +0 -1
  789. package/dist/gateway/static/root/assets/setup-status-panel-DSCj5yis.js +0 -1
  790. package/dist/gateway/static/root/assets/share-preview-page-DF8Of0aZ.js +0 -2
  791. package/dist/gateway/static/root/assets/shares-settings-DXNPe4Tl.js +0 -1
  792. package/dist/gateway/static/root/assets/skill-api-CKCDCHLq.js +0 -1
  793. package/dist/gateway/static/root/assets/skill-reload-api-BH0WF6Br.js +0 -1
  794. package/dist/gateway/static/root/assets/skills-page-DFWMVRW4.js +0 -2
  795. package/dist/gateway/static/root/assets/specialists-4bkS5rZ4.js +0 -1
  796. package/dist/gateway/static/root/assets/system-settings-panel-DB-ttubV.js +0 -1
  797. package/dist/gateway/static/root/assets/task-detail-page-BJY7c8wb.js +0 -2
  798. package/dist/gateway/static/root/assets/task-result-evidence-B-vt1BgK.js +0 -1
  799. package/dist/gateway/static/root/assets/tasks-TVRjEggr.js +0 -1
  800. package/dist/gateway/static/root/assets/tracing-settings-page-Dt51Z_ws.js +0 -1
  801. package/dist/gateway/static/root/assets/tunnel-api-Dok3t7Qe.js +0 -1
  802. package/dist/gateway/static/root/assets/usage-page-lJym5G7F.js +0 -1
  803. package/dist/gateway/static/root/assets/use-autosave-D4EMIB-V.js +0 -1
  804. package/dist/gateway/static/root/assets/user-model-page-BXdNkITp.js +0 -2
  805. package/dist/gateway/static/root/assets/voice-api-key-field-CO3KuanA.js +0 -1
  806. package/dist/gateway/static/root/assets/work-discovery-overlay-BJRtgQM3.js +0 -1
  807. package/dist/gateway/static/root/assets/xopc-cloud-account-card-CS-_GxHV.js +0 -1
@@ -3,7 +3,8 @@ import { spawnPhoneCommand } from "../process/phone-process.js";
3
3
  import { SCRCPY_SHA256, SCRCPY_VERSION } from "../runtime-tools/phone-dependency-catalog.js";
4
4
  import { readScrcpyServer, scrcpyServerPath } from "./scrcpy-assets.js";
5
5
  import { ScrcpyTextChannel } from "./scrcpy-text.js";
6
- import { AdbPhoneDriver, runAdb } from "./adb-driver.js";
6
+ import { runAdb } from "./adb-command.js";
7
+ import { readPhoneForeground } from "./foreground.js";
7
8
  import { randomBytes } from "node:crypto";
8
9
  import { connect } from "node:net";
9
10
  import { setTimeout as setTimeout$1 } from "node:timers/promises";
@@ -195,7 +196,7 @@ var LocalScrcpyProvider = class extends ScrcpyProvider {
195
196
  this.textOnly = textOnly;
196
197
  }
197
198
  foreground(signal) {
198
- return new AdbPhoneDriver(this.adb).foreground(this.serial, signal);
199
+ return readPhoneForeground(runAdb, this.adb, this.serial, signal);
199
200
  }
200
201
  async startTransport() {
201
202
  await readScrcpyServer();
@@ -4,8 +4,12 @@ import type { PhoneRuntime } from '../runtime.js';
4
4
  type Context = {
5
5
  conversationId: string;
6
6
  agentId: string;
7
+ canConfigure?: boolean;
8
+ runId?: string;
7
9
  };
8
10
  type Setup = Omit<PhoneSetupView, 'readiness' | 'stale' | 'settingsPath' | 'guidanceRefs'> & {
11
+ verificationRunId?: string;
12
+ automaticAttempts?: number;
9
13
  environmentRevision?: string;
10
14
  calls: number;
11
15
  owner?: string;
@@ -16,8 +20,17 @@ export interface PhoneSetupDeps {
16
20
  revision(context: Context, deviceId: string): string;
17
21
  connected(deviceId: string, signal?: AbortSignal): Promise<boolean>;
18
22
  leaseActive(deviceId: string): boolean;
23
+ setModel?: (agentId: string, ref: string) => Promise<void>;
24
+ models?: () => Array<{
25
+ ref: string;
26
+ name: string;
27
+ configured: boolean;
28
+ }>;
29
+ configure?: (enabled: boolean) => Promise<void>;
30
+ install?: (kind: 'adb' | 'scrcpy', repair: boolean) => Promise<void>;
31
+ registerLocal?: (serial: string, name?: string) => Promise<void>;
19
32
  }
20
- /** Setup only orchestrates existing settings; secrets and configuration writes stay in product forms. */
33
+ /** Bounded product actions automate setup; credentials remain in secure product forms. */
21
34
  export declare class PhoneSetupService {
22
35
  private readonly deps;
23
36
  constructor(deps: PhoneSetupDeps);
@@ -54,6 +67,7 @@ export declare class PhoneSetupService {
54
67
  settingsAllowed: boolean;
55
68
  }>;
56
69
  localDiscovery: Array<{
70
+ serial?: string;
57
71
  name: string;
58
72
  state: string;
59
73
  emulator: boolean;
@@ -67,74 +81,13 @@ export declare class PhoneSetupService {
67
81
  path: string;
68
82
  resourceVersion: string;
69
83
  }[];
84
+ models?: undefined;
70
85
  } | {
71
- message: string;
72
- id: string;
73
- conversationId: string;
74
- agentId: string;
75
- revision: number;
76
- state: "configuring" | "verifying" | "completed" | "needs_attention" | "cancelled";
77
- source?: "local" | "aliyun";
78
- error?: string;
79
- stale: boolean;
80
- settingsPath: string;
81
- readiness: {
82
- enabled: boolean;
83
- toolAllowed: boolean;
84
- model: {
85
- ref?: string;
86
- chatRef?: string;
87
- source?: "system" | "global" | "agent";
88
- supported: boolean;
89
- configured: boolean;
90
- };
91
- dependencies: Array<{
92
- kind: "adb" | "scrcpy";
93
- state: string;
94
- version?: string;
95
- canInstall: boolean;
96
- }>;
97
- devices: Array<{
98
- id: string;
99
- name: string;
100
- source: "local" | "aliyun";
101
- enabled: boolean;
102
- settingsAllowed: boolean;
103
- }>;
104
- localDiscovery: Array<{
105
- name: string;
106
- state: string;
107
- emulator: boolean;
108
- }>;
109
- diagnostic?: string;
110
- };
111
- checks: {
86
+ models: {
87
+ ref: string;
88
+ name: string;
112
89
  configured: boolean;
113
- read: boolean;
114
- operated: boolean;
115
- verified: boolean;
116
- released: boolean;
117
- };
118
- attempt?: {
119
- id: string;
120
- deviceId: string;
121
- modelRef: string;
122
- sessionId?: string;
123
- goal: string;
124
- completion: {
125
- appPackage: string;
126
- textAny: string[];
127
- requireChange: boolean;
128
- };
129
- maxActions: number;
130
- expiresAt: number;
131
- released: boolean;
132
- };
133
- guidanceRefs: Array<{
134
- sceneId: "phone";
135
- path: string;
136
- resourceVersion: string;
137
- }>;
90
+ }[];
138
91
  }>;
139
92
  source(context: Context, id: string, source: 'local' | 'aliyun', revision: number): Promise<PhoneSetupView>;
140
93
  begin(context: Context, id: string, deviceId: string, revision: number, signal?: AbortSignal): Promise<PhoneSetupView>;
@@ -1,7 +1,7 @@
1
1
  import { DurableState } from "../../storage/sqlite/durable-state.js";
2
2
  import { randomUUID } from "node:crypto";
3
3
  //#region src/phone/setup/service.ts
4
- /** Setup only orchestrates existing settings; secrets and configuration writes stay in product forms. */
4
+ /** Bounded product actions automate setup; credentials remain in secure product forms. */
5
5
  var PhoneSetupService = class {
6
6
  constructor(deps) {
7
7
  this.deps = deps;
@@ -31,7 +31,7 @@ var PhoneSetupService = class {
31
31
  return setup;
32
32
  }
33
33
  async view(context, setup) {
34
- const { owner: _owner, calls: _calls, environmentRevision: _revision, ...summary } = setup;
34
+ const { owner: _owner, calls: _calls, verificationRunId: _run, automaticAttempts: _attempts, environmentRevision: _revision, ...summary } = setup;
35
35
  const stale = Boolean(setup.attempt && setup.environmentRevision !== this.deps.revision(context, setup.attempt.deviceId));
36
36
  const interrupted = setup.state === "verifying" && (Date.now() > setup.attempt.expiresAt || Boolean(setup.attempt?.sessionId && !this.deps.runtime.status(setup.owner)));
37
37
  return {
@@ -66,7 +66,8 @@ var PhoneSetupService = class {
66
66
  if (command === "start") {
67
67
  if (!setup || ["completed", "cancelled"].includes(setup.state) && (!setup.attempt || setup.attempt.released)) setup = this.save(context, {
68
68
  id: randomUUID(),
69
- ...context,
69
+ conversationId: context.conversationId,
70
+ agentId: context.agentId,
70
71
  state: "configuring",
71
72
  revision: setup?.revision ?? 0,
72
73
  calls: 0,
@@ -80,6 +81,7 @@ var PhoneSetupService = class {
80
81
  });
81
82
  return this.view(context, setup);
82
83
  }
84
+ if (command === "models") return { models: this.deps.models?.() ?? [] };
83
85
  if (typeof args.setupId !== "string") throw new Error("setupId is required");
84
86
  setup = this.owned(context, args.setupId);
85
87
  if ([
@@ -87,10 +89,50 @@ var PhoneSetupService = class {
87
89
  "recheck",
88
90
  "verification_report"
89
91
  ].includes(command)) return this.view(context, setup);
90
- if (command === "begin_verification") return {
91
- ...await this.view(context, setup),
92
- message: "Choose the phone and approve the Settings-only test in the original conversation panel."
93
- };
92
+ if (command === "release") return this.release(context, setup.id);
93
+ if ([
94
+ "source",
95
+ "configure",
96
+ "set_model",
97
+ "install_dependency",
98
+ "register_local",
99
+ "begin_verification"
100
+ ].includes(command)) {
101
+ if (!context.canConfigure) throw new Error("PHONE_SETUP_INTERACTIVE_REQUIRED: Continue in an authorized interactive conversation.");
102
+ if (!Number.isInteger(args.expectedRevision) || args.expectedRevision !== setup.revision) throw new Error("PHONE_SETUP_CONFLICT: Re-read current progress.");
103
+ if (command === "source") {
104
+ if (args.source !== "local" && args.source !== "aliyun") throw new Error("Choose local or aliyun");
105
+ return this.source(context, setup.id, args.source, setup.revision);
106
+ }
107
+ if (command === "begin_verification") {
108
+ if (typeof args.deviceId !== "string") throw new Error("Select the exact registered phone with the user before testing");
109
+ return this.begin(context, setup.id, args.deviceId, setup.revision);
110
+ }
111
+ if (setup.attempt && !setup.attempt.released || ["completed", "cancelled"].includes(setup.state)) throw new Error("PHONE_SETUP_CONFLICT: Release the test or start a fresh setup first.");
112
+ if (command === "configure") {
113
+ if (!this.deps.configure || typeof args.enabled !== "boolean") throw new Error("Phone configuration is unavailable");
114
+ if ((await this.deps.inspect(context, setup.source)).enabled !== args.enabled) await this.deps.configure(args.enabled);
115
+ } else if (command === "set_model") {
116
+ if (!this.deps.setModel || typeof args.modelRef !== "string") throw new Error("Choose a compatible configured Phone model");
117
+ const current = (await this.deps.inspect(context, setup.source)).model;
118
+ if (current.ref !== args.modelRef) {
119
+ if (current.ref && current.supported && current.configured && args.replaceExisting !== true) throw new Error("PHONE_SETUP_MODEL_CHANGE_REQUIRED: A working Phone model is already configured. Confirm the intended replacement with the user.");
120
+ await this.deps.setModel(context.agentId, args.modelRef);
121
+ }
122
+ } else if (command === "install_dependency") {
123
+ if (!this.deps.install || args.kind !== "adb" && args.kind !== "scrcpy" || args.repair !== void 0 && typeof args.repair !== "boolean") throw new Error("Choose a managed Phone dependency");
124
+ if (args.kind === "adb" && setup.source === "aliyun") throw new Error("Cloud direct connections do not need local ADB");
125
+ const dependency = (await this.deps.inspect(context, setup.source)).dependencies.find((item) => item.kind === args.kind);
126
+ if (dependency?.state !== "ready" || args.repair === true) {
127
+ if (!dependency?.canInstall) throw new Error("PHONE_SETUP_INSTALL_UNAVAILABLE: Use an existing verified dependency or review runtime download settings.");
128
+ await this.deps.install(args.kind, args.repair === true);
129
+ }
130
+ } else {
131
+ if (!this.deps.registerLocal || setup.source !== "local" || typeof args.serial !== "string" || args.name !== void 0 && (typeof args.name !== "string" || args.name.length > 100)) throw new Error("Select a discovered local phone");
132
+ await this.deps.registerLocal(args.serial, args.name);
133
+ }
134
+ return this.view(context, this.owned(context, setup.id));
135
+ }
94
136
  if (command === "cancel") {
95
137
  setup = this.save(context, {
96
138
  ...setup,
@@ -111,6 +153,7 @@ var PhoneSetupService = class {
111
153
  }
112
154
  async begin(context, id, deviceId, revision, signal) {
113
155
  let setup = this.owned(context, id);
156
+ if (context.runId && setup.verificationRunId === context.runId && (setup.automaticAttempts ?? 0) >= 2) throw new Error("PHONE_SETUP_RETRY_LIMIT: Two attempts in this turn failed. Release control and report the external blocker; wait for a fresh user request.");
114
157
  if (setup.revision !== revision || setup.state === "cancelled" || setup.attempt && !setup.attempt.released) throw new Error("PHONE_SETUP_CONFLICT: Refresh progress and release the old test.");
115
158
  const environmentRevision = this.deps.revision(context, deviceId);
116
159
  const readiness = await this.deps.inspect(context, setup.source);
@@ -150,6 +193,8 @@ var PhoneSetupService = class {
150
193
  owner: `phone-setup:${latest.id}:${attempt.id}`,
151
194
  environmentRevision,
152
195
  calls: 0,
196
+ verificationRunId: context.runId,
197
+ automaticAttempts: context.runId && latest.verificationRunId === context.runId ? (latest.automaticAttempts ?? 0) + 1 : 1,
153
198
  checks: {
154
199
  configured: true,
155
200
  read: false,
@@ -0,0 +1,4 @@
1
+ import type { PhoneReport, PhoneTaskFeedback, PhoneRequestedOutput, PhoneObservation } from './contracts.js';
2
+ export declare function nativePhoneOutput(request: PhoneRequestedOutput, observation: PhoneObservation): PhoneTaskFeedback['outputs'][number];
3
+ /** Completion is evidence-based; dispatch and model summaries never establish success. */
4
+ export declare function updatePhoneFeedback(report: PhoneReport, usage: PhoneTaskFeedback['usage'], previous?: PhoneTaskFeedback): PhoneTaskFeedback | undefined;
@@ -0,0 +1,47 @@
1
+ //#region src/phone/task-feedback.ts
2
+ function nativePhoneOutput(request, observation) {
3
+ const selector = request.selector;
4
+ const nodes = selector ? observation.elements.filter((node) => !node.password && node.bounds[0] >= 0 && node.bounds[1] >= 0 && node.bounds[2] <= observation.width && node.bounds[3] <= observation.height && node.bounds[2] > node.bounds[0] && node.bounds[3] > node.bounds[1] && (!selector.resourceId || node.resourceId === selector.resourceId) && (!selector.text || node.text === selector.text) && (!selector.description || node.description === selector.description)) : [];
5
+ const value = nodes.length === 1 ? nodes[0].text || nodes[0].description : void 0;
6
+ return {
7
+ key: request.key,
8
+ ...value ? { value: value.slice(0, 4e3) } : {},
9
+ source: "native_ui",
10
+ verification: value ? "observed" : "unavailable",
11
+ frameId: observation.frameId,
12
+ capturedAt: observation.capturedAt,
13
+ ...!value ? { reason: nodes.length > 1 ? "ambiguous_native_output" : "native_output_unavailable" } : {}
14
+ };
15
+ }
16
+ /** Completion is evidence-based; dispatch and model summaries never establish success. */
17
+ function updatePhoneFeedback(report, usage, previous) {
18
+ if (!report.task || !previous) return void 0;
19
+ const inspection = report.status === "outcome_unknown" || report.status !== "running" && report.steps.at(-1)?.dispatch === "unknown";
20
+ const stopped = report.stopReason === "cancel" || report.status === "cancelled" || report.status === "closed";
21
+ const exhausted = [
22
+ "action_limit",
23
+ "task_action_limit",
24
+ "operation_timeout"
25
+ ].includes(report.stopReason ?? "") || ["PHONE_MODEL_LIMIT", "PHONE_ACTION_LIMIT"].includes(report.errorCode ?? "");
26
+ const outcome = inspection ? "needs_user" : stopped ? "cancelled" : exhausted ? "partial" : report.status === "running" ? "running" : report.status === "needs_user" ? "needs_user" : report.status === "failed" ? "failed" : report.status === "paused" ? "blocked" : report.verified && report.status === "completed" ? "completed" : "partial";
27
+ const outputs = previous.outputs;
28
+ const missing = outputs.filter((output) => output.verification === "unavailable").map((output) => `Output unavailable: ${output.key}`);
29
+ return {
30
+ ...previous,
31
+ outcome,
32
+ stopReason: report.stopReason,
33
+ verified: report.verified,
34
+ verificationLevel: report.verified ? report.verificationLevel : "none",
35
+ progress: {
36
+ completed: report.verified ? ["Declared UI completion conditions satisfied"] : [],
37
+ remaining: [...report.verified ? [] : ["Current goal has not been verified"], ...missing],
38
+ source: "runtime"
39
+ },
40
+ outputs,
41
+ evidence: structuredClone(report.readings ?? []),
42
+ usage,
43
+ nextAction: inspection || report.stopReason === "operation_timeout" ? "inspect" : exhausted && report.stopReason !== "action_limit" ? "user" : outcome === "needs_user" ? "user" : outcome === "running" ? "wait" : outcome === "completed" ? "done" : outcome === "partial" ? "replan" : outcome === "blocked" ? "inspect" : "user"
44
+ };
45
+ }
46
+ //#endregion
47
+ export { nativePhoneOutput, updatePhoneFeedback };
@@ -0,0 +1 @@
1
+ export declare const PHONE_UI_DEX = "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Q2hhclNlcXVlbmNlOwARTGphdmEvbGFuZy9DbGFzczsAFUxqYXZhL2xhbmcvRXhjZXB0aW9uOwAhTGphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb247ABNMamF2YS9sYW5nL0ludGVnZXI7ABBMamF2YS9sYW5nL01hdGg7ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwAZTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwASTGphdmEvbGFuZy9TeXN0ZW07ABJMamF2YS9sYW5nL1RocmVhZDsAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AB5Mb3JnL3htbHB1bGwvdjEvWG1sU2VyaWFsaXplcjsAHE5vIGFjdGl2ZSBhY2Nlc3NpYmlsaXR5IHJvb3QAEFBob25lVWlEdW1wLmphdmEABFRZUEUABVVURi04AAFWAAJWSgACVkwAA1ZMTAAEVkxMSQABWgABWwASW0xqYXZhL2xhbmcvQ2xhc3M7ABNbTGphdmEvbGFuZy9PYmplY3Q7ABNbTGphdmEvbGFuZy9TdHJpbmc7AAFdAAJdWwAjYW5kcm9pZC5hcHAuSVVpQXV0b21hdGlvbkNvbm5lY3Rpb24AImFuZHJvaWQuYXBwLlVpQXV0b21hdGlvbkNvbm5lY3Rpb24ABmFwcGVuZAAJYXR0cmlidXRlAAZib3R0b20ABmJvdW5kcwAFY2xhc3MACWNsaWNrYWJsZQAHY29ubmVjdAAMY29udGVudC1kZXNjAApkaXNjb25uZWN0AARkdW1wAAtlbmREb2N1bWVudAAGZW5kVGFnAAVmbGFncwAHZm9jdXNlZAAHZm9yTmFtZQARZ2V0Qm91bmRzSW5TY3JlZW4ACGdldENoaWxkAA1nZXRDaGlsZENvdW50AAxnZXRDbGFzc05hbWUAFWdldENvbnRlbnREZXNjcmlwdGlvbgAWZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcgAJZ2V0TG9vcGVyAAlnZXRNZXRob2QADmdldFBhY2thZ2VOYW1lABVnZXRSb290SW5BY3RpdmVXaW5kb3cADmdldFNlcnZpY2VJbmZvAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQAGaW52b2tlAAtpc0NsaWNrYWJsZQAJaXNGb2N1c2VkAAppc1Bhc3N3b3JkAA9pc1Zpc2libGVUb1VzZXIABGxlZnQABmxlbmd0aAAEbWFpbgADbWF4AANtaW4AC25ld0luc3RhbmNlAA1uZXdTZXJpYWxpemVyAARub2RlAAVub2RlcwADb3V0AAdwYWNrYWdlAAhwYXNzd29yZAAHcHJpbnRsbgAKcXVpdFNhZmVseQAHcmVjeWNsZQALcmVzb3VyY2UtaWQABXJpZ2h0AAlzZXRPdXRwdXQADnNldFNlcnZpY2VJbmZvAAVzbGVlcAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABHRleHQACHRvU3RyaW5nAAN0b3AABXZhbHVlAAd2YWx1ZU9mABZ4b3BjLXBob25lLW9ic2VydmF0aW9uAJ0Bfn5EOHsiYmFja2VuZCI6ImRleCIsImNvbXBpbGF0aW9uLW1vZGUiOiJkZWJ1ZyIsImhhcy1jaGVja3N1bXMiOmZhbHNlLCJtaW4tYXBpIjoyNCwic2hhLTEiOiJhN2FkMThhNzA0NjBiNzk5ZDA0ODJlNDk3YzEwOWE3NWJmN2Y5MWRlIiwidmVyc2lvbiI6IjguMTAuOS1kZXYifQACCgF4HAEYEQEABAAACgCBgATMDQEK5A0BCcQSAQqMDQAAAQAAAKYTAAAAAAAAAAAAAAIAAAAAAAAAAQAAAMgTAAACAAAAyBMAABAAAAAAAAAAAQAAAAAAAAABAAAAfAAAAHAAAAACAAAAIgAAAGACAAADAAAAIQAAAOgCAAAEAAAACAAAAHQEAAAFAAAANwAAALQEAAAGAAAAAQAAAGwGAAABIAAABAAAAIwGAAADIAAABAAAAFILAAABEAAAEgAAALwLAAACIAAAfAAAAFIMAAAEIAAAAQAAAKYTAAAAIAAAAQAAAK4TAAADEAAAAQAAAMgTAAAGIAAAAQAAANATAAAAEAAAAQAAAPATAAA=";
@@ -0,0 +1,4 @@
1
+ //#region src/phone/ui-dump-binary.ts
2
+ const PHONE_UI_DEX = "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Q2hhclNlcXVlbmNlOwARTGphdmEvbGFuZy9DbGFzczsAFUxqYXZhL2xhbmcvRXhjZXB0aW9uOwAhTGphdmEvbGFuZy9JbGxlZ2FsU3RhdGVFeGNlcHRpb247ABNMamF2YS9sYW5nL0ludGVnZXI7ABBMamF2YS9sYW5nL01hdGg7ABJMamF2YS9sYW5nL09iamVjdDsAEkxqYXZhL2xhbmcvU3RyaW5nOwAZTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwASTGphdmEvbGFuZy9TeXN0ZW07ABJMamF2YS9sYW5nL1RocmVhZDsAH0xqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjsAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AB5Mb3JnL3htbHB1bGwvdjEvWG1sU2VyaWFsaXplcjsAHE5vIGFjdGl2ZSBhY2Nlc3NpYmlsaXR5IHJvb3QAEFBob25lVWlEdW1wLmphdmEABFRZUEUABVVURi04AAFWAAJWSgACVkwAA1ZMTAAEVkxMSQABWgABWwASW0xqYXZhL2xhbmcvQ2xhc3M7ABNbTGphdmEvbGFuZy9PYmplY3Q7ABNbTGphdmEvbGFuZy9TdHJpbmc7AAFdAAJdWwAjYW5kcm9pZC5hcHAuSVVpQXV0b21hdGlvbkNvbm5lY3Rpb24AImFuZHJvaWQuYXBwLlVpQXV0b21hdGlvbkNvbm5lY3Rpb24ABmFwcGVuZAAJYXR0cmlidXRlAAZib3R0b20ABmJvdW5kcwAFY2xhc3MACWNsaWNrYWJsZQAHY29ubmVjdAAMY29udGVudC1kZXNjAApkaXNjb25uZWN0AARkdW1wAAtlbmREb2N1bWVudAAGZW5kVGFnAAVmbGFncwAHZm9jdXNlZAAHZm9yTmFtZQARZ2V0Qm91bmRzSW5TY3JlZW4ACGdldENoaWxkAA1nZXRDaGlsZENvdW50AAxnZXRDbGFzc05hbWUAFWdldENvbnRlbnREZXNjcmlwdGlvbgAWZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcgAJZ2V0TG9vcGVyAAlnZXRNZXRob2QADmdldFBhY2thZ2VOYW1lABVnZXRSb290SW5BY3RpdmVXaW5kb3cADmdldFNlcnZpY2VJbmZvAAdnZXRUZXh0ABVnZXRWaWV3SWRSZXNvdXJjZU5hbWUACWhpZXJhcmNoeQAGaW52b2tlAAtpc0NsaWNrYWJsZQAJaXNGb2N1c2VkAAppc1Bhc3N3b3JkAA9pc1Zpc2libGVUb1VzZXIABGxlZnQABmxlbmd0aAAEbWFpbgADbWF4AANtaW4AC25ld0luc3RhbmNlAA1uZXdTZXJpYWxpemVyAARub2RlAAVub2RlcwADb3V0AAdwYWNrYWdlAAhwYXNzd29yZAAHcHJpbnRsbgAKcXVpdFNhZmVseQAHcmVjeWNsZQALcmVzb3VyY2UtaWQABXJpZ2h0AAlzZXRPdXRwdXQADnNldFNlcnZpY2VJbmZvAAVzbGVlcAAFc3RhcnQADXN0YXJ0RG9jdW1lbnQACHN0YXJ0VGFnAAlzdWJzdHJpbmcABHRleHQACHRvU3RyaW5nAAN0b3AABXZhbHVlAAd2YWx1ZU9mABZ4b3BjLXBob25lLW9ic2VydmF0aW9uAJ0Bfn5EOHsiYmFja2VuZCI6ImRleCIsImNvbXBpbGF0aW9uLW1vZGUiOiJkZWJ1ZyIsImhhcy1jaGVja3N1bXMiOmZhbHNlLCJtaW4tYXBpIjoyNCwic2hhLTEiOiJhN2FkMThhNzA0NjBiNzk5ZDA0ODJlNDk3YzEwOWE3NWJmN2Y5MWRlIiwidmVyc2lvbiI6IjguMTAuOS1kZXYifQACCgF4HAEYEQEABAAACgCBgATMDQEK5A0BCcQSAQqMDQAAAQAAAKYTAAAAAAAAAAAAAAIAAAAAAAAAAQAAAMgTAAACAAAAyBMAABAAAAAAAAAAAQAAAAAAAAABAAAAfAAAAHAAAAACAAAAIgAAAGACAAADAAAAIQAAAOgCAAAEAAAACAAAAHQEAAAFAAAANwAAALQEAAAGAAAAAQAAAGwGAAABIAAABAAAAIwGAAADIAAABAAAAFILAAABEAAAEgAAALwLAAACIAAAfAAAAFIMAAAEIAAAAQAAAKYTAAAAIAAAAQAAAK4TAAADEAAAAQAAAMgTAAAGIAAAAQAAANATAAAAEAAAAQAAAPATAAA=";
3
+ //#endregion
4
+ export { PHONE_UI_DEX };
@@ -0,0 +1,80 @@
1
+ import { runAdb } from './adb-command.js';
2
+ import { type DiscoveredPhone, type PhoneDevice } from './contracts.js';
3
+ type Command = typeof runAdb;
4
+ export type WirelessService = {
5
+ name: string;
6
+ host: string;
7
+ port: number;
8
+ kind: 'pairing' | 'connect';
9
+ };
10
+ export type WirelessStatus = 'waiting' | 'pairing' | 'paired' | 'connecting' | 'connected' | 'timeout' | 'error' | 'cancelled';
11
+ export type WirelessSession = {
12
+ id: string;
13
+ status: WirelessStatus;
14
+ expiresAt: number;
15
+ qrPayload?: string;
16
+ device?: DiscoveredPhone;
17
+ errorCode?: string;
18
+ };
19
+ export declare function validateWirelessHost(host: string): string;
20
+ export declare function parseWirelessServices(output: string): WirelessService[];
21
+ /** Pairing credentials are ephemeral; only verified device identities may be registered. */
22
+ export declare class WirelessPhones {
23
+ private command;
24
+ private intervalMs;
25
+ private lifetimeMs;
26
+ private controller;
27
+ private sessions;
28
+ private identities;
29
+ constructor(command?: Command, intervalMs?: number, lifetimeMs?: number);
30
+ services(path: string, signal?: AbortSignal): Promise<WirelessService[]>;
31
+ discovery(path: string, signal?: AbortSignal): Promise<{
32
+ mdns: boolean;
33
+ services: WirelessService[];
34
+ }>;
35
+ known(serial: string): {
36
+ guid: string;
37
+ hardwareSerial: string;
38
+ host: string;
39
+ port: number;
40
+ };
41
+ private view;
42
+ get(owner: string, id: string): WirelessSession;
43
+ cancel(owner: string, id: string): void;
44
+ close(): void;
45
+ create(owner: string, path: string, input?: {
46
+ host: string;
47
+ pairingPort: number;
48
+ code: string;
49
+ connectPort?: number;
50
+ }): WirelessSession;
51
+ private run;
52
+ connect(path: string, endpoint: {
53
+ host: string;
54
+ port: number;
55
+ }, signal?: AbortSignal, expected?: {
56
+ guid: string;
57
+ hardwareSerial?: string;
58
+ }): Promise<{
59
+ device: DiscoveredPhone;
60
+ wireless: {
61
+ host: string;
62
+ port: number;
63
+ hardwareSerial: string;
64
+ guid: string;
65
+ };
66
+ }>;
67
+ reconnect(path: string, wireless: NonNullable<PhoneDevice['wireless']>, signal?: AbortSignal, endpoint?: {
68
+ host: string;
69
+ port: number;
70
+ }): Promise<{
71
+ device: DiscoveredPhone;
72
+ wireless: {
73
+ host: string;
74
+ port: number;
75
+ hardwareSerial: string;
76
+ guid: string;
77
+ };
78
+ }>;
79
+ }
80
+ export {};
@@ -0,0 +1,244 @@
1
+ import { PhoneError, init_contracts } from "./contracts.js";
2
+ import { runAdb } from "./adb-command.js";
3
+ import { parseAdbDevices } from "./adb-driver.js";
4
+ import { randomBytes, randomUUID } from "node:crypto";
5
+ import { isIP } from "node:net";
6
+ import { setTimeout } from "node:timers/promises";
7
+ //#region src/phone/wireless.ts
8
+ init_contracts();
9
+ function validateWirelessHost(host) {
10
+ if (isIP(host) !== 4 || !/^(10\.|192\.168\.|172\.(1[6-9]|2\d|3[01])\.|169\.254\.)/.test(host)) throw new PhoneError("PHONE_WIRELESS_ADDRESS", "Enter the phone’s private IPv4 address on the Gateway network");
11
+ return host;
12
+ }
13
+ function parseWirelessServices(output) {
14
+ return output.split(/\r?\n/).flatMap((line) => {
15
+ const match = /^\s*(\S+)\s+_adb-tls-(pairing|connect)\._tcp\.?\s+(\d+\.\d+\.\d+\.\d+):(\d+)\s*$/.exec(line);
16
+ if (!match) return [];
17
+ const port = Number(match[4]);
18
+ try {
19
+ validateWirelessHost(match[3]);
20
+ } catch {
21
+ return [];
22
+ }
23
+ return port > 0 && port <= 65535 ? [{
24
+ name: match[1].replace(/\._adb-tls-(?:pairing|connect)\._tcp(?:\.local)?\.?$/, ""),
25
+ kind: match[2],
26
+ host: match[3],
27
+ port
28
+ }] : [];
29
+ });
30
+ }
31
+ /** Pairing credentials are ephemeral; only verified device identities may be registered. */
32
+ var WirelessPhones = class {
33
+ controller = new AbortController();
34
+ sessions = /* @__PURE__ */ new Map();
35
+ identities = /* @__PURE__ */ new Map();
36
+ constructor(command = runAdb, intervalMs = 1500, lifetimeMs = 9e4) {
37
+ this.command = command;
38
+ this.intervalMs = intervalMs;
39
+ this.lifetimeMs = lifetimeMs;
40
+ }
41
+ async services(path, signal) {
42
+ signal = AbortSignal.any([this.controller.signal, ...signal ? [signal] : []]);
43
+ return parseWirelessServices((await this.command(path, ["mdns", "services"], signal, 5e3)).toString());
44
+ }
45
+ async discovery(path, signal) {
46
+ await this.command(path, ["version"], signal, 5e3);
47
+ try {
48
+ const check = (await this.command(path, ["mdns", "check"], signal, 5e3)).toString();
49
+ const mdns = !/unavailable|disabled|not available|not running|error/i.test(check);
50
+ return {
51
+ mdns,
52
+ services: mdns ? await this.services(path, signal) : []
53
+ };
54
+ } catch {
55
+ signal?.throwIfAborted();
56
+ return {
57
+ mdns: false,
58
+ services: []
59
+ };
60
+ }
61
+ }
62
+ known(serial) {
63
+ return this.identities.get(serial);
64
+ }
65
+ view(session) {
66
+ return {
67
+ id: session.id,
68
+ status: session.status,
69
+ expiresAt: session.expiresAt,
70
+ ...session.status === "waiting" ? { qrPayload: session.qrPayload } : {},
71
+ device: session.device,
72
+ errorCode: session.errorCode
73
+ };
74
+ }
75
+ get(owner, id) {
76
+ const session = this.sessions.get(id);
77
+ if (!session || session.owner !== owner) throw new PhoneError("PHONE_PAIRING_NOT_FOUND", "Pairing session expired", 404);
78
+ return this.view(session);
79
+ }
80
+ cancel(owner, id) {
81
+ this.get(owner, id);
82
+ const session = this.sessions.get(id);
83
+ session.controller.abort();
84
+ session.secret = "";
85
+ session.qrPayload = void 0;
86
+ session.status = "cancelled";
87
+ this.sessions.delete(id);
88
+ }
89
+ close() {
90
+ this.controller.abort();
91
+ this.controller = new AbortController();
92
+ for (const session of this.sessions.values()) session.controller.abort();
93
+ this.sessions.clear();
94
+ this.identities.clear();
95
+ }
96
+ create(owner, path, input) {
97
+ if (input) validateWirelessHost(input.host);
98
+ for (const [id, session] of this.sessions) if (session.owner === owner || session.expiresAt < Date.now()) {
99
+ session.controller.abort();
100
+ session.secret = "";
101
+ this.sessions.delete(id);
102
+ }
103
+ if (this.sessions.size >= 8) throw new PhoneError("PHONE_PAIRING_BUSY", "Too many pairing sessions", 409);
104
+ const name = `studio-${randomBytes(8).toString("hex")}`;
105
+ const secret = input?.code ?? randomBytes(16).toString("hex");
106
+ const session = {
107
+ id: randomUUID(),
108
+ owner,
109
+ path,
110
+ name: input ? void 0 : name,
111
+ secret,
112
+ qrPayload: input ? void 0 : `WIFI:T:ADB;S:${name};P:${secret};;`,
113
+ status: input ? "pairing" : "waiting",
114
+ paired: false,
115
+ expiresAt: Date.now() + this.lifetimeMs,
116
+ controller: new AbortController(),
117
+ host: input?.host,
118
+ connectPort: input?.connectPort
119
+ };
120
+ this.sessions.set(session.id, session);
121
+ session.task = this.run(session, input?.pairingPort);
122
+ return this.view(session);
123
+ }
124
+ async run(session, pairingPort) {
125
+ const deadline = AbortSignal.timeout(Math.max(1, session.expiresAt - Date.now()));
126
+ const signal = AbortSignal.any([session.controller.signal, deadline]);
127
+ try {
128
+ while (!signal.aborted) {
129
+ const services = await this.services(session.path, signal).catch(() => {
130
+ signal.throwIfAborted();
131
+ return [];
132
+ });
133
+ if (!session.paired) {
134
+ const pair = pairingPort && session.host ? {
135
+ host: session.host,
136
+ port: pairingPort
137
+ } : services.find((item) => item.kind === "pairing" && item.name === session.name);
138
+ if (pair) {
139
+ session.status = "pairing";
140
+ const output = (await this.command(session.path, [
141
+ "pair",
142
+ `${pair.host}:${pair.port}`,
143
+ session.secret
144
+ ], signal, 25e3)).toString();
145
+ if (!/Successfully paired/i.test(output)) throw new PhoneError("PHONE_PAIRING_FAILED", "Pairing failed");
146
+ signal.throwIfAborted();
147
+ session.pairedGuid = /\[guid=([^\]]+)\]/i.exec(output)?.[1];
148
+ session.paired = true;
149
+ session.host = pair.host;
150
+ session.status = "paired";
151
+ session.secret = "";
152
+ session.qrPayload = void 0;
153
+ }
154
+ }
155
+ if (session.paired) {
156
+ const candidates = session.connectPort ? [{
157
+ host: session.host,
158
+ port: session.connectPort
159
+ }] : services.filter((item) => item.kind === "connect" && item.host === session.host && (!session.pairedGuid || item.name === session.pairedGuid || item.name.startsWith(`${session.pairedGuid}-`)));
160
+ for (const endpoint of candidates) {
161
+ session.status = "connecting";
162
+ try {
163
+ const result = await this.connect(session.path, endpoint, signal, session.pairedGuid ? { guid: session.pairedGuid } : void 0);
164
+ signal.throwIfAborted();
165
+ session.device = result.device;
166
+ session.status = "connected";
167
+ return;
168
+ } catch {
169
+ signal.throwIfAborted();
170
+ session.status = "paired";
171
+ }
172
+ }
173
+ }
174
+ await setTimeout(this.intervalMs, void 0, { signal });
175
+ }
176
+ } catch (error) {
177
+ if (session.controller.signal.aborted) return;
178
+ session.status = deadline.aborted ? "timeout" : "error";
179
+ session.errorCode = deadline.aborted ? session.paired ? "PHONE_CONNECT_TIMEOUT" : "PHONE_PAIRING_TIMEOUT" : error instanceof PhoneError ? error.code : "PHONE_PAIRING_FAILED";
180
+ } finally {
181
+ session.secret = "";
182
+ session.qrPayload = void 0;
183
+ }
184
+ }
185
+ async connect(path, endpoint, signal, expected) {
186
+ signal = AbortSignal.any([this.controller.signal, ...signal ? [signal] : []]);
187
+ validateWirelessHost(endpoint.host);
188
+ if (!Number.isInteger(endpoint.port) || endpoint.port < 1 || endpoint.port > 65535) throw new PhoneError("PHONE_WIRELESS_PORT", "Enter a valid connection port");
189
+ const serial = `${endpoint.host}:${endpoint.port}`;
190
+ const output = (await this.command(path, ["connect", serial], signal, 1e4)).toString();
191
+ if (!/^(?:already )?connected to /im.test(output)) throw new PhoneError("PHONE_CONNECT_FAILED", "Unable to connect; check wireless debugging and connection port");
192
+ const devices = parseAdbDevices((await this.command(path, ["devices", "-l"], signal)).toString());
193
+ let device = devices.find((item) => item.serial === serial && item.state === "device");
194
+ if (!device) {
195
+ const names = (await this.services(path, signal)).filter((item) => item.kind === "connect" && item.host === endpoint.host && item.port === endpoint.port).map((item) => item.name);
196
+ device = devices.find((item) => item.state === "device" && names.some((name) => item.serial === `${name}._adb-tls-connect._tcp` || item.serial === `${name}._adb-tls-connect._tcp.local.`));
197
+ }
198
+ if (!device) throw new PhoneError("PHONE_DEVICE_OFFLINE", "Phone is not online and authorized");
199
+ const hardwareSerial = (await this.command(path, [
200
+ "-s",
201
+ device.serial,
202
+ "shell",
203
+ "getprop",
204
+ "ro.serialno"
205
+ ], signal)).toString().trim();
206
+ const guid = (await this.command(path, [
207
+ "-s",
208
+ device.serial,
209
+ "shell",
210
+ "getprop",
211
+ "persist.adb.wifi.guid"
212
+ ], signal)).toString().trim();
213
+ if (!hardwareSerial || !guid || hardwareSerial.length > 200 || guid.length > 200 || expected && (expected.hardwareSerial && expected.hardwareSerial !== hardwareSerial || expected.guid !== guid)) throw new PhoneError("PHONE_WIRELESS_IDENTITY", "Phone identity changed; pair the intended device again");
214
+ signal?.throwIfAborted();
215
+ const wireless = {
216
+ host: endpoint.host,
217
+ port: endpoint.port,
218
+ hardwareSerial,
219
+ guid
220
+ };
221
+ if (this.identities.size >= 100) this.identities.delete(this.identities.keys().next().value);
222
+ this.identities.set(device.serial, wireless);
223
+ return {
224
+ device,
225
+ wireless
226
+ };
227
+ }
228
+ async reconnect(path, wireless, signal, endpoint) {
229
+ signal = AbortSignal.any([this.controller.signal, ...signal ? [signal] : []]);
230
+ if (endpoint) return this.connect(path, endpoint, signal, wireless);
231
+ const candidates = (await this.services(path, signal).catch(() => {
232
+ signal?.throwIfAborted();
233
+ return [];
234
+ })).filter((item) => item.kind === "connect" && (item.name === wireless.guid || item.name.startsWith(`${wireless.guid}-`)));
235
+ for (const item of [...candidates, wireless]) try {
236
+ return await this.connect(path, item, signal, wireless);
237
+ } catch {
238
+ signal?.throwIfAborted();
239
+ }
240
+ throw new PhoneError("PHONE_RECONNECT_FAILED", "Enable wireless debugging on the same network, or enter its current connection address");
241
+ }
242
+ };
243
+ //#endregion
244
+ export { WirelessPhones, parseWirelessServices, validateWirelessHost };