durar-ai 2026.4.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 (571) hide show
  1. package/CHANGELOG.md +5497 -0
  2. package/LICENSE +21 -0
  3. package/README.md +614 -0
  4. package/assets/avatar-placeholder.svg +19 -0
  5. package/assets/chrome-extension/icons/icon128.png +0 -0
  6. package/assets/chrome-extension/icons/icon16.png +0 -0
  7. package/assets/chrome-extension/icons/icon32.png +0 -0
  8. package/assets/chrome-extension/icons/icon48.png +0 -0
  9. package/assets/dmg-background-small.png +0 -0
  10. package/assets/dmg-background.png +0 -0
  11. package/docs/.i18n/README.md +72 -0
  12. package/docs/.i18n/ar-navigation.json +18 -0
  13. package/docs/.i18n/de-navigation.json +18 -0
  14. package/docs/.i18n/es-navigation.json +18 -0
  15. package/docs/.i18n/fr-navigation.json +18 -0
  16. package/docs/.i18n/glossary.ar.json +5 -0
  17. package/docs/.i18n/glossary.de.json +5 -0
  18. package/docs/.i18n/glossary.es.json +5 -0
  19. package/docs/.i18n/glossary.fr.json +5 -0
  20. package/docs/.i18n/glossary.id.json +5 -0
  21. package/docs/.i18n/glossary.it.json +5 -0
  22. package/docs/.i18n/glossary.ja-JP.json +14 -0
  23. package/docs/.i18n/glossary.ko.json +5 -0
  24. package/docs/.i18n/glossary.pl.json +5 -0
  25. package/docs/.i18n/glossary.pt-BR.json +5 -0
  26. package/docs/.i18n/glossary.tr.json +5 -0
  27. package/docs/.i18n/glossary.zh-CN.json +358 -0
  28. package/docs/.i18n/id-navigation.json +18 -0
  29. package/docs/.i18n/it-navigation.json +18 -0
  30. package/docs/.i18n/ja-navigation.json +18 -0
  31. package/docs/.i18n/ko-navigation.json +18 -0
  32. package/docs/.i18n/pl-navigation.json +18 -0
  33. package/docs/.i18n/pt-BR-navigation.json +18 -0
  34. package/docs/.i18n/tr-navigation.json +18 -0
  35. package/docs/.i18n/zh-Hans-navigation.json +544 -0
  36. package/docs/assets/install-script.svg +1 -0
  37. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  38. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  39. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  40. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  41. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  42. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  43. package/docs/assets/openclaw-logo-text-dark.svg +418 -0
  44. package/docs/assets/openclaw-logo-text.png +0 -0
  45. package/docs/assets/openclaw-logo-text.svg +418 -0
  46. package/docs/assets/pixel-lobster.svg +60 -0
  47. package/docs/assets/showcase/agents-ui.jpg +0 -0
  48. package/docs/assets/showcase/bambu-cli.png +0 -0
  49. package/docs/assets/showcase/codexmonitor.png +0 -0
  50. package/docs/assets/showcase/gohome-grafana.png +0 -0
  51. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  52. package/docs/assets/showcase/oura-health.png +0 -0
  53. package/docs/assets/showcase/padel-cli.svg +11 -0
  54. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  55. package/docs/assets/showcase/papla-tts.jpg +0 -0
  56. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  57. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  58. package/docs/assets/showcase/roborock-status.svg +13 -0
  59. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  60. package/docs/assets/showcase/snag.png +0 -0
  61. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  62. package/docs/assets/showcase/wienerlinien.png +0 -0
  63. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  64. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  65. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  66. package/docs/assets/sponsors/blacksmith-light.svg +14 -0
  67. package/docs/assets/sponsors/blacksmith.svg +14 -0
  68. package/docs/assets/sponsors/convex-light.svg +16 -0
  69. package/docs/assets/sponsors/convex.svg +16 -0
  70. package/docs/assets/sponsors/github-light.svg +3 -0
  71. package/docs/assets/sponsors/github.svg +3 -0
  72. package/docs/assets/sponsors/nvidia-dark.svg +9 -0
  73. package/docs/assets/sponsors/nvidia.svg +9 -0
  74. package/docs/assets/sponsors/openai-light.svg +3 -0
  75. package/docs/assets/sponsors/openai.svg +3 -0
  76. package/docs/assets/sponsors/vercel-light.svg +5 -0
  77. package/docs/assets/sponsors/vercel.svg +5 -0
  78. package/docs/auth-credential-semantics.md +80 -0
  79. package/docs/automation/auth-monitoring.md +8 -0
  80. package/docs/automation/clawflow.md +8 -0
  81. package/docs/automation/cron-jobs.md +410 -0
  82. package/docs/automation/cron-vs-heartbeat.md +8 -0
  83. package/docs/automation/gmail-pubsub.md +8 -0
  84. package/docs/automation/hooks.md +303 -0
  85. package/docs/automation/index.md +115 -0
  86. package/docs/automation/poll.md +8 -0
  87. package/docs/automation/standing-orders.md +254 -0
  88. package/docs/automation/taskflow.md +82 -0
  89. package/docs/automation/tasks.md +323 -0
  90. package/docs/automation/troubleshooting.md +8 -0
  91. package/docs/automation/webhook.md +8 -0
  92. package/docs/brave-search.md +103 -0
  93. package/docs/channels/bluebubbles.md +435 -0
  94. package/docs/channels/broadcast-groups.md +442 -0
  95. package/docs/channels/channel-routing.md +139 -0
  96. package/docs/channels/discord.md +1254 -0
  97. package/docs/channels/feishu.md +793 -0
  98. package/docs/channels/googlechat.md +270 -0
  99. package/docs/channels/group-messages.md +84 -0
  100. package/docs/channels/groups.md +410 -0
  101. package/docs/channels/imessage.md +427 -0
  102. package/docs/channels/index.md +50 -0
  103. package/docs/channels/irc.md +252 -0
  104. package/docs/channels/line.md +225 -0
  105. package/docs/channels/location.md +56 -0
  106. package/docs/channels/matrix.md +869 -0
  107. package/docs/channels/mattermost.md +472 -0
  108. package/docs/channels/msteams.md +805 -0
  109. package/docs/channels/nextcloud-talk.md +149 -0
  110. package/docs/channels/nostr.md +252 -0
  111. package/docs/channels/pairing.md +129 -0
  112. package/docs/channels/qqbot.md +193 -0
  113. package/docs/channels/signal.md +337 -0
  114. package/docs/channels/slack.md +681 -0
  115. package/docs/channels/synology-chat.md +185 -0
  116. package/docs/channels/telegram.md +1072 -0
  117. package/docs/channels/tlon.md +290 -0
  118. package/docs/channels/troubleshooting.md +133 -0
  119. package/docs/channels/twitch.md +394 -0
  120. package/docs/channels/whatsapp.md +488 -0
  121. package/docs/channels/zalo.md +254 -0
  122. package/docs/channels/zalouser.md +195 -0
  123. package/docs/ci.md +66 -0
  124. package/docs/cli/acp.md +316 -0
  125. package/docs/cli/agent.md +57 -0
  126. package/docs/cli/agents.md +220 -0
  127. package/docs/cli/approvals.md +136 -0
  128. package/docs/cli/backup.md +84 -0
  129. package/docs/cli/browser.md +233 -0
  130. package/docs/cli/channels.md +131 -0
  131. package/docs/cli/clawbot.md +21 -0
  132. package/docs/cli/completion.md +35 -0
  133. package/docs/cli/config.md +353 -0
  134. package/docs/cli/configure.md +70 -0
  135. package/docs/cli/cron.md +167 -0
  136. package/docs/cli/daemon.md +57 -0
  137. package/docs/cli/dashboard.md +22 -0
  138. package/docs/cli/devices.md +171 -0
  139. package/docs/cli/directory.md +63 -0
  140. package/docs/cli/dns.md +48 -0
  141. package/docs/cli/docs.md +28 -0
  142. package/docs/cli/doctor.md +63 -0
  143. package/docs/cli/flows.md +18 -0
  144. package/docs/cli/gateway.md +307 -0
  145. package/docs/cli/health.md +36 -0
  146. package/docs/cli/hooks.md +337 -0
  147. package/docs/cli/index.md +1836 -0
  148. package/docs/cli/logs.md +59 -0
  149. package/docs/cli/mcp.md +505 -0
  150. package/docs/cli/memory.md +139 -0
  151. package/docs/cli/message.md +300 -0
  152. package/docs/cli/models.md +136 -0
  153. package/docs/cli/node.md +137 -0
  154. package/docs/cli/nodes.md +66 -0
  155. package/docs/cli/onboard.md +171 -0
  156. package/docs/cli/pairing.md +65 -0
  157. package/docs/cli/plugins.md +305 -0
  158. package/docs/cli/qr.md +52 -0
  159. package/docs/cli/reset.md +35 -0
  160. package/docs/cli/sandbox.md +197 -0
  161. package/docs/cli/secrets.md +197 -0
  162. package/docs/cli/security.md +86 -0
  163. package/docs/cli/sessions.md +113 -0
  164. package/docs/cli/setup.md +45 -0
  165. package/docs/cli/skills.md +59 -0
  166. package/docs/cli/status.md +35 -0
  167. package/docs/cli/system.md +71 -0
  168. package/docs/cli/tui.md +30 -0
  169. package/docs/cli/uninstall.md +39 -0
  170. package/docs/cli/update.md +113 -0
  171. package/docs/cli/voicecall.md +34 -0
  172. package/docs/cli/webhooks.md +91 -0
  173. package/docs/concepts/agent-loop.md +168 -0
  174. package/docs/concepts/agent-workspace.md +246 -0
  175. package/docs/concepts/agent.md +129 -0
  176. package/docs/concepts/architecture.md +156 -0
  177. package/docs/concepts/compaction.md +122 -0
  178. package/docs/concepts/context-engine.md +274 -0
  179. package/docs/concepts/context.md +179 -0
  180. package/docs/concepts/delegate-architecture.md +307 -0
  181. package/docs/concepts/dreaming.md +173 -0
  182. package/docs/concepts/features.md +76 -0
  183. package/docs/concepts/markdown-formatting.md +130 -0
  184. package/docs/concepts/memory-builtin.md +105 -0
  185. package/docs/concepts/memory-honcho.md +140 -0
  186. package/docs/concepts/memory-qmd.md +163 -0
  187. package/docs/concepts/memory-search.md +141 -0
  188. package/docs/concepts/memory.md +121 -0
  189. package/docs/concepts/messages.md +161 -0
  190. package/docs/concepts/model-failover.md +349 -0
  191. package/docs/concepts/model-providers.md +799 -0
  192. package/docs/concepts/models.md +255 -0
  193. package/docs/concepts/multi-agent.md +615 -0
  194. package/docs/concepts/oauth.md +225 -0
  195. package/docs/concepts/presence.md +102 -0
  196. package/docs/concepts/queue.md +89 -0
  197. package/docs/concepts/retry.md +69 -0
  198. package/docs/concepts/session-pruning.md +92 -0
  199. package/docs/concepts/session-tool.md +141 -0
  200. package/docs/concepts/session.md +116 -0
  201. package/docs/concepts/soul.md +110 -0
  202. package/docs/concepts/streaming.md +161 -0
  203. package/docs/concepts/system-prompt.md +182 -0
  204. package/docs/concepts/timezone.md +97 -0
  205. package/docs/concepts/typebox.md +307 -0
  206. package/docs/concepts/typing-indicators.md +69 -0
  207. package/docs/concepts/usage-tracking.md +59 -0
  208. package/docs/date-time.md +128 -0
  209. package/docs/debug/node-issue.md +85 -0
  210. package/docs/diagnostics/flags.md +91 -0
  211. package/docs/docs.json +1601 -0
  212. package/docs/gateway/authentication.md +218 -0
  213. package/docs/gateway/background-process.md +131 -0
  214. package/docs/gateway/bonjour.md +179 -0
  215. package/docs/gateway/bridge-protocol.md +89 -0
  216. package/docs/gateway/cli-backends.md +310 -0
  217. package/docs/gateway/configuration-examples.md +631 -0
  218. package/docs/gateway/configuration-reference.md +3618 -0
  219. package/docs/gateway/configuration.md +698 -0
  220. package/docs/gateway/discovery.md +141 -0
  221. package/docs/gateway/doctor.md +494 -0
  222. package/docs/gateway/gateway-lock.md +37 -0
  223. package/docs/gateway/health.md +61 -0
  224. package/docs/gateway/heartbeat.md +443 -0
  225. package/docs/gateway/index.md +367 -0
  226. package/docs/gateway/local-models.md +163 -0
  227. package/docs/gateway/logging.md +113 -0
  228. package/docs/gateway/multiple-gateways.md +120 -0
  229. package/docs/gateway/network-model.md +25 -0
  230. package/docs/gateway/openai-http-api.md +280 -0
  231. package/docs/gateway/openresponses-http-api.md +340 -0
  232. package/docs/gateway/openshell.md +307 -0
  233. package/docs/gateway/pairing.md +138 -0
  234. package/docs/gateway/protocol.md +588 -0
  235. package/docs/gateway/remote-gateway-readme.md +164 -0
  236. package/docs/gateway/remote.md +251 -0
  237. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +141 -0
  238. package/docs/gateway/sandboxing.md +473 -0
  239. package/docs/gateway/secrets-plan-contract.md +116 -0
  240. package/docs/gateway/secrets.md +541 -0
  241. package/docs/gateway/security/index.md +1362 -0
  242. package/docs/gateway/tailscale.md +136 -0
  243. package/docs/gateway/tools-invoke-http-api.md +161 -0
  244. package/docs/gateway/troubleshooting.md +451 -0
  245. package/docs/gateway/trusted-proxy-auth.md +399 -0
  246. package/docs/help/debugging.md +168 -0
  247. package/docs/help/environment.md +165 -0
  248. package/docs/help/faq.md +3244 -0
  249. package/docs/help/index.md +28 -0
  250. package/docs/help/scripts.md +27 -0
  251. package/docs/help/testing.md +640 -0
  252. package/docs/help/troubleshooting.md +372 -0
  253. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  254. package/docs/images/feishu-step2-create-app.png +0 -0
  255. package/docs/images/feishu-step3-credentials.png +0 -0
  256. package/docs/images/feishu-step4-permissions.png +0 -0
  257. package/docs/images/feishu-step5-bot-capability.png +0 -0
  258. package/docs/images/feishu-step6-event-subscription.png +0 -0
  259. package/docs/images/feishu-verification-token.png +0 -0
  260. package/docs/images/groups-flow.svg +52 -0
  261. package/docs/images/mobile-ui-screenshot.png +0 -0
  262. package/docs/index.md +196 -0
  263. package/docs/install/ansible.md +230 -0
  264. package/docs/install/azure.md +311 -0
  265. package/docs/install/bun.md +55 -0
  266. package/docs/install/clawdock.md +106 -0
  267. package/docs/install/development-channels.md +131 -0
  268. package/docs/install/digitalocean.md +129 -0
  269. package/docs/install/docker-vm-runtime.md +142 -0
  270. package/docs/install/docker.md +412 -0
  271. package/docs/install/exe-dev.md +133 -0
  272. package/docs/install/fly.md +504 -0
  273. package/docs/install/gcp.md +412 -0
  274. package/docs/install/hetzner.md +259 -0
  275. package/docs/install/index.md +212 -0
  276. package/docs/install/installer.md +443 -0
  277. package/docs/install/kubernetes.md +192 -0
  278. package/docs/install/macos-vm.md +281 -0
  279. package/docs/install/migrating-matrix.md +349 -0
  280. package/docs/install/migrating.md +112 -0
  281. package/docs/install/nix.md +89 -0
  282. package/docs/install/node.md +144 -0
  283. package/docs/install/northflank.mdx +42 -0
  284. package/docs/install/oracle.md +158 -0
  285. package/docs/install/podman.md +210 -0
  286. package/docs/install/railway.mdx +90 -0
  287. package/docs/install/raspberry-pi.md +159 -0
  288. package/docs/install/render.mdx +165 -0
  289. package/docs/install/uninstall.md +128 -0
  290. package/docs/install/updating.md +142 -0
  291. package/docs/logging.md +389 -0
  292. package/docs/nav-tabs-underline.js +100 -0
  293. package/docs/network.md +69 -0
  294. package/docs/nodes/audio.md +191 -0
  295. package/docs/nodes/camera.md +162 -0
  296. package/docs/nodes/images.md +73 -0
  297. package/docs/nodes/index.md +408 -0
  298. package/docs/nodes/location-command.md +98 -0
  299. package/docs/nodes/media-understanding.md +432 -0
  300. package/docs/nodes/talk.md +92 -0
  301. package/docs/nodes/troubleshooting.md +123 -0
  302. package/docs/nodes/voicewake.md +66 -0
  303. package/docs/perplexity.md +181 -0
  304. package/docs/pi-dev.md +80 -0
  305. package/docs/pi.md +570 -0
  306. package/docs/platforms/android.md +244 -0
  307. package/docs/platforms/digitalocean.md +266 -0
  308. package/docs/platforms/index.md +55 -0
  309. package/docs/platforms/ios.md +223 -0
  310. package/docs/platforms/linux.md +100 -0
  311. package/docs/platforms/mac/bundled-gateway.md +75 -0
  312. package/docs/platforms/mac/canvas.md +125 -0
  313. package/docs/platforms/mac/child-process.md +69 -0
  314. package/docs/platforms/mac/dev-setup.md +107 -0
  315. package/docs/platforms/mac/health.md +34 -0
  316. package/docs/platforms/mac/icon.md +31 -0
  317. package/docs/platforms/mac/logging.md +57 -0
  318. package/docs/platforms/mac/menu-bar.md +81 -0
  319. package/docs/platforms/mac/peekaboo.md +65 -0
  320. package/docs/platforms/mac/permissions.md +50 -0
  321. package/docs/platforms/mac/remote.md +84 -0
  322. package/docs/platforms/mac/signing.md +47 -0
  323. package/docs/platforms/mac/skills.md +40 -0
  324. package/docs/platforms/mac/voice-overlay.md +60 -0
  325. package/docs/platforms/mac/voicewake.md +67 -0
  326. package/docs/platforms/mac/webchat.md +51 -0
  327. package/docs/platforms/mac/xpc.md +61 -0
  328. package/docs/platforms/macos.md +229 -0
  329. package/docs/platforms/oracle.md +305 -0
  330. package/docs/platforms/raspberry-pi.md +420 -0
  331. package/docs/platforms/windows.md +241 -0
  332. package/docs/plugins/agent-tools.md +10 -0
  333. package/docs/plugins/architecture.md +1609 -0
  334. package/docs/plugins/building-extensions.md +10 -0
  335. package/docs/plugins/building-plugins.md +319 -0
  336. package/docs/plugins/bundles.md +292 -0
  337. package/docs/plugins/community.md +149 -0
  338. package/docs/plugins/manifest.md +412 -0
  339. package/docs/plugins/sdk-channel-plugins.md +508 -0
  340. package/docs/plugins/sdk-entrypoints.md +210 -0
  341. package/docs/plugins/sdk-migration.md +359 -0
  342. package/docs/plugins/sdk-overview.md +475 -0
  343. package/docs/plugins/sdk-provider-plugins.md +712 -0
  344. package/docs/plugins/sdk-runtime.md +381 -0
  345. package/docs/plugins/sdk-setup.md +516 -0
  346. package/docs/plugins/sdk-testing.md +263 -0
  347. package/docs/plugins/voice-call.md +466 -0
  348. package/docs/plugins/zalouser.md +78 -0
  349. package/docs/prose.md +134 -0
  350. package/docs/providers/anthropic.md +402 -0
  351. package/docs/providers/bedrock-mantle.md +91 -0
  352. package/docs/providers/bedrock.md +273 -0
  353. package/docs/providers/chutes.md +103 -0
  354. package/docs/providers/claude-max-api-proxy.md +163 -0
  355. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  356. package/docs/providers/deepgram.md +93 -0
  357. package/docs/providers/deepseek.md +53 -0
  358. package/docs/providers/fireworks.md +69 -0
  359. package/docs/providers/github-copilot.md +80 -0
  360. package/docs/providers/glm.md +68 -0
  361. package/docs/providers/google.md +149 -0
  362. package/docs/providers/groq.md +105 -0
  363. package/docs/providers/huggingface.md +193 -0
  364. package/docs/providers/index.md +81 -0
  365. package/docs/providers/kilocode.md +89 -0
  366. package/docs/providers/litellm.md +159 -0
  367. package/docs/providers/minimax.md +281 -0
  368. package/docs/providers/mistral.md +68 -0
  369. package/docs/providers/models.md +56 -0
  370. package/docs/providers/moonshot.md +224 -0
  371. package/docs/providers/nvidia.md +58 -0
  372. package/docs/providers/ollama.md +379 -0
  373. package/docs/providers/openai.md +472 -0
  374. package/docs/providers/opencode-go.md +45 -0
  375. package/docs/providers/opencode.md +68 -0
  376. package/docs/providers/openrouter.md +59 -0
  377. package/docs/providers/perplexity-provider.md +62 -0
  378. package/docs/providers/qianfan.md +90 -0
  379. package/docs/providers/qwen.md +128 -0
  380. package/docs/providers/qwen_modelstudio.md +137 -0
  381. package/docs/providers/sglang.md +115 -0
  382. package/docs/providers/stepfun.md +152 -0
  383. package/docs/providers/synthetic.md +101 -0
  384. package/docs/providers/together.md +70 -0
  385. package/docs/providers/venice.md +282 -0
  386. package/docs/providers/vercel-ai-gateway.md +60 -0
  387. package/docs/providers/vllm.md +103 -0
  388. package/docs/providers/volcengine.md +94 -0
  389. package/docs/providers/xai.md +94 -0
  390. package/docs/providers/xiaomi.md +89 -0
  391. package/docs/providers/zai.md +75 -0
  392. package/docs/reference/AGENTS.default.md +126 -0
  393. package/docs/reference/RELEASING.md +138 -0
  394. package/docs/reference/api-usage-costs.md +198 -0
  395. package/docs/reference/credits.md +30 -0
  396. package/docs/reference/device-models.md +47 -0
  397. package/docs/reference/memory-config.md +421 -0
  398. package/docs/reference/prompt-caching.md +344 -0
  399. package/docs/reference/rpc.md +43 -0
  400. package/docs/reference/secretref-credential-surface.md +148 -0
  401. package/docs/reference/secretref-user-supplied-credentials-matrix.json +607 -0
  402. package/docs/reference/session-management-compaction.md +352 -0
  403. package/docs/reference/templates/AGENTS.dev.md +84 -0
  404. package/docs/reference/templates/AGENTS.md +219 -0
  405. package/docs/reference/templates/BOOT.md +12 -0
  406. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  407. package/docs/reference/templates/CLAUDE.md +1 -0
  408. package/docs/reference/templates/HEARTBEAT.md +14 -0
  409. package/docs/reference/templates/IDENTITY.dev.md +48 -0
  410. package/docs/reference/templates/IDENTITY.md +30 -0
  411. package/docs/reference/templates/SOUL.dev.md +77 -0
  412. package/docs/reference/templates/SOUL.md +45 -0
  413. package/docs/reference/templates/TOOLS.dev.md +25 -0
  414. package/docs/reference/templates/TOOLS.md +47 -0
  415. package/docs/reference/templates/USER.dev.md +19 -0
  416. package/docs/reference/templates/USER.md +24 -0
  417. package/docs/reference/test.md +119 -0
  418. package/docs/reference/token-use.md +197 -0
  419. package/docs/reference/transcript-hygiene.md +151 -0
  420. package/docs/reference/wizard.md +245 -0
  421. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
  422. package/docs/security/THREAT-MODEL-ATLAS.md +608 -0
  423. package/docs/security/formal-verification.md +167 -0
  424. package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +9 -0
  425. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  426. package/docs/start/bootstrapping.md +41 -0
  427. package/docs/start/docs-directory.md +67 -0
  428. package/docs/start/getting-started.md +148 -0
  429. package/docs/start/hubs.md +199 -0
  430. package/docs/start/lore.md +219 -0
  431. package/docs/start/onboarding-overview.md +69 -0
  432. package/docs/start/onboarding.md +92 -0
  433. package/docs/start/openclaw.md +225 -0
  434. package/docs/start/quickstart.md +22 -0
  435. package/docs/start/setup.md +172 -0
  436. package/docs/start/showcase.md +418 -0
  437. package/docs/start/wizard-cli-automation.md +233 -0
  438. package/docs/start/wizard-cli-reference.md +324 -0
  439. package/docs/start/wizard.md +127 -0
  440. package/docs/style.css +37 -0
  441. package/docs/tools/acp-agents.md +837 -0
  442. package/docs/tools/agent-send.md +100 -0
  443. package/docs/tools/apply-patch.md +52 -0
  444. package/docs/tools/brave-search.md +107 -0
  445. package/docs/tools/browser-linux-troubleshooting.md +145 -0
  446. package/docs/tools/browser-login.md +73 -0
  447. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +221 -0
  448. package/docs/tools/browser.md +890 -0
  449. package/docs/tools/btw.md +142 -0
  450. package/docs/tools/capability-cookbook.md +119 -0
  451. package/docs/tools/clawhub.md +348 -0
  452. package/docs/tools/code-execution.md +90 -0
  453. package/docs/tools/creating-skills.md +119 -0
  454. package/docs/tools/diffs.md +434 -0
  455. package/docs/tools/duckduckgo-search.md +102 -0
  456. package/docs/tools/elevated.md +116 -0
  457. package/docs/tools/exa-search.md +127 -0
  458. package/docs/tools/exec-approvals.md +635 -0
  459. package/docs/tools/exec.md +237 -0
  460. package/docs/tools/firecrawl.md +147 -0
  461. package/docs/tools/gemini-search.md +98 -0
  462. package/docs/tools/grok-search.md +102 -0
  463. package/docs/tools/image-generation.md +139 -0
  464. package/docs/tools/index.md +174 -0
  465. package/docs/tools/kimi-search.md +98 -0
  466. package/docs/tools/llm-task.md +119 -0
  467. package/docs/tools/lobster.md +348 -0
  468. package/docs/tools/loop-detection.md +100 -0
  469. package/docs/tools/minimax-search.md +99 -0
  470. package/docs/tools/multi-agent-sandbox-tools.md +373 -0
  471. package/docs/tools/ollama-search.md +100 -0
  472. package/docs/tools/pdf.md +176 -0
  473. package/docs/tools/perplexity-search.md +185 -0
  474. package/docs/tools/plugin.md +348 -0
  475. package/docs/tools/reactions.md +78 -0
  476. package/docs/tools/searxng-search.md +132 -0
  477. package/docs/tools/skills-config.md +133 -0
  478. package/docs/tools/skills.md +377 -0
  479. package/docs/tools/slash-commands.md +322 -0
  480. package/docs/tools/subagents.md +341 -0
  481. package/docs/tools/tavily.md +129 -0
  482. package/docs/tools/thinking.md +102 -0
  483. package/docs/tools/tts.md +452 -0
  484. package/docs/tools/web-fetch.md +159 -0
  485. package/docs/tools/web.md +417 -0
  486. package/docs/tts.md +452 -0
  487. package/docs/vps.md +115 -0
  488. package/docs/web/control-ui.md +318 -0
  489. package/docs/web/dashboard.md +93 -0
  490. package/docs/web/index.md +126 -0
  491. package/docs/web/tui.md +176 -0
  492. package/docs/web/webchat.md +77 -0
  493. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  494. package/docs/whatsapp-openclaw.jpg +0 -0
  495. package/durar.mjs +180 -0
  496. package/package.json +1259 -0
  497. package/scripts/npm-runner.mjs +111 -0
  498. package/scripts/postinstall-bundled-plugins.mjs +188 -0
  499. package/skills/1password/SKILL.md +70 -0
  500. package/skills/1password/references/cli-examples.md +29 -0
  501. package/skills/1password/references/get-started.md +17 -0
  502. package/skills/apple-notes/SKILL.md +77 -0
  503. package/skills/apple-reminders/SKILL.md +118 -0
  504. package/skills/bear-notes/SKILL.md +107 -0
  505. package/skills/blogwatcher/SKILL.md +69 -0
  506. package/skills/blucli/SKILL.md +47 -0
  507. package/skills/bluebubbles/SKILL.md +131 -0
  508. package/skills/camsnap/SKILL.md +45 -0
  509. package/skills/canvas/SKILL.md +199 -0
  510. package/skills/clawhub/SKILL.md +77 -0
  511. package/skills/coding-agent/SKILL.md +316 -0
  512. package/skills/discord/SKILL.md +197 -0
  513. package/skills/eightctl/SKILL.md +50 -0
  514. package/skills/gemini/SKILL.md +43 -0
  515. package/skills/gh-issues/SKILL.md +885 -0
  516. package/skills/gifgrep/SKILL.md +79 -0
  517. package/skills/github/SKILL.md +163 -0
  518. package/skills/gog/SKILL.md +116 -0
  519. package/skills/goplaces/SKILL.md +52 -0
  520. package/skills/healthcheck/SKILL.md +245 -0
  521. package/skills/himalaya/SKILL.md +257 -0
  522. package/skills/himalaya/references/configuration.md +184 -0
  523. package/skills/himalaya/references/message-composition.md +199 -0
  524. package/skills/imsg/SKILL.md +122 -0
  525. package/skills/mcporter/SKILL.md +61 -0
  526. package/skills/model-usage/SKILL.md +69 -0
  527. package/skills/model-usage/references/codexbar-cli.md +33 -0
  528. package/skills/model-usage/scripts/model_usage.py +320 -0
  529. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  530. package/skills/nano-pdf/SKILL.md +38 -0
  531. package/skills/node-connect/SKILL.md +142 -0
  532. package/skills/notion/SKILL.md +174 -0
  533. package/skills/obsidian/SKILL.md +81 -0
  534. package/skills/openai-whisper/SKILL.md +38 -0
  535. package/skills/openai-whisper-api/SKILL.md +62 -0
  536. package/skills/openai-whisper-api/scripts/transcribe.sh +88 -0
  537. package/skills/openhue/SKILL.md +112 -0
  538. package/skills/oracle/SKILL.md +125 -0
  539. package/skills/ordercli/SKILL.md +78 -0
  540. package/skills/peekaboo/SKILL.md +190 -0
  541. package/skills/sag/SKILL.md +87 -0
  542. package/skills/session-logs/SKILL.md +151 -0
  543. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  544. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  545. package/skills/skill-creator/SKILL.md +372 -0
  546. package/skills/skill-creator/license.txt +202 -0
  547. package/skills/skill-creator/scripts/init_skill.py +378 -0
  548. package/skills/skill-creator/scripts/package_skill.py +139 -0
  549. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  550. package/skills/skill-creator/scripts/test_package_skill.py +160 -0
  551. package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
  552. package/skills/slack/SKILL.md +144 -0
  553. package/skills/songsee/SKILL.md +49 -0
  554. package/skills/sonoscli/SKILL.md +65 -0
  555. package/skills/spotify-player/SKILL.md +64 -0
  556. package/skills/summarize/SKILL.md +87 -0
  557. package/skills/taskflow/SKILL.md +149 -0
  558. package/skills/taskflow/examples/inbox-triage.lobster +33 -0
  559. package/skills/taskflow/examples/pr-intake.lobster +32 -0
  560. package/skills/taskflow-inbox-triage/SKILL.md +119 -0
  561. package/skills/things-mac/SKILL.md +86 -0
  562. package/skills/tmux/SKILL.md +170 -0
  563. package/skills/tmux/scripts/find-sessions.sh +112 -0
  564. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  565. package/skills/trello/SKILL.md +108 -0
  566. package/skills/video-frames/SKILL.md +46 -0
  567. package/skills/video-frames/scripts/frame.sh +81 -0
  568. package/skills/voice-call/SKILL.md +45 -0
  569. package/skills/wacli/SKILL.md +72 -0
  570. package/skills/weather/SKILL.md +129 -0
  571. package/skills/xurl/SKILL.md +461 -0
@@ -0,0 +1,225 @@
1
+ ---
2
+ summary: "OAuth in Durar: token exchange, storage, and multi-account patterns"
3
+ read_when:
4
+ - You want to understand Durar OAuth end-to-end
5
+ - You hit token invalidation / logout issues
6
+ - You want Claude CLI or OAuth auth flows
7
+ - You want multiple accounts or profile routing
8
+ title: "OAuth"
9
+ ---
10
+
11
+ # OAuth
12
+
13
+ Durar supports “subscription auth” via OAuth for providers that offer it
14
+ (notably **OpenAI Codex (ChatGPT OAuth)**). For Anthropic subscriptions, new
15
+ setup should use the local **Claude CLI** login path on the gateway host, but
16
+ Anthropic distinguishes between direct Claude Code usage and Durar's reuse
17
+ path. Anthropic's public Claude Code docs say direct Claude Code use stays
18
+ inside Claude subscription limits. Separately, Anthropic notified Durar
19
+ users on **April 4, 2026 at 12:00 PM PT / 8:00 PM BST** that Durar counts as
20
+ a third-party harness and now requires **Extra Usage** for that traffic.
21
+ OpenAI Codex OAuth is explicitly supported for use in external tools like
22
+ Durar. This page explains:
23
+
24
+ For Anthropic in production, API key auth is the safer recommended path.
25
+
26
+ - how the OAuth **token exchange** works (PKCE)
27
+ - where tokens are **stored** (and why)
28
+ - how to handle **multiple accounts** (profiles + per-session overrides)
29
+
30
+ Durar also supports **provider plugins** that ship their own OAuth or API‑key
31
+ flows. Run them via:
32
+
33
+ ```bash
34
+ Durar models auth login --provider <id>
35
+ ```
36
+
37
+ ## The token sink (why it exists)
38
+
39
+ OAuth providers commonly mint a **new refresh token** during login/refresh flows. Some providers (or OAuth clients) can invalidate older refresh tokens when a new one is issued for the same user/app.
40
+
41
+ Practical symptom:
42
+
43
+ - you log in via Durar _and_ via Claude Code / Codex CLI → one of them randomly gets “logged out” later
44
+
45
+ To reduce that, Durar treats `auth-profiles.json` as a **token sink**:
46
+
47
+ - the runtime reads credentials from **one place**
48
+ - we can keep multiple profiles and route them deterministically
49
+ - when credentials are reused from an external CLI like Codex CLI, Durar
50
+ mirrors them with provenance and re-reads that external source instead of
51
+ rotating the refresh token itself
52
+
53
+ ## Storage (where tokens live)
54
+
55
+ Secrets are stored **per-agent**:
56
+
57
+ - Auth profiles (OAuth + API keys + optional value-level refs): `~/.Durar/agents/<agentId>/agent/auth-profiles.json`
58
+ - Legacy compatibility file: `~/.Durar/agents/<agentId>/agent/auth.json`
59
+ (static `api_key` entries are scrubbed when discovered)
60
+
61
+ Legacy import-only file (still supported, but not the main store):
62
+
63
+ - `~/.Durar/credentials/oauth.json` (imported into `auth-profiles.json` on first use)
64
+
65
+ All of the above also respect `$Durar_STATE_DIR` (state dir override). Full reference: [/gateway/configuration](/gateway/configuration-reference#auth-storage)
66
+
67
+ For static secret refs and runtime snapshot activation behavior, see [Secrets Management](/gateway/secrets).
68
+
69
+ ## Anthropic legacy token compatibility
70
+
71
+ <Warning>
72
+ Anthropic's public Claude Code docs say direct Claude Code use stays within
73
+ Claude subscription limits. Separately, Anthropic told Durar users on
74
+ **April 4, 2026 at 12:00 PM PT / 8:00 PM BST** that **Durar counts as a
75
+ third-party harness**. Existing Anthropic token profiles remain technically
76
+ usable in Durar, but Anthropic says the Durar path now requires **Extra
77
+ Usage** (pay-as-you-go billed separately from the subscription) for that
78
+ traffic.
79
+
80
+ For Anthropic's current direct-Claude-Code plan docs, see [Using Claude Code
81
+ with your Pro or Max
82
+ plan](https://support.claude.com/en/articles/11145838-using-claude-code-with-your-pro-or-max-plan)
83
+ and [Using Claude Code with your Team or Enterprise
84
+ plan](https://support.anthropic.com/en/articles/11845131-using-claude-code-with-your-team-or-enterprise-plan/).
85
+
86
+ If you want other subscription-style options in Durar, see [OpenAI
87
+ Codex](/providers/openai), [Qwen Cloud Coding
88
+ Plan](/providers/qwen), [MiniMax Coding Plan](/providers/minimax),
89
+ and [Z.AI / GLM Coding Plan](/providers/glm).
90
+ </Warning>
91
+
92
+ Durar now exposes Anthropic setup-token again as a legacy/manual path.
93
+ Anthropic's Durar-specific billing notice still applies to that path, so
94
+ use it with the expectation that Anthropic requires **Extra Usage** for
95
+ Durar-driven Claude-login traffic.
96
+
97
+ ## Anthropic Claude CLI migration
98
+
99
+ If Claude CLI is already installed and signed in on the gateway host, you can
100
+ switch Anthropic model selection over to the local CLI backend. This is a
101
+ supported Durar path when you want to reuse a local Claude CLI login on the
102
+ same host.
103
+
104
+ Prerequisites:
105
+
106
+ - the `claude` binary is installed on the gateway host
107
+ - Claude CLI is already authenticated there via `claude auth login`
108
+
109
+ Migration command:
110
+
111
+ ```bash
112
+ Durar models auth login --provider anthropic --method cli --set-default
113
+ ```
114
+
115
+ Onboarding shortcut:
116
+
117
+ ```bash
118
+ Durar onboard --auth-choice anthropic-cli
119
+ ```
120
+
121
+ This keeps existing Anthropic auth profiles for rollback, but rewrites the main
122
+ default-model path from `anthropic/...` to `claude-cli/...`, rewrites matching
123
+ Anthropic Claude fallbacks, and adds matching `claude-cli/...` allowlist
124
+ entries under `agents.defaults.models`.
125
+
126
+ Verify:
127
+
128
+ ```bash
129
+ Durar models status
130
+ ```
131
+
132
+ ## OAuth exchange (how login works)
133
+
134
+ Durar’s interactive login flows are implemented in `@mariozechner/pi-ai` and wired into the wizards/commands.
135
+
136
+ ### Anthropic Claude CLI
137
+
138
+ Flow shape:
139
+
140
+ Claude CLI path:
141
+
142
+ 1. sign in with `claude auth login` on the gateway host
143
+ 2. run `Durar models auth login --provider anthropic --method cli --set-default`
144
+ 3. store no new auth profile; switch model selection to `claude-cli/...`
145
+ 4. keep existing Anthropic auth profiles for rollback
146
+
147
+ Anthropic's public Claude Code docs describe this direct Claude subscription
148
+ login flow for `claude` itself. Durar can reuse that local login, but
149
+ Anthropic separately classifies the Durar-controlled path as third-party
150
+ harness usage for billing purposes.
151
+
152
+ Interactive assistant path:
153
+
154
+ - `Durar onboard` / `Durar configure` → auth choice `anthropic-cli`
155
+
156
+ ### OpenAI Codex (ChatGPT OAuth)
157
+
158
+ OpenAI Codex OAuth is explicitly supported for use outside the Codex CLI, including Durar workflows.
159
+
160
+ Flow shape (PKCE):
161
+
162
+ 1. generate PKCE verifier/challenge + random `state`
163
+ 2. open `https://auth.openai.com/oauth/authorize?...`
164
+ 3. try to capture callback on `http://127.0.0.1:1455/auth/callback`
165
+ 4. if callback can’t bind (or you’re remote/headless), paste the redirect URL/code
166
+ 5. exchange at `https://auth.openai.com/oauth/token`
167
+ 6. extract `accountId` from the access token and store `{ access, refresh, expires, accountId }`
168
+
169
+ Wizard path is `Durar onboard` → auth choice `openai-codex`.
170
+
171
+ ## Refresh + expiry
172
+
173
+ Profiles store an `expires` timestamp.
174
+
175
+ At runtime:
176
+
177
+ - if `expires` is in the future → use the stored access token
178
+ - if expired → refresh (under a file lock) and overwrite the stored credentials
179
+ - exception: reused external CLI credentials stay externally managed; Durar
180
+ re-reads the CLI auth store and never spends the copied refresh token itself
181
+
182
+ The refresh flow is automatic; you generally don't need to manage tokens manually.
183
+
184
+ ## Multiple accounts (profiles) + routing
185
+
186
+ Two patterns:
187
+
188
+ ### 1) Preferred: separate agents
189
+
190
+ If you want “personal” and “work” to never interact, use isolated agents (separate sessions + credentials + workspace):
191
+
192
+ ```bash
193
+ Durar agents add work
194
+ Durar agents add personal
195
+ ```
196
+
197
+ Then configure auth per-agent (wizard) and route chats to the right agent.
198
+
199
+ ### 2) Advanced: multiple profiles in one agent
200
+
201
+ `auth-profiles.json` supports multiple profile IDs for the same provider.
202
+
203
+ Pick which profile is used:
204
+
205
+ - globally via config ordering (`auth.order`)
206
+ - per-session via `/model ...@<profileId>`
207
+
208
+ Example (session override):
209
+
210
+ - `/model Opus@anthropic:work`
211
+
212
+ How to see what profile IDs exist:
213
+
214
+ - `Durar channels list --json` (shows `auth[]`)
215
+
216
+ Related docs:
217
+
218
+ - [/concepts/model-failover](/concepts/model-failover) (rotation + cooldown rules)
219
+ - [/tools/slash-commands](/tools/slash-commands) (command surface)
220
+
221
+ ## Related
222
+
223
+ - [Authentication](/gateway/authentication) — model provider auth overview
224
+ - [Secrets](/gateway/secrets) — credential storage and SecretRef
225
+ - [Configuration Reference](/gateway/configuration-reference#auth-storage) — auth config keys
@@ -0,0 +1,102 @@
1
+ ---
2
+ summary: "How Durar presence entries are produced, merged, and displayed"
3
+ read_when:
4
+ - Debugging the Instances tab
5
+ - Investigating duplicate or stale instance rows
6
+ - Changing gateway WS connect or system-event beacons
7
+ title: "Presence"
8
+ ---
9
+
10
+ # Presence
11
+
12
+ Durar “presence” is a lightweight, best‑effort view of:
13
+
14
+ - the **Gateway** itself, and
15
+ - **clients connected to the Gateway** (mac app, WebChat, CLI, etc.)
16
+
17
+ Presence is used primarily to render the macOS app’s **Instances** tab and to
18
+ provide quick operator visibility.
19
+
20
+ ## Presence fields (what shows up)
21
+
22
+ Presence entries are structured objects with fields like:
23
+
24
+ - `instanceId` (optional but strongly recommended): stable client identity (usually `connect.client.instanceId`)
25
+ - `host`: human‑friendly host name
26
+ - `ip`: best‑effort IP address
27
+ - `version`: client version string
28
+ - `deviceFamily` / `modelIdentifier`: hardware hints
29
+ - `mode`: `ui`, `webchat`, `cli`, `backend`, `probe`, `test`, `node`, ...
30
+ - `lastInputSeconds`: “seconds since last user input” (if known)
31
+ - `reason`: `self`, `connect`, `node-connected`, `periodic`, ...
32
+ - `ts`: last update timestamp (ms since epoch)
33
+
34
+ ## Producers (where presence comes from)
35
+
36
+ Presence entries are produced by multiple sources and **merged**.
37
+
38
+ ### 1) Gateway self entry
39
+
40
+ The Gateway always seeds a “self” entry at startup so UIs show the gateway host
41
+ even before any clients connect.
42
+
43
+ ### 2) WebSocket connect
44
+
45
+ Every WS client begins with a `connect` request. On successful handshake the
46
+ Gateway upserts a presence entry for that connection.
47
+
48
+ #### Why one-off CLI commands do not show up
49
+
50
+ The CLI often connects for short, one‑off commands. To avoid spamming the
51
+ Instances list, `client.mode === "cli"` is **not** turned into a presence entry.
52
+
53
+ ### 3) `system-event` beacons
54
+
55
+ Clients can send richer periodic beacons via the `system-event` method. The mac
56
+ app uses this to report host name, IP, and `lastInputSeconds`.
57
+
58
+ ### 4) Node connects (role: node)
59
+
60
+ When a node connects over the Gateway WebSocket with `role: node`, the Gateway
61
+ upserts a presence entry for that node (same flow as other WS clients).
62
+
63
+ ## Merge + dedupe rules (why `instanceId` matters)
64
+
65
+ Presence entries are stored in a single in‑memory map:
66
+
67
+ - Entries are keyed by a **presence key**.
68
+ - The best key is a stable `instanceId` (from `connect.client.instanceId`) that survives restarts.
69
+ - Keys are case‑insensitive.
70
+
71
+ If a client reconnects without a stable `instanceId`, it may show up as a
72
+ **duplicate** row.
73
+
74
+ ## TTL and bounded size
75
+
76
+ Presence is intentionally ephemeral:
77
+
78
+ - **TTL:** entries older than 5 minutes are pruned
79
+ - **Max entries:** 200 (oldest dropped first)
80
+
81
+ This keeps the list fresh and avoids unbounded memory growth.
82
+
83
+ ## Remote/tunnel caveat (loopback IPs)
84
+
85
+ When a client connects over an SSH tunnel / local port forward, the Gateway may
86
+ see the remote address as `127.0.0.1`. To avoid overwriting a good client‑reported
87
+ IP, loopback remote addresses are ignored.
88
+
89
+ ## Consumers
90
+
91
+ ### macOS Instances tab
92
+
93
+ The macOS app renders the output of `system-presence` and applies a small status
94
+ indicator (Active/Idle/Stale) based on the age of the last update.
95
+
96
+ ## Debugging tips
97
+
98
+ - To see the raw list, call `system-presence` against the Gateway.
99
+ - If you see duplicates:
100
+ - confirm clients send a stable `client.instanceId` in the handshake
101
+ - confirm periodic beacons use the same `instanceId`
102
+ - check whether the connection‑derived entry is missing `instanceId` (duplicates are expected)
@@ -0,0 +1,89 @@
1
+ ---
2
+ summary: "Command queue design that serializes inbound auto-reply runs"
3
+ read_when:
4
+ - Changing auto-reply execution or concurrency
5
+ title: "Command Queue"
6
+ ---
7
+
8
+ # Command Queue (2026-01-16)
9
+
10
+ We serialize inbound auto-reply runs (all channels) through a tiny in-process queue to prevent multiple agent runs from colliding, while still allowing safe parallelism across sessions.
11
+
12
+ ## Why
13
+
14
+ - Auto-reply runs can be expensive (LLM calls) and can collide when multiple inbound messages arrive close together.
15
+ - Serializing avoids competing for shared resources (session files, logs, CLI stdin) and reduces the chance of upstream rate limits.
16
+
17
+ ## How it works
18
+
19
+ - A lane-aware FIFO queue drains each lane with a configurable concurrency cap (default 1 for unconfigured lanes; main defaults to 4, subagent to 8).
20
+ - `runEmbeddedPiAgent` enqueues by **session key** (lane `session:<key>`) to guarantee only one active run per session.
21
+ - Each session run is then queued into a **global lane** (`main` by default) so overall parallelism is capped by `agents.defaults.maxConcurrent`.
22
+ - When verbose logging is enabled, queued runs emit a short notice if they waited more than ~2s before starting.
23
+ - Typing indicators still fire immediately on enqueue (when supported by the channel) so user experience is unchanged while we wait our turn.
24
+
25
+ ## Queue modes (per channel)
26
+
27
+ Inbound messages can steer the current run, wait for a followup turn, or do both:
28
+
29
+ - `steer`: inject immediately into the current run (cancels pending tool calls after the next tool boundary). If not streaming, falls back to followup.
30
+ - `followup`: enqueue for the next agent turn after the current run ends.
31
+ - `collect`: coalesce all queued messages into a **single** followup turn (default). If messages target different channels/threads, they drain individually to preserve routing.
32
+ - `steer-backlog` (aka `steer+backlog`): steer now **and** preserve the message for a followup turn.
33
+ - `interrupt` (legacy): abort the active run for that session, then run the newest message.
34
+ - `queue` (legacy alias): same as `steer`.
35
+
36
+ Steer-backlog means you can get a followup response after the steered run, so
37
+ streaming surfaces can look like duplicates. Prefer `collect`/`steer` if you want
38
+ one response per inbound message.
39
+ Send `/queue collect` as a standalone command (per-session) or set `messages.queue.byChannel.discord: "collect"`.
40
+
41
+ Defaults (when unset in config):
42
+
43
+ - All surfaces → `collect`
44
+
45
+ Configure globally or per channel via `messages.queue`:
46
+
47
+ ```json5
48
+ {
49
+ messages: {
50
+ queue: {
51
+ mode: "collect",
52
+ debounceMs: 1000,
53
+ cap: 20,
54
+ drop: "summarize",
55
+ byChannel: { discord: "collect" },
56
+ },
57
+ },
58
+ }
59
+ ```
60
+
61
+ ## Queue options
62
+
63
+ Options apply to `followup`, `collect`, and `steer-backlog` (and to `steer` when it falls back to followup):
64
+
65
+ - `debounceMs`: wait for quiet before starting a followup turn (prevents “continue, continue”).
66
+ - `cap`: max queued messages per session.
67
+ - `drop`: overflow policy (`old`, `new`, `summarize`).
68
+
69
+ Summarize keeps a short bullet list of dropped messages and injects it as a synthetic followup prompt.
70
+ Defaults: `debounceMs: 1000`, `cap: 20`, `drop: summarize`.
71
+
72
+ ## Per-session overrides
73
+
74
+ - Send `/queue <mode>` as a standalone command to store the mode for the current session.
75
+ - Options can be combined: `/queue collect debounce:2s cap:25 drop:summarize`
76
+ - `/queue default` or `/queue reset` clears the session override.
77
+
78
+ ## Scope and guarantees
79
+
80
+ - Applies to auto-reply agent runs across all inbound channels that use the gateway reply pipeline (WhatsApp web, Telegram, Slack, Discord, Signal, iMessage, webchat, etc.).
81
+ - Default lane (`main`) is process-wide for inbound + main heartbeats; set `agents.defaults.maxConcurrent` to allow multiple sessions in parallel.
82
+ - Additional lanes may exist (e.g. `cron`, `subagent`) so background jobs can run in parallel without blocking inbound replies. These detached runs are tracked as [background tasks](/automation/tasks).
83
+ - Per-session lanes guarantee that only one agent run touches a given session at a time.
84
+ - No external dependencies or background worker threads; pure TypeScript + promises.
85
+
86
+ ## Troubleshooting
87
+
88
+ - If commands seem stuck, enable verbose logs and look for “queued for …ms” lines to confirm the queue is draining.
89
+ - If you need queue depth, enable verbose logs and watch for queue timing lines.
@@ -0,0 +1,69 @@
1
+ ---
2
+ summary: "Retry policy for outbound provider calls"
3
+ read_when:
4
+ - Updating provider retry behavior or defaults
5
+ - Debugging provider send errors or rate limits
6
+ title: "Retry Policy"
7
+ ---
8
+
9
+ # Retry policy
10
+
11
+ ## Goals
12
+
13
+ - Retry per HTTP request, not per multi-step flow.
14
+ - Preserve ordering by retrying only the current step.
15
+ - Avoid duplicating non-idempotent operations.
16
+
17
+ ## Defaults
18
+
19
+ - Attempts: 3
20
+ - Max delay cap: 30000 ms
21
+ - Jitter: 0.1 (10 percent)
22
+ - Provider defaults:
23
+ - Telegram min delay: 400 ms
24
+ - Discord min delay: 500 ms
25
+
26
+ ## Behavior
27
+
28
+ ### Discord
29
+
30
+ - Retries only on rate-limit errors (HTTP 429).
31
+ - Uses Discord `retry_after` when available, otherwise exponential backoff.
32
+
33
+ ### Telegram
34
+
35
+ - Retries on transient errors (429, timeout, connect/reset/closed, temporarily unavailable).
36
+ - Uses `retry_after` when available, otherwise exponential backoff.
37
+ - Markdown parse errors are not retried; they fall back to plain text.
38
+
39
+ ## Configuration
40
+
41
+ Set retry policy per provider in `~/.Durar/Durar.json`:
42
+
43
+ ```json5
44
+ {
45
+ channels: {
46
+ telegram: {
47
+ retry: {
48
+ attempts: 3,
49
+ minDelayMs: 400,
50
+ maxDelayMs: 30000,
51
+ jitter: 0.1,
52
+ },
53
+ },
54
+ discord: {
55
+ retry: {
56
+ attempts: 3,
57
+ minDelayMs: 500,
58
+ maxDelayMs: 30000,
59
+ jitter: 0.1,
60
+ },
61
+ },
62
+ },
63
+ }
64
+ ```
65
+
66
+ ## Notes
67
+
68
+ - Retries apply per request (message send, media upload, reaction, poll, sticker).
69
+ - Composite flows do not retry completed steps.
@@ -0,0 +1,92 @@
1
+ ---
2
+ title: "Session Pruning"
3
+ summary: "Trimming old tool results to keep context lean and caching efficient"
4
+ read_when:
5
+ - You want to reduce context growth from tool outputs
6
+ - You want to understand Anthropic prompt cache optimization
7
+ ---
8
+
9
+ # Session Pruning
10
+
11
+ Session pruning trims **old tool results** from the context before each LLM
12
+ call. It reduces context bloat from accumulated tool outputs (exec results, file
13
+ reads, search results) without rewriting normal conversation text.
14
+
15
+ <Info>
16
+ Pruning is in-memory only -- it does not modify the on-disk session transcript.
17
+ Your full history is always preserved.
18
+ </Info>
19
+
20
+ ## Why it matters
21
+
22
+ Long sessions accumulate tool output that inflates the context window. This
23
+ increases cost and can force [compaction](/concepts/compaction) sooner than
24
+ necessary.
25
+
26
+ Pruning is especially valuable for **Anthropic prompt caching**. After the cache
27
+ TTL expires, the next request re-caches the full prompt. Pruning reduces the
28
+ cache-write size, directly lowering cost.
29
+
30
+ ## How it works
31
+
32
+ 1. Wait for the cache TTL to expire (default 5 minutes).
33
+ 2. Find old tool results for normal pruning (conversation text is left alone).
34
+ 3. **Soft-trim** oversized results -- keep the head and tail, insert `...`.
35
+ 4. **Hard-clear** the rest -- replace with a placeholder.
36
+ 5. Reset the TTL so follow-up requests reuse the fresh cache.
37
+
38
+ ## Legacy image cleanup
39
+
40
+ Durar also runs a separate idempotent cleanup for older legacy sessions that
41
+ persisted raw image blocks in history.
42
+
43
+ - It preserves the **3 most recent completed turns** byte-for-byte so prompt
44
+ cache prefixes for recent follow-ups stay stable.
45
+ - Older already-processed image blocks in `user` or `toolResult` history can be
46
+ replaced with `[image data removed - already processed by model]`.
47
+ - This is separate from normal cache-TTL pruning. It exists to stop repeated
48
+ image payloads from busting prompt caches on later turns.
49
+
50
+ ## Smart defaults
51
+
52
+ Durar auto-enables pruning for Anthropic profiles:
53
+
54
+ | Profile type | Pruning enabled | Heartbeat |
55
+ | ------------------------------------------------------- | --------------- | --------- |
56
+ | Anthropic OAuth/token auth (including Claude CLI reuse) | Yes | 1 hour |
57
+ | API key | Yes | 30 min |
58
+
59
+ If you set explicit values, Durar does not override them.
60
+
61
+ ## Enable or disable
62
+
63
+ Pruning is off by default for non-Anthropic providers. To enable:
64
+
65
+ ```json5
66
+ {
67
+ agents: {
68
+ defaults: {
69
+ contextPruning: { mode: "cache-ttl", ttl: "5m" },
70
+ },
71
+ },
72
+ }
73
+ ```
74
+
75
+ To disable: set `mode: "off"`.
76
+
77
+ ## Pruning vs compaction
78
+
79
+ | | Pruning | Compaction |
80
+ | ---------- | ------------------ | ----------------------- |
81
+ | **What** | Trims tool results | Summarizes conversation |
82
+ | **Saved?** | No (per-request) | Yes (in transcript) |
83
+ | **Scope** | Tool results only | Entire conversation |
84
+
85
+ They complement each other -- pruning keeps tool output lean between
86
+ compaction cycles.
87
+
88
+ ## Further reading
89
+
90
+ - [Compaction](/concepts/compaction) -- summarization-based context reduction
91
+ - [Gateway Configuration](/gateway/configuration) -- all pruning config knobs
92
+ (`contextPruning.*`)