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,399 @@
1
+ ---
2
+ title: "Trusted Proxy Auth"
3
+ summary: "Delegate gateway authentication to a trusted reverse proxy (Pomerium, Caddy, nginx + OAuth)"
4
+ read_when:
5
+ - Running Durar behind an identity-aware proxy
6
+ - Setting up Pomerium, Caddy, or nginx with OAuth in front of Durar
7
+ - Fixing WebSocket 1008 unauthorized errors with reverse proxy setups
8
+ - Deciding where to set HSTS and other HTTP hardening headers
9
+ ---
10
+
11
+ # Trusted Proxy Auth
12
+
13
+ > ⚠️ **Security-sensitive feature.** This mode delegates authentication entirely to your reverse proxy. Misconfiguration can expose your Gateway to unauthorized access. Read this page carefully before enabling.
14
+
15
+ ## When to Use
16
+
17
+ Use `trusted-proxy` auth mode when:
18
+
19
+ - You run Durar behind an **identity-aware proxy** (Pomerium, Caddy + OAuth, nginx + oauth2-proxy, Traefik + forward auth)
20
+ - Your proxy handles all authentication and passes user identity via headers
21
+ - You're in a Kubernetes or container environment where the proxy is the only path to the Gateway
22
+ - You're hitting WebSocket `1008 unauthorized` errors because browsers can't pass tokens in WS payloads
23
+
24
+ ## When NOT to Use
25
+
26
+ - If your proxy doesn't authenticate users (just a TLS terminator or load balancer)
27
+ - If there's any path to the Gateway that bypasses the proxy (firewall holes, internal network access)
28
+ - If you're unsure whether your proxy correctly strips/overwrites forwarded headers
29
+ - If you only need personal single-user access (consider Tailscale Serve + loopback for simpler setup)
30
+
31
+ ## How It Works
32
+
33
+ 1. Your reverse proxy authenticates users (OAuth, OIDC, SAML, etc.)
34
+ 2. Proxy adds a header with the authenticated user identity (e.g., `x-forwarded-user: nick@example.com`)
35
+ 3. Durar checks that the request came from a **trusted proxy IP** (configured in `gateway.trustedProxies`)
36
+ 4. Durar extracts the user identity from the configured header
37
+ 5. If everything checks out, the request is authorized
38
+
39
+ ## Control UI Pairing Behavior
40
+
41
+ When `gateway.auth.mode = "trusted-proxy"` is active and the request passes
42
+ trusted-proxy checks, Control UI WebSocket sessions can connect without device
43
+ pairing identity.
44
+
45
+ Implications:
46
+
47
+ - Pairing is no longer the primary gate for Control UI access in this mode.
48
+ - Your reverse proxy auth policy and `allowUsers` become the effective access control.
49
+ - Keep gateway ingress locked to trusted proxy IPs only (`gateway.trustedProxies` + firewall).
50
+
51
+ ## Configuration
52
+
53
+ ```json5
54
+ {
55
+ gateway: {
56
+ // Trusted-proxy auth expects requests from a non-loopback trusted proxy source
57
+ bind: "lan",
58
+
59
+ // CRITICAL: Only add your proxy's IP(s) here
60
+ trustedProxies: ["10.0.0.1", "172.17.0.1"],
61
+
62
+ auth: {
63
+ mode: "trusted-proxy",
64
+ trustedProxy: {
65
+ // Header containing authenticated user identity (required)
66
+ userHeader: "x-forwarded-user",
67
+
68
+ // Optional: headers that MUST be present (proxy verification)
69
+ requiredHeaders: ["x-forwarded-proto", "x-forwarded-host"],
70
+
71
+ // Optional: restrict to specific users (empty = allow all)
72
+ allowUsers: ["nick@example.com", "admin@company.org"],
73
+ },
74
+ },
75
+ },
76
+ }
77
+ ```
78
+
79
+ Important runtime rule:
80
+
81
+ - Trusted-proxy auth rejects loopback-source requests (`127.0.0.1`, `::1`, loopback CIDRs).
82
+ - Same-host loopback reverse proxies do **not** satisfy trusted-proxy auth.
83
+ - For same-host loopback proxy setups, use token/password auth instead, or route through a non-loopback trusted proxy address that Durar can verify.
84
+ - Non-loopback Control UI deployments still need explicit `gateway.controlUi.allowedOrigins`.
85
+
86
+ ### Configuration Reference
87
+
88
+ | Field | Required | Description |
89
+ | ------------------------------------------- | -------- | --------------------------------------------------------------------------- |
90
+ | `gateway.trustedProxies` | Yes | Array of proxy IP addresses to trust. Requests from other IPs are rejected. |
91
+ | `gateway.auth.mode` | Yes | Must be `"trusted-proxy"` |
92
+ | `gateway.auth.trustedProxy.userHeader` | Yes | Header name containing the authenticated user identity |
93
+ | `gateway.auth.trustedProxy.requiredHeaders` | No | Additional headers that must be present for the request to be trusted |
94
+ | `gateway.auth.trustedProxy.allowUsers` | No | Allowlist of user identities. Empty means allow all authenticated users. |
95
+
96
+ ## TLS termination and HSTS
97
+
98
+ Use one TLS termination point and apply HSTS there.
99
+
100
+ ### Recommended pattern: proxy TLS termination
101
+
102
+ When your reverse proxy handles HTTPS for `https://control.example.com`, set
103
+ `Strict-Transport-Security` at the proxy for that domain.
104
+
105
+ - Good fit for internet-facing deployments.
106
+ - Keeps certificate + HTTP hardening policy in one place.
107
+ - Durar can stay on loopback HTTP behind the proxy.
108
+
109
+ Example header value:
110
+
111
+ ```text
112
+ Strict-Transport-Security: max-age=31536000; includeSubDomains
113
+ ```
114
+
115
+ ### Gateway TLS termination
116
+
117
+ If Durar itself serves HTTPS directly (no TLS-terminating proxy), set:
118
+
119
+ ```json5
120
+ {
121
+ gateway: {
122
+ tls: { enabled: true },
123
+ http: {
124
+ securityHeaders: {
125
+ strictTransportSecurity: "max-age=31536000; includeSubDomains",
126
+ },
127
+ },
128
+ },
129
+ }
130
+ ```
131
+
132
+ `strictTransportSecurity` accepts a string header value, or `false` to disable explicitly.
133
+
134
+ ### Rollout guidance
135
+
136
+ - Start with a short max age first (for example `max-age=300`) while validating traffic.
137
+ - Increase to long-lived values (for example `max-age=31536000`) only after confidence is high.
138
+ - Add `includeSubDomains` only if every subdomain is HTTPS-ready.
139
+ - Use preload only if you intentionally meet preload requirements for your full domain set.
140
+ - Loopback-only local development does not benefit from HSTS.
141
+
142
+ ## Proxy Setup Examples
143
+
144
+ ### Pomerium
145
+
146
+ Pomerium passes identity in `x-pomerium-claim-email` (or other claim headers) and a JWT in `x-pomerium-jwt-assertion`.
147
+
148
+ ```json5
149
+ {
150
+ gateway: {
151
+ bind: "lan",
152
+ trustedProxies: ["10.0.0.1"], // Pomerium's IP
153
+ auth: {
154
+ mode: "trusted-proxy",
155
+ trustedProxy: {
156
+ userHeader: "x-pomerium-claim-email",
157
+ requiredHeaders: ["x-pomerium-jwt-assertion"],
158
+ },
159
+ },
160
+ },
161
+ }
162
+ ```
163
+
164
+ Pomerium config snippet:
165
+
166
+ ```yaml
167
+ routes:
168
+ - from: https://Durar.example.com
169
+ to: http://Durar-gateway:18789
170
+ policy:
171
+ - allow:
172
+ or:
173
+ - email:
174
+ is: nick@example.com
175
+ pass_identity_headers: true
176
+ ```
177
+
178
+ ### Caddy with OAuth
179
+
180
+ Caddy with the `caddy-security` plugin can authenticate users and pass identity headers.
181
+
182
+ ```json5
183
+ {
184
+ gateway: {
185
+ bind: "lan",
186
+ trustedProxies: ["10.0.0.1"], // Caddy/sidecar proxy IP
187
+ auth: {
188
+ mode: "trusted-proxy",
189
+ trustedProxy: {
190
+ userHeader: "x-forwarded-user",
191
+ },
192
+ },
193
+ },
194
+ }
195
+ ```
196
+
197
+ Caddyfile snippet:
198
+
199
+ ```
200
+ Durar.example.com {
201
+ authenticate with oauth2_provider
202
+ authorize with policy1
203
+
204
+ reverse_proxy Durar:18789 {
205
+ header_up X-Forwarded-User {http.auth.user.email}
206
+ }
207
+ }
208
+ ```
209
+
210
+ ### nginx + oauth2-proxy
211
+
212
+ oauth2-proxy authenticates users and passes identity in `x-auth-request-email`.
213
+
214
+ ```json5
215
+ {
216
+ gateway: {
217
+ bind: "lan",
218
+ trustedProxies: ["10.0.0.1"], // nginx/oauth2-proxy IP
219
+ auth: {
220
+ mode: "trusted-proxy",
221
+ trustedProxy: {
222
+ userHeader: "x-auth-request-email",
223
+ },
224
+ },
225
+ },
226
+ }
227
+ ```
228
+
229
+ nginx config snippet:
230
+
231
+ ```nginx
232
+ location / {
233
+ auth_request /oauth2/auth;
234
+ auth_request_set $user $upstream_http_x_auth_request_email;
235
+
236
+ proxy_pass http://Durar:18789;
237
+ proxy_set_header X-Auth-Request-Email $user;
238
+ proxy_http_version 1.1;
239
+ proxy_set_header Upgrade $http_upgrade;
240
+ proxy_set_header Connection "upgrade";
241
+ }
242
+ ```
243
+
244
+ ### Traefik with Forward Auth
245
+
246
+ ```json5
247
+ {
248
+ gateway: {
249
+ bind: "lan",
250
+ trustedProxies: ["172.17.0.1"], // Traefik container IP
251
+ auth: {
252
+ mode: "trusted-proxy",
253
+ trustedProxy: {
254
+ userHeader: "x-forwarded-user",
255
+ },
256
+ },
257
+ },
258
+ }
259
+ ```
260
+
261
+ ## Mixed token configuration
262
+
263
+ Durar rejects ambiguous configurations where both a `gateway.auth.token` (or `Durar_GATEWAY_TOKEN`) and `trusted-proxy` mode are active at the same time. Mixed token configs can cause loopback requests to silently authenticate on the wrong auth path.
264
+
265
+ If you see a `mixed_trusted_proxy_token` error on startup:
266
+
267
+ - Remove the shared token when using trusted-proxy mode, or
268
+ - Switch `gateway.auth.mode` to `"token"` if you intend token-based auth.
269
+
270
+ Loopback trusted-proxy auth also fails closed: same-host callers must supply the configured identity headers through a trusted proxy instead of being silently authenticated.
271
+
272
+ ## Operator scopes header
273
+
274
+ Trusted-proxy auth is an **identity-bearing** HTTP mode, so callers may
275
+ optionally declare operator scopes with `x-Durar-scopes`.
276
+
277
+ Examples:
278
+
279
+ - `x-Durar-scopes: operator.read`
280
+ - `x-Durar-scopes: operator.read,operator.write`
281
+ - `x-Durar-scopes: operator.admin,operator.write`
282
+
283
+ Behavior:
284
+
285
+ - When the header is present, Durar honors the declared scope set.
286
+ - When the header is present but empty, the request declares **no** operator scopes.
287
+ - When the header is absent, normal identity-bearing HTTP APIs fall back to the standard operator default scope set.
288
+ - Gateway-auth **plugin HTTP routes** are narrower by default: when `x-Durar-scopes` is absent, their runtime scope falls back to `operator.write`.
289
+ - Browser-origin HTTP requests still have to pass `gateway.controlUi.allowedOrigins` (or deliberate Host-header fallback mode) even after trusted-proxy auth succeeds.
290
+
291
+ Practical rule:
292
+
293
+ - Send `x-Durar-scopes` explicitly when you want a trusted-proxy request to
294
+ be narrower than the defaults, or when a gateway-auth plugin route needs
295
+ something stronger than write scope.
296
+
297
+ ## Security Checklist
298
+
299
+ Before enabling trusted-proxy auth, verify:
300
+
301
+ - [ ] **Proxy is the only path**: The Gateway port is firewalled from everything except your proxy
302
+ - [ ] **trustedProxies is minimal**: Only your actual proxy IPs, not entire subnets
303
+ - [ ] **No loopback proxy source**: trusted-proxy auth fails closed for loopback-source requests
304
+ - [ ] **Proxy strips headers**: Your proxy overwrites (not appends) `x-forwarded-*` headers from clients
305
+ - [ ] **TLS termination**: Your proxy handles TLS; users connect via HTTPS
306
+ - [ ] **allowedOrigins is explicit**: Non-loopback Control UI uses explicit `gateway.controlUi.allowedOrigins`
307
+ - [ ] **allowUsers is set** (recommended): Restrict to known users rather than allowing anyone authenticated
308
+ - [ ] **No mixed token config**: Do not set both `gateway.auth.token` and `gateway.auth.mode: "trusted-proxy"`
309
+
310
+ ## Security Audit
311
+
312
+ `Durar security audit` will flag trusted-proxy auth with a **critical** severity finding. This is intentional — it's a reminder that you're delegating security to your proxy setup.
313
+
314
+ The audit checks for:
315
+
316
+ - Base `gateway.trusted_proxy_auth` warning/critical reminder
317
+ - Missing `trustedProxies` configuration
318
+ - Missing `userHeader` configuration
319
+ - Empty `allowUsers` (allows any authenticated user)
320
+ - Wildcard or missing browser-origin policy on exposed Control UI surfaces
321
+
322
+ ## Troubleshooting
323
+
324
+ ### "trusted_proxy_untrusted_source"
325
+
326
+ The request didn't come from an IP in `gateway.trustedProxies`. Check:
327
+
328
+ - Is the proxy IP correct? (Docker container IPs can change)
329
+ - Is there a load balancer in front of your proxy?
330
+ - Use `docker inspect` or `kubectl get pods -o wide` to find actual IPs
331
+
332
+ ### "trusted_proxy_loopback_source"
333
+
334
+ Durar rejected a loopback-source trusted-proxy request.
335
+
336
+ Check:
337
+
338
+ - Is the proxy connecting from `127.0.0.1` / `::1`?
339
+ - Are you trying to use trusted-proxy auth with a same-host loopback reverse proxy?
340
+
341
+ Fix:
342
+
343
+ - Use token/password auth for same-host loopback proxy setups, or
344
+ - Route through a non-loopback trusted proxy address and keep that IP in `gateway.trustedProxies`.
345
+
346
+ ### "trusted_proxy_user_missing"
347
+
348
+ The user header was empty or missing. Check:
349
+
350
+ - Is your proxy configured to pass identity headers?
351
+ - Is the header name correct? (case-insensitive, but spelling matters)
352
+ - Is the user actually authenticated at the proxy?
353
+
354
+ ### "trusted*proxy_missing_header*\*"
355
+
356
+ A required header wasn't present. Check:
357
+
358
+ - Your proxy configuration for those specific headers
359
+ - Whether headers are being stripped somewhere in the chain
360
+
361
+ ### "trusted_proxy_user_not_allowed"
362
+
363
+ The user is authenticated but not in `allowUsers`. Either add them or remove the allowlist.
364
+
365
+ ### "trusted_proxy_origin_not_allowed"
366
+
367
+ Trusted-proxy auth succeeded, but the browser `Origin` header did not pass Control UI origin checks.
368
+
369
+ Check:
370
+
371
+ - `gateway.controlUi.allowedOrigins` includes the exact browser origin
372
+ - You are not relying on wildcard origins unless you intentionally want allow-all behavior
373
+ - If you intentionally use Host-header fallback mode, `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` is set deliberately
374
+
375
+ ### WebSocket Still Failing
376
+
377
+ Make sure your proxy:
378
+
379
+ - Supports WebSocket upgrades (`Upgrade: websocket`, `Connection: upgrade`)
380
+ - Passes the identity headers on WebSocket upgrade requests (not just HTTP)
381
+ - Doesn't have a separate auth path for WebSocket connections
382
+
383
+ ## Migration from Token Auth
384
+
385
+ If you're moving from token auth to trusted-proxy:
386
+
387
+ 1. Configure your proxy to authenticate users and pass headers
388
+ 2. Test the proxy setup independently (curl with headers)
389
+ 3. Update Durar config with trusted-proxy auth
390
+ 4. Restart the Gateway
391
+ 5. Test WebSocket connections from the Control UI
392
+ 6. Run `Durar security audit` and review findings
393
+
394
+ ## Related
395
+
396
+ - [Security](/gateway/security) — full security guide
397
+ - [Configuration](/gateway/configuration) — config reference
398
+ - [Remote Access](/gateway/remote) — other remote access patterns
399
+ - [Tailscale](/gateway/tailscale) — simpler alternative for tailnet-only access
@@ -0,0 +1,168 @@
1
+ ---
2
+ summary: "Debugging tools: watch mode, raw model streams, and tracing reasoning leakage"
3
+ read_when:
4
+ - You need to inspect raw model output for reasoning leakage
5
+ - You want to run the Gateway in watch mode while iterating
6
+ - You need a repeatable debugging workflow
7
+ title: "Debugging"
8
+ ---
9
+
10
+ # Debugging
11
+
12
+ This page covers debugging helpers for streaming output, especially when a
13
+ provider mixes reasoning into normal text.
14
+
15
+ ## Runtime debug overrides
16
+
17
+ Use `/debug` in chat to set **runtime-only** config overrides (memory, not disk).
18
+ `/debug` is disabled by default; enable with `commands.debug: true`.
19
+ This is handy when you need to toggle obscure settings without editing `Durar.json`.
20
+
21
+ Examples:
22
+
23
+ ```
24
+ /debug show
25
+ /debug set messages.responsePrefix="[Durar]"
26
+ /debug unset messages.responsePrefix
27
+ /debug reset
28
+ ```
29
+
30
+ `/debug reset` clears all overrides and returns to the on-disk config.
31
+
32
+ ## Gateway watch mode
33
+
34
+ For fast iteration, run the gateway under the file watcher:
35
+
36
+ ```bash
37
+ pnpm gateway:watch
38
+ ```
39
+
40
+ This maps to:
41
+
42
+ ```bash
43
+ node scripts/watch-node.mjs gateway --force
44
+ ```
45
+
46
+ The watcher restarts on build-relevant files under `src/`, extension source files,
47
+ extension `package.json` and `Durar.plugin.json` metadata, `tsconfig.json`,
48
+ `package.json`, and `tsdown.config.ts`. Extension metadata changes restart the
49
+ gateway without forcing a `tsdown` rebuild; source and config changes still
50
+ rebuild `dist` first.
51
+
52
+ Add any gateway CLI flags after `gateway:watch` and they will be passed through on
53
+ each restart.
54
+
55
+ ## Dev profile + dev gateway (--dev)
56
+
57
+ Use the dev profile to isolate state and spin up a safe, disposable setup for
58
+ debugging. There are **two** `--dev` flags:
59
+
60
+ - **Global `--dev` (profile):** isolates state under `~/.Durar-dev` and
61
+ defaults the gateway port to `19001` (derived ports shift with it).
62
+ - **`gateway --dev`: tells the Gateway to auto-create a default config +
63
+ workspace** when missing (and skip BOOTSTRAP.md).
64
+
65
+ Recommended flow (dev profile + dev bootstrap):
66
+
67
+ ```bash
68
+ pnpm gateway:dev
69
+ Durar_PROFILE=dev Durar tui
70
+ ```
71
+
72
+ If you don’t have a global install yet, run the CLI via `pnpm Durar ...`.
73
+
74
+ What this does:
75
+
76
+ 1. **Profile isolation** (global `--dev`)
77
+ - `Durar_PROFILE=dev`
78
+ - `Durar_STATE_DIR=~/.Durar-dev`
79
+ - `Durar_CONFIG_PATH=~/.Durar-dev/Durar.json`
80
+ - `Durar_GATEWAY_PORT=19001` (browser/canvas shift accordingly)
81
+
82
+ 2. **Dev bootstrap** (`gateway --dev`)
83
+ - Writes a minimal config if missing (`gateway.mode=local`, bind loopback).
84
+ - Sets `agent.workspace` to the dev workspace.
85
+ - Sets `agent.skipBootstrap=true` (no BOOTSTRAP.md).
86
+ - Seeds the workspace files if missing:
87
+ `AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`.
88
+ - Default identity: **C3‑PO** (protocol droid).
89
+ - Skips channel providers in dev mode (`Durar_SKIP_CHANNELS=1`).
90
+
91
+ Reset flow (fresh start):
92
+
93
+ ```bash
94
+ pnpm gateway:dev:reset
95
+ ```
96
+
97
+ Note: `--dev` is a **global** profile flag and gets eaten by some runners.
98
+ If you need to spell it out, use the env var form:
99
+
100
+ ```bash
101
+ Durar_PROFILE=dev Durar gateway --dev --reset
102
+ ```
103
+
104
+ `--reset` wipes config, credentials, sessions, and the dev workspace (using
105
+ `trash`, not `rm`), then recreates the default dev setup.
106
+
107
+ Tip: if a non‑dev gateway is already running (launchd/systemd), stop it first:
108
+
109
+ ```bash
110
+ Durar gateway stop
111
+ ```
112
+
113
+ ## Raw stream logging (Durar)
114
+
115
+ Durar can log the **raw assistant stream** before any filtering/formatting.
116
+ This is the best way to see whether reasoning is arriving as plain text deltas
117
+ (or as separate thinking blocks).
118
+
119
+ Enable it via CLI:
120
+
121
+ ```bash
122
+ pnpm gateway:watch --raw-stream
123
+ ```
124
+
125
+ Optional path override:
126
+
127
+ ```bash
128
+ pnpm gateway:watch --raw-stream --raw-stream-path ~/.Durar/logs/raw-stream.jsonl
129
+ ```
130
+
131
+ Equivalent env vars:
132
+
133
+ ```bash
134
+ Durar_RAW_STREAM=1
135
+ Durar_RAW_STREAM_PATH=~/.Durar/logs/raw-stream.jsonl
136
+ ```
137
+
138
+ Default file:
139
+
140
+ `~/.Durar/logs/raw-stream.jsonl`
141
+
142
+ ## Raw chunk logging (pi-mono)
143
+
144
+ To capture **raw OpenAI-compat chunks** before they are parsed into blocks,
145
+ pi-mono exposes a separate logger:
146
+
147
+ ```bash
148
+ PI_RAW_STREAM=1
149
+ ```
150
+
151
+ Optional path:
152
+
153
+ ```bash
154
+ PI_RAW_STREAM_PATH=~/.pi-mono/logs/raw-openai-completions.jsonl
155
+ ```
156
+
157
+ Default file:
158
+
159
+ `~/.pi-mono/logs/raw-openai-completions.jsonl`
160
+
161
+ > Note: this is only emitted by processes using pi-mono’s
162
+ > `openai-completions` provider.
163
+
164
+ ## Safety notes
165
+
166
+ - Raw stream logs can include full prompts, tool output, and user data.
167
+ - Keep logs local and delete them after debugging.
168
+ - If you share logs, scrub secrets and PII first.