@xopcai/xopc 0.0.250 → 0.0.252

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 (312) 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/xopc.extension.json +1 -1
  6. package/dist/gateway/static/root/assets/{activity-store-DfBjTSo9.js → activity-store-w3eq3YpP.js} +1 -1
  7. package/dist/gateway/static/root/assets/{agent-avatar-dicebear-BN6FJXkJ.js → agent-avatar-dicebear-k039rbUz.js} +1 -1
  8. package/dist/gateway/static/root/assets/{agent-defaults-settings-panel-C7rZH1A2.js → agent-defaults-settings-panel-D4J4oq8p.js} +1 -1
  9. package/dist/gateway/static/root/assets/{agents-CgGaoo4z.js → agents-Bmth_bSQ.js} +1 -1
  10. package/dist/gateway/static/root/assets/{api-zxpcJfgj.js → api-2joIfbrH.js} +1 -1
  11. package/dist/gateway/static/root/assets/{app-management-settings-panel-D2gMshuS.js → app-management-settings-panel-ByJ4kiD0.js} +1 -1
  12. package/dist/gateway/static/root/assets/{appearance-settings-wMu0jSKx.js → appearance-settings-BK2Jga-B.js} +1 -1
  13. package/dist/gateway/static/root/assets/apps-page-B3ky7cWU.js +1 -0
  14. package/dist/gateway/static/root/assets/{archive-plugin-u6EE3JV8.js → archive-plugin-DMDKtYpi.js} +1 -1
  15. package/dist/gateway/static/root/assets/{attachment-load-DbJurnv-.js → attachment-load-B764Ql3Z.js} +1 -1
  16. package/dist/gateway/static/root/assets/{automations-page-Ew_e5HDn.js → automations-page-D-sO8CZe.js} +1 -1
  17. package/dist/gateway/static/root/assets/automations-workspace-Ds5-_-9z.js +6 -0
  18. package/dist/gateway/static/root/assets/{binary-plugins-DtDFNfPM.js → binary-plugins-fxtzYRpv.js} +1 -1
  19. package/dist/gateway/static/root/assets/{block-editor-CnAwmabq.js → block-editor-Bcjtvckh.js} +50 -50
  20. package/dist/gateway/static/root/assets/browser-automation-inputs-BSmnusjD.js +1 -0
  21. package/dist/gateway/static/root/assets/browser-automations-page-DC_OQIBk.js +3 -0
  22. package/dist/gateway/static/root/assets/browser-settings-page-C1FojyG6.js +3 -0
  23. package/dist/gateway/static/root/assets/capabilities-settings-panel-Bs59UCut.js +7 -0
  24. package/dist/gateway/static/root/assets/channels-settings-CM9vNmoo.js +1 -0
  25. package/dist/gateway/static/root/assets/{channels-status-swr-CX-yWwLD.js → channels-status-swr-BuWjIG_a.js} +1 -1
  26. package/dist/gateway/static/root/assets/{chat-terminal-dock-CryTDNdD.js → chat-terminal-dock-5SevEo_I.js} +2 -2
  27. package/dist/gateway/static/root/assets/connectors-page-BPZ44D-V.js +2 -0
  28. package/dist/gateway/static/root/assets/{cron-expression-ji5aWrjG.js → cron-expression-DtsfalBM.js} +1 -1
  29. package/dist/gateway/static/root/assets/{date-picker-Dro_w3eX.js → date-picker-tDEQV5TP.js} +1 -1
  30. package/dist/gateway/static/root/assets/{dependency-picker-Ce19KKnX.js → dependency-picker-HhNwg0Y2.js} +1 -1
  31. package/dist/gateway/static/root/assets/{desktop-pet-DsSi-3uZ.js → desktop-pet-acU4Li-C.js} +1 -1
  32. package/dist/gateway/static/root/assets/{desktop-pet-settings-8WQ4woJy.js → desktop-pet-settings-R84AR0Pe.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-debug-page-CgvEBfLZ.js → extension-debug-page-CrLlRkSN.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-page-DkznBbMj.js → extension-page-BH5lmZXE.js} +1 -1
  35. package/dist/gateway/static/root/assets/{extension-settings-page-BOjhchK2.js → extension-settings-page-BscjNAd1.js} +1 -1
  36. package/dist/gateway/static/root/assets/{gateway-config-swr-CMNbl0FZ.js → gateway-config-swr-9HidFZUd.js} +1 -1
  37. package/dist/gateway/static/root/assets/gateway-settings-BxLcW6ij.js +1 -0
  38. package/dist/gateway/static/root/assets/{gateway-startup-retry-CR7Xg8As.js → gateway-startup-retry-DRCPXONr.js} +1 -1
  39. package/dist/gateway/static/root/assets/heartbeat-settings-K5Zhl2rx.js +1 -0
  40. package/dist/gateway/static/root/assets/home-page-CZAg9RBv.js +1 -0
  41. package/dist/gateway/static/root/assets/{image-generation-api-C5mn73ca.js → image-generation-api-CR6Kle8H.js} +1 -1
  42. package/dist/gateway/static/root/assets/index-D4Ykja-U.js +72 -0
  43. package/dist/gateway/static/root/assets/index-zIJ3AXgR.css +2 -0
  44. package/dist/gateway/static/root/assets/{keyboard-shortcuts-settings-BYhfzsqe.js → keyboard-shortcuts-settings-B1QR49-7.js} +1 -1
  45. package/dist/gateway/static/root/assets/languages-5WaOu0Lf.js +2 -0
  46. package/dist/gateway/static/root/assets/local-app-workbench-page-wicoV-ti.js +2 -0
  47. package/dist/gateway/static/root/assets/{local-apps-page-vBlknU7C.js → local-apps-page-C74It-T8.js} +1 -1
  48. package/dist/gateway/static/root/assets/{locale-store-CF4erhjB.js → locale-store-BfZGZKSs.js} +1 -1
  49. package/dist/gateway/static/root/assets/logs-page-xX-7S49A.js +2 -0
  50. package/dist/gateway/static/root/assets/{management-settings-Dnx6mSNe.js → management-settings-1kNnYL97.js} +1 -1
  51. package/dist/gateway/static/root/assets/markdown-editor-BjMTIM-m.js +1 -0
  52. package/dist/gateway/static/root/assets/{markdown-view-CQvzsE24.js → markdown-view-DjiwT28p.js} +2 -2
  53. package/dist/gateway/static/root/assets/{media-plugins-DrMYeHe7.js → media-plugins-B5c0AoS1.js} +1 -1
  54. package/dist/gateway/static/root/assets/messages-DaIwVWar.js +3 -0
  55. package/dist/gateway/static/root/assets/{mobile-pairing-wizard-AKgGy3Kx.js → mobile-pairing-wizard-CsIZqK51.js} +1 -1
  56. package/dist/gateway/static/root/assets/note-detail-panel-CfWxopl4.js +5 -0
  57. package/dist/gateway/static/root/assets/notes-page-CYN-LCHJ.js +8 -0
  58. package/dist/gateway/static/root/assets/{page-tabs-CX9T71by.js → page-tabs-CqJN6Ljz.js} +1 -1
  59. package/dist/gateway/static/root/assets/{preview-open-alternatives-DvEHoimN.js → preview-open-alternatives-DqRIGxf4.js} +1 -1
  60. package/dist/gateway/static/root/assets/{product-open-page-COcr_NUJ.js → product-open-page-DE2nPE_K.js} +1 -1
  61. package/dist/gateway/static/root/assets/project-detail-page-B5G3LzDq.js +1 -0
  62. package/dist/gateway/static/root/assets/projects-page-CuVK2mKu.js +1 -0
  63. package/dist/gateway/static/root/assets/{registry-api-BsRBlji7.js → registry-api-Bpy8XX-5.js} +1 -1
  64. package/dist/gateway/static/root/assets/remote-access-hub-Dnd73xWt.js +1 -0
  65. package/dist/gateway/static/root/assets/{runtime-tools-settings-panel-CQ13P-mS.js → runtime-tools-settings-panel-Bb4b74-P.js} +2 -2
  66. package/dist/gateway/static/root/assets/{schema-form-BUVyTpZj.js → schema-form-DoPU5j3J.js} +1 -1
  67. package/dist/gateway/static/root/assets/sessions-page-XL4LyKZe.js +1 -0
  68. package/dist/gateway/static/root/assets/settings-advanced-gate-0ForzDSS.js +1 -0
  69. package/dist/gateway/static/root/assets/{settings-form-section-DVY-8_B9.js → settings-form-section-Ci-9WajJ.js} +1 -1
  70. package/dist/gateway/static/root/assets/{settings-page-CdiVYyTl.js → settings-page-CL_2F95D.js} +1 -1
  71. package/dist/gateway/static/root/assets/setup-status-panel-DVws6XZc.js +1 -0
  72. package/dist/gateway/static/root/assets/{share-preview-page-C88YLKm4.js → share-preview-page-XUA3oKQX.js} +1 -1
  73. package/dist/gateway/static/root/assets/shares-settings-BwDvcacF.js +1 -0
  74. package/dist/gateway/static/root/assets/skill-reload-api-BJjrATqE.js +1 -0
  75. package/dist/gateway/static/root/assets/{skills-page-DLir1nM0.js → skills-page-sXXAZDc9.js} +1 -1
  76. package/dist/gateway/static/root/assets/{skills-page.utils-BMZAfS3G.js → skills-page.utils-DD79Bl1I.js} +1 -1
  77. package/dist/gateway/static/root/assets/source-workspace-editor-CVWzt0oT.js +1 -0
  78. package/dist/gateway/static/root/assets/{system-settings-panel-BM8ivYan.js → system-settings-panel-BEH64qBV.js} +1 -1
  79. package/dist/gateway/static/root/assets/task-detail-page-0jxMi75O.js +1 -0
  80. package/dist/gateway/static/root/assets/{theme-store-BOgkc_9D.js → theme-store-CISSxU1c.js} +1 -1
  81. package/dist/gateway/static/root/assets/{tunnel-api-DemxChjo.js → tunnel-api-DrKDhnJm.js} +1 -1
  82. package/dist/gateway/static/root/assets/{use-autosave-CV3Ui5hu.js → use-autosave-CPYePL-Q.js} +1 -1
  83. package/dist/gateway/static/root/assets/user-model-page-B6zLDfDl.js +2 -0
  84. package/dist/gateway/static/root/assets/{vendor-codemirror--gTq3YAI.js → vendor-codemirror-Qdcjid65.js} +1 -1
  85. package/dist/gateway/static/root/assets/{voice-api-key-field-CUoCi4Sq.js → voice-api-key-field-DKqzrCXx.js} +1 -1
  86. package/dist/gateway/static/root/assets/{voice-config-api-C-ryeIxj.js → voice-config-api-e9xWjwBX.js} +1 -1
  87. package/dist/gateway/static/root/assets/{work-discovery-overlay-BhDlkCMB.js → work-discovery-overlay-kTQug6bq.js} +1 -1
  88. package/dist/gateway/static/root/assets/{workflow-run-setup-panel-D8CcPc_C.js → workflow-run-setup-panel-m9SKj_GT.js} +2 -2
  89. package/dist/gateway/static/root/assets/workflows-page-Bcd1XqP7.js +5 -0
  90. package/dist/gateway/static/root/index.html +10 -10
  91. package/dist/package.js +1 -1
  92. package/dist/packages/gateway-contract/src/new-session.js +9 -0
  93. package/dist/src/agent/agent-manager.d.ts +2 -1
  94. package/dist/src/agent/agent-manager.js +2 -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/external-tools/composio-provider.d.ts +1 -0
  99. package/dist/src/agent/external-tools/composio-provider.js +64 -34
  100. package/dist/src/agent/external-tools/search-error.js +5 -3
  101. package/dist/src/agent/service.js +2 -1
  102. package/dist/src/agent/service.types.d.ts +2 -1
  103. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js +4 -0
  104. package/dist/src/agent/tool-manuals/browser.d.ts +1 -1
  105. package/dist/src/agent/tool-manuals/browser.js +15 -226
  106. package/dist/src/agent/tools/browser/tool/browser-use-tool.d.ts +4 -21
  107. package/dist/src/agent/tools/browser/tool/browser-use-tool.js +48 -165
  108. package/dist/src/agent/tools/browser/tool/schemas.d.ts +203 -16
  109. package/dist/src/agent/tools/browser/tool/schemas.js +146 -16
  110. package/dist/src/agent/tools/browser-automation-tool.d.ts +121 -0
  111. package/dist/src/agent/tools/browser-automation-tool.js +197 -0
  112. package/dist/src/agent/tools/factory.d.ts +6 -9
  113. package/dist/src/agent/tools/factory.js +28 -55
  114. package/dist/src/agent/tools/index.d.ts +2 -2
  115. package/dist/src/agent/tools/index.js +3 -3
  116. package/dist/src/agent/tools/review-workspace.js +2 -2
  117. package/dist/src/auth/oauth/xopc-cloud.js +3 -1
  118. package/dist/src/automations/domain/defaults.js +1 -1
  119. package/dist/src/automations/domain/types.d.ts +5 -5
  120. package/dist/src/automations/domain/validation.d.ts +12 -12
  121. package/dist/src/automations/domain/validation.js +3 -3
  122. package/dist/src/automations/draft/automation-draft-validator.d.ts +3 -3
  123. package/dist/src/automations/draft/automation-draft-validator.js +1 -1
  124. package/dist/src/automations/service/action-executor.d.ts +1 -1
  125. package/dist/src/automations/service/action-executor.js +7 -7
  126. package/dist/src/browser/{recipes → automations}/index.d.ts +1 -0
  127. package/dist/src/browser/automations/index.js +4 -0
  128. package/dist/src/browser/automations/repository.d.ts +13 -0
  129. package/dist/src/browser/automations/repository.js +60 -0
  130. package/dist/src/browser/automations/runner.d.ts +17 -0
  131. package/dist/src/browser/automations/runner.js +173 -0
  132. package/dist/src/browser/automations/runtime-service.d.ts +6 -0
  133. package/dist/src/browser/automations/runtime-service.js +37 -0
  134. package/dist/src/browser/automations/schema.d.ts +144 -0
  135. package/dist/src/browser/automations/schema.js +135 -0
  136. package/dist/src/browser/automations/service.d.ts +146 -0
  137. package/dist/src/browser/automations/service.js +168 -0
  138. package/dist/src/browser/automations/types.d.ts +90 -0
  139. package/dist/src/browser/cache-dir-policy.d.ts +1 -1
  140. package/dist/src/browser/cache-dir-policy.js +1 -4
  141. package/dist/src/browser/drivers/browser-driver.d.ts +17 -0
  142. package/dist/src/browser/drivers/create-driver.d.ts +3 -0
  143. package/dist/src/browser/drivers/create-driver.js +84 -0
  144. package/dist/src/browser/drivers/extension-driver.d.ts +20 -0
  145. package/dist/src/browser/drivers/extension-driver.js +47 -0
  146. package/dist/src/browser/drivers/playwright-driver.d.ts +38 -0
  147. package/dist/src/browser/drivers/playwright-driver.js +406 -0
  148. package/dist/src/browser/index.d.ts +10 -15
  149. package/dist/src/browser/index.js +10 -15
  150. package/dist/src/browser/install-lock.d.ts +1 -2
  151. package/dist/src/browser/install-lock.js +3 -9
  152. package/dist/src/browser/install-progress.d.ts +1 -1
  153. package/dist/src/browser/observation/format.d.ts +2 -0
  154. package/dist/src/browser/observation/format.js +26 -0
  155. package/dist/src/browser/policy/approval-store.d.ts +17 -0
  156. package/dist/src/browser/policy/approval-store.js +62 -0
  157. package/dist/src/browser/policy/browser-policy.d.ts +3 -0
  158. package/dist/src/browser/policy/browser-policy.js +27 -0
  159. package/dist/src/browser/providers/browser-ext-install.d.ts +1 -1
  160. package/dist/src/browser/providers/browser-ext-install.js +3 -5
  161. package/dist/src/browser/providers/browser-use.js +1 -1
  162. package/dist/src/browser/providers/browserbase.js +1 -1
  163. package/dist/src/browser/providers/extension-ws-acquire.d.ts +1 -4
  164. package/dist/src/browser/providers/extension-ws-acquire.js +1 -13
  165. package/dist/src/browser/providers/extension.d.ts +3 -22
  166. package/dist/src/browser/providers/extension.js +7 -15
  167. package/dist/src/browser/providers/index.d.ts +2 -2
  168. package/dist/src/browser/providers/index.js +3 -3
  169. package/dist/src/browser/providers/types.d.ts +0 -94
  170. package/dist/src/browser/readiness.d.ts +4 -22
  171. package/dist/src/browser/readiness.js +55 -118
  172. package/dist/src/browser/runtime/browser-runtime.d.ts +30 -0
  173. package/dist/src/browser/runtime/browser-runtime.js +362 -0
  174. package/dist/src/browser/url-policy.d.ts +3 -3
  175. package/dist/src/browser/url-policy.js +7 -6
  176. package/dist/src/browser/verification/expectation.d.ts +2 -0
  177. package/dist/src/browser/verification/expectation.js +17 -0
  178. package/dist/src/cli/command-loaders.js +1 -0
  179. package/dist/src/cli/command-manifest.js +5 -1
  180. package/dist/src/cli/commands/browser-cli-helpers.d.ts +0 -6
  181. package/dist/src/cli/commands/browser-cli-helpers.js +11 -144
  182. package/dist/src/cli/commands/browser.d.ts +0 -5
  183. package/dist/src/cli/commands/browser.js +11 -152
  184. package/dist/src/cli/commands/doctor/checks/database-schema.js +1 -1
  185. package/dist/src/cli/commands/doctor/checks/node-version.js +25 -9
  186. package/dist/src/cli/commands/platform.d.ts +1 -0
  187. package/dist/src/cli/commands/platform.js +111 -0
  188. package/dist/src/config/loader.js +9 -3
  189. package/dist/src/config/schema.d.ts +131 -84
  190. package/dist/src/config/schema.js +112 -59
  191. package/dist/src/connectors/composio-sessions.js +1 -3
  192. package/dist/src/extensions/marketplace.js +4 -0
  193. package/dist/src/files/file-service.js +139 -14
  194. package/dist/src/gateway/hono/lib/config-payload.d.ts +12 -26
  195. package/dist/src/gateway/hono/lib/config-payload.js +10 -39
  196. package/dist/src/gateway/hono/routes/browser-automations.d.ts +3 -0
  197. package/dist/src/gateway/hono/routes/browser-automations.js +77 -0
  198. package/dist/src/gateway/hono/routes/browser-install.js +0 -32
  199. package/dist/src/gateway/hono/routes/browser.d.ts +0 -17
  200. package/dist/src/gateway/hono/routes/browser.js +46 -568
  201. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -1
  202. package/dist/src/gateway/hono/routes/config.js +0 -11
  203. package/dist/src/gateway/hono/routes/lazy-bundles.js +5 -5
  204. package/dist/src/gateway/service.d.ts +4 -6
  205. package/dist/src/gateway/service.js +20 -23
  206. package/dist/src/platform/client.d.ts +121 -0
  207. package/dist/src/platform/client.js +108 -0
  208. package/dist/src/platform/contracts.d.ts +194 -0
  209. package/dist/src/platform/contracts.js +150 -0
  210. package/dist/src/platform/index.d.ts +4 -0
  211. package/dist/src/platform/index.js +9 -0
  212. package/dist/src/platform/resolution.d.ts +4 -0
  213. package/dist/src/platform/resolution.js +16 -0
  214. package/dist/src/platform/worker.d.ts +6 -0
  215. package/dist/src/platform/worker.js +75 -0
  216. package/dist/src/providers/xopc-cloud-config.js +3 -1
  217. package/dist/src/session/session-context-for-llm.js +41 -1
  218. package/dist/src/share/hosted-session-share.js +3 -1
  219. package/dist/src/share/share-thumbnail.js +1 -1
  220. package/dist/src/storage/sqlite/migrations/153_browser_control_v2.sql +45 -0
  221. package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
  222. package/dist/src/storage/sqlite/migrations/runner.js +3 -3
  223. package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
  224. package/dist/src/storage/sqlite/schema.js +1 -1
  225. package/dist/src/storage/sqlite/schema.sql +16 -20
  226. package/dist/src/tasks/home-query-service.js +1 -1
  227. package/dist/src/tunnel/env.js +3 -1
  228. package/dist/src/voice/realtime/agentEngine.js +0 -1
  229. package/package.json +7 -7
  230. package/dist/gateway/static/root/assets/apps-page-KF1Gnv36.js +0 -1
  231. package/dist/gateway/static/root/assets/automations-workspace-Ch-ldu35.js +0 -6
  232. package/dist/gateway/static/root/assets/browser-settings-page-DtVhsHJW.js +0 -8
  233. package/dist/gateway/static/root/assets/browser-workflow-inputs-BX1-uM9L.js +0 -1
  234. package/dist/gateway/static/root/assets/browser-workflows-page-CcbUOWDF.js +0 -3
  235. package/dist/gateway/static/root/assets/capabilities-settings-panel--sXeylhe.js +0 -7
  236. package/dist/gateway/static/root/assets/channels-settings-AXSBDujZ.js +0 -1
  237. package/dist/gateway/static/root/assets/code-editor-D4_k-6QN.js +0 -1
  238. package/dist/gateway/static/root/assets/connectors-page-HBHUWohz.js +0 -2
  239. package/dist/gateway/static/root/assets/gateway-config-api-OEruhhX3.js +0 -1
  240. package/dist/gateway/static/root/assets/gateway-settings-BgH3A0LO.js +0 -1
  241. package/dist/gateway/static/root/assets/heartbeat-settings-C97naDkO.js +0 -1
  242. package/dist/gateway/static/root/assets/home-page-BBKKme4G.js +0 -1
  243. package/dist/gateway/static/root/assets/html-workspace-editor-C3DKAkMc.js +0 -1
  244. package/dist/gateway/static/root/assets/index-BcaF-dgQ.js +0 -72
  245. package/dist/gateway/static/root/assets/index-DAryGvZ7.css +0 -2
  246. package/dist/gateway/static/root/assets/local-app-workbench-page-DNncc2tn.js +0 -2
  247. package/dist/gateway/static/root/assets/logs-page-CizZInrT.js +0 -2
  248. package/dist/gateway/static/root/assets/markdown-editor-nDLmA_LF.js +0 -2
  249. package/dist/gateway/static/root/assets/markdown-split-DtBtcHWi.js +0 -1
  250. package/dist/gateway/static/root/assets/messages-Cf5hpZE6.js +0 -3
  251. package/dist/gateway/static/root/assets/note-detail-panel-Bw3jD9Jf.js +0 -5
  252. package/dist/gateway/static/root/assets/notes-page-Dpqq7Z-J.js +0 -8
  253. package/dist/gateway/static/root/assets/project-detail-page-BuT6MCTs.js +0 -1
  254. package/dist/gateway/static/root/assets/projects-page-DXWMxOjf.js +0 -1
  255. package/dist/gateway/static/root/assets/remote-access-hub-7rBCUWzZ.js +0 -1
  256. package/dist/gateway/static/root/assets/sessions-page-gmEOYNb4.js +0 -1
  257. package/dist/gateway/static/root/assets/settings-advanced-gate-DYYoJcl7.js +0 -1
  258. package/dist/gateway/static/root/assets/setup-status-panel-BhenBnUj.js +0 -1
  259. package/dist/gateway/static/root/assets/shares-settings-Dq7xIj0_.js +0 -1
  260. package/dist/gateway/static/root/assets/skill-reload-api-MDI9Lz6z.js +0 -1
  261. package/dist/gateway/static/root/assets/task-detail-page-P0_RldWv.js +0 -1
  262. package/dist/gateway/static/root/assets/user-model-page-CxfnoRVn.js +0 -2
  263. package/dist/gateway/static/root/assets/workflows-page-Bxn2Dc16.js +0 -5
  264. package/dist/src/agent/tools/browser-recipe-tool.d.ts +0 -12
  265. package/dist/src/agent/tools/browser-recipe-tool.js +0 -113
  266. package/dist/src/browser/actions/extension-registry-bridge.d.ts +0 -5
  267. package/dist/src/browser/actions/extension-registry-bridge.js +0 -312
  268. package/dist/src/browser/actions/registry.d.ts +0 -5
  269. package/dist/src/browser/actions/registry.js +0 -741
  270. package/dist/src/browser/actions/types.d.ts +0 -65
  271. package/dist/src/browser/backend-from-config.d.ts +0 -22
  272. package/dist/src/browser/backend-from-config.js +0 -99
  273. package/dist/src/browser/browser-command-timeout.d.ts +0 -2
  274. package/dist/src/browser/browser-command-timeout.js +0 -11
  275. package/dist/src/browser/cdp-local-launcher.d.ts +0 -35
  276. package/dist/src/browser/cdp-local-launcher.js +0 -154
  277. package/dist/src/browser/cdp-supervisor.d.ts +0 -58
  278. package/dist/src/browser/cdp-supervisor.js +0 -133
  279. package/dist/src/browser/humanize.d.ts +0 -80
  280. package/dist/src/browser/humanize.js +0 -363
  281. package/dist/src/browser/manager.d.ts +0 -50
  282. package/dist/src/browser/manager.js +0 -251
  283. package/dist/src/browser/pipeline/output.d.ts +0 -35
  284. package/dist/src/browser/pipeline/output.js +0 -74
  285. package/dist/src/browser/pipeline/runner.d.ts +0 -27
  286. package/dist/src/browser/pipeline/runner.js +0 -453
  287. package/dist/src/browser/pipeline/schema.d.ts +0 -42
  288. package/dist/src/browser/pipeline/schema.js +0 -116
  289. package/dist/src/browser/pipeline/template.d.ts +0 -30
  290. package/dist/src/browser/pipeline/template.js +0 -112
  291. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -83
  292. package/dist/src/browser/providers/cloakbrowser.js +0 -612
  293. package/dist/src/browser/recipes/index.js +0 -3
  294. package/dist/src/browser/recipes/repository.d.ts +0 -13
  295. package/dist/src/browser/recipes/repository.js +0 -81
  296. package/dist/src/browser/recipes/runtime-service.d.ts +0 -6
  297. package/dist/src/browser/recipes/runtime-service.js +0 -30
  298. package/dist/src/browser/recipes/service.d.ts +0 -36
  299. package/dist/src/browser/recipes/service.js +0 -186
  300. package/dist/src/browser/recipes/types.d.ts +0 -36
  301. package/dist/src/browser/schemas.d.ts +0 -53
  302. package/dist/src/browser/schemas.js +0 -68
  303. package/dist/src/browser/session-lifecycle.d.ts +0 -40
  304. package/dist/src/browser/session-lifecycle.js +0 -136
  305. package/dist/src/browser/snapshot-helpers.d.ts +0 -24
  306. package/dist/src/browser/snapshot-helpers.js +0 -70
  307. package/dist/src/browser/stealth.d.ts +0 -46
  308. package/dist/src/browser/stealth.js +0 -163
  309. package/dist/src/gateway/hono/routes/browser-workflows.d.ts +0 -3
  310. package/dist/src/gateway/hono/routes/browser-workflows.js +0 -78
  311. /package/dist/src/browser/{actions → automations}/types.js +0 -0
  312. /package/dist/src/browser/{recipes/types.js → drivers/browser-driver.js} +0 -0
@@ -1,10 +1,10 @@
1
1
  import { __esmMin } from "../../_virtual/_rolldown/runtime.js";
2
2
  import { AgentModelsOverrideSchema, AgentsConfigSchema as AgentsConfigSchema$1, DEFAULT_AGENT_MODEL_REF, ImageGenerationRouteSchema, ModelRouteSchema } from "../agent-config/schema.js";
3
3
  import { init_agent_config } from "../agent-config/index.js";
4
- import { checkCacheDir, init_cache_dir_policy } from "../browser/cache-dir-policy.js";
5
4
  import { DEFAULT_CONTEXT_COMPACTION_POLICY, UserContextConfigSchema, init_config } from "../user-context/config.js";
6
5
  import { init_default_model } from "./default-model.js";
7
6
  import { init_public_url, validatePublicUrl } from "./public-url.js";
7
+ import { PlatformConfigSchema, init_contracts } from "../platform/contracts.js";
8
8
  import { TelegramAccountConfigSchema, TelegramConfigSchema, TelegramGroupConfigSchema, TelegramTopicConfigSchema, init_config_schema } from "../../extensions/telegram/src/config-schema.js";
9
9
  import { WeixinAccountConfigSchema, WeixinConfigSchema, init_config_schema as init_config_schema$1 } from "../../extensions/weixin/src/config-schema.js";
10
10
  import { z } from "zod";
@@ -37,13 +37,13 @@ function parseModelRef(ref) {
37
37
  model: trimmed.slice(idx + 1).trim()
38
38
  };
39
39
  }
40
- var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentModelsSchema, AgentsConfigSchema, BrowserCloudConfigSchema, BrowserExtensionConfigSchema, BrowserCloakConfigSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, RuntimePreferenceSchema, RuntimeProvisionSchema, RuntimeVersionRequestSchema, LanguageRuntimeSchema, DEFAULT_RUNTIME_TOOLS_CONFIG, RuntimeToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayWebchatConfigSchema, GatewayConfigSchema, ModelsDevConfigSchema, ModelCatalogConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, UpdateConfigSchema, CommandsConfigSchema, TuiConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpOAuthConfigSchema, McpServerSchema, McpConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
40
+ var AgentModelRefSchema, AgentImageGenerationModelSchema, AgentModelsSchema, AgentsConfigSchema, BrowserDriverSchema, BrowserHostnameSchema, BrowserConfigSchema, BindingMatchSchema, BindingRuleSchema, BindingsConfigSchema, SessionDmScopeSchema, SessionStorageConfigSchema, SessionResetModeSchema, SessionResetConfigSchema, SessionResetByTypeSchema, SessionScopeSchema, SessionConfigSchema, ChannelsConfigSchema, SearchProviderEntrySchema, WebSearchConfigSchema, WebsiteBlocklistSchema, WebToolsConfigSchema, ToolsConfigSchema, RuntimePreferenceSchema, RuntimeProvisionSchema, RuntimeVersionRequestSchema, LanguageRuntimeSchema, DEFAULT_RUNTIME_TOOLS_CONFIG, RuntimeToolsConfigSchema, GatewayAuthRateLimitSchema, GatewaySecuritySchema, GatewayTrustedProxySchema, GatewayAuthSchema, GatewayTailscaleConsentSchema, GatewayTailscaleSchema, GatewayRemoteSchema, GatewayTlsSchema, GatewayModeSchema, HeartbeatConfigSchema, GatewayChannelConnectDeferModeSchema, TunnelConsentSchema, TunnelConfigSchema, WorkspaceImportConfigSchema, WorkspaceConfigSchema, GatewayBindModeSchema, GatewayWebchatConfigSchema, GatewayConfigSchema, ModelsDevConfigSchema, ModelCatalogConfigSchema, SttProviderConfigCatchallSchema, STTProviderConfigSchema, STTFallbackConfigSchema, MediaUnderstandingCapabilitiesSchema, MediaUnderstandingModelSchema, STTConfigSchema, TtsProviderConfigCatchallSchema, TTSProviderConfigSchema, TTSFallbackConfigSchema, TTSModelOverridesConfigSchema, TTSEdgeConfigSchema, TTSSummarizationConfigSchema, TTSConfigSchema, VoiceRefinementConfigSchema, VoiceConfigSchema, MessagesConfigSchema, ToolsMediaAudioConfigSchema, ToolsMediaConfigSchema, ProviderAzureConfigSchema, ProviderRequestOverridesSchema, ProviderAuthConfigSchema, ProvidersConfigSchema, ExtensionSecurityConfigSchema, ExtensionSlotsConfigSchema, ExtensionsConfigSchema, UpdateAutoConfigSchema, UpdateConfigSchema, CommandsConfigSchema, TuiConfigSchema, McpHttpUrlSchema, ConnectorSecretReferenceSchema, McpConfigScalarSchema, McpOAuthConfigSchema, McpServerSchema, McpConfigSchema, ConnectorsConfigSchema, ExperimentalConfigSchema, ConfigSchema;
41
41
  var init_schema = __esmMin((() => {
42
42
  init_agent_config();
43
- init_cache_dir_policy();
44
43
  init_config();
45
44
  init_default_model();
46
45
  init_public_url();
46
+ init_contracts();
47
47
  init_config_schema();
48
48
  init_config_schema$1();
49
49
  AgentModelRefSchema = ModelRouteSchema;
@@ -72,65 +72,99 @@ var init_schema = __esmMin((() => {
72
72
  enabled: true
73
73
  }]
74
74
  });
75
- BrowserCloudConfigSchema = z.object({
76
- apiKey: z.string().optional(),
77
- projectId: z.string().optional(),
78
- region: z.string().optional()
79
- }).strict().optional();
80
- BrowserExtensionConfigSchema = z.object({
81
- port: z.number().int().min(1024).max(65535).optional(),
82
- host: z.string().min(1).optional(),
83
- connectionTimeout: z.number().int().positive().optional()
84
- }).strict().optional();
85
- BrowserCloakConfigSchema = z.object({
86
- keepOpen: z.boolean().optional(),
87
- temporaryProfile: z.boolean().optional(),
88
- cacheDir: z.string().optional().superRefine((value, ctx) => {
89
- const result = checkCacheDir(value);
90
- if (result.ok === false) ctx.addIssue({
91
- code: "custom",
92
- message: result.message
93
- });
94
- }),
95
- binaryPath: z.string().optional(),
96
- timezone: z.string().optional(),
97
- locale: z.string().optional(),
98
- webrtcIp: z.string().optional(),
99
- fingerprintPlatform: z.string().optional(),
100
- extraArgs: z.array(z.string()).optional()
101
- }).strict().optional();
75
+ BrowserDriverSchema = z.discriminatedUnion("kind", [
76
+ z.object({ kind: z.literal("extension") }).strict(),
77
+ z.object({
78
+ kind: z.literal("playwright"),
79
+ headless: z.boolean().default(false),
80
+ executablePath: z.string().min(1).optional()
81
+ }).strict(),
82
+ z.object({
83
+ kind: z.literal("cdp"),
84
+ endpoint: z.string().url()
85
+ }).strict(),
86
+ z.object({
87
+ kind: z.literal("remote"),
88
+ provider: z.enum(["browserbase", "browser-use"]),
89
+ apiKey: z.string().optional(),
90
+ projectId: z.string().optional(),
91
+ region: z.string().optional()
92
+ }).strict()
93
+ ]);
94
+ BrowserHostnameSchema = z.string().min(1).refine((value) => {
95
+ if (value !== value.toLowerCase() || value.includes("/") || value.includes(":") && !value.startsWith("[")) return false;
96
+ try {
97
+ return new URL(`http://${value}`).hostname === value;
98
+ } catch {
99
+ return false;
100
+ }
101
+ }, "Host must be one exact lowercase hostname or IP address.");
102
102
  BrowserConfigSchema = z.object({
103
103
  enabled: z.boolean().default(true),
104
- backend: z.enum([
105
- "local",
106
- "cdp",
107
- "cloud",
108
- "extension",
109
- "cloakbrowser"
110
- ]).default("extension"),
111
- headless: z.boolean().optional(),
112
- allowPrivateUrls: z.boolean().optional(),
113
- commandTimeout: z.number().int().min(5).max(900).optional(),
114
- cloudProvider: z.enum([
115
- "local",
116
- "browserbase",
117
- "browser-use"
118
- ]).optional(),
119
- cloud: BrowserCloudConfigSchema,
120
- cdpUrl: z.string().optional(),
121
- extension: BrowserExtensionConfigSchema,
122
- cloakbrowser: BrowserCloakConfigSchema,
123
- humanize: z.boolean().optional(),
124
- humanPreset: z.enum(["default", "careful"]).optional(),
125
- dialogPolicy: z.enum([
126
- "must_respond",
127
- "auto_dismiss",
128
- "auto_accept"
129
- ]).optional(),
130
- dialogTimeoutSeconds: z.number().int().positive().optional()
104
+ driver: BrowserDriverSchema.default({ kind: "extension" }),
105
+ observation: z.object({
106
+ maxNodes: z.number().int().min(20).max(500).default(180),
107
+ maxCharacters: z.number().int().min(1e3).max(5e4).default(12e3),
108
+ visualFallback: z.boolean().default(true)
109
+ }).strict().default({
110
+ maxNodes: 180,
111
+ maxCharacters: 12e3,
112
+ visualFallback: true
113
+ }),
114
+ limits: z.object({
115
+ actionTimeoutMs: z.number().int().min(1e3).max(12e4).default(3e4),
116
+ sessionTimeoutMs: z.number().int().min(6e4).max(36e5).default(9e5),
117
+ maxSequenceLength: z.number().int().min(1).max(10).default(5)
118
+ }).strict().default({
119
+ actionTimeoutMs: 3e4,
120
+ sessionTimeoutMs: 9e5,
121
+ maxSequenceLength: 5
122
+ }),
123
+ security: z.object({
124
+ privateNetworks: z.literal("deny").default("deny"),
125
+ allowedPrivateHosts: z.array(BrowserHostnameSchema).default([]),
126
+ crossDomainNavigation: z.enum([
127
+ "allow",
128
+ "ask",
129
+ "deny"
130
+ ]).default("ask"),
131
+ uploads: z.enum([
132
+ "allow",
133
+ "ask",
134
+ "deny"
135
+ ]).default("ask"),
136
+ consequentialActions: z.enum([
137
+ "allow",
138
+ "ask",
139
+ "deny"
140
+ ]).default("ask")
141
+ }).strict().default({
142
+ privateNetworks: "deny",
143
+ allowedPrivateHosts: [],
144
+ crossDomainNavigation: "ask",
145
+ uploads: "ask",
146
+ consequentialActions: "ask"
147
+ })
131
148
  }).strict().default({
132
149
  enabled: true,
133
- backend: "extension"
150
+ driver: { kind: "extension" },
151
+ observation: {
152
+ maxNodes: 180,
153
+ maxCharacters: 12e3,
154
+ visualFallback: true
155
+ },
156
+ limits: {
157
+ actionTimeoutMs: 3e4,
158
+ sessionTimeoutMs: 9e5,
159
+ maxSequenceLength: 5
160
+ },
161
+ security: {
162
+ privateNetworks: "deny",
163
+ allowedPrivateHosts: [],
164
+ crossDomainNavigation: "ask",
165
+ uploads: "ask",
166
+ consequentialActions: "ask"
167
+ }
134
168
  });
135
169
  BindingMatchSchema = z.object({
136
170
  channel: z.string(),
@@ -991,6 +1025,7 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
991
1025
  mcp: McpConfigSchema,
992
1026
  connectors: ConnectorsConfigSchema,
993
1027
  experimental: ExperimentalConfigSchema,
1028
+ platform: PlatformConfigSchema,
994
1029
  extensions: ExtensionsConfigSchema.default({}),
995
1030
  /** Per-vendor capability provider config (image / audio / video). */
996
1031
  providers: ProvidersConfigSchema.optional(),
@@ -1108,7 +1143,24 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1108
1143
  },
1109
1144
  browser: {
1110
1145
  enabled: true,
1111
- backend: "extension"
1146
+ driver: { kind: "extension" },
1147
+ observation: {
1148
+ maxNodes: 180,
1149
+ maxCharacters: 12e3,
1150
+ visualFallback: true
1151
+ },
1152
+ limits: {
1153
+ actionTimeoutMs: 3e4,
1154
+ sessionTimeoutMs: 9e5,
1155
+ maxSequenceLength: 5
1156
+ },
1157
+ security: {
1158
+ privateNetworks: "deny",
1159
+ allowedPrivateHosts: [],
1160
+ crossDomainNavigation: "ask",
1161
+ uploads: "ask",
1162
+ consequentialActions: "ask"
1163
+ }
1112
1164
  },
1113
1165
  tools: { web: { search: {
1114
1166
  maxResults: 5,
@@ -1116,6 +1168,7 @@ workDiscoveryOnboarding: z.boolean().default(true) }).strict().default({ workDis
1116
1168
  } } },
1117
1169
  runtimeTools: DEFAULT_RUNTIME_TOOLS_CONFIG,
1118
1170
  experimental: { workDiscoveryOnboarding: true },
1171
+ platform: { mode: "standalone" },
1119
1172
  extensions: {
1120
1173
  allow: [],
1121
1174
  security: {
@@ -97,9 +97,8 @@ var ComposioSessionsAdapter = class {
97
97
  return new ManagedComposioClient();
98
98
  }
99
99
  let Composio;
100
- let PiProvider;
101
100
  try {
102
- [{Composio}, {PiProvider}] = await Promise.all([import("@composio/core"), import("@composio/experimental")]);
101
+ ({Composio} = await import("@composio/core"));
103
102
  } catch (cause) {
104
103
  throw new Error("The xopc installation is missing the bundled Composio runtime. Reinstall @xopcai/xopc and restart the gateway.", { cause });
105
104
  }
@@ -110,7 +109,6 @@ var ComposioSessionsAdapter = class {
110
109
  dangerouslyAllowAutoUploadDownloadFiles: Boolean(options.fileDownloadDir),
111
110
  fileUploadDirs: false,
112
111
  ...options.fileDownloadDir ? { fileDownloadDir: options.fileDownloadDir } : {},
113
- provider: new PiProvider(),
114
112
  host: "xopc"
115
113
  });
116
114
  client.mode = "byok";
@@ -1,9 +1,11 @@
1
1
  import { createLogger } from "../utils/logger/index.js";
2
2
  import { init_logger } from "../utils/logger.js";
3
+ import { init_resolution, resolveConnectedPlatformEndpoint } from "../platform/resolution.js";
3
4
  import { init_loader, loadConfig } from "../config/loader.js";
4
5
  //#region src/extensions/marketplace.ts
5
6
  init_loader();
6
7
  init_logger();
8
+ init_resolution();
7
9
  const log = createLogger("ExtensionMarketplace");
8
10
  const DEFAULT_STORE_BASE = "https://store.xopc.ai";
9
11
  const CACHE_TTL_MS = 300 * 1e3;
@@ -24,6 +26,8 @@ function normalizeStoreBaseUrl() {
24
26
  if (env) try {
25
27
  return new URL(env).toString().replace(/\/$/, "");
26
28
  } catch {}
29
+ const fromPlatform = resolveConnectedPlatformEndpoint("storeApi");
30
+ if (fromPlatform) return fromPlatform.replace(/\/+$/, "");
27
31
  try {
28
32
  const fromCfg = loadConfig().gateway?.skillsStoreBaseUrl?.trim();
29
33
  if (fromCfg) try {
@@ -4,7 +4,7 @@ import "../projects/index.js";
4
4
  import { basename, dirname, isAbsolute, relative, resolve, sep } from "node:path";
5
5
  import { constants } from "node:fs";
6
6
  import { createHash } from "node:crypto";
7
- import { access, lstat, opendir, realpath, stat } from "node:fs/promises";
7
+ import { access, lstat, open, opendir, realpath, stat } from "node:fs/promises";
8
8
  //#region src/files/file-service.ts
9
9
  init_agent_scope();
10
10
  const SKIPPED_NAMES = new Set([
@@ -12,26 +12,120 @@ const SKIPPED_NAMES = new Set([
12
12
  ".git",
13
13
  "node_modules"
14
14
  ]);
15
+ const TEXT_SNIFF_BYTES = 8 * 1024;
15
16
  const TEXT_EXTENSIONS = new Set([
17
+ "astro",
18
+ "bash",
19
+ "bat",
20
+ "c",
21
+ "cc",
22
+ "cfg",
23
+ "clj",
24
+ "cljs",
25
+ "cljc",
26
+ "cmd",
27
+ "conf",
28
+ "cpp",
29
+ "cs",
16
30
  "css",
17
31
  "csv",
18
- "html",
32
+ "cts",
33
+ "cxx",
34
+ "dart",
35
+ "editorconfig",
36
+ "edn",
37
+ "env",
38
+ "erl",
39
+ "ex",
40
+ "exs",
41
+ "fish",
42
+ "fs",
43
+ "fsx",
44
+ "gitattributes",
45
+ "gitignore",
46
+ "go",
47
+ "gql",
48
+ "graphql",
49
+ "groovy",
50
+ "h",
51
+ "hh",
52
+ "hpp",
53
+ "hrl",
19
54
  "htm",
55
+ "html",
56
+ "hxx",
57
+ "ini",
58
+ "java",
20
59
  "js",
21
60
  "json",
61
+ "json5",
62
+ "jsonc",
22
63
  "jsx",
23
- "md",
64
+ "kt",
65
+ "kts",
66
+ "less",
67
+ "lock",
68
+ "log",
69
+ "lua",
70
+ "m",
24
71
  "markdown",
72
+ "md",
25
73
  "mjs",
26
- "cjs",
74
+ "mm",
75
+ "mts",
76
+ "nix",
77
+ "npmrc",
78
+ "php",
79
+ "pl",
80
+ "pm",
81
+ "properties",
82
+ "proto",
83
+ "ps1",
84
+ "py",
85
+ "pyw",
86
+ "r",
87
+ "rb",
88
+ "rs",
89
+ "sass",
90
+ "scala",
91
+ "scss",
92
+ "sh",
93
+ "sol",
94
+ "sql",
95
+ "svelte",
27
96
  "svg",
97
+ "swift",
98
+ "tf",
99
+ "tfvars",
100
+ "toml",
28
101
  "ts",
29
- "tsx",
30
102
  "tsv",
103
+ "tsx",
31
104
  "txt",
105
+ "vue",
32
106
  "xml",
107
+ "xsd",
108
+ "xsl",
33
109
  "yaml",
34
- "yml"
110
+ "yml",
111
+ "zsh"
112
+ ]);
113
+ const TEXT_FILE_NAMES = new Set([
114
+ ".dockerignore",
115
+ ".eslintignore",
116
+ ".prettierignore",
117
+ ".stylelintignore",
118
+ "brewfile",
119
+ "changelog",
120
+ "codeowners",
121
+ "dockerfile",
122
+ "gemfile",
123
+ "jenkinsfile",
124
+ "license",
125
+ "makefile",
126
+ "procfile",
127
+ "rakefile",
128
+ "readme"
35
129
  ]);
36
130
  const MIME_TYPES = {
37
131
  png: "image/png",
@@ -82,17 +176,47 @@ function normalizeRelativePath(input) {
82
176
  if (normalized.includes("\0") || normalized.split("/").some((part) => part === "..")) throw new FileServiceError(400, "Invalid file path");
83
177
  return normalized.split("/").filter((part) => part && part !== ".").join("/");
84
178
  }
85
- function mimeType(name, directory) {
179
+ function fileExtension(name) {
180
+ return name.includes(".") ? name.split(".").pop().toLowerCase() : "";
181
+ }
182
+ function isTextFileName(name) {
183
+ const normalized = name.toLowerCase();
184
+ const extension = fileExtension(normalized);
185
+ return TEXT_EXTENSIONS.has(extension) || TEXT_FILE_NAMES.has(normalized) || normalized.startsWith(".env.") || normalized.startsWith("dockerfile.");
186
+ }
187
+ function bufferLooksText(buffer) {
188
+ if (buffer.length === 0) return true;
189
+ let controlBytes = 0;
190
+ for (const byte of buffer) {
191
+ if (byte === 0) return false;
192
+ if ((byte < 8 || byte > 13 && byte < 32) && byte !== 27) controlBytes += 1;
193
+ }
194
+ return controlBytes / buffer.length < .01;
195
+ }
196
+ async function isTextFile(name, absolutePath) {
197
+ if (isTextFileName(name)) return true;
198
+ if (MIME_TYPES[fileExtension(name)]) return false;
199
+ const handle = await open(absolutePath, "r").catch(() => null);
200
+ if (!handle) return false;
201
+ try {
202
+ const buffer = Buffer.allocUnsafe(TEXT_SNIFF_BYTES);
203
+ const { bytesRead } = await handle.read(buffer, 0, buffer.length, 0);
204
+ return bufferLooksText(buffer.subarray(0, bytesRead));
205
+ } finally {
206
+ await handle.close();
207
+ }
208
+ }
209
+ function mimeType(name, directory, textFile) {
86
210
  if (directory) return "inode/directory";
87
- return MIME_TYPES[name.includes(".") ? name.split(".").pop().toLowerCase() : ""] ?? "application/octet-stream";
211
+ return MIME_TYPES[fileExtension(name)] ?? (textFile ? "text/plain" : "application/octet-stream");
88
212
  }
89
- function capabilities(name, directory, writable) {
213
+ function capabilities(name, directory, writable, textFile) {
90
214
  if (directory) return writable ? ["share", "upload"] : ["share"];
91
- const extension = name.includes(".") ? name.split(".").pop().toLowerCase() : "";
215
+ const extension = fileExtension(name);
92
216
  const result = ["download", "share"];
93
- if (MIME_TYPES[extension] || TEXT_EXTENSIONS.has(extension)) result.unshift("preview");
217
+ if (MIME_TYPES[extension] || textFile) result.unshift("preview");
94
218
  if (writable) {
95
- if (TEXT_EXTENSIONS.has(extension)) result.push("edit");
219
+ if (textFile) result.push("edit");
96
220
  result.push("delete");
97
221
  }
98
222
  return result;
@@ -146,6 +270,7 @@ async function fileResourceFromPath(space, absolutePath, displayPath = absoluteP
146
270
  const relativePath = relative(await realpath(space.root), displayPath).split(sep).join("/");
147
271
  const name = basename(displayPath);
148
272
  const directory = info.isDirectory();
273
+ const textFile = !directory && await isTextFile(name, absolutePath);
149
274
  return {
150
275
  id: fileResourceId(space.id, relativePath),
151
276
  spaceId: space.id,
@@ -153,11 +278,11 @@ async function fileResourceFromPath(space, absolutePath, displayPath = absoluteP
153
278
  relativePath,
154
279
  parentPath: dirname(relativePath).split(sep).join("/").replace(/^\.$/, ""),
155
280
  kind: directory ? "directory" : "file",
156
- mimeType: mimeType(name, directory),
281
+ mimeType: mimeType(name, directory, textFile),
157
282
  size: info.size,
158
283
  modifiedAt: Math.max(0, Math.round(info.mtimeMs)),
159
284
  revision: `${revisionInfo.mtimeNs}:${revisionInfo.ctimeNs}:${revisionInfo.ino}:${revisionInfo.size}`,
160
- capabilities: capabilities(name, directory, space.writable)
285
+ capabilities: capabilities(name, directory, space.writable, textFile)
161
286
  };
162
287
  }
163
288
  var FileSpaceService = class {
@@ -6,20 +6,13 @@ export declare function buildSafeMcpConfigForWeb(config: Config): {
6
6
  sessionIdleTtlMs?: number;
7
7
  };
8
8
  export declare function buildSafeBrowserConfigForWeb(browser: unknown): {
9
+ security?: unknown;
10
+ limits?: unknown;
11
+ observation?: unknown;
12
+ driver?: {
13
+ [x: string]: unknown;
14
+ };
9
15
  enabled: boolean;
10
- headless: boolean;
11
- allowPrivateUrls: boolean;
12
- commandTimeout: number;
13
- backend: unknown;
14
- cloudProvider: unknown;
15
- cloud: Record<string, unknown>;
16
- cdpUrl: string;
17
- extension: unknown;
18
- cloakbrowser: unknown;
19
- humanize: unknown;
20
- humanPreset: unknown;
21
- dialogPolicy: unknown;
22
- dialogTimeoutSeconds: number;
23
16
  };
24
17
  /** Sanitized config snapshot for GET/PATCH `/api/config` (matches persisted `service.currentConfig`). */
25
18
  export declare function buildSafeWebConfigPayload(service: GatewayService, options?: {
@@ -192,20 +185,13 @@ export declare function buildSafeWebConfigPayload(service: GatewayService, optio
192
185
  skillsStoreBaseUrl: string;
193
186
  };
194
187
  browser: {
188
+ security?: unknown;
189
+ limits?: unknown;
190
+ observation?: unknown;
191
+ driver?: {
192
+ [x: string]: unknown;
193
+ };
195
194
  enabled: boolean;
196
- headless: boolean;
197
- allowPrivateUrls: boolean;
198
- commandTimeout: number;
199
- backend: unknown;
200
- cloudProvider: unknown;
201
- cloud: Record<string, unknown>;
202
- cdpUrl: string;
203
- extension: unknown;
204
- cloakbrowser: unknown;
205
- humanize: unknown;
206
- humanPreset: unknown;
207
- dialogPolicy: unknown;
208
- dialogTimeoutSeconds: number;
209
195
  };
210
196
  session: {
211
197
  dmScope: "main" | "per-peer" | "per-channel-peer" | "per-account-channel-peer";
@@ -46,47 +46,18 @@ function buildSafeMcpConfigForWeb(config) {
46
46
  servers: normalizeConfiguredMcpServers(mcp.servers)
47
47
  };
48
48
  }
49
- function maskBrowserCloudConfigForWeb(cloud) {
50
- if (!cloud || typeof cloud !== "object" || Array.isArray(cloud)) return null;
51
- const raw = cloud;
52
- const safe = {};
53
- if (typeof raw.apiKey === "string" && raw.apiKey.trim()) safe.apiKey = maskSecretLength(raw.apiKey);
54
- if (typeof raw.projectId === "string" && raw.projectId.trim()) safe.projectId = raw.projectId.trim();
55
- if (typeof raw.region === "string" && raw.region.trim()) safe.region = raw.region.trim();
56
- return Object.keys(safe).length > 0 ? safe : null;
57
- }
58
49
  function buildSafeBrowserConfigForWeb(browser) {
59
- if (!browser || typeof browser !== "object") return {
60
- enabled: false,
61
- headless: false,
62
- allowPrivateUrls: false,
63
- commandTimeout: null,
64
- backend: null,
65
- cloudProvider: null,
66
- cloud: null,
67
- cdpUrl: null,
68
- extension: null,
69
- cloakbrowser: null,
70
- humanize: null,
71
- humanPreset: null,
72
- dialogPolicy: null,
73
- dialogTimeoutSeconds: null
74
- };
50
+ if (!browser || typeof browser !== "object") return { enabled: false };
51
+ const raw = browser;
52
+ const rawDriver = raw.driver && typeof raw.driver === "object" && !Array.isArray(raw.driver) ? raw.driver : void 0;
53
+ const driver = rawDriver ? { ...rawDriver } : void 0;
54
+ if (driver?.kind === "remote" && typeof driver.apiKey === "string" && driver.apiKey.trim()) driver.apiKey = maskSecretLength(driver.apiKey);
75
55
  return {
76
- enabled: browser.enabled !== false,
77
- headless: browser.headless === true,
78
- allowPrivateUrls: browser.allowPrivateUrls === true,
79
- commandTimeout: typeof browser.commandTimeout === "number" && Number.isFinite(browser.commandTimeout) ? Math.floor(browser.commandTimeout) : null,
80
- backend: browser.backend === "local" || browser.backend === "cdp" || browser.backend === "cloud" || browser.backend === "extension" || browser.backend === "cloakbrowser" ? browser.backend : null,
81
- cloudProvider: browser.cloudProvider === "browserbase" || browser.cloudProvider === "browser-use" ? browser.cloudProvider : null,
82
- cloud: maskBrowserCloudConfigForWeb(browser.cloud),
83
- cdpUrl: typeof browser.cdpUrl === "string" && browser.cdpUrl.trim() ? browser.cdpUrl.trim() : null,
84
- extension: browser.extension && typeof browser.extension === "object" && !Array.isArray(browser.extension) ? browser.extension : null,
85
- cloakbrowser: browser.cloakbrowser && typeof browser.cloakbrowser === "object" && !Array.isArray(browser.cloakbrowser) ? browser.cloakbrowser : null,
86
- humanize: typeof browser.humanize === "boolean" ? browser.humanize : null,
87
- humanPreset: browser.humanPreset === "default" || browser.humanPreset === "careful" ? browser.humanPreset : null,
88
- dialogPolicy: browser.dialogPolicy === "must_respond" || browser.dialogPolicy === "auto_accept" || browser.dialogPolicy === "auto_dismiss" ? browser.dialogPolicy : null,
89
- dialogTimeoutSeconds: typeof browser.dialogTimeoutSeconds === "number" && Number.isFinite(browser.dialogTimeoutSeconds) ? Math.floor(browser.dialogTimeoutSeconds) : null
56
+ enabled: raw.enabled === true,
57
+ ...driver ? { driver } : {},
58
+ ...raw.observation ? { observation: raw.observation } : {},
59
+ ...raw.limits ? { limits: raw.limits } : {},
60
+ ...raw.security ? { security: raw.security } : {}
90
61
  };
91
62
  }
92
63
  /** Sanitized config snapshot for GET/PATCH `/api/config` (matches persisted `service.currentConfig`). */
@@ -0,0 +1,3 @@
1
+ import type { Hono } from 'hono';
2
+ import type { AuthenticatedRouteDeps } from './deps.js';
3
+ export declare function registerBrowserAutomationRoutes(authenticated: Hono, deps: AuthenticatedRouteDeps): void;