@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.
- package/README.md +5 -5
- package/README.zh-CN.md +5 -5
- package/dist/browser-ext/dist/sidepanel.js +11 -0
- package/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{activity-store-BpYGrRXw.js → activity-store-Cwn_CNwl.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DTgOSv6G.js → agent-avatar-dicebear-Cd23LnJJ.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-display-BUH7ljEo.js → agent-avatar-display-ByzM7u9S.js} +2 -2
- package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-B_FAikHA.js → agent-defaults-settings-panel-B0i37diS.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-DPabZaSE.js → agent-plugin-dialog-XN-tZ-Ox.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-BAPYP1Ka.js → agents-ZDA1OaLv.js} +3 -3
- package/dist/gateway/static/root/assets/{agents-admin-api-CXCAHNPj.js → agents-admin-api-B5lKH_ps.js} +1 -1
- package/dist/gateway/static/root/assets/{api-oIK4hYkJ.js → api-B9fZL-V8.js} +1 -1
- package/dist/gateway/static/root/assets/{api-DMbimMEi.js → api-Djju8qIR.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-BZ3Fy8ZR.js → app-management-settings-panel-IlyzDPJu.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-DsRTj1by.js → appearance-settings-BxdFGob3.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-CxEKiOTA.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-Bg1VTieK.js → archive-plugin-4gEvotPr.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-api-CLPsgcQN.js → automation-api-4fVKv9PJ.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-result-state-CKVnR4KG.js → automation-result-state-m7PeK2kl.js} +1 -1
- package/dist/gateway/static/root/assets/automation-run-list-CJOdy_R2.js +1 -0
- package/dist/gateway/static/root/assets/{automation-task-card-D27Mw66U.js → automation-task-card-DZWhCWJa.js} +3 -3
- package/dist/gateway/static/root/assets/{automations-page-DGNTJ8lN.js → automations-page-BjbM15eY.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-CqurzLYX.js +9 -0
- package/dist/gateway/static/root/assets/{binary-plugins-CuwSdCG5.js → binary-plugins-69WyJLNW.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-Dtl2BG3t.js → block-editor-DUONDIZR.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automation-inputs-uGK086ag.js → browser-automation-inputs-DL4YPCuN.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-Da_edNNS.js → browser-automations-page-1Aq6XmRs.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-control-api-k3OOX3bS.js → browser-control-api-yjru8E7R.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-C1bSw-Jq.js → browser-settings-page-CvwpT8Um.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-DlHPLld_.js → capabilities-C7lnwKKm.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-CoeuLRt6.js → capabilities-DaeQXJT4.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-B5avAOUM.js +2 -0
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-CtY-bGIi.js → capabilities-settings-panel-_9yCS78i.js} +1 -1
- package/dist/gateway/static/root/assets/capability-links-DeO34GIF.js +1 -0
- package/dist/gateway/static/root/assets/{channels-Cn1MWBL_.js → channels-CoQb4HOF.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-agents-api-BB0biwc7.js → chat-agents-api-BUi_7GRo.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-chart-block-QSvjx4w6.js → chat-chart-block-CcVcKsDZ.js} +1 -1
- package/dist/gateway/static/root/assets/chat-page--wcFhTjW.js +72 -0
- package/dist/gateway/static/root/assets/{chat-terminal-dock-Cd51G9eG.js → chat-terminal-dock-BMXJpPuH.js} +1 -1
- package/dist/gateway/static/root/assets/{command-palette-api-CEG10uE-.js → command-palette-api-luUjQPsh.js} +1 -1
- package/dist/gateway/static/root/assets/{composer-payload-handoff-Bogdq9Hy.js → composer-payload-handoff-B5XNxNCb.js} +1 -1
- package/dist/gateway/static/root/assets/computer-settings-page-CWtdyEJH.js +1 -0
- package/dist/gateway/static/root/assets/connected-providers-grid-2idMtk65.js +1 -0
- package/dist/gateway/static/root/assets/connection-usage-Cm_McddI.js +1 -0
- package/dist/gateway/static/root/assets/connection-usage-guide-Ddh0bfkj.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-k2rjyjrp.js → connector-service-page-C3msXaBk.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-api-DtvB9Cjm.js → connectors-api-NcWECWKg.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-Crb6DILX.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-CAankdQw.js → date-picker-Cfjq1hD_.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DjM73fir.js → desktop-pet-ChFn9v-3.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-Rmh-GxHl.js → desktop-pet-settings-DvnVIv25.js} +1 -1
- package/dist/gateway/static/root/assets/{dev-view-store-BgW2Riyk.js → dev-view-store-DQJ61P5L.js} +1 -1
- package/dist/gateway/static/root/assets/{device-pairing-wizard-UdzSpNa5.js → device-pairing-wizard-KxaIL-OX.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-Rkw3f7lG.js → directory-picker-path-field-Drv864uE.js} +1 -1
- package/dist/gateway/static/root/assets/{discussion-annotation-sync-Dudoj_Fz.js → discussion-annotation-sync-DfBRkWtw.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-DxIGAO23.js → extension-debug-page-DAlBIt_R.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-iframe-host-63KpX6IP.js → extension-iframe-host-Bds-5kY_.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-marketplace-api-yXNUkQDA.js → extension-marketplace-api-CZg8nBwW.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-C811A_Ww.js → extension-page-ZTw-oucT.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-C4jLFIgh.js → extension-provider-NKWfjpdP.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-WJSw5MT0.js → extension-settings-page-CT7PPt_q.js} +1 -1
- package/dist/gateway/static/root/assets/{file-preview-surface-zE9AcaHM.js → file-preview-surface-BcLeaSNe.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-D6cc6W6E.js → gateway-config-swr-Cq-ByXL4.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-BSRNLciy.js → gateway-realtime-DwMd2PCt.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-CHrf6-nR.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-restart-Unun5hRL.js → gateway-restart-DdiVzbkL.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-DP-DV-e5.js → gateway-settings-1QUdNwrZ.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-C8g666Ja.js → gateway-startup-retry-PMJi5mX4.js} +1 -1
- package/dist/gateway/static/root/assets/{global-defaults-api-BObi-1ww.js → global-defaults-api-DgzZh3wX.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-CIcs7Mzy.js → home-page-Chn7YTiD.js} +2 -2
- package/dist/gateway/static/root/assets/{image-generation-api-C2SqYNyD.js → image-generation-api-CjVpsckq.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-C8ezUkOJ.js → imports-page-CJCvZFaQ.js} +1 -1
- package/dist/gateway/static/root/assets/index-8xLWo0Tt.js +11 -0
- package/dist/gateway/static/root/assets/index-iukJWzxG.css +1 -0
- package/dist/gateway/static/root/assets/install-connector-dialog-Bo06Ry3H.js +1 -0
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BRaY4-wA.js → keyboard-shortcuts-settings-BylFJeGu.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-BZtVcjF3.js → local-app-workbench-page-B3MSSFsr.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-MqP4EnJm.js → local-apps-page-BeV86rMJ.js} +1 -1
- package/dist/gateway/static/root/assets/{local-session-drafts-DTq9776a.js → local-session-drafts-jgw8UGsO.js} +2 -2
- package/dist/gateway/static/root/assets/{locale-store-B6OrWgY1.js → locale-store-CAZaC05J.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-hkHBjblX.js → logs-page-BMmSsUP5.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-DoX4eTM3.js → management-settings-Bu7T8ewk.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-DrhYZSmg.js → markdown-view-BatP4qeK.js} +1 -1
- package/dist/gateway/static/root/assets/{mcp-conversation-setup-page-BEp5E6TD.js → mcp-conversation-setup-page-rROtr0UN.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-D987i9Gc.js → media-plugins-88OV72YE.js} +1 -1
- package/dist/gateway/static/root/assets/messages-C7fckbyG.js +3 -0
- package/dist/gateway/static/root/assets/{model-selector-DXm4NS1_.js → model-selector-raBRBkN_.js} +1 -1
- package/dist/gateway/static/root/assets/{models-hub-cache-BLcha5rx.js → models-hub-cache-CzC9y3D0.js} +1 -1
- package/dist/gateway/static/root/assets/{note-detail-panel-Cl851ivY.js → note-detail-panel-BvA8Vkbm.js} +3 -3
- package/dist/gateway/static/root/assets/note-image-lightbox-D6kUDDd5.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-Ddsf7FVg.js → notes-api-zXpV6UXu.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-DSwA1MU1.js → notes-page-CjYH9Kle.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-api-CMmu4DzH.js → oauth-api-DmxSaxM1.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-provider-connect-BkhnftBq.js → oauth-provider-connect-D4Gfs-Ba.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-urhQBRaN.js → page-context-capture-button-Mig3d0UX.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-draft-BuNUerth.js → page-context-draft-C4IIZaKd.js} +1 -1
- package/dist/gateway/static/root/assets/page-header-store-D7G5utVi.js +1 -0
- package/dist/gateway/static/root/assets/{personal-avatar-B49ueeZO.js → personal-avatar-DLa-CpaK.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-page-f05ceuFn.js → personal-page-BhuT79Wd.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-settings-panel-DLQxzPYr.js → personal-settings-panel-XSUkgcr2.js} +1 -1
- package/dist/gateway/static/root/assets/phone-dependencies-card-DYwnuVh3.js +1 -0
- package/dist/gateway/static/root/assets/phone-model-connection-2F32QTHA.js +1 -0
- package/dist/gateway/static/root/assets/phone-model-picker-DCVzIr0s.js +1 -0
- package/dist/gateway/static/root/assets/phone-settings-page-DJttE4id.js +1 -0
- package/dist/gateway/static/root/assets/{phone-workspace-store-DbqktZbO.js → phone-workspace-store-Dxp-KhFP.js} +1 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-tyjAjFjA.js +1 -0
- package/dist/gateway/static/root/assets/{preference-select-fields-BZWqG7pu.js → preference-select-fields-BVP3MhGK.js} +1 -1
- package/dist/gateway/static/root/assets/{product-automation-feedback-DDQUsag7.js → product-automation-feedback-DbJvv92z.js} +1 -1
- package/dist/gateway/static/root/assets/{product-open-page-BkRP_HmA.js → product-open-page-RImqlhCD.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-o2Y3VNE7.js → product-preview-content-DxSqrKsg.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-modal-7Ohx-7OR.js → product-preview-modal-Cw8Q8Uom.js} +2 -2
- package/dist/gateway/static/root/assets/{project-detail-page-B2RsSHya.js → project-detail-page-CuugOYfe.js} +1 -1
- package/dist/gateway/static/root/assets/{project-understanding-BIMouiYX.js → project-understanding-BMKcoUW5.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-C9R5u3tF.js → projects-page-CFsABLvs.js} +1 -1
- package/dist/gateway/static/root/assets/{providers-api-BOCkRZ7X.js → providers-api-CAeXbJNF.js} +1 -1
- package/dist/gateway/static/root/assets/{recording-upload-C6muEHEO.js → recording-upload-CfpllTe5.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-Bl2guMRg.js → registry-api-fLOqFyrz.js} +1 -1
- package/dist/gateway/static/root/assets/{remote-access-hub-BceSMbCs.js → remote-access-hub-BvKOxy0L.js} +1 -1
- package/dist/gateway/static/root/assets/{resource-unavailable-CUNbPkdj.js → resource-unavailable-D15jzjV_.js} +1 -1
- package/dist/gateway/static/root/assets/route-preload-BQapekpy.js +2 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-LopLjgvu.js → runtime-tools-api-D0Nrvuqv.js} +1 -1
- package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-9HIPerDP.js → runtime-tools-settings-panel-CA27XgL2.js} +1 -1
- package/dist/gateway/static/root/assets/{service-recommendation-list-CoMI6MB1.js → service-recommendation-list-B0RoYLVT.js} +1 -1
- package/dist/gateway/static/root/assets/session-api-CHRP5Lwf.js +1 -0
- package/dist/gateway/static/root/assets/session-channel-icon-D1ktvt1P.js +1 -0
- package/dist/gateway/static/root/assets/session-identity-label-BP7OIYth.js +1 -0
- package/dist/gateway/static/root/assets/session-manager-DRRWwKE4.js +25 -0
- package/dist/gateway/static/root/assets/{sessions-page-BT0GdXdS.js → sessions-page-uJHS3-6F.js} +1 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CZ4J3Kuy.js +1 -0
- package/dist/gateway/static/root/assets/{settings-advanced-section-CEorDLUp.js → settings-advanced-section-D-llwfSj.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-mode-store-C2LZqBES.js → settings-mode-store-BspMKc9N.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-C_Np_6qZ.js → settings-page-CedwaHM0.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-header-BAN34UQi.js → settings-page-header-LuOJvqNa.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-B5TVFBV2.js → settings-page-layout-CduQ8w4a.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-interaction-page-BYvTJW3_.js → setup-interaction-page-ujpPGl84.js} +1 -1
- package/dist/gateway/static/root/assets/{setup-status-panel-UY2dH-sK.js → setup-status-panel-BN2aCJUN.js} +1 -1
- package/dist/gateway/static/root/assets/{share-link-dialog-BMcXyzr2.js → share-link-dialog-CTATUaa4.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-UQ6eUM2_.js → share-preview-page-Dq0J3VgS.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-DOeDN6Tm.js → shares-api-zegE8pSE.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-settings-W8XhuAoL.js → shares-settings-DXpvsRXq.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-api-Do_c0d9n.js → skill-api-DCL1EN7f.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-list-api-DpHaXI2l.js → skill-list-api-Bv0mmHbu.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-DDRd9IJ2.js → skill-reload-api-DPZbadiO.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-CaeJVKhO.js → skills-page-DMC7Gaku.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-DYWlWPJL.js → system-settings-panel-BYFUhlqG.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-De0qD7xw.js → task-detail-page-_Og3plZL.js} +3 -3
- package/dist/gateway/static/root/assets/{task-result-evidence-CICR5K1t.js → task-result-evidence-Bxm8-H0B.js} +1 -1
- package/dist/gateway/static/root/assets/{terminal-panel-store-BbWUcQe7.js → terminal-panel-store-Djf9l2qZ.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-TkG5mo0p.js → theme-store-8GFVtotZ.js} +1 -1
- package/dist/gateway/static/root/assets/{tracing-settings-page-CYXEy4EG.js → tracing-settings-page-oWW3SBZ4.js} +1 -1
- package/dist/gateway/static/root/assets/{tunnel-api-DquDm6U2.js → tunnel-api-D-mEsSGF.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-activity-store-Ot3wZ3oQ.js → understanding-activity-store-CvDjsd0I.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-refresh-store-C5KYFMaC.js → understanding-refresh-store-DzOZJm7A.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-1xFO4smo.js → usage-page-z-o6Uuev.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-HL8XRNR8.js → use-autosave-BVYS8UoK.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-XRlQBdNF.js → use-composer-attachments-lecOV2q5.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-CW956CXS.js → use-file-preview-expanded-nd_CuFsd.js} +2 -2
- package/dist/gateway/static/root/assets/{use-personal-profile-202s6tJt.js → use-personal-profile-CQi2ZCxV.js} +1 -1
- package/dist/gateway/static/root/assets/{use-workspace-tree-CjydkmH1.js → use-workspace-tree-BiaddkzX.js} +1 -1
- package/dist/gateway/static/root/assets/{user-model-page-OGPXx3pe.js → user-model-page-Bks1n0Nj.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-api-key-field-CxFu4MEA.js → voice-api-key-field-BbW8NFeZ.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-MHe5Pn-A.js → voice-config-api-jSMzZWWy.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-input-shortcut-events-B9xc1oK8.js → voice-input-shortcut-events-_SgYmx7X.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-transcribe-api-CVEcB6Pe.js → voice-transcribe-api-BJCfiRFU.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-C-JoAg2D.js → work-discovery-overlay-DSTSNyU7.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-B5Kx29Ru.js → work-discovery-page-Dd_QJJvb.js} +1 -1
- package/dist/gateway/static/root/assets/{working-directory-picker-modal-DGp9cNzH.js → working-directory-picker-modal-q39BUcJ6.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-api-HBXn8pL9.js → workspace-api-Di2OmCvz.js} +2 -2
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-B2r9wlix.js +1 -0
- package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-3cpwSG2w.js → workspace-file-preview-dialog-BUGNT765.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-open-location-menu-D0VOFvuP.js → workspace-open-location-menu-bMSvmQW7.js} +1 -1
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-BkdW2p3v.js → xopc-cloud-account-card-Bbe19Del.js} +1 -1
- package/dist/gateway/static/root/index.html +87 -85
- package/dist/package.js +1 -1
- package/dist/packages/computer-control-contract/src/index.js +33 -3
- package/dist/packages/gateway-contract/src/session-identity.js +2 -1
- package/dist/packages/gateway-contract/src/session-input-command.js +19 -2
- package/dist/packages/gateway-contract/src/specialists.js +1 -0
- package/dist/src/agent/embedded/execution-tool-policy.d.ts +1 -1
- package/dist/src/agent/embedded/execution-tool-policy.js +2 -2
- package/dist/src/agent/embedded/run-for-session.js +23 -8
- package/dist/src/agent/embedded/run-turn.js +30 -7
- package/dist/src/agent/embedded/runs.d.ts +2 -2
- package/dist/src/agent/embedded/runs.js +4 -4
- package/dist/src/agent/embedded/session-runner.js +26 -11
- package/dist/src/agent/embedded/tool-search-extension.d.ts +8 -2
- package/dist/src/agent/embedded/tool-search-extension.js +122 -30
- package/dist/src/agent/external-tools/cliProvider.d.ts +10 -9
- package/dist/src/agent/external-tools/cliProvider.js +24 -4
- package/dist/src/agent/external-tools/composio-provider.d.ts +3 -3
- package/dist/src/agent/external-tools/composio-provider.js +6 -3
- package/dist/src/agent/external-tools/discovery.d.ts +47 -0
- package/dist/src/agent/external-tools/discovery.js +56 -0
- package/dist/src/agent/external-tools/gateway-tools.js +26 -46
- package/dist/src/agent/external-tools/index.d.ts +1 -0
- package/dist/src/agent/external-tools/index.js +7 -0
- package/dist/src/agent/external-tools/personal-request-scope.d.ts +7 -0
- package/dist/src/agent/external-tools/personal-request-scope.js +83 -0
- package/dist/src/agent/external-tools/read-policy.js +5 -4
- package/dist/src/agent/external-tools/service.d.ts +2 -0
- package/dist/src/agent/external-tools/service.js +22 -3
- package/dist/src/agent/external-tools/tool-registry.d.ts +6 -0
- package/dist/src/agent/external-tools/types.d.ts +7 -2
- package/dist/src/agent/inbound/turn-dispatcher.d.ts +1 -1
- package/dist/src/agent/inbound/turn-dispatcher.js +3 -2
- package/dist/src/agent/orchestration/llm-turn-retry.d.ts +1 -1
- package/dist/src/agent/orchestration/llm-turn-retry.js +13 -8
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.d.ts +1 -0
- package/dist/src/agent/orchestration/run-agent-turn-with-timeout.js +3 -1
- package/dist/src/agent/prompt/sections/tooling.js +1 -1
- package/dist/src/agent/tool-manuals/computer.d.ts +1 -1
- package/dist/src/agent/tool-manuals/computer.js +6 -4
- package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
- package/dist/src/agent/tool-manuals/phone.js +4 -4
- package/dist/src/agent/tool-manuals/xopc-configuration.d.ts +1 -1
- package/dist/src/agent/tool-manuals/xopc-configuration.js +4 -2
- package/dist/src/agent/tools/computer-use-tool.js +7 -6
- package/dist/src/agent/tools/delegation-policy.js +1 -0
- package/dist/src/agent/tools/factory.js +4 -2
- package/dist/src/agent/tools/phone-use-tool.js +2 -2
- package/dist/src/agent/tools/web.js +22 -3
- package/dist/src/agent-matching/service.js +2 -2
- package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
- package/dist/src/computer/batch.d.ts +108 -0
- package/dist/src/computer/batch.js +125 -0
- package/dist/src/computer/broker.d.ts +30 -2
- package/dist/src/computer/broker.js +109 -17
- package/dist/src/computer/diagnostics.d.ts +5 -1
- package/dist/src/computer/diagnostics.js +22 -3
- package/dist/src/computer/errors.d.ts +15 -0
- package/dist/src/computer/errors.js +59 -3
- package/dist/src/computer/model-adapter.d.ts +58 -0
- package/dist/src/computer/model-adapter.js +112 -66
- package/dist/src/computer/native-errors.d.ts +2 -0
- package/dist/src/computer/native-errors.js +13 -0
- package/dist/src/computer/program-runtime.d.ts +1 -1
- package/dist/src/computer/program-runtime.js +1 -0
- package/dist/src/computer/runtime.d.ts +11 -0
- package/dist/src/computer/runtime.js +102 -34
- package/dist/src/computer/semantic-actions.js +4 -0
- package/dist/src/config/schema.d.ts +6 -0
- package/dist/src/extensions/agent-plugins/formats.js +2 -1
- package/dist/src/extensions/agent-plugins/inventory.d.ts +2 -0
- package/dist/src/extensions/agent-plugins/inventory.js +4 -1
- package/dist/src/extensions/agent-plugins/validation.d.ts +1 -0
- package/dist/src/extensions/agent-plugins/validation.js +2 -1
- package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
- package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
- package/dist/src/gateway/hono/routes/phone-dependencies.js +26 -5
- package/dist/src/gateway/hono/routes/phone-setup.js +42 -16
- package/dist/src/gateway/hono/routes/phone.js +22 -7
- package/dist/src/gateway/hono/routes/session-command-handler.js +9 -0
- package/dist/src/gateway/hono/routes/session-input-control.d.ts +3 -0
- package/dist/src/gateway/hono/routes/session-input-control.js +37 -0
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +12 -0
- package/dist/src/gateway/hono/routes/session-input-handler.js +22 -0
- package/dist/src/gateway/hono/routes/sessions.js +4 -0
- package/dist/src/gateway/service/agent-runner.js +5 -4
- package/dist/src/gateway/service/config-coordinator.d.ts +6 -0
- package/dist/src/gateway/service/session-input-coordinator.d.ts +6 -3
- package/dist/src/gateway/service/session-input-coordinator.js +47 -6
- package/dist/src/gateway/service.d.ts +1 -0
- package/dist/src/gateway/service.js +8 -5
- package/dist/src/home-intelligence/host.js +2 -2
- package/dist/src/personal-agent/capability-service.js +1 -1
- package/dist/src/personal-agent/request-access.d.ts +2 -0
- package/dist/src/personal-agent/request-access.js +22 -2
- package/dist/src/personal-agent/request-service.js +2 -2
- package/dist/src/personal-agent/specialist-capabilities.d.ts +2 -0
- package/dist/src/personal-agent/specialist-capabilities.js +9 -3
- package/dist/src/phone/adb-driver.d.ts +3 -0
- package/dist/src/phone/adb-driver.js +29 -0
- package/dist/src/phone/contracts.d.ts +14 -2
- package/dist/src/phone/contracts.js +8 -1
- package/dist/src/phone/gui-protocol.js +1 -1
- package/dist/src/phone/hdc-driver.d.ts +30 -0
- package/dist/src/phone/hdc-driver.js +331 -0
- package/dist/src/phone/hdc-video-bridge.d.ts +2 -0
- package/dist/src/phone/hdc-video-bridge.js +91 -0
- package/dist/src/phone/hdc-video-tools.d.ts +15 -0
- package/dist/src/phone/hdc-video-tools.js +123 -0
- package/dist/src/phone/hdc-video.d.ts +69 -0
- package/dist/src/phone/hdc-video.js +350 -0
- package/dist/src/phone/interactive-session.js +1 -1
- package/dist/src/phone/live-provider.d.ts +6 -0
- package/dist/src/phone/live-provider.js +1 -0
- package/dist/src/phone/model-adapter.d.ts +3 -0
- package/dist/src/phone/model-adapter.js +5 -3
- package/dist/src/phone/repository.js +2 -1
- package/dist/src/phone/runtime.d.ts +10 -4
- package/dist/src/phone/runtime.js +151 -85
- package/dist/src/phone/setup/service.d.ts +8 -6
- package/dist/src/phone/setup/service.js +33 -16
- package/dist/src/platform/client.d.ts +1 -1
- package/dist/src/platform/contracts.d.ts +1 -1
- package/dist/src/process/phone-process.d.ts +1 -1
- package/dist/src/process/phone-process.js +2 -2
- package/dist/src/runtime-tools/downloader.d.ts +1 -0
- package/dist/src/runtime-tools/downloader.js +8 -4
- package/dist/src/runtime-tools/harmony-dependencies.d.ts +24 -0
- package/dist/src/runtime-tools/harmony-dependencies.js +272 -0
- package/dist/src/runtime-tools/harmony-dependency-catalog.d.ts +4 -0
- package/dist/src/runtime-tools/harmony-dependency-catalog.js +54 -0
- package/dist/src/runtime-tools/harmony-paths.d.ts +9 -0
- package/dist/src/runtime-tools/harmony-paths.js +15 -0
- package/dist/src/runtime-tools/hdc-dependency-catalog.d.ts +8 -0
- package/dist/src/runtime-tools/hdc-dependency-catalog.js +83 -0
- package/dist/src/runtime-tools/hdc-files.d.ts +14 -0
- package/dist/src/runtime-tools/hdc-files.js +87 -0
- package/dist/src/runtime-tools/phone-dependencies.d.ts +6 -1
- package/dist/src/runtime-tools/phone-dependencies.js +20 -2
- package/dist/src/runtime-tools/phone-dependency-catalog.d.ts +10 -1
- package/dist/src/runtime-tools/phone-dependency-catalog.js +2 -0
- package/dist/src/runtime-tools/types.d.ts +1 -1
- package/dist/src/storage/sqlite/schema.d.ts +2 -2
- package/dist/src/storage/sqlite/schema.js +7 -7
- package/dist/src/storage/sqlite/schema.sql +16 -0
- package/dist/src/storage/sqlite/session-creation-repository.js +3 -0
- package/dist/src/storage/sqlite/session-input-control-repository.d.ts +12 -0
- package/dist/src/storage/sqlite/session-input-control-repository.js +83 -0
- package/dist/src/storage/sqlite/session-input-repository.d.ts +2 -0
- package/dist/src/storage/sqlite/session-input-repository.js +17 -5
- package/dist/src/storage/sqlite/session-repository.js +1 -0
- package/dist/src/storage/sqlite/session-turn-replace-repository.d.ts +2 -0
- package/dist/src/storage/sqlite/session-turn-replace-repository.js +14 -2
- package/dist/src/storage/sqlite/upgrades/262_session_input_control.sql +15 -0
- package/package.json +2 -2
- package/skills/tools/configure-xopc/SKILL.md +2 -2
- package/skills/tools/configure-xopc/references/phone/acceptance.md +3 -2
- package/skills/tools/configure-xopc/references/phone/dependencies.md +18 -2
- package/skills/tools/configure-xopc/references/phone/harmonyos.md +16 -0
- package/skills/tools/configure-xopc/references/phone/overview.md +2 -2
- package/skills/tools/configure-xopc/references/scene-index.md +2 -2
- package/dist/gateway/static/root/assets/apps-page-D-n71lO1.js +0 -1
- package/dist/gateway/static/root/assets/automations-workspace-DWDWy-SG.js +0 -9
- package/dist/gateway/static/root/assets/capabilities-page-IcwojmJK.js +0 -2
- package/dist/gateway/static/root/assets/capability-links-DzQWK1Fh.js +0 -1
- package/dist/gateway/static/root/assets/chat-page-CwP4OMdW.js +0 -72
- package/dist/gateway/static/root/assets/computer-settings-page-DyAlOzqY.js +0 -1
- package/dist/gateway/static/root/assets/connected-providers-grid-D0lXg22c.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-DI_Q0CKz.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-BFeFfApQ.js +0 -1
- package/dist/gateway/static/root/assets/index-Cz-VjTNd.css +0 -1
- package/dist/gateway/static/root/assets/index-D1_PUrJf.js +0 -11
- package/dist/gateway/static/root/assets/install-connector-dialog-Cn4nRSyt.js +0 -1
- package/dist/gateway/static/root/assets/list-tree-B0OMswgM.js +0 -1
- package/dist/gateway/static/root/assets/messages-jwdBhfL9.js +0 -3
- package/dist/gateway/static/root/assets/note-image-lightbox-DGYRJS03.js +0 -1
- package/dist/gateway/static/root/assets/page-header-store-CEn_kPsn.js +0 -1
- package/dist/gateway/static/root/assets/phone-dependencies-card-DjmC1Z5j.js +0 -1
- package/dist/gateway/static/root/assets/phone-model-connection-BRjHSgYn.js +0 -1
- package/dist/gateway/static/root/assets/phone-model-picker-DgIiWLhR.js +0 -1
- package/dist/gateway/static/root/assets/phone-settings-page-DCZGCL_z.js +0 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-D4tGKip4.js +0 -1
- package/dist/gateway/static/root/assets/route-preload-C1BKDjnu.js +0 -2
- package/dist/gateway/static/root/assets/session-api-Bfmlmn9F.js +0 -1
- package/dist/gateway/static/root/assets/session-channel-icon-SsY70Z6t.js +0 -1
- package/dist/gateway/static/root/assets/session-identity-label-B7sgG1PE.js +0 -1
- package/dist/gateway/static/root/assets/session-manager-X4UHOjjO.js +0 -25
- package/dist/gateway/static/root/assets/settings-advanced-gate-Dk9c-Z5e.js +0 -1
- 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 ||
|
|
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
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
|
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 ===
|
|
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
|
|
@@ -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[]
|
|
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
|
});
|
|
@@ -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 >
|
|
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:
|
|
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 >
|
|
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 >
|
|
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;
|