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,218 @@
1
+ ---
2
+ summary: "Model authentication: OAuth, API keys, and Claude CLI reuse"
3
+ read_when:
4
+ - Debugging model auth or OAuth expiry
5
+ - Documenting authentication or credential storage
6
+ title: "Authentication"
7
+ ---
8
+
9
+ # Authentication (Model Providers)
10
+
11
+ <Note>
12
+ This page covers **model provider** authentication (API keys, OAuth, Claude CLI reuse). For **gateway connection** authentication (token, password, trusted-proxy), see [Configuration](/gateway/configuration) and [Trusted Proxy Auth](/gateway/trusted-proxy-auth).
13
+ </Note>
14
+
15
+ Durar supports OAuth and API keys for model providers. For always-on gateway
16
+ hosts, API keys are usually the most predictable option. Subscription/OAuth
17
+ flows are also supported when they match your provider account model.
18
+
19
+ See [/concepts/oauth](/concepts/oauth) for the full OAuth flow and storage
20
+ layout.
21
+ For SecretRef-based auth (`env`/`file`/`exec` providers), see [Secrets Management](/gateway/secrets).
22
+ For credential eligibility/reason-code rules used by `models status --probe`, see
23
+ [Auth Credential Semantics](/auth-credential-semantics).
24
+
25
+ ## Recommended setup (API key, any provider)
26
+
27
+ If you’re running a long-lived gateway, start with an API key for your chosen
28
+ provider.
29
+ For Anthropic specifically, API key auth is the safe path. Claude CLI reuse is
30
+ the other supported subscription-style setup path.
31
+
32
+ 1. Create an API key in your provider console.
33
+ 2. Put it on the **gateway host** (the machine running `Durar gateway`).
34
+
35
+ ```bash
36
+ export <PROVIDER>_API_KEY="..."
37
+ Durar models status
38
+ ```
39
+
40
+ 3. If the Gateway runs under systemd/launchd, prefer putting the key in
41
+ `~/.Durar/.env` so the daemon can read it:
42
+
43
+ ```bash
44
+ cat >> ~/.Durar/.env <<'EOF'
45
+ <PROVIDER>_API_KEY=...
46
+ EOF
47
+ ```
48
+
49
+ Then restart the daemon (or restart your Gateway process) and re-check:
50
+
51
+ ```bash
52
+ Durar models status
53
+ Durar doctor
54
+ ```
55
+
56
+ If you’d rather not manage env vars yourself, onboarding can store
57
+ API keys for daemon use: `Durar onboard`.
58
+
59
+ See [Help](/help) for details on env inheritance (`env.shellEnv`,
60
+ `~/.Durar/.env`, systemd/launchd).
61
+
62
+ ## Anthropic: legacy token compatibility
63
+
64
+ Anthropic setup-token auth is still available in Durar as a
65
+ legacy/manual path. Anthropic's public Claude Code docs still cover direct
66
+ Claude Code terminal use under Claude plans, but Anthropic separately told
67
+ Durar users that the **Durar** Claude-login path counts as third-party
68
+ harness usage and requires **Extra Usage** billed separately from the
69
+ subscription.
70
+
71
+ For the clearest setup path, use an Anthropic API key or migrate to Claude CLI
72
+ on the gateway host.
73
+
74
+ Manual token entry (any provider; writes `auth-profiles.json` + updates config):
75
+
76
+ ```bash
77
+ Durar models auth paste-token --provider openrouter
78
+ ```
79
+
80
+ Auth profile refs are also supported for static credentials:
81
+
82
+ - `api_key` credentials can use `keyRef: { source, provider, id }`
83
+ - `token` credentials can use `tokenRef: { source, provider, id }`
84
+ - OAuth-mode profiles do not support SecretRef credentials; if `auth.profiles.<id>.mode` is set to `"oauth"`, SecretRef-backed `keyRef`/`tokenRef` input for that profile is rejected.
85
+
86
+ Automation-friendly check (exit `1` when expired/missing, `2` when expiring):
87
+
88
+ ```bash
89
+ Durar models status --check
90
+ ```
91
+
92
+ Live auth probes:
93
+
94
+ ```bash
95
+ Durar models status --probe
96
+ ```
97
+
98
+ Notes:
99
+
100
+ - Probe rows can come from auth profiles, env credentials, or `models.json`.
101
+ - If explicit `auth.order.<provider>` omits a stored profile, probe reports
102
+ `excluded_by_auth_order` for that profile instead of trying it.
103
+ - If auth exists but Durar cannot resolve a probeable model candidate for
104
+ that provider, probe reports `status: no_model`.
105
+ - Rate-limit cooldowns can be model-scoped. A profile cooling down for one
106
+ model can still be usable for a sibling model on the same provider.
107
+
108
+ Optional ops scripts (systemd/Termux) are documented here:
109
+ [Auth monitoring scripts](/help/scripts#auth-monitoring-scripts)
110
+
111
+ ## Anthropic: Claude CLI migration
112
+
113
+ If Claude CLI is already installed and signed in on the gateway host, you can
114
+ switch an existing Anthropic setup over to the CLI backend. This is a
115
+ supported Durar migration path for reusing a local Claude CLI login on that
116
+ host.
117
+
118
+ Prerequisites:
119
+
120
+ - `claude` installed on the gateway host
121
+ - Claude CLI already signed in there with `claude auth login`
122
+
123
+ ```bash
124
+ Durar models auth login --provider anthropic --method cli --set-default
125
+ ```
126
+
127
+ This keeps your existing Anthropic auth profiles for rollback, but changes the
128
+ default model selection to `claude-cli/...` and adds matching Claude CLI
129
+ allowlist entries under `agents.defaults.models`.
130
+
131
+ Verify:
132
+
133
+ ```bash
134
+ Durar models status
135
+ ```
136
+
137
+ Onboarding shortcut:
138
+
139
+ ```bash
140
+ Durar onboard --auth-choice anthropic-cli
141
+ ```
142
+
143
+ Interactive `Durar onboard` and `Durar configure` still prefer Claude CLI
144
+ for Anthropic, but Anthropic setup-token is available again as a
145
+ legacy/manual path and should be used with the Extra Usage billing expectation.
146
+
147
+ ## Checking model auth status
148
+
149
+ ```bash
150
+ Durar models status
151
+ Durar doctor
152
+ ```
153
+
154
+ ## API key rotation behavior (gateway)
155
+
156
+ Some providers support retrying a request with alternative keys when an API call
157
+ hits a provider rate limit.
158
+
159
+ - Priority order:
160
+ - `Durar_LIVE_<PROVIDER>_KEY` (single override)
161
+ - `<PROVIDER>_API_KEYS`
162
+ - `<PROVIDER>_API_KEY`
163
+ - `<PROVIDER>_API_KEY_*`
164
+ - Google providers also include `GOOGLE_API_KEY` as an additional fallback.
165
+ - The same key list is deduplicated before use.
166
+ - Durar retries with the next key only for rate-limit errors (for example
167
+ `429`, `rate_limit`, `quota`, `resource exhausted`, `Too many concurrent
168
+ requests`, `ThrottlingException`, `concurrency limit reached`, or
169
+ `workers_ai ... quota limit exceeded`).
170
+ - Non-rate-limit errors are not retried with alternate keys.
171
+ - If all keys fail, the final error from the last attempt is returned.
172
+
173
+ ## Controlling which credential is used
174
+
175
+ ### Per-session (chat command)
176
+
177
+ Use `/model <alias-or-id>@<profileId>` to pin a specific provider credential for the current session (example profile ids: `anthropic:default`, `anthropic:work`).
178
+
179
+ Use `/model` (or `/model list`) for a compact picker; use `/model status` for the full view (candidates + next auth profile, plus provider endpoint details when configured).
180
+
181
+ ### Per-agent (CLI override)
182
+
183
+ Set an explicit auth profile order override for an agent (stored in that agent’s `auth-profiles.json`):
184
+
185
+ ```bash
186
+ Durar models auth order get --provider anthropic
187
+ Durar models auth order set --provider anthropic anthropic:default
188
+ Durar models auth order clear --provider anthropic
189
+ ```
190
+
191
+ Use `--agent <id>` to target a specific agent; omit it to use the configured default agent.
192
+ When you debug order issues, `Durar models status --probe` shows omitted
193
+ stored profiles as `excluded_by_auth_order` instead of silently skipping them.
194
+ When you debug cooldown issues, remember that rate-limit cooldowns can be tied
195
+ to one model id rather than the whole provider profile.
196
+
197
+ ## Troubleshooting
198
+
199
+ ### "No credentials found"
200
+
201
+ If the Anthropic profile is missing, migrate that setup to Claude CLI or an API
202
+ key on the **gateway host**, then re-check:
203
+
204
+ ```bash
205
+ Durar models status
206
+ ```
207
+
208
+ ### Token expiring/expired
209
+
210
+ Run `Durar models status` to confirm which profile is expiring. If a legacy
211
+ Anthropic token profile is missing or expired, migrate that setup to Claude CLI
212
+ or an API key.
213
+
214
+ ## Claude CLI requirements
215
+
216
+ Only needed for the Anthropic Claude CLI reuse path:
217
+
218
+ - Claude Code CLI installed (`claude` command available)
@@ -0,0 +1,131 @@
1
+ ---
2
+ summary: "Background exec execution and process management"
3
+ read_when:
4
+ - Adding or modifying background exec behavior
5
+ - Debugging long-running exec tasks
6
+ title: "Background Exec and Process Tool"
7
+ ---
8
+
9
+ # Background Exec + Process Tool
10
+
11
+ Durar runs shell commands through the `exec` tool and keeps long‑running tasks in memory. The `process` tool manages those background sessions.
12
+
13
+ ## exec tool
14
+
15
+ Key parameters:
16
+
17
+ - `command` (required)
18
+ - `yieldMs` (default 10000): auto‑background after this delay
19
+ - `background` (bool): background immediately
20
+ - `timeout` (seconds, default 1800): kill the process after this timeout
21
+ - `elevated` (bool): run outside the sandbox if elevated mode is enabled/allowed (`gateway` by default, or `node` when the exec target is `node`)
22
+ - Need a real TTY? Set `pty: true`.
23
+ - `workdir`, `env`
24
+
25
+ Behavior:
26
+
27
+ - Foreground runs return output directly.
28
+ - When backgrounded (explicit or timeout), the tool returns `status: "running"` + `sessionId` and a short tail.
29
+ - Output is kept in memory until the session is polled or cleared.
30
+ - If the `process` tool is disallowed, `exec` runs synchronously and ignores `yieldMs`/`background`.
31
+ - Spawned exec commands receive `Durar_SHELL=exec` for context-aware shell/profile rules.
32
+ - For long-running work that starts now, start it once and rely on automatic
33
+ completion wake when it is enabled and the command emits output or fails.
34
+ - If automatic completion wake is unavailable, or you need quiet-success
35
+ confirmation for a command that exited cleanly without output, use `process`
36
+ to confirm completion.
37
+ - Do not emulate reminders or delayed follow-ups with `sleep` loops or repeated
38
+ polling; use cron for future work.
39
+
40
+ ## Child process bridging
41
+
42
+ When spawning long-running child processes outside the exec/process tools (for example, CLI respawns or gateway helpers), attach the child-process bridge helper so termination signals are forwarded and listeners are detached on exit/error. This avoids orphaned processes on systemd and keeps shutdown behavior consistent across platforms.
43
+
44
+ Environment overrides:
45
+
46
+ - `PI_BASH_YIELD_MS`: default yield (ms)
47
+ - `PI_BASH_MAX_OUTPUT_CHARS`: in‑memory output cap (chars)
48
+ - `Durar_BASH_PENDING_MAX_OUTPUT_CHARS`: pending stdout/stderr cap per stream (chars)
49
+ - `PI_BASH_JOB_TTL_MS`: TTL for finished sessions (ms, bounded to 1m–3h)
50
+
51
+ Config (preferred):
52
+
53
+ - `tools.exec.backgroundMs` (default 10000)
54
+ - `tools.exec.timeoutSec` (default 1800)
55
+ - `tools.exec.cleanupMs` (default 1800000)
56
+ - `tools.exec.notifyOnExit` (default true): enqueue a system event + request heartbeat when a backgrounded exec exits.
57
+ - `tools.exec.notifyOnExitEmptySuccess` (default false): when true, also enqueue completion events for successful backgrounded runs that produced no output.
58
+
59
+ ## process tool
60
+
61
+ Actions:
62
+
63
+ - `list`: running + finished sessions
64
+ - `poll`: drain new output for a session (also reports exit status)
65
+ - `log`: read the aggregated output (supports `offset` + `limit`)
66
+ - `write`: send stdin (`data`, optional `eof`)
67
+ - `send-keys`: send explicit key tokens or bytes to a PTY-backed session
68
+ - `submit`: send Enter / carriage return to a PTY-backed session
69
+ - `paste`: send literal text, optionally wrapped in bracketed paste mode
70
+ - `kill`: terminate a background session
71
+ - `clear`: remove a finished session from memory
72
+ - `remove`: kill if running, otherwise clear if finished
73
+
74
+ Notes:
75
+
76
+ - Only backgrounded sessions are listed/persisted in memory.
77
+ - Sessions are lost on process restart (no disk persistence).
78
+ - Session logs are only saved to chat history if you run `process poll/log` and the tool result is recorded.
79
+ - `process` is scoped per agent; it only sees sessions started by that agent.
80
+ - Use `poll` / `log` for status, logs, quiet-success confirmation, or
81
+ completion confirmation when automatic completion wake is unavailable.
82
+ - Use `write` / `send-keys` / `submit` / `paste` / `kill` when you need input
83
+ or intervention.
84
+ - `process list` includes a derived `name` (command verb + target) for quick scans.
85
+ - `process log` uses line-based `offset`/`limit`.
86
+ - When both `offset` and `limit` are omitted, it returns the last 200 lines and includes a paging hint.
87
+ - When `offset` is provided and `limit` is omitted, it returns from `offset` to the end (not capped to 200).
88
+ - Polling is for on-demand status, not wait-loop scheduling. If the work should
89
+ happen later, use cron instead.
90
+
91
+ ## Examples
92
+
93
+ Run a long task and poll later:
94
+
95
+ ```json
96
+ { "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
97
+ ```
98
+
99
+ ```json
100
+ { "tool": "process", "action": "poll", "sessionId": "<id>" }
101
+ ```
102
+
103
+ Start immediately in background:
104
+
105
+ ```json
106
+ { "tool": "exec", "command": "npm run build", "background": true }
107
+ ```
108
+
109
+ Send stdin:
110
+
111
+ ```json
112
+ { "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }
113
+ ```
114
+
115
+ Send PTY keys:
116
+
117
+ ```json
118
+ { "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }
119
+ ```
120
+
121
+ Submit current line:
122
+
123
+ ```json
124
+ { "tool": "process", "action": "submit", "sessionId": "<id>" }
125
+ ```
126
+
127
+ Paste literal text:
128
+
129
+ ```json
130
+ { "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }
131
+ ```
@@ -0,0 +1,179 @@
1
+ ---
2
+ summary: "Bonjour/mDNS discovery + debugging (Gateway beacons, clients, and common failure modes)"
3
+ read_when:
4
+ - Debugging Bonjour discovery issues on macOS/iOS
5
+ - Changing mDNS service types, TXT records, or discovery UX
6
+ title: "Bonjour Discovery"
7
+ ---
8
+
9
+ # Bonjour / mDNS discovery
10
+
11
+ Durar uses Bonjour (mDNS / DNS‑SD) to discover an active Gateway (WebSocket endpoint).
12
+ Multicast `local.` browsing is a **LAN-only convenience**. For cross-network discovery, the
13
+ same beacon can also be published through a configured wide-area DNS-SD domain. Discovery is
14
+ still best-effort and does **not** replace SSH or Tailnet-based connectivity.
15
+
16
+ ## Wide-area Bonjour (Unicast DNS-SD) over Tailscale
17
+
18
+ If the node and gateway are on different networks, multicast mDNS won’t cross the
19
+ boundary. You can keep the same discovery UX by switching to **unicast DNS‑SD**
20
+ ("Wide‑Area Bonjour") over Tailscale.
21
+
22
+ High‑level steps:
23
+
24
+ 1. Run a DNS server on the gateway host (reachable over Tailnet).
25
+ 2. Publish DNS‑SD records for `_Durar-gw._tcp` under a dedicated zone
26
+ (example: `Durar.internal.`).
27
+ 3. Configure Tailscale **split DNS** so your chosen domain resolves via that
28
+ DNS server for clients (including iOS).
29
+
30
+ Durar supports any discovery domain; `Durar.internal.` is just an example.
31
+ iOS/Android nodes browse both `local.` and your configured wide‑area domain.
32
+
33
+ ### Gateway config (recommended)
34
+
35
+ ```json5
36
+ {
37
+ gateway: { bind: "tailnet" }, // tailnet-only (recommended)
38
+ discovery: { wideArea: { enabled: true } }, // enables wide-area DNS-SD publishing
39
+ }
40
+ ```
41
+
42
+ ### One-time DNS server setup (gateway host)
43
+
44
+ ```bash
45
+ Durar dns setup --apply
46
+ ```
47
+
48
+ This installs CoreDNS and configures it to:
49
+
50
+ - listen on port 53 only on the gateway’s Tailscale interfaces
51
+ - serve your chosen domain (example: `Durar.internal.`) from `~/.Durar/dns/<domain>.db`
52
+
53
+ Validate from a tailnet‑connected machine:
54
+
55
+ ```bash
56
+ dns-sd -B _Durar-gw._tcp Durar.internal.
57
+ dig @<TAILNET_IPV4> -p 53 _Durar-gw._tcp.Durar.internal PTR +short
58
+ ```
59
+
60
+ ### Tailscale DNS settings
61
+
62
+ In the Tailscale admin console:
63
+
64
+ - Add a nameserver pointing at the gateway’s tailnet IP (UDP/TCP 53).
65
+ - Add split DNS so your discovery domain uses that nameserver.
66
+
67
+ Once clients accept tailnet DNS, iOS nodes and CLI discovery can browse
68
+ `_Durar-gw._tcp` in your discovery domain without multicast.
69
+
70
+ ### Gateway listener security (recommended)
71
+
72
+ The Gateway WS port (default `18789`) binds to loopback by default. For LAN/tailnet
73
+ access, bind explicitly and keep auth enabled.
74
+
75
+ For tailnet‑only setups:
76
+
77
+ - Set `gateway.bind: "tailnet"` in `~/.Durar/Durar.json`.
78
+ - Restart the Gateway (or restart the macOS menubar app).
79
+
80
+ ## What advertises
81
+
82
+ Only the Gateway advertises `_Durar-gw._tcp`.
83
+
84
+ ## Service types
85
+
86
+ - `_Durar-gw._tcp` — gateway transport beacon (used by macOS/iOS/Android nodes).
87
+
88
+ ## TXT keys (non-secret hints)
89
+
90
+ The Gateway advertises small non‑secret hints to make UI flows convenient:
91
+
92
+ - `role=gateway`
93
+ - `displayName=<friendly name>`
94
+ - `lanHost=<hostname>.local`
95
+ - `gatewayPort=<port>` (Gateway WS + HTTP)
96
+ - `gatewayTls=1` (only when TLS is enabled)
97
+ - `gatewayTlsSha256=<sha256>` (only when TLS is enabled and fingerprint is available)
98
+ - `canvasPort=<port>` (only when the canvas host is enabled; currently the same as `gatewayPort`)
99
+ - `transport=gateway`
100
+ - `tailnetDns=<magicdns>` (optional hint when Tailnet is available)
101
+ - `sshPort=<port>` (mDNS full mode only; wide-area DNS-SD may omit it)
102
+ - `cliPath=<path>` (mDNS full mode only; wide-area DNS-SD still writes it as a remote-install hint)
103
+
104
+ Security notes:
105
+
106
+ - Bonjour/mDNS TXT records are **unauthenticated**. Clients must not treat TXT as authoritative routing.
107
+ - Clients should route using the resolved service endpoint (SRV + A/AAAA). Treat `lanHost`, `tailnetDns`, `gatewayPort`, and `gatewayTlsSha256` as hints only.
108
+ - SSH auto-targeting should likewise use the resolved service host, not TXT-only hints.
109
+ - TLS pinning must never allow an advertised `gatewayTlsSha256` to override a previously stored pin.
110
+ - iOS/Android nodes should treat discovery-based direct connects as **TLS-only** and require explicit user confirmation before trusting a first-time fingerprint.
111
+
112
+ ## Debugging on macOS
113
+
114
+ Useful built‑in tools:
115
+
116
+ - Browse instances:
117
+
118
+ ```bash
119
+ dns-sd -B _Durar-gw._tcp local.
120
+ ```
121
+
122
+ - Resolve one instance (replace `<instance>`):
123
+
124
+ ```bash
125
+ dns-sd -L "<instance>" _Durar-gw._tcp local.
126
+ ```
127
+
128
+ If browsing works but resolving fails, you’re usually hitting a LAN policy or
129
+ mDNS resolver issue.
130
+
131
+ ## Debugging in Gateway logs
132
+
133
+ The Gateway writes a rolling log file (printed on startup as
134
+ `gateway log file: ...`). Look for `bonjour:` lines, especially:
135
+
136
+ - `bonjour: advertise failed ...`
137
+ - `bonjour: ... name conflict resolved` / `hostname conflict resolved`
138
+ - `bonjour: watchdog detected non-announced service ...`
139
+
140
+ ## Debugging on iOS node
141
+
142
+ The iOS node uses `NWBrowser` to discover `_Durar-gw._tcp`.
143
+
144
+ To capture logs:
145
+
146
+ - Settings → Gateway → Advanced → **Discovery Debug Logs**
147
+ - Settings → Gateway → Advanced → **Discovery Logs** → reproduce → **Copy**
148
+
149
+ The log includes browser state transitions and result‑set changes.
150
+
151
+ ## Common failure modes
152
+
153
+ - **Bonjour doesn’t cross networks**: use Tailnet or SSH.
154
+ - **Multicast blocked**: some Wi‑Fi networks disable mDNS.
155
+ - **Sleep / interface churn**: macOS may temporarily drop mDNS results; retry.
156
+ - **Browse works but resolve fails**: keep machine names simple (avoid emojis or
157
+ punctuation), then restart the Gateway. The service instance name derives from
158
+ the host name, so overly complex names can confuse some resolvers.
159
+
160
+ ## Escaped instance names (`\032`)
161
+
162
+ Bonjour/DNS‑SD often escapes bytes in service instance names as decimal `\DDD`
163
+ sequences (e.g. spaces become `\032`).
164
+
165
+ - This is normal at the protocol level.
166
+ - UIs should decode for display (iOS uses `BonjourEscapes.decode`).
167
+
168
+ ## Disabling / configuration
169
+
170
+ - `Durar_DISABLE_BONJOUR=1` disables advertising (legacy: `Durar_DISABLE_BONJOUR`).
171
+ - `gateway.bind` in `~/.Durar/Durar.json` controls the Gateway bind mode.
172
+ - `Durar_SSH_PORT` overrides the SSH port when `sshPort` is advertised (legacy: `Durar_SSH_PORT`).
173
+ - `Durar_TAILNET_DNS` publishes a MagicDNS hint in TXT (legacy: `Durar_TAILNET_DNS`).
174
+ - `Durar_CLI_PATH` overrides the advertised CLI path (legacy: `Durar_CLI_PATH`).
175
+
176
+ ## Related docs
177
+
178
+ - Discovery policy and transport selection: [Discovery](/gateway/discovery)
179
+ - Node pairing + approvals: [Gateway pairing](/gateway/pairing)
@@ -0,0 +1,89 @@
1
+ ---
2
+ summary: "Historical bridge protocol (legacy nodes): TCP JSONL, pairing, scoped RPC"
3
+ read_when:
4
+ - Building or debugging node clients (iOS/Android/macOS node mode)
5
+ - Investigating pairing or bridge auth failures
6
+ - Auditing the node surface exposed by the gateway
7
+ title: "Bridge Protocol"
8
+ ---
9
+
10
+ # Bridge protocol (legacy node transport)
11
+
12
+ <Warning>
13
+ The TCP bridge has been **removed**. Current Durar builds do not ship the bridge listener and `bridge.*` config keys are no longer in the schema. This page is kept for historical reference only. Use the [Gateway Protocol](/gateway/protocol) for all node/operator clients.
14
+ </Warning>
15
+
16
+ ## Why it existed
17
+
18
+ - **Security boundary**: the bridge exposes a small allowlist instead of the
19
+ full gateway API surface.
20
+ - **Pairing + node identity**: node admission is owned by the gateway and tied
21
+ to a per-node token.
22
+ - **Discovery UX**: nodes can discover gateways via Bonjour on LAN, or connect
23
+ directly over a tailnet.
24
+ - **Loopback WS**: the full WS control plane stays local unless tunneled via SSH.
25
+
26
+ ## Transport
27
+
28
+ - TCP, one JSON object per line (JSONL).
29
+ - Optional TLS (when `bridge.tls.enabled` is true).
30
+ - Historical default listener port was `18790` (current builds do not start a
31
+ TCP bridge).
32
+
33
+ When TLS is enabled, discovery TXT records include `bridgeTls=1` plus
34
+ `bridgeTlsSha256` as a non-secret hint. Note that Bonjour/mDNS TXT records are
35
+ unauthenticated; clients must not treat the advertised fingerprint as an
36
+ authoritative pin without explicit user intent or other out-of-band verification.
37
+
38
+ ## Handshake + pairing
39
+
40
+ 1. Client sends `hello` with node metadata + token (if already paired).
41
+ 2. If not paired, gateway replies `error` (`NOT_PAIRED`/`UNAUTHORIZED`).
42
+ 3. Client sends `pair-request`.
43
+ 4. Gateway waits for approval, then sends `pair-ok` and `hello-ok`.
44
+
45
+ Historically, `hello-ok` returned `serverName` and could include
46
+ `canvasHostUrl`.
47
+
48
+ ## Frames
49
+
50
+ Client → Gateway:
51
+
52
+ - `req` / `res`: scoped gateway RPC (chat, sessions, config, health, voicewake, skills.bins)
53
+ - `event`: node signals (voice transcript, agent request, chat subscribe, exec lifecycle)
54
+
55
+ Gateway → Client:
56
+
57
+ - `invoke` / `invoke-res`: node commands (`canvas.*`, `camera.*`, `screen.record`,
58
+ `location.get`, `sms.send`)
59
+ - `event`: chat updates for subscribed sessions
60
+ - `ping` / `pong`: keepalive
61
+
62
+ Legacy allowlist enforcement lived in `src/gateway/server-bridge.ts` (removed).
63
+
64
+ ## Exec lifecycle events
65
+
66
+ Nodes can emit `exec.finished` or `exec.denied` events to surface system.run activity.
67
+ These are mapped to system events in the gateway. (Legacy nodes may still emit `exec.started`.)
68
+
69
+ Payload fields (all optional unless noted):
70
+
71
+ - `sessionKey` (required): agent session to receive the system event.
72
+ - `runId`: unique exec id for grouping.
73
+ - `command`: raw or formatted command string.
74
+ - `exitCode`, `timedOut`, `success`, `output`: completion details (finished only).
75
+ - `reason`: denial reason (denied only).
76
+
77
+ ## Historical tailnet usage
78
+
79
+ - Bind the bridge to a tailnet IP: `bridge.bind: "tailnet"` in
80
+ `~/.Durar/Durar.json` (historical only; `bridge.*` is no longer valid).
81
+ - Clients connect via MagicDNS name or tailnet IP.
82
+ - Bonjour does **not** cross networks; use manual host/port or wide-area DNS‑SD
83
+ when needed.
84
+
85
+ ## Versioning
86
+
87
+ The bridge was **implicit v1** (no min/max negotiation). This section is
88
+ historical reference only; current node/operator clients use the WebSocket
89
+ [Gateway Protocol](/gateway/protocol).