@poolzin/pool-bot 1.28.0 → 2026.1.26

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 (1024) hide show
  1. package/CHANGELOG.md +1123 -32
  2. package/README.md +37 -47
  3. package/assets/chrome-extension/background.js +5 -5
  4. package/assets/chrome-extension/manifest.json +3 -3
  5. package/assets/chrome-extension/options.html +6 -5
  6. package/assets/chrome-extension/options.js +1 -1
  7. package/dist/acp/client.js +5 -5
  8. package/dist/acp/server.js +1 -1
  9. package/dist/acp/types.js +2 -2
  10. package/dist/agents/agent-paths.js +3 -3
  11. package/dist/agents/auth-health.js +6 -2
  12. package/dist/agents/auth-profiles/doctor.js +1 -1
  13. package/dist/agents/auth-profiles/external-cli-sync.js +150 -5
  14. package/dist/agents/auth-profiles/oauth.js +7 -26
  15. package/dist/agents/auth-profiles/paths.js +3 -3
  16. package/dist/agents/auth-profiles/store.js +13 -5
  17. package/dist/agents/bash-tools.shared.js +1 -8
  18. package/dist/agents/cli-backends.js +0 -8
  19. package/dist/agents/cli-runner/helpers.js +3 -3
  20. package/dist/agents/cli-runner.js +2 -2
  21. package/dist/agents/compaction.js +0 -3
  22. package/dist/agents/context.js +4 -4
  23. package/dist/agents/docs-path.js +3 -3
  24. package/dist/agents/identity.js +1 -1
  25. package/dist/agents/memory-search.js +2 -7
  26. package/dist/agents/minimax-vlm.js +1 -1
  27. package/dist/agents/model-auth.js +1 -1
  28. package/dist/agents/model-catalog.js +4 -4
  29. package/dist/agents/model-fallback.js +0 -22
  30. package/dist/agents/model-selection.js +1 -1
  31. package/dist/agents/models-config.js +3 -3
  32. package/dist/agents/models-config.providers.js +4 -4
  33. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  34. package/dist/agents/pi-embedded-runner/cache-ttl.js +1 -1
  35. package/dist/agents/pi-embedded-runner/compact.js +8 -8
  36. package/dist/agents/pi-embedded-runner/extensions.js +0 -5
  37. package/dist/agents/pi-embedded-runner/model.js +2 -2
  38. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -10
  39. package/dist/agents/pi-embedded-runner/run.js +4 -4
  40. package/dist/agents/pi-embedded-runner/sandbox-info.js +4 -1
  41. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  42. package/dist/agents/pi-embedded-utils.js +1 -7
  43. package/dist/agents/pi-extensions/compaction-safeguard.js +3 -32
  44. package/dist/agents/pi-tools.js +15 -25
  45. package/dist/agents/pi-tools.policy.js +1 -34
  46. package/dist/agents/pi-tools.read.js +2 -2
  47. package/dist/agents/sandbox/browser.js +7 -5
  48. package/dist/agents/sandbox/config.js +12 -0
  49. package/dist/agents/sandbox/constants.js +7 -7
  50. package/dist/agents/sandbox/context.js +3 -3
  51. package/dist/agents/sandbox/docker.js +8 -8
  52. package/dist/agents/sandbox/runtime-status.js +1 -1
  53. package/dist/agents/session-transcript-repair.js +1 -1
  54. package/dist/agents/session-write-lock.js +0 -68
  55. package/dist/agents/skills/config.js +8 -9
  56. package/dist/agents/skills/env-overrides.js +1 -1
  57. package/dist/agents/skills/frontmatter.js +14 -15
  58. package/dist/agents/skills/workspace.js +7 -7
  59. package/dist/agents/skills-install.js +1 -1
  60. package/dist/agents/skills-status.js +12 -12
  61. package/dist/agents/subagent-registry.store.js +2 -2
  62. package/dist/agents/system-prompt.js +32 -21
  63. package/dist/agents/tool-images.js +1 -1
  64. package/dist/agents/tool-policy.js +2 -8
  65. package/dist/agents/tools/browser-tool.js +79 -19
  66. package/dist/agents/tools/browser-tool.schema.js +2 -1
  67. package/dist/agents/tools/cron-tool.js +1 -44
  68. package/dist/agents/tools/discord-actions-guild.js +1 -5
  69. package/dist/agents/tools/image-tool.js +2 -2
  70. package/dist/agents/tools/message-tool.js +0 -1
  71. package/dist/agents/tools/sessions-send-helpers.js +2 -17
  72. package/dist/agents/tools/telegram-actions.js +1 -93
  73. package/dist/agents/tools/web-fetch.js +103 -123
  74. package/dist/agents/tools/web-search.js +7 -7
  75. package/dist/agents/workspace.js +0 -36
  76. package/dist/auto-reply/commands-registry.data.js +3 -68
  77. package/dist/auto-reply/commands-registry.js +11 -14
  78. package/dist/auto-reply/reply/agent-runner-execution.js +3 -21
  79. package/dist/auto-reply/reply/agent-runner-memory.js +0 -5
  80. package/dist/auto-reply/reply/bash-command.js +2 -2
  81. package/dist/auto-reply/reply/commands-context-report.js +2 -2
  82. package/dist/auto-reply/reply/commands-info.js +5 -50
  83. package/dist/auto-reply/reply/commands-session.js +4 -4
  84. package/dist/auto-reply/reply/commands-tts.js +63 -61
  85. package/dist/auto-reply/reply/directive-handling.shared.js +1 -1
  86. package/dist/auto-reply/reply/dispatch-from-config.js +1 -65
  87. package/dist/auto-reply/reply/followup-runner.js +0 -5
  88. package/dist/auto-reply/reply/get-reply-inline-actions.js +2 -2
  89. package/dist/auto-reply/reply/get-reply-run.js +0 -4
  90. package/dist/auto-reply/reply/groups.js +1 -1
  91. package/dist/auto-reply/reply/history.js +0 -23
  92. package/dist/auto-reply/reply/reply-elevated.js +1 -1
  93. package/dist/auto-reply/reply/session-updates.js +1 -6
  94. package/dist/auto-reply/status.js +49 -141
  95. package/dist/browser/bridge-server.js +3 -1
  96. package/dist/browser/client-actions-core.js +7 -13
  97. package/dist/browser/client-actions-observe.js +8 -14
  98. package/dist/browser/client-actions-state.js +15 -21
  99. package/dist/browser/client-fetch.js +61 -74
  100. package/dist/browser/client.js +21 -19
  101. package/dist/browser/config.js +26 -13
  102. package/dist/browser/constants.js +1 -1
  103. package/dist/browser/extension-relay.js +3 -3
  104. package/dist/browser/pw-session.js +4 -41
  105. package/dist/browser/pw-tools-core.downloads.js +1 -1
  106. package/dist/browser/pw-tools-core.interactions.js +5 -5
  107. package/dist/browser/pw-tools-core.responses.js +1 -1
  108. package/dist/browser/routes/agent.act.js +0 -13
  109. package/dist/browser/routes/agent.debug.js +1 -1
  110. package/dist/browser/routes/basic.js +1 -0
  111. package/dist/browser/server-context.js +3 -3
  112. package/dist/browser/server.js +9 -7
  113. package/dist/build-info.json +3 -3
  114. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  115. package/dist/canvas-host/a2ui/a2ui.bundle.js +1618 -1620
  116. package/dist/canvas-host/a2ui/index.html +28 -28
  117. package/dist/canvas-host/a2ui.js +19 -25
  118. package/dist/canvas-host/server.js +32 -66
  119. package/dist/channels/plugins/actions/discord/handle-action.guild-admin.js +1 -5
  120. package/dist/channels/plugins/actions/telegram.js +7 -60
  121. package/dist/channels/plugins/catalog.js +4 -6
  122. package/dist/channels/plugins/group-mentions.js +1 -48
  123. package/dist/channels/plugins/helpers.js +2 -2
  124. package/dist/channels/plugins/message-action-names.js +0 -1
  125. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  126. package/dist/channels/plugins/onboarding/signal.js +2 -2
  127. package/dist/channels/plugins/onboarding/slack.js +4 -4
  128. package/dist/channels/plugins/onboarding/telegram.js +9 -17
  129. package/dist/channels/plugins/onboarding/whatsapp.js +4 -4
  130. package/dist/channels/plugins/outbound/telegram.js +0 -38
  131. package/dist/channels/plugins/pairing-message.js +1 -1
  132. package/dist/channels/plugins/status-issues/bluebubbles.js +1 -1
  133. package/dist/channels/plugins/status-issues/whatsapp.js +2 -2
  134. package/dist/channels/registry.js +1 -1
  135. package/dist/cli/acp-cli.js +2 -2
  136. package/dist/cli/argv.js +7 -14
  137. package/dist/cli/banner.js +1 -3
  138. package/dist/cli/browser-cli-actions-input/register.element.js +44 -72
  139. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +35 -55
  140. package/dist/cli/browser-cli-actions-input/register.form-wait-eval.js +28 -41
  141. package/dist/cli/browser-cli-actions-input/register.navigation.js +14 -23
  142. package/dist/cli/browser-cli-actions-input/shared.js +3 -10
  143. package/dist/cli/browser-cli-actions-observe.js +21 -29
  144. package/dist/cli/browser-cli-debug.js +35 -49
  145. package/dist/cli/browser-cli-examples.js +29 -29
  146. package/dist/cli/browser-cli-extension.js +8 -8
  147. package/dist/cli/browser-cli-inspect.js +17 -23
  148. package/dist/cli/browser-cli-manage.js +56 -106
  149. package/dist/cli/browser-cli-shared.js +1 -34
  150. package/dist/cli/browser-cli-state.cookies-storage.js +39 -53
  151. package/dist/cli/browser-cli-state.js +64 -90
  152. package/dist/cli/browser-cli.js +5 -4
  153. package/dist/cli/channels-cli.js +1 -1
  154. package/dist/cli/command-format.js +7 -11
  155. package/dist/cli/config-cli.js +2 -2
  156. package/dist/cli/cron-cli/register.js +1 -1
  157. package/dist/cli/daemon-cli/install.js +1 -1
  158. package/dist/cli/daemon-cli/register.js +1 -1
  159. package/dist/cli/daemon-cli/shared.js +3 -5
  160. package/dist/cli/daemon-cli/status.print.js +6 -6
  161. package/dist/cli/directory-cli.js +1 -1
  162. package/dist/cli/dns-cli.js +7 -7
  163. package/dist/cli/docs-cli.js +2 -2
  164. package/dist/cli/exec-approvals-cli.js +2 -2
  165. package/dist/cli/gateway-cli/dev.js +4 -4
  166. package/dist/cli/gateway-cli/register.js +1 -1
  167. package/dist/cli/gateway-cli/run.js +8 -11
  168. package/dist/cli/gateway-cli/shared.js +4 -4
  169. package/dist/cli/hooks-cli.js +3 -3
  170. package/dist/cli/logs-cli.js +3 -3
  171. package/dist/cli/memory-cli.js +1 -1
  172. package/dist/cli/models-cli.js +2 -2
  173. package/dist/cli/node-cli/daemon.js +2 -2
  174. package/dist/cli/node-cli/register.js +1 -1
  175. package/dist/cli/nodes-camera.js +1 -3
  176. package/dist/cli/nodes-canvas.js +1 -3
  177. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  178. package/dist/cli/nodes-cli/register.js +1 -1
  179. package/dist/cli/nodes-screen.js +1 -1
  180. package/dist/cli/pairing-cli.js +3 -3
  181. package/dist/cli/plugin-registry.js +2 -2
  182. package/dist/cli/plugins-cli.js +3 -3
  183. package/dist/cli/profile.js +1 -1
  184. package/dist/cli/program/config-guard.js +1 -1
  185. package/dist/cli/program/help.js +14 -13
  186. package/dist/cli/program/message/register.send.js +1 -2
  187. package/dist/cli/program/preaction.js +2 -4
  188. package/dist/cli/program/register.agent.js +12 -12
  189. package/dist/cli/program/register.configure.js +1 -1
  190. package/dist/cli/program/register.maintenance.js +4 -4
  191. package/dist/cli/program/register.message.js +5 -5
  192. package/dist/cli/program/register.onboard.js +3 -5
  193. package/dist/cli/program/register.setup.js +2 -2
  194. package/dist/cli/program/register.status-health-sessions.js +13 -13
  195. package/dist/cli/run-main.js +4 -11
  196. package/dist/cli/sandbox-cli.js +19 -19
  197. package/dist/cli/security-cli.js +8 -18
  198. package/dist/cli/skills-cli.js +3 -3
  199. package/dist/cli/system-cli.js +1 -1
  200. package/dist/cli/tagline.js +1 -1
  201. package/dist/cli/tui-cli.js +1 -1
  202. package/dist/cli/update-cli.js +42 -58
  203. package/dist/cli/webhooks-cli.js +6 -6
  204. package/dist/commands/agent-via-gateway.js +1 -1
  205. package/dist/commands/agent.js +1 -2
  206. package/dist/commands/agents.command-shared.js +1 -1
  207. package/dist/commands/agents.commands.add.js +3 -2
  208. package/dist/commands/agents.commands.list.js +1 -1
  209. package/dist/commands/auth-choice-options.js +54 -4
  210. package/dist/commands/auth-choice.apply.anthropic.js +109 -6
  211. package/dist/commands/auth-choice.apply.openai.js +33 -1
  212. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  213. package/dist/commands/channels/list.js +2 -2
  214. package/dist/commands/channels/shared.js +1 -1
  215. package/dist/commands/channels/status.js +1 -1
  216. package/dist/commands/chutes-oauth.js +1 -1
  217. package/dist/commands/configure.channels.js +4 -4
  218. package/dist/commands/configure.gateway-auth.js +8 -1
  219. package/dist/commands/configure.gateway.js +10 -1
  220. package/dist/commands/configure.wizard.js +11 -11
  221. package/dist/commands/daemon-install-helpers.js +1 -1
  222. package/dist/commands/dashboard.js +1 -1
  223. package/dist/commands/docs.js +5 -5
  224. package/dist/commands/doctor-auth.js +3 -122
  225. package/dist/commands/doctor-config-flow.js +7 -7
  226. package/dist/commands/doctor-format.js +2 -2
  227. package/dist/commands/doctor-gateway-daemon-flow.js +1 -1
  228. package/dist/commands/doctor-gateway-services.js +3 -3
  229. package/dist/commands/doctor-security.js +1 -48
  230. package/dist/commands/doctor-ui.js +2 -2
  231. package/dist/commands/doctor-update.js +4 -4
  232. package/dist/commands/doctor-workspace-status.js +2 -2
  233. package/dist/commands/doctor-workspace.js +4 -4
  234. package/dist/commands/doctor.js +12 -13
  235. package/dist/commands/gateway-status.js +2 -2
  236. package/dist/commands/models/auth.js +22 -23
  237. package/dist/commands/models/list.probe.js +2 -2
  238. package/dist/commands/models/list.registry.js +4 -4
  239. package/dist/commands/models/list.status-command.js +9 -8
  240. package/dist/commands/onboard-auth.credentials.js +2 -2
  241. package/dist/commands/onboard-channels.js +3 -3
  242. package/dist/commands/onboard-helpers.js +4 -4
  243. package/dist/commands/onboard-hooks.js +4 -4
  244. package/dist/commands/onboard-non-interactive/local/auth-choice.js +34 -38
  245. package/dist/commands/onboard-non-interactive/local/gateway-config.js +4 -7
  246. package/dist/commands/onboard-non-interactive/local.js +1 -1
  247. package/dist/commands/onboard-non-interactive/remote.js +1 -1
  248. package/dist/commands/onboard-non-interactive.js +1 -1
  249. package/dist/commands/onboard-remote.js +2 -2
  250. package/dist/commands/onboard-skills.js +2 -2
  251. package/dist/commands/onboard.js +4 -25
  252. package/dist/commands/onboarding/plugin-install.js +2 -2
  253. package/dist/commands/reset.js +3 -3
  254. package/dist/commands/sandbox-display.js +1 -1
  255. package/dist/commands/sandbox-explain.js +2 -2
  256. package/dist/commands/setup.js +2 -2
  257. package/dist/commands/signal-install.js +2 -2
  258. package/dist/commands/status-all/diagnosis.js +1 -1
  259. package/dist/commands/status-all/report-lines.js +1 -1
  260. package/dist/commands/status-all.js +3 -3
  261. package/dist/commands/status.command.js +9 -9
  262. package/dist/commands/status.update.js +3 -3
  263. package/dist/commands/uninstall.js +3 -3
  264. package/dist/config/config.js +1 -1
  265. package/dist/config/group-policy.js +0 -69
  266. package/dist/config/io.js +5 -17
  267. package/dist/config/legacy.migrations.part-3.js +0 -3
  268. package/dist/config/logging.js +3 -3
  269. package/dist/config/paths.js +13 -43
  270. package/dist/config/schema.js +9 -21
  271. package/dist/config/sessions/transcript.js +1 -1
  272. package/dist/config/validation.js +2 -2
  273. package/dist/config/version.js +4 -4
  274. package/dist/config/zod-schema.agent-defaults.js +0 -1
  275. package/dist/config/zod-schema.agent-runtime.js +7 -39
  276. package/dist/config/zod-schema.hooks.js +0 -2
  277. package/dist/config/zod-schema.js +3 -9
  278. package/dist/config/zod-schema.providers-core.js +0 -23
  279. package/dist/config/zod-schema.providers-whatsapp.js +0 -3
  280. package/dist/control-ui/assets/{index-HlBhZmfj.js → index-Cl-Y9zqE.js} +578 -620
  281. package/dist/control-ui/assets/index-Cl-Y9zqE.js.map +1 -0
  282. package/dist/control-ui/assets/index-DEPfFcOb.css +1 -0
  283. package/dist/control-ui/index.html +4 -4
  284. package/dist/cron/isolated-agent/run.js +3 -38
  285. package/dist/daemon/constants.js +12 -12
  286. package/dist/daemon/inspect.js +11 -11
  287. package/dist/daemon/program-args.js +1 -1
  288. package/dist/daemon/systemd-hints.js +1 -1
  289. package/dist/daemon/systemd-unit.js +1 -1
  290. package/dist/discord/monitor/listeners.js +1 -25
  291. package/dist/discord/monitor/native-command.js +5 -7
  292. package/dist/discord/monitor/provider.js +7 -21
  293. package/dist/entry.js +4 -4
  294. package/dist/gateway/auth.js +19 -52
  295. package/dist/gateway/hooks-mapping.js +4 -18
  296. package/dist/gateway/hooks.js +7 -5
  297. package/dist/gateway/http-utils.js +5 -3
  298. package/dist/gateway/net.js +1 -1
  299. package/dist/gateway/openai-http.js +3 -3
  300. package/dist/gateway/openresponses-http.js +4 -4
  301. package/dist/gateway/protocol/client-info.js +5 -5
  302. package/dist/gateway/protocol/schema/logs-chat.js +1 -1
  303. package/dist/gateway/server/health-state.js +3 -3
  304. package/dist/gateway/server/hooks.js +0 -1
  305. package/dist/gateway/server/ws-connection/message-handler.js +35 -44
  306. package/dist/gateway/server-browser.js +3 -14
  307. package/dist/gateway/server-chat.js +2 -28
  308. package/dist/gateway/server-discovery-runtime.js +17 -25
  309. package/dist/gateway/server-discovery.js +5 -5
  310. package/dist/gateway/server-http.js +3 -9
  311. package/dist/gateway/server-methods/agent.js +0 -2
  312. package/dist/gateway/server-methods/chat.js +0 -5
  313. package/dist/gateway/server-methods/config.js +8 -8
  314. package/dist/gateway/server-methods/logs.js +1 -1
  315. package/dist/gateway/server-methods/skills.js +3 -3
  316. package/dist/gateway/server-methods/update.js +2 -2
  317. package/dist/gateway/server-methods-list.js +0 -1
  318. package/dist/gateway/server-methods.js +0 -3
  319. package/dist/gateway/server-plugins.js +2 -2
  320. package/dist/gateway/server-restart-sentinel.js +5 -10
  321. package/dist/gateway/server-runtime-config.js +2 -5
  322. package/dist/gateway/server.impl.js +6 -7
  323. package/dist/gateway/session-utils.js +11 -31
  324. package/dist/gateway/test-helpers.mocks.js +5 -5
  325. package/dist/gateway/test-helpers.server.js +9 -28
  326. package/dist/gateway/tools-invoke-http.js +8 -15
  327. package/dist/hooks/bundled/boot-md/HOOK.md +3 -3
  328. package/dist/hooks/bundled/command-logger/HOOK.md +5 -5
  329. package/dist/hooks/bundled/session-memory/HOOK.md +4 -4
  330. package/dist/hooks/bundled/session-memory/handler.js +2 -2
  331. package/dist/hooks/bundled/soul-evil/HOOK.md +5 -5
  332. package/dist/hooks/bundled-dir.js +1 -1
  333. package/dist/hooks/config.js +7 -8
  334. package/dist/hooks/frontmatter.js +15 -16
  335. package/dist/hooks/gmail-ops.js +4 -4
  336. package/dist/hooks/hooks-status.js +13 -13
  337. package/dist/hooks/install.js +7 -8
  338. package/dist/hooks/internal-hooks.js +1 -1
  339. package/dist/hooks/llm-slug-generator.js +1 -1
  340. package/dist/hooks/loader.js +3 -3
  341. package/dist/hooks/plugin-hooks.js +8 -8
  342. package/dist/hooks/workspace.js +9 -10
  343. package/dist/imessage/monitor/monitor-provider.js +2 -2
  344. package/dist/index.js +4 -4
  345. package/dist/infra/agent-events.js +0 -3
  346. package/dist/infra/bonjour-discovery.js +9 -9
  347. package/dist/infra/bonjour.js +12 -19
  348. package/dist/infra/gateway-lock.js +1 -1
  349. package/dist/infra/heartbeat-visibility.js +0 -14
  350. package/dist/infra/heartbeat-wake.js +2 -2
  351. package/dist/infra/machine-name.js +1 -1
  352. package/dist/infra/net/ssrf.js +1 -77
  353. package/dist/infra/outbound/message-action-spec.js +0 -1
  354. package/dist/infra/outbound/targets.js +1 -1
  355. package/dist/infra/path-env.js +7 -7
  356. package/dist/infra/ports-format.js +2 -2
  357. package/dist/infra/ports.js +2 -2
  358. package/dist/infra/provider-usage.auth.js +4 -2
  359. package/dist/infra/provider-usage.fetch.claude.js +1 -1
  360. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  361. package/dist/infra/restart-sentinel.js +1 -1
  362. package/dist/infra/restart.js +1 -1
  363. package/dist/infra/retry-policy.js +1 -4
  364. package/dist/infra/runtime-guard.js +2 -2
  365. package/dist/infra/shell-env.js +1 -1
  366. package/dist/infra/skills-remote.js +3 -3
  367. package/dist/infra/tailscale.js +1 -63
  368. package/dist/infra/tls/gateway.js +1 -1
  369. package/dist/infra/unhandled-rejections.js +2 -89
  370. package/dist/infra/update-check.js +4 -2
  371. package/dist/infra/update-global.js +5 -5
  372. package/dist/infra/update-runner.js +8 -32
  373. package/dist/infra/update-startup.js +3 -3
  374. package/dist/infra/warnings.js +1 -1
  375. package/dist/infra/widearea-dns.js +10 -10
  376. package/dist/line/monitor.js +5 -1
  377. package/dist/line/webhook.js +6 -2
  378. package/dist/logging/logger.js +4 -4
  379. package/dist/macos/gateway-daemon.js +2 -2
  380. package/dist/macos/relay.js +4 -4
  381. package/dist/media/host.js +1 -1
  382. package/dist/media/image-ops.js +1 -1
  383. package/dist/media/input-files.js +32 -40
  384. package/dist/media/server.js +15 -39
  385. package/dist/media/store.js +52 -72
  386. package/dist/media-understanding/attachments.js +1 -1
  387. package/dist/media-understanding/providers/image.js +2 -2
  388. package/dist/media-understanding/runner.js +1 -33
  389. package/dist/memory/batch-gemini.js +1 -1
  390. package/dist/memory/batch-openai.js +1 -1
  391. package/dist/memory/embeddings.js +1 -1
  392. package/dist/node-host/runner.js +56 -60
  393. package/dist/pairing/pairing-messages.js +2 -2
  394. package/dist/plugin-sdk/index.js +0 -1
  395. package/dist/plugins/cli.js +2 -2
  396. package/dist/plugins/discovery.js +4 -5
  397. package/dist/plugins/install.js +7 -8
  398. package/dist/plugins/loader.js +4 -11
  399. package/dist/plugins/manifest-registry.js +2 -2
  400. package/dist/plugins/manifest.js +1 -16
  401. package/dist/plugins/providers.js +2 -2
  402. package/dist/plugins/registry.js +5 -5
  403. package/dist/plugins/runtime.js +1 -1
  404. package/dist/plugins/services.js +3 -3
  405. package/dist/plugins/status.js +2 -2
  406. package/dist/plugins/tools.js +2 -2
  407. package/dist/plugins/update.js +3 -3
  408. package/dist/providers/qwen-portal-oauth.js +1 -1
  409. package/dist/routing/session-key.js +12 -17
  410. package/dist/security/audit-extra.js +69 -116
  411. package/dist/security/audit-fs.js +0 -78
  412. package/dist/security/audit.js +88 -121
  413. package/dist/security/fix.js +8 -93
  414. package/dist/slack/monitor/media.js +4 -32
  415. package/dist/slack/monitor/message-handler/dispatch.js +1 -2
  416. package/dist/slack/monitor/slash.js +3 -3
  417. package/dist/slack/monitor.test-helpers.js +1 -1
  418. package/dist/telegram/bot/delivery.js +22 -139
  419. package/dist/telegram/bot-handlers.js +8 -70
  420. package/dist/telegram/bot-message-context.js +21 -79
  421. package/dist/telegram/bot-message-dispatch.js +0 -64
  422. package/dist/telegram/bot-native-commands.js +94 -244
  423. package/dist/telegram/bot.js +2 -18
  424. package/dist/telegram/fetch.js +1 -25
  425. package/dist/telegram/monitor.js +3 -11
  426. package/dist/telegram/send.js +4 -148
  427. package/dist/telegram/webhook-set.js +6 -13
  428. package/dist/telegram/webhook.js +3 -8
  429. package/dist/terminal/links.js +1 -1
  430. package/dist/tts/tts.js +22 -27
  431. package/dist/tui/components/filterable-select-list.js +1 -1
  432. package/dist/tui/components/searchable-select-list.js +1 -2
  433. package/dist/tui/gateway-chat.js +1 -1
  434. package/dist/tui/tui.js +1 -1
  435. package/dist/version.js +1 -1
  436. package/dist/web/active-listener.js +1 -1
  437. package/dist/web/auth-store.js +1 -1
  438. package/dist/web/auto-reply/monitor/process-message.js +1 -1
  439. package/dist/web/auto-reply/monitor.js +1 -1
  440. package/dist/web/login.js +1 -1
  441. package/dist/web/session.js +2 -2
  442. package/dist/wizard/onboarding.finalize.js +14 -14
  443. package/dist/wizard/onboarding.gateway-config.js +11 -1
  444. package/dist/wizard/onboarding.js +10 -21
  445. package/docs/CNAME +1 -1
  446. package/docs/POOL-BOT.md +119 -0
  447. package/docs/_config.yml +2 -2
  448. package/docs/_layouts/default.html +9 -9
  449. package/docs/assets/terminal.css +0 -3
  450. package/docs/assets/theme.js +1 -1
  451. package/docs/automation/auth-monitoring.md +7 -7
  452. package/docs/automation/cron-jobs.md +13 -13
  453. package/docs/automation/cron-vs-heartbeat.md +8 -8
  454. package/docs/automation/gmail-pubsub.md +21 -23
  455. package/docs/automation/poll.md +6 -6
  456. package/docs/automation/webhook.md +8 -13
  457. package/docs/bedrock.md +10 -10
  458. package/docs/brave-search.md +1 -1
  459. package/docs/broadcast-groups.md +3 -3
  460. package/docs/channels/bluebubbles.md +12 -13
  461. package/docs/channels/discord.md +16 -21
  462. package/docs/channels/googlechat.md +15 -15
  463. package/docs/channels/imessage.md +10 -10
  464. package/docs/channels/index.md +4 -6
  465. package/docs/channels/location.md +1 -1
  466. package/docs/channels/matrix.md +13 -13
  467. package/docs/channels/mattermost.md +8 -8
  468. package/docs/channels/msteams.md +25 -29
  469. package/docs/channels/nextcloud-talk.md +7 -7
  470. package/docs/channels/nostr.md +9 -9
  471. package/docs/channels/signal.md +9 -9
  472. package/docs/channels/slack.md +13 -15
  473. package/docs/channels/telegram.md +20 -149
  474. package/docs/channels/tlon.md +5 -5
  475. package/docs/channels/troubleshooting.md +2 -2
  476. package/docs/channels/whatsapp.md +23 -23
  477. package/docs/channels/zalo.md +8 -8
  478. package/docs/channels/zalouser.md +12 -12
  479. package/docs/cli/acp.md +24 -24
  480. package/docs/cli/agent.md +6 -6
  481. package/docs/cli/agents.md +9 -9
  482. package/docs/cli/approvals.md +13 -13
  483. package/docs/cli/browser.md +35 -33
  484. package/docs/cli/channels.md +21 -21
  485. package/docs/cli/config.md +15 -15
  486. package/docs/cli/configure.md +6 -6
  487. package/docs/cli/cron.md +5 -5
  488. package/docs/cli/dashboard.md +4 -4
  489. package/docs/cli/devices.md +13 -13
  490. package/docs/cli/directory.md +12 -12
  491. package/docs/cli/dns.md +5 -5
  492. package/docs/cli/docs.md +5 -5
  493. package/docs/cli/doctor.md +6 -6
  494. package/docs/cli/gateway.md +24 -24
  495. package/docs/cli/health.md +5 -5
  496. package/docs/cli/hooks.md +28 -28
  497. package/docs/cli/index.md +50 -44
  498. package/docs/cli/logs.md +6 -6
  499. package/docs/cli/memory.md +11 -11
  500. package/docs/cli/message.md +11 -11
  501. package/docs/cli/models.md +17 -17
  502. package/docs/cli/node.md +12 -12
  503. package/docs/cli/nodes.md +14 -14
  504. package/docs/cli/onboard.md +6 -7
  505. package/docs/cli/pairing.md +4 -4
  506. package/docs/cli/plugins.md +16 -16
  507. package/docs/cli/reset.md +5 -5
  508. package/docs/cli/sandbox.md +28 -28
  509. package/docs/cli/security.md +5 -5
  510. package/docs/cli/sessions.md +5 -5
  511. package/docs/cli/setup.md +6 -6
  512. package/docs/cli/skills.md +6 -6
  513. package/docs/cli/status.md +7 -7
  514. package/docs/cli/system.md +6 -6
  515. package/docs/cli/tui.md +5 -5
  516. package/docs/cli/uninstall.md +5 -5
  517. package/docs/cli/update.md +20 -20
  518. package/docs/cli/voicecall.md +9 -9
  519. package/docs/cli/webhooks.md +5 -5
  520. package/docs/concepts/agent-loop.md +5 -5
  521. package/docs/concepts/agent-workspace.md +11 -11
  522. package/docs/concepts/agent.md +10 -10
  523. package/docs/concepts/architecture.md +1 -1
  524. package/docs/concepts/channel-routing.md +2 -2
  525. package/docs/concepts/compaction.md +5 -5
  526. package/docs/concepts/context.md +6 -6
  527. package/docs/concepts/group-messages.md +5 -5
  528. package/docs/concepts/groups.md +5 -41
  529. package/docs/concepts/markdown-formatting.md +3 -3
  530. package/docs/concepts/memory.md +12 -12
  531. package/docs/concepts/messages.md +4 -4
  532. package/docs/concepts/model-failover.md +11 -11
  533. package/docs/concepts/model-providers.md +22 -22
  534. package/docs/concepts/models.md +26 -26
  535. package/docs/concepts/multi-agent.md +5 -5
  536. package/docs/concepts/oauth.md +55 -28
  537. package/docs/concepts/presence.md +2 -2
  538. package/docs/concepts/retry.md +1 -1
  539. package/docs/concepts/session-pruning.md +1 -1
  540. package/docs/concepts/session-tool.md +4 -4
  541. package/docs/concepts/session.md +11 -11
  542. package/docs/concepts/streaming.md +3 -3
  543. package/docs/concepts/system-prompt.md +11 -11
  544. package/docs/concepts/timezone.md +2 -2
  545. package/docs/concepts/typebox.md +2 -2
  546. package/docs/concepts/typing-indicators.md +2 -2
  547. package/docs/concepts/usage-tracking.md +3 -3
  548. package/docs/date-time.md +2 -2
  549. package/docs/debug/node-issue.md +4 -4
  550. package/docs/debugging.md +9 -9
  551. package/docs/diagnostics/flags.md +5 -5
  552. package/docs/docs.json +7 -37
  553. package/docs/environment.md +3 -3
  554. package/docs/experiments/plans/cron-add-hardening.md +1 -1
  555. package/docs/experiments/plans/openresponses-gateway.md +2 -2
  556. package/docs/experiments/research/memory.md +6 -6
  557. package/docs/gateway/authentication.md +54 -30
  558. package/docs/gateway/background-process.md +1 -1
  559. package/docs/gateway/bonjour.md +21 -21
  560. package/docs/gateway/bridge-protocol.md +2 -2
  561. package/docs/gateway/cli-backends.md +12 -13
  562. package/docs/gateway/configuration-examples.md +10 -10
  563. package/docs/gateway/configuration.md +107 -120
  564. package/docs/gateway/discovery.md +6 -6
  565. package/docs/gateway/doctor.md +21 -21
  566. package/docs/gateway/gateway-lock.md +1 -1
  567. package/docs/gateway/health.md +9 -9
  568. package/docs/gateway/heartbeat.md +5 -5
  569. package/docs/gateway/index.md +51 -51
  570. package/docs/gateway/local-models.md +2 -2
  571. package/docs/gateway/logging.md +8 -8
  572. package/docs/gateway/multiple-gateways.md +19 -19
  573. package/docs/gateway/openai-http-api.md +10 -10
  574. package/docs/gateway/openresponses-http-api.md +10 -10
  575. package/docs/gateway/pairing.md +5 -5
  576. package/docs/gateway/protocol.md +4 -5
  577. package/docs/gateway/remote-gateway-readme.md +8 -8
  578. package/docs/gateway/remote.md +4 -4
  579. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +7 -10
  580. package/docs/gateway/sandboxing.md +5 -7
  581. package/docs/gateway/{security/index.md → security.md} +63 -143
  582. package/docs/gateway/tailscale.md +35 -16
  583. package/docs/gateway/tools-invoke-http-api.md +3 -3
  584. package/docs/gateway/troubleshooting.md +106 -101
  585. package/docs/help/faq.md +312 -303
  586. package/docs/help/troubleshooting.md +15 -15
  587. package/docs/hooks/soul-evil.md +2 -2
  588. package/docs/hooks.md +44 -44
  589. package/docs/index.md +33 -33
  590. package/docs/install/ansible.md +35 -35
  591. package/docs/install/development-channels.md +10 -10
  592. package/docs/install/docker.md +27 -27
  593. package/docs/install/index.md +27 -28
  594. package/docs/install/installer.md +21 -21
  595. package/docs/install/nix.md +16 -16
  596. package/docs/install/node.md +6 -7
  597. package/docs/install/uninstall.md +21 -21
  598. package/docs/install/updating.md +47 -48
  599. package/docs/logging.md +58 -58
  600. package/docs/multi-agent-sandbox-tools.md +5 -5
  601. package/docs/network.md +1 -1
  602. package/docs/nodes/audio.md +2 -2
  603. package/docs/nodes/camera.md +18 -18
  604. package/docs/nodes/images.md +4 -4
  605. package/docs/nodes/index.md +50 -50
  606. package/docs/nodes/location-command.md +2 -2
  607. package/docs/nodes/media-understanding.md +5 -5
  608. package/docs/nodes/talk.md +1 -1
  609. package/docs/nodes/voicewake.md +1 -1
  610. package/docs/perplexity.md +2 -2
  611. package/docs/platforms/android.md +13 -13
  612. package/docs/platforms/exe-dev.md +23 -23
  613. package/docs/platforms/fly.md +18 -129
  614. package/docs/platforms/hetzner.md +20 -20
  615. package/docs/platforms/index.md +8 -8
  616. package/docs/platforms/ios.md +13 -13
  617. package/docs/platforms/linux.md +11 -11
  618. package/docs/platforms/mac/bundled-gateway.md +11 -11
  619. package/docs/platforms/mac/canvas.md +14 -14
  620. package/docs/platforms/mac/child-process.md +1 -1
  621. package/docs/platforms/mac/dev-setup.md +10 -10
  622. package/docs/platforms/mac/health.md +2 -2
  623. package/docs/platforms/mac/icon.md +1 -1
  624. package/docs/platforms/mac/logging.md +4 -4
  625. package/docs/platforms/mac/menu-bar.md +1 -1
  626. package/docs/platforms/mac/peekaboo.md +9 -9
  627. package/docs/platforms/mac/permissions.md +1 -1
  628. package/docs/platforms/mac/release.md +18 -18
  629. package/docs/platforms/mac/remote.md +14 -14
  630. package/docs/platforms/mac/signing.md +6 -6
  631. package/docs/platforms/mac/skills.md +2 -2
  632. package/docs/platforms/mac/webchat.md +1 -1
  633. package/docs/platforms/mac/xpc.md +4 -4
  634. package/docs/platforms/macos-vm.md +27 -27
  635. package/docs/platforms/macos.md +14 -14
  636. package/docs/platforms/windows.md +11 -11
  637. package/docs/plugin.md +57 -57
  638. package/docs/plugins/agent-tools.md +1 -1
  639. package/docs/plugins/manifest.md +4 -4
  640. package/docs/plugins/voice-call.md +12 -15
  641. package/docs/plugins/zalouser.md +9 -9
  642. package/docs/prose.md +9 -9
  643. package/docs/providers/anthropic.md +27 -23
  644. package/docs/providers/deepgram.md +2 -2
  645. package/docs/providers/github-copilot.md +11 -11
  646. package/docs/providers/glm.md +4 -4
  647. package/docs/providers/index.md +3 -7
  648. package/docs/providers/minimax.md +9 -9
  649. package/docs/providers/models.md +3 -3
  650. package/docs/providers/moonshot.md +2 -2
  651. package/docs/providers/ollama.md +11 -11
  652. package/docs/providers/openai.md +13 -9
  653. package/docs/providers/opencode.md +3 -3
  654. package/docs/providers/openrouter.md +3 -3
  655. package/docs/providers/qwen.md +6 -6
  656. package/docs/providers/synthetic.md +4 -4
  657. package/docs/providers/venice.md +21 -21
  658. package/docs/providers/vercel-ai-gateway.md +3 -4
  659. package/docs/providers/zai.md +5 -5
  660. package/docs/railway.mdx +5 -5
  661. package/docs/refactor/plugin-sdk.md +10 -10
  662. package/docs/refactor/strict-config.md +11 -11
  663. package/docs/reference/AGENTS.default.md +10 -10
  664. package/docs/reference/RELEASING.md +27 -27
  665. package/docs/reference/api-usage-costs.md +6 -6
  666. package/docs/reference/device-models.md +7 -7
  667. package/docs/reference/rpc.md +3 -3
  668. package/docs/reference/session-management-compaction.md +17 -17
  669. package/docs/reference/templates/AGENTS.dev.md +1 -1
  670. package/docs/reference/templates/BOOT.md +1 -1
  671. package/docs/reference/templates/TOOLS.dev.md +1 -1
  672. package/docs/reference/templates/USER.dev.md +2 -2
  673. package/docs/reference/test.md +2 -2
  674. package/docs/reference/transcript-hygiene.md +1 -1
  675. package/docs/scripts.md +1 -1
  676. package/docs/start/clawd.md +27 -27
  677. package/docs/start/getting-started.md +23 -29
  678. package/docs/start/hubs.md +2 -2
  679. package/docs/start/lore.md +38 -74
  680. package/docs/start/onboarding.md +4 -4
  681. package/docs/start/pairing.md +8 -8
  682. package/docs/start/setup.md +15 -28
  683. package/docs/start/showcase.md +32 -32
  684. package/docs/start/wizard.md +21 -24
  685. package/docs/testing.md +10 -10
  686. package/docs/token-use.md +7 -7
  687. package/docs/tools/agent-send.md +10 -10
  688. package/docs/tools/browser-linux-troubleshooting.md +8 -8
  689. package/docs/tools/browser-login.md +4 -4
  690. package/docs/tools/browser.md +241 -135
  691. package/docs/tools/chrome-extension.md +48 -31
  692. package/docs/tools/clawdhub.md +7 -7
  693. package/docs/tools/creating-skills.md +4 -4
  694. package/docs/tools/elevated.md +0 -1
  695. package/docs/tools/exec-approvals.md +2 -5
  696. package/docs/tools/exec.md +3 -14
  697. package/docs/tools/firecrawl.md +2 -2
  698. package/docs/tools/index.md +15 -18
  699. package/docs/tools/llm-task.md +1 -1
  700. package/docs/tools/lobster.md +11 -23
  701. package/docs/tools/skills-config.md +1 -1
  702. package/docs/tools/skills.md +21 -29
  703. package/docs/tools/slash-commands.md +8 -10
  704. package/docs/tools/web.md +6 -6
  705. package/docs/tts.md +9 -9
  706. package/docs/tui.md +7 -7
  707. package/docs/vps.md +1 -6
  708. package/docs/web/control-ui.md +12 -13
  709. package/docs/web/dashboard.md +4 -8
  710. package/docs/web/index.md +5 -6
  711. package/docs/web/webchat.md +1 -1
  712. package/extensions/bluebubbles/index.ts +2 -2
  713. package/extensions/bluebubbles/package.json +5 -5
  714. package/extensions/bluebubbles/src/accounts.ts +8 -8
  715. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  716. package/extensions/bluebubbles/src/actions.ts +5 -5
  717. package/extensions/bluebubbles/src/attachments.ts +2 -2
  718. package/extensions/bluebubbles/src/channel.ts +16 -16
  719. package/extensions/bluebubbles/src/chat.ts +2 -2
  720. package/extensions/bluebubbles/src/media-send.ts +2 -2
  721. package/extensions/bluebubbles/src/monitor.test.ts +49 -55
  722. package/extensions/bluebubbles/src/monitor.ts +5 -180
  723. package/extensions/bluebubbles/src/onboarding.ts +7 -7
  724. package/extensions/bluebubbles/src/reactions.ts +2 -2
  725. package/extensions/bluebubbles/src/send.ts +2 -2
  726. package/extensions/copilot-proxy/package.json +4 -4
  727. package/extensions/diagnostics-otel/index.ts +2 -2
  728. package/extensions/diagnostics-otel/package.json +4 -4
  729. package/extensions/diagnostics-otel/src/service.test.ts +12 -12
  730. package/extensions/diagnostics-otel/src/service.ts +84 -84
  731. package/extensions/discord/index.ts +2 -2
  732. package/extensions/discord/package.json +4 -4
  733. package/extensions/google-antigravity-auth/index.ts +1 -8
  734. package/extensions/google-antigravity-auth/package.json +4 -4
  735. package/extensions/google-gemini-cli-auth/oauth.ts +2 -2
  736. package/extensions/google-gemini-cli-auth/package.json +4 -4
  737. package/extensions/googlechat/index.ts +3 -3
  738. package/extensions/googlechat/package.json +7 -7
  739. package/extensions/googlechat/src/accounts.ts +8 -8
  740. package/extensions/googlechat/src/actions.ts +6 -6
  741. package/extensions/googlechat/src/api.ts +1 -1
  742. package/extensions/googlechat/src/channel.ts +21 -21
  743. package/extensions/googlechat/src/monitor.ts +8 -8
  744. package/extensions/googlechat/src/onboarding.ts +10 -10
  745. package/extensions/imessage/index.ts +2 -2
  746. package/extensions/imessage/package.json +4 -4
  747. package/extensions/line/index.ts +2 -2
  748. package/extensions/line/package.json +6 -6
  749. package/extensions/line/src/card-command.ts +2 -2
  750. package/extensions/line/src/channel.logout.test.ts +4 -4
  751. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  752. package/extensions/line/src/channel.ts +4 -4
  753. package/extensions/llm-task/index.ts +2 -2
  754. package/extensions/llm-task/package.json +4 -4
  755. package/extensions/llm-task/src/llm-task-tool.ts +5 -5
  756. package/extensions/lobster/index.ts +2 -2
  757. package/extensions/lobster/package.json +3 -3
  758. package/extensions/lobster/src/lobster-tool.test.ts +6 -26
  759. package/extensions/lobster/src/lobster-tool.ts +6 -24
  760. package/extensions/matrix/CHANGELOG.md +9 -9
  761. package/extensions/matrix/index.ts +2 -2
  762. package/extensions/matrix/package.json +7 -7
  763. package/extensions/matrix/src/matrix/actions/messages.ts +1 -1
  764. package/extensions/matrix/src/matrix/actions/reactions.ts +1 -1
  765. package/extensions/matrix/src/matrix/actions/room.ts +3 -3
  766. package/extensions/matrix/src/matrix/actions/summary.ts +1 -1
  767. package/extensions/matrix/src/matrix/actions/types.ts +1 -1
  768. package/extensions/matrix/src/matrix/active-client.ts +1 -1
  769. package/extensions/matrix/src/matrix/client/config.ts +2 -2
  770. package/extensions/matrix/src/matrix/client/create-client.ts +2 -2
  771. package/extensions/matrix/src/matrix/client/logging.ts +1 -1
  772. package/extensions/matrix/src/matrix/client/shared.ts +3 -3
  773. package/extensions/matrix/src/matrix/deps.ts +4 -4
  774. package/extensions/matrix/src/matrix/monitor/auto-join.ts +2 -2
  775. package/extensions/matrix/src/matrix/monitor/direct.ts +1 -1
  776. package/extensions/matrix/src/matrix/monitor/events.ts +1 -1
  777. package/extensions/matrix/src/matrix/monitor/handler.ts +5 -5
  778. package/extensions/matrix/src/matrix/monitor/index.ts +1 -1
  779. package/extensions/matrix/src/matrix/monitor/location.ts +1 -1
  780. package/extensions/matrix/src/matrix/monitor/media.test.ts +2 -2
  781. package/extensions/matrix/src/matrix/monitor/media.ts +3 -3
  782. package/extensions/matrix/src/matrix/monitor/replies.ts +1 -1
  783. package/extensions/matrix/src/matrix/monitor/room-info.ts +1 -1
  784. package/extensions/matrix/src/matrix/monitor/threads.ts +1 -1
  785. package/extensions/matrix/src/matrix/monitor/types.ts +1 -1
  786. package/extensions/matrix/src/matrix/probe.ts +1 -1
  787. package/extensions/matrix/src/matrix/send/client.ts +2 -2
  788. package/extensions/matrix/src/matrix/send/media.ts +1 -1
  789. package/extensions/matrix/src/matrix/send/targets.test.ts +1 -1
  790. package/extensions/matrix/src/matrix/send/targets.ts +1 -1
  791. package/extensions/matrix/src/matrix/send/types.ts +2 -2
  792. package/extensions/matrix/src/matrix/send.test.ts +2 -2
  793. package/extensions/matrix/src/matrix/send.ts +3 -3
  794. package/extensions/matrix/src/onboarding.ts +2 -2
  795. package/extensions/matrix/src/types.ts +1 -1
  796. package/extensions/mattermost/index.ts +2 -2
  797. package/extensions/mattermost/package.json +5 -5
  798. package/extensions/mattermost/src/mattermost/accounts.ts +8 -8
  799. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  800. package/extensions/mattermost/src/mattermost/monitor.ts +2 -2
  801. package/extensions/mattermost/src/onboarding-helpers.ts +3 -3
  802. package/extensions/mattermost/src/onboarding.ts +3 -3
  803. package/extensions/memory-core/index.ts +2 -2
  804. package/extensions/memory-core/package.json +5 -5
  805. package/extensions/memory-lancedb/index.test.ts +2 -2
  806. package/extensions/memory-lancedb/index.ts +3 -3
  807. package/extensions/memory-lancedb/package.json +4 -4
  808. package/extensions/msteams/CHANGELOG.md +7 -7
  809. package/extensions/msteams/index.ts +2 -2
  810. package/extensions/msteams/package.json +6 -6
  811. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  812. package/extensions/msteams/src/channel.ts +2 -2
  813. package/extensions/msteams/src/conversation-store-fs.test.ts +1 -1
  814. package/extensions/msteams/src/graph-upload.ts +4 -4
  815. package/extensions/msteams/src/monitor-handler.ts +2 -2
  816. package/extensions/msteams/src/monitor.ts +2 -2
  817. package/extensions/msteams/src/onboarding.ts +9 -9
  818. package/extensions/msteams/src/policy.ts +3 -48
  819. package/extensions/msteams/src/polls-store.test.ts +1 -1
  820. package/extensions/msteams/src/polls.test.ts +2 -2
  821. package/extensions/msteams/src/polls.ts +8 -8
  822. package/extensions/msteams/src/reply-dispatcher.ts +35 -35
  823. package/extensions/msteams/src/send-context.ts +2 -2
  824. package/extensions/msteams/src/send.ts +4 -4
  825. package/extensions/nextcloud-talk/index.ts +2 -2
  826. package/extensions/nextcloud-talk/package.json +5 -5
  827. package/extensions/nextcloud-talk/src/channel.ts +7 -7
  828. package/extensions/nextcloud-talk/src/inbound.ts +7 -7
  829. package/extensions/nextcloud-talk/src/onboarding.ts +1 -1
  830. package/extensions/nostr/CHANGELOG.md +4 -4
  831. package/extensions/nostr/index.ts +5 -5
  832. package/extensions/nostr/package.json +6 -6
  833. package/extensions/nostr/src/channel.ts +1 -1
  834. package/extensions/nostr/src/nostr-state-store.test.ts +1 -1
  835. package/extensions/nostr/src/types.ts +4 -4
  836. package/extensions/open-prose/index.ts +2 -2
  837. package/extensions/open-prose/package.json +3 -3
  838. package/extensions/open-prose/skills/prose/SKILL.md +5 -5
  839. package/extensions/open-prose/skills/prose/prose.md +4 -4
  840. package/extensions/signal/index.ts +2 -2
  841. package/extensions/signal/package.json +4 -4
  842. package/extensions/slack/index.ts +2 -2
  843. package/extensions/slack/package.json +4 -4
  844. package/extensions/telegram/index.ts +2 -2
  845. package/extensions/telegram/package.json +4 -4
  846. package/extensions/telegram/src/channel.ts +2 -2
  847. package/extensions/tlon/README.md +1 -1
  848. package/extensions/tlon/index.ts +2 -2
  849. package/extensions/tlon/package.json +5 -5
  850. package/extensions/tlon/src/channel.ts +13 -13
  851. package/extensions/tlon/src/monitor/index.ts +3 -3
  852. package/extensions/tlon/src/onboarding.ts +3 -3
  853. package/extensions/tlon/src/types.ts +3 -3
  854. package/extensions/tlon/src/urbit/send.ts +6 -19
  855. package/extensions/voice-call/CHANGELOG.md +12 -13
  856. package/extensions/voice-call/README.md +2 -3
  857. package/extensions/voice-call/clawdbot.plugin.json +3 -3
  858. package/extensions/voice-call/index.ts +9 -11
  859. package/extensions/voice-call/package.json +4 -4
  860. package/extensions/voice-call/src/cli.ts +1 -1
  861. package/extensions/voice-call/src/config.ts +4 -61
  862. package/extensions/voice-call/src/core-bridge.ts +8 -10
  863. package/extensions/voice-call/src/manager.test.ts +2 -2
  864. package/extensions/voice-call/src/providers/twilio/webhook.ts +1 -2
  865. package/extensions/voice-call/src/providers/twilio.ts +2 -2
  866. package/extensions/voice-call/src/response-generator.ts +1 -1
  867. package/extensions/voice-call/src/runtime.ts +15 -26
  868. package/extensions/voice-call/src/types.ts +0 -1
  869. package/extensions/voice-call/src/webhook-security.test.ts +0 -52
  870. package/extensions/voice-call/src/webhook-security.ts +5 -16
  871. package/extensions/voice-call/src/webhook.ts +0 -1
  872. package/extensions/whatsapp/index.ts +2 -2
  873. package/extensions/whatsapp/package.json +4 -4
  874. package/extensions/zalo/CHANGELOG.md +9 -9
  875. package/extensions/zalo/index.ts +2 -2
  876. package/extensions/zalo/package.json +6 -6
  877. package/extensions/zalo/src/accounts.ts +8 -8
  878. package/extensions/zalo/src/actions.ts +4 -4
  879. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  880. package/extensions/zalo/src/channel.ts +18 -18
  881. package/extensions/zalo/src/monitor.ts +9 -9
  882. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  883. package/extensions/zalo/src/onboarding.ts +25 -25
  884. package/extensions/zalo/src/send.ts +2 -2
  885. package/extensions/zalouser/CHANGELOG.md +4 -4
  886. package/extensions/zalouser/index.ts +2 -2
  887. package/extensions/zalouser/package.json +6 -6
  888. package/extensions/zalouser/src/accounts.ts +9 -9
  889. package/extensions/zalouser/src/channel.ts +25 -25
  890. package/extensions/zalouser/src/monitor.ts +4 -4
  891. package/extensions/zalouser/src/onboarding.ts +30 -30
  892. package/extensions/zalouser/src/status-issues.ts +1 -1
  893. package/package.json +18 -17
  894. package/skills/1password/SKILL.md +3 -3
  895. package/skills/apple-notes/SKILL.md +2 -2
  896. package/skills/apple-reminders/SKILL.md +1 -1
  897. package/skills/bear-notes/SKILL.md +1 -1
  898. package/skills/bird/SKILL.md +1 -1
  899. package/skills/blogwatcher/SKILL.md +1 -1
  900. package/skills/blucli/SKILL.md +1 -1
  901. package/skills/bluebubbles/SKILL.md +1 -1
  902. package/skills/camsnap/SKILL.md +1 -1
  903. package/skills/canvas/SKILL.md +15 -15
  904. package/skills/clawdhub/SKILL.md +2 -2
  905. package/skills/coding-agent/SKILL.md +6 -6
  906. package/skills/discord/SKILL.md +5 -6
  907. package/skills/eightctl/SKILL.md +1 -1
  908. package/skills/food-order/SKILL.md +1 -1
  909. package/skills/gemini/SKILL.md +1 -1
  910. package/skills/gifgrep/SKILL.md +1 -1
  911. package/skills/github/SKILL.md +0 -1
  912. package/skills/gog/SKILL.md +1 -1
  913. package/skills/goplaces/SKILL.md +1 -1
  914. package/skills/himalaya/SKILL.md +1 -1
  915. package/skills/imsg/SKILL.md +1 -1
  916. package/skills/local-places/SKILL.md +1 -1
  917. package/skills/mcporter/SKILL.md +1 -1
  918. package/skills/model-usage/SKILL.md +1 -1
  919. package/skills/nano-banana-pro/SKILL.md +5 -10
  920. package/skills/nano-banana-pro/scripts/generate_image.py +27 -42
  921. package/skills/nano-pdf/SKILL.md +1 -1
  922. package/skills/notion/SKILL.md +1 -1
  923. package/skills/obsidian/SKILL.md +1 -1
  924. package/skills/openai-image-gen/SKILL.md +1 -1
  925. package/skills/openai-whisper/SKILL.md +1 -1
  926. package/skills/openai-whisper-api/SKILL.md +2 -2
  927. package/skills/openhue/SKILL.md +1 -1
  928. package/skills/oracle/SKILL.md +1 -1
  929. package/skills/ordercli/SKILL.md +1 -1
  930. package/skills/peekaboo/SKILL.md +1 -1
  931. package/skills/sag/SKILL.md +1 -1
  932. package/skills/session-logs/SKILL.md +1 -1
  933. package/skills/sherpa-onnx-tts/SKILL.md +2 -2
  934. package/skills/slack/SKILL.md +3 -4
  935. package/skills/songsee/SKILL.md +1 -1
  936. package/skills/sonoscli/SKILL.md +1 -1
  937. package/skills/spotify-player/SKILL.md +1 -1
  938. package/skills/summarize/SKILL.md +1 -1
  939. package/skills/things-mac/SKILL.md +3 -3
  940. package/skills/tmux/SKILL.md +7 -7
  941. package/skills/tmux/scripts/find-sessions.sh +1 -1
  942. package/skills/trello/SKILL.md +2 -2
  943. package/skills/video-frames/SKILL.md +1 -1
  944. package/skills/voice-call/SKILL.md +4 -4
  945. package/skills/wacli/SKILL.md +2 -2
  946. package/skills/weather/SKILL.md +1 -1
  947. package/LICENSE +0 -21
  948. package/dist/agents/moltbot-tools.js +0 -121
  949. package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +0 -20
  950. package/dist/browser/control-service.js +0 -72
  951. package/dist/browser/routes/dispatcher.js +0 -86
  952. package/dist/browser/routes/types.js +0 -1
  953. package/dist/cli/cli-name.js +0 -26
  954. package/dist/compat/legacy-names.js +0 -5
  955. package/dist/control-ui/assets/index-CIRDm-Lu.css +0 -1
  956. package/dist/control-ui/assets/index-HlBhZmfj.js.map +0 -1
  957. package/dist/discord/monitor/presence-cache.js +0 -38
  958. package/dist/gateway/server-methods/browser.js +0 -204
  959. package/dist/infra/fs-safe.js +0 -76
  960. package/dist/infra/moltbot-root.js +0 -57
  961. package/dist/line/signature.js +0 -11
  962. package/dist/security/external-content.js +0 -143
  963. package/dist/security/windows-acl.js +0 -162
  964. package/dist/telegram/api-logging.js +0 -24
  965. package/dist/telegram/network-config.js +0 -23
  966. package/dist/telegram/network-errors.js +0 -103
  967. package/dist/telegram/sticker-cache.js +0 -202
  968. package/docs/channels/line.md +0 -183
  969. package/docs/channels/twitch.md +0 -366
  970. package/docs/gateway/security/formal-verification.md +0 -107
  971. package/docs/install/migrating.md +0 -190
  972. package/docs/northflank.mdx +0 -53
  973. package/docs/platforms/digitalocean.md +0 -243
  974. package/docs/platforms/gcp.md +0 -498
  975. package/docs/platforms/oracle.md +0 -291
  976. package/docs/platforms/raspberry-pi.md +0 -354
  977. package/docs/providers/claude-max-api-proxy.md +0 -145
  978. package/docs/render.mdx +0 -158
  979. package/docs/security/formal-verification.md +0 -107
  980. package/extensions/googlechat/node_modules/.bin/poolbot +0 -21
  981. package/extensions/line/node_modules/.bin/poolbot +0 -21
  982. package/extensions/matrix/node_modules/.bin/poolbot +0 -21
  983. package/extensions/memory-core/node_modules/.bin/poolbot +0 -21
  984. package/extensions/msteams/node_modules/.bin/poolbot +0 -21
  985. package/extensions/nostr/node_modules/.bin/poolbot +0 -21
  986. package/extensions/twitch/CHANGELOG.md +0 -21
  987. package/extensions/twitch/README.md +0 -89
  988. package/extensions/twitch/clawdbot.plugin.json +0 -9
  989. package/extensions/twitch/index.ts +0 -20
  990. package/extensions/twitch/node_modules/.bin/poolbot +0 -21
  991. package/extensions/twitch/package.json +0 -20
  992. package/extensions/twitch/src/access-control.test.ts +0 -489
  993. package/extensions/twitch/src/access-control.ts +0 -154
  994. package/extensions/twitch/src/actions.ts +0 -173
  995. package/extensions/twitch/src/client-manager-registry.ts +0 -115
  996. package/extensions/twitch/src/config-schema.ts +0 -82
  997. package/extensions/twitch/src/config.test.ts +0 -88
  998. package/extensions/twitch/src/config.ts +0 -116
  999. package/extensions/twitch/src/monitor.ts +0 -257
  1000. package/extensions/twitch/src/onboarding.test.ts +0 -311
  1001. package/extensions/twitch/src/onboarding.ts +0 -411
  1002. package/extensions/twitch/src/outbound.test.ts +0 -373
  1003. package/extensions/twitch/src/outbound.ts +0 -186
  1004. package/extensions/twitch/src/plugin.test.ts +0 -39
  1005. package/extensions/twitch/src/plugin.ts +0 -274
  1006. package/extensions/twitch/src/probe.test.ts +0 -198
  1007. package/extensions/twitch/src/probe.ts +0 -118
  1008. package/extensions/twitch/src/resolver.ts +0 -137
  1009. package/extensions/twitch/src/runtime.ts +0 -14
  1010. package/extensions/twitch/src/send.test.ts +0 -289
  1011. package/extensions/twitch/src/send.ts +0 -136
  1012. package/extensions/twitch/src/status.test.ts +0 -270
  1013. package/extensions/twitch/src/status.ts +0 -176
  1014. package/extensions/twitch/src/token.test.ts +0 -171
  1015. package/extensions/twitch/src/token.ts +0 -87
  1016. package/extensions/twitch/src/twitch-client.test.ts +0 -574
  1017. package/extensions/twitch/src/twitch-client.ts +0 -277
  1018. package/extensions/twitch/src/types.ts +0 -141
  1019. package/extensions/twitch/src/utils/markdown.ts +0 -92
  1020. package/extensions/twitch/src/utils/twitch.ts +0 -78
  1021. package/extensions/twitch/test/setup.ts +0 -7
  1022. package/extensions/voice-call/src/config.test.ts +0 -204
  1023. package/extensions/zalo/node_modules/.bin/poolbot +0 -21
  1024. package/extensions/zalouser/node_modules/.bin/poolbot +0 -21
@@ -2,15 +2,9 @@ import { fetchBrowserJson } from "./client-fetch.js";
2
2
  function buildProfileQuery(profile) {
3
3
  return profile ? `?profile=${encodeURIComponent(profile)}` : "";
4
4
  }
5
- function withBaseUrl(baseUrl, path) {
6
- const trimmed = baseUrl?.trim();
7
- if (!trimmed)
8
- return path;
9
- return `${trimmed.replace(/\/$/, "")}${path}`;
10
- }
11
5
  export async function browserNavigate(baseUrl, opts) {
12
6
  const q = buildProfileQuery(opts.profile);
13
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/navigate${q}`), {
7
+ return await fetchBrowserJson(`${baseUrl}/navigate${q}`, {
14
8
  method: "POST",
15
9
  headers: { "Content-Type": "application/json" },
16
10
  body: JSON.stringify({ url: opts.url, targetId: opts.targetId }),
@@ -19,7 +13,7 @@ export async function browserNavigate(baseUrl, opts) {
19
13
  }
20
14
  export async function browserArmDialog(baseUrl, opts) {
21
15
  const q = buildProfileQuery(opts.profile);
22
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/hooks/dialog${q}`), {
16
+ return await fetchBrowserJson(`${baseUrl}/hooks/dialog${q}`, {
23
17
  method: "POST",
24
18
  headers: { "Content-Type": "application/json" },
25
19
  body: JSON.stringify({
@@ -33,7 +27,7 @@ export async function browserArmDialog(baseUrl, opts) {
33
27
  }
34
28
  export async function browserArmFileChooser(baseUrl, opts) {
35
29
  const q = buildProfileQuery(opts.profile);
36
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/hooks/file-chooser${q}`), {
30
+ return await fetchBrowserJson(`${baseUrl}/hooks/file-chooser${q}`, {
37
31
  method: "POST",
38
32
  headers: { "Content-Type": "application/json" },
39
33
  body: JSON.stringify({
@@ -49,7 +43,7 @@ export async function browserArmFileChooser(baseUrl, opts) {
49
43
  }
50
44
  export async function browserWaitForDownload(baseUrl, opts) {
51
45
  const q = buildProfileQuery(opts.profile);
52
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/wait/download${q}`), {
46
+ return await fetchBrowserJson(`${baseUrl}/wait/download${q}`, {
53
47
  method: "POST",
54
48
  headers: { "Content-Type": "application/json" },
55
49
  body: JSON.stringify({
@@ -62,7 +56,7 @@ export async function browserWaitForDownload(baseUrl, opts) {
62
56
  }
63
57
  export async function browserDownload(baseUrl, opts) {
64
58
  const q = buildProfileQuery(opts.profile);
65
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/download${q}`), {
59
+ return await fetchBrowserJson(`${baseUrl}/download${q}`, {
66
60
  method: "POST",
67
61
  headers: { "Content-Type": "application/json" },
68
62
  body: JSON.stringify({
@@ -76,7 +70,7 @@ export async function browserDownload(baseUrl, opts) {
76
70
  }
77
71
  export async function browserAct(baseUrl, req, opts) {
78
72
  const q = buildProfileQuery(opts?.profile);
79
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/act${q}`), {
73
+ return await fetchBrowserJson(`${baseUrl}/act${q}`, {
80
74
  method: "POST",
81
75
  headers: { "Content-Type": "application/json" },
82
76
  body: JSON.stringify(req),
@@ -85,7 +79,7 @@ export async function browserAct(baseUrl, req, opts) {
85
79
  }
86
80
  export async function browserScreenshotAction(baseUrl, opts) {
87
81
  const q = buildProfileQuery(opts.profile);
88
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/screenshot${q}`), {
82
+ return await fetchBrowserJson(`${baseUrl}/screenshot${q}`, {
89
83
  method: "POST",
90
84
  headers: { "Content-Type": "application/json" },
91
85
  body: JSON.stringify({
@@ -2,12 +2,6 @@ import { fetchBrowserJson } from "./client-fetch.js";
2
2
  function buildProfileQuery(profile) {
3
3
  return profile ? `?profile=${encodeURIComponent(profile)}` : "";
4
4
  }
5
- function withBaseUrl(baseUrl, path) {
6
- const trimmed = baseUrl?.trim();
7
- if (!trimmed)
8
- return path;
9
- return `${trimmed.replace(/\/$/, "")}${path}`;
10
- }
11
5
  export async function browserConsoleMessages(baseUrl, opts = {}) {
12
6
  const q = new URLSearchParams();
13
7
  if (opts.level)
@@ -17,11 +11,11 @@ export async function browserConsoleMessages(baseUrl, opts = {}) {
17
11
  if (opts.profile)
18
12
  q.set("profile", opts.profile);
19
13
  const suffix = q.toString() ? `?${q.toString()}` : "";
20
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/console${suffix}`), { timeoutMs: 20000 });
14
+ return await fetchBrowserJson(`${baseUrl}/console${suffix}`, { timeoutMs: 20000 });
21
15
  }
22
16
  export async function browserPdfSave(baseUrl, opts = {}) {
23
17
  const q = buildProfileQuery(opts.profile);
24
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/pdf${q}`), {
18
+ return await fetchBrowserJson(`${baseUrl}/pdf${q}`, {
25
19
  method: "POST",
26
20
  headers: { "Content-Type": "application/json" },
27
21
  body: JSON.stringify({ targetId: opts.targetId }),
@@ -37,7 +31,7 @@ export async function browserPageErrors(baseUrl, opts = {}) {
37
31
  if (opts.profile)
38
32
  q.set("profile", opts.profile);
39
33
  const suffix = q.toString() ? `?${q.toString()}` : "";
40
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/errors${suffix}`), { timeoutMs: 20000 });
34
+ return await fetchBrowserJson(`${baseUrl}/errors${suffix}`, { timeoutMs: 20000 });
41
35
  }
42
36
  export async function browserRequests(baseUrl, opts = {}) {
43
37
  const q = new URLSearchParams();
@@ -50,11 +44,11 @@ export async function browserRequests(baseUrl, opts = {}) {
50
44
  if (opts.profile)
51
45
  q.set("profile", opts.profile);
52
46
  const suffix = q.toString() ? `?${q.toString()}` : "";
53
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/requests${suffix}`), { timeoutMs: 20000 });
47
+ return await fetchBrowserJson(`${baseUrl}/requests${suffix}`, { timeoutMs: 20000 });
54
48
  }
55
49
  export async function browserTraceStart(baseUrl, opts = {}) {
56
50
  const q = buildProfileQuery(opts.profile);
57
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/trace/start${q}`), {
51
+ return await fetchBrowserJson(`${baseUrl}/trace/start${q}`, {
58
52
  method: "POST",
59
53
  headers: { "Content-Type": "application/json" },
60
54
  body: JSON.stringify({
@@ -68,7 +62,7 @@ export async function browserTraceStart(baseUrl, opts = {}) {
68
62
  }
69
63
  export async function browserTraceStop(baseUrl, opts = {}) {
70
64
  const q = buildProfileQuery(opts.profile);
71
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/trace/stop${q}`), {
65
+ return await fetchBrowserJson(`${baseUrl}/trace/stop${q}`, {
72
66
  method: "POST",
73
67
  headers: { "Content-Type": "application/json" },
74
68
  body: JSON.stringify({ targetId: opts.targetId, path: opts.path }),
@@ -77,7 +71,7 @@ export async function browserTraceStop(baseUrl, opts = {}) {
77
71
  }
78
72
  export async function browserHighlight(baseUrl, opts) {
79
73
  const q = buildProfileQuery(opts.profile);
80
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/highlight${q}`), {
74
+ return await fetchBrowserJson(`${baseUrl}/highlight${q}`, {
81
75
  method: "POST",
82
76
  headers: { "Content-Type": "application/json" },
83
77
  body: JSON.stringify({ targetId: opts.targetId, ref: opts.ref }),
@@ -86,7 +80,7 @@ export async function browserHighlight(baseUrl, opts) {
86
80
  }
87
81
  export async function browserResponseBody(baseUrl, opts) {
88
82
  const q = buildProfileQuery(opts.profile);
89
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/response/body${q}`), {
83
+ return await fetchBrowserJson(`${baseUrl}/response/body${q}`, {
90
84
  method: "POST",
91
85
  headers: { "Content-Type": "application/json" },
92
86
  body: JSON.stringify({
@@ -2,12 +2,6 @@ import { fetchBrowserJson } from "./client-fetch.js";
2
2
  function buildProfileQuery(profile) {
3
3
  return profile ? `?profile=${encodeURIComponent(profile)}` : "";
4
4
  }
5
- function withBaseUrl(baseUrl, path) {
6
- const trimmed = baseUrl?.trim();
7
- if (!trimmed)
8
- return path;
9
- return `${trimmed.replace(/\/$/, "")}${path}`;
10
- }
11
5
  export async function browserCookies(baseUrl, opts = {}) {
12
6
  const q = new URLSearchParams();
13
7
  if (opts.targetId)
@@ -15,11 +9,11 @@ export async function browserCookies(baseUrl, opts = {}) {
15
9
  if (opts.profile)
16
10
  q.set("profile", opts.profile);
17
11
  const suffix = q.toString() ? `?${q.toString()}` : "";
18
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/cookies${suffix}`), { timeoutMs: 20000 });
12
+ return await fetchBrowserJson(`${baseUrl}/cookies${suffix}`, { timeoutMs: 20000 });
19
13
  }
20
14
  export async function browserCookiesSet(baseUrl, opts) {
21
15
  const q = buildProfileQuery(opts.profile);
22
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/cookies/set${q}`), {
16
+ return await fetchBrowserJson(`${baseUrl}/cookies/set${q}`, {
23
17
  method: "POST",
24
18
  headers: { "Content-Type": "application/json" },
25
19
  body: JSON.stringify({ targetId: opts.targetId, cookie: opts.cookie }),
@@ -28,7 +22,7 @@ export async function browserCookiesSet(baseUrl, opts) {
28
22
  }
29
23
  export async function browserCookiesClear(baseUrl, opts = {}) {
30
24
  const q = buildProfileQuery(opts.profile);
31
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/cookies/clear${q}`), {
25
+ return await fetchBrowserJson(`${baseUrl}/cookies/clear${q}`, {
32
26
  method: "POST",
33
27
  headers: { "Content-Type": "application/json" },
34
28
  body: JSON.stringify({ targetId: opts.targetId }),
@@ -44,11 +38,11 @@ export async function browserStorageGet(baseUrl, opts) {
44
38
  if (opts.profile)
45
39
  q.set("profile", opts.profile);
46
40
  const suffix = q.toString() ? `?${q.toString()}` : "";
47
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/storage/${opts.kind}${suffix}`), { timeoutMs: 20000 });
41
+ return await fetchBrowserJson(`${baseUrl}/storage/${opts.kind}${suffix}`, { timeoutMs: 20000 });
48
42
  }
49
43
  export async function browserStorageSet(baseUrl, opts) {
50
44
  const q = buildProfileQuery(opts.profile);
51
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/storage/${opts.kind}/set${q}`), {
45
+ return await fetchBrowserJson(`${baseUrl}/storage/${opts.kind}/set${q}`, {
52
46
  method: "POST",
53
47
  headers: { "Content-Type": "application/json" },
54
48
  body: JSON.stringify({
@@ -61,7 +55,7 @@ export async function browserStorageSet(baseUrl, opts) {
61
55
  }
62
56
  export async function browserStorageClear(baseUrl, opts) {
63
57
  const q = buildProfileQuery(opts.profile);
64
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/storage/${opts.kind}/clear${q}`), {
58
+ return await fetchBrowserJson(`${baseUrl}/storage/${opts.kind}/clear${q}`, {
65
59
  method: "POST",
66
60
  headers: { "Content-Type": "application/json" },
67
61
  body: JSON.stringify({ targetId: opts.targetId }),
@@ -70,7 +64,7 @@ export async function browserStorageClear(baseUrl, opts) {
70
64
  }
71
65
  export async function browserSetOffline(baseUrl, opts) {
72
66
  const q = buildProfileQuery(opts.profile);
73
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/offline${q}`), {
67
+ return await fetchBrowserJson(`${baseUrl}/set/offline${q}`, {
74
68
  method: "POST",
75
69
  headers: { "Content-Type": "application/json" },
76
70
  body: JSON.stringify({ targetId: opts.targetId, offline: opts.offline }),
@@ -79,7 +73,7 @@ export async function browserSetOffline(baseUrl, opts) {
79
73
  }
80
74
  export async function browserSetHeaders(baseUrl, opts) {
81
75
  const q = buildProfileQuery(opts.profile);
82
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/headers${q}`), {
76
+ return await fetchBrowserJson(`${baseUrl}/set/headers${q}`, {
83
77
  method: "POST",
84
78
  headers: { "Content-Type": "application/json" },
85
79
  body: JSON.stringify({ targetId: opts.targetId, headers: opts.headers }),
@@ -88,7 +82,7 @@ export async function browserSetHeaders(baseUrl, opts) {
88
82
  }
89
83
  export async function browserSetHttpCredentials(baseUrl, opts = {}) {
90
84
  const q = buildProfileQuery(opts.profile);
91
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/credentials${q}`), {
85
+ return await fetchBrowserJson(`${baseUrl}/set/credentials${q}`, {
92
86
  method: "POST",
93
87
  headers: { "Content-Type": "application/json" },
94
88
  body: JSON.stringify({
@@ -102,7 +96,7 @@ export async function browserSetHttpCredentials(baseUrl, opts = {}) {
102
96
  }
103
97
  export async function browserSetGeolocation(baseUrl, opts = {}) {
104
98
  const q = buildProfileQuery(opts.profile);
105
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/geolocation${q}`), {
99
+ return await fetchBrowserJson(`${baseUrl}/set/geolocation${q}`, {
106
100
  method: "POST",
107
101
  headers: { "Content-Type": "application/json" },
108
102
  body: JSON.stringify({
@@ -118,7 +112,7 @@ export async function browserSetGeolocation(baseUrl, opts = {}) {
118
112
  }
119
113
  export async function browserSetMedia(baseUrl, opts) {
120
114
  const q = buildProfileQuery(opts.profile);
121
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/media${q}`), {
115
+ return await fetchBrowserJson(`${baseUrl}/set/media${q}`, {
122
116
  method: "POST",
123
117
  headers: { "Content-Type": "application/json" },
124
118
  body: JSON.stringify({
@@ -130,7 +124,7 @@ export async function browserSetMedia(baseUrl, opts) {
130
124
  }
131
125
  export async function browserSetTimezone(baseUrl, opts) {
132
126
  const q = buildProfileQuery(opts.profile);
133
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/timezone${q}`), {
127
+ return await fetchBrowserJson(`${baseUrl}/set/timezone${q}`, {
134
128
  method: "POST",
135
129
  headers: { "Content-Type": "application/json" },
136
130
  body: JSON.stringify({
@@ -142,7 +136,7 @@ export async function browserSetTimezone(baseUrl, opts) {
142
136
  }
143
137
  export async function browserSetLocale(baseUrl, opts) {
144
138
  const q = buildProfileQuery(opts.profile);
145
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/locale${q}`), {
139
+ return await fetchBrowserJson(`${baseUrl}/set/locale${q}`, {
146
140
  method: "POST",
147
141
  headers: { "Content-Type": "application/json" },
148
142
  body: JSON.stringify({ targetId: opts.targetId, locale: opts.locale }),
@@ -151,7 +145,7 @@ export async function browserSetLocale(baseUrl, opts) {
151
145
  }
152
146
  export async function browserSetDevice(baseUrl, opts) {
153
147
  const q = buildProfileQuery(opts.profile);
154
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/device${q}`), {
148
+ return await fetchBrowserJson(`${baseUrl}/set/device${q}`, {
155
149
  method: "POST",
156
150
  headers: { "Content-Type": "application/json" },
157
151
  body: JSON.stringify({ targetId: opts.targetId, name: opts.name }),
@@ -160,7 +154,7 @@ export async function browserSetDevice(baseUrl, opts) {
160
154
  }
161
155
  export async function browserClearPermissions(baseUrl, opts = {}) {
162
156
  const q = buildProfileQuery(opts.profile);
163
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/set/geolocation${q}`), {
157
+ return await fetchBrowserJson(`${baseUrl}/set/geolocation${q}`, {
164
158
  method: "POST",
165
159
  headers: { "Content-Type": "application/json" },
166
160
  body: JSON.stringify({ targetId: opts.targetId, clear: true }),
@@ -1,91 +1,78 @@
1
+ import { extractErrorCode, formatErrorMessage } from "../infra/errors.js";
2
+ import { loadConfig } from "../config/config.js";
1
3
  import { formatCliCommand } from "../cli/command-format.js";
2
- import { createBrowserControlContext, startBrowserControlServiceFromConfig, } from "./control-service.js";
3
- import { createBrowserRouteDispatcher } from "./routes/dispatcher.js";
4
- function isAbsoluteHttp(url) {
5
- return /^https?:\/\//i.test(url.trim());
4
+ import { resolveBrowserConfig } from "./config.js";
5
+ let cachedConfigToken = undefined;
6
+ function getBrowserControlToken() {
7
+ const env = process.env.CLAWDBOT_BROWSER_CONTROL_TOKEN?.trim();
8
+ if (env)
9
+ return env;
10
+ if (cachedConfigToken !== undefined)
11
+ return cachedConfigToken;
12
+ try {
13
+ const cfg = loadConfig();
14
+ const resolved = resolveBrowserConfig(cfg.browser);
15
+ const token = resolved.controlToken?.trim() || "";
16
+ cachedConfigToken = token ? token : null;
17
+ }
18
+ catch {
19
+ cachedConfigToken = null;
20
+ }
21
+ return cachedConfigToken;
22
+ }
23
+ function unwrapCause(err) {
24
+ if (!err || typeof err !== "object")
25
+ return null;
26
+ const cause = err.cause;
27
+ return cause ?? null;
6
28
  }
7
29
  function enhanceBrowserFetchError(url, err, timeoutMs) {
8
- const hint = isAbsoluteHttp(url)
9
- ? "If this is a sandboxed session, ensure the sandbox browser is running and try again."
10
- : `Start (or restart) the Moltbot gateway (Moltbot.app menubar, or \`${formatCliCommand("moltbot gateway")}\`) and try again.`;
11
- const msg = String(err);
12
- const msgLower = msg.toLowerCase();
13
- const looksLikeTimeout = msgLower.includes("timed out") ||
14
- msgLower.includes("timeout") ||
15
- msgLower.includes("aborted") ||
16
- msgLower.includes("abort") ||
17
- msgLower.includes("aborterror");
18
- if (looksLikeTimeout) {
19
- return new Error(`Can't reach the clawd browser control service (timed out after ${timeoutMs}ms). ${hint}`);
30
+ const cause = unwrapCause(err);
31
+ const code = extractErrorCode(cause) ?? extractErrorCode(err) ?? "";
32
+ const hint = `Start (or restart) the Clawdbot gateway (Clawdbot.app menubar, or \`${formatCliCommand("clawdbot gateway")}\`) and try again.`;
33
+ if (code === "ECONNREFUSED") {
34
+ return new Error(`Can't reach the clawd browser control server at ${url} (connection refused). ${hint}`);
20
35
  }
21
- return new Error(`Can't reach the clawd browser control service. ${hint} (${msg})`);
22
- }
23
- async function fetchHttpJson(url, init) {
24
- const timeoutMs = init.timeoutMs ?? 5000;
25
- const ctrl = new AbortController();
26
- const t = setTimeout(() => ctrl.abort(), timeoutMs);
27
- try {
28
- const res = await fetch(url, { ...init, signal: ctrl.signal });
29
- if (!res.ok) {
30
- const text = await res.text().catch(() => "");
31
- throw new Error(text || `HTTP ${res.status}`);
32
- }
33
- return (await res.json());
36
+ if (code === "ETIMEDOUT" || code === "UND_ERR_CONNECT_TIMEOUT") {
37
+ return new Error(`Can't reach the clawd browser control server at ${url} (timed out after ${timeoutMs}ms). ${hint}`);
34
38
  }
35
- finally {
36
- clearTimeout(t);
39
+ const msg = formatErrorMessage(err);
40
+ if (msg.toLowerCase().includes("abort")) {
41
+ return new Error(`Can't reach the clawd browser control server at ${url} (timed out after ${timeoutMs}ms). ${hint}`);
37
42
  }
43
+ return new Error(`Can't reach the clawd browser control server at ${url}. ${hint} (${msg})`);
38
44
  }
39
45
  export async function fetchBrowserJson(url, init) {
40
46
  const timeoutMs = init?.timeoutMs ?? 5000;
47
+ const ctrl = new AbortController();
48
+ const t = setTimeout(() => ctrl.abort(), timeoutMs);
49
+ let res;
41
50
  try {
42
- if (isAbsoluteHttp(url)) {
43
- return await fetchHttpJson(url, { ...init, timeoutMs });
44
- }
45
- const started = await startBrowserControlServiceFromConfig();
46
- if (!started) {
47
- throw new Error("browser control disabled");
48
- }
49
- const dispatcher = createBrowserRouteDispatcher(createBrowserControlContext());
50
- const parsed = new URL(url, "http://localhost");
51
- const query = {};
52
- for (const [key, value] of parsed.searchParams.entries()) {
53
- query[key] = value;
54
- }
55
- let body = init?.body;
56
- if (typeof body === "string") {
57
- try {
58
- body = JSON.parse(body);
59
- }
60
- catch {
61
- // keep as string
51
+ const token = getBrowserControlToken();
52
+ const mergedHeaders = (() => {
53
+ if (!token)
54
+ return init?.headers;
55
+ const h = new Headers(init?.headers ?? {});
56
+ if (!h.has("Authorization")) {
57
+ h.set("Authorization", `Bearer ${token}`);
62
58
  }
63
- }
64
- const dispatchPromise = dispatcher.dispatch({
65
- method: init?.method?.toUpperCase() === "DELETE"
66
- ? "DELETE"
67
- : init?.method?.toUpperCase() === "POST"
68
- ? "POST"
69
- : "GET",
70
- path: parsed.pathname,
71
- query,
72
- body,
59
+ return h;
60
+ })();
61
+ res = await fetch(url, {
62
+ ...init,
63
+ ...(mergedHeaders ? { headers: mergedHeaders } : {}),
64
+ signal: ctrl.signal,
73
65
  });
74
- const result = await (timeoutMs
75
- ? Promise.race([
76
- dispatchPromise,
77
- new Promise((_, reject) => setTimeout(() => reject(new Error("timed out")), timeoutMs)),
78
- ])
79
- : dispatchPromise);
80
- if (result.status >= 400) {
81
- const message = result.body && typeof result.body === "object" && "error" in result.body
82
- ? String(result.body.error)
83
- : `HTTP ${result.status}`;
84
- throw new Error(message);
85
- }
86
- return result.body;
87
66
  }
88
67
  catch (err) {
89
68
  throw enhanceBrowserFetchError(url, err, timeoutMs);
90
69
  }
70
+ finally {
71
+ clearTimeout(t);
72
+ }
73
+ if (!res.ok) {
74
+ const text = await res.text().catch(() => "");
75
+ throw new Error(text ? `${res.status}: ${text}` : `HTTP ${res.status}`);
76
+ }
77
+ return (await res.json());
91
78
  }
@@ -1,48 +1,50 @@
1
+ import { loadConfig } from "../config/config.js";
1
2
  import { fetchBrowserJson } from "./client-fetch.js";
3
+ import { resolveBrowserConfig } from "./config.js";
4
+ export function resolveBrowserControlUrl(overrideUrl) {
5
+ const cfg = loadConfig();
6
+ const resolved = resolveBrowserConfig(cfg.browser);
7
+ const url = overrideUrl?.trim() ? overrideUrl.trim() : resolved.controlUrl;
8
+ return url.replace(/\/$/, "");
9
+ }
2
10
  function buildProfileQuery(profile) {
3
11
  return profile ? `?profile=${encodeURIComponent(profile)}` : "";
4
12
  }
5
- function withBaseUrl(baseUrl, path) {
6
- const trimmed = baseUrl?.trim();
7
- if (!trimmed)
8
- return path;
9
- return `${trimmed.replace(/\/$/, "")}${path}`;
10
- }
11
13
  export async function browserStatus(baseUrl, opts) {
12
14
  const q = buildProfileQuery(opts?.profile);
13
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/${q}`), {
15
+ return await fetchBrowserJson(`${baseUrl}/${q}`, {
14
16
  timeoutMs: 1500,
15
17
  });
16
18
  }
17
19
  export async function browserProfiles(baseUrl) {
18
- const res = await fetchBrowserJson(withBaseUrl(baseUrl, `/profiles`), {
20
+ const res = await fetchBrowserJson(`${baseUrl}/profiles`, {
19
21
  timeoutMs: 3000,
20
22
  });
21
23
  return res.profiles ?? [];
22
24
  }
23
25
  export async function browserStart(baseUrl, opts) {
24
26
  const q = buildProfileQuery(opts?.profile);
25
- await fetchBrowserJson(withBaseUrl(baseUrl, `/start${q}`), {
27
+ await fetchBrowserJson(`${baseUrl}/start${q}`, {
26
28
  method: "POST",
27
29
  timeoutMs: 15000,
28
30
  });
29
31
  }
30
32
  export async function browserStop(baseUrl, opts) {
31
33
  const q = buildProfileQuery(opts?.profile);
32
- await fetchBrowserJson(withBaseUrl(baseUrl, `/stop${q}`), {
34
+ await fetchBrowserJson(`${baseUrl}/stop${q}`, {
33
35
  method: "POST",
34
36
  timeoutMs: 15000,
35
37
  });
36
38
  }
37
39
  export async function browserResetProfile(baseUrl, opts) {
38
40
  const q = buildProfileQuery(opts?.profile);
39
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/reset-profile${q}`), {
41
+ return await fetchBrowserJson(`${baseUrl}/reset-profile${q}`, {
40
42
  method: "POST",
41
43
  timeoutMs: 20000,
42
44
  });
43
45
  }
44
46
  export async function browserCreateProfile(baseUrl, opts) {
45
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/profiles/create`), {
47
+ return await fetchBrowserJson(`${baseUrl}/profiles/create`, {
46
48
  method: "POST",
47
49
  headers: { "Content-Type": "application/json" },
48
50
  body: JSON.stringify({
@@ -55,19 +57,19 @@ export async function browserCreateProfile(baseUrl, opts) {
55
57
  });
56
58
  }
57
59
  export async function browserDeleteProfile(baseUrl, profile) {
58
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/profiles/${encodeURIComponent(profile)}`), {
60
+ return await fetchBrowserJson(`${baseUrl}/profiles/${encodeURIComponent(profile)}`, {
59
61
  method: "DELETE",
60
62
  timeoutMs: 20000,
61
63
  });
62
64
  }
63
65
  export async function browserTabs(baseUrl, opts) {
64
66
  const q = buildProfileQuery(opts?.profile);
65
- const res = await fetchBrowserJson(withBaseUrl(baseUrl, `/tabs${q}`), { timeoutMs: 3000 });
67
+ const res = await fetchBrowserJson(`${baseUrl}/tabs${q}`, { timeoutMs: 3000 });
66
68
  return res.tabs ?? [];
67
69
  }
68
70
  export async function browserOpenTab(baseUrl, url, opts) {
69
71
  const q = buildProfileQuery(opts?.profile);
70
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/tabs/open${q}`), {
72
+ return await fetchBrowserJson(`${baseUrl}/tabs/open${q}`, {
71
73
  method: "POST",
72
74
  headers: { "Content-Type": "application/json" },
73
75
  body: JSON.stringify({ url }),
@@ -76,7 +78,7 @@ export async function browserOpenTab(baseUrl, url, opts) {
76
78
  }
77
79
  export async function browserFocusTab(baseUrl, targetId, opts) {
78
80
  const q = buildProfileQuery(opts?.profile);
79
- await fetchBrowserJson(withBaseUrl(baseUrl, `/tabs/focus${q}`), {
81
+ await fetchBrowserJson(`${baseUrl}/tabs/focus${q}`, {
80
82
  method: "POST",
81
83
  headers: { "Content-Type": "application/json" },
82
84
  body: JSON.stringify({ targetId }),
@@ -85,14 +87,14 @@ export async function browserFocusTab(baseUrl, targetId, opts) {
85
87
  }
86
88
  export async function browserCloseTab(baseUrl, targetId, opts) {
87
89
  const q = buildProfileQuery(opts?.profile);
88
- await fetchBrowserJson(withBaseUrl(baseUrl, `/tabs/${encodeURIComponent(targetId)}${q}`), {
90
+ await fetchBrowserJson(`${baseUrl}/tabs/${encodeURIComponent(targetId)}${q}`, {
89
91
  method: "DELETE",
90
92
  timeoutMs: 5000,
91
93
  });
92
94
  }
93
95
  export async function browserTabAction(baseUrl, opts) {
94
96
  const q = buildProfileQuery(opts.profile);
95
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/tabs/action${q}`), {
97
+ return await fetchBrowserJson(`${baseUrl}/tabs/action${q}`, {
96
98
  method: "POST",
97
99
  headers: { "Content-Type": "application/json" },
98
100
  body: JSON.stringify({
@@ -130,7 +132,7 @@ export async function browserSnapshot(baseUrl, opts) {
130
132
  q.set("mode", opts.mode);
131
133
  if (opts.profile)
132
134
  q.set("profile", opts.profile);
133
- return await fetchBrowserJson(withBaseUrl(baseUrl, `/snapshot?${q.toString()}`), {
135
+ return await fetchBrowserJson(`${baseUrl}/snapshot?${q.toString()}`, {
134
136
  timeoutMs: 20000,
135
137
  });
136
138
  }
@@ -1,6 +1,5 @@
1
- import { deriveDefaultBrowserCdpPortRange, deriveDefaultBrowserControlPort, DEFAULT_BROWSER_CONTROL_PORT, } from "../config/port-defaults.js";
2
- import { resolveGatewayPort } from "../config/paths.js";
3
- import { DEFAULT_CLAWD_BROWSER_COLOR, DEFAULT_CLAWD_BROWSER_ENABLED, DEFAULT_BROWSER_EVALUATE_ENABLED, DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, DEFAULT_CLAWD_BROWSER_PROFILE_NAME, } from "./constants.js";
1
+ import { deriveDefaultBrowserCdpPortRange, deriveDefaultBrowserControlPort, } from "../config/port-defaults.js";
2
+ import { DEFAULT_CLAWD_BROWSER_COLOR, DEFAULT_CLAWD_BROWSER_CONTROL_URL, DEFAULT_CLAWD_BROWSER_ENABLED, DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, DEFAULT_CLAWD_BROWSER_PROFILE_NAME, } from "./constants.js";
4
3
  import { CDP_PORT_RANGE_START, getUsedPorts } from "./profiles.js";
5
4
  function isLoopbackHost(host) {
6
5
  const h = host.trim().toLowerCase();
@@ -62,7 +61,7 @@ function ensureDefaultProfile(profiles, defaultColor, legacyCdpPort, derivedDefa
62
61
  /**
63
62
  * Ensure a built-in "chrome" profile exists for the Chrome extension relay.
64
63
  *
65
- * Note: this is a Moltbot browser profile (routing config), not a Chrome user profile.
64
+ * Note: this is a Clawdbot browser profile (routing config), not a Chrome user profile.
66
65
  * It points at the local relay CDP endpoint (controlPort + 1).
67
66
  */
68
67
  function ensureDefaultChromeExtensionProfile(profiles, controlPort) {
@@ -83,11 +82,22 @@ function ensureDefaultChromeExtensionProfile(profiles, controlPort) {
83
82
  };
84
83
  return result;
85
84
  }
86
- export function resolveBrowserConfig(cfg, rootConfig) {
85
+ export function resolveBrowserConfig(cfg) {
87
86
  const enabled = cfg?.enabled ?? DEFAULT_CLAWD_BROWSER_ENABLED;
88
- const evaluateEnabled = cfg?.evaluateEnabled ?? DEFAULT_BROWSER_EVALUATE_ENABLED;
89
- const gatewayPort = resolveGatewayPort(rootConfig);
90
- const controlPort = deriveDefaultBrowserControlPort(gatewayPort ?? DEFAULT_BROWSER_CONTROL_PORT);
87
+ const envControlUrl = process.env.CLAWDBOT_BROWSER_CONTROL_URL?.trim();
88
+ const controlToken = cfg?.controlToken?.trim() || undefined;
89
+ const derivedControlPort = (() => {
90
+ const raw = process.env.CLAWDBOT_GATEWAY_PORT?.trim();
91
+ if (!raw)
92
+ return null;
93
+ const gatewayPort = Number.parseInt(raw, 10);
94
+ if (!Number.isFinite(gatewayPort) || gatewayPort <= 0)
95
+ return null;
96
+ return deriveDefaultBrowserControlPort(gatewayPort);
97
+ })();
98
+ const derivedControlUrl = derivedControlPort ? `http://127.0.0.1:${derivedControlPort}` : null;
99
+ const controlInfo = parseHttpUrl(cfg?.controlUrl ?? envControlUrl ?? derivedControlUrl ?? DEFAULT_CLAWD_BROWSER_CONTROL_URL, "browser.controlUrl");
100
+ const controlPort = controlInfo.port;
91
101
  const defaultColor = normalizeHexColor(cfg?.color);
92
102
  const remoteCdpTimeoutMs = normalizeTimeoutMs(cfg?.remoteCdpTimeoutMs, 1500);
93
103
  const remoteCdpHandshakeTimeoutMs = normalizeTimeoutMs(cfg?.remoteCdpHandshakeTimeoutMs, Math.max(2000, remoteCdpTimeoutMs * 2));
@@ -100,9 +110,10 @@ export function resolveBrowserConfig(cfg, rootConfig) {
100
110
  else {
101
111
  const derivedPort = controlPort + 1;
102
112
  if (derivedPort > 65535) {
103
- throw new Error(`Derived CDP port (${derivedPort}) is too high; check gateway port configuration.`);
113
+ throw new Error(`browser.controlUrl port (${controlPort}) is too high; cannot derive CDP port (${derivedPort})`);
104
114
  }
105
- const derived = new URL(`http://127.0.0.1:${derivedPort}`);
115
+ const derived = new URL(controlInfo.normalized);
116
+ derived.port = String(derivedPort);
106
117
  cdpInfo = {
107
118
  parsed: derived,
108
119
  port: derivedPort,
@@ -124,8 +135,10 @@ export function resolveBrowserConfig(cfg, rootConfig) {
124
135
  : DEFAULT_CLAWD_BROWSER_PROFILE_NAME);
125
136
  return {
126
137
  enabled,
127
- evaluateEnabled,
138
+ controlUrl: controlInfo.normalized,
139
+ controlHost: controlInfo.parsed.hostname,
128
140
  controlPort,
141
+ ...(controlToken ? { controlToken } : {}),
129
142
  cdpProtocol,
130
143
  cdpHost: cdpInfo.parsed.hostname,
131
144
  cdpIsLoopback: isLoopbackHost(cdpInfo.parsed.hostname),
@@ -175,6 +188,6 @@ export function resolveProfile(resolved, profileName) {
175
188
  driver,
176
189
  };
177
190
  }
178
- export function shouldStartLocalBrowserServer(_resolved) {
179
- return true;
191
+ export function shouldStartLocalBrowserServer(resolved) {
192
+ return isLoopbackHost(resolved.controlHost);
180
193
  }
@@ -1,5 +1,5 @@
1
1
  export const DEFAULT_CLAWD_BROWSER_ENABLED = true;
2
- export const DEFAULT_BROWSER_EVALUATE_ENABLED = true;
2
+ export const DEFAULT_CLAWD_BROWSER_CONTROL_URL = "http://127.0.0.1:18791";
3
3
  export const DEFAULT_CLAWD_BROWSER_COLOR = "#FF4500";
4
4
  export const DEFAULT_CLAWD_BROWSER_PROFILE_NAME = "clawd";
5
5
  export const DEFAULT_BROWSER_DEFAULT_PROFILE_NAME = "chrome";