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,223 @@
1
+ ---
2
+ summary: "iOS node app: connect to the Gateway, pairing, canvas, and troubleshooting"
3
+ read_when:
4
+ - Pairing or reconnecting the iOS node
5
+ - Running the iOS app from source
6
+ - Debugging gateway discovery or canvas commands
7
+ title: "iOS App"
8
+ ---
9
+
10
+ # iOS App (Node)
11
+
12
+ Availability: internal preview. The iOS app is not publicly distributed yet.
13
+
14
+ ## What it does
15
+
16
+ - Connects to a Gateway over WebSocket (LAN or tailnet).
17
+ - Exposes node capabilities: Canvas, Screen snapshot, Camera capture, Location, Talk mode, Voice wake.
18
+ - Receives `node.invoke` commands and reports node status events.
19
+
20
+ ## Requirements
21
+
22
+ - Gateway running on another device (macOS, Linux, or Windows via WSL2).
23
+ - Network path:
24
+ - Same LAN via Bonjour, **or**
25
+ - Tailnet via unicast DNS-SD (example domain: `Durar.internal.`), **or**
26
+ - Manual host/port (fallback).
27
+
28
+ ## Quick start (pair + connect)
29
+
30
+ 1. Start the Gateway:
31
+
32
+ ```bash
33
+ Durar gateway --port 18789
34
+ ```
35
+
36
+ 2. In the iOS app, open Settings and pick a discovered gateway (or enable Manual Host and enter host/port).
37
+
38
+ 3. Approve the pairing request on the gateway host:
39
+
40
+ ```bash
41
+ Durar devices list
42
+ Durar devices approve <requestId>
43
+ ```
44
+
45
+ If the app retries pairing with changed auth details (role/scopes/public key),
46
+ the previous pending request is superseded and a new `requestId` is created.
47
+ Run `Durar devices list` again before approval.
48
+
49
+ 4. Verify connection:
50
+
51
+ ```bash
52
+ Durar nodes status
53
+ Durar gateway call node.list --params "{}"
54
+ ```
55
+
56
+ ## Relay-backed push for official builds
57
+
58
+ Official distributed iOS builds use the external push relay instead of publishing the raw APNs
59
+ token to the gateway.
60
+
61
+ Gateway-side requirement:
62
+
63
+ ```json5
64
+ {
65
+ gateway: {
66
+ push: {
67
+ apns: {
68
+ relay: {
69
+ baseUrl: "https://relay.example.com",
70
+ },
71
+ },
72
+ },
73
+ },
74
+ }
75
+ ```
76
+
77
+ How the flow works:
78
+
79
+ - The iOS app registers with the relay using App Attest and the app receipt.
80
+ - The relay returns an opaque relay handle plus a registration-scoped send grant.
81
+ - The iOS app fetches the paired gateway identity and includes it in relay registration, so the relay-backed registration is delegated to that specific gateway.
82
+ - The app forwards that relay-backed registration to the paired gateway with `push.apns.register`.
83
+ - The gateway uses that stored relay handle for `push.test`, background wakes, and wake nudges.
84
+ - The gateway relay base URL must match the relay URL baked into the official/TestFlight iOS build.
85
+ - If the app later connects to a different gateway or a build with a different relay base URL, it refreshes the relay registration instead of reusing the old binding.
86
+
87
+ What the gateway does **not** need for this path:
88
+
89
+ - No deployment-wide relay token.
90
+ - No direct APNs key for official/TestFlight relay-backed sends.
91
+
92
+ Expected operator flow:
93
+
94
+ 1. Install the official/TestFlight iOS build.
95
+ 2. Set `gateway.push.apns.relay.baseUrl` on the gateway.
96
+ 3. Pair the app to the gateway and let it finish connecting.
97
+ 4. The app publishes `push.apns.register` automatically after it has an APNs token, the operator session is connected, and relay registration succeeds.
98
+ 5. After that, `push.test`, reconnect wakes, and wake nudges can use the stored relay-backed registration.
99
+
100
+ Compatibility note:
101
+
102
+ - `Durar_APNS_RELAY_BASE_URL` still works as a temporary env override for the gateway.
103
+
104
+ ## Authentication and trust flow
105
+
106
+ The relay exists to enforce two constraints that direct APNs-on-gateway cannot provide for
107
+ official iOS builds:
108
+
109
+ - Only genuine Durar iOS builds distributed through Apple can use the hosted relay.
110
+ - A gateway can send relay-backed pushes only for iOS devices that paired with that specific
111
+ gateway.
112
+
113
+ Hop by hop:
114
+
115
+ 1. `iOS app -> gateway`
116
+ - The app first pairs with the gateway through the normal Gateway auth flow.
117
+ - That gives the app an authenticated node session plus an authenticated operator session.
118
+ - The operator session is used to call `gateway.identity.get`.
119
+
120
+ 2. `iOS app -> relay`
121
+ - The app calls the relay registration endpoints over HTTPS.
122
+ - Registration includes App Attest proof plus the app receipt.
123
+ - The relay validates the bundle ID, App Attest proof, and Apple receipt, and requires the
124
+ official/production distribution path.
125
+ - This is what blocks local Xcode/dev builds from using the hosted relay. A local build may be
126
+ signed, but it does not satisfy the official Apple distribution proof the relay expects.
127
+
128
+ 3. `gateway identity delegation`
129
+ - Before relay registration, the app fetches the paired gateway identity from
130
+ `gateway.identity.get`.
131
+ - The app includes that gateway identity in the relay registration payload.
132
+ - The relay returns a relay handle and a registration-scoped send grant that are delegated to
133
+ that gateway identity.
134
+
135
+ 4. `gateway -> relay`
136
+ - The gateway stores the relay handle and send grant from `push.apns.register`.
137
+ - On `push.test`, reconnect wakes, and wake nudges, the gateway signs the send request with its
138
+ own device identity.
139
+ - The relay verifies both the stored send grant and the gateway signature against the delegated
140
+ gateway identity from registration.
141
+ - Another gateway cannot reuse that stored registration, even if it somehow obtains the handle.
142
+
143
+ 5. `relay -> APNs`
144
+ - The relay owns the production APNs credentials and the raw APNs token for the official build.
145
+ - The gateway never stores the raw APNs token for relay-backed official builds.
146
+ - The relay sends the final push to APNs on behalf of the paired gateway.
147
+
148
+ Why this design was created:
149
+
150
+ - To keep production APNs credentials out of user gateways.
151
+ - To avoid storing raw official-build APNs tokens on the gateway.
152
+ - To allow hosted relay usage only for official/TestFlight Durar builds.
153
+ - To prevent one gateway from sending wake pushes to iOS devices owned by a different gateway.
154
+
155
+ Local/manual builds remain on direct APNs. If you are testing those builds without the relay, the
156
+ gateway still needs direct APNs credentials:
157
+
158
+ ```bash
159
+ export Durar_APNS_TEAM_ID="TEAMID"
160
+ export Durar_APNS_KEY_ID="KEYID"
161
+ export Durar_APNS_PRIVATE_KEY_P8="$(cat /path/to/AuthKey_KEYID.p8)"
162
+ ```
163
+
164
+ ## Discovery paths
165
+
166
+ ### Bonjour (LAN)
167
+
168
+ The iOS app browses `_Durar-gw._tcp` on `local.` and, when configured, the same
169
+ wide-area DNS-SD discovery domain. Same-LAN gateways appear automatically from `local.`;
170
+ cross-network discovery can use the configured wide-area domain without changing the beacon type.
171
+
172
+ ### Tailnet (cross-network)
173
+
174
+ If mDNS is blocked, use a unicast DNS-SD zone (choose a domain; example:
175
+ `Durar.internal.`) and Tailscale split DNS.
176
+ See [Bonjour](/gateway/bonjour) for the CoreDNS example.
177
+
178
+ ### Manual host/port
179
+
180
+ In Settings, enable **Manual Host** and enter the gateway host + port (default `18789`).
181
+
182
+ ## Canvas + A2UI
183
+
184
+ The iOS node renders a WKWebView canvas. Use `node.invoke` to drive it:
185
+
186
+ ```bash
187
+ Durar nodes invoke --node "iOS Node" --command canvas.navigate --params '{"url":"http://<gateway-host>:18789/__Durar__/canvas/"}'
188
+ ```
189
+
190
+ Notes:
191
+
192
+ - The Gateway canvas host serves `/__Durar__/canvas/` and `/__Durar__/a2ui/`.
193
+ - It is served from the Gateway HTTP server (same port as `gateway.port`, default `18789`).
194
+ - The iOS node auto-navigates to A2UI on connect when a canvas host URL is advertised.
195
+ - Return to the built-in scaffold with `canvas.navigate` and `{"url":""}`.
196
+
197
+ ### Canvas eval / snapshot
198
+
199
+ ```bash
200
+ Durar nodes invoke --node "iOS Node" --command canvas.eval --params '{"javaScript":"(() => { const {ctx} = window.__Durar; ctx.clearRect(0,0,innerWidth,innerHeight); ctx.lineWidth=6; ctx.strokeStyle=\"#ff2d55\"; ctx.beginPath(); ctx.moveTo(40,40); ctx.lineTo(innerWidth-40, innerHeight-40); ctx.stroke(); return \"ok\"; })()"}'
201
+ ```
202
+
203
+ ```bash
204
+ Durar nodes invoke --node "iOS Node" --command canvas.snapshot --params '{"maxWidth":900,"format":"jpeg"}'
205
+ ```
206
+
207
+ ## Voice wake + talk mode
208
+
209
+ - Voice wake and talk mode are available in Settings.
210
+ - iOS may suspend background audio; treat voice features as best-effort when the app is not active.
211
+
212
+ ## Common errors
213
+
214
+ - `NODE_BACKGROUND_UNAVAILABLE`: bring the iOS app to the foreground (canvas/camera/screen commands require it).
215
+ - `A2UI_HOST_NOT_CONFIGURED`: the Gateway did not advertise a canvas host URL; check `canvasHost` in [Gateway configuration](/gateway/configuration).
216
+ - Pairing prompt never appears: run `Durar devices list` and approve manually.
217
+ - Reconnect fails after reinstall: the Keychain pairing token was cleared; re-pair the node.
218
+
219
+ ## Related docs
220
+
221
+ - [Pairing](/channels/pairing)
222
+ - [Discovery](/gateway/discovery)
223
+ - [Bonjour](/gateway/bonjour)
@@ -0,0 +1,100 @@
1
+ ---
2
+ summary: "Linux support + companion app status"
3
+ read_when:
4
+ - Looking for Linux companion app status
5
+ - Planning platform coverage or contributions
6
+ title: "Linux App"
7
+ ---
8
+
9
+ # Linux App
10
+
11
+ The Gateway is fully supported on Linux. **Node is the recommended runtime**.
12
+ Bun is not recommended for the Gateway (WhatsApp/Telegram bugs).
13
+
14
+ Native Linux companion apps are planned. Contributions are welcome if you want to help build one.
15
+
16
+ ## Beginner quick path (VPS)
17
+
18
+ 1. Install Node 24 (recommended; Node 22 LTS, currently `22.14+`, still works for compatibility)
19
+ 2. `npm i -g Durar@latest`
20
+ 3. `Durar onboard --install-daemon`
21
+ 4. From your laptop: `ssh -N -L 18789:127.0.0.1:18789 <user>@<host>`
22
+ 5. Open `http://127.0.0.1:18789/` and authenticate with the configured shared secret (token by default; password if you set `gateway.auth.mode: "password"`)
23
+
24
+ Full Linux server guide: [Linux Server](/vps). Step-by-step VPS example: [exe.dev](/install/exe-dev)
25
+
26
+ ## Install
27
+
28
+ - [Getting Started](/start/getting-started)
29
+ - [Install & updates](/install/updating)
30
+ - Optional flows: [Bun (experimental)](/install/bun), [Nix](/install/nix), [Docker](/install/docker)
31
+
32
+ ## Gateway
33
+
34
+ - [Gateway runbook](/gateway)
35
+ - [Configuration](/gateway/configuration)
36
+
37
+ ## Gateway service install (CLI)
38
+
39
+ Use one of these:
40
+
41
+ ```
42
+ Durar onboard --install-daemon
43
+ ```
44
+
45
+ Or:
46
+
47
+ ```
48
+ Durar gateway install
49
+ ```
50
+
51
+ Or:
52
+
53
+ ```
54
+ Durar configure
55
+ ```
56
+
57
+ Select **Gateway service** when prompted.
58
+
59
+ Repair/migrate:
60
+
61
+ ```
62
+ Durar doctor
63
+ ```
64
+
65
+ ## System control (systemd user unit)
66
+
67
+ Durar installs a systemd **user** service by default. Use a **system**
68
+ service for shared or always-on servers. `Durar gateway install` and
69
+ `Durar onboard --install-daemon` already render the current canonical unit
70
+ for you; write one by hand only when you need a custom system/service-manager
71
+ setup. The full service guidance lives in the [Gateway runbook](/gateway).
72
+
73
+ Minimal setup:
74
+
75
+ Create `~/.config/systemd/user/Durar-gateway[-<profile>].service`:
76
+
77
+ ```
78
+ [Unit]
79
+ Description=Durar Gateway (profile: <profile>, v<version>)
80
+ After=network-online.target
81
+ Wants=network-online.target
82
+
83
+ [Service]
84
+ ExecStart=/usr/local/bin/Durar gateway --port 18789
85
+ Restart=always
86
+ RestartSec=5
87
+ TimeoutStopSec=30
88
+ TimeoutStartSec=30
89
+ SuccessExitStatus=0 143
90
+ KillMode=control-group
91
+
92
+ [Install]
93
+ WantedBy=default.target
94
+ ```
95
+
96
+ Enable it:
97
+
98
+ ```
99
+ systemctl --user enable --now Durar-gateway[-<profile>].service
100
+ ```
@@ -0,0 +1,75 @@
1
+ ---
2
+ summary: "Gateway runtime on macOS (external launchd service)"
3
+ read_when:
4
+ - Packaging Durar.app
5
+ - Debugging the macOS gateway launchd service
6
+ - Installing the gateway CLI for macOS
7
+ title: "Gateway on macOS"
8
+ ---
9
+
10
+ # Gateway on macOS (external launchd)
11
+
12
+ Durar.app no longer bundles Node/Bun or the Gateway runtime. The macOS app
13
+ expects an **external** `Durar` CLI install, does not spawn the Gateway as a
14
+ child process, and manages a per‑user launchd service to keep the Gateway
15
+ running (or attaches to an existing local Gateway if one is already running).
16
+
17
+ ## Install the CLI (required for local mode)
18
+
19
+ Node 24 is the default runtime on the Mac. Node 22 LTS, currently `22.14+`, still works for compatibility. Then install `Durar` globally:
20
+
21
+ ```bash
22
+ npm install -g Durar@<version>
23
+ ```
24
+
25
+ The macOS app’s **Install CLI** button runs the same global install flow the app
26
+ uses internally: it prefers npm first, then pnpm, then bun if that is the only
27
+ detected package manager. Node remains the recommended Gateway runtime.
28
+
29
+ ## Launchd (Gateway as LaunchAgent)
30
+
31
+ Label:
32
+
33
+ - `ai.Durar.gateway` (or `ai.Durar.<profile>`; legacy `com.Durar.*` may remain)
34
+
35
+ Plist location (per‑user):
36
+
37
+ - `~/Library/LaunchAgents/ai.Durar.gateway.plist`
38
+ (or `~/Library/LaunchAgents/ai.Durar.<profile>.plist`)
39
+
40
+ Manager:
41
+
42
+ - The macOS app owns LaunchAgent install/update in Local mode.
43
+ - The CLI can also install it: `Durar gateway install`.
44
+
45
+ Behavior:
46
+
47
+ - “Durar Active” enables/disables the LaunchAgent.
48
+ - App quit does **not** stop the gateway (launchd keeps it alive).
49
+ - If a Gateway is already running on the configured port, the app attaches to
50
+ it instead of starting a new one.
51
+
52
+ Logging:
53
+
54
+ - launchd stdout/err: `/tmp/Durar/Durar-gateway.log`
55
+
56
+ ## Version compatibility
57
+
58
+ The macOS app checks the gateway version against its own version. If they’re
59
+ incompatible, update the global CLI to match the app version.
60
+
61
+ ## Smoke check
62
+
63
+ ```bash
64
+ Durar --version
65
+
66
+ Durar_SKIP_CHANNELS=1 \
67
+ Durar_SKIP_CANVAS_HOST=1 \
68
+ Durar gateway --port 18999 --bind loopback
69
+ ```
70
+
71
+ Then:
72
+
73
+ ```bash
74
+ Durar gateway call health --url ws://127.0.0.1:18999 --timeout 3000
75
+ ```
@@ -0,0 +1,125 @@
1
+ ---
2
+ summary: "Agent-controlled Canvas panel embedded via WKWebView + custom URL scheme"
3
+ read_when:
4
+ - Implementing the macOS Canvas panel
5
+ - Adding agent controls for visual workspace
6
+ - Debugging WKWebView canvas loads
7
+ title: "Canvas"
8
+ ---
9
+
10
+ # Canvas (macOS app)
11
+
12
+ The macOS app embeds an agent‑controlled **Canvas panel** using `WKWebView`. It
13
+ is a lightweight visual workspace for HTML/CSS/JS, A2UI, and small interactive
14
+ UI surfaces.
15
+
16
+ ## Where Canvas lives
17
+
18
+ Canvas state is stored under Application Support:
19
+
20
+ - `~/Library/Application Support/Durar/canvas/<session>/...`
21
+
22
+ The Canvas panel serves those files via a **custom URL scheme**:
23
+
24
+ - `Durar-canvas://<session>/<path>`
25
+
26
+ Examples:
27
+
28
+ - `Durar-canvas://main/` → `<canvasRoot>/main/index.html`
29
+ - `Durar-canvas://main/assets/app.css` → `<canvasRoot>/main/assets/app.css`
30
+ - `Durar-canvas://main/widgets/todo/` → `<canvasRoot>/main/widgets/todo/index.html`
31
+
32
+ If no `index.html` exists at the root, the app shows a **built‑in scaffold page**.
33
+
34
+ ## Panel behavior
35
+
36
+ - Borderless, resizable panel anchored near the menu bar (or mouse cursor).
37
+ - Remembers size/position per session.
38
+ - Auto‑reloads when local canvas files change.
39
+ - Only one Canvas panel is visible at a time (session is switched as needed).
40
+
41
+ Canvas can be disabled from Settings → **Allow Canvas**. When disabled, canvas
42
+ node commands return `CANVAS_DISABLED`.
43
+
44
+ ## Agent API surface
45
+
46
+ Canvas is exposed via the **Gateway WebSocket**, so the agent can:
47
+
48
+ - show/hide the panel
49
+ - navigate to a path or URL
50
+ - evaluate JavaScript
51
+ - capture a snapshot image
52
+
53
+ CLI examples:
54
+
55
+ ```bash
56
+ Durar nodes canvas present --node <id>
57
+ Durar nodes canvas navigate --node <id> --url "/"
58
+ Durar nodes canvas eval --node <id> --js "document.title"
59
+ Durar nodes canvas snapshot --node <id>
60
+ ```
61
+
62
+ Notes:
63
+
64
+ - `canvas.navigate` accepts **local canvas paths**, `http(s)` URLs, and `file://` URLs.
65
+ - If you pass `"/"`, the Canvas shows the local scaffold or `index.html`.
66
+
67
+ ## A2UI in Canvas
68
+
69
+ A2UI is hosted by the Gateway canvas host and rendered inside the Canvas panel.
70
+ When the Gateway advertises a Canvas host, the macOS app auto‑navigates to the
71
+ A2UI host page on first open.
72
+
73
+ Default A2UI host URL:
74
+
75
+ ```
76
+ http://<gateway-host>:18789/__Durar__/a2ui/
77
+ ```
78
+
79
+ ### A2UI commands (v0.8)
80
+
81
+ Canvas currently accepts **A2UI v0.8** server→client messages:
82
+
83
+ - `beginRendering`
84
+ - `surfaceUpdate`
85
+ - `dataModelUpdate`
86
+ - `deleteSurface`
87
+
88
+ `createSurface` (v0.9) is not supported.
89
+
90
+ CLI example:
91
+
92
+ ```bash
93
+ cat > /tmp/a2ui-v0.8.jsonl <<'EOFA2'
94
+ {"surfaceUpdate":{"surfaceId":"main","components":[{"id":"root","component":{"Column":{"children":{"explicitList":["title","content"]}}}},{"id":"title","component":{"Text":{"text":{"literalString":"Canvas (A2UI v0.8)"},"usageHint":"h1"}}},{"id":"content","component":{"Text":{"text":{"literalString":"If you can read this, A2UI push works."},"usageHint":"body"}}}]}}
95
+ {"beginRendering":{"surfaceId":"main","root":"root"}}
96
+ EOFA2
97
+
98
+ Durar nodes canvas a2ui push --jsonl /tmp/a2ui-v0.8.jsonl --node <id>
99
+ ```
100
+
101
+ Quick smoke:
102
+
103
+ ```bash
104
+ Durar nodes canvas a2ui push --node <id> --text "Hello from A2UI"
105
+ ```
106
+
107
+ ## Triggering agent runs from Canvas
108
+
109
+ Canvas can trigger new agent runs via deep links:
110
+
111
+ - `Durar://agent?...`
112
+
113
+ Example (in JS):
114
+
115
+ ```js
116
+ window.location.href = "Durar://agent?message=Review%20this%20design";
117
+ ```
118
+
119
+ The app prompts for confirmation unless a valid key is provided.
120
+
121
+ ## Security notes
122
+
123
+ - Canvas scheme blocks directory traversal; files must live under the session root.
124
+ - Local Canvas content uses a custom scheme (no loopback server required).
125
+ - External `http(s)` URLs are allowed only when explicitly navigated.
@@ -0,0 +1,69 @@
1
+ ---
2
+ summary: "Gateway lifecycle on macOS (launchd)"
3
+ read_when:
4
+ - Integrating the mac app with the gateway lifecycle
5
+ title: "Gateway Lifecycle"
6
+ ---
7
+
8
+ # Gateway lifecycle on macOS
9
+
10
+ The macOS app **manages the Gateway via launchd** by default and does not spawn
11
+ the Gateway as a child process. It first tries to attach to an already‑running
12
+ Gateway on the configured port; if none is reachable, it enables the launchd
13
+ service via the external `Durar` CLI (no embedded runtime). This gives you
14
+ reliable auto‑start at login and restart on crashes.
15
+
16
+ Child‑process mode (Gateway spawned directly by the app) is **not in use** today.
17
+ If you need tighter coupling to the UI, run the Gateway manually in a terminal.
18
+
19
+ ## Default behavior (launchd)
20
+
21
+ - The app installs a per‑user LaunchAgent labeled `ai.Durar.gateway`
22
+ (or `ai.Durar.<profile>` when using `--profile`/`Durar_PROFILE`; legacy `com.Durar.*` is supported).
23
+ - When Local mode is enabled, the app ensures the LaunchAgent is loaded and
24
+ starts the Gateway if needed.
25
+ - Logs are written to the launchd gateway log path (visible in Debug Settings).
26
+
27
+ Common commands:
28
+
29
+ ```bash
30
+ launchctl kickstart -k gui/$UID/ai.Durar.gateway
31
+ launchctl bootout gui/$UID/ai.Durar.gateway
32
+ ```
33
+
34
+ Replace the label with `ai.Durar.<profile>` when running a named profile.
35
+
36
+ ## Unsigned dev builds
37
+
38
+ `scripts/restart-mac.sh --no-sign` is for fast local builds when you don’t have
39
+ signing keys. To prevent launchd from pointing at an unsigned relay binary, it:
40
+
41
+ - Writes `~/.Durar/disable-launchagent`.
42
+
43
+ Signed runs of `scripts/restart-mac.sh` clear this override if the marker is
44
+ present. To reset manually:
45
+
46
+ ```bash
47
+ rm ~/.Durar/disable-launchagent
48
+ ```
49
+
50
+ ## Attach-only mode
51
+
52
+ To force the macOS app to **never install or manage launchd**, launch it with
53
+ `--attach-only` (or `--no-launchd`). This sets `~/.Durar/disable-launchagent`,
54
+ so the app only attaches to an already running Gateway. You can toggle the same
55
+ behavior in Debug Settings.
56
+
57
+ ## Remote mode
58
+
59
+ Remote mode never starts a local Gateway. The app uses an SSH tunnel to the
60
+ remote host and connects over that tunnel.
61
+
62
+ ## Why we prefer launchd
63
+
64
+ - Auto‑start at login.
65
+ - Built‑in restart/KeepAlive semantics.
66
+ - Predictable logs and supervision.
67
+
68
+ If a true child‑process mode is ever needed again, it should be documented as a
69
+ separate, explicit dev‑only mode.
@@ -0,0 +1,107 @@
1
+ ---
2
+ summary: "Setup guide for developers working on the Durar macOS app"
3
+ read_when:
4
+ - Setting up the macOS development environment
5
+ title: "macOS Dev Setup"
6
+ ---
7
+
8
+ # macOS Developer Setup
9
+
10
+ This guide covers the necessary steps to build and run the Durar macOS application from source.
11
+
12
+ ## Prerequisites
13
+
14
+ Before building the app, ensure you have the following installed:
15
+
16
+ 1. **Xcode 26.2+**: Required for Swift development.
17
+ 2. **Node.js 24 & pnpm**: Recommended for the gateway, CLI, and packaging scripts. Node 22 LTS, currently `22.14+`, remains supported for compatibility.
18
+
19
+ ## 1. Install Dependencies
20
+
21
+ Install the project-wide dependencies:
22
+
23
+ ```bash
24
+ pnpm install
25
+ ```
26
+
27
+ ## 2. Build and Package the App
28
+
29
+ To build the macOS app and package it into `dist/Durar.app`, run:
30
+
31
+ ```bash
32
+ ./scripts/package-mac-app.sh
33
+ ```
34
+
35
+ If you don't have an Apple Developer ID certificate, the script will automatically use **ad-hoc signing** (`-`).
36
+
37
+ For dev run modes, signing flags, and Team ID troubleshooting, see the macOS app README:
38
+ [https://github.com/openclaw/openclaw/blob/main/apps/macos/README.md](https://github.com/openclaw/openclaw/blob/main/apps/macos/README.md)
39
+
40
+ > **Note**: Ad-hoc signed apps may trigger security prompts. If the app crashes immediately with "Abort trap 6", see the [Troubleshooting](#troubleshooting) section.
41
+
42
+ ## 3. Install the CLI
43
+
44
+ The macOS app expects a global `Durar` CLI install to manage background tasks.
45
+
46
+ **To install it (recommended):**
47
+
48
+ 1. Open the Durar app.
49
+ 2. Go to the **General** settings tab.
50
+ 3. Click **"Install CLI"**.
51
+
52
+ Alternatively, install it manually:
53
+
54
+ ```bash
55
+ npm install -g Durar@<version>
56
+ ```
57
+
58
+ `pnpm add -g Durar@<version>` and `bun add -g Durar@<version>` also work.
59
+ For the Gateway runtime, Node remains the recommended path.
60
+
61
+ ## Troubleshooting
62
+
63
+ ### Build Fails: Toolchain or SDK Mismatch
64
+
65
+ The macOS app build expects the latest macOS SDK and Swift 6.2 toolchain.
66
+
67
+ **System dependencies (required):**
68
+
69
+ - **Latest macOS version available in Software Update** (required by Xcode 26.2 SDKs)
70
+ - **Xcode 26.2** (Swift 6.2 toolchain)
71
+
72
+ **Checks:**
73
+
74
+ ```bash
75
+ xcodebuild -version
76
+ xcrun swift --version
77
+ ```
78
+
79
+ If versions don’t match, update macOS/Xcode and re-run the build.
80
+
81
+ ### App Crashes on Permission Grant
82
+
83
+ If the app crashes when you try to allow **Speech Recognition** or **Microphone** access, it may be due to a corrupted TCC cache or signature mismatch.
84
+
85
+ **Fix:**
86
+
87
+ 1. Reset the TCC permissions:
88
+
89
+ ```bash
90
+ tccutil reset All ai.Durar.mac.debug
91
+ ```
92
+
93
+ 2. If that fails, change the `BUNDLE_ID` temporarily in [`scripts/package-mac-app.sh`](https://github.com/openclaw/openclaw/blob/main/scripts/package-mac-app.sh) to force a "clean slate" from macOS.
94
+
95
+ ### Gateway "Starting..." indefinitely
96
+
97
+ If the gateway status stays on "Starting...", check if a zombie process is holding the port:
98
+
99
+ ```bash
100
+ Durar gateway status
101
+ Durar gateway stop
102
+
103
+ # If you're not using a LaunchAgent (dev mode / manual runs), find the listener:
104
+ lsof -nP -iTCP:18789 -sTCP:LISTEN
105
+ ```
106
+
107
+ If a manual run is holding the port, stop that process (Ctrl+C). As a last resort, kill the PID you found above.