@poolzin/pool-bot 2026.1.26 → 2026.1.29

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 (1155) hide show
  1. package/CHANGELOG.md +50 -1118
  2. package/LICENSE +21 -0
  3. package/README.md +47 -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 +22 -33
  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/message-tool.js +1 -0
  75. package/dist/agents/tools/sessions-send-helpers.js +17 -2
  76. package/dist/agents/tools/telegram-actions.js +93 -1
  77. package/dist/agents/tools/web-fetch.js +123 -103
  78. package/dist/agents/tools/web-search.js +7 -7
  79. package/dist/agents/workspace.js +36 -0
  80. package/dist/auto-reply/commands-registry.data.js +68 -3
  81. package/dist/auto-reply/commands-registry.js +14 -11
  82. package/dist/auto-reply/reply/agent-runner-execution.js +21 -3
  83. package/dist/auto-reply/reply/agent-runner-memory.js +5 -0
  84. package/dist/auto-reply/reply/bash-command.js +2 -2
  85. package/dist/auto-reply/reply/commands-context-report.js +2 -2
  86. package/dist/auto-reply/reply/commands-info.js +50 -5
  87. package/dist/auto-reply/reply/commands-session.js +4 -4
  88. package/dist/auto-reply/reply/commands-tts.js +61 -63
  89. package/dist/auto-reply/reply/directive-handling.shared.js +1 -1
  90. package/dist/auto-reply/reply/dispatch-from-config.js +65 -1
  91. package/dist/auto-reply/reply/followup-runner.js +5 -0
  92. package/dist/auto-reply/reply/get-reply-inline-actions.js +2 -2
  93. package/dist/auto-reply/reply/get-reply-run.js +4 -0
  94. package/dist/auto-reply/reply/groups.js +1 -1
  95. package/dist/auto-reply/reply/history.js +23 -0
  96. package/dist/auto-reply/reply/reply-elevated.js +1 -1
  97. package/dist/auto-reply/reply/session-updates.js +6 -1
  98. package/dist/auto-reply/reply/stage-sandbox-media.js +1 -1
  99. package/dist/auto-reply/status.js +142 -50
  100. package/dist/browser/bridge-server.js +1 -3
  101. package/dist/browser/client-actions-core.js +13 -7
  102. package/dist/browser/client-actions-observe.js +14 -8
  103. package/dist/browser/client-actions-state.js +21 -15
  104. package/dist/browser/client-fetch.js +74 -61
  105. package/dist/browser/client.js +19 -21
  106. package/dist/browser/config.js +13 -26
  107. package/dist/browser/constants.js +1 -1
  108. package/dist/browser/control-service.js +72 -0
  109. package/dist/browser/extension-relay.js +3 -3
  110. package/dist/browser/pw-session.js +41 -4
  111. package/dist/browser/pw-tools-core.downloads.js +1 -1
  112. package/dist/browser/pw-tools-core.interactions.js +5 -5
  113. package/dist/browser/pw-tools-core.responses.js +1 -1
  114. package/dist/browser/routes/agent.act.js +13 -0
  115. package/dist/browser/routes/agent.debug.js +1 -1
  116. package/dist/browser/routes/basic.js +0 -1
  117. package/dist/browser/routes/dispatcher.js +86 -0
  118. package/dist/browser/server-context.js +3 -3
  119. package/dist/browser/server.js +7 -9
  120. package/dist/build-info.json +3 -3
  121. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  122. package/dist/canvas-host/a2ui/a2ui.bundle.js +1620 -1618
  123. package/dist/canvas-host/a2ui/index.html +28 -28
  124. package/dist/canvas-host/a2ui.js +27 -21
  125. package/dist/canvas-host/server.js +66 -32
  126. package/dist/channels/plugins/actions/discord/handle-action.guild-admin.js +5 -1
  127. package/dist/channels/plugins/actions/telegram.js +60 -7
  128. package/dist/channels/plugins/catalog.js +6 -4
  129. package/dist/channels/plugins/group-mentions.js +48 -1
  130. package/dist/channels/plugins/helpers.js +2 -2
  131. package/dist/channels/plugins/message-action-names.js +1 -0
  132. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  133. package/dist/channels/plugins/onboarding/signal.js +2 -2
  134. package/dist/channels/plugins/onboarding/slack.js +4 -4
  135. package/dist/channels/plugins/onboarding/telegram.js +17 -9
  136. package/dist/channels/plugins/onboarding/whatsapp.js +4 -4
  137. package/dist/channels/plugins/outbound/telegram.js +38 -0
  138. package/dist/channels/plugins/pairing-message.js +1 -1
  139. package/dist/channels/plugins/status-issues/bluebubbles.js +1 -1
  140. package/dist/channels/plugins/status-issues/whatsapp.js +2 -2
  141. package/dist/channels/registry.js +1 -1
  142. package/dist/cli/acp-cli.js +2 -2
  143. package/dist/cli/argv.js +14 -7
  144. package/dist/cli/banner.js +3 -1
  145. package/dist/cli/browser-cli-actions-input/register.element.js +72 -44
  146. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +55 -35
  147. package/dist/cli/browser-cli-actions-input/register.form-wait-eval.js +41 -28
  148. package/dist/cli/browser-cli-actions-input/register.navigation.js +23 -14
  149. package/dist/cli/browser-cli-actions-input/shared.js +10 -3
  150. package/dist/cli/browser-cli-actions-observe.js +29 -21
  151. package/dist/cli/browser-cli-debug.js +49 -35
  152. package/dist/cli/browser-cli-examples.js +29 -29
  153. package/dist/cli/browser-cli-extension.js +8 -8
  154. package/dist/cli/browser-cli-inspect.js +23 -17
  155. package/dist/cli/browser-cli-manage.js +106 -56
  156. package/dist/cli/browser-cli-shared.js +34 -1
  157. package/dist/cli/browser-cli-state.cookies-storage.js +53 -39
  158. package/dist/cli/browser-cli-state.js +90 -64
  159. package/dist/cli/browser-cli.js +4 -5
  160. package/dist/cli/channels-cli.js +1 -1
  161. package/dist/cli/cli-name.js +26 -0
  162. package/dist/cli/command-format.js +11 -7
  163. package/dist/cli/config-cli.js +2 -2
  164. package/dist/cli/cron-cli/register.js +1 -1
  165. package/dist/cli/daemon-cli/install.js +1 -1
  166. package/dist/cli/daemon-cli/register.js +1 -1
  167. package/dist/cli/daemon-cli/shared.js +5 -3
  168. package/dist/cli/daemon-cli/status.print.js +6 -6
  169. package/dist/cli/directory-cli.js +1 -1
  170. package/dist/cli/dns-cli.js +7 -7
  171. package/dist/cli/docs-cli.js +2 -2
  172. package/dist/cli/exec-approvals-cli.js +2 -2
  173. package/dist/cli/gateway-cli/dev.js +4 -4
  174. package/dist/cli/gateway-cli/register.js +1 -1
  175. package/dist/cli/gateway-cli/run.js +11 -8
  176. package/dist/cli/gateway-cli/shared.js +4 -4
  177. package/dist/cli/hooks-cli.js +3 -3
  178. package/dist/cli/logs-cli.js +3 -3
  179. package/dist/cli/memory-cli.js +1 -1
  180. package/dist/cli/models-cli.js +2 -2
  181. package/dist/cli/node-cli/daemon.js +2 -2
  182. package/dist/cli/node-cli/register.js +1 -1
  183. package/dist/cli/nodes-camera.js +3 -1
  184. package/dist/cli/nodes-canvas.js +3 -1
  185. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  186. package/dist/cli/nodes-cli/register.js +1 -1
  187. package/dist/cli/nodes-screen.js +1 -1
  188. package/dist/cli/pairing-cli.js +3 -3
  189. package/dist/cli/plugin-registry.js +2 -2
  190. package/dist/cli/plugins-cli.js +3 -3
  191. package/dist/cli/profile.js +2 -2
  192. package/dist/cli/program/config-guard.js +1 -1
  193. package/dist/cli/program/help.js +15 -16
  194. package/dist/cli/program/message/register.send.js +2 -1
  195. package/dist/cli/program/preaction.js +4 -2
  196. package/dist/cli/program/register.agent.js +12 -12
  197. package/dist/cli/program/register.configure.js +1 -1
  198. package/dist/cli/program/register.maintenance.js +4 -4
  199. package/dist/cli/program/register.message.js +5 -5
  200. package/dist/cli/program/register.onboard.js +5 -3
  201. package/dist/cli/program/register.setup.js +2 -2
  202. package/dist/cli/program/register.status-health-sessions.js +13 -13
  203. package/dist/cli/run-main.js +11 -4
  204. package/dist/cli/sandbox-cli.js +19 -19
  205. package/dist/cli/security-cli.js +18 -8
  206. package/dist/cli/skills-cli.js +3 -3
  207. package/dist/cli/system-cli.js +1 -1
  208. package/dist/cli/tagline.js +1 -1
  209. package/dist/cli/tui-cli.js +1 -1
  210. package/dist/cli/update-cli.js +58 -42
  211. package/dist/cli/webhooks-cli.js +6 -6
  212. package/dist/commands/agent-via-gateway.js +1 -1
  213. package/dist/commands/agent.js +2 -1
  214. package/dist/commands/agents.command-shared.js +1 -1
  215. package/dist/commands/agents.commands.add.js +2 -3
  216. package/dist/commands/agents.commands.list.js +1 -1
  217. package/dist/commands/auth-choice-options.js +4 -54
  218. package/dist/commands/auth-choice.apply.anthropic.js +6 -109
  219. package/dist/commands/auth-choice.apply.openai.js +1 -33
  220. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  221. package/dist/commands/channels/list.js +2 -2
  222. package/dist/commands/channels/shared.js +1 -1
  223. package/dist/commands/channels/status.js +1 -1
  224. package/dist/commands/chutes-oauth.js +1 -1
  225. package/dist/commands/configure.channels.js +4 -4
  226. package/dist/commands/configure.gateway-auth.js +1 -8
  227. package/dist/commands/configure.gateway.js +1 -10
  228. package/dist/commands/configure.wizard.js +11 -11
  229. package/dist/commands/daemon-install-helpers.js +1 -1
  230. package/dist/commands/dashboard.js +1 -1
  231. package/dist/commands/docs.js +5 -5
  232. package/dist/commands/doctor-auth.js +122 -3
  233. package/dist/commands/doctor-config-flow.js +7 -7
  234. package/dist/commands/doctor-format.js +2 -2
  235. package/dist/commands/doctor-gateway-daemon-flow.js +1 -1
  236. package/dist/commands/doctor-gateway-services.js +3 -3
  237. package/dist/commands/doctor-platform-notes.js +1 -1
  238. package/dist/commands/doctor-security.js +48 -1
  239. package/dist/commands/doctor-state-integrity.js +3 -3
  240. package/dist/commands/doctor-ui.js +2 -2
  241. package/dist/commands/doctor-update.js +4 -4
  242. package/dist/commands/doctor-workspace-status.js +2 -2
  243. package/dist/commands/doctor-workspace.js +4 -4
  244. package/dist/commands/doctor.js +13 -12
  245. package/dist/commands/gateway-status.js +2 -2
  246. package/dist/commands/models/auth.js +23 -22
  247. package/dist/commands/models/list.probe.js +2 -2
  248. package/dist/commands/models/list.registry.js +4 -4
  249. package/dist/commands/models/list.status-command.js +8 -9
  250. package/dist/commands/onboard-auth.credentials.js +2 -2
  251. package/dist/commands/onboard-channels.js +3 -3
  252. package/dist/commands/onboard-helpers.js +4 -4
  253. package/dist/commands/onboard-hooks.js +4 -4
  254. package/dist/commands/onboard-non-interactive/local/auth-choice.js +38 -34
  255. package/dist/commands/onboard-non-interactive/local/gateway-config.js +7 -4
  256. package/dist/commands/onboard-non-interactive/local.js +1 -1
  257. package/dist/commands/onboard-non-interactive/remote.js +1 -1
  258. package/dist/commands/onboard-non-interactive.js +1 -1
  259. package/dist/commands/onboard-remote.js +2 -2
  260. package/dist/commands/onboard-skills.js +2 -2
  261. package/dist/commands/onboard.js +25 -4
  262. package/dist/commands/onboarding/plugin-install.js +2 -2
  263. package/dist/commands/reset.js +3 -3
  264. package/dist/commands/sandbox-display.js +1 -1
  265. package/dist/commands/sandbox-explain.js +2 -2
  266. package/dist/commands/setup.js +2 -2
  267. package/dist/commands/signal-install.js +2 -2
  268. package/dist/commands/status-all/diagnosis.js +1 -1
  269. package/dist/commands/status-all/report-lines.js +1 -1
  270. package/dist/commands/status-all.js +3 -3
  271. package/dist/commands/status.command.js +9 -9
  272. package/dist/commands/status.update.js +3 -3
  273. package/dist/commands/uninstall.js +4 -4
  274. package/dist/compat/legacy-names.js +5 -0
  275. package/dist/config/config.js +1 -1
  276. package/dist/config/group-policy.js +69 -0
  277. package/dist/config/io.js +17 -5
  278. package/dist/config/legacy.migrations.part-3.js +3 -0
  279. package/dist/config/logging.js +3 -3
  280. package/dist/config/paths.js +44 -14
  281. package/dist/config/schema.js +23 -11
  282. package/dist/config/sessions/transcript.js +1 -1
  283. package/dist/config/types.js +1 -1
  284. package/dist/config/types.poolbot.js +1 -0
  285. package/dist/config/validation.js +2 -2
  286. package/dist/config/version.js +4 -4
  287. package/dist/config/zod-schema.agent-defaults.js +1 -0
  288. package/dist/config/zod-schema.agent-runtime.js +39 -7
  289. package/dist/config/zod-schema.hooks.js +2 -0
  290. package/dist/config/zod-schema.js +9 -3
  291. package/dist/config/zod-schema.providers-core.js +23 -0
  292. package/dist/config/zod-schema.providers-whatsapp.js +3 -0
  293. package/dist/control-ui/assets/index-CIRDm-Lu.css +1 -0
  294. package/dist/control-ui/assets/{index-Cl-Y9zqE.js → index-CmNMuoem.js} +620 -578
  295. package/dist/control-ui/assets/index-CmNMuoem.js.map +1 -0
  296. package/dist/control-ui/index.html +4 -4
  297. package/dist/cron/isolated-agent/run.js +38 -3
  298. package/dist/daemon/constants.js +16 -16
  299. package/dist/daemon/inspect.js +12 -12
  300. package/dist/daemon/paths.js +1 -1
  301. package/dist/daemon/program-args.js +1 -1
  302. package/dist/daemon/systemd-hints.js +1 -1
  303. package/dist/daemon/systemd-unit.js +1 -1
  304. package/dist/discord/monitor/listeners.js +25 -1
  305. package/dist/discord/monitor/native-command.js +7 -5
  306. package/dist/discord/monitor/presence-cache.js +38 -0
  307. package/dist/discord/monitor/provider.js +21 -7
  308. package/dist/entry.js +4 -4
  309. package/dist/gateway/auth.js +52 -19
  310. package/dist/gateway/hooks-mapping.js +18 -4
  311. package/dist/gateway/hooks.js +5 -7
  312. package/dist/gateway/http-utils.js +3 -5
  313. package/dist/gateway/net.js +1 -1
  314. package/dist/gateway/openai-http.js +3 -3
  315. package/dist/gateway/openresponses-http.js +4 -4
  316. package/dist/gateway/protocol/client-info.js +5 -5
  317. package/dist/gateway/protocol/schema/logs-chat.js +1 -1
  318. package/dist/gateway/server/health-state.js +3 -3
  319. package/dist/gateway/server/hooks.js +1 -0
  320. package/dist/gateway/server/ws-connection/message-handler.js +44 -35
  321. package/dist/gateway/server-browser.js +14 -3
  322. package/dist/gateway/server-chat.js +28 -2
  323. package/dist/gateway/server-discovery-runtime.js +25 -17
  324. package/dist/gateway/server-discovery.js +5 -5
  325. package/dist/gateway/server-http.js +9 -3
  326. package/dist/gateway/server-methods/agent.js +2 -0
  327. package/dist/gateway/server-methods/browser.js +204 -0
  328. package/dist/gateway/server-methods/chat.js +5 -0
  329. package/dist/gateway/server-methods/config.js +8 -8
  330. package/dist/gateway/server-methods/logs.js +1 -1
  331. package/dist/gateway/server-methods/skills.js +3 -3
  332. package/dist/gateway/server-methods/update.js +2 -2
  333. package/dist/gateway/server-methods-list.js +1 -0
  334. package/dist/gateway/server-methods.js +3 -0
  335. package/dist/gateway/server-plugins.js +2 -2
  336. package/dist/gateway/server-restart-sentinel.js +10 -5
  337. package/dist/gateway/server-runtime-config.js +5 -2
  338. package/dist/gateway/server.impl.js +7 -6
  339. package/dist/gateway/session-utils.fs.js +1 -1
  340. package/dist/gateway/session-utils.js +31 -11
  341. package/dist/gateway/test-helpers.mocks.js +5 -5
  342. package/dist/gateway/test-helpers.server.js +30 -11
  343. package/dist/gateway/tools-invoke-http.js +15 -8
  344. package/dist/hooks/bundled/boot-md/HOOK.md +3 -3
  345. package/dist/hooks/bundled/command-logger/HOOK.md +12 -12
  346. package/dist/hooks/bundled/command-logger/handler.js +1 -1
  347. package/dist/hooks/bundled/session-memory/HOOK.md +4 -4
  348. package/dist/hooks/bundled/session-memory/handler.js +2 -2
  349. package/dist/hooks/bundled/soul-evil/HOOK.md +5 -5
  350. package/dist/hooks/bundled-dir.js +1 -1
  351. package/dist/hooks/config.js +8 -7
  352. package/dist/hooks/frontmatter.js +16 -15
  353. package/dist/hooks/gmail-ops.js +4 -4
  354. package/dist/hooks/hooks-status.js +13 -13
  355. package/dist/hooks/install.js +8 -7
  356. package/dist/hooks/internal-hooks.js +1 -1
  357. package/dist/hooks/llm-slug-generator.js +1 -1
  358. package/dist/hooks/loader.js +3 -3
  359. package/dist/hooks/plugin-hooks.js +8 -8
  360. package/dist/hooks/workspace.js +10 -9
  361. package/dist/imessage/monitor/monitor-provider.js +2 -2
  362. package/dist/index.js +4 -4
  363. package/dist/infra/agent-events.js +3 -0
  364. package/dist/infra/bonjour-discovery.js +9 -9
  365. package/dist/infra/bonjour.js +19 -12
  366. package/dist/infra/device-identity.js +1 -1
  367. package/dist/infra/dotenv.js +1 -1
  368. package/dist/infra/exec-approvals.js +2 -2
  369. package/dist/infra/fs-safe.js +76 -0
  370. package/dist/infra/gateway-lock.js +1 -1
  371. package/dist/infra/heartbeat-visibility.js +14 -0
  372. package/dist/infra/heartbeat-wake.js +2 -2
  373. package/dist/infra/machine-name.js +1 -1
  374. package/dist/infra/net/ssrf.js +77 -1
  375. package/dist/infra/outbound/message-action-spec.js +1 -0
  376. package/dist/infra/outbound/targets.js +1 -1
  377. package/dist/infra/path-env.js +7 -7
  378. package/dist/infra/{clawdbot-root.js → poolbot-root.js} +3 -2
  379. package/dist/infra/ports-format.js +2 -2
  380. package/dist/infra/ports.js +2 -2
  381. package/dist/infra/provider-usage.auth.js +2 -4
  382. package/dist/infra/provider-usage.fetch.claude.js +1 -1
  383. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  384. package/dist/infra/restart-sentinel.js +1 -1
  385. package/dist/infra/restart.js +1 -1
  386. package/dist/infra/retry-policy.js +4 -1
  387. package/dist/infra/runtime-guard.js +2 -2
  388. package/dist/infra/shell-env.js +1 -1
  389. package/dist/infra/skills-remote.js +3 -3
  390. package/dist/infra/tailscale.js +63 -1
  391. package/dist/infra/tls/gateway.js +1 -1
  392. package/dist/infra/unhandled-rejections.js +89 -2
  393. package/dist/infra/update-check.js +2 -4
  394. package/dist/infra/update-global.js +5 -5
  395. package/dist/infra/update-runner.js +32 -8
  396. package/dist/infra/update-startup.js +3 -3
  397. package/dist/infra/warnings.js +1 -1
  398. package/dist/infra/widearea-dns.js +10 -10
  399. package/dist/line/monitor.js +1 -5
  400. package/dist/line/signature.js +11 -0
  401. package/dist/line/webhook.js +2 -6
  402. package/dist/logging/logger.js +4 -4
  403. package/dist/macos/gateway-daemon.js +2 -2
  404. package/dist/macos/relay.js +4 -4
  405. package/dist/media/host.js +1 -1
  406. package/dist/media/image-ops.js +1 -1
  407. package/dist/media/input-files.js +40 -32
  408. package/dist/media/server.js +39 -15
  409. package/dist/media/store.js +72 -52
  410. package/dist/media-understanding/attachments.js +1 -1
  411. package/dist/media-understanding/providers/image.js +2 -2
  412. package/dist/media-understanding/runner.js +33 -1
  413. package/dist/memory/batch-gemini.js +1 -1
  414. package/dist/memory/batch-openai.js +1 -1
  415. package/dist/memory/embeddings.js +1 -1
  416. package/dist/node-host/runner.js +60 -56
  417. package/dist/pairing/pairing-messages.js +2 -2
  418. package/dist/plugin-sdk/index.js +1 -0
  419. package/dist/plugins/cli.js +2 -2
  420. package/dist/plugins/discovery.js +6 -5
  421. package/dist/plugins/install.js +8 -7
  422. package/dist/plugins/loader.js +10 -4
  423. package/dist/plugins/manifest-registry.js +2 -2
  424. package/dist/plugins/manifest.js +16 -1
  425. package/dist/plugins/providers.js +2 -2
  426. package/dist/plugins/registry.js +5 -5
  427. package/dist/plugins/runtime.js +1 -1
  428. package/dist/plugins/services.js +3 -3
  429. package/dist/plugins/status.js +2 -2
  430. package/dist/plugins/tools.js +2 -2
  431. package/dist/plugins/update.js +3 -3
  432. package/dist/providers/qwen-portal-oauth.js +1 -1
  433. package/dist/routing/session-key.js +17 -12
  434. package/dist/security/audit-extra.js +116 -69
  435. package/dist/security/audit-fs.js +78 -0
  436. package/dist/security/audit.js +121 -88
  437. package/dist/security/external-content.js +143 -0
  438. package/dist/security/fix.js +93 -8
  439. package/dist/security/windows-acl.js +162 -0
  440. package/dist/slack/monitor/media.js +32 -4
  441. package/dist/slack/monitor/message-handler/dispatch.js +2 -1
  442. package/dist/slack/monitor/slash.js +3 -3
  443. package/dist/slack/monitor.test-helpers.js +1 -1
  444. package/dist/telegram/api-logging.js +24 -0
  445. package/dist/telegram/bot/delivery.js +139 -22
  446. package/dist/telegram/bot-handlers.js +70 -8
  447. package/dist/telegram/bot-message-context.js +79 -21
  448. package/dist/telegram/bot-message-dispatch.js +64 -0
  449. package/dist/telegram/bot-native-commands.js +244 -94
  450. package/dist/telegram/bot.js +18 -2
  451. package/dist/telegram/fetch.js +25 -1
  452. package/dist/telegram/monitor.js +11 -3
  453. package/dist/telegram/network-config.js +23 -0
  454. package/dist/telegram/network-errors.js +103 -0
  455. package/dist/telegram/send.js +148 -4
  456. package/dist/telegram/sticker-cache.js +202 -0
  457. package/dist/telegram/webhook-set.js +13 -6
  458. package/dist/telegram/webhook.js +8 -3
  459. package/dist/terminal/links.js +1 -1
  460. package/dist/tts/tts.js +27 -22
  461. package/dist/tui/components/filterable-select-list.js +1 -1
  462. package/dist/tui/components/searchable-select-list.js +2 -1
  463. package/dist/tui/gateway-chat.js +1 -1
  464. package/dist/tui/tui.js +1 -1
  465. package/dist/utils.js +1 -1
  466. package/dist/version.js +1 -1
  467. package/dist/web/active-listener.js +1 -1
  468. package/dist/web/auth-store.js +1 -1
  469. package/dist/web/auto-reply/monitor/process-message.js +1 -1
  470. package/dist/web/auto-reply/monitor.js +1 -1
  471. package/dist/web/login.js +1 -1
  472. package/dist/web/session.js +2 -2
  473. package/dist/wizard/onboarding.finalize.js +24 -21
  474. package/dist/wizard/onboarding.gateway-config.js +1 -11
  475. package/dist/wizard/onboarding.js +22 -11
  476. package/docs/CNAME +1 -1
  477. package/docs/RELEASE_WORKFLOW.md +133 -0
  478. package/docs/RELEASE_WORKFOTS_COMPARISON.md +151 -0
  479. package/docs/WORKFOTS_OPTIMIZATION.md +138 -0
  480. package/docs/_config.yml +2 -2
  481. package/docs/_layouts/default.html +9 -9
  482. package/docs/adr/002-model-fallback-router.md +104 -0
  483. package/docs/assets/terminal.css +3 -0
  484. package/docs/assets/theme.js +1 -1
  485. package/docs/automation/auth-monitoring.md +7 -7
  486. package/docs/automation/cron-jobs.md +17 -17
  487. package/docs/automation/cron-vs-heartbeat.md +8 -8
  488. package/docs/automation/gmail-pubsub.md +23 -21
  489. package/docs/automation/poll.md +7 -7
  490. package/docs/automation/webhook.md +13 -8
  491. package/docs/bedrock.md +10 -10
  492. package/docs/brave-search.md +1 -1
  493. package/docs/broadcast-groups.md +4 -4
  494. package/docs/channels/bluebubbles.md +13 -12
  495. package/docs/channels/discord.md +21 -16
  496. package/docs/channels/googlechat.md +16 -16
  497. package/docs/channels/imessage.md +12 -12
  498. package/docs/channels/index.md +6 -4
  499. package/docs/channels/line.md +183 -0
  500. package/docs/channels/location.md +1 -1
  501. package/docs/channels/matrix.md +15 -15
  502. package/docs/channels/mattermost.md +8 -8
  503. package/docs/channels/msteams.md +30 -26
  504. package/docs/channels/nextcloud-talk.md +7 -7
  505. package/docs/channels/nostr.md +9 -9
  506. package/docs/channels/signal.md +9 -9
  507. package/docs/channels/slack.md +15 -13
  508. package/docs/channels/telegram.md +149 -20
  509. package/docs/channels/tlon.md +5 -5
  510. package/docs/channels/troubleshooting.md +2 -2
  511. package/docs/channels/twitch.md +366 -0
  512. package/docs/channels/whatsapp.md +25 -25
  513. package/docs/channels/zalo.md +8 -8
  514. package/docs/channels/zalouser.md +12 -12
  515. package/docs/cli/acp.md +24 -24
  516. package/docs/cli/agent.md +6 -6
  517. package/docs/cli/agents.md +9 -9
  518. package/docs/cli/approvals.md +14 -14
  519. package/docs/cli/browser.md +33 -35
  520. package/docs/cli/channels.md +21 -21
  521. package/docs/cli/config.md +15 -15
  522. package/docs/cli/configure.md +6 -6
  523. package/docs/cli/cron.md +5 -5
  524. package/docs/cli/dashboard.md +4 -4
  525. package/docs/cli/devices.md +13 -13
  526. package/docs/cli/directory.md +12 -12
  527. package/docs/cli/dns.md +5 -5
  528. package/docs/cli/docs.md +5 -5
  529. package/docs/cli/doctor.md +6 -6
  530. package/docs/cli/gateway.md +24 -24
  531. package/docs/cli/health.md +5 -5
  532. package/docs/cli/hooks.md +34 -34
  533. package/docs/cli/index.md +46 -52
  534. package/docs/cli/logs.md +6 -6
  535. package/docs/cli/memory.md +11 -11
  536. package/docs/cli/message.md +11 -11
  537. package/docs/cli/models.md +17 -17
  538. package/docs/cli/node.md +14 -14
  539. package/docs/cli/nodes.md +14 -14
  540. package/docs/cli/onboard.md +7 -6
  541. package/docs/cli/pairing.md +4 -4
  542. package/docs/cli/plugins.md +16 -16
  543. package/docs/cli/reset.md +5 -5
  544. package/docs/cli/sandbox.md +28 -28
  545. package/docs/cli/security.md +5 -5
  546. package/docs/cli/sessions.md +5 -5
  547. package/docs/cli/setup.md +6 -6
  548. package/docs/cli/skills.md +6 -6
  549. package/docs/cli/status.md +7 -7
  550. package/docs/cli/system.md +6 -6
  551. package/docs/cli/tui.md +5 -5
  552. package/docs/cli/uninstall.md +5 -5
  553. package/docs/cli/update.md +20 -20
  554. package/docs/cli/voicecall.md +9 -9
  555. package/docs/cli/webhooks.md +5 -5
  556. package/docs/concepts/agent-loop.md +5 -5
  557. package/docs/concepts/agent-workspace.md +20 -20
  558. package/docs/concepts/agent.md +12 -12
  559. package/docs/concepts/architecture.md +1 -1
  560. package/docs/concepts/channel-routing.md +4 -4
  561. package/docs/concepts/compaction.md +5 -5
  562. package/docs/concepts/context.md +6 -6
  563. package/docs/concepts/group-messages.md +6 -6
  564. package/docs/concepts/groups.md +41 -5
  565. package/docs/concepts/markdown-formatting.md +3 -3
  566. package/docs/concepts/memory.md +14 -14
  567. package/docs/concepts/messages.md +4 -4
  568. package/docs/concepts/model-failover.md +14 -14
  569. package/docs/concepts/model-providers.md +22 -22
  570. package/docs/concepts/models.md +27 -27
  571. package/docs/concepts/multi-agent.md +18 -18
  572. package/docs/concepts/oauth.md +31 -58
  573. package/docs/concepts/presence.md +2 -2
  574. package/docs/concepts/retry.md +1 -1
  575. package/docs/concepts/session-pruning.md +1 -1
  576. package/docs/concepts/session-tool.md +4 -4
  577. package/docs/concepts/session.md +14 -14
  578. package/docs/concepts/streaming.md +3 -3
  579. package/docs/concepts/system-prompt.md +11 -11
  580. package/docs/concepts/timezone.md +2 -2
  581. package/docs/concepts/typebox.md +2 -2
  582. package/docs/concepts/typing-indicators.md +2 -2
  583. package/docs/concepts/usage-tracking.md +3 -3
  584. package/docs/date-time.md +2 -2
  585. package/docs/debug/node-issue.md +4 -4
  586. package/docs/debugging.md +14 -14
  587. package/docs/diagnostics/flags.md +5 -5
  588. package/docs/docs.json +37 -7
  589. package/docs/environment.md +4 -4
  590. package/docs/experiments/plans/cron-add-hardening.md +1 -1
  591. package/docs/experiments/plans/openresponses-gateway.md +2 -2
  592. package/docs/experiments/research/memory.md +6 -6
  593. package/docs/gateway/authentication.md +33 -57
  594. package/docs/gateway/background-process.md +1 -1
  595. package/docs/gateway/bonjour.md +21 -21
  596. package/docs/gateway/bridge-protocol.md +2 -2
  597. package/docs/gateway/cli-backends.md +13 -12
  598. package/docs/gateway/configuration-examples.md +14 -14
  599. package/docs/gateway/configuration.md +145 -132
  600. package/docs/gateway/discovery.md +6 -6
  601. package/docs/gateway/doctor.md +26 -26
  602. package/docs/gateway/gateway-lock.md +1 -1
  603. package/docs/gateway/health.md +11 -11
  604. package/docs/gateway/heartbeat.md +5 -5
  605. package/docs/gateway/index.md +56 -56
  606. package/docs/gateway/local-models.md +2 -2
  607. package/docs/gateway/logging.md +8 -8
  608. package/docs/gateway/multiple-gateways.md +23 -23
  609. package/docs/gateway/openai-http-api.md +10 -10
  610. package/docs/gateway/openresponses-http-api.md +10 -10
  611. package/docs/gateway/pairing.md +8 -8
  612. package/docs/gateway/protocol.md +5 -4
  613. package/docs/gateway/remote-gateway-readme.md +13 -13
  614. package/docs/gateway/remote.md +4 -4
  615. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +10 -7
  616. package/docs/gateway/sandboxing.md +8 -6
  617. package/docs/gateway/security/formal-verification.md +107 -0
  618. package/docs/gateway/{security.md → security/index.md} +151 -71
  619. package/docs/gateway/tailscale.md +16 -35
  620. package/docs/gateway/tools-invoke-http-api.md +3 -3
  621. package/docs/gateway/troubleshooting.md +108 -113
  622. package/docs/help/faq.md +326 -335
  623. package/docs/help/troubleshooting.md +15 -15
  624. package/docs/hooks/soul-evil.md +2 -2
  625. package/docs/hooks.md +60 -60
  626. package/docs/index.md +35 -35
  627. package/docs/install/ansible.md +35 -35
  628. package/docs/install/development-channels.md +10 -10
  629. package/docs/install/docker.md +31 -31
  630. package/docs/install/index.md +28 -27
  631. package/docs/install/installer.md +21 -21
  632. package/docs/install/migrating.md +190 -0
  633. package/docs/install/nix.md +17 -17
  634. package/docs/install/node.md +7 -6
  635. package/docs/install/uninstall.md +29 -29
  636. package/docs/install/updating.md +50 -49
  637. package/docs/logging.md +58 -58
  638. package/docs/multi-agent-sandbox-tools.md +7 -7
  639. package/docs/network.md +1 -1
  640. package/docs/nodes/audio.md +2 -2
  641. package/docs/nodes/camera.md +18 -18
  642. package/docs/nodes/images.md +4 -4
  643. package/docs/nodes/index.md +55 -55
  644. package/docs/nodes/location-command.md +2 -2
  645. package/docs/nodes/media-understanding.md +5 -5
  646. package/docs/nodes/talk.md +1 -1
  647. package/docs/nodes/voicewake.md +2 -2
  648. package/docs/northflank.mdx +53 -0
  649. package/docs/perplexity.md +2 -2
  650. package/docs/platforms/android.md +13 -13
  651. package/docs/platforms/digitalocean.md +243 -0
  652. package/docs/platforms/exe-dev.md +23 -23
  653. package/docs/platforms/fly.md +129 -18
  654. package/docs/platforms/gcp.md +498 -0
  655. package/docs/platforms/hetzner.md +30 -30
  656. package/docs/platforms/index.md +9 -9
  657. package/docs/platforms/ios.md +13 -13
  658. package/docs/platforms/linux.md +11 -11
  659. package/docs/platforms/mac/bundled-gateway.md +14 -14
  660. package/docs/platforms/mac/canvas.md +14 -14
  661. package/docs/platforms/mac/child-process.md +9 -9
  662. package/docs/platforms/mac/dev-setup.md +11 -11
  663. package/docs/platforms/mac/health.md +2 -2
  664. package/docs/platforms/mac/icon.md +1 -1
  665. package/docs/platforms/mac/logging.md +7 -7
  666. package/docs/platforms/mac/menu-bar.md +1 -1
  667. package/docs/platforms/mac/peekaboo.md +9 -9
  668. package/docs/platforms/mac/permissions.md +3 -3
  669. package/docs/platforms/mac/release.md +20 -20
  670. package/docs/platforms/mac/remote.md +14 -14
  671. package/docs/platforms/mac/signing.md +7 -7
  672. package/docs/platforms/mac/skills.md +4 -4
  673. package/docs/platforms/mac/voice-overlay.md +2 -2
  674. package/docs/platforms/mac/webchat.md +2 -2
  675. package/docs/platforms/mac/xpc.md +4 -4
  676. package/docs/platforms/macos-vm.md +27 -27
  677. package/docs/platforms/macos.md +20 -20
  678. package/docs/platforms/oracle.md +291 -0
  679. package/docs/platforms/raspberry-pi.md +354 -0
  680. package/docs/platforms/windows.md +11 -11
  681. package/docs/plugin.md +64 -64
  682. package/docs/plugins/agent-tools.md +1 -1
  683. package/docs/plugins/manifest.md +4 -4
  684. package/docs/plugins/voice-call.md +15 -12
  685. package/docs/plugins/zalouser.md +9 -9
  686. package/docs/prose.md +9 -9
  687. package/docs/providers/anthropic.md +23 -27
  688. package/docs/providers/claude-max-api-proxy.md +145 -0
  689. package/docs/providers/deepgram.md +2 -2
  690. package/docs/providers/github-copilot.md +11 -11
  691. package/docs/providers/glm.md +4 -4
  692. package/docs/providers/index.md +7 -3
  693. package/docs/providers/minimax.md +9 -9
  694. package/docs/providers/models.md +3 -3
  695. package/docs/providers/moonshot.md +2 -2
  696. package/docs/providers/ollama.md +11 -11
  697. package/docs/providers/openai.md +9 -13
  698. package/docs/providers/opencode.md +3 -3
  699. package/docs/providers/openrouter.md +3 -3
  700. package/docs/providers/qwen.md +6 -6
  701. package/docs/providers/synthetic.md +4 -4
  702. package/docs/providers/venice.md +21 -21
  703. package/docs/providers/vercel-ai-gateway.md +5 -4
  704. package/docs/providers/zai.md +5 -5
  705. package/docs/railway.mdx +5 -5
  706. package/docs/refactor/exec-host.md +5 -5
  707. package/docs/refactor/plugin-sdk.md +12 -12
  708. package/docs/refactor/strict-config.md +11 -11
  709. package/docs/reference/AGENTS.default.md +10 -10
  710. package/docs/reference/RELEASING.md +27 -27
  711. package/docs/reference/api-usage-costs.md +6 -6
  712. package/docs/reference/device-models.md +7 -7
  713. package/docs/reference/rpc.md +3 -3
  714. package/docs/reference/session-management-compaction.md +19 -19
  715. package/docs/reference/templates/AGENTS.dev.md +1 -1
  716. package/docs/reference/templates/BOOT.md +1 -1
  717. package/docs/reference/templates/TOOLS.dev.md +1 -1
  718. package/docs/reference/templates/USER.dev.md +2 -2
  719. package/docs/reference/test.md +2 -2
  720. package/docs/reference/transcript-hygiene.md +1 -1
  721. package/docs/render.mdx +158 -0
  722. package/docs/scripts.md +1 -1
  723. package/docs/security/formal-verification.md +107 -0
  724. package/docs/start/getting-started.md +31 -25
  725. package/docs/start/hubs.md +2 -2
  726. package/docs/start/lore.md +74 -38
  727. package/docs/start/onboarding.md +7 -7
  728. package/docs/start/pairing.md +10 -10
  729. package/docs/start/{clawd.md → poolbot.md} +29 -29
  730. package/docs/start/setup.md +30 -17
  731. package/docs/start/showcase.md +32 -32
  732. package/docs/start/wizard.md +29 -26
  733. package/docs/testing.md +12 -12
  734. package/docs/token-use.md +7 -7
  735. package/docs/tools/agent-send.md +10 -10
  736. package/docs/tools/browser-linux-troubleshooting.md +10 -10
  737. package/docs/tools/browser-login.md +4 -4
  738. package/docs/tools/browser.md +135 -241
  739. package/docs/tools/chrome-extension.md +31 -48
  740. package/docs/tools/creating-skills.md +4 -4
  741. package/docs/tools/elevated.md +1 -0
  742. package/docs/tools/exec-approvals.md +8 -5
  743. package/docs/tools/exec.md +15 -4
  744. package/docs/tools/firecrawl.md +2 -2
  745. package/docs/tools/index.md +18 -15
  746. package/docs/tools/llm-task.md +1 -1
  747. package/docs/tools/lobster.md +23 -11
  748. package/docs/tools/{clawdhub.md → poolhub.md} +7 -7
  749. package/docs/tools/skills-config.md +2 -2
  750. package/docs/tools/skills.md +39 -31
  751. package/docs/tools/slash-commands.md +10 -8
  752. package/docs/tools/web.md +8 -8
  753. package/docs/tts.md +11 -11
  754. package/docs/tui.md +7 -7
  755. package/docs/vps.md +6 -1
  756. package/docs/web/control-ui.md +13 -12
  757. package/docs/web/dashboard.md +8 -4
  758. package/docs/web/index.md +6 -5
  759. package/docs/web/webchat.md +1 -1
  760. package/extensions/bluebubbles/index.ts +3 -3
  761. package/extensions/bluebubbles/package.json +5 -5
  762. package/extensions/bluebubbles/src/accounts.ts +9 -9
  763. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  764. package/extensions/bluebubbles/src/actions.ts +6 -6
  765. package/extensions/bluebubbles/src/attachments.ts +2 -2
  766. package/extensions/bluebubbles/src/channel.ts +17 -17
  767. package/extensions/bluebubbles/src/chat.ts +2 -2
  768. package/extensions/bluebubbles/src/config-schema.ts +1 -1
  769. package/extensions/bluebubbles/src/media-send.ts +2 -2
  770. package/extensions/bluebubbles/src/monitor.test.ts +56 -50
  771. package/extensions/bluebubbles/src/monitor.ts +181 -6
  772. package/extensions/bluebubbles/src/onboarding.ts +9 -9
  773. package/extensions/bluebubbles/src/reactions.ts +2 -2
  774. package/extensions/bluebubbles/src/runtime.ts +1 -1
  775. package/extensions/bluebubbles/src/send.ts +2 -2
  776. package/extensions/copilot-proxy/README.md +2 -2
  777. package/extensions/copilot-proxy/index.ts +1 -1
  778. package/extensions/copilot-proxy/package.json +4 -4
  779. package/extensions/diagnostics-otel/index.ts +3 -3
  780. package/extensions/diagnostics-otel/package.json +4 -4
  781. package/extensions/diagnostics-otel/src/service.test.ts +15 -15
  782. package/extensions/diagnostics-otel/src/service.ts +85 -85
  783. package/extensions/discord/index.ts +3 -3
  784. package/extensions/discord/package.json +4 -4
  785. package/extensions/discord/src/channel.ts +1 -1
  786. package/extensions/discord/src/runtime.ts +1 -1
  787. package/extensions/google-antigravity-auth/README.md +2 -2
  788. package/extensions/google-antigravity-auth/index.ts +9 -2
  789. package/extensions/google-antigravity-auth/package.json +4 -4
  790. package/extensions/google-gemini-cli-auth/README.md +2 -2
  791. package/extensions/google-gemini-cli-auth/index.ts +1 -1
  792. package/extensions/google-gemini-cli-auth/oauth.ts +2 -2
  793. package/extensions/google-gemini-cli-auth/package.json +4 -4
  794. package/extensions/googlechat/index.ts +4 -4
  795. package/extensions/googlechat/node_modules/.bin/poolbot +21 -0
  796. package/extensions/googlechat/package.json +7 -7
  797. package/extensions/googlechat/src/accounts.ts +9 -9
  798. package/extensions/googlechat/src/actions.ts +8 -8
  799. package/extensions/googlechat/src/api.ts +1 -1
  800. package/extensions/googlechat/src/channel.ts +23 -23
  801. package/extensions/googlechat/src/monitor.ts +9 -9
  802. package/extensions/googlechat/src/onboarding.ts +11 -11
  803. package/extensions/googlechat/src/runtime.ts +1 -1
  804. package/extensions/googlechat/src/types.config.ts +1 -1
  805. package/extensions/imessage/index.ts +3 -3
  806. package/extensions/imessage/package.json +4 -4
  807. package/extensions/imessage/src/channel.ts +1 -1
  808. package/extensions/imessage/src/runtime.ts +1 -1
  809. package/extensions/line/index.ts +3 -3
  810. package/extensions/line/node_modules/.bin/poolbot +21 -0
  811. package/extensions/line/package.json +6 -6
  812. package/extensions/line/src/card-command.ts +3 -3
  813. package/extensions/line/src/channel.logout.test.ts +4 -4
  814. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  815. package/extensions/line/src/channel.ts +5 -5
  816. package/extensions/line/src/runtime.ts +1 -1
  817. package/extensions/llm-task/README.md +1 -1
  818. package/extensions/llm-task/index.ts +2 -2
  819. package/extensions/llm-task/package.json +4 -4
  820. package/extensions/llm-task/src/llm-task-tool.ts +5 -5
  821. package/extensions/lobster/index.ts +2 -2
  822. package/extensions/lobster/package.json +3 -3
  823. package/extensions/lobster/src/lobster-tool.test.ts +26 -6
  824. package/extensions/lobster/src/lobster-tool.ts +24 -6
  825. package/extensions/matrix/CHANGELOG.md +9 -9
  826. package/extensions/matrix/index.ts +3 -3
  827. package/extensions/matrix/node_modules/.bin/markdown-it +0 -0
  828. package/extensions/matrix/node_modules/.bin/poolbot +21 -0
  829. package/extensions/matrix/package.json +7 -7
  830. package/extensions/matrix/src/actions.ts +1 -1
  831. package/extensions/matrix/src/channel.directory.test.ts +1 -1
  832. package/extensions/matrix/src/channel.ts +1 -1
  833. package/extensions/matrix/src/config-schema.ts +1 -1
  834. package/extensions/matrix/src/directory-live.ts +1 -1
  835. package/extensions/matrix/src/group-mentions.ts +1 -1
  836. package/extensions/matrix/src/matrix/accounts.ts +1 -1
  837. package/extensions/matrix/src/matrix/actions/messages.ts +1 -1
  838. package/extensions/matrix/src/matrix/actions/reactions.ts +1 -1
  839. package/extensions/matrix/src/matrix/actions/room.ts +3 -3
  840. package/extensions/matrix/src/matrix/actions/summary.ts +1 -1
  841. package/extensions/matrix/src/matrix/actions/types.ts +1 -1
  842. package/extensions/matrix/src/matrix/active-client.ts +1 -1
  843. package/extensions/matrix/src/matrix/client/config.ts +2 -2
  844. package/extensions/matrix/src/matrix/client/create-client.ts +2 -2
  845. package/extensions/matrix/src/matrix/client/logging.ts +1 -1
  846. package/extensions/matrix/src/matrix/client/shared.ts +3 -3
  847. package/extensions/matrix/src/matrix/deps.ts +5 -5
  848. package/extensions/matrix/src/matrix/monitor/allowlist.ts +1 -1
  849. package/extensions/matrix/src/matrix/monitor/auto-join.ts +3 -3
  850. package/extensions/matrix/src/matrix/monitor/direct.ts +1 -1
  851. package/extensions/matrix/src/matrix/monitor/events.ts +2 -2
  852. package/extensions/matrix/src/matrix/monitor/handler.ts +8 -8
  853. package/extensions/matrix/src/matrix/monitor/index.ts +2 -2
  854. package/extensions/matrix/src/matrix/monitor/location.ts +2 -2
  855. package/extensions/matrix/src/matrix/monitor/media.test.ts +3 -3
  856. package/extensions/matrix/src/matrix/monitor/media.ts +3 -3
  857. package/extensions/matrix/src/matrix/monitor/replies.ts +2 -2
  858. package/extensions/matrix/src/matrix/monitor/room-info.ts +1 -1
  859. package/extensions/matrix/src/matrix/monitor/rooms.ts +1 -1
  860. package/extensions/matrix/src/matrix/monitor/threads.ts +1 -1
  861. package/extensions/matrix/src/matrix/monitor/types.ts +1 -1
  862. package/extensions/matrix/src/matrix/poll-types.ts +1 -1
  863. package/extensions/matrix/src/matrix/probe.ts +1 -1
  864. package/extensions/matrix/src/matrix/send/client.ts +2 -2
  865. package/extensions/matrix/src/matrix/send/media.ts +1 -1
  866. package/extensions/matrix/src/matrix/send/targets.test.ts +1 -1
  867. package/extensions/matrix/src/matrix/send/targets.ts +1 -1
  868. package/extensions/matrix/src/matrix/send/types.ts +2 -2
  869. package/extensions/matrix/src/matrix/send.test.ts +3 -3
  870. package/extensions/matrix/src/matrix/send.ts +4 -4
  871. package/extensions/matrix/src/onboarding.ts +3 -3
  872. package/extensions/matrix/src/outbound.ts +1 -1
  873. package/extensions/matrix/src/resolve-targets.ts +1 -1
  874. package/extensions/matrix/src/runtime.ts +1 -1
  875. package/extensions/matrix/src/tool-actions.ts +1 -1
  876. package/extensions/matrix/src/types.ts +1 -1
  877. package/extensions/mattermost/index.ts +3 -3
  878. package/extensions/mattermost/package.json +5 -5
  879. package/extensions/mattermost/src/channel.ts +1 -1
  880. package/extensions/mattermost/src/config-schema.ts +1 -1
  881. package/extensions/mattermost/src/group-mentions.ts +1 -1
  882. package/extensions/mattermost/src/mattermost/accounts.ts +9 -9
  883. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  884. package/extensions/mattermost/src/mattermost/monitor.ts +4 -4
  885. package/extensions/mattermost/src/onboarding-helpers.ts +4 -4
  886. package/extensions/mattermost/src/onboarding.ts +4 -4
  887. package/extensions/mattermost/src/runtime.ts +1 -1
  888. package/extensions/mattermost/src/types.ts +1 -1
  889. package/extensions/memory-core/index.ts +3 -3
  890. package/extensions/memory-core/node_modules/.bin/poolbot +21 -0
  891. package/extensions/memory-core/package.json +5 -5
  892. package/extensions/memory-lancedb/config.ts +2 -2
  893. package/extensions/memory-lancedb/index.test.ts +2 -2
  894. package/extensions/memory-lancedb/index.ts +4 -4
  895. package/extensions/memory-lancedb/node_modules/.bin/openai +0 -0
  896. package/extensions/memory-lancedb/package.json +4 -4
  897. package/extensions/memory-lancedb/{clawdbot.plugin.json → poolbot.plugin.json} +1 -1
  898. package/extensions/msteams/CHANGELOG.md +7 -7
  899. package/extensions/msteams/index.ts +3 -3
  900. package/extensions/msteams/node_modules/.bin/poolbot +21 -0
  901. package/extensions/msteams/package.json +6 -6
  902. package/extensions/msteams/src/attachments.test.ts +1 -1
  903. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  904. package/extensions/msteams/src/channel.ts +3 -3
  905. package/extensions/msteams/src/conversation-store-fs.test.ts +3 -3
  906. package/extensions/msteams/src/directory-live.ts +1 -1
  907. package/extensions/msteams/src/graph-upload.ts +4 -4
  908. package/extensions/msteams/src/media-helpers.ts +1 -1
  909. package/extensions/msteams/src/messenger.test.ts +1 -1
  910. package/extensions/msteams/src/messenger.ts +1 -1
  911. package/extensions/msteams/src/monitor-handler/message-handler.ts +1 -1
  912. package/extensions/msteams/src/monitor-handler.ts +2 -2
  913. package/extensions/msteams/src/monitor.ts +3 -3
  914. package/extensions/msteams/src/onboarding.ts +11 -11
  915. package/extensions/msteams/src/outbound.ts +1 -1
  916. package/extensions/msteams/src/policy.test.ts +1 -1
  917. package/extensions/msteams/src/policy.ts +50 -5
  918. package/extensions/msteams/src/polls-store.test.ts +1 -1
  919. package/extensions/msteams/src/polls.test.ts +4 -4
  920. package/extensions/msteams/src/polls.ts +8 -8
  921. package/extensions/msteams/src/probe.test.ts +1 -1
  922. package/extensions/msteams/src/probe.ts +1 -1
  923. package/extensions/msteams/src/reply-dispatcher.ts +36 -36
  924. package/extensions/msteams/src/runtime.ts +1 -1
  925. package/extensions/msteams/src/send-context.ts +2 -2
  926. package/extensions/msteams/src/send.ts +5 -5
  927. package/extensions/msteams/src/token.ts +1 -1
  928. package/extensions/nextcloud-talk/index.ts +3 -3
  929. package/extensions/nextcloud-talk/package.json +5 -5
  930. package/extensions/nextcloud-talk/src/accounts.ts +1 -1
  931. package/extensions/nextcloud-talk/src/channel.ts +8 -8
  932. package/extensions/nextcloud-talk/src/config-schema.ts +1 -1
  933. package/extensions/nextcloud-talk/src/inbound.ts +8 -8
  934. package/extensions/nextcloud-talk/src/monitor.ts +1 -1
  935. package/extensions/nextcloud-talk/src/onboarding.ts +2 -2
  936. package/extensions/nextcloud-talk/src/policy.ts +2 -2
  937. package/extensions/nextcloud-talk/src/room-info.ts +1 -1
  938. package/extensions/nextcloud-talk/src/runtime.ts +1 -1
  939. package/extensions/nextcloud-talk/src/types.ts +1 -1
  940. package/extensions/nostr/CHANGELOG.md +4 -4
  941. package/extensions/nostr/README.md +3 -3
  942. package/extensions/nostr/index.ts +6 -6
  943. package/extensions/nostr/node_modules/.bin/poolbot +21 -0
  944. package/extensions/nostr/package.json +6 -6
  945. package/extensions/nostr/src/channel.ts +2 -2
  946. package/extensions/nostr/src/config-schema.ts +1 -1
  947. package/extensions/nostr/src/nostr-state-store.test.ts +3 -3
  948. package/extensions/nostr/src/runtime.ts +1 -1
  949. package/extensions/nostr/src/types.ts +4 -4
  950. package/extensions/open-prose/index.ts +2 -2
  951. package/extensions/open-prose/package.json +3 -3
  952. package/extensions/open-prose/skills/prose/SKILL.md +5 -5
  953. package/extensions/open-prose/skills/prose/prose.md +4 -4
  954. package/extensions/qwen-portal-auth/README.md +2 -2
  955. package/extensions/qwen-portal-auth/index.ts +1 -1
  956. package/extensions/signal/index.ts +3 -3
  957. package/extensions/signal/package.json +4 -4
  958. package/extensions/signal/src/channel.ts +1 -1
  959. package/extensions/signal/src/runtime.ts +1 -1
  960. package/extensions/slack/index.ts +3 -3
  961. package/extensions/slack/package.json +4 -4
  962. package/extensions/slack/src/channel.ts +1 -1
  963. package/extensions/slack/src/runtime.ts +1 -1
  964. package/extensions/telegram/index.ts +3 -3
  965. package/extensions/telegram/package.json +4 -4
  966. package/extensions/telegram/src/channel.ts +3 -3
  967. package/extensions/telegram/src/runtime.ts +1 -1
  968. package/extensions/tlon/README.md +1 -1
  969. package/extensions/tlon/index.ts +3 -3
  970. package/extensions/tlon/package.json +5 -5
  971. package/extensions/tlon/src/channel.ts +15 -15
  972. package/extensions/tlon/src/config-schema.ts +1 -1
  973. package/extensions/tlon/src/monitor/discovery.ts +1 -1
  974. package/extensions/tlon/src/monitor/history.ts +1 -1
  975. package/extensions/tlon/src/monitor/index.ts +3 -3
  976. package/extensions/tlon/src/onboarding.ts +4 -4
  977. package/extensions/tlon/src/runtime.ts +1 -1
  978. package/extensions/tlon/src/types.ts +3 -3
  979. package/extensions/tlon/src/urbit/send.ts +19 -6
  980. package/extensions/twitch/CHANGELOG.md +21 -0
  981. package/extensions/twitch/README.md +89 -0
  982. package/extensions/twitch/index.ts +20 -0
  983. package/extensions/twitch/node_modules/.bin/poolbot +21 -0
  984. package/extensions/twitch/package.json +20 -0
  985. package/extensions/twitch/poolbot.plugin.json +9 -0
  986. package/extensions/twitch/src/access-control.test.ts +489 -0
  987. package/extensions/twitch/src/access-control.ts +154 -0
  988. package/extensions/twitch/src/actions.ts +173 -0
  989. package/extensions/twitch/src/client-manager-registry.ts +115 -0
  990. package/extensions/twitch/src/config-schema.ts +82 -0
  991. package/extensions/twitch/src/config.test.ts +88 -0
  992. package/extensions/twitch/src/config.ts +116 -0
  993. package/extensions/twitch/src/monitor.ts +257 -0
  994. package/extensions/twitch/src/onboarding.test.ts +311 -0
  995. package/extensions/twitch/src/onboarding.ts +411 -0
  996. package/extensions/twitch/src/outbound.test.ts +373 -0
  997. package/extensions/twitch/src/outbound.ts +186 -0
  998. package/extensions/twitch/src/plugin.test.ts +39 -0
  999. package/extensions/twitch/src/plugin.ts +274 -0
  1000. package/extensions/twitch/src/probe.test.ts +198 -0
  1001. package/extensions/twitch/src/probe.ts +118 -0
  1002. package/extensions/twitch/src/resolver.ts +137 -0
  1003. package/extensions/twitch/src/runtime.ts +14 -0
  1004. package/extensions/twitch/src/send.test.ts +289 -0
  1005. package/extensions/twitch/src/send.ts +136 -0
  1006. package/extensions/twitch/src/status.test.ts +270 -0
  1007. package/extensions/twitch/src/status.ts +176 -0
  1008. package/extensions/twitch/src/token.test.ts +171 -0
  1009. package/extensions/twitch/src/token.ts +87 -0
  1010. package/extensions/twitch/src/twitch-client.test.ts +574 -0
  1011. package/extensions/twitch/src/twitch-client.ts +277 -0
  1012. package/extensions/twitch/src/types.ts +141 -0
  1013. package/extensions/twitch/src/utils/markdown.ts +92 -0
  1014. package/extensions/twitch/src/utils/twitch.ts +78 -0
  1015. package/extensions/twitch/test/setup.ts +7 -0
  1016. package/extensions/voice-call/CHANGELOG.md +13 -12
  1017. package/extensions/voice-call/README.md +15 -14
  1018. package/extensions/voice-call/index.ts +11 -9
  1019. package/extensions/voice-call/package.json +4 -4
  1020. package/extensions/voice-call/{clawdbot.plugin.json → poolbot.plugin.json} +3 -3
  1021. package/extensions/voice-call/src/cli.ts +1 -1
  1022. package/extensions/voice-call/src/config.test.ts +204 -0
  1023. package/extensions/voice-call/src/config.ts +61 -4
  1024. package/extensions/voice-call/src/core-bridge.ts +10 -8
  1025. package/extensions/voice-call/src/manager.test.ts +2 -2
  1026. package/extensions/voice-call/src/providers/twilio/webhook.ts +2 -1
  1027. package/extensions/voice-call/src/providers/twilio.ts +2 -2
  1028. package/extensions/voice-call/src/response-generator.ts +1 -1
  1029. package/extensions/voice-call/src/runtime.ts +26 -15
  1030. package/extensions/voice-call/src/types.ts +1 -0
  1031. package/extensions/voice-call/src/webhook-security.test.ts +52 -0
  1032. package/extensions/voice-call/src/webhook-security.ts +16 -5
  1033. package/extensions/voice-call/src/webhook.ts +1 -0
  1034. package/extensions/whatsapp/index.ts +3 -3
  1035. package/extensions/whatsapp/package.json +4 -4
  1036. package/extensions/whatsapp/src/channel.ts +1 -1
  1037. package/extensions/whatsapp/src/runtime.ts +1 -1
  1038. package/extensions/zalo/CHANGELOG.md +9 -9
  1039. package/extensions/zalo/README.md +3 -3
  1040. package/extensions/zalo/index.ts +3 -3
  1041. package/extensions/zalo/node_modules/.bin/poolbot +21 -0
  1042. package/extensions/zalo/package.json +6 -6
  1043. package/extensions/zalo/src/accounts.ts +9 -9
  1044. package/extensions/zalo/src/actions.ts +6 -6
  1045. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  1046. package/extensions/zalo/src/channel.ts +20 -20
  1047. package/extensions/zalo/src/config-schema.ts +1 -1
  1048. package/extensions/zalo/src/monitor.ts +9 -9
  1049. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  1050. package/extensions/zalo/src/onboarding.ts +27 -27
  1051. package/extensions/zalo/src/runtime.ts +1 -1
  1052. package/extensions/zalo/src/send.ts +2 -2
  1053. package/extensions/zalo/src/status-issues.ts +1 -1
  1054. package/extensions/zalo/src/token.ts +1 -1
  1055. package/extensions/zalouser/CHANGELOG.md +4 -4
  1056. package/extensions/zalouser/README.md +17 -17
  1057. package/extensions/zalouser/index.ts +3 -3
  1058. package/extensions/zalouser/node_modules/.bin/poolbot +21 -0
  1059. package/extensions/zalouser/package.json +6 -6
  1060. package/extensions/zalouser/src/accounts.ts +10 -10
  1061. package/extensions/zalouser/src/channel.ts +27 -27
  1062. package/extensions/zalouser/src/config-schema.ts +1 -1
  1063. package/extensions/zalouser/src/monitor.ts +5 -5
  1064. package/extensions/zalouser/src/onboarding.ts +32 -32
  1065. package/extensions/zalouser/src/runtime.ts +1 -1
  1066. package/extensions/zalouser/src/status-issues.ts +2 -2
  1067. package/git-hooks/pre-commit +0 -0
  1068. package/package.json +78 -89
  1069. package/skills/1password/SKILL.md +3 -3
  1070. package/skills/apple-notes/SKILL.md +2 -2
  1071. package/skills/apple-reminders/SKILL.md +1 -1
  1072. package/skills/bear-notes/SKILL.md +1 -1
  1073. package/skills/bird/SKILL.md +1 -1
  1074. package/skills/blogwatcher/SKILL.md +1 -1
  1075. package/skills/blucli/SKILL.md +1 -1
  1076. package/skills/bluebubbles/SKILL.md +2 -2
  1077. package/skills/camsnap/SKILL.md +1 -1
  1078. package/skills/canvas/SKILL.md +15 -15
  1079. package/skills/coding-agent/SKILL.md +6 -6
  1080. package/skills/discord/SKILL.md +6 -5
  1081. package/skills/eightctl/SKILL.md +1 -1
  1082. package/skills/food-order/SKILL.md +1 -1
  1083. package/skills/gemini/SKILL.md +1 -1
  1084. package/skills/gifgrep/SKILL.md +1 -1
  1085. package/skills/github/SKILL.md +1 -0
  1086. package/skills/gog/SKILL.md +1 -1
  1087. package/skills/goplaces/SKILL.md +1 -1
  1088. package/skills/himalaya/SKILL.md +1 -1
  1089. package/skills/imsg/SKILL.md +1 -1
  1090. package/skills/local-places/SKILL.md +1 -1
  1091. package/skills/mcporter/SKILL.md +1 -1
  1092. package/skills/model-usage/SKILL.md +1 -1
  1093. package/skills/nano-banana-pro/SKILL.md +10 -5
  1094. package/skills/nano-banana-pro/scripts/generate_image.py +42 -27
  1095. package/skills/nano-pdf/SKILL.md +1 -1
  1096. package/skills/notion/SKILL.md +1 -1
  1097. package/skills/obsidian/SKILL.md +1 -1
  1098. package/skills/openai-image-gen/SKILL.md +1 -1
  1099. package/skills/openai-whisper/SKILL.md +1 -1
  1100. package/skills/openai-whisper-api/SKILL.md +2 -2
  1101. package/skills/openhue/SKILL.md +1 -1
  1102. package/skills/oracle/SKILL.md +1 -1
  1103. package/skills/ordercli/SKILL.md +1 -1
  1104. package/skills/peekaboo/SKILL.md +1 -1
  1105. package/skills/{clawdhub → poolhub}/SKILL.md +2 -2
  1106. package/skills/sag/SKILL.md +1 -1
  1107. package/skills/session-logs/SKILL.md +7 -7
  1108. package/skills/sherpa-onnx-tts/SKILL.md +6 -6
  1109. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -0
  1110. package/skills/slack/SKILL.md +4 -3
  1111. package/skills/songsee/SKILL.md +1 -1
  1112. package/skills/sonoscli/SKILL.md +1 -1
  1113. package/skills/spotify-player/SKILL.md +1 -1
  1114. package/skills/summarize/SKILL.md +1 -1
  1115. package/skills/things-mac/SKILL.md +3 -3
  1116. package/skills/tmux/SKILL.md +7 -7
  1117. package/skills/tmux/scripts/find-sessions.sh +1 -1
  1118. package/skills/tmux/scripts/wait-for-text.sh +0 -0
  1119. package/skills/trello/SKILL.md +2 -2
  1120. package/skills/video-frames/SKILL.md +1 -1
  1121. package/skills/voice-call/SKILL.md +4 -4
  1122. package/skills/wacli/SKILL.md +2 -2
  1123. package/skills/weather/SKILL.md +1 -1
  1124. package/dist/cli/browser-cli-serve.js +0 -91
  1125. package/dist/control-ui/assets/index-Cl-Y9zqE.js.map +0 -1
  1126. package/dist/control-ui/assets/index-DEPfFcOb.css +0 -1
  1127. package/docs/POOL-BOT.md +0 -119
  1128. /package/dist/{config/types.clawdbot.js → browser/routes/types.js} +0 -0
  1129. /package/docs/{whatsapp-clawd.jpg → whatsapp-poolbot.jpg} +0 -0
  1130. /package/extensions/bluebubbles/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1131. /package/extensions/copilot-proxy/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1132. /package/extensions/diagnostics-otel/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1133. /package/extensions/discord/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1134. /package/extensions/google-antigravity-auth/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1135. /package/extensions/google-gemini-cli-auth/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1136. /package/extensions/googlechat/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1137. /package/extensions/imessage/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1138. /package/extensions/line/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1139. /package/extensions/llm-task/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1140. /package/extensions/lobster/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1141. /package/extensions/matrix/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1142. /package/extensions/mattermost/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1143. /package/extensions/memory-core/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1144. /package/extensions/msteams/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1145. /package/extensions/nextcloud-talk/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1146. /package/extensions/nostr/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1147. /package/extensions/open-prose/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1148. /package/extensions/qwen-portal-auth/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1149. /package/extensions/signal/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1150. /package/extensions/slack/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1151. /package/extensions/telegram/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1152. /package/extensions/tlon/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1153. /package/extensions/whatsapp/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1154. /package/extensions/zalo/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
  1155. /package/extensions/zalouser/{clawdbot.plugin.json → poolbot.plugin.json} +0 -0
@@ -3,13 +3,13 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Clawdbot Control</title>
6
+ <title>Moltbot Control</title>
7
7
  <meta name="color-scheme" content="dark light" />
8
8
  <link rel="icon" href="./favicon.ico" sizes="any" />
9
- <script type="module" crossorigin src="./assets/index-Cl-Y9zqE.js"></script>
10
- <link rel="stylesheet" crossorigin href="./assets/index-DEPfFcOb.css">
9
+ <script type="module" crossorigin src="./assets/index-CmNMuoem.js"></script>
10
+ <link rel="stylesheet" crossorigin href="./assets/index-CIRDm-Lu.css">
11
11
  </head>
12
12
  <body>
13
- <clawdbot-app></clawdbot-app>
13
+ <moltbot-app></moltbot-app>
14
14
  </body>
15
15
  </html>
@@ -1,4 +1,4 @@
1
- import { resolveAgentConfig, resolveAgentModelFallbacksOverride, resolveAgentWorkspaceDir, resolveDefaultAgentId, } from "../../agents/agent-scope.js";
1
+ import { resolveAgentConfig, resolveAgentDir, resolveAgentModelFallbacksOverride, resolveAgentWorkspaceDir, resolveDefaultAgentId, } from "../../agents/agent-scope.js";
2
2
  import { runCliAgent } from "../../agents/cli-runner.js";
3
3
  import { getCliSessionId, setCliSessionId } from "../../agents/cli-session.js";
4
4
  import { lookupContextTokens } from "../../agents/context.js";
@@ -20,6 +20,8 @@ import { registerAgentRunContext } from "../../infra/agent-events.js";
20
20
  import { deliverOutboundPayloads } from "../../infra/outbound/deliver.js";
21
21
  import { getRemoteSkillEligibility } from "../../infra/skills-remote.js";
22
22
  import { buildAgentMainSessionKey, normalizeAgentId } from "../../routing/session-key.js";
23
+ import { buildSafeExternalPrompt, detectSuspiciousPatterns, getHookType, isExternalHookSession, } from "../../security/external-content.js";
24
+ import { logWarn } from "../../logger.js";
23
25
  import { resolveDeliveryTarget } from "./delivery-target.js";
24
26
  import { isHeartbeatOnlyResponse, pickLastNonEmptyTextFromPayloads, pickSummaryFromOutput, pickSummaryFromPayloads, resolveHeartbeatAckMaxChars, } from "./helpers.js";
25
27
  import { resolveCronSession } from "./session.js";
@@ -65,6 +67,7 @@ export async function runCronIsolatedAgentTurn(params) {
65
67
  mainKey: baseSessionKey,
66
68
  });
67
69
  const workspaceDirRaw = resolveAgentWorkspaceDir(params.cfg, agentId);
70
+ const agentDir = resolveAgentDir(params.cfg, agentId);
68
71
  const workspace = await ensureAgentWorkspace({
69
72
  dir: workspaceDirRaw,
70
73
  ensureBootstrapFiles: !agentCfg?.skipBootstrap,
@@ -162,12 +165,43 @@ export async function runCronIsolatedAgentTurn(params) {
162
165
  channel: agentPayload?.channel ?? "last",
163
166
  to: agentPayload?.to,
164
167
  });
165
- const base = `[cron:${params.job.id} ${params.job.name}] ${params.message}`.trim();
166
168
  const userTimezone = resolveUserTimezone(params.cfg.agents?.defaults?.userTimezone);
167
169
  const userTimeFormat = resolveUserTimeFormat(params.cfg.agents?.defaults?.timeFormat);
168
170
  const formattedTime = formatUserTime(new Date(now), userTimezone, userTimeFormat) ?? new Date(now).toISOString();
169
171
  const timeLine = `Current time: ${formattedTime} (${userTimezone})`;
170
- const commandBody = `${base}\n${timeLine}`.trim();
172
+ const base = `[cron:${params.job.id} ${params.job.name}] ${params.message}`.trim();
173
+ // SECURITY: Wrap external hook content with security boundaries to prevent prompt injection
174
+ // unless explicitly allowed via a dangerous config override.
175
+ const isExternalHook = isExternalHookSession(baseSessionKey);
176
+ const allowUnsafeExternalContent = agentPayload?.allowUnsafeExternalContent === true ||
177
+ (isGmailHook && params.cfg.hooks?.gmail?.allowUnsafeExternalContent === true);
178
+ const shouldWrapExternal = isExternalHook && !allowUnsafeExternalContent;
179
+ let commandBody;
180
+ if (isExternalHook) {
181
+ // Log suspicious patterns for security monitoring
182
+ const suspiciousPatterns = detectSuspiciousPatterns(params.message);
183
+ if (suspiciousPatterns.length > 0) {
184
+ logWarn(`[security] Suspicious patterns detected in external hook content ` +
185
+ `(session=${baseSessionKey}, patterns=${suspiciousPatterns.length}): ` +
186
+ `${suspiciousPatterns.slice(0, 3).join(", ")}`);
187
+ }
188
+ }
189
+ if (shouldWrapExternal) {
190
+ // Wrap external content with security boundaries
191
+ const hookType = getHookType(baseSessionKey);
192
+ const safeContent = buildSafeExternalPrompt({
193
+ content: params.message,
194
+ source: hookType,
195
+ jobName: params.job.name,
196
+ jobId: params.job.id,
197
+ timestamp: formattedTime,
198
+ });
199
+ commandBody = `${safeContent}\n\n${timeLine}`.trim();
200
+ }
201
+ else {
202
+ // Internal/trusted source - use original format
203
+ commandBody = `${base}\n${timeLine}`.trim();
204
+ }
171
205
  const existingSnapshot = cronSession.sessionEntry.skillsSnapshot;
172
206
  const skillsSnapshotVersion = getSkillsSnapshotVersion(workspaceDir);
173
207
  const needsSkillsSnapshot = !existingSnapshot || existingSnapshot.version !== skillsSnapshotVersion;
@@ -212,6 +246,7 @@ export async function runCronIsolatedAgentTurn(params) {
212
246
  cfg: cfgWithAgentDefaults,
213
247
  provider,
214
248
  model,
249
+ agentDir,
215
250
  fallbacksOverride: resolveAgentModelFallbacksOverride(params.cfg, agentId),
216
251
  run: (providerOverride, modelOverride) => {
217
252
  if (isCliProvider(providerOverride, cfgWithAgentDefaults)) {
@@ -1,16 +1,16 @@
1
1
  // Default service labels (for backward compatibility and when no profile specified)
2
- export const GATEWAY_LAUNCH_AGENT_LABEL = "com.clawdbot.gateway";
3
- export const GATEWAY_SYSTEMD_SERVICE_NAME = "clawdbot-gateway";
4
- export const GATEWAY_WINDOWS_TASK_NAME = "PooL Gateway";
5
- export const GATEWAY_SERVICE_MARKER = "clawdbot";
2
+ export const GATEWAY_LAUNCH_AGENT_LABEL = "com.poolbot.gateway";
3
+ export const GATEWAY_SYSTEMD_SERVICE_NAME = "poolbot-gateway";
4
+ export const GATEWAY_WINDOWS_TASK_NAME = "Moltbot Gateway";
5
+ export const GATEWAY_SERVICE_MARKER = "poolbot";
6
6
  export const GATEWAY_SERVICE_KIND = "gateway";
7
- export const NODE_LAUNCH_AGENT_LABEL = "com.clawdbot.node";
8
- export const NODE_SYSTEMD_SERVICE_NAME = "clawdbot-node";
9
- export const NODE_WINDOWS_TASK_NAME = "PooL Node";
10
- export const NODE_SERVICE_MARKER = "clawdbot";
7
+ export const NODE_LAUNCH_AGENT_LABEL = "com.poolbot.node";
8
+ export const NODE_SYSTEMD_SERVICE_NAME = "poolbot-node";
9
+ export const NODE_WINDOWS_TASK_NAME = "Moltbot Node";
10
+ export const NODE_SERVICE_MARKER = "poolbot";
11
11
  export const NODE_SERVICE_KIND = "node";
12
12
  export const NODE_WINDOWS_TASK_SCRIPT_NAME = "node.cmd";
13
- export const LEGACY_GATEWAY_LAUNCH_AGENT_LABELS = ["com.steipete.clawdbot.gateway"];
13
+ export const LEGACY_GATEWAY_LAUNCH_AGENT_LABELS = ["com.steipete.poolbot.gateway"];
14
14
  export const LEGACY_GATEWAY_SYSTEMD_SERVICE_NAMES = [];
15
15
  export const LEGACY_GATEWAY_WINDOWS_TASK_NAMES = [];
16
16
  export function normalizeGatewayProfile(profile) {
@@ -28,19 +28,19 @@ export function resolveGatewayLaunchAgentLabel(profile) {
28
28
  if (!normalized) {
29
29
  return GATEWAY_LAUNCH_AGENT_LABEL;
30
30
  }
31
- return `com.clawdbot.${normalized}`;
31
+ return `com.poolbot.${normalized}`;
32
32
  }
33
33
  export function resolveGatewaySystemdServiceName(profile) {
34
34
  const suffix = resolveGatewayProfileSuffix(profile);
35
35
  if (!suffix)
36
36
  return GATEWAY_SYSTEMD_SERVICE_NAME;
37
- return `clawdbot-gateway${suffix}`;
37
+ return `poolbot-gateway${suffix}`;
38
38
  }
39
39
  export function resolveGatewayWindowsTaskName(profile) {
40
40
  const normalized = normalizeGatewayProfile(profile);
41
41
  if (!normalized)
42
42
  return GATEWAY_WINDOWS_TASK_NAME;
43
- return `PooL Gateway (${normalized})`;
43
+ return `Moltbot Gateway (${normalized})`;
44
44
  }
45
45
  export function formatGatewayServiceDescription(params) {
46
46
  const profile = normalizeGatewayProfile(params?.profile);
@@ -51,8 +51,8 @@ export function formatGatewayServiceDescription(params) {
51
51
  if (version)
52
52
  parts.push(`v${version}`);
53
53
  if (parts.length === 0)
54
- return "PooL Gateway";
55
- return `PooL Gateway (${parts.join(", ")})`;
54
+ return "Moltbot Gateway";
55
+ return `Moltbot Gateway (${parts.join(", ")})`;
56
56
  }
57
57
  export function resolveNodeLaunchAgentLabel() {
58
58
  return NODE_LAUNCH_AGENT_LABEL;
@@ -66,6 +66,6 @@ export function resolveNodeWindowsTaskName() {
66
66
  export function formatNodeServiceDescription(params) {
67
67
  const version = params?.version?.trim();
68
68
  if (!version)
69
- return "PooL Node Host";
70
- return `PooL Node Host (v${version})`;
69
+ return "Moltbot Node Host";
70
+ return `Moltbot Node Host (v${version})`;
71
71
  }
@@ -3,7 +3,7 @@ import fs from "node:fs/promises";
3
3
  import path from "node:path";
4
4
  import { promisify } from "node:util";
5
5
  import { GATEWAY_SERVICE_KIND, GATEWAY_SERVICE_MARKER, LEGACY_GATEWAY_LAUNCH_AGENT_LABELS, LEGACY_GATEWAY_SYSTEMD_SERVICE_NAMES, LEGACY_GATEWAY_WINDOWS_TASK_NAMES, resolveGatewayLaunchAgentLabel, resolveGatewaySystemdServiceName, resolveGatewayWindowsTaskName, } from "./constants.js";
6
- const EXTRA_MARKERS = ["clawdbot"];
6
+ const EXTRA_MARKERS = ["poolbot"];
7
7
  const execFileAsync = promisify(execFile);
8
8
  export function renderGatewayServiceCleanupHints(env = process.env) {
9
9
  const profile = env.CLAWDBOT_PROFILE;
@@ -39,32 +39,32 @@ function containsMarker(content) {
39
39
  }
40
40
  function hasGatewayServiceMarker(content) {
41
41
  const lower = content.toLowerCase();
42
- return (lower.includes("clawdbot_service_marker") &&
42
+ return (lower.includes("poolbot_service_marker") &&
43
43
  lower.includes(GATEWAY_SERVICE_MARKER.toLowerCase()) &&
44
- lower.includes("clawdbot_service_kind") &&
44
+ lower.includes("poolbot_service_kind") &&
45
45
  lower.includes(GATEWAY_SERVICE_KIND.toLowerCase()));
46
46
  }
47
- function isClawdbotGatewayLaunchdService(label, contents) {
47
+ function isMoltbotGatewayLaunchdService(label, contents) {
48
48
  if (hasGatewayServiceMarker(contents))
49
49
  return true;
50
50
  const lowerContents = contents.toLowerCase();
51
51
  if (!lowerContents.includes("gateway"))
52
52
  return false;
53
- return label.startsWith("com.clawdbot.");
53
+ return label.startsWith("com.poolbot.");
54
54
  }
55
- function isClawdbotGatewaySystemdService(name, contents) {
55
+ function isMoltbotGatewaySystemdService(name, contents) {
56
56
  if (hasGatewayServiceMarker(contents))
57
57
  return true;
58
- if (!name.startsWith("clawdbot-gateway"))
58
+ if (!name.startsWith("poolbot-gateway"))
59
59
  return false;
60
60
  return contents.toLowerCase().includes("gateway");
61
61
  }
62
- function isClawdbotGatewayTaskName(name) {
62
+ function isMoltbotGatewayTaskName(name) {
63
63
  const normalized = name.trim().toLowerCase();
64
64
  if (!normalized)
65
65
  return false;
66
66
  const defaultName = resolveGatewayWindowsTaskName().toLowerCase();
67
- return normalized === defaultName || normalized.startsWith("clawdbot gateway");
67
+ return normalized === defaultName || normalized.startsWith("poolbot gateway");
68
68
  }
69
69
  function tryExtractPlistLabel(contents) {
70
70
  const match = contents.match(/<key>Label<\/key>\s*<string>([\s\S]*?)<\/string>/i);
@@ -107,7 +107,7 @@ async function scanLaunchdDir(params) {
107
107
  const label = tryExtractPlistLabel(contents) ?? labelFromName;
108
108
  if (isIgnoredLaunchdLabel(label))
109
109
  continue;
110
- if (isClawdbotGatewayLaunchdService(label, contents))
110
+ if (isMoltbotGatewayLaunchdService(label, contents))
111
111
  continue;
112
112
  results.push({
113
113
  platform: "darwin",
@@ -143,7 +143,7 @@ async function scanSystemdDir(params) {
143
143
  }
144
144
  if (!containsMarker(contents))
145
145
  continue;
146
- if (isClawdbotGatewaySystemdService(name, contents))
146
+ if (isMoltbotGatewaySystemdService(name, contents))
147
147
  continue;
148
148
  results.push({
149
149
  platform: "linux",
@@ -291,7 +291,7 @@ export async function findExtraGatewayServices(env, opts = {}) {
291
291
  const name = task.name.trim();
292
292
  if (!name)
293
293
  continue;
294
- if (isClawdbotGatewayTaskName(name))
294
+ if (isMoltbotGatewayTaskName(name))
295
295
  continue;
296
296
  if (LEGACY_GATEWAY_WINDOWS_TASK_NAMES.includes(name))
297
297
  continue;
@@ -31,5 +31,5 @@ export function resolveGatewayStateDir(env) {
31
31
  }
32
32
  const home = resolveHomeDir(env);
33
33
  const suffix = resolveGatewayProfileSuffix(env.CLAWDBOT_PROFILE);
34
- return path.join(home, `.clawdbot${suffix}`);
34
+ return path.join(home, `.poolbot${suffix}`);
35
35
  }
@@ -19,7 +19,7 @@ async function resolveCliEntrypointPathForService() {
19
19
  await fs.access(resolvedPath);
20
20
  // Prefer the original (possibly symlinked) path over the resolved realpath.
21
21
  // This keeps LaunchAgent/systemd paths stable across package version updates,
22
- // since symlinks like node_modules/clawdbot -> .pnpm/clawdbot@X.Y.Z/...
22
+ // since symlinks like node_modules/poolbot -> .pnpm/poolbot@X.Y.Z/...
23
23
  // are automatically updated by pnpm, while the resolved path contains
24
24
  // version-specific directories that break after updates.
25
25
  const normalizedLooksLikeDist = /[/\\]dist[/\\].+\.(cjs|js|mjs)$/.test(normalized);
@@ -19,6 +19,6 @@ export function renderSystemdUnavailableHints(options = {}) {
19
19
  }
20
20
  return [
21
21
  "systemd user services are unavailable; install/enable systemd or run the gateway under your supervisor.",
22
- `If you're in a container, run the gateway in the foreground instead of \`${formatCliCommand("clawdbot gateway")}\`.`,
22
+ `If you're in a container, run the gateway in the foreground instead of \`${formatCliCommand("poolbot gateway")}\`.`,
23
23
  ];
24
24
  }
@@ -13,7 +13,7 @@ function renderEnvLines(env) {
13
13
  }
14
14
  export function buildSystemdUnit({ description, programArguments, workingDirectory, environment, }) {
15
15
  const execStart = programArguments.map(systemdEscapeArg).join(" ");
16
- const descriptionLine = `Description=${description?.trim() || "Clawdbot Gateway"}`;
16
+ const descriptionLine = `Description=${description?.trim() || "Moltbot Gateway"}`;
17
17
  const workingDirLine = workingDirectory
18
18
  ? `WorkingDirectory=${systemdEscapeArg(workingDirectory)}`
19
19
  : null;
@@ -1,7 +1,8 @@
1
- import { ChannelType, MessageCreateListener, MessageReactionAddListener, MessageReactionRemoveListener, } from "@buape/carbon";
1
+ import { ChannelType, MessageCreateListener, MessageReactionAddListener, MessageReactionRemoveListener, PresenceUpdateListener, } from "@buape/carbon";
2
2
  import { danger } from "../../globals.js";
3
3
  import { formatDurationSeconds } from "../../infra/format-duration.js";
4
4
  import { enqueueSystemEvent } from "../../infra/system-events.js";
5
+ import { setPresence } from "./presence-cache.js";
5
6
  import { createSubsystemLogger } from "../../logging/subsystem.js";
6
7
  import { resolveAgentRoute } from "../../routing/resolve-route.js";
7
8
  import { normalizeDiscordSlug, resolveDiscordChannelConfigWithFallback, resolveDiscordGuildEntry, shouldEmitDiscordReactionNotification, } from "./allow-list.js";
@@ -214,3 +215,26 @@ async function handleDiscordReactionEvent(params) {
214
215
  params.logger.error(danger(`discord reaction handler failed: ${String(err)}`));
215
216
  }
216
217
  }
218
+ export class DiscordPresenceListener extends PresenceUpdateListener {
219
+ logger;
220
+ accountId;
221
+ constructor(params) {
222
+ super();
223
+ this.logger = params.logger;
224
+ this.accountId = params.accountId;
225
+ }
226
+ async handle(data) {
227
+ try {
228
+ const userId = "user" in data && data.user && typeof data.user === "object" && "id" in data.user
229
+ ? String(data.user.id)
230
+ : undefined;
231
+ if (!userId)
232
+ return;
233
+ setPresence(this.accountId, userId, data);
234
+ }
235
+ catch (err) {
236
+ const logger = this.logger ?? discordEventQueueLog;
237
+ logger.error(danger(`discord presence handler failed: ${String(err)}`));
238
+ }
239
+ }
240
+ }
@@ -47,13 +47,15 @@ function buildDiscordCommandOptions(params) {
47
47
  const focusValue = typeof focused?.value === "string" ? focused.value.trim().toLowerCase() : "";
48
48
  const choices = resolveCommandArgChoices({ command, arg, cfg });
49
49
  const filtered = focusValue
50
- ? choices.filter((choice) => choice.toLowerCase().includes(focusValue))
50
+ ? choices.filter((choice) => choice.label.toLowerCase().includes(focusValue))
51
51
  : choices;
52
- await interaction.respond(filtered.slice(0, 25).map((choice) => ({ name: choice, value: choice })));
52
+ await interaction.respond(filtered.slice(0, 25).map((choice) => ({ name: choice.label, value: choice.value })));
53
53
  }
54
54
  : undefined;
55
55
  const choices = resolvedChoices.length > 0 && !autocomplete
56
- ? resolvedChoices.slice(0, 25).map((choice) => ({ name: choice, value: choice }))
56
+ ? resolvedChoices
57
+ .slice(0, 25)
58
+ .map((choice) => ({ name: choice.label, value: choice.value }))
57
59
  : undefined;
58
60
  return {
59
61
  name: arg.name,
@@ -256,11 +258,11 @@ function buildDiscordCommandArgMenu(params) {
256
258
  const userId = interaction.user?.id ?? "";
257
259
  const rows = chunkItems(menu.choices, 4).map((choices) => {
258
260
  const buttons = choices.map((choice) => new DiscordCommandArgButton({
259
- label: choice,
261
+ label: choice.label,
260
262
  customId: buildDiscordCommandArgCustomId({
261
263
  command: commandLabel,
262
264
  arg: menu.arg.name,
263
- value: choice,
265
+ value: choice.value,
264
266
  userId,
265
267
  }),
266
268
  cfg: params.cfg,
@@ -0,0 +1,38 @@
1
+ /**
2
+ * In-memory cache of Discord user presence data.
3
+ * Populated by PRESENCE_UPDATE gateway events when the GuildPresences intent is enabled.
4
+ */
5
+ const presenceCache = new Map();
6
+ function resolveAccountKey(accountId) {
7
+ return accountId ?? "default";
8
+ }
9
+ /** Update cached presence for a user. */
10
+ export function setPresence(accountId, userId, data) {
11
+ const accountKey = resolveAccountKey(accountId);
12
+ let accountCache = presenceCache.get(accountKey);
13
+ if (!accountCache) {
14
+ accountCache = new Map();
15
+ presenceCache.set(accountKey, accountCache);
16
+ }
17
+ accountCache.set(userId, data);
18
+ }
19
+ /** Get cached presence for a user. Returns undefined if not cached. */
20
+ export function getPresence(accountId, userId) {
21
+ return presenceCache.get(resolveAccountKey(accountId))?.get(userId);
22
+ }
23
+ /** Clear cached presence data. */
24
+ export function clearPresences(accountId) {
25
+ if (accountId) {
26
+ presenceCache.delete(resolveAccountKey(accountId));
27
+ return;
28
+ }
29
+ presenceCache.clear();
30
+ }
31
+ /** Get the number of cached presence entries. */
32
+ export function presenceCacheSize() {
33
+ let total = 0;
34
+ for (const accountCache of presenceCache.values()) {
35
+ total += accountCache.size;
36
+ }
37
+ return total;
38
+ }
@@ -19,7 +19,7 @@ import { fetchDiscordApplicationId } from "../probe.js";
19
19
  import { resolveDiscordChannelAllowlist } from "../resolve-channels.js";
20
20
  import { resolveDiscordUserAllowlist } from "../resolve-users.js";
21
21
  import { normalizeDiscordToken } from "../token.js";
22
- import { DiscordMessageListener, DiscordReactionListener, DiscordReactionRemoveListener, registerDiscordListener, } from "./listeners.js";
22
+ import { DiscordMessageListener, DiscordPresenceListener, DiscordReactionListener, DiscordReactionRemoveListener, registerDiscordListener, } from "./listeners.js";
23
23
  import { createDiscordMessageHandler } from "./message-handler.js";
24
24
  import { createDiscordCommandArgFallbackButton, createDiscordNativeCommand, } from "./native-command.js";
25
25
  import { createExecApprovalButton, DiscordExecApprovalHandler } from "./exec-approvals.js";
@@ -79,6 +79,21 @@ function formatDiscordDeployErrorDetails(err) {
79
79
  }
80
80
  return details.length > 0 ? ` (${details.join(", ")})` : "";
81
81
  }
82
+ function resolveDiscordGatewayIntents(intentsConfig) {
83
+ let intents = GatewayIntents.Guilds |
84
+ GatewayIntents.GuildMessages |
85
+ GatewayIntents.MessageContent |
86
+ GatewayIntents.DirectMessages |
87
+ GatewayIntents.GuildMessageReactions |
88
+ GatewayIntents.DirectMessageReactions;
89
+ if (intentsConfig?.presence) {
90
+ intents |= GatewayIntents.GuildPresences;
91
+ }
92
+ if (intentsConfig?.guildMembers) {
93
+ intents |= GatewayIntents.GuildMembers;
94
+ }
95
+ return intents;
96
+ }
82
97
  export async function monitorDiscordProvider(opts = {}) {
83
98
  const cfg = opts.config ?? loadConfig();
84
99
  const account = resolveDiscordAccount({
@@ -387,12 +402,7 @@ export async function monitorDiscordProvider(opts = {}) {
387
402
  reconnect: {
388
403
  maxAttempts: Number.POSITIVE_INFINITY,
389
404
  },
390
- intents: GatewayIntents.Guilds |
391
- GatewayIntents.GuildMessages |
392
- GatewayIntents.MessageContent |
393
- GatewayIntents.DirectMessages |
394
- GatewayIntents.GuildMessageReactions |
395
- GatewayIntents.DirectMessageReactions,
405
+ intents: resolveDiscordGatewayIntents(discordCfg.intents),
396
406
  autoInteractions: true,
397
407
  }),
398
408
  ]);
@@ -449,6 +459,10 @@ export async function monitorDiscordProvider(opts = {}) {
449
459
  guildEntries,
450
460
  logger,
451
461
  }));
462
+ if (discordCfg.intents?.presence) {
463
+ registerDiscordListener(client.listeners, new DiscordPresenceListener({ logger, accountId: account.accountId }));
464
+ runtime.log?.("discord: GuildPresences intent enabled — presence listener registered");
465
+ }
452
466
  runtime.log?.(`logged in to discord${botUserId ? ` as ${botUserId}` : ""}`);
453
467
  // Start exec approvals handler after client is ready
454
468
  if (execApprovalsHandler) {
package/dist/entry.js CHANGED
@@ -6,7 +6,7 @@ import { applyCliProfileEnv, parseCliProfileArgs } from "./cli/profile.js";
6
6
  import { isTruthyEnvValue } from "./infra/env.js";
7
7
  import { installProcessWarningFilter } from "./infra/warnings.js";
8
8
  import { attachChildProcessBridge } from "./process/child-process-bridge.js";
9
- process.title = "clawdbot";
9
+ process.title = "poolbot";
10
10
  installProcessWarningFilter();
11
11
  if (process.argv.includes("--no-color")) {
12
12
  process.env.NO_COLOR = "1";
@@ -41,7 +41,7 @@ function ensureExperimentalWarningSuppressed() {
41
41
  process.exit(code ?? 1);
42
42
  });
43
43
  child.once("error", (error) => {
44
- console.error("[clawdbot] Failed to respawn CLI:", error instanceof Error ? (error.stack ?? error.message) : error);
44
+ console.error("[poolbot] Failed to respawn CLI:", error instanceof Error ? (error.stack ?? error.message) : error);
45
45
  process.exit(1);
46
46
  });
47
47
  // Parent must not continue running the CLI.
@@ -110,7 +110,7 @@ if (!ensureExperimentalWarningSuppressed()) {
110
110
  const parsed = parseCliProfileArgs(process.argv);
111
111
  if (!parsed.ok) {
112
112
  // Keep it simple; Commander will handle rich help/errors after we strip flags.
113
- console.error(`[clawdbot] ${parsed.error}`);
113
+ console.error(`[poolbot] ${parsed.error}`);
114
114
  process.exit(2);
115
115
  }
116
116
  if (parsed.profile) {
@@ -121,7 +121,7 @@ if (!ensureExperimentalWarningSuppressed()) {
121
121
  import("./cli/run-main.js")
122
122
  .then(({ runCli }) => runCli(process.argv))
123
123
  .catch((error) => {
124
- console.error("[clawdbot] Failed to start CLI:", error instanceof Error ? (error.stack ?? error.message) : error);
124
+ console.error("[poolbot] Failed to start CLI:", error instanceof Error ? (error.stack ?? error.message) : error);
125
125
  process.exitCode = 1;
126
126
  });
127
127
  }
@@ -1,10 +1,14 @@
1
1
  import { timingSafeEqual } from "node:crypto";
2
- import { isTrustedProxyAddress, resolveGatewayClientIp } from "./net.js";
2
+ import { readTailscaleWhoisIdentity } from "../infra/tailscale.js";
3
+ import { isTrustedProxyAddress, parseForwardedForClientIp, resolveGatewayClientIp } from "./net.js";
3
4
  function safeEqual(a, b) {
4
5
  if (a.length !== b.length)
5
6
  return false;
6
7
  return timingSafeEqual(Buffer.from(a), Buffer.from(b));
7
8
  }
9
+ function normalizeLogin(login) {
10
+ return login.trim().toLowerCase();
11
+ }
8
12
  function isLoopbackAddress(ip) {
9
13
  if (!ip)
10
14
  return false;
@@ -33,6 +37,12 @@ function getHostName(hostHeader) {
33
37
  function headerValue(value) {
34
38
  return Array.isArray(value) ? value[0] : value;
35
39
  }
40
+ function resolveTailscaleClientIp(req) {
41
+ if (!req)
42
+ return undefined;
43
+ const forwardedFor = headerValue(req.headers?.["x-forwarded-for"]);
44
+ return forwardedFor ? parseForwardedForClientIp(forwardedFor) : undefined;
45
+ }
36
46
  function resolveRequestClientIp(req, trustedProxies) {
37
47
  if (!req)
38
48
  return undefined;
@@ -43,7 +53,7 @@ function resolveRequestClientIp(req, trustedProxies) {
43
53
  trustedProxies,
44
54
  });
45
55
  }
46
- function isLocalDirectRequest(req, trustedProxies) {
56
+ export function isLocalDirectRequest(req, trustedProxies) {
47
57
  if (!req)
48
58
  return false;
49
59
  const clientIp = resolveRequestClientIp(req, trustedProxies) ?? "";
@@ -85,12 +95,41 @@ function isTailscaleProxyRequest(req) {
85
95
  return false;
86
96
  return isLoopbackAddress(req.socket?.remoteAddress) && hasTailscaleProxyHeaders(req);
87
97
  }
98
+ async function resolveVerifiedTailscaleUser(params) {
99
+ const { req, tailscaleWhois } = params;
100
+ const tailscaleUser = getTailscaleUser(req);
101
+ if (!tailscaleUser) {
102
+ return { ok: false, reason: "tailscale_user_missing" };
103
+ }
104
+ if (!isTailscaleProxyRequest(req)) {
105
+ return { ok: false, reason: "tailscale_proxy_missing" };
106
+ }
107
+ const clientIp = resolveTailscaleClientIp(req);
108
+ if (!clientIp) {
109
+ return { ok: false, reason: "tailscale_whois_failed" };
110
+ }
111
+ const whois = await tailscaleWhois(clientIp);
112
+ if (!whois?.login) {
113
+ return { ok: false, reason: "tailscale_whois_failed" };
114
+ }
115
+ if (normalizeLogin(whois.login) !== normalizeLogin(tailscaleUser.login)) {
116
+ return { ok: false, reason: "tailscale_user_mismatch" };
117
+ }
118
+ return {
119
+ ok: true,
120
+ user: {
121
+ login: whois.login,
122
+ name: whois.name ?? tailscaleUser.name,
123
+ profilePic: tailscaleUser.profilePic,
124
+ },
125
+ };
126
+ }
88
127
  export function resolveGatewayAuth(params) {
89
128
  const authConfig = params.authConfig ?? {};
90
129
  const env = params.env ?? process.env;
91
130
  const token = authConfig.token ?? env.CLAWDBOT_GATEWAY_TOKEN ?? undefined;
92
131
  const password = authConfig.password ?? env.CLAWDBOT_GATEWAY_PASSWORD ?? undefined;
93
- const mode = authConfig.mode ?? (password ? "password" : token ? "token" : "none");
132
+ const mode = authConfig.mode ?? (password ? "password" : "token");
94
133
  const allowTailscale = authConfig.allowTailscale ?? (params.tailscaleMode === "serve" && mode !== "password");
95
134
  return {
96
135
  mode,
@@ -101,6 +140,8 @@ export function resolveGatewayAuth(params) {
101
140
  }
102
141
  export function assertGatewayAuthConfigured(auth) {
103
142
  if (auth.mode === "token" && !auth.token) {
143
+ if (auth.allowTailscale)
144
+ return;
104
145
  throw new Error("gateway auth mode is token, but no token was configured (set gateway.auth.token or CLAWDBOT_GATEWAY_TOKEN)");
105
146
  }
106
147
  if (auth.mode === "password" && !auth.password) {
@@ -109,28 +150,20 @@ export function assertGatewayAuthConfigured(auth) {
109
150
  }
110
151
  export async function authorizeGatewayConnect(params) {
111
152
  const { auth, connectAuth, req, trustedProxies } = params;
153
+ const tailscaleWhois = params.tailscaleWhois ?? readTailscaleWhoisIdentity;
112
154
  const localDirect = isLocalDirectRequest(req, trustedProxies);
113
155
  if (auth.allowTailscale && !localDirect) {
114
- const tailscaleUser = getTailscaleUser(req);
115
- const tailscaleProxy = isTailscaleProxyRequest(req);
116
- if (tailscaleUser && tailscaleProxy) {
156
+ const tailscaleCheck = await resolveVerifiedTailscaleUser({
157
+ req,
158
+ tailscaleWhois,
159
+ });
160
+ if (tailscaleCheck.ok) {
117
161
  return {
118
162
  ok: true,
119
163
  method: "tailscale",
120
- user: tailscaleUser.login,
164
+ user: tailscaleCheck.user.login,
121
165
  };
122
166
  }
123
- if (auth.mode === "none") {
124
- if (!tailscaleUser) {
125
- return { ok: false, reason: "tailscale_user_missing" };
126
- }
127
- if (!tailscaleProxy) {
128
- return { ok: false, reason: "tailscale_proxy_missing" };
129
- }
130
- }
131
- }
132
- if (auth.mode === "none") {
133
- return { ok: true, method: "none" };
134
167
  }
135
168
  if (auth.mode === "token") {
136
169
  if (!auth.token) {
@@ -139,7 +172,7 @@ export async function authorizeGatewayConnect(params) {
139
172
  if (!connectAuth?.token) {
140
173
  return { ok: false, reason: "token_missing" };
141
174
  }
142
- if (connectAuth.token !== auth.token) {
175
+ if (!safeEqual(connectAuth.token, auth.token)) {
143
176
  return { ok: false, reason: "token_mismatch" };
144
177
  }
145
178
  return { ok: true, method: "token" };