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