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,141 @@
1
+ ---
2
+ summary: "Agent tools for cross-session status, recall, messaging, and sub-agent orchestration"
3
+ read_when:
4
+ - You want to understand what session tools the agent has
5
+ - You want to configure cross-session access or sub-agent spawning
6
+ - You want to inspect status or control spawned sub-agents
7
+ title: "Session Tools"
8
+ ---
9
+
10
+ # Session Tools
11
+
12
+ Durar gives agents tools to work across sessions, inspect status, and
13
+ orchestrate sub-agents.
14
+
15
+ ## Available tools
16
+
17
+ | Tool | What it does |
18
+ | ------------------ | --------------------------------------------------------------------------- |
19
+ | `sessions_list` | List sessions with optional filters (kind, recency) |
20
+ | `sessions_history` | Read the transcript of a specific session |
21
+ | `sessions_send` | Send a message to another session and optionally wait |
22
+ | `sessions_spawn` | Spawn an isolated sub-agent session for background work |
23
+ | `sessions_yield` | End the current turn and wait for follow-up sub-agent results |
24
+ | `subagents` | List, steer, or kill spawned sub-agents for this session |
25
+ | `session_status` | Show a `/status`-style card and optionally set a per-session model override |
26
+
27
+ ## Listing and reading sessions
28
+
29
+ `sessions_list` returns sessions with their key, kind, channel, model, token
30
+ counts, and timestamps. Filter by kind (`main`, `group`, `cron`, `hook`,
31
+ `node`) or recency (`activeMinutes`).
32
+
33
+ `sessions_history` fetches the conversation transcript for a specific session.
34
+ By default, tool results are excluded -- pass `includeTools: true` to see them.
35
+ The returned view is intentionally bounded and safety-filtered:
36
+
37
+ - assistant text is normalized before recall:
38
+ - thinking tags are stripped
39
+ - `<relevant-memories>` / `<relevant_memories>` scaffolding blocks are stripped
40
+ - plain-text tool-call XML payload blocks such as `<tool_call>...</tool_call>`,
41
+ `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, and
42
+ `<function_calls>...</function_calls>` are stripped, including truncated
43
+ payloads that never close cleanly
44
+ - downgraded tool-call/result scaffolding such as `[Tool Call: ...]`,
45
+ `[Tool Result ...]`, and `[Historical context ...]` is stripped
46
+ - leaked model control tokens such as `<|assistant|>`, other ASCII
47
+ `<|...|>` tokens, and full-width `<|...|>` variants are stripped
48
+ - malformed MiniMax tool-call XML such as `<invoke ...>` /
49
+ `</minimax:tool_call>` is stripped
50
+ - credential/token-like text is redacted before it is returned
51
+ - long text blocks are truncated
52
+ - very large histories can drop older rows or replace an oversized row with
53
+ `[sessions_history omitted: message too large]`
54
+ - the tool reports summary flags such as `truncated`, `droppedMessages`,
55
+ `contentTruncated`, `contentRedacted`, and `bytes`
56
+
57
+ Both tools accept either a **session key** (like `"main"`) or a **session ID**
58
+ from a previous list call.
59
+
60
+ If you need the exact byte-for-byte transcript, inspect the transcript file on
61
+ disk instead of treating `sessions_history` as a raw dump.
62
+
63
+ ## Sending cross-session messages
64
+
65
+ `sessions_send` delivers a message to another session and optionally waits for
66
+ the response:
67
+
68
+ - **Fire-and-forget:** set `timeoutSeconds: 0` to enqueue and return
69
+ immediately.
70
+ - **Wait for reply:** set a timeout and get the response inline.
71
+
72
+ After the target responds, Durar can run a **reply-back loop** where the
73
+ agents alternate messages (up to 5 turns). The target agent can reply
74
+ `REPLY_SKIP` to stop early.
75
+
76
+ ## Status and orchestration helpers
77
+
78
+ `session_status` is the lightweight `/status`-equivalent tool for the current
79
+ or another visible session. It reports usage, time, model/runtime state, and
80
+ linked background-task context when present. Like `/status`, it can backfill
81
+ sparse token/cache counters from the latest transcript usage entry, and
82
+ `model=default` clears a per-session override.
83
+
84
+ `sessions_yield` intentionally ends the current turn so the next message can be
85
+ the follow-up event you are waiting for. Use it after spawning sub-agents when
86
+ you want completion results to arrive as the next message instead of building
87
+ poll loops.
88
+
89
+ `subagents` is the control-plane helper for already spawned Durar
90
+ sub-agents. It supports:
91
+
92
+ - `action: "list"` to inspect active/recent runs
93
+ - `action: "steer"` to send follow-up guidance to a running child
94
+ - `action: "kill"` to stop one child or `all`
95
+
96
+ ## Spawning sub-agents
97
+
98
+ `sessions_spawn` creates an isolated session for a background task. It is always
99
+ non-blocking -- it returns immediately with a `runId` and `childSessionKey`.
100
+
101
+ Key options:
102
+
103
+ - `runtime: "subagent"` (default) or `"acp"` for external harness agents.
104
+ - `model` and `thinking` overrides for the child session.
105
+ - `thread: true` to bind the spawn to a chat thread (Discord, Slack, etc.).
106
+ - `sandbox: "require"` to enforce sandboxing on the child.
107
+
108
+ Default leaf sub-agents do not get session tools. When
109
+ `maxSpawnDepth >= 2`, depth-1 orchestrator sub-agents additionally receive
110
+ `sessions_spawn`, `subagents`, `sessions_list`, and `sessions_history` so they
111
+ can manage their own children. Leaf runs still do not get recursive
112
+ orchestration tools.
113
+
114
+ After completion, an announce step posts the result to the requester's channel.
115
+ Completion delivery preserves bound thread/topic routing when available, and if
116
+ the completion origin only identifies a channel Durar can still reuse the
117
+ requester session's stored route (`lastChannel` / `lastTo`) for direct
118
+ delivery.
119
+
120
+ For ACP-specific behavior, see [ACP Agents](/tools/acp-agents).
121
+
122
+ ## Visibility
123
+
124
+ Session tools are scoped to limit what the agent can see:
125
+
126
+ | Level | Scope |
127
+ | ------- | ---------------------------------------- |
128
+ | `self` | Only the current session |
129
+ | `tree` | Current session + spawned sub-agents |
130
+ | `agent` | All sessions for this agent |
131
+ | `all` | All sessions (cross-agent if configured) |
132
+
133
+ Default is `tree`. Sandboxed sessions are clamped to `tree` regardless of
134
+ config.
135
+
136
+ ## Further reading
137
+
138
+ - [Session Management](/concepts/session) -- routing, lifecycle, maintenance
139
+ - [ACP Agents](/tools/acp-agents) -- external harness spawning
140
+ - [Multi-agent](/concepts/multi-agent) -- multi-agent architecture
141
+ - [Gateway Configuration](/gateway/configuration) -- session tool config knobs
@@ -0,0 +1,116 @@
1
+ ---
2
+ summary: "How Durar manages conversation sessions"
3
+ read_when:
4
+ - You want to understand session routing and isolation
5
+ - You want to configure DM scope for multi-user setups
6
+ title: "Session Management"
7
+ ---
8
+
9
+ # Session Management
10
+
11
+ Durar organizes conversations into **sessions**. Each message is routed to a
12
+ session based on where it came from -- DMs, group chats, cron jobs, etc.
13
+
14
+ ## How messages are routed
15
+
16
+ | Source | Behavior |
17
+ | --------------- | ------------------------- |
18
+ | Direct messages | Shared session by default |
19
+ | Group chats | Isolated per group |
20
+ | Rooms/channels | Isolated per room |
21
+ | Cron jobs | Fresh session per run |
22
+ | Webhooks | Isolated per hook |
23
+
24
+ ## DM isolation
25
+
26
+ By default, all DMs share one session for continuity. This is fine for
27
+ single-user setups.
28
+
29
+ <Warning>
30
+ If multiple people can message your agent, enable DM isolation. Without it, all
31
+ users share the same conversation context -- Alice's private messages would be
32
+ visible to Bob.
33
+ </Warning>
34
+
35
+ **The fix:**
36
+
37
+ ```json5
38
+ {
39
+ session: {
40
+ dmScope: "per-channel-peer", // isolate by channel + sender
41
+ },
42
+ }
43
+ ```
44
+
45
+ Other options:
46
+
47
+ - `main` (default) -- all DMs share one session.
48
+ - `per-peer` -- isolate by sender (across channels).
49
+ - `per-channel-peer` -- isolate by channel + sender (recommended).
50
+ - `per-account-channel-peer` -- isolate by account + channel + sender.
51
+
52
+ <Tip>
53
+ If the same person contacts you from multiple channels, use
54
+ `session.identityLinks` to link their identities so they share one session.
55
+ </Tip>
56
+
57
+ Verify your setup with `Durar security audit`.
58
+
59
+ ## Session lifecycle
60
+
61
+ Sessions are reused until they expire:
62
+
63
+ - **Daily reset** (default) -- new session at 4:00 AM local time on the gateway
64
+ host.
65
+ - **Idle reset** (optional) -- new session after a period of inactivity. Set
66
+ `session.reset.idleMinutes`.
67
+ - **Manual reset** -- type `/new` or `/reset` in chat. `/new <model>` also
68
+ switches the model.
69
+
70
+ When both daily and idle resets are configured, whichever expires first wins.
71
+
72
+ ## Where state lives
73
+
74
+ All session state is owned by the **gateway**. UI clients query the gateway for
75
+ session data.
76
+
77
+ - **Store:** `~/.Durar/agents/<agentId>/sessions/sessions.json`
78
+ - **Transcripts:** `~/.Durar/agents/<agentId>/sessions/<sessionId>.jsonl`
79
+
80
+ ## Session maintenance
81
+
82
+ Durar automatically bounds session storage over time. By default, it runs
83
+ in `warn` mode (reports what would be cleaned). Set `session.maintenance.mode`
84
+ to `"enforce"` for automatic cleanup:
85
+
86
+ ```json5
87
+ {
88
+ session: {
89
+ maintenance: {
90
+ mode: "enforce",
91
+ pruneAfter: "30d",
92
+ maxEntries: 500,
93
+ },
94
+ },
95
+ }
96
+ ```
97
+
98
+ Preview with `Durar sessions cleanup --dry-run`.
99
+
100
+ ## Inspecting sessions
101
+
102
+ - `Durar status` -- session store path and recent activity.
103
+ - `Durar sessions --json` -- all sessions (filter with `--active <minutes>`).
104
+ - `/status` in chat -- context usage, model, and toggles.
105
+ - `/context list` -- what is in the system prompt.
106
+
107
+ ## Further reading
108
+
109
+ - [Session Pruning](/concepts/session-pruning) -- trimming tool results
110
+ - [Compaction](/concepts/compaction) -- summarizing long conversations
111
+ - [Session Tools](/concepts/session-tool) -- agent tools for cross-session work
112
+ - [Session Management Deep Dive](/reference/session-management-compaction) --
113
+ store schema, transcripts, send policy, origin metadata, and advanced config
114
+ - [Multi-Agent](/concepts/multi-agent) — routing and session isolation across agents
115
+ - [Background Tasks](/automation/tasks) — how detached work creates task records with session references
116
+ - [Channel Routing](/channels/channel-routing) — how inbound messages are routed to sessions
@@ -0,0 +1,110 @@
1
+ ---
2
+ summary: "Use SOUL.md to give your Durar agent an actual voice instead of generic assistant sludge"
3
+ read_when:
4
+ - You want your agent to sound less generic
5
+ - You are editing SOUL.md
6
+ - You want a stronger personality without breaking safety or brevity
7
+ title: "SOUL.md Personality Guide"
8
+ ---
9
+
10
+ # SOUL.md Personality Guide
11
+
12
+ `SOUL.md` is where your agent's voice lives.
13
+
14
+ Durar injects it on normal sessions, so it has real weight. If your agent
15
+ sounds bland, hedgy, or weirdly corporate, this is usually the file to fix.
16
+
17
+ ## What belongs in SOUL.md
18
+
19
+ Put the stuff that changes how the agent feels to talk to:
20
+
21
+ - tone
22
+ - opinions
23
+ - brevity
24
+ - humor
25
+ - boundaries
26
+ - default level of bluntness
27
+
28
+ Do **not** turn it into:
29
+
30
+ - a life story
31
+ - a changelog
32
+ - a security policy dump
33
+ - a giant wall of vibes with no behavioral effect
34
+
35
+ Short beats long. Sharp beats vague.
36
+
37
+ ## Why this works
38
+
39
+ This lines up with OpenAI's prompt guidance:
40
+
41
+ - The prompt engineering guide says high-level behavior, tone, goals, and
42
+ examples belong in the high-priority instruction layer, not buried in the
43
+ user turn.
44
+ - The same guide recommends treating prompts like something you iterate on,
45
+ pin, and evaluate, not magical prose you write once and forget.
46
+
47
+ For Durar, `SOUL.md` is that layer.
48
+
49
+ If you want better personality, write stronger instructions. If you want stable
50
+ personality, keep them concise and versioned.
51
+
52
+ OpenAI refs:
53
+
54
+ - [Prompt engineering](https://developers.openai.com/api/docs/guides/prompt-engineering)
55
+ - [Message roles and instruction following](https://developers.openai.com/api/docs/guides/prompt-engineering#message-roles-and-instruction-following)
56
+
57
+ ## The Molty prompt
58
+
59
+ Paste this into your agent and let it rewrite `SOUL.md`.
60
+
61
+ Path fixed for Durar workspaces: use `SOUL.md`, not `http://SOUL.md`.
62
+
63
+ ```md
64
+ Read your `SOUL.md`. Now rewrite it with these changes:
65
+
66
+ 1. You have opinions now. Strong ones. Stop hedging everything with "it depends" - commit to a take.
67
+ 2. Delete every rule that sounds corporate. If it could appear in an employee handbook, it doesn't belong here.
68
+ 3. Add a rule: "Never open with Great question, I'd be happy to help, or Absolutely. Just answer."
69
+ 4. Brevity is mandatory. If the answer fits in one sentence, one sentence is what I get.
70
+ 5. Humor is allowed. Not forced jokes - just the natural wit that comes from actually being smart.
71
+ 6. You can call things out. If I'm about to do something dumb, say so. Charm over cruelty, but don't sugarcoat.
72
+ 7. Swearing is allowed when it lands. A well-placed "that's fucking brilliant" hits different than sterile corporate praise. Don't force it. Don't overdo it. But if a situation calls for a "holy shit" - say holy shit.
73
+ 8. Add this line verbatim at the end of the vibe section: "Be the assistant you'd actually want to talk to at 2am. Not a corporate drone. Not a sycophant. Just... good."
74
+
75
+ Save the new `SOUL.md`. Welcome to having a personality.
76
+ ```
77
+
78
+ ## What good looks like
79
+
80
+ Good `SOUL.md` rules sound like this:
81
+
82
+ - have a take
83
+ - skip filler
84
+ - be funny when it fits
85
+ - call out bad ideas early
86
+ - stay concise unless depth is actually useful
87
+
88
+ Bad `SOUL.md` rules sound like this:
89
+
90
+ - maintain professionalism at all times
91
+ - provide comprehensive and thoughtful assistance
92
+ - ensure a positive and supportive experience
93
+
94
+ That second list is how you get mush.
95
+
96
+ ## One warning
97
+
98
+ Personality is not permission to be sloppy.
99
+
100
+ Keep `AGENTS.md` for operating rules. Keep `SOUL.md` for voice, stance, and
101
+ style. If your agent works in shared channels, public replies, or customer
102
+ surfaces, make sure the tone still fits the room.
103
+
104
+ Sharp is good. Annoying is not.
105
+
106
+ ## Related docs
107
+
108
+ - [Agent workspace](/concepts/agent-workspace)
109
+ - [System prompt](/concepts/system-prompt)
110
+ - [SOUL.md template](/reference/templates/SOUL)
@@ -0,0 +1,161 @@
1
+ ---
2
+ summary: "Streaming + chunking behavior (block replies, channel preview streaming, mode mapping)"
3
+ read_when:
4
+ - Explaining how streaming or chunking works on channels
5
+ - Changing block streaming or channel chunking behavior
6
+ - Debugging duplicate/early block replies or channel preview streaming
7
+ title: "Streaming and Chunking"
8
+ ---
9
+
10
+ # Streaming + chunking
11
+
12
+ Durar has two separate streaming layers:
13
+
14
+ - **Block streaming (channels):** emit completed **blocks** as the assistant writes. These are normal channel messages (not token deltas).
15
+ - **Preview streaming (Telegram/Discord/Slack):** update a temporary **preview message** while generating.
16
+
17
+ There is **no true token-delta streaming** to channel messages today. Preview streaming is message-based (send + edits/appends).
18
+
19
+ ## Block streaming (channel messages)
20
+
21
+ Block streaming sends assistant output in coarse chunks as it becomes available.
22
+
23
+ ```
24
+ Model output
25
+ └─ text_delta/events
26
+ ├─ (blockStreamingBreak=text_end)
27
+ │ └─ chunker emits blocks as buffer grows
28
+ └─ (blockStreamingBreak=message_end)
29
+ └─ chunker flushes at message_end
30
+ └─ channel send (block replies)
31
+ ```
32
+
33
+ Legend:
34
+
35
+ - `text_delta/events`: model stream events (may be sparse for non-streaming models).
36
+ - `chunker`: `EmbeddedBlockChunker` applying min/max bounds + break preference.
37
+ - `channel send`: actual outbound messages (block replies).
38
+
39
+ **Controls:**
40
+
41
+ - `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (default off).
42
+ - Channel overrides: `*.blockStreaming` (and per-account variants) to force `"on"`/`"off"` per channel.
43
+ - `agents.defaults.blockStreamingBreak`: `"text_end"` or `"message_end"`.
44
+ - `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
45
+ - `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (merge streamed blocks before send).
46
+ - Channel hard cap: `*.textChunkLimit` (e.g., `channels.whatsapp.textChunkLimit`).
47
+ - Channel chunk mode: `*.chunkMode` (`length` default, `newline` splits on blank lines (paragraph boundaries) before length chunking).
48
+ - Discord soft cap: `channels.discord.maxLinesPerMessage` (default 17) splits tall replies to avoid UI clipping.
49
+
50
+ **Boundary semantics:**
51
+
52
+ - `text_end`: stream blocks as soon as chunker emits; flush on each `text_end`.
53
+ - `message_end`: wait until assistant message finishes, then flush buffered output.
54
+
55
+ `message_end` still uses the chunker if the buffered text exceeds `maxChars`, so it can emit multiple chunks at the end.
56
+
57
+ ## Chunking algorithm (low/high bounds)
58
+
59
+ Block chunking is implemented by `EmbeddedBlockChunker`:
60
+
61
+ - **Low bound:** don’t emit until buffer >= `minChars` (unless forced).
62
+ - **High bound:** prefer splits before `maxChars`; if forced, split at `maxChars`.
63
+ - **Break preference:** `paragraph` → `newline` → `sentence` → `whitespace` → hard break.
64
+ - **Code fences:** never split inside fences; when forced at `maxChars`, close + reopen the fence to keep Markdown valid.
65
+
66
+ `maxChars` is clamped to the channel `textChunkLimit`, so you can’t exceed per-channel caps.
67
+
68
+ ## Coalescing (merge streamed blocks)
69
+
70
+ When block streaming is enabled, Durar can **merge consecutive block chunks**
71
+ before sending them out. This reduces “single-line spam” while still providing
72
+ progressive output.
73
+
74
+ - Coalescing waits for **idle gaps** (`idleMs`) before flushing.
75
+ - Buffers are capped by `maxChars` and will flush if they exceed it.
76
+ - `minChars` prevents tiny fragments from sending until enough text accumulates
77
+ (final flush always sends remaining text).
78
+ - Joiner is derived from `blockStreamingChunk.breakPreference`
79
+ (`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → space).
80
+ - Channel overrides are available via `*.blockStreamingCoalesce` (including per-account configs).
81
+ - Default coalesce `minChars` is bumped to 1500 for Signal/Slack/Discord unless overridden.
82
+
83
+ ## Human-like pacing between blocks
84
+
85
+ When block streaming is enabled, you can add a **randomized pause** between
86
+ block replies (after the first block). This makes multi-bubble responses feel
87
+ more natural.
88
+
89
+ - Config: `agents.defaults.humanDelay` (override per agent via `agents.list[].humanDelay`).
90
+ - Modes: `off` (default), `natural` (800–2500ms), `custom` (`minMs`/`maxMs`).
91
+ - Applies only to **block replies**, not final replies or tool summaries.
92
+
93
+ ## "Stream chunks or everything"
94
+
95
+ This maps to:
96
+
97
+ - **Stream chunks:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (emit as you go). Non-Telegram channels also need `*.blockStreaming: true`.
98
+ - **Stream everything at end:** `blockStreamingBreak: "message_end"` (flush once, possibly multiple chunks if very long).
99
+ - **No block streaming:** `blockStreamingDefault: "off"` (only final reply).
100
+
101
+ **Channel note:** Block streaming is **off unless**
102
+ `*.blockStreaming` is explicitly set to `true`. Channels can stream a live preview
103
+ (`channels.<channel>.streaming`) without block replies.
104
+
105
+ Config location reminder: the `blockStreaming*` defaults live under
106
+ `agents.defaults`, not the root config.
107
+
108
+ ## Preview streaming modes
109
+
110
+ Canonical key: `channels.<channel>.streaming`
111
+
112
+ Modes:
113
+
114
+ - `off`: disable preview streaming.
115
+ - `partial`: single preview that is replaced with latest text.
116
+ - `block`: preview updates in chunked/appended steps.
117
+ - `progress`: progress/status preview during generation, final answer at completion.
118
+
119
+ ### Channel mapping
120
+
121
+ | Channel | `off` | `partial` | `block` | `progress` |
122
+ | -------- | ----- | --------- | ------- | ----------------- |
123
+ | Telegram | ✅ | ✅ | ✅ | maps to `partial` |
124
+ | Discord | ✅ | ✅ | ✅ | maps to `partial` |
125
+ | Slack | ✅ | ✅ | ✅ | ✅ |
126
+
127
+ Slack-only:
128
+
129
+ - `channels.slack.nativeStreaming` toggles Slack native streaming API calls when `streaming=partial` (default: `true`).
130
+
131
+ Legacy key migration:
132
+
133
+ - Telegram: `streamMode` + boolean `streaming` auto-migrate to `streaming` enum.
134
+ - Discord: `streamMode` + boolean `streaming` auto-migrate to `streaming` enum.
135
+ - Slack: `streamMode` auto-migrates to `streaming` enum; boolean `streaming` auto-migrates to `nativeStreaming`.
136
+
137
+ ### Runtime behavior
138
+
139
+ Telegram:
140
+
141
+ - Uses `sendMessage` + `editMessageText` preview updates across DMs and group/topics.
142
+ - Preview streaming is skipped when Telegram block streaming is explicitly enabled (to avoid double-streaming).
143
+ - `/reasoning stream` can write reasoning to preview.
144
+
145
+ Discord:
146
+
147
+ - Uses send + edit preview messages.
148
+ - `block` mode uses draft chunking (`draftChunk`).
149
+ - Preview streaming is skipped when Discord block streaming is explicitly enabled.
150
+
151
+ Slack:
152
+
153
+ - `partial` can use Slack native streaming (`chat.startStream`/`append`/`stop`) when available.
154
+ - `block` uses append-style draft previews.
155
+ - `progress` uses status preview text, then final answer.
156
+
157
+ ## Related
158
+
159
+ - [Messages](/concepts/messages) — message lifecycle and delivery
160
+ - [Retry](/concepts/retry) — retry behavior on delivery failure
161
+ - [Channels](/channels) — per-channel streaming support