@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
|
@@ -1,16 +1,18 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
3
|
import { resolveEffectiveAgentConfigForSession } from "../config/agent-profile.js";
|
|
4
|
-
import { COMPUTER_CONTROL_TOOL, ComputerAppSchema, ComputerObservationSchema, ComputerWindowSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
|
|
4
|
+
import { COMPUTER_CONTROL_TOOL, ComputerActionSchema, ComputerAppSchema, ComputerObservationSchema, ComputerTransportTimingSchema, ComputerWindowSchema, init_src } from "../../packages/computer-control-contract/src/index.js";
|
|
5
5
|
import { ComputerServiceLimitsSchema, computerModelProfile, init_model_policy } from "./model-policy.js";
|
|
6
6
|
import { getApiKey, init_providers, resolveModel } from "../providers/index.js";
|
|
7
7
|
import { rejectUnbudgetedCloudTransport } from "../providers/xopc-cloud-credit-budget.js";
|
|
8
8
|
import { enterComputerControl, leaveComputerControl } from "./control-guard.js";
|
|
9
|
+
import { clearComputerFrames, computerAgentTurn, retainComputerFrame } from "./agent-context.js";
|
|
9
10
|
import { ComputerDiagnosticSchema, ComputerOperationError, computerDiagnostic, computerRecovery } from "./errors.js";
|
|
10
11
|
import { createComputerModelAdapter, predictComputerStep, readComputerJson } from "./model-adapter.js";
|
|
11
12
|
import { groundComputerAction } from "./semantic-actions.js";
|
|
12
13
|
import { ComputerFlowCapture, ComputerFlowStore, computerFlowHint, computerFlowMetadata } from "./flows.js";
|
|
13
14
|
import { ComputerNativeTimingSchema, ComputerSessionDiagnostics } from "./diagnostics.js";
|
|
15
|
+
import { executeComputerProgram } from "./program-runtime.js";
|
|
14
16
|
import { ComputerExpectationSchema, ComputerTaskState, verifyComputerExpectation } from "./task-state.js";
|
|
15
17
|
import { randomUUID } from "node:crypto";
|
|
16
18
|
import { z } from "zod";
|
|
@@ -36,6 +38,7 @@ const Reply = z.object({
|
|
|
36
38
|
grantId: z.string().optional(),
|
|
37
39
|
observation: ComputerObservationSchema.optional(),
|
|
38
40
|
nativeMs: ComputerNativeTimingSchema.optional(),
|
|
41
|
+
transportTiming: ComputerTransportTimingSchema.optional(),
|
|
39
42
|
errorCode: z.string().optional(),
|
|
40
43
|
diagnostic: ComputerDiagnosticSchema.optional(),
|
|
41
44
|
apps: z.array(ComputerAppSchema).max(100).optional(),
|
|
@@ -72,7 +75,8 @@ const ComputerUseInputSchema = z.discriminatedUnion("op", [
|
|
|
72
75
|
appRef: z.string().min(1).max(200),
|
|
73
76
|
windowRef: z.string().min(1).max(200).optional(),
|
|
74
77
|
mode: z.enum(["observe", "control"]),
|
|
75
|
-
prepare: z.boolean()
|
|
78
|
+
prepare: z.boolean(),
|
|
79
|
+
planner: z.enum(["gui", "agent"]).optional()
|
|
76
80
|
}).strict(),
|
|
77
81
|
z.object({
|
|
78
82
|
op: z.literal("observe"),
|
|
@@ -85,6 +89,12 @@ const ComputerUseInputSchema = z.discriminatedUnion("op", [
|
|
|
85
89
|
expect: ComputerExpectationSchema.optional(),
|
|
86
90
|
flowId: z.uuid().optional()
|
|
87
91
|
}).strict(),
|
|
92
|
+
z.object({
|
|
93
|
+
op: z.literal("exec"),
|
|
94
|
+
code: z.string().max(65536),
|
|
95
|
+
maxActions: z.number().int().min(1).max(12).optional(),
|
|
96
|
+
timeoutMs: z.number().int().min(100).max(12e4).optional()
|
|
97
|
+
}).strict(),
|
|
88
98
|
z.object({
|
|
89
99
|
op: z.literal("run"),
|
|
90
100
|
goal: z.string().min(1).max(4e3),
|
|
@@ -113,7 +123,7 @@ var ComputerRuntime = class {
|
|
|
113
123
|
this.getTurnEndpoint = getTurnEndpoint;
|
|
114
124
|
this.flowStore = flowStore;
|
|
115
125
|
}
|
|
116
|
-
async execute(owner, input, signal) {
|
|
126
|
+
async execute(owner, input, signal, execution) {
|
|
117
127
|
input = ComputerUseInputSchema.parse(input);
|
|
118
128
|
if (!owner) throw new Error("COMPUTER_CONVERSATION_REQUIRED");
|
|
119
129
|
if (input.op === "flows" || input.op === "forget_flow") {
|
|
@@ -207,7 +217,7 @@ var ComputerRuntime = class {
|
|
|
207
217
|
if (diagnostics) this.openingReports.set(owner, diagnostics);
|
|
208
218
|
try {
|
|
209
219
|
const operationSignal = signal ? AbortSignal.any([signal, operation.signal]) : operation.signal;
|
|
210
|
-
const result = input.op === "run" ? await this.executeGoal(owner, input, operationSignal, diagnostics) : await this.executeInput(owner, input, operationSignal, diagnostics);
|
|
220
|
+
const result = input.op === "exec" ? await this.executeProgram(owner, input, operationSignal, execution) : input.op === "run" ? await this.executeGoal(owner, input, operationSignal, diagnostics) : await this.executeInput(owner, input, operationSignal, diagnostics);
|
|
211
221
|
if (result.errorCode) diagnostics?.fail(new Error(result.errorCode), diagnostics.phase, result.receipt?.dispatch ?? "notStarted");
|
|
212
222
|
if (diagnostics && !this.sessions.has(owner)) this.retainReport(owner, diagnostics);
|
|
213
223
|
return {
|
|
@@ -242,6 +252,182 @@ var ComputerRuntime = class {
|
|
|
242
252
|
const effective = resolveEffectiveAgentConfigForSession(owner).config;
|
|
243
253
|
return JSON.stringify([effective.id, effective.workspace]);
|
|
244
254
|
}
|
|
255
|
+
async executeProgram(owner, input, signal, execution) {
|
|
256
|
+
const s = this.sessions.get(owner);
|
|
257
|
+
if (!s) throw new Error("COMPUTER_OPEN_REQUIRED");
|
|
258
|
+
if (!("planner" in s.binding) || s.binding.planner !== "agent" || !execution) throw new Error("COMPUTER_PLANNER_MISMATCH");
|
|
259
|
+
const turn = computerAgentTurn(owner);
|
|
260
|
+
if (JSON.stringify(turn.binding) !== JSON.stringify(s.binding)) {
|
|
261
|
+
await this.close(owner);
|
|
262
|
+
throw new Error("COMPUTER_AGENT_MODEL_CHANGED");
|
|
263
|
+
}
|
|
264
|
+
const combined = AbortSignal.any([signal, s.controller.signal]);
|
|
265
|
+
let current;
|
|
266
|
+
let actions = 0;
|
|
267
|
+
let imageRef;
|
|
268
|
+
const observe = async (observationSignal = combined) => {
|
|
269
|
+
current?.frame?.fill(0);
|
|
270
|
+
current = await this.send(s, {
|
|
271
|
+
op: "observe",
|
|
272
|
+
sessionId: s.id,
|
|
273
|
+
owner
|
|
274
|
+
}, observationSignal);
|
|
275
|
+
if (current.value.status !== "ready" || current.value.errorCode || !current.value.observation) throw new Error(current.value.errorCode ?? "COMPUTER_NOT_READY");
|
|
276
|
+
const observation = current.value.observation;
|
|
277
|
+
let data;
|
|
278
|
+
try {
|
|
279
|
+
data = JSON.parse(observation.summary);
|
|
280
|
+
} catch {
|
|
281
|
+
data = {
|
|
282
|
+
text: observation.summary,
|
|
283
|
+
elements: [],
|
|
284
|
+
truncated: true
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
return {
|
|
288
|
+
snapshotId: observation.id,
|
|
289
|
+
...data
|
|
290
|
+
};
|
|
291
|
+
};
|
|
292
|
+
const snapshot = (id) => {
|
|
293
|
+
const observation = current?.value.observation;
|
|
294
|
+
if (!observation || observation.id !== id || Date.now() - observation.capturedAt > 5e3) throw new Error("COMPUTER_STALE_OBSERVATION");
|
|
295
|
+
return observation;
|
|
296
|
+
};
|
|
297
|
+
try {
|
|
298
|
+
const result = await executeComputerProgram(input.code, async (method, args, callSignal) => {
|
|
299
|
+
callSignal.throwIfAborted();
|
|
300
|
+
if (!this.getConfig().computer.enabled || Date.now() - s.createdAt >= this.getConfig().computer.maxSessionDurationMs) throw new Error("COMPUTER_SESSION_BUDGET");
|
|
301
|
+
if (JSON.stringify(computerAgentTurn(owner).binding) !== JSON.stringify(s.binding)) throw new Error("COMPUTER_AGENT_MODEL_CHANGED");
|
|
302
|
+
await turn.authorize?.(method, args);
|
|
303
|
+
const hostResult = await (async () => {
|
|
304
|
+
if (method === "observe") {
|
|
305
|
+
const options = z.object({ visual: z.boolean().optional() }).strict().parse(args ?? {});
|
|
306
|
+
const state = await observe(callSignal);
|
|
307
|
+
if (options.visual && current?.frame && current.mimeType) imageRef = retainComputerFrame(owner, execution.toolCallId, current.frame, current.mimeType);
|
|
308
|
+
return state;
|
|
309
|
+
}
|
|
310
|
+
if (method === "emitScreenshot") {
|
|
311
|
+
snapshot(z.object({ snapshotId: z.string() }).strict().parse(args).snapshotId);
|
|
312
|
+
if (!current?.frame || !current.mimeType) throw new Error("COMPUTER_FRAME_REQUIRED");
|
|
313
|
+
imageRef = retainComputerFrame(owner, execution.toolCallId, current.frame, current.mimeType);
|
|
314
|
+
return { imageRef };
|
|
315
|
+
}
|
|
316
|
+
if (method === "resolve") {
|
|
317
|
+
const value = z.object({
|
|
318
|
+
snapshotId: z.string(),
|
|
319
|
+
role: z.string().max(100),
|
|
320
|
+
label: z.string().max(300)
|
|
321
|
+
}).strict().parse(args);
|
|
322
|
+
const data = JSON.parse(snapshot(value.snapshotId).summary);
|
|
323
|
+
if (data.truncated || !Array.isArray(data.elements)) throw new Error("COMPUTER_ELEMENT_REF_REQUIRED");
|
|
324
|
+
const candidates = data.elements.filter((e) => e.role === value.role && e.label === value.label && e.in_web_content !== true);
|
|
325
|
+
if (candidates.length !== 1 || typeof candidates[0].ref !== "string") throw new Error("COMPUTER_ELEMENT_REF_REQUIRED");
|
|
326
|
+
return candidates[0];
|
|
327
|
+
}
|
|
328
|
+
if (method === "verify" || method === "waitFor") {
|
|
329
|
+
const value = z.object({
|
|
330
|
+
expect: ComputerExpectationSchema,
|
|
331
|
+
timeoutMs: z.number().int().min(0).max(5e3).optional()
|
|
332
|
+
}).strict().parse(args);
|
|
333
|
+
const deadline = Date.now() + (method === "waitFor" ? value.timeoutMs ?? 2e3 : 0);
|
|
334
|
+
for (let sample = 0; sample < 20; sample++) {
|
|
335
|
+
const state = await observe(callSignal);
|
|
336
|
+
const verification = verifyComputerExpectation(value.expect, current.value.observation);
|
|
337
|
+
s.diagnostics.verify(verification);
|
|
338
|
+
if (verification?.status === "satisfied" || Date.now() >= deadline || sample === 19) return {
|
|
339
|
+
...state,
|
|
340
|
+
verification
|
|
341
|
+
};
|
|
342
|
+
await setTimeout(100, void 0, { signal: callSignal });
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
if (method === "act") {
|
|
346
|
+
if (s.mode === "observe") throw new Error("COMPUTER_READ_ONLY");
|
|
347
|
+
const value = z.object({
|
|
348
|
+
snapshotId: z.string(),
|
|
349
|
+
action: ComputerActionSchema,
|
|
350
|
+
expect: ComputerExpectationSchema.optional()
|
|
351
|
+
}).strict().parse(args);
|
|
352
|
+
const before = snapshot(value.snapshotId);
|
|
353
|
+
if (++actions > (input.maxActions ?? 6)) throw new Error("COMPUTER_ACTION_BUDGET");
|
|
354
|
+
const action = groundComputerAction(value.action, before);
|
|
355
|
+
s.task.assertProgress(action, before);
|
|
356
|
+
s.pendingContext = {
|
|
357
|
+
goal: "Authorized main-agent UI program",
|
|
358
|
+
before,
|
|
359
|
+
expectation: value.expect
|
|
360
|
+
};
|
|
361
|
+
const envelope = {
|
|
362
|
+
actionId: randomUUID(),
|
|
363
|
+
sessionId: s.id,
|
|
364
|
+
observationId: before.id,
|
|
365
|
+
brokerEpoch: before.brokerEpoch,
|
|
366
|
+
generation: before.generation,
|
|
367
|
+
grantId: current.value.grantId,
|
|
368
|
+
deadlineAt: Date.now() + 12e4,
|
|
369
|
+
action
|
|
370
|
+
};
|
|
371
|
+
const context = {
|
|
372
|
+
observationsReused: 0,
|
|
373
|
+
stabilityObservations: 0,
|
|
374
|
+
actionsRemaining: 1,
|
|
375
|
+
nativeMs: {
|
|
376
|
+
precheckMs: 0,
|
|
377
|
+
inputMs: 0,
|
|
378
|
+
postObserveMs: 0
|
|
379
|
+
}
|
|
380
|
+
};
|
|
381
|
+
clearComputerFrames(owner);
|
|
382
|
+
imageRef = void 0;
|
|
383
|
+
current?.frame?.fill(0);
|
|
384
|
+
current = void 0;
|
|
385
|
+
const authorizationDeadline = Date.now() + 6e4;
|
|
386
|
+
let reply = await this.dispatchAction(s, envelope, callSignal, context);
|
|
387
|
+
while (reply.status === "pending_action") {
|
|
388
|
+
if (Date.now() >= authorizationDeadline) throw new Error("COMPUTER_AUTHORIZATION_TIMEOUT");
|
|
389
|
+
await setTimeout(250, void 0, { signal: callSignal });
|
|
390
|
+
reply = await this.dispatchAction(s, envelope, callSignal, context);
|
|
391
|
+
}
|
|
392
|
+
current = context.observation;
|
|
393
|
+
if (reply.errorCode || reply.receipt?.dispatch !== "completed") throw new Error(reply.errorCode ?? "COMPUTER_NATIVE_ACTION_FAILED");
|
|
394
|
+
let state = {};
|
|
395
|
+
try {
|
|
396
|
+
state = JSON.parse(current?.value.observation?.summary ?? "{}");
|
|
397
|
+
} catch {
|
|
398
|
+
state = { truncated: true };
|
|
399
|
+
}
|
|
400
|
+
return {
|
|
401
|
+
...state,
|
|
402
|
+
receipt: reply.receipt,
|
|
403
|
+
verification: reply.verification,
|
|
404
|
+
snapshotId: current?.value.observation?.id
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
throw new Error("COMPUTER_INVALID_INPUT");
|
|
408
|
+
})();
|
|
409
|
+
return await turn.complete?.(method, hostResult) ?? hostResult;
|
|
410
|
+
}, s.programStore ??= Object.create(null), combined, input.timeoutMs);
|
|
411
|
+
if (result.status === "program_error") {
|
|
412
|
+
await this.close(owner);
|
|
413
|
+
return {
|
|
414
|
+
...result,
|
|
415
|
+
sessionId: s.id
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
return {
|
|
419
|
+
...result,
|
|
420
|
+
sessionId: s.id,
|
|
421
|
+
...imageRef ? { imageRef } : {},
|
|
422
|
+
budget: this.budget(s)
|
|
423
|
+
};
|
|
424
|
+
} catch (error) {
|
|
425
|
+
await this.close(owner);
|
|
426
|
+
throw error;
|
|
427
|
+
} finally {
|
|
428
|
+
current?.frame?.fill(0);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
245
431
|
async executeGoal(owner, input, signal, diagnostics) {
|
|
246
432
|
const startedAt = Date.now();
|
|
247
433
|
const phasesBefore = diagnostics?.snapshot().phaseMs;
|
|
@@ -310,7 +496,7 @@ var ComputerRuntime = class {
|
|
|
310
496
|
} finally {
|
|
311
497
|
context.observation?.frame?.fill(0);
|
|
312
498
|
context.observation = void 0;
|
|
313
|
-
this.sessions.get(owner)?.adapter
|
|
499
|
+
this.sessions.get(owner)?.adapter?.reset?.();
|
|
314
500
|
}
|
|
315
501
|
}
|
|
316
502
|
async executeInput(owner, input, signal, diagnostics, goalContext) {
|
|
@@ -321,7 +507,7 @@ var ComputerRuntime = class {
|
|
|
321
507
|
throw new Error("COMPUTER_DISABLED");
|
|
322
508
|
}
|
|
323
509
|
let s = this.sessions.get(owner);
|
|
324
|
-
if (s
|
|
510
|
+
if (s && !("planner" in s.binding) && s.binding.modelRef.startsWith("xopc-cloud/")) rejectUnbudgetedCloudTransport("computer use");
|
|
325
511
|
if (input.op === "discover") {
|
|
326
512
|
const endpoint = this.resolveEndpoint(owner);
|
|
327
513
|
const id = randomUUID();
|
|
@@ -340,49 +526,66 @@ var ComputerRuntime = class {
|
|
|
340
526
|
if (input.op === "open" && !s) {
|
|
341
527
|
const endpoint = this.resolveEndpoint(owner);
|
|
342
528
|
const effective = resolveEffectiveAgentConfigForSession(owner).config;
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
const model = resolveModel(ref);
|
|
346
|
-
const profile = computerModelProfile(model);
|
|
347
|
-
if (!profile) throw new Error("COMPUTER_MODEL_CAPABILITY_REQUIRED");
|
|
348
|
-
const apiKey = await getApiKey(model.provider, {
|
|
349
|
-
agentId: effective.id,
|
|
350
|
-
appConfig: config
|
|
351
|
-
});
|
|
352
|
-
if (!apiKey) throw new Error("COMPUTER_MODEL_KEY_MISSING");
|
|
353
|
-
let deployment;
|
|
529
|
+
let adapter;
|
|
530
|
+
let binding;
|
|
354
531
|
let serviceLimits;
|
|
355
|
-
if (
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
532
|
+
if (input.planner === "agent") {
|
|
533
|
+
const turn = computerAgentTurn(owner);
|
|
534
|
+
binding = turn.binding;
|
|
535
|
+
turn.cleanup = async () => {
|
|
536
|
+
await this.close(owner);
|
|
537
|
+
};
|
|
538
|
+
} else {
|
|
539
|
+
const ref = effective.models.computerUse?.primary;
|
|
540
|
+
if (!ref) throw new Error("COMPUTER_MODEL_REQUIRED");
|
|
541
|
+
const model = resolveModel(ref);
|
|
542
|
+
const profile = computerModelProfile(model);
|
|
543
|
+
if (!profile) throw new Error("COMPUTER_MODEL_CAPABILITY_REQUIRED");
|
|
544
|
+
const apiKey = await getApiKey(model.provider, {
|
|
545
|
+
agentId: effective.id,
|
|
546
|
+
appConfig: config
|
|
361
547
|
});
|
|
362
|
-
if (!
|
|
363
|
-
|
|
364
|
-
|
|
548
|
+
if (!apiKey) throw new Error("COMPUTER_MODEL_KEY_MISSING");
|
|
549
|
+
let deployment;
|
|
550
|
+
if (model.provider === "xopc-cloud") {
|
|
551
|
+
rejectUnbudgetedCloudTransport("computer use");
|
|
552
|
+
const response = await fetch(`${model.baseUrl.replace(/\/$/, "")}/models`, {
|
|
553
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
554
|
+
redirect: "error",
|
|
555
|
+
signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(15e3)]) : AbortSignal.timeout(15e3)
|
|
556
|
+
});
|
|
557
|
+
if (!response.ok) {
|
|
558
|
+
await response.body?.cancel();
|
|
559
|
+
throw new Error("COMPUTER_DEPLOYMENT_UNAVAILABLE");
|
|
560
|
+
}
|
|
561
|
+
const metadata = (await readComputerJson(response, 2 * 1024 * 1024)).data?.find((item) => item.id === model.id)?.xopc;
|
|
562
|
+
const parsedDeployment = z.object({
|
|
563
|
+
revision: z.string().regex(/^[a-f0-9]{64}$/),
|
|
564
|
+
origin: z.string().url().optional()
|
|
565
|
+
}).safeParse(metadata?.computerDeployment);
|
|
566
|
+
const parsedLimits = ComputerServiceLimitsSchema.optional().safeParse(metadata?.computerLimits);
|
|
567
|
+
if (!parsedDeployment.success || !parsedLimits.success) throw new Error("COMPUTER_DEPLOYMENT_UNAVAILABLE");
|
|
568
|
+
deployment = parsedDeployment.data;
|
|
569
|
+
serviceLimits = parsedLimits.data;
|
|
365
570
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
571
|
+
adapter = createComputerModelAdapter({
|
|
572
|
+
modelId: model.id,
|
|
573
|
+
baseUrl: model.baseUrl,
|
|
574
|
+
api: model.api,
|
|
575
|
+
apiKey,
|
|
576
|
+
profile,
|
|
577
|
+
headers: model.headers,
|
|
578
|
+
deploymentRevision: deployment?.revision,
|
|
579
|
+
maxOutputTokens: Math.min(2048, model.maxTokens ?? 2048, serviceLimits?.maxOutputTokens ?? 2048)
|
|
580
|
+
});
|
|
581
|
+
binding = {
|
|
582
|
+
modelRef: ref,
|
|
583
|
+
profile,
|
|
584
|
+
origin: new URL(model.baseUrl).origin,
|
|
585
|
+
runtimeLocation: "unknown",
|
|
586
|
+
...deployment?.origin ? { upstreamOrigin: deployment.origin } : {}
|
|
587
|
+
};
|
|
375
588
|
}
|
|
376
|
-
const adapter = createComputerModelAdapter({
|
|
377
|
-
modelId: model.id,
|
|
378
|
-
baseUrl: model.baseUrl,
|
|
379
|
-
api: model.api,
|
|
380
|
-
apiKey,
|
|
381
|
-
profile,
|
|
382
|
-
headers: model.headers,
|
|
383
|
-
deploymentRevision: deployment?.revision,
|
|
384
|
-
maxOutputTokens: Math.min(2048, model.maxTokens ?? 2048, serviceLimits?.maxOutputTokens ?? 2048)
|
|
385
|
-
});
|
|
386
589
|
signal.throwIfAborted();
|
|
387
590
|
s = {
|
|
388
591
|
id: randomUUID(),
|
|
@@ -393,13 +596,7 @@ var ComputerRuntime = class {
|
|
|
393
596
|
windowRef: input.windowRef,
|
|
394
597
|
endpointId: endpoint.endpointId,
|
|
395
598
|
adapter,
|
|
396
|
-
binding
|
|
397
|
-
modelRef: ref,
|
|
398
|
-
profile,
|
|
399
|
-
origin: new URL(model.baseUrl).origin,
|
|
400
|
-
runtimeLocation: "unknown",
|
|
401
|
-
...deployment?.origin ? { upstreamOrigin: deployment.origin } : {}
|
|
402
|
-
},
|
|
599
|
+
binding,
|
|
403
600
|
createdAt: Date.now(),
|
|
404
601
|
actions: 0,
|
|
405
602
|
modelRequests: 0,
|
|
@@ -430,7 +627,7 @@ var ComputerRuntime = class {
|
|
|
430
627
|
s.diagnostics.phase = "observe";
|
|
431
628
|
try {
|
|
432
629
|
if (input.op === "open") {
|
|
433
|
-
if (input.appRef !== s.appRef || input.windowRef !== s.windowRef || input.mode !== s.mode || input.prepare !== s.prepare) throw new Error("COMPUTER_CLOSE_BEFORE_TARGET_CHANGE");
|
|
630
|
+
if (input.planner === "agent" !== "planner" in s.binding || input.appRef !== s.appRef || input.windowRef !== s.windowRef || input.mode !== s.mode || input.prepare !== s.prepare) throw new Error("COMPUTER_CLOSE_BEFORE_TARGET_CHANGE");
|
|
434
631
|
const reply = await this.send(s, {
|
|
435
632
|
op: "open",
|
|
436
633
|
sessionId: s.id,
|
|
@@ -474,7 +671,7 @@ var ComputerRuntime = class {
|
|
|
474
671
|
this.reserveRescue(s, signal);
|
|
475
672
|
} else if (status.value.status !== "ready") return this.present(status.value);
|
|
476
673
|
if (input.op === "step") {
|
|
477
|
-
if (input.flowId || s.lastFlowId) s.adapter
|
|
674
|
+
if (input.flowId || s.lastFlowId) s.adapter?.reset?.();
|
|
478
675
|
s.lastFlowId = input.flowId;
|
|
479
676
|
}
|
|
480
677
|
while (true) {
|
|
@@ -513,7 +710,7 @@ var ComputerRuntime = class {
|
|
|
513
710
|
};
|
|
514
711
|
if (input.op === "step" && input.expect?.kind !== "text" && verification?.status === "satisfied") {
|
|
515
712
|
s.diagnostics.verify(verification);
|
|
516
|
-
s.adapter
|
|
713
|
+
s.adapter?.reset?.();
|
|
517
714
|
return {
|
|
518
715
|
status: "condition_satisfied",
|
|
519
716
|
sessionId: s.id,
|
|
@@ -536,6 +733,7 @@ var ComputerRuntime = class {
|
|
|
536
733
|
}
|
|
537
734
|
phase = "model";
|
|
538
735
|
const predictionInput = input;
|
|
736
|
+
if (!s.adapter) throw new Error("COMPUTER_PLANNER_MISMATCH");
|
|
539
737
|
const proposal = await s.diagnostics.measure("model", () => predictComputerStep(s.adapter, {
|
|
540
738
|
goal: predictionInput.op === "observe" ? predictionInput.question : predictionInput.goal,
|
|
541
739
|
readOnly: predictionInput.op === "observe",
|
|
@@ -636,7 +834,7 @@ var ComputerRuntime = class {
|
|
|
636
834
|
}
|
|
637
835
|
s.rescues++;
|
|
638
836
|
s.diagnostics.count("rescueAttempts");
|
|
639
|
-
s.adapter
|
|
837
|
+
s.adapter?.reset?.();
|
|
640
838
|
}
|
|
641
839
|
async dispatchAction(s, envelope, signal, goalContext) {
|
|
642
840
|
if (!s.pending) {
|
|
@@ -655,7 +853,7 @@ var ComputerRuntime = class {
|
|
|
655
853
|
reply.frame?.fill(0);
|
|
656
854
|
throw new Error("COMPUTER_RECEIPT_MISMATCH");
|
|
657
855
|
}
|
|
658
|
-
if (goalContext && s.adapter
|
|
856
|
+
if (goalContext && s.adapter?.hasPendingPlan && reply.value.status === "ready" && !reply.value.errorCode && reply.value.receipt?.dispatch === "completed" && reply.value.observation) {
|
|
659
857
|
const receipt = reply.value.receipt;
|
|
660
858
|
const nativeMs = reply.value.nativeMs;
|
|
661
859
|
let stable = false;
|
|
@@ -686,7 +884,7 @@ var ComputerRuntime = class {
|
|
|
686
884
|
if (stable || next.value.status !== "ready" || next.value.errorCode) break;
|
|
687
885
|
}
|
|
688
886
|
if (!stable && !reply.value.errorCode) reply.value.errorCode = "COMPUTER_UI_UNSTABLE";
|
|
689
|
-
} catch
|
|
887
|
+
} catch {
|
|
690
888
|
reply.frame?.fill(0);
|
|
691
889
|
reply = { value: {
|
|
692
890
|
...reply.value,
|
|
@@ -800,7 +998,9 @@ var ComputerRuntime = class {
|
|
|
800
998
|
});
|
|
801
999
|
const phase = command.op === "open" ? "open" : command.op === "act" ? "dispatch" : command.op === "observe" ? "observe" : command.op === "release" ? "release" : void 0;
|
|
802
1000
|
if (command.op === "observe") s.diagnostics?.count("observations");
|
|
1001
|
+
const startedAt = performance.now();
|
|
803
1002
|
const reply = s.diagnostics && phase ? await s.diagnostics.measure(phase, invoke) : await invoke();
|
|
1003
|
+
const endpointRoundTripMs = performance.now() - startedAt;
|
|
804
1004
|
const file = reply.content.find((item) => item.type === "file");
|
|
805
1005
|
let frame;
|
|
806
1006
|
if (file?.type === "file" && reply.invocationId) frame = this.endpoints.uploads.takeComputerFrame(file.fileId, reply.invocationId);
|
|
@@ -809,6 +1009,13 @@ var ComputerRuntime = class {
|
|
|
809
1009
|
const json = reply.content.find((item) => item.type === "json");
|
|
810
1010
|
const value = Reply.parse(json?.type === "json" ? json.value : void 0);
|
|
811
1011
|
if (value.sessionId !== s.id) throw new Error("COMPUTER_SESSION_MISMATCH");
|
|
1012
|
+
if (command.op === "act" && value.receipt?.actionId === command.envelope.actionId && (value.nativeMs || value.transportTiming)) s.diagnostics?.timing({
|
|
1013
|
+
actionId: value.receipt.actionId,
|
|
1014
|
+
kind: command.envelope.action.kind,
|
|
1015
|
+
nativeMs: value.nativeMs,
|
|
1016
|
+
transport: value.transportTiming,
|
|
1017
|
+
endpointRoundTripMs
|
|
1018
|
+
});
|
|
812
1019
|
if (file && !frame || value.observation && !frame && !value.errorCode) throw new Error("COMPUTER_FRAME_HANDOFF_FAILED");
|
|
813
1020
|
if (frame && (!value.observation || !["observe", "act"].includes(command.op))) throw new Error("COMPUTER_UNEXPECTED_FRAME");
|
|
814
1021
|
return {
|
|
@@ -827,14 +1034,18 @@ var ComputerRuntime = class {
|
|
|
827
1034
|
leaveComputerControl(s.owner);
|
|
828
1035
|
s.diagnostics.finish(true);
|
|
829
1036
|
this.retainReport(s.owner, s.diagnostics);
|
|
1037
|
+
clearComputerFrames(s.owner);
|
|
1038
|
+
s.programStore = void 0;
|
|
830
1039
|
s.task.clear();
|
|
831
1040
|
s.pendingContext = void 0;
|
|
832
1041
|
s.controller.abort();
|
|
833
1042
|
}
|
|
834
1043
|
async close(owner) {
|
|
835
1044
|
this.operations.get(owner)?.abort();
|
|
1045
|
+
clearComputerFrames(owner);
|
|
836
1046
|
const s = this.sessions.get(owner);
|
|
837
1047
|
if (!s) return true;
|
|
1048
|
+
s.programStore = void 0;
|
|
838
1049
|
s.task.clear();
|
|
839
1050
|
s.pendingContext = void 0;
|
|
840
1051
|
s.controller.abort();
|
|
@@ -376,6 +376,8 @@ export declare const CustomModelSchema: z.ZodObject<{
|
|
|
376
376
|
profile: z.ZodEnum<{
|
|
377
377
|
"autoglm-phone-v1": "autoglm-phone-v1";
|
|
378
378
|
"structured-phone-v1": "structured-phone-v1";
|
|
379
|
+
"doubao-seed-phone-v1": "doubao-seed-phone-v1";
|
|
380
|
+
"gui-owl-phone-v1": "gui-owl-phone-v1";
|
|
379
381
|
}>;
|
|
380
382
|
}, z.core.$strict>>;
|
|
381
383
|
id: z.ZodString;
|
|
@@ -464,6 +466,8 @@ export declare const ModelOverrideSchema: z.ZodObject<{
|
|
|
464
466
|
profile: z.ZodEnum<{
|
|
465
467
|
"autoglm-phone-v1": "autoglm-phone-v1";
|
|
466
468
|
"structured-phone-v1": "structured-phone-v1";
|
|
469
|
+
"doubao-seed-phone-v1": "doubao-seed-phone-v1";
|
|
470
|
+
"gui-owl-phone-v1": "gui-owl-phone-v1";
|
|
467
471
|
}>;
|
|
468
472
|
}, z.core.$strict>>;
|
|
469
473
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -556,6 +560,8 @@ export declare const ProviderConfigSchema: z.ZodObject<{
|
|
|
556
560
|
profile: z.ZodEnum<{
|
|
557
561
|
"autoglm-phone-v1": "autoglm-phone-v1";
|
|
558
562
|
"structured-phone-v1": "structured-phone-v1";
|
|
563
|
+
"doubao-seed-phone-v1": "doubao-seed-phone-v1";
|
|
564
|
+
"gui-owl-phone-v1": "gui-owl-phone-v1";
|
|
559
565
|
}>;
|
|
560
566
|
}, z.core.$strict>>;
|
|
561
567
|
id: z.ZodString;
|
|
@@ -644,6 +650,8 @@ export declare const ProviderConfigSchema: z.ZodObject<{
|
|
|
644
650
|
profile: z.ZodEnum<{
|
|
645
651
|
"autoglm-phone-v1": "autoglm-phone-v1";
|
|
646
652
|
"structured-phone-v1": "structured-phone-v1";
|
|
653
|
+
"doubao-seed-phone-v1": "doubao-seed-phone-v1";
|
|
654
|
+
"gui-owl-phone-v1": "gui-owl-phone-v1";
|
|
647
655
|
}>;
|
|
648
656
|
}, z.core.$strict>>;
|
|
649
657
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -851,6 +859,8 @@ export declare const ModelsJsonSchema: z.ZodObject<{
|
|
|
851
859
|
profile: z.ZodEnum<{
|
|
852
860
|
"autoglm-phone-v1": "autoglm-phone-v1";
|
|
853
861
|
"structured-phone-v1": "structured-phone-v1";
|
|
862
|
+
"doubao-seed-phone-v1": "doubao-seed-phone-v1";
|
|
863
|
+
"gui-owl-phone-v1": "gui-owl-phone-v1";
|
|
854
864
|
}>;
|
|
855
865
|
}, z.core.$strict>>;
|
|
856
866
|
id: z.ZodString;
|
|
@@ -939,6 +949,8 @@ export declare const ModelsJsonSchema: z.ZodObject<{
|
|
|
939
949
|
profile: z.ZodEnum<{
|
|
940
950
|
"autoglm-phone-v1": "autoglm-phone-v1";
|
|
941
951
|
"structured-phone-v1": "structured-phone-v1";
|
|
952
|
+
"doubao-seed-phone-v1": "doubao-seed-phone-v1";
|
|
953
|
+
"gui-owl-phone-v1": "gui-owl-phone-v1";
|
|
942
954
|
}>;
|
|
943
955
|
}, z.core.$strict>>;
|
|
944
956
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -1785,6 +1785,24 @@ export declare const ConfigSchema: z.ZodDefault<z.ZodObject<{
|
|
|
1785
1785
|
direct: "direct";
|
|
1786
1786
|
}>>;
|
|
1787
1787
|
adbPath: z.ZodOptional<z.ZodString>;
|
|
1788
|
+
autoGlmPrompt: z.ZodDefault<z.ZodEnum<{
|
|
1789
|
+
current: "current";
|
|
1790
|
+
upstream: "upstream";
|
|
1791
|
+
}>>;
|
|
1792
|
+
autoGlmProtocol: z.ZodDefault<z.ZodEnum<{
|
|
1793
|
+
current: "current";
|
|
1794
|
+
upstream: "upstream";
|
|
1795
|
+
}>>;
|
|
1796
|
+
autoGlmSampling: z.ZodDefault<z.ZodEnum<{
|
|
1797
|
+
current: "current";
|
|
1798
|
+
upstream: "upstream";
|
|
1799
|
+
}>>;
|
|
1800
|
+
modelResponseMode: z.ZodDefault<z.ZodEnum<{
|
|
1801
|
+
json: "json";
|
|
1802
|
+
stream: "stream";
|
|
1803
|
+
}>>;
|
|
1804
|
+
batchReadings: z.ZodDefault<z.ZodBoolean>;
|
|
1805
|
+
modelRepetitionGuard: z.ZodDefault<z.ZodBoolean>;
|
|
1788
1806
|
semanticControls: z.ZodDefault<z.ZodBoolean>;
|
|
1789
1807
|
hierarchicalPlanning: z.ZodDefault<z.ZodBoolean>;
|
|
1790
1808
|
maxActionsPerSession: z.ZodDefault<z.ZodNumber>;
|
|
@@ -3,8 +3,7 @@ import { getSessionMetadata, init_session_read_repository } from "../../../stora
|
|
|
3
3
|
import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
|
|
4
4
|
import { init_paths } from "../../../config/paths.js";
|
|
5
5
|
import { resolveEffectiveAgentConfigForAgent } from "../../../config/agent-profile.js";
|
|
6
|
-
import {
|
|
7
|
-
import { init_providers, isProviderConfiguredSync } from "../../../providers/index.js";
|
|
6
|
+
import { getAllModels, init_providers, isProviderConfiguredSync, resolveModel } from "../../../providers/index.js";
|
|
8
7
|
import { phoneAllowsApp } from "../../../phone/app-access.js";
|
|
9
8
|
import { managedPhoneAdbPath } from "../../../runtime-tools/phone-dependency-catalog.js";
|
|
10
9
|
import { phoneModelProfile } from "../../../phone/model-adapter.js";
|
|
@@ -17,9 +16,15 @@ import { z } from "zod";
|
|
|
17
16
|
//#region src/gateway/hono/routes/phone-setup.ts
|
|
18
17
|
init_repository();
|
|
19
18
|
init_paths();
|
|
20
|
-
init_model_registry();
|
|
21
19
|
init_providers();
|
|
22
20
|
init_session_read_repository();
|
|
21
|
+
function resolvePhoneSetupModel(ref) {
|
|
22
|
+
try {
|
|
23
|
+
return resolveModel(ref);
|
|
24
|
+
} catch {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
23
28
|
function createPhoneSetupService(service) {
|
|
24
29
|
const runtime = getPhoneRuntime();
|
|
25
30
|
const manager = () => new PhoneDependencyManager({
|
|
@@ -37,14 +42,14 @@ function createPhoneSetupService(service) {
|
|
|
37
42
|
};
|
|
38
43
|
return new PhoneSetupService({
|
|
39
44
|
runtime,
|
|
40
|
-
models: () =>
|
|
45
|
+
models: () => getAllModels().filter((model) => phoneModelProfile(model)).map((model) => ({
|
|
41
46
|
ref: `${model.provider}/${model.id}`,
|
|
42
47
|
name: model.name,
|
|
43
48
|
configured: isProviderConfiguredSync(model.provider)
|
|
44
49
|
})),
|
|
45
50
|
setModel: async (agentId, ref) => {
|
|
46
51
|
requireIdle();
|
|
47
|
-
const model =
|
|
52
|
+
const model = resolvePhoneSetupModel(ref);
|
|
48
53
|
if (!model || !phoneModelProfile(model) || !isProviderConfiguredSync(model.provider)) throw new Error("PHONE_SETUP_MODEL_REQUIRED: Choose a compatible model with configured credentials.");
|
|
49
54
|
const repository = new AgentCatalogRepository();
|
|
50
55
|
const agent = repository.get(agentId);
|
|
@@ -91,7 +96,7 @@ function createPhoneSetupService(service) {
|
|
|
91
96
|
revision: (context, deviceId) => {
|
|
92
97
|
const agent = resolveEffectiveAgentConfigForAgent(context.agentId).config;
|
|
93
98
|
const device = runtime.repository.list().find((device) => device.id === deviceId);
|
|
94
|
-
const model = agent.models.phoneUse?.primary ?
|
|
99
|
+
const model = agent.models.phoneUse?.primary ? resolvePhoneSetupModel(agent.models.phoneUse.primary) : void 0;
|
|
95
100
|
return createHash("sha256").update(JSON.stringify([
|
|
96
101
|
service.currentConfig.phone,
|
|
97
102
|
agent.models.phoneUse,
|
|
@@ -119,7 +124,7 @@ function createPhoneSetupService(service) {
|
|
|
119
124
|
const resolved = resolveEffectiveAgentConfigForAgent(context.agentId);
|
|
120
125
|
const agent = resolved.config;
|
|
121
126
|
const ref = agent.models.phoneUse?.primary;
|
|
122
|
-
const model = ref ?
|
|
127
|
+
const model = ref ? resolvePhoneSetupModel(ref) : void 0;
|
|
123
128
|
const dependencies = await new PhoneDependencyManager({
|
|
124
129
|
stateDir: resolveStateDir(),
|
|
125
130
|
config: config.runtimeTools,
|
|
@@ -6,8 +6,7 @@ import { init_session_repository } from "../../../storage/sqlite/session-reposit
|
|
|
6
6
|
import { MOCK_PHONE_MODEL, PhoneActionSchema, PhoneConfigSchema, PhoneDeviceSchema, PhoneError, PhoneExecutionModeSchema, PhoneInputSchema, init_contracts } from "../../../phone/contracts.js";
|
|
7
7
|
import { createConversation, init_conversation_repository } from "../../../storage/sqlite/conversation-repository.js";
|
|
8
8
|
import { getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-route.js";
|
|
9
|
-
import {
|
|
10
|
-
import { init_providers, isProviderConfiguredSync } from "../../../providers/index.js";
|
|
9
|
+
import { getAllModels, init_providers, isProviderConfiguredSync } from "../../../providers/index.js";
|
|
11
10
|
import { normalizePhoneAppAccess, phoneAppAccess } from "../../../phone/app-access.js";
|
|
12
11
|
import { cancelPhoneAssistance, pendingPhoneAssistance, phoneAssistance, phoneAssistanceReport } from "../../../phone/assistance.js";
|
|
13
12
|
import { resolveAdbPath } from "../../../phone/adb-driver.js";
|
|
@@ -24,7 +23,6 @@ import { bodyLimit } from "hono/body-limit";
|
|
|
24
23
|
//#region src/gateway/hono/routes/phone.ts
|
|
25
24
|
init_session_repository();
|
|
26
25
|
init_resolve_route();
|
|
27
|
-
init_model_registry();
|
|
28
26
|
init_providers();
|
|
29
27
|
init_contracts();
|
|
30
28
|
init_logger();
|
|
@@ -398,7 +396,7 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
398
396
|
});
|
|
399
397
|
app.get("/api/phone/models", (c) => c.json({
|
|
400
398
|
ok: true,
|
|
401
|
-
payload: { models: [...
|
|
399
|
+
payload: { models: [...getAllModels().flatMap((model) => {
|
|
402
400
|
const profile = phoneModelProfile(model);
|
|
403
401
|
return profile ? [{
|
|
404
402
|
id: `${model.provider}/${model.id}`,
|
|
@@ -326,6 +326,12 @@ export declare class GatewayConfigCoordinator {
|
|
|
326
326
|
phone: {
|
|
327
327
|
enabled: boolean;
|
|
328
328
|
executionMode: "collaborative" | "direct";
|
|
329
|
+
autoGlmPrompt: "current" | "upstream";
|
|
330
|
+
autoGlmProtocol: "current" | "upstream";
|
|
331
|
+
autoGlmSampling: "current" | "upstream";
|
|
332
|
+
modelResponseMode: "json" | "stream";
|
|
333
|
+
batchReadings: boolean;
|
|
334
|
+
modelRepetitionGuard: boolean;
|
|
329
335
|
semanticControls: boolean;
|
|
330
336
|
hierarchicalPlanning: boolean;
|
|
331
337
|
maxActionsPerSession: number;
|