@xopcai/xopc 0.0.414 → 0.0.416

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 (359) hide show
  1. package/dist/browser-ext/_locales/en/messages.json +4 -1
  2. package/dist/browser-ext/_locales/zh_CN/messages.json +4 -1
  3. package/dist/browser-ext/dist/assets/{page-context-MuzjMBlJ.js → page-context-CVvmTWZb.js} +33 -9
  4. package/dist/browser-ext/dist/background.js +39 -10
  5. package/dist/browser-ext/dist/sidepanel.html +1 -1
  6. package/dist/browser-ext/dist/sidepanel.js +22 -3
  7. package/dist/browser-ext/manifest.json +1 -1
  8. package/dist/extensions/telegram/xopc.extension.json +1 -1
  9. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-ClobpdW3.js → agent-avatar-dicebear-CufU7cqe.js} +1 -1
  10. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-DHDAcss8.js +1 -0
  11. package/dist/gateway/static/root/assets/agents-BV3dAoa0.js +77 -0
  12. package/dist/gateway/static/root/assets/{agents-admin-api-CeBkHnl8.js → agents-admin-api-B1p-ghg9.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-CLunLNGp.js → app-management-settings-panel-D4-n1uBg.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-DBEgoE9g.js → appearance-settings-Cgn4eNsX.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-BOYzD7Zz.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-JElK4Goq.js → archive-plugin-B4btCsiV.js} +1 -1
  17. package/dist/gateway/static/root/assets/{automations-page-CZ0UqwyU.js → automations-page-yb1EL_3N.js} +1 -1
  18. package/dist/gateway/static/root/assets/automations-workspace-J7LJ4RuV.js +8 -0
  19. package/dist/gateway/static/root/assets/{binary-plugins-CXFawow6.js → binary-plugins-DQT9e258.js} +1 -1
  20. package/dist/gateway/static/root/assets/{block-editor-BoduwSYI.js → block-editor-B50rU9tL.js} +30 -30
  21. package/dist/gateway/static/root/assets/{browser-automation-inputs-D1pDgMJu.js → browser-automation-inputs-D6AccXaA.js} +1 -1
  22. package/dist/gateway/static/root/assets/browser-automations-page-BiQz6lJA.js +3 -0
  23. package/dist/gateway/static/root/assets/browser-settings-page-W9kuxBbE.js +3 -0
  24. package/dist/gateway/static/root/assets/{capabilities-Bpeh6E22.js → capabilities-BlxF36t-.js} +1 -1
  25. package/dist/gateway/static/root/assets/capabilities-page-iXe87MdG.js +2 -0
  26. package/dist/gateway/static/root/assets/capabilities-settings-panel-CRLSXe7Z.js +8 -0
  27. package/dist/gateway/static/root/assets/{capability-header-actions-BasrAWA0.js → capability-header-actions-BMnbzHms.js} +1 -1
  28. package/dist/gateway/static/root/assets/channels-CrRJkOKX.js +1 -0
  29. package/dist/gateway/static/root/assets/{chat-terminal-dock-CwQbzcZ_.js → chat-terminal-dock-Bd3af4gL.js} +2 -2
  30. package/dist/gateway/static/root/assets/{computer-settings-page-DNWeJKfF.js → computer-settings-page-DXfqy7xh.js} +1 -1
  31. package/dist/gateway/static/root/assets/{connector-service-page-CxHgC5RM.js → connector-service-page-B-cw0CPU.js} +1 -1
  32. package/dist/gateway/static/root/assets/connectors-page-DbFxc0Fd.js +1 -0
  33. package/dist/gateway/static/root/assets/{date-picker-CXxLbLJb.js → date-picker-CqzXevH6.js} +1 -1
  34. package/dist/gateway/static/root/assets/{dependency-picker-DVuWMrSj.js → dependency-picker-pgT4Gyaf.js} +1 -1
  35. package/dist/gateway/static/root/assets/{desktop-pet-settings-BDlg9g4s.js → desktop-pet-settings-Dy_-i2L8.js} +1 -1
  36. package/dist/gateway/static/root/assets/{desktop-pet-KbVLtAlO.js → desktop-pet-zICeqw9c.js} +1 -1
  37. package/dist/gateway/static/root/assets/device-pairing-wizard-ByGbxqkg.js +1 -0
  38. package/dist/gateway/static/root/assets/{directory-picker-path-field-a7xEodzo.js → directory-picker-path-field-C-aQ7qoM.js} +1 -1
  39. package/dist/gateway/static/root/assets/{extension-debug-page-CHelH5u_.js → extension-debug-page-2NwpYkS5.js} +1 -1
  40. package/dist/gateway/static/root/assets/{extension-page-CrVHmS9-.js → extension-page-y9J0z7_Q.js} +1 -1
  41. package/dist/gateway/static/root/assets/{extension-settings-page-CiMybi0r.js → extension-settings-page-BtowusUh.js} +1 -1
  42. package/dist/gateway/static/root/assets/{gateway-config-swr-DF_HV6NP.js → gateway-config-swr-fQKBHBi1.js} +1 -1
  43. package/dist/gateway/static/root/assets/gateway-realtime-C52ghnBK.js +1 -0
  44. package/dist/gateway/static/root/assets/gateway-realtime-store-Bx9KCID-.js +1 -0
  45. package/dist/gateway/static/root/assets/gateway-settings-BYSKzUMR.js +1 -0
  46. package/dist/gateway/static/root/assets/{gateway-startup-retry-B91CBTzO.js → gateway-startup-retry-Cfwxof4k.js} +1 -1
  47. package/dist/gateway/static/root/assets/highlight-code-Cz6eeDH5.js +1 -0
  48. package/dist/gateway/static/root/assets/{highlighted-body-KQOG7T2V-8ACAVktj.js → highlighted-body-KQOG7T2V-BiAa8HKC.js} +1 -1
  49. package/dist/gateway/static/root/assets/home-page-Cd1BjYHj.js +2 -0
  50. package/dist/gateway/static/root/assets/{image-generation-api-CVBaWmrV.js → image-generation-api-gBFro48x.js} +1 -1
  51. package/dist/gateway/static/root/assets/{imports-page-C5IP3e6d.js → imports-page-BZQpXgjj.js} +1 -1
  52. package/dist/gateway/static/root/assets/index-Cy16gQST.css +1 -0
  53. package/dist/gateway/static/root/assets/index-DRyGCING.js +710 -0
  54. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BhU6VYvd.js → keyboard-shortcuts-settings-CYunR34k.js} +1 -1
  55. package/dist/gateway/static/root/assets/local-app-workbench-page-B_Ac1lly.js +1 -0
  56. package/dist/gateway/static/root/assets/{local-apps-page-DcP1Bdlk.js → local-apps-page-w-J5bY02.js} +1 -1
  57. package/dist/gateway/static/root/assets/{local-session-drafts-DvmwiLUx.js → local-session-drafts-iGX_6O0O.js} +1 -1
  58. package/dist/gateway/static/root/assets/{locale-store-JogcXC4J.js → locale-store-B7s2Hb35.js} +1 -1
  59. package/dist/gateway/static/root/assets/logs-page-Dnjvvx2i.js +2 -0
  60. package/dist/gateway/static/root/assets/management-settings-w1EDwgLW.js +1 -0
  61. package/dist/gateway/static/root/assets/{media-plugins-BnPpcJ2J.js → media-plugins-CIx1koXw.js} +1 -1
  62. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-DISkHmEC.js +1 -0
  63. package/dist/gateway/static/root/assets/{messages-RzwPiQNL.js → messages-BYq0cPbn.js} +2 -2
  64. package/dist/gateway/static/root/assets/note-detail-panel-CNkxMTFU.js +5 -0
  65. package/dist/gateway/static/root/assets/note-image-lightbox-D5GH2wuC.js +1 -0
  66. package/dist/gateway/static/root/assets/notes-page-DZgKqFBG.js +8 -0
  67. package/dist/gateway/static/root/assets/page-context-capture-button-DusR2Itk.js +1 -0
  68. package/dist/gateway/static/root/assets/personal-page-CR5JFkQ9.js +1 -0
  69. package/dist/gateway/static/root/assets/personal-settings-panel-B7undvlr.js +1 -0
  70. package/dist/gateway/static/root/assets/phone-model-picker-fWDltRUJ.js +1 -0
  71. package/dist/gateway/static/root/assets/phone-settings-page-CsOirAiy.js +1 -0
  72. package/dist/gateway/static/root/assets/plugin-details-dialog-BOBVIB3j.js +1 -0
  73. package/dist/gateway/static/root/assets/{preview-open-alternatives-FGqN-mQx.js → preview-open-alternatives-CMxjsKSw.js} +1 -1
  74. package/dist/gateway/static/root/assets/{product-open-page-CwnHLfdL.js → product-open-page-CrlyJx5M.js} +1 -1
  75. package/dist/gateway/static/root/assets/{product-preview-content-BD6k5hF9.js → product-preview-content-B-Jhzi7W.js} +1 -1
  76. package/dist/gateway/static/root/assets/project-detail-page-DoYUbtcI.js +7 -0
  77. package/dist/gateway/static/root/assets/projects-page-xGQd9oAZ.js +1 -0
  78. package/dist/gateway/static/root/assets/refresh-cw-BRlGaq2w.js +1 -0
  79. package/dist/gateway/static/root/assets/{registry-api-BGqSwITi.js → registry-api-BcfoLEna.js} +1 -1
  80. package/dist/gateway/static/root/assets/remote-access-hub-Gs0Xkws9.js +1 -0
  81. package/dist/gateway/static/root/assets/{runtime-tools-api-CSm5SpnR.js → runtime-tools-api-DesqGCnE.js} +1 -1
  82. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-Bwg7U7TR.js +1 -0
  83. package/dist/gateway/static/root/assets/{schema-form-DoVn5jJK.js → schema-form-ByzTNR_C.js} +1 -1
  84. package/dist/gateway/static/root/assets/{session-api-DTxZyMta.js → session-api-DdQnMwkl.js} +1 -1
  85. package/dist/gateway/static/root/assets/{session-manager-B2HDomj4.js → session-manager-B_h0jlLb.js} +1 -1
  86. package/dist/gateway/static/root/assets/sessions-page-XzK1ftbR.js +1 -0
  87. package/dist/gateway/static/root/assets/settings-advanced-gate-D_8Mvnog.js +1 -0
  88. package/dist/gateway/static/root/assets/{settings-form-section-Ce8vVv-9.js → settings-form-section-Brgd8IOV.js} +1 -1
  89. package/dist/gateway/static/root/assets/{settings-page-DP2w3ejC.js → settings-page-B6Mv02eg.js} +1 -1
  90. package/dist/gateway/static/root/assets/settings-page-header-BWyxJKOG.js +1 -0
  91. package/dist/gateway/static/root/assets/{settings-page-layout-B20AfmFG.js → settings-page-layout-DLHcS-0T.js} +1 -1
  92. package/dist/gateway/static/root/assets/setup-status-panel-DSCj5yis.js +1 -0
  93. package/dist/gateway/static/root/assets/{share-preview-page-DV4dKrmG.js → share-preview-page-DF8Of0aZ.js} +1 -1
  94. package/dist/gateway/static/root/assets/shares-settings-DXNPe4Tl.js +1 -0
  95. package/dist/gateway/static/root/assets/{skill-api-DTdejInH.js → skill-api-CKCDCHLq.js} +1 -1
  96. package/dist/gateway/static/root/assets/skill-reload-api-BH0WF6Br.js +1 -0
  97. package/dist/gateway/static/root/assets/skills-page-DFWMVRW4.js +2 -0
  98. package/dist/gateway/static/root/assets/system-settings-panel-DB-ttubV.js +1 -0
  99. package/dist/gateway/static/root/assets/task-detail-page-BJY7c8wb.js +2 -0
  100. package/dist/gateway/static/root/assets/{task-result-evidence-DIGSC4qF.js → task-result-evidence-B-vt1BgK.js} +1 -1
  101. package/dist/gateway/static/root/assets/{tracing-settings-page-BaU8frtc.js → tracing-settings-page-Dt51Z_ws.js} +1 -1
  102. package/dist/gateway/static/root/assets/{tunnel-api-BCcOUsqu.js → tunnel-api-Dok3t7Qe.js} +1 -1
  103. package/dist/gateway/static/root/assets/usage-page-lJym5G7F.js +1 -0
  104. package/dist/gateway/static/root/assets/{use-autosave-C1X47WVb.js → use-autosave-D4EMIB-V.js} +1 -1
  105. package/dist/gateway/static/root/assets/user-model-page-BXdNkITp.js +2 -0
  106. package/dist/gateway/static/root/assets/{voice-api-key-field-Bk4DQMTw.js → voice-api-key-field-CO3KuanA.js} +1 -1
  107. package/dist/gateway/static/root/assets/{voice-config-api-D7xsWrdh.js → voice-config-api-BkUlN7GH.js} +1 -1
  108. package/dist/gateway/static/root/assets/{work-discovery-overlay-B7_NmTB5.js → work-discovery-overlay-BJRtgQM3.js} +1 -1
  109. package/dist/gateway/static/root/assets/wrench-DFb4r8bH.js +1 -0
  110. package/dist/gateway/static/root/assets/xopc-cloud-account-card-CS-_GxHV.js +1 -0
  111. package/dist/gateway/static/root/browser-setup-test.html +5 -0
  112. package/dist/gateway/static/root/browser-setup-test.js +7 -0
  113. package/dist/gateway/static/root/index.html +17 -14
  114. package/dist/package.js +1 -1
  115. package/dist/packages/gateway-contract/src/browser-setup.js +6 -0
  116. package/dist/packages/gateway-contract/src/index.js +4 -0
  117. package/dist/packages/gateway-contract/src/phone-setup.js +6 -0
  118. package/dist/packages/realtime-client/src/index.js +1 -0
  119. package/dist/packages/realtime-protocol/src/index.js +1 -0
  120. package/dist/src/agent/agent-manager.d.ts +4 -0
  121. package/dist/src/agent/agent-manager.js +12 -1
  122. package/dist/src/agent/coding/workspace-revision.js +1 -1
  123. package/dist/src/agent/commands/command-registry.js +1 -1
  124. package/dist/src/agent/embedded/tool-search-extension.js +14 -1
  125. package/dist/src/agent/memory/context-recovery.d.ts +1 -1
  126. package/dist/src/agent/service.d.ts +1 -0
  127. package/dist/src/agent/service.js +5 -0
  128. package/dist/src/agent/service.types.d.ts +2 -0
  129. package/dist/src/agent/skills/installer.js +3 -3
  130. package/dist/src/agent/tool-manuals/phone.d.ts +1 -1
  131. package/dist/src/agent/tool-manuals/phone.js +4 -2
  132. package/dist/src/agent/tool-manuals/xopc-configuration.d.ts +2 -0
  133. package/dist/src/agent/tool-manuals/xopc-configuration.js +25 -0
  134. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +2 -0
  135. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +6 -2
  136. package/dist/src/agent/tools/factory.d.ts +3 -0
  137. package/dist/src/agent/tools/factory.js +11 -1
  138. package/dist/src/agent/tools/personal-task-tool.d.ts +1 -1
  139. package/dist/src/agent/tools/personal-task-tool.js +23 -21
  140. package/dist/src/agent/tools/phone-use-tool.d.ts +1 -0
  141. package/dist/src/agent/tools/phone-use-tool.js +29 -1
  142. package/dist/src/agent/tools/tool-manual-tool.d.ts +1 -1
  143. package/dist/src/agent/tools/tool-manual-tool.js +3 -1
  144. package/dist/src/agent/tools/toolExposure.js +3 -0
  145. package/dist/src/agent/tools/xopc-use-tool.d.ts +4 -2
  146. package/dist/src/agent/tools/xopc-use-tool.js +40 -2
  147. package/dist/src/backup/archive.js +2 -1
  148. package/dist/src/browser/drivers/browser-driver.d.ts +2 -2
  149. package/dist/src/browser/drivers/extension-driver.d.ts +2 -2
  150. package/dist/src/browser/drivers/extension-driver.js +6 -3
  151. package/dist/src/browser/providers/browser-ext-install.js +3 -2
  152. package/dist/src/browser/runtime/browser-runtime.d.ts +4 -1
  153. package/dist/src/browser/runtime/browser-runtime.js +29 -17
  154. package/dist/src/browser/setup/repository.d.ts +5 -0
  155. package/dist/src/browser/setup/repository.js +42 -0
  156. package/dist/src/browser/setup/service.d.ts +152 -0
  157. package/dist/src/browser/setup/service.js +404 -0
  158. package/dist/src/browser/setup/types.d.ts +38 -0
  159. package/dist/src/browser/setup/types.js +1 -0
  160. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  161. package/dist/src/cli/commands/extension-marketplace.js +3 -3
  162. package/dist/src/cli/commands/extension-pack.js +1 -1
  163. package/dist/src/cli/commands/extension.js +2 -2
  164. package/dist/src/config/schema.d.ts +2 -0
  165. package/dist/src/extensions/install.js +1 -1
  166. package/dist/src/extensions/update.js +1 -1
  167. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  168. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  169. package/dist/src/gateway/hono/routes/browser-setup.d.ts +3 -0
  170. package/dist/src/gateway/hono/routes/browser-setup.js +114 -0
  171. package/dist/src/gateway/hono/routes/browser.d.ts +2 -1
  172. package/dist/src/gateway/hono/routes/browser.js +1 -1
  173. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  174. package/dist/src/gateway/hono/routes/phone-dependencies.js +1 -1
  175. package/dist/src/gateway/hono/routes/phone-setup.d.ts +7 -0
  176. package/dist/src/gateway/hono/routes/phone-setup.js +162 -0
  177. package/dist/src/gateway/hono/routes/phone.js +11 -7
  178. package/dist/src/gateway/hono/routes/public-gateway.js +2 -0
  179. package/dist/src/gateway/provider-model-setup.js +1 -1
  180. package/dist/src/gateway/service/config-coordinator.d.ts +2 -0
  181. package/dist/src/gateway/service/config-coordinator.js +1 -1
  182. package/dist/src/gateway/service/session-input-coordinator.js +1 -1
  183. package/dist/src/gateway/service.d.ts +5 -0
  184. package/dist/src/gateway/service.js +52 -7
  185. package/dist/src/gateway/xopc-cloud-capability-setup.js +7 -1
  186. package/dist/src/home-intelligence/host.js +2 -2
  187. package/dist/src/infra/unhandled-rejections.js +2 -2
  188. package/dist/src/infra/update-runner.js +1 -1
  189. package/dist/src/personal-agent/prompts.js +1 -1
  190. package/dist/src/phone/adb-driver.d.ts +8 -2
  191. package/dist/src/phone/adb-driver.js +124 -54
  192. package/dist/src/phone/cloud-adb.js +8 -0
  193. package/dist/src/phone/cloud-scrcpy.d.ts +3 -1
  194. package/dist/src/phone/cloud-scrcpy.js +17 -3
  195. package/dist/src/phone/contracts.d.ts +85 -0
  196. package/dist/src/phone/contracts.js +31 -5
  197. package/dist/src/phone/model-adapter.d.ts +141 -2
  198. package/dist/src/phone/model-adapter.js +176 -24
  199. package/dist/src/phone/numeric-entry.d.ts +31 -0
  200. package/dist/src/phone/numeric-entry.js +126 -0
  201. package/dist/src/phone/planning.d.ts +27 -0
  202. package/dist/src/phone/planning.js +79 -0
  203. package/dist/src/phone/recovery.d.ts +37 -0
  204. package/dist/src/phone/recovery.js +81 -0
  205. package/dist/src/phone/reliability.d.ts +7 -0
  206. package/dist/src/phone/reliability.js +66 -0
  207. package/dist/src/phone/repository.d.ts +1 -0
  208. package/dist/src/phone/repository.js +3 -0
  209. package/dist/src/phone/runtime.d.ts +8 -0
  210. package/dist/src/phone/runtime.js +387 -41
  211. package/dist/src/phone/scrcpy-text.d.ts +11 -0
  212. package/dist/src/phone/scrcpy-text.js +72 -0
  213. package/dist/src/phone/scrcpy.d.ts +5 -1
  214. package/dist/src/phone/scrcpy.js +48 -3
  215. package/dist/src/phone/semantic-controls.d.ts +13 -0
  216. package/dist/src/phone/semantic-controls.js +76 -0
  217. package/dist/src/phone/setup/service.d.ts +148 -0
  218. package/dist/src/phone/setup/service.js +251 -0
  219. package/dist/src/providers/presentation.js +2 -2
  220. package/dist/src/providers/xopc-cloud-model-source.js +6 -2
  221. package/dist/src/realtime/runtime.js +1 -1
  222. package/dist/src/storage/sqlite/connection.js +2 -2
  223. package/dist/src/storage/sqlite/offline-access.js +13 -7
  224. package/dist/src/storage/sqlite/schema-errors.d.ts +12 -0
  225. package/dist/src/storage/sqlite/schema-errors.js +21 -3
  226. package/dist/src/storage/sqlite/schema-upgrade.d.ts +4 -0
  227. package/dist/src/storage/sqlite/schema-upgrade.js +78 -0
  228. package/dist/src/storage/sqlite/schema.d.ts +4 -3
  229. package/dist/src/storage/sqlite/schema.js +14 -8
  230. package/dist/src/storage/sqlite/schema.sql +10 -0
  231. package/dist/src/storage/sqlite/upgrades/203_remove_retired_proactive_contracts.sql +70 -0
  232. package/dist/src/storage/sqlite/upgrades/204_home_intelligence.sql +78 -0
  233. package/dist/src/storage/sqlite/upgrades/205_agent_catalog.sql +66 -0
  234. package/dist/src/storage/sqlite/upgrades/206_home_advice_strategy_version.sql +2 -0
  235. package/dist/src/storage/sqlite/upgrades/207_user_model_policy_contract.sql +121 -0
  236. package/dist/src/storage/sqlite/upgrades/208_automation_management.sql +2 -0
  237. package/dist/src/storage/sqlite/upgrades/209_automation_event_hub.sql +48 -0
  238. package/dist/src/storage/sqlite/upgrades/210_remove_legacy_automation_timeout.sql +14 -0
  239. package/dist/src/storage/sqlite/upgrades/211_automation_result_deliveries.sql +16 -0
  240. package/dist/src/storage/sqlite/upgrades/212_automation_delivery_policy.sql +30 -0
  241. package/dist/src/storage/sqlite/upgrades/213_automation_reliability_contract.sql +188 -0
  242. package/dist/src/storage/sqlite/upgrades/214_ai_usage_ledger.sql +41 -0
  243. package/dist/src/storage/sqlite/upgrades/215_scene_execution_adapters.sql +6 -0
  244. package/dist/src/storage/sqlite/upgrades/216_remove_scene_model_usage.sql +1 -0
  245. package/dist/src/storage/sqlite/upgrades/217_remove_legacy_memory_tables.sql +4 -0
  246. package/dist/src/storage/sqlite/upgrades/218_core_relation_indexes.sql +26 -0
  247. package/dist/src/storage/sqlite/upgrades/219_json_contracts.sql +123 -0
  248. package/dist/src/storage/sqlite/upgrades/220_normalize_timestamps.sql +339 -0
  249. package/dist/src/storage/sqlite/upgrades/221_ai_usage_retention_index.sql +2 -0
  250. package/dist/src/storage/sqlite/upgrades/222_session_config_authority.sql +13 -0
  251. package/dist/src/storage/sqlite/upgrades/223_session_creation_receipts.sql +59 -0
  252. package/dist/src/storage/sqlite/upgrades/224_task_origin_links.sql +8 -0
  253. package/dist/src/storage/sqlite/upgrades/225_task_collaboration.sql +32 -0
  254. package/dist/src/storage/sqlite/upgrades/226_task_main_updates.sql +9 -0
  255. package/dist/src/storage/sqlite/upgrades/227_task_main_update_decisions.sql +8 -0
  256. package/dist/src/storage/sqlite/upgrades/228_task_main_agent_links.sql +14 -0
  257. package/dist/src/storage/sqlite/upgrades/229_task_criterion_reviews.sql +12 -0
  258. package/dist/src/storage/sqlite/upgrades/230_personal_agent_onboarding.sql +8 -0
  259. package/dist/src/storage/sqlite/upgrades/231_task_result_deliveries.sql +32 -0
  260. package/dist/src/storage/sqlite/upgrades/232_personal_requests.sql +28 -0
  261. package/dist/src/storage/sqlite/upgrades/233_observability_usage_links.sql +3 -0
  262. package/dist/src/storage/sqlite/upgrades/234_task_result_reply.sql +14 -0
  263. package/dist/src/storage/sqlite/upgrades/235_personal_conversation_priority.sql +3 -0
  264. package/dist/src/storage/sqlite/upgrades/236_personal_proactivity.sql +53 -0
  265. package/dist/src/storage/sqlite/upgrades/237_personal_strategy_versions.sql +18 -0
  266. package/dist/src/storage/sqlite/upgrades/238_browser_record_replay.sql +45 -0
  267. package/dist/src/storage/sqlite/upgrades/239_clarification_notifications.sql +26 -0
  268. package/dist/src/storage/sqlite/upgrades/240_device_settings.sql +5 -0
  269. package/dist/src/storage/sqlite/upgrades/241_device_grant_audit.sql +13 -0
  270. package/dist/src/storage/sqlite/upgrades/242_cloud_usage_receipts.sql +5 -0
  271. package/dist/src/storage/sqlite/upgrades/243_voice_opening_greetings.sql +12 -0
  272. package/dist/src/storage/sqlite/upgrades/244_device_request_proofs.sql +8 -0
  273. package/dist/src/storage/sqlite/upgrades/245_memory_learning.sql +125 -0
  274. package/dist/src/storage/sqlite/upgrades/246_personal_session_thinking.sql +22 -0
  275. package/dist/src/storage/sqlite/upgrades/247_agent_selection_records.sql +32 -0
  276. package/dist/src/storage/sqlite/upgrades/248_next_turn_suggestions.sql +20 -0
  277. package/dist/src/storage/sqlite/upgrades/249_task_allocations.sql +17 -0
  278. package/dist/src/storage/sqlite/upgrades/250_research_checkpoints.sql +15 -0
  279. package/dist/src/storage/sqlite/upgrades/251_personal_result_reads.sql +40 -0
  280. package/dist/src/storage/sqlite/upgrades/252_task_work_revisions.sql +15 -0
  281. package/dist/src/storage/sqlite/upgrades/253_discussion_processing_recovery.sql +20 -0
  282. package/dist/src/storage/sqlite/upgrades/254_discussion_annotations.sql +17 -0
  283. package/dist/src/storage/sqlite/upgrades/255_discussion_chapter_progress.sql +10 -0
  284. package/dist/src/storage/sqlite/upgrades/256_task_main_update_retries.sql +21 -0
  285. package/dist/src/storage/sqlite/upgrades/257_session_composer_history.sql +11 -0
  286. package/dist/src/storage/sqlite/upgrades/258_task_phase_changes.sql +20 -0
  287. package/dist/src/storage/sqlite/upgrades/259_personal_default_style.sql +10 -0
  288. package/dist/src/storage/sqlite/upgrades/260_browser_setup.sql +9 -0
  289. package/dist/src/storage/sqlite/windows-database-owners.js +33 -28
  290. package/dist/src/tasks/capabilities/relations.d.ts +2 -2
  291. package/dist/src/tui/clipboard-image.js +1 -1
  292. package/dist/src/tui/tui.js +1 -1
  293. package/dist/src/utils/index.js +1 -1
  294. package/dist/src/utils/logger/index.js +1 -1
  295. package/dist/src/utils/logger.js +1 -1
  296. package/dist/src/work-discovery/probe.js +1 -1
  297. package/package.json +3 -3
  298. package/skills/tools/configure-xopc/SKILL.md +47 -0
  299. package/skills/tools/configure-xopc/references/browser/acceptance.md +31 -0
  300. package/skills/tools/configure-xopc/references/browser/chrome-extension.md +19 -0
  301. package/skills/tools/configure-xopc/references/browser/overview.md +22 -0
  302. package/skills/tools/configure-xopc/references/browser/permissions.md +25 -0
  303. package/skills/tools/configure-xopc/references/browser/troubleshooting.md +24 -0
  304. package/skills/tools/configure-xopc/references/phone/acceptance.md +25 -0
  305. package/skills/tools/configure-xopc/references/phone/aliyun.md +29 -0
  306. package/skills/tools/configure-xopc/references/phone/dependencies.md +18 -0
  307. package/skills/tools/configure-xopc/references/phone/local.md +19 -0
  308. package/skills/tools/configure-xopc/references/phone/models.md +18 -0
  309. package/skills/tools/configure-xopc/references/phone/overview.md +30 -0
  310. package/skills/tools/configure-xopc/references/phone/troubleshooting.md +24 -0
  311. package/skills/tools/configure-xopc/references/scene-index.md +12 -0
  312. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-mf0jgEPE.js +0 -1
  313. package/dist/gateway/static/root/assets/agents-CKhZ4UYQ.js +0 -77
  314. package/dist/gateway/static/root/assets/apps-page-BZ_MaQJf.js +0 -1
  315. package/dist/gateway/static/root/assets/automations-workspace-CHUDHNVL.js +0 -8
  316. package/dist/gateway/static/root/assets/browser-automations-page-DStDm9y1.js +0 -3
  317. package/dist/gateway/static/root/assets/browser-settings-page-6I4oetKt.js +0 -3
  318. package/dist/gateway/static/root/assets/capabilities-page-C-EecWbS.js +0 -2
  319. package/dist/gateway/static/root/assets/capabilities-settings-panel-BQoCPk3x.js +0 -8
  320. package/dist/gateway/static/root/assets/channels-BKf_-Mdt.js +0 -1
  321. package/dist/gateway/static/root/assets/connectors-page-CUBg8spT.js +0 -1
  322. package/dist/gateway/static/root/assets/device-pairing-wizard-PmP_vGem.js +0 -1
  323. package/dist/gateway/static/root/assets/gateway-realtime-DMAzNlm-.js +0 -1
  324. package/dist/gateway/static/root/assets/gateway-realtime-store-CoIgC1Al.js +0 -1
  325. package/dist/gateway/static/root/assets/gateway-settings-DnrQ28E2.js +0 -1
  326. package/dist/gateway/static/root/assets/highlight-code-AMjU04kR.js +0 -1
  327. package/dist/gateway/static/root/assets/home-page-pTwVME-g.js +0 -2
  328. package/dist/gateway/static/root/assets/index-BLL0wKRZ.css +0 -1
  329. package/dist/gateway/static/root/assets/index-ygkHNYyo.js +0 -710
  330. package/dist/gateway/static/root/assets/local-app-workbench-page-Cwl6EvuX.js +0 -1
  331. package/dist/gateway/static/root/assets/logs-page-CS3hcTOq.js +0 -2
  332. package/dist/gateway/static/root/assets/management-settings-DC-Y_-GP.js +0 -1
  333. package/dist/gateway/static/root/assets/mermaid-MCJ5UELQ-vckgHpON.js +0 -1
  334. package/dist/gateway/static/root/assets/note-detail-panel-C7u4dxEk.js +0 -5
  335. package/dist/gateway/static/root/assets/note-image-lightbox-jvqYtySx.js +0 -1
  336. package/dist/gateway/static/root/assets/notes-page-Bs7F5Hpf.js +0 -8
  337. package/dist/gateway/static/root/assets/page-context-capture-button-DO_yhXS1.js +0 -1
  338. package/dist/gateway/static/root/assets/personal-page-BexL2-PQ.js +0 -1
  339. package/dist/gateway/static/root/assets/personal-settings-panel-BKA4fbYH.js +0 -1
  340. package/dist/gateway/static/root/assets/phone-dependencies-card-ChFtdFhA.js +0 -1
  341. package/dist/gateway/static/root/assets/phone-model-picker-CZoIAQ1j.js +0 -1
  342. package/dist/gateway/static/root/assets/phone-settings-page-DRyK0nHH.js +0 -1
  343. package/dist/gateway/static/root/assets/plugin-details-dialog-B-N61jJH.js +0 -1
  344. package/dist/gateway/static/root/assets/project-detail-page-DtKmFBml.js +0 -7
  345. package/dist/gateway/static/root/assets/projects-page-CFZIz9mc.js +0 -1
  346. package/dist/gateway/static/root/assets/remote-access-hub-CWEc7W0m.js +0 -1
  347. package/dist/gateway/static/root/assets/runtime-tools-settings-panel-q_oswAdV.js +0 -1
  348. package/dist/gateway/static/root/assets/sessions-page-BuPqNxpd.js +0 -1
  349. package/dist/gateway/static/root/assets/settings-advanced-gate-QTVDCGJG.js +0 -1
  350. package/dist/gateway/static/root/assets/settings-page-header-CYpuTXUW.js +0 -1
  351. package/dist/gateway/static/root/assets/setup-status-panel-ZmlE8jIE.js +0 -1
  352. package/dist/gateway/static/root/assets/shares-settings-CtNxWqW-.js +0 -1
  353. package/dist/gateway/static/root/assets/skill-reload-api-Egaf8PqZ.js +0 -1
  354. package/dist/gateway/static/root/assets/skills-page-C6FKxf4J.js +0 -2
  355. package/dist/gateway/static/root/assets/system-settings-panel-Baxkhov7.js +0 -1
  356. package/dist/gateway/static/root/assets/task-detail-page-C77-rpkt.js +0 -2
  357. package/dist/gateway/static/root/assets/usage-page-BFeIbpbi.js +0 -1
  358. package/dist/gateway/static/root/assets/user-model-page-u8zY5jea.js +0 -2
  359. package/dist/gateway/static/root/assets/xopc-cloud-account-card-CJ_akAvc.js +0 -1
@@ -17,11 +17,14 @@ var ExtensionDriver = class {
17
17
  async createSession(_sessionId) {
18
18
  await this.connect();
19
19
  }
20
- async closeSession(sessionId) {
21
- await this.send({
20
+ async closeSession(sessionId, target) {
21
+ const result = await this.send({
22
22
  action: "close",
23
- sessionId
23
+ sessionId,
24
+ ...target ? { target } : {}
24
25
  });
26
+ if ("error" in result) throw new Error(result.error.message);
27
+ if (!result.receipt.verified) throw new Error("Browser control release was not verified");
25
28
  }
26
29
  navigate(sessionId, input, signal) {
27
30
  return this.send({
@@ -9,10 +9,10 @@ import { BROWSER_EXTENSION_ID, BROWSER_NATIVE_HOST_NAME } from "../extension-ide
9
9
  import "../native-messaging-host.js";
10
10
  import { resolvePackageRoot } from "../../infra/update-check.js";
11
11
  import { dirname, join } from "node:path";
12
- import { chmodSync, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
12
+ import { accessSync, chmodSync, constants, existsSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, statSync, writeFileSync } from "node:fs";
13
13
  import { fileURLToPath } from "node:url";
14
- import { execFileSync, spawn } from "node:child_process";
15
14
  import { createHash } from "node:crypto";
15
+ import { execFileSync, spawn } from "node:child_process";
16
16
  import { readFile, readdir, rm } from "node:fs/promises";
17
17
  import AdmZip from "adm-zip";
18
18
  //#region src/browser/providers/browser-ext-install.ts
@@ -384,6 +384,7 @@ function browserNativeHostDoctor(platform = process.platform, home = process.env
384
384
  const manifestPaths = (platform === "win32" ? windowsRegisteredNativeManifests() : directories.map((directory) => join(directory, `${BROWSER_NATIVE_HOST_NAME}.json`))).filter((manifestPath) => {
385
385
  try {
386
386
  const manifest = JSON.parse(readFileSync(manifestPath, "utf8"));
387
+ if (typeof manifest.path === "string" && platform !== "win32") accessSync(manifest.path, constants.X_OK);
387
388
  return manifest.name === "ai.xopc.browser" && typeof manifest.path === "string" && existsSync(manifest.path) && Array.isArray(manifest.allowed_origins) && manifest.allowed_origins.includes(`chrome-extension://gopbfhaojnnhiheiikblejnpgmfmkmgd/`);
388
389
  } catch {
389
390
  return false;
@@ -5,6 +5,8 @@ export interface BrowserRuntimeOptions {
5
5
  getConfig: () => Config['browser'];
6
6
  createDriver: () => Promise<BrowserDriver>;
7
7
  allowedUploadRoots?: string[];
8
+ canRestoreSetupSession?: (taskKey: string, sessionId: string) => boolean;
9
+ isTrustedSetupUrl?: (taskKey: string, url: string) => boolean;
8
10
  emit?: (type: string, payload: unknown) => void;
9
11
  resolveTarget?: (taskKey: string) => BrowserTarget | undefined;
10
12
  }
@@ -14,8 +16,9 @@ export declare class BrowserRuntime {
14
16
  private sessionsByTask;
15
17
  constructor(options: BrowserRuntimeOptions);
16
18
  execute(taskKey: string, input: BrowserActionInput, signal?: AbortSignal): Promise<BrowserControlResult>;
19
+ hasSessions(): boolean;
17
20
  shutdown(): Promise<void>;
18
- closeTaskSession(taskKey: string): Promise<void>;
21
+ closeTaskSession(taskKey: string, target?: BrowserTarget): Promise<void>;
19
22
  private dispatch;
20
23
  private executeSequence;
21
24
  private actionDenied;
@@ -11,7 +11,7 @@ var BrowserRuntime = class {
11
11
  }
12
12
  async execute(taskKey, input, signal) {
13
13
  this.evictExpiredSessions();
14
- if (!this.options.getConfig().enabled) return failure("DRIVER_UNAVAILABLE", "Browser Control is disabled.");
14
+ if (!this.options.getConfig().enabled && input.action !== "close") return failure("DRIVER_UNAVAILABLE", "Browser Control is disabled.");
15
15
  if (signal?.aborted) return failure("ABORTED", "Operation was aborted.");
16
16
  const resolvedTarget = input.target ? void 0 : this.options.resolveTarget?.(taskKey);
17
17
  const effectiveInput = input.target || !resolvedTarget ? input : {
@@ -55,21 +55,24 @@ var BrowserRuntime = class {
55
55
  }
56
56
  return result;
57
57
  }
58
+ hasSessions() {
59
+ return this.sessionsByTask.size > 0;
60
+ }
58
61
  async shutdown() {
59
62
  await this.driver?.disconnect();
60
63
  this.driver = null;
61
64
  this.sessionsByTask.clear();
62
65
  }
63
- async closeTaskSession(taskKey) {
66
+ async closeTaskSession(taskKey, target) {
64
67
  const session = this.sessionsByTask.get(taskKey);
65
68
  if (!session) return;
66
- await this.driver?.closeSession(session.id);
69
+ await this.driver?.closeSession(session.id, target);
67
70
  this.sessionsByTask.delete(taskKey);
68
71
  this.options.emit?.("browser.session.closed", { sessionId: session.id });
69
72
  }
70
73
  async dispatch(driver, session, input, signal) {
71
74
  if (input.action === "close") {
72
- await this.closeTaskSession(session.taskKey);
75
+ await this.closeTaskSession(session.taskKey, input.target);
73
76
  return {
74
77
  ok: true,
75
78
  receipt: {
@@ -91,22 +94,22 @@ var BrowserRuntime = class {
91
94
  }
92
95
  };
93
96
  if (input.action === "navigate") {
94
- const blocked = this.validateUrl(input.url);
97
+ const blocked = this.validateUrl(input.url, session.taskKey);
95
98
  if (blocked) return failure("BLOCKED_URL", blocked);
96
99
  if (this.crossDomainPolicy(session.observation?.url, input.url) === "deny") return failure("BLOCKED_URL", "Cross-domain navigation is denied by policy.");
97
100
  const result = await driver.navigate(session.id, input, signal);
98
- return this.validateRedirect(input.url, result);
101
+ return this.validateRedirect(input.url, result, session.taskKey);
99
102
  }
100
103
  if (input.action === "tabs") {
101
104
  if (input.url) {
102
- const blocked = this.validateUrl(input.url);
105
+ const blocked = this.validateUrl(input.url, session.taskKey);
103
106
  if (blocked) return failure("BLOCKED_URL", blocked);
104
107
  if (this.crossDomainPolicy(session.observation?.url, input.url) === "deny") return failure("BLOCKED_URL", "Cross-domain navigation is denied by policy.");
105
108
  }
106
109
  const result = await driver.tabs(session.id, input, signal);
107
110
  if (!input.url || !result.ok) return result;
108
111
  const finalUrl = result.receipt.tabs?.find((tab) => tab.active)?.url;
109
- const blocked = finalUrl ? this.blockedRedirect(finalUrl) : "The created tab did not report its final URL.";
112
+ const blocked = finalUrl ? this.blockedRedirect(finalUrl, session.taskKey) : "The created tab did not report its final URL.";
110
113
  return blocked ? failure("BLOCKED_URL", blocked) : result;
111
114
  }
112
115
  if (input.action === "sequence") return this.executeSequence(driver, session, input, signal);
@@ -119,12 +122,12 @@ var BrowserRuntime = class {
119
122
  }
120
123
  if (this.actionDenied(input, risk)) return failure("INVALID_INPUT", `Browser action is denied by policy (${risk}).`);
121
124
  if (input.action === "click" && target?.href) {
122
- const blocked = this.validateUrl(target.href);
125
+ const blocked = this.validateUrl(target.href, session.taskKey);
123
126
  if (blocked) return failure("BLOCKED_URL", blocked);
124
127
  if (this.crossDomainPolicy(session.observation?.url, target.href) === "deny") return failure("BLOCKED_URL", "Cross-domain navigation is denied by policy.");
125
128
  }
126
129
  const result = await driver.perform(session.id, input, signal);
127
- return withRisk(this.validateRedirect(session.observation?.url ?? "", result), risk);
130
+ return withRisk(this.validateRedirect(session.observation?.url ?? "", result, session.taskKey), risk);
128
131
  }
129
132
  async executeSequence(driver, session, input, signal) {
130
133
  const config = this.options.getConfig();
@@ -171,27 +174,27 @@ var BrowserRuntime = class {
171
174
  "sensitive"
172
175
  ].includes(risk);
173
176
  }
174
- validateUrl(url) {
177
+ validateUrl(url, taskKey) {
175
178
  if (containsApiKeyPattern(url)) return "URL contains a credential-like value.";
176
179
  try {
177
180
  const host = new URL(url).hostname.toLowerCase();
178
- assertBrowserUrlAllowed(url, { privateHostAllowed: this.options.getConfig().security.allowedPrivateHosts.some((candidate) => candidate.toLowerCase() === host) });
181
+ assertBrowserUrlAllowed(url, { privateHostAllowed: this.options.getConfig().security.allowedPrivateHosts.some((candidate) => candidate.toLowerCase() === host) || this.options.isTrustedSetupUrl?.(taskKey, url) === true });
179
182
  return null;
180
183
  } catch (error) {
181
184
  return error instanceof Error ? error.message : String(error);
182
185
  }
183
186
  }
184
- validateRedirect(requestedUrl, result) {
187
+ validateRedirect(requestedUrl, result, taskKey) {
185
188
  if (!result.ok || !result.receipt.observation) return result;
186
189
  const finalUrl = result.receipt.observation.url;
187
190
  if (finalUrl === requestedUrl) return result;
188
- const blocked = this.blockedRedirect(finalUrl);
191
+ const blocked = this.blockedRedirect(finalUrl, taskKey);
189
192
  return blocked ? failure("BLOCKED_URL", blocked, result.receipt.observation) : result;
190
193
  }
191
- blockedRedirect(finalUrl) {
194
+ blockedRedirect(finalUrl, taskKey) {
192
195
  try {
193
196
  const host = new URL(finalUrl).hostname.toLowerCase();
194
- return checkPostRedirectUrl(finalUrl, { privateHostAllowed: this.options.getConfig().security.allowedPrivateHosts.some((candidate) => candidate.toLowerCase() === host) });
197
+ return checkPostRedirectUrl(finalUrl, { privateHostAllowed: this.options.getConfig().security.allowedPrivateHosts.some((candidate) => candidate.toLowerCase() === host) || this.options.isTrustedSetupUrl?.(taskKey, finalUrl) === true });
195
198
  } catch {
196
199
  return "Browser returned an invalid final URL.";
197
200
  }
@@ -222,7 +225,16 @@ var BrowserRuntime = class {
222
225
  async resolveSession(taskKey, requestedId) {
223
226
  const existing = this.sessionsByTask.get(taskKey);
224
227
  if (existing) return !requestedId || requestedId === existing.id ? existing : null;
225
- if (requestedId) return null;
228
+ if (requestedId) {
229
+ if (!this.options.canRestoreSetupSession?.(taskKey, requestedId)) return null;
230
+ const restored = {
231
+ id: requestedId,
232
+ taskKey,
233
+ lastUsedAt: Date.now()
234
+ };
235
+ this.sessionsByTask.set(taskKey, restored);
236
+ return restored;
237
+ }
226
238
  const session = {
227
239
  id: randomUUID(),
228
240
  taskKey,
@@ -0,0 +1,5 @@
1
+ import type { BrowserSetup } from './types.js';
2
+ export declare function readBrowserSetup(id: string): BrowserSetup | undefined;
3
+ export declare function findBrowserSetup(conversationId: string, agentId: string): BrowserSetup | undefined;
4
+ export declare function createBrowserSetup(conversationId: string, agentId: string, configRevision: string): BrowserSetup;
5
+ export declare function saveBrowserSetup(next: BrowserSetup, expectedRevision: number): BrowserSetup;
@@ -0,0 +1,42 @@
1
+ import { getSqliteDatabase, init_transaction, runSqliteWriteTransaction } from "../../storage/sqlite/transaction.js";
2
+ import { randomUUID } from "node:crypto";
3
+ //#region src/browser/setup/repository.ts
4
+ init_transaction();
5
+ function readBrowserSetup(id) {
6
+ const row = getSqliteDatabase().prepare("SELECT payload_json FROM browser_setup_runs WHERE id = ?").get(id);
7
+ return row ? JSON.parse(row.payload_json) : void 0;
8
+ }
9
+ function findBrowserSetup(conversationId, agentId) {
10
+ const row = getSqliteDatabase().prepare("SELECT payload_json FROM browser_setup_runs WHERE conversation_id = ? AND agent_id = ? ORDER BY updated_at DESC, rowid DESC LIMIT 1").get(conversationId, agentId);
11
+ return row ? JSON.parse(row.payload_json) : void 0;
12
+ }
13
+ function createBrowserSetup(conversationId, agentId, configRevision) {
14
+ return runSqliteWriteTransaction((db) => {
15
+ const existing = findBrowserSetup(conversationId, agentId);
16
+ if (existing && existing.state !== "cancelled" && existing.state !== "completed") return existing;
17
+ const now = Date.now();
18
+ const setup = {
19
+ id: randomUUID(),
20
+ conversationId,
21
+ agentId,
22
+ configRevision,
23
+ state: "plan_ready",
24
+ revision: 1,
25
+ createdAt: now,
26
+ updatedAt: now
27
+ };
28
+ db.prepare("INSERT INTO browser_setup_runs (id, conversation_id, agent_id, revision, updated_at, payload_json) VALUES (?, ?, ?, ?, ?, ?)").run(setup.id, conversationId, agentId, setup.revision, now, JSON.stringify(setup));
29
+ return setup;
30
+ });
31
+ }
32
+ function saveBrowserSetup(next, expectedRevision) {
33
+ next = {
34
+ ...next,
35
+ revision: expectedRevision + 1,
36
+ updatedAt: Date.now()
37
+ };
38
+ if (getSqliteDatabase().prepare("UPDATE browser_setup_runs SET revision = ?, updated_at = ?, payload_json = ? WHERE id = ? AND revision = ?").run(next.revision, next.updatedAt, JSON.stringify(next), next.id, expectedRevision).changes !== 1) throw new Error("SETUP_CONFLICT: Configuration progress changed. Read it again.");
39
+ return next;
40
+ }
41
+ //#endregion
42
+ export { createBrowserSetup, findBrowserSetup, readBrowserSetup, saveBrowserSetup };
@@ -0,0 +1,152 @@
1
+ import { type BrowserActionInput, type BrowserControlResult } from '@xopcai/browser-control-contract';
2
+ import type { BrowserSetupView } from '@xopcai/gateway-contract';
3
+ import type { Config } from '../../config/schema.js';
4
+ import type { EndpointToolRuntime } from '../../endpoint-tools/index.js';
5
+ import type { BrowserSetup } from './types.js';
6
+ export declare const browserConfigRevision: (config: Config) => string;
7
+ export interface BrowserSetupDeps {
8
+ getConfig: () => Config;
9
+ saveConfig: (next: Config, expected: Config) => Promise<{
10
+ saved: boolean;
11
+ error?: string;
12
+ }>;
13
+ endpoints: EndpointToolRuntime;
14
+ canUseBrowser: (agentId: string) => boolean;
15
+ canSwitchDriver?: (conversationId: string) => boolean;
16
+ policyRevision?: (agentId: string) => string;
17
+ prepare: () => Promise<unknown>;
18
+ release: (endpointId: string, sessionId: string) => Promise<BrowserControlResult>;
19
+ open: (action: 'chrome' | 'folder' | 'both') => Promise<unknown>;
20
+ doctor: () => Promise<{
21
+ installed: boolean;
22
+ needsRefresh?: boolean;
23
+ extensionDir?: string;
24
+ nativeHost?: {
25
+ installed: boolean;
26
+ };
27
+ }>;
28
+ }
29
+ /** Mutations require a local-owner grant created by the product UI, never model-supplied identity. */
30
+ export declare class BrowserSetupService {
31
+ private readonly deps;
32
+ private readonly preparing;
33
+ constructor(deps: BrowserSetupDeps);
34
+ private policyRevision;
35
+ endpoints(): {
36
+ endpointId: string;
37
+ principalId: string;
38
+ displayName: string;
39
+ appVersion: string;
40
+ }[];
41
+ owned(id: string, conversationId: string, agentId: string): BrowserSetup;
42
+ view(setup: BrowserSetup): BrowserSetupView & Record<string, unknown>;
43
+ inspect(conversationId: string, agentId: string): Promise<{
44
+ sceneId: string;
45
+ supportedConnection: string;
46
+ configRevision: string;
47
+ installation: {
48
+ installed: boolean;
49
+ needsRefresh: boolean;
50
+ nativeHostInstalled: boolean;
51
+ };
52
+ toolPermission: string;
53
+ enabled: boolean;
54
+ driverKind: "extension" | "playwright" | "cdp" | "remote";
55
+ sharedScope: string;
56
+ endpoints: {
57
+ endpointId: string;
58
+ principalId: string;
59
+ displayName: string;
60
+ appVersion: string;
61
+ }[];
62
+ setup: BrowserSetupView & Record<string, unknown>;
63
+ guidanceRefs: {
64
+ section?: string;
65
+ sceneId: string;
66
+ path: string;
67
+ resourceVersion: string;
68
+ }[];
69
+ ownerActionRequired: boolean;
70
+ supportedActions: string[];
71
+ }>;
72
+ command(command: string, args: Record<string, unknown>, context: {
73
+ conversationId: string;
74
+ agentId: string;
75
+ }, dryRun?: boolean): Promise<(BrowserSetupView & Record<string, unknown>) | {
76
+ sceneId: string;
77
+ supportedConnection: string;
78
+ configRevision: string;
79
+ installation: {
80
+ installed: boolean;
81
+ needsRefresh: boolean;
82
+ nativeHostInstalled: boolean;
83
+ };
84
+ toolPermission: string;
85
+ enabled: boolean;
86
+ driverKind: "extension" | "playwright" | "cdp" | "remote";
87
+ sharedScope: string;
88
+ endpoints: {
89
+ endpointId: string;
90
+ principalId: string;
91
+ displayName: string;
92
+ appVersion: string;
93
+ }[];
94
+ setup: BrowserSetupView & Record<string, unknown>;
95
+ guidanceRefs: {
96
+ section?: string;
97
+ sceneId: string;
98
+ path: string;
99
+ resourceVersion: string;
100
+ }[];
101
+ ownerActionRequired: boolean;
102
+ supportedActions: string[];
103
+ } | {
104
+ message: string;
105
+ sceneId: string;
106
+ supportedConnection: string;
107
+ configRevision: string;
108
+ installation: {
109
+ installed: boolean;
110
+ needsRefresh: boolean;
111
+ nativeHostInstalled: boolean;
112
+ };
113
+ toolPermission: string;
114
+ enabled: boolean;
115
+ driverKind: "extension" | "playwright" | "cdp" | "remote";
116
+ sharedScope: string;
117
+ endpoints: {
118
+ endpointId: string;
119
+ principalId: string;
120
+ displayName: string;
121
+ appVersion: string;
122
+ }[];
123
+ setup: BrowserSetupView & Record<string, unknown>;
124
+ guidanceRefs: {
125
+ section?: string;
126
+ sceneId: string;
127
+ path: string;
128
+ resourceVersion: string;
129
+ }[];
130
+ ownerActionRequired: boolean;
131
+ supportedActions: string[];
132
+ dryRun: boolean;
133
+ }>;
134
+ approve(setup: BrowserSetup, principalId: string, revision: number): BrowserSetup;
135
+ private revision;
136
+ prepare(setup: BrowserSetup): Promise<BrowserSetup>;
137
+ recheck(setup: BrowserSetup): Promise<BrowserSetup>;
138
+ open(setup: BrowserSetup, action: 'chrome' | 'folder' | 'both'): Promise<unknown>;
139
+ begin(setup: BrowserSetup, endpointId: string, origin: string, revision: number): BrowserSetup;
140
+ cancel(setup: BrowserSetup): BrowserSetup;
141
+ release(setup: BrowserSetup): Promise<BrowserSetup>;
142
+ canRestoreSession(taskKey: string, sessionId: string): boolean;
143
+ allowsVerificationUrl(taskKey: string, url: string): boolean;
144
+ /** Called only by the real Agent browser tool, before its normal runtime/policy path. */
145
+ beforeAction(conversationId: string, agentId: string, input: BrowserActionInput): {
146
+ setupId: string;
147
+ attemptId: string;
148
+ taskKey: string;
149
+ input: BrowserActionInput;
150
+ };
151
+ afterAction(setupId: string, attemptId: string, input: BrowserActionInput, result: BrowserControlResult): BrowserSetup;
152
+ }