clawdbot 2026.1.4

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 (503) hide show
  1. package/CHANGELOG.md +115 -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/cron/isolated-agent.js +499 -0
  189. package/dist/cron/run-log.js +72 -0
  190. package/dist/cron/schedule.js +24 -0
  191. package/dist/cron/service.js +471 -0
  192. package/dist/cron/store.js +43 -0
  193. package/dist/cron/types.js +1 -0
  194. package/dist/discord/index.js +2 -0
  195. package/dist/discord/monitor.js +1188 -0
  196. package/dist/discord/probe.js +54 -0
  197. package/dist/discord/send.js +577 -0
  198. package/dist/discord/token.js +8 -0
  199. package/dist/gateway/auth.js +121 -0
  200. package/dist/gateway/call.js +94 -0
  201. package/dist/gateway/chat-attachments.js +41 -0
  202. package/dist/gateway/client.js +180 -0
  203. package/dist/gateway/config-reload.js +274 -0
  204. package/dist/gateway/control-ui.js +184 -0
  205. package/dist/gateway/hooks-mapping.js +282 -0
  206. package/dist/gateway/hooks.js +168 -0
  207. package/dist/gateway/net.js +29 -0
  208. package/dist/gateway/protocol/index.js +61 -0
  209. package/dist/gateway/protocol/schema.js +560 -0
  210. package/dist/gateway/server-bridge-subscriptions.js +93 -0
  211. package/dist/gateway/server-bridge.js +1013 -0
  212. package/dist/gateway/server-browser.js +12 -0
  213. package/dist/gateway/server-chat.js +159 -0
  214. package/dist/gateway/server-constants.js +8 -0
  215. package/dist/gateway/server-discovery.js +62 -0
  216. package/dist/gateway/server-http.js +165 -0
  217. package/dist/gateway/server-methods/agent-job.js +125 -0
  218. package/dist/gateway/server-methods/agent.js +250 -0
  219. package/dist/gateway/server-methods/chat.js +200 -0
  220. package/dist/gateway/server-methods/config.js +50 -0
  221. package/dist/gateway/server-methods/connect.js +6 -0
  222. package/dist/gateway/server-methods/cron.js +83 -0
  223. package/dist/gateway/server-methods/health.js +28 -0
  224. package/dist/gateway/server-methods/models.js +16 -0
  225. package/dist/gateway/server-methods/nodes.js +294 -0
  226. package/dist/gateway/server-methods/providers.js +217 -0
  227. package/dist/gateway/server-methods/send.js +166 -0
  228. package/dist/gateway/server-methods/sessions.js +305 -0
  229. package/dist/gateway/server-methods/skills.js +83 -0
  230. package/dist/gateway/server-methods/system.js +118 -0
  231. package/dist/gateway/server-methods/talk.js +22 -0
  232. package/dist/gateway/server-methods/types.js +1 -0
  233. package/dist/gateway/server-methods/voicewake.js +30 -0
  234. package/dist/gateway/server-methods/web.js +58 -0
  235. package/dist/gateway/server-methods/wizard.js +100 -0
  236. package/dist/gateway/server-methods.js +53 -0
  237. package/dist/gateway/server-providers.js +644 -0
  238. package/dist/gateway/server-shared.js +1 -0
  239. package/dist/gateway/server-utils.js +35 -0
  240. package/dist/gateway/server.js +1437 -0
  241. package/dist/gateway/session-utils.js +216 -0
  242. package/dist/gateway/ws-log.js +349 -0
  243. package/dist/gateway/ws-logging.js +8 -0
  244. package/dist/globals.js +41 -0
  245. package/dist/hooks/gmail-ops.js +236 -0
  246. package/dist/hooks/gmail-setup-utils.js +278 -0
  247. package/dist/hooks/gmail-watcher.js +175 -0
  248. package/dist/hooks/gmail.js +177 -0
  249. package/dist/index.js +50 -0
  250. package/dist/infra/agent-events.js +46 -0
  251. package/dist/infra/binaries.js +9 -0
  252. package/dist/infra/bonjour-discovery.js +163 -0
  253. package/dist/infra/bonjour.js +200 -0
  254. package/dist/infra/bridge/server.js +562 -0
  255. package/dist/infra/canvas-host-url.js +54 -0
  256. package/dist/infra/env.js +8 -0
  257. package/dist/infra/errors.js +28 -0
  258. package/dist/infra/gateway-lock.js +8 -0
  259. package/dist/infra/heartbeat-events.js +21 -0
  260. package/dist/infra/heartbeat-runner.js +453 -0
  261. package/dist/infra/heartbeat-wake.js +61 -0
  262. package/dist/infra/is-main.js +37 -0
  263. package/dist/infra/machine-name.js +40 -0
  264. package/dist/infra/node-pairing.js +211 -0
  265. package/dist/infra/pam.js +42 -0
  266. package/dist/infra/path-env.js +92 -0
  267. package/dist/infra/ports.js +87 -0
  268. package/dist/infra/provider-summary.js +80 -0
  269. package/dist/infra/restart.js +29 -0
  270. package/dist/infra/retry.js +16 -0
  271. package/dist/infra/runtime-guard.js +59 -0
  272. package/dist/infra/system-events.js +44 -0
  273. package/dist/infra/system-presence.js +216 -0
  274. package/dist/infra/tailnet.js +46 -0
  275. package/dist/infra/tailscale.js +149 -0
  276. package/dist/infra/voicewake.js +77 -0
  277. package/dist/infra/widearea-dns.js +123 -0
  278. package/dist/infra/ws.js +13 -0
  279. package/dist/logger.js +52 -0
  280. package/dist/logging.js +490 -0
  281. package/dist/macos/gateway-daemon.js +141 -0
  282. package/dist/macos/relay.js +46 -0
  283. package/dist/media/constants.js +33 -0
  284. package/dist/media/host.js +42 -0
  285. package/dist/media/image-ops.js +121 -0
  286. package/dist/media/mime.js +115 -0
  287. package/dist/media/parse.js +81 -0
  288. package/dist/media/server.js +64 -0
  289. package/dist/media/store.js +139 -0
  290. package/dist/process/command-queue.js +97 -0
  291. package/dist/process/exec.js +75 -0
  292. package/dist/protocol.schema.json +2918 -0
  293. package/dist/provider-web.js +8 -0
  294. package/dist/providers/web/index.js +2 -0
  295. package/dist/runtime.js +8 -0
  296. package/dist/telegram/bot.js +394 -0
  297. package/dist/telegram/download.js +34 -0
  298. package/dist/telegram/index.js +4 -0
  299. package/dist/telegram/monitor.js +47 -0
  300. package/dist/telegram/probe.js +63 -0
  301. package/dist/telegram/proxy.js +9 -0
  302. package/dist/telegram/send.js +138 -0
  303. package/dist/telegram/token.js +30 -0
  304. package/dist/telegram/webhook-set.js +12 -0
  305. package/dist/telegram/webhook.js +56 -0
  306. package/dist/utils.js +133 -0
  307. package/dist/version.js +18 -0
  308. package/dist/web/active-listener.js +7 -0
  309. package/dist/web/auto-reply.js +1203 -0
  310. package/dist/web/inbound.js +481 -0
  311. package/dist/web/login-qr.js +204 -0
  312. package/dist/web/login.js +59 -0
  313. package/dist/web/media.js +148 -0
  314. package/dist/web/outbound.js +67 -0
  315. package/dist/web/qr-image.js +97 -0
  316. package/dist/web/reconnect.js +60 -0
  317. package/dist/web/reply-heartbeat-wake.js +61 -0
  318. package/dist/web/session.js +346 -0
  319. package/docs/AGENTS.default.md +116 -0
  320. package/docs/CNAME +1 -0
  321. package/docs/RELEASING.md +64 -0
  322. package/docs/_config.yml +51 -0
  323. package/docs/_layouts/default.html +145 -0
  324. package/docs/agent-send.md +21 -0
  325. package/docs/agent.md +104 -0
  326. package/docs/android/connect.md +131 -0
  327. package/docs/architecture.md +89 -0
  328. package/docs/assets/markdown.css +130 -0
  329. package/docs/assets/pixel-lobster.svg +60 -0
  330. package/docs/assets/terminal.css +497 -0
  331. package/docs/assets/theme.js +55 -0
  332. package/docs/audio.md +50 -0
  333. package/docs/background-process.md +74 -0
  334. package/docs/bash.md +32 -0
  335. package/docs/bonjour.md +159 -0
  336. package/docs/browser.md +289 -0
  337. package/docs/camera.md +152 -0
  338. package/docs/clawd.md +199 -0
  339. package/docs/clawdbot-mac.md +104 -0
  340. package/docs/configuration.md +1177 -0
  341. package/docs/control-api.md +49 -0
  342. package/docs/control-ui.md +83 -0
  343. package/docs/cron.md +374 -0
  344. package/docs/dashboard.md +17 -0
  345. package/docs/device-models.md +46 -0
  346. package/docs/discord.md +293 -0
  347. package/docs/discovery.md +112 -0
  348. package/docs/docker.md +251 -0
  349. package/docs/docs.json +86 -0
  350. package/docs/doctor.md +47 -0
  351. package/docs/elevated.md +31 -0
  352. package/docs/faq.md +640 -0
  353. package/docs/gateway/pairing.md +109 -0
  354. package/docs/gateway-lock.md +28 -0
  355. package/docs/gateway.md +174 -0
  356. package/docs/gmail-pubsub.md +191 -0
  357. package/docs/grammy.md +27 -0
  358. package/docs/group-messages.md +71 -0
  359. package/docs/groups.md +78 -0
  360. package/docs/health.md +28 -0
  361. package/docs/heartbeat.md +64 -0
  362. package/docs/images.md +52 -0
  363. package/docs/imessage.md +63 -0
  364. package/docs/index.md +182 -0
  365. package/docs/ios/connect.md +177 -0
  366. package/docs/ios/spec.md +236 -0
  367. package/docs/location-command.md +95 -0
  368. package/docs/logging.md +99 -0
  369. package/docs/lore.md +131 -0
  370. package/docs/mac/bun.md +133 -0
  371. package/docs/mac/canvas.md +161 -0
  372. package/docs/mac/child-process.md +72 -0
  373. package/docs/mac/dev-setup.md +81 -0
  374. package/docs/mac/health.md +28 -0
  375. package/docs/mac/icon.md +26 -0
  376. package/docs/mac/logging.md +51 -0
  377. package/docs/mac/menu-bar.md +69 -0
  378. package/docs/mac/peekaboo.md +170 -0
  379. package/docs/mac/permissions.md +40 -0
  380. package/docs/mac/release.md +76 -0
  381. package/docs/mac/remote.md +57 -0
  382. package/docs/mac/signing.md +41 -0
  383. package/docs/mac/skills.md +27 -0
  384. package/docs/mac/voice-overlay.md +52 -0
  385. package/docs/mac/voicewake.md +56 -0
  386. package/docs/mac/webchat.md +27 -0
  387. package/docs/mac/xpc.md +40 -0
  388. package/docs/models.md +90 -0
  389. package/docs/nix.md +49 -0
  390. package/docs/nodes.md +157 -0
  391. package/docs/onboarding-config-protocol.md +29 -0
  392. package/docs/onboarding.md +185 -0
  393. package/docs/presence.md +133 -0
  394. package/docs/queue.md +78 -0
  395. package/docs/refactor/browser-control-simplification.md +58 -0
  396. package/docs/refactor/canvas-a2ui.md +93 -0
  397. package/docs/refactor/cli-unification.md +64 -0
  398. package/docs/refactor/gateway-client.md +31 -0
  399. package/docs/refactor/gateway.md +99 -0
  400. package/docs/refactor/new-arch.md +171 -0
  401. package/docs/refactor/tui.md +26 -0
  402. package/docs/refactor/web-gateway-troubleshooting.md +37 -0
  403. package/docs/refactor/webagent-session.md +46 -0
  404. package/docs/remote-gateway-readme.md +148 -0
  405. package/docs/remote.md +66 -0
  406. package/docs/research/memory.md +227 -0
  407. package/docs/rpc.md +35 -0
  408. package/docs/security.md +168 -0
  409. package/docs/session-tool.md +119 -0
  410. package/docs/session.md +84 -0
  411. package/docs/sessions.md +8 -0
  412. package/docs/setup.md +118 -0
  413. package/docs/signal.md +113 -0
  414. package/docs/skills-config.md +58 -0
  415. package/docs/skills.md +149 -0
  416. package/docs/slack.md +158 -0
  417. package/docs/surface.md +20 -0
  418. package/docs/tailscale.md +71 -0
  419. package/docs/talk.md +79 -0
  420. package/docs/telegram.md +90 -0
  421. package/docs/templates/AGENTS.md +126 -0
  422. package/docs/templates/BOOTSTRAP.md +53 -0
  423. package/docs/templates/IDENTITY.md +17 -0
  424. package/docs/templates/SOUL.md +41 -0
  425. package/docs/templates/TOOLS.md +41 -0
  426. package/docs/templates/USER.md +22 -0
  427. package/docs/test.md +35 -0
  428. package/docs/thinking.md +46 -0
  429. package/docs/tools.md +248 -0
  430. package/docs/troubleshooting.md +227 -0
  431. package/docs/tui.md +69 -0
  432. package/docs/typebox.md +42 -0
  433. package/docs/voicewake.md +61 -0
  434. package/docs/web.md +115 -0
  435. package/docs/webchat.md +34 -0
  436. package/docs/webhook.md +132 -0
  437. package/docs/whatsapp-clawd.jpg +0 -0
  438. package/docs/whatsapp.md +142 -0
  439. package/docs/wizard.md +158 -0
  440. package/package.json +178 -0
  441. package/skills/apple-notes/SKILL.md +50 -0
  442. package/skills/apple-reminders/SKILL.md +67 -0
  443. package/skills/bear-notes/SKILL.md +79 -0
  444. package/skills/bird/SKILL.md +25 -0
  445. package/skills/blogwatcher/SKILL.md +46 -0
  446. package/skills/blucli/SKILL.md +27 -0
  447. package/skills/brave-search/SKILL.md +30 -0
  448. package/skills/brave-search/scripts/content.mjs +53 -0
  449. package/skills/brave-search/scripts/search.mjs +79 -0
  450. package/skills/camsnap/SKILL.md +25 -0
  451. package/skills/clawdhub/SKILL.md +53 -0
  452. package/skills/coding-agent/SKILL.md +275 -0
  453. package/skills/discord/SKILL.md +369 -0
  454. package/skills/eightctl/SKILL.md +29 -0
  455. package/skills/food-order/SKILL.md +41 -0
  456. package/skills/gemini/SKILL.md +23 -0
  457. package/skills/gifgrep/SKILL.md +47 -0
  458. package/skills/github/SKILL.md +47 -0
  459. package/skills/gog/SKILL.md +36 -0
  460. package/skills/goplaces/SKILL.md +30 -0
  461. package/skills/imsg/SKILL.md +25 -0
  462. package/skills/local-places/SERVER_README.md +101 -0
  463. package/skills/local-places/SKILL.md +91 -0
  464. package/skills/local-places/pyproject.toml +27 -0
  465. package/skills/local-places/src/local_places/__init__.py +2 -0
  466. package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  467. package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  468. package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  469. package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  470. package/skills/local-places/src/local_places/google_places.py +314 -0
  471. package/skills/local-places/src/local_places/main.py +65 -0
  472. package/skills/local-places/src/local_places/schemas.py +107 -0
  473. package/skills/mcporter/SKILL.md +38 -0
  474. package/skills/nano-banana-pro/SKILL.md +29 -0
  475. package/skills/nano-banana-pro/scripts/generate_image.py +167 -0
  476. package/skills/nano-pdf/SKILL.md +20 -0
  477. package/skills/notion/SKILL.md +156 -0
  478. package/skills/obsidian/SKILL.md +55 -0
  479. package/skills/openai-image-gen/SKILL.md +31 -0
  480. package/skills/openai-image-gen/scripts/gen.py +173 -0
  481. package/skills/openai-whisper/SKILL.md +19 -0
  482. package/skills/openai-whisper-api/SKILL.md +43 -0
  483. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  484. package/skills/openhue/SKILL.md +30 -0
  485. package/skills/oracle/SKILL.md +105 -0
  486. package/skills/ordercli/SKILL.md +47 -0
  487. package/skills/peekaboo/SKILL.md +153 -0
  488. package/skills/qmd/SKILL.md +26 -0
  489. package/skills/sag/SKILL.md +62 -0
  490. package/skills/slack/SKILL.md +143 -0
  491. package/skills/songsee/SKILL.md +29 -0
  492. package/skills/sonoscli/SKILL.md +26 -0
  493. package/skills/spotify-player/SKILL.md +34 -0
  494. package/skills/summarize/SKILL.md +49 -0
  495. package/skills/things-mac/SKILL.md +61 -0
  496. package/skills/tmux/SKILL.md +121 -0
  497. package/skills/tmux/scripts/find-sessions.sh +112 -0
  498. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  499. package/skills/trello/SKILL.md +84 -0
  500. package/skills/video-frames/SKILL.md +29 -0
  501. package/skills/video-frames/scripts/frame.sh +81 -0
  502. package/skills/wacli/SKILL.md +42 -0
  503. package/skills/weather/SKILL.md +49 -0
@@ -0,0 +1,480 @@
1
+ import path from "node:path";
2
+ import { confirm, intro, multiselect, note, outro, select, spinner, text, } from "@clack/prompts";
3
+ import { loginAnthropic } from "@mariozechner/pi-ai";
4
+ import { CONFIG_PATH_CLAWDBOT, readConfigFileSnapshot, resolveGatewayPort, writeConfigFile, } from "../config/config.js";
5
+ import { GATEWAY_LAUNCH_AGENT_LABEL } from "../daemon/constants.js";
6
+ import { resolveGatewayProgramArguments } from "../daemon/program-args.js";
7
+ import { resolveGatewayService } from "../daemon/service.js";
8
+ import { defaultRuntime } from "../runtime.js";
9
+ import { resolveUserPath, sleep } from "../utils.js";
10
+ import { createClackPrompter } from "../wizard/clack-prompter.js";
11
+ import { isRemoteEnvironment, loginAntigravityVpsAware, } from "./antigravity-oauth.js";
12
+ import { healthCommand } from "./health.js";
13
+ import { applyMinimaxConfig, setAnthropicApiKey, writeOAuthCredentials, } from "./onboard-auth.js";
14
+ import { applyWizardMetadata, DEFAULT_WORKSPACE, detectBrowserOpenSupport, ensureWorkspaceAndSessions, formatControlUiSshHint, guardCancel, openUrl, printWizardHeader, probeGatewayReachable, randomToken, resolveControlUiLinks, summarizeExistingConfig, } from "./onboard-helpers.js";
15
+ import { setupProviders } from "./onboard-providers.js";
16
+ import { promptRemoteGatewayConfig } from "./onboard-remote.js";
17
+ import { setupSkills } from "./onboard-skills.js";
18
+ async function promptGatewayConfig(cfg, runtime) {
19
+ const portRaw = guardCancel(await text({
20
+ message: "Gateway port",
21
+ initialValue: String(resolveGatewayPort(cfg)),
22
+ validate: (value) => Number.isFinite(Number(value)) ? undefined : "Invalid port",
23
+ }), runtime);
24
+ const port = Number.parseInt(String(portRaw), 10);
25
+ let bind = guardCancel(await select({
26
+ message: "Gateway bind",
27
+ options: [
28
+ { value: "loopback", label: "Loopback (127.0.0.1)" },
29
+ { value: "lan", label: "LAN" },
30
+ { value: "tailnet", label: "Tailnet" },
31
+ { value: "auto", label: "Auto" },
32
+ ],
33
+ }), runtime);
34
+ let authMode = guardCancel(await select({
35
+ message: "Gateway auth",
36
+ options: [
37
+ { value: "off", label: "Off (loopback only)" },
38
+ { value: "token", label: "Token" },
39
+ { value: "password", label: "Password" },
40
+ ],
41
+ }), runtime);
42
+ const tailscaleMode = guardCancel(await select({
43
+ message: "Tailscale exposure",
44
+ options: [
45
+ { value: "off", label: "Off", hint: "No Tailscale exposure" },
46
+ {
47
+ value: "serve",
48
+ label: "Serve",
49
+ hint: "Private HTTPS for your tailnet (devices on Tailscale)",
50
+ },
51
+ {
52
+ value: "funnel",
53
+ label: "Funnel",
54
+ hint: "Public HTTPS via Tailscale Funnel (internet)",
55
+ },
56
+ ],
57
+ }), runtime);
58
+ let tailscaleResetOnExit = false;
59
+ if (tailscaleMode !== "off") {
60
+ tailscaleResetOnExit = Boolean(guardCancel(await confirm({
61
+ message: "Reset Tailscale serve/funnel on exit?",
62
+ initialValue: false,
63
+ }), runtime));
64
+ }
65
+ if (tailscaleMode !== "off" && bind !== "loopback") {
66
+ note("Tailscale requires bind=loopback. Adjusting bind to loopback.", "Note");
67
+ bind = "loopback";
68
+ }
69
+ if (authMode === "off" && bind !== "loopback") {
70
+ note("Non-loopback bind requires auth. Switching to token auth.", "Note");
71
+ authMode = "token";
72
+ }
73
+ if (tailscaleMode === "funnel" && authMode !== "password") {
74
+ note("Tailscale funnel requires password auth.", "Note");
75
+ authMode = "password";
76
+ }
77
+ let gatewayToken;
78
+ let next = cfg;
79
+ if (authMode === "token") {
80
+ const tokenInput = guardCancel(await text({
81
+ message: "Gateway token (blank to generate)",
82
+ initialValue: randomToken(),
83
+ }), runtime);
84
+ gatewayToken = String(tokenInput).trim() || randomToken();
85
+ next = {
86
+ ...next,
87
+ gateway: {
88
+ ...next.gateway,
89
+ auth: { ...next.gateway?.auth, mode: "token", token: gatewayToken },
90
+ },
91
+ };
92
+ }
93
+ if (authMode === "password") {
94
+ const password = guardCancel(await text({
95
+ message: "Gateway password",
96
+ validate: (value) => (value?.trim() ? undefined : "Required"),
97
+ }), runtime);
98
+ next = {
99
+ ...next,
100
+ gateway: {
101
+ ...next.gateway,
102
+ auth: {
103
+ ...next.gateway?.auth,
104
+ mode: "password",
105
+ password: String(password).trim(),
106
+ },
107
+ },
108
+ };
109
+ }
110
+ next = {
111
+ ...next,
112
+ gateway: {
113
+ ...next.gateway,
114
+ mode: "local",
115
+ port,
116
+ bind,
117
+ tailscale: {
118
+ ...next.gateway?.tailscale,
119
+ mode: tailscaleMode,
120
+ resetOnExit: tailscaleResetOnExit,
121
+ },
122
+ },
123
+ };
124
+ return { config: next, port, token: gatewayToken };
125
+ }
126
+ async function promptAuthConfig(cfg, runtime) {
127
+ const authChoice = guardCancel(await select({
128
+ message: "Model/auth choice",
129
+ options: [
130
+ { value: "oauth", label: "Anthropic OAuth (Claude Pro/Max)" },
131
+ {
132
+ value: "antigravity",
133
+ label: "Google Antigravity (Claude Opus 4.5, Gemini 3, etc.)",
134
+ },
135
+ { value: "apiKey", label: "Anthropic API key" },
136
+ { value: "minimax", label: "Minimax M2.1 (LM Studio)" },
137
+ { value: "skip", label: "Skip for now" },
138
+ ],
139
+ }), runtime);
140
+ let next = cfg;
141
+ if (authChoice === "oauth") {
142
+ note("Browser will open. Paste the code shown after login (code#state).", "Anthropic OAuth");
143
+ const spin = spinner();
144
+ spin.start("Waiting for authorization…");
145
+ let oauthCreds = null;
146
+ try {
147
+ oauthCreds = await loginAnthropic(async (url) => {
148
+ await openUrl(url);
149
+ runtime.log(`Open: ${url}`);
150
+ }, async () => {
151
+ const code = guardCancel(await text({
152
+ message: "Paste authorization code (code#state)",
153
+ validate: (value) => (value?.trim() ? undefined : "Required"),
154
+ }), runtime);
155
+ return String(code);
156
+ });
157
+ spin.stop("OAuth complete");
158
+ if (oauthCreds) {
159
+ await writeOAuthCredentials("anthropic", oauthCreds);
160
+ }
161
+ }
162
+ catch (err) {
163
+ spin.stop("OAuth failed");
164
+ runtime.error(String(err));
165
+ }
166
+ }
167
+ else if (authChoice === "antigravity") {
168
+ const isRemote = isRemoteEnvironment();
169
+ note(isRemote
170
+ ? [
171
+ "You are running in a remote/VPS environment.",
172
+ "A URL will be shown for you to open in your LOCAL browser.",
173
+ "After signing in, copy the redirect URL and paste it back here.",
174
+ ].join("\n")
175
+ : [
176
+ "Browser will open for Google authentication.",
177
+ "Sign in with your Google account that has Antigravity access.",
178
+ "The callback will be captured automatically on localhost:51121.",
179
+ ].join("\n"), "Google Antigravity OAuth");
180
+ const spin = spinner();
181
+ spin.start("Starting OAuth flow…");
182
+ let oauthCreds = null;
183
+ try {
184
+ oauthCreds = await loginAntigravityVpsAware(async (url) => {
185
+ if (isRemote) {
186
+ spin.stop("OAuth URL ready");
187
+ runtime.log(`\nOpen this URL in your LOCAL browser:\n\n${url}\n`);
188
+ }
189
+ else {
190
+ spin.message("Complete sign-in in browser…");
191
+ await openUrl(url);
192
+ runtime.log(`Open: ${url}`);
193
+ }
194
+ }, (msg) => spin.message(msg));
195
+ spin.stop("Antigravity OAuth complete");
196
+ if (oauthCreds) {
197
+ await writeOAuthCredentials("google-antigravity", oauthCreds);
198
+ // Set default model to Claude Opus 4.5 via Antigravity
199
+ next = {
200
+ ...next,
201
+ agent: {
202
+ ...next.agent,
203
+ model: "google-antigravity/claude-opus-4-5-thinking",
204
+ },
205
+ };
206
+ note("Default model set to google-antigravity/claude-opus-4-5-thinking", "Model configured");
207
+ }
208
+ }
209
+ catch (err) {
210
+ spin.stop("Antigravity OAuth failed");
211
+ runtime.error(String(err));
212
+ }
213
+ }
214
+ else if (authChoice === "apiKey") {
215
+ const key = guardCancel(await text({
216
+ message: "Enter Anthropic API key",
217
+ validate: (value) => (value?.trim() ? undefined : "Required"),
218
+ }), runtime);
219
+ await setAnthropicApiKey(String(key).trim());
220
+ }
221
+ else if (authChoice === "minimax") {
222
+ next = applyMinimaxConfig(next);
223
+ }
224
+ const modelInput = guardCancel(await text({
225
+ message: "Default model (blank to keep)",
226
+ initialValue: next.agent?.model ?? "",
227
+ }), runtime);
228
+ const model = String(modelInput ?? "").trim();
229
+ if (model) {
230
+ next = {
231
+ ...next,
232
+ agent: {
233
+ ...next.agent,
234
+ model,
235
+ },
236
+ };
237
+ }
238
+ return next;
239
+ }
240
+ async function maybeInstallDaemon(params) {
241
+ const service = resolveGatewayService();
242
+ const loaded = await service.isLoaded({ env: process.env });
243
+ if (loaded) {
244
+ const action = guardCancel(await select({
245
+ message: "Gateway service already installed",
246
+ options: [
247
+ { value: "restart", label: "Restart" },
248
+ { value: "reinstall", label: "Reinstall" },
249
+ { value: "skip", label: "Skip" },
250
+ ],
251
+ }), params.runtime);
252
+ if (action === "restart") {
253
+ await service.restart({ stdout: process.stdout });
254
+ return;
255
+ }
256
+ if (action === "skip")
257
+ return;
258
+ if (action === "reinstall") {
259
+ await service.uninstall({ env: process.env, stdout: process.stdout });
260
+ }
261
+ }
262
+ const devMode = process.argv[1]?.includes(`${path.sep}src${path.sep}`) &&
263
+ process.argv[1]?.endsWith(".ts");
264
+ const { programArguments, workingDirectory } = await resolveGatewayProgramArguments({ port: params.port, dev: devMode });
265
+ const environment = {
266
+ PATH: process.env.PATH,
267
+ CLAWDBOT_GATEWAY_TOKEN: params.gatewayToken,
268
+ CLAWDBOT_LAUNCHD_LABEL: process.platform === "darwin" ? GATEWAY_LAUNCH_AGENT_LABEL : undefined,
269
+ };
270
+ await service.install({
271
+ env: process.env,
272
+ stdout: process.stdout,
273
+ programArguments,
274
+ workingDirectory,
275
+ environment,
276
+ });
277
+ }
278
+ export async function runConfigureWizard(opts, runtime = defaultRuntime) {
279
+ printWizardHeader(runtime);
280
+ intro(opts.command === "update" ? "Clawdbot update wizard" : "Clawdbot configure");
281
+ const prompter = createClackPrompter();
282
+ const snapshot = await readConfigFileSnapshot();
283
+ let baseConfig = snapshot.valid ? snapshot.config : {};
284
+ if (snapshot.exists) {
285
+ const title = snapshot.valid
286
+ ? "Existing config detected"
287
+ : "Invalid config";
288
+ note(summarizeExistingConfig(baseConfig), title);
289
+ if (!snapshot.valid && snapshot.issues.length > 0) {
290
+ note(snapshot.issues
291
+ .map((iss) => `- ${iss.path}: ${iss.message}`)
292
+ .join("\n"), "Config issues");
293
+ }
294
+ if (!snapshot.valid) {
295
+ const reset = guardCancel(await confirm({
296
+ message: "Config invalid. Start fresh?",
297
+ initialValue: true,
298
+ }), runtime);
299
+ if (reset)
300
+ baseConfig = {};
301
+ }
302
+ }
303
+ const localUrl = "ws://127.0.0.1:18789";
304
+ const localProbe = await probeGatewayReachable({
305
+ url: localUrl,
306
+ token: baseConfig.gateway?.auth?.token ?? process.env.CLAWDBOT_GATEWAY_TOKEN,
307
+ password: baseConfig.gateway?.auth?.password ??
308
+ process.env.CLAWDBOT_GATEWAY_PASSWORD,
309
+ });
310
+ const remoteUrl = baseConfig.gateway?.remote?.url?.trim() ?? "";
311
+ const remoteProbe = remoteUrl
312
+ ? await probeGatewayReachable({
313
+ url: remoteUrl,
314
+ token: baseConfig.gateway?.remote?.token,
315
+ })
316
+ : null;
317
+ const mode = guardCancel(await select({
318
+ message: "Where will the Gateway run?",
319
+ options: [
320
+ {
321
+ value: "local",
322
+ label: "Local (this machine)",
323
+ hint: localProbe.ok
324
+ ? `Gateway reachable (${localUrl})`
325
+ : `No gateway detected (${localUrl})`,
326
+ },
327
+ {
328
+ value: "remote",
329
+ label: "Remote (info-only)",
330
+ hint: !remoteUrl
331
+ ? "No remote URL configured yet"
332
+ : remoteProbe?.ok
333
+ ? `Gateway reachable (${remoteUrl})`
334
+ : `Configured but unreachable (${remoteUrl})`,
335
+ },
336
+ ],
337
+ }), runtime);
338
+ if (mode === "remote") {
339
+ let remoteConfig = await promptRemoteGatewayConfig(baseConfig, prompter);
340
+ remoteConfig = applyWizardMetadata(remoteConfig, {
341
+ command: opts.command,
342
+ mode,
343
+ });
344
+ await writeConfigFile(remoteConfig);
345
+ runtime.log(`Updated ${CONFIG_PATH_CLAWDBOT}`);
346
+ outro("Remote gateway configured.");
347
+ return;
348
+ }
349
+ const selected = opts.sections
350
+ ? opts.sections
351
+ : guardCancel(await multiselect({
352
+ message: "Select sections to configure",
353
+ options: [
354
+ { value: "workspace", label: "Workspace" },
355
+ { value: "model", label: "Model/auth" },
356
+ { value: "gateway", label: "Gateway config" },
357
+ { value: "daemon", label: "Gateway daemon" },
358
+ { value: "providers", label: "Providers" },
359
+ { value: "skills", label: "Skills" },
360
+ { value: "health", label: "Health check" },
361
+ ],
362
+ }), runtime);
363
+ if (!selected || selected.length === 0) {
364
+ outro("No changes selected.");
365
+ return;
366
+ }
367
+ let nextConfig = { ...baseConfig };
368
+ let workspaceDir = nextConfig.agent?.workspace ??
369
+ baseConfig.agent?.workspace ??
370
+ DEFAULT_WORKSPACE;
371
+ let gatewayPort = resolveGatewayPort(baseConfig);
372
+ let gatewayToken;
373
+ if (selected.includes("workspace")) {
374
+ const workspaceInput = guardCancel(await text({
375
+ message: "Workspace directory",
376
+ initialValue: workspaceDir,
377
+ }), runtime);
378
+ workspaceDir = resolveUserPath(String(workspaceInput ?? "").trim() || DEFAULT_WORKSPACE);
379
+ nextConfig = {
380
+ ...nextConfig,
381
+ agent: {
382
+ ...nextConfig.agent,
383
+ workspace: workspaceDir,
384
+ },
385
+ };
386
+ await ensureWorkspaceAndSessions(workspaceDir, runtime);
387
+ }
388
+ if (selected.includes("model")) {
389
+ nextConfig = await promptAuthConfig(nextConfig, runtime);
390
+ }
391
+ if (selected.includes("gateway")) {
392
+ const gateway = await promptGatewayConfig(nextConfig, runtime);
393
+ nextConfig = gateway.config;
394
+ gatewayPort = gateway.port;
395
+ gatewayToken = gateway.token;
396
+ }
397
+ if (selected.includes("providers")) {
398
+ nextConfig = await setupProviders(nextConfig, runtime, prompter, {
399
+ allowDisable: true,
400
+ allowSignalInstall: true,
401
+ });
402
+ }
403
+ if (selected.includes("skills")) {
404
+ const wsDir = resolveUserPath(workspaceDir);
405
+ nextConfig = await setupSkills(nextConfig, wsDir, runtime, prompter);
406
+ }
407
+ nextConfig = applyWizardMetadata(nextConfig, {
408
+ command: opts.command,
409
+ mode,
410
+ });
411
+ await writeConfigFile(nextConfig);
412
+ runtime.log(`Updated ${CONFIG_PATH_CLAWDBOT}`);
413
+ if (selected.includes("daemon")) {
414
+ if (!selected.includes("gateway")) {
415
+ const portInput = guardCancel(await text({
416
+ message: "Gateway port for daemon install",
417
+ initialValue: String(gatewayPort),
418
+ validate: (value) => Number.isFinite(Number(value)) ? undefined : "Invalid port",
419
+ }), runtime);
420
+ gatewayPort = Number.parseInt(String(portInput), 10);
421
+ }
422
+ await maybeInstallDaemon({
423
+ runtime,
424
+ port: gatewayPort,
425
+ gatewayToken,
426
+ });
427
+ }
428
+ if (selected.includes("health")) {
429
+ await sleep(1000);
430
+ try {
431
+ await healthCommand({ json: false, timeoutMs: 10_000 }, runtime);
432
+ }
433
+ catch (err) {
434
+ runtime.error(`Health check failed: ${String(err)}`);
435
+ }
436
+ }
437
+ note((() => {
438
+ const bind = nextConfig.gateway?.bind ?? "loopback";
439
+ const links = resolveControlUiLinks({
440
+ bind,
441
+ port: gatewayPort,
442
+ basePath: nextConfig.gateway?.controlUi?.basePath,
443
+ });
444
+ return [`Web UI: ${links.httpUrl}`, `Gateway WS: ${links.wsUrl}`].join("\n");
445
+ })(), "Control UI");
446
+ const browserSupport = await detectBrowserOpenSupport();
447
+ if (!browserSupport.ok) {
448
+ note(formatControlUiSshHint({
449
+ port: gatewayPort,
450
+ basePath: nextConfig.gateway?.controlUi?.basePath,
451
+ token: gatewayToken,
452
+ }), "Open Control UI");
453
+ }
454
+ else {
455
+ const wantsOpen = guardCancel(await confirm({
456
+ message: "Open Control UI now?",
457
+ initialValue: false,
458
+ }), runtime);
459
+ if (wantsOpen) {
460
+ const bind = nextConfig.gateway?.bind ?? "loopback";
461
+ const links = resolveControlUiLinks({
462
+ bind,
463
+ port: gatewayPort,
464
+ basePath: nextConfig.gateway?.controlUi?.basePath,
465
+ });
466
+ const opened = await openUrl(links.httpUrl);
467
+ if (!opened) {
468
+ note(formatControlUiSshHint({
469
+ port: gatewayPort,
470
+ basePath: nextConfig.gateway?.controlUi?.basePath,
471
+ token: gatewayToken,
472
+ }), "Open Control UI");
473
+ }
474
+ }
475
+ }
476
+ outro("Configure complete.");
477
+ }
478
+ export async function configureCommand(runtime = defaultRuntime) {
479
+ await runConfigureWizard({ command: "configure" }, runtime);
480
+ }