durar-ai 2026.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/CHANGELOG.md +5497 -0
  2. package/LICENSE +21 -0
  3. package/README.md +614 -0
  4. package/assets/avatar-placeholder.svg +19 -0
  5. package/assets/chrome-extension/icons/icon128.png +0 -0
  6. package/assets/chrome-extension/icons/icon16.png +0 -0
  7. package/assets/chrome-extension/icons/icon32.png +0 -0
  8. package/assets/chrome-extension/icons/icon48.png +0 -0
  9. package/assets/dmg-background-small.png +0 -0
  10. package/assets/dmg-background.png +0 -0
  11. package/docs/.i18n/README.md +72 -0
  12. package/docs/.i18n/ar-navigation.json +18 -0
  13. package/docs/.i18n/de-navigation.json +18 -0
  14. package/docs/.i18n/es-navigation.json +18 -0
  15. package/docs/.i18n/fr-navigation.json +18 -0
  16. package/docs/.i18n/glossary.ar.json +5 -0
  17. package/docs/.i18n/glossary.de.json +5 -0
  18. package/docs/.i18n/glossary.es.json +5 -0
  19. package/docs/.i18n/glossary.fr.json +5 -0
  20. package/docs/.i18n/glossary.id.json +5 -0
  21. package/docs/.i18n/glossary.it.json +5 -0
  22. package/docs/.i18n/glossary.ja-JP.json +14 -0
  23. package/docs/.i18n/glossary.ko.json +5 -0
  24. package/docs/.i18n/glossary.pl.json +5 -0
  25. package/docs/.i18n/glossary.pt-BR.json +5 -0
  26. package/docs/.i18n/glossary.tr.json +5 -0
  27. package/docs/.i18n/glossary.zh-CN.json +358 -0
  28. package/docs/.i18n/id-navigation.json +18 -0
  29. package/docs/.i18n/it-navigation.json +18 -0
  30. package/docs/.i18n/ja-navigation.json +18 -0
  31. package/docs/.i18n/ko-navigation.json +18 -0
  32. package/docs/.i18n/pl-navigation.json +18 -0
  33. package/docs/.i18n/pt-BR-navigation.json +18 -0
  34. package/docs/.i18n/tr-navigation.json +18 -0
  35. package/docs/.i18n/zh-Hans-navigation.json +544 -0
  36. package/docs/assets/install-script.svg +1 -0
  37. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  38. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  39. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  40. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  41. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  42. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  43. package/docs/assets/openclaw-logo-text-dark.svg +418 -0
  44. package/docs/assets/openclaw-logo-text.png +0 -0
  45. package/docs/assets/openclaw-logo-text.svg +418 -0
  46. package/docs/assets/pixel-lobster.svg +60 -0
  47. package/docs/assets/showcase/agents-ui.jpg +0 -0
  48. package/docs/assets/showcase/bambu-cli.png +0 -0
  49. package/docs/assets/showcase/codexmonitor.png +0 -0
  50. package/docs/assets/showcase/gohome-grafana.png +0 -0
  51. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  52. package/docs/assets/showcase/oura-health.png +0 -0
  53. package/docs/assets/showcase/padel-cli.svg +11 -0
  54. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  55. package/docs/assets/showcase/papla-tts.jpg +0 -0
  56. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  57. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  58. package/docs/assets/showcase/roborock-status.svg +13 -0
  59. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  60. package/docs/assets/showcase/snag.png +0 -0
  61. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  62. package/docs/assets/showcase/wienerlinien.png +0 -0
  63. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  64. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  65. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  66. package/docs/assets/sponsors/blacksmith-light.svg +14 -0
  67. package/docs/assets/sponsors/blacksmith.svg +14 -0
  68. package/docs/assets/sponsors/convex-light.svg +16 -0
  69. package/docs/assets/sponsors/convex.svg +16 -0
  70. package/docs/assets/sponsors/github-light.svg +3 -0
  71. package/docs/assets/sponsors/github.svg +3 -0
  72. package/docs/assets/sponsors/nvidia-dark.svg +9 -0
  73. package/docs/assets/sponsors/nvidia.svg +9 -0
  74. package/docs/assets/sponsors/openai-light.svg +3 -0
  75. package/docs/assets/sponsors/openai.svg +3 -0
  76. package/docs/assets/sponsors/vercel-light.svg +5 -0
  77. package/docs/assets/sponsors/vercel.svg +5 -0
  78. package/docs/auth-credential-semantics.md +80 -0
  79. package/docs/automation/auth-monitoring.md +8 -0
  80. package/docs/automation/clawflow.md +8 -0
  81. package/docs/automation/cron-jobs.md +410 -0
  82. package/docs/automation/cron-vs-heartbeat.md +8 -0
  83. package/docs/automation/gmail-pubsub.md +8 -0
  84. package/docs/automation/hooks.md +303 -0
  85. package/docs/automation/index.md +115 -0
  86. package/docs/automation/poll.md +8 -0
  87. package/docs/automation/standing-orders.md +254 -0
  88. package/docs/automation/taskflow.md +82 -0
  89. package/docs/automation/tasks.md +323 -0
  90. package/docs/automation/troubleshooting.md +8 -0
  91. package/docs/automation/webhook.md +8 -0
  92. package/docs/brave-search.md +103 -0
  93. package/docs/channels/bluebubbles.md +435 -0
  94. package/docs/channels/broadcast-groups.md +442 -0
  95. package/docs/channels/channel-routing.md +139 -0
  96. package/docs/channels/discord.md +1254 -0
  97. package/docs/channels/feishu.md +793 -0
  98. package/docs/channels/googlechat.md +270 -0
  99. package/docs/channels/group-messages.md +84 -0
  100. package/docs/channels/groups.md +410 -0
  101. package/docs/channels/imessage.md +427 -0
  102. package/docs/channels/index.md +50 -0
  103. package/docs/channels/irc.md +252 -0
  104. package/docs/channels/line.md +225 -0
  105. package/docs/channels/location.md +56 -0
  106. package/docs/channels/matrix.md +869 -0
  107. package/docs/channels/mattermost.md +472 -0
  108. package/docs/channels/msteams.md +805 -0
  109. package/docs/channels/nextcloud-talk.md +149 -0
  110. package/docs/channels/nostr.md +252 -0
  111. package/docs/channels/pairing.md +129 -0
  112. package/docs/channels/qqbot.md +193 -0
  113. package/docs/channels/signal.md +337 -0
  114. package/docs/channels/slack.md +681 -0
  115. package/docs/channels/synology-chat.md +185 -0
  116. package/docs/channels/telegram.md +1072 -0
  117. package/docs/channels/tlon.md +290 -0
  118. package/docs/channels/troubleshooting.md +133 -0
  119. package/docs/channels/twitch.md +394 -0
  120. package/docs/channels/whatsapp.md +488 -0
  121. package/docs/channels/zalo.md +254 -0
  122. package/docs/channels/zalouser.md +195 -0
  123. package/docs/ci.md +66 -0
  124. package/docs/cli/acp.md +316 -0
  125. package/docs/cli/agent.md +57 -0
  126. package/docs/cli/agents.md +220 -0
  127. package/docs/cli/approvals.md +136 -0
  128. package/docs/cli/backup.md +84 -0
  129. package/docs/cli/browser.md +233 -0
  130. package/docs/cli/channels.md +131 -0
  131. package/docs/cli/clawbot.md +21 -0
  132. package/docs/cli/completion.md +35 -0
  133. package/docs/cli/config.md +353 -0
  134. package/docs/cli/configure.md +70 -0
  135. package/docs/cli/cron.md +167 -0
  136. package/docs/cli/daemon.md +57 -0
  137. package/docs/cli/dashboard.md +22 -0
  138. package/docs/cli/devices.md +171 -0
  139. package/docs/cli/directory.md +63 -0
  140. package/docs/cli/dns.md +48 -0
  141. package/docs/cli/docs.md +28 -0
  142. package/docs/cli/doctor.md +63 -0
  143. package/docs/cli/flows.md +18 -0
  144. package/docs/cli/gateway.md +307 -0
  145. package/docs/cli/health.md +36 -0
  146. package/docs/cli/hooks.md +337 -0
  147. package/docs/cli/index.md +1836 -0
  148. package/docs/cli/logs.md +59 -0
  149. package/docs/cli/mcp.md +505 -0
  150. package/docs/cli/memory.md +139 -0
  151. package/docs/cli/message.md +300 -0
  152. package/docs/cli/models.md +136 -0
  153. package/docs/cli/node.md +137 -0
  154. package/docs/cli/nodes.md +66 -0
  155. package/docs/cli/onboard.md +171 -0
  156. package/docs/cli/pairing.md +65 -0
  157. package/docs/cli/plugins.md +305 -0
  158. package/docs/cli/qr.md +52 -0
  159. package/docs/cli/reset.md +35 -0
  160. package/docs/cli/sandbox.md +197 -0
  161. package/docs/cli/secrets.md +197 -0
  162. package/docs/cli/security.md +86 -0
  163. package/docs/cli/sessions.md +113 -0
  164. package/docs/cli/setup.md +45 -0
  165. package/docs/cli/skills.md +59 -0
  166. package/docs/cli/status.md +35 -0
  167. package/docs/cli/system.md +71 -0
  168. package/docs/cli/tui.md +30 -0
  169. package/docs/cli/uninstall.md +39 -0
  170. package/docs/cli/update.md +113 -0
  171. package/docs/cli/voicecall.md +34 -0
  172. package/docs/cli/webhooks.md +91 -0
  173. package/docs/concepts/agent-loop.md +168 -0
  174. package/docs/concepts/agent-workspace.md +246 -0
  175. package/docs/concepts/agent.md +129 -0
  176. package/docs/concepts/architecture.md +156 -0
  177. package/docs/concepts/compaction.md +122 -0
  178. package/docs/concepts/context-engine.md +274 -0
  179. package/docs/concepts/context.md +179 -0
  180. package/docs/concepts/delegate-architecture.md +307 -0
  181. package/docs/concepts/dreaming.md +173 -0
  182. package/docs/concepts/features.md +76 -0
  183. package/docs/concepts/markdown-formatting.md +130 -0
  184. package/docs/concepts/memory-builtin.md +105 -0
  185. package/docs/concepts/memory-honcho.md +140 -0
  186. package/docs/concepts/memory-qmd.md +163 -0
  187. package/docs/concepts/memory-search.md +141 -0
  188. package/docs/concepts/memory.md +121 -0
  189. package/docs/concepts/messages.md +161 -0
  190. package/docs/concepts/model-failover.md +349 -0
  191. package/docs/concepts/model-providers.md +799 -0
  192. package/docs/concepts/models.md +255 -0
  193. package/docs/concepts/multi-agent.md +615 -0
  194. package/docs/concepts/oauth.md +225 -0
  195. package/docs/concepts/presence.md +102 -0
  196. package/docs/concepts/queue.md +89 -0
  197. package/docs/concepts/retry.md +69 -0
  198. package/docs/concepts/session-pruning.md +92 -0
  199. package/docs/concepts/session-tool.md +141 -0
  200. package/docs/concepts/session.md +116 -0
  201. package/docs/concepts/soul.md +110 -0
  202. package/docs/concepts/streaming.md +161 -0
  203. package/docs/concepts/system-prompt.md +182 -0
  204. package/docs/concepts/timezone.md +97 -0
  205. package/docs/concepts/typebox.md +307 -0
  206. package/docs/concepts/typing-indicators.md +69 -0
  207. package/docs/concepts/usage-tracking.md +59 -0
  208. package/docs/date-time.md +128 -0
  209. package/docs/debug/node-issue.md +85 -0
  210. package/docs/diagnostics/flags.md +91 -0
  211. package/docs/docs.json +1601 -0
  212. package/docs/gateway/authentication.md +218 -0
  213. package/docs/gateway/background-process.md +131 -0
  214. package/docs/gateway/bonjour.md +179 -0
  215. package/docs/gateway/bridge-protocol.md +89 -0
  216. package/docs/gateway/cli-backends.md +310 -0
  217. package/docs/gateway/configuration-examples.md +631 -0
  218. package/docs/gateway/configuration-reference.md +3618 -0
  219. package/docs/gateway/configuration.md +698 -0
  220. package/docs/gateway/discovery.md +141 -0
  221. package/docs/gateway/doctor.md +494 -0
  222. package/docs/gateway/gateway-lock.md +37 -0
  223. package/docs/gateway/health.md +61 -0
  224. package/docs/gateway/heartbeat.md +443 -0
  225. package/docs/gateway/index.md +367 -0
  226. package/docs/gateway/local-models.md +163 -0
  227. package/docs/gateway/logging.md +113 -0
  228. package/docs/gateway/multiple-gateways.md +120 -0
  229. package/docs/gateway/network-model.md +25 -0
  230. package/docs/gateway/openai-http-api.md +280 -0
  231. package/docs/gateway/openresponses-http-api.md +340 -0
  232. package/docs/gateway/openshell.md +307 -0
  233. package/docs/gateway/pairing.md +138 -0
  234. package/docs/gateway/protocol.md +588 -0
  235. package/docs/gateway/remote-gateway-readme.md +164 -0
  236. package/docs/gateway/remote.md +251 -0
  237. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +141 -0
  238. package/docs/gateway/sandboxing.md +473 -0
  239. package/docs/gateway/secrets-plan-contract.md +116 -0
  240. package/docs/gateway/secrets.md +541 -0
  241. package/docs/gateway/security/index.md +1362 -0
  242. package/docs/gateway/tailscale.md +136 -0
  243. package/docs/gateway/tools-invoke-http-api.md +161 -0
  244. package/docs/gateway/troubleshooting.md +451 -0
  245. package/docs/gateway/trusted-proxy-auth.md +399 -0
  246. package/docs/help/debugging.md +168 -0
  247. package/docs/help/environment.md +165 -0
  248. package/docs/help/faq.md +3244 -0
  249. package/docs/help/index.md +28 -0
  250. package/docs/help/scripts.md +27 -0
  251. package/docs/help/testing.md +640 -0
  252. package/docs/help/troubleshooting.md +372 -0
  253. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  254. package/docs/images/feishu-step2-create-app.png +0 -0
  255. package/docs/images/feishu-step3-credentials.png +0 -0
  256. package/docs/images/feishu-step4-permissions.png +0 -0
  257. package/docs/images/feishu-step5-bot-capability.png +0 -0
  258. package/docs/images/feishu-step6-event-subscription.png +0 -0
  259. package/docs/images/feishu-verification-token.png +0 -0
  260. package/docs/images/groups-flow.svg +52 -0
  261. package/docs/images/mobile-ui-screenshot.png +0 -0
  262. package/docs/index.md +196 -0
  263. package/docs/install/ansible.md +230 -0
  264. package/docs/install/azure.md +311 -0
  265. package/docs/install/bun.md +55 -0
  266. package/docs/install/clawdock.md +106 -0
  267. package/docs/install/development-channels.md +131 -0
  268. package/docs/install/digitalocean.md +129 -0
  269. package/docs/install/docker-vm-runtime.md +142 -0
  270. package/docs/install/docker.md +412 -0
  271. package/docs/install/exe-dev.md +133 -0
  272. package/docs/install/fly.md +504 -0
  273. package/docs/install/gcp.md +412 -0
  274. package/docs/install/hetzner.md +259 -0
  275. package/docs/install/index.md +212 -0
  276. package/docs/install/installer.md +443 -0
  277. package/docs/install/kubernetes.md +192 -0
  278. package/docs/install/macos-vm.md +281 -0
  279. package/docs/install/migrating-matrix.md +349 -0
  280. package/docs/install/migrating.md +112 -0
  281. package/docs/install/nix.md +89 -0
  282. package/docs/install/node.md +144 -0
  283. package/docs/install/northflank.mdx +42 -0
  284. package/docs/install/oracle.md +158 -0
  285. package/docs/install/podman.md +210 -0
  286. package/docs/install/railway.mdx +90 -0
  287. package/docs/install/raspberry-pi.md +159 -0
  288. package/docs/install/render.mdx +165 -0
  289. package/docs/install/uninstall.md +128 -0
  290. package/docs/install/updating.md +142 -0
  291. package/docs/logging.md +389 -0
  292. package/docs/nav-tabs-underline.js +100 -0
  293. package/docs/network.md +69 -0
  294. package/docs/nodes/audio.md +191 -0
  295. package/docs/nodes/camera.md +162 -0
  296. package/docs/nodes/images.md +73 -0
  297. package/docs/nodes/index.md +408 -0
  298. package/docs/nodes/location-command.md +98 -0
  299. package/docs/nodes/media-understanding.md +432 -0
  300. package/docs/nodes/talk.md +92 -0
  301. package/docs/nodes/troubleshooting.md +123 -0
  302. package/docs/nodes/voicewake.md +66 -0
  303. package/docs/perplexity.md +181 -0
  304. package/docs/pi-dev.md +80 -0
  305. package/docs/pi.md +570 -0
  306. package/docs/platforms/android.md +244 -0
  307. package/docs/platforms/digitalocean.md +266 -0
  308. package/docs/platforms/index.md +55 -0
  309. package/docs/platforms/ios.md +223 -0
  310. package/docs/platforms/linux.md +100 -0
  311. package/docs/platforms/mac/bundled-gateway.md +75 -0
  312. package/docs/platforms/mac/canvas.md +125 -0
  313. package/docs/platforms/mac/child-process.md +69 -0
  314. package/docs/platforms/mac/dev-setup.md +107 -0
  315. package/docs/platforms/mac/health.md +34 -0
  316. package/docs/platforms/mac/icon.md +31 -0
  317. package/docs/platforms/mac/logging.md +57 -0
  318. package/docs/platforms/mac/menu-bar.md +81 -0
  319. package/docs/platforms/mac/peekaboo.md +65 -0
  320. package/docs/platforms/mac/permissions.md +50 -0
  321. package/docs/platforms/mac/remote.md +84 -0
  322. package/docs/platforms/mac/signing.md +47 -0
  323. package/docs/platforms/mac/skills.md +40 -0
  324. package/docs/platforms/mac/voice-overlay.md +60 -0
  325. package/docs/platforms/mac/voicewake.md +67 -0
  326. package/docs/platforms/mac/webchat.md +51 -0
  327. package/docs/platforms/mac/xpc.md +61 -0
  328. package/docs/platforms/macos.md +229 -0
  329. package/docs/platforms/oracle.md +305 -0
  330. package/docs/platforms/raspberry-pi.md +420 -0
  331. package/docs/platforms/windows.md +241 -0
  332. package/docs/plugins/agent-tools.md +10 -0
  333. package/docs/plugins/architecture.md +1609 -0
  334. package/docs/plugins/building-extensions.md +10 -0
  335. package/docs/plugins/building-plugins.md +319 -0
  336. package/docs/plugins/bundles.md +292 -0
  337. package/docs/plugins/community.md +149 -0
  338. package/docs/plugins/manifest.md +412 -0
  339. package/docs/plugins/sdk-channel-plugins.md +508 -0
  340. package/docs/plugins/sdk-entrypoints.md +210 -0
  341. package/docs/plugins/sdk-migration.md +359 -0
  342. package/docs/plugins/sdk-overview.md +475 -0
  343. package/docs/plugins/sdk-provider-plugins.md +712 -0
  344. package/docs/plugins/sdk-runtime.md +381 -0
  345. package/docs/plugins/sdk-setup.md +516 -0
  346. package/docs/plugins/sdk-testing.md +263 -0
  347. package/docs/plugins/voice-call.md +466 -0
  348. package/docs/plugins/zalouser.md +78 -0
  349. package/docs/prose.md +134 -0
  350. package/docs/providers/anthropic.md +402 -0
  351. package/docs/providers/bedrock-mantle.md +91 -0
  352. package/docs/providers/bedrock.md +273 -0
  353. package/docs/providers/chutes.md +103 -0
  354. package/docs/providers/claude-max-api-proxy.md +163 -0
  355. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  356. package/docs/providers/deepgram.md +93 -0
  357. package/docs/providers/deepseek.md +53 -0
  358. package/docs/providers/fireworks.md +69 -0
  359. package/docs/providers/github-copilot.md +80 -0
  360. package/docs/providers/glm.md +68 -0
  361. package/docs/providers/google.md +149 -0
  362. package/docs/providers/groq.md +105 -0
  363. package/docs/providers/huggingface.md +193 -0
  364. package/docs/providers/index.md +81 -0
  365. package/docs/providers/kilocode.md +89 -0
  366. package/docs/providers/litellm.md +159 -0
  367. package/docs/providers/minimax.md +281 -0
  368. package/docs/providers/mistral.md +68 -0
  369. package/docs/providers/models.md +56 -0
  370. package/docs/providers/moonshot.md +224 -0
  371. package/docs/providers/nvidia.md +58 -0
  372. package/docs/providers/ollama.md +379 -0
  373. package/docs/providers/openai.md +472 -0
  374. package/docs/providers/opencode-go.md +45 -0
  375. package/docs/providers/opencode.md +68 -0
  376. package/docs/providers/openrouter.md +59 -0
  377. package/docs/providers/perplexity-provider.md +62 -0
  378. package/docs/providers/qianfan.md +90 -0
  379. package/docs/providers/qwen.md +128 -0
  380. package/docs/providers/qwen_modelstudio.md +137 -0
  381. package/docs/providers/sglang.md +115 -0
  382. package/docs/providers/stepfun.md +152 -0
  383. package/docs/providers/synthetic.md +101 -0
  384. package/docs/providers/together.md +70 -0
  385. package/docs/providers/venice.md +282 -0
  386. package/docs/providers/vercel-ai-gateway.md +60 -0
  387. package/docs/providers/vllm.md +103 -0
  388. package/docs/providers/volcengine.md +94 -0
  389. package/docs/providers/xai.md +94 -0
  390. package/docs/providers/xiaomi.md +89 -0
  391. package/docs/providers/zai.md +75 -0
  392. package/docs/reference/AGENTS.default.md +126 -0
  393. package/docs/reference/RELEASING.md +138 -0
  394. package/docs/reference/api-usage-costs.md +198 -0
  395. package/docs/reference/credits.md +30 -0
  396. package/docs/reference/device-models.md +47 -0
  397. package/docs/reference/memory-config.md +421 -0
  398. package/docs/reference/prompt-caching.md +344 -0
  399. package/docs/reference/rpc.md +43 -0
  400. package/docs/reference/secretref-credential-surface.md +148 -0
  401. package/docs/reference/secretref-user-supplied-credentials-matrix.json +607 -0
  402. package/docs/reference/session-management-compaction.md +352 -0
  403. package/docs/reference/templates/AGENTS.dev.md +84 -0
  404. package/docs/reference/templates/AGENTS.md +219 -0
  405. package/docs/reference/templates/BOOT.md +12 -0
  406. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  407. package/docs/reference/templates/CLAUDE.md +1 -0
  408. package/docs/reference/templates/HEARTBEAT.md +14 -0
  409. package/docs/reference/templates/IDENTITY.dev.md +48 -0
  410. package/docs/reference/templates/IDENTITY.md +30 -0
  411. package/docs/reference/templates/SOUL.dev.md +77 -0
  412. package/docs/reference/templates/SOUL.md +45 -0
  413. package/docs/reference/templates/TOOLS.dev.md +25 -0
  414. package/docs/reference/templates/TOOLS.md +47 -0
  415. package/docs/reference/templates/USER.dev.md +19 -0
  416. package/docs/reference/templates/USER.md +24 -0
  417. package/docs/reference/test.md +119 -0
  418. package/docs/reference/token-use.md +197 -0
  419. package/docs/reference/transcript-hygiene.md +151 -0
  420. package/docs/reference/wizard.md +245 -0
  421. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
  422. package/docs/security/THREAT-MODEL-ATLAS.md +608 -0
  423. package/docs/security/formal-verification.md +167 -0
  424. package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +9 -0
  425. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  426. package/docs/start/bootstrapping.md +41 -0
  427. package/docs/start/docs-directory.md +67 -0
  428. package/docs/start/getting-started.md +148 -0
  429. package/docs/start/hubs.md +199 -0
  430. package/docs/start/lore.md +219 -0
  431. package/docs/start/onboarding-overview.md +69 -0
  432. package/docs/start/onboarding.md +92 -0
  433. package/docs/start/openclaw.md +225 -0
  434. package/docs/start/quickstart.md +22 -0
  435. package/docs/start/setup.md +172 -0
  436. package/docs/start/showcase.md +418 -0
  437. package/docs/start/wizard-cli-automation.md +233 -0
  438. package/docs/start/wizard-cli-reference.md +324 -0
  439. package/docs/start/wizard.md +127 -0
  440. package/docs/style.css +37 -0
  441. package/docs/tools/acp-agents.md +837 -0
  442. package/docs/tools/agent-send.md +100 -0
  443. package/docs/tools/apply-patch.md +52 -0
  444. package/docs/tools/brave-search.md +107 -0
  445. package/docs/tools/browser-linux-troubleshooting.md +145 -0
  446. package/docs/tools/browser-login.md +73 -0
  447. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +221 -0
  448. package/docs/tools/browser.md +890 -0
  449. package/docs/tools/btw.md +142 -0
  450. package/docs/tools/capability-cookbook.md +119 -0
  451. package/docs/tools/clawhub.md +348 -0
  452. package/docs/tools/code-execution.md +90 -0
  453. package/docs/tools/creating-skills.md +119 -0
  454. package/docs/tools/diffs.md +434 -0
  455. package/docs/tools/duckduckgo-search.md +102 -0
  456. package/docs/tools/elevated.md +116 -0
  457. package/docs/tools/exa-search.md +127 -0
  458. package/docs/tools/exec-approvals.md +635 -0
  459. package/docs/tools/exec.md +237 -0
  460. package/docs/tools/firecrawl.md +147 -0
  461. package/docs/tools/gemini-search.md +98 -0
  462. package/docs/tools/grok-search.md +102 -0
  463. package/docs/tools/image-generation.md +139 -0
  464. package/docs/tools/index.md +174 -0
  465. package/docs/tools/kimi-search.md +98 -0
  466. package/docs/tools/llm-task.md +119 -0
  467. package/docs/tools/lobster.md +348 -0
  468. package/docs/tools/loop-detection.md +100 -0
  469. package/docs/tools/minimax-search.md +99 -0
  470. package/docs/tools/multi-agent-sandbox-tools.md +373 -0
  471. package/docs/tools/ollama-search.md +100 -0
  472. package/docs/tools/pdf.md +176 -0
  473. package/docs/tools/perplexity-search.md +185 -0
  474. package/docs/tools/plugin.md +348 -0
  475. package/docs/tools/reactions.md +78 -0
  476. package/docs/tools/searxng-search.md +132 -0
  477. package/docs/tools/skills-config.md +133 -0
  478. package/docs/tools/skills.md +377 -0
  479. package/docs/tools/slash-commands.md +322 -0
  480. package/docs/tools/subagents.md +341 -0
  481. package/docs/tools/tavily.md +129 -0
  482. package/docs/tools/thinking.md +102 -0
  483. package/docs/tools/tts.md +452 -0
  484. package/docs/tools/web-fetch.md +159 -0
  485. package/docs/tools/web.md +417 -0
  486. package/docs/tts.md +452 -0
  487. package/docs/vps.md +115 -0
  488. package/docs/web/control-ui.md +318 -0
  489. package/docs/web/dashboard.md +93 -0
  490. package/docs/web/index.md +126 -0
  491. package/docs/web/tui.md +176 -0
  492. package/docs/web/webchat.md +77 -0
  493. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  494. package/docs/whatsapp-openclaw.jpg +0 -0
  495. package/durar.mjs +180 -0
  496. package/package.json +1259 -0
  497. package/scripts/npm-runner.mjs +111 -0
  498. package/scripts/postinstall-bundled-plugins.mjs +188 -0
  499. package/skills/1password/SKILL.md +70 -0
  500. package/skills/1password/references/cli-examples.md +29 -0
  501. package/skills/1password/references/get-started.md +17 -0
  502. package/skills/apple-notes/SKILL.md +77 -0
  503. package/skills/apple-reminders/SKILL.md +118 -0
  504. package/skills/bear-notes/SKILL.md +107 -0
  505. package/skills/blogwatcher/SKILL.md +69 -0
  506. package/skills/blucli/SKILL.md +47 -0
  507. package/skills/bluebubbles/SKILL.md +131 -0
  508. package/skills/camsnap/SKILL.md +45 -0
  509. package/skills/canvas/SKILL.md +199 -0
  510. package/skills/clawhub/SKILL.md +77 -0
  511. package/skills/coding-agent/SKILL.md +316 -0
  512. package/skills/discord/SKILL.md +197 -0
  513. package/skills/eightctl/SKILL.md +50 -0
  514. package/skills/gemini/SKILL.md +43 -0
  515. package/skills/gh-issues/SKILL.md +885 -0
  516. package/skills/gifgrep/SKILL.md +79 -0
  517. package/skills/github/SKILL.md +163 -0
  518. package/skills/gog/SKILL.md +116 -0
  519. package/skills/goplaces/SKILL.md +52 -0
  520. package/skills/healthcheck/SKILL.md +245 -0
  521. package/skills/himalaya/SKILL.md +257 -0
  522. package/skills/himalaya/references/configuration.md +184 -0
  523. package/skills/himalaya/references/message-composition.md +199 -0
  524. package/skills/imsg/SKILL.md +122 -0
  525. package/skills/mcporter/SKILL.md +61 -0
  526. package/skills/model-usage/SKILL.md +69 -0
  527. package/skills/model-usage/references/codexbar-cli.md +33 -0
  528. package/skills/model-usage/scripts/model_usage.py +320 -0
  529. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  530. package/skills/nano-pdf/SKILL.md +38 -0
  531. package/skills/node-connect/SKILL.md +142 -0
  532. package/skills/notion/SKILL.md +174 -0
  533. package/skills/obsidian/SKILL.md +81 -0
  534. package/skills/openai-whisper/SKILL.md +38 -0
  535. package/skills/openai-whisper-api/SKILL.md +62 -0
  536. package/skills/openai-whisper-api/scripts/transcribe.sh +88 -0
  537. package/skills/openhue/SKILL.md +112 -0
  538. package/skills/oracle/SKILL.md +125 -0
  539. package/skills/ordercli/SKILL.md +78 -0
  540. package/skills/peekaboo/SKILL.md +190 -0
  541. package/skills/sag/SKILL.md +87 -0
  542. package/skills/session-logs/SKILL.md +151 -0
  543. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  544. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  545. package/skills/skill-creator/SKILL.md +372 -0
  546. package/skills/skill-creator/license.txt +202 -0
  547. package/skills/skill-creator/scripts/init_skill.py +378 -0
  548. package/skills/skill-creator/scripts/package_skill.py +139 -0
  549. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  550. package/skills/skill-creator/scripts/test_package_skill.py +160 -0
  551. package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
  552. package/skills/slack/SKILL.md +144 -0
  553. package/skills/songsee/SKILL.md +49 -0
  554. package/skills/sonoscli/SKILL.md +65 -0
  555. package/skills/spotify-player/SKILL.md +64 -0
  556. package/skills/summarize/SKILL.md +87 -0
  557. package/skills/taskflow/SKILL.md +149 -0
  558. package/skills/taskflow/examples/inbox-triage.lobster +33 -0
  559. package/skills/taskflow/examples/pr-intake.lobster +32 -0
  560. package/skills/taskflow-inbox-triage/SKILL.md +119 -0
  561. package/skills/things-mac/SKILL.md +86 -0
  562. package/skills/tmux/SKILL.md +170 -0
  563. package/skills/tmux/scripts/find-sessions.sh +112 -0
  564. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  565. package/skills/trello/SKILL.md +108 -0
  566. package/skills/video-frames/SKILL.md +46 -0
  567. package/skills/video-frames/scripts/frame.sh +81 -0
  568. package/skills/voice-call/SKILL.md +45 -0
  569. package/skills/wacli/SKILL.md +72 -0
  570. package/skills/weather/SKILL.md +129 -0
  571. package/skills/xurl/SKILL.md +461 -0
@@ -0,0 +1,141 @@
1
+ ---
2
+ summary: "Node discovery and transports (Bonjour, Tailscale, SSH) for finding the gateway"
3
+ read_when:
4
+ - Implementing or changing Bonjour discovery/advertising
5
+ - Adjusting remote connection modes (direct vs SSH)
6
+ - Designing node discovery + pairing for remote nodes
7
+ title: "Discovery and Transports"
8
+ ---
9
+
10
+ # Discovery & transports
11
+
12
+ Durar has two distinct problems that look similar on the surface:
13
+
14
+ 1. **Operator remote control**: the macOS menu bar app controlling a gateway running elsewhere.
15
+ 2. **Node pairing**: iOS/Android (and future nodes) finding a gateway and pairing securely.
16
+
17
+ The design goal is to keep all network discovery/advertising in the **Node Gateway** (`Durar gateway`) and keep clients (mac app, iOS) as consumers.
18
+
19
+ ## Terms
20
+
21
+ - **Gateway**: a single long-running gateway process that owns state (sessions, pairing, node registry) and runs channels. Most setups use one per host; isolated multi-gateway setups are possible.
22
+ - **Gateway WS (control plane)**: the WebSocket endpoint on `127.0.0.1:18789` by default; can be bound to LAN/tailnet via `gateway.bind`.
23
+ - **Direct WS transport**: a LAN/tailnet-facing Gateway WS endpoint (no SSH).
24
+ - **SSH transport (fallback)**: remote control by forwarding `127.0.0.1:18789` over SSH.
25
+ - **Legacy TCP bridge (removed)**: older node transport (see
26
+ [Bridge protocol](/gateway/bridge-protocol)); no longer advertised for
27
+ discovery and no longer part of current builds.
28
+
29
+ Protocol details:
30
+
31
+ - [Gateway protocol](/gateway/protocol)
32
+ - [Bridge protocol (legacy)](/gateway/bridge-protocol)
33
+
34
+ ## Why we keep both "direct" and SSH
35
+
36
+ - **Direct WS** is the best UX on the same network and within a tailnet:
37
+ - auto-discovery on LAN via Bonjour
38
+ - pairing tokens + ACLs owned by the gateway
39
+ - no shell access required; protocol surface can stay tight and auditable
40
+ - **SSH** remains the universal fallback:
41
+ - works anywhere you have SSH access (even across unrelated networks)
42
+ - survives multicast/mDNS issues
43
+ - requires no new inbound ports besides SSH
44
+
45
+ ## Discovery inputs (how clients learn where the gateway is)
46
+
47
+ ### 1) Bonjour / DNS-SD discovery
48
+
49
+ Multicast Bonjour is best-effort and does not cross networks. Durar can also browse the
50
+ same gateway beacon via a configured wide-area DNS-SD domain, so discovery can cover:
51
+
52
+ - `local.` on the same LAN
53
+ - a configured unicast DNS-SD domain for cross-network discovery
54
+
55
+ Target direction:
56
+
57
+ - The **gateway** advertises its WS endpoint via Bonjour.
58
+ - Clients browse and show a “pick a gateway” list, then store the chosen endpoint.
59
+
60
+ Troubleshooting and beacon details: [Bonjour](/gateway/bonjour).
61
+
62
+ #### Service beacon details
63
+
64
+ - Service types:
65
+ - `_Durar-gw._tcp` (gateway transport beacon)
66
+ - TXT keys (non-secret):
67
+ - `role=gateway`
68
+ - `transport=gateway`
69
+ - `displayName=<friendly name>` (operator-configured display name)
70
+ - `lanHost=<hostname>.local`
71
+ - `gatewayPort=18789` (Gateway WS + HTTP)
72
+ - `gatewayTls=1` (only when TLS is enabled)
73
+ - `gatewayTlsSha256=<sha256>` (only when TLS is enabled and fingerprint is available)
74
+ - `canvasPort=<port>` (canvas host port; currently the same as `gatewayPort` when the canvas host is enabled)
75
+ - `tailnetDns=<magicdns>` (optional hint; auto-detected when Tailscale is available)
76
+ - `sshPort=<port>` (mDNS full mode only; wide-area DNS-SD may omit it, in which case SSH defaults stay at `22`)
77
+ - `cliPath=<path>` (mDNS full mode only; wide-area DNS-SD still writes it as a remote-install hint)
78
+
79
+ Security notes:
80
+
81
+ - Bonjour/mDNS TXT records are **unauthenticated**. Clients must treat TXT values as UX hints only.
82
+ - Routing (host/port) should prefer the **resolved service endpoint** (SRV + A/AAAA) over TXT-provided `lanHost`, `tailnetDns`, or `gatewayPort`.
83
+ - TLS pinning must never allow an advertised `gatewayTlsSha256` to override a previously stored pin.
84
+ - iOS/Android nodes should require an explicit “trust this fingerprint” confirmation before storing a first-time pin (out-of-band verification) whenever the chosen route is secure/TLS-based.
85
+
86
+ Disable/override:
87
+
88
+ - `Durar_DISABLE_BONJOUR=1` disables advertising.
89
+ - `gateway.bind` in `~/.Durar/Durar.json` controls the Gateway bind mode.
90
+ - `Durar_SSH_PORT` overrides the SSH port advertised when `sshPort` is emitted.
91
+ - `Durar_TAILNET_DNS` publishes a `tailnetDns` hint (MagicDNS).
92
+ - `Durar_CLI_PATH` overrides the advertised CLI path.
93
+
94
+ ### 2) Tailnet (cross-network)
95
+
96
+ For London/Vienna style setups, Bonjour won’t help. The recommended “direct” target is:
97
+
98
+ - Tailscale MagicDNS name (preferred) or a stable tailnet IP.
99
+
100
+ If the gateway can detect it is running under Tailscale, it publishes `tailnetDns` as an optional hint for clients (including wide-area beacons).
101
+
102
+ The macOS app now prefers MagicDNS names over raw Tailscale IPs for gateway discovery. This improves reliability when tailnet IPs change (for example after node restarts or CGNAT reassignment), because MagicDNS names resolve to the current IP automatically.
103
+
104
+ For mobile node pairing, discovery hints do not relax transport security on tailnet/public routes:
105
+
106
+ - iOS/Android still require a secure first-time tailnet/public connect path (`wss://` or Tailscale Serve/Funnel).
107
+ - A discovered raw tailnet IP is a routing hint, not permission to use plaintext remote `ws://`.
108
+ - Private LAN direct-connect `ws://` remains supported.
109
+ - If you want the simplest Tailscale path for mobile nodes, use Tailscale Serve so discovery and the setup code both resolve to the same secure MagicDNS endpoint.
110
+
111
+ ### 3) Manual / SSH target
112
+
113
+ When there is no direct route (or direct is disabled), clients can always connect via SSH by forwarding the loopback gateway port.
114
+
115
+ See [Remote access](/gateway/remote).
116
+
117
+ ## Transport selection (client policy)
118
+
119
+ Recommended client behavior:
120
+
121
+ 1. If a paired direct endpoint is configured and reachable, use it.
122
+ 2. Else, if discovery finds a gateway on `local.` or the configured wide-area domain, offer a one-tap “Use this gateway” choice and save it as the direct endpoint.
123
+ 3. Else, if a tailnet DNS/IP is configured, try direct.
124
+ For mobile nodes on tailnet/public routes, direct means a secure endpoint, not plaintext remote `ws://`.
125
+ 4. Else, fall back to SSH.
126
+
127
+ ## Pairing + auth (direct transport)
128
+
129
+ The gateway is the source of truth for node/client admission.
130
+
131
+ - Pairing requests are created/approved/rejected in the gateway (see [Gateway pairing](/gateway/pairing)).
132
+ - The gateway enforces:
133
+ - auth (token / keypair)
134
+ - scopes/ACLs (the gateway is not a raw proxy to every method)
135
+ - rate limits
136
+
137
+ ## Responsibilities by component
138
+
139
+ - **Gateway**: advertises discovery beacons, owns pairing decisions, and hosts the WS endpoint.
140
+ - **macOS app**: helps you pick a gateway, shows pairing prompts, and uses SSH only as a fallback.
141
+ - **iOS/Android nodes**: browse Bonjour as a convenience and connect to the paired Gateway WS.
@@ -0,0 +1,494 @@
1
+ ---
2
+ summary: "Doctor command: health checks, config migrations, and repair steps"
3
+ read_when:
4
+ - Adding or modifying doctor migrations
5
+ - Introducing breaking config changes
6
+ title: "Doctor"
7
+ ---
8
+
9
+ # Doctor
10
+
11
+ `Durar doctor` is the repair + migration tool for Durar. It fixes stale
12
+ config/state, checks health, and provides actionable repair steps.
13
+
14
+ ## Quick start
15
+
16
+ ```bash
17
+ Durar doctor
18
+ ```
19
+
20
+ ### Headless / automation
21
+
22
+ ```bash
23
+ Durar doctor --yes
24
+ ```
25
+
26
+ Accept defaults without prompting (including restart/service/sandbox repair steps when applicable).
27
+
28
+ ```bash
29
+ Durar doctor --repair
30
+ ```
31
+
32
+ Apply recommended repairs without prompting (repairs + restarts where safe).
33
+
34
+ ```bash
35
+ Durar doctor --repair --force
36
+ ```
37
+
38
+ Apply aggressive repairs too (overwrites custom supervisor configs).
39
+
40
+ ```bash
41
+ Durar doctor --non-interactive
42
+ ```
43
+
44
+ Run without prompts and only apply safe migrations (config normalization + on-disk state moves). Skips restart/service/sandbox actions that require human confirmation.
45
+ Legacy state migrations run automatically when detected.
46
+
47
+ ```bash
48
+ Durar doctor --deep
49
+ ```
50
+
51
+ Scan system services for extra gateway installs (launchd/systemd/schtasks).
52
+
53
+ If you want to review changes before writing, open the config file first:
54
+
55
+ ```bash
56
+ cat ~/.Durar/Durar.json
57
+ ```
58
+
59
+ ## What it does (summary)
60
+
61
+ - Optional pre-flight update for git installs (interactive only).
62
+ - UI protocol freshness check (rebuilds Control UI when the protocol schema is newer).
63
+ - Health check + restart prompt.
64
+ - Skills status summary (eligible/missing/blocked) and plugin status.
65
+ - Config normalization for legacy values.
66
+ - Talk config migration from legacy flat `talk.*` fields into `talk.provider` + `talk.providers.<provider>`.
67
+ - Browser migration checks for legacy Chrome extension configs and Chrome MCP readiness.
68
+ - OpenCode provider override warnings (`models.providers.opencode` / `models.providers.opencode-go`).
69
+ - OAuth TLS prerequisites check for OpenAI Codex OAuth profiles.
70
+ - Legacy on-disk state migration (sessions/agent dir/WhatsApp auth).
71
+ - Legacy plugin manifest contract key migration (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders` → `contracts`).
72
+ - Legacy cron store migration (`jobId`, `schedule.cron`, top-level delivery/payload fields, payload `provider`, simple `notify: true` webhook fallback jobs).
73
+ - Session lock file inspection and stale lock cleanup.
74
+ - State integrity and permissions checks (sessions, transcripts, state dir).
75
+ - Config file permission checks (chmod 600) when running locally.
76
+ - Model auth health: checks OAuth expiry, can refresh expiring tokens, and reports auth-profile cooldown/disabled states.
77
+ - Extra workspace dir detection (`~/Durar`).
78
+ - Sandbox image repair when sandboxing is enabled.
79
+ - Legacy service migration and extra gateway detection.
80
+ - Matrix channel legacy state migration (in `--fix` / `--repair` mode).
81
+ - Gateway runtime checks (service installed but not running; cached launchd label).
82
+ - Channel status warnings (probed from the running gateway).
83
+ - Supervisor config audit (launchd/systemd/schtasks) with optional repair.
84
+ - Gateway runtime best-practice checks (Node vs Bun, version-manager paths).
85
+ - Gateway port collision diagnostics (default `18789`).
86
+ - Security warnings for open DM policies.
87
+ - Gateway auth checks for local token mode (offers token generation when no token source exists; does not overwrite token SecretRef configs).
88
+ - systemd linger check on Linux.
89
+ - Workspace bootstrap file size check (truncation/near-limit warnings for context files).
90
+ - Shell completion status check and auto-install/upgrade.
91
+ - Memory search embedding provider readiness check (local model, remote API key, or QMD binary).
92
+ - Source install checks (pnpm workspace mismatch, missing UI assets, missing tsx binary).
93
+ - Writes updated config + wizard metadata.
94
+
95
+ ## Detailed behavior and rationale
96
+
97
+ ### 0) Optional update (git installs)
98
+
99
+ If this is a git checkout and doctor is running interactively, it offers to
100
+ update (fetch/rebase/build) before running doctor.
101
+
102
+ ### 1) Config normalization
103
+
104
+ If the config contains legacy value shapes (for example `messages.ackReaction`
105
+ without a channel-specific override), doctor normalizes them into the current
106
+ schema.
107
+
108
+ That includes legacy Talk flat fields. Current public Talk config is
109
+ `talk.provider` + `talk.providers.<provider>`. Doctor rewrites old
110
+ `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` /
111
+ `talk.apiKey` shapes into the provider map.
112
+
113
+ ### 2) Legacy config key migrations
114
+
115
+ When the config contains deprecated keys, other commands refuse to run and ask
116
+ you to run `Durar doctor`.
117
+
118
+ Doctor will:
119
+
120
+ - Explain which legacy keys were found.
121
+ - Show the migration it applied.
122
+ - Rewrite `~/.Durar/Durar.json` with the updated schema.
123
+
124
+ The Gateway also auto-runs doctor migrations on startup when it detects a
125
+ legacy config format, so stale configs are repaired without manual intervention.
126
+ Cron job store migrations are handled by `Durar doctor --fix`.
127
+
128
+ Current migrations:
129
+
130
+ - `routing.allowFrom` → `channels.whatsapp.allowFrom`
131
+ - `routing.groupChat.requireMention` → `channels.whatsapp/telegram/imessage.groups."*".requireMention`
132
+ - `routing.groupChat.historyLimit` → `messages.groupChat.historyLimit`
133
+ - `routing.groupChat.mentionPatterns` → `messages.groupChat.mentionPatterns`
134
+ - `routing.queue` → `messages.queue`
135
+ - `routing.bindings` → top-level `bindings`
136
+ - `routing.agents`/`routing.defaultAgentId` → `agents.list` + `agents.list[].default`
137
+ - legacy `talk.voiceId`/`talk.voiceAliases`/`talk.modelId`/`talk.outputFormat`/`talk.apiKey` → `talk.provider` + `talk.providers.<provider>`
138
+ - `routing.agentToAgent` → `tools.agentToAgent`
139
+ - `routing.transcribeAudio` → `tools.media.audio.models`
140
+ - `messages.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `messages.tts.providers.<provider>`
141
+ - `channels.discord.voice.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `channels.discord.voice.tts.providers.<provider>`
142
+ - `channels.discord.accounts.<id>.voice.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `channels.discord.accounts.<id>.voice.tts.providers.<provider>`
143
+ - `plugins.entries.voice-call.config.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `plugins.entries.voice-call.config.tts.providers.<provider>`
144
+ - `plugins.entries.voice-call.config.provider: "log"` → `"mock"`
145
+ - `plugins.entries.voice-call.config.twilio.from` → `plugins.entries.voice-call.config.fromNumber`
146
+ - `plugins.entries.voice-call.config.streaming.sttProvider` → `plugins.entries.voice-call.config.streaming.provider`
147
+ - `plugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold`
148
+ → `plugins.entries.voice-call.config.streaming.providers.openai.*`
149
+ - `bindings[].match.accountID` → `bindings[].match.accountId`
150
+ - For channels with named `accounts` but lingering single-account top-level channel values, move those account-scoped values into the promoted account chosen for that channel (`accounts.default` for most channels; Matrix can preserve an existing matching named/default target)
151
+ - `identity` → `agents.list[].identity`
152
+ - `agent.*` → `agents.defaults` + `tools.*` (tools/elevated/exec/sandbox/subagents)
153
+ - `agent.model`/`allowedModels`/`modelAliases`/`modelFallbacks`/`imageModelFallbacks`
154
+ → `agents.defaults.models` + `agents.defaults.model.primary/fallbacks` + `agents.defaults.imageModel.primary/fallbacks`
155
+ - `browser.ssrfPolicy.allowPrivateNetwork` → `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`
156
+ - `browser.profiles.*.driver: "extension"` → `"existing-session"`
157
+ - remove `browser.relayBindHost` (legacy extension relay setting)
158
+
159
+ Doctor warnings also include account-default guidance for multi-account channels:
160
+
161
+ - If two or more `channels.<channel>.accounts` entries are configured without `channels.<channel>.defaultAccount` or `accounts.default`, doctor warns that fallback routing can pick an unexpected account.
162
+ - If `channels.<channel>.defaultAccount` is set to an unknown account ID, doctor warns and lists configured account IDs.
163
+
164
+ ### 2b) OpenCode provider overrides
165
+
166
+ If you’ve added `models.providers.opencode`, `opencode-zen`, or `opencode-go`
167
+ manually, it overrides the built-in OpenCode catalog from `@mariozechner/pi-ai`.
168
+ That can force models onto the wrong API or zero out costs. Doctor warns so you
169
+ can remove the override and restore per-model API routing + costs.
170
+
171
+ ### 2c) Browser migration and Chrome MCP readiness
172
+
173
+ If your browser config still points at the removed Chrome extension path, doctor
174
+ normalizes it to the current host-local Chrome MCP attach model:
175
+
176
+ - `browser.profiles.*.driver: "extension"` becomes `"existing-session"`
177
+ - `browser.relayBindHost` is removed
178
+
179
+ Doctor also audits the host-local Chrome MCP path when you use `defaultProfile:
180
+ "user"` or a configured `existing-session` profile:
181
+
182
+ - checks whether Google Chrome is installed on the same host for default
183
+ auto-connect profiles
184
+ - checks the detected Chrome version and warns when it is below Chrome 144
185
+ - reminds you to enable remote debugging in the browser inspect page (for
186
+ example `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging`,
187
+ or `edge://inspect/#remote-debugging`)
188
+
189
+ Doctor cannot enable the Chrome-side setting for you. Host-local Chrome MCP
190
+ still requires:
191
+
192
+ - a Chromium-based browser 144+ on the gateway/node host
193
+ - the browser running locally
194
+ - remote debugging enabled in that browser
195
+ - approving the first attach consent prompt in the browser
196
+
197
+ Readiness here is only about local attach prerequisites. Existing-session keeps
198
+ the current Chrome MCP route limits; advanced routes like `responsebody`, PDF
199
+ export, download interception, and batch actions still require a managed
200
+ browser or raw CDP profile.
201
+
202
+ This check does **not** apply to Docker, sandbox, remote-browser, or other
203
+ headless flows. Those continue to use raw CDP.
204
+
205
+ ### 2d) OAuth TLS prerequisites
206
+
207
+ When an OpenAI Codex OAuth profile is configured, doctor probes the OpenAI
208
+ authorization endpoint to verify that the local Node/OpenSSL TLS stack can
209
+ validate the certificate chain. If the probe fails with a certificate error (for
210
+ example `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`, expired cert, or self-signed cert),
211
+ doctor prints platform-specific fix guidance. On macOS with a Homebrew Node, the
212
+ fix is usually `brew postinstall ca-certificates`. With `--deep`, the probe runs
213
+ even if the gateway is healthy.
214
+
215
+ ### 3) Legacy state migrations (disk layout)
216
+
217
+ Doctor can migrate older on-disk layouts into the current structure:
218
+
219
+ - Sessions store + transcripts:
220
+ - from `~/.Durar/sessions/` to `~/.Durar/agents/<agentId>/sessions/`
221
+ - Agent dir:
222
+ - from `~/.Durar/agent/` to `~/.Durar/agents/<agentId>/agent/`
223
+ - WhatsApp auth state (Baileys):
224
+ - from legacy `~/.Durar/credentials/*.json` (except `oauth.json`)
225
+ - to `~/.Durar/credentials/whatsapp/<accountId>/...` (default account id: `default`)
226
+
227
+ These migrations are best-effort and idempotent; doctor will emit warnings when
228
+ it leaves any legacy folders behind as backups. The Gateway/CLI also auto-migrates
229
+ the legacy sessions + agent dir on startup so history/auth/models land in the
230
+ per-agent path without a manual doctor run. WhatsApp auth is intentionally only
231
+ migrated via `Durar doctor`. Talk provider/provider-map normalization now
232
+ compares by structural equality, so key-order-only diffs no longer trigger
233
+ repeat no-op `doctor --fix` changes.
234
+
235
+ ### 3a) Legacy plugin manifest migrations
236
+
237
+ Doctor scans all installed plugin manifests for deprecated top-level capability
238
+ keys (`speechProviders`, `realtimeTranscriptionProviders`,
239
+ `realtimeVoiceProviders`, `mediaUnderstandingProviders`,
240
+ `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`,
241
+ `webSearchProviders`). When found, it offers to move them into the `contracts`
242
+ object and rewrite the manifest file in-place. This migration is idempotent;
243
+ if the `contracts` key already has the same values, the legacy key is removed
244
+ without duplicating the data.
245
+
246
+ ### 3b) Legacy cron store migrations
247
+
248
+ Doctor also checks the cron job store (`~/.Durar/cron/jobs.json` by default,
249
+ or `cron.store` when overridden) for old job shapes that the scheduler still
250
+ accepts for compatibility.
251
+
252
+ Current cron cleanups include:
253
+
254
+ - `jobId` → `id`
255
+ - `schedule.cron` → `schedule.expr`
256
+ - top-level payload fields (`message`, `model`, `thinking`, ...) → `payload`
257
+ - top-level delivery fields (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
258
+ - payload `provider` delivery aliases → explicit `delivery.channel`
259
+ - simple legacy `notify: true` webhook fallback jobs → explicit `delivery.mode="webhook"` with `delivery.to=cron.webhook`
260
+
261
+ Doctor only auto-migrates `notify: true` jobs when it can do so without
262
+ changing behavior. If a job combines legacy notify fallback with an existing
263
+ non-webhook delivery mode, doctor warns and leaves that job for manual review.
264
+
265
+ ### 3c) Session lock cleanup
266
+
267
+ Doctor scans every agent session directory for stale write-lock files — files left
268
+ behind when a session exited abnormally. For each lock file found it reports:
269
+ the path, PID, whether the PID is still alive, lock age, and whether it is
270
+ considered stale (dead PID or older than 30 minutes). In `--fix` / `--repair`
271
+ mode it removes stale lock files automatically; otherwise it prints a note and
272
+ instructs you to rerun with `--fix`.
273
+
274
+ ### 4) State integrity checks (session persistence, routing, and safety)
275
+
276
+ The state directory is the operational brainstem. If it vanishes, you lose
277
+ sessions, credentials, logs, and config (unless you have backups elsewhere).
278
+
279
+ Doctor checks:
280
+
281
+ - **State dir missing**: warns about catastrophic state loss, prompts to recreate
282
+ the directory, and reminds you that it cannot recover missing data.
283
+ - **State dir permissions**: verifies writability; offers to repair permissions
284
+ (and emits a `chown` hint when owner/group mismatch is detected).
285
+ - **macOS cloud-synced state dir**: warns when state resolves under iCloud Drive
286
+ (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) or
287
+ `~/Library/CloudStorage/...` because sync-backed paths can cause slower I/O
288
+ and lock/sync races.
289
+ - **Linux SD or eMMC state dir**: warns when state resolves to an `mmcblk*`
290
+ mount source, because SD or eMMC-backed random I/O can be slower and wear
291
+ faster under session and credential writes.
292
+ - **Session dirs missing**: `sessions/` and the session store directory are
293
+ required to persist history and avoid `ENOENT` crashes.
294
+ - **Transcript mismatch**: warns when recent session entries have missing
295
+ transcript files.
296
+ - **Main session “1-line JSONL”**: flags when the main transcript has only one
297
+ line (history is not accumulating).
298
+ - **Multiple state dirs**: warns when multiple `~/.Durar` folders exist across
299
+ home directories or when `Durar_STATE_DIR` points elsewhere (history can
300
+ split between installs).
301
+ - **Remote mode reminder**: if `gateway.mode=remote`, doctor reminds you to run
302
+ it on the remote host (the state lives there).
303
+ - **Config file permissions**: warns if `~/.Durar/Durar.json` is
304
+ group/world readable and offers to tighten to `600`.
305
+
306
+ ### 5) Model auth health (OAuth expiry)
307
+
308
+ Doctor inspects OAuth profiles in the auth store, warns when tokens are
309
+ expiring/expired, and can refresh them when safe. If the Anthropic
310
+ OAuth/token profile is stale, it suggests migrating to Claude CLI or an
311
+ Anthropic API key.
312
+ Refresh prompts only appear when running interactively (TTY); `--non-interactive`
313
+ skips refresh attempts.
314
+
315
+ Doctor also reports auth profiles that are temporarily unusable due to:
316
+
317
+ - short cooldowns (rate limits/timeouts/auth failures)
318
+ - longer disables (billing/credit failures)
319
+
320
+ ### 6) Hooks model validation
321
+
322
+ If `hooks.gmail.model` is set, doctor validates the model reference against the
323
+ catalog and allowlist and warns when it won’t resolve or is disallowed.
324
+
325
+ ### 7) Sandbox image repair
326
+
327
+ When sandboxing is enabled, doctor checks Docker images and offers to build or
328
+ switch to legacy names if the current image is missing.
329
+
330
+ ### 7b) Bundled plugin runtime deps
331
+
332
+ Doctor verifies that bundled plugin runtime dependencies (for example the
333
+ Discord plugin runtime packages) are present in the Durar install root.
334
+ If any are missing, doctor reports the packages and installs them in
335
+ `Durar doctor --fix` / `Durar doctor --repair` mode.
336
+
337
+ ### 8) Gateway service migrations and cleanup hints
338
+
339
+ Doctor detects legacy gateway services (launchd/systemd/schtasks) and
340
+ offers to remove them and install the Durar service using the current gateway
341
+ port. It can also scan for extra gateway-like services and print cleanup hints.
342
+ Profile-named Durar gateway services are considered first-class and are not
343
+ flagged as "extra."
344
+
345
+ ### 8b) Startup Matrix migration
346
+
347
+ When a Matrix channel account has a pending or actionable legacy state migration,
348
+ doctor (in `--fix` / `--repair` mode) creates a pre-migration snapshot and then
349
+ runs the best-effort migration steps: legacy Matrix state migration and legacy
350
+ encrypted-state preparation. Both steps are non-fatal; errors are logged and
351
+ startup continues. In read-only mode (`Durar doctor` without `--fix`) this check
352
+ is skipped entirely.
353
+
354
+ ### 9) Security warnings
355
+
356
+ Doctor emits warnings when a provider is open to DMs without an allowlist, or
357
+ when a policy is configured in a dangerous way.
358
+
359
+ ### 10) systemd linger (Linux)
360
+
361
+ If running as a systemd user service, doctor ensures lingering is enabled so the
362
+ gateway stays alive after logout.
363
+
364
+ ### 11) Workspace status (skills, plugins, and legacy dirs)
365
+
366
+ Doctor prints a summary of the workspace state for the default agent:
367
+
368
+ - **Skills status**: counts eligible, missing-requirements, and allowlist-blocked skills.
369
+ - **Legacy workspace dirs**: warns when `~/Durar` or other legacy workspace directories
370
+ exist alongside the current workspace.
371
+ - **Plugin status**: counts loaded/disabled/errored plugins; lists plugin IDs for any
372
+ errors; reports bundle plugin capabilities.
373
+ - **Plugin compatibility warnings**: flags plugins that have compatibility issues with
374
+ the current runtime.
375
+ - **Plugin diagnostics**: surfaces any load-time warnings or errors emitted by the
376
+ plugin registry.
377
+
378
+ ### 11b) Bootstrap file size
379
+
380
+ Doctor checks whether workspace bootstrap files (for example `AGENTS.md`,
381
+ `CLAUDE.md`, or other injected context files) are near or over the configured
382
+ character budget. It reports per-file raw vs. injected character counts, truncation
383
+ percentage, truncation cause (`max/file` or `max/total`), and total injected
384
+ characters as a fraction of the total budget. When files are truncated or near
385
+ the limit, doctor prints tips for tuning `agents.defaults.bootstrapMaxChars`
386
+ and `agents.defaults.bootstrapTotalMaxChars`.
387
+
388
+ ### 11c) Shell completion
389
+
390
+ Doctor checks whether tab completion is installed for the current shell
391
+ (zsh, bash, fish, or PowerShell):
392
+
393
+ - If the shell profile uses a slow dynamic completion pattern
394
+ (`source <(Durar completion ...)`), doctor upgrades it to the faster
395
+ cached file variant.
396
+ - If completion is configured in the profile but the cache file is missing,
397
+ doctor regenerates the cache automatically.
398
+ - If no completion is configured at all, doctor prompts to install it
399
+ (interactive mode only; skipped with `--non-interactive`).
400
+
401
+ Run `Durar completion --write-state` to regenerate the cache manually.
402
+
403
+ ### 12) Gateway auth checks (local token)
404
+
405
+ Doctor checks local gateway token auth readiness.
406
+
407
+ - If token mode needs a token and no token source exists, doctor offers to generate one.
408
+ - If `gateway.auth.token` is SecretRef-managed but unavailable, doctor warns and does not overwrite it with plaintext.
409
+ - `Durar doctor --generate-gateway-token` forces generation only when no token SecretRef is configured.
410
+
411
+ ### 12b) Read-only SecretRef-aware repairs
412
+
413
+ Some repair flows need to inspect configured credentials without weakening runtime fail-fast behavior.
414
+
415
+ - `Durar doctor --fix` now uses the same read-only SecretRef summary model as status-family commands for targeted config repairs.
416
+ - Example: Telegram `allowFrom` / `groupAllowFrom` `@username` repair tries to use configured bot credentials when available.
417
+ - If the Telegram bot token is configured via SecretRef but unavailable in the current command path, doctor reports that the credential is configured-but-unavailable and skips auto-resolution instead of crashing or misreporting the token as missing.
418
+
419
+ ### 13) Gateway health check + restart
420
+
421
+ Doctor runs a health check and offers to restart the gateway when it looks
422
+ unhealthy.
423
+
424
+ ### 13b) Memory search readiness
425
+
426
+ Doctor checks whether the configured memory search embedding provider is ready
427
+ for the default agent. The behavior depends on the configured backend and provider:
428
+
429
+ - **QMD backend**: probes whether the `qmd` binary is available and startable.
430
+ If not, prints fix guidance including the npm package and a manual binary path option.
431
+ - **Explicit local provider**: checks for a local model file or a recognized
432
+ remote/downloadable model URL. If missing, suggests switching to a remote provider.
433
+ - **Explicit remote provider** (`openai`, `voyage`, etc.): verifies an API key is
434
+ present in the environment or auth store. Prints actionable fix hints if missing.
435
+ - **Auto provider**: checks local model availability first, then tries each remote
436
+ provider in auto-selection order.
437
+
438
+ When a gateway probe result is available (gateway was healthy at the time of the
439
+ check), doctor cross-references its result with the CLI-visible config and notes
440
+ any discrepancy.
441
+
442
+ Use `Durar memory status --deep` to verify embedding readiness at runtime.
443
+
444
+ ### 14) Channel status warnings
445
+
446
+ If the gateway is healthy, doctor runs a channel status probe and reports
447
+ warnings with suggested fixes.
448
+
449
+ ### 15) Supervisor config audit + repair
450
+
451
+ Doctor checks the installed supervisor config (launchd/systemd/schtasks) for
452
+ missing or outdated defaults (e.g., systemd network-online dependencies and
453
+ restart delay). When it finds a mismatch, it recommends an update and can
454
+ rewrite the service file/task to the current defaults.
455
+
456
+ Notes:
457
+
458
+ - `Durar doctor` prompts before rewriting supervisor config.
459
+ - `Durar doctor --yes` accepts the default repair prompts.
460
+ - `Durar doctor --repair` applies recommended fixes without prompts.
461
+ - `Durar doctor --repair --force` overwrites custom supervisor configs.
462
+ - If token auth requires a token and `gateway.auth.token` is SecretRef-managed, doctor service install/repair validates the SecretRef but does not persist resolved plaintext token values into supervisor service environment metadata.
463
+ - If token auth requires a token and the configured token SecretRef is unresolved, doctor blocks the install/repair path with actionable guidance.
464
+ - If both `gateway.auth.token` and `gateway.auth.password` are configured and `gateway.auth.mode` is unset, doctor blocks install/repair until mode is set explicitly.
465
+ - For Linux user-systemd units, doctor token drift checks now include both `Environment=` and `EnvironmentFile=` sources when comparing service auth metadata.
466
+ - You can always force a full rewrite via `Durar gateway install --force`.
467
+
468
+ ### 16) Gateway runtime + port diagnostics
469
+
470
+ Doctor inspects the service runtime (PID, last exit status) and warns when the
471
+ service is installed but not actually running. It also checks for port collisions
472
+ on the gateway port (default `18789`) and reports likely causes (gateway already
473
+ running, SSH tunnel).
474
+
475
+ ### 17) Gateway runtime best practices
476
+
477
+ Doctor warns when the gateway service runs on Bun or a version-managed Node path
478
+ (`nvm`, `fnm`, `volta`, `asdf`, etc.). WhatsApp + Telegram channels require Node,
479
+ and version-manager paths can break after upgrades because the service does not
480
+ load your shell init. Doctor offers to migrate to a system Node install when
481
+ available (Homebrew/apt/choco).
482
+
483
+ ### 18) Config write + wizard metadata
484
+
485
+ Doctor persists any config changes and stamps wizard metadata to record the
486
+ doctor run.
487
+
488
+ ### 19) Workspace tips (backup + memory system)
489
+
490
+ Doctor suggests a workspace memory system when missing and prints a backup tip
491
+ if the workspace is not already under git.
492
+
493
+ See [/concepts/agent-workspace](/concepts/agent-workspace) for a full guide to
494
+ workspace structure and git backup (recommended private GitHub or GitLab).
@@ -0,0 +1,37 @@
1
+ ---
2
+ summary: "Gateway singleton guard using the WebSocket listener bind"
3
+ read_when:
4
+ - Running or debugging the gateway process
5
+ - Investigating single-instance enforcement
6
+ title: "Gateway Lock"
7
+ ---
8
+
9
+ # Gateway lock
10
+
11
+ ## Why
12
+
13
+ - Ensure only one gateway instance runs per base port on the same host; additional gateways must use isolated profiles and unique ports.
14
+ - Survive crashes/SIGKILL without leaving stale lock files.
15
+ - Fail fast with a clear error when the control port is already occupied.
16
+
17
+ ## Mechanism
18
+
19
+ - The gateway binds the WebSocket listener (default `ws://127.0.0.1:18789`) immediately on startup using an exclusive TCP listener.
20
+ - If the bind fails with `EADDRINUSE`, startup throws `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`.
21
+ - The OS releases the listener automatically on any process exit, including crashes and SIGKILL—no separate lock file or cleanup step is needed.
22
+ - On shutdown the gateway closes the WebSocket server and underlying HTTP server to free the port promptly.
23
+
24
+ ## Error surface
25
+
26
+ - If another process holds the port, startup throws `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`.
27
+ - Other bind failures surface as `GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …")`.
28
+
29
+ ## Operational notes
30
+
31
+ - If the port is occupied by _another_ process, the error is the same; free the port or choose another with `Durar gateway --port <port>`.
32
+ - The macOS app still maintains its own lightweight PID guard before spawning the gateway; the runtime lock is enforced by the WebSocket bind.
33
+
34
+ ## Related
35
+
36
+ - [Multiple Gateways](/gateway/multiple-gateways) — running multiple instances with unique ports
37
+ - [Troubleshooting](/gateway/troubleshooting) — diagnosing `EADDRINUSE` and port conflicts