@xopcai/xopc 0.0.422 → 0.0.424
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/dist/assets/{page-context-BKnEwsOO.js → page-context-b-rB5vJC.js} +1 -1
- package/dist/browser-ext/dist/background.js +1 -1
- package/dist/browser-ext/dist/sidepanel.html +1 -1
- package/dist/browser-ext/dist/sidepanel.js +29 -1
- 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-CvJ9rdwP.js → activity-store-AI081rxe.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CFP6g4w7.js → agent-avatar-dicebear-DupnTbL7.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-display-BHBe88Gu.js → agent-avatar-display-CmEj6Uqy.js} +2 -2
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-IEV5yKuu.js +1 -0
- package/dist/gateway/static/root/assets/{agent-plugin-dialog-C_Dm-u6_.js → agent-plugin-dialog-D_njOuFA.js} +1 -1
- package/dist/gateway/static/root/assets/{agents-BdVJHOiK.js → agents-B_yg9nA3.js} +4 -4
- package/dist/gateway/static/root/assets/{agents-admin-api-Do1Pza0R.js → agents-admin-api-CUZUolwG.js} +1 -1
- package/dist/gateway/static/root/assets/{api-ONg37_fH.js → api-CWWEVThO.js} +1 -1
- package/dist/gateway/static/root/assets/{api-BQv5dLcH.js → api-bpQ7yR10.js} +1 -1
- package/dist/gateway/static/root/assets/{app-management-settings-panel-B4Wqhf4J.js → app-management-settings-panel-C0_hxwgg.js} +1 -1
- package/dist/gateway/static/root/assets/{appearance-settings-Dm1kRzKL.js → appearance-settings-CLh-qnCC.js} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-D1MMk1P7.js → apps-page-Bjtm3Rgi.js} +1 -1
- package/dist/gateway/static/root/assets/{archive-plugin-p_yLkyaC.js → archive-plugin-dGnstkhB.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-api-DQaWBR03.js → automation-api-MB2xCoFF.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-result-state-CO_243JM.js → automation-result-state-DJQflY78.js} +1 -1
- package/dist/gateway/static/root/assets/automation-task-card-DXgBxVE2.js +3 -0
- package/dist/gateway/static/root/assets/{automations-page-Ba64H37d.js → automations-page-D3O7M2FH.js} +1 -1
- package/dist/gateway/static/root/assets/automations-workspace-Dk3FVWoX.js +9 -0
- package/dist/gateway/static/root/assets/{binary-plugins-B-6kyqtt.js → binary-plugins-BrVJXmYf.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-B5ysJ96n.js → block-editor-Dok4sfT3.js} +2 -2
- package/dist/gateway/static/root/assets/{browser-automation-inputs-C2A3NIt3.js → browser-automation-inputs-PJbT3CxW.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-automations-page-CnbXFw1_.js → browser-automations-page-kkpX1Q7K.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-control-api-Aj_seKE9.js → browser-control-api-Bg4wnkeA.js} +1 -1
- package/dist/gateway/static/root/assets/{browser-settings-page-C7fxPq_z.js → browser-settings-page-BrgX_Yb2.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-DOTgaSgA.js → capabilities-BMaJizw4.js} +1 -1
- package/dist/gateway/static/root/assets/{capabilities-BgtCwC_E.js → capabilities-Cs6Jt5Gl.js} +1 -1
- package/dist/gateway/static/root/assets/capabilities-page-D5hvAG6D.js +2 -0
- package/dist/gateway/static/root/assets/{capabilities-settings-panel-pYWZtPeU.js → capabilities-settings-panel-BrEvm4IH.js} +3 -3
- package/dist/gateway/static/root/assets/{channels-DGpRM6pj.js → channels-1jQgGVc9.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-agents-api-EvJ_Wvuc.js → chat-agents-api-BAOWaUJf.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-chart-block-BQDbHLcw.js → chat-chart-block-DeWrb9XR.js} +1 -1
- package/dist/gateway/static/root/assets/{chat-page-GF9NIuZN.js → chat-page-CafkCKOj.js} +30 -30
- package/dist/gateway/static/root/assets/{chat-terminal-dock-DHFTGoEp.js → chat-terminal-dock-C544n0-R.js} +1 -1
- package/dist/gateway/static/root/assets/{command-palette-api-DPA_yEuy.js → command-palette-api-D9PXzY8b.js} +1 -1
- package/dist/gateway/static/root/assets/{composer-payload-handoff-BTjauSNp.js → composer-payload-handoff-CYXfjpem.js} +1 -1
- package/dist/gateway/static/root/assets/{computer-settings-page-BFSSQfcx.js → computer-settings-page-DJmod8-w.js} +1 -1
- package/dist/gateway/static/root/assets/connected-providers-grid-b46VH4uy.js +1 -0
- package/dist/gateway/static/root/assets/{connector-service-page-CFvg58qa.js → connector-service-page-BqDbTOTp.js} +1 -1
- package/dist/gateway/static/root/assets/{connectors-api-CbC6Yht5.js → connectors-api-CwRuUnH4.js} +1 -1
- package/dist/gateway/static/root/assets/connectors-page-Mq9Bvoax.js +1 -0
- package/dist/gateway/static/root/assets/{date-picker-Dd3MbG0x.js → date-picker-DWaT0IC0.js} +1 -1
- package/dist/gateway/static/root/assets/{dependency-picker-DcsHg2ml.js → dependency-picker-DV9XAt6F.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-DldzQT2h.js → desktop-pet-Dffq2NxL.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CYdI4KxB.js → desktop-pet-settings-CrB1ICax.js} +1 -1
- package/dist/gateway/static/root/assets/{dev-view-store-JiJv585f.js → dev-view-store-liRgSkcT.js} +1 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-1du1hfi5.js +1 -0
- package/dist/gateway/static/root/assets/{directory-picker-path-field-8WOXv8zw.js → directory-picker-path-field-EKqQLQrE.js} +1 -1
- package/dist/gateway/static/root/assets/{discussion-annotation-sync-B-grSe0w.js → discussion-annotation-sync-D-b1X6ro.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-EEQkTNEu.js → extension-debug-page-wD97GeG0.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-iframe-host-vlZVeMCY.js → extension-iframe-host-B4Q1CjvW.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-marketplace-api-_o2In_al.js → extension-marketplace-api-ak1_K3u8.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-CPrT111s.js → extension-page-DWFI4iIh.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-provider-B2Mf3FBu.js → extension-provider-BZwcaU5Y.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-CznJEgWV.js → extension-settings-page-cn4KS42C.js} +1 -1
- package/dist/gateway/static/root/assets/{file-preview-surface-7h8_fZul.js → file-preview-surface-c3gDD9sM.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-config-swr-DbbNEOKj.js → gateway-config-swr-Dmt5JhZU.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-realtime-D20ZrAuM.js → gateway-realtime-CJtDXQCt.js} +1 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-DcsZyYEa.js +1 -0
- package/dist/gateway/static/root/assets/{gateway-restart-5ut-lhJm.js → gateway-restart-DInvvT5u.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-settings-BCf_cibp.js → gateway-settings-BZXdv2FE.js} +1 -1
- package/dist/gateway/static/root/assets/{gateway-startup-retry-DlHL0DpH.js → gateway-startup-retry-s2KcWekp.js} +1 -1
- package/dist/gateway/static/root/assets/{global-defaults-api-CmODomcV.js → global-defaults-api-DtnmDd87.js} +1 -1
- package/dist/gateway/static/root/assets/{home-page-uz22TRB-.js → home-page-CAVjA5rO.js} +2 -2
- package/dist/gateway/static/root/assets/{image-generation-api-dzPnpUFu.js → image-generation-api-RQQokgE9.js} +1 -1
- package/dist/gateway/static/root/assets/{imports-page-ChBoNMyE.js → imports-page-BP_4TubV.js} +1 -1
- package/dist/gateway/static/root/assets/index-BS9mjvSL.js +11 -0
- package/dist/gateway/static/root/assets/index-pT-m6l6b.css +1 -0
- package/dist/gateway/static/root/assets/{install-connector-dialog-CNcdQDX0.js → install-connector-dialog-BNzNuXJ8.js} +1 -1
- package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CRbYq2_g.js → keyboard-shortcuts-settings-DNRQFepg.js} +1 -1
- package/dist/gateway/static/root/assets/{local-app-workbench-page-04cX5TJu.js → local-app-workbench-page-CvY5XxbX.js} +1 -1
- package/dist/gateway/static/root/assets/{local-apps-page-fWM0FEhN.js → local-apps-page-DfwEvd8G.js} +1 -1
- package/dist/gateway/static/root/assets/local-session-drafts-CuDdIyxR.js +4 -0
- package/dist/gateway/static/root/assets/{locale-store-VNjH18Dj.js → locale-store-TQcz_Vjt.js} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-6GanGLrm.js → logs-page-eq49F1Rt.js} +1 -1
- package/dist/gateway/static/root/assets/{management-settings-BxD_lc4E.js → management-settings-BaYXDMOJ.js} +1 -1
- package/dist/gateway/static/root/assets/{markdown-view-DLCBYWtx.js → markdown-view-D4nII6Zv.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BvtNwKFb.js → media-plugins-MvlAY405.js} +1 -1
- package/dist/gateway/static/root/assets/messages-DaLmc4W1.js +3 -0
- package/dist/gateway/static/root/assets/model-selector-nsoNHqif.js +1 -0
- package/dist/gateway/static/root/assets/{models-hub-cache-_qE7L-_H.js → models-hub-cache-CFIazNIF.js} +1 -1
- package/dist/gateway/static/root/assets/note-detail-panel-KPzbHiEW.js +5 -0
- package/dist/gateway/static/root/assets/note-image-lightbox-DticJxxh.js +1 -0
- package/dist/gateway/static/root/assets/{notes-api-Bxa11X3a.js → notes-api-HVxR5bRD.js} +1 -1
- package/dist/gateway/static/root/assets/{notes-page-D2QpJ3WZ.js → notes-page-yShJeR3i.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-api-DIE4UpP7.js → oauth-api-CfKjRVnb.js} +1 -1
- package/dist/gateway/static/root/assets/{oauth-provider-connect-B95tiddN.js → oauth-provider-connect-D4uqONWr.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-capture-button-C-QbbwmN.js → page-context-capture-button-B98nlKTc.js} +1 -1
- package/dist/gateway/static/root/assets/{page-context-draft-BHmOfksL.js → page-context-draft-HcuK45iu.js} +1 -1
- package/dist/gateway/static/root/assets/page-header-store-D6SzJ9Ch.js +1 -0
- package/dist/gateway/static/root/assets/{personal-avatar-nXrmMfrV.js → personal-avatar-_d72UP_d.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-page-BCwlYT3F.js → personal-page-B19h_3WQ.js} +1 -1
- package/dist/gateway/static/root/assets/{personal-settings-panel-vkYmXK8h.js → personal-settings-panel-CfwtGyue.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-dependencies-card-CZDAxTWv.js → phone-dependencies-card-D8bqsDk_.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-model-picker-4Snfs8Hq.js → phone-model-picker-CL_Zn6Xd.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-settings-page-D8HperfA.js → phone-settings-page-C5Jia8eQ.js} +1 -1
- package/dist/gateway/static/root/assets/{phone-workspace-store-Di9R9Ux5.js → phone-workspace-store-FBfrfkYq.js} +1 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-gAq2KPzK.js +1 -0
- package/dist/gateway/static/root/assets/{preference-select-fields-C6abaM3k.js → preference-select-fields-Ck8GAX_y.js} +1 -1
- package/dist/gateway/static/root/assets/{product-automation-feedback-C74s9Mjz.js → product-automation-feedback-BJ9oTnNs.js} +2 -2
- package/dist/gateway/static/root/assets/{product-open-page-AbDP5w1c.js → product-open-page-Dw9hUdxP.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-content-CktjvFbc.js → product-preview-content-C0iPzmSm.js} +1 -1
- package/dist/gateway/static/root/assets/{product-preview-modal-CzsqLwB4.js → product-preview-modal-COFtHoh6.js} +2 -2
- package/dist/gateway/static/root/assets/{project-detail-page-Cf3tggGP.js → project-detail-page-C5Amjah-.js} +3 -3
- package/dist/gateway/static/root/assets/{project-understanding-jmhFbHch.js → project-understanding-DpL9ADQU.js} +1 -1
- package/dist/gateway/static/root/assets/{projects-page-jMgZiFnO.js → projects-page-gGg9nM2t.js} +1 -1
- package/dist/gateway/static/root/assets/{providers-api-CJBYFKAK.js → providers-api-D6JJRlJb.js} +1 -1
- package/dist/gateway/static/root/assets/{recording-upload-Dl9a5yOV.js → recording-upload-DxX1xKyt.js} +1 -1
- package/dist/gateway/static/root/assets/{registry-api-BwkbPUYu.js → registry-api-BfXzBR1D.js} +1 -1
- package/dist/gateway/static/root/assets/remote-access-hub-BZA4StwC.js +1 -0
- package/dist/gateway/static/root/assets/{resource-unavailable-35wBZxmz.js → resource-unavailable-X-SIrZYI.js} +1 -1
- package/dist/gateway/static/root/assets/route-preload-CWRb0UCt.js +2 -0
- package/dist/gateway/static/root/assets/{runtime-tools-api-BF28JDAO.js → runtime-tools-api-1DjsPyQ5.js} +1 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-BnCtyORj.js +1 -0
- package/dist/gateway/static/root/assets/{service-recommendation-list-CdaS4MPF.js → service-recommendation-list-ChSOfHHh.js} +1 -1
- package/dist/gateway/static/root/assets/{session-api-zJXYlRPt.js → session-api-rvY5aWw8.js} +1 -1
- package/dist/gateway/static/root/assets/session-manager-D2rbRfX3.js +23 -0
- package/dist/gateway/static/root/assets/sessions-page-DAS2IUGT.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-CYDQybNF.js +1 -0
- package/dist/gateway/static/root/assets/{settings-advanced-section-C84IghdL.js → settings-advanced-section-ZKRIuk7h.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-mode-store-CtQBJvbO.js → settings-mode-store-CtJ8pEfm.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-eEIz9InP.js → settings-page-B3pUce-_.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-header-CsPAYlqV.js → settings-page-header-DuNCn8i-.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-lPLeJQoV.js → settings-page-layout-DeNC8YHJ.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Fc3vuz_h.js +1 -0
- package/dist/gateway/static/root/assets/{share-link-dialog-NaM6jvIz.js → share-link-dialog-B3hwjVAx.js} +1 -1
- package/dist/gateway/static/root/assets/{share-preview-page-CHjZn27s.js → share-preview-page-D_9oFzGS.js} +1 -1
- package/dist/gateway/static/root/assets/{shares-api-B9rVcV1y.js → shares-api-BoUpXmxq.js} +1 -1
- package/dist/gateway/static/root/assets/shares-settings-Drfuvepz.js +1 -0
- package/dist/gateway/static/root/assets/{skill-api-D6zVfEuK.js → skill-api-By2HhJ9O.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-list-api-SLmTBYF5.js → skill-list-api-TaUCzS8Y.js} +1 -1
- package/dist/gateway/static/root/assets/{skill-reload-api-UQkq2orI.js → skill-reload-api-CN2fpS1n.js} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-Ca0pYZ4i.js → skills-page-LzGLique.js} +1 -1
- package/dist/gateway/static/root/assets/{system-settings-panel-BARWbjRN.js → system-settings-panel-Cuyg8Ml3.js} +1 -1
- package/dist/gateway/static/root/assets/{task-detail-page-roqAsGue.js → task-detail-page-6A9337pK.js} +2 -2
- package/dist/gateway/static/root/assets/{task-result-evidence-Bb1F7nAM.js → task-result-evidence-DDubAU_5.js} +1 -1
- package/dist/gateway/static/root/assets/{terminal-panel-store-DYDeXXAg.js → terminal-panel-store-BNs75Wdr.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-DbStcH89.js → theme-store-DB1ZfBUm.js} +1 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-TvtX4Goh.js +1 -0
- package/dist/gateway/static/root/assets/{tunnel-api-BK_ivyIb.js → tunnel-api-COoVEdV9.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-activity-store-p7Z7oq8z.js → understanding-activity-store-Dr_MLgYe.js} +1 -1
- package/dist/gateway/static/root/assets/{understanding-refresh-store-D-U6rcwZ.js → understanding-refresh-store-DGmLGEqw.js} +1 -1
- package/dist/gateway/static/root/assets/{usage-page-URFSiswS.js → usage-page-DP6eb6ed.js} +1 -1
- package/dist/gateway/static/root/assets/{use-autosave-B7cbumro.js → use-autosave-itwjDYUb.js} +1 -1
- package/dist/gateway/static/root/assets/{use-composer-attachments-DAtiwLsE.js → use-composer-attachments-hjIGlI_2.js} +1 -1
- package/dist/gateway/static/root/assets/{use-file-preview-expanded-B8erpWsX.js → use-file-preview-expanded-ClLa0g8D.js} +2 -2
- package/dist/gateway/static/root/assets/{use-personal-profile-DDW29nm-.js → use-personal-profile-vhWk6tTU.js} +1 -1
- package/dist/gateway/static/root/assets/{use-workspace-tree-DCoTf22f.js → use-workspace-tree-dfXXjA2-.js} +1 -1
- package/dist/gateway/static/root/assets/user-model-page-D8dswPWd.js +2 -0
- package/dist/gateway/static/root/assets/{voice-api-key-field-DzYdJZN4.js → voice-api-key-field-BIfBySnN.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-config-api-wotvT6Hw.js → voice-config-api-J4o59ICE.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-input-shortcut-events-BI6PuiIB.js → voice-input-shortcut-events-B1mlpUdC.js} +1 -1
- package/dist/gateway/static/root/assets/{voice-transcribe-api-DAK9eLRr.js → voice-transcribe-api-xxaSOOmq.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-overlay-BzmB9Rub.js → work-discovery-overlay-DqwT1E5u.js} +1 -1
- package/dist/gateway/static/root/assets/{work-discovery-page-CmGjxUIT.js → work-discovery-page-BzYQmPLT.js} +1 -1
- package/dist/gateway/static/root/assets/{working-directory-picker-modal-B-EHm52-.js → working-directory-picker-modal-D2Zf3GOG.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-api-uhiEMPpK.js → workspace-api-Bnx3eS2M.js} +2 -2
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-COUVwj-p.js +1 -0
- package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-BDm06MZm.js → workspace-file-preview-dialog-D13qHzVr.js} +1 -1
- package/dist/gateway/static/root/assets/{workspace-open-location-menu-Bv83uoqu.js → workspace-open-location-menu-Cou-ig1H.js} +1 -1
- package/dist/gateway/static/root/assets/{xopc-cloud-account-card-Cd5GdpGL.js → xopc-cloud-account-card-DQGPKxHA.js} +1 -1
- package/dist/gateway/static/root/index.html +80 -80
- package/dist/package.js +1 -1
- package/dist/packages/gateway-contract/src/clarification-questions.js +86 -0
- package/dist/packages/gateway-contract/src/clarifications.js +19 -0
- package/dist/packages/gateway-contract/src/index.js +1 -0
- package/dist/packages/gateway-contract/src/session-input-command.js +3 -0
- package/dist/src/agent/agent-manager.js +1 -1
- package/dist/src/agent/background-review/run-background-review.js +1 -1
- package/dist/src/agent/coding/repository-instructions.js +1 -1
- package/dist/src/agent/embedded/index.js +1 -1
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/run-turn.js +3 -3
- package/dist/src/agent/embedded/session-tool-result-guard.js +2 -2
- package/dist/src/agent/embedded/tool-result-truncation.js +1 -1
- package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
- package/dist/src/agent/memory/compaction.js +1 -1
- package/dist/src/agent/memory/context-budget.js +1 -1
- package/dist/src/agent/memory/context-recovery.js +1 -1
- package/dist/src/agent/memory/user-message-text.js +1 -1
- package/dist/src/agent/service/btw-query.js +1 -1
- package/dist/src/agent/service/direct-turn-helpers.js +1 -1
- package/dist/src/agent/service/process-direct-streaming.js +2 -2
- package/dist/src/agent/source-context/types.d.ts +1 -0
- package/dist/src/agent/tools/clarify-tool.js +43 -5
- package/dist/src/agent/tools/cli-clarify.js +1 -0
- package/dist/src/agent/tools/dataBatch.js +1 -1
- package/dist/src/agent/tools/personal-task-tool.d.ts +1 -1
- package/dist/src/agent/tools/phone-use-tool.js +2 -2
- package/dist/src/agent/tools/session-search-tool.js +1 -1
- package/dist/src/bootstrap/application-state.js +2 -2
- package/dist/src/cli/commands/gateway/run-foreground.js +2 -2
- package/dist/src/computer/diagnostics.d.ts +3 -3
- package/dist/src/computer/evaluation.d.ts +2 -2
- package/dist/src/connectors/learning-coordinator.js +1 -1
- package/dist/src/gateway/ephemeral-clarification-waiter.js +1 -0
- package/dist/src/gateway/hono/routes/composer-history.js +1 -1
- package/dist/src/gateway/hono/routes/connectors.js +1 -1
- package/dist/src/gateway/hono/routes/home.js +1 -1
- package/dist/src/gateway/hono/routes/phone.js +31 -6
- package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
- package/dist/src/gateway/hono/routes/session-command-handler.js +1 -0
- package/dist/src/gateway/hono/routes/session-input-handler.d.ts +6 -0
- package/dist/src/gateway/hono/routes/tunnel.js +8 -1
- package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -1
- package/dist/src/gateway/next-turn-suggestions/snapshot.js +1 -1
- package/dist/src/gateway/ports.js +6 -1
- package/dist/src/gateway/run-loop.js +0 -1
- package/dist/src/gateway/service/agent-runner.js +8 -3
- package/dist/src/gateway/service/run-gateway-agent.js +1 -1
- package/dist/src/gateway/service/session-input-coordinator.js +5 -4
- package/dist/src/phone/assistance.js +3 -0
- package/dist/src/phone/contracts.d.ts +4 -0
- package/dist/src/phone/runtime.d.ts +7 -1
- package/dist/src/phone/runtime.js +31 -24
- package/dist/src/routing/agent-session-key.js +1 -1
- package/dist/src/session/session-context-for-llm.js +1 -0
- package/dist/src/session/session-title.js +1 -1
- package/dist/src/storage/sqlite/clarification-wait-repository.js +45 -4
- package/dist/src/storage/sqlite/index.js +6 -6
- package/dist/src/storage/sqlite/session-creation-repository.js +1 -1
- package/dist/src/storage/sqlite/session-repository.js +1 -1
- package/dist/src/tasks/home-query-service.js +1 -1
- package/dist/src/tasks/task-allocation-repository.js +1 -1
- package/dist/src/tui/backends/embedded-backend.js +1 -1
- package/dist/src/tunnel/broker-client.d.ts +3 -0
- package/dist/src/tunnel/broker-client.js +14 -6
- package/dist/src/tunnel/frpc-process.js +54 -33
- package/dist/src/tunnel/tunnel-service.d.ts +5 -1
- package/dist/src/tunnel/tunnel-service.js +42 -17
- package/package.json +5 -4
- package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DlGRuKMv.js +0 -1
- package/dist/gateway/static/root/assets/automation-task-card-D2p9qlYE.js +0 -3
- package/dist/gateway/static/root/assets/automations-workspace-BkzC3oIM.js +0 -9
- package/dist/gateway/static/root/assets/capabilities-page-m3b9sLFG.js +0 -2
- package/dist/gateway/static/root/assets/connected-providers-grid-DM2glQN3.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-D7pipFHA.js +0 -1
- package/dist/gateway/static/root/assets/device-pairing-wizard-D8cLc41G.js +0 -1
- package/dist/gateway/static/root/assets/gateway-realtime-store-C6sMzYDT.js +0 -1
- package/dist/gateway/static/root/assets/index-CSIg7V1A.js +0 -11
- package/dist/gateway/static/root/assets/index-Dv8mUlNN.css +0 -1
- package/dist/gateway/static/root/assets/local-session-drafts-ClrSe5mH.js +0 -1
- package/dist/gateway/static/root/assets/messages-Btr7C0hF.js +0 -3
- package/dist/gateway/static/root/assets/model-selector-DYUnp917.js +0 -1
- package/dist/gateway/static/root/assets/note-detail-panel-bjRZesmS.js +0 -5
- package/dist/gateway/static/root/assets/note-image-lightbox-D7Jqb75C.js +0 -1
- package/dist/gateway/static/root/assets/page-header-store-bPV8_tKL.js +0 -1
- package/dist/gateway/static/root/assets/plugin-details-dialog-DJsDu-_8.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-CBQ_bOy9.js +0 -1
- package/dist/gateway/static/root/assets/route-preload-BcA6SPeC.js +0 -2
- package/dist/gateway/static/root/assets/runtime-impact-DbySfhdp.js +0 -1
- package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bq2xQ2qd.js +0 -1
- package/dist/gateway/static/root/assets/session-manager-wWxpzSo0.js +0 -23
- package/dist/gateway/static/root/assets/sessions-page-BkjD_dUD.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-BUMCEtA_.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-BSU5WpaE.js +0 -1
- package/dist/gateway/static/root/assets/shares-settings-5sB15V5v.js +0 -1
- package/dist/gateway/static/root/assets/tracing-settings-page-YfkNCxbP.js +0 -1
- package/dist/gateway/static/root/assets/user-model-page-DSV5NkNj.js +0 -2
- package/dist/gateway/static/root/assets/workspace-editor-agent-store-DrPVyikA.js +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { init_string_coerce, normalizeOptionalString } from "../../utils/string-coerce.js";
|
|
2
|
+
import { formatContextLimitTruncationNotice } from "./tool-result-context-guard.js";
|
|
3
|
+
import { resolveLiveToolResultMaxChars, truncateToolResultMessage } from "./tool-result-truncation.js";
|
|
2
4
|
import { emitSessionTranscriptUpdate } from "../../session/transcript-events.js";
|
|
3
5
|
import { sanitizeSearchInfo } from "../tools/search/search-info.js";
|
|
4
6
|
import { extractToolCallsFromAssistant, extractToolResultId } from "../transcript/tool-call-id.js";
|
|
5
7
|
import { makeMissingToolResult, sanitizeToolCallInputs } from "../transcript/session-transcript-repair.js";
|
|
6
8
|
import { boundedJsonUtf8Bytes, firstEnumerableOwnKeys, jsonUtf8BytesOrInfinity } from "../../infra/json-utf8-bytes.js";
|
|
7
|
-
import { formatContextLimitTruncationNotice } from "./tool-result-context-guard.js";
|
|
8
|
-
import { resolveLiveToolResultMaxChars, truncateToolResultMessage } from "./tool-result-truncation.js";
|
|
9
9
|
//#region src/agent/embedded/session-tool-result-guard.ts
|
|
10
10
|
init_string_coerce();
|
|
11
11
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { init_string_coerce, normalizeLowercaseStringOrEmpty } from "../../utils/string-coerce.js";
|
|
2
|
-
import { isDataBatchResult, renderDataBatch } from "../data-acquisition/render.js";
|
|
3
2
|
import { formatContextLimitTruncationNotice } from "./tool-result-context-guard.js";
|
|
3
|
+
import { isDataBatchResult, renderDataBatch } from "../data-acquisition/render.js";
|
|
4
4
|
//#region src/agent/embedded/tool-result-truncation.ts
|
|
5
5
|
init_string_coerce();
|
|
6
6
|
const MAX_TOOL_RESULT_CONTEXT_SHARE = .3;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { stripRuntimeUserMessageEnvelope } from "../../../packages/gateway-contract/src/user-message-display.js";
|
|
2
2
|
import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
3
|
-
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
4
3
|
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
4
|
+
import { extractProfileAgentId } from "../../config/agent-profile.js";
|
|
5
5
|
import { isPersonalConversation } from "../../personal-agent/repository.js";
|
|
6
6
|
import { mimeTypeFromMediaPath } from "../../media/store.js";
|
|
7
7
|
import { readMediaReference } from "../../media/media-reference.js";
|
|
@@ -2,9 +2,9 @@ import { createLogger } from "../../utils/logger/index.js";
|
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { init_compaction_types, isCompactionHandover } from "../../session/compaction-types.js";
|
|
4
4
|
import { buildSessionContextForLlm, init_session_context_for_llm, isTranscriptCompactionEntry } from "../../session/session-context-for-llm.js";
|
|
5
|
+
import { estimateMessagesTokens, estimateTextTokens } from "./context-budget.js";
|
|
5
6
|
import { getModelUsageOrigin, init_model_usage, isProviderUsageScopeError } from "../../providers/model-usage.js";
|
|
6
7
|
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
7
|
-
import { estimateMessagesTokens, estimateTextTokens } from "./context-budget.js";
|
|
8
8
|
import { applyCompactionHandoverDelta, consolidateCompactionHandover, handoverForPrompt, renderCompactionHandover } from "./compaction-ledger.js";
|
|
9
9
|
import { estimateCompactionSourceTokens, planCompactionSource } from "./compaction-source-planner.js";
|
|
10
10
|
import { serializeMessageForCompaction } from "./compaction-serializer.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { readAgentMessageContent } from "./agent-message-access.js";
|
|
2
1
|
import { getToolResultTextLength, truncateToolResultMessage } from "../embedded/tool-result-truncation.js";
|
|
2
|
+
import { readAgentMessageContent } from "./agent-message-access.js";
|
|
3
3
|
//#region src/agent/memory/context-budget.ts
|
|
4
4
|
const MESSAGE_OVERHEAD_TOKENS = 12;
|
|
5
5
|
const REQUEST_OVERHEAD_TOKENS = 256;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
-
import { stripTrailingErrorAssistantMessages } from "../orchestration/llm-turn-retry.js";
|
|
4
3
|
import { evaluateContextBudget, projectContextForModel, stringifyMessagesForBudget } from "./context-budget.js";
|
|
4
|
+
import { stripTrailingErrorAssistantMessages } from "../orchestration/llm-turn-retry.js";
|
|
5
5
|
//#region src/agent/memory/context-recovery.ts
|
|
6
6
|
init_logger();
|
|
7
7
|
const log = createLogger("ContextRecovery");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { extractTextContent } from "../context/workspace.js";
|
|
2
1
|
import { readAgentMessageContent } from "./agent-message-access.js";
|
|
2
|
+
import { extractTextContent } from "../context/workspace.js";
|
|
3
3
|
//#region src/agent/memory/user-message-text.ts
|
|
4
4
|
/** Plain text from a user-role agent message (string or parts array). */
|
|
5
5
|
function extractAgentUserPlainText(message) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
1
2
|
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
2
3
|
import { completeWithResolvedCredentials, createResolvedModelStream, resolveModelCallApiKey } from "../../providers/model-call.js";
|
|
3
|
-
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
4
4
|
//#region src/agent/service/btw-query.ts
|
|
5
5
|
init_providers();
|
|
6
6
|
function textFromCompleteContent(content) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { getClarificationResumeInput } from "../../storage/sqlite/clarification-wait-repository.js";
|
|
2
1
|
import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
|
|
2
|
+
import { getClarificationResumeInput } from "../../storage/sqlite/clarification-wait-repository.js";
|
|
3
3
|
import { isPersonalConversation } from "../../personal-agent/repository.js";
|
|
4
4
|
import { phoneResumeForRun } from "../../phone/assistance.js";
|
|
5
5
|
import { resolveImageHandlingStrategy } from "../image/vision-detection.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { parseUserTurnDocument, renderUserTurnDocument } from "../../../packages/gateway-contract/src/user-turn-document.js";
|
|
2
2
|
import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
3
3
|
import { init_session_input_repository, listTaskUpdateTriggers } from "../../storage/sqlite/session-input-repository.js";
|
|
4
|
-
import { getClarificationResumeInput } from "../../storage/sqlite/clarification-wait-repository.js";
|
|
5
4
|
import { getConnectionResumeInput, init_connection_wait_repository } from "../../storage/sqlite/connection-wait-repository.js";
|
|
5
|
+
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
6
|
+
import { getClarificationResumeInput } from "../../storage/sqlite/clarification-wait-repository.js";
|
|
6
7
|
import { init_agent_scope, resolveDefaultAgentId } from "../agent-scope.js";
|
|
7
8
|
import { init_model_usage, modelUsageOriginFromTurn, withModelUsageOrigin } from "../../providers/model-usage.js";
|
|
8
9
|
import { init_agent_session_key, resolveAgentMainConversationId } from "../../routing/agent-session-key.js";
|
|
9
|
-
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
10
10
|
import { phoneResumeForRun } from "../../phone/assistance.js";
|
|
11
11
|
import { abortEmbeddedRun } from "../embedded/runs.js";
|
|
12
12
|
import { clearPendingTranscriptUserMessage, setPendingTranscriptUserMessage } from "../inbound/attachment-pipeline.js";
|
|
@@ -44,6 +44,7 @@ export interface AgentSourceContext {
|
|
|
44
44
|
capturedAt?: number;
|
|
45
45
|
documentId?: string;
|
|
46
46
|
fileKind?: 'file' | 'directory';
|
|
47
|
+
interactionCapabilities?: import('@xopcai/gateway-contract').InteractionCapabilities;
|
|
47
48
|
appContext?: AppContextEnvelope;
|
|
48
49
|
appContextGrant?: AppContextGrant;
|
|
49
50
|
}
|
|
@@ -1,7 +1,32 @@
|
|
|
1
|
+
import { clarifyToolInputV2Schema } from "../../../packages/gateway-contract/src/clarification-questions.js";
|
|
2
|
+
import { normalizeClarificationQuestion } from "../../../packages/gateway-contract/src/clarifications.js";
|
|
3
|
+
import { init_src } from "../../../packages/gateway-contract/src/index.js";
|
|
1
4
|
import { Type } from "@sinclair/typebox";
|
|
2
5
|
//#region src/agent/tools/clarify-tool.ts
|
|
6
|
+
init_src();
|
|
7
|
+
const ChoiceSchema = Type.Object({
|
|
8
|
+
id: Type.String(),
|
|
9
|
+
label: Type.String(),
|
|
10
|
+
description: Type.Optional(Type.String())
|
|
11
|
+
}, { additionalProperties: false });
|
|
12
|
+
const QuestionSchema = Type.Union([Type.Object({
|
|
13
|
+
id: Type.String(),
|
|
14
|
+
header: Type.String(),
|
|
15
|
+
question: Type.String(),
|
|
16
|
+
type: Type.Literal("text")
|
|
17
|
+
}, { additionalProperties: false }), Type.Object({
|
|
18
|
+
id: Type.String(),
|
|
19
|
+
header: Type.String(),
|
|
20
|
+
question: Type.String(),
|
|
21
|
+
type: Type.Literal("single_choice"),
|
|
22
|
+
choices: Type.Array(ChoiceSchema, {
|
|
23
|
+
minItems: 2,
|
|
24
|
+
maxItems: 10
|
|
25
|
+
}),
|
|
26
|
+
recommendedChoiceId: Type.Optional(Type.String())
|
|
27
|
+
}, { additionalProperties: false })]);
|
|
3
28
|
const ClarifySchema = Type.Object({
|
|
4
|
-
question: Type.String({ description: "The question to ask the user. Be specific and concise." }),
|
|
29
|
+
question: Type.Optional(Type.String({ description: "The question to ask the user. Be specific and concise." })),
|
|
5
30
|
interactionMode: Type.Optional(Type.Union([Type.Literal("quick"), Type.Literal("compose")], { description: "quick submits a choice immediately; compose lets the user select and add details before submitting." })),
|
|
6
31
|
choiceDetails: Type.Optional(Type.Array(Type.Object({
|
|
7
32
|
id: Type.String(),
|
|
@@ -12,8 +37,17 @@ const ClarifySchema = Type.Object({
|
|
|
12
37
|
maxItems: 10,
|
|
13
38
|
description: "Answer choices with stable unique IDs and optional descriptions."
|
|
14
39
|
})),
|
|
15
|
-
recommendedChoiceId: Type.Optional(Type.String())
|
|
16
|
-
|
|
40
|
+
recommendedChoiceId: Type.Optional(Type.String()),
|
|
41
|
+
schemaVersion: Type.Optional(Type.Literal(2)),
|
|
42
|
+
questions: Type.Optional(Type.Array(QuestionSchema, {
|
|
43
|
+
minItems: 1,
|
|
44
|
+
maxItems: 3,
|
|
45
|
+
description: "Independent questions answered together. Only supported by capable Web/Electron main chats. Never use for approvals."
|
|
46
|
+
}))
|
|
47
|
+
}, {
|
|
48
|
+
additionalProperties: false,
|
|
49
|
+
anyOf: [{ required: ["question"] }, { required: ["schemaVersion", "questions"] }]
|
|
50
|
+
});
|
|
17
51
|
function waitForAbort(signal) {
|
|
18
52
|
return new Promise((_, reject) => {
|
|
19
53
|
if (!signal) return;
|
|
@@ -40,12 +74,16 @@ function createClarifyTool(deps) {
|
|
|
40
74
|
}],
|
|
41
75
|
details: { answer: "" }
|
|
42
76
|
};
|
|
43
|
-
const
|
|
77
|
+
const batch = params?.schemaVersion === 2 ? clarifyToolInputV2Schema.parse(params) : void 0;
|
|
78
|
+
const payload = normalizeClarificationQuestion(batch ? {
|
|
79
|
+
...batch,
|
|
80
|
+
question: batch.questions.map((q) => q.header).join(" / ")
|
|
81
|
+
} : {
|
|
44
82
|
interactionMode: p.interactionMode,
|
|
45
83
|
choiceDetails: p.choiceDetails,
|
|
46
84
|
recommendedChoiceId: p.recommendedChoiceId,
|
|
47
85
|
question: p.question
|
|
48
|
-
};
|
|
86
|
+
});
|
|
49
87
|
try {
|
|
50
88
|
const result = await Promise.race([askUser(payload), waitForAbort(signal)]);
|
|
51
89
|
if (result.status === "waiting") return {
|
|
@@ -6,6 +6,7 @@ import { stdin, stdout } from "node:process";
|
|
|
6
6
|
init_src();
|
|
7
7
|
function createCliReadlineClarifyRequestFn() {
|
|
8
8
|
return async (_context, request) => {
|
|
9
|
+
if (request.schemaVersion === 2) throw new Error("CLARIFICATION_VERSION_UNSUPPORTED: CLI supports single questions");
|
|
9
10
|
const rl = readline.createInterface({
|
|
10
11
|
input: stdin,
|
|
11
12
|
output: stdout
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { renderDataBatch } from "../data-acquisition/render.js";
|
|
3
4
|
import { DataBatchSchema } from "../data-acquisition/schema.js";
|
|
4
5
|
import { acquireData } from "../data-acquisition/service.js";
|
|
5
|
-
import { renderDataBatch } from "../data-acquisition/render.js";
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
7
|
//#region src/agent/tools/dataBatch.ts
|
|
8
8
|
init_logger();
|
|
@@ -14,6 +14,7 @@ declare const PersonalTaskModelSchema: import("@sinclair/typebox").TObject<{
|
|
|
14
14
|
}>>;
|
|
15
15
|
requestId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
16
16
|
description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
17
|
+
questionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
17
18
|
expectedVersion: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
|
|
18
19
|
idempotencyKey: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
19
20
|
instruction: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
@@ -33,7 +34,6 @@ declare const PersonalTaskModelSchema: import("@sinclair/typebox").TObject<{
|
|
|
33
34
|
baselineResultId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
34
35
|
supersedesEntryIds: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
35
36
|
bodyOffset: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
|
|
36
|
-
questionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
37
37
|
command: import("@sinclair/typebox").TString;
|
|
38
38
|
sourceRefs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
|
|
39
39
|
kind: import("@sinclair/typebox").TUnion<import("@sinclair/typebox").TLiteral<string>[]>;
|
|
@@ -106,7 +106,7 @@ function createPhoneUseTool(deps) {
|
|
|
106
106
|
name: "phone_use",
|
|
107
107
|
label: "Phone",
|
|
108
108
|
parameters: Schema,
|
|
109
|
-
description: "Use an authorized Android phone via local ADB or a configured cloud connection. Load tool_manual for phone_use before first use. Discover registered devices, appAccess and allowedApps first. Use the defaultDeviceId returned by discover unless the user explicitly names a different phone. A phone-control conversation may bind its own defaultDeviceId. Match an explicitly named phone to its unique registered name and deviceId; ask when ambiguous and never silently switch phones; open with mode observe/control and optional authorized appPackage, observe native UI text, then discover the effective executionMode. In collaborative mode, plan with the main Agent and run one small goal at a time. In direct mode, delegate the full authorized phone goal to run and let the phone model plan locally. Keep the same taskId across fragments. Do not silently change mode or retry budget exhaustion. Inspect feedback.outcome, outputs and nextAction. Use set_mode only for an explicit user mode change; applyCurrent pauses and requires inspection/handback. Device and model configuration live in Phone Use settings. Connections originate from the Gateway host; cloud credentials are configured in phone management. Mock mode only supports the explicitly requested settings-about emulator test. Never silently switch phones, execute shell commands, bypass app restrictions, or repeat a dispatch with unknown outcome. Request user assistance for login, CAPTCHA or an effect not already authorized. Use request_user with reason when manual assistance is needed; it saves the current task and ends this turn until explicit handback. A plain pause does not request assistance; resume re-observes. Inspect readings for information source and verification; screenshot readings are unverified observations, never proof of completion. Inspect verified, verificationLevel and stopReason before claiming success. Close finishes this task and releases operation control while keeping the phone connected. Do not close or disconnect a phone to resolve PHONE_DEVICE_BUSY; report executionStarted=false and the occupying conversation to the user, and wait for user action. Raw screenshots never enter the chat transcript.",
|
|
109
|
+
description: "Use an authorized Android phone via local ADB or a configured cloud connection. Load tool_manual for phone_use before first use. Discover registered devices, appAccess and allowedApps first. Use the defaultDeviceId returned by discover unless the user explicitly names a different phone. A phone-control conversation may bind its own defaultDeviceId. Match an explicitly named phone to its unique registered name and deviceId; ask when ambiguous and never silently switch phones; open with mode observe/control and optional authorized appPackage, observe native UI text, then discover the effective executionMode. In collaborative mode, plan with the main Agent and run one small goal at a time. In direct mode, delegate the full authorized phone goal to run and let the phone model plan locally. Keep the same taskId across fragments. Do not silently change mode or retry budget exhaustion. Inspect feedback.outcome, outputs and nextAction. Use set_mode only for an explicit user mode change; applyCurrent pauses and requires inspection/handback. Device and model configuration live in Phone Use settings. Connections originate from the Gateway host; cloud credentials are configured in phone management. Mock mode only supports the explicitly requested settings-about emulator test. Never silently switch phones, execute shell commands, bypass app restrictions, or repeat a dispatch with unknown outcome. Request user assistance for login, CAPTCHA or an effect not already authorized. Use request_user with reason when manual assistance is needed; it saves the current task and ends this turn until explicit handback. Explain the required user action in a normal chat reply and direct the user to the existing phone entry. Do not create approval cards or auto-open the phone. The user can click Done, continue task or explicitly confirm completion in chat. A plain pause does not request assistance; resume re-observes. Inspect readings for information source and verification; screenshot readings are unverified observations, never proof of completion. Inspect verified, verificationLevel and stopReason before claiming success. Close finishes this task and releases operation control while keeping the phone connected. Do not close or disconnect a phone to resolve PHONE_DEVICE_BUSY; report executionStarted=false and the occupying conversation to the user, and wait for user action. Raw screenshots never enter the chat transcript.",
|
|
110
110
|
async execute(_id, raw, signal, onUpdate) {
|
|
111
111
|
const { owner, ...context } = deps.context();
|
|
112
112
|
const runId = getEmbeddedExecutionRunId();
|
|
@@ -137,7 +137,7 @@ function createPhoneUseTool(deps) {
|
|
|
137
137
|
deviceId: report.deviceId,
|
|
138
138
|
reason: report.message,
|
|
139
139
|
nextAction: "user_takeover",
|
|
140
|
-
message: "
|
|
140
|
+
message: "请通过聊天顶部的手机入口完成所需操作,完成后点击“完成,继续任务”或返回聊天告诉我继续。"
|
|
141
141
|
};
|
|
142
142
|
onUpdate({
|
|
143
143
|
content: [{
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
3
|
import { init_fts, sessionSearchTerms } from "../../storage/sqlite/fts.js";
|
|
4
|
+
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
4
5
|
import { init_providers, resolveModel } from "../../providers/index.js";
|
|
5
6
|
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
6
7
|
import { FORGOTTEN_HISTORY_EXCERPT, forgottenHistoryEntries, projectUnadmittedForgottenFields } from "../../memory-learning/forgotten-history.js";
|
|
7
|
-
import { readAgentMessageContent } from "../memory/agent-message-access.js";
|
|
8
8
|
import "./local-read-budget.js";
|
|
9
9
|
import { Type } from "@sinclair/typebox";
|
|
10
10
|
//#region src/agent/tools/session-search-tool.ts
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
2
|
-
import "../storage/sqlite/index.js";
|
|
1
|
+
import { init_connection, requireXopcDatabase } from "../storage/sqlite/connection.js";
|
|
3
2
|
import { AgentCatalogRepository, init_repository } from "../agent-catalog/repository.js";
|
|
4
3
|
import { AgentCatalogService } from "../agent-catalog/service.js";
|
|
5
4
|
import { ensureStarterAgentsInitialized } from "../agent/starter-agents.js";
|
|
6
5
|
//#region src/bootstrap/application-state.ts
|
|
7
6
|
init_repository();
|
|
7
|
+
init_connection();
|
|
8
8
|
/** Initialize current application state without importing retired configuration. */
|
|
9
9
|
function bootstrapApplicationStateSync() {
|
|
10
10
|
requireXopcDatabase();
|
|
@@ -38,7 +38,7 @@ async function runGatewayFromCliOptions(options, ctx) {
|
|
|
38
38
|
if (tailscaleOverride && tailscaleOverride !== "off") process.env.XOPC_GATEWAY_TAILSCALE_MODE = tailscaleOverride;
|
|
39
39
|
if (options.tailscaleResetOnExit === true) process.env.XOPC_GATEWAY_TAILSCALE_RESET_ON_EXIT = "1";
|
|
40
40
|
const [{ loadConfig }, { resolveConfigPath }, { runGatewayLoop }, gatewayPorts, bootstrap] = await Promise.all([
|
|
41
|
-
import("../../../config/
|
|
41
|
+
import("../../../config/loader.js"),
|
|
42
42
|
import("../../../config/paths.js"),
|
|
43
43
|
import("../../../gateway/run-loop.js"),
|
|
44
44
|
import("../../../gateway/ports.js"),
|
|
@@ -120,7 +120,7 @@ async function runGatewayFromCliOptions(options, ctx) {
|
|
|
120
120
|
configPath: ctx.configPath || resolveConfigPath(),
|
|
121
121
|
port,
|
|
122
122
|
start: async () => {
|
|
123
|
-
const { GatewayServer } = await import("../../../gateway/
|
|
123
|
+
const { GatewayServer } = await import("../../../gateway/server.js");
|
|
124
124
|
const server = new GatewayServer({
|
|
125
125
|
bindHost: listenPlan.bindHost,
|
|
126
126
|
bind: listenPlan.bindMode,
|
|
@@ -15,8 +15,8 @@ export type ComputerFailurePhase = z.infer<typeof ComputerFailurePhaseSchema>;
|
|
|
15
15
|
export declare const ComputerFailureCategorySchema: z.ZodEnum<{
|
|
16
16
|
permission: "permission";
|
|
17
17
|
target: "target";
|
|
18
|
-
cancelled: "cancelled";
|
|
19
18
|
unknown: "unknown";
|
|
19
|
+
cancelled: "cancelled";
|
|
20
20
|
model: "model";
|
|
21
21
|
observation: "observation";
|
|
22
22
|
budget: "budget";
|
|
@@ -29,8 +29,8 @@ export declare const ComputerFailureSchema: z.ZodObject<{
|
|
|
29
29
|
category: z.ZodEnum<{
|
|
30
30
|
permission: "permission";
|
|
31
31
|
target: "target";
|
|
32
|
-
cancelled: "cancelled";
|
|
33
32
|
unknown: "unknown";
|
|
33
|
+
cancelled: "cancelled";
|
|
34
34
|
model: "model";
|
|
35
35
|
observation: "observation";
|
|
36
36
|
budget: "budget";
|
|
@@ -125,8 +125,8 @@ export declare const ComputerSessionReportSchema: z.ZodObject<{
|
|
|
125
125
|
category: z.ZodEnum<{
|
|
126
126
|
permission: "permission";
|
|
127
127
|
target: "target";
|
|
128
|
-
cancelled: "cancelled";
|
|
129
128
|
unknown: "unknown";
|
|
129
|
+
cancelled: "cancelled";
|
|
130
130
|
model: "model";
|
|
131
131
|
observation: "observation";
|
|
132
132
|
budget: "budget";
|
|
@@ -50,8 +50,8 @@ export declare const ComputerEvaluationRunSchema: z.ZodObject<{
|
|
|
50
50
|
category: z.ZodEnum<{
|
|
51
51
|
permission: "permission";
|
|
52
52
|
target: "target";
|
|
53
|
-
cancelled: "cancelled";
|
|
54
53
|
unknown: "unknown";
|
|
54
|
+
cancelled: "cancelled";
|
|
55
55
|
model: "model";
|
|
56
56
|
observation: "observation";
|
|
57
57
|
budget: "budget";
|
|
@@ -106,7 +106,7 @@ export declare function isAutonomousComputerSuccess(run: ComputerEvaluationRun):
|
|
|
106
106
|
/** Export measured runtime values only; an executor must supply independent safety and oracle evidence. */
|
|
107
107
|
export declare function computerReportMeasurements(report: ComputerSessionReport): {
|
|
108
108
|
failure?: {
|
|
109
|
-
category: "permission" | "target" | "
|
|
109
|
+
category: "permission" | "target" | "unknown" | "cancelled" | "model" | "observation" | "budget" | "transport" | "native" | "no_progress" | "harness";
|
|
110
110
|
phase: "open" | "executor" | "model" | "observe" | "dispatch" | "release" | "frame_upload" | "oracle";
|
|
111
111
|
errorCode: string;
|
|
112
112
|
dispatch: "unknown" | "completed" | "started" | "notStarted";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../utils/logger.js";
|
|
3
|
-
import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "../storage/sqlite/connector-learning-repository.js";
|
|
4
3
|
import { getConnectorAccount, reconcileConnectorAccount } from "../storage/sqlite/connector-account-repository.js";
|
|
5
4
|
import { getConnectorInstallation, listConnectorConnections, upsertConnectorConnection } from "../storage/sqlite/connector-repository.js";
|
|
5
|
+
import { claimNextConnectorLearningJob, enqueueConnectorLearningJob, listConnectorLearningJobs, recoverStaleConnectorLearningJobs, setConnectorLearningPaused, updateConnectorLearningJob } from "../storage/sqlite/connector-learning-repository.js";
|
|
6
6
|
import { pruneBoundedKnowledgeSourceItems } from "../storage/sqlite/knowledge-repository.js";
|
|
7
7
|
import { getConnectorSyncPolicyForConnection } from "../storage/sqlite/connector-sync-policy-repository.js";
|
|
8
8
|
import "../storage/sqlite/index.js";
|
|
@@ -6,6 +6,7 @@ init_src();
|
|
|
6
6
|
var EphemeralClarificationWaiter = class {
|
|
7
7
|
pending = /* @__PURE__ */ new Map();
|
|
8
8
|
start(input) {
|
|
9
|
+
if (input.request.schemaVersion === 2) return Promise.reject(/* @__PURE__ */ new Error("CLARIFICATION_VERSION_UNSUPPORTED: ephemeral runs support single questions"));
|
|
9
10
|
const request = normalizeClarificationQuestion(input.request);
|
|
10
11
|
const requestId = crypto.randomUUID();
|
|
11
12
|
const expiresAt = request.kind === "approval" ? Date.now() + 10 * 6e4 : void 0;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { conversationIdSchema } from "../../../../packages/gateway-contract/src/conversation-identity.js";
|
|
2
2
|
import { init_src } from "../../../../packages/gateway-contract/src/index.js";
|
|
3
|
-
import { appendComposerInputHistory, clearComposerInputHistory, listComposerInputHistory } from "../../../storage/sqlite/composer-input-history-repository.js";
|
|
4
3
|
import { getSessionMetadata } from "../../../storage/sqlite/session-read-repository.js";
|
|
5
4
|
import { init_session_repository } from "../../../storage/sqlite/session-repository.js";
|
|
5
|
+
import { appendComposerInputHistory, clearComposerInputHistory, listComposerInputHistory } from "../../../storage/sqlite/composer-input-history-repository.js";
|
|
6
6
|
import "../../../storage/sqlite/index.js";
|
|
7
7
|
//#region src/gateway/hono/routes/composer-history.ts
|
|
8
8
|
init_src();
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../../utils/logger.js";
|
|
3
3
|
import { hasGatewayScope } from "../../security/gateway-scopes.js";
|
|
4
|
-
import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
|
|
5
4
|
import { getConnectorAccount, init_connector_account_repository, listConnectorAccounts, updateConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
|
|
6
5
|
import { decideConnectorApproval, getConnectorApproval, listConnectorApprovals, listConnectorConnections } from "../../../storage/sqlite/connector-repository.js";
|
|
6
|
+
import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
|
|
7
7
|
import { getConnectorSyncPolicy, upsertConnectorSyncPolicy } from "../../../storage/sqlite/connector-sync-policy-repository.js";
|
|
8
8
|
import "../../../storage/sqlite/index.js";
|
|
9
9
|
import { AgentCatalogRepository, init_repository } from "../../../agent-catalog/repository.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { HomeAdviceMetricsSchema, HomeAdvisorRefreshRequestSchema, HomeOpportunityActionRequestSchema, HomeOpportunityFeedbackRequestSchema, HomeOpportunityFeedbackUndoRequestSchema, HomeOpportunityHistoryResponseSchema } from "../../../../packages/gateway-contract/src/home.js";
|
|
2
2
|
import { init_src } from "../../../../packages/gateway-contract/src/index.js";
|
|
3
|
-
import { acknowledgeHomeAttention } from "../../../storage/sqlite/home-attention-repository.js";
|
|
4
3
|
import { decideConnectorApproval } from "../../../storage/sqlite/connector-repository.js";
|
|
4
|
+
import { acknowledgeHomeAttention } from "../../../storage/sqlite/home-attention-repository.js";
|
|
5
5
|
import "../../../storage/sqlite/index.js";
|
|
6
6
|
import { HomeQueryService, buildHomeWorkbench, decisionFromTask } from "../../../tasks/home-query-service.js";
|
|
7
7
|
import { resumeApprovedConnectorAction } from "../../../connectors/approval-resume.js";
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { createLogger } from "../../../utils/logger/index.js";
|
|
2
2
|
import { init_logger } from "../../../utils/logger.js";
|
|
3
3
|
import { setDevicePhoneAccess } from "../../../storage/sqlite/device-access-repository.js";
|
|
4
|
+
import { getSessionMetadata } from "../../../storage/sqlite/session-read-repository.js";
|
|
5
|
+
import { init_session_repository } from "../../../storage/sqlite/session-repository.js";
|
|
4
6
|
import { MOCK_PHONE_MODEL, PhoneActionSchema, PhoneConfigSchema, PhoneDeviceSchema, PhoneError, PhoneExecutionModeSchema, PhoneInputSchema, init_contracts } from "../../../phone/contracts.js";
|
|
5
7
|
import { createConversation, init_conversation_repository } from "../../../storage/sqlite/conversation-repository.js";
|
|
6
8
|
import { getDefaultAgentId, init_resolve_route } from "../../../routing/resolve-route.js";
|
|
@@ -20,6 +22,7 @@ import { z } from "zod";
|
|
|
20
22
|
import { Hono } from "hono";
|
|
21
23
|
import { bodyLimit } from "hono/body-limit";
|
|
22
24
|
//#region src/gateway/hono/routes/phone.ts
|
|
25
|
+
init_session_repository();
|
|
23
26
|
init_resolve_route();
|
|
24
27
|
init_model_registry();
|
|
25
28
|
init_providers();
|
|
@@ -66,7 +69,7 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
66
69
|
const body = await c.res.clone().json();
|
|
67
70
|
const report = body.payload?.report;
|
|
68
71
|
if (report && body.payload) {
|
|
69
|
-
const { sessionId, deviceId, deviceName, status, mode, controlOwner, controlEpoch, handoff, assistanceId, reconnectRequired, stopReason, currentAction, updatedAt } = report;
|
|
72
|
+
const { sessionId, deviceId, deviceName, status, mode, controlOwner, controlEpoch, handoff, assistanceId, reconnectRequired, stopReason, currentAction, updatedAt, revision, hasPendingTask, assistanceVersion, transcriptId } = report;
|
|
70
73
|
body.payload = {
|
|
71
74
|
ownControl: body.payload.ownControl,
|
|
72
75
|
textInput: body.payload.textInput,
|
|
@@ -83,7 +86,11 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
83
86
|
reconnectRequired,
|
|
84
87
|
stopReason,
|
|
85
88
|
currentAction,
|
|
86
|
-
updatedAt
|
|
89
|
+
updatedAt,
|
|
90
|
+
revision,
|
|
91
|
+
hasPendingTask,
|
|
92
|
+
assistanceVersion,
|
|
93
|
+
transcriptId
|
|
87
94
|
}
|
|
88
95
|
};
|
|
89
96
|
c.res = c.json(body);
|
|
@@ -147,18 +154,29 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
147
154
|
return wait && ["open", "queued"].includes(wait.status) ? {
|
|
148
155
|
...report,
|
|
149
156
|
assistanceId: wait.id,
|
|
157
|
+
assistanceVersion: wait.version,
|
|
158
|
+
transcriptId: wait.transcriptId,
|
|
159
|
+
hasPendingTask: true,
|
|
150
160
|
...wait.status === "open" && report.controlOwner !== "human" ? { status: "needs_user" } : {}
|
|
151
161
|
} : report;
|
|
152
162
|
});
|
|
153
163
|
};
|
|
154
164
|
const liveStatus = (owner, id, context, client) => {
|
|
155
165
|
const state = runtime.liveStatus(owner, id, context, client);
|
|
166
|
+
state.report.transcriptId = getSessionMetadata(owner)?.transcriptId;
|
|
156
167
|
const wait = phoneAssistance(owner);
|
|
168
|
+
if (!wait || !["open", "queued"].includes(wait.status)) {
|
|
169
|
+
state.report.assistanceId = void 0;
|
|
170
|
+
state.report.assistanceVersion = void 0;
|
|
171
|
+
}
|
|
157
172
|
return wait && ["open", "queued"].includes(wait.status) ? {
|
|
158
173
|
...state,
|
|
159
174
|
report: {
|
|
160
175
|
...state.report,
|
|
161
176
|
assistanceId: wait.id,
|
|
177
|
+
assistanceVersion: wait.version,
|
|
178
|
+
transcriptId: wait.transcriptId,
|
|
179
|
+
hasPendingTask: true,
|
|
162
180
|
...wait.status === "open" && state.report.controlOwner !== "human" ? { status: "needs_user" } : {}
|
|
163
181
|
}
|
|
164
182
|
} : state;
|
|
@@ -436,6 +454,7 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
436
454
|
operationId: z.string().uuid(),
|
|
437
455
|
epoch: z.number().int().positive(),
|
|
438
456
|
assistanceId: z.string().uuid().optional(),
|
|
457
|
+
assistanceVersion: z.number().int().positive().optional(),
|
|
439
458
|
op: z.enum([
|
|
440
459
|
"takeover",
|
|
441
460
|
"release",
|
|
@@ -492,12 +511,17 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
492
511
|
authorizePhoneAccess(principal, true);
|
|
493
512
|
access = "control";
|
|
494
513
|
} catch {}
|
|
514
|
+
const assistance = phoneAssistance(id);
|
|
495
515
|
const payload = {
|
|
496
516
|
available: Boolean(report),
|
|
497
517
|
access,
|
|
498
|
-
needsUser: Boolean(report && access !== "none" && report.status === "needs_user")
|
|
518
|
+
needsUser: Boolean(report && access !== "none" && (assistance?.status === "open" || report.status === "needs_user"))
|
|
499
519
|
};
|
|
500
520
|
if (report && access !== "none") {
|
|
521
|
+
if (assistance?.status === "open") payload.assistance = {
|
|
522
|
+
id: assistance.id,
|
|
523
|
+
version: assistance.version
|
|
524
|
+
};
|
|
501
525
|
payload.deviceName = report.deviceName;
|
|
502
526
|
payload.taskState = report.status;
|
|
503
527
|
payload.updatedAt = report.updatedAt;
|
|
@@ -583,7 +607,7 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
583
607
|
}).strict().parse(await c.req.json());
|
|
584
608
|
const initial = await conversationPhone(address, id);
|
|
585
609
|
const principal = getGatewayPrincipal(c);
|
|
586
|
-
const client = `${principal.principalId}:${clientId}${address.startsWith("device:") || principal.kind === "device" && purpose !== "control" ? ":viewer" : ""}`;
|
|
610
|
+
const client = `${principal.principalId}:${clientId}${address.startsWith("device:") || purpose === "view" || principal.kind === "device" && purpose !== "control" ? ":viewer" : ""}`;
|
|
587
611
|
const native = principal.kind === "device";
|
|
588
612
|
const interactive = native ? purpose === "control" : purpose !== "view" && !address.startsWith("device:");
|
|
589
613
|
if (native && (!expectedTranscriptId || expectedTranscriptId !== initial.transcriptId)) throw new PhoneError("PHONE_BINDING_CHANGED", "Conversation changed; refresh the phone", 409);
|
|
@@ -628,12 +652,12 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
628
652
|
let owner = c.req.param("conversationId");
|
|
629
653
|
const id = c.req.param("sessionId");
|
|
630
654
|
const actor = getGatewayPrincipal(c);
|
|
631
|
-
const { clientId, assistanceId, expectedTranscriptId, ...input } = liveControlInput.parse(await c.req.json());
|
|
655
|
+
const { clientId, assistanceId, assistanceVersion, expectedTranscriptId, ...input } = liveControlInput.parse(await c.req.json());
|
|
632
656
|
const requestedWait = phoneAssistance(owner);
|
|
633
657
|
const allowRecovery = assistanceId && requestedWait?.id === assistanceId && requestedWait.checkpoint.report.sessionId === id && ["takeover", "handback"].includes(input.op);
|
|
634
658
|
const { context, transcriptId, owner: resolvedOwner } = await conversationPhone(owner, allowRecovery ? void 0 : id);
|
|
635
659
|
owner = resolvedOwner;
|
|
636
|
-
if (getGatewayPrincipal(c).kind === "device" &&
|
|
660
|
+
if (getGatewayPrincipal(c).kind === "device" && !expectedTranscriptId || expectedTranscriptId && expectedTranscriptId !== transcriptId) throw new PhoneError("PHONE_BINDING_CHANGED", "Conversation changed; refresh the phone", 409);
|
|
637
661
|
const wait = phoneAssistance(owner);
|
|
638
662
|
if (assistanceId && (!wait || wait.id !== assistanceId || ![
|
|
639
663
|
"open",
|
|
@@ -641,6 +665,7 @@ function registerPhoneRoutes(parent, deps, runtime = getPhoneRuntime()) {
|
|
|
641
665
|
"resuming",
|
|
642
666
|
"completed"
|
|
643
667
|
].includes(wait.status))) throw new PhoneError("PHONE_ASSISTANCE_CHANGED", "The phone task changed. Refresh before continuing.", 409);
|
|
668
|
+
if (assistanceVersion !== void 0 && wait?.status === "open" && wait.version !== assistanceVersion) throw new PhoneError("PHONE_ASSISTANCE_CHANGED", "The phone assistance request changed. Refresh before continuing.", 409);
|
|
644
669
|
if (input.op === "handback" && assistanceId && wait?.status !== "open") {
|
|
645
670
|
service.resumePhoneAssistance(owner, assistanceId);
|
|
646
671
|
return c.json({
|
|
@@ -37,7 +37,8 @@ function registerPublicGatewayRoutes(app, service) {
|
|
|
37
37
|
const health = service.getHealth();
|
|
38
38
|
return c.json({
|
|
39
39
|
status: health.ready ? "ok" : "starting",
|
|
40
|
-
ready: health.ready
|
|
40
|
+
ready: health.ready,
|
|
41
|
+
clarificationVersions: process.env.XOPC_CLARIFY_MULTI_QUESTION === "false" ? [1] : [1, 2]
|
|
41
42
|
});
|
|
42
43
|
});
|
|
43
44
|
app.post("/api/connectors/composio/webhook", async (c) => {
|
|
@@ -115,6 +115,7 @@ async function handleSessionCommand(c, deps, materialize = false) {
|
|
|
115
115
|
if (!("input" in command)) return [];
|
|
116
116
|
const endpoint = command.origin.type === "endpoint" ? deps.service.endpointTools.registry.get(command.origin.endpointId) : void 0;
|
|
117
117
|
const contexts = endpoint ? [deviceTurnSourceContext(endpoint, command.input.endpointContext, deps.service.endpointTools.contexts?.view(endpoint.endpointId), deps.service.endpointTools.locations?.list(endpoint.endpointId, id.data))] : [];
|
|
118
|
+
if (contexts[0] && command.input.interactionCapabilities) contexts[0].interactionCapabilities = command.input.interactionCapabilities;
|
|
118
119
|
contexts.push(...(command.input.browserContexts ?? []).map(browserPageContextToAgentContext));
|
|
119
120
|
if (command.input.appContext) contexts.push(await deps.service.prepareSessionAppContext(command.input.appContext, principal, id.data, command.clientMessageId));
|
|
120
121
|
return contexts;
|
|
@@ -98,6 +98,9 @@ export declare function submitSessionInput(c: Context, deps: AuthenticatedRouteD
|
|
|
98
98
|
capturedAt?: number;
|
|
99
99
|
documentId?: string;
|
|
100
100
|
fileKind?: "file" | "directory";
|
|
101
|
+
interactionCapabilities?: {
|
|
102
|
+
clarificationVersions: (1 | 2)[];
|
|
103
|
+
};
|
|
101
104
|
appContext?: {
|
|
102
105
|
version: 1;
|
|
103
106
|
clientInstanceId: string;
|
|
@@ -257,6 +260,9 @@ export declare function replaceLatestSessionTurn(c: Context, deps: Authenticated
|
|
|
257
260
|
capturedAt?: number;
|
|
258
261
|
documentId?: string;
|
|
259
262
|
fileKind?: "file" | "directory";
|
|
263
|
+
interactionCapabilities?: {
|
|
264
|
+
clarificationVersions: (1 | 2)[];
|
|
265
|
+
};
|
|
260
266
|
appContext?: {
|
|
261
267
|
version: 1;
|
|
262
268
|
clientInstanceId: string;
|
|
@@ -216,6 +216,7 @@ function registerTunnelRoutes(authenticated, deps) {
|
|
|
216
216
|
}
|
|
217
217
|
});
|
|
218
218
|
authenticated.post("/api/tunnel/start", tunnelMutationLimit, async (c) => {
|
|
219
|
+
const recoverActiveLease = (await c.req.json().catch(() => ({})))?.recoverActiveLease === true;
|
|
219
220
|
let token;
|
|
220
221
|
try {
|
|
221
222
|
token = requireTunnelGatewayToken(deps.service.getResolvedAuth());
|
|
@@ -244,7 +245,7 @@ function registerTunnelRoutes(authenticated, deps) {
|
|
|
244
245
|
}
|
|
245
246
|
const port = config.gateway.port ?? 18790;
|
|
246
247
|
try {
|
|
247
|
-
await tunnel.start(port, token);
|
|
248
|
+
await tunnel.start(port, token, { recoverActiveLease });
|
|
248
249
|
setTunnelEnabledInConfig(config, true);
|
|
249
250
|
const saved = await deps.service.saveConfig(config);
|
|
250
251
|
if (!saved.saved) {
|
|
@@ -291,6 +292,12 @@ function registerTunnelRoutes(authenticated, deps) {
|
|
|
291
292
|
setTunnelEnabledInConfig(config, false);
|
|
292
293
|
const saved = await deps.service.saveConfig(config);
|
|
293
294
|
if (!saved.saved) return c.json({ error: saved.error ?? "Failed to save tunnel state" }, 500);
|
|
295
|
+
if (release && !released) return c.json({
|
|
296
|
+
ok: false,
|
|
297
|
+
released: false,
|
|
298
|
+
code: "TUNNEL_RELEASE_FAILED",
|
|
299
|
+
error: "Cloud lease release was not confirmed. Retry or recover the connection."
|
|
300
|
+
}, 502);
|
|
294
301
|
return c.json({
|
|
295
302
|
ok: true,
|
|
296
303
|
released
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
|
|
2
1
|
import { getConnectorAccount } from "../../../storage/sqlite/connector-account-repository.js";
|
|
2
|
+
import { listConnectorLearningJobs } from "../../../storage/sqlite/connector-learning-repository.js";
|
|
3
3
|
import "../../../storage/sqlite/index.js";
|
|
4
4
|
import { getWorkDiscoveryRun } from "../../../work-discovery/repository.js";
|
|
5
5
|
import { getConnectorUnderstandingSourceRun } from "../../../user-context/sources/repository.js";
|