@xopcai/xopc 0.0.86 → 0.0.88

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 (658) hide show
  1. package/dist/browser-ext/manifest.json +1 -1
  2. package/dist/extensions/feishu/src/adapters/cli-login.js +3 -3
  3. package/dist/extensions/feishu/src/adapters/cli-login.js.map +1 -1
  4. package/dist/extensions/feishu/src/outbound/media-load.js +1 -1
  5. package/dist/extensions/feishu/src/workflow-progress.js +1 -1
  6. package/dist/extensions/telegram/src/delivery-chat-id.d.ts +1 -1
  7. package/dist/extensions/telegram/src/delivery-chat-id.js +1 -1
  8. package/dist/extensions/telegram/src/delivery-chat-id.js.map +1 -1
  9. package/dist/extensions/telegram/src/plugin.js +1 -1
  10. package/dist/extensions/telegram/src/routing-integration.js +3 -2
  11. package/dist/extensions/telegram/src/routing-integration.js.map +1 -1
  12. package/dist/extensions/telegram/src/workflow-progress.js +1 -1
  13. package/dist/extensions/telegram/xopc.extension.json +1 -1
  14. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +2 -2
  15. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +1 -1
  16. package/dist/extensions/weixin/src/api/api.js +3 -3
  17. package/dist/extensions/weixin/src/api/api.js.map +1 -1
  18. package/dist/extensions/weixin/src/auth/accounts.js +12 -12
  19. package/dist/extensions/weixin/src/auth/accounts.js.map +1 -1
  20. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  21. package/dist/extensions/weixin/src/delivery-to.js +2 -2
  22. package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
  23. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  24. package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
  25. package/dist/extensions/weixin/src/messaging/debug-mode.js.map +1 -1
  26. package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
  27. package/dist/extensions/weixin/src/messaging/inbound.js.map +1 -1
  28. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  29. package/dist/extensions/weixin/src/plugin.js +1 -1
  30. package/dist/extensions/weixin/src/storage/sync-buf.js +4 -4
  31. package/dist/extensions/weixin/src/storage/sync-buf.js.map +1 -1
  32. package/dist/extensions/weixin/src/workflow-progress.d.ts +1 -1
  33. package/dist/extensions/weixin/src/workflow-progress.js +1 -1
  34. package/dist/extensions/weixin/src/workflow-progress.js.map +1 -1
  35. package/dist/gateway/static/root/assets/agents-CRxETUZx.js +222 -0
  36. package/dist/gateway/static/root/assets/{apps-page-DrfytjOb.js → apps-page-wKWf3l57.js} +1 -1
  37. package/dist/gateway/static/root/assets/channels-settings-DDbqVNkx.js +1 -0
  38. package/dist/gateway/static/root/assets/{channels-status-swr-Bs5kMCMI.js → channels-status-swr-DIsl75Y3.js} +1 -1
  39. package/dist/gateway/static/root/assets/copy-SxMW6Xpc.js +1 -0
  40. package/dist/gateway/static/root/assets/{cron-api-BuVcZ5zR.js → cron-api-N9hvuRrn.js} +1 -1
  41. package/dist/gateway/static/root/assets/{cron-page-BMrloeFH.js → cron-page-tlNGNxhP.js} +1 -1
  42. package/dist/gateway/static/root/assets/{dist-CKU1OOTf.js → dist-CJwfHYvT.js} +1 -1
  43. package/dist/gateway/static/root/assets/{extension-debug-page-BdW_46sN.js → extension-debug-page-BVJohZoZ.js} +1 -1
  44. package/dist/gateway/static/root/assets/{extension-page-DW47KI82.js → extension-page-BT2tmElC.js} +1 -1
  45. package/dist/gateway/static/root/assets/extension-settings-page-BSS47c2j.js +1 -0
  46. package/dist/gateway/static/root/assets/{fetch-B2MYHbWg.js → fetch-BaFNUtkE.js} +1 -1
  47. package/dist/gateway/static/root/assets/{field-primitives-DPG-oJmx.js → field-primitives-QwYEq6Hz.js} +1 -1
  48. package/dist/gateway/static/root/assets/{heartbeat-config-api-C8dNts9i.js → heartbeat-config-api-BVSidEDJ.js} +1 -1
  49. package/dist/gateway/static/root/assets/index-CqZzHNEg.css +1 -0
  50. package/dist/gateway/static/root/assets/{index-BmVYculr.js → index-qNrVJp-y.js} +97 -95
  51. package/dist/gateway/static/root/assets/{logs-page-sTsVWz0X.js → logs-page-DDonPVLn.js} +1 -1
  52. package/dist/gateway/static/root/assets/sessions-page-DKt-Wmib.js +1 -0
  53. package/dist/gateway/static/root/assets/{settings-form-section-DuvRQW--.js → settings-form-section-B8N3A3Zo.js} +1 -1
  54. package/dist/gateway/static/root/assets/settings-page-DcJjvvw4.js +3 -0
  55. package/dist/gateway/static/root/assets/{share-preview-page-BtG2kLDh.js → share-preview-page-Q7KqkO-u.js} +1 -1
  56. package/dist/gateway/static/root/assets/skills-page-DuJ4BTO3.js +2 -0
  57. package/dist/gateway/static/root/assets/{theme-store-DryYl3qD.js → theme-store-BbRc5ugR.js} +1 -1
  58. package/dist/gateway/static/root/assets/url-D6jvVYIA.js +7 -0
  59. package/dist/gateway/static/root/assets/{utils-BY7bU1DT.js → utils-CxDGduqK.js} +1 -1
  60. package/dist/gateway/static/root/assets/voice-api-key-field-CTyHz7L_.js +1 -0
  61. package/dist/gateway/static/root/assets/workflows-page-GacJ41Fv.js +27 -0
  62. package/dist/gateway/static/root/index.html +6 -5
  63. package/dist/package.js +1 -1
  64. package/dist/src/agent/agent-manager.js +7 -7
  65. package/dist/src/agent/agent-scope.d.ts +4 -0
  66. package/dist/src/agent/agent-scope.js +53 -10
  67. package/dist/src/agent/agent-scope.js.map +1 -1
  68. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +2 -1
  69. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
  70. package/dist/src/agent/bootstrap/load-bootstrap-files.js +1 -1
  71. package/dist/src/agent/child-agent-factory.d.ts +15 -0
  72. package/dist/src/agent/child-agent-factory.js +35 -2
  73. package/dist/src/agent/child-agent-factory.js.map +1 -1
  74. package/dist/src/agent/client-error-format.d.ts +20 -0
  75. package/dist/src/agent/client-error-format.js +97 -0
  76. package/dist/src/agent/client-error-format.js.map +1 -0
  77. package/dist/src/agent/context/workspace-seed.js +2 -2
  78. package/dist/src/agent/embedded/run-turn.js +23 -4
  79. package/dist/src/agent/embedded/run-turn.js.map +1 -1
  80. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -1
  81. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  82. package/dist/src/agent/embedded/tool-result-truncation.js +2 -1
  83. package/dist/src/agent/embedded/tool-result-truncation.js.map +1 -1
  84. package/dist/src/agent/fallback/candidates.js +2 -2
  85. package/dist/src/agent/fallback/candidates.js.map +1 -1
  86. package/dist/src/agent/goals/goal-locale.d.ts +1 -1
  87. package/dist/src/agent/goals/goal-run-store.js +4 -4
  88. package/dist/src/agent/goals/persistent-goal-apis.d.ts +0 -2
  89. package/dist/src/agent/goals/persistent-goal-service.js +1 -2
  90. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
  91. package/dist/src/agent/goals/post-turn.js +2 -2
  92. package/dist/src/agent/image/generation/normalization.js +2 -12
  93. package/dist/src/agent/image/generation/normalization.js.map +1 -1
  94. package/dist/src/agent/image/generation/provider-registry.d.ts +4 -8
  95. package/dist/src/agent/image/generation/provider-registry.js.map +1 -1
  96. package/dist/src/agent/image/generation/runtime.d.ts +2 -2
  97. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  98. package/dist/src/agent/image/generation/types.d.ts +0 -18
  99. package/dist/src/agent/image/image-helpers.js +6 -1
  100. package/dist/src/agent/image/image-helpers.js.map +1 -1
  101. package/dist/src/agent/image/index.d.ts +1 -1
  102. package/dist/src/agent/image/load-image-media.js +2 -2
  103. package/dist/src/agent/inbound/inbound-loop.d.ts +5 -0
  104. package/dist/src/agent/inbound/inbound-loop.js +41 -10
  105. package/dist/src/agent/inbound/inbound-loop.js.map +1 -1
  106. package/dist/src/agent/inbound/turn-dispatcher.d.ts +4 -0
  107. package/dist/src/agent/inbound/turn-dispatcher.js +7 -5
  108. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  109. package/dist/src/agent/ipc/bus.js +1 -1
  110. package/dist/src/agent/ipc/inbox.js +2 -2
  111. package/dist/src/agent/ipc/socket.js +1 -1
  112. package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -1
  113. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +1 -1
  114. package/dist/src/agent/mcp/bundle-mcp-names.js +2 -1
  115. package/dist/src/agent/mcp/bundle-mcp-names.js.map +1 -1
  116. package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -1
  117. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  118. package/dist/src/agent/mcp/mcp-transport-config.js +2 -1
  119. package/dist/src/agent/mcp/mcp-transport-config.js.map +1 -1
  120. package/dist/src/agent/mcp/mcp-transport.js +2 -1
  121. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  122. package/dist/src/agent/media-generation/runtime-shared.js +2 -9
  123. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  124. package/dist/src/agent/memory/builtin-memory-store.js +1 -1
  125. package/dist/src/agent/memory/dreaming/deep-promotion.js +1 -1
  126. package/dist/src/agent/memory/dreaming/events.js +1 -1
  127. package/dist/src/agent/memory/dreaming/last-run.js +1 -1
  128. package/dist/src/agent/memory/dreaming/light-sweep.js +1 -1
  129. package/dist/src/agent/memory/dreaming/preview.js +1 -1
  130. package/dist/src/agent/memory/dreaming/rem-patterns.js +1 -1
  131. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  132. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  133. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  134. package/dist/src/agent/messaging/command-handler.d.ts +6 -0
  135. package/dist/src/agent/messaging/command-handler.js +5 -0
  136. package/dist/src/agent/messaging/command-handler.js.map +1 -1
  137. package/dist/src/agent/models/manager.js +1 -1
  138. package/dist/src/agent/orchestration/llm-turn-retry.d.ts +2 -0
  139. package/dist/src/agent/orchestration/llm-turn-retry.js +9 -1
  140. package/dist/src/agent/orchestration/llm-turn-retry.js.map +1 -1
  141. package/dist/src/agent/prompt/safety.d.ts +0 -7
  142. package/dist/src/agent/prompt/safety.js +1 -20
  143. package/dist/src/agent/prompt/safety.js.map +1 -1
  144. package/dist/src/agent/prompt/service-prompt-builder.js +2 -2
  145. package/dist/src/agent/reply/post-compaction-context.js +1 -1
  146. package/dist/src/agent/reply/workspace-boundary-read.js +1 -1
  147. package/dist/src/agent/sandbox/path-policy.js +2 -2
  148. package/dist/src/agent/service/build-direct-message-content.js +2 -2
  149. package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
  150. package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -1
  151. package/dist/src/agent/service/direct-turn-helpers.js +6 -1
  152. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  153. package/dist/src/agent/service/process-direct-one-shot.d.ts +4 -0
  154. package/dist/src/agent/service/process-direct-one-shot.js +15 -2
  155. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  156. package/dist/src/agent/service/process-direct-streaming.d.ts +4 -0
  157. package/dist/src/agent/service/process-direct-streaming.js +53 -7
  158. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  159. package/dist/src/agent/service/webchat-tts.d.ts +1 -2
  160. package/dist/src/agent/service/webchat-tts.js +2 -2
  161. package/dist/src/agent/service/webchat-tts.js.map +1 -1
  162. package/dist/src/agent/service.d.ts +8 -0
  163. package/dist/src/agent/service.js +25 -5
  164. package/dist/src/agent/service.js.map +1 -1
  165. package/dist/src/agent/session/session-inspector.js +1 -1
  166. package/dist/src/agent/skills/config.js +1 -1
  167. package/dist/src/agent/skills/hub-hash.js +2 -2
  168. package/dist/src/agent/skills/hub-lock.js +1 -1
  169. package/dist/src/agent/skills/hub-pull.js +2 -2
  170. package/dist/src/agent/skills/index.js +1 -1
  171. package/dist/src/agent/skills/managed-store.js +1 -1
  172. package/dist/src/agent/skills/scanner.js +1 -1
  173. package/dist/src/agent/skills/skill-manage-ops.js +1 -1
  174. package/dist/src/agent/skills/skill-manager.js +1 -1
  175. package/dist/src/agent/tools/create-share-tool.js +27 -20
  176. package/dist/src/agent/tools/create-share-tool.js.map +1 -1
  177. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  178. package/dist/src/agent/tools/factory.js +2 -2
  179. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  180. package/dist/src/agent/tools/index.d.ts +0 -1
  181. package/dist/src/agent/tools/index.js +4 -5
  182. package/dist/src/agent/tools/send-media.js +1 -1
  183. package/dist/src/agent/tools/shell.js +0 -13
  184. package/dist/src/agent/tools/shell.js.map +1 -1
  185. package/dist/src/agent/tools/skill-manage-tool.js +1 -1
  186. package/dist/src/agent/tools/workflow-tool.js +70 -16
  187. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  188. package/dist/src/agent/tools/write.js +1 -1
  189. package/dist/src/agent/workflow/agent-progress.d.ts +5 -0
  190. package/dist/src/agent/workflow/agent-progress.js +65 -0
  191. package/dist/src/agent/workflow/agent-progress.js.map +1 -0
  192. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +1 -1
  193. package/dist/src/agent/workflow/builtins/audit-repo.js +14 -0
  194. package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
  195. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +1 -1
  196. package/dist/src/agent/workflow/builtins/debug-incident.js +14 -0
  197. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -1
  198. package/dist/src/agent/workflow/builtins/implementation-plan.d.ts +12 -0
  199. package/dist/src/agent/workflow/builtins/implementation-plan.js +175 -0
  200. package/dist/src/agent/workflow/builtins/implementation-plan.js.map +1 -0
  201. package/dist/src/agent/workflow/builtins/index.d.ts +3 -1
  202. package/dist/src/agent/workflow/builtins/index.js +11 -1
  203. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  204. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +1 -1
  205. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +14 -0
  206. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
  207. package/dist/src/agent/workflow/builtins/pr-review.d.ts +1 -1
  208. package/dist/src/agent/workflow/builtins/pr-review.js +14 -0
  209. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -1
  210. package/dist/src/agent/workflow/builtins/release-check.d.ts +11 -0
  211. package/dist/src/agent/workflow/builtins/release-check.js +165 -0
  212. package/dist/src/agent/workflow/builtins/release-check.js.map +1 -0
  213. package/dist/src/agent/workflow/builtins/research.d.ts +1 -1
  214. package/dist/src/agent/workflow/builtins/research.js +14 -0
  215. package/dist/src/agent/workflow/builtins/research.js.map +1 -1
  216. package/dist/src/agent/workflow/catalog.js +1 -1
  217. package/dist/src/agent/workflow/channel-capability.d.ts +3 -3
  218. package/dist/src/agent/workflow/index.d.ts +2 -1
  219. package/dist/src/agent/workflow/index.js +3 -2
  220. package/dist/src/agent/workflow/lint.d.ts +38 -0
  221. package/dist/src/agent/workflow/lint.js +74 -0
  222. package/dist/src/agent/workflow/lint.js.map +1 -0
  223. package/dist/src/agent/workflow/meta-locale.d.ts +12 -0
  224. package/dist/src/agent/workflow/meta-locale.js +62 -0
  225. package/dist/src/agent/workflow/meta-locale.js.map +1 -0
  226. package/dist/src/agent/workflow/parser.js +7 -1
  227. package/dist/src/agent/workflow/parser.js.map +1 -1
  228. package/dist/src/agent/workflow/runtime.d.ts +4 -1
  229. package/dist/src/agent/workflow/runtime.js +88 -8
  230. package/dist/src/agent/workflow/runtime.js.map +1 -1
  231. package/dist/src/agent/workflow/snapshot.js +2 -12
  232. package/dist/src/agent/workflow/snapshot.js.map +1 -1
  233. package/dist/src/agent/workflow/step-labels.d.ts +8 -0
  234. package/dist/src/agent/workflow/step-labels.js +48 -0
  235. package/dist/src/agent/workflow/step-labels.js.map +1 -0
  236. package/dist/src/agent/workflow/subagent-runner.js +46 -1
  237. package/dist/src/agent/workflow/subagent-runner.js.map +1 -1
  238. package/dist/src/agent/workflow/types.d.ts +76 -1
  239. package/dist/src/auth/credentials.d.ts +5 -0
  240. package/dist/src/auth/credentials.js +12 -3
  241. package/dist/src/auth/credentials.js.map +1 -1
  242. package/dist/src/auth/profiles/store.js +1 -1
  243. package/dist/src/auth/sync-provider-auth.js +1 -1
  244. package/dist/src/browser/cache-dir-policy.js +1 -1
  245. package/dist/src/browser/cdp-local-launcher.js +2 -2
  246. package/dist/src/browser/index.js +4 -4
  247. package/dist/src/browser/manager.d.ts +1 -3
  248. package/dist/src/browser/manager.js +0 -6
  249. package/dist/src/browser/manager.js.map +1 -1
  250. package/dist/src/browser/providers/browser-ext-install.d.ts +4 -4
  251. package/dist/src/browser/providers/browser-ext-install.js +41 -88
  252. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  253. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -5
  254. package/dist/src/browser/providers/cloakbrowser.js +6 -59
  255. package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
  256. package/dist/src/browser/providers/playwright-doctor.js +1 -1
  257. package/dist/src/browser/stealth.js +1 -1
  258. package/dist/src/channels/attachments/inbound-persist.js +1 -1
  259. package/dist/src/channels/attachments/outbound-tts-persist.js +1 -1
  260. package/dist/src/channels/attachments/voice-stt-webchat.js +10 -8
  261. package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
  262. package/dist/src/channels/outbound/persist-store.js +1 -1
  263. package/dist/src/channels/pairing/allow-from-file.js +9 -9
  264. package/dist/src/channels/pairing/allow-from-file.js.map +1 -1
  265. package/dist/src/channels/pairing/pairing-store.js +7 -7
  266. package/dist/src/channels/pairing/pairing-store.js.map +1 -1
  267. package/dist/src/chat-commands/builtins/config.js +2 -2
  268. package/dist/src/chat-commands/builtins/session.js +1 -1
  269. package/dist/src/chat-commands/builtins/session.js.map +1 -1
  270. package/dist/src/chat-commands/builtins/tts.js +2 -2
  271. package/dist/src/chat-commands/builtins/tts.js.map +1 -1
  272. package/dist/src/chat-commands/context.d.ts +3 -0
  273. package/dist/src/chat-commands/context.js +22 -4
  274. package/dist/src/chat-commands/context.js.map +1 -1
  275. package/dist/src/chat-commands/session-key.d.ts +4 -37
  276. package/dist/src/chat-commands/session-key.js +49 -85
  277. package/dist/src/chat-commands/session-key.js.map +1 -1
  278. package/dist/src/chat-commands/types.d.ts +2 -0
  279. package/dist/src/cli/commands/agent/interactive.js +2 -2
  280. package/dist/src/cli/commands/agent/interactive.js.map +1 -1
  281. package/dist/src/cli/commands/agent/sessions.js +2 -2
  282. package/dist/src/cli/commands/agent/sessions.js.map +1 -1
  283. package/dist/src/cli/commands/agent.js +4 -5
  284. package/dist/src/cli/commands/agent.js.map +1 -1
  285. package/dist/src/cli/commands/channels.js +1 -5
  286. package/dist/src/cli/commands/channels.js.map +1 -1
  287. package/dist/src/cli/commands/config.js +1 -1
  288. package/dist/src/cli/commands/doctor/checks/config-health.js +1 -1
  289. package/dist/src/cli/commands/doctor/checks/provider-auth.js +1 -1
  290. package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
  291. package/dist/src/cli/commands/doctor/checks/state-integrity.js +1 -1
  292. package/dist/src/cli/commands/doctor/checks/workspace-status.js +1 -1
  293. package/dist/src/cli/commands/extension-dev.js +1 -1
  294. package/dist/src/cli/commands/extension-marketplace.js +1 -1
  295. package/dist/src/cli/commands/extension-pack.js +1 -1
  296. package/dist/src/cli/commands/gateway/lifecycle-core.js +1 -1
  297. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
  298. package/dist/src/cli/commands/gateway/logs.d.ts +9 -0
  299. package/dist/src/cli/commands/gateway/logs.js +50 -17
  300. package/dist/src/cli/commands/gateway/logs.js.map +1 -1
  301. package/dist/src/cli/commands/image.js +23 -22
  302. package/dist/src/cli/commands/image.js.map +1 -1
  303. package/dist/src/cli/commands/init.js +4 -4
  304. package/dist/src/cli/commands/onboard.js +1 -1
  305. package/dist/src/cli/commands/session/utils.js +2 -2
  306. package/dist/src/cli/commands/session/utils.js.map +1 -1
  307. package/dist/src/cli/commands/update.js +26 -46
  308. package/dist/src/cli/commands/update.js.map +1 -1
  309. package/dist/src/cli/utils/init-workspace-core.js +2 -2
  310. package/dist/src/cli/utils/session.d.ts +0 -5
  311. package/dist/src/cli/utils/session.js +1 -6
  312. package/dist/src/cli/utils/session.js.map +1 -1
  313. package/dist/src/commands/agents.config.js +1 -1
  314. package/dist/src/commands/agents.config.js.map +1 -1
  315. package/dist/src/config/agent-profile.js +6 -28
  316. package/dist/src/config/agent-profile.js.map +1 -1
  317. package/dist/src/config/agent-typed-models.d.ts +18 -0
  318. package/dist/src/config/agent-typed-models.js +53 -0
  319. package/dist/src/config/agent-typed-models.js.map +1 -0
  320. package/dist/src/config/gateway-bind.js +1 -1
  321. package/dist/src/config/index.js +6 -6
  322. package/dist/src/config/loader.js +2 -2
  323. package/dist/src/config/model-input.js +2 -5
  324. package/dist/src/config/model-input.js.map +1 -1
  325. package/dist/src/config/models-json.js +2 -2
  326. package/dist/src/config/paths-state.js +1 -1
  327. package/dist/src/config/profile.js +2 -2
  328. package/dist/src/config/schema.d.ts +253 -217
  329. package/dist/src/config/schema.js +91 -40
  330. package/dist/src/config/schema.js.map +1 -1
  331. package/dist/src/config/voice.d.ts +3 -28
  332. package/dist/src/config/voice.js +27 -261
  333. package/dist/src/config/voice.js.map +1 -1
  334. package/dist/src/config/workspace-path-helpers.d.ts +1 -2
  335. package/dist/src/config/workspace-path-helpers.js.map +1 -1
  336. package/dist/src/config/workspace-path.js +1 -1
  337. package/dist/src/cron/executor.js +2 -2
  338. package/dist/src/cron/persistence.js +1 -1
  339. package/dist/src/cron/run-log-store.js +1 -1
  340. package/dist/src/daemon/constants.js +1 -1
  341. package/dist/src/daemon/install-plan.js +27 -3
  342. package/dist/src/daemon/install-plan.js.map +1 -1
  343. package/dist/src/daemon/launchd.d.ts +8 -0
  344. package/dist/src/daemon/launchd.js +7 -14
  345. package/dist/src/daemon/launchd.js.map +1 -1
  346. package/dist/src/daemon/schtasks.d.ts +25 -0
  347. package/dist/src/daemon/schtasks.js +168 -48
  348. package/dist/src/daemon/schtasks.js.map +1 -1
  349. package/dist/src/daemon/service.js +5 -4
  350. package/dist/src/daemon/service.js.map +1 -1
  351. package/dist/src/daemon/systemd.d.ts +6 -0
  352. package/dist/src/daemon/systemd.js +20 -5
  353. package/dist/src/daemon/systemd.js.map +1 -1
  354. package/dist/src/extensions/activation-context.js +0 -1
  355. package/dist/src/extensions/activation-context.js.map +1 -1
  356. package/dist/src/extensions/bundle-mcp.js +1 -1
  357. package/dist/src/extensions/discover-extensions.js +1 -1
  358. package/dist/src/extensions/health.js +1 -1
  359. package/dist/src/extensions/loader.js +1 -1
  360. package/dist/src/extensions/lockfile.js +2 -2
  361. package/dist/src/extensions/normalize-manifest.js +0 -1
  362. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  363. package/dist/src/extensions/types/manifest.d.ts +0 -2
  364. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  365. package/dist/src/gateway/agent-builtin-tools.js +1 -0
  366. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  367. package/dist/src/gateway/agents-admin.d.ts +9 -0
  368. package/dist/src/gateway/agents-admin.js +28 -4
  369. package/dist/src/gateway/agents-admin.js.map +1 -1
  370. package/dist/src/gateway/config-tools-web.js +3 -2
  371. package/dist/src/gateway/config-tools-web.js.map +1 -1
  372. package/dist/src/gateway/file-path-classifier.js +2 -2
  373. package/dist/src/gateway/heartbeat/service.js +2 -2
  374. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  375. package/dist/src/gateway/hono/app.js +1 -1
  376. package/dist/src/gateway/hono/lib/agent-model.d.ts +25 -10
  377. package/dist/src/gateway/hono/lib/agent-model.js +60 -36
  378. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  379. package/dist/src/gateway/hono/lib/config-payload.js +29 -6
  380. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  381. package/dist/src/gateway/hono/lib/extension-store.js +2 -2
  382. package/dist/src/gateway/hono/lib/mask-secret-length.d.ts +6 -0
  383. package/dist/src/gateway/hono/lib/mask-secret-length.js +16 -0
  384. package/dist/src/gateway/hono/lib/mask-secret-length.js.map +1 -0
  385. package/dist/src/gateway/hono/lib/safe-providers-config.d.ts +1 -1
  386. package/dist/src/gateway/hono/lib/safe-providers-config.js +2 -1
  387. package/dist/src/gateway/hono/lib/safe-providers-config.js.map +1 -1
  388. package/dist/src/gateway/hono/lib/safe-voice-config.js +16 -54
  389. package/dist/src/gateway/hono/lib/safe-voice-config.js.map +1 -1
  390. package/dist/src/gateway/hono/lib/static-ui.js +2 -2
  391. package/dist/src/gateway/hono/oauth.js +1 -1
  392. package/dist/src/gateway/hono/routes/agents.js +2 -2
  393. package/dist/src/gateway/hono/routes/auth-registry-extensions.js +1 -1
  394. package/dist/src/gateway/hono/routes/config-patch/agents.js +25 -7
  395. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  396. package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -11
  397. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  398. package/dist/src/gateway/hono/routes/config-patch/gateway.js +3 -2
  399. package/dist/src/gateway/hono/routes/config-patch/gateway.js.map +1 -1
  400. package/dist/src/gateway/hono/routes/config-patch/misc.js +8 -3
  401. package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
  402. package/dist/src/gateway/hono/routes/config.js +59 -0
  403. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  404. package/dist/src/gateway/hono/routes/dreaming.js +1 -1
  405. package/dist/src/gateway/hono/routes/goals.js +1 -1
  406. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  407. package/dist/src/gateway/hono/routes/host-fs.js +2 -2
  408. package/dist/src/gateway/hono/routes/lazy-bundles.js +8 -0
  409. package/dist/src/gateway/hono/routes/lazy-bundles.js.map +1 -1
  410. package/dist/src/gateway/hono/routes/models.js +75 -12
  411. package/dist/src/gateway/hono/routes/models.js.map +1 -1
  412. package/dist/src/gateway/hono/routes/sessions.js +28 -7
  413. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  414. package/dist/src/gateway/hono/routes/shares.js +15 -13
  415. package/dist/src/gateway/hono/routes/shares.js.map +1 -1
  416. package/dist/src/gateway/hono/routes/tunnel.js +1 -1
  417. package/dist/src/gateway/hono/routes/update.js +4 -2
  418. package/dist/src/gateway/hono/routes/update.js.map +1 -1
  419. package/dist/src/gateway/hono/routes/voice.js +75 -0
  420. package/dist/src/gateway/hono/routes/voice.js.map +1 -1
  421. package/dist/src/gateway/hono/routes/workflows.d.ts +3 -0
  422. package/dist/src/gateway/hono/routes/workflows.js +347 -0
  423. package/dist/src/gateway/hono/routes/workflows.js.map +1 -0
  424. package/dist/src/gateway/hono/routes/workspace.js +4 -4
  425. package/dist/src/gateway/hono/sse.js +16 -33
  426. package/dist/src/gateway/hono/sse.js.map +1 -1
  427. package/dist/src/gateway/lock.js +11 -11
  428. package/dist/src/gateway/lock.js.map +1 -1
  429. package/dist/src/gateway/ports.js +6 -6
  430. package/dist/src/gateway/ports.js.map +1 -1
  431. package/dist/src/gateway/resolve-webchat-session-key.d.ts +19 -0
  432. package/dist/src/gateway/resolve-webchat-session-key.js +46 -0
  433. package/dist/src/gateway/resolve-webchat-session-key.js.map +1 -0
  434. package/dist/src/gateway/service/agent-runner.js +2 -2
  435. package/dist/src/gateway/service/marketplace-service.js +2 -2
  436. package/dist/src/gateway/service/run-gateway-agent.js +9 -11
  437. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  438. package/dist/src/gateway/service/sessions-api.d.ts +3 -0
  439. package/dist/src/gateway/service/sessions-api.js +8 -0
  440. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  441. package/dist/src/gateway/service.d.ts +3 -2
  442. package/dist/src/gateway/service.js +9 -8
  443. package/dist/src/gateway/service.js.map +1 -1
  444. package/dist/src/gateway/session-reset-service.d.ts +20 -0
  445. package/dist/src/gateway/session-reset-service.js +54 -0
  446. package/dist/src/gateway/session-reset-service.js.map +1 -0
  447. package/dist/src/gateway/startup-readiness.d.ts +1 -1
  448. package/dist/src/gateway/startup-readiness.js +1 -0
  449. package/dist/src/gateway/startup-readiness.js.map +1 -1
  450. package/dist/src/gateway/workspace-fs-file-list.js +1 -1
  451. package/dist/src/heartbeat/index.js +1 -1
  452. package/dist/src/infra/gateway-processes.js +2 -2
  453. package/dist/src/infra/gateway-processes.js.map +1 -1
  454. package/dist/src/infra/restart.js +2 -2
  455. package/dist/src/infra/run-command.d.ts +16 -0
  456. package/dist/src/infra/run-command.js +67 -0
  457. package/dist/src/infra/run-command.js.map +1 -0
  458. package/dist/src/infra/update-check.js +1 -1
  459. package/dist/src/infra/update-global.d.ts +45 -0
  460. package/dist/src/infra/update-global.js +224 -0
  461. package/dist/src/infra/update-global.js.map +1 -0
  462. package/dist/src/infra/update-lock.js +3 -3
  463. package/dist/src/infra/update-runner.js +1 -1
  464. package/dist/src/infra/update-startup.js +2 -2
  465. package/dist/src/infra/write-file-atomic.js +2 -2
  466. package/dist/src/mcp/channel-shared.js +2 -1
  467. package/dist/src/mcp/channel-shared.js.map +1 -1
  468. package/dist/src/providers/auth-runtime/auth-profile-store.js +2 -2
  469. package/dist/src/providers/auth-runtime/auth-profile-store.js.map +1 -1
  470. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -12
  471. package/dist/src/providers/auth-runtime/resolve-auth.js.map +1 -1
  472. package/dist/src/providers/auth-runtime/types.d.ts +6 -12
  473. package/dist/src/providers/index.js +2 -2
  474. package/dist/src/providers/model-registry.js +1 -1
  475. package/dist/src/routing/agent-session-key.d.ts +58 -0
  476. package/dist/src/routing/agent-session-key.js +164 -0
  477. package/dist/src/routing/agent-session-key.js.map +1 -0
  478. package/dist/src/routing/index.d.ts +1 -1
  479. package/dist/src/routing/index.js +4 -2
  480. package/dist/src/routing/index.js.map +1 -1
  481. package/dist/src/routing/resolve-route.d.ts +15 -0
  482. package/dist/src/routing/resolve-route.js +41 -20
  483. package/dist/src/routing/resolve-route.js.map +1 -1
  484. package/dist/src/routing/resolve-tui-session-key.d.ts +25 -0
  485. package/dist/src/routing/resolve-tui-session-key.js +54 -0
  486. package/dist/src/routing/resolve-tui-session-key.js.map +1 -0
  487. package/dist/src/routing/session-key-utils.d.ts +24 -0
  488. package/dist/src/routing/session-key-utils.js +92 -0
  489. package/dist/src/routing/session-key-utils.js.map +1 -0
  490. package/dist/src/routing/session-key.d.ts +19 -49
  491. package/dist/src/routing/session-key.js +143 -116
  492. package/dist/src/routing/session-key.js.map +1 -1
  493. package/dist/src/session/config-store.js +2 -2
  494. package/dist/src/session/index.d.ts +6 -0
  495. package/dist/src/session/index.js +7 -1
  496. package/dist/src/session/init-session-turn.d.ts +30 -0
  497. package/dist/src/session/init-session-turn.js +102 -0
  498. package/dist/src/session/init-session-turn.js.map +1 -0
  499. package/dist/src/session/lifecycle-timestamps.d.ts +8 -0
  500. package/dist/src/session/lifecycle-timestamps.js +16 -0
  501. package/dist/src/session/lifecycle-timestamps.js.map +1 -0
  502. package/dist/src/session/manager.d.ts +7 -1
  503. package/dist/src/session/manager.js +8 -1
  504. package/dist/src/session/manager.js.map +1 -1
  505. package/dist/src/session/parity/jsonl-transcript-io.js +2 -2
  506. package/dist/src/session/parity/sessions-json-file.js +1 -1
  507. package/dist/src/session/parity/transcript-file-lock.js +2 -2
  508. package/dist/src/session/parity/transcript-paths.js +2 -2
  509. package/dist/src/session/parity/transcript-paths.js.map +1 -1
  510. package/dist/src/session/parity/xopc-session-disk-entry.d.ts +6 -0
  511. package/dist/src/session/reset-policy.d.ts +32 -0
  512. package/dist/src/session/reset-policy.js +65 -0
  513. package/dist/src/session/reset-policy.js.map +1 -0
  514. package/dist/src/session/reset-triggers.d.ts +20 -0
  515. package/dist/src/session/reset-triggers.js +63 -0
  516. package/dist/src/session/reset-triggers.js.map +1 -0
  517. package/dist/src/session/reset-type.d.ts +12 -0
  518. package/dist/src/session/reset-type.js +25 -0
  519. package/dist/src/session/reset-type.js.map +1 -0
  520. package/dist/src/session/resolve-session.d.ts +30 -0
  521. package/dist/src/session/resolve-session.js +93 -0
  522. package/dist/src/session/resolve-session.js.map +1 -0
  523. package/dist/src/session/search-index-cache.js +1 -1
  524. package/dist/src/session/search-index.js +1 -1
  525. package/dist/src/session/session-title.js +3 -2
  526. package/dist/src/session/session-title.js.map +1 -1
  527. package/dist/src/session/store.d.ts +11 -4
  528. package/dist/src/session/store.js +62 -11
  529. package/dist/src/session/store.js.map +1 -1
  530. package/dist/src/session/transcript-events.js +2 -1
  531. package/dist/src/session/transcript-events.js.map +1 -1
  532. package/dist/src/share/share-auto.js +2 -2
  533. package/dist/src/share/share-store.js +3 -3
  534. package/dist/src/share/share-thumbnail.js +2 -2
  535. package/dist/src/share/share-url.d.ts +33 -0
  536. package/dist/src/share/share-url.js +56 -14
  537. package/dist/src/share/share-url.js.map +1 -1
  538. package/dist/src/share/share-zip.js +1 -1
  539. package/dist/src/share/site-share-store.js +3 -3
  540. package/dist/src/share/site-static-serve.js +1 -1
  541. package/dist/src/tui/backends/embedded-backend.js +4 -9
  542. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  543. package/dist/src/tui/backends/gateway-sse-backend.js +1 -1
  544. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  545. package/dist/src/tui/clipboard-image.js +3 -3
  546. package/dist/src/tui/components/chat-log.js +3 -3
  547. package/dist/src/tui/components/chat-log.js.map +1 -1
  548. package/dist/src/tui/theme-manager.js +1 -1
  549. package/dist/src/tui/theme.d.ts +0 -2
  550. package/dist/src/tui/theme.js +1 -3
  551. package/dist/src/tui/theme.js.map +1 -1
  552. package/dist/src/tui/tui-agent-events.js +2 -1
  553. package/dist/src/tui/tui-agent-events.js.map +1 -1
  554. package/dist/src/tui/tui-commands.d.ts +3 -0
  555. package/dist/src/tui/tui-commands.js +45 -10
  556. package/dist/src/tui/tui-commands.js.map +1 -1
  557. package/dist/src/tui/tui-keybindings-file.js +2 -22
  558. package/dist/src/tui/tui-keybindings-file.js.map +1 -1
  559. package/dist/src/tui/tui-scoped-models.js +2 -2
  560. package/dist/src/tui/tui-session-actions.d.ts +28 -0
  561. package/dist/src/tui/tui-session-actions.js +88 -0
  562. package/dist/src/tui/tui-session-actions.js.map +1 -0
  563. package/dist/src/tui/tui-settings.js +1 -1
  564. package/dist/src/tui/tui.js +54 -49
  565. package/dist/src/tui/tui.js.map +1 -1
  566. package/dist/src/tunnel/frpc-binary.js +3 -3
  567. package/dist/src/tunnel/frpc-config.js +1 -1
  568. package/dist/src/tunnel/frpc-extract.js +1 -1
  569. package/dist/src/tunnel/tunnel-state.js +1 -1
  570. package/dist/src/utils/logger/audit.js +1 -1
  571. package/dist/src/utils/logger/log-store.js +1 -1
  572. package/dist/src/utils/logger/rotation.js +1 -1
  573. package/dist/src/utils/string-coerce.d.ts +2 -0
  574. package/dist/src/utils/string-coerce.js +10 -1
  575. package/dist/src/utils/string-coerce.js.map +1 -1
  576. package/dist/src/voice/metadata/builtin.d.ts +2 -0
  577. package/dist/src/voice/metadata/builtin.js +420 -0
  578. package/dist/src/voice/metadata/builtin.js.map +1 -0
  579. package/dist/src/voice/metadata/index.d.ts +4 -0
  580. package/dist/src/voice/metadata/index.js +3 -0
  581. package/dist/src/voice/metadata/registry.d.ts +5 -0
  582. package/dist/src/voice/metadata/registry.js +34 -0
  583. package/dist/src/voice/metadata/registry.js.map +1 -0
  584. package/dist/src/voice/metadata/types.d.ts +41 -0
  585. package/dist/src/voice/metadata/types.js +1 -0
  586. package/dist/src/voice/stt/config-slice.d.ts +2 -5
  587. package/dist/src/voice/stt/config-slice.js +5 -26
  588. package/dist/src/voice/stt/config-slice.js.map +1 -1
  589. package/dist/src/voice/stt/list-providers.d.ts +3 -3
  590. package/dist/src/voice/stt/list-providers.js +41 -6
  591. package/dist/src/voice/stt/list-providers.js.map +1 -1
  592. package/dist/src/voice/stt/types.d.ts +1 -18
  593. package/dist/src/voice/stt/types.js +4 -2
  594. package/dist/src/voice/stt/types.js.map +1 -1
  595. package/dist/src/voice/tts/audio.js +1 -1
  596. package/dist/src/voice/tts/config-slice.d.ts +3 -7
  597. package/dist/src/voice/tts/config-slice.js +7 -38
  598. package/dist/src/voice/tts/config-slice.js.map +1 -1
  599. package/dist/src/voice/tts/list-providers.d.ts +3 -3
  600. package/dist/src/voice/tts/list-providers.js +41 -6
  601. package/dist/src/voice/tts/list-providers.js.map +1 -1
  602. package/dist/src/voice/tts/merge-config.js +2 -48
  603. package/dist/src/voice/tts/merge-config.js.map +1 -1
  604. package/dist/src/voice/tts/providers/alibaba-speech.js +1 -1
  605. package/dist/src/voice/tts/providers/alibaba-speech.js.map +1 -1
  606. package/dist/src/voice/tts/providers/edge-speech.js +2 -2
  607. package/dist/src/voice/tts/types.d.ts +1 -29
  608. package/dist/src/voice/tts/types.js +19 -17
  609. package/dist/src/voice/tts/types.js.map +1 -1
  610. package/dist/src/workflows/domain/command.d.ts +18 -0
  611. package/dist/src/workflows/domain/command.js +1 -0
  612. package/dist/src/workflows/domain/definition.d.ts +62 -0
  613. package/dist/src/workflows/domain/definition.js +1 -0
  614. package/dist/src/workflows/domain/event.d.ts +67 -0
  615. package/dist/src/workflows/domain/event.js +1 -0
  616. package/dist/src/workflows/domain/index.d.ts +5 -0
  617. package/dist/src/workflows/domain/index.js +2 -0
  618. package/dist/src/workflows/domain/result.d.ts +65 -0
  619. package/dist/src/workflows/domain/result.js +1 -0
  620. package/dist/src/workflows/domain/run.d.ts +120 -0
  621. package/dist/src/workflows/domain/run.js +14 -0
  622. package/dist/src/workflows/domain/run.js.map +1 -0
  623. package/dist/src/workflows/engine/index.d.ts +2 -0
  624. package/dist/src/workflows/engine/index.js +3 -0
  625. package/dist/src/workflows/engine/projector.d.ts +3 -0
  626. package/dist/src/workflows/engine/projector.js +205 -0
  627. package/dist/src/workflows/engine/projector.js.map +1 -0
  628. package/dist/src/workflows/engine/workflow-engine.d.ts +31 -0
  629. package/dist/src/workflows/engine/workflow-engine.js +188 -0
  630. package/dist/src/workflows/engine/workflow-engine.js.map +1 -0
  631. package/dist/src/workflows/index.d.ts +6 -0
  632. package/dist/src/workflows/index.js +11 -0
  633. package/dist/src/workflows/runtime/index.d.ts +1 -0
  634. package/dist/src/workflows/runtime/index.js +4 -0
  635. package/dist/src/workflows/runtime/script-runtime.d.ts +3 -0
  636. package/dist/src/workflows/runtime/script-runtime.js +3 -0
  637. package/dist/src/workflows/store/event-store.d.ts +17 -0
  638. package/dist/src/workflows/store/event-store.js +83 -0
  639. package/dist/src/workflows/store/event-store.js.map +1 -0
  640. package/dist/src/workflows/store/paths.d.ts +7 -0
  641. package/dist/src/workflows/store/paths.js +26 -0
  642. package/dist/src/workflows/store/paths.js.map +1 -0
  643. package/dist/src/workflows/store/run-store.d.ts +13 -0
  644. package/dist/src/workflows/store/run-store.js +68 -0
  645. package/dist/src/workflows/store/run-store.js.map +1 -0
  646. package/package.json +5 -8
  647. package/dist/gateway/static/root/assets/agents-mS3_HpRI.js +0 -222
  648. package/dist/gateway/static/root/assets/channels-settings-BG6b9KrW.js +0 -1
  649. package/dist/gateway/static/root/assets/extension-settings-page-B-W4x2xP.js +0 -1
  650. package/dist/gateway/static/root/assets/index-ew_2L2We.css +0 -1
  651. package/dist/gateway/static/root/assets/sessions-page-FaG_Vlkb.js +0 -1
  652. package/dist/gateway/static/root/assets/settings-page-Bet1OerL.js +0 -3
  653. package/dist/gateway/static/root/assets/skills-page-DhUO235y.js +0 -2
  654. package/dist/gateway/static/root/assets/url-BwNL6Rgk.js +0 -3
  655. package/dist/gateway/static/root/assets/voice-api-key-field-CGEydndO.js +0 -1
  656. package/dist/src/agent/tools/browser-legacy-tools.d.ts +0 -17
  657. package/dist/src/agent/tools/browser-legacy-tools.js +0 -766
  658. package/dist/src/agent/tools/browser-legacy-tools.js.map +0 -1
@@ -1,766 +0,0 @@
1
- import { checkWebsiteBlocklist } from "./url-safety.js";
2
- import { resolveImageModelConfigForTool } from "../image/tool-model-config.js";
3
- import { buildImageToolTextResult } from "../image/image-helpers.js";
4
- import { describeImages } from "../image/understanding/runtime.js";
5
- import { runWithImageModelFallback } from "../image/image-model-fallback.js";
6
- import "./image-tool.js";
7
- import { resolveBrowserCommandTimeoutMs } from "../../browser/browser-command-timeout.js";
8
- import { BrowserBackSchema, BrowserCdpSchema, BrowserClickSchema, BrowserCloseSchema, BrowserConsoleSchema, BrowserDialogSchema, BrowserGetImagesSchema, BrowserNavigateSchema, BrowserPressSchema, BrowserScreenshotSchema, BrowserScrollSchema, BrowserSnapshotSchema, BrowserTypeSchema, BrowserVisionSchema } from "../../browser/schemas.js";
9
- import { assertBrowserUrlAllowed, checkPostRedirectUrl, containsApiKeyPattern } from "../../browser/url-policy.js";
10
- import { truncateSnapshotAtBoundary } from "../../browser/snapshot-helpers.js";
11
- //#region src/agent/tools/browser-legacy-tools.ts
12
- const DEFAULT_SNAPSHOT_MAX = 3e4;
13
- /** Compact snapshot attached to navigate results — keep short to avoid bloating tool output. */
14
- const AUTO_SNAPSHOT_MAX = 8e3;
15
- const MAX_SCREENSHOT_BYTES = 6 * 1024 * 1024;
16
- function resolveClickLocator(page, params) {
17
- const hasSel = Boolean(params.selector?.trim());
18
- const hasText = Boolean(params.text?.trim());
19
- const hasRole = Boolean(params.role?.trim());
20
- if ((hasSel ? 1 : 0) + (hasText ? 1 : 0) + (hasRole ? 1 : 0) !== 1) throw new Error("Provide exactly one of: selector, text, role");
21
- if (hasSel) return page.locator(params.selector.trim()).first();
22
- if (hasText) return page.getByText(params.text.trim(), { exact: false }).first();
23
- const raw = params.role.trim();
24
- const idx = raw.indexOf(":");
25
- const role = (idx >= 0 ? raw.slice(0, idx) : raw).trim();
26
- const name = idx >= 0 ? raw.slice(idx + 1).trim() : "";
27
- if (!role) throw new Error("Invalid role: empty ARIA role");
28
- return page.getByRole(role, name ? { name } : void 0).first();
29
- }
30
- function resolveTypeLocator(page, params) {
31
- const hasSel = Boolean(params.selector?.trim());
32
- if (hasSel === Boolean(params.label?.trim())) throw new Error("Provide exactly one of: selector, label");
33
- if (hasSel) return page.locator(params.selector.trim()).first();
34
- return page.getByLabel(params.label.trim()).first();
35
- }
36
- async function ariaSnapshotFor(page, selector, maxLength, actionTimeoutMs) {
37
- const loc = selector?.trim() ? page.locator(selector.trim()).first() : page.locator("body");
38
- await loc.waitFor({
39
- state: "attached",
40
- timeout: actionTimeoutMs
41
- });
42
- let text = await loc.ariaSnapshot({
43
- mode: "ai",
44
- timeout: actionTimeoutMs
45
- });
46
- if (!text || !text.trim()) text = "(empty snapshot)";
47
- if (text.length > maxLength) text = truncateSnapshotAtBoundary(text, maxLength);
48
- return text;
49
- }
50
- function createBrowserTools(deps) {
51
- const pageFor = () => deps.getPageForTask();
52
- const toMs = () => resolveBrowserCommandTimeoutMs(deps.getConfig());
53
- return [
54
- {
55
- name: "browser_navigate",
56
- label: "🌐 Browser Navigate",
57
- description: "Navigate the browser to a URL. The page persists for this chat session.\nCall `browser_snapshot` after navigation to inspect the UI. Only http(s) public URLs; private IPs and localhost are blocked.",
58
- parameters: BrowserNavigateSchema,
59
- async execute(_id, params, signal) {
60
- const p = params;
61
- const cfg = deps.getConfig();
62
- const allowPrivate = cfg?.agents?.defaults?.browser?.allowPrivateUrls === true;
63
- if (containsApiKeyPattern(p.url)) return {
64
- content: [{
65
- type: "text",
66
- text: "Blocked: URL contains what appears to be an API key or token. Secrets must not be sent in URLs."
67
- }],
68
- details: { blocked: true }
69
- };
70
- const block = checkWebsiteBlocklist(p.url, cfg?.tools?.web?.blocklist);
71
- if (block) return {
72
- content: [{
73
- type: "text",
74
- text: block.message
75
- }],
76
- details: {
77
- blocked: true,
78
- rule: block.rule
79
- }
80
- };
81
- assertBrowserUrlAllowed(p.url, { allowPrivateUrls: allowPrivate });
82
- if (signal?.aborted) throw new Error("aborted");
83
- const page = await pageFor();
84
- const navTimeout = toMs();
85
- const waitUntil = p.waitFor ?? "domcontentloaded";
86
- await page.goto(p.url, {
87
- waitUntil,
88
- timeout: navTimeout
89
- });
90
- const title = await page.title();
91
- const finalUrl = page.url();
92
- if (finalUrl && finalUrl !== p.url) {
93
- const redirectBlock = checkPostRedirectUrl(finalUrl, { allowPrivateUrls: allowPrivate });
94
- if (redirectBlock) {
95
- await page.goto("about:blank").catch(() => {});
96
- return {
97
- content: [{
98
- type: "text",
99
- text: redirectBlock
100
- }],
101
- details: {
102
- blocked: true,
103
- originalUrl: p.url,
104
- redirectedTo: finalUrl
105
- }
106
- };
107
- }
108
- const redirectDomainBlock = checkWebsiteBlocklist(finalUrl, cfg?.tools?.web?.blocklist);
109
- if (redirectDomainBlock) {
110
- await page.goto("about:blank").catch(() => {});
111
- return {
112
- content: [{
113
- type: "text",
114
- text: redirectDomainBlock.message
115
- }],
116
- details: {
117
- blocked: true,
118
- originalUrl: p.url,
119
- redirectedTo: finalUrl,
120
- rule: redirectDomainBlock.rule
121
- }
122
- };
123
- }
124
- }
125
- let snapshotText = "";
126
- try {
127
- snapshotText = await ariaSnapshotFor(page, void 0, AUTO_SNAPSHOT_MAX, toMs());
128
- } catch {}
129
- const parts = [`Navigated to: ${title}\nURL: ${finalUrl}`];
130
- if (snapshotText) parts.push(`\n--- Page Snapshot ---\n${snapshotText}`);
131
- return {
132
- content: [{
133
- type: "text",
134
- text: parts.join("")
135
- }],
136
- details: {
137
- url: finalUrl,
138
- title,
139
- snapshotLength: snapshotText.length
140
- }
141
- };
142
- }
143
- },
144
- {
145
- name: "browser_snapshot",
146
- label: "📸 Browser Snapshot",
147
- description: "Capture an AI-oriented ARIA snapshot of the current page (YAML-like tree with element refs).\nUse after `browser_navigate` to see interactive elements before `browser_click` / `browser_type`.",
148
- parameters: BrowserSnapshotSchema,
149
- async execute(_id, params, signal) {
150
- if (signal?.aborted) throw new Error("aborted");
151
- const page = await pageFor();
152
- const p = params;
153
- const maxLength = p.maxLength ?? DEFAULT_SNAPSHOT_MAX;
154
- const actionTimeout = toMs();
155
- try {
156
- const text = await ariaSnapshotFor(page, p.selector, maxLength, actionTimeout);
157
- return {
158
- content: [{
159
- type: "text",
160
- text
161
- }],
162
- details: { length: text.length }
163
- };
164
- } catch (e) {
165
- return {
166
- content: [{
167
- type: "text",
168
- text: `Snapshot failed: ${e instanceof Error ? e.message : String(e)}`
169
- }],
170
- details: { length: 0 }
171
- };
172
- }
173
- }
174
- },
175
- {
176
- name: "browser_click",
177
- label: "🖱️ Browser Click",
178
- description: "Click an element. Provide exactly one targeting mode: `selector` (CSS), `text` (visible text), or `role` (e.g. `button:Submit`).",
179
- parameters: BrowserClickSchema,
180
- async execute(_id, params, signal) {
181
- if (signal?.aborted) throw new Error("aborted");
182
- const page = await pageFor();
183
- const actionTimeout = toMs();
184
- try {
185
- await resolveClickLocator(page, params).click({ timeout: actionTimeout });
186
- return {
187
- content: [{
188
- type: "text",
189
- text: "Click succeeded."
190
- }],
191
- details: { ok: true }
192
- };
193
- } catch (e) {
194
- return {
195
- content: [{
196
- type: "text",
197
- text: `Click failed: ${e instanceof Error ? e.message : String(e)}`
198
- }],
199
- details: { ok: false }
200
- };
201
- }
202
- }
203
- },
204
- {
205
- name: "browser_type",
206
- label: "⌨️ Browser Type",
207
- description: "Type into an input. Provide exactly one of `selector` or `label` (associated label text). Optional `pressEnter` to submit.",
208
- parameters: BrowserTypeSchema,
209
- async execute(_id, params, signal) {
210
- if (signal?.aborted) throw new Error("aborted");
211
- const page = await pageFor();
212
- const actionTimeout = toMs();
213
- try {
214
- const p = params;
215
- const loc = resolveTypeLocator(page, p);
216
- await loc.clear({ timeout: Math.min(5e3, actionTimeout) }).catch(() => {});
217
- await loc.fill(p.text, { timeout: actionTimeout });
218
- if (p.pressEnter) await page.keyboard.press("Enter");
219
- return {
220
- content: [{
221
- type: "text",
222
- text: "Typed into field."
223
- }],
224
- details: { ok: true }
225
- };
226
- } catch (e) {
227
- return {
228
- content: [{
229
- type: "text",
230
- text: `Type failed: ${e instanceof Error ? e.message : String(e)}`
231
- }],
232
- details: { ok: false }
233
- };
234
- }
235
- }
236
- },
237
- {
238
- name: "browser_scroll",
239
- label: "📜 Browser Scroll",
240
- description: "Scroll the page up or down by a pixel amount (default 500).",
241
- parameters: BrowserScrollSchema,
242
- async execute(_id, params, signal) {
243
- if (signal?.aborted) throw new Error("aborted");
244
- const page = await pageFor();
245
- const p = params;
246
- const amount = p.amount ?? 500;
247
- const dy = p.direction === "down" ? amount : -amount;
248
- await page.evaluate(({ deltaY }) => {
249
- globalThis.scrollBy(0, deltaY);
250
- }, { deltaY: dy });
251
- return {
252
- content: [{
253
- type: "text",
254
- text: `Scrolled ${p.direction} by ${amount}px.`
255
- }],
256
- details: { ok: true }
257
- };
258
- }
259
- },
260
- {
261
- name: "browser_screenshot",
262
- label: "🖼️ Browser Screenshot",
263
- description: "Take a PNG screenshot of the viewport or a CSS selector. When `agents.defaults.imageModel` is configured, runs vision on the image using `description` as the prompt (default: short UI summary).",
264
- parameters: BrowserScreenshotSchema,
265
- async execute(_id, params, signal) {
266
- if (signal?.aborted) throw new Error("aborted");
267
- const page = await pageFor();
268
- const cfg = deps.getConfig();
269
- let buf;
270
- const actionTimeout = toMs();
271
- try {
272
- const p = params;
273
- if (p.selector?.trim()) {
274
- const loc = page.locator(p.selector.trim()).first();
275
- await loc.waitFor({
276
- state: "visible",
277
- timeout: actionTimeout
278
- });
279
- buf = await loc.screenshot({
280
- type: "png",
281
- timeout: actionTimeout
282
- });
283
- } else buf = await page.screenshot({
284
- type: "png",
285
- fullPage: false,
286
- timeout: actionTimeout
287
- });
288
- } catch (e) {
289
- const msg = e instanceof Error ? e.message : String(e);
290
- return {
291
- content: [{
292
- type: "text",
293
- text: `Screenshot failed: ${msg}`
294
- }],
295
- details: { error: msg }
296
- };
297
- }
298
- if (buf.length > MAX_SCREENSHOT_BYTES) return {
299
- content: [{
300
- type: "text",
301
- text: `Screenshot too large (${buf.length} bytes, max ${MAX_SCREENSHOT_BYTES}). Try a narrower selector.`
302
- }],
303
- details: {
304
- error: "too_large",
305
- bytes: buf.length
306
- }
307
- };
308
- const imageModelConfig = resolveImageModelConfigForTool({ cfg });
309
- const prompt = params.description?.trim() || "Describe this browser screenshot briefly. Focus on visible text, controls, and actionable UI state.";
310
- if (!imageModelConfig) return {
311
- content: [{
312
- type: "text",
313
- text: `Captured PNG screenshot (${buf.length} bytes). Configure agents.defaults.imageModel for automatic visual description.`
314
- }],
315
- details: {
316
- bytes: buf.length,
317
- vision: false
318
- }
319
- };
320
- try {
321
- const { result: inner, attempts } = await runWithImageModelFallback({
322
- toolConfig: imageModelConfig,
323
- modelOverride: void 0,
324
- run: async (modelRef) => {
325
- const { text, provider, model } = await describeImages({
326
- modelRef,
327
- prompt,
328
- images: [{
329
- buffer: buf,
330
- mimeType: "image/png"
331
- }],
332
- timeoutMs: 6e4,
333
- signal
334
- });
335
- return {
336
- text,
337
- provider,
338
- model
339
- };
340
- }
341
- });
342
- return buildImageToolTextResult({
343
- text: inner.text,
344
- provider: inner.provider,
345
- model: inner.model,
346
- attempts
347
- }, {
348
- bytes: buf.length,
349
- vision: true
350
- });
351
- } catch (e) {
352
- const msg = e instanceof Error ? e.message : String(e);
353
- return {
354
- content: [{
355
- type: "text",
356
- text: `Screenshot captured (${buf.length} bytes) but vision failed: ${msg}`
357
- }],
358
- details: {
359
- bytes: buf.length,
360
- visionError: msg
361
- }
362
- };
363
- }
364
- }
365
- },
366
- {
367
- name: "browser_back",
368
- label: "◀️ Browser Back",
369
- description: "Navigate back in browser history. Returns the new page URL and title.",
370
- parameters: BrowserBackSchema,
371
- async execute(_id, params, signal) {
372
- if (signal?.aborted) throw new Error("aborted");
373
- const page = await pageFor();
374
- const waitUntil = params.waitFor ?? "domcontentloaded";
375
- const navTimeout = toMs();
376
- try {
377
- if (!await page.goBack({
378
- waitUntil,
379
- timeout: navTimeout
380
- })) return {
381
- content: [{
382
- type: "text",
383
- text: "No previous page in history."
384
- }],
385
- details: { ok: false }
386
- };
387
- const title = await page.title();
388
- const url = page.url();
389
- return {
390
- content: [{
391
- type: "text",
392
- text: `Navigated back to: ${title}\nURL: ${url}`
393
- }],
394
- details: {
395
- ok: true,
396
- url,
397
- title
398
- }
399
- };
400
- } catch (e) {
401
- return {
402
- content: [{
403
- type: "text",
404
- text: `Back navigation failed: ${e instanceof Error ? e.message : String(e)}`
405
- }],
406
- details: { ok: false }
407
- };
408
- }
409
- }
410
- },
411
- {
412
- name: "browser_press",
413
- label: "⌨️ Browser Press",
414
- description: "Press a keyboard key or key combination. Examples: \"Enter\", \"Tab\", \"Escape\", \"ArrowDown\", \"Control+A\", \"Shift+Enter\".",
415
- parameters: BrowserPressSchema,
416
- async execute(_id, params, signal) {
417
- if (signal?.aborted) throw new Error("aborted");
418
- const page = await pageFor();
419
- const p = params;
420
- try {
421
- await page.keyboard.press(p.key);
422
- return {
423
- content: [{
424
- type: "text",
425
- text: `Pressed key: ${p.key}`
426
- }],
427
- details: {
428
- ok: true,
429
- key: p.key
430
- }
431
- };
432
- } catch (e) {
433
- return {
434
- content: [{
435
- type: "text",
436
- text: `Key press failed: ${e instanceof Error ? e.message : String(e)}`
437
- }],
438
- details: { ok: false }
439
- };
440
- }
441
- }
442
- },
443
- {
444
- name: "browser_console",
445
- label: "💻 Browser Console",
446
- description: "Execute JavaScript in the page context and return the result. If no `javascript` parameter is provided, returns the last 50 console log entries.",
447
- parameters: BrowserConsoleSchema,
448
- async execute(_id, params, signal) {
449
- if (signal?.aborted) throw new Error("aborted");
450
- const page = await pageFor();
451
- const p = params;
452
- if (!p.javascript?.trim()) try {
453
- const logs = [];
454
- const collectHandler = (msg) => {
455
- logs.push(`[${msg.type()}] ${msg.text()}`);
456
- };
457
- page.on("console", collectHandler);
458
- await page.waitForTimeout(100);
459
- page.off("console", collectHandler);
460
- return {
461
- content: [{
462
- type: "text",
463
- text: logs.length > 0 ? logs.slice(-50).join("\n") : "(no recent console messages)"
464
- }],
465
- details: {
466
- mode: "logs",
467
- count: logs.length
468
- }
469
- };
470
- } catch (e) {
471
- return {
472
- content: [{
473
- type: "text",
474
- text: `Console read failed: ${e instanceof Error ? e.message : String(e)}`
475
- }],
476
- details: { ok: false }
477
- };
478
- }
479
- try {
480
- const result = await page.evaluate(p.javascript);
481
- const serialized = result === void 0 ? "undefined" : JSON.stringify(result, null, 2);
482
- return {
483
- content: [{
484
- type: "text",
485
- text: serialized.length > DEFAULT_SNAPSHOT_MAX ? `${serialized.slice(0, DEFAULT_SNAPSHOT_MAX)}\n... (truncated)` : serialized
486
- }],
487
- details: {
488
- mode: "eval",
489
- resultLength: serialized.length
490
- }
491
- };
492
- } catch (e) {
493
- return {
494
- content: [{
495
- type: "text",
496
- text: `Eval failed: ${e instanceof Error ? e.message : String(e)}`
497
- }],
498
- details: { ok: false }
499
- };
500
- }
501
- }
502
- },
503
- {
504
- name: "browser_get_images",
505
- label: "🖼️ Browser Get Images",
506
- description: "Extract all visible images from the page with their src, alt text, and dimensions. Useful for understanding page content without screenshots.",
507
- parameters: BrowserGetImagesSchema,
508
- async execute(_id, params, signal) {
509
- if (signal?.aborted) throw new Error("aborted");
510
- const page = await pageFor();
511
- const p = params;
512
- const maxImages = p.maxImages ?? 20;
513
- try {
514
- const images = await page.evaluate(([sel, max]) => {
515
- const d = globalThis.document;
516
- const root = sel ? d.querySelector(sel) : d;
517
- if (!root) return [];
518
- return Array.from(root.querySelectorAll("img")).slice(0, max).map((img) => ({
519
- src: String(img.src ?? ""),
520
- alt: String(img.alt ?? ""),
521
- width: Number(img.naturalWidth ?? 0),
522
- height: Number(img.naturalHeight ?? 0),
523
- visible: img.offsetParent !== null
524
- }));
525
- }, [p.selector?.trim() || null, maxImages]);
526
- if (!images || images.length === 0) return {
527
- content: [{
528
- type: "text",
529
- text: "No images found on the page."
530
- }],
531
- details: { count: 0 }
532
- };
533
- const lines = images.map((img, i) => `${i + 1}. ${img.alt || "(no alt)"} — ${img.width}×${img.height} ${img.visible ? "" : "[hidden]"}\n ${img.src}`);
534
- return {
535
- content: [{
536
- type: "text",
537
- text: `Found ${images.length} image(s):\n${lines.join("\n")}`
538
- }],
539
- details: { count: images.length }
540
- };
541
- } catch (e) {
542
- return {
543
- content: [{
544
- type: "text",
545
- text: `Get images failed: ${e instanceof Error ? e.message : String(e)}`
546
- }],
547
- details: { ok: false }
548
- };
549
- }
550
- }
551
- },
552
- {
553
- name: "browser_close",
554
- label: "❌ Browser Close",
555
- description: "Close the browser page for this session, releasing resources. A new page will be created on the next browser tool call.",
556
- parameters: BrowserCloseSchema,
557
- async execute(_id, _params, signal) {
558
- if (signal?.aborted) throw new Error("aborted");
559
- const taskId = deps.getTaskId();
560
- await deps.getManager().closePage(taskId);
561
- deps.notifyBrowserPageClosed?.(taskId);
562
- return {
563
- content: [{
564
- type: "text",
565
- text: "Browser page closed."
566
- }],
567
- details: { ok: true }
568
- };
569
- }
570
- },
571
- {
572
- name: "browser_vision",
573
- label: "👁️ Browser Vision",
574
- description: "Take a screenshot and analyze it with the vision model. Unlike `browser_screenshot`, this tool *always* runs vision analysis. Requires `agents.defaults.imageModel` to be configured.",
575
- parameters: BrowserVisionSchema,
576
- async execute(_id, params, signal) {
577
- if (signal?.aborted) throw new Error("aborted");
578
- const page = await pageFor();
579
- const cfg = deps.getConfig();
580
- const p = params;
581
- const imageModelConfig = resolveImageModelConfigForTool({ cfg });
582
- if (!imageModelConfig) return {
583
- content: [{
584
- type: "text",
585
- text: "Vision model not configured. Set `agents.defaults.imageModel` to use browser_vision."
586
- }],
587
- details: { ok: false }
588
- };
589
- let buf;
590
- const actionTimeout = toMs();
591
- try {
592
- if (p.selector?.trim()) {
593
- const loc = page.locator(p.selector.trim()).first();
594
- await loc.waitFor({
595
- state: "visible",
596
- timeout: actionTimeout
597
- });
598
- buf = await loc.screenshot({
599
- type: "png",
600
- timeout: actionTimeout
601
- });
602
- } else buf = await page.screenshot({
603
- type: "png",
604
- fullPage: false,
605
- timeout: actionTimeout
606
- });
607
- } catch (e) {
608
- return {
609
- content: [{
610
- type: "text",
611
- text: `Screenshot for vision failed: ${e instanceof Error ? e.message : String(e)}`
612
- }],
613
- details: { ok: false }
614
- };
615
- }
616
- if (buf.length > MAX_SCREENSHOT_BYTES) return {
617
- content: [{
618
- type: "text",
619
- text: `Screenshot too large (${buf.length} bytes). Try a narrower selector.`
620
- }],
621
- details: {
622
- ok: false,
623
- bytes: buf.length
624
- }
625
- };
626
- const prompt = p.prompt?.trim() || "Describe this browser screenshot in detail. Focus on visible text, interactive elements, layout, and actionable UI state.";
627
- try {
628
- const { result: inner, attempts } = await runWithImageModelFallback({
629
- toolConfig: imageModelConfig,
630
- modelOverride: void 0,
631
- run: async (modelRef) => {
632
- const { text, provider, model } = await describeImages({
633
- modelRef,
634
- prompt,
635
- images: [{
636
- buffer: buf,
637
- mimeType: "image/png"
638
- }],
639
- timeoutMs: 6e4,
640
- signal
641
- });
642
- return {
643
- text,
644
- provider,
645
- model
646
- };
647
- }
648
- });
649
- return buildImageToolTextResult({
650
- text: inner.text,
651
- provider: inner.provider,
652
- model: inner.model,
653
- attempts
654
- }, {
655
- bytes: buf.length,
656
- vision: true
657
- });
658
- } catch (e) {
659
- const msg = e instanceof Error ? e.message : String(e);
660
- return {
661
- content: [{
662
- type: "text",
663
- text: `Vision analysis failed: ${msg}`
664
- }],
665
- details: {
666
- bytes: buf.length,
667
- visionError: msg
668
- }
669
- };
670
- }
671
- }
672
- },
673
- {
674
- name: "browser_dialog",
675
- label: "💬 Browser Dialog",
676
- description: "Handle a pending JavaScript dialog (alert, confirm, prompt, beforeunload). Requires CDP Supervisor to be active. Lists pending dialogs if none need handling.",
677
- parameters: BrowserDialogSchema,
678
- async execute(_id, params, signal) {
679
- if (signal?.aborted) throw new Error("aborted");
680
- const supervisor = deps.getSupervisor?.();
681
- if (!supervisor) return {
682
- content: [{
683
- type: "text",
684
- text: "CDP Supervisor not active. Dialog handling is not available."
685
- }],
686
- details: { ok: false }
687
- };
688
- const p = params;
689
- if (supervisor.getPendingDialogs().length === 0) return {
690
- content: [{
691
- type: "text",
692
- text: "No pending dialogs."
693
- }],
694
- details: {
695
- ok: true,
696
- pendingCount: 0
697
- }
698
- };
699
- const handled = await supervisor.handleDialog(p.action, { promptText: p.promptText });
700
- if (!handled) return {
701
- content: [{
702
- type: "text",
703
- text: "Dialog already handled or expired."
704
- }],
705
- details: { ok: false }
706
- };
707
- return {
708
- content: [{
709
- type: "text",
710
- text: `Dialog ${handled.response}: [${handled.type}] "${handled.message}"`
711
- }],
712
- details: {
713
- ok: true,
714
- dialogId: handled.id,
715
- type: handled.type
716
- }
717
- };
718
- }
719
- },
720
- {
721
- name: "browser_cdp",
722
- label: "🔧 Browser CDP",
723
- description: "Send a raw Chrome DevTools Protocol command to the browser. Advanced: use only when Playwright high-level APIs are insufficient.",
724
- parameters: BrowserCdpSchema,
725
- async execute(_id, params, signal) {
726
- if (signal?.aborted) throw new Error("aborted");
727
- const page = await pageFor();
728
- const p = params;
729
- try {
730
- const cdpSession = await page.context().newCDPSession(page);
731
- try {
732
- const result = await cdpSession.send(p.method, p.params ?? {});
733
- const serialized = JSON.stringify(result, null, 2);
734
- return {
735
- content: [{
736
- type: "text",
737
- text: serialized.length > DEFAULT_SNAPSHOT_MAX ? `${serialized.slice(0, DEFAULT_SNAPSHOT_MAX)}\n... (truncated)` : serialized
738
- }],
739
- details: {
740
- ok: true,
741
- method: p.method
742
- }
743
- };
744
- } finally {
745
- await cdpSession.detach().catch(() => {});
746
- }
747
- } catch (e) {
748
- return {
749
- content: [{
750
- type: "text",
751
- text: `CDP command failed: ${e instanceof Error ? e.message : String(e)}`
752
- }],
753
- details: {
754
- ok: false,
755
- method: p.method
756
- }
757
- };
758
- }
759
- }
760
- }
761
- ];
762
- }
763
- //#endregion
764
- export { createBrowserTools };
765
-
766
- //# sourceMappingURL=browser-legacy-tools.js.map