@poolzin/pool-bot 2026.1.26 → 2026.1.30

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 (1186) hide show
  1. package/CHANGELOG.md +76 -1116
  2. package/LICENSE +21 -0
  3. package/README.md +58 -37
  4. package/assets/chrome-extension/README.md +2 -2
  5. package/assets/chrome-extension/background.js +5 -5
  6. package/assets/chrome-extension/manifest.json +3 -3
  7. package/assets/chrome-extension/options.html +5 -6
  8. package/assets/chrome-extension/options.js +1 -1
  9. package/dist/acp/client.js +5 -5
  10. package/dist/acp/server.js +1 -1
  11. package/dist/acp/types.js +2 -2
  12. package/dist/agents/agent-paths.js +3 -3
  13. package/dist/agents/auth-health.js +2 -6
  14. package/dist/agents/auth-profiles/doctor.js +1 -1
  15. package/dist/agents/auth-profiles/external-cli-sync.js +5 -150
  16. package/dist/agents/auth-profiles/oauth.js +26 -7
  17. package/dist/agents/auth-profiles/paths.js +3 -3
  18. package/dist/agents/auth-profiles/store.js +5 -13
  19. package/dist/agents/bash-tools.shared.js +8 -1
  20. package/dist/agents/cli-backends.js +8 -0
  21. package/dist/agents/cli-runner/helpers.js +3 -3
  22. package/dist/agents/cli-runner.js +2 -2
  23. package/dist/agents/compaction.js +3 -0
  24. package/dist/agents/context.js +4 -4
  25. package/dist/agents/docs-path.js +3 -3
  26. package/dist/agents/identity.js +1 -1
  27. package/dist/agents/memory-search.js +7 -2
  28. package/dist/agents/minimax-vlm.js +1 -1
  29. package/dist/agents/model-auth.js +1 -1
  30. package/dist/agents/model-catalog.js +4 -4
  31. package/dist/agents/model-fallback.js +22 -0
  32. package/dist/agents/model-selection.js +1 -1
  33. package/dist/agents/models-config.js +3 -3
  34. package/dist/agents/models-config.providers.js +4 -4
  35. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  36. package/dist/agents/pi-embedded-runner/cache-ttl.js +1 -1
  37. package/dist/agents/pi-embedded-runner/compact.js +8 -8
  38. package/dist/agents/pi-embedded-runner/extensions.js +5 -0
  39. package/dist/agents/pi-embedded-runner/model.js +2 -2
  40. package/dist/agents/pi-embedded-runner/run/attempt.js +10 -6
  41. package/dist/agents/pi-embedded-runner/run.js +4 -4
  42. package/dist/agents/pi-embedded-runner/sandbox-info.js +1 -4
  43. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  44. package/dist/agents/pi-embedded-utils.js +7 -1
  45. package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +20 -0
  46. package/dist/agents/pi-extensions/compaction-safeguard.js +32 -3
  47. package/dist/agents/pi-tools.js +25 -15
  48. package/dist/agents/pi-tools.policy.js +34 -1
  49. package/dist/agents/pi-tools.read.js +2 -2
  50. package/dist/agents/{clawdbot-tools.js → poolbot-tools.js} +2 -5
  51. package/dist/agents/sandbox/browser.js +5 -7
  52. package/dist/agents/sandbox/config.js +0 -12
  53. package/dist/agents/sandbox/constants.js +8 -8
  54. package/dist/agents/sandbox/context.js +3 -3
  55. package/dist/agents/sandbox/docker.js +8 -8
  56. package/dist/agents/sandbox/runtime-status.js +1 -1
  57. package/dist/agents/session-transcript-repair.js +1 -1
  58. package/dist/agents/session-write-lock.js +68 -0
  59. package/dist/agents/skills/config.js +9 -8
  60. package/dist/agents/skills/env-overrides.js +1 -1
  61. package/dist/agents/skills/frontmatter.js +15 -14
  62. package/dist/agents/skills/workspace.js +7 -7
  63. package/dist/agents/skills-install.js +1 -1
  64. package/dist/agents/skills-status.js +12 -12
  65. package/dist/agents/subagent-registry.store.js +2 -2
  66. package/dist/agents/system-prompt.js +24 -35
  67. package/dist/agents/tool-images.js +1 -1
  68. package/dist/agents/tool-policy.js +8 -2
  69. package/dist/agents/tools/browser-tool.js +19 -79
  70. package/dist/agents/tools/browser-tool.schema.js +1 -2
  71. package/dist/agents/tools/cron-tool.js +44 -1
  72. package/dist/agents/tools/discord-actions-guild.js +5 -1
  73. package/dist/agents/tools/image-tool.js +2 -2
  74. package/dist/agents/tools/memory-tool.js +2 -1
  75. package/dist/agents/tools/message-tool.js +1 -0
  76. package/dist/agents/tools/sessions-send-helpers.js +17 -2
  77. package/dist/agents/tools/telegram-actions.js +93 -1
  78. package/dist/agents/tools/web-fetch.js +123 -103
  79. package/dist/agents/tools/web-search.js +7 -7
  80. package/dist/agents/workspace.js +36 -0
  81. package/dist/auto-reply/commands-registry.data.js +68 -3
  82. package/dist/auto-reply/commands-registry.js +14 -11
  83. package/dist/auto-reply/reply/agent-runner-execution.js +21 -3
  84. package/dist/auto-reply/reply/agent-runner-memory.js +5 -0
  85. package/dist/auto-reply/reply/bash-command.js +2 -2
  86. package/dist/auto-reply/reply/commands-context-report.js +2 -2
  87. package/dist/auto-reply/reply/commands-info.js +50 -5
  88. package/dist/auto-reply/reply/commands-session.js +4 -4
  89. package/dist/auto-reply/reply/commands-tts.js +61 -63
  90. package/dist/auto-reply/reply/directive-handling.shared.js +1 -1
  91. package/dist/auto-reply/reply/dispatch-from-config.js +65 -1
  92. package/dist/auto-reply/reply/followup-runner.js +5 -0
  93. package/dist/auto-reply/reply/get-reply-inline-actions.js +2 -2
  94. package/dist/auto-reply/reply/get-reply-run.js +4 -0
  95. package/dist/auto-reply/reply/groups.js +1 -1
  96. package/dist/auto-reply/reply/history.js +23 -0
  97. package/dist/auto-reply/reply/reply-elevated.js +1 -1
  98. package/dist/auto-reply/reply/session-updates.js +6 -1
  99. package/dist/auto-reply/reply/stage-sandbox-media.js +1 -1
  100. package/dist/auto-reply/status.js +142 -50
  101. package/dist/browser/bridge-server.js +1 -3
  102. package/dist/browser/client-actions-core.js +13 -7
  103. package/dist/browser/client-actions-observe.js +14 -8
  104. package/dist/browser/client-actions-state.js +21 -15
  105. package/dist/browser/client-fetch.js +74 -61
  106. package/dist/browser/client.js +19 -21
  107. package/dist/browser/config.js +13 -26
  108. package/dist/browser/constants.js +1 -1
  109. package/dist/browser/control-service.js +72 -0
  110. package/dist/browser/extension-relay.js +3 -3
  111. package/dist/browser/pw-session.js +41 -4
  112. package/dist/browser/pw-tools-core.downloads.js +1 -1
  113. package/dist/browser/pw-tools-core.interactions.js +5 -5
  114. package/dist/browser/pw-tools-core.responses.js +1 -1
  115. package/dist/browser/routes/agent.act.js +13 -0
  116. package/dist/browser/routes/agent.debug.js +1 -1
  117. package/dist/browser/routes/basic.js +0 -1
  118. package/dist/browser/routes/dispatcher.js +86 -0
  119. package/dist/browser/server-context.js +3 -3
  120. package/dist/browser/server.js +7 -9
  121. package/dist/build-info.json +3 -3
  122. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  123. package/dist/canvas-host/a2ui/a2ui.bundle.js +1620 -1618
  124. package/dist/canvas-host/a2ui/index.html +28 -28
  125. package/dist/canvas-host/a2ui.js +27 -21
  126. package/dist/canvas-host/server.js +66 -32
  127. package/dist/channels/plugins/actions/discord/handle-action.guild-admin.js +5 -1
  128. package/dist/channels/plugins/actions/telegram.js +60 -7
  129. package/dist/channels/plugins/catalog.js +6 -4
  130. package/dist/channels/plugins/group-mentions.js +48 -1
  131. package/dist/channels/plugins/helpers.js +2 -2
  132. package/dist/channels/plugins/message-action-names.js +1 -0
  133. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  134. package/dist/channels/plugins/onboarding/signal.js +2 -2
  135. package/dist/channels/plugins/onboarding/slack.js +4 -4
  136. package/dist/channels/plugins/onboarding/telegram.js +17 -9
  137. package/dist/channels/plugins/onboarding/whatsapp.js +4 -4
  138. package/dist/channels/plugins/outbound/telegram.js +38 -0
  139. package/dist/channels/plugins/pairing-message.js +1 -1
  140. package/dist/channels/plugins/status-issues/bluebubbles.js +1 -1
  141. package/dist/channels/plugins/status-issues/whatsapp.js +2 -2
  142. package/dist/channels/registry.js +1 -1
  143. package/dist/cli/acp-cli.js +2 -2
  144. package/dist/cli/argv.js +14 -7
  145. package/dist/cli/banner.js +3 -1
  146. package/dist/cli/browser-cli-actions-input/register.element.js +72 -44
  147. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +55 -35
  148. package/dist/cli/browser-cli-actions-input/register.form-wait-eval.js +41 -28
  149. package/dist/cli/browser-cli-actions-input/register.navigation.js +23 -14
  150. package/dist/cli/browser-cli-actions-input/shared.js +10 -3
  151. package/dist/cli/browser-cli-actions-observe.js +29 -21
  152. package/dist/cli/browser-cli-debug.js +49 -35
  153. package/dist/cli/browser-cli-examples.js +29 -29
  154. package/dist/cli/browser-cli-extension.js +8 -8
  155. package/dist/cli/browser-cli-inspect.js +23 -17
  156. package/dist/cli/browser-cli-manage.js +106 -56
  157. package/dist/cli/browser-cli-shared.js +34 -1
  158. package/dist/cli/browser-cli-state.cookies-storage.js +53 -39
  159. package/dist/cli/browser-cli-state.js +90 -64
  160. package/dist/cli/browser-cli.js +4 -5
  161. package/dist/cli/channels-cli.js +1 -1
  162. package/dist/cli/cli-name.js +26 -0
  163. package/dist/cli/command-format.js +11 -7
  164. package/dist/cli/config-cli.js +2 -2
  165. package/dist/cli/cron-cli/register.js +1 -1
  166. package/dist/cli/daemon-cli/install.js +1 -1
  167. package/dist/cli/daemon-cli/register.js +1 -1
  168. package/dist/cli/daemon-cli/shared.js +5 -3
  169. package/dist/cli/daemon-cli/status.print.js +6 -6
  170. package/dist/cli/directory-cli.js +1 -1
  171. package/dist/cli/dns-cli.js +7 -7
  172. package/dist/cli/docs-cli.js +2 -2
  173. package/dist/cli/exec-approvals-cli.js +2 -2
  174. package/dist/cli/gateway-cli/dev.js +4 -4
  175. package/dist/cli/gateway-cli/register.js +1 -1
  176. package/dist/cli/gateway-cli/run.js +11 -8
  177. package/dist/cli/gateway-cli/shared.js +4 -4
  178. package/dist/cli/hooks-cli.js +3 -3
  179. package/dist/cli/logs-cli.js +3 -3
  180. package/dist/cli/memory-cli.js +1 -1
  181. package/dist/cli/models-cli.js +2 -2
  182. package/dist/cli/node-cli/daemon.js +2 -2
  183. package/dist/cli/node-cli/register.js +1 -1
  184. package/dist/cli/nodes-camera.js +3 -1
  185. package/dist/cli/nodes-canvas.js +3 -1
  186. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  187. package/dist/cli/nodes-cli/register.js +1 -1
  188. package/dist/cli/nodes-screen.js +1 -1
  189. package/dist/cli/pairing-cli.js +3 -3
  190. package/dist/cli/plugin-registry.js +2 -2
  191. package/dist/cli/plugins-cli.js +3 -3
  192. package/dist/cli/profile.js +2 -2
  193. package/dist/cli/program/command-registry.js +5 -0
  194. package/dist/cli/program/config-guard.js +1 -1
  195. package/dist/cli/program/help.js +15 -16
  196. package/dist/cli/program/message/register.send.js +2 -1
  197. package/dist/cli/program/preaction.js +4 -2
  198. package/dist/cli/program/register.agent.js +12 -12
  199. package/dist/cli/program/register.completion.js +355 -0
  200. package/dist/cli/program/register.configure.js +1 -1
  201. package/dist/cli/program/register.maintenance.js +4 -4
  202. package/dist/cli/program/register.message.js +5 -5
  203. package/dist/cli/program/register.onboard.js +5 -3
  204. package/dist/cli/program/register.setup.js +2 -2
  205. package/dist/cli/program/register.status-health-sessions.js +13 -13
  206. package/dist/cli/run-main.js +11 -4
  207. package/dist/cli/sandbox-cli.js +19 -19
  208. package/dist/cli/security-cli.js +18 -8
  209. package/dist/cli/skills-cli.js +3 -3
  210. package/dist/cli/system-cli.js +1 -1
  211. package/dist/cli/tagline.js +1 -1
  212. package/dist/cli/tui-cli.js +1 -1
  213. package/dist/cli/update-cli.js +58 -42
  214. package/dist/cli/webhooks-cli.js +6 -6
  215. package/dist/commands/agent-via-gateway.js +1 -1
  216. package/dist/commands/agent.js +2 -1
  217. package/dist/commands/agents.command-shared.js +1 -1
  218. package/dist/commands/agents.commands.add.js +2 -3
  219. package/dist/commands/agents.commands.list.js +1 -1
  220. package/dist/commands/auth-choice-options.js +4 -54
  221. package/dist/commands/auth-choice.apply.anthropic.js +6 -109
  222. package/dist/commands/auth-choice.apply.openai.js +1 -33
  223. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  224. package/dist/commands/channels/list.js +2 -2
  225. package/dist/commands/channels/shared.js +1 -1
  226. package/dist/commands/channels/status.js +1 -1
  227. package/dist/commands/chutes-oauth.js +1 -1
  228. package/dist/commands/configure.channels.js +4 -4
  229. package/dist/commands/configure.gateway-auth.js +1 -8
  230. package/dist/commands/configure.gateway.js +1 -10
  231. package/dist/commands/configure.wizard.js +11 -11
  232. package/dist/commands/daemon-install-helpers.js +1 -1
  233. package/dist/commands/dashboard.js +1 -1
  234. package/dist/commands/docs.js +5 -5
  235. package/dist/commands/doctor-auth.js +122 -3
  236. package/dist/commands/doctor-config-flow.js +7 -7
  237. package/dist/commands/doctor-format.js +2 -2
  238. package/dist/commands/doctor-gateway-daemon-flow.js +1 -1
  239. package/dist/commands/doctor-gateway-services.js +3 -3
  240. package/dist/commands/doctor-platform-notes.js +1 -1
  241. package/dist/commands/doctor-security.js +48 -1
  242. package/dist/commands/doctor-state-integrity.js +3 -3
  243. package/dist/commands/doctor-ui.js +2 -2
  244. package/dist/commands/doctor-update.js +4 -4
  245. package/dist/commands/doctor-workspace-status.js +2 -2
  246. package/dist/commands/doctor-workspace.js +4 -4
  247. package/dist/commands/doctor.js +13 -12
  248. package/dist/commands/gateway-status.js +2 -2
  249. package/dist/commands/models/auth.js +23 -22
  250. package/dist/commands/models/list.probe.js +2 -2
  251. package/dist/commands/models/list.registry.js +4 -4
  252. package/dist/commands/models/list.status-command.js +8 -9
  253. package/dist/commands/onboard-auth.credentials.js +2 -2
  254. package/dist/commands/onboard-channels.js +3 -3
  255. package/dist/commands/onboard-helpers.js +4 -4
  256. package/dist/commands/onboard-hooks.js +4 -4
  257. package/dist/commands/onboard-non-interactive/local/auth-choice.js +38 -34
  258. package/dist/commands/onboard-non-interactive/local/gateway-config.js +7 -4
  259. package/dist/commands/onboard-non-interactive/local.js +1 -1
  260. package/dist/commands/onboard-non-interactive/remote.js +1 -1
  261. package/dist/commands/onboard-non-interactive.js +1 -1
  262. package/dist/commands/onboard-remote.js +2 -2
  263. package/dist/commands/onboard-skills.js +2 -2
  264. package/dist/commands/onboard.js +25 -4
  265. package/dist/commands/onboarding/plugin-install.js +2 -2
  266. package/dist/commands/reset.js +3 -3
  267. package/dist/commands/sandbox-display.js +1 -1
  268. package/dist/commands/sandbox-explain.js +2 -2
  269. package/dist/commands/setup.js +2 -2
  270. package/dist/commands/signal-install.js +2 -2
  271. package/dist/commands/status-all/diagnosis.js +1 -1
  272. package/dist/commands/status-all/report-lines.js +1 -1
  273. package/dist/commands/status-all.js +3 -3
  274. package/dist/commands/status.command.js +9 -9
  275. package/dist/commands/status.update.js +3 -3
  276. package/dist/commands/uninstall.js +4 -4
  277. package/dist/compat/legacy-names.js +5 -0
  278. package/dist/config/config.js +1 -1
  279. package/dist/config/group-policy.js +69 -0
  280. package/dist/config/io.js +17 -5
  281. package/dist/config/legacy.migrations.part-3.js +3 -0
  282. package/dist/config/logging.js +3 -3
  283. package/dist/config/paths.js +44 -14
  284. package/dist/config/schema.js +23 -11
  285. package/dist/config/sessions/transcript.js +1 -1
  286. package/dist/config/types.js +1 -1
  287. package/dist/config/types.poolbot.js +1 -0
  288. package/dist/config/validation.js +2 -2
  289. package/dist/config/version.js +4 -4
  290. package/dist/config/zod-schema.agent-defaults.js +1 -0
  291. package/dist/config/zod-schema.agent-runtime.js +39 -7
  292. package/dist/config/zod-schema.hooks.js +2 -0
  293. package/dist/config/zod-schema.js +9 -3
  294. package/dist/config/zod-schema.providers-core.js +23 -0
  295. package/dist/config/zod-schema.providers-whatsapp.js +3 -0
  296. package/dist/control-ui/assets/index-CIRDm-Lu.css +1 -0
  297. package/dist/control-ui/assets/{index-Cl-Y9zqE.js → index-CmNMuoem.js} +620 -578
  298. package/dist/control-ui/assets/index-CmNMuoem.js.map +1 -0
  299. package/dist/control-ui/index.html +4 -4
  300. package/dist/cron/isolated-agent/run.js +38 -3
  301. package/dist/daemon/constants.js +16 -16
  302. package/dist/daemon/inspect.js +12 -12
  303. package/dist/daemon/paths.js +1 -1
  304. package/dist/daemon/program-args.js +1 -1
  305. package/dist/daemon/systemd-hints.js +1 -1
  306. package/dist/daemon/systemd-unit.js +1 -1
  307. package/dist/discord/monitor/listeners.js +25 -1
  308. package/dist/discord/monitor/native-command.js +7 -5
  309. package/dist/discord/monitor/presence-cache.js +38 -0
  310. package/dist/discord/monitor/provider.js +21 -7
  311. package/dist/entry.js +4 -4
  312. package/dist/gateway/auth.js +52 -19
  313. package/dist/gateway/hooks/index.js +53 -0
  314. package/dist/gateway/hooks/lifecycle-hooks-integration.js +256 -0
  315. package/dist/gateway/hooks/lifecycle-hooks.js +236 -0
  316. package/dist/gateway/hooks/progressive-disclosure-details.js +237 -0
  317. package/dist/gateway/hooks/progressive-disclosure-index.js +354 -0
  318. package/dist/gateway/hooks/progressive-disclosure-timeline.js +231 -0
  319. package/dist/gateway/hooks/progressive-disclosure-types.js +65 -0
  320. package/dist/gateway/hooks/progressive-disclosure.js +242 -0
  321. package/dist/gateway/hooks/tool-usage-capture.js +253 -0
  322. package/dist/gateway/hooks/tool-usage-storage.js +144 -0
  323. package/dist/gateway/hooks-mapping.js +18 -4
  324. package/dist/gateway/hooks.js +5 -7
  325. package/dist/gateway/http-utils.js +3 -5
  326. package/dist/gateway/net.js +1 -1
  327. package/dist/gateway/openai-http.js +3 -3
  328. package/dist/gateway/openresponses-http.js +4 -4
  329. package/dist/gateway/protocol/client-info.js +5 -5
  330. package/dist/gateway/protocol/schema/logs-chat.js +1 -1
  331. package/dist/gateway/server/health-state.js +3 -3
  332. package/dist/gateway/server/hooks.js +1 -0
  333. package/dist/gateway/server/ws-connection/message-handler.js +44 -35
  334. package/dist/gateway/server-browser.js +14 -3
  335. package/dist/gateway/server-chat.js +28 -2
  336. package/dist/gateway/server-discovery-runtime.js +25 -17
  337. package/dist/gateway/server-discovery.js +5 -5
  338. package/dist/gateway/server-http.js +9 -3
  339. package/dist/gateway/server-methods/agent.js +2 -0
  340. package/dist/gateway/server-methods/browser.js +204 -0
  341. package/dist/gateway/server-methods/chat.js +5 -0
  342. package/dist/gateway/server-methods/config.js +8 -8
  343. package/dist/gateway/server-methods/logs.js +1 -1
  344. package/dist/gateway/server-methods/nodes.js +2 -0
  345. package/dist/gateway/server-methods/skills.js +3 -3
  346. package/dist/gateway/server-methods/update.js +2 -2
  347. package/dist/gateway/server-methods-list.js +1 -0
  348. package/dist/gateway/server-methods.js +3 -0
  349. package/dist/gateway/server-plugins.js +2 -2
  350. package/dist/gateway/server-restart-sentinel.js +10 -5
  351. package/dist/gateway/server-runtime-config.js +5 -2
  352. package/dist/gateway/server.impl.js +11 -6
  353. package/dist/gateway/session-utils.fs.js +1 -1
  354. package/dist/gateway/session-utils.js +31 -11
  355. package/dist/gateway/test-helpers.mocks.js +5 -5
  356. package/dist/gateway/test-helpers.server.js +30 -11
  357. package/dist/gateway/tools-invoke-http.js +15 -8
  358. package/dist/hooks/bundled/boot-md/HOOK.md +3 -3
  359. package/dist/hooks/bundled/command-logger/HOOK.md +12 -12
  360. package/dist/hooks/bundled/command-logger/handler.js +1 -1
  361. package/dist/hooks/bundled/session-memory/HOOK.md +4 -4
  362. package/dist/hooks/bundled/session-memory/handler.js +2 -2
  363. package/dist/hooks/bundled/soul-evil/HOOK.md +5 -5
  364. package/dist/hooks/bundled-dir.js +1 -1
  365. package/dist/hooks/config.js +8 -7
  366. package/dist/hooks/frontmatter.js +16 -15
  367. package/dist/hooks/gmail-ops.js +4 -4
  368. package/dist/hooks/hooks-status.js +13 -13
  369. package/dist/hooks/install.js +8 -7
  370. package/dist/hooks/internal-hooks.js +1 -1
  371. package/dist/hooks/llm-slug-generator.js +1 -1
  372. package/dist/hooks/loader.js +3 -3
  373. package/dist/hooks/plugin-hooks.js +8 -8
  374. package/dist/hooks/workspace.js +10 -9
  375. package/dist/imessage/monitor/monitor-provider.js +16 -3
  376. package/dist/index.js +4 -4
  377. package/dist/infra/agent-events.js +3 -0
  378. package/dist/infra/bonjour-discovery.js +9 -9
  379. package/dist/infra/bonjour.js +19 -12
  380. package/dist/infra/device-identity.js +1 -1
  381. package/dist/infra/dotenv.js +1 -1
  382. package/dist/infra/exec-approvals.js +2 -2
  383. package/dist/infra/fs-safe.js +76 -0
  384. package/dist/infra/gateway-lock.js +1 -1
  385. package/dist/infra/heartbeat-visibility.js +14 -0
  386. package/dist/infra/heartbeat-wake.js +2 -2
  387. package/dist/infra/machine-name.js +1 -1
  388. package/dist/infra/net/ssrf.js +77 -1
  389. package/dist/infra/outbound/message-action-spec.js +1 -0
  390. package/dist/infra/outbound/targets.js +1 -1
  391. package/dist/infra/path-env.js +7 -7
  392. package/dist/infra/{clawdbot-root.js → poolbot-root.js} +3 -2
  393. package/dist/infra/ports-format.js +2 -2
  394. package/dist/infra/ports.js +2 -2
  395. package/dist/infra/provider-usage.auth.js +2 -4
  396. package/dist/infra/provider-usage.fetch.claude.js +1 -1
  397. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  398. package/dist/infra/restart-sentinel.js +1 -1
  399. package/dist/infra/restart.js +1 -1
  400. package/dist/infra/retry-policy.js +4 -1
  401. package/dist/infra/runtime-guard.js +2 -2
  402. package/dist/infra/shell-env.js +1 -1
  403. package/dist/infra/skills-remote.js +3 -3
  404. package/dist/infra/tailscale.js +63 -1
  405. package/dist/infra/tls/gateway.js +1 -1
  406. package/dist/infra/unhandled-rejections.js +89 -2
  407. package/dist/infra/update-check.js +2 -4
  408. package/dist/infra/update-global.js +5 -5
  409. package/dist/infra/update-runner.js +32 -8
  410. package/dist/infra/update-startup.js +3 -3
  411. package/dist/infra/warnings.js +1 -1
  412. package/dist/infra/widearea-dns.js +10 -10
  413. package/dist/line/monitor.js +1 -5
  414. package/dist/line/signature.js +11 -0
  415. package/dist/line/webhook.js +2 -6
  416. package/dist/logging/logger.js +4 -4
  417. package/dist/macos/gateway-daemon.js +2 -2
  418. package/dist/macos/relay.js +4 -4
  419. package/dist/media/host.js +1 -1
  420. package/dist/media/image-ops.js +1 -1
  421. package/dist/media/input-files.js +40 -32
  422. package/dist/media/server.js +39 -15
  423. package/dist/media/store.js +109 -53
  424. package/dist/media-understanding/attachments.js +1 -1
  425. package/dist/media-understanding/providers/image.js +2 -2
  426. package/dist/media-understanding/runner.js +33 -1
  427. package/dist/memory/batch-gemini.js +1 -1
  428. package/dist/memory/batch-openai.js +1 -1
  429. package/dist/memory/embeddings.js +1 -1
  430. package/dist/memory/index.js +5 -0
  431. package/dist/memory/manager.js +25 -2
  432. package/dist/node-host/runner.js +60 -56
  433. package/dist/pairing/pairing-messages.js +2 -2
  434. package/dist/plugin-sdk/index.js +1 -0
  435. package/dist/plugins/cli.js +2 -2
  436. package/dist/plugins/discovery.js +6 -5
  437. package/dist/plugins/install.js +8 -7
  438. package/dist/plugins/loader.js +10 -4
  439. package/dist/plugins/manifest-registry.js +2 -2
  440. package/dist/plugins/manifest.js +16 -1
  441. package/dist/plugins/providers.js +2 -2
  442. package/dist/plugins/registry.js +5 -5
  443. package/dist/plugins/runtime.js +1 -1
  444. package/dist/plugins/services.js +3 -3
  445. package/dist/plugins/status.js +2 -2
  446. package/dist/plugins/tools.js +2 -2
  447. package/dist/plugins/update.js +3 -3
  448. package/dist/providers/qwen-portal-oauth.js +1 -1
  449. package/dist/routing/session-key.js +17 -12
  450. package/dist/security/audit-extra.js +116 -69
  451. package/dist/security/audit-fs.js +78 -0
  452. package/dist/security/audit.js +121 -88
  453. package/dist/security/external-content.js +143 -0
  454. package/dist/security/fix.js +93 -8
  455. package/dist/security/windows-acl.js +162 -0
  456. package/dist/slack/monitor/media.js +32 -4
  457. package/dist/slack/monitor/message-handler/dispatch.js +2 -1
  458. package/dist/slack/monitor/slash.js +3 -3
  459. package/dist/slack/monitor.test-helpers.js +1 -1
  460. package/dist/telegram/api-logging.js +24 -0
  461. package/dist/telegram/bot/delivery.js +139 -22
  462. package/dist/telegram/bot-handlers.js +70 -8
  463. package/dist/telegram/bot-message-context.js +79 -21
  464. package/dist/telegram/bot-message-dispatch.js +64 -0
  465. package/dist/telegram/bot-native-commands.js +244 -94
  466. package/dist/telegram/bot.js +18 -2
  467. package/dist/telegram/fetch.js +25 -1
  468. package/dist/telegram/monitor.js +11 -3
  469. package/dist/telegram/network-config.js +23 -0
  470. package/dist/telegram/network-errors.js +103 -0
  471. package/dist/telegram/send.js +148 -4
  472. package/dist/telegram/sticker-cache.js +202 -0
  473. package/dist/telegram/webhook-set.js +13 -6
  474. package/dist/telegram/webhook.js +8 -3
  475. package/dist/terminal/links.js +1 -1
  476. package/dist/tts/tts.js +27 -22
  477. package/dist/tui/components/filterable-select-list.js +1 -1
  478. package/dist/tui/components/searchable-select-list.js +2 -1
  479. package/dist/tui/gateway-chat.js +1 -1
  480. package/dist/tui/tui.js +1 -1
  481. package/dist/utils.js +1 -1
  482. package/dist/version.js +1 -1
  483. package/dist/web/active-listener.js +1 -1
  484. package/dist/web/auth-store.js +1 -1
  485. package/dist/web/auto-reply/monitor/process-message.js +1 -1
  486. package/dist/web/auto-reply/monitor.js +1 -1
  487. package/dist/web/login.js +1 -1
  488. package/dist/web/session.js +2 -2
  489. package/dist/wizard/onboarding.finalize.js +24 -21
  490. package/dist/wizard/onboarding.gateway-config.js +1 -11
  491. package/dist/wizard/onboarding.js +22 -11
  492. package/docs/CNAME +1 -1
  493. package/docs/RELEASE_WORKFLOW.md +133 -0
  494. package/docs/RELEASE_WORKFOTS_COMPARISON.md +151 -0
  495. package/docs/WHATSAPP-HEARTBEAT-TROUBLESHOOTING.md +319 -0
  496. package/docs/WORKFOTS_OPTIMIZATION.md +138 -0
  497. package/docs/_config.yml +2 -2
  498. package/docs/_layouts/default.html +9 -9
  499. package/docs/adr/002-model-fallback-router.md +104 -0
  500. package/docs/assets/terminal.css +3 -0
  501. package/docs/assets/theme.js +1 -1
  502. package/docs/automation/auth-monitoring.md +7 -7
  503. package/docs/automation/cron-jobs.md +17 -17
  504. package/docs/automation/cron-vs-heartbeat.md +8 -8
  505. package/docs/automation/gmail-pubsub.md +23 -21
  506. package/docs/automation/poll.md +7 -7
  507. package/docs/automation/webhook.md +13 -8
  508. package/docs/bedrock.md +10 -10
  509. package/docs/brave-search.md +1 -1
  510. package/docs/broadcast-groups.md +4 -4
  511. package/docs/channels/bluebubbles.md +13 -12
  512. package/docs/channels/discord.md +21 -16
  513. package/docs/channels/googlechat.md +16 -16
  514. package/docs/channels/imessage.md +12 -12
  515. package/docs/channels/index.md +6 -4
  516. package/docs/channels/line.md +183 -0
  517. package/docs/channels/location.md +1 -1
  518. package/docs/channels/matrix.md +15 -15
  519. package/docs/channels/mattermost.md +8 -8
  520. package/docs/channels/msteams.md +30 -26
  521. package/docs/channels/nextcloud-talk.md +7 -7
  522. package/docs/channels/nostr.md +9 -9
  523. package/docs/channels/signal.md +9 -9
  524. package/docs/channels/slack.md +15 -13
  525. package/docs/channels/telegram.md +149 -20
  526. package/docs/channels/tlon.md +5 -5
  527. package/docs/channels/troubleshooting.md +2 -2
  528. package/docs/channels/twitch.md +366 -0
  529. package/docs/channels/whatsapp.md +25 -25
  530. package/docs/channels/zalo.md +8 -8
  531. package/docs/channels/zalouser.md +12 -12
  532. package/docs/cli/acp.md +24 -24
  533. package/docs/cli/agent.md +6 -6
  534. package/docs/cli/agents.md +9 -9
  535. package/docs/cli/approvals.md +14 -14
  536. package/docs/cli/browser.md +33 -35
  537. package/docs/cli/channels.md +21 -21
  538. package/docs/cli/config.md +15 -15
  539. package/docs/cli/configure.md +6 -6
  540. package/docs/cli/cron.md +5 -5
  541. package/docs/cli/dashboard.md +4 -4
  542. package/docs/cli/devices.md +13 -13
  543. package/docs/cli/directory.md +12 -12
  544. package/docs/cli/dns.md +5 -5
  545. package/docs/cli/docs.md +5 -5
  546. package/docs/cli/doctor.md +6 -6
  547. package/docs/cli/gateway.md +24 -24
  548. package/docs/cli/health.md +5 -5
  549. package/docs/cli/hooks.md +34 -34
  550. package/docs/cli/index.md +46 -52
  551. package/docs/cli/logs.md +6 -6
  552. package/docs/cli/memory.md +11 -11
  553. package/docs/cli/message.md +11 -11
  554. package/docs/cli/models.md +17 -17
  555. package/docs/cli/node.md +14 -14
  556. package/docs/cli/nodes.md +14 -14
  557. package/docs/cli/onboard.md +7 -6
  558. package/docs/cli/pairing.md +4 -4
  559. package/docs/cli/plugins.md +16 -16
  560. package/docs/cli/reset.md +5 -5
  561. package/docs/cli/sandbox.md +28 -28
  562. package/docs/cli/security.md +5 -5
  563. package/docs/cli/sessions.md +5 -5
  564. package/docs/cli/setup.md +6 -6
  565. package/docs/cli/skills.md +6 -6
  566. package/docs/cli/status.md +7 -7
  567. package/docs/cli/system.md +6 -6
  568. package/docs/cli/tui.md +5 -5
  569. package/docs/cli/uninstall.md +5 -5
  570. package/docs/cli/update.md +20 -20
  571. package/docs/cli/voicecall.md +9 -9
  572. package/docs/cli/webhooks.md +5 -5
  573. package/docs/concepts/agent-loop.md +5 -5
  574. package/docs/concepts/agent-workspace.md +20 -20
  575. package/docs/concepts/agent.md +12 -12
  576. package/docs/concepts/architecture.md +1 -1
  577. package/docs/concepts/channel-routing.md +4 -4
  578. package/docs/concepts/compaction.md +5 -5
  579. package/docs/concepts/context.md +6 -6
  580. package/docs/concepts/group-messages.md +6 -6
  581. package/docs/concepts/groups.md +41 -5
  582. package/docs/concepts/markdown-formatting.md +3 -3
  583. package/docs/concepts/memory.md +14 -14
  584. package/docs/concepts/messages.md +4 -4
  585. package/docs/concepts/model-failover.md +14 -14
  586. package/docs/concepts/model-providers.md +22 -22
  587. package/docs/concepts/models.md +27 -27
  588. package/docs/concepts/multi-agent.md +18 -18
  589. package/docs/concepts/oauth.md +31 -58
  590. package/docs/concepts/presence.md +2 -2
  591. package/docs/concepts/retry.md +1 -1
  592. package/docs/concepts/session-pruning.md +1 -1
  593. package/docs/concepts/session-tool.md +4 -4
  594. package/docs/concepts/session.md +14 -14
  595. package/docs/concepts/streaming.md +3 -3
  596. package/docs/concepts/system-prompt.md +11 -11
  597. package/docs/concepts/timezone.md +2 -2
  598. package/docs/concepts/typebox.md +2 -2
  599. package/docs/concepts/typing-indicators.md +2 -2
  600. package/docs/concepts/usage-tracking.md +3 -3
  601. package/docs/date-time.md +2 -2
  602. package/docs/debug/node-issue.md +4 -4
  603. package/docs/debugging.md +14 -14
  604. package/docs/diagnostics/flags.md +5 -5
  605. package/docs/docs.json +37 -7
  606. package/docs/environment.md +4 -4
  607. package/docs/experiments/plans/cron-add-hardening.md +1 -1
  608. package/docs/experiments/plans/openresponses-gateway.md +2 -2
  609. package/docs/experiments/research/memory.md +6 -6
  610. package/docs/gateway/authentication.md +33 -57
  611. package/docs/gateway/background-process.md +1 -1
  612. package/docs/gateway/bonjour.md +21 -21
  613. package/docs/gateway/bridge-protocol.md +2 -2
  614. package/docs/gateway/cli-backends.md +13 -12
  615. package/docs/gateway/configuration-examples.md +14 -14
  616. package/docs/gateway/configuration.md +145 -132
  617. package/docs/gateway/discovery.md +6 -6
  618. package/docs/gateway/doctor.md +26 -26
  619. package/docs/gateway/gateway-lock.md +1 -1
  620. package/docs/gateway/health.md +11 -11
  621. package/docs/gateway/heartbeat.md +5 -5
  622. package/docs/gateway/index.md +56 -56
  623. package/docs/gateway/local-models.md +2 -2
  624. package/docs/gateway/logging.md +8 -8
  625. package/docs/gateway/multiple-gateways.md +23 -23
  626. package/docs/gateway/openai-http-api.md +10 -10
  627. package/docs/gateway/openresponses-http-api.md +10 -10
  628. package/docs/gateway/pairing.md +8 -8
  629. package/docs/gateway/protocol.md +5 -4
  630. package/docs/gateway/remote-gateway-readme.md +13 -13
  631. package/docs/gateway/remote.md +4 -4
  632. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +10 -7
  633. package/docs/gateway/sandboxing.md +8 -6
  634. package/docs/gateway/security/formal-verification.md +107 -0
  635. package/docs/gateway/{security.md → security/index.md} +151 -71
  636. package/docs/gateway/tailscale.md +16 -35
  637. package/docs/gateway/tools-invoke-http-api.md +3 -3
  638. package/docs/gateway/troubleshooting.md +108 -113
  639. package/docs/help/faq.md +326 -335
  640. package/docs/help/troubleshooting.md +15 -15
  641. package/docs/hooks/soul-evil.md +2 -2
  642. package/docs/hooks.md +60 -60
  643. package/docs/index.md +35 -35
  644. package/docs/install/ansible.md +35 -35
  645. package/docs/install/development-channels.md +10 -10
  646. package/docs/install/docker.md +31 -31
  647. package/docs/install/index.md +28 -27
  648. package/docs/install/installer.md +21 -21
  649. package/docs/install/migrating.md +190 -0
  650. package/docs/install/nix.md +17 -17
  651. package/docs/install/node.md +7 -6
  652. package/docs/install/uninstall.md +29 -29
  653. package/docs/install/updating.md +50 -49
  654. package/docs/logging.md +58 -58
  655. package/docs/multi-agent-sandbox-tools.md +7 -7
  656. package/docs/network.md +1 -1
  657. package/docs/nodes/audio.md +2 -2
  658. package/docs/nodes/camera.md +18 -18
  659. package/docs/nodes/images.md +4 -4
  660. package/docs/nodes/index.md +55 -55
  661. package/docs/nodes/location-command.md +2 -2
  662. package/docs/nodes/media-understanding.md +5 -5
  663. package/docs/nodes/talk.md +1 -1
  664. package/docs/nodes/voicewake.md +2 -2
  665. package/docs/northflank.mdx +53 -0
  666. package/docs/perplexity.md +2 -2
  667. package/docs/platforms/android.md +13 -13
  668. package/docs/platforms/digitalocean.md +243 -0
  669. package/docs/platforms/exe-dev.md +23 -23
  670. package/docs/platforms/fly.md +129 -18
  671. package/docs/platforms/gcp.md +498 -0
  672. package/docs/platforms/hetzner.md +30 -30
  673. package/docs/platforms/index.md +9 -9
  674. package/docs/platforms/ios.md +13 -13
  675. package/docs/platforms/linux.md +11 -11
  676. package/docs/platforms/mac/bundled-gateway.md +14 -14
  677. package/docs/platforms/mac/canvas.md +14 -14
  678. package/docs/platforms/mac/child-process.md +9 -9
  679. package/docs/platforms/mac/dev-setup.md +11 -11
  680. package/docs/platforms/mac/health.md +2 -2
  681. package/docs/platforms/mac/icon.md +1 -1
  682. package/docs/platforms/mac/logging.md +7 -7
  683. package/docs/platforms/mac/menu-bar.md +1 -1
  684. package/docs/platforms/mac/peekaboo.md +9 -9
  685. package/docs/platforms/mac/permissions.md +3 -3
  686. package/docs/platforms/mac/release.md +20 -20
  687. package/docs/platforms/mac/remote.md +14 -14
  688. package/docs/platforms/mac/signing.md +7 -7
  689. package/docs/platforms/mac/skills.md +4 -4
  690. package/docs/platforms/mac/voice-overlay.md +2 -2
  691. package/docs/platforms/mac/webchat.md +2 -2
  692. package/docs/platforms/mac/xpc.md +4 -4
  693. package/docs/platforms/macos-vm.md +27 -27
  694. package/docs/platforms/macos.md +20 -20
  695. package/docs/platforms/oracle.md +291 -0
  696. package/docs/platforms/raspberry-pi.md +354 -0
  697. package/docs/platforms/windows.md +11 -11
  698. package/docs/plugin.md +64 -64
  699. package/docs/plugins/agent-tools.md +1 -1
  700. package/docs/plugins/manifest.md +4 -4
  701. package/docs/plugins/voice-call.md +15 -12
  702. package/docs/plugins/zalouser.md +9 -9
  703. package/docs/prose.md +9 -9
  704. package/docs/providers/anthropic.md +23 -27
  705. package/docs/providers/claude-max-api-proxy.md +145 -0
  706. package/docs/providers/deepgram.md +2 -2
  707. package/docs/providers/github-copilot.md +11 -11
  708. package/docs/providers/glm.md +4 -4
  709. package/docs/providers/index.md +7 -3
  710. package/docs/providers/minimax.md +9 -9
  711. package/docs/providers/models.md +3 -3
  712. package/docs/providers/moonshot.md +2 -2
  713. package/docs/providers/ollama.md +11 -11
  714. package/docs/providers/openai.md +9 -13
  715. package/docs/providers/opencode.md +3 -3
  716. package/docs/providers/openrouter.md +3 -3
  717. package/docs/providers/qwen.md +6 -6
  718. package/docs/providers/synthetic.md +4 -4
  719. package/docs/providers/venice.md +21 -21
  720. package/docs/providers/vercel-ai-gateway.md +5 -4
  721. package/docs/providers/zai.md +5 -5
  722. package/docs/railway.mdx +5 -5
  723. package/docs/refactor/exec-host.md +5 -5
  724. package/docs/refactor/plugin-sdk.md +12 -12
  725. package/docs/refactor/strict-config.md +11 -11
  726. package/docs/reference/AGENTS.default.md +10 -10
  727. package/docs/reference/RELEASING.md +27 -27
  728. package/docs/reference/api-usage-costs.md +6 -6
  729. package/docs/reference/device-models.md +7 -7
  730. package/docs/reference/rpc.md +3 -3
  731. package/docs/reference/session-management-compaction.md +19 -19
  732. package/docs/reference/templates/AGENTS.dev.md +1 -1
  733. package/docs/reference/templates/BOOT.md +1 -1
  734. package/docs/reference/templates/TOOLS.dev.md +1 -1
  735. package/docs/reference/templates/USER.dev.md +2 -2
  736. package/docs/reference/test.md +2 -2
  737. package/docs/reference/transcript-hygiene.md +1 -1
  738. package/docs/render.mdx +158 -0
  739. package/docs/scripts.md +1 -1
  740. package/docs/security/formal-verification.md +107 -0
  741. package/docs/start/getting-started.md +31 -25
  742. package/docs/start/hubs.md +2 -2
  743. package/docs/start/lore.md +74 -38
  744. package/docs/start/onboarding.md +7 -7
  745. package/docs/start/pairing.md +10 -10
  746. package/docs/start/{clawd.md → poolbot.md} +29 -29
  747. package/docs/start/setup.md +30 -17
  748. package/docs/start/showcase.md +32 -32
  749. package/docs/start/wizard.md +29 -26
  750. package/docs/testing.md +12 -12
  751. package/docs/token-use.md +7 -7
  752. package/docs/tools/agent-send.md +10 -10
  753. package/docs/tools/browser-linux-troubleshooting.md +10 -10
  754. package/docs/tools/browser-login.md +4 -4
  755. package/docs/tools/browser.md +135 -241
  756. package/docs/tools/chrome-extension.md +31 -48
  757. package/docs/tools/creating-skills.md +4 -4
  758. package/docs/tools/elevated.md +1 -0
  759. package/docs/tools/exec-approvals.md +8 -5
  760. package/docs/tools/exec.md +15 -4
  761. package/docs/tools/firecrawl.md +2 -2
  762. package/docs/tools/index.md +18 -15
  763. package/docs/tools/llm-task.md +1 -1
  764. package/docs/tools/lobster.md +23 -11
  765. package/docs/tools/{clawdhub.md → poolhub.md} +7 -7
  766. package/docs/tools/skills-config.md +2 -2
  767. package/docs/tools/skills.md +39 -31
  768. package/docs/tools/slash-commands.md +10 -8
  769. package/docs/tools/web.md +8 -8
  770. package/docs/tts.md +11 -11
  771. package/docs/tui.md +7 -7
  772. package/docs/vps.md +6 -1
  773. package/docs/web/control-ui.md +13 -12
  774. package/docs/web/dashboard.md +8 -4
  775. package/docs/web/index.md +6 -5
  776. package/docs/web/webchat.md +1 -1
  777. package/extensions/bluebubbles/index.ts +3 -3
  778. package/extensions/bluebubbles/package.json +5 -5
  779. package/extensions/bluebubbles/src/accounts.ts +9 -9
  780. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  781. package/extensions/bluebubbles/src/actions.ts +6 -6
  782. package/extensions/bluebubbles/src/attachments.ts +2 -2
  783. package/extensions/bluebubbles/src/channel.ts +17 -17
  784. package/extensions/bluebubbles/src/chat.ts +2 -2
  785. package/extensions/bluebubbles/src/config-schema.ts +1 -1
  786. package/extensions/bluebubbles/src/media-send.ts +2 -2
  787. package/extensions/bluebubbles/src/monitor.test.ts +56 -50
  788. package/extensions/bluebubbles/src/monitor.ts +181 -6
  789. package/extensions/bluebubbles/src/onboarding.ts +9 -9
  790. package/extensions/bluebubbles/src/reactions.ts +2 -2
  791. package/extensions/bluebubbles/src/runtime.ts +1 -1
  792. package/extensions/bluebubbles/src/send.ts +2 -2
  793. package/extensions/copilot-proxy/README.md +2 -2
  794. package/extensions/copilot-proxy/index.ts +1 -1
  795. package/extensions/copilot-proxy/package.json +4 -4
  796. package/extensions/diagnostics-otel/index.ts +3 -3
  797. package/extensions/diagnostics-otel/package.json +4 -4
  798. package/extensions/diagnostics-otel/src/service.test.ts +15 -15
  799. package/extensions/diagnostics-otel/src/service.ts +85 -85
  800. package/extensions/discord/index.ts +3 -3
  801. package/extensions/discord/package.json +4 -4
  802. package/extensions/discord/src/channel.ts +1 -1
  803. package/extensions/discord/src/runtime.ts +1 -1
  804. package/extensions/google-antigravity-auth/README.md +2 -2
  805. package/extensions/google-antigravity-auth/index.ts +9 -2
  806. package/extensions/google-antigravity-auth/package.json +4 -4
  807. package/extensions/google-gemini-cli-auth/README.md +2 -2
  808. package/extensions/google-gemini-cli-auth/index.ts +1 -1
  809. package/extensions/google-gemini-cli-auth/oauth.ts +2 -2
  810. package/extensions/google-gemini-cli-auth/package.json +4 -4
  811. package/extensions/googlechat/index.ts +4 -4
  812. package/extensions/googlechat/node_modules/.bin/poolbot +21 -0
  813. package/extensions/googlechat/package.json +7 -7
  814. package/extensions/googlechat/src/accounts.ts +9 -9
  815. package/extensions/googlechat/src/actions.ts +8 -8
  816. package/extensions/googlechat/src/api.ts +1 -1
  817. package/extensions/googlechat/src/channel.ts +23 -23
  818. package/extensions/googlechat/src/monitor.ts +9 -9
  819. package/extensions/googlechat/src/onboarding.ts +11 -11
  820. package/extensions/googlechat/src/runtime.ts +1 -1
  821. package/extensions/googlechat/src/types.config.ts +1 -1
  822. package/extensions/imessage/index.ts +3 -3
  823. package/extensions/imessage/package.json +4 -4
  824. package/extensions/imessage/src/channel.ts +1 -1
  825. package/extensions/imessage/src/runtime.ts +1 -1
  826. package/extensions/line/index.ts +3 -3
  827. package/extensions/line/node_modules/.bin/poolbot +21 -0
  828. package/extensions/line/package.json +6 -6
  829. package/extensions/line/src/card-command.ts +3 -3
  830. package/extensions/line/src/channel.logout.test.ts +4 -4
  831. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  832. package/extensions/line/src/channel.ts +5 -5
  833. package/extensions/line/src/runtime.ts +1 -1
  834. package/extensions/llm-task/README.md +1 -1
  835. package/extensions/llm-task/index.ts +2 -2
  836. package/extensions/llm-task/package.json +4 -4
  837. package/extensions/llm-task/src/llm-task-tool.ts +5 -5
  838. package/extensions/lobster/index.ts +2 -2
  839. package/extensions/lobster/package.json +3 -3
  840. package/extensions/lobster/src/lobster-tool.test.ts +26 -6
  841. package/extensions/lobster/src/lobster-tool.ts +24 -6
  842. package/extensions/matrix/CHANGELOG.md +9 -9
  843. package/extensions/matrix/index.ts +3 -3
  844. package/extensions/matrix/node_modules/.bin/markdown-it +0 -0
  845. package/extensions/matrix/node_modules/.bin/poolbot +21 -0
  846. package/extensions/matrix/package.json +7 -7
  847. package/extensions/matrix/src/actions.ts +1 -1
  848. package/extensions/matrix/src/channel.directory.test.ts +1 -1
  849. package/extensions/matrix/src/channel.ts +1 -1
  850. package/extensions/matrix/src/config-schema.ts +1 -1
  851. package/extensions/matrix/src/directory-live.ts +1 -1
  852. package/extensions/matrix/src/group-mentions.ts +1 -1
  853. package/extensions/matrix/src/matrix/accounts.ts +1 -1
  854. package/extensions/matrix/src/matrix/actions/messages.ts +1 -1
  855. package/extensions/matrix/src/matrix/actions/reactions.ts +1 -1
  856. package/extensions/matrix/src/matrix/actions/room.ts +3 -3
  857. package/extensions/matrix/src/matrix/actions/summary.ts +1 -1
  858. package/extensions/matrix/src/matrix/actions/types.ts +1 -1
  859. package/extensions/matrix/src/matrix/active-client.ts +1 -1
  860. package/extensions/matrix/src/matrix/client/config.ts +2 -2
  861. package/extensions/matrix/src/matrix/client/create-client.ts +2 -2
  862. package/extensions/matrix/src/matrix/client/logging.ts +1 -1
  863. package/extensions/matrix/src/matrix/client/shared.ts +3 -3
  864. package/extensions/matrix/src/matrix/deps.ts +5 -5
  865. package/extensions/matrix/src/matrix/monitor/allowlist.ts +1 -1
  866. package/extensions/matrix/src/matrix/monitor/auto-join.ts +3 -3
  867. package/extensions/matrix/src/matrix/monitor/direct.ts +1 -1
  868. package/extensions/matrix/src/matrix/monitor/events.ts +2 -2
  869. package/extensions/matrix/src/matrix/monitor/handler.ts +8 -8
  870. package/extensions/matrix/src/matrix/monitor/index.ts +2 -2
  871. package/extensions/matrix/src/matrix/monitor/location.ts +2 -2
  872. package/extensions/matrix/src/matrix/monitor/media.test.ts +3 -3
  873. package/extensions/matrix/src/matrix/monitor/media.ts +3 -3
  874. package/extensions/matrix/src/matrix/monitor/replies.ts +2 -2
  875. package/extensions/matrix/src/matrix/monitor/room-info.ts +1 -1
  876. package/extensions/matrix/src/matrix/monitor/rooms.ts +1 -1
  877. package/extensions/matrix/src/matrix/monitor/threads.ts +1 -1
  878. package/extensions/matrix/src/matrix/monitor/types.ts +1 -1
  879. package/extensions/matrix/src/matrix/poll-types.ts +1 -1
  880. package/extensions/matrix/src/matrix/probe.ts +1 -1
  881. package/extensions/matrix/src/matrix/send/client.ts +2 -2
  882. package/extensions/matrix/src/matrix/send/media.ts +1 -1
  883. package/extensions/matrix/src/matrix/send/targets.test.ts +1 -1
  884. package/extensions/matrix/src/matrix/send/targets.ts +1 -1
  885. package/extensions/matrix/src/matrix/send/types.ts +2 -2
  886. package/extensions/matrix/src/matrix/send.test.ts +3 -3
  887. package/extensions/matrix/src/matrix/send.ts +4 -4
  888. package/extensions/matrix/src/onboarding.ts +3 -3
  889. package/extensions/matrix/src/outbound.ts +1 -1
  890. package/extensions/matrix/src/resolve-targets.ts +1 -1
  891. package/extensions/matrix/src/runtime.ts +1 -1
  892. package/extensions/matrix/src/tool-actions.ts +1 -1
  893. package/extensions/matrix/src/types.ts +1 -1
  894. package/extensions/mattermost/index.ts +3 -3
  895. package/extensions/mattermost/package.json +5 -5
  896. package/extensions/mattermost/src/channel.ts +1 -1
  897. package/extensions/mattermost/src/config-schema.ts +1 -1
  898. package/extensions/mattermost/src/group-mentions.ts +1 -1
  899. package/extensions/mattermost/src/mattermost/accounts.ts +9 -9
  900. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  901. package/extensions/mattermost/src/mattermost/monitor.ts +4 -4
  902. package/extensions/mattermost/src/onboarding-helpers.ts +4 -4
  903. package/extensions/mattermost/src/onboarding.ts +4 -4
  904. package/extensions/mattermost/src/runtime.ts +1 -1
  905. package/extensions/mattermost/src/types.ts +1 -1
  906. package/extensions/memory-core/index.ts +3 -3
  907. package/extensions/memory-core/node_modules/.bin/poolbot +21 -0
  908. package/extensions/memory-core/package.json +5 -5
  909. package/extensions/memory-lancedb/config.ts +2 -2
  910. package/extensions/memory-lancedb/index.test.ts +2 -2
  911. package/extensions/memory-lancedb/index.ts +4 -4
  912. package/extensions/memory-lancedb/node_modules/.bin/openai +0 -0
  913. package/extensions/memory-lancedb/package.json +4 -4
  914. package/extensions/memory-lancedb/{clawdbot.plugin.json → poolbot.plugin.json} +1 -1
  915. package/extensions/msteams/CHANGELOG.md +7 -7
  916. package/extensions/msteams/index.ts +3 -3
  917. package/extensions/msteams/node_modules/.bin/poolbot +21 -0
  918. package/extensions/msteams/package.json +6 -6
  919. package/extensions/msteams/src/attachments.test.ts +1 -1
  920. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  921. package/extensions/msteams/src/channel.ts +3 -3
  922. package/extensions/msteams/src/conversation-store-fs.test.ts +3 -3
  923. package/extensions/msteams/src/directory-live.ts +1 -1
  924. package/extensions/msteams/src/graph-upload.ts +4 -4
  925. package/extensions/msteams/src/media-helpers.ts +1 -1
  926. package/extensions/msteams/src/messenger.test.ts +1 -1
  927. package/extensions/msteams/src/messenger.ts +1 -1
  928. package/extensions/msteams/src/monitor-handler/message-handler.ts +1 -1
  929. package/extensions/msteams/src/monitor-handler.ts +2 -2
  930. package/extensions/msteams/src/monitor.ts +3 -3
  931. package/extensions/msteams/src/onboarding.ts +11 -11
  932. package/extensions/msteams/src/outbound.ts +1 -1
  933. package/extensions/msteams/src/policy.test.ts +1 -1
  934. package/extensions/msteams/src/policy.ts +50 -5
  935. package/extensions/msteams/src/polls-store.test.ts +1 -1
  936. package/extensions/msteams/src/polls.test.ts +4 -4
  937. package/extensions/msteams/src/polls.ts +8 -8
  938. package/extensions/msteams/src/probe.test.ts +1 -1
  939. package/extensions/msteams/src/probe.ts +1 -1
  940. package/extensions/msteams/src/reply-dispatcher.ts +36 -36
  941. package/extensions/msteams/src/runtime.ts +1 -1
  942. package/extensions/msteams/src/send-context.ts +2 -2
  943. package/extensions/msteams/src/send.ts +5 -5
  944. package/extensions/msteams/src/token.ts +1 -1
  945. package/extensions/nextcloud-talk/index.ts +3 -3
  946. package/extensions/nextcloud-talk/package.json +5 -5
  947. package/extensions/nextcloud-talk/src/accounts.ts +1 -1
  948. package/extensions/nextcloud-talk/src/channel.ts +8 -8
  949. package/extensions/nextcloud-talk/src/config-schema.ts +1 -1
  950. package/extensions/nextcloud-talk/src/inbound.ts +8 -8
  951. package/extensions/nextcloud-talk/src/monitor.ts +1 -1
  952. package/extensions/nextcloud-talk/src/onboarding.ts +2 -2
  953. package/extensions/nextcloud-talk/src/policy.ts +2 -2
  954. package/extensions/nextcloud-talk/src/room-info.ts +1 -1
  955. package/extensions/nextcloud-talk/src/runtime.ts +1 -1
  956. package/extensions/nextcloud-talk/src/types.ts +1 -1
  957. package/extensions/nostr/CHANGELOG.md +4 -4
  958. package/extensions/nostr/README.md +3 -3
  959. package/extensions/nostr/index.ts +6 -6
  960. package/extensions/nostr/node_modules/.bin/poolbot +21 -0
  961. package/extensions/nostr/package.json +6 -6
  962. package/extensions/nostr/src/channel.ts +2 -2
  963. package/extensions/nostr/src/config-schema.ts +1 -1
  964. package/extensions/nostr/src/nostr-state-store.test.ts +3 -3
  965. package/extensions/nostr/src/runtime.ts +1 -1
  966. package/extensions/nostr/src/types.ts +4 -4
  967. package/extensions/open-prose/index.ts +2 -2
  968. package/extensions/open-prose/package.json +3 -3
  969. package/extensions/open-prose/skills/prose/SKILL.md +5 -5
  970. package/extensions/open-prose/skills/prose/prose.md +4 -4
  971. package/extensions/qwen-portal-auth/README.md +2 -2
  972. package/extensions/qwen-portal-auth/index.ts +1 -1
  973. package/extensions/signal/index.ts +3 -3
  974. package/extensions/signal/package.json +4 -4
  975. package/extensions/signal/src/channel.ts +1 -1
  976. package/extensions/signal/src/runtime.ts +1 -1
  977. package/extensions/slack/index.ts +3 -3
  978. package/extensions/slack/package.json +4 -4
  979. package/extensions/slack/src/channel.ts +1 -1
  980. package/extensions/slack/src/runtime.ts +1 -1
  981. package/extensions/telegram/index.ts +3 -3
  982. package/extensions/telegram/package.json +4 -4
  983. package/extensions/telegram/src/channel.ts +3 -3
  984. package/extensions/telegram/src/runtime.ts +1 -1
  985. package/extensions/tlon/README.md +1 -1
  986. package/extensions/tlon/index.ts +3 -3
  987. package/extensions/tlon/package.json +5 -5
  988. package/extensions/tlon/src/channel.ts +15 -15
  989. package/extensions/tlon/src/config-schema.ts +1 -1
  990. package/extensions/tlon/src/monitor/discovery.ts +1 -1
  991. package/extensions/tlon/src/monitor/history.ts +1 -1
  992. package/extensions/tlon/src/monitor/index.ts +3 -3
  993. package/extensions/tlon/src/onboarding.ts +4 -4
  994. package/extensions/tlon/src/runtime.ts +1 -1
  995. package/extensions/tlon/src/types.ts +3 -3
  996. package/extensions/tlon/src/urbit/send.ts +19 -6
  997. package/extensions/twitch/CHANGELOG.md +21 -0
  998. package/extensions/twitch/README.md +89 -0
  999. package/extensions/twitch/index.ts +20 -0
  1000. package/extensions/twitch/node_modules/.bin/poolbot +21 -0
  1001. package/extensions/twitch/package.json +20 -0
  1002. package/extensions/twitch/poolbot.plugin.json +9 -0
  1003. package/extensions/twitch/src/access-control.test.ts +489 -0
  1004. package/extensions/twitch/src/access-control.ts +154 -0
  1005. package/extensions/twitch/src/actions.ts +173 -0
  1006. package/extensions/twitch/src/client-manager-registry.ts +115 -0
  1007. package/extensions/twitch/src/config-schema.ts +82 -0
  1008. package/extensions/twitch/src/config.test.ts +88 -0
  1009. package/extensions/twitch/src/config.ts +116 -0
  1010. package/extensions/twitch/src/monitor.ts +257 -0
  1011. package/extensions/twitch/src/onboarding.test.ts +311 -0
  1012. package/extensions/twitch/src/onboarding.ts +411 -0
  1013. package/extensions/twitch/src/outbound.test.ts +373 -0
  1014. package/extensions/twitch/src/outbound.ts +186 -0
  1015. package/extensions/twitch/src/plugin.test.ts +39 -0
  1016. package/extensions/twitch/src/plugin.ts +274 -0
  1017. package/extensions/twitch/src/probe.test.ts +198 -0
  1018. package/extensions/twitch/src/probe.ts +118 -0
  1019. package/extensions/twitch/src/resolver.ts +137 -0
  1020. package/extensions/twitch/src/runtime.ts +14 -0
  1021. package/extensions/twitch/src/send.test.ts +289 -0
  1022. package/extensions/twitch/src/send.ts +136 -0
  1023. package/extensions/twitch/src/status.test.ts +270 -0
  1024. package/extensions/twitch/src/status.ts +176 -0
  1025. package/extensions/twitch/src/token.test.ts +171 -0
  1026. package/extensions/twitch/src/token.ts +87 -0
  1027. package/extensions/twitch/src/twitch-client.test.ts +574 -0
  1028. package/extensions/twitch/src/twitch-client.ts +277 -0
  1029. package/extensions/twitch/src/types.ts +141 -0
  1030. package/extensions/twitch/src/utils/markdown.ts +92 -0
  1031. package/extensions/twitch/src/utils/twitch.ts +78 -0
  1032. package/extensions/twitch/test/setup.ts +7 -0
  1033. package/extensions/voice-call/CHANGELOG.md +13 -12
  1034. package/extensions/voice-call/README.md +15 -14
  1035. package/extensions/voice-call/index.ts +11 -9
  1036. package/extensions/voice-call/package.json +4 -4
  1037. package/extensions/voice-call/{clawdbot.plugin.json → poolbot.plugin.json} +3 -3
  1038. package/extensions/voice-call/src/cli.ts +1 -1
  1039. package/extensions/voice-call/src/config.test.ts +204 -0
  1040. package/extensions/voice-call/src/config.ts +61 -4
  1041. package/extensions/voice-call/src/core-bridge.ts +10 -8
  1042. package/extensions/voice-call/src/manager.test.ts +2 -2
  1043. package/extensions/voice-call/src/providers/twilio/webhook.ts +2 -1
  1044. package/extensions/voice-call/src/providers/twilio.ts +2 -2
  1045. package/extensions/voice-call/src/response-generator.ts +1 -1
  1046. package/extensions/voice-call/src/runtime.ts +26 -15
  1047. package/extensions/voice-call/src/types.ts +1 -0
  1048. package/extensions/voice-call/src/webhook-security.test.ts +52 -0
  1049. package/extensions/voice-call/src/webhook-security.ts +16 -5
  1050. package/extensions/voice-call/src/webhook.ts +1 -0
  1051. package/extensions/whatsapp/index.ts +3 -3
  1052. package/extensions/whatsapp/package.json +4 -4
  1053. package/extensions/whatsapp/src/channel.ts +1 -1
  1054. package/extensions/whatsapp/src/runtime.ts +1 -1
  1055. package/extensions/zalo/CHANGELOG.md +9 -9
  1056. package/extensions/zalo/README.md +3 -3
  1057. package/extensions/zalo/index.ts +3 -3
  1058. package/extensions/zalo/node_modules/.bin/poolbot +21 -0
  1059. package/extensions/zalo/package.json +6 -6
  1060. package/extensions/zalo/src/accounts.ts +9 -9
  1061. package/extensions/zalo/src/actions.ts +6 -6
  1062. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  1063. package/extensions/zalo/src/channel.ts +20 -20
  1064. package/extensions/zalo/src/config-schema.ts +1 -1
  1065. package/extensions/zalo/src/monitor.ts +9 -9
  1066. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  1067. package/extensions/zalo/src/onboarding.ts +27 -27
  1068. package/extensions/zalo/src/runtime.ts +1 -1
  1069. package/extensions/zalo/src/send.ts +2 -2
  1070. package/extensions/zalo/src/status-issues.ts +1 -1
  1071. package/extensions/zalo/src/token.ts +1 -1
  1072. package/extensions/zalouser/CHANGELOG.md +4 -4
  1073. package/extensions/zalouser/README.md +17 -17
  1074. package/extensions/zalouser/index.ts +3 -3
  1075. package/extensions/zalouser/node_modules/.bin/poolbot +21 -0
  1076. package/extensions/zalouser/package.json +6 -6
  1077. package/extensions/zalouser/src/accounts.ts +10 -10
  1078. package/extensions/zalouser/src/channel.ts +27 -27
  1079. package/extensions/zalouser/src/config-schema.ts +1 -1
  1080. package/extensions/zalouser/src/monitor.ts +5 -5
  1081. package/extensions/zalouser/src/onboarding.ts +32 -32
  1082. package/extensions/zalouser/src/runtime.ts +1 -1
  1083. package/extensions/zalouser/src/status-issues.ts +2 -2
  1084. package/git-hooks/pre-commit +0 -0
  1085. package/package.json +78 -89
  1086. package/skills/1password/SKILL.md +3 -3
  1087. package/skills/apple-notes/SKILL.md +2 -2
  1088. package/skills/apple-reminders/SKILL.md +1 -1
  1089. package/skills/bear-notes/SKILL.md +1 -1
  1090. package/skills/bird/SKILL.md +1 -1
  1091. package/skills/blogwatcher/SKILL.md +1 -1
  1092. package/skills/blucli/SKILL.md +1 -1
  1093. package/skills/bluebubbles/SKILL.md +2 -2
  1094. package/skills/camsnap/SKILL.md +1 -1
  1095. package/skills/canvas/SKILL.md +15 -15
  1096. package/skills/coding-agent/SKILL.md +6 -6
  1097. package/skills/discord/SKILL.md +6 -5
  1098. package/skills/eightctl/SKILL.md +1 -1
  1099. package/skills/food-order/SKILL.md +1 -1
  1100. package/skills/gemini/SKILL.md +1 -1
  1101. package/skills/gifgrep/SKILL.md +1 -1
  1102. package/skills/github/SKILL.md +1 -0
  1103. package/skills/gog/SKILL.md +1 -1
  1104. package/skills/goplaces/SKILL.md +1 -1
  1105. package/skills/himalaya/SKILL.md +1 -1
  1106. package/skills/imsg/SKILL.md +1 -1
  1107. package/skills/local-places/SKILL.md +1 -1
  1108. package/skills/mcporter/SKILL.md +1 -1
  1109. package/skills/model-usage/SKILL.md +1 -1
  1110. package/skills/nano-banana-pro/SKILL.md +10 -5
  1111. package/skills/nano-banana-pro/scripts/generate_image.py +42 -27
  1112. package/skills/nano-pdf/SKILL.md +1 -1
  1113. package/skills/notion/SKILL.md +1 -1
  1114. package/skills/obsidian/SKILL.md +1 -1
  1115. package/skills/openai-image-gen/SKILL.md +1 -1
  1116. package/skills/openai-whisper/SKILL.md +1 -1
  1117. package/skills/openai-whisper-api/SKILL.md +2 -2
  1118. package/skills/openhue/SKILL.md +1 -1
  1119. package/skills/oracle/SKILL.md +1 -1
  1120. package/skills/ordercli/SKILL.md +1 -1
  1121. package/skills/peekaboo/SKILL.md +1 -1
  1122. package/skills/{clawdhub → poolhub}/SKILL.md +2 -2
  1123. package/skills/sag/SKILL.md +1 -1
  1124. package/skills/session-logs/SKILL.md +7 -7
  1125. package/skills/sherpa-onnx-tts/SKILL.md +6 -6
  1126. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -0
  1127. package/skills/slack/SKILL.md +4 -3
  1128. package/skills/songsee/SKILL.md +1 -1
  1129. package/skills/sonoscli/SKILL.md +1 -1
  1130. package/skills/spotify-player/SKILL.md +1 -1
  1131. package/skills/summarize/SKILL.md +1 -1
  1132. package/skills/things-mac/SKILL.md +3 -3
  1133. package/skills/tmux/SKILL.md +7 -7
  1134. package/skills/tmux/scripts/find-sessions.sh +1 -1
  1135. package/skills/tmux/scripts/wait-for-text.sh +0 -0
  1136. package/skills/trello/SKILL.md +2 -2
  1137. package/skills/video-frames/SKILL.md +1 -1
  1138. package/skills/voice-call/SKILL.md +4 -4
  1139. package/skills/wacli/SKILL.md +2 -2
  1140. package/skills/weather/SKILL.md +1 -1
  1141. package/skills/webgpu-threejs-tsl/REFERENCE.md +283 -0
  1142. package/skills/webgpu-threejs-tsl/SKILL.md +91 -0
  1143. package/skills/webgpu-threejs-tsl/docs/compute-shaders.md +404 -0
  1144. package/skills/webgpu-threejs-tsl/docs/core-concepts.md +453 -0
  1145. package/skills/webgpu-threejs-tsl/docs/materials.md +353 -0
  1146. package/skills/webgpu-threejs-tsl/docs/post-processing.md +434 -0
  1147. package/skills/webgpu-threejs-tsl/docs/wgsl-integration.md +324 -0
  1148. package/skills/webgpu-threejs-tsl/examples/basic-setup.js +87 -0
  1149. package/skills/webgpu-threejs-tsl/examples/custom-material.js +170 -0
  1150. package/skills/webgpu-threejs-tsl/examples/earth-shader.js +292 -0
  1151. package/skills/webgpu-threejs-tsl/examples/particle-system.js +259 -0
  1152. package/skills/webgpu-threejs-tsl/examples/post-processing.js +199 -0
  1153. package/skills/webgpu-threejs-tsl/templates/compute-shader.js +305 -0
  1154. package/skills/webgpu-threejs-tsl/templates/webgpu-project.js +276 -0
  1155. package/dist/cli/browser-cli-serve.js +0 -91
  1156. package/dist/control-ui/assets/index-Cl-Y9zqE.js.map +0 -1
  1157. package/dist/control-ui/assets/index-DEPfFcOb.css +0 -1
  1158. package/docs/POOL-BOT.md +0 -119
  1159. /package/dist/{config/types.clawdbot.js → browser/routes/types.js} +0 -0
  1160. /package/docs/{whatsapp-clawd.jpg → whatsapp-poolbot.jpg} +0 -0
  1161. /package/extensions/bluebubbles/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1162. /package/extensions/copilot-proxy/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1163. /package/extensions/diagnostics-otel/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1164. /package/extensions/discord/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1165. /package/extensions/google-antigravity-auth/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1166. /package/extensions/google-gemini-cli-auth/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1167. /package/extensions/googlechat/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1168. /package/extensions/imessage/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1169. /package/extensions/line/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1170. /package/extensions/llm-task/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1171. /package/extensions/lobster/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1172. /package/extensions/matrix/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1173. /package/extensions/mattermost/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1174. /package/extensions/memory-core/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1175. /package/extensions/msteams/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1176. /package/extensions/nextcloud-talk/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1177. /package/extensions/nostr/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1178. /package/extensions/open-prose/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1179. /package/extensions/qwen-portal-auth/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1180. /package/extensions/signal/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1181. /package/extensions/slack/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1182. /package/extensions/telegram/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1183. /package/extensions/tlon/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1184. /package/extensions/whatsapp/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1185. /package/extensions/zalo/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1186. /package/extensions/zalouser/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
@@ -36,7 +36,7 @@ async function generateSelfSignedCert(params) {
36
36
  "-out",
37
37
  params.certPath,
38
38
  "-subj",
39
- "/CN=clawdbot-gateway",
39
+ "/CN=poolbot-gateway",
40
40
  ]);
41
41
  await fs.chmod(params.keyPath, 0o600).catch(() => { });
42
42
  await fs.chmod(params.certPath, 0o600).catch(() => { });
@@ -1,6 +1,81 @@
1
1
  import process from "node:process";
2
2
  import { formatUncaughtError } from "./errors.js";
3
3
  const handlers = new Set();
4
+ /**
5
+ * Checks if an error is an AbortError.
6
+ * These are typically intentional cancellations (e.g., during shutdown) and shouldn't crash.
7
+ */
8
+ export function isAbortError(err) {
9
+ if (!err || typeof err !== "object")
10
+ return false;
11
+ const name = "name" in err ? String(err.name) : "";
12
+ if (name === "AbortError")
13
+ return true;
14
+ // Check for "This operation was aborted" message from Node's undici
15
+ const message = "message" in err && typeof err.message === "string" ? err.message : "";
16
+ if (message === "This operation was aborted")
17
+ return true;
18
+ return false;
19
+ }
20
+ // Network error codes that indicate transient failures (shouldn't crash the gateway)
21
+ const TRANSIENT_NETWORK_CODES = new Set([
22
+ "ECONNRESET",
23
+ "ECONNREFUSED",
24
+ "ENOTFOUND",
25
+ "ETIMEDOUT",
26
+ "ESOCKETTIMEDOUT",
27
+ "ECONNABORTED",
28
+ "EPIPE",
29
+ "EHOSTUNREACH",
30
+ "ENETUNREACH",
31
+ "EAI_AGAIN",
32
+ "UND_ERR_CONNECT_TIMEOUT",
33
+ "UND_ERR_SOCKET",
34
+ "UND_ERR_HEADERS_TIMEOUT",
35
+ "UND_ERR_BODY_TIMEOUT",
36
+ ]);
37
+ function getErrorCode(err) {
38
+ if (!err || typeof err !== "object")
39
+ return undefined;
40
+ const code = err.code;
41
+ return typeof code === "string" ? code : undefined;
42
+ }
43
+ function getErrorCause(err) {
44
+ if (!err || typeof err !== "object")
45
+ return undefined;
46
+ return err.cause;
47
+ }
48
+ /**
49
+ * Checks if an error is a transient network error that shouldn't crash the gateway.
50
+ * These are typically temporary connectivity issues that will resolve on their own.
51
+ */
52
+ export function isTransientNetworkError(err) {
53
+ if (!err)
54
+ return false;
55
+ // Check the error itself
56
+ const code = getErrorCode(err);
57
+ if (code && TRANSIENT_NETWORK_CODES.has(code))
58
+ return true;
59
+ // "fetch failed" TypeError from undici (Node's native fetch)
60
+ if (err instanceof TypeError && err.message === "fetch failed") {
61
+ const cause = getErrorCause(err);
62
+ // The cause often contains the actual network error
63
+ if (cause)
64
+ return isTransientNetworkError(cause);
65
+ // Even without a cause, "fetch failed" is typically a network issue
66
+ return true;
67
+ }
68
+ // Check the cause chain recursively
69
+ const cause = getErrorCause(err);
70
+ if (cause && cause !== err) {
71
+ return isTransientNetworkError(cause);
72
+ }
73
+ // AggregateError may wrap multiple causes
74
+ if (err instanceof AggregateError && err.errors?.length) {
75
+ return err.errors.some((e) => isTransientNetworkError(e));
76
+ }
77
+ return false;
78
+ }
4
79
  export function registerUnhandledRejectionHandler(handler) {
5
80
  handlers.add(handler);
6
81
  return () => {
@@ -14,7 +89,7 @@ export function isUnhandledRejectionHandled(reason) {
14
89
  return true;
15
90
  }
16
91
  catch (err) {
17
- console.error("[clawdbot] Unhandled rejection handler failed:", err instanceof Error ? (err.stack ?? err.message) : err);
92
+ console.error("[poolbot] Unhandled rejection handler failed:", err instanceof Error ? (err.stack ?? err.message) : err);
18
93
  }
19
94
  }
20
95
  return false;
@@ -23,7 +98,19 @@ export function installUnhandledRejectionHandler() {
23
98
  process.on("unhandledRejection", (reason, _promise) => {
24
99
  if (isUnhandledRejectionHandled(reason))
25
100
  return;
26
- console.error("[clawdbot] Unhandled promise rejection:", formatUncaughtError(reason));
101
+ // AbortError is typically an intentional cancellation (e.g., during shutdown)
102
+ // Log it but don't crash - these are expected during graceful shutdown
103
+ if (isAbortError(reason)) {
104
+ console.warn("[poolbot] Suppressed AbortError:", formatUncaughtError(reason));
105
+ return;
106
+ }
107
+ // Transient network errors (fetch failed, connection reset, etc.) shouldn't crash
108
+ // These are temporary connectivity issues that will resolve on their own
109
+ if (isTransientNetworkError(reason)) {
110
+ console.error("[poolbot] Network error (non-fatal):", formatUncaughtError(reason));
111
+ return;
112
+ }
113
+ console.error("[poolbot] Unhandled promise rejection:", formatUncaughtError(reason));
27
114
  process.exit(1);
28
115
  });
29
116
  }
@@ -68,9 +68,7 @@ export async function checkGitUpdateStatus(params) {
68
68
  const tag = tagRes && tagRes.code === 0 ? tagRes.stdout.trim() : null;
69
69
  const upstreamRes = await runCommandWithTimeout(["git", "-C", root, "rev-parse", "--abbrev-ref", "@{upstream}"], { timeoutMs }).catch(() => null);
70
70
  const upstream = upstreamRes && upstreamRes.code === 0 ? upstreamRes.stdout.trim() : null;
71
- const dirtyRes = await runCommandWithTimeout(["git", "-C", root, "status", "--porcelain"], {
72
- timeoutMs,
73
- }).catch(() => null);
71
+ const dirtyRes = await runCommandWithTimeout(["git", "-C", root, "status", "--porcelain", "--", ":!dist/control-ui/"], { timeoutMs }).catch(() => null);
74
72
  const dirty = dirtyRes && dirtyRes.code === 0 ? dirtyRes.stdout.trim().length > 0 : null;
75
73
  const fetchOk = params.fetch
76
74
  ? await runCommandWithTimeout(["git", "-C", root, "fetch", "--quiet", "--prune"], { timeoutMs })
@@ -216,7 +214,7 @@ export async function fetchNpmTagVersion(params) {
216
214
  const timeoutMs = params?.timeoutMs ?? 3500;
217
215
  const tag = params.tag;
218
216
  try {
219
- const res = await fetchWithTimeout(`https://registry.npmjs.org/clawdbot/${encodeURIComponent(tag)}`, timeoutMs);
217
+ const res = await fetchWithTimeout(`https://registry.npmjs.org/poolbot/${encodeURIComponent(tag)}`, timeoutMs);
220
218
  if (!res.ok) {
221
219
  return { tag, version: null, error: `HTTP ${res.status}` };
222
220
  }
@@ -36,7 +36,7 @@ export async function resolveGlobalPackageRoot(manager, runCommand, timeoutMs) {
36
36
  const root = await resolveGlobalRoot(manager, runCommand, timeoutMs);
37
37
  if (!root)
38
38
  return null;
39
- return path.join(root, "clawdbot");
39
+ return path.join(root, "poolbot");
40
40
  }
41
41
  export async function detectGlobalInstallManagerForRoot(runCommand, pkgRoot, timeoutMs) {
42
42
  const pkgReal = await tryRealpath(pkgRoot);
@@ -52,13 +52,13 @@ export async function detectGlobalInstallManagerForRoot(runCommand, pkgRoot, tim
52
52
  if (!globalRoot)
53
53
  continue;
54
54
  const globalReal = await tryRealpath(globalRoot);
55
- const expected = path.join(globalReal, "clawdbot");
55
+ const expected = path.join(globalReal, "poolbot");
56
56
  if (path.resolve(expected) === path.resolve(pkgReal))
57
57
  return manager;
58
58
  }
59
59
  const bunGlobalRoot = resolveBunGlobalRoot();
60
60
  const bunGlobalReal = await tryRealpath(bunGlobalRoot);
61
- const bunExpected = path.join(bunGlobalReal, "clawdbot");
61
+ const bunExpected = path.join(bunGlobalReal, "poolbot");
62
62
  if (path.resolve(bunExpected) === path.resolve(pkgReal))
63
63
  return "bun";
64
64
  return null;
@@ -68,11 +68,11 @@ export async function detectGlobalInstallManagerByPresence(runCommand, timeoutMs
68
68
  const root = await resolveGlobalRoot(manager, runCommand, timeoutMs);
69
69
  if (!root)
70
70
  continue;
71
- if (await pathExists(path.join(root, "clawdbot")))
71
+ if (await pathExists(path.join(root, "poolbot")))
72
72
  return manager;
73
73
  }
74
74
  const bunRoot = resolveBunGlobalRoot();
75
- if (await pathExists(path.join(bunRoot, "clawdbot")))
75
+ if (await pathExists(path.join(bunRoot, "poolbot")))
76
76
  return "bun";
77
77
  return null;
78
78
  }
@@ -10,6 +10,8 @@ const DEFAULT_TIMEOUT_MS = 20 * 60_000;
10
10
  const MAX_LOG_CHARS = 8000;
11
11
  const PREFLIGHT_MAX_COMMITS = 10;
12
12
  const START_DIRS = ["cwd", "argv1", "process"];
13
+ const DEFAULT_PACKAGE_NAME = "poolbot";
14
+ const CORE_PACKAGE_NAMES = new Set([DEFAULT_PACKAGE_NAME, "poolbot"]);
13
15
  function normalizeDir(value) {
14
16
  if (!value)
15
17
  return null;
@@ -57,6 +59,17 @@ async function readPackageVersion(root) {
57
59
  return null;
58
60
  }
59
61
  }
62
+ async function readPackageName(root) {
63
+ try {
64
+ const raw = await fs.readFile(path.join(root, "package.json"), "utf-8");
65
+ const parsed = JSON.parse(raw);
66
+ const name = parsed?.name?.trim();
67
+ return name ? name : null;
68
+ }
69
+ catch {
70
+ return null;
71
+ }
72
+ }
60
73
  async function readBranchName(runCommand, root, timeoutMs) {
61
74
  const res = await runCommand(["git", "-C", root, "rev-parse", "--abbrev-ref", "HEAD"], {
62
75
  timeoutMs,
@@ -114,7 +127,8 @@ async function findPackageRoot(candidates) {
114
127
  try {
115
128
  const raw = await fs.readFile(pkgPath, "utf-8");
116
129
  const parsed = JSON.parse(raw);
117
- if (parsed?.name === "clawdbot")
130
+ const name = parsed?.name?.trim();
131
+ if (name && CORE_PACKAGE_NAMES.has(name))
118
132
  return current;
119
133
  }
120
134
  catch {
@@ -198,7 +212,12 @@ function normalizeTag(tag) {
198
212
  const trimmed = tag?.trim();
199
213
  if (!trimmed)
200
214
  return "latest";
201
- return trimmed.startsWith("clawdbot@") ? trimmed.slice("clawdbot@".length) : trimmed;
215
+ if (trimmed.startsWith("poolbot@"))
216
+ return trimmed.slice("poolbot@".length);
217
+ if (trimmed.startsWith(`${DEFAULT_PACKAGE_NAME}@`)) {
218
+ return trimmed.slice(`${DEFAULT_PACKAGE_NAME}@`.length);
219
+ }
220
+ return trimmed;
202
221
  }
203
222
  export async function runGatewayUpdate(opts = {}) {
204
223
  const startedAt = Date.now();
@@ -238,7 +257,7 @@ export async function runGatewayUpdate(opts = {}) {
238
257
  status: "error",
239
258
  mode: "unknown",
240
259
  root: gitRoot,
241
- reason: "not-clawdbot-root",
260
+ reason: "not-poolbot-root",
242
261
  steps: [],
243
262
  durationMs: Date.now() - startedAt,
244
263
  };
@@ -254,8 +273,8 @@ export async function runGatewayUpdate(opts = {}) {
254
273
  const channel = opts.channel ?? "dev";
255
274
  const branch = channel === "dev" ? await readBranchName(runCommand, gitRoot, timeoutMs) : null;
256
275
  const needsCheckoutMain = channel === "dev" && branch !== DEV_BRANCH;
257
- gitTotalSteps = channel === "dev" ? (needsCheckoutMain ? 10 : 9) : 8;
258
- const statusCheck = await runStep(step("clean check", ["git", "-C", gitRoot, "status", "--porcelain"], gitRoot));
276
+ gitTotalSteps = channel === "dev" ? (needsCheckoutMain ? 11 : 10) : 9;
277
+ const statusCheck = await runStep(step("clean check", ["git", "-C", gitRoot, "status", "--porcelain", "--", ":!dist/control-ui/"], gitRoot));
259
278
  steps.push(statusCheck);
260
279
  const hasUncommittedChanges = statusCheck.stdoutTail && statusCheck.stdoutTail.trim().length > 0;
261
280
  if (hasUncommittedChanges) {
@@ -351,7 +370,7 @@ export async function runGatewayUpdate(opts = {}) {
351
370
  };
352
371
  }
353
372
  const manager = await detectPackageManager(gitRoot);
354
- const preflightRoot = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-update-preflight-"));
373
+ const preflightRoot = await fs.mkdtemp(path.join(os.tmpdir(), "poolbot-update-preflight-"));
355
374
  const worktreeDir = path.join(preflightRoot, "worktree");
356
375
  const worktreeStep = await runStep(step("preflight worktree", ["git", "-C", gitRoot, "worktree", "add", "--detach", worktreeDir, upstreamSha], gitRoot));
357
376
  steps.push(worktreeStep);
@@ -485,7 +504,11 @@ export async function runGatewayUpdate(opts = {}) {
485
504
  steps.push(buildStep);
486
505
  const uiBuildStep = await runStep(step("ui:build", managerScriptArgs(manager, "ui:build"), gitRoot));
487
506
  steps.push(uiBuildStep);
488
- const doctorStep = await runStep(step("clawdbot doctor", managerScriptArgs(manager, "clawdbot", ["doctor", "--non-interactive"]), gitRoot, { CLAWDBOT_UPDATE_IN_PROGRESS: "1" }));
507
+ // Restore dist/control-ui/ to committed state to prevent dirty repo after update
508
+ // (ui:build regenerates assets with new hashes, which would block future updates)
509
+ const restoreUiStep = await runStep(step("restore control-ui", ["git", "-C", gitRoot, "checkout", "--", "dist/control-ui/"], gitRoot));
510
+ steps.push(restoreUiStep);
511
+ const doctorStep = await runStep(step("poolbot doctor", managerScriptArgs(manager, "poolbot", ["doctor", "--non-interactive"]), gitRoot, { CLAWDBOT_UPDATE_IN_PROGRESS: "1" }));
489
512
  steps.push(doctorStep);
490
513
  const failedStep = steps.find((s) => s.exitCode !== 0);
491
514
  const afterShaStep = await runStep(step("git rev-parse HEAD (after)", ["git", "-C", gitRoot, "rev-parse", "HEAD"], gitRoot));
@@ -517,7 +540,8 @@ export async function runGatewayUpdate(opts = {}) {
517
540
  const beforeVersion = await readPackageVersion(pkgRoot);
518
541
  const globalManager = await detectGlobalInstallManagerForRoot(runCommand, pkgRoot, timeoutMs);
519
542
  if (globalManager) {
520
- const spec = `clawdbot@${normalizeTag(opts.tag)}`;
543
+ const packageName = (await readPackageName(pkgRoot)) ?? DEFAULT_PACKAGE_NAME;
544
+ const spec = `${packageName}@${normalizeTag(opts.tag)}`;
521
545
  const updateStep = await runStep({
522
546
  runCommand,
523
547
  name: "global update",
@@ -1,7 +1,7 @@
1
1
  import fs from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { resolveStateDir } from "../config/paths.js";
4
- import { resolveClawdbotPackageRoot } from "./clawdbot-root.js";
4
+ import { resolvePoolBotPackageRoot } from "./poolbot-root.js";
5
5
  import { compareSemverStrings, resolveNpmChannelTag, checkUpdateStatus } from "./update-check.js";
6
6
  import { normalizeUpdateChannel, DEFAULT_PACKAGE_CHANNEL } from "./update-channels.js";
7
7
  import { VERSION } from "../version.js";
@@ -44,7 +44,7 @@ export async function runGatewayUpdateCheck(params) {
44
44
  if (now - lastCheckedAt < UPDATE_CHECK_INTERVAL_MS)
45
45
  return;
46
46
  }
47
- const root = await resolveClawdbotPackageRoot({
47
+ const root = await resolvePoolBotPackageRoot({
48
48
  moduleUrl: import.meta.url,
49
49
  argv1: process.argv[1],
50
50
  cwd: process.cwd(),
@@ -74,7 +74,7 @@ export async function runGatewayUpdateCheck(params) {
74
74
  if (cmp != null && cmp < 0) {
75
75
  const shouldNotify = state.lastNotifiedVersion !== resolved.version || state.lastNotifiedTag !== tag;
76
76
  if (shouldNotify) {
77
- params.log.info(`update available (${tag}): v${resolved.version} (current v${VERSION}). Run: ${formatCliCommand("clawdbot update")}`);
77
+ params.log.info(`update available (${tag}): v${resolved.version} (current v${VERSION}). Run: ${formatCliCommand("poolbot update")}`);
78
78
  nextState.lastNotifiedVersion = resolved.version;
79
79
  nextState.lastNotifiedTag = tag;
80
80
  }
@@ -1,4 +1,4 @@
1
- const warningFilterKey = Symbol.for("clawdbot.warning-filter");
1
+ const warningFilterKey = Symbol.for("poolbot.warning-filter");
2
2
  function shouldIgnoreWarning(warning) {
3
3
  if (warning.code === "DEP0040" && warning.message?.includes("punycode")) {
4
4
  return true;
@@ -2,8 +2,8 @@ import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
4
  import { CONFIG_DIR, ensureDir } from "../utils.js";
5
- export const WIDE_AREA_DISCOVERY_DOMAIN = "clawdbot.internal.";
6
- export const WIDE_AREA_ZONE_FILENAME = "clawdbot.internal.db";
5
+ export const WIDE_AREA_DISCOVERY_DOMAIN = "poolbot.internal.";
6
+ export const WIDE_AREA_ZONE_FILENAME = "poolbot.internal.db";
7
7
  export function getWideAreaZonePath() {
8
8
  return path.join(CONFIG_DIR, "dns", WIDE_AREA_ZONE_FILENAME);
9
9
  }
@@ -45,7 +45,7 @@ function extractSerial(zoneText) {
45
45
  return Number.isFinite(parsed) ? parsed : null;
46
46
  }
47
47
  function extractContentHash(zoneText) {
48
- const match = zoneText.match(/^\s*;\s*clawdbot-content-hash:\s*(\S+)\s*$/m);
48
+ const match = zoneText.match(/^\s*;\s*poolbot-content-hash:\s*(\S+)\s*$/m);
49
49
  return match?.[1] ?? null;
50
50
  }
51
51
  function computeContentHash(body) {
@@ -58,9 +58,9 @@ function computeContentHash(body) {
58
58
  return (h >>> 0).toString(16).padStart(8, "0");
59
59
  }
60
60
  function renderZone(opts) {
61
- const hostname = os.hostname().split(".")[0] ?? "clawdbot";
62
- const hostLabel = dnsLabel(opts.hostLabel ?? hostname, "clawdbot");
63
- const instanceLabel = dnsLabel(opts.instanceLabel ?? `${hostname}-gateway`, "clawdbot-gw");
61
+ const hostname = os.hostname().split(".")[0] ?? "poolbot";
62
+ const hostLabel = dnsLabel(opts.hostLabel ?? hostname, "poolbot");
63
+ const instanceLabel = dnsLabel(opts.instanceLabel ?? `${hostname}-gateway`, "poolbot-gw");
64
64
  const txt = [
65
65
  `displayName=${opts.displayName.trim() || hostname}`,
66
66
  `role=gateway`,
@@ -93,15 +93,15 @@ function renderZone(opts) {
93
93
  if (opts.tailnetIPv6) {
94
94
  records.push(`${hostLabel} IN AAAA ${opts.tailnetIPv6}`);
95
95
  }
96
- records.push(`_clawdbot-gw._tcp IN PTR ${instanceLabel}._clawdbot-gw._tcp`);
97
- records.push(`${instanceLabel}._clawdbot-gw._tcp IN SRV 0 0 ${opts.gatewayPort} ${hostLabel}`);
98
- records.push(`${instanceLabel}._clawdbot-gw._tcp IN TXT ${txt.map(txtQuote).join(" ")}`);
96
+ records.push(`_poolbot-gw._tcp IN PTR ${instanceLabel}._poolbot-gw._tcp`);
97
+ records.push(`${instanceLabel}._poolbot-gw._tcp IN SRV 0 0 ${opts.gatewayPort} ${hostLabel}`);
98
+ records.push(`${instanceLabel}._poolbot-gw._tcp IN TXT ${txt.map(txtQuote).join(" ")}`);
99
99
  const contentBody = `${records.join("\n")}\n`;
100
100
  const hashBody = `${records
101
101
  .map((line) => line === soaLine ? `@ IN SOA ns1 hostmaster SERIAL 7200 3600 1209600 60` : line)
102
102
  .join("\n")}\n`;
103
103
  const contentHash = computeContentHash(hashBody);
104
- return `; clawdbot-content-hash: ${contentHash}\n${contentBody}`;
104
+ return `; poolbot-content-hash: ${contentHash}\n${contentBody}`;
105
105
  }
106
106
  export function renderWideAreaGatewayZoneText(opts) {
107
107
  return renderZone(opts);
@@ -1,6 +1,6 @@
1
- import crypto from "node:crypto";
2
1
  import { danger, logVerbose } from "../globals.js";
3
2
  import { createLineBot } from "./bot.js";
3
+ import { validateLineSignature } from "./signature.js";
4
4
  import { normalizePluginHttpPath } from "../plugins/http-path.js";
5
5
  import { registerPluginHttpRoute } from "../plugins/http-registry.js";
6
6
  import { replyMessageLine, showLoadingAnimation, getUserDisplayName, createQuickReplyItems, createTextMessageWithQuickReplies, pushTextMessageWithQuickReplies, pushMessageLine, pushMessagesLine, createFlexMessage, createImageMessage, createLocationMessage, } from "./send.js";
@@ -26,10 +26,6 @@ function recordChannelRuntimeState(params) {
26
26
  export function getLineRuntimeState(accountId) {
27
27
  return runtimeState.get(`line:${accountId}`);
28
28
  }
29
- function validateLineSignature(body, signature, channelSecret) {
30
- const hash = crypto.createHmac("SHA256", channelSecret).update(body).digest("base64");
31
- return hash === signature;
32
- }
33
29
  async function readRequestBody(req) {
34
30
  return new Promise((resolve, reject) => {
35
31
  const chunks = [];
@@ -0,0 +1,11 @@
1
+ import crypto from "node:crypto";
2
+ export function validateLineSignature(body, signature, channelSecret) {
3
+ const hash = crypto.createHmac("SHA256", channelSecret).update(body).digest("base64");
4
+ const hashBuffer = Buffer.from(hash);
5
+ const signatureBuffer = Buffer.from(signature);
6
+ // Use constant-time comparison to prevent timing attacks.
7
+ if (hashBuffer.length !== signatureBuffer.length) {
8
+ return false;
9
+ }
10
+ return crypto.timingSafeEqual(hashBuffer, signatureBuffer);
11
+ }
@@ -1,9 +1,5 @@
1
- import crypto from "node:crypto";
2
1
  import { logVerbose, danger } from "../globals.js";
3
- function validateSignature(body, signature, channelSecret) {
4
- const hash = crypto.createHmac("SHA256", channelSecret).update(body).digest("base64");
5
- return hash === signature;
6
- }
2
+ import { validateLineSignature } from "./signature.js";
7
3
  function readRawBody(req) {
8
4
  const rawBody = req.rawBody ??
9
5
  (typeof req.body === "string" || Buffer.isBuffer(req.body) ? req.body : null);
@@ -36,7 +32,7 @@ export function createLineWebhookMiddleware(options) {
36
32
  res.status(400).json({ error: "Missing raw request body for signature verification" });
37
33
  return;
38
34
  }
39
- if (!validateSignature(rawBody, signature, channelSecret)) {
35
+ if (!validateLineSignature(rawBody, signature, channelSecret)) {
40
36
  logVerbose("line: webhook signature validation failed");
41
37
  res.status(401).json({ error: "Invalid signature" });
42
38
  return;
@@ -7,9 +7,9 @@ import { readLoggingConfig } from "./config.js";
7
7
  import { loggingState } from "./state.js";
8
8
  // Pin to /tmp so mac Debug UI and docs match; os.tmpdir() can be a per-user
9
9
  // randomized path on macOS which made the “Open log” button a no-op.
10
- export const DEFAULT_LOG_DIR = "/tmp/clawdbot";
11
- export const DEFAULT_LOG_FILE = path.join(DEFAULT_LOG_DIR, "clawdbot.log"); // legacy single-file path
12
- const LOG_PREFIX = "clawdbot";
10
+ export const DEFAULT_LOG_DIR = "/tmp/poolbot";
11
+ export const DEFAULT_LOG_FILE = path.join(DEFAULT_LOG_DIR, "poolbot.log"); // legacy single-file path
12
+ const LOG_PREFIX = "poolbot";
13
13
  const LOG_SUFFIX = ".log";
14
14
  const MAX_LOG_AGE_MS = 24 * 60 * 60 * 1000; // 24h
15
15
  const requireConfig = createRequire(import.meta.url);
@@ -61,7 +61,7 @@ function buildLogger(settings) {
61
61
  pruneOldRollingLogs(path.dirname(settings.file));
62
62
  }
63
63
  const logger = new TsLogger({
64
- name: "clawdbot",
64
+ name: "poolbot",
65
65
  minLevel: levelToMinLevel(settings.level),
66
66
  type: "hidden", // no ansi formatting
67
67
  });
@@ -16,7 +16,7 @@ function hasFlag(args, flag) {
16
16
  const args = process.argv.slice(2);
17
17
  async function main() {
18
18
  if (hasFlag(args, "--version") || hasFlag(args, "-v")) {
19
- // Match `clawdbot --version` behavior for Swift env/version checks.
19
+ // Match `poolbot --version` behavior for Swift env/version checks.
20
20
  // Keep output a single line.
21
21
  console.log(BUNDLED_VERSION);
22
22
  process.exit(0);
@@ -173,6 +173,6 @@ async function main() {
173
173
  }
174
174
  }
175
175
  void main().catch((err) => {
176
- console.error("[clawdbot] Gateway daemon failed:", err instanceof Error ? (err.stack ?? err.message) : err);
176
+ console.error("[poolbot] Gateway daemon failed:", err instanceof Error ? (err.stack ?? err.message) : err);
177
177
  process.exit(1);
178
178
  });
@@ -37,8 +37,8 @@ async function main() {
37
37
  await patchBunLongForProtobuf();
38
38
  const { loadDotEnv } = await import("../infra/dotenv.js");
39
39
  loadDotEnv({ quiet: true });
40
- const { ensureClawdbotCliOnPath } = await import("../infra/path-env.js");
41
- ensureClawdbotCliOnPath();
40
+ const { ensureMoltbotCliOnPath } = await import("../infra/path-env.js");
41
+ ensureMoltbotCliOnPath();
42
42
  const { enableConsoleCapture } = await import("../logging.js");
43
43
  enableConsoleCapture();
44
44
  const { assertSupportedRuntime } = await import("../infra/runtime-guard.js");
@@ -49,12 +49,12 @@ async function main() {
49
49
  const program = buildProgram();
50
50
  installUnhandledRejectionHandler();
51
51
  process.on("uncaughtException", (error) => {
52
- console.error("[clawdbot] Uncaught exception:", formatUncaughtError(error));
52
+ console.error("[poolbot] Uncaught exception:", formatUncaughtError(error));
53
53
  process.exit(1);
54
54
  });
55
55
  await program.parseAsync(process.argv);
56
56
  }
57
57
  void main().catch((err) => {
58
- console.error("[clawdbot] Relay failed:", err instanceof Error ? (err.stack ?? err.message) : err);
58
+ console.error("[poolbot] Relay failed:", err instanceof Error ? (err.stack ?? err.message) : err);
59
59
  process.exit(1);
60
60
  });
@@ -18,7 +18,7 @@ export async function ensureMediaHosted(source, opts = {}) {
18
18
  const needsServerStart = await isPortFree(port);
19
19
  if (needsServerStart && !opts.startServer) {
20
20
  await fs.rm(saved.path).catch(() => { });
21
- throw new Error(`Media hosting requires the webhook/Funnel server. Start \`${formatCliCommand("clawdbot webhook")}\`/\`${formatCliCommand("clawdbot up")}\` or re-run with --serve-media.`);
21
+ throw new Error(`Media hosting requires the webhook/Funnel server. Start \`${formatCliCommand("poolbot webhook")}\`/\`${formatCliCommand("poolbot up")}\` or re-run with --serve-media.`);
22
22
  }
23
23
  if (needsServerStart && opts.startServer) {
24
24
  if (!mediaServer) {
@@ -91,7 +91,7 @@ function readJpegExifOrientation(buffer) {
91
91
  return null;
92
92
  }
93
93
  async function withTempDir(fn) {
94
- const dir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-img-"));
94
+ const dir = await fs.mkdtemp(path.join(os.tmpdir(), "poolbot-img-"));
95
95
  try {
96
96
  return await fn(dir);
97
97
  }
@@ -1,5 +1,5 @@
1
1
  import { logWarn } from "../logger.js";
2
- import { assertPublicHostname } from "../infra/net/ssrf.js";
2
+ import { closeDispatcher, createPinnedDispatcher, resolvePinnedHostname, } from "../infra/net/ssrf.js";
3
3
  let canvasModulePromise = null;
4
4
  let pdfJsModulePromise = null;
5
5
  // Lazy-load optional PDF/image deps so non-PDF paths don't require native installs.
@@ -73,42 +73,50 @@ export async function fetchWithGuard(params) {
73
73
  if (!["http:", "https:"].includes(parsedUrl.protocol)) {
74
74
  throw new Error(`Invalid URL protocol: ${parsedUrl.protocol}. Only HTTP/HTTPS allowed.`);
75
75
  }
76
- await assertPublicHostname(parsedUrl.hostname);
77
- const response = await fetch(parsedUrl, {
78
- signal: controller.signal,
79
- headers: { "User-Agent": "Clawdbot-Gateway/1.0" },
80
- redirect: "manual",
81
- });
82
- if (isRedirectStatus(response.status)) {
83
- const location = response.headers.get("location");
84
- if (!location) {
85
- throw new Error(`Redirect missing location header (${response.status})`);
76
+ const pinned = await resolvePinnedHostname(parsedUrl.hostname);
77
+ const dispatcher = createPinnedDispatcher(pinned);
78
+ try {
79
+ const response = await fetch(parsedUrl, {
80
+ signal: controller.signal,
81
+ headers: { "User-Agent": "Moltbot-Gateway/1.0" },
82
+ redirect: "manual",
83
+ dispatcher,
84
+ });
85
+ if (isRedirectStatus(response.status)) {
86
+ const location = response.headers.get("location");
87
+ if (!location) {
88
+ throw new Error(`Redirect missing location header (${response.status})`);
89
+ }
90
+ redirectCount += 1;
91
+ if (redirectCount > params.maxRedirects) {
92
+ throw new Error(`Too many redirects (limit: ${params.maxRedirects})`);
93
+ }
94
+ void response.body?.cancel();
95
+ currentUrl = new URL(location, parsedUrl).toString();
96
+ continue;
86
97
  }
87
- redirectCount += 1;
88
- if (redirectCount > params.maxRedirects) {
89
- throw new Error(`Too many redirects (limit: ${params.maxRedirects})`);
98
+ if (!response.ok) {
99
+ throw new Error(`Failed to fetch: ${response.status} ${response.statusText}`);
90
100
  }
91
- currentUrl = new URL(location, parsedUrl).toString();
92
- continue;
93
- }
94
- if (!response.ok) {
95
- throw new Error(`Failed to fetch: ${response.status} ${response.statusText}`);
96
- }
97
- const contentLength = response.headers.get("content-length");
98
- if (contentLength) {
99
- const size = parseInt(contentLength, 10);
100
- if (size > params.maxBytes) {
101
- throw new Error(`Content too large: ${size} bytes (limit: ${params.maxBytes} bytes)`);
101
+ const contentLength = response.headers.get("content-length");
102
+ if (contentLength) {
103
+ const size = parseInt(contentLength, 10);
104
+ if (size > params.maxBytes) {
105
+ throw new Error(`Content too large: ${size} bytes (limit: ${params.maxBytes} bytes)`);
106
+ }
107
+ }
108
+ const buffer = Buffer.from(await response.arrayBuffer());
109
+ if (buffer.byteLength > params.maxBytes) {
110
+ throw new Error(`Content too large: ${buffer.byteLength} bytes (limit: ${params.maxBytes} bytes)`);
102
111
  }
112
+ const contentType = response.headers.get("content-type") || undefined;
113
+ const parsed = parseContentType(contentType);
114
+ const mimeType = parsed.mimeType ?? "application/octet-stream";
115
+ return { buffer, mimeType, contentType };
103
116
  }
104
- const buffer = Buffer.from(await response.arrayBuffer());
105
- if (buffer.byteLength > params.maxBytes) {
106
- throw new Error(`Content too large: ${buffer.byteLength} bytes (limit: ${params.maxBytes} bytes)`);
117
+ finally {
118
+ await closeDispatcher(dispatcher);
107
119
  }
108
- const contentType = response.headers.get("content-type") || undefined;
109
- const parsed = parseContentType(contentType);
110
- const mimeType = parsed.mimeType ?? "application/octet-stream";
111
- return { buffer, mimeType, contentType };
112
120
  }
113
121
  }
114
122
  finally {