clawdbot 2026.1.4-1

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 (550) hide show
  1. package/CHANGELOG.md +120 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +297 -0
  5. package/dist/agents/agent-paths.js +17 -0
  6. package/dist/agents/bash-process-registry.js +126 -0
  7. package/dist/agents/bash-tools.js +837 -0
  8. package/dist/agents/clawdbot-tools.js +30 -0
  9. package/dist/agents/clawdis-tools.js +27 -0
  10. package/dist/agents/context.js +34 -0
  11. package/dist/agents/defaults.js +6 -0
  12. package/dist/agents/model-auth.js +112 -0
  13. package/dist/agents/model-catalog.js +55 -0
  14. package/dist/agents/model-fallback.js +191 -0
  15. package/dist/agents/model-scan.js +263 -0
  16. package/dist/agents/model-selection.js +116 -0
  17. package/dist/agents/models-config.js +49 -0
  18. package/dist/agents/pi-embedded-helpers.js +74 -0
  19. package/dist/agents/pi-embedded-runner.js +407 -0
  20. package/dist/agents/pi-embedded-subscribe.js +568 -0
  21. package/dist/agents/pi-embedded-utils.js +20 -0
  22. package/dist/agents/pi-embedded.js +1 -0
  23. package/dist/agents/pi-oauth.js +88 -0
  24. package/dist/agents/pi-tools.js +433 -0
  25. package/dist/agents/sandbox-paths.js +68 -0
  26. package/dist/agents/sandbox.js +644 -0
  27. package/dist/agents/shell-utils.js +53 -0
  28. package/dist/agents/skills-install.js +244 -0
  29. package/dist/agents/skills-status.js +157 -0
  30. package/dist/agents/skills.js +470 -0
  31. package/dist/agents/steerable-agent-loop.js +338 -0
  32. package/dist/agents/steerable-provider-transport.js +48 -0
  33. package/dist/agents/system-prompt.js +104 -0
  34. package/dist/agents/tool-display.js +162 -0
  35. package/dist/agents/tool-images.js +138 -0
  36. package/dist/agents/tools/browser-tool.js +339 -0
  37. package/dist/agents/tools/canvas-tool.js +193 -0
  38. package/dist/agents/tools/common.js +88 -0
  39. package/dist/agents/tools/cron-tool.js +124 -0
  40. package/dist/agents/tools/discord-actions-guild.js +186 -0
  41. package/dist/agents/tools/discord-actions-messaging.js +285 -0
  42. package/dist/agents/tools/discord-actions-moderation.js +70 -0
  43. package/dist/agents/tools/discord-actions.js +56 -0
  44. package/dist/agents/tools/discord-schema.js +199 -0
  45. package/dist/agents/tools/discord-tool.js +16 -0
  46. package/dist/agents/tools/gateway-tool.js +46 -0
  47. package/dist/agents/tools/gateway.js +27 -0
  48. package/dist/agents/tools/image-tool.js +132 -0
  49. package/dist/agents/tools/nodes-tool.js +413 -0
  50. package/dist/agents/tools/nodes-utils.js +92 -0
  51. package/dist/agents/tools/sessions-helpers.js +88 -0
  52. package/dist/agents/tools/sessions-history-tool.js +53 -0
  53. package/dist/agents/tools/sessions-list-tool.js +143 -0
  54. package/dist/agents/tools/sessions-send-helpers.js +100 -0
  55. package/dist/agents/tools/sessions-send-tool.js +347 -0
  56. package/dist/agents/tools/slack-actions.js +129 -0
  57. package/dist/agents/tools/slack-schema.js +59 -0
  58. package/dist/agents/tools/slack-tool.js +16 -0
  59. package/dist/agents/usage.js +39 -0
  60. package/dist/agents/workspace.js +241 -0
  61. package/dist/auto-reply/chunk.js +76 -0
  62. package/dist/auto-reply/envelope.js +38 -0
  63. package/dist/auto-reply/group-activation.js +20 -0
  64. package/dist/auto-reply/heartbeat.js +57 -0
  65. package/dist/auto-reply/model.js +14 -0
  66. package/dist/auto-reply/reply/abort.js +14 -0
  67. package/dist/auto-reply/reply/agent-runner.js +371 -0
  68. package/dist/auto-reply/reply/block-streaming.js +34 -0
  69. package/dist/auto-reply/reply/body.js +29 -0
  70. package/dist/auto-reply/reply/commands.js +207 -0
  71. package/dist/auto-reply/reply/directive-handling.js +361 -0
  72. package/dist/auto-reply/reply/directives.js +47 -0
  73. package/dist/auto-reply/reply/followup-runner.js +149 -0
  74. package/dist/auto-reply/reply/groups.js +91 -0
  75. package/dist/auto-reply/reply/mentions.js +38 -0
  76. package/dist/auto-reply/reply/model-selection.js +114 -0
  77. package/dist/auto-reply/reply/queue.js +399 -0
  78. package/dist/auto-reply/reply/reply-tags.js +26 -0
  79. package/dist/auto-reply/reply/session-updates.js +87 -0
  80. package/dist/auto-reply/reply/session.js +160 -0
  81. package/dist/auto-reply/reply/typing.js +75 -0
  82. package/dist/auto-reply/reply.js +535 -0
  83. package/dist/auto-reply/send-policy.js +28 -0
  84. package/dist/auto-reply/status.js +158 -0
  85. package/dist/auto-reply/templating.js +9 -0
  86. package/dist/auto-reply/thinking.js +49 -0
  87. package/dist/auto-reply/tokens.js +2 -0
  88. package/dist/auto-reply/tool-meta.js +74 -0
  89. package/dist/auto-reply/transcription.js +57 -0
  90. package/dist/auto-reply/types.js +1 -0
  91. package/dist/browser/bridge-server.js +37 -0
  92. package/dist/browser/cdp.js +382 -0
  93. package/dist/browser/chrome.js +432 -0
  94. package/dist/browser/client-actions-core.js +67 -0
  95. package/dist/browser/client-actions-observe.js +24 -0
  96. package/dist/browser/client-actions-types.js +1 -0
  97. package/dist/browser/client-actions.js +3 -0
  98. package/dist/browser/client-fetch.js +43 -0
  99. package/dist/browser/client.js +105 -0
  100. package/dist/browser/config.js +140 -0
  101. package/dist/browser/constants.js +4 -0
  102. package/dist/browser/profiles-service.js +122 -0
  103. package/dist/browser/profiles.js +85 -0
  104. package/dist/browser/pw-ai.js +2 -0
  105. package/dist/browser/pw-session.js +144 -0
  106. package/dist/browser/pw-tools-core.js +363 -0
  107. package/dist/browser/routes/agent.js +535 -0
  108. package/dist/browser/routes/basic.js +155 -0
  109. package/dist/browser/routes/index.js +8 -0
  110. package/dist/browser/routes/tabs.js +105 -0
  111. package/dist/browser/routes/utils.js +62 -0
  112. package/dist/browser/screenshot.js +40 -0
  113. package/dist/browser/server-context.js +377 -0
  114. package/dist/browser/server.js +81 -0
  115. package/dist/browser/target-id.js +18 -0
  116. package/dist/browser/trash.js +21 -0
  117. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  118. package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
  119. package/dist/canvas-host/a2ui/index.html +246 -0
  120. package/dist/canvas-host/a2ui.js +187 -0
  121. package/dist/canvas-host/server.js +382 -0
  122. package/dist/cli/browser-cli-actions-input.js +459 -0
  123. package/dist/cli/browser-cli-actions-observe.js +56 -0
  124. package/dist/cli/browser-cli-examples.js +31 -0
  125. package/dist/cli/browser-cli-inspect.js +97 -0
  126. package/dist/cli/browser-cli-manage.js +286 -0
  127. package/dist/cli/browser-cli-shared.js +1 -0
  128. package/dist/cli/browser-cli.js +26 -0
  129. package/dist/cli/canvas-cli.js +416 -0
  130. package/dist/cli/cron-cli.js +454 -0
  131. package/dist/cli/deps.js +17 -0
  132. package/dist/cli/dns-cli.js +180 -0
  133. package/dist/cli/gateway-cli.js +489 -0
  134. package/dist/cli/gateway-rpc.js +20 -0
  135. package/dist/cli/hooks-cli.js +135 -0
  136. package/dist/cli/models-cli.js +248 -0
  137. package/dist/cli/nodes-camera.js +57 -0
  138. package/dist/cli/nodes-canvas.js +26 -0
  139. package/dist/cli/nodes-cli.js +946 -0
  140. package/dist/cli/nodes-screen.js +37 -0
  141. package/dist/cli/parse-duration.js +20 -0
  142. package/dist/cli/ports.js +97 -0
  143. package/dist/cli/program.js +406 -0
  144. package/dist/cli/prompt.js +19 -0
  145. package/dist/cli/tui-cli.js +35 -0
  146. package/dist/cli/wait.js +8 -0
  147. package/dist/commands/agent.js +645 -0
  148. package/dist/commands/antigravity-oauth.js +327 -0
  149. package/dist/commands/configure.js +480 -0
  150. package/dist/commands/doctor.js +484 -0
  151. package/dist/commands/health.js +108 -0
  152. package/dist/commands/models/aliases.js +64 -0
  153. package/dist/commands/models/fallbacks.js +99 -0
  154. package/dist/commands/models/image-fallbacks.js +99 -0
  155. package/dist/commands/models/list.js +323 -0
  156. package/dist/commands/models/scan.js +266 -0
  157. package/dist/commands/models/set-image.js +23 -0
  158. package/dist/commands/models/set.js +23 -0
  159. package/dist/commands/models/shared.js +72 -0
  160. package/dist/commands/models.js +7 -0
  161. package/dist/commands/onboard-auth.js +70 -0
  162. package/dist/commands/onboard-helpers.js +295 -0
  163. package/dist/commands/onboard-interactive.js +17 -0
  164. package/dist/commands/onboard-non-interactive.js +202 -0
  165. package/dist/commands/onboard-providers.js +634 -0
  166. package/dist/commands/onboard-remote.js +120 -0
  167. package/dist/commands/onboard-skills.js +148 -0
  168. package/dist/commands/onboard-types.js +1 -0
  169. package/dist/commands/onboard.js +12 -0
  170. package/dist/commands/send.js +124 -0
  171. package/dist/commands/sessions.js +212 -0
  172. package/dist/commands/setup.js +58 -0
  173. package/dist/commands/signal-install.js +135 -0
  174. package/dist/commands/status.js +207 -0
  175. package/dist/commands/update.js +16 -0
  176. package/dist/config/config.js +6 -0
  177. package/dist/config/defaults.js +61 -0
  178. package/dist/config/io.js +147 -0
  179. package/dist/config/legacy-migrate.js +13 -0
  180. package/dist/config/legacy.js +159 -0
  181. package/dist/config/paths.js +71 -0
  182. package/dist/config/schema.js +150 -0
  183. package/dist/config/sessions.js +282 -0
  184. package/dist/config/talk.js +31 -0
  185. package/dist/config/types.js +1 -0
  186. package/dist/config/validation.js +29 -0
  187. package/dist/config/zod-schema.js +831 -0
  188. package/dist/control-ui/assets/index-BFID3yAA.css +1 -0
  189. package/dist/control-ui/assets/index-CE_axlTS.js +2235 -0
  190. package/dist/control-ui/assets/index-CE_axlTS.js.map +1 -0
  191. package/dist/control-ui/index.html +15 -0
  192. package/dist/cron/isolated-agent.js +499 -0
  193. package/dist/cron/run-log.js +72 -0
  194. package/dist/cron/schedule.js +24 -0
  195. package/dist/cron/service.js +471 -0
  196. package/dist/cron/store.js +43 -0
  197. package/dist/cron/types.js +1 -0
  198. package/dist/daemon/constants.js +10 -0
  199. package/dist/daemon/launchd.js +276 -0
  200. package/dist/daemon/legacy.js +63 -0
  201. package/dist/daemon/program-args.js +76 -0
  202. package/dist/daemon/schtasks.js +257 -0
  203. package/dist/daemon/service.js +60 -0
  204. package/dist/daemon/systemd.js +266 -0
  205. package/dist/discord/index.js +2 -0
  206. package/dist/discord/monitor.js +1188 -0
  207. package/dist/discord/probe.js +54 -0
  208. package/dist/discord/send.js +577 -0
  209. package/dist/discord/token.js +8 -0
  210. package/dist/gateway/auth.js +121 -0
  211. package/dist/gateway/call.js +94 -0
  212. package/dist/gateway/chat-attachments.js +41 -0
  213. package/dist/gateway/client.js +180 -0
  214. package/dist/gateway/config-reload.js +274 -0
  215. package/dist/gateway/control-ui.js +184 -0
  216. package/dist/gateway/hooks-mapping.js +282 -0
  217. package/dist/gateway/hooks.js +168 -0
  218. package/dist/gateway/net.js +29 -0
  219. package/dist/gateway/protocol/index.js +61 -0
  220. package/dist/gateway/protocol/schema.js +560 -0
  221. package/dist/gateway/server-bridge-subscriptions.js +93 -0
  222. package/dist/gateway/server-bridge.js +1013 -0
  223. package/dist/gateway/server-browser.js +12 -0
  224. package/dist/gateway/server-chat.js +159 -0
  225. package/dist/gateway/server-constants.js +8 -0
  226. package/dist/gateway/server-discovery.js +62 -0
  227. package/dist/gateway/server-http.js +165 -0
  228. package/dist/gateway/server-methods/agent-job.js +125 -0
  229. package/dist/gateway/server-methods/agent.js +250 -0
  230. package/dist/gateway/server-methods/chat.js +200 -0
  231. package/dist/gateway/server-methods/config.js +50 -0
  232. package/dist/gateway/server-methods/connect.js +6 -0
  233. package/dist/gateway/server-methods/cron.js +83 -0
  234. package/dist/gateway/server-methods/health.js +28 -0
  235. package/dist/gateway/server-methods/models.js +16 -0
  236. package/dist/gateway/server-methods/nodes.js +294 -0
  237. package/dist/gateway/server-methods/providers.js +217 -0
  238. package/dist/gateway/server-methods/send.js +166 -0
  239. package/dist/gateway/server-methods/sessions.js +305 -0
  240. package/dist/gateway/server-methods/skills.js +83 -0
  241. package/dist/gateway/server-methods/system.js +118 -0
  242. package/dist/gateway/server-methods/talk.js +22 -0
  243. package/dist/gateway/server-methods/types.js +1 -0
  244. package/dist/gateway/server-methods/voicewake.js +30 -0
  245. package/dist/gateway/server-methods/web.js +58 -0
  246. package/dist/gateway/server-methods/wizard.js +100 -0
  247. package/dist/gateway/server-methods.js +53 -0
  248. package/dist/gateway/server-providers.js +644 -0
  249. package/dist/gateway/server-shared.js +1 -0
  250. package/dist/gateway/server-utils.js +35 -0
  251. package/dist/gateway/server.js +1437 -0
  252. package/dist/gateway/session-utils.js +216 -0
  253. package/dist/gateway/ws-log.js +349 -0
  254. package/dist/gateway/ws-logging.js +8 -0
  255. package/dist/globals.js +41 -0
  256. package/dist/hooks/gmail-ops.js +236 -0
  257. package/dist/hooks/gmail-setup-utils.js +278 -0
  258. package/dist/hooks/gmail-watcher.js +175 -0
  259. package/dist/hooks/gmail.js +177 -0
  260. package/dist/imessage/client.js +165 -0
  261. package/dist/imessage/index.js +3 -0
  262. package/dist/imessage/monitor.js +272 -0
  263. package/dist/imessage/probe.js +26 -0
  264. package/dist/imessage/send.js +83 -0
  265. package/dist/imessage/targets.js +176 -0
  266. package/dist/index.js +50 -0
  267. package/dist/infra/agent-events.js +46 -0
  268. package/dist/infra/binaries.js +9 -0
  269. package/dist/infra/bonjour-discovery.js +163 -0
  270. package/dist/infra/bonjour.js +200 -0
  271. package/dist/infra/bridge/server.js +562 -0
  272. package/dist/infra/canvas-host-url.js +54 -0
  273. package/dist/infra/env.js +8 -0
  274. package/dist/infra/errors.js +28 -0
  275. package/dist/infra/gateway-lock.js +8 -0
  276. package/dist/infra/heartbeat-events.js +21 -0
  277. package/dist/infra/heartbeat-runner.js +453 -0
  278. package/dist/infra/heartbeat-wake.js +61 -0
  279. package/dist/infra/is-main.js +37 -0
  280. package/dist/infra/machine-name.js +40 -0
  281. package/dist/infra/node-pairing.js +211 -0
  282. package/dist/infra/pam.js +42 -0
  283. package/dist/infra/path-env.js +92 -0
  284. package/dist/infra/ports.js +87 -0
  285. package/dist/infra/provider-summary.js +80 -0
  286. package/dist/infra/restart.js +29 -0
  287. package/dist/infra/retry.js +16 -0
  288. package/dist/infra/runtime-guard.js +59 -0
  289. package/dist/infra/system-events.js +44 -0
  290. package/dist/infra/system-presence.js +216 -0
  291. package/dist/infra/tailnet.js +46 -0
  292. package/dist/infra/tailscale.js +149 -0
  293. package/dist/infra/voicewake.js +77 -0
  294. package/dist/infra/widearea-dns.js +123 -0
  295. package/dist/infra/ws.js +13 -0
  296. package/dist/logger.js +52 -0
  297. package/dist/logging.js +490 -0
  298. package/dist/macos/gateway-daemon.js +141 -0
  299. package/dist/macos/relay.js +46 -0
  300. package/dist/media/constants.js +33 -0
  301. package/dist/media/host.js +42 -0
  302. package/dist/media/image-ops.js +121 -0
  303. package/dist/media/mime.js +115 -0
  304. package/dist/media/parse.js +81 -0
  305. package/dist/media/server.js +64 -0
  306. package/dist/media/store.js +139 -0
  307. package/dist/process/command-queue.js +97 -0
  308. package/dist/process/exec.js +75 -0
  309. package/dist/protocol.schema.json +2918 -0
  310. package/dist/provider-web.js +8 -0
  311. package/dist/providers/web/index.js +2 -0
  312. package/dist/runtime.js +8 -0
  313. package/dist/sessions/send-policy.js +68 -0
  314. package/dist/signal/client.js +134 -0
  315. package/dist/signal/daemon.js +69 -0
  316. package/dist/signal/index.js +3 -0
  317. package/dist/signal/monitor.js +336 -0
  318. package/dist/signal/probe.js +46 -0
  319. package/dist/signal/send.js +91 -0
  320. package/dist/slack/actions.js +97 -0
  321. package/dist/slack/index.js +5 -0
  322. package/dist/slack/monitor.js +1029 -0
  323. package/dist/slack/probe.js +47 -0
  324. package/dist/slack/send.js +131 -0
  325. package/dist/slack/token.js +10 -0
  326. package/dist/telegram/bot.js +394 -0
  327. package/dist/telegram/download.js +34 -0
  328. package/dist/telegram/index.js +4 -0
  329. package/dist/telegram/monitor.js +47 -0
  330. package/dist/telegram/probe.js +63 -0
  331. package/dist/telegram/proxy.js +9 -0
  332. package/dist/telegram/send.js +138 -0
  333. package/dist/telegram/token.js +30 -0
  334. package/dist/telegram/webhook-set.js +12 -0
  335. package/dist/telegram/webhook.js +56 -0
  336. package/dist/tui/commands.js +74 -0
  337. package/dist/tui/components/assistant-message.js +16 -0
  338. package/dist/tui/components/chat-log.js +92 -0
  339. package/dist/tui/components/custom-editor.js +53 -0
  340. package/dist/tui/components/selectors.js +8 -0
  341. package/dist/tui/components/tool-execution.js +111 -0
  342. package/dist/tui/components/user-message.js +17 -0
  343. package/dist/tui/gateway-chat.js +140 -0
  344. package/dist/tui/layout.js +41 -0
  345. package/dist/tui/message-list.js +57 -0
  346. package/dist/tui/theme/theme.js +80 -0
  347. package/dist/tui/theme.js +25 -0
  348. package/dist/tui/tui.js +708 -0
  349. package/dist/utils.js +133 -0
  350. package/dist/version.js +18 -0
  351. package/dist/web/active-listener.js +7 -0
  352. package/dist/web/auto-reply.js +1203 -0
  353. package/dist/web/inbound.js +481 -0
  354. package/dist/web/login-qr.js +204 -0
  355. package/dist/web/login.js +59 -0
  356. package/dist/web/media.js +148 -0
  357. package/dist/web/outbound.js +67 -0
  358. package/dist/web/qr-image.js +97 -0
  359. package/dist/web/reconnect.js +60 -0
  360. package/dist/web/reply-heartbeat-wake.js +61 -0
  361. package/dist/web/session.js +346 -0
  362. package/dist/wizard/clack-prompter.js +56 -0
  363. package/dist/wizard/onboarding.js +452 -0
  364. package/dist/wizard/prompts.js +6 -0
  365. package/dist/wizard/session.js +203 -0
  366. package/docs/AGENTS.default.md +116 -0
  367. package/docs/CNAME +1 -0
  368. package/docs/RELEASING.md +64 -0
  369. package/docs/_config.yml +51 -0
  370. package/docs/_layouts/default.html +145 -0
  371. package/docs/agent-send.md +21 -0
  372. package/docs/agent.md +104 -0
  373. package/docs/android/connect.md +131 -0
  374. package/docs/architecture.md +89 -0
  375. package/docs/assets/markdown.css +130 -0
  376. package/docs/assets/pixel-lobster.svg +60 -0
  377. package/docs/assets/terminal.css +497 -0
  378. package/docs/assets/theme.js +55 -0
  379. package/docs/audio.md +50 -0
  380. package/docs/background-process.md +74 -0
  381. package/docs/bash.md +32 -0
  382. package/docs/bonjour.md +159 -0
  383. package/docs/browser.md +289 -0
  384. package/docs/camera.md +152 -0
  385. package/docs/clawd.md +199 -0
  386. package/docs/clawdbot-mac.md +104 -0
  387. package/docs/configuration.md +1177 -0
  388. package/docs/control-api.md +49 -0
  389. package/docs/control-ui.md +83 -0
  390. package/docs/cron.md +374 -0
  391. package/docs/dashboard.md +17 -0
  392. package/docs/device-models.md +46 -0
  393. package/docs/discord.md +293 -0
  394. package/docs/discovery.md +112 -0
  395. package/docs/docker.md +251 -0
  396. package/docs/docs.json +86 -0
  397. package/docs/doctor.md +47 -0
  398. package/docs/elevated.md +31 -0
  399. package/docs/faq.md +640 -0
  400. package/docs/gateway/pairing.md +109 -0
  401. package/docs/gateway-lock.md +28 -0
  402. package/docs/gateway.md +174 -0
  403. package/docs/gmail-pubsub.md +191 -0
  404. package/docs/grammy.md +27 -0
  405. package/docs/group-messages.md +71 -0
  406. package/docs/groups.md +78 -0
  407. package/docs/health.md +28 -0
  408. package/docs/heartbeat.md +64 -0
  409. package/docs/images.md +52 -0
  410. package/docs/imessage.md +63 -0
  411. package/docs/index.md +182 -0
  412. package/docs/ios/connect.md +177 -0
  413. package/docs/ios/spec.md +236 -0
  414. package/docs/location-command.md +95 -0
  415. package/docs/logging.md +99 -0
  416. package/docs/lore.md +131 -0
  417. package/docs/mac/bun.md +133 -0
  418. package/docs/mac/canvas.md +161 -0
  419. package/docs/mac/child-process.md +72 -0
  420. package/docs/mac/dev-setup.md +81 -0
  421. package/docs/mac/health.md +28 -0
  422. package/docs/mac/icon.md +26 -0
  423. package/docs/mac/logging.md +51 -0
  424. package/docs/mac/menu-bar.md +69 -0
  425. package/docs/mac/peekaboo.md +170 -0
  426. package/docs/mac/permissions.md +40 -0
  427. package/docs/mac/release.md +76 -0
  428. package/docs/mac/remote.md +57 -0
  429. package/docs/mac/signing.md +41 -0
  430. package/docs/mac/skills.md +27 -0
  431. package/docs/mac/voice-overlay.md +52 -0
  432. package/docs/mac/voicewake.md +56 -0
  433. package/docs/mac/webchat.md +27 -0
  434. package/docs/mac/xpc.md +40 -0
  435. package/docs/models.md +90 -0
  436. package/docs/nix.md +49 -0
  437. package/docs/nodes.md +157 -0
  438. package/docs/onboarding-config-protocol.md +29 -0
  439. package/docs/onboarding.md +185 -0
  440. package/docs/presence.md +133 -0
  441. package/docs/queue.md +78 -0
  442. package/docs/refactor/browser-control-simplification.md +58 -0
  443. package/docs/refactor/canvas-a2ui.md +93 -0
  444. package/docs/refactor/cli-unification.md +64 -0
  445. package/docs/refactor/gateway-client.md +31 -0
  446. package/docs/refactor/gateway.md +99 -0
  447. package/docs/refactor/new-arch.md +171 -0
  448. package/docs/refactor/tui.md +26 -0
  449. package/docs/refactor/web-gateway-troubleshooting.md +37 -0
  450. package/docs/refactor/webagent-session.md +46 -0
  451. package/docs/remote-gateway-readme.md +148 -0
  452. package/docs/remote.md +66 -0
  453. package/docs/research/memory.md +227 -0
  454. package/docs/rpc.md +35 -0
  455. package/docs/security.md +168 -0
  456. package/docs/session-tool.md +119 -0
  457. package/docs/session.md +84 -0
  458. package/docs/sessions.md +8 -0
  459. package/docs/setup.md +118 -0
  460. package/docs/signal.md +113 -0
  461. package/docs/skills-config.md +58 -0
  462. package/docs/skills.md +149 -0
  463. package/docs/slack.md +158 -0
  464. package/docs/surface.md +20 -0
  465. package/docs/tailscale.md +71 -0
  466. package/docs/talk.md +79 -0
  467. package/docs/telegram.md +90 -0
  468. package/docs/templates/AGENTS.md +126 -0
  469. package/docs/templates/BOOTSTRAP.md +53 -0
  470. package/docs/templates/IDENTITY.md +17 -0
  471. package/docs/templates/SOUL.md +41 -0
  472. package/docs/templates/TOOLS.md +41 -0
  473. package/docs/templates/USER.md +22 -0
  474. package/docs/test.md +35 -0
  475. package/docs/thinking.md +46 -0
  476. package/docs/tools.md +248 -0
  477. package/docs/troubleshooting.md +227 -0
  478. package/docs/tui.md +69 -0
  479. package/docs/typebox.md +42 -0
  480. package/docs/voicewake.md +61 -0
  481. package/docs/web.md +115 -0
  482. package/docs/webchat.md +34 -0
  483. package/docs/webhook.md +132 -0
  484. package/docs/whatsapp-clawd.jpg +0 -0
  485. package/docs/whatsapp.md +142 -0
  486. package/docs/wizard.md +158 -0
  487. package/package.json +186 -0
  488. package/skills/apple-notes/SKILL.md +50 -0
  489. package/skills/apple-reminders/SKILL.md +67 -0
  490. package/skills/bear-notes/SKILL.md +79 -0
  491. package/skills/bird/SKILL.md +25 -0
  492. package/skills/blogwatcher/SKILL.md +46 -0
  493. package/skills/blucli/SKILL.md +27 -0
  494. package/skills/brave-search/SKILL.md +30 -0
  495. package/skills/brave-search/scripts/content.mjs +53 -0
  496. package/skills/brave-search/scripts/search.mjs +79 -0
  497. package/skills/camsnap/SKILL.md +25 -0
  498. package/skills/clawdhub/SKILL.md +53 -0
  499. package/skills/coding-agent/SKILL.md +275 -0
  500. package/skills/discord/SKILL.md +369 -0
  501. package/skills/eightctl/SKILL.md +29 -0
  502. package/skills/food-order/SKILL.md +41 -0
  503. package/skills/gemini/SKILL.md +23 -0
  504. package/skills/gifgrep/SKILL.md +47 -0
  505. package/skills/github/SKILL.md +47 -0
  506. package/skills/gog/SKILL.md +36 -0
  507. package/skills/goplaces/SKILL.md +30 -0
  508. package/skills/imsg/SKILL.md +25 -0
  509. package/skills/local-places/SERVER_README.md +101 -0
  510. package/skills/local-places/SKILL.md +91 -0
  511. package/skills/local-places/pyproject.toml +27 -0
  512. package/skills/local-places/src/local_places/__init__.py +2 -0
  513. package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  514. package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  515. package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  516. package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  517. package/skills/local-places/src/local_places/google_places.py +314 -0
  518. package/skills/local-places/src/local_places/main.py +65 -0
  519. package/skills/local-places/src/local_places/schemas.py +107 -0
  520. package/skills/mcporter/SKILL.md +38 -0
  521. package/skills/nano-banana-pro/SKILL.md +29 -0
  522. package/skills/nano-banana-pro/scripts/generate_image.py +167 -0
  523. package/skills/nano-pdf/SKILL.md +20 -0
  524. package/skills/notion/SKILL.md +156 -0
  525. package/skills/obsidian/SKILL.md +55 -0
  526. package/skills/openai-image-gen/SKILL.md +31 -0
  527. package/skills/openai-image-gen/scripts/gen.py +173 -0
  528. package/skills/openai-whisper/SKILL.md +19 -0
  529. package/skills/openai-whisper-api/SKILL.md +43 -0
  530. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  531. package/skills/openhue/SKILL.md +30 -0
  532. package/skills/oracle/SKILL.md +105 -0
  533. package/skills/ordercli/SKILL.md +47 -0
  534. package/skills/peekaboo/SKILL.md +153 -0
  535. package/skills/qmd/SKILL.md +26 -0
  536. package/skills/sag/SKILL.md +62 -0
  537. package/skills/slack/SKILL.md +143 -0
  538. package/skills/songsee/SKILL.md +29 -0
  539. package/skills/sonoscli/SKILL.md +26 -0
  540. package/skills/spotify-player/SKILL.md +34 -0
  541. package/skills/summarize/SKILL.md +49 -0
  542. package/skills/things-mac/SKILL.md +61 -0
  543. package/skills/tmux/SKILL.md +121 -0
  544. package/skills/tmux/scripts/find-sessions.sh +112 -0
  545. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  546. package/skills/trello/SKILL.md +84 -0
  547. package/skills/video-frames/SKILL.md +29 -0
  548. package/skills/video-frames/scripts/frame.sh +81 -0
  549. package/skills/wacli/SKILL.md +42 -0
  550. package/skills/weather/SKILL.md +49 -0
@@ -0,0 +1,346 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import fsSync from "node:fs";
3
+ import fs from "node:fs/promises";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { DisconnectReason, fetchLatestBaileysVersion, makeCacheableSignalKeyStore, makeWASocket, useMultiFileAuthState, } from "@whiskeysockets/baileys";
7
+ import qrcode from "qrcode-terminal";
8
+ import { resolveDefaultSessionStorePath } from "../config/sessions.js";
9
+ import { danger, info, success } from "../globals.js";
10
+ import { getChildLogger, toPinoLikeLogger } from "../logging.js";
11
+ import { defaultRuntime } from "../runtime.js";
12
+ import { CONFIG_DIR, ensureDir, jidToE164 } from "../utils.js";
13
+ import { VERSION } from "../version.js";
14
+ export function resolveWebAuthDir() {
15
+ return path.join(os.homedir(), ".clawdbot", "credentials");
16
+ }
17
+ function resolveWebCredsPath() {
18
+ return path.join(resolveWebAuthDir(), "creds.json");
19
+ }
20
+ function resolveWebCredsBackupPath() {
21
+ return path.join(resolveWebAuthDir(), "creds.json.bak");
22
+ }
23
+ export const WA_WEB_AUTH_DIR = path.join(CONFIG_DIR, "credentials");
24
+ let credsSaveQueue = Promise.resolve();
25
+ function enqueueSaveCreds(saveCreds, logger) {
26
+ credsSaveQueue = credsSaveQueue
27
+ .then(() => safeSaveCreds(saveCreds, logger))
28
+ .catch((err) => {
29
+ logger.warn({ error: String(err) }, "WhatsApp creds save queue error");
30
+ });
31
+ }
32
+ function readCredsJsonRaw(filePath) {
33
+ try {
34
+ if (!fsSync.existsSync(filePath))
35
+ return null;
36
+ const stats = fsSync.statSync(filePath);
37
+ if (!stats.isFile() || stats.size <= 1)
38
+ return null;
39
+ return fsSync.readFileSync(filePath, "utf-8");
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ function maybeRestoreCredsFromBackup(logger) {
46
+ try {
47
+ const credsPath = resolveWebCredsPath();
48
+ const backupPath = resolveWebCredsBackupPath();
49
+ const raw = readCredsJsonRaw(credsPath);
50
+ if (raw) {
51
+ // Validate that creds.json is parseable.
52
+ JSON.parse(raw);
53
+ return;
54
+ }
55
+ const backupRaw = readCredsJsonRaw(backupPath);
56
+ if (!backupRaw)
57
+ return;
58
+ // Ensure backup is parseable before restoring.
59
+ JSON.parse(backupRaw);
60
+ fsSync.copyFileSync(backupPath, credsPath);
61
+ logger.warn({ credsPath }, "restored corrupted WhatsApp creds.json from backup");
62
+ }
63
+ catch {
64
+ // ignore
65
+ }
66
+ }
67
+ async function safeSaveCreds(saveCreds, logger) {
68
+ try {
69
+ // Best-effort backup so we can recover after abrupt restarts.
70
+ // Important: don't clobber a good backup with a corrupted/truncated creds.json.
71
+ const credsPath = resolveWebCredsPath();
72
+ const backupPath = resolveWebCredsBackupPath();
73
+ const raw = readCredsJsonRaw(credsPath);
74
+ if (raw) {
75
+ try {
76
+ JSON.parse(raw);
77
+ fsSync.copyFileSync(credsPath, backupPath);
78
+ }
79
+ catch {
80
+ // keep existing backup
81
+ }
82
+ }
83
+ }
84
+ catch {
85
+ // ignore backup failures
86
+ }
87
+ try {
88
+ await Promise.resolve(saveCreds());
89
+ }
90
+ catch (err) {
91
+ logger.warn({ error: String(err) }, "failed saving WhatsApp creds");
92
+ }
93
+ }
94
+ /**
95
+ * Create a Baileys socket backed by the multi-file auth store we keep on disk.
96
+ * Consumers can opt into QR printing for interactive login flows.
97
+ */
98
+ export async function createWaSocket(printQr, verbose, opts = {}) {
99
+ const baseLogger = getChildLogger({ module: "baileys" }, {
100
+ level: verbose ? "info" : "silent",
101
+ });
102
+ const logger = toPinoLikeLogger(baseLogger, verbose ? "info" : "silent");
103
+ const authDir = resolveWebAuthDir();
104
+ await ensureDir(authDir);
105
+ const sessionLogger = getChildLogger({ module: "web-session" });
106
+ maybeRestoreCredsFromBackup(sessionLogger);
107
+ const { state, saveCreds } = await useMultiFileAuthState(authDir);
108
+ const { version } = await fetchLatestBaileysVersion();
109
+ const sock = makeWASocket({
110
+ auth: {
111
+ creds: state.creds,
112
+ keys: makeCacheableSignalKeyStore(state.keys, logger),
113
+ },
114
+ version,
115
+ logger,
116
+ printQRInTerminal: false,
117
+ browser: ["clawdbot", "cli", VERSION],
118
+ syncFullHistory: false,
119
+ markOnlineOnConnect: false,
120
+ });
121
+ sock.ev.on("creds.update", () => enqueueSaveCreds(saveCreds, sessionLogger));
122
+ sock.ev.on("connection.update", (update) => {
123
+ try {
124
+ const { connection, lastDisconnect, qr } = update;
125
+ if (qr) {
126
+ opts.onQr?.(qr);
127
+ if (printQr) {
128
+ console.log("Scan this QR in WhatsApp (Linked Devices):");
129
+ qrcode.generate(qr, { small: true });
130
+ }
131
+ }
132
+ if (connection === "close") {
133
+ const status = getStatusCode(lastDisconnect?.error);
134
+ if (status === DisconnectReason.loggedOut) {
135
+ console.error(danger("WhatsApp session logged out. Run: clawdbot login"));
136
+ }
137
+ }
138
+ if (connection === "open" && verbose) {
139
+ console.log(success("WhatsApp Web connected."));
140
+ }
141
+ }
142
+ catch (err) {
143
+ sessionLogger.error({ error: String(err) }, "connection.update handler error");
144
+ }
145
+ });
146
+ // Handle WebSocket-level errors to prevent unhandled exceptions from crashing the process
147
+ if (sock.ws &&
148
+ typeof sock.ws.on === "function") {
149
+ sock.ws.on("error", (err) => {
150
+ sessionLogger.error({ error: String(err) }, "WebSocket error");
151
+ });
152
+ }
153
+ return sock;
154
+ }
155
+ export async function waitForWaConnection(sock) {
156
+ return new Promise((resolve, reject) => {
157
+ const evWithOff = sock.ev;
158
+ const handler = (...args) => {
159
+ const update = (args[0] ?? {});
160
+ if (update.connection === "open") {
161
+ evWithOff.off?.("connection.update", handler);
162
+ resolve();
163
+ }
164
+ if (update.connection === "close") {
165
+ evWithOff.off?.("connection.update", handler);
166
+ reject(update.lastDisconnect ?? new Error("Connection closed"));
167
+ }
168
+ };
169
+ sock.ev.on("connection.update", handler);
170
+ });
171
+ }
172
+ export function getStatusCode(err) {
173
+ return (err?.output?.statusCode ??
174
+ err?.status);
175
+ }
176
+ function safeStringify(value, limit = 800) {
177
+ try {
178
+ const seen = new WeakSet();
179
+ const raw = JSON.stringify(value, (_key, v) => {
180
+ if (typeof v === "bigint")
181
+ return v.toString();
182
+ if (typeof v === "function") {
183
+ const maybeName = v.name;
184
+ const name = typeof maybeName === "string" && maybeName.length > 0
185
+ ? maybeName
186
+ : "anonymous";
187
+ return `[Function ${name}]`;
188
+ }
189
+ if (typeof v === "object" && v) {
190
+ if (seen.has(v))
191
+ return "[Circular]";
192
+ seen.add(v);
193
+ }
194
+ return v;
195
+ }, 2);
196
+ if (!raw)
197
+ return String(value);
198
+ return raw.length > limit ? `${raw.slice(0, limit)}…` : raw;
199
+ }
200
+ catch {
201
+ return String(value);
202
+ }
203
+ }
204
+ function extractBoomDetails(err) {
205
+ if (!err || typeof err !== "object")
206
+ return null;
207
+ const output = err?.output;
208
+ if (!output || typeof output !== "object")
209
+ return null;
210
+ const payload = output.payload;
211
+ const statusCode = typeof output.statusCode === "number"
212
+ ? output.statusCode
213
+ : typeof payload?.statusCode === "number"
214
+ ? payload.statusCode
215
+ : undefined;
216
+ const error = typeof payload?.error === "string" ? payload.error : undefined;
217
+ const message = typeof payload?.message === "string" ? payload.message : undefined;
218
+ if (!statusCode && !error && !message)
219
+ return null;
220
+ return { statusCode, error, message };
221
+ }
222
+ export function formatError(err) {
223
+ if (err instanceof Error)
224
+ return err.message;
225
+ if (typeof err === "string")
226
+ return err;
227
+ if (!err || typeof err !== "object")
228
+ return String(err);
229
+ // Baileys frequently wraps errors under `error` with a Boom-like shape.
230
+ const boom = extractBoomDetails(err) ??
231
+ extractBoomDetails(err?.error) ??
232
+ extractBoomDetails(err?.lastDisconnect?.error);
233
+ const status = boom?.statusCode ?? getStatusCode(err);
234
+ const code = err?.code;
235
+ const codeText = typeof code === "string" || typeof code === "number"
236
+ ? String(code)
237
+ : undefined;
238
+ const messageCandidates = [
239
+ boom?.message,
240
+ typeof err?.message === "string"
241
+ ? err.message
242
+ : undefined,
243
+ typeof err?.error?.message ===
244
+ "string"
245
+ ? err.error?.message
246
+ : undefined,
247
+ ].filter((v) => Boolean(v && v.trim().length > 0));
248
+ const message = messageCandidates[0];
249
+ const pieces = [];
250
+ if (typeof status === "number")
251
+ pieces.push(`status=${status}`);
252
+ if (boom?.error)
253
+ pieces.push(boom.error);
254
+ if (message)
255
+ pieces.push(message);
256
+ if (codeText)
257
+ pieces.push(`code=${codeText}`);
258
+ if (pieces.length > 0)
259
+ return pieces.join(" ");
260
+ return safeStringify(err);
261
+ }
262
+ export async function webAuthExists() {
263
+ const sessionLogger = getChildLogger({ module: "web-session" });
264
+ maybeRestoreCredsFromBackup(sessionLogger);
265
+ const authDir = resolveWebAuthDir();
266
+ const credsPath = resolveWebCredsPath();
267
+ try {
268
+ await fs.access(authDir);
269
+ }
270
+ catch {
271
+ return false;
272
+ }
273
+ try {
274
+ const stats = await fs.stat(credsPath);
275
+ if (!stats.isFile() || stats.size <= 1)
276
+ return false;
277
+ const raw = await fs.readFile(credsPath, "utf-8");
278
+ JSON.parse(raw);
279
+ return true;
280
+ }
281
+ catch {
282
+ return false;
283
+ }
284
+ }
285
+ export async function logoutWeb(runtime = defaultRuntime) {
286
+ const exists = await webAuthExists();
287
+ if (!exists) {
288
+ runtime.log(info("No WhatsApp Web session found; nothing to delete."));
289
+ return false;
290
+ }
291
+ await fs.rm(resolveWebAuthDir(), { recursive: true, force: true });
292
+ // Also drop session store to clear lingering per-sender state after logout.
293
+ await fs.rm(resolveDefaultSessionStorePath(), { force: true });
294
+ runtime.log(success("Cleared WhatsApp Web credentials."));
295
+ return true;
296
+ }
297
+ export function readWebSelfId() {
298
+ // Read the cached WhatsApp Web identity (jid + E.164) from disk if present.
299
+ try {
300
+ const credsPath = resolveWebCredsPath();
301
+ if (!fsSync.existsSync(credsPath)) {
302
+ return { e164: null, jid: null };
303
+ }
304
+ const raw = fsSync.readFileSync(credsPath, "utf-8");
305
+ const parsed = JSON.parse(raw);
306
+ const jid = parsed?.me?.id ?? null;
307
+ const e164 = jid ? jidToE164(jid) : null;
308
+ return { e164, jid };
309
+ }
310
+ catch {
311
+ return { e164: null, jid: null };
312
+ }
313
+ }
314
+ /**
315
+ * Return the age (in milliseconds) of the cached WhatsApp web auth state, or null when missing.
316
+ * Helpful for heartbeats/observability to spot stale credentials.
317
+ */
318
+ export function getWebAuthAgeMs() {
319
+ try {
320
+ const stats = fsSync.statSync(resolveWebCredsPath());
321
+ return Date.now() - stats.mtimeMs;
322
+ }
323
+ catch {
324
+ return null;
325
+ }
326
+ }
327
+ export function newConnectionId() {
328
+ return randomUUID();
329
+ }
330
+ export function logWebSelfId(runtime = defaultRuntime, includeProviderPrefix = false) {
331
+ // Human-friendly log of the currently linked personal web session.
332
+ const { e164, jid } = readWebSelfId();
333
+ const details = e164 || jid
334
+ ? `${e164 ?? "unknown"}${jid ? ` (jid ${jid})` : ""}`
335
+ : "unknown";
336
+ const prefix = includeProviderPrefix ? "Web Provider: " : "";
337
+ runtime.log(info(`${prefix}${details}`));
338
+ }
339
+ export async function pickProvider(pref) {
340
+ const choice = pref === "auto" ? "web" : pref;
341
+ const hasWeb = await webAuthExists();
342
+ if (!hasWeb) {
343
+ throw new Error("No WhatsApp Web session found. Run `clawdbot login --verbose` to link.");
344
+ }
345
+ return choice;
346
+ }
@@ -0,0 +1,56 @@
1
+ import { cancel, confirm, intro, isCancel, multiselect, note, outro, select, spinner, text, } from "@clack/prompts";
2
+ import { WizardCancelledError } from "./prompts.js";
3
+ function guardCancel(value) {
4
+ if (isCancel(value)) {
5
+ cancel("Setup cancelled.");
6
+ throw new WizardCancelledError();
7
+ }
8
+ return value;
9
+ }
10
+ export function createClackPrompter() {
11
+ return {
12
+ intro: async (title) => {
13
+ intro(title);
14
+ },
15
+ outro: async (message) => {
16
+ outro(message);
17
+ },
18
+ note: async (message, title) => {
19
+ note(message, title);
20
+ },
21
+ select: async (params) => guardCancel(await select({
22
+ message: params.message,
23
+ options: params.options.map((opt) => {
24
+ const base = { value: opt.value, label: opt.label };
25
+ return opt.hint === undefined ? base : { ...base, hint: opt.hint };
26
+ }),
27
+ initialValue: params.initialValue,
28
+ })),
29
+ multiselect: async (params) => guardCancel(await multiselect({
30
+ message: params.message,
31
+ options: params.options.map((opt) => {
32
+ const base = { value: opt.value, label: opt.label };
33
+ return opt.hint === undefined ? base : { ...base, hint: opt.hint };
34
+ }),
35
+ initialValues: params.initialValues,
36
+ })),
37
+ text: async (params) => guardCancel(await text({
38
+ message: params.message,
39
+ initialValue: params.initialValue,
40
+ placeholder: params.placeholder,
41
+ validate: params.validate,
42
+ })),
43
+ confirm: async (params) => guardCancel(await confirm({
44
+ message: params.message,
45
+ initialValue: params.initialValue,
46
+ })),
47
+ progress: (label) => {
48
+ const spin = spinner();
49
+ spin.start(label);
50
+ return {
51
+ update: (message) => spin.message(message),
52
+ stop: (message) => spin.stop(message),
53
+ };
54
+ },
55
+ };
56
+ }