@xopcai/xopc 0.0.251 → 0.0.253

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 (376) hide show
  1. package/README.md +8 -5
  2. package/README.zh-CN.md +8 -5
  3. package/dist/browser-ext/dist/background.js +358 -768
  4. package/dist/browser-ext/manifest.json +1 -2
  5. package/dist/extensions/telegram/src/inbound-processor.js +2 -2
  6. package/dist/extensions/telegram/src/plugin.js +3 -2
  7. package/dist/extensions/telegram/xopc.extension.json +1 -1
  8. package/dist/gateway/static/root/assets/{activity-store-DfBjTSo9.js → activity-store-CeS1bgXP.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-Bo_dmLv8.js → agent-avatar-dicebear-BdF3HhCW.js} +1 -1
  10. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +1 -0
  11. package/dist/gateway/static/root/assets/{agents-yuUn8n-f.js → agents-DARlgjTm.js} +1 -1
  12. package/dist/gateway/static/root/assets/{api-zxpcJfgj.js → api-zMPeC0yU.js} +1 -1
  13. package/dist/gateway/static/root/assets/{app-management-settings-panel-Cz56nrVF.js → app-management-settings-panel-BaAFln8W.js} +1 -1
  14. package/dist/gateway/static/root/assets/{appearance-settings-DxSws5U4.js → appearance-settings-CXvsoBlw.js} +1 -1
  15. package/dist/gateway/static/root/assets/apps-page-BhgvfBJT.js +1 -0
  16. package/dist/gateway/static/root/assets/{archive-plugin-7k15-hqo.js → archive-plugin-C0o_mVQI.js} +1 -1
  17. package/dist/gateway/static/root/assets/{attachment-load-B-SFpjd9.js → attachment-load-B5Ry3tGL.js} +1 -1
  18. package/dist/gateway/static/root/assets/{automations-page-Qy36j19q.js → automations-page-DY5QAEQd.js} +1 -1
  19. package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +6 -0
  20. package/dist/gateway/static/root/assets/{binary-plugins-CPOZQt8F.js → binary-plugins-BydpEgBA.js} +1 -1
  21. package/dist/gateway/static/root/assets/{block-editor-DhvVlIp9.js → block-editor-D0CpUOMo.js} +3 -3
  22. package/dist/gateway/static/root/assets/browser-automation-inputs-DzbTsGI6.js +1 -0
  23. package/dist/gateway/static/root/assets/browser-automations-page-D7fZYjni.js +3 -0
  24. package/dist/gateway/static/root/assets/browser-settings-page-BBdMqxl0.js +3 -0
  25. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +7 -0
  26. package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +1 -0
  27. package/dist/gateway/static/root/assets/{channels-status-swr-CX-yWwLD.js → channels-status-swr-BGGRTkn6.js} +1 -1
  28. package/dist/gateway/static/root/assets/{chat-terminal-dock-1PJoxRuV.js → chat-terminal-dock-_CP4nvlg.js} +2 -2
  29. package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +2 -0
  30. package/dist/gateway/static/root/assets/{cron-expression-CBCc6zFA.js → cron-expression-g2U8Rllf.js} +1 -1
  31. package/dist/gateway/static/root/assets/{date-picker-u8K5Kt_N.js → date-picker-SmVlhtj_.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dependency-picker-y_i_cnpz.js → dependency-picker-D-0gcbbM.js} +1 -1
  33. package/dist/gateway/static/root/assets/{desktop-pet-DyL0JxLm.js → desktop-pet-Cl3JRIu6.js} +1 -1
  34. package/dist/gateway/static/root/assets/{desktop-pet-settings-d2d_IsyP.js → desktop-pet-settings-D7kvWQ9H.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-debug-page-DqIBKJwl.js → extension-debug-page-DtP2tJHY.js} +1 -1
  36. package/dist/gateway/static/root/assets/{extension-page-DUW1xxj2.js → extension-page-CphZDdoT.js} +1 -1
  37. package/dist/gateway/static/root/assets/{extension-settings-page-BHY9qaNw.js → extension-settings-page-CsxVLV4-.js} +1 -1
  38. package/dist/gateway/static/root/assets/{gateway-config-swr-CMNbl0FZ.js → gateway-config-swr-BW3Bx-aV.js} +1 -1
  39. package/dist/gateway/static/root/assets/gateway-settings-DxBZ05dX.js +1 -0
  40. package/dist/gateway/static/root/assets/{gateway-startup-retry-CR7Xg8As.js → gateway-startup-retry-DAq74TZe.js} +1 -1
  41. package/dist/gateway/static/root/assets/{heartbeat-settings-7CD9iPR7.js → heartbeat-settings-DWcKsIoZ.js} +1 -1
  42. package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +1 -0
  43. package/dist/gateway/static/root/assets/{image-generation-api-C5mn73ca.js → image-generation-api-MPuaXDRs.js} +1 -1
  44. package/dist/gateway/static/root/assets/index-C7RDs6S-.js +74 -0
  45. package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +2 -0
  46. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BtlqMleF.js → keyboard-shortcuts-settings-CfhaTqgE.js} +1 -1
  47. package/dist/gateway/static/root/assets/{local-app-workbench-page-BjxfkjxE.js → local-app-workbench-page-CR6asX7L.js} +2 -2
  48. package/dist/gateway/static/root/assets/{local-apps-page-B7xqQe2s.js → local-apps-page-g01W3kEK.js} +1 -1
  49. package/dist/gateway/static/root/assets/{locale-store-CF4erhjB.js → locale-store-BkeaPZpn.js} +1 -1
  50. package/dist/gateway/static/root/assets/{logs-page-kACaPZKL.js → logs-page-ZP4QTWoC.js} +2 -2
  51. package/dist/gateway/static/root/assets/{management-settings-A432siER.js → management-settings-DeGxJF_Z.js} +1 -1
  52. package/dist/gateway/static/root/assets/markdown-view-Ca7BRBLL.js +201 -0
  53. package/dist/gateway/static/root/assets/{media-plugins-CpvYiauZ.js → media-plugins-FmOhmzlD.js} +1 -1
  54. package/dist/gateway/static/root/assets/messages-C72stReU.js +3 -0
  55. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-DyjVGngO.js → mobile-pairing-wizard-BXNbn05L.js} +1 -1
  56. package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +5 -0
  57. package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +8 -0
  58. package/dist/gateway/static/root/assets/{page-tabs-B3FKzjR6.js → page-tabs-pyukZ1PJ.js} +1 -1
  59. package/dist/gateway/static/root/assets/{preview-open-alternatives-DnjrwAHD.js → preview-open-alternatives-slFHoMUe.js} +1 -1
  60. package/dist/gateway/static/root/assets/{product-open-page-COcr_NUJ.js → product-open-page-CXa3FNNk.js} +1 -1
  61. package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +1 -0
  62. package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +1 -0
  63. package/dist/gateway/static/root/assets/{registry-api-BsRBlji7.js → registry-api-CviQoUBf.js} +1 -1
  64. package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +1 -0
  65. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-LO4wZ_dO.js → runtime-tools-settings-panel-O9D9o7-O.js} +2 -2
  66. package/dist/gateway/static/root/assets/{schema-form-crcj4-Pm.js → schema-form-8FesicnL.js} +1 -1
  67. package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +1 -0
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-form-section-Bl4MvTmq.js → settings-form-section-CBic9TFH.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-DplrjZ6x.js → settings-page-Xz66_Mjg.js} +1 -1
  71. package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +1 -0
  72. package/dist/gateway/static/root/assets/{share-preview-page-CJP1kURj.js → share-preview-page--JpjwB58.js} +1 -1
  73. package/dist/gateway/static/root/assets/{shares-settings-CemgzEi4.js → shares-settings-CovcdHSC.js} +1 -1
  74. package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +1 -0
  75. package/dist/gateway/static/root/assets/{skills-page-DsjcKg9Q.js → skills-page-fVKExKv5.js} +1 -1
  76. package/dist/gateway/static/root/assets/{skills-page.utils-D6gWBbvy.js → skills-page.utils-Yv9u3uJp.js} +1 -1
  77. package/dist/gateway/static/root/assets/{system-settings-panel-_eCXfqCo.js → system-settings-panel-CCWjVdc2.js} +1 -1
  78. package/dist/gateway/static/root/assets/{task-detail-page-D0Z_K5JT.js → task-detail-page-I8hueJnG.js} +1 -1
  79. package/dist/gateway/static/root/assets/{theme-store-BOgkc_9D.js → theme-store-BtkaVpMm.js} +1 -1
  80. package/dist/gateway/static/root/assets/{tunnel-api-W5mktxl1.js → tunnel-api-C__W9BaN.js} +1 -1
  81. package/dist/gateway/static/root/assets/{use-autosave-Na2DYzT3.js → use-autosave-Dow9RRcq.js} +1 -1
  82. package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +2 -0
  83. package/dist/gateway/static/root/assets/{voice-api-key-field-OXweUxS_.js → voice-api-key-field-CvF3lEyx.js} +1 -1
  84. package/dist/gateway/static/root/assets/{voice-config-api-C-ryeIxj.js → voice-config-api-BEUVAyM6.js} +1 -1
  85. package/dist/gateway/static/root/assets/{work-discovery-overlay-BqOsO47I.js → work-discovery-overlay-B9PDfReq.js} +1 -1
  86. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-B9S_lfT1.js → workflow-run-setup-panel-kWGFkhjz.js} +2 -2
  87. package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +5 -0
  88. package/dist/gateway/static/root/index.html +10 -10
  89. package/dist/package.js +1 -1
  90. package/dist/packages/gateway-contract/src/new-session.js +9 -0
  91. package/dist/packages/realtime-protocol/src/voice.js +6 -1
  92. package/dist/src/agent/agent-manager.d.ts +2 -1
  93. package/dist/src/agent/agent-manager.js +26 -8
  94. package/dist/src/agent/background-review/run-background-review.js +1 -1
  95. package/dist/src/agent/coding/repository-instructions.js +2 -2
  96. package/dist/src/agent/coding/workspace-revision.js +2 -2
  97. package/dist/src/agent/commands/command-isolation.js +2 -2
  98. package/dist/src/agent/embedded/execution-context.d.ts +2 -1
  99. package/dist/src/agent/embedded/execution-context.js +10 -4
  100. package/dist/src/agent/embedded/index.d.ts +1 -1
  101. package/dist/src/agent/embedded/index.js +2 -2
  102. package/dist/src/agent/embedded/model-runtime.js +1 -1
  103. package/dist/src/agent/embedded/run-for-session.js +5 -4
  104. package/dist/src/agent/embedded/run-turn.js +22 -3
  105. package/dist/src/agent/embedded/types.d.ts +1 -1
  106. package/dist/src/agent/external-tools/composio-provider.d.ts +1 -0
  107. package/dist/src/agent/external-tools/composio-provider.js +64 -34
  108. package/dist/src/agent/external-tools/search-error.js +5 -3
  109. package/dist/src/agent/image/tool-model-config.js +1 -1
  110. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  111. package/dist/src/agent/service/direct-turn-helpers.js +6 -3
  112. package/dist/src/agent/service/process-direct-streaming.js +6 -3
  113. package/dist/src/agent/service.d.ts +2 -0
  114. package/dist/src/agent/service.js +25 -10
  115. package/dist/src/agent/service.types.d.ts +2 -1
  116. package/dist/src/agent/session/session-inspector.js +1 -1
  117. package/dist/src/agent/skills/hub-lock.js +1 -1
  118. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +4 -0
  119. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  120. package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
  121. package/dist/src/agent/tool-manuals/browser.js +15 -226
  122. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +4 -21
  123. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +48 -165
  124. package/dist/src/agent/tools/browser/tool/schemas.d.ts +203 -16
  125. package/dist/src/agent/tools/browser/tool/schemas.js +146 -16
  126. package/dist/src/agent/tools/browser-automation-tool.d.ts +121 -0
  127. package/dist/src/agent/tools/browser-automation-tool.js +197 -0
  128. package/dist/src/agent/tools/clarify-tool.d.ts +17 -3
  129. package/dist/src/agent/tools/clarify-tool.js +27 -32
  130. package/dist/src/agent/tools/cli-clarify.js +23 -8
  131. package/dist/src/agent/tools/factory.d.ts +6 -9
  132. package/dist/src/agent/tools/factory.js +42 -59
  133. package/dist/src/agent/tools/index.d.ts +2 -2
  134. package/dist/src/agent/tools/index.js +3 -3
  135. package/dist/src/agent/tools/review-workspace.js +2 -2
  136. package/dist/src/ai-assist/text-assist.js +1 -1
  137. package/dist/src/auth/credentials.js +2 -2
  138. package/dist/src/auth/oauth/xopc-cloud.js +3 -1
  139. package/dist/src/auth/profiles/store.js +1 -1
  140. package/dist/src/auth/sync-provider-auth.js +2 -2
  141. package/dist/src/automations/domain/defaults.js +1 -1
  142. package/dist/src/automations/domain/types.d.ts +5 -5
  143. package/dist/src/automations/domain/validation.d.ts +16 -16
  144. package/dist/src/automations/domain/validation.js +3 -3
  145. package/dist/src/automations/draft/automation-draft-validator.d.ts +4 -4
  146. package/dist/src/automations/draft/automation-draft-validator.js +1 -1
  147. package/dist/src/automations/service/action-executor.d.ts +1 -1
  148. package/dist/src/automations/service/action-executor.js +7 -7
  149. package/dist/src/browser/{recipes → automations}/index.d.ts +1 -0
  150. package/dist/src/browser/automations/index.js +4 -0
  151. package/dist/src/browser/automations/repository.d.ts +13 -0
  152. package/dist/src/browser/automations/repository.js +60 -0
  153. package/dist/src/browser/automations/runner.d.ts +17 -0
  154. package/dist/src/browser/automations/runner.js +173 -0
  155. package/dist/src/browser/automations/runtime-service.d.ts +6 -0
  156. package/dist/src/browser/automations/runtime-service.js +37 -0
  157. package/dist/src/browser/automations/schema.d.ts +144 -0
  158. package/dist/src/browser/automations/schema.js +135 -0
  159. package/dist/src/browser/automations/service.d.ts +146 -0
  160. package/dist/src/browser/automations/service.js +168 -0
  161. package/dist/src/browser/automations/types.d.ts +90 -0
  162. package/dist/src/browser/cache-dir-policy.d.ts +1 -1
  163. package/dist/src/browser/cache-dir-policy.js +1 -4
  164. package/dist/src/browser/drivers/browser-driver.d.ts +17 -0
  165. package/dist/src/browser/drivers/create-driver.d.ts +3 -0
  166. package/dist/src/browser/drivers/create-driver.js +84 -0
  167. package/dist/src/browser/drivers/extension-driver.d.ts +20 -0
  168. package/dist/src/browser/drivers/extension-driver.js +47 -0
  169. package/dist/src/browser/drivers/playwright-driver.d.ts +38 -0
  170. package/dist/src/browser/drivers/playwright-driver.js +406 -0
  171. package/dist/src/browser/index.d.ts +10 -15
  172. package/dist/src/browser/index.js +10 -15
  173. package/dist/src/browser/install-lock.d.ts +1 -2
  174. package/dist/src/browser/install-lock.js +3 -9
  175. package/dist/src/browser/install-progress.d.ts +1 -1
  176. package/dist/src/browser/observation/format.d.ts +2 -0
  177. package/dist/src/browser/observation/format.js +26 -0
  178. package/dist/src/browser/policy/approval-store.d.ts +17 -0
  179. package/dist/src/browser/policy/approval-store.js +62 -0
  180. package/dist/src/browser/policy/browser-policy.d.ts +3 -0
  181. package/dist/src/browser/policy/browser-policy.js +27 -0
  182. package/dist/src/browser/providers/browser-ext-install.d.ts +1 -1
  183. package/dist/src/browser/providers/browser-ext-install.js +4 -6
  184. package/dist/src/browser/providers/browser-use.js +1 -1
  185. package/dist/src/browser/providers/browserbase.js +1 -1
  186. package/dist/src/browser/providers/extension-ws-acquire.d.ts +1 -4
  187. package/dist/src/browser/providers/extension-ws-acquire.js +1 -13
  188. package/dist/src/browser/providers/extension.d.ts +3 -22
  189. package/dist/src/browser/providers/extension.js +7 -15
  190. package/dist/src/browser/providers/index.d.ts +2 -2
  191. package/dist/src/browser/providers/index.js +3 -3
  192. package/dist/src/browser/providers/types.d.ts +0 -94
  193. package/dist/src/browser/readiness.d.ts +4 -22
  194. package/dist/src/browser/readiness.js +55 -118
  195. package/dist/src/browser/runtime/browser-runtime.d.ts +30 -0
  196. package/dist/src/browser/runtime/browser-runtime.js +362 -0
  197. package/dist/src/browser/url-policy.d.ts +3 -3
  198. package/dist/src/browser/url-policy.js +7 -6
  199. package/dist/src/browser/verification/expectation.d.ts +2 -0
  200. package/dist/src/browser/verification/expectation.js +17 -0
  201. package/dist/src/cli/command-loaders.js +1 -0
  202. package/dist/src/cli/command-manifest.js +5 -1
  203. package/dist/src/cli/commands/browser-cli-helpers.d.ts +0 -6
  204. package/dist/src/cli/commands/browser-cli-helpers.js +11 -144
  205. package/dist/src/cli/commands/browser.d.ts +0 -5
  206. package/dist/src/cli/commands/browser.js +11 -152
  207. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  208. package/dist/src/cli/commands/doctor/checks/node-version.js +25 -9
  209. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  210. package/dist/src/cli/commands/models.js +1 -1
  211. package/dist/src/cli/commands/platform.d.ts +1 -0
  212. package/dist/src/cli/commands/platform.js +111 -0
  213. package/dist/src/config/index.js +4 -4
  214. package/dist/src/config/loader.js +10 -4
  215. package/dist/src/config/models-json.js +1 -1
  216. package/dist/src/config/schema.d.ts +131 -84
  217. package/dist/src/config/schema.js +112 -59
  218. package/dist/src/connectors/composio-sessions.js +1 -3
  219. package/dist/src/extensions/lockfile.js +1 -1
  220. package/dist/src/extensions/marketplace.js +4 -0
  221. package/dist/src/gateway/agents-admin.js +1 -1
  222. package/dist/src/gateway/chat-stream/mapper.js +5 -1
  223. package/dist/src/gateway/chat-stream/protocol.d.ts +5 -1
  224. package/dist/src/gateway/clarify-runtime.d.ts +7 -5
  225. package/dist/src/gateway/clarify-runtime.js +8 -11
  226. package/dist/src/gateway/ephemeral-clarification-waiter.d.ts +17 -0
  227. package/dist/src/gateway/ephemeral-clarification-waiter.js +46 -0
  228. package/dist/src/gateway/file-path-classifier.js +1 -1
  229. package/dist/src/gateway/heartbeat/service.js +1 -1
  230. package/dist/src/gateway/hono/lib/config-payload.d.ts +12 -26
  231. package/dist/src/gateway/hono/lib/config-payload.js +11 -40
  232. package/dist/src/gateway/hono/routes/agent-stream.js +44 -18
  233. package/dist/src/gateway/hono/routes/browser-automations.d.ts +3 -0
  234. package/dist/src/gateway/hono/routes/browser-automations.js +77 -0
  235. package/dist/src/gateway/hono/routes/browser-install.js +0 -32
  236. package/dist/src/gateway/hono/routes/browser.d.ts +0 -17
  237. package/dist/src/gateway/hono/routes/browser.js +46 -568
  238. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
  239. package/dist/src/gateway/hono/routes/config.js +0 -11
  240. package/dist/src/gateway/hono/routes/lazy-bundles.js +5 -5
  241. package/dist/src/gateway/hono/routes/models.js +1 -1
  242. package/dist/src/gateway/hono/routes/session-input-handler.d.ts +10 -2
  243. package/dist/src/gateway/hono/routes/side-chats.js +24 -4
  244. package/dist/src/gateway/security/gateway-scopes.js +1 -1
  245. package/dist/src/gateway/service/agent-runner.d.ts +25 -36
  246. package/dist/src/gateway/service/agent-runner.js +103 -32
  247. package/dist/src/gateway/service/config-coordinator.js +1 -1
  248. package/dist/src/gateway/service/run-gateway-agent.js +5 -2
  249. package/dist/src/gateway/service/session-input-coordinator.js +4 -1
  250. package/dist/src/gateway/service/sessions-api.js +1 -1
  251. package/dist/src/gateway/service.d.ts +8 -8
  252. package/dist/src/gateway/service.js +50 -37
  253. package/dist/src/gateway/side-chat/manager.d.ts +2 -1
  254. package/dist/src/gateway/side-chat/manager.js +5 -4
  255. package/dist/src/gateway/side-chat/run-service.d.ts +5 -1
  256. package/dist/src/gateway/side-chat/run-service.js +24 -23
  257. package/dist/src/gateway/side-chat/types.d.ts +3 -1
  258. package/dist/src/heartbeat/index.js +1 -1
  259. package/dist/src/platform/client.d.ts +121 -0
  260. package/dist/src/platform/client.js +108 -0
  261. package/dist/src/platform/contracts.d.ts +194 -0
  262. package/dist/src/platform/contracts.js +150 -0
  263. package/dist/src/platform/index.d.ts +4 -0
  264. package/dist/src/platform/index.js +9 -0
  265. package/dist/src/platform/resolution.d.ts +4 -0
  266. package/dist/src/platform/resolution.js +16 -0
  267. package/dist/src/platform/worker.d.ts +6 -0
  268. package/dist/src/platform/worker.js +75 -0
  269. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  270. package/dist/src/providers/index.js +2 -2
  271. package/dist/src/providers/model-registry.js +1 -1
  272. package/dist/src/providers/register-runtime-providers.js +1 -1
  273. package/dist/src/providers/xopc-cloud-config.js +3 -1
  274. package/dist/src/session/session-context-for-llm.js +41 -1
  275. package/dist/src/share/hosted-session-share.js +3 -1
  276. package/dist/src/share/share-thumbnail.js +1 -1
  277. package/dist/src/storage/sqlite/clarification-wait-repository.d.ts +41 -0
  278. package/dist/src/storage/sqlite/clarification-wait-repository.js +418 -0
  279. package/dist/src/storage/sqlite/index.d.ts +2 -1
  280. package/dist/src/storage/sqlite/index.js +2 -1
  281. package/dist/src/storage/sqlite/migrations/153_browser_control_v2.sql +45 -0
  282. package/dist/src/storage/sqlite/migrations/154_session_clarification_waits.sql +60 -0
  283. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  284. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  285. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  286. package/dist/src/storage/sqlite/schema.js +1 -1
  287. package/dist/src/storage/sqlite/schema.sql +16 -20
  288. package/dist/src/storage/sqlite/session-input-repository.d.ts +11 -6
  289. package/dist/src/tasks/home-query-service.js +1 -1
  290. package/dist/src/tui/tui-startup-resources.js +1 -1
  291. package/dist/src/tui/tui.js +1 -1
  292. package/dist/src/tunnel/env.js +3 -1
  293. package/dist/src/voice/realtime/agentEngine.js +7 -2
  294. package/dist/src/voice/realtime/runtime.types.d.ts +5 -0
  295. package/dist/src/work-discovery/service.js +1 -1
  296. package/dist/src/workflows/service/workflow-run-service.js +1 -1
  297. package/package.json +7 -7
  298. package/skills/creative/hatch-pet/SKILL.md +1 -1
  299. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-kILWelNb.js +0 -1
  300. package/dist/gateway/static/root/assets/apps-page-BnizTdgs.js +0 -1
  301. package/dist/gateway/static/root/assets/automations-workspace-CZRKqSqY.js +0 -6
  302. package/dist/gateway/static/root/assets/browser-settings-page-pN5LbChY.js +0 -8
  303. package/dist/gateway/static/root/assets/browser-workflow-inputs-BX1-uM9L.js +0 -1
  304. package/dist/gateway/static/root/assets/browser-workflows-page-C65MI57t.js +0 -3
  305. package/dist/gateway/static/root/assets/capabilities-settings-panel-CJw2e16J.js +0 -7
  306. package/dist/gateway/static/root/assets/channels-settings-CRgjb4Ck.js +0 -1
  307. package/dist/gateway/static/root/assets/connectors-page-Dcpdy06y.js +0 -2
  308. package/dist/gateway/static/root/assets/gateway-config-api-e3BRcgDx.js +0 -1
  309. package/dist/gateway/static/root/assets/gateway-settings-Cheo0Rkc.js +0 -1
  310. package/dist/gateway/static/root/assets/home-page-DVrTRqNc.js +0 -1
  311. package/dist/gateway/static/root/assets/index-B7CX4Qob.css +0 -2
  312. package/dist/gateway/static/root/assets/index-BHrpyJ4t.js +0 -72
  313. package/dist/gateway/static/root/assets/markdown-view-CQvzsE24.js +0 -201
  314. package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +0 -3
  315. package/dist/gateway/static/root/assets/note-detail-panel-CUd8O4K7.js +0 -5
  316. package/dist/gateway/static/root/assets/notes-page-BLQwd39W.js +0 -8
  317. package/dist/gateway/static/root/assets/project-detail-page-NttW338u.js +0 -1
  318. package/dist/gateway/static/root/assets/projects-page-BzH8pjEz.js +0 -1
  319. package/dist/gateway/static/root/assets/remote-access-hub-BxpjSDnL.js +0 -1
  320. package/dist/gateway/static/root/assets/sessions-page-BLMaibOb.js +0 -1
  321. package/dist/gateway/static/root/assets/settings-advanced-gate-BRvvKhoH.js +0 -1
  322. package/dist/gateway/static/root/assets/setup-status-panel-DTOsxQC1.js +0 -1
  323. package/dist/gateway/static/root/assets/skill-reload-api-BWYanBlQ.js +0 -1
  324. package/dist/gateway/static/root/assets/user-model-page-B_-SNat-.js +0 -2
  325. package/dist/gateway/static/root/assets/workflows-page-CNOT2Coo.js +0 -5
  326. package/dist/src/agent/tools/browser-recipe-tool.d.ts +0 -12
  327. package/dist/src/agent/tools/browser-recipe-tool.js +0 -113
  328. package/dist/src/browser/actions/extension-registry-bridge.d.ts +0 -5
  329. package/dist/src/browser/actions/extension-registry-bridge.js +0 -312
  330. package/dist/src/browser/actions/registry.d.ts +0 -5
  331. package/dist/src/browser/actions/registry.js +0 -741
  332. package/dist/src/browser/actions/types.d.ts +0 -65
  333. package/dist/src/browser/backend-from-config.d.ts +0 -22
  334. package/dist/src/browser/backend-from-config.js +0 -99
  335. package/dist/src/browser/browser-command-timeout.d.ts +0 -2
  336. package/dist/src/browser/browser-command-timeout.js +0 -11
  337. package/dist/src/browser/cdp-local-launcher.d.ts +0 -35
  338. package/dist/src/browser/cdp-local-launcher.js +0 -154
  339. package/dist/src/browser/cdp-supervisor.d.ts +0 -58
  340. package/dist/src/browser/cdp-supervisor.js +0 -133
  341. package/dist/src/browser/humanize.d.ts +0 -80
  342. package/dist/src/browser/humanize.js +0 -363
  343. package/dist/src/browser/manager.d.ts +0 -50
  344. package/dist/src/browser/manager.js +0 -251
  345. package/dist/src/browser/pipeline/output.d.ts +0 -35
  346. package/dist/src/browser/pipeline/output.js +0 -74
  347. package/dist/src/browser/pipeline/runner.d.ts +0 -27
  348. package/dist/src/browser/pipeline/runner.js +0 -453
  349. package/dist/src/browser/pipeline/schema.d.ts +0 -42
  350. package/dist/src/browser/pipeline/schema.js +0 -116
  351. package/dist/src/browser/pipeline/template.d.ts +0 -30
  352. package/dist/src/browser/pipeline/template.js +0 -112
  353. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -83
  354. package/dist/src/browser/providers/cloakbrowser.js +0 -612
  355. package/dist/src/browser/recipes/index.js +0 -3
  356. package/dist/src/browser/recipes/repository.d.ts +0 -13
  357. package/dist/src/browser/recipes/repository.js +0 -81
  358. package/dist/src/browser/recipes/runtime-service.d.ts +0 -6
  359. package/dist/src/browser/recipes/runtime-service.js +0 -30
  360. package/dist/src/browser/recipes/service.d.ts +0 -36
  361. package/dist/src/browser/recipes/service.js +0 -186
  362. package/dist/src/browser/recipes/types.d.ts +0 -36
  363. package/dist/src/browser/schemas.d.ts +0 -53
  364. package/dist/src/browser/schemas.js +0 -68
  365. package/dist/src/browser/session-lifecycle.d.ts +0 -40
  366. package/dist/src/browser/session-lifecycle.js +0 -136
  367. package/dist/src/browser/snapshot-helpers.d.ts +0 -24
  368. package/dist/src/browser/snapshot-helpers.js +0 -70
  369. package/dist/src/browser/stealth.d.ts +0 -46
  370. package/dist/src/browser/stealth.js +0 -163
  371. package/dist/src/gateway/clarify-bridge.d.ts +0 -46
  372. package/dist/src/gateway/clarify-bridge.js +0 -111
  373. package/dist/src/gateway/hono/routes/browser-workflows.d.ts +0 -3
  374. package/dist/src/gateway/hono/routes/browser-workflows.js +0 -78
  375. /package/dist/src/browser/{actions → automations}/types.js +0 -0
  376. /package/dist/src/browser/{recipes/types.js → drivers/browser-driver.js} +0 -0
@@ -0,0 +1,121 @@
1
+ import type { AgentTool } from '@earendil-works/pi-agent-core';
2
+ import type { BrowserAutomationService } from '../../browser/automations/index.js';
3
+ declare const BrowserAutomationToolSchema: import("@sinclair/typebox").TObject<{
4
+ action: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"list">, import("@sinclair/typebox").TLiteral<"get">, import("@sinclair/typebox").TLiteral<"save">, import("@sinclair/typebox").TLiteral<"enable">, import("@sinclair/typebox").TLiteral<"disable">, import("@sinclair/typebox").TLiteral<"delete">, import("@sinclair/typebox").TLiteral<"run">]>;
5
+ automationId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
6
+ definition: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
7
+ id: import("@sinclair/typebox").TString;
8
+ name: import("@sinclair/typebox").TString;
9
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
10
+ allowedDomains: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
11
+ risk: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"read">, import("@sinclair/typebox").TLiteral<"draft">, import("@sinclair/typebox").TLiteral<"external_effect">, import("@sinclair/typebox").TLiteral<"destructive">, import("@sinclair/typebox").TLiteral<"sensitive">]>;
12
+ inputs: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TObject<{
13
+ type: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"string">, import("@sinclair/typebox").TLiteral<"number">, import("@sinclair/typebox").TLiteral<"boolean">]>;
14
+ required: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
15
+ default: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean]>>;
16
+ description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
17
+ choices: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TBoolean]>>>;
18
+ }>>;
19
+ steps: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
20
+ action: import("@sinclair/typebox").TLiteral<"navigate">;
21
+ url: import("@sinclair/typebox").TString;
22
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
23
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
24
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
25
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
26
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
27
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
28
+ }>>;
29
+ }>, import("@sinclair/typebox").TObject<{
30
+ action: import("@sinclair/typebox").TLiteral<"click">;
31
+ target: import("@sinclair/typebox").TObject<{
32
+ role: import("@sinclair/typebox").TString;
33
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
34
+ nameIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
35
+ }>;
36
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
37
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
38
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
39
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
40
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
41
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
42
+ }>>;
43
+ }>, import("@sinclair/typebox").TObject<{
44
+ action: import("@sinclair/typebox").TLiteral<"fill">;
45
+ target: import("@sinclair/typebox").TObject<{
46
+ role: import("@sinclair/typebox").TString;
47
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
48
+ nameIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
49
+ }>;
50
+ value: import("@sinclair/typebox").TString;
51
+ submit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
52
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
53
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
54
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
55
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
56
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
57
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
58
+ }>>;
59
+ }>, import("@sinclair/typebox").TObject<{
60
+ action: import("@sinclair/typebox").TLiteral<"select">;
61
+ target: import("@sinclair/typebox").TObject<{
62
+ role: import("@sinclair/typebox").TString;
63
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
64
+ nameIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
65
+ }>;
66
+ value: import("@sinclair/typebox").TString;
67
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
68
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
69
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
70
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
71
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
72
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
73
+ }>>;
74
+ }>, import("@sinclair/typebox").TObject<{
75
+ action: import("@sinclair/typebox").TLiteral<"press">;
76
+ target: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
77
+ role: import("@sinclair/typebox").TString;
78
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
79
+ nameIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
80
+ }>>;
81
+ key: import("@sinclair/typebox").TString;
82
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
83
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
84
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
85
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
86
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
87
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
88
+ }>>;
89
+ }>, import("@sinclair/typebox").TObject<{
90
+ action: import("@sinclair/typebox").TLiteral<"scroll">;
91
+ target: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
92
+ role: import("@sinclair/typebox").TString;
93
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
94
+ nameIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
95
+ }>>;
96
+ deltaY: import("@sinclair/typebox").TNumber;
97
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
98
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
99
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
100
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
101
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
102
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
103
+ }>>;
104
+ }>, import("@sinclair/typebox").TObject<{
105
+ action: import("@sinclair/typebox").TLiteral<"wait">;
106
+ condition: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"page_idle">, import("@sinclair/typebox").TLiteral<"text">, import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>;
107
+ value: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
108
+ target: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
109
+ role: import("@sinclair/typebox").TString;
110
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
111
+ nameIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
112
+ }>>;
113
+ timeoutMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TInteger>;
114
+ }>]>>;
115
+ }>>;
116
+ inputs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>>;
117
+ }>;
118
+ export declare function createBrowserAutomationTool(deps: {
119
+ getBrowserAutomationService: () => BrowserAutomationService | undefined;
120
+ }): AgentTool<typeof BrowserAutomationToolSchema, Record<string, unknown>>;
121
+ export {};
@@ -0,0 +1,197 @@
1
+ import { Type } from "@sinclair/typebox";
2
+ //#region src/agent/tools/browser-automation-tool.ts
3
+ const ExpectationSchema = Type.Object({
4
+ urlIncludes: Type.Optional(Type.String()),
5
+ titleIncludes: Type.Optional(Type.String()),
6
+ textIncludes: Type.Optional(Type.String()),
7
+ ref: Type.Optional(Type.String()),
8
+ state: Type.Optional(Type.Union([Type.Literal("visible"), Type.Literal("hidden")]))
9
+ }, { additionalProperties: false });
10
+ const TargetSchema = Type.Object({
11
+ role: Type.String(),
12
+ name: Type.Optional(Type.String()),
13
+ nameIncludes: Type.Optional(Type.String())
14
+ }, { additionalProperties: false });
15
+ const StepSchema = Type.Union([
16
+ Type.Object({
17
+ action: Type.Literal("navigate"),
18
+ url: Type.String(),
19
+ expect: Type.Optional(ExpectationSchema)
20
+ }, { additionalProperties: false }),
21
+ Type.Object({
22
+ action: Type.Literal("click"),
23
+ target: TargetSchema,
24
+ expect: Type.Optional(ExpectationSchema)
25
+ }, { additionalProperties: false }),
26
+ Type.Object({
27
+ action: Type.Literal("fill"),
28
+ target: TargetSchema,
29
+ value: Type.String(),
30
+ submit: Type.Optional(Type.Boolean()),
31
+ expect: Type.Optional(ExpectationSchema)
32
+ }, { additionalProperties: false }),
33
+ Type.Object({
34
+ action: Type.Literal("select"),
35
+ target: TargetSchema,
36
+ value: Type.String(),
37
+ expect: Type.Optional(ExpectationSchema)
38
+ }, { additionalProperties: false }),
39
+ Type.Object({
40
+ action: Type.Literal("press"),
41
+ target: Type.Optional(TargetSchema),
42
+ key: Type.String(),
43
+ expect: Type.Optional(ExpectationSchema)
44
+ }, { additionalProperties: false }),
45
+ Type.Object({
46
+ action: Type.Literal("scroll"),
47
+ target: Type.Optional(TargetSchema),
48
+ deltaY: Type.Number(),
49
+ expect: Type.Optional(ExpectationSchema)
50
+ }, { additionalProperties: false }),
51
+ Type.Object({
52
+ action: Type.Literal("wait"),
53
+ condition: Type.Union([
54
+ Type.Literal("page_idle"),
55
+ Type.Literal("text"),
56
+ Type.Literal("visible"),
57
+ Type.Literal("hidden")
58
+ ]),
59
+ value: Type.Optional(Type.String()),
60
+ target: Type.Optional(TargetSchema),
61
+ timeoutMs: Type.Optional(Type.Integer())
62
+ }, { additionalProperties: false })
63
+ ]);
64
+ const BrowserAutomationToolSchema = Type.Object({
65
+ action: Type.Union([
66
+ Type.Literal("list"),
67
+ Type.Literal("get"),
68
+ Type.Literal("save"),
69
+ Type.Literal("enable"),
70
+ Type.Literal("disable"),
71
+ Type.Literal("delete"),
72
+ Type.Literal("run")
73
+ ]),
74
+ automationId: Type.Optional(Type.String()),
75
+ definition: Type.Optional(Type.Object({
76
+ id: Type.String(),
77
+ name: Type.String(),
78
+ description: Type.Optional(Type.String()),
79
+ allowedDomains: Type.Array(Type.String()),
80
+ risk: Type.Union([
81
+ Type.Literal("read"),
82
+ Type.Literal("draft"),
83
+ Type.Literal("external_effect"),
84
+ Type.Literal("destructive"),
85
+ Type.Literal("sensitive")
86
+ ]),
87
+ inputs: Type.Record(Type.String(), Type.Object({
88
+ type: Type.Union([
89
+ Type.Literal("string"),
90
+ Type.Literal("number"),
91
+ Type.Literal("boolean")
92
+ ]),
93
+ required: Type.Optional(Type.Boolean()),
94
+ default: Type.Optional(Type.Union([
95
+ Type.String(),
96
+ Type.Number(),
97
+ Type.Boolean()
98
+ ])),
99
+ description: Type.Optional(Type.String()),
100
+ choices: Type.Optional(Type.Array(Type.Union([
101
+ Type.String(),
102
+ Type.Number(),
103
+ Type.Boolean()
104
+ ])))
105
+ }, { additionalProperties: false })),
106
+ steps: Type.Array(StepSchema)
107
+ }, { additionalProperties: false })),
108
+ inputs: Type.Optional(Type.Record(Type.String(), Type.Unknown()))
109
+ }, { additionalProperties: false });
110
+ function createBrowserAutomationTool(deps) {
111
+ return {
112
+ name: "browser_automation",
113
+ label: "Browser Automation",
114
+ description: "Create and run strict JSON browser automations. Saved steps use semantic role/name targets and exact allowed domains; CSS, XPath, JavaScript, cookies, and network access are not supported.",
115
+ parameters: BrowserAutomationToolSchema,
116
+ async execute(_toolCallId, params, signal) {
117
+ const service = deps.getBrowserAutomationService();
118
+ if (!service) return output("Browser automation is unavailable.", { ok: false });
119
+ if (params.action === "list") {
120
+ const automations = service.list();
121
+ return output(automations.length ? automations.map((item) => `- ${item.id}: ${item.definition.name} (${item.status}, ${item.definition.risk})`).join("\n") : "No browser automations.", {
122
+ ok: true,
123
+ automations
124
+ });
125
+ }
126
+ if (params.action === "save") {
127
+ if (!params.definition) return output("definition is required.", { ok: false });
128
+ try {
129
+ const automation = service.save({ definition: params.definition });
130
+ return output(`Saved browser automation: ${automation.definition.name}`, {
131
+ ok: true,
132
+ automation
133
+ });
134
+ } catch (error) {
135
+ return output(`Could not save browser automation: ${message(error)}`, {
136
+ ok: false,
137
+ error: message(error)
138
+ });
139
+ }
140
+ }
141
+ const id = params.automationId?.trim();
142
+ if (!id) return output("automationId is required.", { ok: false });
143
+ const current = service.get(id);
144
+ if (params.action === "get") return current ? output(JSON.stringify(current.definition, null, 2), {
145
+ ok: true,
146
+ automation: current
147
+ }) : output(`Browser automation not found: ${id}`, { ok: false });
148
+ if (params.action === "enable" || params.action === "disable") {
149
+ if (!current) return output(`Browser automation not found: ${id}`, { ok: false });
150
+ const automation = service.save({
151
+ definition: current.definition,
152
+ expectedId: id,
153
+ status: params.action === "enable" ? "enabled" : "disabled"
154
+ });
155
+ return output(`${automation.definition.name} is ${automation.status}.`, {
156
+ ok: true,
157
+ automation
158
+ });
159
+ }
160
+ if (params.action === "delete") try {
161
+ const removed = service.remove(id);
162
+ return output(removed ? `Deleted browser automation: ${id}` : `Browser automation not found: ${id}`, { ok: removed });
163
+ } catch (error) {
164
+ return output(`Could not delete browser automation: ${message(error)}`, {
165
+ ok: false,
166
+ error: message(error)
167
+ });
168
+ }
169
+ try {
170
+ const run = await service.runAndWait(id, params.inputs ?? {}, signal);
171
+ return output(run.status === "succeeded" ? `Browser automation ${id} completed.` : `Browser automation ${id} ${run.status}: ${run.error ?? "No details"}`, {
172
+ ok: run.status === "succeeded",
173
+ run
174
+ });
175
+ } catch (error) {
176
+ return output(`Browser automation failed: ${message(error)}`, {
177
+ ok: false,
178
+ error: message(error)
179
+ });
180
+ }
181
+ }
182
+ };
183
+ }
184
+ function output(text, details) {
185
+ return {
186
+ content: [{
187
+ type: "text",
188
+ text
189
+ }],
190
+ details
191
+ };
192
+ }
193
+ function message(error) {
194
+ return error instanceof Error ? error.message : String(error);
195
+ }
196
+ //#endregion
197
+ export { createBrowserAutomationTool };
@@ -3,11 +3,25 @@ export type ClarifyRequestPayload = {
3
3
  kind?: 'approval';
4
4
  question: string;
5
5
  choices?: string[];
6
- default?: string;
6
+ suggestedAnswer?: string;
7
+ /** Stable hash of the exact operation guarded by an approval. */
8
+ approvalKey?: string;
7
9
  };
8
- export type GatewayClarifyRequestFn = (sessionKey: string, request: ClarifyRequestPayload) => Promise<string>;
10
+ export type ClarifyRequestResult = {
11
+ status: 'answered';
12
+ answer: string;
13
+ } | {
14
+ status: 'waiting';
15
+ waitId: string;
16
+ expiresAt?: number;
17
+ };
18
+ export type GatewayClarifyRequestFn = (context: {
19
+ sessionKey: string;
20
+ runId: string;
21
+ toolCallId: string;
22
+ }, request: ClarifyRequestPayload) => Promise<ClarifyRequestResult>;
9
23
  export interface ClarifyToolDeps {
10
24
  /** Resolve a per-turn callback; returns null when clarification is unavailable. */
11
- resolveAskUser: () => ((request: ClarifyRequestPayload) => Promise<string>) | null;
25
+ resolveAskUser: (toolCallId: string) => ((request: ClarifyRequestPayload) => Promise<ClarifyRequestResult>) | null;
12
26
  }
13
27
  export declare function createClarifyTool(deps: ClarifyToolDeps): AgentTool;
@@ -7,7 +7,7 @@ const ClarifySchema = Type.Object({
7
7
  minItems: 2,
8
8
  maxItems: 10
9
9
  })),
10
- default: Type.Optional(Type.String({ description: "Default answer if the user does not respond within timeout." }))
10
+ suggestedAnswer: Type.Optional(Type.String({ description: "Optional recommendation shown to the user. It is never selected automatically." }))
11
11
  });
12
12
  function waitForAbort(signal) {
13
13
  return new Promise((_, reject) => {
@@ -23,40 +23,42 @@ function createClarifyTool(deps) {
23
23
  return {
24
24
  name: "clarify",
25
25
  label: "❓ Clarify",
26
- description: "Ask the user a clarifying question and wait for their response.\n\nUse this when you need more information to proceed correctly, rather than guessing.\n\nWHEN TO USE:\n- Ambiguous instructions with multiple valid interpretations\n- Missing critical information (which file, which approach, etc.)\n- Confirming destructive or irreversible actions\n\nWHEN NOT TO USE:\n- When you can reasonably infer the answer from context\n- For trivial decisions that do not affect the task\n- When the user explicitly said \"just do it\" or \"your choice\"\n\nTIPS:\n- Provide choices when there are clear options (faster for the user)\n- Keep questions short and specific\n- Include a default when one option is clearly more likely",
26
+ description: "Ask the user a clarifying question and pause the objective until they respond.\n\nUse this when you need more information to proceed correctly, rather than guessing.\n\nWHEN TO USE:\n- Ambiguous instructions with multiple valid interpretations\n- Missing critical information (which file, which approach, etc.)\n- Confirming destructive or irreversible actions\n\nWHEN NOT TO USE:\n- When you can reasonably infer the answer from context\n- For trivial decisions that do not affect the task\n- When the user explicitly said \"just do it\" or \"your choice\"\n\nTIPS:\n- Provide choices when there are clear options (faster for the user)\n- Keep questions short and specific\n- Include a suggested answer when one option is clearly more likely",
27
27
  parameters: ClarifySchema,
28
- async execute(_toolCallId, params, signal) {
28
+ async execute(toolCallId, params, signal) {
29
29
  const p = params;
30
- const askUser = deps.resolveAskUser();
31
- if (!askUser) {
32
- if (p.default !== void 0 && p.default !== "") return {
33
- content: [{
34
- type: "text",
35
- text: `Interactive clarification is not available in this environment. Using default: ${p.default}`
36
- }],
37
- details: { answer: p.default }
38
- };
39
- return {
40
- content: [{
41
- type: "text",
42
- text: "Clarification is not available in this environment (no active webchat run). Provide a default or proceed with the best assumption."
43
- }],
44
- details: { answer: "" }
45
- };
46
- }
30
+ const askUser = deps.resolveAskUser(toolCallId);
31
+ if (!askUser) return {
32
+ content: [{
33
+ type: "text",
34
+ text: "Clarification is not available in this environment. Proceed with the best safe assumption or explain what is missing."
35
+ }],
36
+ details: { answer: "" }
37
+ };
47
38
  const payload = {
48
39
  question: p.question,
49
40
  choices: p.choices,
50
- default: p.default
41
+ suggestedAnswer: p.suggestedAnswer
51
42
  };
52
43
  try {
53
- const answer = await Promise.race([askUser(payload), waitForAbort(signal)]);
44
+ const result = await Promise.race([askUser(payload), waitForAbort(signal)]);
45
+ if (result.status === "waiting") return {
46
+ content: [{
47
+ type: "text",
48
+ text: "Waiting for the user to answer this clarification. End the current run now."
49
+ }],
50
+ details: {
51
+ answer: "",
52
+ waitId: result.waitId,
53
+ status: result.status
54
+ }
55
+ };
54
56
  return {
55
57
  content: [{
56
58
  type: "text",
57
- text: `User answered: ${answer}`
59
+ text: `User answered: ${result.answer}`
58
60
  }],
59
- details: { answer }
61
+ details: { answer: result.answer }
60
62
  };
61
63
  } catch (error) {
62
64
  const message = error instanceof Error ? error.message : String(error);
@@ -65,14 +67,7 @@ function createClarifyTool(deps) {
65
67
  type: "text",
66
68
  text: "Clarification cancelled (run aborted)."
67
69
  }],
68
- details: { answer: p.default ?? "" }
69
- };
70
- if (p.default !== void 0 && p.default !== "" && message.toLowerCase().includes("timeout")) return {
71
- content: [{
72
- type: "text",
73
- text: `User did not respond in time. Using default: ${p.default}`
74
- }],
75
- details: { answer: p.default }
70
+ details: { answer: "" }
76
71
  };
77
72
  return {
78
73
  content: [{
@@ -5,7 +5,7 @@ import * as readline from "node:readline/promises";
5
5
  * stdin/stdout prompts for `clarify` when running the CLI agent (no gateway).
6
6
  */
7
7
  function createCliReadlineClarifyRequestFn() {
8
- return async (_sessionKey, req) => {
8
+ return async (_context, req) => {
9
9
  const rl = readline.createInterface({
10
10
  input: stdin,
11
11
  output: stdout
@@ -15,19 +15,34 @@ function createCliReadlineClarifyRequestFn() {
15
15
  if (choices && choices.length >= 2) {
16
16
  stdout.write(`\n${req.question}\n`);
17
17
  choices.forEach((c, i) => stdout.write(` ${i + 1}) ${c}\n`));
18
- if (req.default) stdout.write(` (default: ${req.default})\n`);
18
+ if (req.suggestedAnswer) stdout.write(` (recommended: ${req.suggestedAnswer})\n`);
19
19
  const raw = (await rl.question("Choice (number or exact text): ")).trim();
20
20
  const n = parseInt(raw, 10);
21
- if (!Number.isNaN(n) && n >= 1 && n <= choices.length) return choices[n - 1];
22
- if (raw) return raw;
23
- if (req.default) return req.default;
21
+ if (!Number.isNaN(n) && n >= 1 && n <= choices.length) return {
22
+ status: "answered",
23
+ answer: choices[n - 1]
24
+ };
25
+ if (raw) return {
26
+ status: "answered",
27
+ answer: raw
28
+ };
29
+ if (req.suggestedAnswer) return {
30
+ status: "answered",
31
+ answer: req.suggestedAnswer
32
+ };
24
33
  throw new Error("No answer provided");
25
34
  }
26
35
  stdout.write(`\n${req.question}\n`);
27
- if (req.default) stdout.write(`(Press Enter for default: ${req.default})\n`);
36
+ if (req.suggestedAnswer) stdout.write(`(Press Enter for recommendation: ${req.suggestedAnswer})\n`);
28
37
  const raw = (await rl.question("> ")).trim();
29
- if (raw) return raw;
30
- if (req.default) return req.default;
38
+ if (raw) return {
39
+ status: "answered",
40
+ answer: raw
41
+ };
42
+ if (req.suggestedAnswer) return {
43
+ status: "answered",
44
+ answer: req.suggestedAnswer
45
+ };
31
46
  throw new Error("No answer provided");
32
47
  } finally {
33
48
  rl.close();
@@ -18,7 +18,7 @@ import type { MemoryManager } from '../memory/manager.js';
18
18
  import type { SessionStore } from '../../session/store.js';
19
19
  import type { GatewayClarifyRequestFn } from './clarify-tool.js';
20
20
  import type { AutomationService } from '../../automations/index.js';
21
- import type { BrowserRecipeService } from '../../browser/recipes/index.js';
21
+ import type { BrowserAutomationService } from '../../browser/automations/index.js';
22
22
  import type { NotesService } from '../../notes/index.js';
23
23
  import type { ProjectService } from '../../projects/index.js';
24
24
  import type { LocalAppService } from '../../local-apps/index.js';
@@ -54,7 +54,8 @@ export interface ToolFactoryDeps {
54
54
  };
55
55
  /** Gateway: enables the `automation` tool. */
56
56
  getAutomationService?: () => AutomationService | undefined;
57
- getBrowserRecipeService?: () => BrowserRecipeService | undefined;
57
+ getBrowserAutomationService?: () => BrowserAutomationService | undefined;
58
+ emitBrowserEvent?: (type: string, payload: unknown) => void;
58
59
  /** Gateway: enables the `xopc_use` product-object tool. */
59
60
  getNotesService?: () => NotesService | undefined;
60
61
  getProjectService?: () => ProjectService | undefined;
@@ -98,10 +99,8 @@ export interface CreateCoreToolsOptions {
98
99
  }
99
100
  export declare class AgentToolsFactory {
100
101
  private deps;
101
- private browserManager;
102
- /** One dialog/console supervisor per chat session (browser tab). */
103
- private readonly browserTaskSupervisors;
104
- /** Cached readiness probe — keyed by backend mode + extension host:port. */
102
+ private browserRuntime;
103
+ /** Cached readiness probe keyed by the active driver configuration. */
105
104
  private browserReadinessCache;
106
105
  constructor(deps: ToolFactoryDeps);
107
106
  private prepareRuntimeEnv;
@@ -109,9 +108,7 @@ export declare class AgentToolsFactory {
109
108
  private checkBrowserReadinessCached;
110
109
  /** Invalidate the readiness cache (config hot-reload, settings-page save, etc.). */
111
110
  invalidateBrowserReadinessCache(): void;
112
- private browserSupervisorForTask;
113
- private acquireBrowserPage;
114
- private ensureBrowserManager;
111
+ private ensureBrowserRuntime;
115
112
  /** Close Playwright and all pages (gateway stop, agent manager dispose, or config hot-reload). */
116
113
  shutdownBrowser(): Promise<void>;
117
114
  /** Drop the tab for a session when its agent instance is removed. */