@xopcai/xopc 0.0.253 → 0.0.255

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 (203) hide show
  1. package/dist/browser-ext/dist/background.js +59 -13
  2. package/dist/browser-ext/dist/content.js +0 -5
  3. package/dist/browser-ext/manifest.json +2 -1
  4. package/dist/extensions/telegram/xopc.extension.json +1 -1
  5. package/dist/gateway/static/root/assets/{activity-store-CeS1bgXP.js → activity-store-DvjK5FEm.js} +1 -1
  6. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BdF3HhCW.js → agent-avatar-dicebear-Cqspzbf_.js} +1 -1
  7. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-CL3Mi-uM.js +1 -0
  8. package/dist/gateway/static/root/assets/agents-odqXmGhA.js +1 -0
  9. package/dist/gateway/static/root/assets/{api-zMPeC0yU.js → api-CsYi3heY.js} +1 -1
  10. package/dist/gateway/static/root/assets/{app-management-settings-panel-BaAFln8W.js → app-management-settings-panel-Gd4a5hdE.js} +1 -1
  11. package/dist/gateway/static/root/assets/{appearance-settings-CXvsoBlw.js → appearance-settings-CZ6KOnbd.js} +1 -1
  12. package/dist/gateway/static/root/assets/apps-page-DyBDoCam.js +1 -0
  13. package/dist/gateway/static/root/assets/{archive-plugin-C0o_mVQI.js → archive-plugin-y82Rwhjm.js} +1 -1
  14. package/dist/gateway/static/root/assets/{attachment-load-B5Ry3tGL.js → attachment-load-D46SGNpv.js} +1 -1
  15. package/dist/gateway/static/root/assets/{automations-page-DY5QAEQd.js → automations-page-wilciIZ1.js} +1 -1
  16. package/dist/gateway/static/root/assets/automations-workspace-8U86Umig.js +6 -0
  17. package/dist/gateway/static/root/assets/{binary-plugins-BydpEgBA.js → binary-plugins-CuMkNNCe.js} +1 -1
  18. package/dist/gateway/static/root/assets/{block-editor-D0CpUOMo.js → block-editor-DFnPsrxI.js} +44 -44
  19. package/dist/gateway/static/root/assets/{browser-automation-inputs-DzbTsGI6.js → browser-automation-inputs-hlmcSp4p.js} +1 -1
  20. package/dist/gateway/static/root/assets/{browser-automations-page-D7fZYjni.js → browser-automations-page-OjZvbARU.js} +2 -2
  21. package/dist/gateway/static/root/assets/browser-settings-page-DOUG84qV.js +8 -0
  22. package/dist/gateway/static/root/assets/capabilities-settings-panel-CG73Mwi8.js +7 -0
  23. package/dist/gateway/static/root/assets/channels-settings-MDywEWWM.js +1 -0
  24. package/dist/gateway/static/root/assets/{channels-status-swr-BGGRTkn6.js → channels-status-swr-D1HHFzkE.js} +1 -1
  25. package/dist/gateway/static/root/assets/{chat-terminal-dock-_CP4nvlg.js → chat-terminal-dock-Ce_T9BPq.js} +2 -2
  26. package/dist/gateway/static/root/assets/connectors-page-D29p6Zvm.js +2 -0
  27. package/dist/gateway/static/root/assets/{cron-expression-g2U8Rllf.js → cron-expression-BRrCwYyD.js} +1 -1
  28. package/dist/gateway/static/root/assets/date-picker-C35RuuWW.js +1 -0
  29. package/dist/gateway/static/root/assets/{dependency-picker-D-0gcbbM.js → dependency-picker-4pNXVcRM.js} +1 -1
  30. package/dist/gateway/static/root/assets/{desktop-pet-settings-D7kvWQ9H.js → desktop-pet-settings-BvV1UA5g.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-Cl3JRIu6.js → desktop-pet-z91GYnPf.js} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-debug-page-DtP2tJHY.js → extension-debug-page-CkVF5HvV.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-page-CphZDdoT.js → extension-page-DW0zQGaB.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-settings-page-CsxVLV4-.js → extension-settings-page-BLQhizZ3.js} +1 -1
  35. package/dist/gateway/static/root/assets/{gateway-config-swr-BW3Bx-aV.js → gateway-config-swr-02BBC1mK.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-settings-DxBZ05dX.js → gateway-settings-rAXx8FGP.js} +1 -1
  37. package/dist/gateway/static/root/assets/{gateway-startup-retry-DAq74TZe.js → gateway-startup-retry-XZnY6621.js} +1 -1
  38. package/dist/gateway/static/root/assets/heartbeat-settings-BaW_r1t9.js +1 -0
  39. package/dist/gateway/static/root/assets/home-page-BoTS8-Z9.js +1 -0
  40. package/dist/gateway/static/root/assets/{image-generation-api-MPuaXDRs.js → image-generation-api-CIcKz4Xs.js} +1 -1
  41. package/dist/gateway/static/root/assets/index-DsonmRCH.css +2 -0
  42. package/dist/gateway/static/root/assets/index-PksHo9hS.js +74 -0
  43. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-CfhaTqgE.js → keyboard-shortcuts-settings-yfaGz6SE.js} +1 -1
  44. package/dist/gateway/static/root/assets/{local-app-workbench-page-CR6asX7L.js → local-app-workbench-page-B3flRQH1.js} +2 -2
  45. package/dist/gateway/static/root/assets/{local-apps-page-g01W3kEK.js → local-apps-page-Cp-nEtgV.js} +1 -1
  46. package/dist/gateway/static/root/assets/{locale-store-BkeaPZpn.js → locale-store-VsboRLD7.js} +1 -1
  47. package/dist/gateway/static/root/assets/logs-page-DkqsRCri.js +2 -0
  48. package/dist/gateway/static/root/assets/{management-settings-DeGxJF_Z.js → management-settings-24_JyDPk.js} +1 -1
  49. package/dist/gateway/static/root/assets/{markdown-view-Ca7BRBLL.js → markdown-view-CPXhy6nh.js} +1 -1
  50. package/dist/gateway/static/root/assets/{media-plugins-FmOhmzlD.js → media-plugins-CwLvIb9r.js} +1 -1
  51. package/dist/gateway/static/root/assets/messages-DngsF_Kx.js +3 -0
  52. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-BXNbn05L.js → mobile-pairing-wizard-BbJCDv57.js} +1 -1
  53. package/dist/gateway/static/root/assets/note-detail-panel-OklYXK7y.js +5 -0
  54. package/dist/gateway/static/root/assets/notes-page-BjfgJIQw.js +8 -0
  55. package/dist/gateway/static/root/assets/{page-tabs-pyukZ1PJ.js → page-tabs-0YXn9Gkl.js} +1 -1
  56. package/dist/gateway/static/root/assets/popover-select-CKBYnT3c.js +1 -0
  57. package/dist/gateway/static/root/assets/{preview-open-alternatives-slFHoMUe.js → preview-open-alternatives-2jVV5kfZ.js} +1 -1
  58. package/dist/gateway/static/root/assets/{product-open-page-CXa3FNNk.js → product-open-page-D7p0NfTK.js} +1 -1
  59. package/dist/gateway/static/root/assets/project-detail-page-rLNM2mP0.js +1 -0
  60. package/dist/gateway/static/root/assets/projects-page-D6jY2ZWl.js +1 -0
  61. package/dist/gateway/static/root/assets/{registry-api-CviQoUBf.js → registry-api-DlTWbXQA.js} +1 -1
  62. package/dist/gateway/static/root/assets/remote-access-hub-CZZg0kXc.js +1 -0
  63. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-O9D9o7-O.js → runtime-tools-settings-panel-B-NDgmJ4.js} +2 -2
  64. package/dist/gateway/static/root/assets/{schema-form-8FesicnL.js → schema-form-DZYeBS1v.js} +1 -1
  65. package/dist/gateway/static/root/assets/sessions-page-BvuxJegi.js +1 -0
  66. package/dist/gateway/static/root/assets/settings-advanced-gate-BAQHP4mB.js +1 -0
  67. package/dist/gateway/static/root/assets/{settings-form-section-CBic9TFH.js → settings-form-section-zy5UMvPk.js} +1 -1
  68. package/dist/gateway/static/root/assets/{settings-page-Xz66_Mjg.js → settings-page-CTuipbJq.js} +1 -1
  69. package/dist/gateway/static/root/assets/setup-status-panel-BkWoc5j5.js +1 -0
  70. package/dist/gateway/static/root/assets/{share-preview-page--JpjwB58.js → share-preview-page-D3Uawo_h.js} +1 -1
  71. package/dist/gateway/static/root/assets/shares-settings-B2doziIn.js +1 -0
  72. package/dist/gateway/static/root/assets/skill-reload-api-D2ymjqG5.js +1 -0
  73. package/dist/gateway/static/root/assets/{skills-page-fVKExKv5.js → skills-page-DDbabz7p.js} +1 -1
  74. package/dist/gateway/static/root/assets/{skills-page.utils-Yv9u3uJp.js → skills-page.utils-DkGhbiMa.js} +1 -1
  75. package/dist/gateway/static/root/assets/{system-settings-panel-CCWjVdc2.js → system-settings-panel-Fc-WbX6-.js} +1 -1
  76. package/dist/gateway/static/root/assets/task-detail-page-7w7eB9nB.js +1 -0
  77. package/dist/gateway/static/root/assets/{theme-store-BtkaVpMm.js → theme-store-vdB57bTn.js} +1 -1
  78. package/dist/gateway/static/root/assets/{tunnel-api-C__W9BaN.js → tunnel-api-DZ0evABj.js} +1 -1
  79. package/dist/gateway/static/root/assets/{use-autosave-Dow9RRcq.js → use-autosave-Ckof_m7e.js} +1 -1
  80. package/dist/gateway/static/root/assets/user-model-page-CcNCyrXZ.js +2 -0
  81. package/dist/gateway/static/root/assets/{voice-api-key-field-CvF3lEyx.js → voice-api-key-field-CnmtpWlq.js} +1 -1
  82. package/dist/gateway/static/root/assets/{voice-config-api-BEUVAyM6.js → voice-config-api-OA04c71t.js} +1 -1
  83. package/dist/gateway/static/root/assets/{work-discovery-overlay-B9PDfReq.js → work-discovery-overlay-sxvsDIC3.js} +1 -1
  84. package/dist/gateway/static/root/assets/workflow-run-setup-panel-CUCfBpPF.js +3 -0
  85. package/dist/gateway/static/root/assets/workflows-page-Bp-nvnLa.js +5 -0
  86. package/dist/gateway/static/root/index.html +11 -11
  87. package/dist/package.js +1 -1
  88. package/dist/src/agent/agent-manager.js +4 -4
  89. package/dist/src/agent/background-review/run-background-review.js +1 -1
  90. package/dist/src/agent/embedded/model-runtime.js +1 -1
  91. package/dist/src/agent/embedded/run-for-session.js +1 -1
  92. package/dist/src/agent/image/tool-model-config.js +1 -1
  93. package/dist/src/agent/mcp/oauth/mcp-oauth-store.js +1 -1
  94. package/dist/src/agent/service.js +2 -2
  95. package/dist/src/agent/session/session-inspector.js +1 -1
  96. package/dist/src/agent/skills/hub-lock.js +1 -1
  97. package/dist/src/agent/tasks/task-judge-service.js +3 -3
  98. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +17 -2
  99. package/dist/src/agent/tools/browser/tool/schemas.d.ts +85 -1
  100. package/dist/src/agent/tools/browser/tool/schemas.js +212 -5
  101. package/dist/src/agent/tools/create-share-tool.js +39 -1
  102. package/dist/src/agent/tools/xopc-use-tool.js +2 -2
  103. package/dist/src/ai-assist/text-assist.js +1 -1
  104. package/dist/src/auth/credentials.js +2 -2
  105. package/dist/src/auth/oauth/xopc-cloud.js +1 -1
  106. package/dist/src/auth/profiles/store.js +1 -1
  107. package/dist/src/auth/sync-provider-auth.js +2 -2
  108. package/dist/src/browser/drivers/extension-driver.d.ts +4 -4
  109. package/dist/src/browser/drivers/extension-driver.js +20 -8
  110. package/dist/src/browser/drivers/playwright-driver.js +1 -1
  111. package/dist/src/browser/providers/browser-ext-install.d.ts +3 -0
  112. package/dist/src/browser/providers/browser-ext-install.js +19 -4
  113. package/dist/src/browser/providers/extension.d.ts +14 -1
  114. package/dist/src/browser/providers/extension.js +89 -11
  115. package/dist/src/browser/providers/playwright-install.js +8 -12
  116. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  117. package/dist/src/cli/commands/models.js +1 -1
  118. package/dist/src/cli/commands/tunnel.js +3 -3
  119. package/dist/src/config/index.js +4 -4
  120. package/dist/src/config/loader.js +2 -2
  121. package/dist/src/config/models-json.js +1 -1
  122. package/dist/src/extensions/lockfile.js +1 -1
  123. package/dist/src/gateway/agents-admin.js +1 -1
  124. package/dist/src/gateway/device-routes.js +1 -1
  125. package/dist/src/gateway/file-path-classifier.js +1 -1
  126. package/dist/src/gateway/heartbeat/service.js +1 -1
  127. package/dist/src/gateway/hono/lib/config-payload.js +2 -2
  128. package/dist/src/gateway/hono/routes/browser.js +149 -27
  129. package/dist/src/gateway/hono/routes/lazy-bundles.js +3 -3
  130. package/dist/src/gateway/hono/routes/models.js +1 -1
  131. package/dist/src/gateway/hono/routes/sessions.js +1 -1
  132. package/dist/src/gateway/hono/routes/shares.js +404 -7
  133. package/dist/src/gateway/hono/routes/site-shares.js +19 -13
  134. package/dist/src/gateway/hono/routes/tunnel.js +1 -1
  135. package/dist/src/gateway/hono/routes/workflows.js +2 -2
  136. package/dist/src/gateway/service/config-coordinator.js +1 -1
  137. package/dist/src/gateway/service/sessions-api.js +1 -1
  138. package/dist/src/gateway/service.js +13 -13
  139. package/dist/src/heartbeat/index.js +1 -1
  140. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -1
  141. package/dist/src/providers/index.js +2 -2
  142. package/dist/src/providers/model-registry.js +1 -1
  143. package/dist/src/providers/model-thinking.js +57 -20
  144. package/dist/src/providers/register-runtime-providers.js +1 -1
  145. package/dist/src/remote-access/exposure-manager.js +1 -1
  146. package/dist/src/session/index.js +1 -1
  147. package/dist/src/session/store.js +1 -1
  148. package/dist/src/share/hosted-note-publication.d.ts +22 -0
  149. package/dist/src/share/hosted-note-publication.js +96 -0
  150. package/dist/src/share/hosted-session-share.d.ts +86 -7
  151. package/dist/src/share/hosted-session-share.js +72 -15
  152. package/dist/src/share/hosted-static-site-publication.d.ts +16 -0
  153. package/dist/src/share/hosted-static-site-publication.js +108 -0
  154. package/dist/src/share/hosted-static-site-publish.d.ts +23 -0
  155. package/dist/src/share/hosted-static-site-publish.js +53 -0
  156. package/dist/src/share/note-share-service.d.ts +1 -0
  157. package/dist/src/share/note-share-service.js +4 -4
  158. package/dist/src/share/share-url.d.ts +1 -1
  159. package/dist/src/share/share-url.js +14 -9
  160. package/dist/src/tasks/home-query-service.js +2 -2
  161. package/dist/src/tui/backends/embedded-backend.js +2 -2
  162. package/dist/src/tui/tui-agent-events.js +1 -1
  163. package/dist/src/tui/tui-startup-resources.js +1 -1
  164. package/dist/src/tui/tui.js +1 -1
  165. package/dist/src/tunnel/index.js +1 -1
  166. package/dist/src/tunnel/tunnel-service.js +1 -1
  167. package/dist/src/voice/realtime/agentEngine.js +17 -0
  168. package/dist/src/voice/realtime/memory-context.js +1 -1
  169. package/dist/src/voice/realtime/playback-echo.d.ts +2 -0
  170. package/dist/src/voice/realtime/playback-echo.js +15 -0
  171. package/dist/src/work-discovery/service.js +1 -1
  172. package/dist/src/workflows/service/workflow-run-service.js +2 -2
  173. package/package.json +2 -2
  174. package/dist/gateway/static/root/assets/agent-defaults-settings-panel-Bs34Kp0K.js +0 -1
  175. package/dist/gateway/static/root/assets/agents-DARlgjTm.js +0 -1
  176. package/dist/gateway/static/root/assets/apps-page-BhgvfBJT.js +0 -1
  177. package/dist/gateway/static/root/assets/automations-workspace-BzX4lILP.js +0 -6
  178. package/dist/gateway/static/root/assets/browser-settings-page-BBdMqxl0.js +0 -3
  179. package/dist/gateway/static/root/assets/capabilities-settings-panel-D_WfftDW.js +0 -7
  180. package/dist/gateway/static/root/assets/channels-settings-bdRLT9KA.js +0 -1
  181. package/dist/gateway/static/root/assets/connectors-page-CPDjU5wU.js +0 -2
  182. package/dist/gateway/static/root/assets/date-picker-SmVlhtj_.js +0 -1
  183. package/dist/gateway/static/root/assets/heartbeat-settings-DWcKsIoZ.js +0 -1
  184. package/dist/gateway/static/root/assets/home-page-BdvLZKQZ.js +0 -1
  185. package/dist/gateway/static/root/assets/index-C7RDs6S-.js +0 -74
  186. package/dist/gateway/static/root/assets/index-Cu8xqZQ9.css +0 -2
  187. package/dist/gateway/static/root/assets/logs-page-ZP4QTWoC.js +0 -2
  188. package/dist/gateway/static/root/assets/messages-C72stReU.js +0 -3
  189. package/dist/gateway/static/root/assets/note-detail-panel-EeVeF4II.js +0 -5
  190. package/dist/gateway/static/root/assets/notes-page-D7bMff96.js +0 -8
  191. package/dist/gateway/static/root/assets/popover-select-C-Hj-nXR.js +0 -1
  192. package/dist/gateway/static/root/assets/project-detail-page-BDF88VdN.js +0 -1
  193. package/dist/gateway/static/root/assets/projects-page-DeTD6pu1.js +0 -1
  194. package/dist/gateway/static/root/assets/remote-access-hub-CxKrdQ6a.js +0 -1
  195. package/dist/gateway/static/root/assets/sessions-page-DUFJN-2t.js +0 -1
  196. package/dist/gateway/static/root/assets/settings-advanced-gate-CcSYDjaH.js +0 -1
  197. package/dist/gateway/static/root/assets/setup-status-panel-C6DuwrP5.js +0 -1
  198. package/dist/gateway/static/root/assets/shares-settings-CovcdHSC.js +0 -1
  199. package/dist/gateway/static/root/assets/skill-reload-api-CrHagTsE.js +0 -1
  200. package/dist/gateway/static/root/assets/task-detail-page-I8hueJnG.js +0 -1
  201. package/dist/gateway/static/root/assets/user-model-page-CU6nxmoM.js +0 -2
  202. package/dist/gateway/static/root/assets/workflow-run-setup-panel-kWGFkhjz.js +0 -3
  203. package/dist/gateway/static/root/assets/workflows-page-B4Is5E42.js +0 -5
@@ -1,5 +1,5 @@
1
1
  import { formatBrowserObservation } from "../../../../browser/observation/format.js";
2
- import { BrowserUseSchema } from "./schemas.js";
2
+ import { BrowserUseSchema, decodeBrowserUseInput } from "./schemas.js";
3
3
  //#region src/agent/tools/browser/tool/browser-use-tool.ts
4
4
  function createBrowserUseTool(deps) {
5
5
  return {
@@ -8,6 +8,21 @@ function createBrowserUseTool(deps) {
8
8
  description: "Control a persistent browser through typed semantic actions. Start with observe or navigate, then use only refs and revision values from the latest observation. Screenshots are attached only when requested or semantic observation is insufficient.",
9
9
  parameters: BrowserUseSchema,
10
10
  async execute(_toolCallId, params, signal) {
11
+ const input = decodeBrowserUseInput(params);
12
+ if (!input) return {
13
+ content: [{
14
+ type: "text",
15
+ text: `[INVALID_INPUT] Invalid parameters for browser action "${params.action}".`
16
+ }],
17
+ details: {
18
+ ok: false,
19
+ kind: "browser_error",
20
+ error: {
21
+ code: "INVALID_INPUT",
22
+ message: `Invalid parameters for browser action "${params.action}".`
23
+ }
24
+ }
25
+ };
11
26
  const readiness = await deps.getReadiness?.();
12
27
  if (readiness) return {
13
28
  content: [{
@@ -20,7 +35,7 @@ function createBrowserUseTool(deps) {
20
35
  hint: readiness.hint
21
36
  }
22
37
  };
23
- return presentResult(await deps.getRuntime().execute(deps.getTaskId(), params, signal));
38
+ return presentResult(await deps.getRuntime().execute(deps.getTaskId(), input, signal));
24
39
  }
25
40
  };
26
41
  }
@@ -1,5 +1,6 @@
1
+ import type { BrowserActionInput } from '@xopcai/browser-control-contract';
1
2
  import { type Static } from '@sinclair/typebox';
2
- export declare const BrowserUseSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
3
+ export declare const BrowserUseActionSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
3
4
  action: import("@sinclair/typebox").TLiteral<"observe">;
4
5
  sessionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
5
6
  approvalId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
@@ -200,4 +201,87 @@ export declare const BrowserUseSchema: import("@sinclair/typebox").TUnion<[impor
200
201
  sessionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
201
202
  approvalId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
202
203
  }>]>;
204
+ export declare const BrowserUseSchema: import("@sinclair/typebox").TObject<{
205
+ action: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"observe">, import("@sinclair/typebox").TLiteral<"navigate">, import("@sinclair/typebox").TLiteral<"click">, import("@sinclair/typebox").TLiteral<"fill">, import("@sinclair/typebox").TLiteral<"select">, import("@sinclair/typebox").TLiteral<"press">, import("@sinclair/typebox").TLiteral<"scroll">, import("@sinclair/typebox").TLiteral<"wait">, import("@sinclair/typebox").TLiteral<"upload">, import("@sinclair/typebox").TLiteral<"tabs">, import("@sinclair/typebox").TLiteral<"sequence">, import("@sinclair/typebox").TLiteral<"close">]>;
206
+ sessionId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
207
+ approvalId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
208
+ revision: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
209
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
210
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
211
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
212
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
213
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
214
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
215
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
216
+ }>>;
217
+ visual: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"never">, import("@sinclair/typebox").TLiteral<"auto">, import("@sinclair/typebox").TLiteral<"always">]>>;
218
+ url: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
219
+ value: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
220
+ submit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
221
+ key: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
222
+ deltaY: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
223
+ condition: import("@sinclair/typebox").TOptional<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">]>>;
224
+ timeoutMs: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
225
+ paths: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
226
+ operation: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"list">, import("@sinclair/typebox").TLiteral<"create">, import("@sinclair/typebox").TLiteral<"activate">, import("@sinclair/typebox").TLiteral<"close">]>>;
227
+ tabId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
228
+ steps: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
229
+ action: import("@sinclair/typebox").TLiteral<"click">;
230
+ ref: import("@sinclair/typebox").TString;
231
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
232
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
233
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
234
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
235
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
236
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
237
+ }>>;
238
+ }>, import("@sinclair/typebox").TObject<{
239
+ action: import("@sinclair/typebox").TLiteral<"fill">;
240
+ ref: import("@sinclair/typebox").TString;
241
+ value: import("@sinclair/typebox").TString;
242
+ submit: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
243
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
244
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
245
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
246
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
247
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
248
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
249
+ }>>;
250
+ }>, import("@sinclair/typebox").TObject<{
251
+ action: import("@sinclair/typebox").TLiteral<"select">;
252
+ ref: import("@sinclair/typebox").TString;
253
+ value: import("@sinclair/typebox").TString;
254
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
255
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
256
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
257
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
258
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
259
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
260
+ }>>;
261
+ }>, import("@sinclair/typebox").TObject<{
262
+ action: import("@sinclair/typebox").TLiteral<"press">;
263
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
264
+ key: import("@sinclair/typebox").TString;
265
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
266
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
267
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
268
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
269
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
270
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
271
+ }>>;
272
+ }>, import("@sinclair/typebox").TObject<{
273
+ action: import("@sinclair/typebox").TLiteral<"scroll">;
274
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
275
+ deltaY: import("@sinclair/typebox").TNumber;
276
+ expect: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TObject<{
277
+ urlIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
278
+ titleIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
279
+ textIncludes: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
280
+ ref: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
281
+ state: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"visible">, import("@sinclair/typebox").TLiteral<"hidden">]>>;
282
+ }>>;
283
+ }>]>>>;
284
+ }>;
203
285
  export type BrowserUseInput = Static<typeof BrowserUseSchema>;
286
+ /** Decode the provider-facing superset into one exact Browser Control action. */
287
+ export declare function decodeBrowserUseInput(value: unknown): BrowserActionInput | null;
@@ -1,16 +1,21 @@
1
1
  import { Type } from "@sinclair/typebox";
2
+ import { Value } from "@sinclair/typebox/value";
2
3
  //#region src/agent/tools/browser/tool/schemas.ts
3
4
  const ApprovalId = Type.Optional(Type.String({ description: "One-time local-owner approval id for this exact action." }));
4
5
  const SessionId = Type.Optional(Type.String({ description: "Browser session id returned by the previous observation." }));
5
6
  const Revision = Type.Number({ description: "Observation revision used to resolve element refs." });
6
- const Ref = Type.String({ description: "Ephemeral element ref from the latest observation." });
7
- const Expectation = Type.Optional(Type.Object({
7
+ const Ref = Type.String({
8
+ minLength: 1,
9
+ description: "Ephemeral element ref from the latest observation."
10
+ });
11
+ const ExpectationSchema = Type.Object({
8
12
  urlIncludes: Type.Optional(Type.String()),
9
13
  titleIncludes: Type.Optional(Type.String()),
10
14
  textIncludes: Type.Optional(Type.String()),
11
15
  ref: Type.Optional(Type.String()),
12
16
  state: Type.Optional(Type.Union([Type.Literal("visible"), Type.Literal("hidden")]))
13
- }, { additionalProperties: false }));
17
+ }, { additionalProperties: false });
18
+ const Expectation = Type.Optional(ExpectationSchema);
14
19
  function action(name, properties) {
15
20
  return Type.Object({
16
21
  action: Type.Literal(name),
@@ -133,7 +138,7 @@ const Sequence = action("sequence", {
133
138
  expect: Expectation
134
139
  });
135
140
  const Close = action("close", {});
136
- const BrowserUseSchema = Type.Union([
141
+ const BrowserUseActionSchema = Type.Union([
137
142
  Observe,
138
143
  Navigate,
139
144
  Click,
@@ -147,5 +152,207 @@ const BrowserUseSchema = Type.Union([
147
152
  Sequence,
148
153
  Close
149
154
  ]);
155
+ const BrowserUseSchema = Type.Object({
156
+ action: Type.Union([
157
+ Type.Literal("observe"),
158
+ Type.Literal("navigate"),
159
+ Type.Literal("click"),
160
+ Type.Literal("fill"),
161
+ Type.Literal("select"),
162
+ Type.Literal("press"),
163
+ Type.Literal("scroll"),
164
+ Type.Literal("wait"),
165
+ Type.Literal("upload"),
166
+ Type.Literal("tabs"),
167
+ Type.Literal("sequence"),
168
+ Type.Literal("close")
169
+ ]),
170
+ sessionId: SessionId,
171
+ approvalId: ApprovalId,
172
+ revision: Type.Optional(Revision),
173
+ ref: Type.Optional(Ref),
174
+ expect: Type.Optional(ExpectationSchema),
175
+ visual: Type.Optional(Type.Union([
176
+ Type.Literal("never"),
177
+ Type.Literal("auto"),
178
+ Type.Literal("always")
179
+ ])),
180
+ url: Type.Optional(Type.String({ minLength: 1 })),
181
+ value: Type.Optional(Type.String()),
182
+ submit: Type.Optional(Type.Boolean()),
183
+ key: Type.Optional(Type.String({ minLength: 1 })),
184
+ deltaY: Type.Optional(Type.Number()),
185
+ condition: Type.Optional(Type.Union([
186
+ Type.Literal("page_idle"),
187
+ Type.Literal("text"),
188
+ Type.Literal("visible"),
189
+ Type.Literal("hidden")
190
+ ])),
191
+ timeoutMs: Type.Optional(Type.Number({
192
+ minimum: 100,
193
+ maximum: 12e4
194
+ })),
195
+ paths: Type.Optional(Type.Array(Type.String({ minLength: 1 }), {
196
+ minItems: 1,
197
+ maxItems: 20
198
+ })),
199
+ operation: Type.Optional(Type.Union([
200
+ Type.Literal("list"),
201
+ Type.Literal("create"),
202
+ Type.Literal("activate"),
203
+ Type.Literal("close")
204
+ ])),
205
+ tabId: Type.Optional(Type.String()),
206
+ steps: Type.Optional(Type.Array(SequenceStep, {
207
+ minItems: 1,
208
+ maxItems: 10
209
+ }))
210
+ }, { additionalProperties: false });
211
+ const ACTION_FIELDS = {
212
+ observe: ["visual"],
213
+ navigate: ["url", "expect"],
214
+ click: [
215
+ "revision",
216
+ "ref",
217
+ "expect"
218
+ ],
219
+ fill: [
220
+ "revision",
221
+ "ref",
222
+ "value",
223
+ "submit",
224
+ "expect"
225
+ ],
226
+ select: [
227
+ "revision",
228
+ "ref",
229
+ "value",
230
+ "expect"
231
+ ],
232
+ press: [
233
+ "revision",
234
+ "ref",
235
+ "key",
236
+ "expect"
237
+ ],
238
+ scroll: [
239
+ "revision",
240
+ "ref",
241
+ "deltaY",
242
+ "expect"
243
+ ],
244
+ wait: [
245
+ "revision",
246
+ "condition",
247
+ "value",
248
+ "ref",
249
+ "timeoutMs"
250
+ ],
251
+ upload: [
252
+ "revision",
253
+ "ref",
254
+ "paths",
255
+ "expect"
256
+ ],
257
+ tabs: [
258
+ "operation",
259
+ "tabId",
260
+ "url"
261
+ ],
262
+ sequence: [
263
+ "revision",
264
+ "steps",
265
+ "expect"
266
+ ],
267
+ close: []
268
+ };
269
+ const SEQUENCE_STEP_FIELDS = {
270
+ click: ["ref", "expect"],
271
+ fill: [
272
+ "ref",
273
+ "value",
274
+ "submit",
275
+ "expect"
276
+ ],
277
+ select: [
278
+ "ref",
279
+ "value",
280
+ "expect"
281
+ ],
282
+ press: [
283
+ "ref",
284
+ "key",
285
+ "expect"
286
+ ],
287
+ scroll: [
288
+ "ref",
289
+ "deltaY",
290
+ "expect"
291
+ ]
292
+ };
293
+ /** Decode the provider-facing superset into one exact Browser Control action. */
294
+ function decodeBrowserUseInput(value) {
295
+ if (!isRecord(value) || !isBrowserActionName(value.action)) return null;
296
+ const candidate = { action: value.action };
297
+ copyNonEmptyString(value, candidate, "sessionId");
298
+ copyNonEmptyString(value, candidate, "approvalId");
299
+ for (const field of ACTION_FIELDS[value.action]) {
300
+ const fieldValue = value[field];
301
+ if (fieldValue === void 0 || fieldValue === null) continue;
302
+ if (field === "expect") {
303
+ const expectation = decodeExpectation(fieldValue);
304
+ if (expectation) candidate.expect = expectation;
305
+ } else if (field === "steps") {
306
+ if (!Array.isArray(fieldValue)) {
307
+ candidate.steps = fieldValue;
308
+ continue;
309
+ }
310
+ const steps = fieldValue.map(decodeSequenceStep);
311
+ if (steps.some((step) => step === null)) return null;
312
+ candidate.steps = steps;
313
+ } else if ((field === "ref" || field === "tabId" || field === "url") && fieldValue === "") continue;
314
+ else candidate[field] = fieldValue;
315
+ }
316
+ return Value.Check(BrowserUseActionSchema, candidate) ? candidate : null;
317
+ }
318
+ function decodeSequenceStep(value) {
319
+ if (!isRecord(value) || !isSequenceActionName(value.action)) return null;
320
+ const candidate = { action: value.action };
321
+ for (const field of SEQUENCE_STEP_FIELDS[value.action]) {
322
+ const fieldValue = value[field];
323
+ if (fieldValue === void 0 || fieldValue === null) continue;
324
+ if (field === "expect") {
325
+ const expectation = decodeExpectation(fieldValue);
326
+ if (expectation) candidate.expect = expectation;
327
+ } else if (field === "ref" && fieldValue === "") continue;
328
+ else candidate[field] = fieldValue;
329
+ }
330
+ return candidate;
331
+ }
332
+ function decodeExpectation(value) {
333
+ if (!isRecord(value)) return null;
334
+ const expectation = {};
335
+ for (const field of [
336
+ "urlIncludes",
337
+ "titleIncludes",
338
+ "textIncludes",
339
+ "ref"
340
+ ]) copyNonEmptyString(value, expectation, field);
341
+ if (expectation.ref && (value.state === "visible" || value.state === "hidden")) expectation.state = value.state;
342
+ return Object.keys(expectation).length > 0 ? expectation : null;
343
+ }
344
+ function copyNonEmptyString(source, target, field) {
345
+ const value = source[field];
346
+ if (typeof value === "string" && value.length > 0) target[field] = value;
347
+ }
348
+ function isBrowserActionName(value) {
349
+ return typeof value === "string" && Object.hasOwn(ACTION_FIELDS, value);
350
+ }
351
+ function isSequenceActionName(value) {
352
+ return typeof value === "string" && Object.hasOwn(SEQUENCE_STEP_FIELDS, value);
353
+ }
354
+ function isRecord(value) {
355
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
356
+ }
150
357
  //#endregion
151
- export { BrowserUseSchema };
358
+ export { BrowserUseActionSchema, BrowserUseSchema, decodeBrowserUseInput };
@@ -6,6 +6,7 @@ import { mergeWithDefaults } from "../../share/site-share-config.js";
6
6
  import { getShareStore } from "../../share/share-store.js";
7
7
  import { getSiteShareStore } from "../../share/site-share-store.js";
8
8
  import { resolveShareUrl, resolveSiteShareUrl } from "../../share/share-url.js";
9
+ import { publishHostedStaticSite } from "../../share/hosted-static-site-publish.js";
9
10
  import { resolveReverseProxyPublicUrl } from "../../gateway/public-url.js";
10
11
  import { audienceDefaults, decideShareKind, makeDescription, makeTitle, probeShareTarget, rememberStagedSite, stageSingleHtmlAsSite } from "../../share/share-auto.js";
11
12
  import { scheduleThumbnail } from "../../share/share-thumbnail.js";
@@ -110,6 +111,44 @@ function createCreateShareTool(deps) {
110
111
  const siteStore = getSiteShareStore(siteCfg);
111
112
  let sitePath = relPath;
112
113
  let stagedDir = null;
114
+ const titleOut = makeTitle(probe.kind === "directory" ? relPath.split("/").pop() || relPath : probe.absolutePath.split(/[\\/]/).pop() || relPath, p.title);
115
+ if (resolveSiteShareUrl({
116
+ ...urlCtx,
117
+ token: "reachability-check",
118
+ subdomainLabel: "reachability-check",
119
+ publicHostSuffix: siteCfg.publicHostSuffix
120
+ }).reachability !== "public") {
121
+ const { binding } = await publishHostedStaticSite({
122
+ workspaceRoot: workspace,
123
+ path: sitePath,
124
+ title: titleOut,
125
+ description: p.description,
126
+ spaFallback: true,
127
+ ttlMs,
128
+ maxViews: maxViews ?? null,
129
+ agentId: deps.getAgentId?.()
130
+ });
131
+ return successResult(locale, {
132
+ kind: "site",
133
+ delivery: "hosted",
134
+ shareUrl: binding.shareUrl,
135
+ thumbnailUrl: "",
136
+ reachability: "public",
137
+ reachabilityHint: null,
138
+ title: binding.title,
139
+ description: makeDescription({
140
+ audience,
141
+ expiresAt: binding.expiresAt,
142
+ override: p.description
143
+ }),
144
+ expiresAt: binding.expiresAt,
145
+ maxViews: binding.maxViews,
146
+ routing: {
147
+ reason: decision.reason,
148
+ hint: decision.hint
149
+ }
150
+ });
151
+ }
113
152
  if (probe.kind === "file") {
114
153
  const staged = await stageSingleHtmlAsSite(workspace, probe.absolutePath);
115
154
  sitePath = staged.relativePath;
@@ -142,7 +181,6 @@ function createCreateShareTool(deps) {
142
181
  internalBaseUrl: shareCfg.thumbnail.internalGatewayUrl ?? `http://127.0.0.1:${gatewayPort}`
143
182
  });
144
183
  siteStore.setThumbnailStatus(siteRec.id, "pending");
145
- const titleOut = makeTitle(probe.kind === "directory" ? relPath.split("/").pop() || relPath : probe.absolutePath.split(/[\\/]/).pop() || relPath, p.title);
146
184
  const descOut = makeDescription({
147
185
  audience,
148
186
  expiresAt: siteRec.expiresAt,
@@ -9,12 +9,12 @@ import "../../storage/sqlite/index.js";
9
9
  import { ObjectLinkService } from "../../activity/service.js";
10
10
  import "../../activity/index.js";
11
11
  import { getDefaultAgentId, init_resolve_route } from "../../routing/resolve-route.js";
12
+ import { CreateAutomationSchema, UpdateAutomationSchema } from "../../automations/domain/validation.js";
13
+ import "../../automations/index.js";
12
14
  import { TaskRepository } from "../../tasks/task-repository.js";
13
15
  import { TaskReadModelProjector } from "../../tasks/task-read-model-projector.js";
14
16
  import { isValidProjectAgentId, normalizeProjectAgentId, resolveProjectAgentId } from "../../projects/project-agent.js";
15
17
  import "../../projects/index.js";
16
- import { CreateAutomationSchema, UpdateAutomationSchema } from "../../automations/domain/validation.js";
17
- import "../../automations/index.js";
18
18
  import { TaskContextRepository } from "../../tasks/task-context-repository.js";
19
19
  import { TaskDependencyError, TaskDependencyService } from "../../tasks/task-dependency-service.js";
20
20
  import { TaskApplicationService } from "../../tasks/task-application-service.js";
@@ -1,9 +1,9 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
3
4
  import { getDefaultModelSync, init_providers, resolveModel } from "../providers/index.js";
4
5
  import { createExtensionAwareStreamFn } from "../providers/extension-stream-bridge.js";
5
6
  import { isLocalModelBaseUrl, resolveModelCallApiKey, resolveModelCallOptions } from "../providers/model-call.js";
6
- import { getAssistantMessageErrorReason, stripCodeFences } from "../providers/model-response.js";
7
7
  //#region src/ai-assist/text-assist.ts
8
8
  init_providers();
9
9
  init_logger();
@@ -1,10 +1,10 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { createLogger } from "../utils/logger/index.js";
3
3
  import { init_logger } from "../utils/logger.js";
4
- import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveCredentialsDir, resolveOAuthPath } from "../config/paths.js";
5
4
  import { init_write_file_atomic, writeTextAtomic } from "../infra/write-file-atomic.js";
6
- import { getOAuthProviderDefinition, init_registry } from "./oauth/registry.js";
5
+ import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveCredentialsDir, resolveOAuthPath } from "../config/paths.js";
7
6
  import { getApiKeyFromEnv, init_env_keys } from "../providers/env-keys.js";
7
+ import { getOAuthProviderDefinition, init_registry } from "./oauth/registry.js";
8
8
  import { init_oauth_provider_lock, withOAuthProviderLock } from "./oauth-provider-lock.js";
9
9
  import { dirname, join } from "path";
10
10
  import { mkdir, readFile, readdir, rm } from "fs/promises";
@@ -1,6 +1,6 @@
1
1
  import { __esmMin } from "../../../_virtual/_rolldown/runtime.js";
2
- import { init_resolution, resolveConnectedPlatformEndpoint } from "../../platform/resolution.js";
3
2
  import { generatePKCE, init_pkce } from "./pkce.js";
3
+ import { init_resolution, resolveConnectedPlatformEndpoint } from "../../platform/resolution.js";
4
4
  import { hostname } from "node:os";
5
5
  import { randomBytes } from "node:crypto";
6
6
  import http from "node:http";
@@ -1,5 +1,5 @@
1
- import { init_paths, resolveCredentialsDir } from "../../config/paths.js";
2
1
  import { init_write_file_atomic, writeTextAtomicSync } from "../../infra/write-file-atomic.js";
2
+ import { init_paths, resolveCredentialsDir } from "../../config/paths.js";
3
3
  import path from "node:path";
4
4
  import { chmodSync, existsSync, mkdirSync, readFileSync } from "node:fs";
5
5
  //#region src/auth/profiles/store.ts
@@ -1,8 +1,8 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
- import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
3
2
  import { init_paths, resolveAgentAuthProfilesPath, resolveAuthProfilesPath, resolveOAuthPath } from "../config/paths.js";
4
- import { init_loader, loadConfig } from "../config/loader.js";
5
3
  import { init_registry, isOAuthOnlyProvider } from "./oauth/registry.js";
4
+ import { init_loader, loadConfig } from "../config/loader.js";
5
+ import { getDefaultAgentId, init_resolve_route } from "../routing/resolve-route.js";
6
6
  import { existsSync, readFileSync } from "node:fs";
7
7
  //#region src/auth/sync-provider-auth.ts
8
8
  /**
@@ -12,9 +12,9 @@ export declare class ExtensionDriver implements BrowserDriver {
12
12
  disconnect(): Promise<void>;
13
13
  createSession(_sessionId: string): Promise<void>;
14
14
  closeSession(sessionId: string): Promise<void>;
15
- navigate(_sessionId: string, input: BrowserNavigateInput): Promise<BrowserControlResult>;
16
- observe(_sessionId: string, input: BrowserObserveInput): Promise<BrowserObservation>;
17
- perform(_sessionId: string, input: BrowserPrimitiveInput): Promise<BrowserControlResult>;
18
- tabs(_sessionId: string, input: BrowserTabsInput): Promise<BrowserControlResult>;
15
+ navigate(sessionId: string, input: BrowserNavigateInput): Promise<BrowserControlResult>;
16
+ observe(sessionId: string, input: BrowserObserveInput): Promise<BrowserObservation>;
17
+ perform(sessionId: string, input: BrowserPrimitiveInput): Promise<BrowserControlResult>;
18
+ tabs(sessionId: string, input: BrowserTabsInput): Promise<BrowserControlResult>;
19
19
  private send;
20
20
  }
@@ -23,21 +23,33 @@ var ExtensionDriver = class {
23
23
  sessionId
24
24
  });
25
25
  }
26
- navigate(_sessionId, input) {
27
- return this.send(input);
26
+ navigate(sessionId, input) {
27
+ return this.send({
28
+ ...input,
29
+ sessionId
30
+ });
28
31
  }
29
- async observe(_sessionId, input) {
30
- const result = await this.send(input);
32
+ async observe(sessionId, input) {
33
+ const result = await this.send({
34
+ ...input,
35
+ sessionId
36
+ });
31
37
  if ("error" in result) throw new Error(result.error.message);
32
38
  const observation = result.receipt.observation;
33
39
  if (!observation) throw new Error("Extension returned no browser observation");
34
40
  return observation;
35
41
  }
36
- perform(_sessionId, input) {
37
- return this.send(input);
42
+ perform(sessionId, input) {
43
+ return this.send({
44
+ ...input,
45
+ sessionId
46
+ });
38
47
  }
39
- tabs(_sessionId, input) {
40
- return this.send(input);
48
+ tabs(sessionId, input) {
49
+ return this.send({
50
+ ...input,
51
+ sessionId
52
+ });
41
53
  }
42
54
  async send(input) {
43
55
  return (await this.provider.send(input, this.timeoutMs, this.visualFallback)).result;
@@ -104,7 +104,7 @@ var PlaywrightDriver = class {
104
104
  const explicitRole = element.getAttribute("role");
105
105
  const implicitRole = tag === "a" ? "link" : tag === "button" ? "button" : tag === "select" ? "combobox" : tag === "textarea" ? "textbox" : tag === "summary" ? "button" : tag === "input" && input.type === "checkbox" ? "checkbox" : tag === "input" && input.type === "radio" ? "radio" : tag === "input" ? "textbox" : "interactive";
106
106
  const label = tag === "input" || tag === "textarea" || tag === "select" ? input.labels?.[0]?.innerText ?? "" : "";
107
- const name = element.getAttribute("aria-label") ?? label ?? element.getAttribute("alt") ?? element.getAttribute("placeholder") ?? html.innerText ?? element.getAttribute("title") ?? "";
107
+ const name = element.getAttribute("aria-label") || label || element.getAttribute("alt") || element.getAttribute("placeholder") || html.innerText || element.getAttribute("title") || "";
108
108
  const rect = element.getBoundingClientRect();
109
109
  const root = globalThis;
110
110
  root.__xopcRefCounter = (root.__xopcRefCounter ?? 0) + 1;
@@ -8,6 +8,7 @@ export type BrowserExtBundledFrom = 'npm-dist' | 'git-dev' | 'electron-asar' | '
8
8
  export interface BrowserExtInstallMeta {
9
9
  xopcVersion: string;
10
10
  manifestVersion: string;
11
+ contentHash: string;
11
12
  source: 'bundled';
12
13
  bundledFrom: BrowserExtBundledFrom;
13
14
  installedAt: string;
@@ -33,6 +34,7 @@ export interface EnsureBrowserExtResult {
33
34
  }
34
35
  /** Validate a directory contains a loadable extension tree. */
35
36
  export declare function validateBrowserExtLayout(dir: string): boolean;
37
+ export declare function browserExtContentHash(dir: string): string;
36
38
  /** Resolve the installed extension directory (fixed `browser-ext/` root). */
37
39
  export declare function resolveInstalledExtensionPath(cacheDir: string, _meta: BrowserExtInstallMeta | null): string | null;
38
40
  /**
@@ -45,6 +47,7 @@ export declare function resolveBundledBrowserExtDir(): Promise<{
45
47
  export declare function computeNeedsRefresh(params: {
46
48
  force?: boolean;
47
49
  bundledManifestVersion: string;
50
+ bundledContentHash: string;
48
51
  installedPath: string | null;
49
52
  meta: BrowserExtInstallMeta | null;
50
53
  }): boolean;