@xopcai/xopc 0.0.433 → 0.0.435

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/README.md +5 -5
  2. package/README.zh-CN.md +5 -5
  3. package/dist/browser-ext/dist/sidepanel.js +11 -0
  4. package/dist/browser-ext/manifest.json +1 -1
  5. package/dist/extensions/telegram/xopc.extension.json +1 -1
  6. package/dist/gateway/static/root/assets/{activity-store-BpYGrRXw.js → activity-store-Cwn_CNwl.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DTgOSv6G.js → agent-avatar-dicebear-Cd23LnJJ.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agent-avatar-display-BUH7ljEo.js → agent-avatar-display-ByzM7u9S.js} +2 -2
  9. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-B_FAikHA.js → agent-defaults-settings-panel-B0i37diS.js} +1 -1
  10. package/dist/gateway/static/root/assets/{agent-plugin-dialog-DPabZaSE.js → agent-plugin-dialog-XN-tZ-Ox.js} +1 -1
  11. package/dist/gateway/static/root/assets/{agents-BAPYP1Ka.js → agents-ZDA1OaLv.js} +3 -3
  12. package/dist/gateway/static/root/assets/{agents-admin-api-CXCAHNPj.js → agents-admin-api-B5lKH_ps.js} +1 -1
  13. package/dist/gateway/static/root/assets/{api-oIK4hYkJ.js → api-B9fZL-V8.js} +1 -1
  14. package/dist/gateway/static/root/assets/{api-DMbimMEi.js → api-Djju8qIR.js} +1 -1
  15. package/dist/gateway/static/root/assets/{app-management-settings-panel-BZ3Fy8ZR.js → app-management-settings-panel-IlyzDPJu.js} +1 -1
  16. package/dist/gateway/static/root/assets/{appearance-settings-DsRTj1by.js → appearance-settings-BxdFGob3.js} +1 -1
  17. package/dist/gateway/static/root/assets/apps-page-CxEKiOTA.js +1 -0
  18. package/dist/gateway/static/root/assets/{archive-plugin-Bg1VTieK.js → archive-plugin-4gEvotPr.js} +1 -1
  19. package/dist/gateway/static/root/assets/{automation-api-CLPsgcQN.js → automation-api-4fVKv9PJ.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automation-result-state-CKVnR4KG.js → automation-result-state-m7PeK2kl.js} +1 -1
  21. package/dist/gateway/static/root/assets/automation-run-list-CJOdy_R2.js +1 -0
  22. package/dist/gateway/static/root/assets/{automation-task-card-D27Mw66U.js → automation-task-card-DZWhCWJa.js} +3 -3
  23. package/dist/gateway/static/root/assets/{automations-page-DGNTJ8lN.js → automations-page-BjbM15eY.js} +1 -1
  24. package/dist/gateway/static/root/assets/automations-workspace-CqurzLYX.js +9 -0
  25. package/dist/gateway/static/root/assets/{binary-plugins-CuwSdCG5.js → binary-plugins-69WyJLNW.js} +1 -1
  26. package/dist/gateway/static/root/assets/{block-editor-Dtl2BG3t.js → block-editor-DUONDIZR.js} +1 -1
  27. package/dist/gateway/static/root/assets/{browser-automation-inputs-uGK086ag.js → browser-automation-inputs-DL4YPCuN.js} +1 -1
  28. package/dist/gateway/static/root/assets/{browser-automations-page-Da_edNNS.js → browser-automations-page-1Aq6XmRs.js} +1 -1
  29. package/dist/gateway/static/root/assets/{browser-control-api-k3OOX3bS.js → browser-control-api-yjru8E7R.js} +1 -1
  30. package/dist/gateway/static/root/assets/{browser-settings-page-C1bSw-Jq.js → browser-settings-page-CvwpT8Um.js} +1 -1
  31. package/dist/gateway/static/root/assets/{capabilities-DlHPLld_.js → capabilities-C7lnwKKm.js} +1 -1
  32. package/dist/gateway/static/root/assets/{capabilities-CoeuLRt6.js → capabilities-DaeQXJT4.js} +1 -1
  33. package/dist/gateway/static/root/assets/capabilities-page-B5avAOUM.js +2 -0
  34. package/dist/gateway/static/root/assets/{capabilities-settings-panel-CtY-bGIi.js → capabilities-settings-panel-_9yCS78i.js} +1 -1
  35. package/dist/gateway/static/root/assets/capability-links-DeO34GIF.js +1 -0
  36. package/dist/gateway/static/root/assets/{channels-Cn1MWBL_.js → channels-CoQb4HOF.js} +1 -1
  37. package/dist/gateway/static/root/assets/{chat-agents-api-BB0biwc7.js → chat-agents-api-BUi_7GRo.js} +1 -1
  38. package/dist/gateway/static/root/assets/{chat-chart-block-QSvjx4w6.js → chat-chart-block-CcVcKsDZ.js} +1 -1
  39. package/dist/gateway/static/root/assets/chat-page--wcFhTjW.js +72 -0
  40. package/dist/gateway/static/root/assets/{chat-terminal-dock-Cd51G9eG.js → chat-terminal-dock-BMXJpPuH.js} +1 -1
  41. package/dist/gateway/static/root/assets/{command-palette-api-CEG10uE-.js → command-palette-api-luUjQPsh.js} +1 -1
  42. package/dist/gateway/static/root/assets/{composer-payload-handoff-Bogdq9Hy.js → composer-payload-handoff-B5XNxNCb.js} +1 -1
  43. package/dist/gateway/static/root/assets/computer-settings-page-CWtdyEJH.js +1 -0
  44. package/dist/gateway/static/root/assets/connected-providers-grid-2idMtk65.js +1 -0
  45. package/dist/gateway/static/root/assets/connection-usage-Cm_McddI.js +1 -0
  46. package/dist/gateway/static/root/assets/connection-usage-guide-Ddh0bfkj.js +1 -0
  47. package/dist/gateway/static/root/assets/{connector-service-page-k2rjyjrp.js → connector-service-page-C3msXaBk.js} +1 -1
  48. package/dist/gateway/static/root/assets/{connectors-api-DtvB9Cjm.js → connectors-api-NcWECWKg.js} +1 -1
  49. package/dist/gateway/static/root/assets/connectors-page-Crb6DILX.js +1 -0
  50. package/dist/gateway/static/root/assets/{date-picker-CAankdQw.js → date-picker-Cfjq1hD_.js} +1 -1
  51. package/dist/gateway/static/root/assets/{desktop-pet-DjM73fir.js → desktop-pet-ChFn9v-3.js} +1 -1
  52. package/dist/gateway/static/root/assets/{desktop-pet-settings-Rmh-GxHl.js → desktop-pet-settings-DvnVIv25.js} +1 -1
  53. package/dist/gateway/static/root/assets/{dev-view-store-BgW2Riyk.js → dev-view-store-DQJ61P5L.js} +1 -1
  54. package/dist/gateway/static/root/assets/{device-pairing-wizard-UdzSpNa5.js → device-pairing-wizard-KxaIL-OX.js} +1 -1
  55. package/dist/gateway/static/root/assets/{directory-picker-path-field-Rkw3f7lG.js → directory-picker-path-field-Drv864uE.js} +1 -1
  56. package/dist/gateway/static/root/assets/{discussion-annotation-sync-Dudoj_Fz.js → discussion-annotation-sync-DfBRkWtw.js} +1 -1
  57. package/dist/gateway/static/root/assets/{extension-debug-page-DxIGAO23.js → extension-debug-page-DAlBIt_R.js} +1 -1
  58. package/dist/gateway/static/root/assets/{extension-iframe-host-63KpX6IP.js → extension-iframe-host-Bds-5kY_.js} +1 -1
  59. package/dist/gateway/static/root/assets/{extension-marketplace-api-yXNUkQDA.js → extension-marketplace-api-CZg8nBwW.js} +1 -1
  60. package/dist/gateway/static/root/assets/{extension-page-C811A_Ww.js → extension-page-ZTw-oucT.js} +1 -1
  61. package/dist/gateway/static/root/assets/{extension-provider-C4jLFIgh.js → extension-provider-NKWfjpdP.js} +1 -1
  62. package/dist/gateway/static/root/assets/{extension-settings-page-WJSw5MT0.js → extension-settings-page-CT7PPt_q.js} +1 -1
  63. package/dist/gateway/static/root/assets/{file-preview-surface-zE9AcaHM.js → file-preview-surface-BcLeaSNe.js} +1 -1
  64. package/dist/gateway/static/root/assets/{gateway-config-swr-D6cc6W6E.js → gateway-config-swr-Cq-ByXL4.js} +1 -1
  65. package/dist/gateway/static/root/assets/{gateway-realtime-BSRNLciy.js → gateway-realtime-DwMd2PCt.js} +1 -1
  66. package/dist/gateway/static/root/assets/gateway-realtime-store-CHrf6-nR.js +1 -0
  67. package/dist/gateway/static/root/assets/{gateway-restart-Unun5hRL.js → gateway-restart-DdiVzbkL.js} +1 -1
  68. package/dist/gateway/static/root/assets/{gateway-settings-DP-DV-e5.js → gateway-settings-1QUdNwrZ.js} +1 -1
  69. package/dist/gateway/static/root/assets/{gateway-startup-retry-C8g666Ja.js → gateway-startup-retry-PMJi5mX4.js} +1 -1
  70. package/dist/gateway/static/root/assets/{global-defaults-api-BObi-1ww.js → global-defaults-api-DgzZh3wX.js} +1 -1
  71. package/dist/gateway/static/root/assets/{home-page-CIcs7Mzy.js → home-page-Chn7YTiD.js} +2 -2
  72. package/dist/gateway/static/root/assets/{image-generation-api-C2SqYNyD.js → image-generation-api-CjVpsckq.js} +1 -1
  73. package/dist/gateway/static/root/assets/{imports-page-C8ezUkOJ.js → imports-page-CJCvZFaQ.js} +1 -1
  74. package/dist/gateway/static/root/assets/index-8xLWo0Tt.js +11 -0
  75. package/dist/gateway/static/root/assets/index-iukJWzxG.css +1 -0
  76. package/dist/gateway/static/root/assets/install-connector-dialog-Bo06Ry3H.js +1 -0
  77. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BRaY4-wA.js → keyboard-shortcuts-settings-BylFJeGu.js} +1 -1
  78. package/dist/gateway/static/root/assets/{local-app-workbench-page-BZtVcjF3.js → local-app-workbench-page-B3MSSFsr.js} +1 -1
  79. package/dist/gateway/static/root/assets/{local-apps-page-MqP4EnJm.js → local-apps-page-BeV86rMJ.js} +1 -1
  80. package/dist/gateway/static/root/assets/{local-session-drafts-DTq9776a.js → local-session-drafts-jgw8UGsO.js} +2 -2
  81. package/dist/gateway/static/root/assets/{locale-store-B6OrWgY1.js → locale-store-CAZaC05J.js} +1 -1
  82. package/dist/gateway/static/root/assets/{logs-page-hkHBjblX.js → logs-page-BMmSsUP5.js} +1 -1
  83. package/dist/gateway/static/root/assets/{management-settings-DoX4eTM3.js → management-settings-Bu7T8ewk.js} +1 -1
  84. package/dist/gateway/static/root/assets/{markdown-view-DrhYZSmg.js → markdown-view-BatP4qeK.js} +1 -1
  85. package/dist/gateway/static/root/assets/{mcp-conversation-setup-page-BEp5E6TD.js → mcp-conversation-setup-page-rROtr0UN.js} +1 -1
  86. package/dist/gateway/static/root/assets/{media-plugins-D987i9Gc.js → media-plugins-88OV72YE.js} +1 -1
  87. package/dist/gateway/static/root/assets/messages-C7fckbyG.js +3 -0
  88. package/dist/gateway/static/root/assets/{model-selector-DXm4NS1_.js → model-selector-raBRBkN_.js} +1 -1
  89. package/dist/gateway/static/root/assets/{models-hub-cache-BLcha5rx.js → models-hub-cache-CzC9y3D0.js} +1 -1
  90. package/dist/gateway/static/root/assets/{note-detail-panel-Cl851ivY.js → note-detail-panel-BvA8Vkbm.js} +3 -3
  91. package/dist/gateway/static/root/assets/note-image-lightbox-D6kUDDd5.js +1 -0
  92. package/dist/gateway/static/root/assets/{notes-api-Ddsf7FVg.js → notes-api-zXpV6UXu.js} +1 -1
  93. package/dist/gateway/static/root/assets/{notes-page-DSwA1MU1.js → notes-page-CjYH9Kle.js} +1 -1
  94. package/dist/gateway/static/root/assets/{oauth-api-CMmu4DzH.js → oauth-api-DmxSaxM1.js} +1 -1
  95. package/dist/gateway/static/root/assets/{oauth-provider-connect-BkhnftBq.js → oauth-provider-connect-D4Gfs-Ba.js} +1 -1
  96. package/dist/gateway/static/root/assets/{page-context-capture-button-urhQBRaN.js → page-context-capture-button-Mig3d0UX.js} +1 -1
  97. package/dist/gateway/static/root/assets/{page-context-draft-BuNUerth.js → page-context-draft-C4IIZaKd.js} +1 -1
  98. package/dist/gateway/static/root/assets/page-header-store-D7G5utVi.js +1 -0
  99. package/dist/gateway/static/root/assets/{personal-avatar-B49ueeZO.js → personal-avatar-DLa-CpaK.js} +1 -1
  100. package/dist/gateway/static/root/assets/{personal-page-f05ceuFn.js → personal-page-BhuT79Wd.js} +1 -1
  101. package/dist/gateway/static/root/assets/{personal-settings-panel-DLQxzPYr.js → personal-settings-panel-XSUkgcr2.js} +1 -1
  102. package/dist/gateway/static/root/assets/phone-dependencies-card-DYwnuVh3.js +1 -0
  103. package/dist/gateway/static/root/assets/phone-model-connection-2F32QTHA.js +1 -0
  104. package/dist/gateway/static/root/assets/phone-model-picker-DCVzIr0s.js +1 -0
  105. package/dist/gateway/static/root/assets/phone-settings-page-DJttE4id.js +1 -0
  106. package/dist/gateway/static/root/assets/{phone-workspace-store-DbqktZbO.js → phone-workspace-store-Dxp-KhFP.js} +1 -1
  107. package/dist/gateway/static/root/assets/plugin-details-dialog-tyjAjFjA.js +1 -0
  108. package/dist/gateway/static/root/assets/{preference-select-fields-BZWqG7pu.js → preference-select-fields-BVP3MhGK.js} +1 -1
  109. package/dist/gateway/static/root/assets/{product-automation-feedback-DDQUsag7.js → product-automation-feedback-DbJvv92z.js} +1 -1
  110. package/dist/gateway/static/root/assets/{product-open-page-BkRP_HmA.js → product-open-page-RImqlhCD.js} +1 -1
  111. package/dist/gateway/static/root/assets/{product-preview-content-o2Y3VNE7.js → product-preview-content-DxSqrKsg.js} +1 -1
  112. package/dist/gateway/static/root/assets/{product-preview-modal-7Ohx-7OR.js → product-preview-modal-Cw8Q8Uom.js} +2 -2
  113. package/dist/gateway/static/root/assets/{project-detail-page-B2RsSHya.js → project-detail-page-CuugOYfe.js} +1 -1
  114. package/dist/gateway/static/root/assets/{project-understanding-BIMouiYX.js → project-understanding-BMKcoUW5.js} +1 -1
  115. package/dist/gateway/static/root/assets/{projects-page-C9R5u3tF.js → projects-page-CFsABLvs.js} +1 -1
  116. package/dist/gateway/static/root/assets/{providers-api-BOCkRZ7X.js → providers-api-CAeXbJNF.js} +1 -1
  117. package/dist/gateway/static/root/assets/{recording-upload-C6muEHEO.js → recording-upload-CfpllTe5.js} +1 -1
  118. package/dist/gateway/static/root/assets/{registry-api-Bl2guMRg.js → registry-api-fLOqFyrz.js} +1 -1
  119. package/dist/gateway/static/root/assets/{remote-access-hub-BceSMbCs.js → remote-access-hub-BvKOxy0L.js} +1 -1
  120. package/dist/gateway/static/root/assets/{resource-unavailable-CUNbPkdj.js → resource-unavailable-D15jzjV_.js} +1 -1
  121. package/dist/gateway/static/root/assets/route-preload-BQapekpy.js +2 -0
  122. package/dist/gateway/static/root/assets/{runtime-tools-api-LopLjgvu.js → runtime-tools-api-D0Nrvuqv.js} +1 -1
  123. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-9HIPerDP.js → runtime-tools-settings-panel-CA27XgL2.js} +1 -1
  124. package/dist/gateway/static/root/assets/{service-recommendation-list-CoMI6MB1.js → service-recommendation-list-B0RoYLVT.js} +1 -1
  125. package/dist/gateway/static/root/assets/session-api-CHRP5Lwf.js +1 -0
  126. package/dist/gateway/static/root/assets/session-channel-icon-D1ktvt1P.js +1 -0
  127. package/dist/gateway/static/root/assets/session-identity-label-BP7OIYth.js +1 -0
  128. package/dist/gateway/static/root/assets/session-manager-DRRWwKE4.js +25 -0
  129. package/dist/gateway/static/root/assets/{sessions-page-BT0GdXdS.js → sessions-page-uJHS3-6F.js} +1 -1
  130. package/dist/gateway/static/root/assets/settings-advanced-gate-CZ4J3Kuy.js +1 -0
  131. package/dist/gateway/static/root/assets/{settings-advanced-section-CEorDLUp.js → settings-advanced-section-D-llwfSj.js} +1 -1
  132. package/dist/gateway/static/root/assets/{settings-mode-store-C2LZqBES.js → settings-mode-store-BspMKc9N.js} +1 -1
  133. package/dist/gateway/static/root/assets/{settings-page-C_Np_6qZ.js → settings-page-CedwaHM0.js} +1 -1
  134. package/dist/gateway/static/root/assets/{settings-page-header-BAN34UQi.js → settings-page-header-LuOJvqNa.js} +1 -1
  135. package/dist/gateway/static/root/assets/{settings-page-layout-B5TVFBV2.js → settings-page-layout-CduQ8w4a.js} +1 -1
  136. package/dist/gateway/static/root/assets/{setup-interaction-page-BYvTJW3_.js → setup-interaction-page-ujpPGl84.js} +1 -1
  137. package/dist/gateway/static/root/assets/{setup-status-panel-UY2dH-sK.js → setup-status-panel-BN2aCJUN.js} +1 -1
  138. package/dist/gateway/static/root/assets/{share-link-dialog-BMcXyzr2.js → share-link-dialog-CTATUaa4.js} +1 -1
  139. package/dist/gateway/static/root/assets/{share-preview-page-UQ6eUM2_.js → share-preview-page-Dq0J3VgS.js} +1 -1
  140. package/dist/gateway/static/root/assets/{shares-api-DOeDN6Tm.js → shares-api-zegE8pSE.js} +1 -1
  141. package/dist/gateway/static/root/assets/{shares-settings-W8XhuAoL.js → shares-settings-DXpvsRXq.js} +1 -1
  142. package/dist/gateway/static/root/assets/{skill-api-Do_c0d9n.js → skill-api-DCL1EN7f.js} +1 -1
  143. package/dist/gateway/static/root/assets/{skill-list-api-DpHaXI2l.js → skill-list-api-Bv0mmHbu.js} +1 -1
  144. package/dist/gateway/static/root/assets/{skill-reload-api-DDRd9IJ2.js → skill-reload-api-DPZbadiO.js} +1 -1
  145. package/dist/gateway/static/root/assets/{skills-page-CaeJVKhO.js → skills-page-DMC7Gaku.js} +1 -1
  146. package/dist/gateway/static/root/assets/{system-settings-panel-DYWlWPJL.js → system-settings-panel-BYFUhlqG.js} +1 -1
  147. package/dist/gateway/static/root/assets/{task-detail-page-De0qD7xw.js → task-detail-page-_Og3plZL.js} +3 -3
  148. package/dist/gateway/static/root/assets/{task-result-evidence-CICR5K1t.js → task-result-evidence-Bxm8-H0B.js} +1 -1
  149. package/dist/gateway/static/root/assets/{terminal-panel-store-BbWUcQe7.js → terminal-panel-store-Djf9l2qZ.js} +1 -1
  150. package/dist/gateway/static/root/assets/{theme-store-TkG5mo0p.js → theme-store-8GFVtotZ.js} +1 -1
  151. package/dist/gateway/static/root/assets/{tracing-settings-page-CYXEy4EG.js → tracing-settings-page-oWW3SBZ4.js} +1 -1
  152. package/dist/gateway/static/root/assets/{tunnel-api-DquDm6U2.js → tunnel-api-D-mEsSGF.js} +1 -1
  153. package/dist/gateway/static/root/assets/{understanding-activity-store-Ot3wZ3oQ.js → understanding-activity-store-CvDjsd0I.js} +1 -1
  154. package/dist/gateway/static/root/assets/{understanding-refresh-store-C5KYFMaC.js → understanding-refresh-store-DzOZJm7A.js} +1 -1
  155. package/dist/gateway/static/root/assets/{usage-page-1xFO4smo.js → usage-page-z-o6Uuev.js} +1 -1
  156. package/dist/gateway/static/root/assets/{use-autosave-HL8XRNR8.js → use-autosave-BVYS8UoK.js} +1 -1
  157. package/dist/gateway/static/root/assets/{use-composer-attachments-XRlQBdNF.js → use-composer-attachments-lecOV2q5.js} +1 -1
  158. package/dist/gateway/static/root/assets/{use-file-preview-expanded-CW956CXS.js → use-file-preview-expanded-nd_CuFsd.js} +2 -2
  159. package/dist/gateway/static/root/assets/{use-personal-profile-202s6tJt.js → use-personal-profile-CQi2ZCxV.js} +1 -1
  160. package/dist/gateway/static/root/assets/{use-workspace-tree-CjydkmH1.js → use-workspace-tree-BiaddkzX.js} +1 -1
  161. package/dist/gateway/static/root/assets/{user-model-page-OGPXx3pe.js → user-model-page-Bks1n0Nj.js} +1 -1
  162. package/dist/gateway/static/root/assets/{voice-api-key-field-CxFu4MEA.js → voice-api-key-field-BbW8NFeZ.js} +1 -1
  163. package/dist/gateway/static/root/assets/{voice-config-api-MHe5Pn-A.js → voice-config-api-jSMzZWWy.js} +1 -1
  164. package/dist/gateway/static/root/assets/{voice-input-shortcut-events-B9xc1oK8.js → voice-input-shortcut-events-_SgYmx7X.js} +1 -1
  165. package/dist/gateway/static/root/assets/{voice-transcribe-api-CVEcB6Pe.js → voice-transcribe-api-BJCfiRFU.js} +1 -1
  166. package/dist/gateway/static/root/assets/{work-discovery-overlay-C-JoAg2D.js → work-discovery-overlay-DSTSNyU7.js} +1 -1
  167. package/dist/gateway/static/root/assets/{work-discovery-page-B5Kx29Ru.js → work-discovery-page-Dd_QJJvb.js} +1 -1
  168. package/dist/gateway/static/root/assets/{working-directory-picker-modal-DGp9cNzH.js → working-directory-picker-modal-q39BUcJ6.js} +1 -1
  169. package/dist/gateway/static/root/assets/{workspace-api-HBXn8pL9.js → workspace-api-Di2OmCvz.js} +2 -2
  170. package/dist/gateway/static/root/assets/workspace-editor-agent-store-B2r9wlix.js +1 -0
  171. package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-3cpwSG2w.js → workspace-file-preview-dialog-BUGNT765.js} +1 -1
  172. package/dist/gateway/static/root/assets/{workspace-open-location-menu-D0VOFvuP.js → workspace-open-location-menu-bMSvmQW7.js} +1 -1
  173. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-BkdW2p3v.js → xopc-cloud-account-card-Bbe19Del.js} +1 -1
  174. package/dist/gateway/static/root/index.html +87 -85
  175. package/dist/package.js +1 -1
  176. package/dist/packages/computer-control-contract/src/index.js +33 -3
  177. package/dist/packages/gateway-contract/src/session-identity.js +2 -1
  178. package/dist/packages/gateway-contract/src/session-input-command.js +19 -2
  179. package/dist/packages/gateway-contract/src/specialists.js +1 -0
  180. package/dist/src/agent/embedded/execution-tool-policy.d.ts +1 -1
  181. package/dist/src/agent/embedded/execution-tool-policy.js +2 -2
  182. package/dist/src/agent/embedded/run-for-session.js +23 -8
  183. package/dist/src/agent/embedded/run-turn.js +30 -7
  184. package/dist/src/agent/embedded/runs.d.ts +2 -2
  185. package/dist/src/agent/embedded/runs.js +4 -4
  186. package/dist/src/agent/embedded/session-runner.js +26 -11
  187. package/dist/src/agent/embedded/tool-search-extension.d.ts +8 -2
  188. package/dist/src/agent/embedded/tool-search-extension.js +122 -30
  189. package/dist/src/agent/external-tools/cliProvider.d.ts +10 -9
  190. package/dist/src/agent/external-tools/cliProvider.js +24 -4
  191. package/dist/src/agent/external-tools/composio-provider.d.ts +3 -3
  192. package/dist/src/agent/external-tools/composio-provider.js +6 -3
  193. package/dist/src/agent/external-tools/discovery.d.ts +47 -0
  194. package/dist/src/agent/external-tools/discovery.js +56 -0
  195. package/dist/src/agent/external-tools/gateway-tools.js +26 -46
  196. package/dist/src/agent/external-tools/index.d.ts +1 -0
  197. package/dist/src/agent/external-tools/index.js +7 -0
  198. package/dist/src/agent/external-tools/personal-request-scope.d.ts +7 -0
  199. package/dist/src/agent/external-tools/personal-request-scope.js +83 -0
  200. package/dist/src/agent/external-tools/read-policy.js +5 -4
  201. package/dist/src/agent/external-tools/service.d.ts +2 -0
  202. package/dist/src/agent/external-tools/service.js +22 -3
  203. package/dist/src/agent/external-tools/tool-registry.d.ts +6 -0
  204. package/dist/src/agent/external-tools/types.d.ts +7 -2
  205. package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -1
  206. package/dist/src/agent/inbound/turn-dispatcher.js +3 -2
  207. package/dist/src/agent/orchestration/llm-turn-retry.d.ts +1 -1
  208. package/dist/src/agent/orchestration/llm-turn-retry.js +13 -8
  209. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +1 -0
  210. package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +3 -1
  211. package/dist/src/agent/prompt/sections/tooling.js +1 -1
  212. package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
  213. package/dist/src/agent/tool-manuals/computer.js +6 -4
  214. package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
  215. package/dist/src/agent/tool-manuals/phone.js +4 -4
  216. package/dist/src/agent/tool-manuals/xopc-configuration.d.ts +1 -1
  217. package/dist/src/agent/tool-manuals/xopc-configuration.js +4 -2
  218. package/dist/src/agent/tools/computer-use-tool.js +7 -6
  219. package/dist/src/agent/tools/delegation-policy.js +1 -0
  220. package/dist/src/agent/tools/factory.js +4 -2
  221. package/dist/src/agent/tools/phone-use-tool.js +2 -2
  222. package/dist/src/agent/tools/web.js +22 -3
  223. package/dist/src/agent-matching/service.js +2 -2
  224. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  225. package/dist/src/computer/batch.d.ts +108 -0
  226. package/dist/src/computer/batch.js +125 -0
  227. package/dist/src/computer/broker.d.ts +30 -2
  228. package/dist/src/computer/broker.js +109 -17
  229. package/dist/src/computer/diagnostics.d.ts +5 -1
  230. package/dist/src/computer/diagnostics.js +22 -3
  231. package/dist/src/computer/errors.d.ts +15 -0
  232. package/dist/src/computer/errors.js +59 -3
  233. package/dist/src/computer/model-adapter.d.ts +58 -0
  234. package/dist/src/computer/model-adapter.js +112 -66
  235. package/dist/src/computer/native-errors.d.ts +2 -0
  236. package/dist/src/computer/native-errors.js +13 -0
  237. package/dist/src/computer/program-runtime.d.ts +1 -1
  238. package/dist/src/computer/program-runtime.js +1 -0
  239. package/dist/src/computer/runtime.d.ts +11 -0
  240. package/dist/src/computer/runtime.js +102 -34
  241. package/dist/src/computer/semantic-actions.js +4 -0
  242. package/dist/src/config/schema.d.ts +6 -0
  243. package/dist/src/extensions/agent-plugins/formats.js +2 -1
  244. package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -0
  245. package/dist/src/extensions/agent-plugins/inventory.js +4 -1
  246. package/dist/src/extensions/agent-plugins/validation.d.ts +1 -0
  247. package/dist/src/extensions/agent-plugins/validation.js +2 -1
  248. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  249. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  250. package/dist/src/gateway/hono/routes/phone-dependencies.js +26 -5
  251. package/dist/src/gateway/hono/routes/phone-setup.js +42 -16
  252. package/dist/src/gateway/hono/routes/phone.js +22 -7
  253. package/dist/src/gateway/hono/routes/session-command-handler.js +9 -0
  254. package/dist/src/gateway/hono/routes/session-input-control.d.ts +3 -0
  255. package/dist/src/gateway/hono/routes/session-input-control.js +37 -0
  256. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +12 -0
  257. package/dist/src/gateway/hono/routes/session-input-handler.js +22 -0
  258. package/dist/src/gateway/hono/routes/sessions.js +4 -0
  259. package/dist/src/gateway/service/agent-runner.js +5 -4
  260. package/dist/src/gateway/service/config-coordinator.d.ts +6 -0
  261. package/dist/src/gateway/service/session-input-coordinator.d.ts +6 -3
  262. package/dist/src/gateway/service/session-input-coordinator.js +47 -6
  263. package/dist/src/gateway/service.d.ts +1 -0
  264. package/dist/src/gateway/service.js +8 -5
  265. package/dist/src/home-intelligence/host.js +2 -2
  266. package/dist/src/personal-agent/capability-service.js +1 -1
  267. package/dist/src/personal-agent/request-access.d.ts +2 -0
  268. package/dist/src/personal-agent/request-access.js +22 -2
  269. package/dist/src/personal-agent/request-service.js +2 -2
  270. package/dist/src/personal-agent/specialist-capabilities.d.ts +2 -0
  271. package/dist/src/personal-agent/specialist-capabilities.js +9 -3
  272. package/dist/src/phone/adb-driver.d.ts +3 -0
  273. package/dist/src/phone/adb-driver.js +29 -0
  274. package/dist/src/phone/contracts.d.ts +14 -2
  275. package/dist/src/phone/contracts.js +8 -1
  276. package/dist/src/phone/gui-protocol.js +1 -1
  277. package/dist/src/phone/hdc-driver.d.ts +30 -0
  278. package/dist/src/phone/hdc-driver.js +331 -0
  279. package/dist/src/phone/hdc-video-bridge.d.ts +2 -0
  280. package/dist/src/phone/hdc-video-bridge.js +91 -0
  281. package/dist/src/phone/hdc-video-tools.d.ts +15 -0
  282. package/dist/src/phone/hdc-video-tools.js +123 -0
  283. package/dist/src/phone/hdc-video.d.ts +69 -0
  284. package/dist/src/phone/hdc-video.js +350 -0
  285. package/dist/src/phone/interactive-session.js +1 -1
  286. package/dist/src/phone/live-provider.d.ts +6 -0
  287. package/dist/src/phone/live-provider.js +1 -0
  288. package/dist/src/phone/model-adapter.d.ts +3 -0
  289. package/dist/src/phone/model-adapter.js +5 -3
  290. package/dist/src/phone/repository.js +2 -1
  291. package/dist/src/phone/runtime.d.ts +10 -4
  292. package/dist/src/phone/runtime.js +151 -85
  293. package/dist/src/phone/setup/service.d.ts +8 -6
  294. package/dist/src/phone/setup/service.js +33 -16
  295. package/dist/src/platform/client.d.ts +1 -1
  296. package/dist/src/platform/contracts.d.ts +1 -1
  297. package/dist/src/process/phone-process.d.ts +1 -1
  298. package/dist/src/process/phone-process.js +2 -2
  299. package/dist/src/runtime-tools/downloader.d.ts +1 -0
  300. package/dist/src/runtime-tools/downloader.js +8 -4
  301. package/dist/src/runtime-tools/harmony-dependencies.d.ts +24 -0
  302. package/dist/src/runtime-tools/harmony-dependencies.js +272 -0
  303. package/dist/src/runtime-tools/harmony-dependency-catalog.d.ts +4 -0
  304. package/dist/src/runtime-tools/harmony-dependency-catalog.js +54 -0
  305. package/dist/src/runtime-tools/harmony-paths.d.ts +9 -0
  306. package/dist/src/runtime-tools/harmony-paths.js +15 -0
  307. package/dist/src/runtime-tools/hdc-dependency-catalog.d.ts +8 -0
  308. package/dist/src/runtime-tools/hdc-dependency-catalog.js +83 -0
  309. package/dist/src/runtime-tools/hdc-files.d.ts +14 -0
  310. package/dist/src/runtime-tools/hdc-files.js +87 -0
  311. package/dist/src/runtime-tools/phone-dependencies.d.ts +6 -1
  312. package/dist/src/runtime-tools/phone-dependencies.js +20 -2
  313. package/dist/src/runtime-tools/phone-dependency-catalog.d.ts +10 -1
  314. package/dist/src/runtime-tools/phone-dependency-catalog.js +2 -0
  315. package/dist/src/runtime-tools/types.d.ts +1 -1
  316. package/dist/src/storage/sqlite/schema.d.ts +2 -2
  317. package/dist/src/storage/sqlite/schema.js +7 -7
  318. package/dist/src/storage/sqlite/schema.sql +16 -0
  319. package/dist/src/storage/sqlite/session-creation-repository.js +3 -0
  320. package/dist/src/storage/sqlite/session-input-control-repository.d.ts +12 -0
  321. package/dist/src/storage/sqlite/session-input-control-repository.js +83 -0
  322. package/dist/src/storage/sqlite/session-input-repository.d.ts +2 -0
  323. package/dist/src/storage/sqlite/session-input-repository.js +17 -5
  324. package/dist/src/storage/sqlite/session-repository.js +1 -0
  325. package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +2 -0
  326. package/dist/src/storage/sqlite/session-turn-replace-repository.js +14 -2
  327. package/dist/src/storage/sqlite/upgrades/262_session_input_control.sql +15 -0
  328. package/package.json +2 -2
  329. package/skills/tools/configure-xopc/SKILL.md +2 -2
  330. package/skills/tools/configure-xopc/references/phone/acceptance.md +3 -2
  331. package/skills/tools/configure-xopc/references/phone/dependencies.md +18 -2
  332. package/skills/tools/configure-xopc/references/phone/harmonyos.md +16 -0
  333. package/skills/tools/configure-xopc/references/phone/overview.md +2 -2
  334. package/skills/tools/configure-xopc/references/scene-index.md +2 -2
  335. package/dist/gateway/static/root/assets/apps-page-D-n71lO1.js +0 -1
  336. package/dist/gateway/static/root/assets/automations-workspace-DWDWy-SG.js +0 -9
  337. package/dist/gateway/static/root/assets/capabilities-page-IcwojmJK.js +0 -2
  338. package/dist/gateway/static/root/assets/capability-links-DzQWK1Fh.js +0 -1
  339. package/dist/gateway/static/root/assets/chat-page-CwP4OMdW.js +0 -72
  340. package/dist/gateway/static/root/assets/computer-settings-page-DyAlOzqY.js +0 -1
  341. package/dist/gateway/static/root/assets/connected-providers-grid-D0lXg22c.js +0 -1
  342. package/dist/gateway/static/root/assets/connectors-page-DI_Q0CKz.js +0 -1
  343. package/dist/gateway/static/root/assets/gateway-realtime-store-BFeFfApQ.js +0 -1
  344. package/dist/gateway/static/root/assets/index-Cz-VjTNd.css +0 -1
  345. package/dist/gateway/static/root/assets/index-D1_PUrJf.js +0 -11
  346. package/dist/gateway/static/root/assets/install-connector-dialog-Cn4nRSyt.js +0 -1
  347. package/dist/gateway/static/root/assets/list-tree-B0OMswgM.js +0 -1
  348. package/dist/gateway/static/root/assets/messages-jwdBhfL9.js +0 -3
  349. package/dist/gateway/static/root/assets/note-image-lightbox-DGYRJS03.js +0 -1
  350. package/dist/gateway/static/root/assets/page-header-store-CEn_kPsn.js +0 -1
  351. package/dist/gateway/static/root/assets/phone-dependencies-card-DjmC1Z5j.js +0 -1
  352. package/dist/gateway/static/root/assets/phone-model-connection-BRjHSgYn.js +0 -1
  353. package/dist/gateway/static/root/assets/phone-model-picker-DgIiWLhR.js +0 -1
  354. package/dist/gateway/static/root/assets/phone-settings-page-DCZGCL_z.js +0 -1
  355. package/dist/gateway/static/root/assets/plugin-details-dialog-D4tGKip4.js +0 -1
  356. package/dist/gateway/static/root/assets/route-preload-C1BKDjnu.js +0 -2
  357. package/dist/gateway/static/root/assets/session-api-Bfmlmn9F.js +0 -1
  358. package/dist/gateway/static/root/assets/session-channel-icon-SsY70Z6t.js +0 -1
  359. package/dist/gateway/static/root/assets/session-identity-label-B7sgG1PE.js +0 -1
  360. package/dist/gateway/static/root/assets/session-manager-X4UHOjjO.js +0 -25
  361. package/dist/gateway/static/root/assets/settings-advanced-gate-Dk9c-Z5e.js +0 -1
  362. package/dist/gateway/static/root/assets/workspace-editor-agent-store-msZa42fU.js +0 -1
@@ -75,7 +75,7 @@ var PhoneSetupService = class {
75
75
  settingsPath: `/settings/phone-use?phoneSetup=${setup.id}&conversationId=${context.conversationId}`,
76
76
  guidanceRefs: [{
77
77
  sceneId: "phone",
78
- path: `references/phone/${setup.state === "verifying" ? "acceptance" : setup.error || interrupted || stale ? "troubleshooting" : setup.source === "aliyun" ? "aliyun" : setup.source === "local" ? "local" : "overview"}.md`,
78
+ path: `references/phone/${setup.state === "verifying" ? "acceptance" : setup.error || interrupted || stale ? "troubleshooting" : setup.source === "aliyun" ? "aliyun" : setup.source === "harmonyos" ? "harmonyos" : setup.source === "local" ? "local" : "overview"}.md`,
79
79
  resourceVersion: "1"
80
80
  }]
81
81
  };
@@ -136,7 +136,7 @@ var PhoneSetupService = class {
136
136
  if (!context.canConfigure) throw new Error("PHONE_SETUP_INTERACTIVE_REQUIRED: Continue in an authorized interactive conversation.");
137
137
  if (!Number.isInteger(args.expectedRevision) || args.expectedRevision !== setup.revision) throw new Error("PHONE_SETUP_CONFLICT: Re-read current progress.");
138
138
  if (command === "source") {
139
- if (args.source !== "local" && args.source !== "aliyun") throw new Error("Choose local or aliyun");
139
+ if (args.source !== "local" && args.source !== "aliyun" && args.source !== "harmonyos") throw new Error("Choose local, harmonyos or aliyun");
140
140
  return this.source(context, setup.id, args.source, setup.revision);
141
141
  }
142
142
  if (command === "begin_verification") {
@@ -181,20 +181,36 @@ var PhoneSetupService = class {
181
181
  await this.deps.setModel(context.agentId, args.modelRef, mutation);
182
182
  }
183
183
  } else if (command === "install_dependency") {
184
- 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");
184
+ if (!this.deps.install || ![
185
+ "adb",
186
+ "scrcpy",
187
+ "hdc",
188
+ "hoscrcpy",
189
+ "java",
190
+ "harmonyos"
191
+ ].includes(String(args.kind)) || args.repair !== void 0 && typeof args.repair !== "boolean") throw new Error("Choose a managed Phone dependency");
185
192
  if (args.kind === "adb" && setup.source === "aliyun") throw new Error("Cloud direct connections do not need local ADB");
186
- const dependency = (await this.deps.inspect(context, setup.source)).dependencies.find((item) => item.kind === args.kind);
187
- if (dependency?.state !== "ready" || args.repair === true) {
188
- if (!dependency?.canInstall) throw new Error("PHONE_SETUP_INSTALL_UNAVAILABLE: Use an existing verified dependency or review runtime download settings.");
189
- mutation.check();
190
- operation.committing = true;
191
- await this.deps.install(args.kind, args.repair === true, mutation);
193
+ const kinds = args.kind === "harmonyos" ? [
194
+ "hdc",
195
+ "java",
196
+ "hoscrcpy"
197
+ ] : [args.kind];
198
+ for (const kind of kinds) {
199
+ const dependency = (await this.deps.inspect(context, setup.source)).dependencies.find((item) => item.kind === kind);
200
+ if (dependency?.state !== "ready" || args.repair === true) {
201
+ if (!dependency?.canInstall) throw new Error(`PHONE_SETUP_INSTALL_UNAVAILABLE: ${kind} cannot be installed. Review runtime download settings or use an existing verified dependency.`);
202
+ mutation.check();
203
+ operation.committing = true;
204
+ await this.deps.install(kind, args.repair === true, mutation);
205
+ mutation.check();
206
+ if (!(await this.deps.inspect(context, setup.source)).dependencies.some((item) => item.kind === kind && item.state === "ready")) throw new Error(`PHONE_SETUP_INSTALL_UNVERIFIED: ${kind} is not ready after installation.`);
207
+ }
192
208
  }
193
209
  } else {
194
- 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");
210
+ if (!this.deps.registerLocal || !["local", "harmonyos"].includes(setup.source ?? "") || typeof args.serial !== "string" || args.name !== void 0 && (typeof args.name !== "string" || args.name.length > 100)) throw new Error("Select a discovered local phone");
195
211
  mutation.check();
196
212
  operation.committing = true;
197
- await this.deps.registerLocal(args.serial, args.name, mutation);
213
+ await this.deps.registerLocal(args.serial, args.name, mutation, setup.source === "harmonyos" ? "harmonyos" : "android");
198
214
  }
199
215
  mutation.check();
200
216
  return this.view(context, this.save(context, this.owned(context, setup.id)));
@@ -237,6 +253,7 @@ var PhoneSetupService = class {
237
253
  if (!device?.enabled || !device.settingsAllowed) throw new Error("PHONE_SETUP_DEVICE_REQUIRED: Choose an enabled phone allowing Settings.");
238
254
  if (setup.source && setup.source !== device.source) throw new Error("PHONE_SETUP_SOURCE_MISMATCH");
239
255
  if (device.source === "local" && !readiness.dependencies.some((item) => item.kind === "adb" && item.state === "ready")) throw new Error("PHONE_SETUP_ADB_REQUIRED");
256
+ if (device.source === "harmonyos" && !readiness.dependencies.some((item) => item.kind === "hdc" && item.state === "ready")) throw new Error("PHONE_SETUP_HDC_REQUIRED");
240
257
  if (!await this.deps.connected(deviceId, signal)) throw new Error("PHONE_SETUP_DEVICE_OFFLINE: Authorize USB debugging or check cloud connection.");
241
258
  const latest = this.owned(context, id);
242
259
  if (!this.scopeCurrent(latest) || latest.revision !== revision || environmentRevision !== this.deps.revision(context, deviceId)) throw new Error("PHONE_SETUP_CONFLICT");
@@ -244,10 +261,10 @@ var PhoneSetupService = class {
244
261
  id: randomUUID(),
245
262
  deviceId,
246
263
  modelRef: readiness.model.ref,
247
- goal: "From the Android Settings About phone page, open Android version details and read the version. Do not change any setting.",
264
+ goal: device.source === "harmonyos" ? "In HarmonyOS Settings, open About phone and read the HarmonyOS version. Do not change any setting." : "From the Android Settings About phone page, open Android version details and read the version. Do not change any setting.",
248
265
  completion: {
249
- appPackage: "com.android.settings",
250
- textAny: [
266
+ appPackage: device.source === "harmonyos" ? "com.huawei.hmos.settings" : "com.android.settings",
267
+ textAny: device.source === "harmonyos" ? ["HarmonyOS", "鸿蒙"] : [
251
268
  "Android version",
252
269
  "Android 版本",
253
270
  "Android版本"
@@ -284,7 +301,7 @@ var PhoneSetupService = class {
284
301
  if (!setup?.attempt || setup.attempt.released || input.op === "discover") return void 0;
285
302
  const cleanup = input.op === "close" || input.op === "cancel";
286
303
  if (!cleanup && (!this.scopeCurrent(setup) || setup.state !== "verifying" || Date.now() > setup.attempt.expiresAt || setup.calls >= 12 || setup.environmentRevision !== this.deps.revision(context, setup.attempt.deviceId))) throw new Error("PHONE_SETUP_STOPPED: Release the setup test and review the current state.");
287
- if (!(cleanup || input.op === "status" || input.op === "observe" || input.op === "pause" || input.op === "open" && input.deviceId === setup.attempt.deviceId && input.mode === "control" && input.appPackage === "com.android.settings" || (input.op === "run" || input.op === "step") && input.goal === setup.attempt.goal && !input.scenario && input.completion?.appPackage === setup.attempt.completion.appPackage && input.completion.requireChange === true && JSON.stringify(input.completion.textAny) === JSON.stringify(setup.attempt.completion.textAny) && !input.completion.textAll && !input.completion.field && (input.maxActions ?? 6) <= 6)) throw new Error("PHONE_SETUP_ACTION_DENIED: Use only the approved Settings test.");
304
+ if (!(cleanup || input.op === "status" || input.op === "observe" || input.op === "pause" || input.op === "open" && input.deviceId === setup.attempt.deviceId && input.mode === "control" && input.appPackage === setup.attempt.completion.appPackage || (input.op === "run" || input.op === "step") && input.goal === setup.attempt.goal && !input.scenario && input.completion?.appPackage === setup.attempt.completion.appPackage && input.completion.requireChange === true && JSON.stringify(input.completion.textAny) === JSON.stringify(setup.attempt.completion.textAny) && !input.completion.textAll && !input.completion.field && (input.maxActions ?? 6) <= 6)) throw new Error("PHONE_SETUP_ACTION_DENIED: Use only the approved Settings test.");
288
305
  this.save(context, {
289
306
  ...setup,
290
307
  calls: setup.calls + 1
@@ -304,7 +321,7 @@ var PhoneSetupService = class {
304
321
  }
305
322
  return {
306
323
  owner: setup.owner,
307
- input: input.op === "open" ? {
324
+ input: input.op === "open" && setup.source !== "harmonyos" ? {
308
325
  ...input,
309
326
  settingsPage: "about-phone"
310
327
  } : input
@@ -64,9 +64,9 @@ export declare const RuntimeCommandSchema: z.ZodObject<{
64
64
  delete: "delete";
65
65
  read: "read";
66
66
  write: "write";
67
+ send: "send";
67
68
  execute: "execute";
68
69
  purchase: "purchase";
69
- send: "send";
70
70
  publish: "publish";
71
71
  admin: "admin";
72
72
  }>>;
@@ -150,9 +150,9 @@ export declare const AgentManifestSchema: z.ZodObject<{
150
150
  delete: "delete";
151
151
  read: "read";
152
152
  write: "write";
153
+ send: "send";
153
154
  execute: "execute";
154
155
  purchase: "purchase";
155
- send: "send";
156
156
  publish: "publish";
157
157
  admin: "admin";
158
158
  }>>;
@@ -2,4 +2,4 @@ import { type ChildProcess } from 'node:child_process';
2
2
  export declare function runPhoneCommandBuffer(program: string, args: string[], signal?: AbortSignal, timeoutMs?: number): Promise<Buffer>;
3
3
  export declare function runPhoneCommandText(program: string, args: string[], signal: AbortSignal): Promise<string>;
4
4
  export declare function spawnPhoneCommand(program: string, args: string[]): ChildProcess;
5
- export declare function spawnPhoneInteractiveCommand(program: string, args: string[]): import("node:child_process").ChildProcessByStdio<import("node:stream").Writable, import("node:stream").Readable, null>;
5
+ export declare function spawnPhoneInteractiveCommand(program: string, args: string[], captureStderr?: boolean): ChildProcess;
@@ -34,12 +34,12 @@ function spawnPhoneCommand(program, args) {
34
34
  windowsHide: true
35
35
  });
36
36
  }
37
- function spawnPhoneInteractiveCommand(program, args) {
37
+ function spawnPhoneInteractiveCommand(program, args, captureStderr = false) {
38
38
  return spawn(program, args, {
39
39
  stdio: [
40
40
  "pipe",
41
41
  "pipe",
42
- "ignore"
42
+ captureStderr ? "pipe" : "ignore"
43
43
  ],
44
44
  windowsHide: true
45
45
  });
@@ -17,5 +17,6 @@ export declare function downloadVerifiedArchive(params: {
17
17
  timeoutMs: number;
18
18
  proxy?: string;
19
19
  signal?: AbortSignal;
20
+ expectedBytes?: number;
20
21
  onProgress?: (downloadedBytes: number, totalBytes?: number) => void;
21
22
  }): Promise<string>;
@@ -52,6 +52,7 @@ async function sha256File(path) {
52
52
  return hash.digest("hex");
53
53
  }
54
54
  async function downloadVerifiedArchive(params) {
55
+ const maxBytes = Math.min(MAX_ARCHIVE_BYTES, params.expectedBytes ?? MAX_ARCHIVE_BYTES);
55
56
  await mkdir(dirname(params.targetPath), { recursive: true });
56
57
  const completedPath = params.targetPath.replace(/\.partial$/, "");
57
58
  try {
@@ -61,7 +62,7 @@ async function downloadVerifiedArchive(params) {
61
62
  } catch {}
62
63
  try {
63
64
  let resumeOffset = await stat(params.targetPath).then((info) => info.isFile() ? info.size : 0).catch(() => 0);
64
- if (resumeOffset > MAX_ARCHIVE_BYTES) {
65
+ if (resumeOffset > maxBytes) {
65
66
  await rm(params.targetPath, { force: true });
66
67
  resumeOffset = 0;
67
68
  }
@@ -75,7 +76,10 @@ async function downloadVerifiedArchive(params) {
75
76
  signal: params.signal,
76
77
  init: {
77
78
  redirect: "follow",
78
- headers: offset > 0 ? { Range: `bytes=${offset}-` } : void 0
79
+ headers: {
80
+ ...params.expectedBytes === void 0 ? {} : { "Accept-Encoding": "identity" },
81
+ ...offset > 0 ? { Range: `bytes=${offset}-` } : {}
82
+ }
79
83
  }
80
84
  });
81
85
  } catch (error) {
@@ -108,14 +112,14 @@ async function downloadVerifiedArchive(params) {
108
112
  }
109
113
  total = Number(response.headers.get("content-length")) || void 0;
110
114
  }
111
- if (total && total > MAX_ARCHIVE_BYTES) {
115
+ if (total && total > maxBytes) {
112
116
  await response.body.cancel().catch(() => {});
113
117
  throw new Error("Archive exceeds size limit");
114
118
  }
115
119
  let downloaded = resumeOffset;
116
120
  const transform = new TransformStream({ transform(chunk, controller) {
117
121
  downloaded += chunk.byteLength;
118
- if (downloaded > MAX_ARCHIVE_BYTES) throw new Error("Archive exceeds size limit");
122
+ if (downloaded > maxBytes) throw new Error("Archive exceeds size limit");
119
123
  params.onProgress?.(downloaded, total);
120
124
  controller.enqueue(chunk);
121
125
  } });
@@ -0,0 +1,24 @@
1
+ import type { PhoneConfig } from '../phone/contracts.js';
2
+ import { type HarmonyDependencyKind } from './harmony-dependency-catalog.js';
3
+ import type { PhoneDependencyProgress, PhoneDependencyStatus } from './phone-dependencies.js';
4
+ import type { RuntimeToolsConfig } from '../config/schema.js';
5
+ export interface HarmonyInstallOptions {
6
+ repair?: boolean;
7
+ signal?: AbortSignal;
8
+ beforeCommit?: () => void;
9
+ }
10
+ export declare function probePhoneHdc(path: string, signal?: AbortSignal): Promise<string>;
11
+ export declare function probePhoneJava(home: string, signal?: AbortSignal): Promise<string>;
12
+ export declare function probePhoneHos(config: PhoneConfig, stateDir: string, signal?: AbortSignal): Promise<string>;
13
+ export declare class HarmonyDependencyManager {
14
+ private options;
15
+ private emit;
16
+ constructor(options: {
17
+ stateDir: string;
18
+ config: RuntimeToolsConfig;
19
+ phone: PhoneConfig;
20
+ }, emit: (event: PhoneDependencyProgress) => void);
21
+ private key;
22
+ status(kind: HarmonyDependencyKind): Promise<PhoneDependencyStatus>;
23
+ install(kind: HarmonyDependencyKind, options?: HarmonyInstallOptions): Promise<void>;
24
+ }
@@ -0,0 +1,272 @@
1
+ import { HDC_VERSION, HOSCRCPY_VERSION, managedHdcDir, managedHdcPath, managedHosDir, managedHosJar, managedJavaDir, managedJavaHome } from "./harmony-paths.js";
2
+ import { PHONE_JAVA_VERSION } from "./harmony-dependency-catalog.js";
3
+ import { phoneDependencyAsset } from "./phone-dependency-catalog.js";
4
+ import { resolveHdcPath } from "../phone/hdc-driver.js";
5
+ import { compileHdcVideoBridge, resolveHdcJavaHome, resolveHdcVideoTools } from "../phone/hdc-video-tools.js";
6
+ import { RuntimeError } from "./errors.js";
7
+ import { extractRuntimeArchive } from "./archive.js";
8
+ import { runRuntimeCommand } from "./command.js";
9
+ import { downloadVerifiedArchive, sha256File } from "./downloader.js";
10
+ import { withInstallLock } from "./install-lock.js";
11
+ import { runtimeDownloadPath } from "./paths.js";
12
+ import { stageHdcFiles, verifyHdcFiles } from "./hdc-files.js";
13
+ import { dirname, isAbsolute, join } from "node:path";
14
+ import { randomUUID } from "node:crypto";
15
+ import { copyFile, mkdir, rename, rm, stat } from "node:fs/promises";
16
+ //#region src/runtime-tools/harmony-dependencies.ts
17
+ const operations = /* @__PURE__ */ new Set();
18
+ const versions = {
19
+ hdc: HDC_VERSION,
20
+ hoscrcpy: HOSCRCPY_VERSION,
21
+ java: PHONE_JAVA_VERSION
22
+ };
23
+ async function probePhoneHdc(path, signal) {
24
+ const result = await runRuntimeCommand({
25
+ command: path,
26
+ args: ["-v"],
27
+ signal
28
+ });
29
+ const version = /(?:Ver:\s*|version\s*)(\d+\.\d+(?:\.\d+)?[\w.-]*)/i.exec(result.stdout)?.[1];
30
+ if (!result.ok || !version) throw new Error("A compatible HDC executable was not found");
31
+ return version;
32
+ }
33
+ async function probePhoneJava(home, signal) {
34
+ const suffix = process.platform === "win32" ? ".exe" : "";
35
+ const java = await runRuntimeCommand({
36
+ command: join(home, "bin", `java${suffix}`),
37
+ args: ["-version"],
38
+ signal
39
+ });
40
+ const javac = await runRuntimeCommand({
41
+ command: join(home, "bin", `javac${suffix}`),
42
+ args: ["-version"],
43
+ signal
44
+ });
45
+ const version = /(?:openjdk|java) version "([^\"]+)"/.exec(`${java.stdout}\n${java.stderr}`)?.[1];
46
+ const compiler = /javac (\d+)/.exec(`${javac.stdout}\n${javac.stderr}`)?.[1];
47
+ if (!java.ok || !javac.ok || !version || Number(version.split(".")[0]) < 17 || Number(compiler) < 17) throw new Error("A full JDK 17+ with java and javac is required");
48
+ return version;
49
+ }
50
+ async function verifyHosJar(path) {
51
+ const info = await stat(path);
52
+ if (!info.isFile() || info.size > 64 * 1024 * 1024 || await sha256File(path) !== "2ce60b1893cc2be471a8cd7eab7e4127e41921f1f89a32a134c730ba15c8c0fd") throw new Error("HOScrcpy does not match the verified compatible library");
53
+ }
54
+ /** Device-free bridge validation: never starts HDC, captures a screen or installs device helpers. */
55
+ async function probePhoneHosUncached(config, stateDir, signal = new AbortController().signal) {
56
+ const tools = resolveHdcVideoTools(config, stateDir);
57
+ if (await verifyHosJar(tools?.jar ?? config.hdcVideo?.sdkJar ?? managedHosJar(stateDir)).then(() => true, () => false)) return HOSCRCPY_VERSION;
58
+ if (!tools) throw new Error("HOScrcpy validation requires a compatible library and a JDK");
59
+ const bridge = await compileHdcVideoBridge(tools, signal);
60
+ try {
61
+ if (!(await runRuntimeCommand({
62
+ command: bridge.program,
63
+ args: [
64
+ ...bridge.args,
65
+ "--probe",
66
+ "",
67
+ tools.jar
68
+ ],
69
+ timeoutMs: 15e3,
70
+ signal
71
+ })).ok) throw new Error("HOScrcpy failed the device-free bridge compatibility check");
72
+ return "compatible";
73
+ } finally {
74
+ await bridge.cleanup();
75
+ }
76
+ }
77
+ const hosProbes = /* @__PURE__ */ new Map();
78
+ async function probePhoneHos(config, stateDir, signal) {
79
+ const tools = resolveHdcVideoTools(config, stateDir);
80
+ const path = tools?.jar ?? config.hdcVideo?.sdkJar ?? managedHosJar(stateDir);
81
+ const identity = await Promise.all([
82
+ path,
83
+ tools?.java,
84
+ tools?.javac
85
+ ].map(async (file) => file ? stat(file).then((info) => [
86
+ file,
87
+ info.size,
88
+ info.mtimeMs
89
+ ], () => [file]) : void 0));
90
+ const key = JSON.stringify([identity, tools?.classpath]);
91
+ const cached = hosProbes.get(key);
92
+ if (cached && cached.expires > Date.now()) return cached.result;
93
+ if (hosProbes.size >= 32) hosProbes.clear();
94
+ const result = probePhoneHosUncached(config, stateDir, signal);
95
+ hosProbes.set(key, {
96
+ result,
97
+ expires: Date.now() + 1e4
98
+ });
99
+ return result;
100
+ }
101
+ var HarmonyDependencyManager = class {
102
+ constructor(options, emit) {
103
+ this.options = options;
104
+ this.emit = emit;
105
+ }
106
+ key(kind) {
107
+ return `${this.options.stateDir}:${kind}`;
108
+ }
109
+ async status(kind) {
110
+ const { stateDir, phone } = this.options;
111
+ const asset = phoneDependencyAsset(kind);
112
+ const canInstall = this.options.config.enabled && Boolean(asset);
113
+ const base = {
114
+ kind,
115
+ requestedVersion: asset?.version ?? versions[kind],
116
+ canInstall,
117
+ distribution: kind === "hoscrcpy" ? "HOScrcpy 1.0.18-beta via @nszzj/dsh-hos-scrcpy 3.0.2 (third-party distribution)" : kind === "hdc" ? `HDC ${HDC_VERSION} via hdw2 2.3.10 (third-party distribution; ${((asset?.files?.reduce((sum, file) => sum + file.sizeBytes, 0) ?? 0) / 1024 ** 2).toFixed(1)} MiB for this host)` : "Amazon Corretto JDK 17",
118
+ downloadUrl: asset?.url
119
+ };
120
+ if (operations.has(this.key(kind))) return {
121
+ ...base,
122
+ state: "installing"
123
+ };
124
+ const path = kind === "hdc" ? resolveHdcPath(phone.hdcPath, stateDir) : kind === "java" ? resolveHdcJavaHome(phone, stateDir) : resolveHdcVideoTools(phone, stateDir)?.jar ?? phone.hdcVideo?.sdkJar ?? managedHosJar(stateDir);
125
+ const custom = kind === "hdc" ? phone.hdcPath : kind === "java" ? phone.hdcVideo?.javaHome : phone.hdcVideo?.sdkJar;
126
+ const managed = kind === "hdc" ? managedHdcPath(stateDir) : kind === "java" ? managedJavaHome(stateDir) : managedHosJar(stateDir);
127
+ try {
128
+ if (!path) throw new Error("Dependency not found");
129
+ if (kind === "hdc" && path === managed && asset) await verifyHdcFiles(dirname(path), asset);
130
+ const version = kind === "hdc" ? await probePhoneHdc(path) : kind === "java" ? await probePhoneJava(path) : await probePhoneHos(phone, stateDir);
131
+ return {
132
+ ...base,
133
+ state: "ready",
134
+ version,
135
+ path,
136
+ source: path === managed ? "managed" : custom ? "custom" : "system"
137
+ };
138
+ } catch {
139
+ const exists = path && await stat(path).then(() => true, () => false);
140
+ return {
141
+ ...base,
142
+ state: exists || custom ? "corrupted" : !asset ? "unsupported" : "absent",
143
+ path: exists || custom ? path : void 0,
144
+ error: "RUNTIME_PROBE_FAILED"
145
+ };
146
+ }
147
+ }
148
+ async install(kind, options = {}) {
149
+ const check = () => {
150
+ options.signal?.throwIfAborted();
151
+ options.beforeCommit?.();
152
+ };
153
+ check();
154
+ const asset = phoneDependencyAsset(kind);
155
+ if (!this.options.config.enabled) throw new RuntimeError("Managed runtime installation is disabled", "RUNTIME_DISABLED", kind, "install", false);
156
+ if (!asset) throw new RuntimeError("No verified managed dependency is available for this platform", "RUNTIME_UNSUPPORTED", kind, "install", false);
157
+ if (operations.has(this.key(kind))) throw new Error("This dependency is already being installed");
158
+ operations.add(this.key(kind));
159
+ const progress = (phase) => this.emit({
160
+ kind,
161
+ phase
162
+ });
163
+ try {
164
+ await withInstallLock(join(this.options.stateDir, "tools", "locks", `phone-${kind}.lock`), { kind }, async () => {
165
+ check();
166
+ const target = kind === "hdc" ? managedHdcDir(this.options.stateDir) : kind === "java" ? managedJavaDir(this.options.stateDir) : managedHosDir(this.options.stateDir);
167
+ const probe = async (root) => {
168
+ if (kind === "hdc") {
169
+ await verifyHdcFiles(root, asset);
170
+ if (await probePhoneHdc(join(root, process.platform === "win32" ? "hdc.exe" : "hdc"), options.signal) !== asset.version) throw new Error("HDC version does not match the catalog");
171
+ } else if (kind === "java") await probePhoneJava(process.platform === "darwin" ? join(root, "Contents", "Home") : root, options.signal);
172
+ else await verifyHosJar(join(root, `hosScrcpy-${HOSCRCPY_VERSION}.jar`));
173
+ };
174
+ if (!options.repair && await probe(target).then(() => true, () => false)) return;
175
+ let source;
176
+ if (kind !== "hdc") {
177
+ if (this.options.config.download.bundleDir) {
178
+ if (!isAbsolute(this.options.config.download.bundleDir)) throw new Error("Offline bundle directory must be an absolute path on the Gateway host");
179
+ source = join(this.options.config.download.bundleDir, asset.filename);
180
+ } else {
181
+ if (this.options.config.download.source === "website-only") throw new Error("Select Auto or Direct downloads, or configure an offline bundle directory");
182
+ progress("download");
183
+ source = await downloadVerifiedArchive({
184
+ runtime: kind,
185
+ url: asset.url,
186
+ expectedSha256: asset.sha256,
187
+ targetPath: runtimeDownloadPath(this.options.stateDir, asset.filename),
188
+ timeoutMs: this.options.config.download.timeoutMs,
189
+ proxy: this.options.config.download.proxy,
190
+ signal: options.signal,
191
+ onProgress: (downloadedBytes, totalBytes) => this.emit({
192
+ kind,
193
+ phase: "download",
194
+ downloadedBytes,
195
+ totalBytes
196
+ })
197
+ });
198
+ }
199
+ check();
200
+ progress("verify");
201
+ if (await sha256File(source) !== asset.sha256) throw new RuntimeError("Dependency checksum mismatch", "RUNTIME_CHECKSUM_MISMATCH", kind, "verify", true);
202
+ }
203
+ const staging = join(this.options.stateDir, "tools", "staging", `phone-${kind}-${randomUUID()}`);
204
+ const backup = `${target}.${randomUUID()}.backup`;
205
+ let backedUp = false;
206
+ try {
207
+ if (kind !== "hdc") progress("extract");
208
+ let root;
209
+ if (kind === "hdc") root = await stageHdcFiles({
210
+ asset,
211
+ stateDir: this.options.stateDir,
212
+ config: this.options.config,
213
+ root: join(staging, "hdc"),
214
+ signal: options.signal,
215
+ check,
216
+ progress: this.emit
217
+ });
218
+ else {
219
+ if (!source) throw new Error("Dependency archive is unavailable");
220
+ const unpacked = await extractRuntimeArchive({
221
+ runtime: kind,
222
+ archivePath: source,
223
+ archiveType: asset.filename.endsWith(".zip") ? "zip" : "tar.gz",
224
+ stagingDir: staging
225
+ });
226
+ if (kind === "hoscrcpy") {
227
+ root = join(staging, "library");
228
+ await mkdir(root);
229
+ await copyFile(join(unpacked, "resources", `hosScrcpy-${HOSCRCPY_VERSION}.jar`), join(root, `hosScrcpy-${HOSCRCPY_VERSION}.jar`));
230
+ for (const name of ["LICENSE", "THIRD_PARTY_NOTICES.md"]) await copyFile(join(unpacked, name), join(root, name));
231
+ } else root = unpacked;
232
+ }
233
+ progress("probe");
234
+ await probe(root);
235
+ check();
236
+ await mkdir(dirname(target), { recursive: true });
237
+ check();
238
+ progress("install");
239
+ try {
240
+ await rename(target, backup);
241
+ backedUp = true;
242
+ } catch (error) {
243
+ if (error.code !== "ENOENT") throw error;
244
+ }
245
+ try {
246
+ await rename(root, target);
247
+ } catch (error) {
248
+ if (backedUp) {
249
+ await rename(backup, target);
250
+ backedUp = false;
251
+ }
252
+ throw error;
253
+ }
254
+ } finally {
255
+ await rm(staging, {
256
+ recursive: true,
257
+ force: true
258
+ });
259
+ if (backedUp) await rm(backup, {
260
+ recursive: true,
261
+ force: true
262
+ });
263
+ }
264
+ });
265
+ progress("complete");
266
+ } finally {
267
+ operations.delete(this.key(kind));
268
+ }
269
+ }
270
+ };
271
+ //#endregion
272
+ export { HarmonyDependencyManager, probePhoneHdc, probePhoneHos, probePhoneJava };
@@ -0,0 +1,4 @@
1
+ import type { PhoneDependencyAsset } from './phone-dependency-catalog.js';
2
+ export type HarmonyDependencyKind = 'hdc' | 'hoscrcpy' | 'java';
3
+ export declare const PHONE_JAVA_VERSION = "17.0.21.0.11";
4
+ export declare function harmonyDependencyAsset(kind: HarmonyDependencyKind, platform: NodeJS.Platform, arch: string): PhoneDependencyAsset | undefined;
@@ -0,0 +1,54 @@
1
+ import { HOSCRCPY_VERSION } from "./harmony-paths.js";
2
+ import { hdcDependencyAsset } from "./hdc-dependency-catalog.js";
3
+ //#region src/runtime-tools/harmony-dependency-catalog.ts
4
+ const PHONE_JAVA_VERSION = "17.0.21.0.11";
5
+ const JAVA_ASSETS = {
6
+ "darwin-arm64": {
7
+ "filename": "amazon-corretto-17.0.21.0.11-macosx-aarch64.tar.gz",
8
+ "url": "https://corretto.aws/downloads/resources/17.0.21.0.11/amazon-corretto-17.0.21.0.11-macosx-aarch64.tar.gz",
9
+ "sha256": "3cd5a2bdd380a5654aa1ef5eda3032f60021e8e48a0bdd552e8e39b032705732"
10
+ },
11
+ "darwin-x64": {
12
+ "filename": "amazon-corretto-17.0.21.0.11-macosx-x64.tar.gz",
13
+ "url": "https://corretto.aws/downloads/resources/17.0.21.0.11/amazon-corretto-17.0.21.0.11-macosx-x64.tar.gz",
14
+ "sha256": "dca4175d94d404533c4230eff1a64cc3ae9f3919bfdf35902c64bfd4d3bcb70e"
15
+ },
16
+ "linux-x64": {
17
+ "filename": "amazon-corretto-17.0.21.0.11-linux-x64.tar.gz",
18
+ "url": "https://corretto.aws/downloads/resources/17.0.21.0.11/amazon-corretto-17.0.21.0.11-linux-x64.tar.gz",
19
+ "sha256": "8f9a2ddb131ec5317419f2b0769240fe22ce27f8a0ae43f5346d53e1c8aec6a0"
20
+ },
21
+ "linux-arm64": {
22
+ "filename": "amazon-corretto-17.0.21.0.11-linux-aarch64.tar.gz",
23
+ "url": "https://corretto.aws/downloads/resources/17.0.21.0.11/amazon-corretto-17.0.21.0.11-linux-aarch64.tar.gz",
24
+ "sha256": "33412bba53b912b21528150df7cf60c161d10fc3b7dae89cd5383d8f3c0362c0"
25
+ },
26
+ "win32-x64": {
27
+ "filename": "amazon-corretto-17.0.21.0.11-windows-x64-jdk.zip",
28
+ "url": "https://corretto.aws/downloads/resources/17.0.21.0.11/amazon-corretto-17.0.21.0.11-windows-x64-jdk.zip",
29
+ "sha256": "59d6514305f6fab3b18955fb17185562f0a0bbf20e1466eda33a5429f3b31618"
30
+ }
31
+ };
32
+ function harmonyDependencyAsset(kind, platform, arch) {
33
+ const key = `${platform}-${arch}`;
34
+ if (kind === "hoscrcpy") return {
35
+ kind,
36
+ version: HOSCRCPY_VERSION,
37
+ archive: true,
38
+ filename: "dsh-hos-scrcpy-3.0.2.tgz",
39
+ url: "https://registry.npmjs.org/@nszzj/dsh-hos-scrcpy/-/dsh-hos-scrcpy-3.0.2.tgz",
40
+ sha256: "955a5f6dfa72cc8e61905fa6960a149e4a75f3167c2984afb1fcc5f4ab99868a"
41
+ };
42
+ if (kind === "java") {
43
+ const asset = JAVA_ASSETS[key];
44
+ return asset && {
45
+ ...asset,
46
+ kind,
47
+ version: "17.0.21.0.11",
48
+ archive: true
49
+ };
50
+ }
51
+ return hdcDependencyAsset(platform, arch);
52
+ }
53
+ //#endregion
54
+ export { PHONE_JAVA_VERSION, harmonyDependencyAsset };
@@ -0,0 +1,9 @@
1
+ export declare const HDC_VERSION = "3.2.0c";
2
+ export declare const HOSCRCPY_VERSION = "1.0.18-beta";
3
+ export declare const HOSCRCPY_SHA256 = "2ce60b1893cc2be471a8cd7eab7e4127e41921f1f89a32a134c730ba15c8c0fd";
4
+ export declare const managedHdcDir: (stateDir?: string) => string;
5
+ export declare const managedHdcPath: (stateDir?: string) => string;
6
+ export declare const managedHosDir: (stateDir?: string) => string;
7
+ export declare const managedHosJar: (stateDir?: string) => string;
8
+ export declare const managedJavaDir: (stateDir?: string) => string;
9
+ export declare const managedJavaHome: (stateDir?: string) => string;
@@ -0,0 +1,15 @@
1
+ import { init_paths_state, resolveStateDir } from "../config/paths-state.js";
2
+ import { join } from "node:path";
3
+ //#region src/runtime-tools/harmony-paths.ts
4
+ init_paths_state();
5
+ const HDC_VERSION = "3.2.0c";
6
+ const HOSCRCPY_VERSION = "1.0.18-beta";
7
+ const HOSCRCPY_SHA256 = "2ce60b1893cc2be471a8cd7eab7e4127e41921f1f89a32a134c730ba15c8c0fd";
8
+ const managedHdcDir = (stateDir = resolveStateDir()) => join(stateDir, "tools", "hdc", `${HDC_VERSION}-hdw2-2.3.10`);
9
+ const managedHdcPath = (stateDir = resolveStateDir()) => join(managedHdcDir(stateDir), process.platform === "win32" ? "hdc.exe" : "hdc");
10
+ const managedHosDir = (stateDir = resolveStateDir()) => join(stateDir, "tools", "hoscrcpy", HOSCRCPY_VERSION);
11
+ const managedHosJar = (stateDir = resolveStateDir()) => join(managedHosDir(stateDir), `hosScrcpy-${HOSCRCPY_VERSION}.jar`);
12
+ const managedJavaDir = (stateDir = resolveStateDir()) => join(stateDir, "tools", "phone-java", "current");
13
+ const managedJavaHome = (stateDir = resolveStateDir()) => process.platform === "darwin" ? join(managedJavaDir(stateDir), "Contents", "Home") : managedJavaDir(stateDir);
14
+ //#endregion
15
+ export { HDC_VERSION, HOSCRCPY_SHA256, HOSCRCPY_VERSION, managedHdcDir, managedHdcPath, managedHosDir, managedHosJar, managedJavaDir, managedJavaHome };
@@ -0,0 +1,8 @@
1
+ import type { PhoneDependencyAsset } from './phone-dependency-catalog.js';
2
+ export declare const HDC_DISTRIBUTION: {
3
+ readonly package: "hdw2";
4
+ readonly version: "2.3.10";
5
+ readonly url: "https://www.npmjs.com/package/hdw2/v/2.3.10";
6
+ readonly archiveIntegrity: "sha512-Kcbz0pfxgeSN3zeB3LcaAERfwWAz3unUtzrG7GgJy8fSUW5rb8Tb8jG13dEjfx8oVv69NaIhDGQk+fyscDT1UQ==";
7
+ };
8
+ export declare function hdcDependencyAsset(platform: NodeJS.Platform, arch: string): PhoneDependencyAsset | undefined;