@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.
Files changed (265) hide show
  1. package/dist/browser-ext/dist/assets/{page-context-BKnEwsOO.js → page-context-b-rB5vJC.js} +1 -1
  2. package/dist/browser-ext/dist/background.js +1 -1
  3. package/dist/browser-ext/dist/sidepanel.html +1 -1
  4. package/dist/browser-ext/dist/sidepanel.js +29 -1
  5. package/dist/browser-ext/manifest.json +1 -1
  6. package/dist/extensions/telegram/xopc.extension.json +1 -1
  7. package/dist/gateway/static/root/assets/{activity-store-CvJ9rdwP.js → activity-store-AI081rxe.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-CFP6g4w7.js → agent-avatar-dicebear-DupnTbL7.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agent-avatar-display-BHBe88Gu.js → agent-avatar-display-CmEj6Uqy.js} +2 -2
  10. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-IEV5yKuu.js +1 -0
  11. package/dist/gateway/static/root/assets/{agent-plugin-dialog-C_Dm-u6_.js → agent-plugin-dialog-D_njOuFA.js} +1 -1
  12. package/dist/gateway/static/root/assets/{agents-BdVJHOiK.js → agents-B_yg9nA3.js} +4 -4
  13. package/dist/gateway/static/root/assets/{agents-admin-api-Do1Pza0R.js → agents-admin-api-CUZUolwG.js} +1 -1
  14. package/dist/gateway/static/root/assets/{api-ONg37_fH.js → api-CWWEVThO.js} +1 -1
  15. package/dist/gateway/static/root/assets/{api-BQv5dLcH.js → api-bpQ7yR10.js} +1 -1
  16. package/dist/gateway/static/root/assets/{app-management-settings-panel-B4Wqhf4J.js → app-management-settings-panel-C0_hxwgg.js} +1 -1
  17. package/dist/gateway/static/root/assets/{appearance-settings-Dm1kRzKL.js → appearance-settings-CLh-qnCC.js} +1 -1
  18. package/dist/gateway/static/root/assets/{apps-page-D1MMk1P7.js → apps-page-Bjtm3Rgi.js} +1 -1
  19. package/dist/gateway/static/root/assets/{archive-plugin-p_yLkyaC.js → archive-plugin-dGnstkhB.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automation-api-DQaWBR03.js → automation-api-MB2xCoFF.js} +1 -1
  21. package/dist/gateway/static/root/assets/{automation-result-state-CO_243JM.js → automation-result-state-DJQflY78.js} +1 -1
  22. package/dist/gateway/static/root/assets/automation-task-card-DXgBxVE2.js +3 -0
  23. package/dist/gateway/static/root/assets/{automations-page-Ba64H37d.js → automations-page-D3O7M2FH.js} +1 -1
  24. package/dist/gateway/static/root/assets/automations-workspace-Dk3FVWoX.js +9 -0
  25. package/dist/gateway/static/root/assets/{binary-plugins-B-6kyqtt.js → binary-plugins-BrVJXmYf.js} +1 -1
  26. package/dist/gateway/static/root/assets/{block-editor-B5ysJ96n.js → block-editor-Dok4sfT3.js} +2 -2
  27. package/dist/gateway/static/root/assets/{browser-automation-inputs-C2A3NIt3.js → browser-automation-inputs-PJbT3CxW.js} +1 -1
  28. package/dist/gateway/static/root/assets/{browser-automations-page-CnbXFw1_.js → browser-automations-page-kkpX1Q7K.js} +1 -1
  29. package/dist/gateway/static/root/assets/{browser-control-api-Aj_seKE9.js → browser-control-api-Bg4wnkeA.js} +1 -1
  30. package/dist/gateway/static/root/assets/{browser-settings-page-C7fxPq_z.js → browser-settings-page-BrgX_Yb2.js} +1 -1
  31. package/dist/gateway/static/root/assets/{capabilities-DOTgaSgA.js → capabilities-BMaJizw4.js} +1 -1
  32. package/dist/gateway/static/root/assets/{capabilities-BgtCwC_E.js → capabilities-Cs6Jt5Gl.js} +1 -1
  33. package/dist/gateway/static/root/assets/capabilities-page-D5hvAG6D.js +2 -0
  34. package/dist/gateway/static/root/assets/{capabilities-settings-panel-pYWZtPeU.js → capabilities-settings-panel-BrEvm4IH.js} +3 -3
  35. package/dist/gateway/static/root/assets/{channels-DGpRM6pj.js → channels-1jQgGVc9.js} +1 -1
  36. package/dist/gateway/static/root/assets/{chat-agents-api-EvJ_Wvuc.js → chat-agents-api-BAOWaUJf.js} +1 -1
  37. package/dist/gateway/static/root/assets/{chat-chart-block-BQDbHLcw.js → chat-chart-block-DeWrb9XR.js} +1 -1
  38. package/dist/gateway/static/root/assets/{chat-page-GF9NIuZN.js → chat-page-CafkCKOj.js} +30 -30
  39. package/dist/gateway/static/root/assets/{chat-terminal-dock-DHFTGoEp.js → chat-terminal-dock-C544n0-R.js} +1 -1
  40. package/dist/gateway/static/root/assets/{command-palette-api-DPA_yEuy.js → command-palette-api-D9PXzY8b.js} +1 -1
  41. package/dist/gateway/static/root/assets/{composer-payload-handoff-BTjauSNp.js → composer-payload-handoff-CYXfjpem.js} +1 -1
  42. package/dist/gateway/static/root/assets/{computer-settings-page-BFSSQfcx.js → computer-settings-page-DJmod8-w.js} +1 -1
  43. package/dist/gateway/static/root/assets/connected-providers-grid-b46VH4uy.js +1 -0
  44. package/dist/gateway/static/root/assets/{connector-service-page-CFvg58qa.js → connector-service-page-BqDbTOTp.js} +1 -1
  45. package/dist/gateway/static/root/assets/{connectors-api-CbC6Yht5.js → connectors-api-CwRuUnH4.js} +1 -1
  46. package/dist/gateway/static/root/assets/connectors-page-Mq9Bvoax.js +1 -0
  47. package/dist/gateway/static/root/assets/{date-picker-Dd3MbG0x.js → date-picker-DWaT0IC0.js} +1 -1
  48. package/dist/gateway/static/root/assets/{dependency-picker-DcsHg2ml.js → dependency-picker-DV9XAt6F.js} +1 -1
  49. package/dist/gateway/static/root/assets/{desktop-pet-DldzQT2h.js → desktop-pet-Dffq2NxL.js} +1 -1
  50. package/dist/gateway/static/root/assets/{desktop-pet-settings-CYdI4KxB.js → desktop-pet-settings-CrB1ICax.js} +1 -1
  51. package/dist/gateway/static/root/assets/{dev-view-store-JiJv585f.js → dev-view-store-liRgSkcT.js} +1 -1
  52. package/dist/gateway/static/root/assets/device-pairing-wizard-1du1hfi5.js +1 -0
  53. package/dist/gateway/static/root/assets/{directory-picker-path-field-8WOXv8zw.js → directory-picker-path-field-EKqQLQrE.js} +1 -1
  54. package/dist/gateway/static/root/assets/{discussion-annotation-sync-B-grSe0w.js → discussion-annotation-sync-D-b1X6ro.js} +1 -1
  55. package/dist/gateway/static/root/assets/{extension-debug-page-EEQkTNEu.js → extension-debug-page-wD97GeG0.js} +1 -1
  56. package/dist/gateway/static/root/assets/{extension-iframe-host-vlZVeMCY.js → extension-iframe-host-B4Q1CjvW.js} +1 -1
  57. package/dist/gateway/static/root/assets/{extension-marketplace-api-_o2In_al.js → extension-marketplace-api-ak1_K3u8.js} +1 -1
  58. package/dist/gateway/static/root/assets/{extension-page-CPrT111s.js → extension-page-DWFI4iIh.js} +1 -1
  59. package/dist/gateway/static/root/assets/{extension-provider-B2Mf3FBu.js → extension-provider-BZwcaU5Y.js} +1 -1
  60. package/dist/gateway/static/root/assets/{extension-settings-page-CznJEgWV.js → extension-settings-page-cn4KS42C.js} +1 -1
  61. package/dist/gateway/static/root/assets/{file-preview-surface-7h8_fZul.js → file-preview-surface-c3gDD9sM.js} +1 -1
  62. package/dist/gateway/static/root/assets/{gateway-config-swr-DbbNEOKj.js → gateway-config-swr-Dmt5JhZU.js} +1 -1
  63. package/dist/gateway/static/root/assets/{gateway-realtime-D20ZrAuM.js → gateway-realtime-CJtDXQCt.js} +1 -1
  64. package/dist/gateway/static/root/assets/gateway-realtime-store-DcsZyYEa.js +1 -0
  65. package/dist/gateway/static/root/assets/{gateway-restart-5ut-lhJm.js → gateway-restart-DInvvT5u.js} +1 -1
  66. package/dist/gateway/static/root/assets/{gateway-settings-BCf_cibp.js → gateway-settings-BZXdv2FE.js} +1 -1
  67. package/dist/gateway/static/root/assets/{gateway-startup-retry-DlHL0DpH.js → gateway-startup-retry-s2KcWekp.js} +1 -1
  68. package/dist/gateway/static/root/assets/{global-defaults-api-CmODomcV.js → global-defaults-api-DtnmDd87.js} +1 -1
  69. package/dist/gateway/static/root/assets/{home-page-uz22TRB-.js → home-page-CAVjA5rO.js} +2 -2
  70. package/dist/gateway/static/root/assets/{image-generation-api-dzPnpUFu.js → image-generation-api-RQQokgE9.js} +1 -1
  71. package/dist/gateway/static/root/assets/{imports-page-ChBoNMyE.js → imports-page-BP_4TubV.js} +1 -1
  72. package/dist/gateway/static/root/assets/index-BS9mjvSL.js +11 -0
  73. package/dist/gateway/static/root/assets/index-pT-m6l6b.css +1 -0
  74. package/dist/gateway/static/root/assets/{install-connector-dialog-CNcdQDX0.js → install-connector-dialog-BNzNuXJ8.js} +1 -1
  75. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CRbYq2_g.js → keyboard-shortcuts-settings-DNRQFepg.js} +1 -1
  76. package/dist/gateway/static/root/assets/{local-app-workbench-page-04cX5TJu.js → local-app-workbench-page-CvY5XxbX.js} +1 -1
  77. package/dist/gateway/static/root/assets/{local-apps-page-fWM0FEhN.js → local-apps-page-DfwEvd8G.js} +1 -1
  78. package/dist/gateway/static/root/assets/local-session-drafts-CuDdIyxR.js +4 -0
  79. package/dist/gateway/static/root/assets/{locale-store-VNjH18Dj.js → locale-store-TQcz_Vjt.js} +1 -1
  80. package/dist/gateway/static/root/assets/{logs-page-6GanGLrm.js → logs-page-eq49F1Rt.js} +1 -1
  81. package/dist/gateway/static/root/assets/{management-settings-BxD_lc4E.js → management-settings-BaYXDMOJ.js} +1 -1
  82. package/dist/gateway/static/root/assets/{markdown-view-DLCBYWtx.js → markdown-view-D4nII6Zv.js} +1 -1
  83. package/dist/gateway/static/root/assets/{media-plugins-BvtNwKFb.js → media-plugins-MvlAY405.js} +1 -1
  84. package/dist/gateway/static/root/assets/messages-DaLmc4W1.js +3 -0
  85. package/dist/gateway/static/root/assets/model-selector-nsoNHqif.js +1 -0
  86. package/dist/gateway/static/root/assets/{models-hub-cache-_qE7L-_H.js → models-hub-cache-CFIazNIF.js} +1 -1
  87. package/dist/gateway/static/root/assets/note-detail-panel-KPzbHiEW.js +5 -0
  88. package/dist/gateway/static/root/assets/note-image-lightbox-DticJxxh.js +1 -0
  89. package/dist/gateway/static/root/assets/{notes-api-Bxa11X3a.js → notes-api-HVxR5bRD.js} +1 -1
  90. package/dist/gateway/static/root/assets/{notes-page-D2QpJ3WZ.js → notes-page-yShJeR3i.js} +1 -1
  91. package/dist/gateway/static/root/assets/{oauth-api-DIE4UpP7.js → oauth-api-CfKjRVnb.js} +1 -1
  92. package/dist/gateway/static/root/assets/{oauth-provider-connect-B95tiddN.js → oauth-provider-connect-D4uqONWr.js} +1 -1
  93. package/dist/gateway/static/root/assets/{page-context-capture-button-C-QbbwmN.js → page-context-capture-button-B98nlKTc.js} +1 -1
  94. package/dist/gateway/static/root/assets/{page-context-draft-BHmOfksL.js → page-context-draft-HcuK45iu.js} +1 -1
  95. package/dist/gateway/static/root/assets/page-header-store-D6SzJ9Ch.js +1 -0
  96. package/dist/gateway/static/root/assets/{personal-avatar-nXrmMfrV.js → personal-avatar-_d72UP_d.js} +1 -1
  97. package/dist/gateway/static/root/assets/{personal-page-BCwlYT3F.js → personal-page-B19h_3WQ.js} +1 -1
  98. package/dist/gateway/static/root/assets/{personal-settings-panel-vkYmXK8h.js → personal-settings-panel-CfwtGyue.js} +1 -1
  99. package/dist/gateway/static/root/assets/{phone-dependencies-card-CZDAxTWv.js → phone-dependencies-card-D8bqsDk_.js} +1 -1
  100. package/dist/gateway/static/root/assets/{phone-model-picker-4Snfs8Hq.js → phone-model-picker-CL_Zn6Xd.js} +1 -1
  101. package/dist/gateway/static/root/assets/{phone-settings-page-D8HperfA.js → phone-settings-page-C5Jia8eQ.js} +1 -1
  102. package/dist/gateway/static/root/assets/{phone-workspace-store-Di9R9Ux5.js → phone-workspace-store-FBfrfkYq.js} +1 -1
  103. package/dist/gateway/static/root/assets/plugin-details-dialog-gAq2KPzK.js +1 -0
  104. package/dist/gateway/static/root/assets/{preference-select-fields-C6abaM3k.js → preference-select-fields-Ck8GAX_y.js} +1 -1
  105. package/dist/gateway/static/root/assets/{product-automation-feedback-C74s9Mjz.js → product-automation-feedback-BJ9oTnNs.js} +2 -2
  106. package/dist/gateway/static/root/assets/{product-open-page-AbDP5w1c.js → product-open-page-Dw9hUdxP.js} +1 -1
  107. package/dist/gateway/static/root/assets/{product-preview-content-CktjvFbc.js → product-preview-content-C0iPzmSm.js} +1 -1
  108. package/dist/gateway/static/root/assets/{product-preview-modal-CzsqLwB4.js → product-preview-modal-COFtHoh6.js} +2 -2
  109. package/dist/gateway/static/root/assets/{project-detail-page-Cf3tggGP.js → project-detail-page-C5Amjah-.js} +3 -3
  110. package/dist/gateway/static/root/assets/{project-understanding-jmhFbHch.js → project-understanding-DpL9ADQU.js} +1 -1
  111. package/dist/gateway/static/root/assets/{projects-page-jMgZiFnO.js → projects-page-gGg9nM2t.js} +1 -1
  112. package/dist/gateway/static/root/assets/{providers-api-CJBYFKAK.js → providers-api-D6JJRlJb.js} +1 -1
  113. package/dist/gateway/static/root/assets/{recording-upload-Dl9a5yOV.js → recording-upload-DxX1xKyt.js} +1 -1
  114. package/dist/gateway/static/root/assets/{registry-api-BwkbPUYu.js → registry-api-BfXzBR1D.js} +1 -1
  115. package/dist/gateway/static/root/assets/remote-access-hub-BZA4StwC.js +1 -0
  116. package/dist/gateway/static/root/assets/{resource-unavailable-35wBZxmz.js → resource-unavailable-X-SIrZYI.js} +1 -1
  117. package/dist/gateway/static/root/assets/route-preload-CWRb0UCt.js +2 -0
  118. package/dist/gateway/static/root/assets/{runtime-tools-api-BF28JDAO.js → runtime-tools-api-1DjsPyQ5.js} +1 -1
  119. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-BnCtyORj.js +1 -0
  120. package/dist/gateway/static/root/assets/{service-recommendation-list-CdaS4MPF.js → service-recommendation-list-ChSOfHHh.js} +1 -1
  121. package/dist/gateway/static/root/assets/{session-api-zJXYlRPt.js → session-api-rvY5aWw8.js} +1 -1
  122. package/dist/gateway/static/root/assets/session-manager-D2rbRfX3.js +23 -0
  123. package/dist/gateway/static/root/assets/sessions-page-DAS2IUGT.js +1 -0
  124. package/dist/gateway/static/root/assets/settings-advanced-gate-CYDQybNF.js +1 -0
  125. package/dist/gateway/static/root/assets/{settings-advanced-section-C84IghdL.js → settings-advanced-section-ZKRIuk7h.js} +1 -1
  126. package/dist/gateway/static/root/assets/{settings-mode-store-CtQBJvbO.js → settings-mode-store-CtJ8pEfm.js} +1 -1
  127. package/dist/gateway/static/root/assets/{settings-page-eEIz9InP.js → settings-page-B3pUce-_.js} +1 -1
  128. package/dist/gateway/static/root/assets/{settings-page-header-CsPAYlqV.js → settings-page-header-DuNCn8i-.js} +1 -1
  129. package/dist/gateway/static/root/assets/{settings-page-layout-lPLeJQoV.js → settings-page-layout-DeNC8YHJ.js} +1 -1
  130. package/dist/gateway/static/root/assets/setup-status-panel-Fc3vuz_h.js +1 -0
  131. package/dist/gateway/static/root/assets/{share-link-dialog-NaM6jvIz.js → share-link-dialog-B3hwjVAx.js} +1 -1
  132. package/dist/gateway/static/root/assets/{share-preview-page-CHjZn27s.js → share-preview-page-D_9oFzGS.js} +1 -1
  133. package/dist/gateway/static/root/assets/{shares-api-B9rVcV1y.js → shares-api-BoUpXmxq.js} +1 -1
  134. package/dist/gateway/static/root/assets/shares-settings-Drfuvepz.js +1 -0
  135. package/dist/gateway/static/root/assets/{skill-api-D6zVfEuK.js → skill-api-By2HhJ9O.js} +1 -1
  136. package/dist/gateway/static/root/assets/{skill-list-api-SLmTBYF5.js → skill-list-api-TaUCzS8Y.js} +1 -1
  137. package/dist/gateway/static/root/assets/{skill-reload-api-UQkq2orI.js → skill-reload-api-CN2fpS1n.js} +1 -1
  138. package/dist/gateway/static/root/assets/{skills-page-Ca0pYZ4i.js → skills-page-LzGLique.js} +1 -1
  139. package/dist/gateway/static/root/assets/{system-settings-panel-BARWbjRN.js → system-settings-panel-Cuyg8Ml3.js} +1 -1
  140. package/dist/gateway/static/root/assets/{task-detail-page-roqAsGue.js → task-detail-page-6A9337pK.js} +2 -2
  141. package/dist/gateway/static/root/assets/{task-result-evidence-Bb1F7nAM.js → task-result-evidence-DDubAU_5.js} +1 -1
  142. package/dist/gateway/static/root/assets/{terminal-panel-store-DYDeXXAg.js → terminal-panel-store-BNs75Wdr.js} +1 -1
  143. package/dist/gateway/static/root/assets/{theme-store-DbStcH89.js → theme-store-DB1ZfBUm.js} +1 -1
  144. package/dist/gateway/static/root/assets/tracing-settings-page-TvtX4Goh.js +1 -0
  145. package/dist/gateway/static/root/assets/{tunnel-api-BK_ivyIb.js → tunnel-api-COoVEdV9.js} +1 -1
  146. package/dist/gateway/static/root/assets/{understanding-activity-store-p7Z7oq8z.js → understanding-activity-store-Dr_MLgYe.js} +1 -1
  147. package/dist/gateway/static/root/assets/{understanding-refresh-store-D-U6rcwZ.js → understanding-refresh-store-DGmLGEqw.js} +1 -1
  148. package/dist/gateway/static/root/assets/{usage-page-URFSiswS.js → usage-page-DP6eb6ed.js} +1 -1
  149. package/dist/gateway/static/root/assets/{use-autosave-B7cbumro.js → use-autosave-itwjDYUb.js} +1 -1
  150. package/dist/gateway/static/root/assets/{use-composer-attachments-DAtiwLsE.js → use-composer-attachments-hjIGlI_2.js} +1 -1
  151. package/dist/gateway/static/root/assets/{use-file-preview-expanded-B8erpWsX.js → use-file-preview-expanded-ClLa0g8D.js} +2 -2
  152. package/dist/gateway/static/root/assets/{use-personal-profile-DDW29nm-.js → use-personal-profile-vhWk6tTU.js} +1 -1
  153. package/dist/gateway/static/root/assets/{use-workspace-tree-DCoTf22f.js → use-workspace-tree-dfXXjA2-.js} +1 -1
  154. package/dist/gateway/static/root/assets/user-model-page-D8dswPWd.js +2 -0
  155. package/dist/gateway/static/root/assets/{voice-api-key-field-DzYdJZN4.js → voice-api-key-field-BIfBySnN.js} +1 -1
  156. package/dist/gateway/static/root/assets/{voice-config-api-wotvT6Hw.js → voice-config-api-J4o59ICE.js} +1 -1
  157. package/dist/gateway/static/root/assets/{voice-input-shortcut-events-BI6PuiIB.js → voice-input-shortcut-events-B1mlpUdC.js} +1 -1
  158. package/dist/gateway/static/root/assets/{voice-transcribe-api-DAK9eLRr.js → voice-transcribe-api-xxaSOOmq.js} +1 -1
  159. package/dist/gateway/static/root/assets/{work-discovery-overlay-BzmB9Rub.js → work-discovery-overlay-DqwT1E5u.js} +1 -1
  160. package/dist/gateway/static/root/assets/{work-discovery-page-CmGjxUIT.js → work-discovery-page-BzYQmPLT.js} +1 -1
  161. package/dist/gateway/static/root/assets/{working-directory-picker-modal-B-EHm52-.js → working-directory-picker-modal-D2Zf3GOG.js} +1 -1
  162. package/dist/gateway/static/root/assets/{workspace-api-uhiEMPpK.js → workspace-api-Bnx3eS2M.js} +2 -2
  163. package/dist/gateway/static/root/assets/workspace-editor-agent-store-COUVwj-p.js +1 -0
  164. package/dist/gateway/static/root/assets/{workspace-file-preview-dialog-BDm06MZm.js → workspace-file-preview-dialog-D13qHzVr.js} +1 -1
  165. package/dist/gateway/static/root/assets/{workspace-open-location-menu-Bv83uoqu.js → workspace-open-location-menu-Cou-ig1H.js} +1 -1
  166. package/dist/gateway/static/root/assets/{xopc-cloud-account-card-Cd5GdpGL.js → xopc-cloud-account-card-DQGPKxHA.js} +1 -1
  167. package/dist/gateway/static/root/index.html +80 -80
  168. package/dist/package.js +1 -1
  169. package/dist/packages/gateway-contract/src/clarification-questions.js +86 -0
  170. package/dist/packages/gateway-contract/src/clarifications.js +19 -0
  171. package/dist/packages/gateway-contract/src/index.js +1 -0
  172. package/dist/packages/gateway-contract/src/session-input-command.js +3 -0
  173. package/dist/src/agent/agent-manager.js +1 -1
  174. package/dist/src/agent/background-review/run-background-review.js +1 -1
  175. package/dist/src/agent/coding/repository-instructions.js +1 -1
  176. package/dist/src/agent/embedded/index.js +1 -1
  177. package/dist/src/agent/embedded/run-for-session.js +1 -1
  178. package/dist/src/agent/embedded/run-turn.js +3 -3
  179. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -2
  180. package/dist/src/agent/embedded/tool-result-truncation.js +1 -1
  181. package/dist/src/agent/inbound/attachment-pipeline.js +1 -1
  182. package/dist/src/agent/memory/compaction.js +1 -1
  183. package/dist/src/agent/memory/context-budget.js +1 -1
  184. package/dist/src/agent/memory/context-recovery.js +1 -1
  185. package/dist/src/agent/memory/user-message-text.js +1 -1
  186. package/dist/src/agent/service/btw-query.js +1 -1
  187. package/dist/src/agent/service/direct-turn-helpers.js +1 -1
  188. package/dist/src/agent/service/process-direct-streaming.js +2 -2
  189. package/dist/src/agent/source-context/types.d.ts +1 -0
  190. package/dist/src/agent/tools/clarify-tool.js +43 -5
  191. package/dist/src/agent/tools/cli-clarify.js +1 -0
  192. package/dist/src/agent/tools/dataBatch.js +1 -1
  193. package/dist/src/agent/tools/personal-task-tool.d.ts +1 -1
  194. package/dist/src/agent/tools/phone-use-tool.js +2 -2
  195. package/dist/src/agent/tools/session-search-tool.js +1 -1
  196. package/dist/src/bootstrap/application-state.js +2 -2
  197. package/dist/src/cli/commands/gateway/run-foreground.js +2 -2
  198. package/dist/src/computer/diagnostics.d.ts +3 -3
  199. package/dist/src/computer/evaluation.d.ts +2 -2
  200. package/dist/src/connectors/learning-coordinator.js +1 -1
  201. package/dist/src/gateway/ephemeral-clarification-waiter.js +1 -0
  202. package/dist/src/gateway/hono/routes/composer-history.js +1 -1
  203. package/dist/src/gateway/hono/routes/connectors.js +1 -1
  204. package/dist/src/gateway/hono/routes/home.js +1 -1
  205. package/dist/src/gateway/hono/routes/phone.js +31 -6
  206. package/dist/src/gateway/hono/routes/public-gateway.js +2 -1
  207. package/dist/src/gateway/hono/routes/session-command-handler.js +1 -0
  208. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +6 -0
  209. package/dist/src/gateway/hono/routes/tunnel.js +8 -1
  210. package/dist/src/gateway/hono/routes/user-model-refresh.js +1 -1
  211. package/dist/src/gateway/next-turn-suggestions/snapshot.js +1 -1
  212. package/dist/src/gateway/ports.js +6 -1
  213. package/dist/src/gateway/run-loop.js +0 -1
  214. package/dist/src/gateway/service/agent-runner.js +8 -3
  215. package/dist/src/gateway/service/run-gateway-agent.js +1 -1
  216. package/dist/src/gateway/service/session-input-coordinator.js +5 -4
  217. package/dist/src/phone/assistance.js +3 -0
  218. package/dist/src/phone/contracts.d.ts +4 -0
  219. package/dist/src/phone/runtime.d.ts +7 -1
  220. package/dist/src/phone/runtime.js +31 -24
  221. package/dist/src/routing/agent-session-key.js +1 -1
  222. package/dist/src/session/session-context-for-llm.js +1 -0
  223. package/dist/src/session/session-title.js +1 -1
  224. package/dist/src/storage/sqlite/clarification-wait-repository.js +45 -4
  225. package/dist/src/storage/sqlite/index.js +6 -6
  226. package/dist/src/storage/sqlite/session-creation-repository.js +1 -1
  227. package/dist/src/storage/sqlite/session-repository.js +1 -1
  228. package/dist/src/tasks/home-query-service.js +1 -1
  229. package/dist/src/tasks/task-allocation-repository.js +1 -1
  230. package/dist/src/tui/backends/embedded-backend.js +1 -1
  231. package/dist/src/tunnel/broker-client.d.ts +3 -0
  232. package/dist/src/tunnel/broker-client.js +14 -6
  233. package/dist/src/tunnel/frpc-process.js +54 -33
  234. package/dist/src/tunnel/tunnel-service.d.ts +5 -1
  235. package/dist/src/tunnel/tunnel-service.js +42 -17
  236. package/package.json +5 -4
  237. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DlGRuKMv.js +0 -1
  238. package/dist/gateway/static/root/assets/automation-task-card-D2p9qlYE.js +0 -3
  239. package/dist/gateway/static/root/assets/automations-workspace-BkzC3oIM.js +0 -9
  240. package/dist/gateway/static/root/assets/capabilities-page-m3b9sLFG.js +0 -2
  241. package/dist/gateway/static/root/assets/connected-providers-grid-DM2glQN3.js +0 -1
  242. package/dist/gateway/static/root/assets/connectors-page-D7pipFHA.js +0 -1
  243. package/dist/gateway/static/root/assets/device-pairing-wizard-D8cLc41G.js +0 -1
  244. package/dist/gateway/static/root/assets/gateway-realtime-store-C6sMzYDT.js +0 -1
  245. package/dist/gateway/static/root/assets/index-CSIg7V1A.js +0 -11
  246. package/dist/gateway/static/root/assets/index-Dv8mUlNN.css +0 -1
  247. package/dist/gateway/static/root/assets/local-session-drafts-ClrSe5mH.js +0 -1
  248. package/dist/gateway/static/root/assets/messages-Btr7C0hF.js +0 -3
  249. package/dist/gateway/static/root/assets/model-selector-DYUnp917.js +0 -1
  250. package/dist/gateway/static/root/assets/note-detail-panel-bjRZesmS.js +0 -5
  251. package/dist/gateway/static/root/assets/note-image-lightbox-D7Jqb75C.js +0 -1
  252. package/dist/gateway/static/root/assets/page-header-store-bPV8_tKL.js +0 -1
  253. package/dist/gateway/static/root/assets/plugin-details-dialog-DJsDu-_8.js +0 -1
  254. package/dist/gateway/static/root/assets/remote-access-hub-CBQ_bOy9.js +0 -1
  255. package/dist/gateway/static/root/assets/route-preload-BcA6SPeC.js +0 -2
  256. package/dist/gateway/static/root/assets/runtime-impact-DbySfhdp.js +0 -1
  257. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bq2xQ2qd.js +0 -1
  258. package/dist/gateway/static/root/assets/session-manager-wWxpzSo0.js +0 -23
  259. package/dist/gateway/static/root/assets/sessions-page-BkjD_dUD.js +0 -1
  260. package/dist/gateway/static/root/assets/settings-advanced-gate-BUMCEtA_.js +0 -1
  261. package/dist/gateway/static/root/assets/setup-status-panel-BSU5WpaE.js +0 -1
  262. package/dist/gateway/static/root/assets/shares-settings-5sB15V5v.js +0 -1
  263. package/dist/gateway/static/root/assets/tracing-settings-page-YfkNCxbP.js +0 -1
  264. package/dist/gateway/static/root/assets/user-model-page-DSV5NkNj.js +0 -2
  265. 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
- }, { additionalProperties: false });
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 payload = {
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/index.js"),
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/index.js");
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" | "cancelled" | "unknown" | "model" | "observation" | "budget" | "transport" | "native" | "no_progress" | "harness";
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" && (!expectedTranscriptId || expectedTranscriptId !== transcriptId)) throw new PhoneError("PHONE_BINDING_CHANGED", "Conversation changed; refresh the phone", 409);
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";