@xopcai/xopc 0.0.85 → 0.0.87

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 (407) 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/telegram/src/delivery-chat-id.d.ts +1 -1
  5. package/dist/extensions/telegram/src/delivery-chat-id.js +1 -1
  6. package/dist/extensions/telegram/src/delivery-chat-id.js.map +1 -1
  7. package/dist/extensions/telegram/src/routing-integration.js +1 -0
  8. package/dist/extensions/telegram/src/routing-integration.js.map +1 -1
  9. package/dist/extensions/telegram/xopc.extension.json +1 -1
  10. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js +2 -2
  11. package/dist/extensions/weixin/src/__tests__/workflow-progress.test.js.map +1 -1
  12. package/dist/extensions/weixin/src/api/api.js +2 -2
  13. package/dist/extensions/weixin/src/api/api.js.map +1 -1
  14. package/dist/extensions/weixin/src/auth/accounts.js +12 -12
  15. package/dist/extensions/weixin/src/auth/accounts.js.map +1 -1
  16. package/dist/extensions/weixin/src/delivery-to.js +2 -2
  17. package/dist/extensions/weixin/src/delivery-to.js.map +1 -1
  18. package/dist/extensions/weixin/src/messaging/debug-mode.js +5 -5
  19. package/dist/extensions/weixin/src/messaging/debug-mode.js.map +1 -1
  20. package/dist/extensions/weixin/src/messaging/inbound.js +11 -11
  21. package/dist/extensions/weixin/src/messaging/inbound.js.map +1 -1
  22. package/dist/extensions/weixin/src/storage/sync-buf.js +4 -4
  23. package/dist/extensions/weixin/src/storage/sync-buf.js.map +1 -1
  24. package/dist/extensions/weixin/src/workflow-progress.d.ts +1 -1
  25. package/dist/extensions/weixin/src/workflow-progress.js.map +1 -1
  26. package/dist/gateway/static/root/assets/agents-BEAbXpuP.js +222 -0
  27. package/dist/gateway/static/root/assets/{apps-page-D7v7649T.js → apps-page-Dg8R-Szf.js} +1 -1
  28. package/dist/gateway/static/root/assets/{channels-settings-nCaMb0a7.js → channels-settings-yohw9YSu.js} +1 -1
  29. package/dist/gateway/static/root/assets/{channels-status-swr-C1gZBcJV.js → channels-status-swr-BSHqqCF1.js} +1 -1
  30. package/dist/gateway/static/root/assets/{cron-api-CoYK0hlm.js → cron-api-0h_QT8U3.js} +1 -1
  31. package/dist/gateway/static/root/assets/{cron-page-DeGo-Vjc.js → cron-page-BkfKFfFk.js} +1 -1
  32. package/dist/gateway/static/root/assets/{dist-DaK4dsss.js → dist-Cmjp2APP.js} +1 -1
  33. package/dist/gateway/static/root/assets/{extension-debug-page-BZngZWbO.js → extension-debug-page-CFa9z_1N.js} +1 -1
  34. package/dist/gateway/static/root/assets/{extension-page-D6JSyV27.js → extension-page-BI8eaTPq.js} +1 -1
  35. package/dist/gateway/static/root/assets/extension-settings-page-x4BB7q1X.js +1 -0
  36. package/dist/gateway/static/root/assets/{fetch-B2MYHbWg.js → fetch-DRqwef_Q.js} +1 -1
  37. package/dist/gateway/static/root/assets/{field-primitives-Zzl22MvN.js → field-primitives-BiNHBo2Y.js} +1 -1
  38. package/dist/gateway/static/root/assets/{heartbeat-config-api-BtIcpG0O.js → heartbeat-config-api-ZRb8qhuz.js} +1 -1
  39. package/dist/gateway/static/root/assets/{index-D4vM3-P7.js → index-Cu7bKuUi.js} +96 -94
  40. package/dist/gateway/static/root/assets/index-a5gWIdZQ.css +1 -0
  41. package/dist/gateway/static/root/assets/{logs-page-_d4UJ-qQ.js → logs-page-BFZ8GgCv.js} +1 -1
  42. package/dist/gateway/static/root/assets/{sessions-page-5N4aF2Wk.js → sessions-page-CD7AfB-2.js} +1 -1
  43. package/dist/gateway/static/root/assets/settings-form-section-DiqqVs6m.js +1 -0
  44. package/dist/gateway/static/root/assets/settings-page-BBOjEQW3.js +3 -0
  45. package/dist/gateway/static/root/assets/{share-preview-page-D4EG_vM1.js → share-preview-page-n1Gprylk.js} +1 -1
  46. package/dist/gateway/static/root/assets/{skills-page-sPAXhh8w.js → skills-page-CcN_gj--.js} +1 -1
  47. package/dist/gateway/static/root/assets/{theme-store-DryYl3qD.js → theme-store-CZOh1nT3.js} +1 -1
  48. package/dist/gateway/static/root/assets/url-Dd8Q7kZZ.js +3 -0
  49. package/dist/gateway/static/root/assets/{utils-CYO9eTCM.js → utils-CkWBfxs4.js} +1 -1
  50. package/dist/gateway/static/root/assets/{voice-api-key-field-Ds51havm.js → voice-api-key-field-O6awz9hi.js} +1 -1
  51. package/dist/gateway/static/root/index.html +5 -5
  52. package/dist/package.js +1 -1
  53. package/dist/src/agent/agent-scope.d.ts +4 -0
  54. package/dist/src/agent/agent-scope.js +53 -10
  55. package/dist/src/agent/agent-scope.js.map +1 -1
  56. package/dist/src/agent/bootstrap/filter-bootstrap-files.js +2 -1
  57. package/dist/src/agent/bootstrap/filter-bootstrap-files.js.map +1 -1
  58. package/dist/src/agent/embedded/session-tool-result-guard.js +2 -1
  59. package/dist/src/agent/embedded/session-tool-result-guard.js.map +1 -1
  60. package/dist/src/agent/embedded/tool-result-truncation.js +2 -1
  61. package/dist/src/agent/embedded/tool-result-truncation.js.map +1 -1
  62. package/dist/src/agent/fallback/candidates.js +2 -2
  63. package/dist/src/agent/fallback/candidates.js.map +1 -1
  64. package/dist/src/agent/goals/persistent-goal-apis.d.ts +0 -2
  65. package/dist/src/agent/goals/persistent-goal-service.js +0 -1
  66. package/dist/src/agent/goals/persistent-goal-service.js.map +1 -1
  67. package/dist/src/agent/image/generation/normalization.js +2 -12
  68. package/dist/src/agent/image/generation/normalization.js.map +1 -1
  69. package/dist/src/agent/image/generation/provider-registry.d.ts +4 -8
  70. package/dist/src/agent/image/generation/provider-registry.js.map +1 -1
  71. package/dist/src/agent/image/generation/runtime.d.ts +2 -2
  72. package/dist/src/agent/image/generation/runtime.js.map +1 -1
  73. package/dist/src/agent/image/generation/types.d.ts +0 -18
  74. package/dist/src/agent/image/image-helpers.js +6 -1
  75. package/dist/src/agent/image/image-helpers.js.map +1 -1
  76. package/dist/src/agent/image/index.d.ts +1 -1
  77. package/dist/src/agent/inbound/inbound-loop.d.ts +5 -0
  78. package/dist/src/agent/inbound/inbound-loop.js +41 -10
  79. package/dist/src/agent/inbound/inbound-loop.js.map +1 -1
  80. package/dist/src/agent/inbound/turn-dispatcher.d.ts +4 -0
  81. package/dist/src/agent/inbound/turn-dispatcher.js +6 -4
  82. package/dist/src/agent/inbound/turn-dispatcher.js.map +1 -1
  83. package/dist/src/agent/mcp/bundle-mcp-materialize.js +2 -1
  84. package/dist/src/agent/mcp/bundle-mcp-materialize.js.map +1 -1
  85. package/dist/src/agent/mcp/bundle-mcp-names.js +2 -1
  86. package/dist/src/agent/mcp/bundle-mcp-names.js.map +1 -1
  87. package/dist/src/agent/mcp/bundle-mcp-runtime.js +2 -1
  88. package/dist/src/agent/mcp/bundle-mcp-runtime.js.map +1 -1
  89. package/dist/src/agent/mcp/mcp-transport-config.js +2 -1
  90. package/dist/src/agent/mcp/mcp-transport-config.js.map +1 -1
  91. package/dist/src/agent/mcp/mcp-transport.js +2 -1
  92. package/dist/src/agent/mcp/mcp-transport.js.map +1 -1
  93. package/dist/src/agent/media-generation/runtime-shared.js +2 -9
  94. package/dist/src/agent/media-generation/runtime-shared.js.map +1 -1
  95. package/dist/src/agent/messaging/command-handler.d.ts +6 -0
  96. package/dist/src/agent/messaging/command-handler.js +5 -0
  97. package/dist/src/agent/messaging/command-handler.js.map +1 -1
  98. package/dist/src/agent/prompt/safety.d.ts +0 -7
  99. package/dist/src/agent/prompt/safety.js +1 -20
  100. package/dist/src/agent/prompt/safety.js.map +1 -1
  101. package/dist/src/agent/service/build-direct-message-content.js +1 -1
  102. package/dist/src/agent/service/build-direct-message-content.js.map +1 -1
  103. package/dist/src/agent/service/direct-turn-helpers.d.ts +3 -1
  104. package/dist/src/agent/service/direct-turn-helpers.js +6 -1
  105. package/dist/src/agent/service/direct-turn-helpers.js.map +1 -1
  106. package/dist/src/agent/service/process-direct-one-shot.d.ts +4 -0
  107. package/dist/src/agent/service/process-direct-one-shot.js +15 -2
  108. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -1
  109. package/dist/src/agent/service/process-direct-streaming.d.ts +4 -0
  110. package/dist/src/agent/service/process-direct-streaming.js +34 -4
  111. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  112. package/dist/src/agent/service/webchat-tts.js +1 -1
  113. package/dist/src/agent/service/webchat-tts.js.map +1 -1
  114. package/dist/src/agent/service.d.ts +8 -0
  115. package/dist/src/agent/service.js +21 -1
  116. package/dist/src/agent/service.js.map +1 -1
  117. package/dist/src/agent/tools/create-share-tool.js +27 -20
  118. package/dist/src/agent/tools/create-share-tool.js.map +1 -1
  119. package/dist/src/agent/tools/factory.js +1 -1
  120. package/dist/src/agent/tools/index.d.ts +0 -1
  121. package/dist/src/agent/tools/index.js +4 -5
  122. package/dist/src/agent/tools/shell.js +0 -13
  123. package/dist/src/agent/tools/shell.js.map +1 -1
  124. package/dist/src/agent/tools/workflow-tool.js +10 -4
  125. package/dist/src/agent/tools/workflow-tool.js.map +1 -1
  126. package/dist/src/agent/workflow/builtins/audit-repo.d.ts +5 -1
  127. package/dist/src/agent/workflow/builtins/audit-repo.js +52 -11
  128. package/dist/src/agent/workflow/builtins/audit-repo.js.map +1 -1
  129. package/dist/src/agent/workflow/builtins/debug-incident.d.ts +13 -0
  130. package/dist/src/agent/workflow/builtins/debug-incident.js +155 -0
  131. package/dist/src/agent/workflow/builtins/debug-incident.js.map +1 -0
  132. package/dist/src/agent/workflow/builtins/index.d.ts +3 -1
  133. package/dist/src/agent/workflow/builtins/index.js +11 -1
  134. package/dist/src/agent/workflow/builtins/index.js.map +1 -1
  135. package/dist/src/agent/workflow/builtins/multi-perspective-review.d.ts +6 -1
  136. package/dist/src/agent/workflow/builtins/multi-perspective-review.js +66 -30
  137. package/dist/src/agent/workflow/builtins/multi-perspective-review.js.map +1 -1
  138. package/dist/src/agent/workflow/builtins/pr-review.d.ts +12 -0
  139. package/dist/src/agent/workflow/builtins/pr-review.js +156 -0
  140. package/dist/src/agent/workflow/builtins/pr-review.js.map +1 -0
  141. package/dist/src/agent/workflow/builtins/research.d.ts +5 -1
  142. package/dist/src/agent/workflow/builtins/research.js +37 -6
  143. package/dist/src/agent/workflow/builtins/research.js.map +1 -1
  144. package/dist/src/agent/workflow/catalog.d.ts +5 -0
  145. package/dist/src/agent/workflow/catalog.js +6 -2
  146. package/dist/src/agent/workflow/catalog.js.map +1 -1
  147. package/dist/src/agent/workflow/channel-capability.d.ts +3 -3
  148. package/dist/src/agent/workflow/index.d.ts +1 -1
  149. package/dist/src/agent/workflow/lint.d.ts +38 -0
  150. package/dist/src/agent/workflow/lint.js +74 -0
  151. package/dist/src/agent/workflow/lint.js.map +1 -0
  152. package/dist/src/agent/workflow/parser.js +13 -1
  153. package/dist/src/agent/workflow/parser.js.map +1 -1
  154. package/dist/src/agent/workflow/runtime.d.ts +3 -0
  155. package/dist/src/agent/workflow/runtime.js +76 -3
  156. package/dist/src/agent/workflow/runtime.js.map +1 -1
  157. package/dist/src/agent/workflow/types.d.ts +11 -1
  158. package/dist/src/browser/index.js +4 -4
  159. package/dist/src/browser/manager.d.ts +1 -3
  160. package/dist/src/browser/manager.js +0 -6
  161. package/dist/src/browser/manager.js.map +1 -1
  162. package/dist/src/browser/providers/browser-ext-install.d.ts +4 -4
  163. package/dist/src/browser/providers/browser-ext-install.js +38 -85
  164. package/dist/src/browser/providers/browser-ext-install.js.map +1 -1
  165. package/dist/src/browser/providers/cloakbrowser.d.ts +0 -5
  166. package/dist/src/browser/providers/cloakbrowser.js +2 -55
  167. package/dist/src/browser/providers/cloakbrowser.js.map +1 -1
  168. package/dist/src/channels/attachments/voice-stt-webchat.js +10 -8
  169. package/dist/src/channels/attachments/voice-stt-webchat.js.map +1 -1
  170. package/dist/src/channels/pairing/allow-from-file.js +9 -9
  171. package/dist/src/channels/pairing/allow-from-file.js.map +1 -1
  172. package/dist/src/channels/pairing/pairing-store.js +6 -6
  173. package/dist/src/channels/pairing/pairing-store.js.map +1 -1
  174. package/dist/src/chat-commands/builtins/session.js +1 -1
  175. package/dist/src/chat-commands/builtins/session.js.map +1 -1
  176. package/dist/src/chat-commands/builtins/tts.js +2 -2
  177. package/dist/src/chat-commands/builtins/tts.js.map +1 -1
  178. package/dist/src/chat-commands/builtins/workflow.js +7 -2
  179. package/dist/src/chat-commands/builtins/workflow.js.map +1 -1
  180. package/dist/src/chat-commands/context.d.ts +3 -0
  181. package/dist/src/chat-commands/context.js +21 -3
  182. package/dist/src/chat-commands/context.js.map +1 -1
  183. package/dist/src/chat-commands/session-key.d.ts +4 -37
  184. package/dist/src/chat-commands/session-key.js +49 -85
  185. package/dist/src/chat-commands/session-key.js.map +1 -1
  186. package/dist/src/chat-commands/types.d.ts +2 -0
  187. package/dist/src/cli/commands/agent/interactive.js +2 -2
  188. package/dist/src/cli/commands/agent/interactive.js.map +1 -1
  189. package/dist/src/cli/commands/agent/sessions.js +2 -2
  190. package/dist/src/cli/commands/agent/sessions.js.map +1 -1
  191. package/dist/src/cli/commands/agent.js +4 -5
  192. package/dist/src/cli/commands/agent.js.map +1 -1
  193. package/dist/src/cli/commands/channels.js +1 -5
  194. package/dist/src/cli/commands/channels.js.map +1 -1
  195. package/dist/src/cli/commands/gateway/lifecycle-core.js +1 -1
  196. package/dist/src/cli/commands/gateway/lifecycle-core.js.map +1 -1
  197. package/dist/src/cli/commands/gateway/logs.d.ts +9 -0
  198. package/dist/src/cli/commands/gateway/logs.js +50 -17
  199. package/dist/src/cli/commands/gateway/logs.js.map +1 -1
  200. package/dist/src/cli/commands/image.js +22 -21
  201. package/dist/src/cli/commands/image.js.map +1 -1
  202. package/dist/src/cli/commands/session/utils.js +2 -2
  203. package/dist/src/cli/commands/session/utils.js.map +1 -1
  204. package/dist/src/cli/commands/update.js +26 -46
  205. package/dist/src/cli/commands/update.js.map +1 -1
  206. package/dist/src/cli/utils/session.d.ts +0 -5
  207. package/dist/src/cli/utils/session.js +1 -6
  208. package/dist/src/cli/utils/session.js.map +1 -1
  209. package/dist/src/commands/agents.config.js +1 -1
  210. package/dist/src/commands/agents.config.js.map +1 -1
  211. package/dist/src/config/agent-profile.js +5 -27
  212. package/dist/src/config/agent-profile.js.map +1 -1
  213. package/dist/src/config/index.js +2 -2
  214. package/dist/src/config/model-input.js +2 -5
  215. package/dist/src/config/model-input.js.map +1 -1
  216. package/dist/src/config/schema.d.ts +201 -217
  217. package/dist/src/config/schema.js +54 -39
  218. package/dist/src/config/schema.js.map +1 -1
  219. package/dist/src/config/workspace-path-helpers.d.ts +1 -2
  220. package/dist/src/config/workspace-path-helpers.js.map +1 -1
  221. package/dist/src/daemon/install-plan.js +25 -1
  222. package/dist/src/daemon/install-plan.js.map +1 -1
  223. package/dist/src/daemon/launchd.d.ts +8 -0
  224. package/dist/src/daemon/launchd.js +5 -12
  225. package/dist/src/daemon/launchd.js.map +1 -1
  226. package/dist/src/daemon/schtasks.d.ts +25 -0
  227. package/dist/src/daemon/schtasks.js +166 -46
  228. package/dist/src/daemon/schtasks.js.map +1 -1
  229. package/dist/src/daemon/service.js +5 -4
  230. package/dist/src/daemon/service.js.map +1 -1
  231. package/dist/src/daemon/systemd.d.ts +6 -0
  232. package/dist/src/daemon/systemd.js +18 -3
  233. package/dist/src/daemon/systemd.js.map +1 -1
  234. package/dist/src/extensions/activation-context.js +0 -1
  235. package/dist/src/extensions/activation-context.js.map +1 -1
  236. package/dist/src/extensions/normalize-manifest.js +0 -1
  237. package/dist/src/extensions/normalize-manifest.js.map +1 -1
  238. package/dist/src/extensions/types/manifest.d.ts +0 -2
  239. package/dist/src/gateway/agent-builtin-tools.d.ts +1 -1
  240. package/dist/src/gateway/agent-builtin-tools.js +1 -0
  241. package/dist/src/gateway/agent-builtin-tools.js.map +1 -1
  242. package/dist/src/gateway/agents-admin.js +10 -2
  243. package/dist/src/gateway/agents-admin.js.map +1 -1
  244. package/dist/src/gateway/heartbeat/service.js +1 -1
  245. package/dist/src/gateway/heartbeat/service.js.map +1 -1
  246. package/dist/src/gateway/hono/app.js +1 -1
  247. package/dist/src/gateway/hono/lib/agent-model.d.ts +18 -10
  248. package/dist/src/gateway/hono/lib/agent-model.js +24 -35
  249. package/dist/src/gateway/hono/lib/agent-model.js.map +1 -1
  250. package/dist/src/gateway/hono/lib/config-payload.js +1 -1
  251. package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
  252. package/dist/src/gateway/hono/lib/safe-voice-config.js +14 -53
  253. package/dist/src/gateway/hono/lib/safe-voice-config.js.map +1 -1
  254. package/dist/src/gateway/hono/routes/config-patch/agents.js +17 -5
  255. package/dist/src/gateway/hono/routes/config-patch/agents.js.map +1 -1
  256. package/dist/src/gateway/hono/routes/config-patch/channels.js +0 -11
  257. package/dist/src/gateway/hono/routes/config-patch/channels.js.map +1 -1
  258. package/dist/src/gateway/hono/routes/goals.js +1 -1
  259. package/dist/src/gateway/hono/routes/goals.js.map +1 -1
  260. package/dist/src/gateway/hono/routes/sessions.js +28 -7
  261. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  262. package/dist/src/gateway/hono/routes/shares.js +14 -12
  263. package/dist/src/gateway/hono/routes/shares.js.map +1 -1
  264. package/dist/src/gateway/hono/routes/tunnel.js +1 -1
  265. package/dist/src/gateway/hono/routes/update.js +4 -2
  266. package/dist/src/gateway/hono/routes/update.js.map +1 -1
  267. package/dist/src/gateway/hono/sse.js +16 -33
  268. package/dist/src/gateway/hono/sse.js.map +1 -1
  269. package/dist/src/gateway/lock.js +10 -10
  270. package/dist/src/gateway/lock.js.map +1 -1
  271. package/dist/src/gateway/ports.js +6 -6
  272. package/dist/src/gateway/ports.js.map +1 -1
  273. package/dist/src/gateway/resolve-webchat-session-key.d.ts +19 -0
  274. package/dist/src/gateway/resolve-webchat-session-key.js +46 -0
  275. package/dist/src/gateway/resolve-webchat-session-key.js.map +1 -0
  276. package/dist/src/gateway/service/run-gateway-agent.js +27 -11
  277. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -1
  278. package/dist/src/gateway/service/sessions-api.d.ts +3 -0
  279. package/dist/src/gateway/service/sessions-api.js +8 -0
  280. package/dist/src/gateway/service/sessions-api.js.map +1 -1
  281. package/dist/src/gateway/service.d.ts +0 -2
  282. package/dist/src/gateway/service.js +2 -7
  283. package/dist/src/gateway/service.js.map +1 -1
  284. package/dist/src/gateway/session-reset-service.d.ts +20 -0
  285. package/dist/src/gateway/session-reset-service.js +54 -0
  286. package/dist/src/gateway/session-reset-service.js.map +1 -0
  287. package/dist/src/gateway/startup-readiness.d.ts +1 -1
  288. package/dist/src/gateway/startup-readiness.js +1 -0
  289. package/dist/src/gateway/startup-readiness.js.map +1 -1
  290. package/dist/src/infra/gateway-processes.js +2 -2
  291. package/dist/src/infra/gateway-processes.js.map +1 -1
  292. package/dist/src/infra/run-command.d.ts +16 -0
  293. package/dist/src/infra/run-command.js +67 -0
  294. package/dist/src/infra/run-command.js.map +1 -0
  295. package/dist/src/infra/update-global.d.ts +45 -0
  296. package/dist/src/infra/update-global.js +224 -0
  297. package/dist/src/infra/update-global.js.map +1 -0
  298. package/dist/src/mcp/channel-bridge.js +1 -1
  299. package/dist/src/mcp/channel-shared.js +2 -1
  300. package/dist/src/mcp/channel-shared.js.map +1 -1
  301. package/dist/src/providers/auth-runtime/auth-profile-store.js +1 -1
  302. package/dist/src/providers/auth-runtime/auth-profile-store.js.map +1 -1
  303. package/dist/src/providers/auth-runtime/resolve-auth.js +1 -12
  304. package/dist/src/providers/auth-runtime/resolve-auth.js.map +1 -1
  305. package/dist/src/providers/auth-runtime/types.d.ts +6 -12
  306. package/dist/src/routing/agent-session-key.d.ts +58 -0
  307. package/dist/src/routing/agent-session-key.js +164 -0
  308. package/dist/src/routing/agent-session-key.js.map +1 -0
  309. package/dist/src/routing/index.d.ts +1 -1
  310. package/dist/src/routing/index.js +4 -2
  311. package/dist/src/routing/index.js.map +1 -1
  312. package/dist/src/routing/resolve-route.d.ts +15 -0
  313. package/dist/src/routing/resolve-route.js +41 -20
  314. package/dist/src/routing/resolve-route.js.map +1 -1
  315. package/dist/src/routing/resolve-tui-session-key.d.ts +25 -0
  316. package/dist/src/routing/resolve-tui-session-key.js +54 -0
  317. package/dist/src/routing/resolve-tui-session-key.js.map +1 -0
  318. package/dist/src/routing/session-key-utils.d.ts +24 -0
  319. package/dist/src/routing/session-key-utils.js +92 -0
  320. package/dist/src/routing/session-key-utils.js.map +1 -0
  321. package/dist/src/routing/session-key.d.ts +19 -49
  322. package/dist/src/routing/session-key.js +143 -116
  323. package/dist/src/routing/session-key.js.map +1 -1
  324. package/dist/src/session/index.d.ts +6 -0
  325. package/dist/src/session/index.js +7 -1
  326. package/dist/src/session/init-session-turn.d.ts +30 -0
  327. package/dist/src/session/init-session-turn.js +102 -0
  328. package/dist/src/session/init-session-turn.js.map +1 -0
  329. package/dist/src/session/lifecycle-timestamps.d.ts +8 -0
  330. package/dist/src/session/lifecycle-timestamps.js +16 -0
  331. package/dist/src/session/lifecycle-timestamps.js.map +1 -0
  332. package/dist/src/session/manager.d.ts +7 -1
  333. package/dist/src/session/manager.js +8 -1
  334. package/dist/src/session/manager.js.map +1 -1
  335. package/dist/src/session/parity/transcript-paths.js +2 -2
  336. package/dist/src/session/parity/transcript-paths.js.map +1 -1
  337. package/dist/src/session/parity/xopc-session-disk-entry.d.ts +6 -0
  338. package/dist/src/session/reset-policy.d.ts +32 -0
  339. package/dist/src/session/reset-policy.js +65 -0
  340. package/dist/src/session/reset-policy.js.map +1 -0
  341. package/dist/src/session/reset-triggers.d.ts +20 -0
  342. package/dist/src/session/reset-triggers.js +63 -0
  343. package/dist/src/session/reset-triggers.js.map +1 -0
  344. package/dist/src/session/reset-type.d.ts +12 -0
  345. package/dist/src/session/reset-type.js +25 -0
  346. package/dist/src/session/reset-type.js.map +1 -0
  347. package/dist/src/session/resolve-session.d.ts +30 -0
  348. package/dist/src/session/resolve-session.js +93 -0
  349. package/dist/src/session/resolve-session.js.map +1 -0
  350. package/dist/src/session/session-title.js +3 -2
  351. package/dist/src/session/session-title.js.map +1 -1
  352. package/dist/src/session/store.d.ts +11 -4
  353. package/dist/src/session/store.js +57 -6
  354. package/dist/src/session/store.js.map +1 -1
  355. package/dist/src/session/transcript-events.js +2 -1
  356. package/dist/src/session/transcript-events.js.map +1 -1
  357. package/dist/src/share/share-url.d.ts +33 -0
  358. package/dist/src/share/share-url.js +56 -14
  359. package/dist/src/share/share-url.js.map +1 -1
  360. package/dist/src/tui/backends/embedded-backend.js +4 -9
  361. package/dist/src/tui/backends/embedded-backend.js.map +1 -1
  362. package/dist/src/tui/backends/gateway-sse-backend.js +1 -1
  363. package/dist/src/tui/backends/gateway-sse-backend.js.map +1 -1
  364. package/dist/src/tui/components/chat-log.js +3 -3
  365. package/dist/src/tui/components/chat-log.js.map +1 -1
  366. package/dist/src/tui/theme.d.ts +0 -2
  367. package/dist/src/tui/theme.js +1 -3
  368. package/dist/src/tui/theme.js.map +1 -1
  369. package/dist/src/tui/tui-commands.d.ts +3 -0
  370. package/dist/src/tui/tui-commands.js +45 -10
  371. package/dist/src/tui/tui-commands.js.map +1 -1
  372. package/dist/src/tui/tui-keybindings-file.js +1 -21
  373. package/dist/src/tui/tui-keybindings-file.js.map +1 -1
  374. package/dist/src/tui/tui-session-actions.d.ts +28 -0
  375. package/dist/src/tui/tui-session-actions.js +88 -0
  376. package/dist/src/tui/tui-session-actions.js.map +1 -0
  377. package/dist/src/tui/tui.js +52 -47
  378. package/dist/src/tui/tui.js.map +1 -1
  379. package/dist/src/utils/string-coerce.d.ts +2 -0
  380. package/dist/src/utils/string-coerce.js +10 -1
  381. package/dist/src/utils/string-coerce.js.map +1 -1
  382. package/dist/src/voice/stt/config-slice.d.ts +2 -5
  383. package/dist/src/voice/stt/config-slice.js +5 -26
  384. package/dist/src/voice/stt/config-slice.js.map +1 -1
  385. package/dist/src/voice/stt/types.d.ts +1 -18
  386. package/dist/src/voice/stt/types.js +4 -2
  387. package/dist/src/voice/stt/types.js.map +1 -1
  388. package/dist/src/voice/tts/config-slice.d.ts +3 -7
  389. package/dist/src/voice/tts/config-slice.js +7 -38
  390. package/dist/src/voice/tts/config-slice.js.map +1 -1
  391. package/dist/src/voice/tts/merge-config.js +2 -48
  392. package/dist/src/voice/tts/merge-config.js.map +1 -1
  393. package/dist/src/voice/tts/providers/alibaba-speech.js +1 -1
  394. package/dist/src/voice/tts/providers/alibaba-speech.js.map +1 -1
  395. package/dist/src/voice/tts/types.d.ts +1 -29
  396. package/dist/src/voice/tts/types.js +19 -17
  397. package/dist/src/voice/tts/types.js.map +1 -1
  398. package/package.json +1 -4
  399. package/dist/gateway/static/root/assets/agents-D3_-kNlZ.js +0 -222
  400. package/dist/gateway/static/root/assets/extension-settings-page-8PZcmWI7.js +0 -1
  401. package/dist/gateway/static/root/assets/index-ew_2L2We.css +0 -1
  402. package/dist/gateway/static/root/assets/settings-form-section-D_tgb8r2.js +0 -1
  403. package/dist/gateway/static/root/assets/settings-page-C18xBt4X.js +0 -3
  404. package/dist/gateway/static/root/assets/url-BwNL6Rgk.js +0 -3
  405. package/dist/src/agent/tools/browser-legacy-tools.d.ts +0 -17
  406. package/dist/src/agent/tools/browser-legacy-tools.js +0 -766
  407. package/dist/src/agent/tools/browser-legacy-tools.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-legacy-tools.js","names":["p"],"sources":["../../../../src/agent/tools/browser-legacy-tools.ts"],"sourcesContent":["import type { Static } from '@sinclair/typebox';\nimport type { AgentTool } from '@earendil-works/pi-agent-core';\nimport type { Locator, Page } from 'playwright-core';\n\nimport type { Config } from '../../config/schema.js';\nimport { describeImages } from '../image/understanding/runtime.js';\nimport { buildImageToolTextResult } from '../image/image-helpers.js';\nimport { runWithImageModelFallback } from '../image/image-model-fallback.js';\nimport { resolveImageModelConfigForTool } from './image-tool.js';\nimport { checkWebsiteBlocklist } from './url-safety.js';\nimport type { BrowserManager } from '../../browser/manager.js';\nimport { resolveBrowserCommandTimeoutMs } from '../../browser/browser-command-timeout.js';\nimport {\n BrowserBackSchema,\n BrowserCdpSchema,\n BrowserClickSchema,\n BrowserCloseSchema,\n BrowserConsoleSchema,\n BrowserDialogSchema,\n BrowserGetImagesSchema,\n BrowserNavigateSchema,\n BrowserPressSchema,\n BrowserScreenshotSchema,\n BrowserScrollSchema,\n BrowserSnapshotSchema,\n BrowserTypeSchema,\n BrowserVisionSchema,\n} from '../../browser/schemas.js';\nimport { assertBrowserUrlAllowed, checkPostRedirectUrl, containsApiKeyPattern } from '../../browser/url-policy.js';\nimport type { CdpSupervisor } from '../../browser/cdp-supervisor.js';\nimport { truncateSnapshotAtBoundary } from '../../browser/snapshot-helpers.js';\n\nconst DEFAULT_SNAPSHOT_MAX = 30_000;\n/** Compact snapshot attached to navigate results — keep short to avoid bloating tool output. */\nconst AUTO_SNAPSHOT_MAX = 8_000;\nconst MAX_SCREENSHOT_BYTES = 6 * 1024 * 1024;\n\nexport interface CreateBrowserToolsDeps {\n getManager: () => BrowserManager;\n /** Page for the current task, with dialog supervision attached. */\n getPageForTask: () => Promise<Page>;\n getTaskId: () => string;\n getConfig: () => Config | undefined;\n /** CDP supervisor for `browser_dialog` (per-session). */\n getSupervisor?: () => CdpSupervisor | undefined;\n /** Clear per-session supervisor state when `browser_close` runs. */\n notifyBrowserPageClosed?: (taskId: string) => void;\n}\n\nfunction resolveClickLocator(page: Page, params: Static<typeof BrowserClickSchema>): Locator {\n const hasSel = Boolean(params.selector?.trim());\n const hasText = Boolean(params.text?.trim());\n const hasRole = Boolean(params.role?.trim());\n const n = (hasSel ? 1 : 0) + (hasText ? 1 : 0) + (hasRole ? 1 : 0);\n if (n !== 1) {\n throw new Error('Provide exactly one of: selector, text, role');\n }\n if (hasSel) {\n return page.locator(params.selector!.trim()).first();\n }\n if (hasText) {\n return page.getByText(params.text!.trim(), { exact: false }).first();\n }\n const raw = params.role!.trim();\n const idx = raw.indexOf(':');\n const role = (idx >= 0 ? raw.slice(0, idx) : raw).trim();\n const name = idx >= 0 ? raw.slice(idx + 1).trim() : '';\n if (!role) {\n throw new Error('Invalid role: empty ARIA role');\n }\n // Playwright typings list roles as a union; the model may pass any valid ARIA role string.\n return page.getByRole(role as never, name ? { name } : undefined).first();\n}\n\nfunction resolveTypeLocator(page: Page, params: Static<typeof BrowserTypeSchema>): Locator {\n const hasSel = Boolean(params.selector?.trim());\n const hasLab = Boolean(params.label?.trim());\n if (hasSel === hasLab) {\n throw new Error('Provide exactly one of: selector, label');\n }\n if (hasSel) {\n return page.locator(params.selector!.trim()).first();\n }\n return page.getByLabel(params.label!.trim()).first();\n}\n\nasync function ariaSnapshotFor(\n page: Page,\n selector: string | undefined,\n maxLength: number,\n actionTimeoutMs: number,\n): Promise<string> {\n const loc = selector?.trim() ? page.locator(selector.trim()).first() : page.locator('body');\n await loc.waitFor({ state: 'attached', timeout: actionTimeoutMs });\n let text = await loc.ariaSnapshot({ mode: 'ai', timeout: actionTimeoutMs });\n if (!text || !text.trim()) {\n text = '(empty snapshot)';\n }\n if (text.length > maxLength) {\n // Structure-aware truncation: cut at ARIA tree node boundaries\n text = truncateSnapshotAtBoundary(text, maxLength);\n }\n return text;\n}\n\nexport function createBrowserTools(deps: CreateBrowserToolsDeps): AgentTool[] {\n const pageFor = () => deps.getPageForTask();\n const toMs = () => resolveBrowserCommandTimeoutMs(deps.getConfig());\n\n const navigate: any = {\n name: 'browser_navigate',\n label: '🌐 Browser Navigate',\n description:\n 'Navigate the browser to a URL. The page persists for this chat session.\\n' +\n 'Call `browser_snapshot` after navigation to inspect the UI. Only http(s) public URLs; private IPs and localhost are blocked.',\n parameters: BrowserNavigateSchema,\n\n async execute(_id, params: any, signal) {\n const p = params as { url: string; waitFor?: 'domcontentloaded' | 'load' | 'networkidle' };\n const cfg = deps.getConfig();\n const allowPrivate = cfg?.agents?.defaults?.browser?.allowPrivateUrls === true;\n\n // Pre-navigation security checks\n if (containsApiKeyPattern(p.url)) {\n return {\n content: [\n {\n type: 'text',\n text: 'Blocked: URL contains what appears to be an API key or token. Secrets must not be sent in URLs.',\n },\n ],\n details: { blocked: true },\n };\n }\n const block = checkWebsiteBlocklist(p.url, cfg?.tools?.web?.blocklist);\n if (block) {\n return {\n content: [{ type: 'text', text: block.message }],\n details: { blocked: true, rule: block.rule },\n };\n }\n assertBrowserUrlAllowed(p.url, { allowPrivateUrls: allowPrivate });\n\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const navTimeout = toMs();\n const waitUntil = p.waitFor ?? 'domcontentloaded';\n await page.goto(p.url, {\n waitUntil,\n timeout: navTimeout,\n });\n const title = await page.title();\n const finalUrl = page.url();\n\n // Post-redirect security: verify the final URL after redirects.\n // A benign URL can redirect to an internal/metadata address.\n if (finalUrl && finalUrl !== p.url) {\n const redirectBlock = checkPostRedirectUrl(finalUrl, { allowPrivateUrls: allowPrivate });\n if (redirectBlock) {\n await page.goto('about:blank').catch(() => {});\n return {\n content: [{ type: 'text', text: redirectBlock }],\n details: { blocked: true, originalUrl: p.url, redirectedTo: finalUrl },\n };\n }\n const redirectDomainBlock = checkWebsiteBlocklist(finalUrl, cfg?.tools?.web?.blocklist);\n if (redirectDomainBlock) {\n await page.goto('about:blank').catch(() => {});\n return {\n content: [{ type: 'text', text: redirectDomainBlock.message }],\n details: { blocked: true, originalUrl: p.url, redirectedTo: finalUrl, rule: redirectDomainBlock.rule },\n };\n }\n }\n\n // Auto-snapshot after navigation so the agent can act immediately\n // without a separate browser_snapshot call (hermes-agent pattern).\n let snapshotText = '';\n try {\n snapshotText = await ariaSnapshotFor(page, undefined, AUTO_SNAPSHOT_MAX, toMs());\n } catch {\n // Non-fatal — navigation succeeded; snapshot is a bonus.\n }\n\n const parts = [`Navigated to: ${title}\\nURL: ${finalUrl}`];\n if (snapshotText) {\n parts.push(`\\n--- Page Snapshot ---\\n${snapshotText}`);\n }\n return {\n content: [{ type: 'text', text: parts.join('') }],\n details: { url: finalUrl, title, snapshotLength: snapshotText.length },\n };\n },\n };\n\n const snapshot: any = {\n name: 'browser_snapshot',\n label: '📸 Browser Snapshot',\n description:\n 'Capture an AI-oriented ARIA snapshot of the current page (YAML-like tree with element refs).\\n' +\n 'Use after `browser_navigate` to see interactive elements before `browser_click` / `browser_type`.',\n parameters: BrowserSnapshotSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const p = params as { selector?: string; maxLength?: number };\n const maxLength = p.maxLength ?? DEFAULT_SNAPSHOT_MAX;\n const actionTimeout = toMs();\n try {\n const text = await ariaSnapshotFor(page, p.selector, maxLength, actionTimeout);\n return {\n content: [{ type: 'text', text }],\n details: { length: text.length },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Snapshot failed: ${msg}` }],\n details: { length: 0 },\n };\n }\n },\n };\n\n const click: any = {\n name: 'browser_click',\n label: '🖱️ Browser Click',\n description:\n 'Click an element. Provide exactly one targeting mode: `selector` (CSS), `text` (visible text), or `role` (e.g. `button:Submit`).',\n parameters: BrowserClickSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const actionTimeout = toMs();\n try {\n const loc = resolveClickLocator(page, params as any);\n await loc.click({ timeout: actionTimeout });\n return {\n content: [{ type: 'text', text: 'Click succeeded.' }],\n details: { ok: true },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Click failed: ${msg}` }],\n details: { ok: false },\n };\n }\n },\n };\n\n const typeTool: any = {\n name: 'browser_type',\n label: '⌨️ Browser Type',\n description:\n 'Type into an input. Provide exactly one of `selector` or `label` (associated label text). Optional `pressEnter` to submit.',\n parameters: BrowserTypeSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const actionTimeout = toMs();\n try {\n const p = params as { selector?: string; label?: string; text: string; pressEnter?: boolean };\n const loc = resolveTypeLocator(page, p);\n await loc.clear({ timeout: Math.min(5_000, actionTimeout) }).catch(() => {});\n await loc.fill(p.text, { timeout: actionTimeout });\n if (p.pressEnter) {\n await page.keyboard.press('Enter');\n }\n return {\n content: [{ type: 'text', text: 'Typed into field.' }],\n details: { ok: true },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Type failed: ${msg}` }],\n details: { ok: false },\n };\n }\n },\n };\n\n const scroll: any = {\n name: 'browser_scroll',\n label: '📜 Browser Scroll',\n description: 'Scroll the page up or down by a pixel amount (default 500).',\n parameters: BrowserScrollSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const p = params as { direction: 'up' | 'down'; amount?: number };\n const amount = p.amount ?? 500;\n const dy = p.direction === 'down' ? amount : -amount;\n await page.evaluate(\n ({ deltaY }) => {\n (globalThis as unknown as { scrollBy: (x: number, y: number) => void }).scrollBy(0, deltaY);\n },\n { deltaY: dy },\n );\n return {\n content: [{ type: 'text', text: `Scrolled ${p.direction} by ${amount}px.` }],\n details: { ok: true },\n };\n },\n };\n\n const screenshot: any = {\n name: 'browser_screenshot',\n label: '🖼️ Browser Screenshot',\n description:\n '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).',\n parameters: BrowserScreenshotSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const cfg = deps.getConfig();\n let buf: Buffer;\n const actionTimeout = toMs();\n try {\n const p = params as { selector?: string; description?: string };\n if (p.selector?.trim()) {\n const loc = page.locator(p.selector.trim()).first();\n await loc.waitFor({ state: 'visible', timeout: actionTimeout });\n buf = await loc.screenshot({ type: 'png', timeout: actionTimeout });\n } else {\n buf = await page.screenshot({ type: 'png', fullPage: false, timeout: actionTimeout });\n }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Screenshot failed: ${msg}` }],\n details: { error: msg },\n };\n }\n\n if (buf.length > MAX_SCREENSHOT_BYTES) {\n return {\n content: [\n {\n type: 'text',\n text: `Screenshot too large (${buf.length} bytes, max ${MAX_SCREENSHOT_BYTES}). Try a narrower selector.`,\n },\n ],\n details: { error: 'too_large', bytes: buf.length },\n };\n }\n\n const imageModelConfig = resolveImageModelConfigForTool({ cfg });\n const prompt =\n (params as { description?: string }).description?.trim() ||\n 'Describe this browser screenshot briefly. Focus on visible text, controls, and actionable UI state.';\n\n if (!imageModelConfig) {\n return {\n content: [\n {\n type: 'text',\n text:\n `Captured PNG screenshot (${buf.length} bytes). Configure agents.defaults.imageModel for automatic visual description.`,\n },\n ],\n details: { bytes: buf.length, vision: false },\n };\n }\n\n try {\n const runResult = await runWithImageModelFallback({\n toolConfig: imageModelConfig,\n modelOverride: undefined,\n run: async (modelRef) => {\n const { text, provider, model } = await describeImages({\n modelRef,\n prompt,\n images: [{ buffer: buf, mimeType: 'image/png' }],\n timeoutMs: 60_000,\n signal,\n });\n return { text, provider, model };\n },\n });\n const { result: inner, attempts } = runResult;\n return buildImageToolTextResult(\n { text: inner.text, provider: inner.provider, model: inner.model, attempts },\n { bytes: buf.length, vision: true },\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [\n {\n type: 'text',\n text: `Screenshot captured (${buf.length} bytes) but vision failed: ${msg}`,\n },\n ],\n details: { bytes: buf.length, visionError: msg },\n };\n }\n },\n };\n\n const back: any = {\n name: 'browser_back',\n label: '◀️ Browser Back',\n description: 'Navigate back in browser history. Returns the new page URL and title.',\n parameters: BrowserBackSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const p = params as { waitFor?: 'domcontentloaded' | 'load' | 'networkidle' };\n const waitUntil = p.waitFor ?? 'domcontentloaded';\n const navTimeout = toMs();\n try {\n const response = await page.goBack({ waitUntil, timeout: navTimeout });\n if (!response) {\n return {\n content: [{ type: 'text', text: 'No previous page in history.' }],\n details: { ok: false },\n };\n }\n const title = await page.title();\n const url = page.url();\n return {\n content: [{ type: 'text', text: `Navigated back to: ${title}\\nURL: ${url}` }],\n details: { ok: true, url, title },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Back navigation failed: ${msg}` }],\n details: { ok: false },\n };\n }\n },\n };\n\n const press: any = {\n name: 'browser_press',\n label: '⌨️ Browser Press',\n description:\n 'Press a keyboard key or key combination. Examples: \"Enter\", \"Tab\", \"Escape\", \"ArrowDown\", \"Control+A\", \"Shift+Enter\".',\n parameters: BrowserPressSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const p = params as { key: string };\n try {\n await page.keyboard.press(p.key);\n return {\n content: [{ type: 'text', text: `Pressed key: ${p.key}` }],\n details: { ok: true, key: p.key },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Key press failed: ${msg}` }],\n details: { ok: false },\n };\n }\n },\n };\n\n const consoleTool: any = {\n name: 'browser_console',\n label: '💻 Browser Console',\n description:\n 'Execute JavaScript in the page context and return the result. ' +\n 'If no `javascript` parameter is provided, returns the last 50 console log entries.',\n parameters: BrowserConsoleSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const p = params as { javascript?: string };\n\n if (!p.javascript?.trim()) {\n // Return recent console messages collected by the page\n try {\n const logs: string[] = [];\n const collectHandler = (msg: import('playwright-core').ConsoleMessage) => {\n logs.push(`[${msg.type()}] ${msg.text()}`);\n };\n page.on('console', collectHandler);\n // Give a brief moment to collect any pending messages\n await page.waitForTimeout(100);\n page.off('console', collectHandler);\n const text = logs.length > 0\n ? logs.slice(-50).join('\\n')\n : '(no recent console messages)';\n return {\n content: [{ type: 'text', text }],\n details: { mode: 'logs', count: logs.length },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Console read failed: ${msg}` }],\n details: { ok: false },\n };\n }\n }\n\n try {\n const result = await page.evaluate(p.javascript);\n const serialized = result === undefined ? 'undefined' : JSON.stringify(result, null, 2);\n const text = serialized.length > DEFAULT_SNAPSHOT_MAX\n ? `${serialized.slice(0, DEFAULT_SNAPSHOT_MAX)}\\n... (truncated)`\n : serialized;\n return {\n content: [{ type: 'text', text }],\n details: { mode: 'eval', resultLength: serialized.length },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Eval failed: ${msg}` }],\n details: { ok: false },\n };\n }\n },\n };\n\n const getImages: any = {\n name: 'browser_get_images',\n label: '🖼️ Browser Get Images',\n description:\n 'Extract all visible images from the page with their src, alt text, and dimensions. ' +\n 'Useful for understanding page content without screenshots.',\n parameters: BrowserGetImagesSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const p = params as { selector?: string; maxImages?: number };\n const maxImages = p.maxImages ?? 20;\n\n try {\n // Playwright evaluate runs in the browser context (DOM available).\n // Use a string-based function to avoid TS complaining about missing DOM lib.\n const images = await page.evaluate(\n ([sel, max]: [string | null, number]) => {\n const d = globalThis.document as unknown as {\n querySelector: (s: string) => unknown;\n querySelectorAll: (s: string) => unknown[];\n };\n const root = sel ? d.querySelector(sel) : d;\n if (!root) return [];\n const imgs = Array.from(\n (root as { querySelectorAll: (s: string) => ArrayLike<Record<string, unknown>> }).querySelectorAll('img'),\n );\n return imgs.slice(0, max).map((img) => ({\n src: String(img.src ?? ''),\n alt: String(img.alt ?? ''),\n width: Number(img.naturalWidth ?? 0),\n height: Number(img.naturalHeight ?? 0),\n visible: img.offsetParent !== null,\n }));\n },\n [p.selector?.trim() || null, maxImages] as [string | null, number],\n );\n if (!images || images.length === 0) {\n return {\n content: [{ type: 'text', text: 'No images found on the page.' }],\n details: { count: 0 },\n };\n }\n const lines = images.map(\n (img: { src: string; alt: string; width: number; height: number; visible: boolean }, i: number) =>\n `${i + 1}. ${img.alt || '(no alt)'} — ${img.width}×${img.height} ${img.visible ? '' : '[hidden]'}\\n ${img.src}`,\n );\n return {\n content: [{ type: 'text', text: `Found ${images.length} image(s):\\n${lines.join('\\n')}` }],\n details: { count: images.length },\n };\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Get images failed: ${msg}` }],\n details: { ok: false },\n };\n }\n },\n };\n\n const closeTool: any = {\n name: 'browser_close',\n label: '❌ Browser Close',\n description:\n 'Close the browser page for this session, releasing resources. A new page will be created on the next browser tool call.',\n parameters: BrowserCloseSchema,\n\n async execute(_id, _params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const taskId = deps.getTaskId();\n await deps.getManager().closePage(taskId);\n deps.notifyBrowserPageClosed?.(taskId);\n return {\n content: [{ type: 'text', text: 'Browser page closed.' }],\n details: { ok: true },\n };\n },\n };\n\n const visionTool: any = {\n name: 'browser_vision',\n label: '👁️ Browser Vision',\n description:\n 'Take a screenshot and analyze it with the vision model. Unlike `browser_screenshot`, this tool *always* runs vision analysis. ' +\n 'Requires `agents.defaults.imageModel` to be configured.',\n parameters: BrowserVisionSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const cfg = deps.getConfig();\n const p = params as { prompt?: string; selector?: string };\n\n const imageModelConfig = resolveImageModelConfigForTool({ cfg });\n if (!imageModelConfig) {\n return {\n content: [\n {\n type: 'text',\n text: 'Vision model not configured. Set `agents.defaults.imageModel` to use browser_vision.',\n },\n ],\n details: { ok: false },\n };\n }\n\n let buf: Buffer;\n const actionTimeout = toMs();\n try {\n if (p.selector?.trim()) {\n const loc = page.locator(p.selector.trim()).first();\n await loc.waitFor({ state: 'visible', timeout: actionTimeout });\n buf = await loc.screenshot({ type: 'png', timeout: actionTimeout });\n } else {\n buf = await page.screenshot({ type: 'png', fullPage: false, timeout: actionTimeout });\n }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `Screenshot for vision failed: ${msg}` }],\n details: { ok: false },\n };\n }\n\n if (buf.length > MAX_SCREENSHOT_BYTES) {\n return {\n content: [\n {\n type: 'text',\n text: `Screenshot too large (${buf.length} bytes). Try a narrower selector.`,\n },\n ],\n details: { ok: false, bytes: buf.length },\n };\n }\n\n const prompt = p.prompt?.trim() ||\n 'Describe this browser screenshot in detail. Focus on visible text, interactive elements, layout, and actionable UI state.';\n\n try {\n const runResult = await runWithImageModelFallback({\n toolConfig: imageModelConfig,\n modelOverride: undefined,\n run: async (modelRef) => {\n const { text, provider, model } = await describeImages({\n modelRef,\n prompt,\n images: [{ buffer: buf, mimeType: 'image/png' }],\n timeoutMs: 60_000,\n signal,\n });\n return { text, provider, model };\n },\n });\n const { result: inner, attempts } = runResult;\n return buildImageToolTextResult(\n { text: inner.text, provider: inner.provider, model: inner.model, attempts },\n { bytes: buf.length, vision: true },\n );\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [\n {\n type: 'text',\n text: `Vision analysis failed: ${msg}`,\n },\n ],\n details: { bytes: buf.length, visionError: msg },\n };\n }\n },\n };\n\n const dialogTool: any = {\n name: 'browser_dialog',\n label: '💬 Browser Dialog',\n description:\n 'Handle a pending JavaScript dialog (alert, confirm, prompt, beforeunload). ' +\n 'Requires CDP Supervisor to be active. Lists pending dialogs if none need handling.',\n parameters: BrowserDialogSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const supervisor = deps.getSupervisor?.();\n if (!supervisor) {\n return {\n content: [{ type: 'text', text: 'CDP Supervisor not active. Dialog handling is not available.' }],\n details: { ok: false },\n };\n }\n const p = params as { action: 'accept' | 'dismiss'; promptText?: string };\n const pending = supervisor.getPendingDialogs();\n if (pending.length === 0) {\n return {\n content: [{ type: 'text', text: 'No pending dialogs.' }],\n details: { ok: true, pendingCount: 0 },\n };\n }\n\n const handled = await supervisor.handleDialog(p.action, {\n promptText: p.promptText,\n });\n if (!handled) {\n return {\n content: [{ type: 'text', text: 'Dialog already handled or expired.' }],\n details: { ok: false },\n };\n }\n return {\n content: [\n {\n type: 'text',\n text: `Dialog ${handled.response}: [${handled.type}] \"${handled.message}\"`,\n },\n ],\n details: { ok: true, dialogId: handled.id, type: handled.type },\n };\n },\n };\n\n const cdpTool: any = {\n name: 'browser_cdp',\n label: '🔧 Browser CDP',\n description:\n 'Send a raw Chrome DevTools Protocol command to the browser. ' +\n 'Advanced: use only when Playwright high-level APIs are insufficient.',\n parameters: BrowserCdpSchema,\n\n async execute(_id, params: any, signal) {\n if (signal?.aborted) {\n throw new Error('aborted');\n }\n const page = await pageFor();\n const p = params as { method: string; params?: Record<string, unknown> };\n\n try {\n const cdpSession = await page.context().newCDPSession(page);\n try {\n const result = await cdpSession.send(p.method as never, (p.params ?? {}) as never);\n const serialized = JSON.stringify(result, null, 2);\n const text = serialized.length > DEFAULT_SNAPSHOT_MAX\n ? `${serialized.slice(0, DEFAULT_SNAPSHOT_MAX)}\\n... (truncated)`\n : serialized;\n return {\n content: [{ type: 'text', text }],\n details: { ok: true, method: p.method },\n };\n } finally {\n await cdpSession.detach().catch(() => {});\n }\n } catch (e) {\n const msg = e instanceof Error ? e.message : String(e);\n return {\n content: [{ type: 'text', text: `CDP command failed: ${msg}` }],\n details: { ok: false, method: p.method },\n };\n }\n },\n };\n\n return [\n navigate, snapshot, click, typeTool, scroll, screenshot,\n back, press, consoleTool, getImages, closeTool, visionTool,\n dialogTool, cdpTool,\n ];\n}\n"],"mappings":"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"}