@xopcai/xopc 0.0.367 → 0.0.369

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 (263) hide show
  1. package/dist/browser-ext/_locales/en/messages.json +30 -1
  2. package/dist/browser-ext/_locales/zh_CN/messages.json +30 -1
  3. package/dist/browser-ext/dist/assets/{auth-beGtbLPS.js → page-context-BeworyNB.js} +1331 -1355
  4. package/dist/browser-ext/dist/assets/{sidepanel-BT0ojEzG.css → sidepanel-Ccl0eSa1.css} +43 -0
  5. package/dist/browser-ext/dist/background.js +680 -182
  6. package/dist/browser-ext/dist/sidepanel.html +2 -2
  7. package/dist/browser-ext/dist/sidepanel.js +372 -193
  8. package/dist/browser-ext/manifest.json +2 -8
  9. package/dist/extensions/telegram/xopc.extension.json +1 -1
  10. package/dist/gateway/static/root/assets/{activity-store-Cuf3JFFJ.js → activity-store-BQ3PMp2q.js} +1 -1
  11. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-DyATPNTe.js → agent-avatar-dicebear-Stj17S9u.js} +1 -1
  12. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CCRfvuov.js +1 -0
  13. package/dist/gateway/static/root/assets/agent-plugin-dialog-CRlzd8El.js +1 -0
  14. package/dist/gateway/static/root/assets/agents-_ug2LCQb.js +66 -0
  15. package/dist/gateway/static/root/assets/{agents-admin-api-D842OcNo.js → agents-admin-api-HBZvVyzF.js} +1 -1
  16. package/dist/gateway/static/root/assets/app-management-settings-panel-pJFe6M6c.js +1 -0
  17. package/dist/gateway/static/root/assets/{appearance-settings-DQr0o6Lm.js → appearance-settings-BrxSpBWa.js} +1 -1
  18. package/dist/gateway/static/root/assets/{apps-page-CltMV4Xp.js → apps-page-DegSl5Lh.js} +1 -1
  19. package/dist/gateway/static/root/assets/{archive-plugin-DT8Nio-r.js → archive-plugin-BO3I9zRP.js} +1 -1
  20. package/dist/gateway/static/root/assets/{automations-page-BIfWS_3Y.js → automations-page-BZQ_VHjp.js} +1 -1
  21. package/dist/gateway/static/root/assets/automations-workspace-BQywN6nG.js +6 -0
  22. package/dist/gateway/static/root/assets/{binary-plugins-7qs3qcW9.js → binary-plugins-gFD7vH9R.js} +1 -1
  23. package/dist/gateway/static/root/assets/{block-editor-BFPUlxJ6.js → block-editor-3XjFv3kK.js} +28 -28
  24. package/dist/gateway/static/root/assets/browser-automation-inputs-DxRoKFun.js +1 -0
  25. package/dist/gateway/static/root/assets/browser-automations-page-yiEuG1v7.js +3 -0
  26. package/dist/gateway/static/root/assets/browser-settings-page-ch2_bQF0.js +3 -0
  27. package/dist/gateway/static/root/assets/{capabilities-K0Zb_lH0.js → capabilities-B48r0DDa.js} +1 -1
  28. package/dist/gateway/static/root/assets/{capabilities-BzWFO_x_.js → capabilities-DO-vfNKI.js} +1 -1
  29. package/dist/gateway/static/root/assets/capabilities-page-BEnFt_dj.js +2 -0
  30. package/dist/gateway/static/root/assets/capabilities-settings-panel-NckMsJ5N.js +8 -0
  31. package/dist/gateway/static/root/assets/{capability-header-actions-AMn_vTNv.js → capability-header-actions-CY8KCO9j.js} +1 -1
  32. package/dist/gateway/static/root/assets/channels-CHOS2CGa.js +1 -0
  33. package/dist/gateway/static/root/assets/{chat-terminal-dock-C7nAROhF.js → chat-terminal-dock-Bwknnb4c.js} +2 -2
  34. package/dist/gateway/static/root/assets/computer-settings-page-B2xeFCSt.js +1 -0
  35. package/dist/gateway/static/root/assets/{connector-service-page-CTx1B8wx.js → connector-service-page-C83DnAqK.js} +1 -1
  36. package/dist/gateway/static/root/assets/connectors-page-D6wTmWA6.js +2 -0
  37. package/dist/gateway/static/root/assets/{date-picker-Cx_xIKvN.js → date-picker-Bq9GR-DU.js} +1 -1
  38. package/dist/gateway/static/root/assets/{dependency-picker-DYm96PDu.js → dependency-picker-BTERkA9X.js} +1 -1
  39. package/dist/gateway/static/root/assets/{desktop-pet-D90OzgeR.js → desktop-pet-BwsbQw8V.js} +1 -1
  40. package/dist/gateway/static/root/assets/{desktop-pet-settings-CmdCecjm.js → desktop-pet-settings-sL9i44pP.js} +1 -1
  41. package/dist/gateway/static/root/assets/device-pairing-wizard-DI2bqaKO.js +1 -0
  42. package/dist/gateway/static/root/assets/{directory-picker-path-field-DZpaoeNa.js → directory-picker-path-field-BFlDmsS5.js} +1 -1
  43. package/dist/gateway/static/root/assets/{extension-debug-page-Bv6QE8kC.js → extension-debug-page-7Z1Tp7-w.js} +1 -1
  44. package/dist/gateway/static/root/assets/{extension-page-CEsq71Cm.js → extension-page-uGqvb8QX.js} +1 -1
  45. package/dist/gateway/static/root/assets/{extension-provider-CX-sK0Tw.js → extension-provider-xlSyz4Z6.js} +1 -1
  46. package/dist/gateway/static/root/assets/{extension-settings-page-UyOHF39P.js → extension-settings-page-CKHgrjOs.js} +1 -1
  47. package/dist/gateway/static/root/assets/{fallback-models-CKv_Wqg8.js → fallback-models-BwQg0G1D.js} +1 -1
  48. package/dist/gateway/static/root/assets/{gateway-config-swr-Cjnkle5J.js → gateway-config-swr-7RKqgU_U.js} +1 -1
  49. package/dist/gateway/static/root/assets/{gateway-realtime-DCCLdyQD.js → gateway-realtime-DDWymi-o.js} +1 -1
  50. package/dist/gateway/static/root/assets/gateway-realtime-store-BheKaO6d.js +1 -0
  51. package/dist/gateway/static/root/assets/gateway-settings-BAQnSEMJ.js +1 -0
  52. package/dist/gateway/static/root/assets/{gateway-startup-retry-CXKmdVzN.js → gateway-startup-retry-jiV5sbEX.js} +1 -1
  53. package/dist/gateway/static/root/assets/home-page-BZDjvwet.js +2 -0
  54. package/dist/gateway/static/root/assets/{image-generation-api-NLHzm4Nc.js → image-generation-api-DO4mXb6I.js} +1 -1
  55. package/dist/gateway/static/root/assets/{imports-page-C7qvlBTQ.js → imports-page-re1_Nh64.js} +1 -1
  56. package/dist/gateway/static/root/assets/index-BB1z8QxA.js +106 -0
  57. package/dist/gateway/static/root/assets/index-D9R6tU7r.css +1 -0
  58. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-pkgFWJb-.js → keyboard-shortcuts-settings-B_xja9LN.js} +1 -1
  59. package/dist/gateway/static/root/assets/{local-app-workbench-page-dMDhZXAi.js → local-app-workbench-page-CErdCrPX.js} +1 -1
  60. package/dist/gateway/static/root/assets/{local-apps-page-TpUAfOn2.js → local-apps-page-BPL2RXdK.js} +1 -1
  61. package/dist/gateway/static/root/assets/{local-session-drafts-Cvv7I0fw.js → local-session-drafts-DRPsDCj1.js} +1 -1
  62. package/dist/gateway/static/root/assets/{locale-store-C8TMD2gn.js → locale-store-COVscAqC.js} +1 -1
  63. package/dist/gateway/static/root/assets/logs-page-DL-BM0xq.js +2 -0
  64. package/dist/gateway/static/root/assets/management-settings-BOVRHhXk.js +1 -0
  65. package/dist/gateway/static/root/assets/{markdown-view-Dse7rkio.js → markdown-view-B_qnAcW2.js} +1 -1
  66. package/dist/gateway/static/root/assets/{media-plugins-BZrnzaBM.js → media-plugins-C0Pc-wSY.js} +1 -1
  67. package/dist/gateway/static/root/assets/messages-Bb2GK-Nj.js +3 -0
  68. package/dist/gateway/static/root/assets/models-hub-cache-DyPPksMP.js +1 -0
  69. package/dist/gateway/static/root/assets/note-detail-panel-DJJK2yL4.js +5 -0
  70. package/dist/gateway/static/root/assets/{notes-api-DKiVeQKG.js → notes-api-sBgBcyLW.js} +1 -1
  71. package/dist/gateway/static/root/assets/notes-page-oCxO7ZTv.js +8 -0
  72. package/dist/gateway/static/root/assets/{page-context-capture-button-Cxzd4QPB.js → page-context-capture-button-tf77xIz3.js} +1 -1
  73. package/dist/gateway/static/root/assets/personal-page-DOk9gUK5.js +1 -0
  74. package/dist/gateway/static/root/assets/{product-open-page-D4hoEWiu.js → product-open-page-Dc3Y-Y7J.js} +1 -1
  75. package/dist/gateway/static/root/assets/{product-preview-content-aR38El2E.js → product-preview-content-MG_hmVA3.js} +1 -1
  76. package/dist/gateway/static/root/assets/{project-detail-page-D20QH4YB.js → project-detail-page-3uAzbW4T.js} +1 -1
  77. package/dist/gateway/static/root/assets/{projects-page-Bf3BIcT6.js → projects-page-MllfNLGA.js} +1 -1
  78. package/dist/gateway/static/root/assets/{registry-api-AdnxowbH.js → registry-api-Bh9UBb-f.js} +1 -1
  79. package/dist/gateway/static/root/assets/remote-access-hub-Bs-C70el.js +1 -0
  80. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CBN3raz1.js → runtime-tools-settings-panel-DpJ5jNzR.js} +1 -1
  81. package/dist/gateway/static/root/assets/scenes-page-Dpxamkw6.js +2 -0
  82. package/dist/gateway/static/root/assets/{schema-form-CxrMGsT9.js → schema-form-DUeyQ1zh.js} +1 -1
  83. package/dist/gateway/static/root/assets/{send-session-input-CgOzhDZ0.js → send-session-input-Dgn4BRk_.js} +1 -1
  84. package/dist/gateway/static/root/assets/{session-api-_HIN8or3.js → session-api-yjpEz4pP.js} +1 -1
  85. package/dist/gateway/static/root/assets/{session-manager-CzCto5zT.js → session-manager-LInoZ_Yi.js} +1 -1
  86. package/dist/gateway/static/root/assets/sessions-page-BCVlNHtq.js +1 -0
  87. package/dist/gateway/static/root/assets/settings-advanced-gate-Bz-ue9fZ.js +1 -0
  88. package/dist/gateway/static/root/assets/{settings-page-D8Q3H3-o.js → settings-page-DouHuBXt.js} +1 -1
  89. package/dist/gateway/static/root/assets/{setup-status-panel-DvLMMiuS.js → setup-status-panel-B5BoZ-1y.js} +1 -1
  90. package/dist/gateway/static/root/assets/{share-link-dialog-Dg5os066.js → share-link-dialog-DJTabLAM.js} +1 -1
  91. package/dist/gateway/static/root/assets/{share-preview-page-DMvohAyr.js → share-preview-page-jw7h4t_B.js} +1 -1
  92. package/dist/gateway/static/root/assets/{shares-api-C96IO4qJ.js → shares-api-c0dfWz6h.js} +1 -1
  93. package/dist/gateway/static/root/assets/shares-settings-BlnlzGjH.js +1 -0
  94. package/dist/gateway/static/root/assets/{skill-api-C10ML0CH.js → skill-api-CfyX_0zN.js} +1 -1
  95. package/dist/gateway/static/root/assets/{skill-reload-api-DNbJzSfB.js → skill-reload-api-Ge5XymHa.js} +1 -1
  96. package/dist/gateway/static/root/assets/{skills-page-DObMKvA6.js → skills-page-DjdTeYzm.js} +1 -1
  97. package/dist/gateway/static/root/assets/system-settings-panel-DWf256TE.js +1 -0
  98. package/dist/gateway/static/root/assets/{task-detail-page-BR2L1L8l.js → task-detail-page-DE6N1ZQe.js} +2 -2
  99. package/dist/gateway/static/root/assets/{task-expandable-content-DL2Q2gre.js → task-expandable-content-hYcgCEE3.js} +1 -1
  100. package/dist/gateway/static/root/assets/{theme-store-DQ6KJa4l.js → theme-store-BOfCKgl6.js} +1 -1
  101. package/dist/gateway/static/root/assets/{tracing-settings-page-Ed8_GYUT.js → tracing-settings-page-DDWFXcST.js} +1 -1
  102. package/dist/gateway/static/root/assets/{tunnel-api-D3X8jDwo.js → tunnel-api-BBm9esrY.js} +1 -1
  103. package/dist/gateway/static/root/assets/{usage-page-BqzRyyb9.js → usage-page-C93x89uW.js} +1 -1
  104. package/dist/gateway/static/root/assets/{use-autosave-CRFefpzO.js → use-autosave-CSckcjFx.js} +1 -1
  105. package/dist/gateway/static/root/assets/{use-composer-attachments-OLrvSjn5.js → use-composer-attachments-C7Gaaai1.js} +1 -1
  106. package/dist/gateway/static/root/assets/{use-file-preview-expanded-CJvzfQvw.js → use-file-preview-expanded-Db2VYg1b.js} +2 -2
  107. package/dist/gateway/static/root/assets/user-model-page-B74LkVbp.js +2 -0
  108. package/dist/gateway/static/root/assets/{voice-api-key-field-R9zNWYR_.js → voice-api-key-field-GEw5x2fU.js} +1 -1
  109. package/dist/gateway/static/root/assets/{voice-config-api-DLudE9Rc.js → voice-config-api-3yyVwXln.js} +1 -1
  110. package/dist/gateway/static/root/assets/{work-discovery-overlay-DVmQrolV.js → work-discovery-overlay-Bs2MKiTv.js} +1 -1
  111. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-DEkmuD3T.js → workflow-run-setup-panel-BR_U_snV.js} +2 -2
  112. package/dist/gateway/static/root/assets/{workflows-page-pqCB3sh4.js → workflows-page-Crk4SxtC.js} +3 -3
  113. package/dist/gateway/static/root/assets/{workspace-api-CdVUhyPo.js → workspace-api-Si2o3inw.js} +2 -2
  114. package/dist/gateway/static/root/index.html +27 -28
  115. package/dist/package.js +1 -1
  116. package/dist/packages/browser-control-contract/src/automation.js +213 -0
  117. package/dist/packages/browser-control-contract/src/index.js +43 -12
  118. package/dist/packages/gateway-contract/src/gateway-scopes.js +3 -1
  119. package/dist/packages/gateway-contract/src/notifications.js +1 -0
  120. package/dist/packages/realtime-protocol/src/voice-catalog.js +7 -1
  121. package/dist/packages/realtime-protocol/src/voice.js +9 -3
  122. package/dist/src/agent/coding/repository-instructions.js +8 -1
  123. package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
  124. package/dist/src/agent/tool-manuals/browser.js +3 -3
  125. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +1 -1
  126. package/dist/src/agent/tools/browser/tool/schemas.d.ts +0 -13
  127. package/dist/src/agent/tools/browser/tool/schemas.js +0 -4
  128. package/dist/src/agent/tools/browser-automation-tool.d.ts +74 -1
  129. package/dist/src/agent/tools/browser-automation-tool.js +52 -6
  130. package/dist/src/agent-config/schema.d.ts +1 -1
  131. package/dist/src/agent-config/schema.js +1 -1
  132. package/dist/src/automations/capabilities/write.d.ts +2 -0
  133. package/dist/src/automations/domain/types.d.ts +11 -0
  134. package/dist/src/automations/domain/validation.d.ts +4 -0
  135. package/dist/src/automations/domain/validation.js +1 -0
  136. package/dist/src/automations/draft/automation-draft-validator.d.ts +1 -0
  137. package/dist/src/automations/service/action-executor.js +11 -3
  138. package/dist/src/automations/service/automation-service.d.ts +1 -0
  139. package/dist/src/automations/service/automation-service.js +13 -1
  140. package/dist/src/bootstrap/application-state.js +3 -1
  141. package/dist/src/browser/automations/repository.d.ts +4 -0
  142. package/dist/src/browser/automations/repository.js +27 -6
  143. package/dist/src/browser/automations/runner.js +101 -9
  144. package/dist/src/browser/automations/runtime-service.js +4 -3
  145. package/dist/src/browser/automations/schema.d.ts +84 -1
  146. package/dist/src/browser/automations/schema.js +68 -2
  147. package/dist/src/browser/automations/service.d.ts +78 -1
  148. package/dist/src/browser/automations/service.js +36 -4
  149. package/dist/src/browser/automations/types.d.ts +19 -4
  150. package/dist/src/browser/drivers/extension-driver.d.ts +5 -5
  151. package/dist/src/browser/drivers/extension-driver.js +10 -10
  152. package/dist/src/browser/drivers/playwright-driver.js +46 -0
  153. package/dist/src/browser/index.d.ts +1 -2
  154. package/dist/src/browser/index.js +2 -3
  155. package/dist/src/browser/policy/browser-policy.d.ts +0 -1
  156. package/dist/src/browser/policy/browser-policy.js +1 -4
  157. package/dist/src/browser/providers/index.d.ts +1 -1
  158. package/dist/src/browser/providers/index.js +2 -2
  159. package/dist/src/browser/providers/realtime-extension.d.ts +1 -1
  160. package/dist/src/browser/providers/realtime-extension.js +5 -1
  161. package/dist/src/browser/recordings/service.d.ts +22 -0
  162. package/dist/src/browser/recordings/service.js +160 -0
  163. package/dist/src/browser/runtime/browser-runtime.d.ts +1 -1
  164. package/dist/src/browser/runtime/browser-runtime.js +19 -56
  165. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  166. package/dist/src/computer/runtime.js +2 -2
  167. package/dist/src/config/schema.d.ts +12 -12
  168. package/dist/src/config/schema.js +12 -12
  169. package/dist/src/endpoint-tools/policy.js +4 -3
  170. package/dist/src/gateway/hono/routes/browser-automations.js +23 -7
  171. package/dist/src/gateway/hono/routes/browser-recordings.d.ts +3 -0
  172. package/dist/src/gateway/hono/routes/browser-recordings.js +78 -0
  173. package/dist/src/gateway/hono/routes/browser.js +1 -34
  174. package/dist/src/gateway/hono/routes/device-push.js +1 -0
  175. package/dist/src/gateway/hono/routes/home.js +1 -1
  176. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  177. package/dist/src/gateway/hono/routes/personal-agent.js +35 -0
  178. package/dist/src/gateway/hono/routes/voice.js +5 -2
  179. package/dist/src/gateway/security/gateway-scopes.js +3 -1
  180. package/dist/src/gateway/service/agent-runner.js +1 -0
  181. package/dist/src/home-intelligence/generator.d.ts +2 -0
  182. package/dist/src/home-intelligence/generator.js +53 -4
  183. package/dist/src/home-intelligence/host.d.ts +2 -1
  184. package/dist/src/home-intelligence/host.js +23 -3
  185. package/dist/src/migrations/cloud-public-models.d.ts +7 -0
  186. package/dist/src/migrations/cloud-public-models.js +157 -0
  187. package/dist/src/notifications/clarification.d.ts +5 -0
  188. package/dist/src/notifications/clarification.js +66 -0
  189. package/dist/src/notifications/device-store.js +1 -0
  190. package/dist/src/notifications/harmony-push.d.ts +1 -0
  191. package/dist/src/notifications/harmony-push.js +3 -1
  192. package/dist/src/notifications/planner.d.ts +1 -0
  193. package/dist/src/notifications/service.d.ts +2 -2
  194. package/dist/src/notifications/service.js +20 -4
  195. package/dist/src/notifications/store.d.ts +2 -0
  196. package/dist/src/notifications/store.js +7 -1
  197. package/dist/src/notifications/types.d.ts +1 -0
  198. package/dist/src/notifications/types.js +1 -0
  199. package/dist/src/providers/model-catalog-persistence.js +2 -2
  200. package/dist/src/providers/presentation.js +1 -0
  201. package/dist/src/providers/xopc-cloud-model-source.js +1 -1
  202. package/dist/src/storage/sqlite/clarification-wait-repository.js +1 -0
  203. package/dist/src/storage/sqlite/migrations/238_browser_record_replay.sql +45 -0
  204. package/dist/src/storage/sqlite/migrations/239_clarification_notifications.sql +26 -0
  205. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  206. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  207. package/dist/src/storage/sqlite/schema.js +1 -1
  208. package/dist/src/tasks/home-query-service.d.ts +1 -1
  209. package/dist/src/tasks/home-query-service.js +6 -2
  210. package/dist/src/voice/dashscope/streaming-tts-stream.d.ts +2 -1
  211. package/dist/src/voice/dashscope/streaming-tts-stream.js +135 -79
  212. package/dist/src/voice/metadata/types.d.ts +1 -0
  213. package/dist/src/voice/platform-catalog.d.ts +4 -0
  214. package/dist/src/voice/platform-settings.js +1 -0
  215. package/dist/src/voice/realtime/agentEngine.js +78 -1
  216. package/dist/src/voice/realtime/speakable-segmenter.d.ts +2 -0
  217. package/dist/src/voice/realtime/speakable-segmenter.js +30 -0
  218. package/dist/src/voice/tts/providers/alibaba-speech.js +17 -1
  219. package/dist/src/voice/tts/providers/xopc-cloud-speech.js +3 -2
  220. package/dist/src/voice/tts/speak-core.d.ts +3 -0
  221. package/dist/src/voice/tts/speak-core.js +21 -1
  222. package/dist/src/voice/tts/speech-provider-types.d.ts +8 -0
  223. package/package.json +3 -3
  224. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-gT9_j4tr.js +0 -1
  225. package/dist/gateway/static/root/assets/agent-plugin-dialog-CLXCJ6JN.js +0 -1
  226. package/dist/gateway/static/root/assets/agents-BAUfOMsq.js +0 -66
  227. package/dist/gateway/static/root/assets/app-management-settings-panel-CoIFxQKH.js +0 -1
  228. package/dist/gateway/static/root/assets/automations-workspace-BCGPjsdU.js +0 -6
  229. package/dist/gateway/static/root/assets/browser-automation-inputs-BUAIKIX0.js +0 -1
  230. package/dist/gateway/static/root/assets/browser-automations-page-CSwu1U1F.js +0 -3
  231. package/dist/gateway/static/root/assets/browser-settings-page-C1ReMNqX.js +0 -3
  232. package/dist/gateway/static/root/assets/capabilities-page-BdTSqloI.js +0 -2
  233. package/dist/gateway/static/root/assets/capabilities-settings-panel-BUblBMZC.js +0 -8
  234. package/dist/gateway/static/root/assets/channels-CXCf5qO6.js +0 -1
  235. package/dist/gateway/static/root/assets/computer-settings-page-B5SuSZ3G.js +0 -1
  236. package/dist/gateway/static/root/assets/connectors-page-DfnK1crf.js +0 -2
  237. package/dist/gateway/static/root/assets/device-pairing-wizard-s2ogSa4l.js +0 -1
  238. package/dist/gateway/static/root/assets/gateway-realtime-store-C_Th8kGg.js +0 -1
  239. package/dist/gateway/static/root/assets/gateway-settings-CZ73IpbP.js +0 -1
  240. package/dist/gateway/static/root/assets/home-page-BQWq4kYi.js +0 -2
  241. package/dist/gateway/static/root/assets/index-BQgqzhQj.js +0 -106
  242. package/dist/gateway/static/root/assets/index-COB4QIJp.css +0 -1
  243. package/dist/gateway/static/root/assets/logs-page-B-Y9oZLh.js +0 -2
  244. package/dist/gateway/static/root/assets/management-settings-B2lzsw6X.js +0 -1
  245. package/dist/gateway/static/root/assets/messages-Dy26npMy.js +0 -3
  246. package/dist/gateway/static/root/assets/models-hub-cache-B1C86nRp.js +0 -1
  247. package/dist/gateway/static/root/assets/note-detail-panel-DL__qP6U.js +0 -5
  248. package/dist/gateway/static/root/assets/notes-page-DTBbg9Hs.js +0 -8
  249. package/dist/gateway/static/root/assets/oauth-api-BwpzpRwC.js +0 -1
  250. package/dist/gateway/static/root/assets/personal-page-CzaTnHeD.js +0 -1
  251. package/dist/gateway/static/root/assets/remote-access-hub-CKxqncqW.js +0 -1
  252. package/dist/gateway/static/root/assets/scenes-page-Cv_5ozfX.js +0 -2
  253. package/dist/gateway/static/root/assets/sessions-page-DZcu6NLJ.js +0 -1
  254. package/dist/gateway/static/root/assets/settings-advanced-gate-DazqeDQ7.js +0 -1
  255. package/dist/gateway/static/root/assets/shares-settings-CsDATuCw.js +0 -1
  256. package/dist/gateway/static/root/assets/system-settings-panel-Bn3khdzb.js +0 -1
  257. package/dist/gateway/static/root/assets/user-model-page-CG6wqIKP.js +0 -2
  258. package/dist/src/browser/policy/approval-store.d.ts +0 -17
  259. package/dist/src/browser/policy/approval-store.js +0 -62
  260. package/dist/src/browser/providers/extension-ws-acquire.d.ts +0 -19
  261. package/dist/src/browser/providers/extension-ws-acquire.js +0 -78
  262. package/dist/src/browser/providers/extension.d.ts +0 -61
  263. package/dist/src/browser/providers/extension.js +0 -378
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/session-manager-CzCto5zT.js","assets/rolldown-runtime-aKtaBQYM.js","assets/locale-store-C8TMD2gn.js","assets/vendor-react-BOUWij0V.js","assets/messages-Dy26npMy.js","assets/schemas-CObaziC7.js","assets/gateway-realtime-DCCLdyQD.js","assets/gateway-realtime-store-C_Th8kGg.js","assets/local-session-drafts-Cvv7I0fw.js","assets/session-api-_HIN8or3.js","assets/gateway-startup-retry-CXKmdVzN.js","assets/tool-activity-BtJkgjFf.js","assets/constants-Dy8Gw0sF.js","assets/registry-api-AdnxowbH.js","assets/preload-helper-zJ_50EbN.js","assets/attachment-utils-core-BIOUBrpT.js","assets/agents-admin-api-D842OcNo.js","assets/gateway-config-swr-Cjnkle5J.js","assets/vendor-swr-BIWyz7Rc.js"])))=>i.map(i=>d[i]);
2
- import{t as e}from"./preload-helper-zJ_50EbN.js";import{i as t,r as n}from"./locale-store-C8TMD2gn.js";import{i as r,n as i,r as a,t as o}from"./files-Bw4SBGdM.js";async function s(e){let t=await e.json().catch(()=>null);return Error(t?.error?.message??`HTTP ${e.status}`)}async function c(e,r){let i=await t(n(e),r);if(!i.ok)throw await s(i);return i.json()}async function l(t){if(!t?.projectId&&t?.conversationId){let{SessionManager:n}=await e(async()=>{let{SessionManager:e}=await import(`./session-manager-CzCto5zT.js`).then(e=>e.n);return{SessionManager:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]));await new n().materialize(t.conversationId,`session_resources`)}let n=t?.projectId?{kind:`project`,id:t.projectId}:t?.conversationId?{kind:`session`,id:t.conversationId}:t?.agentId?{kind:`agent`,id:t.agentId}:null;if(n){let e=await c(`/api/files/contexts/${n.kind}/${encodeURIComponent(n.id)}`);return r.parse(e.space)}let i=await c(`/api/files/default-space`);return r.parse(i.space)}function u(e){return{id:e.id,name:e.name,path:e.relativePath,isDirectory:e.kind===`directory`,mimeType:e.mimeType,revision:e.revision}}async function d(e,t){let n=await l(t),r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})});return i.parse(r.resource)}async function f(e,t){return d(e,t)}async function p(e=``,t){let n=await l(t),r=new URLSearchParams;return e&&r.set(`path`,e),{entries:a.parse(await c(`/api/files/spaces/${encodeURIComponent(n.id)}/children${r.size?`?${r}`:``}`)).items.map(u)}}async function m(e=``,t){return(await p(e,t)).entries}async function h(e){let t=await l(e);return u(o.parse(await c(`/api/files/spaces/${encodeURIComponent(t.id)}/root`)).resource)}async function g(e,t,n=50){let r=await l(t),i=new URLSearchParams({q:e.trim(),limit:String(n),spaceId:r.id});return a.parse(await c(`/api/files/search?${i}`)).items.map(u)}async function _(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`));if(!a.ok)throw await s(a);return{content:await a.text(),path:i.relativePath,mtimeMs:i.modifiedAt,revision:i.revision}}async function v(e,t){let n;try{n=await l(t)}catch{return null}try{let r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})}),a=i.parse(r.resource);return{absolutePath:r.absolutePath,fileId:a.id,inputPath:e,displayName:a.name,scope:r.absolutePath?`external`:`workspace`,locationKind:r.absolutePath?`host`:`workspace`,exists:!0,isDirectory:a.kind===`directory`,workspaceRelativePath:a.relativePath,capabilities:a.capabilities.filter(e=>e===`preview`||e===`edit`),mtimeMs:a.modifiedAt}}catch{try{return(await c(`/api/files/resolve-reference`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,conversationId:t?.conversationId})})).reference}catch{return null}}}async function y(e,t,n){return await c(`/api/files/references/${encodeURIComponent(e)}/action`,{method:`POST`,body:JSON.stringify({action:t,conversationId:n?.conversationId})})}async function b(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`),{headers:{Accept:`*/*`}});if(!a.ok)throw await s(a);return a.blob()}async function x(e,t,n){let r=await d(e,n),a=await c(`/api/files/${encodeURIComponent(r.id)}/content`,{method:`PUT`,body:JSON.stringify({content:t,revision:r.revision})}),o=i.parse(a.resource);return{path:o.relativePath,mtimeMs:o.modifiedAt,revision:o.revision}}async function S(e,r=``,i){let a=await l(i),c=new FormData;c.set(`directory`,r),c.set(`file`,e);let d=await t(n(`/api/files/spaces/${encodeURIComponent(a.id)}/upload`),{method:`POST`,body:c});if(!d.ok)throw await s(d);return u(o.parse(await d.json()).resource)}async function C(e){let r=await t(n(`/api/files/${encodeURIComponent(e)}`),{method:`DELETE`});if(!r.ok)throw await s(r)}function w(e,t){let n=new Blob([t],{type:`text/plain;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)}function T(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}export{b as a,_ as c,f as d,g as f,p as i,y as l,x as m,T as n,h as o,S as p,w as r,m as s,C as t,v as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/session-manager-LInoZ_Yi.js","assets/rolldown-runtime-aKtaBQYM.js","assets/locale-store-COVscAqC.js","assets/vendor-react-BOUWij0V.js","assets/messages-Bb2GK-Nj.js","assets/schemas-CObaziC7.js","assets/gateway-realtime-DDWymi-o.js","assets/gateway-realtime-store-BheKaO6d.js","assets/local-session-drafts-DRPsDCj1.js","assets/session-api-yjpEz4pP.js","assets/gateway-startup-retry-jiV5sbEX.js","assets/tool-activity-BtJkgjFf.js","assets/constants-Dy8Gw0sF.js","assets/registry-api-Bh9UBb-f.js","assets/preload-helper-zJ_50EbN.js","assets/attachment-utils-core-BIOUBrpT.js","assets/agents-admin-api-HBZvVyzF.js","assets/gateway-config-swr-7RKqgU_U.js","assets/vendor-swr-BIWyz7Rc.js"])))=>i.map(i=>d[i]);
2
+ import{t as e}from"./preload-helper-zJ_50EbN.js";import{i as t,r as n}from"./locale-store-COVscAqC.js";import{i as r,n as i,r as a,t as o}from"./files-Bw4SBGdM.js";async function s(e){let t=await e.json().catch(()=>null);return Error(t?.error?.message??`HTTP ${e.status}`)}async function c(e,r){let i=await t(n(e),r);if(!i.ok)throw await s(i);return i.json()}async function l(t){if(!t?.projectId&&t?.conversationId){let{SessionManager:n}=await e(async()=>{let{SessionManager:e}=await import(`./session-manager-LInoZ_Yi.js`).then(e=>e.n);return{SessionManager:e}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]));await new n().materialize(t.conversationId,`session_resources`)}let n=t?.projectId?{kind:`project`,id:t.projectId}:t?.conversationId?{kind:`session`,id:t.conversationId}:t?.agentId?{kind:`agent`,id:t.agentId}:null;if(n){let e=await c(`/api/files/contexts/${n.kind}/${encodeURIComponent(n.id)}`);return r.parse(e.space)}let i=await c(`/api/files/default-space`);return r.parse(i.space)}function u(e){return{id:e.id,name:e.name,path:e.relativePath,isDirectory:e.kind===`directory`,mimeType:e.mimeType,revision:e.revision}}async function d(e,t){let n=await l(t),r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})});return i.parse(r.resource)}async function f(e,t){return d(e,t)}async function p(e=``,t){let n=await l(t),r=new URLSearchParams;return e&&r.set(`path`,e),{entries:a.parse(await c(`/api/files/spaces/${encodeURIComponent(n.id)}/children${r.size?`?${r}`:``}`)).items.map(u)}}async function m(e=``,t){return(await p(e,t)).entries}async function h(e){let t=await l(e);return u(o.parse(await c(`/api/files/spaces/${encodeURIComponent(t.id)}/root`)).resource)}async function g(e,t,n=50){let r=await l(t),i=new URLSearchParams({q:e.trim(),limit:String(n),spaceId:r.id});return a.parse(await c(`/api/files/search?${i}`)).items.map(u)}async function _(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`));if(!a.ok)throw await s(a);return{content:await a.text(),path:i.relativePath,mtimeMs:i.modifiedAt,revision:i.revision}}async function v(e,t){let n;try{n=await l(t)}catch{return null}try{let r=await c(`/api/files/resolve`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,taskRunId:t?.taskRunId})}),a=i.parse(r.resource);return{absolutePath:r.absolutePath,fileId:a.id,inputPath:e,displayName:a.name,scope:r.absolutePath?`external`:`workspace`,locationKind:r.absolutePath?`host`:`workspace`,exists:!0,isDirectory:a.kind===`directory`,workspaceRelativePath:a.relativePath,capabilities:a.capabilities.filter(e=>e===`preview`||e===`edit`),mtimeMs:a.modifiedAt}}catch{try{return(await c(`/api/files/resolve-reference`,{method:`POST`,body:JSON.stringify({spaceId:n.id,path:e,conversationId:t?.conversationId})})).reference}catch{return null}}}async function y(e,t,n){return await c(`/api/files/references/${encodeURIComponent(e)}/action`,{method:`POST`,body:JSON.stringify({action:t,conversationId:n?.conversationId})})}async function b(e,r){let i=await d(e,r),a=await t(n(`/api/files/${encodeURIComponent(i.id)}/content`),{headers:{Accept:`*/*`}});if(!a.ok)throw await s(a);return a.blob()}async function x(e,t,n){let r=await d(e,n),a=await c(`/api/files/${encodeURIComponent(r.id)}/content`,{method:`PUT`,body:JSON.stringify({content:t,revision:r.revision})}),o=i.parse(a.resource);return{path:o.relativePath,mtimeMs:o.modifiedAt,revision:o.revision}}async function S(e,r=``,i){let a=await l(i),c=new FormData;c.set(`directory`,r),c.set(`file`,e);let d=await t(n(`/api/files/spaces/${encodeURIComponent(a.id)}/upload`),{method:`POST`,body:c});if(!d.ok)throw await s(d);return u(o.parse(await d.json()).resource)}async function C(e){let r=await t(n(`/api/files/${encodeURIComponent(e)}`),{method:`DELETE`});if(!r.ok)throw await s(r)}function w(e,t){let n=new Blob([t],{type:`text/plain;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)}function T(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}export{b as a,_ as c,f as d,g as f,p as i,y as l,x as m,T as n,h as o,S as p,w as r,m as s,C as t,v as u};
@@ -11,7 +11,7 @@
11
11
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png?v=20260910-1" />
12
12
  <link rel="manifest" href="/site.webmanifest?v=20260910-1" />
13
13
  <title>XOPC — Keep what matters moving.</title>
14
- <script type="module" crossorigin src="/assets/index-BQgqzhQj.js"></script>
14
+ <script type="module" crossorigin src="/assets/index-BB1z8QxA.js"></script>
15
15
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-aKtaBQYM.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/preload-helper-zJ_50EbN.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-react-BOUWij0V.js">
@@ -25,15 +25,15 @@
25
25
  <link rel="modulepreload" crossorigin href="/assets/download-Dk-ZjtO6.js">
26
26
  <link rel="modulepreload" crossorigin href="/assets/plus-Q2yW6OE7.js">
27
27
  <link rel="modulepreload" crossorigin href="/assets/x-B_N4OPjy.js">
28
- <link rel="modulepreload" crossorigin href="/assets/messages-Dy26npMy.js">
29
- <link rel="modulepreload" crossorigin href="/assets/locale-store-C8TMD2gn.js">
28
+ <link rel="modulepreload" crossorigin href="/assets/messages-Bb2GK-Nj.js">
29
+ <link rel="modulepreload" crossorigin href="/assets/locale-store-COVscAqC.js">
30
30
  <link rel="modulepreload" crossorigin href="/assets/cn-JdwAhgNB.js">
31
31
  <link rel="modulepreload" crossorigin href="/assets/schemas-CObaziC7.js">
32
32
  <link rel="modulepreload" crossorigin href="/assets/local-apps-yys1VChX.js">
33
33
  <link rel="modulepreload" crossorigin href="/assets/product-delivery-BAks11S4.js">
34
34
  <link rel="modulepreload" crossorigin href="/assets/app-link-4gpFbdsr.js">
35
35
  <link rel="modulepreload" crossorigin href="/assets/copy-to-clipboard-HOJ79TWv.js">
36
- <link rel="modulepreload" crossorigin href="/assets/markdown-view-Dse7rkio.js">
36
+ <link rel="modulepreload" crossorigin href="/assets/markdown-view-B_qnAcW2.js">
37
37
  <link rel="modulepreload" crossorigin href="/assets/dist-Che_jiQF.js">
38
38
  <link rel="modulepreload" crossorigin href="/assets/vendor-swr-BIWyz7Rc.js">
39
39
  <link rel="modulepreload" crossorigin href="/assets/activity-YogQEteU.js">
@@ -70,30 +70,30 @@
70
70
  <link rel="modulepreload" crossorigin href="/assets/rotate-cw-LIg3Am9S.js">
71
71
  <link rel="modulepreload" crossorigin href="/assets/search-DA7gz22f.js">
72
72
  <link rel="modulepreload" crossorigin href="/assets/index.module-Cd9ENXfk.js">
73
- <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-CXKmdVzN.js">
74
- <link rel="modulepreload" crossorigin href="/assets/session-api-_HIN8or3.js">
73
+ <link rel="modulepreload" crossorigin href="/assets/gateway-startup-retry-jiV5sbEX.js">
74
+ <link rel="modulepreload" crossorigin href="/assets/session-api-yjpEz4pP.js">
75
75
  <link rel="modulepreload" crossorigin href="/assets/constants-Dy8Gw0sF.js">
76
76
  <link rel="modulepreload" crossorigin href="/assets/app-chrome-BeB4KgOf.js">
77
77
  <link rel="modulepreload" crossorigin href="/assets/attachment-utils-core-BIOUBrpT.js">
78
78
  <link rel="modulepreload" crossorigin href="/assets/files-Bw4SBGdM.js">
79
- <link rel="modulepreload" crossorigin href="/assets/workspace-api-CdVUhyPo.js">
79
+ <link rel="modulepreload" crossorigin href="/assets/workspace-api-Si2o3inw.js">
80
80
  <link rel="modulepreload" crossorigin href="/assets/electron-env-Dit0bHgy.js">
81
81
  <link rel="modulepreload" crossorigin href="/assets/use-async-resource-GrnWNwMZ.js">
82
- <link rel="modulepreload" crossorigin href="/assets/activity-store-Cuf3JFFJ.js">
83
- <link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-CJvzfQvw.js">
82
+ <link rel="modulepreload" crossorigin href="/assets/activity-store-BQ3PMp2q.js">
83
+ <link rel="modulepreload" crossorigin href="/assets/use-file-preview-expanded-Db2VYg1b.js">
84
84
  <link rel="modulepreload" crossorigin href="/assets/globe-DSSGFWFn.js">
85
85
  <link rel="modulepreload" crossorigin href="/assets/button-CS04eWY9.js">
86
86
  <link rel="modulepreload" crossorigin href="/assets/copy-text-row-BHDs3cBa.js">
87
- <link rel="modulepreload" crossorigin href="/assets/share-link-dialog-Dg5os066.js">
88
- <link rel="modulepreload" crossorigin href="/assets/local-session-drafts-Cvv7I0fw.js">
87
+ <link rel="modulepreload" crossorigin href="/assets/share-link-dialog-DJTabLAM.js">
88
+ <link rel="modulepreload" crossorigin href="/assets/local-session-drafts-DRPsDCj1.js">
89
89
  <link rel="modulepreload" crossorigin href="/assets/tasks-DwKXgZ-I.js">
90
- <link rel="modulepreload" crossorigin href="/assets/capabilities-BzWFO_x_.js">
90
+ <link rel="modulepreload" crossorigin href="/assets/capabilities-DO-vfNKI.js">
91
91
  <link rel="modulepreload" crossorigin href="/assets/skill-wire-pattern-BPpeIcCi.js">
92
- <link rel="modulepreload" crossorigin href="/assets/shares-api-C96IO4qJ.js">
93
- <link rel="modulepreload" crossorigin href="/assets/capabilities-K0Zb_lH0.js">
94
- <link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-OLrvSjn5.js">
92
+ <link rel="modulepreload" crossorigin href="/assets/shares-api-c0dfWz6h.js">
93
+ <link rel="modulepreload" crossorigin href="/assets/capabilities-B48r0DDa.js">
94
+ <link rel="modulepreload" crossorigin href="/assets/use-composer-attachments-C7Gaaai1.js">
95
95
  <link rel="modulepreload" crossorigin href="/assets/git-branch-Dh9uxTot.js">
96
- <link rel="modulepreload" crossorigin href="/assets/notes-api-DKiVeQKG.js">
96
+ <link rel="modulepreload" crossorigin href="/assets/notes-api-sBgBcyLW.js">
97
97
  <link rel="modulepreload" crossorigin href="/assets/message-square-fVE7Ghj1.js">
98
98
  <link rel="modulepreload" crossorigin href="/assets/pause-DuPxgSxk.js">
99
99
  <link rel="modulepreload" crossorigin href="/assets/play-kxZvpBg8.js">
@@ -101,25 +101,24 @@
101
101
  <link rel="modulepreload" crossorigin href="/assets/settings-2-D-csvaET.js">
102
102
  <link rel="modulepreload" crossorigin href="/assets/sparkles-DHlfQFAF.js">
103
103
  <link rel="modulepreload" crossorigin href="/assets/middleware-Pd0e8Igk.js">
104
- <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-C_Th8kGg.js">
105
- <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-DCCLdyQD.js">
104
+ <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-store-BheKaO6d.js">
105
+ <link rel="modulepreload" crossorigin href="/assets/gateway-realtime-DDWymi-o.js">
106
106
  <link rel="modulepreload" crossorigin href="/assets/tool-activity-BtJkgjFf.js">
107
- <link rel="modulepreload" crossorigin href="/assets/registry-api-AdnxowbH.js">
108
- <link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-Cjnkle5J.js">
109
- <link rel="modulepreload" crossorigin href="/assets/agents-admin-api-D842OcNo.js">
110
- <link rel="modulepreload" crossorigin href="/assets/session-manager-CzCto5zT.js">
111
- <link rel="modulepreload" crossorigin href="/assets/send-session-input-CgOzhDZ0.js">
112
- <link rel="modulepreload" crossorigin href="/assets/theme-store-DQ6KJa4l.js">
113
- <link rel="modulepreload" crossorigin href="/assets/extension-provider-CX-sK0Tw.js">
107
+ <link rel="modulepreload" crossorigin href="/assets/registry-api-Bh9UBb-f.js">
108
+ <link rel="modulepreload" crossorigin href="/assets/gateway-config-swr-7RKqgU_U.js">
109
+ <link rel="modulepreload" crossorigin href="/assets/agents-admin-api-HBZvVyzF.js">
110
+ <link rel="modulepreload" crossorigin href="/assets/session-manager-LInoZ_Yi.js">
111
+ <link rel="modulepreload" crossorigin href="/assets/send-session-input-Dgn4BRk_.js">
112
+ <link rel="modulepreload" crossorigin href="/assets/theme-store-BOfCKgl6.js">
113
+ <link rel="modulepreload" crossorigin href="/assets/extension-provider-xlSyz4Z6.js">
114
114
  <link rel="modulepreload" crossorigin href="/assets/loopi-Djb8XU3l.js">
115
- <link rel="modulepreload" crossorigin href="/assets/models-hub-cache-B1C86nRp.js">
116
- <link rel="modulepreload" crossorigin href="/assets/oauth-api-BwpzpRwC.js">
115
+ <link rel="modulepreload" crossorigin href="/assets/models-hub-cache-DyPPksMP.js">
117
116
  <link rel="modulepreload" crossorigin href="/assets/skill-api-utils-C7V4JVXM.js">
118
117
  <link rel="modulepreload" crossorigin href="/assets/date-formatters-CUZAyDEg.js">
119
118
  <link rel="modulepreload" crossorigin href="/assets/settings-form-draft-Dy10ldo8.js">
120
119
  <link rel="stylesheet" crossorigin href="/assets/markdown-view-DSjfHfaW.css">
121
120
  <link rel="stylesheet" crossorigin href="/assets/loopi-C09I2mNj.css">
122
- <link rel="stylesheet" crossorigin href="/assets/index-COB4QIJp.css">
121
+ <link rel="stylesheet" crossorigin href="/assets/index-D9R6tU7r.css">
123
122
  </head>
124
123
  <body>
125
124
  <div id="root"></div>
package/dist/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  //#region package.json
2
- var version = "0.0.367";
2
+ var version = "0.0.369";
3
3
  //#endregion
4
4
  export { version };
@@ -0,0 +1,213 @@
1
+ //#region packages/browser-control-contract/src/automation.ts
2
+ /** Runs in the page. Keep all helpers inside this function for serialization. */
3
+ async function browserDom(input) {
4
+ const root = globalThis;
5
+ const doc = root.document;
6
+ const normalize = (value) => String(value || "").trim().replace(/\s+/g, " ").slice(0, 240);
7
+ const sensitive = (element) => element.type === "password" || element.type === "file" || /cc-|one-time-code|transaction-|password|token|secret|otp|cvv|cvc|card.?number|验证码|密码|银行卡|卡号/i.test([
8
+ element.autocomplete,
9
+ element.name,
10
+ element.id,
11
+ element.getAttribute("aria-label"),
12
+ name(element)
13
+ ].join(" "));
14
+ const role = (element) => element.getAttribute("role") || {
15
+ A: "link",
16
+ BUTTON: "button",
17
+ SUMMARY: "button",
18
+ SELECT: "combobox",
19
+ TEXTAREA: "textbox",
20
+ FORM: "form",
21
+ FIELDSET: "group",
22
+ SECTION: "region"
23
+ }[element.tagName] || (element.tagName === "INPUT" ? element.type === "checkbox" ? "checkbox" : element.type === "radio" ? "radio" : [
24
+ "submit",
25
+ "button",
26
+ "reset"
27
+ ].includes(element.type) ? "button" : "textbox" : "text");
28
+ const name = (element) => normalize((element.getAttribute("aria-labelledby") || "").split(/\s+/).map((id) => doc.getElementById(id)?.textContent || "").join(" ") || element.getAttribute("aria-label") || element.labels?.[0]?.textContent || (element.tagName === "FIELDSET" ? element.querySelector("legend")?.textContent : "") || element.getAttribute("alt") || element.getAttribute("placeholder") || ([
29
+ "submit",
30
+ "button",
31
+ "reset"
32
+ ].includes(element.type) ? element.value : "") || element.innerText || element.getAttribute("title") || "");
33
+ const describe = (element) => {
34
+ const container = element.parentElement?.closest("form,fieldset,section,[role=\"region\"],[role=\"group\"],[role=\"dialog\"]");
35
+ return {
36
+ role: role(element),
37
+ name: name(element),
38
+ ...element.getAttribute("data-testid") ? { testId: element.getAttribute("data-testid") } : {},
39
+ ...container && name(container) ? { scope: {
40
+ role: role(container),
41
+ name: name(container)
42
+ } } : {}
43
+ };
44
+ };
45
+ const selector = "a[href],button,input:not([type=\"hidden\"]),textarea,select,summary,[role],[data-testid],label,p,span,h1,h2,h3,td,output";
46
+ if (input.operation === "resolve") {
47
+ const target = input.target;
48
+ const matches = Array.from(doc.querySelectorAll(selector)).filter((element) => {
49
+ const rect = element.getBoundingClientRect();
50
+ const style = root.getComputedStyle(element);
51
+ if (!rect.width || !rect.height || style.display === "none" || style.visibility === "hidden") return false;
52
+ const descriptor = describe(element);
53
+ return descriptor.role === target.role && (!target.name || descriptor.name === target.name) && (!target.nameIncludes || descriptor.name?.includes(target.nameIncludes)) && (!target.testId || descriptor.testId === target.testId) && (!target.scope || descriptor.scope?.role === target.scope.role && descriptor.scope?.name === target.scope.name);
54
+ });
55
+ if (matches.length !== 1) return { matches: matches.length };
56
+ const element = matches[0];
57
+ const ref = `xopc-e${++root.__xopcRefCounter || (root.__xopcRefCounter = 1)}`;
58
+ element.setAttribute("data-xopc-ref", ref);
59
+ return {
60
+ matches: 1,
61
+ node: {
62
+ ref,
63
+ role: role(element),
64
+ name: name(element),
65
+ value: !sensitive(element) && "value" in element ? String(element.value).slice(0, 4096) : void 0,
66
+ description: !sensitive(element) ? normalize(element.textContent) : void 0,
67
+ href: element.tagName === "A" ? element.href : void 0,
68
+ states: [
69
+ sensitive(element) ? "sensitive" : "",
70
+ element.disabled ? "disabled" : "",
71
+ element.checked ? "checked" : "",
72
+ ["BUTTON", "INPUT"].includes(element.tagName) && element.type === "submit" ? "submit" : ""
73
+ ].filter(Boolean)
74
+ }
75
+ };
76
+ }
77
+ const prior = root.__xopcRecorder;
78
+ if (input.operation === "record" && prior?.recordingId === input.recordingId && prior?.generation === input.generation) return { recording: true };
79
+ if (prior) {
80
+ await prior.stop();
81
+ delete root.__xopcRecorder;
82
+ }
83
+ if (input.operation === "stop") return { stopped: true };
84
+ let sourceSeq = 0;
85
+ const pending = /* @__PURE__ */ new Set();
86
+ const dirty = /* @__PURE__ */ new Set();
87
+ const lastValues = /* @__PURE__ */ new WeakMap();
88
+ const listeners = [];
89
+ const cleanUrl = () => {
90
+ const url = new URL(root.location.href);
91
+ url.username = "";
92
+ url.password = "";
93
+ url.hash = "";
94
+ for (const key of [...url.searchParams.keys()]) if (/token|secret|password|key|code/i.test(key)) url.searchParams.delete(key);
95
+ return url.toString();
96
+ };
97
+ const documentId = `${root.performance.timeOrigin}:${input.generation}`;
98
+ let failed = false;
99
+ let ended = false;
100
+ let enterTarget;
101
+ let enterAt = 0;
102
+ const emit = (event) => {
103
+ const task = root.chrome.runtime.sendMessage({
104
+ type: "browser/recording-event",
105
+ recordingId: input.recordingId,
106
+ generation: input.generation,
107
+ event: {
108
+ ...event,
109
+ id: root.crypto.randomUUID(),
110
+ sourceSeq: ++sourceSeq,
111
+ documentId,
112
+ url: cleanUrl()
113
+ }
114
+ }).then((ack) => {
115
+ if (!ack?.ok) failed = true;
116
+ }).catch(() => {
117
+ failed = true;
118
+ });
119
+ pending.add(task);
120
+ task.finally(() => pending.delete(task));
121
+ };
122
+ const flush = (element) => {
123
+ if (!dirty.delete(element) || sensitive(element)) return;
124
+ const value = String(element.value || "").slice(0, 4096);
125
+ if (lastValues.get(element) === value) return;
126
+ lastValues.set(element, value);
127
+ emit({
128
+ action: element.tagName === "SELECT" ? "select" : "fill",
129
+ target: describe(element),
130
+ value
131
+ });
132
+ };
133
+ const listen = (type, handler) => {
134
+ listeners.push([type, handler]);
135
+ (type === "pagehide" ? root : doc).addEventListener(type, handler, true);
136
+ };
137
+ listen("input", (event) => {
138
+ if (event.isTrusted && !sensitive(event.target) && !["checkbox", "radio"].includes(event.target.type) && "value" in event.target) dirty.add(event.target);
139
+ });
140
+ listen("dragstart", (event) => {
141
+ if (event.isTrusted) emit({
142
+ action: "unsupported",
143
+ value: "Drag actions are not supported by the recorder."
144
+ });
145
+ });
146
+ listen("change", (event) => {
147
+ if (!event.isTrusted || sensitive(event.target)) return;
148
+ if (["checkbox", "radio"].includes(event.target.type)) emit({
149
+ action: "check",
150
+ target: describe(event.target),
151
+ checked: !!event.target.checked
152
+ });
153
+ else {
154
+ dirty.add(event.target);
155
+ flush(event.target);
156
+ }
157
+ });
158
+ listen("focusout", (event) => flush(event.target));
159
+ listen("click", (event) => {
160
+ if (!event.isTrusted) return;
161
+ for (const element of dirty) flush(element);
162
+ const element = event.target.closest("a[href],button,summary,[role=\"button\"],input[type=\"submit\"],input[type=\"button\"]");
163
+ if (element && event.detail === 0 && Date.now() - enterAt < 500 && (element === enterTarget || element.form && element.form === enterTarget?.form)) return;
164
+ if (element && !sensitive(element)) emit({
165
+ action: "click",
166
+ target: describe(element)
167
+ });
168
+ else if (event.target.closest("canvas,[contenteditable=\"true\"],input[type=\"file\"]")) emit({
169
+ action: "unsupported",
170
+ value: "Canvas, rich text and file actions require an assistant to complete the workflow."
171
+ });
172
+ });
173
+ listen("pagehide", () => {
174
+ for (const element of dirty) flush(element);
175
+ emit({ action: "checkpoint" });
176
+ ended = true;
177
+ for (const [type, handler] of listeners) (type === "pagehide" ? root : doc).removeEventListener(type, handler, true);
178
+ });
179
+ listen("keydown", (event) => {
180
+ if (!event.isTrusted || event.isComposing || sensitive(event.target) || !["Enter", "Escape"].includes(event.key)) return;
181
+ flush(event.target);
182
+ if (event.key === "Enter") {
183
+ enterTarget = event.target;
184
+ enterAt = Date.now();
185
+ }
186
+ emit({
187
+ action: "press",
188
+ target: describe(event.target),
189
+ key: event.key
190
+ });
191
+ });
192
+ root.__xopcRecorder = {
193
+ recordingId: input.recordingId,
194
+ generation: input.generation,
195
+ stop: async () => {
196
+ for (const [type, handler] of listeners) (type === "pagehide" ? root : doc).removeEventListener(type, handler, true);
197
+ for (const element of dirty) flush(element);
198
+ if (!ended) {
199
+ emit({ action: "checkpoint" });
200
+ ended = true;
201
+ }
202
+ await Promise.all([...pending]);
203
+ if (failed) throw new Error("Recording events could not be saved.");
204
+ }
205
+ };
206
+ emit({ action: "navigate" });
207
+ return {
208
+ recording: true,
209
+ documentId
210
+ };
211
+ }
212
+ //#endregion
213
+ export { browserDom };
@@ -1,3 +1,4 @@
1
+ import "./automation.js";
1
2
  //#region packages/browser-control-contract/src/index.ts
2
3
  const BROWSER_CONTROL_ENDPOINT_TOOL_NAME = "browser.control";
3
4
  const BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA = {
@@ -28,16 +29,46 @@ const BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA = {
28
29
  }
29
30
  }
30
31
  };
31
- function browserWireAuthenticationPayload(input) {
32
- return [
33
- "xopc-browser-extension-v4",
34
- input.connectionId,
35
- input.challenge,
36
- String(input.issuedAt),
37
- input.principalId,
38
- input.extensionId,
39
- input.extensionVersion
40
- ].join("\n");
41
- }
32
+ const BROWSER_CONTROL_ENDPOINT_DESCRIPTOR = {
33
+ name: BROWSER_CONTROL_ENDPOINT_TOOL_NAME,
34
+ title: "Browser control transport",
35
+ description: "Internal authenticated transport for xopc browser-control actions.",
36
+ inputSchema: BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA,
37
+ outputSchema: BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA,
38
+ policyId: "browser.control",
39
+ sensitivity: "personal",
40
+ effect: "write",
41
+ confirmation: "never",
42
+ requiresForeground: false,
43
+ requiredPermissions: ["browser-control"],
44
+ timeoutMs: 12e4,
45
+ maxConcurrency: 4,
46
+ supportsCancellation: true,
47
+ idempotent: false,
48
+ resultKinds: ["json"]
49
+ };
50
+ const BROWSER_RECORDING_ENDPOINT_INPUT_SCHEMA = {
51
+ type: "object",
52
+ additionalProperties: false,
53
+ required: ["operation"],
54
+ properties: { operation: {
55
+ type: "string",
56
+ enum: [
57
+ "start",
58
+ "pause",
59
+ "resume",
60
+ "finish",
61
+ "status"
62
+ ]
63
+ } }
64
+ };
65
+ const BROWSER_RECORDING_ENDPOINT_DESCRIPTOR = {
66
+ ...BROWSER_CONTROL_ENDPOINT_DESCRIPTOR,
67
+ name: "browser.recording",
68
+ title: "Browser workflow recording",
69
+ description: "Record a workflow in the active browser tab and save it as an automation.",
70
+ inputSchema: BROWSER_RECORDING_ENDPOINT_INPUT_SCHEMA,
71
+ maxConcurrency: 1
72
+ };
42
73
  //#endregion
43
- export { BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_TOOL_NAME, browserWireAuthenticationPayload };
74
+ export { BROWSER_CONTROL_ENDPOINT_DESCRIPTOR, BROWSER_CONTROL_ENDPOINT_INPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_OUTPUT_SCHEMA, BROWSER_CONTROL_ENDPOINT_TOOL_NAME, BROWSER_RECORDING_ENDPOINT_DESCRIPTOR, BROWSER_RECORDING_ENDPOINT_INPUT_SCHEMA };
@@ -45,7 +45,9 @@ var init_gateway_scopes = __esmMin((() => {
45
45
  "agents.run",
46
46
  "sessions.read",
47
47
  "sessions.write",
48
- "device.self"
48
+ "device.self",
49
+ "automations.read",
50
+ "automations.write"
49
51
  ];
50
52
  }));
51
53
  //#endregion
@@ -44,6 +44,7 @@ var init_notifications = __esmMin((() => {
44
44
  ProductNotificationTypeSchema = z.enum([
45
45
  "scene.result",
46
46
  "scene.digest",
47
+ "chat.needs_input",
47
48
  "chat.completed",
48
49
  "chat.failed",
49
50
  "task.needs_input",
@@ -1,8 +1,12 @@
1
1
  import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
2
  import { z } from "zod";
3
3
  //#region packages/realtime-protocol/src/voice-catalog.ts
4
- var voiceModeCapabilitySchema, voiceManifestSchema, voiceSelectionSchema;
4
+ var voiceDisplayNamesSchema, voiceModeCapabilitySchema, voiceManifestSchema, voiceSelectionSchema;
5
5
  var init_voice_catalog = __esmMin((() => {
6
+ voiceDisplayNamesSchema = z.strictObject({
7
+ "zh-CN": z.string().min(1).optional(),
8
+ en: z.string().min(1).optional()
9
+ });
6
10
  voiceModeCapabilitySchema = z.enum([
7
11
  "transcription",
8
12
  "transcription.stream",
@@ -32,6 +36,7 @@ var init_voice_catalog = __esmMin((() => {
32
36
  voices: z.array(z.strictObject({
33
37
  id: z.string().min(1),
34
38
  name: z.string(),
39
+ displayNames: voiceDisplayNamesSchema.optional(),
35
40
  languages: z.array(z.string()),
36
41
  gender: z.enum(["female", "male"]).optional(),
37
42
  style: z.string().optional(),
@@ -55,6 +60,7 @@ var init_voice_catalog = __esmMin((() => {
55
60
  models: z.array(z.strictObject({
56
61
  id: z.string(),
57
62
  name: z.string(),
63
+ displayNames: voiceDisplayNamesSchema.optional(),
58
64
  voice: voiceManifestSchema
59
65
  }))
60
66
  });
@@ -10,7 +10,7 @@ function parseVoiceClientJsonFrame(text) {
10
10
  if (new TextEncoder().encode(text).byteLength > 16 * 1024) throw new Error("Voice control frame exceeds 16384 bytes");
11
11
  return JSON.parse(text);
12
12
  }
13
- var VOICE_REALTIME_WS_PATH, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, idSchema, timestampSchema, voicePurposeSchema, voiceModeSchema, voiceInputModeSchema, voiceLanguageSchema, voicePcmFormatSchema, voiceProviderRouteSchema, voiceRouteSchema, availabilitySchema, createVoiceSessionRequestSchema, clientEnvelope, voiceClientMessageSchema, transcriptPayloadSchema, serverEnvelope;
13
+ var VOICE_REALTIME_WS_PATH, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, idSchema, timestampSchema, voicePurposeSchema, voiceModeSchema, voiceInputModeSchema, voiceLanguageSchema, VOICE_TIMING_METRICS, voicePcmFormatSchema, voiceProviderRouteSchema, voiceRouteSchema, availabilitySchema, createVoiceSessionRequestSchema, clientEnvelope, voiceClientMessageSchema, transcriptPayloadSchema, serverEnvelope;
14
14
  var init_voice = __esmMin((() => {
15
15
  init_voice_catalog();
16
16
  init_voice_audio();
@@ -25,6 +25,12 @@ var init_voice = __esmMin((() => {
25
25
  voiceModeSchema = z.enum(["natural", "assistant"]);
26
26
  voiceInputModeSchema = z.literal("server_vad");
27
27
  voiceLanguageSchema = z.enum(["zh", "en"]);
28
+ VOICE_TIMING_METRICS = [
29
+ "speech_end_to_audio_received",
30
+ "speech_end_to_audio_scheduled",
31
+ "speech_end_to_audio_buffered",
32
+ "local_stop"
33
+ ];
28
34
  voicePcmFormatSchema = z.strictObject({
29
35
  encoding: z.literal("pcm_s16le"),
30
36
  sampleRate: z.union([z.literal(16e3), z.literal(24e3)]),
@@ -126,7 +132,7 @@ var init_voice = __esmMin((() => {
126
132
  })),
127
133
  clientEnvelope("session.metric", z.strictObject({
128
134
  responseId: z.string().min(1).max(160),
129
- metric: z.enum(["speech_end_to_audio_received", "local_stop"]),
135
+ metric: z.enum(VOICE_TIMING_METRICS),
130
136
  durationMs: z.number().finite().min(0).max(6e5)
131
137
  })),
132
138
  clientEnvelope("input.mute", z.strictObject({ muted: z.boolean() })),
@@ -268,4 +274,4 @@ var init_voice = __esmMin((() => {
268
274
  }));
269
275
  //#endregion
270
276
  init_voice();
271
- export { VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_WS_PATH, createVoiceSessionRequestSchema, init_voice, parseVoiceClientJsonFrame, parseVoiceClientMessage };
277
+ export { VOICE_REALTIME_HEARTBEAT_INTERVAL_MS, VOICE_REALTIME_MAX_BINARY_FRAME_BYTES, VOICE_REALTIME_PROXY_WS_PATH, VOICE_REALTIME_START_TIMEOUT_MS, VOICE_REALTIME_WS_PATH, VOICE_TIMING_METRICS, createVoiceSessionRequestSchema, init_voice, parseVoiceClientJsonFrame, parseVoiceClientMessage };
@@ -103,7 +103,14 @@ var RepositoryInstructions = class RepositoryInstructions {
103
103
  try {
104
104
  const canonical = await realpath(file);
105
105
  if (!inside(this.root, canonical)) throw new Error(`Instruction file escapes repository: ${file}`);
106
- if ((await stat(canonical)).size > 32768) throw new Error(`Instruction file is too large; read it explicitly: ${file}`);
106
+ const metadata = await stat(canonical);
107
+ if (metadata.size > 32768) {
108
+ const revision = `oversized:${canonical}:${metadata.size}:${metadata.mtimeMs}:${metadata.ctimeMs}`;
109
+ if (this.seen.get(file) === revision) continue;
110
+ this.pending.set(file, revision);
111
+ sections.push(`Instructions for ${dir} and its descendants (${file}):\nThis instruction file exceeds the 32 KiB automatic inclusion limit (${metadata.size} bytes). Read ${file} explicitly with read_file, in successive chunks if needed, until the entire file has been read. Apply its instructions before working in this scope.`);
112
+ continue;
113
+ }
107
114
  const content = await readFile(canonical, "utf8");
108
115
  if (this.seen.get(file) === content) continue;
109
116
  this.pending.set(file, content);
@@ -1 +1 @@
1
- export declare const browserUseManual = "# Browser Tool Manual\n\n## browser_use\n\nUse one typed action per call. Start with `observe` or `navigate`. Every observation returns a `sessionId`, `revision`, and semantic element refs. Element actions must use refs from the newest revision; never invent refs.\n\nAvailable actions:\n\n- `observe`: return URL, title, interactive semantic nodes, and changes. Set `visual` to `always` only when visual evidence is needed.\n- `navigate`: open an HTTP(S) URL and optionally verify an expectation.\n- `click`, `fill`, `select`: act on a semantic ref with its observation revision.\n- `press`, `scroll`: act on an optional ref or the active page.\n- `wait`: wait for page idle, text, or a ref visibility state.\n- `upload`: attach workspace files to a file input. Local approval may be required.\n- `tabs`: list, create, activate, or close task-owned tabs.\n- `sequence`: run a short list of same-document ref actions.\n- `close`: close the task-owned browser session.\n\nThe tool does not accept CSS, XPath, JavaScript, cookie, storage, or network-inspection commands. Re-observe after navigation or a stale-observation response. Cross-domain, upload, destructive, and external-effect actions follow the configured local-owner approval policy. Sensitive fields expose only their semantic identity; their values are redacted and filling them requires approval.\n\n## browser_automation\n\nReusable browser automations are strict JSON. They use semantic `role` plus `name` or `nameIncludes` targets and an exact `allowedDomains` list. Input templates use `${input.name}`. Save only a flow that has been run and verified; never store passwords, one-time codes, recovery codes, or payment details.\n";
1
+ export declare const browserUseManual = "# Browser Tool Manual\n\n## browser_use\n\nUse one typed action per call. Start with `observe` or `navigate`. Every observation returns a `sessionId`, `revision`, and semantic element refs. Element actions must use refs from the newest revision; never invent refs.\n\nAvailable actions:\n\n- `observe`: return URL, title, interactive semantic nodes, and changes. Set `visual` to `always` only when visual evidence is needed.\n- `navigate`: open an HTTP(S) URL and optionally verify an expectation.\n- `click`, `fill`, `select`: act on a semantic ref with its observation revision.\n- `press`, `scroll`: act on an optional ref or the active page.\n- `wait`: wait for page idle, text, or a ref visibility state.\n- `upload`: attach workspace files to a file input.\n- `tabs`: list, create, activate, or close task-owned tabs.\n- `sequence`: run a short list of same-document ref actions.\n- `close`: close the task-owned browser session.\n\nThe tool does not accept CSS, XPath, JavaScript, cookie, storage, or network-inspection commands. Re-observe after navigation or a stale-observation response. Browser actions execute directly under the configured allow/deny policy. Sensitive fields expose only their semantic identity and values are redacted.\n\n## browser_automation\n\nReusable browser automations are strict JSON. They use semantic `role` plus `name` or `nameIncludes` targets and an exact `allowedDomains` list. Input templates use `${input.name}`. Save a draft, validate it, then run/test that exact saved revision when the user requests execution or testing. Never repeat a write merely to verify a recording. Only successful runs with explicit successCriteria mark a revision verified; never store passwords, one-time codes, recovery codes, or payment details.\n";
@@ -12,16 +12,16 @@ Available actions:
12
12
  - \`click\`, \`fill\`, \`select\`: act on a semantic ref with its observation revision.
13
13
  - \`press\`, \`scroll\`: act on an optional ref or the active page.
14
14
  - \`wait\`: wait for page idle, text, or a ref visibility state.
15
- - \`upload\`: attach workspace files to a file input. Local approval may be required.
15
+ - \`upload\`: attach workspace files to a file input.
16
16
  - \`tabs\`: list, create, activate, or close task-owned tabs.
17
17
  - \`sequence\`: run a short list of same-document ref actions.
18
18
  - \`close\`: close the task-owned browser session.
19
19
 
20
- The tool does not accept CSS, XPath, JavaScript, cookie, storage, or network-inspection commands. Re-observe after navigation or a stale-observation response. Cross-domain, upload, destructive, and external-effect actions follow the configured local-owner approval policy. Sensitive fields expose only their semantic identity; their values are redacted and filling them requires approval.
20
+ The tool does not accept CSS, XPath, JavaScript, cookie, storage, or network-inspection commands. Re-observe after navigation or a stale-observation response. Browser actions execute directly under the configured allow/deny policy. Sensitive fields expose only their semantic identity and values are redacted.
21
21
 
22
22
  ## browser_automation
23
23
 
24
- Reusable browser automations are strict JSON. They use semantic \`role\` plus \`name\` or \`nameIncludes\` targets and an exact \`allowedDomains\` list. Input templates use \`\${input.name}\`. Save only a flow that has been run and verified; never store passwords, one-time codes, recovery codes, or payment details.
24
+ Reusable browser automations are strict JSON. They use semantic \`role\` plus \`name\` or \`nameIncludes\` targets and an exact \`allowedDomains\` list. Input templates use \`\${input.name}\`. Save a draft, validate it, then run/test that exact saved revision when the user requests execution or testing. Never repeat a write merely to verify a recording. Only successful runs with explicit successCriteria mark a revision verified; never store passwords, one-time codes, recovery codes, or payment details.
25
25
  `;
26
26
  //#endregion
27
27
  export { browserUseManual };
@@ -56,7 +56,7 @@ function presentResult(result) {
56
56
  content: contentWithVisual([`[${result.error.code}] ${result.error.message}`, observation ? formatBrowserObservation(observation) : ""].filter(Boolean).join("\n\n"), observation),
57
57
  details: {
58
58
  ok: false,
59
- kind: result.error.code === "APPROVAL_REQUIRED" ? "browser_approval_required" : "browser_error",
59
+ kind: "browser_error",
60
60
  error: stripVisual(result.error)
61
61
  }
62
62
  };