@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
@@ -1,49 +1,35 @@
1
1
  import fs from "node:fs/promises";
2
+ import path from "node:path";
2
3
  import express from "express";
3
4
  import { danger } from "../globals.js";
4
5
  import { defaultRuntime } from "../runtime.js";
5
- import { SafeOpenError, openFileWithinRoot } from "../infra/fs-safe.js";
6
6
  import { detectMime } from "./mime.js";
7
- import { cleanOldMedia, getMediaDir, MEDIA_MAX_BYTES } from "./store.js";
7
+ import { cleanOldMedia, getMediaDir } from "./store.js";
8
8
  const DEFAULT_TTL_MS = 2 * 60 * 1000;
9
- const MAX_MEDIA_ID_CHARS = 200;
10
- const MEDIA_ID_PATTERN = /^[\p{L}\p{N}._-]+$/u;
11
- const MAX_MEDIA_BYTES = MEDIA_MAX_BYTES;
12
- const isValidMediaId = (id) => {
13
- if (!id)
14
- return false;
15
- if (id.length > MAX_MEDIA_ID_CHARS)
16
- return false;
17
- if (id === "." || id === "..")
18
- return false;
19
- return MEDIA_ID_PATTERN.test(id);
20
- };
21
9
  export function attachMediaRoutes(app, ttlMs = DEFAULT_TTL_MS, _runtime = defaultRuntime) {
22
10
  const mediaDir = getMediaDir();
23
11
  app.get("/media/:id", async (req, res) => {
24
12
  const id = req.params.id;
25
- if (!isValidMediaId(id)) {
26
- res.status(400).send("invalid path");
27
- return;
28
- }
13
+ const mediaRoot = (await fs.realpath(mediaDir)) + path.sep;
14
+ const file = path.resolve(mediaRoot, id);
29
15
  try {
30
- const { handle, realPath, stat } = await openFileWithinRoot({
31
- rootDir: mediaDir,
32
- relativePath: id,
33
- });
34
- if (stat.size > MAX_MEDIA_BYTES) {
35
- await handle.close().catch(() => { });
36
- res.status(413).send("too large");
16
+ const lstat = await fs.lstat(file);
17
+ if (lstat.isSymbolicLink()) {
18
+ res.status(400).send("invalid path");
37
19
  return;
38
20
  }
21
+ const realPath = await fs.realpath(file);
22
+ if (!realPath.startsWith(mediaRoot)) {
23
+ res.status(400).send("invalid path");
24
+ return;
25
+ }
26
+ const stat = await fs.stat(realPath);
39
27
  if (Date.now() - stat.mtimeMs > ttlMs) {
40
- await handle.close().catch(() => { });
41
28
  await fs.rm(realPath).catch(() => { });
42
29
  res.status(410).send("expired");
43
30
  return;
44
31
  }
45
- const data = await handle.readFile();
46
- await handle.close().catch(() => { });
32
+ const data = await fs.readFile(realPath);
47
33
  const mime = await detectMime({ buffer: data, filePath: realPath });
48
34
  if (mime)
49
35
  res.type(mime);
@@ -55,17 +41,7 @@ export function attachMediaRoutes(app, ttlMs = DEFAULT_TTL_MS, _runtime = defaul
55
41
  }, 50);
56
42
  });
57
43
  }
58
- catch (err) {
59
- if (err instanceof SafeOpenError) {
60
- if (err.code === "invalid-path") {
61
- res.status(400).send("invalid path");
62
- return;
63
- }
64
- if (err.code === "not-found") {
65
- res.status(404).send("not found");
66
- return;
67
- }
68
- }
44
+ catch {
69
45
  res.status(404).send("not found");
70
46
  }
71
47
  });
@@ -1,16 +1,13 @@
1
1
  import crypto from "node:crypto";
2
2
  import { createWriteStream } from "node:fs";
3
3
  import fs from "node:fs/promises";
4
- import { request as httpRequest } from "node:http";
5
- import { request as httpsRequest } from "node:https";
4
+ import { request } from "node:https";
6
5
  import path from "node:path";
7
6
  import { pipeline } from "node:stream/promises";
8
7
  import { resolveConfigDir } from "../utils.js";
9
- import { resolvePinnedHostname } from "../infra/net/ssrf.js";
10
8
  import { detectMime, extensionForMime } from "./mime.js";
11
9
  const resolveMediaDir = () => path.join(resolveConfigDir(), "media");
12
- export const MEDIA_MAX_BYTES = 5 * 1024 * 1024; // 5MB default
13
- const MAX_BYTES = MEDIA_MAX_BYTES;
10
+ const MAX_BYTES = 5 * 1024 * 1024; // 5MB default
14
11
  const DEFAULT_TTL_MS = 2 * 60 * 1000; // 2 minutes
15
12
  /**
16
13
  * Sanitize a filename for cross-platform safety.
@@ -18,10 +15,10 @@ const DEFAULT_TTL_MS = 2 * 60 * 1000; // 2 minutes
18
15
  * Keeps: alphanumeric, dots, hyphens, underscores, Unicode letters/numbers.
19
16
  */
20
17
  function sanitizeFilename(name) {
21
- const trimmed = name.trim();
22
- if (!trimmed)
23
- return "";
24
- const sanitized = trimmed.replace(/[^\p{L}\p{N}._-]+/gu, "_");
18
+ // Remove: < > : " / \ | ? * and control chars (U+0000-U+001F)
19
+ // oxlint-disable-next-line no-control-regex -- Intentionally matching control chars
20
+ const unsafe = /[<>:"/\\|?*\x00-\x1f]/g;
21
+ const sanitized = name.trim().replace(unsafe, "_").replace(/\s+/g, "_"); // Replace whitespace runs with underscore
25
22
  // Collapse multiple underscores, trim leading/trailing, limit length
26
23
  return sanitized.replace(/_+/g, "_").replace(/^_|_$/g, "").slice(0, 60);
27
24
  }
@@ -48,7 +45,7 @@ export function getMediaDir() {
48
45
  }
49
46
  export async function ensureMediaDir() {
50
47
  const mediaDir = resolveMediaDir();
51
- await fs.mkdir(mediaDir, { recursive: true, mode: 0o700 });
48
+ await fs.mkdir(mediaDir, { recursive: true });
52
49
  return mediaDir;
53
50
  }
54
51
  export async function cleanOldMedia(ttlMs = DEFAULT_TTL_MS) {
@@ -73,74 +70,57 @@ function looksLikeUrl(src) {
73
70
  */
74
71
  async function downloadToFile(url, dest, headers, maxRedirects = 5) {
75
72
  return await new Promise((resolve, reject) => {
76
- let parsedUrl;
77
- try {
78
- parsedUrl = new URL(url);
79
- }
80
- catch {
81
- reject(new Error("Invalid URL"));
82
- return;
83
- }
84
- if (!["http:", "https:"].includes(parsedUrl.protocol)) {
85
- reject(new Error(`Invalid URL protocol: ${parsedUrl.protocol}. Only HTTP/HTTPS allowed.`));
86
- return;
87
- }
88
- const requestImpl = parsedUrl.protocol === "https:" ? httpsRequest : httpRequest;
89
- resolvePinnedHostname(parsedUrl.hostname)
90
- .then((pinned) => {
91
- const req = requestImpl(parsedUrl, { headers, lookup: pinned.lookup }, (res) => {
92
- // Follow redirects
93
- if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400) {
94
- const location = res.headers.location;
95
- if (!location || maxRedirects <= 0) {
96
- reject(new Error(`Redirect loop or missing Location header`));
97
- return;
98
- }
99
- const redirectUrl = new URL(location, url).href;
100
- resolve(downloadToFile(redirectUrl, dest, headers, maxRedirects - 1));
73
+ const req = request(url, { headers }, (res) => {
74
+ // Follow redirects
75
+ if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400) {
76
+ const location = res.headers.location;
77
+ if (!location || maxRedirects <= 0) {
78
+ reject(new Error(`Redirect loop or missing Location header`));
101
79
  return;
102
80
  }
103
- if (!res.statusCode || res.statusCode >= 400) {
104
- reject(new Error(`HTTP ${res.statusCode ?? "?"} downloading media`));
105
- return;
81
+ const redirectUrl = new URL(location, url).href;
82
+ resolve(downloadToFile(redirectUrl, dest, headers, maxRedirects - 1));
83
+ return;
84
+ }
85
+ if (!res.statusCode || res.statusCode >= 400) {
86
+ reject(new Error(`HTTP ${res.statusCode ?? "?"} downloading media`));
87
+ return;
88
+ }
89
+ let total = 0;
90
+ const sniffChunks = [];
91
+ let sniffLen = 0;
92
+ const out = createWriteStream(dest);
93
+ res.on("data", (chunk) => {
94
+ total += chunk.length;
95
+ if (sniffLen < 16384) {
96
+ sniffChunks.push(chunk);
97
+ sniffLen += chunk.length;
98
+ }
99
+ if (total > MAX_BYTES) {
100
+ req.destroy(new Error("Media exceeds 5MB limit"));
106
101
  }
107
- let total = 0;
108
- const sniffChunks = [];
109
- let sniffLen = 0;
110
- const out = createWriteStream(dest, { mode: 0o600 });
111
- res.on("data", (chunk) => {
112
- total += chunk.length;
113
- if (sniffLen < 16384) {
114
- sniffChunks.push(chunk);
115
- sniffLen += chunk.length;
116
- }
117
- if (total > MAX_BYTES) {
118
- req.destroy(new Error("Media exceeds 5MB limit"));
119
- }
120
- });
121
- pipeline(res, out)
122
- .then(() => {
123
- const sniffBuffer = Buffer.concat(sniffChunks, Math.min(sniffLen, 16384));
124
- const rawHeader = res.headers["content-type"];
125
- const headerMime = Array.isArray(rawHeader) ? rawHeader[0] : rawHeader;
126
- resolve({
127
- headerMime,
128
- sniffBuffer,
129
- size: total,
130
- });
131
- })
132
- .catch(reject);
133
102
  });
134
- req.on("error", reject);
135
- req.end();
136
- })
137
- .catch(reject);
103
+ pipeline(res, out)
104
+ .then(() => {
105
+ const sniffBuffer = Buffer.concat(sniffChunks, Math.min(sniffLen, 16384));
106
+ const rawHeader = res.headers["content-type"];
107
+ const headerMime = Array.isArray(rawHeader) ? rawHeader[0] : rawHeader;
108
+ resolve({
109
+ headerMime,
110
+ sniffBuffer,
111
+ size: total,
112
+ });
113
+ })
114
+ .catch(reject);
115
+ });
116
+ req.on("error", reject);
117
+ req.end();
138
118
  });
139
119
  }
140
120
  export async function saveMediaSource(source, headers, subdir = "") {
141
121
  const baseDir = resolveMediaDir();
142
122
  const dir = subdir ? path.join(baseDir, subdir) : baseDir;
143
- await fs.mkdir(dir, { recursive: true, mode: 0o700 });
123
+ await fs.mkdir(dir, { recursive: true });
144
124
  await cleanOldMedia();
145
125
  const baseId = crypto.randomUUID();
146
126
  if (looksLikeUrl(source)) {
@@ -170,7 +150,7 @@ export async function saveMediaSource(source, headers, subdir = "") {
170
150
  const ext = extensionForMime(mime) ?? path.extname(source);
171
151
  const id = ext ? `${baseId}${ext}` : baseId;
172
152
  const dest = path.join(dir, id);
173
- await fs.writeFile(dest, buffer, { mode: 0o600 });
153
+ await fs.writeFile(dest, buffer);
174
154
  return { id, path: dest, size: stat.size, contentType: mime };
175
155
  }
176
156
  export async function saveMediaBuffer(buffer, contentType, subdir = "inbound", maxBytes = MAX_BYTES, originalFilename) {
@@ -178,7 +158,7 @@ export async function saveMediaBuffer(buffer, contentType, subdir = "inbound", m
178
158
  throw new Error(`Media exceeds ${(maxBytes / (1024 * 1024)).toFixed(0)}MB limit`);
179
159
  }
180
160
  const dir = path.join(resolveMediaDir(), subdir);
181
- await fs.mkdir(dir, { recursive: true, mode: 0o700 });
161
+ await fs.mkdir(dir, { recursive: true });
182
162
  const uuid = crypto.randomUUID();
183
163
  const headerExt = extensionForMime(contentType?.split(";")[0]?.trim() ?? undefined);
184
164
  const mime = await detectMime({ buffer, headerMime: contentType });
@@ -195,6 +175,6 @@ export async function saveMediaBuffer(buffer, contentType, subdir = "inbound", m
195
175
  id = ext ? `${uuid}${ext}` : uuid;
196
176
  }
197
177
  const dest = path.join(dir, id);
198
- await fs.writeFile(dest, buffer, { mode: 0o600 });
178
+ await fs.writeFile(dest, buffer);
199
179
  return { id, path: dest, size: buffer.byteLength, contentType: mime };
200
180
  }
@@ -253,7 +253,7 @@ export class MediaAttachmentCache {
253
253
  timeoutMs: params.timeoutMs,
254
254
  });
255
255
  const extension = path.extname(bufferResult.fileName || "") || "";
256
- const tmpPath = path.join(os.tmpdir(), `moltbot-media-${crypto.randomUUID()}${extension}`);
256
+ const tmpPath = path.join(os.tmpdir(), `clawdbot-media-${crypto.randomUUID()}${extension}`);
257
257
  await fs.writeFile(tmpPath, bufferResult.buffer);
258
258
  entry.tempPath = tmpPath;
259
259
  entry.tempCleanup = async () => {
@@ -1,11 +1,11 @@
1
1
  import { complete } from "@mariozechner/pi-ai";
2
2
  import { discoverAuthStorage, discoverModels } from "@mariozechner/pi-coding-agent";
3
3
  import { getApiKeyForModel, requireApiKey } from "../../agents/model-auth.js";
4
- import { ensureMoltbotModelsJson } from "../../agents/models-config.js";
4
+ import { ensureClawdbotModelsJson } from "../../agents/models-config.js";
5
5
  import { minimaxUnderstandImage } from "../../agents/minimax-vlm.js";
6
6
  import { coerceImageAssistantText } from "../../agents/tools/image-tool.helpers.js";
7
7
  export async function describeImageWithModel(params) {
8
- await ensureMoltbotModelsJson(params.cfg, params.agentDir);
8
+ await ensureClawdbotModelsJson(params.cfg, params.agentDir);
9
9
  const authStorage = discoverAuthStorage(params.agentDir);
10
10
  const modelRegistry = discoverModels(authStorage, params.agentDir);
11
11
  const model = modelRegistry.find(params.provider, params.model);
@@ -370,38 +370,6 @@ async function resolveAutoEntries(params) {
370
370
  return [keys];
371
371
  return [];
372
372
  }
373
- export async function resolveAutoImageModel(params) {
374
- const providerRegistry = buildProviderRegistry();
375
- const toActive = (entry) => {
376
- if (!entry || entry.type === "cli")
377
- return null;
378
- const provider = entry.provider;
379
- if (!provider)
380
- return null;
381
- const model = entry.model ?? DEFAULT_IMAGE_MODELS[provider];
382
- if (!model)
383
- return null;
384
- return { provider, model };
385
- };
386
- const activeEntry = await resolveActiveModelEntry({
387
- cfg: params.cfg,
388
- agentDir: params.agentDir,
389
- providerRegistry,
390
- capability: "image",
391
- activeModel: params.activeModel,
392
- });
393
- const resolvedActive = toActive(activeEntry);
394
- if (resolvedActive)
395
- return resolvedActive;
396
- const keyEntry = await resolveKeyEntry({
397
- cfg: params.cfg,
398
- agentDir: params.agentDir,
399
- providerRegistry,
400
- capability: "image",
401
- activeModel: params.activeModel,
402
- });
403
- return toActive(keyEntry);
404
- }
405
373
  async function resolveActiveModelEntry(params) {
406
374
  const activeProviderRaw = params.activeModel?.provider?.trim();
407
375
  if (!activeProviderRaw)
@@ -769,7 +737,7 @@ async function runCliEntry(params) {
769
737
  maxBytes,
770
738
  timeoutMs,
771
739
  });
772
- const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "moltbot-media-cli-"));
740
+ const outputDir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-media-cli-"));
773
741
  const mediaPath = pathResult.path;
774
742
  const outputBase = path.join(outputDir, path.parse(mediaPath).name);
775
743
  const templCtx = {
@@ -42,7 +42,7 @@ function splitGeminiBatchRequests(requests) {
42
42
  return groups;
43
43
  }
44
44
  function buildGeminiUploadBody(params) {
45
- const boundary = `moltbot-${hashText(params.displayName)}`;
45
+ const boundary = `clawdbot-${hashText(params.displayName)}`;
46
46
  const jsonPart = JSON.stringify({
47
47
  file: {
48
48
  displayName: params.displayName,
@@ -56,7 +56,7 @@ async function submitOpenAiBatch(params) {
56
56
  endpoint: OPENAI_BATCH_ENDPOINT,
57
57
  completion_window: OPENAI_BATCH_COMPLETION_WINDOW,
58
58
  metadata: {
59
- source: "moltbot-memory",
59
+ source: "clawdbot-memory",
60
60
  agent: params.agentId,
61
61
  },
62
62
  }),
@@ -160,7 +160,7 @@ function formatLocalSetupError(err) {
160
160
  "To enable local embeddings:",
161
161
  "1) Use Node 22 LTS (recommended for installs/updates)",
162
162
  missing
163
- ? "2) Reinstall Moltbot (this should install node-llama-cpp): npm i -g moltbot@latest"
163
+ ? "2) Reinstall Clawdbot (this should install node-llama-cpp): npm i -g clawdbot@latest"
164
164
  : null,
165
165
  "3) If you use pnpm: pnpm approve-builds (select node-llama-cpp), then pnpm rebuild node-llama-cpp",
166
166
  'Or set agents.defaults.memorySearch.provider = "openai" (remote).',
@@ -8,12 +8,10 @@ import { requestExecHostViaSocket, } from "../infra/exec-host.js";
8
8
  import { getMachineDisplayName } from "../infra/machine-name.js";
9
9
  import { loadOrCreateDeviceIdentity } from "../infra/device-identity.js";
10
10
  import { loadConfig } from "../config/config.js";
11
- import { resolveBrowserConfig } from "../browser/config.js";
12
- import { createBrowserControlContext, startBrowserControlServiceFromConfig, } from "../browser/control-service.js";
13
- import { createBrowserRouteDispatcher } from "../browser/routes/dispatcher.js";
11
+ import { resolveBrowserConfig, shouldStartLocalBrowserServer } from "../browser/config.js";
14
12
  import { detectMime } from "../media/mime.js";
15
13
  import { resolveAgentConfig } from "../agents/agent-scope.js";
16
- import { ensureMoltbotCliOnPath } from "../infra/path-env.js";
14
+ import { ensureClawdbotCliOnPath } from "../infra/path-env.js";
17
15
  import { VERSION } from "../version.js";
18
16
  import { GATEWAY_CLIENT_MODES, GATEWAY_CLIENT_NAMES } from "../utils/message-channel.js";
19
17
  import { ensureNodeHostConfig, saveNodeHostConfig } from "./config.js";
@@ -109,41 +107,23 @@ function resolveBrowserProxyConfig() {
109
107
  return { enabled, allowProfiles };
110
108
  }
111
109
  let browserControlReady = null;
112
- async function ensureBrowserControlService() {
110
+ async function ensureBrowserControlServer() {
113
111
  if (browserControlReady)
114
112
  return browserControlReady;
115
113
  browserControlReady = (async () => {
116
114
  const cfg = loadConfig();
117
- const resolved = resolveBrowserConfig(cfg.browser, cfg);
115
+ const resolved = resolveBrowserConfig(cfg.browser);
118
116
  if (!resolved.enabled) {
119
117
  throw new Error("browser control disabled");
120
118
  }
121
- const started = await startBrowserControlServiceFromConfig();
122
- if (!started)
123
- throw new Error("browser control disabled");
119
+ if (!shouldStartLocalBrowserServer(resolved)) {
120
+ throw new Error("browser control URL is non-loopback");
121
+ }
122
+ const mod = await import("../browser/server.js");
123
+ await mod.startBrowserControlServerFromConfig();
124
124
  })();
125
125
  return browserControlReady;
126
126
  }
127
- async function withTimeout(promise, timeoutMs, label) {
128
- const resolved = typeof timeoutMs === "number" && Number.isFinite(timeoutMs)
129
- ? Math.max(1, Math.floor(timeoutMs))
130
- : undefined;
131
- if (!resolved)
132
- return await promise;
133
- let timer;
134
- const timeoutPromise = new Promise((_, reject) => {
135
- timer = setTimeout(() => {
136
- reject(new Error(`${label ?? "request"} timed out`));
137
- }, resolved);
138
- });
139
- try {
140
- return await Promise.race([promise, timeoutPromise]);
141
- }
142
- finally {
143
- if (timer)
144
- clearTimeout(timer);
145
- }
146
- }
147
127
  function isProfileAllowed(params) {
148
128
  const { allowProfiles, profile } = params;
149
129
  if (!allowProfiles.length)
@@ -296,7 +276,7 @@ function resolveEnvPath(env) {
296
276
  return raw.split(path.delimiter).filter(Boolean);
297
277
  }
298
278
  function ensureNodePathEnv() {
299
- ensureMoltbotCliOnPath({ pathEnv: process.env.PATH ?? "" });
279
+ ensureClawdbotCliOnPath({ pathEnv: process.env.PATH ?? "" });
300
280
  const current = process.env.PATH ?? "";
301
281
  if (current.trim())
302
282
  return current;
@@ -365,8 +345,10 @@ export async function runNodeHost(opts) {
365
345
  await saveNodeHostConfig(config);
366
346
  const cfg = loadConfig();
367
347
  const browserProxy = resolveBrowserProxyConfig();
368
- const resolvedBrowser = resolveBrowserConfig(cfg.browser, cfg);
369
- const browserProxyEnabled = browserProxy.enabled && resolvedBrowser.enabled;
348
+ const resolvedBrowser = resolveBrowserConfig(cfg.browser);
349
+ const browserProxyEnabled = browserProxy.enabled &&
350
+ resolvedBrowser.enabled &&
351
+ shouldStartLocalBrowserServer(resolvedBrowser);
370
352
  const isRemoteMode = cfg.gateway?.mode === "remote";
371
353
  const token = process.env.CLAWDBOT_GATEWAY_TOKEN?.trim() ||
372
354
  (isRemoteMode ? cfg.gateway?.remote?.token : cfg.gateway?.auth?.token);
@@ -447,11 +429,9 @@ async function handleInvoke(frame, client, skillBins) {
447
429
  });
448
430
  }
449
431
  catch (err) {
450
- const message = String(err);
451
- const code = message.toLowerCase().includes("timed out") ? "TIMEOUT" : "INVALID_REQUEST";
452
432
  await sendInvokeResult(client, frame, {
453
433
  ok: false,
454
- error: { code, message },
434
+ error: { code: "INVALID_REQUEST", message: String(err) },
455
435
  });
456
436
  }
457
437
  return;
@@ -530,9 +510,8 @@ async function handleInvoke(frame, client, skillBins) {
530
510
  if (!proxyConfig.enabled) {
531
511
  throw new Error("UNAVAILABLE: node browser proxy disabled");
532
512
  }
533
- await ensureBrowserControlService();
534
- const cfg = loadConfig();
535
- const resolved = resolveBrowserConfig(cfg.browser, cfg);
513
+ await ensureBrowserControlServer();
514
+ const resolved = resolveBrowserConfig(loadConfig().browser);
536
515
  const requestedProfile = typeof params.profile === "string" ? params.profile.trim() : "";
537
516
  const allowedProfiles = proxyConfig.allowProfiles;
538
517
  if (allowedProfiles.length > 0) {
@@ -548,34 +527,51 @@ async function handleInvoke(frame, client, skillBins) {
548
527
  }
549
528
  }
550
529
  }
551
- const method = typeof params.method === "string" ? params.method.toUpperCase() : "GET";
552
- const path = pathValue.startsWith("/") ? pathValue : `/${pathValue}`;
553
- const body = params.body;
554
- const query = {};
530
+ const url = new URL(pathValue.startsWith("/") ? pathValue : `/${pathValue}`, resolved.controlUrl);
555
531
  if (requestedProfile) {
556
- query.profile = requestedProfile;
532
+ url.searchParams.set("profile", requestedProfile);
557
533
  }
558
- const rawQuery = params.query ?? {};
559
- for (const [key, value] of Object.entries(rawQuery)) {
534
+ const query = params.query ?? {};
535
+ for (const [key, value] of Object.entries(query)) {
560
536
  if (value === undefined || value === null)
561
537
  continue;
562
- query[key] = typeof value === "string" ? value : String(value);
538
+ url.searchParams.set(key, String(value));
539
+ }
540
+ const method = typeof params.method === "string" ? params.method.toUpperCase() : "GET";
541
+ const body = params.body;
542
+ const ctrl = new AbortController();
543
+ const timeoutMs = typeof params.timeoutMs === "number" && Number.isFinite(params.timeoutMs)
544
+ ? Math.max(1, Math.floor(params.timeoutMs))
545
+ : 20_000;
546
+ const timer = setTimeout(() => ctrl.abort(), timeoutMs);
547
+ const headers = new Headers();
548
+ let bodyJson;
549
+ if (body !== undefined) {
550
+ headers.set("Content-Type", "application/json");
551
+ bodyJson = JSON.stringify(body);
552
+ }
553
+ const token = process.env.CLAWDBOT_BROWSER_CONTROL_TOKEN?.trim() || resolved.controlToken?.trim();
554
+ if (token) {
555
+ headers.set("Authorization", `Bearer ${token}`);
556
+ }
557
+ let res;
558
+ try {
559
+ res = await fetch(url.toString(), {
560
+ method,
561
+ headers,
562
+ body: bodyJson,
563
+ signal: ctrl.signal,
564
+ });
565
+ }
566
+ finally {
567
+ clearTimeout(timer);
563
568
  }
564
- const dispatcher = createBrowserRouteDispatcher(createBrowserControlContext());
565
- const response = await withTimeout(dispatcher.dispatch({
566
- method: method === "DELETE" ? "DELETE" : method === "POST" ? "POST" : "GET",
567
- path,
568
- query,
569
- body,
570
- }), params.timeoutMs, "browser proxy request");
571
- if (response.status >= 400) {
572
- const message = response.body && typeof response.body === "object" && "error" in response.body
573
- ? String(response.body.error)
574
- : `HTTP ${response.status}`;
575
- throw new Error(message);
569
+ if (!res.ok) {
570
+ const text = await res.text().catch(() => "");
571
+ throw new Error(text ? `${res.status}: ${text}` : `HTTP ${res.status}`);
576
572
  }
577
- const result = response.body;
578
- if (allowedProfiles.length > 0 && path === "/profiles") {
573
+ const result = (await res.json());
574
+ if (allowedProfiles.length > 0 && url.pathname === "/profiles") {
579
575
  const obj = typeof result === "object" && result !== null ? result : {};
580
576
  const profiles = Array.isArray(obj.profiles) ? obj.profiles : [];
581
577
  obj.profiles = profiles.filter((entry) => {
@@ -2,13 +2,13 @@ import { formatCliCommand } from "../cli/command-format.js";
2
2
  export function buildPairingReply(params) {
3
3
  const { channel, idLine, code } = params;
4
4
  return [
5
- "Moltbot: access not configured.",
5
+ "Clawdbot: access not configured.",
6
6
  "",
7
7
  idLine,
8
8
  "",
9
9
  `Pairing code: ${code}`,
10
10
  "",
11
11
  "Ask the bot owner to approve with:",
12
- formatCliCommand(`moltbot pairing approve ${channel} <code>`),
12
+ formatCliCommand(`clawdbot pairing approve ${channel} <code>`),
13
13
  ].join("\n");
14
14
  }
@@ -11,7 +11,6 @@ export { ToolPolicySchema } from "../config/zod-schema.agent-runtime.js";
11
11
  export { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js";
12
12
  export { resolveAckReaction } from "../agents/identity.js";
13
13
  export { SILENT_REPLY_TOKEN, isSilentReplyText } from "../auto-reply/tokens.js";
14
- export { resolveToolsBySender } from "../config/group-policy.js";
15
14
  export { buildPendingHistoryContextFromMap, clearHistoryEntries, clearHistoryEntriesIfEnabled, DEFAULT_GROUP_HISTORY_LIMIT, recordPendingHistoryEntry, recordPendingHistoryEntryIfEnabled, } from "../auto-reply/reply/history.js";
16
15
  export { mergeAllowlist, summarizeMapping } from "../channels/allowlists/resolve-utils.js";
17
16
  export { resolveMentionGating, resolveMentionGatingWithBypass, } from "../channels/mention-gating.js";
@@ -1,7 +1,7 @@
1
1
  import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope.js";
2
2
  import { loadConfig } from "../config/config.js";
3
3
  import { createSubsystemLogger } from "../logging/subsystem.js";
4
- import { loadPoolBotPlugins } from "./loader.js";
4
+ import { loadClawdbotPlugins } from "./loader.js";
5
5
  const log = createSubsystemLogger("plugins");
6
6
  export function registerPluginCliCommands(program, cfg) {
7
7
  const config = cfg ?? loadConfig();
@@ -12,7 +12,7 @@ export function registerPluginCliCommands(program, cfg) {
12
12
  error: (msg) => log.error(msg),
13
13
  debug: (msg) => log.debug(msg),
14
14
  };
15
- const registry = loadPoolBotPlugins({
15
+ const registry = loadClawdbotPlugins({
16
16
  config,
17
17
  workspaceDir,
18
18
  logger,
@@ -2,7 +2,6 @@ import fs from "node:fs";
2
2
  import path from "node:path";
3
3
  import { resolveConfigDir, resolveUserPath } from "../utils.js";
4
4
  import { resolveBundledPluginsDir } from "./bundled-dir.js";
5
- import { getPackageManifestMetadata, } from "./manifest.js";
6
5
  const EXTENSION_EXTS = new Set([".ts", ".js", ".mts", ".cts", ".mjs", ".cjs"]);
7
6
  function isExtensionFile(filePath) {
8
7
  const ext = path.extname(filePath);
@@ -23,7 +22,7 @@ function readPackageManifest(dir) {
23
22
  }
24
23
  }
25
24
  function resolvePackageExtensions(manifest) {
26
- const raw = getPackageManifestMetadata(manifest)?.extensions;
25
+ const raw = manifest.clawdbot?.extensions;
27
26
  if (!Array.isArray(raw))
28
27
  return [];
29
28
  return raw.map((entry) => (typeof entry === "string" ? entry.trim() : "")).filter(Boolean);
@@ -34,7 +33,7 @@ function deriveIdHint(params) {
34
33
  if (!rawPackageName)
35
34
  return base;
36
35
  // Prefer the unscoped name so config keys stay stable even when the npm
37
- // package is scoped (example: @moltbot/voice-call -> voice-call).
36
+ // package is scoped (example: @clawdbot/voice-call -> voice-call).
38
37
  const unscoped = rawPackageName.includes("/")
39
38
  ? (rawPackageName.split("/").pop() ?? rawPackageName)
40
39
  : rawPackageName;
@@ -58,7 +57,7 @@ function addCandidate(params) {
58
57
  packageVersion: manifest?.version?.trim() || undefined,
59
58
  packageDescription: manifest?.description?.trim() || undefined,
60
59
  packageDir: params.packageDir,
61
- packageMoltbot: getPackageManifestMetadata(manifest ?? undefined),
60
+ packageClawdbot: manifest?.clawdbot,
62
61
  });
63
62
  }
64
63
  function discoverInDirectory(params) {
@@ -219,7 +218,7 @@ function discoverFromPath(params) {
219
218
  return;
220
219
  }
221
220
  }
222
- export function discoverPoolBotPlugins(params) {
221
+ export function discoverClawdbotPlugins(params) {
223
222
  const candidates = [];
224
223
  const diagnostics = [];
225
224
  const seen = new Set();