@gguf/pigbot 0.0.5 → 0.0.7

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 (1094) hide show
  1. package/CHANGELOG.md +1208 -10
  2. package/LICENSE +2 -2
  3. package/README.md +347 -37
  4. package/assets/chrome-extension/README.md +5 -5
  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 -5
  8. package/assets/chrome-extension/options.js +1 -1
  9. package/dist/acp/client.js +5 -5
  10. package/dist/acp/server.js +3 -3
  11. package/dist/acp/types.js +2 -2
  12. package/dist/agents/agent-paths.js +6 -6
  13. package/dist/agents/agent-scope.js +1 -1
  14. package/dist/agents/anthropic-payload-log.js +2 -2
  15. package/dist/agents/auth-profiles/doctor.js +1 -1
  16. package/dist/agents/auth-profiles/paths.js +3 -3
  17. package/dist/agents/bash-tools.exec.js +1 -1
  18. package/dist/agents/bash-tools.shared.js +2 -2
  19. package/dist/agents/cache-trace.js +5 -5
  20. package/dist/agents/channel-tools.js +31 -2
  21. package/dist/agents/cli-runner/helpers.js +3 -3
  22. package/dist/agents/cli-runner.js +3 -3
  23. package/dist/agents/context.js +4 -4
  24. package/dist/agents/docs-path.js +3 -3
  25. package/dist/agents/identity.js +1 -1
  26. package/dist/agents/live-auth-keys.js +2 -2
  27. package/dist/agents/memory-search.js +5 -0
  28. package/dist/agents/minimax-vlm.js +1 -1
  29. package/dist/agents/model-auth.js +2 -1
  30. package/dist/agents/model-catalog.js +4 -4
  31. package/dist/agents/model-selection.js +1 -1
  32. package/dist/agents/models-config.js +3 -3
  33. package/dist/agents/models-config.providers.js +40 -8
  34. package/dist/agents/{moltbot-tools.js → openclaw-tools.js} +1 -1
  35. package/dist/agents/pi-embedded-helpers/errors.js +20 -0
  36. package/dist/agents/pi-embedded-helpers/openai.js +1 -1
  37. package/dist/agents/pi-embedded-helpers.js +1 -1
  38. package/dist/agents/pi-embedded-runner/cache-ttl.js +1 -1
  39. package/dist/agents/pi-embedded-runner/compact.js +8 -8
  40. package/dist/agents/pi-embedded-runner/model.js +2 -2
  41. package/dist/agents/pi-embedded-runner/run/attempt.js +6 -6
  42. package/dist/agents/pi-embedded-runner/run.js +31 -5
  43. package/dist/agents/pi-embedded-runner/session-manager-cache.js +1 -1
  44. package/dist/agents/pi-embedded-runner/utils.js +1 -1
  45. package/dist/agents/pi-embedded-subscribe.raw-stream.js +2 -2
  46. package/dist/agents/pi-tools.js +5 -5
  47. package/dist/agents/pi-tools.read.js +2 -2
  48. package/dist/agents/sandbox/browser.js +16 -11
  49. package/dist/agents/sandbox/constants.js +7 -7
  50. package/dist/agents/sandbox/docker.js +17 -14
  51. package/dist/agents/sandbox/runtime-status.js +1 -1
  52. package/dist/agents/session-transcript-repair.js +1 -1
  53. package/dist/agents/session-write-lock.js +2 -2
  54. package/dist/agents/skills/bundled-dir.js +1 -1
  55. package/dist/agents/skills/config.js +2 -1
  56. package/dist/agents/skills/frontmatter.js +11 -3
  57. package/dist/agents/skills/workspace.js +6 -6
  58. package/dist/agents/synthetic-models.js +8 -0
  59. package/dist/agents/system-prompt.js +21 -21
  60. package/dist/agents/tool-images.js +1 -1
  61. package/dist/agents/tool-policy.js +2 -2
  62. package/dist/agents/tools/browser-tool.js +5 -5
  63. package/dist/agents/tools/image-tool.js +2 -2
  64. package/dist/agents/tools/memory-tool.js +1 -1
  65. package/dist/agents/tools/sessions-send-tool.js +2 -2
  66. package/dist/agents/tools/web-search.js +7 -7
  67. package/dist/agents/transcript-policy.js +2 -1
  68. package/dist/agents/workspace.js +3 -3
  69. package/dist/auto-reply/commands-registry.data.js +1 -1
  70. package/dist/auto-reply/reply/agent-runner-execution.js +1 -1
  71. package/dist/auto-reply/reply/bash-command.js +2 -2
  72. package/dist/auto-reply/reply/commands-context-report.js +2 -2
  73. package/dist/auto-reply/reply/commands-session.js +4 -4
  74. package/dist/auto-reply/reply/directive-handling.shared.js +1 -1
  75. package/dist/auto-reply/reply/dispatch-from-config.js +21 -0
  76. package/dist/auto-reply/reply/get-reply-inline-actions.js +2 -2
  77. package/dist/auto-reply/reply/get-reply.js +1 -1
  78. package/dist/auto-reply/reply/groups.js +1 -1
  79. package/dist/auto-reply/reply/mentions.js +3 -2
  80. package/dist/auto-reply/reply/normalize-reply.js +12 -4
  81. package/dist/auto-reply/reply/reply-dispatcher.js +8 -1
  82. package/dist/auto-reply/reply/reply-elevated.js +1 -1
  83. package/dist/auto-reply/reply/stage-sandbox-media.js +1 -1
  84. package/dist/auto-reply/status.js +2 -2
  85. package/dist/browser/chrome.js +13 -13
  86. package/dist/browser/chrome.profile-decoration.js +5 -5
  87. package/dist/browser/client-fetch.js +3 -3
  88. package/dist/browser/config.js +11 -11
  89. package/dist/browser/constants.js +3 -3
  90. package/dist/browser/control-service.js +1 -1
  91. package/dist/browser/extension-relay.js +3 -3
  92. package/dist/browser/profiles-service.js +2 -2
  93. package/dist/browser/profiles.js +1 -1
  94. package/dist/browser/pw-tools-core.downloads.js +1 -1
  95. package/dist/browser/pw-tools-core.interactions.js +5 -5
  96. package/dist/browser/pw-tools-core.responses.js +1 -1
  97. package/dist/browser/routes/agent.act.js +2 -2
  98. package/dist/browser/routes/agent.debug.js +1 -1
  99. package/dist/browser/server-context.js +9 -9
  100. package/dist/browser/server.js +2 -2
  101. package/dist/build-info.json +2 -2
  102. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  103. package/dist/canvas-host/a2ui/a2ui.bundle.js +24 -19
  104. package/dist/canvas-host/a2ui/index.html +28 -28
  105. package/dist/canvas-host/a2ui.js +14 -18
  106. package/dist/canvas-host/server.js +33 -35
  107. package/dist/channels/plugins/catalog.js +7 -7
  108. package/dist/channels/plugins/helpers.js +2 -2
  109. package/dist/channels/plugins/onboarding/imessage.js +1 -1
  110. package/dist/channels/plugins/onboarding/signal.js +2 -2
  111. package/dist/channels/plugins/onboarding/slack.js +5 -5
  112. package/dist/channels/plugins/onboarding/telegram.js +3 -3
  113. package/dist/channels/plugins/onboarding/whatsapp.js +4 -4
  114. package/dist/channels/plugins/pairing-message.js +1 -1
  115. package/dist/channels/plugins/status-issues/bluebubbles.js +1 -1
  116. package/dist/channels/plugins/status-issues/whatsapp.js +2 -2
  117. package/dist/channels/registry.js +1 -1
  118. package/dist/cli/acp-cli.js +2 -2
  119. package/dist/cli/argv.js +2 -2
  120. package/dist/cli/banner.js +10 -11
  121. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +1 -1
  122. package/dist/cli/browser-cli-examples.js +29 -29
  123. package/dist/cli/browser-cli-extension.js +5 -5
  124. package/dist/cli/browser-cli-manage.js +4 -4
  125. package/dist/cli/browser-cli.js +3 -3
  126. package/dist/cli/channel-options.js +1 -1
  127. package/dist/cli/channels-cli.js +1 -1
  128. package/dist/cli/cli-name.js +4 -8
  129. package/dist/cli/command-format.js +3 -3
  130. package/dist/cli/config-cli.js +2 -2
  131. package/dist/cli/cron-cli/register.js +1 -1
  132. package/dist/cli/daemon-cli/install.js +2 -2
  133. package/dist/cli/daemon-cli/register.js +1 -1
  134. package/dist/cli/daemon-cli/shared.js +11 -13
  135. package/dist/cli/daemon-cli/status.gather.js +2 -5
  136. package/dist/cli/daemon-cli/status.print.js +9 -17
  137. package/dist/cli/directory-cli.js +1 -1
  138. package/dist/cli/dns-cli.js +20 -13
  139. package/dist/cli/docs-cli.js +2 -2
  140. package/dist/cli/exec-approvals-cli.js +2 -2
  141. package/dist/cli/gateway-cli/dev.js +7 -5
  142. package/dist/cli/gateway-cli/register.js +12 -6
  143. package/dist/cli/gateway-cli/run.js +15 -14
  144. package/dist/cli/gateway-cli/shared.js +5 -5
  145. package/dist/cli/hooks-cli.js +3 -3
  146. package/dist/cli/logs-cli.js +3 -3
  147. package/dist/cli/memory-cli.js +36 -5
  148. package/dist/cli/models-cli.js +1 -1
  149. package/dist/cli/node-cli/daemon.js +3 -3
  150. package/dist/cli/node-cli/register.js +1 -1
  151. package/dist/cli/nodes-cli/register.canvas.js +1 -1
  152. package/dist/cli/nodes-cli/register.js +1 -1
  153. package/dist/cli/nodes-screen.js +1 -1
  154. package/dist/cli/pairing-cli.js +3 -3
  155. package/dist/cli/plugin-registry.js +2 -2
  156. package/dist/cli/plugins-cli.js +3 -3
  157. package/dist/cli/profile.js +9 -9
  158. package/dist/cli/program/config-guard.js +1 -1
  159. package/dist/cli/program/help.js +14 -11
  160. package/dist/cli/program/preaction.js +1 -1
  161. package/dist/cli/program/register.agent.js +15 -12
  162. package/dist/cli/program/register.configure.js +1 -1
  163. package/dist/cli/program/register.maintenance.js +4 -4
  164. package/dist/cli/program/register.message.js +5 -5
  165. package/dist/cli/program/register.onboard.js +5 -3
  166. package/dist/cli/program/register.setup.js +3 -3
  167. package/dist/cli/program/register.status-health-sessions.js +13 -13
  168. package/dist/cli/program/register.subclis.js +7 -2
  169. package/dist/cli/route.js +1 -1
  170. package/dist/cli/run-main.js +3 -3
  171. package/dist/cli/sandbox-cli.js +19 -19
  172. package/dist/cli/security-cli.js +4 -4
  173. package/dist/cli/skills-cli.js +3 -3
  174. package/dist/cli/system-cli.js +1 -1
  175. package/dist/cli/tagline.js +11 -9
  176. package/dist/cli/tui-cli.js +1 -1
  177. package/dist/cli/update-cli.js +48 -45
  178. package/dist/cli/webhooks-cli.js +6 -6
  179. package/dist/commands/agent-via-gateway.js +1 -1
  180. package/dist/commands/agent.js +1 -1
  181. package/dist/commands/agents.command-shared.js +1 -1
  182. package/dist/commands/agents.commands.add.js +2 -2
  183. package/dist/commands/agents.commands.list.js +1 -1
  184. package/dist/commands/auth-choice-options.js +10 -0
  185. package/dist/commands/auth-choice.apply.api-providers.js +49 -1
  186. package/dist/commands/auth-choice.apply.openai.js +1 -1
  187. package/dist/commands/auth-choice.apply.plugin-provider.js +2 -2
  188. package/dist/commands/auth-choice.preferred-provider.js +1 -0
  189. package/dist/commands/channels/shared.js +1 -1
  190. package/dist/commands/channels/status.js +1 -1
  191. package/dist/commands/chutes-oauth.js +1 -1
  192. package/dist/commands/configure.channels.js +2 -2
  193. package/dist/commands/configure.gateway.js +1 -1
  194. package/dist/commands/configure.wizard.js +21 -21
  195. package/dist/commands/daemon-install-helpers.js +2 -2
  196. package/dist/commands/dashboard.js +2 -2
  197. package/dist/commands/docs.js +5 -5
  198. package/dist/commands/doctor-auth.js +5 -5
  199. package/dist/commands/doctor-config-flow.js +64 -7
  200. package/dist/commands/doctor-format.js +5 -5
  201. package/dist/commands/doctor-gateway-daemon-flow.js +7 -4
  202. package/dist/commands/doctor-gateway-services.js +72 -65
  203. package/dist/commands/doctor-platform-notes.js +51 -9
  204. package/dist/commands/doctor-sandbox.js +4 -4
  205. package/dist/commands/doctor-security.js +7 -7
  206. package/dist/commands/doctor-state-integrity.js +9 -7
  207. package/dist/commands/doctor-state-migrations.js +1 -1
  208. package/dist/commands/doctor-ui.js +2 -2
  209. package/dist/commands/doctor-update.js +5 -5
  210. package/dist/commands/doctor-workspace-status.js +2 -2
  211. package/dist/commands/doctor-workspace.js +5 -27
  212. package/dist/commands/doctor.js +11 -11
  213. package/dist/commands/gateway-status/helpers.js +2 -2
  214. package/dist/commands/gateway-status.js +9 -3
  215. package/dist/commands/health.js +2 -2
  216. package/dist/commands/models/auth.js +1 -1
  217. package/dist/commands/models/list.probe.js +2 -2
  218. package/dist/commands/models/list.registry.js +4 -4
  219. package/dist/commands/models/list.status-command.js +4 -4
  220. package/dist/commands/node-daemon-install-helpers.js +1 -1
  221. package/dist/commands/onboard-auth.config-core.js +65 -1
  222. package/dist/commands/onboard-auth.credentials.js +14 -2
  223. package/dist/commands/onboard-auth.js +2 -2
  224. package/dist/commands/onboard-channels.js +5 -5
  225. package/dist/commands/onboard-helpers.js +9 -8
  226. package/dist/commands/onboard-hooks.js +4 -4
  227. package/dist/commands/onboard-non-interactive/local/auth-choice.js +21 -1
  228. package/dist/commands/onboard-non-interactive/local.js +1 -1
  229. package/dist/commands/onboard-non-interactive/remote.js +1 -1
  230. package/dist/commands/onboard-non-interactive.js +1 -1
  231. package/dist/commands/onboard-remote.js +7 -3
  232. package/dist/commands/onboard-skills.js +2 -2
  233. package/dist/commands/onboard.js +3 -3
  234. package/dist/commands/onboarding/plugin-install.js +2 -2
  235. package/dist/commands/reset.js +3 -3
  236. package/dist/commands/sandbox-display.js +1 -1
  237. package/dist/commands/sandbox-explain.js +2 -2
  238. package/dist/commands/setup.js +9 -7
  239. package/dist/commands/signal-install.js +2 -2
  240. package/dist/commands/status-all/diagnosis.js +1 -1
  241. package/dist/commands/status-all/report-lines.js +1 -1
  242. package/dist/commands/status-all.js +5 -5
  243. package/dist/commands/status.command.js +9 -9
  244. package/dist/commands/status.gateway-probe.js +2 -2
  245. package/dist/commands/status.scan.js +2 -2
  246. package/dist/commands/status.update.js +3 -3
  247. package/dist/commands/uninstall.js +4 -4
  248. package/dist/compat/legacy-names.js +8 -6
  249. package/dist/config/config.js +1 -1
  250. package/dist/config/io.js +13 -14
  251. package/dist/config/paths.js +107 -33
  252. package/dist/config/schema.js +14 -12
  253. package/dist/config/sessions/store.js +1 -1
  254. package/dist/config/sessions/transcript.js +1 -1
  255. package/dist/config/types.js +1 -1
  256. package/dist/config/validation.js +2 -2
  257. package/dist/config/version.js +4 -4
  258. package/dist/config/zod-schema.agent-runtime.js +1 -0
  259. package/dist/config/zod-schema.js +3 -2
  260. package/dist/config/zod-schema.session.js +6 -1
  261. package/dist/control-ui/apple-touch-icon.png +0 -0
  262. package/dist/control-ui/assets/index-BKPyesll.css +1 -0
  263. package/dist/control-ui/assets/{index-CxLFx0Ae.js → index-DFDgq9AK.js} +397 -366
  264. package/dist/control-ui/assets/index-DFDgq9AK.js.map +1 -0
  265. package/dist/control-ui/favicon-32.png +0 -0
  266. package/dist/control-ui/favicon.svg +22 -0
  267. package/dist/control-ui/index.html +7 -5
  268. package/dist/daemon/constants.js +19 -25
  269. package/dist/daemon/inspect.js +64 -28
  270. package/dist/daemon/launchd.js +7 -7
  271. package/dist/daemon/node-service.js +14 -14
  272. package/dist/daemon/paths.js +3 -3
  273. package/dist/daemon/program-args.js +1 -1
  274. package/dist/daemon/schtasks.js +6 -6
  275. package/dist/daemon/service-env.js +25 -21
  276. package/dist/daemon/systemd-hints.js +1 -1
  277. package/dist/daemon/systemd-unit.js +1 -1
  278. package/dist/daemon/systemd.js +6 -6
  279. package/dist/discord/send.outbound.js +4 -4
  280. package/dist/discord/send.shared.js +32 -1
  281. package/dist/discord/targets.js +79 -0
  282. package/dist/entry.js +9 -8
  283. package/dist/gateway/auth.js +6 -3
  284. package/dist/gateway/call.js +3 -1
  285. package/dist/gateway/control-ui.js +4 -4
  286. package/dist/gateway/hooks.js +3 -1
  287. package/dist/gateway/http-utils.js +5 -3
  288. package/dist/gateway/openai-http.js +3 -3
  289. package/dist/gateway/openresponses-http.js +4 -4
  290. package/dist/gateway/protocol/client-info.js +5 -5
  291. package/dist/gateway/server/ws-connection/message-handler.js +1 -1
  292. package/dist/gateway/server-browser.js +2 -2
  293. package/dist/gateway/server-constants.js +2 -2
  294. package/dist/gateway/server-cron.js +1 -1
  295. package/dist/gateway/server-discovery-runtime.js +12 -4
  296. package/dist/gateway/server-discovery.js +7 -7
  297. package/dist/gateway/server-http.js +1 -1
  298. package/dist/gateway/server-methods/config.js +2 -2
  299. package/dist/gateway/server-methods/logs.js +1 -1
  300. package/dist/gateway/server-methods/update.js +2 -2
  301. package/dist/gateway/server-plugins.js +2 -2
  302. package/dist/gateway/server-reload-handlers.js +5 -5
  303. package/dist/gateway/server-runtime-config.js +3 -3
  304. package/dist/gateway/server-startup.js +6 -6
  305. package/dist/gateway/server.impl.js +8 -7
  306. package/dist/gateway/session-utils.fs.js +2 -1
  307. package/dist/gateway/test-helpers.mocks.js +8 -6
  308. package/dist/gateway/test-helpers.server.js +28 -28
  309. package/dist/gateway/tools-invoke-http.js +40 -4
  310. package/dist/hooks/bundled/boot-md/HOOK.md +3 -3
  311. package/dist/hooks/bundled/command-logger/HOOK.md +12 -12
  312. package/dist/hooks/bundled/command-logger/handler.js +2 -1
  313. package/dist/hooks/bundled/session-memory/HOOK.md +30 -7
  314. package/dist/hooks/bundled/session-memory/handler.js +19 -12
  315. package/dist/hooks/bundled/soul-evil/HOOK.md +5 -5
  316. package/dist/hooks/bundled-dir.js +2 -2
  317. package/dist/hooks/config.js +1 -1
  318. package/dist/hooks/frontmatter.js +11 -3
  319. package/dist/hooks/gmail-ops.js +1 -1
  320. package/dist/hooks/gmail-watcher.js +1 -1
  321. package/dist/hooks/hooks-status.js +2 -2
  322. package/dist/hooks/install.js +8 -8
  323. package/dist/hooks/internal-hooks.js +1 -1
  324. package/dist/hooks/llm-slug-generator.js +1 -1
  325. package/dist/hooks/loader.js +1 -1
  326. package/dist/hooks/plugin-hooks.js +2 -2
  327. package/dist/hooks/workspace.js +9 -9
  328. package/dist/imessage/monitor/monitor-provider.js +2 -2
  329. package/dist/index.js +4 -4
  330. package/dist/infra/bonjour-discovery.js +21 -17
  331. package/dist/infra/bonjour.js +10 -9
  332. package/dist/infra/device-identity.js +1 -1
  333. package/dist/infra/diagnostic-flags.js +1 -1
  334. package/dist/infra/dotenv.js +1 -1
  335. package/dist/infra/exec-approvals.js +2 -2
  336. package/dist/infra/gateway-lock.js +3 -2
  337. package/dist/infra/machine-name.js +1 -1
  338. package/dist/infra/{moltbot-root.js → openclaw-root.js} +2 -2
  339. package/dist/infra/outbound/outbound-session.js +18 -0
  340. package/dist/infra/outbound/targets.js +1 -1
  341. package/dist/infra/path-env.js +10 -9
  342. package/dist/infra/ports-format.js +3 -2
  343. package/dist/infra/ports.js +2 -2
  344. package/dist/infra/provider-usage.auth.js +33 -0
  345. package/dist/infra/provider-usage.fetch.claude.js +1 -1
  346. package/dist/infra/provider-usage.fetch.minimax.js +1 -1
  347. package/dist/infra/provider-usage.load.js +6 -0
  348. package/dist/infra/provider-usage.shared.js +2 -0
  349. package/dist/infra/restart-sentinel.js +1 -1
  350. package/dist/infra/restart.js +4 -4
  351. package/dist/infra/runtime-guard.js +2 -2
  352. package/dist/infra/shell-env.js +4 -4
  353. package/dist/infra/ssh-config.js +2 -1
  354. package/dist/infra/ssh-tunnel.js +8 -1
  355. package/dist/infra/state-migrations.js +165 -6
  356. package/dist/infra/system-presence.js +1 -1
  357. package/dist/infra/tailscale.js +1 -1
  358. package/dist/infra/tls/gateway.js +1 -1
  359. package/dist/infra/unhandled-rejections.js +56 -33
  360. package/dist/infra/update-check.js +1 -1
  361. package/dist/infra/update-global.js +21 -11
  362. package/dist/infra/update-runner.js +7 -7
  363. package/dist/infra/update-startup.js +3 -3
  364. package/dist/infra/voicewake.js +1 -1
  365. package/dist/infra/warnings.js +1 -1
  366. package/dist/infra/widearea-dns.js +31 -14
  367. package/dist/logging/logger.js +4 -4
  368. package/dist/macos/gateway-daemon.js +9 -6
  369. package/dist/macos/relay-smoke.js +1 -1
  370. package/dist/macos/relay.js +6 -6
  371. package/dist/media/host.js +1 -1
  372. package/dist/media/image-ops.js +3 -3
  373. package/dist/media/input-files.js +1 -1
  374. package/dist/media/mime.js +3 -0
  375. package/dist/media-understanding/apply.js +278 -1
  376. package/dist/media-understanding/attachments.js +1 -1
  377. package/dist/media-understanding/providers/image.js +2 -2
  378. package/dist/media-understanding/runner.js +1 -1
  379. package/dist/memory/batch-gemini.js +2 -2
  380. package/dist/memory/batch-openai.js +1 -1
  381. package/dist/memory/embeddings-gemini.js +1 -1
  382. package/dist/memory/embeddings.js +1 -1
  383. package/dist/memory/internal.js +49 -16
  384. package/dist/memory/manager-cache-key.js +1 -0
  385. package/dist/memory/manager.js +62 -10
  386. package/dist/memory/sync-memory-files.js +1 -1
  387. package/dist/node-host/runner.js +6 -6
  388. package/dist/pairing/pairing-messages.js +2 -2
  389. package/dist/plugins/bundled-dir.js +1 -1
  390. package/dist/plugins/cli.js +2 -2
  391. package/dist/plugins/config-state.js +60 -0
  392. package/dist/plugins/discovery.js +14 -12
  393. package/dist/plugins/install.js +8 -8
  394. package/dist/plugins/loader.js +4 -7
  395. package/dist/plugins/manifest-registry.js +4 -4
  396. package/dist/plugins/manifest.js +4 -7
  397. package/dist/plugins/providers.js +2 -2
  398. package/dist/plugins/registry.js +2 -2
  399. package/dist/plugins/runtime.js +1 -1
  400. package/dist/plugins/status.js +2 -2
  401. package/dist/plugins/tools.js +2 -2
  402. package/dist/plugins/update.js +3 -3
  403. package/dist/providers/qwen-portal-oauth.js +1 -1
  404. package/dist/routing/resolve-route.js +2 -0
  405. package/dist/routing/session-key.js +5 -0
  406. package/dist/security/audit-extra.js +2 -2
  407. package/dist/security/audit.js +7 -7
  408. package/dist/shared/text/reasoning-tags.js +44 -3
  409. package/dist/slack/monitor/commands.js +4 -3
  410. package/dist/slack/monitor/slash.js +62 -59
  411. package/dist/slack/monitor.test-helpers.js +1 -1
  412. package/dist/telegram/accounts.js +1 -1
  413. package/dist/telegram/bot/delivery.js +26 -3
  414. package/dist/telegram/bot/helpers.js +13 -2
  415. package/dist/telegram/bot-message-context.js +8 -4
  416. package/dist/telegram/bot-message-dispatch.js +36 -5
  417. package/dist/telegram/bot-native-commands.js +50 -11
  418. package/dist/telegram/bot.js +7 -5
  419. package/dist/telegram/download.js +1 -1
  420. package/dist/telegram/monitor.js +19 -1
  421. package/dist/telegram/network-config.js +2 -2
  422. package/dist/telegram/network-errors.js +4 -0
  423. package/dist/terminal/links.js +1 -1
  424. package/dist/tts/tts.js +12 -6
  425. package/dist/tui/gateway-chat.js +3 -3
  426. package/dist/tui/tui.js +1 -1
  427. package/dist/utils.js +12 -3
  428. package/dist/version.js +3 -3
  429. package/dist/web/active-listener.js +1 -1
  430. package/dist/web/auth-store.js +1 -1
  431. package/dist/web/auto-reply/monitor/broadcast.js +2 -0
  432. package/dist/web/auto-reply/monitor/process-message.js +1 -1
  433. package/dist/web/auto-reply/monitor.js +1 -1
  434. package/dist/web/login.js +1 -1
  435. package/dist/web/session.js +2 -2
  436. package/dist/wizard/onboarding.finalize.js +24 -21
  437. package/dist/wizard/onboarding.gateway-config.js +1 -1
  438. package/dist/wizard/onboarding.js +11 -11
  439. package/docs/CNAME +1 -1
  440. package/docs/_config.yml +3 -3
  441. package/docs/_layouts/default.html +9 -9
  442. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  443. package/docs/assets/openclaw-logo-text.png +0 -0
  444. package/docs/assets/theme.js +1 -1
  445. package/docs/automation/auth-monitoring.md +7 -7
  446. package/docs/automation/cron-jobs.md +19 -19
  447. package/docs/automation/cron-vs-heartbeat.md +7 -7
  448. package/docs/automation/gmail-pubsub.md +25 -25
  449. package/docs/automation/poll.md +7 -7
  450. package/docs/automation/webhook.md +5 -5
  451. package/docs/bedrock.md +10 -10
  452. package/docs/brave-search.md +1 -1
  453. package/docs/broadcast-groups.md +6 -6
  454. package/docs/channels/bluebubbles.md +12 -12
  455. package/docs/channels/discord.md +15 -15
  456. package/docs/channels/googlechat.md +16 -16
  457. package/docs/channels/imessage.md +13 -13
  458. package/docs/channels/index.md +4 -4
  459. package/docs/channels/line.md +6 -6
  460. package/docs/channels/location.md +1 -1
  461. package/docs/channels/matrix.md +14 -14
  462. package/docs/channels/mattermost.md +8 -8
  463. package/docs/channels/msteams.md +26 -26
  464. package/docs/channels/nextcloud-talk.md +7 -7
  465. package/docs/channels/nostr.md +9 -9
  466. package/docs/channels/signal.md +9 -9
  467. package/docs/channels/slack.md +16 -16
  468. package/docs/channels/telegram.md +23 -23
  469. package/docs/channels/tlon.md +5 -5
  470. package/docs/channels/troubleshooting.md +2 -2
  471. package/docs/channels/twitch.md +14 -14
  472. package/docs/channels/whatsapp.md +26 -26
  473. package/docs/channels/zalo.md +8 -8
  474. package/docs/channels/zalouser.md +12 -12
  475. package/docs/cli/acp.md +24 -24
  476. package/docs/cli/agent.md +6 -6
  477. package/docs/cli/agents.md +12 -12
  478. package/docs/cli/approvals.md +14 -14
  479. package/docs/cli/browser.md +24 -24
  480. package/docs/cli/channels.md +21 -21
  481. package/docs/cli/config.md +15 -15
  482. package/docs/cli/configure.md +6 -6
  483. package/docs/cli/cron.md +5 -5
  484. package/docs/cli/dashboard.md +4 -4
  485. package/docs/cli/devices.md +13 -13
  486. package/docs/cli/directory.md +12 -12
  487. package/docs/cli/dns.md +5 -6
  488. package/docs/cli/docs.md +5 -5
  489. package/docs/cli/doctor.md +11 -11
  490. package/docs/cli/gateway.md +26 -26
  491. package/docs/cli/health.md +5 -5
  492. package/docs/cli/hooks.md +35 -35
  493. package/docs/cli/index.md +42 -42
  494. package/docs/cli/logs.md +6 -6
  495. package/docs/cli/memory.md +12 -11
  496. package/docs/cli/message.md +11 -11
  497. package/docs/cli/models.md +15 -15
  498. package/docs/cli/node.md +14 -14
  499. package/docs/cli/nodes.md +14 -14
  500. package/docs/cli/onboard.md +7 -7
  501. package/docs/cli/pairing.md +4 -4
  502. package/docs/cli/plugins.md +16 -16
  503. package/docs/cli/reset.md +5 -5
  504. package/docs/cli/sandbox.md +28 -28
  505. package/docs/cli/security.md +6 -6
  506. package/docs/cli/sessions.md +5 -5
  507. package/docs/cli/setup.md +6 -6
  508. package/docs/cli/skills.md +6 -6
  509. package/docs/cli/status.md +7 -7
  510. package/docs/cli/system.md +6 -6
  511. package/docs/cli/tui.md +5 -5
  512. package/docs/cli/uninstall.md +5 -5
  513. package/docs/cli/update.md +20 -20
  514. package/docs/cli/voicecall.md +9 -9
  515. package/docs/cli/webhooks.md +5 -5
  516. package/docs/concepts/agent-loop.md +5 -5
  517. package/docs/concepts/agent-workspace.md +27 -27
  518. package/docs/concepts/agent.md +12 -12
  519. package/docs/concepts/architecture.md +2 -2
  520. package/docs/concepts/channel-routing.md +5 -5
  521. package/docs/concepts/compaction.md +5 -5
  522. package/docs/concepts/context.md +6 -6
  523. package/docs/concepts/group-messages.md +7 -7
  524. package/docs/concepts/groups.md +5 -5
  525. package/docs/concepts/markdown-formatting.md +3 -3
  526. package/docs/concepts/memory.md +41 -19
  527. package/docs/concepts/messages.md +4 -4
  528. package/docs/concepts/model-failover.md +14 -14
  529. package/docs/concepts/model-providers.md +25 -24
  530. package/docs/concepts/models.md +27 -27
  531. package/docs/concepts/multi-agent.md +31 -31
  532. package/docs/concepts/oauth.md +22 -22
  533. package/docs/concepts/presence.md +2 -2
  534. package/docs/concepts/retry.md +1 -1
  535. package/docs/concepts/session-pruning.md +1 -1
  536. package/docs/concepts/session-tool.md +4 -4
  537. package/docs/concepts/session.md +18 -16
  538. package/docs/concepts/streaming.md +3 -3
  539. package/docs/concepts/system-prompt.md +11 -11
  540. package/docs/concepts/timezone.md +2 -2
  541. package/docs/concepts/typebox.md +3 -3
  542. package/docs/concepts/typing-indicators.md +2 -2
  543. package/docs/concepts/usage-tracking.md +3 -3
  544. package/docs/date-time.md +2 -2
  545. package/docs/debug/node-issue.md +6 -6
  546. package/docs/debugging.md +18 -18
  547. package/docs/diagnostics/flags.md +7 -7
  548. package/docs/docs.json +21 -5
  549. package/docs/environment.md +7 -7
  550. package/docs/experiments/plans/cron-add-hardening.md +1 -1
  551. package/docs/experiments/plans/openresponses-gateway.md +2 -2
  552. package/docs/experiments/research/memory.md +12 -12
  553. package/docs/gateway/authentication.md +22 -22
  554. package/docs/gateway/background-process.md +2 -2
  555. package/docs/gateway/bonjour.md +25 -25
  556. package/docs/gateway/bridge-protocol.md +2 -2
  557. package/docs/gateway/cli-backends.md +12 -12
  558. package/docs/gateway/configuration-examples.md +26 -25
  559. package/docs/gateway/configuration.md +155 -153
  560. package/docs/gateway/discovery.md +10 -10
  561. package/docs/gateway/doctor.md +27 -27
  562. package/docs/gateway/gateway-lock.md +1 -1
  563. package/docs/gateway/health.md +11 -11
  564. package/docs/gateway/heartbeat.md +5 -5
  565. package/docs/gateway/index.md +63 -63
  566. package/docs/gateway/local-models.md +2 -2
  567. package/docs/gateway/logging.md +8 -8
  568. package/docs/gateway/multiple-gateways.md +24 -24
  569. package/docs/gateway/openai-http-api.md +12 -12
  570. package/docs/gateway/openresponses-http-api.md +12 -12
  571. package/docs/gateway/pairing.md +9 -9
  572. package/docs/gateway/protocol.md +4 -4
  573. package/docs/gateway/remote-gateway-readme.md +10 -10
  574. package/docs/gateway/remote.md +4 -4
  575. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +7 -7
  576. package/docs/gateway/sandboxing.md +6 -6
  577. package/docs/gateway/security/formal-verification.md +67 -14
  578. package/docs/gateway/security/index.md +56 -59
  579. package/docs/gateway/tailscale.md +10 -10
  580. package/docs/gateway/tools-invoke-http-api.md +5 -5
  581. package/docs/gateway/troubleshooting.md +112 -112
  582. package/docs/help/faq.md +338 -338
  583. package/docs/help/troubleshooting.md +16 -16
  584. package/docs/hooks/soul-evil.md +2 -2
  585. package/docs/hooks.md +62 -62
  586. package/docs/index.md +45 -36
  587. package/docs/install/ansible.md +35 -35
  588. package/docs/install/development-channels.md +10 -10
  589. package/docs/install/docker.md +45 -45
  590. package/docs/install/index.md +33 -33
  591. package/docs/install/installer.md +24 -24
  592. package/docs/install/migrating.md +36 -36
  593. package/docs/install/nix.md +18 -18
  594. package/docs/install/node.md +4 -4
  595. package/docs/install/uninstall.md +29 -29
  596. package/docs/install/updating.md +51 -51
  597. package/docs/logging.md +59 -59
  598. package/docs/multi-agent-sandbox-tools.md +15 -15
  599. package/docs/network.md +1 -1
  600. package/docs/nodes/audio.md +2 -2
  601. package/docs/nodes/camera.md +18 -18
  602. package/docs/nodes/images.md +4 -4
  603. package/docs/nodes/index.md +57 -57
  604. package/docs/nodes/location-command.md +2 -2
  605. package/docs/nodes/media-understanding.md +5 -5
  606. package/docs/nodes/talk.md +1 -1
  607. package/docs/nodes/voicewake.md +3 -3
  608. package/docs/northflank.mdx +9 -9
  609. package/docs/perplexity.md +2 -2
  610. package/docs/platforms/android.md +14 -14
  611. package/docs/platforms/digitalocean.md +26 -26
  612. package/docs/platforms/exe-dev.md +68 -130
  613. package/docs/platforms/fly.md +33 -33
  614. package/docs/platforms/gcp.md +58 -58
  615. package/docs/platforms/hetzner.md +45 -45
  616. package/docs/platforms/index.md +8 -8
  617. package/docs/platforms/ios.md +13 -13
  618. package/docs/platforms/linux.md +11 -11
  619. package/docs/platforms/mac/bundled-gateway.md +14 -14
  620. package/docs/platforms/mac/canvas.md +14 -14
  621. package/docs/platforms/mac/child-process.md +5 -5
  622. package/docs/platforms/mac/dev-setup.md +10 -10
  623. package/docs/platforms/mac/health.md +2 -2
  624. package/docs/platforms/mac/icon.md +1 -1
  625. package/docs/platforms/mac/logging.md +4 -4
  626. package/docs/platforms/mac/menu-bar.md +1 -1
  627. package/docs/platforms/mac/peekaboo.md +9 -9
  628. package/docs/platforms/mac/permissions.md +1 -1
  629. package/docs/platforms/mac/release.md +18 -18
  630. package/docs/platforms/mac/remote.md +14 -14
  631. package/docs/platforms/mac/signing.md +7 -7
  632. package/docs/platforms/mac/skills.md +4 -4
  633. package/docs/platforms/mac/webchat.md +1 -1
  634. package/docs/platforms/mac/xpc.md +4 -4
  635. package/docs/platforms/macos-vm.md +27 -27
  636. package/docs/platforms/macos.md +16 -16
  637. package/docs/platforms/oracle.md +35 -35
  638. package/docs/platforms/raspberry-pi.md +22 -22
  639. package/docs/platforms/windows.md +11 -11
  640. package/docs/plugin.md +65 -65
  641. package/docs/plugins/agent-tools.md +1 -1
  642. package/docs/plugins/manifest.md +4 -4
  643. package/docs/plugins/voice-call.md +12 -12
  644. package/docs/plugins/zalouser.md +9 -9
  645. package/docs/prose.md +9 -9
  646. package/docs/providers/anthropic.md +16 -16
  647. package/docs/providers/claude-max-api-proxy.md +4 -4
  648. package/docs/providers/deepgram.md +2 -2
  649. package/docs/providers/github-copilot.md +11 -11
  650. package/docs/providers/glm.md +4 -4
  651. package/docs/providers/index.md +4 -3
  652. package/docs/providers/minimax.md +9 -9
  653. package/docs/providers/models.md +3 -3
  654. package/docs/providers/moonshot.md +15 -4
  655. package/docs/providers/ollama.md +11 -11
  656. package/docs/providers/openai.md +6 -6
  657. package/docs/providers/opencode.md +3 -3
  658. package/docs/providers/openrouter.md +3 -3
  659. package/docs/providers/qwen.md +6 -6
  660. package/docs/providers/synthetic.md +4 -4
  661. package/docs/providers/venice.md +23 -23
  662. package/docs/providers/vercel-ai-gateway.md +4 -4
  663. package/docs/providers/xiaomi.md +62 -0
  664. package/docs/providers/zai.md +5 -5
  665. package/docs/railway.mdx +8 -8
  666. package/docs/refactor/exec-host.md +5 -5
  667. package/docs/refactor/plugin-sdk.md +12 -12
  668. package/docs/refactor/strict-config.md +11 -11
  669. package/docs/reference/AGENTS.default.md +17 -17
  670. package/docs/reference/RELEASING.md +29 -29
  671. package/docs/reference/api-usage-costs.md +6 -6
  672. package/docs/reference/device-models.md +7 -7
  673. package/docs/reference/rpc.md +3 -3
  674. package/docs/reference/session-management-compaction.md +19 -19
  675. package/docs/reference/templates/AGENTS.dev.md +1 -1
  676. package/docs/reference/templates/BOOT.md +1 -1
  677. package/docs/reference/templates/IDENTITY.md +1 -1
  678. package/docs/reference/templates/TOOLS.dev.md +1 -1
  679. package/docs/reference/templates/USER.dev.md +2 -2
  680. package/docs/reference/test.md +2 -2
  681. package/docs/reference/transcript-hygiene.md +1 -1
  682. package/docs/render.mdx +13 -13
  683. package/docs/scripts.md +1 -1
  684. package/docs/security/formal-verification.md +66 -13
  685. package/docs/start/getting-started.md +29 -29
  686. package/docs/start/hubs.md +2 -2
  687. package/docs/start/lore.md +14 -14
  688. package/docs/start/onboarding.md +7 -7
  689. package/docs/start/{clawd.md → openclaw.md} +35 -35
  690. package/docs/start/pairing.md +10 -10
  691. package/docs/start/setup.md +22 -22
  692. package/docs/start/showcase.md +32 -32
  693. package/docs/start/wizard.md +30 -30
  694. package/docs/testing.md +56 -56
  695. package/docs/token-use.md +7 -7
  696. package/docs/tools/agent-send.md +10 -10
  697. package/docs/tools/browser-linux-troubleshooting.md +16 -16
  698. package/docs/tools/browser-login.md +6 -6
  699. package/docs/tools/browser.md +126 -126
  700. package/docs/tools/chrome-extension.md +17 -17
  701. package/docs/tools/clawdhub.md +7 -7
  702. package/docs/tools/creating-skills.md +6 -6
  703. package/docs/tools/exec-approvals.md +5 -5
  704. package/docs/tools/exec.md +4 -4
  705. package/docs/tools/firecrawl.md +2 -2
  706. package/docs/tools/index.md +13 -13
  707. package/docs/tools/llm-task.md +2 -2
  708. package/docs/tools/lobster.md +13 -13
  709. package/docs/tools/skills-config.md +2 -2
  710. package/docs/tools/skills.md +31 -31
  711. package/docs/tools/slash-commands.md +8 -8
  712. package/docs/tools/web.md +8 -8
  713. package/docs/tts.md +11 -11
  714. package/docs/tui.md +7 -7
  715. package/docs/vps.md +1 -1
  716. package/docs/web/control-ui.md +8 -8
  717. package/docs/web/dashboard.md +6 -6
  718. package/docs/web/index.md +5 -5
  719. package/extensions/bluebubbles/index.ts +3 -3
  720. package/extensions/bluebubbles/package.json +5 -5
  721. package/extensions/bluebubbles/src/accounts.ts +9 -9
  722. package/extensions/bluebubbles/src/actions.test.ts +22 -22
  723. package/extensions/bluebubbles/src/actions.ts +6 -6
  724. package/extensions/bluebubbles/src/attachments.ts +2 -2
  725. package/extensions/bluebubbles/src/channel.ts +17 -17
  726. package/extensions/bluebubbles/src/chat.ts +2 -2
  727. package/extensions/bluebubbles/src/config-schema.ts +1 -1
  728. package/extensions/bluebubbles/src/media-send.ts +2 -2
  729. package/extensions/bluebubbles/src/monitor.test.ts +48 -48
  730. package/extensions/bluebubbles/src/monitor.ts +6 -6
  731. package/extensions/bluebubbles/src/onboarding.ts +9 -9
  732. package/extensions/bluebubbles/src/reactions.ts +2 -2
  733. package/extensions/bluebubbles/src/runtime.ts +1 -1
  734. package/extensions/bluebubbles/src/send.ts +2 -2
  735. package/extensions/copilot-proxy/README.md +3 -3
  736. package/extensions/copilot-proxy/index.ts +1 -1
  737. package/extensions/copilot-proxy/package.json +4 -4
  738. package/extensions/diagnostics-otel/index.ts +3 -3
  739. package/extensions/diagnostics-otel/package.json +4 -4
  740. package/extensions/diagnostics-otel/src/service.test.ts +15 -15
  741. package/extensions/diagnostics-otel/src/service.ts +85 -85
  742. package/extensions/discord/index.ts +3 -3
  743. package/extensions/discord/package.json +4 -4
  744. package/extensions/discord/src/channel.ts +1 -1
  745. package/extensions/discord/src/runtime.ts +1 -1
  746. package/extensions/google-antigravity-auth/README.md +3 -3
  747. package/extensions/google-antigravity-auth/index.ts +2 -2
  748. package/extensions/google-antigravity-auth/package.json +4 -4
  749. package/extensions/google-gemini-cli-auth/README.md +5 -5
  750. package/extensions/google-gemini-cli-auth/index.ts +3 -3
  751. package/extensions/google-gemini-cli-auth/oauth.ts +4 -4
  752. package/extensions/google-gemini-cli-auth/package.json +4 -4
  753. package/extensions/googlechat/index.ts +4 -4
  754. package/extensions/googlechat/node_modules/.bin/openclaw +16 -0
  755. package/extensions/googlechat/node_modules/.bin/openclaw.CMD +7 -0
  756. package/extensions/googlechat/node_modules/.bin/openclaw.ps1 +28 -0
  757. package/extensions/googlechat/package.json +7 -7
  758. package/extensions/googlechat/src/accounts.ts +9 -9
  759. package/extensions/googlechat/src/actions.ts +8 -8
  760. package/extensions/googlechat/src/api.ts +1 -1
  761. package/extensions/googlechat/src/channel.ts +23 -23
  762. package/extensions/googlechat/src/monitor.ts +9 -9
  763. package/extensions/googlechat/src/onboarding.ts +11 -11
  764. package/extensions/googlechat/src/runtime.ts +1 -1
  765. package/extensions/googlechat/src/types.config.ts +1 -1
  766. package/extensions/imessage/index.ts +3 -3
  767. package/extensions/imessage/package.json +4 -4
  768. package/extensions/imessage/src/channel.ts +1 -1
  769. package/extensions/imessage/src/runtime.ts +1 -1
  770. package/extensions/line/index.ts +3 -3
  771. package/extensions/line/node_modules/.bin/openclaw +16 -0
  772. package/extensions/line/node_modules/.bin/openclaw.CMD +7 -0
  773. package/extensions/line/node_modules/.bin/openclaw.ps1 +28 -0
  774. package/extensions/line/package.json +6 -6
  775. package/extensions/line/src/card-command.ts +3 -3
  776. package/extensions/line/src/channel.logout.test.ts +4 -4
  777. package/extensions/line/src/channel.sendPayload.test.ts +8 -8
  778. package/extensions/line/src/channel.ts +5 -5
  779. package/extensions/line/src/runtime.ts +1 -1
  780. package/extensions/llm-task/README.md +4 -4
  781. package/extensions/llm-task/index.ts +2 -2
  782. package/extensions/llm-task/package.json +4 -4
  783. package/extensions/llm-task/src/llm-task-tool.ts +6 -6
  784. package/extensions/lobster/README.md +7 -7
  785. package/extensions/lobster/index.ts +2 -2
  786. package/extensions/lobster/package.json +3 -3
  787. package/extensions/lobster/src/lobster-tool.test.ts +7 -7
  788. package/extensions/lobster/src/lobster-tool.ts +2 -2
  789. package/extensions/matrix/CHANGELOG.md +14 -9
  790. package/extensions/matrix/index.ts +3 -3
  791. package/extensions/matrix/node_modules/.bin/markdown-it +0 -5
  792. package/extensions/matrix/node_modules/.bin/markdown-it.CMD +0 -5
  793. package/extensions/matrix/node_modules/.bin/markdown-it.ps1 +0 -13
  794. package/extensions/matrix/node_modules/.bin/openclaw +16 -0
  795. package/extensions/matrix/node_modules/.bin/openclaw.CMD +7 -0
  796. package/extensions/matrix/node_modules/.bin/openclaw.ps1 +28 -0
  797. package/extensions/matrix/package.json +6 -6
  798. package/extensions/matrix/src/actions.ts +1 -1
  799. package/extensions/matrix/src/channel.directory.test.ts +1 -1
  800. package/extensions/matrix/src/channel.ts +1 -1
  801. package/extensions/matrix/src/config-schema.ts +1 -1
  802. package/extensions/matrix/src/directory-live.ts +1 -1
  803. package/extensions/matrix/src/group-mentions.ts +1 -1
  804. package/extensions/matrix/src/matrix/accounts.ts +1 -1
  805. package/extensions/matrix/src/matrix/actions/client.ts +1 -1
  806. package/extensions/matrix/src/matrix/client/config.ts +1 -1
  807. package/extensions/matrix/src/matrix/deps.ts +1 -1
  808. package/extensions/matrix/src/matrix/monitor/allowlist.ts +1 -1
  809. package/extensions/matrix/src/matrix/monitor/auto-join.ts +1 -1
  810. package/extensions/matrix/src/matrix/monitor/events.ts +1 -1
  811. package/extensions/matrix/src/matrix/monitor/handler.ts +5 -5
  812. package/extensions/matrix/src/matrix/monitor/index.ts +1 -1
  813. package/extensions/matrix/src/matrix/monitor/location.ts +1 -1
  814. package/extensions/matrix/src/matrix/monitor/media.test.ts +1 -1
  815. package/extensions/matrix/src/matrix/monitor/replies.ts +1 -1
  816. package/extensions/matrix/src/matrix/monitor/rooms.ts +1 -1
  817. package/extensions/matrix/src/matrix/poll-types.ts +1 -1
  818. package/extensions/matrix/src/matrix/send/client.ts +1 -1
  819. package/extensions/matrix/src/matrix/send.test.ts +1 -1
  820. package/extensions/matrix/src/matrix/send.ts +1 -1
  821. package/extensions/matrix/src/onboarding.ts +2 -2
  822. package/extensions/matrix/src/outbound.ts +1 -1
  823. package/extensions/matrix/src/resolve-targets.ts +1 -1
  824. package/extensions/matrix/src/runtime.ts +1 -1
  825. package/extensions/matrix/src/tool-actions.ts +1 -1
  826. package/extensions/mattermost/index.ts +3 -3
  827. package/extensions/mattermost/package.json +5 -5
  828. package/extensions/mattermost/src/channel.ts +1 -1
  829. package/extensions/mattermost/src/config-schema.ts +1 -1
  830. package/extensions/mattermost/src/group-mentions.ts +1 -1
  831. package/extensions/mattermost/src/mattermost/accounts.ts +9 -9
  832. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +5 -5
  833. package/extensions/mattermost/src/mattermost/monitor.ts +4 -4
  834. package/extensions/mattermost/src/onboarding-helpers.ts +4 -4
  835. package/extensions/mattermost/src/onboarding.ts +4 -4
  836. package/extensions/mattermost/src/runtime.ts +1 -1
  837. package/extensions/mattermost/src/types.ts +1 -1
  838. package/extensions/memory-core/index.ts +3 -3
  839. package/extensions/memory-core/node_modules/.bin/openclaw +16 -0
  840. package/extensions/memory-core/node_modules/.bin/openclaw.CMD +7 -0
  841. package/extensions/memory-core/node_modules/.bin/openclaw.ps1 +28 -0
  842. package/extensions/memory-core/package.json +6 -6
  843. package/extensions/memory-lancedb/config.ts +26 -2
  844. package/extensions/memory-lancedb/index.test.ts +3 -3
  845. package/extensions/memory-lancedb/index.ts +4 -4
  846. package/extensions/memory-lancedb/node_modules/.bin/openai +0 -5
  847. package/extensions/memory-lancedb/node_modules/.bin/openai.CMD +0 -5
  848. package/extensions/memory-lancedb/node_modules/.bin/openai.ps1 +0 -13
  849. package/extensions/memory-lancedb/{clawdbot.plugin.json → openclaw.plugin.json} +1 -1
  850. package/extensions/memory-lancedb/package.json +4 -4
  851. package/extensions/msteams/CHANGELOG.md +12 -7
  852. package/extensions/msteams/index.ts +3 -3
  853. package/extensions/msteams/node_modules/.bin/openclaw +16 -0
  854. package/extensions/msteams/node_modules/.bin/openclaw.CMD +7 -0
  855. package/extensions/msteams/node_modules/.bin/openclaw.ps1 +28 -0
  856. package/extensions/msteams/package.json +6 -6
  857. package/extensions/msteams/src/attachments.test.ts +1 -1
  858. package/extensions/msteams/src/channel.directory.test.ts +2 -2
  859. package/extensions/msteams/src/channel.ts +3 -3
  860. package/extensions/msteams/src/conversation-store-fs.test.ts +6 -5
  861. package/extensions/msteams/src/directory-live.ts +1 -1
  862. package/extensions/msteams/src/graph-upload.ts +4 -4
  863. package/extensions/msteams/src/media-helpers.ts +1 -1
  864. package/extensions/msteams/src/messenger.test.ts +1 -1
  865. package/extensions/msteams/src/messenger.ts +1 -1
  866. package/extensions/msteams/src/monitor-handler/message-handler.ts +1 -1
  867. package/extensions/msteams/src/monitor-handler.ts +2 -2
  868. package/extensions/msteams/src/monitor.ts +3 -3
  869. package/extensions/msteams/src/onboarding.ts +11 -11
  870. package/extensions/msteams/src/outbound.ts +1 -1
  871. package/extensions/msteams/src/policy.test.ts +1 -1
  872. package/extensions/msteams/src/policy.ts +2 -2
  873. package/extensions/msteams/src/polls-store.test.ts +1 -1
  874. package/extensions/msteams/src/polls.test.ts +6 -5
  875. package/extensions/msteams/src/polls.ts +9 -8
  876. package/extensions/msteams/src/probe.test.ts +1 -1
  877. package/extensions/msteams/src/probe.ts +1 -1
  878. package/extensions/msteams/src/reply-dispatcher.ts +3 -3
  879. package/extensions/msteams/src/runtime.ts +1 -1
  880. package/extensions/msteams/src/send-context.ts +2 -2
  881. package/extensions/msteams/src/send.ts +5 -5
  882. package/extensions/msteams/src/token.ts +1 -1
  883. package/extensions/nextcloud-talk/index.ts +3 -3
  884. package/extensions/nextcloud-talk/package.json +5 -5
  885. package/extensions/nextcloud-talk/src/accounts.ts +2 -2
  886. package/extensions/nextcloud-talk/src/channel.ts +8 -8
  887. package/extensions/nextcloud-talk/src/config-schema.ts +1 -1
  888. package/extensions/nextcloud-talk/src/inbound.ts +8 -8
  889. package/extensions/nextcloud-talk/src/monitor.ts +1 -1
  890. package/extensions/nextcloud-talk/src/onboarding.ts +2 -2
  891. package/extensions/nextcloud-talk/src/policy.ts +2 -2
  892. package/extensions/nextcloud-talk/src/room-info.ts +1 -1
  893. package/extensions/nextcloud-talk/src/runtime.ts +1 -1
  894. package/extensions/nextcloud-talk/src/types.ts +1 -1
  895. package/extensions/nostr/CHANGELOG.md +9 -4
  896. package/extensions/nostr/README.md +5 -5
  897. package/extensions/nostr/index.ts +6 -6
  898. package/extensions/nostr/node_modules/.bin/openclaw +16 -0
  899. package/extensions/nostr/node_modules/.bin/openclaw.CMD +7 -0
  900. package/extensions/nostr/node_modules/.bin/openclaw.ps1 +28 -0
  901. package/extensions/nostr/package.json +6 -6
  902. package/extensions/nostr/src/channel.ts +2 -2
  903. package/extensions/nostr/src/config-schema.ts +1 -1
  904. package/extensions/nostr/src/nostr-state-store.test.ts +9 -8
  905. package/extensions/nostr/src/runtime.ts +1 -1
  906. package/extensions/nostr/src/types.ts +4 -4
  907. package/extensions/open-prose/index.ts +2 -2
  908. package/extensions/open-prose/package.json +3 -3
  909. package/extensions/open-prose/skills/prose/SKILL.md +5 -5
  910. package/extensions/open-prose/skills/prose/prose.md +4 -4
  911. package/extensions/qwen-portal-auth/README.md +3 -3
  912. package/extensions/qwen-portal-auth/index.ts +1 -1
  913. package/extensions/signal/index.ts +3 -3
  914. package/extensions/signal/package.json +4 -4
  915. package/extensions/signal/src/channel.ts +1 -1
  916. package/extensions/signal/src/runtime.ts +1 -1
  917. package/extensions/slack/index.ts +3 -3
  918. package/extensions/slack/package.json +4 -4
  919. package/extensions/slack/src/channel.ts +1 -1
  920. package/extensions/slack/src/runtime.ts +1 -1
  921. package/extensions/telegram/index.ts +3 -3
  922. package/extensions/telegram/package.json +4 -4
  923. package/extensions/telegram/src/channel.ts +3 -3
  924. package/extensions/telegram/src/runtime.ts +1 -1
  925. package/extensions/tlon/README.md +3 -3
  926. package/extensions/tlon/index.ts +3 -3
  927. package/extensions/tlon/package.json +5 -5
  928. package/extensions/tlon/src/channel.ts +15 -15
  929. package/extensions/tlon/src/config-schema.ts +1 -1
  930. package/extensions/tlon/src/monitor/discovery.ts +1 -1
  931. package/extensions/tlon/src/monitor/history.ts +1 -1
  932. package/extensions/tlon/src/monitor/index.ts +3 -3
  933. package/extensions/tlon/src/onboarding.ts +4 -4
  934. package/extensions/tlon/src/runtime.ts +1 -1
  935. package/extensions/tlon/src/types.ts +3 -3
  936. package/extensions/twitch/CHANGELOG.md +6 -1
  937. package/extensions/twitch/README.md +8 -8
  938. package/extensions/twitch/index.ts +3 -3
  939. package/extensions/twitch/node_modules/.bin/openclaw +16 -0
  940. package/extensions/twitch/node_modules/.bin/openclaw.CMD +7 -0
  941. package/extensions/twitch/node_modules/.bin/openclaw.ps1 +28 -0
  942. package/extensions/twitch/package.json +5 -5
  943. package/extensions/twitch/src/actions.ts +1 -1
  944. package/extensions/twitch/src/config-schema.ts +1 -1
  945. package/extensions/twitch/src/config.ts +3 -3
  946. package/extensions/twitch/src/monitor.ts +3 -3
  947. package/extensions/twitch/src/onboarding.test.ts +1 -1
  948. package/extensions/twitch/src/onboarding.ts +13 -13
  949. package/extensions/twitch/src/outbound.test.ts +2 -2
  950. package/extensions/twitch/src/outbound.ts +2 -2
  951. package/extensions/twitch/src/plugin.test.ts +2 -2
  952. package/extensions/twitch/src/plugin.ts +9 -9
  953. package/extensions/twitch/src/runtime.ts +1 -1
  954. package/extensions/twitch/src/send.test.ts +2 -2
  955. package/extensions/twitch/src/send.ts +5 -5
  956. package/extensions/twitch/src/token.test.ts +12 -12
  957. package/extensions/twitch/src/token.ts +7 -7
  958. package/extensions/twitch/src/twitch-client.ts +4 -4
  959. package/extensions/twitch/src/types.ts +3 -3
  960. package/extensions/twitch/src/utils/markdown.ts +1 -1
  961. package/extensions/voice-call/CHANGELOG.md +16 -11
  962. package/extensions/voice-call/README.md +16 -16
  963. package/extensions/voice-call/package.json +4 -4
  964. package/extensions/voice-call/src/cli.ts +16 -4
  965. package/extensions/voice-call/src/core-bridge.ts +5 -5
  966. package/extensions/voice-call/src/manager.test.ts +2 -2
  967. package/extensions/voice-call/src/manager.ts +17 -5
  968. package/extensions/voice-call/src/response-generator.ts +1 -1
  969. package/extensions/whatsapp/index.ts +3 -3
  970. package/extensions/whatsapp/package.json +4 -4
  971. package/extensions/whatsapp/src/channel.ts +1 -1
  972. package/extensions/whatsapp/src/runtime.ts +1 -1
  973. package/extensions/zalo/CHANGELOG.md +14 -9
  974. package/extensions/zalo/README.md +4 -4
  975. package/extensions/zalo/index.ts +3 -3
  976. package/extensions/zalo/node_modules/.bin/openclaw +16 -0
  977. package/extensions/zalo/node_modules/.bin/openclaw.CMD +7 -0
  978. package/extensions/zalo/node_modules/.bin/openclaw.ps1 +28 -0
  979. package/extensions/zalo/package.json +6 -6
  980. package/extensions/zalo/src/accounts.ts +9 -9
  981. package/extensions/zalo/src/actions.ts +6 -6
  982. package/extensions/zalo/src/channel.directory.test.ts +2 -2
  983. package/extensions/zalo/src/channel.ts +20 -20
  984. package/extensions/zalo/src/config-schema.ts +1 -1
  985. package/extensions/zalo/src/monitor.ts +9 -9
  986. package/extensions/zalo/src/monitor.webhook.test.ts +2 -2
  987. package/extensions/zalo/src/onboarding.ts +27 -27
  988. package/extensions/zalo/src/runtime.ts +1 -1
  989. package/extensions/zalo/src/send.ts +2 -2
  990. package/extensions/zalo/src/status-issues.ts +1 -1
  991. package/extensions/zalo/src/token.ts +1 -1
  992. package/extensions/zalouser/CHANGELOG.md +9 -4
  993. package/extensions/zalouser/README.md +18 -18
  994. package/extensions/zalouser/index.ts +3 -3
  995. package/extensions/zalouser/node_modules/.bin/openclaw +16 -0
  996. package/extensions/zalouser/node_modules/.bin/openclaw.CMD +7 -0
  997. package/extensions/zalouser/node_modules/.bin/openclaw.ps1 +28 -0
  998. package/extensions/zalouser/package.json +6 -6
  999. package/extensions/zalouser/src/accounts.ts +10 -10
  1000. package/extensions/zalouser/src/channel.ts +27 -27
  1001. package/extensions/zalouser/src/config-schema.ts +1 -1
  1002. package/extensions/zalouser/src/monitor.ts +5 -5
  1003. package/extensions/zalouser/src/onboarding.ts +32 -32
  1004. package/extensions/zalouser/src/runtime.ts +1 -1
  1005. package/extensions/zalouser/src/status-issues.ts +2 -2
  1006. package/openclaw.mjs +14 -0
  1007. package/package.json +35 -25
  1008. package/scripts/postinstall.js +1 -0
  1009. package/skills/1password/SKILL.md +3 -3
  1010. package/skills/apple-notes/SKILL.md +2 -2
  1011. package/skills/apple-reminders/SKILL.md +1 -1
  1012. package/skills/bear-notes/SKILL.md +1 -1
  1013. package/skills/bird/SKILL.md +1 -1
  1014. package/skills/blogwatcher/SKILL.md +1 -1
  1015. package/skills/blucli/SKILL.md +1 -1
  1016. package/skills/bluebubbles/SKILL.md +1 -1
  1017. package/skills/camsnap/SKILL.md +1 -1
  1018. package/skills/canvas/SKILL.md +6 -6
  1019. package/skills/clawdhub/SKILL.md +2 -2
  1020. package/skills/coding-agent/SKILL.md +6 -6
  1021. package/skills/discord/SKILL.md +5 -5
  1022. package/skills/eightctl/SKILL.md +1 -1
  1023. package/skills/food-order/SKILL.md +1 -1
  1024. package/skills/gemini/SKILL.md +1 -1
  1025. package/skills/gifgrep/SKILL.md +1 -1
  1026. package/skills/github/SKILL.md +1 -1
  1027. package/skills/gog/SKILL.md +1 -1
  1028. package/skills/goplaces/SKILL.md +1 -1
  1029. package/skills/himalaya/SKILL.md +1 -1
  1030. package/skills/imsg/SKILL.md +1 -1
  1031. package/skills/local-places/SKILL.md +1 -1
  1032. package/skills/mcporter/SKILL.md +1 -1
  1033. package/skills/model-usage/SKILL.md +1 -1
  1034. package/skills/nano-banana-pro/SKILL.md +3 -3
  1035. package/skills/nano-banana-pro/scripts/generate_image.py +1 -1
  1036. package/skills/nano-pdf/SKILL.md +1 -1
  1037. package/skills/notion/SKILL.md +1 -1
  1038. package/skills/obsidian/SKILL.md +1 -1
  1039. package/skills/openai-image-gen/SKILL.md +1 -1
  1040. package/skills/openai-whisper/SKILL.md +1 -1
  1041. package/skills/openai-whisper-api/SKILL.md +2 -2
  1042. package/skills/openhue/SKILL.md +1 -1
  1043. package/skills/oracle/SKILL.md +1 -1
  1044. package/skills/ordercli/SKILL.md +1 -1
  1045. package/skills/peekaboo/SKILL.md +1 -1
  1046. package/skills/sag/SKILL.md +1 -1
  1047. package/skills/session-logs/SKILL.md +1 -1
  1048. package/skills/sherpa-onnx-tts/SKILL.md +2 -2
  1049. package/skills/slack/SKILL.md +4 -4
  1050. package/skills/songsee/SKILL.md +1 -1
  1051. package/skills/sonoscli/SKILL.md +1 -1
  1052. package/skills/spotify-player/SKILL.md +1 -1
  1053. package/skills/summarize/SKILL.md +1 -1
  1054. package/skills/things-mac/SKILL.md +3 -3
  1055. package/skills/tmux/SKILL.md +7 -7
  1056. package/skills/trello/SKILL.md +2 -2
  1057. package/skills/video-frames/SKILL.md +1 -1
  1058. package/skills/voice-call/SKILL.md +4 -4
  1059. package/skills/wacli/SKILL.md +2 -2
  1060. package/skills/weather/SKILL.md +1 -1
  1061. package/dist/control-ui/assets/index-BAFzd9IE.css +0 -1
  1062. package/dist/control-ui/assets/index-CxLFx0Ae.js.map +0 -1
  1063. package/dist/control-ui/pixel_pig_icon.png +0 -0
  1064. package/dist/daemon/legacy.js +0 -44
  1065. /package/dist/config/{types.clawdbot.js → types.openclaw.js} +0 -0
  1066. /package/docs/{whatsapp-clawd.jpg → whatsapp-openclaw.jpg} +0 -0
  1067. /package/extensions/bluebubbles/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1068. /package/extensions/copilot-proxy/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1069. /package/extensions/diagnostics-otel/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1070. /package/extensions/discord/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1071. /package/extensions/google-antigravity-auth/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1072. /package/extensions/google-gemini-cli-auth/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1073. /package/extensions/googlechat/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1074. /package/extensions/imessage/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1075. /package/extensions/line/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1076. /package/extensions/llm-task/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1077. /package/extensions/lobster/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1078. /package/extensions/matrix/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1079. /package/extensions/mattermost/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1080. /package/extensions/memory-core/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1081. /package/extensions/msteams/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1082. /package/extensions/nextcloud-talk/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1083. /package/extensions/nostr/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1084. /package/extensions/open-prose/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1085. /package/extensions/qwen-portal-auth/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1086. /package/extensions/signal/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1087. /package/extensions/slack/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1088. /package/extensions/telegram/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1089. /package/extensions/tlon/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1090. /package/extensions/twitch/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1091. /package/extensions/voice-call/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1092. /package/extensions/whatsapp/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1093. /package/extensions/zalo/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
  1094. /package/extensions/zalouser/{clawdbot.plugin.json → openclaw.plugin.json} +0 -0
@@ -18,7 +18,7 @@ import { resolveSlackChannelConfig } from "./channel-config.js";
18
18
  import { buildSlackSlashCommandMatcher, resolveSlackSlashCommandConfig } from "./commands.js";
19
19
  import { isSlackChannelAllowedByPolicy } from "./policy.js";
20
20
  import { deliverSlackSlashReplies } from "./replies.js";
21
- const SLACK_COMMAND_ARG_ACTION_ID = "moltbot_cmdarg";
21
+ const SLACK_COMMAND_ARG_ACTION_ID = "openclaw_cmdarg";
22
22
  const SLACK_COMMAND_ARG_VALUE_PREFIX = "cmdarg";
23
23
  function chunkItems(items, size) {
24
24
  if (size <= 0)
@@ -440,65 +440,68 @@ export function registerSlackMonitorSlashCommands(params) {
440
440
  }
441
441
  if (nativeCommands.length === 0 || !supportsInteractiveArgMenus)
442
442
  return;
443
- ctx.app.action(SLACK_COMMAND_ARG_ACTION_ID, async (args) => {
444
- const { ack, body, respond } = args;
445
- const action = args.action;
446
- await ack();
447
- const respondFn = respond ??
448
- (async (payload) => {
449
- if (!body.channel?.id || !body.user?.id)
450
- return;
451
- await ctx.app.client.chat.postEphemeral({
452
- token: ctx.botToken,
453
- channel: body.channel.id,
454
- user: body.user.id,
455
- text: payload.text,
456
- blocks: payload.blocks,
443
+ const registerArgAction = (actionId) => {
444
+ ctx.app.action(actionId, async (args) => {
445
+ const { ack, body, respond } = args;
446
+ const action = args.action;
447
+ await ack();
448
+ const respondFn = respond ??
449
+ (async (payload) => {
450
+ if (!body.channel?.id || !body.user?.id)
451
+ return;
452
+ await ctx.app.client.chat.postEphemeral({
453
+ token: ctx.botToken,
454
+ channel: body.channel.id,
455
+ user: body.user.id,
456
+ text: payload.text,
457
+ blocks: payload.blocks,
458
+ });
457
459
  });
460
+ const parsed = parseSlackCommandArgValue(action?.value);
461
+ if (!parsed) {
462
+ await respondFn({
463
+ text: "Sorry, that button is no longer valid.",
464
+ response_type: "ephemeral",
465
+ });
466
+ return;
467
+ }
468
+ if (body.user?.id && parsed.userId !== body.user.id) {
469
+ await respondFn({
470
+ text: "That menu is for another user.",
471
+ response_type: "ephemeral",
472
+ });
473
+ return;
474
+ }
475
+ const commandDefinition = findCommandByNativeName(parsed.command, "slack");
476
+ const commandArgs = {
477
+ values: { [parsed.arg]: parsed.value },
478
+ };
479
+ const prompt = commandDefinition
480
+ ? buildCommandTextFromArgs(commandDefinition, commandArgs)
481
+ : `/${parsed.command} ${parsed.value}`;
482
+ const user = body.user;
483
+ const userName = user && "name" in user && user.name
484
+ ? user.name
485
+ : user && "username" in user && user.username
486
+ ? user.username
487
+ : (user?.id ?? "");
488
+ const triggerId = "trigger_id" in body ? body.trigger_id : undefined;
489
+ const commandPayload = {
490
+ user_id: user?.id ?? "",
491
+ user_name: userName,
492
+ channel_id: body.channel?.id ?? "",
493
+ channel_name: body.channel?.name ?? body.channel?.id ?? "",
494
+ trigger_id: triggerId ?? String(Date.now()),
495
+ };
496
+ await handleSlashCommand({
497
+ command: commandPayload,
498
+ ack: async () => { },
499
+ respond: respondFn,
500
+ prompt,
501
+ commandArgs,
502
+ commandDefinition: commandDefinition ?? undefined,
458
503
  });
459
- const parsed = parseSlackCommandArgValue(action?.value);
460
- if (!parsed) {
461
- await respondFn({
462
- text: "Sorry, that button is no longer valid.",
463
- response_type: "ephemeral",
464
- });
465
- return;
466
- }
467
- if (body.user?.id && parsed.userId !== body.user.id) {
468
- await respondFn({
469
- text: "That menu is for another user.",
470
- response_type: "ephemeral",
471
- });
472
- return;
473
- }
474
- const commandDefinition = findCommandByNativeName(parsed.command, "slack");
475
- const commandArgs = {
476
- values: { [parsed.arg]: parsed.value },
477
- };
478
- const prompt = commandDefinition
479
- ? buildCommandTextFromArgs(commandDefinition, commandArgs)
480
- : `/${parsed.command} ${parsed.value}`;
481
- const user = body.user;
482
- const userName = user && "name" in user && user.name
483
- ? user.name
484
- : user && "username" in user && user.username
485
- ? user.username
486
- : (user?.id ?? "");
487
- const triggerId = "trigger_id" in body ? body.trigger_id : undefined;
488
- const commandPayload = {
489
- user_id: user?.id ?? "",
490
- user_name: userName,
491
- channel_id: body.channel?.id ?? "",
492
- channel_name: body.channel?.name ?? body.channel?.id ?? "",
493
- trigger_id: triggerId ?? String(Date.now()),
494
- };
495
- await handleSlashCommand({
496
- command: commandPayload,
497
- ack: async () => { },
498
- respond: respondFn,
499
- prompt,
500
- commandArgs,
501
- commandDefinition: commandDefinition ?? undefined,
502
504
  });
503
- });
505
+ };
506
+ registerArgAction(SLACK_COMMAND_ARG_ACTION_ID);
504
507
  }
@@ -69,7 +69,7 @@ vi.mock("../pairing/pairing-store.js", () => ({
69
69
  upsertChannelPairingRequest: (...args) => slackTestState.upsertPairingRequestMock(...args),
70
70
  }));
71
71
  vi.mock("../config/sessions.js", () => ({
72
- resolveStorePath: vi.fn(() => "/tmp/moltbot-sessions.json"),
72
+ resolveStorePath: vi.fn(() => "/tmp/openclaw-sessions.json"),
73
73
  updateLastRoute: (...args) => slackTestState.updateLastRouteMock(...args),
74
74
  resolveSessionKey: vi.fn(),
75
75
  readSessionUpdatedAt: vi.fn(() => undefined),
@@ -3,7 +3,7 @@ import { listBoundAccountIds, resolveDefaultAgentBoundAccountId } from "../routi
3
3
  import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "../routing/session-key.js";
4
4
  import { resolveTelegramToken } from "./token.js";
5
5
  const debugAccounts = (...args) => {
6
- if (isTruthyEnvValue(process.env.CLAWDBOT_DEBUG_TELEGRAM_ACCOUNTS)) {
6
+ if (isTruthyEnvValue(process.env.OPENCLAW_DEBUG_TELEGRAM_ACCOUNTS)) {
7
7
  console.warn("[telegram:accounts]", ...args);
8
8
  }
9
9
  };
@@ -20,6 +20,10 @@ export async function deliverReplies(params) {
20
20
  const { replies, chatId, runtime, bot, replyToMode, textLimit, messageThreadId, linkPreview, replyQuoteText, } = params;
21
21
  const chunkMode = params.chunkMode ?? "length";
22
22
  let hasReplied = false;
23
+ let hasDelivered = false;
24
+ const markDelivered = () => {
25
+ hasDelivered = true;
26
+ };
23
27
  const chunkText = (markdown) => {
24
28
  const markdownChunks = chunkMode === "newline"
25
29
  ? chunkMarkdownTextWithMode(markdown, textLimit, chunkMode)
@@ -73,6 +77,7 @@ export async function deliverReplies(params) {
73
77
  linkPreview,
74
78
  replyMarkup: shouldAttachButtons ? replyMarkup : undefined,
75
79
  });
80
+ markDelivered();
76
81
  if (replyToId && !hasReplied) {
77
82
  hasReplied = true;
78
83
  }
@@ -121,6 +126,7 @@ export async function deliverReplies(params) {
121
126
  runtime,
122
127
  fn: () => bot.api.sendAnimation(chatId, file, { ...mediaParams }),
123
128
  });
129
+ markDelivered();
124
130
  }
125
131
  else if (kind === "image") {
126
132
  await withTelegramApiErrorLogging({
@@ -128,6 +134,7 @@ export async function deliverReplies(params) {
128
134
  runtime,
129
135
  fn: () => bot.api.sendPhoto(chatId, file, { ...mediaParams }),
130
136
  });
137
+ markDelivered();
131
138
  }
132
139
  else if (kind === "video") {
133
140
  await withTelegramApiErrorLogging({
@@ -135,6 +142,7 @@ export async function deliverReplies(params) {
135
142
  runtime,
136
143
  fn: () => bot.api.sendVideo(chatId, file, { ...mediaParams }),
137
144
  });
145
+ markDelivered();
138
146
  }
139
147
  else if (kind === "audio") {
140
148
  const { useVoice } = resolveTelegramVoiceSend({
@@ -154,6 +162,7 @@ export async function deliverReplies(params) {
154
162
  shouldLog: (err) => !isVoiceMessagesForbidden(err),
155
163
  fn: () => bot.api.sendVoice(chatId, file, { ...mediaParams }),
156
164
  });
165
+ markDelivered();
157
166
  }
158
167
  catch (voiceErr) {
159
168
  // Fall back to text if voice messages are forbidden in this chat.
@@ -179,6 +188,7 @@ export async function deliverReplies(params) {
179
188
  replyMarkup,
180
189
  replyQuoteText,
181
190
  });
191
+ markDelivered();
182
192
  // Skip this media item; continue with next.
183
193
  continue;
184
194
  }
@@ -192,6 +202,7 @@ export async function deliverReplies(params) {
192
202
  runtime,
193
203
  fn: () => bot.api.sendAudio(chatId, file, { ...mediaParams }),
194
204
  });
205
+ markDelivered();
195
206
  }
196
207
  }
197
208
  else {
@@ -200,6 +211,7 @@ export async function deliverReplies(params) {
200
211
  runtime,
201
212
  fn: () => bot.api.sendDocument(chatId, file, { ...mediaParams }),
202
213
  });
214
+ markDelivered();
203
215
  }
204
216
  if (replyToId && !hasReplied) {
205
217
  hasReplied = true;
@@ -219,6 +231,7 @@ export async function deliverReplies(params) {
219
231
  linkPreview,
220
232
  replyMarkup: i === 0 ? replyMarkup : undefined,
221
233
  });
234
+ markDelivered();
222
235
  if (replyToId && !hasReplied) {
223
236
  hasReplied = true;
224
237
  }
@@ -227,6 +240,7 @@ export async function deliverReplies(params) {
227
240
  }
228
241
  }
229
242
  }
243
+ return { delivered: hasDelivered };
230
244
  }
231
245
  export async function resolveMedia(ctx, maxBytes, token, proxyFetch) {
232
246
  const msg = ctx.message;
@@ -257,7 +271,8 @@ export async function resolveMedia(ctx, maxBytes, token, proxyFetch) {
257
271
  fetchImpl,
258
272
  filePathHint: file.file_path,
259
273
  });
260
- const saved = await saveMediaBuffer(fetched.buffer, fetched.contentType, "inbound", maxBytes);
274
+ const originalName = fetched.fileName ?? file.file_path;
275
+ const saved = await saveMediaBuffer(fetched.buffer, fetched.contentType, "inbound", maxBytes, originalName);
261
276
  // Check sticker cache for existing description
262
277
  const cached = sticker.file_unique_id ? getCachedSticker(sticker.file_unique_id) : null;
263
278
  if (cached) {
@@ -305,7 +320,12 @@ export async function resolveMedia(ctx, maxBytes, token, proxyFetch) {
305
320
  return null;
306
321
  }
307
322
  }
308
- const m = msg.photo?.[msg.photo.length - 1] ?? msg.video ?? msg.document ?? msg.audio ?? msg.voice;
323
+ const m = msg.photo?.[msg.photo.length - 1] ??
324
+ msg.video ??
325
+ msg.video_note ??
326
+ msg.document ??
327
+ msg.audio ??
328
+ msg.voice;
309
329
  if (!m?.file_id)
310
330
  return null;
311
331
  const file = await ctx.getFile();
@@ -322,12 +342,15 @@ export async function resolveMedia(ctx, maxBytes, token, proxyFetch) {
322
342
  fetchImpl,
323
343
  filePathHint: file.file_path,
324
344
  });
325
- const saved = await saveMediaBuffer(fetched.buffer, fetched.contentType, "inbound", maxBytes);
345
+ const originalName = fetched.fileName ?? file.file_path;
346
+ const saved = await saveMediaBuffer(fetched.buffer, fetched.contentType, "inbound", maxBytes, originalName);
326
347
  let placeholder = "<media:document>";
327
348
  if (msg.photo)
328
349
  placeholder = "<media:image>";
329
350
  else if (msg.video)
330
351
  placeholder = "<media:video>";
352
+ else if (msg.video_note)
353
+ placeholder = "<media:video>";
331
354
  else if (msg.audio || msg.voice)
332
355
  placeholder = "<media:audio>";
333
356
  return { path: saved.path, contentType: saved.contentType, placeholder };
@@ -1,10 +1,21 @@
1
1
  import { formatLocationText } from "../../channels/location.js";
2
2
  const TELEGRAM_GENERAL_TOPIC_ID = 1;
3
+ /**
4
+ * Resolve the thread ID for Telegram forum topics.
5
+ * For non-forum groups, returns undefined even if messageThreadId is present
6
+ * (reply threads in regular groups should not create separate sessions).
7
+ * For forum groups, returns the topic ID (or General topic ID=1 if unspecified).
8
+ */
3
9
  export function resolveTelegramForumThreadId(params) {
4
- if (params.isForum && params.messageThreadId == null) {
10
+ // Non-forum groups: ignore message_thread_id (reply threads are not real topics)
11
+ if (!params.isForum) {
12
+ return undefined;
13
+ }
14
+ // Forum groups: use the topic ID, defaulting to General topic
15
+ if (params.messageThreadId == null) {
5
16
  return TELEGRAM_GENERAL_TOPIC_ID;
6
17
  }
7
- return params.messageThreadId ?? undefined;
18
+ return params.messageThreadId;
8
19
  }
9
20
  /**
10
21
  * Build thread params for Telegram API calls (messages, media).
@@ -66,7 +66,8 @@ export const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeA
66
66
  },
67
67
  });
68
68
  const baseSessionKey = route.sessionKey;
69
- const dmThreadId = !isGroup ? resolvedThreadId : undefined;
69
+ // DMs: use raw messageThreadId for thread sessions (not resolvedThreadId which is for forums)
70
+ const dmThreadId = !isGroup ? messageThreadId : undefined;
70
71
  const threadKeys = dmThreadId != null
71
72
  ? resolveThreadSessionKeys({ baseSessionKey, threadId: String(dmThreadId) })
72
73
  : null;
@@ -141,14 +142,14 @@ export const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeA
141
142
  await withTelegramApiErrorLogging({
142
143
  operation: "sendMessage",
143
144
  fn: () => bot.api.sendMessage(chatId, [
144
- "Moltbot: access not configured.",
145
+ "OpenClaw: access not configured.",
145
146
  "",
146
147
  `Your Telegram user id: ${telegramUserId}`,
147
148
  "",
148
149
  `Pairing code: ${code}`,
149
150
  "",
150
151
  "Ask the bot owner to approve with:",
151
- formatCliCommand("moltbot pairing approve telegram <code>"),
152
+ formatCliCommand("openclaw pairing approve telegram <code>"),
152
153
  ].join("\n")),
153
154
  });
154
155
  }
@@ -201,6 +202,8 @@ export const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeA
201
202
  placeholder = "<media:image>";
202
203
  else if (msg.video)
203
204
  placeholder = "<media:video>";
205
+ else if (msg.video_note)
206
+ placeholder = "<media:video>";
204
207
  else if (msg.audio || msg.voice)
205
208
  placeholder = "<media:audio>";
206
209
  else if (msg.document)
@@ -438,7 +441,8 @@ export const buildTelegramMessageContext = async ({ primaryCtx, allMedia, storeA
438
441
  Sticker: allMedia[0]?.stickerMetadata,
439
442
  ...(locationData ? toLocationContext(locationData) : undefined),
440
443
  CommandAuthorized: commandAuthorized,
441
- MessageThreadId: resolvedThreadId,
444
+ // For groups: use resolvedThreadId (forum topics only); for DMs: use raw messageThreadId
445
+ MessageThreadId: isGroup ? resolvedThreadId : messageThreadId,
442
446
  IsForum: isForum,
443
447
  // Originating channel for reply routing.
444
448
  OriginatingChannel: "telegram",
@@ -16,6 +16,7 @@ import { resolveTelegramDraftStreamingChunking } from "./draft-chunking.js";
16
16
  import { createTelegramDraftStream } from "./draft-stream.js";
17
17
  import { cacheSticker, describeStickerImage } from "./sticker-cache.js";
18
18
  import { resolveAgentDir } from "../agents/agent-scope.js";
19
+ const EMPTY_RESPONSE_FALLBACK = "No response generated. Please try again.";
19
20
  async function resolveStickerVisionSupport(cfg, agentId) {
20
21
  try {
21
22
  const catalog = await loadModelCatalog({ config: cfg });
@@ -162,6 +163,13 @@ export const dispatchTelegramMessage = async ({ context, bot, cfg, runtime, repl
162
163
  logVerbose(`telegram: cached sticker description for ${sticker.fileUniqueId}`);
163
164
  }
164
165
  }
166
+ const replyQuoteText = ctxPayload.ReplyToIsQuote && ctxPayload.ReplyToBody
167
+ ? ctxPayload.ReplyToBody.trim() || undefined
168
+ : undefined;
169
+ const deliveryState = {
170
+ delivered: false,
171
+ skippedNonSilent: 0,
172
+ };
165
173
  const { queuedFinal } = await dispatchReplyWithBufferedBlockDispatcher({
166
174
  ctx: ctxPayload,
167
175
  cfg,
@@ -173,10 +181,7 @@ export const dispatchTelegramMessage = async ({ context, bot, cfg, runtime, repl
173
181
  await flushDraft();
174
182
  draftStream?.stop();
175
183
  }
176
- const replyQuoteText = ctxPayload.ReplyToIsQuote && ctxPayload.ReplyToBody
177
- ? ctxPayload.ReplyToBody.trim() || undefined
178
- : undefined;
179
- await deliverReplies({
184
+ const result = await deliverReplies({
180
185
  replies: [payload],
181
186
  chatId: String(chatId),
182
187
  token: opts.token,
@@ -191,6 +196,13 @@ export const dispatchTelegramMessage = async ({ context, bot, cfg, runtime, repl
191
196
  linkPreview: telegramCfg.linkPreview,
192
197
  replyQuoteText,
193
198
  });
199
+ if (result.delivered) {
200
+ deliveryState.delivered = true;
201
+ }
202
+ },
203
+ onSkip: (_payload, info) => {
204
+ if (info.reason !== "silent")
205
+ deliveryState.skippedNonSilent += 1;
194
206
  },
195
207
  onError: (err, info) => {
196
208
  runtime.error?.(danger(`telegram ${info.kind} reply failed: ${String(err)}`));
@@ -223,7 +235,26 @@ export const dispatchTelegramMessage = async ({ context, bot, cfg, runtime, repl
223
235
  },
224
236
  });
225
237
  draftStream?.stop();
226
- if (!queuedFinal) {
238
+ let sentFallback = false;
239
+ if (!deliveryState.delivered && deliveryState.skippedNonSilent > 0) {
240
+ const result = await deliverReplies({
241
+ replies: [{ text: EMPTY_RESPONSE_FALLBACK }],
242
+ chatId: String(chatId),
243
+ token: opts.token,
244
+ runtime,
245
+ bot,
246
+ replyToMode,
247
+ textLimit,
248
+ messageThreadId: resolvedThreadId,
249
+ tableMode,
250
+ chunkMode,
251
+ linkPreview: telegramCfg.linkPreview,
252
+ replyQuoteText,
253
+ });
254
+ sentFallback = result.delivered;
255
+ }
256
+ const hasFinalResponse = queuedFinal || sentFallback;
257
+ if (!hasFinalResponse) {
227
258
  if (isGroup && historyKey) {
228
259
  clearHistoryEntriesIfEnabled({ historyMap: groupHistories, historyKey, limit: historyLimit });
229
260
  }
@@ -18,6 +18,7 @@ import { buildInlineKeyboard } from "./send.js";
18
18
  import { buildSenderName, buildTelegramGroupFrom, buildTelegramGroupPeerId, resolveTelegramForumThreadId, } from "./bot/helpers.js";
19
19
  import { firstDefined, isSenderAllowed, normalizeAllowFromWithStore } from "./bot-access.js";
20
20
  import { readTelegramAllowFromStore } from "./pairing-store.js";
21
+ const EMPTY_RESPONSE_FALLBACK = "No response generated. Please try again.";
21
22
  async function resolveTelegramCommandAuth(params) {
22
23
  const { msg, bot, cfg, telegramCfg, allowFrom, groupAllowFrom, useAccessGroups, resolveGroupPolicy, resolveTelegramGroupConfig, requireAuth, } = params;
23
24
  const chatId = msg.chat.id;
@@ -134,7 +135,13 @@ async function resolveTelegramCommandAuth(params) {
134
135
  };
135
136
  }
136
137
  export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, telegramCfg, allowFrom, groupAllowFrom, replyToMode, textLimit, useAccessGroups, nativeEnabled, nativeSkillsEnabled, nativeDisabledExplicit, resolveGroupPolicy, resolveTelegramGroupConfig, shouldSkipUpdate, opts, }) => {
137
- const skillCommands = nativeEnabled && nativeSkillsEnabled ? listSkillCommandsForAgents({ cfg }) : [];
138
+ const boundRoute = nativeEnabled && nativeSkillsEnabled
139
+ ? resolveAgentRoute({ cfg, channel: "telegram", accountId })
140
+ : null;
141
+ const boundAgentIds = boundRoute && boundRoute.matchedBy.startsWith("binding.") ? [boundRoute.agentId] : null;
142
+ const skillCommands = nativeEnabled && nativeSkillsEnabled
143
+ ? listSkillCommandsForAgents(boundAgentIds ? { cfg, agentIds: boundAgentIds } : { cfg })
144
+ : [];
138
145
  const nativeCommands = nativeEnabled
139
146
  ? listNativeCommandSpecsForConfig(cfg, { skillCommands, provider: "telegram" })
140
147
  : [];
@@ -189,7 +196,7 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
189
196
  ...customCommands,
190
197
  ];
191
198
  if (allCommands.length > 0) {
192
- void withTelegramApiErrorLogging({
199
+ withTelegramApiErrorLogging({
193
200
  operation: "setMyCommands",
194
201
  runtime,
195
202
  fn: () => bot.api.setMyCommands(allCommands),
@@ -220,6 +227,8 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
220
227
  if (!auth)
221
228
  return;
222
229
  const { chatId, isGroup, isForum, resolvedThreadId, senderId, senderUsername, groupConfig, topicConfig, commandAuthorized, } = auth;
230
+ const messageThreadId = msg.message_thread_id;
231
+ const threadIdForSend = isGroup ? resolvedThreadId : messageThreadId;
223
232
  const commandDefinition = findCommandByNativeName(command.name, "telegram");
224
233
  const rawText = ctx.match?.trim() ?? "";
225
234
  const commandArgs = commandDefinition
@@ -261,7 +270,7 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
261
270
  runtime,
262
271
  fn: () => bot.api.sendMessage(chatId, title, {
263
272
  ...(replyMarkup ? { reply_markup: replyMarkup } : {}),
264
- ...(resolvedThreadId != null ? { message_thread_id: resolvedThreadId } : {}),
273
+ ...(threadIdForSend != null ? { message_thread_id: threadIdForSend } : {}),
265
274
  }),
266
275
  });
267
276
  return;
@@ -276,7 +285,8 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
276
285
  },
277
286
  });
278
287
  const baseSessionKey = route.sessionKey;
279
- const dmThreadId = !isGroup ? resolvedThreadId : undefined;
288
+ // DMs: use raw messageThreadId for thread sessions (not resolvedThreadId which is for forums)
289
+ const dmThreadId = !isGroup ? messageThreadId : undefined;
280
290
  const threadKeys = dmThreadId != null
281
291
  ? resolveThreadSessionKeys({ baseSessionKey, threadId: String(dmThreadId) })
282
292
  : null;
@@ -318,8 +328,9 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
318
328
  CommandAuthorized: commandAuthorized,
319
329
  CommandSource: "native",
320
330
  SessionKey: `telegram:slash:${senderId || chatId}`,
331
+ AccountId: route.accountId,
321
332
  CommandTargetSessionKey: sessionKey,
322
- MessageThreadId: resolvedThreadId,
333
+ MessageThreadId: threadIdForSend,
323
334
  IsForum: isForum,
324
335
  // Originating context for sub-agent announce routing
325
336
  OriginatingChannel: "telegram",
@@ -329,13 +340,17 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
329
340
  ? !telegramCfg.blockStreaming
330
341
  : undefined;
331
342
  const chunkMode = resolveChunkMode(cfg, "telegram", route.accountId);
343
+ const deliveryState = {
344
+ delivered: false,
345
+ skippedNonSilent: 0,
346
+ };
332
347
  await dispatchReplyWithBufferedBlockDispatcher({
333
348
  ctx: ctxPayload,
334
349
  cfg,
335
350
  dispatcherOptions: {
336
351
  responsePrefix: resolveEffectiveMessagesConfig(cfg, route.agentId).responsePrefix,
337
- deliver: async (payload) => {
338
- await deliverReplies({
352
+ deliver: async (payload, _info) => {
353
+ const result = await deliverReplies({
339
354
  replies: [payload],
340
355
  chatId: String(chatId),
341
356
  token: opts.token,
@@ -343,11 +358,18 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
343
358
  bot,
344
359
  replyToMode,
345
360
  textLimit,
346
- messageThreadId: resolvedThreadId,
361
+ messageThreadId: threadIdForSend,
347
362
  tableMode,
348
363
  chunkMode,
349
364
  linkPreview: telegramCfg.linkPreview,
350
365
  });
366
+ if (result.delivered) {
367
+ deliveryState.delivered = true;
368
+ }
369
+ },
370
+ onSkip: (_payload, info) => {
371
+ if (info.reason !== "silent")
372
+ deliveryState.skippedNonSilent += 1;
351
373
  },
352
374
  onError: (err, info) => {
353
375
  runtime.error?.(danger(`telegram slash ${info.kind} reply failed: ${String(err)}`));
@@ -358,6 +380,21 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
358
380
  disableBlockStreaming,
359
381
  },
360
382
  });
383
+ if (!deliveryState.delivered && deliveryState.skippedNonSilent > 0) {
384
+ await deliverReplies({
385
+ replies: [{ text: EMPTY_RESPONSE_FALLBACK }],
386
+ chatId: String(chatId),
387
+ token: opts.token,
388
+ runtime,
389
+ bot,
390
+ replyToMode,
391
+ textLimit,
392
+ messageThreadId: threadIdForSend,
393
+ tableMode,
394
+ chunkMode,
395
+ linkPreview: telegramCfg.linkPreview,
396
+ });
397
+ }
361
398
  });
362
399
  }
363
400
  for (const pluginCommand of pluginCommands) {
@@ -393,7 +430,9 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
393
430
  });
394
431
  if (!auth)
395
432
  return;
396
- const { resolvedThreadId, senderId, commandAuthorized } = auth;
433
+ const { resolvedThreadId, senderId, commandAuthorized, isGroup } = auth;
434
+ const messageThreadId = msg.message_thread_id;
435
+ const threadIdForSend = isGroup ? resolvedThreadId : messageThreadId;
397
436
  const result = await executePluginCommand({
398
437
  command: match.command,
399
438
  args: match.args,
@@ -417,7 +456,7 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
417
456
  bot,
418
457
  replyToMode,
419
458
  textLimit,
420
- messageThreadId: resolvedThreadId,
459
+ messageThreadId: threadIdForSend,
421
460
  tableMode,
422
461
  chunkMode,
423
462
  linkPreview: telegramCfg.linkPreview,
@@ -427,7 +466,7 @@ export const registerTelegramNativeCommands = ({ bot, cfg, runtime, accountId, t
427
466
  }
428
467
  }
429
468
  else if (nativeDisabledExplicit) {
430
- void withTelegramApiErrorLogging({
469
+ withTelegramApiErrorLogging({
431
470
  operation: "setMyCommands",
432
471
  runtime,
433
472
  fn: () => bot.api.setMyCommands([]),
@@ -45,11 +45,12 @@ export function getTelegramSequentialKey(ctx) {
45
45
  return `telegram:${chatId}:control`;
46
46
  return "telegram:control";
47
47
  }
48
+ const isGroup = msg?.chat?.type === "group" || msg?.chat?.type === "supergroup";
49
+ const messageThreadId = msg?.message_thread_id;
48
50
  const isForum = msg?.chat?.is_forum;
49
- const threadId = resolveTelegramForumThreadId({
50
- isForum,
51
- messageThreadId: msg?.message_thread_id,
52
- });
51
+ const threadId = isGroup
52
+ ? resolveTelegramForumThreadId({ isForum, messageThreadId })
53
+ : messageThreadId;
53
54
  if (typeof chatId === "number") {
54
55
  return threadId != null ? `telegram:${chatId}:topic:${threadId}` : `telegram:${chatId}`;
55
56
  }
@@ -357,7 +358,8 @@ export function createTelegramBot(opts) {
357
358
  peer: { kind: isGroup ? "group" : "dm", id: peerId },
358
359
  });
359
360
  const baseSessionKey = route.sessionKey;
360
- const dmThreadId = !isGroup ? resolvedThreadId : undefined;
361
+ // DMs: use raw messageThreadId for thread sessions (not resolvedThreadId which is for forums)
362
+ const dmThreadId = !isGroup ? messageThreadId : undefined;
361
363
  const threadKeys = dmThreadId != null
362
364
  ? resolveThreadSessionKeys({ baseSessionKey, threadId: String(dmThreadId) })
363
365
  : null;
@@ -26,7 +26,7 @@ export async function downloadTelegramFile(token, info, maxBytes) {
26
26
  filePath: info.file_path,
27
27
  });
28
28
  // save with inbound subdir
29
- const saved = await saveMediaBuffer(array, mime, "inbound", maxBytes);
29
+ const saved = await saveMediaBuffer(array, mime, "inbound", maxBytes, info.file_path);
30
30
  // Ensure extension matches mime if possible
31
31
  if (!saved.contentType && mime)
32
32
  saved.contentType = mime;
@@ -50,6 +50,23 @@ const isGetUpdatesConflict = (err) => {
50
50
  .toLowerCase();
51
51
  return haystack.includes("getupdates");
52
52
  };
53
+ const NETWORK_ERROR_SNIPPETS = [
54
+ "fetch failed",
55
+ "network",
56
+ "timeout",
57
+ "socket",
58
+ "econnreset",
59
+ "econnrefused",
60
+ "undici",
61
+ ];
62
+ const isNetworkRelatedError = (err) => {
63
+ if (!err)
64
+ return false;
65
+ const message = formatErrorMessage(err).toLowerCase();
66
+ if (!message)
67
+ return false;
68
+ return NETWORK_ERROR_SNIPPETS.some((snippet) => message.includes(snippet));
69
+ };
53
70
  export async function monitorTelegramProvider(opts = {}) {
54
71
  const cfg = opts.config ?? loadConfig();
55
72
  const account = resolveTelegramAccount({
@@ -126,7 +143,8 @@ export async function monitorTelegramProvider(opts = {}) {
126
143
  }
127
144
  const isConflict = isGetUpdatesConflict(err);
128
145
  const isRecoverable = isRecoverableTelegramNetworkError(err, { context: "polling" });
129
- if (!isConflict && !isRecoverable) {
146
+ const isNetworkError = isNetworkRelatedError(err);
147
+ if (!isConflict && !isRecoverable && !isNetworkError) {
130
148
  throw err;
131
149
  }
132
150
  restartAttempts += 1;