@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
@@ -285,5 +285,8 @@
285
285
  "clarifyApprove": { "message": "Approve once" },
286
286
  "clarifyCompose": { "message": "Select and add details" },
287
287
  "clarifyClear": { "message": "Clear selection" },
288
- "clarifyRecommended": { "message": "Recommended" }
288
+ "clarifyRecommended": { "message": "Recommended" },
289
+ "browserControlStopped": { "message": "You stopped Chrome control. Page operations stay paused until you choose to resume. Return to the original chat to retry the test." },
290
+ "browserControlResume": { "message": "Resume browser control" },
291
+ "errorLocalHostBlockedHelp": { "message": "The local connection program could not start. Return to the original chat to check and repair installation, then retry. If your system shows a security prompt, review it yourself; do not disable system protection." }
289
292
  }
@@ -285,5 +285,8 @@
285
285
  "clarifyApprove": { "message": "批准本次操作" },
286
286
  "clarifyCompose": { "message": "选择并补充" },
287
287
  "clarifyClear": { "message": "清除选择" },
288
- "clarifyRecommended": { "message": "推荐" }
288
+ "clarifyRecommended": { "message": "推荐" },
289
+ "browserControlStopped": { "message": "你已停止 Chrome 控制。网页操作将保持暂停,直到你主动恢复。恢复后请返回原对话重新验收。" },
290
+ "browserControlResume": { "message": "恢复网页控制" },
291
+ "errorLocalHostBlockedHelp": { "message": "本机连接程序启动被阻止。请返回原对话检查并修复安装,再重试连接。若系统显示安全提示,请自行审阅决定,不要关闭系统保护。" }
289
292
  }
@@ -5805,12 +5805,14 @@ ${credentialId}
5805
5805
  ${timestamp}
5806
5806
  ${nonce}
5807
5807
  ${requestId}
5808
- ${nextRefreshToken}`;
5808
+ ${nextRefreshToken}
5809
+ request-proof:1`;
5809
5810
  const signature = await sign(pair, proof);
5810
5811
  const body = {
5811
5812
  refreshToken,
5812
5813
  nextRefreshToken,
5813
5814
  requestId,
5815
+ requestProofVersion: 1,
5814
5816
  timestamp,
5815
5817
  nonce,
5816
5818
  signature
@@ -5833,7 +5835,7 @@ ${nextRefreshToken}`;
5833
5835
  }
5834
5836
  if (typeof response.signedPayload !== "string" || typeof response.signature !== "string" || !await verifyGateway(gateway.gatewayPublicKey, response.signedPayload, response.signature)) throw new Error(t("errorGatewayVerification"));
5835
5837
  const responseProof = decodeJson(response.signedPayload);
5836
- if (responseProof.purpose !== "device-refresh-v3" || responseProof.gatewayId !== gateway.gatewayId || responseProof.requestId !== requestId || responseProof.nonce !== nonce || !(responseProof.expiresAt > Date.now()) || responseProof.expiresAt > Date.now() + 6e4) throw new Error("Gateway refresh response does not match this request");
5838
+ if (responseProof.purpose !== "device-refresh-v3" || responseProof.gatewayId !== gateway.gatewayId || responseProof.requestId !== requestId || responseProof.requestProofVersion !== 1 || responseProof.nonce !== nonce || !(responseProof.expiresAt > Date.now()) || responseProof.expiresAt > Date.now() + 6e4) throw new Error("Gateway refresh response does not match this request");
5837
5839
  const payload = responseProof.tokens;
5838
5840
  if (!payload?.accessToken || !payload.accessTokenExpiresAt || payload.refreshToken !== nextRefreshToken) {
5839
5841
  throw new Error(t("errorInvalidCredentials"));
@@ -6077,14 +6079,37 @@ async function getAccessProfile(options) {
6077
6079
  refreshTask = void 0;
6078
6080
  }
6079
6081
  }
6082
+ async function createBrowserRequestProof(profile, outgoing, credential, method) {
6083
+ const bearer = credential ?? outgoing.headers.get("Authorization").slice("Bearer ".length);
6084
+ const digest = async (bytes) => Array.from(new Uint8Array(await crypto.subtle.digest("SHA-256", bytes))).map((byte) => byte.toString(16).padStart(2, "0")).join("");
6085
+ const timestamp = Date.now();
6086
+ const nonce = randomNonce();
6087
+ const bodyDigest = await digest(await outgoing.clone().arrayBuffer());
6088
+ const url = new URL(outgoing.url);
6089
+ const signedHeaders = ["content-type", "idempotency-key", "x-xopc-expected-session-key", "x-endpoint-id", "x-endpoint-upload-token"];
6090
+ const proof = [
6091
+ "xopc-request-v1",
6092
+ profile.gatewayId,
6093
+ await digest(new TextEncoder().encode(bearer)),
6094
+ method ?? outgoing.method,
6095
+ url.pathname + url.search,
6096
+ bodyDigest,
6097
+ ...signedHeaders.map((name) => outgoing.headers.get(name) ?? ""),
6098
+ String(timestamp),
6099
+ nonce
6100
+ ].join("\n");
6101
+ return `${timestamp}.${nonce}.${bodyDigest}.${await sign(await getOrCreateKeyPair(), proof)}`;
6102
+ }
6080
6103
  async function gatewayFetch(path, init = {}, expectedIdentity) {
6081
6104
  let profile = await getAccessProfile();
6082
6105
  const identity = expectedIdentity ?? profile;
6083
6106
  assertProfileIdentity(profile, identity);
6084
- const request = () => {
6107
+ const request = async () => {
6085
6108
  const headers = new Headers(init.headers);
6086
6109
  headers.set("Authorization", `Bearer ${profile.accessToken}`);
6087
- return fetch(`${profile.gatewayUrl}${path}`, { ...init, headers });
6110
+ const outgoing = new Request(`${profile.gatewayUrl}${path}`, { ...init, headers });
6111
+ outgoing.headers.set("X-Xopc-Proof", await createBrowserRequestProof(profile, outgoing));
6112
+ return fetch(outgoing.url, { ...init, headers: outgoing.headers, body: outgoing.body ? await outgoing.arrayBuffer() : void 0 });
6088
6113
  };
6089
6114
  let response = await request();
6090
6115
  assertProfileIdentity(await readProfile(), identity);
@@ -6140,10 +6165,7 @@ async function forgetProfile() {
6140
6165
  async function revokeAndForgetProfile() {
6141
6166
  try {
6142
6167
  const profile = await getAccessProfile();
6143
- await fetch(`${profile.gatewayUrl}/api/devices/me`, {
6144
- method: "DELETE",
6145
- headers: { Authorization: `Bearer ${profile.accessToken}` }
6146
- });
6168
+ await gatewayFetch("/api/devices/me", { method: "DELETE" }, profile);
6147
6169
  } finally {
6148
6170
  await forgetProfile();
6149
6171
  try {
@@ -6192,6 +6214,7 @@ const realtimeSubscriptionSchema = object({
6192
6214
  discriminatedUnion("kind", [
6193
6215
  envelope("realtime.hello", object({
6194
6216
  ticket: string().min(32).max(512),
6217
+ connectionProof: string().min(1).max(256).optional(),
6195
6218
  clientId: string().min(1).max(160),
6196
6219
  clientKind: realtimeClientKindSchema,
6197
6220
  subscriptions: array(realtimeSubscriptionSchema).max(100).default([]),
@@ -6423,6 +6446,7 @@ class RealtimeClient {
6423
6446
  }));
6424
6447
  this.send(this.clientMessage("realtime.hello", {
6425
6448
  ticket,
6449
+ ...issuedTicket.connectionProof ? { connectionProof: issuedTicket.connectionProof } : {},
6426
6450
  clientId: this.options.clientId,
6427
6451
  clientKind: this.options.clientKind,
6428
6452
  subscriptions,
@@ -6742,4 +6766,4 @@ ${marker.timeOrigin}`),
6742
6766
  });
6743
6767
  }
6744
6768
 
6745
- export { registerBrowserEndpoint as A, revokeAndForgetProfile as B, runWithTabSiteAccess as C, saveExtensionLocalePreference as D, ENDPOINT_PROTOCOL_VERSION as E, setAutoConnectEnabled as F, strictObject as G, string as H, t as I, unknown as J, MAX_BROWSER_CONTEXTS_PER_TURN as M, PENDING_CONTEXT_KEY as P, REALTIME_PROTOCOL_VERSION as R, TAB_BINDING_PREFIX as T, _enum as _, RealtimeClient as a, activeTabId as b, array as c, boolean as d, browserPageContextsInputSchema as e, cancelPendingBrowserPairing as f, canonicalJson as g, captureContextMenuSelection as h, captureTabWithPermission as i, createBrowserEndpointHello as j, currentTabDescriptor as k, discoverLocalGateway as l, discriminatedUnion as m, endpointToolContentSchema as n, extensionLocale as o, gatewayFetch as p, getAccessProfile as q, literal as r, loadExtensionLocalePreference as s, number as t, object as u, openDatabase as v, pairGateway as w, readPendingBrowserPairing as x, readProfile as y, record as z };
6769
+ export { record as A, registerBrowserEndpoint as B, revokeAndForgetProfile as C, runWithTabSiteAccess as D, ENDPOINT_PROTOCOL_VERSION as E, saveExtensionLocalePreference as F, setAutoConnectEnabled as G, strictObject as H, string as I, t as J, unknown as K, MAX_BROWSER_CONTEXTS_PER_TURN as M, PENDING_CONTEXT_KEY as P, REALTIME_PROTOCOL_VERSION as R, TAB_BINDING_PREFIX as T, _enum as _, RealtimeClient as a, activeTabId as b, array as c, boolean as d, browserPageContextsInputSchema as e, cancelPendingBrowserPairing as f, canonicalJson as g, captureContextMenuSelection as h, captureTabWithPermission as i, createBrowserEndpointHello as j, createBrowserRequestProof as k, currentTabDescriptor as l, discoverLocalGateway as m, discriminatedUnion as n, endpointToolContentSchema as o, extensionLocale as p, gatewayFetch as q, getAccessProfile as r, literal as s, loadExtensionLocalePreference as t, number as u, object as v, openDatabase as w, pairGateway as x, readPendingBrowserPairing as y, readProfile as z };
@@ -1,4 +1,4 @@
1
- import { y as readProfile, p as gatewayFetch, n as endpointToolContentSchema, E as ENDPOINT_PROTOCOL_VERSION, g as canonicalJson, T as TAB_BINDING_PREFIX, h as captureContextMenuSelection, P as PENDING_CONTEXT_KEY, I as t, A as registerBrowserEndpoint, q as getAccessProfile, a as RealtimeClient, j as createBrowserEndpointHello, R as REALTIME_PROTOCOL_VERSION } from './assets/page-context-MuzjMBlJ.js';
1
+ import { z as readProfile, q as gatewayFetch, o as endpointToolContentSchema, E as ENDPOINT_PROTOCOL_VERSION, g as canonicalJson, T as TAB_BINDING_PREFIX, h as captureContextMenuSelection, P as PENDING_CONTEXT_KEY, J as t, B as registerBrowserEndpoint, r as getAccessProfile, a as RealtimeClient, j as createBrowserEndpointHello, R as REALTIME_PROTOCOL_VERSION, k as createBrowserRequestProof } from './assets/page-context-CVvmTWZb.js';
2
2
 
3
3
  const LOG_COLORS = {
4
4
  debug: "color: #888",
@@ -1214,11 +1214,25 @@ class EndpointToolHostController {
1214
1214
 
1215
1215
  const log$1 = createLogger("CDP");
1216
1216
  const attached = /* @__PURE__ */ new Set();
1217
+ const CONTROL_PAUSED_KEY = "xopc.browser.control-paused";
1218
+ let controlPaused = false;
1219
+ let pausePersistence = Promise.resolve();
1220
+ async function isControlPaused() {
1221
+ await pausePersistence;
1222
+ const stored = await chrome.storage.local.get(CONTROL_PAUSED_KEY);
1223
+ return controlPaused || stored[CONTROL_PAUSED_KEY] === true;
1224
+ }
1225
+ async function resumeControl() {
1226
+ await pausePersistence;
1227
+ await chrome.storage.local.remove(CONTROL_PAUSED_KEY);
1228
+ controlPaused = false;
1229
+ }
1217
1230
  function isDebuggableUrl(url) {
1218
1231
  if (!url) return true;
1219
1232
  return url.startsWith("http://") || url.startsWith("https://") || url === "about:blank" || url.startsWith("data:");
1220
1233
  }
1221
1234
  async function ensureAttached(tabId) {
1235
+ if (await isControlPaused()) throw new Error("BROWSER_CONTROL_REVOKED: You stopped Chrome control. Resume browser control in the xopc extension before retrying.");
1222
1236
  try {
1223
1237
  const tab = await chrome.tabs.get(tabId);
1224
1238
  if (!isDebuggableUrl(tab.url)) {
@@ -1246,10 +1260,7 @@ async function ensureAttached(tabId) {
1246
1260
  let lastError = "";
1247
1261
  for (let attempt = 1; attempt <= MAX_RETRIES; attempt++) {
1248
1262
  try {
1249
- try {
1250
- await chrome.debugger.detach({ tabId });
1251
- } catch {
1252
- }
1263
+ if (await isControlPaused()) throw new Error("BROWSER_CONTROL_REVOKED: Resume browser control in the xopc extension.");
1253
1264
  await chrome.debugger.attach({ tabId }, "1.3");
1254
1265
  attached.add(tabId);
1255
1266
  await chrome.debugger.sendCommand({ tabId }, "Runtime.enable", {});
@@ -1257,6 +1268,7 @@ async function ensureAttached(tabId) {
1257
1268
  log$1.debug("Attached to tab", { tabId, attempt });
1258
1269
  return;
1259
1270
  } catch (e) {
1271
+ if (await isControlPaused()) throw new Error("BROWSER_CONTROL_REVOKED: Resume browser control in the xopc extension.");
1260
1272
  lastError = e instanceof Error ? e.message : String(e);
1261
1273
  if (attempt < MAX_RETRIES) {
1262
1274
  await new Promise((r) => setTimeout(r, RETRY_DELAY));
@@ -1291,8 +1303,14 @@ async function captureScreenshot(tabId, options) {
1291
1303
  async function dispatchInput(tabId, type, params) {
1292
1304
  await sendCommand(tabId, `Input.${type}`, params);
1293
1305
  }
1294
- chrome.debugger.onDetach.addListener((source) => {
1295
- if (source.tabId) attached.delete(source.tabId);
1306
+ chrome.debugger.onDetach.addListener((source, reason) => {
1307
+ if (source.tabId !== void 0) attached.delete(source.tabId);
1308
+ if (reason === "canceled_by_user") {
1309
+ controlPaused = true;
1310
+ pausePersistence = chrome.storage.local.set({ [CONTROL_PAUSED_KEY]: true }).catch((error) => {
1311
+ log$1.warn("Could not persist Chrome control stop", { error: String(error) });
1312
+ });
1313
+ }
1296
1314
  });
1297
1315
 
1298
1316
  const observations = /* @__PURE__ */ new Map();
@@ -1336,7 +1354,7 @@ async function resolveAttachedTarget(input) {
1336
1354
  if (origin !== binding.urlOrigin) {
1337
1355
  return fail("STALE_OBSERVATION", "The attached tab navigated to another site. Bind it again.");
1338
1356
  }
1339
- if (await markerDigest(tabId) !== binding.documentId) {
1357
+ if (input.action !== "close" && await markerDigest(tabId) !== binding.documentId) {
1340
1358
  return fail("STALE_OBSERVATION", "The attached tab document changed. Bind it again.");
1341
1359
  }
1342
1360
  return { binding, tabId, stateKey: `attached:${binding.id}` };
@@ -1369,6 +1387,7 @@ async function executeBrowserCommand(command, signal) {
1369
1387
  }
1370
1388
  }
1371
1389
  async function execute(input, timeoutMs, visualFallback, startedAt, signal) {
1390
+ if (input.action !== "close" && await isControlPaused()) return fail("DRIVER_UNAVAILABLE", "BROWSER_CONTROL_REVOKED: You stopped Chrome control. Resume browser control in the xopc extension before retrying.");
1372
1391
  const sessionId = input.sessionId;
1373
1392
  if (!sessionId) return fail("INVALID_INPUT", "Extension actions require a session id.");
1374
1393
  const attached = await resolveAttachedTarget(input);
@@ -1767,7 +1786,11 @@ async function connect(generation) {
1767
1786
  });
1768
1787
  const body = await response.json();
1769
1788
  if (!response.ok || !body.payload?.ticket || !body.payload.realtime) throw new Error(`Realtime ticket failed (${response.status})`);
1770
- return { ticket: body.payload.ticket, realtime: body.payload.realtime };
1789
+ return {
1790
+ ticket: body.payload.ticket,
1791
+ realtime: body.payload.realtime,
1792
+ connectionProof: await createBrowserRequestProof(profile, new Request(`${profile.gatewayUrl}/api/realtime/v1/ws`), body.payload.ticket, "CONNECT")
1793
+ };
1771
1794
  },
1772
1795
  createWebSocket: (url) => new WebSocket(url),
1773
1796
  onStateChange: (state, error) => {
@@ -1834,9 +1857,15 @@ chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
1834
1857
  }
1835
1858
  void recordingCommand(message.operation ?? "status", message.tabId).then((value) => sendResponse({ ok: true, value })).catch((error) => sendResponse({ ok: false, error: error instanceof Error ? error.message : String(error) }));
1836
1859
  } else if (message.type === "browser/get-status") {
1837
- sendResponse({ connected: Boolean(endpointClaim), transport: "gateway-realtime", error: lastConnectionError });
1860
+ void isControlPaused().then((controlPaused) => sendResponse({ connected: Boolean(endpointClaim), transport: "gateway-realtime", error: lastConnectionError, controlPaused }));
1838
1861
  } else if (message.type === "browser/get-endpoint-claim") {
1839
1862
  sendResponse({ claim: endpointClaim, error: lastConnectionError });
1863
+ } else if (message.type === "browser/resume-control") {
1864
+ if (sender.url?.split("?")[0] !== chrome.runtime.getURL("dist/sidepanel.html")) {
1865
+ sendResponse({ ok: false, error: "Use the extension control to resume." });
1866
+ return true;
1867
+ }
1868
+ void resumeControl().then(() => sendResponse({ ok: true })).catch(() => sendResponse({ ok: false, error: "Control could not be resumed." }));
1840
1869
  } else if (message.type === "browser/reconnect") {
1841
1870
  disconnect();
1842
1871
  connectWithLogging();
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>xopc</title>
7
7
  <script type="module" crossorigin src="./sidepanel.js"></script>
8
- <link rel="modulepreload" crossorigin href="./assets/page-context-MuzjMBlJ.js">
8
+ <link rel="modulepreload" crossorigin href="./assets/page-context-CVvmTWZb.js">
9
9
  <link rel="stylesheet" crossorigin href="./assets/sidepanel-CQeQB5vW.css">
10
10
  </head>
11
11
  <body>
@@ -1,4 +1,4 @@
1
- import { G as strictObject, t as number, d as boolean, H as string, c as array, _ as _enum, r as literal, u as object, m as discriminatedUnion, e as browserPageContextsInputSchema, z as record$1, J as unknown, I as t, p as gatewayFetch, M as MAX_BROWSER_CONTEXTS_PER_TURN, o as extensionLocale, v as openDatabase, a as RealtimeClient, R as REALTIME_PROTOCOL_VERSION, b as activeTabId, k as currentTabDescriptor, T as TAB_BINDING_PREFIX, q as getAccessProfile, y as readProfile, C as runWithTabSiteAccess, P as PENDING_CONTEXT_KEY, i as captureTabWithPermission, w as pairGateway, F as setAutoConnectEnabled, x as readPendingBrowserPairing, l as discoverLocalGateway, D as saveExtensionLocalePreference, B as revokeAndForgetProfile, f as cancelPendingBrowserPairing, s as loadExtensionLocalePreference } from './assets/page-context-MuzjMBlJ.js';
1
+ import { H as strictObject, u as number, d as boolean, I as string, c as array, _ as _enum, s as literal, v as object, n as discriminatedUnion, e as browserPageContextsInputSchema, A as record$1, K as unknown, J as t, q as gatewayFetch, M as MAX_BROWSER_CONTEXTS_PER_TURN, p as extensionLocale, w as openDatabase, a as RealtimeClient, R as REALTIME_PROTOCOL_VERSION, b as activeTabId, l as currentTabDescriptor, T as TAB_BINDING_PREFIX, r as getAccessProfile, z as readProfile, D as runWithTabSiteAccess, P as PENDING_CONTEXT_KEY, i as captureTabWithPermission, x as pairGateway, G as setAutoConnectEnabled, y as readPendingBrowserPairing, m as discoverLocalGateway, F as saveExtensionLocalePreference, C as revokeAndForgetProfile, f as cancelPendingBrowserPairing, t as loadExtensionLocalePreference } from './assets/page-context-CVvmTWZb.js';
2
2
 
3
3
  const AppContextResourceSchema = strictObject({
4
4
  kind: _enum(["note", "task", "project", "local_app"]),
@@ -46271,9 +46271,20 @@ function pairingErrorMessage(cause) {
46271
46271
  if (message.startsWith("PAIRING_ROUTE_PERMISSION_REQUIRED:")) {
46272
46272
  return t("errorNextRoutePermission");
46273
46273
  }
46274
+ if (/Failed to start native messaging host|Access to the specified native messaging host is forbidden/i.test(message)) return t("errorLocalHostBlockedHelp");
46274
46275
  return message;
46275
46276
  }
46276
46277
  function SidePanelApp({ initialLocale, initialTheme }) {
46278
+ const [controlPaused, setControlPaused] = reactExports.useState(false);
46279
+ reactExports.useEffect(() => {
46280
+ const refresh = () => {
46281
+ void chrome.runtime.sendMessage({ type: "browser/get-status" }).then((status) => setControlPaused(status?.controlPaused === true)).catch(() => {
46282
+ });
46283
+ };
46284
+ refresh();
46285
+ const timer = setInterval(refresh, 1500);
46286
+ return () => clearInterval(timer);
46287
+ }, []);
46277
46288
  const [profile, setProfile] = reactExports.useState();
46278
46289
  const [invitation, setInvitation] = reactExports.useState("");
46279
46290
  const [confirmationCode, setConfirmationCode] = reactExports.useState("");
@@ -46396,7 +46407,7 @@ function SidePanelApp({ initialLocale, initialTheme }) {
46396
46407
  setLocalInvitation(local.invitation);
46397
46408
  await connect(local.invitation);
46398
46409
  } catch (cause) {
46399
- setError(cause instanceof Error ? cause.message : String(cause));
46410
+ setError(pairingErrorMessage(cause));
46400
46411
  setState("unpaired");
46401
46412
  }
46402
46413
  }
@@ -46410,7 +46421,7 @@ function SidePanelApp({ initialLocale, initialTheme }) {
46410
46421
  setConfirmationCode("");
46411
46422
  setState("unpaired");
46412
46423
  } catch (cause) {
46413
- setError(cause instanceof Error ? cause.message : String(cause));
46424
+ setError(pairingErrorMessage(cause));
46414
46425
  setState("unpaired");
46415
46426
  }
46416
46427
  }
@@ -46488,6 +46499,14 @@ function SidePanelApp({ initialLocale, initialTheme }) {
46488
46499
  ] }) : null
46489
46500
  ] })
46490
46501
  ] }),
46502
+ controlPaused && /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "card", role: "alert", children: [
46503
+ /* @__PURE__ */ jsxRuntimeExports.jsx("p", { children: t("browserControlStopped") }),
46504
+ /* @__PURE__ */ jsxRuntimeExports.jsx("button", { className: "primary", onClick: () => {
46505
+ void chrome.runtime.sendMessage({ type: "browser/resume-control" }).then((result) => {
46506
+ if (result?.ok) setControlPaused(false);
46507
+ });
46508
+ }, children: t("browserControlResume") })
46509
+ ] }),
46491
46510
  state !== "online" ? /* @__PURE__ */ jsxRuntimeExports.jsxs("section", { className: "center", children: [
46492
46511
  state === "loading" ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "muted", children: t("loading") }) : null,
46493
46512
  state === "unpaired" || state === "pairing" ? /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "card", children: [
@@ -3,7 +3,7 @@
3
3
  "minimum_chrome_version": "120",
4
4
  "default_locale": "en",
5
5
  "name": "__MSG_appName__",
6
- "version": "0.0.414",
6
+ "version": "0.0.416",
7
7
  "description": "__MSG_appDescription__",
8
8
  "key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnpr4vpLC/nmvy+wiOWk3SWlp2nEZkFijfk8ivGw7StNZgCK90nOMvwhdEtlkk3GOWDvdVnq8HxCsM3UNQ8FnGUyerpH1FJXqXuradxeHf8ZxFjiQU/mIWfnKbUuONWQORon3/pigyoXoK/VUXgg0Wbm/rbVwsS0bv+25R6m+mZgBspOLeKuoH7ivhL+48WV6POtMBsFPZweY26477EM7ukh+56Ff5ENevB8ymxBBn7qK5ZoeZd2a23U8ioX5TsHfe6fnrjitPWjIxD8G0NoKQxcaa/Mo+xs+T6UiLKxP0wjz5bm7jB5H+CXtkRJqzBWUB0h+RSLJckzZfA8BAJrRwIDAQAB",
9
9
  "permissions": [
@@ -2,7 +2,7 @@
2
2
  "id": "telegram",
3
3
  "name": "Telegram Channel",
4
4
  "description": "Bundled Telegram Bot channel (private workspace sources; ships inside @xopcai/xopc dist/)",
5
- "version": "0.0.414",
5
+ "version": "0.0.416",
6
6
  "kind": "channel",
7
7
  "main": "src/index.js",
8
8
  "channels": [