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,119 @@
1
+ ---
2
+ title: "Creating Skills"
3
+ summary: "Build and test custom workspace skills with SKILL.md"
4
+ read_when:
5
+ - You are creating a new custom skill in your workspace
6
+ - You need a quick starter workflow for SKILL.md-based skills
7
+ ---
8
+
9
+ # Creating Skills
10
+
11
+ Skills teach the agent how and when to use tools. Each skill is a directory
12
+ containing a `SKILL.md` file with YAML frontmatter and markdown instructions.
13
+
14
+ For how skills are loaded and prioritized, see [Skills](/tools/skills).
15
+
16
+ ## Create your first skill
17
+
18
+ <Steps>
19
+ <Step title="Create the skill directory">
20
+ Skills live in your workspace. Create a new folder:
21
+
22
+ ```bash
23
+ mkdir -p ~/.Durar/workspace/skills/hello-world
24
+ ```
25
+
26
+ </Step>
27
+
28
+ <Step title="Write SKILL.md">
29
+ Create `SKILL.md` inside that directory. The frontmatter defines metadata,
30
+ and the markdown body contains instructions for the agent.
31
+
32
+ ```markdown
33
+ ---
34
+ name: hello_world
35
+ description: A simple skill that says hello.
36
+ ---
37
+
38
+ # Hello World Skill
39
+
40
+ When the user asks for a greeting, use the `echo` tool to say
41
+ "Hello from your custom skill!".
42
+ ```
43
+
44
+ </Step>
45
+
46
+ <Step title="Add tools (optional)">
47
+ You can define custom tool schemas in the frontmatter or instruct the agent
48
+ to use existing system tools (like `exec` or `browser`). Skills can also
49
+ ship inside plugins alongside the tools they document.
50
+
51
+ </Step>
52
+
53
+ <Step title="Load the skill">
54
+ Start a new session so Durar picks up the skill:
55
+
56
+ ```bash
57
+ # From chat
58
+ /new
59
+
60
+ # Or restart the gateway
61
+ Durar gateway restart
62
+ ```
63
+
64
+ Verify the skill loaded:
65
+
66
+ ```bash
67
+ Durar skills list
68
+ ```
69
+
70
+ </Step>
71
+
72
+ <Step title="Test it">
73
+ Send a message that should trigger the skill:
74
+
75
+ ```bash
76
+ Durar agent --message "give me a greeting"
77
+ ```
78
+
79
+ Or just chat with the agent and ask for a greeting.
80
+
81
+ </Step>
82
+ </Steps>
83
+
84
+ ## Skill metadata reference
85
+
86
+ The YAML frontmatter supports these fields:
87
+
88
+ | Field | Required | Description |
89
+ | ----------------------------------- | -------- | ------------------------------------------- |
90
+ | `name` | Yes | Unique identifier (snake_case) |
91
+ | `description` | Yes | One-line description shown to the agent |
92
+ | `metadata.Durar.os` | No | OS filter (`["darwin"]`, `["linux"]`, etc.) |
93
+ | `metadata.Durar.requires.bins` | No | Required binaries on PATH |
94
+ | `metadata.Durar.requires.config` | No | Required config keys |
95
+
96
+ ## Best practices
97
+
98
+ - **Be concise** — instruct the model on _what_ to do, not how to be an AI
99
+ - **Safety first** — if your skill uses `exec`, ensure prompts don't allow arbitrary command injection from untrusted input
100
+ - **Test locally** — use `Durar agent --message "..."` to test before sharing
101
+ - **Use Durar Gateway** — browse and contribute skills at [Durar Gateway](https://Durar Gateway.ai)
102
+
103
+ ## Where skills live
104
+
105
+ | Location | Precedence | Scope |
106
+ | ------------------------------- | ---------- | --------------------- |
107
+ | `\<workspace\>/skills/` | Highest | Per-agent |
108
+ | `\<workspace\>/.agents/skills/` | High | Per-workspace agent |
109
+ | `~/.agents/skills/` | Medium | Shared agent profile |
110
+ | `~/.Durar/skills/` | Medium | Shared (all agents) |
111
+ | Bundled (shipped with Durar) | Low | Global |
112
+ | `skills.load.extraDirs` | Lowest | Custom shared folders |
113
+
114
+ ## Related
115
+
116
+ - [Skills reference](/tools/skills) — loading, precedence, and gating rules
117
+ - [Skills config](/tools/skills-config) — `skills.*` config schema
118
+ - [Durar Gateway](/tools/Durar Gateway) — public skill registry
119
+ - [Building Plugins](/plugins/building-plugins) — plugins can ship skills
@@ -0,0 +1,434 @@
1
+ ---
2
+ title: "Diffs"
3
+ summary: "Read-only diff viewer and file renderer for agents (optional plugin tool)"
4
+ read_when:
5
+ - You want agents to show code or markdown edits as diffs
6
+ - You want a canvas-ready viewer URL or a rendered diff file
7
+ - You need controlled, temporary diff artifacts with secure defaults
8
+ ---
9
+
10
+ # Diffs
11
+
12
+ `diffs` is an optional plugin tool with short built-in system guidance and a companion skill that turns change content into a read-only diff artifact for agents.
13
+
14
+ It accepts either:
15
+
16
+ - `before` and `after` text
17
+ - a unified `patch`
18
+
19
+ It can return:
20
+
21
+ - a gateway viewer URL for canvas presentation
22
+ - a rendered file path (PNG or PDF) for message delivery
23
+ - both outputs in one call
24
+
25
+ When enabled, the plugin prepends concise usage guidance into system-prompt space and also exposes a detailed skill for cases where the agent needs fuller instructions.
26
+
27
+ ## Quick start
28
+
29
+ 1. Enable the plugin.
30
+ 2. Call `diffs` with `mode: "view"` for canvas-first flows.
31
+ 3. Call `diffs` with `mode: "file"` for chat file delivery flows.
32
+ 4. Call `diffs` with `mode: "both"` when you need both artifacts.
33
+
34
+ ## Enable the plugin
35
+
36
+ ```json5
37
+ {
38
+ plugins: {
39
+ entries: {
40
+ diffs: {
41
+ enabled: true,
42
+ },
43
+ },
44
+ },
45
+ }
46
+ ```
47
+
48
+ ## Disable built-in system guidance
49
+
50
+ If you want to keep the `diffs` tool enabled but disable its built-in system-prompt guidance, set `plugins.entries.diffs.hooks.allowPromptInjection` to `false`:
51
+
52
+ ```json5
53
+ {
54
+ plugins: {
55
+ entries: {
56
+ diffs: {
57
+ enabled: true,
58
+ hooks: {
59
+ allowPromptInjection: false,
60
+ },
61
+ },
62
+ },
63
+ },
64
+ }
65
+ ```
66
+
67
+ This blocks the diffs plugin's `before_prompt_build` hook while keeping the plugin, tool, and companion skill available.
68
+
69
+ If you want to disable both the guidance and the tool, disable the plugin instead.
70
+
71
+ ## Typical agent workflow
72
+
73
+ 1. Agent calls `diffs`.
74
+ 2. Agent reads `details` fields.
75
+ 3. Agent either:
76
+ - opens `details.viewerUrl` with `canvas present`
77
+ - sends `details.filePath` with `message` using `path` or `filePath`
78
+ - does both
79
+
80
+ ## Input examples
81
+
82
+ Before and after:
83
+
84
+ ```json
85
+ {
86
+ "before": "# Hello\n\nOne",
87
+ "after": "# Hello\n\nTwo",
88
+ "path": "docs/example.md",
89
+ "mode": "view"
90
+ }
91
+ ```
92
+
93
+ Patch:
94
+
95
+ ```json
96
+ {
97
+ "patch": "diff --git a/src/example.ts b/src/example.ts\n--- a/src/example.ts\n+++ b/src/example.ts\n@@ -1 +1 @@\n-const x = 1;\n+const x = 2;\n",
98
+ "mode": "both"
99
+ }
100
+ ```
101
+
102
+ ## Tool input reference
103
+
104
+ All fields are optional unless noted:
105
+
106
+ - `before` (`string`): original text. Required with `after` when `patch` is omitted.
107
+ - `after` (`string`): updated text. Required with `before` when `patch` is omitted.
108
+ - `patch` (`string`): unified diff text. Mutually exclusive with `before` and `after`.
109
+ - `path` (`string`): display filename for before and after mode.
110
+ - `lang` (`string`): language override hint for before and after mode. Unknown values fall back to plain text.
111
+ - `title` (`string`): viewer title override.
112
+ - `mode` (`"view" | "file" | "both"`): output mode. Defaults to plugin default `defaults.mode`.
113
+ Deprecated alias: `"image"` behaves like `"file"` and is still accepted for backward compatibility.
114
+ - `theme` (`"light" | "dark"`): viewer theme. Defaults to plugin default `defaults.theme`.
115
+ - `layout` (`"unified" | "split"`): diff layout. Defaults to plugin default `defaults.layout`.
116
+ - `expandUnchanged` (`boolean`): expand unchanged sections when full context is available. Per-call option only (not a plugin default key).
117
+ - `fileFormat` (`"png" | "pdf"`): rendered file format. Defaults to plugin default `defaults.fileFormat`.
118
+ - `fileQuality` (`"standard" | "hq" | "print"`): quality preset for PNG or PDF rendering.
119
+ - `fileScale` (`number`): device scale override (`1`-`4`).
120
+ - `fileMaxWidth` (`number`): max render width in CSS pixels (`640`-`2400`).
121
+ - `ttlSeconds` (`number`): artifact TTL in seconds for viewer and standalone file outputs. Default 1800, max 21600.
122
+ - `baseUrl` (`string`): viewer URL origin override. Overrides plugin `viewerBaseUrl`. Must be `http` or `https`, no query/hash.
123
+
124
+ Legacy input aliases still accepted for backward compatibility:
125
+
126
+ - `format` -> `fileFormat`
127
+ - `imageFormat` -> `fileFormat`
128
+ - `imageQuality` -> `fileQuality`
129
+ - `imageScale` -> `fileScale`
130
+ - `imageMaxWidth` -> `fileMaxWidth`
131
+
132
+ Validation and limits:
133
+
134
+ - `before` and `after` each max 512 KiB.
135
+ - `patch` max 2 MiB.
136
+ - `path` max 2048 bytes.
137
+ - `lang` max 128 bytes.
138
+ - `title` max 1024 bytes.
139
+ - Patch complexity cap: max 128 files and 120000 total lines.
140
+ - `patch` and `before` or `after` together are rejected.
141
+ - Rendered file safety limits (apply to PNG and PDF):
142
+ - `fileQuality: "standard"`: max 8 MP (8,000,000 rendered pixels).
143
+ - `fileQuality: "hq"`: max 14 MP (14,000,000 rendered pixels).
144
+ - `fileQuality: "print"`: max 24 MP (24,000,000 rendered pixels).
145
+ - PDF also has a max of 50 pages.
146
+
147
+ ## Output details contract
148
+
149
+ The tool returns structured metadata under `details`.
150
+
151
+ Shared fields for modes that create a viewer:
152
+
153
+ - `artifactId`
154
+ - `viewerUrl`
155
+ - `viewerPath`
156
+ - `title`
157
+ - `expiresAt`
158
+ - `inputKind`
159
+ - `fileCount`
160
+ - `mode`
161
+ - `context` (`agentId`, `sessionId`, `messageChannel`, `agentAccountId` when available)
162
+
163
+ File fields when PNG or PDF is rendered:
164
+
165
+ - `artifactId`
166
+ - `expiresAt`
167
+ - `filePath`
168
+ - `path` (same value as `filePath`, for message tool compatibility)
169
+ - `fileBytes`
170
+ - `fileFormat`
171
+ - `fileQuality`
172
+ - `fileScale`
173
+ - `fileMaxWidth`
174
+
175
+ Compatibility aliases also returned for existing callers:
176
+
177
+ - `format` (same value as `fileFormat`)
178
+ - `imagePath` (same value as `filePath`)
179
+ - `imageBytes` (same value as `fileBytes`)
180
+ - `imageQuality` (same value as `fileQuality`)
181
+ - `imageScale` (same value as `fileScale`)
182
+ - `imageMaxWidth` (same value as `fileMaxWidth`)
183
+
184
+ Mode behavior summary:
185
+
186
+ - `mode: "view"`: viewer fields only.
187
+ - `mode: "file"`: file fields only, no viewer artifact.
188
+ - `mode: "both"`: viewer fields plus file fields. If file rendering fails, viewer still returns with `fileError` and compatibility alias `imageError`.
189
+
190
+ ## Collapsed unchanged sections
191
+
192
+ - The viewer can show rows like `N unmodified lines`.
193
+ - Expand controls on those rows are conditional and not guaranteed for every input kind.
194
+ - Expand controls appear when the rendered diff has expandable context data, which is typical for before and after input.
195
+ - For many unified patch inputs, omitted context bodies are not available in the parsed patch hunks, so the row can appear without expand controls. This is expected behavior.
196
+ - `expandUnchanged` applies only when expandable context exists.
197
+
198
+ ## Plugin defaults
199
+
200
+ Set plugin-wide defaults in `~/.Durar/Durar.json`:
201
+
202
+ ```json5
203
+ {
204
+ plugins: {
205
+ entries: {
206
+ diffs: {
207
+ enabled: true,
208
+ config: {
209
+ defaults: {
210
+ fontFamily: "Fira Code",
211
+ fontSize: 15,
212
+ lineSpacing: 1.6,
213
+ layout: "unified",
214
+ showLineNumbers: true,
215
+ diffIndicators: "bars",
216
+ wordWrap: true,
217
+ background: true,
218
+ theme: "dark",
219
+ fileFormat: "png",
220
+ fileQuality: "standard",
221
+ fileScale: 2,
222
+ fileMaxWidth: 960,
223
+ mode: "both",
224
+ },
225
+ },
226
+ },
227
+ },
228
+ },
229
+ }
230
+ ```
231
+
232
+ Supported defaults:
233
+
234
+ - `fontFamily`
235
+ - `fontSize`
236
+ - `lineSpacing`
237
+ - `layout`
238
+ - `showLineNumbers`
239
+ - `diffIndicators`
240
+ - `wordWrap`
241
+ - `background`
242
+ - `theme`
243
+ - `fileFormat`
244
+ - `fileQuality`
245
+ - `fileScale`
246
+ - `fileMaxWidth`
247
+ - `mode`
248
+
249
+ Explicit tool parameters override these defaults.
250
+
251
+ Persistent viewer URL config:
252
+
253
+ - `viewerBaseUrl` (`string`, optional)
254
+ - Plugin-owned fallback for returned viewer links when a tool call does not pass `baseUrl`.
255
+ - Must be `http` or `https`, no query/hash.
256
+
257
+ Example:
258
+
259
+ ```json5
260
+ {
261
+ plugins: {
262
+ entries: {
263
+ diffs: {
264
+ enabled: true,
265
+ config: {
266
+ viewerBaseUrl: "https://gateway.example.com/Durar",
267
+ },
268
+ },
269
+ },
270
+ },
271
+ }
272
+ ```
273
+
274
+ ## Security config
275
+
276
+ - `security.allowRemoteViewer` (`boolean`, default `false`)
277
+ - `false`: non-loopback requests to viewer routes are denied.
278
+ - `true`: remote viewers are allowed if tokenized path is valid.
279
+
280
+ Example:
281
+
282
+ ```json5
283
+ {
284
+ plugins: {
285
+ entries: {
286
+ diffs: {
287
+ enabled: true,
288
+ config: {
289
+ security: {
290
+ allowRemoteViewer: false,
291
+ },
292
+ },
293
+ },
294
+ },
295
+ },
296
+ }
297
+ ```
298
+
299
+ ## Artifact lifecycle and storage
300
+
301
+ - Artifacts are stored under the temp subfolder: `$TMPDIR/Durar-diffs`.
302
+ - Viewer artifact metadata contains:
303
+ - random artifact ID (20 hex chars)
304
+ - random token (48 hex chars)
305
+ - `createdAt` and `expiresAt`
306
+ - stored `viewer.html` path
307
+ - Default artifact TTL is 30 minutes when not specified.
308
+ - Maximum accepted viewer TTL is 6 hours.
309
+ - Cleanup runs opportunistically after artifact creation.
310
+ - Expired artifacts are deleted.
311
+ - Fallback cleanup removes stale folders older than 24 hours when metadata is missing.
312
+
313
+ ## Viewer URL and network behavior
314
+
315
+ Viewer route:
316
+
317
+ - `/plugins/diffs/view/{artifactId}/{token}`
318
+
319
+ Viewer assets:
320
+
321
+ - `/plugins/diffs/assets/viewer.js`
322
+ - `/plugins/diffs/assets/viewer-runtime.js`
323
+
324
+ The viewer document resolves those assets relative to the viewer URL, so an optional `baseUrl` path prefix is preserved for both asset requests too.
325
+
326
+ URL construction behavior:
327
+
328
+ - If tool-call `baseUrl` is provided, it is used after strict validation.
329
+ - Else if plugin `viewerBaseUrl` is configured, it is used.
330
+ - Without either override, viewer URL defaults to loopback `127.0.0.1`.
331
+ - If gateway bind mode is `custom` and `gateway.customBindHost` is set, that host is used.
332
+
333
+ `baseUrl` rules:
334
+
335
+ - Must be `http://` or `https://`.
336
+ - Query and hash are rejected.
337
+ - Origin plus optional base path is allowed.
338
+
339
+ ## Security model
340
+
341
+ Viewer hardening:
342
+
343
+ - Loopback-only by default.
344
+ - Tokenized viewer paths with strict ID and token validation.
345
+ - Viewer response CSP:
346
+ - `default-src 'none'`
347
+ - scripts and assets only from self
348
+ - no outbound `connect-src`
349
+ - Remote miss throttling when remote access is enabled:
350
+ - 40 failures per 60 seconds
351
+ - 60 second lockout (`429 Too Many Requests`)
352
+
353
+ File rendering hardening:
354
+
355
+ - Screenshot browser request routing is deny-by-default.
356
+ - Only local viewer assets from `http://127.0.0.1/plugins/diffs/assets/*` are allowed.
357
+ - External network requests are blocked.
358
+
359
+ ## Browser requirements for file mode
360
+
361
+ `mode: "file"` and `mode: "both"` need a Chromium-compatible browser.
362
+
363
+ Resolution order:
364
+
365
+ 1. `browser.executablePath` in Durar config.
366
+ 2. Environment variables:
367
+ - `Durar_BROWSER_EXECUTABLE_PATH`
368
+ - `BROWSER_EXECUTABLE_PATH`
369
+ - `PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH`
370
+ 3. Platform command/path discovery fallback.
371
+
372
+ Common failure text:
373
+
374
+ - `Diff PNG/PDF rendering requires a Chromium-compatible browser...`
375
+
376
+ Fix by installing Chrome, Chromium, Edge, or Brave, or setting one of the executable path options above.
377
+
378
+ ## Troubleshooting
379
+
380
+ Input validation errors:
381
+
382
+ - `Provide patch or both before and after text.`
383
+ - Include both `before` and `after`, or provide `patch`.
384
+ - `Provide either patch or before/after input, not both.`
385
+ - Do not mix input modes.
386
+ - `Invalid baseUrl: ...`
387
+ - Use `http(s)` origin with optional path, no query/hash.
388
+ - `{field} exceeds maximum size (...)`
389
+ - Reduce payload size.
390
+ - Large patch rejection
391
+ - Reduce patch file count or total lines.
392
+
393
+ Viewer accessibility issues:
394
+
395
+ - Viewer URL resolves to `127.0.0.1` by default.
396
+ - For remote access scenarios, either:
397
+ - set plugin `viewerBaseUrl`, or
398
+ - pass `baseUrl` per tool call, or
399
+ - use `gateway.bind=custom` and `gateway.customBindHost`
400
+ - If `gateway.trustedProxies` includes loopback for a same-host proxy (for example Tailscale Serve), raw loopback viewer requests without forwarded client-IP headers fail closed by design.
401
+ - For that proxy topology:
402
+ - prefer `mode: "file"` or `mode: "both"` when you only need an attachment, or
403
+ - intentionally enable `security.allowRemoteViewer` and set plugin `viewerBaseUrl` or pass a proxy/public `baseUrl` when you need a shareable viewer URL
404
+ - Enable `security.allowRemoteViewer` only when you intend external viewer access.
405
+
406
+ Unmodified-lines row has no expand button:
407
+
408
+ - This can happen for patch input when the patch does not carry expandable context.
409
+ - This is expected and does not indicate a viewer failure.
410
+
411
+ Artifact not found:
412
+
413
+ - Artifact expired due TTL.
414
+ - Token or path changed.
415
+ - Cleanup removed stale data.
416
+
417
+ ## Operational guidance
418
+
419
+ - Prefer `mode: "view"` for local interactive reviews in canvas.
420
+ - Prefer `mode: "file"` for outbound chat channels that need an attachment.
421
+ - Keep `allowRemoteViewer` disabled unless your deployment requires remote viewer URLs.
422
+ - Set explicit short `ttlSeconds` for sensitive diffs.
423
+ - Avoid sending secrets in diff input when not required.
424
+ - If your channel compresses images aggressively (for example Telegram or WhatsApp), prefer PDF output (`fileFormat: "pdf"`).
425
+
426
+ Diff rendering engine:
427
+
428
+ - Powered by [Diffs](https://diffs.com).
429
+
430
+ ## Related docs
431
+
432
+ - [Tools overview](/tools)
433
+ - [Plugins](/tools/plugin)
434
+ - [Browser](/tools/browser)
@@ -0,0 +1,102 @@
1
+ ---
2
+ summary: "DuckDuckGo web search -- key-free fallback provider (experimental, HTML-based)"
3
+ read_when:
4
+ - You want a web search provider that requires no API key
5
+ - You want to use DuckDuckGo for web_search
6
+ - You need a zero-config search fallback
7
+ title: "DuckDuckGo Search"
8
+ ---
9
+
10
+ # DuckDuckGo Search
11
+
12
+ Durar supports DuckDuckGo as a **key-free** `web_search` provider. No API
13
+ key or account is required.
14
+
15
+ <Warning>
16
+ DuckDuckGo is an **experimental, unofficial** integration that pulls results
17
+ from DuckDuckGo's non-JavaScript search pages — not an official API. Expect
18
+ occasional breakage from bot-challenge pages or HTML changes.
19
+ </Warning>
20
+
21
+ ## Setup
22
+
23
+ No API key needed — just set DuckDuckGo as your provider:
24
+
25
+ <Steps>
26
+ <Step title="Configure">
27
+ ```bash
28
+ Durar configure --section web
29
+ # Select "duckduckgo" as the provider
30
+ ```
31
+ </Step>
32
+ </Steps>
33
+
34
+ ## Config
35
+
36
+ ```json5
37
+ {
38
+ tools: {
39
+ web: {
40
+ search: {
41
+ provider: "duckduckgo",
42
+ },
43
+ },
44
+ },
45
+ }
46
+ ```
47
+
48
+ Optional plugin-level settings for region and SafeSearch:
49
+
50
+ ```json5
51
+ {
52
+ plugins: {
53
+ entries: {
54
+ duckduckgo: {
55
+ config: {
56
+ webSearch: {
57
+ region: "us-en", // DuckDuckGo region code
58
+ safeSearch: "moderate", // "strict", "moderate", or "off"
59
+ },
60
+ },
61
+ },
62
+ },
63
+ },
64
+ }
65
+ ```
66
+
67
+ ## Tool parameters
68
+
69
+ | Parameter | Description |
70
+ | ------------ | ---------------------------------------------------------- |
71
+ | `query` | Search query (required) |
72
+ | `count` | Results to return (1-10, default: 5) |
73
+ | `region` | DuckDuckGo region code (e.g. `us-en`, `uk-en`, `de-de`) |
74
+ | `safeSearch` | SafeSearch level: `strict`, `moderate` (default), or `off` |
75
+
76
+ Region and SafeSearch can also be set in plugin config (see above) — tool
77
+ parameters override config values per-query.
78
+
79
+ ## Notes
80
+
81
+ - **No API key** — works out of the box, zero configuration
82
+ - **Experimental** — gathers results from DuckDuckGo's non-JavaScript HTML
83
+ search pages, not an official API or SDK
84
+ - **Bot-challenge risk** — DuckDuckGo may serve CAPTCHAs or block requests
85
+ under heavy or automated use
86
+ - **HTML parsing** — results depend on page structure, which can change without
87
+ notice
88
+ - **Auto-detection order** — DuckDuckGo is the first key-free fallback
89
+ (order 100) in auto-detection. API-backed providers with configured keys run
90
+ first, then Ollama Web Search (order 110), then SearXNG (order 200)
91
+ - **SafeSearch defaults to moderate** when not configured
92
+
93
+ <Tip>
94
+ For production use, consider [Brave Search](/tools/brave-search) (free tier
95
+ available) or another API-backed provider.
96
+ </Tip>
97
+
98
+ ## Related
99
+
100
+ - [Web Search overview](/tools/web) -- all providers and auto-detection
101
+ - [Brave Search](/tools/brave-search) -- structured results with free tier
102
+ - [Exa Search](/tools/exa-search) -- neural search with content extraction